From 56f1c726b2dfaab9fab072744871bba2d5ddea73 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 10 Jun 2019 13:37:54 +0200 Subject: [PATCH 01/77] FAB Motion WIP FAB Motion WIP FAB Motion WIP FAB Motion WIP --- .../home/room/list/widget/FabMenuView.kt | 91 +------- .../layout/constraint_set_fab_menu_close.xml | 81 ------- .../layout/constraint_set_fab_menu_open.xml | 76 ------- .../main/res/layout/fragment_room_list.xml | 2 + ...enu_view.xml => motion_fab_menu_merge.xml} | 33 ++- .../main/res/xml/motion_scene_fab_menu.xml | 213 ++++++++++++++++++ 6 files changed, 238 insertions(+), 258 deletions(-) delete mode 100644 vector/src/main/res/layout/constraint_set_fab_menu_close.xml delete mode 100644 vector/src/main/res/layout/constraint_set_fab_menu_open.xml rename vector/src/main/res/layout/{merge_fab_menu_view.xml => motion_fab_menu_merge.xml} (68%) create mode 100644 vector/src/main/res/xml/motion_scene_fab_menu.xml diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt index 95b7179c..7b8fb78c 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt @@ -18,56 +18,29 @@ package im.vector.riotredesign.features.home.room.list.widget import android.content.Context import android.util.AttributeSet -import android.view.ViewGroup -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.constraintlayout.widget.ConstraintSet -import androidx.core.view.isVisible -import androidx.transition.ChangeTransform -import androidx.transition.Transition -import androidx.transition.TransitionManager +import androidx.constraintlayout.motion.widget.MotionLayout import im.vector.riotredesign.R -import im.vector.riotredesign.core.animations.ANIMATION_DURATION_SHORT -import im.vector.riotredesign.core.animations.SimpleTransitionListener -import im.vector.riotredesign.core.animations.VectorFullTransitionSet import im.vector.riotredesign.features.themes.ThemeUtils -import kotlinx.android.synthetic.main.merge_fab_menu_view.view.* +import kotlinx.android.synthetic.main.motion_fab_menu_merge.view.* class FabMenuView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, - defStyleAttr: Int = 0) : ConstraintLayout(context, attrs, defStyleAttr) { + defStyleAttr: Int = 0) : MotionLayout(context, attrs, defStyleAttr) { var listener: Listener? = null - private var isFabMenuOpened = false - init { - inflate(context, R.layout.merge_fab_menu_view, this) + inflate(context, R.layout.motion_fab_menu_merge, this) } override fun onFinishInflate() { super.onFinishInflate() - // Collapse - ConstraintSet().also { - it.clone(context, R.layout.constraint_set_fab_menu_close) - it.applyTo(this) - } - - createRoomItemChat.isVisible = false - createRoomItemChatLabel.isVisible = false - createRoomItemGroup.isVisible = false - createRoomItemGroupLabel.isVisible = false - // Collapse end - // Tint label background listOf(createRoomItemChatLabel, createRoomItemGroupLabel) .forEach { it.setBackgroundResource(ThemeUtils.getResourceId(context, R.drawable.vector_label_background_light)) } - createRoomButton.setOnClickListener { - toggleFabMenu() - } - listOf(createRoomItemChat, createRoomItemChatLabel) .forEach { it.setOnClickListener { @@ -89,6 +62,9 @@ class FabMenuView @JvmOverloads constructor(context: Context, attrs: AttributeSe } fun show() { + // Ensure visibility is well restored + // FIXME It does not work, FAB is not visible, alpha is 0... And cannot set it to 1 + createRoomButton.show() } @@ -96,61 +72,12 @@ class FabMenuView @JvmOverloads constructor(context: Context, attrs: AttributeSe createRoomButton.hide() } - private fun openFabMenu() { - if (isFabMenuOpened) { - return - } - - toggleFabMenu() - } - private fun closeFabMenu() { - if (!isFabMenuOpened) { - return - } - - toggleFabMenu() - } - - private fun toggleFabMenu() { - isFabMenuOpened = !isFabMenuOpened - - TransitionManager.beginDelayedTransition(parent as? ViewGroup ?: this, - VectorFullTransitionSet().apply { - duration = ANIMATION_DURATION_SHORT - ChangeTransform() - addListener(object : SimpleTransitionListener() { - override fun onTransitionEnd(transition: Transition) { - // Hide the view after the transition for a better visual effect - createRoomItemChat.isVisible = isFabMenuOpened - createRoomItemChatLabel.isVisible = isFabMenuOpened - createRoomItemGroup.isVisible = isFabMenuOpened - createRoomItemGroupLabel.isVisible = isFabMenuOpened - } - }) - }) - - if (isFabMenuOpened) { - // Animate manually the rotation for a better effect - createRoomButton.animate().setDuration(ANIMATION_DURATION_SHORT).rotation(135f) - - - ConstraintSet().also { - it.clone(context, R.layout.constraint_set_fab_menu_open) - it.applyTo(this) - } - } else { - createRoomButton.animate().setDuration(ANIMATION_DURATION_SHORT).rotation(0f) - - ConstraintSet().also { - it.clone(context, R.layout.constraint_set_fab_menu_close) - it.applyTo(this) - } - } + transitionToStart() } fun onBackPressed(): Boolean { - if (isFabMenuOpened) { + if (currentState == R.id.constraint_set_fab_menu_open) { closeFabMenu() return true } diff --git a/vector/src/main/res/layout/constraint_set_fab_menu_close.xml b/vector/src/main/res/layout/constraint_set_fab_menu_close.xml deleted file mode 100644 index 4df0e8d0..00000000 --- a/vector/src/main/res/layout/constraint_set_fab_menu_close.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vector/src/main/res/layout/constraint_set_fab_menu_open.xml b/vector/src/main/res/layout/constraint_set_fab_menu_open.xml deleted file mode 100644 index fc47458e..00000000 --- a/vector/src/main/res/layout/constraint_set_fab_menu_open.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vector/src/main/res/layout/fragment_room_list.xml b/vector/src/main/res/layout/fragment_room_list.xml index 452451f7..729afb2b 100644 --- a/vector/src/main/res/layout/fragment_room_list.xml +++ b/vector/src/main/res/layout/fragment_room_list.xml @@ -17,6 +17,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" + app:layoutDescription="@xml/motion_scene_fab_menu" + tools:showPaths="true" tools:visibility="visible" /> + + app:layoutDescription="@xml/motion_scene_fab_menu" + tools:motionProgress="0.5" + tools:parentTag="androidx.constraintlayout.motion.widget.MotionLayout" + tools:showPaths="true"> + app:tint="@color/black" /> @@ -43,17 +43,16 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:src="@drawable/ic_fab_add_chat" - android:visibility="gone" - app:backgroundTint="?riotx_fab_secondary_bg" + app:backgroundTint="#FFFFFF" app:fabCustomSize="48dp" app:maxImageSize="29dp" - app:tint="?riotx_fab_secondary_color" - tools:ignore="MissingConstraints" - tools:visibility="visible" /> + app:tint="@color/black" /> @@ -63,11 +62,7 @@ android:id="@+id/createRoomButton" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="bottom|end" android:src="@drawable/ic_fab_add" - android:visibility="gone" - app:maxImageSize="14dp" - tools:ignore="MissingConstraints" - tools:visibility="visible" /> + app:maxImageSize="14dp" /> diff --git a/vector/src/main/res/xml/motion_scene_fab_menu.xml b/vector/src/main/res/xml/motion_scene_fab_menu.xml new file mode 100644 index 00000000..d1c94f35 --- /dev/null +++ b/vector/src/main/res/xml/motion_scene_fab_menu.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 90a011c4e4298640864382fcbbe469e94e773915 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 10 Jun 2019 17:45:35 +0200 Subject: [PATCH 02/77] Fix issue on animation --- .../main/res/layout/motion_fab_menu_merge.xml | 12 +-- .../main/res/xml/motion_scene_fab_menu.xml | 76 +++++-------------- 2 files changed, 27 insertions(+), 61 deletions(-) diff --git a/vector/src/main/res/layout/motion_fab_menu_merge.xml b/vector/src/main/res/layout/motion_fab_menu_merge.xml index 211293e8..a7f82fe4 100644 --- a/vector/src/main/res/layout/motion_fab_menu_merge.xml +++ b/vector/src/main/res/layout/motion_fab_menu_merge.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" app:layoutDescription="@xml/motion_scene_fab_menu" - tools:motionProgress="0.5" + tools:motionProgress="0.65" tools:parentTag="androidx.constraintlayout.motion.widget.MotionLayout" tools:showPaths="true"> @@ -30,10 +30,11 @@ @@ -51,10 +52,11 @@ diff --git a/vector/src/main/res/xml/motion_scene_fab_menu.xml b/vector/src/main/res/xml/motion_scene_fab_menu.xml index d1c94f35..fc363cfc 100644 --- a/vector/src/main/res/xml/motion_scene_fab_menu.xml +++ b/vector/src/main/res/xml/motion_scene_fab_menu.xml @@ -6,58 +6,22 @@ + motion:duration="200"> - - - - - - - - - - - - - - - - + + android:visibility="invisible" /> + android:visibility="invisible" + motion:layout_constraintBottom_toBottomOf="@+id/createRoomItemGroup" + motion:layout_constraintEnd_toEndOf="@+id/createRoomItemGroup" + motion:layout_constraintTop_toTopOf="@+id/createRoomItemGroup" /> @@ -160,7 +122,8 @@ Date: Tue, 11 Jun 2019 15:43:40 +0200 Subject: [PATCH 03/77] Fix / visibility bug after scroll + refine animation --- .../home/room/list/RoomListFragment.kt | 35 +++++++++--------- .../home/room/list/widget/FabMenuView.kt | 13 ++++--- .../main/res/xml/motion_scene_fab_menu.xml | 36 +++++++++++++++++-- 3 files changed, 61 insertions(+), 23 deletions(-) diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt index e354be2f..e7b8b837 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt @@ -93,25 +93,26 @@ class RoomListFragment : VectorBaseFragment(), RoomSummaryController.Callback, O } // Hide FAB when list is scrolling - epoxyRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { - createChatFabMenu.removeCallbacks(showFabRunnable) + epoxyRecyclerView.addOnScrollListener( + object : RecyclerView.OnScrollListener() { + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + createChatFabMenu.removeCallbacks(showFabRunnable) - when (newState) { - RecyclerView.SCROLL_STATE_IDLE -> { - createChatFabMenu.postDelayed(showFabRunnable, 1000) - } - RecyclerView.SCROLL_STATE_DRAGGING, - RecyclerView.SCROLL_STATE_SETTLING -> { - when (roomListParams.displayMode) { - DisplayMode.HOME -> createChatFabMenu.hide() - DisplayMode.PEOPLE -> createChatRoomButton.hide() - else -> createGroupRoomButton.hide() + when (newState) { + RecyclerView.SCROLL_STATE_IDLE -> { + createChatFabMenu.postDelayed(showFabRunnable, 1000) + } + RecyclerView.SCROLL_STATE_DRAGGING, + RecyclerView.SCROLL_STATE_SETTLING -> { + when (roomListParams.displayMode) { + DisplayMode.HOME -> createChatFabMenu.hide() + DisplayMode.PEOPLE -> createChatRoomButton.hide() + else -> createGroupRoomButton.hide() + } + } } } - } - } - }) + }) } @@ -220,7 +221,7 @@ class RoomListFragment : VectorBaseFragment(), RoomSummaryController.Callback, O return super.onBackPressed() } - // RoomSummaryController.Callback ************************************************************** +// RoomSummaryController.Callback ************************************************************** override fun onRoomSelected(room: RoomSummary) { roomListViewModel.accept(RoomListActions.SelectRoom(room)) diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt index 7b8fb78c..9210e7ac 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt @@ -19,6 +19,8 @@ package im.vector.riotredesign.features.home.room.list.widget import android.content.Context import android.util.AttributeSet import androidx.constraintlayout.motion.widget.MotionLayout +import androidx.core.view.isVisible +import com.google.android.material.floatingactionbutton.FloatingActionButton import im.vector.riotredesign.R import im.vector.riotredesign.features.themes.ThemeUtils import kotlinx.android.synthetic.main.motion_fab_menu_merge.view.* @@ -62,14 +64,17 @@ class FabMenuView @JvmOverloads constructor(context: Context, attrs: AttributeSe } fun show() { - // Ensure visibility is well restored - // FIXME It does not work, FAB is not visible, alpha is 0... And cannot set it to 1 - + isVisible = true createRoomButton.show() } fun hide() { - createRoomButton.hide() + createRoomButton.hide(object : FloatingActionButton.OnVisibilityChangedListener() { + override fun onHidden(fab: FloatingActionButton?) { + super.onHidden(fab) + isVisible = false + } + }) } private fun closeFabMenu() { diff --git a/vector/src/main/res/xml/motion_scene_fab_menu.xml b/vector/src/main/res/xml/motion_scene_fab_menu.xml index fc363cfc..5cbf8bcd 100644 --- a/vector/src/main/res/xml/motion_scene_fab_menu.xml +++ b/vector/src/main/res/xml/motion_scene_fab_menu.xml @@ -6,12 +6,44 @@ + motion:motionInterpolator="easeInOut" + motion:duration="300"> + + + + + + + + + + + @@ -96,7 +128,7 @@ - + Date: Thu, 13 Jun 2019 16:39:35 +0200 Subject: [PATCH 04/77] Crypto: Delete device --- .../matrix/android/api/failure/Failure.kt | 5 +- .../android/internal/auth/data/LoginFlow.kt | 14 ++- .../registration/RegistrationFlowResponse.kt | 53 +++++++++++ .../android/internal/crypto/CryptoModule.kt | 2 +- .../crypto/model/rest/DeleteDeviceAuth.kt | 5 +- .../crypto/model/rest/DeleteDeviceParams.kt | 4 +- .../internal/crypto/tasks/DeleteDeviceTask.kt | 90 +++++++++++++++++-- .../android/internal/network/Request.kt | 39 +++++--- .../VectorSettingsPreferencesFragment.kt | 10 +-- 9 files changed, 192 insertions(+), 30 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/failure/Failure.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/failure/Failure.kt index 8431239a..232a13d8 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/failure/Failure.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/failure/Failure.kt @@ -31,7 +31,10 @@ import java.io.IOException sealed class Failure(cause: Throwable? = null) : Throwable(cause = cause) { data class Unknown(val throwable: Throwable? = null) : Failure(throwable) data class NetworkConnection(val ioException: IOException? = null) : Failure(ioException) - data class ServerError(val error: MatrixError) : Failure(RuntimeException(error.toString())) + data class ServerError(val error: MatrixError, val httpCode: Int) : Failure(RuntimeException(error.toString())) + // When server send an error, but it cannot be interpreted as a MatrixError + data class OtherServerError(val errorBody: String, val httpCode: Int) : Failure(RuntimeException(errorBody)) + data class CryptoError(val error: MXCryptoError) : Failure(RuntimeException(error.toString())) abstract class FeatureFailure : Failure() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlow.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlow.kt index fba7980b..a0b56d7a 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlow.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlow.kt @@ -16,8 +16,18 @@ package im.vector.matrix.android.internal.auth.data +import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +/** + * A Login flow. + */ @JsonClass(generateAdapter = true) -internal data class LoginFlow(val type: String, - val stages: List) \ No newline at end of file +internal data class LoginFlow( + + @Json(name = "type") + val type: String? = null, + + @Json(name = "stages") + val stages: List +) \ No newline at end of file diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt new file mode 100644 index 00000000..ac23fe15 --- /dev/null +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt @@ -0,0 +1,53 @@ +/* + * 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.matrix.android.internal.auth.registration + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +import im.vector.matrix.android.api.util.JsonDict +import im.vector.matrix.android.internal.auth.data.LoginFlow + +@JsonClass(generateAdapter = true) +internal data class RegistrationFlowResponse( + + /** + * The list of stages the client has completed successfully. + */ + @Json(name = "flows") + var loginFlows: List? = null, + + /** + * The list of stages the client has completed successfully. + */ + @Json(name = "completed") + var completedStages: List? = null, + + /** + * The session identifier that the client must pass back to the home server, if one is provided, + * in subsequent attempts to authenticate in the same API call. + */ + @Json(name = "session") + var session: String? = null, + + /** + * The information that the client will need to know in order to use a given type of authentication. + * For each login stage type presented, that type may be present as a key in this dictionary. + * For example, the public key of reCAPTCHA stage could be given here. + */ + @Json(name = "params") + var params: JsonDict? = null +) \ No newline at end of file diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt index 84029ba6..6c786209 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt @@ -227,7 +227,7 @@ internal class CryptoModule { DefaultClaimOneTimeKeysForUsersDevice(get()) as ClaimOneTimeKeysForUsersDeviceTask } scope(DefaultSession.SCOPE) { - DefaultDeleteDeviceTask(get()) as DeleteDeviceTask + DefaultDeleteDeviceTask(get(), get()) as DeleteDeviceTask } scope(DefaultSession.SCOPE) { DefaultDownloadKeysForUsers(get()) as DownloadKeysForUsersTask diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceAuth.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceAuth.kt index f50fbaba..6a03d260 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceAuth.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceAuth.kt @@ -19,7 +19,7 @@ import com.squareup.moshi.Json import com.squareup.moshi.JsonClass /** - * This class provides the + * This class provides the authentication data to delete a device */ @JsonClass(generateAdapter = true) data class DeleteDeviceAuth( @@ -32,6 +32,9 @@ data class DeleteDeviceAuth( @Json(name = "type") var type: String? = null, + @Json(name = "user") var user: String? = null, + + @Json(name = "password") var password: String? = null ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt index ba3ed903..c7e98362 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt @@ -15,6 +15,7 @@ */ package im.vector.matrix.android.internal.crypto.model.rest +import com.squareup.moshi.Json import com.squareup.moshi.JsonClass /** @@ -22,5 +23,6 @@ import com.squareup.moshi.JsonClass */ @JsonClass(generateAdapter = true) data class DeleteDeviceParams( - var auth: DeleteDeviceAuth? = null + @Json(name = "auth") + var deleteDeviceAuth: DeleteDeviceAuth? = null ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt index 0fb9ad0f..bbd2d440 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt @@ -17,10 +17,19 @@ package im.vector.matrix.android.internal.crypto.tasks import arrow.core.Try +import arrow.core.failure +import arrow.core.recoverWith +import im.vector.matrix.android.api.auth.data.Credentials +import im.vector.matrix.android.api.failure.Failure +import im.vector.matrix.android.api.failure.MatrixError +import im.vector.matrix.android.internal.auth.registration.RegistrationFlowResponse import im.vector.matrix.android.internal.crypto.api.CryptoApi +import im.vector.matrix.android.internal.crypto.model.rest.DeleteDeviceAuth import im.vector.matrix.android.internal.crypto.model.rest.DeleteDeviceParams +import im.vector.matrix.android.internal.di.MoshiProvider import im.vector.matrix.android.internal.network.executeRequest import im.vector.matrix.android.internal.task.Task +import timber.log.Timber internal interface DeleteDeviceTask : Task { data class Params( @@ -29,15 +38,84 @@ internal interface DeleteDeviceTask : Task { ) } -internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi) +internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi, + private val credentials: Credentials) : DeleteDeviceTask { override suspend fun execute(params: DeleteDeviceTask.Params): Try { - return executeRequest { - apiCall = cryptoApi.deleteDevice(params.deviceId, - DeleteDeviceParams()) - } + return executeRequest { + apiCall = cryptoApi.deleteDevice(params.deviceId, DeleteDeviceParams()) + }.recoverWith { throwable -> + if (throwable is Failure.OtherServerError && throwable.httpCode == 401) { + // Replay the request with passing the credentials - // TODO Recover error, see legacy code MXSession.deleteDevice() + // Parse to get a RegistrationFlowResponse + val registrationFlowResponseAdapter = MoshiProvider.providesMoshi().adapter(RegistrationFlowResponse::class.java) + val registrationFlowResponse = try { + registrationFlowResponseAdapter.fromJson(throwable.errorBody) + } catch (e: Exception) { + null + } + + // check if the server response can be casted + if (registrationFlowResponse?.loginFlows?.isNotEmpty() == true) { + val stages = ArrayList() + + // Get all stages + registrationFlowResponse.loginFlows?.forEach { + stages.addAll(it.stages) + } + + Timber.v("## deleteDevice() : supported stages $stages") + + deleteDeviceRecursive(registrationFlowResponse.session, params, stages) + } else { + throwable.failure() + } + + } else { + // Other error + throwable.failure() + } + } + } + + private fun deleteDeviceRecursive(authSession: String?, + params: DeleteDeviceTask.Params, + remainingStages: MutableList): Try { + // Pick the first stage + val stage = remainingStages.first() + + val newParams = DeleteDeviceParams() + .apply { + deleteDeviceAuth = DeleteDeviceAuth() + .apply { + type = stage + session = authSession + user = credentials.userId + password = params.accountPassword + } + } + + return executeRequest { + apiCall = cryptoApi.deleteDevice(params.deviceId, newParams) + }.recoverWith { throwable -> + if (throwable is Failure.ServerError + && throwable.httpCode == 401 + && (throwable.error.code == MatrixError.FORBIDDEN || throwable.error.code == MatrixError.UNKNOWN)) { + if (remainingStages.size > 1) { + // Try next stage + val otherStages = remainingStages.subList(1, remainingStages.size) + + deleteDeviceRecursive(authSession, params, otherStages) + } else { + // No more stage remaining + throwable.failure() + } + } else { + // Other error + throwable.failure() + } + } } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/Request.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/Request.kt index f8a6bc57..139d6215 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/Request.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/Request.kt @@ -23,12 +23,14 @@ import arrow.effects.IO import arrow.effects.fix import arrow.effects.instances.io.async.async import arrow.integrations.retrofit.adapter.runAsync +import com.squareup.moshi.JsonDataException import com.squareup.moshi.Moshi import im.vector.matrix.android.api.failure.Failure import im.vector.matrix.android.api.failure.MatrixError import im.vector.matrix.android.internal.di.MoshiProvider import okhttp3.ResponseBody import retrofit2.Call +import timber.log.Timber import java.io.IOException internal inline fun executeRequest(block: Request.() -> Unit) = Request().apply(block).execute() @@ -44,23 +46,38 @@ internal class Request { if (response.isSuccessful) { response.body() ?: throw IllegalStateException("The request returned a null body") } else { - throw manageFailure(response.errorBody()) + throw manageFailure(response.errorBody(), response.code()) } }.recoverWith { when (it) { - is IOException -> Failure.NetworkConnection(it) - is Failure.ServerError -> it - else -> Failure.Unknown(it) + is IOException -> Failure.NetworkConnection(it) + is Failure.ServerError, + is Failure.OtherServerError -> it + else -> Failure.Unknown(it) }.failure() } } - private fun manageFailure(errorBody: ResponseBody?): Throwable { - val matrixError = errorBody?.let { - val matrixErrorAdapter = moshi.adapter(MatrixError::class.java) - matrixErrorAdapter.fromJson(errorBody.source()) - } ?: return RuntimeException("Matrix error should not be null") - return Failure.ServerError(matrixError) - } + private fun manageFailure(errorBody: ResponseBody?, httpCode: Int): Throwable { + if (errorBody == null) { + return RuntimeException("Error body should not be null") + } + val errorBodyStr = errorBody.string() + + val matrixErrorAdapter = moshi.adapter(MatrixError::class.java) + + try { + val matrixError = matrixErrorAdapter.fromJson(errorBodyStr) + + if (matrixError != null) { + return Failure.ServerError(matrixError, httpCode) + } + } catch (ex: JsonDataException) { + // This is not a MatrixError + Timber.w("The error returned by the server is not a MatrixError") + } + + return Failure.OtherServerError(errorBodyStr, httpCode) + } } \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt index a55b0f6e..41f8ba45 100755 --- a/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt @@ -2493,15 +2493,12 @@ class VectorSettingsPreferencesFragment : VectorPreferenceFragment(), SharedPref * @param deviceId the device id */ private fun deleteDevice(deviceId: String) { - notImplemented() - - // We have to manage registration flow first, to handle what is necessary to delete a devive - /* displayLoadingView() - session.deleteDevice(deviceId, mAccountPassword, object : MatrixCallback { + mSession.deleteDevice(deviceId, mAccountPassword, object : MatrixCallback { override fun onSuccess(data: Unit) { hideLoadingView() - refreshDevicesList() // force settings update + // force settings update + refreshDevicesList() } override fun onFailure(failure: Throwable) { @@ -2509,7 +2506,6 @@ class VectorSettingsPreferencesFragment : VectorPreferenceFragment(), SharedPref onCommonDone(failure.localizedMessage) } }) - */ } /** From 8f6f72ca487e6f430b3e33a9edcd8bc6079d4e8f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 14 Jun 2019 16:06:07 +0200 Subject: [PATCH 05/77] Review: Added optional to stage and renamed to "InteractiveAuthenticationFlow" --- .../data/{LoginFlow.kt => InteractiveAuthenticationFlow.kt} | 6 +++--- .../matrix/android/internal/auth/data/LoginFlowResponse.kt | 6 +++++- .../internal/auth/registration/RegistrationFlowResponse.kt | 6 +++--- .../android/internal/crypto/tasks/DeleteDeviceTask.kt | 6 +++--- 4 files changed, 14 insertions(+), 10 deletions(-) rename matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/{LoginFlow.kt => InteractiveAuthenticationFlow.kt} (86%) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlow.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/InteractiveAuthenticationFlow.kt similarity index 86% rename from matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlow.kt rename to matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/InteractiveAuthenticationFlow.kt index a0b56d7a..c5d8dcc5 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlow.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/InteractiveAuthenticationFlow.kt @@ -20,14 +20,14 @@ import com.squareup.moshi.Json import com.squareup.moshi.JsonClass /** - * A Login flow. + * An interactive authentication flow. */ @JsonClass(generateAdapter = true) -internal data class LoginFlow( +internal data class InteractiveAuthenticationFlow( @Json(name = "type") val type: String? = null, @Json(name = "stages") - val stages: List + val stages: List? = null ) \ No newline at end of file diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlowResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlowResponse.kt index a5062181..834b0aee 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlowResponse.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlowResponse.kt @@ -16,7 +16,11 @@ package im.vector.matrix.android.internal.auth.data +import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -internal data class LoginFlowResponse(val flows: List) \ No newline at end of file +internal data class LoginFlowResponse( + @Json(name = "flows") + val flows: List +) \ No newline at end of file diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt index ac23fe15..747db64c 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt @@ -19,16 +19,16 @@ package im.vector.matrix.android.internal.auth.registration import com.squareup.moshi.Json import com.squareup.moshi.JsonClass import im.vector.matrix.android.api.util.JsonDict -import im.vector.matrix.android.internal.auth.data.LoginFlow +import im.vector.matrix.android.internal.auth.data.InteractiveAuthenticationFlow @JsonClass(generateAdapter = true) internal data class RegistrationFlowResponse( /** - * The list of stages the client has completed successfully. + * The list of flows. */ @Json(name = "flows") - var loginFlows: List? = null, + var flows: List? = null, /** * The list of stages the client has completed successfully. diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt index bbd2d440..2b7649fd 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt @@ -58,12 +58,12 @@ internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi, } // check if the server response can be casted - if (registrationFlowResponse?.loginFlows?.isNotEmpty() == true) { + if (registrationFlowResponse?.flows?.isNotEmpty() == true) { val stages = ArrayList() // Get all stages - registrationFlowResponse.loginFlows?.forEach { - stages.addAll(it.stages) + registrationFlowResponse.flows?.forEach { + stages.addAll(it.stages ?: emptyList()) } Timber.v("## deleteDevice() : supported stages $stages") From eaf1e080ba3411354c8ba7a6543ff6e14dc5dcd0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 14 Jun 2019 16:14:39 +0200 Subject: [PATCH 06/77] format file --- .../main/res/xml/motion_scene_fab_menu.xml | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/vector/src/main/res/xml/motion_scene_fab_menu.xml b/vector/src/main/res/xml/motion_scene_fab_menu.xml index 5cbf8bcd..646cfc34 100644 --- a/vector/src/main/res/xml/motion_scene_fab_menu.xml +++ b/vector/src/main/res/xml/motion_scene_fab_menu.xml @@ -6,8 +6,8 @@ + motion:duration="300" + motion:motionInterpolator="easeInOut"> + motion:percentY="0.8" /> + motion:motionTarget="@id/createRoomItemGroupLabel" + motion:percentX="0.9" + motion:percentY="0.8" /> + motion:motionTarget="@id/createRoomItemChatLabel" /> + motion:motionTarget="@id/createRoomItemGroupLabel" /> - + - + Date: Mon, 17 Jun 2019 14:55:17 +0200 Subject: [PATCH 07/77] Import strings from Riot --- .../src/main/res/values-bg/strings.xml | 65 ++ .../src/main/res/values-es/strings.xml | 4 + .../src/main/res/values-eu/strings.xml | 65 ++ .../src/main/res/values-fi/strings.xml | 65 ++ .../src/main/res/values-fr/strings.xml | 67 +- .../src/main/res/values-hu/strings.xml | 65 ++ .../src/main/res/values-it/strings.xml | 65 ++ .../src/main/res/values-nl/strings.xml | 65 ++ .../src/main/res/values-nn/strings.xml | 143 +++- .../src/main/res/values-pl/strings.xml | 66 ++ .../src/main/res/values-ru/strings.xml | 69 ++ .../src/main/res/values-sq/strings.xml | 62 ++ .../src/main/res/values-vls/strings.xml | 153 +++++ .../src/main/res/values-zh-rTW/strings.xml | 65 ++ .../src/main/res/values/strings.xml | 6 +- tools/import_from_riot.sh | 36 +- vector/src/main/res/values-ar/strings.xml | 7 + vector/src/main/res/values-bg/strings.xml | 121 +++- vector/src/main/res/values-bn-rIN/strings.xml | 403 +++++++++++ vector/src/main/res/values-de/strings.xml | 4 +- vector/src/main/res/values-eo/strings.xml | 5 + vector/src/main/res/values-es/strings.xml | 352 +++++++++- vector/src/main/res/values-eu/strings.xml | 62 ++ vector/src/main/res/values-fa/strings.xml | 72 +- vector/src/main/res/values-fi/strings.xml | 271 ++++---- vector/src/main/res/values-fr/strings.xml | 62 ++ vector/src/main/res/values-hu/strings.xml | 62 ++ vector/src/main/res/values-it/strings.xml | 62 ++ vector/src/main/res/values-ja/strings.xml | 113 +-- vector/src/main/res/values-nl/strings.xml | 146 ++-- vector/src/main/res/values-nn/strings.xml | 644 ++++++++++-------- vector/src/main/res/values-pl/strings.xml | 76 ++- vector/src/main/res/values-ru/strings.xml | 136 +++- vector/src/main/res/values-sk/strings.xml | 2 +- vector/src/main/res/values-sq/strings.xml | 61 ++ vector/src/main/res/values-vls/strings.xml | 40 ++ vector/src/main/res/values-zh-rTW/strings.xml | 62 ++ vector/src/main/res/values/strings.xml | 72 +- vector/src/main/res/values/strings_riotX.xml | 50 -- 39 files changed, 3185 insertions(+), 761 deletions(-) create mode 100644 matrix-sdk-android/src/main/res/values-vls/strings.xml create mode 100644 vector/src/main/res/values-vls/strings.xml diff --git a/matrix-sdk-android/src/main/res/values-bg/strings.xml b/matrix-sdk-android/src/main/res/values-bg/strings.xml index 897be232..106febb9 100644 --- a/matrix-sdk-android/src/main/res/values-bg/strings.xml +++ b/matrix-sdk-android/src/main/res/values-bg/strings.xml @@ -85,4 +85,69 @@ Съобщение премахнато от %1$s Премахнато съобщение [причина: %1$s] Съобщение премахнато от %1$s [причина: %2$s] + Куче + Котка + Лъв + Кон + Еднорог + Прасе + Слон + Заек + Панда + Петел + Пингвин + Костенурка + Риба + Октопод + Пеперуда + Цвете + Дърво + Кактус + Гъба + Глобус + Луна + Облак + Огън + Банан + Ябълка + Ягода + Царевица + Пица + Торта + Сърце + Усмивка + Робот + Шапка + Очила + Гаечен ключ + Дядо Коледа + Палец нагоре + Чадър + Пясъчен часовник + Часовник + Подарък + Лампа + Книга + Молив + Кламер + Ножици + Катинар + Ключ + Чук + Телефон + Знаме + Влак + Колело + Самолет + Ракета + Трофей + Топка + Китара + Тромпет + Звънец + Котва + Слушалки + Папка + Карфица + diff --git a/matrix-sdk-android/src/main/res/values-es/strings.xml b/matrix-sdk-android/src/main/res/values-es/strings.xml index 232ae0d4..0acb2bfc 100644 --- a/matrix-sdk-android/src/main/res/values-es/strings.xml +++ b/matrix-sdk-android/src/main/res/values-es/strings.xml @@ -92,4 +92,8 @@ + Mensaje eliminado + Mensaje eliminado por %1$s + Mensaje eliminado [motivo: %1$s] + Mensaje eliminado por %1$s [motivo: %2$s] diff --git a/matrix-sdk-android/src/main/res/values-eu/strings.xml b/matrix-sdk-android/src/main/res/values-eu/strings.xml index 4dfab9f4..00bcf69e 100644 --- a/matrix-sdk-android/src/main/res/values-eu/strings.xml +++ b/matrix-sdk-android/src/main/res/values-eu/strings.xml @@ -85,4 +85,69 @@ %1$s erabiltzaileak mezua kendu du Mezua kendu da [arrazoia: %1$s] %1$s erabiltzaileak mezua kendu du [arrazoia: %2$s] + Txakurra + Katua + Lehoia + Zaldia + Unikornioa + Zerria + Elefantea + Untxia + Panda + Oilarra + Pinguinoa + Dortoka + Arraina + Olagarroa + Tximeleta + Lorea + Zuhaitza + Kaktusa + Perretxikoa + Lurra + Ilargia + Hodeia + Sua + Banana + Sagarra + Marrubia + Artoa + Pizza + Pastela + Bihotza + Irrifartxoa + Robota + Txanoa + Betaurrekoak + Giltza ingelesa + Santa + Ederto + Aterkia + Harea-erlojua + Erlojua + Oparia + Bonbilla + Liburua + Arkatza + Klipa + Artaziak + Giltzarrapoa + Giltza + Mailua + Telefonoa + Bandera + Trena + Bizikleta + Hegazkina + Kohetea + Saria + Baloia + Gitarra + Tronpeta + Kanpaia + Aingura + Aurikularrak + Karpeta + Txintxeta + diff --git a/matrix-sdk-android/src/main/res/values-fi/strings.xml b/matrix-sdk-android/src/main/res/values-fi/strings.xml index d76293b2..a405c14c 100644 --- a/matrix-sdk-android/src/main/res/values-fi/strings.xml +++ b/matrix-sdk-android/src/main/res/values-fi/strings.xml @@ -86,4 +86,69 @@ %1$s poisti viestin Viesti poistettu [syy: %1$s] %1$s poisti viestin [syy: %2$s] + Koira + Kissa + Leijona + Hevonen + Yksisarvinen + Sika + Norsu + Kani + Panda + Kukko + Pingviini + Kilpikonna + Kala + Tursas + Perhonen + Kukka + Puu + Kaktus + Sieni + Maapallo + Kuu + Pilvi + Tuli + Banaani + Omena + Mansikka + Maissi + Pizza + Kakku + Sydän + Hymiö + Robotti + Hattu + Silmälasit + Jakoavain + Joulupukki + Peukut ylös + Sateenvarjo + Tiimalasi + Kello + Lahja + Hehkulamppu + Kirja + Lyijykynä + Klemmari + Sakset + Lukko + Avain + Vasara + Puhelin + Lippu + Juna + Polkupyörä + Lentokone + Raketti + Palkinto + Pallo + Kitara + Trumpetti + Soittokello + Ankkuri + Kuulokkeet + Kansio + Nuppineula + diff --git a/matrix-sdk-android/src/main/res/values-fr/strings.xml b/matrix-sdk-android/src/main/res/values-fr/strings.xml index c54e1b7c..542f0174 100644 --- a/matrix-sdk-android/src/main/res/values-fr/strings.xml +++ b/matrix-sdk-android/src/main/res/values-fr/strings.xml @@ -15,7 +15,7 @@ %1$s a banni %2$s %1$s a annulé l’invitation de %2$s %1$s a changé d’avatar - %1$s a réglé son nom affiché en %2$s + %1$s a modifié son nom affiché en %2$s %1$s a modifié son nom affiché %2$s en %3$s %1$s a supprimé son nom affiché (%2$s) %1$s a changé le sujet en : %2$s @@ -85,4 +85,69 @@ Message supprimé par %1$s Message supprimé [motif : %1$s] Message supprimé par %1$s [motif : %2$s] + Chien + Chat + Lion + Cheval + Licorne + Cochon + Éléphant + Lapin + Panda + Coq + Manchot + Tortue + Poisson + Pieuvre + Papillon + Fleur + Arbre + Cactus + Champignon + Terre + Lune + Nuage + Feu + Banane + Pomme + Fraise + Maïs + Pizza + Gâteau + Cœur + Smiley + Robot + Chapeau + Lunettes + Clé plate + Père Noël + Pouce levé + Parapluie + Sablier + Horloge + Cadeau + Ampoule + Livre + Crayon + Trombone + Ciseaux + Cadenas + Clé + Marteau + Téléphone + Drapeau + Train + Vélo + Avion + Fusée + Trophée + Balle + Guitare + Trompette + Cloche + Ancre + Écouteurs + Dossier + Épingle + diff --git a/matrix-sdk-android/src/main/res/values-hu/strings.xml b/matrix-sdk-android/src/main/res/values-hu/strings.xml index 5e4881be..cf257cab 100644 --- a/matrix-sdk-android/src/main/res/values-hu/strings.xml +++ b/matrix-sdk-android/src/main/res/values-hu/strings.xml @@ -84,4 +84,69 @@ Üzenetet eltávolította: %1$s Üzenet eltávolítva [ok: %1$s] Üzenetet eltávolította: %1$s [ok: %2$s] + Kutya + Macska + Oroszlán + + Egyszarvú + Malac + Elefánt + Nyúl + Panda + Kakas + Pingvin + Teknős + Hal + Polip + Pillangó + Virág + Fa + Kaktusz + Gomba + Föld + Hold + Felhő + Tűz + Banán + Alma + Eper + Kukorica + Pizza + Süti + Szív + Smiley + Robot + Kalap + Szemüveg + Csavarkulcs + Télapó + Hüvelykujj fel + Esernyő + Homokóra + Óra + Ajándék + Égő + Könyv + Ceruza + Gémkapocs + Olló + Zár + Kulcs + Kalapács + Telefon + Zászló + Vonat + Kerékpár + Repülő + Rakéta + Trófea + Labda + Gitár + Trombita + Harang + Vasmacska + Fejhallgató + Mappa + + diff --git a/matrix-sdk-android/src/main/res/values-it/strings.xml b/matrix-sdk-android/src/main/res/values-it/strings.xml index bfa3d559..7adc3638 100644 --- a/matrix-sdk-android/src/main/res/values-it/strings.xml +++ b/matrix-sdk-android/src/main/res/values-it/strings.xml @@ -85,4 +85,69 @@ Messaggio rimosso da %1$s Messaggio rimosso [motivo: %1$s] Messaggio rimosso da %1$s [motivo: %2$s] + Cane + Gatto + Leone + Cavallo + Unicorno + Maiale + Elefante + Coniglio + Panda + Gallo + Pinguino + Tartaruga + Pesce + Piovra + Farfalla + Fiore + Albero + Cactus + Fungo + Globo + Luna + Nuvola + Fuoco + Banana + Mela + Fragola + Mais + Pizza + Torta + Cuore + Sorriso + Robot + Cappello + Occhiali + Chiave inglese + Babbo Natale + Pollice in su + Ombrello + Clessidra + Orologio + Regalo + Lampadina + Libro + Matita + Graffetta + Forbici + Lucchetto + Chiave + Martello + Telefono + Bandiera + Treno + Bicicletta + Aeroplano + Razzo + Trofeo + Palla + Chitarra + Tromba + Campana + Ancora + Cuffie + Cartella + Spillo + diff --git a/matrix-sdk-android/src/main/res/values-nl/strings.xml b/matrix-sdk-android/src/main/res/values-nl/strings.xml index cd04670c..c20124d1 100644 --- a/matrix-sdk-android/src/main/res/values-nl/strings.xml +++ b/matrix-sdk-android/src/main/res/values-nl/strings.xml @@ -94,4 +94,69 @@ Bericht verwijderd door %1$s Bericht verwijderd [reden: %1$s] Bericht verwijderd door %1$s [reden: %2$s] + Hond + Kat + Leeuw + Paard + Eenhoorn + Varken + Olifant + Konijn + Panda + Haan + Pinguïn + Schildpad + Vis + Octopus + Vlinder + Bloem + Boom + Cactus + Paddenstoel + Aardbol + Maan + Wolk + Vuur + Banaan + Appel + Aardbei + Maïs + Pizza + Taart + Hart + Smiley + Robot + Hoed + Bril + Moersleutel + Kerstman + Duim omhoog + Paraplu + Zandloper + Klok + Cadeau + Gloeilamp + Boek + Potlood + Paperclip + Schaar + Hangslot + Sleutel + Hamer + Telefoon + Vlag + Trein + Fiets + Vliegtuig + Raket + Trofee + Bal + Gitaar + Trompet + Bel + Anker + Koptelefoon + Map + Speld + diff --git a/matrix-sdk-android/src/main/res/values-nn/strings.xml b/matrix-sdk-android/src/main/res/values-nn/strings.xml index ea13ece8..a8490200 100644 --- a/matrix-sdk-android/src/main/res/values-nn/strings.xml +++ b/matrix-sdk-android/src/main/res/values-nn/strings.xml @@ -4,73 +4,73 @@ %1$s: %2$s - %1$s sende eit bilete. + %1$s sende eit bilæte. %1$s sende eit klistremerke. - %s si innbyding + %s si innbjoding %1$s baud %2$s inn %1$s baud deg inn %1$s kom inn %1$s fór ut - %1$s sa nei til innbydinga + %1$s sa nei til innbjodingi %1$s sparka %2$s %1$s slapp %2$s inn att %1$s stengde %2$s ute - %1$s tok attende %2$s si innbyding - %1$s endra avataren sin + %1$s tok attende %2$s si innbjoding + %1$s byta avataren sin %1$s sette visingsnamnet sitt som %2$s - %1$s endra visingsnamnet sitt frå %2$s til %3$s - %1$s fjerna visingsnamnet sitt (%2$s) - %1$s endra emnet til: %2$s - %1$s endra romnamnet til: %2$s - %s starta ei videosamtale. - %s starta ei røystsamtale. - %s tok røret. - %s la på røret. - %1$s gjorde den framtidige romhistoria synleg for %2$s + %1$s byta visingsnamnet sitt frå %2$s til %3$s + %1$s tok burt visingsnamnet sitt (%2$s) + %1$s gjorde emnet til: %2$s + %1$s gjorde romnamnet til: %2$s + %s starta ei videosamtala. + %s starta ei røystsamtala. + %s tok røyret. + %s la på røyret. + %1$s gjorde den framtidige romsoga synleg for %2$s alle rommedlemer, frå då dei vart bodne inn. alle rommedlemer, frå då dei kom inn. alle rommedlemer. - kven som helst. - ukjend (%s). - %1$s skrudde ende-til-ende-enkryptering på (%2$s) + kven som heldst. + uvisst (%s). + %1$s skrudde ende-til-ende-kryptering på (%2$s) - %1$s bad om ei VoIP-gruppesamtale - VoIP-gruppesamtala er starta - VoIP-gruppesamtala er ferdig + %1$s bad um ei VoIP-gruppasamtala + VoIP-gruppasamtala er starta + VoIP-gruppasamtala er ferdug - (avataren vart endra òg) - %1$s fjerna romnamnet - %1$s fjerna romemnet - %1$s oppdaterte profilbiletet sitt %2$s - %1$s baud %2$s inn i rommet - %1$s sa ja til innbydinga til %2$s + (avataren vart au byta) + %1$s tok burt romnamnet + %1$s tok burt romemnet + %1$s gjorde um på skildringi si %2$s + %1$s baud %2$s inn i romet + %1$s sa ja til innbjodingi til %2$s - ** Klarte ikkje dekryptere: %s ** - Avsendareininga har ikkje sendt oss nyklane for denne meldinga. + ** Fekk ikkje til å dekryptera: %s ** + Avsendareiningi hev ikkje sendt oss nyklane fyr denna meldingi. Som svar til - Kunne ikkje gjera om - Klarte ikkje å senda meldinga + Kunde ikkje gjera um + Fekk ikkje å senda meldingi - Fekk ikkje til å lasta biletet opp + Fekk ikkje til å lasta biletet upp - Noko gjekk gale med nettverket + Noko gjekk gale med netverket Noko gjekk gale med Matrix - Det er førebels ikkje mogeleg å fara inn att i eit tomt rom. + Det lèt seg fyrebils ikkje gjera å fara inn att i eit tomt rom. Epostadresse Telefonnummer - sende eit bilete. + sende eit bilæte. sende ein video. - sende ein ljodfil. + sende ei ljodfil. sende ei fil. - Byd inn frå %s - Rominnbyding + Innbjoding frå %s + Rominnbjoding %1$s og %2$s @@ -80,4 +80,73 @@ Tomt rom + Ei melding vart stroki + %1$s strauk meldingi + Meldingi vart stroki [av di: %1$s] + %1$s strauk meldingi [av di: %2$s] + Hund + Katt + Løva + Hest + Einhyrning + Gris + Elefant + Hare + Panda + Hane + Pingvin + Skjoldpadda + Fisk + Blekksprut + Fivrelde + Blome + Tre + Kaktus + Sopp + Klote + Måne + Sky + Eld + Banan + Eple + Jordbær + Mais + Pizza + Kaka + Hjarta + Smilandlit + Robot + Hatt + Brillor + Skiftenykel + Nissen + Tumalen Upp + Regnskjold + Timeglas + Ur + Gåva + Ljospera + Bok + Blyant + Binders + Saks + Lås + Nykel + Hamar + Telefon + Flagg + Tog + Sykkel + Flyg + Rakett + Pokal + Ball + Gitar + Trompet + Klokka + Ankar + Hodetelefon + Mappa + Nål + diff --git a/matrix-sdk-android/src/main/res/values-pl/strings.xml b/matrix-sdk-android/src/main/res/values-pl/strings.xml index 1bb8aef3..4a807028 100644 --- a/matrix-sdk-android/src/main/res/values-pl/strings.xml +++ b/matrix-sdk-android/src/main/res/values-pl/strings.xml @@ -81,4 +81,70 @@ wyślij plik audio. wyślij plik. + Wiadomość usunięta + Wiadomość usunięta przez %1$s + Wiadomość usunięta [powód: %1$s] + Wiadomość usunięta przez %1$s [powód: %2$s] + Pies + Kot + Lew + Koń + Jednorożec + Świnia + Słoń + Królik + Panda + Kogut + Pingwin + Żółw + Ryba + Ośmiornica + Motyl + Kwiat + Drzewo + Kaktus + Grzyb + Księżyc + Chmura + Ogień + Banan + Jabłko + Truskawka + Kukurydza + Pizza + Ciasto + Serce + Robot + Kapelusz + Okulary + Parasol + Klepsydra + Zegar + Żarówka + Książka + Ołówek + Spinacz + Nożyczki + Klucz + Telefon + Flaga + Pociąg + Rower + Samolot + Rakieta + Trofeum + Gitara + Trąbka + Dzwonek + Kotwica + Słuchawki + Folder + Pinezka + + Ziemia + Uśmiech + Klucz francuski + Mikołaj + Prezent + Młotek diff --git a/matrix-sdk-android/src/main/res/values-ru/strings.xml b/matrix-sdk-android/src/main/res/values-ru/strings.xml index 4799ecfd..63a45655 100644 --- a/matrix-sdk-android/src/main/res/values-ru/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ru/strings.xml @@ -94,4 +94,73 @@ + Сообщение удалено + %1$s удалил(а) сообщение + Сообщение удалено [причина: %1$s] + %1$s удалил(а) сообщение [причина: %2$s] + Собака + Кошка + Лев + Лошадь + Единорог + Поросёнок + Слон + Кролик + Панда + Петух + Пингвин + Черепаха + Рыба + Осьминог + Бабочка + Цветок + Дерево + Кактус + Гриб + Земля + Луна + Облако + Огонь + Банан + Яблоко + Клубника + Кукуруза + Пицца + Пирожное + Сердце + Смайлик + Робот + Шляпа + Очки + гаечный ключ + Санта + Большой палец вверх + Зонтик + Песочные часы + Часы + Подарок + Лампочка + Книга + Карандаш + Скрепка для бумаг + Ножницы + Замок + Ключ + Молоток + Телефон + Флаг + Поезд + Велосипед + Самолёт + Ракета + Трофей + Мяч + Гитара + Труба + Колокол + Якорь + Гарнитура + Папка + Булавка + diff --git a/matrix-sdk-android/src/main/res/values-sq/strings.xml b/matrix-sdk-android/src/main/res/values-sq/strings.xml index 0203f3fa..7c182df3 100644 --- a/matrix-sdk-android/src/main/res/values-sq/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sq/strings.xml @@ -84,4 +84,66 @@ Mesazhi u hoq nga %1$s Mesazh i hequr [arsye: %1$s] Mesazh i hequr nga %1$s [arsye: %2$s] + Qen + Mace + Luan + Kalë + Njëbrirësh + Derr + Elefant + Lepur + Panda + Këndes + Pinguin + Breshkë + Peshk + Oktapod + Flutur + Lule + Pemë + Kaktus + Kërpudhë + Rruzull + Hëna + Re + Zjarr + Banane + Mollë + Luleshtrydhe + Misër + Picë + Tortë + Zemër + Emotikon + Robot + Kapë + Syze + Çelës + Babagjyshi i Vitit të Ri + Ombrellë + Klepsidër + Sahat + Dhuratë + Llambë + Libër + Laps + Kapëse + Gërshërë + Dry + Kyç + Çekiç + Telefon + Flamur + Tren + Biçikletë + Aeroplan + Raketë + Trofe + Top + Kitarë + Trombë + Kambanë + Spirancë + Kufje + Dosje diff --git a/matrix-sdk-android/src/main/res/values-vls/strings.xml b/matrix-sdk-android/src/main/res/values-vls/strings.xml new file mode 100644 index 00000000..61da5173 --- /dev/null +++ b/matrix-sdk-android/src/main/res/values-vls/strings.xml @@ -0,0 +1,153 @@ + + + %1$s: %2$s + %1$s èt e fotootje gesteurd. + %1$s èt e sticker gesteurd. + + Uutnodigienge van %s + %1$s èt %2$s uutgenodigd + %1$s èt joun uitgenodigd + %1$s neemt nu deel an ’t gesprek + %1$s èt ’t gesprek verloatn + %1$s èt d’uitnodigienge geweigerd + %1$s èt %2$s uut ’t gesprek verwyderd + %1$s èt %2$s ountbann + %1$s èt %2$s verbann + %1$s èt d’uutnodigienge van %2$s ingetrokkn + %1$s èt zyn/heur avatar angepast + %1$s èt zyn/heur noame angepast noa %2$s + %1$s èt zyn/heur noame angepast van %2$s noa %3$s + %1$s èt zyn/heur noame verwyderd (%2$s) + %1$s èt ’t ounderwerp veranderd noa: %2$s + %1$s èt de gespreksnoame veranderd noa: %2$s + %s èt e video-iproep gemakt. + %s èt e sproakiproep gemakt. + %s èt den iproep beantwoord. + %s èt ipgehangn. + %1$s èt de toekomstige gespreksgeschiedenisse zichtboar gemakt vo %2$s + alle deelnemers an ’t gesprek, vanaf ’t punt dan ze zyn uutgenodigd. + alle deelnemers an ’t gesprek, vanaf ’t punt dan ze zyn toegetreedn. + alle deelnemers an ’t gesprek. + iedereen. + ounbekend (%s). + %1$s èt eind-tout-eind-versleutelienge angezet (%2$s) + + %1$s èt e VoIP-vergoaderienge angevroagd + VoIP-vergoaderienge begunn + VoIP-vergoaderienge gestopt + + (avatar es ook veranderd) + %1$s èt de gespreksnoame verwyderd + %1$s èt ’t gespreksounderwerp verwyderd + Bericht verwyderd + Bericht verwyderd deur %1$s + Bericht verwyderd [reden: %1$s] + Bericht verwyderd deur %1$s [reden: %2$s] + %1$s èt zyn/heur profiel %2$s bygewerkt + %1$s èt een uutnodigienge noa %2$s gesteurd vo ’t gesprek toe te treden + %1$s èt d’uutnodigienge vo %2$s anveird + + ** Kun nie ountsleuteln: %s ** + ’t Toestel van den afzender èt geen sleutels vo dit bericht gesteurd. + + Als antwoord ip + + Kosteg nie verwyderd wordn + Kosteg ’t bericht nie verzendn + + Iploadn van ’t fotootje es mislukt + + Netwerkfout + Matrix-fout + + ’t Es vo de moment nie meuglik van e leeg gesprek were toe te treedn. + + Versleuteld bericht + + E-mailadresse + Telefongnumero + + èt e fotootje gesteurd. + èt e filmtje gesteurd. + èt e geluudsfragment gesteurd. + èt e bestand gesteurd. + + Uutnodigienge van %s + Gespreksuutnodigienge + + %1$s en %2$s + + + %1$s en 1 andere + %1$s en %2$d anderen + + + Leeg gesprek + + + Hound + Katte + Leeuw + Peird + Eenhoorn + Zwyn + Olifant + Keun + Panda + Hoane + Pinguin + Schildpadde + Vis + Octopus + Beutervlieg + Bloem + Boom + Cactus + Paddestoel + Eirdbol + Moane + Wolk + Vier + Banoan + Appel + Freize + Mais + Pizza + Toarte + Erte + Smiley + Robot + Hoed + Bril + Moersleutel + Kestman + Duum omhooge + Paraplu + Zandloper + Klok + Cadeau + Gloeilampe + Boek + Potlood + Paperclip + Schoar + Hangslot + Sleutel + Oamer + Telefong + Vlagge + Tring + Veloo + Vlieger + Rakette + Trofee + Bolle + Gitoar + Trompette + Belle + Anker + Koptelefong + Mappe + Pinne + + diff --git a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml index 5b3d5a7e..22cf1c0f 100644 --- a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml +++ b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml @@ -83,4 +83,69 @@ 訊息已被 %1$s 移除 訊息已移除 [理由:%1$s] 訊息已被 %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 1414c723..be64a659 100644 --- a/matrix-sdk-android/src/main/res/values/strings.xml +++ b/matrix-sdk-android/src/main/res/values/strings.xml @@ -168,7 +168,7 @@ Glasses - Wrench + Spanner Santa @@ -206,7 +206,7 @@ Bicycle - Airplane + Aeroplane Rocket @@ -222,7 +222,7 @@ Anchor - Headphone + Headphones Folder diff --git a/tools/import_from_riot.sh b/tools/import_from_riot.sh index bfe22efa..194d9c65 100755 --- a/tools/import_from_riot.sh +++ b/tools/import_from_riot.sh @@ -57,6 +57,7 @@ cp ../matrix-android-sdk/matrix-sdk/src/main/res/values-sq/strings.xml ./mat cp ../matrix-android-sdk/matrix-sdk/src/main/res/values-te/strings.xml ./matrix-sdk-android/src/main/res/values-te/strings.xml cp ../matrix-android-sdk/matrix-sdk/src/main/res/values-th/strings.xml ./matrix-sdk-android/src/main/res/values-th/strings.xml cp ../matrix-android-sdk/matrix-sdk/src/main/res/values-uk/strings.xml ./matrix-sdk-android/src/main/res/values-uk/strings.xml +cp ../matrix-android-sdk/matrix-sdk/src/main/res/values-vls/strings.xml ./matrix-sdk-android/src/main/res/values-vls/strings.xml cp ../matrix-android-sdk/matrix-sdk/src/main/res/values-zh-rCN/strings.xml ./matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml cp ../matrix-android-sdk/matrix-sdk/src/main/res/values-zh-rTW/strings.xml ./matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml @@ -103,42 +104,9 @@ cp ../riot-android/vector/src/main/res/values-th/strings.xml ./vector/src/ma cp ../riot-android/vector/src/main/res/values-tlh/strings.xml ./vector/src/main/res/values-tlh/strings.xml cp ../riot-android/vector/src/main/res/values-tr/strings.xml ./vector/src/main/res/values-tr/strings.xml cp ../riot-android/vector/src/main/res/values-uk/strings.xml ./vector/src/main/res/values-uk/strings.xml +cp ../riot-android/vector/src/main/res/values-vls/strings.xml ./vector/src/main/res/values-vls/strings.xml cp ../riot-android/vector/src/main/res/values-zh-rCN/strings.xml ./vector/src/main/res/values-zh-rCN/strings.xml cp ../riot-android/vector/src/main/res/values-zh-rTW/strings.xml ./vector/src/main/res/values-zh-rTW/strings.xml -echo -echo "Copy drawables to RiotX" - -cp ../riot-android/vector/src/main/res/drawable/* ./vector/src/main/res/drawable/ -cp ../riot-android/vector/src/main/res/drawable-hdpi/* ./vector/src/main/res/drawable-hdpi/ -cp ../riot-android/vector/src/main/res/drawable-mdpi/* ./vector/src/main/res/drawable-mdpi/ -cp ../riot-android/vector/src/main/res/drawable-xhdpi/* ./vector/src/main/res/drawable-xhdpi/ -cp ../riot-android/vector/src/main/res/drawable-xxhdpi/* ./vector/src/main/res/drawable-xxhdpi/ -cp ../riot-android/vector/src/main/res/drawable-xxxhdpi/* ./vector/src/main/res/drawable-xxxhdpi/ - -echo -echo "Copy icon to RiotX" - -cp ../riot-android/vector/src/main/res/mipmap-anydpi-v26/* ./vector/src/main/res/mipmap-anydpi-v26/ -cp ../riot-android/vector/src/main/res/mipmap-hdpi/* ./vector/src/main/res/mipmap-hdpi/ -cp ../riot-android/vector/src/main/res/mipmap-mdpi/* ./vector/src/main/res/mipmap-mdpi/ -cp ../riot-android/vector/src/main/res/mipmap-xhdpi/* ./vector/src/main/res/mipmap-xhdpi/ -cp ../riot-android/vector/src/main/res/mipmap-xxhdpi/* ./vector/src/main/res/mipmap-xxhdpi/ -cp ../riot-android/vector/src/main/res/mipmap-xxxhdpi/* ./vector/src/main/res/mipmap-xxxhdpi/ - - -echo -echo "Copy other elements to RiotX" - -cp ../riot-android/vector/src/main/res/anim/* ./vector/src/main/res/anim/ -cp ../riot-android/vector/src/main/res/color/* ./vector/src/main/res/color/ -cp ../riot-android/vector/src/main/res/menu/* ./vector/src/main/res/menu/ -cp ../riot-android/vector/src/main/res/menu/* ./vector/src/main/res/menu/ -cp ../riot-android/vector/src/main/res/values-v17/* ./vector/src/main/res/values-v17/ -cp ../riot-android/vector/src/main/res/values-v21/* ./vector/src/main/res/values-v21/ -cp ../riot-android/vector/src/main/res/values-w480dp/* ./vector/src/main/res/values-w480dp/ -cp ../riot-android/vector/src/main/res/values-w820dp/* ./vector/src/main/res/values-w820dp/ -cp ../riot-android/vector/src/main/res/raw/* ./vector/src/main/res/raw/ - echo echo "Success!" diff --git a/vector/src/main/res/values-ar/strings.xml b/vector/src/main/res/values-ar/strings.xml index b6ad46c4..a0013f34 100644 --- a/vector/src/main/res/values-ar/strings.xml +++ b/vector/src/main/res/values-ar/strings.xml @@ -1081,4 +1081,11 @@ الإصدار %s الإعدادات المتقدمة للإشعارات + توثق من الجهاز + + تأمين المفاتيح لم ينته، يرجى الانتظار + عند تسجيل الخروج الآن ستخسر مفاتيحك + تأمين المفاتيح ما زال جاريا. في حال خروجك الآن لن تتمكن لاحقا من قراءة الرسائل المشفرة + تأكد من تفعيل تأمين المفاتيح على كل أجهزتك كي لا تخسر رسائلك المشفرة + يتم تأمين المفاتيح diff --git a/vector/src/main/res/values-bg/strings.xml b/vector/src/main/res/values-bg/strings.xml index 85bceb4b..b813f007 100644 --- a/vector/src/main/res/values-bg/strings.xml +++ b/vector/src/main/res/values-bg/strings.xml @@ -90,12 +90,12 @@ По-късно Препрати Permalink - Прегледай източника + Виж източника Изтрий Преименувай Докладвай съдържанието Активен разговор - Следете за събития + Следене за събития Шумни известия Уведомления без звук @@ -106,7 +106,7 @@ Глас Видео Неуспешно започване на разговора. Моля, опитайте по-късно - Поради липсващи разрешения, някои функции може да липсват… + Поради липсващи разрешения, някои функции може да отсъстват… Трябва да имате разрешение за изпращане на покани, за да може да започнете групов разговор в тази стая Неуспешно започване на разговор Информация за устройство @@ -116,32 +116,32 @@ Покани Офлайн - Излез + Изход Действия - Изход - Гласов разговор - Видео разговор + Отписване + Гласово обаждане + Видео обаждане Глобално търсене - Маркирай всички като прочетени + Отбележи всички като прочетени Архив - Отговори + Бърз отговор Отвори Затвори Изключи Потвърждение - Внимание + Предупреждение Начало - Любими + Предпочитани Хора Стаи Общности Филтрирай стаи - Филтрирай любими + Филтрирай предпочитаните Филтрирай хора - Филтрирай стаи + Филтрирай имената на стаите Филтрирай общности Покани @@ -152,7 +152,7 @@ Директория с потребители Само потребители на Matrix Няма разговори - Не сте дали достъп на Riot до локалните Ви контакти + Не сте дали достъп на Riot до локалните ви контакти Няма резултати Стаи @@ -174,22 +174,22 @@ Съобщи за грешка Моля, опишете грешката. Какво направихте? Какво очаквахте да стане? Какво стана всъщност? Опишете своя проблем тук - За да се диагностицират проблемите, логовете от този клиент ще бъдат изпратени с този доклад за грешки. Доклада, заедно с логовете и скрийншота, няма да са видими публично. Ако предпочитате да изпратите само текста по-горе, моля, премахнете отметката: - Изглежда, че разклащате телефона, което ни кара да мислим, че не сте доволни от Riot. Искате ли да изпратите съобщение за грешка? + За да се диагностицират проблемите, логовете от този клиент ще бъдат изпратени с този доклад за грешки. Докладът, заедно с логовете и скрийншота, няма да са видими публично. Ако предпочитате да изпратите само текста по-горе, моля, премахнете отметката: + Изглежда, разклащате недоволно телефона. Искате ли да изпратите съобщение за грешка\? Приложението спря да работи последния път. Искате ли да отворите екрана за изпращане на грешки? Силно разклащане на телефона за изпращане на грешка - Съобщението за грешка беше успешно изпратено + Съобщението за грешка беше изпратено успешно Неуспешно изпращане на съобщението за грешка (%s) Прочетено - Присъедини се към стая + Влез в стая Потребителско име Създай акаунт - Вход - Изход + Вписване + Отписване URL на Home сървър - URL на сървър за самоличност + Адрес на сървър за самоличност Търсене Започни нов чат @@ -796,7 +796,7 @@ Игнорирай поканата - Внимание! + Предупреждение! Груповите разговори са в процес на разработка и не са надеждни. @@ -849,7 +849,7 @@ Конфиденциалност на известията Нормална - Изпращане на стикер + Изпрати стикер Изпрати стикер В момента нямате активирани пакети със стикери. @@ -1014,7 +1014,7 @@ %d+ Звънни въпреки това - Разреши + Приемам Моля прегледайте и приемете политиките на сървъра: @@ -1159,7 +1159,7 @@ За да сте сигурни, че няма да пропуснете нищо, просто оставете автоматичните обновления включени." Резервно копие на ключовете Използвай резервно копие на ключовете - Резервното копие на ключовете не е завършило. Моля почакайте… + Резервното копиране на ключовете не е завършило. Моля почакайте… Пропусни Готово @@ -1280,18 +1280,18 @@ Ако излезете сега, ще загубите шифрованите съобщения В момента се прави резервно копие на ключовете. Ако излезете сега, ще загубите достъп до шифрованите съобщения. - Добре е да се прави резервно копие на ключовете от всяко Ваше устройство, за да се предпазите от загуба на шифровани съобщения. + За да се избегне загубата на шифровани съобщения, на всяко от устройствата Ви трябва да е активирано резервното архивиране. Не ми трябват шифрованите съобщения Създаване на резервно копие на ключовете… Използвай резервно копие на ключовете Сигурни ли сте? - Направи резервно копие + Резервно копие Ако не направите резервно копие на ключовете преди да излезете, ще загубите достъп до шифрованите съобщения. Остани Прекрати - Сигурни ли сте, че искате да излезете? + Сигурни ли сте, че искате да се отпишете\? Режим икономия на данни игнорира уведомленията за пишещи хора, както и информация за онлайн статуса на потребители. Възстановяване на шифровани съобщения @@ -1345,7 +1345,7 @@ Изчисляване на ключ за възстановяване… Изтегляне на ключове… Импортиране на ключове… - Игнорирай + Отхвърли URL адресът не е достъпен, моля проверете Устройството Ви използва остарял TLS протокол за сигурност, който е уязвим към атаки. За ваша безопасност няма да може да се свържете @@ -1390,4 +1390,67 @@ Извиняваме се, но конферентни разговори с Jitsi не се поддържат на стари устройства (устройства с Android OS под 5.0) + Удостоверяване на устройство + + Влез с единично вписване + неизвестен IP адрес + Ново устройство изисква криптиращите ключове. +\nИме на устройство: %1$s +\nЗа последно видяно: %2$s +\nАко не сте се вписвали с друго устройство, не обръщайте внимание на тази заявка. + Непроверено устройство изисква криптиращите ключове. +\nИме на устройство: %1$s +\nЗа последно видяно: %2$s +\nАко не сте се вписвали с друго устройство, не обръщайте внимание на тази заявка. + + Удостовери + Сподели + Искане за споделяне на ключ + Отхвърли + + Удостовери чрез сравняване на кратък текст. + За максимална защита, препоръчваме да направите това лично или да използвате друго доверено комуникационно средство. + Започни удостоверяване + Входящо искане за удостоверяване + Удостоверете това устройство, за да бъде отбелязано като надеждно. Доверените устройства на участниците ви дават допълнително спокойствие когато изпращате криптирани съобщения. + Потвърждаването на устройството ще го маркира като доверено и ще маркира Вашето като доверено при партньора. + + Потвърдете това устройство като се уверите че следните емоджита се повяват на екрана на партньора + Потвърдете това устройство като се уверите че следните числа се повяват на екрана на партньора + + Получихте входяща заявка за потвърждение. + Виж заявката + Изчакване на потвърждение от партньора… + + Потвърдено! + Успешно потвърдихте това устройство. + Защитените съобщения с този потребител са шифровани от край до край и не могат да бъдат прочетени от трети лица. + Разбрах + + Не се показва нищо\? Засега не всички клиенти поддържат интерактивно потвърждение. Използвайте стария метод за потвърждение. + Потвърди по стария метод. + + Потвърждение на ключа + Заявката отказана + Отсрещната страна отказа потвърждението. +\n%s + Потвърждението е отказано. +\nПричина: %s + + Интерактивно потвърждение на устройство + Заявка за потвърждение + %s иска да потвърди устройството Ви + + Потребителят отказа потвърждението + Времето за потвърждение изтече + Устройството не знае за тази транзакция + Устройството не може да се съгласи на уговорка за ключ, хеширане, MAC, или SAS метод + Полученият хеш не съвпада + SAS не съвпада + Устройството получи неочаквано съобщение + Беше получено невалидно съобщение + Несъответствие в ключовете + Несъответствие в потребителя + Неизвестна грешка + diff --git a/vector/src/main/res/values-bn-rIN/strings.xml b/vector/src/main/res/values-bn-rIN/strings.xml index ad1840c2..ab4c223f 100644 --- a/vector/src/main/res/values-bn-rIN/strings.xml +++ b/vector/src/main/res/values-bn-rIN/strings.xml @@ -703,4 +703,407 @@ একটি নতুন সুরক্ষিত বার্তা কুঞ্জি ব্যাকআপ সনাক্ত করা হয়েছে। \n \nআপনি যদি নতুন পুনরুদ্ধারের পদ্ধতি সেট না করে থাকেন তবে একজন আক্রমণকারী আপনার অ্যাকাউন্ট অ্যাক্সেস করার চেষ্টা করছেন। আপনার অ্যাকাউন্ট পাসওয়ার্ড পরিবর্তন করুন এবং সেটিংসে অবিলম্বে একটি নতুন পুনরুদ্ধার পদ্ধতি সেট করুন। + ডিভাইস যাচাই করুন + + অ্যাপগুলি ব্যাকগ্রাউন্ডে হোম সার্ভারের সাথে সংযোগ করার প্রয়োজন করার প্রয়োজন নেই , এটি ব্যাটারির ব্যবহারকে কমাতে পারে + • বিজ্ঞপ্তি Firebase ক্লাউড মেসেজিং মাধ্যমে পাঠানো হয় + • বিজ্ঞপ্তিগুলি তে শুধুমাত্র মেটাডেটা থাকে + • বিজ্ঞপ্তিটির বার্তা সামগ্রী ম্যাট্রিক্স হোমসার্ভার থেকে নিরাপদে সরাসরি অবস্থিত হয় + • বিজ্ঞপ্তিগুলি তে মেটা এবং বার্তা ডেটা থাকে + • বিজ্ঞপ্তিগুলি বার্তা সামগ্রী দেখাবে না + + বিজ্ঞপ্তি শব্দ + এই অ্যাকাউন্টের জন্য বিজ্ঞপ্তি সক্রিয় করুন + এই ডিভাইসের জন্য বিজ্ঞপ্তি সক্রিয় করুন + স্ক্রিন টি ৩ সেকেন্ডের জন্য চালু করুন + হাল্লা বিজ্ঞপ্তিগুলি কনফিগার করুন + কল বিজ্ঞপ্তিগুলি কনফিগার করুন + নীরব বিজ্ঞপ্তিগুলি কনফিগার করুন + "LED\'র রং, কম্পন, শব্দ নির্বাচন করুন…" + + + আমার প্রদর্শন নাম ধারণকারী বার্তা + আমার ব্যবহারকারী নাম ধারণকারী বার্তা + এক থেকে এক চ্যাট বার্তা + গ্রুপ চ্যাটে বার্তা + যখন আমি একটি রুম আমন্ত্রিত + কল এর আমন্ত্রণগুলি + বোট দ্বারা পাঠানো বার্তাগুলি + + পটভূমি সিঙ্ক্রোনাইজেশন + বুট করার সময় শুরু + ব্যাকগ্রাউন্ড সিঙ্ক সক্ষম করুন + সিঙ্ক অনুরোধ সময়সীমার + প্রতিটি অনুরোধের মধ্যে বিলম্ব + সেকেন্ড + সেকেন্ড + + সংস্করণ + olm সংস্করণ + শর্তাবলী + তৃতীয় পক্ষের নোটিশ + কপিরাইট + গোপনীয়তা নীতি + মিডিয়া রাখুন + ক্যাশে পরিষ্কার করুন + মিডিয়া ক্যাশে পরিষ্কার করুন + + বিজ্ঞপ্তিগুলি + উপেক্ষিত ব্যবহারকারীদের + অন্যান্য + উন্নত + ক্রিপ্টোগ্রাফি + ক্র্রিপ্টোগ্রাফি কুঞ্জি ব্যবস্থাপনা + বিজ্ঞপ্তি লক্ষ্যমাত্রা + স্থানীয় যোগাযোগগুলি + পরিচিতিগুলির অনুমতি + ফোনবুকের দেশ + হোম প্রদর্শন + মিস বিজ্ঞপ্তি সঙ্গে পিন রুমগুলি + অপঠিত বার্তা সঙ্গে পিন কক্ষগুলি + যন্ত্রগুলি + অন্যান্য ব্যবহারকারীদের কে আপনি টাইপ করছেন সেটা জানান। + মার্কডাউন বিন্যাস + প্রেরিত হওয়ার আগে মার্কডাউন সিনট্যাক্স ব্যবহার করে বার্তাগুলি ফরম্যাট করুন। এটি ইটালিক পাঠ্য প্রদর্শনের জন্য তারকাচিহ্নগুলি ব্যবহার করার মতো উন্নত ফর্ম্যাটিংয়ের জন্য অনুমতি দেয়। + সব বার্তা জন্য টাইমস্ট্যাম্প প্রদর্শন করুন + ১২-ঘন্টা ফরম্যাটে টাইমস্ট্যাম্প দেখান + পাঠানো প্রাপ্তি দেখান + একটি বিস্তারিত তালিকা জন্য পঠন প্রাপ্তি ক্লিক করুন। + যোগ এবং ছাড়া তথ্য দেখান + আমন্ত্রণ, kicks, এবং নিষেধাজ্ঞা অনিবন্ধিত হয়। + অ্যাকাউন্ট ইভেন্ট দেখান + অবতার এবং প্রদর্শন নাম পরিবর্তন অন্তর্ভুক্ত। + একটি ব্যবহারকারী উল্লেখ এর সময় কম্পন করুন + এন্টার বোতাম টিপে বার্তা পাঠান + নরম কীবোর্ডের প্রবেশ বোতামটি লাইন বিরতি যোগ করার পরিবর্তে বার্তা পাঠাবে + + একাউন্ট নিষ্ক্রিয় + আমার একাউন্ট নিষ্ক্রিয় করুন + + বিজ্ঞপ্তি\'র গোপনীয়তা + সুরক্ষিতভাবে এবং ব্যক্তিগতভাবে আপনার বিজ্ঞপ্তি পরিচালনা করতে Riot পটভূমিতে চালাতে পারে। এই ব্যাটারি ব্যবহার প্রভাবিত হতে পারে। + অনুমতি প্রদান করুন + অন্য বিকল্প চয়ন করুন + + পটভূমি সংযোগ + নির্ভরযোগ্য বিজ্ঞপ্তি পেতে Riot কম প্রভাব ব্যাকগ্রাউন্ড সংযোগ রাখা প্রয়োজন। +\nপরবর্তী স্ক্রিনে আপনাকে দাঙ্গাটি সর্বদা ব্যাকগ্রাউন্ডে চালানোর অনুমতি দেওয়া হবে, দয়া করে স্বীকার করুন। + অনুমতি প্রদান করুন + + বৈশ্লেষিক ন্যায় + বিশ্লেষণ তথ্য পাঠান + Riot আমাদের অ্যাপ্লিকেশন উন্নত করার অনুমতি দেওয়ার জন্য বেনামী বিশ্লেষণ সংগ্রহ করে। + আমাদের Riot উন্নত করতে সাহায্য করার জন্য বিশ্লেষণ সক্রিয় করুন। + হ্যাঁ, আমি সাহায্য করতে চাই! + + ডেটা সংরক্ষণ মোড + ডেটা সংরক্ষণ মোড একটি নির্দিষ্ট ফিল্টার প্রয়োগ করে যাতে উপস্থিতি আপডেট এবং টাইপিং বিজ্ঞপ্তি ফিল্টার করা হয়। + + যন্ত্র বিবরণ + আইডি + নাম + যন্ত্রের নাম + শেষ দেখা + %1$s @ %2$s + এই অপারেশন অতিরিক্ত প্রমাণীকরণ প্রয়োজন। +\nচালিয়ে যেতে, আপনার পাসওয়ার্ড লিখুন। + প্রমাণীকরণ + পাসওয়ার্ড: + জমা দিন + + লগ ইন করুন + হোম সার্ভার + পরিচয় সার্ভার + + ব্যবহারকারী ইন্টারফেস + যাচাই মুলতুবি + আপনার ইমেইল চেক করুন এবং লিঙ্কে ক্লিক করুন। একবার সম্পন্ন হলে, অবিরত ক্লিক করুন। + ইমেইল ঠিকানা যাচাই করতে অক্ষম। আপনার ইমেইল চেক করুন এবং লিঙ্কে ক্লিক করুন। একবার সম্পন্ন হলে, অবিরত ক্লিক করুন। + এই ইমেইলটা ইতোমধ্যে ব্যবহৃত হচ্ছে। + এই ইমেইল ঠিকানা পাওয়া যায় নি। + এই ফোন নম্বর ইতিমধ্যে ব্যবহার করা আছে। + আপনার ইমেল ঠিকানা যাচাই করার সময় একটি ত্রুটি ঘটেছে। + + পাসওয়ার্ড + পাসওয়ার্ড পরিবর্তন করুন + বর্তমান পাসওয়ার্ড + নতুন পাসওয়ার্ড + নিশ্চিত কর নতুন পাসওয়ার্ড + পাসওয়ার্ড আপডেট করুন + পাসওয়ার্ড আপডেট করতে ব্যর্থ হয়েছে + পাসওয়ার্ড বৈধ নয় + আপনার পাসওয়ার্ড আপডেট করা হয়েছে + %s থেকে সব বার্তা দেখতে চান\? +\n +\nমনে রাখবেন যে এই পদক্ষেপটি অ্যাপ্লিকেশনটি পুনরায় চালু করবে এবং এটি কিছু সময় নিতে পারে। + পাসওয়ার্ড মিলছে না + + আপনি এই বিজ্ঞপ্তি লক্ষ্য অপসারণ করতে চান আপনি কি নিশ্চিত\? + + আপনি কি %1$s %2$s সরাতে নিশ্চিত\? + + দেশ বেঁচে নিন + + দেশ + একটি দেশ নির্বাচন করুন + ফোন নম্বর + নির্বাচিত দেশের জন্য অবৈধ ফোন নম্বর + ফোন যাচাইকরণ + আমরা একটি অ্যাক্টিভেশন কোড দিয়ে একটি এসএমএস পাঠিয়েছি। নীচের এই কোড লিখুন দয়া করে। + অ্যাক্টিভেশন কোড প্রবেশ করান + আপনার ফোন নম্বর যাচাই করার সময় ত্রুটি হয়েছে + কোড + আপনার ফোন নম্বর যাচাই করার সময় একটি ত্রুটি ঘটেছে। + "অতিরিক্ত তথ্য: %s" + + মিডিয়া + ডিফল্ট কম্প্রেশন + চয়ন + ডিফল্ট মিডিয়া উৎস + চয়ন + শাটার শব্দ চালান + + ফ্লেয়ার + আপনি বর্তমানে কোন সম্প্রদায়ের সদস্য নন। + + ৩ দিন + ১ সপ্তা + ১ মাস + চিরতরে + + রুমের ছবি + রুমের নাম + বিষয় + রুমের ট্যাগ + হিসেবে ট্যাগ করা: + + প্রিয় + কম অগ্রাধিকার + কেউ না + + অ্যাক্সেস এবং দৃশ্যমানতা + রুমের তালিকা তে এই রুম টি যোগ করুন + বিজ্ঞপ্তিগুলি + রুম অ্যাক্সেস + কক্ষ ইতিহাস পাঠযোগ্যতা + কে ইতিহাস পড়তে পারে\? + কে এই রুম অ্যাক্সেস করতে পারেন\? + + যে কেউ + সদস্য শুধুমাত্র (এই বিকল্পটি নির্বাচন করার সময় থেকে) + সদস্য শুধুমাত্র (তারা আমন্ত্রিত ছিল) + সদস্য শুধুমাত্র (তারা যোগদান করে) + + একটি রুম লিঙ্ক করার জন্য এটি একটি ঠিকানা থাকতে হবে। + শুধুমাত্র যারা আমন্ত্রিত হয়েছে + রুমের লিঙ্কটি যে কেউ জানে, অতিথিদের ছাড়া + রুম এর লিঙ্ক জানেন যে কেউ, অতিথি সহ + + নিষিদ্ধ ব্যবহারকারীরা + + উন্নত + এই রুম এর অভ্যন্তরীণ আইডি + ঠিকানা + ল্যাবস + এই অপ্রত্যাশিত উপায়ে বিরতি পারে যে পরীক্ষামূলক বৈশিষ্ট্য। সতর্কতার সাথে ব্যবহার করুন। + শেষ থেকে শেষ এনক্রিপশন + শেষ থেকে শেষ এনক্রিপশন সক্রিয় আছে + এনক্রিপশন সক্রিয় করতে সক্ষম হবার জন্য আপনাকে লগআউট করতে হবে। + শুধুমাত্র যাচাই ডিভাইসে এনক্রিপ্ট করুন + এই ডিভাইস থেকে এই রুমে যাচাই করা ডিভাইসগুলিতে এনক্রিপ্ট করা বার্তাগুলি কখনও প্রেরণ করবেন না। + + এই রুমে কোন স্থানীয় ঠিকানা নেই + নতুন ঠিকানা (যেমন #foo:matrix.org) + + এই রুম কোন সম্প্রদায়ের জন্য ফ্লেয়ার দেখাচ্ছে না + নতুন সম্প্রদায় আইডি (উদাঃ +foo:matrix.org) + অবৈধ কমিউনিটি আইডি + \'%s\' একটি বৈধ সম্প্রদায় আইডি নয় + + + অবৈধ উদীয়মান বিন্যাস + \'%s\' একটি উপনাম জন্য বৈধ বিন্যাস নয় + আপনার এই রুমের জন্য নির্দিষ্ট কোন প্রধান ঠিকানা থাকবে না। + প্রধান ঠিকানা সতর্কতা + + প্রধান ঠিকানা হিসাবে সেট করুন + প্রধান ঠিকানা হিসাবে আনসেট করুন + রুমের আইডি অনুলিপি করুন + রুমের ঠিকানা অনুলিপি করুন + + এনক্রিপশন এই রুমে সক্রিয় করা আছে। + এনক্রিপশন এই রুমে নিষ্ক্রিয় করা আছে। + এনক্রিপশন সক্রিয় করুন +\n(সতর্কতা: আবার নিষ্ক্রিয় করা যাবে না!) + + নির্দেশিকা + %s এই রুমের টাইমলাইনে একটি নির্দিষ্ট বিন্দু লোড করার চেষ্টা করছিল কিন্তু এটি খুঁজে পেতে অক্ষম। + + শেষ থেকে শেষ এনক্র্যাপশনের তথ্য + + ঘটনা তথ্য + ব্যবহারকারীর প্রমানপত্র + Curve25519 পরিচয় কুঞ্জি + ED25519 ফিঙ্গারপ্রিন্ট কুঞ্জি স্বীকৃত + অ্যালগরিদম + সেশন আইডি + ডিক্রিপশন সমস্যা + + প্রেরক ডিভাইস তথ্য + যন্ত্রের নাম + নাম + ডিভাইস আইডি + যন্ত্রের কুঞ্জি + প্রতিপাদন + Ed25519 ফিঙ্গারপ্রিন্ট + + শেষ থেকে শেষ রুমের কুঞ্জিগুলি এক্সপোর্ট করুন + রুমের কুঞ্জিগুলি এক্সপোর্ট করুন + একটি স্থানীয় ফাইলে কুঞ্জি এক্সপোর্ট করুন + এক্সপোর্ট + এক্সপোর্ট করা কুঞ্জিগুলি এনক্রিপ্ট করার জন্য একটি পাসফ্রেজ তৈরি করুন। কুঞ্জিগুলি ইম্পোর্ট করতে সক্ষম হবার জন্য আপনাকে একই পাসফ্রেজটি প্রবেশ করতে হবে। + E2E রুম কীগুলি \'%s\' তে সংরক্ষিত হয়েছে। +\n +\nসতর্কতা: অ্যাপ্লিকেশন আনইনস্টল হলে এই ফাইল মুছে যেতে পারে। + + এনক্রিপ্ট করা বার্তা পুনরুদ্ধার + কুঞ্জি ব্যাকআপ পরিচালনা করুন + + E2E রুমের কুনজিগুলি ইম্পোর্ট করুন + রুমের কুঞ্জিগুলি ইমপোর্ট করুন + একটি স্থানীয় ফাইল থেকে কুঞ্জি ইম্পোর্ট করুন + ইম্পোর্ট + শুধুমাত্র যাচাই ডিভাইসে এনক্রিপ্ট করুন + এই ডিভাইস থেকে যাচাই করা ডিভাইসগুলিতে এনক্রিপ্ট করা বার্তাগুলি কখনও প্রেরণ করবেন না। + %1$d/%2$d কুঞ্জি(গুলি) সাফল্য সাথে ইম্পোর্ট করা হয়েছে। + + যাচাই করা হয়নি + প্রতিপাদিত + কালোতালিকাভুক্ত + + অজ্ঞাত যন্ত্র + অজ্ঞাত ip + কেউ না + + যাচাই করুন + অযাচাই + কালোতালিকা + কালোতালিকাযুক্ত না + + ডিভাইস যাচাই করুন + এটি মিললে, নীচের যাচাই বাটন টিপুন। যদি এটি না হয় তবে অন্য কেউ এই ডিভাইসটিকে আটক করছে এবং আপনাকে সম্ভবত এটি কালো তালিকাভুক্ত করা উচিত। ভবিষ্যতে এই যাচাই প্রক্রিয়া আরো পরিশীলিত হবে। + আমি যে কি মেলে মেলে যাচাই + + রুমে অজানা ডিভাইস রয়েছে + এই রুমে অজানা ডিভাইস রয়েছে যা যাচাই করা হয়নি। +\nএর অর্থ এই যে ডিভাইসগুলি যে ব্যবহারকারীদের দাবি করে সেগুলির সাথে ডিভাইসগুলির কোনও নিশ্চয়তা নেই। +\nআমরা আপনাকে চালিয়ে যাওয়ার আগে প্রতিটি ডিভাইসের জন্য যাচাইকরণ প্রক্রিয়ার মধ্য দিয়ে যেতে পরামর্শ দিই তবে আপনি যদি পছন্দ করেন তবে যাচাই না করে বার্তাটি পুনরায় পাঠাতে পারেন। +\n +\nঅজানা ডিভাইস: + + একটি রুম ডিরেক্টরি নির্বাচন করুন + সার্ভার অনুপলব্ধ বা ওভারলোড হতে পারে + পাবলিক রুমগুলি তালিকায় পেতে একটি হোমসেরভের টাইপ করুন + হোমসেরভের ইউআরএল + %s সার্ভার থেকে সব রুমগুলি + সমস্ত নেটিভ %s রুমগুলি + + এখানে টাইপ করুন… + + + ১ টি অপঠিত বিজ্ঞপ্তি বার্তা + %d টি অপঠিত বিজ্ঞপ্তি বার্তা + + + ১ টি অপঠিত বিজ্ঞপ্তি বার্তা + %d টি অপঠিত বিজ্ঞপ্তি বার্তা + + + ১ টি রুম + %d টি রুম + + + + %1$s: ১ টি বার্তা + %1$s: %2$d টি বার্তা + + + %d টি বিজ্ঞপ্তি + %d টি বিজ্ঞপ্তি + + + %2$s এ %1$s + নতুন ইভেন্ট + রুম + নতুন বার্তাগুলি + নতুন আমন্ত্রণগুলি + আমি + ** পাঠাতে ব্যর্থ - দয়া করে রুম খুলুন + + ঐতিহাসিক জন্য অনুসন্ধান করুন + + অতি ক্ষুদ্র + ছোট + সাধারন + বড় + বৃহত্তর + বৃহত্তম + বিপুল + + আপনি এই রুমে উইজেট পরিচালনা করার অনুমতি প্রয়োজন + উইজেট এর নির্মাণ ব্যর্থ হয়েছে + %1$s %2$s দ্বারা যোগ করা হয়েছে + %1$s %2$s দ্বারা সরানো হয়েছে + Jitsi সঙ্গে কনফারেন্স কল তৈরি করুন + আপনি কি এই রুমে উইজেট মুছে ফেলতে চান\? + + ১ টি সক্রিয় উইজেট + %d টা সক্রিয় উইজেট + + + দুঃখিত, জিটসির সাথে কনফারেন্স কলগুলি পুরোনো ডিভাইসগুলিতে সমর্থিত নয় (৫.০ এর নীচে এন্ড্রোইড অপারেটিং সিস্টেম সহ ডিভাইসগুলি) + + উইজেট তৈরি করতে অক্ষম। + অনুরোধ পাঠাতে ব্যর্থ। + শক্তি স্তর ইতিবাচক পূর্ণসংখ্যা হতে হবে। + আপনি এই রুমে নেই। + আপনি এই রুমে এটা করার অনুমতি নেই। + অনুরোধে room_id অনুপস্থিত। + অনুরোধে user_id অনুপস্থিত। + রুম %s দৃশ্যমান নয়। + একটি প্রয়োজনীয় প্যারামিটারটি অনুপস্থিত আছে। + একটি পেরামিটার বৈধ নয়। + ম্যাট্রিক্স এপ্লিকেশনগুলি যোগ করুন + নেটিভ ক্যামেরা ব্যবহার করুন + কাস্টম ক্যামেরা স্ক্রীনের পরিবর্তে সিস্টেম ক্যামেরাটি শুরু করে। + বার্তা পাঠাবার জন্য কীবোর্ড এর এন্টার বোতাম প্রয়োগ করুন + ভয়েস বার্তা পাঠান + এই বিকল্প বার্তা রেকর্ড করার জন্য একটি তৃতীয় পক্ষের অ্যাপ্লিকেশন প্রয়োজন। + + একটি নতুন ডিভাইস এনক্রিপশন কুঞ্জি অনুরোধ করছে। +\nডিভাইসের নাম: %1$s +\nশেষ দেখা হয়েছে: %2$s +\nআপনি অন্য ডিভাইসে লগ ইন না করলে, এই অনুরোধটি উপেক্ষা করুন। + আপনার যাচাই না করা ডিভাইস \'%s\' এনক্রিপশন কুঞ্জি অনুরোধ করছে। + একটি যাচাইকরণ ডিভাইস এনক্রিপশন কুঞ্জি অনুরোধ করছে। +\nডিভাইসের নাম: %1$s +\nশেষ দেখা হয়েছে: %2$s +\nআপনি অন্য ডিভাইসে লগ ইন না করলে, এই অনুরোধটি উপেক্ষা করুন। + + যাচাই শুরু করুন + যাচাই + যাচাই না করে শেয়ার করুন + ভাগ + কুঞ্জি ভাগ অনুরোধ + অনুরোধ উপেক্ষা করুন + উপেক্ষা + + সতর্কবাণী! + কনফারেন্স কল এখনো ডেভেলপমেন্ট এ আছে আর নির্ভরযোগ্য নাও হতে পারে। + + কম্যান্ড এর ত্রুটি + অজ্ঞাত কম্যান্ড: %s + কমান্ড \"%s\" আরও পেরামিটার প্রয়োজন, অথবা কিছু পেরামিটার ভুল। + কর্ম প্রদর্শন করে + দেওয়া আইডি সঙ্গে ব্যবহারকারী কে নিষিদ্ধ করে diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index ceb4a953..1ba3b058 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -739,7 +739,7 @@ Unbekannte Geräte: Mobilgerät - Synchronisiere + Synchronisiere… Auf Ereignisse lauschen Nachrichten, die meinen Anzeigenamen enthalten @@ -1453,4 +1453,6 @@ Wenn du diese neue Wiederherstellungsmethode nicht eingerichtet hast, kann ein A Ich ** Fehler beim Senden - bitte Raum öffnen + Entschuldige, doch Konferenzgespräche mittels Jitsi wird auf alten Geräten nicht unterstützt (älter als Android 5.0) + diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index 05caa64e..8d4f587f 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -93,4 +93,9 @@ Babilejoj Salti al unua nelegita mesaĝo. + Ŝlosilo-Sekukopio + Usi Ŝlosilo-Sekukopion + Kontroli aparaton + + Kontroli aparaton diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index 0c95ef39..4528e337 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -463,7 +463,7 @@ Ten en cuenta que esta acción reiniciará la aplicación y puede tardar algo de Sincronización en segundo plano Habilitar sincronización en segundo plano Venció el tiempo de espera para la solicitud de sincronización - Retraso entre dos solicitudes de sincronización + Retraso entre las solicitudes de sincronización segundo segundos @@ -509,14 +509,14 @@ Para continuar, ingresa tu contraseña por favor. Verificación Pendiente Por favor, consulta tu correo electrónico y haz clic en el enlace que contiene. Una vez hecho esto, haz clic en continuar. - No es posible verificar la dirección de correo electrónico. Por favor, consulta tu correo electrónico y haz clic en el enlace que contiene. Una vez hecho esto, haz clic en continuar + No es posible verificar la dirección de correo electrónico. Por favor, consulta tu correo electrónico y haz clic en el enlace que contiene. Una vez hecho esto, haz clic en continuar. - Esta dirección de correo electrónico ya está en uso - No se pudo enviar el correo electrónico: No se encontró esta dirección de correo electrónico - Este número telefónico ya está en uso + Esta dirección de correo electrónico ya está en uso. + No se encontró esta dirección de correo electrónico. + Este número telefónico ya está en uso. Cambiar contraseña - Contraseña anterior + Contraseña actual Contraseña nueva Confirmar contraseña No se pudo actualizar la contraseña @@ -572,8 +572,8 @@ Ten en cuenta que esta acción reiniciará la aplicación y puede tardar algo de Para crear un enlace a una sala, debe tener una dirección. Solo personas que han sido invitadas - Cualquier persona que conozca el enlace a esta sala, excepto huéspedes - Cualquier persona que conozca el enlace a esta sala, incluyendo huéspedes + Cualquier persona que conozca el enlace a esta sala, excepto invitados + Cualquier persona que conozca el enlace a esta sala, incluyendo invitados Usuarios vetados @@ -649,7 +649,7 @@ Advertencia: este archivo puede ser eliminado si la aplicación se desinstala.Importar las claves desde un archivo local Importar Cifrar solo a dispositivos verificados - Nunca enviar mensajes cifrados a dispositivos sin verificar desde este dispositivo + Nunca enviar mensajes cifrados a dispositivos sin verificar desde este dispositivo. SIN Verificar Verificado @@ -665,7 +665,7 @@ Advertencia: este archivo puede ser eliminado si la aplicación se desinstala.Verificar dispositivo Para verificar que este dispositivo es confiable, por favor contacta a su dueño por algún otro medio (ej. cara a cara o por teléfono) y pregúntale si la clave que ve en sus Ajustes de Usuario para este dispositivo coincide con la clave a continuación: - Si coincide, oprime el botón de verificar a continuación. Si no coincide, entonces alguien más está interceptando este dispositivo y probablemente deberías prohibirlo. En el futuro, este proceso de verificación será más sofisticado. + Si coincide, presione el botón de verificar a continuación. Si no coincide, entonces alguien más está interceptando este dispositivo y probablemente debería prohibirlo. En el futuro, este proceso de verificación será más sofisticado. Verifico que las claves coinciden Riot ahora admite cifrado de extremo a extremo pero debes volver a iniciar sesión para habilitarlo. @@ -689,16 +689,16 @@ Dispositivos desconocidos: Todas las salas nativas de %s - Buscar históricos + Buscar en el historial Interfaz de usuario - Idioma de la Interfaz - Elige un idioma + Idioma + Elige idioma Iniciar en el arranque Borrar caché de medios Guardar medios - Siempre mostrar las marcas temporales de mensajes + Mostrar marcas temporales de todos los mensajes 3 días 1 semana @@ -725,7 +725,7 @@ Dispositivos desconocidos: Tema Oscuro Tema Negro - Sincronizando + Sincronizando… Detectar eventos Notificaciones ruidosas Notificaciones silenciosas @@ -741,7 +741,7 @@ Dispositivos desconocidos: Sonido de notificación Mensajes que contienen mi nombre público Mensajes que contienen mi nombre de usuario - Mostrar marcas temporales en formato de 12 horas (ej. 2:30pm) + Mostrar marcas temporales en formato de 12 horas Análisis de Estadísticas @@ -750,7 +750,7 @@ Dispositivos desconocidos: %1$s añadido por %2$s %1$s eliminado por %2$s Crear llamadas de conferencia con jitsi - ¿Seguro que quieres eliminar el componente? + ¿Seguro que quieres eliminar el widget de esta sala\? No es posible crear el componente. @@ -812,8 +812,8 @@ Dispositivos desconocidos: Silenciar Añadir un Atajo a la Pantalla de Inicio - Habilitar vistas previas de URL en línea por defecto - Vibrar al mencionar + Vistas previas de URL en línea + Vibrar al mencionar un usuario Insignia @@ -887,8 +887,8 @@ Dispositivos desconocidos: %d miembros activos - 1 mensaje notificado sin leer - %d mensajes notificados sin leer + 1 mensaje sin leer + %d mensajes sin leer 1 mensaje notificado sin leer @@ -929,7 +929,7 @@ La visibilidad de mensajes en Matrix es similar a la del correo electrónico. Qu Normal Privacidad reducida La aplicación necesita permiso para ejecutarse en segundo plano - • Las notificaciones se envían a través de Google Cloud Messaging + • Las notificaciones se envían a través de Firebase Cloud Messaging • Las notificaciones solo contienen metadatos • El contenido del mensaje de la notificación está ubicado de forma segura directamente desde el servidor doméstico de Matrix • Las notificaciones contienen datos de mensajes y metadatos @@ -948,7 +948,7 @@ La visibilidad de mensajes en Matrix es similar a la del correo electrónico. Qu Un parámetro no es válido. Ingresa tu contraseña por favor. - Enviar mensaje de voz (requiere una aplicación de terceros para grabar mensajes de voz) + Enviar mensaje de voz Elige otra opción @@ -968,7 +968,7 @@ La visibilidad de mensajes en Matrix es similar a la del correo electrónico. Qu Solicitud de clave enviada. Privacidad de Notificaciones - Riot puede ejecutarse en segundo plano para gestionar tus notificaciones de forma segura y privada (esto podría afectar el uso de la batería). + Riot puede ejecutarse en segundo plano para gestionar tus notificaciones de forma segura y privada. Esto podría afectar la duración de la batería. Enviar datos de análisis de estadísticas Riot recopila análisis de estadísticas anónimas para permitirnos mejorar la aplicación. Por favor, habilita los análisis de estadísticas para ayudarnos a mejorar Riot. @@ -982,7 +982,7 @@ Ten en cuenta que esta acción reiniciará la aplicación y puede tardar algo de Enviar una respuesta (sin cifrar)… Actualmente no eres miembro de ninguna comunidad. - Utilizar la tecla Enter del teclado para enviar mensajes + Utilizar la tecla Intro del teclado para enviar mensajes Muestra la acción Veta al usuario con la ID dada Quita el veto al usuario con la ID dada @@ -1067,7 +1067,7 @@ Ten en cuenta que esta acción reiniciará la aplicación y puede tardar algo de Crear frase de contraseña Las frases de contraseña deben coincidir Utiliza carga diferida para los miembros de la sala - Aumenta el rendimiento cargando los miembros de la sala solo en la primera vista + Aumenta el rendimiento cargando los miembros de la sala solo en la primera vista. Tu servidor doméstico aún no admite la carga diferida de los miembros de la sala. Prueba más tarde. Disculpas, ocurrió un error @@ -1149,4 +1149,304 @@ Ten en cuenta que esta acción reiniciará la aplicación y puede tardar algo de Prueba de servicios Google Play APK de servicios de Google Play esta disponible y actualizado. + Al cerrar la sesión se perderán los mensajes encriptados + ¿Estás seguro que quieres cerrar la sesión\? + Está URL no es válida, por favor compruébala + El diagnóstico base se ha completado con éxito. Si aun no recibes notificaciones, por favor mándanos un informe de error. + Una o más pruebas han fallado, por favor prueba las soluciones propuestas. + Una o más pruebas han fallado, por favor mándanos un informe de error para que podamos investigar. + + Copia de seguridad en progreso. Si cierras sesión ahora perderás el acceso a tus mensajes encriptados. + La copia de seguridad debería estar activa ahora en todos tus dispositivos para evitar la pérdida del acceso a tus mensajes encriptados. + Riot usa los servicios de Google Play para entregar mensajes Push pero no parece estar configurado correctamente: +\n%1$s + solucionar error con los Servicios de Google Play + + Token Base + Token FCM recuperada correctamente:\n%1$s + Error al recuperar token FCM:\n%1$s + [%1$s]\nEste error esta fuera del control de Riot y de acuerdo con Google, este error indica que el dispositivo tiene demasiadas apps registradas con FCM. Este error solo ocurre cuando existe un numero demasiado alto de apps por lo que no deberia afectar a un usuario promedio. + [%1$s]\nEste error esta fuera del control de Riot. Puede ocurrir por numerosas razones. Probablemente funcione si vuelve a intentarlo mas tarde. También puede comprobar si los Servicios de Google Play están limitados por los ajustes del sistema o si la hora del dispositivo es correcta o si puede pasar en ROM personalizada. + [%1$s] +\nEste error esta fuera del control de Riot. No hay cuenta de googled registrada en este dispositivo. Por favor abre el gestor dde cuentas y añade una cuenta de Google. + añadir cuenta + + Token de registro + Token FCM registrado correctamente en el Servidor. + Error al registrar el token FCM en el Servidor +\n%1$s + + Servicio de notificaciones + El servicio de notificaciones esta funcionando. + El servicio de notificaciones no esta funcionando. +\nIntente reiniciar la aplicación. + Borrando copia de seguridad… + Error al borrar la copia de seguridad (%s) + + Borrar copia de seguridad + nueva copia de seguridad + Ese era yo + nunca se pierden mensajes cifrados + Configurar copia de seguridad de las claves de cifrado + + Nunca pierdas mensajes cifrados + Nuevos mensajes clave cifrados + Gestionar Copia de Seguridad + + Guardando copia de seguridad… + + Versión + Algoritmo + Reinicio automático del servicio de notificaciones + Empezar servicio + + El servicio se ha apagado y reiniciado automáticamente. + Error al reiniciar el servicio + + Inicio automático + El servicio funcionará cuando reinicie el dispositivo. + El servicio no se iniciará al reiniciar el dispositivo, no recibirá notificaciones hasta que Riot haya sido abierto al menos 1 vez. + activar Inicio automático + + Comprobar restricciones en segundo plano + Las restricciones de segundo plano están desactivadas para Riot. Este debería funcionar con datos móviles (sin WIFI). +\n%1$s + Las restricciones de segundo plano estan activadas para Riot. +\nLa app estará completamente restringida mientras esté en segundo plano y esto podría afectar a las notificaciones. +\n%1$s + Desactivar restricciones + + Optimización de la bateria + A Riot no le afecta la Optimización de la bateria. + Si un usuario deja el dispositivo desenchufado e inmóvil durante cierto periodo de tiempo con la pantalla apagada, el dispositivo entrará en modo hibernación. Esto evita que las apps accedan a la red y postpone sus tareas, sincronizaciones y alarmas. + ignorar optimización + + Las apps no necesita conectarse al servidor doméstico en segundo plano, esto debería reducir el uso de la batería + Configurar notificaciones de sonido + Configurar notificaciones de llamada + Configurar notificaciones silenciadas + elegir Color de las luces LED, vibración. sonido… + + + Administrar Claves de la criptografía + Mostrar vistas previas de enlaces en el chat cuando el servidor doméstico soporte esta característica. + Enviar notificaciones de escritura + Dejar que el resto de usuarios sepa que estas escribiendo. + Formato Markdown + Editar mensajes usando Markdown antes de enviarlos. Esto permite formatos de escritura avanzados como por ejemplo usar asteriscos para cambiar el texto a Itálica. + Mostrar recibos de lectura + Hacer click en los recibos de lectura para mostrar una lista detallada. + Mostrar notificaciones de entrada y salida + Invitaciones, expulsiones y prohibiciones no se ven afectadas. + Mostrar notificaciones de la cuenta + Incluye cambios en el avatar y en el nombre. + Enviar mensaje con intro + La tecla Intro enviará el mensaje en vez de añadir un salto de linea + + Conexión en segundo plano + Riot necesita mantener una leve conexión en segundo plano para poder ofrecer notificaciones de confianza. +\nEn la siguiente pantalla se le pedirá permisos para que Riot siempre funcione en segundo plano, por favor acepte. + Conceder permiso + + El modo de guardado de datos aplica un filtro específico para que las actualizaciones de presencia y las notificaciones de escritura sean eliminadas. + + Ha ocurrido un error mientras se verificaba tu dirección de correo electrónico. + + Contraseña + Actualizar contraseña + La contraseña no es válida + La contraseña no es correcta + + Ha ocurrido un error tratando de verificar su número de teléfono. + Información adicional: %s + + Media + Compresión predeterminada + Seleccionar + Seleccionar + Recuperación de mensajes cifrados + Gestionar copia de seguridad clave + + %1$d/%2$d clave(s) importada(s) satisfactoriamente. + + + %1$s: 1 mensaje + %1$s: %2$d mensajes + + + %d notificación + %d notificaciones + + + Nuevo evento + Sala + Nuevos mensajes + Nueva invitación + Yo + ** Error al enviar - por favor abra la sala + + "Lo sentimos, las llamadas grupales con Jitsi no se pueden mantener en dispositivos antiguos (dispositivos con Android inferior a 5.0)" + + Iniciar la cámara del sistema en lugar de la pantalla de cámara personalizada. + Esta opción requiere una aplicación de terceros para grabar los mensajes. + + El comando \"%s\" necesita mas parámetros o algunos parámetros son incorrectos. + Markdown activado. + Markdown desactivado. + + Silencioso + Por favor introduzca un nombre de usuario. + Mostrar el area de información + Siempre + Para mensajes y errores + Solo para errores + + %1$s: + %1$s: %2$s + +%d + %d+ + No se ha encontrado ningún APK válido de Servicios de Google Play. Las notificaciones podrían no funcionar correctamente. + + Riot.im - Comunicate a tu manera + Siempre estamos haciendo cambios y mejoras para Riot.im. Puedes encontrar el registro de cambios aqui: %1$s. Para asegurarte de que no te pierdes nada, tan solo mantén las actualizaciones activadas. + Una app de chat universal completamente bajo tu control. + Una app de chat, bajo tu total control y completamente flexible. Riot deja que te comuniques de la manera que prefieras. Hecho para [matrix] - el estándar para la comunicación abierta y descentralizada. +\nConsigue tu cuenta de matrix.org gratis. Consigue tu servidor en https://modular.im o usa otro servidor de Matrix. +\nPor qué escoger a Riot.im\? +\n +\n• COMUNICACIÓN COMPLETA: Crea salas para tus equipos, tus amigos, vuestra comunidad - de la forma que quieras! Chatea, comparte archivos, añade widgets y haz llamadas de voz y video - Todo de forma gratuita. +\n +\n• POTENTES INTEGRACIONES: Usa Riot.im con las herramientas que conoces y que mas te gustan. Con Riot.im puedes hasta chatear con usuarios y grupos de otras apps de chat. +\n +\n• PRIVADA Y SEGURA: Mantén privadas tus conversaciones. La condición de encriptación de extremo a extremo asegura que las conversaciones privadas sigan siendo siempre privadas. +\n +\n• ABIERTO, NO CERRADO: Código abierto y construido en Matrix. Posee tus propios datos alojando tu propio servidor o selecciona uno en el que confíes. +\n +\n• ALLÁ DONDE ESTÉS: Mantente en contacto dondequiera que estés con el historial de mensajes totalmente sincronizado a través de todos tus dispositivos online en http://riot.im. + + Por favor introduzca una contraseña + La contraseña que has introducido es muy débil + + Por favor borra la contraseña si quieres que Riot genere una clave de recuperación. + No hay ninguna sesión de Matrix disponible + + Nunca se pierden los mensajes cifrados + Los mensajes en salas cifradas están asegurados con cifrado de extremo a extremo. Solo los integrantes de la sala y tu podéis leer estos mensajes. +\n +\nAsegúrate de guardar bien tus claves para evitar perderlas. + (Avanzado) + Exportar claves manualmente + + Asegura tu copia de seguridad con una contraseña. + Almacenaremos una copia cifrada de tus claves en tu servidor. Protege tu copia de seguridad con una contraseña para mantenerla segura. +\n +\nPara máxima seguridad, esta contraseña deberá ser diferente a la de tu cuenta. + Introduce una contraseña + Creando copia de seguridad + O, asegura tu copia de seguridad con una clave de recuperación, guardándola en algún lugar seguro. + "(Avanzado) preparar clave de recuperación" + Completado! + Tus claves se están guardando. + Tu clave de recuperación es una red de seguridad - Puedes usarla para recuperar el acceso a tus mensajes cifrados si olvidas tu contraseña. +\nMantén tu clave de recuperación en algún lugar muy seguro como un administrador de contraseñas (o en una caja fuerte) + Mantén tu clave de recuperación en algún lugar muy seguro como un administrador de contraseñas (o en una caja fuerte) + Hecho + He hecho una copia + Guardar clave de recuperación + Compartir + Guardar como archivo + La clave de recuperación ha sido guardada en \'%s\'. +\n +\nAtención: Este archivo podría borrarse si la aplicación es desinstalada. + + Por favor, haga una copia + Compartir clave de recuperación con… + Generando clave de recuperación usando una contraseña, este proceso puede tardar varios segundos. + Clave de recuperación + Error inesperado + Copia de seguridad iniciada + Tus claves cifradas están siendo guardadas en segundo plano en tu servidor. La copia de seguridad inicial podría tardar varios minutos. + + + Estás seguro\? + Podrías perder el acceso a tus mensajes si te desconectas o pierdes este dispositivo. + + Utiliza tu clave de recuperación para desbloquear tu historial de mensajes cifrados + Utiliza tu clave de recuperación + No sabes tu clave de recuperación\? puedes %s. + + Utiliza tu clave de recuperación para desbloquear tu historial de mensajes cifrados + Introduzca la clave de recuperación + + Mensaje de recuperación + + Has perdido tu clave de recuperación\? Puedes crear una nueva en ajustes. + La copia de seguridad no se ha podido descifrar con esta contraseña: por favor verificar que has introducido la contraseña de recuperación correcta. + Error de red: por favor comprueba tu conexión y vuelve a intentarlo. + + Restaurando copia de seguridad: + Creando clave de recuperación… + Descargando claves… + Importando claves… + Desbloquear historial + Por favor introduce una clave de recuperación + La copia de seguridad no se ha podido descifrar con esta contraseña: por favor verificar que has introducido la contraseña de recuperación correcta. + + Copia de seguridad restaurada %s ! + Se han restaurado %1$d claves de sesión y se han añadido %2$d nuevas claves que este dispositivo no conocía + + Copia de seguridad restaurada con la clave %d. + Copia de seguridad restaurada con las claves %d. + + + Se ha añadido %d como clave en este dispositivo. + Se han añadido %d como claves en este dispositivo. + + + Error al recuperar la ultima versión de las claves (%s). + La sesión crypto no esta activada + + + Restaurada desde copia de seguridad + Borrar copia de seguridad + + La copia de seguridad ha sido correctamente activada para este dispositivo. + La copia de seguridad ha sido correctamente desactivada para este dispositivo. + Tus claves no están siendo guardadas en este dispositivo. + + La copia de seguridad tiene una firma de un dispositivo desconocido con el ID %s. + La copia de seguridad tiene una firma valida de este dispositivo. + La copia de seguridad tiene tiene una firma válida para el dispositivo verificado %s. + Usar copia de seguridad de la clave + + Todas las claves guardadas + + Cargando %d de la clave… + Cargando %d de las claves… + + + Firma + + autocompletar opciones del servidor + Riot ha detectado una configuración personalizada del servidor para el dominio de su ID de usuario \"%s\": +\n%s + Configuración de uso + + Origen predeterminado de medios + Configurar copia de seguridad de las claves de cifrado + Obteniendo una versión de copia de seguridad… + La copia de seguridad tiene una firma valida del dispositivo no verificado %s + La copia de seguridad tiene una forma inválida del dispositivo verificado %s + La copia de seguridad tiene una firma inválida del dispositivo no verificado %s + Error al conseguir información de confianza para la copia de seguridad (%s). + + Para usar la copia de seguridad de la clave en este dispositivo introduzca su contraseña o su clave de recuperación ahora. + Desea borrar sus claves cifradas guardadas del servidor\? No podrás usar tu clave de recuperación para leer el historial de mensajes cifrados. + + Una nueva copia de seguridad de mensajes ha sido detectada. +\n +\nSi no ha establecido un nuevo método de recuperación, alguien podría estar intentando acceder a su cuenta. Cambie su contraseña y establezca un nuevo método de recuperación inmediatamente en ajustes. + Respuesta inválida del descubrimiento del servidor doméstico + Reproducir sonido de cámara + diff --git a/vector/src/main/res/values-eu/strings.xml b/vector/src/main/res/values-eu/strings.xml index 31acc3be..84a6edb9 100644 --- a/vector/src/main/res/values-eu/strings.xml +++ b/vector/src/main/res/values-eu/strings.xml @@ -1400,4 +1400,66 @@ Abisua: Fitxategi hau ezabatu daiteke aplikazioa desinstalatzen bada. Sentitzen dugu, gailu zaharretan ezin dira Jitsi bidezko konferentzia deiak egin (Android OS 5.0 baino zaharragoak) + Egiaztatu gailua + + ip ezezaguna + "Gailu berri bat zifratze gakoak eskatzen ari da. +\nGailuaren izena: %1$s +\nAzkenekoz ikusia: %2$s +\nEz baduzu saioa zuk hasi beste gailu batekin, ezikusi eskari hau." + "Egiaztatu gabeko gailu bat zifratze gakoak eskatzen ari da. +\nGailuaren izena: %1$s +\nAzkenekoz ikusia: %2$s +\nEz baduzu saioa zuk hasi beste gailu batekin, ezikusi eskari hau." + + Egiaztatu + Partekatu + Gakoa partekatzeko eskaria + Ezikusi + + Egiaztatu testu kate labur bat alderatuz. + Segurtasun gehiagorako, hau aurrez aurre edo komunikatzeko beste bide fidagarri bat erabiliz egitea aholkatzen dizugu. + Hasi egiaztaketa + Jasotako egiaztaketa eskaria + Egiaztatu gailu hau fidagarri gisa markatzeko. Gailuak fidagarritzat jotzeak lasaitasuna ematen dizu muturretik muturrera zifratutako mezuak erabiltzean. + Gailu hau egiaztatzean fidagarri gisa markatuko da, eta zure gailua fidagarri gisa markatuko zaio ere zure kideari. + + "Egiaztatu gailu hau honako emojia kidearen pantailan agertu dela baieztatuz" + "Egiaztatu gailu hau honako zenbaki hauek kidearen pantailan agertu direla baieztatuz" + + Egiaztaketa eskari bat jaso duzu. + Ikusi eskaria + Kideak baieztatu bitartean zain… + + Egiaztatuta! + Ongi egiaztatu duzu gailu hau. + Kide honekin partekatutako mezu seguruak muturretik muturrera zifratuta daude eta ezin ditu beste inork irakurri. + Ulertuta + + Ez da ezer agertzen\? Bezero guztiek ez dute onartzen egiaztaketa interaktiboa oraindik. Erabili egiaztaketa metodo zaharra. + Erabili egiaztaketa metodo zaharra. + + Gako-egiaztaketa + Eskaria ezeztatuta + Beste aldeak egiaztaketa ezeztatu du. +\n%s + Egiaztaketa ezeztatu da. +\nArrazoia: %s + + Gailu-egiaztaketa interaktiboa + Egiaztaketa eskaria + %s erabiltzaileak zure gailua egiaztatu nahi du + + Erabiltzaileak egiaztaketa ezeztatu du + Egiaztaketarako denbora-muga agortu da + Gailuak ez du transakzio horren berri + Gailua ez dator bat gako adostasunean, hash, MAC, edo SAS metodoan + Hash-a ez dator bat + SAS-a ez dator bat + Gailuak ustekabeko mezu bat jaso du + Baliogabeko mezu bat jaso da + Gakoa ez dator bat + Erabiltzailea ez dator bat + Errore ezezaguna + diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index 5bdb0a6c..be63b4fc 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -20,7 +20,7 @@ ذخیره ترک کردن ارسال - کپی + رونوشت ارسال مجدد نقل قول اشتراک گذاری @@ -98,16 +98,16 @@ آدرس ایمیل (اختیاری) شماره تلفن شماره تلفن (اختیاری) - رمز عبور را تکرار کنید - رمز عبور جدید خود را تأیید کنید - نام کاربری و/یا رمز عبور نامعتبر می‌باشد - رمز عبور خیلی کوتاه است (حداقل ۶) + گذرواژه را تکرار کنید + گذرواژه جدید خود را تأیید کنید + نام کاربری یا گذرواژه نامعتبر است + گذرواژه کوتاه است (حداقل ۶) آدرس ایمیل نامعتبر به نظر می‌رسد شماره تلفن نامعتبر به نظر می‌رسد گذرواژه‌ها مطابقت ندارد - رمز عبور را فراموش کردید؟ - از گزینه‌های سرور سفارشی استفاده کنید (پیشرفته) - لطفا ایمیل خود را برای ادامه ثبت نام بررسی کنید + گذرواژه را فراموش کردید؟ + از گزینه‌های کارگزار سفارشی استفاده کنید (پیشرفته) + برای ادامه‌ی ثبت‌نام، لطفاً ایمیل خود را بررسی کنید من آدرس ایمیلم را تایید کرده‌ام امکان ورود به سیستم وجود ندارد: خطای شبکه موبایل @@ -122,7 +122,7 @@ متوسط کوچک - بارگزاری لغو شود؟ + دریافت لغو شود؟ آپلود لغو شود؟ %d ثانیه دیروز @@ -296,4 +296,58 @@ آیا می‌خواهید از حساب کاربری خود خارج شوید؟ علامت‌گذاری به عنوان خوانده شده ورود با سامانه‌های احراز هویت مرکزی + قالب Status.im + + راه‌اندازی سرویس + اعلان‌های باصدا + اعلان‌های بی‌صدا + + تاریخچه + جزئیات جامعه + ارسال استیکر + پشتیبان‌گیری کلید + بازیابی پشتیبان کلید + پشتیبان‌گیری از کلید هنوز به پایان نرسیده است، لطفاً صبر کنید… + در صورتی که الآن از حساب خود خارج شوید، پیام‌های رمز خود را از دست خواهید داد + پشتیبان‌گیری کلید در جریان است. در صورتی که الآن از حساب خود خارج شوید، پیام‌های رمز خود را از دست خواهید داد. + برای جلوگیری از گم شدن پیام‌های رمز، پشتیبان امن کلید باید روی تمام دستگاه‌های شما فعال باشد. + پیام‌های رمز خود را نمی‌خواهم + پشتیبان‌گیری از کلیدها… + استفاده از پشتیبان کلید + آیا مطمئن هستید؟ + پشتیبان‌گیری + در صورت عدم پشتیبان‌گیری از کلیدهای خود پیش از خروج، دسترسی شما به پیام‌های رمزتان از بین می‌رود. + + گواهی‌نامه‌های شخص ثالث + + صحبت + پاک کردن + باز ارسال + پیوند دائمی + مشاهده منبع رمز نشده + تاریخچه + یک ایمیل به حساب خود اضافه کنید تا دیگر کاربران بتوانند شما را پیدا کنند و برای شما نیز امکاناتی مانند بازیابی گذرواژه فعال شود. + یک شماره تلفن به حساب خود اضافه کنید تا دیگر کاربران بتوانند شما را توسط آن پیدا کنند. + یک ایمیل یا شماره تلفن به حساب خود اضافه کنید تا دیگر کاربران بتوانند شما را پیدا کنند. +\n +\nنشانی ایمیل امکان بازیابی گذرواژه را نیز به شما می‌دهد. + یک ایمیل و یک شماره تلفن به حساب خود اضافه کنید تا دیگر کاربران بتوانند شما را پیدا کنند. +\n +\nنشانی ایمیل امکان بازیابی گذرواژه را نیز به شما می‌دهد. + نام کاربری تنها می‌تواند شامل حروف انگلیسی، اعداد، نقطه، خط زیر و خط تیره باشد + ثبت‌نام با ورود همزمان ایمیل و شماره تلفن در حال حاضر پشتیبانی نمی‌شود. تنها شماره تلفن شما برای حساب‌تان ثبت خواهد شد. +\n +\nمی‌توانید در ادامه ایمیل خود را در تنظیمات برنامه به پروفایل خود اضافه کنید. + کارگزار می‌خواهد اطمینان یابد که شما ربات نیستید + نام کاربری قبلاً استفاده شده است + دریافت کلیدهای رمزنگاری از سایر دستگاه‌های شما. + + درخواست کلید ارسال شد. + + ارسال درخواست + لطفاً برنامه را روی یکی از دستگاه‌های دیگرتان که به این پیام دسترسی داشته است، اجرا کنید تا کلیدها منتقل شوند. + + مشاهده گیرندگان + + آیا مطمئن هستید؟ diff --git a/vector/src/main/res/values-fi/strings.xml b/vector/src/main/res/values-fi/strings.xml index a5c8f211..809ff94a 100644 --- a/vector/src/main/res/values-fi/strings.xml +++ b/vector/src/main/res/values-fi/strings.xml @@ -14,14 +14,14 @@ OK - Peru + Peruuta Säästä Poistu Lähetä Kopioi Lähetä uudelleen Poista - Lainaus + Lainaa Jaa Myöhemmin Lähetä edelleen @@ -39,7 +39,7 @@ \nLiity pelkällä %1$s tai %2$s kanssa äänellä videon - Ei voitu aloittaa puhelua, yritä uudelleen + Puhelua ei voitu aloittaa, yritä myöhemmin uudelleen Puuttuvien oikeuksien takia osa ominaisuuksista ei ole käytettävissä… Sinulta puuttuu oikeus käynnistää ryhmäpuhelu tässä huoneessa Puhelua ei voitu käynnistää @@ -67,7 +67,7 @@ Varoitus - Home + Koti Suosikit Ihmiset Huoneet @@ -102,7 +102,7 @@ Lähetä lokit Lähetä kaatumislokit - Send screenshot + Lähetä näytönkaappauskuva Ilmoita virheestä Kuvaile virhettä. Mitä teit? Mitä odotit tapahtuvan? Mitä tapahtui? Kuvaile ongelmaa @@ -118,7 +118,7 @@ Liity huoneeseen Käyttäjätunnus - Luo tunnus + Luo tili Kirjaudu sisään Kirjaudu ulos Kotipalvelimen URL @@ -139,7 +139,7 @@ Kirjaudu sisään - Luo tunnus + Luo tili Lähetä Ohita Lähetä nollaussähköposti @@ -149,9 +149,13 @@ Uusi salasana Käyttäjätunnus "Lisää sähköpostiosoite tiliisi antaaksesi muiden käyttäjien löytää sinut. Voit myös nollata salasanasi." - "Lisää puhelinnumero tiliisi antaaksesi muiden käyttäjien löytää sinut." - "Lisää sähköpostiosoite ja/tai puhelinnumero tiliisi antaaksesi muiden käyttäjien löytää sinut.\n\nSähköpostiosoitteella voit myös nollata salasanasi." - "Lisää sähköpostiosoite ja puhelinnumero tiliisi antaaksesi muiden käyttäjien löytää sinut.\n\nSähköpostiosoitteella voit myös nollata salasanasi." + Lisää puhelinnumero tiliisi, jotta muut käyttäjät löytävät sinut. + Lisää sähköpostiosoite ja/tai puhelinnumero tiliisi, jotta muut käyttäjät löytävät sinut. +\n +\nSähköpostiosoitteella voit myös nollata salasanasi. + Lisää sähköpostiosoite ja puhelinnumero tiliisi, jotta muut käyttäjät löytävät sinut. +\n +\nSähköpostiosoitteella voit myös nollata salasanasi. Sähköpostiosoite Sähköpostiosoite (valinnainen) Puhelinnumero @@ -182,8 +186,8 @@ Nollataksesi salasanasi, anna tilisi sähköpostiosoite: Anna tilisi sähköpostiosoite. Anna uusi salasana. - Osoitteeseen %s on lähetetty sähköposti. Sen jälkeen, kun olet seurannut siinä olevaa linkkiä, paina alla olevaa nappia. - Sähköpostiosoitteesi vahvitaminen epäonnistui. Varmistathan, että seurasit sähköpostissasi olevaa linkkiä + Osoitteeseen %s on lähetetty sähköposti. Kun olet avannut siinä olevan linkin, paina alla olevaa nappia. + Sähköpostiosoitteesi vahvistaminen epäonnistui. Varmista, että klikkasit sähköpostissa olevaa linkkiä. Salasanasi on vaihdettu.\n\nSinut on kirjauduttu ulos kaikista laitteistasi, etkä enää saa viesti-ilmoituksia. Ottaaksesi käyttöön ilmoitukset uudelleen, kirjaudu sisään uudelleen kaikilla laitteillasi. @@ -199,10 +203,10 @@ Väärä käyttäjätunnus tai salasana Annettua tunnistetta ei hyväksytty Epämuotoinen JSON - Ei sisällä oikeamuotoista JSON:ia + Ei sisällä kelvollista JSON:ia Liian monta pyyntöä - Käyttäjätunnus on jo käytössä - Sähköpostiisi lähetetty linkki, jota ei ole vielä seurattu + Käyttäjänimi on jo käytössä + Sähköpostiisi lähetetty linkki, jota ei ole vielä klikattu Sinun pitää kirjautua uudelleen, luodaksesi salausavaimet tälle laitteelle. @@ -222,8 +226,8 @@ Peru lataus? Peru lähetys? - %d sek - %1$d min %2$d sek + %d s + %1$d min %2$d s Eilen @@ -259,21 +263,25 @@ Huomio Riot tarvitsee käyttöluvan mediagalleriaasi lähettäkseen liitteitä.\n\nSalli tiedostojen käyttö seuraavalla näytöllä liittääksesi kuvia ja muita tiedostoja viesteihin. Riot tarvitsee käyttöluvan kameraan ottaakseen kuvia ja suorittakseen videopuheluita. - \n\nSalli kameran käyttö seuraavalla näytöllä aloittaaksesi tämä puhelu. + " +\n +\nSalli kameran käyttö seuraavalla näytöllä aloittaaksesi tämän puhelun." Riot tarvitsee käyttöluvan mikrofoniin suorittakseen puheluita. - \n\nSalli mikrofonin käyttö seuraavalla näytöllä aloittaaksesi tämä puhelu. - Riot tarvitsee käyttöluvan kameraan ja mikrofoniin suorittakseen videopuheluita.\n\nSalli mikrofonin ja kameran käyttö seuraavilla näytöillä aloittaaksesi tämä puhelu. + " +\n +\nSalli mikrofonin käyttö seuraavalla näytöllä aloittaaksesi tämän puhelun." + 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. Riot tarvitsee luvan käyttää yhteystietojasi löytääkseen muita Matrix-käyttäjiä sähköpostiosoitteiden ja puhelinnumeroiden perusteella. Salli yhteystietojen käyttö seuraavalla näytöllä löytääksesi Matrix-tilit. - Riot tarvitsee käyttöluvan yhteystietoihin, löytääkseen muita Matrix-käyttäjiä sähköpostiosoitteiden sekä puhelinnumeroiden avulla. - -Salli Riotin käyttää yhteystietojasi? + Riot tarvitsee käyttöluvan yhteystietoihin löytääkseen muita Matrix-käyttäjiä sähköpostiosoitteiden sekä puhelinnumeroiden avulla. Salli Riotin käyttää yhteystietojasi\? Toimenpide epäonnistui puuttuvien käyttölupien takia - Säästetty + Tallennettu Tallenna latauskansioon\? KYLLÄ EI @@ -290,11 +298,11 @@ Salli Riotin käyttää yhteystietojasi? %s on kutsunut sinut huoneeseen - Tämä kutsu lähetettiin osoitteeseen %s, jota ei ole liitetty tunnukseesi. -\nVoit kirjautua sisään toisella tilillä tai lisätä tämän sähköpostiosoitteen tunnukseesi. + Tämä kutsu lähetettiin osoitteeseen %s, jota ei ole liitetty tiliisi. +\nVoit kirjautua sisään toisella tilillä tai lisätä tämän sähköpostiosoitteen tiliisi. Olet avaamassa huonetta %s. Haluatko liittyä huoneeseen osallistuaksesi keskusteluun? huone - Tämä on esikatsely huoneesta. Liity huoneeseen osallistuaksesi keskusteluun. + Tämä on huoneen esikatselu. Liity huoneeseen osallistuaksesi keskusteluun. Uusi keskustelu @@ -304,7 +312,7 @@ Salli Riotin käyttää yhteystietojasi? Poistu huoneesta Haluatko varmasti poistua huoneesta? - Haluatko varmasti poistaa käyttäjän %s tästä huoneesta? + Haluatko varmasti poistaa käyttäjän %s tästä keskustelusta\? Luo kirjautuneena sisään @@ -319,19 +327,19 @@ Salli Riotin käyttää yhteystietojasi? Kutsu Poistu huoneesta Poista huoneesta - Bannaa - Poista banni + Anna porttikielto + Poista porttikielto Palauta tavalliseksi käyttäjäksi Tee moderaattori Tee ylläpitäjä Piilota kaikki tämän käyttäjän viestit Näytä kaikki tämän käyttäjän viestit - Matrix-ID, nimi tai sähköpostiosoite + Käyttäjätunnus, nimi tai sähköpostiosoite Mainitse Näytä laitelista Olet ylentämässä käyttäjää samalle tasolle kuin oma käyttäjätasosi. Et voi perua tätä toimintoa.\nOletko varma? - "Haluatko kutsua käyttäjän %s tähän huoneeseen?" + Haluatko kutsua käyttäjän %s tähän keskusteluun\? Kutsu tunnisteella @@ -346,18 +354,18 @@ Salli Riotin käyttää yhteystietojasi? Etsi %s kirjoittaa… %1$s ja %2$s kirjoittavat… - %1$s, %2$s ja muut kirjoittavat… + %1$s, %2$s ja muita kirjoittaa… Lähetä salattu viesti… Lähetä viesti (salaamaton)… Yhteys palvelimeen katkesi. - Viesteja ei lähetetty. %1$s tai %2$s? - Viestejä ei lähetetty koska huoneessa on tuntemattomia laitteita. %1$s tai %2$s? + Viesteja ei lähetetty. %1$s vai %2$s\? + Viestejä ei lähetetty koska huoneessa on tuntemattomia laitteita. %1$s vai %2$s\? Lähetä kaikki uudelleen peru kaikki Lähetä lähettämättömät viestit Poista lähettämättömät viestit Tiedostoa ei löydy - Et saa lähettää viestejä tähän huoneeseen + Sinulla ei ole oikeutta lähettää viestejä tähän huoneeseen Luota @@ -367,9 +375,9 @@ Salli Riotin käyttää yhteystietojasi? Sormenjälki (%s): Palvelimen identiteettiä ei voitu vahvistaa. Tämä voi tarkoittaa että joku yrittää kaapata sinun viestintääsi tai että laitteesi ei luota palvelimen varmenteeseen. - Jos palvelimen ylläpitäjä sanoo että tämä on odotettua, varmista että alla oleva sormenjälki on sama kuin hänen antama. - Sertifikaatti johon laitteesi luotti aikaisemmin on vaihtunut. Tämä on HYVIN EPÄTAVALLISTA. Suositellaan että ET hyväksy tätä uutta sertifikaattia. - Sertifikaatti on vaihtunut luotetusta sertifikaatista uuteen. Palvelin on voinut uudistaa sertifikaattinsa. Ota yhteyttä palvelimen ylläpitäjään ja selvitä oikean sertifikaatin sormenjälki. + Jos palvelimen ylläpitäjä on ilmoittanut, että tämä on odotettua, varmista että alla oleva sormenjälki on sama kuin hänen antamansa. + Sertifikaatti johon laitteesi luotti aikaisemmin on vaihtunut. Tämä on HYVIN EPÄTAVALLISTA. On suositeltavaa, että ET hyväksy tätä uutta sertifikaattia. + Sertifikaatti on vaihtunut ennestään luotetusta ei-luotettuun. Palvelin on voinut uusia sertifikaattinsa. Kysy palvelimen ylläpitäjältä, mikä sormenjäljen pitäisi olla. Hyväksy sertifikaatti vain, jos palvelimen ylläpitäjä on julkaissut sormenjäljen, joka täsmää yllä olevan kanssa. @@ -378,7 +386,7 @@ Salli Riotin käyttää yhteystietojasi? Tiedostot Asetukset - Epämuotoinen Matrix-ID. Anna sähköpostiosoite tai Matrix-ID (esim. \'@tunnus:domain\') + Epämuotoinen tunnus. Anna sähköpostiosoite tai Matrix-tunnus (esim. \'@tunnus:verkkotunnus\') KUTSUTUT JÄSENET @@ -455,7 +463,7 @@ Salli Riotin käyttää yhteystietojasi? Taustasynkronointi Käytä taustasynkronointia - Synkronoinnin maksimiaikaväli + Synkronointipyynnön aikakatkaisu Viive jokaisen pyynnön välillä sekunti sekuntia @@ -490,22 +498,23 @@ Salli Riotin käyttää yhteystietojasi? Laitteen nimi Viimeksi käytetty %1$s @ %2$s - Tämä toimenpide vaatii lisätunnistautumisen.\Anna salasanasi jatkaaksesi. + Tämä toimenpide vaatii lisätunnistautumisen. +\nSyötä salasanasi jatkaaksesi. Tunnistautuminen Salasana: Lähetä - Kirjatuneena + Kirjautuneena nimellä Kotipalvelin Identiteettipalvelin Odotetaan vahvistusta - Tarkista sähköpostisi ja seuraa sinne saamaasi linkkiä. Kun olet tehnyt tämän, paina "jatka". + Tarkista sähköpostisi ja klikkaa sinne saamaasi linkkiä. Kun olet tehnyt tämän, paina jatka. Sähköpostin vahvistaminen epäonnistui. Tarkista sähköpostisi ja avaa lähettämässämme viestissä oleva linkki. Tämän jälkeen paina painiketta ”jatka”. - Kyseinen sähköpostiosoite on jo käytössä. + Tämä sähköpostiosoite on jo käytössä. Tätä sähköpostiosoitetta ei löytynyt. - Kyseinen puhelinnumero on jo käytössä. + Tämä puhelinnumero on jo käytössä. Vaihda salasana Nykyinen salasana @@ -530,7 +539,7 @@ Salli Riotin käyttää yhteystietojasi? Puhelinnumeron varmennus Lähetimme aktivointikoodin tekstiviestinä. Syötä aktivointikoodi alapuolelle. Anna aktivointikoodi - Puhelinnumeron aktivointi epäonnistui + Puhelinnumeron validointi epäonnistui Aktivointikoodi @@ -552,23 +561,23 @@ Salli Riotin käyttää yhteystietojasi? Listaa tämä huone huoneluettelossa Huoneen pääsy Huoneen historian luettavuus - Kuka saa lukea huoneen historiaa? - Kuka saa päästä tähän huoneeseen? + Kuka voi lukea huoneen historiaa\? + Kuka pääsee tähän huoneeseen\? Kuka tahansa - Vain jäsenet (alkaen tämän asetuksen asettamisesta) - Vain jäsenet (alkaen niiden kutsumisesta) - Vain jäsenet (alkaen niiden liittymisestä) + Vain jäsenet (tämän asetuksen valitsemisesta alkaen) + Vain jäsenet (heidän kutsumisestaan alkaen) + Vain jäsenet (heidän liittymisestään alkaen) - Linkittääksesi huoneeseen sillä pitää olla osoite. + Linkittääksesi huoneeseen, sillä pitää olla osoite. Vain kutsutut henkilöt Kaikki, jotka tietävät huoneen osoitteen (paitsi vieraat) Kaikki jotka tietävät huoneen osoitteen, mukaanlukien vieraat - Bannatut käyttäjät + Porttikiellon saaneet käyttäjät Lisäasetukset @@ -576,18 +585,18 @@ Salli Riotin käyttää yhteystietojasi? Osoitteet Kokeelliset asetukset Nämä ovat kokeellisia asetuksia jotka voivat mennä rikki. Käytä varoen. - Salaus - Salaus on käytössä + Päästä päähän -salaus + Päästä päähän -salaus on käytössä Kirjaudu ulos salauksen aktivoimiseksi. Lähetä salatut viestit vain vahvistetuille laitteille - Salattuja viestejä ei lähetetä vahvistamattomille laitteille tässä huoneessa. + Älä lähetä tältä laitteelta salattuja viestejä tämän huoneen vahvistamattomille laitteille. Huoneella ei ole paikallisia osoitteita Uusi osoite (esim. #foo:matrix.org") - Väärä osoitteen muoto - \'%s\' ei ole oikea muoto osoitteelle + Virheellinen aliaksen muoto + \'%s\' ei ole kelvollinen muoto aliakselle Tälle huoneelle ei ole määritetty pääosoitetta. Pääosoitevaroitus @@ -605,10 +614,10 @@ Salli Riotin käyttää yhteystietojasi? Luettelo - %s yritti löytää tietyn kohdan huoneen historiassa, mutta sitä ei löytynyt. + %s yritti ladata tietyn kohdan huoneen historiassa, mutta sitä ei löytynyt. - Salauksen lisätiedot + Päästä päähän -salauksen lisätiedot Tapahtuman tiedot Käyttäjän Matrix-ID @@ -628,7 +637,7 @@ Salli Riotin käyttää yhteystietojasi? Vie salatun huoneen avaimet Vie huoneen avaimet - Säästä avaimet paikalliseen tiedostoon + Vie avaimet paikalliseen tiedostoon Vie Anna salasana Vahvista salasana @@ -636,7 +645,7 @@ Salli Riotin käyttää yhteystietojasi? \n \nVaroitus: tämä tiedosto saatetaan poistaa, mikäli Riot poistetaan. - Tuo salatun huoneen avaimet + Tuo päästä päähän -salatun huoneen avaimet Tuo huoneen avaimet Tuo avaimet paikallisesta tiedostosta Tuo @@ -648,7 +657,7 @@ Salli Riotin käyttää yhteystietojasi? Kielletty tuntematon laite - none + ei mitään Vahvista Poista vahvistus @@ -656,14 +665,13 @@ Salli Riotin käyttää yhteystietojasi? Poista kielto Vahvista laite - Vahvistaaksesi että tähän laitteeseen voi luottaa, ota yhteyttä sen omistajaan jollain muulla tavalla (esimerkiksi soittamalla tai tapaamalla) ja varmista että hänen laitteen avain on sama kuin alla oleva: - Jos avain täsmää, paina painiketta “vahvista”. Jos avain ei täsmää, se tarkoittaa, että jokin tuntematon osapuoli lukee keskustelujanne. Tässä tapauksessa paina painiketta “kiellä”. + Vahvistaaksesi, että tähän laitteeseen voi luottaa, ota yhteyttä sen omistajaan jollain muulla tavalla (esimerkiksi soittamalla tai tapaamalla) ja varmista että hänen laitteensa avain on sama kuin alla oleva: + Jos avain täsmää, paina painiketta \"vahvista\". Jos avain ei täsmää, se tarkoittaa, että jokin tuntematon osapuoli lukee keskustelujanne. Tässä tapauksessa paina painiketta \"kiellä\". \nTulevaisuudessa tämä varmennusprosessi tulee olemaan hienostuneempi. Vahvistan, että avaimet täsmäävät - Riot tukee viestien salausta. Kirjaudu sisään uudelleen ottaaksesi salaus käyttöön. - -Voit tehdä sen nyt tai myöhemmin sovelluksen asetuksissa. + Riot tukee päästä päähän -salausta. Kirjaudu sisään uudelleen ottaaksesi salaus käyttöön. +\nVoit tehdä sen nyt tai myöhemmin sovelluksen asetuksissa. Huoneessa on tuntemattomia laitteita @@ -672,7 +680,7 @@ Voit tehdä sen nyt tai myöhemmin sovelluksen asetuksissa. Valitse huoneluettelo Palvelin saattaa olla tavoittamattomissa tai ylikuormitettu - Syötä kotipalvelin jolta listataan julkiset huoneet + Syötä kotipalvelin, jolta julkiset huoneet listataan Kotipalvelimen URL Kaikki huoneet palvelimella %s Kaikki alkuperäiset %s huoneet @@ -714,7 +722,7 @@ Voit tehdä sen nyt tai myöhemmin sovelluksen asetuksissa. Musta teema Synkronoidaan… - Seuraa tapahtumia + Kuunnellaan tapahtumia Korostetut ilmoitukset Hiljaiset ilmoitukset @@ -729,15 +737,15 @@ Voit tehdä sen nyt tai myöhemmin sovelluksen asetuksissa. Ilmoitusääni Viesti sisältää näyttönimeni Viesti sisältää käyttäjänimeni - Näytä aikaleimat 12 tunnin jaksoissa + Näytä aikaleimat 12 tunnin muodossa Analytiikka Tarvitse oikeudet pienoissovellusten hallintaan tässä huoneessa Pienoissovelluksen luonti epäonnistui - %1$s listättiin %2$s toimesta - %1$s poistettiin %2$s toimesta - Luo konferenssipuhelu jitsin avulla + %2$s lisäsi %1$s:n + %2$s poisti %1$s:n + Luo konferenssipuheluita jitsin avulla Haluatko varmasti poistaa pienoissovelluksen tästä huoneesta\? @@ -749,12 +757,12 @@ Voit tehdä sen nyt tai myöhemmin sovelluksen asetuksissa. room_id puuttuu pyynnöstä. user_id puuttuu pyynnöstä. Huone %s ei ole näkyvillä. - Lisää Matrix sovellus + Lisää Matrix-sovelluksia Käytä järjestelmän kamerasovellusta Lisäsit uuden laitteen \'%s\', joka pyytää salausavaimia. - Tunnistamaton laite \'%s\' haluaa salausavaimet. + Vahvistamaton laitteesi \'%s\' pyytää salausavaimia. Aloita varmennus Jaa ilman varmennusta Hylkää pyyntö @@ -786,17 +794,17 @@ Voit tehdä sen nyt tai myöhemmin sovelluksen asetuksissa. Yhteisöt Ei ryhmiä - Oletko varma, että haluat aloittaa uuden keskustelun %s kanssa? + Oletko varma, että haluat aloittaa uuden keskustelun käyttäjän %s kanssa\? Oletko varma että haluat aloittaa äänipuhelun? Oletko varma, että haluat aloittaa videopuhelun? Ryhmälistaus - Haluatko varmasti estää tämän käyttäjän pääsyn tähän keskusteluun\? + Haluatko varmasti antaa tälle käyttäjälle porttikiellon tähän keskusteluun\? Kaikki viestit (äänekäs) Kaikki viestit - Vain huomiot + Vain maininnat Vaimenna Lisää pikakuvake aloitusruudulle @@ -806,9 +814,9 @@ Voit tehdä sen nyt tai myöhemmin sovelluksen asetuksissa. Tyyli Ilmoitukset - Uusi ID tunnus (esim. +foo:matrix.org) - Virheellinen ID - \'%s\' ei ole sallittu ID + Uusi yhteisötunnus (esim. +foo:matrix.org) + Virheellinen yhteisötunnus + \'%s\' ei ole sallittu yhteisötunnus Luo @@ -854,7 +862,7 @@ Voit tehdä sen nyt tai myöhemmin sovelluksen asetuksissa. Lähetä kirjoitusilmoitukset Näytä lukukuittaukset Näytä liittymiset ja poistumiset - Näytä tilitapahtumat + Näytä tilin tapahtumat Esikatsele media ennen lähettämistä Lähetä ääniviestejä @@ -883,7 +891,7 @@ Voit tehdä sen nyt tai myöhemmin sovelluksen asetuksissa. Haluatko lisätä paketteja? - Tarkista ja hyväksy tämän kotipalvelimen käytännöt: + Lue ja hyväksy tämän kotipalvelimen käytännöt: Avainten varmuuskopiointi Käytä avainten varmuuskopiointia @@ -902,7 +910,7 @@ Haluatko lisätä paketteja? Puhu Tyhjennä Tätä toimintoa ei voi tehdä puuttuvien oikeuksien takia. - Soita joka tapauksessa + Soita silti Valmis Keskeytä @@ -911,8 +919,8 @@ Haluatko lisätä paketteja? Lähetä ääntä - mene… - Yhtään ulkopuolista ohjelmaa tämän toiminnon suorittamiseksi ei löytynyt. + jatka sovelluksella… + Yhtään ulkopuolista sovellusta tämän toiminnon suorittamiseksi ei löytynyt. Pyydä salausavaimia uudelleen muilta laitteiltasi. @@ -932,7 +940,7 @@ Haluatko lisätä paketteja? Käyttäjälista Avaa otsikko - Päivitetään… + Synkronoidaan… yksi aktiivinen käyttäjä %d aktiivista käyttäjää @@ -946,28 +954,28 @@ Haluatko lisätä paketteja? %d s - 1 m - %d m + 1 min + %d min 1 h %d h - 1 d - %d d + 1 pv + %d pv Nyt %1$s Oli %1$s %2$s sitten - Potkaise + Poista huoneesta Näytä tämän käyttäjän kaikki viestit\? \n \nHuomioi, että tämä toiminto käynnistää Riotin uudelleen ja siinä voi kestää jonkin aikaa. - Oletko varma, että haluat potkia tämän käyttäjän tästä keskustelusta\? - Oletko varma, että haluat potkia nämä käyttäjät tästä keskustelusta\? + Oletko varma, että haluat poistaa tämän käyttäjän tästä keskustelusta\? + Oletko varma, että haluat poistaa nämä käyttäjät tästä keskustelusta\? Syy @@ -1000,10 +1008,10 @@ Haluatko lisätä paketteja? Ilmoitusten yksityisyys Ratkaise ilmoituksien ongelmia - Ongelmanmääritys + Vianmääritys Suorita testit uudelleen Suoritetaan… (%1$d / %2$d) - Ongelmanmäärityksessä ei löytynyt ongelmia. Jos et silti saa ilmoituksia, lähetäthän virheraportin, jotta meidän on helpompi tutkia ongelmaa. + Vianmäärityksessä ei löytynyt ongelmia. Jos et edelleenkään saa ilmoituksia, lähetä virheraportti, jotta meidän on helpompi tutkia ongelmaa. Yksi tai useampi testi epäonnistui, kokeile ehdotettuja korjauksia. Yksi tai useampi testi epäonnistui. Lähetäthän virheraportin, jotta meidän on helpompi tutkia ongelmaa. @@ -1013,16 +1021,16 @@ Haluatko lisätä paketteja? \nTarkistathan järjestelmäasetukset. Avaa asetukset - Tunnuksen asetukset. - Ilmoitukset ovat käytössä tunnuksellasi. - Ilmoitukset eivät ole käytössä tunnuksellasi. -\nTarkistathan tunnuksesi asetukset. + Tilin asetukset. + Ilmoitukset ovat käytössä tililläsi. + Ilmoitukset eivät ole käytössä tililläsi. +\nTarkista tilisi asetukset. Ota käyttöön Laitteen asetukset. Ilmoitukset ovat käytössä tällä laitteella. - Ilmoitukset eivät ole käytössä tällä laitteella. -\nTarkistathan Riotin asetukset. + Ilmoituksia ei sallita tällä laitteella. +\nTarkista Riotin asetukset. Ota käyttöön Mukautetut asetukset. @@ -1033,7 +1041,7 @@ Haluatko lisätä paketteja? Play Services -palvelun tarkistus Google Play Services APK on saatavilla ja ajan tasalla. - Riot käyttää Google Play Services -palvelua ilmoitusten välittämiseen, mutta se ei näytä olevan määritettynä oikein: + Riot käyttää Google Play Services -palvelua ilmoitusten välittämiseen, mutta se ei näytä olevan määritetty oikein: \n%1$s Korjaa Play Services -palvelu @@ -1046,9 +1054,9 @@ Haluatko lisätä paketteja? \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. [%1$s] \nTämä virhe ei ole Riotin ratkaistavissa. Se voi johtua useasta eri syystä. Ehkä tämä toimii, jos yrität myöhemmin. Voit myös tarkistaa, että Google Play Services -palvelu ei ole rajoitettuna järjestelmäasetuksissa, ja että laitteesi kello on oikein. Tämä voi tapahtua myös mukautetun käyttöjärjestelmän kanssa. - [%1$s] -\nTämä virhe ei ole Riotin ratkaistavissa. Tässä puhelimessa ei ole Google-tunnusta. Lisääthän laitteeseesi Google-tunnuksen tätä toimintoa varten. - Lisää tunnus + [%1$s] +\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. @@ -1063,24 +1071,24 @@ Haluatko lisätä paketteja? Ilmoituspalvelun automaattinen uudelleenkäynnistys Palvelu suljettiin ja se käynnistyi uudelleen automaattisesti. - Palvelu epäonnistui uudelleenkäynnistyksessä + Palvelun uudelleenkäynnistäminen epäonnistui - Ilmoituspalvelun käynnistys laitteen käynnistyessä + Käynnistä laitteen käynnistyessä Palvelu käynnistetään, kun laite käynnistetään uudelleen. Palvelua ei käynnistetä laitteen uudelleenkäynnistyksen yhteydessä. Et tule saamaan ilmoituksia ennen kuin Riot on käynnistetty uudelleen. Ota käyttöön automaattinen käynnistys Tarkista taustapalveluiden rajoitukset - Taustapalveluiden rajoitukset ovat pois käytöstä. Tämä testi pitäisi ajaa mobiiliyhteyden (ilman wlania) kanssa. + Taustapalveluiden rajoitukset ovat pois käytöstä. Tämä testi tulee ajaa mobiilidatayhteydellä (ilman wlania). \n%1$s - Taustapalveluiden rajoitukset ovat käytössä. -\nTyö, jota Riot yrittää tehdä tulee olemaan aggressiivisesti rajoitettua silloin, kun se on taustala, ja tämä saattaa vaikuttaa ilmoituksiin. + Taustapalveluiden rajoitukset ovat käytössä. +\nTyötä, jota Riot yrittää tehdä, rajoitetaan aggressiivisesti, kun se on taustalla, mikä saattaa vaikuttaa ilmoituksiin. \n%1$s Poista rajoitukset - Akkukäytön optimointi - Akkukäytön optimointi ei vaikuta Riotin toimintaan. - Jos käyttäjä jättää laitteen ilman latausjohtoa niin, että näyttö on pois päältä, laite siirtyy torkkutilaan. Tämä estää sovelluksia käyttämästä verkkoyhteyksiä ja lykkää niiden töitä, synkronointeja ja perushälytyksiä. + Akunkäytön optimointi + Akunkäytön optimointi ei vaikuta Riotin toimintaan. + Jos käyttäjä jättää laitteen paikalleen ilman latausjohtoa niin, että näyttö on pois päältä, laite siirtyy torkkutilaan. Tämä estää sovelluksia käyttämästä verkkoyhteyksiä ja lykkää niiden töitä, synkronointeja ja perushälytyksiä. Jätä optimointi huomiotta Normaali @@ -1100,10 +1108,10 @@ Haluatko lisätä paketteja? Salausavainten hallinta Esikatsele linkkejä keskustelussa (vaatii tuen kotipalvelimelta). - Anna muiden tietää, kun olet kirjoittamassa viestiä. - Muotoile viestit Markdownilla ennen niiden lähettämistä. Tämä sallii edistyneen muotoilun, kuten asteriskien käytön kursiivin tekstin aikaansaamiseksi. + Ilmoita muille, että olet kirjoittamassa viestiä. + Muotoile viestit Markdownilla ennen niiden lähettämistä. Tämä sallii edistyneen muotoilun, kuten asteriskien käytön kursivoidun tekstin aikaansaamiseksi. Paina lukukuittauksesta nähdäksesi tarkemman listan. - Ei vaikuta kutsuihin, potkuihin ja estoihin. + Ei vaikuta kutsuihin, poistamisiin ja porttikieltoihin. Sisältää hahmokuvat ja näyttönimien vaihdot. Ilmoitusten yksityisyys Riot voi ajaa itseään taustalla hallitakseen sinulle näytettäviä ilmoituksia turvallisesti ja yksityisesti. Tämä voi vaikuttaa akunkäyttöön. @@ -1115,7 +1123,7 @@ Haluatko lisätä paketteja? \nSeuraavalla ruudulla sinulta kysytään lupaa, jotta Riot voi pitää itsensä käynnissä taustalla. Anna oikeus - Riot kerää anonyymiä analytiikkaa, jotta voimme parantaa tätä sovellusta. + Riot kerää anonyymiä analytiikkaa sovelluksen parantamiseksi. Otathan analytiikan käyttöön Riotin parantamiseksi. Kyllä, haluan auttaa! @@ -1128,7 +1136,7 @@ Haluatko lisätä paketteja? Et ole yhdenkään yhteisön jäsen. - Luo salalause suojataksesi tallennetut avaimet. Tarvitset saman salalauseen, jotta voit ottaa tallennetut avaimet käyttöön. + Luo salalause salataksesi viedyt avaimet. Tarvitset saman salalauseen avainten tuomiseen. Salattujen viestien palautus Hallitse avainten varmuuskopiointia @@ -1378,7 +1386,7 @@ Jotta et menetä mitään, automaattiset päivitykset kannattaa pitää käytös Kirjaudu sisään kertakirjautumisella Tämä osoite ei ole saavutettavissa. Tarkistathan osoitteen - Laitteesi käyttää vanhaentunutta, haavoittuvaista TLS-protokollan versiota. Turvallisuutesi vuoksi et pysty yhdistämään + Laitteesi käyttää vanhentunutta, haavoittuvaista TLS-protokollan versiota. Turvallisuutesi vuoksi et pysty yhdistämään Lähetä viesti enter-näppäimellä Näppäimistön enter-näppäin lähettää viestin sen sijaan, että se lisäisi rivinvaihdon @@ -1422,7 +1430,7 @@ Jotta et menetä mitään, automaattiset päivitykset kannattaa pitää käytös Toista sulkimen ääni Merkitse luetuksi - Sovelluksen ei tarvitse pitää yhteyttä kotipalvelimeen, jonka pitäisi vähentää akunkäyttöä + Sovelluksen ei tarvitse pitää yhteyttä kotipalvelimeen taustalla, minkä pitäisi vähentää akunkäyttöä %1$s: yksi viesti %1$s: %2$d viestiä @@ -1441,4 +1449,21 @@ Jotta et menetä mitään, automaattiset päivitykset kannattaa pitää käytös Valitettavasti konferenssipuhelut Jitsin kanssa eivät toimi vanhoissa laitteissa (laitteet, joissa on Android 5.0 tai vanhempi) + tuntematon IP-osoite + Uusi laite pyytää salausavaimia. +\nLaitteen nimi: %1$s +\nViimeksi nähty: %2$s +\nJos et kirjautunut toisella laitteella, voit jättää tämän pyynnön huomiotta. + Jaa + Parhaan turvallisuuden takaamiseksi suosittelemme, että teet tämän kasvotusten tai muun luotetun viestintäkeinon avulla. + Näytä pyyntö + Selvä + + Pyyntö peruttu + Laite vastaanotti odottamattoman viestin + Virheellinen viesti vastaanotettu + Avain ei täsmää + Käyttäjä ei täsmää + Tuntematon virhe + diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index c20a15e1..2f703bb8 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -1405,4 +1405,66 @@ Si vous n’avez pas configuré de nouvelle méthode de récupération, un attaq Désolé, les appels en visioconférence avec Jitsi ne sont pas pris en charge sur les vieux appareils (avec une version d\'Android antérieure à 5.0) + Vérifier l’appareil + + adresse IP inconnue + Un nouvel appareil demande les clés de chiffrement. +\nNom de l’appareil : %1$s +\nVu : %2$s +\nSi vous ne vous êtes pas connecté sur un autre appareil, ignorez cette demande. + Un appareil non vérifié demande les clés de chiffrement. +\nNom de l’appareil : %1$s +\nVu : %2$s +\nSi vous ne vous êtes pas connecté sur un autre appareil, ignorez cette demande. + + Vérifier + Partager + Demande de partage de clé + Ignorer + + Vérifier en comparant une courte chaîne de caractères. + Pour une sécurité maximale, nous vous recommandons de faire cela en personne ou d’utiliser d’autres moyens de communication sécurisés. + Commencer la vérification + Demande de vérification entrante + Vérifiez cet appareil pour le marquer comme fiable. Faire confiance aux appareils de vos partenaires vous permet d’être plus serein en utilisant les messages chiffrés de bout en bout. + La vérification de cet appareil le marquera comme fiable, et marquera aussi votre appareil comme fiable auprès de votre partenaire. + + Vérifiez cet appareil en confirmant que les émojis suivant apparaissent sur l’écran de votre partenaire + Vérifiez cet appareil en confirmant que les chiffres suivants apparaissent sur l’écran de votre partenaire + + Vous avez reçu une demande de vérification entrante. + Voir la demande + Attente de la confirmation du partenaire… + + Vérifié ! + Vous avez bien vérifié cet appareil. + Les messages sécurisés avec cet utilisateur sont chiffrés de bout en bout et ne peuvent être lus par des tiers. + Compris + + Rien n’apparaît \? Tous les clients ne prennent pas encore en charge la vérification interactive. Utilisez la vérification traditionnelle. + Utiliser la vérification traditionnelle. + + Vérification de clé + Demande annulée + Votre interlocuteur a annulé la vérification. +\n%s + La vérification est annulée. +\nMotif : %s + + Vérification d’appareil interactive + Demande de vérification + %s veut vérifier votre appareil + + L’utilisateur a annulé la vérification + Le processus de vérification a expiré + L’appareil n’est pas au courant de cette transaction + L’appareil ne peut pas s’accorder sur une méthode de concordance, de hachage, de MAC ou de SAS de clé + L’engagement de hachage ne correspond pas + Le SAS ne correspond pas + L’appareil a reçu un message inattendu + Un message non valide a été reçu + Non-concordance de clé + Non-concordance d’utilisateur + Erreur inconnue + diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index b2b437ef..397b5bd3 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -1404,4 +1404,66 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró Elnézést, Jitsi konferencia hívások a régi eszközökön (Android OS 5.0-nál régebbi) nem támogatottak + Eszköz ellenőrzése + + ismeretlen ip + Új eszköz kér titkosítási kulcsokat. +\nEszköz neve: %1$s +\nUtoljára látszott: %2$s +\nHa nem jelentkeztél be másik eszközön, hagyd figyelmen kívül a kérést. + Ellenőrizetlen eszköz kér titkosítási kulcsokat. +\nEszköz neve: %1$s +\nUtoljára látszott: %2$s +\nHa nem jelentkeztél be másik eszközzel, hagyd figyelmen kívül ezt a kérést. + + Ellenőriz + Megoszt + Kulcs Megosztási Kérés + Mellőz + + Rövid szöveggel ellenőriz. + A maximális biztonság érdekében azt javasoljuk, hogy személyesen vagy más megbízható kommunikációs csatornán tedd meg. + Ellenőrzés megkezdése + Ellenőrzési kérés érkezett + Eszköz ellenőrzése és beállítás megbízhatónak. A partnerek eszközeiben való megbízás megnyugtató lehet, ha végponttól végpontig titkosítást használsz. + Az eszköz ellenőrzése megbízhatónak fogja jelezni az eszközt és a partnernél a te eszközödet szintén megbízhatónak fogja jelezni. + + Eszköz ellenőrzése az alábbi emojik a partner képernyőjén való megjelenésének megerősítésével történik + Eszköz ellenőrzése az alábbi számok a partner képernyőjén való megjelenésének megerősítésével történik + + Bejövő ellenőrzési kérés érkezett. + Kérés megjelenítése + Várakozás a partner megerősítésére… + + Ellenőrizve! + Sikeresen ellenőrizted az eszközt. + Biztonságos üzenetek ezzel a felhasználóval végponttól végpontig titkosítva vannak és harmadik fél nem tudja elolvasni. + Értem + + Nem jelenik meg semmi\? Nem minden kliens támogatja az interaktív ellenőrzést. Használd a hagyományos ellenőrzést. + Hagyományos ellenőrzés használata. + + Kulcs Ellenőrzés + Kérés törölve + A másik fél megszakította az ellenőrzést. +\n%s + Az ellenőrzés megszakítva. +\nOk: %s + + Interaktív Eszköz Ellenőrzés + Ellenőrzési kérés + %s szeretné ellenőrizni az eszközödet + + A felhasználó megszakította az ellenőrzést + Az ellenőrzési folyamat időtúllépés miatt megszakadt + Az eszköz nem tud a tranzakcióról + Az eszköz nem tud megegyezni a kulcs kezelésről, hash, MAC vagy SAS metódus + A hash nem egyezik + A SAS nem egyezik + Az eszköz egy váratlan üzenetet kapott + Érvénytelen üzenet érkezett + Kulcsok nem egyeznek + A felhasználó nem egyezik + Ismeretlen Hiba + diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 6130db45..39d37c5e 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -1449,4 +1449,66 @@ Per essere certo di non perdere nulla, mantieni gli aggiornamenti attivi."Spiacenti, le chiamate di gruppo con Jitsi non sono supportate sui vecchi dispositivi (con Android precedenti al 5.0) + 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. + + Verifica + Condividi + Richiesta condivisione chiave + Ignora + + Verifica confrontando una breve stringa. + Per la massima sicurezza, consigliamo di farlo di persona o di utilizzare un altro metodo di comunicazione fidato. + Inizia la verifica + Richiesta di verifica in arrivo + Verifica questo dispositivo per segnarlo come fidato. Verificare i dispositivi dei partner ti dà una maggiore tranquillità quando usi messaggi cifrati end-to-end. + Verificare questo dispositivo lo segnerà come fidato e segnerà anche il tuo dispositivo come fidato per il tuo partner. + + Verifica questo dispositivo confermando che il seguente emoji compare sullo schermo del partner + Verifica questo dispositivo confermando che i seguenti numeri compaiono sullo schermo del partner + + Hai ricevuto una richiesta di verifica. + Vedi la richiesta + In attesa che il partner confermi… + + Verificato! + Hai verificato correttamente questo dispositivo. + I messaggi sicuri con questo utente sono cifrati end-to-end e impossibili da leggere da parte di terze parti. + Capito + + Non compare nulla\? Non tutti i client supportano già la verifica interattiva. Usa la verifica classica. + Usa la verifica classica. + + Verifica chiave + Richiesta annullata + L\'altra parte ha annullato la verifica. +\n%s + La verifica è annullata. +\nMotivo: %s + + Verifica dispositivo interattiva + Richiesta di verifica + %s vuole verificare il tuo dispositivo + + L\'utente ha annullato la verifica + Il processo di verifica è scaduto + Il dispositivo non sa della transazione + Il dispositivo non riesce ad accordarsi sulla chiave, hash, MAC, o metodo SAS + L\'hash non corrispondeva + Il SAS non corrispondeva + Il dispositivo ha ricevuto un messaggio inaspettato + È stato ricevuto un messaggio non valido + Chiave non corrispondente + Utente non corrispondente + Errore sconosciuto + diff --git a/vector/src/main/res/values-ja/strings.xml b/vector/src/main/res/values-ja/strings.xml index 440ecf81..ed6b0551 100644 --- a/vector/src/main/res/values-ja/strings.xml +++ b/vector/src/main/res/values-ja/strings.xml @@ -8,7 +8,7 @@ 履歴 OK - 取消 + キャンセル 保存 退室 送信 @@ -33,10 +33,10 @@ 対話 部屋 - 部屋を検索 - お気に入りを検索 - 対話を検索 - 部屋を検索 + 部屋名で絞り込み + お気に入りで絞り込み + 対話で絞り込み + 部屋で絞り込み 招待中 低優先度 @@ -54,8 +54,8 @@ 不具合発生時の動作記録を送信 動作記録を送信 開発者が問題を診断するために、このクライアントの動作記録がバグの報告と一緒に送信されます。このバグの報告は、ログとスクリーンショットを含め、公開されません。上記文章のみを送信したい場合は以下のチェックを解除してください: - あなたは不満で端末を振っているようです。不具合を報告しますか? - 前回アプリケーションは正常に停止しませんでした。クラッシュを報告しますか? + あなたは不満で端末を振っているようです。不具合報告の画面を開きますか? + 前回アプリケーションは正常に停止しませんでした。クラッシュ報告の画面を開きますか? 不具合を報告しました 不具合の報告の送信に失敗しました (%s) @@ -130,7 +130,7 @@ 暗いテーマ 黒いテーマ - 同期中 + 同期中… メッセージ メンバー詳細 引用 @@ -145,7 +145,7 @@ 送信中 (%s%%) このユーザ名はすでに使用されています - 除去 + 削除 参加 あなたは %s さんに呼ばれてこの部屋へ参加しました 新しい対話 @@ -196,7 +196,7 @@ アプリを閉じても新着を確認 新着確認を失敗とするまでの時間 - 再度新着確認を送るまでの時間 + リクエストの間隔 一時保存を消去 画像等の一時保存を消去 画像等を一時保存する期間 @@ -212,8 +212,8 @@ 端末の電話帳の使用を許可 電話帳の国番号 端末 - 発言時刻を常に表示 - 発言時刻を12時間形式で表示 (例 午後2:30) + 全てのメッセージにタイムスタンプを表示 + タイムスタンプを12時間形式で表示 端末詳細 ID(端末固有番号) @@ -227,13 +227,13 @@ 受諾 ログイン中のアカウント - 言語選択 + 言語を選択 - 操作に使用する言語 + 言語 端末操作表示 認証を確認中 電子メールを確認して、本文中のURLをクリックしてください。 完了したら「続ける」をクリックしてください。 - この電子メールアドレスは既に使われています + この電子メールアドレスは既に使われています。 あなたのパスワードは更新されました 国を選択 @@ -272,8 +272,8 @@ 参加者のみ (参加した時点から) この部屋に招待された人のみ参加可能 - 誰でも部屋に参加できる (ゲストユーザは不可) - 誰でも部屋に参加できる (ゲストユーザも許可) + 部屋のリンクを知る人なら誰でも(ゲストユーザを除く) + 部屋のリンクを知る人なら誰でも(ゲストユーザも含む) 再入室禁止された参加者 @@ -339,10 +339,10 @@ 部屋一覧 利用者一覧 送信する - ログアウト - 新規登録 + サインアウト + アカウントを作成 ログイン - 新規登録 + アカウントを作成 送信 飛ばす ユーザ名または電子メール @@ -391,7 +391,7 @@ ログイン要求が多すぎてサーバが対応できません まだクリックされていないeメールのリンク - "以下の容量で画像を送信 " + 以下の容量で画像を送信 この端末のエンドツーエンド暗号鍵を生成し、接続先サーバに公開鍵を送信するには、再度ログインする必要があります。 一度回線を切断します。 ご不便おかけしてすみません。 @@ -403,7 +403,7 @@ 通話着信中 ビデオ通話の着信中 音声通話の着信中 - 通話中 + 通話中… 映像の接続に失敗 カメラを開始できません @@ -472,13 +472,13 @@ 接続先サーバ 認証サーバ - 電子メールの送信に失敗しました: メールアドレスが見つかりません - この電話番号は既に使用されています + メールアドレスが見つかりません。 + この電話番号は既に使用されています。 パスワード変更 - 古いパスワード + 現在のパスワード 新しいパスワード - 確認のパスワード + 新しいパスワードの確認 パスワードの更新に失敗しました %sのすべてのメッセージを表示しますか? @@ -535,7 +535,7 @@ Riotからあなた個人の電話帳への検索要求を許可する場合は Riotアプリがあなたの電話帳へアクセスすることを許可しますか? - 申し訳ありません..権限がないために操作が実行されませんでした + 申し訳ありません。権限がないために操作が実行されませんでした 発言を通報する 既読 @@ -555,7 +555,7 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま この部屋のウィジェットを管理する権限が必要です ウィジェットの作成に失敗しました %1$s は %2$s によって追加されました - ウィジェットを削除してもよろしいですか? + ウィジェットをこの部屋から削除してもよろしいですか? サーバーが利用できないか、オーバーロードしている可能性があります この部屋は検証されていない不明なデバイスが含まれています。 つまり、デバイスが主張するユーザーに属しているという保証はありません。 @@ -573,7 +573,7 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま 一致する場合は、下の確認ボタンを押します。そうでない場合は、他の誰かがこのデバイスを盗聴しているので、代わりにブロックボタンを押すことをおすすめします。将来この検証プロセスはより洗練されたものになるでしょう。 デバイスの検証 不明なデバイス - このデバイスから未認証のデバイスに暗号化されたメッセージを送信しない + このデバイスから未認証のデバイスに暗号化されたメッセージを送信しない。 認証済みデバイスに対してのみ暗号化 インポート @@ -596,8 +596,7 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま レセプトリストを読み込む ダウンロードファイルに保存しますか? - この招待は%sさんに送られましたが、このアカウントには関連づけられていません。 -他のアカウントでログインするか、このメールアドレスをこのアカウントに追加できます。 + この招待は%sさんに送られましたが、このアカウントには関連づけられていません。 他のアカウントでログインするか、このメールアドレスをあなたののアカウントに追加できます。 あなたは%sにアクセスしようとしています。話し合いに参加しますか? 部屋 これは部屋のプレビューです。部屋でのやりとりはできません。 @@ -614,7 +613,7 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま 信用する 信用しない フィンガープリント (%s): - リモートサーバの身元を確認できませんでした。 + リモートサーバのアイデンティティを確認できませんでした。 誰かが不当にあなたの通信を傍受しているか、リモートサーバの証明書をあなたの電話が信用していない可能性があります。 サーバの管理者が、これは想定されていることであると言っているのであれば、以下のフィンガープリントが管理者によるフィンガープリントと一致していることを確認してください。 証明書はあなたの電話に信頼されていたものから変更されています。これはきわめて異常な事態です。この新しい証明書は承認しないことを強く推奨します。 @@ -634,10 +633,10 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま 招待 部屋のIDまたは部屋のエイリアスを入力してください - ディレクトリを検索中.. + ディレクトリを検索中… サードパーティの通知 - このアプリのシステムの情報を見る + このアプリのシステムの情報を見る。 アプリの情報 自分の表示名を含むメッセージ @@ -652,14 +651,14 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま データ節約モード - メールアドレスを認証できません。メールを確認して、そこに記載してあるリンクをクリックしてください。その後、「続ける」をクリックしてください + メールアドレスを認証できません。メールを確認して、そこに記載してあるリンクをクリックしてください。その後、「続ける」をクリックしてください。 この通知の対象を削除してよろしいですか? %1$s %2$sを削除してよろしいですか? コード - %sはこの部屋のタイムラインのある箇所を読み込もうとしましたが、見つかりませんでした。 + %s はこの部屋のタイムラインのある箇所を読み込もうとしましたが、見つかりませんでした。 イベント情報 ユーザID @@ -688,10 +687,10 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま 公開の部屋を表示するホームサーバを入力してください ホームサーバのURL %sサーバ上のすべての部屋 - すべてのローカルの%s部屋 + すべてのローカルの %s 部屋 - メッセージが未送信です。今%1$sまたは%2$sですか? - 不明なデバイスが存在しているため、メッセージを送ることができませんでした。今%1$sまたは%2$sですか? + メッセージが未送信です。今 %1$s または %2$s しますか? + 不明なデバイスが存在しているため、メッセージを送ることができませんでした。今 %1$s または %2$s しますか? 要求されたフィンガープリントキー Ed25519 jitsiを用いて会議通話を始める @@ -719,7 +718,7 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま コミュニティ - コミュニティを探す + コミュニティで絞り込み 招待 コミュニティ @@ -738,7 +737,7 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま ミュート ホーム画面へのショートカットを作成 - デフォルトでURLのプレビューを表示 + インラインURLプレビュー 通知 この部屋はコミュニティの特色を表示していません 所属するコミュニティ @@ -771,7 +770,7 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま 参加済 招待済 グループのメンバーをフィルタリングする - グループの部屋をフィルタリングする + グループの部屋を絞り込み 管理者はこのコミュニティの詳細を規定していません。 @@ -802,7 +801,7 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま %d 部屋 - %2$sに%1$s部屋見つかりました + %2$s に %1$s 部屋見つかりました 部屋の履歴を消す @@ -812,7 +811,7 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま 通知のプライバシー 標準 このアプリはバックグラウンド動作の権限が必要です - •通知はGoogle Cloud Messaging経由で送られます + • 通知はFirebase Cloud Messaging経由で送られます • 通知はメタデータのみを含みます スタンプを送る @@ -872,18 +871,18 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま %d 個選択済 低プライバシー - • 通知中のメッセージの内容は Matrixのホームサーバから直接安全に配置されています + • 通知中のメッセージの内容は Matrixのホームサーバから直接安全に入手しています "• "メタデータとメッセージのデータ を含む通知 • 通知は メッセージの内容を表示しません - 名前をあげられたときバイブレーションで通知 + ユーザの名前をあげるときバイブレーションで通知 送信の前にメディアをプレビュー アカウントを停止 自分のアカウントを停止 通知のプライバシー - Riotは通知を安全で内密に扱うため、バックグラウンドで動作できます(これによりバッテリー使用に影響が出ることがあります)。 + Riotは通知を安全で内密に扱うため、バックグラウンドで動作できます。これによりバッテリー使用に影響が出ることがあります。 許可を与える 他のオプションを選択 @@ -914,7 +913,7 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま 必要な変数が見つかりません。 変数が無効です。 メッセージを送信するには、キーボードのエンターキーを使用してください - ボイスメッセージを送信(ボイスメッセージを録音するには、サードパーティのアプリが必要です) + ボイスメッセージを送信 動作を表示 指定したIDのユーザをブロック @@ -937,7 +936,7 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま %d 部屋 - アバターを受け取る + アバターを読み込み %1$s ホームサーバを使用し続けるには、利用規約を読み、同意する必要があります。 エラー @@ -971,10 +970,10 @@ Matrixでのメッセージの可視性は電子メールと同様です。メ このホームサーバは月間アクティブユーザ上限に達しているため、 ユーザがログインできなくなることがあります このホームサーバは月間アクティブユーザ上限に達しています。 - この上限を上げるには、 %s してください。 - このサービスを使い続けるには、 %s してください。 + この上限を上げるには %s してください。 + このサービスを使い続けるには %s してください。 - 最初に部屋のメンバーのみを読み込むことによりパフォーマンスを向上 + 最初に部屋のメンバーのみを読み込むことによりパフォーマンスを向上。 あなたのホームサーバは部屋のメンバーの簡易読み込みをサポートしていません。後で試してください。 部屋のメンバーの簡易読み込み @@ -1015,4 +1014,14 @@ Matrixでのメッセージの可視性は電子メールと同様です。メ 理由 + サービスを初期化 + 鍵のバックアップ + 鍵のバックアップを使用 + デバイスを認証 + + 鍵のバックアップが終了していません。しばらくお待ちください… + 会議通話中。 +\n%1$s または %2$s として参加 + 音声 + ビデオ diff --git a/vector/src/main/res/values-nl/strings.xml b/vector/src/main/res/values-nl/strings.xml index 342a4ade..5d57a54d 100755 --- a/vector/src/main/res/values-nl/strings.xml +++ b/vector/src/main/res/values-nl/strings.xml @@ -41,7 +41,7 @@ Om een vergadering in dit groepsgesprek te starten heeft u uitnodigingsrechten nodig Kan de oproep niet starten Apparaatinformatie - Vergadergesprekken worden niet ondersteund in versleutelde kamers + Vergadergesprekken worden niet ondersteund in versleutelde gesprekken Toch sturen of Uitnodigen @@ -67,7 +67,7 @@ Thuis Favorieten Personen - Kamers + Gesprekken Gespreksnamen filteren @@ -88,10 +88,10 @@ Geen resultaten - Kamers + Gesprekken Gesprekscatalogus - Geen kamers - Geen publieke kamers beschikbaar + Geen gesprekken + Geen publieke gesprekken beschikbaar 1 gebruiker %d gebruikers @@ -298,7 +298,7 @@ %s heeft u uitgenodigd in dit gesprek Deze uitnodiging is naar %s verstuurd, maar die is niet geassocieerd met deze account. \nMisschien wilt u zich met een andere account aanmelden, of dit e-mailadres aan deze account toevoegen. - U probeert toegang te verkrijgen tot %s Zou u de kamer willen toetreden om aan het gesprek deel te nemen\? + U probeert toegang te verkrijgen tot %s. Zou u het gesprek willen toetreden om eraan deel te nemen\? een gesprek Dit is een voorvertoning van dit gesprek. Gespreksinteracties zijn uitgeschakeld. @@ -400,7 +400,7 @@ Zoeken Gespreksleden filteren Geen resultaten - KAMERS + GESPREKKEN BERICHTEN PERSONEN BESTANDEN @@ -409,14 +409,14 @@ TOETREDEN CATALOGUS FAVORIETEN - KAMERS + GESPREKKEN LAGE PRIORITEIT UITNODIGINGEN Gesprek beginnen Gesprek aanmaken Gesprek toetreden Treed een gesprek toe - Voer een gespreks-ID of -alias in + Voer een gespreks(bij)naam in Catalogus doorbladeren @@ -487,8 +487,8 @@ Contacten-toestemming Land voor telefoonboek Startscherm - Kamers met gemiste meldingen vastprikken - Kamers met ongelezen berichten vastprikken + Gesprekken met gemiste meldingen vastprikken + Gesprekken met ongelezen berichten vastprikken Apparaten Apparaatinformatie ID @@ -594,8 +594,8 @@ Dit gesprek heeft geen lokale adressen Nieuw adres (bv. #foo:matrix.org) - Ongeldig aliasformaat - ‘%s’ is geen geldig aliasformaat + Ongeldig bijnaamformaat + ‘%s’ is geen geldig bijnaamformaat U zult geen hoofdadres voor dit gesprek opgegeven hebben. Hoofdadreswaarschuwingen @@ -683,10 +683,10 @@ Kies een gesprekscatalogus Het kan zijn dat de server niet beschikbaar of overbelast is - Voer een thuisserver in om de publieke kamers ervan weer te geven + Voer een thuisserver in om de publieke gesprekken ervan weer te geven Thuisserver-URL - Alle kamers op server %s - Alle lokale kamers op %s + Alle gesprekken op server %s + Alle lokale gesprekken op %s Zoeken naar historische @@ -836,7 +836,7 @@ %1$s gesprek gevonden voor %2$s - %1$s gesprek gevonden voor %2$s + %1$s gesprekken gevonden voor %2$s Alle berichten (luid) Alle berichten @@ -882,14 +882,14 @@ Thuis Personen - Kamers + Gesprekken Geen gebruikers - Kamers + Gesprekken Toegetreden Uitgenodigd Groepsleden filteren - Groepskamers filteren + Groepsgesprekken filteren De gemeenschapsbeheerder heeft geen lange beschrijving gegeven voor deze gemeenschap. @@ -943,10 +943,10 @@ Nu doorlezen Account deactiveren - Dit zal uw account voorgoed onbruikbaar maken. U zult zich niet meer kunnen aanmelden, en niemand anders zal met dezelfde gebruikers-ID kunnen registreren. Dit zal er voor zorgen dat uw account alle kamers verlaat waar deze momenteel lid van is, en het verwijdert de accountgegevens van de identiteitsserver. Deze actie is onomkeerbaar. -\n -\nHet deactiveren van uw account zal er niet standaard voor zorgen dat de berichten die u hebt verzonden worden vergeten. Indien u wilt dat wij de berichten vergeten, vinkt u het vakje hieronder aan. -\n + Dit zal uw account voorgoed onbruikbaar maken. U zult zich niet meer kunnen aanmelden, en niemand anders zal met dezelfde gebruikers-ID kunnen registreren. Dit zal er voor zorgen dat uw account alle gesprekken verlaat waar deze momenteel lid van is, en het verwijdert de accountgegevens van de identiteitsserver. Deze actie is onomkeerbaar. +\n +\nHet deactiveren van uw account zal er niet standaard voor zorgen dat de berichten die u hebt verzonden worden vergeten. Indien u wilt dat wij de berichten vergeten, vinkt u het vakje hieronder aan. +\n \nDe zichtbaarheid van berichten in Matrix is gelijkaardig aan e-mails. Het vergeten van uw berichten betekent dat berichten die u verstuurd heeft niet meer gedeeld worden met nieuwe of ongeregistreerde gebruikers, maar geregistreerde gebruikers die al toegang hebben tot deze berichten zullen alsnog toegang hebben tot hun eigen kopie ervan. Vergeet alle berichten die ik heb verstuurd wanneer mijn account gedeactiveerd is (Let op: dit zal er voor zorgen dat toekomstige gebruikers een onvolledig beeld krijgen van gesprekken) Voer uw wachtwoord in om verder te gaan: @@ -992,7 +992,7 @@ Stel het machtsniveau van een gebruiker in Neemt rechten van gebruiker met gegeven ID af Nodigt gebruiker met gegeven ID uit in het huidige gesprek - Treedt toe tot gesprek met gegeven alias + Treedt toe tot gesprek met gegeven bijnaam Gesprek verlaten Onderwerp van het gesprek instellen Stuurt gebruiker met gegeven ID eruit @@ -1274,7 +1274,7 @@ Stil Voer een gebruikersnaam in. - Kamerleden lui laden + Gespreksleden lui laden Verbeter de prestaties door gespreksleden enkel bij de eerste weergave te laden. Uw thuisserver ondersteunt het lui laden van gespreksleden nog niet. Probeer het later opnieuw. @@ -1297,20 +1297,20 @@ Riot.im - Communiceer op uw manier We blijven Riot.im voortdurend aanpassen en verbeteren. Het volledige wijzigingslogboek vindt u hier: %1$s. Om niets te missen, houdt u best uw updates ingeschakeld. Een universele en veilige chat-app, volledig onder uw controle. - Een chat-app, onder uw controle en heel flexibel. Riot laat u communiceren zoals u dat wilt. Gemaakt voor [matrix] - de standaard voor open, gedecentraliseerde communicatie. -\n -\nMaak een gratis account aan op matrix.org, verkrijg uw eigen server op https://modular.im, of gebruik een andere Matrix-server. -\n -\nWaarom zou ik voor Riot.im kiezen\? -\n -\n• VOLLEDIGE COMMUNICATIE: maak kamers aan rond uw teams, uw vrienden, uw gemeenschap - hoe u maar wilt! Chat, deel bestanden, voeg widgets toe en maak stem- en video-oproepen - allemaal volledig gratis. -\n -\n• KRACHTIGE INTEGRATIE: gebruik Riot.im met de hulpmiddelen waarmee u vertrouwd bent. Met Riot.im kunt u zelfs chatten met gebruikers en groepen op andere chat-apps. -\n -\n• PRIVÉ EN VEILIG: houd uw gesprekken geheim. Eind-tot-eind-versleuteling van de bovenste plank zorgt ervoor dat uw privécommunicatie ook privé blijft. -\n -\n• OPEN, NIET GESLOTEN: vrije software, gebouwd op Matrix. Wees baas over uw eigen gegevens door uw eigen server te gebruiken, of te kiezen voor een andere server die u vertrouwt. -\n + Een chat-app, onder uw controle en heel flexibel. Riot laat u communiceren zoals u dat wilt. Gemaakt voor [matrix] - de standaard voor open, gedecentraliseerde communicatie. +\n +\nMaak een gratis account aan op matrix.org, verkrijg uw eigen server op https://modular.im, of gebruik een andere Matrix-server. +\n +\nWaarom zou ik voor Riot.im kiezen\? +\n +\n• VOLLEDIGE COMMUNICATIE: maak gesprekken aan rond uw teams, uw vrienden, uw gemeenschap - hoe u maar wilt! Chat, deel bestanden, voeg widgets toe en maak stem- en video-oproepen - allemaal volledig gratis. +\n +\n• KRACHTIGE INTEGRATIE: gebruik Riot.im met de hulpmiddelen waarmee u vertrouwd bent. Met Riot.im kunt u zelfs chatten met gebruikers en groepen op andere chat-apps. +\n +\n• PRIVÉ EN VEILIG: houd uw gesprekken geheim. Eind-tot-eind-versleuteling van de bovenste plank zorgt ervoor dat uw privécommunicatie ook privé blijft. +\n +\n• OPEN, NIET GESLOTEN: vrije software, gebouwd op Matrix. Wees baas over uw eigen gegevens door uw eigen server te gebruiken, of te kiezen voor een andere server die u vertrouwt. +\n \n• WAAR U OOK BENT: houd contact waar u ook bent met volledig gesynchroniseerde berichtgeschiedenis op al uw apparaten, en online op https://riot.im. Wachtwoord aanmaken @@ -1322,8 +1322,8 @@ Geen Matrix-sessie beschikbaar Verlies nooit uw versleutelde berichten - Berichten in versleutelde kamers worden beveiligd met eind-tot-eind-versleuteling. Enkel de ontvanger(s) en u hebben de sleutels om deze berichten te lezen. -\n + Berichten in versleutelde gesprekken worden beveiligd met eind-tot-eind-versleuteling. Enkel de ontvanger(s) en u hebben de sleutels om deze berichten te lezen. +\n \nMaak een veilige back-up van uw sleutels om ze niet te verliezen. Begin sleutelback-up te gebruiken (Geavanceerd) @@ -1456,4 +1456,66 @@ Sorry, vergadergesprekken met Jitsi worden nog niet ondersteund op oudere apparaten (met een Android-versie lager dan 5.0) + Apparaat verifiëren + + onbekend IP-adres + Een nieuw apparaat vraagt versleutelingssleutels aan. +\nApparaatnaam: %1$s +\nLaatst gezien: %2$s +\nAls u zich niet heeft aangemeld op een ander apparaat, negeer dan dit verzoek. + Een ongeverifieerd apparaat vraagt versleutelingssleutels aan. +\nApparaatnaam: %1$s +\nLaatst gezien: %2$s +\nAls u zich niet heeft aangemeld op een ander apparaat, negeer dan dit verzoek. + + Verifiëren + Delen + Sleuteldeelverzoek + Negeren + + Verifieer door een korte tekenreeks te vergelijken. + Voor een maximale beveiliging bevelen we aan om dit onder vier ogen te doen, of via een ander vertrouwd communicatiekanaal. + Verificatie beginnen + Inkomend verificatieverzoek + Verifieer dit apparaat door het als vertrouwd te markeren. Door de apparaten van uw gesprekspartners te vertrouwen, hoeft u zich nog minder zorgen te maken over het gebruik van eind-tot-eind-versleutelde berichten. + Dit apparaat verifiëren zal het als vertrouwd markeren, en het ook aan uw gesprekspartner als vertrouwd markeren. + + Verifieer dit apparaat door te bevestigen dat de volgende emoticons op het scherm van uw gesprekspartner verschijnen + Verifieer dit apparaat door te bevestigen dat de volgende cijfers op het scherm van uw gesprekspartner verschijnen + + U heeft een inkomend verificatieverzoek ontvangen. + Verzoek bekijken + Wachten op bevestiging van gesprekspartner… + + Geverifieerd! + U heeft het apparaat geverifieerd. + Beveiligde berichten met deze gebruiker worden eind-tot-eind-versleuteld en kunnen niet door derde partijen gelezen worden. + Ik snap het + + Verschijnt er niets\? Nog niet alle cliënten bieden ondersteuning voor interactieve verificatie. Gebruik de traditionele verificatiemethode. + Traditionele verificatie gebruiken. + + Sleutelverificatie + Verzoek geannuleerd + De andere partij heeft de verificatie geannuleerd. +\n%s + De verificatie is geannuleerd. +\nReden: %s + + Interactieve apparaatsverificatie + Verificatieverzoek + %s wil uw apparaat verifiëren + + De gebruiker heeft de verificatie geannuleerd + Het verificatieproces is verlopen + Het apparaat heeft geen weet van die transactie + Het apparaat kan geen sleutelovereenkomst-, hash-, MAC- of SAS-methode kiezen + De hashovereenkomst kwam niet overeen + De SAS kwam niet overeen + Het apparaat heeft een onverwacht bericht ontvangen + Er is een ongeldig bericht ontvangen + Sleutels komen niet overeen + Gebruikers komen niet overeen + Onbekende fout + diff --git a/vector/src/main/res/values-nn/strings.xml b/vector/src/main/res/values-nn/strings.xml index 9cdce469..9827aef6 100644 --- a/vector/src/main/res/values-nn/strings.xml +++ b/vector/src/main/res/values-nn/strings.xml @@ -3,9 +3,9 @@ nn NO - Ljost Preg - Dimt Preg - Svart Preg + Ljost preg + Dimt preg + Svart preg Samstiller Høyrer etter hendingar @@ -16,63 +16,63 @@ Rom Innstillingar Medlemdetaljar - Historiske + Sogalege Feil-fråmelding - Samfunnsdetaljar + Samfundsdetaljar Send eit klistremerke Tredjepartilisensar Lastar… - Greitt - Bryt av - Lagr + Greidt + Brjot av + Lagra Far frå Send - Kopier + Rit av Send på nytt Trekk attende - Siter + Herm Last ned - Del - Prat + Deil + Tal Tøm Seinare Send vidare - Permalenkje - Sjå Kjelde - Sjå Dekryptert Kjelde - Slett + Varande lenk + Sjå kjelda + Sjå den avkrypterte kjelda + Strjuk Gje nytt namn - Meld frå om innhald - Pågåande samtale + Meld frå um innhaldet + Pågåande samtala Pågåande gruppesamtale.\nVert med med %1$s eller %2$s. røyst - video - Kan ikkje få i gang samtala, prøv att seinare - På grunn av vantande tillatingar, kan nokre funksjonar mangla… - Du trengjer tillating til å byda inn for å setja i gang ei gruppesamtale i dette rommet + Video + Kann ikkje få i gang samtala, prøv att seinare + På grunn av vantande løyve, kann nokre funksjonar mangla… + Du treng løyve til å bjoda inn for å setja i gang ei gruppasamtala i detta romet Klarer ikkje å setja i gang samtala Einingsinfo - Gruppesamtaler er ikkje støtta i krypterte rom - + Gruppasamtalor er ikkje stydja i krypterte rom + Send likevel eller - Byd inn + Bjod inn Fråkopla Gå ut Handlingar - Logg av - Røystsamtale - Videosamtale - Søk over alt + Logga av + Røystsamtala + Videosamtala + Søk i alt Merk alle som lesne - Historiske - Snøggsvar - Opn - Lukk - Kopiert til utklippstavla + Sogalege + Snøggsvara + Opna + Lat att + Rita av til utklippstavla Skru av Stadfesting @@ -82,186 +82,178 @@ Yndlingar Folk Rom - Samfunn + Samfund - Søk etter rom - Søk etter yndlingar - Søk etter folk - Søk etter rom - Søk etter samfunn + Filtrer romnamn + Filtrer yndlingar + Filtrer folk + Filtrer romnamn + Filtrer samfund - Innbydingar + Innbjodingar Lågrett - Samtaler + Samtalor Lokal adressebok Brukarutval Berre Matrix-kontaktar - Ingen samtaler + Ingi samtalor Du gav ikkje riot tilgang til dei lokale kontaktane dine - Ingen resultat + Ingi treff Rom Romutval - Ingen rom - Ingen offentlege rom er tilgjengelege + Ingi rom + Ingi ålmene rom er tilgjengelege Ein brukar %d brukarar - Byd inn - Samfunn - Ingen grupper + Bjod inn + Samfund + Ingi gruppor Send loggar Send kræsjloggar - Send skjermbilete - Feil-fråmelding - Ver venleg og skildr feilen. Kva gjorde du? Kva forventa du at skulle skje? Kva skjedde? - Om mogeleg, ver venleg og skriv skildringa på Engelsk. - Skildr vansken din her - For å diagnostisere vansker, sendast loggar frå denne klienten med feilfråmeldinga. Feilfråmeldinga, saman med loggane og skjermbiletet, vil ikkje vera offentleg synlege. Viss du føretrekkjer å berre sende teksta over, ver venleg og avmerk: - Det verkar som om du ristar mobilen i sinne. Vil du senda ein feilfråmelding inn? - Æppen kræsja forrige gong. Vil du senda ein kræsjfråmelding inn? - Rist i sinne for å melda frå om feil + Send skjermbilæte + Meld frå um feil + Gjer vel og skildra feilen. Kva gjorde du\? Kva venta du at skulde henda\? Kva hende\? + Um mogeleg, ver venleg og skriv skildringi på engelsk. + Skildra problemet ditt her + Fyr å diagnostisera vanskar, vert loggar frå denna einingi sende saman med feilfråmeldingi. Feilfråmeldinga, saman med loggane og skjermbilætet, vil ikkje vera ålment synlege. Um du helder vil senda berre teksti yver, gjer vel og tak burt merket: + Det verkar som om du ristar mobilen i sinne. Vil du senda inn ein feilfråmelding\? + Æppen kræsja fyrre gong. Vil du opna kræsjfråmeldingsvindauget\? + Rista i sinne fyr å melda frå um feil - Feilfråmeldinga vart send - Fekk ikkje til å senda feilfråmeldinga (%s) + Feilfråmeldingi vart send + Fekk ikkje til å senda feilfråmeldingi (%s) Framgang (%s%%) Send inn i - Lesen + Lese - Gå inn i Rommet + Gå inn i romet Brukarnamn - Meld deg inn - Logg inn - Logg av + Laga ein brukar + Logga inn + Logga ut Heimtenar-URL Identitetstenar-URL Søk - Byrj ei Ny Samtale - Byrj ei Røystsamtale - Byrj ei Videosamtale + Byrja ei ny samtala + Byrja ei røystsamtala + Byrja ei videosamtala Send røyst - Er du sikker på at du vil byrja ei ny samtale med %s? - Er du sikker på at du vil byrja ei røystsamtale? - Er du sikker på at du vil byrja ei videosamtale? + Er du trygg på at du vil byrja ei ny samtala med %s\? + Er du trygg på at du vil byrja ei røystsamtala\? + Er du trygg på at du vil byrja ei videosamtala\? - Send filar + Send filer Send klistremerke - Tak eit bilete eller ein video - Tak eit bilete + Tak eit bilæte eller ein video + Tak eit bilæte Tak ein video - Du har førebels ingen klistremerkepakkar skrudd på. - -Legg nokre til no? + Du hev fyrebils ingi klistremerkepakkar skrudde på. Legg til nokre no\? hald fram med… - Orsa, ingen ytre æpper for å fullføra denne handlinga vart funnene. + Orsak, ingi ytre æppar som kunde gjera detta vart funne. - Logg inn - Meld deg inn + Logga inn + Laga ein brukar Send inn - Hopp over - Send Attendestillingsepost - Gå attende til innloggingsskjermen + Hoppa yver + Send attendestillingsepost + Gå attende til innloggingsvindauget Epost eller brukarnamn - Passord - Nytt passord + Åtgangsord + Nytt åtgangsord Brukarnamn - Legg ei epostadresse til til brukaren din slik at folk kan finna deg, og du kan attendestilla passordet. - Legg eit telefonnummer til til brukaren din slik at andre brukarar kan finna deg. - Legg ei epostaddresse og/eller eit telefonnummer til til brukaren din slik at andre brukarar kan finna deg. - -Epostadressa lèt deg òg attendestilla passordet. - Legg ei epostadresse og eit telefonnummer til til brukaren din slik at andre brukarar kan finna deg. - -Epostadressa lèt deg og attendestilla passordet. - Epostadresse - Epostadresse (valfri) + Knyt ei epostadressa til brukaren din slik at folk kann finna deg, og du kan attendestilla åtgangsordet ditt. + Knyt eit telefonnummer til brukaren din slik at andre brukarar kann finna deg. + Knyt ei epostaddresse og/eller eit telefonnummer til brukaren din slik at andre brukarar kann finna deg. Epostadressa lèt deg au attendestilla åtgangsordet. + Knyt ei epostadresse og eit telefonnummer til brukaren din slik at andre brukarar kann finna deg. Epostadressa lèt deg og attendestilla åtgangsordet. + Epostadressa + Epostadressa (valfritt) Telefonnummer Telefonnummer (valfritt) - Gjentak passordet - Stadfest det nye passordet ditt - Gale brukarnamn og/eller passord - Brukarnamn kan berre innehalde bokstavar, tal, prikkar, bindestrek og understrek - Passordet er for kort (i det minste 6) - Vantande passord - Dette ser ikkje ut som ei gangbar epostadresse - Dette ser ikkje ut som eit gangbart telefonnummer - Denne epostadressa er allereie sett. - Vantande epostadresse - Vantande telefonnummer - Vantande epostadresse eller telefonnummer + Skriv upp att åtgangsordet + Stadfest det nye åtgangsordet ditt + Gale brukarnamn og/eller åtgangsord + Brukarnamn kann berre innehalda bokstavar, tal, prikkar, bindestrek og understrek + Åtgangsordet er for kort (i det minste 6 teikn) + Åtgangsordet vantar + Detta ser ikkje ut som ei gangbar epostadressa + Detta ser ikkje ut som eit gangbart telefonnummer + Denna epostadressa er allereie nytta. + Epostadressa vantar + Telefonnummeret vantar + Epostadressa eller telefonnummer vantar Ugyldig teikn - Passorda er ikkje det same - Gløymt passordet? - Bruk eigentenarinnstillingar (omfattande) - Ver venleg og sjekk eposten din for å gå fram med innmeldinga - Innmelding med epost og telefonnummer samtidig er førebels ikkje støtta før api-en finst. Berre telefonnummeret vert brukt. - -Du kan legga eposten din til til brukaren din i innstillingar. - Heimtenaren vil forsikra seg om at du ikkje er ein robot - Brukarnamnet er allereie i bruk + Åtgangsordi er ikkje dei same + Gløymt åtgangsordet\? + Bruk eigentenarinnstillingar (umfattande) + Gjer vel og sjekk eposten din for å halda fram med innmeldingi + Innmelding med epost og telefonnummer samtidig er ikkje stydja fram til api-en finst. Berre telefonnummeret vert nytta. +\n +\nDu kann knyta eposten din til brukaren din i innstillingane. + Heimtenaren ynskjer å bli trygg på at du ikkje er ein robot + Brukarnamnet er allereie nytta Heimtenar: Identitetstenar: - Eg har stadfesta epostdressa mi - For å attendestilla passordet, skriv epostadressa som er tilknytta brukaren din inn: - Epostadressa som er tilknytta brukaren din må skrivast inn. - Eit nytt passord må skrivast inn. - Ein epost vart send til %s. Når du har fylgt lenkja han inneheld, klikk under. - Fekk ikkje til å stadfesta epostadressa: sjå til at du klikka på lenkja i eposten - Passordet ditt vart attendestild. + Eg hev stadfesta epostdressa mi + For å attendestilla åtgangsordet, skriv inn epostadressa som er knytt til brukaren din: + Du må skriva inn epostadressa som er knytt til brukaren din. + Du må skriva inn eit nytt åtgangsord. + Ein epost vart send til %s. Når du hev fylgt lenken han inneheld, klikk under. + Fekk ikkje til å stadfesta epostadressa: sjå til at du klikka på lenken i eposten + Åtgangsordet ditt vart attendestilt. Du vart logga ut av alle einingar og fær ikkje push-varsel lenger. For å skru varsel på att, logg inn att på kvar eining. -Du vart logga ut av alle einingar og får ikkje push-varsel lenger. For å skru varsel på igjen, logg inn at på kvar eining. - - URL-en må byrja med http[s]:// - Fekk ikkje til å logga inn: nettverksfeil + URL-en må byrja på http[s]:// + Fekk ikkje til å logga inn: netverksfeil Fekk ikkje til å logga inn - Fekk ikkje til å melda inn: Nettverksfeil + Fekk ikkje til å melda inn: Netverksfeil Fekk ikkje til å melda inn - Fekk ikkje til å melda inn: epost-eigarskapsfeil - Skriv ein gangbar URL inn + Fekk ikkje til å melda inn: feil med eposteigarskapen + Gjer vel og skriv inn ein gangbar URL Mobil - Brukarnamnet/passordet er ugangbart - Kjende ikkje igjen det oppgjevne tilgangsteiknet + Brukarnamnet/passordet er ikkje gangbart + Det oppgjevne åtgangsteiknet vart ikkje kjent att Misforma JSON Inneheldt ikkje ein gangbar JSON - For mange førespurnader vart sende + For mange fyrespurnader vart sende Brukarnamnet er allereie i bruk - Epostlenkja som ikkje har verta klikka på enno + Epostlenken som ikkje hev verta klikka på enno - Spør på nytt om krypteringsnyklar frå dei andre einingane dine. + Spyr på nytt um krypteringsnyklar frå dei andre einingane dine. - Nykelførespurnad er send. + Nykelfyrespurnaden er send. - Førespurnad er send - Ver venleg og køyr Riot på ei anna eining som kan dekryptera meldinga slik at ho kan senda nyklane til denne eininga. + Fyrespurnaden er send + Gjer vel og køyr Riot på ei onnor eining som kan avkryptera meldingi slik at ho kann senda nyklane til denna einingi. - Lest-Lappliste + Lesenlapp-lista - Gruppeliste + Gruppalista - 1 medlemskapsforandring - %d medlemskapsforandringar + 1 medlemskapsbrigde + %d medlemskapsbrigde - "Send som " - Opprinneleg + Send som + Upphavleg Stor - Mellomstor + Millomstor Liten - Bryt nedlastinga av? - Bryt opplastinga av? + Brjot av nedlastingi\? + Brjot av opplastingi\? %d s %1$dm %2$ds @@ -272,75 +264,73 @@ Du vart logga ut av alle einingar og får ikkje push-varsel lenger. For å skru Romemne Ring - Samtala er kopla opp - Samtala koplar opp… - Samtala er avslutta - Ringer… + Samtala er kopla upp + Samtala koplar upp… + Samtala er enda + Ringjer… Du vert ringd - Innkommande videosamtale - Innkommande Røystsamtale - Ei Samtale er i Gang + Innkomande videosamtala + Innkomande Røystsamtala + Ei samtala er i gang… - Den andre sida tok ikkje røret. - Klarer ikkje skru kameraet på - røret er teke ein annan stad + Den onnor sida tok ikkje røyret. + Klarer ikkje skru på kameraet + røyret er teke ein annan stad - Tak eit bilete eller ein video - Klarer ikkje spele video inn + Tak eit bilæte eller ein video + Kann ikkje spela inn video Info - Riot treng tilgang til bileta og videoane dine for å kunna senda og lagra vedlegg. + Riot treng åtgang til bilæti og videoane dine fyr å kunna senda og lagra vedlegg. +\n +\nGjer vel og gjev åtgang på sprettvindauget som kjem fyr å kunna senda filer frå mobilen. + Riot treng åtgang til kameraet ditt fyr å taka bilæte og videosamtalor. + " +\n +\nVer venleg og gjev løyve på sprettvindauget som kjem fyr å kunna ringja." + Riot treng åtgang til mikrofonen din fyr å kunna ringja. + Mediesamankoplingi gjekk gale + " +\n +\nGjer vel og gjev åtgang på sprettvindauget som kjem fyr å kunna ringja." + Riot treng åtgang til kameraet og mikrofonen din fyr å videosamtala. +\nGjer vel og gjev åtgang på sprettvindauget som kjem fyr å kunna ringja. + Riot treng åtgang til adresseboki di fyr å finna andre Matrix-brukarar utifrå epostadressone og telefonnummeri deira. +\n +\nGjer vel og gjev løyve på sprettvindauget som kjem fyr å finna addressebokbrukarar som du kann nå frå Riot. + Riot treng løyve til å gå inn i adresseboki di fyr å finna andre Matrix-brukarar ut ifrå epostadressone og telefonnummeri deira. +\n +\nGje Riot løyve til å gå inn i kontaktane dine\? -Ver venleg og gjev tilgang på den neste popp-oppen for å kunna senda filer frå mobilen. - Riot treng tilgang til kameraet ditt for å taka bilete og videosamtaler. - - -Ver venleg og gjev tilgang på den neste popp-oppen for å kunna ringe. - Riot treng tilgang til mikrofonen din for å kunna ringja. - Mediesamenkopling Mislukkast - - -Ver venleg og gjev tilgang på den neste popp-oppen for å kunna ringja. - Riot treng tilgang til kameraet og mikrofonen din for å videosamtala. - -Ver venleg og gjev tilgang på den neste popp-oppen for å kunna ringja. - Riot treng tilgang til adresseboka di for å finna andre Matrix-brukarar utifrå epostadressene og telefonnummera dei. - -Ver venleg og gjev tilgang på den neste popp-oppen for å finna addressebokbrukarar som kan nåast frå Riot. - Riot treng tilgang til å gå inn i adresseboka di for å finna andre Matrix-brukarar ut ifrå epostadressene og telefonnummera deira. - -Tillat Riot å gå inn i kontaktane dine? - - Orsak… Handlinga vart ikkje gjennomført på grunn av vantande tilgang + Orsak. Handlingi vart ikkje gjenomført på grunn av løyve som vantar Lagra - Lagr til nedlastingar? + Lagra til nedlastingar\? JA NEI Gå fram - Fjern + Tak burt Vert med - Førehandsvising - Avslå + Fyrehandsvising + Seg nei - Listemedlemer - Opn tittel + Syn fram medlemer + Opna yverskriften Samstiller… - Hopp til den fyrste ulesne meldigna. + Hoppa til den fyrste ulesne meldigni. - Du vart boden inn til dette rommet av %s - Innbydinga vart send til %s, som ikkje er tilknytta denne brukaren. -Du bør kanskje logga inn med ein annan brukar, eller leggja eposten din til denne brukaren. - Du prøver å gå inn i %s. Vil du verta med med so du kan taka del i meiningsutvekslinga? + Du vart boden inn til detta romet av %s + Innbjodingi vart send til %s, som ikkje er knytt til denna brukaren. Du byr kann henda logga inn med ein annan brukar, eller knyta eposten din til brukaren din. + Du freistar å gå inn i %s. Vil du verta med so du kan taka del i meiningsutvekslingi\? eit rom - Dette er ei førehandsvising av rommet. Romsamhandlingar har vorte skrudd av. + Detta er ei fyrehandsvising av romet. Romsamhandlingar hev vorte skrudde av. - Ny Samtale - Legg ein medlem til + Ny samtala + Legg til ein medlem - 1 aktiv medlem - %d aktive medlemer + 1 verksam medlem + %d verksame medlemer 1 medlem @@ -348,45 +338,45 @@ Du bør kanskje logga inn med ein annan brukar, eller leggja eposten din til den 1 medlem - Far frå rom - Er du sikker på at du vil fara frå rommet? - Er du sikker på at du vil fjerna %s frå denne samtala? - Lag + Far frå romet + Er du trygg på at du vil fara frå romet\? + Er du trygg på at du vil taka burt %s frå denna samtala\? + Laga Tilkopla Fråkopla Fråverande %1$s no - %1$s %2$s sia + %1$s %2$s sidan - ADMINISTRATORVERKTØY - RØYSTSAMTALE - DIREKTESAMTALE + ADMINISTRATORVERKTY + RØYSTSAMTALA + BEINVEGES SAMTALOR EININGAR - Byd inn - Far frå rommt - Fjern frå dette rommet - Steng ut - Fjern utestengjing - Gjer attende til vanleg brukar + Bjod inn + Far frå romet + Spark ut frå detta romet + Steng ute + Slepp inn att + Gjer til vanleg brukar Gjer til moderator Gjer til administrator - Gøym alle meldingar frå denne brukaren - Vis alle meldingar frå denne brukaren - Vis alle meldingar frå denne brukaren? - -Merk deg at denne handlinga startar æppen på nytt og kan taka litt tid. - Brukar-ID, Namn eller Epost + Gøym alle meldingar frå denna brukaren + Syn alle meldingar frå denna brukaren + Syn alle meldingar frå denne brukaren\? +\n +\nMerk deg at denna handlingi startar æppen på nytt og kann taka litt tid. + Brukar-ID, namn, eller epost Nemn - Vis einingsliste - Du vil ikkje kunna gjera om på denne forandringa fordi du hevjer ein brukar si høgd opp til di eiga. -Er du sikker? + Syn einingslista + Du vil ikkje kunna gjera um på detta brigdet fyrdi du hev ein brukar si høgd upp til di eiga. +\nEr du trygg på detta\? - Er du sikker på at du vil byda %s inn til samtala? - Er du sikker på at du vil stengja brukaren ute frå samtala? + Er du trygg på at du vil bjoda %s inn til samtala\? + Er du trygg på at du vil stengja brukaren ute frå samtala\? - Byd inn gjennom ID + Bjod inn gjenom ID LOKALE KONTAKTAR (%d) BRUKARUTVAL (%s) Berre Matrix-brukarar @@ -398,56 +388,56 @@ Er du sikker? Søk %s skriv… %1$s og %2$s skriv… - %1$s og %2$s og fleire skriv… + %1$s, %2$s og andre skriv… Send ei kryptert melding… Send ei melding (ikkje-kryptert)… Send eit kryptert svar… Send eit svar (ikkje-kryptert)… - Tilkolinga til tenaren gjekk tapt. + Tilkoplinga til tenaren gjekk tapt. Meldingane vart ikkje sende. %1$s eller %2$s no? - Meldingane vart ikkje sende fordi ukjende einingar er til stades. %1$s eller %2$s no? + Meldingane vart ikkje sende av di ukjende einingar er til stades. %1$s eller %2$s no\? Send alle på nytt bryt alle av Send usende meldingar på nytt Slett usende meldingar Fila vart ikkje funne - Du har ikkje tilgang til å senda meldingar i dette rommet + Du hev ikkje løyve til å senda meldingar i detta romet 1 ny melding %d nye meldingar - Stol på - Ikkje stol på - Logg av - Oversjå + Lit på + Ikkje lit på + Logga ut + Yversjå Fingeravtrykk (%s): - Klarte ikkje å stadfesta identiteten på fjerntenaren. - Dette kan tyda at nokon tjuvlytter på trafikken din, eller at mobilen ikkje stoler på sertifikatet frå fjerntenaren. - Viss tenaradministratoren har sagt at dette er å venta, pass på at fingeravtrykket under samsvarar med fingeravtrykket frå dei. + Fekk ikkje til å stadfesta identiteten på fjerrtenaren. + Detta kann tyda at nokon tjuvlyder på koplingi di, eller at mobilen ikkje liter på sertifikatet frå fjerrtenaren. + Um tenaradministratoren hev sagt at detta er å venta, pass på at fingeravtrykket under samsvarar med fingeravtrykket han gjev deg. Sertifikatet har forandra seg frå ein som var stolt på av mobilen din. Dette er SÆRS UVANLEG. Det tilrådast å IKKJE GODKJENNA det nye sertifikatet. - "Sertifikatet har forandra seg frå ein som tidlegare var stolt på til eit som ikkje er det. Tenaren kan ha fornya sertifikatet sitt. Tak kontakt med tenaradministratoren for å få det forventa fingeravtrykket." + "Sertifikatet hev brigda seg frå eit som tidlegare var lite på til eit som ikkje er det. Det kann henda at tenaren hev nya uppatt sertifikatet sitt. Snakk med tenaradministratoren fyr å få det venta fingeravtrykket." Godkjenn BERRE sertifikatet viss tenaradministratoren har gjeve ut eit fingeravtrykk som samsvarar med det over. Romdetaljar Folk Filer Innstillingar - Misforma ID. Det bør vera ei epostadresse eller ein Matrix-ID som \'@lokaldel:domene\' + Misforma ID. Det bør vera ei epostadressa eller ein Matrix-ID som t.d. \'@lokaldel:domene\' BODNE INN - KOMEN INN + KOMNE INN - Grunnlaget for å melda frå om innhaldet - Vil du gøyma alle meldingar frå denne brukaren? - -Merk at denne handlinga vil starta æppen på nytt og kan taka litt tid. - Bryt Opplasting av - Bryt Nedlasting av + Grunnen til at du melder innhaldet + Vil du gøyma alle meldingar frå denna brukaren\? +\n +\nMerk at detta vil starta æppen på nytt og kann taka litt tid. + Brjot av upplastingi + Brjot av nedlastingi Søk Filtrer rommedlemer - Ingen resultat + Ingi treff ROM MELDINGAR FOLK @@ -458,91 +448,91 @@ Merk at denne handlinga vil starta æppen på nytt og kan taka litt tid.YNDLINGAR ROM LÅGRETT - INNBYDINGAR - Byrj samtale - Lag eit rom - Vert med i rommet + INNBJODINGAR + Byrja samtala + Laga eit rom + Vert med i romet Vert med i eit rom - Skriv ein rom-ID eller eit romalias inn + Skriv inn ein rom-ID eller eit romalias - Sjå gjennom Utvalet + Sjå gjenom utvalet 1 rom %d rom - Fant %1$s rom for %2$s - Fant %1$s rom for %2$s + Fann %1$s rom fyr %2$s + Fann %1$s rom fyr %2$s Søkjer i utvalet.. - Alle meldingar (bråket) + Alle meldingar (bråkete) Alle meldingar Berre nemningar - Stiln + Stilna Gjer til yndling - Fjern høgrett - Direktesamtale - Far frå Samtala + Tak burt høgrett + Beinveges samtala + Far frå samtala Gløym - Legg til ein Heimskjerm-Snarveg + Laga snarveg på heimskjermen Meldingar Innstillingar - Utgåve - Vilkår og føresetnader - Tredjepartivarsel - Opphavsrett - Personvernretningsliner + Utgåva + Vilkår og fyresetnader + Tridjepartivarsel + Upphavsrett + Personvernretningslinor - Profilbilete + Profilbilæte Visingsnamn Epost - Legg ei epostadresse til + Legg til ei epostadressa Telefon - Legg eit telefonnummer til - Æppsystem-infoskjerm + Legg til eit telefonnummer + Syn æppinfoen i systeminnstillingane Æppinfo Varselpersonvern Vanleg Minska personvern - Æppen treng tilgang til å køyra i bakgrunnen + Æppen treng løyve til å køyra i bakgrunnen • Varsel vert sende gjennom Google Cloud-Meldingar • Varsel inneheld berre metadata - • Meldingsinnhald i varselet hentast trygt direkte frå Matrix-heimtenaren + • Meldingsinnhaldet i varselet ertrygt henta beinveges frå Matrix-heimtenaren • Varsel inneheld meta- og meldingsdata - • Varsel viser ikkje meldingsinnhald + • Varsel syner ikkje meldingsinnhald Varselljod - Skru varsel på for denne brukaren - Skru varsel på for denne einina - Sku skjermen på i 3 sekundar + Skru på varsel fyr denne brukaren + Skru på varsel fyr denna einingi + Skru skjermen på i 3 sekund Meldingar som inneheld visingsnamnet mitt Meldingar som inneheld brukarnamnet mitt - Meldingar i ein-og-ein-samtaler - Meldingar i gruppesamtaler + Meldingar i ein-og-ein-samtalor + Meldingar i gruppasamtalor Når eg vert boden inn i eit rom - Røystsamtaleinnbydingar - Meldingar frå ein bot + Røystsamtalainnbjodingar + Meldingar frå botar - Byrj på oppstart - Bakgrunns-samstilling - Skru bakgrunns-samstilling på - Samstillingsførespurnade fekk tidsavbrot + Byrja ved uppstarten + Bakgrunnsamstilling + Skru på bakgrunnsamstilling + Samstillingsfyrespurnaden fekk tidsavbrot Forseining mellom to samstillingsførespurnader sekund - sekundar + sekund - Utgåve - olm-utgåve - Vilkår og føresetnader - Tredjepartivarsel - Opphavsrett - Personvernsretningsliner - Tøm buffar - Tøm mediabuffar + Utgåva + olm-utgåva + Vilkår og fyresetnader + Tridjepartivarsel + Upphavsrett + Personvernsretningslinor + Tøm buffaren + Tøm mediabuffaren Hald på mediet Brukarinnstillingar @@ -814,7 +804,7 @@ Ukjende einingar: Widget-laging mislukkast %1$s lagt til av %2$s %1$s fjerna av %2$s - Lag gruppesamtaler med jitsi + Laga gruppasamtalor med jitsi Er du sikker på at du vil sletta widgeten? 1 verkande widget @@ -865,8 +855,8 @@ Ukjende einingar: Kryptert melding - Lag - Lag Samfunn + Laga + Laga samfund Samfunnsnamn Døme Samfunns-ID @@ -891,9 +881,9 @@ Ukjende einingar: Vert med att Gløym rommet - Du må logga på att for å laga ende-til-ende-krypteringsnyklar for denne eininga og senda den offentlege nykelen til heimetenaren. -Dette trengst berre ein gong. -Orsak for ulempa. + Du må logga på att for å laga ende-til-ende-krypteringsnyklar til denna eininga og senda den ålmene nykelen til heimetenaren. +\nDetta trengst berre éin gong. +\nOrsak for ulempa. Alle %s-rom på Matrix @@ -961,7 +951,7 @@ Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine t kontakt tenesteadministratoren din - Grunna vantande tillatingar er denne handlinga umogeleg. + Grunna vantande løyve er denna handlingi umogeleg. Ressursgrensa er Forbigått Heimtenaren har truffe ei av ressursgrensene sine so nokre brukarar vil ikkje kunna logga inn. Heimtenaren har forbigått ei av ressursgrensene sine. @@ -972,11 +962,65 @@ Meldingssynlegheit på Matrix liknar på epost. At vi gløymer meldingane dine t Ver venleg og %s for å heva grensa. Ver venleg og %s for å halda fram med å bruka tenesten. - Status.im Tema + Status.im-preg - - Aksepter + Ring likevel + Seg ja Feil + Hoppa yver + Ferdug + Brjot av + Yversjå + + Er du trygg på at du vil logga ut\? + Merk som lest + Gjer vel å sjå yver og godtak rettelinone til heimtenaren: + + Det gjeng ikkje å nå URL-en, gjer vel og sjå til honom + Uppringjingar + Nytta den upphavlege Riot-ringjetona når du vert ringd upp + Ringjetona fyr uppringjing + Vel ringjetona til tilrop: + + Ei videosamtala er i gang… + + Spark + + Er du trygg på at du vil sparka denna brukaren frå samtala\? + Er du trygg på at du vil sparka dessa brukarane frå samtala\? + + Grunn + + Umfattande varselinnstilingar + Set kor viktige varsel er ut ifrå hendingar, og stilla på ljod, LED, og risting + Kor viktige varsel er ut ifrå hendingar + + Leit etter vanskar med varsli + Diagnostikk fyr feilsøkjing + Køyr prøvar + Køyrer… (%1$d av %2$d) + Det grunnleggjande er i ordning. Um du framleis ikkje fær varsel, gjer vel og send inn ei feilmelding so me kann sjå nærare på det. + Éin eller fleire prøvar verka ikkje. Freista dessa løysingane. + Éin eller fleire prøvar gjekk galne. Gjer vel og send inn ei feilmelding so me kann sjå nærare på det. + + Systeminnstillingar. + Varsel er skrudde på i systeminnstillingane. + Varsel er skrudde av i systeminnstillingane. +\nGjer vel og sjå på systeminnstillingane. + Opna innstillingane + + Brukarinnstillingar. + Varsel er skrudde på fyr brukaren din. + Varsel er skrudde av fyr brukaren din. +\nGjer vel og sjå på brukarinnstillingane. + Skru på + + Eininginnstillingar. + Varsel er skrudde på fyr denna einingi. + Varsel er ikkje skrudde på fyr denna einingi. +\nGjer vel og sjå på Riot-innstillingane. + Skru på + diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index 8ed29953..e645a771 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -25,7 +25,8 @@ Zmień nazwę Zgłoś zawartość Aktywne połączenie - Przychodzące połączenie grupowe.\nDołącz z %1$s lub z %2$s. + Przychodzące połączenie grupowe. +\nDołącz z %1$s lub %2$s mikrofonem kamerą Nie można rozpocząć połączenia, spróbuj ponownie później @@ -93,7 +94,7 @@ Opisz błąd. Co zrobiłeś? Co powinno się wydarzyć? Co się stało? Opisz swój problem tutaj W celu zdiagnozowania problemów, logi z tego klienta zostaną wysłane wraz z tym raportem o błędzie. Ten raport o błędzie, w tym dzienniki i zrzut ekranu, nie będzie publicznie widoczny. Jeśli wolisz wysłać tylko powyższy tekst, odznacz: - Wygląda na to, że potrząsasz telefonem ze zdenerwowania. Czy chcesz zgłosić błąd? + Wygląda na to, że potrząsasz telefonem ze zdenerwowania. Czy chcesz otworzyć ekran zgłaszania błędu\? Aplikacja nie została poprawnie zamknięta za ostatnim razem. Czy chcesz zgłosić raport o nieoczekiwanym zamknięciu? Pomyślnie zgłoszono błąd @@ -161,14 +162,14 @@ Aby przywrócić hasło, wprowadź adres e-mail powiązany z kontem: Musi zostać wprowadzony e-mail powiązany z kontem. Należy wprowadzić nowe hasło. - Wysłano email na adres %s. Po otwarciu znajdującego się tam linku, naciśnij poniżej. + Wysłano e-mail na adres %s. Po otwarciu znajdującego się tam linku, naciśnij poniżej. Nie udało się zweryfikować adresu e-mail: upewnij się, że kliknąłeś w odnośnik z wiadomości URL musi zaczynać się od http[s]:// Nie udało się połączyć: Błąd sieci Logowanie nie powiodło się Nie udało się zarejestrować: Błąd sieci Nie udało się zarejestrować - Wprowadź prawidłowy URL + Proszę wprowadzić prawidłowy adres URL Nieprawidłowa nazwa użytkownika/hasło Nie zawiera prawidłowego JSON @@ -520,8 +521,8 @@ Zauważ, że ta czynność spowoduje ponowne uruchomienie aplikacji i może to t Ogromny P O T Ę Ż N Y Jasny motyw - Ciemny Motyw - Czarny Motyw + Ciemny motyw + Czarny motyw Zadzwoń Awatar @@ -571,12 +572,12 @@ Zauważ, że ta czynność spowoduje ponowne uruchomienie aplikacji i może to t Zrób zdjęcie Nagraj film - Dodaj adres email i/lub nr telefonu do swojego konta, aby umożliwić innym użytkownikom odnalezienie ciebie. - -Adres email pozwoli ci również zresetować hasło. - Dodaj adres email i nr telefonu do swojego konta, aby umożliwić innym użytkownikom odnalezienie ciebie. - -Adres email pozwoli ci również zresetować hasło. + Dodaj adres e-mail i/lub nr telefonu do swojego konta, aby umożliwić innym użytkownikom odnalezienie ciebie. +\n +\nAdres e-mail pozwoli Ci również zresetować hasło. + Dodaj adres e-mail i nr telefonu do swojego konta, aby umożliwić innym użytkownikom odnalezienie ciebie. +\n +\nAdres e-mail pozwoli Ci również zresetować hasło. Rejestracja jednocześnie za pomocą numeru telefonu i adresu e-mail nie jest obsługiwana dopóki nie pojawi się odpowiednie API. Tylko numer telefonu będzie brany pod uwagę. Możesz dodać adres e-mail do swojego profilu w ustawieniach. @@ -936,8 +937,8 @@ Widoczność wiadomości w Matrix jest podobna do wiadomości e-mail. Nasze zapo Wyślij zaszyfrowaną odpowiedź… Wyślij odpowiedź (niezaszyfrowaną)… Użyj klawisza enter na klawiaturze, aby wysłać wiadomość - Opuść pokój - Włącz/Wyłącz markdown + Opuszcza pokój + Włącza/Wyłącza markdown 1 członek %d członków @@ -1009,10 +1010,10 @@ Pamiętaj ta akcja może zresetować aplikacje i potrwać jakiś czas. Usuwa opa użytkownikowi z podanym ID Zaprasza użytkownika z podanym ID do aktualnego pokoju Dołącza do pokoju z podanym aliasem - Ustaw temat pokoju + Ustawia temat pokoju Wyrzuca użytkownika z podanym ID Zmienia twój wyświetlany nick - Aby naprawić zarządzanie aplikacjami Matrix + Do naprawiania zarządzania aplikacjami Matrix Ten pokój został zamieniony i nie jest już aktywny Konwersacja jest kontynuowana tutaj @@ -1161,4 +1162,47 @@ Spróbuj uruchomić ponownie aplikację. Usuń kopię zapasową Wersja + Zweryfikuj urządzenie + + Oznacz jako przeczytane + Zweryfikowano! + Weryfikacja klucza + Żądanie weryfikacji + %s chce zweryfikować twoje urządzenie + + Nieznany błąd + + Użyj kopii zapasowej klucza + Podpis + + Nowe urządzenie żąda kluczy szyfrujących. +\nNazwa urządzenia: %1$s +\nOstatnio widziane: %2$s +\nJeśli to nie Ty zalogowałeś(-aś) się na innym urządzeniu, zignoruj to żądanie. + Nowe niezweryfikowane urządzenie żąda kluczy szyfrujących. +\nNazwa urządzenia: %1$s +\nOstatnio widziane: %2$s +\nJeśli to nie Ty zalogowałeś(-aś) się na innym urządzeniu, zignoruj to żądanie. + + Weryfikuj + Udostępnij + Żądanie udostępnienia klucza + Ignoruj + + Udostępnij + + Przywrócono kopię zapasową z %d kluczem. + Przywrócono kopię zapasową z %d kluczami. + Przywrócono kopię zapasową z %d kluczami. + + Użyj kopii zapasowej klucza + Uruchamianie… (%1$d z %2$d) + Ustawienia niestandardowe. + Zarządzaj kopią zapasową klucza + + Udostępnij klucz odzyskiwania z… + Usunąć klucze szyfrowania z serwera\? Nie będziesz mógł/mogła używać klucza odzyskiwania do odczytywania historii zaszyfrowanych wiadomości. + + Wszystkie klucze mają kopię zapasową + Zaktualizuj hasło diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index ca9b07ca..f2fd3109 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -291,7 +291,8 @@ Email также позволит вам при необходимости во %s пригласил вас присоединиться к этой комнате - Приглашение пришло на адрес %s, который не связан с этим аккаунтом.\nВы можете войти под другим аккаунтом или связать email с этим аккаунтом. + Приглашение пришло на адрес %s, который не связан с этим аккаунтом. +\nВозможно, вы захотите войти в систему с другим аккаунтом или добавить этот email в свою учетную запись. Вы пытаетесь получить доступ к %s. Хотите присоединиться к обсуждению? комната Это пред. просмотр комнаты. Вы в режиме только чтения. @@ -742,7 +743,7 @@ Email также позволит вам при необходимости во Добавить приложения Matrix Мобильный - Синхронизация + Синхронизация… Мониторинг событий Вызов @@ -924,7 +925,7 @@ Email также позволит вам при необходимости во Конфиденциальность уведомлений Нормальный Приложение нуждается в разрешении на работу в фоновом режиме - • Уведомления отправляются через Google Cloud Messaging + • Уведомления отправляются через Firebase Cloud Messaging • Уведомления содержат только метаданные • Уведомления содержат метаданные и данные сообщения • Уведомления не будут показывать содержимое сообщения @@ -1021,10 +1022,9 @@ Email также позволит вам при необходимости во Из-за отсутствия разрешений это действие невозможно. - %ds - %ds - %ds - + %d сек. + %d сек. + %d сек. %dm @@ -1039,10 +1039,9 @@ Email также позволит вам при необходимости во - %dd - %dd - %dd - + %d день + %d дни + %d дней Сейчас %1$s @@ -1073,7 +1072,7 @@ Email также позволит вам при необходимости во Системные оповещения - Исчерпан лимит ресурсов + Лимит ресурсов исчерпан Связаться с администратором Тема status.im @@ -1085,11 +1084,11 @@ Email также позволит вам при необходимости во Парольные фразы должны совпадать свяжитесь с вашим администратором - Превышен один из ресурсных лимитов сервера, по этому некоторые пользователи не смогут залогиниться. + Превышен один из ресурсных лимитов сервера, по этому некоторые пользователи не смогут авторизоваться. Превышен один из ресурсных лимитов сервера. Пожалуйста придумайте парольную фразу для шифрования экспортируемых ключей. Вам нужно будет ввести ту же самую фразу для импорта ключей. - Из-за ежемесячного ограничения активных пользователей сервера некоторые из пользователей не смогут залогиниться. + Из-за ежемесячного ограничения активных пользователей сервера некоторые из пользователей не смогут авторизоваться. Сервер достиг ежемесячного ограничения активных пользователей. Пожалуйста %s для увеличения этого лимита. @@ -1117,10 +1116,9 @@ Email также позволит вам при необходимости во Выгнать - Вы уверены, что хотите выгнать этого пользователя из чата? - - Вы уверены, что хотите выгнать этих пользователей из чата? - + Вы уверены, что хотите выгнать этого пользователя из чата\? + Вы уверены, что хотите выгнать этих пользователей из чата\? + Вы уверены, что хотите выгнать этих пользователей из чата\? Причина @@ -1217,7 +1215,7 @@ Email также позволит вам при необходимости во Оптимизация батареи Оптимизация батареи не влияет на Райот. - "Когда пользователь оставляет устройство неподвижным, отключенным от питания и с выключенным экраном, через некоторое время оно переходит в режим Doze. Это препятствует доступу приложений к сети и откладывает их работу, синхронизацию и стандартные сигналы. " + Если пользователь оставляет устройство в отключенном от сети и в неподвижном состоянии в течение некоторого времени при выключенном экране, устройство переходит в режим Doze. Это предотвращает доступ приложений к сети и откладывает выполнение заданий, синхронизацию и передачу стандартных аварийных сигналов. Игнорировать оптимизацию Предпросмотр ссылок в чате, когда ваш домашний сервер поддерживает эту функцию. @@ -1267,13 +1265,13 @@ Email также позволит вам при необходимости во Skip Расширенные настройки уведомлений - Установить важность уведомления по событию, Настроить звук, светодиод, вибрацию - Важность уведомления по событию + Установка важности уведомления по событию, Настроить звук, светодиод, вибрацию + Значение уведомления по событию - Выборочные настройки. + Пользовательские настройки. Обратите внимание, для некоторых типов сообщений выбран беззвучный режим (уведомление будет, но без звука). Некоторые уведомления отключены в настройках. - Не удалось загрузить пользовательские правила, попробуйте снова. + Не удалось загрузить пользовательские правила, повторите попытку. Проверьте настройки Добавить аккаунт @@ -1363,9 +1361,8 @@ Email также позволит вам при необходимости во Восстановлена резервная копия с %d ключом. - Восстановлена резервная копия с %d ключами. - Восстановлена резервная копия с %d ключами. - + Восстановлены резервные копии с %d ключами. + Восстановлены резервные копии с %d ключами. Восстановлены %1$d сеансовые ключи и добавлены %2$d новые ключи, которые не были известны этому устройству Невозможно расшифровать резервную копию с помощью этого ключа восстановления: убедитесь, что вы ввели правильный ключ. @@ -1379,12 +1376,11 @@ Email также позволит вам при необходимости во Предупреждение: этот файл может быть удален при удалении приложения. - [%1$s] -Эта ошибка вне контроля Riot. На телефоне нет учетной записи Google. Пожалуйста, добавьте аккаунт Google. + [%1$s] +\nЭта ошибка вне контроля Riot. На телефоне нет учетной записи Google. Пожалуйста, добавьте аккаунт Google. [%1$s] Эта ошибка вне контроля Riot. Причины могут быть разными. Возможно, это будет работать, если вы повторите попытку позже, вы также можете проверить, что службы Google Play не ограничены в использовании данных в настройках системы, или что часы вашего устройства установлены правильно, или это может произойти на модифицированных прошивках. - [%1$s] -Эта ошибка вне контроля Riot, и, по словам Google, эта ошибка означает, что на устройстве слишком много приложений, зарегистрированных в FCM. Ошибка возникает только в тех случаях, когда существует огромное количество приложений, поэтому она не должна влиять на обычгоно пользователя. + [%1$s] Эта ошибка вне контроля Riot, и, по словам Google, эта ошибка означает, что на устройстве слишком много приложений, зарегистрированных в FCM. Ошибка возникает только в тех случаях, когда существует огромное количество приложений, поэтому она не должна влиять на обычного пользователя. Ваши зашифрованные сообщения будут потеряны если выйдете сейчас Выполняется резервное копирование ключа. Если выйти сейчас, Вы потеряете доступ к Вашим зашифрованным сообщениям. Мне не нужны мои зашифрованные сообщения @@ -1440,7 +1436,7 @@ Email также позволит вам при необходимости во Если вы не настраивали новый метод восстановления, злоумышленник может пытаться получить доступ к вашей учетной записи. Измените пароль учетной записи и сразу же установите новый способ восстановления в настройках. Ваши ключи копируются. (Дополнительно) Настройка с ключом восстановления - В режиме экономии траффика применяется специальный фильтр, поэтому обновления присутствия и уведомления о наборе отфильтровываются. + В режиме экономии траффика применяется специальный фильтр, поэтому обновление присутствия и уведомления о наборе отфильтровываются. Или защитите резервную копию с помощью ключа восстановления, сохранив его в безопасном месте. Безопасная резервная копия ключей должна быть активирована на всех ваших устройствах, чтобы не потерять доступ к зашифрованным сообщениям. @@ -1457,7 +1453,7 @@ Email также позволит вам при необходимости во Инициализация сервиса Отметить как прочитанное Войти с помощью единого входа - "Этот URL не доступен, пожалуйста проверить " + Этот URL не доступен, пожалуйста проверьте его Отправить сообщение нажав ввод Обновить пароль Пароль не действителен @@ -1486,4 +1482,80 @@ Email также позволит вам при необходимости во Мне Использовать настройку + Проверить устройство + + Ваше устройство использует устаревший TLS протокол, уязвимый для атак, для вашей же безопасности вам отказано в подключении + Приложениям не" нужно подключаться к HomeServer в фоновом режиме, это должно снизить расход заряда батареи" + Клавиша Ввод отправит сообщение вместо переноса строки + + Воспроизвести звук затвора + + неизвестный IP + ** Отправить не удалось - пожалуйста откройте комнату + + К сожалению, конференц-звонки с Jitsi не поддерживаются на старых устройствах (ниже Android OS - 5.0) + + Новое устройство запрашивает ключи шифрования. +\nИмя устройства: %1$s +\nПоследний раз в сети: %2$s +\nЕсли вы не вошли с другого устройства, проигнорируйте этот запрос. + Непроверенное устройство запрашивает ключи шифрования. +\nИмя устройства: %1$s +\nПоследний раз в сети: %2$s +\nЕсли вы не вошли с другого устройства, проигнорируйте этот запрос. + + Подтвердить + Поделиться + Запрос поделится ключем + Игнорировать + + Недействительный ответ обнаружения сервера + Дополнить параметры сервера + Riot обнаружил пользовательскую конфигурацию сервера для вашего userID домена\"%1$s\": +\n%2$s + Проверьте, сравнив короткую текстовую строку. + Для обеспечения максимальной безопасности мы рекомендуем делать это лично или использовать другие надежные средства связи. + Начать проверку + Входящий запрос о проверке + Проверьте это устройство, чтобы отметить его как доверенное. Доверенные устройства партнеров дают вам дополнительное спокойствие при использовании сквозного шифрования сообщений. + Убедитесь, что данное устройство является доверенным, а также проверьте, что оно доверено вашему партнеру. + + Проверьте это устройство, убедившись, что следующие смайлики появляются на экране партнера + Проверьте это устройство, убедившись, что следующие цифры появляются на экране партнера + + Вы получили входящий запрос на подтверждение. + Посмотреть запрос + В ожидании партнера, чтобы подтвердить … + + Проверено! + Вы успешно проверили это устройство. + Защищенные сообщения от этого пользователя шифруются end-to-end и не могут быть прочитаны третьими лицами. + Понял + + Ничего не появляется\? Не все клиенты пока поддерживают интерактивную проверку. Используйте устаревшую проверку. + Используйте устаревшую проверку. + + Проверка ключа + Запрос отменен + Другая сторона отменила проверку. +\n%s + Проверка отменена. +\nПричина: %s + + Интерактивная проверка устройства + Запрос на подтверждение + %s хочет проверить ваше устройство + + Пользователь отменил проверку + Время проверки истекло + Устройство не знает об этой транзакции + Устройство не может договориться о соглашении по ключе, хэше, MAC или методе SAS + Полученный хеш не соответствует + SAS не соответствует + Устройство получило нежданное сообщение + Было получено недопустимое сообщение + Несоответствие ключей + Несоответствие пользователя + Неизвестная ошибка + diff --git a/vector/src/main/res/values-sk/strings.xml b/vector/src/main/res/values-sk/strings.xml index a170ce31..83d41ffc 100644 --- a/vector/src/main/res/values-sk/strings.xml +++ b/vector/src/main/res/values-sk/strings.xml @@ -7,7 +7,7 @@ Tmavý vzhľad Čierny vzhľad - Synchronizácia + Synchronizácia… Spracovanie udalostí Správy diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index 282cf705..dd285c7d 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -1363,4 +1363,65 @@ Që të garantoni se s’ju shpëton gjë, thjesht mbajeni të aktivizuar mekani Na ndjeni, thirrjet konferencë me Jitsi-n nuk mbulohen në pajisje të vjetra (pajisje me Android OS nën 5.0) + Verifikoni pajisje + + ip e panjohur + Një pajisje e re po kërkon kyçe fshehtëzimi. +\nEmër pajisje: %1$s +\nParë së fundi më: %2$s +\nNëse s’keni bërë hyrje në një tjetër pajisje, shpërfilleni këtë kërkesë. + Një pajisje e paverifikuar po kërkon kyçe fshehtëzimi. +\nEmër pajisjeje: %1$s +\nParë së fundi: %2$s +\nNëse s’keni bërë hyrje që nga një pajisje tjetër, shpërfilleni këtë kërkesë. + + Verifikoje + Ndaje + Kërkesat Për Ndarje Kyçesh + Shpërfille + + Verifikoje duke krahasuar një varg të shkurtër teksti. + Për siguri maksimale, këshillojmë ta bëni këtë në prani të vetë personit, ose të përdorni një tjetër kanal të besuar komunikimesh. + Po Verifikohet + Kërkesë Verifikimi e Ardhur + Që t’i vihet shenjë si e besuar, verifikojeni këtë pajisje. Besimi i pajisjeve të partnerëve ju jep ca qetësi më tepër kur përdoren mesazhe të fshehtëzuar skaj-më-skaj. + Verifikimi i kësaj pajisje do ta shënojë atë të besuar, dhe tuajën si të besuar te partneri. + + Verifikojeni këtë pajisje duke ripohuar shfaqjen e emoji-t vijues në skenën e partnerit. + Verifikojeni këtë pajisje duke ripohuar se numri vijues shfaqet në ekranin e partnerit + + Morët një kërkesë verifikimi të ardhur + Shihni kërkesën + Po pritet ripohimi nga partneri… + + U verifikua! + E verifikuat me sukses këtë pajisje. + Mesazhet e sigurt me këtë përdorues fshehtëzohen skaj-më-skaj dhe janë të palexueshëm nga palë të treta. + E mora vesh + + S’duket gjë\? Jo të tërë klientët mbulojnë verifikim ndërveprues ende. Përdorni verifikimin në stil të vjetër. + Përdor verifikim të dikurshëm. + + Verifikim Kyçi + Kërkesa u Anulua + Pala tjetër e anuloi verifikimin. +\n%s + Verifikimi u anulua. +\nArsye: %s + + Verifikim Ndërveprues Pajisjesh + Kërkesë Verifikimi + %s dëshiron të verifikojë pajisjen tuaj + + Përdoruesi e anuloi verifikimin + Procesit të verifikimit i mbaroi koha + Pajisja s’di gjë rreth këtij transaksioni + Pajisja s’bie dot dakord për metodë marrëveshjeje kyçesh, hash, MAC, ose SAS + SAS s’u përputhën + Pajisja mori përgjigje të papritur + U mor një mesazh i pavlefshëm + Mospërputhje kyçesh + Mospërputhje përdoruesish + Gabim i Panjohur + diff --git a/vector/src/main/res/values-vls/strings.xml b/vector/src/main/res/values-vls/strings.xml new file mode 100644 index 00000000..e07f432d --- /dev/null +++ b/vector/src/main/res/values-vls/strings.xml @@ -0,0 +1,40 @@ + + + Versleuteld bericht + + vls + BE + + Licht thema + Dounker thema + Zwart thema + Status.im-thema + + Dienst wor geïnitialiseerd + Bezig me synchroniseern… + Luustern achter evenementn + Geluudsmeldiengn + Stille meldiengn + + Berichtn + Gesprek + Instelliengn + Info over deelnemer + Historisch + Foutmeldienge + Info over gemeenschap + Verstuurt e sticker + Sleuterback-up + Sleuterback-up gebruukn + Toestel verifieern + + Sleuterback-up is nog nie gereed, eftjes geduld… + Indien da je je nu afmeldt, goa je je versleuterde berichtn kwytspeeln + Sleuterback-up is bezig. Indien da je je nu afmeldt, goa je den toegank tou al je versleuterde berichtn kwytspeeln. + Veilige sleuterback-up moet actief zyn ip oal je toestelln vo den toegank tou je versleuterde berichtn nie kwyt te speeln. + \'k En willn ik myn versleuterde berichtn nie + Sleuters wordn geback-upt… + Sleuterback-up gebruukn + Zy je zeker\? + Back-up moakn + diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 17fd3237..21a52266 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -1357,4 +1357,66 @@ Matrix 中的消息可見度類似于電子郵件。我們忘記您的郵件意 抱歉,使用 Jitsi 建立會議通話在舊裝置上並不支援(Android 系統版本小於 5.0 的裝置) + 驗證裝置 + + 未知的 IP + 有新裝置正在要求加密金鑰。 +\n裝置名稱:%1$s +\n上次檢視:%2$s +\n如果您沒有在其他裝置上登入,請忽略本請求。 + 有未驗證的裝置正在要求加密金鑰。 +\n裝置名稱:%1$s +\n上次檢視:%2$s +\n如果您沒有在其他裝置上登入,請忽略本請求。 + + 驗證 + 分享 + 金鑰分享請求 + 忽略 + + 透過比較短文字字串來驗證。 + 為了最佳的安全性,我們建議您面對面或以其他可信的通訊方式執行此操作。 + 開始驗證 + 傳來的驗證請求 + 驗證此裝置以將其標記為可信任。在使用端到端加密訊息時,信任夥伴的裝置可以讓您更安心。 + 驗證此裝置會將其標記為可信任,同時也會在對方的裝置上將您的裝置標記為可信任。 + + 透過確認出現在夥伴螢幕下方的顏文字來驗證此裝置 + 透過確認出現在夥伴螢幕下方的數字來驗證此裝置 + + 您已收到傳來的驗證請求。 + 檢視請求 + 正在等待夥伴確認…… + + 已驗證! + 您已成功驗證此裝置。 + 與此使用者的安全訊息是端到端加密,無法被第三方讀取。 + 知道了 + + 沒有出現東西嗎?不是所有客戶端都支援互動式驗證。使用舊版驗證方式。 + 使用舊版驗證方式。 + + 金鑰驗證 + 請求已取消 + 其他夥伴已取消驗證。 +\n%s + 驗證已取消。 +\n理由:%s + + 互動式裝置驗證 + 驗證請求 + %s 想要驗證您的裝置 + + 使用者已取消驗證 + 驗證程序逾時 + 裝置不知道該處理過程 + 裝置無法就金鑰協議、雜湊、MAC 或 SAS 方法達成一致 + 雜湊不符合 + SAS 不符合 + 裝置收到未預期的訊息 + 收到無效的訊息 + 金鑰不符合 + 使用者不符合 + 未知錯誤 + diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index b1693255..cf34df26 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -58,8 +58,6 @@ Stay Send Copy - Edit - Reply Resend Remove Quote @@ -366,8 +364,8 @@ Riot needs permission to access your microphone to perform audio calls. \n\nPlease allow access on the next pop-up to be able to make the call. Riot needs permission to access your camera and your microphone to perform video calls.\n\nPlease allow access on the next pop-ups to be able to make the call. - Riot needs permission to access your address book contacts to find other Matrix users based on their email and phone numbers.\n\nPlease allow access on the next pop-up to discover address book users reachable from Riot. - Riot needs permission to access your address book contact to find other Matrix users based on their email and phone numbers.\n\nAllow Riot to access your contacts ? + Riot can check your address book to find other Matrix users based on their email and phone numbers. If you agree to share your address book for this purpose, please allow access on the next pop-up. + Riot can check your address book to find other Matrix users based on their email and phone numbers.\n\nDo you agree to share your address book for this purpose? Sorry. Action not performed, due to missing permissions @@ -1308,6 +1306,11 @@ Why choose Riot.im? Save as File The recovery key has been saved to \'%s\'.\n\nWarning: this file may be deleted if the application is uninstalled. + A backup already exist on your HomeServer + It looks like you already have setup key backup from another device. Do you want to replace it with the one you’re creating? + Replace + Stop + Please make a copy Share recovery key with… Generating Recovery Key using passphrase, this process can take several seconds. @@ -1379,8 +1382,8 @@ Why choose Riot.im? To use Key Backup on this device, restore with your passphrase or recovery key now. Deleting backup… Failed to delete backup (%s) - Checking backup state + Checking backup state Delete Backup Delete your backed up encryption keys from the server? You will no longer be able to use your recovery key to read encrypted message history. @@ -1415,6 +1418,8 @@ Why choose Riot.im? Riot detected a custom server configuration for your userId domain \"%1$s\":\n%2$s Use Config + You have been logged out due to invalid or expired credentials. + Verify by comparing a short text string. For maximum security, we recommend you do this in person or use another trusted means of communication. Begin Verifying @@ -1459,4 +1464,61 @@ Why choose Riot.im? User mismatch Unknown Error + + + Edit + Reply + + "Retry" + "Join a room to start using the app." + "Sent you an invitation" + Invited by %s + + You’re all caught up! + You have no more unread messages + Welcome home! + Catch up on unread messages here + Conversations + Your direct message conversation will be displayed here + Rooms + Your rooms will be displayed here + + Reactions + Agree + Like + Add Reaction + View Reactions + Reactions + + Event deleted by user + Event moderated by room admin + Last edited by %s on %s + + + Malformed event, cannot display + Create New Room + No network. Please check your Internet connection. + "Change" + "Change network" + "Please wait…" + "All Communities" + + "This room can't be previewed" + "The preview of world-readable room is not supported yet in RiotX" + + "Rooms" + "Direct Messages" + + + "New Room" + "CREATE" + "Room name" + "Public" + "Anyone will be able to join this room" + "Room Directory" + "Publish this room in the room directory" + + "An error occurred getting trust info" + "An error occurred getting keys backup data" + diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index b41e5145..a3c5206b 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -2,56 +2,6 @@ - "Retry" - "Join a room to start using the app." - "Sent you an invitation" - Invited by %s - You’re all caught up! - You have no more unread messages - Welcome home! - Catch up on unread messages here - Conversations - Your direct message conversation will be displayed here - Rooms - Your rooms will be displayed here - - Reactions - Agree - Like - Add Reaction - View Reactions - Reactions - - Event deleted by user - Event moderated by room admin - Last edited by %s on %s - - - Malformed event, cannot display - Create New Room - No network. Please check your Internet connection. - "Change" - "Change network" - "Please wait…" - "All Communities" - - "This room can't be previewed" - "The preview of world-readable room is not supported yet in RiotX" - - "Rooms" - "Direct Messages" - - - "New Room" - "CREATE" - "Room name" - "Public" - "Anyone will be able to join this room" - "Room Directory" - "Publish this room in the room directory" - - "An error occurred getting trust info" - "An error occurred getting keys backup data" \ No newline at end of file From 1547045165478d577cf8357e5fd5d46ad7ee1097 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 12 Jun 2019 14:49:39 +0200 Subject: [PATCH 08/77] Request can now be canceled properly: it should fix the issue with live chunk being deleted. --- .../android/internal/network/Request.kt | 41 ++++++++++++------- .../session/group/DefaultGetGroupDataTask.kt | 31 +++++++------- .../room/relation/SendRelationWorker.kt | 5 ++- .../session/room/send/RedactEventWorker.kt | 5 ++- .../session/room/send/SendEventWorker.kt | 5 ++- 5 files changed, 49 insertions(+), 38 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/Request.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/Request.kt index 139d6215..bbd5859b 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/Request.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/Request.kt @@ -28,34 +28,45 @@ import com.squareup.moshi.Moshi import im.vector.matrix.android.api.failure.Failure import im.vector.matrix.android.api.failure.MatrixError import im.vector.matrix.android.internal.di.MoshiProvider +import kotlinx.coroutines.suspendCancellableCoroutine import okhttp3.ResponseBody import retrofit2.Call import timber.log.Timber import java.io.IOException +import kotlin.coroutines.resume -internal inline fun executeRequest(block: Request.() -> Unit) = Request().apply(block).execute() +internal suspend inline fun executeRequest(block: Request.() -> Unit) = Request().apply(block).execute() internal class Request { private val moshi: Moshi = MoshiProvider.providesMoshi() lateinit var apiCall: Call - fun execute(): Try { - return Try { - val response = apiCall.runAsync(IO.async()).fix().unsafeRunSync() - if (response.isSuccessful) { - response.body() ?: throw IllegalStateException("The request returned a null body") - } else { - throw manageFailure(response.errorBody(), response.code()) + suspend fun execute(): Try { + return suspendCancellableCoroutine { continuation -> + continuation.invokeOnCancellation { + Timber.v("Request is canceled") + apiCall.cancel() } - }.recoverWith { - when (it) { - is IOException -> Failure.NetworkConnection(it) - is Failure.ServerError, - is Failure.OtherServerError -> it - else -> Failure.Unknown(it) - }.failure() + val result = Try { + val response = apiCall.runAsync(IO.async()).fix().unsafeRunSync() + if (response.isSuccessful) { + response.body() + ?: throw IllegalStateException("The request returned a null body") + } else { + throw manageFailure(response.errorBody(), response.code()) + } + }.recoverWith { + when (it) { + is IOException -> Failure.NetworkConnection(it) + is Failure.ServerError, + is Failure.OtherServerError -> it + else -> Failure.Unknown(it) + }.failure() + } + continuation.resume(result) } + } private fun manageFailure(errorBody: ResponseBody?, httpCode: Int): Throwable { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/DefaultGetGroupDataTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/DefaultGetGroupDataTask.kt index 0785c334..3d547c53 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/DefaultGetGroupDataTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/DefaultGetGroupDataTask.kt @@ -21,13 +21,13 @@ import arrow.core.fix import arrow.instances.`try`.monad.monad import arrow.typeclasses.binding import com.zhuinden.monarchy.Monarchy -import im.vector.matrix.android.internal.task.Task import im.vector.matrix.android.internal.database.model.GroupSummaryEntity import im.vector.matrix.android.internal.database.query.where import im.vector.matrix.android.internal.network.executeRequest import im.vector.matrix.android.internal.session.group.model.GroupRooms import im.vector.matrix.android.internal.session.group.model.GroupSummaryResponse import im.vector.matrix.android.internal.session.group.model.GroupUsers +import im.vector.matrix.android.internal.task.Task import im.vector.matrix.android.internal.util.tryTransactionSync import io.realm.kotlin.createObject @@ -45,21 +45,17 @@ internal class DefaultGetGroupDataTask( override suspend fun execute(params: GetGroupDataTask.Params): Try { val groupId = params.groupId + val groupSummary = executeRequest { + apiCall = groupAPI.getSummary(groupId) + } + val groupRooms = executeRequest { + apiCall = groupAPI.getRooms(groupId) + } + val groupUsers = executeRequest { + apiCall = groupAPI.getUsers(groupId) + } return Try.monad().binding { - - val groupSummary = executeRequest { - apiCall = groupAPI.getSummary(groupId) - }.bind() - - val groupRooms = executeRequest { - apiCall = groupAPI.getRooms(groupId) - }.bind() - - val groupUsers = executeRequest { - apiCall = groupAPI.getUsers(groupId) - }.bind() - - insertInDb(groupSummary, groupRooms, groupUsers, groupId).bind() + insertInDb(groupSummary.bind(), groupRooms.bind(), groupUsers.bind(), groupId).bind() }.fix() } @@ -71,12 +67,13 @@ internal class DefaultGetGroupDataTask( return monarchy .tryTransactionSync { realm -> val groupSummaryEntity = GroupSummaryEntity.where(realm, groupId).findFirst() - ?: realm.createObject(groupId) + ?: realm.createObject(groupId) groupSummaryEntity.avatarUrl = groupSummary.profile?.avatarUrl ?: "" val name = groupSummary.profile?.name groupSummaryEntity.displayName = if (name.isNullOrEmpty()) groupId else name - groupSummaryEntity.shortDescription = groupSummary.profile?.shortDescription ?: "" + groupSummaryEntity.shortDescription = groupSummary.profile?.shortDescription + ?: "" val roomIds = groupRooms.rooms.map { it.roomId } groupSummaryEntity.roomIds.clear() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/relation/SendRelationWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/relation/SendRelationWorker.kt index 41184aaf..824c85b8 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/relation/SendRelationWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/relation/SendRelationWorker.kt @@ -16,6 +16,7 @@ package im.vector.matrix.android.internal.session.room.relation import android.content.Context +import androidx.work.CoroutineWorker import androidx.work.Worker import androidx.work.WorkerParameters import com.squareup.moshi.JsonClass @@ -32,7 +33,7 @@ import im.vector.matrix.android.internal.util.WorkerParamsFactory import org.koin.standalone.inject class SendRelationWorker(context: Context, params: WorkerParameters) - : Worker(context, params), MatrixKoinComponent { + : CoroutineWorker(context, params), MatrixKoinComponent { @JsonClass(generateAdapter = true) @@ -44,7 +45,7 @@ class SendRelationWorker(context: Context, params: WorkerParameters) private val roomAPI by inject() - override fun doWork(): Result { + override suspend fun doWork(): Result { val params = WorkerParamsFactory.fromData(inputData) ?: return Result.failure() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt index 5056a93b..e51889f4 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt @@ -16,6 +16,7 @@ package im.vector.matrix.android.internal.session.room.send import android.content.Context +import androidx.work.CoroutineWorker import androidx.work.Worker import androidx.work.WorkerParameters import com.squareup.moshi.JsonClass @@ -27,7 +28,7 @@ import im.vector.matrix.android.internal.util.WorkerParamsFactory import org.koin.standalone.inject internal class RedactEventWorker(context: Context, params: WorkerParameters) - : Worker(context, params), MatrixKoinComponent { + : CoroutineWorker(context, params), MatrixKoinComponent { @JsonClass(generateAdapter = true) internal data class Params( @@ -39,7 +40,7 @@ internal class RedactEventWorker(context: Context, params: WorkerParameters) private val roomAPI by inject() - override fun doWork(): Result { + override suspend fun doWork(): Result { val params = WorkerParamsFactory.fromData(inputData) ?: return Result.failure() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt index 32239b53..3b2fd87b 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt @@ -17,6 +17,7 @@ package im.vector.matrix.android.internal.session.room.send import android.content.Context +import androidx.work.CoroutineWorker import androidx.work.Worker import androidx.work.WorkerParameters import com.squareup.moshi.JsonClass @@ -30,7 +31,7 @@ import im.vector.matrix.android.internal.util.WorkerParamsFactory import org.koin.standalone.inject internal class SendEventWorker(context: Context, params: WorkerParameters) - : Worker(context, params), MatrixKoinComponent { + : CoroutineWorker(context, params), MatrixKoinComponent { @JsonClass(generateAdapter = true) @@ -42,7 +43,7 @@ internal class SendEventWorker(context: Context, params: WorkerParameters) private val roomAPI by inject() private val localEchoUpdater by inject() - override fun doWork(): Result { + override suspend fun doWork(): Result { val params = WorkerParamsFactory.fromData(inputData) ?: return Result.success() From 9649e190efcba57195b70ca19316cf31664f4ea4 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 17 Jun 2019 16:28:27 +0200 Subject: [PATCH 09/77] Fix compilation issue after rebase --- .../internal/crypto/tasks/DeleteDeviceTask.kt | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt index 2b7649fd..2222c470 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt @@ -29,7 +29,10 @@ import im.vector.matrix.android.internal.crypto.model.rest.DeleteDeviceParams import im.vector.matrix.android.internal.di.MoshiProvider import im.vector.matrix.android.internal.network.executeRequest import im.vector.matrix.android.internal.task.Task +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch import timber.log.Timber +import java.util.concurrent.CountDownLatch internal interface DeleteDeviceTask : Task { data class Params( @@ -50,9 +53,10 @@ internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi, // Replay the request with passing the credentials // Parse to get a RegistrationFlowResponse - val registrationFlowResponseAdapter = MoshiProvider.providesMoshi().adapter(RegistrationFlowResponse::class.java) val registrationFlowResponse = try { - registrationFlowResponseAdapter.fromJson(throwable.errorBody) + MoshiProvider.providesMoshi() + .adapter(RegistrationFlowResponse::class.java) + .fromJson(throwable.errorBody) } catch (e: Exception) { null } @@ -68,7 +72,16 @@ internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi, Timber.v("## deleteDevice() : supported stages $stages") - deleteDeviceRecursive(registrationFlowResponse.session, params, stages) + val latch = CountDownLatch(1) + var deleteDeviceRecursiveResult: Try = Try.just(Unit) + + GlobalScope.launch { + deleteDeviceRecursiveResult = deleteDeviceRecursive(registrationFlowResponse.session, params, stages) + latch.countDown() + } + + latch.await() + deleteDeviceRecursiveResult } else { throwable.failure() } @@ -80,9 +93,9 @@ internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi, } } - private fun deleteDeviceRecursive(authSession: String?, - params: DeleteDeviceTask.Params, - remainingStages: MutableList): Try { + private suspend fun deleteDeviceRecursive(authSession: String?, + params: DeleteDeviceTask.Params, + remainingStages: MutableList): Try { // Pick the first stage val stage = remainingStages.first() @@ -107,7 +120,16 @@ internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi, // Try next stage val otherStages = remainingStages.subList(1, remainingStages.size) - deleteDeviceRecursive(authSession, params, otherStages) + val latch = CountDownLatch(1) + var deleteDeviceRecursiveResult: Try = Try.just(Unit) + + GlobalScope.launch { + deleteDeviceRecursiveResult = deleteDeviceRecursive(authSession, params, otherStages) + latch.countDown() + } + + latch.await() + deleteDeviceRecursiveResult } else { // No more stage remaining throwable.failure() From 6266f9e6a13d4ac37749f75c937b5b4b092dd909 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 17 Jun 2019 17:32:35 +0200 Subject: [PATCH 10/77] Handle device deletion the proper way --- .../matrix/android/api/failure/Failure.kt | 3 + .../api/session/crypto/CryptoService.kt | 4 +- .../data/InteractiveAuthenticationFlow.kt | 2 +- .../internal/auth/data/LoginFlowTypes.kt | 2 +- .../registration/RegistrationFlowResponse.kt | 2 +- .../android/internal/crypto/CryptoManager.kt | 13 +- .../android/internal/crypto/CryptoModule.kt | 6 +- .../crypto/model/rest/DeleteDeviceAuth.kt | 2 +- .../crypto/model/rest/DeleteDeviceParams.kt | 2 +- .../internal/crypto/tasks/DeleteDeviceTask.kt | 85 +----------- .../tasks/DeleteDeviceWithUserPasswordTask.kt | 54 ++++++++ .../internal/session/DefaultSession.kt | 8 +- .../VectorSettingsPreferencesFragment.kt | 128 +++++++++++------- 13 files changed, 172 insertions(+), 139 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/failure/Failure.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/failure/Failure.kt index 232a13d8..593c33b9 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/failure/Failure.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/failure/Failure.kt @@ -17,6 +17,7 @@ package im.vector.matrix.android.api.failure import im.vector.matrix.android.api.session.crypto.MXCryptoError +import im.vector.matrix.android.internal.auth.registration.RegistrationFlowResponse import java.io.IOException /** @@ -35,6 +36,8 @@ sealed class Failure(cause: Throwable? = null) : Throwable(cause = cause) { // When server send an error, but it cannot be interpreted as a MatrixError data class OtherServerError(val errorBody: String, val httpCode: Int) : Failure(RuntimeException(errorBody)) + data class RegistrationFlowError(val registrationFlowResponse: RegistrationFlowResponse) : Failure(RuntimeException(registrationFlowResponse.toString())) + data class CryptoError(val error: MXCryptoError) : Failure(RuntimeException(error.toString())) abstract class FeatureFailure : Failure() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/CryptoService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/CryptoService.kt index e7c3c445..0f978413 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/CryptoService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/CryptoService.kt @@ -36,7 +36,9 @@ interface CryptoService { fun setDeviceName(deviceId: String, deviceName: String, callback: MatrixCallback) - fun deleteDevice(deviceId: String, accountPassword: String, callback: MatrixCallback) + fun deleteDevice(deviceId: String, callback: MatrixCallback) + + fun deleteDeviceWithUserPassword(deviceId: String, authSession: String?, password: String, callback: MatrixCallback) fun getCryptoVersion(context: Context, longFormat: Boolean): String diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/InteractiveAuthenticationFlow.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/InteractiveAuthenticationFlow.kt index c5d8dcc5..ae75b273 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/InteractiveAuthenticationFlow.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/InteractiveAuthenticationFlow.kt @@ -23,7 +23,7 @@ import com.squareup.moshi.JsonClass * An interactive authentication flow. */ @JsonClass(generateAdapter = true) -internal data class InteractiveAuthenticationFlow( +data class InteractiveAuthenticationFlow( @Json(name = "type") val type: String? = null, diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlowTypes.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlowTypes.kt index 2cf450d2..1e129f1b 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlowTypes.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/data/LoginFlowTypes.kt @@ -16,7 +16,7 @@ package im.vector.matrix.android.internal.auth.data -internal object LoginFlowTypes { +object LoginFlowTypes { const val PASSWORD = "m.login.password" const val OAUTH2 = "m.login.oauth2" const val EMAIL_CODE = "m.login.email.code" diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt index 747db64c..0eb7b05b 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/registration/RegistrationFlowResponse.kt @@ -22,7 +22,7 @@ import im.vector.matrix.android.api.util.JsonDict import im.vector.matrix.android.internal.auth.data.InteractiveAuthenticationFlow @JsonClass(generateAdapter = true) -internal data class RegistrationFlowResponse( +data class RegistrationFlowResponse( /** * The list of flows. diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt index 8b29287d..5e422571 100755 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt @@ -55,6 +55,7 @@ import im.vector.matrix.android.internal.crypto.model.rest.KeysUploadResponse import im.vector.matrix.android.internal.crypto.model.rest.RoomKeyRequestBody import im.vector.matrix.android.internal.crypto.repository.WarnOnUnknownDeviceRepository import im.vector.matrix.android.internal.crypto.store.IMXCryptoStore +import im.vector.matrix.android.internal.crypto.tasks.* import im.vector.matrix.android.internal.crypto.tasks.DeleteDeviceTask import im.vector.matrix.android.internal.crypto.tasks.GetDevicesTask import im.vector.matrix.android.internal.crypto.tasks.SetDeviceNameTask @@ -124,6 +125,7 @@ internal class CryptoManager( private val megolmEncryptionFactory: MXMegolmEncryptionFactory, private val olmEncryptionFactory: MXOlmEncryptionFactory, private val deleteDeviceTask: DeleteDeviceTask, + private val deleteDeviceWithUserPasswordTask: DeleteDeviceWithUserPasswordTask, // Tasks private val getDevicesTask: GetDevicesTask, private val setDeviceNameTask: SetDeviceNameTask, @@ -163,9 +165,16 @@ internal class CryptoManager( .executeBy(taskExecutor) } - override fun deleteDevice(deviceId: String, accountPassword: String, callback: MatrixCallback) { + override fun deleteDevice(deviceId: String, callback: MatrixCallback) { deleteDeviceTask - .configureWith(DeleteDeviceTask.Params(deviceId, accountPassword)) + .configureWith(DeleteDeviceTask.Params(deviceId)) + .dispatchTo(callback) + .executeBy(taskExecutor) + } + + override fun deleteDeviceWithUserPassword(deviceId: String, authSession: String?, password: String, callback: MatrixCallback) { + deleteDeviceWithUserPasswordTask + .configureWith(DeleteDeviceWithUserPasswordTask.Params(deviceId, authSession, password)) .dispatchTo(callback) .executeBy(taskExecutor) } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt index 6c786209..761318ac 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoModule.kt @@ -193,6 +193,7 @@ internal class CryptoModule { megolmEncryptionFactory = get(), olmEncryptionFactory = get(), deleteDeviceTask = get(), + deleteDeviceWithUserPasswordTask = get(), // Tasks getDevicesTask = get(), setDeviceNameTask = get(), @@ -227,7 +228,10 @@ internal class CryptoModule { DefaultClaimOneTimeKeysForUsersDevice(get()) as ClaimOneTimeKeysForUsersDeviceTask } scope(DefaultSession.SCOPE) { - DefaultDeleteDeviceTask(get(), get()) as DeleteDeviceTask + DefaultDeleteDeviceTask(get()) as DeleteDeviceTask + } + scope(DefaultSession.SCOPE) { + DefaultDeleteDeviceWithUserPasswordTask(get(), get()) as DeleteDeviceWithUserPasswordTask } scope(DefaultSession.SCOPE) { DefaultDownloadKeysForUsers(get()) as DownloadKeysForUsersTask diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceAuth.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceAuth.kt index 6a03d260..53ba4179 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceAuth.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceAuth.kt @@ -22,7 +22,7 @@ import com.squareup.moshi.JsonClass * This class provides the authentication data to delete a device */ @JsonClass(generateAdapter = true) -data class DeleteDeviceAuth( +internal data class DeleteDeviceAuth( // device device session id @Json(name = "session") diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt index c7e98362..f823de2e 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt @@ -22,7 +22,7 @@ import com.squareup.moshi.JsonClass * This class provides the parameter to delete a device */ @JsonClass(generateAdapter = true) -data class DeleteDeviceParams( +internal data class DeleteDeviceParams( @Json(name = "auth") var deleteDeviceAuth: DeleteDeviceAuth? = null ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt index 2222c470..6bdb72d8 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceTask.kt @@ -19,30 +19,21 @@ package im.vector.matrix.android.internal.crypto.tasks import arrow.core.Try import arrow.core.failure import arrow.core.recoverWith -import im.vector.matrix.android.api.auth.data.Credentials import im.vector.matrix.android.api.failure.Failure -import im.vector.matrix.android.api.failure.MatrixError import im.vector.matrix.android.internal.auth.registration.RegistrationFlowResponse import im.vector.matrix.android.internal.crypto.api.CryptoApi -import im.vector.matrix.android.internal.crypto.model.rest.DeleteDeviceAuth import im.vector.matrix.android.internal.crypto.model.rest.DeleteDeviceParams import im.vector.matrix.android.internal.di.MoshiProvider import im.vector.matrix.android.internal.network.executeRequest import im.vector.matrix.android.internal.task.Task -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch -import timber.log.Timber -import java.util.concurrent.CountDownLatch internal interface DeleteDeviceTask : Task { data class Params( - val deviceId: String, - val accountPassword: String + val deviceId: String ) } -internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi, - private val credentials: Credentials) +internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi) : DeleteDeviceTask { override suspend fun execute(params: DeleteDeviceTask.Params): Try { @@ -50,8 +41,6 @@ internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi, apiCall = cryptoApi.deleteDevice(params.deviceId, DeleteDeviceParams()) }.recoverWith { throwable -> if (throwable is Failure.OtherServerError && throwable.httpCode == 401) { - // Replay the request with passing the credentials - // Parse to get a RegistrationFlowResponse val registrationFlowResponse = try { MoshiProvider.providesMoshi() @@ -62,26 +51,8 @@ internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi, } // check if the server response can be casted - if (registrationFlowResponse?.flows?.isNotEmpty() == true) { - val stages = ArrayList() - - // Get all stages - registrationFlowResponse.flows?.forEach { - stages.addAll(it.stages ?: emptyList()) - } - - Timber.v("## deleteDevice() : supported stages $stages") - - val latch = CountDownLatch(1) - var deleteDeviceRecursiveResult: Try = Try.just(Unit) - - GlobalScope.launch { - deleteDeviceRecursiveResult = deleteDeviceRecursive(registrationFlowResponse.session, params, stages) - latch.countDown() - } - - latch.await() - deleteDeviceRecursiveResult + if (registrationFlowResponse != null) { + Failure.RegistrationFlowError(registrationFlowResponse).failure() } else { throwable.failure() } @@ -92,52 +63,4 @@ internal class DefaultDeleteDeviceTask(private val cryptoApi: CryptoApi, } } } - - private suspend fun deleteDeviceRecursive(authSession: String?, - params: DeleteDeviceTask.Params, - remainingStages: MutableList): Try { - // Pick the first stage - val stage = remainingStages.first() - - val newParams = DeleteDeviceParams() - .apply { - deleteDeviceAuth = DeleteDeviceAuth() - .apply { - type = stage - session = authSession - user = credentials.userId - password = params.accountPassword - } - } - - return executeRequest { - apiCall = cryptoApi.deleteDevice(params.deviceId, newParams) - }.recoverWith { throwable -> - if (throwable is Failure.ServerError - && throwable.httpCode == 401 - && (throwable.error.code == MatrixError.FORBIDDEN || throwable.error.code == MatrixError.UNKNOWN)) { - if (remainingStages.size > 1) { - // Try next stage - val otherStages = remainingStages.subList(1, remainingStages.size) - - val latch = CountDownLatch(1) - var deleteDeviceRecursiveResult: Try = Try.just(Unit) - - GlobalScope.launch { - deleteDeviceRecursiveResult = deleteDeviceRecursive(authSession, params, otherStages) - latch.countDown() - } - - latch.await() - deleteDeviceRecursiveResult - } else { - // No more stage remaining - throwable.failure() - } - } else { - // Other error - throwable.failure() - } - } - } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt new file mode 100644 index 00000000..7b6d1dfe --- /dev/null +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt @@ -0,0 +1,54 @@ +/* + * 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.matrix.android.internal.crypto.tasks + +import arrow.core.Try +import im.vector.matrix.android.api.auth.data.Credentials +import im.vector.matrix.android.internal.auth.data.LoginFlowTypes +import im.vector.matrix.android.internal.crypto.api.CryptoApi +import im.vector.matrix.android.internal.crypto.model.rest.DeleteDeviceAuth +import im.vector.matrix.android.internal.crypto.model.rest.DeleteDeviceParams +import im.vector.matrix.android.internal.network.executeRequest +import im.vector.matrix.android.internal.task.Task + +internal interface DeleteDeviceWithUserPasswordTask : Task { + data class Params( + val deviceId: String, + val authSession: String?, + val password: String + ) +} + +internal class DefaultDeleteDeviceWithUserPasswordTask(private val cryptoApi: CryptoApi, + private val credentials: Credentials) + : DeleteDeviceWithUserPasswordTask { + + override suspend fun execute(params: DeleteDeviceWithUserPasswordTask.Params): Try { + return executeRequest { + apiCall = cryptoApi.deleteDevice(params.deviceId, DeleteDeviceParams() + .apply { + deleteDeviceAuth = DeleteDeviceAuth() + .apply { + type = LoginFlowTypes.PASSWORD + session = params.authSession + user = credentials.userId + password = params.password + } + }) + } + } +} diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultSession.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultSession.kt index 747ee9e4..ecbdd156 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultSession.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/DefaultSession.kt @@ -290,8 +290,12 @@ internal class DefaultSession(override val sessionParams: SessionParams) : Sessi cryptoService.setDeviceName(deviceId, deviceName, callback) } - override fun deleteDevice(deviceId: String, accountPassword: String, callback: MatrixCallback) { - cryptoService.deleteDevice(deviceId, accountPassword, callback) + override fun deleteDevice(deviceId: String, callback: MatrixCallback) { + cryptoService.deleteDevice(deviceId, callback) + } + + override fun deleteDeviceWithUserPassword(deviceId: String, authSession: String?, password: String, callback: MatrixCallback) { + cryptoService.deleteDeviceWithUserPassword(deviceId, authSession, password, callback) } override fun getCryptoVersion(context: Context, longFormat: Boolean): String { diff --git a/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt index fb5c3a58..4b8bb592 100755 --- a/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsPreferencesFragment.kt @@ -46,7 +46,9 @@ import com.google.android.material.textfield.TextInputLayout import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.extensions.getFingerprintHumanReadable import im.vector.matrix.android.api.extensions.sortByLastSeen +import im.vector.matrix.android.api.failure.Failure import im.vector.matrix.android.api.session.Session +import im.vector.matrix.android.internal.auth.data.LoginFlowTypes import im.vector.matrix.android.internal.crypto.model.rest.DeviceInfo import im.vector.matrix.android.internal.crypto.model.rest.DevicesListResponse import im.vector.riotredesign.R @@ -2413,7 +2415,7 @@ class VectorSettingsPreferencesFragment : VectorPreferenceFragment(), SharedPref // disable the deletion for our own device if (!TextUtils.equals(mSession.getMyDevice()?.deviceId, aDeviceInfo.deviceId)) { - builder.setNegativeButton(R.string.delete) { _, _ -> displayDeviceDeletionDialog(aDeviceInfo) } + builder.setNegativeButton(R.string.delete) { _, _ -> deleteDevice(aDeviceInfo) } } builder.setNeutralButton(R.string.cancel, null) @@ -2486,11 +2488,17 @@ class VectorSettingsPreferencesFragment : VectorPreferenceFragment(), SharedPref /** * Try to delete a device. * - * @param deviceId the device id + * @param deviceInfo the device to delete */ - private fun deleteDevice(deviceId: String) { + private fun deleteDevice(deviceInfo: DeviceInfo) { + val deviceId = deviceInfo.deviceId + if (deviceId == null) { + Timber.e("## displayDeviceDeletionDialog(): sanity check failure") + return + } + displayLoadingView() - mSession.deleteDevice(deviceId, mAccountPassword, object : MatrixCallback { + mSession.deleteDevice(deviceId, object : MatrixCallback { override fun onSuccess(data: Unit) { hideLoadingView() // force settings update @@ -2498,59 +2506,85 @@ class VectorSettingsPreferencesFragment : VectorPreferenceFragment(), SharedPref } override fun onFailure(failure: Throwable) { - mAccountPassword = "" - onCommonDone(failure.localizedMessage) + var isPasswordRequestFound = false + + if (failure is Failure.RegistrationFlowError) { + // We only support LoginFlowTypes.PASSWORD + // Check if we can provide the user password + failure.registrationFlowResponse.flows?.forEach { interactiveAuthenticationFlow -> + isPasswordRequestFound = isPasswordRequestFound || interactiveAuthenticationFlow.stages?.any { it == LoginFlowTypes.PASSWORD } == true + } + + if (isPasswordRequestFound) { + maybeShowDeleteDeviceWithPasswordDialog(deviceId, failure.registrationFlowResponse.session) + } + + } + + if (!isPasswordRequestFound) { + // LoginFlowTypes.PASSWORD not supported, and this is the only one RiotX supports so far... + onCommonDone(failure.localizedMessage) + } } }) } /** - * Display a delete confirmation dialog to remove a device.

- * The user is invited to enter his password to confirm the deletion. - * - * @param aDeviceInfoToDelete device info + * Show a dialog to ask for user password, or use a previously entered password. */ - private fun displayDeviceDeletionDialog(aDeviceInfoToDelete: DeviceInfo) { - if (aDeviceInfoToDelete.deviceId != null) { - if (!TextUtils.isEmpty(mAccountPassword)) { - deleteDevice(aDeviceInfoToDelete.deviceId!!) - } else { - activity?.let { - val inflater = it.layoutInflater - val layout = inflater.inflate(R.layout.dialog_device_delete, null) - val passwordEditText = layout.findViewById(R.id.delete_password) - - AlertDialog.Builder(it) - .setIcon(android.R.drawable.ic_dialog_alert) - .setTitle(R.string.devices_delete_dialog_title) - .setView(layout) - .setPositiveButton(R.string.devices_delete_submit_button_label, DialogInterface.OnClickListener { _, _ -> - if (TextUtils.isEmpty(passwordEditText.toString())) { - it.toast(R.string.error_empty_field_your_password) - return@OnClickListener - } - mAccountPassword = passwordEditText.text.toString() - deleteDevice(aDeviceInfoToDelete.deviceId!!) - }) - .setNegativeButton(R.string.cancel) { _, _ -> - hideLoadingView() - } - .setOnKeyListener(DialogInterface.OnKeyListener { dialog, keyCode, event -> - if (event.action == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { - dialog.cancel() - hideLoadingView() - return@OnKeyListener true - } - false - }) - .show() - } - } + private fun maybeShowDeleteDeviceWithPasswordDialog(deviceId: String, authSession: String?) { + if (!TextUtils.isEmpty(mAccountPassword)) { + deleteDeviceWithPassword(deviceId, authSession, mAccountPassword) } else { - Timber.e("## displayDeviceDeletionDialog(): sanity check failure") + activity?.let { + val inflater = it.layoutInflater + val layout = inflater.inflate(R.layout.dialog_device_delete, null) + val passwordEditText = layout.findViewById(R.id.delete_password) + + AlertDialog.Builder(it) + .setIcon(android.R.drawable.ic_dialog_alert) + .setTitle(R.string.devices_delete_dialog_title) + .setView(layout) + .setPositiveButton(R.string.devices_delete_submit_button_label, DialogInterface.OnClickListener { _, _ -> + if (TextUtils.isEmpty(passwordEditText.toString())) { + it.toast(R.string.error_empty_field_your_password) + return@OnClickListener + } + mAccountPassword = passwordEditText.text.toString() + deleteDeviceWithPassword(deviceId, authSession, mAccountPassword) + }) + .setNegativeButton(R.string.cancel) { _, _ -> + hideLoadingView() + } + .setOnKeyListener(DialogInterface.OnKeyListener { dialog, keyCode, event -> + if (event.action == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { + dialog.cancel() + hideLoadingView() + return@OnKeyListener true + } + false + }) + .show() + } } } + private fun deleteDeviceWithPassword(deviceId: String, authSession: String?, accountPassword: String) { + mSession.deleteDeviceWithUserPassword(deviceId, authSession, accountPassword, object : MatrixCallback { + override fun onSuccess(data: Unit) { + hideLoadingView() + // force settings update + refreshDevicesList() + } + + override fun onFailure(failure: Throwable) { + // Password is maybe not good + onCommonDone(failure.localizedMessage) + mAccountPassword = "" + } + }) + } + /** * Manage the e2e keys export. */ From 8c8a4dcbd1c059a085312f7a36dfcc436aa0fac7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 17 Jun 2019 18:13:34 +0200 Subject: [PATCH 11/77] Fix margin issue when second text is not displayed --- .../main/res/layout/fragment_home_detail.xml | 2 +- .../res/layout/view_keys_backup_banner.xml | 22 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/vector/src/main/res/layout/fragment_home_detail.xml b/vector/src/main/res/layout/fragment_home_detail.xml index 1030d13f..4729b15b 100644 --- a/vector/src/main/res/layout/fragment_home_detail.xml +++ b/vector/src/main/res/layout/fragment_home_detail.xml @@ -49,9 +49,9 @@ style="@style/Widget.AppCompat.ProgressBar.Horizontal" android:layout_width="0dp" android:layout_height="wrap_content" + android:background="?riotx_header_panel_background" android:indeterminate="true" android:visibility="gone" - android:background="?riotx_header_panel_background" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/groupToolbar" diff --git a/vector/src/main/res/layout/view_keys_backup_banner.xml b/vector/src/main/res/layout/view_keys_backup_banner.xml index 3f829c58..d0738262 100644 --- a/vector/src/main/res/layout/view_keys_backup_banner.xml +++ b/vector/src/main/res/layout/view_keys_backup_banner.xml @@ -20,21 +20,27 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + app:layout_constraintTop_toBottomOf="@+id/view_keys_backup_banner_space1" /> + + Date: Thu, 13 Jun 2019 19:08:51 +0200 Subject: [PATCH 12/77] Crypto: export room keys --- .../im/vector/matrix/android/api/util/Try.kt | 30 -------- .../android/internal/crypto/CryptoManager.kt | 55 +++++++------ .../internal/crypto/DeviceListManager.kt | 2 +- .../matrix/android/internal/extensions/Try.kt | 33 ++++++++ .../core/dialogs/ExportKeysDialog.kt | 32 ++++---- .../features/crypto/keys/KeysExporter.kt | 77 +++++++++++++++++++ .../setup/KeysBackupSetupActivity.kt | 60 +++++++-------- .../VectorSettingsPreferencesFragment.kt | 48 +++++------- .../res/layout/dialog_export_e2e_keys.xml | 53 +++++++++---- 9 files changed, 240 insertions(+), 150 deletions(-) delete mode 100644 matrix-sdk-android/src/main/java/im/vector/matrix/android/api/util/Try.kt create mode 100644 matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/extensions/Try.kt create mode 100644 vector/src/main/java/im/vector/riotredesign/features/crypto/keys/KeysExporter.kt diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/util/Try.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/util/Try.kt deleted file mode 100644 index 365d5472..00000000 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/util/Try.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * - * * 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.matrix.android.api.util - -import arrow.core.* - -inline fun TryOf.onError(f: (Throwable) -> Unit): Try = fix() - .fold( - { - f(it) - Failure(it) - }, - { Success(it) } - ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt index 5e422571..6c46a5b9 100755 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt @@ -64,6 +64,7 @@ import im.vector.matrix.android.internal.crypto.verification.DefaultSasVerificat import im.vector.matrix.android.internal.database.model.EventEntity import im.vector.matrix.android.internal.database.query.where import im.vector.matrix.android.internal.di.MoshiProvider +import im.vector.matrix.android.internal.extensions.foldToCallback import im.vector.matrix.android.internal.session.cache.ClearCacheTask import im.vector.matrix.android.internal.session.room.membership.LoadRoomMembersTask import im.vector.matrix.android.internal.session.room.membership.RoomMembers @@ -560,10 +561,10 @@ internal class CryptoManager( } else { val algorithm = getEncryptionAlgorithm(roomId) val reason = String.format(MXCryptoError.UNABLE_TO_ENCRYPT_REASON, - algorithm ?: MXCryptoError.NO_MORE_ALGORITHM_REASON) + algorithm ?: MXCryptoError.NO_MORE_ALGORITHM_REASON) Timber.e("## encryptEventContent() : $reason") callback.onFailure(Failure.CryptoError(MXCryptoError(MXCryptoError.UNABLE_TO_ENCRYPT_ERROR_CODE, - MXCryptoError.UNABLE_TO_ENCRYPT, reason))) + MXCryptoError.UNABLE_TO_ENCRYPT, reason))) } } } @@ -700,7 +701,7 @@ internal class CryptoManager( monarchy.doWithRealm { realm -> // Check whether the event content must be encrypted for the invited members. val encryptForInvitedMembers = isEncryptionEnabledForInvitedUser() - && shouldEncryptForInvitedMembers(roomId) + && shouldEncryptForInvitedMembers(roomId) userIds = if (encryptForInvitedMembers) { RoomMembers(realm, roomId).getActiveRoomMemberIds() @@ -787,35 +788,32 @@ internal class CryptoManager( * @param anIterationCount the encryption iteration count (0 means no encryption) * @param callback the exported keys */ - fun exportRoomKeys(password: String, anIterationCount: Int, callback: MatrixCallback) { - val iterationCount = Math.max(0, anIterationCount) + private fun exportRoomKeys(password: String, anIterationCount: Int, callback: MatrixCallback) { + GlobalScope.launch(coroutineDispatchers.main) { + withContext(coroutineDispatchers.crypto) { + Try { + val iterationCount = Math.max(0, anIterationCount) - val exportedSessions = ArrayList() + val exportedSessions = ArrayList() - val inboundGroupSessions = cryptoStore.getInboundGroupSessions() + val inboundGroupSessions = cryptoStore.getInboundGroupSessions() - for (session in inboundGroupSessions) { - val megolmSessionData = session.exportKeys() + for (session in inboundGroupSessions) { + val megolmSessionData = session.exportKeys() - if (null != megolmSessionData) { - exportedSessions.add(megolmSessionData) - } + if (null != megolmSessionData) { + exportedSessions.add(megolmSessionData) + } + } + + val adapter = MoshiProvider.providesMoshi() + .adapter(List::class.java) + + MXMegolmExportEncryption + .encryptMegolmKeyFile(adapter.toJson(exportedSessions), password, iterationCount) + } + }.foldToCallback(callback) } - - val encryptedRoomKeys: ByteArray - - try { - val adapter = MoshiProvider.providesMoshi() - .adapter(List::class.java) - - encryptedRoomKeys = MXMegolmExportEncryption - .encryptMegolmKeyFile(adapter.toJson(exportedSessions), password, iterationCount) - } catch (e: Exception) { - callback.onFailure(e) - return - } - - callback.onSuccess(encryptedRoomKeys) } /** @@ -830,6 +828,7 @@ internal class CryptoManager( password: String, progressListener: ProgressListener?, callback: MatrixCallback) { + // TODO Use coroutines Timber.v("## importRoomKeys starts") val t0 = System.currentTimeMillis() @@ -898,7 +897,7 @@ internal class CryptoManager( // trigger an an unknown devices exception callback.onFailure( Failure.CryptoError(MXCryptoError(MXCryptoError.UNKNOWN_DEVICES_CODE, - MXCryptoError.UNABLE_TO_ENCRYPT, MXCryptoError.UNKNOWN_DEVICES_REASON, unknownDevices))) + MXCryptoError.UNABLE_TO_ENCRYPT, MXCryptoError.UNKNOWN_DEVICES_REASON, unknownDevices))) } } ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt index 2217a796..ffda9507 100755 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt @@ -21,7 +21,7 @@ import android.text.TextUtils import arrow.core.Try import im.vector.matrix.android.api.MatrixPatterns import im.vector.matrix.android.api.auth.data.Credentials -import im.vector.matrix.android.api.util.onError +import im.vector.matrix.android.internal.extensions.onError import im.vector.matrix.android.internal.crypto.model.MXDeviceInfo import im.vector.matrix.android.internal.crypto.model.MXUsersDevicesMap import im.vector.matrix.android.internal.crypto.store.IMXCryptoStore diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/extensions/Try.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/extensions/Try.kt new file mode 100644 index 00000000..18ab0e47 --- /dev/null +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/extensions/Try.kt @@ -0,0 +1,33 @@ +/* + * 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.matrix.android.internal.extensions + +import arrow.core.* +import im.vector.matrix.android.api.MatrixCallback + +inline fun TryOf.onError(f: (Throwable) -> Unit): Try = fix() + .fold( + { + f(it) + Failure(it) + }, + { Success(it) } + ) + +fun Try.foldToCallback(callback: MatrixCallback): Unit = fold( + { callback.onFailure(it) }, + { callback.onSuccess(it) }) diff --git a/vector/src/main/java/im/vector/riotredesign/core/dialogs/ExportKeysDialog.kt b/vector/src/main/java/im/vector/riotredesign/core/dialogs/ExportKeysDialog.kt index 90c12de4..22ec2f90 100644 --- a/vector/src/main/java/im/vector/riotredesign/core/dialogs/ExportKeysDialog.kt +++ b/vector/src/main/java/im/vector/riotredesign/core/dialogs/ExportKeysDialog.kt @@ -19,34 +19,30 @@ package im.vector.riotredesign.core.dialogs import android.app.Activity import android.text.Editable import android.text.TextUtils -import android.text.TextWatcher import android.widget.Button +import android.widget.ImageView import androidx.appcompat.app.AlertDialog import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout import im.vector.riotredesign.R +import im.vector.riotredesign.core.extensions.showPassword +import im.vector.riotredesign.core.platform.SimpleTextWatcher class ExportKeysDialog { + var passwordVisible = false + fun show(activity: Activity, exportKeyDialogListener: ExportKeyDialogListener) { val dialogLayout = activity.layoutInflater.inflate(R.layout.dialog_export_e2e_keys, null) val builder = AlertDialog.Builder(activity) .setTitle(R.string.encryption_export_room_keys) .setView(dialogLayout) - val passPhrase1EditText = dialogLayout.findViewById(R.id.dialog_e2e_keys_passphrase_edit_text) - val passPhrase2EditText = dialogLayout.findViewById(R.id.dialog_e2e_keys_confirm_passphrase_edit_text) - val passPhrase2Til = dialogLayout.findViewById(R.id.dialog_e2e_keys_confirm_passphrase_til) - val exportButton = dialogLayout.findViewById