From a4aa38ee43e69347e6b8e1c4ff74d5c65b9d8e58 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 16 Dec 2019 17:14:26 +0100 Subject: [PATCH 01/22] Fix new issue on permalink click --- CHANGES.md | 2 +- .../im/vector/riotx/features/permalink/PermalinkHandler.kt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 1228ea65ca..5f83727cd7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,7 +14,7 @@ Other changes: Bugfix 🐛: - Scroll breadcrumbs to top when opened - Render default room name when it starts with an emoji (#477) - - Do not display " (IRC)") in display names https://github.com/vector-im/riot-android/issues/444 + - Do not display " (IRC)" in display names https://github.com/vector-im/riot-android/issues/444 Translations 🗣: - diff --git a/vector/src/main/java/im/vector/riotx/features/permalink/PermalinkHandler.kt b/vector/src/main/java/im/vector/riotx/features/permalink/PermalinkHandler.kt index c849166738..e46adc53fc 100644 --- a/vector/src/main/java/im/vector/riotx/features/permalink/PermalinkHandler.kt +++ b/vector/src/main/java/im/vector/riotx/features/permalink/PermalinkHandler.kt @@ -57,7 +57,7 @@ class PermalinkHandler @Inject constructor(private val session: Session, .observeOn(AndroidSchedulers.mainThread()) .map { val roomId = it.getOrNull() - if (navigateToRoomInterceptor?.navToRoom(roomId) != true) { + if (navigateToRoomInterceptor?.navToRoom(roomId, permalinkData.eventId) != true) { openRoom(context, roomId, permalinkData.eventId, buildTask) } true @@ -87,9 +87,9 @@ class PermalinkHandler @Inject constructor(private val session: Session, } /** - * Open room either joined, or not unknown + * Open room either joined, or not */ - private fun openRoom(context: Context, roomId: String?, eventId: String? = null, buildTask: Boolean) { + private fun openRoom(context: Context, roomId: String?, eventId: String?, buildTask: Boolean) { return if (roomId != null && session.getRoom(roomId) != null) { navigator.openRoom(context, roomId, eventId, buildTask) } else { From 1c727c1ee47191b81486bf0356e383a26da03c0b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 17 Dec 2019 10:42:58 +0100 Subject: [PATCH 02/22] Fix crash reported by rageshake --- .../features/home/room/detail/RoomDetailFragment.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt index 8887b94f92..49f23f7f2c 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt @@ -86,8 +86,6 @@ import im.vector.riotx.features.autocomplete.command.CommandAutocompletePolicy import im.vector.riotx.features.autocomplete.user.AutocompleteUserPresenter import im.vector.riotx.features.command.Command import im.vector.riotx.features.home.AvatarRenderer -import im.vector.riotx.features.permalink.NavigateToRoomInterceptor -import im.vector.riotx.features.permalink.PermalinkHandler import im.vector.riotx.features.home.getColorFromUserId import im.vector.riotx.features.home.room.detail.composer.TextComposerAction import im.vector.riotx.features.home.room.detail.composer.TextComposerView @@ -109,6 +107,8 @@ import im.vector.riotx.features.media.ImageMediaViewerActivity import im.vector.riotx.features.media.VideoContentRenderer import im.vector.riotx.features.media.VideoMediaViewerActivity import im.vector.riotx.features.notifications.NotificationDrawerManager +import im.vector.riotx.features.permalink.NavigateToRoomInterceptor +import im.vector.riotx.features.permalink.PermalinkHandler import im.vector.riotx.features.reactions.EmojiReactionPickerActivity import im.vector.riotx.features.settings.VectorPreferences import im.vector.riotx.features.share.SharedData @@ -416,8 +416,10 @@ class RoomDetailFragment @Inject constructor( composerLayout.composerRelatedMessageAvatar ) composerLayout.expand { - // need to do it here also when not using quick reply - focusComposerAndShowKeyboard() + if (isAdded) { + // need to do it here also when not using quick reply + focusComposerAndShowKeyboard() + } } focusComposerAndShowKeyboard() } From 42cdb1db1146a65d8a270eb23e5aac29e73edda8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 17 Dec 2019 12:26:45 +0100 Subject: [PATCH 03/22] Fix crash reported by rageshake: writeToFile may throw exceptions --- .../android/internal/session/DefaultFileService.kt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultFileService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultFileService.kt index 868d63665a..c160ac9b31 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultFileService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultFileService.kt @@ -83,15 +83,13 @@ internal class DefaultFileService @Inject constructor(private val context: Conte if (elementToDecrypt != null) { Timber.v("## decrypt file") - MXEncryptedAttachments.decryptAttachment(inputStream, elementToDecrypt) ?: throw IllegalStateException("Decryption error") - } else { - inputStream + MXEncryptedAttachments.decryptAttachment(inputStream, elementToDecrypt) + ?: throw IllegalStateException("Decryption error") } + + writeToFile(inputStream, destFile) + destFile } - .map { inputStream -> - writeToFile(inputStream, destFile) - destFile - } } else { Try.just(destFile) } From 1ceddd9607674bf5faa6278b04327b2618d53071 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 17 Dec 2019 14:05:58 +0100 Subject: [PATCH 04/22] Rageshake: log resumed screens and add the log verbosity ON/OFF to the rageshakes data --- .../vector/riotx/core/platform/VectorBaseActivity.kt | 3 +-- .../platform/VectorBaseBottomSheetDialogFragment.kt | 6 ++++++ .../vector/riotx/core/platform/VectorBaseFragment.kt | 2 +- .../im/vector/riotx/features/rageshake/BugReporter.kt | 11 ++++++++--- .../riotx/features/rageshake/VectorFileLogger.kt | 7 +++---- .../features/settings/VectorSettingsBaseFragment.kt | 2 +- 6 files changed, 20 insertions(+), 11 deletions(-) diff --git a/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseActivity.kt b/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseActivity.kt index 02e28e079c..f70aed9393 100644 --- a/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseActivity.kt +++ b/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseActivity.kt @@ -222,8 +222,7 @@ abstract class VectorBaseActivity : AppCompatActivity(), HasScreenInjector { override fun onResume() { super.onResume() - - Timber.v("onResume Activity ${this.javaClass.simpleName}") + Timber.i("onResume Activity ${this.javaClass.simpleName}") configurationViewModel.onActivityResumed() diff --git a/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseBottomSheetDialogFragment.kt b/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseBottomSheetDialogFragment.kt index 70311e2f57..b3a56f48ee 100644 --- a/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseBottomSheetDialogFragment.kt +++ b/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseBottomSheetDialogFragment.kt @@ -32,6 +32,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment import im.vector.riotx.core.di.DaggerScreenComponent import im.vector.riotx.core.di.ScreenComponent import im.vector.riotx.core.utils.DimensionConverter +import timber.log.Timber /** * Add MvRx capabilities to bottomsheetdialog (like BaseMvRxFragment) @@ -80,6 +81,11 @@ abstract class VectorBaseBottomSheetDialogFragment : BottomSheetDialogFragment() super.onCreate(savedInstanceState) } + override fun onResume() { + super.onResume() + Timber.i("onResume BottomSheet ${this.javaClass.simpleName}") + } + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return super.onCreateDialog(savedInstanceState).apply { val dialog = this as? BottomSheetDialog diff --git a/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseFragment.kt b/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseFragment.kt index efcbdfff39..8e1ad72150 100644 --- a/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseFragment.kt +++ b/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseFragment.kt @@ -104,7 +104,7 @@ abstract class VectorBaseFragment : BaseMvRxFragment(), HasScreenInjector { @CallSuper override fun onResume() { super.onResume() - Timber.v("onResume Fragment ${this.javaClass.simpleName}") + Timber.i("onResume Fragment ${this.javaClass.simpleName}") } @CallSuper diff --git a/vector/src/main/java/im/vector/riotx/features/rageshake/BugReporter.kt b/vector/src/main/java/im/vector/riotx/features/rageshake/BugReporter.kt index b96542a8ce..dc353363d5 100755 --- a/vector/src/main/java/im/vector/riotx/features/rageshake/BugReporter.kt +++ b/vector/src/main/java/im/vector/riotx/features/rageshake/BugReporter.kt @@ -33,6 +33,7 @@ import im.vector.riotx.core.di.ActiveSessionHolder import im.vector.riotx.core.extensions.toOnOff import im.vector.riotx.core.utils.getDeviceLocale import im.vector.riotx.features.settings.VectorLocale +import im.vector.riotx.features.settings.VectorPreferences import im.vector.riotx.features.themes.ThemeUtils import im.vector.riotx.features.version.VersionProvider import okhttp3.Call @@ -44,12 +45,15 @@ import okhttp3.Response import org.json.JSONException import org.json.JSONObject import timber.log.Timber -import java.io.* +import java.io.File +import java.io.IOException +import java.io.OutputStreamWriter import java.net.HttpURLConnection -import java.util.Locale +import java.util.* import java.util.zip.GZIPOutputStream import javax.inject.Inject import javax.inject.Singleton +import kotlin.collections.ArrayList /** * BugReporter creates and sends the bug reports. @@ -57,6 +61,7 @@ import javax.inject.Singleton @Singleton class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSessionHolder, private val versionProvider: VersionProvider, + private val vectorPreferences: VectorPreferences, private val vectorFileLogger: VectorFileLogger) { var inMultiWindowMode = false @@ -230,7 +235,7 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes .addFormDataPart("matrix_sdk_version", Matrix.getSdkVersion()) .addFormDataPart("olm_version", olmVersion) .addFormDataPart("device", Build.MODEL.trim()) - .addFormDataPart("lazy_loading", true.toOnOff()) + .addFormDataPart("verbose_log", vectorPreferences.labAllowedExtendedLogging().toOnOff()) .addFormDataPart("multi_window", inMultiWindowMode.toOnOff()) .addFormDataPart("os", Build.VERSION.RELEASE + " (API " + Build.VERSION.SDK_INT + ") " + Build.VERSION.INCREMENTAL + "-" + Build.VERSION.CODENAME) diff --git a/vector/src/main/java/im/vector/riotx/features/rageshake/VectorFileLogger.kt b/vector/src/main/java/im/vector/riotx/features/rageshake/VectorFileLogger.kt index 95053790c8..6049db6180 100644 --- a/vector/src/main/java/im/vector/riotx/features/rageshake/VectorFileLogger.kt +++ b/vector/src/main/java/im/vector/riotx/features/rageshake/VectorFileLogger.kt @@ -24,9 +24,7 @@ import java.io.File import java.io.PrintWriter import java.io.StringWriter import java.text.SimpleDateFormat -import java.util.Date -import java.util.Locale -import java.util.TimeZone +import java.util.* import java.util.logging.* import java.util.logging.Formatter import javax.inject.Inject @@ -83,7 +81,8 @@ class VectorFileLogger @Inject constructor(val context: Context, private val vec return if (vectorPreferences.labAllowedExtendedLogging()) { false } else { - priority < Log.ERROR + // Exclude debug and verbose logs + priority <= Log.DEBUG } } diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsBaseFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsBaseFragment.kt index 666f1610b0..e32cc98123 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsBaseFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsBaseFragment.kt @@ -65,7 +65,7 @@ abstract class VectorSettingsBaseFragment : PreferenceFragmentCompat(), HasScree override fun onResume() { super.onResume() - Timber.v("onResume Fragment ${this.javaClass.simpleName}") + Timber.i("onResume Fragment ${this.javaClass.simpleName}") vectorActivity.supportActionBar?.setTitle(titleRes) // find the view from parent activity mLoadingView = vectorActivity.findViewById(R.id.vector_settings_spinner_views) From 65faedb06bf6c228fb36b8ece9eb933a8fca86bc Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 17 Dec 2019 14:14:49 +0100 Subject: [PATCH 05/22] BugReport screen: improve UX when description is too short (reported by Matthew) --- .../riotx/features/rageshake/BugReportActivity.kt | 13 ++++++++----- vector/src/main/res/layout/activity_bug_report.xml | 5 ++++- vector/src/main/res/values/strings_riotX.xml | 1 + 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/vector/src/main/java/im/vector/riotx/features/rageshake/BugReportActivity.kt b/vector/src/main/java/im/vector/riotx/features/rageshake/BugReportActivity.kt index 187566f660..5c1428cb54 100755 --- a/vector/src/main/java/im/vector/riotx/features/rageshake/BugReportActivity.kt +++ b/vector/src/main/java/im/vector/riotx/features/rageshake/BugReportActivity.kt @@ -77,8 +77,7 @@ class BugReportActivity : VectorBaseActivity() { override fun onPrepareOptionsMenu(menu: Menu): Boolean { menu.findItem(R.id.ic_action_send_bug_report)?.let { - val isValid = bug_report_edit_text.text.toString().trim().length > 10 - && !bug_report_mask_view.isVisible + val isValid = !bug_report_mask_view.isVisible it.isEnabled = isValid it.icon.alpha = if (isValid) 255 else 100 @@ -90,7 +89,11 @@ class BugReportActivity : VectorBaseActivity() { override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.ic_action_send_bug_report -> { - sendBugReport() + if (bug_report_edit_text.text.toString().trim().length >= 10) { + sendBugReport() + } else { + bug_report_text_input_layout.error = getString(R.string.bug_report_error_too_short) + } return true } } @@ -150,7 +153,7 @@ class BugReportActivity : VectorBaseActivity() { val myProgress = progress.coerceIn(0, 100) bug_report_progress_view.progress = myProgress - bug_report_progress_text_view.text = getString(R.string.send_bug_report_progress, "$myProgress") + bug_report_progress_text_view.text = getString(R.string.send_bug_report_progress, myProgress.toString()) } override fun onUploadSucceed() { @@ -179,7 +182,7 @@ class BugReportActivity : VectorBaseActivity() { @OnTextChanged(R.id.bug_report_edit_text) internal fun textChanged() { - invalidateOptionsMenu() + bug_report_text_input_layout.error = null } @OnCheckedChanged(R.id.bug_report_button_include_screenshot) diff --git a/vector/src/main/res/layout/activity_bug_report.xml b/vector/src/main/res/layout/activity_bug_report.xml index bbe819769a..7156f91314 100644 --- a/vector/src/main/res/layout/activity_bug_report.xml +++ b/vector/src/main/res/layout/activity_bug_report.xml @@ -1,5 +1,6 @@ + android:textColorHint="?attr/vctr_default_text_hint_color" + app:counterEnabled="true" + app:counterMaxLength="500"> The current session is for user %1$s and you provide credentials for user %2$s. This is not supported by RiotX.\nPlease first clear data, then sign in again on another account. Your matrix.to link was malformed + The description is too short From 7fa76b9d351e99ae40179211fdfb2ad906ecb0b0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 17 Dec 2019 16:35:04 +0100 Subject: [PATCH 06/22] Prevent crash when opening unknown room, which should not happen... --- .../session/room/create/CreateRoomTask.kt | 2 +- .../java/im/vector/riotx/core/error/fatal.kt | 31 +++++++++++++++++++ .../features/navigation/DefaultNavigator.kt | 13 ++++++-- 3 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 vector/src/main/java/im/vector/riotx/core/error/fatal.kt diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/create/CreateRoomTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/create/CreateRoomTask.kt index ca86765cd9..9af8434b7c 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/create/CreateRoomTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/create/CreateRoomTask.kt @@ -52,7 +52,7 @@ internal class DefaultCreateRoomTask @Inject constructor(private val roomAPI: Ro apiCall = roomAPI.createRoom(params) } val roomId = createRoomResponse.roomId!! - // Wait for room to come back from the sync (but it can maybe be in the DB is the sync response is received before) + // Wait for room to come back from the sync (but it can maybe be in the DB if the sync response is received before) val rql = RealmQueryLatch(realmConfiguration) { realm -> realm.where(RoomEntity::class.java) .equalTo(RoomEntityFields.ROOM_ID, roomId) diff --git a/vector/src/main/java/im/vector/riotx/core/error/fatal.kt b/vector/src/main/java/im/vector/riotx/core/error/fatal.kt new file mode 100644 index 0000000000..800e1ea7ad --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/core/error/fatal.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2019 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. + */ + +package im.vector.riotx.core.error + +import im.vector.riotx.BuildConfig +import timber.log.Timber + +/** + * throw in debug, only log in production. As this method does not always throw, next statement should be a return + */ +fun fatalError(message: String) { + if (BuildConfig.DEBUG) { + error(message) + } else { + Timber.e(message) + } +} diff --git a/vector/src/main/java/im/vector/riotx/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/riotx/features/navigation/DefaultNavigator.kt index 19f6aece58..08ff11217d 100644 --- a/vector/src/main/java/im/vector/riotx/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/riotx/features/navigation/DefaultNavigator.kt @@ -19,8 +19,11 @@ package im.vector.riotx.features.navigation import android.app.Activity import android.content.Context import android.content.Intent +import androidx.core.app.TaskStackBuilder import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoom import im.vector.riotx.R +import im.vector.riotx.core.di.ActiveSessionHolder +import im.vector.riotx.core.error.fatalError import im.vector.riotx.core.platform.VectorBaseActivity import im.vector.riotx.core.utils.toast import im.vector.riotx.features.crypto.keysbackup.settings.KeysBackupManageActivity @@ -38,12 +41,18 @@ import im.vector.riotx.features.share.SharedData import timber.log.Timber import javax.inject.Inject import javax.inject.Singleton -import androidx.core.app.TaskStackBuilder @Singleton -class DefaultNavigator @Inject constructor() : Navigator { +class DefaultNavigator @Inject constructor( + private val sessionHolder: ActiveSessionHolder +) : Navigator { override fun openRoom(context: Context, roomId: String, eventId: String?, buildTask: Boolean) { + if (sessionHolder.getSafeActiveSession()?.getRoom(roomId) == null) { + fatalError("Trying to open an unknown room $roomId") + return + } + val args = RoomDetailArgs(roomId, eventId) val intent = RoomDetailActivity.newIntent(context, args) if (buildTask) { From 79f11ad686d5baadf24ce556da555f31e205fccc Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 17 Dec 2019 17:22:26 +0100 Subject: [PATCH 07/22] Prevent crash when mimetype is null --- .../api/session/content/ContentAttachmentData.kt | 2 +- .../api/session/room/model/message/VideoInfo.kt | 2 +- .../crypto/attachments/MXEncryptedAttachments.kt | 2 +- .../internal/session/content/FileUploader.kt | 4 ++-- .../session/room/send/LocalEchoEventFactory.kt | 4 ++-- .../features/attachments/AttachmentsMapper.kt | 15 ++++++++++----- 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/content/ContentAttachmentData.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/content/ContentAttachmentData.kt index 933657b2fb..0d8ef2c52b 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/content/ContentAttachmentData.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/content/ContentAttachmentData.kt @@ -30,7 +30,7 @@ data class ContentAttachmentData( val exifOrientation: Int = ExifInterface.ORIENTATION_UNDEFINED, val name: String? = null, val path: String, - val mimeType: String, + val mimeType: String?, val type: Type ) : Parcelable { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/model/message/VideoInfo.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/model/message/VideoInfo.kt index a7d4708d33..da247810cb 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/model/message/VideoInfo.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/model/message/VideoInfo.kt @@ -25,7 +25,7 @@ data class VideoInfo( /** * The mimetype of the video e.g. "video/mp4". */ - @Json(name = "mimetype") val mimeType: String, + @Json(name = "mimetype") val mimeType: String?, /** * The width of the video in pixels. diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/attachments/MXEncryptedAttachments.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/attachments/MXEncryptedAttachments.kt index 5f90b636ac..503bf8e4ff 100755 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/attachments/MXEncryptedAttachments.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/attachments/MXEncryptedAttachments.kt @@ -49,7 +49,7 @@ object MXEncryptedAttachments { * @param mimetype the mime type * @return the encryption file info */ - fun encryptAttachment(attachmentStream: InputStream, mimetype: String): EncryptionResult { + fun encryptAttachment(attachmentStream: InputStream, mimetype: String?): EncryptionResult { val t0 = System.currentTimeMillis() val secureRandom = SecureRandom() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/FileUploader.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/FileUploader.kt index 209f03ad9d..2f4e991e62 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/FileUploader.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/FileUploader.kt @@ -43,9 +43,9 @@ internal class FileUploader @Inject constructor(@Authenticated suspend fun uploadFile(file: File, filename: String?, - mimeType: String, + mimeType: String?, progressListener: ProgressRequestBody.Listener? = null): ContentUploadResponse { - val uploadBody = file.asRequestBody(mimeType.toMediaTypeOrNull()) + val uploadBody = file.asRequestBody(mimeType?.toMediaTypeOrNull()) return upload(uploadBody, filename, progressListener) } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/LocalEchoEventFactory.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/LocalEchoEventFactory.kt index 0fed1ca6f5..7a935783cf 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/LocalEchoEventFactory.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/LocalEchoEventFactory.kt @@ -251,7 +251,7 @@ internal class LocalEchoEventFactory @Inject constructor( type = MessageType.MSGTYPE_AUDIO, body = attachment.name ?: "audio", audioInfo = AudioInfo( - mimeType = attachment.mimeType.takeIf { it.isNotBlank() } ?: "audio/mpeg", + mimeType = attachment.mimeType?.takeIf { it.isNotBlank() } ?: "audio/mpeg", size = attachment.size ), url = attachment.path @@ -264,7 +264,7 @@ internal class LocalEchoEventFactory @Inject constructor( type = MessageType.MSGTYPE_FILE, body = attachment.name ?: "file", info = FileInfo( - mimeType = attachment.mimeType.takeIf { it.isNotBlank() } + mimeType = attachment.mimeType?.takeIf { it.isNotBlank() } ?: "application/octet-stream", size = attachment.size ), diff --git a/vector/src/main/java/im/vector/riotx/features/attachments/AttachmentsMapper.kt b/vector/src/main/java/im/vector/riotx/features/attachments/AttachmentsMapper.kt index 5e843fcdfd..4b51c548a7 100644 --- a/vector/src/main/java/im/vector/riotx/features/attachments/AttachmentsMapper.kt +++ b/vector/src/main/java/im/vector/riotx/features/attachments/AttachmentsMapper.kt @@ -18,6 +18,7 @@ package im.vector.riotx.features.attachments import com.kbeanie.multipicker.api.entity.* import im.vector.matrix.android.api.session.content.ContentAttachmentData +import timber.log.Timber fun ChosenContact.toContactAttachment(): ContactAttachment { return ContactAttachment( @@ -29,6 +30,7 @@ fun ChosenContact.toContactAttachment(): ContactAttachment { } fun ChosenFile.toContentAttachmentData(): ContentAttachmentData { + if (mimeType == null) Timber.w("No mimeType") return ContentAttachmentData( path = originalPath, mimeType = mimeType, @@ -40,6 +42,7 @@ fun ChosenFile.toContentAttachmentData(): ContentAttachmentData { } fun ChosenAudio.toContentAttachmentData(): ContentAttachmentData { + if (mimeType == null) Timber.w("No mimeType") return ContentAttachmentData( path = originalPath, mimeType = mimeType, @@ -51,16 +54,17 @@ fun ChosenAudio.toContentAttachmentData(): ContentAttachmentData { ) } -fun ChosenFile.mapType(): ContentAttachmentData.Type { +private fun ChosenFile.mapType(): ContentAttachmentData.Type { return when { - mimeType.startsWith("image/") -> ContentAttachmentData.Type.IMAGE - mimeType.startsWith("video/") -> ContentAttachmentData.Type.VIDEO - mimeType.startsWith("audio/") -> ContentAttachmentData.Type.AUDIO - else -> ContentAttachmentData.Type.FILE + mimeType?.startsWith("image/") == true -> ContentAttachmentData.Type.IMAGE + mimeType?.startsWith("video/") == true -> ContentAttachmentData.Type.VIDEO + mimeType?.startsWith("audio/") == true -> ContentAttachmentData.Type.AUDIO + else -> ContentAttachmentData.Type.FILE } } fun ChosenImage.toContentAttachmentData(): ContentAttachmentData { + if (mimeType == null) Timber.w("No mimeType") return ContentAttachmentData( path = originalPath, mimeType = mimeType, @@ -75,6 +79,7 @@ fun ChosenImage.toContentAttachmentData(): ContentAttachmentData { } fun ChosenVideo.toContentAttachmentData(): ContentAttachmentData { + if (mimeType == null) Timber.w("No mimeType") return ContentAttachmentData( path = originalPath, mimeType = mimeType, From 08970ad8c1beb1bf33c9f125ad91af6e94593ca8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Dec 2019 09:56:58 +0100 Subject: [PATCH 08/22] Fix a crash on public room list It's maybe a workaround, as it should not happen, but at least it will not crash anymore --- .../riotx/features/roomdirectory/RoomDirectoryViewModel.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/riotx/features/roomdirectory/RoomDirectoryViewModel.kt b/vector/src/main/java/im/vector/riotx/features/roomdirectory/RoomDirectoryViewModel.kt index d89f0e2b99..dcd64c6a46 100644 --- a/vector/src/main/java/im/vector/riotx/features/roomdirectory/RoomDirectoryViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/roomdirectory/RoomDirectoryViewModel.kt @@ -178,7 +178,9 @@ class RoomDirectoryViewModel @AssistedInject constructor(@Assisted initialState: copy( asyncPublicRoomsRequest = Success(data.chunk!!), // It's ok to append at the end of the list, so I use publicRooms.size() - publicRooms = publicRooms.appendAt(data.chunk!!, publicRooms.size), + publicRooms = publicRooms.appendAt(data.chunk!!, publicRooms.size) + // Rageshake #8206 tells that we can have several times the same room + .distinctBy { it.roomId }, hasMore = since != null ) } From 9d26ba3186e63ba6f7e7202bda81198f83d430dd Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Dec 2019 10:57:00 +0100 Subject: [PATCH 09/22] Fix rendering issue with HTML formatted body --- CHANGES.md | 1 + vector/build.gradle | 1 + .../src/main/assets/open_source_licenses.html | 5 +++ .../vector/riotx/core/di/VectorComponent.kt | 3 ++ .../action/MessageActionsViewModel.kt | 10 ++++- .../timeline/factory/MessageItemFactory.kt | 6 ++- .../features/html/VectorHtmlCompressor.kt | 40 +++++++++++++++++++ 7 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 vector/src/main/java/im/vector/riotx/features/html/VectorHtmlCompressor.kt diff --git a/CHANGES.md b/CHANGES.md index 5f83727cd7..50279bcf0e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,6 +15,7 @@ Bugfix 🐛: - Scroll breadcrumbs to top when opened - Render default room name when it starts with an emoji (#477) - Do not display " (IRC)" in display names https://github.com/vector-im/riot-android/issues/444 + - Fix rendering issue with HTML formatted body Translations 🗣: - diff --git a/vector/build.gradle b/vector/build.gradle index 8a2df7c120..de15a67fbd 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -293,6 +293,7 @@ dependencies { implementation 'me.gujun.android:span:1.7' implementation "io.noties.markwon:core:$markwon_version" implementation "io.noties.markwon:html:$markwon_version" + implementation 'com.googlecode.htmlcompressor:htmlcompressor:1.4' implementation 'me.saket:better-link-movement-method:2.2.0' implementation 'com.google.android:flexbox:1.1.1' implementation "androidx.autofill:autofill:$autofill_version" diff --git a/vector/src/main/assets/open_source_licenses.html b/vector/src/main/assets/open_source_licenses.html index 3cd500138a..2b08270c89 100755 --- a/vector/src/main/assets/open_source_licenses.html +++ b/vector/src/main/assets/open_source_licenses.html @@ -359,6 +359,11 @@ SOFTWARE.
Copyright 2018 Kumar Bibek +
  • + htmlcompressor +
    + Copyright 2017 Sergiy Kovalchuk +
  •  Apache License
    diff --git a/vector/src/main/java/im/vector/riotx/core/di/VectorComponent.kt b/vector/src/main/java/im/vector/riotx/core/di/VectorComponent.kt
    index c8c5d697f6..b78e291506 100644
    --- a/vector/src/main/java/im/vector/riotx/core/di/VectorComponent.kt
    +++ b/vector/src/main/java/im/vector/riotx/core/di/VectorComponent.kt
    @@ -38,6 +38,7 @@ import im.vector.riotx.features.home.AvatarRenderer
     import im.vector.riotx.features.home.HomeRoomListDataSource
     import im.vector.riotx.features.home.group.SelectedGroupDataSource
     import im.vector.riotx.features.html.EventHtmlRenderer
    +import im.vector.riotx.features.html.VectorHtmlCompressor
     import im.vector.riotx.features.navigation.Navigator
     import im.vector.riotx.features.notifications.*
     import im.vector.riotx.features.rageshake.BugReporter
    @@ -87,6 +88,8 @@ interface VectorComponent {
     
         fun eventHtmlRenderer(): EventHtmlRenderer
     
    +    fun vectorHtmlCompressor(): VectorHtmlCompressor
    +
         fun navigator(): Navigator
     
         fun errorFormatter(): ErrorFormatter
    diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt
    index 102412948b..3c7e4624fe 100644
    --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt
    +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt
    @@ -41,6 +41,7 @@ import im.vector.riotx.core.resources.StringProvider
     import im.vector.riotx.features.home.room.detail.timeline.format.NoticeEventFormatter
     import im.vector.riotx.features.home.room.detail.timeline.item.MessageInformationData
     import im.vector.riotx.features.html.EventHtmlRenderer
    +import im.vector.riotx.features.html.VectorHtmlCompressor
     import java.text.SimpleDateFormat
     import java.util.*
     
    @@ -82,6 +83,7 @@ data class MessageActionState(
     class MessageActionsViewModel @AssistedInject constructor(@Assisted
                                                               initialState: MessageActionState,
                                                               private val eventHtmlRenderer: Lazy,
    +                                                          private val htmlCompressor: VectorHtmlCompressor,
                                                               private val session: Session,
                                                               private val noticeEventFormatter: NoticeEventFormatter,
                                                               private val stringProvider: StringProvider
    @@ -170,8 +172,12 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted
                 EventType.MESSAGE     -> {
                     val messageContent: MessageContent? = timelineEvent()?.getLastMessageContent()
                     if (messageContent is MessageTextContent && messageContent.format == MessageType.FORMAT_MATRIX_HTML) {
    -                    eventHtmlRenderer.get().render(messageContent.formattedBody
    -                            ?: messageContent.body)
    +                    val html = messageContent.formattedBody
    +                            ?.takeIf { it.isNotBlank() }
    +                            ?.let { htmlCompressor.compress(it) }
    +                            ?: messageContent.body
    +
    +                    eventHtmlRenderer.get().render(html)
                     } else {
                         messageContent?.body
                     }
    diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt
    index 9c96f17022..30f4e94cfb 100644
    --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt
    +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt
    @@ -46,6 +46,7 @@ import im.vector.riotx.features.home.room.detail.timeline.tools.createLinkMoveme
     import im.vector.riotx.features.home.room.detail.timeline.tools.linkify
     import im.vector.riotx.features.html.CodeVisitor
     import im.vector.riotx.features.html.EventHtmlRenderer
    +import im.vector.riotx.features.html.VectorHtmlCompressor
     import im.vector.riotx.features.media.ImageContentRenderer
     import im.vector.riotx.features.media.VideoContentRenderer
     import me.gujun.android.span.span
    @@ -57,6 +58,7 @@ class MessageItemFactory @Inject constructor(
             private val dimensionConverter: DimensionConverter,
             private val timelineMediaSizeProvider: TimelineMediaSizeProvider,
             private val htmlRenderer: Lazy,
    +        private val htmlCompressor: VectorHtmlCompressor,
             private val stringProvider: StringProvider,
             private val imageContentRenderer: ImageContentRenderer,
             private val messageInformationDataFactory: MessageInformationDataFactory,
    @@ -227,6 +229,7 @@ class MessageItemFactory @Inject constructor(
                                             attributes: AbsMessageItem.Attributes): VectorEpoxyModel<*>? {
             val isFormatted = messageContent.formattedBody.isNullOrBlank().not()
             return if (isFormatted) {
    +            // First detect if the message contains some code block(s) or inline code
                 val localFormattedBody = htmlRenderer.get().parse(messageContent.body) as Document
                 val codeVisitor = CodeVisitor()
                 codeVisitor.visit(localFormattedBody)
    @@ -240,7 +243,8 @@ class MessageItemFactory @Inject constructor(
                         buildMessageTextItem(codeFormatted, false, informationData, highlight, callback, attributes)
                     }
                     CodeVisitor.Kind.NONE   -> {
    -                    val formattedBody = htmlRenderer.get().render(messageContent.formattedBody!!)
    +                    val compressed = htmlCompressor.compress(messageContent.formattedBody!!)
    +                    val formattedBody = htmlRenderer.get().render(compressed)
                         buildMessageTextItem(formattedBody, true, informationData, highlight, callback, attributes)
                     }
                 }
    diff --git a/vector/src/main/java/im/vector/riotx/features/html/VectorHtmlCompressor.kt b/vector/src/main/java/im/vector/riotx/features/html/VectorHtmlCompressor.kt
    new file mode 100644
    index 0000000000..9f3cf96a7e
    --- /dev/null
    +++ b/vector/src/main/java/im/vector/riotx/features/html/VectorHtmlCompressor.kt
    @@ -0,0 +1,40 @@
    +/*
    + * Copyright 2019 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.
    + */
    +
    +package im.vector.riotx.features.html
    +
    +import com.googlecode.htmlcompressor.compressor.Compressor
    +import com.googlecode.htmlcompressor.compressor.HtmlCompressor
    +import javax.inject.Inject
    +import javax.inject.Singleton
    +
    +@Singleton
    +class VectorHtmlCompressor @Inject constructor() {
    +
    +    // All default options are suitable so far
    +    private val htmlCompressor: Compressor = HtmlCompressor()
    +
    +    fun compress(html: String): String {
    +        var result = htmlCompressor.compress(html)
    +
    +        // Trim space after 
    and

    , unfortunately the method setRemoveSurroundingSpaces() from the doc does not exist + result = result.replace("
    ", "
    ") + result = result.replace("
    ", "
    ") + result = result.replace("

    ", "

    ") + + return result + } +} From c48a439eea00dd75f508758006283df2aa9121a0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Dec 2019 16:03:10 +0100 Subject: [PATCH 10/22] Add @JvmStatic for performance reasons. See https://github.com/airbnb/MvRx/wiki/Advanced-Concepts#mvrxviewmodel --- .../home/room/detail/timeline/action/MessageActionsViewModel.kt | 1 + .../room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt | 1 + .../room/detail/timeline/reactions/ViewReactionsViewModel.kt | 1 + .../home/room/list/actions/RoomListQuickActionsViewModel.kt | 1 + .../riotx/features/reactions/EmojiSearchResultViewModel.kt | 1 + .../vector/riotx/features/settings/push/PushGatewaysViewModel.kt | 1 + 6 files changed, 6 insertions(+) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt index 3c7e4624fe..2de1fb225d 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt @@ -102,6 +102,7 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted val quickEmojis = listOf("👍", "👎", "😄", "🎉", "😕", "❀", "🚀", "👀") + @JvmStatic override fun create(viewModelContext: ViewModelContext, state: MessageActionState): MessageActionsViewModel? { val fragment: MessageActionsBottomSheet = (viewModelContext as FragmentViewModelContext).fragment() return fragment.messageActionViewModelFactory.create(state) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt index c1cccbef7a..64d8950420 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/edithistory/ViewEditHistoryViewModel.kt @@ -61,6 +61,7 @@ class ViewEditHistoryViewModel @AssistedInject constructor(@Assisted companion object : MvRxViewModelFactory { + @JvmStatic override fun create(viewModelContext: ViewModelContext, state: ViewEditHistoryViewState): ViewEditHistoryViewModel? { val fragment: ViewEditHistoryBottomSheet = (viewModelContext as FragmentViewModelContext).fragment() return fragment.viewEditHistoryViewModelFactory.create(state) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/reactions/ViewReactionsViewModel.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/reactions/ViewReactionsViewModel.kt index 9ec45b03b9..761e80dd59 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/reactions/ViewReactionsViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/reactions/ViewReactionsViewModel.kt @@ -68,6 +68,7 @@ class ViewReactionsViewModel @AssistedInject constructor(@Assisted companion object : MvRxViewModelFactory { + @JvmStatic override fun create(viewModelContext: ViewModelContext, state: DisplayReactionsViewState): ViewReactionsViewModel? { val fragment: ViewReactionsBottomSheet = (viewModelContext as FragmentViewModelContext).fragment() return fragment.viewReactionsViewModelFactory.create(state) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/list/actions/RoomListQuickActionsViewModel.kt b/vector/src/main/java/im/vector/riotx/features/home/room/list/actions/RoomListQuickActionsViewModel.kt index 7f7a1f41c4..1c4d414f18 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/list/actions/RoomListQuickActionsViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/list/actions/RoomListQuickActionsViewModel.kt @@ -37,6 +37,7 @@ class RoomListQuickActionsViewModel @AssistedInject constructor(@Assisted initia companion object : MvRxViewModelFactory { + @JvmStatic override fun create(viewModelContext: ViewModelContext, state: RoomListQuickActionsState): RoomListQuickActionsViewModel? { val fragment: RoomListQuickActionsBottomSheet = (viewModelContext as FragmentViewModelContext).fragment() return fragment.roomListActionsViewModelFactory.create(state) diff --git a/vector/src/main/java/im/vector/riotx/features/reactions/EmojiSearchResultViewModel.kt b/vector/src/main/java/im/vector/riotx/features/reactions/EmojiSearchResultViewModel.kt index 057c5d8159..01debac5ed 100644 --- a/vector/src/main/java/im/vector/riotx/features/reactions/EmojiSearchResultViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/reactions/EmojiSearchResultViewModel.kt @@ -42,6 +42,7 @@ class EmojiSearchResultViewModel @AssistedInject constructor( companion object : MvRxViewModelFactory { + @JvmStatic override fun create(viewModelContext: ViewModelContext, state: EmojiSearchResultViewState): EmojiSearchResultViewModel? { val activity: EmojiReactionPickerActivity = (viewModelContext as ActivityViewModelContext).activity() return activity.emojiSearchResultViewModelFactory.create(state) diff --git a/vector/src/main/java/im/vector/riotx/features/settings/push/PushGatewaysViewModel.kt b/vector/src/main/java/im/vector/riotx/features/settings/push/PushGatewaysViewModel.kt index dd773f4c22..db4586dff5 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/push/PushGatewaysViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/push/PushGatewaysViewModel.kt @@ -40,6 +40,7 @@ class PushGatewaysViewModel @AssistedInject constructor(@Assisted initialState: companion object : MvRxViewModelFactory { + @JvmStatic override fun create(viewModelContext: ViewModelContext, state: PushGatewayViewState): PushGatewaysViewModel? { val fragment: PushGatewaysFragment = (viewModelContext as FragmentViewModelContext).fragment() return fragment.pushGatewaysViewModelFactory.create(state) From 123ffe9f9c7c7dfb0ca65c5103d67df4b957b55a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Dec 2019 17:00:18 +0100 Subject: [PATCH 11/22] Cleanup --- .../riotx/features/home/group/GroupListViewModel.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/vector/src/main/java/im/vector/riotx/features/home/group/GroupListViewModel.kt b/vector/src/main/java/im/vector/riotx/features/home/group/GroupListViewModel.kt index bbeda127fc..24318bc508 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/group/GroupListViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/group/GroupListViewModel.kt @@ -68,14 +68,14 @@ class GroupListViewModel @AssistedInject constructor(@Assisted initialState: Gro } private fun observeSelectionState() { - selectSubscribe(GroupListViewState::selectedGroup) { - if (it != null) { + selectSubscribe(GroupListViewState::selectedGroup) { groupSummary -> + if (groupSummary != null) { val selectedGroup = _openGroupLiveData.value?.peekContent() - // We only wan to open group if the updated selectedGroup is a different one. - if (selectedGroup?.groupId != it.groupId) { - _openGroupLiveData.postLiveEvent(it) + // We only want to open group if the updated selectedGroup is a different one. + if (selectedGroup?.groupId != groupSummary.groupId) { + _openGroupLiveData.postLiveEvent(groupSummary) } - val optionGroup = Option.fromNullable(it) + val optionGroup = Option.just(groupSummary) selectedGroupStore.post(optionGroup) } } From 7eae85a39493bf0c851dc401ccd5ac09667b092f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Dec 2019 18:41:46 +0100 Subject: [PATCH 12/22] Add a ZeroItem to avoid automatic scroll when the breadcrumbs are updated from another client --- .../im/vector/riotx/core/epoxy/ZeroItem.kt | 30 +++++++++++++++++++ .../room/breadcrumbs/BreadcrumbsController.kt | 7 ++++- vector/src/main/res/layout/item_zero.xml | 4 +++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 vector/src/main/java/im/vector/riotx/core/epoxy/ZeroItem.kt create mode 100644 vector/src/main/res/layout/item_zero.xml diff --git a/vector/src/main/java/im/vector/riotx/core/epoxy/ZeroItem.kt b/vector/src/main/java/im/vector/riotx/core/epoxy/ZeroItem.kt new file mode 100644 index 0000000000..b64abdcc6c --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/core/epoxy/ZeroItem.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2019 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. + */ + +package im.vector.riotx.core.epoxy + +import com.airbnb.epoxy.EpoxyModelClass +import im.vector.riotx.R + +/** + * Item of size (0, 0). + * It can be useful to avoid automatic scroll of RecyclerView with Epoxy controller, when the first valuable item changes. + */ +@EpoxyModelClass(layout = R.layout.item_zero) +abstract class ZeroItem : VectorEpoxyModel() { + + class Holder : VectorEpoxyHolder() +} diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/breadcrumbs/BreadcrumbsController.kt b/vector/src/main/java/im/vector/riotx/features/home/room/breadcrumbs/BreadcrumbsController.kt index bfc91bf5a1..3b77835917 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/breadcrumbs/BreadcrumbsController.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/breadcrumbs/BreadcrumbsController.kt @@ -19,6 +19,7 @@ package im.vector.riotx.features.home.room.breadcrumbs import android.view.View import com.airbnb.epoxy.EpoxyController import im.vector.matrix.android.api.util.toMatrixItem +import im.vector.riotx.core.epoxy.zeroItem import im.vector.riotx.core.utils.DebouncedClickListener import im.vector.riotx.features.home.AvatarRenderer import javax.inject.Inject @@ -45,9 +46,13 @@ class BreadcrumbsController @Inject constructor( override fun buildModels() { val safeViewState = viewState ?: return + // Add a ZeroItem to avoid automatic scroll when the breadcrumbs are updated from another client + zeroItem { + id("top") + } + // An empty breadcrumbs list can only be temporary because when entering in a room, // this one is added to the breadcrumbs - safeViewState.asyncBreadcrumbs.invoke() ?.forEach { breadcrumbsItem { diff --git a/vector/src/main/res/layout/item_zero.xml b/vector/src/main/res/layout/item_zero.xml new file mode 100644 index 0000000000..ec7c4e3f98 --- /dev/null +++ b/vector/src/main/res/layout/item_zero.xml @@ -0,0 +1,4 @@ + + From 648691656a9e0dff24001126f4bb624cdb72058a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Dec 2019 19:20:44 +0100 Subject: [PATCH 13/22] Disable click on Stickers (#703) --- CHANGES.md | 1 + .../detail/timeline/factory/MessageItemFactory.kt | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 50279bcf0e..133dba8909 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -16,6 +16,7 @@ Bugfix 🐛: - Render default room name when it starts with an emoji (#477) - Do not display " (IRC)" in display names https://github.com/vector-im/riot-android/issues/444 - Fix rendering issue with HTML formatted body + - Disable click on Stickers (#703) Translations 🗣: - diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt index 30f4e94cfb..c2b2b67129 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt @@ -181,10 +181,14 @@ class MessageItemFactory @Inject constructor( .playable(messageContent.info?.mimeType == "image/gif") .highlighted(highlight) .mediaData(data) - .clickListener( - DebouncedClickListener(View.OnClickListener { view -> - callback?.onImageMessageClicked(messageContent, data, view) - })) + .apply { + if (messageContent.type != MessageType.MSGTYPE_STICKER_LOCAL) { + clickListener( + DebouncedClickListener(View.OnClickListener { view -> + callback?.onImageMessageClicked(messageContent, data, view) + })) + } + } } private fun buildVideoMessageItem(messageContent: MessageVideoContent, From b0ff2cb4bb283cf2ed594987ed0234b3d5a5d1f7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 18 Dec 2019 19:31:10 +0100 Subject: [PATCH 14/22] cleanup --- .../vector/riotx/features/permalink/PermalinkHandlerActivity.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/vector/src/main/java/im/vector/riotx/features/permalink/PermalinkHandlerActivity.kt b/vector/src/main/java/im/vector/riotx/features/permalink/PermalinkHandlerActivity.kt index 08e09fa48d..5339a2c6f9 100644 --- a/vector/src/main/java/im/vector/riotx/features/permalink/PermalinkHandlerActivity.kt +++ b/vector/src/main/java/im/vector/riotx/features/permalink/PermalinkHandlerActivity.kt @@ -27,7 +27,6 @@ import im.vector.riotx.core.utils.toast import im.vector.riotx.features.home.LoadingFragment import im.vector.riotx.features.login.LoginActivity import io.reactivex.android.schedulers.AndroidSchedulers -import kotlinx.android.synthetic.debug.activity_test_material_theme.* import java.util.concurrent.TimeUnit import javax.inject.Inject From 6652965e481c22015be97a01ea6f2a79312c2912 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 19 Dec 2019 10:46:11 +0100 Subject: [PATCH 15/22] Ignore lint issue --- vector/lint.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vector/lint.xml b/vector/lint.xml index b6da88aedd..6a9b0634a7 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -31,4 +31,8 @@ + + + + From 4b0dfa49f4429369f5f90f11e2f90b438e750efd Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 19 Dec 2019 11:44:07 +0100 Subject: [PATCH 16/22] Limit sticker size in the timeline --- CHANGES.md | 1 + .../session/room/timeline/TimelineEvent.kt | 4 +-- .../timeline/factory/MessageItemFactory.kt | 4 ++- .../timeline/item/MessageImageVideoItem.kt | 4 ++- .../features/media/ImageContentRenderer.kt | 30 +++++++++++++------ 5 files changed, 30 insertions(+), 13 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 133dba8909..eef8808393 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,7 @@ Features ✹: Improvements 🙌: - Handle navigation to room via room alias (#201) - Open matrix.to link in RiotX (#57) + - Limit sticker size in the timeline Other changes: - Use same default room colors than Riot-Web diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/timeline/TimelineEvent.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/timeline/TimelineEvent.kt index ed7f49aa46..caa64a85f8 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/timeline/TimelineEvent.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/room/timeline/TimelineEvent.kt @@ -104,7 +104,7 @@ fun TimelineEvent.getLastMessageContent(): MessageContent? { root.getClearContent().toModel() } else { annotations?.editSummary?.aggregatedContent?.toModel() - ?: root.getClearContent().toModel() + ?: root.getClearContent().toModel() } } @@ -116,7 +116,7 @@ fun TimelineEvent.getLastMessageBody(): String? { if (lastMessageContent != null) { return lastMessageContent.newContent?.toModel()?.body - ?: lastMessageContent.body + ?: lastMessageContent.body } return null diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt index c2b2b67129..9e05cdcc18 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt @@ -182,7 +182,9 @@ class MessageItemFactory @Inject constructor( .highlighted(highlight) .mediaData(data) .apply { - if (messageContent.type != MessageType.MSGTYPE_STICKER_LOCAL) { + if (messageContent.type == MessageType.MSGTYPE_STICKER_LOCAL) { + mode(ImageContentRenderer.Mode.STICKER) + } else { clickListener( DebouncedClickListener(View.OnClickListener { view -> callback?.onImageMessageClicked(messageContent, data, view) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/MessageImageVideoItem.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/MessageImageVideoItem.kt index 457f30cbf4..2fd46ddf12 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/MessageImageVideoItem.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/MessageImageVideoItem.kt @@ -36,6 +36,8 @@ abstract class MessageImageVideoItem : AbsMessageItem contentUrlResolver.resolveFullSize(data.url) + Mode.FULL_SIZE, + Mode.STICKER -> contentUrlResolver.resolveFullSize(data.url) Mode.THUMBNAIL -> contentUrlResolver.resolveThumbnail(data.url, width, height, ContentUrlResolver.ThumbnailMethod.SCALE) } // Fallback to base url @@ -149,18 +152,27 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder: val maxImageHeight = data.maxHeight val width = data.width ?: maxImageWidth val height = data.height ?: maxImageHeight - var finalHeight = -1 var finalWidth = -1 + var finalHeight = -1 // if the image size is known // compute the expected height if (width > 0 && height > 0) { - if (mode == Mode.FULL_SIZE) { - finalHeight = height - finalWidth = width - } else { - finalHeight = Math.min(maxImageWidth * height / width, maxImageHeight) - finalWidth = finalHeight * width / height + when (mode) { + Mode.FULL_SIZE -> { + finalHeight = height + finalWidth = width + } + Mode.THUMBNAIL -> { + finalHeight = min(maxImageWidth * height / width, maxImageHeight) + finalWidth = finalHeight * width / height + } + Mode.STICKER -> { + // limit on width + val maxWidthDp = min(dimensionConverter.dpToPx(120), maxImageWidth / 2) + finalWidth = min(dimensionConverter.dpToPx(width), maxWidthDp) + finalHeight = finalWidth * height / width + } } } // ensure that some values are properly initialized From bb9510e59b7bf7abe2ddc7b7c2d92533c0282d45 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 19 Dec 2019 12:05:30 +0100 Subject: [PATCH 17/22] Create Size data class --- .../im/vector/riotx/core/ui/model/Size.kt | 20 ++++++++++++++++++ .../features/media/ImageContentRenderer.kt | 21 ++++++++++--------- 2 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 vector/src/main/java/im/vector/riotx/core/ui/model/Size.kt diff --git a/vector/src/main/java/im/vector/riotx/core/ui/model/Size.kt b/vector/src/main/java/im/vector/riotx/core/ui/model/Size.kt new file mode 100644 index 0000000000..65ab0ad2b2 --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/core/ui/model/Size.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2019 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. + */ + +package im.vector.riotx.core.ui.model + +// android.util.Size in API 21+ +data class Size(val width: Int, val height: Int) diff --git a/vector/src/main/java/im/vector/riotx/features/media/ImageContentRenderer.kt b/vector/src/main/java/im/vector/riotx/features/media/ImageContentRenderer.kt index 60abd19191..909fd5b8eb 100644 --- a/vector/src/main/java/im/vector/riotx/features/media/ImageContentRenderer.kt +++ b/vector/src/main/java/im/vector/riotx/features/media/ImageContentRenderer.kt @@ -31,6 +31,7 @@ import im.vector.matrix.android.internal.crypto.attachments.ElementToDecrypt import im.vector.riotx.core.di.ActiveSessionHolder import im.vector.riotx.core.glide.GlideApp import im.vector.riotx.core.glide.GlideRequest +import im.vector.riotx.core.ui.model.Size import im.vector.riotx.core.utils.DimensionConverter import im.vector.riotx.core.utils.isLocalFile import kotlinx.android.parcel.Parcelize @@ -62,13 +63,13 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder: } fun render(data: Data, mode: Mode, imageView: ImageView) { - val (width, height) = processSize(data, mode) - imageView.layoutParams.height = height - imageView.layoutParams.width = width + val size = processSize(data, mode) + imageView.layoutParams.width = size.width + imageView.layoutParams.height = size.height // a11y imageView.contentDescription = data.filename - createGlideRequest(data, mode, imageView, width, height) + createGlideRequest(data, mode, imageView, size) .dontAnimate() .transform(RoundedCorners(dimensionConverter.dpToPx(8))) .thumbnail(0.3f) @@ -76,12 +77,12 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder: } fun renderFitTarget(data: Data, mode: Mode, imageView: ImageView, callback: ((Boolean) -> Unit)? = null) { - val (width, height) = processSize(data, mode) + val size = processSize(data, mode) // a11y imageView.contentDescription = data.filename - createGlideRequest(data, mode, imageView, width, height) + createGlideRequest(data, mode, imageView, size) .listener(object : RequestListener { override fun onLoadFailed(e: GlideException?, model: Any?, @@ -104,7 +105,7 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder: .into(imageView) } - private fun createGlideRequest(data: Data, mode: Mode, imageView: ImageView, width: Int, height: Int): GlideRequest { + private fun createGlideRequest(data: Data, mode: Mode, imageView: ImageView, size: Size): GlideRequest { return if (data.elementToDecrypt != null) { // Encrypted image GlideApp @@ -116,7 +117,7 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder: val resolvedUrl = when (mode) { Mode.FULL_SIZE, Mode.STICKER -> contentUrlResolver.resolveFullSize(data.url) - Mode.THUMBNAIL -> contentUrlResolver.resolveThumbnail(data.url, width, height, ContentUrlResolver.ThumbnailMethod.SCALE) + Mode.THUMBNAIL -> contentUrlResolver.resolveThumbnail(data.url, size.width, size.height, ContentUrlResolver.ThumbnailMethod.SCALE) } // Fallback to base url ?: data.url @@ -147,7 +148,7 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder: ) } - private fun processSize(data: Data, mode: Mode): Pair { + private fun processSize(data: Data, mode: Mode): Size { val maxImageWidth = data.maxWidth val maxImageHeight = data.maxHeight val width = data.width ?: maxImageWidth @@ -182,6 +183,6 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder: if (finalWidth < 0) { finalWidth = maxImageWidth } - return Pair(finalWidth, finalHeight) + return Size(finalWidth, finalHeight) } } From bf69810f8f648099ca11828a428771d0cd73973f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 19 Dec 2019 12:05:47 +0100 Subject: [PATCH 18/22] Bottom sheet event preview for Sticker --- .../room/detail/timeline/action/MessageActionsViewModel.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt index 2de1fb225d..1303c3aad9 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageActionsViewModel.kt @@ -170,7 +170,8 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted private fun computeMessageBody(timelineEvent: Async): CharSequence? { return when (timelineEvent()?.root?.getClearType()) { - EventType.MESSAGE -> { + EventType.MESSAGE, + EventType.STICKER -> { val messageContent: MessageContent? = timelineEvent()?.getLastMessageContent() if (messageContent is MessageTextContent && messageContent.format == MessageType.FORMAT_MATRIX_HTML) { val html = messageContent.formattedBody From 13439769a1cd51619dd5bde68cd0ecad3ad40958 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 19 Dec 2019 14:01:58 +0100 Subject: [PATCH 19/22] Update wording --- vector/src/main/res/values/strings_riotX.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index f315109ddf..753a15274a 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -114,7 +114,7 @@ Sign up to %1$s - Username + Username or email Password Next That username is taken From 156cc1aa4ab517c6bfa430754958d21ffaa98b9d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 19 Dec 2019 15:50:18 +0100 Subject: [PATCH 20/22] Import Strings from Riot --- .../src/main/res/values-cs/strings.xml | 82 ++ .../src/main/res/values-ko/strings.xml | 2 +- .../src/main/res/values-sk/strings.xml | 63 +- .../src/main/res/values-zh-rCN/strings.xml | 5 +- .../src/main/res/values/strings.xml | 14 + .../src/main/res/values/strings_RiotX.xml | 15 +- vector/src/main/res/values-bn-rIN/strings.xml | 118 +- vector/src/main/res/values-cs/strings.xml | 13 +- vector/src/main/res/values-de/strings.xml | 4 +- vector/src/main/res/values-es/strings.xml | 30 + vector/src/main/res/values-eu/strings.xml | 35 + vector/src/main/res/values-fi/strings.xml | 168 ++- vector/src/main/res/values-fr/strings.xml | 37 +- vector/src/main/res/values-hu/strings.xml | 36 + vector/src/main/res/values-id/strings.xml | 2 +- vector/src/main/res/values-it/strings.xml | 1203 +++++++++-------- vector/src/main/res/values-sq/strings.xml | 100 +- vector/src/main/res/values-zh-rCN/strings.xml | 9 + vector/src/main/res/values-zh-rTW/strings.xml | 39 +- vector/src/main/res/values/strings.xml | 164 ++- vector/src/main/res/values/strings_riotX.xml | 159 --- 21 files changed, 1445 insertions(+), 853 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-cs/strings.xml b/matrix-sdk-android/src/main/res/values-cs/strings.xml index f6e23752c3..61f3db0b25 100644 --- a/matrix-sdk-android/src/main/res/values-cs/strings.xml +++ b/matrix-sdk-android/src/main/res/values-cs/strings.xml @@ -82,4 +82,86 @@ PrĂĄzdnĂĄ mĂ­stnost + %s upravil/a tuto mĂ­stnost. + + ZprĂĄva byla smazĂĄna [dĆŻvod: %1$s] + ZprĂĄva smazĂĄna [smazal/a %1$s] [dĆŻvod: %2$s] + "%1$s obnovil/a pozvĂĄnku do mĂ­stnosti pro %2$s" + Kočka + Lev + KƯƈ + JednoroĆŸec + Prase + Slon + KrĂĄlĂ­k + Panda + Kohout + TučnĂĄk + Ćœelva + Ryba + Chobotnice + MotĂœl + Květina + Strom + Kaktus + Houba + GlĂłbus + MěsĂ­c + Mrak + Oheƈ + BanĂĄn + Jablko + Jahoda + Kukuƙice + Pizza + Dort + Srdce + SmajlĂ­k + Robot + Klobouk + BrĂœle + Santa + ZvednutĂœ palec + DeĆĄtnĂ­k + PƙesĂ­pacĂ­ hodiny + Hodiny + DĂĄrek + ĆœĂĄrovka + KnĂ­ĆŸka + TuĆŸka + Sponka + NĆŻĆŸky + ZĂĄmek + Klíč + Kladivo + Telefon + Vlajka + Vlak + Kolo + Letadlo + Raketa + PohĂĄr + Míč + Kytara + Trumpeta + Zvon + Kotva + SluchĂĄtka + SloĆŸka + ÚvodnĂ­ synchronizace: +\nStahuji Ășčet
 + UvodnĂ­ synchronizace: +\nStahuji klíče + UvodnĂ­ synchnizace: +\nStahuji mĂ­stnost + UvodnĂ­ synchronizace: +\nStahuji moje mĂ­stnosti + UvodnĂ­ synchonizace: +\nStahuji mĂ­stnosti, kterĂ© jsem opustil/a + ÚvodnĂ­ sychronizace: +\nImportuji komunity + ÚvodnĂ­ synchronizace: +\nImportuji data Ășčtu + + PosĂ­lĂĄm zprĂĄvu
 diff --git a/matrix-sdk-android/src/main/res/values-ko/strings.xml b/matrix-sdk-android/src/main/res/values-ko/strings.xml index 9dfbb6609b..68e94bb641 100644 --- a/matrix-sdk-android/src/main/res/values-ko/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ko/strings.xml @@ -49,7 +49,7 @@ %1$s님읎 %2$s님에êȌ ë°© 쎈대넌 ëłŽëƒˆìŠ”ë‹ˆë‹€ %1$s님읎 %2$s의 쎈대넌 수띜했슔니닀 - ** 암혞넌 핮독할 수 없음: %s ** + ** 암혞넌 ëł”í˜ží™”í•  수 없음: %s ** 발신읞의 ꞰꞰ에서 읎 메시지의 킀넌 ëłŽë‚Žì§€ 않았슔니닀. ꎀ렚 대화 diff --git a/matrix-sdk-android/src/main/res/values-sk/strings.xml b/matrix-sdk-android/src/main/res/values-sk/strings.xml index d5c7d95fd6..b729932b1f 100644 --- a/matrix-sdk-android/src/main/res/values-sk/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sk/strings.xml @@ -88,70 +88,70 @@ SprĂĄva odstrĂĄnenĂĄ pouĆŸĂ­vateÄŸom %1$s SprĂĄva odstrĂĄnenĂĄ [dĂŽvod: %1$s] SprĂĄva odstrĂĄnenĂĄ pouĆŸĂ­vateÄŸom %1$s [dĂŽvod: %2$s] - Pes - Mačka - Lev + Hlava psa + Hlava mačky + Hlava leva KÎƈ - JednoroĆŸec - Prasa + Hlava jednoroĆŸca + Hlava prasaĆ„a Slon - Zajac - Panda + Hlava zajaca + Hlava pandy KohĂșt Tučniak Korytnačka Ryba Chobotnica MotĂœÄŸ - Kvetina - Strom + TulipĂĄn + ListnatĂœ strom Kaktus - HrĂ­b + Huba ZemeguÄŸa - Mesiac + Polmesiac Oblak Oheƈ BanĂĄn - Jablko + ČervenĂ© jablko Jahoda - Kukurica + KukuričnĂœ klas Pizza - Koláč - Srdce - Úsmev + NarodeninovĂĄ torta + ČervenĂ© + Ć keriaca sa tvĂĄr Robot - KlobĂșk + Cylinder Okuliare - Skrutkovač - MikulĂĄĆĄ + FrancĂșzsky kÄŸĂșč + Santa Claus Palec nahor DĂĄĆŸdnik PresĂœpacie hodiny - Hodiny - Darček + BudĂ­k + ZabalenĂœ darček Ćœiarovka - Kniha + ZatvorenĂĄ kniha Ceruzka - KancelĂĄrska sponka + Sponka na papier NoĆŸnice - ZĂĄmok + ZatvorenĂĄ zĂĄmka KÄŸĂșč Kladivo TelefĂłn - Vlajka - Vlak + KockovanĂĄ zĂĄstava + RuĆĄeƈ Bicykel Lietadlo Raketa Trofej - Lopta + Futbal Gitara TrĂșbka - Zvonček + Zvon Kotva - SchlĂșchadlĂĄ - Priečinok - Pin + SlĂșchadlĂĄ + Fascikel + Ć pendlĂ­k ÚvodnĂĄ synchronizĂĄcia: \nPrebieha import Ășčtu
 @@ -173,4 +173,5 @@ Odosielanie sprĂĄvy
 VymazaĆ„ sprĂĄvy na odoslanie + %1$s zamietol pozvanie pouĆŸĂ­vateÄŸa %2$s vstĂșpiĆ„ do miestnosti diff --git a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml index 3aed8858a3..6e3ced3048 100644 --- a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml +++ b/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml @@ -13,7 +13,7 @@ %1$s 氁犁äș† %2$s %1$s æ›Žæąäș†ä»–ä»Źçš„ć€Žćƒ %1$s ć°†ä»–ä»Źçš„æ˜”ç§°èźŸçœźäžș %2$s - %1$s æŠŠä»–ä»Źçš„æ˜”ç§°ä»Ž %2$s æ”čäžș %3$s + %1$s 把他的昔称从 %2$s æ”čäžș %3$s %1$s 移陀äș†ä»–ä»Źçš„æ˜”称 (%2$s) %1$s æŠŠäž»éą˜æ”čäžș %2$s %1$s æŠŠèŠć€©ćź€ćç§°æ”čäžș %2$s @@ -167,4 +167,7 @@ æ­Łćœšć‘é€æ¶ˆæŻâ€Š æž…é™€æ­Łćœšć‘é€é˜Ÿćˆ— + %1$s æ’€ć›žäș†ćŻč %2$s é‚€èŻ· + çœźéĄ¶ + diff --git a/matrix-sdk-android/src/main/res/values/strings.xml b/matrix-sdk-android/src/main/res/values/strings.xml index ce26c22137..e611ae25b0 100644 --- a/matrix-sdk-android/src/main/res/values/strings.xml +++ b/matrix-sdk-android/src/main/res/values/strings.xml @@ -243,4 +243,18 @@ Sending message
 Clear sending queue + %1$s\'s invitation. Reason: %2$s + %1$s invited %2$s. Reason: %3$s + %1$s invited you. Reason: %2$s + %1$s joined. Reason: %2$s + %1$s left. Reason: %2$s + %1$s rejected the invitation. Reason: %2$s + %1$s kicked %2$s. Reason: %3$s + %1$s unbanned %2$s. Reason: %3$s + %1$s banned %2$s. Reason: %3$s + %1$s sent an invitation to %2$s to join the room. Reason: %3$s + %1$s revoked the invitation for %2$s to join the room. Reason: %3$s + %1$s accepted the invitation for %2$s. Reason: %3$s + %1$s withdrew %2$s\'s invitation. Reason: %3$s + diff --git a/matrix-sdk-android/src/main/res/values/strings_RiotX.xml b/matrix-sdk-android/src/main/res/values/strings_RiotX.xml index a22533c6d1..03bc6d3684 100644 --- a/matrix-sdk-android/src/main/res/values/strings_RiotX.xml +++ b/matrix-sdk-android/src/main/res/values/strings_RiotX.xml @@ -2,19 +2,6 @@ - %1$s\'s invitation. Reason: %2$s - %1$s invited %2$s. Reason: %3$s - %1$s invited you. Reason: %2$s - %1$s joined. Reason: %2$s - %1$s left. Reason: %2$s - %1$s rejected the invitation. Reason: %2$s - %1$s kicked %2$s. Reason: %3$s - %1$s unbanned %2$s. Reason: %3$s - %1$s banned %2$s. Reason: %3$s - %1$s sent an invitation to %2$s to join the room. Reason: %3$s - %1$s revoked the invitation for %2$s to join the room. Reason: %3$s - %1$s accepted the invitation for %2$s. Reason: %3$s - %1$s withdrew %2$s\'s invitation. Reason: %3$s - There is no network connection right now + \ No newline at end of file diff --git a/vector/src/main/res/values-bn-rIN/strings.xml b/vector/src/main/res/values-bn-rIN/strings.xml index 06ee50219e..a0af9661d4 100644 --- a/vector/src/main/res/values-bn-rIN/strings.xml +++ b/vector/src/main/res/values-bn-rIN/strings.xml @@ -336,12 +336,10 @@ àŠ­àŠżàŠĄàŠżàŠ“ àŠ•àŠČ àŠžàŠźà§àŠȘàŠŸàŠŠàŠšà§‡àŠ° àŠœàŠšà§àŠŻ Riot àŠ†àŠȘàŠšàŠŸàŠ° àŠ•à§àŠŻàŠŸàŠźà§‡àŠ°àŠŸ àŠàŠŹàŠ‚ àŠ†àŠȘàŠšàŠŸàŠ° àŠźàŠŸàŠ‡àŠ•à§àŠ°à§‹àŠ«à§‹àŠš àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠž àŠ•àŠ°àŠŸàŠ° àŠ…àŠšà§àŠźàŠ€àŠżàŠ° àŠȘà§àŠ°àŠŻàŠŒà§‹àŠœàŠšà„€ \n \nàŠ•àŠČ àŠ•àŠ°àŠ€à§‡ àŠžàŠ•à§àŠ·àŠź àŠčàŠ€à§‡ àŠȘàŠ°àŠŹàŠ°à§àŠ€à§€ àŠȘàŠȘ àŠ†àŠȘ àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠž àŠ…àŠšà§àŠźàŠ€àŠż àŠŠàŠżàŠšà„€ - Riot àŠ†àŠȘàŠšàŠŸàŠ° àŠ‡àŠźà§‡àŠČ àŠàŠŹàŠ‚ àŠ«à§‹àŠš àŠšàŠźà§àŠŹàŠ°àŠ—à§àŠČàŠżàŠ° àŠ‰àŠȘàŠ° àŠ­àŠżàŠ€à§àŠ€àŠż àŠ•àŠ°à§‡ àŠ…àŠšà§àŠŻàŠŸàŠšà§àŠŻ àŠźà§àŠŻàŠŸàŠŸà§àŠ°àŠżàŠ•à§àŠž àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€àŠŠà§‡àŠ° àŠ–à§àŠàŠœà§‡ àŠȘà§‡àŠ€à§‡ àŠ†àŠȘàŠšàŠŸàŠ° àŠ àŠżàŠ•àŠŸàŠšàŠŸ àŠŹàŠ‡ àŠȘàŠ°àŠżàŠšàŠżàŠ€àŠżàŠ—à§àŠČàŠż àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠž àŠ•àŠ°àŠŸàŠ° àŠ…àŠšà§àŠźàŠ€àŠżàŠ° àŠȘà§àŠ°àŠŻàŠŒà§‹àŠœàŠšà„€ + àŠ°àŠŸà§ŸàŠŸ àŠ…àŠšà§àŠŻàŠŸàŠšà§àŠŻ àŠźà§àŠŻàŠŸàŠŸà§àŠ°àŠżàŠ•à§àŠž àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€àŠŠà§‡àŠ° àŠ€àŠŸàŠŠà§‡àŠ° àŠ‡àŠźà§‡àŠČ àŠàŠŹàŠ‚ àŠ«à§‹àŠš àŠšàŠźà§àŠŹàŠ°àŠ—à§àŠČàŠżàŠ° àŠ‰àŠȘàŠ° àŠ­àŠżàŠ€à§àŠ€àŠż àŠ•àŠ°à§‡ àŠ†àŠȘàŠšàŠŸàŠ° àŠ àŠżàŠ•àŠŸàŠšàŠŸ àŠŹàŠ‡àŠŸàŠż àŠšà§‡àŠ• àŠ•àŠ°àŠ€à§‡ àŠȘàŠŸàŠ°à§‡à„€ àŠ†àŠȘàŠšàŠż àŠŻàŠŠàŠż àŠàŠ‡ àŠ‰àŠŠà§àŠŠà§‡àŠ¶à§àŠŻà§‡ àŠ†àŠȘàŠšàŠŸàŠ° àŠ àŠżàŠ•àŠŸàŠšàŠŸ àŠŹàŠ‡àŠŸàŠż àŠ­àŠŸàŠ— àŠ•àŠ°à§‡ àŠšàŠżàŠ€à§‡ àŠžàŠźà§àŠźàŠ€ àŠčàŠš àŠ€àŠŹà§‡ àŠŠàŠŻàŠŒàŠŸ àŠ•àŠ°à§‡ àŠȘàŠ°àŠŹàŠ°à§àŠ€à§€ àŠȘàŠȘ-àŠ†àŠȘàŠŸàŠżàŠ€à§‡ àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠžà§‡àŠ° àŠ…àŠšà§àŠźàŠ€àŠż àŠŠàŠżàŠšà„€ + àŠ°àŠŸà§ŸàŠŸ àŠ…àŠšà§àŠŻàŠŸàŠšà§àŠŻ àŠźà§àŠŻàŠŸàŠŸà§àŠ°àŠżàŠ•à§àŠž àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€àŠŠà§‡àŠ° àŠ€àŠŸàŠŠà§‡àŠ° àŠ‡àŠźà§‡àŠČ àŠàŠŹàŠ‚ àŠ«à§‹àŠš àŠšàŠźà§àŠŹàŠ°àŠ—à§àŠČàŠżàŠ° àŠ‰àŠȘàŠ° àŠ­àŠżàŠ€à§àŠ€àŠż àŠ•àŠ°à§‡ àŠ†àŠȘàŠšàŠŸàŠ° àŠ àŠżàŠ•àŠŸàŠšàŠŸ àŠŹàŠ‡àŠŸàŠż àŠšà§‡àŠ• àŠ•àŠ°àŠ€à§‡ àŠȘàŠŸàŠ°à§‡à„€ \n -\nàŠŠàŠŻàŠŒàŠŸ àŠ•àŠ°à§‡ àŠȘàŠ°àŠŹàŠ°à§àŠ€à§€ àŠȘàŠȘ-àŠ†àŠȘ àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠžà§‡àŠ° àŠ…àŠšà§àŠźàŠ€àŠż àŠŠàŠżà§Ÿà§‡ àŠ àŠżàŠ•àŠŸàŠšàŠŸ àŠŹàŠ‡ àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€àŠŠà§‡àŠ° Riot àŠ„à§‡àŠ•à§‡ àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠžàŠŻà§‹àŠ—à§àŠŻ àŠ•àŠ°à§àŠšà„€ - Riot àŠ•à§‡ àŠ†àŠȘàŠšàŠŸàŠ° àŠ‡àŠźà§‡àŠČ àŠàŠŹàŠ‚ àŠ«à§‹àŠš àŠšàŠźà§àŠŹàŠ°àŠ—à§àŠČàŠżàŠ° àŠ‰àŠȘàŠ° àŠ­àŠżàŠ€à§àŠ€àŠż àŠ•àŠ°à§‡ àŠ…àŠšà§àŠŻàŠŸàŠšà§àŠŻ àŠźà§àŠŻàŠŸàŠŸà§àŠ°àŠżàŠ•à§àŠž àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€àŠŠà§‡àŠ° àŠžàŠšà§àŠ§àŠŸàŠš àŠ•àŠ°àŠŸàŠ° àŠœàŠšà§àŠŻ àŠ†àŠȘàŠšàŠŸàŠ° àŠ àŠżàŠ•àŠŸàŠšàŠŸ àŠŹàŠ‡ àŠŻà§‹àŠ—àŠŸàŠŻà§‹àŠ— àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠž àŠ•àŠ°àŠŸàŠ° àŠ…àŠšà§àŠźàŠ€àŠżàŠ° àŠȘà§àŠ°àŠŻàŠŒà§‹àŠœàŠšà„€ -\n -\nRiot àŠ•à§‡ àŠ†àŠȘàŠšàŠŸàŠ° àŠȘàŠ°àŠżàŠšàŠżàŠ€àŠż àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠž àŠ•àŠ°àŠŸàŠ° àŠ…àŠšà§àŠźàŠ€àŠż àŠŠà§‡àŠŹà§‡àŠš \? +\nàŠ†àŠȘàŠšàŠż àŠàŠ‡ àŠ‰àŠŠà§àŠŠà§‡àŠ¶à§àŠŻà§‡ àŠ†àŠȘàŠšàŠŸàŠ° àŠ àŠżàŠ•àŠŸàŠšàŠŸ àŠŹàŠ‡ àŠ­àŠŸàŠ— àŠ•àŠ°àŠ€à§‡ àŠžàŠźà§àŠźàŠ€ àŠčàŠš\? "àŠŠà§àŠƒàŠ–àŠżàŠ€à„€ àŠ•àŠ°à§àŠź àŠžàŠžà§àŠšàŠŸàŠČàŠżàŠ€ àŠšàŠŸ, àŠ…àŠšà§àŠȘàŠžà§àŠ„àŠżàŠ€ àŠ…àŠšà§àŠźàŠ€àŠżàŠ° àŠœàŠšà§àŠŻ " @@ -726,7 +724,7 @@ àŠŹà§àŠŸ àŠ•àŠ°àŠŸàŠ° àŠžàŠźàŠŻàŠŒ àŠ¶à§àŠ°à§ àŠŹà§àŠŻàŠŸàŠ•àŠ—à§àŠ°àŠŸàŠ‰àŠšà§àŠĄ àŠžàŠżàŠ™à§àŠ• àŠžàŠ•à§àŠ·àŠź àŠ•àŠ°à§àŠš àŠžàŠżàŠ™à§àŠ• àŠ…àŠšà§àŠ°à§‹àŠ§ àŠžàŠźàŠŻàŠŒàŠžà§€àŠźàŠŸàŠ° - àŠȘà§àŠ°àŠ€àŠżàŠŸàŠż àŠ…àŠšà§àŠ°à§‹àŠ§à§‡àŠ° àŠźàŠ§à§àŠŻà§‡ àŠŹàŠżàŠČàŠźà§àŠŹ + àŠȘà§àŠ°àŠ€àŠżàŠŸàŠż àŠžàŠżàŠ™à§àŠ•à§‡àŠ° àŠźàŠ§à§àŠŻà§‡ àŠŹàŠżàŠČàŠźà§àŠŹ àŠžà§‡àŠ•à§‡àŠšà§àŠĄ àŠžà§‡àŠ•à§‡àŠšà§àŠĄ @@ -791,10 +789,10 @@ àŠĄà§‡àŠŸàŠŸ àŠžàŠ‚àŠ°àŠ•à§àŠ·àŠŁ àŠźà§‹àŠĄ àŠĄà§‡àŠŸàŠŸ àŠžàŠ‚àŠ°àŠ•à§àŠ·àŠŁ àŠźà§‹àŠĄ àŠàŠ•àŠŸàŠż àŠšàŠżàŠ°à§àŠŠàŠżàŠ·à§àŠŸ àŠ«àŠżàŠČà§àŠŸàŠŸàŠ° àŠȘà§àŠ°àŠŻàŠŒà§‹àŠ— àŠ•àŠ°à§‡ àŠŻàŠŸàŠ€à§‡ àŠ‰àŠȘàŠžà§àŠ„àŠżàŠ€àŠż àŠ†àŠȘàŠĄà§‡àŠŸ àŠàŠŹàŠ‚ àŠŸàŠŸàŠ‡àŠȘàŠżàŠ‚ àŠŹàŠżàŠœà§àŠžàŠȘà§àŠ€àŠż àŠ«àŠżàŠČà§àŠŸàŠŸàŠ° àŠ•àŠ°àŠŸ àŠčàŠŻàŠŒà„€ - àŠŻàŠšà§àŠ€à§àŠ° àŠŹàŠżàŠŹàŠ°àŠŁ + àŠŻàŠšà§àŠ€à§àŠ°à§‡àŠ° àŠ€àŠ„à§àŠŻ àŠ†àŠ‡àŠĄàŠż - àŠšàŠŸàŠź - àŠŻàŠšà§àŠ€à§àŠ°à§‡àŠ° àŠšàŠŸàŠź + àŠžàŠ°à§àŠŹàŠœàŠšà§€àŠš àŠšàŠŸàŠź + àŠžàŠ°à§àŠŹàŠœàŠšà§€àŠš àŠšàŠŸàŠź àŠ†àŠȘàŠĄà§‡àŠŸ àŠ•àŠ°à§àŠš àŠ¶à§‡àŠ· àŠŠà§‡àŠ–àŠŸ %1$s @ %2$s àŠàŠ‡ àŠ…àŠȘàŠŸàŠ°à§‡àŠ¶àŠš àŠ…àŠ€àŠżàŠ°àŠżàŠ•à§àŠ€ àŠȘà§àŠ°àŠźàŠŸàŠŁà§€àŠ•àŠ°àŠŁ àŠȘà§àŠ°àŠŻàŠŒà§‹àŠœàŠšà„€ @@ -942,9 +940,9 @@ àŠĄàŠżàŠ•à§àŠ°àŠżàŠȘàŠ¶àŠš àŠžàŠźàŠžà§àŠŻàŠŸ àŠȘà§àŠ°à§‡àŠ°àŠ• àŠĄàŠżàŠ­àŠŸàŠ‡àŠž àŠ€àŠ„à§àŠŻ - àŠŻàŠšà§àŠ€à§àŠ°à§‡àŠ° àŠšàŠŸàŠź - àŠšàŠŸàŠź - àŠĄàŠżàŠ­àŠŸàŠ‡àŠž àŠ†àŠ‡àŠĄàŠż + àŠžàŠ°à§àŠŹàŠœàŠšà§€àŠš àŠšàŠŸàŠź + àŠžàŠ°à§àŠŹàŠœàŠšà§€àŠš àŠšàŠŸàŠź + àŠ†àŠ‡àŠĄàŠż àŠŻàŠšà§àŠ€à§àŠ°à§‡àŠ° àŠ•à§àŠžà§àŠœàŠż àŠȘà§àŠ°àŠ€àŠżàŠȘàŠŸàŠŠàŠš Ed25519 àŠ«àŠżàŠ™à§àŠ—àŠŸàŠ°àŠȘà§àŠ°àŠżàŠšà§àŠŸ @@ -1098,4 +1096,100 @@ àŠ•àŠźàŠŸàŠšà§àŠĄ \"%s\" àŠ†àŠ°àŠ“ àŠȘà§‡àŠ°àŠŸàŠźàŠżàŠŸàŠŸàŠ° àŠȘà§àŠ°àŠŻàŠŒà§‹àŠœàŠš, àŠ…àŠ„àŠŹàŠŸ àŠ•àŠżàŠ›à§ àŠȘà§‡àŠ°àŠŸàŠźàŠżàŠŸàŠŸàŠ° àŠ­à§àŠČà„€ àŠ•àŠ°à§àŠź àŠȘà§àŠ°àŠŠàŠ°à§àŠ¶àŠš àŠ•àŠ°à§‡ àŠŠà§‡àŠ“àŠŻàŠŒàŠŸ àŠ†àŠ‡àŠĄàŠż àŠžàŠ™à§àŠ—à§‡ àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€ àŠ•à§‡ àŠšàŠżàŠ·àŠżàŠŠà§àŠ§ àŠ•àŠ°à§‡ + àŠ•à§‹àŠšàŠŸàŠŸ àŠšàŠŸ + àŠ°àŠŠ àŠ•àŠ° + àŠŹàŠżàŠŻà§àŠ•à§àŠ€ + àŠȘàŠ°à§àŠŻàŠŸàŠČà§‹àŠšàŠšàŠŸ + àŠȘàŠ€àŠš + + àŠ•à§‹àŠšàŠ“ àŠȘàŠ°àŠżàŠšàŠŻàŠŒ àŠžàŠŸàŠ°à§àŠ­àŠŸàŠ° àŠ•àŠšàŠ«àŠżàŠ—àŠŸàŠ° àŠ•àŠ°àŠŸ àŠšà§‡àŠ‡à„€ + + àŠ­à§àŠČ àŠ•àŠšàŠ«àŠżàŠ—àŠŸàŠ°à§àŠĄ àŠžàŠŸàŠ°à§àŠ­àŠŸàŠ°à§‡àŠ° àŠ•àŠŸàŠ°àŠŁà§‡ àŠ•àŠČ àŠŹà§àŠŻàŠ°à§àŠ„ àŠčàŠŻàŠŒà§‡àŠ›à§‡ + àŠ•àŠČàŠ—à§àŠČàŠż àŠšàŠżàŠ°à§àŠ­àŠ°àŠŻà§‹àŠ—à§àŠŻàŠ­àŠŸàŠŹà§‡ àŠ•àŠŸàŠœ àŠ•àŠ°àŠŸàŠ° àŠœàŠšà§àŠŻ àŠŠàŠŻàŠŒàŠŸ àŠ•àŠ°à§‡ àŠ†àŠȘàŠšàŠŸàŠ° àŠčà§‹àŠźàŠžàŠŸàŠ°à§àŠ­àŠŸàŠ° (%1$s) àŠàŠ° àŠȘà§àŠ°àŠ¶àŠŸàŠžàŠ•àŠ•à§‡ àŠàŠ•àŠŸàŠż àŠŸàŠŸàŠ°à§àŠš àŠžàŠŸàŠ°à§àŠ­àŠŸàŠ° àŠ•àŠšàŠ«àŠżàŠ—àŠŸàŠ° àŠ•àŠ°àŠ€à§‡ àŠŹàŠČà§àŠšà„€ +\n +\nàŠŹàŠżàŠ•àŠČ্àŠȘàŠ­àŠŸàŠŹà§‡, àŠ†àŠȘàŠšàŠż àŠȘàŠŸàŠŹàŠČàŠżàŠ• àŠžàŠŸàŠ°à§àŠ­àŠŸàŠ°àŠŸàŠż %2$s àŠ àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ° àŠ•àŠ°àŠŸàŠ° àŠšà§‡àŠ·à§àŠŸàŠŸ àŠ•àŠ°àŠ€à§‡ àŠȘàŠŸàŠ°à§‡àŠš, àŠ€àŠŹà§‡ àŠàŠŸàŠż àŠšàŠżàŠ°à§àŠ­àŠ°àŠŻà§‹àŠ—à§àŠŻ àŠčàŠŹà§‡ àŠšàŠŸ àŠàŠŹàŠ‚ àŠàŠŸàŠż àŠ†àŠȘàŠšàŠŸàŠ° àŠžàŠŸàŠ°à§àŠ­àŠŸàŠ°à§‡àŠ° àŠžàŠŸàŠ„à§‡ àŠ†àŠȘàŠšàŠŸàŠ° àŠ†àŠ‡àŠȘàŠż àŠ àŠżàŠ•àŠŸàŠšàŠŸàŠŸàŠż àŠ­àŠŸàŠ— àŠ•àŠ°à§‡ àŠŠà§‡àŠŹà§‡à„€ àŠ†àŠȘàŠšàŠż àŠžà§‡àŠŸàŠżàŠ‚àŠžà§‡ àŠàŠŸàŠż àŠȘàŠ°àŠżàŠšàŠŸàŠČàŠšàŠŸ àŠ•àŠ°àŠ€à§‡ àŠȘàŠŸàŠ°à§‡àŠšà„€ + %s àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ° àŠ•àŠ°àŠŸàŠ° àŠšà§‡àŠ·à§àŠŸàŠŸ àŠ•àŠ°à§àŠš + àŠ†àŠŹàŠŸàŠ° àŠ†àŠźàŠŸàŠ•à§‡ àŠœàŠżàŠœà§àŠžàŠŸàŠžàŠŸ àŠ•àŠ°àŠŹà§‡àŠš àŠšàŠŸ + + àŠ…à§àŠŻàŠŸàŠ•àŠŸàŠ‰àŠšà§àŠŸ àŠȘà§àŠšàŠ°à§àŠŠà§àŠ§àŠŸàŠ°à§‡àŠ° àŠœàŠšà§àŠŻ àŠàŠ•àŠŸàŠż àŠ‡àŠźà§‡àŠČ àŠžà§‡àŠŸ àŠ•àŠ°à§àŠš àŠàŠŹàŠ‚ àŠȘàŠ°à§‡ àŠ†àŠȘàŠšàŠŸàŠ•à§‡ àŠšàŠżàŠšà§‡ àŠàŠźàŠš àŠČà§‹àŠ•à§‡àŠ°àŠŸ àŠ‡àŠšà§àŠ›àŠżàŠ•àŠ­àŠŸàŠŹà§‡ àŠ†àŠŹàŠżàŠ·à§àŠ•àŠŸàŠ°àŠŻà§‹àŠ—à§àŠŻà„€ + àŠàŠ•àŠŸàŠż àŠ«à§‹àŠš àŠžà§‡àŠŸ àŠ•àŠ°à§àŠš àŠàŠŹàŠ‚ àŠȘàŠ°à§‡ àŠ†àŠȘàŠšàŠŸàŠ•à§‡ àŠœàŠŸàŠ°àŠŸ àŠšà§‡àŠšà§‡ àŠžà§‡àŠ‡ àŠČà§‹àŠ•à§‡àŠŠà§‡àŠ° àŠŠà§àŠŹàŠŸàŠ°àŠŸ àŠŹàŠżàŠ•àŠČ্àŠȘ àŠčàŠżàŠžàŠŸàŠŹà§‡ àŠ†àŠŹàŠżàŠ·à§àŠ•àŠŸàŠ° àŠ•àŠ°àŠŸàŠ° àŠœàŠšà§àŠŻà„€ + àŠ…à§àŠŻàŠŸàŠ•àŠŸàŠ‰àŠšà§àŠŸ àŠȘà§àŠšàŠ°à§àŠŠà§àŠ§àŠŸàŠ°à§‡àŠ° àŠœàŠšà§àŠŻ àŠàŠ•àŠŸàŠż àŠ‡àŠźà§‡àŠČ àŠžà§‡àŠŸ àŠ•àŠ°à§àŠšà„€ àŠ†àŠȘàŠšàŠŸàŠ° àŠȘàŠ°àŠżàŠšàŠżàŠ€ àŠČà§‹àŠ•àŠŠà§‡àŠ° àŠŠà§àŠŹàŠŸàŠ°àŠŸ àŠŹàŠżàŠ•àŠČ্àŠȘ àŠčàŠżàŠžàŠŸàŠŹà§‡ àŠ†àŠŹàŠżàŠ·à§àŠ•àŠŸàŠ°à§‡àŠ° àŠœàŠšà§àŠŻ àŠȘàŠ°à§‡ àŠ‡àŠźà§‡àŠČ àŠŹàŠŸ àŠ«à§‹àŠš àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ° àŠ•àŠ°à§àŠšà„€ + àŠ…à§àŠŻàŠŸàŠ•àŠŸàŠ‰àŠšà§àŠŸ àŠȘà§àŠšàŠ°à§àŠŠà§àŠ§àŠŸàŠ°à§‡àŠ° àŠœàŠšà§àŠŻ àŠàŠ•àŠŸàŠż àŠ‡àŠźà§‡àŠČ àŠžà§‡àŠŸ àŠ•àŠ°à§àŠšà„€ àŠ†àŠȘàŠšàŠŸàŠ° àŠȘàŠ°àŠżàŠšàŠżàŠ€ àŠČà§‹àŠ•àŠŠà§‡àŠ° àŠŠà§àŠŹàŠŸàŠ°àŠŸ àŠŹàŠżàŠ•àŠČ্àŠȘ àŠčàŠżàŠžàŠŸàŠŹà§‡ àŠ†àŠŹàŠżàŠ·à§àŠ•àŠŸàŠ°à§‡àŠ° àŠœàŠšà§àŠŻ àŠȘàŠ°à§‡ àŠ‡àŠźà§‡àŠČ àŠŹàŠŸ àŠ«à§‹àŠš àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ° àŠ•àŠ°à§àŠšà„€ + àŠàŠ‡ àŠ‡àŠ‰àŠ†àŠ°àŠàŠČে àŠ•à§‹àŠšàŠ“ àŠčà§‹àŠź àŠžàŠŸàŠ°à§àŠ­àŠŸàŠ°à§‡ àŠȘà§ŒàŠàŠ›àŠŸàŠšà§‹ àŠŻàŠŸàŠŻàŠŒ àŠšàŠŸ, àŠŠàŠŻàŠŒàŠŸ àŠ•àŠ°à§‡ àŠàŠŸàŠż àŠȘàŠ°à§€àŠ•à§àŠ·àŠŸ àŠ•àŠ°à§‡ àŠŠà§‡àŠ–à§àŠš + àŠ«à§àŠŻàŠŸàŠČàŠŹà§àŠŻàŠŸàŠ• àŠ•àŠČ àŠžàŠčàŠŸàŠŻàŠŒàŠ€àŠŸ àŠžàŠŸàŠ°à§àŠ­àŠŸàŠ°àŠ•à§‡ àŠ…àŠšà§àŠźàŠ€àŠż àŠŠàŠżàŠš + àŠ†àŠȘàŠšàŠŸàŠ° àŠčà§‹àŠźàŠžàŠŸàŠ°à§àŠ­àŠŸàŠ° àŠàŠ•àŠŸàŠż àŠȘà§àŠ°àŠžà§àŠ€àŠŸàŠŹ àŠšàŠŸ àŠŠàŠżàŠČে àŠžàŠčàŠŸàŠŻàŠŒàŠ€àŠŸ àŠčàŠżàŠžàŠŸàŠŹà§‡ %s àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ° àŠ•àŠ°àŠŹà§‡ (àŠ†àŠȘàŠšàŠŸàŠ° àŠ†àŠ‡àŠȘàŠż àŠ àŠżàŠ•àŠŸàŠšàŠŸ àŠ•àŠČ àŠ•àŠ°àŠŸàŠ° àŠžàŠźàŠŻàŠŒ àŠ­àŠŸàŠ— àŠ•àŠ°àŠŸ àŠčàŠŹà§‡) + àŠàŠ‡ àŠ•à§àŠ°àŠżàŠŻàŠŒàŠŸàŠŸàŠż àŠžàŠźà§àŠȘàŠŸàŠŠàŠš àŠ•àŠ°àŠ€à§‡ àŠ†àŠȘàŠšàŠŸàŠ° àŠžà§‡àŠŸàŠżàŠ‚àŠžà§‡ àŠàŠ•àŠŸàŠż àŠȘàŠ°àŠżàŠšàŠŻàŠŒ àŠžàŠŸàŠ°à§àŠ­àŠŸàŠ° àŠŻà§àŠ•à§àŠ€ àŠ•àŠ°à§àŠšà„€ + àŠ†àŠȘàŠšàŠŸàŠ° àŠȘàŠŸàŠžàŠ“àŠŻàŠŒàŠŸàŠ°à§àŠĄ àŠšàŠżàŠ¶à§àŠšàŠżàŠ€ àŠ•àŠ°à§àŠš + àŠ†àŠȘàŠšàŠż àŠ°àŠŸà§ŸàŠŸ àŠźà§‹àŠŹàŠŸàŠ‡àŠČ àŠ„à§‡àŠ•à§‡ àŠàŠŸàŠż àŠ•àŠ°àŠ€à§‡ àŠȘàŠŸàŠ°àŠŹà§‡àŠš àŠšàŠŸ + àŠȘà§àŠ°àŠźàŠŸàŠŁà§€àŠ•àŠ°àŠŁ àŠȘà§àŠ°àŠŻàŠŒà§‹àŠœàŠš + + + àŠȘàŠŸàŠ­à§‚àŠźàŠż àŠžàŠżàŠ™à§àŠ• àŠźà§‹àŠĄ (àŠȘàŠ°à§€àŠ•à§àŠ·àŠŸàŠźà§‚àŠČàŠ•) + àŠŹà§àŠŻàŠŸàŠŸàŠŸàŠ°àŠżàŠ° àŠœàŠšà§àŠŻ àŠ…àŠšà§àŠ•à§‚àŠČàŠżàŠ€ + àŠ°àŠŸà§ŸàŠŸ àŠàŠźàŠšàŠ­àŠŸàŠŹà§‡ àŠȘàŠŸàŠ­à§‚àŠźàŠżàŠ€à§‡ àŠžàŠżàŠ™à§àŠ• àŠčàŠŹà§‡ àŠŻàŠŸ àŠĄàŠżàŠ­àŠŸàŠ‡àŠžà§‡àŠ° àŠžà§€àŠźàŠżàŠ€ àŠžàŠ‚àŠžà§àŠ„àŠŸàŠš (àŠŹà§àŠŻàŠŸàŠŸàŠŸàŠ°àŠż) àŠžàŠ‚àŠ°àŠ•à§àŠ·àŠŁ àŠ•àŠ°à§‡à„€ +\nàŠ†àŠȘàŠšàŠŸàŠ° àŠĄàŠżàŠ­àŠŸàŠ‡àŠž àŠ°àŠżàŠžà§‹àŠ°à§àŠž àŠžà§àŠ„àŠżàŠ€àŠżàŠ° àŠ‰àŠȘàŠ° àŠšàŠżàŠ°à§àŠ­àŠ° àŠ•àŠ°à§‡ àŠžàŠżàŠ™à§àŠ•àŠŸàŠż àŠ…àŠȘàŠŸàŠ°à§‡àŠŸàŠżàŠ‚ àŠžàŠżàŠžà§àŠŸà§‡àŠź àŠŠà§àŠŹàŠŸàŠ°àŠŸ àŠȘàŠżàŠ›àŠżàŠŻàŠŒà§‡ àŠŻà§‡àŠ€à§‡ àŠȘàŠŸàŠ°à§‡à„€ + àŠ°àŠżàŠŻàŠŒà§‡àŠČ àŠŸàŠŸàŠ‡àŠź àŠœàŠšà§àŠŻ àŠ…àŠšà§àŠ•à§‚àŠČàŠżàŠ€ + àŠ°àŠŸà§ŸàŠŸ àŠšàŠżàŠ°à§àŠŠàŠżàŠ·à§àŠŸ àŠžàŠźàŠŻàŠŒà§‡ àŠžàŠźàŠŻàŠŒà§‡ àŠȘàŠŸàŠ­à§‚àŠźàŠżàŠ€à§‡ àŠžàŠżàŠ™à§àŠ• àŠčàŠŹà§‡ (àŠ•àŠšàŠ«àŠżàŠ—àŠŸàŠ°àŠŻà§‹àŠ—à§àŠŻ)à„€ +\nàŠàŠŸàŠż àŠ°à§‡àŠĄàŠżàŠ“ àŠàŠŹàŠ‚ àŠŹà§àŠŻàŠŸàŠŸàŠŸàŠ°àŠżàŠ° àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•à§‡ àŠȘà§àŠ°àŠ­àŠŸàŠŹàŠżàŠ€ àŠ•àŠ°àŠŹà§‡, àŠ°àŠŸà§ŸàŠŸ àŠ‡àŠ­à§‡àŠšà§àŠŸàŠ—à§àŠČàŠż àŠ¶à§àŠšàŠ›à§‡ àŠŹàŠČে àŠœàŠŸàŠšàŠżàŠŻàŠŒà§‡ àŠàŠ•àŠŸàŠż àŠžà§àŠ„àŠŸàŠŻàŠŒà§€ àŠŹàŠżàŠœà§àŠžàŠȘà§àŠ€àŠż àŠȘà§àŠ°àŠŠàŠ°à§àŠ¶àŠżàŠ€ àŠčàŠŹà§‡à„€ + àŠ•à§‹àŠšàŠ“ àŠȘàŠŸàŠ­à§‚àŠźàŠż àŠžàŠżàŠ™à§àŠ• àŠšàŠŸ + àŠ…à§àŠŻàŠŸàŠȘàŠŸàŠż àŠŹà§àŠŻàŠŸàŠ•àŠ—à§àŠ°àŠŸàŠ‰àŠšà§àŠĄà§‡ àŠ„àŠŸàŠ•àŠŸ àŠ…àŠŹàŠžà§àŠ„àŠŸàŠŻàŠŒ àŠ†àŠȘàŠšàŠŸàŠ•à§‡ àŠ†àŠ—àŠ€ àŠŹàŠŸàŠ°à§àŠ€àŠŸàŠ—à§àŠČàŠż àŠžàŠźà§àŠȘàŠ°à§àŠ•à§‡ àŠ…àŠŹàŠčàŠżàŠ€ àŠ•àŠ°àŠŸ àŠčàŠŹà§‡ àŠšàŠŸà„€ + àŠžà§‡àŠŸàŠżàŠ‚àŠž àŠ†àŠȘàŠĄà§‡àŠŸ àŠ•àŠ°àŠ€à§‡ àŠŹà§àŠŻàŠ°à§àŠ„à„€ + + + àŠȘàŠ›àŠšà§àŠŠà§‡àŠ° àŠžàŠżàŠ™à§àŠ• àŠŹà§àŠŻàŠŹàŠ§àŠŸàŠš + %s +\nàŠžàŠżàŠ™à§àŠ•àŠŸàŠż àŠĄàŠżàŠ­àŠŸàŠ‡àŠžà§‡àŠ° àŠžàŠ‚àŠžà§àŠ„àŠŸàŠš (àŠŹà§àŠŻàŠŸàŠŸàŠŸàŠ°àŠż) àŠŹàŠŸ àŠ…àŠŹàŠžà§àŠ„àŠŸàŠ° (àŠ˜à§àŠź) àŠ‰àŠȘàŠ° àŠšàŠżàŠ°à§àŠ­àŠ° àŠ•àŠ°à§‡ àŠȘàŠżàŠ›àŠżàŠŻàŠŒà§‡ àŠŻà§‡àŠ€à§‡ àŠȘàŠŸàŠ°à§‡à„€ + àŠàŠ•à§àŠŻàŠŹàŠŠà§àŠ§àŠ€àŠŸ + àŠŹàŠŸ, àŠžà§‡àŠ€à§, àŠ‰àŠ‡àŠœà§‡àŠŸ àŠàŠŹàŠ‚ àŠžà§àŠŸàŠżàŠ•àŠŸàŠ° àŠȘà§àŠŻàŠŸàŠ•àŠ—à§àŠČàŠż àŠȘàŠ°àŠżàŠšàŠŸàŠČàŠšàŠŸ àŠ•àŠ°àŠ€à§‡ àŠ‡àŠšà§àŠŸàŠżàŠ—à§àŠ°à§‡àŠ¶àŠš àŠźà§àŠŻàŠŸàŠšà§‡àŠœàŠŸàŠ° àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ° àŠ•àŠ°à§àŠšà„€ +\nàŠ‡àŠšà§àŠŸàŠżàŠ—à§àŠ°à§‡àŠ¶àŠš àŠźà§àŠŻàŠŸàŠšà§‡àŠœàŠŸàŠ°àŠ°àŠŸ àŠ•àŠšàŠ«àŠżàŠ—àŠŸàŠ°à§‡àŠ¶àŠš àŠĄà§‡àŠŸàŠŸ àŠ—à§àŠ°àŠčàŠŁ àŠ•àŠ°à§‡ àŠàŠŹàŠ‚ àŠ‰àŠ‡àŠœà§‡àŠŸàŠ—à§àŠČàŠż àŠžàŠ‚àŠ¶à§‹àŠ§àŠš àŠ•àŠ°àŠ€à§‡, àŠ°à§àŠź àŠ†àŠźàŠšà§àŠ€à§àŠ°àŠš àŠȘà§àŠ°à§‡àŠ°àŠŁ àŠ•àŠ°àŠ€à§‡ àŠàŠŹàŠ‚ àŠ†àŠȘàŠšàŠŸàŠ° àŠȘàŠ•à§àŠ·à§‡ àŠȘàŠŸàŠ“àŠŻàŠŒàŠŸàŠ° àŠžà§àŠ€àŠ° àŠšàŠżàŠ°à§àŠ§àŠŸàŠ°àŠŁ àŠ•àŠ°àŠ€à§‡ àŠȘàŠŸàŠ°à§‡à„€ + àŠ†àŠŹàŠżàŠ·à§àŠ•àŠŸàŠ° + àŠ†àŠȘàŠšàŠŸàŠ° àŠ†àŠŹàŠżàŠ·à§àŠ•àŠŸàŠ°à§‡àŠ° àŠžà§‡àŠŸàŠżàŠ‚àŠž àŠȘàŠ°àŠżàŠšàŠŸàŠČàŠšàŠŸ àŠ•àŠ°à§àŠšà„€ + àŠžàŠ‚àŠčàŠ€àŠ•àŠ°àŠŁà§‡àŠ° àŠ…àŠšà§àŠźàŠ€àŠż àŠŠàŠżàŠš + àŠ‡àŠšà§àŠŸàŠżàŠ—à§àŠ°à§‡àŠ¶àŠš àŠźà§àŠŻàŠŸàŠšà§‡àŠœàŠŸàŠ° + + àŠžàŠ°à§àŠŹàŠœàŠšà§€àŠš àŠšàŠŸàŠź (àŠŻàŠŸàŠŠà§‡àŠ° àŠžàŠŸàŠ„à§‡ àŠ†àŠȘàŠšàŠż àŠŻà§‹àŠ—àŠŸàŠŻà§‹àŠ— àŠ•àŠ°à§‡àŠš àŠ€àŠŸàŠŠà§‡àŠ° àŠ•àŠŸàŠ›à§‡ àŠŠà§ƒàŠ¶à§àŠŻàŠźàŠŸàŠš) + àŠàŠ•àŠŸàŠż àŠĄàŠżàŠ­àŠŸàŠ‡àŠžà§‡àŠ° àŠžàŠ°à§àŠŹàŠœàŠšà§€àŠš àŠšàŠŸàŠź àŠ†àŠȘàŠšàŠż àŠŻàŠŸàŠŠà§‡àŠ° àŠžàŠŸàŠ„à§‡ àŠŻà§‹àŠ—àŠŸàŠŻà§‹àŠ— àŠ•àŠ°à§‡àŠš àŠ€àŠŸàŠŠà§‡àŠ° àŠ•àŠŸàŠ›à§‡ àŠŠà§ƒàŠ¶à§àŠŻàŠźàŠŸàŠš + àŠ‰àŠ‡àŠœà§‡àŠŸ + àŠ‰àŠ‡àŠœà§‡àŠŸ àŠČà§‹àŠĄ àŠ•àŠ°à§àŠš + àŠàŠ‡ àŠ‰àŠ‡àŠœà§‡àŠŸàŠŸàŠż àŠŻà§àŠ•à§àŠ€ àŠ•àŠ°à§‡àŠ›à§‡àŠš: + àŠàŠŸàŠż àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ° àŠ•àŠ°à§‡ àŠ•à§àŠ•àŠżàŠœ àŠžà§‡àŠŸ àŠ•àŠ°àŠ€à§‡ àŠȘàŠŸàŠ°à§‡ àŠàŠŹàŠ‚ %s àŠàŠ° àŠžàŠŸàŠ„à§‡ àŠĄà§‡àŠŸàŠŸ àŠ­àŠŸàŠ— àŠ•àŠ°àŠŸ àŠŻàŠŸàŠŻàŠŒ: + àŠàŠŸàŠż àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ° àŠ•àŠ°à§‡ àŠĄà§‡àŠŸàŠŸ %s àŠàŠ° àŠžàŠŸàŠ„à§‡ àŠ­àŠŸàŠ— àŠ•àŠ°à§‡ àŠšàŠżàŠ€à§‡ àŠȘàŠŸàŠ°à§‡: + àŠ‰àŠ‡àŠœà§‡àŠŸ àŠČà§‹àŠĄ àŠ•àŠ°àŠ€à§‡ àŠŹà§àŠŻàŠ°à§àŠ„à„€ +\n%s + àŠ‰àŠ‡àŠœà§‡àŠŸ àŠȘà§àŠšàŠ°àŠŸàŠŻàŠŒ àŠČà§‹àŠĄ àŠ•àŠ°à§àŠš + àŠŹà§àŠ°àŠŸàŠ‰àŠœàŠŸàŠ°à§‡ àŠ–à§àŠČà§àŠš + àŠ†àŠźàŠŸàŠ° àŠœàŠšà§àŠŻ àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠž àŠȘà§àŠ°àŠ€à§àŠŻàŠŸàŠčàŠŸàŠ° àŠ•àŠ°à§àŠš + + àŠ†àŠȘàŠšàŠŸàŠ° àŠȘà§àŠ°àŠŠàŠ¶àŠšà§€à§Ÿ àŠšàŠŸàŠź + àŠ†àŠȘàŠšàŠŸàŠ° àŠ…àŠŹàŠ€àŠŸàŠ° URL + àŠ†àŠȘàŠšàŠŸàŠ° àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€àŠ° àŠ†àŠ‡àŠĄàŠż + àŠ†àŠȘàŠšàŠŸàŠ° àŠ„àŠżàŠź + àŠ‰àŠ‡àŠœà§‡àŠŸ àŠ†àŠ‡àŠĄàŠż + àŠ•àŠ•à§àŠ·à§‡àŠ° àŠ†àŠ‡àŠĄàŠż + + + àŠàŠ‡ àŠ‰àŠ‡àŠœà§‡àŠŸàŠŸàŠż àŠšàŠżàŠźà§àŠšàŠČàŠżàŠ–àŠżàŠ€ àŠžàŠ‚àŠžà§àŠ„àŠŸàŠšàŠ—à§àŠČàŠż àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ° àŠ•àŠ°àŠ€à§‡ àŠšàŠŸàŠŻàŠŒ: + àŠ…àŠšà§àŠźàŠ€àŠż + àŠžàŠŹ àŠ…àŠŹàŠ°à§àŠŠà§àŠ§ + àŠ•à§àŠŻàŠŸàŠźà§‡àŠ°àŠŸ àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ° àŠ•àŠ°à§àŠš + àŠźàŠŸàŠ‡àŠ•à§àŠ°à§‹àŠ«à§‹àŠš àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ° àŠ•àŠ°à§àŠš + àŠĄàŠżàŠ†àŠ°àŠàŠź àŠžà§àŠ°àŠ•à§àŠ·àŠżàŠ€ àŠźàŠżàŠĄàŠżàŠŻàŠŒàŠŸ àŠȘàŠĄàŠŒà§àŠš + + àŠ•à§‹àŠšàŠ“ àŠ‡àŠšà§àŠŸàŠżàŠ—à§àŠ°à§‡àŠ¶àŠš àŠźà§àŠŻàŠŸàŠšà§‡àŠœàŠŸàŠ° àŠ•àŠšàŠ«àŠżàŠ—àŠŸàŠ° àŠ•àŠ°àŠŸ àŠšà§‡àŠ‡à„€ + àŠšàŠŸàŠČàŠżàŠŻàŠŒà§‡ àŠŻà§‡àŠ€à§‡ àŠ†àŠȘàŠšàŠŸàŠ° àŠàŠ‡ àŠȘàŠ°àŠżàŠ·à§‡àŠŹàŠŸàŠ° àŠ¶àŠ°à§àŠ€àŠŸàŠŠàŠż àŠžà§àŠŹà§€àŠ•àŠŸàŠ° àŠ•àŠ°àŠ€à§‡ àŠčàŠŹà§‡à„€ + + àŠȘà§àŠ°àŠŠàŠ€à§àŠ€ àŠ†àŠ‡àŠĄàŠż àŠžàŠč àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€àŠ•à§‡ àŠšàŠżàŠ·àŠżàŠŠà§àŠ§ àŠ€àŠŸàŠČàŠżàŠ•àŠŸ àŠ„à§‡àŠ•à§‡ àŠŹà§‡àŠ° àŠ•àŠ°à§‡ + àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€àŠ° àŠȘàŠŸàŠ“àŠŻàŠŒàŠŸàŠ° àŠžà§àŠ€àŠ° àŠšàŠżàŠ°à§àŠ§àŠŸàŠ°àŠŁ àŠ•àŠ°à§àŠš + àŠȘà§àŠ°àŠŠàŠ€à§àŠ€ àŠ†àŠ‡àŠĄàŠż àŠžàŠč àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€àŠ•à§‡ àŠĄàŠżàŠ“àŠȘ àŠ•àŠ°à§‡ + àŠȘà§àŠ°àŠŠàŠ€à§àŠ€ àŠ†àŠ‡àŠĄàŠż àŠžàŠč àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€àŠ•à§‡ àŠŹàŠ°à§àŠ€àŠźàŠŸàŠš àŠ•àŠ•à§àŠ· àŠ àŠ†àŠźàŠšà§àŠ€à§àŠ°àŠŁ àŠœàŠŸàŠšàŠŸàŠŻàŠŒ + àŠȘà§àŠ°àŠŠàŠ€à§àŠ€ àŠ“àŠ°àŠ«à§‡ àŠžàŠč àŠ°à§àŠźà§‡ àŠŻà§‹àŠ— àŠŠà§‡àŠŻàŠŒ + àŠ•àŠ•à§àŠ· àŠ›à§‡àŠĄàŠŒà§‡ àŠŠàŠżàŠš + àŠ°à§àŠźà§‡àŠ° àŠŸàŠȘàŠżàŠ• àŠžà§‡àŠŸ àŠ•àŠ°à§àŠš + àŠȘà§àŠ°àŠŠàŠ€à§àŠ€ àŠ†àŠ‡àŠĄàŠż àŠžàŠč àŠŹà§àŠŻàŠŹàŠčàŠŸàŠ°àŠ•àŠŸàŠ°à§€àŠ•à§‡ àŠ•àŠżàŠ•à§ àŠ•àŠ°à§‡ + àŠ†àŠȘàŠšàŠŸàŠ° àŠȘà§àŠ°àŠŠàŠ°à§àŠ¶àŠšà§‡àŠ° àŠĄàŠŸàŠ•àŠšàŠŸàŠź àŠȘàŠ°àŠżàŠŹàŠ°à§àŠ€àŠš àŠ•àŠ°à§‡ + àŠ…àŠš/àŠ…àŠ« àŠźàŠŸàŠ°à§àŠ•àŠĄàŠŸàŠ‰àŠš + àŠźàŠŸàŠ°à§àŠ•àŠĄàŠŸàŠ‰àŠš àŠžàŠ•à§àŠ·àŠź àŠ•àŠ°àŠŸ àŠčàŠŻàŠŒà§‡àŠ›à§‡à„€ + àŠźàŠŸàŠ°à§àŠ•àŠĄàŠŸàŠ‰àŠš àŠ…àŠ•à§àŠ·àŠź àŠ•àŠ°àŠŸ àŠčàŠŻàŠŒà§‡àŠ›à§‡à„€ + + àŠ…àŠ« diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 53f1d35d79..0cf8f9d8e9 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -28,7 +28,7 @@ CZ Zapomenout mĂ­stnost - Synchronizace + Synchronizuji.. HlasitĂĄ oznĂĄmenĂ­ TichĂĄ oznĂĄmenĂ­ @@ -46,7 +46,8 @@ Zobraz deĆĄifrovanĂœ zdroj NahlĂĄsit obsah AktivnĂ­ hovor - ProbĂ­hajĂ­cĂ­ konferenčnĂ­ hovor.\nPƙipojit se %1$s nebo %2$s. + ProbĂ­hajĂ­cĂ­ konferenčnĂ­ hovor. +\nPƙipojit se jako %1$s nebo %2$s. hlasem videem Nemohu spustit hovor, prosĂ­m zkusit později @@ -601,4 +602,12 @@ OmlouvĂĄme se za zpĆŻsobenĂ© nepƙíjemnosti. Nastavit dĆŻleĆŸitost upozorněnĂ­ na zĂĄkladě udĂĄlosti, nastavenĂ­ zvuku, LED, vibracĂ­ DĆŻleĆŸitost upozorněnĂ­ na zĂĄkladě udĂĄlosti + Inicializuji sluĆŸbu + Ověƙte zaƙízenĂ­ + + Odpojit + Ignorovat + OdmĂ­tnout + + Označit za pƙečtenĂ© diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index 47dc512cb4..55fa5d1488 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -1695,7 +1695,7 @@ Wenn du diese neue Wiederherstellungsmethode nicht eingerichtet hast, kann ein A FĂŒr andere auffindbar sein Verwenden Sie Bots, Bridges, Widgets und Sticker-Packs - Lesen Sie bei + Gelesen von IdentitĂ€tsserver @@ -1708,4 +1708,6 @@ Wenn du diese neue Wiederherstellungsmethode nicht eingerichtet hast, kann ein A Gib einen neuen IdentitĂ€tsserver ein Konnte keine Verbindung zum Heimserver herstellen + Latn + diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index 252acefabc..fb2f023ef9 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -1568,4 +1568,34 @@ Ten en cuenta que esta acciĂłn reiniciarĂĄ la aplicaciĂłn y puede tardar algo de Haz una sugerencia Por favor escriba su sugerencia a continuaciĂłn. Describa su sugerencia aquĂ­ + Latn + + Ninguno + Revocar + Desconectar + Revisar + Declinar + + No se ha configurado un servidor de identidad. + + La llamada ha fallado por un servidor mal configurado + Intente usar %s + No volver a preguntar + + Para hacer esto, vaya a las opciones y añada un servidor de identidad. + Confirme su contraseña + Eso no se puede hacer en Riot para mĂłvil + Se necesita autenticaciĂłn + + + Optimizado para baterĂ­a + Optimizado para operar en tiempo real + Sin sincronizaciĂłn en segundo plano + No se han podido actualizar las opciones. + + + Integraciones + Descubrimiento + Gestione sus preferencias de descubrimiento. + EntĂ©rese aquĂ­ de los mensajes sin leer diff --git a/vector/src/main/res/values-eu/strings.xml b/vector/src/main/res/values-eu/strings.xml index 57eed05cca..046e5557f5 100644 --- a/vector/src/main/res/values-eu/strings.xml +++ b/vector/src/main/res/values-eu/strings.xml @@ -1766,4 +1766,39 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Ez dago sare konexiorik orain + Berretsi zure pasahitza + Ezin duzu hau egin mugikorrerako Riot erabiliz + Autentifikazioa behar da + + + Integrazioak + Erabili integrazio kudeatzaileren bat botak, zubiak, trepetak eta eranskailu multzoak kudeatzeko. +\nIntegrazio kudeatzaileek konfigurazio datuak jasotzen dituzte, eta trepetak aldatu ditzakete, gelarako gonbidapenak bidali, eta botere mailak zure izenean ezarri. + Baimendu integrazioak + Trepeta + Kargatu trepeta + Trepeta hau honek gehitu du: + Hau erabiltzean cookie-ak ezarri litezke eta %s zerbitzariarekin datuak partekatu: + Hau erabiltzean %s zerbitzariarekin datuak partekatu litezke: + Huts egin du trepeta kargatzean. +\n%s + Birkargatu trepeta + Ireki nabigatzailean + Indargabetu sarbidea niretzat + + Zure pantaila-izena + Zure abatarraren URL-a + Zure erabiltzaile ID-a + Zure gaia + Trepetaren ID-a + Gelaren ID-a + + + Trepetak honako baliabide hauek erabili nahi ditu: + Baimendu + Blokeatu denak + Kamera erabili + Mikrofonoa erabili + DRM bidez babestutako multimedia irakurri + diff --git a/vector/src/main/res/values-fi/strings.xml b/vector/src/main/res/values-fi/strings.xml index fc9546d21d..ea8a6abc5a 100644 --- a/vector/src/main/res/values-fi/strings.xml +++ b/vector/src/main/res/values-fi/strings.xml @@ -257,11 +257,11 @@ Riot tarvitsee kĂ€yttöluvan kameraan ottaakseen kuvia ja suorittakseen videopuheluita. " \n -\nSalli kameran kĂ€yttö seuraavassa ponnahdusikkunassa soittaaksesi puhelun." +\nSoittaaksesi videopuhelun, salli seuraavassa ponnahdusikkunassa sovelluksen kĂ€yttÀÀ kameraa." Riot tarvitsee kĂ€yttöluvan mikrofoniin suorittakseen puheluita. " \n -\nSalli mikrofonin kĂ€yttö seuraavassa ponnahdusikkunassa soittaaksesi puhelun." +\nSoittaaksesi ÀÀnipuhelun, salli seuraavassa ponnahdusikkunassa sovelluksen kĂ€yttÀÀ mikrofonia." Riot tarvitsee kĂ€yttöluvan kameraan ja mikrofoniin suorittakseen videopuheluita. \n \nSalli mikrofonin ja kameran kĂ€yttö seuraavilla nĂ€ytöillĂ€ aloittaaksesi tĂ€mĂ€n puhelun. @@ -1036,10 +1036,10 @@ Haluatko lisĂ€tĂ€ paketteja? \n%1$s Korjaa Play Services -palvelu - Firebase-token - FCM-token haettu onnistuneesti: + Firebase-tunniste + FCM-tunniste haettu onnistuneesti: \n%1$s - FCM-tokenin haku epĂ€onnistui: + FCM-tunnisteen haku epĂ€onnistui: \n%1$s [%1$s] \nTĂ€mĂ€ virhe ei ole Riotin hallinnassa ja Googlen mukaan tĂ€mĂ€ virhe tarkoittaa, ettĂ€ tĂ€llĂ€ laitteella on liikaa FCM:ÀÀn liittyneitĂ€ sovelluksia. TĂ€mĂ€ virhe ilmenee vain tapauksissa, jossa on on erittĂ€in paljon sovelluksia asennettuna, joten sen ei pitĂ€isi vaikuttaa normaaliin kĂ€yttĂ€jÀÀn. @@ -1049,9 +1049,9 @@ Haluatko lisĂ€tĂ€ paketteja? \nTĂ€mĂ€ virhe ei ole Riotin ratkaistavissa. TĂ€ssĂ€ puhelimessa ei ole Google-tiliĂ€. LisÀÀ laitteeseesi Google-tili tĂ€tĂ€ toimintoa varten. LisÀÀ tili - Tokenin rekisteröinti - FCM-token rekisteröity onnistuneesti kotipalvelimelle. - FCM-tokenin rekisteröinti kotipalvelimelle epĂ€onnistui: + Tunnisteen rekisteröinti + FCM-tunniste rekisteröity onnistuneesti kotipalvelimelle. + FCM-tunnisteen rekisteröinti kotipalvelimelle epĂ€onnistui: \n%1$s Ilmoituspalvelu @@ -1479,7 +1479,7 @@ Jotta et menetĂ€ mitÀÀn, automaattiset pĂ€ivitykset kannattaa pitÀÀ kĂ€ytös Tervetuloa kotiin! LöydĂ€t tÀÀltĂ€ lukemattomat viestit Keskustelut - Yksityiset keskustelusi nĂ€ytetÀÀn tĂ€ssĂ€ + TĂ€ssĂ€ nĂ€ytetÀÀn yksityiset keskustelusi Huoneet Huoneesi nĂ€ytetÀÀn tĂ€ssĂ€ @@ -1601,8 +1601,8 @@ Jotta et menetĂ€ mitÀÀn, automaattiset pĂ€ivitykset kannattaa pitÀÀ kĂ€ytös Huoneluettelo Julkaise tĂ€mĂ€ huone huoneluettelossa - Play Storen kuvaus - Push-sÀÀnnöt + Play Storen kuvauksessa + Viesti-ilmoitusten sÀÀnnöt %1$s luodaksesi tilin. Katkaise yhteys KieltĂ€ydy @@ -1664,7 +1664,7 @@ Jotta et menetĂ€ mitÀÀn, automaattiset pĂ€ivitykset kannattaa pitÀÀ kĂ€ytös Ota yksityiskohtaiset lokit kĂ€yttöön. YritĂ€ uudelleen, kun olet hyvĂ€ksynyt kotipalvelimesi kĂ€yttöehdot. - Palvelimen vastaus nĂ€yttÀÀ viipyvĂ€n. TĂ€mĂ€ voi johtua kehnosta yhteydestĂ€ tai palvelimillamme tapahtuneesta virheestĂ€. YritĂ€ hetken kuluttua uudelleen. + Palvelimen vastaus nĂ€yttĂ€isi olevan liian hidas. TĂ€mĂ€ voi johtua kehnosta yhteydestĂ€ tai palvelimella olevasta ongelmasta. YritĂ€ hetken kuluttua uudelleen. LĂ€hetĂ€ liite @@ -1707,6 +1707,148 @@ Jotta et menetĂ€ mitÀÀn, automaattiset pĂ€ivitykset kannattaa pitÀÀ kĂ€ytös Ole löydettĂ€vissĂ€ Tekstiviesti on lĂ€hetetty numeroon %s. SyötĂ€ sen sisĂ€ltĂ€mĂ€ varmistuskoodi. - Push-sÀÀntöjĂ€ ei ole mÀÀritetty + Viesti-ilmoitusten sÀÀntöjĂ€ ei ole mÀÀritetty Luo uusi yksityiskeskustelu + Latn + + Kumoa + Tarkasta + Aseta puhelinnumerosi, ja voit myöhemmin antaa muiden löytÀÀ sinut puhelinnumerosi perusteella. + Aseta sĂ€hköpostisi tunnuksen palautusta varten. Myöhemmin voit asettaa sĂ€hköpostisi tai puhelinnumerosi löydettĂ€viksi, jotta sinut voi löytÀÀ nĂ€illĂ€ tiedoilla. + Aseta sĂ€hköpostisi tunnuksen palautusta varten. Myöhemmin voit asettaa sĂ€hköpostisi tai puhelinnumerosi löydettĂ€viksi, jotta sinut voi löytÀÀ nĂ€illĂ€ tiedoilla. + Vahvista salasanasi + Et voi tehdĂ€ tĂ€tĂ€ mobiili-Riotista + Tunnistautuminen vaaditaan + + + Integraatiot + KĂ€ytĂ€ integraatioiden lĂ€hdettĂ€ bottien, siltojen ja tarrapakettien hallintaan. +\nIntegraatioiden lĂ€hteet vastaanottavat asetusdataa ja voivat muokata sovelmia, lĂ€hettÀÀ kutsuja huoneeseen ja muokata oikeustasoja puolestasi. + KĂ€yttĂ€jien etsintĂ€ + Muokkaa etsinnĂ€n asetuksia. + Salli integraatiot + Integraatioiden lĂ€hde + + Sovelma + Lataa sovelma + Sovelman lisĂ€si: + Sovelman kĂ€yttö saattaa asettaa keksejĂ€ ja jakaa tietoa kohteen %s kanssa: + Sovelman kĂ€yttö saattaa jakaa tietoa kohteen %s kanssa: + Sovelman lataus epĂ€onnistui. +\n%s + Lataa sovelma uudelleen + Avaa selaimessa + Kumoa minun pÀÀsy + + NĂ€yttönimesi + Profiilikuvasi osoite + KĂ€yttĂ€jĂ€tunnisteesi + Teemasi + Sovelman tunniste + Huoneen tunniste + + + TĂ€mĂ€ sovelma haluaa kĂ€yttÀÀ seuraavia resursseja: + Salli + EstĂ€ kaikki + KĂ€ytĂ€ kameraa + KĂ€ytĂ€ mikrofonia + Lue DRM-suojattua mediaa + + Ei integraatioiden lĂ€hteitĂ€ asetettuna. + Huomiotta + + Olet kirjautunut ulos epĂ€kelpojen tai vanhentuneiden pÀÀsytietojen takia. + + Varmenna vertaamalla lyhyttĂ€ tekstijonoa. + Varmenna tĂ€mĂ€ laite merkkaamalla se luotetuksi. Kumppaneiden laitteisiin luottaminen antaa sinulle ylimÀÀrĂ€istĂ€ mielenrauhaa, kun kĂ€ytĂ€t osapuolten vĂ€listĂ€ salausta. + TĂ€mĂ€n laitteen varmentaminen merkkaa sen luotetuksi, ja samoin sinun laitteesi merkataan luotetuksi kumppanisi nĂ€kökulmasta. + + Varmenna tĂ€mĂ€ laite varmistamalla, ettĂ€ seuraava emoji ilmestyy kumppanisi nĂ€ytölle + Varmenna tĂ€mĂ€ laite varmistamalla, ettĂ€ seuraavat numerot ilmestyvĂ€t kumppanisi nĂ€ytölle + + Turvalliset viestit tĂ€mĂ€n kĂ€yttĂ€jĂ€n kanssa ovat salattuja pÀÀstĂ€ pÀÀhĂ€n, eivĂ€tkĂ€ kolmannet osapuolet voi lukea niitĂ€. + MitÀÀn ei tule nĂ€ytölle\? Kaikki asiakasohjelmat eivĂ€t vielĂ€ tue interaktiivista varmennusta. KĂ€ytĂ€ vanhaa varmennustapaa. + KĂ€ytĂ€ vanhaa varmennustapaa. + + Laitteet eivĂ€t pysty sopimaan avaimista, tiivisteestĂ€, MAC:sta tai SAS-metodista + Tiivisteet eivĂ€t tĂ€smĂ€nneet + Vanhoissa Riotin versioissa oli tietoturvaongelma, joka saattoi antaa identiteettipalvelimelle(%1$s) pÀÀsyn tunnukseesi. Jos luotat kohteeseen %2$s, voit jĂ€ttÀÀ tĂ€mĂ€n huomiotta. Muussa tapauksessa, kirjaudu ulos ja kirjaudu uudelleen Riotiin. +\n +\nLue lisÀÀ: +\nhttps://medium.com/@RiotChat/36b4792ea0d6 + + Muuta + Viimeisin ominaisuuslista on aina %1$s. Jos löydĂ€t virheitĂ€, lĂ€hetĂ€thĂ€n virheraportin painikkeella, joka löytyy ylhÀÀllĂ€ ja vasemmalla olevasta kotivalikosta, niin korjaamme vian niin nopeasti kuin pystymme. + Jos löytĂ€t virheitĂ€, lĂ€hetĂ€thĂ€n virheraportin ylhÀÀltĂ€ ja vasemmalta löytyvĂ€stĂ€ kotivalikosta, niin korjaamme ongelman niin nopeasti kuin vain pystymme. + + Tuo osapuolten vĂ€lisen salauksen avaimet tiedostosta ”%1$s”. + + Edistynyt + Ei rekisteröityjĂ€ viesti-ilmoitusten yhdyskĂ€ytĂ€viĂ€ + + app_id: + push_key: + app_display_name: + device_name: + Formaatti: + + Rekisteröi tunniste + + RiotX on uusi Matrix-protokollaa (Matrix.org) kĂ€yttĂ€vĂ€ ohjelma: avointa ja hajautettua keskustelua tukeva turvallinen verkko. RiotX on tĂ€ysin uusittu versio Riot Android -ohjelmasta, joka perustuu Matrix Android SDK:n uudelleenkirjoitukseen. +\n +\nHuomaa: tĂ€mĂ€ on betaversio. RiotX on vielĂ€ kehitystyössĂ€, ja siinĂ€ on rajoitteita ja (toivottavasti ei kuitenkaan monta) bugeja. Kaikki palaute on tervetullutta! +\n +\nRiotX tukee: ‱ Kirjaudu olemassaolevalle tunnukselle ‱ Luo huoneita ja liity julkisiin huoneisiin ‱ HyvĂ€ksy ja hylkÀÀ kutsuja ‱ Listaa kĂ€yttĂ€jĂ€n huoneet ‱ Katso huoneen tietoja ‱ LĂ€hetĂ€ tekstiviestejĂ€ ‱ LĂ€hetĂ€ liitteitĂ€ ‱ Lue ja kirjoita viestejĂ€ salatuissa huoneissa ‱ Salaus: osapuolten vĂ€lisen salauksen avaimien varmuuskopiointi, edistynyt laitteiden varmennus, avainten jakopyynnöt ja vastaus ‱ Viesti-ilmoitukset ‱ Vaalea, tumma ja musta teema +\n +\nKaikkia Riotin ominaisuuksia ei ole vielĂ€ toteutettu RiotX:ssĂ€. TĂ€rkeimmĂ€t puuttuvat (ja pian saapuvat!) ominaisuudet: ‱ Tunnusten luonti ‱ Huoneen asetukset (listaa huoneen jĂ€senet jne.) ‱ Puhelut ‱ Sovelmat ‱ 
 + + Salataan pikkukuvaa
 + LĂ€hetetÀÀn pikkukuvaa (%1$s / %2$s) + Nimi tai tunniste (#example:matrix.org) + + LisÀÀ Matrix-tunnisteella + Tuloksia ei löytynyt. KĂ€ytĂ€ ”LisÀÀ Matrix-tunnisteella” etsiĂ€ksesi palvelimelta. + Suodata kĂ€yttĂ€jĂ€tunnuksella tai tunnisteella
 + + EtsittĂ€vĂ€t sĂ€hköpostiosoitteet + Vaihtoehdot ilmestyvĂ€t, kunhan olet lisĂ€nnyt sĂ€hköpostiosoitteen. + Vaihtoehdot ilmestyvĂ€t, kunhan olet lisĂ€nnyt puhelinnumeron. + EtsittĂ€vĂ€t puhelinnumerot + Runsassanaiset lokit auttavat antamalla enemmĂ€n tietoa kehittĂ€jille, kun lĂ€hetĂ€t virheilmoituksen. Vaikka runsaammat lokit ovat kĂ€ytössĂ€, sovellus ei lĂ€hetĂ€ viestien sisĂ€ltöjĂ€ tai mitÀÀn muuta yksityistĂ€ tietoa. + + + Avaa navigaatiovalikko + Avaa huoneen luontivalikko + Sulje huoneen luontivalikko
 + Sulje avainten varmuuskopion mainos + Tiedosto ”%s$s” (%2$s) on liian iso lĂ€hetettĂ€vĂ€ksi. Raja on %3$s. + + Yhteystieto + Ă„Ă€ni + Jakotiedon kĂ€sittely epĂ€onnistui + + Muokattu ilmianto + Ilmianna tĂ€mĂ€ sisĂ€ltö + SisĂ€llön ilmiannon syy + ILMIANNA + ESTÄ KÄYTTÄJÄ + + SisĂ€ltö ilmiannettu + TĂ€mĂ€ sisĂ€ltö on ilmiannettu. +\n +\nJos et halua nĂ€hdĂ€ enempÀÀ sisĂ€ltöÀ tĂ€ltĂ€ kĂ€yttĂ€jĂ€ltĂ€, voit estÀÀ hĂ€net piilottaaksesi hĂ€nen viestit + Ilmiannettu roskapostina + TĂ€mĂ€ sisĂ€ltö on ilmiannettu roskapostina. +\n +\nJos et halua nĂ€hdĂ€ enempÀÀ sisĂ€ltöÀ tĂ€ltĂ€ kĂ€yttĂ€jĂ€ltĂ€, voit estÀÀ hĂ€net piilottaaksesi hĂ€nen viestit + Ilmiannettu epĂ€sopivana + TĂ€mĂ€ sisĂ€ltö on ilmiannettu epĂ€sopivana. +\n +\nJos et halua nĂ€hdĂ€ enempÀÀ sisĂ€ltöÀ tĂ€ltĂ€ kĂ€yttĂ€jĂ€ltĂ€, voit estÀÀ hĂ€net piilottaaksesi hĂ€nen viestit + + Riot tarvitsee oikeuden tallentaakseen osapuolten vĂ€lisen salauksen avaimesi talteen. +\n +\nSalli pÀÀsy tiedostoihin seuraavassa ponnahdusikkunassa, jotta voit viedĂ€ avaimesi kĂ€sin. + diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index 6057627163..cc81f595d2 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -1709,7 +1709,7 @@ Si vous n’avez pas configurĂ© de nouvelle mĂ©thode de rĂ©cupĂ©ration, un attaq RĂ©essayez quand vous aurez acceptĂ© les termes et conditions de votre serveur d’accueil. - On dirait que le serveur mette trop de temps Ă  rĂ©pondre. Ça peut ĂȘtre dĂ» Ă  une mauvaise connexion ou Ă  une erreur avec nos serveurs. RĂ©essayez plus tard. + On dirait que le serveur met trop de temps Ă  rĂ©pondre. Ça peut ĂȘtre dĂ» Ă  une mauvaise connexion ou Ă  une erreur avec le serveur. RĂ©essayez plus tard. Envoyer une piĂšce jointe @@ -1770,4 +1770,39 @@ Si vous n’avez pas configurĂ© de nouvelle mĂ©thode de rĂ©cupĂ©ration, un attaq Il n’y a aucune connexion au rĂ©seau pour le moment + Confirmez votre mot de passe + Vous ne pouvez pas faire cela depuis Riot mobile + Une authentification est nĂ©cessaire + + + IntĂ©grations + Utilisez un gestionnaire d’intĂ©grations pour gĂ©rer les bots, les passerelles, les widgets et les packs de stickers. +\nLes gestionnaires d’intĂ©grations reçoivent des donnĂ©es de configuration et peuvent modifier des widgets, envoyer des invitations de salon et dĂ©finir des rangs Ă  votre place. + Autoriser les intĂ©grations + Widget + Charger un widget + Ce widget a Ă©tĂ© ajoutĂ© par : + Son utilisation peut entraĂźner l’utilisation de cookies et le partage de donnĂ©es avec %s : + Son utilisation peut entraĂźner le partage de donnĂ©es avec %s : + Échec de chargement du widget. +\n%s + Recharger le widget + Ouvrir dans le navigateur + RĂ©voquer l’accĂšs pour moi + + Votre nom affichĂ© + L’URL de votre avatar + Votre identifiant utilisateur + Votre thĂšme + L’identifiant du widget + L’identifiant du salon + + + Ce widget veut utiliser les ressources suivantes : + Autoriser + Tout bloquer + Utiliser la camĂ©ra + Utiliser le micro + Lire des mĂ©dias protĂ©gĂ©s par des DRM + diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index caca6bd7c8..1f518fd590 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -1769,4 +1769,40 @@ Ha nem te ĂĄllĂ­tottad be a visszaĂĄllĂ­tĂĄsi metĂłdust, akkor egy tĂĄmadĂł prĂł Jelenleg nincs hĂĄlĂłzati kapcsolat + JelszĂł megerƑsĂ­tĂ©s + Riot mobilrĂłl ezt nem teheted meg + AzonosĂ­tĂĄs szĂŒksĂ©ges + + + IntegrĂĄciĂłk + Botok, hidak, kisalkalmazĂĄsok Ă©s matrica csomagok kezelĂ©sĂ©hez hasznĂĄlj IntegrĂĄciĂłs Menedzsert. +\n +\nIntegrĂĄciĂłs Menedzser megkapja a konfigurĂĄciĂłt, mĂłdosĂ­that kisalkalmazĂĄsokat, szobĂĄhoz meghĂ­vĂłt kĂŒldhet Ă©s a hozzĂĄfĂ©rĂ©si szintet beĂĄllĂ­thatja helyetted. + IntegrĂĄciĂłk engedĂ©lyezĂ©se + KisalkalmazĂĄs + KisalkalmazĂĄs betöltĂ©se + Ezt a kisalkalmazĂĄst hozzĂĄadta: + A hasznĂĄlatĂĄhoz lehet, hogy sĂŒtiket kell hasznĂĄlni Ă©s adat lesz megosztva ezzel: %s: + A hasznĂĄlatĂĄhoz lehet, hogy adat lesz megosztva ezzel: %s: + KisalkalmazĂĄs betöltĂ©se sikertelen: +\n%s + KisalkalmazĂĄs ĂșjratöltĂ©se + MegnyitĂĄs böngĂ©szƑben + HozzĂĄfĂ©rĂ©s megvonĂĄsa magamtĂłl + + MegjelenĂ­tĂ©si neved + ProfilkĂ©ped URL-je + FelhasznĂĄlĂłi azonosĂ­tĂłd + TĂ©mĂĄd + KisalkalmazĂĄs azon. + Szoba azonosĂ­tĂł + + + Ez a kisalkalmazĂĄs az alĂĄbbi erƑforrĂĄsokat szeretnĂ© hasznĂĄlni: + EngedĂ©lyez + Mind tiltĂĄsa + Kamera hasznĂĄlata + Mikrofon hasznĂĄlata + DRM-mel vĂ©dett mĂ©dia olvasĂĄsa + diff --git a/vector/src/main/res/values-id/strings.xml b/vector/src/main/res/values-id/strings.xml index 56f6d4deb2..692fa7ad13 100644 --- a/vector/src/main/res/values-id/strings.xml +++ b/vector/src/main/res/values-id/strings.xml @@ -1,6 +1,6 @@ - in + id ID Pesan diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index d46eaa987b..ddc19fe125 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -10,39 +10,39 @@ Messaggi Stanza Impostazioni - Dettagli membri + Dettagli sui membri Cronologia OK Annulla Salva - Lascia + Esci Invia Copia - Rinvia + Rispedisci Rimuovi - Cita + Citazione Condividi Ultimi Inoltra - Collegamento permanente - Vedi sorgente - Vedi sorgente decriptato + Permalink + Vedi il codice sorgente + Vedi il codice sorgente decifrato Elimina Rinomina - Segnala contenuto - Chiamata attiva - Chiamata di conferenza in corso. + Segnala questo contenuto + Chiamata in corso + Avvio conferenza. \nUnisciti come %1$s o %2$s - Voce + Audio Video Impossibile avviare la chiamata, riprova piĂč tardi - A causa di permessi insufficienti, potrebbero mancare alcune funzioni
 - Necessiti del permesso per invitare ad iniziare una conferenza in questa stanza + PoichĂš i tuoi permessi non sono sufficienti, alcune funzioni potrebbero non esser disponibili
 + Non hai permessi sufficienti per avviare una conferenza in questa stanza Impossibile avviare la chiamata - Informazioni dispositivo - Le chiamate in modalitĂ  conferenza non sono supportate nelle stanze criptate + Informazioni sul dispositivo + Le stanze criptate non supportano le conferenze Invia comunque o Invita @@ -50,7 +50,7 @@ Disconnetti - Chiamata voce + Chiamata audio Chiamata video Ricerca globale Segna tutti come letti @@ -68,14 +68,14 @@ Home Preferiti - Persone + Chat dirette Stanze - Filtra i nomi delle stanze - Filtra i preferiti - Filtra le persone - Filtra i nomi delle stanze + Cerca + Cerca tra i preferiti + Cerca tra le chat dirette + Cerca tra le stanze Inviti @@ -83,11 +83,11 @@ Conversazioni - Libro degli indirizzi locale + Rubrica locale Elenco utenti - Solo contatti Matrix + Mostra solo i contatti Matrix Nessuna conversazione - Riot non ha il permesso di accedere ai tuoi contatti locali + Riot non ha avuto l\'autorizzazione ad accedere alla tua Rubrica locale Nessun risultato @@ -100,18 +100,18 @@ %d utenti - Invia registri - Invia registri di crash - Invia istantanea + Invia i registri + Invia i registri di crash + Invia schermata Segnala errore - Per favore descrivi l\'errore. Cosa hai fatto? Cosa ti aspettavi dovesse accadere? Cosa Ăš effettivamente successo? + Per favore descrivi l\'errore. Cosa stavi facendo\? Cosa ti aspettavi dovesse accadere\? Cosa Ăš effettivamente successo\? Descrivi qui il problema - Al fine di diagnosticare i problemi, i registri Riot di questo dispositivo saranno inviati con il rapporto dell\'errore. Questo rapporto, che include i registri e l\'istantanea grafica, non sarĂ  pubblicamente visibile. Se preferisci inviare solo il testo soprastante, deseleziona: - Sembra che tu stia scuotendo il dispositivo con frustrazione. Desideri aprire la schermata di segnalazione errore? - L\'applicazione Ăš andata in crash l\'ultima volta. Desideri aprire la schermata di segnalazione del crash? + Per permettere una diagnosi del problema, oltre alla segnalazione errore verranno inviati anche i registri di Riot. Rapporto, registri e schermata non saranno resi pubblici. Tuttavia, se preferisci inviare solamente la segnalazione, deseleziona: + Sembra tu stia scuotendo il dispositivo con rabbia. Vuoi segnalare un errore\? + L\'ultima volta l\'applicazione Ăš andata in crash. Vuoi inviare una segnalazione\? - La segnalazione dell\'errore Ăš stata spedita con successo - Fallito l\'invio della segnalazione di errore (%s) + La segnalazione errore Ăš stata spedita + L\'invio della segnalazione errore Ăš fallito (%s) Avanzamento (%s%%) Invia file in @@ -122,16 +122,16 @@ Crea account Accedi Disconnetti - URL server home - URL server identitĂ  + URL dell\'Home Server + URL dell\'Identity Server Cerca - Inizia nuova chat - Avvia chiamata voce + Avvia una nuova chat diretta + Avvia chiamata audio Avvia chiamata video Invia file - Cattura foto o video + Fai una foto o un video Accedi @@ -152,35 +152,33 @@ Conferma la nuova password Nome utente e/o password non corretti Il nome utente puĂČ contenere solo lettere, numeri, punti, trattini e linee basse - Password troppo breve (min 6) - Password mancante - Non sembra essere un indirizzo email valido - Non sembra essere un numero di telefono valido - L\'indirizzo email Ăš giĂ  stato definito. - Indirizzo email mancante - Numero di telefono mancante - Indirizzo email o numero di telefono mancante + Password troppo corta (min 6) + Manca la password + Questo indirizzo email non sembra corretto + Questo numero di telefono non sembra corretto + L\'indirizzo email Ăš giĂ  stato impostato. + Manca l\'indirizzo email + Manca il numero di telefono + Manca l\'indirizzo email o il numero di telefono Token non valido Le password non corrispondono - Password dimenticata? + Hai dimenticato la password\? Usa opzioni server personalizzate (avanzate) Per favore controlla la tua email per proseguire la registrazione - La registrazione con email e numero di telefono in una volta sola non Ăš ancora supportata (relative API in sviluppo). SarĂ  utilizzato solo il numero di telefono. - -Puoi aggiungere la tua email al tuo profilo dalle impostazioni. - Questo server home vorrebbe assicurarsi che tu non sia un robot - Nome utente in uso - Server home: - Server identitĂ : + La registrazione con email e numero di telefono in una volta sola non Ăš ancora supportata. SarĂ  utilizzato solo il numero di telefono. Potrai aggiungere l\'indirizzo email al tuo profilo dalle impostazioni. + Questo Home Server vorrebbe assicurarsi che tu non sia un robot + Nome utente giĂ  in uso + Home Server: + Identity Server: Ho verificato il mio indirizzo email - Per ripristinare la password, inserisci l\'indirizzo email associato al tuo account: - L\'indirizzo email associato al tuo account deve essere inserito. - Una nuova password deve essere inserita. - Un\'email Ăš stata inviata a %s. Appena avrai seguito il link lĂŹ contenuto, clicca qui sotto. - Verifica indirizzo email fallita: assicurati di aver cliccato sul link contenuto nell\'email - La tua password Ăš stata ripristinata. - -Sei stato disconnesso da tutti i dispositivi e non riceverai piĂč alcuna notifica. Per riabilitare le notifiche, riconnettiti su ciascun dispositivo. + Per reimpostare la password, inserisci l\'indirizzo email associato al tuo account: + Va inserito l\'indirizzo email associato al tuo account. + Va inserita una nuova password. + E\' stata inviata una mail a %s. Dopo che avrai seguito il link che contiene, clicca qui sotto. + La verifica del tuo indirizzo email Ăš fallita: assicurati di aver cliccato sul link contenuto nella mail + La tua password Ăš stata reimpostata. +\n +\nSei stato disconnesso da tutti i dispositivi e non riceverai piĂč alcuna notifica. Per ripristinare le notifiche, riconnettiti su ciascun dispositivo. L\'URL deve iniziare con http[s]:// @@ -191,18 +189,18 @@ Sei stato disconnesso da tutti i dispositivi e non riceverai piĂč alcuna notific Impossibile registrarsi: difetto proprietĂ  dell\'email Inserisci un URL valido - Nome utente/password non validi - Il token di accesso specificato non Ăš stato riconosciuto + Nome utente/password non corretto + Il Token di accesso specificato non Ăš stato riconosciuto JSON malformato Non conteneva un JSON valido Sono state inviate troppe richieste Questo nome utente Ăš giĂ  in uso - Il link nell\'email non Ăš ancora stato cliccato + Il link nella mail non Ăš ancora stato cliccato - È necessario eseguire nuovamente l\'accesso per generare le chiavi di crittografia da-utente-a-utente per questo dispositivo ed inviare la chiave pubblica al server home. -CiĂČ puĂČ capitare solo una volta. -Ci scusiamo per l\'inconveniente. + È necessario eseguire nuovamente l\'accesso per generare le chiavi crittografiche per questo dispositivo ed inviare la chiave pubblica al\'Home Server. +\nQuesto inconveniente non capiterĂ  piĂč. +\nScusa per il disguido. Elenco ricevute lette @@ -231,46 +229,46 @@ Ci scusiamo per l\'inconveniente. Argomento stanza - Chiamata connessa + Chiamata in corso Chiamata in connessione
 Chiamata terminata - Sto chiamando
 + Chiamata in corso
 Chiamata in arrivo - Videochiamata in arrivo - Chiamata voce in arrivo + Chiamata video in arrivo + Chiamata audio in arrivo Chiamata in corso
 Ricezione fallita da parte del destinatario. - Fallita connessione al supporto multimediale + La connessione al supporto multimediale Ăš fallita Impossibile avviare la fotocamera chiamata risposta altrove - Cattura foto o video + Fai una foto o un video Impossibile registrare video Informazione - Riot necessita del permesso di accedere alla tua galleria di foto e video per inviare e salvare allegati. - -Per favore consenti l\'accesso nella prossima finestra cosĂŹ da poter inviare file dal tuo telefono. - Riot necessita del permesso di accedere alla fotocamera per scattare foto e fare videochiamate. - - -Per favore dai l\'autorizzazione nella prossima finestra al fine di effettuare la chiamata. - Riot necessita del permesso di accedere al microfono per eseguire chiamate audio. - - -Per favore dai l\'autorizzazione nella prossima finestra al fine di effettuare la chiamata. - Riot necessita del permesso di accedere alla fotocamera ed al microfono per eseguire videochiamate. - -Per favore consenti l\'accesso nella prossima finestra per potere effettuare la chiamata. - Riot puĂČ accedere alla tua rubrica per trovare altri utenti Matrix basandosi sulla loro email e sul numero di telefono. Se sei d\'accordo sulla condivisione della tua rubrica a questo scopo, consenti l\'accesso nella prossima finestra. - Riot puĂČ accedere alla tua rubrica per trovare altri utenti Matrix basandosi sulla loro email e sul numero di telefono. + Riot deve essere autorizzato ad accedere alla tua Galleria di foto e video per poter inviare e salvare allegati. \n -\nSei d\'accordo sulla condivisione della tua rubrica a questo scopo\? +\nNel prossimo pop-up concedi l\'autorizzazione per poteri inviare file dal tuo dispositivo. + Riot deve essere autorizzato ad accedere alla tua fotocamera per poter fare foto e video. + " +\n +\nNel prossimo pop-up concedi l\'autorizzazione per poter fare la chiamata." + Riot deve essere autorizzato ad accedere al microfono e poter cosĂŹ fare chiamate audio. + " +\n +\nNel prossimo pop-up concedi l\'autorizzazione per poter fare la chiamata." + Riot deve essere autorizzato ad accedere a fotocamera e microfono per poter fare chiamate video. +\n +\nNel prossimo pop-up concedi le autorizzazioni per poter fare la chiamata. + Riot puĂČ usare tua Rubrica locale per trovare altri utenti Matrix grazie alle loro email e numeri di telefono. Se ti sta bene comunicare i dati di tutti i tuoi contatti all\'Identity Server, puoi concedere l\'autorizzazione nel prossimo pop-up. + Riot puĂČ usare tua Rubrica locale per trovare altri utenti Matrix grazie alle loro email e numeri di telefono. +\n +\nTi sta bene comunicare i dati di tutti i tuoi contatti per questo scopo\? - Spiacente. Azione non eseguita a causa di mancate autorizzazioni + Purtroppo l\'azione non Ăš stata eseguita poichĂš mancano i permessi Salvato @@ -280,7 +278,7 @@ Per favore consenti l\'accesso nella prossima finestra per potere effettuare la Continua - Rimuoviti + Rimuovi Unisciti Anteprima Rifiuta @@ -289,19 +287,20 @@ Per favore consenti l\'accesso nella prossima finestra per potere effettuare la Vai al primo messaggio non letto. - Sei stato invitato ad unirti in questa stanza da %s - Questo invito Ăš stato spedito da %s, che non Ăš associato a questo account. È possibile che tu voglia connetterti con un altro account, o aggiungere l\'email al tuo account. + Sei stato invitato ad entrare in questa stanza da %s + Questo invito Ăš stato spedito a %s, che non Ăš associato a questo account. +\nPuoi aggiungere questa email al tuo account o provare ad accedere con un account differente. Stai provando ad accedere a %s. Desideri entrare per partecipare alla discussione? una stanza - Questa Ăš l\'anteprima della stanza. Le interazioni con la stanza sono state disabilitate. + Questa Ăš l\'anteprima della stanza. Le interazioni sono disabilitate. Nuova chat - Aggiungi membro - 1 membro + Aggiungi utente + 1 utente - Lascia stanza + Esci dalla stanza Sei sicuro di voler uscire dalla stanza? Sei sicuro di voler rimuovere %s da questa chat? Crea @@ -316,32 +315,32 @@ Per favore consenti l\'accesso nella prossima finestra per potere effettuare la DISPOSITIVI Invita - Lascia questa stanza - Rimuovi da questa stanza - Bandisci - Togli il bando + Esci da questa stanza + Butta fuori da questa stanza + Bannalo + Togli il ban Ripristina ad utente normale - Rendi moderatore - Rendi amministratore + Nomina moderatore + Nomina amministratore Nascondi tutti i messaggi di questo utente Mostra tutti i messaggi di questo utente ID utente, nome o email - Citazione - Mostra elenco dispositivi - Non potrai annullare questa modifica in quanto promuoverai l\'utente al tuo stesso livello di potere. -Sicuro di procedere? + Cita + Mostra l\'elenco dei dispositivi + La nomina non potrĂ  essere annullata perchĂ© darai a questo utente i tuoi stessi poteri. +\nSicuro di voler procedere\? - "Sicuro di voler invitare %s in questa chat?" + Sicuro di voler invitare %s\? - Invita tramite ID + Invita tramite ID utente CONTATTI LOCALI (%d) ELENCO UTENTI (%s) Solo utenti Matrix - Invita utente tramite ID - Per favore inserisci uno o piĂč indirizzi email o ID Matrix - Email o ID Matrix + Invita tramite ID utente + Per favore inserisci uno o piĂč indirizzi email o ID utente + Email o ID utente Cerca @@ -352,11 +351,11 @@ Sicuro di procedere? Messaggio non criptato
 La connessione al server Ăš stata persa. Messaggi non inviati. %1$s o %2$s ora? - Messaggi non inviati a causa di dispositivi sconosciuti qui presenti. %1$s o %2$s ora? + Messaggi non inviati a causa della presenza di dispositivi sconosciuti. %1$s o %2$s ora\? Rispedisci tutto Annulla tutto - Rinvia messaggi non spediti - Elimina messaggi non spediti + Rispedisci messaggi non inviati + Elimina i messaggi non inviati File non trovato Non hai il permesso di pubblicare in questa stanza @@ -367,40 +366,40 @@ Sicuro di procedere? Ignora Impronta digitale (%s): Impossibile verificare l\'identitĂ  del server remoto. - CiĂČ potrebbe significare che qualcuno sta intercettando il tuo traffico, oppure il tuo telefono non riconosce come affidabile il certificato fornito dal server remoto. - Se l\'amministratore del server ha dichiarato che questa anomalia Ăš prevista, assicurati che l\'impronta digitale corrisponda a quella fornita da loro. - Il certificato Ăš cambiato rispetto a quello ritenuto affidabile dal tuo telefono. Questo Ăš ESTREMAMENTE INSOLITO. Si raccomanda di NON ACCETTARE questo nuovo certificato. - Il certificato Ăš cambiato da quello precedente ritenuto affidabile ad uno non affidabile. Il server potrebbe aver rinnovato il proprio certificato. Contatta l\'amministratore del server per chiedere l\'impronta digitale prevista. - Accetta il certificato solo se l\'amministratore ha pubblicato un\'impronta digitale che corrisponda a quella qua sopra. + CiĂČ potrebbe voler dire che qualcuno sta intercettando il tuo traffico dati, oppure che il tuo telefono non riconosce come affidabile il certificato fornito dal server remoto. + Se l\'amministratore del server ha dichiarato che questa anomalia Ăš prevista, assicurati che l\'impronta digitale corrisponda a quella fornita dal server stesso.. + Il certificato Ăš diverso da quello precedentemente contrassegnato sul tuo telefono come \"affidabile\". Questa cosa Ăš MOLTO INSOLITA. Si raccomanda di NON ACCETTARE questo nuovo certificato. + Il certificato del server Ăš cambiato: quello precedente era stato contrassegnato come affidabile ma quello attuale no. PuĂČ darsi che il certificato precedente sia scaduto e sia stato semplicemente sostituito con uno nuovo. Contatta l\'amministratore del server per verificare l\'impronta digitale in uso. + Contrassegna il certificato come affidabile solo se l\'mpronta digitale comunicata dall\'amministratore del server corrisponde a quella qua sopra. Dettagli stanza - Persone + Utenti File Impostazioni - ID malformato. Dovrebbe essere un indirizzo email o un ID Matrix come \'@localpart:domain\' + ID malformato. Dovrebbe essere un indirizzo email o un ID utente come \'@localpart:domain\' INVITATI - AGGIUNTI + MEMBRI - Motivo per segnalare questo contenuto - Desideri nascondere tutti i messaggi di questo utente? - -Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tempo. - Annulla caricamento - Annulla scaricamento + Motivo per cui segnali questo contenuto + Desideri nascondere tutti i messaggi di questo utente\? +\n +\nTieni presente che questa azione riavvierĂ  l\'app e ciĂČ potrebbe richiedere molto tempo. + Annulla l\'upload + Annulla il download Cerca - Filtra membri della stanza + Cerca tra i membri della stanza Nessun risultato STANZE MESSAGGI - PERSONE + UTENTI FILE - ENTRARE + ENTRA ELENCO PREFERITI STANZE @@ -410,17 +409,17 @@ Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tem Crea stanza Entra nella stanza Entra in una stanza - Digita ID o soprannome (alias) + Digita l\'ID stanza o il suo nome - Esplora elenco + Esplora l\'elenco Ricerca negli elenchi
 Preferito Bassa prioritĂ  Chat diretta - Lascia conversazione + Esci dalla conversazione Dimentica @@ -434,30 +433,30 @@ Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tem - Immagine profilo + Immagine del profilo Nome visualizzato Email Aggiungi indirizzo email Telefono Aggiungi numero di telefono - Mostra le informazioni dell\'app nelle impostazioni di sistema. - Informazioni applicazione + Mostra le informazioni dell\'App nelle Impostazioni di sistema. + Informazioni sull\'App - Abilita notifiche per questo account - Abilita notifiche per questo dispositivo + Abilita le notifiche per questo account + Abilita le notifiche per questo dispositivo Accendi lo schermo per 3 secondi alla notifica - Msg nelle chat uno-a-uno - Msg nelle chat di gruppo - Quando vengo invitato in una stanza + Messaggi nelle chat dirette + Messaggi nelle chat di gruppo + Invito ad entrare in una stanza Invito ad una chiamata Messaggi inviati da bot Esegui all\'avvio - Sincronizzazione in sottofondo - Abilita sync in sottofondo - Attesa per una richiesta di sync - Attesa per ogni sincronizzazione + Sincronizzazione in background + Abilita la sincronizzazione in background + La richiesta di sincronizzazione sta impiegando troppo tempo + Ritardo tra ogni sincronizzazione secondo secondi @@ -467,9 +466,9 @@ Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tem Avvisi di terze parti Copyright Politica sulla privacy - Elimina cache - Elimina file multimediali temporanei - Conserva file multimediali + Svuota la cache + Svuota la cache dei file multimediali + Conserva i file multimediali Impostazioni utente Notifiche @@ -479,63 +478,63 @@ Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tem Crittografia Target delle notifiche Contatti locali - Autorizzazione contatti - Nazione rubrica telefonica + Consenti l\'accesso alla Rubrica locale + Prefisso telefonico internazionale Schermata iniziale Segna le stanze con notifiche perse Segna le stanze con messaggi non letti Dispositivi Mostra data e ora di tutti i messaggi - ModalitĂ  risparmio banda + ModalitĂ  risparmio dati - Informazioni dispositivo + Informazioni sul dispositivo ID Nome pubblico - Aggiorna nome pubblico - Ultima visualizzazione + Aggiorna il nome pubblico + Ultimo accesso %1$s @ %2$s Questa operazione richiede un\'autenticazione aggiuntiva.\nPer proseguire, inserisci la tua password. Autenticazione Password: Invia - Connesso come - Server home - Server identitĂ  + Autenticato come + Home Server + Identity Server Interfaccia utente Lingua Scegli una lingua In attesa di verifica - Controlla la tua email e clicca sul link lĂŹ contenuto. Fatto questo, clicca su Continua. - Impossibile verificare l\'indirizzo email. Controlla la tua email e clicca sul link lĂŹ contenuto. Fatto questo, clicca su continua. + Controlla la tua email e clicca sul link che ti Ăš stato spedito. Fatto questo, clicca su Continua. + Impossibile verificare l\'indirizzo email. Controlla la tua email e clicca sul link che ti Ăš stato spedito. Fatto questo, clicca su Continua. Questo indirizzo email Ăš giĂ  in uso. Questo indirizzo email non Ăš stato trovato. Questo numero di telefono Ăš giĂ  in uso. - Cambia password + Cambia la password Password attuale Nuova password - Conferma nuova password - Fallito l\'aggiornamento password + Conferma la nuova password + Fallito l\'aggiornamento della password La tua password Ăš stata aggiornata - Mostrare tutti i messaggi di %s? - -Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tempo. + Mostrare tutti i messaggi di %s\? +\n +\nTieni presente che questa azione riavvierĂ  l\'app e ciĂČ potrebbe richiedere molto tempo. Sicuro di voler rimuovere questo target di notifica? Sicuro di voler rimuovere %1$s %2$s? - Scegli una nazione + Scegli un paese - Nazione - Per favore scegli una nazione + Paese + Per favore scegli un paese Numero di telefono - Numero di telefono non valido per la nazione selezionata + Numero di telefono non valido per il paese selezionato Verifica numero di telefono - "Un SMS Ăš stato spedito con il codice di attivazione. Per favore inserisci il codice qui sotto." + E\' stato spedito un SMS con il codice di attivazione. Per favore inserisci il codice qui sotto. Inserisci un codice di attivazione Errore durante la convalida del numero di telefono Codice @@ -549,23 +548,23 @@ Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tem - Immagine stanza - Nome stanza + Icona della stanza + Nome della stanza Argomento - Etichetta stanza - Etichettata come: + Etichetta + Etichetta come: Preferito Bassa prioritĂ  - Niente + Nessuna etichetta Accesso e visibilitĂ  - Mostra questa stanza nell\'elenco delle stanze + Mostra questa stanza nell\'elenco delle stanze pubbliche Accesso alla stanza - LeggibilitĂ  cronologia della stanza - Chi puĂČ leggere la cronologia? + Accesso alla Timeline + Chi puĂČ leggere la Timeline\? Chi puĂČ entrare in questa stanza? @@ -575,37 +574,37 @@ Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tem Solo i membri (dal momento in cui entrano nella stanza) - Per indirizzare ad una stanza tramite link, essa deve avere un indirizzo. + Una stanza deve avere un indirizzo per poter essere linkata. Solo le persone che sono state invitate Chiunque conosca il link della stanza, eccetto gli ospiti Chiunque conosca il link della stanza, compresi gli ospiti - Utenti banditi + Utenti bannati Avanzate ID interno della stanza Indirizzi Laboratorio - Queste sono caratteristiche sperimentali che possono fallire in modo inatteso. Usare con cautela. + Queste sono caratteristiche sperimentali che potrebbero dare risultati inattesi. Usare con cautela. Crittografia da-utente-a-utente La crittografia da-utente-a-utente Ăš attiva Devi disconnetterti per abilitare la crittografia. Cripta solo per i dispositivi verificati - Non inviare mai da questa stanza messaggi criptati a dispositivi non verificati. + Non inviare mai da questa stanza dei messaggi criptati verso dispositivi che non siano stati verificati da questo stesso dispositivo. Questa stanza non ha indirizzi locali - Nuovo indirizzo (es. #foo:matrix.org) + Nuovo indirizzo stanza (es. #foo:matrix.org) - Formato soprannome non valido - \'%s\' non Ăš un formato valido per un soprannome - Non avrai un indirizzo principale specificato per questa stanza. + Il formato del nome della stanza non Ăš corretto + \'%s\' non Ăš un formato valido per un nome di stanza + Non avrai un indirizzo principale specifico per questa stanza. Avvisi per l\'indirizzo principale Imposta come indirizzo principale - Non piĂč come indirizzo principale + Non usare piĂč come indirizzo principale Copia ID stanza Copia indirizzo stanza @@ -618,20 +617,20 @@ Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tem Tema - %s stava cercando di caricare un punto specifico della cronologia di questa stanza, ma non l\'ha trovato. + %s stava cercando di caricare un punto specifico tra i messaggi passati di questa stanza, ma non l\'ha trovato. - Informazioni crittografia da-utente-a-utente + Informazioni sulla crittografia E2E - Informazioni evento + Informazioni sull\'evento ID utente Chiave identitĂ  Curve25519 Richiesta chiave per l\'impronta digitale Ed25519 Algoritmo ID sessione - Errore decriptazione + Errore di decriptazione - Informazioni dispositivo mittente + Informazioni sul dispositivo mittente Nome pubblico Nome pubblico ID @@ -639,56 +638,62 @@ Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tem Verifica Impronta digitale Ed25519 - Esporta chiavi da-utente-a-utente delle stanze + Esporta le chiavi di crittografia delle stanze Esporta le chiavi delle stanze Esporta le chiavi in un file locale Esporta - Inserisci frase d\'accesso (passphrase) - Conferma frase d\'accesso (passphrase) - Le chiavi da-utente-a-utente della stanza sono state salvate su \'%s\'. + Inserisci password + Conferma password + Le chiavi di crittografia della stanza sono state salvate su \'%s\'. +\n +\nAttenzione: se si disinstalla quest\'applicazione il file, viene eliminato. -Attenzione: questo file puĂČ essere eliminato se l\'applicazione viene disinstallata. - - Importa chiavi da-utente-a-utente delle stanze - Importa chiavi delle stanze + Importa le chiavi di crittografia della stanza + Importa le chiavi della stanza Importa le chiavi da un file locale Importa Cripta solo per i dispositivi verificati - Non inviare mai da questo dispositivo messaggi criptati a dispositivi non verificati. + Non inviare mai da questo dispositivo messaggi criptati verso dispositivi non verificati. NON verificato Verificato - Nella lista nera + Metti in lista nera dispositivo sconosciuto niente Conferma - Sconferma - Nella lista nera - Non nella lista nera + Rimuovi la conferma + Lista nera + Togli dalla lista nera - Verifica dispositivo - Per verificare che quel dispositivo Ăš affidabile, contatta il suo proprietario utilizzando altri canali di comunicazione (ad esempio, per persona o per telefono) e chiedigli se nelle Impostazioni, sezione Crittografia, la voce Chiave dispositivo corrisponde al codice riportato qui sotto: - Se ciĂČ corrisponde, premi il pulsante di verifica qui sotto. In caso contrario, qualcun altro sta intercettando questo dispositivo e probabilmente dovresti inserirlo nella lista nera. In futuro il processo di verifica sarĂ  piĂč sofisticato. - Ho verificato che le chiavi corrispondano + Verifica il dispositivo + Per verificare se quel dispositivo Ăš affidabile, contatta il suo proprietario utilizzando altri canali di comunicazione (ad esempio, per persona o per telefono) e chiedigli se nelle Impostazioni, sezione Crittografia, la chiave del dispositivo corrisponde a quella riportata qui sotto: + Se corrisponde, premi il pulsante di verifica qui sotto. In caso contrario, qualcun altro sta intercettando questo dispositivo e probabilmente dovresti metterlo in lista nera. In futuro il processo di verifica sarĂ  piĂč sofisticato. + Ho verificato che le chiavi corrispondono - Riot supporta ora la crittografia da-utente-a-utente, ma devi riconnetterti per abilitarla.\n\nPuoi farlo ora o piĂč tardi dalle impostazioni dell\'applicazione. + Riot supporta ora la crittografia da-utente-a-utente, ma per abilitarla devi riconnetterti. +\n +\nPuoi farlo ora, o piĂč tardi, dalle impostazioni dell\'applicazione. La stanza contiene dispositivi sconosciuti - Questa stanza contiene dispositivi sconosciuti che non sono stati verificati.\nCiĂČ significa che non esiste alcuna garanzia che i dispositivi appartengano agli utenti che ne rivendicano il possesso.\nSi consiglia di passare attraverso il processo di verifica per ogni dispositivo prima di continuare, ma Ăš possibile inviare ugualmente il messaggio senza fare la verifica se preferisci.\n\nDispositivi sconosciuti: + Questa stanza contiene dispositivi sconosciuti che non sono stati verificati. +\nNon v\'Ăš alcuna garanzia che le persone che utilizzano quei dispositivi siano davvero chi dicono d\'essere. +\nSi consiglia di verificare ogni dispositivo prima di continuare, ma se si preferisce, Ăš comunque possibile inviare ugualmente il messaggio anche senza la verifica. +\n +\nDispositivi sconosciuti: Scegli un elenco di stanze Il server potrebbe essere non disponibile o sovraccarico - Digita un server home per elencare le sue stanze pubbliche - URL server home - Tutte le stanze sul server home %s + Inserisci un Home Server per vedere le sue stanze pubbliche + URL dell\'Home Server + Tutte le stanze sull\'Home Server %s Tutte le stanze native %s - Cerca nella cronologia + Cerca tra i messaggi passati Grandezza font @@ -704,40 +709,40 @@ Attenzione: questo file puĂČ essere eliminato se l\'applicazione viene disinstal Tema Nero Sincronizzazione
 - Suono notifiche + Suono delle notifiche Mostra gli orari in formato 12 ore - Hai bisogno dei permessi per gestire i widget in questa stanza + Devi avere il permesso per poter gestire i widget in questa stanza %1$s aggiunto da %2$s %1$s rimosso da %2$s - Crea una videoconferenza con jitsi - Sei sicuro di voler eliminare questo widget da questa stanza? + Avvia una conferenza usando Jitsi + Vuoi davvero eliminare questo widget dalla stanza\? Impossibile creare il widget. - Invio della richiesta fallito. + L\'invio della richiesta Ăš fallito. Non sei in questa stanza. Non hai i permessi per eseguire l\'azione in questa stanza. - room_id mancante nella richiesta. - user_id mancante nella richiesta. - Aggiungi una app Matrix - Cattura foto - Cattura video + Nella richiesta manca l\'ID stanza. + Nella richiesta manca l\'ID utente. + Aggiungi un Widget + Fai una foto + Fai un video - Msg contenenti il nome mostrato - Msg contenenti il nome utente + Messaggi contenenti il nome mostrato + Messaggi contenenti il nome utente Notifiche silenziose Notifiche audio - In ascolto di eventi - Rapporto errori + Rilevazione eventi + Segnalazione errore - Cellulare + Smartphone Chiama Messaggio criptato - Dettagli della comunitĂ  + Dettagli sulla comunitĂ  Caricamento
 @@ -745,32 +750,32 @@ Attenzione: questo file puĂČ essere eliminato se l\'applicazione viene disinstal Azioni ComunitĂ  - Filtra i nomi delle comunitĂ  + Cerca tra le e comunitĂ  Invita ComunitĂ  Nessun gruppo - Agita con rabbia per segnalare un errore + Per segnalare un errore agita il dispositivo con rabbia - Sicuro di voler iniziare una nuova conversazione con %s? - Sicuro di voler iniziare una chiamata vocale? - Sicuro di voler iniziare una chiamata video? + Sicuro di voler avviare una nuova chat con %s\? + Sicuro di voler fare una chiamata audio\? + Sicuro di voler fare una chiamata video\? Elenco gruppi - Elenca i membri - Apri intestazione + Elenco dei membri + Apri descrizione Sincronizzazione
 - 1 membro attivo - %d membri attivi + 1 utente attivo + %d utenti attivi - 1 membro - %d membri + 1 utente + %d utenti - Sei sicuro di voler bandire dalla chat questo utente? + Sei sicuro di voler bannare questo utente\? 1 nuovo messaggio @@ -789,16 +794,16 @@ Attenzione: questo file puĂČ essere eliminato se l\'applicazione viene disinstal Tutti i messaggi Solo le citazioni Silenzioso - Aggiungi scorciatoia su schermata iniziale + Aggiungi scorciatoia sulla schermata iniziale - Anteprima degli URL in linea + Anteprima degli URL Vibra quando menzionano un utente Statistiche Notifiche Nuovo ID della comunitĂ  (es. +foo:matrix.org) - ID comunitĂ  non valido + L\'ID comunitĂ  non Ăš valido \'%s\' non Ăš un ID comunitĂ  valido @@ -816,7 +821,7 @@ Attenzione: questo file puĂČ essere eliminato se l\'applicazione viene disinstal %1$s in %2$s - Creazione del widget fallita + La creazione del widget Ăš fallita 1 widget attivo %d widget attivi @@ -824,18 +829,18 @@ Attenzione: questo file puĂČ essere eliminato se l\'applicazione viene disinstal La stanza %s non Ăš visibile. - Usa fotocamera nativa + Usa la fotocamera di sistema Hai aggiunto un nuovo dispositivo \'%s\' che sta richiedendo le chiavi crittografiche. - Il tuo dispositivo non verificato \'%s\' sta richiedendo le chiavi crittografiche. - Inizia la verifica + Il tuo dispositivo non verificato \'%s\' sta chiedendo le chiavi crittografiche. + Avvia la verifica Condividi senza verificare Ignora la richiesta Attenzione! - La chiamata in conferenza Ăš in fase di sviluppo e potrebbe non essere affidabile. + Le conferenze sono in fase di sviluppo e potrebbero non essere affidabili. Errore di comando @@ -849,7 +854,7 @@ Attenzione: questo file puĂČ essere eliminato se l\'applicazione viene disinstal Crea una comunitĂ  Nome della comunitĂ  Esempio - ID della comunitĂ  + ID comunitĂ  esempio @@ -860,25 +865,25 @@ Attenzione: questo file puĂČ essere eliminato se l\'applicazione viene disinstal Stanze Si Ăš unito Invitato - Filtra i membri del gruppo - Filtra le stanze del gruppo + Cerca tra i membri del gruppo + Cerca tra le stanze del gruppo - L\'amministratore non ha fornito una descrizione estesa per questa comunitĂ . + L\'amministratore non ha fornito una descrizione estesa di questa comunitĂ . %2$s ti ha buttato fuori da %1$s - %2$s ti ha bandito da %1$s + %2$s ti ha bannato da %1$s Motivo: %1$s Rientra Dimentica la stanza Avatar - Insegna + Predisposizione - Questa stanza non mostra insegne per alcuna comunitĂ  + Questa stanza non mostra predisposizione per alcuna comunitĂ  Il livello di potere deve essere un intero positivo. - Notificare avatar - Avatar ricevuto + Avatar di avviso + Avatar di ricezione 1 cambio d\'appartenenza %d cambi d\'appartenenza @@ -887,63 +892,63 @@ Attenzione: questo file puĂČ essere eliminato se l\'applicazione viene disinstal Privacy delle notifiche Normale Privacy ridotta - L\'app richiede il permesso per funzionare in sottofondo + L\'App deve essere autorizzata a funzionare in background ‱ Le notifiche vengono inviate via Firebase Cloud Messaging ‱ Le notifiche contengono solo metadati - ‱ Il contenuto del messaggio di una notifica si trova al sicuro direttamente dal server home di Matrix - ‱ Le notifiche contengono dati e metadati sul messaggio + ‱ Il contenuto del messaggio di una notifica Ăš emesso direttamente dall\'Home Server Matrix + ‱ Le notifiche contengono metadati e contenuto del messaggio ‱ Le notifiche non mostreranno il contenuto del messaggio - Privacy notifiche - Riot puĂČ funzionare in sottofondo per gestire le tue notifiche in modo sicuro e privato. CiĂČ puĂČ influenzare la durata della batteria. + Privacy delle notifiche + Riot puĂČ esser sempre attivo in background in modo da gestire le tue notifiche in modo costante e sicuro. CiĂČ puĂČ influire sulla durata della batteria. Concedi l\'autorizzazione Scegli un\'altra opzione - Invia un adesivo + Invia uno sticker - Invia adesivo - Non hai ancora alcun pacco di adesivi attivo. -\n -\nAggiungerne qualcuno ora\? + Invia sticker + Non ci sono pacchetti di sticker attivi. +\n +\nVuoi aggiungerne qualcuno\? - Disattiva iscrizione + Disattiva l\'account Disattiva il mio account - Invia statistiche di utilizzo - Riot raccoglie statistiche anonime per permetterci di migliorare l\'applicazione. - Attiva le statistiche per aiutarci a migliorare Riot. + Invia le statistiche di utilizzo + Riot raccoglie statistiche anonime per permettere il miglioramento dell\'applicazione. + Attiva le statistiche per aiutare a migliorare Riot. SĂŹ, voglio aiutare! - Parametro necessario mancante. - Un parametro non Ăš valido. - Per continuare ad usare l\'homeserver %1$s devi leggere e accettare i termini e le condizioni di utilizzo. - Leggi adesso + Manca un parametro indispensabile. + Uno dei parametri non Ăš valido. + Per continuare ad usare l\'Home Server %1$s devi leggerne e accettarne i termini di servizio. + Leggi ora - Disattiva account - Questo renderĂ  il tuo account permanentemente inutilizzabile. Non ci potrai piĂč accedere e nessuno potrĂ  ri-registrare lo stesso ID utente. Il tuo account abbandonerĂ  tutte le stanze a cui partecipa e i dettagli del tuo account saranno rimossi dal server identitĂ . Questa azione Ăš irreversibile. - -Disattivare il tuo account non eliminerĂ  in modo automatico i messaggi che hai inviato. Se vuoi che siano dimenticati i tuoi messaggi, seleziona la casella qua sotto. - -La visibilitĂ  dei messaggi in Matrix Ăš simile alle email. \"Dimenticare i tuoi messaggi\" significa che quelli che hai inviato non verranno condivisi con alcun utente nuovo o non registrato, ma gli utenti registrati che hanno avuto accesso ai tuoi messaggi avranno ancora accesso alla loro copia. - Per favore dimenticate tutti i messaggi che ho inviato al momento della disattivazione del mio account (Attenzione: gli utenti futuri vedranno un elenco incompleto di conversazioni) + Disattiva l\'account + CiĂČ renderĂ  il tuo account inutilizzabile per l\'eternitĂ . Non potrai piĂč accederci e nessuno potrĂ  ri-registrare lo stesso ID utente. Il tuo account uscirĂ  da tutte le stanze in cui si trova attualmente e di dettagli del tuo account saranno rimossi dall\'Identity Server. Questa azione Ăš irreversibile. +\n +\nDisattivare il tuo account non eliminerĂ  i messaggi che hai inviato. Se vuoi che i tuoi messaggi siano dimenticati seleziona la casella qua sotto. +\n +\nLa visibilitĂ  dei messaggi in Matrix Ăš simile alle email. Questo vuol dire che se chiedi di \"dimenticare i tuoi messaggi\", quelli che hai inviato finora non verranno mai piĂč condivisi con alcun nuovo utente, ma gli utenti che hanno giĂ  avuto accesso ai tuoi messaggi continueranno a potervi accedere. + Per favore dimenticate tutti i messaggi che ho inviato fino al momento della disattivazione del mio account (Attenzione: in questo modo i nuovi utenti potrebbero vedere delle conversazioni incomplete) Per continuare, inserisci la tua password: - Disattiva account + Disattiva l\'account Licenze di terze parti Scarica Parla Svuota - Richiedi di nuovo le chiavi di cifratura dai tuoi altri dispositivi. + Richiedi di nuovo le chiavi di crittografia dagli altri tuoi dispositivi. - Richiesta chiave inviata. + La richiesta della chiave Ăš stata inviata. Richiesta inviata - Avvia Riot su un altro dispositivo che possa decifrare il messaggio, in modo da inviare le chiavi a questo dispositivo. + Avvia Riot su un altro dispositivo che possa decifrare il messaggio, in modo che possa inviare le chiavi a questo dispositivo. Digita qui
 - Invia voce + Invia messaggio vocale prosegui con
 Spiacenti, ma non Ăš stata trovata alcuna applicazione esterna per completare l\'azione. @@ -953,37 +958,37 @@ La visibilitĂ  dei messaggi in Matrix Ăš simile alle email. \"Dimenticare i tuoi Persone Per favore, inserisci la tua password. - Se possibile, scrivi la descrizione in inglese, grazie. + Se possibile, scrivi in inglese, grazie. Invia risposta criptata
 Risposta non criptata
 Mostra file multimediale prima dell\'invio - Attualmente non sei membro di alcuna comunitĂ . + Al momento non fai parte di alcuna comunitĂ . - Usa invio da tastiera per spedire un messaggio + Usa il tasto invio per spedire i messaggi Mostra l\'azione - Bandisci utente con un dato id - Togli il bando a un utente con un dato id - Definisci il livello di potere di un utente - Dimentica utente con un dato id - Invita utente con un dato id nella stanza corrente - Entra nella stanza con un determinato alias - Lascia la stanza - Imposta argomento della stanza - Butta fuori un utente con un dato id + Banna utente con l\'ID specificato + Togli il ban all\'utente con l\'ID specificato + Imposta i poteri di un utente + Rimuove il rango di operatore dall\'utente con l\'ID specificato + Invita l\'utente con l\'ID specificato nella stanza corrente + Entra nella stanza con un determinato nome + Esci dalla stanza + Imposta l\'argomento della stanza + Butta fuori l\'utente con l\'ID specificato Cambia il tuo nome visualizzato Markdown attivo / spento - Per correggere la gestione delle app Matrix + Per correggere la gestione dei widget - Questa stanza Ăš stata sostituita e non Ăš piĂč attiva + Questa stanza Ăš stata sostituita da un\'altra e non Ăš piĂč attiva La conversazione continua qui - Questa stanza Ăš la continuazione di un\'altra conversazione - Clicca qui per vedere i messaggi piĂč vecchi + Questa stanza contiene una conversazione cominciata altrove + Clicca qui per vedere i messaggi precedenti - Mostrare tutti i messaggi di questo utente? - -Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tempo. - A causa di permessi insufficienti, questa azione non Ăš possibile. + Mostrare tutti i messaggi di questo utente\? +\n +\nTieni presente che questa azione riavvierĂ  l\'app e ciĂČ potrebbe richiedere molto tempo. + Non hai permessi sufficienti per effettuare questa azione. 1s %ds @@ -1028,31 +1033,31 @@ Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tem contatta l\'amministratore del servizio - Il server home ha superato uno dei limiti delle risorse, pertanto alcuni utenti non potranno accedere. - Il server home ha superato uno dei limiti delle risorse. + L\'Home Server ha superato uno dei limiti delle risorse, pertanto alcuni utenti non potranno accedere. + L\'Home Server ha superato uno dei limiti delle risorse. - Il server home ha raggiunto il limite mensile di utenti attivi, pertanto alcuni utenti non potranno accedere. - Il server home ha raggiunto il limite mensile di utenti attivi. + L\'Home Server ha raggiunto il limite mensile di utenti attivi, pertanto alcuni utenti non potranno accedere. + L\'Home Server ha raggiunto il limite mensile di utenti attivi. Per favore %s per aumentare questo limite. Per favore %s per continuare ad usare questo servizio. Errore - Aumenta le prestazioni caricando i membri della stanza solo alla prima visualizzazione. - Il tuo server home non supporta ancora il caricamento posticipato dei membri delle stanze. Prova in seguito. + Aumenta la performance caricando i dati dei membri della stanza solo quando questi si fan vedere. + Il tuo Home Server non supporta ancora il caricamento differito dei membri delle stanze. Prova piĂč avanti. Spiacente, si Ăš verificato un errore - Caricamento posticipato dei membri della stanza + Caricamento differito dei membri della stanza Tema Status.im Versione %s - Crea una passphrase (frase d\'ordine) per crittografare le chiavi esportate. Dovrai inserire la stessa passphrase per poter importare le chiavi. - Crea passphrase - Le passphrase devono corrispondere + Crea una password per mettere al sicuro le chiavi esportate. La stessa password dovrĂ  essere usata per poter importare le chiavi. + Crea una password + Le password devono corrispondere espandi - collassa + riduci Mostra l\'area informazioni Sempre @@ -1067,115 +1072,114 @@ Tieni presente che questa azione riavvierĂ  l\'app e potrebbe richiedere del tem Chiama comunque Butta fuori - Sei sicuro di voler buttare fuori questo utente dalla chat? - Sei sicuro di voler buttare fuori questi utenti dalla chat? + Sei sicuro di voler buttare fuori questo utente\? + Sei sicuro di voler buttare fuori questi utenti\? Motivo - Visualizza anteprima dei link all\'interno della chat quando il tuo server home supporta questa funzione. + Se il tuo Home Server supporta questa funzione, all\'interno delle chat verrĂ  visualizzata un\'anteprima dei link postati. Invia notifiche di digitazione Fai sapere agli altri utenti che stai scrivendo. - Formattazione markdown - Formatta i messaggi utilizzando la sintassi markdown prima dell\'invio. CiĂČ consente una formattazione avanzata come l\'uso degli asterischi per visualizzare il testo in corsivo. + Formattazione Markdown + Permette di formattare i messaggi con sintassi Markdown prima di inviarli. Ad esempio si puĂČ ottienere un testo in corsivo aggiungendovi degli asterischi prima e dopo. Mostra le conferme di lettura - Clicca sulle conferme di lettura per un elenco dettagliato. - Mostra eventi di ingresso ed uscita partecipanti - Non si applica ad inviti, butta fuori ed espulsioni. - Mostra eventi degli account + Clicca sulle conferme di lettura per vederne l\'elenco dettagliato. + Mostra entrata ed uscita degli utenti + Inviti, butta fuori e ban non vengono considerati. + Mostra i cambiamenti degli account Includi cambiamenti dell\'avatar e del nome visualizzato. Password - Avvia la fotocamera di sistema invece della schermata fotocamera personalizzata. + Avvia la fotocamera di sistema invece della fotocamera di Riot. Questa opzione richiede un\'applicazione di terze parti per registrare i messaggi. - Il comando \"%s\" necessita di piĂč parametri, o alcuni parametri non sono validi. + Il comando \"%s\" necessita di piĂč parametri, oppure alcuni parametri non sono corretti. Markdown Ăš stato abilitato. Markdown Ăš stato disabilitato. Chiamate - Usa suoneria predefinita di Riot per le chiamate in arrivo - Suoneria chiamate in arrivo - Scegli suoneria per le chiamate: + Usa la suoneria predefinita di Riot per le chiamate in arrivo + Suoneria delle chiamate in arrivo + Scegli la suoneria per le chiamate: - Accetto + Accetta - Per favore, rivedere e accettare le politiche di questo server home: + Per favore, leggi e accetta i termini di servizio di questo Home Server: - %1$d/%2$d chiave/i importate con successo. + %1$d/%2$d chiav(i) importate con successo. - Notifiche per la risoluzione dei problemi - Diagnostica per la risoluzione dei problemi + Diagnostica delle notifiche + Diagnosi Esegui i test In esecuzione
 (%1$d di %2$d) La diagnostica di base risponde correttamente. Se continui a non ricevere notifiche, invia una segnalazione errore per aiutarci a indagare. Uno o piĂč test hanno fallito, prova le soluzioni suggerite. - Uno o piĂč test hanno fallito, per favore invia un rapporto errore per aiutarci a indagare. + Uno o piĂč test hanno fallito, per favore invia un rapporto di errore per aiutarci a indagare. Impostazioni di sistema. - Le notifiche sono abilitate nelle impostazioni di sistema. - Le notifiche sono disabilitate nelle impostazioni di sistema. -Controlla le impostazioni di sistema. - Apri le impostazioni + Le notifiche sono abilitate nelle Impostazioni di sistema. + Le notifiche sono disabilitate nelle Impostazioni di sistema. +\nControlla le Impostazioni di sistema. + Apri le Impostazioni Impostazioni account. Le notifiche sono abilitate per il tuo account. Le notifiche sono disabilitate per il tuo account. -Controlla le impostazioni dell\'account. +\nControlla le impostazioni dell\'account. Abilita Impostazioni dispositivo. Le notifiche sono abilitate per questo dispositivo. Le notifiche non sono abilitate per questo dispositivo. -Controlla le impostazioni Riot. +\nControlla le impostazioni di Riot. Abilita - Esegui controllo servizi + Esegui un controllo dei servizi L\'APK Google Play Services Ăš disponibile e aggiornato. - Riot usa Google Play Services per consegnare i messaggi a comparsa, ma non sembra sia configurato correttamente: + Riot usa Google Play Services per consegnare i messaggi a comparsa, ma sembra non sia stato configurato correttamente: \n%1$s - Correggi i servizi play + Correggi i Play Services Token di Firebase Token FCM recuperato con successo: %1$s - Recupero fallito del Token FCM: -%1$s + Il recupero del Token FCM: %1$s Ăš fallito - Registrazione token - Token FCM registrato con successo sul server home. - Registrazione fallita del token FCM sul server home: -%1$s + Registrazione Token + Token FCM registrato con successo sull\'Home Server. + E\'fallita la registrazione del Token FCM sull\'Home Server: +\n %1$s Servizio di notifiche Servizio di notifiche in esecuzione. Servizio di notifiche non in esecuzione. -Prova a riavviare l\'applicazione. +\nProva a riavviare l\'applicazione. Avvia il servizio Auto riavvio del servizio di notifiche - Il servizio Ăš stato terminato e riavviato automaticamente. - Fallito l\'avvio del servizio + Il servizio Ăš stato chiuso e si Ăš riavviato automaticamente. + L\'avvio del servizio Ăš fallito Esegui all\'avvio - Il servizio sarĂ  eseguito quando il dispositivo sarĂ  riavviato. - Il servizio non sarĂ  avviato al riavvio del dispositivo, non riceverai notifiche finchĂ© Riot non verrĂ  aperto almeno una volta. + Il servizio inizierĂ  quando il dispositivo sarĂ  riavviato. + Il servizio non partirĂ  al riavvio del dispositivo. Non riceverai notifiche finchĂ© Riot non verrĂ  aperto almeno una volta. Abilita l\'esecuzione all\'avvio - Controlla le restrizioni in sottofondo - Le restrizioni in sottofondo sono disabilitate per Riot. Questo test andrebbe eseguito usando dati mobili (non WIFI). -%1$s - Le restrizioni in sottofondo sono abilitate per Riot. -Il lavoro che l\'app tenta di eseguire verrĂ  limitato in modo aggressivo mentre Ăš in sottofondo e ciĂČ potrebbe influenzare le notifiche. -%1$s - Disabilita le restrizioni + Verifica se Riot sia stato configurato per funzionare in modo limitato quando lavora in background + Riot non funziona senza alcuna restrizione anche quando Ăš eseguito in background. Questo test andrebbe eseguito usando dati mobili (non WIFI). +\n%1$s + Riot Ăš stato configurato per funzionare in modo limitato quando Ăš eseguito in background. +\nIl funzionamento dell\'App, quando Ăš eseguita in background, Ăš stato fortemente limitato e ciĂČ potrebbe influenzare la ricezione delle notifiche. +\n%1$s + Non limitare Ottimizzazione della batteria Riot non Ăš influenzato dall\'ottimizzazione della batteria. - Se un utente lascia un dispositivo scollegato e fermo per un periodo di tempo, a schermo spento, il dispositivo entra in modalitĂ  Doze. CiĂČ impedisce alle app di accedere alla rete e rinvia le attivitĂ , le sincronizzazioni e gli allarmi normali. + Se si lascia un dispositivo scollegato, fermo e con lo schermo spento, dopo un certo tempo questo entra in modalitĂ  Doze. CiĂČ impedisce alle App di accedere alla rete e ritarda le attivitĂ , le sincronizzazioni e la ricezione dei normali allarmi. Ignora l\'ottimizzazione - Connessione in sottofondo - Riot deve mantenere una connessione in sottofondo a basso impatto per poter ricevere notifiche affidabili. -Nella schermata successiva ti verrĂ  chiesto di consentire a Riot di funzionare sempre in sottofondo, accetta per favore. + Connessione in background + Per poter ricevere le notifiche in tempo reale, Riot deve potersi sempre connettere. Anche quando funziona in background. +\nNella schermata successiva ti verrĂ  chiesto di consentire a Riot di funzionare anche quando Ăš in background, accetta per favore. Concedi il permesso Si Ăš verificato un errore durante la verifica dell\'indirizzo email. @@ -1183,186 +1187,184 @@ Nella schermata successiva ti verrĂ  chiesto di consentire a Riot di funzionare Si Ăš verificato un errore durante la verifica del numero di telefono. Ulteriori informazioni: %s - Nessun valido APK Google Play Services Ăš stato trovato. Le notifiche non funzioneranno correttamente. + Non Ăš stato trovato nessun APK Google Play Services valido. Le notifiche non funzioneranno correttamente. Riot.im - Comunica, a modo tuo - Un\'app universale di chat sicure interamente sotto il tuo controllo. - Un\'app di chat, sotto il tuo controllo e interamente flessibile. Riot ti permette di comunicare a modo tuo. Creata per [matrix] - lo standard per le comunicazioni aperte, decentralizzate. + Una App per chat universali, sicure ed interamente sotto il tuo controllo. + Una App per chat flessibile e interamente sotto il tuo controllo. Riot ti permette di comunicare a modo tuo. Creata per [matrix] - lo standard per le comunicazioni aperte, decentralizzate. \n -\nOttieni un account matrix.org gratuito, ottieni il tuo server su https://modular.im, o usa un altro server Matrix. +\nPuoi aprire un account matrix.org gratuito, creare il tuo server su https://modular.im o usare un altro server Matrix. \n \nPerchĂ© scegliere Riot.im\? \n -\n‱ COMUNICAZIONE COMPLETA: crea stanze per i tuoi team, i tuoi amici, la tua comunitĂ  - come preferisci! Chatta, condividi file, aggiungi widget e fai videochiamate vocali - tutto gratuito. +\n‱ COMUNICAZIONE COMPLETA: crea stanze per discussione pubbliche o private per i tuoi team, i tuoi amici, la tua comunitĂ  - come preferisci! Chatta, condividi file, aggiungi widget e fai chiamate video o audio - tutto gratuito. \n -\n‱ GRANDI INTEGRAZIONI: usa Riot.im con gli strumenti che conosci ed ami. Con Riot.im puoi addirittura chattare con utenti e gruppi su altre app di chat. +\n‱ GRANDI INTEGRAZIONI: collega Riot.im alle piattaforme che conosci ed ami. Con Riot.im puoi addirittura chattare con utenti e gruppi che usano altre App di chat. \n -\n‱ PRIVATO E SICURO: tieni segrete le tue conversazioni. Una crittografia end-to-end allo stato dell\'arte assicura che le comunicazioni private restino tali. +\n‱ PRIVATO E SICURO: tieni segrete le tue conversazioni. Una crittografia end-to-end allo stato dell\'arte assicura che le comunicazioni private restino sempre tali. \n -\n‱ OPEN, NON CHIUSO: open source e costruito su Matrix. Possiedi i tuoi dati ospitando il tuo server personale, o scegliendone uno di cui ti fidi. +\n‱ OPEN, NON CHIUSO: open source e costruito su Matrix. Riprendi il possesso dei tuoi dati creando il tuo server Matrix personale, o scegliendone uno di cui ti fidi. \n -\n‱ OVUNQUE TU SIA: resta in contatto ovunque tu sia con la cronologia dei messaggi totalmente sincronizzata tra i tuoi dispositivi ed online su https://riot.im. +\n‱ OVUNQUE TU SIA: stai sul pezzo ovunque tu sia grazie la cronologia dei messaggi sempre sincronizzata tra i tuoi dispositivi ed online su https://riot.im. - Videochiamata in corso
 + Chiamata video in corso
 - "Apportiamo continuamente cambiamenti e migliorie a Riot.im. -Il registro completo delle modifiche si puĂČ trovare qui: %1$s. -Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi." - Backup chiave - Usa backup chiave - Il backup delle chiavi non Ăš concluso, attendere prego
 + Riot.im continua a crescere e migliorare. Il registro completo delle modifiche si puĂČ trovare qui: %1$s. Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi. + Backup delle chiavi + Usa il Backup delle chiavi + Il Backup delle chiavi non Ăš concluso, attendere prego
 Salta Fatto Impostazioni di notifica avanzate - Perderai i tuoi messaggi cifrati se ti disconnetti adesso - Backup chiave in corso. Se ti disconnetti ora, perderai l\'accesso ai tuoi messaggi cifrati. - Il Backup Chiave Sicuro deve essere attivo su tutti i tuoi dispositivi per evitare di perdere l\'accesso ai tuoi messaggi cifrati. + Se ti disconnetti adesso perderai i tuoi messaggi cifrati + Il Backup delle chiavi Ăš in corso. Se ti disconnetti adesso perderai i tuoi messaggi cifrati. + Il Backup delle chiavi deve essere attivo su tutti i tuoi dispositivi per evitare di perdere l\'accesso ai tuoi messaggi cifrati. Non voglio i miei messaggi cifrati Backup delle chiavi
 - Usa backup chiave + Usa il Backup delle chiavi Sei sicuro\? Backup - Perderai l\'accesso ai tuoi messaggi cifrati a meno che non fai il backup delle tue chiavi prima di disconnetterti. + Perderai l\'accesso ai tuoi messaggi cifrati a meno che tu non faccia il Backup delle chiavi prima di disconnetterti. - Resta + Rimani Interrompi Ignora Sei sicuro di volerti disconnettere\? Accedi con single sign-on - Questo URL Ăš irraggiungibile, controllalo - Il tuo dispositivo sta usando un protocollo di sicurezza TLS obsoleto, vulnerabile ad attacchi. Per la tua sicurezza non potrai connetterti - Imposta l\'importanza della notifica per evento, configura il suono, il led, la vibrazione - Importanza della notifica per evento + Questo URL Ăš irraggiungibile. Per favore controllalo + "Il tuo dispositivo usa un protocollo di sicurezza TLS obsoleto e vulnerabile agli attacchi. Per la tua sicurezza, ti viene impedito di connetterti" + Imposta i livelli di importanza delle notifiche in base al tipo. Configura i suoni, i led, e la vibrazione + Importanza delle notifiche in base al tipo Impostazioni personalizzate. - Nota che alcuni tipi di messaggio sono impostati come silenziosi (produrrĂ  una notifica senza suono). + Nota che alcuni tipi di messaggio sono impostati come silenziosi (ossia generano notifiche senza suono). Alcune notifiche sono disattivate nelle tue impostazioni personalizzate. - Caricamento regole personalizzate fallito, riprova. - Controlla impostazioni + Il caricamento delle regole personalizzate Ăš fallito, riprova. + Controlla le Impostazioni - [%1$s] -\nQuesto errore Ăš fuori dal controllo di Riot e secondo Google, questo errore indica che il dispositivo ha troppe app registrate con FCM. L\'errore si verifica solo in casi in cui ci sia un numero estremo di app, quindi non dovrebbe affliggere l\'utente medio. - [%1$s] -\nQuesto errore Ăš fuori dal controllo di Riot. PuĂČ accadere per vari motivi. Potrebbe funzionare se riprovi piĂč tardi, puoi anche controllare che Google Play Service non ha limitazioni di utilizzo di dati nelle impostazioni di sistema, o che l\'orologio del tuo dispositivo Ăš corretto, o puĂČ succedere in custom ROM. - [%1$s] -\nQuesto errore Ăš fuori dal controllo di Riot. Non c\'Ăš alcun account Google nel telefono. Apri il gestore di account ed aggiungi un account Google. + [%1$s] +\nQuesto errore non dipende da Riot. Secondo Google dipende dal fatto che questo dispositivo ha troppe App registrate con FCM. L\'errore si verifica solo in casi in cui ci sia un numero estremo di app, quindi non dovrebbe affliggere l\'utente medio. + [%1$s] +\nQuesto errore non dipende da Riot e puĂČ avere diverse cause. Potresti riprovare piĂč tardi o controllare che Google Play Service non abbia configurato nelle Impostazioni di sistema dei limiti di utilizzo di dati. Anche un orologio di sistema regolato male potrebbe esserne la causa. Oppure puĂČ verificarsi se hai una ROM customizzata. + [%1$s] +\nQuesto errore non dipende da Riot. Non c\'Ăš alcun account Google nel telefono. Apri il gestore di account ed aggiungi un account Google. Aggiungi account - Configura notifiche rumorose - Configura notifiche chiamata - Configura notifiche silenziose - Scegli colore del LED, vibrazione, suono
 + Configura le notifiche rumorose + Configura le notifiche di chiamata + Configura le notifiche silenziose + Scegli il colore del LED, la vibrazione, il suono
 Gestione chiavi crittografiche - Invia messaggio con tasto Invio - Il tasto Invio della tastiera invierĂ  il messaggio invece di andare a capo + Invia il messaggio col tasto Invio + Il tasto Invio della tastiera, invece di andare a capo invierĂ  il messaggio - La modalitĂ  risparmio dati applica un filtro specifico in modo che gli aggiornamenti di presenza e le notifiche di scrittura sono esclusi. + La modalitĂ  risparmio dati applica un filtro specifico che esclude gli aggiornamenti di presenza e le notifiche di scrittura. - Aggiorna password + Aggiorna la password La password non Ăš valida Le password non corrispondono - Ripristino messaggi cifrati - Gestisci backup chiave + Ripristino dei messaggi cifrati + Gestisci il Backup delle chiavi Silenzioso Inserisci un nome utente. Inserisci una password La password Ăš troppo debole - Elimina la password se vuoi che Riot generi una chiave di recupero. - Nessuna sessione Matrix disponibile + Cancella la password se vuoi che Riot generi un codice di recupero. + Non c\'Ăš alcuna sessione Matrix disponibile Non perdere mai i messaggi cifrati - I messaggi nelle stanze cifrate sono protetti con la cifratura end-to-end. Solo tu e il/i destinatario/i avete le chiavi per leggere questi messaggi. -\n -\nFai un backup sicuro delle tue chiavi per evitare di perderle. - Inizia ad usare il backup chiavi + I messaggi nelle stanze cifrate sono protetti con crittografia E2E. Solo tu e il/i destinatario/i avete le chiavi crittografiche per leggere questi messaggi. +\n +\nRicorda di fare un backup delle tue chiavi crittografiche per evitare di perderle. + Inizia ad usare il Backup delle chiavi crittografiche (Avanzato) - Esporta manualmente le chiavi + Esporta manualmente le chiavi crittografiche Proteggi il tuo backup con una password. - Salveremo una copia cifrata delle tue chiavi nel tuo homeserver. Proteggi il tuo backup con una password per tenerlo sicuro. -\n -\nPer massima sicurezza, dovrebbe essere diversa dalla password del tuo account. + Una copia cifrata delle tue chiavi crittografiche sarĂ  salvata sul tuo Home Server. Proteggi il tuo Backup con una password per tenerlo al sicuro. +\n +\nPer una maggior sicurezza, Ăš meglio che la password del Backup delle chiavi sia diversa da quella del tuo account. Imposta password Creazione backup - Oppure, proteggi il tuo backup con una chiave di ripristino, salvandola in un luogo sicuro. - (Avanzato) Imposta con chiave di ripristino - Completato! - Backup delle tue chiavi in corso. - La tua chiave di ripristino Ăš una rete di sicurezza - puoi usarla per recuperare l\'accesso ai tuoi messaggi cifrati se dimentichi la password. -\nTieni la tua chiave di ripristino in un luogo sicuro, come un password manager (o una cassaforte) - Tieni la tua chiave di ripristino in un luogo sicuro, come un password manager (o una cassaforte) + Oppure, proteggi il tuo Backup con un codice di recupero, salvandolo in un luogo sicuro. + (Avanzato) Imposta un codice di recupero + Fatto! + Il Backup delle tue chiavi crittografiche Ăš in corso. + Il tuo codice di recupero Ăš un\'ancora di salvezza - puoi usarlo per riaccedere ai tuoi messaggi cifrati se dimentichi la password. +\nSalva il tuo codice di recupero in un luogo sicuro, tipo un password manager (o una cassaforte) + Salva il tuo codice di recupero in un luogo sicuro, come un password manager (o una cassaforte) Fatto Ho fatto una copia - Salva chiave di ripristino + Salva il codice di recupero Condividi Salva come file - La chiave di ripristino Ăš stata salvata in \'%s\'. -\n -\nAttenzione: questo file potrebbe essere eliminato se viene disinstallata l\'applicazione. + Il codice di recupero Ăš stato salvato in \'%s\'. +\n +\nAttenzione: se l\'applicazione su cui Ăš salvato venisse disinstallata, il codice di recupero verrĂ  perso. Si prega di farne una copia - Condividi chiave di ripristino con
 - Generazione chiave di ripristino usando la password, questo processo puĂČ durare diversi secondi. - Chiave di ripristino + Condividi il codice di recupero con
 + Generazione del codice di recupero usando la password. Questo processo puĂČ durare alcuni secondi. + Codice di recupero Errore inatteso - Backup iniziato - Backup in corso in secondo piano delle tue chiavi di ripristino nel tuo homeserver. Il backup iniziale puĂČ durare diversi minuti. + Backup avviato + Il tuo Home Server sta facendo il Backup delle tue chiavi crittografiche in background. Il primo Backup puĂČ impiegare diversi minuti. Sei sicuro\? - Potresti perdere l\'accesso ai tuoi messaggi se ti disconnetti o perdi il dispositivo. + Se ti disconnetti o perdessi questo dispositivo potresti perdere l\'accesso ai tuoi messaggi. - Rilevazione versione backup
 - Usa la tua password di ripristino per sbloccare la cronologia dei messaggi cifrati - usa la tua chiave di ripristino - Non conosci la tua password di ripristino, puoi %s. + Verifica versione backup
 + Usa la tua password di recupero per sbloccare i messaggi cifrati + usa il tuo codice di recupero + Se non conosci la tua password di recupero, puoi %s. - Usa la tua chiave di ripristino per sbloccare la cronologia dei messaggi cifrati - Inserisci chiave di ripristino + Usa il tuo codice di recupero per sbloccare la Timeline dei messaggi cifrati + Inserisci codice di recupero Ripristino messaggio - Hai perso la chiave di ripristino\? Puoi crearne una nuova nelle impostazioni. - Impossibile decifrare il backup con questa password: verifica di avere inserito la password di ripristino corretta. + Hai perso il codice di recupero\? Nelle Impostazioni puoi crearne uno nuovo. + Impossibile decifrare il backup con questa password: verifica che la password di recupero inserita sia corretta. Errore di rete: controlla la tua connessione e riprova. - Ripristino backup: - Calcolo chiave di ripristino
 - Scaricamento chiavi
 + Ripristino Backup: + Codice di recupero in elaborazione
 + Download chiavi
 Importazione chiavi
 - Sblocca cronologia - Inserisci una chiave di ripristino - Impossibile decifrare il backup con questa chiave di ripristino: verifica di avere inserito la chiave di ripristino corretta. + Sblocca Timeline + Inserisci un codice di recupero + Impossibile decifrare il backup con questo codice di recupero: verifica di avere inserito il codice di recupero corretto. Backup ripristinato %s ! - Ripristinate %1$d chiavi di sessione e aggiunte %2$d nuove chiavi sconosciute a questo dispositivo + Ripristinate %1$d Session-Keys e aggiunte %2$d nuove Key(s) finora sconosciute a questo dispositivo - Ripristinato un backup con %d chiave. - Ripristinato un backup con %d chiavi. + Ripristinato un Backup con %d chiave. + Ripristinato un Backup con %d chiavi. %d nuova chiave Ăš stata aggiunta a questo dispositivo. %d nuove chiavi sono state aggiunte a questo dispositivo. - Rilevazione ultima versione chiavi di ripristino fallita (%s). - La cifratura di sessione non Ăš attivata + Rilevazione ultima versione codici di recupero fallita (%s). + La cifratura della sessione non Ăš stata attivata Ripristina da backup Elimina backup - Backup chiavi impostato correttamente per questo dispositivo. - Backup chiavi non attivo per questo dispositivo. - Nessun backup programmato per le chiavi da questo dispositivo. + Il Backup delle chiavi Ăš stato impostato correttamente su questo dispositivo. + Il Backup delle chiavi non Ăš attivo su questo dispositivo. + Questo dispositivo non sta facendo il Backup delle chiavi. Il backup ha una firma da un dispositivo sconosciuto con ID %s. Il backup ha una firma valida da questo dispositivo. @@ -1372,30 +1374,30 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Il backup ha una firma non valida dal dispositivo non verificato %s Impossibile ottenere info di fiducia per il backup (%s). - Per usare il backup chiavi su questo dispositivo, recupera con la password o chiave di ripristino ora. + Per utilizzare il Backup delle chiavi crittografiche su questo dispositivo, devi accedervi con la password o con il codice di recupero. Eliminazione backup
 Eliminazione backup fallita (%s) Elimina backup - Eliminare dal server il backup delle chiavi di cifratura\? Non potrai piĂč usare la tua chiave di ripristino per leggere la cronologia di messaggi cifrati. + Eliminare il Backup delle chiavi crittografiche dall\'Home Server\? Non potrai piĂč usare il codice di recupero per leggere i messaggi cifrati. - Nessun backup chiavi - È stato rilevato un nuovo backup chiavi per messaggi sicuri. -\n -\nSe non hai impostato il nuovo metodo di ripristino, potrebbe essere un tentativo di un aggressore di accedere al tuo account. Cambia la tua password e imposta un nuovo metodo di ripristino immediatamente nelle impostazioni. + Nuovo Backup delle chiavi + È stato rilevato un nuovo Backup delle chiavi crittografiche. +\n +\nSe non hai giĂ  configurato il nuovo metodo di ripristino, potrebbe trattarsi di un tentativo di un aggressore. Cambia subito la tua password e configura un nuovo metodo di ripristino nelle Impostazioni. Sono stato io Non perdere mai i messaggi cifrati - Inizia ad usare il backup chiavi + Inizia ad usare il Backup delle chiavi Non perdere mai i messaggi cifrati - Usa backup chiavi + Usa il Backup delle chiavi - Nuove chiavi di messaggi cifrati - Gestisci in backup chiavi + Nuove chiavi di crittografia + Gestisci nel Backup delle chiavi - Backup chiavi
 + Backup chiavi in corso
 - Backup fatto di tutte le chiavi + Il Backup delle chiavi Ăš stato eseguito Backup di %d chiave
 Backup di %d chiavi
 @@ -1405,7 +1407,7 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Algoritmo Firma - Risposta alla scoperta di un homeserver non valida + Risposta Home Server non valida Opzioni autocompletamento server Riot ha rilevato una configurazione server personalizzata per il tuo dominio userId \"%1$s\": \n%2$s @@ -1417,10 +1419,10 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Scegli Sorgente multimediale predefinita Scegli - Riproduci suono otturatore + Riproduci il suono dell\'otturatore Segna come letto - L\'app non ha bisogno di connettersi in background all\'homeserver, dovrebbe ridurre il consumo della batteria + L\'app non ha bisogno di connettersi in background all\'Home Server. CiĂČ dovrebbe ridurre il consumo della batteria %1$s: 1 messaggio %1$s: %2$d messaggi @@ -1437,23 +1439,23 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Io ** Invio fallito - per favore apri la stanza - Spiacenti, le chiamate di gruppo con Jitsi non sono supportate sui vecchi dispositivi (con Android precedenti al 5.0) + Purtroppo i vecchi dispositivi (quelli con Android precedenti al 5.0) non supportano le conferenze con Jitsi Verifica dispositivo IP sconosciuto - Un nuovo dispositivo sta richiedendo le chiavi di cifratura. -\nNome dispositivo: %1$s -\nUltimo accesso: %2$s -\nSe non hai effettuato l\'accesso in un altro dispositivo, ignora questa richiesta. - Un dispositivo non verificato sta richiedendo le chiavi di cifratura. -\nNome dispositivo: %1$s -\nUltimo accesso: %2$s -\nSe non hai effettuato l\'accesso in un altro dispositivo, ignora questa richiesta. + Un nuovo dispositivo sta chiedendo le chiavi crittografiche. +\nNome dispositivo: %1$s +\nUltimo accesso: %2$s +\nSe non hai effettuato l\'accesso da un altro dispositivo, ignora questa richiesta. + Un dispositivo non verificato sta chiedendo le chiavi crittografiche. +\nNome dispositivo: %1$s +\nUltimo accesso: %2$s +\nSe non hai effettuato l\'accesso da un altro dispositivo, ignora questa richiesta. Verifica Condividi - Richiesta condivisione chiave + Richiesta condivisione chiavi crittografiche Ignora Verifica confrontando una breve stringa. @@ -1497,12 +1499,12 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Il SAS non corrispondeva Il dispositivo ha ricevuto un messaggio inaspettato È stato ricevuto un messaggio non valido - Chiave non corrispondente + Le chiavi non corrispondono Utente non corrispondente Errore sconosciuto - Esiste giĂ  un backup sul tuo HomeServer - Sembra che tu abbia giĂ  impostato un backup chiavi da un altro dispositivo. Vuoi sostituirlo con quello che stai creando\? + Esiste giĂ  un backup sul tuo Home Server + Sembra tu abbia giĂ  impostato il Backup delle chiavi crittografiche da un altro dispositivo. Vuoi sostituirlo con il Backup che stai creando\? Sostituisci Ferma @@ -1521,7 +1523,7 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Benvenuti a casa! Recupera i messaggi non letti qui Conversazioni - La tua conversazione diretta verrĂ  mostrata qui + Le tue conversazioni dirette verranno mostrate qui Stanze Le tue stanze verranno mostrate qui @@ -1560,7 +1562,7 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Pubblica questa stanza nell\'elenco stanze Si Ăš verificato un errore nell\'ottenere informazioni sulla fiducia - Si Ăš verificato un errore nell\'ottenere i dati del backup chiavi + Si Ăš verificato un errore nell\'ottenere i dati dal Backup delle chiavi Benvenuti nella beta! Mentre RiotX si trova nella fase iniziale dello sviluppo, potrebbero mancare alcune funzioni e potrebbero verificarsi errori. @@ -1568,7 +1570,7 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Descrizione nel Play Store Se trovi errori ti preghiamo segnalarli nel menu in alto a sinistra della Pagina Iniziale e noi li correggeremo appena possibile. - Importa chiavi e2e dal file \"%1$s\". + Importa le chiavi di crittografia dal file \"%1$s\". Versione SDK Matrix Altre note di terze parti @@ -1591,7 +1593,7 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Url: Formato: - Voce e video + Audio e Video Aiuto e informazioni @@ -1603,16 +1605,16 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Grazie, il suggerimento Ăš stato inviato correttamente L\'invio del suggerimento Ăš fallito (%s) - Mostra eventi nascosti nella cronologia + Mostra gli eventi nascosti nella Timeline RiotX - Client Matrix di nuova generazione - Un client per Matrix piĂč veloce e leggero usando gli ultimi framework di Android - RiotX Ăš un nuovo client per il protocollo Matrix (Matrix.org): una rete aperta per comunicazioni sicure e decentralizzate. RiotX Ăš una riscrittura totale del client Riot Android, basata su una riscrittura completa dell\'SDK Android di Matrix. -\n -\nDisclaimer: questa Ăš una versione beta. RiotX Ăš attualmente in uno sviluppo attivo e contiene limitazioni ed errori (speriamo non troppi). I suggerimenti sono ben accetti! -\n -\nRiotX supporta: ‱ Accesso ad account esistente ‱ Crea stanze ed entra in stanze pubbliche ‱ Accetta e rifiuta inviti ‱ Elenca stanze utenti ‱ Vedi dettagli stanza ‱ Invia messaggi di testo ‱ Invia allegati ‱ Leggi e scrivi messaggi in stanze cifrate ‱ Crypto: backup chiavi E2E, verifica avanzata dispositivi, richiesta e risposta condivisione chiavi ‱ Notifiche push ‱ Tema chiaro, scuro e nero -\n + Un client per Matrix piĂč veloce e leggero che utilizza gli ultimi framework di Android + RiotX Ăš un nuovo client per il protocollo Matrix (Matrix.org): una rete aperta per comunicazioni sicure e decentralizzate. RiotX Ăš stato completamente riscritto rispetto a Riot Android, ed Ăš a sua volta basato su un SDK Android di Matrix totalmente riscritto. +\n +\nDisclaimer: questa Ăš una versione beta. RiotX Ăš attualmente in uno sviluppo attivo e contiene ancora alcune limitazioni ed errori (speriamo non troppi). I suggerimenti sono ben accetti! +\n +\nRiotX supporta: ‱ Accesso ad account esistente ‱ Crea stanze ed entra in stanze pubbliche ‱ Accetta e rifiuta inviti ‱ Elenca stanze utenti ‱ Vedi dettagli stanza ‱ Invia messaggi di testo ‱ Invia allegati ‱ Leggi e scrivi messaggi in stanze cifrate ‱ Crypto: backup chiavi E2E, verifica avanzata dispositivi, richiesta e risposta condivisione chiavi ‱ Notifiche push ‱ Tema chiaro, scuro e nero +\n \nNon tutte le funzioni di Riot sono giĂ  implementate in RiotX. Principali funzioni mancanti (prossimamente!): ‱ Creazione account ‱ Impostazioni stanza (elenca membri stanza, ecc.) ‱ Chiamate ‱ Widget ‱ 
 Non hai nulla di nuovo da vedere! @@ -1642,127 +1644,127 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Invia un nuovo messaggio diretto Vedi l\'elenco delle stanze - Nome o ID (#esempio:matrix.org) + Nome o ID stanza (#esempio:matrix.org) Attiva swipe per rispondere nella timeline Collegamento copiato negli appunti - Gestore dell\'integrazione + Integration Manager - Nessun gestore integrazione configurato. - Aggiungi per ID matrix + Non Ăš stato configurato nessun Integration Manager. + Aggiungi per ID utente Creare una stanza 
 - Nessun risultato trovato, usa \"Aggiungi per ID matrix\" per cercare sul server. + Nessun risultato trovato. Usa \"Aggiungi per ID utente\" per cercare sul server. Inizia a digitare per ottenere risultati - Filtra per nome utente o ID 
 + Cerca per nome o ID utente 
 Sto entrando nella stanza 
 - Visualizza Modifica cronologia + Visualizza Modifica Timeline Leggi Rifiuta - Per continuare, devi accettare i termini di servizio. + Per continuare devi accettare i termini di servizio. - Le precedenti versioni di Riot avevano un errore di sicurezza che poteva dare accesso al tuo account al tuo Server di IdentitĂ  (%1$s). Se ti fidi di %2$s, puoi ignorare; altrimenti disconnettiti e riaccedi di nuovo. -\n -\nLeggi maggiori dettagli qui: + Alcune precedenti versioni di Riot contenevano un errore di sicurezza che permetteva al tuo Identity Server (%1$s) di accedere al tuo account. Se ti fidi di %2$s, puoi ignorare questo avviso; altrimenti disconnettiti e riaccedi di nuovo. +\n +\nLeggi maggiori dettagli qui: \nhttps://medium.com/@RiotChat/36b4792ea0d6 Termini di servizio - Leggi i termini - Diventa trovabile dagli altri - Usa bot, bridge, widget e pacchetti di adesivi + Leggi i termini di servizio + Fatti trovare dagli altri utenti + Usa bot, bridge, widget e pacchetti di sticker Leggi su Nessuno Revoca Disconnetti - Nessun server di identitĂ  configurato. + Non Ăš stato configurato alcun Identity Server. - Chiamata fallita per server malconfigurato - Chiedi all\'amministratore del tuo homeserver (%1$s) di configurare un server TURN affinchĂ© le chiamate funzionino in modo affidabile. -\n -\nAltrimenti, puoi provare ad usare il server pubblico su %2$s, ma non Ăš ugualmente affidabile e vedrĂ  il tuo indirizzo IP. Puoi fare la tua scelta anche nelle Impostazioni. + Chiamata fallita a causa di un\'errata configurazione del server + Chiedi all\'amministratore del tuo Home Server (%1$s) di configurare un server TURN affinchĂ© le chiamate funzionino in modo affidabile. +\n +\nOppure puoi provare ad usare il server pubblico su %2$s, ma non sarĂ  altrettanto affidabile e potrĂ  vedere il tuo indirizzo IP. Puoi configurare tutto questo nelle Impostazioni. Prova ad usare %s Non chiedermelo piĂč - Imposta un\'email per il recupero dell\'account, o piĂč tardi per essere trovabile dalle persone che ti conoscono. - Imposta un telefono, o piĂč tardi per essere trovabile dalle persone che ti conoscono. - Imposta un\'email per il recupero dell\'account. PiĂč tardi usa email o telefono per essere trovabile dalle persone che ti conoscono. - Imposta un\'email per il recupero dell\'account. PiĂč tardi usa email o telefono per essere trovabile dalle persone che ti conoscono. - Impossibile raggiungere un homeserver con questo URL, controllalo - Permetti server di assistenza chiamata di riserva - UserĂ  %s come assistente quando l\'homeserver non ne offre uno (il tuo indirizzo IP sarĂ  visibile durante le chiamate) - Aggiungi un server di identitĂ  nelle impostazioni per poterlo fare. + Imposta un\'email per il ripristino dell\'account in caso di problemi e, se vuoi, anche per farti trovare da chi conosce quell\'indirizzo email. + Aggiungi un numero di telefono se vuoi farti trovare da chi lo conosce. + Imposta un\'email per il ripristino dell\'account in caso di problemi. Email e telefono potranno essere usati anche per farti trovare dagli altri utenti. + Imposta un\'email per il ripristino dell\'account in caso di problemi. Email e numero di telefono potranno essere usati, se lo vorrai, anche per permettere a chi li conosce di trovarti. + Non Ăš stato trovato alcun Home Server seguendo questo URL. Per favore, controllalo + Permetti chiamate dal Server di appoggio + "Se il tuo Home Server non ne ha un proprio Server d\'appoggio verrĂ  usato %s (il Server d\'appoggio verrĂ  a conoscenza del tuo indirizzo IP durante le chiamate)" + Per poterlo fare, aggiungi un Identity Server nelle Impostazioni. ModalitĂ  sync in background (Sperimentale) Ottimizzato per la batteria - Riot sincronizzerĂ  in background in modo da preservare le risorse limitate del dispositivo (batteria). -\nA seconda dello stato delle risorse del tuo dispositivo, la sincronizzazione puĂČ essere ritardata dal sistema operativo. - Ottimizzato per il tempo reale - Riot sincronizzerĂ  in background periodicamente in momenti precisi (configurabile). -\nCiĂČ avrĂ  impatto sull\'uso di dati e batteria, ci sarĂ  una notifica permanente per comunicare che Riot Ăš in attesa di eventi. - Nessun sync in background - Non ti verranno notificati i messaggi in arrivo quando l\'app Ăš in background. - Aggiornamento impostazioni fallito. + Riot si sincronizzerĂ  in background in modo da non consumare la poca batteria disponibile. +\nA seconda del livello della batteria, il sistema operativo potrebbe ritardare la sincronizzazione. + Ottimizzato per la performance + Riot si sincronizzerĂ  in background ad intervalli regolari (configurabili). +\nCiĂČ avrĂ  un certo impatto sulla quantitĂ  di dati e batteria utilizzati. Una notifica sempre accesa comunicherĂ  che Riot Ăš attivo. + Nessuna sincronizzazione in background + Quando l\'App Ăš in background non ti verranno notificati i messaggi in arrivo. + L\'aggiornamento delle impostazioni Ăš fallito. - Intervallo di sync preferito + Intervallo preferito tra le sincronizzazioni %s \nLa sincronizzazione puĂČ essere ritardata a seconda delle risorse (batteria) o dello stato del dispositivo (sospensione). - Scoperte - Gestisci le tue impostazioni di rilevamento. + Farsi trovare + Configura l\'Identity Server per trovare e farsi trovare dagli altri utenti. Nome pubblico (visibile alle persone con cui comunichi) Il nome pubblico di un dispositivo Ăš visibile alle persone con cui comunichi - Non stai usando alcun server di identitĂ  - Nessun server di identitĂ  configurato, Ăš necessario per ripristinare la tua password. + Non stai usando alcun Identity Server + Nessun Identity Server configurato. E\' necessario per poter ripristinare la tua password. Pare che tu stia provando a connetterti ad un altro homeserver. Vuoi disconnetterti da qui\? - Server di identitĂ  - Disconnetti server di identitĂ  - Configura server di identitĂ  - Cambia server di identitĂ  - Attualmente stai usando %1$s per scoprire ed essere trovabile dai contatti esistenti che conosci. - Attualmente non stai usando alcun server di identitĂ . Per scoprire ed essere trovabile dai contatti esistenti che conosci, configurane uno qua sotto. - Indirizzi email trovabili - Le opzioni di scoperta appariranno dopo avere aggiunto un\'email. - Le opzioni di scoperta appariranno dopo avere aggiunto un numero di telefono. - Se ti disconnetti dal server di identitĂ  non potrai piĂč essere trovato da altri utenti e non potrai invitarne altri per email o telefono. - Numeri di telefono trovabili - Ti abbiamo inviato un\'email di conferma a %s, controlla l\'email e clicca sul link di conferma + Identity Server + Disconnetti Identity Server + Configura Identity Server + Cambia Identity Server + Stai usando l\'Identity Server %1$s per trovare e farti trovare da altri utenti. + In questo momento non stai usando alcun Identity Server. Per trovare e farti trovare dagli altri utenti, configurane uno qua sotto. + Indirizzi email visibili pubblicamente + Le opzioni su come farsi trovare da altri utenti appariranno dopo avere aggiunto un\'email. + Le opzioni su come farsi trovare da altri utenti appariranno dopo avere aggiunto un numero di telefono. + Se ti disconnetti dall\'Identity Server gli altri utenti non potranno trovarti e tu non potrai invitarne di nuovi per email o telefono. + Numeri di telefono visibili pubblicamente + Abbiamo inviato un\'email di conferma a %s, controlla l\'email e clicca sul link di conferma In attesa - Inserisci un nuovo server di identitĂ  - Impossibile connettersi al server di identitĂ  - Inserisci l\'URL del server di identitĂ  - Il server di identitĂ  non ha condizioni di servizio - Il server di identitĂ  che hai scelto non ha alcuna condizione di servizio. Continua solo se ti fidi del proprietario del servizio - È stato inviato un messaggio a %s. Inserisci il codice di verifica contenuto. + Inserisci un nuovo Identity Server + Impossibile connettersi all\'Identity Server + Inserisci l\'URL dell\'Identity Server + L\'Identity Server non ha reso noti i propri termini di servizio + L\'Identity Server che hai scelto non ha freso noti i propri termini di servizio. Continua solo se ti fidi + È stato inviato un messaggio a %s. Inserisci il codice di verifica che contiene. - Attualmente stai condividendo indirizzi email o numeri di telefono sul server di identitĂ  %1$s. Dovrai riconnetterti a %2$s per fermarne la condivisione. - Accetta le condizioni di servizio del server di identitĂ  (%s) per consentire di essere trovabile per email o numero di telefono. + In questo momento stai condividendo i tuoi indirizzi email o numeri di telefono sull\'Identity Server %1$s. Dovrai riconnetterti a %2$s per interromperne la condivisione. + Accetta i termini di servizio dell\'Identity Server (%s) per permettere ad altri utenti di trovarti tramite la tua email o numero di telefono. Latn - Attiva log dettagliati. - I log dettagliati aiuteranno gli sviluppatori fornendo loro piĂč informazioni quando invii una segnalazione. Anche quando attivi, l\'applicazione non registra i contenuti dei messaggi o altri dati personali. + Attiva i log dettagliati. + I log dettagliati aiuteranno gli sviluppatori fornendo loro molte piĂč informazioni nelle segnalazioni che invii scuotendo il dispositivo. Anche se attivi i log dettagliati, Riot non registra mai i contenuti dei messaggi o altri dati personali. - Riprova dopo avere accettato i termini e condizioni del tuo homeserver. + Riprova dopo avere accettato i termini di servizio del tuo Home Server. - Sembra che il server stia impiegando troppo tempo a rispondere, ciĂČ puĂČ essere causato da scarsa connettivitĂ  o un errore con i nostri server. Riprova fra qualche minuto. + Sembra che il server stia impiegando troppo tempo a rispondere. CiĂČ puĂČ essere causato da una cattiva connessione o da un errore del server. Riprova fra qualche minuto. Invia allegato Apri il pannello di navigazione - Apri il menu di creazione stanza - Chiudi il menu di creazione stanza
 + Apri il menu \"Crea nuova stanza\" + Chiudi il menu di \"Crea nuova stanza\"
 Crea una nuova conversazione diretta - Crea una nuova stanza - Chiudi il banner di backup chiavi + Crea nuova stanza + Chiudi il banner del Backup delle chiavi Mostra password Nascondi password Salta in fondo @@ -1784,8 +1786,8 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Fotocamera Audio Galleria - Adesivo - Errore di gestione dati condivisi + Sticker + Errore nella gestione dei dati condivisi È spam È inappropriato @@ -1808,10 +1810,45 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi." - Riot richiede l\'autorizzazione per salvare le tue chiavi E2E su disco. -\n + Riot richiede l\'autorizzazione per salvare le tue chiavi crittografiche sul disco. +\n \nPermetti l\'accesso nel prossimo pop-up per poter esportare le chiavi manualmente. - Non c\'Ăš nessuna connessione di rete al momento + In questo momento non c\'Ăš nessuna connessione di rete + + Conferma la tua password + Non puoi farlo da Riot mobile + E\'necessaria l\'autenticazione + + + Integrazioni + Usa un Integration Manager per gestire bot, bridge, widget e pacchetti di sticker. +\nGli Integration Manager possono ricevere dati di configurazione, modificare widget, mandare inviti alle stanze e modificare permessi a tuo nome. + Permetti l\'uso di integrazioni + Widget + Carica widget + Questo widget Ăš stato aggiunto da: + Utilizzandolo potrebbero esser impostati dei cookie e dei dati potrebbero essere condivisi con %s: + Utilizzandolo potrebbero essere condivisi dei dati con %s: + Il caricamento del widget Ăš fallito. +\n%s + Ricarica widget + Apri nel browser + Revoca l\'accesso per me + + Il tuo nome visualizzato + L\'URL del tuo avatar + Il tuo ID utente + Il tuo tema + ID widget + ID stanza + + + Questo widget vuole usare le seguenti risorse: + Permetti + Blocca tutto + Usare la fotocamera + Usa il microfono + Leggi media protetti da DRM diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index 10338ddde9..f2ff6691f3 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -1158,7 +1158,7 @@ QĂ« tĂ« garantoni se s’ju shpĂ«ton gjĂ«, thjesht mbajeni tĂ« aktivizuar mekani Ju lutemi, jepni njĂ« frazĂ«kalim FrazĂ«kalimi Ă«shtĂ« shumĂ« i dobĂ«t - Ju lutemi, fshini frazĂ«kalimin, nĂ«se doni qĂ« Riot-i tĂ« prodhojĂ« njĂ« kyç rikthimesh. + Ju lutemi, fshini frazĂ«kalimin, nĂ«se doni qĂ« Riot-i tĂ« prodhojĂ« njĂ« kyç rimarrjesh. S’ka sesione Matrix tĂ« gatshĂ«m Mos humbni kurrĂ« mesazhe tĂ« fshehtĂ«zuar @@ -1167,16 +1167,16 @@ QĂ« tĂ« garantoni se s’ju shpĂ«ton gjĂ«, thjesht mbajeni tĂ« aktivizuar mekani \nBĂ«ni njĂ« kopjeruajtje tĂ« sigurt tĂ« kyçeve tuaj, pĂ«r tĂ« shmangur humbjen e tyre. Caktoni FrazĂ«kalim U bĂ« - Ruani Kyç Rikthimesh + Ruani Kyç Rimarrjesh Ruaje si SkedĂ« - Kyçi i rikthimeve u ruajt te \'%s\'. -\n + Kyçi i rimarrjeve u ruajt te \'%s\'. +\n \nKujdes: kjo kartelĂ« mund tĂ« fshihet, nĂ«se çinstalohet aplikacioni. Ju lutemi, bĂ«ni njĂ« kopje - Jepjani kyçin e rikthimeve
 - Po prodhohet Kyç Rikthimesh duke pĂ«rdorur frazĂ«kalim, ky proces mund tĂ« hajĂ« disa sekonda. - Kyç Rikthimesh + Jepjani kyçin e rimarrjeve
 + Po prodhohet Kyç Rimarrjesh duke pĂ«rdorur frazĂ«kalim, ky proces mund tĂ« hajĂ« disa sekonda. + Kyç Rimarrjesh Gabim i papritur Nisi Kopjeruajtja Te shĂ«rbyesi juaj Home, tani po krijohet nĂ« prapaskenĂ« kopjeruajtje e kyçeve tuaj tĂ« fshehtĂ«zimit. Kopjeruajtja fillestare mund tĂ« dojĂ« disa minuta. @@ -1186,23 +1186,23 @@ QĂ« tĂ« garantoni se s’ju shpĂ«ton gjĂ«, thjesht mbajeni tĂ« aktivizuar mekani NĂ«se dilni nga llogaria, ose nĂ«se humbni pajisjen tuaj, mund tĂ« humbni hyrjen nĂ« mesazhet tuaj. Po sillet version kopjeruajtjeje
 - QĂ« tĂ« shkyçni historikun e mesazheve tuaj tĂ« sigurt, pĂ«rdorni frazĂ«kalimin tuaj tĂ« rikthimeve - pĂ«rdorni kyçin tuaj tĂ« rikthimeve - S’dihet frazĂ«kalimi juaj i rikthimeve, mundeni tĂ« %s. + QĂ« tĂ« shkyçni historikun e mesazheve tuaj tĂ« sigurt, pĂ«rdorni frazĂ«kalimin tuaj tĂ« rimarrjeve + pĂ«rdorni kyçin tuaj tĂ« rimarrjeve + S’dihet frazĂ«kalimi juaj i rimarrjeve, mundeni tĂ« %s. - PĂ«rdorni Kyçin tuaj tĂ« Rikthimeve pĂ«r tĂ« shkyçur historikun tuaj tĂ« mesazheve tĂ« sigurt - Jepni Kyç Rikthimesh + PĂ«rdorni Kyçin tuaj tĂ« Rimarrjeve pĂ«r tĂ« shkyçur historikun tuaj tĂ« mesazheve tĂ« sigurt + Jepni Kyç Rimarrjesh - Rikthim Mesazhesh + Rimarrje Mesazhesh - HumbĂ«t kyçin tuaj tĂ« rikthimeve? Te rregullimet mund tĂ« caktoni njĂ« tĂ« ri. - S’u shfshehtĂ«zua dot kopjeruajtja me kĂ«tĂ« frazĂ«kalim: ju lutemi, verifikoni qĂ« dhatĂ« frazĂ«kalimin e duhur tĂ« rikthimeve. + HumbĂ«t kyçin tuaj tĂ« rimarrjeve\? Te rregullimet mund tĂ« caktoni njĂ« tĂ« ri. + S’u shfshehtĂ«zua dot kopjeruajtja me kĂ«tĂ« frazĂ«kalim: ju lutemi, verifikoni qĂ« dhatĂ« frazĂ«kalimin e duhur tĂ« rimarrjeve. Gabim lidhjeje: ju lutemi, kontrolloni lidhjen tuaj dhe riprovoni. Po rikthehet kopjeruajtja: Shkyçeni Historikun - Ju lutemi, jepni njĂ« kyç rikthimesh - S’u shfshehtĂ«zua dot kopjeruajtja me kĂ«tĂ« kyç: ju lutemi, verifikoni qĂ« dhatĂ« kyçin e duhur tĂ« rikthimeve. + Ju lutemi, jepni njĂ« kyç rimarrjesh + S’u shfshehtĂ«zua dot kopjeruajtja me kĂ«tĂ« kyç: ju lutemi, verifikoni qĂ« dhatĂ« kyçin e duhur tĂ« rimarrjeve. Kopjeruajtja u Rikthye %s ! U rikthyen %1$d kyçe sesioni, dhe u shtuan %2$d kyç(e) tĂ« rinj qĂ« nuk njiheshin nga kjo pajisje @@ -1239,7 +1239,7 @@ QĂ« tĂ« garantoni se s’ju shpĂ«ton gjĂ«, thjesht mbajeni tĂ« aktivizuar mekani S’arrihet tĂ« fshihet kopjeruajtje (%s) Fshije Kopjeruajtjen - TĂ« fshihen nga shĂ«rbyesi kyçet tuaj tĂ« kopjeruajtur tĂ« fshehtĂ«zimit? S’do tĂ« jeni mĂ« nĂ« gjendje tĂ« pĂ«rdorni kyçin tuaj tĂ« rikthimeve pĂ«r lexim historiku mesazhesh tĂ« fshehtĂ«zuar. + TĂ« fshihen nga shĂ«rbyesi kyçet tuaj tĂ« kopjeruajtur tĂ« fshehtĂ«zimit\? S’do tĂ« jeni mĂ« nĂ« gjendje tĂ« pĂ«rdorni kyçin tuaj tĂ« rimarrjeve pĂ«r lexim historiku mesazhesh tĂ« fshehtĂ«zuar. NĂ«se dilni tani nga llogaria, do tĂ« humbni mesazhet tuaj tĂ« fshehtĂ«zuar Kopjeruajtja e kyçeve po kryhet. NĂ«se dilni tani nga llogaria, do tĂ« humbni hyrjen te mesazhet tuaj tĂ« fshehtĂ«zuar. @@ -1257,7 +1257,7 @@ QĂ« tĂ« garantoni se s’ju shpĂ«ton gjĂ«, thjesht mbajeni tĂ« aktivizuar mekani Jeni i sigurt se doni tĂ« dilni? MĂ«nyra e ruajtjes sĂ« tĂ« dhĂ«nave aplikon njĂ« filtĂ«r specifik, qĂ« kĂ«shtu pĂ«rditĂ«simet rreth pranish dhe njoftime mbi shtypje nĂ« tastierĂ« lihen jashtĂ«. - Rikthim Mesazhesh tĂ« FshehtĂ«zuar + Rimarrje Mesazhesh tĂ« FshehtĂ«zuar Ju lutemi, jepni emĂ«r pĂ«rdoruesi. Fillo tĂ« pĂ«rdorĂ«sh Kopjeruajtje Kyçesh (TĂ« mĂ«tejshme) @@ -1268,13 +1268,13 @@ QĂ« tĂ« garantoni se s’ju shpĂ«ton gjĂ«, thjesht mbajeni tĂ« aktivizuar mekani \n \nPĂ«r maksimumin e sigurisĂ«, ky duhet tĂ« jetĂ« i ndryshĂ«m nga fjalĂ«kalimi juaj pĂ«r llogarinĂ«. Po Krijohet Kopjeruajtje - Ose, sigurojeni kopjeruajtjen tuaj me njĂ« Kyç Rikthimesh, duke e ruajtur kĂ«tĂ« diku tĂ« parrezikuar. - (TĂ« mĂ«tejshme) Rregullojeni me njĂ« Kyç Rikthimesh + Ose, sigurojeni kopjeruajtjen tuaj me njĂ« Kyç Rimarrjesh, duke e ruajtur kĂ«tĂ« diku tĂ« parrezikuar. + (TĂ« mĂ«tejshme) Rregullojeni me njĂ« Kyç Rimarrjesh Sukses! Kyçet tuaj po kopjeruhen. - Kyçi juaj i rikthimeve Ă«shtĂ« njĂ« lloj rrjeti sigurie - mund ta pĂ«rdorni pĂ«r tĂ« rifituar hyrje te mesazhet tuaj tĂ« fshehtĂ«zuar, nĂ«se harroni frazĂ«kalimin tuaj. -\nMbajeni kyçin tuaj tĂ« rikthimeve diku shumĂ« tĂ« sigurt, bie fjala, nĂ«n njĂ« pĂ«rgjegjĂ«s fjalĂ«kalimesh (ose nĂ« njĂ« kasafortĂ«) - Mbajeni kyçin tuaj tĂ« rikthimeve diku nĂ« njĂ« vend shumĂ« tĂ« sigurt, bie fjala, nĂ«n njĂ« pĂ«rgjegjĂ«s fjalĂ«kalimesh (ose nĂ« njĂ« kasafortĂ«) + Kyçi juaj i rimarrjeve Ă«shtĂ« njĂ« lloj mase sigurie - mund ta pĂ«rdorni pĂ«r tĂ« rifituar hyrje te mesazhet tuaj tĂ« fshehtĂ«zuar, nĂ«se harroni frazĂ«kalimin tuaj. +\nMbajeni kyçin tuaj tĂ« rimarrjeve diku shumĂ« tĂ« sigurt, bie fjala, nĂ«n njĂ« pĂ«rgjegjĂ«s fjalĂ«kalimesh (ose nĂ« njĂ« kasafortĂ«) + Mbajeni kyçin tuaj tĂ« rimarrjeve diku nĂ« njĂ« vend shumĂ« tĂ« sigurt, bie fjala, nĂ«n njĂ« pĂ«rgjegjĂ«s fjalĂ«kalimesh (ose nĂ« njĂ« kasafortĂ«) BĂ«ra njĂ« kopje Ndajeni me tĂ« tjerĂ« Mos humbni kurrĂ« mesazhe tĂ« fshehtĂ«zuar @@ -1310,14 +1310,14 @@ QĂ« tĂ« garantoni se s’ju shpĂ«ton gjĂ«, thjesht mbajeni tĂ« aktivizuar mekani FjalĂ«kalimi s’ështĂ« i vlefshĂ«m FjalĂ«kalimet s’pĂ«rputhen - Po pĂ«rllogariten kyçe rikthimesh
 + Po pĂ«rllogariten kyçe rimarrjesh
 Po shkarkohen kyçe
 Po importohen kyçe
 - QĂ« tĂ« pĂ«rdorni Kopjeruajtje Kyçesh nĂ« kĂ«tĂ« pajisje, rikthejeni tani pĂ«rmes frazĂ«kalimit tuaj ose kyçit tĂ« rikthimeve. + QĂ« tĂ« pĂ«rdorni Kopjeruajtje Kyçesh nĂ« kĂ«tĂ« pajisje, rikthejeni tani pĂ«rmes frazĂ«kalimit tuaj ose kyçit tĂ« rimarrjeve. Kopjeruajtje e Re Kyçesh - U pikas njĂ« kopjeruajtje e re kyçesh mesazhesh tĂ« sigurt. -\n -\nNĂ«se metodĂ«n e re tĂ« rikthimeve nuk e caktuat ju, dikush mund tĂ« jetĂ« duke u rrekur tĂ« hyjĂ« nĂ« llogarinĂ« tuaj. Ndryshoni menjĂ«herĂ« fjalĂ«kalimin e llogarisĂ« tuaj dhe caktoni njĂ« metodĂ« tĂ« re rikthimesh, te Rregullimet. + U pikas njĂ« kopjeruajtje e re kyçesh mesazhesh tĂ« sigurt. +\n +\nNĂ«se metodĂ«n e re tĂ« rimarrjeve nuk e caktuat ju, dikush mund tĂ« jetĂ« duke u rrekur tĂ« hyjĂ« nĂ« llogarinĂ« tuaj. Ndryshoni menjĂ«herĂ« fjalĂ«kalimin e llogarisĂ« tuaj dhe caktoni njĂ« metodĂ« tĂ« re rimarrjesh, te Rregullimet. UnĂ« qeshĂ« PĂ«rgjigje e pavlefshme zbulimi shĂ«rbyesi Home MundĂ«si VetĂ«plotĂ«simi ShĂ«rbyesi @@ -1435,7 +1435,7 @@ QĂ« tĂ« garantoni se s’ju shpĂ«ton gjĂ«, thjesht mbajeni tĂ« aktivizuar mekani MirĂ« se vini nĂ« vatĂ«r! Mbaroni punĂ« me mesazhet e palexuara Biseda - Biseda pĂ«rmes mesazhesh tĂ« drejtpĂ«rdrejta do tĂ« shfaqet kĂ«tu + Biseda pĂ«rmes mesazhesh tĂ« drejtpĂ«rdrejta do tĂ« shfaqen kĂ«tu Dhoma Dhomat tuaja do tĂ« shfaqen kĂ«tu @@ -1601,7 +1601,7 @@ QĂ« tĂ« garantoni se s’ju shpĂ«ton gjĂ«, thjesht mbajeni tĂ« aktivizuar mekani Caktoni njĂ« email pĂ«r rimarrje llogarie, dhe mĂ« vonĂ« tĂ« jetĂ« i zbulueshĂ«m (opsionale) nga persona qĂ« ju njohin. Caktoni njĂ« telefon, dhe mĂ« vonĂ« tĂ« jetĂ« i zbulueshĂ«m (opsionale) nga persona qĂ« ju njohin. - Caktoni njĂ« email pĂ«r rimarrje llogarie. PĂ«rdoni email ose telefon qĂ« tĂ« jeni i zbulueshĂ«m (opsionale) nga persona qĂ« ju njohin. + Caktoni njĂ« email pĂ«r rimarrje llogarie. PĂ«rdorni email ose telefon qĂ« tĂ« jeni i zbulueshĂ«m (opsionale) nga persona qĂ« ju njohin. Caktoni njĂ« email pĂ«r rimarrje llogarie. PĂ«rdorni email ose telefon qĂ« tĂ« jeni i zbulueshĂ«m (opsionale) nga persona qĂ« ju njohin. S’kapet dot shĂ«rbyes Home te kjo URL, ju lutemi, kontrollojeni Do tĂ« pĂ«rdoret %s si ndihmĂ« kur shĂ«rbyesi juaj Home nuk ofron tĂ« tillĂ« (gjatĂ« thirrjes, adresa juaj IP do tĂ« ndahet me tĂ« tjerĂ«) @@ -1663,7 +1663,7 @@ QĂ« tĂ« garantoni se s’ju shpĂ«ton gjĂ«, thjesht mbajeni tĂ« aktivizuar mekani Ju lutemi, riprovoni sapo tĂ« keni pranuar termat dhe kushtet e shĂ«rbyesit tuaj Home. - Duket sikur shĂ«rbyesit po i duhet shumĂ« kohĂ« pĂ«r t’u pĂ«rgjigjur,kjo mund tĂ« shkaktohet ose nga lidhje e dobĂ«t, ose nga njĂ« gabim me shĂ«rbyesit tanĂ«. Ju lutemi, riprovoni pas pak. + Duket sikur shĂ«rbyesit po i duhet shumĂ« kohĂ« pĂ«r t’u pĂ«rgjigjur,kjo mund tĂ« shkaktohet ose nga lidhje e dobĂ«t, ose nga njĂ« gabim me shĂ«rbyesin tonĂ«. Ju lutemi, riprovoni pas pak. DĂ«rgo bashkĂ«ngjitje @@ -1721,4 +1721,40 @@ QĂ« tĂ« garantoni se s’ju shpĂ«ton gjĂ«, thjesht mbajeni tĂ« aktivizuar mekani Tani pĂ«r tani s’la lidhje rrjeti + Ripohoni fjalĂ«kalimin tuaj + KĂ«tĂ« s’e bĂ«ni dot qĂ« nga Riot-i pĂ«r celular + Lypset mirĂ«filltĂ«sim + + + Integrime + PĂ«rdorni njĂ« PĂ«rgjegjĂ«s Integrimesh qĂ« tĂ« administroni robotĂ«, ura, widget-e dhe paketa ngjitĂ«sish. +\nPĂ«rgjegjĂ«sit e Integrimeve marrin tĂ« dhĂ«na formĂ«simi dhe mund tĂ« ndryshojnĂ« widget-e, tĂ« dĂ«rgojnĂ« ftesa pĂ«r nĂ« dhoma dhe tĂ« caktojnĂ« shkallĂ« pushteti nĂ« emrin tuaj. + Lejo integrim + Widget + Ngarko Widget + Ky widget qe shtuar nga: + PĂ«rdorimi i tij mund tĂ« sjellĂ« depozitim cookies dhe ndarje tĂ« dhĂ«nash me %s: + PĂ«rdorimi i tij mund tĂ« sjellĂ« ndarje tĂ« dhĂ«nash me %s: + S’u arrit tĂ« ngarkohej widget. +\n%s + Ringarkoje widget-in + Hape nĂ« shfletues + Shfuqizo hyrje pĂ«r mua + + Emri juaj nĂ« ekran + URL-ja e avatarit tuaj + ID-ja juaj si pĂ«rdorues + Tema juaj + ID Widget-i + ID Dhome + + + Ky widget dĂ«shiron tĂ« pĂ«rdorĂ« burimet vijuese: + Lejoje + Bllokoji Krejt + TĂ« pĂ«rdorĂ« kamerĂ«n + TĂ« pĂ«rdorĂ« mikrofonin + TĂ« lexojĂ« Media tĂ« mbrojtur me DRM + + Mbyll banderolĂ« kopjeruajtjeje kyçesh diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 0a4da5b085..ea1506ca99 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -1471,4 +1471,13 @@ Riot ćœšćŽć°æ—¶çš„ć·„äœœć°†èą«æ˜Ÿè‘—çš„é™ćˆ¶ïŒŒèż™ćŻèƒœäŒšćœ±ć“æ¶ˆæŻé€šçŸ„ RiotX - -䞋䞀代 Matrix ćźąæˆ·ç«Ż ć·Č猖蟑 + 无 + 撀消 + æ–­ćŒ€èżžæŽ„ + æŁ€æŸ„ + 拒绝 + + æČĄæœ‰èźŸçœźèș«ä»œæœćŠĄć™šă€‚ + + æœćŠĄć™šçš„é”™èŻŻé…çœźćŻŒè‡Žé€šèŻć€±èŽ„ diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index a1d6ceb32b..577c1ef955 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -1660,7 +1660,7 @@ Matrix äž­çš„æ¶ˆæŻćŻèŠ‹ćșŠéĄžäŒŒäșŽé›»ć­éƒ”ä»¶ă€‚æˆ‘ć€‘ćż˜èš˜æ‚šçš„éƒ”ä»¶æ„ è«‹ćœšæ‚šæŽ„ć—æ‚šćź¶äŒșæœć™šçš„æąæŹŸèˆ‡æąä»¶ć‰çčŒçșŒé‡è©Šă€‚ - 看蔷䟆äŒșæœć™šć›žæ‡‰æ™‚é–“äŒŒäčŽć€Șäč…äș†ïŒŒé€™ćŻèƒœæ˜Żäžè‰Żçš„ç¶Čè·Żé€Łç·šæˆ–æˆ‘ć€‘çš„äŒșæœć™šéŒŻèȘ€æ‰€é€ æˆă€‚è«‹çšćŸŒć†è©Šă€‚ + 看蔷䟆äŒșæœć™šć›žæ‡‰æ™‚é–“äŒŒäčŽć€Șäč…äș†ïŒŒé€™ćŻèƒœæ˜Żäžè‰Żçš„ç¶Čè·Żé€Łç·šæˆ–äŒșæœć™šéŒŻèȘ€æ‰€é€ æˆă€‚è«‹çšćŸŒć†è©Šă€‚ 悳送附件 @@ -1720,4 +1720,41 @@ Matrix äž­çš„æ¶ˆæŻćŻèŠ‹ćșŠéĄžäŒŒäșŽé›»ć­éƒ”ä»¶ă€‚æˆ‘ć€‘ćż˜èš˜æ‚šçš„éƒ”ä»¶æ„ 盼才æČ’æœ‰ç¶Čè·Żé€Łç·š + Latn + + çąșèȘæ‚šçš„ćŻ†çąŒ + æ‚šç„Ąæł•ćœšèĄŒć‹•èŁçœźäžŠçš„ Riot 恚這件äș‹ + 需芁驗證 + + + æ•Žćˆ + äœżç”šæ•ŽćˆçźĄç†ć“Ąä»„çźĄç†æ©Ÿć™šäșșă€æ©‹æŽ„ă€ć°ć·„ć…·èˆ‡èČŒçŽ™ćŒ…ă€‚ +\næ•ŽćˆçźĄç†ć“ĄćŻä»„ä»ŁèĄšæ‚šæŽ„æ”¶èš­ćźšèł‡æ–™ïŒŒèȘżæ•Žć°ć·„ć…·ă€ć‚łé€èŠć€©ćź€é‚€è«‹äžŠèš­ćźšæŹŠćŠ›ç­‰çŽšă€‚ + ć…èš±æ•Žćˆ + ć°ć·„ć…· + èŒ‰ć…„ć°ć·„ć…· + æ­€ć°ć·„ć…·æ–°ćąžç”±ïŒš + äœżç”šćźƒćŻèƒœæœƒèš­ćźš cookies 䞊與 %s 戆äș«èł‡æ–™ïŒš + äœżç”šćźƒćŻèƒœæœƒèˆ‡ %s 戆äș«èł‡æ–™ïŒš + èŒ‰ć…„ć°ć·„ć…·ć€±æ•—ă€‚ +\n%s + é‡æ–°èŒ‰ć…„ć°ć·„ć…· + ćœšç€èŠœć™šäž­é–‹ć•Ÿ + æ’€éŠ·æˆ‘çš„ć­˜ć–æŹŠé™ + + æ‚šçš„éĄŻç€șćçš± + æ‚šçš„ć€§é ­èČŒ URL + æ‚šçš„äœżç”šè€… ID + æ‚šçš„äœˆæ™Żäž»éĄŒ + ć°ć·„ć…· ID + èŠć€©ćź€ ID + + + æ­€ć°ć·„ć…·æƒłèŠäœżç”šäž‹ćˆ—èł‡æșïŒš + ć…èš± + 阻擋所有 + äœżç”šç›žæ©Ÿ + äœżç”šéș„態鱹 + èź€ć– DRM äżè­·çš„ćȘ’é«” + diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 2e4d04354b..8dd57df90a 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -5,7 +5,7 @@ en US - + Latn @@ -1801,4 +1801,166 @@ Not all features in Riot are implemented in RiotX yet. Main missing (and coming There is no network connection right now + Block user + + "All messages (noisy)" + "All messages" + "Mentions only" + "Mute" + "Settings" + "Leave the room" + "%1$s made no changes" + Sends the given message as a spoiler + Spoiler + Type keywords to find a reaction. + + You are not ignoring any users + + Long click on a room to see more options + + + %1$s made the room public to whoever knows the link. + %1$s made the room invite only. + Unread messages + + Liberate your communication + Chat with people directly or in groups + Keep conversations private with encryption + Extend & customise your experience + Get started + + Select a server + Just like email, accounts have one home, although you can talk to anyone + Join millions free on the largest public server + Premium hosting for organisations + Learn more + Other + Custom & advanced settings + + Continue + + Connect to %1$s + Connect to Modular + Connect to a custom server + + Sign in to %1$s + Sign Up + Sign In + Continue with SSO + + Modular Address + Address + Premium hosting for organisations + Enter the address of the Modular Riot or Server you want to use + Enter the address of a server or a Riot you want to connect to + + An error occurred when loading the page: %1$s (%2$d) + The application is not able to signin to this homeserver. The homeserver supports the following signin type(s): %1$s.\n\nDo you want to signin using a web client? + Sorry, this server isn’t accepting new accounts. + The application is not able to create an account on this homeserver.\n\nDo you want to signup using a web client? + + This email is not associated to any account. + + + Reset password on %1$s + A verification email will be sent to your inbox to confirm setting your new password. + Next + Email + New password + + Warning! + Changing your password will reset any end-to-end encryption keys on all of your devices, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another device before resetting your password. + Continue + + This email is not linked to any account + + Check your inbox + + A verification email was sent to %1$s. + Tap on the link to confirm your new password. Once you\'ve followed the link it contains, click below. + I have verified my email address + + Success! + Your password has been reset. + You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device. + Back to Sign In + + Warning + Your password is not yet changed.\n\nStop the password change process? + + Set email address + Set an email to recover your account. Later, you can optionally allow people you know to discover you by your email. + Email + Email (optional) + Next + + Set phone number + Set a phone number to optionally allow people you know to discover you. + Please use the international format. + Phone number + Phone number (optional) + Next + + Confirm phone number + + We just sent a code to %1$s. Enter it below to verify it’s you. + Enter code + Send again + Next + + "International phone numbers must start with '+'" + "Phone number seems invalid. Please check it" + + + Sign up to %1$s + Username or email + Password + Next + That username is taken + Warning + Your account is not created yet.\n\nStop the registration process? + + Select matrix.org + Select modular + Select a custom homeserver + Please perform the captcha challenge + Accept terms to continue + + Please check your email + We just sent an email to %1$s.\nPlease click on the link it contains to continue the account creation. + The entered code is not correct. Please check. + Outdated homeserver + This homeserver is running too old a version to connect to. Ask your homeserver admin to upgrade. + + + Too many requests have been sent. You can retry in %1$d second
 + Too many requests have been sent. You can retry in %1$d seconds
 + + + Seen by + + You’re signed out + It can be due to various reasons:\n\n‱ You’ve changed your password on another device.\n\n‱ You have deleted this device from another device.\n\n‱ The administrator of your server has invalidated your access for security reason. + Sign in again + + You’re signed out + Sign in + + Your homeserver (%1$s) admin has signed you out of your account %2$s (%3$s). + Sign in to recover encryption keys stored exclusively on this device. You need them to read all of your secure messages on any device. + Sign in + Password + Clear personal data + Warning: Your personal data (including encryption keys) is still stored on this device.\n\nClear it if you’re finished using this device, or want to sign in to another account. + Clear all data + + Clear data + Clear all data currently stored on this device?\nSign in again to access your account data and messages. + You’ll lose access to secure messages unless you sign in to recover your encryption keys. + Clear data + The current session is for user %1$s and you provide credentials for user %2$s. This is not supported by RiotX.\nPlease first clear data, then sign in again on another account. + + Your matrix.to link was malformed + The description is too short + diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index 753a15274a..71fbc22acf 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -2,165 +2,6 @@ - Block user - - "All messages (noisy)" - "All messages" - "Mentions only" - "Mute" - "Settings" - "Leave the room" - "%1$s made no changes" - Sends the given message as a spoiler - Spoiler - Type keywords to find a reaction. - - You are not ignoring any users - - Long click on a room to see more options - %1$s made the room public to whoever knows the link. - %1$s made the room invite only. - Unread messages - - Liberate your communication - Chat with people directly or in groups - Keep conversations private with encryption - Extend & customise your experience - Get started - - Select a server - Just like email, accounts have one home, although you can talk to anyone - Join millions free on the largest public server - Premium hosting for organisations - Learn more - Other - Custom & advanced settings - - Continue - - Connect to %1$s - Connect to Modular - Connect to a custom server - - Sign in to %1$s - Sign Up - Sign In - Continue with SSO - - Modular Address - Address - Premium hosting for organisations - Enter the address of the Modular Riot or Server you want to use - Enter the address of a server or a Riot you want to connect to - - An error occurred when loading the page: %1$s (%2$d) - The application is not able to signin to this homeserver. The homeserver supports the following signin type(s): %1$s.\n\nDo you want to signin using a web client? - Sorry, this server isn’t accepting new accounts. - The application is not able to create an account on this homeserver.\n\nDo you want to signup using a web client? - - This email is not associated to any account. - - - Reset password on %1$s - A verification email will be sent to your inbox to confirm setting your new password. - Next - Email - New password - - Warning! - Changing your password will reset any end-to-end encryption keys on all of your devices, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another device before resetting your password. - Continue - - This email is not linked to any account - - Check your inbox - - A verification email was sent to %1$s. - Tap on the link to confirm your new password. Once you\'ve followed the link it contains, click below. - I have verified my email address - - Success! - Your password has been reset. - You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device. - Back to Sign In - - Warning - Your password is not yet changed.\n\nStop the password change process? - - Set email address - Set an email to recover your account. Later, you can optionally allow people you know to discover you by your email. - Email - Email (optional) - Next - - Set phone number - Set a phone number to optionally allow people you know to discover you. - Please use the international format. - Phone number - Phone number (optional) - Next - - Confirm phone number - - We just sent a code to %1$s. Enter it below to verify it’s you. - Enter code - Send again - Next - - "International phone numbers must start with '+'" - "Phone number seems invalid. Please check it" - - - Sign up to %1$s - Username or email - Password - Next - That username is taken - Warning - Your account is not created yet.\n\nStop the registration process? - - Select matrix.org - Select modular - Select a custom homeserver - Please perform the captcha challenge - Accept terms to continue - - Please check your email - We just sent an email to %1$s.\nPlease click on the link it contains to continue the account creation. - The entered code is not correct. Please check. - Outdated homeserver - This homeserver is running too old a version to connect to. Ask your homeserver admin to upgrade. - - - Too many requests have been sent. You can retry in %1$d second
 - Too many requests have been sent. You can retry in %1$d seconds
 - - - Seen by - - You’re signed out - It can be due to various reasons:\n\n‱ You’ve changed your password on another device.\n\n‱ You have deleted this device from another device.\n\n‱ The administrator of your server has invalidated your access for security reason. - Sign in again - - You’re signed out - Sign in - - Your homeserver (%1$s) admin has signed you out of your account %2$s (%3$s). - Sign in to recover encryption keys stored exclusively on this device. You need them to read all of your secure messages on any device. - Sign in - Password - Clear personal data - Warning: Your personal data (including encryption keys) is still stored on this device.\n\nClear it if you’re finished using this device, or want to sign in to another account. - Clear all data - - Clear data - Clear all data currently stored on this device?\nSign in again to access your account data and messages. - You’ll lose access to secure messages unless you sign in to recover your encryption keys. - Clear data - The current session is for user %1$s and you provide credentials for user %2$s. This is not supported by RiotX.\nPlease first clear data, then sign in again on another account. - - Your matrix.to link was malformed - The description is too short From 92315a4189a372f173dcf69dcd252609530cb0a0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 19 Dec 2019 16:44:14 +0100 Subject: [PATCH 21/22] Prepare release 0.11.0 --- CHANGES.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index eef8808393..5143253a06 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -Changes in RiotX 0.11.0 (2019-XX-XX) +Changes in RiotX 0.11.0 (2019-12-19) =================================================== Features ✹: @@ -19,9 +19,6 @@ Bugfix 🐛: - Fix rendering issue with HTML formatted body - Disable click on Stickers (#703) -Translations 🗣: - - - Build đŸ§±: - Include diff-match-patch sources as dependency From 51d6b8828d9e6f191f3df14804d1ec439a5cda47 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 19 Dec 2019 16:46:01 +0100 Subject: [PATCH 22/22] Version++ --- CHANGES.md | 21 +++++++++++++++++++++ vector/build.gradle | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 5143253a06..863b1ca455 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,24 @@ +Changes in RiotX 0.12.0 (2019-XX-XX) +=================================================== + +Features ✹: + - + +Improvements 🙌: + - + +Other changes: + - + +Bugfix 🐛: + - + +Translations 🗣: + - + +Build đŸ§±: + - + Changes in RiotX 0.11.0 (2019-12-19) =================================================== diff --git a/vector/build.gradle b/vector/build.gradle index de15a67fbd..c8d474088f 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -15,7 +15,7 @@ androidExtensions { } ext.versionMajor = 0 -ext.versionMinor = 11 +ext.versionMinor = 12 ext.versionPatch = 0 static def getGitTimestamp() {