Compare commits

...
20 Commits
Author SHA1 Message Date
darken 5860bbffb6 Release: 3.0.3-rc0 2025-10-29 15:52:54 +01:00
darken da53d68190 Update translations 2025-10-29 15:52:04 +01:00
darken b397bf190c Update translations 2025-10-29 15:52:04 +01:00
darken 15d664c361 feat: Make connectedDevices flow more robust
Adds retry and catch logic to handle failures gracefully.
2025-10-29 15:51:48 +01:00
darken d2f24d8b95 fix: Improve BluetoothManager stability
Enhances robustness by adding extensive error handling around broadcast receiver registration, profile event processing, and service disconnections to prevent crashes. Also ensures device flow is cleared when Bluetooth is disabled.
2025-10-29 15:51:48 +01:00
darken b5436659b6 refactor: Make connectedDevices a hot StateFlow
Convert `connectedDevices()` from a function returning a cold Flow to a property that is a hot `StateFlow`. This simplifies call sites and improves efficiency by sharing the underlying subscription.
2025-10-29 15:51:48 +01:00
darken 1cfc4611cb Improve Bluetooth device connection monitoring
Switched from monitoring generic ACL events to specific Headset profile state changes for more reliable device connection and disconnection detection.

This fixes a race condition where CAPod thinks no device is connected because we triggered too early, before "connectedDevices" on the HEADSET profile contains our target device.

This fixes #313
2025-10-29 15:14:45 +01:00
darken bda0a20743 Release: 3.0.2-rc0 2025-10-11 08:02:51 +02:00
darken 09bad90c0c feat: Add and update translations for Dutch and Mexican Spanish 2025-10-11 07:50:32 +02:00
darken 34856607f8 Fix crash on start due to R8
Closes #341
2025-10-11 07:45:42 +02:00
darken 5c2b66fe27 Release: 3.0.1-rc0 2025-10-10 08:35:19 +02:00
darken c9fe9a43e2 Update and extend translations
This commit updates translations for German, Spanish, and Catalan. It also adds a comprehensive set of new strings for the Chinese (Simplified) localization.
2025-10-10 08:34:29 +02:00
darken 395dbbb624 Feat: Update translations
Updates for Russian, Polish, Catalan, Spanish, and Czech.
2025-10-09 12:24:14 +02:00
darken fdc6486102 Feat: Update translations
Updates for Russian, Polish, Catalan, Spanish, and Czech.
2025-10-09 12:24:14 +02:00
darken 6c379451c0 Add ear detection limitation notice to reactions settings
Explains that single-pod detection is an Apple limitation, not an app bug.
Users experiencing this issue will now understand it only affects the
"primary pod" (microphone pod) and can be configured in iOS settings.

Closes #38, Closes #329
2025-10-08 15:37:14 +02:00
darken 221f3ccbed Refactor: Convert build configuration to Gradle plugin pattern
- Migrate ProjectConfig from static object to proper Gradle plugin
- Add version type support (beta/rc) to version.properties
- Clean up legacy fastlane changelogs
- Update release script to support version types
- Remove automatic fastlane changelog generation from release script
- Add BuildConfig field injection for version info
2025-10-07 13:54:24 +02:00
darken 12f0662146 Release: 3.0.0-beta1 2025-10-07 12:44:45 +02:00
darken 7cc81bd554 Chore: Update release tooling
Update Fastlane and simplify GitHub release workflow.
2025-10-07 12:43:50 +02:00
darken 618fddb698 Update translations 2025-10-07 12:43:33 +02:00
darken 0f74cb9b39 Refactor: Use plurals for unmatched devices count. 2025-10-07 12:43:33 +02:00
87 changed files with 1041 additions and 342 deletions
+1 -2
View File
@@ -65,8 +65,7 @@ jobs:
tag_name: ${{ steps.tagger.outputs.tag }} tag_name: ${{ steps.tagger.outputs.tag }}
name: ${{ steps.tagger.outputs.tag }} name: ${{ steps.tagger.outputs.tag }}
generate_release_notes: true generate_release_notes: true
files: | files: app/build/outputs/apk/foss/beta/*.apk
app/build/outputs/apk/foss/beta/*.apk
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+1 -1
View File
@@ -1 +1 @@
3.0.0-beta0 30000000 3.0.3-rc0 30003000
+14 -9
View File
@@ -1,4 +1,5 @@
plugins { plugins {
id("projectConfig")
id("com.android.application") id("com.android.application")
id("kotlin-android") id("kotlin-android")
id("com.google.devtools.ksp") id("com.google.devtools.ksp")
@@ -9,28 +10,32 @@ apply(plugin = "dagger.hilt.android.plugin")
apply(plugin = "androidx.navigation.safeargs.kotlin") apply(plugin = "androidx.navigation.safeargs.kotlin")
android { android {
compileSdk = ProjectConfig.compileSdk compileSdk = projectConfig.compileSdk
namespace = ProjectConfig.packageName
defaultConfig { defaultConfig {
applicationId = ProjectConfig.packageName namespace = projectConfig.packageName
minSdk = ProjectConfig.minSdk minSdk = projectConfig.minSdk
targetSdk = ProjectConfig.targetSdk targetSdk = projectConfig.targetSdk
versionCode = ProjectConfig.Version.code + 0 // Base app versionCode = projectConfig.version.code.toInt()
versionName = ProjectConfig.Version.name versionName = projectConfig.version.name
testInstrumentationRunner = "eu.darken.capod.HiltTestRunner" testInstrumentationRunner = "eu.darken.capod.HiltTestRunner"
buildConfigField("String", "PACKAGENAME", "\"${projectConfig.packageName}\"")
buildConfigField("String", "VERSION_CODE", "\"${projectConfig.version.code}\"")
buildConfigField("String", "VERSION_NAME", "\"${projectConfig.version.name}\"")
} }
// Enable automatic per-app language preferences generation // Enable automatic per-app language preferences generation
androidResources { androidResources {
@Suppress("UnstableApiUsage")
generateLocaleConfig = true generateLocaleConfig = true
} }
signingConfigs { signingConfigs {
val basePath = File(System.getProperty("user.home"), ".appconfig/${ProjectConfig.packageName}") val basePath = File(System.getProperty("user.home"), ".appconfig/${projectConfig.packageName}")
create("releaseFoss") { create("releaseFoss") {
setupCredentials(File(basePath, "signing-foss.properties")) setupCredentials(File(basePath, "signing-foss.properties"))
} }
@@ -94,7 +99,7 @@ android {
val variantName: String = variantOutputImpl.name val variantName: String = variantOutputImpl.name
if (listOf("release", "beta").any { variantName.lowercase().contains(it) }) { if (listOf("release", "beta").any { variantName.lowercase().contains(it) }) {
val outputFileName = ProjectConfig.packageName + val outputFileName = projectConfig.packageName +
"-v${defaultConfig.versionName}-${defaultConfig.versionCode}" + "-v${defaultConfig.versionName}-${defaultConfig.versionCode}" +
"-${variantName.uppercase()}.apk" "-${variantName.uppercase()}.apk"
+1 -22
View File
@@ -1,23 +1,2 @@
# Add project specific ProGuard rules here. -keep class eu.darken.capod.BuildConfig { *; }
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-dontobfuscate -dontobfuscate
@@ -5,4 +5,5 @@
<string name="upgrades_gplay_billing_error_label">Error en la Google Play</string> <string name="upgrades_gplay_billing_error_label">Error en la Google Play</string>
<string name="upgrades_gplay_billing_error_description">Se ha producido un error en la Google Play. Vuelve a intentarlo más tarde o reinicia tu teléfono.\n\nError: %s</string> <string name="upgrades_gplay_billing_error_description">Se ha producido un error en la Google Play. Vuelve a intentarlo más tarde o reinicia tu teléfono.\n\nError: %s</string>
<string name="upgrades_gplay_billing_result_error_label">Error en el cobro en la Google Play</string> <string name="upgrades_gplay_billing_result_error_label">Error en el cobro en la Google Play</string>
<string name="upgrades_gplay_billing_result_error_description">Se ha producido un error al solicitar a Google Play los detalles de tu compra. Borra la caché de Google Play y reinicia tu teléfono.\n\nError %s</string>
</resources> </resources>
@@ -5,4 +5,5 @@
<string name="upgrades_gplay_billing_error_label">Error en la Google Play</string> <string name="upgrades_gplay_billing_error_label">Error en la Google Play</string>
<string name="upgrades_gplay_billing_error_description">Se ha producido un error en la Google Play. Vuelve a intentarlo más tarde o reinicia tu teléfono.\n\nError: %s</string> <string name="upgrades_gplay_billing_error_description">Se ha producido un error en la Google Play. Vuelve a intentarlo más tarde o reinicia tu teléfono.\n\nError: %s</string>
<string name="upgrades_gplay_billing_result_error_label">Error en el cobro en la Google Play</string> <string name="upgrades_gplay_billing_result_error_label">Error en el cobro en la Google Play</string>
<string name="upgrades_gplay_billing_result_error_description">Se ha producido un error al solicitar a Google Play los detalles de tu compra. Borra la caché de Google Play y reinicia tu teléfono.\n\nError %s</string>
</resources> </resources>
+1
View File
@@ -5,4 +5,5 @@
<string name="upgrades_gplay_billing_error_label">Error en la Google Play</string> <string name="upgrades_gplay_billing_error_label">Error en la Google Play</string>
<string name="upgrades_gplay_billing_error_description">Se ha producido un error en la Google Play. Vuelve a intentarlo más tarde o reinicia tu teléfono.\n\nError: %s</string> <string name="upgrades_gplay_billing_error_description">Se ha producido un error en la Google Play. Vuelve a intentarlo más tarde o reinicia tu teléfono.\n\nError: %s</string>
<string name="upgrades_gplay_billing_result_error_label">Error en el cobro en la Google Play</string> <string name="upgrades_gplay_billing_result_error_label">Error en el cobro en la Google Play</string>
<string name="upgrades_gplay_billing_result_error_description">Se ha producido un error al solicitar a Google Play los detalles de tu compra. Borra la caché de Google Play y reinicia tu teléfono.\n\nError %s</string>
</resources> </resources>
+1
View File
@@ -2,4 +2,5 @@
<resources> <resources>
<string name="upgrades_gplay_unavailable_error">Služby Google Play nie sú k dispozícii.</string> <string name="upgrades_gplay_unavailable_error">Služby Google Play nie sú k dispozícii.</string>
<string name="upgrades_no_purchases_found_check_account">Nenašli sa žiadne nákupy. Používate správny účet?</string> <string name="upgrades_no_purchases_found_check_account">Nenašli sa žiadne nákupy. Používate správny účet?</string>
<string name="upgrades_gplay_billing_error_label">Chyba Google Play</string>
</resources> </resources>
@@ -2,4 +2,8 @@
<resources> <resources>
<string name="upgrades_gplay_unavailable_error">Google Play 服務無法使用。</string> <string name="upgrades_gplay_unavailable_error">Google Play 服務無法使用。</string>
<string name="upgrades_no_purchases_found_check_account">未找到訂單,確定帳戶無誤?</string> <string name="upgrades_no_purchases_found_check_account">未找到訂單,確定帳戶無誤?</string>
<string name="upgrades_gplay_billing_error_label">Google Play 錯誤</string>
<string name="upgrades_gplay_billing_error_description">Google Play 發生錯誤。請稍後再試或重新啟動手機。\n\n錯誤:%s</string>
<string name="upgrades_gplay_billing_result_error_label">Google Play 結帳錯誤</string>
<string name="upgrades_gplay_billing_result_error_description">向 Google Play 請求購買明細時發生錯誤。請清除 Google Play 快取並重新啟動手機。\n\n錯誤:%s</string>
</resources> </resources>
@@ -1,20 +1,22 @@
package eu.darken.capod.common package eu.darken.capod.common
import eu.darken.capod.BuildConfig import android.util.Log
import androidx.annotation.Keep
import java.lang.reflect.Field
// Can't be const because that prevents them from being mocked in tests @Keep
@Suppress("MayBeConstant")
object BuildConfigWrap { object BuildConfigWrap {
val DEBUG: Boolean = BuildConfig.DEBUG val APPLICATION_ID = getBuildConfigValue("PACKAGENAME") as String
val DEBUG: Boolean = getBuildConfigValue("DEBUG") as Boolean
val BUILD_TYPE: BuildType = when (val typ = BuildConfig.BUILD_TYPE) { val BUILD_TYPE: BuildType = when (val typ = getBuildConfigValue("BUILD_TYPE") as String) {
"debug" -> BuildType.DEV "debug" -> BuildType.DEV
"beta" -> BuildType.BETA "beta" -> BuildType.BETA
"release" -> BuildType.RELEASE "release" -> BuildType.RELEASE
else -> throw IllegalArgumentException("Unknown buildtype: $typ") else -> throw IllegalArgumentException("Unknown buildtype: $typ")
} }
@Keep
enum class BuildType { enum class BuildType {
DEV, DEV,
BETA, BETA,
@@ -22,24 +24,36 @@ object BuildConfigWrap {
; ;
} }
val FLAVOR: Flavor = when (val flav = BuildConfig.FLAVOR) { val FLAVOR: Flavor = when (val flav = getBuildConfigValue("FLAVOR") as String?) {
"gplay" -> Flavor.GPLAY "gplay" -> Flavor.GPLAY
"foss" -> Flavor.FOSS "foss" -> Flavor.FOSS
null -> Flavor.NONE
else -> throw IllegalStateException("Unknown flavor: $flav") else -> throw IllegalStateException("Unknown flavor: $flav")
} }
enum class Flavor { enum class Flavor {
GPLAY, GPLAY,
FOSS, FOSS,
NONE,
; ;
} }
val APPLICATION_ID: String = BuildConfig.APPLICATION_ID val VERSION_CODE: Long = (getBuildConfigValue("VERSION_CODE") as String).toLong()
val VERSION_NAME: String = getBuildConfigValue("VERSION_NAME") as String
val VERSION_CODE: Long = BuildConfig.VERSION_CODE.toLong() val VERSION_DESCRIPTION: String = "v$VERSION_NAME ($VERSION_CODE) ~ $FLAVOR/$BUILD_TYPE"
val VERSION_NAME: String = BuildConfig.VERSION_NAME val VERSION_DESCRIPTION_SHORT: String = "v$VERSION_NAME ~ $FLAVOR"
val VERSION_DESCRIPTION_LONG: String = "v$VERSION_NAME ($VERSION_CODE) ${FLAVOR}_$BUILD_TYPE"
val VERSION_DESCRIPTION_SHORT: String = "v$VERSION_NAME $FLAVOR"
val VERSION_DESCRIPTION_TINY: String = "v$VERSION_NAME" val VERSION_DESCRIPTION_TINY: String = "v$VERSION_NAME"
private fun getBuildConfigValue(fieldName: String): Any? = try {
val c = Class.forName("eu.darken.capod.BuildConfig")
val f: Field = c.getField(fieldName).apply {
isAccessible = true
}
f.get(null)
} catch (e: Exception) {
e.printStackTrace()
Log.e("getBuildConfigValue", "fieldName: $fieldName")
null
}
} }
@@ -12,8 +12,8 @@ import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.os.Handler import android.os.Handler
import android.os.HandlerThread import android.os.HandlerThread
import android.os.ParcelUuid
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import eu.darken.capod.common.coroutine.AppScope
import eu.darken.capod.common.coroutine.DispatcherProvider import eu.darken.capod.common.coroutine.DispatcherProvider
import eu.darken.capod.common.debug.Bugs import eu.darken.capod.common.debug.Bugs
import eu.darken.capod.common.debug.logging.Logging.Priority.ERROR import eu.darken.capod.common.debug.logging.Logging.Priority.ERROR
@@ -21,27 +21,38 @@ import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE
import eu.darken.capod.common.debug.logging.Logging.Priority.WARN import eu.darken.capod.common.debug.logging.Logging.Priority.WARN
import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.debug.logging.log
import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.common.debug.logging.logTag
import eu.darken.capod.common.flow.setupCommonEventHandlers
import eu.darken.capod.pods.core.apple.protocol.ContinuityProtocol import eu.darken.capod.pods.core.apple.protocol.ContinuityProtocol
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.retryWhen
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.plus
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import java.io.IOException
import java.time.Instant import java.time.Instant
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
@Singleton @Singleton
class BluetoothManager2 @Inject constructor( class BluetoothManager2 @Inject constructor(
private val manager: BluetoothManager, @AppScope private val appScope: CoroutineScope,
@ApplicationContext private val context: Context,
private val dispatcherProvider: DispatcherProvider, private val dispatcherProvider: DispatcherProvider,
@ApplicationContext private val context: Context,
private val manager: BluetoothManager,
) { ) {
val adapter: BluetoothAdapter? val adapter: BluetoothAdapter?
@@ -89,7 +100,7 @@ class BluetoothManager2 @Inject constructor(
override fun onServiceDisconnected(profile: Int) { override fun onServiceDisconnected(profile: Int) {
log(TAG, WARN) { "onServiceDisconnected(profile=$profile)" } log(TAG, WARN) { "onServiceDisconnected(profile=$profile)" }
close(IOException("BluetoothProfile service disconnected (profile=$profile)")) close() // Close gracefully without exception to prevent crash
} }
}, profile) }, profile)
@@ -103,59 +114,117 @@ class BluetoothManager2 @Inject constructor(
} }
private fun monitorDevicesForProfile( private fun monitorProfile(
profile: Int = BluetoothProfile.HEADSET profile: Int = BluetoothProfile.HEADSET
): Flow<Set<BluetoothDevice>> = getBluetoothProfile(profile).flatMapLatest { bluetoothProfile -> ): Flow<Set<BluetoothDevice>> = getBluetoothProfile(profile).flatMapLatest { bluetoothProfile ->
callbackFlow { callbackFlow {
log(TAG, VERBOSE) { "connectedDevices(profile=$profile) starting" } log(TAG, VERBOSE) { "monitorProfile(): for profile=$profile starting" }
trySend(bluetoothProfile.connectedDevices)
try {
trySend(bluetoothProfile.connectedDevices)
} catch (e: Exception) {
log(TAG, ERROR) { "monitorProfile(): Error querying initial connected devices: $e" }
close(e)
return@callbackFlow
}
val filter = IntentFilter().apply { val filter = IntentFilter().apply {
addAction(BluetoothDevice.ACTION_ACL_CONNECTED) addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED)
addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED)
} }
val handlerThread = HandlerThread("BluetoothEventReceiver").apply { val handlerThread = HandlerThread("BluetoothEventReceiver").apply { start() }
start()
}
val handler = Handler(handlerThread.looper) val handler = Handler(handlerThread.looper)
val receiver: BroadcastReceiver = object : BroadcastReceiver() { val receiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
log(TAG, VERBOSE) { "Bluetooth event (intent=$intent, extras=${intent.extras})" } log(TAG, VERBOSE) { "monitorProfile(): Bluetooth event (intent=$intent, extras=${intent.extras})" }
val action = intent.action
if (action == null) { if (intent.action == null) {
log(TAG, ERROR) { "Bluetooth event without action, how did we get this?" } log(TAG, ERROR) { "monitorProfile(): Bluetooth event without action?" }
return return
} }
val device = intent.getParcelableExtra<BluetoothDevice?>(BluetoothDevice.EXTRA_DEVICE) val device = intent.getParcelableExtra<BluetoothDevice?>(BluetoothDevice.EXTRA_DEVICE)
if (device == null) { if (device == null) {
log(TAG, ERROR) { "Connection event is missing EXTRA_DEVICE: ${intent.extras}" } log(TAG, ERROR) { "monitorProfile(): Event is missing EXTRA_DEVICE" }
return return
} }
this@callbackFlow.launch { this@callbackFlow.launch {
val currentDevices = bluetoothProfile.connectedDevices if (intent.action != BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED) {
log(TAG, WARN) { "Unknown action: ${intent.action}" }
return@launch
}
when (action) { // Profile connection changed - query actual state from proxy
BluetoothDevice.ACTION_ACL_CONNECTED -> { val statePrevious = intent.getIntExtra(BluetoothProfile.EXTRA_PREVIOUS_STATE, -1)
log(TAG) { "Adding $device to current devices $currentDevices" } log(TAG) { "monitorProfile(): HEADSET profile state changed for $device - previous: $statePrevious" }
trySend(currentDevices.plus(device))
val stateNow = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1)
log(TAG) { "monitorProfile(): HEADSET profile state changed for $device - now: $stateNow" }
val currentDevices = try {
bluetoothProfile.connectedDevices
} catch (e: Exception) {
log(TAG, ERROR) { "monitorProfile(): Error handling profile event: $e" }
// Log but continue - don't kill the whole Flow for one bad event
emptySet()
}.toMutableSet()
log(TAG) { "monitorProfile(): currentDevices: $currentDevices" }
when (stateNow) {
BluetoothProfile.STATE_CONNECTING -> {
log(TAG) { "monitorProfile(): Currently connecting $device" }
} }
BluetoothDevice.ACTION_ACL_DISCONNECTED -> { BluetoothProfile.STATE_CONNECTED -> {
log(TAG) { "Removing $device from current devices $currentDevices" } log(TAG) { "monitorProfile(): Device has connected $device" }
trySend(currentDevices.minus(device)) if (!currentDevices.contains(device)) {
log(
TAG,
VERBOSE
) { "monitorProfile(): $device not in proxy yet, adding manually" }
currentDevices.add(device)
}
trySend(currentDevices)
}
BluetoothProfile.STATE_DISCONNECTING -> {
log(TAG) { "monitorProfile(): Currently DISconnecting $device" }
}
BluetoothProfile.STATE_DISCONNECTED -> {
log(TAG) { "monitorProfile(): Device has disconnected $device" }
if (currentDevices.contains(device)) {
log(
TAG,
VERBOSE
) { "monitorProfile(): $device still in proxy, removing manually" }
currentDevices.remove(device)
}
trySend(currentDevices)
} }
} }
} }
} }
} }
context.registerReceiver(receiver, filter, null, handler)
try {
context.registerReceiver(receiver, filter, null, handler)
} catch (e: Exception) {
log(TAG, ERROR) { "monitorProfile(): Failed to register receiver: $e" }
close(e)
return@callbackFlow
}
awaitClose { awaitClose {
log(TAG, VERBOSE) { "connectedDevices(profile=$profile) closed." } log(TAG, VERBOSE) { "monitorProfile(): profile=$profile closed." }
context.unregisterReceiver(receiver) try {
context.unregisterReceiver(receiver)
} catch (e: Exception) {
log(TAG, ERROR) { "monitorProfile(): Error unregistering receiver: $e" }
} finally {
handlerThread.quitSafely()
}
} }
} }
} }
@@ -163,10 +232,11 @@ class BluetoothManager2 @Inject constructor(
private val seenDevicesLock = Mutex() private val seenDevicesLock = Mutex()
private val seenDevicesCache = mutableMapOf<String, Instant>() private val seenDevicesCache = mutableMapOf<String, Instant>()
fun connectedDevices( val connectedDevices: Flow<List<BluetoothDevice2>> = isBluetoothEnabled
featureFilter: Set<ParcelUuid> = ContinuityProtocol.BLE_FEATURE_UUIDS .flatMapLatest { enabled ->
): Flow<List<BluetoothDevice2>> = isBluetoothEnabled if (enabled) monitorProfile(BluetoothProfile.HEADSET)
.flatMapLatest { monitorDevicesForProfile(BluetoothProfile.HEADSET) } else flowOf(emptySet()) // Return empty when Bluetooth is off
}
.map { devices -> .map { devices ->
val currentAddresses = devices.map { it.address } val currentAddresses = devices.map { it.address }
@@ -177,7 +247,9 @@ class BluetoothManager2 @Inject constructor(
} }
devices devices
.filter { device -> featureFilter.any { feature -> device.hasFeature(feature) } } .filter { device ->
ContinuityProtocol.BLE_FEATURE_UUIDS.any { feature -> device.hasFeature(feature) }
}
.map { device -> .map { device ->
BluetoothDevice2( BluetoothDevice2(
internal = device, internal = device,
@@ -189,6 +261,30 @@ class BluetoothManager2 @Inject constructor(
) )
} }
} }
.retryWhen { cause, attempt ->
log(TAG, WARN) { "connectedDevices Flow failed (attempt ${attempt + 1}): $cause" }
if (attempt < 3) {
delay(1000 * (attempt + 1)) // 1s, 2s, 3s exponential backoff
true // Retry
} else {
false // Give up after 3 attempts
}
}
.catch { e ->
log(TAG, ERROR) { "connectedDevices Flow failed after retries: $e" }
emit(emptyList()) // Emit empty list and complete gracefully
}
.distinctUntilChanged()
.setupCommonEventHandlers(TAG) { "connectedDevices" }
.stateIn(
scope = appScope + dispatcherProvider.IO,
started = SharingStarted.WhileSubscribed(
stopTimeoutMillis = 5_000L,
replayExpirationMillis = 0L,
),
initialValue = null
)
.filterNotNull()
fun bondedDevices(): Flow<Set<BluetoothDevice2>> = flow { fun bondedDevices(): Flow<Set<BluetoothDevice2>> = flow {
val rawDevices = adapter?.bondedDevices ?: throw IllegalStateException("Bluetooth adapter unavailable") val rawDevices = adapter?.bondedDevices ?: throw IllegalStateException("Bluetooth adapter unavailable")
@@ -59,7 +59,7 @@ class RecorderModule @Inject constructor(
triggerFile.createNewFile() triggerFile.createNewFile()
log(TAG, INFO) { "Build.Fingerprint: ${Build.FINGERPRINT}" } log(TAG, INFO) { "Build.Fingerprint: ${Build.FINGERPRINT}" }
log(TAG, INFO) { "BuildConfig.Versions: ${BuildConfigWrap.VERSION_DESCRIPTION_LONG}" } log(TAG, INFO) { "BuildConfig.Versions: ${BuildConfigWrap.VERSION_DESCRIPTION}" }
copy( copy(
recorder = newRecorder recorder = newRecorder
@@ -74,7 +74,7 @@ class RecorderActivityVM @Inject constructor(
} }
fun share() = launch { fun share() = launch {
val (path, size) = resultCacheCompressedObs.first() val (path, _) = resultCacheCompressedObs.first()
val intent = Intent(Intent.ACTION_SEND).apply { val intent = Intent(Intent.ACTION_SEND).apply {
val uri = FileProvider.getUriForFile( val uri = FileProvider.getUriForFile(
@@ -89,7 +89,7 @@ class RecorderActivityVM @Inject constructor(
type = "application/zip" type = "application/zip"
addCategory(Intent.CATEGORY_DEFAULT) addCategory(Intent.CATEGORY_DEFAULT)
putExtra(Intent.EXTRA_SUBJECT, "CAPod DebugLog - ${BuildConfigWrap.VERSION_DESCRIPTION_LONG})") putExtra(Intent.EXTRA_SUBJECT, "CAPod DebugLog - ${BuildConfigWrap.VERSION_DESCRIPTION})")
putExtra(Intent.EXTRA_TEXT, "Your text here.") putExtra(Intent.EXTRA_TEXT, "Your text here.")
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
} }
@@ -90,7 +90,7 @@ class OverviewFragmentVM @Inject constructor(
val shouldStartMonitor = when (generalSettings.monitorMode.value) { val shouldStartMonitor = when (generalSettings.monitorMode.value) {
MonitorMode.MANUAL -> false MonitorMode.MANUAL -> false
MonitorMode.AUTOMATIC -> bluetoothManager.connectedDevices().first().isNotEmpty() MonitorMode.AUTOMATIC -> bluetoothManager.connectedDevices.first().isNotEmpty()
MonitorMode.ALWAYS -> true MonitorMode.ALWAYS -> true
} }
if (shouldStartMonitor) { if (shouldStartMonitor) {
@@ -21,19 +21,15 @@ class UnmatchedDevicesCardVH(parent: ViewGroup) :
item: Item, item: Item,
payloads: List<Any> payloads: List<Any>
) -> Unit = binding(payload = true) { item -> ) -> Unit = binding(payload = true) { item ->
val countText = when (item.count) { unmatchedCount.text = getQuantityString(R.plurals.overview_unmatched_devices_count, item.count, item.count)
1 -> context.getString(R.string.overview_unmatched_devices_count_single)
else -> context.getString(R.string.overview_unmatched_devices_count_plural, item.count)
}
unmatchedCount.text = countText
val toggleText = if (item.isExpanded) { val toggleText = if (item.isExpanded) {
context.getString(R.string.general_hide_action) context.getString(R.string.general_hide_action)
} else { } else {
context.getString(R.string.general_show_action) context.getString(R.string.general_show_action)
} }
toggleAction.text = toggleText toggleAction.text = toggleText
toggleAction.setOnClickListener { item.onToggle() } toggleAction.setOnClickListener { item.onToggle() }
} }
@@ -40,7 +40,7 @@ class SettingsIndexFragment : PreferenceFragment2() {
} }
override fun onPreferencesCreated() { override fun onPreferencesCreated() {
findPreference<Preference>("core.changelog")!!.summary = BuildConfigWrap.VERSION_DESCRIPTION_LONG findPreference<Preference>("core.changelog")!!.summary = BuildConfigWrap.VERSION_DESCRIPTION
findPreference<Preference>("core.privacy")!!.setOnPreferenceClickListener { findPreference<Preference>("core.privacy")!!.setOnPreferenceClickListener {
webpageTool.open(PrivacyPolicy.URL) webpageTool.open(PrivacyPolicy.URL)
true true
@@ -148,7 +148,7 @@ class MonitorWorker @AssistedInject constructor(
combine( combine(
generalSettings.monitorMode.flow, generalSettings.monitorMode.flow,
profilesRepo.profiles, profilesRepo.profiles,
bluetoothManager.connectedDevices(), bluetoothManager.connectedDevices,
) { monitorMode, profiles, connectedDevices -> ) { monitorMode, profiles, connectedDevices ->
listOf(monitorMode, profiles, connectedDevices) listOf(monitorMode, profiles, connectedDevices)
} }
@@ -16,7 +16,6 @@ import eu.darken.capod.profiles.core.DeviceProfilesRepo
import eu.darken.capod.reaction.core.ReactionSettings import eu.darken.capod.reaction.core.ReactionSettings
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.distinctUntilChangedBy import kotlinx.coroutines.flow.distinctUntilChangedBy
import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.filterNotNull
@@ -39,7 +38,7 @@ class AutoConnect @Inject constructor(
.flatMapLatest { isAutoConnectEnabled -> .flatMapLatest { isAutoConnectEnabled ->
if (isAutoConnectEnabled) { if (isAutoConnectEnabled) {
combine( combine(
bluetoothManager.connectedDevices().distinctUntilChanged(), bluetoothManager.connectedDevices,
podMonitor.primaryDevice().filterNotNull().distinctUntilChangedBy { it.rawDataHex }, podMonitor.primaryDevice().filterNotNull().distinctUntilChangedBy { it.rawDataHex },
) { connectedDevices, mainDevice -> ) { connectedDevices, mainDevice ->
connectedDevices to mainDevice connectedDevices to mainDevice
@@ -35,7 +35,7 @@ class PlayPause @Inject constructor(
reactionSettings.autoPause.flow, reactionSettings.autoPause.flow,
reactionSettings.onePodMode.flow, reactionSettings.onePodMode.flow,
) { play, pause, _ -> play || pause } ) { play, pause, _ -> play || pause }
.flatMapLatest { if (it) bluetoothManager.connectedDevices() else emptyFlow() } .flatMapLatest { if (it) bluetoothManager.connectedDevices else emptyFlow() }
.flatMapLatest { .flatMapLatest {
if (it.isEmpty()) { if (it.isEmpty()) {
log(TAG) { "No known devices connected." } log(TAG) { "No known devices connected." }
@@ -16,7 +16,6 @@ import eu.darken.capod.pods.core.apple.DualApplePods
import eu.darken.capod.reaction.core.ReactionSettings import eu.darken.capod.reaction.core.ReactionSettings
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.distinctUntilChangedBy import kotlinx.coroutines.flow.distinctUntilChangedBy
import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flatMapLatest
@@ -116,7 +115,7 @@ class PopUpReaction @Inject constructor(
if (!isEnabled) return@flatMapLatest emptyFlow() if (!isEnabled) return@flatMapLatest emptyFlow()
combine( combine(
bluetoothManager.connectedDevices().distinctUntilChanged(), bluetoothManager.connectedDevices,
podMonitor.primaryDevice().distinctUntilChangedBy { it?.rawDataHex }, podMonitor.primaryDevice().distinctUntilChangedBy { it?.rawDataHex },
) { devices, broadcast -> ) { devices, broadcast ->
log(TAG) { "$broadcast $devices " } log(TAG) { "$broadcast $devices " }
+14 -4
View File
@@ -23,11 +23,13 @@
<string name="settings_keep_notification_after_disconnect_label">Mantén les notificacions després de la desconnexió</string> <string name="settings_keep_notification_after_disconnect_label">Mantén les notificacions després de la desconnexió</string>
<string name="settings_keep_notification_after_disconnect_description">Continua mostrant els últims nivells de bateria coneguts fins i tot després que els AirPods es desconnectin</string> <string name="settings_keep_notification_after_disconnect_description">Continua mostrant els últims nivells de bateria coneguts fins i tot després que els AirPods es desconnectin</string>
<string name="settings_scanner_mode_label">Mode escàner</string> <string name="settings_scanner_mode_label">Mode escàner</string>
<string name="settings_scanner_mode_description">L\'escàner de dades Bluetooth Low Energy hauria de prioritzar el rendiment o estalviar energia?</string> <string name="settings_scanner_mode_description">L\'escàner de dades Bluetooth de baix consum hauria de prioritzar el rendiment o estalviar energia?</string>
<string name="settings_autopause_label">Pausa automàtica</string> <string name="settings_autopause_label">Pausa automàtica</string>
<string name="settings_autopause_description">Pausa l\'àudio quan ús tragueu el dispositiu de l\'orella.</string> <string name="settings_autopause_description">Pausa l\'àudio quan ús tragueu el dispositiu de l\'orella.</string>
<string name="settings_autopplay_label">Reproducció automàtica</string> <string name="settings_autopplay_label">Reproducció automàtica</string>
<string name="settings_autoplay_description">Inicia la reproducció d\'àudio en utilitzar el dispositiu.</string> <string name="settings_autoplay_description">Inicia la reproducció d\'àudio en utilitzar el dispositiu.</string>
<string name="settings_eardetection_info_label">Nota de detecció de l\'oïda</string>
<string name="settings_eardetection_info_description">Si la detecció de l\'oïda només funciona per a un auricular, això és degut a una limitació d\'Apple. Només es detecta «l\'auricular principal» (utilitzat per al micròfon). Configureu-ho en dispositius Apple: Configuració → Bluetooth → AirPods → Micròfon.</string>
<string name="settings_fake_data_label">Dades falses</string> <string name="settings_fake_data_label">Dades falses</string>
<string name="settings_fake_data_description">Mostra dades falses. Per exemple: simula dispositius que no existeixen.</string> <string name="settings_fake_data_description">Mostra dades falses. Per exemple: simula dispositius que no existeixen.</string>
<string name="settings_debug_label">Configuració de depuració</string> <string name="settings_debug_label">Configuració de depuració</string>
@@ -49,8 +51,8 @@
<string name="settings_compat_offloaded_filtering_disabled_summary">No delegueu el filtratge de dades al sistema, obtingueu totes les dades i filtreu-les dins de l\'aplicació.</string> <string name="settings_compat_offloaded_filtering_disabled_summary">No delegueu el filtratge de dades al sistema, obtingueu totes les dades i filtreu-les dins de l\'aplicació.</string>
<string name="settings_compat_offloaded_batching_disabled_title">Desactiva el processament per lots de maquinari</string> <string name="settings_compat_offloaded_batching_disabled_title">Desactiva el processament per lots de maquinari</string>
<string name="settings_compat_offloaded_batching_disabled_summary">No deixeu que el grup del sistema reculli dades BLE abans de reenviar-nos-les.</string> <string name="settings_compat_offloaded_batching_disabled_summary">No deixeu que el grup del sistema reculli dades BLE abans de reenviar-nos-les.</string>
<string name="settings_onepod_mode_label">Mode d\'un AirPod</string> <string name="settings_onepod_mode_label">Mode d\'un auricular</string>
<string name="settings_onepod_mode_description">No cal portar els dos AirdPods, per provocar reaccions només cal portar-ne un.</string> <string name="settings_onepod_mode_description">No cal portar els dos auriculars, només cal portar-ne un per activar les reaccions.</string>
<string name="settings_popup_caseopen_label">Mostra la finestra emergent de la funda</string> <string name="settings_popup_caseopen_label">Mostra la finestra emergent de la funda</string>
<string name="settings_popup_caseopen_description">Mostra una finestra emergent quan s\'obre la funda del dispositiu (experimental).</string> <string name="settings_popup_caseopen_description">Mostra una finestra emergent quan s\'obre la funda del dispositiu (experimental).</string>
<string name="settings_popup_connected_label">Mostra la finestra emergent de connexió</string> <string name="settings_popup_connected_label">Mostra la finestra emergent de connexió</string>
@@ -98,6 +100,10 @@
<string name="translators_thanks_title">Traductors</string> <string name="translators_thanks_title">Traductors</string>
<string name="translators_thanks_description">Jaime Muñoz(jmmartin_5@outlook.com)</string> <string name="translators_thanks_description">Jaime Muñoz(jmmartin_5@outlook.com)</string>
<string name="widget_description">Un giny que mostra l\'estat de l\'últim dispositiu conegut.</string> <string name="widget_description">Un giny que mostra l\'estat de l\'últim dispositiu conegut.</string>
<string name="widget_configuration_title">Seleccioneu un dispositiu</string>
<string name="widget_configuration_description">Trieu quin perfil de dispositiu ha de mostrar aquest giny.</string>
<string name="common_feature_requires_pro_msg">Aquesta funció requereix el CAPod Pro.</string>
<string name="widget_no_data_label">Sense dades</string>
<string name="settings_compat_indirectcallback_title">Lliurament indirecte de dades</string> <string name="settings_compat_indirectcallback_title">Lliurament indirecte de dades</string>
<string name="settings_compat_indirectcallback_summary">Utilitza un mètode alternatiu per rebre dades BLE del sistema (emissió en lloc de devolució de trucada).</string> <string name="settings_compat_indirectcallback_summary">Utilitza un mètode alternatiu per rebre dades BLE del sistema (emissió en lloc de devolució de trucada).</string>
<string name="troubleshooter_title">Solucionador de problemes</string> <string name="troubleshooter_title">Solucionador de problemes</string>
@@ -111,7 +117,7 @@
<string name="troubleshooter_ble_result_success_body">El CAPod està rebent emissions d\'anuncis BLE.</string> <string name="troubleshooter_ble_result_success_body">El CAPod està rebent emissions d\'anuncis BLE.</string>
<string name="troubleshooter_ble_result_failure_title">Incorrecte</string> <string name="troubleshooter_ble_result_failure_title">Incorrecte</string>
<string name="troubleshooter_ble_result_failure_body">La resolució de problemes ha fallat. No ha funcionat cap combinació d\'opcions de compatibilitat.</string> <string name="troubleshooter_ble_result_failure_body">La resolució de problemes ha fallat. No ha funcionat cap combinació d\'opcions de compatibilitat.</string>
<string name="troubleshooter_ble_result_failure_phone_body">El vostres telèfon no ha rebut cap dada BLE. Podeu tornar a provar aquesta prova en una zona plena de gent per veure si es poden rebre fonts de dades (que no siguin els vostres auriculars). No rebre dades indica un problema amb el sistema operatiu del telèfon.</string> <string name="troubleshooter_ble_result_failure_phone_body">El vostre telèfon no ha rebut cap dada BLE. Podeu tornar a executar aquesta prova en una zona plena de gent per veure si es poden rebre fonts de dades (que no siguin els vostres auriculars). No rebre dades indica un problema amb el sistema operatiu del telèfon.</string>
<string name="troubleshooter_ble_result_failure_phone_headphones">El vostre telèfon ha rebut dades BLE, però les dades no provenen de cap dispositiu compatible. Teniu els auriculars encesos? El CAPod és compatible amb els vostres auriculars?</string> <string name="troubleshooter_ble_result_failure_phone_headphones">El vostre telèfon ha rebut dades BLE, però les dades no provenen de cap dispositiu compatible. Teniu els auriculars encesos? El CAPod és compatible amb els vostres auriculars?</string>
<string name="troubleshooter_ble_result_failure_action">Torna-ho a provar</string> <string name="troubleshooter_ble_result_failure_action">Torna-ho a provar</string>
<string name="troubleshoot_action">Resolució de problemes</string> <string name="troubleshoot_action">Resolució de problemes</string>
@@ -134,6 +140,10 @@
<string name="overview_monitoring_active_label">Monitorització de dispositius</string> <string name="overview_monitoring_active_label">Monitorització de dispositius</string>
<string name="overview_monitoring_active_description">Assegureu-vos que el dispositiu estigui a prop i actiu.</string> <string name="overview_monitoring_active_description">Assegureu-vos que el dispositiu estigui a prop i actiu.</string>
<string name="overview_unmatched_devices_label">Dispositius no coincidents</string> <string name="overview_unmatched_devices_label">Dispositius no coincidents</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="one">%d dispositiu sense perfil coincident</item>
<item quantity="other">%d dispositius sense perfil coincident</item>
</plurals>
<string name="permission_bluetooth_connect_label">Connexió Bluetooth</string> <string name="permission_bluetooth_connect_label">Connexió Bluetooth</string>
<string name="permission_bluetooth_connect_description">Aquesta aplicació requereix el permís «Connexió Bluetooth» per interactuar amb dispositius emparellats i iniciar connexions.</string> <string name="permission_bluetooth_connect_description">Aquesta aplicació requereix el permís «Connexió Bluetooth» per interactuar amb dispositius emparellats i iniciar connexions.</string>
<string name="permission_bluetooth_scan_label">Escaneig Bluetooth</string> <string name="permission_bluetooth_scan_label">Escaneig Bluetooth</string>
+12
View File
@@ -28,6 +28,8 @@
<string name="settings_autopause_description">Pozastavení zvuku při vyjmutí zařízení z ucha.</string> <string name="settings_autopause_description">Pozastavení zvuku při vyjmutí zařízení z ucha.</string>
<string name="settings_autopplay_label">Autom. přehrávání</string> <string name="settings_autopplay_label">Autom. přehrávání</string>
<string name="settings_autoplay_description">Spuštění přehrávání zvuku při nošení zařízení.</string> <string name="settings_autoplay_description">Spuštění přehrávání zvuku při nošení zařízení.</string>
<string name="settings_eardetection_info_label">Poznámka k detekci ucha</string>
<string name="settings_eardetection_info_description">Pokud detekce sluchátek funguje pouze pro jedno sluchátko, jedná se o omezení společnosti Apple. Detekováno je pouze \"primární sluchátko\" (používané jako mikrofon). Konfigurace na zařízeních Apple: Nastavení → Bluetooth → AirPods → Mikrofon.</string>
<string name="settings_fake_data_label">Falešná data</string> <string name="settings_fake_data_label">Falešná data</string>
<string name="settings_fake_data_description">Zobrazit falešná data např. simulovat zařízení, které neexistuje.</string> <string name="settings_fake_data_description">Zobrazit falešná data např. simulovat zařízení, které neexistuje.</string>
<string name="settings_debug_label">Nastavení ladění</string> <string name="settings_debug_label">Nastavení ladění</string>
@@ -98,6 +100,10 @@
<string name="translators_thanks_title">Překladatelé</string> <string name="translators_thanks_title">Překladatelé</string>
<string name="translators_thanks_description">novas78@xda; woytazzer</string> <string name="translators_thanks_description">novas78@xda; woytazzer</string>
<string name="widget_description">Widget zobrazující poslední známý stav zařízení.</string> <string name="widget_description">Widget zobrazující poslední známý stav zařízení.</string>
<string name="widget_configuration_title">Vybrat zařízení</string>
<string name="widget_configuration_description">Vyberte, který profil zařízení má tento widget zobrazovat.</string>
<string name="common_feature_requires_pro_msg">Tato funkce vyžaduje CAPod Pro.</string>
<string name="widget_no_data_label">Žádná data</string>
<string name="settings_compat_indirectcallback_title">Nepřímé poskytování dat</string> <string name="settings_compat_indirectcallback_title">Nepřímé poskytování dat</string>
<string name="settings_compat_indirectcallback_summary">Použijte alternativní metodu pro příjem dat BLE ze systému (vysílání namísto přijímání).</string> <string name="settings_compat_indirectcallback_summary">Použijte alternativní metodu pro příjem dat BLE ze systému (vysílání namísto přijímání).</string>
<string name="troubleshooter_title">Řešení problémů</string> <string name="troubleshooter_title">Řešení problémů</string>
@@ -134,6 +140,12 @@
<string name="overview_monitoring_active_label">Monitorování zařízení</string> <string name="overview_monitoring_active_label">Monitorování zařízení</string>
<string name="overview_monitoring_active_description">Ujistěte se, že je vaše zařízení v dosahu a aktivní.</string> <string name="overview_monitoring_active_description">Ujistěte se, že je vaše zařízení v dosahu a aktivní.</string>
<string name="overview_unmatched_devices_label">Nepřiřazená zařízení</string> <string name="overview_unmatched_devices_label">Nepřiřazená zařízení</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="one">%d zařízení bez odpovídajícího profilu</item>
<item quantity="few">%d zařízení bez odpovídajícího profilu</item>
<item quantity="many">%d zařízení bez odpovídajícího profilu</item>
<item quantity="other">%d zařízení bez odpovídajícího profilu</item>
</plurals>
<string name="permission_bluetooth_connect_label">Připojení Bluetooth</string> <string name="permission_bluetooth_connect_label">Připojení Bluetooth</string>
<string name="permission_bluetooth_connect_description">Tato aplikace vyžaduje oprávnění \"připojení Bluetooth\" pro interakci se spárovanými zařízeními a zahájení připojení.</string> <string name="permission_bluetooth_connect_description">Tato aplikace vyžaduje oprávnění \"připojení Bluetooth\" pro interakci se spárovanými zařízeními a zahájení připojení.</string>
<string name="permission_bluetooth_scan_label">Skenování Bluetooth</string> <string name="permission_bluetooth_scan_label">Skenování Bluetooth</string>
+13
View File
@@ -28,6 +28,8 @@
<string name="settings_autopause_description">Musik pausieren, wenn der Kopfhörer vom Ohr entfernt wird.</string> <string name="settings_autopause_description">Musik pausieren, wenn der Kopfhörer vom Ohr entfernt wird.</string>
<string name="settings_autopplay_label">Automatisches abspielen</string> <string name="settings_autopplay_label">Automatisches abspielen</string>
<string name="settings_autoplay_description">Audiowiedergabe starten, wenn das Gerät getragen wird.</string> <string name="settings_autoplay_description">Audiowiedergabe starten, wenn das Gerät getragen wird.</string>
<string name="settings_eardetection_info_label">Hinweis zur Ohr-Erkennung</string>
<string name="settings_eardetection_info_description">Wenn die Ohr-Erkennung nur für einen Pod funktioniert, ist das leider Apple-Einschränkung. Es wird dann nur der \"primäre Pod\" (Mikrofon) erkannt. Weitere Konfiguration auf Apple-Geräten: Einstellungen → Bluetooth → AirPods → Mikrofon.</string>
<string name="settings_fake_data_label">Gefälschte Daten</string> <string name="settings_fake_data_label">Gefälschte Daten</string>
<string name="settings_fake_data_description">Gefälschte Test-Daten anzeigen, d.h. nicht existierende Geräte simulieren.</string> <string name="settings_fake_data_description">Gefälschte Test-Daten anzeigen, d.h. nicht existierende Geräte simulieren.</string>
<string name="settings_debug_label">Debug-Einstellungen</string> <string name="settings_debug_label">Debug-Einstellungen</string>
@@ -98,6 +100,10 @@
<string name="translators_thanks_title">Übersetzer</string> <string name="translators_thanks_title">Übersetzer</string>
<string name="translators_thanks_description">Gamechanger181</string> <string name="translators_thanks_description">Gamechanger181</string>
<string name="widget_description">Ein Widget, das den letzten bekannten Gerätestatus anzeigt.</string> <string name="widget_description">Ein Widget, das den letzten bekannten Gerätestatus anzeigt.</string>
<string name="widget_configuration_title">Gerät auswählen</string>
<string name="widget_configuration_description">Wähle aus, welches Geräteprofil dieses Widget anzeigen soll.</string>
<string name="common_feature_requires_pro_msg">Diese Funktion erfordert CAPod Pro.</string>
<string name="widget_no_data_label">Keine Daten</string>
<string name="settings_compat_indirectcallback_title">Indirekte Datenlieferung</string> <string name="settings_compat_indirectcallback_title">Indirekte Datenlieferung</string>
<string name="settings_compat_indirectcallback_summary">Verwende eine alternative Methode, um BLE-Daten vom System zu erhalten (Broadcast statt Callback).</string> <string name="settings_compat_indirectcallback_summary">Verwende eine alternative Methode, um BLE-Daten vom System zu erhalten (Broadcast statt Callback).</string>
<string name="troubleshooter_title">Fehlerbehebung</string> <string name="troubleshooter_title">Fehlerbehebung</string>
@@ -134,6 +140,10 @@
<string name="overview_monitoring_active_label">Überwachung für Geräte</string> <string name="overview_monitoring_active_label">Überwachung für Geräte</string>
<string name="overview_monitoring_active_description">Stelle sicher, dass dein Gerät in der Nähe ist und aktiv ist.</string> <string name="overview_monitoring_active_description">Stelle sicher, dass dein Gerät in der Nähe ist und aktiv ist.</string>
<string name="overview_unmatched_devices_label">Nicht zugeordnete Geräte</string> <string name="overview_unmatched_devices_label">Nicht zugeordnete Geräte</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="one">%d Gerät ohne passendes Profil</item>
<item quantity="other">%d Geräte ohne passendes Profil</item>
</plurals>
<string name="permission_bluetooth_connect_label">Bluetooth verbinden</string> <string name="permission_bluetooth_connect_label">Bluetooth verbinden</string>
<string name="permission_bluetooth_connect_description">Diese App benötigt die \"Bluetooth verbinden\" Berechtigung um mit bereits verbundenen und neuen Geräten zu interagieren.</string> <string name="permission_bluetooth_connect_description">Diese App benötigt die \"Bluetooth verbinden\" Berechtigung um mit bereits verbundenen und neuen Geräten zu interagieren.</string>
<string name="permission_bluetooth_scan_label">Bluetooth Suche</string> <string name="permission_bluetooth_scan_label">Bluetooth Suche</string>
@@ -217,4 +227,7 @@
<!-- Unsaved changes dialog --> <!-- Unsaved changes dialog -->
<string name="general_unsaved_changes_title">Nicht gespeicherte Änderungen</string> <string name="general_unsaved_changes_title">Nicht gespeicherte Änderungen</string>
<string name="general_unsaved_changes_message">Du hast nicht gespeicherte Änderungen. Was möchtest du tun?</string> <string name="general_unsaved_changes_message">Du hast nicht gespeicherte Änderungen. Was möchtest du tun?</string>
<string name="general_save_and_exit_action">Sichern &amp; Beenden</string>
<string name="general_discard_action">Verwerfen</string>
<string name="general_keep_editing_action">Weiter bearbeiten</string>
</resources> </resources>
@@ -11,6 +11,8 @@
<string name="general_save_action">Guardar</string> <string name="general_save_action">Guardar</string>
<string name="general_guide_action">Guía</string> <string name="general_guide_action">Guía</string>
<string name="general_continue_action">Continuar</string> <string name="general_continue_action">Continuar</string>
<string name="general_show_action">Mostrar</string>
<string name="general_hide_action">Ocultar</string>
<string name="general_example_label">Ej.: %s</string> <string name="general_example_label">Ej.: %s</string>
<string name="upgrade_capod_label">Actualizar CAPod</string> <string name="upgrade_capod_label">Actualizar CAPod</string>
<string name="upgrade_capod_description">Obtené funciones adicionales y apoyá al desarrollador.</string> <string name="upgrade_capod_description">Obtené funciones adicionales y apoyá al desarrollador.</string>
@@ -18,12 +20,16 @@
<string name="settings_monitor_mode_description">Bajo qué circunstancias esta app monitorea los datos de Bluetooth.</string> <string name="settings_monitor_mode_description">Bajo qué circunstancias esta app monitorea los datos de Bluetooth.</string>
<string name="settings_monitor_connected_notification_label">Notificación extra</string> <string name="settings_monitor_connected_notification_label">Notificación extra</string>
<string name="settings_monitor_connected_notification_description">Muestra una notificación extra cuando un dispositivo está conectado. Esto te permite ocultar la notificación permanente \"Sin dispositivos\" desactivando el canal \"Estado del dispositivo\".</string> <string name="settings_monitor_connected_notification_description">Muestra una notificación extra cuando un dispositivo está conectado. Esto te permite ocultar la notificación permanente \"Sin dispositivos\" desactivando el canal \"Estado del dispositivo\".</string>
<string name="settings_keep_notification_after_disconnect_label">Mantener la notificación después de la desconexión</string>
<string name="settings_keep_notification_after_disconnect_description">Seguir mostrando los últimos niveles de batería conocidos incluso después de que tus AirPods se desconecten</string>
<string name="settings_scanner_mode_label">Modo escáner</string> <string name="settings_scanner_mode_label">Modo escáner</string>
<string name="settings_scanner_mode_description">¿Debería el escáner de datos de Bluetooth de baja energía priorizar el rendimiento o conservar energía?</string> <string name="settings_scanner_mode_description">¿Debería el escáner de datos de Bluetooth de baja energía priorizar el rendimiento o conservar energía?</string>
<string name="settings_autopause_label">Pausa automática</string> <string name="settings_autopause_label">Pausa automática</string>
<string name="settings_autopause_description">Pausar el audio al quitar el dispositivo de tu oreja.</string> <string name="settings_autopause_description">Pausar el audio al quitar el dispositivo de tu oreja.</string>
<string name="settings_autopplay_label">Reproducción automática</string> <string name="settings_autopplay_label">Reproducción automática</string>
<string name="settings_autoplay_description">Iniciar la reproducción de audio cuando se usa el dispositivo.</string> <string name="settings_autoplay_description">Iniciar la reproducción de audio cuando se usa el dispositivo.</string>
<string name="settings_eardetection_info_label">Nota sobre la detección de oídos</string>
<string name="settings_eardetection_info_description">Si la detección de auriculares solo funciona para un pod, se trata de una limitación de Apple. Solo se detecta el «pod principal» (utilizado para el micrófono). Configuración en dispositivos Apple: Ajustes → Bluetooth → AirPods → Micrófono.</string>
<string name="settings_fake_data_label">Datos falsos</string> <string name="settings_fake_data_label">Datos falsos</string>
<string name="settings_fake_data_description">Mostrar datos falsos, es decir, simular dispositivos que no existen.</string> <string name="settings_fake_data_description">Mostrar datos falsos, es decir, simular dispositivos que no existen.</string>
<string name="settings_debug_label">Ajustes de depuración</string> <string name="settings_debug_label">Ajustes de depuración</string>
@@ -34,6 +40,8 @@
<string name="settings_autoconnect_description">Si Android no se conecta automáticamente, también podemos pedirlo. Esto establecerá el ajuste del modo monitor en \'Siempre\'.</string> <string name="settings_autoconnect_description">Si Android no se conecta automáticamente, también podemos pedirlo. Esto establecerá el ajuste del modo monitor en \'Siempre\'.</string>
<string name="settings_autoconnect_condition_label">Condición de conexión automática</string> <string name="settings_autoconnect_condition_label">Condición de conexión automática</string>
<string name="settings_autoconnect_condition_description">¿Cuándo deberíamos intentar conectarnos a tu dispositivo?</string> <string name="settings_autoconnect_condition_description">¿Cuándo deberíamos intentar conectarnos a tu dispositivo?</string>
<string name="settings_devices_label">Dispositivos</string>
<string name="settings_devices_description">Gestionar tus dispositivos.</string>
<string name="settings_reaction_label">Reacciones</string> <string name="settings_reaction_label">Reacciones</string>
<string name="settings_reaction_description">Reaccionar a eventos y comportamientos.</string> <string name="settings_reaction_description">Reaccionar a eventos y comportamientos.</string>
<string name="settings_category_yourdevice_label">Tu dispositivo</string> <string name="settings_category_yourdevice_label">Tu dispositivo</string>
@@ -92,9 +100,14 @@
<string name="translators_thanks_title">Traductores</string> <string name="translators_thanks_title">Traductores</string>
<string name="translators_thanks_description">Jaime Muñoz(jmmartin_5@outlook.com)</string> <string name="translators_thanks_description">Jaime Muñoz(jmmartin_5@outlook.com)</string>
<string name="widget_description">Un widget que muestra el último estado conocido del dispositivo.</string> <string name="widget_description">Un widget que muestra el último estado conocido del dispositivo.</string>
<string name="widget_configuration_title">Selecciona el dispositivo</string>
<string name="widget_configuration_description">Elige qué perfil del dispositivo debe mostrar este complemento.</string>
<string name="common_feature_requires_pro_msg">Esta función requiere CAPod Pro.</string>
<string name="widget_no_data_label">Sin datos</string>
<string name="settings_compat_indirectcallback_title">Entrega indirecta de datos</string> <string name="settings_compat_indirectcallback_title">Entrega indirecta de datos</string>
<string name="settings_compat_indirectcallback_summary">Usar un método alternativo para recibir datos BLE del sistema (transmisión en lugar de devolución de llamada).</string> <string name="settings_compat_indirectcallback_summary">Usar un método alternativo para recibir datos BLE del sistema (transmisión en lugar de devolución de llamada).</string>
<string name="troubleshooter_title">Solucionador de problemas</string> <string name="troubleshooter_title">Solucionador de problemas</string>
<string name="troubleshooter_summary">Diagnosticar y solucionar problemas de conectividad del Bluetooth.</string>
<string name="troubleshooter_ble_intro_title">Transmisiones de Bluetooth de Baja Energía</string> <string name="troubleshooter_ble_intro_title">Transmisiones de Bluetooth de Baja Energía</string>
<string name="troubleshooter_ble_intro_body1">Los AirPods (y auriculares similares) transmiten información de estado usando una tecnología BLE llamada \"anuncios\". Algunos teléfonos no implementan esta tecnología correctamente. CAPod puede intentar solucionarlo probando diferentes opciones de compatibilidad hasta que se reciban datos. Iniciá la reproducción de música en tus auriculares y colocalos cerca de tu teléfono, luego iniciá el proceso.</string> <string name="troubleshooter_ble_intro_body1">Los AirPods (y auriculares similares) transmiten información de estado usando una tecnología BLE llamada \"anuncios\". Algunos teléfonos no implementan esta tecnología correctamente. CAPod puede intentar solucionarlo probando diferentes opciones de compatibilidad hasta que se reciban datos. Iniciá la reproducción de música en tus auriculares y colocalos cerca de tu teléfono, luego iniciá el proceso.</string>
<string name="troubleshooter_ble_intro_start_action">Iniciar solución de problemas</string> <string name="troubleshooter_ble_intro_start_action">Iniciar solución de problemas</string>
@@ -113,6 +126,91 @@
<string name="onboarding_body3">CAPod no contiene anuncios y no recopila tus datos.</string> <string name="onboarding_body3">CAPod no contiene anuncios y no recopila tus datos.</string>
<string name="onboarding_body4">Podés actualizar a CAPod Pro para obtener funciones adicionales y apoyar el desarrollo.</string> <string name="onboarding_body4">Podés actualizar a CAPod Pro para obtener funciones adicionales y apoyar el desarrollo.</string>
<!-- Strings from app-common --> <!-- Strings from app-common -->
<string name="app_name">CAPod</string>
<string name="app_name_pro">CAPod Pro</string>
<string name="app_name_foss">CAPod FOSS</string>
<string name="general_value_not_available_label">No disponible</string>
<string name="general_error_label">Error</string>
<string name="general_grant_permission_action">Conceder el permiso</string>
<string name="general_manage_devices_action">Gestionar dispositivos</string>
<string name="overview_nomaindevice_label">Sin dispositivos configurados</string>
<string name="overview_nomaindevice_description">Configure su dispositivo para comenzar a supervisar los niveles de batería y habilitar funciones adicionales.</string>
<string name="overview_bluetooth_disabled_label">El Bluetooth está desactivado</string>
<string name="overview_bluetooth_disabled_description">El Bluetooth está desactivado, actívalo ;)</string>
<string name="overview_monitoring_active_label">Monitoreo de dispositivos</string>
<string name="overview_monitoring_active_description">Asegúrate de que tu dispositivo esté cerca y activo.</string>
<string name="overview_unmatched_devices_label">Dispositivos no emparejados</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="one">%d dispositivo sin perfil coincidente</item>
<item quantity="other">%d dispositivos sin perfil coincidentes</item>
</plurals>
<string name="permission_bluetooth_connect_label">Conexión Bluetooth</string>
<string name="permission_bluetooth_connect_description">Esta aplicación requiere el «Bluetooth» para interactuar con dispositivos emparejados e iniciar conexiones.</string>
<string name="permission_bluetooth_scan_label">El Bluetooth está escaneando</string>
<string name="permission_bluetooth_scan_description">El permiso \"Escaneo de Bluetooth\" permite que esta aplicación descubra y reciba datos de Bluetooth de dispositivos cercanos, como tus AirPods.</string>
<string name="permission_bluetooth_label">Bluetooth</string>
<string name="permission_bluetooth_description">Esta aplicación requiere el permiso \"Bluetooth\" para conectarse a dispositivos Bluetooth emparejados.</string>
<string name="permission_access_fine_location_label">Acceso preciso a tu ubicación</string>
<string name="permission_access_fine_location_description">CAPod utiliza el permiso de \"ubicación precisa\" para recibir datos de Bluetooth de bajo consumo. Tus auriculares utilizan la tecnología Bluetooth de bajo consumo para transmitir su estado. Esta aplicación NO utilizará datos de Bluetooth para determinar tu ubicación.</string>
<string name="permission_background_location_label">Acceso a la ubicación en segundo plano</string>
<string name="permission_background_location_description">CAPod utiliza el acceso a la ubicación en segundo plano para habilitar funciones como \"Mostrar ventana emergente\" y \"Conectar automáticamente\" mientras la aplicación está cerrada. Este acceso permite que la aplicación reciba datos de Bluetooth de bajo consumo mientras está en segundo plano. Esta aplicación NO utiliza datos de Bluetooth para determinar tu ubicación.</string>
<string name="permission_ignore_battery_optimizations_label">Desactivar las optimizaciones de la batería</string>
<string name="permission_ignore_battery_optimizations_description">Las optimizaciones de la batería impiden que esta aplicación reciba datos Bluetooth de forma fiable mientras se encuentra en segundo plano.</string>
<string name="permission_required_title">Se requiere el siguiente permiso:</string>
<string name="permission_system_alert_window_label">Ventana emergente</string>
<string name="permission_system_alert_window_description">Permite que CAPod se superponga a otras aplicaciones para que la función «Mostrar ventana emergente».</string>
<string name="settings_scanner_mode_lowpower_label">Baja energía</string>
<string name="settings_scanner_mode_balanced_label">Equilibrado</string>
<string name="settings_scanner_mode_lowlatency_label">Baja latencia</string>
<string name="settings_monitor_mode_manual_label">Cuando la aplicación está abierta</string>
<string name="settings_monitor_mode_automatic_label">Cuando el dispositivo está conectado</string>
<string name="settings_monitor_mode_always_label">Siempre</string>
<string name="settings_reaction_autoconnect_whenseen_label">Cuando está visible</string>
<string name="settings_reaction_autoconnect_caseopen_label">El estuche está abierto</string>
<string name="settings_reaction_autoconnect_inear_label">En el oído</string>
<string name="pods_dual_left_label">Auricular izquierdo</string>
<string name="pods_dual_right_label">Auricular derecho</string>
<string name="pods_case_label">Estuche</string>
<string name="pods_case_status_open_label">Abierto</string>
<string name="pods_case_status_closed_label">Cerrado</string>
<string name="pods_connection_state_disconnected_label">No está conectado a un dispositivo</string>
<string name="pods_connection_state_idle_label">Conectado a un dispositivo, pero inactivo</string>
<string name="pods_connection_state_music_label">Reproduciendo música</string>
<string name="pods_connection_state_call_label">En una llamada telefónica</string>
<string name="pods_connection_state_ringing_label">Sonando</string>
<string name="pods_connection_state_hanging_up_label">Colgando</string>
<string name="pods_connection_state_unknown_label">El estado de la conexión es desconocido</string>
<string name="pods_unknown_raw_data_label">Datos sin procesar</string>
<string name="pods_unknown_label">Dispositivo desconocido</string>
<string name="pods_unknown_contact_dev">Es un dispositivo desconocido, pero está utilizando un formato similar. Añadamos soporte para ello, contáctame :)</string>
<string name="pods_none_label_short">Sin dispositivo</string>
<string name="pods_charging_label">Cargando</string>
<string name="pods_inear_label">En el oído</string>
<string name="pods_microphone_label">Micrófono</string>
<string name="pods_yours">Tuyos</string>
<string name="headset_being_worn_label">En uso</string>
<string name="headset_not_being_worn_label">No se usan</string>
<string name="pods_case_unknown_state">Desconocido</string>
<string name="last_seen_x">Ultima vez conectado: %s</string>
<string name="first_seen_x">Primera vez conectados: %s</string>
<string name="permission_post_notifications_label">Mostrar las notificaciones</string>
<string name="permission_post_notifications_description">"Permitir que CAPod muestre notificaciones de tus AirPods, por ejemplo, su estado actual mientras están conectados."</string>
<!-- Device profiles --> <!-- Device profiles -->
<string name="profiles_empty_title">Sin perfiles de dispositivos configurados</string>
<string name="profiles_empty_description">Crear perfiles de dispositivos para administrar múltiples dispositivos con configuraciones y prioridades personalizadas.</string>
<string name="profiles_add_action">Añadir un perfil</string>
<string name="profiles_create_title">Crear un perfil</string>
<string name="profiles_name_label">Nombre del perfil</string>
<string name="profiles_name_default">Mis auriculares</string>
<string name="profiles_model_label">Modelo del dispositivo</string>
<string name="profiles_paired_device_label">Dispositivo emparejado</string>
<string name="profiles_paired_device_none">Ninguno</string>
<string name="profiles_paired_device_none_description">Ningún dispositivo seleccionado</string>
<string name="profiles_save_action">Guarda el perfil</string>
<string name="profiles_drag_handle_description">Arrastrar para reordenar</string>
<string name="profiles_delete_title">Eliminar el perfil</string>
<string name="profiles_delete_message">¿Estás seguro de que quieres eliminar este perfil? Esto no se puede deshacer.</string>
<string name="profiles_delete_action">Borrar</string>
<string name="profiles_basic_info_title">Información del dispositivo</string>
<!-- Unsaved changes dialog --> <!-- Unsaved changes dialog -->
</resources> </resources>
+100 -2
View File
@@ -11,6 +11,8 @@
<string name="general_save_action">Guardar</string> <string name="general_save_action">Guardar</string>
<string name="general_guide_action">Guía</string> <string name="general_guide_action">Guía</string>
<string name="general_continue_action">Continuar</string> <string name="general_continue_action">Continuar</string>
<string name="general_show_action">Mostrar</string>
<string name="general_hide_action">Ocultar</string>
<string name="general_example_label">P. ej.: %s</string> <string name="general_example_label">P. ej.: %s</string>
<string name="upgrade_capod_label">Actualizar CAPod</string> <string name="upgrade_capod_label">Actualizar CAPod</string>
<string name="upgrade_capod_description">Obtén funciones adicionales y apoya al desarrollador.</string> <string name="upgrade_capod_description">Obtén funciones adicionales y apoya al desarrollador.</string>
@@ -18,12 +20,16 @@
<string name="settings_monitor_mode_description">Bajo qué circunstancias esta aplicación monitorea los datos de Bluetooth.</string> <string name="settings_monitor_mode_description">Bajo qué circunstancias esta aplicación monitorea los datos de Bluetooth.</string>
<string name="settings_monitor_connected_notification_label">Notificación adicional</string> <string name="settings_monitor_connected_notification_label">Notificación adicional</string>
<string name="settings_monitor_connected_notification_description">Muestra una notificación adicional cuando un dispositivo está conectado. Esto te permite ocultar la notificación permanente \"Sin dispositivos\" desactivando el canal \"Estado del dispositivo\".</string> <string name="settings_monitor_connected_notification_description">Muestra una notificación adicional cuando un dispositivo está conectado. Esto te permite ocultar la notificación permanente \"Sin dispositivos\" desactivando el canal \"Estado del dispositivo\".</string>
<string name="settings_keep_notification_after_disconnect_label">Mantener la notificación después de la desconexión</string>
<string name="settings_keep_notification_after_disconnect_description">Seguir mostrando los últimos niveles de batería conocidos incluso después de que tus AirPods se desconecten</string>
<string name="settings_scanner_mode_label">Modo escáner</string> <string name="settings_scanner_mode_label">Modo escáner</string>
<string name="settings_scanner_mode_description">¿Debería el escáner de datos de Bluetooth de baja energía priorizar el rendimiento o conservar energía?</string> <string name="settings_scanner_mode_description">¿Debería el escáner de datos de Bluetooth de baja energía priorizar el rendimiento o conservar energía?</string>
<string name="settings_autopause_label">Pausa automática</string> <string name="settings_autopause_label">Pausa automática</string>
<string name="settings_autopause_description">Pausar el audio al quitar el dispositivo de tu oreja.</string> <string name="settings_autopause_description">Pausar el audio al quitar el dispositivo de tu oreja.</string>
<string name="settings_autopplay_label">Reproducción automática</string> <string name="settings_autopplay_label">Reproducción automática</string>
<string name="settings_autoplay_description">Iniciar la reproducción de audio cuando se usa el dispositivo.</string> <string name="settings_autoplay_description">Iniciar la reproducción de audio cuando se usa el dispositivo.</string>
<string name="settings_eardetection_info_label">Nota sobre la detección de oídos</string>
<string name="settings_eardetection_info_description">Si la detección de auriculares solo funciona para un pod, se trata de una limitación de Apple. Solo se detecta el «pod principal» (utilizado para el micrófono). Configuración en dispositivos Apple: Ajustes → Bluetooth → AirPods → Micrófono.</string>
<string name="settings_fake_data_label">Datos falsos</string> <string name="settings_fake_data_label">Datos falsos</string>
<string name="settings_fake_data_description">Mostrar datos falsos, es decir, simular dispositivos que no existen.</string> <string name="settings_fake_data_description">Mostrar datos falsos, es decir, simular dispositivos que no existen.</string>
<string name="settings_debug_label">Ajustes de depuración</string> <string name="settings_debug_label">Ajustes de depuración</string>
@@ -34,6 +40,8 @@
<string name="settings_autoconnect_description">Si Android no se conecta automáticamente, también podemos pedirlo. Esto establecerá el ajuste del modo monitor en \"Siempre\".</string> <string name="settings_autoconnect_description">Si Android no se conecta automáticamente, también podemos pedirlo. Esto establecerá el ajuste del modo monitor en \"Siempre\".</string>
<string name="settings_autoconnect_condition_label">Condición de conexión automática</string> <string name="settings_autoconnect_condition_label">Condición de conexión automática</string>
<string name="settings_autoconnect_condition_description">¿Cuándo deberíamos intentar conectarnos a tu dispositivo?</string> <string name="settings_autoconnect_condition_description">¿Cuándo deberíamos intentar conectarnos a tu dispositivo?</string>
<string name="settings_devices_label">Dispositivos</string>
<string name="settings_devices_description">Gestionar tus dispositivos.</string>
<string name="settings_reaction_label">Reacciones</string> <string name="settings_reaction_label">Reacciones</string>
<string name="settings_reaction_description">Reaccionar a eventos y comportamientos.</string> <string name="settings_reaction_description">Reaccionar a eventos y comportamientos.</string>
<string name="settings_category_yourdevice_label">Tu dispositivo</string> <string name="settings_category_yourdevice_label">Tu dispositivo</string>
@@ -68,7 +76,7 @@
<string name="settings_support_description">Si necesitas ayuda.</string> <string name="settings_support_description">Si necesitas ayuda.</string>
<string name="issue_tracker_label">Seguidor de problemas</string> <string name="issue_tracker_label">Seguidor de problemas</string>
<string name="issue_tracker_description">Un seguidor público de problemas para reportes de errores y solicitudes de funciones (solo en inglés).</string> <string name="issue_tracker_description">Un seguidor público de problemas para reportes de errores y solicitudes de funciones (solo en inglés).</string>
<string name="discord_label">En español</string> <string name="discord_label">Discord</string>
<string name="discord_description">Un lugar para pasar el rato y hacer preguntas.</string> <string name="discord_description">Un lugar para pasar el rato y hacer preguntas.</string>
<string name="changelog_label">Registro de cambios</string> <string name="changelog_label">Registro de cambios</string>
<string name="settings_label">Ajustes</string> <string name="settings_label">Ajustes</string>
@@ -90,11 +98,16 @@
<string name="help_translate_label">Traducción</string> <string name="help_translate_label">Traducción</string>
<string name="help_translate_description">Ayuda a traducir esta aplicación a tu idioma favorito.</string> <string name="help_translate_description">Ayuda a traducir esta aplicación a tu idioma favorito.</string>
<string name="translators_thanks_title">Traductores</string> <string name="translators_thanks_title">Traductores</string>
<string name="translators_thanks_description">español</string> <string name="translators_thanks_description">Jaime Muñoz(jmmartin_5@outlook.com)</string>
<string name="widget_description">Un widget que muestra el último estado conocido del dispositivo.</string> <string name="widget_description">Un widget que muestra el último estado conocido del dispositivo.</string>
<string name="widget_configuration_title">Selecciona el dispositivo</string>
<string name="widget_configuration_description">Elige qué perfil del dispositivo debe mostrar este complemento.</string>
<string name="common_feature_requires_pro_msg">Esta función requiere CAPod Pro.</string>
<string name="widget_no_data_label">Sin datos</string>
<string name="settings_compat_indirectcallback_title">Entrega indirecta de datos</string> <string name="settings_compat_indirectcallback_title">Entrega indirecta de datos</string>
<string name="settings_compat_indirectcallback_summary">Usar un método alternativo para recibir datos BLE del sistema (transmisión en lugar de devolución de llamada).</string> <string name="settings_compat_indirectcallback_summary">Usar un método alternativo para recibir datos BLE del sistema (transmisión en lugar de devolución de llamada).</string>
<string name="troubleshooter_title">Solucionador de problemas</string> <string name="troubleshooter_title">Solucionador de problemas</string>
<string name="troubleshooter_summary">Diagnosticar y solucionar problemas de conectividad del Bluetooth.</string>
<string name="troubleshooter_ble_intro_title">Transmisiones de Bluetooth de Baja Energía</string> <string name="troubleshooter_ble_intro_title">Transmisiones de Bluetooth de Baja Energía</string>
<string name="troubleshooter_ble_intro_body1">Los AirPods (y auriculares similares) transmiten información de estado usando una tecnología BLE llamada \"anuncios\". Algunos teléfonos no implementan esta tecnología correctamente. CAPod puede intentar solucionarlo probando diferentes opciones de compatibilidad hasta que se reciban datos. Inicia la reproducción de música en tus auriculares y colócalos cerca de tu teléfono, luego inicia el proceso.</string> <string name="troubleshooter_ble_intro_body1">Los AirPods (y auriculares similares) transmiten información de estado usando una tecnología BLE llamada \"anuncios\". Algunos teléfonos no implementan esta tecnología correctamente. CAPod puede intentar solucionarlo probando diferentes opciones de compatibilidad hasta que se reciban datos. Inicia la reproducción de música en tus auriculares y colócalos cerca de tu teléfono, luego inicia el proceso.</string>
<string name="troubleshooter_ble_intro_start_action">Iniciar solución de problemas</string> <string name="troubleshooter_ble_intro_start_action">Iniciar solución de problemas</string>
@@ -113,6 +126,91 @@
<string name="onboarding_body3">CAPod no contiene anuncios y no recopila tus datos.</string> <string name="onboarding_body3">CAPod no contiene anuncios y no recopila tus datos.</string>
<string name="onboarding_body4">Puedes actualizar a CAPod Pro para obtener funciones adicionales y apoyar el desarrollo.</string> <string name="onboarding_body4">Puedes actualizar a CAPod Pro para obtener funciones adicionales y apoyar el desarrollo.</string>
<!-- Strings from app-common --> <!-- Strings from app-common -->
<string name="app_name">CAPod</string>
<string name="app_name_pro">CAPod Pro</string>
<string name="app_name_foss">CAPod FOSS</string>
<string name="general_value_not_available_label">No disponible</string>
<string name="general_error_label">Error</string>
<string name="general_grant_permission_action">Conceder el permiso</string>
<string name="general_manage_devices_action">Gestionar dispositivos</string>
<string name="overview_nomaindevice_label">Sin dispositivos configurados</string>
<string name="overview_nomaindevice_description">Configure su dispositivo para comenzar a supervisar los niveles de batería y habilitar funciones adicionales.</string>
<string name="overview_bluetooth_disabled_label">El Bluetooth está desactivado</string>
<string name="overview_bluetooth_disabled_description">El Bluetooth está desactivado, actívalo ;)</string>
<string name="overview_monitoring_active_label">Monitoreo de dispositivos</string>
<string name="overview_monitoring_active_description">Asegúrate de que tu dispositivo esté cerca y activo.</string>
<string name="overview_unmatched_devices_label">Dispositivos no emparejados</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="one">%d dispositivo sin perfil coincidente</item>
<item quantity="other">%d dispositivos sin perfil coincidentes</item>
</plurals>
<string name="permission_bluetooth_connect_label">Conexión Bluetooth</string>
<string name="permission_bluetooth_connect_description">Esta aplicación requiere el «Bluetooth» para interactuar con dispositivos emparejados e iniciar conexiones.</string>
<string name="permission_bluetooth_scan_label">El Bluetooth está escaneando</string>
<string name="permission_bluetooth_scan_description">El permiso \"Escaneo de Bluetooth\" permite que esta aplicación descubra y reciba datos de Bluetooth de dispositivos cercanos, como tus AirPods.</string>
<string name="permission_bluetooth_label">Bluetooth</string>
<string name="permission_bluetooth_description">Esta aplicación requiere el permiso \"Bluetooth\" para conectarse a dispositivos Bluetooth emparejados.</string>
<string name="permission_access_fine_location_label">Acceso preciso a tu ubicación</string>
<string name="permission_access_fine_location_description">CAPod utiliza el permiso de \"ubicación precisa\" para recibir datos de Bluetooth de bajo consumo. Tus auriculares utilizan la tecnología Bluetooth de bajo consumo para transmitir su estado. Esta aplicación NO utilizará datos de Bluetooth para determinar tu ubicación.</string>
<string name="permission_background_location_label">Acceso a la ubicación en segundo plano</string>
<string name="permission_background_location_description">CAPod utiliza el acceso a la ubicación en segundo plano para habilitar funciones como \"Mostrar ventana emergente\" y \"Conectar automáticamente\" mientras la aplicación está cerrada. Este acceso permite que la aplicación reciba datos de Bluetooth de bajo consumo mientras está en segundo plano. Esta aplicación NO utiliza datos de Bluetooth para determinar tu ubicación.</string>
<string name="permission_ignore_battery_optimizations_label">Desactivar las optimizaciones de la batería</string>
<string name="permission_ignore_battery_optimizations_description">Las optimizaciones de la batería impiden que esta aplicación reciba datos Bluetooth de forma fiable mientras se encuentra en segundo plano.</string>
<string name="permission_required_title">Se requiere el siguiente permiso:</string>
<string name="permission_system_alert_window_label">Ventana emergente</string>
<string name="permission_system_alert_window_description">Permite que CAPod se superponga a otras aplicaciones para que la función «Mostrar ventana emergente».</string>
<string name="settings_scanner_mode_lowpower_label">Baja energía</string>
<string name="settings_scanner_mode_balanced_label">Equilibrado</string>
<string name="settings_scanner_mode_lowlatency_label">Baja latencia</string>
<string name="settings_monitor_mode_manual_label">Cuando la aplicación está abierta</string>
<string name="settings_monitor_mode_automatic_label">Cuando el dispositivo está conectado</string>
<string name="settings_monitor_mode_always_label">Siempre</string>
<string name="settings_reaction_autoconnect_whenseen_label">Cuando está visible</string>
<string name="settings_reaction_autoconnect_caseopen_label">El estuche está abierto</string>
<string name="settings_reaction_autoconnect_inear_label">En el oído</string>
<string name="pods_dual_left_label">Auricular izquierdo</string>
<string name="pods_dual_right_label">Auricular derecho</string>
<string name="pods_case_label">Estuche</string>
<string name="pods_case_status_open_label">Abierto</string>
<string name="pods_case_status_closed_label">Cerrado</string>
<string name="pods_connection_state_disconnected_label">No está conectado a un dispositivo</string>
<string name="pods_connection_state_idle_label">Conectado a un dispositivo, pero inactivo</string>
<string name="pods_connection_state_music_label">Reproduciendo música</string>
<string name="pods_connection_state_call_label">En una llamada telefónica</string>
<string name="pods_connection_state_ringing_label">Sonando</string>
<string name="pods_connection_state_hanging_up_label">Colgando</string>
<string name="pods_connection_state_unknown_label">El estado de la conexión es desconocido</string>
<string name="pods_unknown_raw_data_label">Datos sin procesar</string>
<string name="pods_unknown_label">Dispositivo desconocido</string>
<string name="pods_unknown_contact_dev">Es un dispositivo desconocido, pero está utilizando un formato similar. Añadamos soporte para ello, contáctame :)</string>
<string name="pods_none_label_short">Sin dispositivo</string>
<string name="pods_charging_label">Cargando</string>
<string name="pods_inear_label">En el oído</string>
<string name="pods_microphone_label">Micrófono</string>
<string name="pods_yours">Tuyos</string>
<string name="headset_being_worn_label">En uso</string>
<string name="headset_not_being_worn_label">No se usan</string>
<string name="pods_case_unknown_state">Desconocido</string>
<string name="last_seen_x">Ultima vez conectado: %s</string>
<string name="first_seen_x">Primera vez conectados: %s</string>
<string name="permission_post_notifications_label">Mostrar las notificaciones</string>
<string name="permission_post_notifications_description">"Permitir que CAPod muestre notificaciones de tus AirPods, por ejemplo, su estado actual mientras están conectados."</string>
<!-- Device profiles --> <!-- Device profiles -->
<string name="profiles_empty_title">Sin perfiles de dispositivos configurados</string>
<string name="profiles_empty_description">Crear perfiles de dispositivos para administrar múltiples dispositivos con configuraciones y prioridades personalizadas.</string>
<string name="profiles_add_action">Añadir un perfil</string>
<string name="profiles_create_title">Crear un perfil</string>
<string name="profiles_name_label">Nombre del perfil</string>
<string name="profiles_name_default">Mis auriculares</string>
<string name="profiles_model_label">Modelo del dispositivo</string>
<string name="profiles_paired_device_label">Dispositivo emparejado</string>
<string name="profiles_paired_device_none">Ninguno</string>
<string name="profiles_paired_device_none_description">Ningún dispositivo seleccionado</string>
<string name="profiles_save_action">Guarda el perfil</string>
<string name="profiles_drag_handle_description">Arrastrar para reordenar</string>
<string name="profiles_delete_title">Eliminar el perfil</string>
<string name="profiles_delete_message">¿Estás seguro de que quieres eliminar este perfil? Esto no se puede deshacer.</string>
<string name="profiles_delete_action">Borrar</string>
<string name="profiles_basic_info_title">Información del dispositivo</string>
<!-- Unsaved changes dialog --> <!-- Unsaved changes dialog -->
</resources> </resources>
+98
View File
@@ -11,6 +11,8 @@
<string name="general_save_action">Guardar</string> <string name="general_save_action">Guardar</string>
<string name="general_guide_action">Guía</string> <string name="general_guide_action">Guía</string>
<string name="general_continue_action">Continuar</string> <string name="general_continue_action">Continuar</string>
<string name="general_show_action">Mostrar</string>
<string name="general_hide_action">Ocultar</string>
<string name="general_example_label">P. ej.: %s</string> <string name="general_example_label">P. ej.: %s</string>
<string name="upgrade_capod_label">Actualizar CAPod</string> <string name="upgrade_capod_label">Actualizar CAPod</string>
<string name="upgrade_capod_description">Obtén funciones adicionales y apoya al desarrollador.</string> <string name="upgrade_capod_description">Obtén funciones adicionales y apoya al desarrollador.</string>
@@ -18,12 +20,16 @@
<string name="settings_monitor_mode_description">Bajo qué circunstancias esta aplicación supervisa los datos de Bluetooth.</string> <string name="settings_monitor_mode_description">Bajo qué circunstancias esta aplicación supervisa los datos de Bluetooth.</string>
<string name="settings_monitor_connected_notification_label">Notificación adicional</string> <string name="settings_monitor_connected_notification_label">Notificación adicional</string>
<string name="settings_monitor_connected_notification_description">Muestra una notificación adicional cuando un dispositivo está conectado. Esto le permite ocultar la notificación permanente \"Sin dispositivos\" deshabilitando el canal \"Estado del dispositivo\".</string> <string name="settings_monitor_connected_notification_description">Muestra una notificación adicional cuando un dispositivo está conectado. Esto le permite ocultar la notificación permanente \"Sin dispositivos\" deshabilitando el canal \"Estado del dispositivo\".</string>
<string name="settings_keep_notification_after_disconnect_label">Mantener la notificación después de la desconexión</string>
<string name="settings_keep_notification_after_disconnect_description">Seguir mostrando los últimos niveles de batería conocidos incluso después de que tus AirPods se desconecten</string>
<string name="settings_scanner_mode_label">Modo escáner</string> <string name="settings_scanner_mode_label">Modo escáner</string>
<string name="settings_scanner_mode_description">¿Debería el escáner de datos de Bluetooth de baja energía priorizar el rendimiento o conservar energía?</string> <string name="settings_scanner_mode_description">¿Debería el escáner de datos de Bluetooth de baja energía priorizar el rendimiento o conservar energía?</string>
<string name="settings_autopause_label">Pausa automática</string> <string name="settings_autopause_label">Pausa automática</string>
<string name="settings_autopause_description">Pausar el audio al quitar el dispositivo de tu oído.</string> <string name="settings_autopause_description">Pausar el audio al quitar el dispositivo de tu oído.</string>
<string name="settings_autopplay_label">Reproducción automática</string> <string name="settings_autopplay_label">Reproducción automática</string>
<string name="settings_autoplay_description">Iniciar la reproducción de audio cuando se lleva puesto el dispositivo.</string> <string name="settings_autoplay_description">Iniciar la reproducción de audio cuando se lleva puesto el dispositivo.</string>
<string name="settings_eardetection_info_label">Nota sobre la detección de oídos</string>
<string name="settings_eardetection_info_description">Si la detección de auriculares solo funciona para un pod, se trata de una limitación de Apple. Solo se detecta el «pod principal» (utilizado para el micrófono). Configuración en dispositivos Apple: Ajustes → Bluetooth → AirPods → Micrófono.</string>
<string name="settings_fake_data_label">Datos falsos</string> <string name="settings_fake_data_label">Datos falsos</string>
<string name="settings_fake_data_description">Mostrar datos falsos, es decir, simular dispositivos que no existen.</string> <string name="settings_fake_data_description">Mostrar datos falsos, es decir, simular dispositivos que no existen.</string>
<string name="settings_debug_label">Ajustes de depuración</string> <string name="settings_debug_label">Ajustes de depuración</string>
@@ -34,6 +40,8 @@
<string name="settings_autoconnect_description">Si Android no se conecta automáticamente, también podemos solicitarlo. Esto establecerá la configuración del modo de monitorización en \"Siempre\".</string> <string name="settings_autoconnect_description">Si Android no se conecta automáticamente, también podemos solicitarlo. Esto establecerá la configuración del modo de monitorización en \"Siempre\".</string>
<string name="settings_autoconnect_condition_label">Condición de conexión automática</string> <string name="settings_autoconnect_condition_label">Condición de conexión automática</string>
<string name="settings_autoconnect_condition_description">¿Cuándo deberíamos intentar conectarnos a tu dispositivo?</string> <string name="settings_autoconnect_condition_description">¿Cuándo deberíamos intentar conectarnos a tu dispositivo?</string>
<string name="settings_devices_label">Dispositivos</string>
<string name="settings_devices_description">Gestionar tus dispositivos.</string>
<string name="settings_reaction_label">Reacciones</string> <string name="settings_reaction_label">Reacciones</string>
<string name="settings_reaction_description">Reaccionar a eventos y comportamientos.</string> <string name="settings_reaction_description">Reaccionar a eventos y comportamientos.</string>
<string name="settings_category_yourdevice_label">Tu dispositivo</string> <string name="settings_category_yourdevice_label">Tu dispositivo</string>
@@ -92,9 +100,14 @@
<string name="translators_thanks_title">Traductores</string> <string name="translators_thanks_title">Traductores</string>
<string name="translators_thanks_description">Jaime Muñoz(jmmartin_5@outlook.com)</string> <string name="translators_thanks_description">Jaime Muñoz(jmmartin_5@outlook.com)</string>
<string name="widget_description">Un widget que muestra el último estado conocido del dispositivo.</string> <string name="widget_description">Un widget que muestra el último estado conocido del dispositivo.</string>
<string name="widget_configuration_title">Selecciona el dispositivo</string>
<string name="widget_configuration_description">Elige qué perfil del dispositivo debe mostrar este complemento.</string>
<string name="common_feature_requires_pro_msg">Esta función requiere CAPod Pro.</string>
<string name="widget_no_data_label">Sin datos</string>
<string name="settings_compat_indirectcallback_title">Entrega indirecta de datos</string> <string name="settings_compat_indirectcallback_title">Entrega indirecta de datos</string>
<string name="settings_compat_indirectcallback_summary">Utiliza un método alternativo para recibir datos BLE del sistema (transmisión en lugar de devolución de llamada).</string> <string name="settings_compat_indirectcallback_summary">Utiliza un método alternativo para recibir datos BLE del sistema (transmisión en lugar de devolución de llamada).</string>
<string name="troubleshooter_title">Solucionador de problemas</string> <string name="troubleshooter_title">Solucionador de problemas</string>
<string name="troubleshooter_summary">Diagnosticar y solucionar problemas de conectividad del Bluetooth.</string>
<string name="troubleshooter_ble_intro_title">Transmisiones de Bluetooth de baja energía</string> <string name="troubleshooter_ble_intro_title">Transmisiones de Bluetooth de baja energía</string>
<string name="troubleshooter_ble_intro_body1">Los AirPods (y auriculares similares) transmiten información de estado mediante una tecnología BLE denominada \"anuncios\". Algunos teléfonos no implementan esta tecnología correctamente. CAPod puede intentar solucionarlo probando diferentes opciones de compatibilidad hasta que se reciban los datos. Inicia la reproducción de música en tus auriculares y colócalos cerca de tu teléfono, luego inicia el proceso.</string> <string name="troubleshooter_ble_intro_body1">Los AirPods (y auriculares similares) transmiten información de estado mediante una tecnología BLE denominada \"anuncios\". Algunos teléfonos no implementan esta tecnología correctamente. CAPod puede intentar solucionarlo probando diferentes opciones de compatibilidad hasta que se reciban los datos. Inicia la reproducción de música en tus auriculares y colócalos cerca de tu teléfono, luego inicia el proceso.</string>
<string name="troubleshooter_ble_intro_start_action">Iniciar solucionador de problemas</string> <string name="troubleshooter_ble_intro_start_action">Iniciar solucionador de problemas</string>
@@ -113,6 +126,91 @@
<string name="onboarding_body3">CAPod no tiene anuncios y no recopila tus datos.</string> <string name="onboarding_body3">CAPod no tiene anuncios y no recopila tus datos.</string>
<string name="onboarding_body4">Puedes actualizar a CAPod Pro para obtener funciones adicionales y apoyar el desarrollo.</string> <string name="onboarding_body4">Puedes actualizar a CAPod Pro para obtener funciones adicionales y apoyar el desarrollo.</string>
<!-- Strings from app-common --> <!-- Strings from app-common -->
<string name="app_name">CAPod</string>
<string name="app_name_pro">CAPod Pro</string>
<string name="app_name_foss">CAPod FOSS</string>
<string name="general_value_not_available_label">No disponible</string>
<string name="general_error_label">Error</string>
<string name="general_grant_permission_action">Conceder el permiso</string>
<string name="general_manage_devices_action">Gestionar dispositivos</string>
<string name="overview_nomaindevice_label">Sin dispositivos configurados</string>
<string name="overview_nomaindevice_description">Configure su dispositivo para comenzar a supervisar los niveles de batería y habilitar funciones adicionales.</string>
<string name="overview_bluetooth_disabled_label">El Bluetooth está desactivado</string>
<string name="overview_bluetooth_disabled_description">El Bluetooth está desactivado, actívalo ;)</string>
<string name="overview_monitoring_active_label">Monitoreo de dispositivos</string>
<string name="overview_monitoring_active_description">Asegúrate de que tu dispositivo esté cerca y activo.</string>
<string name="overview_unmatched_devices_label">Dispositivos no emparejados</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="one">%d dispositivo sin perfil coincidente</item>
<item quantity="other">%d dispositivos sin perfil coincidentes</item>
</plurals>
<string name="permission_bluetooth_connect_label">Conexión Bluetooth</string>
<string name="permission_bluetooth_connect_description">Esta aplicación requiere el «Bluetooth» para interactuar con dispositivos emparejados e iniciar conexiones.</string>
<string name="permission_bluetooth_scan_label">El Bluetooth está escaneando</string>
<string name="permission_bluetooth_scan_description">El permiso \"Escaneo de Bluetooth\" permite que esta aplicación descubra y reciba datos de Bluetooth de dispositivos cercanos, como tus AirPods.</string>
<string name="permission_bluetooth_label">Bluetooth</string>
<string name="permission_bluetooth_description">Esta aplicación requiere el permiso \"Bluetooth\" para conectarse a dispositivos Bluetooth emparejados.</string>
<string name="permission_access_fine_location_label">Acceso preciso a tu ubicación</string>
<string name="permission_access_fine_location_description">CAPod utiliza el permiso de \"ubicación precisa\" para recibir datos de Bluetooth de bajo consumo. Tus auriculares utilizan la tecnología Bluetooth de bajo consumo para transmitir su estado. Esta aplicación NO utilizará datos de Bluetooth para determinar tu ubicación.</string>
<string name="permission_background_location_label">Acceso a la ubicación en segundo plano</string>
<string name="permission_background_location_description">CAPod utiliza el acceso a la ubicación en segundo plano para habilitar funciones como \"Mostrar ventana emergente\" y \"Conectar automáticamente\" mientras la aplicación está cerrada. Este acceso permite que la aplicación reciba datos de Bluetooth de bajo consumo mientras está en segundo plano. Esta aplicación NO utiliza datos de Bluetooth para determinar tu ubicación.</string>
<string name="permission_ignore_battery_optimizations_label">Desactivar las optimizaciones de la batería</string>
<string name="permission_ignore_battery_optimizations_description">Las optimizaciones de la batería impiden que esta aplicación reciba datos Bluetooth de forma fiable mientras se encuentra en segundo plano.</string>
<string name="permission_required_title">Se requiere el siguiente permiso:</string>
<string name="permission_system_alert_window_label">Ventana emergente</string>
<string name="permission_system_alert_window_description">Permite que CAPod se superponga a otras aplicaciones para que la función «Mostrar ventana emergente».</string>
<string name="settings_scanner_mode_lowpower_label">Baja energía</string>
<string name="settings_scanner_mode_balanced_label">Equilibrado</string>
<string name="settings_scanner_mode_lowlatency_label">Baja latencia</string>
<string name="settings_monitor_mode_manual_label">Cuando la aplicación está abierta</string>
<string name="settings_monitor_mode_automatic_label">Cuando el dispositivo está conectado</string>
<string name="settings_monitor_mode_always_label">Siempre</string>
<string name="settings_reaction_autoconnect_whenseen_label">Cuando está visible</string>
<string name="settings_reaction_autoconnect_caseopen_label">El estuche está abierto</string>
<string name="settings_reaction_autoconnect_inear_label">En el oído</string>
<string name="pods_dual_left_label">Auricular izquierdo</string>
<string name="pods_dual_right_label">Auricular derecho</string>
<string name="pods_case_label">Estuche</string>
<string name="pods_case_status_open_label">Abierto</string>
<string name="pods_case_status_closed_label">Cerrado</string>
<string name="pods_connection_state_disconnected_label">No está conectado a un dispositivo</string>
<string name="pods_connection_state_idle_label">Conectado a un dispositivo, pero inactivo</string>
<string name="pods_connection_state_music_label">Reproduciendo música</string>
<string name="pods_connection_state_call_label">En una llamada telefónica</string>
<string name="pods_connection_state_ringing_label">Sonando</string>
<string name="pods_connection_state_hanging_up_label">Colgando</string>
<string name="pods_connection_state_unknown_label">El estado de la conexión es desconocido</string>
<string name="pods_unknown_raw_data_label">Datos sin procesar</string>
<string name="pods_unknown_label">Dispositivo desconocido</string>
<string name="pods_unknown_contact_dev">Es un dispositivo desconocido, pero está utilizando un formato similar. Añadamos soporte para ello, contáctame :)</string>
<string name="pods_none_label_short">Sin dispositivo</string>
<string name="pods_charging_label">Cargando</string>
<string name="pods_inear_label">En el oído</string>
<string name="pods_microphone_label">Micrófono</string>
<string name="pods_yours">Tuyos</string>
<string name="headset_being_worn_label">En uso</string>
<string name="headset_not_being_worn_label">No se usan</string>
<string name="pods_case_unknown_state">Desconocido</string>
<string name="last_seen_x">Ultima vez conectado: %s</string>
<string name="first_seen_x">Primera vez conectados: %s</string>
<string name="permission_post_notifications_label">Mostrar las notificaciones</string>
<string name="permission_post_notifications_description">"Permitir que CAPod muestre notificaciones de tus AirPods, por ejemplo, su estado actual mientras están conectados."</string>
<!-- Device profiles --> <!-- Device profiles -->
<string name="profiles_empty_title">Sin perfiles de dispositivos configurados</string>
<string name="profiles_empty_description">Crear perfiles de dispositivos para administrar múltiples dispositivos con configuraciones y prioridades personalizadas.</string>
<string name="profiles_add_action">Añadir un perfil</string>
<string name="profiles_create_title">Crear un perfil</string>
<string name="profiles_name_label">Nombre del perfil</string>
<string name="profiles_name_default">Mis auriculares</string>
<string name="profiles_model_label">Modelo del dispositivo</string>
<string name="profiles_paired_device_label">Dispositivo emparejado</string>
<string name="profiles_paired_device_none">Ninguno</string>
<string name="profiles_paired_device_none_description">Ningún dispositivo seleccionado</string>
<string name="profiles_save_action">Guarda el perfil</string>
<string name="profiles_drag_handle_description">Arrastrar para reordenar</string>
<string name="profiles_delete_title">Eliminar el perfil</string>
<string name="profiles_delete_message">¿Estás seguro de que quieres eliminar este perfil? Esto no se puede deshacer.</string>
<string name="profiles_delete_action">Borrar</string>
<string name="profiles_basic_info_title">Información del dispositivo</string>
<!-- Unsaved changes dialog --> <!-- Unsaved changes dialog -->
</resources> </resources>
@@ -28,6 +28,8 @@
<string name="settings_autopause_description">Seadme kõrvast eemaldamisel peata esitamine.</string> <string name="settings_autopause_description">Seadme kõrvast eemaldamisel peata esitamine.</string>
<string name="settings_autopplay_label">Automaatne esitamine</string> <string name="settings_autopplay_label">Automaatne esitamine</string>
<string name="settings_autoplay_description">Automaatne esitamine, kui seade pannakse kõrva.</string> <string name="settings_autoplay_description">Automaatne esitamine, kui seade pannakse kõrva.</string>
<string name="settings_eardetection_info_label">Kõrva tuvastamisest</string>
<string name="settings_eardetection_info_description">Kui tuvastatakse vaid üks klapp, siis seda põhjustab Apple\'i piirang. Tuvastatakse vaid peamine klapp (kasutatakse mikrofonina). Seadista Apple\'i seadmetes: Seaded (Settings) → Bluetooth → AirPods (AirPodid) → Mikrofon (Microphone).</string>
<string name="settings_fake_data_label">Valeandmed</string> <string name="settings_fake_data_label">Valeandmed</string>
<string name="settings_fake_data_description">Näita valeandmeid, nt samad seadmed, mida pole olemas.</string> <string name="settings_fake_data_description">Näita valeandmeid, nt samad seadmed, mida pole olemas.</string>
<string name="settings_debug_label">Vealogide seaded</string> <string name="settings_debug_label">Vealogide seaded</string>
@@ -98,6 +100,10 @@
<string name="translators_thanks_title">Tõlkijad</string> <string name="translators_thanks_title">Tõlkijad</string>
<string name="translators_thanks_description">Olav</string> <string name="translators_thanks_description">Olav</string>
<string name="widget_description">Viimast teadaolevat seadme seisu näitab vidin.</string> <string name="widget_description">Viimast teadaolevat seadme seisu näitab vidin.</string>
<string name="widget_configuration_title">Vali seade</string>
<string name="widget_configuration_description">Valige, millist seadmeprofiili see vidin võiks kuvada.</string>
<string name="common_feature_requires_pro_msg">Selleks on vaja osta CAPod Pro.</string>
<string name="widget_no_data_label">Andmed puuduvad</string>
<string name="settings_compat_indirectcallback_title">Kaudsete andmete edastamine</string> <string name="settings_compat_indirectcallback_title">Kaudsete andmete edastamine</string>
<string name="settings_compat_indirectcallback_summary">Süsteemis vähem energiat tarbiva Bluetoothi andmete saamine muul viisil (edasta tagasi kutsumise asemel).</string> <string name="settings_compat_indirectcallback_summary">Süsteemis vähem energiat tarbiva Bluetoothi andmete saamine muul viisil (edasta tagasi kutsumise asemel).</string>
<string name="troubleshooter_title">Abistaja</string> <string name="troubleshooter_title">Abistaja</string>
@@ -134,6 +140,10 @@
<string name="overview_monitoring_active_label">Seadmete jälgimine</string> <string name="overview_monitoring_active_label">Seadmete jälgimine</string>
<string name="overview_monitoring_active_description">Veenduge, et seade oleks läheduses ja kasutusel.</string> <string name="overview_monitoring_active_description">Veenduge, et seade oleks läheduses ja kasutusel.</string>
<string name="overview_unmatched_devices_label">Omavahel sobimatud seadmed</string> <string name="overview_unmatched_devices_label">Omavahel sobimatud seadmed</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="one">%d seade ei kattu profiiliga</item>
<item quantity="other">%d seadet ei kattu profiiliga</item>
</plurals>
<string name="permission_bluetooth_connect_label">Bluetooth ühendus</string> <string name="permission_bluetooth_connect_label">Bluetooth ühendus</string>
<string name="permission_bluetooth_connect_description">See rakendus nõuab luba kasutada Bluetooh ühendust, et suhelda seotud seadmetega ja käivitada ühendamist.</string> <string name="permission_bluetooth_connect_description">See rakendus nõuab luba kasutada Bluetooh ühendust, et suhelda seotud seadmetega ja käivitada ühendamist.</string>
<string name="permission_bluetooth_scan_label">Bluetoothi skannimine</string> <string name="permission_bluetooth_scan_label">Bluetoothi skannimine</string>
+73 -5
View File
@@ -28,6 +28,8 @@
<string name="settings_autopause_description">기기를 귀에서 빼면 오디오를 일시 중지합니다.</string> <string name="settings_autopause_description">기기를 귀에서 빼면 오디오를 일시 중지합니다.</string>
<string name="settings_autopplay_label">자동 재생</string> <string name="settings_autopplay_label">자동 재생</string>
<string name="settings_autoplay_description">기기를 착용하면 오디오 재생을 시작합니다.</string> <string name="settings_autoplay_description">기기를 착용하면 오디오 재생을 시작합니다.</string>
<string name="settings_eardetection_info_label">착용 감지 알림</string>
<string name="settings_eardetection_info_description">Apple의 제한으로 착용 감지가 마이크를 이용하는 데 사용되는 한쪽 유닛만 작동할 수 있습니다. Apple 기기에서 다음에 따라 설정할 수 있습니다. 설정 → 블루투스 → Airpods → 마이크</string>
<string name="settings_fake_data_label">가짜 데이터</string> <string name="settings_fake_data_label">가짜 데이터</string>
<string name="settings_fake_data_description">가짜 데이터를 표시합니다. 즉, 존재하지 않는 기기를 시뮬레이션합니다.</string> <string name="settings_fake_data_description">가짜 데이터를 표시합니다. 즉, 존재하지 않는 기기를 시뮬레이션합니다.</string>
<string name="settings_debug_label">디버그 설정</string> <string name="settings_debug_label">디버그 설정</string>
@@ -35,7 +37,7 @@
<string name="settings_signal_minimum_label">최소 신호 품질</string> <string name="settings_signal_minimum_label">최소 신호 품질</string>
<string name="settings_signal_minimum_description">기기가 사용자의 것으로 간주되기 위해 필요한 최소 신호 품질입니다.</string> <string name="settings_signal_minimum_description">기기가 사용자의 것으로 간주되기 위해 필요한 최소 신호 품질입니다.</string>
<string name="settings_autoconnect_label">자동 연결</string> <string name="settings_autoconnect_label">자동 연결</string>
<string name="settings_autoconnect_description">Android가 자동으로 연결되지 않으면 저희도 요청할 수 있습니다. 이렇게 하면 모니터 모드 설정이 \"항상\"으로 설정됩니다.</string> <string name="settings_autoconnect_description">Android가 자동으로 연결되지 않으면 저희도 요청할 수 있습니다. 이렇게 하면 모니터 모드 설정이 \"항상\"으로 설정됩니다.</string>
<string name="settings_autoconnect_condition_label">자동 연결 조건</string> <string name="settings_autoconnect_condition_label">자동 연결 조건</string>
<string name="settings_autoconnect_condition_description">언제 기기에 연결을 시도해야 할까요?</string> <string name="settings_autoconnect_condition_description">언제 기기에 연결을 시도해야 할까요?</string>
<string name="settings_devices_label">장치</string> <string name="settings_devices_label">장치</string>
@@ -49,7 +51,7 @@
<string name="settings_compat_offloaded_filtering_disabled_summary">데이터 필터링을 시스템에 위임하지 말고 대신 모든 데이터를 가져와 앱 내에서 필터링합니다.</string> <string name="settings_compat_offloaded_filtering_disabled_summary">데이터 필터링을 시스템에 위임하지 말고 대신 모든 데이터를 가져와 앱 내에서 필터링합니다.</string>
<string name="settings_compat_offloaded_batching_disabled_title">하드웨어 일괄 처리 비활성화</string> <string name="settings_compat_offloaded_batching_disabled_title">하드웨어 일괄 처리 비활성화</string>
<string name="settings_compat_offloaded_batching_disabled_summary">수집된 BLE 데이터를 저희에게 전달하기 전에 시스템이 그룹화하도록 허용하지 마십시오.</string> <string name="settings_compat_offloaded_batching_disabled_summary">수집된 BLE 데이터를 저희에게 전달하기 전에 시스템이 그룹화하도록 허용하지 마십시오.</string>
<string name="settings_onepod_mode_label">단일 Pod 모드</string> <string name="settings_onepod_mode_label">단일 유닛 모드</string>
<string name="settings_onepod_mode_description">양쪽 기기를 모두 착용할 필요 없이 한쪽만 착용해도 앱이 반응합니다.</string> <string name="settings_onepod_mode_description">양쪽 기기를 모두 착용할 필요 없이 한쪽만 착용해도 앱이 반응합니다.</string>
<string name="settings_popup_caseopen_label">케이스 팝업 표시</string> <string name="settings_popup_caseopen_label">케이스 팝업 표시</string>
<string name="settings_popup_caseopen_description">기기 케이스를 열면 팝업을 표시합니다(실험적).</string> <string name="settings_popup_caseopen_description">기기 케이스를 열면 팝업을 표시합니다(실험적).</string>
@@ -98,6 +100,10 @@
<string name="translators_thanks_title">번역가</string> <string name="translators_thanks_title">번역가</string>
<string name="translators_thanks_description">윤지호(annyeong1alt@gmail.com)</string> <string name="translators_thanks_description">윤지호(annyeong1alt@gmail.com)</string>
<string name="widget_description">마지막으로 알려진 기기 상태를 표시하는 위젯입니다.</string> <string name="widget_description">마지막으로 알려진 기기 상태를 표시하는 위젯입니다.</string>
<string name="widget_configuration_title">기기 선택</string>
<string name="widget_configuration_description">이 위젯에 표시할 기기 프로필을 선택해 주세요.</string>
<string name="common_feature_requires_pro_msg">이 기능을 사용하기 위해 CAPod Pro가 필요합니다.</string>
<string name="widget_no_data_label">데이터 없음</string>
<string name="settings_compat_indirectcallback_title">간접 데이터 전달</string> <string name="settings_compat_indirectcallback_title">간접 데이터 전달</string>
<string name="settings_compat_indirectcallback_summary">시스템에서 BLE 데이터를 수신하는 대체 방법을 사용합니다(콜백 대신 브로드캐스트).</string> <string name="settings_compat_indirectcallback_summary">시스템에서 BLE 데이터를 수신하는 대체 방법을 사용합니다(콜백 대신 브로드캐스트).</string>
<string name="troubleshooter_title">문제 해결사</string> <string name="troubleshooter_title">문제 해결사</string>
@@ -130,15 +136,27 @@
<string name="overview_nomaindevice_label">설정된 장치가 없음</string> <string name="overview_nomaindevice_label">설정된 장치가 없음</string>
<string name="overview_nomaindevice_description">배터리 잔량 감시와 추가 기능을 활성화하기 위해 당신의 장치를 설정하십시오.</string> <string name="overview_nomaindevice_description">배터리 잔량 감시와 추가 기능을 활성화하기 위해 당신의 장치를 설정하십시오.</string>
<string name="overview_bluetooth_disabled_label">Bluetooth가 꺼져 있습니다</string> <string name="overview_bluetooth_disabled_label">Bluetooth가 꺼져 있습니다</string>
<string name="overview_monitoring_active_label">장치 감시중</string> <string name="overview_bluetooth_disabled_description">블루투스를 켜야 연결할 수 있어요 ;)</string>
<string name="overview_monitoring_active_label">기기 모니터링 중</string>
<string name="overview_monitoring_active_description">기기가 켜진 상태에서 가까이 위치해 있는지 확인해 주세요.</string>
<string name="overview_unmatched_devices_label">일치하지 않는 기기</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="other">%d프로필과 일치하지 않는 기기</item>
</plurals>
<string name="permission_bluetooth_connect_label">블루투스 연결</string> <string name="permission_bluetooth_connect_label">블루투스 연결</string>
<string name="permission_bluetooth_connect_description">이 앱은 페어링된 기기와 상호작용하고 연결을 시작하기 위해 \"Bluetooth 연결\"권한을 필요로 합니다.</string> <string name="permission_bluetooth_connect_description">이 앱은 페어링 된 기기와 상호작용하고 연결을 시작하기 위해 \"Bluetooth 연결\"권한을 필요로 합니다.</string>
<string name="permission_bluetooth_scan_label">Bluetooth 검색</string> <string name="permission_bluetooth_scan_label">Bluetooth 검색</string>
<string name="permission_bluetooth_scan_description">\"Bluetooth 검색\" 권한은 앱이 당신의 AirPods같은 주변의 기기를 찾고 Bluetooth 데이터를 받도록 합니다.</string> <string name="permission_bluetooth_scan_description">\"Bluetooth 검색\" 권한은 앱이 당신의 AirPods같은 주변의 기기를 찾고 Bluetooth 데이터를 받도록 합니다.</string>
<string name="permission_bluetooth_label">Bluetooth</string> <string name="permission_bluetooth_label">Bluetooth</string>
<string name="permission_bluetooth_description">이 앱은 페어링 된 기기에 접근하기 위해 블루투스 권한을 필요로 합니다.</string>
<string name="permission_access_fine_location_label">정밀 위치 접근</string>
<string name="permission_access_fine_location_description">CAPod는 BLE 정보를 받기 위해 정밀 위치 접근 권한을 사용합니다. 앱은 블루투스 헤드폰의 BLE 기술을 사용해 기기의 상태에 접근합니다. CAPod는 이 권한으로 사용자의 위치를 확인하지 않습니다.</string>
<string name="permission_background_location_label">백그라운드 위치 접근</string>
<string name="permission_background_location_description">CAPod는 팝업 보기나 자동 연결과 같은 기능을 앱이 꺼져있는 상태에서도 사용할 수 있게 하기 위해 백그라운드 위치 접근 권한을 사용합니다. 백그라운드 위치 접근 권한은 백그라운드에서도 BLE 정보를 받을 수 있게 합니다. CAPod는 이 권한으로 사용자의 위치를 확인하지 않습니다.</string>
<string name="permission_ignore_battery_optimizations_label">배터리 사용량 최적화 비활성화</string> <string name="permission_ignore_battery_optimizations_label">배터리 사용량 최적화 비활성화</string>
<string name="permission_ignore_battery_optimizations_description">배터리 사용량 최적화는 앱이 백그라운드에서 Bluetooth 신호를 지속적으로 받지 못하게 합니다.</string> <string name="permission_ignore_battery_optimizations_description">배터리 사용량 최적화는 앱이 백그라운드에서 Bluetooth 신호를 지속적으로 받지 못하게 합니다.</string>
<string name="permission_required_title">다음과 같은 권한이 필요합니다:</string> <string name="permission_required_title">다음과 같은 권한이 필요합니다:</string>
<string name="permission_system_alert_window_label">시스템 알림창</string>
<string name="permission_system_alert_window_description">\"팝업 표시\" 기능을 사용하려면 다른 앱 위에 그리기를 허용해야 합니다.</string> <string name="permission_system_alert_window_description">\"팝업 표시\" 기능을 사용하려면 다른 앱 위에 그리기를 허용해야 합니다.</string>
<string name="settings_scanner_mode_lowpower_label">저전력</string> <string name="settings_scanner_mode_lowpower_label">저전력</string>
<string name="settings_scanner_mode_balanced_label">균형잡힌</string> <string name="settings_scanner_mode_balanced_label">균형잡힌</string>
@@ -148,12 +166,57 @@
<string name="settings_monitor_mode_always_label">항상</string> <string name="settings_monitor_mode_always_label">항상</string>
<string name="settings_reaction_autoconnect_whenseen_label">앱이 장치를 찾았을때</string> <string name="settings_reaction_autoconnect_whenseen_label">앱이 장치를 찾았을때</string>
<string name="settings_reaction_autoconnect_caseopen_label">케이스가 열렸을때</string> <string name="settings_reaction_autoconnect_caseopen_label">케이스가 열렸을때</string>
<string name="settings_reaction_autoconnect_inear_label">귀에 착용했을때</string> <string name="settings_reaction_autoconnect_inear_label">귀에 착용했을 </string>
<string name="pods_dual_left_label">왼쪽 유닛</string> <string name="pods_dual_left_label">왼쪽 유닛</string>
<string name="pods_dual_right_label">오른쪽 유닛</string> <string name="pods_dual_right_label">오른쪽 유닛</string>
<string name="pods_case_label">케이스</string> <string name="pods_case_label">케이스</string>
<string name="pods_case_status_open_label">열림</string> <string name="pods_case_status_open_label">열림</string>
<string name="pods_case_status_closed_label">닫힘</string>
<string name="pods_connection_state_disconnected_label">연결되지 않음</string>
<string name="pods_connection_state_idle_label">대기 모드</string>
<string name="pods_connection_state_music_label">음악 모드</string>
<string name="pods_connection_state_call_label">통화 모드</string>
<string name="pods_connection_state_ringing_label">수신 중</string>
<string name="pods_connection_state_hanging_up_label">끊는 중</string>
<string name="pods_connection_state_unknown_label">연결 상태 알 수 없음</string>
<string name="pods_unknown_raw_data_label">Raw data</string>
<string name="pods_unknown_label">알 수 없는 기기</string>
<string name="pods_unknown_contact_dev">알 수 없는 기기이나 비슷한 형식으로 정보를 보내는 기기인 것 같습니다. 제게 알려주시면 앱에 해당 기기 지원을 추가해 드릴게요 :)</string>
<string name="pods_none_label_short">기기 없음</string>
<string name="pods_charging_label">충전 중</string>
<string name="pods_inear_label">착용 중</string>
<string name="pods_microphone_label">마이크</string>
<string name="pods_yours">내 기기</string>
<string name="headset_being_worn_label">착용 중</string>
<string name="headset_not_being_worn_label">착용하지 않음</string>
<string name="pods_case_unknown_state">알 수 없는 상태</string>
<string name="last_seen_x">마지막 업데이트: %s</string>
<string name="first_seen_x">처음 업데이트: %s</string>
<string name="permission_post_notifications_label">알림 표시</string>
<string name="permission_post_notifications_description">"CAPod이 현재 연결 상태 등 AirPods에 대한 알림을 표시할 수 있도록 허용합니다."</string>
<!-- Device profiles --> <!-- Device profiles -->
<string name="profiles_empty_title">기기 프로필이 설정되지 않음</string>
<string name="profiles_empty_description">여러 기기를 설정하고 우선순위를 지정하기 위해 기기 프로필을 생성하세요.</string>
<string name="profiles_add_action">프로필 추가</string>
<string name="profiles_create_title">프로필 생성</string>
<string name="profiles_name_label">프로필 이름</string>
<string name="profiles_name_default">나의 헤드폰</string>
<string name="profiles_model_label">기기 모델</string>
<string name="profiles_paired_device_label">페어링 된 기기</string>
<string name="profiles_paired_device_none">없음</string>
<string name="profiles_paired_device_none_description">선택된 기기가 없습니다.</string>
<string name="profiles_save_action">프로필 저장</string>
<string name="profiles_drag_handle_description">드래그하여 순서 변경</string>
<string name="profiles_delete_title">프로필 삭제</string>
<string name="profiles_delete_message">프로필을 삭제하시겠습니까?
이 작업은 취소할 수 없습니다.</string>
<string name="profiles_delete_action">삭제</string>
<string name="profiles_basic_info_title">기기 정보</string>
<string name="profiles_basic_info_description">기기의 이름, 모델 및 선택적 블루투스 페어링을 설정하세요.</string>
<string name="profiles_signal_quality_title">최소 신호 품질</string>
<string name="profiles_signal_quality_description">이 수치 이상의 신호 세기를 가진 기기만이 감지 됩니다. 낮은 값은 감지 범위를 넓히지만, 오탐을 일으킬 수 있습니다. 너무 높은 값은 블루투스 수신이 거리와 장애물에 민감하기에 권장하지 않습니다.</string>
<string name="profiles_identitykey_label">ID 키</string>
<string name="profilessettings_maindevice_identitykey_description">기기의 ID 확인 키(IRK)로, CAPod가 주변 기기 중에서 해당 기기를 식별하는 데 도움이 됩니다.</string>
<string name="profiles_maindevice_identitykey_explanation">AirPods은 개인정보 보호를 위해 자주 Bluetooth 주소를 변경합니다. IRK는 앱이 당신의 기기를 인식하는데 도움이 됩니다. MacBook을 잠깐 사용해야 합니다.</string> <string name="profiles_maindevice_identitykey_explanation">AirPods은 개인정보 보호를 위해 자주 Bluetooth 주소를 변경합니다. IRK는 앱이 당신의 기기를 인식하는데 도움이 됩니다. MacBook을 잠깐 사용해야 합니다.</string>
<string name="profiles_maindevice_encryptionkey_label">암호화 키</string> <string name="profiles_maindevice_encryptionkey_label">암호화 키</string>
<string name="profiles_maindevice_encryptionkey_description">당신의 기기의 암호화 키. 앱이 구체적인 상태 정보를 불러올 수 있게 합니다.</string> <string name="profiles_maindevice_encryptionkey_description">당신의 기기의 암호화 키. 앱이 구체적인 상태 정보를 불러올 수 있게 합니다.</string>
@@ -163,4 +226,9 @@
<string name="profiles_priority_hint">프로필 순서는 우선순위를 결정합니다. 프로필을 드래그하여 순서를 변경하세요. <string name="profiles_priority_hint">프로필 순서는 우선순위를 결정합니다. 프로필을 드래그하여 순서를 변경하세요.
리스트의 위에 있을수록 여러 장치가 일치할때 우선순위가 높습니다.</string> 리스트의 위에 있을수록 여러 장치가 일치할때 우선순위가 높습니다.</string>
<!-- Unsaved changes dialog --> <!-- Unsaved changes dialog -->
<string name="general_unsaved_changes_title">저장되지 않은 변경 사항</string>
<string name="general_unsaved_changes_message">저장되지 않은 변경 사항이 있습니다. 어떻게 하시겠습니까?</string>
<string name="general_save_and_exit_action">저장 &amp; 종료</string>
<string name="general_discard_action">무시</string>
<string name="general_keep_editing_action">계속 수정하기</string>
</resources> </resources>
+21
View File
@@ -28,6 +28,8 @@
<string name="settings_autopause_description">Pauzeer de muziek wanneer u het apparaat van uw oor haalt.</string> <string name="settings_autopause_description">Pauzeer de muziek wanneer u het apparaat van uw oor haalt.</string>
<string name="settings_autopplay_label">Automatisch afspelen</string> <string name="settings_autopplay_label">Automatisch afspelen</string>
<string name="settings_autoplay_description">Start audioweergave wanneer het apparaat wordt gedragen.</string> <string name="settings_autoplay_description">Start audioweergave wanneer het apparaat wordt gedragen.</string>
<string name="settings_eardetection_info_label">Ear detectie notitie</string>
<string name="settings_eardetection_info_description">Als oordetectie slechts voor één pod werkt, is dit een beperking van Apple. Alleen de \"primaire pod\" (gebruikt voor de microfoon) wordt gedetecteerd. Configureer op Apple-apparaten: Instellingen → Bluetooth → AirPods → Microfoon.</string>
<string name="settings_fake_data_label">Nep gegevens</string> <string name="settings_fake_data_label">Nep gegevens</string>
<string name="settings_fake_data_description">Toon nepgegevens, d.w.z. simuleer apparaten die niet bestaan.</string> <string name="settings_fake_data_description">Toon nepgegevens, d.w.z. simuleer apparaten die niet bestaan.</string>
<string name="settings_debug_label">Foutopsporingsinstellingen</string> <string name="settings_debug_label">Foutopsporingsinstellingen</string>
@@ -98,6 +100,10 @@
<string name="translators_thanks_title">Vertalers</string> <string name="translators_thanks_title">Vertalers</string>
<string name="translators_thanks_description">darken</string> <string name="translators_thanks_description">darken</string>
<string name="widget_description">Een widget dat de laatst gekende apparaatstatus toont.</string> <string name="widget_description">Een widget dat de laatst gekende apparaatstatus toont.</string>
<string name="widget_configuration_title">Selecteer Apparaat</string>
<string name="widget_configuration_description">Kies welk apparaatprofiel deze widget moet weergeven.</string>
<string name="common_feature_requires_pro_msg">Voor deze functie is CAPod Pro vereist.</string>
<string name="widget_no_data_label">Geen data</string>
<string name="settings_compat_indirectcallback_title">Onrechtstreekse data aflevering</string> <string name="settings_compat_indirectcallback_title">Onrechtstreekse data aflevering</string>
<string name="settings_compat_indirectcallback_summary">Gebruik een alternatieve methode om BLE data van het systeem (broadcast inplaats van callback).</string> <string name="settings_compat_indirectcallback_summary">Gebruik een alternatieve methode om BLE data van het systeem (broadcast inplaats van callback).</string>
<string name="troubleshooter_title">Probleemoplossing</string> <string name="troubleshooter_title">Probleemoplossing</string>
@@ -134,6 +140,10 @@
<string name="overview_monitoring_active_label">Monitoring voor apparaten</string> <string name="overview_monitoring_active_label">Monitoring voor apparaten</string>
<string name="overview_monitoring_active_description">Zorg ervoor dat je apparaat in de buurt is en actief is.</string> <string name="overview_monitoring_active_description">Zorg ervoor dat je apparaat in de buurt is en actief is.</string>
<string name="overview_unmatched_devices_label">Niet overeenkomende apparaten</string> <string name="overview_unmatched_devices_label">Niet overeenkomende apparaten</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="one">%d apparaat zonder overeenkomend profiel</item>
<item quantity="other">%d apparaten zonder overeenkomend profiel</item>
</plurals>
<string name="permission_bluetooth_connect_label">Bluetooth-verbinding</string> <string name="permission_bluetooth_connect_label">Bluetooth-verbinding</string>
<string name="permission_bluetooth_connect_description">Deze app heeft de toestemming voor \'Bluetooth verbinden\' nodig om met gekoppelde apparaten te communiceren en verbindingen tot stand te brengen.</string> <string name="permission_bluetooth_connect_description">Deze app heeft de toestemming voor \'Bluetooth verbinden\' nodig om met gekoppelde apparaten te communiceren en verbindingen tot stand te brengen.</string>
<string name="permission_bluetooth_scan_label">Bluetooth-scannen</string> <string name="permission_bluetooth_scan_label">Bluetooth-scannen</string>
@@ -159,6 +169,17 @@
<string name="settings_reaction_autoconnect_caseopen_label">Zaak is geopend</string> <string name="settings_reaction_autoconnect_caseopen_label">Zaak is geopend</string>
<string name="settings_reaction_autoconnect_inear_label">In oor</string> <string name="settings_reaction_autoconnect_inear_label">In oor</string>
<string name="pods_dual_left_label">Linker pod</string> <string name="pods_dual_left_label">Linker pod</string>
<string name="pods_dual_right_label">Rechter pod</string>
<string name="pods_case_label">Geval</string>
<string name="pods_case_status_open_label">Open</string>
<string name="pods_case_status_closed_label">Gesloten</string>
<string name="pods_connection_state_disconnected_label">Niet verbonden met een apparaat</string>
<string name="pods_connection_state_idle_label">Aangesloten op een apparaat, maar inactief</string>
<string name="pods_connection_state_music_label">In muziekmodus</string>
<string name="pods_connection_state_call_label">In oproepmodus</string>
<string name="pods_connection_state_ringing_label">Rinkelen</string>
<string name="pods_connection_state_hanging_up_label">Ophangen</string>
<string name="pods_connection_state_unknown_label">Onbekende verbindingsstatus</string>
<!-- Device profiles --> <!-- Device profiles -->
<string name="profiles_maindevice_encryptionkey_explanation">AirPods sturen een statusbericht, waarvan een deel versleuteld is. De encryptiesleutel stelt CAPod in staat het volledige bericht te ontsleutelen. Je hebt hiervoor eenmalige toegang tot een MacBook nodig.</string> <string name="profiles_maindevice_encryptionkey_explanation">AirPods sturen een statusbericht, waarvan een deel versleuteld is. De encryptiesleutel stelt CAPod in staat het volledige bericht te ontsleutelen. Je hebt hiervoor eenmalige toegang tot een MacBook nodig.</string>
<string name="profiles_key_invalid_format">Ongeldige sleutelindeling</string> <string name="profiles_key_invalid_format">Ongeldige sleutelindeling</string>
+12
View File
@@ -28,6 +28,8 @@
<string name="settings_autopause_description">Pauzuj odtwarzanie, gdy urządzenia jest wyciągane z ucha.</string> <string name="settings_autopause_description">Pauzuj odtwarzanie, gdy urządzenia jest wyciągane z ucha.</string>
<string name="settings_autopplay_label">Automatyczne odtwarzanie</string> <string name="settings_autopplay_label">Automatyczne odtwarzanie</string>
<string name="settings_autoplay_description">Rozpocznij odtwarzanie, gdy urządzenie jest noszone.</string> <string name="settings_autoplay_description">Rozpocznij odtwarzanie, gdy urządzenie jest noszone.</string>
<string name="settings_eardetection_info_label">Informacja o wykryciu ucha</string>
<string name="settings_eardetection_info_description">Jeśli wykrywanie ucha działa tylko dla jednego poda, jest to ograniczenie Apple\'a. Wykryto tylko \"pod\" (używany do mikrofonu). Skonfiguruj na urządzeniach Apple: Ustawienia → Bluetooth → AirPods → Microphone.</string>
<string name="settings_fake_data_label">Fałszywe dane</string> <string name="settings_fake_data_label">Fałszywe dane</string>
<string name="settings_fake_data_description">Wyświetla fałszywe dane, na przykłady symuluje urządzenie, które nie istnieje.</string> <string name="settings_fake_data_description">Wyświetla fałszywe dane, na przykłady symuluje urządzenie, które nie istnieje.</string>
<string name="settings_debug_label">Ustawienia debugowania</string> <string name="settings_debug_label">Ustawienia debugowania</string>
@@ -98,6 +100,10 @@
<string name="translators_thanks_title">Tłumacze</string> <string name="translators_thanks_title">Tłumacze</string>
<string name="translators_thanks_description">darken; K4r0lSz;</string> <string name="translators_thanks_description">darken; K4r0lSz;</string>
<string name="widget_description">Widżet pokazujący ostatni znany stan urządzenia.</string> <string name="widget_description">Widżet pokazujący ostatni znany stan urządzenia.</string>
<string name="widget_configuration_title">Wybierz urządzenie</string>
<string name="widget_configuration_description">Wybierz profil urządzenia, które ma być wyświetlane przez widżet.</string>
<string name="common_feature_requires_pro_msg">Funkcja wymaga CAPod Pro.</string>
<string name="widget_no_data_label">Brak danych</string>
<string name="settings_compat_indirectcallback_title">Pośrednie dostarczanie danych</string> <string name="settings_compat_indirectcallback_title">Pośrednie dostarczanie danych</string>
<string name="settings_compat_indirectcallback_summary">Użyj alternatywnej metody odbierania danych BLE z systemu (transmisja zamiast połączenia zwrotnego).</string> <string name="settings_compat_indirectcallback_summary">Użyj alternatywnej metody odbierania danych BLE z systemu (transmisja zamiast połączenia zwrotnego).</string>
<string name="troubleshooter_title">Rozwiązywanie problemów</string> <string name="troubleshooter_title">Rozwiązywanie problemów</string>
@@ -134,6 +140,12 @@
<string name="overview_monitoring_active_label">Monitorowanie urządzeń</string> <string name="overview_monitoring_active_label">Monitorowanie urządzeń</string>
<string name="overview_monitoring_active_description">Upewnij się, że urządzenie znajduje się w pobliżu i jest aktywne.</string> <string name="overview_monitoring_active_description">Upewnij się, że urządzenie znajduje się w pobliżu i jest aktywne.</string>
<string name="overview_unmatched_devices_label">Niedopasowane urządzenia</string> <string name="overview_unmatched_devices_label">Niedopasowane urządzenia</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="one">%d urządzenie bez pasującego profilu</item>
<item quantity="few">%d urządzenia bez pasującego profilu</item>
<item quantity="many">%d urządzeń bez pasującego profilu</item>
<item quantity="other">%d urządzeń bez pasującego profilu</item>
</plurals>
<string name="permission_bluetooth_connect_label">Połączenie Bluetooth</string> <string name="permission_bluetooth_connect_label">Połączenie Bluetooth</string>
<string name="permission_bluetooth_connect_description">Aplikacja wymaga uprawnień do \"Połączenia Bluetooth\", aby oddziaływać na sparowane urządzenia i inicjować połączenia.</string> <string name="permission_bluetooth_connect_description">Aplikacja wymaga uprawnień do \"Połączenia Bluetooth\", aby oddziaływać na sparowane urządzenia i inicjować połączenia.</string>
<string name="permission_bluetooth_scan_label">Skanowanie Bluetooth</string> <string name="permission_bluetooth_scan_label">Skanowanie Bluetooth</string>
+5
View File
@@ -28,6 +28,8 @@
<string name="settings_autopause_description">Приостановка аудио при удалении устройства из уха.</string> <string name="settings_autopause_description">Приостановка аудио при удалении устройства из уха.</string>
<string name="settings_autopplay_label">Автовоспроизведение</string> <string name="settings_autopplay_label">Автовоспроизведение</string>
<string name="settings_autoplay_description">Включение воспроизведения аудио при начале использования устройства.</string> <string name="settings_autoplay_description">Включение воспроизведения аудио при начале использования устройства.</string>
<string name="settings_eardetection_info_label">Уведомление об обнаружении уха</string>
<string name="settings_eardetection_info_description">Если обнаружение уха работает только для одного наушника, это ограничение Apple. Обнаруживается только \"основной наушник\" (используемый для микрофона). Настроить на устройствах Apple: Настройки → Bluetooth → AirPods → Микрофон.</string>
<string name="settings_fake_data_label">Пустые данные</string> <string name="settings_fake_data_label">Пустые данные</string>
<string name="settings_fake_data_description">Показывать пустые данные, например, симулировать устройства, которые не существуют.</string> <string name="settings_fake_data_description">Показывать пустые данные, например, симулировать устройства, которые не существуют.</string>
<string name="settings_debug_label">Настройки отладки</string> <string name="settings_debug_label">Настройки отладки</string>
@@ -99,6 +101,9 @@
<string name="translators_thanks_description">gaich <string name="translators_thanks_description">gaich
AL_Cool_T</string> AL_Cool_T</string>
<string name="widget_description">Виджет показывающий последний известный статус устройства.</string> <string name="widget_description">Виджет показывающий последний известный статус устройства.</string>
<string name="widget_configuration_title">Выберите устройство</string>
<string name="widget_configuration_description">Выберите, какой профиль устройства должен отображать виджет.</string>
<string name="common_feature_requires_pro_msg">Эта функция требует CAPod Pro.</string>
<string name="settings_compat_indirectcallback_title">Косвенная доставка данных</string> <string name="settings_compat_indirectcallback_title">Косвенная доставка данных</string>
<string name="settings_compat_indirectcallback_summary">Использовать альтернативный метод для получения данных BLE системы (широковещательная рассылка вместо обратного вызова).</string> <string name="settings_compat_indirectcallback_summary">Использовать альтернативный метод для получения данных BLE системы (широковещательная рассылка вместо обратного вызова).</string>
<string name="troubleshooter_title">Помощник</string> <string name="troubleshooter_title">Помощник</string>
+117 -1
View File
@@ -2,6 +2,7 @@
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="general_share_action">分享</string> <string name="general_share_action">分享</string>
<string name="general_done_action">完成</string> <string name="general_done_action">完成</string>
<string name="general_cancel_action">取消</string>
<string name="general_copy_action">复制</string> <string name="general_copy_action">复制</string>
<string name="general_thank_you_label">谢谢你</string> <string name="general_thank_you_label">谢谢你</string>
<string name="general_upgrade_action">升级</string> <string name="general_upgrade_action">升级</string>
@@ -10,6 +11,8 @@
<string name="general_save_action">保存</string> <string name="general_save_action">保存</string>
<string name="general_guide_action">指南</string> <string name="general_guide_action">指南</string>
<string name="general_continue_action">继续</string> <string name="general_continue_action">继续</string>
<string name="general_show_action">显示</string>
<string name="general_hide_action">隐藏</string>
<string name="general_example_label">例如:%s</string> <string name="general_example_label">例如:%s</string>
<string name="upgrade_capod_label">升级 CAPod</string> <string name="upgrade_capod_label">升级 CAPod</string>
<string name="upgrade_capod_description">享用额外的功能并支持开发者。</string> <string name="upgrade_capod_description">享用额外的功能并支持开发者。</string>
@@ -17,12 +20,16 @@
<string name="settings_monitor_mode_description">决定本应用在何时收听蓝牙数据。</string> <string name="settings_monitor_mode_description">决定本应用在何时收听蓝牙数据。</string>
<string name="settings_monitor_connected_notification_label">额外通知</string> <string name="settings_monitor_connected_notification_label">额外通知</string>
<string name="settings_monitor_connected_notification_description">在设备连接时显示一条额外通知。这使您可以禁用“设备状态”通道来隐藏永久性的“无设备”通知。</string> <string name="settings_monitor_connected_notification_description">在设备连接时显示一条额外通知。这使您可以禁用“设备状态”通道来隐藏永久性的“无设备”通知。</string>
<string name="settings_keep_notification_after_disconnect_label">断开连接后保持通知</string>
<string name="settings_keep_notification_after_disconnect_description">即使您的 AirPods 断开连接,继续显示上次已知的电池电量水平</string>
<string name="settings_scanner_mode_label">扫描模式</string> <string name="settings_scanner_mode_label">扫描模式</string>
<string name="settings_scanner_mode_description">低功耗蓝牙数据扫描器应着重性能还是省电?</string> <string name="settings_scanner_mode_description">低功耗蓝牙数据扫描器应着重性能还是省电?</string>
<string name="settings_autopause_label">自动暂停</string> <string name="settings_autopause_label">自动暂停</string>
<string name="settings_autopause_description">从耳中取出时自动暂停音频播放</string> <string name="settings_autopause_description">从耳中取出时自动暂停音频播放</string>
<string name="settings_autopplay_label">自动播放</string> <string name="settings_autopplay_label">自动播放</string>
<string name="settings_autoplay_description">戴在耳上时自动开始音频播放</string> <string name="settings_autoplay_description">戴在耳上时自动开始音频播放</string>
<string name="settings_eardetection_info_label">耳机探测通知</string>
<string name="settings_eardetection_info_description">如果耳朵检测只能用于一个耳机,这是苹果限制。只检测到“主耳机”(用于麦克风)。 在苹果设备上配置:设置 → 蓝牙 → AirPoods → 麦克风。</string>
<string name="settings_fake_data_label">假数据</string> <string name="settings_fake_data_label">假数据</string>
<string name="settings_fake_data_description">显示伪造的数据,即模拟不存在的设备</string> <string name="settings_fake_data_description">显示伪造的数据,即模拟不存在的设备</string>
<string name="settings_debug_label">调试设置</string> <string name="settings_debug_label">调试设置</string>
@@ -33,6 +40,8 @@
<string name="settings_autoconnect_description">如果安卓未自动连接,应用会自动询问。这会将监控模式设为“始终”</string> <string name="settings_autoconnect_description">如果安卓未自动连接,应用会自动询问。这会将监控模式设为“始终”</string>
<string name="settings_autoconnect_condition_label">自动连接条件</string> <string name="settings_autoconnect_condition_label">自动连接条件</string>
<string name="settings_autoconnect_condition_description">何时连接到您的设备?</string> <string name="settings_autoconnect_condition_description">何时连接到您的设备?</string>
<string name="settings_devices_label">设备</string>
<string name="settings_devices_description">管理您的设备。</string>
<string name="settings_reaction_label">动作</string> <string name="settings_reaction_label">动作</string>
<string name="settings_reaction_description">响应事件和行为的动作。</string> <string name="settings_reaction_description">响应事件和行为的动作。</string>
<string name="settings_category_yourdevice_label">您的设备</string> <string name="settings_category_yourdevice_label">您的设备</string>
@@ -67,6 +76,7 @@
<string name="settings_support_description">如果你需要一些帮助。</string> <string name="settings_support_description">如果你需要一些帮助。</string>
<string name="issue_tracker_label">问题追踪器</string> <string name="issue_tracker_label">问题追踪器</string>
<string name="issue_tracker_description">用于缺陷报告和功能请求的问题追踪系统(仅限英语)。</string> <string name="issue_tracker_description">用于缺陷报告和功能请求的问题追踪系统(仅限英语)。</string>
<string name="discord_label">Discord</string>
<string name="discord_description">一个闲聊和提问的去处</string> <string name="discord_description">一个闲聊和提问的去处</string>
<string name="changelog_label">更新日志</string> <string name="changelog_label">更新日志</string>
<string name="settings_label">设置</string> <string name="settings_label">设置</string>
@@ -88,11 +98,16 @@
<string name="help_translate_label">翻译</string> <string name="help_translate_label">翻译</string>
<string name="help_translate_description">帮助翻译本应用</string> <string name="help_translate_description">帮助翻译本应用</string>
<string name="translators_thanks_title">翻译人员</string> <string name="translators_thanks_title">翻译人员</string>
<string name="translators_thanks_description">木仔</string> <string name="translators_thanks_description">木仔/chrisvcg</string>
<string name="widget_description">显示上次连接设备状态的小部件</string> <string name="widget_description">显示上次连接设备状态的小部件</string>
<string name="widget_configuration_title">选择设备</string>
<string name="widget_configuration_description">选择此部件应显示的设备配置文件。</string>
<string name="common_feature_requires_pro_msg">此功能需要 CAPod Pro。</string>
<string name="widget_no_data_label">暂无数据</string>
<string name="settings_compat_indirectcallback_title">间接数据传送</string> <string name="settings_compat_indirectcallback_title">间接数据传送</string>
<string name="settings_compat_indirectcallback_summary">使用替代方法从系统接收 BLE 数据(广播而不是回调)。</string> <string name="settings_compat_indirectcallback_summary">使用替代方法从系统接收 BLE 数据(广播而不是回调)。</string>
<string name="troubleshooter_title">故障排除</string> <string name="troubleshooter_title">故障排除</string>
<string name="troubleshooter_summary">诊断和修复蓝牙连接问题。</string>
<string name="troubleshooter_ble_intro_title">低延迟蓝牙广播</string> <string name="troubleshooter_ble_intro_title">低延迟蓝牙广播</string>
<string name="troubleshooter_ble_intro_body1">Andpods (以及和其相似的耳机) 使用一种叫做 ”advertisement“ 的BLE技术来广播设备信息和状态。 一些手机不一定能很好地实现这种技术。CAPod能尝试使用不同兼容性选项来修复连接直到数据被接收。把耳机靠近手机并播放音乐,然后开始:</string> <string name="troubleshooter_ble_intro_body1">Andpods (以及和其相似的耳机) 使用一种叫做 ”advertisement“ 的BLE技术来广播设备信息和状态。 一些手机不一定能很好地实现这种技术。CAPod能尝试使用不同兼容性选项来修复连接直到数据被接收。把耳机靠近手机并播放音乐,然后开始:</string>
<string name="troubleshooter_ble_intro_start_action">开始故障排除</string> <string name="troubleshooter_ble_intro_start_action">开始故障排除</string>
@@ -111,6 +126,107 @@
<string name="onboarding_body3">CAPod 不含广告且不会收集您的数据。</string> <string name="onboarding_body3">CAPod 不含广告且不会收集您的数据。</string>
<string name="onboarding_body4">您可以升级 CAPod Pro 以获得额外功能和支持开发者。</string> <string name="onboarding_body4">您可以升级 CAPod Pro 以获得额外功能和支持开发者。</string>
<!-- Strings from app-common --> <!-- Strings from app-common -->
<string name="app_name">CAPod</string>
<string name="app_name_pro">CAPod Pro</string>
<string name="app_name_foss">CAPod FOSS</string>
<string name="general_value_not_available_label">N/A</string>
<string name="general_error_label">错误</string>
<string name="general_grant_permission_action">授予权限</string>
<string name="general_manage_devices_action">管理设备</string>
<string name="overview_nomaindevice_label">未配置设备</string>
<string name="overview_nomaindevice_description">配置您的设备以开始监测电池电量并启用额外功能。</string>
<string name="overview_bluetooth_disabled_label">蓝牙已禁用</string>
<string name="overview_bluetooth_disabled_description">蓝牙已关闭,请开启 ;)</string>
<string name="overview_monitoring_active_label">设备监测</string>
<string name="overview_monitoring_active_description">请确保您的设备附近并处于活动状态。</string>
<string name="overview_unmatched_devices_label">不匹配的设备</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="other">没有匹配的 %d 设备信息</item>
</plurals>
<string name="permission_bluetooth_connect_label">蓝牙连接</string>
<string name="permission_bluetooth_connect_description">本应用需要“蓝牙连接”权限以发起连接和与已配对的设备交互。</string>
<string name="permission_bluetooth_scan_label">蓝牙扫描</string>
<string name="permission_bluetooth_scan_description">“蓝牙扫描”权限允许此应用发现和接收来自附近设备的蓝牙数据,例如您的 AirPod。</string>
<string name="permission_bluetooth_label">蓝牙</string>
<string name="permission_bluetooth_description">本应用需要“蓝牙”权限才能连接已配对的蓝牙设备</string>
<string name="permission_access_fine_location_label">访问精准位置</string>
<string name="permission_access_fine_location_description">CAPod 使用“精准定位”权限来接收低功耗蓝牙数据。您的耳机使用低功耗蓝牙技术来广播其状态,本应用「不会」通过蓝牙数据测定您的位置。</string>
<string name="permission_background_location_label">在后台访问位置</string>
<string name="permission_background_location_description">CAPod 使用“在后台访问位置”权限以在本应用被关闭时继续提供如“显示弹窗”、“自动连接”等功能。此权限允许本应用在后台运行时继续接收蓝牙低功耗数据。本应用并不使用蓝牙数据来窥探您的位置。</string>
<string name="permission_ignore_battery_optimizations_label">禁用电池优化</string>
<string name="permission_ignore_battery_optimizations_description">电池优化可能导致本应用在后台运行时不能稳定地接收蓝牙数据。</string>
<string name="permission_required_title">需要以下权限:</string>
<string name="permission_system_alert_window_label">系统警告窗口</string>
<string name="permission_system_alert_window_description">允许 CAPod 在其他应用的界面上方显示,以允许如“显示弹窗”功能。</string>
<string name="settings_scanner_mode_lowpower_label">低耗电</string>
<string name="settings_scanner_mode_balanced_label">平衡</string>
<string name="settings_scanner_mode_lowlatency_label">低延迟</string>
<string name="settings_monitor_mode_manual_label">当应用程序打开时</string>
<string name="settings_monitor_mode_automatic_label">设备连接时</string>
<string name="settings_monitor_mode_always_label">总是</string>
<string name="settings_reaction_autoconnect_whenseen_label">当发现设备时</string>
<string name="settings_reaction_autoconnect_caseopen_label">充电仓打开</string>
<string name="settings_reaction_autoconnect_inear_label">在耳中</string>
<string name="pods_dual_left_label">左耳</string>
<string name="pods_dual_right_label">右耳</string>
<string name="pods_case_label">充电仓</string>
<string name="pods_case_status_open_label">打开</string>
<string name="pods_case_status_closed_label">关闭</string>
<string name="pods_connection_state_disconnected_label">尚未连接设备</string>
<string name="pods_connection_state_idle_label">已连接设备,待机中</string>
<string name="pods_connection_state_music_label">处于音乐模式</string>
<string name="pods_connection_state_call_label">处于通话模式</string>
<string name="pods_connection_state_ringing_label">正在振铃</string>
<string name="pods_connection_state_hanging_up_label">正在挂断</string>
<string name="pods_connection_state_unknown_label">未知连接状态</string>
<string name="pods_unknown_raw_data_label">原始数据</string>
<string name="pods_unknown_label">未知设备</string>
<string name="pods_unknown_contact_dev">这是一个未知设备,但它使用了类似的消息格式。与我联系以协助添加对它的支持 :)</string>
<string name="pods_none_label_short">暂无设备</string>
<string name="pods_charging_label">充电中</string>
<string name="pods_inear_label">在耳中</string>
<string name="pods_microphone_label">麦克风</string>
<string name="pods_yours">您的</string>
<string name="headset_being_worn_label">正在穿戴的</string>
<string name="headset_not_being_worn_label">未穿戴的</string>
<string name="pods_case_unknown_state">未知状态</string>
<string name="last_seen_x">最后一次在线: %s</string>
<string name="first_seen_x">首次在线:%s</string>
<string name="permission_post_notifications_label">显示通知</string>
<string name="permission_post_notifications_description">"允许 CAPod 显示有关您 AirPods 的通知,例如其连接时的当前状态"</string>
<!-- Device profiles --> <!-- Device profiles -->
<string name="profiles_empty_title">未配置设备配置文件</string>
<string name="profiles_empty_description">创建设备配置文件来管理具有自定义设置和优先级的多个设备。</string>
<string name="profiles_add_action">添加配置文件</string>
<string name="profiles_create_title">创建配置文件</string>
<string name="profiles_name_label">配置文件名</string>
<string name="profiles_name_default">我的耳机</string>
<string name="profiles_model_label">设备型号</string>
<string name="profiles_paired_device_label">已配对的设备</string>
<string name="profiles_paired_device_none"></string>
<string name="profiles_paired_device_none_description">未选择设备</string>
<string name="profiles_save_action">保存配置</string>
<string name="profiles_drag_handle_description">拖动以重新排序</string>
<string name="profiles_delete_title">删除配置</string>
<string name="profiles_delete_message">您确定要删除此配置文件吗?此操作无法撤消。</string>
<string name="profiles_delete_action">删除</string>
<string name="profiles_basic_info_title">设备信息</string>
<string name="profiles_basic_info_description">配置您的设备名称、型号和可选的蓝牙配对。</string>
<string name="profiles_signal_quality_title">最低信号质量</string>
<string name="profiles_signal_quality_description">仅检测信号强度高于此阈值的装置。值越低,检测范围越大,但可能会导致虚假检测。 不要设置太高――蓝牙接收率普遍很低,而且因距离和障碍而异。</string>
<string name="profiles_identitykey_label">身份密钥(Identity Key</string>
<string name="profilessettings_maindevice_identitykey_description">您设备的身份解析密钥 (IRK),可帮助 CAPod 在附近的设备中识别它。</string>
<string name="profiles_maindevice_identitykey_explanation">出于隐私原因,AirPods 会经常更改其蓝牙地址。IRK 可帮助 CAPod 识别您的设备。您需要用到一次 MacBook。</string>
<string name="profiles_maindevice_encryptionkey_label">加密密钥(Encryption Key</string>
<string name="profiles_maindevice_encryptionkey_description">您设备的加密密钥,允许 CAPod 检索详细的状态信息。</string>
<string name="profiles_maindevice_encryptionkey_explanation">AirPods 会发送状态消息,其中一部分是加密的。加密密钥允许 CAPod 解密完整的消息。您需要用到一次 MacBook。</string>
<string name="profiles_key_invalid_format">无效的格式</string>
<string name="profiles_key_expected_format">预期格式: %1$s</string>
<string name="profiles_priority_hint">配置文件排序决定优先级。拖动配置文件以重新排序——当多个设备匹配时,列表中的配置文件优先于优先级别。</string>
<!-- Unsaved changes dialog --> <!-- Unsaved changes dialog -->
<string name="general_unsaved_changes_title">未保存的更改</string>
<string name="general_unsaved_changes_message">您有未保存的更改。您想做什么?</string>
<string name="general_save_and_exit_action">保存并退出</string>
<string name="general_discard_action">放弃</string>
<string name="general_keep_editing_action">继续编辑</string>
</resources> </resources>
+115
View File
@@ -11,6 +11,8 @@
<string name="general_save_action">儲存</string> <string name="general_save_action">儲存</string>
<string name="general_guide_action">指南</string> <string name="general_guide_action">指南</string>
<string name="general_continue_action">繼續</string> <string name="general_continue_action">繼續</string>
<string name="general_show_action">顯示</string>
<string name="general_hide_action">隱藏</string>
<string name="general_example_label">例如:%s</string> <string name="general_example_label">例如:%s</string>
<string name="upgrade_capod_label">升級 CAPod</string> <string name="upgrade_capod_label">升級 CAPod</string>
<string name="upgrade_capod_description">取得附加功能並支持開發人員。</string> <string name="upgrade_capod_description">取得附加功能並支持開發人員。</string>
@@ -18,12 +20,16 @@
<string name="settings_monitor_mode_description">在這種情況下應用程式會監視藍牙資料。</string> <string name="settings_monitor_mode_description">在這種情況下應用程式會監視藍牙資料。</string>
<string name="settings_monitor_connected_notification_label">額外通知</string> <string name="settings_monitor_connected_notification_label">額外通知</string>
<string name="settings_monitor_connected_notification_description">裝置連接時顯示額外通知。這讓您可以停用「裝置狀態」頻道來隱藏永久的「沒有裝置」通知。</string> <string name="settings_monitor_connected_notification_description">裝置連接時顯示額外通知。這讓您可以停用「裝置狀態」頻道來隱藏永久的「沒有裝置」通知。</string>
<string name="settings_keep_notification_after_disconnect_label">斷線後保留通知</string>
<string name="settings_keep_notification_after_disconnect_description">即使 AirPods 斷線後仍顯示上次的電量</string>
<string name="settings_scanner_mode_label">掃描模式</string> <string name="settings_scanner_mode_label">掃描模式</string>
<string name="settings_scanner_mode_description">低功耗藍牙掃描器應該優先考慮效能還是節能?</string> <string name="settings_scanner_mode_description">低功耗藍牙掃描器應該優先考慮效能還是節能?</string>
<string name="settings_autopause_label">自動暫停</string> <string name="settings_autopause_label">自動暫停</string>
<string name="settings_autopause_description">從耳中摘下時自動暫停。</string> <string name="settings_autopause_description">從耳中摘下時自動暫停。</string>
<string name="settings_autopplay_label">自動播放</string> <string name="settings_autopplay_label">自動播放</string>
<string name="settings_autoplay_description">佩戴到耳上時自動播放。</string> <string name="settings_autoplay_description">佩戴到耳上時自動播放。</string>
<string name="settings_eardetection_info_label">耳朵偵測提示</string>
<string name="settings_eardetection_info_description">若耳朵偵測僅對其中一隻耳機有效,這是 Apple 的限制。只有「主要耳機」(用作麥克風的那一隻)會被偵測。可在 Apple 裝置中設定:設定 → 藍牙 → AirPods → 麥克風。</string>
<string name="settings_fake_data_label">假資料</string> <string name="settings_fake_data_label">假資料</string>
<string name="settings_fake_data_description">顯示假資料,模擬不存在的裝置。</string> <string name="settings_fake_data_description">顯示假資料,模擬不存在的裝置。</string>
<string name="settings_debug_label">偵錯設定</string> <string name="settings_debug_label">偵錯設定</string>
@@ -34,6 +40,8 @@
<string name="settings_autoconnect_description">如果 Android 不會自動連線,我們也可以要求它。這將把監視模式設定為「一律」。</string> <string name="settings_autoconnect_description">如果 Android 不會自動連線,我們也可以要求它。這將把監視模式設定為「一律」。</string>
<string name="settings_autoconnect_condition_label">自動連線條件</string> <string name="settings_autoconnect_condition_label">自動連線條件</string>
<string name="settings_autoconnect_condition_description">何時連線到您的裝置?</string> <string name="settings_autoconnect_condition_description">何時連線到您的裝置?</string>
<string name="settings_devices_label">裝置</string>
<string name="settings_devices_description">管理你的裝置。</string>
<string name="settings_reaction_label">反應</string> <string name="settings_reaction_label">反應</string>
<string name="settings_reaction_description">對事件和行為作出反應。</string> <string name="settings_reaction_description">對事件和行為作出反應。</string>
<string name="settings_category_yourdevice_label">您的裝置</string> <string name="settings_category_yourdevice_label">您的裝置</string>
@@ -68,6 +76,7 @@
<string name="settings_support_description">如果您需要協助。</string> <string name="settings_support_description">如果您需要協助。</string>
<string name="issue_tracker_label">問題追蹤器</string> <string name="issue_tracker_label">問題追蹤器</string>
<string name="issue_tracker_description">一個用於錯誤回報和功能需求的公用問題追蹤器 (僅英文)。</string> <string name="issue_tracker_description">一個用於錯誤回報和功能需求的公用問題追蹤器 (僅英文)。</string>
<string name="discord_label">Discord</string>
<string name="discord_description">一個可以在其中閒逛並提出問題的地方。</string> <string name="discord_description">一個可以在其中閒逛並提出問題的地方。</string>
<string name="changelog_label">變更記錄</string> <string name="changelog_label">變更記錄</string>
<string name="settings_label">設定</string> <string name="settings_label">設定</string>
@@ -91,9 +100,14 @@
<string name="translators_thanks_title">翻譯人員</string> <string name="translators_thanks_title">翻譯人員</string>
<string name="translators_thanks_description">人工知能</string> <string name="translators_thanks_description">人工知能</string>
<string name="widget_description">顯示最後已知裝置狀態的小工具。</string> <string name="widget_description">顯示最後已知裝置狀態的小工具。</string>
<string name="widget_configuration_title">選擇裝置</string>
<string name="widget_configuration_description">選擇此小工具要顯示的裝置設定檔。</string>
<string name="common_feature_requires_pro_msg">此功能需 CAPod Pro。</string>
<string name="widget_no_data_label">無資料</string>
<string name="settings_compat_indirectcallback_title">間接資料傳遞</string> <string name="settings_compat_indirectcallback_title">間接資料傳遞</string>
<string name="settings_compat_indirectcallback_summary">使用替代方法從系統中接收低功耗藍牙資料 (廣播而非回撥)。</string> <string name="settings_compat_indirectcallback_summary">使用替代方法從系統中接收低功耗藍牙資料 (廣播而非回撥)。</string>
<string name="troubleshooter_title">疑難排解員</string> <string name="troubleshooter_title">疑難排解員</string>
<string name="troubleshooter_summary">診斷並修復藍牙連線問題。</string>
<string name="troubleshooter_ble_intro_title">低功耗藍牙廣播</string> <string name="troubleshooter_ble_intro_title">低功耗藍牙廣播</string>
<string name="troubleshooter_ble_intro_body1">AirPods (和類似的耳機) 使用一種叫做「廣告」的低功耗藍牙技術廣播狀態資訊。部分手機不能正確實作這項技術。CAPod 可以嘗試透過不同的相容性選項來修正這個問題,直到收到資料。在耳機上開始播放音樂,並把它們放在靠近手機的地方,然後啟動這個處理程序。</string> <string name="troubleshooter_ble_intro_body1">AirPods (和類似的耳機) 使用一種叫做「廣告」的低功耗藍牙技術廣播狀態資訊。部分手機不能正確實作這項技術。CAPod 可以嘗試透過不同的相容性選項來修正這個問題,直到收到資料。在耳機上開始播放音樂,並把它們放在靠近手機的地方,然後啟動這個處理程序。</string>
<string name="troubleshooter_ble_intro_start_action">啟動疑難排解</string> <string name="troubleshooter_ble_intro_start_action">啟動疑難排解</string>
@@ -112,6 +126,107 @@
<string name="onboarding_body3">CAPod 沒有廣告,也不會收集您的資料。</string> <string name="onboarding_body3">CAPod 沒有廣告,也不會收集您的資料。</string>
<string name="onboarding_body4">您可以升級到 CAPod Pro 以獲得額外功能並支援開發。</string> <string name="onboarding_body4">您可以升級到 CAPod Pro 以獲得額外功能並支援開發。</string>
<!-- Strings from app-common --> <!-- Strings from app-common -->
<string name="app_name">CAPod</string>
<string name="app_name_pro">CAPod Pro</string>
<string name="app_name_foss">CAPod FOSS</string>
<string name="general_value_not_available_label">不適用</string>
<string name="general_error_label">錯誤</string>
<string name="general_grant_permission_action">授予權限</string>
<string name="general_manage_devices_action">設備管理</string>
<string name="overview_nomaindevice_label">尚未設定裝置</string>
<string name="overview_nomaindevice_description">設定你的裝置以開始監測電量並啟用其他功能。</string>
<string name="overview_bluetooth_disabled_label">藍牙已停用</string>
<string name="overview_bluetooth_disabled_description">藍牙已停用,請啟用它 ;)</string>
<string name="overview_monitoring_active_label">正在監測裝置</string>
<string name="overview_monitoring_active_description">請確保你的裝置在附近且處於啟用狀態。</string>
<string name="overview_unmatched_devices_label">未配對的裝置</string>
<plurals name="overview_unmatched_devices_count">
<item quantity="other">%d 個裝置沒有相符的設定檔</item>
</plurals>
<string name="permission_bluetooth_connect_label">藍牙連線</string>
<string name="permission_bluetooth_connect_description">此應用程式需要「藍牙連線」權限,才能與已配對的裝置互動並建立連線。</string>
<string name="permission_bluetooth_scan_label">藍牙掃描中</string>
<string name="permission_bluetooth_scan_description">「藍牙掃描」權限可讓此應用程式探索並接收來自附近裝置的藍牙資料,例如你的 AirPods。</string>
<string name="permission_bluetooth_label">藍牙</string>
<string name="permission_bluetooth_description">這個應用程式需要「藍牙」權限與已配對裝置連線。</string>
<string name="permission_access_fine_location_label">存取精確位置</string>
<string name="permission_access_fine_location_description">CAPod 使用「精確位置」權限以接收低功耗藍牙資料。您的耳機使用低功耗藍牙技術以廣播其狀態。這個應用程式不會使用藍牙資料來確定您的位置。</string>
<string name="permission_background_location_label">背景位置存取</string>
<string name="permission_background_location_description">CAPods 在應用程式關閉時使用「背景位置存取」來啟用諸如「顯示彈出式視窗」和「自動連線」等功能。背景位置存取允許這個應用程式在背景接收低功耗藍牙資料。這個應用程式不會使用藍牙資料來確定您的位置。</string>
<string name="permission_ignore_battery_optimizations_label">停用電池效能最佳化</string>
<string name="permission_ignore_battery_optimizations_description">電池效能最佳化使這個應用程式在背景時無法可靠地接收藍牙資料。</string>
<string name="permission_required_title">可能要求下列權限:</string>
<string name="permission_system_alert_window_label">系統警報視窗</string>
<string name="permission_system_alert_window_description">允許 CAPod 在其他應用程式上繪圖,使「顯示彈出式視窗」功能成為可能。</string>
<string name="settings_scanner_mode_lowpower_label">低功耗</string>
<string name="settings_scanner_mode_balanced_label">平衡</string>
<string name="settings_scanner_mode_lowlatency_label">低延遲</string>
<string name="settings_monitor_mode_manual_label">應用程式開啟時</string>
<string name="settings_monitor_mode_automatic_label">裝置連線時</string>
<string name="settings_monitor_mode_always_label">一律</string>
<string name="settings_reaction_autoconnect_whenseen_label">看到時</string>
<string name="settings_reaction_autoconnect_caseopen_label">充電盒開啟</string>
<string name="settings_reaction_autoconnect_inear_label">在耳中</string>
<string name="pods_dual_left_label">左耳</string>
<string name="pods_dual_right_label">右耳</string>
<string name="pods_case_label">充電盒</string>
<string name="pods_case_status_open_label">已開啟</string>
<string name="pods_case_status_closed_label">已關閉</string>
<string name="pods_connection_state_disconnected_label">未連線到裝置</string>
<string name="pods_connection_state_idle_label">已連線到裝置,閒置中</string>
<string name="pods_connection_state_music_label">音樂模式</string>
<string name="pods_connection_state_call_label">呼叫模式</string>
<string name="pods_connection_state_ringing_label">響鈴中</string>
<string name="pods_connection_state_hanging_up_label">正在掛斷</string>
<string name="pods_connection_state_unknown_label">未知連線狀態</string>
<string name="pods_unknown_raw_data_label">原始資料</string>
<string name="pods_unknown_label">未知裝置</string>
<string name="pods_unknown_contact_dev">這是一個未知裝置,但可以使用相似的訊息格式。聯絡我以為此裝置新增相關支援 :)</string>
<string name="pods_none_label_short">無裝置</string>
<string name="pods_charging_label">充電中</string>
<string name="pods_inear_label">在耳中</string>
<string name="pods_microphone_label">麥克風</string>
<string name="pods_yours">您的</string>
<string name="headset_being_worn_label">正被配戴</string>
<string name="headset_not_being_worn_label">未配戴</string>
<string name="pods_case_unknown_state">未知狀態</string>
<string name="last_seen_x">最後連線:%s</string>
<string name="first_seen_x">首次連線:%s</string>
<string name="permission_post_notifications_label">顯示通知</string>
<string name="permission_post_notifications_description">"允許 CAPod 顯示關於您 AirPods 的通知,例如在連線時顯示它們的目前狀態。"</string>
<!-- Device profiles --> <!-- Device profiles -->
<string name="profiles_empty_title">尚未設定任何裝置設定檔</string>
<string name="profiles_empty_description">建立裝置設定檔,以自訂設定與優先順序來管理多個裝置。</string>
<string name="profiles_add_action">新增設定檔</string>
<string name="profiles_create_title">建立設定檔</string>
<string name="profiles_name_label">設定檔名稱</string>
<string name="profiles_name_default">我的耳機</string>
<string name="profiles_model_label">設備型號</string>
<string name="profiles_paired_device_label">已配對裝置</string>
<string name="profiles_paired_device_none"></string>
<string name="profiles_paired_device_none_description">尚未選擇裝置</string>
<string name="profiles_save_action">儲存設定檔</string>
<string name="profiles_drag_handle_description">拖曳重新排序</string>
<string name="profiles_delete_title">刪除設定檔</string>
<string name="profiles_delete_message">是否確定要刪除此設定檔?此操作無法撤銷。</string>
<string name="profiles_delete_action">刪除</string>
<string name="profiles_basic_info_title">設備資訊</string>
<string name="profiles_basic_info_description">設定你的裝置名稱、型號,以及可選的藍牙配對。</string>
<string name="profiles_signal_quality_title">最低訊號品質</string>
<string name="profiles_signal_quality_description">僅偵測訊號強度高於此閾值的裝置。數值越低可增加偵測範圍,但可能導致誤判。請勿將此值設得太高——藍牙接收通常較弱,且會受距離與障礙物影響。</string>
<string name="profiles_identitykey_label">身份金鑰</string>
<string name="profilessettings_maindevice_identitykey_description">您裝置的身份解析金鑰 (IRK),協助 CAPod 在附近的裝置中識別它。</string>
<string name="profiles_maindevice_identitykey_explanation">為保護隱私,AirPods 會經常更改其藍牙位址。IRK 可協助 CAPod 識別您的裝置。您需要一次性存取 MacBook。</string>
<string name="profiles_maindevice_encryptionkey_label">加密金鑰</string>
<string name="profiles_maindevice_encryptionkey_description">您裝置的加密金鑰,允許 CAPod 檢索詳細的狀態資訊。</string>
<string name="profiles_maindevice_encryptionkey_explanation">AirPods 會傳送狀態訊息,其中一部分已加密。加密金鑰允許 CAPod 解密完整的訊息。您需要一次性存取 MacBook。</string>
<string name="profiles_key_invalid_format">無效的金鑰格式</string>
<string name="profiles_key_expected_format">預期格式:%1$s</string>
<string name="profiles_priority_hint">設定檔的順序決定優先權。拖曳設定檔以重新排序——當多個裝置符合時,列表中較上方的設定檔將具有較高優先權。</string>
<!-- Unsaved changes dialog --> <!-- Unsaved changes dialog -->
<string name="general_unsaved_changes_title">修改未儲存</string>
<string name="general_unsaved_changes_message">您有未儲存的變更。您想如何處理?</string>
<string name="general_save_and_exit_action">儲存並退出</string>
<string name="general_discard_action">捨棄</string>
<string name="general_keep_editing_action">繼續編輯</string>
</resources> </resources>
+6 -2
View File
@@ -30,6 +30,8 @@
<string name="settings_autopause_description">Pause audio when removing the device from your ear.</string> <string name="settings_autopause_description">Pause audio when removing the device from your ear.</string>
<string name="settings_autopplay_label">Auto play</string> <string name="settings_autopplay_label">Auto play</string>
<string name="settings_autoplay_description">Start audio playback when device is worn.</string> <string name="settings_autoplay_description">Start audio playback when device is worn.</string>
<string name="settings_eardetection_info_label">Ear detection note</string>
<string name="settings_eardetection_info_description">If ear detection only works for one pod, this is an Apple limitation. Only the \"primary pod\" (used for microphone) is detected. Configure on Apple devices: Settings → Bluetooth → AirPods → Microphone.</string>
<string name="settings_fake_data_label">Fake data</string> <string name="settings_fake_data_label">Fake data</string>
<string name="settings_fake_data_description">Show fake data, i.e., simulate devices that don\t exist.</string> <string name="settings_fake_data_description">Show fake data, i.e., simulate devices that don\t exist.</string>
<string name="settings_debug_label">Debug settings</string> <string name="settings_debug_label">Debug settings</string>
@@ -161,8 +163,10 @@
<string name="overview_monitoring_active_label">Monitoring for devices</string> <string name="overview_monitoring_active_label">Monitoring for devices</string>
<string name="overview_monitoring_active_description">Make sure your device is nearby and active.</string> <string name="overview_monitoring_active_description">Make sure your device is nearby and active.</string>
<string name="overview_unmatched_devices_label">Unmatched devices</string> <string name="overview_unmatched_devices_label">Unmatched devices</string>
<string name="overview_unmatched_devices_count_single">1 device without matching profile</string> <plurals name="overview_unmatched_devices_count">
<string name="overview_unmatched_devices_count_plural">%d devices without matching profile</string> <item quantity="one">%d device without matching profile</item>
<item quantity="other">%d devices without matching profile</item>
</plurals>
<string name="permission_bluetooth_connect_label">Bluetooth connect</string> <string name="permission_bluetooth_connect_label">Bluetooth connect</string>
<string name="permission_bluetooth_connect_description">This app requires the \"Bluetooth connect\" permission to interact with paired devices and initiate connections.</string> <string name="permission_bluetooth_connect_description">This app requires the \"Bluetooth connect\" permission to interact with paired devices and initiate connections.</string>
@@ -21,6 +21,12 @@
android:summary="@string/settings_autopause_description" android:summary="@string/settings_autopause_description"
android:title="@string/settings_autopause_label" /> android:title="@string/settings_autopause_label" />
<Preference
android:icon="@drawable/ic_baseline_question_mark_24"
android:selectable="false"
android:summary="@string/settings_eardetection_info_description"
android:title="@string/settings_eardetection_info_label" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory app:title="@string/settings_autoconnect_label"> <PreferenceCategory app:title="@string/settings_autoconnect_label">
+10
View File
@@ -3,10 +3,20 @@ plugins {
`java-library` `java-library`
} }
gradlePlugin {
plugins {
create("projectConfigPlugin") {
id = "projectConfig"
implementationClass = "ProjectConfigPlugin"
}
}
}
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
implementation("com.android.tools.build:gradle:8.13.0") implementation("com.android.tools.build:gradle:8.13.0")
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.10") implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.10")
+43 -51
View File
@@ -1,64 +1,56 @@
import org.gradle.api.Plugin
import org.gradle.api.Project
import java.io.File import java.io.File
import java.io.FileInputStream import java.io.FileInputStream
import java.util.Properties import java.util.Properties
object ProjectConfig { open class ProjectConfig {
const val packageName = "eu.darken.capod" val packageName = "eu.darken.capod"
val minSdk = 26
const val minSdk = 26 val compileSdk = 36
const val compileSdk = 36 val targetSdk = 36
const val targetSdk = 36
object Version { lateinit var version: Version
override fun toString(): String {
return "ProjectConfig($packageName, min=$minSdk, compile=$compileSdk, target=$targetSdk, version=$version)"
}
fun init(project: Project) {
val versionProperties = Properties().apply { val versionProperties = Properties().apply {
load(FileInputStream(File("version.properties"))) val propsPath = File(project.rootDir, "version.properties")
println("Version: From $propsPath:")
load(FileInputStream(propsPath))
println("$this")
} }
val major = versionProperties.getProperty("project.versioning.major").toInt() version = Version(
val minor = versionProperties.getProperty("project.versioning.minor").toInt() major = versionProperties.getProperty("project.versioning.major").toInt(),
val patch = versionProperties.getProperty("project.versioning.patch").toInt() minor = versionProperties.getProperty("project.versioning.minor").toInt(),
val build = versionProperties.getProperty("project.versioning.build").toInt() patch = versionProperties.getProperty("project.versioning.patch").toInt(),
build = versionProperties.getProperty("project.versioning.build").toInt(),
type = versionProperties.getProperty("project.versioning.type"),
)
}
val name = "${major}.${minor}.${patch}-rc${build}" data class Version(
val code = major * 10000000 + minor * 100000 + patch * 1000 + build * 10 val major: Int,
val minor: Int,
val patch: Int,
val build: Int,
val type: String,
) {
val name: String
get() = "${major}.${minor}.${patch}-$type${build}"
val code: Long
get() = major * 10000000 + minor * 100000 + patch * 1000 + build * 10L
} }
} }
fun lastCommitHash(): String = Runtime.getRuntime().exec("git rev-parse --short HEAD").let { process -> class ProjectConfigPlugin : Plugin<Project> {
process.waitFor() override fun apply(project: Project) {
val output = process.inputStream.use { input -> val extension = project.extensions.create("projectConfig", ProjectConfig::class.java)
input.bufferedReader().use { extension.init(project)
it.readText() project.afterEvaluate { println("ProjectConfigPlugin loaded: $extension") }
}
} }
process.destroy() }
output.trim()
}
fun com.android.build.api.dsl.SigningConfig.setupCredentials(
signingPropsPath: File? = null
) {
val keyStoreFromEnv = System.getenv("STORE_PATH")?.let { File(it) }
if (keyStoreFromEnv?.exists() == true) {
println("Using signing data from environment variables.")
storeFile = keyStoreFromEnv
storePassword = System.getenv("STORE_PASSWORD")
keyAlias = System.getenv("KEY_ALIAS")
keyPassword = System.getenv("KEY_PASSWORD")
} else {
println("Using signing data from properties file.")
val props = Properties().apply {
signingPropsPath?.takeIf { it.canRead() }?.let { load(FileInputStream(it)) }
}
val keyStorePath = props.getProperty("release.storePath")?.let { File(it) }
if (keyStorePath?.exists() == true) {
storeFile = keyStorePath
storePassword = props.getProperty("release.storePassword")
keyAlias = props.getProperty("release.keyAlias")
keyPassword = props.getProperty("release.keyPassword")
}
}
}
@@ -0,0 +1,75 @@
import com.android.build.api.dsl.SigningConfig
import org.gradle.api.Project
import org.gradle.api.tasks.testing.Test
import org.gradle.api.tasks.testing.TestDescriptor
import org.gradle.api.tasks.testing.TestListener
import org.gradle.api.tasks.testing.TestResult
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
import java.io.File
import java.io.FileInputStream
import java.util.Properties
val Project.projectConfig: ProjectConfig
get() = extensions.findByType(ProjectConfig::class.java)!!
fun SigningConfig.setupCredentials(
signingPropsPath: File? = null
) {
val keyStoreFromEnv = System.getenv("STORE_PATH")?.let { File(it) }
if (keyStoreFromEnv?.exists() == true) {
println("Using signing data from environment variables.")
storeFile = keyStoreFromEnv
storePassword = System.getenv("STORE_PASSWORD")
keyAlias = System.getenv("KEY_ALIAS")
keyPassword = System.getenv("KEY_PASSWORD")
} else {
println("Using signing data from properties file.")
val props = Properties().apply {
signingPropsPath?.takeIf { it.canRead() }?.let { load(FileInputStream(it)) }
}
val keyStorePath = props.getProperty("release.storePath")?.let { File(it) }
if (keyStorePath?.exists() == true) {
storeFile = keyStorePath
storePassword = props.getProperty("release.storePassword")
keyAlias = props.getProperty("release.keyAlias")
keyPassword = props.getProperty("release.keyPassword")
}
}
}
fun Test.setupTestLogging() {
testLogging {
events(
TestLogEvent.FAILED,
TestLogEvent.PASSED,
TestLogEvent.SKIPPED,
// TestLogEvent.STANDARD_OUT,
)
exceptionFormat = TestExceptionFormat.FULL
showExceptions = true
showCauses = true
showStackTraces = true
addTestListener(object : TestListener {
override fun beforeSuite(suite: TestDescriptor) {}
override fun beforeTest(testDescriptor: TestDescriptor) {}
override fun afterTest(testDescriptor: TestDescriptor, result: TestResult) {}
override fun afterSuite(suite: TestDescriptor, result: TestResult) {
if (suite.parent != null) {
val messages = """
------------------------------------------------------------------------------------------------
| ${result.resultType} ${result.testCount} tests: ${result.successfulTestCount} passed, ${result.failedTestCount} failed, ${result.skippedTestCount} skipped)
------------------------------------------------------------------------------------------------
""".trimIndent()
println(messages)
}
}
})
}
}
+1 -7
View File
@@ -11,7 +11,7 @@
# This is the minimum version number required. # This is the minimum version number required.
# Update this, if you use features of a newer version # Update this, if you use features of a newer version
fastlane_version "2.208.0" fastlane_version "2.226.0"
default_platform :android default_platform :android
@@ -32,9 +32,6 @@ platform :android do
skip_upload_images: 'true', skip_upload_images: 'true',
skip_upload_screenshots: 'true', skip_upload_screenshots: 'true',
skip_upload_metadata: 'true', skip_upload_metadata: 'true',
aab_paths: [
"app/build/outputs/bundle/gplayRelease/app-gplay-beta.aab",
],
) )
end end
@@ -50,9 +47,6 @@ platform :android do
skip_upload_images: 'true', skip_upload_images: 'true',
skip_upload_screenshots: 'true', skip_upload_screenshots: 'true',
skip_upload_metadata: 'true', skip_upload_metadata: 'true',
aab_paths: [
"app/build/outputs/bundle/gplayRelease/app-gplay-release.aab",
],
) )
end end
@@ -2,8 +2,8 @@ El CAPod és una aplicació complementària per als AirPods.
Característiques: Característiques:
* Nivell de bateria per als AirPods i fundes. * Nivell de bateria per als auriculars i fundes.
* Estat de càrrega per als AirPods i fundes. * Estat de càrrega per als auriculars i fundes.
* Informació addicional sobre la connexió, micròfon i funda. * Informació addicional sobre la connexió, micròfon i funda.
* Pot rebre i mostrar tots els dispositius propers. * Pot rebre i mostrar tots els dispositius propers.
* Detecció de l'oïda amb reproducció/pausa automàtica. * Detecció de l'oïda amb reproducció/pausa automàtica.
@@ -13,6 +13,6 @@ Funktionen:
CAPod ist werbefrei. Einige Funktionen erfordern einen In-App-Kauf. CAPod ist werbefrei. Einige Funktionen erfordern einen In-App-Kauf.
Die beliebtesten AirPods und Beats Kopfhörer werden unterstützt. Die beliebtesten AirPods und Beats Kopfhörer werden unterstützt.
Wenn Ihr Gerät AirPods ähnelt, aber noch nicht unterstützt wird, senden Sie mir eine kurze Mail. Wenn Dein Gerät AirPods ähnelt, aber noch nicht unterstützt wird, schick mir ne kurze Mail.
Hast du eine coole Idee für ein neues Feature? Mail mir! Hast du eine coole Idee für ein neues Feature? Mail mir!
@@ -1,2 +0,0 @@
v1.0.0:
- Initial release.
@@ -1,4 +0,0 @@
v1.3.13(1031300)
• Updated translations
• Updated internal dependencies
• Tweaked placement of UI elements
@@ -1,4 +0,0 @@
v1.3.13(1031301)
• Updated translations
• Updated internal dependencies
• Tweaked placement of UI elements
@@ -1,4 +0,0 @@
v1.3.13(1031302)
• Updated translations
• Updated internal dependencies
• Tweaked placement of UI elements
@@ -1,4 +0,0 @@
v1.3.13(1031303)
• Updated translations
• Updated internal dependencies
• Tweaked placement of UI elements
@@ -1,4 +0,0 @@
v1.3.13(1031304)
• Updated translations
• Updated internal dependencies
• Tweaked placement of UI elements
@@ -1,4 +0,0 @@
v1.3.13(1031305)
• Updated translations
• Updated internal dependencies
• Tweaked placement of UI elements
@@ -1,4 +0,0 @@
v1.3.13(1031306)
• Updated translations
• Updated internal dependencies
• Tweaked placement of UI elements
@@ -1,4 +0,0 @@
v1.3.13(1031307)
• Updated translations
• Updated internal dependencies
• Tweaked placement of UI elements
@@ -1,2 +0,0 @@
Bugfixes and performance improvements.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes and performance improvements.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes and performance improvements.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes and performance improvements.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes and performance improvements.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes and performance improvements.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes and performance improvements.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes and performance improvements.
¯\_(ツ)_/¯
@@ -1,5 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
A detailed changelog is available on GitHub:
https://github.com/d4rken-org/capod/releases/latest
@@ -1,5 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
A detailed changelog is available on GitHub:
https://github.com/d4rken-org/capod/releases/latest
@@ -1,5 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
A detailed changelog is available on GitHub:
https://github.com/d4rken-org/capod/releases/latest
@@ -1,5 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
A detailed changelog is available on GitHub:
https://github.com/d4rken-org/capod/releases/latest
@@ -1,2 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
@@ -1 +0,0 @@
Support for AirPods Pro 2 with USB-C
@@ -1,2 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
@@ -1,2 +0,0 @@
Bugfixes, performance improvements and maybe new features.
¯\_(ツ)_/¯
@@ -1,5 +0,0 @@
Updates contain bugfixes, performance improvements and maybe new features.
A detailed changelog is always available on GitHub.
FYI: Its just me here, sometimes replies might take a bit. Sorry for that!
¯\_(ツ)_/¯
@@ -1,5 +0,0 @@
Updates contain bugfixes, performance improvements and maybe new features.
A detailed changelog is always available on GitHub.
FYI: Its just me here, sometimes replies might take a bit. Sorry for that!
¯\_(ツ)_/¯
@@ -1,5 +0,0 @@
Updates contain bugfixes, performance improvements and maybe new features.
A detailed changelog is always available on GitHub.
FYI: Its just me here, sometimes replies might take a bit. Sorry for that!
¯\_(ツ)_/¯
@@ -1,5 +0,0 @@
🐛 Bug fixes, 🚀 performance boosts, maybe even ✨ new features.
Changelog: https://capod.darken.eu/changelog
FYI: Its just me here — thanks for understanding if replies take a bit. ¯\_(ツ)_/¯
@@ -1,5 +0,0 @@
🐛 Bug fixes, 🚀 performance boosts, maybe even ✨ new features.
Changelog: https://capod.darken.eu/changelog
FYI: Its just me here — thanks for understanding if replies take a bit. ¯\_(ツ)_/¯
@@ -1,5 +0,0 @@
🐛 Bug fixes, 🚀 performance boosts, maybe even ✨ new features.
Changelog: https://capod.darken.eu/changelog
FYI: Its just me here — thanks for understanding if replies take a bit. ¯\_(ツ)_/¯
@@ -1,5 +0,0 @@
🐛 Bug fixes, 🚀 performance boosts, maybe even ✨ new features.
Changelog: https://capod.darken.eu/changelog
FYI: Its just me here — thanks for understanding if replies take a bit. ¯\_(ツ)_/¯
@@ -1,5 +0,0 @@
🐛 Bug fixes, 🚀 performance boosts, maybe even ✨ new features.
Changelog: https://capod.darken.eu/changelog
FYI: Its just me here — thanks for understanding if replies take a bit. ¯\_(ツ)_/¯
@@ -1,5 +0,0 @@
🐛 Bug fixes, 🚀 performance boosts, maybe even ✨ new features.
Changelog: https://capod.darken.eu/changelog
FYI: Its just me here — thanks for understanding if replies take a bit. ¯\_(ツ)_/¯
@@ -1,5 +0,0 @@
🐛 Bug fixes, 🚀 performance boosts, maybe even ✨ new features.
Changelog: https://capod.darken.eu/changelog
FYI: Its just me here — thanks for understanding if replies take a bit. ¯\_(ツ)_/¯
@@ -15,4 +15,4 @@ CAPod no tiene publicidad. Algunas características requieren ser compradas dent
Los AirPods y Beats más populares son soportados. Los AirPods y Beats más populares son soportados.
Si su dispositivo es similar a AirPods pero aún no es compatible, envíeme un correo. Si su dispositivo es similar a AirPods pero aún no es compatible, envíeme un correo.
¿Tienes una buena idea para una nueva característica? ¡Háznoslo saber! ¿Tienes una buena idea para una nueva característica? ¡Contáctanos!
@@ -15,4 +15,4 @@ CAPod no tiene publicidad. Algunas funciones requieren una compra dentro de la a
Son compatibles los AirPods y los dispositivos Beats más populares. Son compatibles los AirPods y los dispositivos Beats más populares.
Si tu dispositivo es similar a los AirPods pero aún no es compatible, envíame un breve correo electrónico. Si tu dispositivo es similar a los AirPods pero aún no es compatible, envíame un breve correo electrónico.
¿Tienes una buena idea para una nueva característica? ¡Háznoslo saber! ¿Tienes una buena idea para una nueva característica? ¡Contáctanos!
@@ -2,17 +2,17 @@ CAPod 是一個能提供 AirPods 相關功能的應用程式。
功能: 功能:
* 顯示耳機和充電盒電力
* 顯示耳機和充電盒充電狀態
* 顯示有關連線、麥克風、充電盒的附加資訊
* 可以接收並顯示附近的所有裝置。 * 可以接收並顯示附近的所有裝置。
* 耳朵偵測,自動播放/暫停。 * 耳朵偵測,自動播放/暫停。
* 自動連線手機和 AirPods。 * 自動連線手機和 AirPods。
* 開啟充電盒時顯示彈出式視窗
CAPod 是無廣告的應用程式。 一些功能需要應用程式內購。 。 CAPod 是無廣告的應用程式。 一些功能需要應用程式內購。 。 一些功能需要應用程式內購。
支援大部分流行的 AirPods 和 Beats 裝置。 支援大部分流行的 AirPods 和 Beats 裝置。
如果您的裝置和 AirPods 相似但並不支援,請寄給我一封郵件。 如果您的裝置和 AirPods 相似但並不支援,請寄給我一封郵件。
有新功能的好點子? 與我溝通一下吧! 有新功能的好點子? 與我溝通一下吧!
+5 -20
View File
@@ -308,6 +308,7 @@ do-version-properties() {
V_MINOR_REGEX='^([a-zA-Z\.]+minor)=([0-9]+)$' V_MINOR_REGEX='^([a-zA-Z\.]+minor)=([0-9]+)$'
V_PATCH_REGEX='^([a-zA-Z\.]+patch)=([0-9]+)$' V_PATCH_REGEX='^([a-zA-Z\.]+patch)=([0-9]+)$'
V_BUILD_REGEX='^([a-zA-Z\.]+build)=([0-9]+)$' V_BUILD_REGEX='^([a-zA-Z\.]+build)=([0-9]+)$'
V_TYPE_REGEX='^([a-zA-Z\.]+type)=(rc|beta)$'
PROPS_FILE_NEW="" PROPS_FILE_NEW=""
@@ -333,6 +334,10 @@ do-version-properties() {
updated="${BASH_REMATCH[1]}=${V_BUILD_COUNTER}" updated="${BASH_REMATCH[1]}=${V_BUILD_COUNTER}"
echo "Found build, replacing: $line -> $updated" echo "Found build, replacing: $line -> $updated"
PROPS_FILE_NEW+=$updated PROPS_FILE_NEW+=$updated
elif [[ $line =~ $V_TYPE_REGEX ]]; then
updated="${BASH_REMATCH[1]}=${V_BUILD_TYPE}"
echo "Found type, replacing: $line -> $updated"
PROPS_FILE_NEW+=$updated
else else
PROPS_FILE_NEW+="$line" PROPS_FILE_NEW+="$line"
fi fi
@@ -360,25 +365,6 @@ do-versionfile() {
git add VERSION git add VERSION
} }
# Update a version file that can be parsed by third-parties, e.g. F-Droid
do-fastlane-changelog() {
CHANGELOGS_DIR="fastlane/metadata/android/en-US/changelogs"
NEW_CHANGELOG="$CHANGELOGS_DIR/$V_CODE.txt"
[ -f "$NEW_CHANGELOG" ] && return
echo -e "\n${S_NOTICE}Creating new default fastlane changelog file for $V_CODE...\n"
cp "$CHANGELOGS_DIR/default.txt" "$NEW_CHANGELOG"
cat "$NEW_CHANGELOG"
echo -e "\n\n${I_OK} ${S_NOTICE}${ACTION_MSG} [${S_NORM}$NEW_CHANGELOG${S_NOTICE}] file"
# Stage file for commit
git add "$CHANGELOGS_DIR/$V_CODE.txt"
}
# Does the release branch already exist? # Does the release branch already exist?
check-branch-exist() { check-branch-exist() {
[ "$FLAG_NOBRANCH" = true ] && return [ "$FLAG_NOBRANCH" = true ] && return
@@ -467,7 +453,6 @@ echo -e "\n${S_LIGHT}––––––"
# Update steps # Update steps
do-version-properties do-version-properties
do-versionfile do-versionfile
do-fastlane-changelog
do-branch do-branch
do-commit do-commit
create-tag "${V_NAME}" "${REL_NOTE}" create-tag "${V_NAME}" "${REL_NOTE}"
+2 -1
View File
@@ -1,6 +1,7 @@
### Updated by release.sh ### ### Updated by release.sh ###
project.versioning.major=3 project.versioning.major=3
project.versioning.minor=0 project.versioning.minor=0
project.versioning.patch=0 project.versioning.patch=3
project.versioning.build=0 project.versioning.build=0
project.versioning.type=rc
############################# #############################