diff --git a/CHANGES.md b/CHANGES.md index 3484fcf48f..35fea8834a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,50 @@ +## Changes in 1.10.2 (2023-02-10) + +🐛 Bugfixes + +- Fixes #7350 - Fix green dot only to appear for marked action ([#7530](https://github.com/vector-im/element-ios/issues/7530)) + + +## Changes in 1.10.1 (2023-02-07) + +✹ Features + +- Add mark as unread option for rooms ([#7253](https://github.com/vector-im/element-ios/issues/7253)) + +🙌 Improvements + +- Polls: add logic for fetching poll histories in rooms. ([#7293](https://github.com/vector-im/element-ios/pull/7293)) +- Poll: add a feature to load more polls in the poll history. ([#7303](https://github.com/vector-im/element-ios/pull/7303)) +- CryptoV2: Generate Crypto SDK store key ([#7310](https://github.com/vector-im/element-ios/pull/7310)) +- Poll: added poll detail in poll list hisotry with navigation to timeline ([#7314](https://github.com/vector-im/element-ios/pull/7314)) +- Backup: Display backup import progress ([#7319](https://github.com/vector-im/element-ios/pull/7319)) +- Polls: sync push rules with the one of normal messages. ([#7320](https://github.com/vector-im/element-ios/pull/7320)) +- CryptoV2: Reset Crypto SDK on logout ([#7323](https://github.com/vector-im/element-ios/pull/7323)) +- Polls: add error handling when syncing push rules with the ones of normal messages. ([#7324](https://github.com/vector-im/element-ios/pull/7324)) +- CryptoV2: Refresh notification service on crypto change ([#7332](https://github.com/vector-im/element-ios/pull/7332)) +- CryptoV2: Enable Crypto SDK for production ([#7333](https://github.com/vector-im/element-ios/pull/7333)) +- Polls: add automatic synchronization logic for poll push rules. ([#7335](https://github.com/vector-im/element-ios/pull/7335)) +- Polls: update poll history UI. ([#7341](https://github.com/vector-im/element-ios/pull/7341)) +- Upgrade MatrixSDK version ([v0.25.1](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.25.1)). +- Hide the presence info if the presence status is unknown. ([#6597](https://github.com/vector-im/element-ios/issues/6597)) +- Inform the user about decryption errors during a voice broadcast. ([#7189](https://github.com/vector-im/element-ios/issues/7189)) +- App Layout: Removed the onboarding flow ([#7298](https://github.com/vector-im/element-ios/issues/7298)) +- Improve error handling during a voice broadcast playback. ([#7311](https://github.com/vector-im/element-ios/issues/7311)) +- Labs: Rich text editor: enable list items indentation ([#7316](https://github.com/vector-im/element-ios/issues/7316)) + + +## Changes in 1.10.0 (2023-02-02) + +🙌 Improvements + +- CryptoV2: Generate Crypto SDK store key ([#7310](https://github.com/vector-im/element-ios/pull/7310)) +- Backup: Display backup import progress ([#7319](https://github.com/vector-im/element-ios/pull/7319)) +- CryptoV2: Reset Crypto SDK on logout ([#7323](https://github.com/vector-im/element-ios/pull/7323)) +- CryptoV2: Refresh notification service on crypto change ([#7332](https://github.com/vector-im/element-ios/pull/7332)) +- CryptoV2: Enable Crypto SDK for production ([#7333](https://github.com/vector-im/element-ios/pull/7333)) +- Upgrade MatrixSDK version ([v0.25.0](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.25.0)). + + ## Changes in 1.9.17 (2023-01-26) 🙌 Improvements diff --git a/Config/BuildSettings.swift b/Config/BuildSettings.swift index d267cc6783..c087337e1a 100644 --- a/Config/BuildSettings.swift +++ b/Config/BuildSettings.swift @@ -406,7 +406,7 @@ final class BuildSettings: NSObject { // MARK: - Polls - static let pollsEnabled = false // Currently disabled in Tchap. + static let pollsEnabled = false //true : Currently disabled in Tchap. static var pollsHistoryEnabled: Bool = false // MARK: - Location Sharing diff --git a/Config/CommonConfiguration.swift b/Config/CommonConfiguration.swift index 840f381d03..a19fab4278 100644 --- a/Config/CommonConfiguration.swift +++ b/Config/CommonConfiguration.swift @@ -93,11 +93,14 @@ class CommonConfiguration: NSObject, Configurable { sdkOptions.enableNewClientInformationFeature = RiotSettings.shared.enableClientInformationFeature - #if DEBUG if sdkOptions.isCryptoSDKAvailable { - sdkOptions.enableCryptoSDK = RiotSettings.shared.enableCryptoSDK + let isEnabled = RiotSettings.shared.enableCryptoSDK + MXLog.debug("[CommonConfiguration] Crypto SDK is \(isEnabled ? "enabled" : "disabled")") + sdkOptions.enableCryptoSDK = isEnabled + sdkOptions.enableStartupProgress = isEnabled + } else { + MXLog.debug("[CommonConfiguration] Crypto SDK is not available)") } - #endif } private func makeASCIIUserAgent() -> String? { diff --git a/Config/CryptoSDKConfiguration.swift b/Config/CryptoSDKConfiguration.swift new file mode 100644 index 0000000000..3c922e5473 --- /dev/null +++ b/Config/CryptoSDKConfiguration.swift @@ -0,0 +1,42 @@ +// +// Copyright 2023 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +/// Configuration for enabling / disabling Matrix Crypto SDK +@objcMembers class CryptoSDKConfiguration: NSObject { + static let shared = CryptoSDKConfiguration() + + func enable() { + guard MXSDKOptions.sharedInstance().isCryptoSDKAvailable else { + return + } + + RiotSettings.shared.enableCryptoSDK = true + MXSDKOptions.sharedInstance().enableCryptoSDK = true + MXSDKOptions.sharedInstance().enableStartupProgress = true + + MXLog.debug("[CryptoSDKConfiguration] enabling Crypto SDK") + } + + func disable() { + RiotSettings.shared.enableCryptoSDK = false + MXSDKOptions.sharedInstance().enableCryptoSDK = false + MXSDKOptions.sharedInstance().enableStartupProgress = false + + MXLog.debug("[CryptoSDKConfiguration] disabling Crypto SDK") + } +} diff --git a/Podfile b/Podfile index 6277e49019..b444deb843 100644 --- a/Podfile +++ b/Podfile @@ -16,7 +16,7 @@ use_frameworks! # - `{ :specHash => {sdk spec hash}` to depend on specific pod options (:git => 
, :podspec => 
) for MatrixSDK repo. Used by Fastfile during CI # # Warning: our internal tooling depends on the name of this variable name, so be sure not to change it -$matrixSDKVersion = '= 0.24.8' +$matrixSDKVersion = '= 0.25.1' # $matrixSDKVersion = :local # $matrixSDKVersion = { :branch => 'develop'} # $matrixSDKVersion = { :specHash => { git: 'https://git.io/fork123', branch: 'fix' } } @@ -53,8 +53,6 @@ end def import_MatrixKit_pods pod 'libPhoneNumber-iOS', '~> 0.9.13' - pod 'DTCoreText', '1.6.26' - #pod 'DTCoreText/Extension', '~> 1.6.25' pod 'Down', '~> 0.11.0' end @@ -80,7 +78,7 @@ end abstract_target 'TchapPods' do - pod 'GBDeviceInfo', '~> 6.6.0' + pod 'GBDeviceInfo', '~> 7.1.0' pod 'Reusable', '~> 4.1' pod 'KeychainAccess', '~> 4.2.2' pod 'WeakDictionary', '~> 2.0' @@ -98,7 +96,7 @@ abstract_target 'TchapPods' do # Tools pod 'SwiftGen', '~> 6.3' - pod 'SwiftLint', '~> 0.44.0' + pod 'SwiftLint', '~> 0.49.1' target "Tchap" do import_MatrixSDK diff --git a/Podfile.lock b/Podfile.lock index 9dfa9b45cd..a15dc495dc 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -21,28 +21,11 @@ PODS: - Down (0.11.0) - DSBottomSheet (0.3.0) - DSWaveformImage (6.1.1) - - DTCoreText (1.6.26): - - DTCoreText/Core (= 1.6.26) - - DTFoundation/Core (~> 1.7.5) - - DTFoundation/DTAnimatedGIF (~> 1.7.5) - - DTFoundation/DTHTMLParser (~> 1.7.5) - - DTFoundation/UIKit (~> 1.7.5) - - DTCoreText/Core (1.6.26): - - DTFoundation/Core (~> 1.7.5) - - DTFoundation/DTAnimatedGIF (~> 1.7.5) - - DTFoundation/DTHTMLParser (~> 1.7.5) - - DTFoundation/UIKit (~> 1.7.5) - - DTFoundation/Core (1.7.18) - - DTFoundation/DTAnimatedGIF (1.7.18) - - DTFoundation/DTHTMLParser (1.7.18): - - DTFoundation/Core - - DTFoundation/UIKit (1.7.18): - - DTFoundation/Core - FLEX (4.5.0) - FlowCommoniOS (1.12.2) - - GBDeviceInfo (6.6.0): - - GBDeviceInfo/Core (= 6.6.0) - - GBDeviceInfo/Core (6.6.0) + - GBDeviceInfo (7.1.0): + - GBDeviceInfo/Core (= 7.1.0) + - GBDeviceInfo/Core (7.1.0) - GZIP (1.3.0) - Introspect (0.1.4) - JitsiMeetSDK (5.0.2) @@ -55,22 +38,20 @@ PODS: - LoggerAPI (1.9.200): - Logging (~> 1.1) - Logging (1.4.0) - - MatrixSDK (0.24.8): - - MatrixSDK/Core (= 0.24.8) - - MatrixSDK/Core (0.24.8): + - MatrixSDK (0.25.1): + - MatrixSDK/Core (= 0.25.1) + - MatrixSDK/Core (0.25.1): - AFNetworking (~> 4.0.0) - GZIP (~> 1.3.0) - libbase58 (~> 0.1.4) - - MatrixSDK/CryptoSDK + - MatrixSDKCrypto (= 0.2.0) - OLMKit (~> 3.2.5) - Realm (= 10.27.0) - SwiftyBeaver (= 1.9.5) - - MatrixSDK/CryptoSDK (0.24.8): - - MatrixSDKCrypto (= 0.1.8) - - MatrixSDK/JingleCallStack (0.24.8): + - MatrixSDK/JingleCallStack (0.25.1): - JitsiMeetSDK (= 5.0.2) - MatrixSDK/Core - - MatrixSDKCrypto (0.1.8) + - MatrixSDKCrypto (0.2.0) - OLMKit (3.2.12): - OLMKit/olmc (= 3.2.12) - OLMKit/olmcpp (= 3.2.12) @@ -99,7 +80,7 @@ PODS: - BlueRSA (~> 1.0) - KituraContracts (~> 1.2) - LoggerAPI (~> 1.7) - - SwiftLint (0.44.0) + - SwiftLint (0.49.1) - SwiftyBeaver (1.9.5) - UICollectionViewLeftAlignedLayout (1.0.2) - UICollectionViewRightAlignedLayout (0.0.3) @@ -114,16 +95,15 @@ DEPENDENCIES: - Down (~> 0.11.0) - DSBottomSheet (~> 0.3) - DSWaveformImage (~> 6.1.1) - - DTCoreText (= 1.6.26) - FLEX (~> 4.5.0) - FlowCommoniOS (~> 1.12.0) - - GBDeviceInfo (~> 6.6.0) + - GBDeviceInfo (~> 7.1.0) - Introspect (~> 0.1) - KeychainAccess (~> 4.2.2) - KTCenterFlowLayout (~> 1.3.1) - libPhoneNumber-iOS (~> 0.9.13) - - MatrixSDK (= 0.24.8) - - MatrixSDK/JingleCallStack (= 0.24.8) + - MatrixSDK (= 0.25.1) + - MatrixSDK/JingleCallStack (= 0.25.1) - OLMKit - PostHog (~> 1.4.4) - ReadMoreTextView (~> 3.0.1) @@ -134,7 +114,7 @@ DEPENDENCIES: - SwiftBase32 (~> 0.9.0) - SwiftGen (~> 6.3) - SwiftJWT (~> 3.6.200) - - SwiftLint (~> 0.44.0) + - SwiftLint (~> 0.49.1) - UICollectionViewLeftAlignedLayout (~> 1.0.2) - UICollectionViewRightAlignedLayout (~> 0.0.3) - WeakDictionary (~> 2.0) @@ -150,8 +130,6 @@ SPEC REPOS: - Down - DSBottomSheet - DSWaveformImage - - DTCoreText - - DTFoundation - FLEX - FlowCommoniOS - GBDeviceInfo @@ -205,11 +183,9 @@ SPEC CHECKSUMS: Down: b6ba1bc985c9d2f4e15e3b293d2207766fa12612 DSBottomSheet: ca0ac37eb5af2dd54663f86b84382ed90a59be2a DSWaveformImage: 3c718a0cf99291887ee70d1d0c18d80101d3d9ce - DTCoreText: ec749e013f2e1f76de5e7c7634642e600a7467ce - DTFoundation: a53f8cda2489208cbc71c648be177f902ee17536 FLEX: e51461dd6f0bfb00643c262acdfea5d5d12c596b FlowCommoniOS: ca92071ab526dc89905495a37844fd7e78d1a7f2 - GBDeviceInfo: ed0db16230d2fa280e1cbb39a5a7f60f6946aaec + GBDeviceInfo: 5d62fa85bdcce3ed288d83c28789adf1173e4376 GZIP: 416858efbe66b41b206895ac6dfd5493200d95b3 Introspect: b62c4dd2063072327c21d618ef2bedc3c87bc366 JitsiMeetSDK: edcac8e2b92ee0c7f3e75bd0aefefbe9faccfc93 @@ -220,8 +196,8 @@ SPEC CHECKSUMS: libPhoneNumber-iOS: 0a32a9525cf8744fe02c5206eb30d571e38f7d75 LoggerAPI: ad9c4a6f1e32f518fdb43a1347ac14d765ab5e3d Logging: beeb016c9c80cf77042d62e83495816847ef108b - MatrixSDK: cf1c1b2a9742f7f4fad21e94bd94cd8f13c47369 - MatrixSDKCrypto: 862d9b4dbb6861da030943f5a18c39258ed7345b + MatrixSDK: 823c5c2ef8b8a769c30fa62e1be8ec801e6312e7 + MatrixSDKCrypto: e1ef22aae76b5a6f030ace21a47be83864f4ff44 OLMKit: da115f16582e47626616874e20f7bb92222c7a51 PostHog: 4b6321b521569092d4ef3a02238d9435dbaeb99f ReadMoreTextView: 19147adf93abce6d7271e14031a00303fe28720d @@ -233,7 +209,7 @@ SPEC CHECKSUMS: SwiftBase32: 9399c25a80666dc66b51e10076bf591e3bbb8f17 SwiftGen: 1366a7f71aeef49954ca5a63ba4bef6b0f24138c SwiftJWT: 88c412708f58c169d431d344c87bc79a87c830ae - SwiftLint: e96c0a8c770c7ebbc4d36c55baf9096bb65c4584 + SwiftLint: 32ee33ded0636d0905ef6911b2b67bbaeeedafa5 SwiftyBeaver: 84069991dd5dca07d7069100985badaca7f0ce82 UICollectionViewLeftAlignedLayout: 830bf6fa5bab9f9b464f62e3384f9d2e00b3c0f6 UICollectionViewRightAlignedLayout: 823eef8c567eba4a44c21bc2ffcb0d0d5f361e2d @@ -241,6 +217,6 @@ SPEC CHECKSUMS: zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb -PODFILE CHECKSUM: 3c76918930e030ea0488d550923cceb09992573a +PODFILE CHECKSUM: 121cfa9efcd7fe9e78d7201f9153d8bad9f33f0c COCOAPODS: 1.11.3 diff --git a/Riot.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Riot.xcworkspace/xcshareddata/swiftpm/Package.resolved index 34484b0a74..1e81323700 100644 --- a/Riot.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Riot.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -9,6 +9,24 @@ "version" : "4.7.0" } }, + { + "identity" : "dtcoretext", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Cocoanetics/DTCoreText", + "state" : { + "revision" : "9d2d4d2296e5d2d852a7d3c592b817d913a5d020", + "version" : "1.6.27" + } + }, + { + "identity" : "dtfoundation", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Cocoanetics/DTFoundation.git", + "state" : { + "revision" : "76062513434421cb6c8a1ae1d4f8368a7ebc2da3", + "version" : "1.7.18" + } + }, { "identity" : "maplibre-gl-native-distribution", "kind" : "remoteSourceControl", @@ -23,8 +41,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/matrix-org/matrix-wysiwyg-composer-swift", "state" : { - "revision" : "6927cb878376136c4a03d919b689af8dfbdad080", - "version" : "0.19.0" + "revision" : "3f72aeab7d7e04b52ff3f735ab79a75993f97ef2", + "version" : "0.22.0" } }, { diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/Contents.json b/Riot/Assets/Images.xcassets/AllChatsOnboarding/Contents.json deleted file mode 100644 index 73c00596a7..0000000000 --- a/Riot/Assets/Images.xcassets/AllChatsOnboarding/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/Contents.json b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/Contents.json deleted file mode 100644 index d6a6b5903f..0000000000 --- a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "all_chats_onboarding1.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "all_chats_onboarding1@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "all_chats_onboarding1@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/all_chats_onboarding1.png b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/all_chats_onboarding1.png deleted file mode 100644 index 95fb854c70..0000000000 Binary files a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/all_chats_onboarding1.png and /dev/null differ diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/all_chats_onboarding1@2x.png b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/all_chats_onboarding1@2x.png deleted file mode 100644 index 40c13c07a2..0000000000 Binary files a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/all_chats_onboarding1@2x.png and /dev/null differ diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/all_chats_onboarding1@3x.png b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/all_chats_onboarding1@3x.png deleted file mode 100644 index 8cb11ba5de..0000000000 Binary files a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding1.imageset/all_chats_onboarding1@3x.png and /dev/null differ diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/Contents.json b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/Contents.json deleted file mode 100644 index 99aa89f84e..0000000000 --- a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/Contents.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "images" : [ - { - "filename" : "all_chats_onboarding2.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "all_chats_onboarding2@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "all_chats_onboarding2@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "preserves-vector-representation" : true - } -} diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/all_chats_onboarding2.png b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/all_chats_onboarding2.png deleted file mode 100644 index 119903ee62..0000000000 Binary files a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/all_chats_onboarding2.png and /dev/null differ diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/all_chats_onboarding2@2x.png b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/all_chats_onboarding2@2x.png deleted file mode 100644 index 5e33559acc..0000000000 Binary files a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/all_chats_onboarding2@2x.png and /dev/null differ diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/all_chats_onboarding2@3x.png b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/all_chats_onboarding2@3x.png deleted file mode 100644 index b36afc8797..0000000000 Binary files a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding2.imageset/all_chats_onboarding2@3x.png and /dev/null differ diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/Contents.json b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/Contents.json deleted file mode 100644 index fd0b40307f..0000000000 --- a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "all_chats_onboarding3.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "all_chats_onboarding3@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "all_chats_onboarding3@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/all_chats_onboarding3.png b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/all_chats_onboarding3.png deleted file mode 100644 index 274db9f569..0000000000 Binary files a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/all_chats_onboarding3.png and /dev/null differ diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/all_chats_onboarding3@2x.png b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/all_chats_onboarding3@2x.png deleted file mode 100644 index 6c2ae7bbfc..0000000000 Binary files a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/all_chats_onboarding3@2x.png and /dev/null differ diff --git a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/all_chats_onboarding3@3x.png b/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/all_chats_onboarding3@3x.png deleted file mode 100644 index 8bb136ca16..0000000000 Binary files a/Riot/Assets/Images.xcassets/AllChatsOnboarding/all_chats_onboarding3.imageset/all_chats_onboarding3@3x.png and /dev/null differ diff --git a/Riot/Assets/de.lproj/Vector.strings b/Riot/Assets/de.lproj/Vector.strings index bb52fc5ea0..dc6a2b333c 100644 --- a/Riot/Assets/de.lproj/Vector.strings +++ b/Riot/Assets/de.lproj/Vector.strings @@ -2457,9 +2457,7 @@ "all_chats_all_filter" = "Alle"; "all_chats_edit_layout_show_filters" = "Filter anzeigen"; "all_chats_edit_menu_leave_space" = "%@ verlassen"; -"all_chats_onboarding_page_title3" = "RĂŒckmeldung geben"; "room_invites_empty_view_information" = "Hier erscheinen deine Einladungen."; -"all_chats_onboarding_try_it" = "Probiere es aus"; "threads_discourage_information_1" = "Dein Heimserver unterstĂŒtzt aktuell keine Threads, weshalb diese Funktion unzuverlĂ€ssig sein könnte. Manche Thread-Nachrichten könnten nicht zuverlĂ€ssig verfĂŒgbar sein. "; "all_chats_nothing_found_placeholder_title" = "Nichts gefunden."; "spaces_create_subspace_title" = "Sub-Space erstellen"; @@ -2475,16 +2473,10 @@ "room_access_settings_screen_private_message" = "Nur sichtbar und betretbar fĂŒr eingeladene Personen."; "location_sharing_allow_background_location_message" = "Wenn du deinen Echtzeit-Standort freigeben möchtest, benötigt Element den Standortzugriff auch im Hintergrund. Um den Zugriff zu gewĂ€hren, tippe auf Einstellungen > Standort und wĂ€hle „Immer“"; "space_selector_empty_view_information" = "Spaces sind eine neue Möglichkeit, RĂ€ume und Personen zu gruppieren. Erstelle einen Space, um zu beginnen."; -"all_chats_onboarding_title" = "Was ist neu"; -"all_chats_onboarding_page_message3" = "DrĂŒcke auf dein Profil um uns Wissen zu lassen, was du denkst."; -"all_chats_onboarding_page_message2" = "Greife auf deine Spaces (unten links) schneller und einfacher denn je zu."; -"all_chats_onboarding_page_title2" = "Auf Spaces zugreifen"; -"all_chats_onboarding_page_message1" = "Um dein Element zu vereinfachen, sind Tabs nun optional. Verwalte sie mit dem MenĂŒ oben rechts."; "all_chats_empty_view_information" = "Die Komplettlösung fĂŒr sichere Kommunikation unter Freunden, in Gruppen oder in Organisationen. Erstelle eine Unterhaltung oder trete einem bestehenden Raum bei, um loszulegen."; "all_chats_empty_space_information" = "Spaces sind eine neue Möglichkeit, RĂ€ume und Personen zu gruppieren. FĂŒge einen bestehenden Raum hinzu oder erstelle einen neuen mit der SchaltflĂ€che unten rechts."; "all_chats_edit_layout_sorting_options_title" = "Sortiere deine Nachrichten nach"; "space_detail_nav_title" = "Space-Details"; -"all_chats_onboarding_page_title1" = "Willkommen in einer neuen Übersicht!"; "all_chats_edit_menu_space_settings" = "Space-Einstellungen"; "all_chats_user_menu_settings" = "Nutzereinstellungen"; "room_recents_recently_viewed_section" = "KĂŒrzlich angesehen"; @@ -2722,12 +2714,24 @@ "wysiwyg_composer_format_action_quote" = "Zitat umschalten"; "wysiwyg_composer_format_action_ordered_list" = "Nummerierte Liste umschalten"; "wysiwyg_composer_format_action_unordered_list" = "Unsortierte Liste umschalten"; -"voice_broadcast_recorder_connection_error" = "Verbindungsfehler – Aufzeichnung pausiert"; +"voice_broadcast_recorder_connection_error" = "Verbindungsfehler − Aufnahme pausiert"; "poll_timeline_reply_ended_poll" = "Beendete Umfrage"; // MARK: - Launch loading "launch_loading_migrating_data" = "Migriere Daten\n%@ %%"; -"settings_labs_disable_crypto_sdk" = "Krypto-SDK ist aktiviert. Zum Deaktivieren, bitte die App neu installieren"; -"settings_labs_confirm_crypto_sdk" = "Dies kann nicht rĂŒckgĂ€ngig gemacht werden"; -"settings_labs_enable_crypto_sdk" = "Rust-basiertes Krypto-SDK aktivieren"; +"settings_labs_disable_crypto_sdk" = "Rust-Ende-zu-Ende-VerschlĂŒsselung (zum Deaktivieren abmelden)"; +"settings_labs_confirm_crypto_sdk" = "Bitte beachte, dass diese Funktion noch experimentell ist, womöglich nicht wie erwartet funktioniert und unerwĂŒnschte Nebeneffekte haben kann. Melde dich zum deaktivieren einfach ab und erneut an. Nutze diese Funktion nach eigenem Ermessen und mit Vorsicht."; +"settings_labs_enable_crypto_sdk" = "Rust-Ende-zu-Ende-VerschlĂŒsselung"; +"poll_history_no_past_poll_period_text" = "FĂŒr die vergangenen %@ Tage sind keine beendeten Umfragen verfĂŒgbar. Lade weitere Umfragen, um die der vorherigen Monate zu sehen"; +"poll_history_no_active_poll_period_text" = "FĂŒr die vergangenen %@ Tage sind keine aktiven Umfragen verfĂŒgbar. Lade weitere Umfragen, um die der vorherigen Monate zu sehen"; +"poll_history_load_more" = "Weitere Umfragen laden"; +"poll_history_loading_text" = "Zeige Umfragen an"; +"poll_history_fetching_error" = "Fehler beim Laden der Umfragen."; +"key_backup_recover_from_private_key_progress" = "%@% % abgeschlossen"; +"voice_broadcast_playback_unable_to_decrypt" = "EntschlĂŒsseln der SprachĂŒbertragung nicht möglich."; +"home_context_menu_mark_as_unread" = "Als ungelesen markieren"; +"wysiwyg_composer_format_action_un_indent" = "EinrĂŒckung verringern"; +"wysiwyg_composer_format_action_indent" = "EinrĂŒckung erhöhen"; +"settings_push_rules_error" = "Ein Fehler ist wĂ€hrend der Aktualisierung deiner Benachrichtigungseinstellungen aufgetreten. Bitte versuche die Option erneut umzuschalten."; +"poll_history_detail_view_in_timeline" = "Umfrage in Verlauf anzeigen"; diff --git a/Riot/Assets/en.lproj/Vector.strings b/Riot/Assets/en.lproj/Vector.strings index 48610ec877..5a1201b378 100644 --- a/Riot/Assets/en.lproj/Vector.strings +++ b/Riot/Assets/en.lproj/Vector.strings @@ -761,6 +761,7 @@ Tap the + to start adding people."; "settings_your_keywords" = "Your Keywords"; "settings_new_keyword" = "Add new Keyword"; "settings_mentions_and_keywords_encryption_notice" = "You won’t get notifications for mentions & keywords in encrypted rooms on mobile."; +"settings_push_rules_error" = "An error occurred when updating your notification preferences. Please try to toggle your option again."; "settings_enable_callkit" = "Integrated calling"; "settings_callkit_info" = "Receive incoming calls on your lock screen. See your %@ calls in the system's call history. If iCloud is enabled, this call history will be shared with Apple."; @@ -806,9 +807,9 @@ Tap the + to start adding people."; "settings_labs_enable_new_app_layout" = "New Application Layout"; "settings_labs_enable_wysiwyg_composer" = "Try out the rich text editor"; "settings_labs_enable_voice_broadcast" = "Voice broadcast"; -"settings_labs_enable_crypto_sdk" = "Enable new rust-based Crypto SDK"; -"settings_labs_confirm_crypto_sdk" = "This action cannot be undone"; -"settings_labs_disable_crypto_sdk" = "Crypto SDK is enabled. To disable please reinstall the app"; +"settings_labs_enable_crypto_sdk" = "Rust end-to-end encryption"; +"settings_labs_confirm_crypto_sdk" = "Please be advised that as this feature is still in its experimental stage, it may not function as expected and could potentially have unintended consequences. To revert the feature, simply log out and log back in. Use at your own discretion and with caution."; +"settings_labs_disable_crypto_sdk" = "Rust end-to-end encryption (log out to disable)"; "settings_version" = "Version %@"; "settings_olm_version" = "Olm Version %@"; @@ -1471,6 +1472,7 @@ Tap the + to start adding people."; // Recover from private key "key_backup_recover_from_private_key_info" = "Restoring backup
"; +"key_backup_recover_from_private_key_progress" = "%@%% Complete"; // Recover from passphrase @@ -2001,6 +2003,7 @@ Tap the + to start adding people."; "home_context_menu_normal_priority" = "Normal priority"; "home_context_menu_leave" = "Leave"; "home_context_menu_mark_as_read" = "Mark as read"; +"home_context_menu_mark_as_unread" = "Mark as unread"; "home_syncing" = "Syncing"; // MARK: - Favourites @@ -2227,6 +2230,7 @@ Tap the + to start adding people."; "voice_broadcast_connection_error_title" = "Connection error"; "voice_broadcast_connection_error_message" = "Unfortunately we’re unable to start a recording right now. Please try again later."; "voice_broadcast_recorder_connection_error" = "Connection error - Recording paused"; +"voice_broadcast_playback_unable_to_decrypt" = "Unable to decrypt this voice broadcast."; // MARK: - Version check @@ -2279,15 +2283,6 @@ Tap the + to start adding people."; "all_chats_edit_menu_leave_space" = "Leave %@"; "all_chats_edit_menu_space_settings" = "Space settings"; -"all_chats_onboarding_page_title1" = "Welcome to a new view!"; -"all_chats_onboarding_page_message1" = "To simplify your Element, tabs are now optional. Manage them using the top-right menu."; -"all_chats_onboarding_page_title2" = "Access Spaces"; -"all_chats_onboarding_page_message2" = "Access your Spaces (bottom-left) faster and easier than ever before."; -"all_chats_onboarding_page_title3" = "Give Feedback"; -"all_chats_onboarding_page_message3" = "Tap your profile to let us know what you think."; -"all_chats_onboarding_title" = "What's new"; -"all_chats_onboarding_try_it" = "Try it out"; - // MARK: - Room invites "room_invites_empty_view_title" = "Nothing new."; @@ -2306,10 +2301,16 @@ Tap the + to start adding people."; // MARK: - Polls history "poll_history_title" = "Poll history"; +"poll_history_loading_text" = "Displaying polls"; "poll_history_active_segment_title" = "Active polls"; "poll_history_past_segment_title" = "Past polls"; "poll_history_no_active_poll_text" = "There are no active polls in this room"; "poll_history_no_past_poll_text" = "There are no past polls in this room"; +"poll_history_no_active_poll_period_text" = "There are no active polls for the past %@ days. Load more polls to view polls for previous months"; +"poll_history_no_past_poll_period_text" = "There are no past polls for the past %@ days. Load more polls to view polls for previous months"; +"poll_history_detail_view_in_timeline" = "View poll in timeline"; +"poll_history_load_more" = "Load more polls"; +"poll_history_fetching_error" = "Error fetching polls."; // MARK: - Polls @@ -2585,8 +2586,8 @@ To enable access, tap Settings> Location and select Always"; "wysiwyg_composer_format_action_ordered_list" = "Toggle numbered list"; "wysiwyg_composer_format_action_code_block" = "Toggle code block"; "wysiwyg_composer_format_action_quote" = "Toggle quote"; - - +"wysiwyg_composer_format_action_indent" = "Increase indentation"; +"wysiwyg_composer_format_action_un_indent" = "Decrease indentation"; // Links "wysiwyg_composer_link_action_text" = "Text"; diff --git a/Riot/Assets/et.lproj/Vector.strings b/Riot/Assets/et.lproj/Vector.strings index 71ea69ebf2..04a4197ccd 100644 --- a/Riot/Assets/et.lproj/Vector.strings +++ b/Riot/Assets/et.lproj/Vector.strings @@ -1473,7 +1473,7 @@ // Mark: - Polls -"poll_edit_form_create_poll" = "Koosta ĂŒks kĂŒsitlus"; +"poll_edit_form_create_poll" = "Loo selline kĂŒsitlus"; "settings_discovery_accept_terms" = "NĂ”ustu isikutuvastusserveri tingimustega"; "poll_timeline_not_closed_action" = "Sobib"; "poll_timeline_not_closed_subtitle" = "Palun proovi uuesti"; @@ -1548,9 +1548,9 @@ // Onboarding "onboarding_splash_register_button_title" = "Loo kasutajakonto"; "poll_edit_form_poll_type_closed_description" = "Tulemusi kuvame vaid siis, kui kĂŒsitlus on lĂ”ppenud"; -"poll_edit_form_poll_type_closed" = "KĂŒsitlus on lĂ”ppenud"; +"poll_edit_form_poll_type_closed" = "Suletud valikutega kĂŒsitlus"; "poll_edit_form_poll_type_open_description" = "Osalejad nĂ€evad tulemusi peale oma valiku salvestamist"; -"poll_edit_form_poll_type_open" = "Ava kĂŒsitlus"; +"poll_edit_form_poll_type_open" = "Avatud valikutega kĂŒsitlus"; "poll_edit_form_update_failure_subtitle" = "Palun proovi uuesti"; "poll_edit_form_update_failure_title" = "KĂŒsitluse muutmine ei Ă”nnestunud"; "poll_edit_form_poll_type" = "KĂŒsitluse tĂŒĂŒp"; @@ -2417,14 +2417,6 @@ // Mark: - Room invites "room_invites_empty_view_title" = "Uut teavet ei leidu."; -"all_chats_onboarding_try_it" = "Proovi nĂŒĂŒd"; -"all_chats_onboarding_title" = "Mida on meil uut"; -"all_chats_onboarding_page_message3" = "Kui soovid meile teada anda oma arvamustest, siis klĂ”psi oma profiili ikooni."; -"all_chats_onboarding_page_title3" = "Jaga tagasisidet"; -"all_chats_onboarding_page_message2" = "Kogukonnad leiad alt vasakult kiiremini ja lihtsamini, kui varem."; -"all_chats_onboarding_page_title2" = "LigipÀÀs kogukondadele"; -"all_chats_onboarding_page_message1" = "Et Element'i kasutamine oleks lihtsam, siis kaardid on nĂŒĂŒd valikulised. Neid saad hallata ĂŒlal paremal avanevast menĂŒĂŒst."; -"all_chats_onboarding_page_title1" = "Meie liidesel on nĂŒĂŒd uus vaade!"; "all_chats_nothing_found_placeholder_message" = "Proovi muuta oma otsingut."; "all_chats_nothing_found_placeholder_title" = "Mitte midagi ei leidu."; "all_chats_empty_unreads_placeholder_message" = "Kui sul on lugemata sĂ”numeid, siis nad on siit leitavad."; @@ -2666,6 +2658,18 @@ // MARK: - Launch loading "launch_loading_migrating_data" = "TĂ”stame andmeid ĂŒmber\n%@ %%"; -"settings_labs_disable_crypto_sdk" = "Uus Crypto SDK on kasutusel. Tema vĂ€ljalĂŒlitamiseks palun paigalda rakendus uuesti"; -"settings_labs_confirm_crypto_sdk" = "Seda toimingut ei saa tagasi pöörata"; -"settings_labs_enable_crypto_sdk" = "VĂ”ta kasutusele uus Rust-keelel pĂ”hinev Crypto SDK"; +"settings_labs_disable_crypto_sdk" = "Rust'i-pĂ”hine lĂ€biv krĂŒptimine (vĂ€ljalĂŒlitamiseks pead vĂ€lja logima)"; +"settings_labs_confirm_crypto_sdk" = "Palun arvesta, et see funktsionaalsus on alles katseline ja ei pruugi toimida eesmĂ€rgipĂ€raselt. Kui ta juba on kasutusel, siis vĂ€ljalĂŒlitamiseks pead hiljem korraks vĂ”rgust vĂ€lja logima. JĂ€tka ettevaatlikult ja omal Ă€ranĂ€gemisel."; +"settings_labs_enable_crypto_sdk" = "Rust'i-pĂ”hine lĂ€biv krĂŒptimine"; +"poll_history_load_more" = "Laadi veel kĂŒsitlusi"; +"poll_history_no_active_poll_period_text" = "Möödunud %@ pĂ€eva jooksul polnud ĂŒhtegi toimumas olnud kĂŒsitlust. Varasemate kuude vaatamiseks laadi veel kĂŒsitlusi"; +"poll_history_no_past_poll_period_text" = "Möödunud %@ pĂ€eva jooksul polnud ĂŒhtegi lĂ”ppenud kĂŒsitlust. Varasemate kuude vaatamiseks laadi veel kĂŒsitlusi"; +"poll_history_loading_text" = "KĂŒsitluste kuvamise ootel"; +"poll_history_fetching_error" = "Viga kĂŒsitluste laadimisel."; +"key_backup_recover_from_private_key_progress" = "%@%% tehtud"; +"voice_broadcast_playback_unable_to_decrypt" = "Selle ringhÀÀlingukĂ”ne dekrĂŒptimine ei Ă”nnestu."; +"home_context_menu_mark_as_unread" = "MĂ€rgi mitteloetuks"; +"wysiwyg_composer_format_action_un_indent" = "VĂ€henda taandrida"; +"wysiwyg_composer_format_action_indent" = "Suurenda taandrida"; +"settings_push_rules_error" = "Teavituste eelistuste muutmisel tekkis viga. Palun proovi sama valikut uuesti sisse/vĂ€lja lĂŒlitada."; +"poll_history_detail_view_in_timeline" = "NĂ€ita kĂŒsitlust ajajoonel"; diff --git a/Riot/Assets/fr.lproj/Localizable.strings b/Riot/Assets/fr.lproj/Localizable.strings index 64f1ed5138..aae0fdf791 100644 --- a/Riot/Assets/fr.lproj/Localizable.strings +++ b/Riot/Assets/fr.lproj/Localizable.strings @@ -118,3 +118,6 @@ /* New file message from a specific person, not referencing a room. */ "LOCATION_FROM_USER" = "%@ a partagĂ© sa localisation"; + +/* New voice broadcast from a specific person, not referencing a room. */ +"VOICE_BROADCAST_FROM_USER" = "%@ a lancĂ© une diffusion vocale"; diff --git a/Riot/Assets/fr.lproj/Vector.strings b/Riot/Assets/fr.lproj/Vector.strings index 35a557929b..6afc58ce22 100644 --- a/Riot/Assets/fr.lproj/Vector.strings +++ b/Riot/Assets/fr.lproj/Vector.strings @@ -104,7 +104,7 @@ "room_recents_no_conversation" = "Aucun salon"; "room_recents_low_priority_section" = "PRIORITÉ BASSE"; "room_recents_invites_section" = "INVITATIONS"; -"room_recents_start_chat_with" = "Commencer une discussion"; +"room_recents_start_chat_with" = "Nouveau message direct"; "room_recents_create_empty_room" = "CrĂ©er un salon"; "room_recents_join_room" = "Rejoindre le salon"; "room_recents_join_room_title" = "Rejoindre un salon"; @@ -168,22 +168,22 @@ "room_participants_unknown" = "Inconnu"; "room_participants_idle" = "Inactif"; "room_participants_now" = "maintenant"; -"room_participants_ago" = "d'inactivitĂ©"; -"room_participants_action_section_admin_tools" = "Outils d'administration"; -"room_participants_action_section_direct_chats" = "Discussions directes"; -"room_participants_action_section_devices" = "Appareils"; +"room_participants_ago" = "d’inactivitĂ©"; +"room_participants_action_section_admin_tools" = "Outils d’administration"; +"room_participants_action_section_direct_chats" = "Messages directs"; +"room_participants_action_section_devices" = "Sessions"; "room_participants_action_section_other" = "Options"; "room_participants_action_invite" = "Inviter"; "room_participants_action_leave" = "Quitter ce salon"; "room_participants_action_remove" = "Exclure de ce salon"; -"room_participants_action_ban" = "Bannir de ce salon"; +"room_participants_action_ban" = "Interdire l’accĂšs au salon (dĂ©finitif)"; "room_participants_action_unban" = "RĂ©voquer le bannissement"; "room_participants_action_ignore" = "Masquer tous les messages de cet utilisateur"; "room_participants_action_unignore" = "Afficher tous les messages de cet utilisateur"; "room_participants_action_set_default_power_level" = "RĂ©trograder en utilisateur normal"; "room_participants_action_set_moderator" = "Nommer modĂ©rateur"; "room_participants_action_set_admin" = "Nommer administrateur"; -"room_participants_action_start_new_chat" = "Commencer une nouvelle discussion"; +"room_participants_action_start_new_chat" = "Nouveau message direct"; "room_participants_action_start_voice_call" = "Commencer un appel audio"; "room_participants_action_start_video_call" = "Commencer un appel vidĂ©o"; "room_participants_action_mention" = "Mentionner"; @@ -406,16 +406,16 @@ "directory_server_picker_title" = "SĂ©lectionner un rĂ©pertoire"; "directory_server_all_rooms" = "Tous les salons sur le serveur %@"; "directory_server_all_native_rooms" = "Tous les salons Matrix natifs"; -"directory_server_type_homeserver" = "Saisir un serveur d’accueil pour lister ses salons publics"; +"directory_server_type_homeserver" = "Saisir un serveur d’accueil pour lister ses forums"; "directory_server_placeholder" = "matrix.org"; // Others "you" = "Vous"; "today" = "Aujourd’hui"; "yesterday" = "Hier"; "network_offline_prompt" = "La connexion Internet semble ĂȘtre hors-ligne."; -"public_room_section_title" = "Salons forums (sur %@) :"; -"bug_report_prompt" = "L'application s'est terminĂ©e brusquement la derniĂšre fois. Voulez-vous envoyer un rapport d'erreur ?"; -"rage_shake_prompt" = "Vous semblez secouer le tĂ©lĂ©phone avec frustration. Souhaitez-vous soumettre un rapport d'erreur ?"; +"public_room_section_title" = "Forums (sur %@) :"; +"bug_report_prompt" = "L’application s’est arrĂȘtĂ©e brusquement la derniĂšre fois. Voulez-vous envoyer un rapport d’anomalie ?"; +"rage_shake_prompt" = "Vous semblez secouer le tĂ©lĂ©phone avec frustration. Souhaitez-vous soumettre un rapport d’anomalie ?"; "do_not_ask_again" = "Ne plus demander"; "camera_access_not_granted" = "%@ n’a pas la permission pour utiliser l’appareil photo, veuillez modifier les options de confidentialitĂ©"; "large_badge_value_k_format" = "%.1fK"; @@ -1343,7 +1343,7 @@ "room_details_room_name_for_dm" = "Nom"; "room_details_photo_for_dm" = "Photo"; "room_details_title_for_dm" = "DĂ©tails"; -"settings_show_NSFW_public_rooms" = "Afficher les salons publics au contenu choquant"; +"settings_show_NSFW_public_rooms" = "Afficher les forums au contenu choquant"; "external_link_confirmation_message" = "Le lien %@ vous emmĂšne vers un autre site : %@\n\nÊtes vous sĂ»r de vouloir poursuivre ?"; "external_link_confirmation_title" = "Inspectez ce lien"; "room_open_dialpad" = "PavĂ© de numĂ©rotation"; @@ -1750,7 +1750,7 @@ "set_default_power_level" = "RĂ©initialiser le rang"; "set_moderator" = "Nommer modĂ©rateur"; "set_admin" = "Nommer administrateur"; -"start_chat" = "Nouvelle conversation privĂ©e"; +"start_chat" = "Nouveau message direct"; "start_voice_call" = "Commencer un appel audio"; "start_video_call" = "Commencer un appel vidĂ©o"; "mention" = "Mentionner"; @@ -1986,8 +1986,8 @@ "membership_ban" = "Banni"; "num_members_one" = "%@ utilisateur"; "num_members_other" = "%@ utilisateurs"; -"kick" = "Expulser"; -"ban" = "Bannir"; +"kick" = "Retirer du salon (rĂ©versible)"; +"ban" = "Interdire l’accĂšs au salon (dĂ©finitif)"; "unban" = "RĂ©voquer le bannissement"; "message_unsaved_changes" = "Il y a des modifications non enregistrĂ©es. Quitter les annulera."; // Login Screen @@ -2467,7 +2467,6 @@ "room_access_space_chooser_other_spaces_section_info" = "Ce sont probablement des choses auxquelles les autres admins de %@ participent."; "authentication_choose_password_not_verified_message" = "VĂ©rifiez votre boĂźte de rĂ©ception"; "authentication_choose_password_not_verified_title" = "Email non vĂ©rifiĂ©"; -"all_chats_onboarding_page_title3" = "Donner mon avis"; // MARK: User sessions management @@ -2487,20 +2486,13 @@ // Mark: - Room invites "room_invites_empty_view_title" = "Rien de neuf."; -"all_chats_onboarding_try_it" = "Essayez"; -"all_chats_onboarding_title" = "Quoi de neuf"; -"all_chats_onboarding_page_message3" = "Appuyez sur votre profil pour nous faire vos retours."; -"all_chats_onboarding_page_message2" = "AccĂ©dez Ă  vos espaces (en bas Ă  gauche) plus rapidement et facilement qu’avant."; -"all_chats_onboarding_page_title2" = "AccĂ©der aux espaces"; -"all_chats_onboarding_page_message1" = "Pour simplifier Element, les onglets sont dĂ©sormais facultatifs. GĂ©rez les depuis le menu en haut Ă  droite."; -"all_chats_onboarding_page_title1" = "Bienvenu dans une nouvelle vue !"; "all_chats_edit_menu_space_settings" = "ParamĂštres de l’espace"; "all_chats_edit_menu_leave_space" = "Quitter %@"; "all_chats_user_menu_settings" = "ParamĂštres utilisateur"; "room_recents_recently_viewed_section" = "RĂ©cemment vus"; "all_chats_nothing_found_placeholder_message" = "Essayez d’affiner votre recherche."; "all_chats_nothing_found_placeholder_title" = "Aucun rĂ©sultat."; -"all_chats_empty_unreads_placeholder_message" = "C'est ici que vos messages non-lus s’afficheront lorsque vous en aurez."; +"all_chats_empty_unreads_placeholder_message" = "C'est ici que vos messages non lus s’afficheront lorsque vous en aurez."; "all_chats_empty_list_placeholder_title" = "Plus rien Ă  voir."; "all_chats_empty_view_information" = "La messagerie sĂ©curisĂ©e tout en un pour les Ă©quipes, les amis, et les organisations. CrĂ©ez une discussion ou rejoignez un salon pour dĂ©marrer."; "all_chats_empty_space_information" = "Les espaces sont un nouveau moyen de grouper les salons et les gens. Ajoutez un salon, ou crĂ©ez en un nouveau Ă  l’aide du bouton en bas Ă  droite."; @@ -2516,14 +2508,14 @@ "all_chats_edit_layout_add_filters_title" = "Filtrez vos messages"; "all_chats_edit_layout_add_section_message" = "Épinglez des sections Ă  l’accueil pour y accĂ©der plus rapidement"; "all_chats_edit_layout_add_section_title" = "Ajouter une section Ă  l’accueil"; -"all_chats_edit_layout_unreads" = "Non-lus"; +"all_chats_edit_layout_unreads" = "Non lus"; "all_chats_edit_layout_recents" = "RĂ©cents"; "all_chats_edit_layout" = "PrĂ©fĂ©rences d’agencement"; "all_chats_section_title" = "Discussions"; // Mark: - All Chats -"all_chats_title" = "Tous mes chats"; +"all_chats_title" = "Accueil"; "spaces_subspace_creation_visibility_message" = "L’espace crĂ©Ă© sera ajoutĂ© Ă  %@."; "spaces_subspace_creation_visibility_title" = "Quel type de sous-espace voulez-vous crĂ©er ?"; "spaces_explore_rooms_format" = "Parcourir %@"; @@ -2564,7 +2556,7 @@ "device_name_desktop" = "%@ Bureau"; "user_inactive_session_item_with_date" = "Inactif depuis 90 jours ou plus (%@)"; "user_inactive_session_item" = "Inactif depuis 90 jours ou plus"; -"user_session_item_details" = "%@ · DerniĂšre activitĂ© %@"; +"user_session_item_details" = "%1$@ · %2$@"; // First item is client name and second item is session display name "user_session_name" = "%@ : %@"; @@ -2641,6 +2633,139 @@ "manage_session_name_info" = "Gardez en tĂȘte que les noms des sessions sont aussi visibles par les personnes avec qui vous communiquez. %@"; "manage_session_name_hint" = "Personnaliser les noms des sessions peut vous aider Ă  reconnaĂźtre vos appareils plus facilement."; "settings_labs_enable_wysiwyg_composer" = "Essayez le compositeur de messages visuel"; +"settings_labs_enable_voice_broadcast" = "Diffusion vocale"; +"wysiwyg_composer_format_action_un_indent" = "Diminuer le retrait"; +"wysiwyg_composer_format_action_indent" = "Augmenter le retrait"; +"wysiwyg_composer_format_action_code_block" = "Bloc de code"; +"wysiwyg_composer_start_action_stickers" = "Autocollants"; +"user_session_rename_session_title" = "Renommer les sessions"; +"user_session_verified_session_description" = "Les sessions vĂ©rifiĂ©es sont toutes celles oĂč vous vous ĂȘtes connectĂ© Ă  Element grĂące Ă  vos identifiants ou celles pour lesquelles vous avez confirmĂ© votre identitĂ© Ă  l'aide d'une autre session.\n\nCela signifie que vous ĂȘtes en possession de toutes les clĂ©s requises pour dĂ©chiffrer vos messages et montrer aux autres utilisateurs que vous faites confiance Ă  cette session."; +"poll_history_loading_text" = "Afficher les sondages"; +"voice_message_broadcast_in_progress_title" = "Impossible de dĂ©marrer l'enregistrement vocal"; +"home_context_menu_mark_as_unread" = "Marquer comme non lu"; +"launch_loading_processing_response" = "Traitement des donnĂ©es\n%@ %%"; +"notice_voice_broadcast_ended_by_you" = "Vous avez terminĂ© une diffusion vocale."; +"notice_voice_broadcast_ended" = "%@ a terminĂ© une diffusion vocale."; +"notice_voice_broadcast_live" = "Diffusion en direct"; +"deselect_all" = "Tout dĂ©sĂ©lectionner"; +"wysiwyg_composer_link_action_edit_title" = "Modifier le lien"; +"wysiwyg_composer_link_action_create_title" = "CrĂ©er un lien"; +"wysiwyg_composer_link_action_link" = "Lien"; + +// Links +"wysiwyg_composer_link_action_text" = "Texte"; +"wysiwyg_composer_format_action_quote" = "Citation"; +"wysiwyg_composer_format_action_ordered_list" = "Liste numĂ©rique"; +"wysiwyg_composer_format_action_unordered_list" = "Liste Ă  puces"; +"wysiwyg_composer_format_action_inline_code" = "Formater comme code informatique"; +"wysiwyg_composer_format_action_link" = "Formater comme lien"; +"wysiwyg_composer_format_action_strikethrough" = "Souligner"; +"wysiwyg_composer_format_action_underline" = "Barrer"; +"wysiwyg_composer_format_action_italic" = "Mettre en italique"; + +// Formatting Actions +"wysiwyg_composer_format_action_bold" = "Mettre en caractĂšres gras"; +"wysiwyg_composer_start_action_voice_broadcast" = "Diffusion vocale"; +"wysiwyg_composer_start_action_text_formatting" = "Formatage du texte"; +"wysiwyg_composer_start_action_camera" = "Appareil photo"; +"wysiwyg_composer_start_action_location" = "Position"; +"wysiwyg_composer_start_action_polls" = "Sondages"; +"wysiwyg_composer_start_action_attachments" = "PiĂšces jointes"; + + +// MARK: - WYSIWYG Composer + +// Send Media Actions +"wysiwyg_composer_start_action_media_picker" = "Galerie photo"; +"user_session_details_last_activity" = "DerniĂšre activitĂ©"; +"user_session_item_details_last_activity" = "DerniĂšre activitĂ© %@"; +"user_other_session_menu_sign_out_sessions" = "DĂ©connecter %@ sessions"; +"user_other_session_selected_count" = "%@ sĂ©lectionnĂ©es"; +"user_other_session_menu_select_sessions" = "SĂ©lectionnez des sessions"; +"user_other_session_clear_filter" = "Effacer les filtres"; +"user_other_session_no_unverified_sessions" = "Aucune session non vĂ©rifiĂ©e trouvĂ©e."; +"user_other_session_no_verified_sessions" = "Aucune session vĂ©rifiĂ©e trouvĂ©e."; +"user_other_session_no_inactive_sessions" = "Aucune session inactive trouvĂ©e."; +"user_other_session_filter_menu_inactive" = "Inactives"; +"user_other_session_filter_menu_unverified" = "Non vĂ©rifiĂ©es"; +"user_other_session_filter_menu_verified" = "VĂ©rifiĂ©es"; +"user_other_session_filter_menu_all" = "Toutes les sessions"; +"user_other_session_filter" = "Filtrer"; +"user_other_session_verified_sessions_header_subtitle" = "Pour augmenter la sĂ©curitĂ©, veuillez dĂ©connecter toutes les sessions qui vous semblent inconnues ou que vous n'utilisez plus."; +"user_other_session_current_session_details" = "Votre session actuelle"; +"user_other_session_security_recommendation_title" = "Autres sessions"; +"user_session_rename_session_description" = "D'autres utilisateurs des conversations et salons que vous rejoignez peuvent consulter la liste complĂšte de vos session.\n\nCela leur permet de confirmer qu'ils communiquent bien avec vous, mais cela signifie Ă©galement qu'ils verront le nom que vous donnez Ă  vos sessions."; +"user_session_inactive_session_description" = "Les sessions inactives sont celles qui n'ont pas Ă©tĂ© utilisĂ©es depuis un certain temps, mais qui continuent de recevoir des clĂ©s de chiffrement.\n\nÉliminer ces sessions inactives augmente la sĂ©curitĂ© et les performances, et facilite l'identification de nouvelles connexions suspectes."; +"user_session_inactive_session_title" = "Sessions inactives"; +"user_session_permanently_unverified_session_description" = "Cette session de prend pas en charge le chiffrement et ne peut donc ĂȘtre vĂ©rifiĂ©e.\n\nVous ne pourrez pas intervenir dans les salons oĂč le chiffrement est activĂ© en utilisant cette session.\n\nPour une sĂ©curitĂ© et confidentialitĂ© optimale, il est recommandĂ© d'utiliser des clients Matrix qui prennent en charge le chiffrement."; +"user_session_unverified_session_description" = "Les sessions non vĂ©rifiez sont celles qui sont connectĂ©es avec vos identifiants, mais qui n'ont pas passĂ© les vĂ©rifications croisĂ©es.\n\nVous devriez passer en revue ces sessions car elles pourraient tĂ©moigner d'un usage malicieux de votre compte."; +"user_session_unverified_session_title" = "Session non vĂ©rifiĂ©e"; +"user_session_verified_session_title" = "Sessions vĂ©rifiĂ©es"; +"user_session_got_it" = "Entendu"; +"user_other_session_verified_additional_info" = "Cette session est prĂȘte Ă  l'Ă©change de messages."; +"user_other_session_permanently_unverified_additional_info" = "Cette session ne prend pas en charge le chiffrement et ne peut donc ĂȘtre vĂ©rifiĂ©e."; +"user_other_session_unverified_additional_info" = "VĂ©rifier ou dĂ©connecter cette session pour une sĂ©curitĂ© et une fiabilitĂ© accrue."; +"user_session_verification_unknown_additional_info" = "VĂ©rifier la session actuelle pour rĂ©vĂ©ler l'Ă©tat de vĂ©rification de cette session."; +"user_session_verification_unknown_short" = "Inconnu"; +"user_session_verification_unknown" = "État de vĂ©rification inconnu"; +"user_sessions_hide_location_info" = "Masquer l'adresse IP"; +"user_sessions_show_location_info" = "Montrer l'adresse IP"; +"poll_timeline_reply_ended_poll" = "Sondage terminĂ©"; +"poll_timeline_ended_text" = "Sondage clos"; +"poll_timeline_decryption_error" = "Des erreurs de dĂ©chiffrement pourrait empĂȘcher certains votes d'ĂȘtre comptabilisĂ©s"; +"poll_history_fetching_error" = "Erreur au cours de la rĂ©cupĂ©ration des sondages."; +"poll_history_load_more" = "Charger plus de sondages"; +"poll_history_no_past_poll_period_text" = "Il n'y a pas eu de sondages les %@ derniers jours. Veuillez charger plus de sondages pour consulter les sondages des mois antĂ©rieurs"; +"poll_history_no_active_poll_period_text" = "Il n'y a pas eu de sondages depuis %@ jours. Veuillez charger plus de sondages pour consulter les sondages des mois antĂ©rieurs"; +"poll_history_detail_view_in_timeline" = "Consulter la chronologie des sondages"; +"poll_history_no_past_poll_text" = "Il n'y a pas de sondage prĂ©cĂ©dent dans ce salon"; +"poll_history_no_active_poll_text" = "Il n'y a aucun sondage en cours dans ce salon"; +"poll_history_past_segment_title" = "Sondages prĂ©cĂ©dents"; +"poll_history_active_segment_title" = "Sondages en cours"; + +// MARK: - Polls history + +"poll_history_title" = "Historique des sondages"; +"voice_broadcast_playback_unable_to_decrypt" = "Impossible de dĂ©chiffrer cette diffusion vocale."; +"voice_broadcast_recorder_connection_error" = "Erreur de connexion - Enregistrement interrompu"; +"voice_broadcast_connection_error_message" = "Nous sommes malheureusement dans l'impossibilitĂ© de dĂ©marrer un enregistrement maintenant. Veuillez rĂ©essayer plus tard."; +"voice_broadcast_connection_error_title" = "Erreur de connexion"; +"voice_broadcast_voip_cannot_start_description" = "Vous ne pouvez pas dĂ©marrer d'appel car vous enregistrez dĂ©jĂ  une diffusion en direct. Veuillez interrompre votre diffusion pour lancer un appel."; +"voice_broadcast_voip_cannot_start_title" = "Impossible de dĂ©marrer l'appel"; +"voice_broadcast_stop_alert_agree_button" = "Oui, terminer"; +"voice_broadcast_stop_alert_description" = "Êtes vous sĂ»r de vouloir interrompre votre diffusion vocale ? Cela mettra fin Ă  la diffusion et rendra l'enregistrement disponible dans le salon."; +"voice_broadcast_stop_alert_title" = "ArrĂȘter la diffusion vocale ?"; +"voice_broadcast_buffering" = "Mise en mĂ©moire tampon..."; +"voice_broadcast_time_left" = "%@ restant"; +"voice_broadcast_tile" = "Diffusion vocale"; +"voice_broadcast_live" = "En direct"; +"voice_broadcast_playback_lock_screen_placeholder" = "Diffusion vocale"; +"voice_broadcast_playback_loading_error" = "Impossible de lire cette diffusion vocale."; +"voice_broadcast_blocked_by_someone_else_message" = "Quelqu'un d'autre est dĂ©jĂ  en train d'enregistrer une diffusion vocale. Veuillez attendre la fin de la leur pour en dĂ©marrer une nouvelle."; +"voice_broadcast_already_in_progress_message" = "Vous ĂȘtes dĂ©jĂ  en train d'enregistrer une diffusion vocale. Veuillez y mettre fin avant d'en dĂ©marrer une nouvelle."; +"voice_broadcast_permission_denied_message" = "Vous n'avez pas les autorisations nĂ©cessaires pour dĂ©marrer une diffusion vocal dans ce salon. Contactez un administrateur pour qu'il vous octroie la permission."; + +// MARK: - Voice Broadcast +"voice_broadcast_unauthorized_title" = "Impossible de dĂ©marrer une nouvelle diffusion vocale"; +"voice_message_broadcast_in_progress_message" = "Vous ne pouvez pas dĂ©marrer d'enregistrement vocal car vous diffusez en direct. Veuillez interrompre votre diffusion pour dĂ©marrer l'enregistrement vocal"; +"launch_loading_server_syncing_nth_attempt" = "Synchronisation avec le serveur\n(%@ tentatives)"; +"launch_loading_server_syncing" = "Synchronisation avec le serveur"; + +// MARK: - Launch loading + +"launch_loading_migrating_data" = "Migration des donnĂ©es\n%@ %%"; +"key_backup_recover_from_private_key_progress" = "%@%% Fini"; +"room_details_polls" = "Historique des sondages"; +"settings_labs_disable_crypto_sdk" = "Chiffrement de bout en bout avec Rust (se dĂ©connecter pour dĂ©sactiver)"; +"settings_labs_confirm_crypto_sdk" = "Cette option activera le nouveau moteur de chiffrement de bout en bout, plus rapide et plus fiable, Ă©crit en Rust. Une fois activĂ© vous devrez vous dĂ©connecter pour le dĂ©sactiver. Voulez-vous continuer ?"; +"settings_labs_enable_crypto_sdk" = "Chiffrement de bout en bout en Rust"; +"settings_push_rules_error" = "Nous avons rencontrĂ© une erreur lors de la mise Ă  jours de vos prĂ©fĂ©rences de notification. Veuillez rĂ©activer l'option."; +"password_policy_pwd_in_dict_error" = "Ce mot de passe a Ă©tĂ© trouvĂ© dans un dictionnaire, et son usage n'est donc pas autorisĂ©."; +"password_policy_weak_pwd_error" = "Ce mot de passe est trop faible. Il doit contenir au moins 8 caractĂšres, dont au moins une majuscule, une minuscule, un chiffre et un caractĂšre spĂ©cial."; + +// MARK: Password policy errors +"password_policy_too_short_pwd_error" = "Mot de passe trop court"; +"accessibility_selected" = "sĂ©lectionnĂ©"; // Tchap: override some MatrixKit strings "attachment_e2e_keys_file_prompt" = "Ce fichier contient des clĂ©s Tchap exportĂ©es d'un client Tchap.\nVoulez-vous voir le contenu du fichier ou importer les clĂ©s qu'il contient ?"; // Tchap diff --git a/Riot/Assets/hu.lproj/Vector.strings b/Riot/Assets/hu.lproj/Vector.strings index 6dd053e547..a10998eb79 100644 --- a/Riot/Assets/hu.lproj/Vector.strings +++ b/Riot/Assets/hu.lproj/Vector.strings @@ -2467,14 +2467,6 @@ // Mark: - Room invites "room_invites_empty_view_title" = "Semmi Ășj."; -"all_chats_onboarding_try_it" = "PrĂłbĂĄld ki"; -"all_chats_onboarding_title" = "ÚjdonsĂĄgok"; -"all_chats_onboarding_page_message3" = "Koppints a profilodra Ă©s mond el mit gondolsz."; -"all_chats_onboarding_page_title3" = "VisszajelzĂ©s adĂĄsa"; -"all_chats_onboarding_page_message2" = "A terekhez valĂł hozzĂĄfĂ©rĂ©s (balra lent) gyorsabb Ă©s egyszerƱbb mint valaha."; -"all_chats_onboarding_page_title2" = "HozzĂĄfĂ©rĂ©s a terekhez"; -"all_chats_onboarding_page_message1" = "Element egyszerƱsĂ­tĂ©sĂ©hez a lapok mostantĂłl vĂĄlaszthatĂłk. BeĂĄllĂ­tani a jobb felsƑ menĂŒbƑl lehet."; -"all_chats_onboarding_page_title1" = "Üdv az Ășj kinĂ©zetben!"; "all_chats_nothing_found_placeholder_message" = "PrĂłbĂĄld meg a keresĂ©st mĂłdosĂ­tani."; "all_chats_nothing_found_placeholder_title" = "Nincs talĂĄlat."; "all_chats_empty_unreads_placeholder_message" = "Ez az a hely ahol az olvasatlan ĂŒzeneteid megjelennek, ha lesznek."; @@ -2710,3 +2702,18 @@ "voice_broadcast_connection_error_message" = "Sajnos most nem lehet elindĂ­tani a felvĂ©telt. PrĂłbĂĄlja meg kĂ©sƑbb."; "voice_broadcast_connection_error_title" = "Kapcsolat hiba"; "voice_broadcast_playback_lock_screen_placeholder" = "Hang közvetĂ­tĂ©s"; +"poll_history_load_more" = "MĂ©g több szavazĂĄs betöltĂ©se"; +"poll_history_no_past_poll_period_text" = "%@ napja nincs aktĂ­v szavazĂĄs. TovĂĄbbi szavazĂĄsok betöltĂ©se az elƑzƑ havi szavazĂĄsok megjelenĂ­tĂ©sĂ©hez"; +"poll_history_no_active_poll_period_text" = "%@ napja nincs aktĂ­v szavazĂĄs. TovĂĄbbi szavazĂĄsok betöltĂ©se az elƑzƑ havi szavazĂĄsok megjelenĂ­tĂ©sĂ©hez"; +"poll_history_loading_text" = "SzavazĂĄsok megjelenĂ­tĂ©se"; + +// MARK: - Launch loading + +"launch_loading_migrating_data" = "Adatok migrĂĄlĂĄsa\n%@ %%"; +"settings_labs_disable_crypto_sdk" = "VĂ©gpontok közötti titkosĂ­tĂĄs 2.0 (kikapcsolĂĄshoz kijelentkezĂ©s szĂŒksĂ©ges)"; +"settings_labs_confirm_crypto_sdk" = "Ezzel az opciĂłval egy gyorsabb Ă©s megbĂ­zhatĂłbb vĂ©gponttĂłl vĂ©gponting titkosĂ­tĂł motor kerĂŒl engedĂ©lyezĂ©sre ami Rustban lett megĂ­rva. BekapcsolĂĄs utĂĄn a kikapcsolĂĄsĂĄhoz ki kell jelentkezni. Folytatod?"; +"settings_labs_enable_crypto_sdk" = "Az Ășj Rust alapĂș TitkosĂ­tĂĄsi SDK engedĂ©lyezĂ©se"; +"home_context_menu_mark_as_unread" = "Olvasatlannak jelöl"; +"poll_history_fetching_error" = "SzavazĂĄs betöltĂ©si hiba."; +"voice_broadcast_playback_unable_to_decrypt" = "A hang közvetĂ­tĂ©s nem fejthetƑ vissza."; +"key_backup_recover_from_private_key_progress" = "%@%% kĂ©sz"; diff --git a/Riot/Assets/id.lproj/Vector.strings b/Riot/Assets/id.lproj/Vector.strings index 508d3eb7d1..0120b2b5a9 100644 --- a/Riot/Assets/id.lproj/Vector.strings +++ b/Riot/Assets/id.lproj/Vector.strings @@ -2672,14 +2672,6 @@ // Mark: - Room invites "room_invites_empty_view_title" = "Belum ada yang baru."; -"all_chats_onboarding_try_it" = "Coba"; -"all_chats_onboarding_title" = "Apa yang baru"; -"all_chats_onboarding_page_message3" = "Ketuk profil Anda untuk memberi tahu kami bagaimana menurut Anda."; -"all_chats_onboarding_page_title3" = "Berikan Masukan"; -"all_chats_onboarding_page_message2" = "Akses Space Anda (di kiri bawah) dengan lebih cepat dan lebih mudah dari sebelumnya."; -"all_chats_onboarding_page_title2" = "Akses Space"; -"all_chats_onboarding_page_message1" = "Untuk membuat Element Anda lebih sederhana, fitur tab sekarang opsional. Kelola menggunakan menu kanan atas."; -"all_chats_onboarding_page_title1" = "Selamat datang di tampilan yang baru!"; "all_chats_nothing_found_placeholder_message" = "Coba atur pencarian Anda."; "all_chats_nothing_found_placeholder_title" = "Tidak ada yang ditemukan."; "all_chats_empty_unreads_placeholder_message" = "Ini di mana pesan Anda yang belum dibaca akan ditampilkan, ketika Anda menerimanya."; @@ -2921,6 +2913,18 @@ // MARK: - Launch loading "launch_loading_migrating_data" = "Memigrasikan data\n%@ %%"; -"settings_labs_disable_crypto_sdk" = "SDK Kripto diaktifkan. Untuk menonaktifkan, mohon memasang ulang aplikasi"; -"settings_labs_confirm_crypto_sdk" = "Tindakan ini tidak dapat diurungkan"; -"settings_labs_enable_crypto_sdk" = "Aktifkan SDK Kripto baru berbasis Rust"; +"settings_labs_disable_crypto_sdk" = "Enkripsi ujung ke ujung Rust (keluar dari akun untuk menonaktifkan)"; +"settings_labs_confirm_crypto_sdk" = "Ketahui bahwa fitur ini masih dalam masa eksperimental, ini mungkin tidak berfungsi seperti yang diharapkan dan dapat memiliki konsekuensi yang tidak terduga. Untuk mengembalikan fitur, cukup keluar dari akun dan masuk kembali ke akun. Gunakan dengan pengetahuan dan risiko Anda."; +"settings_labs_enable_crypto_sdk" = "Enkripsi ujung ke ujung Rust"; +"poll_history_load_more" = "Muat lebih banyak pemungutan suara"; +"poll_history_no_active_poll_period_text" = "Tidak ada pemungutan suara terakhir untuk %@ hari sebelumnya. Muat lebih banyak pemungutan suara untuk bulan sebelumnya"; +"poll_history_no_past_poll_period_text" = "Tidak ada pemungutan suara untuk %@ hari sebelumnya. Muat lebih banyak pemungutan suara untuk melihat pemungutan suara untuk bulan sebelumnya"; +"poll_history_loading_text" = "Menampilkan pemungutan suara"; +"poll_history_fetching_error" = "Terjadi kesalahan mendapatkan pemungutan suara."; +"key_backup_recover_from_private_key_progress" = "%@%% Selesai"; +"voice_broadcast_playback_unable_to_decrypt" = "Tidak dapat mendekripsi siaran suara ini."; +"home_context_menu_mark_as_unread" = "Tandai sebagai belum dibaca"; +"wysiwyg_composer_format_action_un_indent" = "Kurangi indentasi"; +"wysiwyg_composer_format_action_indent" = "Tambahkan indentasi"; +"poll_history_detail_view_in_timeline" = "Tampilkan pemungutan suara dalam lini masa"; +"settings_push_rules_error" = "Sebuah kesalahan terjadi ketika memperbarui preferensi notifikasi Anda. Silakan alih ulang opsi Anda."; diff --git a/Riot/Assets/is.lproj/Vector.strings b/Riot/Assets/is.lproj/Vector.strings index 10722ec1b8..1a0e5981e2 100644 --- a/Riot/Assets/is.lproj/Vector.strings +++ b/Riot/Assets/is.lproj/Vector.strings @@ -2132,7 +2132,6 @@ "user_sessions_overview_title" = "Setur"; "space_selector_create_space" = "BĂșa til svĂŠĂ°i"; -"all_chats_onboarding_try_it" = "PrĂłfaĂ°u ĂŸaĂ°"; "all_chats_edit_menu_space_settings" = "Stillingar svĂŠĂ°is"; "all_chats_edit_menu_leave_space" = "Yfirgefa %@"; "room_recents_recently_viewed_section" = "NĂœlega skoĂ°aĂ°"; @@ -2234,7 +2233,6 @@ // Mark: - Room invites "room_invites_empty_view_title" = "Ekkert nĂœtt."; -"all_chats_onboarding_page_title1" = "Velkomin Ă­ nĂœja sĂœn!"; "all_chats_nothing_found_placeholder_message" = "Reyndu aĂ° aĂ°laga leitina ĂŸĂ­na."; "all_chats_edit_layout_alphabetical_order" = "RaĂ°a A-Ö"; "all_chats_edit_layout_activity_order" = "RaĂ°a eftir virkni"; @@ -2330,9 +2328,6 @@ // Mark: - Space Selector "space_selector_title" = "SvĂŠĂ°in mĂ­n"; -"all_chats_onboarding_title" = "HvaĂ° er nĂœtt"; -"all_chats_onboarding_page_title3" = "GefĂ°u umsögn"; -"all_chats_onboarding_page_title2" = "AĂ°gangur aĂ° svĂŠĂ°um"; "all_chats_user_menu_settings" = "Notandastillingar"; "all_chats_edit_layout_pin_spaces_title" = "Festu svĂŠĂ°in ĂŸĂ­n"; diff --git a/Riot/Assets/it.lproj/Vector.strings b/Riot/Assets/it.lproj/Vector.strings index 8dbc7f07a3..8d1cc83f06 100644 --- a/Riot/Assets/it.lproj/Vector.strings +++ b/Riot/Assets/it.lproj/Vector.strings @@ -2445,14 +2445,6 @@ // Mark: - Room invites "room_invites_empty_view_title" = "Niente di nuovo."; -"all_chats_onboarding_try_it" = "Provalo"; -"all_chats_onboarding_title" = "NovitĂ "; -"all_chats_onboarding_page_message3" = "Tocca il tuo profilo per farci sapere cosa ne pensi."; -"all_chats_onboarding_page_title3" = "Invia un feedback"; -"all_chats_onboarding_page_message2" = "Accedi ai tuoi spazi (in basso a sinistra) piĂč velocemente e piĂč facilmente che mai."; -"all_chats_onboarding_page_title2" = "Accedi agli spazi"; -"all_chats_onboarding_page_message1" = "Per semplificare Element, le schede ora sono opzionali. Gestiscile usando il menu in alto a destra."; -"all_chats_onboarding_page_title1" = "Benvenuti ad una nuova panoramica!"; "all_chats_nothing_found_placeholder_message" = "Prova a cambiare la tua ricerca."; "all_chats_nothing_found_placeholder_title" = "Non Ăš stato trovato niente."; "all_chats_empty_unreads_placeholder_message" = "Qui Ăš dove verranno mostrati i messaggi non letti, quando ne avrai qualcuno."; @@ -2690,3 +2682,22 @@ "voice_broadcast_recorder_connection_error" = "Errore di connessione - Registrazione in pausa"; "voice_broadcast_connection_error_message" = "Sfortunatamente non riusciamo ad iniziare una registrazione al momento. Riprova piĂč tardi."; "voice_broadcast_connection_error_title" = "Errore di connessione"; +"poll_history_load_more" = "Carica piĂč sondaggi"; +"poll_history_no_past_poll_period_text" = "Non ci sono sondaggi passati negli ultimi %@ giorni. Carica piĂč sondaggi per vedere quelli dei mesi precedenti"; +"poll_history_no_active_poll_period_text" = "Non ci sono sondaggi attivi negli ultimi %@ giorni. Carica piĂč sondaggi per vedere quelli dei mesi precedenti"; +"poll_history_loading_text" = "Visualizzazione sondaggi"; + +// MARK: - Launch loading + +"launch_loading_migrating_data" = "Migrazione dati\n%@ %%"; +"settings_labs_disable_crypto_sdk" = "Crittografia end-to-end Rust (disconnettiti per disattivarla)"; +"settings_labs_confirm_crypto_sdk" = "Si noti che questa funzione, essendo ancora in fase sperimentale, potrebbe non funzionare come previsto e potrebbe avere conseguenze indesiderate. Per disattivare la funzione, Ăš sufficiente disconnettersi e riaccedere. Utilizzare a propria discrezione e con cautela."; +"settings_labs_enable_crypto_sdk" = "Crittografia end-to-end Rust"; +"wysiwyg_composer_format_action_un_indent" = "Diminuisci indentazione"; +"wysiwyg_composer_format_action_indent" = "Aumenta indentazione"; +"poll_history_fetching_error" = "Errore di recupero dei sondaggi."; +"voice_broadcast_playback_unable_to_decrypt" = "Impossibile decifrare questa trasmissione vocale."; +"home_context_menu_mark_as_unread" = "Segna come non letto"; +"key_backup_recover_from_private_key_progress" = "%@%% Completato"; +"poll_history_detail_view_in_timeline" = "Vedi sondaggio nella linea temporale"; +"settings_push_rules_error" = "Si Ăš verificato un errore aggiornando le tue preferenze di notifica. Prova ad attivare/disattivare di nuovo l'opzione."; diff --git a/Riot/Assets/ja.lproj/InfoPlist.strings b/Riot/Assets/ja.lproj/InfoPlist.strings index d99e8eb801..cae22a1090 100644 --- a/Riot/Assets/ja.lproj/InfoPlist.strings +++ b/Riot/Assets/ja.lproj/InfoPlist.strings @@ -1,9 +1,9 @@ // Permissions usage explanations -"NSCameraUsageDescription" = "ă‚«ăƒĄăƒ©ăŻă€ăƒ“ăƒ‡ă‚Șé€šè©±ă‚„ć†™çœŸæ’źćœ±ă€ć‹•ç”»æ’źćœ±ă«äœżç”šă•ă‚ŒăŸă™ă€‚"; -"NSPhotoLibraryUsageDescription" = "ăƒ•ă‚©ăƒˆăƒ©ă‚€ăƒ–ăƒ©ăƒȘăŻă€ć†™çœŸă‚„ć‹•ç”»ăźé€äżĄă«äœżç”šă•ă‚ŒăŸă™ă€‚"; +"NSCameraUsageDescription" = "ă‚«ăƒĄăƒ©ăŻă€ăƒ“ăƒ‡ă‚Șé€šè©±ă‚„ć†™çœŸă€ć‹•ç”»ăźæ’źćœ±ăšă‚ąăƒƒăƒ—ăƒ­ăƒŒăƒ‰ă«äœżç”šă•ă‚ŒăŸă™ă€‚"; +"NSPhotoLibraryUsageDescription" = "ăƒ•ă‚©ăƒˆăžăźă‚ąă‚Żă‚»ă‚čă‚’èš±ćŻă™ă‚‹ăšă€ć†™çœŸă‚„ć‹•ç”»ă‚’ăƒ©ă‚€ăƒ–ăƒ©ăƒȘăƒŒă‹ă‚‰ă‚ąăƒƒăƒ—ăƒ­ăƒŒăƒ‰ă§ăă‚‹ă‚ˆă†ă«ăȘă‚ŠăŸă™ă€‚"; "NSMicrophoneUsageDescription" = "ElementăŻé€šè©±ă€ć‹•ç”»æ’źćœ±ă€ăƒœă‚€ă‚čăƒĄăƒƒă‚»ăƒŒă‚žăźéŒČéŸłă«ăƒžă‚€ă‚Żăžăźă‚ąă‚Żă‚»ă‚čă‚’ćż…èŠăšă—ăŠă„ăŸă™ă€‚"; -"NSContactsUsageDescription" = "Elementは、あăȘăŸăŒé€Łç”Ąć…ˆă‚’ăƒăƒŁăƒƒăƒˆă«æ‹›ćŸ…ă§ăă‚‹ă‚ˆă†ă«ă€é€Łç”Ąć…ˆă‚’èĄšç€șă—ăŸă™ă€‚"; +"NSContactsUsageDescription" = "あăȘたぼIDă‚”ăƒŒăƒăƒŒă«ć…±æœ‰ă•ă‚Œă€Matrixă§é€Łç”Ąć…ˆă‚’ç™șèŠ‹ă™ă‚‹ăźă«äœżç”šă•ă‚ŒăŸă™ă€‚"; "NSCalendarsUsageDescription" = "äșˆćźšă•ă‚ŒăŠă„ă‚‹ăƒŸăƒŒăƒ†ă‚Łăƒłă‚°ă‚’ă‚ąăƒ—ăƒȘでçąșèȘă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; "NSFaceIDUsageDescription" = "Face IDはケプăƒȘぞたスクセă‚čă«äœżç”šă•ă‚ŒăŸă™ă€‚"; "NSLocationWhenInUseUsageDescription" = "äœçœźæƒ…ć ±ă‚’ć…±æœ‰ă™ă‚‹éš›ă«ăŻă€ćœ°ć›łă‚’èĄšç€șă™ă‚‹ăŸă‚ăźă‚ąă‚Żă‚»ă‚čをElementă«ä»˜äžŽă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; -"NSLocationAlwaysAndWhenInUseUsageDescription" = "あăȘăŸăŒä»–ăźäșșă«äœçœźă‚’ć…±æœ‰ă™ă‚‹ăšăă€Elementは朰曳をそぼäșșă«èĄšç€șするスクセă‚čæš©ăŒćż…èŠă§ă™ă€‚"; +"NSLocationAlwaysAndWhenInUseUsageDescription" = "äœçœźæƒ…ć ±ă‚’ć…±æœ‰ă™ă‚‹éš›ă«ăŻă€ćœ°ć›łă‚’èĄšç€șă™ă‚‹ăŸă‚ăźă‚ąă‚Żă‚»ă‚čをElementă«ä»˜äžŽă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; diff --git a/Riot/Assets/ja.lproj/Localizable.strings b/Riot/Assets/ja.lproj/Localizable.strings index 4a63be21b9..c76236c89b 100644 --- a/Riot/Assets/ja.lproj/Localizable.strings +++ b/Riot/Assets/ja.lproj/Localizable.strings @@ -1,9 +1,9 @@ /* New message from a specific person, not referencing a room */ -"MSG_FROM_USER" = "%@ ă•ă‚“ă‹ă‚‰ăƒĄăƒƒă‚»ăƒŒă‚ž"; +"MSG_FROM_USER" = "%@ă•ă‚“ăŒăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄă—ăŸă—ăŸ"; /* New message from a specific person in a named room */ -"MSG_FROM_USER_IN_ROOM" = "%@ さんが %@ ぞç™ș蚀"; +"MSG_FROM_USER_IN_ROOM" = "%@さんが%@ă«æŠ•çšżă—ăŸă—ăŸ"; /* New message from a specific person, not referencing a room. Content included. */ -"MSG_FROM_USER_WITH_CONTENT" = "%@: %@"; +"MSG_FROM_USER_WITH_CONTENT" = "%@%@"; /* New message from a specific person in a named room. Content included. */ "MSG_FROM_USER_IN_ROOM_WITH_CONTENT" = "%@ in %@: %@"; /* New action message from a specific person, not referencing a room. */ @@ -12,62 +12,62 @@ "ACTION_FROM_USER_IN_ROOM" = "%@: * %@ %@"; /* New action message from a specific person, not referencing a room. */ /* New action message from a specific person in a named room. */ -"IMAGE_FROM_USER_IN_ROOM" = "%@ ă•ă‚“ăŒć†™çœŸă‚’æŠ•çšż %@ in %@"; +"IMAGE_FROM_USER_IN_ROOM" = "%@さんが憙真%@を%@ă«æŠ•çšżă—ăŸă—ăŸ"; /* Multiple unread messages in a room */ -"UNREAD_IN_ROOM" = "%@ æ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚ž in %@"; +"UNREAD_IN_ROOM" = "%@ä»¶ăźæ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚žăŒ%@ă«ă‚ă‚ŠăŸă™"; /* Multiple unread messages from a specific person, not referencing a room */ -"MSGS_FROM_USER" = "%@ æ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚ž in %@"; +"MSGS_FROM_USER" = "%@ä»¶ăźæ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚žăŒ%@ă«ă‚ă‚ŠăŸă™"; /* Multiple unread messages from two people */ -"MSGS_FROM_TWO_USERS" = "%@ æ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚ž from %@ and %@"; +"MSGS_FROM_TWO_USERS" = "%@ä»¶ăźæ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚žă‚’%@ず%@ă‹ă‚‰ć—äżĄă—ăŸă—ăŸ"; /* Multiple unread messages from three people */ -"MSGS_FROM_THREE_USERS" = "%@ æ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚ž from %@, %@ and %@"; +"MSGS_FROM_THREE_USERS" = "%@ä»¶ăźæ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚žă‚’%@、%@、%@ă‹ă‚‰ć—äżĄă—ăŸă—ăŸ"; /* Multiple unread messages from two plus people (ie. for 4+ people: 'others' replaces the third person) */ -"MSGS_FROM_TWO_PLUS_USERS" = "%@ æ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚ž from %@, %@ 他"; +"MSGS_FROM_TWO_PLUS_USERS" = "%@ä»¶ăźæ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚žă‚’%@、%@ă€ă»ă‹æ•°äșșă‹ă‚‰ć—äżĄă—ăŸă—ăŸ"; /* Multiple messages in two rooms */ -"MSGS_IN_TWO_ROOMS" = "%@ æ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚ž in %@ and %@"; +"MSGS_IN_TWO_ROOMS" = "%@ä»¶ăźæ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚žăŒ%@ず%@ă«ă‚ă‚ŠăŸă™"; /* Look, stuff's happened, alright? Just open the app. */ -"MSGS_IN_TWO_PLUS_ROOMS" = "%@ æ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚ž in %@, %@ 他"; +"MSGS_IN_TWO_PLUS_ROOMS" = "%@ä»¶ăźæ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚žăŒ%@、%@ăȘă©ă«ă‚ă‚ŠăŸă™"; /* A user has invited you to a chat */ -"USER_INVITE_TO_CHAT" = "%@ さんがあăȘăŸă‚’ćŻŸè©±ă«æ‹›ćŸ…ă—ăŸă—ăŸ"; +"USER_INVITE_TO_CHAT" = "%@さんがあăȘăŸă‚’ăƒăƒŁăƒƒăƒˆă«æ‹›ćŸ…ă—ăŸă—ăŸ"; /* A user has invited you to an (unamed) group chat */ -"USER_INVITE_TO_CHAT_GROUP_CHAT" = "%@ さんがあăȘăŸă‚’ăƒ«ăƒŒăƒ ăžæ‹›ćŸ…ă—ăŸă—ăŸ"; +"USER_INVITE_TO_CHAT_GROUP_CHAT" = "%@さんがあăȘăŸă‚’ă‚°ăƒ«ăƒŒăƒ—ăƒăƒŁăƒƒăƒˆă«æ‹›ćŸ…ă—ăŸă—ăŸ"; /* A user has invited you to a named room */ -"USER_INVITE_TO_NAMED_ROOM" = "%@ ă•ă‚“ăŒăƒ«ăƒŒăƒ  %@ ăžæ‹›ćŸ…ă—ăŸă—ăŸ"; +"USER_INVITE_TO_NAMED_ROOM" = "%@ă•ă‚“ăŒăƒ«ăƒŒăƒ  %@ ă«æ‹›ćŸ…ă—ăŸă—ăŸ"; /* Incoming one-to-one voice call */ -"VOICE_CALL_FROM_USER" = "%@ ă•ă‚“ă‹ă‚‰é€šè©±ç€äżĄ"; +"VOICE_CALL_FROM_USER" = "%@ă•ă‚“ă‹ă‚‰é€šè©±ç€äżĄ"; /* Incoming one-to-one video call */ -"VIDEO_CALL_FROM_USER" = "%@ ă•ă‚“ă‹ă‚‰æ˜ ćƒă€ăé€šè©±ç€äżĄ"; +"VIDEO_CALL_FROM_USER" = "%@さんからビデă‚Șé€šè©±ăźç€äżĄ"; /* Incoming unnamed voice conference invite from a specific person */ -"VOICE_CONF_FROM_USER" = "%@ ă•ă‚“ă‹ă‚‰äŒšè­°é€šè©±ăźç€äżĄ"; +"VOICE_CONF_FROM_USER" = "%@ă•ă‚“ă‹ă‚‰ă‚°ăƒ«ăƒŒăƒ—é€šè©±ăźç€äżĄ"; /* Incoming unnamed video conference invite from a specific person */ -"VIDEO_CONF_FROM_USER" = "%@ ă•ă‚“ă‹ă‚‰æ˜ ćƒă€ăäŒšè­°é€šè©±ăźç€äżĄ"; +"VIDEO_CONF_FROM_USER" = "%@さんからビデă‚Șă‚°ăƒ«ăƒŒăƒ—é€šè©±ăźç€äżĄ"; /* Incoming named voice conference invite from a specific person */ -"VOICE_CONF_NAMED_FROM_USER" = "äŒšè­°é€šè©±ăźç€äżĄ from %@: '%@'"; +"VOICE_CONF_NAMED_FROM_USER" = "%@ă•ă‚“ă‹ă‚‰ă‚°ăƒ«ăƒŒăƒ—é€šè©±ăźç€äżĄïŒš'%@'"; /* Incoming named video conference invite from a specific person */ -"VIDEO_CONF_NAMED_FROM_USER" = "æ˜ ćƒă€ăäŒšè­°é€šè©±ăźç€äżĄ from %@: '%@'"; +"VIDEO_CONF_NAMED_FROM_USER" = "%@さんからビデă‚Șă‚°ăƒ«ăƒŒăƒ—é€šè©±ăźç€äżĄïŒš'%@'"; /* A single unread message in a room */ -"SINGLE_UNREAD_IN_ROOM" = "%@ă«ăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć—ă‘ć–ă‚ŠăŸă—ăŸ"; +"SINGLE_UNREAD_IN_ROOM" = "%@ă§ăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć—äżĄă—ăŸă—ăŸ"; /* A single unread message */ -"SINGLE_UNREAD" = "あăȘăŸăŻăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć—ă‘ć–ă‚ŠăŸă—ăŸ"; +"SINGLE_UNREAD" = "ăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć—äżĄă—ăŸă—ăŸ"; /** Key verification **/ "KEY_VERIFICATION_REQUEST_FROM_USER" = "%@はèȘèšŒă‚’èŠæ±‚ă—ăŠă„ăŸă™"; /* New message indicator on a room */ -"MESSAGE_IN_X" = "%@ ć†…ăźăƒĄăƒƒă‚»ăƒŒă‚ž"; +"MESSAGE_IN_X" = "%@ć†…ăźăƒĄăƒƒă‚»ăƒŒă‚ž"; /* Sticker from a specific person, not referencing a room. */ -"STICKER_FROM_USER" = "%@ さんからぼă‚čタンプ"; +"STICKER_FROM_USER" = "%@さんがă‚čăƒ†ăƒƒă‚«ăƒŒă‚’é€äżĄă—ăŸă—ăŸ"; /* Message title for a specific person in a named room */ "MSG_FROM_USER_IN_ROOM_TITLE" = "%@%@ ă‹ă‚‰ïŒ‰"; /* Group call from user, CallKit caller name */ -"GROUP_CALL_FROM_USER" = "%@ (ă‚°ăƒ«ăƒŒăƒ—é€šè©±)"; +"GROUP_CALL_FROM_USER" = "%@ïŒˆă‚°ăƒ«ăƒŒăƒ—é€šè©±ïŒ‰"; "MESSAGE_PROTECTED" = "æ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚ž"; /* New message indicator from a DM */ -"MESSAGE_FROM_X" = "%@ ă‹ă‚‰ăźăƒĄăƒƒă‚»ăƒŒă‚ž"; +"MESSAGE_FROM_X" = "%@ă•ă‚“ă‹ă‚‰ăźăƒĄăƒƒă‚»ăƒŒă‚ž"; /** Notification messages **/ @@ -78,52 +78,55 @@ "Notification" = "通矄"; /* New message reply from a specific person in a named room. */ -"REPLY_FROM_USER_IN_ROOM_TITLE" = "%@ さんが %@ ă§èż”äżĄ"; +"REPLY_FROM_USER_IN_ROOM_TITLE" = "%@さんが%@ă§èż”äżĄă—ăŸă—ăŸ"; /* New message reply from a specific person, not referencing a room. */ -"REPLY_FROM_USER_TITLE" = "%@ ă•ă‚“ăŒèż”äżĄ"; +"REPLY_FROM_USER_TITLE" = "%@ă•ă‚“ăŒèż”äżĄă—ăŸă—ăŸ"; /** Reactions **/ /* A user has reacted to a message, including the reaction e.g. "Alice reacted 👍". */ -"REACTION_FROM_USER" = "%@ さんが %@ ずăƒȘă‚ąă‚Żă‚·ăƒ§ăƒł"; +"REACTION_FROM_USER" = "%@さんが%@でăƒȘă‚ąă‚Żă‚·ăƒ§ăƒłă—ăŸă—ăŸ"; /* A user has reacted to a message, but the reaction content is unknown */ -"GENERIC_REACTION_FROM_USER" = "%@ さんがăƒȘă‚ąă‚Żă‚·ăƒ§ăƒł"; +"GENERIC_REACTION_FROM_USER" = "%@さんがăƒȘă‚ąă‚Żă‚·ăƒ§ăƒłă‚’é€äżĄă—ăŸă—ăŸ"; /* New file message from a specific person, not referencing a room. */ -"LOCATION_FROM_USER" = "%@ ă•ă‚“ăŒäœçœźæƒ…ć ±ă‚’ć…±æœ‰"; +"LOCATION_FROM_USER" = "%@ă•ă‚“ăŒäœçœźæƒ…ć ±ă‚’ć…±æœ‰ă—ăŸă—ăŸ"; /* New voice message from a specific person, not referencing a room. */ -"VOICE_MESSAGE_FROM_USER" = "%@ ă•ă‚“ăŒéŸłćŁ°ăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄ"; +"VOICE_MESSAGE_FROM_USER" = "%@ă•ă‚“ăŒéŸłćŁ°ăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄă—ăŸă—ăŸ"; /* New video message from a specific person, not referencing a room. */ -"VIDEO_FROM_USER" = "%@ ă•ă‚“ăŒć‹•ç”»ă‚’é€äżĄ"; +"VIDEO_FROM_USER" = "%@ă•ă‚“ăŒć‹•ç”»ă‚’é€äżĄă—ăŸă—ăŸ"; /** Media Messages **/ /* New image message from a specific person, not referencing a room. */ -"PICTURE_FROM_USER" = "%@ さんが憙真を送信"; +"PICTURE_FROM_USER" = "%@ă•ă‚“ăŒć†™çœŸă‚’é€äżĄă—ăŸă—ăŸ"; /* A user added a Jitsi call to a room */ -"GROUP_CALL_STARTED" = "ă‚°ăƒ«ăƒŒăƒ—é€šè©±ăŒé–‹ć§‹ă•ă‚ŒăŸă—ăŸ"; +"GROUP_CALL_STARTED" = "ă‚°ăƒ«ăƒŒăƒ—é€šè©±ă‚’é–‹ć§‹ă—ăŸă—ăŸ"; /* A user's membership has updated in an unknown way */ -"USER_MEMBERSHIP_UPDATED" = "%@ ăŒăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«ă‚’æ›Žæ–°ă—ăŸă—ăŸ"; +"USER_MEMBERSHIP_UPDATED" = "%@ă•ă‚“ăŒăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«ă‚’æ›Žæ–°ă—ăŸă—ăŸ"; /* A user has change their avatar */ -"USER_UPDATED_AVATAR" = "%@ ăŒă‚ąăƒă‚żăƒŒç”»ćƒă‚’ć€‰æ›Žă—ăŸă—ăŸ"; +"USER_UPDATED_AVATAR" = "%@ă•ă‚“ăŒă‚ąăƒă‚żăƒŒă‚’ć€‰æ›Žă—ăŸă—ăŸ"; /* A user has change their name to a new name which we don't know */ -"GENERIC_USER_UPDATED_DISPLAYNAME" = "%@ ăŒćć‰ă‚’ć€‰æ›Žă—ăŸă—ăŸ"; +"GENERIC_USER_UPDATED_DISPLAYNAME" = "%@ă•ă‚“ăŒćć‰ă‚’ć€‰æ›Žă—ăŸă—ăŸ"; /** Membership Updates **/ /* A user has change their name to a new name */ -"USER_UPDATED_DISPLAYNAME" = "%@ が損才を %@ ă«ć€‰æ›Žă—ăŸă—ăŸ"; +"USER_UPDATED_DISPLAYNAME" = "%@さんが損才を%@ă«ć€‰æ›Žă—ăŸă—ăŸ"; /* New file message from a specific person, not referencing a room. */ -"FILE_FROM_USER" = "%@ ăŒăƒ•ă‚Ąă‚€ăƒ«ă‚’é€äżĄă—ăŸă—ăŸ: %@"; +"FILE_FROM_USER" = "%@ăŒăƒ•ă‚Ąă‚€ăƒ«ă‚’é€äżĄă—ăŸă—ăŸïŒš%@"; /* New audio message from a specific person, not referencing a room. */ -"AUDIO_FROM_USER" = "%@ ăŒéŸłćŁ°ăƒ•ă‚Ąă‚€ăƒ«ă‚’é€äżĄă—ăŸă—ăŸ: %@"; +"AUDIO_FROM_USER" = "%@ăŒéŸłćŁ°ăƒ•ă‚Ąă‚€ăƒ«ă‚’é€äżĄă—ăŸă—ăŸïŒš%@"; + +/* New voice broadcast from a specific person, not referencing a room. */ +"VOICE_BROADCAST_FROM_USER" = "%@ă•ă‚“ăŒéŸłćŁ°é…äżĄă‚’é–‹ć§‹ă—ăŸă—ăŸ"; diff --git a/Riot/Assets/ja.lproj/Vector.strings b/Riot/Assets/ja.lproj/Vector.strings index 9c76e1920b..30c415fd80 100644 --- a/Riot/Assets/ja.lproj/Vector.strings +++ b/Riot/Assets/ja.lproj/Vector.strings @@ -8,7 +8,7 @@ "view" = "èĄšç€ș"; "next" = "æŹĄăž"; "back" = "æˆ»ă‚‹"; -"continue" = "続ける"; +"continue" = "ç¶šèĄŒ"; "create" = "䜜成"; "start" = "開構"; "leave" = "退ć‡ș"; @@ -20,27 +20,27 @@ "cancel" = "ă‚­ăƒŁăƒłă‚»ăƒ«"; "save" = "保歘"; "join" = "揂抠"; -"decline" = "æ–­ă‚‹"; -"accept" = "ć—è«Ÿ"; +"decline" = "æ‹’ćŠ"; +"accept" = "ćŒæ„"; "preview" = "ăƒ—ăƒŹăƒ“ăƒ„ăƒŒ"; "camera" = "ă‚«ăƒĄăƒ©"; "voice" = "音棰"; "video" = "ć‹•ç”»"; -"active_call" = "é€šè©±é–‹ć§‹"; -"active_call_details" = "é€šè©±é–‹ć§‹ïŒˆ%@"; +"active_call" = "ćźŸæ–œäž­ăźé€šè©±"; +"active_call_details" = "ćźŸæ–œäž­ăźé€šè©±ïŒˆ%@"; "later" = "ćŸŒă§"; "rename" = "ćć‰ć€‰æ›Ž"; "collapse" = "æŠ˜ă‚ŠăŸăŸă‚€"; -"send_to" = "%@さんま送信"; -"sending" = "送信侭"; +"send_to" = "%@ま送信"; +"sending" = "é€äżĄă—ăŠă„ăŸă™"; // Authentication "auth_login" = "ăƒ­ă‚°ă‚€ăƒł"; -"auth_register" = "ćˆ©ç”šè€…ç™»éŒČ"; +"auth_register" = "登éŒČ"; "auth_submit" = "ć—è«Ÿ"; -"auth_skip" = "省く"; -"auth_send_reset_email" = "ćˆæœŸćŒ–ăƒĄăƒŒăƒ«é€äżĄ"; -"auth_return_to_login" = "ăƒ­ă‚°ă‚€ăƒłç”»éąăžæˆ»ă‚‹"; -"auth_user_id_placeholder" = "ăƒŠăƒŒă‚¶ăƒŒćăŸăŸăŻé›»ć­ăƒĄăƒŒăƒ«"; +"auth_skip" = "ă‚čキップ"; +"auth_send_reset_email" = "ăƒȘă‚»ăƒƒăƒˆç”šăƒĄăƒŒăƒ«ă‚’é€äżĄ"; +"auth_return_to_login" = "ăƒ­ă‚°ă‚€ăƒłç”»éąă«æˆ»ă‚‹"; +"auth_user_id_placeholder" = "é›»ć­ăƒĄăƒŒăƒ«ăŸăŸăŻăƒŠăƒŒă‚¶ăƒŒć"; "auth_password_placeholder" = "パă‚čăƒŻăƒŒăƒ‰"; "auth_new_password_placeholder" = "æ–°ă—ă„ăƒ‘ă‚čăƒŻăƒŒăƒ‰"; "auth_user_name_placeholder" = "ăƒŠăƒŒă‚¶ăƒŒć"; @@ -48,15 +48,15 @@ "auth_email_placeholder" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚č"; "auth_optional_phone_placeholder" = "電話ç•Șć·ïŒˆä»»æ„ïŒ‰"; "auth_phone_placeholder" = "電話ç•Șć·"; -"auth_repeat_password_placeholder" = "パă‚čăƒŻăƒŒăƒ‰ć†çąșèȘ"; -"auth_repeat_new_password_placeholder" = "æ–°ă—ă„ăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć†çąșèȘ"; +"auth_repeat_password_placeholder" = "パă‚čăƒŻăƒŒăƒ‰ă‚’ć†çąșèȘ"; +"auth_repeat_new_password_placeholder" = "Matrixă‚ąă‚«ă‚Šăƒłăƒˆăźæ–°ă—ă„ăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’çąșèȘ"; "auth_home_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æ–‡ć­—)"; +"auth_invalid_login_param" = "ăƒŠăƒŒă‚¶ăƒŒćăšăƒ‘ă‚čăƒŻăƒŒăƒ‰ăźäž€æ–čあるいは価æ–čăŒæ­Łă—ăă‚ă‚ŠăŸă›ă‚“"; +"auth_invalid_user_name" = "ăƒŠăƒŒă‚¶ăƒŒćă«ăŻćŠè§’è‹±æ•°ć­—ă€ăƒ‰ăƒƒăƒˆă€ăƒă‚€ăƒ•ăƒłă€ă‚ąăƒłăƒ€ăƒŒă‚čă‚łă‚ąăźăżă‚’äœżç”šă—ăŠăă ă•ă„"; +"auth_invalid_password" = "パă‚čăƒŻăƒŒăƒ‰ăŒçŸ­ă™ăŽăŸă™ïŒˆæœ€ć°6æ–‡ć­—ïŒ‰"; "auth_invalid_email" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăźćœąćŒăŒæ­Łă—ăă‚ă‚ŠăŸă›ă‚“"; -"auth_invalid_phone" = "æ­Łă—ăăȘă„é›»è©±ç•Șć·ăźă‚ˆă†ă§ă™"; +"auth_invalid_phone" = "電話ç•Șć·ăźćœąćŒăŒæ­Łă—ăă‚ă‚ŠăŸă›ă‚“"; "auth_missing_password" = "パă‚čăƒŻăƒŒăƒ‰ăŒć…„ćŠ›ă•ă‚ŒăŠă„ăŸă›ă‚“"; "auth_add_email_message" = "é›»ć­ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’ç™»éŒČするべ, èȘ°ă‹ăŒă‚ăȘăŸă‚’æ€œçŽąă‚’ă—ăŸă‚Š, パă‚čăƒŻăƒŒăƒ‰çŽ›ć€±æ™‚ă«ćˆæœŸćŒ–ăźăƒĄăƒŒăƒ«ă‚’é€ă‚‹ă“ăšăŒă§ăăŸă™."; "auth_add_phone_message" = "電話ç•Șć·ă‚’ç™»éŒČするべ, èȘ°ă‹ăŒă‚ăȘăŸă‚’é›»è©±ç•Șć·ă§æ€œçŽąă§ăă‚‹ă‚ˆă†ă«ăȘă‚ŠăŸă™."; @@ -67,38 +67,38 @@ "auth_missing_email_or_phone" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăŸăŸăŻé›»è©±ç•Șć·ăŒć…„ćŠ›ă•ă‚ŒăŠă„ăŸă›ă‚“"; "auth_email_in_use" = "ă“ăźăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăŻæ—ąă«äœżç”šă•ă‚ŒăŠă„ăŸă™"; "auth_phone_in_use" = "ă“ăźé›»è©±ç•Șć·ăŻæ—ąă«äœżç”šă•ă‚ŒăŠă„ăŸă™"; -"auth_untrusted_id_server" = "こぼèȘèšŒă‚”ăƒŒăƒăƒŒăŻäżĄç”šă•ă‚ŒăŠă„ăŸă›ă‚“"; +"auth_untrusted_id_server" = "こぼèȘèšŒă‚”ăƒŒăƒăƒŒăŻäżĄé Œă•ă‚ŒăŠă„ăŸă›ă‚“"; "auth_password_dont_match" = "パă‚čăƒŻăƒŒăƒ‰ăŒäž€è‡Žă—ăŸă›ă‚“"; "auth_username_in_use" = "ăƒŠăƒŒă‚¶ăƒŒćăŻæ—ąă«äœżç”šă•ă‚ŒăŠă„ăŸă™"; -"auth_forgot_password" = "パă‚čăƒŻăƒŒăƒ‰ă‚’ćż˜ă‚ŒăŸă—ăŸă‹ïŒŸ"; +"auth_forgot_password" = "Matrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ćż˜ă‚ŒăŸă—ăŸă‹ïŒŸ"; "auth_email_not_found" = "é›»ć­ăƒĄăƒŒăƒ«ăźé€äżĄă«ć€±æ•—ă—ăŸă—ăŸïŒšăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăŒèŠ‹ă€ă‹ă‚ŠăŸă›ă‚“"; -"auth_use_server_options" = "æŽ„ç¶šć…ˆă‚”ăƒŒăƒăƒŒă‚’æŒ‡ćźšă™ă‚‹ïŒˆèżœćŠ èš­ćźšïŒ‰"; -"auth_email_validation_message" = "登éŒČă‚’ç¶šèĄŒă™ă‚‹ă«ăŻé›»ć­ăƒĄăƒŒăƒ«ă‚’çąșèȘă—お䞋さい"; -"auth_msisdn_validation_title" = "èȘèšŒă‚’çąșèȘäž­"; -"auth_msisdn_validation_message" = "SMSでèȘèšŒç•Șć·ă‚’é€ă‚ŠăŸă—ăŸă€‚ä»„äž‹ă«ăăźç•Șć·ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚"; +"auth_use_server_options" = "æŽ„ç¶šć…ˆă‚”ăƒŒăƒăƒŒă‚’æŒ‡ćźšïŒˆé«˜ćșŠïŒ‰"; +"auth_email_validation_message" = "登éŒČă‚’ç¶šèĄŒă™ă‚‹ă«ăŻé›»ć­ăƒĄăƒŒăƒ«ă‚’çąșèȘă—ăŠăă ă•ă„"; +"auth_msisdn_validation_title" = "èȘèšŒăźäżç•™äž­"; +"auth_msisdn_validation_message" = "SMSでèȘèšŒă‚łăƒŒăƒ‰ă‚’é€ă‚ŠăŸă—ăŸă€‚ä»„äž‹ă«ă‚łăƒŒăƒ‰ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚"; "auth_msisdn_validation_error" = "電話ç•Șć·ă‚’èȘèšŒă§ăăŸă›ă‚“。"; "auth_recaptcha_message" = "ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻă€ă‚ăȘたがロボットではăȘいこべぼçąșèȘă‚’æ±‚ă‚ăŠă„ăŸă™"; -"auth_reset_password_message" = "Matrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ćˆæœŸćŒ–ă™ă‚‹ă«ăŻă€ă‚ąă‚«ă‚Šăƒłăƒˆă«ç™»éŒČă•ă‚ŒăŠă„ă‚‹ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ïŒš"; +"auth_reset_password_message" = "Matrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć†èš­ćźšă™ă‚‹ă«ăŻă€ă‚ąă‚«ă‚Šăƒłăƒˆă«ç™»éŒČă•ă‚ŒăŠă„ă‚‹ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ïŒš"; "auth_reset_password_missing_email" = "あăȘăŸăźă‚ąă‚«ă‚Šăƒłăƒˆă«ç™»éŒČă•ă‚ŒăŸăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăźć…„ćŠ›ăŒćż…èŠă§ă™ă€‚"; "auth_reset_password_missing_password" = "æ–°ă—ă„ăƒ‘ă‚čăƒŻăƒŒăƒ‰ăźć…„ćŠ›ăŒćż…èŠă§ă™ă€‚"; -"auth_reset_password_email_validation_message" = "%@ ăžé›»ć­ăƒĄăƒŒăƒ«ăŒé€äżĄă•ă‚ŒăŸă—ăŸă€‚ăƒȘăƒłă‚Żă‚’ăŸă©ăŁăŸă‚‰ä»„äž‹ă‚’ă‚ŻăƒȘックしどください。"; -"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_add_email_and_phone_warning" = "é›»ć­ăƒĄăƒŒăƒ«ăšé›»è©±ç•Șć·ăźćŒæ™‚ç™»éŒČăŻă€ăŸă ă‚·ă‚čăƒ†ăƒ ăŒćŻŸćżœă§ăăŸă›ă‚“ă€‚é›»è©±ç•Șć·ă ă‘ăźç™»éŒČăŻćŻèƒœă§ă™ă€‚ăŠæ‰‹æ•°ăŠă‹ă‘ă—ăŸă™ăŒă€ćŸŒă»ă©ć€‹äșșæƒ…ć ±èš­ćźšă‹ă‚‰ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’ç™»éŒČしどください。"; +"auth_reset_password_email_validation_message" = "%@ ăžé›»ć­ăƒĄăƒŒăƒ«ă‚’é€äżĄă—ăŸă—ăŸă€‚é›»ć­ăƒĄăƒŒăƒ«ć†…ăźăƒȘăƒłă‚Żă‚’é–‹ă„ăŸćŸŒă€ä»„äž‹ă‚’ă‚ŻăƒȘックしどください。"; +"auth_reset_password_next_step_button" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čをçąșèȘă—ăŸă—ăŸ"; +"auth_reset_password_error_unauthorized" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čたèȘèšŒă«ć€±æ•—ă—ăŸă—ăŸă€‚é›»ć­ăƒĄăƒŒăƒ«ć†…ăźăƒȘンクを開いたこべをçąșèȘă—ăŠăă ă•ă„"; +"auth_reset_password_error_not_found" = "あăȘăŸăźăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăŻă€ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒäžŠăźMatrix IDăšé–ąé€Łä»˜ă‘ă‚‰ă‚ŒăŠă„ăȘいようです。"; +"auth_reset_password_success_message" = "あăȘたぼMatrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ăŻćˆæœŸćŒ–ă•ă‚ŒăŸă—ăŸă€‚\n\nć…šăŠăźă‚»ăƒƒă‚·ăƒ§ăƒłă‹ă‚‰ăƒ­ă‚°ă‚ąă‚Šăƒˆă—ăŸăŸă‚ă€ăƒ—ăƒƒă‚·ăƒ„é€šçŸ„ăŻé€äżĄă•ă‚ŒăŸă›ă‚“ă€‚é€šçŸ„ă‚’ć†ćșŠæœ‰ćŠčă«ă™ă‚‹ă«ăŻă€ć„ç«Żæœ«ă§ć†ćșŠăƒ­ă‚°ă‚€ăƒłă—ăŠăă ă•ă„ă€‚"; +"auth_add_email_and_phone_warning" = "é›»ć­ăƒĄăƒŒăƒ«ăšé›»è©±ç•Șć·ăźäžĄæ–čă«ă‚ˆă‚‹ç™»éŒČăŻă€ăŸă ă‚”ăƒăƒŒăƒˆă—ăŠă„ăŸă›ă‚“ă€‚é›»è©±ç•Șć·ăźăżă§ăźç™»éŒČă‚’ć—ă‘ä»˜ă‘ăŠă„ăŸă™ă€‚ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăŻă€èš­ćźšć†…ăźăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«ă‹ă‚‰ćŸŒă»ă©èżœćŠ ă§ăăŸă™ă€‚"; // Chat creation "room_creation_title" = "チャットを開構"; "room_creation_account" = "ă‚ąă‚«ă‚Šăƒłăƒˆ"; "room_creation_appearance" = "ć€–èŠł"; "room_creation_appearance_name" = "損才"; "room_creation_appearance_picture" = "ăƒăƒŁăƒƒăƒˆç”»ćƒïŒˆä»»æ„ïŒ‰"; -"room_creation_privacy" = "怋äșșæƒ…ć ±äżè­·"; +"room_creation_privacy" = "ăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒ"; "room_creation_private_room" = "ă“ăźäŒšè©±ăŻéžć…Źé–‹ă§ă™"; "room_creation_public_room" = "ă“ăźäŒšè©±ăŻć…Źé–‹ă•ă‚ŒăŠă„ăŸă™"; "room_creation_make_public" = "慬開"; "room_creation_make_public_prompt_title" = "ă“ăźăƒăƒŁăƒƒăƒˆă‚’ć…Źé–‹ă—ăŸă™ă‹ïŒŸ"; -"room_creation_make_public_prompt_msg" = "ă“ăźăƒăƒŁăƒƒăƒˆă‚’ć…Źé–‹ă—ăŠă‚‚ă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸèȘ°ă§ă‚‚あăȘăŸăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’èȘ­ă‚“ă§ăƒăƒŁăƒƒăƒˆă«ć‚ćŠ ă§ăăŸă™ă€‚"; +"room_creation_make_public_prompt_msg" = "ă“ăźăƒăƒŁăƒƒăƒˆă‚’ć…Źé–‹ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸèȘ°ă§ă‚‚あăȘăŸăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’èȘ­ăżă€ăƒăƒŁăƒƒăƒˆă«ć‚ćŠ ă§ăăŸă™ă€‚"; "room_creation_keep_private" = "éžć…Źé–‹ă«äżă€"; "room_creation_make_private" = "éžć…Źé–‹ă«ă™ă‚‹"; "room_creation_wait_for_creation" = "ăƒ«ăƒŒăƒ ăŻæ—ąă«äœœæˆă•ă‚ŒăŠă„ăŸă™ă€‚ăŠćŸ…ăĄăă ă•ă„ă€‚"; @@ -113,53 +113,53 @@ "room_recents_invites_section" = "æ‹›ćŸ…äž­"; "room_recents_start_chat_with" = "チャットを開構"; "room_recents_create_empty_room" = "ăƒ«ăƒŒăƒ ă‚’äœœæˆ"; -"room_recents_join_room" = "ăƒ«ăƒŒăƒ ăžć‚ćŠ "; -"room_recents_join_room_title" = "ăƒ«ăƒŒăƒ ăžć‚ćŠ "; +"room_recents_join_room" = "ăƒ«ăƒŒăƒ ă«ć‚ćŠ "; +"room_recents_join_room_title" = "ăƒ«ăƒŒăƒ ă«ć‚ćŠ "; "room_recents_join_room_prompt" = "ăƒ«ăƒŒăƒ IDăŸăŸăŻăƒ«ăƒŒăƒ ăźă‚šă‚€ăƒȘケă‚čを慄抛"; // People tab "people_invites_section" = "æ‹›ćŸ…äž­"; "people_conversation_section" = "䌚話"; -"people_no_conversation" = "䌚話ăȘし"; +"people_no_conversation" = "äŒšè©±ăŒă‚ă‚ŠăŸă›ă‚“"; // Rooms tab "room_directory_no_public_room" = "ćˆ©ç”šćŻèƒœăȘć…Źé–‹ăƒ«ăƒŒăƒ ăŻă‚ă‚ŠăŸă›ă‚“"; // Search "search_rooms" = "ăƒ«ăƒŒăƒ "; "search_messages" = "ăƒĄăƒƒă‚»ăƒŒă‚ž"; "search_people" = "é€Łç”Ąć…ˆ"; -"search_files" = "æ·»ä»˜ăƒ•ă‚Ąă‚€ăƒ«"; +"search_files" = "ăƒ•ă‚Ąă‚€ăƒ«"; "search_default_placeholder" = "æ€œçŽą"; "search_people_placeholder" = "ăƒŠăƒŒă‚¶ăƒŒIDă€èĄšç€șćă€é›»ć­ăƒĄăƒŒăƒ«ă§æ€œçŽą"; -"search_no_result" = "甐果ăȘし"; +"search_no_result" = "ç”æžœăŒă‚ă‚ŠăŸă›ă‚“"; "search_in_progress" = "æ€œçŽąă—ăŠă„ăŸă™â€Š"; // Directory "directory_cell_title" = "ăƒ«ăƒŒăƒ äž€èŠ§ă‚’èŠ‹ă‚‹"; -"directory_cell_description" = "%tuă€ăźăƒ«ăƒŒăƒ "; +"directory_cell_description" = "%tuć€‹ăźăƒ«ăƒŒăƒ "; "directory_search_results_title" = "ăƒ«ăƒŒăƒ äž€èŠ§ăźæ€œçŽąç”æžœ"; "directory_searching_title" = "ăƒ«ăƒŒăƒ äž€èŠ§ă‚’æ€œçŽąă—ăŠă„ăŸă™â€Š"; "directory_search_fail" = "äž€èŠ§ă‚’ć–ćŸ—ă§ăăŸă›ă‚“ă§ă—ăŸ"; // Contacts "contacts_address_book_section" = "ç«Żæœ«ăźé›»è©±ćžł"; -"contacts_address_book_matrix_users_toggle" = "Matrixćˆ©ç”šè€…ăźăż"; -"contacts_address_book_no_contact" = "ç«Żæœ«ć†…é›»è©±ćžłă«é€Łç”Ąć…ˆăŒă‚ă‚ŠăŸă›ă‚“"; -"contacts_address_book_permission_required" = "ç«Żæœ«ć†…é›»è©±ćžłăžăźă‚ąă‚Żă‚»ă‚čæš©é™ăŒćż…èŠă§ă™"; +"contacts_address_book_matrix_users_toggle" = "MatrixăźăƒŠăƒŒă‚¶ăƒŒăźăż"; +"contacts_address_book_no_contact" = "ç«Żæœ«ăźé›»è©±ćžłă«é€Łç”Ąć…ˆăŒă‚ă‚ŠăŸă›ă‚“"; +"contacts_address_book_permission_required" = "ç«Żæœ«ăźé›»è©±ćžłăžăźă‚ąă‚Żă‚»ă‚čæš©é™ăŒćż…èŠă§ă™"; "contacts_user_directory_section" = "ăƒŠăƒŒă‚¶ăƒŒäž€èŠ§"; -"contacts_user_directory_offline_section" = "ăƒŠăƒŒă‚¶ăƒŒäž€èŠ§ (ă‚Șăƒ•ăƒ©ă‚€ăƒł)"; +"contacts_user_directory_offline_section" = "ăƒŠăƒŒă‚¶ăƒŒäž€èŠ§ïŒˆă‚Șăƒ•ăƒ©ă‚€ăƒłïŒ‰"; // Chat participants "room_participants_title" = "ć‚ćŠ è€…"; "room_participants_add_participant" = "ć‚ćŠ è€…ă‚’èżœćŠ "; "room_participants_one_participant" = "ć‚ćŠ è€…1損"; "room_participants_multi_participants" = "ć‚ćŠ è€…%d損"; -"room_participants_leave_prompt_title" = "ăƒ«ăƒŒăƒ ă‚’é€€ć‡ș"; -"room_participants_leave_prompt_msg" = "ăƒ«ăƒŒăƒ ă‚’é€€ć‡șă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"room_participants_leave_prompt_title" = "ăƒ«ăƒŒăƒ ă‹ă‚‰é€€ć‡ș"; +"room_participants_leave_prompt_msg" = "ăƒ«ăƒŒăƒ ă‹ă‚‰é€€ć‡șă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; "room_participants_remove_prompt_title" = "çąșèȘ"; -"room_participants_remove_prompt_msg" = "æœŹćœ“ă«%@ă‚’ăƒăƒŁăƒƒăƒˆă‹ă‚‰é€€ćŽ»ă•ă›ăŸă™ă‹ïŒŸ"; +"room_participants_remove_prompt_msg" = "%@ă‚’ăƒăƒŁăƒƒăƒˆă‹ă‚‰èżœæ”Ÿă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; "room_participants_remove_third_party_invite_msg" = "ă‚”ăƒŒăƒ‰ăƒ‘ăƒŒăƒ†ă‚Łăźæ‹›ćŸ…ă‚’ć‰Šé™€ă™ă‚‹ă“ăšăŻă€APIăŒć­˜ćœšă™ă‚‹ăŸă§ă‚”ăƒăƒŒăƒˆă•ă‚ŒăŠă„ăŸă›ă‚“"; "room_participants_invite_prompt_title" = "çąșèȘ"; -"room_participants_invite_prompt_msg" = "%@ă‚’ăƒăƒŁăƒƒăƒˆă«æ‹›ćŸ…ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; -"room_participants_filter_room_members" = "ăƒ«ăƒŒăƒ ăƒĄăƒłăƒăƒŒă‚’æ€œçŽą"; +"room_participants_invite_prompt_msg" = "%@ă‚’ă“ăźăƒăƒŁăƒƒăƒˆă«æ‹›ćŸ…ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"room_participants_filter_room_members" = "ăƒ«ăƒŒăƒ ăźăƒĄăƒłăƒăƒŒă‚’æ€œçŽą"; "room_participants_invite_another_user" = "ăƒŠăƒŒă‚¶ăƒŒIDă€ćć‰ă€é›»ć­ăƒĄăƒŒăƒ«ă§æ€œçŽąă€æ‹›ćŸ…"; "room_participants_invite_malformed_id_title" = "æ‹›ćŸ…ă‚šăƒ©ăƒŒ"; -"room_participants_invite_malformed_id" = "äžæ­ŁăȘIDă§ă™ă€‚ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čを甹いるか、'@localpart:domain'ぼようăȘMatrix IDă‚’äœżç”šă—ăŠăă ă•ă„"; +"room_participants_invite_malformed_id" = "äžæ­ŁăȘIDă§ă™ă€‚ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čを甹いるか、'@localpart:domain'ăźćœąćŒăźMatrix IDă‚’äœżç”šă—ăŠăă ă•ă„"; "room_participants_invited_section" = "æ‹›ćŸ…äž­"; "room_participants_online" = "ă‚Șăƒłăƒ©ă‚€ăƒł"; "room_participants_offline" = "ă‚Șăƒ•ăƒ©ă‚€ăƒł"; @@ -167,125 +167,125 @@ "room_participants_idle" = "ă‚ąă‚€ăƒ‰ăƒ«"; "room_participants_now" = "çŸćœš"; "room_participants_ago" = "才"; -"room_participants_action_section_admin_tools" = "çźĄç†è€…æš©é™æ“äœœ"; -"room_participants_action_section_direct_chats" = "非慬開ぼチャット"; -"room_participants_action_section_devices" = "ă‚»ăƒƒă‚·ăƒ§ăƒłäž€èŠ§"; +"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_invite" = "æ‹›ćŸ…"; -"room_participants_action_leave" = "ă“ăźăƒ«ăƒŒăƒ ă‚’é€€ć‡ș"; -"room_participants_action_remove" = "ă“ăźăƒ«ăƒŒăƒ ă‹ă‚‰ć‰Šé™€"; +"room_participants_action_leave" = "ă“ăźăƒ«ăƒŒăƒ ă‹ă‚‰é€€ć‡ș"; +"room_participants_action_remove" = "ă“ăźăƒ«ăƒŒăƒ ă‹ă‚‰èżœæ”Ÿ"; "room_participants_action_ban" = "ă“ăźăƒ«ăƒŒăƒ ă‹ă‚‰ăƒ–ăƒ­ăƒƒă‚Ż"; "room_participants_action_unban" = "ăƒ–ăƒ­ăƒƒă‚Żă‚’è§Łé™€"; -"room_participants_action_ignore" = "ă“ăźăƒŠăƒŒă‚¶ăƒŒăźç™șèš€ă‚’ć…šăŠéžèĄšç€șにする"; -"room_participants_action_unignore" = "ă“ăźăƒŠăƒŒă‚¶ăƒŒăźç™șèš€ă‚’ć…šăŠèĄšç€ș"; +"room_participants_action_ignore" = "ă“ăźăƒŠăƒŒă‚¶ăƒŒăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć…šăŠéžèĄšç€șにする"; +"room_participants_action_unignore" = "ă“ăźăƒŠăƒŒă‚¶ăƒŒăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć…šăŠèĄšç€ș"; "room_participants_action_set_default_power_level" = "æš©é™ă‚’äž€èˆŹăƒŠăƒŒă‚¶ăƒŒăžć€‰æ›Ž"; "room_participants_action_set_moderator" = "æš©é™ă‚’ăƒąăƒ‡ăƒŹăƒŒă‚żăƒŒăžć€‰æ›Ž"; "room_participants_action_set_admin" = "æš©é™ă‚’çźĄç†è€…ăžć€‰æ›Ž"; "room_participants_action_start_new_chat" = "チャットを開構"; "room_participants_action_start_voice_call" = "éŸłćŁ°é€šè©±ă‚’é–‹ć§‹"; -"room_participants_action_start_video_call" = "æ˜ ćƒä»˜ăéŸłćŁ°é€šè©±ă‚’é–‹ć§‹"; +"room_participants_action_start_video_call" = "ビデă‚Șé€šè©±ă‚’é–‹ć§‹"; "room_participants_action_mention" = "ăƒĄăƒłă‚·ăƒ§ăƒł"; // Chat -"room_jump_to_first_unread" = "æœ€ćˆăźæœȘèȘ­äœçœźăžç§»ć‹•"; -"room_new_message_notification" = "%dä»¶ăźæ–°ă—ă„ç™ș蚀"; -"room_new_messages_notification" = "%dä»¶ăźæ–°ă—ă„ç™ș蚀"; -"room_one_user_is_typing" = "%@ă•ă‚“ăŒć…„ćŠ›ă—ăŠă„ăŸă™â€Š"; -"room_two_users_are_typing" = "%@さん、%@ă•ă‚“ăŒć…„ćŠ›ă—ăŠă„ăŸă™â€Š"; -"room_many_users_are_typing" = "%@さん、%@ă•ă‚“ä»–ăŒć…„ćŠ›ă—ăŠă„ăŸă™â€Š"; -"room_message_placeholder" = "èż”äżĄă‚’é€ă‚‹ïŒˆæœȘæš—ć·ćŒ–ïŒ‰â€Š"; -"encrypted_room_message_placeholder" = "æš—ć·æ–‡ă‚’é€äżĄâ€Š"; -"room_message_short_placeholder" = "ă“ă“ă«é€äżĄæ–‡ă‚’ć…„ćŠ›â€Š"; +"room_jump_to_first_unread" = "æœ€æ–°ăźæœȘèȘ­ăžç§»ć‹•"; +"room_new_message_notification" = "%dä»¶ăźæ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚ž"; +"room_new_messages_notification" = "%dä»¶ăźæ–°ă—ă„ăƒĄăƒƒă‚»ăƒŒă‚ž"; +"room_one_user_is_typing" = "%@ăŒć…„ćŠ›ă—ăŠă„ăŸă™â€Š"; +"room_two_users_are_typing" = "%@ず%@ăŒć…„ćŠ›ă—ăŠă„ăŸă™â€Š"; +"room_many_users_are_typing" = "%@、%@ä»–ăŒć…„ćŠ›ă—ăŠă„ăŸă™â€Š"; +"room_message_placeholder" = "ăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄïŒˆæš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă›ă‚“ïŒ‰â€Š"; +"encrypted_room_message_placeholder" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄâ€Š"; +"room_message_short_placeholder" = "ăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄâ€Š"; "room_offline_notification" = "ă‚”ăƒŒăƒăƒŒăšăźæŽ„ç¶šăŒć€±ă‚ă‚ŒăŸă—ăŸă€‚"; "room_unsent_messages_notification" = "ăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄă§ăăŸă›ă‚“ă§ă—ăŸă€‚"; -"room_unsent_messages_unknown_devices_notification" = "æœȘçŸ„ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŒć­˜ćœšă™ă‚‹ăŸă‚ă«æ–‡ç« ăŒé€äżĄă•ă‚ŒăŸă›ă‚“ă§ă—ăŸă€‚"; -"room_ongoing_conference_call" = "äŒšè­°é€šè©±ćźŸæ–œäž­ă€‚%@ăŸăŸăŻ%@で揂抠しどください。"; -"room_ongoing_conference_call_with_close" = "äŒšè­°é€šè©±ćźŸæ–œäž­ă€‚%@ăŸăŸăŻ%@で揂抠しどください。%@。"; +"room_unsent_messages_unknown_devices_notification" = "䞍明ăȘă‚»ăƒƒă‚·ăƒ§ăƒłăŒć­˜ćœšă™ă‚‹ăŸă‚ă€ăƒĄăƒƒă‚»ăƒŒă‚žăźé€äżĄă«ć€±æ•—ă—ăŸă—ăŸă€‚"; +"room_ongoing_conference_call" = "ă‚°ăƒ«ăƒŒăƒ—é€šè©±ă‚’ćźŸæ–œäž­ă€‚%@ăŸăŸăŻ%@で揂抠しどください。"; +"room_ongoing_conference_call_with_close" = "ă‚°ăƒ«ăƒŒăƒ—é€šè©±ă‚’ćźŸæ–œäž­ă€‚%@ăŸăŸăŻ%@で揂抠しどください。%@。"; "room_ongoing_conference_call_close" = "閉じる"; -"room_conference_call_no_power" = "ă“ăźăƒ«ăƒŒăƒ ă§äŒšè­°é€šè©±ă‚’çźĄç†ă™ă‚‹æš©é™ăŒćż…èŠă§ă™"; +"room_conference_call_no_power" = "ă“ăźăƒ«ăƒŒăƒ ă§ă‚°ăƒ«ăƒŒăƒ—é€šè©±ă‚’çźĄç†ă™ă‚‹ăŸă‚ăźæš©é™ăŒćż…èŠă§ă™"; "room_prompt_resend" = "慹ど憍送信"; -"room_prompt_cancel" = "ć…šăŠäž­æ­ą"; -"room_resend_unsent_messages" = "æœȘé€äżĄăźæ–‡ă‚’ć†é€äżĄ"; -"room_delete_unsent_messages" = "æœȘé€äżĄăźæ–‡ă‚’ć‰Šé™€"; +"room_prompt_cancel" = "ć…šăŠă‚­ăƒŁăƒłă‚»ăƒ«"; +"room_resend_unsent_messages" = "æœȘé€äżĄăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć†é€äżĄ"; +"room_delete_unsent_messages" = "æœȘé€äżĄăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć‰Šé™€"; "room_event_action_copy" = "ă‚łăƒ”ăƒŒ"; "room_event_action_quote" = "ćŒ•ç”š"; "room_event_action_redact" = "扊陀"; -"room_event_action_more" = "さらに"; +"room_event_action_more" = "ăăźä»–"; "room_event_action_share" = "ć…±æœ‰"; "room_event_action_permalink" = "ăƒĄăƒƒă‚»ăƒŒă‚žăžăźăƒȘăƒłă‚Żă‚’ă‚łăƒ”ăƒŒ"; -"room_event_action_view_source" = "ă‚œăƒŒă‚čă‚’èĄšç€ș"; -"room_event_action_report" = "ç™șèš€ă‚’ć ±ć‘Š"; -"room_event_action_report_prompt_reason" = "こぼç™șèš€ă‚’ć ±ć‘Šă™ă‚‹ç†ç”±"; +"room_event_action_view_source" = "ă‚œăƒŒă‚čă‚łăƒŒăƒ‰ă‚’èĄšç€ș"; +"room_event_action_report" = "ă‚łăƒłăƒ†ăƒłăƒ„ă‚’ć ±ć‘Š"; +"room_event_action_report_prompt_reason" = "ă“ăźă‚łăƒłăƒ†ăƒłăƒ„ă‚’ć ±ć‘Šă™ă‚‹ç†ç”±"; "room_event_action_report_prompt_ignore_user" = "ă“ăźăƒŠăƒŒă‚¶ăƒŒă‹ă‚‰ăźć…šăŠăźç™șèš€ă‚’éžèĄšç€șă«ă—ăŸă™ă‹ïŒŸ"; "room_event_action_save" = "保歘"; "room_event_action_resend" = "憍送信"; "room_event_action_delete" = "扊陀"; -"room_event_action_cancel_send" = "é€äżĄäž­æ­ą"; -"room_event_action_cancel_download" = "ăƒ€ă‚Šăƒłăƒ­ăƒŒăƒ‰äž­æ­ą"; -"room_event_action_view_encryption" = "æš—ć·ă«ă€ă„ăŠăźæƒ…ć ±"; -"room_warning_about_encryption" = "ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ăŻăƒ™ăƒŒă‚żç‰ˆă§ă‚ă‚Šă€äżĄé Œæ€§ăŒäœŽă„ć ŽćˆăŒă‚ă‚ŠăŸă™ă€‚\n\nç™șèš€ă‚’äżè­·ă™ă‚‹ăŸă‚ă«ăŻăŸă äżĄç”šă™ăčăă§ăŻă‚ă‚ŠăŸă›ă‚“ă€‚\n\nç«Żæœ«ăŒć‚ćŠ ă™ă‚‹ă‚ˆă‚Šć‰ăźç™șèš€ć±„æ­Žă‚’ćŸ©ć·ćŒ–ă™ă‚‹ă“ăšăŻăŸă ă§ăăŸă›ă‚“ă€‚\n\næš—ć·ćŒ–ă•ă‚ŒăŸç™șèš€ăŻă€ăŸă æš—ć·ćŒ–ă‚’ćźŸèŁ…ă—ăŠă„ăȘă„ă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆă§ăŻèĄšç€șă•ă‚ŒăŸă›ă‚“ă€‚"; -"room_event_failed_to_send" = "é€äżĄć€±æ•—"; +"room_event_action_cancel_send" = "é€äżĄă‚’ă‚­ăƒŁăƒłă‚»ăƒ«"; +"room_event_action_cancel_download" = "ăƒ€ă‚Šăƒłăƒ­ăƒŒăƒ‰ă‚’ă‚­ăƒŁăƒłă‚»ăƒ«"; +"room_event_action_view_encryption" = "æš—ć·ćŒ–ă«ă€ă„ăŠăźæƒ…ć ±"; +"room_warning_about_encryption" = "ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ăŻăƒ™ăƒŒă‚żç‰ˆăźăŸă‚ă€äżĄé Œæ€§ăŒäœŽă„ć ŽćˆăŒă‚ă‚ŠăŸă™ă€‚\n\năƒ‡ăƒŒă‚żă‚’äżè­·ă™ă‚‹ăŸă‚ă«ăŻăŸă äżĄç”šă™ăčăă§ăŻă‚ă‚ŠăŸă›ă‚“ă€‚\n\nç«Żæœ«ăŒć‚ćŠ ă™ă‚‹ä»„ć‰ăźć±„æ­Žă‚’ćŸ©ć·ćŒ–ă™ă‚‹ă“ăšăŻăŸă ă§ăăŸă›ă‚“ă€‚\n\næš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăŻă€æš—ć·ćŒ–ă‚’ćźŸèŁ…ă—ăŠă„ăȘă„ă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆă§ăŻèĄšç€șă§ăăŸă›ă‚“ă€‚"; +"room_event_failed_to_send" = "é€äżĄă«ć€±æ•—ă—ăŸă—ăŸ"; // Unknown devices -"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_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" = "䞍明ăȘă‚»ăƒƒă‚·ăƒ§ăƒł"; // Room Title "room_title_new_room" = "æ–°ă—ă„ăƒ«ăƒŒăƒ "; "room_title_multiple_active_members" = "慹%@äșșäž­%@äșșăŒć›žç·šæŽ„ç¶š"; "room_title_one_active_member" = "慹%@äșșäž­%@äșșăŒć›žç·šæŽ„ç¶š"; -"room_title_invite_members" = "æ‹›ćŸ…äž­"; -"room_title_members" = "%@ćăźăƒĄăƒłăƒăƒŒ"; -"room_title_one_member" = "1ćăźăƒĄăƒłăƒăƒŒ"; +"room_title_invite_members" = "ăƒĄăƒłăƒăƒŒă‚’æ‹›ćŸ…"; +"room_title_members" = "%@äșșăźăƒĄăƒłăƒăƒŒ"; +"room_title_one_member" = "1äșșăźăƒĄăƒłăƒăƒŒ"; // Room Preview -"room_preview_invitation_format" = "あăȘたは%@ă•ă‚“ă«ć‘Œă°ă‚ŒăŠă“ăźăƒ«ăƒŒăƒ ăžć‚ćŠ ă—ăŸă—ăŸ"; +"room_preview_invitation_format" = "%@があăȘăŸă‚’ă“ăźăƒ«ăƒŒăƒ ă«æ‹›ćŸ…ă—ăŸă—ăŸă€‚"; "room_preview_subtitle" = "çŸćœšèĄšç€șă—ăŠă„ă‚‹ăźăŻăƒ«ăƒŒăƒ ăźăƒ—ăƒŹăƒ“ăƒ„ăƒŒă§ă™ă€‚ăƒĄăƒƒă‚»ăƒŒă‚žăźé€äżĄăȘă©ăŻèĄŒăˆăŸă›ă‚“ă€‚"; -"room_preview_unlinked_email_warning" = "ă“ăźă‚ąă‚«ă‚Šăƒłăƒˆă«é–ąé€Łä»˜ă‘ă‚‰ă‚ŒăŠă„ăȘい%@ćź›ă«æ‹›ćŸ…ăŒé€äżĄă•ă‚ŒăŸă—ăŸă€‚ćˆ„ăźă‚ąă‚«ă‚Šăƒłăƒˆă§ăƒ­ă‚°ă‚€ăƒłă™ă‚‹ă‹ă€ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’ă“ăźă‚ąă‚«ă‚Šăƒłăƒˆă«èżœćŠ ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; -"room_preview_try_join_an_unknown_room" = "%@ ă«ć‚ćŠ ă—ăŸă™ă‹ïŒŸ"; +"room_preview_unlinked_email_warning" = "ă“ăźæ‹›ćŸ…ăŻă€ă“ăźă‚ąă‚«ă‚Šăƒłăƒˆă«é–ąé€Łä»˜ă‘ă‚‰ă‚ŒăŠă„ăȘい%@ă«é€äżĄă•ă‚ŒăŸă—ăŸă€‚ćˆ„ăźă‚ąă‚«ă‚Šăƒłăƒˆă§ăƒ­ă‚°ă‚€ăƒłă™ă‚‹ă‹ă€ă“ăźăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čをè‡Șćˆ†ăźă‚ąă‚«ă‚Šăƒłăƒˆă«èżœćŠ ă—ăŠăă ă•ă„ă€‚"; +"room_preview_try_join_an_unknown_room" = "%@にスクセă‚čă—ă‚ˆă†ăšă—ăŠă„ăŸă™ă€‚ă“ăźäŒšè©±ă«ć‚ćŠ ă—ăŸă™ă‹ïŒŸ"; "room_preview_try_join_an_unknown_room_default" = "ăƒ«ăƒŒăƒ "; // Settings "settings_title" = "èš­ćźš"; -"account_logout_all" = "ć…šăŠăźă‚ąă‚«ă‚Šăƒłăƒˆă‚’ć›žç·šćˆ‡æ–­"; +"account_logout_all" = "ć…šăŠăźă‚ąă‚«ă‚Šăƒłăƒˆă‚’ăƒ­ă‚°ă‚ąă‚Šăƒˆ"; "settings_config_no_build_info" = "ăƒ“ăƒ«ăƒ‰æƒ…ć ±ăŒă‚ă‚ŠăŸă›ă‚“"; -"settings_mark_all_as_read" = "慹どぼç™șèš€ă‚’æ—ąèȘ­ă«ă™ă‚‹"; +"settings_mark_all_as_read" = "ć…šăŠăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’æ—ąèȘ­ă«ă™ă‚‹"; "settings_report_bug" = "ăƒă‚°ăƒŹăƒăƒŒăƒˆ"; -"settings_config_home_server" = "æŽ„ç¶šć…ˆă‚”ăƒŒăƒăƒŒăŻ %@"; -"settings_config_identity_server" = "èȘèšŒă‚”ăƒŒăƒăŻ %@"; +"settings_config_home_server" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻ %@ です"; +"settings_config_identity_server" = "IDă‚”ăƒŒăƒăƒŒïŒš%@"; "settings_config_user_id" = "%@ă§ăƒ­ă‚°ă‚€ăƒłă—ăŠă„ăŸă™"; -"settings_user_settings" = "ćˆ©ç”šè€…èš­ćźš"; +"settings_user_settings" = "ăƒŠăƒŒă‚¶ăƒŒèš­ćźš"; "settings_notifications_settings" = "é€šçŸ„èš­ćźš"; "settings_calls_settings" = "通話"; "settings_user_interface" = "ç«Żæœ«æ“äœœèĄšç€ș"; -"settings_ignored_users" = "ç„ĄèŠ–ă™ă‚‹ç›žæ‰‹"; -"settings_contacts" = "ç«Żæœ«ăźé›»è©±ćžł"; -"settings_advanced" = "æ‹ĄćŒ”èš­ćźš"; +"settings_ignored_users" = "ç„ĄèŠ–ă—ăŠă„ă‚‹ăƒŠăƒŒă‚¶ăƒŒ"; +"settings_contacts" = "ç«Żæœ«ăźé€Łç”Ąć…ˆ"; +"settings_advanced" = "高ćșŠăȘèš­ćźš"; "settings_other" = "ăăźä»–"; -"settings_labs" = "漟鹓的"; +"settings_labs" = "ăƒ©ăƒœ"; "settings_devices" = "ă‚»ăƒƒă‚·ăƒ§ăƒł"; "settings_cryptography" = "æš—ć·ćŒ–"; "settings_sign_out" = "ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆ"; -"settings_sign_out_confirmation" = "æœŹćœ“ă«ă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; -"settings_sign_out_e2e_warn" = "あăȘăŸăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·é”ă‚’ć€±ăŁăŠă—ăŸă„ăŸă™ă€‚ă“ăźç«Żæœ«ă§æš—ć·ćŒ–ă•ă‚ŒăŸăƒ«ăƒŒăƒ ăźæ˜”ăźç™șèš€ă‚’èȘ­ă‚€ă“ăšăŒă§ăăȘくăȘă‚ŠăŸă™ă€‚"; +"settings_sign_out_confirmation" = "ă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"settings_sign_out_e2e_warn" = "ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·é”ăŒæ¶ˆćŽ»ă•ă‚ŒăŸă™ă€‚ă“ăźç«Żæœ«ă§ăŻă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒ«ăƒŒăƒ ăźéŽćŽ»ăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’èȘ­ă‚€ă“ăšăŒă§ăăȘくăȘăŁăŠă—ăŸă„ăŸă™ă€‚"; "settings_profile_picture" = "ăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«ç”»ćƒ"; "settings_display_name" = "èĄšç€ș損"; "settings_first_name" = "損"; "settings_surname" = "槓"; "settings_remove_prompt_title" = "çąșèȘ"; -"settings_remove_email_prompt_msg" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚č %@ ă‚’æœŹćœ“ă«ć‰Šé™€ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; -"settings_remove_phone_prompt_msg" = "電話ç•Șć· %@ ă‚’æœŹćœ“ă«ć‰Šé™€ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; -"settings_email_address" = "é›»ć­ăƒĄăƒŒăƒ«"; +"settings_remove_email_prompt_msg" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚č %@ ă‚’ć‰Šé™€ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"settings_remove_phone_prompt_msg" = "電話ç•Șć· %@ ă‚’ć‰Šé™€ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"settings_email_address" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚č"; "settings_email_address_placeholder" = "あăȘăŸăźăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; "settings_add_email_address" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’èżœćŠ "; "settings_phone_number" = "電話ç•Șć·"; "settings_add_phone_number" = "電話ç•Șć·ă‚’èżœćŠ "; "settings_night_mode" = "ć€œé–“ăŠă‚„ă™ăżăƒąăƒŒăƒ‰"; -"settings_fail_to_update_profile" = "è‡Șć·±çŽčä»‹èš­ćźšăźæ›Žæ–°ă«ć€±æ•—ă—ăŸă—ăŸ"; +"settings_fail_to_update_profile" = "ăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«ăźæ›Žæ–°ă«ć€±æ•—ă—ăŸă—ăŸ"; "settings_enable_push_notif" = "ă“ăźç«Żæœ«ă§ăźé€šçŸ„"; -"settings_show_decrypted_content" = "ćŸ©ć·ćŒ–ă•ă‚ŒăŸæ–‡ç« ă‚’èĄšç€ș"; -"settings_global_settings_info" = "あăȘたぼ%@ webă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆäžŠă§ă€ć…šäœ“ăźé€šçŸ„èš­ćźšăŒćŻèƒœă§ă™"; -"settings_pin_rooms_with_missed_notif" = "é€ƒă—ăŸé€šçŸ„ăŒă‚ă‚‹ăƒ«ăƒŒăƒ ă‚’ć›ș漚"; +"settings_show_decrypted_content" = "ćŸ©ć·ćŒ–ă•ă‚ŒăŸć†…ćźčă‚’èĄšç€ș"; +"settings_global_settings_info" = "ć…šäœ“ăźé€šçŸ„èš­ćźšăŻ %@ webă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆă§èĄŒăˆăŸă™"; +"settings_pin_rooms_with_missed_notif" = "é€ƒă—ăŸé€šçŸ„ăŒă‚ă‚‹ăƒ«ăƒŒăƒ ă‚’ăƒ”ăƒłæ­ąă‚"; "settings_ui_language" = "蚀èȘž"; "settings_ui_theme" = "ć€–èŠł"; "settings_ui_theme_auto" = "è‡Ș拕"; @@ -293,110 +293,110 @@ "settings_ui_theme_dark" = "ăƒ€ăƒŒă‚Ż"; "settings_ui_theme_picker_title" = "ć€–èŠłă‚’éžæŠž"; "settings_ui_theme_picker_message" = "è‰Čćè»ąèš­ćźšăźç«Żæœ«ă§ăŻă€ă€Œè‡Șć‹•ă€ă‚’äœżăŁăŠăă ă•ă„"; -"settings_unignore_user" = "%@ă•ă‚“ă‹ă‚‰ăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’èŠ‹ăŸă™ă‹ïŒŸ"; +"settings_unignore_user" = "%@ă•ă‚“ă‹ă‚‰ăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’èĄšç€șă—ăŸă™ă‹ïŒŸ"; "settings_contacts_discover_matrix_users" = "é›»ć­ăƒĄăƒŒăƒ«ăšé›»è©±ç•Șć·ă‚’ăƒŠăƒŒă‚¶ăźæ€œçŽąă«äœżç”š"; "settings_contacts_phonebook_country" = "é›»è©±ćžłăźć›œç•Șć·"; "settings_labs_e2e_encryption" = "ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–"; -"settings_labs_e2e_encryption_prompt_message" = "æš—ć·ćŒ–ăźèš­ćźšă‚’ćźŒäș†ă™ă‚‹ăŸă‚ă«ăŻć†ćșŠăƒ­ă‚°ă‚€ăƒłă—ăŠăă ă•ă„ă€‚"; +"settings_labs_e2e_encryption_prompt_message" = "æš—ć·ćŒ–ăźèš­ćźšă‚’ćźŒäș†ă™ă‚‹ă«ăŻă€ć†ćșŠăƒ­ă‚°ă‚€ăƒłă—ăŠăă ă•ă„ă€‚"; "settings_labs_matrix_apps" = "MatrixケプăƒȘ"; -"settings_labs_create_conference_with_jitsi" = "jitsiăźäŒšè­°é€šè©±ă‚’äœœæˆ"; +"settings_labs_create_conference_with_jitsi" = "Jitsiă§äŒšè­°é€šè©±ă‚’äœœæˆ"; "settings_version" = "ăƒăƒŒă‚žăƒ§ăƒł %@"; -"settings_olm_version" = "OlmăƒăƒŒă‚žăƒ§ăƒł %@"; +"settings_olm_version" = "OlmăźăƒăƒŒă‚žăƒ§ăƒł %@"; "settings_copyright" = "著䜜暩"; "settings_term_conditions" = "ćˆ©ç”šèŠçŽ„"; -"settings_privacy_policy" = "怋äșșæƒ…ć ±äżè­·æ–č針"; -"settings_third_party_notices" = "ć€–éƒšăƒ©ă‚€ăƒ–ăƒ©ăƒȘăźèŠçŽ„"; +"settings_privacy_policy" = "ăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒăƒăƒȘă‚·ăƒŒ"; +"settings_third_party_notices" = "ć€–éƒšăƒ©ă‚€ăƒ–ăƒ©ăƒȘăƒŒăźăƒ©ă‚€ă‚»ăƒłă‚č"; "settings_send_crash_report" = "ćŒżććˆ©ç”šçŠ¶æłăšèȘ€ć‹•äœœæƒ…栱を送俥"; -"settings_enable_rageshake" = "ăƒă‚°ăƒŹăƒăƒŒăƒˆăźăŸă‚ç«Żæœ«ă‚’æŒŻă‚‹"; -"settings_clear_cache" = "äž€æ™‚äżć­˜ă‚’æ¶ˆćŽ»"; -"settings_change_password" = "パă‚čăƒŻăƒŒăƒ‰ć€‰æ›Ž"; -"settings_old_password" = "ä»ŠăŸă§ăźăƒ‘ă‚čăƒŻăƒŒăƒ‰"; +"settings_enable_rageshake" = "ç«Żæœ«ă‚’æŒŻăŁăŠäžć…·ćˆă‚’ć ±ć‘Š"; +"settings_clear_cache" = "ă‚­ăƒŁăƒƒă‚·ăƒ„ă‚’æ¶ˆćŽ»"; +"settings_change_password" = "パă‚čăƒŻăƒŒăƒ‰ă‚’ć€‰æ›Ž"; +"settings_old_password" = "ä»„ć‰ăźăƒ‘ă‚čăƒŻăƒŒăƒ‰"; "settings_new_password" = "æ–°ă—ă„ăƒ‘ă‚čăƒŻăƒŒăƒ‰"; -"settings_confirm_password" = "パă‚čăƒŻăƒŒăƒ‰çąșèȘ"; -"settings_fail_to_update_password" = "パă‚čăƒŻăƒŒăƒ‰ăźæ›Žæ–°ă«ć€±æ•—ă—ăŸă—ăŸ"; -"settings_password_updated" = "あăȘたぼパă‚čăƒŻăƒŒăƒ‰ăŻæ›Žæ–°ă•ă‚ŒăŸă—ăŸ"; -"settings_crypto_device_name" = "ă‚»ăƒƒă‚·ăƒ§ăƒłć: "; -"settings_crypto_device_id" = "\nă‚»ăƒƒă‚·ăƒ§ăƒłID: "; -"settings_crypto_device_key" = "\nă‚»ăƒƒă‚·ăƒ§ăƒłă‚­ăƒŒ:\n"; +"settings_confirm_password" = "パă‚čăƒŻăƒŒăƒ‰ă‚’çąșèȘ"; +"settings_fail_to_update_password" = "Matrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ăźæ›Žæ–°ă«ć€±æ•—ă—ăŸă—ăŸ"; +"settings_password_updated" = "Matrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’æ›Žæ–°ă—ăŸă—ăŸ"; +"settings_crypto_device_name" = "ă‚»ăƒƒă‚·ăƒ§ăƒłćïŒš "; +"settings_crypto_device_id" = "\nă‚»ăƒƒă‚·ăƒ§ăƒłID "; +"settings_crypto_device_key" = "\nă‚»ăƒƒă‚·ăƒ§ăƒłă‚­ăƒŒïŒš\n"; "settings_crypto_export" = "é”ă‚’ă‚šă‚Żă‚čăƒăƒŒăƒˆ"; -"settings_crypto_blacklist_unverified_devices" = "èȘèšŒă•ă‚ŒăŸă‚»ăƒƒă‚·ăƒ§ăƒłăźăżă§æš—ć·ćŒ–"; +"settings_crypto_blacklist_unverified_devices" = "èȘèšŒæžˆăźă‚»ăƒƒă‚·ăƒ§ăƒłă«ăźăżæš—ć·ćŒ–"; // Room Details "room_details_title" = "ăƒ«ăƒŒăƒ ăźè©łçŽ°"; "room_details_people" = "ăƒĄăƒłăƒăƒŒ"; "room_details_files" = "ă‚ąăƒƒăƒ—ăƒ­ăƒŒăƒ‰"; "room_details_settings" = "èš­ćźš"; -"room_details_photo" = "ăƒ«ăƒŒăƒ ăźă‚ąă‚€ă‚łăƒłç”»ćƒ"; +"room_details_photo" = "ăƒ«ăƒŒăƒ ăźç”»ćƒ"; "room_details_room_name" = "ăƒ«ăƒŒăƒ ć"; "room_details_topic" = "トピック"; "room_details_favourite_tag" = "ăŠæ°—ă«ć…„ă‚Š"; "room_details_low_priority_tag" = "䜎ć„Ș慈ćșŠ"; -"room_details_mute_notifs" = "ç™șèš€ăŒă‚ăŁăŠă‚‚é€šçŸ„ă—ăȘい"; -"room_details_direct_chat" = "ćŻŸè©±"; +"room_details_mute_notifs" = "é€šçŸ„ă‚’ăƒŸăƒ„ăƒŒăƒˆ"; +"room_details_direct_chat" = "ăƒ€ă‚€ăƒŹă‚ŻăƒˆăƒĄăƒƒă‚»ăƒŒă‚ž"; "room_details_access_section" = "ă“ăźăƒ«ăƒŒăƒ ă«ă‚ąă‚Żă‚»ă‚čできるäșșăŻïŒŸ"; "room_details_access_section_invited_only" = "æ‹›ćŸ…ă•ă‚ŒăŸäșșたみ"; "room_details_access_section_anyone_apart_from_guest" = "ăƒ«ăƒŒăƒ ăźăƒȘăƒłă‚Żă‚’çŸ„ăŁăŠă„ă‚‹äșșăȘらèȘ°ă§ă‚‚ă‚Čă‚čăƒˆăƒŠăƒŒă‚¶ăƒŒă‚’é™€ăïŒ‰"; "room_details_access_section_anyone" = "ăƒ«ăƒŒăƒ ăźăƒȘăƒłă‚Żă‚’çŸ„ăŁăŠă„ă‚‹äșșăȘらèȘ°ă§ă‚‚ă‚Čă‚čăƒˆăƒŠăƒŒă‚¶ăƒŒă‚’ć«ă‚€ïŒ‰"; "room_details_access_section_no_address_warning" = "ă“ăźăƒ«ăƒŒăƒ ăžăźăƒȘăƒłă‚Żă‚’äœœæˆă™ă‚‹ă«ăŻă€ăƒ«ăƒŒăƒ ăźă‚ąăƒ‰ăƒŹă‚čăŒćż…èŠă§ă™"; -"room_details_access_section_directory_toggle" = "ăƒ«ăƒŒăƒ äž€èŠ§ăžć…Źé–‹"; -"room_details_history_section" = "ç™șèš€ć±„æ­Žă‚’é–ČèŠ§ă§ăă‚‹äșș"; +"room_details_access_section_directory_toggle" = "ă“ăźăƒ«ăƒŒăƒ ă‚’ăƒ«ăƒŒăƒ äž€èŠ§ă«æŽČ茉"; +"room_details_history_section" = "ć±„æ­Žă‚’é–ČèŠ§ă§ăă‚‹äșșăŻïŒŸ"; "room_details_history_section_anyone" = "èȘ°ă§ă‚‚"; -"room_details_history_section_members_only" = "ăƒĄăƒłăƒăƒŒăźăż (ă“ăźèš­ćźšă‚’éžæŠžă—ăŸæ™‚ç‚čから)"; +"room_details_history_section_members_only" = "ăƒĄăƒłăƒăƒŒăźăżïŒˆă“ăźèš­ćźšă‚’éžæŠžă—ăŸæ™‚ç‚čă‹ă‚‰ïŒ‰"; "room_details_history_section_members_only_since_invited" = "ăƒĄăƒłăƒăƒŒăźăżïŒˆæ‹›ćŸ…ă‚’é€ăŁăŸæ™‚ç‚čă‹ă‚‰ïŒ‰"; -"room_details_history_section_members_only_since_joined" = "ăƒĄăƒłăƒăƒŒăźăż (ć‚ćŠ ă—ăŸæ™‚ç‚čから)"; -"room_details_history_section_prompt_title" = "怋äșșæƒ…ć ±ăźè­Šć‘Š"; -"room_details_history_section_prompt_msg" = "ç™șèš€ć±„æ­Žă‚’èȘ­ă‚€ă“ăšăŒă§ăă‚‹äșșăźć€‰æ›ŽăŻă€ä»„ćŸŒăźç™șèš€ă«ăźăżé©ç”šă•ă‚ŒăŸă™ă€‚æ—ąć­˜ăźç™șèš€ć±„æ­ŽăźćŻèŠ–æ€§ăŻć€‰æ›Žă•ă‚ŒăŸă›ă‚“ă€‚"; +"room_details_history_section_members_only_since_joined" = "ăƒĄăƒłăƒăƒŒăźăżïŒˆć‚ćŠ ă—ăŸæ™‚ç‚čă‹ă‚‰ïŒ‰"; +"room_details_history_section_prompt_title" = "ăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒă«é–ąă™ă‚‹è­Šć‘Š"; +"room_details_history_section_prompt_msg" = "ć±„æ­Žăźé–ČèŠ§æš©é™ă«é–ąă™ă‚‹ć€‰æ›ŽăŻă€ä»ŠćŸŒă€ă“ăźăƒ«ăƒŒăƒ ă§èĄšç€șă•ă‚Œă‚‹ăƒĄăƒƒă‚»ăƒŒă‚žă«ăźăżé©ç”šă•ă‚ŒăŸă™ă€‚æ—ąć­˜ăźć±„æ­ŽăźèŠ‹ăˆæ–čă«ăŻćœ±éŸżă—ăŸă›ă‚“ă€‚"; "room_details_addresses_section" = "ケドレă‚č"; "room_details_no_local_addresses" = "ă“ăźăƒ«ăƒŒăƒ ă«ăŻăƒ­ăƒŒă‚«ăƒ«ă‚ąăƒ‰ăƒŹă‚čăŒă‚ă‚ŠăŸă›ă‚“"; "room_details_new_address" = "æ–°ă—ă„ă‚ąăƒ‰ăƒŹă‚čă‚’èżœćŠ "; "room_details_new_address_placeholder" = "æ–°ă—ă„ă‚ąăƒ‰ăƒŹă‚čă‚’èżœćŠ ïŒˆäŸ‹ #foo%@"; -"room_details_addresses_invalid_address_prompt_title" = "äžæ­ŁăȘă‚šă‚€ăƒȘケă‚čăźăƒ•ă‚©ăƒŒăƒžăƒƒăƒˆ"; -"room_details_addresses_invalid_address_prompt_msg" = "%@ぱむăƒȘケă‚čăźæ­Łă—ă„ăƒ•ă‚©ăƒŒăƒžăƒƒăƒˆă§ăŻă‚ă‚ŠăŸă›ă‚“"; +"room_details_addresses_invalid_address_prompt_title" = "ă‚šă‚€ăƒȘケă‚čăźćœąćŒăŒæ­Łă—ăă‚ă‚ŠăŸă›ă‚“"; +"room_details_addresses_invalid_address_prompt_msg" = "%@ぱむăƒȘケă‚čăźæ­Łă—ă„ćœąćŒă§ăŻă‚ă‚ŠăŸă›ă‚“"; "room_details_addresses_disable_main_address_prompt_title" = "ăƒĄă‚€ăƒłă‚ąăƒ‰ăƒŹă‚čăźè­Šć‘Š"; -"room_details_addresses_disable_main_address_prompt_msg" = "ăƒĄă‚€ăƒłă‚ąăƒ‰ăƒŹă‚čăŒèš­ćźšă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚ă“ăźăƒ«ăƒŒăƒ ăźăƒĄă‚€ăƒłă‚ąăƒ‰ăƒŹă‚čăŻç„Ąäœœç‚șă«éžæŠžă€èš­ćźšă•ă‚ŒăŸă™"; +"room_details_addresses_disable_main_address_prompt_msg" = "ăƒĄă‚€ăƒłă‚ąăƒ‰ăƒŹă‚čăŒèš­ćźšă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚ă“ăźăƒ«ăƒŒăƒ ăźăƒĄă‚€ăƒłă‚ąăƒ‰ăƒŹă‚čăŻăƒ©ăƒłăƒ€ăƒ ă«èš­ćźšă•ă‚ŒăŸă™"; "room_details_banned_users_section" = "ăƒ–ăƒ­ăƒƒă‚Żă•ă‚ŒăŸăƒŠăƒŒă‚¶ăƒŒ"; -"room_details_advanced_section" = "æ‹ĄćŒ”èš­ćźš"; -"room_details_advanced_room_id" = "ăƒ«ăƒŒăƒ ăźć›ș有ID:"; -"room_details_advanced_enable_e2e_encryption" = "æš—ć·ćŒ–ă‚’æœ‰ćŠčă«ă™ă‚‹ïŒˆè­Šć‘Š: 有ćŠčćŸŒă«ă“ă‚Œă‚’ç„ĄćŠčă«ă™ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ïŒ)"; -"room_details_advanced_e2e_encryption_enabled" = "ă“ăźăƒ«ăƒŒăƒ ăźç™șèš€ăŻæš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă™"; -"room_details_advanced_e2e_encryption_disabled" = "ă“ăźăƒ«ăƒŒăƒ ăźç™șèš€ăŻæš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; -"room_details_advanced_e2e_encryption_blacklist_unverified_devices" = "èȘèšŒă•ă‚ŒăŸă‚»ăƒƒă‚·ăƒ§ăƒłăźăżă§æš—ć·ćŒ–"; +"room_details_advanced_section" = "高ćșŠăȘèš­ćźš"; +"room_details_advanced_room_id" = "ăƒ«ăƒŒăƒ ID"; +"room_details_advanced_enable_e2e_encryption" = "æš—ć·ćŒ–ă‚’æœ‰ćŠčă«ă™ă‚‹ïŒˆè­Šć‘ŠïŒšæœ‰ćŠčă«ă—ăŸćŸŒă«ç„ĄćŠčă«ă™ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ïŒ)"; +"room_details_advanced_e2e_encryption_enabled" = "ă“ăźăƒ«ăƒŒăƒ ă§ăŻæš—ć·ćŒ–ăŒæœ‰ćŠčです"; +"room_details_advanced_e2e_encryption_disabled" = "ă“ăźăƒ«ăƒŒăƒ ă§ăŻæš—ć·ćŒ–ăŒæœ‰ćŠčă§ăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; +"room_details_advanced_e2e_encryption_blacklist_unverified_devices" = "èȘèšŒæžˆăźă‚»ăƒƒă‚·ăƒ§ăƒłă«ăźăżæš—ć·ćŒ–"; "room_details_fail_to_update_avatar" = "ăƒ«ăƒŒăƒ ăźă‚ąă‚€ă‚łăƒłç”»ćƒăźæ›Žæ–°ă«ć€±æ•—"; "room_details_fail_to_update_room_name" = "ăƒ«ăƒŒăƒ ćăźæ›Žæ–°ă«ć€±æ•—"; -"room_details_fail_to_update_topic" = "ăƒ«ăƒŒăƒ ăźèȘŹæ˜Žăźæ›Žæ–°ă«ć€±æ•—"; +"room_details_fail_to_update_topic" = "ăƒˆăƒ”ăƒƒă‚Żăźæ›Žæ–°ă«ć€±æ•—"; "room_details_fail_to_update_room_guest_access" = "ă‚Čă‚čăƒˆă«ă‚ˆă‚‹ăƒ«ăƒŒăƒ ăžăźă‚ąă‚Żă‚»ă‚čăźèš­ćźšæ›Žæ–°ă«ć€±æ•—"; "room_details_fail_to_update_room_join_rule" = "ć‚ćŠ ăƒ«ăƒŒăƒ«ăźæ›Žæ–°ă«ć€±æ•—"; -"room_details_fail_to_update_room_directory_visibility" = "ăƒ«ăƒŒăƒ äž€èŠ§ăźćŻèŠ–èš­ćźšăźæ›Žæ–°ă«ć€±æ•—"; -"room_details_fail_to_update_history_visibility" = "ç™șèš€ć±„æ­ŽăźćŻèŠ–çŻ„ć›Čăźèš­ćźšæ›Žæ–°ă«ć€±æ•—"; +"room_details_fail_to_update_room_directory_visibility" = "ăƒ«ăƒŒăƒ äž€èŠ§ăźèŠ‹ăˆæ–čăźæ›Žæ–°ă«ć€±æ•—"; +"room_details_fail_to_update_history_visibility" = "ć±„æ­ŽăźèŠ‹ăˆæ–čăźèš­ćźšæ›Žæ–°ă«ć€±æ•—"; "room_details_fail_to_add_room_aliases" = "æ–°ă—ă„ăƒ«ăƒŒăƒ ă‚ąăƒ‰ăƒŹă‚čăźèżœćŠ ă«ć€±æ•—"; "room_details_fail_to_remove_room_aliases" = "ăƒ«ăƒŒăƒ ă‚ąăƒ‰ăƒŹă‚čăźć‰Šé™€ă«ć€±æ•—"; "room_details_fail_to_update_room_canonical_alias" = "ăƒĄă‚€ăƒłă‚ąăƒ‰ăƒŹă‚čăźæ›Žæ–°ă«ć€±æ•—"; -"room_details_fail_to_update_room_direct" = "ăƒ«ăƒŒăƒ ăźćŻŸè©±ă‚żă‚°ăźć€‰æ›Žă«ć€±æ•—"; -"room_details_fail_to_enable_encryption" = "ăƒ«ăƒŒăƒ ăźæš—ć·ćŒ–ăźé–‹ć§‹ă«ć€±æ•—"; +"room_details_fail_to_update_room_direct" = "ă“ăźăƒ«ăƒŒăƒ ăźăƒ€ă‚€ăƒŹă‚Żăƒˆăƒ•ăƒ©ă‚°ăźă‚ąăƒƒăƒ—ăƒ‡ăƒŒăƒˆă«ć€±æ•—"; +"room_details_fail_to_enable_encryption" = "ă“ăźăƒ«ăƒŒăƒ ăźæš—ć·ćŒ–ăźæœ‰ćŠčćŒ–ă«ć€±æ•—"; "room_details_save_changes_prompt" = "ć€‰æ›Žă‚’äżć­˜ă—ăŸă™ă‹ïŒŸ"; -"room_details_set_main_address" = "ăƒĄă‚€ăƒłă‚ąăƒ‰ăƒŹă‚čă‚’èš­ćźš"; +"room_details_set_main_address" = "ăƒĄă‚€ăƒłă‚ąăƒ‰ăƒŹă‚čă«èš­ćźš"; "room_details_unset_main_address" = "ăƒĄă‚€ăƒłă‚ąăƒ‰ăƒŹă‚čăźèš­ćźšă‚’è§Łé™€"; -"room_details_copy_room_id" = "ăƒ«ăƒŒăƒ ć›ș有IDă‚’ă‚łăƒ”ăƒŒ"; +"room_details_copy_room_id" = "ăƒ«ăƒŒăƒ IDă‚’ă‚łăƒ”ăƒŒ"; "room_details_copy_room_address" = "ăƒ«ăƒŒăƒ ăźă‚ąăƒ‰ăƒŹă‚čă‚’ă‚łăƒ”ăƒŒ"; "room_details_copy_room_url" = "ăƒ«ăƒŒăƒ ăźURLă‚’ă‚łăƒ”ăƒŒ"; // Read Receipts "read_receipts_list" = "æ—ąèȘ­äž€èŠ§ă‚’èŠ‹ă‚‹"; "receipt_status_read" = "æ—ąèȘ­çŠ¶æłïŒš "; // Media picker -"media_picker_library" = "ăƒ©ă‚€ăƒ–ăƒ©ăƒȘ"; +"media_picker_library" = "ăƒ©ă‚€ăƒ–ăƒ©ăƒȘăƒŒ"; "media_picker_select" = "遞択"; // Directory "directory_title" = "ăƒ«ăƒŒăƒ äž€èŠ§"; -"directory_server_picker_title" = "ăƒ«ăƒŒăƒ äž€èŠ§ă‚’éžæŠž"; -"directory_server_all_rooms" = "%@ ă‚”ăƒŒăƒăƒŒäžŠăźć…šăŠăźăƒ«ăƒŒăƒ "; +"directory_server_picker_title" = "ăƒ«ăƒŒăƒ ăƒ‡ă‚ŁăƒŹă‚ŻăƒˆăƒȘăƒŒă‚’éžæŠž"; +"directory_server_all_rooms" = "%@ă‚”ăƒŒăƒăƒŒäžŠăźć…šăŠăźăƒ«ăƒŒăƒ "; "directory_server_all_native_rooms" = "慹どぼMatrix連æșăƒ«ăƒŒăƒ "; -"directory_server_type_homeserver" = "ć…Źé–‹ăƒ«ăƒŒăƒ äž€èŠ§ă‚’èĄšç€șă™ă‚‹ăŸă‚ăźæŽ„ç¶šă‚”ăƒŒăƒăƒŒă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; +"directory_server_type_homeserver" = "ć…Źé–‹ăƒ«ăƒŒăƒ ăźäž€èŠ§ă‚’èĄšç€șă™ă‚‹ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; "directory_server_placeholder" = "matrix.org"; // Events formatter -"event_formatter_member_updates" = "%tuæš©é™ăŒć€‰æ›Žă•ă‚ŒăŸă—ăŸ"; -"event_formatter_widget_added" = "%@ォィゾェットが %@ ă•ă‚“ă«ă‚ˆă‚ŠèżœćŠ ă•ă‚ŒăŸă—ăŸ"; -"event_formatter_widget_removed" = "%@ォィゾェットが %@ ă•ă‚“ă«ă‚ˆă‚Šć‰Šé™€ă•ă‚ŒăŸă—ăŸ"; -"event_formatter_jitsi_widget_added" = "éŸłćŁ°äŒšè­°ăŒ%@ ă•ă‚“ă«ă‚ˆă‚ŠèżœćŠ ă•ă‚ŒăŸă—ăŸ"; -"event_formatter_jitsi_widget_removed" = "éŸłćŁ°äŒšè­°ăŒ%@ ă•ă‚“ă«ă‚ˆă‚Šć‰Šé™€ă•ă‚ŒăŸă—ăŸ"; +"event_formatter_member_updates" = "%tuć€‹ăźăƒĄăƒłăƒăƒŒă‚·ăƒƒăƒ—ăźć€‰æ›Ž"; +"event_formatter_widget_added" = "%@ぼォィゾェットが%@ă«ă‚ˆă‚ŠèżœćŠ ă•ă‚ŒăŸă—ăŸ"; +"event_formatter_widget_removed" = "%@ぼォィゾェットが%@ă«ă‚ˆă‚Šć‰Šé™€ă•ă‚ŒăŸă—ăŸ"; +"event_formatter_jitsi_widget_added" = "VoIPäŒšè­°ăŒ%@ă«ă‚ˆă‚ŠèżœćŠ ă•ă‚ŒăŸă—ăŸ"; +"event_formatter_jitsi_widget_removed" = "VoIPäŒšè­°ăŒ%@ă«ă‚ˆă‚Šć‰Šé™€ă•ă‚ŒăŸă—ăŸ"; // Others "or" = "ăŸăŸăŻ"; "you" = "あăȘた"; @@ -404,41 +404,41 @@ "yesterday" = "昚旄"; "network_offline_prompt" = "ă‚€ăƒłă‚żăƒŒăƒăƒƒăƒˆăžăźæŽ„ç¶šăŒćˆ‡ă‚ŒăŠă„ă‚‹ă‚ˆă†ă§ă™ă€‚"; "public_room_section_title" = "ć…Źé–‹ăƒ«ăƒŒăƒ ïŒˆ%@ ă«ăŠïŒ‰ïŒš"; -"bug_report_prompt" = "才曞ケプăƒȘăŒç•°ćžžç”‚äș†ă—ăŸă—ăŸă€‚ăƒă‚°ăƒŹăƒăƒŒăƒˆă‚’é€äżĄă—ăŸă™ă‹ïŒŸ"; -"rage_shake_prompt" = "あăȘたは侍æș€ăŒă‚ăŁăŠç«Żæœ«ă‚’æșă‚‰ă—ăŠă„ă‚‹ă‚ˆă†ă§ă™ă€‚ăƒă‚°ăƒŹăƒăƒŒăƒˆă‚’ă—ăŸă™ă‹ïŒŸ"; +"bug_report_prompt" = "才曞ケプăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăŒă‚Żăƒ©ăƒƒă‚·ăƒ„ă—ăŸă—ăŸă€‚ă‚Żăƒ©ăƒƒă‚·ăƒ„ăƒŹăƒăƒŒăƒˆă‚’é€äżĄă—ăŸă™ă‹ïŒŸ"; +"rage_shake_prompt" = "あăȘたは侍æș€ă§ç«Żæœ«ă‚’æŒŻăŁăŠă„ă‚‹ă‚ˆă†ă§ă™ă€‚ăƒă‚°ăƒŹăƒăƒŒăƒˆă‚’ć ±ć‘Šă—ăŸă™ă‹ïŒŸ"; "do_not_ask_again" = "ć†ăłèĄšç€șしăȘい"; -"camera_access_not_granted" = "%@ăŻă‚«ăƒĄăƒ©ă‚’äœżç”šă™ă‚‹æš©é™ă‚’æŒăŁăŠă„ăŸă›ă‚“ă€‚ć€‹äșșæƒ…ć ±äżè­·èš­ćźšăźć€‰æ›Žă‚’ăŠéĄ˜ă„ă—ăŸă™"; +"camera_access_not_granted" = "%@ă«ăŻă‚«ăƒĄăƒ©ă‚’äœżç”šă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“ă€‚ăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒèš­ćźšă‚’ć€‰æ›Žă—ăŠăă ă•ă„"; "large_badge_value_k_format" = "%.1fK"; // room display name "room_displayname_room_invite" = "æ‹›ćŸ…"; -"room_displayname_two_members" = "%@ ず %@"; +"room_displayname_two_members" = "%@ず%@"; "room_displayname_no_title" = "だれもいăȘă„éƒšć±‹"; // Call -"call_incoming_voice_prompt" = "%@ ă•ă‚“ă‹ă‚‰é€šè©±ăźç€äżĄäž­"; -"call_incoming_video_prompt" = "%@ ă•ă‚“ă‹ă‚‰æ˜ ćƒă€ăé€šè©±ăźç€äżĄäž­"; +"call_incoming_voice_prompt" = "%@ă‹ă‚‰é€šè©±ăźç€äżĄäž­"; +"call_incoming_video_prompt" = "%@からビデă‚Șé€šè©±ăźç€äżĄäž­"; "call_incoming_voice" = "着信侭
"; "call_incoming_video" = "ビデă‚Șé€šè©±ăźç€äżĄäž­â€Š"; "call_already_displayed" = "æ—ąă«é€šè©±äž­ă§ă™ă€‚"; -"call_jitsi_error" = "äŒšè­°é€šè©±ăžăźć‚ćŠ ă«ć€±æ•—ă—ăŸă—ăŸă€‚"; +"call_jitsi_error" = "ă‚°ăƒ«ăƒŒăƒ—é€šè©±ăžăźć‚ćŠ ă«ć€±æ•—ă—ăŸă—ăŸă€‚"; // No VoIP support -"no_voip_title" = "é€šè©±ç€äżĄäž­"; -"no_voip" = "%@ă•ă‚“ă‹ă‚‰é€šè©±ăźç€äżĄăŒă‚ă‚ŠăŸă—ăŸăŒă€%@ăŻé€šè©±ă‚’ăŸă ă‚”ăƒăƒŒăƒˆă—ăŠă„ăŸă›ă‚“ă€‚\nă“ăźé€šçŸ„ă‚’ç„ĄèŠ–ă—ăŠă€ćˆ„ăźç«Żæœ«ă‹ă‚‰ç€äżĄă«ćżœç­”ă™ă‚‹ă“ăšă‚‚ă€æ‹’ćŠă™ă‚‹ă“ăšă‚‚ă§ăăŸă™ă€‚"; +"no_voip_title" = "着信侭"; +"no_voip" = "%@があăȘăŸă‚’ć‘Œăłć‡șă—ăŠă„ăŸă™ăŒă€%@ăŻăŸă é€šè©±ă‚’ă‚”ăƒăƒŒăƒˆă—ăŠă„ăŸă›ă‚“ă€‚\nă“ăźé€šçŸ„ă‚’ç„ĄèŠ–ă—ăŠćˆ„ăźç«Żæœ«ă‹ă‚‰ç€äżĄă«ćżœç­”ă™ă‚‹ă“ăšă‚‚ă€ăŸăŸăŻç€äżĄă‚’æ‹’ćŠă™ă‚‹ă“ăšă‚‚ă§ăăŸă™ă€‚"; // Crash report // Crypto "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" = "開ç™șè€…ăŒć•éĄŒă‚’èšșæ–­ă™ă‚‹ăŸă‚ă«ă€ă“ăźElementăźăƒ­ă‚°ăŒăƒă‚°ăƒŹăƒăƒŒăƒˆăšäž€ç·’ă«é€äżĄă•ă‚ŒăŸă™ă€‚äžŠèš˜æ–‡ç« ăźăżă‚’é€äżĄă—ăŸă„ć ŽćˆăŻä»„äž‹ăźăƒă‚§ăƒƒă‚Żă‚’è§Łé™€ă—ăŠăă ă•ă„ïŒš"; +"bug_report_description" = "äžć…·ćˆăźć†…ćźčăšçŠ¶æłăźèȘŹæ˜Žă‚’ăŠéĄ˜ă„ă—ăŸă™ă€‚äœ•ă‚’ă—ăŸă—ăŸă‹ïŒŸäœ•ăŒè”·ă“ă‚‹ăčăă§ă—ăŸă‹ïŒŸćźŸéš›ă«è”·ă“ăŁăŸäș‹è±ĄăŻäœ•ă§ă—ă‚‡ă†ă‹ïŒŸ"; +"bug_crash_report_title" = "ă‚Żăƒ©ăƒƒă‚·ăƒ„ăƒŹăƒăƒŒăƒˆ"; +"bug_crash_report_description" = "ă‚Żăƒ©ăƒƒă‚·ăƒ„ă™ă‚‹ć‰ă«ă‚ăȘăŸăŒă—ăŠă„ăŸă“ăšă‚’èš˜ă—ăŠăă ă•ă„ïŒš"; +"bug_report_logs_description" = "開ç™șè€…ăŒć•éĄŒă‚’èšșæ–­ă™ă‚‹ăŸă‚ă«ă€ă“ăźElementăźăƒ­ă‚°ăŒăƒă‚°ăƒŹăƒăƒŒăƒˆăšäž€ç·’ă«é€äżĄă•ă‚ŒăŸă™ă€‚äžŠèš˜ăźæ–‡ç« ăźăżă‚’é€äżĄă—ăŸă„ć ŽćˆăŻă€ä»„äž‹ăźăƒă‚§ăƒƒă‚Żă‚’è§Łé™€ă—ăŠăă ă•ă„ïŒš"; "bug_report_send_logs" = "ログを送信"; -"bug_report_send_screenshot" = "ç”»éąăźă‚čクăƒȘăƒŒăƒłă‚·ăƒ§ăƒƒăƒˆç”»ćƒă‚’é€äżĄ"; -"bug_report_progress_zipping" = "ログを揎集"; +"bug_report_send_screenshot" = "ă‚čクăƒȘăƒŒăƒłă‚·ăƒ§ăƒƒăƒˆăźç”»ćƒă‚’é€äżĄ"; +"bug_report_progress_zipping" = "ăƒ­ă‚°ă‚’ćŽé›†ă—ăŠă„ăŸă™"; "bug_report_progress_uploading" = "ć ±ć‘Šă‚’é€äżĄă—ăŠă„ăŸă™"; "bug_report_send" = "送信"; // Widget -"widget_no_power_to_manage" = "あăȘăŸăŒă“ăźăƒ«ăƒŒăƒ ă§ă‚Šă‚Łă‚žă‚§ăƒƒăƒˆă‚’çźĄç†ă™ă‚‹ăŸă‚ăźæš©é™ăŒćż…èŠă§ă™"; +"widget_no_power_to_manage" = "ă“ăźăƒ«ăƒŒăƒ ă§ă‚Šă‚Łă‚žă‚§ăƒƒăƒˆă‚’çźĄç†ă™ă‚‹ăŸă‚ăźæš©é™ăŒćż…èŠă§ă™"; "widget_creation_failure" = "ă‚Šă‚Łă‚žă‚§ăƒƒăƒˆăźäœœæˆă«ć€±æ•—ă—ăŸă—ăŸ"; // Widget Integration Manager "widget_integration_need_to_be_able_to_invite" = "ăă‚Œă‚’èĄŒă†ă«ăŻăƒŠăƒŒă‚¶ăƒŒă‚’æ‹›ćŸ…ă™ă‚‹æš©é™ăŒćż…èŠă§ă™ă€‚"; @@ -447,46 +447,46 @@ "widget_integration_room_not_recognised" = "ă“ăźăƒ«ăƒŒăƒ ă§ăŻèȘă‚ă‚‰ă‚ŒăŸă›ă‚“。"; "widget_integration_positive_power_level" = "æš©é™ăźæ•°ć€€ăŻæ­Łăźæ•Žæ•°ă§ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚"; "widget_integration_must_be_in_room" = "あăȘăŸăŻă“ăźăƒ«ăƒŒăƒ ă«æ‰€ć±žă—ăŠă„ăŸă›ă‚“ă€‚"; -"widget_integration_no_permission_in_room" = "あăȘăŸăŻă“ăźăƒ«ăƒŒăƒ ă§æš©é™ăŒă‚ă‚ŠăŸă›ă‚“ă€‚"; -"widget_integration_missing_room_id" = "ăƒ«ăƒŒăƒ ć›ș有IDăźèŠæ±‚ă«ć€±æ•—ă—ăŸă—ăŸă€‚"; -"widget_integration_missing_user_id" = "ăƒŠăƒŒă‚¶ăƒŒć›ș有IDăźèŠæ±‚ă«ć€±æ•—ă—ăŸă—ăŸă€‚"; +"widget_integration_no_permission_in_room" = "ă“ăźăƒ«ăƒŒăƒ ă§ăă‚Œă‚’èĄŒă†æš©é™ăŒă‚ă‚ŠăŸă›ă‚“ă€‚"; +"widget_integration_missing_room_id" = "ăƒȘクスă‚čトにroom_idăŒă‚ă‚ŠăŸă›ă‚“ă€‚"; +"widget_integration_missing_user_id" = "ăƒȘクスă‚čトにuser_idăŒă‚ă‚ŠăŸă›ă‚“ă€‚"; "widget_integration_room_not_visible" = "ăƒ«ăƒŒăƒ  %@ ăŻèŠ‹ăˆăŸă›ă‚“ă€‚"; // Share extension "share_extension_auth_prompt" = "ăƒĄă‚€ăƒłăźă‚ąăƒ—ăƒȘă«ăƒ­ă‚°ă‚€ăƒłă—ăŠă‚łăƒłăƒ†ăƒłăƒ„ă‚’ć…±æœ‰"; -"share_extension_failed_to_encrypt" = "é€äżĄă«ć€±æ•—ă—ăŸă—ăŸă€‚ă“ăźăƒ«ăƒŒăƒ ăźæš—ć·èš­ćźšă‚’ăƒĄă‚€ăƒłăźç«Żæœ«ă§çąșèȘă—お䞋さい"; +"share_extension_failed_to_encrypt" = "é€äżĄă«ć€±æ•—ă—ăŸă—ăŸă€‚ă“ăźăƒ«ăƒŒăƒ ăźæš—ć·èš­ćźšă‚’ăƒĄă‚€ăƒłăźç«Żæœ«ă§çąșèȘă—ăŠăă ă•ă„"; "room_details_advanced_e2e_encryption_prompt_message" = "End-to-endæš—ć·ćŒ–ăŻćźŸéš“çš„ăȘă‚‚ăźă§ă‚ă‚Šă€äżĄé Œæ€§ăŒäœŽă„ć ŽćˆăŒă‚ă‚ŠăŸă™ă€‚\n\nç™șèš€ă‚’äżè­·ă™ă‚‹ăŸă‚ă«ăŻăŸă ăă‚Œă‚’äżĄç”šă™ăčăă§ăŻă‚ă‚ŠăŸă›ă‚“ă€‚\n\nç«Żæœ«ăŻă€ăŸă ć‚ćŠ ă™ă‚‹ć‰ăźç™șèš€ć±„æ­Žă‚’ćŸ©ć·ćŒ–ă™ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ă€‚\n\néƒšć±‹ăźæš—ć·ćŒ–ăŒä»Šă‹ă‚‰æœ‰ćŠčにăȘったら、もう無ćŠčă«ă™ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ă€‚\n\næš—ć·ćŒ–ă•ă‚ŒăŸç™șèš€ăŻă€ăŸă æš—ć·ćŒ–ă‚’ćźŸèŁ…ă—ăŠă„ăȘいケプăƒȘă§ăŻèĄšç€șă•ă‚ŒăŸă›ă‚“ă€‚"; "settings_enable_callkit" = "ć‘Œăłć‡șă—ăźç”±ćˆ"; -"settings_pin_rooms_with_unread" = "æœȘèȘ­ăźă‚ă‚‹ăƒ«ăƒŒăƒ ă‚’ć›ș漚"; +"settings_pin_rooms_with_unread" = "æœȘèȘ­ăƒĄăƒƒă‚»ăƒŒă‚žăŒă‚ă‚‹ăƒ«ăƒŒăƒ ă‚’ăƒ”ăƒłæ­ąă‚"; "title_groups" = "ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒ"; "room_recents_server_notice_section" = "ă‚·ă‚čăƒ†ăƒ ă‚ąăƒ©ăƒŒăƒˆ"; // Groups tab "group_invite_section" = "æ‹›ćŸ…"; "group_section" = "ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒ"; -"room_message_reply_to_placeholder" = "èż”äżĄă‚’é€ă‚‹ïŒˆæš—ć·ćŒ–ă•ă‚ŒăŠă„ăȘă„ïŒ‰â€Š"; +"room_message_reply_to_placeholder" = "èż”äżĄă‚’é€ă‚‹ïŒˆæš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă›ă‚“ïŒ‰â€Š"; "room_do_not_have_permission_to_post" = "ă“ăźăƒ«ăƒŒăƒ ă«æŠ•çšżă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“"; -"encrypted_room_message_reply_to_placeholder" = "æš—ć·ćŒ–ă•ă‚ŒăŸèż”äżĄă‚’é€äżĄâ€Š"; +"encrypted_room_message_reply_to_placeholder" = "æš—ć·ćŒ–ă•ă‚ŒăŸèż”äżĄă‚’é€ă‚‹â€Š"; "room_message_reply_to_short_placeholder" = "èż”äżĄă‚’é€ă‚‹â€Š"; -"room_event_action_view_decrypted_source" = "ćŸ©ć·ćŒ–ă•ă‚ŒăŸă‚œăƒŒă‚čă‚’èŠ‹ă‚‹"; +"room_event_action_view_decrypted_source" = "ćŸ©ć·ćŒ–ă•ă‚ŒăŸă‚œăƒŒă‚čă‚łăƒŒăƒ‰ă‚’èĄšç€ș"; "room_event_action_kick_prompt_reason" = "ă“ăźăƒŠăƒŒă‚¶ăƒŒă‚’èżœæ”Ÿă™ă‚‹ç†ç”±"; -"room_action_send_photo_or_video" = "ć†™çœŸă‹ć‹•ç”»ă‚’é€ă‚‹"; -"room_action_send_sticker" = "ă‚čタンプ送信"; +"room_action_send_photo_or_video" = "ć†™çœŸăŸăŸăŻć‹•ç”»ă‚’é€äżĄ"; +"room_action_send_sticker" = "ă‚čăƒ†ăƒƒă‚«ăƒŒă‚’é€äżĄ"; "room_replacement_information" = "ă“ăźăƒ«ăƒŒăƒ ăŻçœźăæ›ăˆă‚‰ă‚ŒăŠăŠă‚Šă€ă‚ąă‚Żăƒ†ă‚Łăƒ–ă§ăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; -"room_replacement_link" = "ă“ăĄă‚‰ă‹ă‚‰ç¶™ç¶šäž­ăźäŒšè©±ă‚’çąșèȘă™ă‚‹ă€‚"; +"room_replacement_link" = "ă“ăĄă‚‰ă‹ă‚‰ç¶™ç¶šäž­ăźäŒšè©±ă‚’çąșèȘă€‚"; "room_predecessor_information" = "ă“ăźăƒ«ăƒŒăƒ ăŻćˆ„ăźäŒšè©±ăźç¶šăă§ă™ă€‚"; -"room_predecessor_link" = "ä»„ć‰ăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’èŠ‹ă‚‹ă«ăŻă€ă“ă“ă‚’ă‚żăƒƒăƒ—ă—ăŠăă ă•ă„ă€‚"; -"room_resource_limit_exceeded_message_contact_2_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ă€ă‚’è¶…ăˆăŠă„ăŸă™ "; -"room_resource_usage_limit_reached_message_1_monthly_active_user" = "ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻæœˆé–“ă‚ąă‚Żăƒ†ă‚Łăƒ–ăƒŠăƒŒă‚¶ăƒŒæ•°ćˆ¶é™ă‚’è¶…ăˆăŠă„ăŸă™ "; +"room_resource_usage_limit_reached_message_1_default" = "ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻăƒȘă‚œăƒŒă‚čăźäžŠé™ă«é”ă—ăŸă—ăŸ "; +"room_resource_usage_limit_reached_message_1_monthly_active_user" = "ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻæœˆé–“ă‚ąă‚Żăƒ†ă‚Łăƒ–ăƒŠăƒŒă‚¶ăƒŒæ•°ăźäžŠé™ă«é”ă—ăŸă—ăŸ "; "room_resource_usage_limit_reached_message_2" = "äž€éƒšăźăƒŠăƒŒă‚¶ăƒŒăŻăƒ­ă‚°ă‚€ăƒłă§ăăȘくăȘă‚ŠăŸă™ă€‚"; "room_resource_usage_limit_reached_message_contact_3" = " ă“ăźćˆ¶é™ă‚’ćą—ă‚„ă™ă«ăŻă€‚"; -"settings_deactivate_account" = "無ćŠčćŒ–ă—ăŸă‚ąă‚«ă‚Šăƒłăƒˆ"; +"settings_deactivate_account" = "ă‚ąă‚«ă‚Šăƒłăƒˆăźç„ĄćŠč挖"; "settings_labs_room_members_lazy_loading" = "é…ć»¶ăƒ­ăƒŒăƒ‰ăƒ«ăƒŒăƒ ăźăƒĄăƒłăƒăƒŒ"; "settings_labs_room_members_lazy_loading_error_message" = "あăȘăŸăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻăŸă ăƒ«ăƒŒăƒ ăƒĄăƒłăƒăƒŒăźé…ć»¶ăƒ­ăƒŒăƒ‰ă‚’ă‚”ăƒăƒŒăƒˆă—ăŠă„ăŸă›ă‚“ă€‚ ćŸŒă§è©Šă—ăŠăă ă•ă„ă€‚"; -"settings_deactivate_my_account" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’ç„ĄćŠčă«ă—ăŸă™"; +"settings_deactivate_my_account" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’æ°žäč…に焥ćŠčにする"; "room_details_flair_section" = "ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒăźç‰čè‰Čă‚’èĄšç€ș"; "room_details_new_flair_placeholder" = "æ–°ă—ă„ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒIDă‚’èżœćŠ ïŒˆäŸ‹ +foo%@"; -"room_details_flair_invalid_id_prompt_title" = "無ćŠčăȘćœąćŒ"; +"room_details_flair_invalid_id_prompt_title" = "äžæ­ŁăȘćœąćŒă§ă™"; "room_details_flair_invalid_id_prompt_msg" = "%@ăŻă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒăźæœ‰ćŠčăȘè­˜ćˆ„ć­ă§ăŻă‚ă‚ŠăŸă›ă‚“"; "room_details_fail_to_update_room_communities" = "é–ąé€Łă™ă‚‹ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒăźæ›Žæ–°ă«ć€±æ•—"; // Group Details @@ -495,15 +495,15 @@ "group_details_people" = "é€Łç”Ąć…ˆ"; "group_details_rooms" = "ăƒ«ăƒŒăƒ "; // Group Home -"group_home_one_member_format" = "1ćăźăƒĄăƒłăƒăƒŒ"; -"group_home_multi_members_format" = "%tućăźăƒĄăƒłăƒăƒŒ"; -"group_home_one_room_format" = "1ă€ăźăƒ«ăƒŒăƒ "; -"group_home_multi_rooms_format" = "%tuă€ăźăƒ«ăƒŒăƒ "; +"group_home_one_member_format" = "1äșșăźăƒĄăƒłăƒăƒŒ"; +"group_home_multi_members_format" = "%tuäșșăźăƒĄăƒłăƒăƒŒ"; +"group_home_one_room_format" = "1ć€‹ăźăƒ«ăƒŒăƒ "; +"group_home_multi_rooms_format" = "%tuć€‹ăźăƒ«ăƒŒăƒ "; "group_invitation_format" = "%@ăŒă“ăźă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒă«ă‚ăȘăŸă‚’æ‹›ćŸ…ă—ăŸă—ăŸ"; // Group participants "group_participants_add_participant" = "ć‚ćŠ è€…ă‚’èżœćŠ "; -"group_participants_leave_prompt_title" = "ă‚°ăƒ«ăƒŒăƒ—ă‚’é€€ć‡ș"; -"group_participants_leave_prompt_msg" = "ă‚°ăƒ«ăƒŒăƒ—ă‚’é€€ć‡șă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"group_participants_leave_prompt_title" = "ă‚°ăƒ«ăƒŒăƒ—ă‹ă‚‰é€€ć‡ș"; +"group_participants_leave_prompt_msg" = "ă‚°ăƒ«ăƒŒăƒ—ă‹ă‚‰é€€ć‡șă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; "group_participants_remove_prompt_title" = "çąșèȘ"; "group_participants_remove_prompt_msg" = "ă“ăźă‚°ăƒ«ăƒŒăƒ—ă‹ă‚‰%@ă‚’ć‰Šé™€ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; "group_participants_invite_prompt_title" = "çąșèȘ"; @@ -514,36 +514,36 @@ "group_participants_invite_malformed_id" = "äžæ­ŁăȘID。'@localpart:domain'ぼようăȘMatrix IDでăȘければăȘă‚ŠăŸă›ă‚“"; "group_participants_invited_section" = "æ‹›ćŸ…äž­"; // Group rooms -"group_rooms_filter_rooms" = "ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒăƒ«ăƒŒăƒ ă‚’ç”žă‚ŠèŸŒă‚€"; +"group_rooms_filter_rooms" = "ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒăźăƒ«ăƒŒăƒ ă‚’ç”žă‚ŠèŸŒă‚€"; "event_formatter_rerequest_keys_part1_link" = "æš—ć·é”ă‚’ć†èŠæ±‚"; "event_formatter_rerequest_keys_part2" = " あăȘăŸăźä»–ăźă‚»ăƒƒă‚·ăƒ§ăƒłă«ă€‚"; "homeserver_connection_lost" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒă«æŽ„ç¶šă§ăăŸă›ă‚“ă§ă—ăŸă€‚"; -"widget_sticker_picker_no_stickerpacks_alert" = "çŸćœšă€ă‚čăƒ†ăƒƒă‚«ăƒŒăƒ‘ăƒƒă‚Żă‚’æœ‰ćŠčă«ă—ăŠă„ăŸă›ă‚“ă€‚"; +"widget_sticker_picker_no_stickerpacks_alert" = "çŸćœšă€ă‚čăƒ†ăƒƒă‚«ăƒŒăƒ‘ăƒƒă‚ŻăŒæœ‰ćŠčにăȘăŁăŠă„ăŸă›ă‚“ă€‚"; "widget_sticker_picker_no_stickerpacks_alert_add_now" = "ä»Šă™ăèżœćŠ ă—ăŸă™ă‹ïŒŸ"; // Room key request dialog "e2e_room_key_request_title" = "æš—ć·é”ăźèŠæ±‚"; -"e2e_room_key_request_message_new_device" = "æš—ć·é”ă‚’èŠæ±‚ă—ăŠă„ă‚‹æ–°ă—ă„ç«Żæœ« '%@' ă‚’èżœćŠ ă—ăŸă—ăŸă€‚"; -"e2e_room_key_request_message" = "èȘèšŒă•ă‚ŒăŠă„ăȘă„ç«Żæœ« '%@' ăŒæš—ć·é”ă‚’èŠæ±‚ă—ăŠă„ăŸă™ă€‚"; -"e2e_room_key_request_start_verification" = "èȘèšŒă‚’ć§‹ă‚ăŸă™â€Š"; -"e2e_room_key_request_share_without_verifying" = "èȘèšŒă›ăšă«ć…±æœ‰"; +"e2e_room_key_request_message_new_device" = "æš—ć·é”ă‚’èŠæ±‚ă—ăŠă„ă‚‹æ–°ă—ă„ă‚»ăƒƒă‚·ăƒ§ăƒł'%@'ă‚’èżœćŠ ă—ăŸă—ăŸă€‚"; +"e2e_room_key_request_message" = "æœȘèȘèšŒăźă‚»ăƒƒă‚·ăƒ§ăƒł'%@'ăŒæš—ć·é”ă‚’èŠæ±‚ă—ăŠă„ăŸă™ă€‚"; +"e2e_room_key_request_start_verification" = "èȘèšŒă‚’開構 "; +"e2e_room_key_request_share_without_verifying" = "èȘèšŒă›ăšć…±æœ‰"; "e2e_room_key_request_ignore_request" = "èŠæ±‚ă‚’ç„ĄèŠ–"; // GDPR -"gdpr_consent_not_given_alert_message" = "%@ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒă‚’ćŒ•ăç¶šăäœżç”šă™ă‚‹ă«ăŻă€ćˆ©ç”šèŠçŽ„ă‚’çąșèȘă—ăŠćŒæ„ă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; +"gdpr_consent_not_given_alert_message" = "%@ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒă‚’ćŒ•ăç¶šăäœżç”šă™ă‚‹ă«ăŻă€ćˆ©ç”šèŠçŽ„ă‚’çąșèȘă—ăŠćŒæ„ă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; "gdpr_consent_not_given_alert_review_now_action" = "çąșèȘ"; -"deactivate_account_title" = "無ćŠčăȘă‚ąă‚«ă‚Šăƒłăƒˆ"; -"deactivate_account_informations_part1" = "ă“ă‚Œă«ă‚ˆă‚Šă€ă‚ąă‚«ă‚ŠăƒłăƒˆăŻæ°žäč…ă«äœżç”šă§ăăȘくăȘă‚ŠăŸă™ă€‚ăƒ­ă‚°ă‚€ăƒłă™ă‚‹ă“ăšăŻă§ăăšă€èȘ°ă‚‚ćŒă˜ăƒŠăƒŒă‚¶ăƒŒIDă‚’ć†ç™»éŒČă™ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ă€‚ă“ă‚Œă«ă‚ˆă‚Šă€ă‚ăȘăŸăźă‚ąă‚«ă‚ŠăƒłăƒˆăŻć‚ćŠ ă—ăŠă„ă‚‹ć…šăŠăźăƒ«ăƒŒăƒ ă‹ă‚‰é€€ćŽ»ă—ă€ă‚ăȘたぼIDă‚”ăƒŒăƒăƒŒă‹ă‚‰ă‚ąă‚«ă‚Šăƒłăƒˆăźè©łçŽ°ăŒć‰Šé™€ă•ă‚ŒăŸă™ă€‚ "; -"deactivate_account_informations_part2_emphasize" = "ă“ăźć‹•äœœăŻć…ƒă«æˆ»ă›ăŸă›ă‚“ă€‚"; -"deactivate_account_informations_part3" = "\n\nă‚ąă‚«ă‚Šăƒłăƒˆăźç„ĄćŠč挖 "; -"deactivate_account_informations_part4_emphasize" = "ăƒ‡ăƒ•ă‚©ăƒ«ăƒˆă§ăŻă‚ăȘăŸăŒé€äżĄă—ăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’ćż˜ă‚Œă‚‹ă“ăšăŻă‚ă‚ŠăŸă›ă‚“ă€‚ "; -"deactivate_account_informations_part5" = "ăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­Žăźæ¶ˆćŽ»ă‚’æœ›ă‚€ć ŽćˆăŻă€ä»„äž‹ăźăƒœăƒƒă‚Żă‚čă«ăƒă‚§ăƒƒă‚Żă‚’ć…„ă‚ŒăŠăă ă•ă„ă€‚\n\nMatrixăźăƒĄăƒƒă‚»ăƒŒă‚žăźèŠ‹ăˆæ–čăŻă€é›»ć­ăƒĄăƒŒăƒ«ăšćŒæ§˜ăźă‚‚ăźă§ă™ă€‚ăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­Žă‚’æ¶ˆćŽ»ă™ă‚‹ăšă€ă‚ăȘăŸăŒé€äżĄă—ăŸăƒĄăƒƒă‚»ăƒŒă‚žăŻă€æ–°èŠăŸăŸăŻæœȘ登éŒČăźăƒŠăƒŒă‚¶ăƒŒă«ć…±æœ‰ă•ă‚Œă‚‹ă“ăšăŻă‚ă‚ŠăŸă›ă‚“ăŒă€æ—ąă«ăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć–ćŸ—ă—ăŠă„ă‚‹ç™»éŒČăƒŠăƒŒă‚¶ăƒŒăŻă€ä»ŠćŸŒă‚‚ăăźă‚łăƒ”ăƒŒă«ă‚ąă‚Żă‚»ă‚čă§ăăŸă™ă€‚"; -"deactivate_account_forget_messages_information_part1" = "ă‚ąă‚«ă‚ŠăƒłăƒˆăŒç„ĄćŠčにăȘăŁăŸăšăă«é€äżĄă—ăŸć…šăŠăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ćż˜ă‚ŒăŠăă ă•ă„ ("; +"deactivate_account_title" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’ç„ĄćŠč挖"; +"deactivate_account_informations_part1" = "ă“ăźæ“äœœă«ă‚ˆă‚Šă€ă‚ăȘăŸăźă‚ąă‚«ă‚ŠăƒłăƒˆăŻæ°žäč…ă«äœżăˆăȘくăȘă‚ŠăŸă™ă€‚ăƒ­ă‚°ă‚€ăƒłă—ăŸă‚ŠćŒă˜ăƒŠăƒŒă‚¶ăƒŒIDă‚’ć†ç™»éŒČしたりするこべはできăȘくăȘă‚ŠăŸă™ă€‚ă‚ăȘăŸăźă‚ąă‚«ă‚ŠăƒłăƒˆăŻć‚ćŠ ă—ăŠă„ă‚‹ć…šăŠăźăƒ«ăƒŒăƒ ă‹ă‚‰é€€ć‡șし、あăȘたぼIDă‚”ăƒŒăƒăƒŒă‹ă‚‰ă‚ąă‚«ă‚Šăƒłăƒˆăźè©łçŽ°ăŒć‰Šé™€ă•ă‚ŒăŸă™ă€‚ "; +"deactivate_account_informations_part2_emphasize" = "ă“ăźæ“äœœăŻć–ă‚Šæ¶ˆă›ăŸă›ă‚“ă€‚"; +"deactivate_account_informations_part3" = "\n\nă‚ąă‚«ă‚Šăƒłăƒˆă‚’ç„ĄćŠč挖しども、 "; +"deactivate_account_informations_part4_emphasize" = "ăƒ‡ăƒ•ă‚©ăƒ«ăƒˆă§ăŻă‚ăȘăŸăŒé€äżĄă—ăŸăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­ŽăŻæ¶ˆćŽ»ă•ă‚ŒăŸă›ă‚“ă€‚ "; +"deactivate_account_informations_part5" = "ăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­Žă‚’æ¶ˆćŽ»ă™ă‚‹ć ŽćˆăŻă€ä»„äž‹ăźăƒœăƒƒă‚Żă‚čă«ăƒă‚§ăƒƒă‚Żă‚’ć…„ă‚ŒăŠăă ă•ă„ă€‚\n\nMatrixăźăƒĄăƒƒă‚»ăƒŒă‚žăźèŠ‹ăˆæ–čăŻă€é›»ć­ăƒĄăƒŒăƒ«ăšćŒæ§˜ăźă‚‚ăźă§ă™ă€‚ăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­Žă‚’æ¶ˆćŽ»ă™ă‚‹ăšă€ă‚ăȘăŸăŒă“ă‚ŒăŸă§é€äżĄă—ăŸăƒĄăƒƒă‚»ăƒŒă‚žăŻă€æ–°èŠăŸăŸăŻæœȘ登éŒČăźăƒŠăƒŒă‚¶ăƒŒă«ć…±æœ‰ă•ă‚Œă‚‹ă“ăšăŻă‚ă‚ŠăŸă›ă‚“ăŒă€æ—ąă«ăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć–ćŸ—ă—ăŠă„ă‚‹ç™»éŒČăƒŠăƒŒă‚¶ăƒŒăŻă€ä»ŠćŸŒă‚‚ăăźă‚łăƒ”ăƒŒă«ă‚ąă‚Żă‚»ă‚čă§ăăŸă™ă€‚"; +"deactivate_account_forget_messages_information_part1" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’ç„ĄćŠčćŒ–ă™ă‚‹éš›ă€ć…šăŠăźé€äżĄæžˆăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’æ¶ˆćŽ»ïŒˆ"; "deactivate_account_forget_messages_information_part2_emphasize" = "è­Šć‘Š"; -"deactivate_account_forget_messages_information_part3" = "ïŒšă“ă‚ŒăŻć°†æ„ăźăƒŠăƒŒă‚¶ăƒŒă«äŒšè©±ăźäžćźŒć…šăȘăƒ“ăƒ„ăƒŒăŒèĄšç€șされる)"; -"deactivate_account_validate_action" = "無ćŠčăȘă‚ąă‚«ă‚Šăƒłăƒˆ"; -"deactivate_account_password_alert_title" = "無ćŠčăȘă‚ąă‚«ă‚Šăƒłăƒˆ"; -"deactivate_account_password_alert_message" = "ç¶šèĄŒă™ă‚‹ă«ăŻă€Matrix ă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; +"deactivate_account_forget_messages_information_part3" = "ïŒšä»ŠćŸŒăźăƒŠăƒŒă‚¶ăƒŒă«ăŻă€äžćźŒć…šăȘäŒšè©±ăŒèĄšç€șă•ă‚ŒăŸă™ïŒ‰"; +"deactivate_account_validate_action" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’ç„ĄćŠč挖"; +"deactivate_account_password_alert_title" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’ç„ĄćŠč挖"; +"deactivate_account_password_alert_message" = "ç¶šèĄŒă™ă‚‹ă«ăŻă€Matrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; // Re-request confirmation dialog -"rerequest_keys_alert_title" = "èŠæ±‚ăŒé€äżĄă•ă‚ŒăŸă—ăŸ"; +"rerequest_keys_alert_title" = "èŠæ±‚ă‚’é€äżĄă—ăŸă—ăŸ"; "rerequest_keys_alert_message" = "é”ă‚’ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă«é€äżĄă§ăă‚‹ă‚ˆă†ă«ă€ăƒĄăƒƒă‚»ăƒŒă‚žă‚’ćŸ©ć·ćŒ–ă§ăă‚‹ä»–ăźç«Żæœ«ă§%@ă‚’è”·ć‹•ă—ăŠăă ă•ă„ă€‚"; "room_event_action_ban_prompt_reason" = "ă“ăźăƒŠăƒŒă‚¶ăƒŒă‚’ăƒ–ăƒ­ăƒƒă‚Żă™ă‚‹ç†ç”±"; "room_resource_limit_exceeded_message_contact_1" = " お願い "; @@ -554,85 +554,85 @@ "close" = "閉じる"; // Accessibility "accessibility_checkbox_label" = "チェックボックă‚č"; -"auth_login_single_sign_on" = "ă‚·ăƒłă‚°ăƒ«ă‚”ă‚€ăƒłă‚Șン(SSO)ă§ă‚”ă‚€ăƒłă‚€ăƒł"; +"auth_login_single_sign_on" = "ă‚”ă‚€ăƒłă‚€ăƒł"; "auth_softlogout_clear_data_sign_out" = "ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆ"; -"room_message_unable_open_link_error_message" = "ăƒȘăƒłă‚Żă‚’é–‹ăă“ăšăŒă§ăăŸă›ă‚“ă€‚"; -"user_verification_session_details_verify_action_other_user" = "æ‰‹ć‹•ă§çąșèȘ"; +"room_message_unable_open_link_error_message" = "ăƒȘăƒłă‚Żă‚’é–‹ă‘ăŸă›ă‚“ă€‚"; +"user_verification_session_details_verify_action_other_user" = "æ‰‹ć‹•ă§èȘèšŒ"; "room_info_list_section_other" = "ăăźä»–"; "room_info_list_several_members" = "%@äșșăźăƒĄăƒłăƒăƒŒ"; // MARK: - Room Info -"room_info_list_one_member" = "1ćăźăƒĄăƒłăƒăƒŒ"; +"room_info_list_one_member" = "1äșșăźăƒĄăƒłăƒăƒŒ"; "create_room_placeholder_address" = "#testroom:matrix.org"; "create_room_section_header_address" = "ケドレă‚č"; "create_room_show_in_directory" = "ăƒ«ăƒŒăƒ äž€èŠ§ă«æŽČ茉"; "create_room_section_footer_type" = "éžć…Źé–‹ăźăƒ«ăƒŒăƒ ăŻă€ăƒ«ăƒŒăƒ ă«æ‹›ćŸ…ă•ă‚ŒăŸäșșăźăżć‚ćŠ ă§ăăŸă™ă€‚"; -"create_room_type_public" = "ć…Źé–‹ăƒ«ăƒŒăƒ  (èȘ°ă§ă‚‚ć‚ćŠ ćŻèƒœ)"; -"create_room_type_private" = "éžć…Źé–‹ăƒ«ăƒŒăƒ  (æ‹›ćŸ…è€…ăźăżć‚ćŠ ćŻèƒœ)"; +"create_room_type_public" = "ć…Źé–‹ăƒ«ăƒŒăƒ ïŒˆèȘ°ă§ă‚‚ć‚ćŠ ćŻèƒœïŒ‰"; +"create_room_type_private" = "éžć…Źé–‹ăźăƒ«ăƒŒăƒ ïŒˆæ‹›ćŸ…è€…ăźăżć‚ćŠ ćŻèƒœïŒ‰"; "create_room_section_header_type" = "ă‚ąă‚Żă‚»ă‚čできるäșș"; "create_room_section_footer_encryption" = "æš—ć·ćŒ–ăŻă‚ăšă‹ă‚‰ç„ĄćŠčă«ă™ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ă€‚"; -"create_room_section_header_encryption" = "ăƒ«ăƒŒăƒ ăźæš—ć·ćŒ–"; -"create_room_placeholder_topic" = "トピック"; -"create_room_section_header_topic" = "ăƒ«ăƒŒăƒ ăźăƒˆăƒ”ăƒƒă‚ŻïŒˆä»»æ„ïŒ‰"; +"create_room_section_header_encryption" = "æš—ć·ćŒ–"; +"create_room_placeholder_topic" = "ăƒ«ăƒŒăƒ ăźăƒˆăƒ”ăƒƒă‚Żă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; +"create_room_section_header_topic" = "ăƒˆăƒ”ăƒƒă‚ŻïŒˆä»»æ„ïŒ‰"; "create_room_placeholder_name" = "損才"; -"create_room_section_header_name" = "ăƒ«ăƒŒăƒ ć"; +"create_room_section_header_name" = "損才"; // MARK: - Create Room "create_room_title" = "æ–°ă—ă„ăƒ«ăƒŒăƒ "; "create_room_enable_encryption" = "æš—ć·ćŒ–ă‚’æœ‰ćŠčにする"; "room_details_room_name_for_dm" = "損才"; -"room_participants_security_information_room_encrypted_for_dm" = "ă“ă“ă§é€ć—äżĄă•ă‚Œă‚‹ăƒĄăƒƒă‚»ăƒŒă‚žăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă™ă€‚\n\năƒĄăƒƒă‚»ăƒŒă‚žăŻćź‰ć…šă«äżè­·ă•ă‚ŒăŠăŠă‚Šă€ăƒĄăƒƒă‚»ăƒŒă‚žăźăƒ­ăƒƒă‚Żă‚’è§Łé™€ă™ă‚‹ăŸă‚ăźć›șæœ‰ăźé”ăŻă€ă‚ăȘăŸăšć—äżĄè€…ă ă‘ăŒæŒăŁăŠă„ăŸă™ă€‚"; -"room_participants_security_information_room_not_encrypted_for_dm" = "ă“ă“ă§ăźăƒĄăƒƒă‚»ăƒŒă‚žăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; +"room_participants_security_information_room_encrypted_for_dm" = "ă“ă“ă§ăźăƒĄăƒƒă‚»ăƒŒă‚žăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰ă§æš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă™ă€‚\n\năƒĄăƒƒă‚»ăƒŒă‚žăŻćź‰ć…šă«äżè­·ă•ă‚ŒăŠăŠă‚Šă€ăƒĄăƒƒă‚»ăƒŒă‚žăźăƒ­ăƒƒă‚Żă‚’è§Łé™€ă™ă‚‹ăŸă‚ăźć›șæœ‰ăźé”ăŻă€ă‚ăȘăŸăšć—äżĄè€…ă ă‘ăŒæŒăŁăŠă„ăŸă™ă€‚"; +"room_participants_security_information_room_not_encrypted_for_dm" = "ă“ă“ă§ăźăƒĄăƒƒă‚»ăƒŒă‚žăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰ă§æš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; // Mark: - Room creation introduction cell -"room_intro_cell_add_participants_action" = "ć‚ćŠ è€…ă‚’èżœćŠ "; -"room_participants_security_information_room_encrypted" = "ă“ăźăƒ«ăƒŒăƒ ăźăƒĄăƒƒă‚»ăƒŒă‚žăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă™ă€‚\n\năƒĄăƒƒă‚»ăƒŒă‚žăŻćź‰ć…šă«äżè­·ă•ă‚ŒăŠăŠă‚Šă€ăƒĄăƒƒă‚»ăƒŒă‚žăźăƒ­ăƒƒă‚Żă‚’è§Łé™€ă™ă‚‹ăŸă‚ăźć›șæœ‰ăźé”ăŻă€ă‚ăȘăŸăšć—äżĄè€…ă ă‘ăŒæŒăŁăŠă„ăŸă™ă€‚"; -"room_participants_security_information_room_not_encrypted" = "ă“ăźăƒ«ăƒŒăƒ ăźăƒĄăƒƒă‚»ăƒŒă‚žăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; +"room_intro_cell_add_participants_action" = "é€Łç”Ąć…ˆă‚’èżœćŠ "; +"room_participants_security_information_room_encrypted" = "ă“ăźăƒ«ăƒŒăƒ ăźăƒĄăƒƒă‚»ăƒŒă‚žăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰ă§æš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă™ă€‚\n\năƒĄăƒƒă‚»ăƒŒă‚žăŻćź‰ć…šă«äżè­·ă•ă‚ŒăŠăŠă‚Šă€ăƒĄăƒƒă‚»ăƒŒă‚žăźăƒ­ăƒƒă‚Żă‚’è§Łé™€ă™ă‚‹ăŸă‚ăźć›șæœ‰ăźé”ăŻă€ă‚ăȘăŸăšć—äżĄè€…ă ă‘ăŒæŒăŁăŠă„ăŸă™ă€‚"; +"room_participants_security_information_room_not_encrypted" = "ă“ăźăƒ«ăƒŒăƒ ăźăƒĄăƒƒă‚»ăƒŒă‚žăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰ă§æš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; "room_intro_cell_information_dm_sentence1_part3" = "ăšăźăƒ€ă‚€ăƒŹă‚ŻăƒˆăƒĄăƒƒă‚»ăƒŒă‚žăźć§‹ăŸă‚Šă§ă™ă€‚ "; "callbar_active_and_single_paused" = "1ă€ăźă‚ąă‚Żăƒ†ă‚Łăƒ–ăȘ通話%@· 1ă€ăźäž€æ™‚ćœæ­ąă•ă‚ŒăŸé€šè©±"; // Call Bar "callbar_only_single_active" = "ă‚żăƒƒăƒ—ă—ăŠé€šè©±ïŒˆ%@ïŒ‰ă«æˆ»ă‚‹"; "settings_add_3pid_password_title_msidsn" = "電話ç•Șć·ă‚’èżœćŠ "; -"device_verification_emoji_scissors" = "ăƒă‚”ăƒŸ"; -"device_verification_emoji_paperclip" = "ăƒšăƒŒăƒ‘ăƒŒă‚ŻăƒȘップ"; +"device_verification_emoji_scissors" = "はさみ"; +"device_verification_emoji_paperclip" = "クăƒȘップ"; "device_verification_emoji_pencil" = "鉛筆"; "device_verification_emoji_book" = "æœŹ"; "device_verification_emoji_light bulb" = "電球"; "device_verification_emoji_gift" = "ゼフト"; "device_verification_emoji_clock" = "時蚈"; -"device_verification_emoji_hourglass" = "ă‚čăƒæ™‚èšˆ"; -"device_verification_emoji_umbrella" = "雹"; -"device_verification_emoji_thumbs up" = "èŠȘæŒ‡ă‚’ç«‹ăŠă‚‹"; +"device_verification_emoji_hourglass" = "砂時蚈"; +"device_verification_emoji_umbrella" = "悘"; +"device_verification_emoji_thumbs up" = "いいね"; "device_verification_emoji_spanner" = "ă‚čパナ"; "device_verification_emoji_santa" = "ă‚”ăƒłă‚ż"; -"device_verification_emoji_glasses" = "メガネ"; -"device_verification_emoji_hat" = "ハット"; +"device_verification_emoji_glasses" = "めがね"; +"device_verification_emoji_hat" = "ćžœć­"; "device_verification_emoji_robot" = "ロボット"; -"device_verification_emoji_smiley" = "笑顔"; +"device_verification_emoji_smiley" = "ă‚čăƒžă‚€ăƒ«"; "device_verification_emoji_heart" = "ăƒăƒŒăƒˆ"; "device_verification_emoji_cake" = "ă‚±ăƒŒă‚­"; "device_verification_emoji_pizza" = "ăƒ”ă‚¶"; // Room widget permissions "room_widget_permission_title" = "ォィゾェットをèȘ­ăżèŸŒă‚€"; -"widget_picker_manage_integrations" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłă‚’çźĄç†ă™ă‚‹â€Š"; +"widget_picker_manage_integrations" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłă‚’çźĄç†â€Š"; // Widget Picker -"widget_picker_title" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłăƒžăƒăƒŒă‚žăƒŁăƒŒ"; +"widget_picker_title" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłïŒˆç”±ćˆïŒ‰"; "widget_integration_manager_disabled" = "èš­ćźšă§ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłăƒžăƒăƒŒă‚žăƒŁăƒŒă‚’æœ‰ćŠčă«ă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™"; -"widget_menu_remove" = "ć…šăŠć–ă‚Šé™€ă"; +"widget_menu_remove" = "慚擥から扊陀"; "widget_menu_revoke_permission" = "ă‚ąă‚Żă‚»ă‚čă‚’ć–ă‚Šæ¶ˆă™"; "widget_menu_open_outside" = "ăƒ–ăƒ©ă‚Šă‚¶ăƒŒă§é–‹ă"; -"widget_menu_refresh" = "ăƒȘăƒ•ăƒŹăƒƒă‚·ăƒ„"; -"widget_integrations_server_failed_to_connect" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłă‚”ăƒŒăƒăƒŒăžăźæŽ„ç¶šăŒć€±æ•—ă—ăŸă—ăŸ"; +"widget_menu_refresh" = "憍èȘ­ăżèŸŒăż"; +"widget_integrations_server_failed_to_connect" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłă‚”ăƒŒăƒăƒŒăžăźæŽ„ç¶šă«ć€±æ•—ă—ăŸă—ăŸ"; // Widget "widget_no_integrations_server_configured" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăŸă›ă‚“"; -"bug_report_background_mode" = "ăƒăƒƒă‚Żă‚°ăƒ©ă‚Šăƒłăƒ‰ă§ç¶™ç¶š"; +"bug_report_background_mode" = "ăƒăƒƒă‚Żă‚°ăƒ©ă‚Šăƒłăƒ‰ă§ç¶šèĄŒ"; "e2e_key_backup_wrong_version_button_wasme" = "これはわたしです"; "e2e_key_backup_wrong_version_button_settings" = "èš­ćźš"; "e2e_key_backup_wrong_version" = "ăƒĄăƒƒă‚»ăƒŒă‚žăźé”ăźæ–°ă—ă„ćź‰ć…šăȘăƒăƒƒă‚Żă‚ąăƒƒăƒ—ăŒæ€œć‡șă•ă‚ŒăŸă—ăŸă€‚\n\nこれがあăȘăŸă«ă‚ˆă‚‹ă‚‚ăźă§ăŻăȘă„ć ŽćˆăŻă€èš­ćźšă‹ă‚‰æ–°ă—ă„ăƒ‘ă‚čăƒ•ăƒŹăƒŒă‚șă‚’èš­ćźšă—ăŠăă ă•ă„ă€‚"; @@ -640,93 +640,93 @@ // Key backup wrong version "e2e_key_backup_wrong_version_title" = "æ–°ă—ă„é”ăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—"; "call_no_stun_server_error_use_fallback_button" = "%@ă‚’äœżăŁăŠăżăŠăă ă•ă„"; -"call_actions_unhold" = "やり目す"; -"call_no_stun_server_error_message_2" = "ä»Łă‚ă‚Šă«ă€%@ぼパブăƒȘăƒƒă‚Żă‚”ăƒŒăƒăƒŒă‚’äœżç”šă™ă‚‹ă“ăšă‚‚ă§ăăŸă™ăŒă€ă“ă‚ŒăŻäżĄé Œæ€§ăŒäœŽăă‚ăȘたぼIPケドレă‚čăŒăăźă‚”ăƒŒăƒăƒŒăšć…±æœ‰ă•ă‚ŒăŠă—ăŸă„ăŸă™ă€‚ă“ă‚ŒăŻă€èš­ćźšă‹ă‚‰çźĄç†ă™ă‚‹ă“ăšăŒă§ăăŸă™"; -"call_no_stun_server_error_message_1" = "é€šè©±ă‚’çąșćźŸă«æ©Ÿèƒœă•ă›ă‚‹ăŸă‚ă«ăŻă€ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒ%@ăźçźĄç†è€…ă«TURNă‚”ăƒŒăƒăƒŒăźèš­ćźšă‚’äŸé Œă—ăŠăă ă•ă„ă€‚"; -"call_no_stun_server_error_title" = "ă‚”ăƒŒăƒăƒŒăźèš­ćźšăŒé–“é•ăŁăŠă„ă‚‹ăŸă‚é€šè©±ă«ć€±æ•—ă—ăŸă—ăŸ"; +"call_actions_unhold" = "憍開"; +"call_no_stun_server_error_message_2" = "ăŸăŸăŻ %@ ăźć…Źé–‹ă‚”ăƒŒăƒăƒŒă‚’äœżç”šă™ă‚‹ă“ăšă‚‚ă§ăăŸă™ăŒă€äżĄé Œæ€§ăŒäœŽăă€ăŸăŸă€ă‚ăȘたぼIPケドレă‚čăŒăăźă‚”ăƒŒăƒăƒŒăšć…±æœ‰ă•ă‚ŒăŠă—ăŸă„ăŸă™ă€‚ă“ă‚ŒăŻèš­ćźšç”»éąă‹ă‚‰ă‚‚çźĄç†ă§ăăŸă™"; +"call_no_stun_server_error_message_1" = "ćź‰ćźšă—ăŸé€šè©±ăźăŸă‚ă«ă€ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒ %@ ăźçźĄç†è€…ă«TURNă‚”ăƒŒăƒăƒŒăźèš­ćźšă‚’äŸé Œă—ăŠăă ă•ă„ă€‚"; +"call_no_stun_server_error_title" = "ă‚”ăƒŒăƒăƒŒăźäžæ­ŁăȘèš­ćźšăźăŸă‚é€šè©±ă«ć€±æ•—ă—ăŸă—ăŸ"; "room_does_not_exist" = "%@ăŻć­˜ćœšă—ăŸă›ă‚“"; -"photo_library_access_not_granted" = "%@ăŻăƒ•ă‚©ăƒˆăƒ©ă‚€ăƒ–ăƒ©ăƒȘにスクセă‚čă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“"; -"camera_unavailable" = "ăŠäœżă„ăźç«Żæœ«ă§ăŻă‚«ăƒĄăƒ©ă‚’ćˆ©ç”šă§ăăŸă›ă‚“"; +"photo_library_access_not_granted" = "%@ă«ăŻăƒ•ă‚©ăƒˆăƒ©ă‚€ăƒ–ăƒ©ăƒȘăƒŒă«ă‚ąă‚Żă‚»ă‚čă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“ă€‚ăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒèš­ćźšă‚’ć€‰æ›Žă—ăŠăă ă•ă„"; +"camera_unavailable" = "ă“ăźç«Żæœ«ă§ăŻă‚«ăƒĄăƒ©ă‚’ćˆ©ç”šă§ăăŸă›ă‚“"; "event_formatter_widget_removed_by_you" = "ă‚Šă‚Łă‚žă‚§ăƒƒăƒˆă‚’ć‰Šé™€ă—ăŸă—ăŸïŒš%@"; -"event_formatter_jitsi_widget_removed_by_you" = "VoIPă‚«ăƒłăƒ•ă‚ĄăƒŹăƒłă‚čă‚’ć‰Šé™€ă—ăŸă—ăŸ"; -"event_formatter_jitsi_widget_added_by_you" = "VoIPă‚«ăƒłăƒ•ă‚ĄăƒŹăƒłă‚čă‚’èżœćŠ ă—ăŸă—ăŸ"; +"event_formatter_jitsi_widget_removed_by_you" = "VoIPäŒšè­°ă‚’ć‰Šé™€ă—ăŸă—ăŸ"; +"event_formatter_jitsi_widget_added_by_you" = "VoIPäŒšè­°ă‚’èżœćŠ ă—ăŸă—ăŸ"; // Events formatter with you "event_formatter_widget_added_by_you" = "ă‚Šă‚Łă‚žă‚§ăƒƒăƒˆă‚’èżœćŠ ă—ăŸă—ăŸïŒš%@"; "event_formatter_call_back" = "かけ目す"; "event_formatter_call_you_declined" = "é€šè©±ă‚’æ‹’ćŠă—ăŸă—ăŸ"; "event_formatter_call_you_currently_in" = "é€šè©±äž­ă§ă™"; -"event_formatter_call_has_ended" = "é€šè©±ăŻæœ‰ćŠčです"; +"event_formatter_call_has_ended" = "é€šè©±ăŒç”‚äș†ă—ăŸă—ăŸ"; "event_formatter_call_video" = "ビデă‚Ș通話"; "event_formatter_call_voice" = "éŸłćŁ°é€šè©±"; "event_formatter_message_edited_mention" = "線集枈"; -"image_picker_action_library" = "ăƒ©ă‚€ăƒ–ăƒ©ăƒȘを遞ぶ"; +"image_picker_action_library" = "ăƒ©ă‚€ăƒ–ăƒ©ăƒȘăƒŒă‹ă‚‰éžæŠž"; // Image picker -"image_picker_action_camera" = "ć†™çœŸă‚’æ’źă‚‹"; +"image_picker_action_camera" = "ć†™çœŸă‚’æ’źćœ±"; // Media picker -"media_picker_title" = "ăƒĄăƒ‡ă‚Łă‚ąăƒ©ă‚€ăƒ–ăƒ©ăƒȘ"; -"room_details_advanced_e2e_encryption_disabled_for_dm" = "ă“ă“ăŻæš—ć·ćŒ–ăŒæœ‰ćŠčă§ăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; -"room_details_advanced_e2e_encryption_enabled_for_dm" = "ă“ă“ăŻæš—ć·ćŒ–ăŒæœ‰ćŠčです"; -"room_details_advanced_room_id_for_dm" = "ID:"; +"media_picker_title" = "ăƒĄăƒ‡ă‚Łă‚ąăƒ©ă‚€ăƒ–ăƒ©ăƒȘăƒŒ"; +"room_details_advanced_e2e_encryption_disabled_for_dm" = "ă“ă“ă§ăŻæš—ć·ćŒ–ăŒæœ‰ćŠčă§ăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; +"room_details_advanced_e2e_encryption_enabled_for_dm" = "ă“ă“ă§ăŻæš—ć·ćŒ–ăŒæœ‰ćŠčです"; +"room_details_advanced_room_id_for_dm" = "ID"; "room_details_no_local_addresses_for_dm" = "ă“ă“ă«ăŻăƒ­ăƒŒă‚«ăƒ«ă‚ąăƒ‰ăƒŹă‚čăŒă‚ă‚ŠăŸă›ă‚“"; "room_details_access_section_directory_toggle_for_dm" = "ăƒ«ăƒŒăƒ äž€èŠ§ă«æŽČ茉"; "room_details_access_section_anyone_apart_from_guest_for_dm" = "ăƒȘăƒłă‚Żă‚’çŸ„ăŁăŠă„ă‚‹äșșăȘらèȘ°ă§ă‚‚ă‚Čă‚čăƒˆăƒŠăƒŒă‚¶ăƒŒă‚’é™€ăïŒ‰"; "room_details_access_section_anyone_for_dm" = "ăƒȘăƒłă‚Żă‚’çŸ„ăŁăŠă„ă‚‹äșșăȘらèȘ°ă§ă‚‚ă‚Čă‚čăƒˆăƒŠăƒŒă‚¶ăƒŒă‚’ć«ă‚€ïŒ‰"; "room_details_access_section_for_dm" = "ă“ă‚Œă«ă‚ąă‚Żă‚»ă‚čできるäșșăŻïŒŸ"; -"room_details_photo_for_dm" = "憙真"; -"room_details_integrations" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒł"; +"room_details_photo_for_dm" = "ç”»ćƒ"; +"room_details_integrations" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłïŒˆç”±ćˆïŒ‰"; "room_details_search" = "ăƒ«ăƒŒăƒ ć†…æ€œçŽą"; "room_details_title_for_dm" = "è©łçŽ°"; "identity_server_settings_alert_error_invalid_identity_server" = "%@ăŻæœ‰ćŠčăȘIDă‚”ăƒŒăƒăƒŒă§ăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; -"identity_server_settings_alert_error_terms_not_accepted" = "IDă‚”ăƒŒăƒăƒŒăšă—ăŠèš­ćźšă™ă‚‹ă«ăŻ%@ăźæĄä»¶ă‚’ć—ă‘ć…„ă‚Œă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; -"identity_server_settings_alert_disconnect_still_sharing_3pid_button" = "ç„ĄèŠ–ă—ăŠćˆ‡æ–­"; -"identity_server_settings_alert_disconnect_still_sharing_3pid" = "あăȘăŸăŻăŸă IDă‚”ăƒŒăƒăƒŒ%@で怋äșșăƒ‡ăƒŒă‚żă‚’ć…±æœ‰ă—ăŠă„ăŸă™ă€‚\n\nćˆ‡æ–­ă™ă‚‹ć‰ă«ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăšé›»è©±ç•Șć·ă‚’IDă‚”ăƒŒăƒăƒŒă‹ă‚‰ć‰Šé™€ă™ă‚‹ă“ăšă‚’ăŠć‹§ă‚ă—ăŸă™ă€‚"; +"identity_server_settings_alert_error_terms_not_accepted" = "IDă‚”ăƒŒăƒăƒŒă«èš­ćźšă™ă‚‹ă«ăŻă€%@ăźćˆ©ç”šèŠçŽ„ă‚’æ‰żè«Ÿă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; +"identity_server_settings_alert_disconnect_still_sharing_3pid_button" = "ç„ĄèŠ–ă—ăŠæŽ„ç¶šè§Łé™€"; +"identity_server_settings_alert_disconnect_still_sharing_3pid" = "あăȘăŸăŻăŸă IDă‚”ăƒŒăƒăƒŒ %@ で怋äșșăƒ‡ăƒŒă‚żă‚’ć…±æœ‰ă—ăŠă„ăŸă™ă€‚\n\næŽ„ç¶šă‚’è§Łé™€ă™ă‚‹ć‰ă«ă€ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăšé›»è©±ç•Șć·ă‚’IDă‚”ăƒŒăƒăƒŒă‹ă‚‰ć‰Šé™€ă™ă‚‹ă“ăšă‚’ăŠć‹§ă‚ă—ăŸă™ă€‚"; "identity_server_settings_alert_disconnect_button" = "æŽ„ç¶šă‚’è§Łé™€"; -"identity_server_settings_alert_disconnect" = "IDă‚”ăƒŒăƒăƒŒ%@ă‚’æŽ„ç¶šè§Łé™€ă—ăŸă™ă‹ïŒŸ"; -"identity_server_settings_alert_disconnect_title" = "IDă‚”ăƒŒăƒăƒŒă‚’æŽ„ç¶šè§Łé™€"; -"identity_server_settings_alert_change" = "IDă‚”ăƒŒăƒăƒŒ%1$@ă‚’ćˆ‡æ–­ă—ă€ä»Łă‚ă‚Šă«%2$@ă«æŽ„ç¶šă—ăŸă™ă‹ïŒŸ"; +"identity_server_settings_alert_disconnect" = "IDă‚”ăƒŒăƒăƒŒ %@ ă‹ă‚‰ćˆ‡æ–­ă—ăŸă™ă‹ïŒŸ"; +"identity_server_settings_alert_disconnect_title" = "IDă‚”ăƒŒăƒăƒŒă‹ă‚‰æŽ„ç¶šă‚’è§Łé™€"; +"identity_server_settings_alert_change" = "IDă‚”ăƒŒăƒăƒŒ %1$@ ă‚’ćˆ‡æ–­ă—ă€ä»Łă‚ă‚Šă« %2$@ ă«æŽ„ç¶šă—ăŸă™ă‹ïŒŸ"; "identity_server_settings_alert_change_title" = "IDă‚”ăƒŒăƒăƒŒă‚’ć€‰æ›Ž"; "identity_server_settings_alert_no_terms" = "éžæŠžă—ăŸIDă‚”ăƒŒăƒăƒŒă«ăŻćˆ©ç”šèŠçŽ„ăŒă‚ă‚ŠăŸă›ă‚“ă€‚ăăźă‚”ăƒŒăƒăƒŒăźæ‰€æœ‰è€…ă‚’äżĄé Œă§ăă‚‹ć Žćˆă«ăźăżç¶šèĄŒă—ăŠăă ă•ă„ă€‚"; "identity_server_settings_alert_no_terms_title" = "IDă‚”ăƒŒăƒăƒŒă«ăŻćˆ©ç”šèŠçŽ„ăŒă‚ă‚ŠăŸă›ă‚“"; "identity_server_settings_disconnect" = "æŽ„ç¶šă‚’è§Łé™€"; -"identity_server_settings_disconnect_info" = "IDă‚”ăƒŒăƒăƒŒăšăźæŽ„ç¶šă‚’è§Łé™€ă™ă‚‹ăšă€ä»–ăźăƒŠăƒŒă‚¶ăƒŒă‹ă‚‰ç™șèŠ‹ă•ă‚ŒăȘくăȘă‚Šă€ăƒĄăƒŒăƒ«ă‚„é›»è©±ă§ä»–ăźăƒŠăƒŒă‚¶ăƒŒă‚’æ‹›ćŸ…ă™ă‚‹ă“ăšăŒă§ăă‚‹ă‚ˆă†ă«ăȘă‚ŠăŸă™ă€‚"; +"identity_server_settings_disconnect_info" = "IDă‚”ăƒŒăƒăƒŒăšăźæŽ„ç¶šă‚’è§Łé™€ă™ă‚‹ăšă€ä»–ăźăƒŠăƒŒă‚¶ăƒŒă«ă‚ˆăŁăŠèŠ‹ă€ă‘ă‚‰ă‚ŒăȘくăȘă‚Šă€ăŸăŸă€ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚„é›»è©±ă§ä»–ăźăƒŠăƒŒă‚¶ăƒŒă‚’æ‹›ćŸ…ă™ă‚‹ă“ăšă‚‚ă§ăăȘくăȘă‚ŠăŸă™ă€‚"; "identity_server_settings_change" = "ć€‰æ›Ž"; "identity_server_settings_add" = "èżœćŠ "; "identity_server_settings_place_holder" = "IDă‚”ăƒŒăƒăƒŒă‚’ć…„ćŠ›"; -"identity_server_settings_no_is_description" = "çŸćœšă€IDă‚”ăƒŒăƒăƒŒă‚’äœżç”šă—ăŠă„ăŸă›ă‚“ă€‚ă‚ăȘăŸăźçŸ„ăŁăŠă„ă‚‹é€Łç”Ąć…ˆă‚’ç™șèŠ‹ă—ăŸă‚Šă€ăăźé€Łç”Ąć…ˆă‹ă‚‰ç™șèŠ‹ă•ă‚Œă‚‹ă‚ˆă†ă«ă™ă‚‹ă«ăŻă€ä»„äžŠă§IDă‚”ăƒŒăƒăƒŒă‚’èżœćŠ ă—ăŠăă ă•ă„ă€‚"; -"identity_server_settings_description" = "あăȘたは%@ă‚’äœżăŁăŠă€ă‚ăȘăŸăźçŸ„ă‚Šćˆă„ă‚’ç™șèŠ‹ă—ă€ăŸăŸć‘ă“ă†ă‹ă‚‰ç™șèŠ‹ă§ăă‚‹ă‚ˆă†ă«ă—ăŠă„ăŸă™ă€‚"; +"identity_server_settings_no_is_description" = "çŸćœšă€IDă‚”ăƒŒăƒăƒŒă‚’äœżç”šă—ăŠă„ăŸă›ă‚“ă€‚é€Łç”Ąć…ˆă‚’èŠ‹ă€ă‘ăŸă‚Šă€é€Łç”Ąć…ˆă‹ă‚‰èŠ‹ă€ă‘ăŠă‚‚ă‚‰ăŁăŸă‚Šă™ă‚‹ă«ăŻă€ä»„äžŠă§IDă‚”ăƒŒăƒăƒŒă‚’èżœćŠ ă—ăŠăă ă•ă„ă€‚"; +"identity_server_settings_description" = "çŸćœš %@ ă‚’äœżç”šă—ăŠă€è‡Șćˆ†ăźé€Łç”Ąć…ˆă‚’èŠ‹ă€ă‘ăŸă‚Šă€é€Łç”Ąć…ˆă‹ă‚‰èŠ‹ă€ă‘ăŠă‚‚ă‚‰ăŁăŸă‚Šă§ăă‚‹ă‚ˆă†ă«ă—ăŠă„ăŸă™ă€‚"; "security_settings_complete_security_alert_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’çąșèȘ"; "security_settings_crosssigning_complete_security" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’çąșèȘ"; "security_settings_crosssigning_bootstrap" = "èš­ćźš"; -"settings_devices_description" = "ă‚»ăƒƒă‚·ăƒ§ăƒłăźć…Źé–‹ćăŻă€ă‚ăȘたべやり揖りするäșșă€…ă«ćŻŸă—ăŠèĄšç€șă•ă‚ŒăŸă™"; -"settings_key_backup_delete_confirmation_prompt_title" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ăźć‰Šé™€"; +"settings_devices_description" = "ă‚»ăƒƒă‚·ăƒ§ăƒłăźć…Źé–‹ćăŻă€ă‚ăȘăŸăšă‚„ă‚Šć–ă‚Šă™ă‚‹é€Łç”Ąć…ˆă«ćŻŸă—ăŠèĄšç€șă•ă‚ŒăŸă™"; +"settings_key_backup_delete_confirmation_prompt_title" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’ć‰Šé™€"; "settings_key_backup_info_valid" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻé”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŠă„ăŸă™ă€‚"; "settings_key_backup_info_algorithm" = "ă‚ąăƒ«ă‚ŽăƒȘă‚șăƒ ïŒš%@"; "settings_key_backup_info_version" = "é”ăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—ăźăƒăƒŒă‚žăƒ§ăƒłïŒš%@"; "settings_key_backup_info_none" = "あăȘăŸăźé”ăŻă€ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‹ă‚‰ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; "settings_key_backup_info_checking" = "çąșèȘă—ăŠă„ăŸă™â€Š"; -"settings_add_3pid_password_message" = "ç¶šèĄŒă™ă‚‹ă«ăŻă€Matrix ă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; -"settings_add_3pid_invalid_password_message" = "無ćŠčăȘèȘèšŒæƒ…ć ±"; +"settings_add_3pid_password_message" = "ç¶šèĄŒă™ă‚‹ă«ăŻă€Matrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; +"settings_add_3pid_invalid_password_message" = "èȘèšŒæƒ…ć ±ăŒæ­Łă—ăă‚ă‚ŠăŸă›ă‚“"; "settings_add_3pid_password_title_email" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’èżœćŠ "; -"settings_integrations_allow_description" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłăƒžăƒăƒŒă‚žăƒŁăƒŒïŒˆ%@ïŒ‰ă‚’äœżç”šă—ăŠă€ăƒœăƒƒăƒˆă€ăƒ–ăƒȘッゾ、ォィゾェット、ă‚čăƒ†ăƒƒă‚«ăƒŒăƒ‘ăƒƒă‚Żă‚’çźĄç†ă—ăŸă™ă€‚\n\nèš­ćźšăƒ‡ăƒŒă‚żă‚’ć—ă‘ć–ă‚Šă€ăŠćźąæ§˜ă«ä»Łă‚ăŁăŠă‚Šă‚Łă‚žă‚§ăƒƒăƒˆăźć€‰æ›Žă€ăƒ«ăƒŒăƒ æ‹›ćŸ…ăźé€äżĄă€æš©é™ăźèš­ćźšă‚’èĄŒă†ă“ăšăŒă§ăăŸă™ă€‚"; +"settings_integrations_allow_description" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłăƒžăƒăƒŒă‚žăƒŁăƒŒ %@ ă‚’äœżç”šă™ă‚‹ăšă€ăƒœăƒƒăƒˆă€ăƒ–ăƒȘッゾ、ォィゾェット、ă‚čăƒ†ăƒƒă‚«ăƒŒăƒ‘ăƒƒă‚Żă‚’çźĄç†ă§ăăŸă™ă€‚\n\nèš­ćźšăƒ‡ăƒŒă‚żă‚’ć—äżĄă—ă€ăƒŠăƒŒă‚¶ăƒŒă«ä»Łă‚ăŁăŠă‚Šă‚Łă‚žă‚§ăƒƒăƒˆăźć€‰æ›Žă€ăƒ«ăƒŒăƒ ăžăźæ‹›ćŸ…ăźé€äżĄă€æš©é™ăƒŹăƒ™ăƒ«ăźèš­ćźšă‚’èĄŒă†ă“ăšăŒă§ăăŸă™ă€‚"; "settings_integrations_allow_button" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłă‚’çźĄç†"; -"settings_calls_stun_server_fallback_button" = "ăƒ•ă‚©ăƒŒăƒ«ăƒăƒƒă‚Żă‚łăƒŒăƒ«ă‚ąă‚·ă‚čăƒˆă‚”ăƒŒăƒăƒŒă‚’èš±ćŻ"; +"settings_calls_stun_server_fallback_button" = "ăƒ•ă‚©ăƒŒăƒ«ăƒăƒƒă‚Żç”šăźé€šè©±ă‚ąă‚·ă‚čăƒˆă‚”ăƒŒăƒăƒŒă‚’èš±ćŻ"; "settings_key_backup" = "é”ăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—"; "settings_integrations" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒł"; "settings_discovery_settings" = "ディă‚čă‚«ăƒăƒȘăƒŒ"; -"room_multiple_typing_notification" = "%@ăšăăźä»–ăźăƒŠăƒŒă‚¶ăƒŒăŒć…„ćŠ›äž­ă§ă™"; +"room_multiple_typing_notification" = "%@ăšăăźä»–ăźăƒĄăƒłăƒăƒŒ"; "external_link_confirmation_message" = "ăƒȘンク %@ ăŻćˆ„ăźă‚”ă‚€ăƒˆă«ç§»ć‹•ă—ăŸă™ïŒš%@\n\nç¶šèĄŒă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; -"room_event_action_delete_confirmation_title" = "æœȘé€äżĄăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć‰Šé™€"; -"room_unsent_messages_cancel_message" = "ă“ăźăƒ«ăƒŒăƒ ă«ă‚ă‚‹æœȘé€äżĄăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć…šăŠć‰Šé™€ă—ăŠă‚‚ă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; -"room_unsent_messages_cancel_title" = "æœȘé€äżĄăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć‰Šé™€"; -"room_message_replying_to" = "%@ă«èż”äżĄäž­"; +"room_event_action_delete_confirmation_title" = "æœȘé€äżĄăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć‰Šé™€"; +"room_unsent_messages_cancel_message" = "ă“ăźăƒ«ăƒŒăƒ ăźć…šăŠăźæœȘé€äżĄăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć‰Šé™€ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"room_unsent_messages_cancel_title" = "æœȘé€äżĄăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć‰Šé™€"; +"room_message_replying_to" = "%@ă«èż”äżĄă—ăŠă„ăŸă™"; "room_message_editing" = "線集䞭"; "room_accessiblity_scroll_to_bottom" = "ă„ăĄă°ă‚“äž‹ăŸă§ă‚čă‚Żăƒ­ăƒŒăƒ«"; "room_member_power_level_short_custom" = "ă‚«ă‚čタム"; "room_member_power_level_short_moderator" = "ăƒąăƒ‡ăƒŹăƒŒă‚żăƒŒ"; -"room_member_power_level_custom_in" = "ă‚«ă‚čタム (%@) in %@"; +"room_member_power_level_custom_in" = "ă‚«ă‚čă‚żăƒ ïŒˆ%@%@"; "room_member_power_level_short_admin" = "çźĄç†è€…"; "room_member_power_level_moderator_in" = "%@ăźăƒąăƒ‡ăƒŹăƒŒă‚żăƒŒ"; "room_member_power_level_admin_in" = "%@ăźçźĄç†è€…"; @@ -735,58 +735,58 @@ "room_participants_action_security_status_warning" = "è­Šć‘Š"; "room_participants_action_security_status_complete_security" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’çąșèȘ"; "room_participants_action_security_status_verify" = "èȘèšŒ"; -"room_participants_action_security_status_verified" = "æ€œèšŒæžˆăż"; +"room_participants_action_security_status_verified" = "èȘèšŒæžˆ"; "room_participants_action_section_security" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒ"; -"room_participants_start_new_chat_error_using_user_email_without_identity_server" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăȘă„ăŸă‚ă€ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’äœżăŁăŠé€Łç”Ąć…ˆăšăƒăƒŁăƒƒăƒˆă‚’é–‹ć§‹ă™ă‚‹ă“ăšăŒă§ăăŸă›ă‚“ă€‚"; +"room_participants_start_new_chat_error_using_user_email_without_identity_server" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăȘă„ăŸă‚ă€ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’äœżç”šă—ăŠé€Łç”Ąć…ˆăšăƒăƒŁăƒƒăƒˆă‚’é–‹ć§‹ă™ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ă€‚"; "room_participants_filter_room_members_for_dm" = "ăƒĄăƒłăƒăƒŒă‚’æ€œçŽą"; "room_participants_remove_third_party_invite_prompt_msg" = "æ‹›ćŸ…ă‚’ć–ă‚Šæ¶ˆă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; "room_participants_leave_prompt_msg_for_dm" = "退ć‡șă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; "room_participants_leave_prompt_title_for_dm" = "退ć‡ș"; "contacts_address_book_no_identity_server" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăŸă›ă‚“"; -"rooms_empty_view_information" = "ăƒ«ăƒŒăƒ ăŻéžć…Źé–‹ă§ă‚‚ć…Źé–‹ă§ă‚‚ă€ă‚ă‚‰ă‚†ă‚‹ă‚°ăƒ«ăƒŒăƒ—ăƒăƒŁăƒƒăƒˆă«æœ€é©ă§ă™ă€‚+ă‚’ă‚żăƒƒăƒ—ă™ă‚‹ăšă€æ—ąă«ă‚ă‚‹ăƒ«ăƒŒăƒ ă‚’èŠ‹ă€ă‘ăŸă‚Šă€æ–°ă—ă„ăƒ«ăƒŒăƒ ă‚’äœœăŁăŸă‚Šă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"rooms_empty_view_information" = "ăƒ«ăƒŒăƒ ăŻéžć…Źé–‹ă§ă‚‚ć…Źé–‹ă§ă‚‚ă€ă‚ă‚‰ă‚†ă‚‹ă‚°ăƒ«ăƒŒăƒ—ăƒăƒŁăƒƒăƒˆă«æœ€é©ă§ă™ă€‚ïŒ‹ă‚’ă‚żăƒƒăƒ—ă™ă‚‹ăšă€æ—ąă«ă‚ă‚‹ăƒ«ăƒŒăƒ ă‚’èŠ‹ă€ă‘ăŸă‚Šă€æ–°ă—ă„ăƒ«ăƒŒăƒ ă‚’äœœăŁăŸă‚Šă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; "rooms_empty_view_title" = "ăƒ«ăƒŒăƒ "; "people_empty_view_information" = "èȘ°ăšă§ă‚‚ćź‰ć…šă«ăƒăƒŁăƒƒăƒˆă§ăăŸă™ă€‚ïŒ‹ă‚’ă‚żăƒƒăƒ—ă™ă‚‹ăšé€Łç”Ąć…ˆă‚’èżœćŠ ă§ăăŸă™ă€‚"; "people_empty_view_title" = "é€Łç”Ąć…ˆ"; -"room_creation_error_invite_user_by_email_without_identity_server" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăȘă„ăŸă‚ă€ăƒĄăƒŒăƒ«ă§ć‚ćŠ è€…ă‚’èżœćŠ ă™ă‚‹ă“ăšăŒă§ăăŸă›ă‚“ă€‚"; +"room_creation_error_invite_user_by_email_without_identity_server" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăȘă„ăŸă‚ă€ăƒĄăƒŒăƒ«ă§ăŻć‚ćŠ è€…ă‚’èżœćŠ ă§ăăŸă›ă‚“ă€‚"; // Errors -"error_user_already_logged_in" = "ä»–ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒă«æŽ„ç¶šă—ă‚ˆă†ăšă—ăŠă„ă‚‹ă‚ˆă†ă§ă™ă­ă€‚ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă—ăŸă™ă‹ïŒŸ"; +"error_user_already_logged_in" = "ä»–ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒă«æŽ„ç¶šă—ă‚ˆă†ăšă—ăŠă„ă‚‹ă‚ˆă†ă§ă™ă€‚ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă—ăŸă™ă‹ïŒŸ"; "social_login_button_title_sign_up" = "%@ă§ă‚”ă‚€ăƒłă‚ąăƒƒăƒ—"; "social_login_button_title_sign_in" = "%@ă§ă‚”ă‚€ăƒłă‚€ăƒł"; -"social_login_button_title_continue" = "ç¶šăăŻă“ăĄă‚‰%@"; -"social_login_list_title_sign_up" = "もしくは"; -"social_login_list_title_sign_in" = "もしくは"; +"social_login_button_title_continue" = "%@ă§ç¶šèĄŒ"; +"social_login_list_title_sign_up" = "ăŸăŸăŻ"; +"social_login_list_title_sign_in" = "ăŸăŸăŻ"; // Social login -"social_login_list_title_continue" = "ç¶šăăŻă“ăĄă‚‰"; -"auth_softlogout_clear_data_sign_out_msg" = "ă“ăźç«Żæœ«ă«çŸćœšäżć­˜ă•ă‚ŒăŠă„ă‚‹ć…šăŠăźăƒ‡ăƒŒă‚żă‚’æ¶ˆćŽ»ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸć†ăłă‚”ă‚€ăƒłă‚€ăƒłă™ă‚‹ăšă‚ąă‚«ă‚Šăƒłăƒˆăƒ‡ăƒŒă‚żă‚„ăƒĄăƒƒă‚»ăƒŒă‚žă«ă‚ąă‚Żă‚»ă‚čă§ăăŸă™ă€‚"; -"auth_softlogout_clear_data_sign_out_title" = "ç¶šèĄŒă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; -"auth_softlogout_clear_data_button" = "ć…šăŠăźăƒ‡ăƒŒă‚żă‚’ă‚ŻăƒȘケ"; -"auth_softlogout_clear_data_message_2" = "ă“ăźç«Żæœ«ăźäœżç”šă‚’ç”‚äș†ă™ă‚‹ć Žćˆă‚„ă€ćˆ„ăźă‚ąă‚«ă‚Šăƒłăƒˆă«ă‚”ă‚€ăƒłă‚€ăƒłă—ăŸă„ć ŽćˆăŻă€ă‚ŻăƒȘケしどください。"; -"auth_softlogout_clear_data_message_1" = "è­Šć‘ŠïŒšć€‹äșșăƒ‡ăƒŒă‚żïŒˆæš—ć·é”ă‚’ć«ă‚€ïŒ‰ăŒă“ăźç«Żæœ«ă«ăŸă äżć­˜ă•ă‚ŒăŠă„ăŸă™ă€‚"; -"callbar_return" = "かけ目す"; -"callbar_active_and_multiple_paused" = "ケクティブăȘ通話%@· %@ăźäž€æ™‚ćœæ­ąă•ă‚ŒăŸé€šè©±"; -"callbar_only_multiple_paused" = "äž€æ™‚ćœæ­ąă—ăŸ%@ăźé€šè©±"; -"callbar_only_single_paused" = "é€šè©±ăźäž€æ™‚ćœæ­ą"; -"store_promotional_text" = "ă‚ȘăƒŒăƒ—ăƒłăƒăƒƒăƒˆăƒŻăƒŒă‚ŻäžŠă§ăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒă‚’äżè­·ă—ăŸăƒăƒŁăƒƒăƒˆă‚ąăƒ—ăƒȘ。あăȘたè‡Șèș«ă§ă‚łăƒłăƒˆăƒ­ăƒŒăƒ«ă§ăă‚‹ă‚ˆă†ă«éžäž­ć€źé›†æš©ćŒ–ïŒˆćˆ†æ•ŁćŒ–ïŒ‰ă•ă‚ŒăŠă„ăŸă™ă€‚ăƒ‡ăƒŒă‚żăƒžă‚€ăƒ‹ăƒłă‚°ă€ăƒăƒƒă‚Żăƒ‰ă‚ąă€ă‚”ăƒŒăƒ‰ăƒ‘ăƒŒăƒ†ă‚Łă«ă‚ˆă‚‹ă‚ąă‚Żă‚»ă‚čăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; +"social_login_list_title_continue" = "æŹĄă§ç¶šèĄŒ"; +"auth_softlogout_clear_data_sign_out_msg" = "ă“ăźç«Żæœ«ă«çŸćœšäżć­˜ă•ă‚ŒăŠă„ă‚‹ć…šăŠăźăƒ‡ăƒŒă‚żă‚’æ¶ˆćŽ»ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‡ăƒŒă‚żă‚„ăƒĄăƒƒă‚»ăƒŒă‚žă«ă‚ąă‚Żă‚»ă‚čă™ă‚‹ă«ăŻă€ć†ăłă‚”ă‚€ăƒłă‚€ăƒłă—ăŠăă ă•ă„ă€‚"; +"auth_softlogout_clear_data_sign_out_title" = "ă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"auth_softlogout_clear_data_button" = "ć…šăŠăźăƒ‡ăƒŒă‚żă‚’æ¶ˆćŽ»"; +"auth_softlogout_clear_data_message_2" = "ă“ăźç«Żæœ«ăźäœżç”šă‚’ç”‚äș†ă™ă‚‹ă€ăŸăŸăŻćˆ„ăźă‚ąă‚«ă‚Šăƒłăƒˆă«ă‚”ă‚€ăƒłă‚€ăƒłă™ă‚‹ć ŽćˆăŻă€ć€‹äșșăƒ‡ăƒŒă‚żă‚’æ¶ˆćŽ»ă—ăŠăă ă•ă„ă€‚"; +"auth_softlogout_clear_data_message_1" = "è­Šć‘ŠïŒšă‚ăȘたぼ怋äșșăƒ‡ăƒŒă‚żïŒˆæš—ć·é”ă‚’ć«ă‚€ïŒ‰ăŒă€ă“ăźç«Żæœ«ă«ăŸă äżć­˜ă•ă‚ŒăŠă„ăŸă™ă€‚"; +"callbar_return" = "æŠ˜ă‚Šèż”ă™"; +"callbar_active_and_multiple_paused" = "1ä»¶ăźă‚ąă‚Żăƒ†ă‚Łăƒ–ăȘ通話%@ïŒ‰ăƒ»%@ä»¶ăźäž€æ™‚ćœæ­ąă•ă‚ŒăŸé€šè©±"; +"callbar_only_multiple_paused" = "äž€æ™‚ćœæ­ąă—ăŸ%@ä»¶ăźé€šè©±"; +"callbar_only_single_paused" = "äž€æ™‚ćœæ­ąă—ăŸé€šè©±"; +"store_promotional_text" = "ă‚ȘăƒŒăƒ—ăƒłăȘăƒăƒƒăƒˆăƒŻăƒŒă‚ŻäžŠă§ăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒă‚’äżè­·ă—ăŸăƒăƒŁăƒƒăƒˆăƒ»ă‚łăƒ©ăƒœăƒŹăƒŒă‚·ăƒ§ăƒłă‚ąăƒ—ăƒȘ。あăȘたè‡Șèș«ă§ă‚łăƒłăƒˆăƒ­ăƒŒăƒ«ă§ăă‚‹ă‚ˆă†ă«éžäž­ć€źé›†æš©ćŒ–ïŒˆćˆ†æ•ŁćŒ–ïŒ‰ă•ă‚ŒăŠă„ăŸă™ă€‚ăƒ‡ăƒŒă‚żăƒžă‚€ăƒ‹ăƒłă‚°ă€ăƒăƒƒă‚Żăƒ‰ă‚ąă€çŹŹäž‰è€…ă«ă‚ˆă‚‹ă‚ąă‚Żă‚»ă‚čăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; "auth_softlogout_clear_data" = "怋äșșăƒ‡ăƒŒă‚żă‚’æ¶ˆćŽ»"; -"auth_softlogout_recover_encryption_keys" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăŒă©ăźç«Żæœ«ă§ă‚‚èȘ­ă‚ă‚‹ă‚ˆă†ă«ă€ă‚”ă‚€ăƒłă‚€ăƒłă—ăŠă“ăźç«Żæœ«ă«ăźăżäżć­˜ă•ă‚ŒăŠă„ă‚‹æš—ć·é”ă‚’ć–ă‚Šæˆ»ă—ăŠăă ă•ă„ă€‚"; -"auth_softlogout_reason" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒ(%1$@)ăźçźĄç†è€…ăŒ%2$@(%3$@)ă‹ă‚‰ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă•ă›ăŸă—ăŸă€‚"; +"auth_softlogout_recover_encryption_keys" = "æš—ć·é”ăŻă“ăźç«Żæœ«ă«ăźăżäżć­˜ă•ă‚ŒăŠă„ăŸă™ă€‚äżè­·ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’ă©ăźç«Żæœ«ă§ă‚‚èȘ­ă‚€ă«ăŻă€ăăźæš—ć·é”ăŒćż…èŠă«ăȘă‚ŠăŸă™ă€‚ă‚”ă‚€ăƒłă‚€ăƒłă—ăŠæš—ć·é”ă‚’ćŸ©ć…ƒă—ăŠăă ă•ă„ă€‚"; +"auth_softlogout_reason" = "あăȘăŸăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒïŒˆ%1$@ïŒ‰ăźçźĄç†è€…ăŒă€ă‚ăȘăŸă‚’ă‚ąă‚«ă‚Šăƒłăƒˆ %2$@ %3$@ïŒ‰ă‹ă‚‰ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă•ă›ăŸă—ăŸă€‚"; "auth_softlogout_sign_in" = "ă‚”ă‚€ăƒłă‚€ăƒł"; "auth_softlogout_signed_out" = "ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă—ăŸă—ăŸ"; -"auth_autodiscover_invalid_response" = "無ćŠčăȘăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒç™șèŠ‹ăƒŹă‚čポンă‚č"; -"auth_accept_policies" = "ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăźăƒăƒȘă‚·ăƒŒă‚’çąșèȘă—ăŠćŒæ„ă—ăŠăă ă•ă„:"; -"auth_reset_password_error_is_required" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăŸă›ă‚“ïŒšăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ăƒȘă‚»ăƒƒăƒˆă™ă‚‹ăŸă‚ă«ă‚”ăƒŒăƒăƒŒă‚Șăƒ—ă‚·ăƒ§ăƒłă«èżœćŠ ă—ăŠăă ă•ă„ă€‚"; -"auth_forgot_password_error_no_configured_identity_server" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăŸă›ă‚“ïŒšăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ăƒȘă‚»ăƒƒăƒˆă™ă‚‹ăŸă‚ă«IDă‚”ăƒŒăƒăƒŒă‚’èżœćŠ ă—ăŠăă ă•ă„ă€‚"; -"auth_phone_is_required" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăȘいぼで、パă‚čăƒŻăƒŒăƒ‰ă‚’ăƒȘă‚»ăƒƒăƒˆă™ă‚‹ăŸă‚ă«é›»è©±ç•Șć·ă‚’èżœćŠ ă™ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ă€‚"; -"auth_email_is_required" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăȘいぼで、パă‚čăƒŻăƒŒăƒ‰ă‚’ăƒȘă‚»ăƒƒăƒˆă™ă‚‹ăŸă‚ă«ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’èżœćŠ ă™ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ă€‚"; +"auth_autodiscover_invalid_response" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăźăƒ‡ă‚Łă‚čă‚«ăƒăƒȘăƒŒïŒˆç™șèŠ‹ïŒ‰ă«é–ąă™ă‚‹äžæ­ŁăȘ濜答です"; +"auth_accept_policies" = "ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăźé‹ć–¶æ–č針をçąșèȘă—ă€ćŒæ„ă—ăŠăă ă•ă„ïŒš"; +"auth_reset_password_error_is_required" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăŸă›ă‚“ïŒšMatrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć†èš­ćźšă™ă‚‹ăŸă‚ă«ă‚”ăƒŒăƒăƒŒă‚Șăƒ—ă‚·ăƒ§ăƒłă«èżœćŠ ă—ăŠăă ă•ă„ă€‚"; +"auth_forgot_password_error_no_configured_identity_server" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăŸă›ă‚“ïŒšăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć†èš­ćźšă™ă‚‹ăŸă‚ă«IDă‚”ăƒŒăƒăƒŒă‚’èżœćŠ ă—ăŠăă ă•ă„ă€‚"; +"auth_phone_is_required" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăȘいため、Matrixă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ăźć†èš­ćźšă«äœżç”šă™ă‚‹é›»è©±ç•Șć·ă‚’èżœćŠ ă™ă‚‹ă“ăšăŒă§ăăŸă›ă‚“ă€‚"; +"auth_email_is_required" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăȘいため、Matrixă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć†èš­ćźšă™ă‚‹éš›ă«äœżç”šă™ă‚‹ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’èżœćŠ ă™ă‚‹ă“ăšăŒă§ăăŸă›ă‚“ă€‚"; "auth_add_email_phone_message_2" = "ă‚ąă‚«ă‚ŠăƒłăƒˆćŸ©æ—§ç”šăźăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’èš­ćźšă—ăŸă™ă€‚ćŸŒă‹ă‚‰ă‚Șăƒ—ă‚·ăƒ§ăƒłă§ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚„é›»è©±ç•Șć·ă‚’äœżç”šă—ăŠçŸ„äșșă«èŠ‹ă€ă‘ăŠă‚‚ă‚‰ăˆă‚‹ă‚ˆă†ă«ă§ăăŸă™ă€‚"; "auth_add_phone_message_2" = "電話ç•Șć·ă‚’èš­ćźšă—ăŸă™ă€‚ćŸŒă‹ă‚‰ă‚Șăƒ—ă‚·ăƒ§ăƒłă§çŸ„äșșă«èŠ‹ă€ă‘ăŠă‚‚ă‚‰ăˆă‚‹ă‚ˆă†ă«ă§ăăŸă™ă€‚"; "auth_add_email_message_2" = "ă‚ąă‚«ă‚ŠăƒłăƒˆćŸ©æ—§ç”šăźăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’èš­ćźšă—ăŸă™ă€‚ćŸŒă‹ă‚‰ă‚Șăƒ—ă‚·ăƒ§ăƒłă§çŸ„äșșă«èŠ‹ă€ă‘ăŠă‚‚ă‚‰ăˆă‚‹ă‚ˆă†ă«ă§ăăŸă™ă€‚"; "less" = "たたむ"; "more" = "もっべ"; -"switch" = "ćˆ‡ă‚Šæ›żăˆ"; +"switch" = "ćˆ‡ă‚Šæ›żăˆă‚‹"; "joined" = "ć‚ćŠ æžˆ"; "skip" = "ă‚čキップ"; @@ -795,7 +795,7 @@ // AuthenticatedSessionViewControllerFactory "authenticated_session_flow_not_supported" = "こぼケプăƒȘăŻă€ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăźèȘèšŒæ©Ÿæ§‹ă‚’ă‚”ăƒăƒŒăƒˆă—ăŠă„ăŸă›ă‚“ă€‚"; -"manage_session_sign_out" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă‹ă‚‰ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆ"; +"manage_session_sign_out" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‹ă‚‰ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆ"; "manage_session_not_trusted" = "äżĄé Œă•ă‚ŒăŠă„ăŸă›ă‚“"; "manage_session_trusted" = "äżĄé Œæžˆ"; "manage_session_name" = "ă‚»ăƒƒă‚·ăƒ§ăƒłć"; @@ -803,75 +803,75 @@ // Manage session "manage_session_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’çźĄç†"; -"security_settings_user_password_description" = "ă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć…„ćŠ›ă—ăŠæœŹäșșçąșèȘă‚’èĄŒăŁăŠăă ă•ă„"; +"security_settings_user_password_description" = "Matrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć…„ćŠ›ă—ăŠæœŹäșșçąșèȘă‚’èĄŒăŁăŠăă ă•ă„"; "security_settings_complete_security_alert_message" = "çŸćœšăźă‚»ăƒƒă‚·ăƒ§ăƒłăźă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’ćźŒäș†ă•ă›ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; -"security_settings_blacklist_unverified_devices_description" = "ć…šăŠăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă—ăŠă€äżĄé Œă§ăă‚‹ă‚‚ăźăšă—ăŠăƒžăƒŒă‚Żă—ăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄă—ăŸă™ă€‚"; +"security_settings_blacklist_unverified_devices_description" = "ć…šăŠăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă—ă€äżĄé Œæžˆăšă—ăŠăƒžăƒŒă‚Żă—ăŠăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄă—ăŸă™ă€‚"; "security_settings_blacklist_unverified_devices" = "äżĄé Œă—ăŠă„ăȘă„ă‚»ăƒƒă‚·ăƒ§ăƒłă«ăŻăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄă—ăȘい"; -"security_settings_advanced" = "äžŠçŽšè€…ć‘ă‘"; +"security_settings_advanced" = "高ćșŠăȘèš­ćźš"; "security_settings_export_keys_manually" = "æ‰‹ć‹•ă§é”ă‚’ă‚šă‚Żă‚čăƒăƒŒăƒˆ"; -"security_settings_cryptography" = "æš—ć·æŠ€èĄ“"; +"security_settings_cryptography" = "æš—ć·ćŒ–"; "security_settings_crosssigning_reset" = "クロă‚čçœČ損をăƒȘă‚»ăƒƒăƒˆ"; -"security_settings_crosssigning_info_ok" = "クロă‚čçœČćăŒæœ‰ćŠčです。"; +"security_settings_crosssigning_info_ok" = "クロă‚čçœČćă‚’ćˆ©ç”šă§ăăŸă™ă€‚"; "security_settings_crosssigning_info_trusted" = "クロă‚čçœČćăŒæœ‰ćŠčにăȘăŁăŠă„ăŸă™ă€‚ă‚Żăƒ­ă‚čçœČćă«ćŸșă„ă„ăŠä»–ăźăƒŠăƒŒă‚¶ăƒŒă‚„è‡Șćˆ†ăźä»–ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’äżĄé Œă™ă‚‹ă“ăšăŻă§ăăŸă™ăŒă€ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă«ăŻă‚Żăƒ­ă‚čçœČćç”šăźç§˜ćŻ†é”ăŒăȘă„ăŸă‚ă€ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‹ă‚‰ă‚Żăƒ­ă‚čçœČćă‚’èĄŒă†ă“ăšăŻă§ăăŸă›ă‚“ă€‚ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăźă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’ćźŒäș†ă—ăŠăă ă•ă„ă€‚"; "security_settings_crosssigning_info_exists" = "ă‚ąă‚«ă‚Šăƒłăƒˆă«ăŻă‚Żăƒ­ă‚čçœČ損IDăŒă‚ă‚ŠăŸă™ăŒă€ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻăŸă äżĄé Œă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăźă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’ćźŒäș†ă—ăŠăă ă•ă„ă€‚"; -"security_settings_crosssigning_info_not_bootstrapped" = "クロă‚čçœČćăŒăŸă èĄŒă‚ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; +"security_settings_crosssigning_info_not_bootstrapped" = "クロă‚čçœČćăŒăŸă èš­ćźšă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; "security_settings_crosssigning" = "クロă‚čçœČ損"; "security_settings_backup" = "ăƒĄăƒƒă‚»ăƒŒă‚žăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—"; "security_settings_secure_backup_delete" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ăźć‰Šé™€"; "security_settings_secure_backup_synchronise" = "ćŒæœŸ"; "security_settings_secure_backup_setup" = "èš­ćźš"; -"security_settings_secure_backup_description" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă«ă‚ąă‚Żă‚»ă‚čできăȘくăȘă‚‹ć Žćˆă«ć‚™ăˆăŠă€ă‚ąă‚«ă‚Šăƒłăƒˆăƒ‡ăƒŒă‚żăšæš—ć·é”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŸă™ă€‚é”ăŻäž€æ„ăźă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă§äżè­·ă•ă‚ŒăŸă™ă€‚"; +"security_settings_secure_backup_description" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă«ă‚ąă‚Żă‚»ă‚čできăȘくăȘă‚‹ć Žćˆă«ć‚™ăˆăŠă€ă‚ąă‚«ă‚Šăƒłăƒˆăƒ‡ăƒŒă‚żăšæš—ć·é”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŸă—ă‚‡ă†ă€‚é”ăŻäž€æ„ăźă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă§äżè­·ă•ă‚ŒăŸă™ă€‚"; "security_settings_secure_backup" = "漉慹ăȘバックケップ"; -"security_settings_crypto_sessions_description_2" = "èŠ‹èŠšăˆăźăȘă„ăƒ­ă‚°ă‚€ăƒłăŒă‚ă‚‹ć ŽćˆăŻă€Matrixă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć€‰æ›Žă—ă€ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’ăƒȘă‚»ăƒƒăƒˆă—ăŠăă ă•ă„ă€‚"; +"security_settings_crypto_sessions_description_2" = "èŠ‹èŠšăˆăźăȘă„ăƒ­ă‚°ă‚€ăƒłăŒă‚ă‚‹ć ŽćˆăŻă€Matrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć€‰æ›Žă—ă€ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’ăƒȘă‚»ăƒƒăƒˆă—ăŠăă ă•ă„ă€‚"; "security_settings_crypto_sessions_loading" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘ­ăżèŸŒă‚“ă§ă„ăŸă™â€Š"; "security_settings_crypto_sessions" = "ă‚»ăƒƒă‚·ăƒ§ăƒł"; // Security settings "security_settings_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒ"; "settings_show_NSFW_public_rooms" = "NSFWパブăƒȘăƒƒă‚Żăƒ«ăƒŒăƒ ă‚’èĄšç€ș"; -"settings_identity_server_no_is_description" = "çŸćœšă€IDă‚”ăƒŒăƒăƒŒă‚’äœżç”šă—ăŠă„ăŸă›ă‚“ă€‚ă‚ăȘăŸăźçŸ„ăŁăŠă„ă‚‹é€Łç”Ąć…ˆă‚’ç™șèŠ‹ă—ăŸă‚Šă€ăăźé€Łç”Ąć…ˆă‹ă‚‰ç™șèŠ‹ă•ă‚Œă‚‹ă‚ˆă†ă«ă™ă‚‹ă«ăŻă€ä»„äžŠă§IDă‚”ăƒŒăƒăƒŒă‚’èżœćŠ ă—ăŠăă ă•ă„ă€‚"; +"settings_identity_server_no_is_description" = "çŸćœšă€IDă‚”ăƒŒăƒăƒŒă‚’äœżç”šă—ăŠă„ăŸă›ă‚“ă€‚é€Łç”Ąć…ˆă‚’èŠ‹ă€ă‘ăŸă‚Šă€é€Łç”Ąć…ˆă‹ă‚‰èŠ‹ă€ă‘ăŠă‚‚ă‚‰ăŁăŸă‚Šă™ă‚‹ă«ăŻă€ä»„äžŠă§IDă‚”ăƒŒăƒăƒŒă‚’èżœćŠ ă—ăŠăă ă•ă„ă€‚"; "settings_identity_server_no_is" = "IDă‚”ăƒŒăƒăƒŒăŒèš­ćźšă•ă‚ŒăŠă„ăŸă›ă‚“"; -"settings_identity_server_description" = "äžŠèš˜ă§èš­ćźšă—ăŸIDă‚”ăƒŒăƒăƒŒă‚’äœżăŁăŠă€è‡Șćˆ†ăźçŸ„ă‚Šćˆă„ă‚’ç™șèŠ‹ă—ăŸă‚Šă€ç™șèŠ‹ă•ă‚ŒăŸă‚Šă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"settings_identity_server_description" = "äžŠèš˜ă§èš­ćźšă—ăŸIDă‚”ăƒŒăƒăƒŒă‚’äœżă†ăšă€è‡Șćˆ†ăźé€Łç”Ąć…ˆă‚’èŠ‹ă€ă‘ăŸă‚Šă€é€Łç”Ąć…ˆă‹ă‚‰èŠ‹ă€ă‘ăŠă‚‚ă‚‰ăŁăŸă‚Šă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; "settings_discovery_three_pid_details_enter_sms_code_action" = "SMSă‚ąă‚Żăƒ†ă‚Łăƒ™ăƒŒă‚·ăƒ§ăƒłă‚łăƒŒăƒ‰ă‚’ć…„ćŠ›"; "settings_discovery_three_pid_details_cancel_email_validation_action" = "ăƒĄăƒŒăƒ«ăźèȘèšŒă‚’ă‚­ăƒŁăƒłă‚»ăƒ«"; -"settings_discovery_three_pid_details_revoke_action" = "ć–ă‚Šæ¶ˆă—"; +"settings_discovery_three_pid_details_revoke_action" = "ć–ă‚Šæ¶ˆă™"; "settings_discovery_three_pid_details_share_action" = "ć…±æœ‰"; "settings_discovery_three_pid_details_title_email" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čを缡理"; "settings_discovery_three_pid_details_title_phone_number" = "電話ç•Șć·ă‚’çźĄç†"; -"settings_discovery_three_pid_details_information_phone_number" = "ä»–ăźăƒŠăƒŒă‚¶ăƒŒăŒă‚ăȘたをç™șèŠ‹ă—ăŸă‚Šă€ăƒ«ăƒŒăƒ ă«æ‹›ćŸ…ă™ă‚‹éš›ă«äœżç”šă§ăă‚‹é›»è©±ç•Șć·ăźèš­ćźšă‚’çźĄç†ă—ăŸă™ă€‚ă‚ąă‚«ă‚Šăƒłăƒˆăžé›»è©±ç•Șć·ăźèżœćŠ ă‚„ć‰Šé™€ăŒă§ăăŸă™ă€‚"; -"settings_discovery_three_pid_details_information_email" = "ä»–ăźăƒŠăƒŒă‚¶ăƒŒăŒă‚ăȘたをç™șèŠ‹ă—ăŸă‚Šă€ăƒ«ăƒŒăƒ ă«æ‹›ćŸ…ă™ă‚‹éš›ă«äœżç”šă§ăă‚‹ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăźèš­ćźšă‚’çźĄç†ă—ăŸă™ă€‚ă‚ąă‚«ă‚ŠăƒłăƒˆăžăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăźèżœćŠ ă‚„ć‰Šé™€ăŒă§ăăŸă™ă€‚"; +"settings_discovery_three_pid_details_information_phone_number" = "ä»–ăźăƒŠăƒŒă‚¶ăƒŒăŒă‚ăȘたをç™șèŠ‹ă—ăŸă‚Šă€ăƒ«ăƒŒăƒ ă«æ‹›ćŸ…ă—ăŸă‚Šă™ă‚‹éš›ă«äœżç”šă§ăă‚‹é›»è©±ç•Șć·ăźèš­ćźšă‚’çźĄç†ă—ăŸă™ă€‚ă‚ąă‚«ă‚Šăƒłăƒˆç”»éąă§é›»è©±ç•Șć·ă‚’èżœćŠ ă€ć‰Šé™€ă§ăăŸă™ă€‚"; +"settings_discovery_three_pid_details_information_email" = "ä»–ăźăƒŠăƒŒă‚¶ăƒŒăŒă‚ăȘたをç™șèŠ‹ă—ăŸă‚Šă€ăƒ«ăƒŒăƒ ă«æ‹›ćŸ…ă—ăŸă‚Šă™ă‚‹éš›ă«äœżç”šă§ăă‚‹ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăźèš­ćźšă‚’çźĄç†ă—ăŸă™ă€‚ă‚ąă‚«ă‚Šăƒłăƒˆç”»éąă§ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’èżœćŠ ă€ć‰Šé™€ă§ăăŸă™ă€‚"; "settings_discovery_error_message" = "ă‚šăƒ©ăƒŒăŒç™șç”Ÿă—ăŸă—ăŸă€‚ć†è©ŠèĄŒă—ăŠăă ă•ă„ă€‚"; "settings_discovery_three_pids_management_information_part3" = "。"; "settings_discovery_three_pids_management_information_part2" = "ăƒŠăƒŒă‚¶ăƒŒèš­ćźš"; -"settings_discovery_three_pids_management_information_part1" = "ä»–ăźăƒŠăƒŒă‚¶ăƒŒăŒă‚ăȘたをç™șèŠ‹ă—ăŸă‚Šă€ăƒ«ăƒŒăƒ ă«æ‹›ćŸ…ă™ă‚‹éš›ă«äœżç”šă™ă‚‹ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚„é›»è©±ç•Șć·ă‚’çźĄç†ă§ăăŸă™ă€‚ă“ăźăƒȘă‚čăƒˆă«ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚„é›»è©±ç•Șć·ă‚’èżœćŠ ă—ăŸă‚Šă€ć‰Šé™€ă—ăŸă‚Šă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚ "; -"settings_discovery_terms_not_signed" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‹é›»è©±ç•Șć·ă§ă‚ąă‚«ă‚Šăƒłăƒˆă‚’èŠ‹ă€ă‘ăŠă‚‚ă‚‰ăˆă‚‹ă‚ˆă†ă«ă™ă‚‹ă«ăŻă€IDă‚”ăƒŒăƒăƒŒïŒˆ%@ïŒ‰ăźćˆ©ç”šèŠçŽ„ăžăźćŒæ„ăŒćż…èŠă§ă™ă€‚"; -"settings_discovery_no_identity_server" = "çŸćœšă€IDă‚”ăƒŒăƒăƒŒă‚’äœżç”šă—ăŠă„ăŸă›ă‚“ă€‚ă‚ăȘăŸăźçŸ„ăŁăŠă„ă‚‹é€Łç”Ąć…ˆă‹ă‚‰ç™șèŠ‹ă•ă‚Œă‚‹ă‚ˆă†ă«ă™ă‚‹ă«ăŻă€IDă‚”ăƒŒăƒăƒŒă‚’èżœćŠ ă—ăŠăă ă•ă„ă€‚"; -"settings_key_backup_delete_confirmation_prompt_msg" = "ă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸé”ăŒé©ćˆ‡ă«ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă•ă‚ŒăŠă„ăȘă„ăšă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć€±ă†ă“ăšăŒă‚ă‚ŠăŸă™ă€‚"; +"settings_discovery_three_pids_management_information_part1" = "ä»–ăźăƒŠăƒŒă‚¶ăƒŒăŒă‚ăȘたをç™șèŠ‹ă—ăŸă‚Šă€ăƒ«ăƒŒăƒ ă«æ‹›ćŸ…ă™ă‚‹éš›ă«äœżç”šă™ă‚‹ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚„é›»è©±ç•Șć·ă‚’çźĄç†ă§ăăŸă™ă€‚ă“ăźăƒȘă‚čăƒˆă«ă€ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚„é›»è©±ç•Șć·ă‚’èżœćŠ ă—ăŸă‚Šă€ć‰Šé™€ă—ăŸă‚Šă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚ "; +"settings_discovery_terms_not_signed" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‹é›»è©±ç•Șć·ă§ă‚ąă‚«ă‚Šăƒłăƒˆă‚’èŠ‹ă€ă‘ăŠă‚‚ă‚‰ăˆă‚‹ă‚ˆă†ă«ă™ă‚‹ă«ăŻă€IDă‚”ăƒŒăƒăƒŒ %@ ăźćˆ©ç”šèŠçŽ„ăžăźćŒæ„ăŒćż…èŠă§ă™ă€‚"; +"settings_discovery_no_identity_server" = "çŸćœšă€IDă‚”ăƒŒăƒăƒŒă‚’äœżç”šă—ăŠă„ăŸă›ă‚“ă€‚é€Łç”Ąć…ˆă‹ă‚‰èŠ‹ă€ă‘ăŠă‚‚ă‚‰ă†ă‚ˆă†ă«ă™ă‚‹ă«ăŻă€IDă‚”ăƒŒăƒăƒŒă‚’èżœćŠ ă—ăŠăă ă•ă„ă€‚"; +"settings_key_backup_delete_confirmation_prompt_msg" = "ă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸé”ăŒé©ćˆ‡ă«ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă•ă‚ŒăŠă„ăȘă„ăšă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’èȘ­ăżć–ă‚ŒăȘくăȘăŁăŠă—ăŸă„ăŸă™ă€‚"; "settings_key_backup_button_connect" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’é”ăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă«æŽ„ç¶š"; -"settings_key_backup_button_delete" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ăźć‰Šé™€"; +"settings_key_backup_button_delete" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’ć‰Šé™€"; "settings_key_backup_button_restore" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‹ă‚‰ćŸ©ć…ƒ"; "settings_key_backup_button_create" = "é”ăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’äœżç”šé–‹ć§‹"; "settings_key_backup_info_trust_signature_invalid_device_unverified" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă«ăŻ%@ă«ă‚ˆă‚‹ç„ĄćŠčăȘçœČćăŒă‚ă‚ŠăŸă™"; "settings_key_backup_info_trust_signature_invalid_device_verified" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă«ăŻ%@ă«ă‚ˆă‚‹ç„ĄćŠčăȘçœČćăŒă‚ă‚ŠăŸă™"; "settings_key_backup_info_trust_signature_valid_device_unverified" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă«ăŻ%@ă«ă‚ˆă‚‹çœČćăŒă‚ă‚ŠăŸă™"; "settings_key_backup_info_trust_signature_valid_device_verified" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă«ăŻ%@ă«ă‚ˆă‚‹æœ‰ćŠčăȘçœČćăŒă‚ă‚ŠăŸă™"; -"settings_key_backup_info_trust_signature_valid" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă«ăŻă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăźæœ‰ćŠčăȘçœČćăŒă‚ă‚ŠăŸă™"; -"settings_key_backup_info_trust_signature_unknown" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă«ăŻID%@ă«ă‚ˆă‚‹ă‚»ăƒƒă‚·ăƒ§ăƒłăźçœČćăŒă‚ă‚ŠăŸă™"; -"settings_key_backup_info_progress_done" = "ć…šăŠăźé”ăŒăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă•ă‚ŒăŠă„ăŸă™"; +"settings_key_backup_info_trust_signature_valid" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă«ăŻă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă«ă‚ˆă‚‹æœ‰ćŠčăȘçœČćăŒă‚ă‚ŠăŸă™"; +"settings_key_backup_info_trust_signature_unknown" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă«ăŻă€ID%@ă«ă‚ˆă‚‹ă‚»ăƒƒă‚·ăƒ§ăƒłăźçœČćăŒă‚ă‚ŠăŸă™"; +"settings_key_backup_info_progress_done" = "ć…šăŠăźé”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŸă—ăŸ"; "settings_key_backup_info_progress" = "%@ăźé”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŠă„ăŸă™â€Š"; -"settings_key_backup_info_not_valid" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă§ăŻé”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŠă„ăŸă›ă‚“ăŒă€ćŸ©ć…ƒă«äœżç”šă—ăŸă‚Šă€ä»ŠćŸŒé”ă‚’èżœćŠ ă—ăŸă‚Šă§ăă‚‹ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’æŒăŁăŠă„ăŸă™ă€‚"; +"settings_key_backup_info_not_valid" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă§ăŻé”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŠă„ăŸă›ă‚“ăŒă€ćŸ©ć…ƒă«äœżç”šă—ăŸă‚Šă€é”ă‚’ä»ŠćŸŒèżœćŠ ă—ăŸă‚Šă§ăă‚‹ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’æŒăŁăŠă„ăŸă™ă€‚"; "settings_key_backup_info_signout_warning" = "é”ă‚’ć€±ăă•ăȘă„ă‚ˆă†ă€ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă™ă‚‹ć‰ă«ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŠăă ă•ă„ă€‚"; "settings_key_backup_info" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăŻă€ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰ăźæš—ć·ćŒ–ă«ă‚ˆăŁăŠäżè­·ă•ă‚ŒăŠă„ăŸă™ă€‚ă“ă‚Œă‚‰ăźæš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’èȘ­ă‚€ăŸă‚ăźé”ă‚’æŒăŁăŠă„ă‚‹ăźăŻă€ă‚ăȘăŸăšć—äżĄè€…ă ă‘ă§ă™ă€‚"; "settings_labs_message_reaction" = "ç””æ–‡ć­—ă§ăƒĄăƒƒă‚»ăƒŒă‚žă«ććżœ"; "settings_security" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒ"; -"settings_three_pids_management_information_part3" = ""; -"settings_three_pids_management_information_part2" = "ディă‚čă‚«ăƒăƒȘăƒŒ"; -"store_full_description" = "ElementăŻăŸăŁăŸăæ–°ă—ă„ăƒĄăƒƒă‚»ăƒłă‚žăƒŁăƒŒă‚ąăƒ—ăƒȘです。\n\n1. あăȘたè‡Șèș«ăŒăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒă‚’ă‚łăƒłăƒˆăƒ­ăƒŒăƒ«ă™ă‚‹ă“ăšă‚’ćŻèƒœă«ă—ăŸă™ă€‚\n2. MatrixăƒăƒƒăƒˆăƒŻăƒŒă‚Żă«ă„ă‚‹èȘ°ăšă§ă‚‚ă‚łăƒŸăƒ„ăƒ‹ă‚±ăƒŒă‚·ăƒ§ăƒłă§ăă‚‹ă ă‘ă§ăȘく、SlackăȘă©ăźă‚ąăƒ—ăƒȘべ連æșă™ă‚Œă°ă€ä»–ăźăƒăƒƒăƒˆăƒŻăƒŒă‚Żăšă‚‚ă‚łăƒŸăƒ„ăƒ‹ă‚±ăƒŒă‚·ăƒ§ăƒłă‚’èĄŒă†ă“ăšăŒă§ăăŸă™ă€‚\n3. ćșƒć‘Šă€ăƒ‡ăƒŒă‚żăƒžă‚€ăƒ‹ăƒłă‚°ă€ăƒăƒƒă‚Żăƒ‰ă‚ąă€ăƒŠăƒŒă‚¶ăƒŒăźć›Čă„èŸŒăżă‹ă‚‰ă€ă‚ăȘăŸă‚’ćźˆă‚ŠăŸă™ă€‚\n4. ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ăšă‚Żăƒ­ă‚čçœČćă«ă‚ˆăŁăŠă‚ăȘăŸă‚’äżè­·ă—ăŸă™ă€‚\n\nElementăŻćˆ†æ•Łćž‹ïŒˆéžäž­ć€źé›†æš©ćž‹ïŒ‰ă§ă‚ȘăƒŒăƒ—ăƒłă‚œăƒŒă‚čă§ă‚ă‚‹ăŸă‚ă€ä»–ăźăƒĄăƒƒă‚»ăƒłă‚žăƒŁăƒŒă‚ąăƒ—ăƒȘăšćźŒć…šă«ç•°ăȘăŁăŠă„ăŸă™ă€‚\n\nElementでは、あăȘたè‡Șèș«ăŒă‚”ăƒŒăƒăƒŒă‚’é‹ć–¶ă™ă‚‹ă“ăšă‚‚ă€ă‚”ăƒŒăƒăƒŒă‚’éžă¶ă“ăšă‚‚ă§ăăŸă™ă€‚ă‚ăȘăŸăźăƒ‡ăƒŒă‚żăšäŒšè©±ă«é–ąă™ă‚‹ăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒă‚„æ‰€æœ‰æš©ăŻă€ă‚ăȘたè‡Șèș«ă§çźĄç†ă§ăăŸă™ă€‚さらに、ElementăŻé–‹ă‹ă‚ŒăŸăƒăƒƒăƒˆăƒŻăƒŒă‚Żă«ă‚ąă‚Żă‚»ă‚čするぼで、ElementăźăƒŠăƒŒă‚¶ăƒŒä»„ć€–ăšă‚‚è©±ă™ă“ăšăŒă§ăăŸă™ă€‚ă—ă‹ă‚‚ăă‚ă‚ăŠćź‰ć…šă§ă™ă€‚\n\nElementはMatrixăƒŒăƒŒă‚ȘăƒŒăƒ—ăƒłăȘćˆ†æ•Łćž‹é€šäżĄăźæš™æș–èŠæ ŒăƒŒăƒŒă§ć‹•äœœă™ă‚‹ăŸă‚ă€ă“ă‚Œă‚‰ć…šăŠă‚’ćźŸçŸă™ă‚‹ă“ăšăŒă§ăăŠă„ăŸă™ă€‚\n\nElementă§ăŻă€ă©ăźă‚”ăƒŒăƒăƒŒă‚’äœżç”šă™ă‚‹ă‹ă‚’ă€ă”è‡Șèș«ă§ElementぼケプăƒȘからæ±șă‚ă‚‹ă“ăšăŒă§ăăŸă™ă€‚\n\n1. 開ç™șè€…ăŒăƒ›ă‚čトする matrix.org ぼパブăƒȘăƒƒă‚Żă‚”ăƒŒăƒăƒŒă§ç„Ąæ–™ă‚ąă‚«ă‚Šăƒłăƒˆă‚’ć–ćŸ—ă™ă‚‹ă€‚\n2. あăȘたè‡Șèș«ăŒă‚”ăƒŒăƒăƒŒă‚’é‹ć–¶ă—ă€ă‚ąă‚«ă‚Šăƒłăƒˆă‚’çźĄç†ă™ă‚‹ă€‚\n3. Element Matrix Servicesぼホă‚čăƒ†ă‚Łăƒłă‚°ăƒ—ăƒ©ăƒƒăƒˆăƒ•ă‚©ăƒŒăƒ ă«ćŠ ć…„ă—ă€ă‚«ă‚čă‚żăƒ ă‚”ăƒŒăƒăƒŒäžŠă§ă‚ąă‚«ă‚Šăƒłăƒˆă‚’äœœă‚‹ă€‚\n\năȘぜElementを遞ぶăčきăȘăźă‹ïŒŸ\n\nè‡Șćˆ†ăźăƒ‡ăƒŒă‚żă‚’ă€è‡Șćˆ†ă§æ‰€æœ‰: ăƒ‡ăƒŒă‚żă‚„ăƒĄăƒƒă‚»ăƒŒă‚žă‚’äżçźĄă™ă‚‹ć Žæ‰€ă‚’è‡Ș戆でæ±șă‚ă‚‹ă“ăšăŒă§ăăŸă™ă€‚ăƒ‡ăƒŒă‚żă‚’æ‰€æœ‰ă—ă‚łăƒłăƒˆăƒ­ăƒŒăƒ«ă™ă‚‹ăźăŻă€ă‚ăȘたè‡Șèș«ă§ă™ă€‚ăƒ‡ăƒŒă‚żă‚’è§Łæžă—ăŸă‚ŠçŹŹäž‰è€…ă«ăƒ‡ăƒŒă‚żă‚’æžĄă—ăŸă‚Šă™ă‚‹ć·šć€§ITäŒæ„­ă§ăŻă‚ă‚ŠăŸă›ă‚“ă€‚\n\nă‚ȘăƒŒăƒ—ăƒłăȘăƒĄăƒƒă‚»ăƒŒă‚žăƒłă‚°ăšă‚łăƒ©ăƒœăƒŹăƒŒă‚·ăƒ§ăƒł: MatrixăƒăƒƒăƒˆăƒŻăƒŒă‚ŻäžŠăźèȘ°ăšă§ă‚‚ă€ç›žæ‰‹ăŒElementや他たMatrixケプăƒȘă‚’äœżăŁăŠă„ă‚‹ă‹ă€ă•ă‚‰ă«ăŻSlack、IRC、XMPPぼようăȘä»–ăźăƒĄăƒƒă‚»ăƒŒă‚žăƒłă‚°ă‚·ă‚čăƒ†ăƒ ă‚’äœżăŁăŠă„ă‚‹ă‹ă«é–ąă‚ă‚‰ăšă€ăƒăƒŁăƒƒăƒˆă‚’ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚\n\néžćžžă«ćź‰ć…š: æœŹç‰©ăźă‚šăƒłăƒ‰ăƒ»ăƒ„ăƒŒăƒ»ă‚šăƒłăƒ‰ăźæš—ć·ćŒ–ïŒˆäŒšè©±ă«ć‚ćŠ ă—ăŠă„ă‚‹äșșă ă‘ăŒăƒĄăƒƒă‚»ăƒŒă‚žă‚’ćŸ©ć·ćŒ–ă§ăăŸă™ïŒ‰ăšă€äŒšè©±ć‚ćŠ è€…ăźçœŸæ­Łæ€§ă‚’çąșèȘă™ă‚‹ăŸă‚ăźă‚Żăƒ­ă‚čçœČćă‚’èĄŒă„ăŸă™ă€‚\n\nćŒ…æ‹Źçš„ăȘă‚łăƒŸăƒ„ăƒ‹ă‚±ăƒŒă‚·ăƒ§ăƒł: ăƒĄăƒƒă‚»ăƒŒă‚žăƒłă‚°ă€éŸłćŁ°ăŠă‚ˆăłăƒ“ăƒ‡ă‚Șé€šè©±ă€ăƒ•ă‚Ąă‚€ăƒ«ć…±æœ‰ă€ç”»éąć…±æœ‰ă€ăăźä»–ć€šăăźæ©Ÿèƒœç”±ćˆă€ăƒœăƒƒăƒˆă€ă‚Šă‚Łă‚žă‚§ăƒƒăƒˆă‚’æäŸ›ă—ăŸă™ă€‚ăƒ«ăƒŒăƒ ă‚„ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒă‚’ç«‹ăĄäžŠă’ăŠé€Łç”Ąă‚’ć–ă‚Šćˆă„ă€ç‰©äș‹ă‚’ă‚čăƒ ăƒŒă‚șă«æˆă—é‚ă’ăŸă—ă‚‡ă†ă€‚\n\nい぀でも、どこにいおも: ć…šăŠăźç«Żæœ«ăšă‚Šă‚§ăƒ–ïŒˆhttps://app.element.ioïŒ‰ă§ăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­ŽăŒćŒæœŸă•ă‚Œă‚‹ăŸă‚ă€ă©ă“ă«ă„ăŠă‚‚é€Łç”Ąă‚’ć–ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"settings_three_pids_management_information_part3" = "ă§èš­ćźšă—ăŸă—ă‚‡ă†ă€‚"; +"settings_three_pids_management_information_part2" = "ディă‚čă‚«ăƒăƒȘăƒŒïŒˆç™ș芋"; +"store_full_description" = "ElementăŻăŸăŁăŸăæ–°ă—ă„ăƒĄăƒƒă‚»ăƒłă‚žăƒŁăƒŒă‚ąăƒ—ăƒȘです。\n\n1. あăȘたè‡Șèș«ăŒăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒă‚’ă‚łăƒłăƒˆăƒ­ăƒŒăƒ«ă§ăăŸă™ă€‚\n2. MatrixăƒăƒƒăƒˆăƒŻăƒŒă‚Żă«ă„ă‚‹èȘ°ăšă§ă‚‚ă‚łăƒŸăƒ„ăƒ‹ă‚±ăƒŒă‚·ăƒ§ăƒłă§ăă‚‹ă ă‘ă§ăȘく、SlackăȘă©ăźă‚ąăƒ—ăƒȘべ連æșă™ă‚Œă°ă€ä»–ăźăƒăƒƒăƒˆăƒŻăƒŒă‚Żăšă‚‚ă‚łăƒŸăƒ„ăƒ‹ă‚±ăƒŒă‚·ăƒ§ăƒłă‚’èĄŒă†ă“ăšăŒă§ăăŸă™ă€‚\n3. ćșƒć‘Šă€ăƒ‡ăƒŒă‚żăƒžă‚€ăƒ‹ăƒłă‚°ă€ăƒăƒƒă‚Żăƒ‰ă‚ąă€ăƒŠăƒŒă‚¶ăƒŒăźć›Čă„èŸŒăżă‹ă‚‰ă€ă‚ăȘăŸă‚’ćźˆă‚ŠăŸă™ă€‚\n4. ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ăšă€ă‚Żăƒ­ă‚čçœČćă«ă‚ˆă‚‹èȘèšŒă§ă€ă‚ăȘăŸă‚’äżè­·ă—ăŸă™ă€‚\n\nElementăŻćˆ†æ•Łćž‹ïŒˆéžäž­ć€źé›†æš©ćž‹ïŒ‰ă§ă‚ȘăƒŒăƒ—ăƒłă‚œăƒŒă‚čă§ă‚ă‚‹ăŸă‚ă€ä»–ăźăƒĄăƒƒă‚»ăƒłă‚žăƒŁăƒŒă‚ąăƒ—ăƒȘăšćźŒć…šă«ç•°ăȘăŁăŠă„ăŸă™ă€‚\n\nElementでは、あăȘたè‡Șèș«ăŒă‚”ăƒŒăƒăƒŒă‚’é‹ć–¶ă™ă‚‹ă“ăšă‚‚ă€ă‚”ăƒŒăƒăƒŒă‚’éžă¶ă“ăšă‚‚ă§ăăŸă™ă€‚ă‚ăȘăŸăźăƒ‡ăƒŒă‚żăšäŒšè©±ă«é–ąă™ă‚‹ăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒă‚„æ‰€æœ‰æš©ăŻă€ă‚ăȘたè‡Șèș«ă§çźĄç†ă§ăăŸă™ă€‚さらに、ElementăŻé–‹ă‹ă‚ŒăŸăƒăƒƒăƒˆăƒŻăƒŒă‚Żă«ă‚ąă‚Żă‚»ă‚čするぼで、ElementăźăƒŠăƒŒă‚¶ăƒŒä»„ć€–ăšă‚‚è©±ă™ă“ăšăŒă§ăăŸă™ă€‚ă—ă‹ă‚‚ăă‚ă‚ăŠćź‰ć…šă§ă™ă€‚\n\nElementはMatrix――ă‚ȘăƒŒăƒ—ăƒłăȘćˆ†æ•Łćž‹é€šäżĄăźæš™æș–èŠæ Œâ€•â€•ă§ć‹•äœœă™ă‚‹ăŸă‚ă€ă“ă‚Œă‚‰ć…šăŠă‚’ćźŸçŸă™ă‚‹ă“ăšăŒă§ăăŠă„ăŸă™ă€‚\n\nElementă§ăŻă€ă©ăźă‚”ăƒŒăƒăƒŒă‚’äœżç”šă™ă‚‹ă‹ă‚’ă€ă”è‡Șèș«ă§ElementぼケプăƒȘからæ±șă‚ă‚‹ă“ăšăŒă§ăăŸă™ă€‚\n\n1. 開ç™șè€…ăŒăƒ›ă‚čトする matrix.org ぼパブăƒȘăƒƒă‚Żă‚”ăƒŒăƒăƒŒă§ç„Ąæ–™ă‚ąă‚«ă‚Šăƒłăƒˆă‚’ć–ćŸ—ă™ă‚‹ă€‚\n2. あăȘたè‡Șèș«ăŒă‚”ăƒŒăƒăƒŒă‚’é‹ć–¶ă—ă€ă‚ąă‚«ă‚Šăƒłăƒˆă‚’çźĄç†ă™ă‚‹ă€‚\n3. Element Matrix Servicesぼホă‚čăƒ†ă‚Łăƒłă‚°ăƒ—ăƒ©ăƒƒăƒˆăƒ•ă‚©ăƒŒăƒ ă«ćŠ ć…„ă—ă€ă‚«ă‚čă‚żăƒ ă‚”ăƒŒăƒăƒŒäžŠă§ă‚ąă‚«ă‚Šăƒłăƒˆă‚’äœœă‚‹ă€‚\n\năȘぜElementを遞ぶăčきăȘăźă‹ïŒŸ\n\nè‡Șćˆ†ăźăƒ‡ăƒŒă‚żă‚’ă€è‡Șćˆ†ă§æ‰€æœ‰ïŒšăƒ‡ăƒŒă‚żă‚„ăƒĄăƒƒă‚»ăƒŒă‚žă‚’äżçźĄă™ă‚‹ć Žæ‰€ă‚’è‡Ș戆でæ±șă‚ă‚‹ă“ăšăŒă§ăăŸă™ă€‚ăƒ‡ăƒŒă‚żă‚’æ‰€æœ‰ă—ă‚łăƒłăƒˆăƒ­ăƒŒăƒ«ă™ă‚‹ăźăŻă€ă‚ăȘたè‡Șèș«ă§ă™ă€‚ăƒ‡ăƒŒă‚żă‚’è§Łæžă—ăŸă‚ŠçŹŹäž‰è€…ă«ăƒ‡ăƒŒă‚żă‚’æžĄă—ăŸă‚Šă™ă‚‹ć·šć€§ITäŒæ„­ă§ăŻă‚ă‚ŠăŸă›ă‚“ă€‚\n\nă‚ȘăƒŒăƒ—ăƒłăȘăƒĄăƒƒă‚»ăƒŒă‚žăƒłă‚°ăšă‚łăƒ©ăƒœăƒŹăƒŒă‚·ăƒ§ăƒłïŒšMatrixăƒăƒƒăƒˆăƒŻăƒŒă‚ŻäžŠăźèȘ°ăšă§ă‚‚ă€ç›žæ‰‹ăŒElementや他たMatrixケプăƒȘă‚’äœżăŁăŠă„ă‚‹ă‹ă€ă•ă‚‰ă«ăŻSlack、IRC、XMPPぼようăȘä»–ăźăƒĄăƒƒă‚»ăƒŒă‚žăƒłă‚°ă‚·ă‚čăƒ†ăƒ ă‚’äœżăŁăŠă„ă‚‹ă‹ă«é–ąă‚ă‚‰ăšă€ăƒăƒŁăƒƒăƒˆă‚’ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚\n\néžćžžă«ćź‰ć…šïŒšæœŹç‰©ăźă‚šăƒłăƒ‰ăƒ»ăƒ„ăƒŒăƒ»ă‚šăƒłăƒ‰ăźæš—ć·ćŒ–ïŒˆäŒšè©±ă«ć‚ćŠ ă—ăŠă„ă‚‹äșșă ă‘ăŒăƒĄăƒƒă‚»ăƒŒă‚žă‚’ćŸ©ć·ćŒ–ă§ăăŸă™ïŒ‰ăšă€äŒšè©±ć‚ćŠ è€…ăźç«Żæœ«ă‚’èȘèšŒă™ă‚‹ăŸă‚ăźă‚Żăƒ­ă‚čçœČćă‚’èĄŒă„ăŸă™ă€‚\n\nćŒ…æ‹Źçš„ăȘă‚łăƒŸăƒ„ăƒ‹ă‚±ăƒŒă‚·ăƒ§ăƒłïŒšăƒĄăƒƒă‚»ăƒŒă‚žăƒłă‚°ă€éŸłćŁ°ăŠă‚ˆăłăƒ“ăƒ‡ă‚Șé€šè©±ă€ăƒ•ă‚Ąă‚€ăƒ«ć…±æœ‰ă€ç”»éąć…±æœ‰ă€ăăźä»–ć€šăăźæ©Ÿèƒœç”±ćˆă€ăƒœăƒƒăƒˆă€ă‚Šă‚Łă‚žă‚§ăƒƒăƒˆă‚’æäŸ›ă—ăŸă™ă€‚ăƒ«ăƒŒăƒ ă‚„ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒă‚’ç«‹ăĄäžŠă’ăŠé€Łç”Ąă‚’ć–ă‚Šćˆă„ă€ç‰©äș‹ă‚’ă‚čăƒ ăƒŒă‚șă«æˆă—é‚ă’ăŸă—ă‚‡ă†ă€‚\n\nă„ă€ă§ă‚‚ă€ă©ă“ă«ă„ăŠă‚‚ïŒšć…šăŠăźç«Żæœ«ăšă‚Šă‚§ăƒ– https://app.element.io ă§ăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­ŽăŒćŒæœŸă•ă‚Œă‚‹ăŸă‚ă€ă©ă“ă«ă„ăŠă‚‚é€Łç”Ąă‚’ć–ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; "user_verification_session_details_additional_information_untrusted_other_user" = "ăƒŠăƒŒă‚¶ăƒŒăŒă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’äżĄé Œă™ă‚‹ăŸă§ăŻă€ă‚»ăƒƒă‚·ăƒ§ăƒłăšăźé–“ă§é€ć—äżĄă•ă‚Œă‚‹ăƒĄăƒƒă‚»ăƒŒă‚žă«ăŻè­Šć‘ŠăŒèĄšç€șă•ă‚ŒăŸă™ă€‚ăŸăŸă€æ‰‹ć‹•ă§èȘèšŒă™ă‚‹ă“ăšă‚‚ă§ăăŸă™ă€‚"; -"user_verification_session_details_information_untrusted_other_user" = " æ–°ă—ă„ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’äœżăŁăŠă‚”ă‚€ăƒłă‚€ăƒłă—ăŸă—ăŸ:"; -"user_verification_session_details_information_untrusted_current_user" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă™ă‚‹ă“ăšă§ă€äżĄé Œă§ăă‚‹ă‚‚ăźăšă—ăŠăƒžăƒŒă‚Żă—ă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăžăźă‚ąă‚Żă‚»ă‚čă‚’èš±ćŻă—ăŸă™ă€‚"; -"user_verification_session_details_information_trusted_other_user_part2" = " æ€œèšŒæžˆăż:"; -"user_verification_session_details_information_trusted_other_user_part1" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻćź‰ć…šăȘă‚‚ăźăšă—ăŠäżĄé Œă•ă‚ŒăŠă„ăŸă™ă€‚ăȘぜăȘら "; +"user_verification_session_details_information_untrusted_other_user" = " ăŒæ–°ă—ă„ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’äœżăŁăŠă‚”ă‚€ăƒłă‚€ăƒłă—ăŸă—ăŸïŒš"; +"user_verification_session_details_information_untrusted_current_user" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă—ăŠäżĄé Œæžˆăšă—ăŠăƒžăƒŒă‚Żă—ă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăžăźă‚ąă‚Żă‚»ă‚čă‚’èš±ćŻă€‚"; +"user_verification_session_details_information_trusted_other_user_part2" = " ăŒæ€œèšŒă—ăŸă—ăŸïŒš"; +"user_verification_session_details_information_trusted_other_user_part1" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻćź‰ć…šăȘă‚‚ăźăšă—ăŠäżĄé Œă•ă‚ŒăŠă„ăŸă™ă€‚ "; "user_verification_session_details_information_trusted_current_user" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻă€èȘèšŒă•ă‚ŒăŸăŸă‚ćź‰ć…šăȘă‚‚ăźăšă—ăŠäżĄé Œă•ă‚ŒăŠă„ăŸă™ă€‚"; "user_verification_session_details_untrusted_title" = "äżĄé Œă•ă‚ŒăŠă„ăŸă›ă‚“"; @@ -880,17 +880,17 @@ "user_verification_session_details_trusted_title" = "äżĄé Œæžˆ"; "user_verification_sessions_list_session_untrusted" = "äżĄé Œă•ă‚ŒăŠă„ăŸă›ă‚“"; "user_verification_sessions_list_session_trusted" = "äżĄé Œæžˆ"; -"user_verification_sessions_list_table_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłäž€èŠ§"; -"user_verification_sessions_list_information" = "ă“ăźăƒ«ăƒŒăƒ ă«ă„ă‚‹ă“ăźăƒŠăƒŒă‚¶ăƒŒăšăźăƒĄăƒƒă‚»ăƒŒă‚žăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰ă§æš—ć·ćŒ–ă•ă‚ŒăŠăŠă‚ŠçŹŹäž‰è€…ăŒèȘ­ăżć–ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ă€‚"; -"user_verification_sessions_list_user_trust_level_unknown_title" = "æœȘ矄"; +"user_verification_sessions_list_table_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_verification_sessions_list_information" = "ă“ăźăƒ«ăƒŒăƒ ă«ă„ă‚‹ă“ăźăƒŠăƒŒă‚¶ăƒŒăšăźăƒĄăƒƒă‚»ăƒŒă‚žăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰ă§æš—ć·ćŒ–ă•ă‚ŒăŠăŠă‚Šă€çŹŹäž‰è€…ăŒè§ŁèȘ­ă™ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ă€‚"; +"user_verification_sessions_list_user_trust_level_unknown_title" = "䞍明"; "user_verification_sessions_list_user_trust_level_warning_title" = "è­Šć‘Š"; // Sessions list "user_verification_sessions_list_user_trust_level_trusted_title" = "äżĄé Œæžˆ"; -"user_verification_start_additional_information" = "ćź‰ćżƒă—ăŠă”ćˆ©ç”šă„ăŸă ăăŸă‚ă«ă€ç›ŽæŽ„ăŠäŒšă„ă™ă‚‹ă‹ă€ćˆ„ăźæ–čæł•ă§ă”é€Łç”Ąăă ă•ă„ă€‚"; -"user_verification_start_waiting_partner" = "%@ă‚’ćŸ…ăŁăŠă„ăŸă™â€Š"; -"user_verification_start_information_part2" = " 䞥æ–čăźç«Żæœ«ă§ăƒŻăƒłă‚żă‚€ăƒ ă‚łăƒŒăƒ‰ă‚’çąșèȘă—ăŸă™ă€‚"; +"user_verification_start_additional_information" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’é«˜ă‚ă‚‹ăŸă‚ă«ă€ćŻŸéąă§èĄŒă†ă‹ă€ä»–ăźé€šäżĄæ‰‹æź”ă‚’ćˆ©ç”šă—ăŸă—ă‚‡ă†ă€‚"; +"user_verification_start_waiting_partner" = "%@ă‚’ćŸ…æ©Ÿă—ăŠă„ăŸă™â€Š"; +"user_verification_start_information_part2" = " 䞥æ–čăźç«Żæœ«ă§ăƒŻăƒłă‚żă‚€ăƒ ă‚łăƒŒăƒ‰ă‚’çąșèȘă—、èȘèšŒă—ăŠăă ă•ă„ă€‚"; "user_verification_start_information_part1" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’é«˜ă‚ă‚‹ăŸă‚ă« "; // MARK: - User verification @@ -902,23 +902,23 @@ "key_verification_scan_confirmation_scanned_user_information" = "%@ăŻćŒă˜ă‚·ăƒŒăƒ«ăƒ‰ă‚’èĄšç€șă—ăŠă„ăŸă™ă‹ïŒŸ"; // Scanned -"key_verification_scan_confirmation_scanned_title" = "ăŸă‚‚ăȘăă§ă™ïŒ"; -"key_verification_scan_confirmation_scanning_device_waiting_other" = "ä»–ăźç«Żæœ«ă‚’ćŸ…ăŁăŠă„ăŸă™â€Š"; +"key_verification_scan_confirmation_scanned_title" = "ă‚‚ă†ć°‘ă—ă§ă™ïŒ"; +"key_verification_scan_confirmation_scanning_device_waiting_other" = "ä»–ăźç«Żæœ«ă‚’ćŸ…æ©Ÿă—ăŠă„ăŸă™â€Š"; // MARK: Scan confirmation // Scanning -"key_verification_scan_confirmation_scanning_title" = "もう民しです。çąșèȘă‚’ćŸ…ăŁăŠă„ăŸă™â€Š"; -"key_verification_scan_confirmation_scanning_user_waiting_other" = "%@ă‚’ćŸ…ăŁăŠă„ăŸă™â€Š"; -"key_verification_verify_qr_code_scan_other_code_success_message" = "QRă‚łăƒŒăƒ‰ăźèȘèšŒă«æˆćŠŸă—ăŸă—ăŸă€‚"; -"key_verification_verify_qr_code_scan_other_code_success_title" = "ă‚łăƒŒăƒ‰ăŒæœ‰ćŠčにăȘă‚ŠăŸă—ăŸïŒ"; -"key_verification_verify_qr_code_other_scan_my_code_title" = "ç›žæ‰‹ăŒQRă‚łăƒŒăƒ‰ă‚’èȘ­ăżć–ăŁăŠăă‚ŒăŸă—ăŸă‹ïŒŸ"; -"key_verification_verify_qr_code_start_emoji_action" = "ç””æ–‡ć­—ă«ă‚ˆă‚‹èȘèšŒ"; +"key_verification_scan_confirmation_scanning_title" = "ă‚‚ă†ć°‘ă—ă§ă™ïŒçąșèȘă‚’ćŸ…æ©Ÿă—ăŠă„ăŸă™â€Š"; +"key_verification_scan_confirmation_scanning_user_waiting_other" = "%@ă‚’ćŸ…æ©Ÿă—ăŠă„ăŸă™â€Š"; +"key_verification_verify_qr_code_scan_other_code_success_message" = "QRă‚łăƒŒăƒ‰ă‚’æ­Łćžžă«æ€œèšŒă—ăŸă—ăŸă€‚"; +"key_verification_verify_qr_code_scan_other_code_success_title" = "ă‚łăƒŒăƒ‰ă‚’æ€œèšŒă—ăŸă—ăŸïŒ"; +"key_verification_verify_qr_code_other_scan_my_code_title" = "ç›žæ‰‹ăŒQRă‚łăƒŒăƒ‰ă‚’æ­Łćžžă«èȘ­ăżć–ă‚ŠăŸă—ăŸă‹ïŒŸ"; +"key_verification_verify_qr_code_start_emoji_action" = "ç””æ–‡ć­—ă§èȘèšŒ"; "key_verification_verify_qr_code_cannot_scan_action" = "ă‚čă‚­ăƒŁăƒłă§ăăŸă›ă‚“ă‹ïŒŸ"; -"key_verification_verify_qr_code_scan_code_action" = "ă‚łăƒŒăƒ‰ă‚’ă‚čキャン"; +"key_verification_verify_qr_code_scan_code_action" = "ă‚łăƒŒăƒ‰ă‚’ă‚čキャンしどください"; "key_verification_verify_qr_code_emoji_information" = "ç””æ–‡ć­—ăźäžŠăłă‚’æŻ”èŒƒă—ăŠèȘèšŒă€‚"; -"key_verification_verify_qr_code_information_other_device" = "ä»„äž‹ăźă‚łăƒŒăƒ‰ă‚’ă‚čキャンしどçąșèȘă—ăŠăă ă•ă„:"; -"key_verification_verify_qr_code_information" = "ă‚łăƒŒăƒ‰ă‚’ă‚čキャンしど、おäș’いをしっかりずçąșèȘă—ăŸă™ă€‚"; +"key_verification_verify_qr_code_information_other_device" = "ä»„äž‹ăźă‚łăƒŒăƒ‰ă‚’ă‚čキャンしどèȘèšŒă—ăŠăă ă•ă„ïŒš"; +"key_verification_verify_qr_code_information" = "ă‚łăƒŒăƒ‰ă‚’ă‚čキャンしど、おäș’いを柉慚にèȘèšŒă—ăŸă—ă‚‡ă†ă€‚"; // MARK: QR code @@ -928,16 +928,16 @@ "key_verification_incoming_request_incoming_alert_message" = "%@はèȘèšŒă‚’èŠæ±‚ă—ăŠă„ăŸă™"; "key_verification_tile_conclusion_warning_title" = "äżĄé Œă•ă‚ŒăŠă„ăȘă„ă‚”ă‚€ăƒłă‚€ăƒł"; -"key_verification_tile_conclusion_done_title" = "æ€œèšŒæžˆăż"; -"key_verification_tile_request_incoming_approval_decline" = "据例"; -"key_verification_tile_request_incoming_approval_accept" = "æ‰żèȘ"; -"key_verification_tile_request_status_accepted" = "あăȘăŸăŻæ‰żèȘă—ăŸă—ăŸ"; +"key_verification_tile_conclusion_done_title" = "èȘèšŒæžˆ"; +"key_verification_tile_request_incoming_approval_decline" = "æ‹’ćŠ"; +"key_verification_tile_request_incoming_approval_accept" = "ćŒæ„"; +"key_verification_tile_request_status_accepted" = "æ‰żèȘă—ăŸă—ăŸ"; "key_verification_tile_request_status_cancelled" = "%@ăŻă‚­ăƒŁăƒłă‚»ăƒ«ă—ăŸă—ăŸ"; -"key_verification_tile_request_status_cancelled_by_me" = "あăȘăŸăŻă‚­ăƒŁăƒłă‚»ăƒ«ă—ăŸă—ăŸ"; +"key_verification_tile_request_status_cancelled_by_me" = "ă‚­ăƒŁăƒłă‚»ăƒ«ă—ăŸă—ăŸ"; "key_verification_tile_request_status_expired" = "æœŸé™ćˆ‡ă‚Œ"; -"key_verification_tile_request_status_waiting" = "ăŠćŸ…ăĄăă ă•ă„â€Š"; -"key_verification_tile_request_status_data_loading" = "æ—„æ™‚ă‚’èȘ­ăżèŸŒăżâ€Š"; -"key_verification_tile_request_outgoing_title" = "èȘèšŒă‚’é€äżĄæžˆ"; +"key_verification_tile_request_status_waiting" = "ćŸ…æ©Ÿă—ăŠă„ăŸă™â€Š"; +"key_verification_tile_request_status_data_loading" = "æ—„æ™‚ă‚’èȘ­ăżèŸŒă‚“ă§ă„ăŸă™â€Š"; +"key_verification_tile_request_outgoing_title" = "èȘèšŒă‚’é€äżĄă—ăŸă—ăŸ"; // Tiles @@ -951,28 +951,28 @@ // Generic errors -"error_invite_3pid_with_no_identity_server" = "ăƒĄăƒŒăƒ«ă§æ‹›ćŸ…ă™ă‚‹ăŸă‚ă«èš­ćźšă‹ă‚‰IDă‚”ăƒŒăƒăƒŒă‚’èżœćŠ ă—ăŸă™ă€‚"; +"error_invite_3pid_with_no_identity_server" = "ăƒĄăƒŒăƒ«ă§æ‹›ćŸ…ă™ă‚‹ă«ăŻă€èš­ćźšă§IDă‚”ăƒŒăƒăƒŒă‚’èżœćŠ ă—ăŠăă ă•ă„ă€‚"; // MARK: Reaction history "reaction_history_title" = "ăƒȘă‚ąă‚Żă‚·ăƒ§ăƒłăźć±„æ­Ž"; -"emoji_picker_places_category" = "æ—…ăšć Žæ‰€"; -"emoji_picker_flags_category" = "ć›œæ——"; +"emoji_picker_places_category" = "æ—…èĄŒăšć Žæ‰€"; +"emoji_picker_flags_category" = "旗"; "emoji_picker_symbols_category" = "ă‚·ăƒłăƒœăƒ«"; -"emoji_picker_objects_category" = "ă‚Șブゾェクト"; +"emoji_picker_objects_category" = "物䜓"; "emoji_picker_foods_category" = "食ăč物ずéŁČみ物"; "emoji_picker_nature_category" = "拕物ずè‡Ș然"; -"emoji_picker_people_category" = "笑顔べみんăȘ"; +"emoji_picker_people_category" = "èĄšæƒ…ăšäșș々"; // MARK: Emoji picker -"emoji_picker_title" = "ăƒ”ăƒƒă‚«ăƒŒ"; +"emoji_picker_title" = "ăƒȘă‚ąă‚Żă‚·ăƒ§ăƒł"; // MARK: File upload "file_upload_error_title" = "ăƒ•ă‚Ąă‚€ăƒ«ăźă‚ąăƒƒăƒ—ăƒ­ăƒŒăƒ‰ă‚šăƒ©ăƒŒ"; -"file_upload_error_unsupported_file_type_message" = "ăƒ•ă‚Ąă‚€ăƒ«ăźă‚żă‚€ăƒ—ăŒă‚”ăƒăƒŒăƒˆă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; +"file_upload_error_unsupported_file_type_message" = "ăƒ•ă‚Ąă‚€ăƒ«ăźçšźéĄžăŒă‚”ăƒăƒŒăƒˆă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; "device_verification_emoji_pin" = "ピン"; "device_verification_emoji_folder" = "ăƒ•ă‚©ăƒ«ăƒ€ăƒŒ"; -"device_verification_emoji_headphones" = "ăƒ˜ăƒƒăƒ‰ăƒ•ă‚©ăƒł"; -"device_verification_emoji_anchor" = "ă‚ąăƒłă‚«ăƒŒ"; +"device_verification_emoji_headphones" = "ヘッドホン"; +"device_verification_emoji_anchor" = "いかり"; "device_verification_emoji_bell" = "ăƒ™ăƒ«"; "device_verification_emoji_trumpet" = "ăƒˆăƒ©ăƒłăƒšăƒƒăƒˆ"; "device_verification_emoji_guitar" = "ă‚źă‚żăƒŒ"; @@ -982,55 +982,55 @@ "device_verification_emoji_aeroplane" = "éŁ›èĄŒæ©Ÿ"; "device_verification_emoji_bicycle" = "è‡Șè»ąè»Š"; "device_verification_emoji_train" = "電車"; -"device_verification_emoji_flag" = "ăƒ•ăƒ©ă‚°"; -"device_verification_emoji_telephone" = "ăƒ†ăƒŹăƒ•ă‚©ăƒł"; -"device_verification_emoji_hammer" = "ăƒăƒłăƒžăƒŒ"; +"device_verification_emoji_flag" = "旗"; +"device_verification_emoji_telephone" = "電話機"; +"device_verification_emoji_hammer" = "金槌"; "device_verification_emoji_key" = "鍔"; -"device_verification_emoji_lock" = "錠"; -"settings_three_pids_management_information_part1" = "ăƒ­ă‚°ă‚€ăƒłă‚„ă‚ąă‚«ă‚Šăƒłăƒˆăźć›žćŸ©ă«äœżç”šă§ăă‚‹ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚„é›»è©±ç•Șć·ă‚’ă“ă“ă§çźĄç†ă—ăŸă™ă€‚èȘ°ăŒă‚ăȘたぼこべをç™șèŠ‹ă§ăă‚‹ă‹ă‚’çźĄç†ă™ă‚‹ "; +"device_verification_emoji_lock" = "錠才"; +"settings_three_pids_management_information_part1" = "ăƒ­ă‚°ă‚€ăƒłă‚„ă‚ąă‚«ă‚Šăƒłăƒˆăźć›žćŸ©ă«äœżç”šă§ăă‚‹ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚„é›»è©±ç•Șć·ă‚’ă“ă“ă§çźĄç†ă€‚ă‚ăȘăŸă‚’èŠ‹ă€ă‘ă‚‰ă‚Œă‚‹äșșを "; "settings_identity_server_settings" = "IDă‚”ăƒŒăƒăƒŒ"; "external_link_confirmation_title" = "こぼăƒȘンクを憍çąșèȘă—ăŠăă ă•ă„"; -"media_type_accessibility_sticker" = "ă‚čăƒ†ă‚Łăƒƒă‚«ăƒŒ"; +"media_type_accessibility_sticker" = "ă‚čăƒ†ăƒƒă‚«ăƒŒ"; "media_type_accessibility_file" = "ăƒ•ă‚Ąă‚€ăƒ«"; "media_type_accessibility_location" = "äœçœźæƒ…ć ±"; "media_type_accessibility_video" = "ć‹•ç”»"; "media_type_accessibility_audio" = "音棰"; "media_type_accessibility_image" = "ç”»ćƒ"; "room_open_dialpad" = "ăƒ€ă‚€ăƒ€ăƒ«ăƒ‘ăƒƒăƒ‰"; -"room_place_voice_call" = "ビデă‚Ș通話"; -"room_accessibility_hangup" = "é€šè©±ă‚’ćˆ‡ă‚‹"; -"room_event_action_delete_confirmation_message" = "こぼæœȘé€äżĄăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć‰Šé™€ă—ăŠă‚‚ă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"room_place_voice_call" = "éŸłćŁ°é€šè©±"; +"room_accessibility_hangup" = "é›»è©±ă‚’ćˆ‡ă‚‹"; +"room_event_action_delete_confirmation_message" = "こぼæœȘé€äżĄăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć‰Šé™€ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; "room_accessibility_video_call" = "ビデă‚Ș通話"; "room_accessibility_call" = "通話"; -"room_accessibility_integrations" = "由搈"; +"room_accessibility_integrations" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłïŒˆç”±ćˆïŒ‰"; "room_accessibility_search" = "æ€œçŽą"; "room_accessibility_upload" = "ă‚ąăƒƒăƒ—ăƒ­ăƒŒăƒ‰"; -"room_message_edits_history_title" = "ăƒĄăƒƒă‚»ăƒŒă‚žă‚’ç·šé›†"; +"room_message_edits_history_title" = "ăƒĄăƒƒă‚»ăƒŒă‚žăźç·šé›†ć±„æ­Ž"; "room_action_reply" = "èż”äżĄ"; -"room_action_send_file" = "ăƒ•ă‚Ąă‚€ăƒ«ă‚’é€ă‚‹"; -"room_action_camera" = "憙真やビデă‚Șăźæ’źćœ±"; -"room_event_action_reaction_history" = "ććżœăźć±„æ­Ž"; +"room_action_send_file" = "ăƒ•ă‚Ąă‚€ăƒ«ă‚’é€äżĄ"; +"room_action_camera" = "ć†™çœŸăŸăŸăŻć‹•ç”»ă‚’æ’źćœ±"; +"room_event_action_reaction_history" = "ăƒȘă‚ąă‚Żă‚·ăƒ§ăƒłăźć±„æ­Ž"; "room_event_action_reaction_show_less" = "èĄšç€șしăȘい"; "room_event_action_reaction_show_all" = "ć…šăŠă‚’èŠ‹ă‚‹"; "room_event_action_edit" = "線集"; "room_event_action_reply" = "èż”äżĄ"; -"device_verification_security_advice_emoji" = "ç””æ–‡ć­—ăźé †ç•Șはもう侀æ–čăźăƒ­ă‚°ă‚€ăƒłăšäž€è‡Žă—ăŸă™ă‹ïŒŸ"; +"device_verification_security_advice_emoji" = "ç””æ–‡ć­—ă‚’æŻ”èŒƒă—ăŠă€ćŒă˜é †ç•Șă§çŸă‚ŒăŠă„ă‚‹ă“ăšă‚’çąșèȘă—ăŠăă ă•ă„ă€‚"; "key_verification_verify_sas_validate_action" = "äž€è‡Žă—ăŠă„ăŸă™"; -"key_verification_verify_sas_cancel_action" = "äž€è‡Žă—ăŸă›ă‚“"; +"key_verification_verify_sas_cancel_action" = "äž€è‡Žă—ăŠă„ăŸă›ă‚“"; // MARK: Verify -"key_verification_verify_sas_title_emoji" = "ç””æ–‡ć­—ăźæŻ”èŒƒ"; +"key_verification_verify_sas_title_emoji" = "ç””æ–‡ć­—ă‚’æŻ”èŒƒ"; "device_verification_self_verify_alert_validate_action" = "èȘèšŒ"; -"device_verification_self_verify_alert_message" = "ăƒ­ă‚°ă‚€ăƒłă‚’èȘèšŒă—ăŠăă ă•ă„ïŒš%@"; +"device_verification_self_verify_alert_message" = "æ–°ă—ă„ăƒ­ă‚°ă‚€ăƒłăŒă‚ăȘăŸăźă‚ąă‚«ă‚Šăƒłăƒˆă«ă‚ąă‚Żă‚»ă‚čă—ăŠă„ăŸă™ă€‚ăƒ­ă‚°ă‚€ăƒłă‚’èȘèšŒă—ăŠăă ă•ă„ïŒš%@"; // MARK: Self verification start // New login -"device_verification_self_verify_alert_title" = "ăƒ­ă‚°ă‚€ăƒłă—ăŸă—ăŸă‹ïŒŸ"; +"device_verification_self_verify_alert_title" = "æ–°ă—ă„ăƒ­ă‚°ă‚€ăƒłă§ă™ă€‚ăƒ­ă‚°ă‚€ăƒłă—ăŸă—ăŸă‹ïŒŸ"; "room_recents_suggested_rooms_section" = "ăŠă™ă™ă‚ăźăƒ«ăƒŒăƒ "; "settings_show_url_previews_description" = "ăƒ—ăƒŹăƒ“ăƒ„ăƒŒăŻæš—ć·ćŒ–ă•ă‚ŒăŠă„ăȘă„ăƒ«ăƒŒăƒ ă§ăźăżèĄšç€șă•ă‚ŒăŸă™ă€‚"; -"settings_show_url_previews" = "ă‚Šă‚§ăƒ–ă‚”ă‚€ăƒˆăƒ—ăƒŹăƒ“ăƒ„ăƒŒă‚’èĄšç€ș"; +"settings_show_url_previews" = "ă‚Šă‚§ăƒ–ă‚”ă‚€ăƒˆăźăƒ—ăƒŹăƒ“ăƒ„ăƒŒă‚’èĄšç€ș"; "biometrics_setup_enable_button_title_x" = "%@ă‚’æœ‰ćŠčにする"; "biometrics_setup_title_x" = "%@ă‚’æœ‰ćŠčにする"; "biometrics_settings_enable_x" = "%@ă‚’æœ‰ćŠčにする"; @@ -1039,12 +1039,12 @@ // MARK: - Biometrics Protection "biometrics_mode_touch_id" = "Touch ID"; -"pin_protection_settings_enable_pin" = "PINă‚’æœ‰ćŠčにする"; -"pin_protection_settings_section_header_with_biometrics" = "PINず%@"; -"pin_protection_settings_section_header" = "PIN"; +"pin_protection_settings_enable_pin" = "PINă‚łăƒŒăƒ‰ă‚’æœ‰ćŠčにする"; +"pin_protection_settings_section_header_with_biometrics" = "PINă‚łăƒŒăƒ‰ăš%@"; +"pin_protection_settings_section_header" = "PINă‚łăƒŒăƒ‰"; "settings_mentions_and_keywords_encryption_notice" = "æșćžŻç«Żæœ«ă§ăŻă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒ«ăƒŒăƒ ă§ăźăƒĄăƒłă‚·ăƒ§ăƒłăšă‚­ăƒŒăƒŻăƒŒăƒ‰ăźé€šçŸ„ăŻć—äżĄă§ăăŸă›ă‚“ă€‚"; "settings_new_keyword" = "ă‚­ăƒŒăƒŻăƒŒăƒ‰ă‚’èżœćŠ "; -"settings_your_keywords" = "ä»„äž‹ă§ă‚­ăƒŒăƒŻăƒŒăƒ‰ă‚’æŒ‡ćźšă§ăăŸă™"; +"settings_your_keywords" = "ă‚­ăƒŒăƒŻăƒŒăƒ‰"; "settings_mentions_and_keywords" = "ăƒĄăƒłă‚·ăƒ§ăƒłăšă‚­ăƒŒăƒŻăƒŒăƒ‰"; "settings_messages_containing_keywords" = "ă‚­ăƒŒăƒŻăƒŒăƒ‰"; "settings_messages_containing_at_room" = "@room"; @@ -1054,7 +1054,7 @@ "settings_group_messages" = "ă‚°ăƒ«ăƒŒăƒ—ăƒĄăƒƒă‚»ăƒŒă‚ž"; "settings_encrypted_direct_messages" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒ€ă‚€ăƒŹă‚ŻăƒˆăƒĄăƒƒă‚»ăƒŒă‚ž"; "settings_direct_messages" = "ăƒ€ă‚€ăƒŹă‚ŻăƒˆăƒĄăƒƒă‚»ăƒŒă‚ž"; -"settings_notify_me_for" = "ä»„äž‹ăŒăƒĄăƒƒă‚»ăƒŒă‚žă«ć«ăŸă‚Œă‚‹ć Žćˆă«é€šçŸ„"; +"settings_notify_me_for" = "ä»„äž‹ăźć Žćˆă«é€šçŸ„"; "settings_phone_contacts" = "ç«Żæœ«ăźé€Łç”Ąć…ˆ"; "settings_notifications" = "通矄"; "settings_links" = "ăƒȘンク"; @@ -1105,13 +1105,13 @@ "secrets_setup_recovery_passphrase_validate_action" = "漌äș†"; "sign_out_non_existing_key_backup_sign_out_confirmation_alert_backup_action" = "バックケップ"; "room_event_action_forward" = "è»ąé€"; -"room_event_action_view_in_room" = "ăƒ«ăƒŒăƒ ă«èĄšç€ș"; +"room_event_action_view_in_room" = "ăƒ«ăƒŒăƒ ć†…ă§èĄšç€ș"; "room_notifs_settings_encrypted_room_notice" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒ«ăƒŒăƒ ă§ăźăƒĄăƒłă‚·ăƒ§ăƒłăšă‚­ăƒŒăƒŻăƒŒăƒ‰ă«ă‚ˆă‚‹é€šçŸ„ăŻă€æșćžŻç«Żæœ«ă§ăŻćˆ©ç”šă§ăăŸă›ă‚“ă€‚"; "room_notifs_settings_mentions_and_keywords" = "ăƒĄăƒłă‚·ăƒ§ăƒłăšă‚­ăƒŒăƒŻăƒŒăƒ‰ăźăż"; "security_settings_secure_backup_info_valid" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻé”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŠă„ăŸă™ă€‚"; "key_backup_setup_intro_setup_action_without_existing_backup" = "é”ăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’äœżç”šé–‹ć§‹"; "space_participants_action_ban" = "こぼă‚čăƒšăƒŒă‚čからブロック"; -"space_participants_action_remove" = "こぼă‚čăƒšăƒŒă‚čから扊陀"; +"space_participants_action_remove" = "こぼă‚čăƒšăƒŒă‚čă‹ă‚‰èżœæ”Ÿ"; "accessibility_button_label" = "ボタン"; "ok" = "OK"; "spaces_empty_space_detail" = "éžć…Źé–‹ă§æ‹›ćŸ…ăŒćż…èŠăȘăƒ«ăƒŒăƒ ăŻèĄšç€șă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; @@ -1126,8 +1126,8 @@ "home_empty_view_title" = "%@まようこそ、\n%@"; "threads_empty_tip" = "ăƒ’ăƒłăƒˆïŒšăƒĄăƒƒă‚»ăƒŒă‚žă‚’ă‚żăƒƒăƒ—ă—ăŠă€Œă‚čăƒŹăƒƒăƒ‰ă€ă‚’éžæŠžă—ă€é–‹ć§‹ă€‚"; -"threads_empty_info_all" = "ă‚čăƒŹăƒƒăƒ‰ă‚’ç”šă„ă‚‹ăšă€äŒšè©±ăźăƒ†ăƒŒăƒžă‚’äżăŁăŸă‚Šă€äŒšè©±ă‚’èżœè·Ąă—ăŸă‚Šă™ă‚‹ăźăŒćźčæ˜“ă«ăȘă‚ŠăŸă™ă€‚"; -"threads_empty_title" = "ă‚čレッドでディă‚čă‚«ăƒƒă‚·ăƒ§ăƒłă‚’æ•Žç†ă—ăŠçźĄç†"; +"threads_empty_info_all" = "ă‚čăƒŹăƒƒăƒ‰æ©Ÿèƒœă‚’äœżă†ăšă€äŒšè©±ăźăƒ†ăƒŒăƒžă‚’ç¶­æŒă—ăŸă‚Šă€äŒšè©±ă‚’ç°Ąć˜ă«èżœè·Ąă—ăŸă‚Šă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"threads_empty_title" = "ă‚čăƒŹăƒƒăƒ‰æ©Ÿèƒœă‚’äœżăŁăŠă€äŒšè©±ă‚’ăŸăšă‚ăŸă—ă‚‡ă†"; "secure_key_backup_setup_intro_use_security_key_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’äœżç”š"; // MARK: Secure backup setup @@ -1135,7 +1135,7 @@ // Intro "secure_key_backup_setup_intro_title" = "ă‚»ă‚­ăƒ„ă‚ąăƒăƒƒă‚Żă‚ąăƒƒăƒ—"; -"spaces_explore_rooms" = "ăƒ«ăƒŒăƒ ă‚’æŽąçŽą"; +"spaces_explore_rooms" = "ăƒ«ăƒŒăƒ ă‚’æŽąă™"; "secure_key_backup_setup_intro_use_security_key_info" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’ç”Ÿæˆă—ăŸă™ă€‚ăƒ‘ă‚čăƒŻăƒŒăƒ‰ăƒžăƒăƒŒă‚žăƒŁăƒŒă‚‚ă—ăăŻé‡‘ćș«ăźă‚ˆă†ăȘ漉慹ăȘć Žæ‰€ă§äżçźĄă—ăŠăă ă•ă„ă€‚"; "secure_key_backup_setup_intro_info" = "ă‚”ăƒŒăƒăƒŒäžŠăźæš—ć·é”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŠă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăšăƒ‡ăƒŒă‚żăžăźă‚ąă‚Żă‚»ă‚čăŒć€±ă‚ă‚Œă‚‹ăźă‚’é˜ČăŽăŸă—ă‚‡ă†ă€‚"; "secure_backup_setup_banner_subtitle" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăšăƒ‡ăƒŒă‚żăžăźă‚ąă‚Żă‚»ă‚čăŒć€±ă‚ă‚Œă‚‹ăźă‚’é˜ČăŽăŸă—ă‚‡ă†"; @@ -1146,11 +1146,11 @@ "matrix" = "Matrix"; // Login Screen -"login_create_account" = "ă‚ąă‚«ă‚Šăƒłăƒˆäœœæˆ:"; +"login_create_account" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’äœœæˆïŒš"; "login_server_url_placeholder" = "URL (䟋 https://matrix.org)"; -"login_home_server_title" = "æŽ„ç¶šć…ˆă‚”ăƒŒăƒăƒŒURL:"; -"login_home_server_info" = "あăȘăŸăźæŽ„ç¶šć…ˆă‚”ăƒŒăƒăƒŒăŻă€ă‚ăȘăŸăźć…šăŠăźäŒšè©±ăšă‚ąă‚«ă‚Šăƒłăƒˆæƒ…ć ±ă‚’äżć­˜ă—ăŸă™"; -"login_identity_server_title" = "èȘèšŒă‚”ăƒŒăƒăƒŒURL:"; +"login_home_server_title" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăźURL"; +"login_home_server_info" = "あăȘăŸăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻă€ă‚ăȘăŸăźć…šăŠăźäŒšè©±ăšă‚ąă‚«ă‚Šăƒłăƒˆæƒ…ć ±ă‚’äżć­˜ă—ăŸă™"; +"login_identity_server_title" = "IDă‚”ăƒŒăƒăƒŒăźURL"; "login_password_placeholder" = "パă‚čăƒŻăƒŒăƒ‰"; "login_email_placeholder" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚č"; // Action @@ -1160,40 +1160,40 @@ "resend_message" = "ăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć†é€äżĄ"; "select_all" = "ć…šăŠéžæŠž"; "show_details" = "è©łçŽ°ă‚’èĄšç€ș"; -"login_identity_server_info" = "MatrixăŻă€ă©ăźé›»ć­ăƒĄăƒŒăƒ«ăȘă©ăŒă©ăźMatrix IDă«ć±žă—ăŠă„ă‚‹ă‹ă‚’èżœè·Ąă™ă‚‹ă‚ąă‚€ăƒ‡ăƒłăƒ†ă‚Łăƒ†ă‚Łă‚”ăƒŒăƒăƒŒă‚’æäŸ›ă—ăŸă™ă€‚ çŸćœš https://matrix.org ăźăżăŒć­˜ćœšă—ăŸă™ă€‚"; +"login_identity_server_info" = "MatrixăŻă€é›»ć­ăƒĄăƒŒăƒ«ăȘどからMatrix IDă‚’æ€œçŽąă™ă‚‹IDă‚”ăƒŒăƒăƒŒă‚’æäŸ›ă—ăŸă™ă€‚çŸćœšăŻ https://matrix.org ăźăżăŒć­˜ćœšă—ăŸă™ă€‚"; "login_user_id_placeholder" = "Matrix ID䟋 @bob:matrix.org ăŸăŸăŻ bob"; -"login_optional_field" = "ă‚Șăƒ—ă‚·ăƒ§ăƒł"; -"login_display_name_placeholder" = "èĄšç€ș損 (䟋 Bob Obson)"; -"login_email_info" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’æŒ‡ćźšă™ă‚‹ăšă€ä»–ăźăƒŠăƒŒă‚¶ăƒŒăŒă‚ăȘたをMatrixă§ç°Ąć˜ă«èŠ‹ă€ă‘ă‚‹ă“ăšăŒă§ăă€ä»ŠćŸŒăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ăƒȘă‚»ăƒƒăƒˆă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; -"login_prompt_email_token" = "ăƒĄăƒŒăƒ«ăźèȘèšŒăƒˆăƒŒă‚Żăƒłă‚’ć…„抛しどください:"; +"login_optional_field" = "任意"; +"login_display_name_placeholder" = "èĄšç€șćïŒˆäŸ‹ Bob Obson"; +"login_email_info" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’æŒ‡ćźšă™ă‚‹ăšă€ä»–ăźăƒŠăƒŒă‚¶ăƒŒăŒă‚ăȘたをMatrixă§ă‚ˆă‚Šç°Ąć˜ă«èŠ‹ă€ă‘ă‚‰ă‚ŒăŸă™ă€‚ăŸăŸă€é›»ć­ăƒĄăƒŒăƒ«ă§ăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ăƒȘă‚»ăƒƒăƒˆă™ă‚‹ă“ăšă‚‚ćŻèƒœăšăȘă‚ŠăŸă™ă€‚"; +"login_prompt_email_token" = "é›»ć­ăƒĄăƒŒăƒ«ăźèȘèšŒăƒˆăƒŒă‚Żăƒłă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ïŒš"; "login_error_title" = "ăƒ­ă‚°ă‚€ăƒłă«ć€±æ•—ă—ăŸă—ăŸ"; "login_error_no_login_flow" = "ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒă‹ă‚‰èȘèšŒæƒ…ć ±ă‚’ć–ćŸ—ă§ăăŸă›ă‚“ă§ă—ăŸ"; "login_error_do_not_support_login_flows" = "çŸćœšă€ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒă«ă‚ˆăŁăŠćźšçŸ©ă•ă‚ŒăŸăƒ­ă‚°ă‚€ăƒłăƒ•ăƒ­ăƒŒăźäž€éƒšăŸăŸăŻć…šăŠă‚’ă‚”ăƒăƒŒăƒˆă—ăŠă„ăŸă›ă‚“"; "login_error_registration_is_not_supported" = "登éŒČăŻçŸćœšă‚”ăƒăƒŒăƒˆă•ă‚ŒăŠă„ăŸă›ă‚“"; -"login_error_forbidden" = "無ćŠčăȘăƒŠăƒŒă‚¶ăƒŒć/パă‚čăƒŻăƒŒăƒ‰"; +"login_error_forbidden" = "ăƒŠăƒŒă‚¶ăƒŒćă‹ăƒ‘ă‚čăƒŻăƒŒăƒ‰ăŒæ­Łă—ăă‚ă‚ŠăŸă›ă‚“"; "login_error_unknown_token" = "æŒ‡ćźšă•ă‚ŒăŸă‚ąă‚Żă‚»ă‚čăƒˆăƒŒă‚ŻăƒłăŒèȘè­˜ă•ă‚ŒăŸă›ă‚“ă§ă—ăŸ"; "login_error_bad_json" = "äžæ­ŁăȘćœąćŒăźJSON"; "login_error_not_json" = "有ćŠčăȘJSONă‚’ć«ă‚“ă§ă„ăŸă›ă‚“ă§ă—ăŸ"; -"login_error_limit_exceeded" = "ă‚ăŸă‚Šă«ă‚‚ć€šăăźăƒȘクスă‚čăƒˆăŒé€ă‚‰ă‚ŒăŸă—ăŸ"; +"login_error_limit_exceeded" = "ăƒ­ă‚°ă‚€ăƒłèŠæ±‚ăŒć€šă™ăŽăŸă™"; "login_error_user_in_use" = "ă“ăźăƒŠăƒŒă‚¶ăƒŒćăŻæ—ąă«äœżç”šă•ă‚ŒăŠă„ăŸă™"; -"login_error_login_email_not_yet" = "ăŸă ă‚ŻăƒȘックされどいăȘă„ăƒĄăƒŒăƒ«ăƒȘンク"; -"login_use_fallback" = "ăƒ•ă‚©ăƒŒăƒ«ăƒăƒƒă‚ŻăƒšăƒŒă‚žă‚’äœżç”š"; +"login_error_login_email_not_yet" = "ăŸă ă‚ŻăƒȘックされどいăȘă„é›»ć­ăƒĄăƒŒăƒ«ăźăƒȘンク"; +"login_use_fallback" = "ăƒ•ă‚©ăƒŒăƒ«ăƒăƒƒă‚Żç”šăźăƒšăƒŒă‚žă‚’äœżç”š"; "login_leave_fallback" = "ă‚­ăƒŁăƒłă‚»ăƒ«"; "login_invalid_param" = "無ćŠčăȘăƒ‘ăƒ©ăƒĄăƒŒă‚żăƒŒ"; "register_error_title" = "登éŒČă«ć€±æ•—ă—ăŸă—ăŸ"; -"login_error_forgot_password_is_not_supported" = "Forgot passwordăŻçŸćœšă‚”ăƒăƒŒăƒˆă•ă‚ŒăŠă„ăŸă›ă‚“"; -"login_mobile_device" = "æș枯"; +"login_error_forgot_password_is_not_supported" = "「パă‚čăƒŻăƒŒăƒ‰ă‚’ćż˜ă‚ŒăŸć Žćˆă€ăŻçŸćœšă‚”ăƒăƒŒăƒˆă•ă‚ŒăŠă„ăŸă›ă‚“"; +"login_mobile_device" = "æșćžŻç«Żæœ«"; "login_tablet_device" = "タブレット"; "login_desktop_device" = "デă‚čクトップ"; "login_error_resource_limit_exceeded_title" = "ăƒȘă‚œăƒŒă‚čćˆ¶é™ă‚’è¶…ăˆăŸă—ăŸ"; -"login_error_resource_limit_exceeded_message_default" = "ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻă€ăƒȘă‚œăƒŒă‚čćˆ¶é™ăź1ă€ă‚’è¶…ăˆăŠă„ăŸă™ă€‚"; -"login_error_resource_limit_exceeded_message_monthly_active_user" = "ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻă€æœˆé–“ă‚ąă‚Żăƒ†ă‚Łăƒ–ăƒŠăƒŒă‚¶ăƒŒćˆ¶é™ă‚’è¶…ăˆăŠă„ăŸă™ă€‚"; +"login_error_resource_limit_exceeded_message_default" = "ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻăƒȘă‚œăƒŒă‚čăźäžŠé™ă«é”ă—ăŸă—ăŸă€‚"; +"login_error_resource_limit_exceeded_message_monthly_active_user" = "ă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻæœˆé–“ă‚ąă‚Żăƒ†ă‚Łăƒ–ăƒŠăƒŒă‚¶ăƒŒæ•°ăźäžŠé™ă«é”ă—ăŸă—ăŸ 。"; "login_error_resource_limit_exceeded_message_contact" = "\n\nă“ăźă‚”ăƒŒăƒ“ă‚čă‚’ç¶šèĄŒă™ă‚‹ă«ăŻă€ă‚”ăƒŒăƒ“ă‚čçźĄç†è€…ă«é€Łç”Ąă—ăŠăă ă•ă„ă€‚"; "login_error_resource_limit_exceeded_contact_button" = "çźĄç†è€…ă«é€Łç”Ą"; "abort" = "äž­æ–­"; "discard" = "ç ŽæŁ„"; "dismiss" = "据例"; -"submit" = "提ć‡ș"; +"submit" = "送信"; "submit_code" = "ă‚łăƒŒăƒ‰ă‚’é€äżĄ"; "set_default_power_level" = "æš©é™ăƒŹăƒ™ăƒ«ă‚’ăƒȘă‚»ăƒƒăƒˆ"; "set_moderator" = "ăƒąăƒ‡ăƒŹăƒŒă‚żăƒŒă‚’èš­ćźš"; @@ -1203,31 +1203,31 @@ "start_video_call" = "ビデă‚Șé€šè©±ă‚’é–‹ć§‹"; "mention" = "ăƒĄăƒłă‚·ăƒ§ăƒł"; "select_account" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’éžæŠž"; -"attach_media" = "ăƒ©ă‚€ăƒ–ăƒ©ăƒȘă‹ă‚‰ăƒĄăƒ‡ă‚Łă‚ąă‚’æ·»ä»˜"; -"capture_media" = "憙真/ビデă‚Șă‚’æ’źă‚‹"; +"attach_media" = "ăƒ©ă‚€ăƒ–ăƒ©ăƒȘăƒŒă‹ă‚‰ăƒĄăƒ‡ă‚Łă‚ąă‚’æ·»ä»˜"; +"capture_media" = "憙真/ć‹•ç”»ă‚’æ’źă‚‹"; "invite_user" = "MatrixăƒŠăƒŒă‚¶ăƒŒă‚’æ‹›ćŸ…"; -"reset_to_default" = "ăƒ‡ăƒ•ă‚©ăƒ«ăƒˆă«ăƒȘă‚»ăƒƒăƒˆ"; +"reset_to_default" = "æ—ąćźšă«ăƒȘă‚»ăƒƒăƒˆ"; "cancel_upload" = "ă‚ąăƒƒăƒ—ăƒ­ăƒŒăƒ‰ă‚’ă‚­ăƒŁăƒłă‚»ăƒ«"; "cancel_download" = "ăƒ€ă‚Šăƒłăƒ­ăƒŒăƒ‰ă‚’ă‚­ăƒŁăƒłă‚»ăƒ«"; "answer_call" = "é€šè©±ă«ćżœç­”"; "reject_call" = "é€šè©±ă‚’æ‹’ćŠ"; -"end_call" = "通話甂äș†"; +"end_call" = "é€šè©±ă‚’ç”‚äș†"; "ignore" = "ç„ĄèŠ–"; // Events formatter "notice_avatar_changed_too" = "ïŒˆă‚ąăƒă‚żăƒŒă‚‚ć€‰æ›Žă•ă‚ŒăŸă—ăŸïŒ‰"; "notice_room_name_removed" = "%@ăŒăƒ«ăƒŒăƒ ćă‚’ć‰Šé™€ă—ăŸă—ăŸ"; "notice_room_topic_removed" = "%@ăŒăƒˆăƒ”ăƒƒă‚Żă‚’ć‰Šé™€ă—ăŸă—ăŸ"; -"notice_event_redacted" = "<ç·šé›†ă•ă‚ŒăŸ%@>"; +"notice_event_redacted" = "<%@ăŒç·šé›†ă•ă‚ŒăŸă—ăŸ>"; "notice_event_redacted_by" = " %@ă«ă‚ˆă‚Š"; "notice_event_redacted_reason" = " [理由: %@]"; -"notice_profile_change_redacted" = "%@ăŒćœŒă‚‰ăźăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ« %@ă‚’æ›Žæ–°ă—ăŸă—ăŸ"; -"notice_room_created" = "%@ăŒăƒ«ăƒŒăƒ ă‚’äœœæˆă—ăŸă—ăŸ"; -"notice_room_join_rule" = "ç”ćˆăƒ«ăƒŒăƒ«ăŻæŹĄăźăšăŠă‚Š: %@"; -"notice_room_power_level_intro" = "ăƒ«ăƒŒăƒ ăƒĄăƒłăƒăƒŒăźæš©é™ăƒŹăƒ™ăƒ«:"; -"notice_room_power_level_acting_requirement" = "ă‚ąă‚Żă‚·ăƒ§ăƒłć‰ă«ăƒŠăƒŒă‚¶ăƒŒăźćż…èŠăȘæœ€ć°æš©é™ăƒŹăƒ™ăƒ«:"; -"notice_room_power_level_event_requirement" = "ă‚€ăƒ™ăƒłăƒˆă«é–ąé€Łă™ă‚‹æœ€ć°æš©é™ăƒŹăƒ™ăƒ«:"; -"notice_room_aliases" = "ăƒ«ăƒŒăƒ ă‚šă‚€ăƒȘケă‚č: %@"; -"notice_room_related_groups" = "ă“ăźăƒ«ăƒŒăƒ ă«é–ąé€Łä»˜ă‘ă‚‰ă‚ŒăŸă‚°ăƒ«ăƒŒăƒ—: %@"; +"notice_profile_change_redacted" = "%@ăŒăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«%@ă‚’æ›Žæ–°ă—ăŸă—ăŸ"; +"notice_room_created" = "%@ăŒăƒ«ăƒŒăƒ ă‚’äœœæˆă—èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_join_rule" = "ć‚ćŠ ăƒ«ăƒŒăƒ«ïŒš%@"; +"notice_room_power_level_intro" = "ăƒ«ăƒŒăƒ ăƒĄăƒłăƒăƒŒăźæš©é™ăƒŹăƒ™ăƒ«ïŒš"; +"notice_room_power_level_acting_requirement" = "ă‚ąă‚Żă‚·ăƒ§ăƒłă«ćż…èŠăȘăƒŠăƒŒă‚¶ăƒŒăźæœ€ć°æš©é™ăƒŹăƒ™ăƒ«ïŒš"; +"notice_room_power_level_event_requirement" = "ă‚€ăƒ™ăƒłăƒˆă«é–ąé€Łă™ă‚‹æœ€ć°æš©é™ăƒŹăƒ™ăƒ«ïŒš"; +"notice_room_aliases" = "ăƒ«ăƒŒăƒ ăźă‚šă‚€ăƒȘケă‚č%@"; +"notice_room_related_groups" = "ă“ăźăƒ«ăƒŒăƒ ă«é–ąé€Łä»˜ă‘ă‚‰ă‚ŒăŸă‚°ăƒ«ăƒŒăƒ—ïŒš%@"; "notice_encrypted_message" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚ž"; "notice_image_attachment" = "ç”»ćƒæ·»ä»˜"; "notice_audio_attachment" = "éŸłćŁ°æ·»ä»˜"; @@ -1235,17 +1235,17 @@ "notice_location_attachment" = "äœçœźæƒ…ć ±æ·»ä»˜"; "notice_file_attachment" = "ăƒ•ă‚Ąă‚€ăƒ«æ·»ä»˜"; "notice_invalid_attachment" = "無ćŠčăȘ添付"; -"notice_unsupported_attachment" = "ă‚”ăƒăƒŒăƒˆă•ă‚ŒăŠă„ăȘă„æ·»ä»˜: %@"; -"notice_feedback" = "ăƒ•ă‚ŁăƒŒăƒ‰ăƒăƒƒă‚Żă‚€ăƒ™ăƒłăƒˆ (id: %@): %@"; -"notice_redaction" = "%@ăŻă‚€ăƒ™ăƒłăƒˆă‚’ç·šé›†ă—ăŸă—ăŸ (id: %@)"; +"notice_unsupported_attachment" = "ă‚”ăƒăƒŒăƒˆă•ă‚ŒăŠă„ăȘă„æ·»ä»˜ăƒ•ă‚Ąă‚€ăƒ«ïŒš%@"; +"notice_feedback" = "ăƒ•ă‚ŁăƒŒăƒ‰ăƒăƒƒă‚Żă‚€ăƒ™ăƒłăƒˆïŒˆid%@%@"; +"notice_redaction" = "%@ăŻă‚€ăƒ™ăƒłăƒˆă‚’ç·šé›†ă—ăŸă—ăŸïŒˆid%@"; "notice_error_unsupported_event" = "ă‚”ăƒăƒŒăƒˆă•ă‚ŒăŠă„ăȘă„ă‚€ăƒ™ăƒłăƒˆ"; "notice_error_unexpected_event" = "äșˆæœŸă—ăȘă„ă‚€ăƒ™ăƒłăƒˆ"; -"notice_error_unknown_event_type" = "䞍明ăȘă‚€ăƒ™ăƒłăƒˆă‚żă‚€ăƒ—"; -"notice_room_history_visible_to_anyone" = "%@ăŒä»ŠćŸŒăźăƒ«ăƒŒăƒ ć±„æ­Žă‚’ă€ŒèȘ°ă§ă‚‚ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; -"notice_room_history_visible_to_members" = "%@ăŒä»ŠćŸŒăźăƒ«ăƒŒăƒ ć±„æ­Žă‚’ă€ŒăƒĄăƒłăƒăƒŒăźăżă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; -"notice_room_history_visible_to_members_from_invited_point" = "%@ăŒä»ŠćŸŒăźăƒ«ăƒŒăƒ ć±„æ­Žă‚’ă€ŒăƒĄăƒłăƒăƒŒăźăż ïŒˆæ‹›ćŸ…ă•ă‚ŒăŸæ™‚ç‚čä»„é™ïŒ‰ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; -"notice_room_history_visible_to_members_from_joined_point" = "%@ăŒä»ŠćŸŒăźăƒ«ăƒŒăƒ ć±„æ­Žă‚’ă€ŒăƒĄăƒłăƒăƒŒăźăż ïŒˆć‚ćŠ ă—ăŸæ™‚ç‚čä»„é™ïŒ‰ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; -"notice_crypto_unable_to_decrypt" = "** ćŸ©ć·ćŒ–ă§ăăŸă›ă‚“: %@ **"; +"notice_error_unknown_event_type" = "ă‚€ăƒ™ăƒłăƒˆăźçšźéĄžăŒäžæ˜Žă§ă™"; +"notice_room_history_visible_to_anyone" = "%@ăŒä»ŠćŸŒăźăƒ«ăƒŒăƒ ăźć±„æ­Žă‚’ă€ŒèȘ°ă§ă‚‚ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_history_visible_to_members" = "%@ăŒä»ŠćŸŒăźăƒ«ăƒŒăƒ ăźć±„æ­Žă‚’ă€ŒăƒĄăƒłăƒăƒŒăźăżă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_history_visible_to_members_from_invited_point" = "%@ăŒä»ŠćŸŒăźăƒ«ăƒŒăƒ ăźć±„æ­Žă‚’ă€ŒăƒĄăƒłăƒăƒŒăźăż ïŒˆæ‹›ćŸ…ă•ă‚ŒăŸæ™‚ç‚čä»„é™ïŒ‰ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_history_visible_to_members_from_joined_point" = "%@ăŒä»ŠćŸŒăźăƒ«ăƒŒăƒ ăźć±„æ­Žă‚’ă€ŒăƒĄăƒłăƒăƒŒăźăż ïŒˆć‚ćŠ ă—ăŸæ™‚ç‚čä»„é™ïŒ‰ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_crypto_unable_to_decrypt" = "** ćŸ©ć·ćŒ–ă§ăăŸă›ă‚“ïŒš%@ **"; "notice_crypto_error_unknown_inbound_session_id" = "é€äżĄè€…ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‹ă‚‰ă“ăźăƒĄăƒƒă‚»ăƒŒă‚žç”šăźé”ăŒé€äżĄă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; "notice_sticker" = "ă‚čăƒ†ăƒƒă‚«ăƒŒ"; "notice_in_reply_to" = "èż”äżĄć…ˆ"; @@ -1255,15 +1255,15 @@ "settings" = "èš­ćźš"; "settings_enable_inapp_notifications" = "ケプăƒȘć†…é€šçŸ„ă‚’æœ‰ćŠčにする"; "settings_enable_push_notifications" = "ăƒ—ăƒƒă‚·ăƒ„é€šçŸ„ă‚’æœ‰ćŠčにする"; -"settings_enter_validation_token_for" = "%@たèȘèšŒăƒˆăƒŒă‚Żăƒłă‚’ć…„抛:"; -"notification_settings_room_rule_title" = "ăƒ«ăƒŒăƒ : '%@'"; +"settings_enter_validation_token_for" = "%@たèȘèšŒăƒˆăƒŒă‚Żăƒłă‚’ć…„ćŠ›ïŒš"; +"notification_settings_room_rule_title" = "ăƒ«ăƒŒăƒ ïŒš'%@'"; // Devices -"device_details_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłæƒ…ć ±\n"; -"device_details_name" = "損才\n"; +"device_details_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłăźæƒ…ć ±\n"; +"device_details_name" = "ć…Źé–‹ç«Żæœ«ć\n"; "device_details_identifier" = "ID\n"; -"device_details_last_seen" = "最甂掄続旄\n"; +"device_details_last_seen" = "ç›Žèż‘ăźă‚Șăƒłăƒ©ă‚€ăƒłæ—„æ™‚\n"; "device_details_last_seen_format" = "%@ @ %@\n"; -"device_details_rename_prompt_message" = "ă‚»ăƒƒă‚·ăƒ§ăƒłăźć…Źé–‹ćăŻă€ă‚ăȘたべやり揖りするäșșă€…ă«ćŻŸă—ăŠèĄšç€șă•ă‚ŒăŸă™"; +"device_details_rename_prompt_message" = "ă‚»ăƒƒă‚·ăƒ§ăƒłăźć…Źé–‹ćăŻă€ă‚ăȘăŸăšă‚„ă‚Šć–ă‚Šă™ă‚‹é€Łç”Ąć…ˆă«ćŻŸă—ăŠèĄšç€șă•ă‚ŒăŸă™"; "device_details_delete_prompt_title" = "èȘèšŒ"; "device_details_delete_prompt_message" = "ă“ăźæ“äœœă«ăŻă€èżœćŠ ăźèȘèšŒăŒćż…èŠă§ă™ă€‚\nç¶šèĄŒă™ă‚‹ă«ăŻă€ăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚"; // Encryption information @@ -1277,47 +1277,47 @@ "room_event_encryption_info_event_decryption_error" = "ćŸ©ć·ćŒ–ă‚šăƒ©ăƒŒ\n"; "room_event_encryption_info_event_unencrypted" = "æš—ć·ćŒ–ă•ă‚ŒăŠă„ăŸă›ă‚“"; "room_event_encryption_info_event_none" = "ăȘし"; -"room_event_encryption_info_device" = "\né€äżĄè€…ă‚»ăƒƒă‚·ăƒ§ăƒłæƒ…ć ±\n"; -"room_event_encryption_info_device_unknown" = "æœȘçŸ„ăźă‚»ăƒƒă‚·ăƒ§ăƒł\n"; -"room_event_encryption_info_device_name" = "損才\n"; +"room_event_encryption_info_device" = "\né€äżĄè€…ăźă‚»ăƒƒă‚·ăƒ§ăƒłăźæƒ…ć ±\n"; +"room_event_encryption_info_device_unknown" = "䞍明ăȘă‚»ăƒƒă‚·ăƒ§ăƒł\n"; +"room_event_encryption_info_device_name" = "ć…Źé–‹ç«Żæœ«ć\n"; "room_event_encryption_info_device_id" = "ID\n"; "room_event_encryption_info_device_verification" = "èȘèšŒ\n"; -"room_event_encryption_info_device_fingerprint" = "Ed25519 fingerprint\n"; -"room_event_encryption_info_device_verified" = "æ€œèšŒæžˆăż"; -"room_event_encryption_info_device_not_verified" = "èȘèšŒă•ă‚ŒăŠă„ăȘい"; -"room_event_encryption_info_device_blocked" = "ăƒ–ăƒ©ăƒƒă‚ŻăƒȘă‚čăƒˆă«èŒ‰ă›ăŸ"; -"room_event_encryption_info_verify" = "èȘèšŒă—ăŠă„ăŸă™â€Š"; -"room_event_encryption_info_unverify" = "æœȘèȘèšŒ"; -"room_event_encryption_info_block" = "ăƒ–ăƒ©ăƒƒă‚ŻăƒȘă‚čト"; -"room_event_encryption_info_unblock" = "ăƒ–ăƒ©ăƒƒă‚Żă§ăȘいăƒȘă‚čト"; -"room_event_encryption_verify_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłèȘèšŒ\n\n"; -"room_event_encryption_verify_message" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŒäżĄé Œă§ăă‚‹ă“ăšă‚’çąșèȘă™ă‚‹ă«ăŻă€ä»–たæ–čæł•ïŒˆćŻŸéąă‚„é›»è©±ăȘă©ïŒ‰ă§æ‰€æœ‰è€…ă«é€Łç”Ąă—ă€ă‚»ăƒƒă‚·ăƒ§ăƒłăźăƒŠăƒŒă‚¶ăƒŒèš­ćźšă§èĄšç€șă•ă‚Œă‚‹é”ăŒä»„äž‹ăźé”ăšäž€è‡Žă™ă‚‹ă‹ă©ă†ă‹ă‚’èšȘねどください。\n\nă‚»ăƒƒă‚·ăƒ§ăƒłć: %@\nă‚»ăƒƒă‚·ăƒ§ăƒłID: %@\nă‚»ăƒƒă‚·ăƒ§ăƒłă‚­ăƒŒ: %@\n\näž€è‡Žă™ă‚‹ć ŽćˆăŻă€äž‹ăźçąșèȘăƒœă‚żăƒłă‚’æŠŒă—ăŸă™ă€‚ ăă‚Œä»„ć€–ăźäșșăŒă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’ć‚ć—ă—ăŠă„ă‚‹ć ŽćˆăŻă€ä»Łă‚ă‚Šă«ăƒ–ăƒ©ăƒƒă‚ŻăƒȘă‚čăƒˆăƒœă‚żăƒłă‚’æŠŒă—ăŠăă ă•ă„ă€‚\n\nć°†æ„ă“ăźèȘèšŒăƒ—ăƒ­ă‚»ă‚čăŻă‚ˆă‚ŠæŽ—ç·Žă•ă‚ŒăŸă‚‚ăźă«ăȘă‚ŠăŸă™ă€‚"; +"room_event_encryption_info_device_fingerprint" = "Ed25519 ăƒ•ă‚Łăƒłă‚ŹăƒŒăƒ—ăƒȘント\n"; +"room_event_encryption_info_device_verified" = "èȘèšŒæžˆ"; +"room_event_encryption_info_device_not_verified" = "èȘèšŒă•ă‚ŒăŠă„ăŸă›ă‚“"; +"room_event_encryption_info_device_blocked" = "ăƒ–ăƒ©ăƒƒă‚ŻăƒȘă‚čăƒˆă«èżœćŠ æžˆ"; +"room_event_encryption_info_verify" = "èȘèšŒâ€Š"; +"room_event_encryption_info_unverify" = "èȘèšŒă‚’ć–ă‚Šæ¶ˆă™"; +"room_event_encryption_info_block" = "ăƒ–ăƒ©ăƒƒă‚ŻăƒȘă‚čăƒˆă«èżœćŠ "; +"room_event_encryption_info_unblock" = "ăƒ–ăƒ©ăƒƒă‚ŻăƒȘă‚čăƒˆă‹ă‚‰é™€ć€–"; +"room_event_encryption_verify_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒ\n\n"; +"room_event_encryption_verify_message" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŒäżĄé Œă§ăă‚‹ă“ăšă‚’çąșèȘă™ă‚‹ă«ăŻă€ä»–たæ–čæł•ïŒˆćŻŸéąă‚„é›»è©±ăȘă©ïŒ‰ă§æ‰€æœ‰è€…ă«é€Łç”Ąă—ă€ă‚»ăƒƒă‚·ăƒ§ăƒłăźăƒŠăƒŒă‚¶ăƒŒèš­ćźšă§èĄšç€șă•ă‚Œă‚‹é”ăŒä»„äž‹ăźé”ăšäž€è‡Žă™ă‚‹ă‹ă©ă†ă‹ă‚’èšȘねどください。\n\nă‚»ăƒƒă‚·ăƒ§ăƒłćïŒš%@\nă‚»ăƒƒă‚·ăƒ§ăƒłID%@\nă‚»ăƒƒă‚·ăƒ§ăƒłă‚­ăƒŒïŒš%@\n\näž€è‡Žă™ă‚‹ć ŽćˆăŻă€äž‹ăźçąșèȘăƒœă‚żăƒłă‚’æŠŒă—ăŸă™ă€‚ ăă‚Œä»„ć€–ăźäșșăŒă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’ć‚ć—ă—ăŠă„ă‚‹ć ŽćˆăŻă€ä»Łă‚ă‚Šă«ăƒ–ăƒ©ăƒƒă‚ŻăƒȘă‚čăƒˆăƒœă‚żăƒłă‚’æŠŒă—ăŠăă ă•ă„ă€‚\n\nć°†æ„ă“ăźèȘèšŒăƒ—ăƒ­ă‚»ă‚čăŻă‚ˆă‚ŠæŽ—ç·Žă•ă‚ŒăŸă‚‚ăźă«ăȘă‚ŠăŸă™ă€‚"; "room_event_encryption_verify_ok" = "èȘèšŒ"; // Account "account_save_changes" = "ć€‰æ›Žă‚’äżć­˜"; -"account_link_email" = "ăƒȘăƒłă‚ŻăƒĄăƒŒăƒ«"; -"account_linked_emails" = "ăƒȘăƒłă‚Żă•ă‚ŒăŸăƒĄăƒŒăƒ«"; +"account_link_email" = "é›»ć­ăƒĄăƒŒăƒ«ă‚’ăƒȘンク"; +"account_linked_emails" = "ăƒȘăƒłă‚Żă—ăŸé›»ć­ăƒĄăƒŒăƒ«"; "account_email_validation_title" = "èȘèšŒăźäżç•™äž­"; -"account_email_validation_message" = "é›»ć­ăƒĄăƒŒăƒ«ă‚’çąșèȘă—ăŠă€æœŹæ–‡äž­ăźURLをクăƒȘックしどください。漌äș†ă—ăŸă‚‰ă€Œç¶šèĄŒă™ă‚‹ă€ă‚’ă‚ŻăƒȘックしどください。"; -"account_email_validation_error" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čをèȘèšŒă§ăăŸă›ă‚“ă€‚ăƒĄăƒŒăƒ«ă‚’çąșèȘă—ăŠă€èš˜èŒ‰ă•ă‚ŒăŠă„ă‚‹ăƒȘンクをクăƒȘăƒƒă‚Żă—ăŠăă ă•ă„ă€‚ăăźćŸŒă€ă€Œç¶šèĄŒă™ă‚‹ă€ă‚’ă‚ŻăƒȘックしどください"; +"account_email_validation_message" = "é›»ć­ăƒĄăƒŒăƒ«ă‚’çąșèȘă—ăŠă€æœŹæ–‡äž­ăźURLをクăƒȘックしどください。漌äș†ă—ăŸă‚‰ă€Œç¶šèĄŒă€ă‚’ă‚ŻăƒȘックしどください。"; +"account_email_validation_error" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čをèȘèšŒă§ăăŸă›ă‚“ă€‚ăƒĄăƒŒăƒ«ă‚’çąșèȘă—ăŠă€èš˜èŒ‰ă•ă‚ŒăŠă„ă‚‹ăƒȘンクをクăƒȘックしどください。漌äș†ă—ăŸă‚‰ă€Œç¶šèĄŒă™ă‚‹ă€ă‚’ă‚ŻăƒȘックしどください"; "account_msisdn_validation_title" = "èȘèšŒăźäżç•™äž­"; "account_msisdn_validation_message" = "SMSでèȘèšŒç•Șć·ă‚’é€ă‚ŠăŸă—ăŸă€‚ä»„äž‹ă«ăăźç•Șć·ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚"; -"account_msisdn_validation_error" = "電話ç•Șć·ă‚’çąșèȘă§ăăŸă›ă‚“。"; +"account_msisdn_validation_error" = "電話ç•Șć·ă‚’èȘèšŒă§ăăŸă›ă‚“。"; "account_error_display_name_change_failed" = "èĄšç€șćăźć€‰æ›Žă«ć€±æ•—ă—ăŸă—ăŸ"; "account_error_picture_change_failed" = "ç”»ćƒăźć€‰æ›Žă«ć€±æ•—ă—ăŸă—ăŸ"; "account_error_matrix_session_is_not_opened" = "Matrixă‚»ăƒƒă‚·ăƒ§ăƒłăŒé–‹ă‹ă‚ŒăŠă„ăŸă›ă‚“"; -"account_error_email_wrong_title" = "無ćŠčăȘé›»ć­ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚č"; +"account_error_email_wrong_title" = "無ćŠčăȘăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚č"; "account_error_email_wrong_description" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăźćœąćŒăŒæ­Łă—ăă‚ă‚ŠăŸă›ă‚“"; "account_error_msisdn_wrong_title" = "無ćŠčăȘ電話ç•Șć·"; "account_error_msisdn_wrong_description" = "電話ç•Șć·ăźćœąćŒăŒæ­Łă—ăă‚ă‚ŠăŸă›ă‚“"; // Room creation -"room_creation_name_title" = "ăƒ«ăƒŒăƒ ć:"; -"room_creation_name_placeholder" = "(䟋 ăƒ©ăƒłăƒă‚°ăƒ«ăƒŒăƒ—)"; -"room_creation_alias_title" = "ăƒ«ăƒŒăƒ ăźćˆ„ć:"; -"room_creation_alias_placeholder" = "(䟋 #foo:example.org)"; -"room_creation_alias_placeholder_with_homeserver" = "(䟋 #foo%@)"; -"room_creation_participants_title" = "ć‚ćŠ è€…:"; -"room_creation_participants_placeholder" = "(䟋 @bob:homeserver1; @john:homeserver2
)"; +"room_creation_name_title" = "ăƒ«ăƒŒăƒ ćïŒš"; +"room_creation_name_placeholder" = "䟋 ăƒ©ăƒłăƒă‚°ăƒ«ăƒŒăƒ—ïŒ‰"; +"room_creation_alias_title" = "ăƒ«ăƒŒăƒ ăźćˆ„ćïŒš"; +"room_creation_alias_placeholder" = "䟋 #foo:example.org"; +"room_creation_alias_placeholder_with_homeserver" = "䟋 #foo%@"; +"room_creation_participants_title" = "ć‚ćŠ è€…ïŒš"; +"room_creation_participants_placeholder" = "䟋 @bob:homeserver1; @john:homeserver2 "; // Room "room_please_select" = "ăƒ«ăƒŒăƒ ă‚’éžæŠžă—ăŠăă ă•ă„"; "room_error_join_failed_title" = "ăƒ«ăƒŒăƒ ă«ć‚ćŠ ă§ăăŸă›ă‚“ă§ă—ăŸ"; @@ -1326,34 +1326,34 @@ "room_error_topic_edition_not_authorized" = "ă“ăźăƒ«ăƒŒăƒ ăźăƒˆăƒ”ăƒƒă‚Żă‚’ç·šé›†ă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“"; "room_error_cannot_load_timeline" = "ă‚żă‚€ăƒ ăƒ©ă‚€ăƒłăźèȘ­ăżèŸŒăżă«ć€±æ•—ă—ăŸă—ăŸ"; "room_error_timeline_event_not_found_title" = "ă‚żă‚€ăƒ ăƒ©ă‚€ăƒłăźäœçœźă‚’èȘ­ăżèŸŒă‚ăŸă›ă‚“ă§ă—ăŸ"; -"room_error_timeline_event_not_found" = "ケプăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăŒă“ăźăƒ«ăƒŒăƒ ăźă‚żă‚€ăƒ ăƒ©ă‚€ăƒłă«ç‰čćźšăźăƒă‚€ăƒłăƒˆă‚’ăƒ­ăƒŒăƒ‰ă—ă‚ˆă†ăšă—ăŸă—ăŸăŒă€ăă‚Œă‚’èŠ‹ă€ă‘ă‚‹ă“ăšăŒă§ăăŸă›ă‚“ă§ă—ăŸ"; -"room_left" = "あăȘăŸăŻăƒ«ăƒŒăƒ ă‚’ć‡șăŸă—ăŸ"; -"room_no_power_to_create_conference_call" = "ă“ăźăƒ«ăƒŒăƒ ă§äŒšè­°ă‚’é–‹ć§‹ă™ă‚‹ăŸă‚ă«æ‹›ćŸ…ă™ă‚‹æš©é™ăŒćż…èŠă§ă™"; -"room_no_conference_call_in_encrypted_rooms" = "æš—ć·ćŒ–ă•ă‚ŒăŸäŒšè­°ćź€ă§ăŻäŒšè­°é€šè©±ăŻă‚”ăƒăƒŒăƒˆă•ă‚ŒăŸă›ă‚“"; +"room_error_timeline_event_not_found" = "ă“ăźăƒ«ăƒŒăƒ ăźă‚żă‚€ăƒ ăƒ©ă‚€ăƒłă«ç‰čćźšăźăƒă‚€ăƒłăƒˆă‚’èȘ­ăżèŸŒă‚‚ă†ăšă—ăŸă—ăŸăŒă€èŠ‹ă€ă‘ă‚‰ă‚ŒăŸă›ă‚“ă§ă—ăŸ"; +"room_left" = "ăƒ«ăƒŒăƒ ă‹ă‚‰é€€ć‡șă—ăŸă—ăŸ"; +"room_no_power_to_create_conference_call" = "ă“ăźăƒ«ăƒŒăƒ ă§äŒšè­°ă‚’é–‹ć§‹ă™ă‚‹ă«ăŻă€æ‹›ćŸ…ă™ă‚‹ăŸă‚ăźæš©é™ăŒćż…èŠă§ă™"; +"room_no_conference_call_in_encrypted_rooms" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒ«ăƒŒăƒ ă§ăŻă€ă‚°ăƒ«ăƒŒăƒ—é€šè©±ăŻă‚”ăƒăƒŒăƒˆă•ă‚ŒăŸă›ă‚“"; // Reply to message "message_reply_to_sender_sent_an_image" = "ç”»ćƒă‚’é€äżĄă—ăŸă—ăŸă€‚"; -"message_reply_to_sender_sent_a_video" = "ć‹•ç”»ă‚’é€ă‚ŠăŸă—ăŸă€‚"; -"message_reply_to_sender_sent_an_audio_file" = "ă‚ȘăƒŒăƒ‡ă‚Łă‚Șăƒ•ă‚Ąă‚€ăƒ«ă‚’é€äżĄă—ăŸă—ăŸă€‚"; +"message_reply_to_sender_sent_a_video" = "ć‹•ç”»ă‚’é€äżĄă—ăŸă—ăŸă€‚"; +"message_reply_to_sender_sent_an_audio_file" = "éŸłćŁ°ăƒ•ă‚Ąă‚€ăƒ«ă‚’é€äżĄă—ăŸă—ăŸă€‚"; "message_reply_to_sender_sent_a_file" = "ăƒ•ă‚Ąă‚€ăƒ«ă‚’é€äżĄă—ăŸă—ăŸă€‚"; -"message_reply_to_message_to_reply_to_prefix" = "ă«èż”äżĄ"; +"message_reply_to_message_to_reply_to_prefix" = "èż”äżĄć…ˆ"; // Room members "room_member_ignore_prompt" = "ă“ăźăƒŠăƒŒă‚¶ăƒŒă‹ă‚‰ăźć…šăŠăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’éžèĄšç€șă«ă—ăŸă™ă‹ïŒŸ"; -"room_member_power_level_prompt" = "ă“ăźć€‰æ›Žă‚’ć…ƒă«æˆ»ă™ă“ăšăŻă§ăăŸă›ă‚“ă€‚ăƒŠăƒŒă‚¶ăƒŒăŒè‡Șćˆ†ăšćŒă˜ăƒŹăƒ™ăƒ«ăźæš©é™ă‚’æŒă€ă‚ˆă†ă«äżƒă—ăŸă™ăŒă€ă‚ˆă‚ă—ă„ă§ă™ă‹?"; +"room_member_power_level_prompt" = "ă“ăźăƒŠăƒŒă‚¶ăƒŒă«ă‚ăȘăŸăšćŒă˜æš©é™ăƒŹăƒ™ăƒ«ă‚’äžŽăˆă‚ˆă†ăšă—ăŠă„ăŸă™ă€‚ă“ăźć€‰æ›ŽăŻć–ă‚Šæ¶ˆă›ăŸă›ă‚“ă€‚\nă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; // Attachment -"attachment_size_prompt" = "æŹĄăźă‚ˆă†ă«é€äżĄă—ăŸă™ă‹:"; -"attachment_original" = "ćźŸéš›ăźă‚”ă‚€ă‚ș: %@"; -"attachment_small" = "氏: %@"; -"attachment_medium" = "äž­: %@"; -"attachment_large" = "性: %@"; -"attachment_cancel_download" = "ăƒ€ă‚Šăƒłăƒ­ăƒŒăƒ‰ă‚’ă‚­ăƒŁăƒłă‚»ăƒ«ă—ăŸă™ă‹?"; -"attachment_cancel_upload" = "ă‚ąăƒƒăƒ—ăƒ­ăƒŒăƒ‰ă‚’ă‚­ăƒŁăƒłă‚»ăƒ«ă—ăŸă™ă‹?"; -"attachment_multiselection_size_prompt" = "ç”»ćƒă‚’æŹĄăźă‚ˆă†ă«é€äżĄă—ăŸă™ă‹:"; +"attachment_size_prompt" = "æŹĄăźă‚ˆă†ă«é€äżĄă—ăŸă™ă‹ïŒš"; +"attachment_original" = "ćźŸéš›ăźă‚”ă‚€ă‚ș%@"; +"attachment_small" = "ć°ïŒš%@"; +"attachment_medium" = "䞭%@"; +"attachment_large" = "ć€§ïŒš%@"; +"attachment_cancel_download" = "ăƒ€ă‚Šăƒłăƒ­ăƒŒăƒ‰ă‚’ă‚­ăƒŁăƒłă‚»ăƒ«ă—ăŸă™ă‹ïŒŸ"; +"attachment_cancel_upload" = "ă‚ąăƒƒăƒ—ăƒ­ăƒŒăƒ‰ă‚’ă‚­ăƒŁăƒłă‚»ăƒ«ă—ăŸă™ă‹ïŒŸ"; +"attachment_multiselection_size_prompt" = "ç”»ćƒă‚’æŹĄăźă‚ˆă†ă«é€äżĄă—ăŸă™ă‹ïŒš"; "attachment_multiselection_original" = "ćźŸéš›ăźă‚”ă‚€ă‚ș"; -"attachment_e2e_keys_file_prompt" = "ă“ăźăƒ•ă‚Ąă‚€ăƒ«ă«ăŻă€Matrixă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆă‹ă‚‰ă‚šă‚Żă‚čăƒăƒŒăƒˆă•ă‚ŒăŸæš—ć·é”ăŒć«ăŸă‚ŒăŠă„ăŸă™ă€‚\năƒ•ă‚Ąă‚€ăƒ«ăźć†…ćźčă‚’èĄšç€șă™ă‚‹ă‹ă€ăƒ•ă‚Ąă‚€ăƒ«ć†…ăźé”ă‚’ă‚€ăƒłăƒăƒŒăƒˆă—ăŸă™ă‹ïŒŸ"; +"attachment_e2e_keys_file_prompt" = "ă“ăźăƒ•ă‚Ąă‚€ăƒ«ă«ăŻă€Matrixăźă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆă‹ă‚‰ă‚šă‚Żă‚čăƒăƒŒăƒˆă•ă‚ŒăŸæš—ć·é”ăŒć«ăŸă‚ŒăŠă„ăŸă™ă€‚\năƒ•ă‚Ąă‚€ăƒ«ăźć†…ćźčă‚’èĄšç€șă™ă‚‹ă‹ă€ăƒ•ă‚Ąă‚€ăƒ«ć†…ăźé”ă‚’ă‚€ăƒłăƒăƒŒăƒˆă—ăŸă™ă‹ïŒŸ"; "attachment_e2e_keys_import" = "ă‚€ăƒłăƒăƒŒăƒˆâ€Š"; // Contacts "contact_mx_users" = "MatrixăƒŠăƒŒă‚¶ăƒŒ"; -"contact_local_contacts" = "ăƒ­ăƒŒă‚«ăƒ«ăźé€Łç”Ąć…ˆ"; +"contact_local_contacts" = "ç«Żæœ«ăźé€Łç”Ąć…ˆ"; // Groups // Search "search_no_results" = "ç”æžœăŒă‚ă‚ŠăŸă›ă‚“"; @@ -1365,19 +1365,19 @@ "format_time_d" = "æ—„"; // E2E import "e2e_import_room_keys" = "ăƒ«ăƒŒăƒ ăźæš—ć·é”ă‚’ă‚€ăƒłăƒăƒŒăƒˆ"; -"e2e_import_prompt" = "ă“ăźăƒ—ăƒ­ă‚»ă‚čă§ăŻă€ä»„ć‰ă«ćˆ„ăźMatrixă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆă‹ă‚‰ă‚šă‚Żă‚čăƒăƒŒăƒˆă—ăŸæš—ć·é”ă‚’ă‚€ăƒłăƒăƒŒăƒˆă§ăăŸă™ă€‚ ă“ă‚Œă«ă‚ˆă‚Šă€ä»–ăźă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆăŒè§ŁèȘ­ă§ăă‚‹ć…šăŠăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’è§ŁèȘ­ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚\nスクă‚čăƒăƒŒăƒˆă—ăŸæš—ć·é”ăźăƒ•ă‚Ąă‚€ăƒ«ăŻă€ăƒ‘ă‚čăƒ•ăƒŹăƒŒă‚șă§äżè­·ă•ă‚ŒăŠă„ăŸă™ă€‚ ăƒ•ă‚Ąă‚€ăƒ«ă‚’ćŸ©ć·ćŒ–ă™ă‚‹ă«ăŻă€ăƒ‘ă‚čăƒ•ăƒŹăƒŒă‚șă‚’ă“ă“ă«ć…„ćŠ›ă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; +"e2e_import_prompt" = "ă“ăźăƒ—ăƒ­ă‚»ă‚čă§ăŻă€ä»„ć‰ă«ćˆ„ăźMatrixăźă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆă‹ă‚‰ă‚šă‚Żă‚čăƒăƒŒăƒˆă—ăŸæš—ć·é”ă‚’ă‚€ăƒłăƒăƒŒăƒˆă§ăăŸă™ă€‚ ă“ă‚Œă«ă‚ˆă‚Šă€ä»–ăźă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆăŒè§ŁèȘ­ă§ăă‚‹ć…šăŠăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’è§ŁèȘ­ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚\nスクă‚čăƒăƒŒăƒˆă—ăŸæš—ć·é”ăźăƒ•ă‚Ąă‚€ăƒ«ăŻă€ăƒ‘ă‚čăƒ•ăƒŹăƒŒă‚șă§äżè­·ă•ă‚ŒăŠă„ăŸă™ă€‚ ăƒ•ă‚Ąă‚€ăƒ«ă‚’ćŸ©ć·ćŒ–ă™ă‚‹ă«ăŻă€ăƒ‘ă‚čăƒ•ăƒŹăƒŒă‚șă‚’ă“ă“ă«ć…„ćŠ›ă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; "e2e_import" = "ă‚€ăƒłăƒăƒŒăƒˆ"; "e2e_passphrase_enter" = "パă‚čăƒ•ăƒŹăƒŒă‚șを慄抛"; // E2E export "e2e_export_room_keys" = "ăƒ«ăƒŒăƒ ăźæš—ć·é”ă‚’ă‚šă‚Żă‚čăƒăƒŒăƒˆ"; -"e2e_export_prompt" = "ă“ăźăƒ—ăƒ­ă‚»ă‚čă§ăŻă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒ«ăƒŒăƒ ă§ć—äżĄă—ăŸăƒĄăƒƒă‚»ăƒŒă‚žăźé”ă‚’ăƒ­ăƒŒă‚«ăƒ«ăƒ•ă‚Ąă‚€ăƒ«ă«ă‚šă‚Żă‚čăƒăƒŒăƒˆă§ăăŸă™ă€‚ ăăźăƒ•ă‚Ąă‚€ăƒ«ă‚’ćˆ„ăźMatrixă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆă«ă‚€ăƒłăƒăƒŒăƒˆă™ă‚‹ăšă€ă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆăŻă“ă‚Œă‚‰ăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ćŸ©ć·ćŒ–ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚\nスクă‚čăƒăƒŒăƒˆă—ăŸăƒ•ă‚Ąă‚€ăƒ«ă‚’äœżăˆă°ă€èȘ°ă§ă‚‚æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’ćŸ©ć·ćŒ–ă§ăă‚‹ăźă§ă€ăƒ•ă‚Ąă‚€ăƒ«ă‚’ćź‰ć…šă«äżă€ă‚ˆă†ă«æłšæ„ă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; +"e2e_export_prompt" = "ă“ăźăƒ—ăƒ­ă‚»ă‚čă§ăŻă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒ«ăƒŒăƒ ă§ć—äżĄă—ăŸăƒĄăƒƒă‚»ăƒŒă‚žăźé”ă‚’ăƒ­ăƒŒă‚«ăƒ«ăƒ•ă‚Ąă‚€ăƒ«ă«ă‚šă‚Żă‚čăƒăƒŒăƒˆă§ăăŸă™ă€‚ ăăźăƒ•ă‚Ąă‚€ăƒ«ă‚’ćˆ„ăźMatrixăźă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆă«ă‚€ăƒłăƒăƒŒăƒˆă™ă‚‹ăšă€ă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆăŻă“ă‚Œă‚‰ăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ćŸ©ć·ćŒ–ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚\nスクă‚čăƒăƒŒăƒˆă—ăŸăƒ•ă‚Ąă‚€ăƒ«ă‚’äœżă†ăšă€èȘ°ă§ă‚‚æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’ćŸ©ć·ćŒ–ă§ăă‚‹ăŸă‚ă€ăƒ•ă‚Ąă‚€ăƒ«ă‚’ćź‰ć…šă«äżă€ă‚ˆă†ă«æłšæ„ă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; "e2e_export" = "スクă‚čăƒăƒŒăƒˆ"; "e2e_passphrase_confirm" = "パă‚čăƒ•ăƒŹăƒŒă‚șをçąșèȘ"; "e2e_passphrase_empty" = "パă‚čăƒ•ăƒŹăƒŒă‚șはç©șă§ă‚ăŁăŠăŻă„ă‘ăŸă›ă‚“"; -"e2e_passphrase_not_match" = "パă‚čăƒ•ăƒŹăƒŒă‚șăŻäž€è‡Žă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™"; +"e2e_passphrase_not_match" = "パă‚čăƒ•ăƒŹăƒŒă‚șăŒäž€è‡Žă—ăŠă„ăŸă›ă‚“"; "e2e_passphrase_create" = "パă‚čăƒ•ăƒŹăƒŒă‚șăźäœœæˆ"; // Others -"user_id_title" = "ăƒŠăƒŒă‚¶ăƒŒID:"; +"user_id_title" = "ăƒŠăƒŒă‚¶ăƒŒID"; "offline" = "ă‚Șăƒ•ăƒ©ă‚€ăƒł"; "unsent" = "æœȘ送信"; "error" = "ă‚šăƒ©ăƒŒ"; @@ -1388,38 +1388,38 @@ "public" = "慬開"; "power_level" = "æš©é™ăƒŹăƒ™ăƒ«"; "network_error_not_reachable" = "ăƒăƒƒăƒˆăƒŻăƒŒă‚ŻæŽ„ç¶šă‚’çąșèȘă—ăŠăă ă•ă„"; -"user_id_placeholder" = "䟋: @bob:homeserver"; -"ssl_homeserver_url" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăźURL: %@"; +"user_id_placeholder" = "䟋@bob:homeserver"; +"ssl_homeserver_url" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăźURL%@"; // Permissions -"camera_access_not_granted_for_call" = "ビデă‚Șé€šè©±ăŻă‚«ăƒĄăƒ©ă«ă‚ąă‚Żă‚»ă‚čă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ăŒă€%@ă«ăŻăăźă‚«ăƒĄăƒ©ă‚’äœżç”šă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“"; -"microphone_access_not_granted_for_call" = "é€šè©±ă«ăŻăƒžă‚€ă‚Żăžăźă‚ąă‚Żă‚»ă‚čăŒćż…èŠă§ă™ăŒă€%@ă«ăŻäœżç”šèš±ćŻăŒă‚ă‚ŠăŸă›ă‚“"; -"local_contacts_access_not_granted" = "ăƒ­ăƒŒă‚«ăƒ«ăźé€Łç”Ąć…ˆă‹ă‚‰ăƒŠăƒŒă‚¶ăƒŒă‚’æŽąă™ă«ăŻé€Łç”Ąć…ˆă«ă‚ąă‚Żă‚»ă‚čă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ăŒă€%@ă«ăŻăăźă‚ąă‚Żă‚»ă‚čæš©é™ăŒă‚ă‚ŠăŸă›ă‚“"; -"local_contacts_access_discovery_warning_title" = "ăƒŠăƒŒă‚¶ăƒŒăźæŽąçŽą"; -"local_contacts_access_discovery_warning" = "%@ăŻă€ăƒŠăƒŒă‚¶ăƒŒă‚’æ€œçŽąă™ă‚‹ăŸă‚ă«ă‚ăȘăŸăźé€Łç”Ąć…ˆă‹ă‚‰é›»ć­ăƒĄăƒŒăƒ«ăšé›»è©±ç•Șć·ă‚’ă‚ąăƒƒăƒ—ăƒ­ăƒŒăƒ‰ă—ăŸă„"; +"camera_access_not_granted_for_call" = "ビデă‚Șé€šè©±ă«ăŻă‚«ăƒĄăƒ©ăžăźă‚ąă‚Żă‚»ă‚čăŒćż…èŠă§ă™ăŒă€%@ă«ăŻă‚«ăƒĄăƒ©ă‚’äœżç”šă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“"; +"microphone_access_not_granted_for_call" = "é€šè©±ă«ăŻăƒžă‚€ă‚Żăžăźă‚ąă‚Żă‚»ă‚čăŒćż…èŠă§ă™ăŒă€%@ă«ăŻăƒžă‚€ă‚Żă‚’äœżç”šă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“"; +"local_contacts_access_not_granted" = "ăƒ­ăƒŒă‚«ăƒ«ăźé€Łç”Ąć…ˆă‹ă‚‰ăƒŠăƒŒă‚¶ăƒŒă‚’æŽąă™ă«ăŻé€Łç”Ąć…ˆă«ă‚ąă‚Żă‚»ă‚čă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ăŒă€%@にはスクセă‚čæš©é™ăŒă‚ă‚ŠăŸă›ă‚“"; +"local_contacts_access_discovery_warning_title" = "ăƒŠăƒŒă‚¶ăƒŒă‚’æŽąă™"; +"local_contacts_access_discovery_warning" = "Matrixă‚’æ—ąă«äœżç”šă—ăŠă„ă‚‹é€Łç”Ąć…ˆă‚’èŠ‹ă€ă‘ă‚‹ăŸă‚ă€%@ăŻé›»è©±ćžłă«ă‚ă‚‹ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čăšé›»è©±ç•Șć·ă‚’ă€ă‚ăȘăŸăŒéžæŠžă—ăŸMatrixたIDă‚”ăƒŒăƒăƒŒă«é€äżĄă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚ă‚”ăƒăƒŒăƒˆă—ăŠă„ă‚‹ć Žćˆă€ć€‹äșșăƒ‡ăƒŒă‚żăŻé€äżĄć‰ă«ăƒăƒƒă‚·ăƒ„ćŒ–ă•ă‚ŒăŸă™ă€‚è©łçŽ°ăŻIDă‚”ăƒŒăƒăƒŒăźăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒăƒăƒȘă‚·ăƒŒă‚’çąșèȘă—ăŠăă ă•ă„ă€‚"; // Country picker "country_picker_title" = "ć›œă‚’éžæŠž"; // Language picker "language_picker_title" = "蚀èȘžă‚’遞択"; -"language_picker_default_language" = "æ—ąćźšć€€ (%@)"; +"language_picker_default_language" = "æ—ąćźšć€€ïŒˆ%@"; "notice_room_invite" = "%@が%@ă‚’æ‹›ćŸ…ă—ăŸă—ăŸ"; -"notice_room_third_party_invite" = "%@が%@ă«ăƒ«ăƒŒăƒ ăžăźæ‹›ćŸ…çŠ¶ă‚’é€ă‚ŠăŸă—ăŸ"; +"notice_room_third_party_invite" = "%@が%@ă«ăƒ«ăƒŒăƒ ăžăźæ‹›ćŸ…ă‚’é€ă‚ŠăŸă—ăŸ"; "notice_room_third_party_registered_invite" = "%@が%@ăźæ‹›ćŸ…ă‚’ć—ă‘ć…„ă‚ŒăŸă—ăŸ"; "notice_room_join" = "%@ăŒć‚ćŠ ă—ăŸă—ăŸ"; "notice_room_leave" = "%@が退ć‡șă—ăŸă—ăŸ"; "notice_room_reject" = "%@ăŒæ‹›ćŸ…ă‚’æ‹’ćŠă—ăŸă—ăŸ"; -"notice_room_kick" = "%@が%@ă‚’èżœă„ć‡șă—ăŸă—ăŸ"; -"notice_room_unban" = "%@が%@ă‚’èżœæ”Ÿè§Łé™€ă—ăŸă—ăŸ"; -"notice_room_ban" = "%@が%@ă‚’èżœæ”Ÿă—ăŸă—ăŸ"; -"notice_room_withdraw" = "%@が%@ăźæ‹›ćŸ…ă‚’èŸžé€€ă—ăŸă—ăŸ"; -"notice_room_reason" = ". 理由: %@"; +"notice_room_kick" = "%@が%@ă‚’èżœæ”Ÿă—ăŸă—ăŸ"; +"notice_room_unban" = "%@が%@ăźăƒ–ăƒ­ăƒƒă‚Żă‚’è§Łé™€ă—ăŸă—ăŸ"; +"notice_room_ban" = "%@が%@ă‚’ăƒ–ăƒ­ăƒƒă‚Żă—ăŸă—ăŸ"; +"notice_room_withdraw" = "%@が%@ăźæ‹›ćŸ…ă‚’ć–ă‚Šäž‹ă’ăŸă—ăŸ"; +"notice_room_reason" = "ă€‚ç†ç”±ïŒš%@"; "notice_avatar_url_changed" = "%@ăŒă‚ąăƒă‚żăƒŒă‚’ć€‰æ›Žă—ăŸă—ăŸ"; "notice_display_name_set" = "%@ăŒèĄšç€ș損を%@ă«èš­ćźšă—ăŸă—ăŸ"; "notice_display_name_changed_from" = "%@ăŒèĄšç€ș損を%@から%@ă«ć€‰æ›Žă—ăŸă—ăŸ"; "notice_display_name_removed" = "%@ăŒèĄšç€șćă‚’ć‰Šé™€ă—ăŸă—ăŸ"; -"notice_topic_changed" = "%@ăŒăƒˆăƒ”ăƒƒă‚Żă‚’æŹĄăźă‚ˆă†ă«ć€‰æ›Žă—ăŸă—ăŸïŒš%@"; -"notice_room_name_changed" = "%@ăŒăƒ«ăƒŒăƒ ćă‚’æŹĄăźă‚ˆă†ă«ć€‰æ›Žă—ăŸă—ăŸïŒš%@"; -"notice_placed_voice_call" = "%@ăŒé›»è©±ă‚’ă‹ă‘ăŸă—ăŸ"; -"notice_placed_video_call" = "%@がビデă‚Șé›»è©±ă‚’ă‹ă‘ăŸă—ăŸ"; +"notice_topic_changed" = "%@がトピックを「%@ă€ă«ć€‰æ›Žă—ăŸă—ăŸă€‚"; +"notice_room_name_changed" = "%@ăŒăƒ«ăƒŒăƒ ćă‚’%@ă«ć€‰æ›Žă—ăŸă—ăŸă€‚"; +"notice_placed_voice_call" = "%@ăŒéŸłćŁ°é€šè©±ă‚’ç™șäżĄă—ăŸă—ăŸ"; +"notice_placed_video_call" = "%@がビデă‚Șé€šè©±ă‚’ç™șäżĄă—ăŸă—ăŸ"; "notice_answered_video_call" = "%@ăŒé›»è©±ă«ć‡șăŸă—ăŸ"; "notice_ended_video_call" = "%@ăŒé€šè©±ă‚’ç”‚äș†ă—ăŸă—ăŸ"; "notice_conference_call_request" = "%@がVoIPäŒšè­°ă‚’ăƒȘクスă‚čăƒˆă—ăŸă—ăŸ"; @@ -1429,21 +1429,21 @@ "send" = "送信"; "copy_button_name" = "ă‚łăƒ”ăƒŒ"; "resend" = "憍送信"; -"redact" = "線集"; +"redact" = "扊陀"; "share" = "ć…±æœ‰"; -"set_power_level" = "æš©é™ăƒŹăƒ™ăƒ«"; +"set_power_level" = "æš©é™ăƒŹăƒ™ăƒ«ă‚’èš­ćźš"; "delete" = "扊陀"; // actions "action_logout" = "ログケォト"; -"create_room" = "ăƒ«ăƒŒăƒ ă‚’äœœă‚‹"; +"create_room" = "ăƒ«ăƒŒăƒ ă‚’äœœæˆ"; "login" = "ăƒ­ă‚°ă‚€ăƒł"; "create_account" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’äœœæˆ"; -"membership_invite" = "æ‹›ćŸ…ă—ăŸă—ăŸ"; -"membership_leave" = "退ć‡șă—ăŸă—ăŸ"; -"membership_ban" = "ăƒ–ăƒ­ăƒƒă‚Żă—ăŸă—ăŸ"; -"num_members_one" = "%@ ăƒŠăƒŒă‚¶ăƒŒ"; -"num_members_other" = "%@ ăƒŠăƒŒă‚¶ăƒŒ"; -"kick" = "キック"; +"membership_invite" = "æ‹›ćŸ…æžˆ"; +"membership_leave" = "退ć‡ș枈"; +"membership_ban" = "ăƒ–ăƒ­ăƒƒă‚Żæžˆ"; +"num_members_one" = "%@äșșăźăƒŠăƒŒă‚¶ăƒŒ"; +"num_members_other" = "%@äșșăźăƒŠăƒŒă‚¶ăƒŒ"; +"kick" = "äŒšè©±ă‹ă‚‰èżœæ”Ÿ"; "ban" = "ブロック"; "unban" = "ăƒ–ăƒ­ăƒƒă‚Żè§Łé™€"; "message_unsaved_changes" = "保歘されどいăȘă„ć€‰æ›ŽăŒă‚ă‚ŠăŸă™ă€‚ 退ć‡șă™ă‚‹ăšć€‰æ›ŽăŻć–ă‚Šæ¶ˆă•ă‚ŒăŸă™ă€‚"; @@ -1452,59 +1452,59 @@ "login_error_must_start_http" = "URLは http[s]:// ă§ć§‹ăŸă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™"; // room details dialog screen // contacts list screen -"invitation_message" = "私はmatrixであăȘたべチャットしたい。 è©łçŽ°ăŻă‚Šă‚§ăƒ–ă‚”ă‚€ăƒˆhttp://matrix.orgをお氋ねください。"; +"invitation_message" = "matrixă§ăƒăƒŁăƒƒăƒˆă—ăŸă—ă‚‡ă†ă€‚ è©łçŽ°ăŻă‚Šă‚§ăƒ–ă‚”ă‚€ăƒˆ http://matrix.org でçąșèȘă—ăŠăă ă•ă„ă€‚"; // Settings screen -"settings_title_config" = "構成"; +"settings_title_config" = "èš­ćźš"; "settings_title_notifications" = "通矄"; // Notification settings screen "notification_settings_disable_all" = "ć…šăŠăźé€šçŸ„ă‚’ç„ĄćŠčにする"; "notification_settings_enable_notifications" = "é€šçŸ„ă‚’æœ‰ćŠčにする"; "notification_settings_enable_notifications_warning" = "çŸćœšă€ć…šăŠăźç«Żæœ«ă§ć…šăŠăźé€šçŸ„ăŒç„ĄćŠčにăȘăŁăŠă„ăŸă™ă€‚"; -"notification_settings_global_info" = "é€šçŸ„èš­ćźšăŻăƒŠăƒŒă‚¶ăƒŒă‚ąă‚«ă‚Šăƒłăƒˆă«äżć­˜ă•ă‚Œă€ăƒ‡ă‚čă‚Żăƒˆăƒƒăƒ—é€šçŸ„ă‚’ć«ă‚€ć…šăŠăźă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆé–“ă§ć…±æœ‰ă•ă‚ŒăŸă™ă€‚\n\năƒ«ăƒŒăƒ«ăŻé †ç•Șă«é©ç”šă•ă‚ŒăŸă™ă€‚ äž€è‡Žă™ă‚‹æœ€ćˆăźăƒ«ăƒŒăƒ«ăŻă€ăƒĄăƒƒă‚»ăƒŒă‚žăźç”æžœă‚’ćźšçŸ©ă—ăŸă™ă€‚\nă ă‹ă‚‰ïŒšć˜èȘžă”ăšăźé€šçŸ„ăŻă€é€äżĄè€…ă”ăšăźé€šçŸ„ă‚ˆă‚Šă‚‚é‡èŠăȘăƒ«ăƒŒăƒ ă”ăšăźé€šçŸ„ă‚ˆă‚Šă‚‚é‡èŠă§ă™ă€‚\nćŒă˜çšźéĄžăźè€‡æ•°ăźăƒ«ăƒŒăƒ«ăźć Žćˆă€äž€è‡Žă™ă‚‹ăƒȘă‚čăƒˆăźæœ€ćˆăźăƒ«ăƒŒăƒ«ăŒć„Șć…ˆă•ă‚ŒăŸă™ă€‚"; +"notification_settings_global_info" = "é€šçŸ„èš­ćźšăŻăƒŠăƒŒă‚¶ăƒŒă‚ąă‚«ă‚Šăƒłăƒˆă«äżć­˜ă•ă‚Œă€ăƒ‡ă‚čă‚Żăƒˆăƒƒăƒ—é€šçŸ„ă‚’ć«ă‚€ć…šăŠăźă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆé–“ă§ć…±æœ‰ă•ă‚ŒăŸă™ă€‚\n\năƒ«ăƒŒăƒ«ăŻé †ç•Șă«é©ç”šă•ă‚ŒăŸă™ă€‚ äž€è‡Žă™ă‚‹æœ€ćˆăźăƒ«ăƒŒăƒ«ăŻă€ăƒĄăƒƒă‚»ăƒŒă‚žăźç”æžœă‚’ćźšçŸ©ă—ăŸă™ă€‚\nしたがっど、捘èȘžć˜äœăźé€šçŸ„ăŻăƒ«ăƒŒăƒ ć˜äœăźé€šçŸ„ă‚ˆă‚Šă‚‚ć„Șć…ˆă•ă‚Œă€ăƒ«ăƒŒăƒ ć˜äœăźé€šçŸ„ăŻă€é€äżĄè€…ć˜äœăźé€šçŸ„ă‚ˆă‚Šă‚‚ć„Șć…ˆă•ă‚ŒăŸă™ă€‚\nćŒă˜çšźéĄžăźè€‡æ•°ăźăƒ«ăƒŒăƒ«ă«é–ąă—ăŠăŻă€äž€è‡Žă™ă‚‹ăƒȘă‚čăƒˆăźæœ€ćˆăźăƒ«ăƒŒăƒ«ăŒć„Șć…ˆă•ă‚ŒăŸă™ă€‚"; "notification_settings_per_word_notifications" = "捘èȘžć˜äœăźé€šçŸ„"; -"notification_settings_per_word_info" = "捘èȘžăŻć€§æ–‡ć­—ăšć°æ–‡ć­—ă‚’ćŒșćˆ„ă›ăšă«äž€è‡Žă•ă›ă€*ăƒŻă‚€ăƒ«ăƒ‰ă‚«ăƒŒăƒ‰ă‚’ć«ă‚ă‚‹ă“ăšăŒă§ăăŸă™ă€‚ ćŸ“ăŁăŠ:\nfooは、ćŒșćˆ‡ă‚Šæ–‡ć­—ă§ć›ČăŸă‚ŒăŸæ–‡ć­—ćˆ—foo䟋 ć„èȘ­ç‚čやç©șç™œă€èĄŒăźé–‹ć§‹/甂äș†ïŒ‰ăšäž€è‡Žă—ăŸă™ă€‚\nfoo*は、fooă§ć§‹ăŸă‚‹ć˜èȘžă«äž€è‡Žă—ăŸă™ă€‚\n*foo*は、3æ–‡ć­—ăźfooă‚’ć«ă‚€ć˜èȘžă«äž€è‡Žă—ăŸă™ă€‚"; +"notification_settings_per_word_info" = "捘èȘžăŻć€§æ–‡ć­—ăšć°æ–‡ć­—ă‚’ćŒșćˆ„ă›ăšă«äž€è‡Žă•ă›ă€*ăƒŻă‚€ăƒ«ăƒ‰ă‚«ăƒŒăƒ‰ă‚’ć«ă‚ă‚‹ă“ăšăŒă§ăăŸă™ă€‚ よっど、\nfooは、ćŒșćˆ‡ă‚Šæ–‡ć­—ă§ć›ČăŸă‚ŒăŸæ–‡ć­—ćˆ—foo䟋 ć„èȘ­ç‚čやç©șç™œă€èĄŒăźé–‹ć§‹/甂äș†ïŒ‰ăšäž€è‡Žă—ăŸă™ă€‚\nfoo*は、fooă§ć§‹ăŸă‚‹ć˜èȘžă«äž€è‡Žă—ăŸă™ă€‚\n*foo*は、3æ–‡ć­—ăźfooă‚’ć«ă‚€ć˜èȘžă«äž€è‡Žă—ăŸă™ă€‚"; "notification_settings_always_notify" = "ćžžă«é€šçŸ„"; -"notification_settings_never_notify" = "æ±șă—ăŠé€šçŸ„ă—ăȘい"; +"notification_settings_never_notify" = "é€šçŸ„ă—ăȘい"; "notification_settings_word_to_match" = "äž€è‡Žă™ă‚‹ć˜èȘž"; "notification_settings_highlight" = "ăƒă‚€ăƒ©ă‚€ăƒˆ"; "notification_settings_custom_sound" = "ă‚«ă‚čă‚żăƒ ă‚”ă‚Šăƒłăƒ‰"; -"notification_settings_per_room_notifications" = "1ăƒ«ăƒŒăƒ ă‚ăŸă‚Šăźé€šçŸ„"; -"notification_settings_per_sender_notifications" = "é€äżĄè€…ă”ăšăźé€šçŸ„"; +"notification_settings_per_room_notifications" = "ăƒ«ăƒŒăƒ ć˜äœăźé€šçŸ„"; +"notification_settings_per_sender_notifications" = "é€äżĄè€…ć˜äœăźé€šçŸ„"; "notification_settings_sender_hint" = "@user:domain.com"; "notification_settings_select_room" = "ăƒ«ăƒŒăƒ ă‚’éžæŠž"; "notification_settings_other_alerts" = "ăăźä»–ăźă‚ąăƒ©ăƒŒăƒˆ"; -"notification_settings_contain_my_user_name" = "ç§ăźăƒŠăƒŒă‚¶ăƒŒćă‚’ć«ă‚€ăƒĄăƒƒă‚»ăƒŒă‚žă«ă€ă„ăŠéŸłă§ç§ă«é€šçŸ„ă—ăŠăă ă•ă„"; -"notification_settings_contain_my_display_name" = "ç§ăźèĄšç€șćăŒć«ăŸă‚ŒăŠă„ă‚‹ăƒĄăƒƒă‚»ăƒŒă‚žăŒć±Šă„ăŸéš›ă«éŸłă§é€šçŸ„"; -"notification_settings_just_sent_to_me" = "ç§ă«é€ă‚‰ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă«ă€ă„ăŠăźéŸłă§ç§ă«çŸ„ă‚‰ă›ă‚‹"; -"notification_settings_invite_to_a_new_room" = "ç§ăŒæ–°ă—ă„ăƒ«ăƒŒăƒ ă«æ‹›ćŸ…ă•ă‚ŒăŸăšăă«çŸ„ă‚‰ă›ă‚‹"; +"notification_settings_contain_my_user_name" = "ç§ăźăƒŠăƒŒă‚¶ăƒŒćă‚’ć«ă‚€ăƒĄăƒƒă‚»ăƒŒă‚žă«ă€ă„ăŠéŸłă§é€šçŸ„"; +"notification_settings_contain_my_display_name" = "ç§ăźèĄšç€șćă‚’ć«ă‚€ăƒĄăƒƒă‚»ăƒŒă‚žă«ă€ă„ăŠéŸłă§é€šçŸ„"; +"notification_settings_just_sent_to_me" = "ç§ă«ăźăżé€äżĄă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă«ă€ă„ăŠéŸłă§é€šçŸ„"; +"notification_settings_invite_to_a_new_room" = "æ–°ă—ă„ăƒ«ăƒŒăƒ ă«æ‹›ćŸ…ă•ă‚ŒăŸăšăă«é€šçŸ„"; "notification_settings_people_join_leave_rooms" = "èȘ°ă‹ăŒăƒ«ăƒŒăƒ ă«ć‚ćŠ ă‚‚ă—ăăŻé€€ć‡șă—ăŸăšăă«é€šçŸ„"; "notification_settings_receive_a_call" = "é€šè©±ă‚’ć—äżĄă—ăŸăšăă«é€šçŸ„"; "notification_settings_suppress_from_bots" = "ăƒœăƒƒăƒˆă‹ă‚‰ăźé€šçŸ„ă‚’æŠ‘ćˆ¶"; "notification_settings_by_default" = "æ—ąćźšć€€ă§ăŻâ€Š"; -"notification_settings_notify_all_other" = "ä»–ăźć…šăŠăźăƒĄăƒƒă‚»ăƒŒă‚ž/ăƒ«ăƒŒăƒ ă«ă€ă„ăŠé€šçŸ„"; +"notification_settings_notify_all_other" = "ä»–ăźć…šăŠăźăƒĄăƒƒă‚»ăƒŒă‚žăŸăŸăŻăƒ«ăƒŒăƒ ă«ă€ă„ăŠé€šçŸ„"; // gcm section // call string "call_waiting" = "ćŸ…æ©Ÿäž­..."; -"call_connecting" = "通話掄続䞭 "; -"call_ended" = "通話甂äș†"; +"call_connecting" = "æŽ„ç¶šă—ăŠă„ăŸă™â€Š"; +"call_ended" = "é€šè©±ăŒç”‚äș†ă—ăŸă—ăŸ"; "call_ring" = "ć‘Œăłć‡șし侭..."; -"incoming_video_call" = "着信ビデă‚Ș通話"; -"incoming_voice_call" = "ç€äżĄéŸłćŁ°é€šè©±"; -"call_invite_expired" = "æœŸé™ćˆ‡ă‚Œăźæ‹›ćŸ…ă‚łăƒŒăƒ«"; +"incoming_video_call" = "ビデă‚Șé€šè©±ăźç€äżĄäž­"; +"incoming_voice_call" = "éŸłćŁ°é€šè©±ăźç€äżĄäž­"; +"call_invite_expired" = "é€šè©±ăźæ‹›ćŸ…ăźæœŸé™ăŒćˆ‡ă‚ŒăŸă—ăŸ"; // unrecognized SSL certificate "ssl_trust" = "äżĄé Œ"; "ssl_logout_account" = "ログケォト"; "ssl_remain_offline" = "ç„ĄèŠ–"; -"ssl_fingerprint_hash" = "指王 (%@):"; -"ssl_could_not_verify" = "ăƒȘăƒąăƒŒăƒˆă‚”ăƒŒăƒăƒŒăźIDをçąșèȘă§ăăŸă›ă‚“ă§ă—ăŸă€‚"; -"ssl_cert_not_trust" = "これは、èȘ°ă‹ăŒă‚ăȘăŸăźăƒˆăƒ©ăƒ•ă‚Łăƒƒă‚Żă‚’æ‚Șæ„ă‚’æŒăŁăŠć‚ć—ă—ăŠă„ă‚‹ă‹ă€ă‚ăȘăŸăźé›»è©±æ©ŸăŒăƒȘăƒąăƒŒăƒˆă‚”ăƒŒăƒăƒŒă‹ă‚‰æäŸ›ă•ă‚ŒăŸèšŒæ˜Žæ›žă‚’äżĄé Œă—ăŠă„ăȘă„ă“ăšă‚’æ„ć‘łă—ăŸă™ă€‚"; -"ssl_cert_new_account_expl" = "ă‚”ăƒŒăƒăƒŒçźĄç†è€…ăŒă“ă‚ŒăŒäșˆæœŸă•ă‚Œă‚‹ăšèż°ăčăŸć ŽćˆăŻă€ä»„äž‹ăźæŒ‡çŽ‹ăŒæäŸ›ă•ă‚ŒăŸæŒ‡çŽ‹ăšäž€è‡Žă™ă‚‹ă“ăšă‚’çąșèȘă—ăŠăă ă•ă„ă€‚"; -"ssl_unexpected_existing_expl" = "èšŒæ˜Žæ›žăŻă€ăŠäœżă„ăźæșćžŻé›»è©±ă«ăŠäżĄé Œă•ă‚ŒăŸă‚‚ăźă‹ă‚‰ć€‰æ›Žă•ă‚ŒăŸă—ăŸă€‚ ă“ă‚ŒăŻéžćžžă«çă—ă„ă“ăšă§ă™ă€‚ ă“ăźæ–°ă—ă„èšŒæ˜Žæ›žă«ćŒæ„ă—ăȘă„ă“ăšă‚’ăŠć‹§ă‚ă—ăŸă™ă€‚"; -"ssl_expected_existing_expl" = "èšŒæ˜Žæ›žăŒä»„ć‰ă«äżĄé Œă•ă‚ŒăŸă‚‚ăźă‹ă‚‰äżĄé Œă•ă‚ŒăŠă„ăȘă„ă‚‚ăźă«ć€‰æ›Žă•ă‚ŒăŸă—ăŸă€‚ ă‚”ăƒŒăƒăƒŒăŒèšŒæ˜Žæ›žă‚’æ›Žæ–°ă—ăŸćŻèƒœæ€§ăŒă‚ă‚ŠăŸă™ă€‚ äșˆæƒłă•ă‚Œă‚‹æŒ‡çŽ‹ă«ă€ă„ăŠăŻă€ă‚”ăƒŒăƒăƒŒçźĄç†è€…ă«ăŠć•ă„ćˆă‚ă›ăă ă•ă„ă€‚"; -"ssl_only_accept" = "ă‚”ăƒŒăƒăƒŒçźĄç†è€…ăŒäžŠèš˜ăźă‚‚ăźăšäž€è‡Žă™ă‚‹æŒ‡çŽ‹ă‚’ç™șèĄŒă—ăŸć Žćˆă«ăźăżă€èšŒæ˜Žæ›žă‚’ć—ă‘ć…„ă‚ŒăŠăă ă•ă„ă€‚"; -"unignore" = "ç„ĄèŠ–ă—ăȘい"; -"notice_encryption_enabled_ok" = "%@ăŒă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ă‚’ă‚Șăƒłă«ă—ăŸă—ăŸă€‚"; -"notice_encryption_enabled_unknown_algorithm" = "%1$@ăŒă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ă‚’ă‚Șăƒłă«ă—ăŸă—ăŸïŒˆäžæ˜ŽăȘă‚ąăƒ«ă‚ŽăƒȘă‚șム %2$@ïŒ‰ă€‚"; +"ssl_fingerprint_hash" = "ăƒ•ă‚Łăƒłă‚ŹăƒŒăƒ—ăƒȘăƒłăƒˆïŒˆ%@"; +"ssl_could_not_verify" = "ăƒȘăƒąăƒŒăƒˆă‚”ăƒŒăƒăƒŒăźIDをèȘèšŒă§ăăŸă›ă‚“ă§ă—ăŸă€‚"; +"ssl_cert_not_trust" = "これは、èȘ°ă‹ăŒă‚ăȘăŸăźăƒˆăƒ©ăƒ•ă‚Łăƒƒă‚Żă‚’ć‚ć—ă—ăŠă„ă‚‹ă‹ă€ă‚ăȘăŸăźé›»è©±æ©ŸăŒăƒȘăƒąăƒŒăƒˆă‚”ăƒŒăƒăƒŒă‹ă‚‰æäŸ›ă•ă‚ŒăŸèšŒæ˜Žæ›žă‚’äżĄé Œă—ăŠă„ăȘă„ă“ăšă‚’æ„ć‘łă—ăŠă„ă‚‹ćŻèƒœæ€§ăŒă‚ă‚ŠăŸă™ă€‚"; +"ssl_cert_new_account_expl" = "ă‚”ăƒŒăƒăƒŒăźçźĄç†è€…ăŒă€ă“ă‚ŒăŻæƒłćźšă•ă‚ŒăŠă„ă‚‹ă“ăšă§ă‚ă‚‹ăšèż°ăčăŸć ŽćˆăŻă€ä»„äž‹ăźăƒ•ă‚Łăƒłă‚ŹăƒŒăƒ—ăƒȘăƒłăƒˆăŒă€çźĄç†è€…ă«ă‚ˆă‚‹ăƒ•ă‚Łăƒłă‚ŹăƒŒăƒ—ăƒȘăƒłăƒˆăšäž€è‡Žă™ă‚‹ă“ăšă‚’çąșèȘă—ăŠăă ă•ă„ă€‚"; +"ssl_unexpected_existing_expl" = "èšŒæ˜Žæ›žăŻă‚ăȘăŸăźé›»è©±ă«ă‚ˆă‚ŠäżĄé Œă•ă‚ŒăŠă„ăŸă‚‚ăźă‹ă‚‰ć€‰æ›Žă•ă‚ŒăŠă„ăŸă™ă€‚ă“ă‚ŒăŻăă‚ă‚ăŠç•°ćžžăȘäș‹æ…‹ă§ă™ă€‚ă“ăźæ–°ă—ă„èšŒæ˜Žæ›žă‚’æ‰żèȘă—ăȘă„ă“ăšă‚’ćŒ·ăæŽšć„šă—ăŸă™ă€‚"; +"ssl_expected_existing_expl" = "èšŒæ˜Žæ›žăŒä»„ć‰ă«äżĄé Œă•ă‚ŒăŸă‚‚ăźă‹ă‚‰äżĄé Œă•ă‚ŒăŠă„ăȘă„ă‚‚ăźă«ć€‰æ›Žă•ă‚ŒăŸă—ăŸă€‚ă‚”ăƒŒăƒăƒŒăŒèšŒæ˜Žæ›žă‚’æ›Žæ–°ă—ăŸćŻèƒœæ€§ăŒă‚ă‚ŠăŸă™ă€‚ă‚”ăƒŒăƒăƒŒăźçźĄç†è€…ă«é€Łç”Ąă—ăŠă€é©ćˆ‡ăȘăƒ•ă‚Łăƒłă‚ŹăƒŒăƒ—ăƒȘントをçąșèȘă—ăŠăă ă•ă„ă€‚"; +"ssl_only_accept" = "ă‚”ăƒŒăƒăƒŒăźçźĄç†è€…ăŒäžŠèš˜ăźă‚‚ăźăšäž€è‡Žă™ă‚‹ăƒ•ă‚Łăƒłă‚ŹăƒŒăƒ—ăƒȘントをç™șèĄŒă—ăŸć Žćˆă«ăźăżă€èšŒæ˜Žæ›žă‚’æ‰żèȘă—ăŠăă ă•ă„ă€‚"; +"unignore" = "ç„ĄèŠ–ă‚’è§Łé™€"; +"notice_encryption_enabled_ok" = "%@ăŒă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ă‚’æœ‰ćŠčă«ă—ăŸă—ăŸă€‚"; +"notice_encryption_enabled_unknown_algorithm" = "%1$@ăŒă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ïŒˆèȘè­˜ă•ă‚ŒăŠă„ăȘă„ă‚ąăƒ«ă‚ŽăƒȘă‚șム %2$@ïŒ‰ă‚’æœ‰ćŠčă«ă—ăŸă—ăŸă€‚"; "device_details_rename_prompt_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłć"; "account_error_push_not_allowed" = "é€šçŸ„ăŻèš±ćŻă•ă‚ŒăŠă„ăŸă›ă‚“"; "notice_room_third_party_revoked_invite" = "%@が%@ăźăƒ«ăƒŒăƒ ăžăźæ‹›ćŸ…ă‚’ć–ă‚Šæ¶ˆă—ăŸă—ăŸ"; @@ -1512,27 +1512,27 @@ "notice_room_invite_by_you" = "%@ă‚’æ‹›ćŸ…ă—ăŸă—ăŸ"; "notice_room_invite_you" = "%@があăȘăŸă‚’æ‹›ćŸ…ă—ăŸă—ăŸ"; "notice_room_join_by_you" = "ć‚ćŠ ă—ăŸă—ăŸ"; -"notice_room_leave_by_you" = "あăȘたが退ć‡șă—ăŸă—ăŸ"; -"notice_room_kick_by_you" = "%@ă‚’ă‚­ăƒƒă‚Żă—ăŸă—ăŸ"; +"notice_room_leave_by_you" = "退ć‡șă—ăŸă—ăŸ"; +"notice_room_kick_by_you" = "%@ă‚’èżœæ”Ÿă—ăŸă—ăŸ"; "notice_room_unban_by_you" = "%@ăźăƒ–ăƒ­ăƒƒă‚Żă‚’è§Łé™€ă—ăŸă—ăŸ"; "notice_room_ban_by_you" = "%@ă‚’ăƒ–ăƒ­ăƒƒă‚Żă—ăŸă—ăŸ"; "notice_avatar_url_changed_by_you" = "ă‚ąăƒă‚żăƒŒă‚’ć€‰æ›Žă—ăŸă—ăŸ"; "notice_display_name_set_by_you" = "èĄšç€ș損を%@ă«ć€‰æ›Žă—ăŸă—ăŸ"; "notice_display_name_changed_from_by_you" = "èĄšç€ș損を%@から%@ă«ć€‰æ›Žă—ăŸă—ăŸ"; "notice_display_name_removed_by_you" = "èĄšç€șćă‚’ć‰Šé™€ă—ăŸă—ăŸ"; -"notice_topic_changed_by_you" = "ăƒˆăƒ”ăƒƒă‚Żă‚’ć€‰æ›Žă—ăŸă—ăŸ: %@"; -"notice_room_name_changed_by_you" = "ăƒ«ăƒŒăƒ ăźćć‰ă‚’ć€‰æ›Žă—ăŸă—ăŸ: %@"; -"notice_placed_voice_call_by_you" = "éŸłćŁ°é€šè©±ă‚’é–‹ć§‹ă—ăŸă—ăŸ"; -"notice_placed_video_call_by_you" = "ビデă‚Șé€šè©±ă‚’é–‹ć§‹ă—ăŸă—ăŸ"; +"notice_topic_changed_by_you" = "トピックを「%@ă€ă«ć€‰æ›Žă—ăŸă—ăŸă€‚"; +"notice_room_name_changed_by_you" = "ăƒ«ăƒŒăƒ ćă‚’%@ă«ć€‰æ›Žă—ăŸă—ăŸă€‚"; +"notice_placed_voice_call_by_you" = "éŸłćŁ°é€šè©±ă‚’ç™șäżĄă—ăŸă—ăŸ"; +"notice_placed_video_call_by_you" = "ビデă‚Șé€šè©±ă‚’ç™șäżĄă—ăŸă—ăŸ"; "notice_answered_video_call_by_you" = "é›»è©±ă«ć‡șăŸă—ăŸ"; "notice_ended_video_call_by_you" = "é€šè©±ă‚’ç”‚äș†ă—ăŸă—ăŸ"; "notice_conference_call_request_by_you" = "VoIPäŒšè­°ă‚’ăƒȘクスă‚čăƒˆă—ăŸă—ăŸ"; "notice_room_name_removed_by_you" = "ăƒ«ăƒŒăƒ ćă‚’ć‰Šé™€ă—ăŸă—ăŸ"; "notice_room_topic_removed_by_you" = "ăƒˆăƒ”ăƒƒă‚Żă‚’ć‰Šé™€ă—ăŸă—ăŸ"; "notice_profile_change_redacted_by_you" = "ăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ« %@ă‚’æ›Žæ–°ă—ăŸă—ăŸ"; -"notice_room_created_by_you" = "ăƒ«ăƒŒăƒ ă‚’äœœæˆă—ăŸă—ăŸ"; -"notice_encryption_enabled_ok_by_you" = "あăȘăŸăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ă‚’ă‚Șăƒłă«ă—ăŸă—ăŸă€‚"; -"notice_redaction_by_you" = "ă‚€ăƒ™ăƒłăƒˆă‚’ç·šé›†ă—ăŸă—ăŸ (id: %@)"; +"notice_room_created_by_you" = "ăƒ«ăƒŒăƒ ă‚’äœœæˆă—èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_encryption_enabled_ok_by_you" = "ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ă‚’æœ‰ćŠčă«ă—ăŸă—ăŸă€‚"; +"notice_redaction_by_you" = "ă‚€ăƒ™ăƒłăƒˆă‚’ç·šé›†ă—ăŸă—ăŸïŒˆid%@"; "resume_call" = "憍開"; "notice_room_history_visible_to_members_from_joined_point_for_dm" = "%@ăŒä»ŠćŸŒăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ă€Œć…šć“Ą ïŒˆć‚ćŠ ă—ăŸæ™‚ç‚čä»„é™ïŒ‰ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; "notice_room_history_visible_to_members_from_invited_point_for_dm" = "%@ăŒä»ŠćŸŒăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ă€ŒăƒĄăƒłăƒăƒŒăźăż ïŒˆæ‹›ćŸ…ă•ă‚ŒăŸæ™‚ç‚čä»„é™ïŒ‰ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; @@ -1575,39 +1575,39 @@ // Mark: - Polls "poll_edit_form_create_poll" = "ă‚ąăƒłă‚±ăƒŒăƒˆă‚’äœœæˆ"; -"poll_timeline_vote_not_registered_subtitle" = "ç”łă—èšłă‚ă‚ŠăŸă›ă‚“ăŒæŠ•ç„šăŒç™»éŒČă•ă‚ŒăŠă„ăŸă›ă‚“ă€ć†ćșŠăŠè©Šă—ăă ă•ă„"; -"poll_timeline_vote_not_registered_title" = "æŠ•ç„šăŒç™»éŒČă•ă‚ŒăŠă„ăŸă›ă‚“"; +"poll_timeline_vote_not_registered_subtitle" = "æŠ•ç„šă§ăăŸă›ă‚“ă§ă—ăŸă€‚ă‚‚ă†äž€ćșŠă‚„ă‚Šç›Žă—ăŠăă ă•ă„"; +"poll_timeline_vote_not_registered_title" = "æŠ•ç„šă§ăăŸă›ă‚“ă§ă—ăŸ"; "poll_timeline_total_final_results" = "ćˆèšˆ%luç„šăźæŠ•ç„šă«ćŸșă„ăæœ€ç”‚ç”æžœ"; "poll_timeline_total_final_results_one_vote" = "ćˆèšˆ1ç„šăźæŠ•ç„šă«ćŸșă„ăæœ€ç”‚ç”æžœ"; -"poll_timeline_total_votes_not_voted" = "ćˆèšˆ%luç„šă€æŠ•ç„šă™ă‚‹ăšç”æžœă‚’çąșèȘă§ăăŸă™"; -"poll_timeline_total_one_vote_not_voted" = "ćˆèšˆ1ç„šă€æŠ•ç„šă™ă‚‹ăšç”æžœă‚’çąșèȘă§ăăŸă™"; +"poll_timeline_total_votes_not_voted" = "ćˆèšˆ%luç„šă€‚æŠ•ç„šă™ă‚‹ăšç”æžœă‚’çąșèȘă§ăăŸă™"; +"poll_timeline_total_one_vote_not_voted" = "ćˆèšˆ1ç„šă€‚æŠ•ç„šă™ă‚‹ăšç”æžœă‚’çąșèȘă§ăăŸă™"; "poll_timeline_total_votes" = "ćˆèšˆ%luç„š"; "poll_timeline_total_one_vote" = "ćˆèšˆ1ç„š"; "biometrics_cant_unlocked_alert_message_retry" = "ć†è©ŠèĄŒ"; "biometrics_usage_reason" = "ケプăƒȘă‚’é–‹ăă«ăŻèȘèšŒăŒćż…èŠă§ă™"; "settings_sending_media" = "ç”»ćƒăšć‹•ç”»ăźé€äżĄ"; -"invite_friends_share_text" = "%@ ă§ăźé€Łç”Ąć…ˆ: %@"; +"invite_friends_share_text" = "%@ă§ăŠè©±ă—ă—ăŸă—ă‚‡ă†ïŒš%@"; "side_menu_action_invite_friends" = "ć‹ă ăĄă‚’æ‹›ćŸ…"; "call_more_actions_change_audio_device" = "ă‚ȘăƒŒăƒ‡ă‚Łă‚Șăƒ‡ăƒă‚€ă‚čă‚’ć€‰æ›Ž"; "call_more_actions_dialpad" = "ăƒ€ă‚€ăƒ€ăƒ«ăƒ‘ăƒƒăƒ‰"; -"onboarding_splash_login_button_title" = "æ—ąă«ă‚ąă‚«ă‚Šăƒłăƒˆă‚’æŒăŁăŠă„ăŸă™"; +"onboarding_splash_login_button_title" = "æ—ąă«ă‚ąă‚«ă‚ŠăƒłăƒˆăŒă‚ă‚ŠăŸă™"; // Onboarding "onboarding_splash_register_button_title" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’äœœæˆ"; -"notice_room_created_by_you_for_dm" = "ć‚ćŠ ă—ăŸă—ăŸ"; -"notice_room_created_for_dm" = "%@ăŒć‚ćŠ ă—ăŸă—ăŸ"; +"notice_room_created_by_you_for_dm" = "ć‚ćŠ ă—ăŸă—ăŸă€‚"; +"notice_room_created_for_dm" = "%@ăŒć‚ćŠ ă—ăŸă—ăŸă€‚"; "onboarding_use_case_existing_server_button" = "ă‚”ăƒŒăƒăƒŒă«æŽ„ç¶š"; "callbar_only_single_active_group" = "ă‚żăƒƒăƒ—ă—ăŠă‚°ăƒ«ăƒŒăƒ—é€šè©±ă«ć‚ćŠ  (%@)"; -"settings_confirm_media_size" = "é€äżĄæ™‚ăźă‚”ă‚€ă‚șçąșèȘ"; -"settings_confirm_media_size_description" = "ă“ăźæ©Ÿèƒœă‚’ă‚Șăƒłă«ă™ă‚‹ăšă€ç”»ćƒă‚„ć‹•ç”»ă‚’ă©ăźă‚”ă‚€ă‚șで送信するかçąșèȘă™ă‚‹ç”»éąăŒèĄšç€șă•ă‚ŒăŸă™ă€‚"; -"settings_contacts_enable_sync_description" = "IDă‚”ăƒŒăƒăƒŒă‚’äœżç”šă—ăŠé€Łç”Ąć…ˆă‚’æŽąă™ăšćŒæ™‚ă«ă€é€Łç”Ąć…ˆăŒă‚ăȘăŸă‚’æŽąă›ă‚‹ă‚ˆă†ă«ă—ăŸă™ă€‚"; -"home_syncing" = "ćŒæœŸäž­"; +"settings_confirm_media_size" = "é€äżĄæ™‚ă«ă‚”ă‚€ă‚șをçąșèȘ"; +"settings_confirm_media_size_description" = "ă“ăźæ©Ÿèƒœă‚’ă‚Șăƒłă«ă™ă‚‹ăšă€ç”»ćƒă‚„ć‹•ç”»ă‚’ă©ăźă‚”ă‚€ă‚șで送信するかçąșèȘă™ă‚‹ç”»éąă‚’èĄšç€șă—ăŸă™ă€‚"; +"settings_contacts_enable_sync_description" = "IDă‚”ăƒŒăƒăƒŒă‚’äœżç”šă™ă‚‹ăšă€é€Łç”Ąć…ˆă‚’æŽąă—ăŸă‚Šă€ç›žæ‰‹ăŒă‚ăȘăŸă‚’æŽąă—ăŸă‚Šă§ăă‚‹ă‚ˆă†ă«ăȘă‚ŠăŸă™ă€‚"; +"home_syncing" = "ćŒæœŸă—ăŠă„ăŸă™"; "search_filter_placeholder" = "ç”žă‚ŠèŸŒă‚€"; // MARK: - Share invite link "share_invite_link_action" = "æ‹›ćŸ…ăƒȘăƒłă‚Żă‚’ć…±æœ‰"; -"room_intro_cell_information_room_with_topic_sentence2" = "トピック: %@"; +"room_intro_cell_information_room_with_topic_sentence2" = "ăƒˆăƒ”ăƒƒă‚ŻïŒš%@"; "room_intro_cell_information_room_sentence1_part3" = "ăźć§‹ăŸă‚Šă§ă™ă€‚ "; "room_intro_cell_information_room_sentence1_part1" = "ここが "; "room_intro_cell_information_dm_sentence1_part1" = "ここが "; @@ -1616,23 +1616,23 @@ "spaces_add_space_title" = "ă‚čăƒšăƒŒă‚čă‚’äœœæˆ"; "spaces_creation_address" = "ケドレă‚č"; "spaces_creation_visibility_message" = "æ—ąć­˜ăźă‚čăƒšăƒŒă‚čă«ć‚ćŠ ă™ă‚‹ă«ăŻă€æ‹›ćŸ…ăŒćż…èŠă§ă™ă€‚"; -"spaces_creation_footer" = "ă“ăźèš­ćźšăŻćŸŒă‹ă‚‰ć€‰æ›Žă§ăăŸă™"; -"onboarding_display_name_hint" = "ă“ăźèš­ćźšăŻćŸŒă‹ă‚‰ć€‰æ›Žă§ăăŸă™"; +"spaces_creation_footer" = "ă“ă‚ŒăŻćŸŒă‹ă‚‰ć€‰æ›Žă§ăăŸă™"; +"onboarding_display_name_hint" = "ă“ă‚ŒăŻćŸŒă‹ă‚‰ć€‰æ›Žă§ăăŸă™"; "spaces_creation_visibility_title" = "äœœæˆă™ă‚‹ă‚čăƒšăƒŒă‚čăźçšźéĄžă‚’éžæŠžă—ăŠăă ă•ă„"; -"space_public_join_rule_detail" = "èȘ°ă§ă‚‚ć‚ćŠ ćŻèƒœă€ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒć‘ă‘"; -"space_private_join_rule_detail" = "æ‹›ćŸ…è€…ăźăżć‚ćŠ ćŻèƒœă€ć€‹äșșă‚„ăƒăƒŒăƒ ć‘ă‘"; -"onboarding_use_case_title" = "èȘ°ăšè©±ă™ă“ăšăŒäž€ç•Șć€šă„ă§ă™ă‹ïŒŸ"; +"space_public_join_rule_detail" = "èȘ°ă§ă‚‚ć‚ćŠ ćŻèƒœă€‚ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒć‘ă‘"; +"space_private_join_rule_detail" = "æ‹›ćŸ…è€…ăźăżć‚ćŠ ćŻèƒœă€‚ć€‹äșșă‚„ăƒăƒŒăƒ ć‘ă‘"; +"onboarding_use_case_title" = "èȘ°ăšæœ€ă‚‚ă‚ˆăäŒšè©±ă—ăŸă™ă‹ïŒŸ"; "onboarding_splash_page_4_message" = "ElementăŻè·ć Žćˆ©ç”šă«ă‚‚æœ€é©ă§ă™ă€‚äž–ç•Œă§æœ€ă‚‚ćź‰ć…šăȘ甄çč”ă«ă‚ˆăŁăŠäżĄé Œă•ă‚ŒăŠă„ăŸă™ă€‚"; -"onboarding_splash_page_4_title_no_pun" = "ăƒăƒŒăƒ ăźăŸă‚ăźăƒĄăƒƒă‚»ăƒŒă‚žăƒłă‚°ă€‚"; -"onboarding_splash_page_3_message" = "E2Eă§æš—ć·ćŒ–ă•ă‚ŒăŠăŠă‚Šă€ç™»éŒČă«é›»è©±ç•Șć·ăŻäžèŠă§ă™ă€‚ćșƒć‘Šă‚‚ăƒ‡ăƒŒă‚żćŽé›†ă‚‚ă‚ă‚ŠăŸă›ă‚“ă€‚"; -"onboarding_splash_page_3_title" = "漉慹ăȘăƒĄăƒƒă‚»ăƒŒă‚žă€‚"; -"onboarding_splash_page_2_message" = "ăƒ‡ăƒŒă‚żăŒă©ă“ă«äżć­˜ă•ă‚Œă‚‹ă‹ă‚’è‡Șćˆ†ă§éžăłă€äž»ć°Žæš©ăšç‹Źç«‹ă‚’æ‰‹ă«ć…„ă‚Œă‚ˆă†ă€‚Matrixă§æŽ„ç¶šă€‚"; -"onboarding_splash_page_2_title" = "äž»ć°Žæš©ăŻă‚ăȘăŸă«ă‚ă‚‹ă€‚"; +"onboarding_splash_page_4_title_no_pun" = "あăȘăŸăźăƒăƒŒăƒ ăźăƒĄăƒƒă‚»ăƒŒă‚žăƒłă‚°ă«ă€‚"; +"onboarding_splash_page_3_message" = "ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰ă§æš—ć·ćŒ–ă•ă‚ŒăŠăŠă‚Šă€ç™»éŒČă«é›»è©±ç•Șć·ăŻäžèŠă§ă™ă€‚ćșƒć‘Šă‚‚ăƒ‡ăƒŒă‚żćŽé›†ă‚‚ă‚ă‚ŠăŸă›ă‚“ă€‚"; +"onboarding_splash_page_3_title" = "漉慹ăȘăƒĄăƒƒă‚»ăƒŒă‚žăźă‚„ă‚Šăšă‚Šă€‚"; +"onboarding_splash_page_2_message" = "äŒšè©±ăźäżć­˜ć…ˆă‚’è‡Ș戆でæ±șめられ、è‡Șćˆ†ă§çźĄç†ă§ăă‚‹ç‹Źç«‹ă—ăŸă‚łăƒŸăƒ„ăƒ‹ă‚±ăƒŒă‚·ăƒ§ăƒłă€‚Matrixをもずに。"; +"onboarding_splash_page_2_title" = "äž»ć°Žæš©ă‚’æĄă‚‹ăźăŻă€ă‚ăȘたです。"; "onboarding_splash_page_1_message" = "ă‚Șăƒłăƒ©ă‚€ăƒłäžŠă§ă‚‚ćŻŸéąăźäŒšè©±ăšćŒă˜ăƒŹăƒ™ăƒ«ă§ăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒă‚’ćźˆă‚‹ă€ćź‰ć…šă§ç‹Źç«‹ă—ăŸă‚łăƒŸăƒ„ăƒ‹ă‚±ăƒŒă‚·ăƒ§ăƒłă€‚"; -"saving" = "保歘侭"; +"saving" = "äżć­˜ă—ăŠă„ăŸă™"; // Activities -"loading" = "ăƒ­ăƒŒăƒ‰äž­"; +"loading" = "èȘ­ăżèŸŒă‚“ă§ă„ăŸă™"; "confirm" = "çąșèȘ"; "edit" = "線集"; "suggest" = "ゔゞェă‚čト"; @@ -1640,22 +1640,22 @@ "existing" = "æ—ąć­˜"; "new_word" = "新芏"; "stop" = "ćœæ­ą"; -"spaces_creation_post_process_creating_space_task" = "%@ă‚’äœœæˆäž­"; +"spaces_creation_post_process_creating_space_task" = "%@ă‚’äœœæˆă—ăŠă„ăŸă™"; "side_menu_coach_message" = "ćłă«ă‚čăƒŻă‚€ăƒ—ăŸăŸăŻă‚żăƒƒăƒ—ă§ć…šăŠăźăƒ«ăƒŒăƒ ăŒèĄšç€șă•ă‚ŒăŸă™"; -"spaces_creation_post_process_creating_space" = "ă‚čăƒšăƒŒă‚čă‚’äœœæˆäž­"; -"spaces_creation_add_rooms_message" = "こぼă‚čăƒšăƒŒă‚čはあăȘăŸć°‚ç”šăźăŸă‚ă€ä»–ăźäșșă«é€šçŸ„ă•ă‚Œă‚‹ă“ăšăŻă‚ă‚ŠăŸă›ă‚“ă€‚ă“ăźèš­ćźšăŻćŸŒă‹ă‚‰ć€‰æ›Žă§ăăŸă™ă€‚"; -"spaces_creation_add_rooms_title" = "ă©ă‚Œă‚’èżœćŠ ă—ăŸă™ă‹ïŒŸ"; -"spaces_creation_sharing_type_me_and_teammates_detail" = "あăȘăŸăšăƒăƒŒăƒ ăƒĄă‚€ăƒˆăźéžć…Źé–‹ăźă‚čăƒšăƒŒă‚č"; +"spaces_creation_post_process_creating_space" = "ă‚čăƒšăƒŒă‚čă‚’äœœæˆă—ăŠă„ăŸă™"; +"spaces_creation_add_rooms_message" = "これはあăȘた氂甹ぼă‚čăƒšăƒŒă‚čで、他たäșșă‹ă‚‰ăŻèŠ‹ăˆăŸă›ă‚“ă€‚ćŸŒă‹ă‚‰ăƒ«ăƒŒăƒ ă‚„äŒšè©±ă‚’èżœćŠ ă™ă‚‹ă“ăšă‚‚ă§ăăŸă™ă€‚"; +"spaces_creation_add_rooms_title" = "äœ•ă‚’èżœćŠ ă—ăŸă™ă‹ïŒŸ"; +"spaces_creation_sharing_type_me_and_teammates_detail" = "è‡Șćˆ†ăšăƒăƒŒăƒ ăƒĄă‚€ăƒˆăźéžć…Źé–‹ăźă‚čăƒšăƒŒă‚č"; "spaces_creation_sharing_type_me_and_teammates_title" = "è‡Șćˆ†ăšăƒăƒŒăƒ ăƒĄă‚€ăƒˆ"; "spaces_creation_sharing_type_just_me_detail" = "ăƒ«ăƒŒăƒ ă‚’æ•Žç†ă™ă‚‹ăŸă‚ăźéžć…Źé–‹ăźă‚čăƒšăƒŒă‚č"; "spaces_creation_sharing_type_just_me_title" = "è‡Ș戆氂甹"; -"spaces_creation_sharing_type_message" = "ć‚ćŠ è€…ă‚’éžæŠžă—ăŠăă ă•ă„%@ă€‚ă“ăźèš­ćźšăŻćŸŒă‹ă‚‰ć€‰æ›Žă§ăăŸă™ă€‚"; -"spaces_creation_settings_message" = "è©łçŽ°ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚ă“ăźèš­ćźšăŻćŸŒă‹ă‚‰ć€‰æ›Žă§ăăŸă™ă€‚"; -"spaces_creation_address_default_message" = "ă‚čăƒšăƒŒă‚čăŻä»„äž‹ăźă‚ˆă†ă«èĄšèš˜ă•ă‚ŒăŸă™\n%@"; -"space_settings_current_address_message" = "ă‚čăƒšăƒŒă‚čăŻä»„äž‹ăźă‚ˆă†ă«èĄšèš˜ă•ă‚ŒăŸă™\n%@"; -"space_topic" = "èȘŹæ˜Žæ–‡"; -"spaces_creation_cancel_message" = "é€Čæ—çŠ¶æłăŻć€±ă‚ă‚ŒăŸă™ă€‚"; -"spaces_creation_cancel_title" = "ă‚čăƒšăƒŒă‚čăźäœœæˆă‚’ćœæ­ąă—ăŸă™ă‹ïŒŸ"; +"spaces_creation_sharing_type_message" = "é©ćˆ‡ăȘäșșが %@ ă‚ąă‚Żă‚»ă‚čできるこべをçąșèȘă—ăŠăă ă•ă„ă€‚ă“ăźèš­ćźšăŻćŸŒă‹ă‚‰ć€‰æ›Žă§ăăŸă™ă€‚"; +"spaces_creation_settings_message" = "è©łçŽ°ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚ă“ă‚ŒăŻă„ă€ă§ă‚‚ć€‰æ›Žă§ăăŸă™ă€‚"; +"spaces_creation_address_default_message" = "ă‚čăƒšăƒŒă‚čは仄䞋でé–ČèŠ§ćŻèƒœă«ăȘă‚ŠăŸă™\n%@"; +"space_settings_current_address_message" = "ă‚čăƒšăƒŒă‚čは仄䞋でé–ČèŠ§ă§ăăŸă™\n%@"; +"space_topic" = "è©łçŽ°"; +"spaces_creation_cancel_message" = "ă“ă‚ŒăŸă§ăźèš­ćźšăŻć€±ă‚ă‚ŒăŸă™ă€‚"; +"spaces_creation_cancel_title" = "ă‚čăƒšăƒŒă‚čăźäœœæˆă‚’äž­æ­ąă—ăŸă™ă‹ïŒŸ"; "create_room_section_footer_type_private" = "æ‹›ćŸ…ă—ăŸäșșăźăżăŒæ€œçŽąăƒ»ć‚ćŠ ă§ăăŸă™ă€‚"; // MARK: - Searchable Directory View Controller @@ -1668,8 +1668,8 @@ // MARK: Sign out warning "sign_out_existing_key_backup_alert_title" = "ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; -"find_your_contacts_message" = "%@ であăȘăŸăźé€Łç”Ąć…ˆă‚’èĄšç€șă—ă€çŸ„äșșăšăźăƒăƒŁăƒƒăƒˆă‚’çŽ æ—©ăć§‹ă‚ăŸă™ă€‚"; -"find_your_contacts_footer" = "ă“ăźèš­ćźšăŻă„ă€ă§ă‚‚ç„ĄćŠčă«ă§ăăŸă™"; +"find_your_contacts_message" = "%@であăȘăŸăźé€Łç”Ąć…ˆă‚’èĄšç€șă—ă€çŸ„äșșăšăźäŒšè©±ă‚’ă™ăć§‹ă‚ă‚‰ă‚Œă‚‹ă‚ˆă†ă«ă—ăŸă—ă‚‡ă†ă€‚"; +"find_your_contacts_footer" = "ă“ăźèš­ćźšăŻă„ă€ă§ă‚‚ç„ĄćŠčă«ă§ăăŸă™ă€‚"; "find_your_contacts_button_title" = "é€Łç”Ąć…ˆă‚’æ€œçŽą"; "find_your_contacts_title" = "é€Łç”Ąć…ˆă‚’ăƒȘă‚čトケップ"; @@ -1679,7 +1679,7 @@ // MARK: - Invite friends -"invite_friends_action" = "揋だちを %@ ă«æ‹›ćŸ…"; +"invite_friends_action" = "揋達を%@ă«æ‹›ćŸ…"; "call_transfer_error_title" = "ă‚šăƒ©ăƒŒ"; "home_context_menu_mark_as_read" = "æ—ąèȘ­ă«ă™ă‚‹"; "home_context_menu_normal_priority" = "通澾ć„Ș慈ćșŠ"; @@ -1689,34 +1689,34 @@ // MARK: - Call Transfer "call_transfer_title" = "è»ąé€"; -"room_info_back_button_title" = "ăƒ«ăƒŒăƒ æƒ…ć ±"; +"room_info_back_button_title" = "ăƒ«ăƒŒăƒ ăźæƒ…ć ±"; "create_room_processing" = "ăƒ«ăƒŒăƒ ă‚’äœœæˆă—ăŠă„ăŸă™"; "call_transfer_users" = "ăƒŠăƒŒă‚¶ăƒŒ"; "home_context_menu_notifications" = "通矄"; "home_context_menu_make_dm" = "é€Łç”Ąć…ˆă«ç§»ć‹•"; "home_context_menu_make_room" = "ăƒ«ăƒŒăƒ ă«ç§»ć‹•"; -"leave_space_title" = "%@ を退ć‡ș"; -"room_participants_leave_success" = "ăƒ«ăƒŒăƒ ă‚’é€€ć‡șă—ăŸă—ăŸ"; +"leave_space_title" = "%@から退ć‡ș"; +"room_participants_leave_success" = "ăƒ«ăƒŒăƒ ă‹ă‚‰é€€ć‡șă—ăŸă—ăŸ"; "room_participants_leave_processing" = "退ć‡șă—ăŠă„ăŸă™"; "event_formatter_group_call_leave" = "退ć‡ș"; "home_context_menu_leave" = "退ć‡ș"; // Mark: Leave space -"leave_space_action" = "ă‚čăƒšăƒŒă‚čを退ć‡ș"; +"leave_space_action" = "ă‚čăƒšăƒŒă‚čから退ć‡ș"; "leave_space_selection_title" = "ăƒ«ăƒŒăƒ ă‚’éžæŠž"; "create_room_section_footer_type_restricted" = "èȘ°ă§ă‚‚ă‚čăƒšăƒŒă‚čćă§æ€œçŽąăƒ»ć‚ćŠ ă§ăăŸă™ă€‚"; -"create_room_suggest_room" = "ă‚čăƒšăƒŒă‚čăƒĄăƒłăƒăƒŒă«ăŠă™ă™ă‚"; +"create_room_suggest_room" = "ă‚čăƒšăƒŒă‚čăźăƒĄăƒłăƒăƒŒăžăźăŠă™ă™ă‚"; "create_room_show_in_directory_footer" = "他たäșșăŒæ€œçŽąăƒ»ć‚ćŠ ă§ăă‚‹ă‚ˆă†ă«ăȘă‚ŠăŸă™ă€‚"; -"create_room_promotion_header" = "PR"; +"create_room_promotion_header" = "ăƒ—ăƒ­ăƒąăƒŒăƒˆ"; "searchable_directory_search_placeholder" = "ćć‰ăŸăŸăŻ ID"; "room_suggestion_settings_screen_title" = "ă‚čăƒšăƒŒă‚čă«ăŠă™ă™ă‚ăźăƒ«ăƒŒăƒ ă‚’äœœæˆ"; -"room_suggestion_settings_screen_message" = "ăŠă™ă™ă‚ăźăƒ«ăƒŒăƒ ăŻă€ă‚čăƒšăƒŒă‚čăƒĄăƒłăƒăƒŒă«ć‚ćŠ ă‚’æŽšć„šă™ă‚‹ă‚‚ăźăšă—ăŠ PR ă•ă‚ŒăŸă™ă€‚"; +"room_suggestion_settings_screen_message" = "ăŠă™ă™ă‚ăźăƒ«ăƒŒăƒ ăŻă€ă‚čăƒšăƒŒă‚čăźăƒĄăƒłăƒăƒŒă«ćŻŸă—ăŠć‚ćŠ ć€™èŁœăšă—ăŠèĄšç€șă•ă‚ŒăŸă™ă€‚"; // Room suggestion Settings "room_suggestion_settings_screen_nav_title" = "ăŠă™ă™ă‚ăźăƒ«ăƒŒăƒ "; -"room_details_promote_room_suggest_title" = "ă‚čăƒšăƒŒă‚čăƒĄăƒłăƒăƒŒăžăźăŠă™ă™ă‚"; -"settings_default" = "ăƒ‡ăƒ•ă‚©ăƒ«ăƒˆăźé€šçŸ„"; +"room_details_promote_room_suggest_title" = "ă‚čăƒšăƒŒă‚čăźăƒĄăƒłăƒăƒŒăžăźăŠă™ă™ă‚"; +"settings_default" = "é€šçŸ„ăźăƒ‡ăƒ•ă‚©ăƒ«ăƒˆ"; "pin_protection_reset_alert_action_reset" = "ăƒȘă‚»ăƒƒăƒˆ"; "authentication_recaptcha_title" = "あăȘたはäșșé–“ă§ă™ă‹ïŒŸ"; "authentication_verify_msisdn_waiting_button" = "ă‚łăƒŒăƒ‰ă‚’ć†é€äżĄ"; @@ -1730,24 +1730,24 @@ "password_validation_error_contain_uppercase_letter" = "ć€§æ–‡ć­—ă‚’ć«ă‚ă‚‹"; "password_validation_error_contain_lowercase_letter" = "ć°æ–‡ć­—ă‚’ć«ă‚ă‚‹"; /* The placeholder will show a number */ -"password_validation_error_max_length" = "%d æ–‡ć­—ä»„äž‹"; +"password_validation_error_max_length" = "%dæ–‡ć­—ä»„äž‹"; /* The placeholder will show a number */ -"password_validation_error_min_length" = "%d æ–‡ć­—ä»„äžŠ"; +"password_validation_error_min_length" = "%dæ–‡ć­—ä»„äžŠ"; // MARK: Password Validation -"password_validation_info_header" = "ä»„äž‹ăźæĄä»¶ă‚’æș€ăŸă™ăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’èš­ćźšă—ăŠăă ă•ă„:"; +"password_validation_info_header" = "ä»„äž‹ăźæĄä»¶ă‚’æș€ăŸă™ăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’èš­ćźšă—ăŠăă ă•ă„ïŒš"; "space_selector_empty_view_title" = "ăŸă ă‚čăƒšăƒŒă‚čăŒă‚ă‚ŠăŸă›ă‚“"; -"all_chats_empty_list_placeholder_title" = "æœȘèȘ­ăŻă‚ă‚ŠăŸă›ă‚“"; +"all_chats_empty_list_placeholder_title" = "æœȘèȘ­ăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; "all_chats_empty_unreads_placeholder_message" = "æœȘèȘ­ăźăƒĄăƒƒă‚»ăƒŒă‚žăŒă‚ă‚‹ć ŽćˆăŻă€ă“ă“ă«èĄšç€șă•ă‚ŒăŸă™ă€‚"; -"room_notifs_settings_account_settings" = "ă‚ąă‚«ă‚Šăƒłăƒˆèš­ćźš"; +"room_notifs_settings_account_settings" = "ă‚ąă‚«ă‚Šăƒłăƒˆăźèš­ćźš"; "room_access_settings_screen_upgrade_alert_upgrading" = "ăƒ«ăƒŒăƒ ă‚’ă‚ąăƒƒăƒ—ă‚°ăƒŹăƒŒăƒ‰ă—ăŠă„ăŸă™"; "room_access_settings_screen_upgrade_alert_upgrade_button" = "ă‚ąăƒƒăƒ—ă‚°ăƒŹăƒŒăƒ‰"; "room_access_settings_screen_edit_spaces" = "ă‚čăƒšăƒŒă‚čを線集"; "room_access_settings_screen_upgrade_required" = "ă‚ąăƒƒăƒ—ă‚°ăƒŹăƒŒăƒ‰ăŒćż…èŠ"; "room_access_settings_screen_upgrade_alert_title" = "ăƒ«ăƒŒăƒ ă‚’ă‚ąăƒƒăƒ—ă‚°ăƒŹăƒŒăƒ‰"; "room_access_settings_screen_public_message" = "èȘ°ă§ă‚‚æ€œçŽąăƒ»ć‚ćŠ ă§ăăŸă™ă€‚"; -"room_access_settings_screen_private_message" = "æ‹›ćŸ…ă•ă‚ŒăŸäșșă ă‘ăŒæ€œçŽąăƒ»ć‚ćŠ ă§ăăŸă™ă€‚"; -"room_access_settings_screen_message" = "èȘ°ăŒ %@ ă‚’æ€œçŽąăƒ»ć‚ćŠ ă§ăă‚‹ă‹éžæŠžă—ăŠăă ă•ă„ă€‚"; +"room_access_settings_screen_private_message" = "æ‹›ćŸ…ă•ă‚ŒăŸäșșăźăżæ€œçŽąăƒ»ć‚ćŠ ă§ăăŸă™ă€‚"; +"room_access_settings_screen_message" = "èȘ°ăŒ%@ă‚’æ€œçŽąăƒ»ć‚ćŠ ă§ăă‚‹ă‹éžæŠžă—ăŠăă ă•ă„ă€‚"; "space_settings_access_section" = "こぼă‚čăƒšăƒŒă‚čにスクセă‚čできるäșșăŻïŒŸ"; "room_access_settings_screen_title" = "ă“ăźăƒ«ăƒŒăƒ ă«ă‚ąă‚Żă‚»ă‚čできるäșșăŻïŒŸ"; "room_notifs_settings_none" = "ăȘし"; @@ -1770,12 +1770,12 @@ "space_selector_empty_view_information" = "ă‚čăƒšăƒŒă‚čăŻă€ăƒ«ăƒŒăƒ ăšé€Łç”Ąć…ˆă‚’ăŸăšă‚ă‚‹æ–čæł•ă§ă™ă€‚ăŻă˜ă‚ă«ă€ă‚čăƒšăƒŒă‚čă‚’äœœæˆă—ăŸă—ă‚‡ă†ă€‚"; "all_chats_all_filter" = "慹ど"; "all_chats_edit_layout_recents" = "ć±„æ­Ž"; -"all_chats_edit_layout_unreads" = "æœȘèȘ­"; -"all_chats_section_title" = "チャット"; +"all_chats_edit_layout_unreads" = "æœȘèȘ­ă‚ă‚Š"; +"all_chats_section_title" = "䌚話"; // Mark: - All Chats -"all_chats_title" = "慹どぼチャット"; +"all_chats_title" = "ć…šăŠăźäŒšè©±"; "location_sharing_live_loading" = "äœçœźæƒ…ć ±ïŒˆăƒ©ă‚€ăƒ–ïŒ‰ă‚’èȘ­ăżèŸŒă‚“ă§ă„ăŸă™â€Š"; "location_sharing_live_list_item_stop_sharing_action" = "ćœæ­ą"; "location_sharing_live_list_item_current_user_display_name" = "あăȘた"; @@ -1789,7 +1789,7 @@ "location_sharing_live_share_title" = "äœçœźæƒ…ć ±ïŒˆăƒ©ă‚€ăƒ–ïŒ‰ă‚’ć…±æœ‰"; "service_terms_modal_decline_button" = "æ‹’ćŠ"; "service_terms_modal_accept_button" = "ćŒæ„"; -"service_terms_modal_description_identity_server" = "ă“ăźæ“äœœă«ă‚ˆă‚Šă€ç«Żæœ«ăźé€Łç”Ąć…ˆă«ă‚ăȘăŸăźé›»è©±ç•Șć·ă‚„é›»ć­ăƒĄăƒŒăƒ«ă‚’äżć­˜ă—ăŠă„ă‚‹äșșがあăȘăŸă‚’æ€œçŽąă§ăă‚‹ă‚ˆă†ă«ăȘă‚ŠăŸă™ă€‚"; +"service_terms_modal_description_identity_server" = "ă“ă‚Œă«ă‚ˆă‚Šă€ç«Żæœ«ăźé€Łç”Ąć…ˆă«ă‚ăȘăŸăźé›»è©±ç•Șć·ă‚„é›»ć­ăƒĄăƒŒăƒ«ă‚’äżć­˜ă—ăŠă„ă‚‹äșșが、あăȘăŸă‚’æ€œçŽąă§ăă‚‹ă‚ˆă†ă«ăȘă‚ŠăŸă™ă€‚"; // Service terms "service_terms_modal_title_message" = "ç¶šèĄŒă™ă‚‹ă«ăŻă€ä»„äž‹ăźćˆ©ç”šèŠçŽ„ă«ćŒæ„ă—ăŠăă ă•ă„"; @@ -1797,7 +1797,1030 @@ // Alert explaining what an identity server / integration manager is. "service_terms_modal_information_title_identity_server" = "IDă‚”ăƒŒăƒăƒŒ"; -"location_sharing_invalid_power_level_message" = "äœçœźæƒ…ć ±ïŒˆăƒ©ă‚€ăƒ–ïŒ‰ăźć…±æœ‰ă«ăŻé©ćˆ‡ăȘæš©é™ăŒćż…èŠă§ă™ă€‚"; +"location_sharing_invalid_power_level_message" = "ă“ăźăƒ«ăƒŒăƒ ă§ăźäœçœźæƒ…ć ±ïŒˆăƒ©ă‚€ăƒ–ïŒ‰ăźć…±æœ‰ă«ăŻé©ćˆ‡ăȘæš©é™ăŒćż…èŠă§ă™ă€‚"; "location_sharing_live_error" = "äœçœźæƒ…ć ±ïŒˆăƒ©ă‚€ăƒ–ïŒ‰ăźă‚šăƒ©ăƒŒ"; -"all_chats_onboarding_page_title3" = "ăƒ•ă‚ŁăƒŒăƒ‰ăƒăƒƒă‚Żă‚’é€äżĄ"; "all_chats_edit_layout" = "ăƒŹă‚€ă‚ąă‚Šăƒˆăźèš­ćźš"; + +// Crypto +"e2e_enabling_on_app_update" = "%@ăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰ăźæš—ć·ćŒ–ă«ćŻŸćżœă—ăŸă—ăŸăŒă€æœ‰ćŠčă«ă™ă‚‹ă«ăŻć†ćșŠăƒ­ă‚°ă‚€ăƒłă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚\n\nケプăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźèš­ćźšă‹ă‚‰ä»Šă™ăă€ă‚‚ă—ăăŻćŸŒă§èĄŒă†ă“ăšăŒă§ăăŸă™ă€‚"; +"analytics_prompt_stop" = "ć…±æœ‰ă‚’ćœæ­ą"; +"analytics_prompt_not_now" = "ćŸŒă§"; +"analytics_prompt_point_3" = "ă“ă‚ŒăŻă„ă€ă§ă‚‚èš­ćźšă‹ă‚‰ç„ĄćŠčă«ă§ăăŸă™"; +/* Note: The word "don't" is formatted in bold */ +"analytics_prompt_point_2" = "ç§ăŸăĄăŻă€æƒ…ć ±ă‚’çŹŹäž‰è€…ăšć…±æœ‰ă™ă‚‹ă“ăšăŻă‚ă‚ŠăŸă›ă‚“"; +/* Note: The word "don't" is formatted in bold */ +"analytics_prompt_point_1" = "ç§ăŸăĄăŻă€ă‚ąă‚«ă‚Šăƒłăƒˆăźă„ă‹ăȘă‚‹ăƒ‡ăƒŒă‚żă‚‚èš˜éŒČă—ăŸă‚Šćˆ†æžă—ăŸă‚Šă™ă‚‹ă“ăšăŻă‚ă‚ŠăŸă›ă‚“"; +"analytics_prompt_terms_link_upgrade" = "ここ"; +"call_jitsi_unable_to_start" = "ă‚°ăƒ«ăƒŒăƒ—é€šè©±ă‚’é–‹ć§‹ă§ăăŸă›ă‚“"; +"network_offline_message" = "ă‚Șăƒ•ăƒ©ă‚€ăƒłă§ă™ă€‚æŽ„ç¶šă‚’çąșèȘă—ăŠăă ă•ă„ă€‚"; +"network_offline_title" = "ă‚Șăƒ•ăƒ©ă‚€ăƒłă§ă™"; +"event_formatter_group_call_join" = "揂抠"; +"event_formatter_group_call" = "ă‚°ăƒ«ăƒŒăƒ—é€šè©±"; +"event_formatter_call_end_call" = "é€šè©±ă‚’ç”‚äș†"; +"event_formatter_call_retry" = "ć†è©ŠèĄŒ"; +"event_formatter_call_decline" = "æ‹’ćŠ"; +"event_formatter_call_connection_failed" = "æŽ„ç¶šă«ć€±æ•—ă—ăŸă—ăŸ"; +"event_formatter_call_ringing" = "ć‘Œăłć‡șă—ăŠă„ăŸă™â€Š"; +"event_formatter_call_connecting" = "æŽ„ç¶šă—ăŠă„ăŸă™â€Š"; +"call_ringing" = "ć‘Œăłć‡șă—ăŠă„ăŸă™â€Š"; +"room_notifs_settings_manage_notifications" = "é€šçŸ„ăŻ%@ă§çźĄç†ă§ăăŸă™"; +"room_access_settings_screen_upgrade_alert_auto_invite_switch" = "ăƒĄăƒłăƒăƒŒă‚’æ–°ă—ă„ăƒ«ăƒŒăƒ ă«è‡Șć‹•çš„ă«æ‹›ćŸ…"; +"room_access_settings_screen_upgrade_alert_note" = "ă‚ąăƒƒăƒ—ă‚°ăƒŹăƒŒăƒ‰ă™ă‚‹ăšă€ă“ăźăƒ«ăƒŒăƒ ăźæ–°ă—ă„ăƒăƒŒă‚žăƒ§ăƒłăŒäœœæˆă•ă‚ŒăŸă™ă€‚ä»Šă‚ă‚‹ć…šăŠăźăƒĄăƒƒă‚»ăƒŒă‚žăŻă€ă‚ąăƒŒă‚«ă‚€ăƒ–ă—ăŸăƒ«ăƒŒăƒ ă«æź‹ă‚ŠăŸă™ă€‚"; +"room_access_settings_screen_upgrade_alert_message_no_param" = "äžŠäœăźă‚čăƒšăƒŒă‚čに汞するäșșは、èȘ°ă§ă‚‚ă“ăźăƒ«ăƒŒăƒ ă‚’æ€œçŽąă—ă€ć‚ćŠ ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚æ‰‹ć‹•ă§ć…šć“Ąă‚’æ‹›ćŸ…ă™ă‚‹ćż…èŠăŻă‚ă‚ŠăŸă›ă‚“ă€‚ă“ă‚ŒăŻăƒ«ăƒŒăƒ ăźèš­ćźšă‹ă‚‰ă„ă€ă§ă‚‚ć€‰æ›Žă§ăăŸă™ă€‚"; +"room_access_settings_screen_upgrade_alert_message" = "%@に汞するäșșは、èȘ°ă§ă‚‚ă“ăźăƒ«ăƒŒăƒ ă‚’æ€œçŽąă—ă€ć‚ćŠ ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚æ‰‹ć‹•ă§ć…šć“Ąă‚’æ‹›ćŸ…ă™ă‚‹ćż…èŠăŻă‚ă‚ŠăŸă›ă‚“ă€‚ă“ă‚ŒăŻăƒ«ăƒŒăƒ ăźèš­ćźšă‹ă‚‰ă„ă€ă§ă‚‚ć€‰æ›Žă§ăăŸă™ă€‚"; + +// Room Access Settings +"room_access_settings_screen_nav_title" = "ăƒ«ăƒŒăƒ ăžăźă‚ąă‚Żă‚»ă‚č"; +"room_details_polls" = "ă‚ąăƒłă‚±ăƒŒăƒˆăźć±„æ­Ž"; +// User sessions management +"user_sessions_settings" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’çźĄç†"; +"manage_session_sign_out_other_sessions" = "ä»–ăźć…šăŠăźă‚»ăƒƒă‚·ăƒ§ăƒłă‹ă‚‰ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆ"; +"manage_session_rename" = "ă‚»ăƒƒă‚·ăƒ§ăƒłćă‚’ć€‰æ›Ž"; +"manage_session_name_info_link" = "è©łçŽ°ă‚’èĄšç€ș"; +/* The placeholder will be replaces with manage_session_name_info_link */ +"manage_session_name_info" = "ă‚»ăƒƒă‚·ăƒ§ăƒłćăŻé€Łç”Ąć…ˆă«ă‚‚èĄšç€șă•ă‚ŒăŸă™ă€‚%@"; +"manage_session_name_hint" = "ă‚»ăƒƒă‚·ăƒ§ăƒłćă‚’èš­ćźšă™ă‚‹ăšă€ç«Żæœ«ă‚’ă‚ˆă‚Šç°Ąć˜ă«èȘè­˜ă§ăă‚‹ă‚ˆă†ă«ăȘă‚ŠăŸă™ă€‚"; +"security_settings_coming_soon" = "ç”łă—èšłă‚ă‚ŠăŸă›ă‚“ă€‚ă“ăźă‚ąă‚Żă‚·ăƒ§ăƒłăŻ%@ iOSă§ăŻăŸă ćˆ©ç”šă§ăăŸă›ă‚“ă€‚ä»–ăźMatrixăźă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆă‚’äœżăŁăŠèš­ćźšă—ăŠăă ă•ă„ă€‚ć°†æ„çš„ă«ăŻ%@ iOSă§ă‚‚ćźŸèŁ…ă•ă‚Œă‚‹äșˆćźšă§ă™ă€‚"; +"security_settings_secure_backup_reset" = "ć†èš­ćźš"; +"security_settings_secure_backup_info_checking" = "çąșèȘă—ăŠă„ăŸă™â€Š"; +"settings_presence_offline_mode_description" = "有ćŠčă«ă™ă‚‹ăšă€ă“ăźă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłă‚’äœżç”šă—ăŠă„ă‚‹éš›ă«ă‚‚ă€ä»–ăźăƒŠăƒŒă‚¶ăƒŒă«ă‚Șăƒ•ăƒ©ă‚€ăƒłăšă—ăŠèĄšç€șă•ă‚ŒăŸă™ă€‚"; +"settings_presence_offline_mode" = "ă‚Șăƒ•ăƒ©ă‚€ăƒłăƒąăƒŒăƒ‰"; +"settings_enable_room_message_bubbles" = "ćčきć‡șă—ă§ăƒĄăƒƒă‚»ăƒŒă‚žă‚’èĄšç€ș"; +"settings_discovery_accept_terms" = "IDă‚”ăƒŒăƒăƒŒăźćˆ©ç”šèŠçŽ„ă‚’æ‰żè«Ÿ"; +"settings_labs_confirm_crypto_sdk" = "ă“ăźæ©ŸèƒœăŻćźŸéš“æź”éšŽăźăŸă‚ă€äșˆæœŸă—ăŸăšăŠă‚Šă«æ©Ÿèƒœă›ăšă€æ„ć›łă—ăȘă„ç”æžœă‚’ćŒ•ăè”·ă“ă™ćŻèƒœæ€§ăŒă‚ă‚ŠăŸă™ă€‚ă“ăźæ©Ÿèƒœă‚’ç„ĄćŠčă«ă™ă‚‹ă«ăŻă€ăƒ­ă‚°ă‚ąă‚Šăƒˆă—ăŠć†ćșŠăƒ­ă‚°ă‚€ăƒłă—ăŠăă ă•ă„ă€‚è‡Ș戆è‡Șèș«ăźćˆ€æ–­ă§æ…Žé‡ă«äœżăŁăŠăă ă•ă„。"; +"settings_labs_enable_voice_broadcast" = "音棰配信"; +"settings_labs_enable_new_app_layout" = "ケプăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźæ–°ă—ă„ăƒŹă‚€ă‚ąă‚Šăƒˆ"; +"settings_labs_enable_new_client_info_feature" = "ă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆăźćç§°ă€ăƒăƒŒă‚žăƒ§ăƒłă€URLă‚’èš˜éŒČă—ă€ă‚»ăƒƒă‚·ăƒ§ăƒłăƒžăƒăƒŒă‚žăƒŁăƒŒă§ă‚ˆă‚Šćźčæ˜“ă«ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘè­˜ă§ăă‚‹ă‚ˆă†èš­ćźš"; +"settings_labs_enable_new_session_manager" = "æ–°ă—ă„ă‚»ăƒƒă‚·ăƒ§ăƒłăƒžăƒăƒŒă‚žăƒŁăƒŒ"; +"settings_labs_use_only_latest_user_avatar_and_name" = "ăƒŠăƒŒă‚¶ăƒŒăźă‚ąăƒă‚żăƒŒăšćć‰ă‚’ăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­Žă«èĄšç€ș"; +"settings_labs_enable_threads" = "ăƒĄăƒƒă‚»ăƒŒă‚žăźă‚čăƒŹăƒƒăƒ‰æ©Ÿèƒœ"; +"settings_labs_enabled_polls" = "ă‚ąăƒłă‚±ăƒŒăƒˆ"; +"settings_ui_show_redactions_in_room_history" = "ć‰Šé™€ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă«é–ąă™ă‚‹é€šçŸ„ă‚’èĄšç€ș"; +"settings_calls_stun_server_fallback_description" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŒăƒ•ă‚©ăƒŒăƒ«ăƒăƒƒă‚Żç”šăźé€šè©±ă‚ąă‚·ă‚čăƒˆă‚”ăƒŒăƒăƒŒă‚’æäŸ›ă—ăŠă„ăȘい栮搈は %@ ă‚’èš±ćŻïŒˆIPケドレă‚čăŒé€šè©±äž­ă«ć…±æœ‰ă•ă‚ŒăŸă™ïŒ‰ă€‚"; +"settings_callkit_info" = "ăƒ­ăƒƒă‚Żç”»éąă«ç€äżĄă‚’èĄšç€ș。%@ăźç€äżĄăŻă‚·ă‚čăƒ†ăƒ ăźé€šè©±ć±„æ­Žă§çąșèȘă§ăăŸă™ă€‚iCloudăŒæœ‰ćŠčにăȘăŁăŠă„ă‚‹ć Žćˆă€ă“ăźé€šè©±ć±„æ­ŽăŻAppleăšć…±æœ‰ă•ă‚ŒăŸă™ă€‚"; +"settings_notifications_disabled_alert_title" = "é€šçŸ„ăŒç„ĄćŠčです"; +"threads_discourage_information_1" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŒă‚”ăƒăƒŒăƒˆă—ăŠă„ăȘいため、ă‚čăƒŹăƒƒăƒ‰æ©ŸèƒœăŻäžćź‰ćźšă‹ă‚‚ă—ă‚ŒăŸă›ă‚“ă€‚ă‚čăƒŹăƒƒăƒ‰ăźăƒĄăƒƒă‚»ăƒŒă‚žăŒćź‰ćźšă—ăŠèĄšç€șされăȘă„ăŠăă‚ŒăŒă‚ă‚ŠăŸă™ă€‚ "; +"threads_beta_cancel" = "ćŸŒă§"; +"threads_beta_enable" = "è©Šă—ăŠăżă‚‹"; +"threads_beta_information_link" = "è©łçŽ°ă‚’èĄšç€ș"; +"threads_beta_title" = "ă‚čレッド"; +"threads_notice_done" = "äș†è§Ł"; +"threads_notice_title" = "ă‚čăƒŹăƒƒăƒ‰æ©ŸèƒœăŻæ­ŁćŒç‰ˆă«ăȘă‚ŠăŸă—ăŸđŸŽ‰"; +"message_from_a_thread" = "ă‚čレッドから"; +"room_accessibility_record_voice_message" = "éŸłćŁ°ăƒĄăƒƒă‚»ăƒŒă‚žă‚’éŒČ音"; +"room_event_copy_link_info" = "ăƒȘンクをクăƒȘăƒƒăƒ—ăƒœăƒŒăƒ‰ă«ă‚łăƒ”ăƒŒă—ăŸă—ăŸă€‚"; +"room_event_action_end_poll" = "ă‚ąăƒłă‚±ăƒŒăƒˆă‚’ç”‚äș†"; +"room_event_action_remove_poll" = "ă‚ąăƒłă‚±ăƒŒăƒˆă‚’ć‰Šé™€"; +"room_participants_invite_prompt_to_msg" = "%@を%@ă«æ‹›ćŸ…ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"find_your_contacts_identity_service_error" = "IDă‚”ăƒŒăƒăƒŒă«æŽ„ç¶šă§ăăŸă›ă‚“ă€‚"; +"contacts_address_book_permission_denied" = "ç«Żæœ«ăźé›»è©±ćžłă‚’%@がèȘ­ăżć–ă‚‹ă“ăšăŻèš±ćŻă•ă‚ŒăŠă„ăŸă›ă‚“"; +/* The placeholder %1$tu will be replaced with a number and %2$@ with the user's search terms. Note the > at the start indicates "more than 20 results". */ +"directory_search_results_more_than" = ">%2$@ăźæ€œçŽąç”æžœ%1$tu件"; +/* The placeholder %1$tu will be replaced with a number and %2$@ with the user's search terms. */ +"directory_search_results" = "%2$@ăźæ€œçŽąç”æžœ%1$tu件"; +"room_recents_unknown_room_error_message" = "ă“ăźăƒ«ăƒŒăƒ ă‚’ç™șèŠ‹ă§ăăŸă›ă‚“ă€‚ć­˜ćœšă™ă‚‹ă“ăšă‚’çąșèȘă—ăŠăă ă•ă„"; +"room_creation_dm_error" = "ăƒ€ă‚€ăƒŹă‚ŻăƒˆăƒĄăƒƒă‚»ăƒŒă‚žă‚’äœœæˆă§ăăŸă›ă‚“ă§ă—ăŸă€‚æ‹›ćŸ…ă—ăŸă„ăƒŠăƒŒă‚¶ăƒŒă‚’çąșèȘă—、もう䞀ćșŠă‚„ă‚Šç›Žă—ăŠăă ă•ă„ă€‚"; +"password_policy_pwd_in_dict_error" = "パă‚čăƒŻăƒŒăƒ‰ăŒèŸžæ›žă§èŠ‹ă€ă‹ă‚ŠăŸă—ăŸă€‚èš±ćŻă§ăăŸă›ă‚“ă€‚"; + +// MARK: Password policy errors +"password_policy_too_short_pwd_error" = "パă‚čăƒŻăƒŒăƒ‰ăŒçŸ­ă™ăŽăŸă™"; +"password_validation_error_header" = "æŒ‡ćźšă—ăŸăƒ‘ă‚čăƒŻăƒŒăƒ‰ăŻä»„äž‹ăźèŠä»¶ă‚’æș€ăŸă—ăŠă„ăŸă›ă‚“ïŒš"; +"authentication_qr_login_failure_retry" = "もう侀ćșŠè©Šă™"; +"authentication_qr_login_failure_request_denied" = "ăƒȘクスă‚čトはもう侀æ–čăźç«Żæœ«ă§æ‹’ćŠă•ă‚ŒăŸă—ăŸă€‚"; +"authentication_qr_login_failure_invalid_qr" = "QRă‚łăƒŒăƒ‰ăŒäžæ­Łă§ă™ă€‚"; +"authentication_qr_login_loading_waiting_signin" = "ç«Żæœ«ăźă‚”ă‚€ăƒłă‚€ăƒłă‚’ćŸ…æ©Ÿă—ăŠă„ăŸă™ă€‚"; +"authentication_qr_login_loading_connecting_device" = "ç«Żæœ«ă«æŽ„ç¶šă—ăŠă„ăŸă™"; +"authentication_qr_login_confirm_subtitle" = "ä»„äž‹ăźă‚łăƒŒăƒ‰ăŒä»–ăźç«Żæœ«ăšäž€è‡Žă—ăŠă„ă‚‹ă“ăšă‚’çąșèȘă—ăŠăă ă•ă„ïŒš"; +"authentication_qr_login_confirm_title" = "漉慹ăȘæŽ„ç¶šă‚’çąșç«‹ă—ăŸă—ăŸ"; +"authentication_qr_login_scan_title" = "QRă‚łăƒŒăƒ‰ă‚’ă‚čキャン"; +"authentication_qr_login_display_subtitle" = "ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă—ăŸç«Żæœ«ă§ä»„äž‹ăźQRă‚łăƒŒăƒ‰ă‚’ă‚čキャンしどください。"; +"authentication_qr_login_start_title" = "QRă‚łăƒŒăƒ‰ă‚’ă‚čキャン"; +"authentication_terms_policy_url_error" = "éžæŠžă—ăŸé‹ć–¶æ–čé‡ăŒèŠ‹ă€ă‹ă‚ŠăŸă›ă‚“ă§ă—ăŸă€‚ćŸŒă§ă‚‚ă†äž€ćșŠă‚„ă‚Šç›Žă—ăŠăă ă•ă„ă€‚"; +/* The placeholder will show the homeserver's domain */ +"authentication_terms_message" = "%@ăźćˆ©ç”šèŠçŽ„ăšé‹ć–¶æ–č針をçąșèȘă—ăŠăă ă•ă„"; +"authentication_verify_msisdn_invalid_phone_number" = "電話ç•Șć·ăŒäžæ­Łă§ă™"; +/* The placeholder will show the phone number that was entered. */ +"authentication_verify_msisdn_waiting_message" = "ă‚łăƒŒăƒ‰ăŒ%@ă«é€äżĄă•ă‚ŒăŸă—ăŸ"; +"authentication_verify_msisdn_waiting_title" = "電話ç•Șć·ă‚’èȘèšŒă—ăŠăă ă•ă„"; +"authentication_verify_msisdn_otp_text_field_placeholder" = "çąșèȘă‚łăƒŒăƒ‰"; +/* The placeholder will show the homeserver's domain */ +"authentication_verify_msisdn_input_message" = "%@ăŻă‚ąă‚«ă‚ŠăƒłăƒˆăźèȘèšŒăŒćż…èŠă§ă™"; +"authentication_verify_msisdn_input_title" = "電話ç•Șć·ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; +"authentication_choose_password_not_verified_message" = "ăƒĄăƒŒăƒ«ăƒœăƒƒă‚Żă‚čをçąșèȘă—ăŠăă ă•ă„"; +"authentication_choose_password_input_message" = "パă‚čăƒŻăƒŒăƒ‰ăŻ8æ–‡ć­—ä»„äžŠă«èš­ćźšă—ăŠăă ă•ă„"; +"authentication_choose_password_input_title" = "パă‚čăƒŻăƒŒăƒ‰ă‚’éžæŠž"; +"authentication_forgot_password_waiting_button" = "é›»ć­ăƒĄăƒŒăƒ«ă‚’ć†é€äżĄ"; +/* The placeholder will show the email address that was entered. */ +"authentication_forgot_password_waiting_message" = "%@ă«é€äżĄă•ă‚ŒăŸæ‰‹é †ă«ćŸ“ăŁăŠăă ă•ă„ă€‚"; +"authentication_forgot_password_waiting_title" = "é›»ć­ăƒĄăƒŒăƒ«ă‚’çąșèȘă—ăŠăă ă•ă„ă€‚"; +"authentication_forgot_password_text_field_placeholder" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚č"; +/* The placeholder will show the homeserver's domain */ +"authentication_forgot_password_input_message" = "%@はèȘèšŒăƒȘăƒłă‚Żă‚’é€äżĄă—ăŸă™"; +"authentication_forgot_password_input_title" = "é›»ć­ăƒĄăƒŒăƒ«ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; +"authentication_verify_email_waiting_button" = "é›»ć­ăƒĄăƒŒăƒ«ă‚’ć†é€äżĄ"; +"authentication_verify_email_waiting_hint" = "é›»ć­ăƒĄăƒŒăƒ«ăŒć±Šă„ăŠă„ăŸă›ă‚“ă‹ïŒŸ"; +/* The placeholder will show the email address that was entered. */ +"authentication_verify_email_waiting_message" = "%@ă«é€äżĄă•ă‚ŒăŸæ‰‹é †ă«ćŸ“ăŁăŠăă ă•ă„ă€‚"; +"authentication_verify_email_waiting_title" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čをèȘèšŒă—ăŠăă ă•ă„ă€‚"; +"authentication_verify_email_text_field_placeholder" = "ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚č"; +/* The placeholder will show the homeserver's domain */ +"authentication_verify_email_input_message" = "%@ăŻă‚ąă‚«ă‚ŠăƒłăƒˆăźèȘèšŒăŒćż…èŠă§ă™"; +"authentication_verify_email_input_title" = "é›»ć­ăƒĄăƒŒăƒ«ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; +"authentication_cancel_flow_confirmation_message" = "ă‚ąă‚«ă‚ŠăƒłăƒˆăŒăŸă äœœæˆă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚ç™»éŒČă‚’äž­æ­ąă—ăŸă™ă‹ïŒŸ"; +"authentication_server_selection_server_url" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăźURL"; +"authentication_login_with_qr" = "QRă‚łăƒŒăƒ‰ă§ă‚”ă‚€ăƒłă‚€ăƒł"; +"authentication_login_username" = "ăƒŠăƒŒă‚¶ăƒŒć / ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚č / 電話ç•Șć·"; +"authentication_login_title" = "おかえりăȘă•ă„ïŒ"; +"authentication_registration_password_footer" = "8æ–‡ć­—ä»„äžŠă«ă—ăŠăă ă•ă„"; +"authentication_registration_username_footer" = "ă“ă‚ŒăŻćŸŒă‹ă‚‰ć€‰æ›Žă§ăăŸă›ă‚“"; +"authentication_registration_username" = "ăƒŠăƒŒă‚¶ăƒŒć"; + +// MARK: Authentication +"authentication_registration_title" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’äœœæˆ"; +"onboarding_celebration_button" = "é€ČăżăŸă—ă‚‡ă†"; +"onboarding_celebration_message" = "ăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«ăŻèš­ćźšç”»éąă‹ă‚‰ă„ă€ă§ă‚‚æ›Žæ–°ă§ăăŸă™"; +"onboarding_celebration_title" = "ć•éĄŒă‚ă‚ŠăŸă›ă‚“ïŒ"; +"onboarding_avatar_accessibility_label" = "ăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«ç”»ćƒ"; +"onboarding_avatar_title" = "ăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«ç”»ćƒă‚’èżœćŠ "; +"onboarding_display_name_max_length" = "èĄšç€ș損は256ć­—ä»„äž‹ă«ă—ăŠăă ă•ă„"; +"onboarding_display_name_placeholder" = "èĄšç€ș損"; +"onboarding_display_name_message" = "ăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄă™ă‚‹éš›ă«èĄšç€șă•ă‚ŒăŸă™ă€‚"; +"onboarding_display_name_title" = "èĄšç€șćă‚’éžæŠž"; +"onboarding_personalization_skip" = "こぼă‚čテップをă‚čキップ"; +"onboarding_personalization_save" = "äżć­˜ă—ăŠç¶šèĄŒ"; +"onboarding_congratulations_home_button" = "ăƒ›ăƒŒăƒ ă«ç§»ć‹•"; +"onboarding_congratulations_personalize_button" = "ăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«ă‚’èš­ćźš"; +/* The placeholder string contains the user's matrix ID */ +"onboarding_congratulations_message" = "あăȘăŸăźă‚ąă‚«ă‚Šăƒłăƒˆ %@ ăŒäœœæˆă•ă‚ŒăŸă—ăŸ"; +"onboarding_congratulations_title" = "ăŠă‚ă§ăšă†ă”ă–ă„ăŸă™ïŒ"; +"onboarding_use_case_existing_server_message" = "æ—ąć­˜ăźă‚”ăƒŒăƒăƒŒă«ć‚ćŠ ă—ăŸă™ă‹ïŒŸ"; +"onboarding_use_case_skip_button" = "こぼèłȘ敏をă‚čキップ"; +/* The placeholder string contains onboarding_use_case_skip_button as a tappable action */ +"onboarding_use_case_not_sure_yet" = "èż·ăŁăŠă„ăŸă™ă‹ïŒŸ%@"; +"onboarding_use_case_community_messaging" = "ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒ"; +"onboarding_use_case_work_messaging" = "ăƒăƒŒăƒ "; +"onboarding_use_case_personal_messaging" = "ć‹é”ăšćź¶æ—"; +"onboarding_use_case_message" = "みんăȘずçč‹ăŒă‚‹æ‰‹ćŠ©ă‘ă‚’ă„ăŸă—ăŸă™"; +"onboarding_splash_page_1_title" = "è‡Șćˆ†ăźäŒšè©±ăŻă€è‡Ș戆ぼもぼ。"; +"accessibility_selected" = "遞択枈"; +"invite_to" = "%@ă«æ‹›ćŸ…"; +"joining" = "ć‚ćŠ ă—ăŠă„ăŸă™"; +"key_backup_setup_passphrase_passphrase_placeholder" = "パă‚čăƒ•ăƒŹăƒŒă‚șを慄抛"; +"key_backup_setup_passphrase_passphrase_title" = "慄抛"; +"key_backup_setup_passphrase_info" = "é”ăźă‚łăƒ”ăƒŒă‚’æš—ć·ćŒ–ă—ăŠă‚”ăƒŒăƒăƒŒă«äżć­˜ă—ăŸă™ă€‚ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’äżè­·ă™ă‚‹ăŸă‚ă«ăƒ‘ă‚čăƒ•ăƒŹăƒŒă‚șă‚’èš­ćźšă—ăŠăă ă•ă„ă€‚\n\næœ€ć€§é™ăźă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’çąșäżă™ă‚‹ăŸă‚ă«ă€Matrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ăšç•°ăȘă‚‹ă‚‚ăźă«èš­ćźšă™ă‚‹ă“ăšăŒć€§ćˆ‡ă§ă™ă€‚"; + +// Passphrase + +"key_backup_setup_passphrase_title" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă§äżè­·"; +"key_backup_setup_intro_manual_export_action" = "æ‰‹ć‹•ă§é”ă‚’ă‚šă‚Żă‚čăƒăƒŒăƒˆ"; +"key_backup_setup_intro_manual_export_info" = "高ćșŠïŒ‰"; +"key_backup_setup_intro_setup_connect_action_with_existing_backup" = "ă“ăźç«Żæœ«ă‚’é”ăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă«æŽ„ç¶š"; +"key_backup_setup_intro_info" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăŻă€ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰ăźæš—ć·ćŒ–ă«ă‚ˆăŁăŠäżè­·ă•ă‚ŒăŠă„ăŸă™ă€‚ă“ă‚Œă‚‰ăźæš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’èȘ­ă‚€ăŸă‚ăźé”ă‚’æŒăŁăŠă„ă‚‹ăźăŻă€ă‚ăȘăŸăšć—äżĄè€…ă ă‘ă§ă™ă€‚\n\né”ă‚’ć€±ăă•ăȘă„ă‚ˆă†ă€é”ă‚’ćź‰ć…šă«ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŠăă ă•ă„ă€‚"; + +// Intro + +"key_backup_setup_intro_title" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’æ±șă—ăŠć€±ă‚ăȘă„ăŸă‚ă«"; +"key_backup_setup_skip_alert_skip_action" = "ă‚čキップ"; +"key_backup_setup_skip_alert_message" = "ăƒ­ă‚°ă‚ąă‚Šăƒˆă—ăŸă‚Šă“ăźç«Żæœ«ă‚’ć€±ăă—ăŸă‚Šă™ă‚‹ăšă€ăƒĄăƒƒă‚»ăƒŒă‚žă«ă‚ąă‚Żă‚»ă‚čできăȘくăȘă‚‹ćŻèƒœæ€§ăŒă‚ă‚ŠăŸă™ă€‚"; +"key_backup_setup_skip_alert_title" = "ă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; + + +// MARK: Key backup setup + +"key_backup_setup_title" = "é”ăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—"; + +// Banner + +"secure_backup_setup_banner_title" = "ă‚»ă‚­ăƒ„ă‚ąăƒăƒƒă‚Żă‚ąăƒƒăƒ—"; +"secure_key_backup_setup_cancel_alert_message" = "ă„ăŸă‚­ăƒŁăƒłă‚»ăƒ«ă™ă‚‹ăšă€ăƒ­ă‚°ă‚€ăƒłă§ăăȘくăȘăŁăŸéš›ă«ă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăšăƒ‡ăƒŒă‚żă‚’ć€±ăŁăŠă—ăŸă†ćŻèƒœæ€§ăŒă‚ă‚ŠăŸă™ă€‚\n\nèš­ćźšă‹ă‚‰ă€ă‚»ă‚­ăƒ„ă‚ąăƒăƒƒă‚Żă‚ąăƒƒăƒ—ăźèš­ćźšă‚„é”ăźçźĄç†ă‚’èĄŒă†ă“ăšă‚‚ă§ăăŸă™ă€‚"; + + +// Cancel + +"secure_key_backup_setup_cancel_alert_title" = "ă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"secure_key_backup_setup_existing_backup_error_delete_it" = "扊陀"; +"secure_key_backup_setup_existing_backup_error_unlock_it" = "ăƒ­ăƒƒă‚Żă‚’è§Łé™€"; +"secure_key_backup_setup_intro_use_security_passphrase_info" = "あăȘăŸă ă‘ăŒçŸ„ăŁăŠă„ă‚‹ç§˜ćŻ†ăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ç”šă«ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’ç”Ÿæˆă—ăŸă™ă€‚"; +"secure_key_backup_setup_intro_use_security_passphrase_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’äœżç”š"; +"service_terms_modal_table_header_integration_manager" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłăƒžăƒăƒŒă‚žăƒŁăƒŒăźćˆ©ç”šèŠçŽ„"; +"service_terms_modal_table_header_identity_server" = "IDă‚”ăƒŒăƒăƒŒăźćˆ©ç”šèŠçŽ„"; +"service_terms_modal_footer" = "ă“ăźèš­ćźšăŻă„ă€ă§ă‚‚ç„ĄćŠčă«ă§ăăŸă™ă€‚"; +"share_extension_send_now" = "送信"; +"room_widget_permission_room_id_permission" = "ăƒ«ăƒŒăƒ ID"; +"room_widget_permission_widget_id_permission" = "ォィゾェットID"; +"room_widget_permission_theme_permission" = "あăȘăŸăźăƒ†ăƒŒăƒž"; +"room_widget_permission_user_id_permission" = "あăȘăŸăźăƒŠăƒŒă‚¶ăƒŒID"; +"room_widget_permission_avatar_url_permission" = "あăȘăŸăźă‚ąăƒă‚żăƒŒăźURL"; +"room_widget_permission_display_name_permission" = "あăȘăŸăźèĄšç€ș損"; +"room_widget_permission_information_title" = "ă“ă‚Œă‚’äœżç”šă™ă‚‹ăšăƒ‡ăƒŒă‚żăŒ%@ăšć…±æœ‰ă•ă‚Œă‚‹ćŻèƒœæ€§ăŒă‚ă‚ŠăŸă™ïŒš\n"; +"room_widget_permission_webview_information_title" = "ă“ă‚Œă‚’äœżç”šă™ă‚‹ăšă€ă‚Żăƒƒă‚­ăƒŒăŒèš­ćźšă•ă‚Œă€ăƒ‡ăƒŒă‚żăŒ%@ăšć…±æœ‰ă•ă‚Œă‚‹ćŻèƒœæ€§ăŒă‚ă‚ŠăŸă™ïŒš\n"; +"room_widget_permission_creator_info_title" = "ă‚Šă‚Łă‚žă‚§ăƒƒăƒˆă‚’èżœćŠ ă—ăŸäșș"; +"key_backup_setup_passphrase_confirm_passphrase_placeholder" = "パă‚čăƒ•ăƒŹăƒŒă‚șをçąșèȘ"; +"key_backup_setup_passphrase_confirm_passphrase_title" = "çąșèȘ"; +"key_backup_setup_passphrase_set_passphrase_action" = "パă‚čăƒ•ăƒŹăƒŒă‚șă‚’èš­ćźš"; +"key_backup_setup_passphrase_confirm_passphrase_invalid" = "パă‚čăƒ•ăƒŹăƒŒă‚șăŒäž€è‡Žă—ăŸă›ă‚“"; +"key_backup_setup_passphrase_setup_recovery_key_info" = "ăŸăŸăŻă€ăƒȘă‚«ăƒăƒȘăƒŒă‚­ăƒŒă§ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’çąș保し、漉慹ăȘć Žæ‰€ă«äżć­˜ă—ăŠăă ă•ă„ă€‚"; +"key_backup_setup_passphrase_setup_recovery_key_action" = "高ćșŠïŒ‰ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă§èš­ćźš"; + +// Success + +"key_backup_setup_success_title" = "æˆćŠŸă—ăŸă—ăŸïŒ"; +"key_backup_recover_invalid_passphrase_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șăŒæ­Łă—ăă‚ă‚ŠăŸă›ă‚“"; + +// Success from secure backup +"key_backup_setup_success_from_secure_backup_info" = "é”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŠă„ăŸă™ă€‚"; +"key_backup_setup_success_from_passphrase_save_recovery_key_action" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’äżć­˜"; + +// Success from passphrase +"key_backup_setup_success_from_passphrase_info" = "あăȘăŸăźé”ăŻăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă•ă‚ŒăŠă„ăŸă™ă€‚\n\nă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒăŻă‚»ăƒŒăƒ•ăƒ†ă‚ŁăƒŒăƒăƒƒăƒˆăšăȘă‚ŠăŸă™ă€‚ăƒ‘ă‚čăƒ•ăƒŹăƒŒă‚șă‚’ćż˜ă‚ŒăŸć Žćˆă§ă‚‚ă€ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’äœżăˆă°ă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă«ă‚ąă‚Żă‚»ă‚čă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚\n\nă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒăŻă€ăƒ‘ă‚čăƒŻăƒŒăƒ‰ăƒžăƒăƒŒă‚žăƒŁăƒŒïŒˆă‚‚ă—ăăŻé‡‘ćș«ïŒ‰ăźă‚ˆă†ăȘă€éžćžžă«ćź‰ć…šăȘć Žæ‰€ă§äżçźĄă—ăŠăă ă•ă„ă€‚"; +"key_backup_recover_invalid_passphrase" = "こぼパă‚čăƒ•ăƒŹăƒŒă‚șă§ăŻăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’ćŸ©ć·ćŒ–ă§ăăŸă›ă‚“ă§ă—ăŸă€‚æ­Łă—ă„ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’ć…„ćŠ›ă—ăŸă“ăšă‚’çąșèȘă—ăŠăă ă•ă„ă€‚"; +"key_backup_recover_invalid_recovery_key_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒăŒäž€è‡Žă—ăŸă›ă‚“"; + +// Recover from private key +"key_backup_recover_from_private_key_info" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’ćŸ©ć…ƒă—ăŠă„ăŸă™â€Š"; +"key_backup_recover_invalid_recovery_key" = "ă“ăźé”ă§ăŻăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’ćŸ©ć·ćŒ–ă§ăăŸă›ă‚“ă§ă—ăŸă€‚æ­Łă—ă„ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’ć…„ćŠ›ă—ăŸă“ăšă‚’çąșèȘă—ăŠăă ă•ă„ă€‚"; + +// Recover from passphrase + +"key_backup_recover_from_passphrase_info" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’äœżă†ăšă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­Žăźăƒ­ăƒƒă‚Żă‚’è§Łé™€ă§ăăŸă™"; +"key_backup_recover_from_passphrase_lost_passphrase_action_part1" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șăŒćˆ†ă‹ă‚ŠăŸă›ă‚“ă‹ïŒŸăă‚“ăȘべきは "; +"key_backup_recover_from_passphrase_lost_passphrase_action_part3" = "。"; +"key_backup_recover_from_passphrase_lost_passphrase_action_part2" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’äœżă„ăŸă—ă‚‡ă†"; +"key_backup_recover_from_passphrase_recover_action" = "ć±„æ­Žăźăƒ­ăƒƒă‚Żă‚’è§Łé™€"; +"location_sharing_live_timer_selector_title" = "äœçœźæƒ…ć ±ă‚’ć…±æœ‰ă™ă‚‹æœŸé–“ă‚’éžæŠžă—ăŠăă ă•ă„ă€‚"; +"location_sharing_live_timer_selector_short" = "15戆"; +"location_sharing_live_timer_selector_medium" = "1時間"; +"location_sharing_live_timer_selector_long" = "8時間"; +"location_sharing_live_no_user_locations_error_title" = "ăƒŠăƒŒă‚¶ăƒŒăźäœçœźæƒ…ć ±ăŻă‚ă‚ŠăŸă›ă‚“"; +"location_sharing_live_stop_sharing_error" = "äœçœźæƒ…ć ±ăźć…±æœ‰ăźćœæ­ąă«ć€±æ•—ă—ăŸă—ăŸ"; +"location_sharing_live_stop_sharing_progress" = "äœçœźæƒ…ć ±ăźć…±æœ‰ă‚’ćœæ­ą"; +"location_sharing_live_lab_promotion_text" = "æłšæ„ïŒšă“ă‚ŒăŻäž€æ™‚çš„ăȘćźŸèŁ…ă«ă‚ˆă‚‹è©Šéš“æ©Ÿèƒœă§ă™ă€‚ă‚ăȘăŸăźäœçœźæƒ…ć ±ăźć±„æ­ŽăŻăƒ«ăƒŒăƒ ăźăƒĄăƒłăƒăƒŒă«ćŻŸă—ăŠæ°žç¶šçš„ă«é–ČèŠ§ćŻèƒœăšăȘă‚ŠăŸă™ă€‚"; +"location_sharing_live_lab_promotion_title" = "äœçœźæƒ…ć ±ïŒˆăƒ©ă‚€ăƒ–ïŒ‰ăźć…±æœ‰"; +"location_sharing_live_lab_promotion_activation" = "äœçœźæƒ…ć ±ïŒˆăƒ©ă‚€ăƒ–ïŒ‰ăźć…±æœ‰ă‚’æœ‰ćŠčにする"; + +// MARK: User sessions management + +// Parameter is the application display name (e.g. "Element") +"user_sessions_default_session_display_name" = "%@ iOS"; +"user_sessions_overview_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_sessions_overview_security_recommendations_section_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă«é–ąă™ă‚‹ć‹§ć‘Š"; +"user_sessions_overview_security_recommendations_section_info" = "ä»„äž‹ăźć‹§ć‘Šă«ćŸ“ă„ă€ă‚ąă‚«ă‚Šăƒłăƒˆăźă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’æ”čć–„ă—ăŸă—ă‚‡ă†ă€‚"; +"user_sessions_overview_security_recommendations_unverified_title" = "æœȘèȘèšŒăźă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_sessions_overview_security_recommendations_inactive_title" = "非ケクティブăȘă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_sessions_overview_security_recommendations_inactive_info" = "äœżç”šă—ăŠă„ăȘă„ć€ă„ă‚»ăƒƒă‚·ăƒ§ăƒłïŒˆ90æ—„ä»„äžŠäœżç”šă•ă‚ŒăŠă„ăŸă›ă‚“ïŒ‰ă‹ă‚‰ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă™ă‚‹ă“ăšă‚’æ€œèšŽă—ăŠăă ă•ă„ă€‚"; +"user_sessions_overview_other_sessions_section_title" = "ăăźä»–ăźă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_sessions_overview_other_sessions_section_info" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’æœ€ć€§é™ă«é«˜ă‚ă‚‹ă«ăŻă€ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă—ă€äžæ˜ŽăȘă‚»ăƒƒă‚·ăƒ§ăƒłă‚„ćˆ©ç”šă—ăŠă„ăȘă„ă‚»ăƒƒă‚·ăƒ§ăƒłă‹ă‚‰ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă—ăŠăă ă•ă„ă€‚"; +"user_sessions_show_location_info" = "IPケドレă‚čă‚’èĄšç€ș"; +"user_sessions_hide_location_info" = "IPケドレă‚čă‚’èĄšç€șしăȘい"; +"user_sessions_overview_current_session_section_title" = "çŸćœšăźă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_sessions_view_all_action" = "ć…šăŠèĄšç€ș%d"; +"user_session_verified" = "èȘèšŒæžˆăźă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_session_unverified" = "æœȘèȘèšŒăźă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_session_verification_unknown" = "èȘèšŒăźçŠ¶æ…‹ăŒäžæ˜Žă§ă™"; +"user_session_verified_short" = "èȘèšŒæžˆ"; +"user_session_unverified_short" = "æœȘèȘèšŒ"; +"user_session_verification_unknown_short" = "䞍明"; +"user_session_verify_action" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒ"; +"user_session_view_details" = "è©łçŽ°ă‚’èĄšç€ș"; +"major_update_learn_more_action" = "è©łçŽ°ă‚’èĄšç€ș"; +"user_session_learn_more" = "è©łçŽ°ă‚’èĄšç€ș"; +"user_session_verified_additional_info" = "çŸćœšăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻćź‰ć…šăȘăƒĄăƒƒă‚»ăƒŒă‚žăźă‚„ă‚Šăšă‚Šă«ćŻŸćżœă—ăŠă„ăŸă™ă€‚"; +"user_session_unverified_additional_info" = "より漉慹ăȘăƒĄăƒƒă‚»ăƒŒă‚žăźă‚„ă‚Šăšă‚ŠăźăŸă‚ă«ă€çŸćœšăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă—ăŸă—ă‚‡ă†ă€‚"; +"user_other_session_unverified_additional_info" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăšćź‰ćźšæ€§ăźèŠłç‚čă‹ă‚‰ă€ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă™ă‚‹ă‹ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă—ăŠăă ă•ă„ă€‚"; +"user_other_session_permanently_unverified_additional_info" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻæš—ć·ćŒ–ă‚’ă‚”ăƒăƒŒăƒˆă—ăŠă„ăȘいため、èȘèšŒă§ăăŸă›ă‚“。"; +"user_other_session_verified_additional_info" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻćź‰ć…šăȘăƒĄăƒƒă‚»ăƒŒă‚žăźă‚„ă‚Šăšă‚Šăźæș–ć‚™ăŒă§ăăŠă„ăŸă™ă€‚"; +"user_session_push_notifications" = "ăƒ—ăƒƒă‚·ăƒ„é€šçŸ„"; +"user_session_got_it" = "äș†è§Ł"; +"user_session_verified_session_title" = "èȘèšŒæžˆăźă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_session_unverified_session_title" = "æœȘèȘèšŒăźă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_session_inactive_session_title" = "非ケクティブăȘă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_session_rename_session_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłćă‚’ć€‰æ›Ž"; +"user_other_session_security_recommendation_title" = "ăăźä»–ăźă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_other_session_unverified_sessions_header_subtitle" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă™ă‚‹ăšă€ă‚ˆă‚Šćź‰ć…šăȘăƒĄăƒƒă‚»ăƒŒă‚žăźă‚„ă‚Šăšă‚ŠăŒćŻèƒœă«ăȘă‚ŠăŸă™ă€‚èŠ‹èŠšăˆăźăȘă„ă€ăŸăŸăŻäœżç”šă—ăŠă„ăȘă„ă‚»ăƒƒă‚·ăƒ§ăƒłăŒă‚ă‚Œă°ă€ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă—ăŸă—ă‚‡ă†ă€‚"; +"user_other_session_current_session_details" = "çŸćœšăźă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_other_session_verified_sessions_header_subtitle" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’æœ€ć€§é™ă«é«˜ă‚ă‚‹ă«ăŻă€äžæ˜ŽăȘă‚»ăƒƒă‚·ăƒ§ăƒłă‚„ćˆ©ç”šă—ăŠă„ăȘă„ă‚»ăƒƒă‚·ăƒ§ăƒłă‹ă‚‰ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă—ăŠăă ă•ă„ă€‚"; +"user_other_session_filter" = "ç”žă‚ŠèŸŒă‚€"; +"user_other_session_filter_menu_all" = "ć…šăŠăźă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_other_session_filter_menu_verified" = "èȘèšŒæžˆ"; +"user_other_session_filter_menu_unverified" = "æœȘèȘèšŒ"; +"user_other_session_filter_menu_inactive" = "非ケクティブ"; +"user_other_session_no_inactive_sessions" = "äœżç”šă—ăŠă„ăȘă„ă‚»ăƒƒă‚·ăƒ§ăƒłăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; +"user_other_session_no_verified_sessions" = "èȘèšŒæžˆăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; +"user_other_session_no_unverified_sessions" = "æœȘèȘèšŒăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; +"user_other_session_clear_filter" = "ç”žă‚ŠèŸŒăżă‚’è§Łé™€"; +"user_other_session_menu_select_sessions" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’éžæŠž"; +"user_other_session_menu_sign_out_sessions" = "%@ä»¶ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‹ă‚‰ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆ"; +"device_name_desktop" = "%@デă‚čクトップ"; +"device_name_unknown" = "䞍明ăȘă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆ"; +"device_type_name_desktop" = "デă‚čクトップ"; +"device_type_name_web" = "ォェブ"; +"device_type_name_mobile" = "æșćžŻç«Żæœ«"; +"device_type_name_unknown" = "䞍明"; +"user_session_details_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłăźè©łçŽ°"; +"user_session_details_session_section_header" = "ă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_session_details_application_section_header" = "ケプăƒȘă‚±ăƒŒă‚·ăƒ§ăƒł"; +"user_session_details_device_section_header" = "ç«Żæœ«"; +"user_session_details_session_name" = "ă‚»ăƒƒă‚·ăƒ§ăƒłć"; +"user_session_details_session_id" = "ă‚»ăƒƒă‚·ăƒ§ăƒłID"; +"user_session_details_last_activity" = "ç›Žèż‘ăźă‚ąă‚Żăƒ†ă‚Łăƒ“ăƒ†ă‚ŁăƒŒ"; +"user_session_details_device_ip_address" = "IPケドレă‚č"; +"user_session_details_device_browser" = "ăƒ–ăƒ©ă‚Šă‚¶ăƒŒ"; +"user_session_details_device_os" = "ă‚ȘăƒšăƒŹăƒŒăƒ†ă‚Łăƒłă‚°ă‚·ă‚čテム"; +"user_session_details_application_name" = "損才"; +"user_session_details_application_version" = "ăƒăƒŒă‚žăƒ§ăƒł"; +"user_session_details_application_url" = "URL"; +"user_session_overview_current_session_title" = "çŸćœšăźă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_session_overview_session_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒł"; +"user_session_overview_session_details_button_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłăźè©łçŽ°"; +"wysiwyg_composer_start_action_stickers" = "ă‚čăƒ†ăƒƒă‚«ăƒŒ"; +"wysiwyg_composer_start_action_attachments" = "æ·»ä»˜ăƒ•ă‚Ąă‚€ăƒ«"; +"wysiwyg_composer_start_action_polls" = "ă‚ąăƒłă‚±ăƒŒăƒˆ"; +"wysiwyg_composer_start_action_location" = "äœçœźæƒ…ć ±"; +"wysiwyg_composer_start_action_camera" = "ă‚«ăƒĄăƒ©"; +"wysiwyg_composer_start_action_voice_broadcast" = "音棰配信"; + +// Formatting Actions +"wysiwyg_composer_format_action_bold" = "ć€Ș歗にする"; +"wysiwyg_composer_format_action_italic" = "æ–œć­—äœ“ă«ă™ă‚‹"; + + + +// Links +"wysiwyg_composer_link_action_text" = "テキă‚čト"; +"wysiwyg_composer_link_action_link" = "ăƒȘンク"; +"wysiwyg_composer_link_action_create_title" = "ăƒȘăƒłă‚Żă‚’äœœæˆ"; +"wysiwyg_composer_link_action_edit_title" = "ăƒȘăƒłă‚Żă‚’ç·šé›†"; +"deselect_all" = "ć…šăŠăźéžæŠžă‚’è§Łé™€"; +"ignore_user" = "ăƒŠăƒŒă‚¶ăƒŒă‚’ç„ĄèŠ–"; +"notice_room_name_removed_for_dm" = "%@ăŒăƒ«ăƒŒăƒ ćă‚’ć‰Šé™€ă—ăŸă—ăŸ"; +// New +"notice_room_join_rule_invite" = "%@ăŒă“ăźăƒ«ăƒŒăƒ ă‚’ă€Œæ‹›ćŸ…è€…ăźăżć‚ćŠ ćŻèƒœă€ă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_join_rule_invite_for_dm" = "%@ăŒă“ă‚Œă‚’ă€Œæ‹›ćŸ…è€…ăźăżć‚ćŠ ćŻèƒœă€ă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_join_rule_invite_by_you" = "ă“ăźăƒ«ăƒŒăƒ ă‚’ă€Œæ‹›ćŸ…è€…ăźăżć‚ćŠ ćŻèƒœă€ă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_join_rule_invite_by_you_for_dm" = "ă“ă‚Œă‚’ă€Œæ‹›ćŸ…è€…ăźăżć‚ćŠ ćŻèƒœă€ă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_join_rule_public" = "%@ăŒăƒ«ăƒŒăƒ ă‚’ć…Źé–‹ă—ăŸă—ăŸă€‚"; +"notice_room_join_rule_public_for_dm" = "%@ăŒć…Źé–‹ă—ăŸă—ăŸă€‚"; +"notice_room_join_rule_public_by_you" = "ăƒ«ăƒŒăƒ ă‚’ć…Źé–‹ă—ăŸă—ăŸă€‚"; +"notice_room_join_rule_public_by_you_for_dm" = "ć…Źé–‹ă—ăŸă—ăŸă€‚"; +"notice_room_power_level_intro_for_dm" = "ăƒĄăƒłăƒăƒŒăźæš©é™ăƒŹăƒ™ăƒ«ïŒš"; +"notice_room_aliases_for_dm" = "ă‚šă‚€ăƒȘケă‚č%@"; +"notice_voice_broadcast_live" = "ăƒ©ă‚€ăƒ–é…äżĄ"; +"notice_voice_broadcast_ended" = "%@ăŒéŸłćŁ°é…äżĄă‚’ç”‚äș†ă—ăŸă—ăŸă€‚"; +"notice_voice_broadcast_ended_by_you" = "éŸłćŁ°é…äżĄă‚’ç”‚äș†ă—ăŸă—ăŸă€‚"; +"room_event_encryption_info_key_authenticity_not_guaranteed" = "ă“ăźæš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăźçœŸæ­Łæ€§ăŻă“ăźç«Żæœ«ă§ăŻäżèšŒă§ăăŸă›ă‚“ă€‚"; +"room_left_for_dm" = "退ć‡șă—ăŸă—ăŸ"; +"message_reply_to_sender_sent_their_live_location" = "äœçœźæƒ…ć ±ïŒˆăƒ©ă‚€ăƒ–ïŒ‰ă€‚"; +"attachment_unsupported_preview_title" = "ăƒ—ăƒŹăƒ“ăƒ„ăƒŒă§ăăŸă›ă‚“"; +"attachment_unsupported_preview_message" = "ă“ăźăƒ•ă‚Ąă‚€ăƒ«ăźçšźéĄžăŻă‚”ăƒăƒŒăƒˆă—ăŠă„ăŸă›ă‚“ă€‚"; +"microphone_access_not_granted_for_voice_message" = "éŸłćŁ°ăƒĄăƒƒă‚»ăƒŒă‚žă«ăŻăƒžă‚€ă‚Żăžăźă‚ąă‚Żă‚»ă‚čăŒćż…èŠă§ă™ăŒă€%@ă«ăŻăƒžă‚€ă‚Żă‚’äœżç”šă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“"; +"notice_room_third_party_invite_for_dm" = "%@が%@ă‚’æ‹›ćŸ…ă—ăŸă—ăŸ"; +"notice_room_name_changed_for_dm" = "%@が損才を%@ă«ć€‰æ›Žă—ăŸă—ăŸă€‚"; +"notice_room_third_party_invite_by_you" = "%@ă«ăƒ«ăƒŒăƒ ăžăźæ‹›ćŸ…ă‚’é€ă‚ŠăŸă—ăŸ"; +"notice_room_third_party_invite_by_you_for_dm" = "%@ă‚’æ‹›ćŸ…ă—ăŸă—ăŸ"; +"notice_room_third_party_registered_invite_by_you" = "%@ăźæ‹›ćŸ…ă‚’ć—ă‘ć…„ă‚ŒăŸă—ăŸ"; +"notice_room_reject_by_you" = "æ‹›ćŸ…ă‚’æ‹’ćŠă—ăŸă—ăŸ"; +"notice_room_withdraw_by_you" = "%@ăźæ‹›ćŸ…ă‚’ć–ă‚Šäž‹ă’ăŸă—ăŸ"; +"notice_declined_video_call_by_you" = "é€šè©±ă‚’æ‹’ćŠă—ăŸă—ăŸ"; +"notice_room_history_visible_to_anyone_by_you" = "ä»ŠćŸŒăźăƒ«ăƒŒăƒ ăźć±„æ­Žă‚’ă€ŒèȘ°ă§ă‚‚ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_history_visible_to_members_by_you" = "ä»ŠćŸŒăźăƒ«ăƒŒăƒ ăźć±„æ­Žă‚’ă€ŒăƒĄăƒłăƒăƒŒăźăżă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_history_visible_to_members_by_you_for_dm" = "ä»ŠćŸŒăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ă€ŒăƒĄăƒłăƒăƒŒăźăżă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_history_visible_to_members_from_invited_point_by_you" = "ä»ŠćŸŒăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ă€ŒăƒĄăƒłăƒăƒŒăźăż ïŒˆæ‹›ćŸ…ă•ă‚ŒăŸæ™‚ç‚čä»„é™ïŒ‰ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_history_visible_to_members_from_invited_point_by_you_for_dm" = "ä»ŠćŸŒăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ă€Œć…šć“Ą ïŒˆæ‹›ćŸ…ă•ă‚ŒăŸæ™‚ç‚čä»„é™ïŒ‰ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_history_visible_to_members_from_joined_point_by_you" = "ä»ŠćŸŒăźăƒ«ăƒŒăƒ ăźć±„æ­Žă‚’ă€ŒăƒĄăƒłăƒăƒŒăźăż ïŒˆć‚ćŠ ă—ăŸæ™‚ç‚čä»„é™ïŒ‰ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; +"notice_room_history_visible_to_members_from_joined_point_by_you_for_dm" = "ä»ŠćŸŒăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’ă€Œć…šć“Ą ïŒˆć‚ćŠ ă—ăŸæ™‚ç‚čä»„é™ïŒ‰ă€é–ČèŠ§ćŻèƒœă«èš­ćźšă—ăŸă—ăŸă€‚"; +"call_more_actions_audio_use_device" = "ç«Żæœ«ăźă‚čăƒ”ăƒŒă‚«ăƒŒ"; +"call_more_actions_transfer" = "è»ąé€"; +"call_voice_with_user" = "%@ăšăźéŸłćŁ°é€šè©±"; +"call_transfer_to_user" = "%@ă«è»ąé€"; +"pin_protection_confirm_pin" = "PINă‚łăƒŒăƒ‰ă‚’çąșèȘă—ăŠăă ă•ă„"; +"pin_protection_choose_pin" = "PINă‚łăƒŒăƒ‰ă‚’èš­ćźšă—ăŠăă ă•ă„"; +"pin_protection_choose_pin_welcome_after_register" = "ようこそ。"; + +// MARK: - PIN Protection + +"pin_protection_choose_pin_welcome_after_login" = "おかえりăȘさい。"; +"major_update_done_action" = "äș†è§Ł"; +"cross_signing_setup_banner_subtitle" = "ä»–ăźç«Żæœ«ă‚’ă‚ˆă‚Šç°Ąć˜ă«èȘèšŒ"; + +// MARK: - Cross-signing + +// Banner + +"cross_signing_setup_banner_title" = "æš—ć·ćŒ–ăźèš­ćźš"; +"secrets_reset_reset_action" = "ăƒȘă‚»ăƒƒăƒˆ"; +"secrets_reset_warning_message" = "ć±„æ­ŽăšăƒĄăƒƒă‚»ăƒŒă‚žăŒæ¶ˆćŽ»ă•ă‚Œă€äżĄé Œæžˆăźç«Żæœ«ă€äżĄé ŒæžˆăźăƒŠăƒŒă‚¶ăƒŒăŒć–ă‚Šæ¶ˆă•ă‚ŒăŸă™ă€‚"; +"secrets_reset_warning_title" = "慹どをăƒȘă‚»ăƒƒăƒˆă™ă‚‹ăš"; +"secrets_reset_information" = "ă“ăźç«Żæœ«ă‚’èȘèšŒă§ăă‚‹ä»–ăźç«Żæœ«ăŒć…šăăȘă„ć Žćˆă«ăźăżă€ç¶šèĄŒă—ăŠăă ă•ă„ă€‚"; + +// MARK: - Secrets reset + +"secrets_reset_title" = "慹どăƒȘă‚»ăƒƒăƒˆ"; + + +"secrets_setup_recovery_passphrase_summary_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șを保歘"; +"secrets_setup_recovery_passphrase_confirm_passphrase_placeholder" = "パă‚čăƒ•ăƒŹăƒŒă‚șをçąșèȘ"; +"secrets_setup_recovery_passphrase_confirm_passphrase_title" = "çąșèȘ"; +"secrets_setup_recovery_passphrase_confirm_information" = "çąșèȘăźăŸă‚ă€ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’ć†ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚"; +"secrets_setup_recovery_passphrase_additional_information" = "Matrixăźă‚ąă‚«ă‚Šăƒłăƒˆăƒ‘ă‚čăƒŻăƒŒăƒ‰ăšé•ă†ă‚‚ăźă«ă—ăŠăă ă•ă„ă€‚"; +"secrets_setup_recovery_passphrase_information" = "あăȘăŸă—ă‹çŸ„ă‚‰ăȘă„ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚ă‚”ăƒŒăƒăƒŒă§æ©ŸćŻ†æƒ…ć ±ă‚’äżè­·ă™ă‚‹ăŸă‚ă«äœżç”šă—ăŸă™ă€‚"; + +// Recovery passphrase + +"secrets_setup_recovery_passphrase_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’èš­ćźš"; +"secrets_setup_recovery_key_storage_alert_title" = "ć€§ćˆ‡ă«äżè­·ă—ăŸă—ă‚‡ă†"; +"secrets_setup_recovery_key_export_action" = "保歘"; +"secrets_setup_recovery_key_loading" = "èȘ­ăżèŸŒă‚“ă§ă„ăŸă™â€Š"; + +// MARK: - Secrets set up + +// Recovery Key + +"secrets_setup_recovery_key_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’äżć­˜"; +"secrets_recovery_with_key_invalid_recovery_key_title" = "æ©ŸćŻ†ă‚čăƒˆăƒŹăƒŒă‚žă«ă‚ąă‚Żă‚»ă‚čă§ăăŸă›ă‚“"; +"secrets_recovery_with_key_recover_action" = "é”ă‚’äœżç”š"; +"secrets_recovery_with_key_recovery_key_placeholder" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’ć…„ćŠ›"; +"secrets_recovery_with_key_recovery_key_title" = "慄抛"; +"secrets_recovery_with_key_information_unlock_secure_backup_with_key" = "ç¶šèĄŒă™ă‚‹ă«ăŻă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚"; + +// Recover with key + +"secrets_recovery_with_key_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒ"; +"secrets_recovery_with_passphrase_invalid_passphrase_title" = "æ©ŸćŻ†ă‚čăƒˆăƒŹăƒŒă‚žă«ă‚ąă‚Żă‚»ă‚čă§ăăŸă›ă‚“"; +"secrets_recovery_with_passphrase_lost_passphrase_action_part3" = "。"; +"secrets_recovery_with_passphrase_lost_passphrase_action_part2" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’äœżă„ăŸă—ă‚‡ă†"; +"secrets_recovery_with_passphrase_lost_passphrase_action_part1" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șăŒćˆ†ă‹ă‚ŠăŸă›ă‚“ă‹ïŒŸăă‚“ăȘべきは "; +"secrets_recovery_with_passphrase_passphrase_placeholder" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șを慄抛"; +"secrets_recovery_with_passphrase_passphrase_title" = "慄抛"; + +// Recover with passphrase + +"secrets_recovery_with_passphrase_title" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚ș"; +"secrets_recovery_reset_action_part_2" = "慹どăƒȘă‚»ăƒƒăƒˆ"; +"user_verification_session_details_verify_action_current_user_manually" = "テキă‚čăƒˆă‚’äœżăŁăŠæ‰‹ć‹•ă§èȘèšŒ"; +"key_verification_verify_qr_code_scan_code_other_device_action" = "ă“ăźç«Żæœ«ă§ă‚čキャン"; +"emoji_picker_activity_category" = "ă‚ąă‚Żăƒ†ă‚Łăƒ“ăƒ†ă‚ŁăƒŒ"; +"device_verification_emoji_corn" = "べうもろこし"; +"device_verification_emoji_strawberry" = "いちご"; +"device_verification_emoji_apple" = "ăƒȘンギ"; +"device_verification_emoji_banana" = "バナナ"; +"device_verification_emoji_fire" = "炎"; +"device_verification_emoji_cloud" = "é›Č"; +"device_verification_emoji_moon" = "月"; +"device_verification_emoji_globe" = "朰球"; +"device_verification_emoji_mushroom" = "きぼこ"; +"device_verification_emoji_cactus" = "ă‚”ăƒœăƒ†ăƒł"; +"device_verification_emoji_tree" = "朚"; +"device_verification_emoji_flower" = "花"; +"device_verification_emoji_butterfly" = "ちょうちょ"; +"device_verification_emoji_octopus" = "たこ"; +"device_verification_emoji_fish" = "魚"; +"device_verification_emoji_turtle" = "äș€"; +"device_verification_emoji_penguin" = "ペンゼン"; +"device_verification_emoji_rooster" = "ニワトăƒȘ"; +"device_verification_emoji_panda" = "パンダ"; +"device_verification_emoji_rabbit" = "うさぎ"; +"device_verification_emoji_elephant" = "ă‚Ÿă‚Š"; +"device_verification_emoji_pig" = "ブタ"; +"device_verification_emoji_unicorn" = "ăƒŠăƒ‹ă‚łăƒŒăƒł"; +"device_verification_emoji_horse" = "銏"; +"device_verification_emoji_lion" = "ăƒ©ă‚€ă‚Șン"; +"device_verification_emoji_cat" = "猫"; + +// MARK: Emoji +"device_verification_emoji_dog" = "犬"; + +// User + +"key_verification_verified_user_information" = "ă“ăźăƒŠăƒŒă‚¶ăƒŒăšăźăƒĄăƒƒă‚»ăƒŒă‚žăŻă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰ă§æš—ć·ćŒ–ă•ă‚ŒăŠăŠă‚Šă€çŹŹäž‰è€…ăŒè§ŁèȘ­ă™ă‚‹ă“ăšăŻă§ăăŸă›ă‚“ă€‚"; +"key_verification_verified_new_session_title" = "æ–°ă—ă„ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă—ăŸă—ăŸïŒ"; +"device_verification_verified_got_it_button" = "äș†è§Ł"; + +// MARK: Verified + +// Device + +"device_verification_verified_title" = "èȘèšŒă—ăŸă—ăŸïŒ"; + +// Device + +"device_verification_verify_wait_partner" = "ç›žæ‰‹ăźæ‰żèȘă‚’ćŸ…æ©Ÿă—ăŠă„ăŸă™â€Š"; +"key_verification_manually_verify_device_validate_action" = "èȘèšŒ"; +"key_verification_manually_verify_device_additional_information" = "äž€è‡Žă—ăŠă„ăȘă„ć ŽćˆăŻă€ă‚łăƒŸăƒ„ăƒ‹ă‚±ăƒŒă‚·ăƒ§ăƒłăźă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăŒæăȘă‚ă‚ŒăŠă„ă‚‹ćŻèƒœæ€§ăŒă‚ă‚ŠăŸă™ă€‚"; +"key_verification_manually_verify_device_key_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă‚­ăƒŒ"; +"key_verification_manually_verify_device_id_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłID"; +"key_verification_manually_verify_device_name_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłć"; +"key_verification_manually_verify_device_instruction" = "ä»–ăźă‚»ăƒƒă‚·ăƒ§ăƒłăźăƒŠăƒŒă‚¶ăƒŒèš­ćźšă§ă€ä»„äž‹ă‚’æŻ”èŒƒă—ăŠæ‰żèȘă—ăŠăă ă•ă„ïŒš"; + +// MARK: Manually Verify Device + +"key_verification_manually_verify_device_title" = "テキă‚čăƒˆă‚’äœżăŁăŠæ‰‹ć‹•ă§èȘèšŒ"; +"key_verification_verify_sas_additional_information" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚’æœ€ć€§é™ă«é«˜ă‚ă‚‹ă«ăŻă€ćŻŸéąă§èĄŒă†ă‹ă€ä»–ăźäżĄé Œă§ăă‚‹é€šäżĄæ‰‹æź”ă‚’äœżç”šă—ăŠăă ă•ă„ă€‚"; +"key_verification_verify_sas_title_number" = "ç•Șć·ă‚’æŻ”èŒƒ"; +"device_verification_self_verify_wait_recover_secrets_additional_information" = "æ—ąć­˜ăźă‚»ăƒƒă‚·ăƒ§ăƒłă«ă‚ąă‚Żă‚»ă‚čできăȘい栮搈"; +"device_verification_self_verify_wait_recover_secrets_with_passphrase" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șăŸăŸăŻă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’äœżç”š"; +"device_verification_self_verify_wait_recover_secrets_without_passphrase" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’äœżç”š"; +"device_verification_self_verify_wait_new_sign_in_title" = "ă“ăźăƒ­ă‚°ă‚€ăƒłă‚’èȘèšŒ"; +"key_verification_self_verify_unverified_sessions_alert_validate_action" = "çąșèȘ"; +"key_verification_alert_body" = "ă‚ąă‚«ă‚ŠăƒłăƒˆăŒćź‰ć…šă‹ă©ă†ă‹çąșèȘă—ăŠăă ă•ă„ă€‚"; + +// Unverified sessions +"key_verification_alert_title" = "æœȘèȘèšŒăźă‚»ăƒƒă‚·ăƒ§ăƒłăŒă‚ă‚ŠăŸă™"; +"key_verification_self_verify_current_session_alert_validate_action" = "èȘèšŒ"; + +// Current session + +"key_verification_self_verify_current_session_alert_title" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒ"; +"device_verification_self_verify_start_waiting" = "ćŸ…æ©Ÿă—ăŠă„ăŸă™â€Š"; +"device_verification_self_verify_start_information" = "æ–°ă—ă„ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă—ăŠă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă«ă‚ąă‚Żă‚»ă‚čă§ăă‚‹ă‚ˆă†ă«ă—ăŸă—ă‚‡ă†ă€‚"; +"device_verification_self_verify_start_verify_action" = "èȘèšŒă‚’開構"; +"device_verification_start_use_legacy_action" = "ăƒŹă‚Źă‚·ăƒŒèȘèšŒă‚’äœżç”š"; +"device_verification_start_verify_button" = "èȘèšŒă‚’開構"; + +// MARK: Start +"device_verification_start_title" = "çŸ­ă„æ–‡ć­—ćˆ—ă‚’æŻ”èŒƒă—ăŠèȘèšŒ"; +"device_verification_incoming_description_2" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă™ă‚‹ăšă€äżĄé Œæžˆăšă—ăŠăƒžăƒŒă‚Żă•ă‚Œă€ă‚ăȘăŸăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚‚ç›žæ‰‹ă«äżĄé Œæžˆăšă—ăŠăƒžăƒŒă‚Żă•ă‚ŒăŸă™ă€‚"; +"device_verification_incoming_description_1" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă™ă‚‹ăšă€äżĄé Œæžˆăšă—ăŠăƒžăƒŒă‚Żă•ă‚ŒăŸă™ă€‚ç›žæ‰‹ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’äżĄé Œă™ă‚‹ăšă€ă‚ˆă‚Šäž€ć±€ćź‰ćżƒă—ăŠă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ă‚’äœżç”šă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; + +// MARK: Incoming +"device_verification_incoming_title" = "èȘèšŒăźăƒȘクスă‚čăƒˆăŒć±Šă„ăŠă„ăŸă™"; +"device_verification_error_cannot_load_device" = "ă‚»ăƒƒă‚·ăƒ§ăƒłăźæƒ…ć ±ă‚’èȘ­ăżèŸŒă‚ăŸă›ă‚“。"; +"device_verification_cancelled_by_me" = "èȘèšŒăŒă‚­ăƒŁăƒłă‚»ăƒ«ă•ă‚ŒăŸă—ăŸă€‚ç†ç”±ïŒš%@"; +"device_verification_cancelled" = "ç›žæ‰‹ăŒèȘèšŒă‚’ă‚­ăƒŁăƒłă‚»ăƒ«ă—ăŸă—ăŸă€‚"; +"device_verification_security_advice_number" = "æ•°ć­—ă‚’æŻ”èŒƒă—ăŠă€ćŒă˜é †ç•Șă§çŸă‚ŒăŠă„ă‚‹ă“ăšă‚’çąșèȘă—ăŠăă ă•ă„ă€‚"; +"key_verification_this_session_title" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒ"; + +// MARK: - Device Verification +"key_verification_other_session_title" = "ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒ"; +"sign_out_key_backup_in_progress_alert_discard_key_backup_action" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăŻäžèŠă§ă™"; +"sign_out_key_backup_in_progress_alert_title" = "é”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăŠă„ăŸă™ă€‚ć‡Šç†äž­ă«ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă™ă‚‹ăšă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă«ă‚ąă‚Żă‚»ă‚čできăȘくăȘă‚ŠăŸă™ă€‚"; +"sign_out_non_existing_key_backup_sign_out_confirmation_alert_message" = "ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă™ă‚‹ć‰ă«é”ă‚’ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă—ăȘă„ăšă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă«ă‚ąă‚Żă‚»ă‚čできăȘくăȘă‚ŠăŸă™ă€‚"; +"sign_out_non_existing_key_backup_alert_discard_key_backup_action" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăŻäžèŠă§ă™"; +"sign_out_non_existing_key_backup_alert_setup_secure_backup_action" = "ă‚»ă‚­ăƒ„ă‚ąăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’äœżç”šé–‹ć§‹"; +"sign_out_non_existing_key_backup_alert_title" = "ä»Šă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă™ă‚‹ăšă€ă‚ăȘăŸăźæš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă«ă‚ąă‚Żă‚»ă‚čできăȘくăȘă‚ŠăŸă™"; +"sign_out_confirmation_message" = "ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; + +// MARK: Sign out warning + +"sign_out" = "ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆ"; + +// Success + +"key_backup_recover_success_info" = "ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’ćŸ©ć…ƒă—ăŸă—ăŸïŒ"; +"key_backup_recover_from_recovery_key_lost_recovery_key_action" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’ç„Ąăă—ăŸă—ăŸă‹ïŒŸă€€èš­ćźšă§æ–°ă—ă„ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’èš­ćźšă§ăăŸă™ă€‚"; +"key_backup_recover_from_recovery_key_recover_action" = "ć±„æ­Žăźăƒ­ăƒƒă‚Żă‚’è§Łé™€"; +"key_backup_recover_from_recovery_key_recovery_key_placeholder" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’ć…„ćŠ›"; +"key_backup_recover_from_recovery_key_recovery_key_title" = "慄抛"; + +// Recover from recovery key + +"key_backup_recover_from_recovery_key_info" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’äœżă†ăšă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­Žăźăƒ­ăƒƒă‚Żă‚’è§Łé™€ă§ăăŸă™"; +"call_video_with_user" = "%@べぼビデă‚Ș通話"; +"call_more_actions_hold" = "保留"; +"notice_encryption_enabled_unknown_algorithm_by_you" = "ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ïŒˆèȘè­˜ă•ă‚ŒăŠă„ăȘă„ă‚ąăƒ«ă‚ŽăƒȘă‚șム %@ïŒ‰ă‚’æœ‰ćŠčă«ă—ăŸă—ăŸă€‚"; +"notice_room_name_removed_by_you_for_dm" = "ăƒ«ăƒŒăƒ ćă‚’ć‰Šé™€ă—ăŸă—ăŸ"; +"notice_room_third_party_revoked_invite_by_you" = "%@ăźăƒ«ăƒŒăƒ ăžăźæ‹›ćŸ…ă‚’ć–ă‚Šæ¶ˆă—ăŸă—ăŸ"; +"notice_declined_video_call" = "%@ăŒé€šè©±ă‚’æ‹’ćŠă—ăŸă—ăŸ"; +"attachment_size_prompt_message" = "ă“ă‚ŒăŻèš­ćźšă‹ă‚‰ç„ĄćŠčă«ă§ăăŸă™ă€‚"; +"message_reply_to_sender_sent_their_location" = "äœçœźæƒ…ć ±ă‚’ć…±æœ‰ă—ăŸă—ăŸă€‚"; +"message_reply_to_sender_sent_a_voice_message" = "éŸłćŁ°ăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄă—ăŸă—ăŸă€‚"; +"wysiwyg_composer_start_action_text_formatting" = "テキă‚čăƒˆăźèŁ…éŁŸ"; +"user_session_details_device_model" = "ćœąćŒ"; +"user_inactive_session_item_with_date" = "90æ—„ä»„äžŠäœżç”šă•ă‚ŒăŠă„ăŸă›ă‚“ïŒˆ%@"; +"user_inactive_session_item" = "90æ—„ä»„äžŠäœżç”šă•ă‚ŒăŠă„ăŸă›ă‚“"; + +/* %1$@ will be the verification state and %2$@ will be user_session_item_details_verification_unknown or user_other_session_current_session_details */ +"user_session_item_details" = "%1$@ · %2$@"; +"user_other_session_selected_count" = "%@件遞択枈"; +"user_session_inactive_session_description" = "非ケクティブăȘă‚»ăƒƒă‚·ăƒ§ăƒłăŻă€ă—ă°ă‚‰ăäœżç”šă•ă‚ŒăŠă„ăŸă›ă‚“ăŒă€æš—ć·é”ă‚’ć—äżĄă—ăŠă„ă‚‹ă‚»ăƒƒă‚·ăƒ§ăƒłă§ă™ă€‚\n\näœżç”šă—ăŠă„ăȘă„ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’ć‰Šé™€ă™ă‚‹ăšă€ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăšăƒ‘ăƒ•ă‚©ăƒŒăƒžăƒłă‚čがæ”čć–„ă•ă‚ŒăŸă™ă€‚ăŸăŸă€æ–°ă—ă„ă‚»ăƒƒă‚·ăƒ§ăƒłăŒç–‘ă‚ă—ă„ć Žćˆă«ă€ă‚ˆă‚Šćźčæ˜“ă«ç‰čćźšă§ăă‚‹ă‚ˆă†ă«ăȘă‚ŠăŸă™ă€‚"; +"user_session_permanently_unverified_session_description" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻæš—ć·ćŒ–ă‚’ă‚”ăƒăƒŒăƒˆă—ăŠă„ăȘいため、èȘèšŒă§ăăŸă›ă‚“。\n\nă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă§ăŻă€æš—ć·ćŒ–ăŒæœ‰ćŠčにăȘăŁăŠă„ă‚‹ăƒ«ăƒŒăƒ ă«ć‚ćŠ ă™ă‚‹ă“ăšăŒă§ăăŸă›ă‚“ă€‚\n\nă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăšăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒäżè­·ăźèŠłç‚čă‹ă‚‰ă€æš—ć·ćŒ–ă‚’ă‚”ăƒăƒŒăƒˆă—ăŠă„ă‚‹Matrixăźă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆăźäœżç”šă‚’æŽšć„šă—ăŸă™ă€‚"; +"user_sessions_overview_security_recommendations_unverified_info" = "æœȘèȘèšŒăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă™ă‚‹ă‹ă€ă‚”ă‚€ăƒłă‚ąă‚Šăƒˆă—ăŠăă ă•ă„ă€‚"; +"location_sharing_live_list_item_time_left" = "æź‹ă‚Š%@"; +"location_sharing_live_viewer_title" = "äœçœźæƒ…ć ±"; +"location_sharing_live_map_callout_title" = "äœçœźæƒ…ć ±ă‚’ć…±æœ‰"; +"location_sharing_pin_drop_share_title" = "ă“ăźäœçœźæƒ…ć ±ă‚’é€äżĄ"; +"location_sharing_static_share_title" = "çŸćœšăźäœçœźæƒ…ć ±ă‚’é€äżĄ"; +"location_sharing_map_loading_error" = "朰曳をèȘ­ăżèŸŒă‚ăŸă›ă‚“\nă“ăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăŻćœ°ć›łă‚’èȘ­ăżèŸŒă‚€ă‚ˆă†èš­ćźšă•ă‚ŒăŠă„ăŸă›ă‚“"; +"location_sharing_allow_background_location_cancel_action" = "ćŸŒă§"; +"location_sharing_allow_background_location_validate_action" = "èš­ćźš"; +"location_sharing_allow_background_location_title" = "ă‚ąă‚Żă‚»ă‚čă‚’èš±ćŻ"; +"location_sharing_settings_header" = "äœçœźæƒ…ć ±ăźć…±æœ‰"; +"location_sharing_open_open_street_maps" = "OpenStreetMapで開く"; +"location_sharing_open_apple_maps" = "Appleマップで開く"; +"location_sharing_invalid_authorization_not_now" = "ćŸŒă§"; +"location_sharing_locating_user_error_title" = "%@ăŻäœçœźæƒ…ć ±ă«ă‚ąă‚Żă‚»ă‚čă§ăăŸă›ă‚“ă§ă—ăŸă€‚ćŸŒă§ă‚‚ă†äž€ćșŠă‚„ă‚Šç›Žă—ăŠăă ă•ă„ă€‚"; +"location_sharing_post_failure_subtitle" = "%@ăŻäœçœźæƒ…ć ±ă‚’é€äżĄă§ăăŸă›ă‚“ă§ă—ăŸă€‚ćŸŒă§ă‚‚ă†äž€ćșŠă‚„ă‚Šç›Žă—ăŠăă ă•ă„ă€‚"; +"location_sharing_post_failure_title" = "äœçœźæƒ…ć ±ă‚’é€äżĄă§ăăŸă›ă‚“ă§ă—ăŸ"; +"location_sharing_close_action" = "閉じる"; +"poll_timeline_ended_text" = "ă‚ąăƒłă‚±ăƒŒăƒˆă‚’ç”‚äș†ă—ăŸă—ăŸ"; +"poll_timeline_decryption_error" = "ćŸ©ć·ă‚šăƒ©ăƒŒă«ă‚ˆă‚Šă€ă„ăă€ă‹ăźæŠ•ç„šăŻă‚«ă‚Šăƒłăƒˆă§ăăŸă›ă‚“"; +"poll_history_fetching_error" = "ă‚ąăƒłă‚±ăƒŒăƒˆăźć–ćŸ—äž­ă«ă‚šăƒ©ăƒŒăŒç™șç”Ÿă—ăŸă—ăŸă€‚"; +"poll_history_no_past_poll_text" = "ă“ăźăƒ«ăƒŒăƒ ă«éŽćŽ»ăźă‚ąăƒłă‚±ăƒŒăƒˆăŻă‚ă‚ŠăŸă›ă‚“"; +"poll_history_no_active_poll_text" = "ă“ăźăƒ«ăƒŒăƒ ă«ćźŸæ–œäž­ăźă‚ąăƒłă‚±ăƒŒăƒˆăŻă‚ă‚ŠăŸă›ă‚“"; +"poll_history_past_segment_title" = "éŽćŽ»ăźă‚ąăƒłă‚±ăƒŒăƒˆ"; +"poll_history_active_segment_title" = "ćźŸæ–œäž­ăźă‚ąăƒłă‚±ăƒŒăƒˆ"; +"poll_history_loading_text" = "ă‚ąăƒłă‚±ăƒŒăƒˆă‚’èĄšç€șă—ăŠă„ăŸă™"; + +// MARK: - Polls history + +"poll_history_title" = "ă‚ąăƒłă‚±ăƒŒăƒˆăźć±„æ­Ž"; +"space_detail_nav_title" = "ă‚čăƒšăƒŒă‚čăźè©łçŽ°"; + +// MARK: - Room invites + +"room_invites_empty_view_title" = "æ–°ç€ăŻă‚ă‚ŠăŸă›ă‚“ă€‚"; +"all_chats_edit_menu_space_settings" = "ă‚čăƒšăƒŒă‚čăźèš­ćźš"; +"all_chats_edit_menu_leave_space" = "%@から退ć‡ș"; +"all_chats_user_menu_accessibility_label" = "ăƒŠăƒŒă‚¶ăƒŒăƒĄăƒ‹ăƒ„ăƒŒ"; +"room_recents_recently_viewed_section" = "æœ€èż‘èĄšç€șă—ăŸăƒ«ăƒŒăƒ "; +"all_chats_empty_space_information" = "ă‚čăƒšăƒŒă‚čăŻă€ăƒ«ăƒŒăƒ ă‚„é€Łç”Ąć…ˆă‚’ăŸăšă‚ă‚‹æ–°ă—ă„æ–čæł•ă§ă™ă€‚ćłäž‹ăźăƒœă‚żăƒłă‚’äœżă†ăšă€æ—ąć­˜ăźăƒ«ăƒŒăƒ ă‚’èżœćŠ ă—ăŸă‚Šæ–°ăŸă«äœœæˆă—ăŸă‚Šă§ăăŸă™ă€‚"; +"all_chats_edit_layout_sorting_options_title" = "ăƒĄăƒƒă‚»ăƒŒă‚žă‚’äžŠăłæ›żăˆă‚‹"; +"all_chats_edit_layout_add_filters_title" = "ăƒĄăƒƒă‚»ăƒŒă‚žă‚’ç”žă‚ŠèŸŒă‚€"; +"version_check_modal_action_title_supported" = "äș†è§Ł"; +"voice_broadcast_recorder_connection_error" = "æŽ„ç¶šă‚šăƒ©ăƒŒ - éŒČéŸłă‚’ćœæ­ąă—ăŸă—ăŸ"; +"voice_broadcast_connection_error_message" = "éŒČéŸłă‚’é–‹ć§‹ă§ăăŸă›ă‚“ă€‚ćŸŒă§ă‚‚ă†äž€ćșŠă‚„ă‚Šç›Žă—ăŠăă ă•ă„ă€‚"; +"voice_broadcast_connection_error_title" = "æŽ„ç¶šă‚šăƒ©ăƒŒ"; +"voice_broadcast_voip_cannot_start_description" = "ăƒ©ă‚€ăƒ–é…äżĄă‚’éŒČéŸłă—ăŠă„ă‚‹ăŸă‚ă€é€šè©±ă‚’é–‹ć§‹ă§ăăŸă›ă‚“ă€‚é€šè©±ă‚’é–‹ć§‹ă™ă‚‹ă«ăŻă€ăƒ©ă‚€ăƒ–é…äżĄă‚’ç”‚äș†ă—ăŠăă ă•ă„ă€‚"; +"voice_broadcast_voip_cannot_start_title" = "é€šè©±ă‚’é–‹ć§‹ă§ăăŸă›ă‚“"; +"voice_broadcast_stop_alert_agree_button" = "ăŻă„ă€ćœæ­ą"; +"voice_broadcast_stop_alert_description" = "ăƒ©ă‚€ăƒ–é…äżĄă‚’ç”‚äș†ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸé…äżĄă‚’ç”‚äș†ă—、éŒČéŸłă‚’ă“ăźăƒ«ăƒŒăƒ ă§ćˆ©ç”šă§ăă‚‹ă‚ˆă†èš­ćźšă—ăŸă™ă€‚"; +"voice_broadcast_stop_alert_title" = "ăƒ©ă‚€ăƒ–é…äżĄă‚’ćœæ­ąă—ăŸă™ă‹ïŒŸ"; +"voice_broadcast_buffering" = "バッファăƒȘăƒłă‚°ă—ăŠă„ăŸă™â€Š"; +"voice_broadcast_time_left" = "æź‹ă‚Š%@"; +"voice_broadcast_tile" = "音棰配信"; +"voice_broadcast_live" = "ăƒ©ă‚€ăƒ–"; +"voice_broadcast_playback_lock_screen_placeholder" = "音棰配信"; +"voice_broadcast_playback_loading_error" = "ă“ăźéŸłćŁ°é…äżĄă‚’ć†ç”Ÿă§ăăŸă›ă‚“ă€‚"; +"voice_broadcast_already_in_progress_message" = "æ—ąă«éŸłćŁ°é…äżĄă‚’éŒČéŸłă—ăŠă„ăŸă™ă€‚æ–°ă—ăć§‹ă‚ă‚‹ă«ăŻä»ŠăźéŸłćŁ°é…äżĄă‚’ç”‚äș†ă—ăŠăă ă•ă„ă€‚"; +"voice_broadcast_blocked_by_someone_else_message" = "他たäșșăŒæ—ąă«éŸłćŁ°é…äżĄă‚’éŒČéŸłă—ăŠă„ăŸă™ă€‚æ–°ă—ăć§‹ă‚ă‚‹ă«ăŻéŸłćŁ°é…äżĄăŒç”‚ă‚ă‚‹ăŸă§ćŸ…æ©Ÿă—ăŠăă ă•ă„ă€‚"; +"voice_broadcast_permission_denied_message" = "ă“ăźăƒ«ăƒŒăƒ ă§éŸłćŁ°é…äżĄă‚’é–‹ć§‹ă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“ă€‚ăƒ«ăƒŒăƒ ăźçźĄç†è€…ă«é€Łç”Ąă—ăŠæš©é™ăźä»˜äžŽă‚’äŸé Œă—ăŠăă ă•ă„ă€‚"; + +// MARK: - Voice Broadcast +"voice_broadcast_unauthorized_title" = "æ–°ă—ă„éŸłćŁ°é…äżĄă‚’é–‹ć§‹ă§ăăŸă›ă‚“"; +"voice_message_broadcast_in_progress_message" = "ăƒ©ă‚€ăƒ–é…äżĄă‚’éŒČéŸłă—ăŠă„ă‚‹ăŸă‚ă€éŸłćŁ°ăƒĄăƒƒă‚»ăƒŒă‚žă‚’é–‹ć§‹ă§ăăŸă›ă‚“ă€‚éŸłćŁ°ăƒĄăƒƒă‚»ăƒŒă‚žăźéŒČéŸłă‚’é–‹ć§‹ă™ă‚‹ă«ăŻă€ăƒ©ă‚€ăƒ–é…äżĄă‚’ç”‚äș†ă—ăŠăă ă•ă„"; +"voice_message_broadcast_in_progress_title" = "éŸłćŁ°ăƒĄăƒƒă‚»ăƒŒă‚žă‚’é–‹ć§‹ă§ăăŸă›ă‚“"; +"voice_message_lock_screen_placeholder" = "éŸłćŁ°ăƒĄăƒƒă‚»ăƒŒă‚ž"; +"voice_message_remaining_recording_time" = "æź‹ă‚Š%@"; + +// MARK: - Voice Messages + +"voice_message_release_to_send" = "æŠŒă—ç¶šă‘ăŠéŒČ音し、雱すべ送信"; +"side_menu_app_version" = "ăƒăƒŒă‚žăƒ§ăƒł %@"; +"user_avatar_view_accessibility_hint" = "ăƒŠăƒŒă‚¶ăƒŒăźă‚ąăƒă‚żăƒŒă‚’ć€‰æ›Ž"; + +// MARK: - User avatar view + +"user_avatar_view_accessibility_label" = "ă‚ąăƒă‚żăƒŒ"; +"space_avatar_view_accessibility_hint" = "ă‚čăƒšăƒŒă‚čăźă‚ąăƒă‚żăƒŒă‚’ć€‰æ›Ž"; + +// MARK: Avatar + +"space_avatar_view_accessibility_label" = "ă‚ąăƒă‚żăƒŒ"; +"leave_space_selection_no_rooms" = "ăƒ«ăƒŒăƒ ă‚’éžæŠžă—ăȘい"; +"spaces_creation_post_process_creating_room" = "%@ă‚’äœœæˆă—ăŠă„ăŸă™"; +"spaces_creation_post_process_uploading_avatar" = "ă‚ąăƒă‚żăƒŒă‚’ă‚ąăƒƒăƒ—ăƒ­ăƒŒăƒ‰ă—ăŠă„ăŸă™"; +"spaces_creation_invite_by_username_title" = "ăƒăƒŒăƒ ă‚’æ‹›ćŸ…"; +"spaces_creation_invite_by_username" = "ăƒŠăƒŒă‚¶ăƒŒćă§æ‹›ćŸ…"; +"spaces_creation_sharing_type_title" = "èȘ°ăšäœżă„ăŸă™ă‹ïŒŸ"; +"spaces_creation_email_invites_email_title" = "é›»ć­ăƒĄăƒŒăƒ«"; +"spaces_creation_email_invites_title" = "ăƒăƒŒăƒ ă‚’æ‹›ćŸ…"; +"spaces_creation_new_rooms_support" = "ă‚”ăƒăƒŒăƒˆ"; +"spaces_creation_new_rooms_random" = "ăƒ©ăƒłăƒ€ăƒ "; +"spaces_creation_new_rooms_general" = "äž€èˆŹ"; +"spaces_creation_new_rooms_room_name_title" = "ăƒ«ăƒŒăƒ ć"; +"spaces_creation_private_space_title" = "あăȘたぼ非慬開ぼă‚čăƒšăƒŒă‚č"; +"spaces_creation_public_space_title" = "あăȘたぼ慬開ă‚čăƒšăƒŒă‚č"; +"spaces_subspace_creation_visibility_title" = "äœœæˆă™ă‚‹ă‚”ăƒ–ă‚čăƒšăƒŒă‚čăźçšźéĄžă‚’éžæŠžă—ăŠăă ă•ă„"; + +// MARK: - Space Creation + +"spaces_creation_hint" = "ă‚čăƒšăƒŒă‚čăŻă€ăƒ«ăƒŒăƒ ă‚„é€Łç”Ąć…ˆă‚’ăŸăšă‚ă‚‹æ–°ă—ă„æ–čæł•ă§ă™ă€‚"; +"spaces_add_space" = "ă‚čăƒšăƒŒă‚čă‚’èżœćŠ "; +"spaces_add_room" = "ăƒ«ăƒŒăƒ ă‚’èżœćŠ "; +"spaces_invite_people" = "é€Łç”Ąć…ˆă‚’æ‹›ćŸ…"; +"space_public_join_rule" = "慬開ă‚čăƒšăƒŒă‚č"; +"space_private_join_rule" = "非慬開ぼă‚čăƒšăƒŒă‚č"; +"spaces_no_result_found_title" = "æ€œçŽąç”æžœăŒă‚ă‚ŠăŸă›ă‚“"; +"space_tag" = "ă‚čăƒšăƒŒă‚č"; +"spaces_explore_rooms_one_room" = "1ć€‹ăźăƒ«ăƒŒăƒ "; +"spaces_explore_rooms_room_number" = "%@ć€‹ăźăƒ«ăƒŒăƒ "; +"leave_space_and_all_rooms_action" = "ć…šăŠăźăƒ«ăƒŒăƒ ăšă‚čăƒšăƒŒă‚čから退ć‡ș"; +"leave_space_only_action" = "ă©ăźăƒ«ăƒŒăƒ ă‹ă‚‰ă‚‚é€€ć‡șしăȘい"; +"threads_discourage_information_2" = "\n\nă‚čăƒŹăƒƒăƒ‰æ©Ÿèƒœă‚’æœ‰ćŠčă«ă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +"room_no_privileges_to_create_group_call" = "é€šè©±ă‚’é–‹ć§‹ă™ă‚‹ă«ăŻçźĄç†è€…ă‚ă‚‹ă„ăŻăƒąăƒ‡ăƒŹăƒŒă‚żăƒŒă§ă‚ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚"; +"contacts_address_book_permission_denied_alert_message" = "é€Łç”Ąć…ˆă‚’æœ‰ćŠčă«ă™ă‚‹ă«ăŻă€ç«Żæœ«ăźèš­ćźšç”»éąă‚’é–‹ă„ăŠăă ă•ă„ă€‚"; +"contacts_address_book_permission_denied_alert_title" = "é€Łç”Ąć…ˆăŒç„ĄćŠčです"; +"password_policy_weak_pwd_error" = "パă‚čăƒŻăƒŒăƒ‰ăŒćŒ±ă™ăŽăŸă™ă€‚8æ–‡ć­—ä»„äžŠă§ă€ć€§æ–‡ć­—ă€ć°æ–‡ć­—ă€æ•°ć­—ă€ç‰čæźŠæ–‡ć­—ă‚’ăă‚Œăžă‚Œ1ă€ăšă€ć«ă‚ăŠăă ă•ă„ă€‚"; +"authentication_qr_login_loading_signed_in" = "ä»–ăźç«Żæœ«ă§ă‚”ă‚€ăƒłă‚€ăƒłă—ăŸă—ăŸă€‚"; +"authentication_qr_login_display_step1" = "ä»–ăźç«Żæœ«ă§Elementを開いどください"; +"authentication_qr_login_start_display_qr" = "ă“ăźç«Żæœ«ă§QRă‚łăƒŒăƒ‰ă‚’èĄšç€ș"; +"authentication_qr_login_start_need_alternative" = "戄たæ–čæł•ăŒćż…èŠă§ă™ă‹ïŒŸ"; +"authentication_qr_login_start_step1" = "ä»–ăźç«Żæœ«ă§Elementを開いどください"; +"authentication_qr_login_start_subtitle" = "ă“ăźç«Żæœ«ăźă‚«ăƒĄăƒ©ă‚’äœżç”šă—ăŠă€ä»–ăźç«Żæœ«ă«èĄšç€șされどいるQRă‚łăƒŒăƒ‰ă‚’ă‚čă‚­ăƒŁăƒłă—ăŠăă ă•ă„ïŒš"; +"authentication_choose_password_not_verified_title" = "é›»ć­ăƒĄăƒŒăƒ«ăŻèȘèšŒă•ă‚ŒăŠă„ăŸă›ă‚“"; +"authentication_server_selection_generic_error" = "こぼURLă§ă‚”ăƒŒăƒăƒŒă‚’ç™șèŠ‹ă§ăăŸă›ă‚“ă€‚URLをçąșèȘă—ăŠăă ă•ă„ă€‚"; +"authentication_server_selection_register_title" = "あăȘăŸăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒă‚’éžæŠžă—ăŠăă ă•ă„"; +"authentication_server_selection_login_message" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăźă‚ąăƒ‰ăƒŹă‚čă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; +"authentication_server_selection_login_title" = "ăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒă«æŽ„ç¶š"; +"authentication_login_forgot_password" = "パă‚čăƒŻăƒŒăƒ‰ă‚’ćż˜ă‚ŒăŸć Žćˆ"; +"event_formatter_call_answer" = "ć‡șる"; +"event_formatter_call_incoming_video" = "着信侭ぼビデă‚Ș通話"; +"event_formatter_call_incoming_voice" = "ç€äżĄäž­ăźéŸłćŁ°é€šè©±"; +"event_formatter_call_has_ended_with_time" = "é€šè©±ă‚’ç”‚äș†ă—ăŸă—ăŸăƒ»%@"; +"room_access_space_chooser_other_spaces_section" = "ăăźä»–ăźă‚čăƒšăƒŒă‚čăŸăŸăŻăƒ«ăƒŒăƒ "; +"room_access_settings_screen_setting_room_access" = "ăƒ«ăƒŒăƒ ăźă‚ąă‚Żă‚»ă‚čăźèš­ćźš"; +"settings_labs_enable_wysiwyg_composer" = "ăƒȘッチテキă‚čăƒˆă‚šăƒ‡ă‚Łă‚żăƒŒă‚’è©Šă—ăŠăżă‚‹"; +"settings_labs_enable_ringing_for_group_calls" = "ă‚°ăƒ«ăƒŒăƒ—é€šè©±ă§ć‘Œăłć‡șす"; +"settings_notifications_disabled_alert_message" = "é€šçŸ„ă‚’æœ‰ćŠčă«ă™ă‚‹ă«ăŻă€ç«Żæœ«ăźèš­ćźšç”»éąă‚’é–‹ă„ăŠăă ă•ă„ă€‚"; +"room_accessibility_record_voice_message_hint" = "2ć›žç¶šă‘ăŠă‚żăƒƒăƒ—ă—é•·æŠŒă—ă™ă‚‹ăšéŒČ音。"; +"room_preview_decline_invitation_options" = "æ‹›ćŸ…ă‚’æ‹’ćŠă™ă‚‹ă‹ă€ă“ăźăƒŠăƒŒă‚¶ăƒŒă‚’ç„ĄèŠ–ă—ăŸă™ă‹ïŒŸ"; +"threads_beta_information" = "ă‚čăƒŹăƒƒăƒ‰æ©Ÿèƒœă‚’äœżăŁăŠă€äŒšè©±ă‚’ăŸăšă‚ăŸă—ă‚‡ă†ă€‚\n\nă‚čăƒŹăƒƒăƒ‰æ©Ÿèƒœă‚’äœżă†ăšă€äŒšè©±ăźăƒ†ăƒŒăƒžă‚’ç¶­æŒă—ăŸă‚Šă€äŒšè©±ă‚’ç°Ąć˜ă«èżœè·Ąă—ăŸă‚Šă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚ "; +"threads_notice_information" = "ćźŸéš“æœŸé–“äž­ă«äœœæˆă•ă‚ŒăŸă‚čăƒŹăƒƒăƒ‰ăŻé€šćžžăźèż”äżĄăšă—ăŠèĄšç€șă•ă‚ŒăŸă™ă€‚

ă‚čăƒŹăƒƒăƒ‰æ©ŸèƒœăŻMatrixăźä»•æ§˜ăźäž€éƒšă«ăȘったため、これは侀ćșŠé™ă‚Šăźć€‰æ›Žă§ă™ă€‚"; +"threads_empty_info_my" = "æ—ąć­˜ăźă‚čăƒŹăƒƒăƒ‰ă«èż”äżĄă™ă‚‹ă‹ă€ăƒĄăƒƒă‚»ăƒŒă‚žă‚’ă‚żăƒƒăƒ—ă—ă€Œă‚čăƒŹăƒƒăƒ‰ă€ă‹ă‚‰æ–°ă—ă„ă‚čレッドを開構。"; +"room_accessibility_thread_more" = "ăăźä»–"; +"room_first_message_placeholder" = "æœ€ćˆăźăƒĄăƒƒă‚»ăƒŒă‚žă‚’é€äżĄâ€Š"; + +// MARK: - Chat + +"room_slide_to_end_group_call" = "ă‚čăƒ©ă‚€ăƒ‰ă™ă‚‹ăšć…šć“Ąăźé€šè©±ă‚’ç”‚äș†"; +"authentication_qr_login_failure_request_timed_out" = "æ™‚é–“ć†…ă«ăƒȘンクが漌äș†ă—ăŸă›ă‚“ă§ă—ăŸă€‚"; +"authentication_qr_login_failure_title" = "ăƒȘăƒłă‚Żă«ć€±æ•—ă—ăŸă—ăŸ"; +"authentication_qr_login_start_step2" = "èš­ćźšă‹ă‚‰ă€Œă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăšăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒă€ă‚’é–‹ă„ăŠăă ă•ă„"; +"authentication_qr_login_confirm_alert" = "ă“ăźă‚łăƒŒăƒ‰ăźć‡șæ‰€ă‚’çŸ„ăŁăŠă„ă‚‹ă“ăšă‚’çąșèȘă—ăŠăă ă•ă„ă€‚ç«Żæœ«ă‚’ăƒȘンクするべ、あăȘăŸăźă‚ąă‚«ă‚Šăƒłăƒˆă«ç„Ąćˆ¶é™ă«ă‚ąă‚Żă‚»ă‚čă§ăă‚‹ă‚ˆă†ă«ăȘă‚ŠăŸă™ă€‚"; +"authentication_qr_login_scan_subtitle" = "QRă‚łăƒŒăƒ‰ă‚’ä»„äž‹ăźć››è§’ćœąă«ćˆă‚ă›ăŠăă ă•ă„"; +"authentication_qr_login_display_step2" = "「QRă‚łăƒŒăƒ‰ă§ă‚”ă‚€ăƒłă‚€ăƒłă€ă‚’éžæŠžă—ăŠăă ă•ă„"; +"authentication_qr_login_start_step4" = "ă€Œă“ăźç«Żæœ«ă§QRă‚łăƒŒăƒ‰ă‚’èĄšç€șă€ă‚’éžæŠžă—ăŠăă ă•ă„"; +"authentication_qr_login_start_step3" = "ă€Œç«Żæœ«ă‚’ăƒȘăƒłă‚Żă€ă‚’éžæŠžă—ăŠăă ă•ă„"; +"authentication_qr_login_display_title" = "ç«Żæœ«ă‚’ăƒȘンク"; +/* The placeholder will show the full Matrix ID that has been entered. */ +"authentication_registration_username_footer_available" = "他たäșșは %@ であăȘăŸă‚’èŠ‹ă€ă‘ă‚‹ă“ăšăŒă§ăăŸă™"; +"authentication_server_selection_register_message" = "あăȘăŸăźăƒ›ăƒŒăƒ ă‚”ăƒŒăƒăƒŒăźă‚ąăƒ‰ăƒŹă‚čă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚ă“ă“ă«ă‚ăȘăŸăźć…šăŠăźăƒ‡ăƒŒă‚żăŒăƒ›ă‚čăƒˆă•ă‚ŒăŸă™"; +"authentication_server_info_title_login" = "ă‚ąă‚«ă‚Šăƒłăƒˆă«ă‚”ă‚€ăƒłă‚€ăƒłă™ă‚‹ă‚”ăƒŒăƒăƒŒ"; +"authentication_server_info_title" = "ă‚ąă‚«ă‚Šăƒłăƒˆă‚’äœœæˆă™ă‚‹ă‚”ăƒŒăƒăƒŒ"; +"onboarding_avatar_message" = "èĄšç€șćă«ăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«ç”»ćƒă‚’èżœćŠ ă—ăŸă—ă‚‡ă†"; +"all_chats_edit_layout_add_filters_message" = "あăȘăŸăŒéžæŠžă—ăŸă‚«ăƒ†ă‚ŽăƒȘăƒŒă«ăƒĄăƒƒă‚»ăƒŒă‚žă‚’è‡Șć‹•çš„ă«ăƒ•ă‚Łăƒ«ă‚żăƒȘング"; +"all_chats_empty_view_information" = "ăƒăƒŒăƒ ă€ć‹é”ă€ç”„çč”搑けたă‚ȘăƒŒăƒ«ă‚€ăƒłăƒŻăƒłăźćź‰ć…šăȘチャットケプăƒȘă§ă™ă€‚ăŻă˜ă‚ă«ă€ăƒăƒŁăƒƒăƒˆă‚’äœœæˆă™ă‚‹ă‹æ—ąć­˜ăźăƒ«ăƒŒăƒ ă«ć‚ćŠ ă—ăŸă—ă‚‡ă†ă€‚"; +"home_empty_view_information" = "ăƒăƒŒăƒ ă€ć‹é”ă€ç”„çč”搑けたă‚ȘăƒŒăƒ«ă‚€ăƒłăƒŻăƒłăźćź‰ć…šăȘチャットケプăƒȘă§ă™ă€‚ä»„äž‹ăźïŒ‹ăƒœă‚żăƒłă‚’æŠŒă™ăšă€é€Łç”Ąć…ˆăšăƒ«ăƒŒăƒ ă‚’èżœćŠ ă§ăăŸă™ă€‚"; +"all_chats_empty_view_title" = "%@\nはç©șです。"; +"all_chats_nothing_found_placeholder_message" = "æ€œçŽąă‚’èȘżæ•Žă—ăŠăżăŠăă ă•ă„ă€‚"; +"all_chats_nothing_found_placeholder_title" = "äœ•ă‚‚èŠ‹ă€ă‹ă‚ŠăŸă›ă‚“ă§ă—ăŸă€‚"; +"all_chats_edit_layout_pin_spaces_title" = "ă‚čăƒšăƒŒă‚čă‚’ăƒ”ăƒłæ­ąă‚"; +"all_chats_edit_layout_add_section_message" = "ă‚»ă‚Żă‚·ăƒ§ăƒłă‚’ăƒ›ăƒŒăƒ ă«ăƒ”ăƒłæ­ąă‚ă™ă‚‹ăšç°Ąć˜ă«ă‚ąă‚Żă‚»ă‚čă§ăăŸă™"; +"all_chats_edit_layout_add_section_title" = "ă‚»ă‚Żă‚·ăƒ§ăƒłă‚’ăƒ›ăƒŒăƒ ă«èżœćŠ "; +"version_check_banner_subtitle_deprecated" = "%@ăźă‚”ăƒăƒŒăƒˆăŻiOS %@で甂äș†ă—ăŸă—ăŸă€‚%@ăźäœżç”šă‚’ç¶™ç¶šă™ă‚‹ć ŽćˆăŻă€iOSăźăƒăƒŒă‚žăƒ§ăƒłă‚’ă‚ąăƒƒăƒ—ă‚°ăƒŹăƒŒăƒ‰ă—ăŠăă ă•ă„ă€‚"; +"version_check_banner_subtitle_supported" = "%@ăźă‚”ăƒăƒŒăƒˆăŻiOS %@ă§èż‘æ—„äž­ă«ç”‚äș†ă—ăŸă™ă€‚%@ăźäœżç”šă‚’ç¶™ç¶šă™ă‚‹ć ŽćˆăŻă€iOSăźăƒăƒŒă‚žăƒ§ăƒłă‚’ă‚ąăƒƒăƒ—ă‚°ăƒŹăƒŒăƒ‰ă—ăŠăă ă•ă„ă€‚"; +"version_check_modal_action_title_deprecated" = "æ–čæł•ă‚’çąșèȘ"; +"version_check_modal_title_supported" = "iOS %@ăźă‚”ăƒăƒŒăƒˆăŻèż‘æ—„äž­ă«ç”‚äș†ă—ăŸă™"; + +// MARK: - Version check + +"version_check_banner_title_supported" = "iOS %@ăźă‚”ăƒăƒŒăƒˆăŻèż‘æ—„äž­ă«ç”‚äș†ă—ăŸă™"; +"version_check_banner_title_deprecated" = "iOS %@ăźă‚”ăƒăƒŒăƒˆăŻç”‚äș†ă—ăŸă—ăŸ"; +"version_check_modal_title_deprecated" = "iOS %@ăźă‚”ăƒăƒŒăƒˆăŻç”‚äș†ă—ăŸă—ăŸ"; +"attachment_size_prompt_title" = "送俥するゔむă‚șをçąșèȘ"; +"attachment_small_with_resolution" = "ć°ïŒš%@~%@"; +"attachment_medium_with_resolution" = "䞭%@~%@"; +"attachment_large_with_resolution" = "ć€§ïŒš%@~%@"; +"e2e_passphrase_too_short" = "パă‚čăƒ•ăƒŹăƒŒă‚șăŒçŸ­ă™ăŽăŸă™ïŒˆ%dæ–‡ć­—ä»„äžŠă«ă—ăŠăă ă•ă„ïŒ‰"; +"notice_room_third_party_revoked_invite_for_dm" = "%@が%@ăźæ‹›ćŸ…ă‚’ć–ă‚Šæ¶ˆă—ăŸă—ăŸ"; +"notice_room_third_party_revoked_invite_by_you_for_dm" = "%@ăźæ‹›ćŸ…ă‚’ć–ă‚Šæ¶ˆă—ăŸă—ăŸ"; +"notice_room_name_changed_by_you_for_dm" = "損才を%@ă«ć€‰æ›Žă—ăŸă—ăŸă€‚"; +"call_remote_holded" = "%@ăŒé€šè©±ă‚’äżç•™ă—ăŸă—ăŸ"; +"call_holded" = "é€šè©±ă‚’äżç•™ă—ăŸă—ăŸ"; +"call_more_actions_unhold" = "憍開"; +"user_session_rename_session_description" = "あăȘăŸăŒć‚ćŠ ă™ă‚‹ăƒ€ă‚€ăƒŹă‚ŻăƒˆăƒĄăƒƒă‚»ăƒŒă‚žăšăƒ«ăƒŒăƒ ăźä»–ăźăƒŠăƒŒă‚¶ăƒŒăŻă€ă‚ăȘăŸăźă‚»ăƒƒă‚·ăƒ§ăƒłăźäž€èŠ§ă‚’é–ČèŠ§ă§ăăŸă™ă€‚\n\nă‚»ăƒƒă‚·ăƒ§ăƒłăźäž€èŠ§ă‹ă‚‰ă€ç›žæ‰‹ăŻă‚ăȘたべやり揖りしどいるこべをçąșă‹ă‚ă‚‹ă“ăšăŒă§ăăŸă™ă€‚ăȘお、あăȘăŸăŒă“ă“ă«ć…„ćŠ›ă™ă‚‹ă‚»ăƒƒă‚·ăƒ§ăƒłćăŻç›žæ‰‹ă«ćŻŸă—ăŠèĄšç€șă•ă‚ŒăŸă™ă€‚"; +"user_session_unverified_session_description" = "æœȘèȘèšŒăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻă€èȘèšŒæƒ…ć ±ă§ăƒ­ă‚°ă‚€ăƒłă•ă‚ŒăŠă„ăŸă™ăŒă€ă‚Żăƒ­ă‚čèȘèšŒăŻèĄŒă‚ă‚ŒăŠă„ăȘă„ă‚»ăƒƒă‚·ăƒ§ăƒłă§ă™ă€‚\n\nă“ă‚Œă‚‰ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻă€ă‚ąă‚«ă‚Šăƒłăƒˆăźäžæ­Łäœżç”šă‚’ç€șă—ăŠă„ă‚‹ćŻèƒœæ€§ăŒă‚ă‚‹ăŸă‚ă€æłšæ„ă—ăŠçąșèȘă—ăŠăă ă•ă„ă€‚"; +"user_session_verified_session_description" = "èȘèšŒæžˆăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻă€ăƒ‘ă‚čăƒ•ăƒŹăƒŒă‚șăźć…„ćŠ›ă€ăŸăŸăŻä»–ăźèȘèšŒæžˆăźă‚»ăƒƒă‚·ăƒ§ăƒłă§æœŹäșșçąșèȘă‚’èĄŒăŁăŸă‚»ăƒƒă‚·ăƒ§ăƒłă§ă™ă€‚\n\nèȘèšŒæžˆăźă‚»ăƒƒă‚·ăƒ§ăƒłă«ăŻă€æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’ćŸ©ć·ćŒ–ă™ă‚‹éš›ă«äœżç”šă™ă‚‹ć…šăŠăźé”ăŒć‚™ă‚ăŁăŠă„ăŸă™ă€‚ăŸăŸă€ä»–ăźăƒŠăƒŒă‚¶ăƒŒă«ćŻŸă—ăŠăŻă€ă‚ăȘăŸăŒă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’äżĄé Œă—ăŠă„ă‚‹ă“ăšăŒèĄšç€șă•ă‚ŒăŸă™ă€‚"; +"user_session_push_notifications_message" = "有ćŠčă«ă™ă‚‹ăšă€ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăŻăƒ—ăƒƒă‚·ăƒ„é€šçŸ„ă‚’ć—äżĄă—ăŸă™ă€‚"; +"launch_loading_server_syncing" = "ă‚”ăƒŒăƒăƒŒăšćŒæœŸă—ăŠă„ăŸă™"; +"launch_loading_processing_response" = "ăƒ‡ăƒŒă‚żă‚’ć‡Šç†ă—ăŠă„ăŸă™\n%@ %%"; +"wysiwyg_composer_format_action_link" = "ăƒȘăƒłă‚ŻăźèŁ…éŁŸă‚’é©ç”š"; +"wysiwyg_composer_format_action_inline_code" = "ă‚€ăƒłăƒ©ă‚€ăƒłă‚łăƒŒăƒ‰ăźèŁ…éŁŸă‚’é©ç”š"; +"wysiwyg_composer_format_action_unordered_list" = "çź‡æĄæ›žăăƒȘă‚čăƒˆăźèĄšç€șă‚’ćˆ‡ă‚Šæ›żăˆă‚‹"; +"wysiwyg_composer_format_action_ordered_list" = "ç•Șć·ä»˜ăăƒȘă‚čăƒˆăźèĄšç€șă‚’ćˆ‡ă‚Šæ›żăˆă‚‹"; +"wysiwyg_composer_format_action_code_block" = "ă‚łăƒŒăƒ‰ăƒ–ăƒ­ăƒƒă‚ŻăźèĄšç€șă‚’ćˆ‡ă‚Šæ›żăˆă‚‹"; +"wysiwyg_composer_format_action_quote" = "ćŒ•ç”šăźèĄšç€șă‚’ćˆ‡ă‚Šæ›żăˆă‚‹"; +"poll_timeline_reply_ended_poll" = "甂äș†ă—ăŸă‚ąăƒłă‚±ăƒŒăƒˆ"; +"settings_labs_enable_crypto_sdk" = "Rust ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–"; +"settings_labs_disable_crypto_sdk" = "Rust ă‚šăƒłăƒ‰ăƒ„ăƒŒă‚šăƒłăƒ‰æš—ć·ćŒ–ïŒˆç„ĄćŠčă«ă™ă‚‹ă«ăŻăƒ­ă‚°ă‚ąă‚Šăƒˆă—ăŠăă ă•ă„ïŒ‰"; + +// MARK: - Launch loading + +"launch_loading_migrating_data" = "ăƒ‡ăƒŒă‚żă‚’ç§»èĄŒă—ăŠă„ăŸă™\n%@ %%"; +"poll_history_load_more" = "ä»–ăźă‚ąăƒłă‚±ăƒŒăƒˆă‚’èȘ­ăżèŸŒă‚€"; +"key_backup_recover_from_private_key_progress" = "%@%%漌äș†"; +"voice_broadcast_playback_unable_to_decrypt" = "ă“ăźéŸłćŁ°é…äżĄă‚’ćŸ©ć·ćŒ–ă§ăăŸă›ă‚“ă€‚"; +"home_context_menu_mark_as_unread" = "æœȘèȘ­ă«ă™ă‚‹"; +"key_backup_setup_passphrase_passphrase_valid" = "ă„ă„ă§ă™ă­ïŒ"; +"key_backup_setup_passphrase_passphrase_invalid" = "èȘžă‚’èżœćŠ ă—ăŠăżă‚‹"; +"biometrics_cant_unlocked_alert_title" = "ケプăƒȘăźăƒ­ăƒƒă‚Żă‚’è§Łé™€ă§ăăŸă›ă‚“"; +"key_backup_setup_passphrase_confirm_passphrase_valid" = "ă„ă„ă§ă™ă­ïŒ"; +"room_avatar_view_accessibility_hint" = "ăƒ«ăƒŒăƒ ăźă‚ąăƒă‚żăƒŒă‚’ć€‰æ›Ž"; +"room_intro_cell_information_dm_sentence2" = "ă“ăźäŒšè©±ăŻăŠäșŒäșșだけで、他たäșșăŻć‚ćŠ ă§ăăŸă›ă‚“ă€‚"; +"favourites_empty_view_information" = "ăŠæ°—ă«ć…„ă‚Šç™»éŒČă«ăŻă„ăă€ă‹ăźæ–čæł•ăŒă‚ă‚ŠăŸă™ăŒă€äž€ç•Șæ‰‹ăŁć–ă‚Šæ—©ă„ăźăŻă€é•·æŠŒă—ă™ă‚‹ă“ăšă§ă™ă€‚æ˜ŸăƒžăƒŒă‚Żă‚’ă‚żăƒƒăƒ—ă™ă‚‹ăšă€è‡Șć‹•çš„ă«ă“ă“ă«èĄšç€șă•ă‚Œă€äżçźĄă•ă‚ŒăŸă™ă€‚"; +"room_intro_cell_information_multiple_dm_sentence2" = "èȘ°ă‹ă‚’æ‹›ćŸ…ă—ăȘă„é™ă‚Šă€ă“ăźäŒšè©±ă«ć‚ćŠ ă—ăŠă„ă‚‹ăźăŻă‚ăȘただけです。"; +"analytics_prompt_message_new_user" = "%@たæ”č斄べèȘČéĄŒæŠœć‡șăźăŸă‚ă«ă€ćŒżćăźäœżç”šçŠ¶æłăƒ‡ăƒŒă‚żăźé€äżĄă‚’ăŠéĄ˜ă„ă—ăŸă™ă€‚è€‡æ•°ăźç«Żæœ«ă§ăźäœżç”šă‚’ćˆ†æžă™ă‚‹ăŸă‚ă«ă€ă‚ăȘăŸăźć…šç«Żæœ«ć…±é€šăźăƒ©ăƒłăƒ€ăƒ ăȘè­˜ćˆ„ć­ă‚’ç”Ÿæˆă—ăŸă™ă€‚"; + +// Analytics +"analytics_prompt_title" = "%@たæ”čć–„ă‚’æ‰‹äŒă†"; +"event_formatter_call_active_video" = "ćźŸæ–œäž­ăźăƒ“ăƒ‡ă‚Ș通話"; +"event_formatter_call_active_voice" = "ćźŸæ–œäž­ăźéŸłćŁ°é€šè©±"; +"launch_loading_server_syncing_nth_attempt" = "ă‚”ăƒŒăƒăƒŒăšćŒæœŸă—ăŠă„ăŸă™\n%@ć›žè©ŠèĄŒïŒ‰"; +"create_room_suggest_room_footer" = "ăŠă™ă™ă‚ăźăƒ«ăƒŒăƒ ăŻă€ă‚čăƒšăƒŒă‚čăźăƒĄăƒłăƒăƒŒă«ćŻŸă—ăŠć‚ćŠ ć€™èŁœăšă—ăŠèĄšç€șă•ă‚ŒăŸă™ă€‚"; +"create_room_section_footer_type_public" = "ă‚čăƒšăƒŒă‚čぼ損才だけでăȘăă€æ‹›ćŸ…ă•ă‚ŒăŸäșșă ă‘ăŒæ€œçŽąăƒ»ć‚ćŠ ă§ăăŸă™ă€‚"; +"searchable_directory_x_network" = "%@ăƒăƒƒăƒˆăƒŻăƒŒă‚Ż"; +"pin_protection_explanatory" = "PINă‚łăƒŒăƒ‰ă‚’èš­ćźšă™ă‚‹ăšă€ăƒĄăƒƒă‚»ăƒŒă‚žă‚„é€Łç”Ąć…ˆăȘă©ăźăƒ‡ăƒŒă‚żă‚’äżè­·ă§ăăŸă™ă€‚ă‚ąăƒ—ăƒȘăźé–‹ć§‹æ™‚ă«PINă‚łăƒŒăƒ‰ă‚’ć…„ćŠ›ă™ă‚‹ă‚ˆă†èŠæ±‚ă—ăŸă™ă€‚"; +"secrets_recovery_with_key_information_default" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’ć…„ćŠ›ă™ă‚‹ăšă€äżè­·ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­Žăšă€ä»–ăźă‚»ăƒƒă‚·ăƒ§ăƒłăźèȘèšŒç”šăźă‚Żăƒ­ă‚čçœČ損IDにスクセă‚čă§ăăŸă™ă€‚"; +"secrets_recovery_with_passphrase_information_default" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’ć…„ćŠ›ă™ă‚‹ăšă€äżè­·ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žăźć±„æ­Žăšă€ä»–ăźă‚»ăƒƒă‚·ăƒ§ăƒłăźèȘèšŒç”šăźă‚Żăƒ­ă‚čçœČ損IDにスクセă‚čă§ăăŸă™ă€‚"; +"user_verification_session_details_verify_action_current_user" = "ă‚€ăƒłă‚żăƒ©ă‚Żăƒ†ă‚Łăƒ–èȘèšŒ"; +"share_extension_low_quality_video_message" = "%@ă‚’ă‚ˆă‚Šé«˜ă„ć“èłȘă§é€äżĄă€ă‚ă‚‹ă„ăŻă€ă‚ˆă‚ŠäœŽă„ć“èłȘで送信。"; +"room_access_space_chooser_other_spaces_section_info" = "これらは、%@ăźä»–ăźçźĄç†è€…ăŒă„ă‚‹ă‚čăƒšăƒŒă‚čăŸăŸăŻăƒ«ăƒŒăƒ ă§ă™ă€‚"; +"room_access_space_chooser_known_spaces_section" = "%@を搫む、あăȘăŸăŒçŸ„ăŁăŠă„ă‚‹ă‚čăƒšăƒŒă‚č"; + +// MARK: - Side menu + +"side_menu_reveal_action_accessibility_label" = "ć·Šăźăƒ‘ăƒăƒ«"; +"leave_space_selection_all_rooms" = "ć…šăŠăźăƒ«ăƒŒăƒ ă‚’éžæŠž"; +"spaces_add_room_missing_permission_message" = "こぼă‚čăƒšăƒŒă‚čă«ăƒ«ăƒŒăƒ ă‚’èżœćŠ ă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“ă€‚"; +"spaces_creation_invite_by_username_message" = "ćŸŒă‹ă‚‰æ‹›ćŸ…ă™ă‚‹ă“ăšă‚‚ă§ăăŸă™ă€‚"; +"spaces_creation_email_invites_message" = "ćŸŒă‹ă‚‰æ‹›ćŸ…ă™ă‚‹ă“ăšă‚‚ă§ăăŸă™ă€‚"; +"spaces_creation_address_invalid_characters" = "%@\nă«ăŻäžæ­ŁăȘæ–‡ć­—ăŒă‚ă‚ŠăŸă™"; +"spaces_creation_address_already_exists" = "%@\năŻæ—ąă«ć­˜ćœšă—ăŸă™"; +"spaces_creation_empty_room_name_error" = "ćç§°ăŒćż…èŠă§ă™"; +"space_settings_update_failed_message" = "ă‚čăƒšăƒŒă‚čăźèš­ćźšăźæ›Žæ–°ă«ć€±æ•—ă—ăŸă—ăŸă€‚ć†è©ŠèĄŒă—ăŸă™ă‹ïŒŸ"; +"spaces_coming_soon_title" = "èż‘æ—„ć…Źé–‹"; +"spaces_explore_rooms_format" = "%@ă‚’æŽąă™"; +"spaces_create_subspace_title" = "ă‚”ăƒ–ă‚čăƒšăƒŒă‚čă‚’äœœæˆ"; +"space_beta_announce_title" = "ă‚čăƒšăƒŒă‚čăŻèż‘æ—„ć…Źé–‹"; +"space_beta_announce_badge" = "ăƒ™ăƒŒă‚żç‰ˆ"; + +// MARK: - Spaces + +"space_feature_unavailable_title" = "ă‚čăƒšăƒŒă‚čăŻăŸă ă‚ă‚ŠăŸă›ă‚“"; +"room_invite_to_room_option_title" = "ă“ăźăƒ«ăƒŒăƒ ăźăż"; +"share_invite_link_room_text" = "こんにづは。%@ ă‹ă‚‰ă“ăźăƒ«ăƒŒăƒ ă«ć‚ćŠ ă—ăŠăă ă•ă„ă€‚"; +"share_invite_link_space_text" = "こんにづは。%@ からこぼă‚čăƒšăƒŒă‚čă«ć‚ćŠ ă—ăŠăă ă•ă„ă€‚"; + +// MARK: Key backup recover + +"key_backup_recover_title" = "ăƒĄăƒƒă‚»ăƒŒă‚žă‚’äżè­·"; +"secure_key_backup_setup_existing_backup_error_info" = "ăƒ­ăƒƒă‚Żă‚’è§Łé™€ă—ăŠă‚»ă‚­ăƒ„ă‚ąăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă§ć†ćˆ©ç”šă™ă‚‹ă‹ă€ć‰Šé™€ă—ăŠă‚»ă‚­ăƒ„ă‚ąăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă§ăƒĄăƒƒă‚»ăƒŒă‚žăźæ–°ă—ă„ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’äœœæˆă€‚"; +"room_access_settings_screen_restricted_message" = "ă‚čăƒšăƒŒă‚čをèȘ°ă§ă‚‚æ€œçŽąă—ă€ć‚ćŠ ă§ăă‚‹ă‚ˆă†ă«ă™ă‚‹ă€‚\nćŻŸè±Ąăźă‚čăƒšăƒŒă‚čをçąșèȘă—ăŠăă ă•ă„ă€‚"; +"room_details_promote_room_title" = "ăƒ«ăƒŒăƒ ă‚’ăƒ—ăƒ­ăƒąăƒŒăƒˆ"; +"settings_about" = "抂芁"; +"call_transfer_error_message" = "é€šè©±ăźè»ąé€ă«ć€±æ•—ă—ăŸă—ăŸ"; +"call_transfer_contacts_all" = "慹ど"; +"call_transfer_contacts_recent" = "ć±„æ­Ž"; + +// MARK: - Dial Pad +"dialpad_title" = "ăƒ€ă‚€ăƒ€ăƒ«ăƒ‘ăƒƒăƒ‰"; +"create_room_type_restricted" = "ă‚čăƒšăƒŒă‚čăźăƒĄăƒłăƒăƒŒ"; +"biometrics_cant_unlocked_alert_message_login" = "ć†ăƒ­ă‚°ă‚€ăƒł"; +"biometrics_cant_unlocked_alert_message_x" = "ăƒ­ăƒƒă‚Żă‚’è§Łé™€ă™ă‚‹ă«ăŻă€%@ă‚’äœżç”šă™ă‚‹ă‹ă€ć†ăƒ­ă‚°ă‚€ăƒłă—ăŠ%@ă‚’æœ‰ćŠčă«ă—ăŠăă ă•ă„"; +"biometrics_setup_subtitle" = "æ™‚é–“ă‚’çŻ€çŽ„"; +"biometrics_desetup_disable_button_title_x" = "%@を無ćŠčにする"; +"biometrics_desetup_title_x" = "%@を無ćŠčにする"; +"pin_protection_kick_user_alert_message" = "ć€šæ•°ăźă‚šăƒ©ăƒŒăŒç™șç”Ÿă—ăŸăŸă‚ă€ăƒ­ă‚°ă‚ąă‚Šăƒˆă—ăŸă—ăŸ"; +"pin_protection_not_allowed_pin" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒäžŠăźç†ç”±ă§ă€ă“ăźPINă‚łăƒŒăƒ‰ăŻćˆ©ç”šă§ăăŸă›ă‚“ă€‚ä»–ăźPINă‚łăƒŒăƒ‰ă‚’è©Šă—ăŠăă ă•ă„"; +"pin_protection_settings_change_pin" = "PINă‚łăƒŒăƒ‰ă‚’ć€‰æ›Ž"; +"pin_protection_settings_enabled_forced" = "PINă‚łăƒŒăƒ‰ăŒæœ‰ćŠčです"; +"pin_protection_settings_section_footer" = "PINă‚łăƒŒăƒ‰ă‚’ć†èš­ćźšă™ă‚‹ă«ăŻă€ć†ăƒ­ă‚°ă‚€ăƒłă—ăŠæ–°ă—ă„ă‚łăƒŒăƒ‰ă‚’äœœæˆă—ăŠăă ă•ă„ă€‚"; +"pin_protection_mismatch_too_many_times_error_message" = "PINă‚łăƒŒăƒ‰ă‚’èŠšăˆăŠă„ăȘい栮搈は「PINă‚łăƒŒăƒ‰ă‚’ćż˜ă‚ŒăŸă—ăŸă€ăźăƒœă‚żăƒłă‚’ă‚żăƒƒăƒ—ă—ăŠăă ă•ă„ă€‚"; +"pin_protection_mismatch_error_message" = "もう侀ćșŠă‚„ă‚Šç›Žă—ăŠăă ă•ă„"; +"pin_protection_mismatch_error_title" = "PINă‚łăƒŒăƒ‰ăŒäž€è‡Žă—ăŸă›ă‚“"; +"pin_protection_reset_alert_message" = "PINă‚łăƒŒăƒ‰ă‚’ć†èš­ćźšă™ă‚‹ă«ăŻă€ć†ăƒ­ă‚°ă‚€ăƒłă—ăŠæ–°ă—ă„ă‚łăƒŒăƒ‰ă‚’äœœæˆă—ăŠăă ă•ă„"; +"pin_protection_reset_alert_title" = "PINă‚łăƒŒăƒ‰ă‚’ć†èš­ćźš"; +"pin_protection_forgot_pin" = "PINă‚łăƒŒăƒ‰ă‚’ćż˜ă‚ŒăŸă—ăŸ"; +"pin_protection_enter_pin" = "PINă‚łăƒŒăƒ‰ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; +"pin_protection_confirm_pin_to_change" = "PINă‚łăƒŒăƒ‰ă‚’ć€‰æ›Žă™ă‚‹ă«ăŻă€PINă‚łăƒŒăƒ‰ă‚’çąșèȘă—ăŠăă ă•ă„"; +"pin_protection_confirm_pin_to_disable" = "PINă‚łăƒŒăƒ‰ă‚’ç„ĄćŠčにするには、PINă‚łăƒŒăƒ‰ă‚’çąșèȘă—ăŠăă ă•ă„"; +"major_update_information" = "ケプăƒȘăźćć‰ă‚’ć€‰æ›Žă—ăŸă—ăŸïŒă‚ąăƒ—ăƒȘăŻæœ€æ–°ç‰ˆă§ă€ă‚ąă‚«ă‚Šăƒłăƒˆă«ăŻăƒ­ă‚°ă‚€ăƒłæžˆă§ă™ă€‚"; + +// MARK: - Major update + +"major_update_title" = "Riotは%@にăȘă‚ŠăŸă—ăŸ"; +"secrets_reset_authentication_message" = "æ‰żèȘă™ă‚‹ă«ăŻMatrixăźă‚ąă‚«ă‚Šăƒłăƒˆăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ă‚’ć…„ćŠ›ă—ăŠăă ă•ă„"; +"secrets_setup_recovery_passphrase_summary_information" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’èš˜éŒČă—ăŠăă ă•ă„ă€‚ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’äœżă†ăšă€æš—ć·ćŒ–ă—ăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚„ăƒ‡ăƒŒă‚żăźăƒ­ăƒƒă‚Żă‚’è§Łé™€ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"secrets_setup_recovery_key_storage_alert_message" = "✓ ć°ćˆ·ă—ăŠćź‰ć…šăȘć Žæ‰€ă§äżçźĄ\n✓ USBă‚­ăƒŒă‚„ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ç”šăƒ‰ăƒ©ă‚€ăƒ–ă«äżć­˜\n✓ 怋äșșç”šăźă‚Żăƒ©ă‚Šăƒ‰ă‚čăƒˆăƒŹăƒŒă‚žă«ă‚łăƒ”ăƒŒ"; +"secrets_setup_recovery_key_information" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒăŻćź‰ć…šăȘć Žæ‰€ă§äżçźĄă—ăŠăă ă•ă„ă€‚ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’äœżă†ăšă€æš—ć·ćŒ–ă—ăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚„ăƒ‡ăƒŒă‚żăźăƒ­ăƒƒă‚Żă‚’è§Łé™€ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"secrets_recovery_with_key_invalid_recovery_key_message" = "æ­Łă—ă„ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’ć…„ćŠ›ă—ăŸă“ăšă‚’çąșèȘă—ăŠăă ă•ă„ă€‚"; +"secrets_recovery_with_key_information_unlock_secure_backup_with_phrase" = "ç¶šèĄŒă™ă‚‹ă«ăŻă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’ć…„ćŠ›ă—ăŠăă ă•ă„ă€‚"; +"secrets_recovery_with_key_information_verify_device" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒă‚­ăƒŒă‚’äœżç”šă—ăŠă€ă“ăźç«Żæœ«ă‚’èȘèšŒă—ăŠăă ă•ă„ă€‚"; +"secrets_recovery_with_passphrase_invalid_passphrase_message" = "æ­Łă—ă„ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’ć…„ćŠ›ă—ăŸă“ăšă‚’çąșèȘă—ăŠăă ă•ă„ă€‚"; +"secrets_recovery_with_passphrase_recover_action" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’äœżç”š"; +"secrets_recovery_with_passphrase_information_verify_device" = "ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăƒŒăƒ•ăƒŹăƒŒă‚șă‚’äœżç”šă—ăŠă€ă“ăźç«Żæœ«ă‚’èȘèšŒă—ăŠăă ă•ă„ă€‚"; + +// MARK: - Secrets recovery + +"secrets_recovery_reset_action_part_1" = "ć…šăŠăźćŸ©æ—§ç”šăźæ‰‹æź”ă‚’ćż˜ă‚ŒăŸă‹ă€ç„Ąăă—ăŸă—ăŸă‹ïŒŸ "; +"user_verification_session_details_additional_information_untrusted_current_user" = "ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă«ă‚”ă‚€ăƒłă‚€ăƒłă—ăȘかった栮搈、あăȘăŸăźă‚ąă‚«ă‚Šăƒłăƒˆăźćź‰ć…šæ€§ăŒæăȘă‚ă‚ŒăŠă„ă‚‹ćŻèƒœæ€§ăŒă‚ă‚ŠăŸă™ă€‚"; +"device_verification_self_verify_wait_recover_secrets_checking_availability" = "他たèȘèšŒæ–čæł•ă‚’çąșèȘă—ăŠă„ăŸă™â€Š"; +"device_verification_self_verify_wait_additional_information" = "これは%@べ、クロă‚čçœČćă«ćŻŸćżœă—ăŸä»–ăźMatrixăźă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆă§æ©Ÿèƒœă—ăŸă™ă€‚"; +"device_verification_self_verify_wait_information" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă«ă‚ąă‚Żă‚»ă‚čするには、あăȘăŸăźä»–ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‹ă‚‰ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚\n\nä»–ăźç«Żæœ«ă§æœ€æ–°ăź%@ă‚’äœżç”šă—ăŠăă ă•ă„ïŒš"; +"key_verification_self_verify_current_session_alert_message" = "ä»–ăźăƒŠăƒŒă‚¶ăƒŒăŻäżĄé Œă—ăȘă„ă‹ă‚‚ă—ă‚ŒăŸă›ă‚“ă€‚"; +"device_verification_start_use_legacy" = "äœ•ă‚‚èĄšç€șă•ă‚ŒăŸă›ă‚“ă‹ïŒŸăŸă ć…šăŠăźă‚Żăƒ©ă‚€ă‚ąăƒłăƒˆăŻă‚€ăƒłă‚żăƒ©ă‚Żăƒ†ă‚Łăƒ–ăȘèȘèšŒă‚’ă‚”ăƒăƒŒăƒˆă—ăŠă„ăŸă›ă‚“ă€‚ăƒŹă‚Źă‚·ăƒŒèȘèšŒă‚’äœżç”šă—ăŠăă ă•ă„ă€‚"; +"device_verification_start_wait_partner" = "ç›žæ‰‹ăźæ‰żè«Ÿă‚’ćŸ…æ©Ÿă—ăŠă„ăŸă™â€Š"; +"key_verification_user_title" = "èȘèšŒ"; +"key_verification_new_session_title" = "æ–°ă—ă„ă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒ"; +"sign_out_key_backup_in_progress_alert_cancel_action" = "ćŸ…æ©Ÿă—ăŸă™"; +"sign_out_non_existing_key_backup_sign_out_confirmation_alert_title" = "æš—ć·ćŒ–ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’ć€±ă„ăŸă™"; +"secure_key_backup_setup_existing_backup_error_title" = "ăƒĄăƒƒă‚»ăƒŒă‚žăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—ăŻæ—ąă«ć­˜ćœšă—ăŸă™"; +"service_terms_modal_policy_checkbox_accessibility_hint" = "チェックしど%@ă‚’æ‰żè«Ÿă—ăŠăă ă•ă„"; +"service_terms_modal_information_description_integration_manager" = "ă‚€ăƒłăƒ†ă‚°ăƒŹăƒŒă‚·ăƒ§ăƒłăƒžăƒăƒŒă‚žăƒŁăƒŒă‚’äœżă†ăšă€çŹŹäž‰è€…ă«ă‚ˆă‚‹æ©Ÿèƒœă‚’èżœćŠ ă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"service_terms_modal_information_description_identity_server" = "IDă‚”ăƒŒăƒăƒŒă‚’äœżă†ăšă€é›»è©±ç•Șć·ă‚„ăƒĄăƒŒăƒ«ă‚ąăƒ‰ăƒŹă‚čă‚’æ€œçŽąă—ăŠă€é€Łç”Ąć…ˆăŒæ—ąă«ă‚ąă‚«ă‚Šăƒłăƒˆă‚’ă‚‚ăŁăŠă„ă‚‹ă‹ă©ă†ă‹çąșèȘă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"service_terms_modal_description_integration_manager" = "ボット、ブăƒȘッゾ、ォィゾェット、ă‚čăƒ†ăƒƒă‚«ăƒŒăƒ‘ăƒƒă‚Żăźäœżç”šă‚’èš±ćŻă—ăŸă™ă€‚"; +"share_extension_low_quality_video_title" = "ć‹•ç”»ă‚’äœŽć“èłȘで送信"; +"analytics_prompt_yes" = "ăŻă„ă€ć€§äžˆć€«ă§ă™"; +/* Note: The placeholder is for the contents of analytics_prompt_terms_link_upgrade */ +"analytics_prompt_terms_upgrade" = "èŠçŽ„ă‚’%@でçąșèȘă—ăŠăă ă•ă„ă€‚ă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸ"; +/* Note: The placeholder is for the contents of analytics_prompt_terms_link_new_user */ +"analytics_prompt_terms_new_user" = "èŠçŽ„ăŻ%@でçąșèȘă§ăăŸă™ă€‚"; +"analytics_prompt_message_upgrade" = "あăȘăŸăŻä»„ć‰ă€ćˆ©ç”šçŠ¶æłă«é–ąă™ă‚‹ćŒżćăƒ‡ăƒŒă‚żăźć…±æœ‰ă«ćŒæ„ă—ăŸă—ăŸă€‚è€‡æ•°ăźç«Żæœ«ă§ăźäœżç”šă‚’ćˆ†æžă™ă‚‹ăŸă‚ă«ă€ă‚ăȘăŸăźć…šç«Żæœ«ć…±é€šăźăƒ©ăƒłăƒ€ăƒ ăȘè­˜ćˆ„ć­ă‚’ç”Ÿæˆă—ăŸă™ă€‚"; +"spaces_creation_in_one_space" = "1怋ぼă‚čăƒšăƒŒă‚čに"; +"spaces_creation_in_many_spaces" = "%@怋ぼă‚čăƒšăƒŒă‚čに"; +"spaces_creation_in_spacename_plus_many" = "%@ず%@怋ぼă‚čăƒšăƒŒă‚čに"; +"spaces_creation_in_spacename_plus_one" = "%@ず1怋ぼă‚čăƒšăƒŒă‚čに"; +"spaces_creation_in_spacename" = "%@に"; +"event_formatter_group_call_incoming" = "%@%@ă«ăŠïŒ‰"; + +// MARK: Reactions + +"room_event_action_reaction_more" = "他%@件"; +"notice_event_redacted_by_you" = " あăȘăŸă«ă‚ˆă‚Š"; +"room_displayname_all_other_members_left" = "%@退ć‡ș枈"; +"user_session_item_details_last_activity" = "ç›Žèż‘ăźă‚Șăƒłăƒ©ă‚€ăƒłæ—„æ™‚ %@"; +"version_check_modal_subtitle_deprecated" = "私たちは%@ăźé«˜é€ŸćŒ–ăšæ”čć–„ă«ć–ă‚Šç”„ă‚“ă§ăăŸă—ăŸă€‚æź‹ćż”ăȘăŒă‚‰çŸćœšăźiOSăźăƒăƒŒă‚žăƒ§ăƒłăŻăă‚Œă‚‰ăźäżźæ­Łă«ćŻŸćżœă—ăŠă„ăȘă„ăŸă‚ă€ă‚”ăƒăƒŒăƒˆă‚’ç”‚äș†ă—ăŸă—ăŸă€‚\nă‚ȘăƒšăƒŹăƒŒăƒ†ă‚Łăƒłă‚°ă‚·ă‚čăƒ†ăƒ ă‚’ă‚ąăƒƒăƒ—ăƒ‡ăƒŒăƒˆă—ăŠă€%@ă‚’æœ€ć€§é™ă«æŽ»ç”šă—ăŸă—ă‚‡ă†ă€‚"; +"version_check_modal_subtitle_supported" = "私たちは%@ăźé«˜é€ŸćŒ–ăšæ”čć–„ă«ć–ă‚Šç”„ă‚“ă§ăăŸă—ăŸă€‚æź‹ćż”ăȘăŒă‚‰çŸćœšăźiOSăźăƒăƒŒă‚žăƒ§ăƒłăŻăă‚Œă‚‰ăźäżźæ­Łă«ćŻŸćżœă—ăŠă„ăȘă„ăŸă‚ă€èż‘æ—„äž­ă«ă‚”ăƒăƒŒăƒˆć€–ăšăȘă‚ŠăŸă™ă€‚\nă‚ȘăƒšăƒŹăƒŒăƒ†ă‚Łăƒłă‚°ă‚·ă‚čăƒ†ăƒ ă‚’ă‚ąăƒƒăƒ—ăƒ‡ăƒŒăƒˆă—ăŠă€%@ă‚’æœ€ć€§é™ă«æŽ»ç”šă—ăŸă—ă‚‡ă†ă€‚"; +"key_verification_verified_this_session_information" = "äżè­·ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’ă“ăźç«Żæœ«ă§èȘ­ă‚€ă“ăšăŒă§ăăŸă™ă€‚ăŸăŸă€ä»–ăźăƒŠăƒŒă‚¶ăƒŒă‚‚ă“ăźç«Żæœ«ă‚’äżĄé Œă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"key_verification_verified_new_session_information" = "äżè­·ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’æ–°ă—ă„ç«Żæœ«ă§èȘ­ă‚€ă“ăšăŒă§ăăŸă™ă€‚ăŸăŸă€ä»–ăźăƒŠăƒŒă‚¶ăƒŒă‚‚ă“ăźç«Żæœ«ă‚’äżĄé Œă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"key_verification_verified_other_session_information" = "äżè­·ă•ă‚ŒăŸăƒĄăƒƒă‚»ăƒŒă‚žă‚’ä»–ăźă‚»ăƒƒă‚·ăƒ§ăƒłă§èȘ­ă‚€ă“ăšăŒă§ăăŸă™ă€‚ăŸăŸă€ä»–ăźăƒŠăƒŒă‚¶ăƒŒă‚‚ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’äżĄé Œă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"call_consulting_with_user" = "%@ăšç›žè«‡ă—ăŠă„ăŸă™"; +"room_displayname_more_than_two_members" = "%@ăšăăźä»–%@äșș"; +"notice_error_unformattable_event" = "** ăƒĄăƒƒă‚»ăƒŒă‚žă‚’æç”»ă§ăăŸă›ă‚“ă€‚äžć…·ćˆă‚’ć ±ć‘Šă—ăŠăă ă•ă„"; +"wysiwyg_composer_format_action_un_indent" = "ă‚€ăƒłăƒ‡ăƒłăƒˆă‚’æž›ă‚‰ă™"; +"wysiwyg_composer_format_action_indent" = "ă‚€ăƒłăƒ‡ăƒłăƒˆă‚’ćą—ă‚„ă™"; +"wysiwyg_composer_format_action_strikethrough" = "äž‹ç·šă§èŁ…éŁŸ"; +"wysiwyg_composer_format_action_underline" = "æ‰“ăĄæ¶ˆă—ç·šă§èŁ…éŁŸ"; + + +// MARK: - WYSIWYG Composer + +// Send Media Actions +"wysiwyg_composer_start_action_media_picker" = "ăƒ•ă‚©ăƒˆăƒ©ă‚€ăƒ–ăƒ©ăƒȘăƒŒ"; +"user_session_details_device_ip_location" = "IPäœçœźæƒ…ć ±"; +"user_session_details_session_section_footer" = "ă‚żăƒƒăƒ—ă—ăŠæŠŒă—ç¶šă‘ă‚‹ăšăƒ‡ăƒŒă‚żă‚’ă‚łăƒ”ăƒŒă—ăŸă™ă€‚"; +"device_name_mobile" = "%@ăƒąăƒă‚€ăƒ«"; +"device_name_web" = "%@ォェブ"; +// First item is client name and second item is session display name +"user_session_name" = "%@%@"; +"user_session_verification_unknown_additional_info" = "çŸćœšăźă‚»ăƒƒă‚·ăƒ§ăƒłă‚’èȘèšŒă™ă‚‹ăšă€ă“ăźă‚»ăƒƒă‚·ăƒ§ăƒłăźèȘèšŒăźçŠ¶æ…‹ă‚’çąșèȘă§ăăŸă™ă€‚"; +"user_sessions_overview_link_device" = "ç«Żæœ«ă‚’ăƒȘンク"; +"location_sharing_live_timer_incoming" = "%@ăŸă§ć…±æœ‰ïŒˆăƒ©ă‚€ăƒ–ïŒ‰"; +"location_sharing_live_list_item_last_update_invalid" = "æœ€ćŸŒăźæ›Žæ–°ăŻäžæ˜Žă§ă™"; +"location_sharing_live_list_item_last_update" = "%@ć‰ă«æ›Žæ–°æžˆ"; +"location_sharing_live_list_item_sharing_expired" = "ć…±æœ‰ăźæœŸé™ăŒćˆ‡ă‚ŒăŸă—ăŸ"; +"location_sharing_map_credits_title" = "© Copyright"; +"location_sharing_allow_background_location_message" = "äœçœźæƒ…ć ±ïŒˆăƒ©ă‚€ăƒ–ïŒ‰ă‚’ć…±æœ‰ă—ăŸă„ć Žćˆă€ElementăŻăƒăƒƒă‚Żă‚°ăƒ©ă‚Šăƒłăƒ‰ă§äœçœźæƒ…ć ±ă«ă‚ąă‚Żă‚»ă‚čă§ăă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚ă‚ąă‚Żă‚»ă‚čă‚’èš±ćŻă™ă‚‹ă«ăŻă€ă€Œèš­ćźšă€ăźă€Œäœçœźæƒ…ć ±ă€ă«ă‚ă‚‹ă€Œćžžă«ă€ă‚’ă‚żăƒƒăƒ—ă—ăŠăă ă•ă„ă€‚"; +"location_sharing_invalid_authorization_error_title" = "%@ă«ăŻäœçœźæƒ…ć ±ă«ă‚ąă‚Żă‚»ă‚čă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“ă€‚ă€Œèš­ćźšă€ăźă€Œäœçœźæƒ…ć ±ă€ă‹ă‚‰ă‚ąă‚Żă‚»ă‚čă‚’æœ‰ćŠčă«ă§ăăŸă™ă€‚"; +"location_sharing_loading_map_error_title" = "%@は朰曳をèȘ­ăżèŸŒă‚ăŸă›ă‚“ă§ă—ăŸă€‚ćŸŒă§ă‚‚ă†äž€ćșŠă‚„ă‚Šç›Žă—ăŠăă ă•ă„ă€‚"; +"poll_history_no_past_poll_period_text" = "過掻%@æ—„ă«ćźŸæ–œă•ă‚ŒăŸă‚ąăƒłă‚±ăƒŒăƒˆăŻă‚ă‚ŠăŸă›ă‚“ă€‚ă•ă‚‰ă«ă‚ąăƒłă‚±ăƒŒăƒˆă‚’èȘ­ăżèŸŒăżă€ć‰ăźæœˆăźă‚ąăƒłă‚±ăƒŒăƒˆă‚’èĄšç€ș"; +"poll_history_no_active_poll_period_text" = "過掻%@æ—„ă«ćźŸæ–œäž­ăźă‚ąăƒłă‚±ăƒŒăƒˆăŻă‚ă‚ŠăŸă›ă‚“ă€‚ă•ă‚‰ă«ă‚ąăƒłă‚±ăƒŒăƒˆă‚’èȘ­ăżèŸŒăżă€ć‰ăźæœˆăźă‚ąăƒłă‚±ăƒŒăƒˆă‚’èĄšç€ș"; +"poll_history_detail_view_in_timeline" = "ă‚ąăƒłă‚±ăƒŒăƒˆă‚’ă‚żă‚€ăƒ ăƒ©ă‚€ăƒłă«èĄšç€ș"; +"space_invite_nav_title" = "ă‚čăƒšăƒŒă‚čă«æ‹›ćŸ…"; + +// MARK: - Space Selector + +"space_selector_title" = "ă‚čăƒšăƒŒă‚č"; +"room_invites_empty_view_information" = "ă“ă“ă«æ‹›ćŸ…ăŒèĄšç€șă•ă‚ŒăŸă™ă€‚"; +"voice_message_stop_locked_mode_recording" = "éŒČéŸłă‚’ă‚żăƒƒăƒ—ă—ăŠćœæ­ąăŸăŸăŻć†ç”Ÿ"; +"leave_space_and_more_rooms" = "ă‚čăƒšăƒŒă‚čず%@ć€‹ăźăƒ«ăƒŒăƒ ă‹ă‚‰é€€ć‡ș"; +"leave_space_and_one_room" = "ă‚čăƒšăƒŒă‚čず1ć€‹ăźăƒ«ăƒŒăƒ ă‹ă‚‰é€€ć‡ș"; +"spaces_creation_post_process_inviting_users" = "%@äșșăźăƒŠăƒŒă‚¶ăƒŒă‚’æ‹›ćŸ…ă—ăŠă„ăŸă™"; +"spaces_creation_post_process_adding_rooms" = "%@ć€‹ăźăƒ«ăƒŒăƒ ă‚’èżœćŠ ă—ăŠă„ăŸă™"; +"spaces_creation_new_rooms_message" = "ăă‚Œăžă‚Œă«ăƒ«ăƒŒăƒ ă‚’äœœă‚ŠăŸă™ă€‚"; +"spaces_creation_new_rooms_title" = "ă©ăźă‚ˆă†ăȘè­°è«–ă‚’èĄŒă„ăŸă™ă‹ïŒŸ"; +"spaces_subspace_creation_visibility_message" = "äœœæˆă—ăŸă‚čăƒšăƒŒă‚čは%@ă«èżœćŠ ă•ă‚ŒăŸă™ă€‚"; +"spaces_feature_not_available" = "ă“ăźæ©ŸèƒœăŻăŸă ćˆ©ç”šă§ăăŸă›ă‚“ă€‚ćœ“éąăŻă€ă‚łăƒłăƒ”ăƒ„ăƒŒă‚żăƒŒă§%@ă«ă‚ˆă‚Šă“ă‚Œă‚’èĄŒă†ă“ăšăŒă§ăăŸă™ă€‚"; +"spaces_no_member_found_detail" = "%@ăźăƒĄăƒłăƒăƒŒä»„ć€–ăźäșșă‚’æŽąă—ăŠă„ăŸă™ă‹ïŒŸćœ“éąăŻă€ă‚Šă‚§ăƒ–ç‰ˆăŸăŸăŻăƒ‡ă‚čă‚Żăƒˆăƒƒăƒ—ç‰ˆă§æ‹›ćŸ…ă§ăăŸă™ă€‚"; +"spaces_coming_soon_detail" = "ă“ăźæ©ŸèƒœăŻăŸă ćźŸèŁ…ă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚ćœ“éąăŻă€ă‚łăƒłăƒ”ăƒ„ăƒŒă‚żăƒŒă§%@ă«ă‚ˆă‚Šă“ă‚Œă‚’èĄŒă†ă“ăšăŒă§ăăŸă™ă€‚"; +"spaces_invites_coming_soon_title" = "æ‹›ćŸ…ăŻèż‘æ—„ć…Źé–‹"; +"spaces_add_rooms_coming_soon_title" = "ăƒ«ăƒŒăƒ ăźèżœćŠ ăŻèż‘æ—„ć…Źé–‹"; +"spaces_no_room_found_detail" = "éžć…Źé–‹ă§æ‹›ćŸ…ăŒćż…èŠăȘă‚‚ăźăŻèĄšç€șă•ă‚ŒăŠă„ăŸă›ă‚“ă€‚"; +"leave_space_message_admin_warning" = "あăȘたはこぼă‚čăƒšăƒŒă‚čăźçźĄç†è€…ă§ă™ă€‚é€€ć‡șă™ă‚‹ć‰ă«ă€çźĄç†è€…ăźæš©é™ă‚’ćˆ„ăźăƒĄăƒłăƒăƒŒă«ç§»è­Čしどください。"; +"leave_space_message" = "%@から退ć‡șă—ăŠă‚ˆă‚ă—ă„ă§ă™ă‹ïŒŸă“ăźă‚čăƒšăƒŒă‚čăźć…šăŠăźăƒ«ăƒŒăƒ ăšă‚čăƒšăƒŒă‚čからも退ć‡șă—ăŸă™ă‹ïŒŸ"; +"spaces_add_subspace_title" = "%@憅にă‚čăƒšăƒŒă‚čă‚’äœœæˆ"; +"space_feature_unavailable_information" = "ă‚čăƒšăƒŒă‚čăŻă€ăƒ«ăƒŒăƒ ă‚„é€Łç”Ąć…ˆă‚’ăŸăšă‚ă‚‹æ–°ă—ă„æ–čæł•ă§ă™ă€‚\n\nèż‘æ—„ć…Źé–‹äșˆćźšă§ă™ă€‚ćˆ„ăźăƒ—ăƒ©ăƒƒăƒˆăƒ•ă‚©ăƒŒăƒ ă§ă‚čăƒšăƒŒă‚čă«ć‚ćŠ ă™ă‚‹ăšă€ă“ă“ă§ć‚ćŠ ă™ă‚‹ă©ăźăƒ«ăƒŒăƒ ă«ă‚‚ă‚ąă‚Żă‚»ă‚čă™ă‚‹ă“ăšăŒă§ăăŸă™ă€‚"; +"space_beta_announce_information" = "ă‚čăƒšăƒŒă‚čăŻă€ăƒ«ăƒŒăƒ ă‚„é€Łç”Ąć…ˆă‚’ăŸăšă‚ă‚‹æ–°ă—ă„æ–čæł•ă§ă™ă€‚iOSç‰ˆă§ăŻăŸă äœżç”šă§ăăŸă›ă‚“ăŒă€ă‚Šă‚§ăƒ–ç‰ˆăšăƒ‡ă‚čă‚Żăƒˆăƒƒăƒ—ç‰ˆă§ăŻäœżç”šă§ăăŸă™ă€‚"; +"space_feature_unavailable_subtitle" = "ă‚čăƒšăƒŒă‚čはiOSç‰ˆă§ăŻăŸă äœżç”šă§ăăŸă›ă‚“ăŒă€ă‚Šă‚§ăƒ–ç‰ˆăšăƒ‡ă‚čă‚Żăƒˆăƒƒăƒ—ç‰ˆă§ăŻäœżç”šă§ăăŸă™"; +"space_beta_announce_subtitle" = "ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚ŁăƒŒæ©Ÿèƒœăźæ–°ă—ă„ăƒăƒŒă‚žăƒ§ăƒł"; +"space_invite_not_enough_permission" = "こぼă‚čăƒšăƒŒă‚čă«ăƒŠăƒŒă‚¶ăƒŒă‚’æ‹›ćŸ…ă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“"; +"room_invite_not_enough_permission" = "ă“ăźăƒ«ăƒŒăƒ ă«ăƒŠăƒŒă‚¶ăƒŒă‚’æ‹›ćŸ…ă™ă‚‹æš©é™ăŒă‚ă‚ŠăŸă›ă‚“"; +"room_invite_to_room_option_detail" = "%@ăźăƒĄăƒłăƒăƒŒă«ăŻăȘă‚ŠăŸă›ă‚“ă€‚"; +"room_invite_to_space_option_detail" = "%@ă‚’æŽąă™ă“ăšăŻă§ăăŸă™ăŒă€%@ăźăƒĄăƒłăƒăƒŒă«ăŻăȘă‚ŠăŸă›ă‚“ă€‚"; + +// MARK: - Room invite + +"room_invite_to_space_option_title" = "%@に"; +"event_formatter_call_missed_video" = "äžćœšç€äżĄïŒˆăƒ“ăƒ‡ă‚Ș"; +"event_formatter_call_missed_voice" = "äžćœšç€äżĄïŒˆéŸłćŁ°ïŒ‰"; +"settings_push_rules_error" = "é€šçŸ„ăźèš­ćźšă‚’ă‚ąăƒƒăƒ—ăƒ‡ăƒŒăƒˆă™ă‚‹éš›ă«ă‚šăƒ©ăƒŒăŒç™șç”Ÿă—ăŸă—ăŸă€‚ă‚‚ă†äž€ćșŠă‚Șăƒ—ă‚·ăƒ§ăƒłă‚’ćˆ‡ă‚Šæ›żăˆăŠăżăŠăă ă•ă„ă€‚"; +"settings_presence" = "ăƒ—ăƒŹă‚Œăƒłă‚čă‚čăƒ†ăƒŒă‚żă‚čèĄšç€ș"; diff --git a/Riot/Assets/nl.lproj/Vector.strings b/Riot/Assets/nl.lproj/Vector.strings index ab294231c8..a814c281b5 100644 --- a/Riot/Assets/nl.lproj/Vector.strings +++ b/Riot/Assets/nl.lproj/Vector.strings @@ -2605,14 +2605,6 @@ // Mark: - Room invites "room_invites_empty_view_title" = "Niets nieuws."; -"all_chats_onboarding_try_it" = "Probeer het uit"; -"all_chats_onboarding_title" = "Wat is nieuw"; -"all_chats_onboarding_page_message3" = "Tik op je profiel om ons te laten weten wat je ervan vindt."; -"all_chats_onboarding_page_title3" = "Geef feedback"; -"all_chats_onboarding_page_message2" = "Krijg sneller en gemakkelijker toegang tot je Spaces (linksonder) dan ooit tevoren."; -"all_chats_onboarding_page_title2" = "Toegang tot spaces"; -"all_chats_onboarding_page_message1" = "Om je Element te vereenvoudigen, zijn tabbladen nu optioneel. Beheer ze met behulp van het menu rechtsboven."; -"all_chats_onboarding_page_title1" = "Welkom bij de nieuwe weergave!"; "all_chats_edit_menu_space_settings" = "Space instellingen"; "all_chats_edit_menu_leave_space" = "Verlaat %@"; "all_chats_user_menu_settings" = "Gebruikersinstellingen"; diff --git a/Riot/Assets/pl.lproj/Vector.strings b/Riot/Assets/pl.lproj/Vector.strings index 8532c4b4de..9106d3eea1 100644 --- a/Riot/Assets/pl.lproj/Vector.strings +++ b/Riot/Assets/pl.lproj/Vector.strings @@ -2533,13 +2533,6 @@ // Mark: - Room invites "room_invites_empty_view_title" = "Nic nowego."; -"all_chats_onboarding_try_it" = "WyprĂłbuj"; -"all_chats_onboarding_title" = "Co nowego"; -"all_chats_onboarding_page_message3" = "Dotknij swojego profilu by poinformować nas, co o tym sądzisz."; -"all_chats_onboarding_page_title3" = "Przeƛlij opinię"; -"all_chats_onboarding_page_message2" = "Uzyskaj dostęp do twoich przestrzeni (lewy dolny rĂłg) szybciej i proƛciej niĆŒÂ kiedykolwiek."; -"all_chats_onboarding_page_message1" = "Aby uproƛcić korzystanie z Element, karty są teraz opcjonalne. MoĆŒesz nimi zarządzać w menu w prawym gĂłrnym rogu."; -"all_chats_onboarding_page_title1" = "Witaj w nowym widoku!"; "all_chats_edit_menu_space_settings" = "Ustawienia przestrzeni"; "all_chats_edit_menu_leave_space" = "Opuƛć %@"; "all_chats_user_menu_settings" = "Ustawienia uĆŒytkownika"; diff --git a/Riot/Assets/pt_BR.lproj/Vector.strings b/Riot/Assets/pt_BR.lproj/Vector.strings index 582951c39b..0d9dbe5d9a 100644 --- a/Riot/Assets/pt_BR.lproj/Vector.strings +++ b/Riot/Assets/pt_BR.lproj/Vector.strings @@ -2446,14 +2446,6 @@ // Mark: - Room invites "room_invites_empty_view_title" = "Nada novo."; -"all_chats_onboarding_try_it" = "Experimentar"; -"all_chats_onboarding_title" = "O que tem de novo"; -"all_chats_onboarding_page_message3" = "Toque em seu perfil para nos deixar sabendo do que vocĂȘ acha."; -"all_chats_onboarding_page_title3" = "DĂȘ Feedback"; -"all_chats_onboarding_page_message2" = "Acesse seus Espaços (esquerda fundo) mais rĂĄpido e fĂĄcil que jamais antes."; -"all_chats_onboarding_page_title2" = "Acesse Espaços"; -"all_chats_onboarding_page_message1" = "Para simplificar seu Element, abas sĂŁo agora opcionais. Gerencie-as usando o menu direito topo."; -"all_chats_onboarding_page_title1" = "Boas vindas a uma nova visĂŁo!"; "all_chats_nothing_found_placeholder_message" = "Tente ajustar sua pesquisa."; "all_chats_nothing_found_placeholder_title" = "Nada encontrado."; "all_chats_empty_unreads_placeholder_message" = "Isto Ă© onde suas mensagens nĂŁo-lidas vĂŁo aparecer, quando vocĂȘ tiver algumas."; diff --git a/Riot/Assets/sk.lproj/Vector.strings b/Riot/Assets/sk.lproj/Vector.strings index 83b316cf8d..0aace81cce 100644 --- a/Riot/Assets/sk.lproj/Vector.strings +++ b/Riot/Assets/sk.lproj/Vector.strings @@ -2668,14 +2668,6 @@ // Mark: - Room invites "room_invites_empty_view_title" = "Nič novĂ©."; -"all_chats_onboarding_try_it" = "VyskĂșĆĄajte si to"; -"all_chats_onboarding_title" = "Čo je novĂ©"; -"all_chats_onboarding_page_message3" = "Ć€uknite na svoj profil a dajte nĂĄm vedieĆ„, čo si myslĂ­te."; -"all_chats_onboarding_page_title3" = "Poskytnite spĂ€tnĂș vĂ€zbu"; -"all_chats_onboarding_page_title2" = "PrĂ­stup k priestorom"; -"all_chats_onboarding_page_message2" = "ZĂ­skajte prĂ­stup k svojim priestorom (vÄŸavo dole) rĂœchlejĆĄie a jednoduchĆĄie ako kedykoÄŸvek predtĂœm."; -"all_chats_onboarding_page_message1" = "Pre zjednoduĆĄenie vaĆĄej aplikĂĄcie Element, sĂș teraz karty voliteÄŸnĂ©. Spravujte ich pomocou ponuky vpravo hore."; -"all_chats_onboarding_page_title1" = "Vitajte v novom zobrazenĂ­!"; "all_chats_nothing_found_placeholder_message" = "SkĂșste upraviĆ„ svoje hÄŸadanie."; "all_chats_nothing_found_placeholder_title" = "Nič sa nenaĆĄlo."; "all_chats_empty_unreads_placeholder_message" = "Tu sa zobrazia neprečítanĂ© sprĂĄvy, ak nejakĂ© mĂĄte."; @@ -2917,6 +2909,18 @@ // MARK: - Launch loading "launch_loading_migrating_data" = "MigrĂĄcia Ășdajov\n%@ %%"; -"settings_labs_disable_crypto_sdk" = "Crypto SDK je povolenĂ©. Ak to chcete vypnĂșĆ„, preinĆĄtalujte prosĂ­m aplikĂĄciu"; -"settings_labs_confirm_crypto_sdk" = "TĂșto akciu nemoĆŸno vrĂĄtiĆ„ spÀƄ"; -"settings_labs_enable_crypto_sdk" = "ZapnĂșĆ„ novĂ© Crypto SDK vyuĆŸĂ­vajĂșce Rust"; +"settings_labs_disable_crypto_sdk" = "Rust end-to-end ĆĄifrovanie (odhlĂĄste sa, aby ste ho vypli)"; +"settings_labs_confirm_crypto_sdk" = "Upozorƈujeme, ĆŸe tĂĄto funkcia je stĂĄle v experimentĂĄlnej fĂĄze, preto nemusĂ­ fungovaĆ„ podÄŸa očakĂĄvanĂ­ a mĂŽĆŸe maĆ„ potenciĂĄlne nezamĂœĆĄÄŸanĂ© dĂŽsledky. Ak chcete funkciu vrĂĄtiĆ„ spÀƄ, jednoducho sa odhlĂĄste a znova prihlĂĄste. PouĆŸĂ­vajte ju podÄŸa vlastnĂ©ho uvĂĄĆŸenia a s opatrnosĆ„ou."; +"settings_labs_enable_crypto_sdk" = "Rust end-to-end ĆĄifrovanie"; +"poll_history_load_more" = "NačítaĆ„ ďalĆĄie ankety"; +"poll_history_no_past_poll_period_text" = "Za poslednĂœch %@ dnĂ­ nie sĂș aktĂ­vne ĆŸiadne ankety. NačítanĂ­m ďalĆĄĂ­ch ankiet zobrazĂ­te ankety za predchĂĄdzajĂșce mesiace"; +"poll_history_no_active_poll_period_text" = "Za poslednĂœch %@ dnĂ­ nie sĂș aktĂ­vne ĆŸiadne ankety. NačítanĂ­m ďalĆĄĂ­ch ankiet zobrazĂ­te ankety za predchĂĄdzajĂșce mesiace"; +"poll_history_loading_text" = "Zobrazenie ankiet"; +"poll_history_fetching_error" = "Chyba pri načítavanĂ­ ankiet."; +"voice_broadcast_playback_unable_to_decrypt" = "Toto hlasovĂ© vysielanie sa nedĂĄ deĆĄifrovaĆ„."; +"home_context_menu_mark_as_unread" = "OznačiĆ„ ako neprečítanĂ©"; +"key_backup_recover_from_private_key_progress" = "%@%% DokončenĂ©"; +"wysiwyg_composer_format_action_indent" = "ZvĂ€ÄĆĄenie odsadenia"; +"wysiwyg_composer_format_action_un_indent" = "ZmenĆĄenie odsadenia"; +"poll_history_detail_view_in_timeline" = "ZobraziĆ„ anketu na časovej osi"; +"settings_push_rules_error" = "Pri aktualizĂĄcii vaĆĄich predvolieb oznĂĄmenĂ­ doĆĄlo k chybe. SkĂșste prosĂ­m prepnĂșĆ„ moĆŸnosĆ„ znova."; diff --git a/Riot/Assets/sq.lproj/Localizable.strings b/Riot/Assets/sq.lproj/Localizable.strings index a49dd96602..8036083e0c 100644 --- a/Riot/Assets/sq.lproj/Localizable.strings +++ b/Riot/Assets/sq.lproj/Localizable.strings @@ -118,3 +118,6 @@ /* New file message from a specific person, not referencing a room. */ "LOCATION_FROM_USER" = "%@ tregoi vendndodhjen e vet"; + +/* New voice broadcast from a specific person, not referencing a room. */ +"VOICE_BROADCAST_FROM_USER" = "%@ nisi njĂ« transmetim zanor"; diff --git a/Riot/Assets/sq.lproj/Vector.strings b/Riot/Assets/sq.lproj/Vector.strings index b2a297d078..4e6a4269eb 100644 --- a/Riot/Assets/sq.lproj/Vector.strings +++ b/Riot/Assets/sq.lproj/Vector.strings @@ -2417,7 +2417,6 @@ // MARK: Authentication "authentication_registration_title" = "Krijoni llogarinĂ« tuaj"; -"all_chats_onboarding_page_message3" = "Prekni profilin tuaj qĂ« tĂ« na bĂ«ni tĂ« ditur se ç’mendoni."; "all_chats_edit_layout_add_section_message" = "Fiksoni ndarje te kreu, pĂ«r hyrje tĂ« lehtĂ« nĂ« ta"; "room_event_encryption_info_key_authenticity_not_guaranteed" = "S’mund tĂ« garantohet mirĂ«filltĂ«sia e kĂ«tij mesazhi tĂ« fshehtĂ«zuar nĂ« kĂ«tĂ« pajisje."; "deselect_all" = "ShpĂ«rzgjidhi Krejt"; @@ -2534,13 +2533,6 @@ // Mark: - Room invites "room_invites_empty_view_title" = "S’ka gjĂ« tĂ« re."; -"all_chats_onboarding_try_it" = "Provojeni"; -"all_chats_onboarding_title" = "Ç’ka tĂ« re"; -"all_chats_onboarding_page_title3" = "Jepni PĂ«rshtypje"; -"all_chats_onboarding_page_message2" = "Hyni nĂ« HapĂ«sirat tuaja (poshtĂ« djathtas) mĂ« shpejt dhe mĂ« kollaj se kurrĂ« mĂ« parĂ«."; -"all_chats_onboarding_page_title2" = "Hyni NĂ« HapĂ«sira"; -"all_chats_onboarding_page_message1" = "QĂ« tĂ« thjeshtohet Element-i juaj, skedat tanimĂ« janĂ« opsionale. Administrojini duke pĂ«rdorur menunĂ« djathtas nĂ« krye."; -"all_chats_onboarding_page_title1" = "MirĂ« se vini te njĂ« pamje e re!"; "all_chats_edit_menu_space_settings" = "Rregullime hapĂ«sire"; "all_chats_edit_menu_leave_space" = "Braktise %@"; "all_chats_user_menu_settings" = "Rregullime pĂ«rdoruesi"; @@ -2687,3 +2679,35 @@ "voice_broadcast_voip_cannot_start_title" = "S’niset dot njĂ« thirrje"; "voice_message_broadcast_in_progress_message" = "S’mund tĂ« niset mesazh zanor, ngaqĂ« aktualisht po regjistroni njĂ« transmetim tĂ« drejtpĂ«rdrejtĂ«. Ju lutemi, pĂ«rfundoni transmetimin e drejtpĂ«rdrejtĂ«, qĂ« tĂ« mund tĂ« nisni regjistrimin e njĂ« mesazhi zanor"; "voice_message_broadcast_in_progress_title" = "S’niset dot mesazh zanor"; +"wysiwyg_composer_format_action_quote" = "Shfaq/fshih citim"; +"wysiwyg_composer_format_action_code_block" = "Shfaq/fshih bllok kodi"; +"wysiwyg_composer_format_action_ordered_list" = "Shfaq/fshih listĂ« tĂ« numĂ«rtuar"; +"wysiwyg_composer_format_action_unordered_list" = "Shfaq/fshih listĂ« me toptha"; +"poll_timeline_reply_ended_poll" = "PyetĂ«sor i pĂ«rfunduar"; +"poll_history_fetching_error" = "Gabim nĂ« sjelle pyetĂ«sorĂ«."; +"poll_history_load_more" = "Ngarko mĂ« tepĂ«r pyetĂ«sorĂ«"; +"poll_history_no_past_poll_period_text" = "S’ka pyetĂ«sorĂ« tĂ« kaluar pĂ«r %@ ditĂ«t e shkuara. QĂ« tĂ« shihni pyetĂ«sorĂ« nga muajt e kaluar, ngarkoni mĂ« tepĂ«r pyetĂ«sorĂ«"; +"poll_history_no_active_poll_period_text" = "S’ka pyetĂ«sorĂ« aktivĂ« pĂ«r %@ ditĂ«t e shkuara. QĂ« tĂ« shihni pyetĂ«sorĂ« nga muajt e kaluar, ngarkoni mĂ« tepĂ«r pyetĂ«sorĂ«"; +"poll_history_loading_text" = "Shfaqje pyetĂ«sorĂ«sh"; + +// MARK: - Polls history + +"poll_history_title" = "Historik pyetĂ«sorĂ«sh"; +"voice_broadcast_playback_unable_to_decrypt" = "S’arrihet tĂ« shfshehtĂ«zohet ky transmetim zanor."; +"voice_broadcast_recorder_connection_error" = "Gabim lidhjeje - Incizimi u ndal"; +"voice_broadcast_connection_error_message" = "Mjerisht, s’jemi nĂ« gjendje tĂ« nisim njĂ« incizim mu tani. Ju lutemi, riprovoni mĂ« vonĂ«."; +"voice_broadcast_connection_error_title" = "Gabim lidhjeje"; +"home_context_menu_mark_as_unread" = "VĂ«ri shenjĂ« si i palexuar"; + +// MARK: - Launch loading + +"launch_loading_migrating_data" = "Po migrohen tĂ« dhĂ«na\n%@ %%"; +"key_backup_recover_from_private_key_progress" = "PlotĂ«suar %@%%"; +"room_details_polls" = "Historik pyetĂ«sorĂ«sh"; +"settings_labs_disable_crypto_sdk" = "FshehtĂ«zim skaj-mĂ«-skaj bazuar nĂ« Rust (qĂ« ta çaktivizoni, dilni)"; +"settings_labs_confirm_crypto_sdk" = "Ju lutemi, kini parasysh se kjo veçori Ă«shtĂ« ende nĂ« fazĂ« eksperimentale, mund tĂ« mos funksionojĂ« siç pritet dhe mundet, nĂ« potencial, tĂ« ketĂ« pasojĂ« tĂ« paparashikuara. QĂ« ta prapaktheni kĂ«tĂ« veçori, thjesht dilni nga llogaria dhe rihyni. PĂ«rdoreni me pĂ«rgjegjĂ«sinĂ« tuaj dhe me kujdes."; +"settings_labs_enable_crypto_sdk" = "FshehtĂ«zim skaj-mĂ«-skaj bazuar nĂ« Rust"; +"settings_push_rules_error" = "Ndodhi njĂ« gabim, kur pĂ«rditĂ«soheshin parapĂ«lqimet tuaja pĂ«r njoftime. JU lutemi, provoni tĂ« aktivizoni mundĂ«si tuaj sĂ«rish."; +"wysiwyg_composer_format_action_un_indent" = "ZvogĂ«lo shmangie kryeradhĂ«"; +"wysiwyg_composer_format_action_indent" = "Rrit shmangie kryeradhe"; +"poll_history_detail_view_in_timeline" = "Shiheni pyetĂ«sorin nĂ« rrjedhĂ« kohore"; diff --git a/Riot/Assets/sv.lproj/Vector.strings b/Riot/Assets/sv.lproj/Vector.strings index 872645f667..a8fa6cf8b1 100644 --- a/Riot/Assets/sv.lproj/Vector.strings +++ b/Riot/Assets/sv.lproj/Vector.strings @@ -2472,3 +2472,199 @@ "authentication_choose_password_not_verified_title" = "E-post inte verifierad"; "authentication_login_with_qr" = "Logga in med QR-kod"; "invite_to" = "Bjud in till %@"; +"room_event_encryption_info_key_authenticity_not_guaranteed" = "Äktheten för det hĂ€r krypterade meddelandet kan inte garanteras pĂ„ den hĂ€r enheten."; +"notice_voice_broadcast_ended_by_you" = "Du avslutade en röstsĂ€ndning."; +"notice_voice_broadcast_ended" = "%@ avslutade en röstsĂ€ndning."; +"notice_voice_broadcast_live" = "DirektsĂ€ndning"; +"deselect_all" = "VĂ€lj bort alla"; +"wysiwyg_composer_link_action_edit_title" = "Redigera lĂ€nk"; +"wysiwyg_composer_link_action_create_title" = "Skapa en lĂ€nk"; +"wysiwyg_composer_link_action_link" = "LĂ€nk"; + + + +// Links +"wysiwyg_composer_link_action_text" = "Text"; +"wysiwyg_composer_format_action_quote" = "VĂ€xla citat"; +"wysiwyg_composer_format_action_code_block" = "VĂ€xla kodblock"; +"wysiwyg_composer_format_action_ordered_list" = "VĂ€xla numrerad lista"; +"wysiwyg_composer_format_action_unordered_list" = "VĂ€xla punktlista"; +"wysiwyg_composer_format_action_inline_code" = "TillĂ€mpa inline-kodstil"; +"wysiwyg_composer_format_action_link" = "TillĂ€mpa lĂ€nkformat"; +"wysiwyg_composer_format_action_strikethrough" = "TillĂ€mpa understruken stil"; +"wysiwyg_composer_format_action_underline" = "TillĂ€mpa genomstruken stil"; +"wysiwyg_composer_format_action_italic" = "TillĂ€mpa kursiv stil"; + +// Formatting Actions +"wysiwyg_composer_format_action_bold" = "TillĂ€mpa fetstil"; +"wysiwyg_composer_start_action_voice_broadcast" = "RöstsĂ€ndning"; +"wysiwyg_composer_start_action_text_formatting" = "Textformatering"; +"wysiwyg_composer_start_action_camera" = "Kamera"; +"wysiwyg_composer_start_action_location" = "Plats"; +"wysiwyg_composer_start_action_polls" = "Omröstningar"; +"wysiwyg_composer_start_action_attachments" = "Bilagor"; +"wysiwyg_composer_start_action_stickers" = "Dekaler"; + + +// MARK: - WYSIWYG Composer + +// Send Media Actions +"wysiwyg_composer_start_action_media_picker" = "Fotobibliotek"; +"user_session_overview_session_details_button_title" = "Sessionsdetaljer"; +"user_session_overview_session_title" = "Session"; +"user_session_overview_current_session_title" = "Nuvarande session"; +"user_session_details_application_url" = "URL"; +"user_session_details_application_version" = "Version"; +"user_session_details_application_name" = "Namn"; +"user_session_details_device_os" = "Operativsystem"; +"user_session_details_device_browser" = "WebblĂ€sare"; +"user_session_details_device_model" = "Modell"; +"user_session_details_device_ip_location" = "IP-plats"; +"user_session_details_device_ip_address" = "IP-adress"; +"user_session_details_last_activity" = "Senaste aktivitet"; +"user_session_details_session_section_footer" = "Kopiera data genom att trycka pĂ„ den och hĂ„lla nere."; +"user_session_details_session_id" = "Sessions-ID"; +"user_session_details_session_name" = "Sessionsnamn"; +"user_session_details_device_section_header" = "Enhet"; +"user_session_details_application_section_header" = "Applikation"; +"user_session_details_session_section_header" = "Session"; +"user_session_details_title" = "Sessionsdetaljer"; +"device_type_name_unknown" = "OkĂ€nd"; +"device_type_name_mobile" = "Mobil"; +"device_type_name_web" = "Webb"; +"device_type_name_desktop" = "Skrivbord"; +"device_name_unknown" = "OkĂ€nd klient"; +"device_name_mobile" = "%@ Mobil"; +"device_name_web" = "%@ Webb"; +"device_name_desktop" = "%@ Skrivbord"; +"user_inactive_session_item_with_date" = "Inaktiv i 90+ dagar (%@)"; +"user_inactive_session_item" = "Inaktiv i 90+ dagar"; +"user_session_item_details_last_activity" = "Senast aktiv %@"; + +/* %1$@ will be the verification state and %2$@ will be user_session_item_details_verification_unknown or user_other_session_current_session_details */ +"user_session_item_details" = "%1$@ · %2$@"; +// First item is client name and second item is session display name +"user_session_name" = "%@: %@"; +"user_other_session_menu_sign_out_sessions" = "Logga ut ur %@ sessioner"; +"user_other_session_menu_select_sessions" = "VĂ€lj sessioner"; +"user_other_session_selected_count" = "%@ valda"; +"user_other_session_clear_filter" = "Rensa filter"; +"user_other_session_no_unverified_sessions" = "Inga overifierade sessioner hittade."; +"user_other_session_no_verified_sessions" = "Inga verifierade sessioner hittade."; +"user_other_session_no_inactive_sessions" = "Inga inaktiva sessioner hittade."; +"user_other_session_filter_menu_inactive" = "Inaktiva"; +"user_other_session_filter_menu_unverified" = "Overifierade"; +"user_other_session_filter_menu_verified" = "Verifierade"; +"user_other_session_filter_menu_all" = "Alla sessioner"; +"user_other_session_filter" = "Filtrera"; +"user_other_session_verified_sessions_header_subtitle" = "För bĂ€st sĂ€kerhet, logga ut ur alla sessioner du inte kĂ€nner igen eller anvĂ€nder lĂ€ngre."; +"user_other_session_current_session_details" = "Din nuvarande session"; +"user_other_session_unverified_sessions_header_subtitle" = "Verifiera dina sessioner för förbĂ€ttrade sĂ€kra meddelanden eller logga ut ur de du inte kĂ€nner igen eller anvĂ€nder lĂ€ngre."; +"user_other_session_security_recommendation_title" = "Andra sessioner"; +"user_session_rename_session_description" = "Andra anvĂ€ndare i direktmeddelanden och rum du gĂ„r med i kan se den fulla listan över dina sessioner.\n\nDetta gör att de kan lita pĂ„ att de verkligen pratar med dig, men det betyder ocksĂ„ att de kan se sessionsnamnet du anger hĂ€r."; +"user_session_rename_session_title" = "Döper om sessioner"; +"user_session_inactive_session_description" = "Inaktiva sessioner Ă€r sessioner du inte har anvĂ€nt pĂ„ ett tag, men de fortsĂ€tter att ta emot krypteringsnycklar.\n\nBorttagning av inaktiva sessioner förbĂ€ttrar sĂ€kerhet och prestanda, och gör det enklare för dig att identifiera om en ny session ser misstĂ€nkt ut."; +"user_session_inactive_session_title" = "Inaktiva sessioner"; +"user_session_permanently_unverified_session_description" = "Sessionen stöder inte kryptering, sĂ„ den kan inte verifieras.\n\nDu kommer inte kunna delta i rum dĂ€r kryptering Ă€r aktiverat nĂ€r du anvĂ€nder den hĂ€r sessionen.\n\nFör bĂ€st sĂ€kerhet sĂ„ rekommenderas det att anvĂ€nda Matrixklienter som stöder kryptering."; +"user_session_unverified_session_description" = "Overifierade sessioner Ă€r sessioner som har loggat in med dina uppgifter men som inte har korsverifierats.\n\nDu bör speciellt försĂ€kra att du kĂ€nner igen dessa sessioner eftersom de kan representera obehörig anvĂ€ndning av ditt konto."; +"user_session_unverified_session_title" = "Overifierad session"; +"user_session_verified_session_description" = "Verifierade sessioner Ă€r alla stĂ€llen dĂ€r du anvĂ€nder Element efter att ha angett din lösenfras eller bekrĂ€ftat din identitet med en annan verifierad session.\n\nDet betyder att du har alla nycklar som krĂ€vs för att lĂ„sa upp krypterade meddelanden och bekrĂ€fta för andra anvĂ€ndare att du litar pĂ„ den hĂ€r sessionen."; +"user_session_verified_session_title" = "Verifierade sessioner"; +"user_session_got_it" = "FörstĂ„tt"; +"user_session_push_notifications_message" = "NĂ€r aktiverad sĂ„ tar den hĂ€r sessionen emot pushnotiser."; +"user_session_push_notifications" = "Pushnotiser"; +"user_other_session_verified_additional_info" = "Den hĂ€r sessioner Ă€r redo för sĂ€kra meddelanden."; +"user_other_session_permanently_unverified_additional_info" = "Den hĂ€r sessionen stöder inte kryptering och kan dĂ€rför inte verifieras."; +"user_other_session_unverified_additional_info" = "Verifiera eller logga ut ur den hĂ€r sessionen för bĂ€st sĂ€kerhet och pĂ„litlighet."; +"user_session_verification_unknown_additional_info" = "Verifiera din nuvarande session för att avslöja den hĂ€r sessionens verifieringsstatus."; +"user_session_unverified_additional_info" = "Verifiera din nuvarande session för förbĂ€ttrade sĂ€kra meddelanden."; +"user_session_verified_additional_info" = "Din nuvarande session Ă€r redo för sĂ€kra meddelanden."; +"user_session_learn_more" = "LĂ€s mer"; +"user_session_view_details" = "Visa detaljer"; +"user_session_verify_action" = "Verifiera session"; +"user_session_verification_unknown_short" = "OkĂ€nd"; +"user_session_unverified_short" = "Overifierad"; +"user_session_verified_short" = "Verifierad"; +"user_session_verification_unknown" = "OkĂ€nd verifieringsstatus"; +"user_session_unverified" = "Overifierad session"; +"user_session_verified" = "Verifierad session"; +"user_sessions_view_all_action" = "Visa alla (%d)"; +"user_sessions_overview_link_device" = "LĂ€nka en enhet"; +"user_sessions_overview_current_session_section_title" = "Nuvarande session"; +"user_sessions_hide_location_info" = "Dölj IP-adress"; +"user_sessions_show_location_info" = "Visa IP-adress"; +"user_sessions_overview_other_sessions_section_info" = "För bĂ€st sĂ€kerhet, verifiera dina sessioner och logga ut ur alla sessioner du inte kĂ€nner igen eller anvĂ€nder lĂ€ngre."; +"user_sessions_overview_other_sessions_section_title" = "Andra sessioner"; +"user_sessions_overview_security_recommendations_inactive_info" = "ÖvervĂ€g att logga ut ur gamla sessioner (90 dagar eller Ă€ldre) du inte anvĂ€nder lĂ€ngre."; +"user_sessions_overview_security_recommendations_inactive_title" = "Inaktiva sessioner"; +"user_sessions_overview_security_recommendations_unverified_info" = "Verifiera eller logga ut frĂ„n overifierade sessioner."; +"user_sessions_overview_security_recommendations_unverified_title" = "Overifierade sessioner"; +"user_sessions_overview_security_recommendations_section_info" = "FörbĂ€ttra din kontosĂ€kerhet genom att följa dessa rekommendationer."; +"user_sessions_overview_security_recommendations_section_title" = "SĂ€kerhetsrekommendationer"; +"user_sessions_overview_title" = "Sessioner"; + +// MARK: User sessions management + +// Parameter is the application display name (e.g. "Element") +"user_sessions_default_session_display_name" = "%@ iOS"; +"location_sharing_map_loading_error" = "Kan inte ladda karta.\nDen hĂ€r hemservern Ă€r inte konfigurerad för att visa kartor"; +"location_sharing_invalid_power_level_message" = "Du har inte de behörigheter som krĂ€vs för att dela realtidsplats i det hĂ€r rummet."; +"location_sharing_invalid_power_level_title" = "Du Ă€r inte behörig att dela realtidsplats"; +"poll_timeline_reply_ended_poll" = "Avslutade omröstning"; +"poll_timeline_ended_text" = "Avslutade omröstningen"; +"poll_timeline_decryption_error" = "PĂ„ grund av avkrypteringsfel sĂ„ kanske inte vissa röster rĂ€knas"; +"poll_history_fetching_error" = "Fel vid hĂ€mtning av omröstningar."; +"poll_history_load_more" = "Ladda fler omröstningar"; +"poll_history_no_past_poll_period_text" = "Det finns inga tidigare omröstningar frĂ„n det senaste %@ dagarna. Ladda fler omröstningar för att se omröstningar frĂ„n tidigare mĂ„nader"; +"poll_history_no_active_poll_period_text" = "Det finns inga aktiva omröstningar under de senaste %@ dagarna. Ladda fler omröstningar för att visa omröstningar för tidigare mĂ„nader"; +"poll_history_no_past_poll_text" = "Det finns inga tidigare omröstningar i det hĂ€r rummet"; +"poll_history_no_active_poll_text" = "Det finns inga aktiva omröstningar i det hĂ€r rummet"; +"poll_history_past_segment_title" = "Tidigare omröstningar"; +"poll_history_active_segment_title" = "Aktiva omröstningar"; +"poll_history_loading_text" = "Visar omröstningar"; + +// MARK: - Polls history + +"poll_history_title" = "Omröstningshistorik"; +"space_invite_nav_title" = "Utrymmesinbjudan"; +"space_detail_nav_title" = "Utrymmesdetalj"; +"space_selector_create_space" = "Skapa utrymme"; +"space_selector_empty_view_information" = "Utrymmen Ă€r ett sĂ€tt att gruppera rum och personer. Skapa et utrymme för att komma igĂ„ng."; +"space_selector_empty_view_title" = "Inga utrymmen Ă€n."; + +// MARK: - Space Selector + +"space_selector_title" = "Mina utrymmen"; +"room_invites_empty_view_information" = "Det hĂ€r Ă€r vart dina inbjudningar hamnar."; + +// MARK: - Room invites + +"room_invites_empty_view_title" = "Inget nytt."; +"all_chats_edit_menu_space_settings" = "UtrymmesinstĂ€llningar"; +"all_chats_edit_menu_leave_space" = "LĂ€mna %@"; +"all_chats_user_menu_settings" = "AnvĂ€ndarinstĂ€llningar"; +"all_chats_user_menu_accessibility_label" = "AnvĂ€ndarmeny"; +"room_recents_recently_viewed_section" = "Nyligen sedda"; +"all_chats_nothing_found_placeholder_message" = "Pröva att justera din sökning."; +"all_chats_nothing_found_placeholder_title" = "Inget hittat."; +"all_chats_empty_unreads_placeholder_message" = "Det hĂ€r Ă€r vart dina olĂ€sta meddelanden kommer att hamna, nĂ€r du har nĂ„gra."; +"voice_broadcast_recorder_connection_error" = "Anslutningsfel - Inspelning pausad"; +"voice_broadcast_connection_error_message" = "TyvĂ€rr kan vi inte starta en röstsĂ€ndning för tillfĂ€llet. VĂ€nligen pröva igen senare."; +"voice_broadcast_connection_error_title" = "Anslutningsfel"; +"voice_broadcast_playback_lock_screen_placeholder" = "RöstsĂ€ndning"; + +// MARK: - Launch loading + +"launch_loading_migrating_data" = "Migrerar data\n%@ %%"; +"room_details_polls" = "Omröstningshistorik"; +"settings_labs_disable_crypto_sdk" = "TotalstrĂ€ckskryptering i Rust (logga ut för att stĂ€nga av)"; +"settings_labs_confirm_crypto_sdk" = "VĂ€nligen observera att den hĂ€r funktionen fortfarande ska anses vara experimentell, den kanske inte fungerar som förvĂ€ntat eller kan leda till okĂ€nda konsekvenser. För att Ă„tergĂ„, logga ut och logga sedan in igen. AnvĂ€nd pĂ„ egen risk."; +"settings_labs_enable_crypto_sdk" = "TotalstrĂ€ckskryptering i Rust"; +"accessibility_selected" = "vald"; +"settings_push_rules_error" = "Ett fel uppstod vid uppdatering av dina aviseringsinstĂ€llningar. VĂ€nligen försök att vĂ€xla dina alternativ igen."; +"wysiwyg_composer_format_action_un_indent" = "Minska indrag"; +"wysiwyg_composer_format_action_indent" = "Öka indrag"; +"poll_history_detail_view_in_timeline" = "Visa omröstning i tidslinje"; +"voice_broadcast_playback_unable_to_decrypt" = "Kunde inte avkryptera denna röstsĂ€ndning."; +"home_context_menu_mark_as_unread" = "Markera som olĂ€st"; +"key_backup_recover_from_private_key_progress" = "%@%% FĂ€rdig"; diff --git a/Riot/Assets/uk.lproj/Vector.strings b/Riot/Assets/uk.lproj/Vector.strings index 95c51d890c..cc3bd8b93e 100644 --- a/Riot/Assets/uk.lproj/Vector.strings +++ b/Riot/Assets/uk.lproj/Vector.strings @@ -2670,14 +2670,6 @@ // Mark: - Room invites "room_invites_empty_view_title" = "ĐŃ–Ń‡ĐŸĐłĐŸ ĐœĐŸĐČĐŸĐłĐŸ."; -"all_chats_onboarding_try_it" = "ĐĄĐżŃ€ĐŸĐ±ŃƒĐČато"; -"all_chats_onboarding_title" = "Đ©ĐŸ ĐœĐŸĐČĐŸĐłĐŸ"; -"all_chats_onboarding_page_message3" = "ĐąĐŸŃ€ĐșĐœŃ–Ń‚ŃŒŃŃ сĐČĐŸĐłĐŸ ĐżŃ€ĐŸŃ„Ń–Đ»ŃŽ, Ń‰ĐŸĐ± Ń€ĐŸĐ·ĐżĐŸĐČісто ĐœĐ°ĐŒ сĐČĐŸŃŽ ĐŽŃƒĐŒĐșу."; -"all_chats_onboarding_page_title3" = "Напошіть ĐČіЮгуĐș"; -"all_chats_onboarding_page_message2" = "ĐžŃ‚Ń€ĐžĐŒŃƒĐčŃ‚Đ” ĐŽĐŸŃŃ‚ŃƒĐż ĐŽĐŸ сĐČĐŸŃ—Ń… ĐżŃ€ĐŸŃŃ‚ĐŸŃ€Ń–ĐČ (ŃƒĐœĐžĐ·Ńƒ ліĐČĐŸŃ€ŃƒŃ‡) шĐČОЎшД та лДгшД, ĐœŃ–Đ¶ Ń€Đ°ĐœŃ–ŃˆĐ”."; -"all_chats_onboarding_page_title2" = "Đ”ĐŸŃŃ‚ŃƒĐż ĐŽĐŸ ĐżŃ€ĐŸŃŃ‚ĐŸŃ€Ń–ĐČ"; -"all_chats_onboarding_page_message1" = "Đ©ĐŸĐ± ŃĐżŃ€ĐŸŃŃ‚ĐžŃ‚Đž ĐČаш Element, ĐČĐșлаЎĐșĐž тДпДр ĐœĐ”ĐŸĐ±ĐŸĐČâ€™ŃĐ·ĐșĐŸĐČі. ĐšĐ”Ń€ŃƒĐčŃ‚Đ” ĐœĐžĐŒĐž у ĐČĐ”Ń€Ń…ĐœŃŒĐŸĐŒŃƒ праĐČĐŸĐŒŃƒ ĐŒĐ”ĐœŃŽ."; -"all_chats_onboarding_page_title1" = "Đ’Ń–Ń‚Đ°Ń”ĐŒĐŸ ĐČ ĐœĐŸĐČĐŸĐŒŃƒ ĐČĐžĐłĐ»ŃĐŽŃ–!"; "all_chats_nothing_found_placeholder_message" = "ĐĄĐżŃ€ĐŸĐ±ŃƒĐčŃ‚Đ” ĐœĐ°Đ»Đ°ŃˆŃ‚ŃƒĐČато ĐżĐŸŃˆŃƒĐș."; "all_chats_nothing_found_placeholder_title" = "ĐŃ–Ń‡ĐŸĐłĐŸ ĐœĐ” Đ·ĐœĐ°ĐčĐŽĐ”ĐœĐŸ."; "all_chats_empty_unreads_placeholder_message" = "бут Đ·'яĐČĐ»ŃŃ‚ĐžĐŒŃƒŃ‚ŃŒŃŃ ĐČаші ĐœĐ”ĐżŃ€ĐŸŃ‡ĐžŃ‚Đ°ĐœŃ– ĐżĐŸĐČŃ–ĐŽĐŸĐŒĐ»Đ”ĐœĐœŃ, яĐșŃ‰ĐŸ ĐČĐŸĐœĐž є."; @@ -2919,6 +2911,18 @@ // MARK: - Launch loading "launch_loading_migrating_data" = "ĐŸĐ”Ń€Đ”ĐœĐ”ŃĐ”ĐœĐœŃ ĐŽĐ°ĐœĐžŃ…\n%@ %%"; -"settings_labs_disable_crypto_sdk" = "Crypto SDK уĐČŃ–ĐŒĐșĐœĐ”ĐœĐŸ. Đ©ĐŸĐ± ĐČĐžĐŒĐșĐœŃƒŃ‚Đž, пДрДĐČŃŃ‚Đ°ĐœĐŸĐČіть Đ·Đ°ŃŃ‚ĐŸŃŃƒĐœĐŸĐș"; -"settings_labs_confirm_crypto_sdk" = "Дію ĐœĐ” ĐŒĐŸĐ¶ĐœĐ° сĐșасуĐČато"; -"settings_labs_enable_crypto_sdk" = "ĐŁĐČŃ–ĐŒĐșĐœŃƒŃ‚Đž ĐœĐŸĐČĐžĐč Đ·Đ°ŃĐœĐŸĐČĐ°ĐœĐžĐč ĐœĐ° rust Crypto SDK"; +"settings_labs_disable_crypto_sdk" = "НасĐșŃ€Ń–Đ·ĐœĐ” шофруĐČĐ°ĐœĐœŃ Rust (ĐČĐžĐčЮіть, Ń‰ĐŸĐ± ĐČĐžĐŒĐșĐœŃƒŃ‚Đž)"; +"settings_labs_confirm_crypto_sdk" = "ЗауĐČажтД, Ń‰ĐŸ ĐŸŃĐșŃ–Đ»ŃŒĐșĐž ця Ń„ŃƒĐœĐșція ĐŽĐŸŃŃ– ĐżĐ”Ń€Đ”Đ±ŃƒĐČає ĐœĐ° стаЮії Đ”ĐșŃĐżĐ”Ń€ĐžĐŒĐ”ĐœŃ‚Ńƒ, ĐČĐŸĐœĐ° ĐŒĐŸĐ¶Đ” працюĐČато ĐœĐ” таĐș, яĐș ĐŸŃ‡Ń–Đșується, і ĐŒĐŸĐ¶Đ” ĐŒĐ°Ń‚Đž ĐœĐ”ĐżĐ”Ń€Đ”ĐŽĐ±Đ°Ń‡ŃƒĐČĐ°ĐœŃ– ĐœĐ°ŃĐ»Ń–ĐŽĐșĐž. Đ©ĐŸĐ± ĐČĐžĐŒĐșĐœŃƒŃ‚Đž цю Ń„ŃƒĐœĐșцію, ĐżŃ€ĐŸŃŃ‚ĐŸ ĐČĐžĐčЮіть Đ· ŃĐžŃŃ‚Đ”ĐŒĐž та уĐČіĐčЮіть Đ·ĐœĐŸĐČу. ВоĐșĐŸŃ€ĐžŃŃ‚ĐŸĐČуĐčŃ‚Đ” ĐœĐ° ĐČĐ»Đ°ŃĐœĐžĐč Ń€ĐŸĐ·ŃŃƒĐŽ і Đ· ĐŸĐ±Đ”Ń€Đ”Đ¶ĐœŃ–ŃŃ‚ŃŽ."; +"settings_labs_enable_crypto_sdk" = "НасĐșŃ€Ń–Đ·ĐœĐ” шофруĐČĐ°ĐœĐœŃ Rust"; +"poll_history_load_more" = "ЗаĐČĐ°ĐœŃ‚Đ°Đ¶ĐžŃ‚Đž Đ±Ń–Đ»ŃŒŃˆĐ” ĐŸĐżĐžŃ‚ŃƒĐČĐ°ĐœŃŒ"; +"poll_history_no_past_poll_period_text" = "За ĐŸŃŃ‚Đ°ĐœĐœŃ– %@ ĐŽĐœŃ–ĐČ ĐœĐ”ĐŒĐ°Ń” Đ°ĐșтоĐČĐœĐžŃ… ĐŸĐżĐžŃ‚ŃƒĐČĐ°ĐœŃŒ. ЗаĐČĐ°ĐœŃ‚Đ°Đ¶Ń‚Đ” Đ±Ń–Đ»ŃŒŃˆĐ” ĐŸĐżĐžŃ‚ŃƒĐČĐ°ĐœŃŒ, Ń‰ĐŸĐ± ĐżĐ”Ń€Đ”ĐłĐ»ŃĐœŃƒŃ‚Đž ĐŸĐżĐžŃ‚ŃƒĐČĐ°ĐœĐœŃ Đ·Đ° ĐżĐŸĐżĐ”Ń€Đ”ĐŽĐœŃ– ĐŒŃ–ŃŃŃ†Ń–"; +"poll_history_no_active_poll_period_text" = "За ĐŸŃŃ‚Đ°ĐœĐœŃ– %@ ĐŽĐœŃ–ĐČ ĐœĐ”ĐŒĐ°Ń” Đ°ĐșтоĐČĐœĐžŃ… ĐŸĐżĐžŃ‚ŃƒĐČĐ°ĐœŃŒ. ЗаĐČĐ°ĐœŃ‚Đ°Đ¶Ń‚Đ” Đ±Ń–Đ»ŃŒŃˆĐ” ĐŸĐżĐžŃ‚ŃƒĐČĐ°ĐœŃŒ, Ń‰ĐŸĐ± ĐżĐ”Ń€Đ”ĐłĐ»ŃĐœŃƒŃ‚Đž ĐŸĐżĐžŃ‚ŃƒĐČĐ°ĐœĐœŃ Đ·Đ° ĐżĐŸĐżĐ”Ń€Đ”ĐŽĐœŃ– ĐŒŃ–ŃŃŃ†Ń–"; +"poll_history_loading_text" = "ĐŸĐŸĐșĐ°Đ· ĐŸĐżĐžŃ‚ŃƒĐČĐ°ĐœŃŒ"; +"poll_history_fetching_error" = "ĐŸĐŸĐŒĐžĐ»ĐșĐ° ĐŸŃ‚Ń€ĐžĐŒĐ°ĐœĐœŃ ĐŸĐżĐžŃ‚ŃƒĐČĐ°ĐœŃŒ."; +"key_backup_recover_from_private_key_progress" = "%@%% ĐČĐžĐșĐŸĐœĐ°ĐœĐŸ"; +"voice_broadcast_playback_unable_to_decrypt" = "ĐĐ”ĐŒĐŸĐ¶Đ»ĐžĐČĐŸ Ń€ĐŸĐ·ŃˆĐžŃ„Ń€ŃƒĐČато цю ĐłĐŸĐ»ĐŸŃĐŸĐČу Ń‚Ń€Đ°ĐœŃĐ»ŃŃ†Ń–ŃŽ."; +"home_context_menu_mark_as_unread" = "ĐŸĐŸĐ·ĐœĐ°Ń‡ĐžŃ‚Đž ĐœĐ”ĐżŃ€ĐŸŃ‡ĐžŃ‚Đ°ĐœĐžĐŒ"; +"wysiwyg_composer_format_action_un_indent" = "Đ—ĐŒĐ”ĐœŃˆĐžŃ‚Đž ĐČіЮступ"; +"wysiwyg_composer_format_action_indent" = "Đ—Đ±Ń–Đ»ŃŒŃˆĐžŃ‚Đž ĐČіЮступ"; +"settings_push_rules_error" = "ĐĄŃ‚Đ°Đ»Đ°ŃŃ ĐżĐŸĐŒĐžĐ»ĐșĐ° піЮ час ĐŸĐœĐŸĐČĐ»Đ”ĐœĐœŃ ĐœĐ°Đ»Đ°ŃˆŃ‚ŃƒĐČĐ°ĐœŃŒ ŃĐżĐŸĐČŃ–Ń‰Đ”ĐœŃŒ. ĐĄĐżŃ€ĐŸĐ±ŃƒĐčŃ‚Đ” Đ·ĐŒŃ–ĐœĐžŃ‚Đž ĐœĐ°Đ»Đ°ŃˆŃ‚ŃƒĐČĐ°ĐœĐœŃ щД раз."; +"poll_history_detail_view_in_timeline" = "ĐŸĐ”Ń€Đ”ĐłĐ»ŃĐœŃƒŃ‚Đž ĐŸĐżĐžŃ‚ŃƒĐČĐ°ĐœĐœŃ у стрічці"; diff --git a/Riot/Assets/zh_Hans.lproj/Vector.strings b/Riot/Assets/zh_Hans.lproj/Vector.strings index f7fd8166c9..69d2d7cb93 100644 --- a/Riot/Assets/zh_Hans.lproj/Vector.strings +++ b/Riot/Assets/zh_Hans.lproj/Vector.strings @@ -287,8 +287,8 @@ "settings_old_password" = "æ—§ćŻ†ç "; "settings_new_password" = "æ–°ćŻ†ç "; "settings_confirm_password" = "çĄźèź€ćŻ†ç "; -"settings_fail_to_update_password" = "æ›Žæ–°ćŻ†ç ć€±èŽ„"; -"settings_password_updated" = "æ‚šçš„ćŻ†ç ć·Č经曎新"; +"settings_fail_to_update_password" = "曎新MatrixèŽŠæˆ·ćŻ†ç ć€±èŽ„"; +"settings_password_updated" = "æ‚šçš„MatrixèŽŠæˆ·ćŻ†ç ć·Č经曎新"; "settings_crypto_device_name" = "äŒšèŻćç§°ïŒš "; "settings_crypto_device_id" = "\näŒšèŻID "; "settings_crypto_device_key" = "\näŒšèŻćŻ†é’„:\n"; @@ -582,7 +582,7 @@ "deactivate_account_informations_part5" = "ćŠ‚æžœæ‚šćžŒæœ›æˆ‘ä»Źćż˜èź°æ‚šçš„æ¶ˆæŻïŒŒèŻ·ć‹Ÿé€‰äž‹éąçš„æĄ†\n\nMatrixäž­çš„æ¶ˆæŻćŻè§æ€§äžŽç””ć­é‚źä»¶ç±»äŒŒă€‚ æˆ‘ä»Źćż˜èź°æ‚šçš„æ¶ˆæŻæ„ć‘łç€æ‚šć·Čć‘é€çš„æ¶ˆæŻć°†äžäŒšć†äžŽä»»äœ•æ–°ç”šæˆ·æˆ–æœȘæłšć†Œç”šæˆ·ć…±äș«ïŒŒäœ†ć·Čæœ‰æƒèźżé—źèż™äș›æ¶ˆæŻçš„æłšć†Œç”šæˆ·ä»ćŻèźżé—źć…¶ć‰ŻæœŹă€‚"; "deactivate_account_forget_messages_information_part1" = "ćœ“æˆ‘çš„èŽŠæˆ·èą«ćœç”šæ—¶ïŒŒèŻ·ćż˜èź°æˆ‘ć‘é€çš„æ‰€æœ‰æ¶ˆæŻïŒˆ"; "deactivate_account_forget_messages_information_part3" = ": èż™äŒšćŻŒè‡Žć°†æ„ćŠ ć…„çš„ç”šæˆ·çœ‹ćˆ°çš„æ˜Żäž€æź”äžćźŒæ•Žçš„ćŻčèŻïŒ‰"; -"deactivate_account_password_alert_message" = "èŠç»§ç»­ïŒŒèŻ·èŸ“ć…„æ‚šçš„ćŻ†ç "; +"deactivate_account_password_alert_message" = "èŠç»§ç»­ïŒŒèŻ·èŸ“ć…„äœ çš„MatrixèŽŠæˆ·ćŻ†ç "; "rerequest_keys_alert_message" = "èŻ·ćœšćŠäž€ć°ćŻä»„è§ŁćŻ†æ¶ˆæŻçš„èźŸć€‡äžŠćŻćŠš%@ïŒŒèż™æ ·ćźƒć°±ćŻä»„ć°†ćŻ†é’„ć‘é€ćˆ°æ­€äŒšèŻă€‚"; "key_backup_setup_title" = "ćŻ†é’„ć€‡ä»œ"; "key_backup_setup_skip_alert_title" = "æ‚šçĄźćźšć—ïŒŸ"; @@ -725,7 +725,7 @@ "settings_labs_enable_cross_signing" = "ćŒ€ćŻäș€ć‰ç­ŸćæŒ‰ç”šæˆ·éȘŒèŻè€Œäžæ˜ŻæŒ‰èźŸć€‡éȘŒèŻïŒˆćŒ€ć‘䞭"; "settings_add_3pid_password_title_email" = "æ·»ćŠ é‚źçź±ćœ°ć€"; "settings_add_3pid_password_title_msidsn" = "æ·»ćŠ ç””èŻć·ç "; -"settings_add_3pid_password_message" = "èŻ·ćĄ«ć†™äœ çš„ćŻ†ç ä»„ç»§ç»­"; +"settings_add_3pid_password_message" = "èŻ·ćĄ«ć†™äœ çš„MatrixèŽŠæˆ·çš„ćŻ†ç ä»„ç»§ç»­"; "settings_add_3pid_invalid_password_message" = "éȘŒèŻäżĄæŻæ— æ•ˆ"; "settings_key_backup_button_connect" = "ć…łè”æ­€äŒšèŻćˆ°ćŻ†é’„ć€‡ä»œ"; "settings_devices_description" = "äŒšèŻçš„ć…ŹćŒ€ćć­—äŒšćŻč䜠联络的äșșćŻè§"; @@ -1044,15 +1044,15 @@ "key_verification_bootstrap_not_setup_title" = "é”™èŻŻ"; "key_verification_bootstrap_not_setup_message" = "æ‚šéœ€èŠć…ˆćŻćŠšäș€ć‰ç­Ÿćă€‚"; "key_verification_verify_qr_code_title" = "é€šèż‡æ‰«æèż›èĄŒéȘŒèŻ"; -"key_verification_verify_qr_code_information" = "æ‰«æä»Łç ä»„ćź‰ć…šćœ°ç›žäș’éȘŒèŻă€‚"; -"key_verification_verify_qr_code_information_other_device" = "æ‰«æä»„äž‹ä»Łç ä»„éȘŒèŻïŒš"; +"key_verification_verify_qr_code_information" = "æ‰«ææĄç ä»„ćź‰ć…šćœ°ç›žäș’éȘŒèŻă€‚"; +"key_verification_verify_qr_code_information_other_device" = "æ‰«æä»„äž‹æĄç ä»„éȘŒèŻïŒš"; "key_verification_verify_qr_code_emoji_information" = "é€šèż‡æŻ”èŸƒć”Żäž€çš„èĄšæƒ…çŹŠć·èż›èĄŒéȘŒèŻă€‚"; -"key_verification_verify_qr_code_scan_code_action" = "æ‰«æä»–ä»Źçš„ä»Łç "; +"key_verification_verify_qr_code_scan_code_action" = "æ‰«æä»–ä»Źçš„æĄç "; "key_verification_verify_qr_code_cannot_scan_action" = "äžèƒœæ‰«æć—ïŒŸ"; "key_verification_verify_qr_code_start_emoji_action" = "é€šèż‡èĄšæƒ…çŹŠć·éȘŒèŻ"; -"key_verification_verify_qr_code_other_scan_my_code_title" = "ć…¶ä»–ç”šæˆ·æ˜ŻćŠæˆćŠŸæ‰«æäș†äșŒç»Žç ïŒŸ"; +"key_verification_verify_qr_code_other_scan_my_code_title" = "ć…¶ä»–ç”šæˆ·æ˜ŻćŠæˆćŠŸæ‰«æäș†QR码"; "key_verification_verify_qr_code_scan_other_code_success_title" = "代码ć·ČéȘŒèŻïŒ"; -"key_verification_verify_qr_code_scan_other_code_success_message" = "äșŒç»Žç ć·ČæˆćŠŸéȘŒèŻă€‚"; +"key_verification_verify_qr_code_scan_other_code_success_message" = "QR码ć·ČæˆćŠŸéȘŒèŻă€‚"; // Scanning "key_verification_scan_confirmation_scanning_title" = "ćż«ć„œäș†ïŒæ­Łćœšç­‰ćŸ…çĄźèź€â€Š"; "key_verification_scan_confirmation_scanning_user_waiting_other" = "ç­‰ćŸ…äž­%@
"; @@ -1082,7 +1082,7 @@ "secrets_recovery_with_key_invalid_recovery_key_title" = "æ— æł•èźżé—źæœș毆歘悹"; "secrets_recovery_with_key_invalid_recovery_key_message" = "èŻ·éȘŒèŻæ‚šèŸ“ć…„çš„ćź‰ć…šćŻ†é’„æ˜ŻćŠæ­ŁçĄźă€‚"; "rooms_empty_view_information" = "æˆżé—Žéžćžžé€‚ćˆä»»äœ•çŸ€èŠïŒŒæ— èźșæ˜Żç§äșșçš„èż˜æ˜Żć…Źć…±çš„ă€‚ç‚č懻+ä»„æŸ„æ‰ŸçŽ°æœ‰æˆżé—ŽïŒŒæˆ–æ–°ć»șæˆżé—Žă€‚"; -"security_settings_user_password_description" = "é€šèż‡èŸ“ć…„æ‚šçš„èŽŠæˆ·ćŻ†ç çĄźèź€æ‚šçš„èș«ä»œ"; +"security_settings_user_password_description" = "é€šèż‡èŸ“ć…„æ‚šçš„MatrixèŽŠæˆ·ćŻ†ç çĄźèź€æ‚šçš„èș«ä»œ"; "rooms_empty_view_title" = "æˆżé—Ž"; "people_empty_view_information" = "䞎任䜕äșșćź‰ć…šèŠć€©ă€‚ç‚č懻+ćŒ€ć§‹æ·»ćŠ äșș摘。"; "people_empty_view_title" = "甚户"; @@ -1104,7 +1104,7 @@ "security_settings_secure_backup_synchronise" = "ćŒæ­„"; "security_settings_secure_backup_setup" = "èźŸçœź"; "security_settings_secure_backup_description" = "ć€‡ä»œäœ çš„èŽŠæˆ·æ•°æźć€‡ä»œć’ŒćŠ ćŻ†ćŻ†é’„ïŒŒä»„é˜Čäœ æ— æł•èźżé—źäŒšèŻă€‚ äœ çš„ćŻ†é’„ć°†ć—ćˆ°ć”Żäž€çš„ćź‰ć…šćŻ†é’„äżæŠ€ă€‚"; -"security_settings_crypto_sessions_description_2" = "ćŠ‚æžœæ‚šæœȘæ›Ÿć‘è”·ç™»ćœ•ïŒŒèŻ·æ›Žæ”č毆码ćč¶é‡çœźćź‰ć…šć€‡ä»œă€‚"; +"security_settings_crypto_sessions_description_2" = "ćŠ‚æžœæ‚šæœȘæ›Ÿć‘è”·ç™»ćœ•ïŒŒèŻ·æ›Žæ”čMatrixèŽŠæˆ·çš„ćŻ†ç ćč¶é‡çœźćź‰ć…šć€‡ä»œă€‚"; "settings_show_NSFW_public_rooms" = "星ç€ș NSFW ć…Źć…±æˆżé—Ž"; "external_link_confirmation_message" = "歀铟掄 %@ äŒšć°†æ‚šćžŠè‡łćŠäž€äžȘ眑站%@\n\næ˜ŻćŠć‰ćŸ€ïŒŸ"; "external_link_confirmation_title" = "ćŒć‡»æ­€é“ŸæŽ„"; @@ -1167,14 +1167,14 @@ "room_info_list_section_other" = "慶他"; "create_room_section_footer_encryption" = "ćŠ ćŻ†äž€ç»ćŻç”šïŒŒäŸżæ— æł•çŠç”šă€‚"; "create_room_placeholder_address" = "#testroom:matrix.org"; -"create_room_section_header_address" = "æˆżé—Žćœ°ć€"; -"create_room_section_header_type" = "æˆżé—Žç±»ćž‹"; +"create_room_section_header_address" = "朰杀"; +"create_room_section_header_type" = "è°ćŻä»„ćŠ ć…„"; "create_room_enable_encryption" = "搯甹抠毆"; -"create_room_section_header_encryption" = "æˆżé—ŽćŠ ćŻ†"; +"create_room_section_header_encryption" = "抠毆"; "create_room_placeholder_topic" = "èż™äžȘæˆżé—Žæ˜Żć…łäșŽä»€äčˆçš„"; -"create_room_section_header_topic" = "æˆżé—ŽèŻéą˜ïŒˆćŻé€‰ïŒ‰"; +"create_room_section_header_topic" = "èŻéą˜ïŒˆćŻé€‰ïŒ‰"; "create_room_placeholder_name" = "損称"; -"create_room_section_header_name" = "æˆżé—Žćç§°"; +"create_room_section_header_name" = "損称"; // MARK: - Create Room @@ -1251,10 +1251,10 @@ "invite_friends_share_text" = "ć—šïŒŒćœš %@ è·Ÿæˆ‘èŻŽïŒš%@"; "favourites_empty_view_information" = "äœ ćŻä»„é€‰æ‹©ć‡ ç§æ–čæł• - æœ€ćż«ćȘéœ€æŒ‰äœă€‚ç‚čć‡»æ˜Ÿæ˜ŸïŒŒćźƒä»ŹäŒšè‡Ș抹ć‡șçŽ°ćœšèż™é‡ŒïŒŒä»„çĄźäżćź‰ć…šă€‚"; "home_empty_view_information" = "ć›ąé˜Ÿă€æœ‹ć‹ć’Œç»„ç»‡çš„äž€äœ“ćŒ–ćź‰ć…šèŠć€©ćș”甚皋ćșă€‚ ç‚čć‡»äž‹éąçš„ă€Œ+ă€æŒ‰é’źæ·»ćŠ äșșć‘˜ć’Œæˆżé—Žă€‚"; -"create_room_show_in_directory" = "ćœšç›źćœ•äž­æ˜Ÿç€șæˆżé—Ž"; +"create_room_show_in_directory" = "ćœšæˆżé—Žç›źćœ•äž­æ˜Ÿç€ș"; "create_room_section_footer_type" = "äșș仏ćȘæœ‰ćœšæ”¶ćˆ°èŠć€©ćź€é‚€èŻ·ćŽæ‰ćŻä»„èż›ć…„ç§æœ‰æˆżé—Žă€‚"; -"create_room_type_public" = "ć…ŹćŒ€æˆżé—Ž"; -"create_room_type_private" = "ç§æœ‰æˆżé—Ž"; +"create_room_type_public" = "ć…ŹćŒ€æˆżé—ŽïŒˆä»»äœ•äșș"; +"create_room_type_private" = "ç§æœ‰æˆżé—ŽïŒˆä»…é‚€èŻ·ïŒ‰"; "biometrics_cant_unlocked_alert_message_login" = "é‡æ–°ç™»ćœ•"; "biometrics_cant_unlocked_alert_message_x" = "è‹„èŠè§Łé”ïŒŒèŻ·äœżç”š %@ æˆ–é‡æ–°ç™»ćœ•ćč¶ćŻç”š %@"; "biometrics_cant_unlocked_alert_title" = "æ— æł•è§Łé”ćș”甚皋ćș"; @@ -1288,7 +1288,7 @@ // Banner "cross_signing_setup_banner_title" = "èźŸçœźćŠ ćŻ†"; -"secrets_reset_authentication_message" = "èŻ·èŸ“ć…„äœ çš„èŽŠæˆ·ćŻ†ç èż›èĄŒçĄźèź€"; +"secrets_reset_authentication_message" = "èŻ·èŸ“ć…„äœ çš„MatrixèŽŠæˆ·ćŻ†ç èż›èĄŒçĄźèź€"; "secrets_reset_warning_message" = "æ‚šć°†é‡æ–°ćŻćŠšïŒŒæČĄæœ‰ćŽ†ćČèź°ćœ•ïŒŒæ¶ˆæŻïŒŒć—äżĄä»»çš„èźŸć€‡æˆ–ć—äżĄä»»çš„ç”šæˆ·ă€‚"; "secrets_reset_warning_title" = "ćŠ‚æžœäœ é€‰æ‹©ć…šéƒšé‡çœź"; "secrets_reset_information" = "ä»…ćœ“æČĄæœ‰ć…¶ä»–èźŸć€‡ćŻç”šæ„éȘŒèŻæ­€èźŸć€‡æ—¶ïŒŒæ‰æ‰§èĄŒæ­€æ“äœœă€‚"; @@ -2259,19 +2259,29 @@ "authentication_qr_login_failure_retry" = "ć†èŻ•äž€æŹĄ"; "authentication_qr_login_failure_request_timed_out" = "èżžæŽ„æČĄæœ‰ćœšè§„ćźšçš„æ—¶é—Žć†…ćźŒæˆă€‚"; "authentication_qr_login_failure_request_denied" = "èŻ·æ±‚ćœšćŠäž€äžȘèźŸć€‡äžŠèą«æ‹’ç»ă€‚"; -"authentication_qr_login_failure_invalid_qr" = "äșŒç»Žç æ— æ•ˆă€‚"; +"authentication_qr_login_failure_invalid_qr" = "QRç æ— æ•ˆă€‚"; "authentication_qr_login_failure_title" = "èżžæŽ„ć€±èŽ„"; "authentication_qr_login_loading_signed_in" = "æ‚šçŽ°ćœšć·Čç»ç™»ćœ•ćˆ°ćŠäž€äžȘèźŸć€‡äžŠă€‚"; -"authentication_qr_login_loading_waiting_signin" = "ç­‰ćŸ…èźŸć€‡ç™»ćœ•ă€‚"; -"authentication_qr_login_loading_connecting_device" = "èżžæŽ„ćˆ°èźŸć€‡"; -"authentication_qr_login_confirm_alert" = "èŻ·çĄźäżæ‚šçŸ„é“æ­€ä»Łç çš„æ„æșă€‚é€šèż‡èżžæŽ„èźŸć€‡ïŒŒæ‚šć°†äžș某äșș提䟛ćŻčæ‚šćžæˆ·çš„ćźŒć…šèźżé—źæƒé™ă€‚"; -"authentication_qr_login_confirm_subtitle" = "çĄźèź€äž‹éąçš„ä»Łç äžŽæ‚šçš„ć…¶ä»–èźŸć€‡ćŒč配:"; -"authentication_qr_login_confirm_title" = "ć»șç«‹ćź‰ć…šèżžæŽ„"; -"authentication_qr_login_scan_subtitle" = "氆äșŒç»Žç æ”Ÿçœźćœšäž‹éąçš„æ–čæĄ†äž­"; -"authentication_qr_login_scan_title" = "扫描äșŒç»Žç "; -"authentication_qr_login_display_step2" = "选择“仄äșŒç»Žç ç™»ć…„”"; +"authentication_qr_login_loading_waiting_signin" = "æ­Łćœšç­‰ćŸ…èźŸć€‡ä»„ç™»ćœ•ă€‚"; +"authentication_qr_login_loading_connecting_device" = "æ­ŁćœšèżžæŽ„ćˆ°èźŸć€‡"; +"authentication_qr_login_confirm_alert" = "èŻ·çĄźäżæ‚šçŸ„é“æ­€ä»Łç çš„æ„æșă€‚é€šèż‡èżžæŽ„èźŸć€‡ïŒŒæ‚šć°†äžș某äșș提䟛ćŻčæ‚šèŽŠæˆ·çš„ćźŒć…šèźżé—źæƒé™ă€‚"; +"authentication_qr_login_confirm_subtitle" = "çĄźèź€äž‹éąçš„ä»Łç äžŽæ‚šçš„ć…¶ä»–èźŸć€‡ćŒč配"; +"authentication_qr_login_confirm_title" = "ćź‰ć…šèżžæŽ„ć·Čć»ș立"; +"authentication_qr_login_scan_subtitle" = "氆QRç æ”Ÿçœźćœšäž‹éąçš„æ–čæĄ†äž­"; +"authentication_qr_login_scan_title" = "扫描QR码"; +"authentication_qr_login_display_step2" = "选择“仄QRç ç™»ć…„â€"; "authentication_qr_login_display_step1" = "ćœšæ‚šçš„ć…¶ćźƒèźŸć€‡äž­æ‰“ćŒ€Element"; "onboarding_splash_page_4_title_no_pun" = "äžșæ‚šçš„ć›ąé˜Ÿć‘é€æ¶ˆæŻă€‚"; "user_session_learn_more" = "äș†è§Łæ›Žć€š"; "manage_session_name_info_link" = "äș†è§Łæ›Žć€š"; "threads_beta_information_link" = "äș†è§Łæ›Žć€š"; +"authentication_qr_login_display_subtitle" = "甚䜠登ć‡șçš„èźŸć€‡æ‰«æäž‹éąçš„QR码。"; +"room_invite_to_space_option_detail" = "ä»–ä»ŹćŻä»„æŽąçŽą %@䜆䞍䌚成äžș %@ çš„æˆć‘˜ă€‚"; +"analytics_prompt_message_new_user" = "é€šèż‡ćˆ†äș«ćŒżćçš„äœżç”šæ•°æźïŒŒćžźćŠ©æˆ‘ä»ŹèŻ†ćˆ«é—źéą˜ćč¶æ”čèż› %@ 。äžșäș†äș†è§Łäșșä»ŹćŠ‚äœ•äœżç”šć€šäžȘèźŸć€‡ïŒŒæˆ‘ä»Źć°†ç”Ÿæˆäž€äžȘ随æœșçš„æ ‡èŻ†çŹŠïŒŒç”±äœ çš„èźŸć€‡ć…±äș«ă€‚"; +"threads_notice_done" = "矄道äș†"; +"message_from_a_thread" = "杄è‡Șæ¶ˆæŻćˆ—"; +"threads_empty_info_all" = "æ¶ˆæŻćˆ—ćžźćŠ©äœ çš„ćŻčèŻäžçŠ»éą˜äž”æ˜“äșŽè·ŸèžȘ。"; +"accessibility_selected" = "ć·Č选侭"; +"deselect_all" = "ć–æ¶ˆć…šé€‰"; +"notice_voice_broadcast_ended" = "%@结束äș†äž€äžȘèŻ­éŸłćčżæ’­ă€‚"; +"notice_voice_broadcast_ended_by_you" = "䜠结束äș†äž€äžȘèŻ­éŸłćčżæ’­ă€‚"; diff --git a/Riot/Categories/MXBugReportRestClient+Riot.swift b/Riot/Categories/MXBugReportRestClient+Riot.swift index 93eff76aaa..2c46498699 100644 --- a/Riot/Categories/MXBugReportRestClient+Riot.swift +++ b/Riot/Categories/MXBugReportRestClient+Riot.swift @@ -46,10 +46,10 @@ extension MXBugReportRestClient { // User info (TODO: handle multi-account and find a way to expose them in rageshake API) var userInfo = [String: String]() let mainAccount = MXKAccountManager.shared().accounts.first - if let userId = mainAccount?.mxSession.myUser.userId { + if let userId = mainAccount?.mxSession?.myUser?.userId { userInfo["user_id"] = userId } - if let deviceId = mainAccount?.mxSession.matrixRestClient.credentials.deviceId { + if let deviceId = mainAccount?.mxSession?.myDeviceId { userInfo["device_id"] = deviceId } diff --git a/Riot/Categories/MXRoom+Riot.m b/Riot/Categories/MXRoom+Riot.m index df47c16740..04538ba804 100644 --- a/Riot/Categories/MXRoom+Riot.m +++ b/Riot/Categories/MXRoom+Riot.m @@ -637,7 +637,7 @@ - (void)enablePushRule:(MXPushRule *)rule completion:(void (^)(void))completion }]; } - [notificationCenter enableRule:rule isEnabled:YES]; + [notificationCenter enableRule:rule isEnabled:YES completion:nil]; } - (void)setNotificationCenterDidFailObserver:(id)anObserver diff --git a/Riot/Categories/MatrixSDKCrypto+LocalizedError.swift b/Riot/Categories/MatrixSDKCrypto+LocalizedError.swift new file mode 100644 index 0000000000..4b314a0c18 --- /dev/null +++ b/Riot/Categories/MatrixSDKCrypto+LocalizedError.swift @@ -0,0 +1,26 @@ +// +// Copyright 2023 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import MatrixSDKCrypto + +extension CryptoStoreError: LocalizedError { + public var errorDescription: String? { + // We dont really care about the type of error here when showing to the user. + // Details about the error are tracked independently + return VectorL10n.e2eNeedLogInAgain + } +} diff --git a/Riot/Categories/Publisher+Riot.swift b/Riot/Categories/Publisher+Riot.swift index 98bb522b37..7c70404c6e 100644 --- a/Riot/Categories/Publisher+Riot.swift +++ b/Riot/Categories/Publisher+Riot.swift @@ -33,4 +33,10 @@ extension Publisher { Just($0).delay(for: .seconds(spacingDelay), scheduler: scheduler) } } + + func eraseOutput() -> AnyPublisher { + self + .map { _ in () } + .eraseToAnyPublisher() + } } diff --git a/Riot/Generated/Vector_Strings.swift b/Riot/Generated/Vector_Strings.swift index dfc25344aa..32a0e5b087 100644 --- a/Riot/Generated/Vector_Strings.swift +++ b/Riot/Generated/Vector_Strings.swift @@ -211,38 +211,6 @@ public class VectorL10n: NSObject { public static var allChatsNothingFoundPlaceholderTitle: String { return VectorL10n.tr("Vector", "all_chats_nothing_found_placeholder_title") } - /// To simplify your Element, tabs are now optional. Manage them using the top-right menu. - public static var allChatsOnboardingPageMessage1: String { - return VectorL10n.tr("Vector", "all_chats_onboarding_page_message1") - } - /// Access your Spaces (bottom-left) faster and easier than ever before. - public static var allChatsOnboardingPageMessage2: String { - return VectorL10n.tr("Vector", "all_chats_onboarding_page_message2") - } - /// Tap your profile to let us know what you think. - public static var allChatsOnboardingPageMessage3: String { - return VectorL10n.tr("Vector", "all_chats_onboarding_page_message3") - } - /// Welcome to a new view! - public static var allChatsOnboardingPageTitle1: String { - return VectorL10n.tr("Vector", "all_chats_onboarding_page_title1") - } - /// Access Spaces - public static var allChatsOnboardingPageTitle2: String { - return VectorL10n.tr("Vector", "all_chats_onboarding_page_title2") - } - /// Give Feedback - public static var allChatsOnboardingPageTitle3: String { - return VectorL10n.tr("Vector", "all_chats_onboarding_page_title3") - } - /// What's new - public static var allChatsOnboardingTitle: String { - return VectorL10n.tr("Vector", "all_chats_onboarding_title") - } - /// Try it out - public static var allChatsOnboardingTryIt: String { - return VectorL10n.tr("Vector", "all_chats_onboarding_try_it") - } /// Chats public static var allChatsSectionTitle: String { return VectorL10n.tr("Vector", "all_chats_section_title") @@ -2547,6 +2515,10 @@ public class VectorL10n: NSObject { public static var homeContextMenuMarkAsRead: String { return VectorL10n.tr("Vector", "home_context_menu_mark_as_read") } + /// Mark as unread + public static var homeContextMenuMarkAsUnread: String { + return VectorL10n.tr("Vector", "home_context_menu_mark_as_unread") + } /// Mute public static var homeContextMenuMute: String { return VectorL10n.tr("Vector", "home_context_menu_mute") @@ -2755,6 +2727,10 @@ public class VectorL10n: NSObject { public static var keyBackupRecoverFromPrivateKeyInfo: String { return VectorL10n.tr("Vector", "key_backup_recover_from_private_key_info") } + /// %@%% Complete + public static func keyBackupRecoverFromPrivateKeyProgress(_ p1: String) -> String { + return VectorL10n.tr("Vector", "key_backup_recover_from_private_key_progress", p1) + } /// Use your Security Key to unlock your secure message history public static var keyBackupRecoverFromRecoveryKeyInfo: String { return VectorL10n.tr("Vector", "key_backup_recover_from_recovery_key_info") @@ -4851,10 +4827,34 @@ public class VectorL10n: NSObject { public static var pollHistoryActiveSegmentTitle: String { return VectorL10n.tr("Vector", "poll_history_active_segment_title") } + /// View poll in timeline + public static var pollHistoryDetailViewInTimeline: String { + return VectorL10n.tr("Vector", "poll_history_detail_view_in_timeline") + } + /// Error fetching polls. + public static var pollHistoryFetchingError: String { + return VectorL10n.tr("Vector", "poll_history_fetching_error") + } + /// Load more polls + public static var pollHistoryLoadMore: String { + return VectorL10n.tr("Vector", "poll_history_load_more") + } + /// Displaying polls + public static var pollHistoryLoadingText: String { + return VectorL10n.tr("Vector", "poll_history_loading_text") + } + /// There are no active polls for the past %@ days. Load more polls to view polls for previous months + public static func pollHistoryNoActivePollPeriodText(_ p1: String) -> String { + return VectorL10n.tr("Vector", "poll_history_no_active_poll_period_text", p1) + } /// There are no active polls in this room public static var pollHistoryNoActivePollText: String { return VectorL10n.tr("Vector", "poll_history_no_active_poll_text") } + /// There are no past polls for the past %@ days. Load more polls to view polls for previous months + public static func pollHistoryNoPastPollPeriodText(_ p1: String) -> String { + return VectorL10n.tr("Vector", "poll_history_no_past_poll_period_text", p1) + } /// There are no past polls in this room public static var pollHistoryNoPastPollText: String { return VectorL10n.tr("Vector", "poll_history_no_past_poll_text") @@ -7591,7 +7591,7 @@ public class VectorL10n: NSObject { public static var settingsLabs: String { return VectorL10n.tr("Vector", "settings_labs") } - /// This action cannot be undone + /// Please be advised that as this feature is still in its experimental stage, it may not function as expected and could potentially have unintended consequences. To revert the feature, simply log out and log back in. Use at your own discretion and with caution. public static var settingsLabsConfirmCryptoSdk: String { return VectorL10n.tr("Vector", "settings_labs_confirm_crypto_sdk") } @@ -7599,7 +7599,7 @@ public class VectorL10n: NSObject { public static var settingsLabsCreateConferenceWithJitsi: String { return VectorL10n.tr("Vector", "settings_labs_create_conference_with_jitsi") } - /// Crypto SDK is enabled. To disable please reinstall the app + /// Rust end-to-end encryption (log out to disable) public static var settingsLabsDisableCryptoSdk: String { return VectorL10n.tr("Vector", "settings_labs_disable_crypto_sdk") } @@ -7615,7 +7615,7 @@ public class VectorL10n: NSObject { public static var settingsLabsEnableAutoReportDecryptionErrors: String { return VectorL10n.tr("Vector", "settings_labs_enable_auto_report_decryption_errors") } - /// Enable new rust-based Crypto SDK + /// Rust end-to-end encryption public static var settingsLabsEnableCryptoSdk: String { return VectorL10n.tr("Vector", "settings_labs_enable_crypto_sdk") } @@ -7779,6 +7779,10 @@ public class VectorL10n: NSObject { public static var settingsProfilePicture: String { return VectorL10n.tr("Vector", "settings_profile_picture") } + /// An error occurred when updating your notification preferences. Please try to toggle your option again. + public static var settingsPushRulesError: String { + return VectorL10n.tr("Vector", "settings_push_rules_error") + } /// Are you sure you want to remove the email address %@? public static func settingsRemoveEmailPromptMsg(_ p1: String) -> String { return VectorL10n.tr("Vector", "settings_remove_email_prompt_msg", p1) @@ -9259,6 +9263,10 @@ public class VectorL10n: NSObject { public static var voiceBroadcastPlaybackLockScreenPlaceholder: String { return VectorL10n.tr("Vector", "voice_broadcast_playback_lock_screen_placeholder") } + /// Unable to decrypt this voice broadcast. + public static var voiceBroadcastPlaybackUnableToDecrypt: String { + return VectorL10n.tr("Vector", "voice_broadcast_playback_unable_to_decrypt") + } /// Connection error - Recording paused public static var voiceBroadcastRecorderConnectionError: String { return VectorL10n.tr("Vector", "voice_broadcast_recorder_connection_error") @@ -9423,6 +9431,10 @@ public class VectorL10n: NSObject { public static var wysiwygComposerFormatActionCodeBlock: String { return VectorL10n.tr("Vector", "wysiwyg_composer_format_action_code_block") } + /// Increase indentation + public static var wysiwygComposerFormatActionIndent: String { + return VectorL10n.tr("Vector", "wysiwyg_composer_format_action_indent") + } /// Apply inline code format public static var wysiwygComposerFormatActionInlineCode: String { return VectorL10n.tr("Vector", "wysiwyg_composer_format_action_inline_code") @@ -9447,6 +9459,10 @@ public class VectorL10n: NSObject { public static var wysiwygComposerFormatActionStrikethrough: String { return VectorL10n.tr("Vector", "wysiwyg_composer_format_action_strikethrough") } + /// Decrease indentation + public static var wysiwygComposerFormatActionUnIndent: String { + return VectorL10n.tr("Vector", "wysiwyg_composer_format_action_un_indent") + } /// Apply strikethrough format public static var wysiwygComposerFormatActionUnderline: String { return VectorL10n.tr("Vector", "wysiwyg_composer_format_action_underline") diff --git a/Riot/Managers/EncryptionKeyManager/EncryptionKeyManager.swift b/Riot/Managers/EncryptionKeyManager/EncryptionKeyManager.swift index 5085e9efb1..484a638321 100644 --- a/Riot/Managers/EncryptionKeyManager/EncryptionKeyManager.swift +++ b/Riot/Managers/EncryptionKeyManager/EncryptionKeyManager.swift @@ -31,6 +31,7 @@ class EncryptionKeyManager: NSObject, MXKeyProviderDelegate { private static let cryptoOlmPickleKey: KeyValueStoreKey = "cryptoOlmPickleKey" private static let roomLastMessageIv: KeyValueStoreKey = "roomLastMessageIv" private static let roomLastMessageAesKey: KeyValueStoreKey = "roomLastMessageAesKey" + private static let cryptoSDKStoreKey: KeyValueStoreKey = "cryptoSDKStoreKey" private let keychainStore: KeyValueStore = KeychainStore(withKeychain: Keychain(service: keychainService, accessGroup: BuildSettings.keychainAccessGroup)) @@ -47,6 +48,7 @@ class EncryptionKeyManager: NSObject, MXKeyProviderDelegate { generateKeyIfNotExists(forKey: EncryptionKeyManager.cryptoOlmPickleKey, size: 32) generateIvIfNotExists(forKey: EncryptionKeyManager.roomLastMessageIv) generateAesKeyIfNotExists(forKey: EncryptionKeyManager.roomLastMessageAesKey) + generateKeyIfNotExists(forKey: EncryptionKeyManager.cryptoSDKStoreKey, size: 32) assert(keychainStore.containsObject(forKey: EncryptionKeyManager.contactsIv), "[EncryptionKeyManager] initKeys: Failed to generate IV for acount") assert(keychainStore.containsObject(forKey: EncryptionKeyManager.contactsAesKey), "[EncryptionKeyManager] initKeys: Failed to generate AES Key for acount") @@ -55,6 +57,7 @@ class EncryptionKeyManager: NSObject, MXKeyProviderDelegate { assert(keychainStore.containsObject(forKey: EncryptionKeyManager.cryptoOlmPickleKey), "[EncryptionKeyManager] initKeys: Failed to generate Key for olm pickle key") assert(keychainStore.containsObject(forKey: EncryptionKeyManager.roomLastMessageIv), "[EncryptionKeyManager] initKeys: Failed to generate IV for room last message") assert(keychainStore.containsObject(forKey: EncryptionKeyManager.roomLastMessageAesKey), "[EncryptionKeyManager] initKeys: Failed to generate AES Key for room last message encryption") + assert(keychainStore.containsObject(forKey: EncryptionKeyManager.cryptoSDKStoreKey), "[EncryptionKeyManager] initKeys: Failed to generate Key for crypto sdk store") } // MARK: - MXKeyProviderDelegate @@ -64,6 +67,7 @@ class EncryptionKeyManager: NSObject, MXKeyProviderDelegate { || dataType == MXKAccountManagerDataType || dataType == MXCryptoOlmPickleKeyDataType || dataType == MXRoomLastMessageDataType + || dataType == MXCryptoSDKStoreKeyDataType } func hasKeyForData(ofType dataType: String) -> Bool { @@ -77,7 +81,10 @@ class EncryptionKeyManager: NSObject, MXKeyProviderDelegate { case MXRoomLastMessageDataType: return keychainStore.containsObject(forKey: EncryptionKeyManager.roomLastMessageIv) && keychainStore.containsObject(forKey: EncryptionKeyManager.roomLastMessageAesKey) + case MXCryptoSDKStoreKeyDataType: + return keychainStore.containsObject(forKey: EncryptionKeyManager.cryptoSDKStoreKey) default: + MXLog.warning("[EncryptionKeyManager] hasKeyForData: No key for \(dataType)") return false } } @@ -103,7 +110,12 @@ class EncryptionKeyManager: NSObject, MXKeyProviderDelegate { let aesKey = try? keychainStore.data(forKey: EncryptionKeyManager.roomLastMessageAesKey) { return MXAesKeyData(iv: ivKey, key: aesKey) } + case MXCryptoSDKStoreKeyDataType: + if let key = try? keychainStore.data(forKey: EncryptionKeyManager.cryptoSDKStoreKey) { + return MXRawDataKey(key: key) + } default: + MXLog.failure("[EncryptionKeyManager] keyDataForData: Attempting to get data for unknown type", dataType) return nil } return nil diff --git a/Riot/Managers/PushRulesUpdater/PushRulesUpdater.swift b/Riot/Managers/PushRulesUpdater/PushRulesUpdater.swift new file mode 100644 index 0000000000..a0ffea92f0 --- /dev/null +++ b/Riot/Managers/PushRulesUpdater/PushRulesUpdater.swift @@ -0,0 +1,62 @@ +// +// Copyright 2023 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Combine + +final class PushRulesUpdater { + private var cancellables: Set = .init() + private var rules: [NotificationPushRuleType] = [] + private let notificationSettingsService: NotificationSettingsServiceType + + init(notificationSettingsService: NotificationSettingsServiceType) { + self.notificationSettingsService = notificationSettingsService + + notificationSettingsService + .rulesPublisher + .weakAssign(to: \.rules, on: self) + .store(in: &cancellables) + } + + func syncRulesIfNeeded() async { + await withTaskGroup(of: Void.self) { [rules, notificationSettingsService] group in + for rule in rules { + guard let ruleId = rule.pushRuleId else { + continue + } + + let relatedRules = ruleId.syncedRules(in: rules) + + for relatedRule in relatedRules { + guard rule.hasSameContentOf(relatedRule) == false else { + continue + } + + group.addTask { + try? await notificationSettingsService.updatePushRuleActions(for: relatedRule.ruleId, + enabled: rule.enabled, + actions: rule.ruleActions) + } + } + } + } + } +} + +private extension NotificationPushRuleType { + func hasSameContentOf(_ otherRule: NotificationPushRuleType) -> Bool? { + enabled == otherRule.enabled && ruleActions == otherRule.ruleActions + } +} diff --git a/Riot/Managers/Settings/RiotSettings.swift b/Riot/Managers/Settings/RiotSettings.swift index 5669235cc5..ee178bd686 100644 --- a/Riot/Managers/Settings/RiotSettings.swift +++ b/Riot/Managers/Settings/RiotSettings.swift @@ -209,11 +209,9 @@ final class RiotSettings: NSObject { @UserDefault(key: "enableVoiceBroadcast", defaultValue: false, storage: defaults) var enableVoiceBroadcast - #if DEBUG /// Flag indicating if we are using rust-based `MatrixCryptoSDK` instead of `MatrixSDK`'s internal crypto module @UserDefault(key: "enableCryptoSDK", defaultValue: false, storage: defaults) var enableCryptoSDK - #endif // MARK: Calls diff --git a/Riot/Modules/Analytics/Analytics.swift b/Riot/Modules/Analytics/Analytics.swift index b608c862e1..60e1560b9b 100644 --- a/Riot/Modules/Analytics/Analytics.swift +++ b/Riot/Modules/Analytics/Analytics.swift @@ -324,6 +324,11 @@ extension Analytics { viewRoomTrigger = .unknown capture(event: event) } + + func trackCryptoSDKEnabled() { + let event = AnalyticsEvent.CryptoSDKEnabled() + capture(event: event) + } } // MARK: - MXAnalyticsDelegate @@ -393,3 +398,14 @@ extension Analytics: MXAnalyticsDelegate { monitoringClient.trackNonFatalIssue(issue, details: details) } } + +/// iOS-specific analytics event triggered when users select the Crypto SDK labs option +/// +/// Due to this event being iOS only, and temporary during gradual rollout of Crypto SDK, +/// this event is not added into the shared analytics schema +extension AnalyticsEvent { + struct CryptoSDKEnabled: AnalyticsEventProtocol { + let eventName = "CryptoSDKEnabled" + let properties: [String: Any] = [:] + } +} diff --git a/Riot/Modules/Application/AppCoordinator.swift b/Riot/Modules/Application/AppCoordinator.swift index 19da06b648..faf6867384 100755 --- a/Riot/Modules/Application/AppCoordinator.swift +++ b/Riot/Modules/Application/AppCoordinator.swift @@ -14,6 +14,7 @@ limitations under the License. */ +import Combine import Foundation import Intents import MatrixSDK @@ -73,6 +74,8 @@ final class AppCoordinator: NSObject, AppCoordinatorType { } private var currentSpaceId: String? + private var cancellables: Set = .init() + private var pushRulesUpdater: PushRulesUpdater? // MARK: Public @@ -99,9 +102,10 @@ final class AppCoordinator: NSObject, AppCoordinatorType { // MARK: - Public methods func start() { - self.setupLogger() - self.setupTheme() - self.excludeAllItemsFromBackup() + setupLogger() + setupTheme() + excludeAllItemsFromBackup() + setupPushRulesSessionEvents() // Setup navigation router store _ = NavigationRouterStore.shared @@ -305,6 +309,47 @@ final class AppCoordinator: NSObject, AppCoordinatorType { self.splitViewCoordinator?.start(with: spaceId) } + private func setupPushRulesSessionEvents() { + let sessionReady = NotificationCenter.default.publisher(for: .mxSessionStateDidChange) + .compactMap { $0.object as? MXSession } + .filter { $0.state == .running } + .removeDuplicates { session1, session2 in + session1 == session2 + } + + sessionReady + .sink { [weak self] session in + self?.setupPushRulesUpdater(session: session) + } + .store(in: &cancellables) + + + let sessionClosed = NotificationCenter.default.publisher(for: .mxSessionStateDidChange) + .compactMap { $0.object as? MXSession } + .filter { $0.state == .closed } + + sessionClosed + .sink { [weak self] _ in + self?.pushRulesUpdater = nil + } + .store(in: &cancellables) + } + + private func setupPushRulesUpdater(session: MXSession) { + pushRulesUpdater = .init(notificationSettingsService: MXNotificationSettingsService(session: session)) + + let applicationDidBecomeActive = NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification).eraseOutput() + let needsCheckPublisher = applicationDidBecomeActive.merge(with: Just(())).eraseToAnyPublisher() + + needsCheckPublisher + .sink { _ in + Task { @MainActor [weak self] in + await self?.pushRulesUpdater?.syncRulesIfNeeded() + } + } + .store(in: &cancellables) + } + private func presentApplicationUpdate(with versionInfo: ClientVersionInfo) { guard self.appVersionUpdateCoordinator == nil else { MXLog.debug("[AppCoordinor] AppVersionUpdateCoordinator already presented") diff --git a/Riot/Modules/Application/LegacyAppDelegate.m b/Riot/Modules/Application/LegacyAppDelegate.m index 4dd739982a..9e39bfe566 100644 --- a/Riot/Modules/Application/LegacyAppDelegate.m +++ b/Riot/Modules/Application/LegacyAppDelegate.m @@ -2366,6 +2366,9 @@ - (void)logoutSendingRequestServer:(BOOL)sendLogoutServerRequest // Clear cache [self clearCache]; + // Reset Crypto SDK configuration (labs flag for which crypto module to use) + [CryptoSDKConfiguration.shared disable]; + // Reset key backup banner preferences [SecureBackupBannerPreferences.shared reset]; @@ -2399,9 +2402,6 @@ - (void)logoutSendingRequestServer:(BOOL)sendLogoutServerRequest // Logout all matrix account [[MXKAccountManager sharedManager] logoutWithCompletion:^{ - // We reset allChatsOnboardingHasBeenDisplayed flag on logout - RiotSettings.shared.allChatsOnboardingHasBeenDisplayed = NO; - if (completion) { completion (YES); diff --git a/Riot/Modules/Common/Recents/RecentsViewController.m b/Riot/Modules/Common/Recents/RecentsViewController.m index 191918af0c..8078e48fcc 100644 --- a/Riot/Modules/Common/Recents/RecentsViewController.m +++ b/Riot/Modules/Common/Recents/RecentsViewController.m @@ -2784,6 +2784,11 @@ - (UITargetedPreview *)tableView:(UITableView *)tableView previewForDismissingCo // editedRoomId = nil; //} +-(void)roomContextActionServiceDidMarkRoom:(id)service +{ + [self refreshRecentsTable]; +} + #pragma mark - RecentCellContextMenuProviderDelegate - (void)recentCellContextMenuProviderDidStartShowingPreview:(RecentCellContextMenuProvider *)menuProvider diff --git a/Riot/Modules/Common/Recents/Views/RecentTableViewCell.m b/Riot/Modules/Common/Recents/Views/RecentTableViewCell.m index a2614b3f3f..1662b23a7e 100644 --- a/Riot/Modules/Common/Recents/Views/RecentTableViewCell.m +++ b/Riot/Modules/Common/Recents/Views/RecentTableViewCell.m @@ -69,6 +69,7 @@ - (void)render:(MXKCellData *)cellData self.missedNotifAndUnreadIndicator.hidden = YES; self.missedNotifAndUnreadBadgeBgView.hidden = YES; self.missedNotifAndUnreadBadgeBgViewWidthConstraint.constant = 0; + self.missedNotifAndUnreadBadgeLabel.text = @""; roomCellData = (id)cellData; if (roomCellData) @@ -91,10 +92,15 @@ - (void)render:(MXKCellData *)cellData self.lastEventDecriptionLabelTrailingConstraint.constant = self.unsentImageView.hidden ? 10 : 30; // Notify unreads and bing - if (roomCellData.hasUnread) + if (roomCellData.isRoomMarkedAsUnread) + { + self.missedNotifAndUnreadBadgeBgView.hidden = NO; + self.missedNotifAndUnreadBadgeBgView.backgroundColor = ThemeService.shared.theme.tintColor; + self.missedNotifAndUnreadBadgeBgViewWidthConstraint.constant = 20; + } + else if (roomCellData.hasUnread) { self.missedNotifAndUnreadIndicator.hidden = NO; - if (0 < roomCellData.notificationCount) { self.missedNotifAndUnreadIndicator.backgroundColor = roomCellData.highlightCount ? ThemeService.shared.theme.noticeColor : ThemeService.shared.theme.noticeSecondaryColor; diff --git a/Riot/Modules/ContextMenu/ActionProviders/RoomActionProvider.swift b/Riot/Modules/ContextMenu/ActionProviders/RoomActionProvider.swift index 7d12f88780..c019aae9c0 100644 --- a/Riot/Modules/ContextMenu/ActionProviders/RoomActionProvider.swift +++ b/Riot/Modules/ContextMenu/ActionProviders/RoomActionProvider.swift @@ -34,7 +34,7 @@ class RoomActionProvider: RoomActionProviderProtocol { var menu: UIMenu { if service.isRoomJoined { - var children = service.hasUnread ? [self.markAsReadAction] : [] + var children = service.hasUnread ? [self.markAsReadAction] : [self.markAsUnreadAction] children.append(contentsOf: [ self.directChatAction, self.notificationsAction, @@ -113,6 +113,14 @@ class RoomActionProvider: RoomActionProviderProtocol { self.service.markAsRead() } } + private var markAsUnreadAction: UIAction { + return UIAction( + title: VectorL10n.homeContextMenuMarkAsUnread, + image: UIImage(systemName: "envelope.badge")) { [weak self] action in + guard let self = self else { return } + self.service.markAsUnread() + } + } private var leaveAction: UIAction { let image = UIImage(systemName: "rectangle.righthalf.inset.fill.arrow.right") diff --git a/Riot/Modules/ContextMenu/Services/RoomContextActionService.swift b/Riot/Modules/ContextMenu/Services/RoomContextActionService.swift index c3abab55b8..12c02c9381 100644 --- a/Riot/Modules/ContextMenu/Services/RoomContextActionService.swift +++ b/Riot/Modules/ContextMenu/Services/RoomContextActionService.swift @@ -38,7 +38,7 @@ class RoomContextActionService: NSObject, RoomContextActionServiceProtocol { self.room = room self.delegate = delegate self.isRoomJoined = room.summary?.isJoined ?? false - self.hasUnread = room.summary?.hasAnyUnread ?? false + self.hasUnread = (room.summary?.hasAnyUnread ?? false) || room.isMarkedAsUnread self.roomMembership = room.summary?.membership ?? .unknown self.session = room.mxSession self.unownedRoomService = UnownedRoomContextActionService(roomId: room.roomId, canonicalAlias: room.summary?.aliases?.first, session: self.session, delegate: delegate) @@ -108,6 +108,11 @@ class RoomContextActionService: NSObject, RoomContextActionServiceProtocol { func markAsRead() { room.markAllAsRead() + self.delegate?.roomContextActionServiceDidMarkRoom(self) + } + func markAsUnread() { + room.setUnread() + self.delegate?.roomContextActionServiceDidMarkRoom(self) } // MARK: - Private diff --git a/Riot/Modules/ContextMenu/Services/RoomContextActionServiceProtocol.swift b/Riot/Modules/ContextMenu/Services/RoomContextActionServiceProtocol.swift index d44213bd4e..25c66773f0 100644 --- a/Riot/Modules/ContextMenu/Services/RoomContextActionServiceProtocol.swift +++ b/Riot/Modules/ContextMenu/Services/RoomContextActionServiceProtocol.swift @@ -22,6 +22,7 @@ import Foundation func roomContextActionService(_ service: RoomContextActionServiceProtocol, showRoomNotificationSettingsForRoomWithId roomId: String) func roomContextActionServiceDidJoinRoom(_ service: RoomContextActionServiceProtocol) func roomContextActionServiceDidLeaveRoom(_ service: RoomContextActionServiceProtocol) + func roomContextActionServiceDidMarkRoom(_ service: RoomContextActionServiceProtocol) } /// `RoomContextActionServiceProtocol` classes are meant to be called by a `RoomActionProviderProtocol` instance so it provides the implementation of the menu actions. diff --git a/Riot/Modules/Home/AllChats/AllChatsViewController.swift b/Riot/Modules/Home/AllChats/AllChatsViewController.swift index ede8da3b05..7cf0ddfc29 100644 --- a/Riot/Modules/Home/AllChats/AllChatsViewController.swift +++ b/Riot/Modules/Home/AllChats/AllChatsViewController.swift @@ -73,8 +73,6 @@ class AllChatsViewController: HomeViewController { private var isOnboardingCoordinatorPreparing: Bool = false - private var allChatsOnboardingCoordinatorBridgePresenter: AllChatsOnboardingCoordinatorBridgePresenter? - private var theme: Theme { ThemeService.shared().theme } @@ -208,7 +206,7 @@ class AllChatsViewController: HomeViewController { searchController.isActive = false guard let spaceId = spaceId else { - self.dataSource?.currentSpace = nil + dataSource?.currentSpace = nil updateUI() return @@ -219,7 +217,7 @@ class AllChatsViewController: HomeViewController { return } - self.dataSource.currentSpace = space + dataSource?.currentSpace = space updateUI() self.recentsTableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true) @@ -303,7 +301,7 @@ class AllChatsViewController: HomeViewController { @objc private func showSpaceSelectorAction(sender: AnyObject) { Analytics.shared.viewRoomTrigger = .roomList - let currentSpaceId = self.dataSource.currentSpace?.spaceId ?? SpaceSelectorConstants.homeSpaceId + let currentSpaceId = dataSource?.currentSpace?.spaceId ?? SpaceSelectorConstants.homeSpaceId let spaceSelectorBridgePresenter = SpaceSelectorBottomSheetCoordinatorBridgePresenter(session: self.mainSession, selectedSpaceId: currentSpaceId, showHomeSpace: true) spaceSelectorBridgePresenter.present(from: self, animated: true) spaceSelectorBridgePresenter.delegate = self @@ -325,7 +323,7 @@ class AllChatsViewController: HomeViewController { return super.tableView(tableView, numberOfRowsInSection: section) } - return dataSource.tableView(tableView, numberOfRowsInSection: section) + return dataSource?.tableView(tableView, numberOfRowsInSection: section) ?? 0 } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { @@ -333,6 +331,10 @@ class AllChatsViewController: HomeViewController { return super.tableView(tableView, cellForRowAt: indexPath) } + guard let dataSource = dataSource else { + MXLog.failure("Missing data source") + return UITableViewCell() + } return dataSource.tableView(tableView, cellForRowAt: indexPath) } @@ -343,7 +345,7 @@ class AllChatsViewController: HomeViewController { return super.tableView(tableView, heightForRowAt: indexPath) } - return dataSource.cellHeight(at: indexPath) + return dataSource?.cellHeight(at: indexPath) ?? 0 } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { @@ -607,7 +609,7 @@ class AllChatsViewController: HomeViewController { } private func showSpaceInvite() { - guard let session = mainSession, let spaceRoom = dataSource.currentSpace?.room else { + guard let session = mainSession, let spaceRoom = dataSource?.currentSpace?.room else { return } @@ -619,7 +621,7 @@ class AllChatsViewController: HomeViewController { } private func showSpaceMembers() { - guard let session = mainSession, let spaceId = dataSource.currentSpace?.spaceId else { + guard let session = mainSession, let spaceId = dataSource?.currentSpace?.spaceId else { return } @@ -633,7 +635,7 @@ class AllChatsViewController: HomeViewController { } private func showSpaceSettings() { - guard let session = mainSession, let spaceId = dataSource.currentSpace?.spaceId else { + guard let session = mainSession, let spaceId = dataSource?.currentSpace?.spaceId else { return } @@ -654,7 +656,7 @@ class AllChatsViewController: HomeViewController { } private func showLeaveSpace() { - guard let session = mainSession, let spaceSummary = dataSource.currentSpace?.summary else { + guard let session = mainSession, let spaceSummary = dataSource?.currentSpace?.summary else { return } @@ -692,20 +694,6 @@ class AllChatsViewController: HomeViewController { self.navigationController?.pushViewController(invitesViewController, animated: true) } - private func showAllChatsOnboardingScreen() { - let allChatsOnboardingCoordinatorBridgePresenter = AllChatsOnboardingCoordinatorBridgePresenter() - allChatsOnboardingCoordinatorBridgePresenter.completion = { [weak self] in - RiotSettings.shared.allChatsOnboardingHasBeenDisplayed = true - - guard let self = self else { return } - self.allChatsOnboardingCoordinatorBridgePresenter?.dismiss(animated: true, completion: { - self.allChatsOnboardingCoordinatorBridgePresenter = nil - }) - } - - allChatsOnboardingCoordinatorBridgePresenter.present(from: self, animated: true) - self.allChatsOnboardingCoordinatorBridgePresenter = allChatsOnboardingCoordinatorBridgePresenter - } } private extension AllChatsViewController { @@ -752,11 +740,11 @@ extension AllChatsViewController: SpaceSelectorBottomSheetCoordinatorBridgePrese extension AllChatsViewController: UISearchResultsUpdating { func updateSearchResults(for searchController: UISearchController) { guard let searchText = searchController.searchBar.text, !searchText.isEmpty else { - self.dataSource.search(withPatterns: nil) + self.dataSource?.search(withPatterns: nil) return } - self.dataSource.search(withPatterns: [searchText]) + self.dataSource?.search(withPatterns: [searchText]) } } @@ -792,7 +780,7 @@ extension AllChatsViewController: AllChatsEditActionProviderDelegate { case .startChat: startChat() case .createSpace: - showCreateSpace(parentSpaceId: dataSource.currentSpace?.spaceId) + showCreateSpace(parentSpaceId: dataSource?.currentSpace?.spaceId) } } @@ -911,10 +899,12 @@ extension AllChatsViewController: SplitViewMasterViewControllerProtocol { return } - let devices = mainSession.crypto.devices(forUser: mainSession.myUserId).values - let userHasOneUnverifiedDevice = devices.contains(where: {!$0.trustLevel.isCrossSigningVerified}) - if userHasOneUnverifiedDevice { - presentReviewUnverifiedSessionsAlert(with: session) + if let userId = mainSession.myUserId, let crypto = mainSession.crypto { + let devices = crypto.devices(forUser: userId).values + let userHasOneUnverifiedDevice = devices.contains(where: {!$0.trustLevel.isCrossSigningVerified}) + if userHasOneUnverifiedDevice { + presentReviewUnverifiedSessionsAlert(with: session) + } } } diff --git a/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewController.storyboard b/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewController.storyboard index 1c8ba341c8..42e99205e5 100644 --- a/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewController.storyboard +++ b/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewController.storyboard @@ -1,25 +1,23 @@ - - - - + + - + - + - + - + @@ -40,15 +38,24 @@ + + + + @@ -72,6 +79,7 @@ + @@ -79,10 +87,10 @@ - + diff --git a/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewController.swift b/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewController.swift index bdd616d12a..cc44e01e4b 100644 --- a/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewController.swift +++ b/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewController.swift @@ -29,6 +29,7 @@ final class KeyBackupRecoverFromPrivateKeyViewController: UIViewController { @IBOutlet private weak var shieldImageView: UIImageView! @IBOutlet private weak var informationLabel: UILabel! + @IBOutlet private weak var progressLabel: UILabel! // MARK: Private @@ -118,8 +119,8 @@ final class KeyBackupRecoverFromPrivateKeyViewController: UIViewController { private func render(viewState: KeyBackupRecoverFromPrivateKeyViewState) { switch viewState { - case .loading: - self.renderLoading() + case .loading(let progress): + self.renderLoading(progress: progress) case .loaded: self.renderLoaded() case .error(let error): @@ -127,8 +128,11 @@ final class KeyBackupRecoverFromPrivateKeyViewController: UIViewController { } } - private func renderLoading() { + private func renderLoading(progress: Double) { self.activityPresenter.presentActivityIndicator(on: self.view, animated: true) + + let percent = Int(round(progress * 100)) + self.progressLabel.text = VectorL10n.keyBackupRecoverFromPrivateKeyProgress("\(percent)") } private func renderLoaded() { diff --git a/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewModel.swift b/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewModel.swift index cef1d7c0cc..04fb48850f 100644 --- a/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewModel.swift +++ b/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewModel.swift @@ -27,6 +27,7 @@ final class KeyBackupRecoverFromPrivateKeyViewModel: KeyBackupRecoverFromPrivate private let keyBackup: MXKeyBackup private var currentHTTPOperation: MXHTTPOperation? private let keyBackupVersion: MXKeyBackupVersion + private var progressUpdateTimer: Timer? // MARK: Public @@ -56,7 +57,14 @@ final class KeyBackupRecoverFromPrivateKeyViewModel: KeyBackupRecoverFromPrivate private func recoverWithPrivateKey() { - self.update(viewState: .loading) + self.update(viewState: .loading(0)) + + // Update loading progress every second until no longer loading + progressUpdateTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] _ in + if let progress = self?.keyBackup.importProgress { + self?.update(viewState: .loading(progress.fractionCompleted)) + } + } self.currentHTTPOperation = keyBackup.restore(usingPrivateKeyKeyBackup: keyBackupVersion, room: nil, session: nil, success: { [weak self] (_, _) in guard let self = self else { @@ -91,6 +99,11 @@ final class KeyBackupRecoverFromPrivateKeyViewModel: KeyBackupRecoverFromPrivate } private func update(viewState: KeyBackupRecoverFromPrivateKeyViewState) { + if case .loading = viewState {} else { + progressUpdateTimer?.invalidate() + progressUpdateTimer = nil + } + self.viewDelegate?.keyBackupRecoverFromPrivateKeyViewModel(self, didUpdateViewState: viewState) } } diff --git a/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewState.swift b/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewState.swift index bdd4178534..b4ef05fb94 100644 --- a/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewState.swift +++ b/Riot/Modules/KeyBackup/Recover/PrivateKey/KeyBackupRecoverFromPrivateKeyViewState.swift @@ -20,7 +20,7 @@ import Foundation /// KeyBackupRecoverFromPrivateKeyViewController view state enum KeyBackupRecoverFromPrivateKeyViewState { - case loading + case loading(Double) case loaded case error(Error) } diff --git a/Riot/Modules/KeyVerification/Device/SelfVerifyWait/KeyVerificationSelfVerifyWaitCoordinator.swift b/Riot/Modules/KeyVerification/Device/SelfVerifyWait/KeyVerificationSelfVerifyWaitCoordinator.swift index 88c2537db9..68dcab40e7 100644 --- a/Riot/Modules/KeyVerification/Device/SelfVerifyWait/KeyVerificationSelfVerifyWaitCoordinator.swift +++ b/Riot/Modules/KeyVerification/Device/SelfVerifyWait/KeyVerificationSelfVerifyWaitCoordinator.swift @@ -25,7 +25,6 @@ final class KeyVerificationSelfVerifyWaitCoordinator: KeyVerificationSelfVerifyW // MARK: Private - private let session: MXSession private var keyVerificationSelfVerifyWaitViewModel: KeyVerificationSelfVerifyWaitViewModelType private let keyVerificationSelfVerifyWaitViewController: KeyVerificationSelfVerifyWaitViewController private let cancellable: Bool @@ -40,9 +39,7 @@ final class KeyVerificationSelfVerifyWaitCoordinator: KeyVerificationSelfVerifyW // MARK: - Setup init(session: MXSession, isNewSignIn: Bool, cancellable: Bool) { - self.session = session - - let keyVerificationSelfVerifyWaitViewModel = KeyVerificationSelfVerifyWaitViewModel(session: self.session, isNewSignIn: isNewSignIn) + let keyVerificationSelfVerifyWaitViewModel = KeyVerificationSelfVerifyWaitViewModel(session: session, isNewSignIn: isNewSignIn) let keyVerificationSelfVerifyWaitViewController = KeyVerificationSelfVerifyWaitViewController.instantiate(with: keyVerificationSelfVerifyWaitViewModel, cancellable: cancellable) self.keyVerificationSelfVerifyWaitViewModel = keyVerificationSelfVerifyWaitViewModel self.keyVerificationSelfVerifyWaitViewController = keyVerificationSelfVerifyWaitViewController diff --git a/Riot/Modules/KeyVerification/Device/SelfVerifyWait/KeyVerificationSelfVerifyWaitViewModel.swift b/Riot/Modules/KeyVerification/Device/SelfVerifyWait/KeyVerificationSelfVerifyWaitViewModel.swift index b064d4f84b..5d4830bede 100644 --- a/Riot/Modules/KeyVerification/Device/SelfVerifyWait/KeyVerificationSelfVerifyWaitViewModel.swift +++ b/Riot/Modules/KeyVerification/Device/SelfVerifyWait/KeyVerificationSelfVerifyWaitViewModel.swift @@ -26,11 +26,19 @@ final class KeyVerificationSelfVerifyWaitViewModel: KeyVerificationSelfVerifyWai private let session: MXSession private let keyVerificationService: KeyVerificationService - private let verificationManager: MXKeyVerificationManager + private let verificationManager: MXKeyVerificationManager? private let isNewSignIn: Bool - private var secretsRecoveryAvailability: SecretsRecoveryAvailability + private var secretsRecoveryAvailability: SecretsRecoveryAvailability? private var keyVerificationRequest: MXKeyVerificationRequest? + private var myUserId: String { + guard let userId = session.myUserId else { + MXLog.error("[KeyVerificationSelfVerifyWaitViewModel] userId is missing") + return "" + } + return userId + } + // MARK: Public weak var viewDelegate: KeyVerificationSelfVerifyWaitViewModelViewDelegate? @@ -40,10 +48,10 @@ final class KeyVerificationSelfVerifyWaitViewModel: KeyVerificationSelfVerifyWai init(session: MXSession, isNewSignIn: Bool) { self.session = session - self.verificationManager = session.crypto.keyVerificationManager + self.verificationManager = session.crypto?.keyVerificationManager self.keyVerificationService = KeyVerificationService() self.isNewSignIn = isNewSignIn - self.secretsRecoveryAvailability = session.crypto.recoveryService.vc_availability + self.secretsRecoveryAvailability = session.crypto?.recoveryService.vc_availability } deinit { @@ -59,9 +67,16 @@ final class KeyVerificationSelfVerifyWaitViewModel: KeyVerificationSelfVerifyWai case .cancel: self.cancel() case .recoverSecrets: - switch self.secretsRecoveryAvailability { + guard let availability = secretsRecoveryAvailability else { + MXLog.error("[KeyVerificationSelfVerifyWaitViewModel] process: secretsRecoveryAvailability not set") + self.cancel() + return + } + + switch availability { case .notAvailable: - fatalError("Should not happen: When recovery is not available button is hidden") + MXLog.error("Should not happen: When recovery is not available button is hidden") + self.cancel() case .available(let secretsRecoveryMode): self.coordinatorDelegate?.keyVerificationSelfVerifyWaitViewModel(self, wantsToRecoverSecretsWith: secretsRecoveryMode) } @@ -71,12 +86,16 @@ final class KeyVerificationSelfVerifyWaitViewModel: KeyVerificationSelfVerifyWai // MARK: - Private private func loadData() { + guard let verificationManager = verificationManager else { + MXLog.failure("Verification manager is not set") + return + } if !self.isNewSignIn { MXLog.debug("[KeyVerificationSelfVerifyWaitViewModel] loadData: Send a verification request to all devices") let keyVerificationService = KeyVerificationService() - self.verificationManager.requestVerificationByToDevice(withUserId: self.session.myUserId, deviceIds: nil, methods: keyVerificationService.supportedKeyVerificationMethods(), success: { [weak self] (keyVerificationRequest) in + verificationManager.requestVerificationByToDevice(withUserId: self.myUserId, deviceIds: nil, methods: keyVerificationService.supportedKeyVerificationMethods(), success: { [weak self] (keyVerificationRequest) in guard let self = self else { return } @@ -103,7 +122,7 @@ final class KeyVerificationSelfVerifyWaitViewModel: KeyVerificationSelfVerifyWai MXLog.debug("[KeyVerificationSelfVerifyWaitViewModel] loadData: Send a verification request to all devices instead of waiting") let keyVerificationService = KeyVerificationService() - self.verificationManager.requestVerificationByToDevice(withUserId: self.session.myUserId, deviceIds: nil, methods: keyVerificationService.supportedKeyVerificationMethods(), success: { [weak self] (keyVerificationRequest) in + verificationManager.requestVerificationByToDevice(withUserId: self.myUserId, deviceIds: nil, methods: keyVerificationService.supportedKeyVerificationMethods(), success: { [weak self] (keyVerificationRequest) in guard let self = self else { return } @@ -132,12 +151,18 @@ final class KeyVerificationSelfVerifyWaitViewModel: KeyVerificationSelfVerifyWai } private func continueLoadData() { + guard let verificationManager = verificationManager, let recoveryService = session.crypto?.recoveryService else { + MXLog.error("[KeyVerificationSelfVerifyWaitViewModel] continueLoadData: Missing dependencies") + return + } + // update availability again - self.secretsRecoveryAvailability = session.crypto.recoveryService.vc_availability + let availability = recoveryService.vc_availability + self.secretsRecoveryAvailability = availability - let viewData = KeyVerificationSelfVerifyWaitViewData(isNewSignIn: self.isNewSignIn, secretsRecoveryAvailability: self.secretsRecoveryAvailability) + let viewData = KeyVerificationSelfVerifyWaitViewData(isNewSignIn: self.isNewSignIn, secretsRecoveryAvailability: availability) - self.registerKeyVerificationManagerNewRequestNotification(for: self.verificationManager) + self.registerKeyVerificationManagerNewRequestNotification(for: verificationManager) self.update(viewState: .loaded(viewData)) self.registerTransactionDidStateChangeNotification() self.registerKeyVerificationRequestChangeNotification() @@ -251,7 +276,7 @@ final class KeyVerificationSelfVerifyWaitViewModel: KeyVerificationSelfVerifyWai @objc private func transactionDidStateChange(notification: Notification) { guard let sasTransaction = notification.object as? MXSASTransaction, - sasTransaction.isIncoming, sasTransaction.otherUserId == self.session.myUserId else { + sasTransaction.isIncoming, sasTransaction.otherUserId == self.myUserId else { return } self.sasTransactionDidStateChange(sasTransaction) diff --git a/Riot/Modules/MatrixKit/Controllers/MXKNotificationSettingsViewController.m b/Riot/Modules/MatrixKit/Controllers/MXKNotificationSettingsViewController.m index 1524eb2d75..7007c12bfa 100644 --- a/Riot/Modules/MatrixKit/Controllers/MXKNotificationSettingsViewController.m +++ b/Riot/Modules/MatrixKit/Controllers/MXKNotificationSettingsViewController.m @@ -193,7 +193,7 @@ - (IBAction)onButtonPressed:(id)sender MXPushRule *pushRule = [_mxAccount.mxSession.notificationCenter ruleById:kMXNotificationCenterDisableAllNotificationsRuleID]; if (pushRule) { - [_mxAccount.mxSession.notificationCenter enableRule:pushRule isEnabled:!areAllDisabled]; + [_mxAccount.mxSession.notificationCenter enableRule:pushRule isEnabled:!areAllDisabled completion:nil]; } } } diff --git a/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.m b/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.m index 5f33af838e..0998122aef 100644 --- a/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.m +++ b/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.m @@ -2150,7 +2150,10 @@ - (void)resendEventWithEventId:(NSString *)eventId success:(void (^)(NSString *) } else { - failure([NSError errorWithDomain:MXKRoomDataSourceErrorDomain code:MXKRoomDataSourceErrorResendGeneric userInfo:nil]); + if (failure) + { + failure([NSError errorWithDomain:MXKRoomDataSourceErrorDomain code:MXKRoomDataSourceErrorResendGeneric userInfo:nil]); + } MXLogWarning(@"[MXKRoomDataSource][%p] resendEventWithEventId: Warning - Unable to resend room message of type: %@", self, msgType); } } @@ -2177,7 +2180,10 @@ - (void)resendEventWithEventId:(NSString *)eventId success:(void (^)(NSString *) NSURL *localFileURL = [NSURL URLWithString:localFilePath]; if (![NSFileManager.defaultManager fileExistsAtPath:localFilePath]) { - failure([NSError errorWithDomain:MXKRoomDataSourceErrorDomain code:MXKRoomDataSourceErrorResendInvalidLocalFilePath userInfo:nil]); + if (failure) + { + failure([NSError errorWithDomain:MXKRoomDataSourceErrorDomain code:MXKRoomDataSourceErrorResendInvalidLocalFilePath userInfo:nil]); + } MXLogWarning(@"[MXKRoomDataSource][%p] resendEventWithEventId: Warning - Unable to resend voice message, invalid file path.", self); return; } @@ -2247,7 +2253,10 @@ - (void)resendEventWithEventId:(NSString *)eventId success:(void (^)(NSString *) } else { - failure([NSError errorWithDomain:MXKRoomDataSourceErrorDomain code:MXKRoomDataSourceErrorResendGeneric userInfo:nil]); + if (failure) + { + failure([NSError errorWithDomain:MXKRoomDataSourceErrorDomain code:MXKRoomDataSourceErrorResendGeneric userInfo:nil]); + } MXLogWarning(@"[MXKRoomDataSource][%p] resendEventWithEventId: Warning - Unable to resend room message of type: %@", self, msgType); } } @@ -2259,13 +2268,19 @@ - (void)resendEventWithEventId:(NSString *)eventId success:(void (^)(NSString *) } else { - failure([NSError errorWithDomain:MXKRoomDataSourceErrorDomain code:MXKRoomDataSourceErrorResendInvalidMessageType userInfo:nil]); + if (failure) + { + failure([NSError errorWithDomain:MXKRoomDataSourceErrorDomain code:MXKRoomDataSourceErrorResendInvalidMessageType userInfo:nil]); + } MXLogWarning(@"[MXKRoomDataSource][%p] resendEventWithEventId: Warning - Unable to resend room message of type: %@", self, msgType); } } else { - failure([NSError errorWithDomain:MXKRoomDataSourceErrorDomain code:MXKRoomDataSourceErrorResendInvalidMessageType userInfo:nil]); + if (failure) + { + failure([NSError errorWithDomain:MXKRoomDataSourceErrorDomain code:MXKRoomDataSourceErrorResendInvalidMessageType userInfo:nil]); + } MXLogWarning(@"[MXKRoomDataSource][%p] MXKRoomDataSource: Warning - Only resend of MXEventTypeRoomMessage is allowed. Event.type: %@", self, event.type); } } diff --git a/Riot/Modules/MatrixKit/Models/RoomList/MXKRecentCellData.m b/Riot/Modules/MatrixKit/Models/RoomList/MXKRecentCellData.m index 958e316fa0..474494d59c 100644 --- a/Riot/Modules/MatrixKit/Models/RoomList/MXKRecentCellData.m +++ b/Riot/Modules/MatrixKit/Models/RoomList/MXKRecentCellData.m @@ -66,6 +66,11 @@ - (BOOL)hasUnread return (roomSummary.localUnreadEventCount != 0); } +- (BOOL)isRoomMarkedAsUnread +{ + return [[self mxSession] isRoomMarkedAsUnread:roomSummary.roomId];; +} + - (NSString *)roomIdentifier { if (self.isSuggestedRoom) diff --git a/Riot/Modules/MatrixKit/Models/RoomList/MXKRecentCellDataStoring.h b/Riot/Modules/MatrixKit/Models/RoomList/MXKRecentCellDataStoring.h index 7185ae4eb5..3c417c1faa 100644 --- a/Riot/Modules/MatrixKit/Models/RoomList/MXKRecentCellDataStoring.h +++ b/Riot/Modules/MatrixKit/Models/RoomList/MXKRecentCellDataStoring.h @@ -50,6 +50,7 @@ @property (nonatomic, readonly) NSString *lastEventDate; @property (nonatomic, readonly) BOOL hasUnread; +@property (nonatomic, readonly) BOOL isRoomMarkedAsUnread; @property (nonatomic, readonly) NSUInteger notificationCount; @property (nonatomic, readonly) NSUInteger highlightCount; @property (nonatomic, readonly) NSString *notificationCountStringValue; diff --git a/Riot/Modules/MatrixKit/Utils/EventFormatter/HTMLFormatter.swift b/Riot/Modules/MatrixKit/Utils/EventFormatter/HTMLFormatter.swift index 6c7e43a90a..819eb632fd 100644 --- a/Riot/Modules/MatrixKit/Utils/EventFormatter/HTMLFormatter.swift +++ b/Riot/Modules/MatrixKit/Utils/EventFormatter/HTMLFormatter.swift @@ -47,9 +47,7 @@ class HTMLFormatter: NSObject { var options: [AnyHashable: Any] = [ DTUseiOS6Attributes: true, - DTDefaultFontFamily: font.familyName, - DTDefaultFontName: font.fontName, - DTDefaultFontSize: font.pointSize, + DTDefaultFontDescriptor: font.fontDescriptor, DTDefaultLinkDecoration: false, DTDefaultLinkColor: ThemeService.shared().theme.colors.links, DTWillFlushBlockCallBack: sanitizeCallback diff --git a/Riot/Modules/MatrixKit/Utils/EventFormatter/MXKEventFormatter.m b/Riot/Modules/MatrixKit/Utils/EventFormatter/MXKEventFormatter.m index 422e089902..da231c119b 100644 --- a/Riot/Modules/MatrixKit/Utils/EventFormatter/MXKEventFormatter.m +++ b/Riot/Modules/MatrixKit/Utils/EventFormatter/MXKEventFormatter.m @@ -1053,8 +1053,22 @@ - (NSAttributedString *)attributedStringFromEvent:(MXEvent*)event else if ([event.decryptionError.domain isEqualToString:MXDecryptingErrorDomain] && event.decryptionError.code == MXDecryptingErrorUnknownInboundSessionIdCode) { - // Make the unknown inbound session id error description more user friendly - errorDescription = [VectorL10n noticeCryptoErrorUnknownInboundSessionId]; + // Hide the decryption error for VoiceBroadcast chunks + BOOL isVoiceBroadcastChunk = NO; + if ([event.relatesTo.relationType isEqualToString:MXEventRelationTypeReference]) { + MXEvent *startEvent = [mxSession.store eventWithEventId:event.relatesTo.eventId + inRoom:event.roomId]; + + if (startEvent) { + isVoiceBroadcastChunk = (startEvent.eventType == MXEventTypeCustom && [startEvent.type isEqualToString:VoiceBroadcastSettings.voiceBroadcastInfoContentKeyType]); + } + } + if (isVoiceBroadcastChunk) { + displayText = nil; + } else { + // Make the unknown inbound session id error description more user friendly + errorDescription = [VectorL10n noticeCryptoErrorUnknownInboundSessionId]; + } } else if ([event.decryptionError.domain isEqualToString:MXDecryptingErrorDomain] && event.decryptionError.code == MXDecryptingErrorDuplicateMessageIndexCode) diff --git a/Riot/Modules/MatrixKit/Views/PushRule/MXKPushRuleTableViewCell.m b/Riot/Modules/MatrixKit/Views/PushRule/MXKPushRuleTableViewCell.m index a65174564e..79632d87ce 100644 --- a/Riot/Modules/MatrixKit/Views/PushRule/MXKPushRuleTableViewCell.m +++ b/Riot/Modules/MatrixKit/Views/PushRule/MXKPushRuleTableViewCell.m @@ -163,7 +163,7 @@ - (IBAction)onButtonPressed:(id)sender if (sender == _controlButton) { // Swap enable state - [_mxSession.notificationCenter enableRule:_mxPushRule isEnabled:!_mxPushRule.enabled]; + [_mxSession.notificationCenter enableRule:_mxPushRule isEnabled:!_mxPushRule.enabled completion:nil]; } else if (sender == _deleteButton) { diff --git a/Riot/Modules/Room/MXKRoomViewController.m b/Riot/Modules/Room/MXKRoomViewController.m index 9d8755a2ba..752dc71c85 100644 --- a/Riot/Modules/Room/MXKRoomViewController.m +++ b/Riot/Modules/Room/MXKRoomViewController.m @@ -370,6 +370,11 @@ - (void)viewDidAppear:(BOOL)animated [self.roomDataSource.room.summary markAllAsReadLocally]; [self updateCurrentEventIdAtTableBottom:YES]; + + if (!self.isContextPreview) + { + [self.roomDataSource.room resetUnread]; + } } - (void)viewWillDisappear:(BOOL)animated diff --git a/Riot/Modules/Room/RoomInfo/RoomInfoCoordinator.swift b/Riot/Modules/Room/RoomInfo/RoomInfoCoordinator.swift index 04972e6ae1..ac694dc49f 100644 --- a/Riot/Modules/Room/RoomInfo/RoomInfoCoordinator.swift +++ b/Riot/Modules/Room/RoomInfo/RoomInfoCoordinator.swift @@ -176,8 +176,12 @@ final class RoomInfoCoordinator: NSObject, RoomInfoCoordinatorType { coordinator.start() push(coordinator: coordinator) case .pollHistory: - let coordinator: PollHistoryCoordinator = .init(parameters: .init(mode: .active)) + let coordinator: PollHistoryCoordinator = .init(parameters: .init(mode: .active, room: room, navigationRouter: navigationRouter)) coordinator.start() + coordinator.completion = { [weak self] event in + guard let self else { return } + self.delegate?.roomInfoCoordinator(self, viewEventInTimeline: event) + } push(coordinator: coordinator) default: guard let tabIndex = target.tabIndex else { diff --git a/Riot/Modules/Room/RoomInfo/RoomInfoCoordinatorBridgePresenter.swift b/Riot/Modules/Room/RoomInfo/RoomInfoCoordinatorBridgePresenter.swift index b8db2a66a8..39e740bfcc 100644 --- a/Riot/Modules/Room/RoomInfo/RoomInfoCoordinatorBridgePresenter.swift +++ b/Riot/Modules/Room/RoomInfo/RoomInfoCoordinatorBridgePresenter.swift @@ -17,12 +17,14 @@ */ import Foundation +import MatrixSDK @objc protocol RoomInfoCoordinatorBridgePresenterDelegate { func roomInfoCoordinatorBridgePresenterDelegateDidComplete(_ coordinatorBridgePresenter: RoomInfoCoordinatorBridgePresenter) func roomInfoCoordinatorBridgePresenter(_ coordinatorBridgePresenter: RoomInfoCoordinatorBridgePresenter, didRequestMentionForMember member: MXRoomMember) func roomInfoCoordinatorBridgePresenterDelegateDidLeaveRoom(_ coordinatorBridgePresenter: RoomInfoCoordinatorBridgePresenter) func roomInfoCoordinatorBridgePresenter(_ coordinatorBridgePresenter: RoomInfoCoordinatorBridgePresenter, didReplaceRoomWithReplacementId roomId: String) + func roomInfoCoordinatorBridgePresenter(_ coordinator: RoomInfoCoordinatorBridgePresenter, viewEventInTimeline event: MXEvent) } /// RoomInfoCoordinatorBridgePresenter enables to start RoomInfoCoordinator from a view controller. @@ -129,6 +131,9 @@ extension RoomInfoCoordinatorBridgePresenter: RoomInfoCoordinatorDelegate { func roomInfoCoordinator(_ coordinator: RoomInfoCoordinatorType, didReplaceRoomWithReplacementId roomId: String) { self.delegate?.roomInfoCoordinatorBridgePresenter(self, didReplaceRoomWithReplacementId: roomId) } + func roomInfoCoordinator(_ coordinator: RoomInfoCoordinatorType, viewEventInTimeline event: MXEvent) { + self.delegate?.roomInfoCoordinatorBridgePresenter(self, viewEventInTimeline: event) + } } // MARK: - UIAdaptivePresentationControllerDelegate diff --git a/Riot/Modules/Room/RoomInfo/RoomInfoCoordinatorType.swift b/Riot/Modules/Room/RoomInfo/RoomInfoCoordinatorType.swift index 80f696b0bf..2122ddf1df 100644 --- a/Riot/Modules/Room/RoomInfo/RoomInfoCoordinatorType.swift +++ b/Riot/Modules/Room/RoomInfo/RoomInfoCoordinatorType.swift @@ -17,12 +17,14 @@ */ import Foundation +import MatrixSDK protocol RoomInfoCoordinatorDelegate: AnyObject { func roomInfoCoordinatorDidComplete(_ coordinator: RoomInfoCoordinatorType) func roomInfoCoordinator(_ coordinator: RoomInfoCoordinatorType, didRequestMentionForMember member: MXRoomMember) func roomInfoCoordinatorDidLeaveRoom(_ coordinator: RoomInfoCoordinatorType) func roomInfoCoordinator(_ coordinator: RoomInfoCoordinatorType, didReplaceRoomWithReplacementId roomId: String) + func roomInfoCoordinator(_ coordinator: RoomInfoCoordinatorType, viewEventInTimeline event: MXEvent) } /// `RoomInfoCoordinatorType` is a protocol describing a Coordinator that handle keybackup setup navigation flow. diff --git a/Riot/Modules/Room/RoomInfo/RoomInfoList/RoomInfoListViewController.swift b/Riot/Modules/Room/RoomInfo/RoomInfoList/RoomInfoListViewController.swift index d2646ed3d3..93df4d701d 100644 --- a/Riot/Modules/Room/RoomInfo/RoomInfoList/RoomInfoListViewController.swift +++ b/Riot/Modules/Room/RoomInfo/RoomInfoList/RoomInfoListViewController.swift @@ -205,7 +205,7 @@ final class RoomInfoListViewController: UIViewController { rows.append(rowMembers) } - if BuildSettings.pollsHistoryEnabled { + if BuildSettings.pollsEnabled { rows.append(rowPollHistory) } diff --git a/Riot/Modules/Room/RoomViewController.m b/Riot/Modules/Room/RoomViewController.m index e8b5e61550..f391bc8636 100644 --- a/Riot/Modules/Room/RoomViewController.m +++ b/Riot/Modules/Room/RoomViewController.m @@ -5286,25 +5286,9 @@ - (IBAction)onButtonPressed:(id)sender { // Dismiss potential keyboard. [self dismissKeyboard]; - - // Jump to the last unread event by using a temporary room data source initialized with the last unread event id. - MXWeakify(self); - [RoomDataSource loadRoomDataSourceWithRoomId:self.roomDataSource.roomId - initialEventId:self.roomDataSource.room.accountData.readMarkerEventId - threadId:self.roomDataSource.threadId - andMatrixSession:self.mainSession - onComplete:^(id roomDataSource) { - MXStrongifyAndReturnIfNil(self); - - [roomDataSource finalizeInitialization]; - - // Center the bubbles table content on the bottom of the read marker event in order to display correctly the read marker view. - self.centerBubblesTableViewContentOnTheInitialEventBottom = YES; - [self displayRoom:roomDataSource]; - - // Give the data source ownership to the room view controller. - self.hasRoomDataSourceOwnership = YES; - }]; + NSString *eventId = self.roomDataSource.room.accountData.readMarkerEventId; + NSString *threadId = self.roomDataSource.threadId; + [self reloadRoomWihtEventId:eventId threadId:threadId]; } else if (sender == self.resetReadMarkerButton) { @@ -7910,6 +7894,35 @@ - (void)roomInfoCoordinatorBridgePresenter:(RoomInfoCoordinatorBridgePresenter * // [[AppDelegate theDelegate] showRoomWithParameters:parameters]; } } +- (void)roomInfoCoordinatorBridgePresenter:(RoomInfoCoordinatorBridgePresenter *)coordinator + viewEventInTimeline:(MXEvent *)event +{ + [self.navigationController popToViewController:self animated:true]; + [self reloadRoomWihtEventId:event.eventId threadId:event.threadId]; +} + +-(void)reloadRoomWihtEventId:(NSString *)eventId + threadId:(NSString *)threadId +{ + // Jump to the last unread event by using a temporary room data source initialized with the last unread event id. + MXWeakify(self); + [RoomDataSource loadRoomDataSourceWithRoomId:self.roomDataSource.roomId + initialEventId:eventId + threadId:threadId + andMatrixSession:self.mainSession + onComplete:^(id roomDataSource) { + MXStrongifyAndReturnIfNil(self); + + [roomDataSource finalizeInitialization]; + + // Center the bubbles table content on the bottom of the read marker event in order to display correctly the read marker view. + self.centerBubblesTableViewContentOnTheInitialEventBottom = YES; + [self displayRoom:roomDataSource]; + + // Give the data source ownership to the room view controller. + self.hasRoomDataSourceOwnership = YES; + }]; +} #pragma mark - RemoveJitsiWidgetViewDelegate diff --git a/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift b/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift index 013602843c..d611fb06ad 100644 --- a/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift +++ b/Riot/Modules/Room/Views/WYSIWYGInputToolbar/WysiwygInputToolbarView.swift @@ -17,6 +17,7 @@ import Foundation import Reusable import WysiwygComposer +import HTMLParser import SwiftUI import Combine import UIKit @@ -43,9 +44,14 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp private var voiceMessageBottomConstraint: NSLayoutConstraint? private var hostingViewController: VectorHostingController! private var wysiwygViewModel = WysiwygComposerViewModel( - textColor: ThemeService.shared().theme.colors.primaryContent, - linkColor: ThemeService.shared().theme.colors.links, - codeBackgroundColor: ThemeService.shared().theme.selectedBackgroundColor + parserStyle: HTMLParserStyle(textColor: ThemeService.shared().theme.colors.primaryContent, + linkColor: ThemeService.shared().theme.colors.links, + codeBackgroundColor: ThemeService.shared().theme.selectedBackgroundColor, + codeBorderColor: ThemeService.shared().theme.textQuinaryColor, + quoteBackgroundColor: ThemeService.shared().theme.selectedBackgroundColor, + quoteBorderColor: ThemeService.shared().theme.textQuinaryColor, + borderWidth: 1.0, + cornerRadius: 4.0) ) private var viewModel: ComposerViewModelProtocol! @@ -298,9 +304,14 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp private func update(theme: Theme) { hostingViewController.view.backgroundColor = theme.colors.background - wysiwygViewModel.textColor = theme.colors.primaryContent - wysiwygViewModel.linkColor = theme.colors.links - wysiwygViewModel.codeBackgroundColor = theme.selectedBackgroundColor + wysiwygViewModel.parserStyle = HTMLParserStyle(textColor: ThemeService.shared().theme.colors.primaryContent, + linkColor: ThemeService.shared().theme.colors.links, + codeBackgroundColor: ThemeService.shared().theme.selectedBackgroundColor, + codeBorderColor: ThemeService.shared().theme.textQuinaryColor, + quoteBackgroundColor: ThemeService.shared().theme.selectedBackgroundColor, + quoteBorderColor: ThemeService.shared().theme.textQuinaryColor, + borderWidth: 1.0, + cornerRadius: 4.0) } private func updateTextViewHeight() { diff --git a/Riot/Modules/Settings/SettingsViewController.m b/Riot/Modules/Settings/SettingsViewController.m index 6cff6af96c..8dc76f357a 100644 --- a/Riot/Modules/Settings/SettingsViewController.m +++ b/Riot/Modules/Settings/SettingsViewController.m @@ -639,12 +639,10 @@ - (void)updateSections if (BuildSettings.settingsScreenShowLabSettings) { Section *sectionLabs = [Section sectionWithTag:SECTION_TAG_LABS]; - #if DEBUG if (MXSDKOptions.sharedInstance.isCryptoSDKAvailable) { [sectionLabs addRowWithTag:LABS_ENABLE_CRYPTO_SDK]; } - #endif [sectionLabs addRowWithTag:LABS_ENABLE_RINGING_FOR_GROUP_CALLS_INDEX]; [sectionLabs addRowWithTag:LABS_ENABLE_THREADS_INDEX]; @@ -2677,7 +2675,6 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N } else { - #if DEBUG if (row == LABS_ENABLE_CRYPTO_SDK) { MXKTableViewCellWithLabelAndSwitch *labelAndSwitchCell = [self getLabelAndSwitchCell:tableView forIndexPath:indexPath]; @@ -2686,11 +2683,10 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N labelAndSwitchCell.mxkSwitch.on = isEnabled; [labelAndSwitchCell.mxkSwitch setEnabled:!isEnabled]; labelAndSwitchCell.mxkSwitch.onTintColor = ThemeService.shared.theme.tintColor; - [labelAndSwitchCell.mxkSwitch addTarget:self action:@selector(toggleEnableCryptoSDKFeature:) forControlEvents:UIControlEventTouchUpInside]; + [labelAndSwitchCell.mxkSwitch addTarget:self action:@selector(enableCryptoSDKFeature:) forControlEvents:UIControlEventTouchUpInside]; cell = labelAndSwitchCell; } - #endif } } else if (section == SECTION_TAG_SECURITY) @@ -3510,17 +3506,14 @@ - (void)toggleEnableVoiceBroadcastFeature:(UISwitch *)sender RiotSettings.shared.enableVoiceBroadcast = sender.isOn; } -#if DEBUG -- (void)toggleEnableCryptoSDKFeature:(UISwitch *)sender +- (void)enableCryptoSDKFeature:(UISwitch *)sender { - BOOL isEnabled = sender.isOn; - MXWeakify(self); - [currentAlert dismissViewControllerAnimated:NO completion:nil]; - UIAlertController *confirmationAlert = [UIAlertController alertControllerWithTitle:nil + UIAlertController *confirmationAlert = [UIAlertController alertControllerWithTitle:VectorL10n.settingsLabsEnableCryptoSdk message:VectorL10n.settingsLabsConfirmCryptoSdk preferredStyle:UIAlertControllerStyleAlert]; + MXWeakify(self); [confirmationAlert addAction:[UIAlertAction actionWithTitle:[VectorL10n cancel] style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) { MXStrongifyAndReturnIfNil(self); self->currentAlert = nil; @@ -3529,17 +3522,16 @@ - (void)toggleEnableCryptoSDKFeature:(UISwitch *)sender }]]; [confirmationAlert addAction:[UIAlertAction actionWithTitle:[VectorL10n continue] style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { - MXStrongifyAndReturnIfNil(self); - RiotSettings.shared.enableCryptoSDK = isEnabled; - MXSDKOptions.sharedInstance.enableCryptoSDK = isEnabled; + [CryptoSDKConfiguration.shared enable]; + [Analytics.shared trackCryptoSDKEnabled]; + [[AppDelegate theDelegate] reloadMatrixSessions:YES]; }]]; [self presentViewController:confirmationAlert animated:YES completion:nil]; currentAlert = confirmationAlert; } -#endif - (void)togglePinRoomsWithMissedNotif:(UISwitch *)sender { diff --git a/Riot/Modules/Spaces/SpaceRoomList/ExploreRoomCoordinator.swift b/Riot/Modules/Spaces/SpaceRoomList/ExploreRoomCoordinator.swift index 41ba90c2c3..278eaaf2e5 100644 --- a/Riot/Modules/Spaces/SpaceRoomList/ExploreRoomCoordinator.swift +++ b/Riot/Modules/Spaces/SpaceRoomList/ExploreRoomCoordinator.swift @@ -17,6 +17,7 @@ */ import UIKit +import MatrixSDK @objcMembers final class ExploreRoomCoordinator: NSObject, ExploreRoomCoordinatorType { @@ -519,5 +520,8 @@ extension ExploreRoomCoordinator: RoomInfoCoordinatorDelegate { self.remove(childCoordinator: coordinator) } } + func roomInfoCoordinator(_ coordinator: RoomInfoCoordinatorType, viewEventInTimeline event: MXEvent) { + + } } diff --git a/Riot/Modules/VoiceBroadcast/VoiceBroadcastSDK/VoiceBroadcastAggregator.swift b/Riot/Modules/VoiceBroadcast/VoiceBroadcastSDK/VoiceBroadcastAggregator.swift index 39264b42c9..4522df16c3 100644 --- a/Riot/Modules/VoiceBroadcast/VoiceBroadcastSDK/VoiceBroadcastAggregator.swift +++ b/Riot/Modules/VoiceBroadcast/VoiceBroadcastSDK/VoiceBroadcastAggregator.swift @@ -35,6 +35,7 @@ public protocol VoiceBroadcastAggregatorDelegate: AnyObject { func voiceBroadcastAggregator(_ aggregator: VoiceBroadcastAggregator, didReceiveChunk: VoiceBroadcastChunk) func voiceBroadcastAggregator(_ aggregator: VoiceBroadcastAggregator, didReceiveState: VoiceBroadcastInfoState) func voiceBroadcastAggregatorDidUpdateData(_ aggregator: VoiceBroadcastAggregator) + func voiceBroadcastAggregator(_ aggregator: VoiceBroadcastAggregator, didUpdateUndecryptableEventList events: Set) } /** @@ -58,6 +59,7 @@ public class VoiceBroadcastAggregator { private var referenceEventsListener: Any? private var events: [MXEvent] = [] + private var undecryptableEvents: Set = [] public private(set) var voiceBroadcast: VoiceBroadcast! { didSet { @@ -84,7 +86,7 @@ public class VoiceBroadcastAggregator { try buildVoiceBroadcastStartContent() } - + private func buildVoiceBroadcastStartContent() throws { guard let event = session.store.event(withEventId: voiceBroadcastStartEventId, inRoom: room.roomId), let eventContent = VoiceBroadcastInfo(fromJSON: event.content), @@ -118,7 +120,11 @@ public class VoiceBroadcastAggregator { @objc private func eventDidDecrypt(sender: Notification) { guard let event = sender.object as? MXEvent else { return } - + + if undecryptableEvents.remove(event) != nil { + delegate?.voiceBroadcastAggregator(self, didUpdateUndecryptableEventList: undecryptableEvents) + } + self.handleEvent(event: event) } @@ -138,8 +144,19 @@ public class VoiceBroadcastAggregator { private func updateVoiceBroadcast(event: MXEvent) { guard event.sender == self.voiceBroadcastSenderId, let relatedEventId = event.relatesTo?.eventId, - relatedEventId == self.voiceBroadcastStartEventId, - event.content[VoiceBroadcastSettings.voiceBroadcastContentKeyChunkType] != nil else { + relatedEventId == self.voiceBroadcastStartEventId else { + return + } + + // Handle decryption errors + if event.decryptionError != nil { + self.undecryptableEvents.insert(event) + self.delegate?.voiceBroadcastAggregator(self, didUpdateUndecryptableEventList: self.undecryptableEvents) + + return + } + + guard event.content[VoiceBroadcastSettings.voiceBroadcastContentKeyChunkType] != nil else { return } @@ -192,15 +209,22 @@ public class VoiceBroadcastAggregator { } self.events.removeAll() + self.undecryptableEvents.removeAll() self.voiceBroadcastLastChunkSequence = 0 let filteredChunk = response.chunk.filter { event in event.sender == self.voiceBroadcastSenderId && event.content[VoiceBroadcastSettings.voiceBroadcastContentKeyChunkType] != nil } - self.events.append(contentsOf: filteredChunk) - + + let decryptionFailure = response.chunk.filter { event in + event.sender == self.voiceBroadcastSenderId && + event.decryptionError != nil + } + self.undecryptableEvents.formUnion(decryptionFailure) + self.delegate?.voiceBroadcastAggregator(self, didUpdateUndecryptableEventList: self.undecryptableEvents) + let eventTypes = [VoiceBroadcastSettings.voiceBroadcastInfoContentKeyType, kMXEventTypeStringRoomMessage] self.referenceEventsListener = self.room.listen(toEventsOfTypes: eventTypes, onEvent: { [weak self] event, direction, roomState in self?.handleEvent(event: event, direction: direction, roomState: roomState) diff --git a/Riot/Utils/EventFormatter+DTCoreTextFix.h b/Riot/Utils/EventFormatter+DTCoreTextFix.h deleted file mode 100644 index 90be432c46..0000000000 --- a/Riot/Utils/EventFormatter+DTCoreTextFix.h +++ /dev/null @@ -1,30 +0,0 @@ -/* -Copyright 2020 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -@import Foundation; - -#import "EventFormatter.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface EventFormatter(DTCoreTextFix) - -// Fix DTCoreText iOS 13 issue (https://github.com/Cocoanetics/DTCoreText/issues/1168) -+ (void)fixDTCoreTextFont; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Riot/Utils/EventFormatter+DTCoreTextFix.m b/Riot/Utils/EventFormatter+DTCoreTextFix.m deleted file mode 100644 index 110d036fcc..0000000000 --- a/Riot/Utils/EventFormatter+DTCoreTextFix.m +++ /dev/null @@ -1,80 +0,0 @@ -/* -Copyright 2020 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -#import "EventFormatter+DTCoreTextFix.h" - -@import UIKit; -@import CoreText; -@import ObjectiveC; - -#pragma mark - UIFont DTCoreText fix - -@interface UIFont (vc_DTCoreTextFix) - -+ (UIFont *)vc_fixedFontWithCTFont:(CTFontRef)ctFont; - -@end - -@implementation UIFont (vc_DTCoreTextFix) - -+ (UIFont *)vc_fixedFontWithCTFont:(CTFontRef)ctFont { - NSString *fontName = (__bridge_transfer NSString *)CTFontCopyName(ctFont, kCTFontPostScriptNameKey); - - CGFloat fontSize = CTFontGetSize(ctFont); - UIFont *font = [UIFont fontWithName:fontName size:fontSize]; - - // On iOS 13+ "TimesNewRomanPSMT" will be used instead of "SFUI" - // In case of "Times New Roman" fallback, use system font and reuse UIFontDescriptorSymbolicTraits. - if ([font.familyName.lowercaseString containsString:@"times"]) - { - UIFontDescriptorSymbolicTraits symbolicTraits = (UIFontDescriptorSymbolicTraits)CTFontGetSymbolicTraits(ctFont); - - UIFontDescriptor *systemFontDescriptor = [UIFont systemFontOfSize:fontSize].fontDescriptor; - - UIFontDescriptor *finalFontDescriptor = [systemFontDescriptor fontDescriptorWithSymbolicTraits:symbolicTraits]; - font = [UIFont fontWithDescriptor:finalFontDescriptor size:fontSize]; - } - - return font; -} - -@end - -#pragma mark - Implementation - -@implementation EventFormatter(DTCoreTextFix) - -// DTCoreText iOS 13 fix. See issue and comment here: https://github.com/Cocoanetics/DTCoreText/issues/1168#issuecomment-583541514 -+ (void)fixDTCoreTextFont -{ - static dispatch_once_t onceToken; - - dispatch_once(&onceToken, ^{ - Class originalClass = object_getClass([UIFont class]); -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" - SEL originalSelector = @selector(fontWithCTFont:); // DTCoreText method we're overriding - SEL ourSelector = @selector(vc_fixedFontWithCTFont:); // Use custom implementation -#pragma clang diagnostic pop - - Method originalMethod = class_getClassMethod(originalClass, originalSelector); - Method swizzledMethod = class_getClassMethod(originalClass, ourSelector); - - method_exchangeImplementations(originalMethod, swizzledMethod); - }); -} - -@end diff --git a/Riot/Utils/EventFormatter.m b/Riot/Utils/EventFormatter.m index 8b2c44ddbf..209aad7106 100644 --- a/Riot/Utils/EventFormatter.m +++ b/Riot/Utils/EventFormatter.m @@ -25,7 +25,6 @@ #import "MXDecryptionResult.h" #import "DecryptionFailureTracker.h" -#import "EventFormatter+DTCoreTextFix.h" #import #pragma mark - Constants definitions @@ -50,11 +49,6 @@ @interface EventFormatter () @implementation EventFormatter -+ (void)load -{ - [self fixDTCoreTextFont]; -} - - (void)initDateTimeFormatters { [super initDateTimeFormatters]; diff --git a/Riot/target.yml b/Riot/target.yml index 5933bbe650..8468e277b5 100644 --- a/Riot/target.yml +++ b/Riot/target.yml @@ -44,6 +44,7 @@ targets: - package: SwiftOGG - package: WysiwygComposer - package: DeviceKit + - package: DTCoreText configFiles: Debug: Debug.xcconfig diff --git a/RiotNSE/NotificationService.swift b/RiotNSE/NotificationService.swift index 0fd204f21c..a25c40f41b 100644 --- a/RiotNSE/NotificationService.swift +++ b/RiotNSE/NotificationService.swift @@ -41,6 +41,7 @@ class NotificationService: UNNotificationServiceExtension { private var ongoingVoIPPushRequests: [String: Bool] = [:] private var userAccount: MXKAccount? + private var isCryptoSDKEnabled = false /// Best attempt contents. Will be updated incrementally, if something fails during the process, this best attempt content will be showed as notification. Keys are eventId's private var bestAttemptContents: [String: UNMutableNotificationContent] = [:] @@ -195,9 +196,10 @@ class NotificationService: UNNotificationServiceExtension { self.userAccount = MXKAccountManager.shared()?.activeAccounts.first if let userAccount = userAccount { Self.backgroundServiceInitQueue.sync { - if NotificationService.backgroundSyncService?.credentials != userAccount.mxCredentials { + if hasChangedCryptoSDK() || NotificationService.backgroundSyncService?.credentials != userAccount.mxCredentials { MXLog.debug("[NotificationService] setup: MXBackgroundSyncService init: BEFORE") self.logMemory() + NotificationService.backgroundSyncService = MXBackgroundSyncService(withCredentials: userAccount.mxCredentials, persistTokenDataHandler: { persistTokenDataHandler in MXKAccountManager.shared().readAndWriteCredentials(persistTokenDataHandler) }, unauthenticatedHandler: { error, softLogout, refreshTokenAuth, completion in @@ -214,6 +216,16 @@ class NotificationService: UNNotificationServiceExtension { } } + /// Determine whether we have switched from using crypto v1 to v2 or vice versa which will require + /// rebuilding `MXBackgroundSyncService` + private func hasChangedCryptoSDK() -> Bool { + guard isCryptoSDKEnabled != RiotSettings.shared.enableCryptoSDK else { + return false + } + isCryptoSDKEnabled = RiotSettings.shared.enableCryptoSDK + return true + } + /// Attempts to preprocess payload and attach room display name to the best attempt content /// - Parameters: /// - eventId: Event identifier to mutate best attempt content diff --git a/RiotNSE/target.yml b/RiotNSE/target.yml index 36e5a145e8..049acbfd49 100644 --- a/RiotNSE/target.yml +++ b/RiotNSE/target.yml @@ -33,6 +33,7 @@ targets: dependencies: - package: DeviceKit + - package: DTCoreText configFiles: Debug: Debug.xcconfig diff --git a/RiotShareExtension/target.yml b/RiotShareExtension/target.yml index 322d314acd..0b309c9224 100644 --- a/RiotShareExtension/target.yml +++ b/RiotShareExtension/target.yml @@ -33,6 +33,7 @@ targets: dependencies: - package: DeviceKit + - package: DTCoreText configFiles: Debug: Debug.xcconfig diff --git a/RiotSwiftUI/Modules/Common/Mock/MockAppScreens.swift b/RiotSwiftUI/Modules/Common/Mock/MockAppScreens.swift index 43db68f107..2ad8451b17 100644 --- a/RiotSwiftUI/Modules/Common/Mock/MockAppScreens.swift +++ b/RiotSwiftUI/Modules/Common/Mock/MockAppScreens.swift @@ -73,6 +73,7 @@ enum MockAppScreens { MockComposerCreateActionListScreenState.self, MockComposerLinkActionScreenState.self, MockVoiceBroadcastPlaybackScreenState.self, - MockPollHistoryScreenState.self + MockPollHistoryScreenState.self, + MockPollHistoryDetailScreenState.self ] } diff --git a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingViewModel.swift b/RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingViewModel.swift deleted file mode 100644 index 0ba19872a6..0000000000 --- a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingViewModel.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// Copyright 2021 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Combine -import SwiftUI - -typealias AllChatsOnboardingViewModelType = StateStoreViewModel - -class AllChatsOnboardingViewModel: AllChatsOnboardingViewModelType, AllChatsOnboardingViewModelProtocol { - // MARK: - Properties - - // MARK: Private - - // MARK: Public - - var completion: ((AllChatsOnboardingViewModelResult) -> Void)? - - // MARK: - Setup - - static func makeAllChatsOnboardingViewModel() -> AllChatsOnboardingViewModelProtocol { - AllChatsOnboardingViewModel() - } - - private init() { - super.init(initialViewState: Self.defaultState()) - } - - private static func defaultState() -> AllChatsOnboardingViewState { - AllChatsOnboardingViewState(pages: [ - AllChatsOnboardingPageData(image: Asset.Images.allChatsOnboarding1.image, - title: VectorL10n.allChatsOnboardingPageTitle1, - message: VectorL10n.allChatsOnboardingPageMessage1), - AllChatsOnboardingPageData(image: Asset.Images.allChatsOnboarding2.image, - title: VectorL10n.allChatsOnboardingPageTitle2, - message: VectorL10n.allChatsOnboardingPageMessage2), - AllChatsOnboardingPageData(image: Asset.Images.allChatsOnboarding3.image, - title: VectorL10n.allChatsOnboardingPageTitle3, - message: VectorL10n.allChatsOnboardingPageMessage3) - ]) - } - - // MARK: - Public - - override func process(viewAction: AllChatsOnboardingViewAction) { - switch viewAction { - case .cancel: - completion?(.cancel) - } - } -} diff --git a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/Coordinator/AllChatsOnboardingCoordinator.swift b/RiotSwiftUI/Modules/Room/AllChatsOnboarding/Coordinator/AllChatsOnboardingCoordinator.swift deleted file mode 100644 index df189c1447..0000000000 --- a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/Coordinator/AllChatsOnboardingCoordinator.swift +++ /dev/null @@ -1,92 +0,0 @@ -// -// Copyright 2021 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import CommonKit -import SwiftUI - -/// All Chats onboarding screen -final class AllChatsOnboardingCoordinator: NSObject, Coordinator, Presentable { - // MARK: - Properties - - // MARK: Private - - private let hostingController: UIViewController - private var viewModel: AllChatsOnboardingViewModelProtocol - - private var indicatorPresenter: UserIndicatorTypePresenterProtocol - private var loadingIndicator: UserIndicator? - - // MARK: Public - - // Must be used only internally - var childCoordinators: [Coordinator] = [] - var completion: (() -> Void)? - - // MARK: - Setup - - override init() { - let viewModel = AllChatsOnboardingViewModel.makeAllChatsOnboardingViewModel() - let view = AllChatsOnboarding(viewModel: viewModel.context) - self.viewModel = viewModel - hostingController = VectorHostingController(rootView: view) - indicatorPresenter = UserIndicatorTypePresenter(presentingViewController: hostingController) - - super.init() - - hostingController.presentationController?.delegate = self - } - - // MARK: - Public - - func start() { - MXLog.debug("[AllChatsOnboardingCoordinator] did start.") - viewModel.completion = { [weak self] result in - guard let self = self else { return } - MXLog.debug("[AllChatsOnboardingCoordinator] AllChatsOnboardingViewModel did complete with result: \(result).") - switch result { - case .cancel: - self.completion?() - } - } - } - - func toPresentable() -> UIViewController { - hostingController - } - - // MARK: - Private - - /// Show an activity indicator whilst loading. - /// - Parameters: - /// - label: The label to show on the indicator. - /// - isInteractionBlocking: Whether the indicator should block any user interaction. - private func startLoading(label: String = VectorL10n.loading, isInteractionBlocking: Bool = true) { - loadingIndicator = indicatorPresenter.present(.loading(label: label, isInteractionBlocking: isInteractionBlocking)) - } - - /// Hide the currently displayed activity indicator. - private func stopLoading() { - loadingIndicator = nil - } -} - -// MARK: - UIAdaptivePresentationControllerDelegate - -extension AllChatsOnboardingCoordinator: UIAdaptivePresentationControllerDelegate { - func presentationControllerDidDismiss(_ presentationController: UIPresentationController) { - completion?() - } -} diff --git a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/Coordinator/AllChatsOnboardingCoordinatorBridgePresenter.swift b/RiotSwiftUI/Modules/Room/AllChatsOnboarding/Coordinator/AllChatsOnboardingCoordinatorBridgePresenter.swift deleted file mode 100644 index 75977054d9..0000000000 --- a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/Coordinator/AllChatsOnboardingCoordinatorBridgePresenter.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// Copyright 2022 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - -@objc protocol AllChatsOnboardingCoordinatorBridgePresenterDelegate { - func allChatsOnboardingCoordinatorBridgePresenterDidCancel(_ coordinatorBridgePresenter: AllChatsOnboardingCoordinatorBridgePresenter) -} - -/// `AllChatsOnboardingCoordinatorBridgePresenter` enables to start `AllChatsOnboardingCoordinator` from a view controller. -/// This bridge is used while waiting for global usage of coordinator pattern. -/// It breaks the Coordinator abstraction and it has been introduced for Objective-C compatibility (mainly for integration in legacy view controllers). -/// Each bridge should be removed once the underlying Coordinator has been integrated by another Coordinator. -@objcMembers -final class AllChatsOnboardingCoordinatorBridgePresenter: NSObject { - // MARK: - Properties - - // MARK: Private - - private var coordinator: AllChatsOnboardingCoordinator? - - // MARK: Public - - var completion: (() -> Void)? - - // MARK: - Public - - func present(from viewController: UIViewController, animated: Bool) { - let coordinator = AllChatsOnboardingCoordinator() - coordinator.completion = { [weak self] in - guard let self = self else { return } - self.completion?() - } - let presentable = coordinator.toPresentable() - viewController.present(presentable, animated: animated, completion: nil) - coordinator.start() - - self.coordinator = coordinator - } - - func dismiss(animated: Bool, completion: (() -> Void)?) { - guard let coordinator = coordinator else { - return - } - coordinator.toPresentable().dismiss(animated: animated) { - self.coordinator = nil - completion?() - } - } -} diff --git a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/View/AllChatsOnboarding.swift b/RiotSwiftUI/Modules/Room/AllChatsOnboarding/View/AllChatsOnboarding.swift deleted file mode 100644 index 513cc55a34..0000000000 --- a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/View/AllChatsOnboarding.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// Copyright 2021 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import SwiftUI - -struct AllChatsOnboarding: View { - // MARK: - Properties - - // MARK: Private - - @Environment(\.theme) private var theme: ThemeSwiftUI - @State private var selectedTab = 0 - - // MARK: Public - - @ObservedObject var viewModel: AllChatsOnboardingViewModel.Context - - var body: some View { - VStack { - Text(VectorL10n.allChatsOnboardingTitle) - .font(theme.fonts.title3SB) - .foregroundColor(theme.colors.primaryContent) - .padding() - TabView(selection: $selectedTab) { - ForEach(viewModel.viewState.pages.indices, id: \.self) { index in - let page = viewModel.viewState.pages[index] - AllChatsOnboardingPage(image: page.image, - title: page.title, - message: page.message) - .tag(index) - } - } - .tabViewStyle(PageTabViewStyle(indexDisplayMode: .automatic)) - .indexViewStyle(.page(backgroundDisplayMode: .always)) - - Button { onCallToAction() } label: { - Text(selectedTab == viewModel.viewState.pages.count - 1 ? VectorL10n.allChatsOnboardingTryIt : VectorL10n.next) - .animation(nil) - } - .buttonStyle(PrimaryActionButtonStyle()) - .padding() - } - .background(theme.colors.background.ignoresSafeArea()) - .frame(maxHeight: .infinity) - } - - // MARK: - Private - - private func onCallToAction() { - if selectedTab == viewModel.viewState.pages.count - 1 { - viewModel.send(viewAction: .cancel) - } else { - withAnimation { - selectedTab += 1 - } - } - } -} - -// MARK: - Previews - -struct AllChatsOnboarding_Previews: PreviewProvider { - static var previews: some View { - AllChatsOnboarding(viewModel: AllChatsOnboardingViewModel.makeAllChatsOnboardingViewModel().context).theme(.light).preferredColorScheme(.light) - AllChatsOnboarding(viewModel: AllChatsOnboardingViewModel.makeAllChatsOnboardingViewModel().context).theme(.dark).preferredColorScheme(.dark) - } -} diff --git a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/View/AllChatsOnboardingPage.swift b/RiotSwiftUI/Modules/Room/AllChatsOnboarding/View/AllChatsOnboardingPage.swift deleted file mode 100644 index c6a5f06fa6..0000000000 --- a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/View/AllChatsOnboardingPage.swift +++ /dev/null @@ -1,62 +0,0 @@ -// -// Copyright 2022 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import SwiftUI - -struct AllChatsOnboardingPage: View { - // MARK: - Properties - - let image: UIImage - let title: String - let message: String - - // MARK: Private - - @Environment(\.theme) private var theme: ThemeSwiftUI - - var body: some View { - VStack { - Spacer() - Image(uiImage: image) - Spacer() - Text(title) - .font(theme.fonts.title2B) - .foregroundColor(theme.colors.primaryContent) - .padding(.bottom, 16) - Text(message) - .multilineTextAlignment(.center) - .font(theme.fonts.callout) - .foregroundColor(theme.colors.primaryContent) - Spacer() - } - .padding(.horizontal) - } -} - -// MARK: - Previews - -struct AllChatsOnboardingPage_Previews: PreviewProvider { - static var previews: some View { - preview.theme(.light).preferredColorScheme(.light) - preview.theme(.dark).preferredColorScheme(.dark) - } - - private static var preview: some View { - AllChatsOnboardingPage(image: Asset.Images.allChatsOnboarding1.image, - title: VectorL10n.allChatsOnboardingPageTitle1, - message: VectorL10n.allChatsOnboardingPageMessage1) - } -} diff --git a/RiotSwiftUI/Modules/Room/Composer/Model/ComposerModels.swift b/RiotSwiftUI/Modules/Room/Composer/Model/ComposerModels.swift index 5525e99403..800494c5db 100644 --- a/RiotSwiftUI/Modules/Room/Composer/Model/ComposerModels.swift +++ b/RiotSwiftUI/Modules/Room/Composer/Model/ComposerModels.swift @@ -36,6 +36,8 @@ enum FormatType { case strikethrough case unorderedList case orderedList + case indent + case unIndent case inlineCode case codeBlock case quote @@ -66,6 +68,10 @@ extension FormatItem { return Asset.Images.bulletList.name case .orderedList: return Asset.Images.numberedList.name + case .indent: + return Asset.Images.indentIncrease.name + case .unIndent: + return Asset.Images.indentDecrease.name case .inlineCode: return Asset.Images.code.name case .codeBlock: @@ -91,6 +97,10 @@ extension FormatItem { return "unorderedListButton" case .orderedList: return "orderedListButton" + case .indent: + return "indentListButton" + case .unIndent: + return "unIndentButton" case .inlineCode: return "inlineCodeButton" case .codeBlock: @@ -116,6 +126,10 @@ extension FormatItem { return VectorL10n.wysiwygComposerFormatActionUnorderedList case .orderedList: return VectorL10n.wysiwygComposerFormatActionOrderedList + case .indent: + return VectorL10n.wysiwygComposerFormatActionIndent + case .unIndent: + return VectorL10n.wysiwygComposerFormatActionUnIndent case .inlineCode: return VectorL10n.wysiwygComposerFormatActionInlineCode case .codeBlock: @@ -144,6 +158,10 @@ extension FormatType { return .unorderedList case .orderedList: return .orderedList + case .indent: + return .indent + case .unIndent: + return .unIndent case .inlineCode: return .inlineCode case .codeBlock: @@ -171,6 +189,10 @@ extension FormatType { return .unorderedList case .orderedList: return .orderedList + case .indent: + return .indent + case .unIndent: + return .unIndent case .inlineCode: return .inlineCode case .codeBlock: diff --git a/RiotSwiftUI/Modules/Room/NotificationSettings/Service/MatrixSDK/MXRoomNotificationSettingsService.swift b/RiotSwiftUI/Modules/Room/NotificationSettings/Service/MatrixSDK/MXRoomNotificationSettingsService.swift index e9d192b490..caaa45a530 100644 --- a/RiotSwiftUI/Modules/Room/NotificationSettings/Service/MatrixSDK/MXRoomNotificationSettingsService.swift +++ b/RiotSwiftUI/Modules/Room/NotificationSettings/Service/MatrixSDK/MXRoomNotificationSettingsService.swift @@ -30,6 +30,10 @@ final class MXRoomNotificationSettingsService: RoomNotificationSettingsServiceTy private var observers: [ObjectIdentifier] = [] + private var notificationCenter: MXNotificationCenter? { + room.mxSession?.notificationCenter + } + // MARK: Public var notificationState: RoomNotificationState { @@ -166,7 +170,7 @@ final class MXRoomNotificationSettingsService: RoomNotificationSettingsServiceTy } handleFailureCallback(completion) - room.mxSession.notificationCenter.addRoomRule( + notificationCenter?.addRoomRule( room.roomId, notify: false, sound: false, @@ -184,7 +188,7 @@ final class MXRoomNotificationSettingsService: RoomNotificationSettingsServiceTy } handleFailureCallback(completion) - room.mxSession.notificationCenter.addOverrideRule( + notificationCenter?.addOverrideRule( withId: roomId, conditions: [["kind": "event_match", "key": "room_id", "pattern": roomId]], notify: false, @@ -196,11 +200,11 @@ final class MXRoomNotificationSettingsService: RoomNotificationSettingsServiceTy private func removePushRule(rule: MXPushRule, completion: @escaping Completion) { handleUpdateCallback(completion) { [weak self] in guard let self = self else { return true } - return self.room.mxSession.notificationCenter.rule(byId: rule.ruleId) == nil + return self.notificationCenter?.rule(byId: rule.ruleId) == nil } handleFailureCallback(completion) - room.mxSession.notificationCenter.removeRule(rule) + notificationCenter?.removeRule(rule) } private func enablePushRule(rule: MXPushRule, completion: @escaping Completion) { @@ -210,7 +214,7 @@ final class MXRoomNotificationSettingsService: RoomNotificationSettingsServiceTy } handleFailureCallback(completion) - room.mxSession.notificationCenter.enableRule(rule, isEnabled: true) + notificationCenter?.enableRule(rule, isEnabled: true) } private func handleUpdateCallback(_ completion: @escaping Completion, releaseCheck: @escaping () -> Bool) { @@ -283,14 +287,14 @@ private extension MXRoom { } var overridePushRule: MXPushRule? { - guard let overrideRules = mxSession.notificationCenter.rules.global.override else { + guard let overrideRules = mxSession?.notificationCenter?.rules?.global?.override else { return nil } return getRoomRule(from: overrideRules) } var roomPushRule: MXPushRule? { - guard let roomRules = mxSession.notificationCenter.rules.global.room else { + guard let roomRules = mxSession?.notificationCenter?.rules?.global?.room else { return nil } return getRoomRule(from: roomRules) diff --git a/RiotSwiftUI/Modules/Room/PollHistory/Coordinator/PollHistoryCoordinator.swift b/RiotSwiftUI/Modules/Room/PollHistory/Coordinator/PollHistoryCoordinator.swift index b9129a6e93..faa293abf4 100644 --- a/RiotSwiftUI/Modules/Room/PollHistory/Coordinator/PollHistoryCoordinator.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/Coordinator/PollHistoryCoordinator.swift @@ -15,29 +15,32 @@ // import CommonKit +import MatrixSDK import SwiftUI struct PollHistoryCoordinatorParameters { let mode: PollHistoryMode + let room: MXRoom + let navigationRouter: NavigationRouterType } -final class PollHistoryCoordinator: Coordinator, Presentable { +final class PollHistoryCoordinator: NSObject, Coordinator, Presentable { private let parameters: PollHistoryCoordinatorParameters private let pollHistoryHostingController: UIViewController private var pollHistoryViewModel: PollHistoryViewModelProtocol + private let navigationRouter: NavigationRouterType // Must be used only internally var childCoordinators: [Coordinator] = [] - var completion: (() -> Void)? + var completion: ((MXEvent) -> Void)? init(parameters: PollHistoryCoordinatorParameters) { self.parameters = parameters - - #warning("replace with the real service after that it's done") - let viewModel = PollHistoryViewModel(mode: parameters.mode, pollService: MockPollHistoryService()) + let viewModel = PollHistoryViewModel(mode: parameters.mode, pollService: PollHistoryService(room: parameters.room, chunkSizeInDays: PollHistoryConstants.chunkSizeInDays)) let view = PollHistory(viewModel: viewModel.context) pollHistoryViewModel = viewModel pollHistoryHostingController = VectorHostingController(rootView: view) + navigationRouter = parameters.navigationRouter } // MARK: - Public @@ -45,11 +48,61 @@ final class PollHistoryCoordinator: Coordinator, Presentable { func start() { MXLog.debug("[PollHistoryCoordinator] did start.") pollHistoryViewModel.completion = { [weak self] result in - self?.completion?() + switch result { + case .showPollDetail(let poll): + self?.showPollDetail(poll) + } } } + func showPollDetail(_ poll: TimelinePollDetails) { + guard let event = parameters.room.mxSession.store.event(withEventId: poll.id, inRoom: parameters.room.roomId), + let detailCoordinator: PollHistoryDetailCoordinator = try? .init(parameters: .init(event: event, poll: poll, room: parameters.room)) else { + pollHistoryViewModel.context.alertInfo = .init(id: true, title: VectorL10n.settingsDiscoveryErrorMessage) + return + } + detailCoordinator.toPresentable().presentationController?.delegate = self + detailCoordinator.completion = { [weak self, weak detailCoordinator, weak event] result in + guard let self, let coordinator = detailCoordinator, let event = event else { return } + self.handlePollDetailResult(result, coordinator: coordinator, event: event, poll: poll) + } + + add(childCoordinator: detailCoordinator) + detailCoordinator.start() + toPresentable().present(detailCoordinator.toPresentable(), animated: true) + } + func toPresentable() -> UIViewController { pollHistoryHostingController } + + private func handlePollDetailResult(_ result: PollHistoryDetailViewModelResult, coordinator: Coordinator, event: MXEvent, poll: TimelinePollDetails) { + switch result { + case .dismiss: + toPresentable().dismiss(animated: true) + remove(childCoordinator: coordinator) + case .viewInTimeline: + toPresentable().dismiss(animated: false) + remove(childCoordinator: coordinator) + var event = event + if poll.closed { + let room = parameters.room + let relatedEvents = room.mxSession.store.relations(forEvent: event.eventId, inRoom: room.roomId, relationType: MXEventRelationTypeReference) + let pollEndedEvent = relatedEvents.first(where: { $0.eventType == .pollEnd }) + event = pollEndedEvent ?? event + } + completion?(event) + } + } +} + +// MARK: UIAdaptivePresentationControllerDelegate + +extension PollHistoryCoordinator: UIAdaptivePresentationControllerDelegate { + func presentationControllerDidDismiss(_ presentationController: UIPresentationController) { + guard let coordinator = childCoordinators.last else { + return + } + remove(childCoordinator: coordinator) + } } diff --git a/RiotSwiftUI/Modules/Room/PollHistory/MockPollHistoryScreenState.swift b/RiotSwiftUI/Modules/Room/PollHistory/MockPollHistoryScreenState.swift index 65d393957b..a1c12e5f33 100644 --- a/RiotSwiftUI/Modules/Room/PollHistory/MockPollHistoryScreenState.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/MockPollHistoryScreenState.swift @@ -14,6 +14,7 @@ // limitations under the License. // +import Combine import Foundation import SwiftUI @@ -25,8 +26,12 @@ enum MockPollHistoryScreenState: MockScreenState, CaseIterable { // mock that screen. case active case past - case activeEmpty - case pastEmpty + case activeNoMoreContent + case contentLoading + case empty + case emptyLoading + case emptyNoMoreContent + case loading /// The associated screen var screenType: Any.Type { @@ -35,25 +40,40 @@ enum MockPollHistoryScreenState: MockScreenState, CaseIterable { /// Generate the view struct for the screen state. var screenView: ([Any], AnyView) { - let pollHistoryMode: PollHistoryMode + var pollHistoryMode: PollHistoryMode = .active let pollService = MockPollHistoryService() switch self { case .active: pollHistoryMode = .active + case .activeNoMoreContent: + pollHistoryMode = .active + pollService.hasNextBatch = false case .past: pollHistoryMode = .past - case .activeEmpty: + case .contentLoading: + pollService.nextBatchPublishers.append(MockPollPublisher.loadingPolls) + case .empty: pollHistoryMode = .active - pollService.activePollsData = [] - case .pastEmpty: - pollHistoryMode = .past - pollService.pastPollsData = [] + pollService.nextBatchPublishers = [MockPollPublisher.emptyPolls] + case .emptyLoading: + pollService.nextBatchPublishers = [MockPollPublisher.emptyPolls, MockPollPublisher.loadingPolls] + case .emptyNoMoreContent: + pollService.hasNextBatch = false + pollService.nextBatchPublishers = [MockPollPublisher.emptyPolls] + case .loading: + pollService.nextBatchPublishers = [MockPollPublisher.loadingPolls] } let viewModel = PollHistoryViewModel(mode: pollHistoryMode, pollService: pollService) // can simulate service and viewModel actions here if needs be. + switch self { + case .contentLoading, .emptyLoading: + viewModel.process(viewAction: .loadMoreContent) + default: + break + } return ( [pollHistoryMode, viewModel], @@ -62,3 +82,17 @@ enum MockPollHistoryScreenState: MockScreenState, CaseIterable { ) } } + +enum MockPollPublisher { + static var emptyPolls: AnyPublisher { + Empty(completeImmediately: true).eraseToAnyPublisher() + } + + static var loadingPolls: AnyPublisher { + Empty(completeImmediately: false).eraseToAnyPublisher() + } + + static var failure: AnyPublisher { + Fail(error: NSError(domain: "fake", code: 1)).eraseToAnyPublisher() + } +} diff --git a/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/Coordinator/PollHistoryDetailCoordinator.swift b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/Coordinator/PollHistoryDetailCoordinator.swift new file mode 100644 index 0000000000..4b166b3aa0 --- /dev/null +++ b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/Coordinator/PollHistoryDetailCoordinator.swift @@ -0,0 +1,66 @@ +// +// Copyright 2021 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Combine +import CommonKit +import MatrixSDK +import SwiftUI + +struct PollHistoryDetailCoordinatorParameters { + let event: MXEvent + let poll: TimelinePollDetails + let room: MXRoom +} + +final class PollHistoryDetailCoordinator: Coordinator, Presentable { + private let parameters: PollHistoryDetailCoordinatorParameters + private let pollHistoryDetailHostingController: UIViewController + private var pollHistoryDetailViewModel: PollHistoryDetailViewModelProtocol + + // Must be used only internally + var childCoordinators: [Coordinator] = [] + var completion: ((PollHistoryDetailViewModelResult) -> Void)? + + init(parameters: PollHistoryDetailCoordinatorParameters) throws { + self.parameters = parameters + let timelinePollCoordinator = try TimelinePollCoordinator(parameters: .init(session: parameters.room.mxSession, room: parameters.room, pollEvent: parameters.event)) + + let viewModel = PollHistoryDetailViewModel(poll: parameters.poll) + let view = PollHistoryDetail(viewModel: viewModel.context, contentPoll: timelinePollCoordinator.toView()) + pollHistoryDetailViewModel = viewModel + pollHistoryDetailHostingController = VectorHostingController(rootView: view) + add(childCoordinator: timelinePollCoordinator) + } + + // MARK: - Public + + func start() { + MXLog.debug("[PollHistoryDetailCoordinator] did start.") + pollHistoryDetailViewModel.completion = { [weak self] result in + guard let self = self else { return } + switch result { + case .dismiss: + self.completion?(.dismiss) + case .viewInTimeline: + self.completion?(.viewInTimeline) + } + } + } + + func toPresentable() -> UIViewController { + pollHistoryDetailHostingController + } +} diff --git a/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/MockPollHistoryDetailScreenState.swift b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/MockPollHistoryDetailScreenState.swift new file mode 100644 index 0000000000..09a8fb3c7d --- /dev/null +++ b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/MockPollHistoryDetailScreenState.swift @@ -0,0 +1,56 @@ +// +// Copyright 2021 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import SwiftUI + +enum MockPollHistoryDetailScreenState: MockScreenState, CaseIterable { + case openDisclosed + case closedDisclosed + case openUndisclosed + case closedUndisclosed + case closedPollEnded + + var screenType: Any.Type { + PollHistoryDetail.self + } + + var poll: TimelinePollDetails { + let answerOptions = [TimelinePollAnswerOption(id: "1", text: "First", count: 10, winner: false, selected: false), + TimelinePollAnswerOption(id: "2", text: "Second", count: 5, winner: false, selected: true), + TimelinePollAnswerOption(id: "3", text: "Third", count: 15, winner: true, selected: false)] + + let poll = TimelinePollDetails(id: "id", + question: "Question", + answerOptions: answerOptions, + closed: self == .closedDisclosed || self == .closedUndisclosed ? true : false, + startDate: .init(timeIntervalSinceReferenceDate: 0), + totalAnswerCount: 20, + type: self == .closedDisclosed || self == .openDisclosed ? .disclosed : .undisclosed, + eventType: self == .closedPollEnded ? .ended : .started, + maxAllowedSelections: 1, + hasBeenEdited: false, + hasDecryptionError: false) + return poll + } + + var screenView: ([Any], AnyView) { + let timelineViewModel = TimelinePollViewModel(timelinePollDetails: poll) + let viewModel = PollHistoryDetailViewModel(poll: poll) + + return ([viewModel], AnyView(PollHistoryDetail(viewModel: viewModel.context, contentPoll: TimelinePollView(viewModel: timelineViewModel.context)))) + } +} diff --git a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingModels.swift b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/PollHistoryDetailModels.swift similarity index 58% rename from RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingModels.swift rename to RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/PollHistoryDetailModels.swift index 76beb12055..7d4fd63656 100644 --- a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingModels.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/PollHistoryDetailModels.swift @@ -15,29 +15,31 @@ // import Foundation -import UIKit +import SwiftUI // MARK: - Coordinator -// MARK: View model +typealias PollHistoryDetailViewModelCallback = (PollHistoryDetailViewModelResult) -> Void -enum AllChatsOnboardingViewModelResult { - case cancel +enum PollHistoryDetailViewModelResult { + case dismiss + case viewInTimeline } // MARK: View -struct AllChatsOnboardingPageData: Identifiable { - let id = UUID().uuidString - let image: UIImage - let title: String - let message: String -} +struct PollHistoryDetailViewState: BindableState { + var poll: TimelinePollDetails + var pollStartDate: Date { + poll.startDate + } -struct AllChatsOnboardingViewState: BindableState { - let pages: [AllChatsOnboardingPageData] + var isPollClosed: Bool { + poll.closed + } } -enum AllChatsOnboardingViewAction { - case cancel +enum PollHistoryDetailViewAction { + case dismiss + case viewInTimeline } diff --git a/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/PollHistoryDetailViewModel.swift b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/PollHistoryDetailViewModel.swift new file mode 100644 index 0000000000..58a18441a6 --- /dev/null +++ b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/PollHistoryDetailViewModel.swift @@ -0,0 +1,43 @@ +// +// Copyright 2021 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Combine +import SwiftUI + +typealias PollHistoryDetailViewModelType = StateStoreViewModel + +class PollHistoryDetailViewModel: PollHistoryDetailViewModelType, PollHistoryDetailViewModelProtocol { + // MARK: Public + + var completion: PollHistoryDetailViewModelCallback? + + // MARK: - Setup + + init(poll: TimelinePollDetails) { + super.init(initialViewState: PollHistoryDetailViewState(poll: poll)) + } + + // MARK: - Public + + override func process(viewAction: PollHistoryDetailViewAction) { + switch viewAction { + case .dismiss: + completion?(.dismiss) + case .viewInTimeline: + completion?(.viewInTimeline) + } + } +} diff --git a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingViewModelProtocol.swift b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/PollHistoryDetailViewModelProtocol.swift similarity index 68% rename from RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingViewModelProtocol.swift rename to RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/PollHistoryDetailViewModelProtocol.swift index dd963c4075..0e4abb98a0 100644 --- a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingViewModelProtocol.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/PollHistoryDetailViewModelProtocol.swift @@ -16,8 +16,7 @@ import Foundation -protocol AllChatsOnboardingViewModelProtocol { - var completion: ((AllChatsOnboardingViewModelResult) -> Void)? { get set } - static func makeAllChatsOnboardingViewModel() -> AllChatsOnboardingViewModelProtocol - var context: AllChatsOnboardingViewModelType.Context { get } +protocol PollHistoryDetailViewModelProtocol { + var completion: PollHistoryDetailViewModelCallback? { get set } + var context: PollHistoryDetailViewModelType.Context { get } } diff --git a/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/Test/UI/PollHistoryDetailUITests.swift b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/Test/UI/PollHistoryDetailUITests.swift new file mode 100644 index 0000000000..952a271fbe --- /dev/null +++ b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/Test/UI/PollHistoryDetailUITests.swift @@ -0,0 +1,36 @@ +// +// Copyright 2021 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import RiotSwiftUI +import XCTest + +class PollHistoryDetailUITests: MockScreenTestCase { + func testPollHistoryDetailOpenPoll() { + app.goToScreenWithIdentifier(MockPollHistoryDetailScreenState.openDisclosed.title) + let title = app.navigationBars.staticTexts.firstMatch.label + XCTAssertEqual(title, VectorL10n.pollHistoryActiveSegmentTitle) + XCTAssertEqual(app.staticTexts["PollHistoryDetail.date"].label, "1/1/01") + XCTAssertEqual(app.buttons["PollHistoryDetail.viewInTimeLineButton"].label, VectorL10n.pollHistoryDetailViewInTimeline) + } + + func testPollHistoryDetailClosedPoll() { + app.goToScreenWithIdentifier(MockPollHistoryDetailScreenState.closedDisclosed.title) + let title = app.navigationBars.staticTexts.firstMatch.label + XCTAssertEqual(title, VectorL10n.pollHistoryPastSegmentTitle) + XCTAssertEqual(app.staticTexts["PollHistoryDetail.date"].label, "1/1/01") + XCTAssertEqual(app.buttons["PollHistoryDetail.viewInTimeLineButton"].label, VectorL10n.pollHistoryDetailViewInTimeline) + } +} diff --git a/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/Test/Unit/PollHistoryDetailViewModelTests.swift b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/Test/Unit/PollHistoryDetailViewModelTests.swift new file mode 100644 index 0000000000..a501cbeb0b --- /dev/null +++ b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/Test/Unit/PollHistoryDetailViewModelTests.swift @@ -0,0 +1,67 @@ +// +// Copyright 2021 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import XCTest + +@testable import RiotSwiftUI + +class PollHistoryDetailViewModelTests: XCTestCase { + private enum Constants { + static let counterInitialValue = 0 + } + + var viewModel: PollHistoryDetailViewModel! + var context: PollHistoryDetailViewModelType.Context! + + override func setUpWithError() throws { + let answerOptions = [TimelinePollAnswerOption(id: "1", text: "1", count: 1, winner: false, selected: false), + TimelinePollAnswerOption(id: "2", text: "2", count: 1, winner: false, selected: false), + TimelinePollAnswerOption(id: "3", text: "3", count: 1, winner: false, selected: false)] + + let timelinePoll = TimelinePollDetails(id: "poll-id", + question: "Question", + answerOptions: answerOptions, + closed: false, + startDate: .init(), + totalAnswerCount: 3, + type: .disclosed, + eventType: .started, + maxAllowedSelections: 1, + hasBeenEdited: false, + hasDecryptionError: false) + + viewModel = PollHistoryDetailViewModel(poll: timelinePoll) + context = viewModel.context + } + + func testInitialState() { + XCTAssertFalse(context.viewState.isPollClosed) + } + + func testProcessAction() { + viewModel.completion = { result in + XCTAssertEqual(result, .viewInTimeline) + } + viewModel.process(viewAction: .viewInTimeline) + } + + func testProcessDismiss() { + viewModel.completion = { result in + XCTAssertEqual(result, .dismiss) + } + viewModel.process(viewAction: .dismiss) + } +} diff --git a/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/View/PollHistoryDetail.swift b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/View/PollHistoryDetail.swift new file mode 100644 index 0000000000..54b3279363 --- /dev/null +++ b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryDetail/View/PollHistoryDetail.swift @@ -0,0 +1,111 @@ +// +// Copyright 2021 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import SwiftUI + +struct PollHistoryDetail: View { + // MARK: Private + + @Environment(\.theme) private var theme: ThemeSwiftUI + + // MARK: Public + + @ObservedObject var viewModel: PollHistoryDetailViewModel.Context + var contentPoll: any View + + var body: some View { + navigation + } + + private var navigation: some View { + if #available(iOS 16.0, *) { + return NavigationStack { + content + } + } else { + return NavigationView { + content + } + } + } + + private var content: some View { + ScrollView { + VStack(alignment: .leading) { + Text(DateFormatter.pollShortDateFormatter.string(from: viewModel.viewState.pollStartDate)) + .foregroundColor(theme.colors.tertiaryContent) + .font(theme.fonts.caption1) + .padding([.top]) + .accessibilityIdentifier("PollHistoryDetail.date") + AnyView(contentPoll) + .navigationTitle(navigationTitle) + .navigationBarTitleDisplayMode(.inline) + .navigationBarBackButtonHidden(true) + .navigationBarItems(leading: backButton, trailing: doneButton) + viewInTimeline + } + } + .padding([.horizontal], 16) + .padding([.top, .bottom]) + .background(theme.colors.background.ignoresSafeArea()) + } + + private var backButton: some View { + Button(action: { + viewModel.send(viewAction: .dismiss) + }) { + Image(systemName: "chevron.left") + .aspectRatio(contentMode: .fit) + .foregroundColor(theme.colors.accent) + } + } + + private var doneButton: some View { + Button { + viewModel.send(viewAction: .dismiss) + } label: { + Text(VectorL10n.done) + } + .accentColor(theme.colors.accent) + } + + private var viewInTimeline: some View { + Button { + viewModel.send(viewAction: .viewInTimeline) + } label: { + Text(VectorL10n.pollHistoryDetailViewInTimeline) + } + .accentColor(theme.colors.accent) + .accessibilityIdentifier("PollHistoryDetail.viewInTimeLineButton") + } + + private var navigationTitle: String { + if viewModel.viewState.isPollClosed { + return VectorL10n.pollHistoryPastSegmentTitle + } else { + return VectorL10n.pollHistoryActiveSegmentTitle + } + } +} + +// MARK: - Previews + +struct PollHistoryDetail_Previews: PreviewProvider { + static let stateRenderer = MockPollHistoryDetailScreenState.stateRenderer + static var previews: some View { + stateRenderer.screenGroup() + } +} diff --git a/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryModels.swift b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryModels.swift index 93ef308193..4f4f2a6060 100644 --- a/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryModels.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryModels.swift @@ -16,8 +16,12 @@ // MARK: View model -enum PollHistoryViewModelResult: Equatable { - #warning("e.g. show poll detail") +enum PollHistoryConstants { + static let chunkSizeInDays: UInt = 30 +} + +enum PollHistoryViewModelResult { + case showPollDetail(poll: TimelinePollDetails) } // MARK: View @@ -29,6 +33,7 @@ enum PollHistoryMode: CaseIterable { struct PollHistoryViewBindings { var mode: PollHistoryMode + var alertInfo: AlertInfo? } struct PollHistoryViewState: BindableState { @@ -37,10 +42,16 @@ struct PollHistoryViewState: BindableState { } var bindings: PollHistoryViewBindings - var polls: [PollListData] = [] + var isLoading = false + var canLoadMoreContent = true + var polls: [TimelinePollDetails]? + var syncStartDate: Date = .init() + var syncedUpTo: Date = .distantFuture } enum PollHistoryViewAction { case viewAppeared case segmentDidChange + case showPollDetail(poll: TimelinePollDetails) + case loadMoreContent } diff --git a/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryViewModel.swift b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryViewModel.swift index 4199251da3..fa02f1a4f4 100644 --- a/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryViewModel.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/PollHistoryViewModel.swift @@ -14,24 +14,22 @@ // limitations under the License. // +import Combine import SwiftUI typealias PollHistoryViewModelType = StateStoreViewModel final class PollHistoryViewModel: PollHistoryViewModelType, PollHistoryViewModelProtocol { private let pollService: PollHistoryServiceProtocol - private var polls: [PollListData] = [] - private var fetchingTask: Task? { - didSet { - oldValue?.cancel() - } - } + private var polls: [TimelinePollDetails]? + private var subcriptions: Set = .init() var completion: ((PollHistoryViewModelResult) -> Void)? init(mode: PollHistoryMode, pollService: PollHistoryServiceProtocol) { self.pollService = pollService super.init(initialViewState: PollHistoryViewState(mode: mode)) + state.canLoadMoreContent = pollService.hasNextBatch } // MARK: - Public @@ -39,39 +37,117 @@ final class PollHistoryViewModel: PollHistoryViewModelType, PollHistoryViewModel override func process(viewAction: PollHistoryViewAction) { switch viewAction { case .viewAppeared: - fetchingTask = fetchPolls() + setupUpdateSubscriptions() + fetchContent() case .segmentDidChange: - updatePolls() + updateViewState() + case .showPollDetail(let poll): + completion?(.showPollDetail(poll: poll)) + case .loadMoreContent: + fetchContent() } } } private extension PollHistoryViewModel { - func fetchPolls() -> Task { - Task { - let polls = try await pollService.fetchHistory() - - guard Task.isCancelled == false else { - return + func fetchContent() { + state.isLoading = true + + pollService + .nextBatch() + .collect() + .sink { [weak self] completion in + self?.handleBatchEnded(completion: completion) + } receiveValue: { [weak self] polls in + self?.add(polls: polls) } - - await MainActor.run { - self.polls = polls - updatePolls() + .store(in: &subcriptions) + } + + func handleBatchEnded(completion: Subscribers.Completion) { + state.isLoading = false + state.canLoadMoreContent = pollService.hasNextBatch + + switch completion { + case .finished: + break + case .failure: + polls = polls ?? [] + state.bindings.alertInfo = .init(id: true, title: VectorL10n.pollHistoryFetchingError) + } + + updateViewState() + } + + func setupUpdateSubscriptions() { + subcriptions.removeAll() + + pollService + .updates + .sink { [weak self] detail in + self?.update(poll: detail) + self?.updateViewState() + } + .store(in: &subcriptions) + + pollService + .fetchedUpTo + .weakAssign(to: \.state.syncedUpTo, on: self) + .store(in: &subcriptions) + + pollService + .livePolls + .sink { [weak self] livePoll in + self?.add(polls: [livePoll]) + self?.updateViewState() } + .store(in: &subcriptions) + } + + func update(poll: TimelinePollDetails) { + guard let pollIndex = polls?.firstIndex(where: { $0.id == poll.id }) else { + return } + + polls?[pollIndex] = poll + } + + func add(polls: [TimelinePollDetails]) { + self.polls = (self.polls ?? []) + polls } - func updatePolls() { - let renderedPolls: [PollListData] + func updateViewState() { + let renderedPolls: [TimelinePollDetails]? switch context.mode { case .active: - renderedPolls = polls.filter { $0.winningOption == nil } + renderedPolls = polls?.filter { $0.closed == false } case .past: - renderedPolls = polls.filter { $0.winningOption != nil } + renderedPolls = polls?.filter { $0.closed == true } } - state.polls = renderedPolls + state.polls = renderedPolls?.sorted(by: { $0.startDate > $1.startDate }) + } +} + +extension PollHistoryViewModel.Context { + var emptyPollsText: String { + switch (viewState.bindings.mode, viewState.canLoadMoreContent) { + case (.active, true): + return VectorL10n.pollHistoryNoActivePollPeriodText("\(syncedPastDays)") + case (.active, false): + return VectorL10n.pollHistoryNoActivePollText + case (.past, true): + return VectorL10n.pollHistoryNoPastPollPeriodText("\(syncedPastDays)") + case (.past, false): + return VectorL10n.pollHistoryNoPastPollText + } + } + + var syncedPastDays: Int { + guard let days = Calendar.current.dateComponents([.day], from: viewState.syncedUpTo, to: viewState.syncStartDate).day else { + return 0 + } + return max(0, days) } } diff --git a/RiotSwiftUI/Modules/Room/PollHistory/Service/MatrixSDK/PollHistoryService.swift b/RiotSwiftUI/Modules/Room/PollHistory/Service/MatrixSDK/PollHistoryService.swift index a2dcf256ae..7f6d8c5f6c 100644 --- a/RiotSwiftUI/Modules/Room/PollHistory/Service/MatrixSDK/PollHistoryService.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/Service/MatrixSDK/PollHistoryService.swift @@ -14,11 +14,220 @@ // limitations under the License. // -import MatrixSDK +import Combine import Foundation +import MatrixSDK final class PollHistoryService: PollHistoryServiceProtocol { - func fetchHistory() async throws -> [PollListData] { - [] + private let room: MXRoom + private let timeline: MXEventTimeline + private let chunkSizeInDays: UInt + + private var timelineListener: Any? + private var roomListener: Any? + + // polls aggregation + private var pollAggregationContexts: [String: PollAggregationContext] = [:] + + // polls + private var currentBatchSubject: PassthroughSubject? + private var livePollsSubject: PassthroughSubject = .init() + + // polls updates + private let updatesSubject: PassthroughSubject = .init() + + // timestamps + private var targetTimestamp: Date = .init() + private var oldestEventDateSubject: CurrentValueSubject = .init(.init()) + + var updates: AnyPublisher { + updatesSubject.eraseToAnyPublisher() + } + + init(room: MXRoom, chunkSizeInDays: UInt) { + self.room = room + self.chunkSizeInDays = chunkSizeInDays + timeline = MXRoomEventTimeline(room: room, andInitialEventId: nil) + setupTimeline() + setupLiveUpdates() + } + + func nextBatch() -> AnyPublisher { + currentBatchSubject?.eraseToAnyPublisher() ?? startPagination() + } + + var hasNextBatch: Bool { + timeline.canPaginate(.backwards) + } + + var fetchedUpTo: AnyPublisher { + oldestEventDateSubject.eraseToAnyPublisher() + } + + var livePolls: AnyPublisher { + livePollsSubject.eraseToAnyPublisher() + } + + deinit { + guard let roomListener = roomListener else { + return + } + room.removeListener(roomListener) + } + + class PollAggregationContext { + var pollAggregator: PollAggregator? + let isLivePoll: Bool + var published: Bool + + init(pollAggregator: PollAggregator? = nil, isLivePoll: Bool, published: Bool = false) { + self.pollAggregator = pollAggregator + self.isLivePoll = isLivePoll + self.published = published + } + } +} + +private extension PollHistoryService { + enum Constants { + static let pageSize: UInt = 250 + } + + func setupTimeline() { + timeline.resetPagination() + + timelineListener = timeline.listenToEvents { [weak self] event, _, _ in + if event.eventType == .pollStart { + self?.aggregatePoll(pollStartEvent: event, isLivePoll: false) + } + + self?.updateTimestamp(event: event) + } + } + + func setupLiveUpdates() { + roomListener = room.listen(toEventsOfTypes: [kMXEventTypeStringPollStart, kMXEventTypeStringPollStartMSC3381]) { [weak self] event, _, _ in + if event.eventType == .pollStart { + self?.aggregatePoll(pollStartEvent: event, isLivePoll: true) + } + } + } + + func updateTimestamp(event: MXEvent) { + oldestEventDate = min(event.originServerDate, oldestEventDate) + } + + func startPagination() -> AnyPublisher { + let startingTimestamp = oldestEventDate + targetTimestamp = startingTimestamp.subtractingDays(chunkSizeInDays) ?? startingTimestamp + + let batchSubject = PassthroughSubject() + currentBatchSubject = batchSubject + + DispatchQueue.main.async { [weak self] in + guard let self = self else { + return + } + self.paginate() + } + + return batchSubject.eraseToAnyPublisher() + } + + func paginate() { + timeline.paginate(Constants.pageSize, direction: .backwards, onlyFromStore: false) { [weak self] response in + guard let self = self else { + return + } + + switch response { + case .success: + if self.timeline.canPaginate(.backwards), self.timestampTargetReached == false { + self.paginate() + } else { + self.completeBatch(completion: .finished) + } + case .failure(let error): + self.completeBatch(completion: .failure(error)) + } + } + } + + func completeBatch(completion: Subscribers.Completion) { + currentBatchSubject?.send(completion: completion) + currentBatchSubject = nil + } + + func aggregatePoll(pollStartEvent: MXEvent, isLivePoll: Bool) { + let eventId: String = pollStartEvent.eventId + + guard pollAggregationContexts[eventId] == nil else { + return + } + + let newContext: PollAggregationContext = .init(isLivePoll: isLivePoll) + pollAggregationContexts[eventId] = newContext + + do { + newContext.pollAggregator = try PollAggregator(session: room.mxSession, room: room, pollEvent: pollStartEvent, delegate: self) + } catch { + pollAggregationContexts.removeValue(forKey: eventId) + } + } + + var timestampTargetReached: Bool { + oldestEventDate <= targetTimestamp + } + + var oldestEventDate: Date { + get { + oldestEventDateSubject.value + } + set { + oldestEventDateSubject.send(newValue) + } + } +} + +private extension Date { + func subtractingDays(_ days: UInt) -> Date? { + Calendar.current.date(byAdding: DateComponents(day: -Int(days)), to: self) + } +} + +private extension MXEvent { + var originServerDate: Date { + .init(timeIntervalSince1970: Double(originServerTs) / 1000) + } +} + +// MARK: - PollAggregatorDelegate + +extension PollHistoryService: PollAggregatorDelegate { + func pollAggregatorDidStartLoading(_ aggregator: PollAggregator) { } + + func pollAggregator(_ aggregator: PollAggregator, didFailWithError: Error) { } + + func pollAggregatorDidEndLoading(_ aggregator: PollAggregator) { + guard let context = pollAggregationContexts[aggregator.poll.id], context.published == false else { + return + } + + context.published = true + + let newPoll: TimelinePollDetails = .init(poll: aggregator.poll, represent: .started) + + if context.isLivePoll { + livePollsSubject.send(newPoll) + } else { + currentBatchSubject?.send(newPoll) + } + } + + func pollAggregatorDidUpdateData(_ aggregator: PollAggregator) { + guard let context = pollAggregationContexts[aggregator.poll.id], context.published else { + return + } + updatesSubject.send(.init(poll: aggregator.poll, represent: .started)) } } diff --git a/RiotSwiftUI/Modules/Room/PollHistory/Service/Mock/MockPollHistoryService.swift b/RiotSwiftUI/Modules/Room/PollHistory/Service/Mock/MockPollHistoryService.swift index 62796963de..c98f4e136d 100644 --- a/RiotSwiftUI/Modules/Room/PollHistory/Service/Mock/MockPollHistoryService.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/Service/Mock/MockPollHistoryService.swift @@ -1,4 +1,4 @@ -// +// // Copyright 2023 New Vector Ltd // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,31 +14,70 @@ // limitations under the License. // +import Combine + final class MockPollHistoryService: PollHistoryServiceProtocol { - var activePollsData: [PollListData] = (1..<10) - .map { index in - PollListData( - startDate: .init().addingTimeInterval(-CGFloat(index) * 3600), - question: "Do you like the active poll number \(index)?", - numberOfVotes: 30, - winningOption: nil - ) - } + lazy var nextBatchPublishers: [AnyPublisher] = [ + (activePollsData + pastPollsData) + .publisher + .setFailureType(to: Error.self) + .eraseToAnyPublisher() + ] + + func nextBatch() -> AnyPublisher { + nextBatchPublishers.isEmpty ? Empty().eraseToAnyPublisher() : nextBatchPublishers.removeFirst() + } + + var updatesPublisher: AnyPublisher = Empty().eraseToAnyPublisher() + var updates: AnyPublisher { + updatesPublisher + } + + var hasNextBatch = true - var pastPollsData: [PollListData] = (1..<10) - .map { index in - PollListData( - startDate: .init().addingTimeInterval(-CGFloat(index) * 3600), - question: "Do you like the past poll number \(index)?", - numberOfVotes: 30, - winningOption: .init(id: "id", text: "Yes, of course!", count: 20, winner: true, selected: true) - ) - } + var fetchedUpToPublisher: AnyPublisher = Just(.init()).eraseToAnyPublisher() + var fetchedUpTo: AnyPublisher { + fetchedUpToPublisher + } + + var livePollsPublisher: AnyPublisher = Empty().eraseToAnyPublisher() + var livePolls: AnyPublisher { + livePollsPublisher + } +} - func fetchHistory() async throws -> [PollListData] { - (activePollsData + pastPollsData) - .sorted { poll1, poll2 in - poll1.startDate > poll2.startDate +private extension MockPollHistoryService { + var activePollsData: [TimelinePollDetails] { + (1...3) + .map { index in + TimelinePollDetails(id: "a\(index)", + question: "Do you like the active poll number \(index)?", + answerOptions: [], + closed: false, + startDate: .init().addingTimeInterval(TimeInterval(-index) * 3600 * 24), + totalAnswerCount: 30, + type: .disclosed, + eventType: .started, + maxAllowedSelections: 1, + hasBeenEdited: false, + hasDecryptionError: false) + } + } + + var pastPollsData: [TimelinePollDetails] { + (1...3) + .map { index in + TimelinePollDetails(id: "p\(index)", + question: "Do you like the active poll number \(index)?", + answerOptions: [.init(id: "id", text: "Yes, of course!", count: 20, winner: true, selected: true)], + closed: true, + startDate: .init().addingTimeInterval(TimeInterval(-index) * 3600 * 24), + totalAnswerCount: 30, + type: .disclosed, + eventType: .started, + maxAllowedSelections: 1, + hasBeenEdited: false, + hasDecryptionError: false) } } } diff --git a/RiotSwiftUI/Modules/Room/PollHistory/Service/PollHistoryServiceProtocol.swift b/RiotSwiftUI/Modules/Room/PollHistory/Service/PollHistoryServiceProtocol.swift index 4bb9b43b53..5132478cc8 100644 --- a/RiotSwiftUI/Modules/Room/PollHistory/Service/PollHistoryServiceProtocol.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/Service/PollHistoryServiceProtocol.swift @@ -1,4 +1,4 @@ -// +// // Copyright 2023 New Vector Ltd // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,6 +14,24 @@ // limitations under the License. // +import Combine + protocol PollHistoryServiceProtocol { - func fetchHistory() async throws -> [PollListData] + /// Returns a Publisher publishing the polls in the next batch. + /// Implementations should return the same publisher if `nextBatch()` is called again before the previous publisher completes. + func nextBatch() -> AnyPublisher + + /// Publishes updates for the polls previously pusblished by the `nextBatch()` or `livePolls` publishers. + var updates: AnyPublisher { get } + + /// Publishes live polls not related with the current batch. + var livePolls: AnyPublisher { get } + + /// Returns true every time the service can fetch another batch. + /// There is no guarantee the `nextBatch()` returned publisher will publish something anyway. + var hasNextBatch: Bool { get } + + /// Publishes the date up to the service is synced (in the past). + /// This date doesn't need to be related with any poll event. + var fetchedUpTo: AnyPublisher { get } } diff --git a/RiotSwiftUI/Modules/Room/PollHistory/Test/UI/PollHistoryUITests.swift b/RiotSwiftUI/Modules/Room/PollHistory/Test/UI/PollHistoryUITests.swift index 5867b88e8f..ddce4978ca 100644 --- a/RiotSwiftUI/Modules/Room/PollHistory/Test/UI/PollHistoryUITests.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/Test/UI/PollHistoryUITests.swift @@ -17,13 +17,14 @@ import RiotSwiftUI import XCTest -class PollHistoryUITests: MockScreenTestCase { +final class PollHistoryUITests: MockScreenTestCase { func testActivePollHistoryHasContent() { app.goToScreenWithIdentifier(MockPollHistoryScreenState.active.title) let title = app.navigationBars.firstMatch.identifier let emptyText = app.staticTexts["PollHistory.emptyText"] let items = app.staticTexts["PollListItem.title"] let selectedSegment = app.buttons[VectorL10n.pollHistoryActiveSegmentTitle] + let loadMoreButton = app.buttons["PollHistory.loadMore"] let winningOption = app.staticTexts["PollListData.winningOption"] XCTAssertEqual(title, VectorL10n.pollHistoryTitle) @@ -31,6 +32,7 @@ class PollHistoryUITests: MockScreenTestCase { XCTAssertFalse(emptyText.exists) XCTAssertTrue(selectedSegment.exists) XCTAssertEqual(selectedSegment.value as? String, VectorL10n.accessibilitySelected) + XCTAssertTrue(loadMoreButton.exists) XCTAssertFalse(winningOption.exists) } @@ -40,29 +42,74 @@ class PollHistoryUITests: MockScreenTestCase { let emptyText = app.staticTexts["PollHistory.emptyText"] let items = app.staticTexts["PollListItem.title"] let selectedSegment = app.buttons[VectorL10n.pollHistoryPastSegmentTitle] - let winningOption = app.staticTexts["PollListData.winningOption"] + let loadMoreButton = app.buttons["PollHistory.loadMore"] + let winningOption = app.buttons["PollAnswerOption0"] XCTAssertEqual(title, VectorL10n.pollHistoryTitle) XCTAssertTrue(items.exists) XCTAssertFalse(emptyText.exists) XCTAssertTrue(selectedSegment.exists) XCTAssertEqual(selectedSegment.value as? String, VectorL10n.accessibilitySelected) + XCTAssertTrue(loadMoreButton.exists) XCTAssertTrue(winningOption.exists) } - func testPastPollHistoryIsEmpty() { - app.goToScreenWithIdentifier(MockPollHistoryScreenState.pastEmpty.title) + func testActivePollHistoryHasContentAndCantLoadMore() { + app.goToScreenWithIdentifier(MockPollHistoryScreenState.activeNoMoreContent.title) + let emptyText = app.staticTexts["PollHistory.emptyText"] + let items = app.staticTexts["PollListItem.title"] + let loadMoreButton = app.buttons["PollHistory.loadMore"] + + XCTAssertTrue(items.exists) + XCTAssertFalse(emptyText.exists) + XCTAssertFalse(loadMoreButton.exists) + } + + func testActivePollHistoryHasContentAndCanLoadMore() { + app.goToScreenWithIdentifier(MockPollHistoryScreenState.contentLoading.title) let title = app.navigationBars.firstMatch.identifier let emptyText = app.staticTexts["PollHistory.emptyText"] let items = app.staticTexts["PollListItem.title"] - let selectedSegment = app.buttons[VectorL10n.pollHistoryPastSegmentTitle] - let winningOption = app.staticTexts["PollListData.winningOption"] + let loadMoreButton = app.buttons["PollHistory.loadMore"] + + XCTAssertTrue(items.exists) + XCTAssertFalse(emptyText.exists) + XCTAssertTrue(loadMoreButton.exists) + XCTAssertFalse(loadMoreButton.isEnabled) + } + + func testActivePollHistoryEmptyAndCanLoadMore() { + app.goToScreenWithIdentifier(MockPollHistoryScreenState.empty.title) + let emptyText = app.staticTexts["PollHistory.emptyText"] + let items = app.staticTexts["PollListItem.title"] + let loadMoreButton = app.buttons["PollHistory.loadMore"] - XCTAssertEqual(title, VectorL10n.pollHistoryTitle) XCTAssertFalse(items.exists) XCTAssertTrue(emptyText.exists) - XCTAssertTrue(selectedSegment.exists) - XCTAssertEqual(selectedSegment.value as? String, VectorL10n.accessibilitySelected) - XCTAssertFalse(winningOption.exists) + XCTAssertTrue(loadMoreButton.exists) + XCTAssertTrue(loadMoreButton.isEnabled) + } + + func testActivePollHistoryEmptyAndLoading() { + app.goToScreenWithIdentifier(MockPollHistoryScreenState.emptyLoading.title) + let emptyText = app.staticTexts["PollHistory.emptyText"] + let items = app.staticTexts["PollListItem.title"] + let loadMoreButton = app.buttons["PollHistory.loadMore"] + + XCTAssertFalse(items.exists) + XCTAssertTrue(emptyText.exists) + XCTAssertTrue(loadMoreButton.exists) + XCTAssertFalse(loadMoreButton.isEnabled) + } + + func testActivePollHistoryEmptyAndCantLoadMore() { + app.goToScreenWithIdentifier(MockPollHistoryScreenState.emptyNoMoreContent.title) + let emptyText = app.staticTexts["PollHistory.emptyText"] + let items = app.staticTexts["PollListItem.title"] + let loadMoreButton = app.buttons["PollHistory.loadMore"] + + XCTAssertFalse(items.exists) + XCTAssertTrue(emptyText.exists) + XCTAssertFalse(loadMoreButton.exists) } } diff --git a/RiotSwiftUI/Modules/Room/PollHistory/Test/Unit/PollHistoryViewModelTests.swift b/RiotSwiftUI/Modules/Room/PollHistory/Test/Unit/PollHistoryViewModelTests.swift new file mode 100644 index 0000000000..efce641d4e --- /dev/null +++ b/RiotSwiftUI/Modules/Room/PollHistory/Test/Unit/PollHistoryViewModelTests.swift @@ -0,0 +1,135 @@ +// +// Copyright 2023 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Combine +@testable import RiotSwiftUI +import XCTest + +final class PollHistoryViewModelTests: XCTestCase { + private var viewModel: PollHistoryViewModel! + private var pollHistoryService: MockPollHistoryService = .init() + + override func setUpWithError() throws { + pollHistoryService = .init() + viewModel = .init(mode: .active, pollService: pollHistoryService) + } + + func testEmitsContentOnLanding() throws { + XCTAssert(viewModel.state.polls == nil) + viewModel.process(viewAction: .viewAppeared) + XCTAssertFalse(try polls.isEmpty) + } + + func testLoadingState() throws { + XCTAssertFalse(viewModel.state.isLoading) + viewModel.process(viewAction: .viewAppeared) + XCTAssertFalse(viewModel.state.isLoading) + XCTAssertFalse(try polls.isEmpty) + } + + func testLoadingStateIsTrueWhileLoading() { + XCTAssertFalse(viewModel.state.isLoading) + pollHistoryService.nextBatchPublishers = [MockPollPublisher.loadingPolls, MockPollPublisher.emptyPolls] + viewModel.process(viewAction: .viewAppeared) + XCTAssertTrue(viewModel.state.isLoading) + viewModel.process(viewAction: .viewAppeared) + XCTAssertFalse(viewModel.state.isLoading) + } + + func testUpdatesAreHandled() throws { + let mockUpdates: PassthroughSubject = .init() + pollHistoryService.updatesPublisher = mockUpdates.eraseToAnyPublisher() + viewModel.process(viewAction: .viewAppeared) + + var firstPoll = try XCTUnwrap(try polls.first) + XCTAssertEqual(firstPoll.question, "Do you like the active poll number 1?") + firstPoll.question = "foo" + + mockUpdates.send(firstPoll) + + let updatedPoll = try XCTUnwrap(viewModel.state.polls?.first) + XCTAssertEqual(updatedPoll.question, "foo") + } + + func testSegmentsAreUpdated() throws { + viewModel.process(viewAction: .viewAppeared) + XCTAssertFalse(try polls.isEmpty) + XCTAssertTrue(try polls.allSatisfy { !$0.closed }) + + viewModel.state.bindings.mode = .past + viewModel.process(viewAction: .segmentDidChange) + + XCTAssertTrue(try polls.allSatisfy(\.closed)) + } + + func testPollsAreReverseOrdered() throws { + viewModel.process(viewAction: .viewAppeared) + + let pollDates = try polls.map(\.startDate) + XCTAssertEqual(pollDates, pollDates.sorted(by: { $0 > $1 })) + } + + func testLivePollsAreHandled() throws { + pollHistoryService.nextBatchPublishers = [MockPollPublisher.emptyPolls] + pollHistoryService.livePollsPublisher = Just(mockPoll).eraseToAnyPublisher() + viewModel.process(viewAction: .viewAppeared) + XCTAssertEqual(viewModel.state.polls?.count, 1) + XCTAssertEqual(viewModel.state.polls?.first?.id, "id") + } + + func testLivePollsDontChangeLoadingState() throws { + let livePolls = PassthroughSubject() + pollHistoryService.nextBatchPublishers = [MockPollPublisher.loadingPolls] + pollHistoryService.livePollsPublisher = livePolls.eraseToAnyPublisher() + viewModel.process(viewAction: .viewAppeared) + XCTAssertTrue(viewModel.state.isLoading) + XCTAssertNil(viewModel.state.polls) + livePolls.send(mockPoll) + XCTAssertTrue(viewModel.state.isLoading) + XCTAssertNotNil(viewModel.state.polls) + XCTAssertEqual(viewModel.state.polls?.count, 1) + } + + func testAfterFailureCompletionIsCalled() throws { + pollHistoryService.nextBatchPublishers = [MockPollPublisher.failure] + viewModel.process(viewAction: .viewAppeared) + XCTAssertFalse(viewModel.state.isLoading) + XCTAssertNotNil(viewModel.state.polls) + XCTAssertNotNil(viewModel.state.bindings.alertInfo) + } +} + +private extension PollHistoryViewModelTests { + var polls: [TimelinePollDetails] { + get throws { + try XCTUnwrap(viewModel.state.polls) + } + } + + var mockPoll: TimelinePollDetails { + .init(id: "id", + question: "Do you like polls?", + answerOptions: [], + closed: false, + startDate: .init(), + totalAnswerCount: 3, + type: .undisclosed, + eventType: .started, + maxAllowedSelections: 1, + hasBeenEdited: false, + hasDecryptionError: false) + } +} diff --git a/RiotSwiftUI/Modules/Room/PollHistory/View/PollHistory.swift b/RiotSwiftUI/Modules/Room/PollHistory/View/PollHistory.swift index 7cf9bb45aa..612f85089f 100644 --- a/RiotSwiftUI/Modules/Room/PollHistory/View/PollHistory.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/View/PollHistory.swift @@ -31,11 +31,7 @@ struct PollHistory: View { .frame(maxWidth: .infinity, alignment: .leading) .padding(.horizontal, 16) - if viewModel.viewState.polls.isEmpty { - noPollsView - } else { - pollListView - } + content } .padding(.top, 32) .frame(maxWidth: .infinity, maxHeight: .infinity) @@ -48,37 +44,94 @@ struct PollHistory: View { .onChange(of: viewModel.mode) { _ in viewModel.send(viewAction: .segmentDidChange) } + .alert(item: $viewModel.alertInfo) { + $0.alert + } + } + + @ViewBuilder + private var content: some View { + if viewModel.viewState.polls == nil { + loadingView + } else if viewModel.viewState.polls?.isEmpty == true { + noPollsView + } else { + pollListView + } } private var pollListView: some View { ScrollView { LazyVStack(spacing: 32) { - let enumeratedPolls = Array(viewModel.viewState.polls.enumerated()) - - ForEach(enumeratedPolls, id: \.offset) { _, pollData in - PollListItem(pollData: pollData) + ForEach(viewModel.viewState.polls ?? []) { pollData in + Button(action: { + viewModel.send(viewAction: .showPollDetail(poll: pollData)) + }) { + PollListItem(pollData: pollData) + } } .frame(maxWidth: .infinity, alignment: .leading) + + loadMoreButton + .frame(maxWidth: .infinity, alignment: .leading) + } + .padding(.top, 32) + .padding(.horizontal, 16) + } + } + + @ViewBuilder + private var loadMoreButton: some View { + if viewModel.viewState.canLoadMoreContent { + HStack(spacing: 8) { + if viewModel.viewState.isLoading { + spinner + } Button { - #warning("handle action") + viewModel.send(viewAction: .loadMoreContent) } label: { - Text("Load more polls") + Text(VectorL10n.pollHistoryLoadMore) + .font(theme.fonts.body) } - .frame(maxWidth: .infinity, alignment: .leading) + .accessibilityIdentifier("PollHistory.loadMore") + .disabled(viewModel.viewState.isLoading) } - .padding(.top, 32) - .padding(.horizontal, 16) } } + private var spinner: some View { + ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + } + private var noPollsView: some View { - Text(viewModel.mode == .active ? VectorL10n.pollHistoryNoActivePollText : VectorL10n.pollHistoryNoPastPollText) - .font(theme.fonts.body) - .foregroundColor(theme.colors.secondaryContent) - .frame(maxHeight: .infinity) - .padding(.horizontal, 16) - .accessibilityLabel("PollHistory.emptyText") + VStack(spacing: 32) { + Text(viewModel.emptyPollsText) + .font(theme.fonts.body) + .multilineTextAlignment(.center) + .foregroundColor(theme.colors.secondaryContent) + .padding(.horizontal, 16) + .accessibilityIdentifier("PollHistory.emptyText") + + if viewModel.viewState.canLoadMoreContent { + loadMoreButton + } + } + .frame(maxHeight: .infinity) + } + + private var loadingView: some View { + HStack(spacing: 8) { + spinner + + Text(VectorL10n.pollHistoryLoadingText) + .font(theme.fonts.body) + .foregroundColor(theme.colors.secondaryContent) + .frame(maxHeight: .infinity) + .accessibilityIdentifier("PollHistory.loadingText") + } + .padding(.horizontal, 16) } } diff --git a/RiotSwiftUI/Modules/Room/PollHistory/View/PollListItem.swift b/RiotSwiftUI/Modules/Room/PollHistory/View/PollListItem.swift index 335d62c397..6ee1b0ddfb 100644 --- a/RiotSwiftUI/Modules/Room/PollHistory/View/PollListItem.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/View/PollListItem.swift @@ -16,26 +16,19 @@ import SwiftUI -struct PollListData { - let startDate: Date - let question: String - let numberOfVotes: UInt - let winningOption: TimelinePollAnswerOption? -} - struct PollListItem: View { @Environment(\.theme) private var theme - private let pollData: PollListData + private let pollData: TimelinePollDetails @ScaledMetric private var imageSize = 16 - init(pollData: PollListData) { + init(pollData: TimelinePollDetails) { self.pollData = pollData } var body: some View { VStack(alignment: .leading, spacing: 12) { - Text(pollData.formattedDate) + Text(DateFormatter.pollShortDateFormatter.string(from: pollData.startDate)) .foregroundColor(theme.colors.tertiaryContent) .font(theme.fonts.caption1) @@ -50,59 +43,24 @@ struct PollListItem: View { .lineLimit(2) .accessibilityLabel("PollListItem.title") } + .frame(maxWidth: .infinity, alignment: .leading) - if pollData.winningOption != nil { + if pollData.closed { VStack(alignment: .leading, spacing: 12) { - optionView(winningOption: pollData.winningOption!) + let winningOptions = pollData.answerOptions.filter(\.winner) + + ForEach(winningOptions) { + TimelinePollAnswerOptionButton(poll: pollData, answerOption: $0, action: nil) + } + resultView } } } } - private var clipShape: some Shape { - RoundedRectangle(cornerRadius: 4.0) - } - - private func optionView(winningOption: TimelinePollAnswerOption) -> some View { - VStack(alignment: .leading, spacing: 12.0) { - HStack(alignment: .top, spacing: 8.0) { - Text(pollData.winningOption!.text) - .font(theme.fonts.body) - .foregroundColor(theme.colors.primaryContent) - .accessibilityIdentifier("PollListData.winningOption") - - Spacer() - - votesText(winningOption: winningOption) - } - - ProgressView(value: Double(winningOption.count), - total: Double(pollData.numberOfVotes)) - .progressViewStyle(LinearProgressViewStyle()) - .scaleEffect(x: 1.0, y: 1.2, anchor: .center) - } - .frame(maxWidth: .infinity, alignment: .leading) - .padding(.horizontal, 8.0) - .padding(.top, 12.0) - .padding(.bottom, 12.0) - .clipShape(clipShape) - .overlay(clipShape.stroke(theme.colors.accent, lineWidth: 1.0)) - .accentColor(theme.colors.accent) - } - - private func votesText(winningOption: TimelinePollAnswerOption) -> some View { - Label { - Text(winningOption.count == 1 ? VectorL10n.pollTimelineOneVote : VectorL10n.pollTimelineVotesCount(Int(winningOption.count))) - .font(theme.fonts.footnote) - .foregroundColor(theme.colors.accent) - } icon: { - Image(uiImage: Asset.Images.pollWinnerIcon.image) - } - } - private var resultView: some View { - let text = pollData.numberOfVotes == 1 ? VectorL10n.pollTimelineTotalFinalResultsOneVote : VectorL10n.pollTimelineTotalFinalResults(Int(pollData.numberOfVotes)) + let text = pollData.totalAnswerCount == 1 ? VectorL10n.pollTimelineTotalFinalResultsOneVote : VectorL10n.pollTimelineTotalFinalResults(Int(pollData.totalAnswerCount)) return Text(text) .font(theme.fonts.footnote) @@ -110,14 +68,8 @@ struct PollListItem: View { } } -private extension PollListData { - var formattedDate: String { - DateFormatter.shortDateFormatter.string(from: startDate) - } -} - -private extension DateFormatter { - static let shortDateFormatter: DateFormatter = { +extension DateFormatter { + static let pollShortDateFormatter: DateFormatter = { let formatter = DateFormatter() formatter.timeStyle = .none formatter.dateStyle = .short @@ -131,22 +83,48 @@ private extension DateFormatter { struct PollListItem_Previews: PreviewProvider { static var previews: some View { Group { - let pollData1 = PollListData( - startDate: .init(), - question: "Do you like polls?", - numberOfVotes: 30, - winningOption: .init(id: "id", text: "Yes, of course!", count: 18, winner: true, selected: true) - ) - - PollListItem(pollData: pollData1) - - let pollData2 = PollListData( - startDate: .init(), - question: "Do you like polls?", - numberOfVotes: 30, - winningOption: nil) + let pollData1 = TimelinePollDetails(id: UUID().uuidString, + question: "Do you like polls?", + answerOptions: [.init(id: "id", text: "Yes, of course!", count: 18, winner: true, selected: true)], + closed: true, + startDate: .init(), + totalAnswerCount: 30, + type: .disclosed, + eventType: .started, + maxAllowedSelections: 1, + hasBeenEdited: false, + hasDecryptionError: false) + + let pollData2 = TimelinePollDetails(id: UUID().uuidString, + question: "Do you like polls?", + answerOptions: [.init(id: "id", text: "Yes, of course!", count: 18, winner: true, selected: true)], + closed: false, + startDate: .init(), + totalAnswerCount: 30, + type: .disclosed, + eventType: .started, + maxAllowedSelections: 1, + hasBeenEdited: false, + hasDecryptionError: false) - PollListItem(pollData: pollData2) + let pollData3 = TimelinePollDetails(id: UUID().uuidString, + question: "Do you like polls?", + answerOptions: [ + .init(id: "id1", text: "Yes, of course!", count: 15, winner: true, selected: true), + .init(id: "id2", text: "No, I don't :-(", count: 15, winner: true, selected: true) + ], + closed: true, + startDate: .init(), + totalAnswerCount: 30, + type: .disclosed, + eventType: .started, + maxAllowedSelections: 1, + hasBeenEdited: false, + hasDecryptionError: false) + + ForEach([pollData1, pollData2, pollData3]) { poll in + PollListItem(pollData: poll) + } } .padding() } diff --git a/RiotSwiftUI/Modules/Room/PollHistory/View/SegmentedPicker.swift b/RiotSwiftUI/Modules/Room/PollHistory/View/SegmentedPicker.swift index 520a649c7a..14b53d6446 100644 --- a/RiotSwiftUI/Modules/Room/PollHistory/View/SegmentedPicker.swift +++ b/RiotSwiftUI/Modules/Room/PollHistory/View/SegmentedPicker.swift @@ -39,7 +39,7 @@ struct SegmentedPicker: View { } label: { Text(segment.description) .font(isSelectedSegment ? theme.fonts.headline : theme.fonts.body) - .underline(isSelectedSegment) + .underlineBar(isSelectedSegment) } .accentColor(isSelectedSegment ? theme.colors.accent : theme.colors.primaryContent) .accessibilityLabel(segment.description) @@ -49,6 +49,23 @@ struct SegmentedPicker: View { } } +private extension Text { + @ViewBuilder + func underlineBar(_ isActive: Bool) -> some View { + if #available(iOS 15.0, *) { + overlay(alignment: .bottom) { + if isActive { + Rectangle() + .frame(height: 1) + .offset(y: 2) + } + } + } else { + underline(isActive) + } + } +} + struct SegmentedPicker_Previews: PreviewProvider { static var previews: some View { SegmentedPicker( diff --git a/RiotSwiftUI/Modules/Room/TimelinePoll/Coordinator/TimelinePollCoordinator.swift b/RiotSwiftUI/Modules/Room/TimelinePoll/Coordinator/TimelinePollCoordinator.swift index c3c1cf3270..3214fae658 100644 --- a/RiotSwiftUI/Modules/Room/TimelinePoll/Coordinator/TimelinePollCoordinator.swift +++ b/RiotSwiftUI/Modules/Room/TimelinePoll/Coordinator/TimelinePollCoordinator.swift @@ -33,7 +33,7 @@ final class TimelinePollCoordinator: Coordinator, Presentable, PollAggregatorDel private let selectedAnswerIdentifiersSubject = PassthroughSubject<[String], Never>() private var pollAggregator: PollAggregator - private var viewModel: TimelinePollViewModelProtocol! + private(set) var viewModel: TimelinePollViewModelProtocol! private var cancellables = Set() // MARK: Public @@ -86,6 +86,10 @@ final class TimelinePollCoordinator: Coordinator, Presentable, PollAggregatorDel func toPresentable() -> UIViewController { VectorHostingController(rootView: TimelinePollView(viewModel: viewModel.context)) } + + func toView() -> any View { + TimelinePollView(viewModel: viewModel.context) + } func canEndPoll() -> Bool { pollAggregator.poll.isClosed == false @@ -114,10 +118,17 @@ final class TimelinePollCoordinator: Coordinator, Presentable, PollAggregatorDel func pollAggregator(_ aggregator: PollAggregator, didFailWithError: Error) { } // MARK: - Private - - // PollProtocol is intentionally not available in the SwiftUI target as we don't want - // to add the SDK as a dependency to it. We need to translate from one to the other on this level. + func buildTimelinePollFrom(_ poll: PollProtocol) -> TimelinePollDetails { + let representedType: TimelinePollEventType = parameters.pollEvent.eventType == .pollStart ? .started : .ended + return .init(poll: poll, represent: representedType) + } +} + +// PollProtocol is intentionally not available in the SwiftUI target as we don't want +// to add the SDK as a dependency to it. We need to translate from one to the other on this level. +extension TimelinePollDetails { + init(poll: PollProtocol, represent eventType: TimelinePollEventType) { let answerOptions = poll.answerOptions.map { pollAnswerOption in TimelinePollAnswerOption(id: pollAnswerOption.id, text: pollAnswerOption.text, @@ -126,21 +137,27 @@ final class TimelinePollCoordinator: Coordinator, Presentable, PollAggregatorDel selected: pollAnswerOption.isCurrentUserSelection) } - return TimelinePollDetails(question: poll.text, - answerOptions: answerOptions, - closed: poll.isClosed, - totalAnswerCount: poll.totalAnswerCount, - type: pollKindToTimelinePollType(poll.kind), - eventType: parameters.pollEvent.eventType == .pollStart ? .started : .ended, - maxAllowedSelections: poll.maxAllowedSelections, - hasBeenEdited: poll.hasBeenEdited, - hasDecryptionError: poll.hasDecryptionError) + self.init(id: poll.id, + question: poll.text, + answerOptions: answerOptions, + closed: poll.isClosed, + startDate: poll.startDate, + totalAnswerCount: poll.totalAnswerCount, + type: poll.kind.timelinePollType, + eventType: eventType, + maxAllowedSelections: poll.maxAllowedSelections, + hasBeenEdited: poll.hasBeenEdited, + hasDecryptionError: poll.hasDecryptionError) } - - private func pollKindToTimelinePollType(_ kind: PollKind) -> TimelinePollType { - let mapping = [PollKind.disclosed: TimelinePollType.disclosed, - PollKind.undisclosed: TimelinePollType.undisclosed] - - return mapping[kind] ?? .disclosed +} + +private extension PollKind { + var timelinePollType: TimelinePollType { + switch self { + case .disclosed: + return .disclosed + case .undisclosed: + return .undisclosed + } } } diff --git a/RiotSwiftUI/Modules/Room/TimelinePoll/Test/Unit/TimelinePollViewModelTests.swift b/RiotSwiftUI/Modules/Room/TimelinePoll/Test/Unit/TimelinePollViewModelTests.swift index cd806da546..a36a7d0925 100644 --- a/RiotSwiftUI/Modules/Room/TimelinePoll/Test/Unit/TimelinePollViewModelTests.swift +++ b/RiotSwiftUI/Modules/Room/TimelinePoll/Test/Unit/TimelinePollViewModelTests.swift @@ -29,9 +29,11 @@ class TimelinePollViewModelTests: XCTestCase { TimelinePollAnswerOption(id: "2", text: "2", count: 1, winner: false, selected: false), TimelinePollAnswerOption(id: "3", text: "3", count: 1, winner: false, selected: false)] - let timelinePoll = TimelinePollDetails(question: "Question", + let timelinePoll = TimelinePollDetails(id: "poll-id", + question: "Question", answerOptions: answerOptions, closed: false, + startDate: .init(), totalAnswerCount: 3, type: .disclosed, eventType: .started, diff --git a/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollModels.swift b/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollModels.swift index 3629aae3ed..0ee87c55f9 100644 --- a/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollModels.swift +++ b/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollModels.swift @@ -62,37 +62,20 @@ extension MutableCollection where Element == TimelinePollAnswerOption { } struct TimelinePollDetails { + var id: String var question: String var answerOptions: [TimelinePollAnswerOption] var closed: Bool + var startDate: Date var totalAnswerCount: UInt var type: TimelinePollType var eventType: TimelinePollEventType var maxAllowedSelections: UInt - var hasBeenEdited = true + var hasBeenEdited: Bool var hasDecryptionError: Bool - init(question: String, answerOptions: [TimelinePollAnswerOption], - closed: Bool, - totalAnswerCount: UInt, - type: TimelinePollType, - eventType: TimelinePollEventType, - maxAllowedSelections: UInt, - hasBeenEdited: Bool, - hasDecryptionError: Bool) { - self.question = question - self.answerOptions = answerOptions - self.closed = closed - self.totalAnswerCount = totalAnswerCount - self.type = type - self.eventType = eventType - self.maxAllowedSelections = maxAllowedSelections - self.hasBeenEdited = hasBeenEdited - self.hasDecryptionError = hasDecryptionError - } - var hasCurrentUserVoted: Bool { - answerOptions.filter { $0.selected == true }.count > 0 + answerOptions.contains(where: \.selected) } var shouldDiscloseResults: Bool { @@ -108,6 +91,8 @@ struct TimelinePollDetails { } } +extension TimelinePollDetails: Identifiable { } + struct TimelinePollViewState: BindableState { var poll: TimelinePollDetails var bindings: TimelinePollViewStateBindings diff --git a/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollScreenState.swift b/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollScreenState.swift index a53a745b80..8c70b21e3e 100644 --- a/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollScreenState.swift +++ b/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollScreenState.swift @@ -33,9 +33,11 @@ enum MockTimelinePollScreenState: MockScreenState, CaseIterable { TimelinePollAnswerOption(id: "2", text: "Second", count: 5, winner: false, selected: true), TimelinePollAnswerOption(id: "3", text: "Third", count: 15, winner: true, selected: false)] - let poll = TimelinePollDetails(question: "Question", + let poll = TimelinePollDetails(id: "id", + question: "Question", answerOptions: answerOptions, closed: self == .closedDisclosed || self == .closedUndisclosed ? true : false, + startDate: .init(), totalAnswerCount: 20, type: self == .closedDisclosed || self == .openDisclosed ? .disclosed : .undisclosed, eventType: self == .closedPollEnded ? .ended : .started, diff --git a/RiotSwiftUI/Modules/Room/TimelinePoll/View/TimelinePollAnswerOptionButton.swift b/RiotSwiftUI/Modules/Room/TimelinePoll/View/TimelinePollAnswerOptionButton.swift index 85309c31c9..1488911bd6 100644 --- a/RiotSwiftUI/Modules/Room/TimelinePoll/View/TimelinePollAnswerOptionButton.swift +++ b/RiotSwiftUI/Modules/Room/TimelinePoll/View/TimelinePollAnswerOptionButton.swift @@ -25,23 +25,26 @@ struct TimelinePollAnswerOptionButton: View { let poll: TimelinePollDetails let answerOption: TimelinePollAnswerOption - let action: () -> Void + let action: (() -> Void)? // MARK: Public var body: some View { - Button(action: action) { + Button { + action?() + } label: { let rect = RoundedRectangle(cornerRadius: 4.0) answerOptionLabel .frame(maxWidth: .infinity, alignment: .leading) .padding(.horizontal, 8.0) .padding(.top, 12.0) - .padding(.bottom, 12.0) + .padding(.bottom, 8.0) .clipShape(rect) .overlay(rect.stroke(borderAccentColor, lineWidth: 1.0)) .accentColor(progressViewAccentColor) } .accessibilityIdentifier("PollAnswerOption\(optionIndex)") + .disabled(action == nil) } var answerOptionLabel: some View { @@ -55,20 +58,12 @@ struct TimelinePollAnswerOptionButton: View { .font(theme.fonts.body) .foregroundColor(theme.colors.primaryContent) .accessibilityIdentifier("PollAnswerOption\(optionIndex)Label") + .frame(maxWidth: .infinity, alignment: .leading) - if poll.closed, answerOption.winner { - Spacer() - Image(uiImage: Asset.Images.pollWinnerIcon.image) - } - } - - if poll.type == .disclosed || poll.closed { - HStack { - ProgressView(value: Double(poll.shouldDiscloseResults ? answerOption.count : 0), - total: Double(poll.totalAnswerCount)) - .progressViewStyle(LinearProgressViewStyle()) - .scaleEffect(x: 1.0, y: 1.2, anchor: .center) - .accessibilityIdentifier("PollAnswerOption\(optionIndex)Progress") + HStack(spacing: 6) { + if poll.closed, answerOption.winner { + Image(uiImage: Asset.Images.pollWinnerIcon.image) + } if poll.shouldDiscloseResults { Text(answerOption.count == 1 ? VectorL10n.pollTimelineOneVote : VectorL10n.pollTimelineVotesCount(Int(answerOption.count))) @@ -78,6 +73,13 @@ struct TimelinePollAnswerOptionButton: View { } } } + + if poll.type == .disclosed || poll.closed { + ProgressView(value: Double(poll.shouldDiscloseResults ? answerOption.count : 0), total: Double(poll.totalAnswerCount)) + .progressViewStyle(LinearProgressViewStyle.linear) + .scaleEffect(x: 1.0, y: 1.2, anchor: .center) + .accessibilityIdentifier("PollAnswerOption\(optionIndex)Progress") + } } } @@ -143,12 +145,15 @@ struct TimelinePollAnswerOptionButton_Previews: PreviewProvider { } } } + .padding() } static func buildPoll(closed: Bool, type: TimelinePollType) -> TimelinePollDetails { - TimelinePollDetails(question: "", + TimelinePollDetails(id: UUID().uuidString, + question: "", answerOptions: [], closed: closed, + startDate: .init(), totalAnswerCount: 100, type: type, eventType: .started, diff --git a/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/MatrixSDK/VoiceBroadcastPlaybackViewModel.swift b/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/MatrixSDK/VoiceBroadcastPlaybackViewModel.swift index ffe713e735..35933ffced 100644 --- a/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/MatrixSDK/VoiceBroadcastPlaybackViewModel.swift +++ b/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/MatrixSDK/VoiceBroadcastPlaybackViewModel.swift @@ -44,8 +44,17 @@ class VoiceBroadcastPlaybackViewModel: VoiceBroadcastPlaybackViewModelType, Voic private var reloadVoiceBroadcastChunkQueue: Bool = false private var seekToChunkTime: TimeInterval? + /// The last chunk we tried to load + private var lastChunkProcessed: UInt = 0 + /// The last chunk correctly loaded and added to the player's queue private var lastChunkAddedToPlayer: UInt = 0 + private var hasAttachmentErrors: Bool = false { + didSet { + updateErrorState() + } + } + private var isPlayingLastChunk: Bool { // We can't play the last chunk if the brodcast is not stopped guard state.broadcastState == .stopped else { @@ -60,18 +69,19 @@ class VoiceBroadcastPlaybackViewModel: VoiceBroadcastPlaybackViewModelType, Voic return state.bindings.progress + 1000 >= state.playingState.duration - Float(chunkDuration) } - private var playingChunk: VoiceBroadcastChunk? { + /// Current chunk loaded in the audio player + private var currentChunk: VoiceBroadcastChunk? { guard let currentAudioPlayerUrl = audioPlayer?.currentUrl, - let playingEventId = voiceBroadcastAttachmentCacheManagerLoadResults.first(where: { result in + let currentEventId = voiceBroadcastAttachmentCacheManagerLoadResults.first(where: { result in result.url == currentAudioPlayerUrl })?.eventIdentifier else { return nil } - let playingChunk = voiceBroadcastAggregator.voiceBroadcast.chunks.first(where: { chunk in - chunk.attachment.eventId == playingEventId + let currentChunk = voiceBroadcastAggregator.voiceBroadcast.chunks.first(where: { chunk in + chunk.attachment.eventId == currentEventId }) - return playingChunk + return currentChunk } private var isLivePlayback: Bool { @@ -111,7 +121,9 @@ class VoiceBroadcastPlaybackViewModel: VoiceBroadcastPlaybackViewModelType, Voic broadcastState: voiceBroadcastAggregator.voiceBroadcastState, playbackState: .stopped, playingState: VoiceBroadcastPlayingState(duration: Float(voiceBroadcastAggregator.voiceBroadcast.duration), isLive: false, canMoveForward: false, canMoveBackward: false), - bindings: VoiceBroadcastPlaybackViewStateBindings(progress: 0)) + bindings: VoiceBroadcastPlaybackViewStateBindings(progress: 0), + decryptionState: VoiceBroadcastPlaybackDecryptionState(errorCount: 0), + showPlaybackError: false) super.init(initialViewState: viewState) displayLink = CADisplayLink(target: WeakTarget(self, selector: #selector(handleDisplayLinkTick)), selector: WeakTarget.triggerSelector) @@ -197,8 +209,8 @@ class VoiceBroadcastPlaybackViewModel: VoiceBroadcastPlaybackViewModelType, Voic // If we known the last chunk sequence, use it to check if we need to stop // Note: it's possible to be in .stopped state and to still have a last chunk sequence at 0 (old versions or a crash during recording). In this case, we use isPlayingLastChunk as a fallback solution if voiceBroadcastAggregator.voiceBroadcastLastChunkSequence > 0 { - // we should stop only if we have already added the last chunk to the player - shouldStop = (lastChunkAddedToPlayer == voiceBroadcastAggregator.voiceBroadcastLastChunkSequence) + // we should stop only if we have already processed the last chunk + shouldStop = (lastChunkProcessed == voiceBroadcastAggregator.voiceBroadcastLastChunkSequence) } else { shouldStop = isPlayingLastChunk } @@ -235,10 +247,12 @@ class VoiceBroadcastPlaybackViewModel: VoiceBroadcastPlaybackViewModelType, Voic private func seek(to seekTime: Float) { // Flush the chunks queue and the current audio player playlist + lastChunkProcessed = 0 lastChunkAddedToPlayer = 0 voiceBroadcastChunkQueue = [] reloadVoiceBroadcastChunkQueue = isProcessingVoiceBroadcastChunk audioPlayer?.removeAllPlayerItems() + hasAttachmentErrors = false let chunks = reorderVoiceBroadcastChunks(chunks: Array(voiceBroadcastAggregator.voiceBroadcast.chunks)) @@ -325,6 +339,8 @@ class VoiceBroadcastPlaybackViewModel: VoiceBroadcastPlaybackViewModelType, Voic return } + self.lastChunkProcessed = chunk.sequence + switch result { case .success(let result): guard result.eventIdentifier == chunk.attachment.eventId else { @@ -368,19 +384,46 @@ class VoiceBroadcastPlaybackViewModel: VoiceBroadcastPlaybackViewModelType, Voic audioPlayer.seekToTime(time) self.seekToChunkTime = nil } - + + self.hasAttachmentErrors = false + self.processNextVoiceBroadcastChunk() + case .failure (let error): - MXLog.error("[VoiceBroadcastPlaybackViewModel] processVoiceBroadcastChunkQueue: loadAttachment error", context: error) - if self.voiceBroadcastChunkQueue.count == 0 { - // No more chunk to try. Go to error - self.state.playbackState = .error + MXLog.error("[VoiceBroadcastPlaybackViewModel] processVoiceBroadcastChunkQueue: loadAttachment error", context: ["error": error, "chunk": chunk.sequence]) + self.hasAttachmentErrors = true + // If nothing has been added to the player's queue, exit the buffer state + if self.lastChunkAddedToPlayer == 0 { + self.pause() } } - - self.processNextVoiceBroadcastChunk() } } + private func resetErrorState() { + state.showPlaybackError = false + } + + private func updateErrorState() { + // Show an error if the playback state is .error + var showPlaybackError = state.playbackState == .error + + // Or if there is an attachment error + if hasAttachmentErrors { + // only if the audio player is not playing and has nothing left to play + let audioPlayerIsPlaying = audioPlayer?.isPlaying ?? false + let currentPlayerTime = audioPlayer?.currentTime ?? 0 + let currentPlayerDuration = audioPlayer?.duration ?? 0 + let currentChunkSequence = currentChunk?.sequence ?? 0 + let hasNoMoreChunkToPlay = (currentChunk == nil && lastChunkAddedToPlayer == 0) || (currentChunkSequence == lastChunkAddedToPlayer) + if !audioPlayerIsPlaying && hasNoMoreChunkToPlay && (currentPlayerDuration - currentPlayerTime < 0.2) { + showPlaybackError = true + } + } + + state.showPlaybackError = showPlaybackError + + } + private func updateDuration() { let duration = voiceBroadcastAggregator.voiceBroadcast.duration state.playingState.duration = Float(duration) @@ -403,10 +446,11 @@ class VoiceBroadcastPlaybackViewModel: VoiceBroadcastPlaybackViewModelType, Voic } else { seek(to: state.bindings.progress) } + resetErrorState() } @objc private func handleDisplayLinkTick() { - guard let playingSequence = self.playingChunk?.sequence else { + guard let playingSequence = self.currentChunk?.sequence else { return } @@ -437,7 +481,7 @@ class VoiceBroadcastPlaybackViewModel: VoiceBroadcastPlaybackViewModelType, Voic state.playingState.remainingTimeLabel = label state.playingState.canMoveBackward = state.bindings.progress > 0 - state.playingState.canMoveForward = state.bindings.progress < state.playingState.duration + state.playingState.canMoveForward = (state.playingState.duration - state.bindings.progress) > 500 } private func handleVoiceBroadcastChunksProcessing() { @@ -486,12 +530,24 @@ extension VoiceBroadcastPlaybackViewModel: VoiceBroadcastAggregatorDelegate { handleVoiceBroadcastChunksProcessing() } } + + func voiceBroadcastAggregator(_ aggregator: VoiceBroadcastAggregator, didUpdateUndecryptableEventList events: Set) { + state.decryptionState.errorCount = events.count + if events.count > 0 { + MXLog.debug("[VoiceBroadcastPlaybackViewModel] voice broadcast decryption error count: \(events.count)/\(aggregator.voiceBroadcast.chunks.count)") + + if [.playing, .buffering].contains(state.playbackState) { + pause() + } + } + } } // MARK: - VoiceMessageAudioPlayerDelegate extension VoiceBroadcastPlaybackViewModel: VoiceMessageAudioPlayerDelegate { func audioPlayerDidFinishLoading(_ audioPlayer: VoiceMessageAudioPlayer) { + updateErrorState() } func audioPlayerDidStartPlaying(_ audioPlayer: VoiceMessageAudioPlayer) { @@ -499,6 +555,7 @@ extension VoiceBroadcastPlaybackViewModel: VoiceMessageAudioPlayerDelegate { state.playingState.isLive = isLivePlayback isPlaybackInitialized = true displayLink.isPaused = false + resetErrorState() } func audioPlayerDidPausePlaying(_ audioPlayer: VoiceMessageAudioPlayer) { @@ -510,6 +567,9 @@ extension VoiceBroadcastPlaybackViewModel: VoiceMessageAudioPlayerDelegate { func audioPlayerDidStopPlaying(_ audioPlayer: VoiceMessageAudioPlayer) { MXLog.debug("[VoiceBroadcastPlaybackViewModel] audioPlayerDidStopPlaying") state.playbackState = .stopped + + updateErrorState() + state.playingState.isLive = false audioPlayer.deregisterDelegate(self) self.mediaServiceProvider.deregisterNowPlayingInfoDelegate(forPlayer: audioPlayer) @@ -519,11 +579,16 @@ extension VoiceBroadcastPlaybackViewModel: VoiceMessageAudioPlayerDelegate { func audioPlayer(_ audioPlayer: VoiceMessageAudioPlayer, didFailWithError error: Error) { state.playbackState = .error + updateErrorState() } func audioPlayerDidFinishPlaying(_ audioPlayer: VoiceMessageAudioPlayer) { MXLog.debug("[VoiceBroadcastPlaybackViewModel] audioPlayerDidFinishPlaying: \(audioPlayer.playerItems.count)") - stopIfVoiceBroadcastOver() + if hasAttachmentErrors { + stop() + } else { + stopIfVoiceBroadcastOver() + } } } diff --git a/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/View/VoiceBroadcastPlaybackDecryptionErrorView.swift b/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/View/VoiceBroadcastPlaybackDecryptionErrorView.swift new file mode 100644 index 0000000000..598bde5c3f --- /dev/null +++ b/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/View/VoiceBroadcastPlaybackDecryptionErrorView.swift @@ -0,0 +1,47 @@ +// +// Copyright 2023 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import SwiftUI + +struct VoiceBroadcastPlaybackDecryptionErrorView: View { + // MARK: - Properties + + // MARK: Private + + @Environment(\.theme) private var theme: ThemeSwiftUI + + // MARK: Public + + var body: some View { + ZStack { + HStack(spacing: 0) { + Image(uiImage: Asset.Images.errorIcon.image) + .frame(width: 40, height: 40) + Text(VectorL10n.voiceBroadcastPlaybackUnableToDecrypt) + .multilineTextAlignment(.center) + .font(theme.fonts.caption1) + .foregroundColor(theme.colors.alert) + } + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } +} + +struct VoiceBroadcastPlaybackDecryptionErrorView_Previews: PreviewProvider { + static var previews: some View { + VoiceBroadcastPlaybackDecryptionErrorView() + } +} diff --git a/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/View/VoiceBroadcastPlaybackView.swift b/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/View/VoiceBroadcastPlaybackView.swift index 09ed1ff443..b4bcaa7aa6 100644 --- a/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/View/VoiceBroadcastPlaybackView.swift +++ b/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/View/VoiceBroadcastPlaybackView.swift @@ -91,7 +91,7 @@ struct VoiceBroadcastPlaybackView: View { } } }.frame(maxWidth: .infinity, alignment: .leading) - + if viewModel.viewState.broadcastState != .stopped { Label { Text(VectorL10n.voiceBroadcastLive) @@ -109,7 +109,12 @@ struct VoiceBroadcastPlaybackView: View { .frame(maxWidth: .infinity, alignment: .leading) .padding(EdgeInsets(top: 0.0, leading: 0.0, bottom: 4.0, trailing: 0.0)) - if viewModel.viewState.playbackState == .error { + if viewModel.viewState.decryptionState.errorCount > 0 { + VoiceBroadcastPlaybackDecryptionErrorView() + .fixedSize(horizontal: false, vertical: true) + .accessibilityIdentifier("decryptionErrorView") + } + else if viewModel.viewState.showPlaybackError { VoiceBroadcastPlaybackErrorView() } else { HStack (spacing: 34.0) { @@ -156,8 +161,8 @@ struct VoiceBroadcastPlaybackView: View { } VoiceBroadcastSlider(value: $viewModel.progress, - minValue: 0.0, - maxValue: viewModel.viewState.playingState.duration) { didChange in + minValue: 0.0, + maxValue: viewModel.viewState.playingState.duration) { didChange in viewModel.send(viewAction: .sliderChange(didChange: didChange)) } diff --git a/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/VoiceBroadcastPlaybackModels.swift b/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/VoiceBroadcastPlaybackModels.swift index 488b65c1d6..7a810a1673 100644 --- a/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/VoiceBroadcastPlaybackModels.swift +++ b/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/VoiceBroadcastPlaybackModels.swift @@ -48,12 +48,18 @@ struct VoiceBroadcastPlayingState { var canMoveBackward: Bool } +struct VoiceBroadcastPlaybackDecryptionState { + var errorCount: Int +} + struct VoiceBroadcastPlaybackViewState: BindableState { var details: VoiceBroadcastPlaybackDetails var broadcastState: VoiceBroadcastInfoState var playbackState: VoiceBroadcastPlaybackState var playingState: VoiceBroadcastPlayingState var bindings: VoiceBroadcastPlaybackViewStateBindings + var decryptionState: VoiceBroadcastPlaybackDecryptionState + var showPlaybackError: Bool } struct VoiceBroadcastPlaybackViewStateBindings { diff --git a/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/VoiceBroadcastPlaybackScreenState.swift b/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/VoiceBroadcastPlaybackScreenState.swift index 306a5be8c4..59b434ca96 100644 --- a/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/VoiceBroadcastPlaybackScreenState.swift +++ b/RiotSwiftUI/Modules/Room/VoiceBroadcastPlayback/VoiceBroadcastPlaybackScreenState.swift @@ -43,11 +43,12 @@ enum MockVoiceBroadcastPlaybackScreenState: MockScreenState, CaseIterable { var screenView: ([Any], AnyView) { let details = VoiceBroadcastPlaybackDetails(senderDisplayName: "Alice", avatarData: AvatarInput(mxContentUri: "", matrixItemId: "!fakeroomid:matrix.org", displayName: "The name of the room")) - let viewModel = MockVoiceBroadcastPlaybackViewModel(initialViewState: VoiceBroadcastPlaybackViewState(details: details, broadcastState: .started, playbackState: .stopped, playingState: VoiceBroadcastPlayingState(duration: 10.0, isLive: true, canMoveForward: false, canMoveBackward: false), bindings: VoiceBroadcastPlaybackViewStateBindings(progress: 0))) + let viewModel = MockVoiceBroadcastPlaybackViewModel(initialViewState: VoiceBroadcastPlaybackViewState(details: details, broadcastState: .started, playbackState: .stopped, playingState: VoiceBroadcastPlayingState(duration: 10.0, isLive: true, canMoveForward: false, canMoveBackward: false), bindings: VoiceBroadcastPlaybackViewStateBindings(progress: 0), decryptionState: VoiceBroadcastPlaybackDecryptionState(errorCount: 0), showPlaybackError: false)) return ( [false, viewModel], - AnyView(VoiceBroadcastPlaybackView(viewModel: viewModel.context)) + AnyView(VoiceBroadcastPlaybackView(viewModel: viewModel.context) + .environmentObject(AvatarViewModel.withMockedServices())) ) } } diff --git a/RiotSwiftUI/Modules/Settings/Notifications/Model/MatrixSDK/MXNotificationPushRule.swift b/RiotSwiftUI/Modules/Settings/Notifications/Model/MatrixSDK/MXNotificationPushRule.swift index 2c4d16d8b4..337ed45168 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/Model/MatrixSDK/MXNotificationPushRule.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/Model/MatrixSDK/MXNotificationPushRule.swift @@ -41,6 +41,10 @@ extension MXPushRule: NotificationPushRuleType { return false } + var ruleActions: NotificationActions? { + .init(notify: notify, highlight: highlight, sound: sound) + } + private func getAction(actionType: MXPushRuleActionType, tweakType: String? = nil) -> MXPushRuleAction? { guard let actions = actions as? [MXPushRuleAction] else { return nil diff --git a/RiotSwiftUI/Modules/Settings/Notifications/Model/Mock/MockNotificationPushRule.swift b/RiotSwiftUI/Modules/Settings/Notifications/Model/Mock/MockNotificationPushRule.swift index 49166c99e7..64aff03887 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/Model/Mock/MockNotificationPushRule.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/Model/Mock/MockNotificationPushRule.swift @@ -16,10 +16,12 @@ import Foundation -struct MockNotificationPushRule: NotificationPushRuleType { +struct MockNotificationPushRule: NotificationPushRuleType, Equatable { var ruleId: String! var enabled: Bool + var ruleActions: NotificationActions? = NotificationStandardActions.notifyDefaultSound.actions + func matches(standardActions: NotificationStandardActions?) -> Bool { - false + standardActions?.actions == ruleActions } } diff --git a/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationActions.swift b/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationActions.swift index 88b11b3bec..98fa347645 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationActions.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationActions.swift @@ -17,7 +17,7 @@ import Foundation /// The actions defined on a push rule, used in the static push rule definitions. -struct NotificationActions { +struct NotificationActions: Equatable { let notify: Bool let highlight: Bool let sound: String? diff --git a/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleDefinitions.swift b/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleDefinitions.swift index 77c6e1ef2b..c30b81fecf 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleDefinitions.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleDefinitions.swift @@ -22,7 +22,7 @@ extension NotificationPushRuleId { /// It is defined similarly across Web and Android. /// - Parameter index: The notification index for which to get the actions for. /// - Returns: The associated `NotificationStandardActions`. - func standardActions(for index: NotificationIndex) -> NotificationStandardActions? { + func standardActions(for index: NotificationIndex) -> NotificationStandardActions { switch self { case .containDisplayName: switch index { @@ -42,7 +42,7 @@ extension NotificationPushRuleId { case .silent: return .notify case .noisy: return .highlight } - case .oneToOneRoom: + case .oneToOneRoom, .oneToOnePollStart, .msc3930oneToOnePollStart, .oneToOnePollEnd, .msc3930oneToOnePollEnd: switch index { case .off: return .dontNotify case .silent: return .notify @@ -54,7 +54,7 @@ extension NotificationPushRuleId { case .silent: return .notify case .noisy: return .notifyDefaultSound } - case .allOtherMessages: + case .allOtherMessages, .pollStart, .msc3930pollStart, .pollEnd, .msc3930pollEnd: switch index { case .off: return .dontNotify case .silent: return .notify diff --git a/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleIds.swift b/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleIds.swift index d74968c8bb..46cca080e7 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleIds.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleIds.swift @@ -30,6 +30,18 @@ enum NotificationPushRuleId: String { case allOtherMessages = ".m.rule.message" case encrypted = ".m.rule.encrypted" case keywords = "_keywords" + // poll started event + case pollStart = ".m.rule.poll_start" + case msc3930pollStart = ".org.matrix.msc3930.rule.poll_start" + // poll started event (one to one) + case oneToOnePollStart = ".m.rule.poll_start_one_to_one" + case msc3930oneToOnePollStart = ".org.matrix.msc3930.rule.poll_start_one_to_one" + // poll ended event + case pollEnd = ".m.rule.poll_end" + case msc3930pollEnd = ".org.matrix.msc3930.rule.poll_end" + // poll ended event (one to one) + case oneToOnePollEnd = ".m.rule.poll_end_one_to_one" + case msc3930oneToOnePollEnd = ".org.matrix.msc3930.rule.poll_end_one_to_one" } extension NotificationPushRuleId: Identifiable { @@ -65,6 +77,20 @@ extension NotificationPushRuleId { return VectorL10n.settingsEncryptedGroupMessages case .keywords: return VectorL10n.settingsMessagesContainingKeywords + case .pollStart, .msc3930pollStart, .oneToOnePollStart, .msc3930oneToOnePollStart, .pollEnd, .msc3930pollEnd, .oneToOnePollEnd, .msc3930oneToOnePollEnd: + // They don't need to be rendered on the UI + return "" + } + } + + var syncedRules: [NotificationPushRuleId] { + switch self { + case .oneToOneRoom: + return [.oneToOnePollStart, .msc3930oneToOnePollStart, .oneToOnePollEnd, .msc3930oneToOnePollEnd] + case .allOtherMessages: + return [.pollStart, .msc3930pollStart, .pollEnd, .msc3930pollEnd] + default: + return [] } } } diff --git a/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleType.swift b/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleType.swift index 1f98242c70..14ed88e69a 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleType.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/Model/NotificationPushRuleType.swift @@ -19,5 +19,13 @@ import Foundation protocol NotificationPushRuleType { var ruleId: String! { get } var enabled: Bool { get } + var ruleActions: NotificationActions? { get } + func matches(standardActions: NotificationStandardActions?) -> Bool } + +extension NotificationPushRuleType { + var pushRuleId: NotificationPushRuleId? { + ruleId.flatMap(NotificationPushRuleId.init(rawValue:)) + } +} diff --git a/RiotSwiftUI/Modules/Settings/Notifications/Service/MatrixSDK/MXNotificationSettingsService.swift b/RiotSwiftUI/Modules/Settings/Notifications/Service/MatrixSDK/MXNotificationSettingsService.swift index 375b50ab94..9bf01ef4c0 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/Service/MatrixSDK/MXNotificationSettingsService.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/Service/MatrixSDK/MXNotificationSettingsService.swift @@ -44,7 +44,9 @@ class MXNotificationSettingsService: NotificationSettingsServiceType { // Observe future updates to content rules rulesUpdated - .compactMap { _ in self.session.notificationCenter.rules.global.content as? [MXPushRule] } + .compactMap { [weak self] _ in + self?.session.notificationCenter.rules.global.content as? [MXPushRule] + } .assign(to: &$contentRules) // Set initial value of rules @@ -53,14 +55,15 @@ class MXNotificationSettingsService: NotificationSettingsServiceType { } // Observe future updates to rules rulesUpdated - .compactMap { _ in self.session.notificationCenter.flatRules as? [MXPushRule] } + .compactMap { [weak self] _ in + self?.session.notificationCenter.flatRules as? [MXPushRule] + } .assign(to: &$rules) } func add(keyword: String, enabled: Bool) { let index = NotificationIndex.index(when: enabled) - guard let actions = NotificationPushRuleId.keywords.standardActions(for: index)?.actions - else { + guard let actions = NotificationPushRuleId.keywords.standardActions(for: index).actions else { return } session.notificationCenter.addContentRuleWithRuleId(matchingPattern: keyword, notify: actions.notify, sound: actions.sound, highlight: actions.highlight) @@ -71,16 +74,52 @@ class MXNotificationSettingsService: NotificationSettingsServiceType { session.notificationCenter.removeRule(rule) } - func updatePushRuleActions(for ruleId: String, enabled: Bool, actions: NotificationActions?) { - guard let rule = session.notificationCenter.rule(byId: ruleId) else { return } - session.notificationCenter.enableRule(rule, isEnabled: enabled) + func updatePushRuleActions(for ruleId: String, + enabled: Bool, + actions: NotificationActions?) async throws { - if let actions = actions { - session.notificationCenter.updatePushRuleActions(ruleId, - kind: rule.kind, - notify: actions.notify, - soundName: actions.sound, - highlight: actions.highlight) + guard let rule = session.notificationCenter.rule(byId: ruleId) else { + return + } + + guard let actions = actions else { + try await session.notificationCenter.enableRule(pushRule: rule, isEnabled: enabled) + return + } + + // Updating the actions before enabling the rule allows the homeserver to triggers just one sync update + try await session.notificationCenter.updatePushRuleActions(ruleId, + kind: rule.kind, + notify: actions.notify, + soundName: actions.sound, + highlight: actions.highlight) + + try await session.notificationCenter.enableRule(pushRule: rule, isEnabled: enabled) + } +} + +private extension MXNotificationCenter { + func enableRule(pushRule: MXPushRule, isEnabled: Bool) async throws { + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation) in + enableRule(pushRule, isEnabled: isEnabled) { error in + if let error = error { + continuation.resume(with: .failure(error)) + } else { + continuation.resume() + } + } + } + } + + func updatePushRuleActions(ruleId: String, kind: __MXPushRuleKind, notify: Bool, soundName: String, highlight: Bool) async throws { + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation) in + updatePushRuleActions(ruleId, kind: kind, notify: notify, soundName: soundName, highlight: highlight) { error in + if let error = error { + continuation.resume(with: .failure(error)) + } else { + continuation.resume() + } + } } } } diff --git a/RiotSwiftUI/Modules/Settings/Notifications/Service/Mock/MockNotificationSettingsService.swift b/RiotSwiftUI/Modules/Settings/Notifications/Service/Mock/MockNotificationSettingsService.swift index 44a553f6cb..0bff31370c 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/Service/Mock/MockNotificationSettingsService.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/Service/Mock/MockNotificationSettingsService.swift @@ -44,5 +44,11 @@ class MockNotificationSettingsService: NotificationSettingsServiceType, Observab keywords.remove(keyword) } - func updatePushRuleActions(for ruleId: String, enabled: Bool, actions: NotificationActions?) { } + func updatePushRuleActions(for ruleId: String, enabled: Bool, actions: NotificationActions?) async throws { + guard let ruleIndex = rules.firstIndex(where: { $0.ruleId == ruleId }) else { + return + } + + rules[ruleIndex] = MockNotificationPushRule(ruleId: ruleId, enabled: enabled, ruleActions: actions) + } } diff --git a/RiotSwiftUI/Modules/Settings/Notifications/Service/NotificationSettingsServiceType.swift b/RiotSwiftUI/Modules/Settings/Notifications/Service/NotificationSettingsServiceType.swift index a5a1671e33..5b06dfb6de 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/Service/NotificationSettingsServiceType.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/Service/NotificationSettingsServiceType.swift @@ -40,5 +40,5 @@ protocol NotificationSettingsServiceType { /// - ruleId: The id of the rule. /// - enabled: Whether the rule should be enabled or disabled. /// - actions: The actions to update with. - func updatePushRuleActions(for ruleId: String, enabled: Bool, actions: NotificationActions?) + func updatePushRuleActions(for ruleId: String, enabled: Bool, actions: NotificationActions?) async throws } diff --git a/RiotSwiftUI/Modules/Settings/Notifications/Test/Unit/NotificationSettingsViewModelTests.swift b/RiotSwiftUI/Modules/Settings/Notifications/Test/Unit/NotificationSettingsViewModelTests.swift new file mode 100644 index 0000000000..95b5e08fad --- /dev/null +++ b/RiotSwiftUI/Modules/Settings/Notifications/Test/Unit/NotificationSettingsViewModelTests.swift @@ -0,0 +1,140 @@ +// +// Copyright 2023 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +@testable import RiotSwiftUI +import XCTest + +final class NotificationSettingsViewModelTests: XCTestCase { + private var viewModel: NotificationSettingsViewModel! + private var notificationService: MockNotificationSettingsService! + + override func setUpWithError() throws { + notificationService = .init() + } + + func testAllTheRulesAreChecked() throws { + viewModel = .init(notificationSettingsService: notificationService, ruleIds: .default) + + XCTAssertEqual(viewModel.viewState.selectionState.count, 4) + XCTAssertTrue(viewModel.viewState.selectionState.values.allSatisfy { $0 }) + } + + func testUpdateRule() async { + viewModel = .init(notificationSettingsService: notificationService, ruleIds: .default) + notificationService.rules = [MockNotificationPushRule].default + + await viewModel.update(ruleID: .encrypted, isChecked: false) + XCTAssertEqual(viewModel.viewState.selectionState.count, 4) + XCTAssertEqual(viewModel.viewState.selectionState[.encrypted], false) + } + + func testUpdateOneToOneRuleAlsoUpdatesPollRules() async { + setupWithPollRules() + + await viewModel.update(ruleID: .oneToOneRoom, isChecked: false) + + XCTAssertEqual(viewModel.viewState.selectionState.count, 8) + XCTAssertEqual(viewModel.viewState.selectionState[.oneToOneRoom], false) + XCTAssertEqual(viewModel.viewState.selectionState[.oneToOnePollStart], false) + XCTAssertEqual(viewModel.viewState.selectionState[.oneToOnePollEnd], false) + + // unrelated poll rules stay the same + XCTAssertEqual(viewModel.viewState.selectionState[.allOtherMessages], true) + XCTAssertEqual(viewModel.viewState.selectionState[.pollStart], true) + XCTAssertEqual(viewModel.viewState.selectionState[.pollEnd], true) + } + + func testUpdateMessageRuleAlsoUpdatesPollRules() async { + setupWithPollRules() + + await viewModel.update(ruleID: .allOtherMessages, isChecked: false) + XCTAssertEqual(viewModel.viewState.selectionState.count, 8) + XCTAssertEqual(viewModel.viewState.selectionState[.allOtherMessages], false) + XCTAssertEqual(viewModel.viewState.selectionState[.pollStart], false) + XCTAssertEqual(viewModel.viewState.selectionState[.pollEnd], false) + + // unrelated poll rules stay the same + XCTAssertEqual(viewModel.viewState.selectionState[.oneToOneRoom], true) + XCTAssertEqual(viewModel.viewState.selectionState[.oneToOnePollStart], true) + XCTAssertEqual(viewModel.viewState.selectionState[.oneToOnePollEnd], true) + } + + func testMismatchingRulesAreHandled() async { + setupWithPollRules() + + await viewModel.update(ruleID: .allOtherMessages, isChecked: false) + + // simulating a "mismatch" on the poll started rule + await viewModel.update(ruleID: .pollStart, isChecked: true) + + XCTAssertEqual(viewModel.viewState.selectionState.count, 8) + + // The other messages rule ui flag should match the loudest related poll rule + XCTAssertEqual(viewModel.viewState.selectionState[.allOtherMessages], true) + } + + func testMismatchingOneToOneRulesAreHandled() async { + setupWithPollRules() + + await viewModel.update(ruleID: .oneToOneRoom, isChecked: false) + // simulating a "mismatch" on the one to one poll started rule + await viewModel.update(ruleID: .oneToOnePollStart, isChecked: true) + + XCTAssertEqual(viewModel.viewState.selectionState.count, 8) + + // The one to one room rule ui flag should match the loudest related poll rule + XCTAssertEqual(viewModel.viewState.selectionState[.oneToOneRoom], true) + + // the oneToOneRoom rule should be flagged as "out of sync" + XCTAssertTrue(viewModel.isRuleOutOfSync(.oneToOneRoom)) + XCTAssertFalse(viewModel.isRuleOutOfSync(.allOtherMessages)) + } +} + +private extension NotificationSettingsViewModelTests { + func setupWithPollRules() { + viewModel = .init(notificationSettingsService: notificationService, ruleIds: .default + .polls) + notificationService.rules = [MockNotificationPushRule].default + [MockNotificationPushRule].polls + } +} + +private extension Array where Element == NotificationPushRuleId { + static var `default`: [NotificationPushRuleId] { + [.oneToOneRoom, .allOtherMessages, .oneToOneEncryptedRoom, .encrypted] + } + + static var polls: [NotificationPushRuleId] { + [.pollStart, .pollEnd, .oneToOnePollStart, .oneToOnePollEnd] + } +} + +private extension Array where Element == MockNotificationPushRule { + static var `default`: [MockNotificationPushRule] { + [NotificationPushRuleId] + .default + .map { ruleId in + MockNotificationPushRule(ruleId: ruleId.rawValue, enabled: true) + } + } + + static var polls: [MockNotificationPushRule] { + [NotificationPushRuleId] + .polls + .map { ruleId in + MockNotificationPushRule(ruleId: ruleId.rawValue, enabled: true) + } + } +} diff --git a/RiotSwiftUI/Modules/Settings/Notifications/View/NotificationSettings.swift b/RiotSwiftUI/Modules/Settings/Notifications/View/NotificationSettings.swift index 18be2680d2..62cdf247a4 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/View/NotificationSettings.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/View/NotificationSettings.swift @@ -21,6 +21,7 @@ import SwiftUI /// Also renders an optional bottom section. /// Used in the case of keywords, for the keyword chips and input. struct NotificationSettings: View { + @Environment(\.theme) var theme: ThemeSwiftUI @ObservedObject var viewModel: NotificationSettingsViewModel var bottomSection: BottomSection? @@ -31,15 +32,28 @@ struct NotificationSettings: View { header: FormSectionHeader(text: VectorL10n.settingsNotifyMeFor) ) { ForEach(viewModel.viewState.ruleIds) { ruleId in - let checked = viewModel.viewState.selectionState[ruleId] ?? false - FormPickerItem(title: ruleId.title, selected: checked) { - viewModel.update(ruleID: ruleId, isChecked: !checked) + VStack(alignment: .leading, spacing: 4) { + let checked = viewModel.viewState.selectionState[ruleId] ?? false + FormPickerItem(title: ruleId.title, selected: checked) { + Task { + await viewModel.update(ruleID: ruleId, isChecked: !checked) + } + } + + if viewModel.isRuleOutOfSync(ruleId) { + Text(VectorL10n.settingsPushRulesError) + .font(theme.fonts.caption1) + .foregroundColor(theme.colors.alert) + .padding(.horizontal) + .padding(.bottom, 16) + } } } } bottomSection } .activityIndicator(show: viewModel.viewState.saving) + .disabled(viewModel.viewState.saving) } } diff --git a/RiotSwiftUI/Modules/Settings/Notifications/ViewModel/NotificationSettingsViewModel.swift b/RiotSwiftUI/Modules/Settings/Notifications/ViewModel/NotificationSettingsViewModel.swift index 5885975723..154f926cee 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/ViewModel/NotificationSettingsViewModel.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/ViewModel/NotificationSettingsViewModel.swift @@ -49,7 +49,9 @@ final class NotificationSettingsViewModel: NotificationSettingsViewModelType, Ob // Observe when the rules are updated, to subsequently update the state of the settings. notificationSettingsService.rulesPublisher - .sink(receiveValue: rulesUpdated(newRules:)) + .sink { [weak self] newRules in + self?.rulesUpdated(newRules: newRules) + } .store(in: &cancellables) // Only observe keywords if the current settings view displays it. @@ -88,7 +90,9 @@ final class NotificationSettingsViewModel: NotificationSettingsViewModelType, Ob // Keyword rules were updates, check if we need to update the setting. keywordsRules .map { $0.contains { $0.enabled } } - .sink(receiveValue: keywordRuleUpdated(anyEnabled:)) + .sink { [weak self] in + self?.keywordRuleUpdated(anyEnabled: $0) + } .store(in: &cancellables) // Update the viewState with the final keywords to be displayed. @@ -105,35 +109,27 @@ final class NotificationSettingsViewModel: NotificationSettingsViewModelType, Ob // MARK: - Public - func update(ruleID: NotificationPushRuleId, isChecked: Bool) { + @MainActor + func update(ruleID: NotificationPushRuleId, isChecked: Bool) async { let index = NotificationIndex.index(when: isChecked) - if ruleID == .keywords { - // Keywords is handled differently to other settings - updateKeywords(isChecked: isChecked) - return - } - // Get the static definition and update the actions and enabled state. - guard let standardActions = ruleID.standardActions(for: index) else { return } + let standardActions = ruleID.standardActions(for: index) let enabled = standardActions != .disabled - notificationSettingsService.updatePushRuleActions( - for: ruleID.rawValue, - enabled: enabled, - actions: standardActions.actions - ) - } - - private func updateKeywords(isChecked: Bool) { - guard !keywordsOrdered.isEmpty else { - viewState.selectionState[.keywords]?.toggle() - return - } - // Get the static definition and update the actions and enabled state for every keyword. - let index = NotificationIndex.index(when: isChecked) - guard let standardActions = NotificationPushRuleId.keywords.standardActions(for: index) else { return } - let enabled = standardActions != .disabled - keywordsOrdered.forEach { keyword in - notificationSettingsService.updatePushRuleActions( - for: keyword, + + switch ruleID { + case .keywords: // Keywords is handled differently to other settings + await updateKeywords(isChecked: isChecked) + + case .oneToOneRoom, .allOtherMessages: + await updatePushAction( + id: ruleID, + enabled: enabled, + standardActions: standardActions, + then: ruleID.syncedRules + ) + + default: + try? await notificationSettingsService.updatePushRuleActions( + for: ruleID.rawValue, enabled: enabled, actions: standardActions.actions ) @@ -152,17 +148,94 @@ final class NotificationSettingsViewModel: NotificationSettingsViewModelType, Ob notificationSettingsService.remove(keyword: keyword) } - // MARK: - Private + func isRuleOutOfSync(_ ruleId: NotificationPushRuleId) -> Bool { + viewState.outOfSyncRules.contains(ruleId) && viewState.saving == false + } +} + +// MARK: - Private + +private extension NotificationSettingsViewModel { + @MainActor + func updateKeywords(isChecked: Bool) async { + guard !keywordsOrdered.isEmpty else { + viewState.selectionState[.keywords]?.toggle() + return + } + + // Get the static definition and update the actions and enabled state for every keyword. + let index = NotificationIndex.index(when: isChecked) + let standardActions = NotificationPushRuleId.keywords.standardActions(for: index) + let enabled = standardActions != .disabled + let keywordsToUpdate = keywordsOrdered + + await withThrowingTaskGroup(of: Void.self) { group in + for keyword in keywordsToUpdate { + group.addTask { + try await self.notificationSettingsService.updatePushRuleActions( + for: keyword, + enabled: enabled, + actions: standardActions.actions + ) + } + } + } + } - private func rulesUpdated(newRules: [NotificationPushRuleType]) { + func updatePushAction(id: NotificationPushRuleId, + enabled: Bool, + standardActions: NotificationStandardActions, + then rules: [NotificationPushRuleId]) async { + await MainActor.run { + viewState.saving = true + } + + do { + // update the 'parent rule' first + try await notificationSettingsService.updatePushRuleActions(for: id.rawValue, enabled: enabled, actions: standardActions.actions) + + // synchronize all the 'children rules' with the parent rule + await withThrowingTaskGroup(of: Void.self) { group in + for ruleId in rules { + group.addTask { + try await self.notificationSettingsService.updatePushRuleActions(for: ruleId.rawValue, enabled: enabled, actions: standardActions.actions) + } + } + } + await completeUpdate() + } catch { + await completeUpdate() + } + } + + @MainActor + func completeUpdate() { + viewState.saving = false + } + + func rulesUpdated(newRules: [NotificationPushRuleType]) { + var outOfSyncRules: Set = .init() + for rule in newRules { - guard let ruleId = NotificationPushRuleId(rawValue: rule.ruleId), - ruleIds.contains(ruleId) else { continue } - viewState.selectionState[ruleId] = isChecked(rule: rule) + guard + let ruleId = rule.pushRuleId, + ruleIds.contains(ruleId) + else { + continue + } + + let relatedSyncedRules = ruleId.syncedRules(in: newRules) + viewState.selectionState[ruleId] = isChecked(rule: rule, syncedRules: relatedSyncedRules) + + if isOutOfSync(rule: rule, syncedRules: relatedSyncedRules) { + outOfSyncRules.insert(ruleId) + } } + + viewState.outOfSyncRules = outOfSyncRules } - private func keywordRuleUpdated(anyEnabled: Bool) { + func keywordRuleUpdated(anyEnabled: Bool) { if !keywordsOrdered.isEmpty { viewState.selectionState[.keywords] = anyEnabled } @@ -174,8 +247,10 @@ final class NotificationSettingsViewModel: NotificationSettingsViewModelType, Ob /// The same logic is used on android. /// - Parameter rule: The push rule type to check. /// - Returns: Wether it should be displayed as checked or not checked. - private func isChecked(rule: NotificationPushRuleType) -> Bool { - guard let ruleId = NotificationPushRuleId(rawValue: rule.ruleId) else { return false } + func defaultIsChecked(rule: NotificationPushRuleType) -> Bool { + guard let ruleId = rule.pushRuleId else { + return false + } let firstIndex = NotificationIndex.allCases.first { nextIndex in rule.matches(standardActions: ruleId.standardActions(for: nextIndex)) @@ -187,4 +262,45 @@ final class NotificationSettingsViewModel: NotificationSettingsViewModelType, Ob return index.enabled } + + func isChecked(rule: NotificationPushRuleType, syncedRules: [NotificationPushRuleType]) -> Bool { + guard let ruleId = rule.pushRuleId else { + return false + } + + switch ruleId { + case .oneToOneRoom, .allOtherMessages: + let ruleIsChecked = defaultIsChecked(rule: rule) + let someSyncedRuleIsChecked = syncedRules.contains(where: { defaultIsChecked(rule: $0) }) + // The "loudest" rule will be applied when there is a clash between a rule and its dependent rules. + return ruleIsChecked || someSyncedRuleIsChecked + default: + return defaultIsChecked(rule: rule) + } + } + + func isOutOfSync(rule: NotificationPushRuleType, syncedRules: [NotificationPushRuleType]) -> Bool { + guard let ruleId = rule.pushRuleId else { + return false + } + + switch ruleId { + case .oneToOneRoom, .allOtherMessages: + let ruleIsChecked = defaultIsChecked(rule: rule) + return syncedRules.contains(where: { defaultIsChecked(rule: $0) != ruleIsChecked }) + default: + return false + } + } +} + +extension NotificationPushRuleId { + func syncedRules(in rules: [NotificationPushRuleType]) -> [NotificationPushRuleType] { + rules.filter { + guard let ruleId = $0.pushRuleId else { + return false + } + return syncedRules.contains(ruleId) + } + } } diff --git a/RiotSwiftUI/Modules/Settings/Notifications/ViewModel/NotificationSettingsViewState.swift b/RiotSwiftUI/Modules/Settings/Notifications/ViewModel/NotificationSettingsViewState.swift index 22bb4fed83..a732f56b1b 100644 --- a/RiotSwiftUI/Modules/Settings/Notifications/ViewModel/NotificationSettingsViewState.swift +++ b/RiotSwiftUI/Modules/Settings/Notifications/ViewModel/NotificationSettingsViewState.swift @@ -22,5 +22,6 @@ struct NotificationSettingsViewState { var saving: Bool var ruleIds: [NotificationPushRuleId] var selectionState: [NotificationPushRuleId: Bool] + var outOfSyncRules: Set = .init() var keywords = [String]() } diff --git a/RiotTests/PushRulesUpdaterTests.swift b/RiotTests/PushRulesUpdaterTests.swift new file mode 100644 index 0000000000..1eec9dda58 --- /dev/null +++ b/RiotTests/PushRulesUpdaterTests.swift @@ -0,0 +1,106 @@ +// +// Copyright 2023 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Combine +import XCTest +@testable import Element + +final class PushRulesUpdaterTests: XCTestCase { + private var notificationService: MockNotificationSettingsService! + private var pushRulesUpdater: PushRulesUpdater! + + override func setUpWithError() throws { + notificationService = .init() + notificationService.rules = [MockNotificationPushRule].default + pushRulesUpdater = .init(notificationSettingsService: notificationService) + } + + func testNoRuleIsUpdated() async throws { + await pushRulesUpdater.syncRulesIfNeeded() + XCTAssertEqual(notificationService.rules as? [MockNotificationPushRule], [MockNotificationPushRule].default) + } + + func testSingleRuleAffected() async throws { + let targetActions: NotificationActions = .init(notify: true, sound: "default") + let targetRuleIndex = try mockRule(ruleId: .pollStart, enabled: false, actions: targetActions) + + await pushRulesUpdater.syncRulesIfNeeded() + + XCTAssertEqual(self.notificationService.rules[targetRuleIndex].ruleActions, NotificationStandardActions.notifyDefaultSound.actions) + XCTAssertTrue(self.notificationService.rules[targetRuleIndex].enabled) + } + + func testAffectedRulesAreUpdated() async throws { + let targetActions: NotificationActions = .init(notify: true, sound: "abc") + try mockRule(ruleId: .allOtherMessages, enabled: true, actions: targetActions) + let affectedRules: [NotificationPushRuleId] = [.allOtherMessages, .pollStart, .msc3930pollStart, .pollEnd, .msc3930pollEnd] + + await pushRulesUpdater.syncRulesIfNeeded() + + for rule in self.notificationService.rules { + guard let id = rule.pushRuleId else { + continue + } + + if affectedRules.contains(id) { + XCTAssertEqual(rule.ruleActions, targetActions) + } else { + XCTAssertEqual(rule.ruleActions, NotificationStandardActions.notifyDefaultSound.actions) + } + } + } + + func testAffectedOneToOneRulesAreUpdated() async throws { + let targetActions: NotificationActions = .init(notify: true, sound: "abc") + try mockRule(ruleId: .oneToOneRoom, enabled: true, actions: targetActions) + let affectedRules: [NotificationPushRuleId] = [.oneToOneRoom, .oneToOnePollStart, .msc3930oneToOnePollStart, .oneToOnePollEnd, .msc3930oneToOnePollEnd] + + await pushRulesUpdater.syncRulesIfNeeded() + + for rule in self.notificationService.rules { + guard let id = rule.pushRuleId else { + continue + } + + if affectedRules.contains(id) { + XCTAssertEqual(rule.ruleActions, targetActions) + } else { + XCTAssertEqual(rule.ruleActions, NotificationStandardActions.notifyDefaultSound.actions) + } + } + } +} + +private extension PushRulesUpdaterTests { + @discardableResult + func mockRule(ruleId: NotificationPushRuleId, enabled: Bool, actions: NotificationActions) throws -> Int { + guard let ruleIndex = notificationService.rules.firstIndex(where: { $0.pushRuleId == ruleId }) else { + throw NSError(domain: "no ruleIndex found", code: 0) + } + notificationService.rules[ruleIndex] = MockNotificationPushRule(ruleId: ruleId.rawValue, enabled: enabled, ruleActions: actions) + return ruleIndex + } +} + +private extension Array where Element == MockNotificationPushRule { + static var `default`: [MockNotificationPushRule] { + let ids: [NotificationPushRuleId] = [.oneToOneRoom, .allOtherMessages, .pollStart, .msc3930pollStart, .pollEnd, .msc3930pollEnd, .oneToOnePollStart, .msc3930oneToOnePollStart, .oneToOnePollEnd, .msc3930oneToOnePollEnd] + + return ids.map { + MockNotificationPushRule(ruleId: $0.rawValue, enabled: true) + } + } +} diff --git a/SiriIntents/target.yml b/SiriIntents/target.yml index 324497cf3c..82f7a89da9 100644 --- a/SiriIntents/target.yml +++ b/SiriIntents/target.yml @@ -34,6 +34,7 @@ targets: dependencies: - sdk: Intents.framework - package: DeviceKit + - package: DTCoreText configFiles: Debug: Debug.xcconfig diff --git a/Tchap/Generated/Images_Riot.swift b/Tchap/Generated/Images_Riot.swift index cdc2c5c49f..aa59c8834a 100644 --- a/Tchap/Generated/Images_Riot.swift +++ b/Tchap/Generated/Images_Riot.swift @@ -22,9 +22,6 @@ internal typealias AssetImageTypeAlias = ImageAsset.Image internal class Asset: NSObject { @objcMembers @objc(AssetImages) internal class Images: NSObject { - internal static let allChatsOnboarding1 = ImageAsset(name: "all_chats_onboarding1") - internal static let allChatsOnboarding2 = ImageAsset(name: "all_chats_onboarding2") - internal static let allChatsOnboarding3 = ImageAsset(name: "all_chats_onboarding3") internal static let analyticsCheckmark = ImageAsset(name: "AnalyticsCheckmark") internal static let analyticsLogo = ImageAsset(name: "AnalyticsLogo") internal static let socialLoginButtonApple = ImageAsset(name: "social_login_button_apple") diff --git a/Tchap/Utils/Tools.m b/Tchap/Utils/Tools.m index 0a850e0178..1f4e3930b8 100644 --- a/Tchap/Utils/Tools.m +++ b/Tchap/Utils/Tools.m @@ -37,7 +37,11 @@ + (NSString *)presenceText:(MXUser *)user presenceText = [VectorL10n roomParticipantsIdle]; break; - case MXPresenceUnknown: // Do like matrix-js-sdk + case MXPresenceUnknown: + // Fix https://github.com/vector-im/element-ios/issues/6597 + // Return nil because we don't want to display anything if the status is unknown + return nil; + case MXPresenceOffline: presenceText = [VectorL10n roomParticipantsOffline]; break; diff --git a/Tchap/target.yml b/Tchap/target.yml index 0389e05569..b38fbf7d97 100644 --- a/Tchap/target.yml +++ b/Tchap/target.yml @@ -75,6 +75,7 @@ targetTemplates: - path: ../Config/Project-Warnings.xcconfig - path: ../Config/AppIdentifiers.xcconfig - path: ../Config/CommonConfiguration.swift + - path: ../Config/CryptoSDKConfiguration.swift - path: ../Config/Configurable.swift - path: ../Tchap excludes: @@ -143,6 +144,7 @@ targetTemplates: - path: ../Riot/Managers/RoomMessageLinkParser/RoomMessageURLParser.swift - path: ../Riot/Managers/PasswordStrength - path: ../Riot/Managers/PushNotification + - path: ../Riot/Managers/PushRulesUpdater - path: ../Riot/Managers/Serialization - path: ../Riot/Managers/Settings/RiotSettings.swift - path: ../Riot/Managers/Settings/Shared diff --git a/changelog.d/761.change b/changelog.d/761.change new file mode 100644 index 0000000000..36682d1cdf --- /dev/null +++ b/changelog.d/761.change @@ -0,0 +1,2 @@ +Rebase/element ios 1.10.2 + diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 62a0dbb959..9a3f33a2e4 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -205,6 +205,8 @@ platform :ios do # Generate xcodebuild additional arguments xcargs_hash = { "GCC_PREPROCESSOR_DEFINITIONS" => "$(GCC_PREPROCESSOR_DEFINITIONS) #{additional_preprocessor_definitions}", + # Fix XCode 14 code signing issues for Swift packages containing resources bundles. + "CODE_SIGN_STYLE" => "Manual", } xcargs = xcargs_hash.map { |k, v| "#{k}=#{v.shellescape}" }.join(" ") diff --git a/project.yml b/project.yml index 4d14d4020d..f08d4619d7 100644 --- a/project.yml +++ b/project.yml @@ -59,7 +59,10 @@ packages: branch: main WysiwygComposer: url: https://github.com/matrix-org/matrix-wysiwyg-composer-swift - version: 0.19.0 + version: 0.22.0 DeviceKit: url: https://github.com/devicekit/DeviceKit majorVersion: 4.7.0 + DTCoreText: + url: https://github.com/Cocoanetics/DTCoreText + version: 1.6.27 \ No newline at end of file