mirror of
https://github.com/vector-im/element-android.git
synced 2024-11-16 02:05:06 +08:00
Widgets: clean again after Benoit's review
This commit is contained in:
parent
53592ac404
commit
0507fa5b0e
@ -24,6 +24,13 @@ data class MatrixConfiguration(
|
||||
val cryptoConfig: MXCryptoConfig = MXCryptoConfig(),
|
||||
val integrationUIUrl: String = "https://scalar.vector.im/",
|
||||
val integrationRestUrl: String = "https://scalar.vector.im/api",
|
||||
val integrationWidgetUrls: List<String> = listOf(
|
||||
"https://scalar.vector.im/_matrix/integrations/v1",
|
||||
"https://scalar.vector.im/api",
|
||||
"https://scalar-staging.vector.im/_matrix/integrations/v1",
|
||||
"https://scalar-staging.vector.im/api",
|
||||
"https://scalar-staging.riot.im/scalar/api"
|
||||
),
|
||||
/**
|
||||
* Optional proxy to connect to the matrix servers
|
||||
* You can create one using for instance Proxy(proxyType, InetSocketAddress(hostname, port)
|
||||
|
@ -20,6 +20,7 @@ import android.net.Uri
|
||||
import com.squareup.moshi.JsonClass
|
||||
import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig.Builder
|
||||
import im.vector.matrix.android.internal.network.ssl.Fingerprint
|
||||
import im.vector.matrix.android.internal.util.ensureTrailingSlash
|
||||
import okhttp3.CipherSuite
|
||||
import okhttp3.TlsVersion
|
||||
|
||||
@ -71,15 +72,11 @@ data class HomeServerConnectionConfig(
|
||||
throw RuntimeException("Invalid home server URI: " + hsUri)
|
||||
}
|
||||
// ensure trailing /
|
||||
homeServerUri = if (!hsUri.toString().endsWith("/")) {
|
||||
try {
|
||||
val url = hsUri.toString()
|
||||
Uri.parse("$url/")
|
||||
} catch (e: Exception) {
|
||||
throw RuntimeException("Invalid home server URI: $hsUri")
|
||||
}
|
||||
} else {
|
||||
hsUri
|
||||
val hsString = hsUri.toString().ensureTrailingSlash()
|
||||
homeServerUri = try {
|
||||
Uri.parse(hsString)
|
||||
} catch (e: Exception) {
|
||||
throw RuntimeException("Invalid home server URI: $hsUri")
|
||||
}
|
||||
return this
|
||||
}
|
||||
@ -97,15 +94,11 @@ data class HomeServerConnectionConfig(
|
||||
throw RuntimeException("Invalid identity server URI: $identityServerUri")
|
||||
}
|
||||
// ensure trailing /
|
||||
if (!identityServerUri.toString().endsWith("/")) {
|
||||
try {
|
||||
val url = identityServerUri.toString()
|
||||
this.identityServerUri = Uri.parse("$url/")
|
||||
} catch (e: Exception) {
|
||||
throw RuntimeException("Invalid identity server URI: $identityServerUri")
|
||||
}
|
||||
} else {
|
||||
this.identityServerUri = identityServerUri
|
||||
val isString = identityServerUri.toString().ensureTrailingSlash()
|
||||
this.identityServerUri = try {
|
||||
Uri.parse(isString)
|
||||
} catch (e: Exception) {
|
||||
throw RuntimeException("Invalid identity server URI: $identityServerUri")
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ package im.vector.matrix.android.internal.network
|
||||
|
||||
import com.squareup.moshi.Moshi
|
||||
import dagger.Lazy
|
||||
import im.vector.matrix.android.internal.util.ensureTrailingSlash
|
||||
import okhttp3.Call
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
@ -28,14 +29,8 @@ import javax.inject.Inject
|
||||
class RetrofitFactory @Inject constructor(private val moshi: Moshi) {
|
||||
|
||||
fun create(okHttpClient: Lazy<OkHttpClient>, baseUrl: String): Retrofit {
|
||||
// ensure trailing /
|
||||
val safeBaseUrl = if (!baseUrl.endsWith("/")) {
|
||||
"$baseUrl/"
|
||||
} else {
|
||||
baseUrl
|
||||
}
|
||||
return Retrofit.Builder()
|
||||
.baseUrl(safeBaseUrl)
|
||||
.baseUrl(baseUrl.ensureTrailingSlash())
|
||||
.callFactory(object : Call.Factory {
|
||||
override fun newCall(request: Request): Call {
|
||||
return okHttpClient.get().newCall(request)
|
||||
|
@ -19,16 +19,16 @@ package im.vector.matrix.android.internal.session.content
|
||||
import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
|
||||
import im.vector.matrix.android.api.session.content.ContentUrlResolver
|
||||
import im.vector.matrix.android.internal.network.NetworkConstants
|
||||
import im.vector.matrix.android.internal.util.ensureTrailingSlash
|
||||
import javax.inject.Inject
|
||||
|
||||
private const val MATRIX_CONTENT_URI_SCHEME = "mxc://"
|
||||
|
||||
internal class DefaultContentUrlResolver @Inject constructor(homeServerConnectionConfig: HomeServerConnectionConfig) : ContentUrlResolver {
|
||||
|
||||
private val baseUrl = homeServerConnectionConfig.homeServerUri.toString()
|
||||
private val sep = if (baseUrl.endsWith("/")) "" else "/"
|
||||
private val baseUrl = homeServerConnectionConfig.homeServerUri.toString().ensureTrailingSlash()
|
||||
|
||||
override val uploadUrl = baseUrl + sep + NetworkConstants.URI_API_MEDIA_PREFIX_PATH_R0 + "upload"
|
||||
override val uploadUrl = baseUrl + NetworkConstants.URI_API_MEDIA_PREFIX_PATH_R0 + "upload"
|
||||
|
||||
override fun resolveFullSize(contentUrl: String?): String? {
|
||||
return contentUrl
|
||||
@ -66,7 +66,7 @@ internal class DefaultContentUrlResolver @Inject constructor(homeServerConnectio
|
||||
serverAndMediaId = serverAndMediaId.substring(0, fragmentOffset)
|
||||
}
|
||||
|
||||
return baseUrl + sep + prefix + serverAndMediaId + params + fragment
|
||||
return baseUrl + prefix + serverAndMediaId + params + fragment
|
||||
}
|
||||
|
||||
private fun String.isValidMatrixContentUrl(): Boolean {
|
||||
|
@ -36,6 +36,7 @@ import im.vector.matrix.android.internal.session.user.accountdata.UpdateUserAcco
|
||||
import im.vector.matrix.android.internal.task.TaskExecutor
|
||||
import im.vector.matrix.android.internal.task.launchToCallback
|
||||
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
||||
import im.vector.matrix.android.internal.util.ensureTrailingSlash
|
||||
import okhttp3.OkHttpClient
|
||||
import javax.inject.Inject
|
||||
|
||||
@ -55,17 +56,10 @@ internal class DefaultTermsService @Inject constructor(
|
||||
baseUrl: String,
|
||||
callback: MatrixCallback<GetTermsResponse>): Cancelable {
|
||||
return taskExecutor.executorScope.launchToCallback(coroutineDispatchers.main, callback) {
|
||||
val sep = if (baseUrl.endsWith("/")) "" else "/"
|
||||
|
||||
val url = when (serviceType) {
|
||||
TermsService.ServiceType.IntegrationManager -> "$baseUrl$sep${NetworkConstants.URI_INTEGRATION_MANAGER_PATH}"
|
||||
TermsService.ServiceType.IdentityService -> "$baseUrl$sep${NetworkConstants.URI_IDENTITY_PATH_V2}"
|
||||
}
|
||||
|
||||
val url = buildUrl(baseUrl, serviceType)
|
||||
val termsResponse = executeRequest<TermsResponse>(null) {
|
||||
apiCall = termsAPI.getTerms("${url}terms")
|
||||
}
|
||||
|
||||
GetTermsResponse(termsResponse, getAlreadyAcceptedTermUrlsFromAccountData())
|
||||
}
|
||||
}
|
||||
@ -76,13 +70,7 @@ internal class DefaultTermsService @Inject constructor(
|
||||
token: String?,
|
||||
callback: MatrixCallback<Unit>): Cancelable {
|
||||
return taskExecutor.executorScope.launchToCallback(coroutineDispatchers.main, callback) {
|
||||
val sep = if (baseUrl.endsWith("/")) "" else "/"
|
||||
|
||||
val url = when (serviceType) {
|
||||
TermsService.ServiceType.IntegrationManager -> "$baseUrl$sep${NetworkConstants.URI_INTEGRATION_MANAGER_PATH}"
|
||||
TermsService.ServiceType.IdentityService -> "$baseUrl$sep${NetworkConstants.URI_IDENTITY_PATH_V2}"
|
||||
}
|
||||
|
||||
val url = buildUrl(baseUrl, serviceType)
|
||||
val tokenToUse = token?.takeIf { it.isNotEmpty() } ?: getToken(baseUrl)
|
||||
|
||||
executeRequest<Unit>(null) {
|
||||
@ -112,6 +100,14 @@ internal class DefaultTermsService @Inject constructor(
|
||||
return token.token
|
||||
}
|
||||
|
||||
private fun buildUrl(baseUrl: String, serviceType: TermsService.ServiceType): String {
|
||||
val servicePath = when (serviceType) {
|
||||
TermsService.ServiceType.IntegrationManager -> NetworkConstants.URI_INTEGRATION_MANAGER_PATH
|
||||
TermsService.ServiceType.IdentityService -> NetworkConstants.URI_IDENTITY_PATH_V2
|
||||
}
|
||||
return "${baseUrl.ensureTrailingSlash()}$servicePath"
|
||||
}
|
||||
|
||||
private fun getAlreadyAcceptedTermUrlsFromAccountData(): Set<String> {
|
||||
return accountDataDataSource.getAccountDataEvent(UserAccountData.TYPE_ACCEPTED_TERMS)
|
||||
?.content
|
||||
|
@ -16,21 +16,20 @@
|
||||
|
||||
package im.vector.matrix.android.internal.session.widgets
|
||||
|
||||
import im.vector.matrix.android.R
|
||||
import im.vector.matrix.android.api.MatrixConfiguration
|
||||
import im.vector.matrix.android.api.session.integrationmanager.IntegrationManagerConfig
|
||||
import im.vector.matrix.android.api.session.integrationmanager.IntegrationManagerService
|
||||
import im.vector.matrix.android.api.session.widgets.WidgetURLFormatter
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
import im.vector.matrix.android.internal.session.integrationmanager.IntegrationManager
|
||||
import im.vector.matrix.android.internal.session.widgets.token.GetScalarTokenTask
|
||||
import im.vector.matrix.android.internal.util.StringProvider
|
||||
import java.net.URLEncoder
|
||||
import javax.inject.Inject
|
||||
|
||||
@SessionScope
|
||||
internal class DefaultWidgetURLFormatter @Inject constructor(private val integrationManager: IntegrationManager,
|
||||
private val getScalarTokenTask: GetScalarTokenTask,
|
||||
private val stringProvider: StringProvider
|
||||
private val matrixConfiguration: MatrixConfiguration
|
||||
) : IntegrationManagerService.Listener, WidgetURLFormatter {
|
||||
|
||||
private lateinit var currentConfig: IntegrationManagerConfig
|
||||
@ -53,11 +52,10 @@ internal class DefaultWidgetURLFormatter @Inject constructor(private val integra
|
||||
val preferredConfig = integrationManager.getPreferredConfig()
|
||||
if (!this::currentConfig.isInitialized || preferredConfig != currentConfig) {
|
||||
currentConfig = preferredConfig
|
||||
val defaultWhiteList = stringProvider.getStringArray(R.array.integrations_widgets_urls).asList()
|
||||
whiteListedUrls = when (preferredConfig.kind) {
|
||||
IntegrationManagerConfig.Kind.DEFAULT -> defaultWhiteList
|
||||
IntegrationManagerConfig.Kind.ACCOUNT -> defaultWhiteList + preferredConfig.restUrl
|
||||
IntegrationManagerConfig.Kind.HOMESERVER -> listOf(preferredConfig.restUrl)
|
||||
whiteListedUrls = if (matrixConfiguration.integrationWidgetUrls.isEmpty()) {
|
||||
listOf(preferredConfig.restUrl)
|
||||
} else {
|
||||
matrixConfiguration.integrationWidgetUrls
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -37,3 +37,14 @@ internal fun String.ensureProtocol(): String {
|
||||
else -> this
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure string has trailing /
|
||||
*/
|
||||
internal fun String.ensureTrailingSlash(): String {
|
||||
return when {
|
||||
isEmpty() -> this
|
||||
!endsWith("/") -> "$this/"
|
||||
else -> this
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string-array name="integrations_widgets_urls" translatable="false">
|
||||
<item>https://scalar.vector.im/_matrix/integrations/v1</item>
|
||||
<item>https://scalar.vector.im/api</item>
|
||||
<item>https://scalar-staging.vector.im/_matrix/integrations/v1</item>
|
||||
<item>https://scalar-staging.vector.im/api</item>
|
||||
<item>https://scalar-staging.riot.im/scalar/api</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
@ -82,12 +82,12 @@
|
||||
<string name="notice_room_third_party_registered_invite">%1$s accepted the invitation for %2$s</string>
|
||||
<string name="notice_room_third_party_registered_invite_by_you">You accepted the invitation for %1$s</string>
|
||||
|
||||
<string name="notice_widget_added">%1$s widget added by %2$s</string>
|
||||
<string name="notice_widget_added_by_you">%1$s widget added by you</string>
|
||||
<string name="notice_widget_removed">%1$s widget removed by %2$s</string>
|
||||
<string name="notice_widget_removed_by_you">%1$s widget removed by you</string>
|
||||
<string name="notice_widget_modified">%1$s widget modified by %2$s</string>
|
||||
<string name="notice_widget_modified_by_you">%1$s widget modified by you</string>
|
||||
<string name="notice_widget_added">%1$s added %2$s widget</string>
|
||||
<string name="notice_widget_added_by_you">you added %1$s widget</string>
|
||||
<string name="notice_widget_removed">%1$s removed %2$s widget</string>
|
||||
<string name="notice_widget_removed_by_you">you removed %1$s widget</string>
|
||||
<string name="notice_widget_modified">%1$s modified %2$s widget</string>
|
||||
<string name="notice_widget_modified_by_you">you modified %1$s widget</string>
|
||||
|
||||
<string name="notice_crypto_unable_to_decrypt">** Unable to decrypt: %s **</string>
|
||||
<string name="notice_crypto_error_unkwown_inbound_session_id">The sender\'s device has not sent us the keys for this message.</string>
|
||||
|
@ -88,26 +88,26 @@ class NoticeEventFormatter @Inject constructor(private val sessionHolder: Active
|
||||
val widgetContent: WidgetContent = event.getClearContent().toModel() ?: return null
|
||||
val previousWidgetContent: WidgetContent? = event.prevContent.toModel()
|
||||
return if (widgetContent.isActive()) {
|
||||
val name = widgetContent.getHumanName()
|
||||
val widgetName = widgetContent.getHumanName()
|
||||
if (previousWidgetContent?.isActive().orFalse()) {
|
||||
if (event.isSentByCurrentUser()) {
|
||||
sp.getString(R.string.notice_widget_modified_by_you, name, disambiguatedDisplayName)
|
||||
sp.getString(R.string.notice_widget_modified_by_you, widgetName)
|
||||
} else {
|
||||
sp.getString(R.string.notice_widget_modified, name, disambiguatedDisplayName)
|
||||
sp.getString(R.string.notice_widget_modified, disambiguatedDisplayName, widgetName)
|
||||
}
|
||||
} else {
|
||||
if (event.isSentByCurrentUser()) {
|
||||
sp.getString(R.string.notice_widget_added_by_you, name, disambiguatedDisplayName)
|
||||
sp.getString(R.string.notice_widget_added_by_you, widgetName)
|
||||
} else {
|
||||
sp.getString(R.string.notice_widget_added, name, disambiguatedDisplayName)
|
||||
sp.getString(R.string.notice_widget_added, disambiguatedDisplayName, widgetName)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
val name = previousWidgetContent?.getHumanName()
|
||||
val widgetName = previousWidgetContent?.getHumanName()
|
||||
if (event.isSentByCurrentUser()) {
|
||||
sp.getString(R.string.notice_widget_removed_by_you, name, disambiguatedDisplayName)
|
||||
sp.getString(R.string.notice_widget_removed_by_you, widgetName)
|
||||
} else {
|
||||
sp.getString(R.string.notice_widget_removed, name, disambiguatedDisplayName)
|
||||
sp.getString(R.string.notice_widget_removed, disambiguatedDisplayName, widgetName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -990,8 +990,6 @@
|
||||
<item quantity="many">%d رسالة إخطار غير مقروءة</item>
|
||||
<item quantity="other">%d رسالة إخطار غير مقروءة</item>
|
||||
</plurals>
|
||||
<string name="event_formatter_widget_added">أضاف %2$s المستخدم %1$s</string>
|
||||
<string name="event_formatter_widget_removed">أزال %2$s المستخدم %1$s</string>
|
||||
<string name="settings_labs_keyboard_options_to_send_message">استخدم مفتاح الإدخال في لوحة المفاتيح لإرسال الرسالة</string>
|
||||
<string name="command_description_ban_user">يمنع المستخدم حسب المعرّف المعطى</string>
|
||||
<string name="command_description_unban_user">يُلغي المنع عن المستخدم حسب المعرّف المعطى</string>
|
||||
|
@ -648,8 +648,6 @@
|
||||
|
||||
<string name="widget_no_power_to_manage">Трябва Ви разрешение, за да управлявате приспособленията в тази стая</string>
|
||||
<string name="widget_creation_failure">Създаване на приспособлението беше неуспешно</string>
|
||||
<string name="event_formatter_widget_added">%1$s добавено от %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s премахнато от %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Създаване на групови разговори с jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Сигурни ли сте, че искате да изтриете приспособлението от тази стая?</string>
|
||||
<plurals name="active_widgets">
|
||||
|
@ -1042,8 +1042,6 @@
|
||||
|
||||
<string name="widget_no_power_to_manage">আপনি এই রুমে উইজেট পরিচালনা করার অনুমতি প্রয়োজন</string>
|
||||
<string name="widget_creation_failure">উইজেট এর নির্মাণ ব্যর্থ হয়েছে</string>
|
||||
<string name="event_formatter_widget_added">%1$s %2$s দ্বারা যোগ করা হয়েছে</string>
|
||||
<string name="event_formatter_widget_removed">%1$s %2$s দ্বারা সরানো হয়েছে</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Jitsi সঙ্গে কনফারেন্স কল তৈরি করুন</string>
|
||||
<string name="widget_delete_message_confirmation">আপনি কি এই রুমে উইজেট মুছে ফেলতে চান\?</string>
|
||||
<plurals name="active_widgets">
|
||||
|
@ -738,8 +738,6 @@ Atenció: es podria eliminar aquest fitxer si es desinstal·la l\'aplicació.</s
|
||||
<!-- Widget-->
|
||||
<string name="widget_no_power_to_manage">No teniu permisos per a gestionar ginys en aquesta sala</string>
|
||||
<string name="widget_creation_failure">Ha fallat la creació del giny</string>
|
||||
<string name="event_formatter_widget_added">%1$s afegit per %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s retirat per %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Fes conferències amb jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Confirmeu que voleu esborrar el giny d\'aquesta sala?</string>
|
||||
|
||||
|
@ -1145,8 +1145,6 @@ Vaši e-mailovou adresu můžete přidat k profilu v nastavení.</string>
|
||||
|
||||
<string name="widget_no_power_to_manage">Pro správu widgetů v této místnosti potřebujete oprávnění</string>
|
||||
<string name="widget_creation_failure">Založení widgetu se nezdařilo</string>
|
||||
<string name="event_formatter_widget_added">%2$s přidal %1$s</string>
|
||||
<string name="event_formatter_widget_removed">%2$s odstranil(a) %1$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Založit konferenční hovor s jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Jste si jisti, že chcete smazat widget z této místnosti\?</string>
|
||||
<plurals name="active_widgets">
|
||||
|
@ -704,8 +704,6 @@ Du kannst sie jetzt aktivieren oder später über das Einstellungsmenü.</string
|
||||
|
||||
<string name="widget_no_power_to_manage">Um Widgets in diesem Raum zu verwalten, ist eine Berechtigung erforderlich</string>
|
||||
<string name="widget_creation_failure">Widget konnte nicht erstellt werden</string>
|
||||
<string name="event_formatter_widget_added">%1$s hinzugefügt von %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s entfernt von %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Konferenzgespräche mit jitsi durchführen</string>
|
||||
<string name="widget_delete_message_confirmation">Soll das Widget wirklich aus diesem Raum gelöscht werden?</string>
|
||||
|
||||
|
@ -735,8 +735,6 @@ Puedes hacerlo ahora o más tarde desde los ajustes de la aplicación.</string>
|
||||
|
||||
<string name="widget_no_power_to_manage">Necesitas permiso para gestionar los componentes en esta sala</string>
|
||||
<string name="widget_creation_failure">La creación del componente falló</string>
|
||||
<string name="event_formatter_widget_added">%1$s añadido por %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s eliminado por %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Crear llamadas de conferencia con jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">¿Seguro que quieres eliminar el widget de esta sala\?</string>
|
||||
|
||||
|
@ -659,8 +659,6 @@ Orain egin dezakezu edo gero aplikazioaren ezarpenetatik.</string>
|
||||
|
||||
<string name="widget_no_power_to_manage">Baimena behar duzu gela honetako trepetak kudeatzeko</string>
|
||||
<string name="widget_creation_failure">Trepetaren sorrerak huts egin du</string>
|
||||
<string name="event_formatter_widget_added">%1$s gehitu du %2$s erabiltzaileak</string>
|
||||
<string name="event_formatter_widget_removed">%1$s kendu du %2$s erabiltzaileak</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Sortu konferentzia deiak Jitsi bidez</string>
|
||||
<string name="widget_delete_message_confirmation">Ziur trepeta ezabatu nahi duzula gela honetatik?</string>
|
||||
|
||||
|
@ -734,8 +734,6 @@
|
||||
|
||||
<string name="widget_no_power_to_manage">Tarvitse oikeudet pienoissovellusten hallintaan tässä huoneessa</string>
|
||||
<string name="widget_creation_failure">Pienoissovelluksen luonti epäonnistui</string>
|
||||
<string name="event_formatter_widget_added">%2$s lisäsi %1$s:n</string>
|
||||
<string name="event_formatter_widget_removed">%2$s poisti %1$s:n</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Luo konferenssipuheluita jitsin avulla</string>
|
||||
<string name="widget_delete_message_confirmation">Haluatko varmasti poistaa pienoissovelluksen tästä huoneesta\?</string>
|
||||
|
||||
|
@ -669,8 +669,6 @@ Vous pouvez le faire maintenant ou plus tard à partir des paramètres de l’ap
|
||||
|
||||
<string name="widget_no_power_to_manage">Vous avez besoin d’une permission pour gérer les widgets de ce salon</string>
|
||||
<string name="widget_creation_failure">La création du widget a échoué</string>
|
||||
<string name="event_formatter_widget_added">%1$s ajouté par %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s supprimé par %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Créer des appels en téléconférence avec jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Voulez-vous vraiment supprimer le widget de ce salon ?</string>
|
||||
|
||||
|
@ -456,8 +456,6 @@ Pode engadir a dirección de correo na sección de configuración de perfil.</st
|
||||
<string name="huge">Enorme</string>
|
||||
|
||||
<string name="widget_creation_failure">Fallou a creación do trebello</string>
|
||||
<string name="event_formatter_widget_added">%1$s engadido por %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s eliminado por %2$s</string>
|
||||
<plurals name="active_widgets">
|
||||
<item quantity="one">1 trebello activo</item>
|
||||
<item quantity="other">%d trebellos activos</item>
|
||||
|
@ -660,8 +660,6 @@ Ezt megteheted most vagy később az alkalmazás beállítások alatt.</string>
|
||||
|
||||
<string name="widget_no_power_to_manage">Engedélyre van szükséged a kisalkalmazások ebben a szobában való kezeléséhez</string>
|
||||
<string name="widget_creation_failure">Kisalkalmazás létrehozása sikertelen</string>
|
||||
<string name="event_formatter_widget_added">%1$s hozzá lett adva %2$s által</string>
|
||||
<string name="event_formatter_widget_removed">%1$s eltávolításra került %2$s által</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Hozz létre konferencia hívást a jitsi segítségével</string>
|
||||
<string name="widget_delete_message_confirmation">Biztos vagy benne hogy törölni akarod ezt a kisalkalmazást ebből a szobából?</string>
|
||||
|
||||
|
@ -578,8 +578,6 @@ Perhatikan bahwa tindakan ini akan memulai ulang aplikasi dan mungkin cukup mema
|
||||
|
||||
<string name="widget_no_power_to_manage">Anda butuh permisi untuk mengurus widget di ruang ini</string>
|
||||
<string name="widget_creation_failure">Pembuatan widget gagal</string>
|
||||
<string name="event_formatter_widget_added">%1$s ditambahkan oleh %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s disingkirkan oleh %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Buat panggilan konferensi dengan jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Apa Anda yakin ingin menghapus widget tersebut dari ruang ini?</string>
|
||||
<plurals name="active_widgets">
|
||||
|
@ -578,8 +578,6 @@ Perhatikan bahwa tindakan ini akan memulai ulang aplikasi dan mungkin cukup mema
|
||||
|
||||
<string name="widget_no_power_to_manage">Anda butuh permisi untuk mengurus widget di ruang ini</string>
|
||||
<string name="widget_creation_failure">Pembuatan widget gagal</string>
|
||||
<string name="event_formatter_widget_added">%1$s ditambahkan oleh %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s disingkirkan oleh %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Buat panggilan konferensi dengan jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Apa Anda yakin ingin menghapus widget tersebut dari ruang ini?</string>
|
||||
<plurals name="active_widgets">
|
||||
|
@ -654,8 +654,6 @@ Til að halda áfram skaltu setja inn lykilorðið þitt.</string>
|
||||
</plurals>
|
||||
<string name="widget_no_power_to_manage">Þú þarft aðgangsheimildir til að sýsla með viðmótshluta á þessari spjallrás</string>
|
||||
<string name="widget_creation_failure">Gerð viðmótshluta mistókst</string>
|
||||
<string name="event_formatter_widget_added">%1$s bætt við af %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s fjarlægt af %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Búa til símafundi með Jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Ertu viss um að þú viljir eyða viðmótshlutanum?</string>
|
||||
<string name="widget_integration_unable_to_create">Gat ekki búið til viðmótshluta.</string>
|
||||
|
@ -712,8 +712,6 @@
|
||||
<string name="settings_notification_ringtone">Suono delle notifiche</string>
|
||||
<string name="settings_12_24_timestamps">Mostra gli orari in formato 12 ore</string>
|
||||
<string name="widget_no_power_to_manage">Devi avere il permesso per poter gestire i widget in questa stanza</string>
|
||||
<string name="event_formatter_widget_added">%1$s aggiunto da %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s rimosso da %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Avvia una conferenza usando Jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Vuoi davvero eliminare questo widget dalla stanza\?</string>
|
||||
|
||||
|
@ -543,10 +543,8 @@ Riotアプリがあなたの電話帳へアクセスすることを許可しま
|
||||
<string name="widget_integration_missing_room_id">リクエストに room_id がありません。</string>
|
||||
<string name="widget_integration_failed_to_send_request">リクエストの送信に失敗しました。</string>
|
||||
<string name="widget_integration_unable_to_create">ウィジェットを作成できません。</string>
|
||||
<string name="event_formatter_widget_removed">%1$s は %2$s によって削除されました</string>
|
||||
<string name="widget_no_power_to_manage">この部屋のウィジェットを管理する権限が必要です</string>
|
||||
<string name="widget_creation_failure">ウィジェットの作成に失敗しました</string>
|
||||
<string name="event_formatter_widget_added">%1$s は %2$s によって追加されました</string>
|
||||
<string name="widget_delete_message_confirmation">ウィジェットをこの部屋から削除してもよろしいですか?</string>
|
||||
<string name="directory_server_fail_to_retrieve_server">サーバーが利用できないか、オーバーロードしている可能性があります</string>
|
||||
<string name="unknown_devices_alert_message">この部屋は検証されていない不明なデバイスが含まれています。
|
||||
|
@ -1010,8 +1010,6 @@
|
||||
|
||||
<string name="widget_no_power_to_manage">이 방에서 위젯을 다루려면 권한이 있어야 합니다</string>
|
||||
<string name="widget_creation_failure">위젯 생성 실패</string>
|
||||
<string name="event_formatter_widget_added">%1$s을(를) %2$s님이 추가함</string>
|
||||
<string name="event_formatter_widget_removed">%1$s을(를) %2$s님이 삭제함</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Jitsi로 회의 전화 만들기</string>
|
||||
<string name="widget_delete_message_confirmation">이 방에서 위젯을 삭제하겠습니까\?</string>
|
||||
<plurals name="active_widgets">
|
||||
|
@ -763,8 +763,6 @@ Nepazīstamas ierīces:</string>
|
||||
|
||||
<string name="widget_no_power_to_manage">Tev nepietiek atļauju, lai rīkotos ar vidžetiem šajā istabā</string>
|
||||
<string name="widget_creation_failure">Vidžeta izveide neizdevās</string>
|
||||
<string name="event_formatter_widget_added">%1$s pievienoja %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s noņēma %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Konferences zvaniem izmantot Jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Vai tiešām vēlies dzēst vidžetu?</string>
|
||||
<plurals name="active_widgets">
|
||||
|
@ -725,8 +725,6 @@
|
||||
|
||||
<string name="widget_no_power_to_manage">U heeft toestemming nodig om widgets in dit gesprek te beheren</string>
|
||||
<string name="widget_creation_failure">Aanmaken van widget is mislukt</string>
|
||||
<string name="event_formatter_widget_added">%1$s is toegevoegd door %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s is verwijderd door %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Vergadergesprekken maken met jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Weet u zeker dat u deze widget uit dit gesprek wilt verwijderen\?</string>
|
||||
|
||||
|
@ -789,8 +789,6 @@ For å gå fram, ver venleg og skriv passordet ditt inn.</string>
|
||||
|
||||
<string name="widget_no_power_to_manage">Du trenger tillating til å handsama widgetar i dette rommet</string>
|
||||
<string name="widget_creation_failure">Widget-laging mislukkast</string>
|
||||
<string name="event_formatter_widget_added">%1$s lagt til av %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s fjerna av %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Lag konferansesamtalar med Jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Er du sikker på at du vil slette widgeten frå dette rommet\?</string>
|
||||
<plurals name="active_widgets">
|
||||
|
@ -844,8 +844,6 @@ Czy chcesz dodać teraz kilka?</string>
|
||||
|
||||
<string name="widget_no_power_to_manage">Potrzebujesz uprawnień do zarządzania widżetami w tym pokoju</string>
|
||||
<string name="widget_creation_failure">Utworzenie widżetu nie powiodło się</string>
|
||||
<string name="event_formatter_widget_added">%1$s został dodany przez %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s został usunięty przez %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Utwórz połączenia konferencyjne za pomocą jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Czy na pewno chcesz usunąć widżet z tego pokoju?</string>
|
||||
<string name="widget_integration_unable_to_create">Nie można utworzyć widżetu.</string>
|
||||
|
@ -760,8 +760,6 @@ Atenção: este arquivo poderá ser apagado se o aplicativo for desinstalado.</s
|
||||
|
||||
<string name="widget_no_power_to_manage">Você necessita ter permissões para poder gerenciar os widgets desta sala</string>
|
||||
<string name="widget_creation_failure">A criação do widget falhou</string>
|
||||
<string name="event_formatter_widget_added">%1$s adicionada/o por %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s removida/o por %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Criar chamadas de conferência com jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Você tem certeza que quer apagar este widget desta sala?</string>
|
||||
|
||||
|
@ -722,8 +722,6 @@ Dispositivos desconhecidos:</string>
|
||||
|
||||
<string name="widget_no_power_to_manage">Precisa de permissão para gerir os widgets nesta sala</string>
|
||||
<string name="widget_creation_failure">Criação de widget falhou</string>
|
||||
<string name="event_formatter_widget_added">%1$s adicionado por %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s removido por %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Criar chamadas de conferência com o jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Tem a certeza que quer remover o widget?</string>
|
||||
|
||||
|
@ -708,8 +708,6 @@
|
||||
|
||||
<string name="settings_notification_ringtone">Звук уведомлений</string>
|
||||
<string name="settings_12_24_timestamps">Показывать метки времени в 12-часовом формате</string>
|
||||
<string name="event_formatter_widget_added">%1$s добавлен %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s удален %2$s</string>
|
||||
|
||||
<string name="widget_no_power_to_manage">Вам нужно разрешение на управление виджетами в этой комнате</string>
|
||||
<string name="widget_creation_failure">Создание виджета не удалось</string>
|
||||
|
@ -667,8 +667,6 @@ Môžete to urobiť teraz, alebo to môžete urobiť neskôr v časti Nastavenia
|
||||
|
||||
<string name="widget_no_power_to_manage">Musíte mať povolenie meniť widgety v tejto miestnosti</string>
|
||||
<string name="widget_creation_failure">Nie je možné vytvoriť widget</string>
|
||||
<string name="event_formatter_widget_added">%2$s pridal widget %1$s</string>
|
||||
<string name="event_formatter_widget_removed">%2$s odstránil widget %1$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Konferenčné hovory uskutočňovať použitím jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Ste si istí, že chcete odstrániť widget z tejto miestnosti?</string>
|
||||
|
||||
|
@ -624,8 +624,6 @@
|
||||
<string name="huge">Të stërmëdha</string>
|
||||
|
||||
<string name="widget_creation_failure">Krijimi i widget-it dështoi</string>
|
||||
<string name="event_formatter_widget_added">%1$s u shtua nga %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s u hoq nga %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Krijoni thirrje konferencë me Jitsi-n</string>
|
||||
<string name="widget_delete_message_confirmation">Jeni i sigurt se doni të fshihet widget-i nga kjo dhomë?</string>
|
||||
<string name="widget_integration_unable_to_create">S’arrihet të krijohet widget-i.</string>
|
||||
|
@ -1017,8 +1017,6 @@ Eğer yeni kurtarma yöntemini siz ayarlamadıysanız, bir saldırgan hesabını
|
||||
|
||||
<string name="widget_no_power_to_manage">Bu odada widgetları yönetebilmek için izine ihtiyacın var</string>
|
||||
<string name="widget_creation_failure">Widget oluşturma başarısız</string>
|
||||
<string name="event_formatter_widget_added">%1$s %2$s tarafından eklendi</string>
|
||||
<string name="event_formatter_widget_removed">%1$s %2$s tarafından kaldırıldı</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Jitsi ile konferans çağrısı oluştur</string>
|
||||
<string name="widget_delete_message_confirmation">Bu widget\'ı odadan kaldırmak istediğine emin misin\?</string>
|
||||
<plurals name="active_widgets">
|
||||
|
@ -708,8 +708,6 @@
|
||||
<!-- Widget-->
|
||||
<string name="widget_no_power_to_manage">Для керування віджетами у цій кімнаті потрібен дозвіл</string>
|
||||
<string name="widget_creation_failure">Помилка створення віджету</string>
|
||||
<string name="event_formatter_widget_added">%1$s додано %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s видалено %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Здійснювати конференц дзвінки через Jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Справді бажаєте видалити віджет?</string>
|
||||
|
||||
|
@ -662,8 +662,6 @@
|
||||
|
||||
<string name="widget_no_power_to_manage">您需要权限来管理这个聊天室的小部件</string>
|
||||
<string name="widget_creation_failure">创建小部件失败</string>
|
||||
<string name="event_formatter_widget_added">%1$s 被 %2$s 添加</string>
|
||||
<string name="event_formatter_widget_removed">%1$s 被 %2$s 移除</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">用 jitsi 创建会议通话</string>
|
||||
<string name="widget_delete_message_confirmation">您确定要删除这个小部件吗?</string>
|
||||
|
||||
|
@ -784,8 +784,6 @@
|
||||
|
||||
<string name="widget_no_power_to_manage">您需要相關權限以管理此聊天室的小部件</string>
|
||||
<string name="widget_creation_failure">創建小部件失敗</string>
|
||||
<string name="event_formatter_widget_added">%1$s 已由 %2$s 新增</string>
|
||||
<string name="event_formatter_widget_removed">%1$s 被 %2$s 移除</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">使用 jitsi 建立會議通話</string>
|
||||
<string name="widget_delete_message_confirmation">您確定要從聊天室刪除小工具嗎?</string>
|
||||
<plurals name="active_widgets">
|
||||
|
@ -1108,9 +1108,6 @@
|
||||
<!-- Widget-->
|
||||
<string name="widget_no_power_to_manage">You need permission to manage widgets in this room</string>
|
||||
<string name="widget_creation_failure">Widget creation has failed</string>
|
||||
<string name="event_formatter_widget_added">%1$s widget added by %2$s</string>
|
||||
<string name="event_formatter_widget_removed">%1$s widget removed by %2$s</string>
|
||||
<string name="event_formatter_widget_modified">%1$s widget modified by %2$s</string>
|
||||
<string name="settings_labs_create_conference_with_jitsi">Create conference calls with jitsi</string>
|
||||
<string name="widget_delete_message_confirmation">Are you sure you want to delete the widget from this room?</string>
|
||||
<plurals name="active_widgets">
|
||||
|
Loading…
Reference in New Issue
Block a user