mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-04-20 22:23:37 +00:00
refactor: consolidate QR code scanning methods
This commit is contained in:
parent
75003bb6f0
commit
f73d909cd0
44 changed files with 89 additions and 226 deletions
|
|
@ -3,7 +3,6 @@ package com.geeksville.mesh
|
|||
import android.net.Uri
|
||||
import com.geeksville.mesh.model.getChannelUrl
|
||||
import com.geeksville.mesh.model.primaryChannel
|
||||
import com.geeksville.mesh.model.shouldAddChannels
|
||||
import com.geeksville.mesh.model.toChannelSet
|
||||
import dagger.hilt.android.testing.HiltAndroidRule
|
||||
import dagger.hilt.android.testing.HiltAndroidTest
|
||||
|
|
@ -47,9 +46,8 @@ class ChannelSetTest {
|
|||
fun handleAddInFragment() {
|
||||
val url = Uri.parse("https://meshtastic.org/e/#CgMSAQESBggBQANIAQ?add=true")
|
||||
val cs = url.toChannelSet()
|
||||
val shouldAdd = url.shouldAddChannels()
|
||||
Assert.assertEquals("LongFast", cs.primaryChannel!!.name)
|
||||
Assert.assertTrue(shouldAdd)
|
||||
Assert.assertEquals("Custom", cs.primaryChannel!!.name)
|
||||
Assert.assertFalse(cs.hasLoraConfig())
|
||||
}
|
||||
|
||||
/** properly parse channel config when `?add=true` is in the query parameters */
|
||||
|
|
@ -57,8 +55,7 @@ class ChannelSetTest {
|
|||
fun handleAddInQueryParams() {
|
||||
val url = Uri.parse("https://meshtastic.org/e/?add=true#CgMSAQESBggBQANIAQ")
|
||||
val cs = url.toChannelSet()
|
||||
val shouldAdd = url.shouldAddChannels()
|
||||
Assert.assertEquals("LongFast", cs.primaryChannel!!.name)
|
||||
Assert.assertTrue(shouldAdd)
|
||||
Assert.assertEquals("Custom", cs.primaryChannel!!.name)
|
||||
Assert.assertFalse(cs.hasLoraConfig())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ package com.geeksville.mesh
|
|||
|
||||
import android.app.Activity
|
||||
import android.bluetooth.BluetoothAdapter
|
||||
import android.content.*
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageInfo
|
||||
import android.content.pm.PackageManager
|
||||
import android.hardware.usb.UsbManager
|
||||
|
|
@ -22,25 +23,47 @@ import androidx.activity.viewModels
|
|||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentTransaction
|
||||
import androidx.lifecycle.asLiveData
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
import com.geeksville.mesh.android.*
|
||||
import com.geeksville.mesh.android.BindFailedException
|
||||
import com.geeksville.mesh.android.GeeksvilleApplication
|
||||
import com.geeksville.mesh.android.Logging
|
||||
import com.geeksville.mesh.android.ServiceClient
|
||||
import com.geeksville.mesh.android.getBluetoothPermissions
|
||||
import com.geeksville.mesh.android.getNotificationPermissions
|
||||
import com.geeksville.mesh.android.hasBluetoothPermission
|
||||
import com.geeksville.mesh.android.hasNotificationPermission
|
||||
import com.geeksville.mesh.android.permissionMissing
|
||||
import com.geeksville.mesh.android.rationaleDialog
|
||||
import com.geeksville.mesh.android.shouldShowRequestPermissionRationale
|
||||
import com.geeksville.mesh.concurrent.handledLaunch
|
||||
import com.geeksville.mesh.databinding.ActivityMainBinding
|
||||
import com.geeksville.mesh.model.BluetoothViewModel
|
||||
import com.geeksville.mesh.model.DeviceVersion
|
||||
import com.geeksville.mesh.model.UIViewModel
|
||||
import com.geeksville.mesh.model.primaryChannel
|
||||
import com.geeksville.mesh.model.shouldAddChannels
|
||||
import com.geeksville.mesh.model.toChannelSet
|
||||
import com.geeksville.mesh.service.*
|
||||
import com.geeksville.mesh.ui.*
|
||||
import com.geeksville.mesh.service.MeshService
|
||||
import com.geeksville.mesh.service.MeshServiceNotifications
|
||||
import com.geeksville.mesh.service.ServiceRepository
|
||||
import com.geeksville.mesh.service.startService
|
||||
import com.geeksville.mesh.ui.ChannelFragment
|
||||
import com.geeksville.mesh.ui.ContactsFragment
|
||||
import com.geeksville.mesh.ui.DebugFragment
|
||||
import com.geeksville.mesh.ui.QuickChatSettingsFragment
|
||||
import com.geeksville.mesh.ui.SettingsFragment
|
||||
import com.geeksville.mesh.ui.UsersFragment
|
||||
import com.geeksville.mesh.ui.components.ScannedQrCodeDialog
|
||||
import com.geeksville.mesh.ui.map.MapFragment
|
||||
import com.geeksville.mesh.ui.navigateToMessages
|
||||
import com.geeksville.mesh.ui.navigateToNavGraph
|
||||
import com.geeksville.mesh.ui.theme.AppTheme
|
||||
import com.geeksville.mesh.util.Exceptions
|
||||
import com.geeksville.mesh.util.LanguageUtils
|
||||
import com.geeksville.mesh.util.getPackageInfoCompat
|
||||
|
|
@ -222,6 +245,25 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
override fun onTabReselected(tab: TabLayout.Tab?) { }
|
||||
})
|
||||
|
||||
binding.composeView.setContent {
|
||||
val connState by model.connectionState.collectAsStateWithLifecycle()
|
||||
val channels by model.channels.collectAsStateWithLifecycle()
|
||||
val requestChannelSet by model.requestChannelSet.collectAsStateWithLifecycle()
|
||||
|
||||
AppTheme {
|
||||
if (connState.isConnected()) {
|
||||
if (requestChannelSet != null) {
|
||||
ScannedQrCodeDialog(
|
||||
channels = channels,
|
||||
incoming = requestChannelSet!!,
|
||||
onDismiss = model::clearRequestChannelUrl,
|
||||
onConfirm = model::setChannels,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle any intent
|
||||
handleIntent(intent)
|
||||
}
|
||||
|
|
@ -253,8 +295,6 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
handleIntent(intent)
|
||||
}
|
||||
|
||||
private var requestedChannelUrl: Uri? = null
|
||||
|
||||
// Handle any intents that were passed into us
|
||||
private fun handleIntent(intent: Intent) {
|
||||
val appLinkAction = intent.action
|
||||
|
|
@ -263,10 +303,12 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
when (appLinkAction) {
|
||||
Intent.ACTION_VIEW -> {
|
||||
debug("Asked to open a channel URL - ask user if they want to switch to that channel. If so send the config to the radio")
|
||||
requestedChannelUrl = appLinkData
|
||||
|
||||
// if the device is connected already, process it now
|
||||
perhapsChangeChannel()
|
||||
try {
|
||||
appLinkData?.let { model.requestChannelSet(it.toChannelSet()) }
|
||||
} catch (ex: Throwable) {
|
||||
errormsg("Channel url error: ${ex.message}")
|
||||
showSnackbar("${getString(R.string.channel_invalid)}: ${ex.message}")
|
||||
}
|
||||
|
||||
// We now wait for the device to connect, once connected, we ask the user if they want to switch to the new channel
|
||||
}
|
||||
|
|
@ -355,11 +397,6 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
|
||||
if (curVer < MeshService.minDeviceVersion) {
|
||||
showAlert(R.string.firmware_too_old, R.string.firmware_old)
|
||||
} else {
|
||||
// If our app is too old/new, we probably don't understand the new DeviceConfig messages, so we don't read them until here
|
||||
|
||||
// we have a connection to our device now, do the channel change
|
||||
perhapsChangeChannel()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -407,51 +444,6 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
}
|
||||
}
|
||||
|
||||
@Suppress("NestedBlockDepth")
|
||||
private fun perhapsChangeChannel(url: Uri? = requestedChannelUrl) {
|
||||
// if the device is connected already, process it now
|
||||
if (url != null && model.isConnected()) {
|
||||
requestedChannelUrl = null
|
||||
try {
|
||||
val channels = url.toChannelSet()
|
||||
val shouldAdd = url.shouldAddChannels()
|
||||
val primary = channels.primaryChannel
|
||||
if (primary == null) {
|
||||
showSnackbar(R.string.channel_invalid)
|
||||
} else {
|
||||
val dialogMessage = if (!shouldAdd) {
|
||||
getString(R.string.do_you_want_switch).format(primary.name)
|
||||
} else {
|
||||
resources.getQuantityString(
|
||||
R.plurals.add_channel_from_qr,
|
||||
channels.settingsCount,
|
||||
channels.settingsCount
|
||||
)
|
||||
}
|
||||
MaterialAlertDialogBuilder(this)
|
||||
.setTitle(R.string.new_channel_rcvd)
|
||||
.setMessage(dialogMessage)
|
||||
.setNeutralButton(R.string.cancel) { _, _ ->
|
||||
// Do nothing
|
||||
}
|
||||
.setPositiveButton(R.string.accept) { _, _ ->
|
||||
debug("Setting channel from URL")
|
||||
try {
|
||||
model.setChannels(channels, !shouldAdd)
|
||||
} catch (ex: RemoteException) {
|
||||
errormsg("Couldn't change channel ${ex.message}")
|
||||
showSnackbar(R.string.cant_change_no_radio)
|
||||
}
|
||||
}
|
||||
.show()
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
errormsg("Channel url error: ${ex.message}")
|
||||
showSnackbar("${getString(R.string.channel_invalid)}: ${ex.message}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
|
||||
return try {
|
||||
super.dispatchTouchEvent(ev)
|
||||
|
|
@ -562,15 +554,6 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
}
|
||||
}
|
||||
|
||||
// Call perhapsChangeChannel() whenever [requestChannelUrl] updates with a non-null value
|
||||
model.requestChannelUrl.observe(this) { url ->
|
||||
url?.let {
|
||||
requestedChannelUrl = url
|
||||
model.clearRequestChannelUrl()
|
||||
perhapsChangeChannel()
|
||||
}
|
||||
}
|
||||
|
||||
// Call showSnackbar() whenever [snackbarText] updates with a non-null value
|
||||
model.snackbarText.observe(this) { text ->
|
||||
if (text is Int) showSnackbar(text)
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@ import com.journeyapps.barcodescanner.BarcodeEncoder
|
|||
import java.net.MalformedURLException
|
||||
import kotlin.jvm.Throws
|
||||
|
||||
internal const val URL_PREFIX = "https://meshtastic.org/e/#"
|
||||
private const val MESHTASTIC_DOMAIN = "meshtastic.org"
|
||||
private const val MESHTASTIC_CHANNEL_CONFIG_PATH = "/e/"
|
||||
private const val MESHTASTIC_HOST = "meshtastic.org"
|
||||
private const val MESHTASTIC_PATH = "/e/"
|
||||
internal const val URL_PREFIX = "https://$MESHTASTIC_HOST$MESHTASTIC_PATH#"
|
||||
private const val BASE64FLAGS = Base64.URL_SAFE + Base64.NO_WRAP + Base64.NO_PADDING
|
||||
|
||||
/**
|
||||
|
|
@ -23,37 +23,21 @@ private const val BASE64FLAGS = Base64.URL_SAFE + Base64.NO_WRAP + Base64.NO_PAD
|
|||
@Throws(MalformedURLException::class)
|
||||
fun Uri.toChannelSet(): ChannelSet {
|
||||
if (fragment.isNullOrBlank() ||
|
||||
!host.equals(MESHTASTIC_DOMAIN, true) ||
|
||||
!path.equals(MESHTASTIC_CHANNEL_CONFIG_PATH, true)
|
||||
!host.equals(MESHTASTIC_HOST, true) ||
|
||||
!path.equals(MESHTASTIC_PATH, true)
|
||||
) {
|
||||
throw MalformedURLException("Not a valid Meshtastic URL: ${toString().take(40)}")
|
||||
}
|
||||
|
||||
// Older versions of Meshtastic clients (Apple/web) included `?add=true` within the URL fragment.
|
||||
// This gracefully handles those cases until the newer version are generally available/used.
|
||||
return ChannelSet.parseFrom(Base64.decode(fragment!!.substringBefore('?'), BASE64FLAGS))
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a [Boolean] if the URL indicates the associated [ChannelSet] should be added to the
|
||||
* existing configuration.
|
||||
* @throws MalformedURLException when not recognized as a valid Meshtastic URL
|
||||
*/
|
||||
@Throws(MalformedURLException::class)
|
||||
fun Uri.shouldAddChannels(): Boolean {
|
||||
if (fragment.isNullOrBlank() ||
|
||||
!host.equals(MESHTASTIC_DOMAIN, true) ||
|
||||
!path.equals(MESHTASTIC_CHANNEL_CONFIG_PATH, true)
|
||||
) {
|
||||
throw MalformedURLException("Not a valid Meshtastic URL: ${toString().take(40)}")
|
||||
}
|
||||
|
||||
// Older versions of Meshtastic clients (Apple/web) included `?add=true` within the URL fragment.
|
||||
// This gracefully handles those cases until the newer version are generally available/used.
|
||||
return fragment?.substringAfter('?', "")
|
||||
val url = ChannelSet.parseFrom(Base64.decode(fragment!!.substringBefore('?'), BASE64FLAGS))
|
||||
val shouldAdd = fragment?.substringAfter('?', "")
|
||||
?.takeUnless { it.isBlank() }
|
||||
?.equals("add=true")
|
||||
?: getBooleanQueryParameter("add", false)
|
||||
|
||||
return url.toBuilder().apply { if (shouldAdd) clearLoraConfig() }.build()
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -451,18 +451,18 @@ class UIViewModel @Inject constructor(
|
|||
val connectionState get() = radioConfigRepository.connectionState
|
||||
fun isConnected() = connectionState.value != MeshService.ConnectionState.DISCONNECTED
|
||||
|
||||
private val _requestChannelUrl = MutableLiveData<Uri?>(null)
|
||||
val requestChannelUrl: LiveData<Uri?> get() = _requestChannelUrl
|
||||
private val _requestChannelSet = MutableStateFlow<AppOnlyProtos.ChannelSet?>(null)
|
||||
val requestChannelSet: StateFlow<AppOnlyProtos.ChannelSet?> get() = _requestChannelSet
|
||||
|
||||
fun setRequestChannelUrl(channelUrl: Uri) {
|
||||
_requestChannelUrl.value = channelUrl
|
||||
fun requestChannelSet(channelSet: AppOnlyProtos.ChannelSet) {
|
||||
_requestChannelSet.value = channelSet
|
||||
}
|
||||
|
||||
/**
|
||||
* Called immediately after activity observes requestChannelUrl
|
||||
*/
|
||||
fun clearRequestChannelUrl() {
|
||||
_requestChannelUrl.value = null
|
||||
_requestChannelSet.value = null
|
||||
}
|
||||
|
||||
fun showSnackbar(resString: Any) {
|
||||
|
|
@ -538,24 +538,14 @@ class UIViewModel @Inject constructor(
|
|||
}
|
||||
|
||||
/**
|
||||
* Set the radio config (also updates our saved copy in preferences). By default, this will replace
|
||||
* all channels in the existing radio config. Otherwise, it will append all [ChannelSettings] that
|
||||
* are unique in [channelSet] to the existing radio config.
|
||||
* Set the radio config (also updates our saved copy in preferences).
|
||||
*/
|
||||
fun setChannels(channelSet: AppOnlyProtos.ChannelSet, overwrite: Boolean = true) = viewModelScope.launch {
|
||||
val newRadioSettings: List<ChannelSettings> = if (overwrite) {
|
||||
channelSet.settingsList
|
||||
} else {
|
||||
// To guarantee consistent ordering, using a LinkedHashSet which iterates through it's
|
||||
// entries according to the order an item was *first* inserted.
|
||||
// https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-linked-hash-set/
|
||||
LinkedHashSet(channels.value.settingsList + channelSet.settingsList).toList()
|
||||
}
|
||||
fun setChannels(channelSet: AppOnlyProtos.ChannelSet) = viewModelScope.launch {
|
||||
getChannelList(channelSet.settingsList, channels.value.settingsList).forEach(::setChannel)
|
||||
radioConfigRepository.replaceAllSettings(channelSet.settingsList)
|
||||
|
||||
getChannelList(newRadioSettings, channels.value.settingsList).forEach(::setChannel)
|
||||
radioConfigRepository.replaceAllSettings(newRadioSettings)
|
||||
val newConfig = config { lora = channelSet.loraConfig }
|
||||
if (overwrite && config.lora != newConfig.lora) setConfig(newConfig)
|
||||
if (config.lora != newConfig.lora) setConfig(newConfig)
|
||||
}
|
||||
|
||||
val provideLocation = object : MutableLiveData<Boolean>(preferences.getBoolean("provide-location", false)) {
|
||||
|
|
|
|||
|
|
@ -85,7 +85,6 @@ import com.geeksville.mesh.service.MeshService
|
|||
import com.geeksville.mesh.ui.components.AdaptiveTwoPane
|
||||
import com.geeksville.mesh.ui.components.DropDownPreference
|
||||
import com.geeksville.mesh.ui.components.PreferenceFooter
|
||||
import com.geeksville.mesh.ui.components.ScannedQrCodeDialog
|
||||
import com.geeksville.mesh.ui.components.config.ChannelCard
|
||||
import com.geeksville.mesh.ui.components.config.ChannelSelection
|
||||
import com.geeksville.mesh.ui.components.config.EditChannelDialog
|
||||
|
|
@ -147,11 +146,10 @@ fun ChannelScreen(
|
|||
val channelUrl = channelSet.getChannelUrl()
|
||||
val modemPresetName = Channel(loraConfig = channelSet.loraConfig).name
|
||||
|
||||
var scannedChannelSet by remember { mutableStateOf<ChannelSet?>(null) }
|
||||
val barcodeLauncher = rememberLauncherForActivityResult(ScanContract()) { result ->
|
||||
if (result.contents != null) {
|
||||
try {
|
||||
scannedChannelSet = Uri.parse(result.contents).toChannelSet()
|
||||
viewModel.requestChannelSet(Uri.parse(result.contents).toChannelSet())
|
||||
} catch (ex: Throwable) {
|
||||
errormsg("Channel url error: ${ex.message}")
|
||||
viewModel.showSnackbar(R.string.channel_invalid)
|
||||
|
|
@ -266,17 +264,6 @@ fun ChannelScreen(
|
|||
.show()
|
||||
}
|
||||
|
||||
if (scannedChannelSet != null) {
|
||||
val incoming = scannedChannelSet ?: return
|
||||
/* Prompt the user to modify channels after scanning a QR code. */
|
||||
ScannedQrCodeDialog(
|
||||
channels = channels,
|
||||
incoming = incoming,
|
||||
onDismiss = { scannedChannelSet = null },
|
||||
onConfirm = { newChannelSet -> installSettings(newChannelSet) }
|
||||
)
|
||||
}
|
||||
|
||||
var showEditChannelDialog: Int? by remember { mutableStateOf(null) }
|
||||
|
||||
if (showEditChannelDialog != null) {
|
||||
|
|
@ -375,7 +362,7 @@ fun ChannelScreen(
|
|||
IconButton(onClick = {
|
||||
when {
|
||||
isError -> valueState = channelUrl
|
||||
!isUrlEqual -> viewModel.setRequestChannelUrl(channelUrl)
|
||||
!isUrlEqual -> viewModel.requestChannelSet(channels)
|
||||
else -> {
|
||||
// track how many times users share channels
|
||||
GeeksvilleApplication.analytics.track(
|
||||
|
|
|
|||
|
|
@ -51,13 +51,16 @@ fun ScannedQrCodeDialog(
|
|||
onDismiss: () -> Unit,
|
||||
onConfirm: (ChannelSet) -> Unit
|
||||
) {
|
||||
var shouldReplace by remember { mutableStateOf(true) }
|
||||
var shouldReplace by remember { mutableStateOf(incoming.hasLoraConfig()) }
|
||||
|
||||
val channelSet = remember(shouldReplace) {
|
||||
if (shouldReplace) {
|
||||
incoming
|
||||
} else {
|
||||
channels.copy {
|
||||
// To guarantee consistent ordering, using a LinkedHashSet which iterates through
|
||||
// it's entries according to the order an item was *first* inserted.
|
||||
// https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-linked-hash-set/
|
||||
val result = LinkedHashSet(settings + incoming.settingsList)
|
||||
settings.clear()
|
||||
settings.addAll(result)
|
||||
|
|
@ -134,6 +137,7 @@ fun ScannedQrCodeDialog(
|
|||
modifier = Modifier
|
||||
.height(48.dp)
|
||||
.weight(1f),
|
||||
enabled = incoming.hasLoraConfig(),
|
||||
colors = if (shouldReplace) selectedColors else unselectedColors,
|
||||
) { Text(text = stringResource(R.string.replace)) }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,4 +72,9 @@
|
|||
android:layout_height="match_parent"
|
||||
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
||||
<androidx.compose.ui.platform.ComposeView
|
||||
android:id="@+id/composeView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</FrameLayout>
|
||||
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Промени канал</string>
|
||||
<string name="are_you_sure_channel">Сигурни ли сте, че искате да смените канала? Цялата комуникация с други възли ще спре, докато не споделите новите настройки на канала.</string>
|
||||
<string name="new_channel_rcvd">Получен е URL адрес на нов канал</string>
|
||||
<string name="do_you_want_switch">Искате ли да превключите към канала \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic се нуждае от разрешение за местоположение. Местоположението трябва да е включено, за да намира нови устройства чрез Bluetooth. Можете да го изключите отново след това.</string>
|
||||
<string name="report_bug">Докладване за грешка</string>
|
||||
<string name="report_a_bug">Докладвайте грешка</string>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Canviar canal</string>
|
||||
<string name="are_you_sure_channel">Estàs segur que vols canviar el canal? Totes les comunicacions amb els altres nodes s\'aturaran fins que comparteixis la nova configuració del nou canal.</string>
|
||||
<string name="new_channel_rcvd">Nova URL de canal rebuda</string>
|
||||
<string name="do_you_want_switch">Vols canviar al canal \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic necessita permisos de posicionament i la posició ha d\'estar activada per trobar nous dispositius Bluetooth. Els podràs apagar posteriorment.</string>
|
||||
<string name="report_bug">Informar d\'error</string>
|
||||
<string name="report_a_bug">Informar d\'un error</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Změnit kanál</string>
|
||||
<string name="are_you_sure_channel">Jste si jistý, že chcete změnit kanál? Veškerá komunikace s ostatními vysílači přestane fungovat až do momentu distribuce stejného nastavení na ostatní vysílače.</string>
|
||||
<string name="new_channel_rcvd">Nová URL kanálu přijata</string>
|
||||
<string name="do_you_want_switch">Chcete se připojit ke kanálu \'%s\' ?</string>
|
||||
<string name="permission_missing">Chybí požadovaná oprávnění, Meshtastic nebude fungovat správně. Prosím změntě oprávnění pro aplikaci.</string>
|
||||
<string name="report_bug">Nahlášení chyby</string>
|
||||
<string name="report_a_bug">Nahlásit chybu</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Kanal wechseln</string>
|
||||
<string name="are_you_sure_channel">Möchten Sie wirklich den Kanal wechseln? Die gesamte Kommunikation mit anderen Knoten wird unterbrochen, bis Sie die neuen Kanaleinstellungen freigeben.</string>
|
||||
<string name="new_channel_rcvd">Neue Kanal-URL empfangen</string>
|
||||
<string name="do_you_want_switch">Möchten Sie zum Kanal \'%s\' wechseln?</string>
|
||||
<string name="permission_missing">Meshtastic benötigt Standortberechtigung und Standort muss eingeschaltet werden, um neue Geräte über Bluetooth zu finden. Sie können es später wieder deaktivieren.</string>
|
||||
<string name="report_bug">Fehler melden</string>
|
||||
<string name="report_a_bug">Fehler melden</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Αλλαγή καναλιού</string>
|
||||
<string name="are_you_sure_channel">Είστε βέβαιοι ότι θέλετε να αλλάξετε κανάλι? Η επικοινωνία με άλλες συσκευές θα σταματήσεις μέχρι να μοιραστείτε τις ρυθμίσεις του νέου καναλιού.</string>
|
||||
<string name="new_channel_rcvd">Λήψη URL νέου καναλιού</string>
|
||||
<string name="do_you_want_switch">Θέλετε να αλλάξετε ‘%s’ κανάλι?</string>
|
||||
<string name="permission_missing">Λείπει μια απαιτούμενη άδεια, Meshtastic δεν θα λειτοργεί σωστά. Ενεργοποιήστε τις ρυθμίσεις εφαρμογής Android.</string>
|
||||
<string name="report_bug">Αναφορά Σφάλματος</string>
|
||||
<string name="report_a_bug">Αναφέρετε ένα σφάλμα</string>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Cambia el canal</string>
|
||||
<string name="are_you_sure_channel">¿Estás seguro de que quieres cambiar el canal? Toda comunicación con otros nodos se detendrá hasta que compartas la nueva configuración del canal.</string>
|
||||
<string name="new_channel_rcvd">Nueva URL de canal recibida</string>
|
||||
<string name="do_you_want_switch">¿Quieres cambiar al canal de \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic necesita permiso de ubicación y la ubicación debe estar encendida para encontrar nuevos dispositivos a través de Bluetooth. Puedes apagarla después.</string>
|
||||
<string name="report_bug">Informar de un fallo</string>
|
||||
<string name="report_a_bug">Informar de un fallo</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Vaheta kanalit</string>
|
||||
<string name="are_you_sure_channel">Kas soovid kindlasti kanalit vahetada? Kõik ühendused katkevad seniks, kuni oled uued kanalite seadeid jaganud.</string>
|
||||
<string name="new_channel_rcvd">Uued kanalid vastu võetud</string>
|
||||
<string name="do_you_want_switch">Kas soovid minna kanalile \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic vajab sinihamba kaudu uute seadmete tuvastamiseks luba asukoha kasutamiseks, asukoht peab olema sisse lülitatud. Hiljem saad asukoha uuesti välja lülitada.</string>
|
||||
<string name="report_bug">Teata veast</string>
|
||||
<string name="report_a_bug">Teata veast</string>
|
||||
|
|
@ -216,10 +215,6 @@
|
|||
<string name="mute_8_hours">8 tundi</string>
|
||||
<string name="mute_1_week">1 nädal</string>
|
||||
<string name="mute_always">Alati</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Kas soovite lisada uue kanali?</item>
|
||||
<item quantity="other">Kas soovite lisada %d uut kanalit?</item>
|
||||
</plurals>
|
||||
<string name="replace">Asenda</string>
|
||||
<string name="wifi_qr_code_scan">Skaneeri WiFi QR kood</string>
|
||||
<string name="wifi_qr_code_error">Vigane WiFi tõendi QR koodi vorming</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Vaihda kanavaa</string>
|
||||
<string name="are_you_sure_channel">Oletko varma, että haluat vaihtaa kanavaa? Kaikki yhteydet katkeavat, ennen kuin olet jakanut uudet kanavan asetukset.</string>
|
||||
<string name="new_channel_rcvd">Vastaanotettu uuden kanavan URL</string>
|
||||
<string name="do_you_want_switch">Haluatko siirtyä kanavalle \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic tarvitsee sijaintiluvan, ja sijainnin on oltava päällä uusien laitteiden löytämiseksi Bluetoothin kautta. Voit sammuttaa sen jälkeen sijainnin uudelleen.</string>
|
||||
<string name="report_bug">Ilmoita virheestä</string>
|
||||
<string name="report_a_bug">Ilmoita virheestä</string>
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Chanje kanal</string>
|
||||
<string name="are_you_sure_channel">Èske ou sèten ou vle chanje kanal? Tout kominikasyon ak lòt nœuds elektwonik yo ap kanpe jiskaske ou pataje nouvo paramèt kanal yo.</string>
|
||||
<string name="new_channel_rcvd">Nouvo kanal URL resevwa</string>
|
||||
<string name="do_you_want_switch">Eske ou vle chanje a kanal \'%s\'?</string>
|
||||
<string name="permission_missing">Manke pèmisyon obligatwa, Meshtastic p ap ka fonksyone byen. Tanpri ale bay pèmisyon an nan paramèt aplikasyon android ou.</string>
|
||||
<string name="report_bug">Rapòte yon pwoblèm</string>
|
||||
<string name="report_a_bug">Rapòte pwoblèm</string>
|
||||
|
|
@ -225,10 +224,6 @@
|
|||
<string name="mute_8_hours">8 èdtan</string>
|
||||
<string name="mute_1_week">1 semèn</string>
|
||||
<string name="mute_always">Toujou</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Eske ou vle ajoute yon nouvo kanal?</item>
|
||||
<item quantity="other">Eske ou vle ajoute %d nouvo kanal?</item>
|
||||
</plurals>
|
||||
<string name="replace">Ranplase</string>
|
||||
<string name="wifi_qr_code_scan">Skan QR Kòd WiFi</string>
|
||||
<string name="wifi_qr_code_error">Fòma QR Kòd Kredi WiFi Invalid</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Changer de canal</string>
|
||||
<string name="are_you_sure_channel">Êtes-vous sûr de vouloir modifier le canal ? Toutes les communications avec les autres nœuds s\'arrêteront jusqu\'à ce que vous partagiez les nouveaux paramètres du canal.</string>
|
||||
<string name="new_channel_rcvd">Nouvel URL canal reçu</string>
|
||||
<string name="do_you_want_switch">Voulez-vous basculer sur le canal \'%s\' ?</string>
|
||||
<string name="permission_missing">Une permission indispensable manque, Meshtastic ne peut pas fonctionner. Veuillez modifier dans Réglages.</string>
|
||||
<string name="report_bug">Rapporter Bogue</string>
|
||||
<string name="report_a_bug">Rapporter un Bogue</string>
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Athraigh cainéal</string>
|
||||
<string name="are_you_sure_channel">An bhfuil tú cinnte gur mhaith leat an cainéal a athrú? Stopfaidh gach cumarsáid le nóid eile go dtí go roinnfidh tú na socruithe nua cainéil.</string>
|
||||
<string name="new_channel_rcvd">URL Cainéal nua faighte</string>
|
||||
<string name="do_you_want_switch">Ar mhaith leat aistriú go dtí an cainéal \'%s\'?</string>
|
||||
<string name="permission_missing">Tá cead riachtanach ar iarraidh, ní bheidh Meshtastic in ann oibriú i gceart. Cumasaigh i socruithe feidhmchláir le do thoil.</string>
|
||||
<string name="report_bug">Tuairiscigh fabht</string>
|
||||
<string name="report_a_bug">Tuairiscigh fabht</string>
|
||||
|
|
@ -228,13 +227,6 @@
|
|||
<string name="mute_8_hours">8 uair an chloig</string>
|
||||
<string name="mute_1_week">1 seachtain</string>
|
||||
<string name="mute_always">I gcónaí</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">An bhfuil tú ag iarraidh cainéal nua a chur leis?</item>
|
||||
<item quantity="two">An bhfuil tú ag iarraidh %d cainéil nua a chur leis?</item>
|
||||
<item quantity="few">An bhfuil tú ag iarraidh %d cainéil nua a chur leis?</item>
|
||||
<item quantity="many">An bhfuil tú ag iarraidh %d cainéil nua a chur leis?</item>
|
||||
<item quantity="other">An bhfuil tú ag iarraidh %d cainéil nua a chur leis?</item>
|
||||
</plurals>
|
||||
<string name="replace">Ionad</string>
|
||||
<string name="wifi_qr_code_scan">Scan QR cód WiFi</string>
|
||||
<string name="wifi_qr_code_error">Formáid QR cód Creidiúnachtaí WiFi neamhbhailí</string>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Cambiar canle</string>
|
||||
<string name="are_you_sure_channel">Seguro que queres cambiar a canle? Toda comunicación con outros nodos vai parar ata que compartas a nova configuración da canle.</string>
|
||||
<string name="new_channel_rcvd">Novo enlace de canle recibida</string>
|
||||
<string name="do_you_want_switch">Queres cambiar ao canle \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtástic precisa permisos de ubicación e ten que estar prendida para atopar novos dispositivos vía Bluetooth. Podes apagala despois.</string>
|
||||
<string name="report_bug">Reportar erro</string>
|
||||
<string name="report_a_bug">Reporta un erro</string>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Promjena kanala</string>
|
||||
<string name="are_you_sure_channel">Jeste li sigurni da želite promijeniti kanal? Sva komunikacija s drugim čvorovima prekinut će se dok ne podijelite nove postavke kanala.</string>
|
||||
<string name="new_channel_rcvd">Primljen je URL novog kanala</string>
|
||||
<string name="do_you_want_switch">Želite li prijeći na kanal \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic treba dopuštenje za lokaciju i lokacija mora biti uključena kako bi pronašao nove uređaje putem Bluetootha. Nakon toga ga možete ponovno isključiti.</string>
|
||||
<string name="report_bug">Prijavi grešku</string>
|
||||
<string name="report_a_bug">Prijavi grešku</string>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Csatorna váltás</string>
|
||||
<string name="are_you_sure_channel">Biztosan csatornát akarsz váltani? Összes kommunikáció a többi állomással megszakad, amíg nem osztja meg velük az új csatorna beállításokat.</string>
|
||||
<string name="new_channel_rcvd">Új csatorna URL érkezett</string>
|
||||
<string name="do_you_want_switch">Átkapcsol a(z) \'%s\' csatornára?</string>
|
||||
<string name="permission_missing">Egy szükséges engedély hiányzik, ezért a Meshtastic nem fog tudni rendesen működni. Kérem engedélyezze az Android alkalmazások beállításai között.</string>
|
||||
<string name="report_bug">Hiba jelentése</string>
|
||||
<string name="report_a_bug">Hiba jelentése</string>
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
<string name="change_channel">Skipta um rás</string>
|
||||
<string name="are_you_sure_channel">Ertu viss um að þú viljir skipta um rás? Öll samskipti við aðrar nóður mun ljúka þar til þú deilir nýjum stillingum fyrir rás.</string>
|
||||
<string name="new_channel_rcvd">Ný slóð fyrir rás móttekin</string>
|
||||
<string name="do_you_want_switch">Viltu skipta yfir á \'%s\' rás?</string>
|
||||
<string name="permission_missing">Meshtastic þarf leyfi til að nota staðsetningu símans og verður að vera kveikt á staðsetningu til að finna nýjan búnað yfir Blátönn. Þú getur slökkt á henni að því loknu.</string>
|
||||
<string name="report_bug">Tilkynna villu</string>
|
||||
<string name="report_a_bug">Tilkynna villu</string>
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Cambia canale</string>
|
||||
<string name="are_you_sure_channel">Sei sicuro di voler cambiare canale ? Tutte le comunicazioni con gli altri nodi termineranno fino a quando non condividi le impostazioni del nuovo canale.</string>
|
||||
<string name="new_channel_rcvd">Ricevuta URL del Nuovo Canale</string>
|
||||
<string name="do_you_want_switch">Passare al canale \'%s\' ?</string>
|
||||
<string name="permission_missing">Meshtastic necessita dei permessi di geolocalizzazione e la geolocalizzazione deve essere attiva per cercare nuovi dispositivi via Bluetooth. È possibile disattivarla successivamente.</string>
|
||||
<string name="report_bug">Segnala Bug</string>
|
||||
<string name="report_a_bug">Segnalazione di bug</string>
|
||||
|
|
@ -225,10 +224,6 @@
|
|||
<string name="mute_8_hours">8 ore</string>
|
||||
<string name="mute_1_week">1 settimana</string>
|
||||
<string name="mute_always">Sempre</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Si desidera aggiungere un nuovo canale?</item>
|
||||
<item quantity="other">Si desidera aggiungere %d nuovi canali?</item>
|
||||
</plurals>
|
||||
<string name="replace">Sostituisci</string>
|
||||
<string name="wifi_qr_code_scan">Scansiona codice QR WiFi</string>
|
||||
<string name="wifi_qr_code_error">Formato codice QR delle Credenziali WiFi non valido</string>
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
<string name="change_channel">שנה ערוץ</string>
|
||||
<string name="are_you_sure_channel">בטוח שתרצה לשנות ערוץ? כל תקשורת עם מכשירים אחרים תיפסק עד שתשתף להם את הגדרות הערוץ החדשות.</string>
|
||||
<string name="new_channel_rcvd">התקבל כתובת ערוץ חדשה</string>
|
||||
<string name="do_you_want_switch">תרצה לשנות לערוץ \'%s\'?</string>
|
||||
<string name="permission_missing">משטסטיק צריך גישה למיקום ועל מיקום להיות דולק בכדי למצוא מכשירי בלוטוס. ניתן לכבות חזרה לאחר מכן.</string>
|
||||
<string name="report_bug">דווח על באג</string>
|
||||
<string name="report_a_bug">דווח על באג</string>
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">チャンネルの変更</string>
|
||||
<string name="are_you_sure_channel">チャンネルを変更しますか?新しいチャンネル設定をシェアするまで他のノードとの通信はすべて停止します。</string>
|
||||
<string name="new_channel_rcvd">新しいチャンネルURLを受信しました</string>
|
||||
<string name="do_you_want_switch">\'%s\チャンネルに変更しますか?</string>
|
||||
<string name="permission_missing">必要なアクセス権限が拒否されているため、アプリが正常に動作しません。設定により権限を許可してください。</string>
|
||||
<string name="report_bug">バグ報告</string>
|
||||
<string name="report_a_bug">バグの報告</string>
|
||||
|
|
@ -224,9 +223,6 @@
|
|||
<string name="mute_8_hours"></string>
|
||||
<string name="mute_1_week">8時間</string>
|
||||
<string name="mute_always">常時</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="other">%d の新しいチャンネルを追加しますか?</item>
|
||||
</plurals>
|
||||
<string name="replace">置き換え</string>
|
||||
<string name="wifi_qr_code_scan">WiFiのQRコードをスキャン</string>
|
||||
<string name="wifi_qr_code_error">WiFi認証QRコードの形式が無効です</string>
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
<string name="change_channel">채널 변경</string>
|
||||
<string name="are_you_sure_channel">채널 변경을 원하세요? 채널 설정이 공유되기 전까지 다른 노드와의 통신은 중단됩니다.</string>
|
||||
<string name="new_channel_rcvd">새로운 채널 URL 수신</string>
|
||||
<string name="do_you_want_switch">\'%s\' 채널로 변경할 까요?</string>
|
||||
<string name="permission_missing">Meshtastic 작동에 필요한 권한을 얻지 못했습니다. 정상적으로 작동하지 않을 수도 있습니다. 스마트폰 설정에서 권한 허용 설정해주세요.</string>
|
||||
<string name="report_bug">버그 보고</string>
|
||||
<string name="report_a_bug">버그 보고</string>
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
<string name="change_channel">Pakeisti kanalą</string>
|
||||
<string name="are_you_sure_channel">Ar tikrai norite pakeisti kanalą? Visi ryšiai su kitais mazgais bus nutraukti, kol nepasidalinsite naujais kanalo nustatymais.</string>
|
||||
<string name="new_channel_rcvd">Gautas naujo kanalo URL</string>
|
||||
<string name="do_you_want_switch">Ar norite pereiti prie \'%s\' kanalo?</string>
|
||||
<string name="permission_missing">Meshtastic reikalauja vietos nustatymo leidimo, ir vietos nustatymas turi būti įjungtas, kad būtų galima rasti naujus įrenginius per „Bluetooth“. Vėliau jį galite išjungti.</string>
|
||||
<string name="report_bug">Pranešti apie klaidą</string>
|
||||
<string name="report_a_bug">Pranešti apie klaidą</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Endre kanal</string>
|
||||
<string name="are_you_sure_channel">Er du sikker på at du vil endre kanalen? All kommunikasjon med andre noder vil stanse, intill du deler de nye kanalinstillingene.</string>
|
||||
<string name="new_channel_rcvd">Ny kanal URL mottatt</string>
|
||||
<string name="do_you_want_switch">Vil du bytte til \'%s\' kanal?</string>
|
||||
<string name="permission_missing">En påkrevet tilgang mangler, Meshtastic vil ikke fungere korrekt. Vennligst slå på i Android appliksjonsinstillinger.</string>
|
||||
<string name="report_bug">Rapporter Feil</string>
|
||||
<string name="report_a_bug">Rapporter en feil</string>
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@
|
|||
<string name="change_channel">Verander kanaal</string>
|
||||
<string name="are_you_sure_channel">Ben je zeker van kanaal te willen veranderen? Alle communicatie met andere nodes wordt gestopt tot je de nieuwe instellingen deelt.</string>
|
||||
<string name="new_channel_rcvd">Nieuw kanaal URL ontvangen</string>
|
||||
<string name="do_you_want_switch">Wil je veranderen naar kanaal \'%s\' ?</string>
|
||||
<string name="permission_missing">Een vereiste toelating ontbreekt, Meshtastic kan niet goed werken. Graag aanzetten in Instellingen.</string>
|
||||
<string name="report_bug">Rapporteer Bug</string>
|
||||
<string name="report_a_bug">Rapporteer een Bug</string>
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Zmień kanał</string>
|
||||
<string name="are_you_sure_channel">Czy na pewno chcesz zmienić kanał? Komunikacja z innymi węzłami komunikacyjnymi zostanie wstrzymana do czasu udostępnienia nowych ustawień kanału.</string>
|
||||
<string name="new_channel_rcvd">Otrzymano nowy URL kanału</string>
|
||||
<string name="do_you_want_switch">Chcesz przełączyć na \'%s\' kanał?</string>
|
||||
<string name="permission_missing">Meshtastic potrzebuje zezwolenia na lokalizacje. Lokalizacja musi być włączona, aby można było znaleźć nowe urządzenia przez Bluetooth. Możesz je później wyłączyć.</string>
|
||||
<string name="report_bug">Zgłoś błąd</string>
|
||||
<string name="report_a_bug">Zgłoś błąd</string>
|
||||
|
|
@ -227,12 +226,6 @@
|
|||
<string name="mute_8_hours">8 godzin</string>
|
||||
<string name="mute_1_week">1 tydzień</string>
|
||||
<string name="mute_always">Na zawsze</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Czy chcesz dodać nowy kanał?</item>
|
||||
<item quantity="few">Czy chcesz dodać %d nowe kanały?</item>
|
||||
<item quantity="many">Czy chcesz dodać %d nowych kanałów?</item>
|
||||
<item quantity="other">Czy chcesz dodać %d nowych kanałów?</item>
|
||||
</plurals>
|
||||
<string name="replace">Zastąp</string>
|
||||
<string name="wifi_qr_code_scan">Skanuj kod QR Wi-Fi</string>
|
||||
<string name="wifi_qr_code_error">Nieprawidłowy format kodu QR</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Mudar canal</string>
|
||||
<string name="are_you_sure_channel">Tem certeza que deseja mudar de canal? Toda comunicação com os outros dispositivos será interrompida até serem compartilhadas as novas configurações do canal.</string>
|
||||
<string name="new_channel_rcvd">Novo link de canal recebido</string>
|
||||
<string name="do_you_want_switch">Deseja mudar para o canal \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic precisa da permissão de localização e localização ativada para encontrar novos dispositivos via Bluetooth. Você pode desativar novamente depois.</string>
|
||||
<string name="report_bug">Informar Bug</string>
|
||||
<string name="report_a_bug">Informar um bug</string>
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@
|
|||
<string name="change_channel">Mudar de canal</string>
|
||||
<string name="are_you_sure_channel">Tem certeza que deseja mudar de canal? Todas as comunicações com outros nós serão interrompidas até que partilhe as novas configurações do canal.</string>
|
||||
<string name="new_channel_rcvd">Novo Link Recebido do Canal</string>
|
||||
<string name="do_you_want_switch">Pretende mudar para o canal \'%s\' ?</string>
|
||||
<string name="permission_missing">Meshtastic precisa da permissão de localização e localização ativada para encontrar novos dispositivos via bluetooth. Você pode desativar novamente depois.</string>
|
||||
<string name="report_bug">Reportar Bug</string>
|
||||
<string name="report_a_bug">Reportar a bug</string>
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
<string name="change_channel">Schimbă canalul</string>
|
||||
<string name="are_you_sure_channel">Ești sigur că vrei să schimbi canalul? Toate comunicațiile cu alte noduri vor fi oprite până când setezi aceleași detalii pe alte noduri.</string>
|
||||
<string name="new_channel_rcvd">Am primit un nou URL de canal</string>
|
||||
<string name="do_you_want_switch">Vrei să faci schimbul \'%s\' canalului?</string>
|
||||
<string name="permission_missing">O permisiune necesară lipsește, Meshtastic nu o să funcționeze corespunzător. Te rugăm activează-o în setările Android.</string>
|
||||
<string name="report_bug">Raportează Bug</string>
|
||||
<string name="report_a_bug">Raportează un bug</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Смена канала</string>
|
||||
<string name="are_you_sure_channel">Вы уверены, что хотите изменить канал? Связь с другими устройствами будет прервана, пока вы не поделитесь новыми настройками канала.</string>
|
||||
<string name="new_channel_rcvd">URL нового канала получен</string>
|
||||
<string name="do_you_want_switch">Вы хотите переключиться на \'%s\' канал?</string>
|
||||
<string name="permission_missing">Требуемое разрешение отсутствует, Meshtastic не сможет работать должным образом. Пожалуйста, включите в настройках приложения.</string>
|
||||
<string name="report_bug">Сообщить об ошибке</string>
|
||||
<string name="report_a_bug">Сообщить об ошибке</string>
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Zmeniť kanál</string>
|
||||
<string name="are_you_sure_channel">Ste si istý, že chcete zmeniť kanál? Všetka komunikácia s ostatnými uzlovými bodmi prestane, až kým budete zdieľať nové nastavenia kanálu.</string>
|
||||
<string name="new_channel_rcvd">Prijatá nová URL kanálu</string>
|
||||
<string name="do_you_want_switch">Chcete sa prepnúť na kanál \'%s\'?</string>
|
||||
<string name="permission_missing">Aplikácia Meshtastic nemá pridelené požadované oprávnenie a pravdepodobne nebude fungovať správne. Prosím povoľte tieto oprávnenia v nastaveniach aplikácie.</string>
|
||||
<string name="report_bug">Nahlásiť chybu</string>
|
||||
<string name="report_a_bug">Nahlásiť chybu</string>
|
||||
|
|
@ -227,12 +226,6 @@
|
|||
<string name="mute_8_hours">8 hodín</string>
|
||||
<string name="mute_1_week">1 týždeň</string>
|
||||
<string name="mute_always">Vždy</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Chcete pridať nový kanál?</item>
|
||||
<item quantity="few">Chcete pridať %d nové kanále?</item>
|
||||
<item quantity="many">Chcete pridať %d nových kanálov?</item>
|
||||
<item quantity="other">Chcete pridať %d nové kanále?</item>
|
||||
</plurals>
|
||||
<string name="replace">Nahradiť</string>
|
||||
<string name="wifi_qr_code_scan">Skenuj WiFi QR kód</string>
|
||||
<string name="wifi_qr_code_error">Neplatný formát QR kódu poverenia WiFi</string>
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
<string name="change_channel">Zamenjava kanala</string>
|
||||
<string name="are_you_sure_channel">Ali ste prepričani, da želite spremeniti kanal? Vsa komunikacija z drugimi vozlišči se ustavi, dokler ne delite novih nastavitev kanala.</string>
|
||||
<string name="new_channel_rcvd">Prejet je bil novi URL kanala</string>
|
||||
<string name="do_you_want_switch">Ali želite preklopiti na kanal \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic potrebuje dovoljenje za lokacijo in za iskanje novih naprav prek povezave Bluetooth mora biti lokacija vklopljena. Pozneje jo lahko znova izklopite.</string>
|
||||
<string name="report_bug">Prijavi napako</string>
|
||||
<string name="report_a_bug">Prijavite napako</string>
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Ndërro kanalin radio</string>
|
||||
<string name="are_you_sure_channel">Je i sigurtë për ndërrimin e kanalit radio? I gjithë komunikimi me nyjet e tjera do të përfundojë derisa të shprëndani parametrat e reja të kanalit radio.</string>
|
||||
<string name="new_channel_rcvd">Ju keni një kanal radio të ri URL</string>
|
||||
<string name="do_you_want_switch">Dëshiron të kalosh në këtë kanal radio? \'%s\' ?</string>
|
||||
<string name="permission_missing">Meshtastic ka nevojë për leje vendndodhjeje dhe vendndodhja duhet të jetë e aktivizuar për të gjetur paisje të reja përmes Bluetooth. Mund ta fikni përsëri pas kësaj.</string>
|
||||
<string name="report_bug">Raporto Bug</string>
|
||||
<string name="report_a_bug">Raporto një bug</string>
|
||||
|
|
@ -225,10 +224,6 @@
|
|||
<string name="mute_8_hours">8 orë</string>
|
||||
<string name="mute_1_week">1 javë</string>
|
||||
<string name="mute_always">Gjithmonë</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">A dëshironi të shtoni një kanal të ri?</item>
|
||||
<item quantity="other">A dëshironi të shtoni %d kanale të reja?</item>
|
||||
</plurals>
|
||||
<string name="replace">Zëvendëso</string>
|
||||
<string name="wifi_qr_code_scan">Skano QR kodi WiFi</string>
|
||||
<string name="wifi_qr_code_error">Formati i gabuar i kodit QR të kredencialeve WiFi</string>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Byt kanal</string>
|
||||
<string name="are_you_sure_channel">Är du säker på att du vill byta kanal? All kommunikation med andra noder avbryts tills du delar de nya kanalinställningarna.</string>
|
||||
<string name="new_channel_rcvd">Ny kanal-länk mottagen</string>
|
||||
<string name="do_you_want_switch">Vill du växla till kanalen \'%s\' </string>
|
||||
<string name="permission_missing">Meshtastic behöver platsbehörighet och Plats måste vara aktiverad för att hitta nya enheter via Bluetooth. Du kan stänga av Plats igen efteråt.</string>
|
||||
<string name="report_bug">Rapportera bugg</string>
|
||||
<string name="report_a_bug">Rapportera bugg</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Kanalı değiştir</string>
|
||||
<string name="are_you_sure_channel">Kanalı değiştirmek istediğinizden emin misiniz? Yeni kanal ayarlarını paylaşana dek tüm cihazlar ile iletişim sonlanacak.</string>
|
||||
<string name="new_channel_rcvd">Yeni Kanal Adresi(URL) alındı</string>
|
||||
<string name="do_you_want_switch">\'%s\' kanalına geçmek istiyor musunuz?</string>
|
||||
<string name="permission_missing">Meshtastic\'in konum iznine ihtiyacı var ve Bluetooth ile yeni cihazlar bulmak için konumun açık olması gerekiyor. Daha sonra isterseniz kapatabilirsiniz.</string>
|
||||
<string name="report_bug">Hata Bildir</string>
|
||||
<string name="report_a_bug">Hata Bildir</string>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Змінити канал</string>
|
||||
<string name="are_you_sure_channel">Ви впевнені, що хочете змінити канал? Усі зв’язки з іншими вузлами припиниться, доки ви не поділитеся новими налаштуваннями каналу.</string>
|
||||
<string name="new_channel_rcvd">Отримано URL-адресу нового каналу</string>
|
||||
<string name="do_you_want_switch">Ви хочете підключитися до \'%s\' каналу?</string>
|
||||
<string name="permission_missing">Meshtastic потрібний дозвіл до геоданих для пошуку нових пристроїв через Bluetooth. Ви можете вимкнути його пізніше.</string>
|
||||
<string name="report_bug">Повідомити про помилку</string>
|
||||
<string name="report_a_bug">Повідомити про помилку</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">切换频道</string>
|
||||
<string name="are_you_sure_channel">您确定要更改频道吗?在您分享新的频道设定之前,与其他节点的所有通讯都将停止。</string>
|
||||
<string name="new_channel_rcvd">收到新的频道 URL</string>
|
||||
<string name="do_you_want_switch">您要切换到 \'%s\' 频道吗?</string>
|
||||
<string name="permission_missing">Meshtastic 需要位置权限并启用位置信息才能通过蓝牙查找新设备。找到之后可以再关闭这权限。</string>
|
||||
<string name="report_bug">報告BUG</string>
|
||||
<string name="report_a_bug">回报问题</string>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">切換頻道</string>
|
||||
<string name="are_you_sure_channel">您確定要更改頻道嗎?在您分享新的頻道設定之前,與其他節點的所有通訊都將停止。</string>
|
||||
<string name="new_channel_rcvd">收到新的頻道 URL</string>
|
||||
<string name="do_you_want_switch">您要切換到 \'%s\' 頻道嗎?</string>
|
||||
<string name="permission_missing">Meshtastic 需要位置權限並啟用位置信息才能通過藍牙查找新設備。找到之後可以再關閉這權限。</string>
|
||||
<string name="report_bug">回報BUG</string>
|
||||
<string name="report_a_bug">回報問題</string>
|
||||
|
|
|
|||
|
|
@ -93,7 +93,6 @@
|
|||
<string name="change_channel">Change channel</string>
|
||||
<string name="are_you_sure_channel">Are you sure you want to change the channel? All communication with other nodes will stop until you share the new channel settings.</string>
|
||||
<string name="new_channel_rcvd">New Channel URL received</string>
|
||||
<string name="do_you_want_switch">Do you want to switch to the \'%s\' channel?</string>
|
||||
<string name="permission_missing">Meshtastic needs location permission and location must be turned on to find new devices via Bluetooth. You can turn it off again afterwards.</string>
|
||||
<string name="report_bug">Report Bug</string>
|
||||
<string name="report_a_bug">Report a bug</string>
|
||||
|
|
@ -251,10 +250,6 @@
|
|||
<string name="mute_8_hours">8 hours</string>
|
||||
<string name="mute_1_week">1 week</string>
|
||||
<string name="mute_always">Always</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Do you want to add a new channel?</item>
|
||||
<item quantity="other">Do you want to add %d new channels?</item>
|
||||
</plurals>
|
||||
<string name="replace">Replace</string>
|
||||
<string name="wifi_qr_code_scan">Scan WiFi QR code</string>
|
||||
<string name="wifi_qr_code_error">Invalid WiFi Credential QR code format</string>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue