fix: localize user-facing and accessibility text (2/3) (#6025)

* fix: localize UI and accessibility text

* fix: translate BQI core errors

* fix: correct Bakhtiari orthography and wording

Replace the remaining Persian confirmation fallbacks, correct stale or mismatched UI meanings, and normalize established Bakhtiari terms without translating xray-core identifiers.

Primary source: Erik Anonby and Ashraf Asadi, Bakhtiari Studies II: Orthography (2018), sections 6.1.1, 6.8.1, 6.8.2, 6.8.7, and 6.8.9. https://www.diva-portal.org/smash/get/diva2%3A1231755/FULLTEXT02.pdf

The standard recommends that "Arabic letters be retained for Bakhtiari words borrowed from Persian" and reports that speakers view soft d as "a defining feature of how the language is pronounced."

Lexicon and phonology source: Erik Anonby and Ashraf Asadi, Bakhtiari Studies: Phonology, Text, Lexicon (2014). https://uu.diva-portal.org/smash/record.jsf?pid=diva2%3A758171

Historical corroboration: D. L. R. Lorimer, The Phonology of the Bakhtiari, Badakhshani, and Madaglashti Dialects of Modern Persian (1922). https://archive.org/details/phonologyofbakht06loriuoft

* fix: keep protocol description technical

* fix: keep Logcat diagnostics unlocalized

* getRemoteIPInfo

---------

Co-authored-by: 2dust <31833384+2dust@users.noreply.github.com>
This commit is contained in:
eliotcougarand2dust authored and GitHub committed 2026-08-07 15:58:11 +08:00
1 parent d8b857665c
commit 775546ce40
38 files changed
+721 -183

No files matched your search

@@ -5,6 +5,7 @@ import android.text.TextUtils
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import com.v2ray.ang.AppConfig
import com.v2ray.ang.R
import com.v2ray.ang.dto.ConfigResult
import com.v2ray.ang.dto.CoreConfigContext
import com.v2ray.ang.dto.V2rayConfig
@@ -34,17 +35,27 @@ object CoreConfigManager {
fun getV2rayConfig(context: Context, guid: String): ConfigResult {
try {
val configContext = CoreConfigContextBuilder.build(context, guid)
?: return ConfigResult(status = false, guid = guid, errorMessage = "Failed to build config context")
?: return ConfigResult(
status = false,
guid = guid,
errorMessage = "Failed to build config context",
displayMessage = context.getString(R.string.core_error_build_config_context)
)
if (configContext.isCustom) {
return buildV2rayCustomConfig(configContext)
}
return toConfigResult(configContext, buildUnifiedConfig(configContext))
} catch (e: Exception) {
LogUtil.e(AppConfig.TAG, "Failed to get V2ray config", e)
val detail = e.message ?: e.javaClass.simpleName
return ConfigResult(
status = false,
guid = guid,
errorMessage = "Failed to get V2ray config: ${e.message ?: e.javaClass.simpleName}"
errorMessage = "Failed to get V2ray config: $detail",
displayMessage = context.getString(
R.string.core_error_get_config_detail,
detail
)
)
}
}
@@ -57,7 +68,12 @@ object CoreConfigManager {
fun getV2rayConfig4Speedtest(context: Context, guid: String): ConfigResult {
try {
val configContext = CoreConfigContextBuilder.build(context, guid)
?: return ConfigResult(status = false, guid = guid, errorMessage = "Failed to build config context")
?: return ConfigResult(
status = false,
guid = guid,
errorMessage = "Failed to build config context",
displayMessage = context.getString(R.string.core_error_build_config_context)
)
if (configContext.isCustom) {
return buildV2rayCustomConfig(configContext)
}
@@ -67,10 +83,15 @@ object CoreConfigManager {
return toConfigResult(configContext, v2rayConfig)
} catch (e: Exception) {
LogUtil.e(AppConfig.TAG, "Failed to get V2ray config for speedtest", e)
val detail = e.message ?: e.javaClass.simpleName
return ConfigResult(
status = false,
guid = guid,
errorMessage = "Failed to get V2ray config for speedtest: ${e.message ?: e.javaClass.simpleName}"
errorMessage = "Failed to get V2ray config for speedtest: $detail",
displayMessage = context.getString(
R.string.core_error_get_speedtest_config_detail,
detail
)
)
}
}
@@ -81,7 +102,12 @@ object CoreConfigManager {
private fun buildV2rayCustomConfig(configContext: CoreConfigContext): ConfigResult {
val context = configContext.context
val raw = MmkvManager.decodeServerRaw(configContext.guid)
?: return ConfigResult(status = false, guid = configContext.guid, errorMessage = "Custom config is empty")
?: return ConfigResult(
status = false,
guid = configContext.guid,
errorMessage = "Custom config is empty",
displayMessage = context.getString(R.string.core_error_custom_config_empty)
)
val result = ConfigResult(true, configContext.guid, raw)
val json = JsonUtil.parseString(raw)?.takeIf { it.isJsonObject }?.asJsonObject ?: return result
@@ -58,12 +58,12 @@ object CoreNativeManager {
*
* @return Version string of the V2Ray core
*/
fun getLibVersion(): String {
fun getLibVersion(): String? {
return try {
Libv2ray.checkVersionX()
} catch (e: Exception) {
LogUtil.e(AppConfig.TAG, "Failed to check V2Ray version", e)
"Unknown"
null
}
}
@@ -53,6 +53,11 @@ object CoreServiceManager {
/** Tun descriptor the core was started with, null in the proxy only and root run modes. */
private var currentVpnInterface: ParcelFileDescriptor? = null
private class CoreStartException(
logMessage: String,
val displayMessage: String,
) : IllegalStateException(logMessage)
var serviceControl: SoftReference<ServiceControl>? = null
set(value) {
field = value
@@ -96,15 +101,22 @@ object CoreServiceManager {
try {
doStartCoreLoop(service, vpnInterface)
return true
} catch (e: CoreStartException) {
reportCoreStartFailure(service, e.message.orEmpty(), e.displayMessage, e)
return false
} catch (e: Exception) {
val message = e.message?.takeUnless { it.isBlank() } ?: e.javaClass.simpleName
LogUtil.e(AppConfig.TAG, "StartCore-Manager: $message", e)
MessageHelper.sendMsg2UI(service, AppConfig.MSG_STATE_START_FAILURE, message)
NotificationManager.cancelNotification()
reportCoreStartFailure(service, message, message, e)
return false
}
}
private fun reportCoreStartFailure(service: Service, logMessage: String, displayMessage: String, error: Throwable) {
LogUtil.e(AppConfig.TAG, "StartCore-Manager: $logMessage", error)
MessageHelper.sendMsg2UI(service, AppConfig.MSG_STATE_START_FAILURE, displayMessage)
NotificationManager.cancelNotification()
}
@Throws(Exception::class)
private fun doStartCoreLoop(service: Service, vpnInterface: ParcelFileDescriptor?) {
val mFilter = IntentFilter(AppConfig.BROADCAST_ACTION_SERVICE)
@@ -120,14 +132,27 @@ object CoreServiceManager {
@Throws(Exception::class)
private fun launchCore(service: Service, vpnInterface: ParcelFileDescriptor?, isReload: Boolean = false) {
val guid = MmkvManager.getSelectServer() ?: error("No server selected")
val config = MmkvManager.decodeServerConfig(guid) ?: error("Failed to decode server config")
val guid = MmkvManager.getSelectServer()
?: throw CoreStartException(
logMessage = "No server selected",
displayMessage = service.getString(R.string.core_error_no_server_selected)
)
val config = MmkvManager.decodeServerConfig(guid)
?: throw CoreStartException(
logMessage = "Failed to decode server config",
displayMessage = service.getString(R.string.core_error_decode_server_config)
)
LogUtil.i(AppConfig.TAG, "StartCore-Manager: Starting core loop for ${config.remarks}")
val result = CoreConfigManager.getV2rayConfig(service, guid)
LogUtil.d(AppConfig.TAG, result.content)
if (!result.status) {
error(result.errorMessage.ifBlank { "Failed to get V2Ray config" })
throw CoreStartException(
logMessage = result.errorMessage.ifBlank { "Failed to get V2Ray config" },
displayMessage = result.displayMessage.ifBlank {
service.getString(R.string.core_error_get_config)
}
)
}
currentConfig = config
@@ -149,7 +174,10 @@ object CoreServiceManager {
coreController.startLoop(result.content, tunFd)
if (!isRunning()) {
error("Core failed to start")
throw CoreStartException(
logMessage = "Core failed to start",
displayMessage = service.getString(R.string.core_error_start)
)
}
if (browserDialer != null) {
@@ -260,6 +288,10 @@ object CoreServiceManager {
LogUtil.i(AppConfig.TAG, "StartCore-Manager: Core reload finished")
true
} catch (e: CoreStartException) {
LogUtil.e(AppConfig.TAG, "StartCore-Manager: Failed to reload core: ${e.message}", e)
MessageHelper.sendMsg2UI(service, AppConfig.MSG_STATE_START_FAILURE, e.displayMessage)
false
} catch (e: Exception) {
val message = e.message?.takeUnless { it.isBlank() } ?: e.javaClass.simpleName
LogUtil.e(AppConfig.TAG, "StartCore-Manager: Failed to reload core: $message", e)
@@ -321,14 +353,16 @@ object CoreServiceManager {
time = coreController.measureDelay(SettingsManager.getDelayTestUrl())
} catch (e: Exception) {
LogUtil.e(AppConfig.TAG, "StartCore-Manager: Failed to measure delay", e)
errorStr = e.message?.substringAfter("\":") ?: "empty message"
errorStr = e.message?.substringAfter("\":")
?: service.getString(R.string.connection_test_empty_message)
}
if (time == -1L) {
try {
time = coreController.measureDelay(SettingsManager.getDelayTestUrl(true))
} catch (e: Exception) {
LogUtil.e(AppConfig.TAG, "StartCore-Manager: Failed to measure delay", e)
errorStr = e.message?.substringAfter("\":") ?: "empty message"
errorStr = e.message?.substringAfter("\":")
?: service.getString(R.string.connection_test_empty_message)
}
}
@@ -492,4 +526,4 @@ object CoreServiceManager {
}
}
}
}
}
@@ -4,6 +4,9 @@ data class ConfigResult(
var status: Boolean,
var guid: String? = null,
var content: String = "",
/** Stable English diagnostic text suitable for Logcat. */
var errorMessage: String = "",
/** Localized message suitable for the UI. */
var displayMessage: String = "",
)
@@ -3,6 +3,8 @@ package com.v2ray.ang.enums
import android.Manifest
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.annotation.StringRes
import com.v2ray.ang.R
/**
* Permission types used in the app, handling API level differences.
@@ -28,12 +30,13 @@ enum class PermissionType {
/** Return the actual Android permission string */
abstract fun getPermission(): String
/** Return a human-readable label for the permission */
fun getLabel(): String {
/** Return the string resource for the human-readable permission label. */
@StringRes
fun getLabelRes(): Int {
return when (this) {
CAMERA -> "Camera"
POST_NOTIFICATIONS -> "Notification"
ACCESS_LOCAL_NETWORK -> "Local Network"
CAMERA -> R.string.permission_camera
POST_NOTIFICATIONS -> R.string.permission_notification
ACCESS_LOCAL_NETWORK -> R.string.permission_local_network
}
}
}
@@ -36,7 +36,10 @@ class PermissionHelper(private val activity: ComponentActivity) {
if (isGranted) {
onGranted()
} else {
val message = "${activity.getString(R.string.toast_permission_denied)} ${permissionType.getLabel()}"
val message = activity.getString(
R.string.toast_permission_denied_for,
activity.getString(permissionType.getLabelRes())
)
activity.toast(message)
}
}
@@ -118,7 +118,7 @@ class SubscriptionUpdateService : Service() {
showNotification(
context = this,
titleResId = R.string.title_pref_auto_update_subscription,
content = "Updating ${subItem.remarks}"
content = getString(R.string.subscription_update_updating, subItem.remarks)
)
if (forcedUpdate || MmkvManager.decodeSettingsBool(AppConfig.PREF_UPDATE_SUBSCRIPTION, false)) {
@@ -184,13 +184,17 @@ class SubscriptionUpdateService : Service() {
private fun handleWorkerEvent(event: RealPingEvent, remarks: String, onWorkerDone: () -> Unit) {
when (event) {
is RealPingEvent.Progress -> {
val text = "${event.text} in $remarks"
val notificationText = getString(
R.string.subscription_update_progress,
event.text,
remarks
)
showNotification(
context = this,
titleResId = R.string.title_real_ping_all_server,
content = text
content = notificationText
)
LogUtil.i(AppConfig.TAG, "SubscriptionUpdateService: $text")
LogUtil.i(AppConfig.TAG, "SubscriptionUpdateService: ${event.text} in $remarks")
}
is RealPingEvent.Result -> {
@@ -53,7 +53,8 @@ fun AboutScreen(onBackClick: () -> Unit) {
val context = LocalContext.current
var showOssDialog by remember { mutableStateOf(false) }
val versionText = "v${BuildConfig.VERSION_NAME} (${CoreNativeManager.getLibVersion()})"
val libVersion = CoreNativeManager.getLibVersion() ?: stringResource(R.string.value_unknown)
val versionText = "v${BuildConfig.VERSION_NAME} ($libVersion)"
val appIdText = BuildConfig.APPLICATION_ID
Scaffold(
@@ -179,7 +179,9 @@ fun ScannerScreen(
if (isScanning) R.drawable.ic_stop_24dp
else R.drawable.ic_scan_24dp
),
contentDescription = if (isScanning) "stop scan" else "start scan"
contentDescription = stringResource(
if (isScanning) R.string.acc_stop_scanner else R.string.acc_start_scanner
)
)
}
if (isScanning && hasTorch) {
@@ -194,14 +196,17 @@ fun ScannerScreen(
if (torchEnabled) R.drawable.ic_flash_on_24dp
else R.drawable.ic_flash_off_24dp
),
contentDescription = "Torch"
contentDescription = stringResource(
if (torchEnabled) R.string.acc_turn_torch_off
else R.string.acc_turn_torch_on
)
)
}
}
IconButton(onClick = onSelectPhoto) {
Icon(
painterResource(R.drawable.ic_image_24dp),
contentDescription = "select image"
contentDescription = stringResource(R.string.acc_select_image)
)
}
}
@@ -245,7 +250,7 @@ private fun ScannerIdlePlaceholder(onStartClick: () -> Unit) {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
Icon(
painter = painterResource(R.drawable.ic_scan_24dp),
contentDescription = "Start Scanner",
contentDescription = stringResource(R.string.acc_start_scanner),
modifier = Modifier.size(80.dp),
tint = MaterialTheme.colorScheme.primary
)
@@ -151,7 +151,7 @@ fun AppPickerScreen(
IconButton(onClick = { showSearch = true }) {
Icon(
painterResource(R.drawable.ic_search_24dp),
contentDescription = stringResource(R.string.menu_item_search)
contentDescription = stringResource(R.string.acc_search)
)
}
}
@@ -59,7 +59,8 @@ fun CheckUpdateScreen(
val showUpdateDialog by viewModel.showUpdateDialog.collectAsStateWithLifecycle()
val updateResult by viewModel.updateResult.collectAsStateWithLifecycle()
val versionText = "v${BuildConfig.VERSION_NAME} (${CoreNativeManager.getLibVersion()})"
val libVersion = CoreNativeManager.getLibVersion() ?: stringResource(R.string.value_unknown)
val versionText = "v${BuildConfig.VERSION_NAME} ($libVersion)"
Scaffold(
contentWindowInsets = ScaffoldDefaults.contentWindowInsets,
@@ -45,6 +45,7 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.style.TextOverflow
@@ -91,7 +92,7 @@ fun AppTopBar(
IconButton(onClick = if (isSearchActive) onSearchClose else onBackClick) {
Icon(
painter = painterResource(R.drawable.ic_arrow_back_24dp),
contentDescription = "Back"
contentDescription = stringResource(R.string.acc_back)
)
}
}
@@ -175,7 +175,7 @@ fun QRCodeDialog(
text = {
Image(
bitmap = bitmap.asImageBitmap(),
contentDescription = stringResource(R.string.title_qr_code),
contentDescription = stringResource(R.string.acc_qr_code),
modifier = Modifier
.fillMaxWidth()
.aspectRatio(1f)
@@ -159,20 +159,20 @@ fun LogcatScreen(
IconButton(onClick = { showSearch = true }) {
Icon(
painterResource(R.drawable.ic_search_24dp),
contentDescription = "filter"
contentDescription = stringResource(R.string.acc_search)
)
}
}
IconButton(onClick = { viewModel.copyLogcat() }) {
Icon(
painterResource(R.drawable.ic_copy),
contentDescription = stringResource(R.string.logcat_copy)
contentDescription = stringResource(R.string.acc_copy_log)
)
}
IconButton(onClick = { onShareLogcat() }) {
Icon(
painterResource(R.drawable.ic_share_24dp),
contentDescription = stringResource(R.string.logcat_share)
contentDescription = stringResource(R.string.acc_share_log)
)
}
IconButton(onClick = {
@@ -180,7 +180,7 @@ fun LogcatScreen(
}) {
Icon(
painterResource(R.drawable.ic_delete_24dp),
contentDescription = stringResource(R.string.logcat_clear)
contentDescription = stringResource(R.string.acc_clear_log)
)
}
}
@@ -192,7 +192,7 @@ fun LogcatScreen(
}) {
Icon(
painterResource(R.drawable.ic_restore_24dp),
contentDescription = stringResource(R.string.pull_down_to_refresh)
contentDescription = stringResource(R.string.acc_refresh)
)
}
}
@@ -24,6 +24,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.v2ray.ang.R
import com.v2ray.ang.ui.compose.AppDivider
@@ -75,7 +76,9 @@ fun MainBottomBar(
Icon(
painter = if (isRunning) painterResource(R.drawable.ic_stop_24dp)
else painterResource(R.drawable.ic_play_24dp),
contentDescription = if (isRunning) "Stop" else "Start",
contentDescription = stringResource(
if (isRunning) R.string.acc_stop else R.string.acc_start
),
tint = Color.White,
modifier = Modifier.size(24.dp)
)
@@ -59,23 +59,23 @@ fun MainTopBar(
navigationIcon = {
if (showSearch) {
IconButton(onClick = onSearchClose) {
Icon(painterResource(R.drawable.ic_arrow_back_24dp), contentDescription = "Back")
Icon(painterResource(R.drawable.ic_arrow_back_24dp), contentDescription = stringResource(R.string.acc_back))
}
} else {
IconButton(onClick = onMenuClick) {
Icon(painterResource(R.drawable.ic_menu_24dp), contentDescription = "Menu")
Icon(painterResource(R.drawable.ic_menu_24dp), contentDescription = stringResource(R.string.acc_open_menu))
}
}
},
actions = {
if (!showSearch) {
IconButton(onClick = { onSearchToggle(true) }) {
Icon(painterResource(R.drawable.ic_search_24dp), contentDescription = "filter")
Icon(painterResource(R.drawable.ic_search_24dp), contentDescription = stringResource(R.string.acc_search))
}
}
Box(modifier = Modifier.wrapContentSize(Alignment.TopEnd)) {
IconButton(onClick = { showImportMenu = true }) {
Icon(painterResource(R.drawable.ic_add_24dp), contentDescription = "Add")
Icon(painterResource(R.drawable.ic_add_24dp), contentDescription = stringResource(R.string.acc_add))
}
DropdownMenu(
expanded = showImportMenu,
@@ -96,7 +96,7 @@ fun MainTopBar(
}
Box(modifier = Modifier.wrapContentSize(Alignment.TopEnd)) {
IconButton(onClick = { showMenu = true }) {
Icon(painterResource(R.drawable.ic_more_vert_24dp), contentDescription = "More")
Icon(painterResource(R.drawable.ic_more_vert_24dp), contentDescription = stringResource(R.string.acc_more))
}
DropdownMenu(
expanded = showMenu,
@@ -160,7 +160,7 @@ fun PerAppProxyScreen(
IconButton(onClick = { showSearch = true }) {
Icon(
painterResource(R.drawable.ic_search_24dp),
contentDescription = stringResource(R.string.menu_item_search)
contentDescription = stringResource(R.string.acc_search)
)
}
}
@@ -252,7 +252,7 @@ fun PerAppProxyScreen(
IconButton(onClick = onInfoClick) {
Icon(
painter = painterResource(R.drawable.ic_about_24dp),
contentDescription = stringResource(R.string.summary_pref_per_app_proxy),
contentDescription = stringResource(R.string.acc_per_app_proxy_information),
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
}
@@ -186,14 +186,14 @@ fun RoutingEditScreen(
IconButton(onClick = { showDeleteConfirm = true }) {
Icon(
painterResource(R.drawable.ic_delete_24dp),
contentDescription = stringResource(R.string.menu_item_del_config)
contentDescription = stringResource(R.string.acc_delete)
)
}
}
IconButton(onClick = { onSave(buildRuleset()) }) {
Icon(
painterResource(R.drawable.ic_fab_check),
contentDescription = stringResource(R.string.menu_item_save_config)
contentDescription = stringResource(R.string.acc_save)
)
}
}
@@ -225,7 +225,7 @@ fun RoutingSettingScreen(
IconButton(onClick = onAddRule) {
Icon(
painterResource(R.drawable.ic_add_24dp),
contentDescription = stringResource(R.string.routing_settings_add_rule)
contentDescription = stringResource(R.string.acc_add_rule)
)
}
Box {
@@ -342,7 +342,7 @@ private fun RoutingRulesetItem(
Spacer(modifier = Modifier.width(4.dp))
Icon(
painter = painterResource(R.drawable.ic_lock_24dp),
contentDescription = "Locked",
contentDescription = stringResource(R.string.acc_locked),
modifier = Modifier.size(16.dp),
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
@@ -376,7 +376,7 @@ private fun RoutingRulesetItem(
IconButton(onClick = onEdit) {
Icon(
painter = painterResource(R.drawable.ic_edit_24dp),
contentDescription = "Edit"
contentDescription = stringResource(R.string.acc_edit)
)
}
Spacer(modifier = Modifier.height(4.dp))
@@ -461,14 +461,14 @@ abstract class BaseServerActivity : BaseComponentActivity() {
IconButton(onClick = { showDeleteDialog = true }) {
Icon(
painterResource(R.drawable.ic_delete_24dp),
stringResource(R.string.menu_item_del_config)
stringResource(R.string.acc_delete)
)
}
}
IconButton(onClick = onSaveClick) {
Icon(
painterResource(R.drawable.ic_fab_check),
stringResource(R.string.menu_item_save_config)
stringResource(R.string.acc_save)
)
}
}
@@ -347,13 +347,13 @@ fun ServerScreen(
actions = {
if (guid.isNotEmpty() && !isRunning) {
IconButton(onClick = { showDeleteDialog = true }) {
Icon(painterResource(R.drawable.ic_delete_24dp), stringResource(R.string.menu_item_del_config))
Icon(painterResource(R.drawable.ic_delete_24dp), stringResource(R.string.acc_delete))
}
}
IconButton(onClick = {
onSave(buildProfileItem())
}) {
Icon(painterResource(R.drawable.ic_fab_check), stringResource(R.string.menu_item_save_config))
Icon(painterResource(R.drawable.ic_fab_check), stringResource(R.string.acc_save))
}
}
)
@@ -120,9 +120,14 @@ class ServerCustomConfigActivity : BaseComponentActivity() {
"Failed to parse custom configuration",
e
)
val detail = e.cause?.message?.takeIf { it.isNotBlank() }
?: e.message?.takeIf { it.isNotBlank() }
toast(
"${getString(R.string.toast_malformed_json)} " +
"${e.cause?.message.orEmpty()}"
if (detail.isNullOrBlank()) {
getString(R.string.toast_malformed_json)
} else {
getString(R.string.toast_malformed_json_detail, detail)
}
)
return false
}
@@ -315,14 +320,14 @@ fun ServerCustomConfigScreen(
IconButton(onClick = { showDeleteConfirm = true }) {
Icon(
painterResource(R.drawable.ic_delete_24dp),
contentDescription = stringResource(R.string.menu_item_del_config)
contentDescription = stringResource(R.string.acc_delete)
)
}
}
IconButton(onClick = { onSave(remarks, textFieldState.text.toString()) }) {
Icon(
painterResource(R.drawable.ic_fab_check),
contentDescription = stringResource(R.string.menu_item_save_config)
contentDescription = stringResource(R.string.acc_save)
)
}
}
@@ -245,7 +245,7 @@ fun ServerGroupScreen(
actions = {
if (showDelete) {
IconButton(onClick = { showDeleteConfirm = true }) {
Icon(painterResource(R.drawable.ic_delete_24dp), contentDescription = stringResource(R.string.menu_item_del_config))
Icon(painterResource(R.drawable.ic_delete_24dp), contentDescription = stringResource(R.string.acc_delete))
}
}
IconButton(onClick = {
@@ -253,7 +253,7 @@ fun ServerGroupScreen(
val subIdx = subDisplay.indexOf(subValue).coerceAtLeast(0)
onSave(remarks, filter, typeIdx, subIdx, testOutbounds, fallbackTag)
}) {
Icon(painterResource(R.drawable.ic_fab_check), contentDescription = stringResource(R.string.menu_item_save_config))
Icon(painterResource(R.drawable.ic_fab_check), contentDescription = stringResource(R.string.acc_save))
}
}
)
@@ -228,11 +228,11 @@ fun ProxyChainScreen(
actions = {
if (showDelete) {
IconButton(onClick = { showProfileDeleteConfirm = true }) {
Icon(painterResource(R.drawable.ic_delete_24dp), contentDescription = stringResource(R.string.menu_item_del_config))
Icon(painterResource(R.drawable.ic_delete_24dp), contentDescription = stringResource(R.string.acc_delete))
}
}
IconButton(onClick = { onSave(remarks, members) }) {
Icon(painterResource(R.drawable.ic_fab_check), contentDescription = stringResource(R.string.menu_item_save_config))
Icon(painterResource(R.drawable.ic_fab_check), contentDescription = stringResource(R.string.acc_save))
}
}
)
@@ -247,7 +247,7 @@ fun ProxyChainScreen(
.offset(y = -20.dp)
.navigationBarsPadding()
) {
Icon(painterResource(R.drawable.ic_add_24dp), contentDescription = "Add member")
Icon(painterResource(R.drawable.ic_add_24dp), contentDescription = stringResource(R.string.acc_add_member))
}
}
) { innerPadding ->
@@ -320,7 +320,7 @@ fun ProxyChainScreen(
}) {
Icon(
painterResource(R.drawable.ic_delete_24dp),
contentDescription = "Remove"
contentDescription = stringResource(R.string.acc_remove)
)
}
}
@@ -105,11 +105,10 @@ class TaskerActivity : BaseComponentActivity() {
val intent = Intent()
val remarks = lstData[position]
val blurb = if (switchState.value) {
"Start $remarks"
} else {
"Stop $remarks"
}
val blurb = getString(
if (switchState.value) R.string.tasker_blurb_start else R.string.tasker_blurb_stop,
remarks
)
intent.putExtra(AppConfig.TASKER_EXTRA_BUNDLE, extraBundle)
intent.putExtra(AppConfig.TASKER_EXTRA_STRING_BLURB, blurb)
@@ -135,7 +134,7 @@ fun TaskerScreen(
onBackClick = onBackClick,
actions = {
IconButton(onClick = onSave) {
Icon(painterResource(R.drawable.ic_fab_check), contentDescription = stringResource(R.string.menu_item_save_config))
Icon(painterResource(R.drawable.ic_fab_check), contentDescription = stringResource(R.string.acc_save))
}
}
)
@@ -173,11 +173,11 @@ fun SubEditScreen(
IconButton(onClick = {
if (confirmRemove) showDeleteConfirm = true else onDelete()
}) {
Icon(painterResource(R.drawable.ic_delete_24dp), contentDescription = stringResource(R.string.menu_item_del_config))
Icon(painterResource(R.drawable.ic_delete_24dp), contentDescription = stringResource(R.string.acc_delete))
}
}
IconButton(onClick = { buildSubItem()?.let { onSave(it) } }) {
Icon(painterResource(R.drawable.ic_fab_check), contentDescription = stringResource(R.string.menu_item_save_config))
Icon(painterResource(R.drawable.ic_fab_check), contentDescription = stringResource(R.string.acc_save))
}
}
)
@@ -135,10 +135,10 @@ fun SubSettingScreen(
isLoading = isLoading,
actions = {
IconButton(onClick = onAddClick) {
Icon(painterResource(R.drawable.ic_add_24dp), contentDescription = stringResource(R.string.menu_item_add_config))
Icon(painterResource(R.drawable.ic_add_24dp), contentDescription = stringResource(R.string.acc_add_subscription))
}
IconButton(onClick = { showUpdateDialog = true }) {
Icon(painterResource(R.drawable.ic_restore_24dp), contentDescription = stringResource(R.string.title_sub_update))
Icon(painterResource(R.drawable.ic_restore_24dp), contentDescription = stringResource(R.string.acc_update_subscriptions))
}
}
)
@@ -202,14 +202,14 @@ fun SubSettingScreen(
}) {
Icon(
painter = painterResource(R.drawable.ic_share_24dp),
contentDescription = "Share"
contentDescription = stringResource(R.string.acc_share_subscription)
)
}
}
IconButton(onClick = { onEditSub(subCache.guid) }) {
Icon(
painter = painterResource(R.drawable.ic_edit_24dp),
contentDescription = "Edit"
contentDescription = stringResource(R.string.acc_edit)
)
}
IconButton(onClick = {
@@ -218,7 +218,7 @@ fun SubSettingScreen(
}) {
Icon(
painter = painterResource(R.drawable.ic_delete_24dp),
contentDescription = "Delete"
contentDescription = stringResource(R.string.acc_delete)
)
}
}
@@ -280,7 +280,7 @@ fun UserAssetScreen(
actions = {
Box(modifier = Modifier.wrapContentSize(Alignment.TopEnd)) {
IconButton(onClick = { showAddMenu = true }) {
Icon(painterResource(R.drawable.ic_add_24dp), contentDescription = stringResource(R.string.menu_item_add_asset))
Icon(painterResource(R.drawable.ic_add_24dp), contentDescription = stringResource(R.string.acc_add_asset))
}
DropdownMenu(
expanded = showAddMenu,
@@ -300,7 +300,7 @@ fun UserAssetScreen(
}
}
IconButton(onClick = onDownloadClick) {
Icon(painterResource(R.drawable.ic_cloud_download_24dp), contentDescription = stringResource(R.string.menu_item_download_file))
Icon(painterResource(R.drawable.ic_cloud_download_24dp), contentDescription = stringResource(R.string.acc_download_file))
}
}
)
@@ -400,7 +400,7 @@ private fun UserAssetItem(
IconButton(onClick = onEdit) {
Icon(
painter = painterResource(R.drawable.ic_edit_24dp),
contentDescription = stringResource(R.string.menu_item_edit_config),
contentDescription = stringResource(R.string.acc_edit),
modifier = Modifier.size(24.dp)
)
}
@@ -408,7 +408,7 @@ private fun UserAssetItem(
IconButton(onClick = onDeleteClick) {
Icon(
painter = painterResource(R.drawable.ic_delete_24dp),
contentDescription = stringResource(R.string.menu_item_del_config),
contentDescription = stringResource(R.string.acc_delete),
modifier = Modifier.size(24.dp)
)
}
@@ -152,14 +152,14 @@ fun UserAssetUrlScreen(
IconButton(onClick = { showDeleteConfirm = true }) {
Icon(
painterResource(R.drawable.ic_delete_24dp),
contentDescription = stringResource(R.string.menu_item_del_config)
contentDescription = stringResource(R.string.acc_delete)
)
}
}
IconButton(onClick = { onSave(remarks, url) }) {
Icon(
painterResource(R.drawable.ic_fab_check),
contentDescription = stringResource(R.string.menu_item_save_config)
contentDescription = stringResource(R.string.acc_save)
)
}
}
@@ -490,4 +490,54 @@
<string name="backup_location_local">محلي</string>
<string name="backup_location_webdav" translatable="false">WebDAV</string>
<string name="acc_refresh">تحديث السجل</string>
<string name="toast_permission_denied_for">تم رفض إذن %1$s</string>
<string name="acc_add_subscription">إضافة اشتراك</string>
<string name="toast_malformed_json_detail">تنسيق التكوين غير صالح: %1$s</string>
<string name="acc_add_asset">إضافة مصدر موارد</string>
<string name="acc_download_file">تنزيل ملفات الموارد</string>
<string name="acc_qr_code">رمز QR</string>
<string name="acc_copy_log">نسخ السجل</string>
<string name="acc_clear_log">مسح السجل</string>
<string name="acc_add_rule">إضافة قاعدة توجيه</string>
<string name="core_error_no_server_selected">لم يتم تحديد تكوين</string>
<string name="core_error_decode_server_config">تعذرت قراءة التكوين المحدد</string>
<string name="core_error_build_config_context">تعذر إعداد التكوين المحدد</string>
<string name="core_error_get_config">تعذر إنشاء تكوين النواة</string>
<string name="core_error_get_config_detail">تعذر إنشاء تكوين النواة: %1$s</string>
<string name="core_error_get_speedtest_config_detail">تعذر إنشاء تكوين النواة لاختبار السرعة: %1$s</string>
<string name="core_error_custom_config_empty">التكوين المخصص فارغ</string>
<string name="core_error_start">تعذر تشغيل النواة</string>
<string name="acc_start">بدء الخدمة</string>
<string name="acc_stop">إيقاف الخدمة</string>
<string name="acc_back">رجوع</string>
<string name="acc_search">بحث</string>
<string name="acc_add">إضافة تكوين</string>
<string name="acc_more">المزيد من الخيارات</string>
<string name="acc_share_subscription">مشاركة رابط الاشتراك</string>
<string name="acc_share_log">مشاركة السجل</string>
<string name="acc_remove">إزالة عضو من سلسلة الوكلاء</string>
<string name="acc_add_member">إضافة عضو إلى سلسلة الوكلاء</string>
<string name="acc_start_scanner">بدء ماسح رمز QR</string>
<string name="acc_stop_scanner">إيقاف ماسح رمز QR</string>
<string name="acc_turn_torch_on">تشغيل المصباح</string>
<string name="acc_turn_torch_off">إطفاء المصباح</string>
<string name="acc_select_image">اختيار صورة لمسحها</string>
<string name="acc_locked">يتم الاحتفاظ بالقاعدة عند استيراد الإعدادات المسبقة</string>
<string name="acc_open_menu">فتح قائمة التنقل</string>
<string name="acc_edit">تعديل</string>
<string name="acc_delete">حذف</string>
<string name="acc_save">حفظ</string>
<string name="acc_update_subscriptions">تحديث الاشتراكات</string>
<string name="acc_per_app_proxy_information">معلومات الوكيل لكل تطبيق</string>
<string name="permission_camera">الكاميرا</string>
<string name="permission_notification">الإشعارات</string>
<string name="permission_local_network">الشبكة المحلية</string>
<string name="subscription_update_updating">جارٍ تحديث الاشتراك: %1$s</string>
<string name="subscription_update_progress">جارٍ اختبار %2$s: %1$s</string>
<string name="tasker_blurb_start">تشغيل %1$s</string>
<string name="tasker_blurb_stop">إيقاف %1$s</string>
<string name="connection_test_empty_message">لا تتوفر تفاصيل</string>
<string name="value_unknown">غير معروف</string>
</resources>
@@ -490,4 +490,54 @@
<string name="backup_location_local">স্থানীয়</string>
<string name="backup_location_webdav" translatable="false">WebDAV</string>
<string name="acc_refresh">লগ রিফ্রেশ করুন</string>
<string name="toast_permission_denied_for">%1$s ব্যবহারের অনুমতি দেওয়া হয়নি</string>
<string name="acc_add_subscription">সাবস্ক্রিপশন যোগ করুন</string>
<string name="toast_malformed_json_detail">কনফিগারেশন ফরম্যাট সঠিক নয়: %1$s</string>
<string name="acc_add_asset">অ্যাসেট উৎস যোগ করুন</string>
<string name="acc_download_file">অ্যাসেট ফাইল ডাউনলোড করুন</string>
<string name="acc_qr_code">QR কোড</string>
<string name="acc_copy_log">লগ কপি করুন</string>
<string name="acc_clear_log">লগ মুছুন</string>
<string name="acc_add_rule">রাউটিং নিয়ম যোগ করুন</string>
<string name="core_error_no_server_selected">কোনো কনফিগারেশন নির্বাচন করা হয়নি</string>
<string name="core_error_decode_server_config">নির্বাচিত কনফিগারেশন পড়তে ব্যর্থ</string>
<string name="core_error_build_config_context">নির্বাচিত কনফিগারেশন প্রস্তুত করতে ব্যর্থ</string>
<string name="core_error_get_config">কোর কনফিগারেশন তৈরি করতে ব্যর্থ</string>
<string name="core_error_get_config_detail">কোর কনফিগারেশন তৈরি করতে ব্যর্থ: %1$s</string>
<string name="core_error_get_speedtest_config_detail">স্পিড টেস্টের জন্য কোর কনফিগারেশন তৈরি করতে ব্যর্থ: %1$s</string>
<string name="core_error_custom_config_empty">কাস্টম কনফিগারেশন খালি</string>
<string name="core_error_start">কোর চালু করতে ব্যর্থ</string>
<string name="acc_start">সার্ভিস শুরু করুন</string>
<string name="acc_stop">সার্ভিস বন্ধ করুন</string>
<string name="acc_back">ফিরে যান</string>
<string name="acc_search">অনুসন্ধান করুন</string>
<string name="acc_add">কনফিগারেশন যোগ করুন</string>
<string name="acc_more">আরও বিকল্প</string>
<string name="acc_share_subscription">সাবস্ক্রিপশন লিংক শেয়ার করুন</string>
<string name="acc_share_log">লগ শেয়ার করুন</string>
<string name="acc_remove">প্রক্সি চেইনের সদস্য সরান</string>
<string name="acc_add_member">প্রক্সি চেইনে সদস্য যোগ করুন</string>
<string name="acc_start_scanner">QR স্ক্যানার চালু করুন</string>
<string name="acc_stop_scanner">QR স্ক্যানার বন্ধ করুন</string>
<string name="acc_turn_torch_on">ফ্ল্যাশলাইট চালু করুন</string>
<string name="acc_turn_torch_off">ফ্ল্যাশলাইট বন্ধ করুন</string>
<string name="acc_select_image">স্ক্যান করার জন্য ছবি নির্বাচন করুন</string>
<string name="acc_locked">প্রিসেট আমদানি করলে নিয়মটি রাখা হবে</string>
<string name="acc_open_menu">নেভিগেশন মেনু খুলুন</string>
<string name="acc_edit">সম্পাদনা করুন</string>
<string name="acc_delete">মুছুন</string>
<string name="acc_save">সংরক্ষণ করুন</string>
<string name="acc_update_subscriptions">সাবস্ক্রিপশন আপডেট করুন</string>
<string name="acc_per_app_proxy_information">প্রতি-অ্যাপ প্রক্সির তথ্য</string>
<string name="permission_camera">ক্যামেরা</string>
<string name="permission_notification">বিজ্ঞপ্তি</string>
<string name="permission_local_network">স্থানীয় নেটওয়ার্ক</string>
<string name="subscription_update_updating">সাবস্ক্রিপশন আপডেট করা হচ্ছে: %1$s</string>
<string name="subscription_update_progress">%2$s পরীক্ষা করা হচ্ছে: %1$s</string>
<string name="tasker_blurb_start">%1$s চালু করুন</string>
<string name="tasker_blurb_stop">%1$s বন্ধ করুন</string>
<string name="connection_test_empty_message">কোনো বিবরণ পাওয়া যায়নি</string>
<string name="value_unknown">অজানা</string>
</resources>
@@ -3,12 +3,12 @@
<string name="app_name" translatable="false">v2rayNG</string>
<string name="app_widget_name">آلشت</string>
<string name="app_tile_name">آلشت</string>
<string name="app_tile_first_use">سی کرت ٱولی و کار بوردن ای ویژیی، ٱول ز من برنومه ی سرور ازاف کۊنین</string>
<string name="app_tile_first_use">سی کرت ٱولی و کار بوردن ای ویژیی، ٱول ز من برنومه ی سرور اضاف کۊنین</string>
<string name="navigation_drawer_open">گۊشیڌن نومگه کشاری</string>
<string name="navigation_drawer_close">بستن نومگه کشاری</string>
<string name="migration_success">جاگورویی داده یل وا مووفقیت ٱنجوم وابی!</string>
<string name="migration_success">جاگورویی داڌه یل وا مووفقیت ٱنجوم وابی!</string>
<string name="action_stop_service">واڌاشتن سرویس</string>
<string name="migration_fail">جاگورویی داده یل شکست خرد!</string>
<string name="migration_fail">جاگورویی داڌه یل شکست خرد!</string>
<string name="pull_down_to_refresh">سی وانۊ کردن، بلگه ن بلم بکشین!</string>
<!-- Notifications -->
@@ -29,7 +29,7 @@
<string name="menu_item_del_config">پاک کردن کانفیگ</string>
<string name="menu_item_import_config_qrcode">و من ٱووردن کانفیگ ز QRcode</string>
<string name="menu_item_import_config_clipboard">و من ٱووردن کانفیگ ز کلیپ بورد</string>
<string name="menu_item_import_config_local">و من ٱووردن کانفیگ ز مهلی</string>
<string name="menu_item_import_config_local">و من ٱووردن کانفیگ ز محلی</string>
<string name="menu_item_import_config_policy_group">ٱووردن [بونکۊ سیاست]</string>
<string name="menu_item_import_config_proxy_chain">ٱووردن [زنجیره پروکسی]</string>
<string name="menu_item_import_config_manually_vmess">ٱووردن [VMess]</string>
@@ -40,16 +40,16 @@
<string name="menu_item_import_config_manually_trojan">ٱووردن [Trojan]</string>
<string name="menu_item_import_config_manually_wireguard">ٱووردن [Wireguard]</string>
<string name="menu_item_import_config_manually_hysteria2">ٱووردن [Hysteria2]</string>
<string name="confirm_delete_visible_profiles">آیا مطمئن هستید که می‌خواهید همه پروفایل‌های نمایش‌داده‌شده را حذف کنید؟</string>
<string name="confirm_delete_duplicate_profiles">آیا مطمئن هستید که می‌خواهید همه پروفایل‌های تکراری نمایش‌داده‌شده را حذف کنید؟</string>
<string name="confirm_delete_invalid_profiles">لطفاً ابتدا پروفایل‌ها را آزمایش کنید. آیا مطمئن هستید که می‌خواهید همه پروفایل‌های نامعتبر نمایش‌داده‌شده را حذف کنید؟</string>
<string name="confirm_delete_profile">آیا مطمئن هستید که می‌خواهید این پروفایل را حذف کنید؟</string>
<string name="confirm_delete_policy_group">آیا مطمئن هستید که می‌خواهید این گروه سیاست را حذف کنید؟</string>
<string name="confirm_delete_proxy_chain_member">آیا مطمئن هستید که می‌خواهید این عضو زنجیره پراکسی را حذف کنید؟</string>
<string name="confirm_delete_routing_rule">آیا مطمئن هستید که می‌خواهید این قانون مسیریابی را حذف کنید؟</string>
<string name="confirm_delete_subscription_group">آیا مطمئن هستید که می‌خواهید این گروه اشتراک را حذف کنید؟</string>
<string name="confirm_delete_asset_file">آیا مطمئن هستید که می‌خواهید فایل دارایی \"%1$s\" را حذف کنید؟</string>
<string name="confirm_delete_asset_source">آیا مطمئن هستید که می‌خواهید این منبع دارایی را حذف کنید؟</string>
<string name="confirm_delete_visible_profiles">پوی کانفیگا ک هیم سکو نشووݩ داڌه ابۊن پاک ابۊن، هنی هم اخۊی پاکسووݩ کۊنی؟</string>
<string name="confirm_delete_duplicate_profiles">پوی کانفیگا تکراری ک هیم سکو نشووݩ داڌه ابۊن پاک ابۊن، هنی هم اخۊی پاکسووݩ کۊنی؟</string>
<string name="confirm_delete_invalid_profiles">ٱول کانفیگا ن آزمایش کۊنین. پوی کانفیگا نا موئتبر ک هیم سکو نشووݩ داڌه ابۊن پاک ابۊن، هنی هم اخۊی پاکسووݩ کۊنی؟</string>
<string name="confirm_delete_profile">ای کانفیگ پاک ابۊ، هنی هم اخۊی پاکس کۊنی؟</string>
<string name="confirm_delete_policy_group">ای بونکۊ سیاست پاک ابۊ، هنی هم اخۊی پاکس کۊنی؟</string>
<string name="confirm_delete_proxy_chain_member">ای عوزو زنجیره پروکسی پاک ابۊ، هنی هم اخۊی پاکس کۊنی؟</string>
<string name="confirm_delete_routing_rule">ای قانووݩ تور جوستن پاک ابۊ، هنی هم اخۊی پاکس کۊنی؟</string>
<string name="confirm_delete_subscription_group">ای بونکۊ اشتراک پاک ابۊ، هنی هم اخۊی پاکس کۊنی؟</string>
<string name="confirm_delete_asset_file">فایل بونچک جغرافیایی «%1$s» پاک ابۊ، هنی هم اخۊی پاکس کۊنی؟</string>
<string name="confirm_delete_asset_source">ای بونچک فایلا جغرافیایی پاک ابۊ، هنی هم اخۊی پاکس کۊنی؟</string>
<string name="server_lab_remarks">نیشتنا</string>
<string name="server_lab_address">نشۊوی</string>
<string name="server_lab_port">پورت</string>
@@ -59,7 +59,7 @@
<string name="server_lab_network">شبکه</string>
<string name="server_lab_more_function">جاگورو</string>
<string name="server_lab_head_type">نوع هدر</string>
<string name="server_lab_mode_type">هالت gRPC</string>
<string name="server_lab_mode_type">حالت gRPC</string>
<string name="server_lab_request_host">هاست</string>
<string name="server_lab_request_host_http">هاست http</string>
<string name="server_lab_request_host_ws">هاست ws</string>
@@ -73,11 +73,11 @@
<string name="server_lab_path_httpupgrade">تور HTTPUpgrade</string>
<string name="server_lab_path_xhttp">تور XHTTP</string>
<string name="server_lab_path_h2">تور H2</string>
<string name="server_lab_path_quic">تور QUIC</string>
<string name="server_lab_path_quic">کیلیت QUIC</string>
<string name="server_lab_path_kcp">KCP seed</string>
<string name="server_lab_path_grpc">نوم سرویس gRPC</string>
<string name="server_lab_stream_security" translatable="false">TLS</string>
<string name="server_lab_stream_fingerprint">Fingerprint</string>
<string name="server_lab_stream_fingerprint">جا کلک</string>
<string name="server_lab_stream_alpn" translatable="false">ALPN</string>
<string name="server_lab_allow_insecure">تئیڌ گوواهی ن ناڌیڌه بگرین (allowInsecure)</string>
<string name="server_lab_sni" translatable="false">SNI</string>
@@ -96,33 +96,33 @@
<string name="server_lab_mldsa65_verify" translatable="false">mldsa65Verify</string>
<string name="server_lab_secret_key">کیلیت سیخومی</string>
<string name="server_lab_reserved">Reserved(اختیاری، وا کاما (,) ز یک جوڌا ابۊن)</string>
<string name="server_lab_local_address">نشۊوی مهلی (اختیاری IPv4/IPv6، وا کاما (,) ز یک جوڌا ابۊن)</string>
<string name="server_lab_local_mtu">Mtu(اختیاری، پؽش فرز 1420)</string>
<string name="server_lab_kcp_mtu">mKCP MTU (اختیاری، پؽش فرز هسته 1350)</string>
<string name="server_lab_kcp_tti">mKCP TTI (اختیاری، پؽش فرز هسته 50)</string>
<string name="server_lab_local_address">نشۊوی محلی (اختیاری IPv4/IPv6، وا کاما (,) ز یک جوڌا ابۊن)</string>
<string name="server_lab_local_mtu">MTU(اختیاری، پؽش فرض 1420)</string>
<string name="server_lab_kcp_mtu">mKCP MTU (اختیاری، پؽش فرض هسته 1350)</string>
<string name="server_lab_kcp_tti">mKCP TTI (اختیاری، پؽش فرض هسته 50)</string>
<string name="toast_success">وا مووفقیت ٱنجوم وابی</string>
<string name="toast_failure">شکست خرد</string>
<string name="toast_none_data">هیچ داده ای وۊجۊڌ نڌاره</string>
<string name="toast_none_data">هیچ داڌه ای وۊجۊڌ نڌاره</string>
<string name="toast_incorrect_protocol">پوروتوکول نادوروست</string>
<string name="toast_decoding_failed">رزم گوشایی ٱنجوم نوابی</string>
<string name="title_file_chooser">پسند فایل کانفیگ</string>
<string name="toast_require_file_manager">ی برنومه دؽوۉداری فایل بپۊرنین.</string>
<string name="server_customize_config">کانفیگ سفارشی</string>
<string name="toast_config_file_invalid">کانفیگ نا موئتبر هڌ</string>
<string name="server_lab_content">موئتوا</string>
<string name="toast_none_data_clipboard">هیچ داده ای من کلیپ بورد وۊجۊڌ نڌاره</string>
<string name="server_lab_content">محتوا</string>
<string name="toast_none_data_clipboard">هیچ داڌه ای من کلیپ بورد وۊجۊڌ نڌاره</string>
<string name="toast_invalid_url">نشۊوی اینترنتی نا موئتبر هڌ</string>
<string name="toast_insecure_url_protocol">نشۊوی اشتراک پوروتوکول نا ٱمن HTTP ن و کار مبرین</string>
<string name="server_lab_need_inbound">موتمعن بۊین ک پورت وۊرۊڌی وا سامووا ی جۊر هڌ</string>
<string name="server_lab_need_inbound">موطمئن بۊین ک پورت وۊرۊڌی وا سامووا ی جۊر هڌ</string>
<string name="toast_malformed_json">کانفیگ نا موئتبر هڌ</string>
<string name="server_lab_request_host6">هاست(SNI)(اختیاری)</string>
<string name="toast_action_not_allowed">ای کار ممنۊع هڌ</string>
<string name="server_obfs_password">رزم obfs</string>
<string name="server_lab_port_hop">پورت گوم (درگا سرورن ز نۊ هؽل اکونه)</string>
<string name="server_lab_port_hop_interval">فاسله پورت گوم (سانیه)</string>
<string name="server_lab_port_hop_interval">فاصله پورت گوم (ثانیه)</string>
<string name="server_lab_bandwidth_down">ب لم ٱووڌن پئنا باند (واهڌ)</string>
<string name="server_lab_bandwidth_up">وا روء رئڌن پئنا باند (واهڌ)</string>
<string name="server_lab_xhttp_mode">هالت XHTTP</string>
<string name="server_lab_xhttp_mode">حالت XHTTP</string>
<string name="server_lab_xhttp_extra">XHTTP Extra خام JSON، قالوو: { XHTTPObject }</string>
<string name="server_lab_final_mask">finalMask خام JSON، قالوو: { FinalMaskObject }</string>
<string name="server_lab_ech_config_list" translatable="false">echConfigList</string>
@@ -143,20 +143,20 @@
<string name="menu_item_scan_qrcode">اسکن QRcode</string>
<string name="title_url" translatable="false">URL</string>
<string name="menu_item_download_file">دانلود فایلا</string>
<string name="title_user_asset_add_url">نشۊوی اینترنتی دارایی ن ازاف کۊنین</string>
<string name="title_user_asset_add_url">نشۊوی اینترنتی بونچک ن اضاف کۊنین</string>
<string name="msg_file_not_found">فایلن نجوست</string>
<string name="msg_remark_is_duplicate">ای نوم ز زیتر بیڌس</string>
<string name="asset_geo_files_sources">بونچک فایلا جوقرافیایی (اختیاری)</string>
<string name="asset_geo_files_sources">بونچک فایلا جغرافیایی (اختیاری)</string>
<!-- PerAppProxyActivity -->
<string name="msg_dialog_progress">هونی بار ونی ابۊ...</string>
<string name="menu_item_search">پیتینیڌن</string>
<string name="menu_item_select_all">پسند پوی</string>
<string name="menu_item_invert_selection">چواسه کردن پسندا</string>
<string name="msg_enter_keywords">کلمه یل کلیدی ن بزنین</string>
<string name="switch_bypass_apps_mode">هالت دور زیڌن</string>
<string name="msg_enter_keywords">کلمه یل کلیڌی ن بزنین</string>
<string name="switch_bypass_apps_mode">حالت دور زیڌن</string>
<string name="menu_item_select_proxy_app">پسند خوتکار برنومه یلی ک پروکسی اخون</string>
<string name="msg_downloading_content">موئتوا هونی دانلود ابۊن...</string>
<string name="msg_downloading_content">محتوا هونی دانلود ابۊن...</string>
<string name="menu_item_export_proxy_app">و در کشیڌن من کلیپ بورد</string>
<string name="menu_item_import_proxy_app">و من ٱووردن ز کلیپ بورد</string>
<string name="per_app_proxy_settings">سامووا ب تفکیک برنومه</string>
@@ -169,7 +169,7 @@
<string name="title_core_settings">سامووا هسته</string>
<string name="title_vpn_settings">سامووا VPN</string>
<string name="title_pref_per_app_proxy">پروکسی و ری برنومه</string>
<string name="summary_pref_per_app_proxy">پوی وولاتی: برنومه پسند وابیڌه وا ی پروکسی منپیز ابۊ، برنومه پسند نوابیڌه موستقیمن منپیز ابۊ.\nهالت دور زیڌن: برنومه پسند وابیڌه موستقیمن منپیز ابۊ، برنومه پسند نوابیڌه وا ی پروکسی منپیز ابۊ.\nپسند خوتکار برنومه یل پروکسی من نومگه امکووݩ پزیر هڌ.</string>
<string name="summary_pref_per_app_proxy">پوی وولاتی: برنومه پسند وابیڌه وا ی پروکسی منپیز ابۊ، برنومه پسند نوابیڌه موستقیمن منپیز ابۊ.\nحالت دور زیڌن: برنومه پسند وابیڌه موستقیمن منپیز ابۊ، برنومه پسند نوابیڌه وا ی پروکسی منپیز ابۊ.\nپسند خوتکار برنومه یل پروکسی من نومگه امکووݩ پذیر هڌ.</string>
<string name="title_pref_is_booted">منپیز خوتکار مجال ره ونی</string>
<string name="summary_pref_is_booted">مجال ره وندن، خوساخوس و سرور پسند بیڌه منپیز ابۊ که گاشڌ نا مووفق بۊ.</string>
@@ -184,7 +184,7 @@
<string name="title_mux_settings">سامووا Mux</string>
<string name="title_pref_mux_enabled">ره وندن Mux</string>
<string name="summary_pref_mux_enabled">زل تر، ٱما گاشڌ منپیز زی قت بۊ\nمخزن ترافیک TCP وا 8 منپیز پؽش فرز، بارت دؽوۉداری UDP وو QUIC ن ای لم سفارشی کۊنین.</string>
<string name="summary_pref_mux_enabled">زل تر، ٱما گاشڌ منپیز زی قط بۊ\nدؽوۉداری TCP، UDP وو QUIC ن ای لم سفارشی کۊنین.</string>
<string name="title_pref_mux_concurrency">منپیزا TCP (تلایه منجا -1 تا 1024)</string>
<string name="title_pref_mux_xudp_concurrency">منپیزا XUDP (تلایه منجا -1 تا 1024)</string>
<string name="title_pref_mux_xudp_quic">دؽوۉداری QUIC من تۊنل mux</string>
@@ -197,32 +197,32 @@
<string name="title_pref_speed_enabled">ره وندن نشووݩ داڌن سورعت</string>
<string name="summary_pref_speed_enabled">سورعت هیم سکویی من وارسۊوی نشووݩ داڌه ابۊ.\nنماڌ نشووݩ اڌه ک ترافیک پروکسی یا موستقیم بؽتره.</string>
<string name="title_pref_sniffing_enabled">ره وندن در کشیڌن نوم دامنه موورد نزر (Sniffing)</string>
<string name="summary_pref_sniffing_enabled">قپ ریت سی و در کشیڌن نوم دامنه واقعی ز کتنا (پؽش فرز رۊشن هڌ)</string>
<string name="title_pref_sniffing_enabled">ره وندن در کشیڌن نوم دامنه موورد نظر (Sniffing)</string>
<string name="summary_pref_sniffing_enabled">قپ ریت سی و در کشیڌن نوم دامنه واقعی ز کتنا (پؽش فرض رۊشن هڌ)</string>
<string name="title_pref_route_only_enabled">ره وندن تینا تور جوستن routeOnly</string>
<string name="summary_pref_route_only_enabled">نوم دامنه sniffed ن تینا سی تور جوستن و کار بگیرین وو نشۊوی موورد نزرن و عونوان نشۊوی IP ووردارین.</string>
<string name="summary_pref_route_only_enabled">نوم دامنه sniffed ن تینا سی تور جوستن و کار بگیرین وو نشۊوی موورد نظرن و عونوان نشۊوی IP ووردارین.</string>
<string name="title_pref_local_dns_enabled">ره وندن DNS مهلی</string>
<string name="summary_pref_local_dns_enabled">درخاستا DNS و هسته و من ایان وو و دست ماژول DNS پردازشت ابۊن (پؽشنهاڌ ابۊ ٱر لنگ تور جوستن سی دور زیڌن نشۊویا LAN وو وولات ٱسلی هڌین ره ونده بۊ)</string>
<string name="title_pref_local_dns_enabled">ره وندن DNS محلی</string>
<string name="summary_pref_local_dns_enabled">درخواستا DNS و هسته و من ایان وو و دست ماژول DNS پردازشت ابۊن (پؽشنهاڌ ابۊ ٱر لنگ تور جوستن سی دور زیڌن نشۊویا LAN وو وولات ٱسلی هڌین ره ونده بۊ)</string>
<string name="title_pref_fake_dns_enabled">ره وندن DNS جئلی (FakeDNS)</string>
<string name="summary_pref_fake_dns_enabled">دی ان اس مهلی نشۊویا آی پی جئلی ن اوورگنه (زل تر، ٱما گاشڌ من ی قرده ز برنومه یل کار نکونه)</string>
<string name="summary_pref_fake_dns_enabled">FakeDNS نشۊویا IP جئلی ن سی نوم دامنه اوورگنه (زل تر، ٱما گاشڌ من ی قرده ز برنومه یل کار نکونه).</string>
<string name="title_pref_ipv6_enabled">ره وندن IPv6</string>
<string name="summary_pref_ipv6_enabled">نشۊویا وو تورا IPv6 ن و رابت VPN ازاف کۊنین</string>
<string name="summary_pref_ipv6_enabled">نشۊویا وو تورا IPv6 ن و رابط VPN اضاف کۊنین</string>
<string name="title_pref_prefer_ipv6">ترجی داڌن IPv6</string>
<string name="summary_pref_prefer_ipv6">مجال هل وو فسل نوم دامنه، نشۊویا IPv6 ن ترجی بڌین</string>
<string name="title_pref_remote_dns">DNS ز ره دیر (اختیاری) (udp/tcp/https/quic) (اختیاری)</string>
<string name="title_pref_remote_dns">DNS ز ره دیر (udp/tcp/https/quic، اختیاری)</string>
<string name="summary_pref_remote_dns" translatable="false">DNS</string>
<string name="title_pref_vpn_dns">VPN DNS (تینا IPv4/v6)</string>
<string name="title_pref_vpn_bypass_lan">VPN ز شبکه مهلی اگوڌرته؟</string>
<string name="title_pref_vpn_bypass_lan">VPN ز شبکه محلی اگوڌرته؟</string>
<string name="title_pref_vpn_interface_address">نشۊوی رابت VPN</string>
<string name="title_pref_vpn_interface_address">نشۊوی رابط VPN</string>
<string name="title_pref_vpn_mtu">VPN MTU (پؽش فرز 1500)</string>
<string name="title_pref_vpn_mtu">VPN MTU (پؽش فرض 1500)</string>
<string name="title_pref_domestic_dns">DNS منی (اختیاری)</string>
@@ -233,76 +233,76 @@
<string name="title_pref_delay_test_url">نشۊوی اینترنتی آزمایش تئخیر واقعی</string>
<string name="summary_pref_delay_test_url" translatable="false">URL</string>
<string name="title_pref_real_ping_concurrency">تعداد هوم زمووی تست تئخیر واقعی</string>
<string name="title_pref_real_ping_concurrency">تعداڌ هوم زمووی تست تئخیر واقعی</string>
<string name="title_pref_ip_api_url">نشۊوی اینترنتی آزمایش دووسمندیا منپیز هیم سکویی</string>
<string name="summary_pref_ip_api_url" translatable="false">URL</string>
<string name="title_pref_proxy_sharing_enabled">یک رسۊوی پروکسی من شبکه مهلی LAN</string>
<string name="summary_pref_proxy_sharing_enabled">پوی دسگایل ترن وا نشۊوی IP ایسا، ز ره socks/http و پروکسی منپیز بۊن، تینا من شبکه قابل ائتماد ره ونده بۊ تا ز منپیز قیر موجاز جلو گری بۊ.</string>
<string name="toast_warning_pref_proxysharing_short">یک رسۊوی من شبکه مهلی ره وست؛ موتمعن بۊین ک من ی شبکه ٱمن هڌین.</string>
<string name="title_pref_proxy_sharing_enabled">یک رسۊوی پروکسی من شبکه محلی LAN</string>
<string name="summary_pref_proxy_sharing_enabled">پوی دسگایل ترن وا نشۊوی IP ایسا، ز ره socks/http و پروکسی منپیز بۊن، تینا من شبکه قابل ائتماڌ ره ونده بۊ تا ز منپیز غیر موجاز جلو گری بۊ.</string>
<string name="toast_warning_pref_proxysharing_short">یک رسۊوی من شبکه محلی ره وست؛ موطمئن بۊین ک من ی شبکه ٱمن هڌین.</string>
<string name="title_pref_socks_port">پورت پروکسی مهلی</string>
<string name="title_pref_enable_local_proxy">ره وندن پروکسی مهلی</string>
<string name="title_pref_socks_port">پورت پروکسی محلی</string>
<string name="title_pref_enable_local_proxy">ره وندن پروکسی محلی</string>
<string name="summary_pref_enable_local_proxy">هرسا ره نوسته بۊ، هیچ پروکسی SOCKS من دسرس نؽ، سی دل هیمو کارایی جۊر ورۊ رسۊوی یل اشتراک نترن پروکسی ن و کار گرن.</string>
<string name="title_pref_socks_enable_udp" translatable="false">SOCKS5 UDP</string>
<string name="summary_pref_socks_enable_udp">ائراز هۊویت socks5 مجال استفاڌه ز UDP کاملن ایمن نؽ</string>
<string name="summary_pref_socks_port">پورت پروکسی مهلی</string>
<string name="title_pref_dynamic_socks_port">وورکل پورت موتقیر سی پروکسی مهلی</string>
<string name="summary_pref_dynamic_socks_port">هر کرت ک و من ٱووڌنی وورکل ابۊ، ی پورت پروکسی مهلی تساڌۊفی وورکل اکونه.</string>
<string name="title_pref_socks_username">نوم منتوری پروکسی مهلی (اختیاری)</string>
<string name="summary_pref_socks_port">پورت پروکسی محلی</string>
<string name="title_pref_dynamic_socks_port">وورکل پورت موتغیر سی پروکسی محلی</string>
<string name="summary_pref_dynamic_socks_port">هر کرت ک و من ٱووڌنی وورکل ابۊ، ی پورت پروکسی محلی تساڌۊفی وورکل اکونه.</string>
<string name="title_pref_socks_username">نوم منتوری پروکسی محلی (اختیاری)</string>
<string name="summary_pref_socks_username">نوم منتوری</string>
<string name="title_pref_socks_password">رزم پروکسی مهلی (اختیاری)</string>
<string name="title_pref_socks_password">رزم پروکسی محلی (اختیاری)</string>
<string name="summary_pref_socks_password">رزم</string>
<string name="title_pref_local_dns_port">پورت DNS مهلی</string>
<string name="summary_pref_local_dns_port">پورت DNS مهلی</string>
<string name="title_pref_local_dns_port">پورت DNS محلی</string>
<string name="summary_pref_local_dns_port">پورت DNS محلی</string>
<string name="title_pref_confirm_remove">قوۊل کردن پاک کردن کانفیگ</string>
<string name="summary_pref_confirm_remove">سی پاک وابیڌن فایل کانفیگ، لنگ قوۊل کردن دووارته ز سمت منتور هڌ.</string>
<string name="title_pref_append_http_proxy">پروکسی HTTP ن و VPN ازاف کۊنین</string>
<string name="summary_pref_append_http_proxy">پروکسی HTTP ن موسقیمن ز (مۊرۊرگر/ی قرد ز برنومه یل لادراری بیڌه)، بؽ استفاڌه ز دسگا NIC مجازی (Android 10+) استفاڌه ابۊ.</string>
<string name="title_pref_append_http_proxy">پروکسی HTTP ن و VPN اضاف کۊنین</string>
<string name="summary_pref_append_http_proxy">پروکسی HTTP ن موستقیمن ز (مۊرۊرگر/ی قرد ز برنومه یل لادراری بیڌه)، بؽ استفاڌه ز دسگا NIC مجازی (Android 10+) استفاڌه ابۊ.</string>
<string name="title_pref_double_column_display">ره وندن نشووݩ داڌن دو سۊتۊنی</string>
<string name="summary_pref_double_column_display">نومگه کانفیگا من دو ستۊݩ نشووݩ داڌه ابۊ تا مهتووا بؽتری من بلگه جا بگره.</string>
<string name="summary_pref_double_column_display">نومگه کانفیگا من دو ستۊݩ نشووݩ داڌه ابۊ تا محتوا بؽتری من بلگه جا بگره.</string>
<string name="title_pref_group_all_display">نشووݩ داڌن پوی بونکۊ یل ن ره ونین</string>
<string name="summary_pref_group_all_display">ی بلگه «پوی بونکۊ یل کانفیگ» ازاف کۊنین</string>
<string name="summary_pref_group_all_display">ی بلگه «پوی بونکۊ یل کانفیگ» اضاف کۊنین</string>
<!-- AboutActivity -->
<string name="title_pref_feedback">فشناڌن منشڌ</string>
<string name="summary_pref_feedback">فشناڌن منشڌ یا گوزارش موشکلا من Github</string>
<string name="summary_pref_tg_group">ٱووڌن من بونکۊ تلگرام</string>
<string name="toast_tg_app_not_found">برنومه تلگرامن نجوست</string>
<string name="title_privacy_policy">هریم سیخومی</string>
<string name="title_privacy_policy">حریم سیخومی</string>
<string name="title_qr_code">کود QR</string>
<string name="title_about">زبار</string>
<string name="title_source_code">کود بونچک</string>
<string name="title_oss_license">موجوزا کود بونچک</string>
<string name="title_tg_channel">تورگه تلگرام</string>
<string name="title_pref_promotion">تبلیقات</string>
<string name="title_pref_promotion">تبلیغات</string>
<string name="title_pref_auto_update_subscription">ورۊ کردن خوتکار اشتراکا</string>
<string name="summary_pref_auto_update_subscription">اشتراکا خوتووݩ ن و تۉر خوتکار وا فاسله زمۊوی من پس زمینه ورۊ کۊنین. ای ویژیی من پوی دسگایل گاشڌ همیشه کار نکونه</string>
<string name="title_pref_auto_update_interval">فاسله ورۊ کردن خوتکار (اقلن وا 15 دؽقه بۊ)</string>
<string name="summary_pref_auto_update_subscription">اشتراکا خوتووݩ ن و تۉر خوتکار وا فاصله زمۊوی من پس زمینه ورۊ کۊنین. ای ویژیی من پوی دسگایل گاشڌ همیشه کار نکونه</string>
<string name="title_pref_auto_update_interval">فاصله ورۊ کردن خوتکار (اقلن وا 15 دؽقه بۊ)</string>
<string name="title_core_loglevel">سئت گوزارشا</string>
<string name="title_outbound_domain_resolve_method">بارت پؽش هل دامنه دری (outbound)</string>
<string name="title_mode">هالت</string>
<string name="title_mode">حالت</string>
<string name="title_mode_help">سی دووسمندیا وو هیاری قلوه، ری ای هؽل بزݩ</string>
<string name="title_language">زووݩ</string>
<string name="title_ui_settings">سامووا رابت منتوری</string>
<string name="title_pref_ui_mode_night">سامووا هالت رابت منتوری</string>
<string name="title_ui_settings">سامووا رابط منتوری</string>
<string name="title_pref_ui_mode_night">سامووا حالت رابط منتوری</string>
<string name="title_pref_use_hev_tunnel">و کار گرؽڌن ویژیی Hev TUN</string>
<string name="summary_pref_use_hev_tunnel">مجالی ک ره ونده بۊ، TUN ایا hev-socks5-tunnel ن و کار اگره؛ ٱر ره نوۊفته بۊ، همو xray-core ن و کار اگره.</string>
<string name="title_pref_hev_tunnel_loglevel">Hev Tun سئت گوزارشا</string>
<string name="title_pref_hev_tunnel_rw_timeout">زمووݩ مندیر بیڌن خوندن/هؽل کردن Hev Tun (سانیه) (پؽش فرز tcp، udp 300،60)</string>
<string name="title_mode_settings">سامووا هالت</string>
<string name="title_root_mode_enabled">هالت رۊت ره وست (منتورووݩ رۊت)</string>
<string name="summary_root_mode_enabled">ره وستن پروکسی شفاف سئت بلم وا امتیازا ریشه. ای هالت، VPN استاندارد سیستوم ٱندروید ن دور ازنه تا موستقیمن پوی ترافیک شبکه لمی ن وا دست بگره. بئڌ ره وندن، هالت معمۊلی ٱسلی، تور جۊری هر برنومه وو سامووا VPN مربۊته کاملن ناموعتبر ابۊن.</string>
<string name="title_pref_hev_tunnel_rw_timeout">زمووݩ مندیر بیڌن خوندن/هؽل کردن Hev Tun (ثانیه) (پؽش فرض tcp، udp 300،60)</string>
<string name="title_mode_settings">سامووا حالت</string>
<string name="title_root_mode_enabled">حالت رۊت ره وست (منتورووݩ رۊت)</string>
<string name="summary_root_mode_enabled">ره وستن پروکسی شفاف سئت بلم وا امتیازا ریشه. ای حالت، VPN استاندارد سیستوم ٱندروید ن دور ازنه تا موستقیمن پوی ترافیک شبکه لمی ن وا دست بگره. بئڌ ره وندن، حالت معمۊلی ٱسلی، تور جۊری هر برنومه وو سامووا VPN مربۊته کاملن نا موئتبر ابۊن.</string>
<string name="toast_root_required">دسرسی رۊت سی ای ویژیی لازوم هڌ</string>
<string name="title_root_lan_sharing">یک رسۊوی LAN / تترینگ (منتورووݩ رۊت وابیڌه)</string>
<string name="summary_root_lan_sharing">ترافیک هات‌اسپات وای‌فای وو دسگا یل منپیز وابیڌه وا USB (تترینگ) ن ز تور VPN بفشنین.</string>
@@ -315,24 +315,24 @@
<string name="title_del_all_config">پاک کردن پوی کانفیگا بونکۊ سکویی</string>
<string name="title_del_duplicate_config">پاک کردن کانفیگا تکراری بونکۊ سکویی</string>
<string name="title_del_invalid_config">پاک کردن کانفیگا نا موئتبر بونکۊ سکویی</string>
<string name="title_export_all">و در کشیڌن کانفیگا قیر سفارشی بونکۊ سکویی من کلیپ بورد</string>
<string name="title_export_all">و در کشیڌن کانفیگا غیر سفارشی بونکۊ سکویی من کلیپ بورد</string>
<string name="title_sub_setting">سامووا بونکۊ اشتراک</string>
<string name="sub_setting_remarks">نیشتنا</string>
<string name="sub_setting_url">نشۊوی اینترنتی اختیاری</string>
<string name="sub_setting_user_agent" translatable="false">User Agent</string>
<string name="sub_setting_request_headers">سرآیندا درخاست (قالوو JSON)</string>
<string name="sub_setting_filter">نوم موستعار فیلتر</string>
<string name="sub_setting_request_headers">سرآیندا درخواست (قالوو JSON)</string>
<string name="sub_setting_filter">فیلتر نیشتنا وا regex</string>
<string name="sub_setting_enable">ره وندن ورۊ کردن</string>
<string name="sub_auto_update">ره وندن ورۊ کردن خوتکار</string>
<string name="sub_allow_insecure_url">موجاز کردن نشۊوی HTTP نا ٱمن</string>
<string name="sub_setting_pre_profile">نوم موستعار پروکسی دیندایی</string>
<string name="sub_setting_next_profile">نوم موستعار پروکسی نیایی</string>
<string name="sub_setting_pre_profile_tip">موتمعن بۊ ک نوم موستعار هڌس وو جۊرس نی</string>
<string name="toast_invalid_update_interval">فاسله ورۊ کردن نا موئتبر هڌ. هدقل مقدار 15 دؽقه هڌ.</string>
<string name="sub_setting_pre_profile">نیشتنا کانفیگ پروکسی دیندایی</string>
<string name="sub_setting_next_profile">نیشتنا کانفیگ پروکسی نیایی</string>
<string name="sub_setting_pre_profile_tip">موطمئن بۊ ک نیشتنا هڌس وو جۊرس نی</string>
<string name="toast_invalid_update_interval">فاصله ورۊ کردن نا موئتبر هڌ. حداقل مقدار 15 دؽقه هڌ.</string>
<string name="title_sub_update">ورۊ کردن اشتراک بونکۊ سکویی</string>
<string name="title_ping_all_server">Tcping کانفیگا بونکۊ سکویی</string>
<string name="title_real_ping_all_server">تئخیر واقعی کانفیگا بونکۊ سکویی</string>
<string name="title_user_asset_setting">فایلا بونچک جوقرافیایی</string>
<string name="title_user_asset_setting">فایلا بونچک جغرافیایی</string>
<string name="title_sort_by_test_results">ترتیب و ری نتیجه یل پینگ</string>
<string name="title_filter_config">فیلتر کردن کانفیگا</string>
<string name="filter_config_all">پوی</string>
@@ -378,30 +378,30 @@
<string name="connection_test_pending">منپیزن واجۊری کوݩ</string>
<string name="connection_test_testing">هونی آزمایش ابۊ…</string>
<string name="connection_test_testing_count">%d کانفیگ هونی آزمایش ابۊ...</string>
<string name="connection_test_available">مووفق بی: منپیز %dms تۊل کشی</string>
<string name="connection_test_available">مووفق بی: منپیز %dms طۊل کشی</string>
<string name="connection_test_error">منپیز و اینترنتن نجوست: %s</string>
<string name="connection_test_fail">اینترنت من دسرس نؽ</string>
<string name="connection_test_error_status_code">کود ختا: #%d</string>
<string name="connection_test_error_status_code">کود خطا: #%d</string>
<string name="connection_connected">منپیز هڌ، سی واجۊری کیلیک کوݩ</string>
<string name="connection_not_connected">منپیز نؽڌ</string>
<string name="connection_running_task_left">تعداد وزیفه یل آزمایشی ک ره اۊفتانه: %s</string>
<string name="connection_running_task_left">آزمایشا هونی ٱنجوم ابۊن: %s</string>
<string name="import_subscription_success">اشتراک وا مووفقیت زفت وابی</string>
<string name="import_subscription_failure">اشتراک زفت نوابی</string>
<string name="title_fragment_settings">سامووا فرگمنت (Fragment)</string>
<string name="title_pref_fragment_packets">کتنا فرگمنت</string>
<string name="title_pref_fragment_length">تۊل کتنا فرگمنت (هدقل-هدکسر)</string>
<string name="title_pref_fragment_interval">فاسله منجا کتنا فرگمنت (هدقل-هدکسر)</string>
<string name="title_pref_fragment_length">طۊل کتنا فرگمنت (حداقل-حداکثر)</string>
<string name="title_pref_fragment_interval">فاصله منجا کتنا فرگمنت (حداقل-حداکثر)</string>
<string name="title_pref_fragment_enabled">ره وندن فرگمنت</string>
<string name="title_pref_fragment_maxsplit">هدکسر تقسیم فرگمنت</string>
<string name="title_pref_fragment_maxsplit">حداکثر تقسیم فرگمنت</string>
<string name="title_observatory_settings">سامووا واجۊری منپیز (Observatory)</string>
<string name="title_pref_observatory_least_ping_interval">فاسله leastPing</string>
<string name="title_pref_observatory_least_load_interval">فاسله leastLoad</string>
<string name="title_pref_observatory_least_ping_interval">فاصله leastPing</string>
<string name="title_pref_observatory_least_load_interval">فاصله leastLoad</string>
<string name="title_pref_observatory_least_load_method">روش HTTP سی leastLoad</string>
<string name="title_pref_observatory_least_load_sampling">نمونه گیری leastLoad</string>
<string name="title_pref_observatory_least_load_timeout">مهلت leastLoad</string>
<string name="toast_invalid_observatory_duration">زما نادروسته. یه ارزشی وری 3m یا 30s بکار ببرین.</string>
<string name="toast_invalid_observatory_sampling">نمونه گیری نادروسته. یه شماره مثبت بکار ببرین.</string>
<string name="toast_invalid_observatory_duration">زمووݩ نا موئتبر هڌ. ارزشی وری 3m یا 30s ن و کار بگیرین.</string>
<string name="toast_invalid_observatory_sampling">نمونه گیری نا موئتبر هڌ. شوماره ی مثبت ن و کار بگیرین.</string>
<string name="update_check_for_update">واجۊری سی ورۊ رسۊوی</string>
<string name="update_already_latest_version">سکو نوسخه دیندایی پۊرنیڌه هڌ</string>
@@ -419,9 +419,9 @@
<string name="server_proxy_chain_members">ٱئزا زنجیره پروکسی</string>
<string name="server_proxy_chain_pick_members">سی پسند عوزو ایچو بزنین</string>
<string name="server_proxy_chain_member_unselected">ی عوزو پسند کۊنین</string>
<string name="server_proxy_chain_members_unselected">سی هر ردیف زنجیره remark پسند کۊنین</string>
<string name="server_proxy_chain_members_insufficient">تعداد ٱئزا بس نؽ</string>
<string name="server_proxy_chain_members_invalid">ٱئزا ناموئتبر زنجیره: %1$s</string>
<string name="server_proxy_chain_members_unselected">سی هر ردیف زنجیره ی عوزو پسند کۊنین</string>
<string name="server_proxy_chain_members_insufficient">تعداڌ ٱئزا بس نؽ</string>
<string name="server_proxy_chain_members_invalid">ٱئزا نا موئتبر زنجیره: %1$s</string>
<!-- BackupActivity -->
<string name="title_configuration_backup_restore">لادراری گرؽڌن &amp; وورگندن</string>
@@ -469,7 +469,7 @@
<string name="routing_preset_russia_whitelist">نومگه اسبؽڌ رۊسیه</string>
<string-array name="vpn_bypass_lan">
<item>پؽش فرز کانفیگ</item>
<item>پؽش فرض کانفیگ</item>
<item>دور زیڌه بۊ</item>
<item>دور زیڌه نبۊ</item>
</string-array>
@@ -487,7 +487,57 @@
<item>گردشی (roundRobin)</item>
</string-array>
<string name="backup_location_local">مهلی</string>
<string name="backup_location_local">محلی</string>
<string name="backup_location_webdav" translatable="false">WebDAV</string>
<string name="acc_refresh">وانۊ کردن گوزارش</string>
<string name="toast_permission_denied_for">گرؽڌن موجوز مومکن نؽڌ: %1$s</string>
<string name="acc_add_subscription">ٱووردن اشتراک</string>
<string name="toast_malformed_json_detail">کانفیگ نا موئتبر هڌ: %1$s</string>
<string name="acc_add_asset">ٱووردن بونچک فایلا جغرافیایی</string>
<string name="acc_download_file">دانلود فایلا بونچک جغرافیایی</string>
<string name="acc_qr_code">کود QR</string>
<string name="acc_copy_log">لف گیری گوزارش</string>
<string name="acc_clear_log">روفتن گوزارش</string>
<string name="acc_add_rule">ٱووردن قانووݩ</string>
<string name="core_error_no_server_selected">هیچ کانفیگ پسند وابیڌه نؽ</string>
<string name="core_error_decode_server_config">خوندن کانفیگ پسند وابیڌه مووفق نبی</string>
<string name="core_error_build_config_context">پردازشت کانفیگ پسند وابیڌه مووفق نبی</string>
<string name="core_error_get_config">ساڌن کانفیگ هسته مووفق نبی</string>
<string name="core_error_get_config_detail">ساڌن کانفیگ هسته مووفق نبی: %1$s</string>
<string name="core_error_get_speedtest_config_detail">ساڌن کانفیگ هسته سی آزمایش سورعت مووفق نبی: %1$s</string>
<string name="core_error_custom_config_empty">کانفیگ سفارشی نؽ</string>
<string name="core_error_start">ره وستن هسته مووفق نبی</string>
<string name="acc_start">ره وستن سرویس</string>
<string name="acc_stop">واڌاشتن سرویس</string>
<string name="acc_back">برگشت</string>
<string name="acc_search">پیتینیڌن</string>
<string name="acc_add">ٱووردن کانفیگ</string>
<string name="acc_more">امکووݩا بؽتر</string>
<string name="acc_share_subscription">یک رسۊوی لینک اشتراک</string>
<string name="acc_share_log">یک رسۊوی گوزارش</string>
<string name="acc_remove">پاک کردن عوزو زنجیره پروکسی</string>
<string name="acc_add_member">ٱووردن عوزو زنجیره پروکسی</string>
<string name="acc_start_scanner">ره وستن اسکنر QR</string>
<string name="acc_stop_scanner">واڌاشتن اسکنر QR</string>
<string name="acc_turn_torch_on">روشن کردن چراغ</string>
<string name="acc_turn_torch_off">خاموش کردن چراغ</string>
<string name="acc_select_image">پسند ٱکس سی اسکن</string>
<string name="acc_locked">ای قانووݩ مجال و من ٱووردن ز پؽش سامووا زفت ابۊ</string>
<string name="acc_open_menu">گۊشیڌن نومگه کشاری</string>
<string name="acc_edit">آلشتکاری</string>
<string name="acc_delete">پاک کردن</string>
<string name="acc_save">زفت کردن</string>
<string name="acc_update_subscriptions">ورۊ کردن اشتراکا</string>
<string name="acc_per_app_proxy_information">دووسمندی پروکسی و ری برنومه</string>
<string name="permission_camera">دوربیݩ</string>
<string name="permission_notification">وارسۊوی</string>
<string name="permission_local_network">شبکه محلی</string>
<string name="subscription_update_updating">اشتراک %1$s هونی ورۊ ابۊ</string>
<string name="subscription_update_progress">%2$s هونی آزمایش ابۊ: %1$s</string>
<string name="tasker_blurb_start">ره وستن %1$s</string>
<string name="tasker_blurb_stop">واڌاشتن %1$s</string>
<string name="connection_test_empty_message">دووسمندی نؽ</string>
<string name="value_unknown">نا مؽخص</string>
</resources>
@@ -490,4 +490,54 @@
<string name="backup_location_local">محلی</string>
<string name="backup_location_webdav" translatable="false">WebDAV</string>
<string name="acc_refresh">تازه‌سازی گزارش</string>
<string name="toast_permission_denied_for">مجوز %1$s داده نشد</string>
<string name="acc_add_subscription">افزودن اشتراک</string>
<string name="toast_malformed_json_detail">قالب پیکربندی نامعتبر است: %1$s</string>
<string name="acc_add_asset">افزودن منبع فایل‌های جغرافیایی</string>
<string name="acc_download_file">دانلود فایل‌های منبع</string>
<string name="acc_qr_code">کد QR</string>
<string name="acc_copy_log">کپی گزارش</string>
<string name="acc_clear_log">پاک کردن گزارش</string>
<string name="acc_add_rule">افزودن قانون مسیریابی</string>
<string name="core_error_no_server_selected">هیچ پیکربندی‌ای انتخاب نشده است</string>
<string name="core_error_decode_server_config">خواندن پیکربندی انتخاب‌شده ناموفق بود</string>
<string name="core_error_build_config_context">آماده‌سازی پیکربندی انتخاب‌شده ناموفق بود</string>
<string name="core_error_get_config">ایجاد پیکربندی هسته ناموفق بود</string>
<string name="core_error_get_config_detail">ایجاد پیکربندی هسته ناموفق بود: %1$s</string>
<string name="core_error_get_speedtest_config_detail">ایجاد پیکربندی هسته برای آزمایش سرعت ناموفق بود: %1$s</string>
<string name="core_error_custom_config_empty">پیکربندی سفارشی خالی است</string>
<string name="core_error_start">راه‌اندازی هسته ناموفق بود</string>
<string name="acc_start">شروع سرویس</string>
<string name="acc_stop">توقف سرویس</string>
<string name="acc_back">بازگشت</string>
<string name="acc_search">جستجو</string>
<string name="acc_add">افزودن کانفیگ</string>
<string name="acc_more">گزینه‌های بیشتر</string>
<string name="acc_share_subscription">اشتراک‌گذاری لینک اشتراک</string>
<string name="acc_share_log">اشتراک‌گذاری گزارش</string>
<string name="acc_remove">حذف عضو زنجیره پروکسی</string>
<string name="acc_add_member">افزودن عضو زنجیره پروکسی</string>
<string name="acc_start_scanner">شروع اسکنر QR</string>
<string name="acc_stop_scanner">توقف اسکنر QR</string>
<string name="acc_turn_torch_on">روشن کردن چراغ‌قوه</string>
<string name="acc_turn_torch_off">خاموش کردن چراغ‌قوه</string>
<string name="acc_select_image">انتخاب تصویر برای اسکن</string>
<string name="acc_locked">این قانون هنگام وارد کردن تنظیمات از پیش تعیین‌شده حفظ می‌شود</string>
<string name="acc_open_menu">باز کردن منوی پیمایش</string>
<string name="acc_edit">ویرایش</string>
<string name="acc_delete">حذف</string>
<string name="acc_save">ذخیره</string>
<string name="acc_update_subscriptions">به‌روزرسانی اشتراک‌ها</string>
<string name="acc_per_app_proxy_information">اطلاعات پروکسی به تفکیک برنامه</string>
<string name="permission_camera">دوربین</string>
<string name="permission_notification">اعلان</string>
<string name="permission_local_network">شبکه محلی</string>
<string name="subscription_update_updating">در حال به‌روزرسانی اشتراک: %1$s</string>
<string name="subscription_update_progress">در حال آزمایش %2$s: %1$s</string>
<string name="tasker_blurb_start">شروع %1$s</string>
<string name="tasker_blurb_stop">توقف %1$s</string>
<string name="connection_test_empty_message">جزئیاتی در دسترس نیست</string>
<string name="value_unknown">ناشناخته</string>
</resources>
@@ -490,4 +490,54 @@
<string name="backup_location_local">Локально</string>
<string name="backup_location_webdav" translatable="false">WebDAV</string>
<string name="acc_refresh">Обновить журнал</string>
<string name="toast_permission_denied_for">Нет разрешения: %1$s</string>
<string name="acc_add_subscription">Добавить подписку</string>
<string name="toast_malformed_json_detail">Некорректная конфигурация: %1$s</string>
<string name="acc_add_asset">Добавить источник ресурсов</string>
<string name="acc_download_file">Загрузить файлы ресурсов</string>
<string name="acc_qr_code">QR-код</string>
<string name="acc_copy_log">Копировать журнал</string>
<string name="acc_clear_log">Очистить журнал</string>
<string name="acc_add_rule">Добавить правило маршрутизации</string>
<string name="core_error_no_server_selected">Конфигурация не выбрана</string>
<string name="core_error_decode_server_config">Не удалось прочитать выбранную конфигурацию</string>
<string name="core_error_build_config_context">Не удалось подготовить выбранную конфигурацию</string>
<string name="core_error_get_config">Не удалось создать конфигурацию ядра</string>
<string name="core_error_get_config_detail">Не удалось создать конфигурацию ядра: %1$s</string>
<string name="core_error_get_speedtest_config_detail">Не удалось создать конфигурацию ядра для теста скорости: %1$s</string>
<string name="core_error_custom_config_empty">Пользовательская конфигурация пуста</string>
<string name="core_error_start">Не удалось запустить ядро</string>
<string name="acc_start">Запустить службу</string>
<string name="acc_stop">Остановить службу</string>
<string name="acc_back">Назад</string>
<string name="acc_search">Поиск</string>
<string name="acc_add">Добавить профиль</string>
<string name="acc_more">Дополнительные параметры</string>
<string name="acc_share_subscription">Поделиться ссылкой на подписку</string>
<string name="acc_share_log">Поделиться журналом</string>
<string name="acc_remove">Удалить участника цепочки прокси</string>
<string name="acc_add_member">Добавить участника цепочки прокси</string>
<string name="acc_start_scanner">Запустить сканер QR-кодов</string>
<string name="acc_stop_scanner">Остановить сканер QR-кодов</string>
<string name="acc_turn_torch_on">Включить фонарик</string>
<string name="acc_turn_torch_off">Выключить фонарик</string>
<string name="acc_select_image">Выбрать изображение для сканирования</string>
<string name="acc_locked">Правило сохраняется при импорте предустановок</string>
<string name="acc_open_menu">Открыть меню навигации</string>
<string name="acc_edit">Изменить</string>
<string name="acc_delete">Удалить</string>
<string name="acc_save">Сохранить</string>
<string name="acc_update_subscriptions">Обновить подписки</string>
<string name="acc_per_app_proxy_information">Сведения о прокси для приложений</string>
<string name="permission_camera">Камера</string>
<string name="permission_notification">Уведомления</string>
<string name="permission_local_network">Локальная сеть</string>
<string name="subscription_update_updating">Обновление подписки: %1$s</string>
<string name="subscription_update_progress">Тестирование %2$s: %1$s</string>
<string name="tasker_blurb_start">Запустить %1$s</string>
<string name="tasker_blurb_stop">Остановить %1$s</string>
<string name="connection_test_empty_message">подробности отсутствуют</string>
<string name="value_unknown">неизвестно</string>
</resources>
@@ -490,4 +490,54 @@
<string name="backup_location_local">Cục bộ</string>
<string name="backup_location_webdav" translatable="false">WebDAV</string>
<string name="acc_refresh">Làm mới nhật ký</string>
<string name="toast_permission_denied_for">Chưa cấp quyền: %1$s</string>
<string name="acc_add_subscription">Thêm gói đăng ký</string>
<string name="toast_malformed_json_detail">Cấu hình không hợp lệ: %1$s</string>
<string name="acc_add_asset">Thêm nguồn tệp tài nguyên</string>
<string name="acc_download_file">Tải xuống tệp tài nguyên</string>
<string name="acc_qr_code">Mã QR</string>
<string name="acc_copy_log">Sao chép nhật ký</string>
<string name="acc_clear_log">Xóa nhật ký</string>
<string name="acc_add_rule">Thêm quy tắc định tuyến</string>
<string name="core_error_no_server_selected">Chưa chọn cấu hình</string>
<string name="core_error_decode_server_config">Không thể đọc cấu hình đã chọn</string>
<string name="core_error_build_config_context">Không thể chuẩn bị cấu hình đã chọn</string>
<string name="core_error_get_config">Không thể tạo cấu hình lõi</string>
<string name="core_error_get_config_detail">Không thể tạo cấu hình lõi: %1$s</string>
<string name="core_error_get_speedtest_config_detail">Không thể tạo cấu hình lõi để kiểm tra tốc độ: %1$s</string>
<string name="core_error_custom_config_empty">Cấu hình tùy chỉnh đang trống</string>
<string name="core_error_start">Không thể khởi động lõi</string>
<string name="acc_start">Khởi động dịch vụ</string>
<string name="acc_stop">Dừng dịch vụ</string>
<string name="acc_back">Quay lại</string>
<string name="acc_search">Tìm kiếm</string>
<string name="acc_add">Thêm cấu hình</string>
<string name="acc_more">Tùy chọn khác</string>
<string name="acc_share_subscription">Chia sẻ liên kết đăng ký</string>
<string name="acc_share_log">Chia sẻ nhật ký</string>
<string name="acc_remove">Xóa thành viên khỏi chuỗi proxy</string>
<string name="acc_add_member">Thêm thành viên vào chuỗi proxy</string>
<string name="acc_start_scanner">Khởi động trình quét mã QR</string>
<string name="acc_stop_scanner">Dừng trình quét mã QR</string>
<string name="acc_turn_torch_on">Bật đèn pin</string>
<string name="acc_turn_torch_off">Tắt đèn pin</string>
<string name="acc_select_image">Chọn ảnh để quét</string>
<string name="acc_locked">Giữ quy tắc khi nhập cài đặt sẵn</string>
<string name="acc_open_menu">Mở trình đơn điều hướng</string>
<string name="acc_edit">Chỉnh sửa</string>
<string name="acc_delete">Xóa</string>
<string name="acc_save">Lưu</string>
<string name="acc_update_subscriptions">Cập nhật các gói đăng ký</string>
<string name="acc_per_app_proxy_information">Thông tin proxy theo ứng dụng</string>
<string name="permission_camera">Máy ảnh</string>
<string name="permission_notification">Thông báo</string>
<string name="permission_local_network">Mạng cục bộ</string>
<string name="subscription_update_updating">Đang cập nhật gói đăng ký: %1$s</string>
<string name="subscription_update_progress">Đang kiểm tra %2$s: %1$s</string>
<string name="tasker_blurb_start">Khởi động %1$s</string>
<string name="tasker_blurb_stop">Dừng %1$s</string>
<string name="connection_test_empty_message">không có thông tin chi tiết</string>
<string name="value_unknown">không xác định</string>
</resources>
@@ -490,4 +490,54 @@
<string name="backup_location_local">本地</string>
<string name="backup_location_webdav" translatable="false">WebDAV</string>
<string name="acc_refresh">刷新日志</string>
<string name="toast_permission_denied_for">%1$s权限被拒绝</string>
<string name="acc_add_subscription">添加订阅</string>
<string name="toast_malformed_json_detail">配置格式无效:%1$s</string>
<string name="acc_add_asset">添加资源来源</string>
<string name="acc_download_file">下载资源文件</string>
<string name="acc_qr_code">二维码</string>
<string name="acc_copy_log">复制日志</string>
<string name="acc_clear_log">清除日志</string>
<string name="acc_add_rule">添加路由规则</string>
<string name="core_error_no_server_selected">未选择配置</string>
<string name="core_error_decode_server_config">无法读取所选配置</string>
<string name="core_error_build_config_context">无法准备所选配置</string>
<string name="core_error_get_config">无法生成核心配置</string>
<string name="core_error_get_config_detail">无法生成核心配置:%1$s</string>
<string name="core_error_get_speedtest_config_detail">无法生成测速用核心配置:%1$s</string>
<string name="core_error_custom_config_empty">自定义配置为空</string>
<string name="core_error_start">无法启动核心</string>
<string name="acc_start">启动服务</string>
<string name="acc_stop">停止服务</string>
<string name="acc_back">返回</string>
<string name="acc_search">搜索</string>
<string name="acc_add">添加配置</string>
<string name="acc_more">更多选项</string>
<string name="acc_share_subscription">分享订阅链接</string>
<string name="acc_share_log">分享日志</string>
<string name="acc_remove">移除代理链成员</string>
<string name="acc_add_member">添加代理链成员</string>
<string name="acc_start_scanner">启动二维码扫描器</string>
<string name="acc_stop_scanner">停止二维码扫描器</string>
<string name="acc_turn_torch_on">打开手电筒</string>
<string name="acc_turn_torch_off">关闭手电筒</string>
<string name="acc_select_image">选择要扫描的图片</string>
<string name="acc_locked">导入预设时保留此规则</string>
<string name="acc_open_menu">打开导航菜单</string>
<string name="acc_edit">编辑</string>
<string name="acc_delete">删除</string>
<string name="acc_save">保存</string>
<string name="acc_update_subscriptions">更新订阅</string>
<string name="acc_per_app_proxy_information">分应用代理信息</string>
<string name="permission_camera">相机</string>
<string name="permission_notification">通知</string>
<string name="permission_local_network">局域网</string>
<string name="subscription_update_updating">正在更新订阅:%1$s</string>
<string name="subscription_update_progress">正在测试%2$s:%1$s</string>
<string name="tasker_blurb_start">启动 %1$s</string>
<string name="tasker_blurb_stop">停止 %1$s</string>
<string name="connection_test_empty_message">无详细信息</string>
<string name="value_unknown">未知</string>
</resources>
@@ -490,4 +490,54 @@
<string name="backup_location_local">本地</string>
<string name="backup_location_webdav" translatable="false">WebDAV</string>
<string name="acc_refresh">重新整理日誌</string>
<string name="toast_permission_denied_for">未授予%1$s權限</string>
<string name="acc_add_subscription">新增訂閱</string>
<string name="toast_malformed_json_detail">設定檔格式不正確:%1$s</string>
<string name="acc_add_asset">新增資源來源</string>
<string name="acc_download_file">下載資源檔案</string>
<string name="acc_qr_code">QR 碼</string>
<string name="acc_copy_log">複製日誌</string>
<string name="acc_clear_log">清除日誌</string>
<string name="acc_add_rule">新增路由規則</string>
<string name="core_error_no_server_selected">未選取設定</string>
<string name="core_error_decode_server_config">無法讀取所選設定</string>
<string name="core_error_build_config_context">無法準備所選設定</string>
<string name="core_error_get_config">無法產生核心設定</string>
<string name="core_error_get_config_detail">無法產生核心設定:%1$s</string>
<string name="core_error_get_speedtest_config_detail">無法產生測速用核心設定:%1$s</string>
<string name="core_error_custom_config_empty">自訂設定為空</string>
<string name="core_error_start">無法啟動核心</string>
<string name="acc_start">啟動服務</string>
<string name="acc_stop">停止服務</string>
<string name="acc_back">返回</string>
<string name="acc_search">搜尋</string>
<string name="acc_add">新增設定</string>
<string name="acc_more">更多選項</string>
<string name="acc_share_subscription">分享訂閱連結</string>
<string name="acc_share_log">分享日誌</string>
<string name="acc_remove">移除代理鏈成員</string>
<string name="acc_add_member">新增代理鏈成員</string>
<string name="acc_start_scanner">啟動 QR 碼掃描器</string>
<string name="acc_stop_scanner">停止 QR 碼掃描器</string>
<string name="acc_turn_torch_on">開啟手電筒</string>
<string name="acc_turn_torch_off">關閉手電筒</string>
<string name="acc_select_image">選取要掃描的圖片</string>
<string name="acc_locked">匯入預設時保留此規則</string>
<string name="acc_open_menu">開啟導覽選單</string>
<string name="acc_edit">編輯</string>
<string name="acc_delete">刪除</string>
<string name="acc_save">儲存</string>
<string name="acc_update_subscriptions">更新訂閱</string>
<string name="acc_per_app_proxy_information">各應用程式的 Proxy 資訊</string>
<string name="permission_camera">相機</string>
<string name="permission_notification">通知</string>
<string name="permission_local_network">區域網路</string>
<string name="subscription_update_updating">正在更新訂閱:%1$s</string>
<string name="subscription_update_progress">正在測試%2$s:%1$s</string>
<string name="tasker_blurb_start">啟動 %1$s</string>
<string name="tasker_blurb_stop">停止 %1$s</string>
<string name="connection_test_empty_message">沒有詳細資訊</string>
<string name="value_unknown">未知</string>
</resources>
@@ -490,4 +490,54 @@
<string name="backup_location_local">Local</string>
<string name="backup_location_webdav" translatable="false">WebDAV</string>
<string name="acc_refresh">Refresh log</string>
<string name="toast_permission_denied_for">%1$s permission denied</string>
<string name="acc_add_subscription">Add subscription</string>
<string name="toast_malformed_json_detail">Invalid configuration: %1$s</string>
<string name="acc_add_asset">Add asset source</string>
<string name="acc_download_file">Download asset files</string>
<string name="acc_qr_code">QR code</string>
<string name="acc_copy_log">Copy log</string>
<string name="acc_clear_log">Clear log</string>
<string name="acc_add_rule">Add routing rule</string>
<string name="core_error_no_server_selected">No configuration selected</string>
<string name="core_error_decode_server_config">Failed to read the selected configuration</string>
<string name="core_error_build_config_context">Failed to prepare the selected configuration</string>
<string name="core_error_get_config">Failed to generate the core configuration</string>
<string name="core_error_get_config_detail">Failed to generate the core configuration: %1$s</string>
<string name="core_error_get_speedtest_config_detail">Failed to generate the core configuration for the speed test: %1$s</string>
<string name="core_error_custom_config_empty">Custom configuration is empty</string>
<string name="core_error_start">Failed to start the core</string>
<string name="acc_start">Start service</string>
<string name="acc_stop">Stop service</string>
<string name="acc_back">Back</string>
<string name="acc_search">Search</string>
<string name="acc_add">Add configuration</string>
<string name="acc_more">More options</string>
<string name="acc_share_subscription">Share subscription link</string>
<string name="acc_share_log">Share log</string>
<string name="acc_remove">Remove proxy chain member</string>
<string name="acc_add_member">Add proxy chain member</string>
<string name="acc_start_scanner">Start QR scanner</string>
<string name="acc_stop_scanner">Stop QR scanner</string>
<string name="acc_turn_torch_on">Turn flashlight on</string>
<string name="acc_turn_torch_off">Turn flashlight off</string>
<string name="acc_select_image">Select image to scan</string>
<string name="acc_locked">This rule is kept when importing presets</string>
<string name="acc_open_menu">Open navigation menu</string>
<string name="acc_edit">Edit</string>
<string name="acc_delete">Delete</string>
<string name="acc_save">Save</string>
<string name="acc_update_subscriptions">Update subscriptions</string>
<string name="acc_per_app_proxy_information">Per-app proxy information</string>
<string name="permission_camera">Camera</string>
<string name="permission_notification">Notification</string>
<string name="permission_local_network">Local network</string>
<string name="subscription_update_updating">Updating subscription: %1$s</string>
<string name="subscription_update_progress">Testing %2$s: %1$s</string>
<string name="tasker_blurb_start">Start %1$s</string>
<string name="tasker_blurb_stop">Stop %1$s</string>
<string name="connection_test_empty_message">no details available</string>
<string name="value_unknown">unknown</string>
</resources>