Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f6d2c5f473 | |||
| 6e8dd5b250 | |||
| f4779bc50c | |||
| 432baf262d | |||
| a1d68fcde3 | |||
| e053db3dff | |||
| f624bd651e | |||
| 84964c7f91 | |||
| 96f56b468e | |||
| bdc3212f38 | |||
| 508ddf6df2 |
@@ -11,8 +11,8 @@ android {
|
||||
applicationId = "com.v2ray.ang"
|
||||
minSdk = 21
|
||||
targetSdk = 34
|
||||
versionCode = 558
|
||||
versionName = "1.8.22"
|
||||
versionCode = 559
|
||||
versionName = "1.8.23"
|
||||
multiDexEnabled = true
|
||||
}
|
||||
|
||||
@@ -87,13 +87,13 @@ dependencies {
|
||||
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
|
||||
implementation("androidx.legacy:legacy-support-v4:1.0.0")
|
||||
implementation("androidx.appcompat:appcompat:1.6.1")
|
||||
implementation("com.google.android.material:material:1.11.0")
|
||||
implementation("com.google.android.material:material:1.12.0")
|
||||
implementation("androidx.cardview:cardview:1.0.0")
|
||||
implementation("androidx.preference:preference-ktx:1.2.1")
|
||||
implementation("androidx.recyclerview:recyclerview:1.3.2")
|
||||
implementation("androidx.fragment:fragment-ktx:1.6.2")
|
||||
implementation("androidx.fragment:fragment-ktx:1.7.0")
|
||||
implementation("androidx.multidex:multidex:2.0.1")
|
||||
implementation("androidx.viewpager2:viewpager2:1.1.0-beta02")
|
||||
implementation("androidx.viewpager2:viewpager2:1.1.0-rc01")
|
||||
|
||||
// Androidx ktx
|
||||
implementation("androidx.activity:activity-ktx:1.9.0")
|
||||
|
||||
@@ -227,6 +227,16 @@
|
||||
|
||||
</provider>
|
||||
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="${applicationId}.cache"
|
||||
android:exported="false"
|
||||
android:grantUriPermissions="true">
|
||||
<meta-data
|
||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/cache_paths"/>
|
||||
</provider>
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
||||
@@ -15,6 +15,8 @@ object AppConfig {
|
||||
|
||||
// Preferences mapped to MMKV
|
||||
const val PREF_SNIFFING_ENABLED = "pref_sniffing_enabled"
|
||||
const val PREF_ROUTE_ONLY_ENABLED = "pref_route_only_enabled"
|
||||
|
||||
const val PREF_PER_APP_PROXY = "pref_per_app_proxy"
|
||||
const val PREF_PER_APP_PROXY_SET = "pref_per_app_proxy_set"
|
||||
const val PREF_BYPASS_APPS = "pref_bypass_apps"
|
||||
|
||||
@@ -60,7 +60,8 @@ data class V2rayConfig(
|
||||
|
||||
data class SniffingBean(var enabled: Boolean,
|
||||
val destOverride: ArrayList<String>,
|
||||
val metadataOnly: Boolean? = null)
|
||||
val metadataOnly: Boolean? = null,
|
||||
var routeOnly: Boolean? = null)
|
||||
}
|
||||
|
||||
data class OutboundBean(var tag: String = "proxy",
|
||||
@@ -226,7 +227,10 @@ data class V2rayConfig(
|
||||
|
||||
data class GrpcSettingsBean(var serviceName: String = "",
|
||||
var authority: String? = null,
|
||||
var multiMode: Boolean? = null)
|
||||
var multiMode: Boolean? = null,
|
||||
var idle_timeout: Int? = null,
|
||||
var health_check_timeout: Int? = null
|
||||
)
|
||||
|
||||
fun populateTransportSettings(transport: String, headerType: String?, host: String?, path: String?, seed: String?,
|
||||
quicSecurity: String?, key: String?, mode: String?, serviceName: String?,
|
||||
@@ -295,6 +299,8 @@ data class V2rayConfig(
|
||||
grpcSetting.multiMode = mode == "multi"
|
||||
grpcSetting.serviceName = serviceName ?: ""
|
||||
grpcSetting.authority = authority ?: ""
|
||||
grpcSetting.idle_timeout = 60
|
||||
grpcSetting.health_check_timeout = 20
|
||||
sni = authority ?: ""
|
||||
grpcSettings = grpcSetting
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.content.FileProvider
|
||||
import com.tbruyelle.rxpermissions.RxPermissions
|
||||
import com.tencent.mmkv.MMKV
|
||||
import com.v2ray.ang.AppConfig
|
||||
@@ -33,7 +34,31 @@ class AboutActivity : BaseActivity() {
|
||||
|
||||
binding.tvBackupSummary.text = this.getString(R.string.summary_configuration_backup, extDir)
|
||||
binding.layoutBackup.setOnClickListener {
|
||||
backupMMKV()
|
||||
val ret = backupConfiguration(extDir.absolutePath)
|
||||
if (ret.first) {
|
||||
toast(R.string.toast_success)
|
||||
} else {
|
||||
toast(R.string.toast_failure)
|
||||
}
|
||||
}
|
||||
|
||||
binding.layoutShare.setOnClickListener {
|
||||
val ret = backupConfiguration(cacheDir.absolutePath)
|
||||
if (ret.first) {
|
||||
startActivity(
|
||||
Intent.createChooser(
|
||||
Intent(Intent.ACTION_SEND).setType("application/zip")
|
||||
.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
.putExtra(
|
||||
Intent.EXTRA_STREAM, FileProvider.getUriForFile(
|
||||
this, BuildConfig.APPLICATION_ID + ".cache", File(ret.second)
|
||||
)
|
||||
), getString(R.string.title_configuration_share)
|
||||
)
|
||||
)
|
||||
} else {
|
||||
toast(R.string.toast_failure)
|
||||
}
|
||||
}
|
||||
|
||||
binding.layoutRestore.setOnClickListener {
|
||||
@@ -77,40 +102,36 @@ class AboutActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
fun backupMMKV() {
|
||||
fun backupConfiguration(outputZipFilePos: String): Pair<Boolean, String> {
|
||||
val dateFormated = SimpleDateFormat(
|
||||
"yyyy-MM-dd-HH-mm-ss",
|
||||
Locale.getDefault()
|
||||
).format(System.currentTimeMillis())
|
||||
val folderName = "${getString(R.string.app_name)}_${dateFormated}"
|
||||
val backupDir = this.cacheDir.absolutePath + "/$folderName"
|
||||
val outputZipFilePath = extDir.absolutePath + "/$folderName.zip"
|
||||
val outputZipFilePath = "$outputZipFilePos/$folderName.zip"
|
||||
|
||||
val count = MMKV.backupAllToDirectory(backupDir)
|
||||
if (count <= 0) {
|
||||
toast(R.string.toast_failure)
|
||||
return Pair(false, "")
|
||||
}
|
||||
|
||||
if (ZipUtil.zipFromFolder(backupDir, outputZipFilePath)) {
|
||||
toast(R.string.toast_success)
|
||||
return Pair(true, outputZipFilePath)
|
||||
} else {
|
||||
toast(R.string.toast_failure)
|
||||
return Pair(false, "")
|
||||
}
|
||||
}
|
||||
|
||||
fun restoreMMKV(zipFile: File) {
|
||||
fun restoreConfiguration(zipFile: File): Boolean {
|
||||
val backupDir = this.cacheDir.absolutePath + "/${System.currentTimeMillis()}"
|
||||
|
||||
if (!ZipUtil.unzipToFolder(zipFile, backupDir)) {
|
||||
toast(R.string.toast_failure)
|
||||
return false
|
||||
}
|
||||
|
||||
val count = MMKV.restoreAllFromDirectory(backupDir)
|
||||
if (count > 0) {
|
||||
toast(R.string.toast_success)
|
||||
} else {
|
||||
toast(R.string.toast_failure)
|
||||
}
|
||||
return count > 0
|
||||
}
|
||||
|
||||
private fun showFileChooser() {
|
||||
@@ -138,8 +159,11 @@ class AboutActivity : BaseActivity() {
|
||||
input?.copyTo(fileOut)
|
||||
}
|
||||
}
|
||||
|
||||
restoreMMKV(targetFile)
|
||||
if (restoreConfiguration(targetFile)) {
|
||||
toast(R.string.toast_success)
|
||||
} else {
|
||||
toast(R.string.toast_failure)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
@@ -540,10 +540,22 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
|
||||
}
|
||||
Log.d(ANG_PACKAGE, url)
|
||||
lifecycleScope.launch(Dispatchers.IO) {
|
||||
val configText = try {
|
||||
var configText = try {
|
||||
Utils.getUrlContentWithCustomUserAgent(url)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
""
|
||||
}
|
||||
if(configText.isEmpty()) {
|
||||
configText = try {
|
||||
val httpPort = Utils.parseInt(settingsStorage?.decodeString(AppConfig.PREF_HTTP_PORT), AppConfig.PORT_HTTP.toInt())
|
||||
Utils.getUrlContentWithCustomUserAgent(url, httpPort)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
""
|
||||
}
|
||||
}
|
||||
if(configText.isEmpty()) {
|
||||
launch(Dispatchers.Main) {
|
||||
toast("\"" + it.second.remarks + "\" " + getString(R.string.toast_failure))
|
||||
}
|
||||
|
||||
@@ -230,6 +230,7 @@ class SettingsActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
listOf(
|
||||
AppConfig.PREF_ROUTE_ONLY_ENABLED,
|
||||
AppConfig.PREF_BYPASS_APPS,
|
||||
AppConfig.PREF_SPEED_ENABLED,
|
||||
AppConfig.PREF_CONFIRM_REMOVE,
|
||||
|
||||
@@ -159,7 +159,7 @@ object Utils {
|
||||
*/
|
||||
fun getDomesticDnsServers(): List<String> {
|
||||
val domesticDns = settingsStorage?.decodeString(AppConfig.PREF_DOMESTIC_DNS) ?: AppConfig.DNS_DIRECT
|
||||
val ret = domesticDns.split(",").filter { isPureIpAddress(it) }
|
||||
val ret = domesticDns.split(",").filter { isPureIpAddress(it) || isCoreDNSAddress(it) }
|
||||
if (ret.isEmpty()) {
|
||||
return listOf(AppConfig.DNS_DIRECT)
|
||||
}
|
||||
@@ -352,9 +352,18 @@ object Utils {
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
fun getUrlContentWithCustomUserAgent(urlStr: String?): String {
|
||||
fun getUrlContentWithCustomUserAgent(urlStr: String?, httpPort: Int = 0): String {
|
||||
val url = URL(urlStr)
|
||||
val conn = url.openConnection()
|
||||
val conn = if (httpPort == 0) {
|
||||
url.openConnection()
|
||||
} else {
|
||||
url.openConnection(
|
||||
Proxy(
|
||||
Proxy.Type.HTTP,
|
||||
InetSocketAddress("127.0.0.1", httpPort)
|
||||
)
|
||||
)
|
||||
}
|
||||
conn.setRequestProperty("Connection", "close")
|
||||
conn.setRequestProperty("User-agent", "v2rayNG/${BuildConfig.VERSION_NAME}")
|
||||
url.userInfo?.let {
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.v2ray.ang.util
|
||||
|
||||
import android.content.Context
|
||||
import android.text.TextUtils
|
||||
import com.google.gson.*
|
||||
import com.google.gson.Gson
|
||||
import com.tencent.mmkv.MMKV
|
||||
import com.v2ray.ang.AppConfig
|
||||
import com.v2ray.ang.AppConfig.PROTOCOL_FREEDOM
|
||||
@@ -10,9 +10,9 @@ import com.v2ray.ang.AppConfig.TAG_DIRECT
|
||||
import com.v2ray.ang.AppConfig.TAG_FRAGMENT
|
||||
import com.v2ray.ang.AppConfig.WIREGUARD_LOCAL_ADDRESS_V4
|
||||
import com.v2ray.ang.AppConfig.WIREGUARD_LOCAL_ADDRESS_V6
|
||||
import com.v2ray.ang.dto.V2rayConfig
|
||||
import com.v2ray.ang.dto.EConfigType
|
||||
import com.v2ray.ang.dto.ERoutingMode
|
||||
import com.v2ray.ang.dto.V2rayConfig
|
||||
import com.v2ray.ang.dto.V2rayConfig.Companion.DEFAULT_NETWORK
|
||||
import com.v2ray.ang.dto.V2rayConfig.Companion.HTTP
|
||||
|
||||
@@ -134,6 +134,7 @@ object V2rayConfigUtil {
|
||||
settingsStorage?.decodeBool(AppConfig.PREF_SNIFFING_ENABLED, true)
|
||||
?: true
|
||||
v2rayConfig.inbounds[0].sniffing?.enabled = fakedns || sniffAllTlsAndHttp
|
||||
v2rayConfig.inbounds[0].sniffing?.routeOnly = settingsStorage?.decodeBool(AppConfig.PREF_ROUTE_ONLY_ENABLED, false)
|
||||
if (!sniffAllTlsAndHttp) {
|
||||
v2rayConfig.inbounds[0].sniffing?.destOverride?.clear()
|
||||
}
|
||||
@@ -158,7 +159,7 @@ object V2rayConfigUtil {
|
||||
|
||||
private fun fakedns(v2rayConfig: V2rayConfig) {
|
||||
if (settingsStorage?.decodeBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true
|
||||
|| settingsStorage?.decodeBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true
|
||||
&& settingsStorage?.decodeBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true
|
||||
) {
|
||||
v2rayConfig.fakedns = listOf(V2rayConfig.FakednsBean())
|
||||
v2rayConfig.outbounds.filter { it.protocol == PROTOCOL_FREEDOM && it.tag == TAG_DIRECT }
|
||||
@@ -286,15 +287,11 @@ object V2rayConfigUtil {
|
||||
rulesIP.ip = ArrayList()
|
||||
|
||||
userRule.split(",").map { it.trim() }.forEach {
|
||||
if (Utils.isIpAddress(it) || it.startsWith("geoip:")) {
|
||||
if (it.startsWith("ext:") && it.contains("geoip")) {
|
||||
rulesIP.ip?.add(it)
|
||||
} else if (it.isNotEmpty())
|
||||
// if (Utils.isValidUrl(it)
|
||||
// || it.startsWith("geosite:")
|
||||
// || it.startsWith("regexp:")
|
||||
// || it.startsWith("domain:")
|
||||
// || it.startsWith("full:"))
|
||||
{
|
||||
} else if (Utils.isIpAddress(it) || it.startsWith("geoip:")) {
|
||||
rulesIP.ip?.add(it)
|
||||
} else if (it.isNotEmpty()) {
|
||||
rulesDomain.domain?.add(it)
|
||||
}
|
||||
}
|
||||
@@ -402,12 +399,13 @@ object V2rayConfigUtil {
|
||||
try {
|
||||
val hosts = mutableMapOf<String, String>()
|
||||
val servers = ArrayList<Any>()
|
||||
|
||||
//remote Dns
|
||||
val remoteDns = Utils.getRemoteDnsServers()
|
||||
val proxyDomain = userRule2Domian(
|
||||
settingsStorage?.decodeString(AppConfig.PREF_V2RAY_ROUTING_AGENT)
|
||||
?: ""
|
||||
)
|
||||
|
||||
remoteDns.forEach {
|
||||
servers.add(it)
|
||||
}
|
||||
@@ -423,48 +421,51 @@ object V2rayConfigUtil {
|
||||
}
|
||||
|
||||
// domestic DNS
|
||||
val domesticDns = Utils.getDomesticDnsServers()
|
||||
val directDomain = userRule2Domian(
|
||||
settingsStorage?.decodeString(AppConfig.PREF_V2RAY_ROUTING_DIRECT)
|
||||
?: ""
|
||||
)
|
||||
val routingMode = settingsStorage?.decodeString(AppConfig.PREF_ROUTING_MODE)
|
||||
?: ERoutingMode.BYPASS_LAN_MAINLAND.value
|
||||
if (directDomain.size > 0 || routingMode == ERoutingMode.BYPASS_MAINLAND.value || routingMode == ERoutingMode.BYPASS_LAN_MAINLAND.value) {
|
||||
val domesticDns = Utils.getDomesticDnsServers()
|
||||
val geositeCn = arrayListOf("geosite:cn","geosite:geolocation-cn")
|
||||
val geoipCn = arrayListOf("geoip:cn")
|
||||
if (directDomain.size > 0) {
|
||||
servers.add(
|
||||
V2rayConfig.DnsBean.ServersBean(
|
||||
domesticDns.first(),
|
||||
53,
|
||||
directDomain,
|
||||
geoipCn
|
||||
)
|
||||
val isCnRoutingMode =
|
||||
(routingMode == ERoutingMode.BYPASS_MAINLAND.value || routingMode == ERoutingMode.BYPASS_LAN_MAINLAND.value)
|
||||
val geoipCn = arrayListOf("geoip:cn")
|
||||
|
||||
if (directDomain.size > 0) {
|
||||
servers.add(
|
||||
V2rayConfig.DnsBean.ServersBean(
|
||||
domesticDns.first(),
|
||||
53,
|
||||
directDomain,
|
||||
if (isCnRoutingMode) geoipCn else null
|
||||
)
|
||||
}
|
||||
if (routingMode == ERoutingMode.BYPASS_MAINLAND.value || routingMode == ERoutingMode.BYPASS_LAN_MAINLAND.value) {
|
||||
servers.add(
|
||||
V2rayConfig.DnsBean.ServersBean(
|
||||
domesticDns.first(),
|
||||
53,
|
||||
geositeCn,
|
||||
geoipCn
|
||||
)
|
||||
)
|
||||
}
|
||||
if (isCnRoutingMode) {
|
||||
val geositeCn = arrayListOf("geosite:cn", "geosite:geolocation-cn")
|
||||
servers.add(
|
||||
V2rayConfig.DnsBean.ServersBean(
|
||||
domesticDns.first(),
|
||||
53,
|
||||
geositeCn,
|
||||
geoipCn
|
||||
)
|
||||
}
|
||||
if (Utils.isPureIpAddress(domesticDns.first())) {
|
||||
v2rayConfig.routing.rules.add(
|
||||
0, V2rayConfig.RoutingBean.RulesBean(
|
||||
outboundTag = AppConfig.TAG_DIRECT,
|
||||
port = "53",
|
||||
ip = arrayListOf(domesticDns.first()),
|
||||
domain = null
|
||||
)
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
if (Utils.isPureIpAddress(domesticDns.first())) {
|
||||
v2rayConfig.routing.rules.add(
|
||||
0, V2rayConfig.RoutingBean.RulesBean(
|
||||
outboundTag = AppConfig.TAG_DIRECT,
|
||||
port = "53",
|
||||
ip = arrayListOf(domesticDns.first()),
|
||||
domain = null
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
//block dns
|
||||
val blkDomain = userRule2Domian(
|
||||
settingsStorage?.decodeString(AppConfig.PREF_V2RAY_ROUTING_BLOCKED)
|
||||
?: ""
|
||||
|
||||
@@ -59,6 +59,7 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application
|
||||
settingsStorage?.encode(key, sharedPreferences.getString(key, ""))
|
||||
}
|
||||
|
||||
AppConfig.PREF_ROUTE_ONLY_ENABLED,
|
||||
AppConfig.PREF_SPEED_ENABLED,
|
||||
AppConfig.PREF_PROXY_SHARING,
|
||||
AppConfig.PREF_LOCAL_DNS_ENABLED,
|
||||
|
||||
@@ -51,6 +51,30 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/layout_share"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/server_height"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:foreground="?attr/selectableItemBackground"
|
||||
android:gravity="center|start"
|
||||
android:orientation="horizontal"
|
||||
android:padding="16dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="@dimen/png_height"
|
||||
android:layout_height="@dimen/png_height"
|
||||
app:srcCompat="@drawable/ic_share_24dp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="16dp"
|
||||
android:text="@string/title_configuration_share"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/layout_restore"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -1,58 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<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="navigation_drawer_open">افتح درج التنقل</string>
|
||||
<string name="navigation_drawer_close">أغلق درج التنقل</string>
|
||||
<string name="navigation_drawer_open">فتح درج التنقل</string>
|
||||
<string name="navigation_drawer_close">إغلاق درج التنقل</string>
|
||||
<string name="migration_success">نجحت عملية ترحيل البيانات!</string>
|
||||
<string name="migration_fail">فشلت عملية ترحيل البيانات!</string>
|
||||
|
||||
<!-- Notifications -->
|
||||
<string name="notification_action_stop_v2ray">توقف</string>
|
||||
<string name="toast_permission_denied">غير قادر على الحصول على الإذن</string>
|
||||
<string name="notification_action_more">اضغط للمزيد</string>
|
||||
<string name="notification_action_stop_v2ray">إيقاف</string>
|
||||
<string name="toast_permission_denied">تعذر الحصول على الإذن</string>
|
||||
<string name="notification_action_more">انقر للمزيد</string>
|
||||
<string name="toast_services_start">بدء الخدمات</string>
|
||||
<string name="toast_services_stop">توقف الخدمات</string>
|
||||
<string name="toast_services_success">نجح بدء الخدمات</string>
|
||||
<string name="toast_services_stop">إيقاف الخدمات</string>
|
||||
<string name="toast_services_success">نجاح بدء الخدمات</string>
|
||||
<string name="toast_services_failure">فشل بدء الخدمات</string>
|
||||
|
||||
<!--ServerActivity-->
|
||||
<string name="title_server">ملف الإعدادات</string>
|
||||
<string name="menu_item_add_config">إضافة إعدادات</string>
|
||||
<string name="menu_item_save_config">حفظ الإعدادات</string>
|
||||
<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_manually_vmess">الكتابة يدويا [Vmess]</string>
|
||||
<string name="menu_item_import_config_manually_vless">الكتابة يدويا [VLESS]</string>
|
||||
<string name="menu_item_import_config_manually_ss">الكتابة يدويا [Shadowsocks]</string>
|
||||
<string name="menu_item_import_config_manually_socks">الكتابة يدويا [Socks]</string>
|
||||
<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_custom">إعدادات مخصص</string>
|
||||
<string name="menu_item_import_config_custom_clipboard">استيراد الإعدادات المخصص من الحافظة</string>
|
||||
<string name="menu_item_import_config_custom_local">استيراد الإعدادات المخصص من ملف محلي</string>
|
||||
<string name="menu_item_import_config_custom_url">استيراد الإعدادات المخصص من URL</string>
|
||||
<string name="menu_item_import_config_custom_url_scan">استيراد الإعدادات المخصص من مسح URL</string>
|
||||
<string name="title_server">ملف التكوين</string>
|
||||
<string name="menu_item_add_config">إضافة تكوين</string>
|
||||
<string name="menu_item_save_config">حفظ التكوين</string>
|
||||
<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_manually_vmess">الكتابة يدويًا [Vmess]</string>
|
||||
<string name="menu_item_import_config_manually_vless">الكتابة يدويًا [VLESS]</string>
|
||||
<string name="menu_item_import_config_manually_ss">الكتابة يدويًا [Shadowsocks]</string>
|
||||
<string name="menu_item_import_config_manually_socks">الكتابة يدويًا [Socks]</string>
|
||||
<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_custom">تكوين مخصص</string>
|
||||
<string name="menu_item_import_config_custom_clipboard">استيراد تكوين مخصص من الحافظة</string>
|
||||
<string name="menu_item_import_config_custom_local">استيراد تكوين مخصص من الجهاز</string>
|
||||
<string name="menu_item_import_config_custom_url">استيراد تكوين مخصص من عنوان URL</string>
|
||||
<string name="menu_item_import_config_custom_url_scan">استيراد تكوين مخصص مسح عنوان URL</string>
|
||||
<string name="del_config_comfirm">تأكيد الحذف؟</string>
|
||||
<string name="server_lab_remarks">ملاحظات</string>
|
||||
<string name="server_lab_address">العنوان</string>
|
||||
<string name="server_lab_port">المنفذ</string>
|
||||
<string name="server_lab_id">المعرف</string>
|
||||
<string name="server_lab_alterid">alterId</string>
|
||||
<string name="server_lab_alterid">AlterId</string>
|
||||
|
||||
<string name="server_lab_security">الأمان</string>
|
||||
<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_request_host">طلب استضافة (host/ws host/httpupgrade host/h2 host)/QUIC security/gRPC Authority</string>
|
||||
<string name="server_lab_path">مسار (ws path/httpupgrade path/h2 path)/QUIC key/kcp seed/gRPC serviceName</string>
|
||||
<string name="server_lab_request_host">مضيف الطلب (مضيف/مضيف ws/مضيف httpupgrade/مضيف h2)/أمان QUIC/جهة gRPC</string>
|
||||
<string name="server_lab_path">المسار (مسار ws/مسار httpupgrade/مسار h2)/مفتاح QUIC/بذرة kcp/خدمة gRPC</string>
|
||||
<string name="server_lab_stream_security">TLS</string>
|
||||
<string name="server_lab_stream_fingerprint" translatable="false">بصمة</string>
|
||||
<string name="server_lab_stream_fingerprint" translatable="false">البصمة</string>
|
||||
<string name="server_lab_stream_alpn" translatable="false">بروتوكول الطبقة الآخرى التالية (ALPN)</string>
|
||||
<string name="server_lab_allow_insecure">allowInsecure</string>
|
||||
<string name="server_lab_allow_insecure">السماح غير الآمن</string>
|
||||
<string name="server_lab_sni">SNI</string>
|
||||
<string name="server_lab_address3">العنوان</string>
|
||||
<string name="server_lab_port3">المنفذ</string>
|
||||
@@ -63,47 +64,46 @@
|
||||
<string name="server_lab_encryption">التشفير</string>
|
||||
<string name="server_lab_flow">التدفق</string>
|
||||
<string name="server_lab_public_key" translatable="false">المفتاح العام</string>
|
||||
<string name="server_lab_short_id" translatable="false">الهوية المختصرة</string>
|
||||
<string name="server_lab_spider_x" translatable="false">سبايدر إكس</string>
|
||||
<string name="server_lab_short_id" translatable="false">المعرّف القصير</string>
|
||||
<string name="server_lab_spider_x" translatable="false">SpiderX</string>
|
||||
<string name="server_lab_secret_key" translatable="false">المفتاح السري</string>
|
||||
<string name="server_lab_reserved">محجوز (اختياري)</string>
|
||||
<string name="server_lab_local_address">العنوان المحلي (اختياري IPv4/IPv6، مفصولة بفاصلة)</string>
|
||||
<string name="server_lab_local_mtu">Mtu (اختياري، افتراضي 1420)</string>
|
||||
<string name="server_lab_local_address">العنوان المحلي (اختياري IPv4/IPv6، مفصولة بفواصل)</string>
|
||||
<string name="server_lab_local_mtu">Mtu (اختياري، الافتراضي 1420)</string>
|
||||
<string name="toast_success">نجاح</string>
|
||||
<string name="toast_failure">فشل</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="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="toast_invalid_url">URL غير صالح</string>
|
||||
<string name="server_lab_need_inbound">تأكد من أن منافذ الدخول متسقة مع الإعدادات</string>
|
||||
<string name="toast_malformed_josn">إعدادات غير صحيحة</string>
|
||||
<string name="server_lab_request_host6">استضافة (SNI) (اختياري)</string>
|
||||
<string name="toast_invalid_url">رابط URL غير صالح</string>
|
||||
<string name="server_lab_need_inbound">تأكد من أن منفذ الاتصالات الواردة يتوافق مع الإعدادات</string>
|
||||
<string name="toast_malformed_josn">تكوين مشوه</string>
|
||||
<string name="server_lab_request_host6">مضيف (SNI) (اختياري)</string>
|
||||
<string name="toast_asset_copy_failed">فشل نسخ الملف، يرجى استخدام مدير الملفات</string>
|
||||
<string name="menu_item_add_asset">إضافة أصول</string>
|
||||
<string name="menu_item_add_asset">إضافة أصل</string>
|
||||
<string name="menu_item_add_file">إضافة ملفات</string>
|
||||
<string name="menu_item_add_url">إضافة رابط</string>
|
||||
<string name="title_url" translatable="false">رابط</string>
|
||||
<string name="menu_item_download_file">تحميل الملفات</string>
|
||||
<string name="title_user_asset_add_url">أضف عنوان URL للأصل</string>
|
||||
<string name="msg_file_not_found">لم يتم العثور على الملف</string>
|
||||
<string name="menu_item_add_url">إضافة URL</string>
|
||||
<string name="title_url" translatable="false">URL</string>
|
||||
<string name="menu_item_download_file">تنزيل الملفات</string>
|
||||
<string name="title_user_asset_add_url">إضافة عنوان URL للأصل</string>
|
||||
<string name="msg_file_not_found">الملف غير موجود</string>
|
||||
<string name="msg_remark_is_duplicate">الملاحظات موجودة بالفعل</string>
|
||||
<string name="toast_action_not_allowed">هذا الإجراء محظور</string>
|
||||
|
||||
|
||||
<string name="toast_action_not_allowed">الإجراء غير مسموح به</string>
|
||||
|
||||
<!-- PerAppProxyActivity -->
|
||||
<string name="msg_dialog_progress">جار التحميل</string>
|
||||
<string name="menu_item_search">بحث</string>
|
||||
<string name="menu_item_select_all">تحديد الكل</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="menu_item_select_proxy_app">تحديد تطبيق الوكيل تلقائيًا</string>
|
||||
<string name="msg_downloading_content">جارٍ تنزيل المحتوى</string>
|
||||
<string name="menu_item_export_proxy_app">تصدير إلى الحافظة</string>
|
||||
<string name="menu_item_import_proxy_app">استيراد من الحافظة</string>
|
||||
|
||||
@@ -112,181 +112,183 @@
|
||||
<string name="title_settings">الإعدادات</string>
|
||||
<string name="title_advanced">إعدادات متقدمة</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="title_pref_per_app_proxy">الوكيل لكل تطبيق</string>
|
||||
<string name="summary_pref_per_app_proxy">عام: التطبيق المحدد هو وكيل، غير المحدد اتصال مباشر؛ \nوضع التجاوز: التطبيق المحدد متصل مباشرة، غير المحدد وكيل. \nخيار تحديد تطبيق الوكيل تلقائيًا في القائمة</string>
|
||||
|
||||
<string name="title_mux_settings">إعدادات Mux</string>
|
||||
<string name="title_pref_mux_enabled">تمكين Mux</string>
|
||||
<string name="summary_pref_mux_enabled">حركة مرور TCP مع 8 اتصالات افتراضية، قم بتخصيص كيفية التعامل مع UDP وQUIC أدناهn\أسرع، لكنه قد يسبب اتصالاً غير مستقر</string>
|
||||
<string name="title_pref_mux_concurency">اتصالات TCP (النطاق من -1 إلى 1024)</string>
|
||||
<string name="title_pref_mux_xudp_concurency">اتصالات XUDP (النطاق من -1 إلى 1024)</string>
|
||||
<string name="title_pref_mux_xudp_quic">التعامل مع QUIC في نفق مكس</string>
|
||||
<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_local_dns_enabled">تمكين DNS المحلي</string>
|
||||
|
||||
<string name="summary_pref_local_dns_enabled">DNS يتم معالجتها بواسطة وحدة DNS الأساسية (موصى بها، إذا كانت بحاجة إلى توجيه تجاوز الشبكة المحلية والعنوان الرئيسي)</string>
|
||||
<string name="title_pref_fake_dns_enabled">تمكين DNS الوهمي</string>
|
||||
|
||||
<string name="summary_pref_fake_dns_enabled">DNS المحلي يعود بعنوان IP وهمي (أسرع، ولكن قد لا يعمل لبعض التطبيقات)</string>
|
||||
<string name="title_pref_prefer_ipv6">تفضيل IPv6</string>
|
||||
|
||||
<string name="summary_pref_prefer_ipv6">تفضيل عنوان IPv6 والمسارات</string>
|
||||
<string name="title_pref_routing">التوجيه</string>
|
||||
|
||||
<string name="title_pref_routing_domain_strategy">استراتيجية النطاق</string>
|
||||
<string name="title_pref_routing_mode">قواعد محددة مسبقا</string>
|
||||
<string name="title_pref_routing_custom">قواعد مخصصة</string>
|
||||
<string name="title_pref_remote_dns">DNS (udp/tcp/https/quic) عن بُعد (اختياري)</string>
|
||||
|
||||
<string name="summary_pref_remote_dns">DNS</string>
|
||||
<string name="title_pref_vpn_dns">DNS VPN (IPv4/v6 فقط)</string>
|
||||
|
||||
<string name="title_pref_domestic_dns">DNS المحلي (اختياري)</string>
|
||||
|
||||
<string name="summary_pref_domestic_dns">DNS</string>
|
||||
<string name="title_pref_proxy_sharing_enabled">السماح بالاتصالات من الشبكة المحلية</string>
|
||||
|
||||
<string name="summary_pref_proxy_sharing_enabled">يمكن للأجهزة الأخرى الاتصال بالوكيل عبر عنوان IP الخاص بك من خلال socks/http، فقط تمكين في الشبكة الموثوقة لتجنب الاتصال غير المصرح به</string>
|
||||
<string name="toast_warning_pref_proxysharing_short">السماح بالاتصالات من الشبكة المحلية، تأكد من أنك في شبكة موثوقة</string>
|
||||
<string name="title_pref_allow_insecure">allowInsecure</string>
|
||||
|
||||
<string name="summary_pref_allow_insecure">عند استخدام TLS، الافتراضي هو allowInsecure</string>
|
||||
<string name="title_pref_socks_port">منفذ الوكيل SOCKS5</string>
|
||||
|
||||
<string name="summary_pref_socks_port">منفذ الوكيل SOCKS5</string>
|
||||
<string name="title_pref_http_port">منفذ الوكيل HTTP</string>
|
||||
|
||||
<string name="summary_pref_http_port">منفذ الوكيل HTTP</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_start_scan_immediate">بدء المسح فورا</string>
|
||||
|
||||
<string name="summary_pref_start_scan_immediate">افتح الكاميرا للمسح فورا عند بدء التشغيل، وإلا يمكنك اختيار المسح الضوئي للرمز أو اختيار صورة في شريط الأدوات</string>
|
||||
<string name="title_pref_feedback">الملاحظات</string>
|
||||
|
||||
<string name="summary_pref_feedback">إرسال ملاحظات عن التحسينات أو الأخطاء إلى GitHub</string>
|
||||
<string name="summary_pref_tg_group">الانضمام إلى مجموعة Telegram</string>
|
||||
<string name="toast_tg_app_not_found">لم يتم العثور على تطبيق تيليجرام</string>
|
||||
<string name="title_privacy_policy">سياسة الخصوصية\nترجمة م. ابراهيم قاسم</string>
|
||||
<string name="title_about">عن</string>
|
||||
<string name="title_source_code">الكود المصدري</string>
|
||||
<string name="title_tg_channel">قناة تليجرام</string>
|
||||
<string name="title_configuration_backup">إعدادات النسخ الاحتياطي</string>
|
||||
<string name="summary_configuration_backup">مكان التخزين: [%s]، سيتم مسح النسخة الاحتياطية بعد إلغاء تثبيت التطبيق أو مسح مساحة التخزين</string>
|
||||
<string name="title_configuration_restore">استعادة الاعدادات</string>
|
||||
<string name="title_pref_promotion">ترقية</string>
|
||||
|
||||
<string name="summary_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="title_core_loglevel">مستوى السجل</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_logcat">Logcat</string>
|
||||
|
||||
<string name="logcat_copy">نسخ</string>
|
||||
<string name="logcat_clear">مسح</string>
|
||||
<string name="title_service_restart">إعادة تشغيل الخدمة</string>
|
||||
<string name="title_del_all_config">حذف الكل (قبل أول خطوة)</string>
|
||||
<string name="title_del_duplicate_config">حذف المكررات (2)</string>
|
||||
<string name="title_del_invalid_config">حذف العناوين العاطلة (بعد الاختبار؛ 4)</string>
|
||||
<string name="title_export_all">تصدير الإعدادات غير المخصصة إلى الحافظة</string>
|
||||
<string name="title_sub_setting">إعدادات الاشتراكات</string>
|
||||
<string name="sub_setting_remarks">ملاحظات</string>
|
||||
<string name="sub_setting_url">URL اختياري</string>
|
||||
<string name="sub_setting_enable">تمكين التحديث</string>
|
||||
<string name="sub_auto_update">تمكين التحديث التلقائي</string>
|
||||
<string name="title_sub_update">تحديث الاشتراك (1)</string>
|
||||
<string name="title_ping_all_server">Tcping كل الإعدادات</string>
|
||||
<string name="title_real_ping_all_server">اختبر كل العناوين (3)</string>
|
||||
<string name="title_user_asset_setting">ملفات الأصول الجغرافية</string>
|
||||
<string name="title_sort_by_test_results">ترتيب العناوين حسب نتائج الاختبار (5)</string>
|
||||
<string name="title_filter_config">تصفية ملف الإعدادات</string>
|
||||
<string name="filter_config_all">جميع مجموعات الاشتراك</string>
|
||||
<string name="title_del_duplicate_config_count">حذف %d من الإعدادات المكررة</string>
|
||||
<string name="tasker_start_service">بدء الخدمة</string>
|
||||
|
||||
<string name="tasker_setting_confirm">تأكيد</string>
|
||||
<string name="routing_settings_title">إعدادات التوجيه</string>
|
||||
|
||||
<string name="routing_settings_tips">مفصولة بفواصل (،)، تذكر الحفظ</string>
|
||||
<string name="routing_settings_save">حفظ</string>
|
||||
<string name="routing_settings_delete">مسح</string>
|
||||
<string name="routing_settings_scan_replace">مسح واستبدال</string>
|
||||
<string name="routing_settings_scan_append">مسح وإضافة</string>
|
||||
<string name="routing_settings_default_rules">تعيين قواعد التوجيه الافتراضية</string>
|
||||
<string name="connection_test_pending">فحص الاتصال</string>
|
||||
|
||||
<string name="connection_test_testing">جارٍ الفحص...</string>
|
||||
<string name="connection_test_available">نجاح: استغرق الاتصال HTTP %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_connected">متصل، اضغط لفحص الاتصال</string>
|
||||
<string name="connection_not_connected">غير متصل</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_enabled">تمكين الكسر</string>
|
||||
<string name="summary_pref_mux_enabled">أسرع، لكن قد يتسبب في اتصال غير مستقر\nتخصيص كيفية التعامل مع TCP و UDP و QUIC أدناه</string>
|
||||
<string name="title_pref_mux_concurency">اتصالات TCP(النطاق من -1 إلى 1024)</string>
|
||||
<string name="title_pref_mux_xudp_concurency">اتصالات XUDP(النطاق من -1 إلى 1024)</string>
|
||||
<string name="title_pref_mux_xudp_quic">التعامل مع QUIC في نفق mux</string>
|
||||
<string-array name="mux_xudp_quic_entries">
|
||||
<item>رفض</item>
|
||||
<item>سماح</item>
|
||||
<item>تخطي</item>
|
||||
</string-array>
|
||||
|
||||
<string name="title_pref_speed_enabled">تمكين عرض السرعة</string>
|
||||
<string name="summary_pref_speed_enabled">عرض السرعة الحالية في الإشعار.\nستتغير أيقونة الإشعار بناءً على الاستخدام.</string>
|
||||
<string name="title_pref_sniffing_enabled">تفعيل استخراج الشبكة</string>
|
||||
<string name="summary_pref_sniffing_enabled">محاولة استخراج النطاق من الحزمة (مفعل افتراضيًا)</string>
|
||||
<string name="title_pref_route_only_enabled">تفعيل التوجيه فقط</string>
|
||||
<string name="summary_pref_route_only_enabled">استخدم اسم النطاق الذي تم استخراجه للتوجيه فقط، واحتفظ بعنوان الوجهة كعنوان 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_fake_dns_enabled">تفعيل DNS وهمي</string>
|
||||
<string name="summary_pref_fake_dns_enabled">يعيد DNS المحلي عنوان IP وهمي (أسرع، ولكنه قد لا يعمل مع بعض التطبيقات)</string>
|
||||
|
||||
<string name="title_pref_prefer_ipv6">تفضيل IPv6</string>
|
||||
<string name="summary_pref_prefer_ipv6">تفضيل عنوان IPv6 وطرق التوجيه</string>
|
||||
|
||||
<string name="title_pref_routing">التوجيه</string>
|
||||
<string name="title_pref_routing_domain_strategy">استراتيجية النطاق</string>
|
||||
<string name="title_pref_routing_mode">قواعد محددة مسبقًا</string>
|
||||
<string name="title_pref_routing_custom">قواعد مخصصة</string>
|
||||
|
||||
<string name="title_pref_remote_dns">DNS البعيد (udp/tcp/https/quic) (اختياري)</string>
|
||||
<string name="summary_pref_remote_dns">DNS</string>
|
||||
|
||||
<string name="title_pref_vpn_dns">VPN DNS (IPv4/v6 فقط)</string>
|
||||
|
||||
<string name="title_pref_domestic_dns">DNS المحلي (اختياري)</string>
|
||||
<string name="summary_pref_domestic_dns">DNS</string>
|
||||
|
||||
<string name="title_pref_proxy_sharing_enabled">السماح بالاتصالات من الشبكة المحلية</string>
|
||||
<string name="summary_pref_proxy_sharing_enabled">يمكن للأجهزة الأخرى الاتصال بالبروكسي بواسطة عنوان IP الخاص بك من خلال socks/http، يتم التمكين فقط في الشبكة الموثوقة لتجنب الاتصال غير المصرح به</string>
|
||||
<string name="toast_warning_pref_proxysharing_short">السماح بالاتصالات من الشبكة المحلية، تأكد من أنك في شبكة موثوقة</string>
|
||||
|
||||
<string name="title_pref_allow_insecure">السماح غير الآمن</string>
|
||||
<string name="summary_pref_allow_insecure">عند TLS، الافتراضي هو السماح غير الآمن</string>
|
||||
|
||||
<string name="title_pref_socks_port">منفذ بروكسي SOCKS5</string>
|
||||
<string name="summary_pref_socks_port">منفذ بروكسي SOCKS5</string>
|
||||
|
||||
<string name="title_pref_http_port">منفذ بروكسي HTTP</string>
|
||||
<string name="summary_pref_http_port">منفذ بروكسي HTTP</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_start_scan_immediate">بدء المسح الضوئي على الفور</string>
|
||||
<string name="summary_pref_start_scan_immediate">افتح الكاميرا لمسح الرمز ضوئيًا على الفور عند بدء التشغيل، وإلا يمكنك اختيار مسح الرمز ضوئيًا أو تحديد صورة في شريط الأدوات</string>
|
||||
|
||||
<string name="title_pref_feedback">ملاحظات</string>
|
||||
<string name="summary_pref_feedback">ملاحظات التحسينات أو الأخطاء إلى GitHub</string>
|
||||
<string name="summary_pref_tg_group">الانضمام إلى مجموعة Telegram</string>
|
||||
<string name="toast_tg_app_not_found">لم يتم العثور على تطبيق Telegram</string>
|
||||
<string name="title_privacy_policy">سياسة الخصوصية</string>
|
||||
<string name="title_about">حول\nترجمة م. ابراهيم قاسم</string>
|
||||
<string name="title_source_code">الكود المصدري</string>
|
||||
<string name="title_tg_channel">قناة Telegram</string>
|
||||
<string name="title_configuration_backup">نسخ التكوين احتياطيًا</string>
|
||||
<string name="summary_configuration_backup">موقع التخزين: [%s]، سيتم مسح النسخة الاحتياطية بعد إلغاء تثبيت التطبيق أو مسح التخزين</string>
|
||||
<string name="title_configuration_restore">استعادة التكوين</string>
|
||||
<string name="title_configuration_share">مشاركة التكوين</string>
|
||||
|
||||
<string name="title_pref_promotion">ترويج</string>
|
||||
<string name="summary_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="title_core_loglevel">مستوى السجل</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_logcat">Logcat</string>
|
||||
<string name="logcat_copy">نسخ</string>
|
||||
<string name="logcat_clear">مسح</string>
|
||||
<string name="title_service_restart">إعادة تشغيل الخدمة</string>
|
||||
<string name="title_del_all_config">حذف جميع الإعدادات (قبل أول خطوة)</string>
|
||||
<string name="title_del_duplicate_config">حذف الإعدادات المكررة (2)</string>
|
||||
<string name="title_del_invalid_config">حذف الإعدادات غير الصالحة (بعد الاختبار؛ 4)</string>
|
||||
<string name="title_export_all">تصدير الإعدادات غير المخصصة إلى الحافظة</string>
|
||||
<string name="title_sub_setting">إعداد مجموعة الاشتراك</string>
|
||||
<string name="sub_setting_remarks">ملاحظات</string>
|
||||
<string name="sub_setting_url">عنوان URL اختياري</string>
|
||||
<string name="sub_setting_enable">تفعيل التحديث</string>
|
||||
<string name="sub_auto_update">تفعيل التحديث التلقائي</string>
|
||||
<string name="title_sub_update">تحديث الاشتراك (أول خطوة)</string>
|
||||
<string name="title_ping_all_server">Tcping لجميع الإعدادات</string>
|
||||
<string name="title_real_ping_all_server"> اختبر جميع الإعدادات (3)</string>
|
||||
<string name="title_user_asset_setting">ملفات أصول جغرافية</string>
|
||||
<string name="title_sort_by_test_results">الفرز حسب نتائج الاختبار (5)</string>
|
||||
<string name="title_filter_config">تصفية ملف التكوين</string>
|
||||
<string name="filter_config_all">جميع مجموعات الاشتراك</string>
|
||||
<string name="title_del_duplicate_config_count">حذف %d من الإعدادات المكررة</string>
|
||||
|
||||
<string name="tasker_start_service">بدء الخدمة</string>
|
||||
<string name="tasker_setting_confirm">تأكيد</string>
|
||||
|
||||
<string name="routing_settings_title">إعدادات التوجيه</string>
|
||||
<string name="routing_settings_tips">مفصولة بفواصل (،)، تذكر الحفظ</string>
|
||||
<string name="routing_settings_save">حفظ</string>
|
||||
<string name="routing_settings_delete">مسح</string>
|
||||
<string name="routing_settings_scan_replace">فحص واستبدال</string>
|
||||
<string name="routing_settings_scan_append">فحص وإضافة</string>
|
||||
<string name="routing_settings_default_rules"> تعيين قواعد توجيه افتراضية</string>
|
||||
|
||||
<string name="connection_test_pending">التحقق من الاتصال</string>
|
||||
<string name="connection_test_testing">يجري الاختبار…</string>
|
||||
<string name="connection_test_available">نجاح: استغرق اتصال HTTP %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_connected">متصل، انقر للتحقق من الاتصال</string>
|
||||
<string name="connection_not_connected">غير متصل</string>
|
||||
|
||||
<string name="import_subscription_success">تم استيراد الاشتراك بنجاح</string>
|
||||
<string name="import_subscription_failure">فشل استيراد الاشتراك</string>
|
||||
<string name="title_fragment_settings">إعدادات الجزء</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_enabled">تفعيل الجزء</string>
|
||||
|
||||
<string-array name="share_method">
|
||||
<item>QRcode</item>
|
||||
<item>رمز استجابة سريعة (QRcode)</item>
|
||||
<item>تصدير إلى الحافظة</item>
|
||||
<item>تصدير الإعدادت الكاملة إلى الحافظة</item>
|
||||
<item>تصدير التكوين الكامل إلى الحافظة</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="share_sub_method">
|
||||
<item>QRcode</item>
|
||||
<item>رمز استجابة سريعة (QRcode)</item>
|
||||
<item>تصدير إلى الحافظة</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="routing_tag">
|
||||
<item>عنوان URL للوكيل أو IP</item>
|
||||
<item>عنوان URL المباشر أو IP</item>
|
||||
<item>عنوان URL المحظور أو IP</item>
|
||||
<item>عنوان URL أو IP الوكيل</item>
|
||||
<item>عنوان URL أو IP المباشر</item>
|
||||
<item>عنوان URL أو IP المحظور</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="routing_mode">
|
||||
<item>وكيل عالمي proxy</item>
|
||||
<item>تجاوز عنوان LAN ثم الوكيل proxy</item>
|
||||
<item>وكيل عام</item>
|
||||
<item>تجاوز عنوان الشبكة المحلية ثم الوكيل</item>
|
||||
<item>تجاوز عنوان البر الرئيسي ثم الوكيل</item>
|
||||
<item>تجاوز عنوان LAN والبر الرئيسي ثم الوكيل proxy</item>
|
||||
<item>عالمي مباشر</item>
|
||||
<item>تجاوز عنوان الشبكة المحلية والبر الرئيسي ثم الوكيل</item>
|
||||
<item>مباشر عام</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="mode_entries">
|
||||
<item>VPN</item>
|
||||
<item>Proxy فقط</item>
|
||||
<item>بروكسي فقط</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="ui_mode_night">
|
||||
<item>حسب النظام</item>
|
||||
<item>عادي</item>
|
||||
<item>مظلم</item>
|
||||
<item>اتبع النظام</item>
|
||||
<item>فاتح</item>
|
||||
<item>داكن</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -120,6 +120,9 @@
|
||||
|
||||
<string name="title_pref_sniffing_enabled">فعال کردن Sniffing</string>
|
||||
<string name="summary_pref_sniffing_enabled">دامنه sniff را از بسته امتحان کنید (پیشفرض روشن)</string>
|
||||
<string name="title_pref_route_only_enabled">Enable routeOnly</string>
|
||||
<string name="summary_pref_route_only_enabled">Use the sniffed domain name for routing only, and keep the target address as the IP address.</string>
|
||||
|
||||
|
||||
<string name="title_pref_local_dns_enabled">فعال کردن DNS محلی</string>
|
||||
<string name="summary_pref_local_dns_enabled">DNS پردازش شده توسط ماژول DNS هسته (توصیه میشود، در صورت نیاز به دور زدن LAN و نشانی mainland)</string>
|
||||
@@ -177,6 +180,7 @@
|
||||
<string name="title_configuration_backup">Backup configuration</string>
|
||||
<string name="summary_configuration_backup">Storage location: [%s], The backup will be cleared after uninstalling the app or clearing the storage</string>
|
||||
<string name="title_configuration_restore">Restore configuration</string>
|
||||
<string name="title_configuration_share">Share configuration</string>
|
||||
<string name="title_pref_promotion">تبلیغات</string>
|
||||
<string name="summary_pref_promotion">تبلیغات، برای جزئیات بیشتر کلیک کنید (کمک مالی کنید تا حذف شود)</string>
|
||||
|
||||
|
||||
@@ -123,6 +123,9 @@
|
||||
|
||||
<string name="title_pref_sniffing_enabled">Анализ пакетов</string>
|
||||
<string name="summary_pref_sniffing_enabled">Использовать анализ пакетов (по умолчанию включено)</string>
|
||||
<string name="title_pref_route_only_enabled">Enable routeOnly</string>
|
||||
<string name="summary_pref_route_only_enabled">Use the sniffed domain name for routing only, and keep the target address as the IP address.</string>
|
||||
|
||||
|
||||
<string name="title_pref_local_dns_enabled">Использовать локальную DNS</string>
|
||||
<string name="summary_pref_local_dns_enabled">Обслуживание выполняется DNS-модулем ядра (в настройках маршрутизации рекомендуется выбрать режим «Все, кроме LAN и Китая»)</string>
|
||||
@@ -179,6 +182,7 @@
|
||||
<string name="title_configuration_backup">Резервирование</string>
|
||||
<string name="summary_configuration_backup">Путь: [%s]. Резервная копия будет стёрта при удалении приложения или очистке хранилища.</string>
|
||||
<string name="title_configuration_restore">Восстановление</string>
|
||||
<string name="title_configuration_share">Поделиться</string>
|
||||
|
||||
<string name="title_pref_promotion">Содействие</string>
|
||||
<string name="summary_pref_promotion">Содействие, нажмите для получения подробной информации (пожертвование может быть удалено)</string>
|
||||
|
||||
@@ -122,6 +122,9 @@
|
||||
|
||||
<string name="title_pref_sniffing_enabled">Bật Sniffing</string>
|
||||
<string name="summary_pref_sniffing_enabled">Nhận diện tên miền từ gói tin để phục vụ định tuyến. \n(phải tắt để xài Zalo)</string>
|
||||
<string name="title_pref_route_only_enabled">Enable routeOnly</string>
|
||||
<string name="summary_pref_route_only_enabled">Use the sniffed domain name for routing only, and keep the target address as the IP address.</string>
|
||||
|
||||
|
||||
<string name="title_pref_local_dns_enabled">Bật Local DNS</string>
|
||||
<string name="summary_pref_local_dns_enabled">DNS được xử lý bởi mô-đun DNS của xray-core (dùng nếu cần định tuyến bypass cho mạng LAN và địa chỉ nội địa)</string>
|
||||
@@ -179,6 +182,7 @@
|
||||
<string name="title_configuration_backup">Backup configuration</string>
|
||||
<string name="summary_configuration_backup">Storage location: [%s], The backup will be cleared after uninstalling the app or clearing the storage</string>
|
||||
<string name="title_configuration_restore">Restore configuration</string>
|
||||
<string name="title_configuration_share">Share configuration</string>
|
||||
<string name="title_pref_promotion">Quảng bá server</string>
|
||||
<string name="summary_pref_promotion">Quảng cáo, nhấn để biết thêm (Ủng hộ có thể được gỡ bỏ)</string>
|
||||
|
||||
|
||||
@@ -121,6 +121,8 @@
|
||||
|
||||
<string name="title_pref_sniffing_enabled">启用流量探测</string>
|
||||
<string name="summary_pref_sniffing_enabled">从流量中探测域名 (默认启用)</string>
|
||||
<string name="title_pref_route_only_enabled">启用 routeOnly</string>
|
||||
<string name="summary_pref_route_only_enabled">将嗅探得到的域名仅用于路由,代理目标地址仍为 IP</string>
|
||||
|
||||
<string name="title_pref_local_dns_enabled">启用本地DNS</string>
|
||||
<string name="summary_pref_local_dns_enabled">DNS 请求导入 core 由 DNS 模块处理(推荐启用 如果需要路由绕过局域网及大陆地址)</string>
|
||||
@@ -177,6 +179,7 @@
|
||||
<string name="title_configuration_backup">备份配置</string>
|
||||
<string name="summary_configuration_backup">存储位置: [%s], 卸载App或清除存储后备份将被清除</string>
|
||||
<string name="title_configuration_restore">还原配置</string>
|
||||
<string name="title_configuration_share">分享配置</string>
|
||||
|
||||
<string name="title_pref_promotion">推广</string>
|
||||
<string name="summary_pref_promotion">一些推广,点击查看详情(捐赠可去除)</string>
|
||||
|
||||
@@ -121,6 +121,9 @@
|
||||
|
||||
<string name="title_pref_sniffing_enabled">啟用流量監聽</string>
|
||||
<string name="summary_pref_sniffing_enabled">從流量中監聽網域 (預設啟用)</string>
|
||||
<string name="title_pref_route_only_enabled">啟用 routeOnly</string>
|
||||
<string name="summary_pref_route_only_enabled">將嗅探得到的網域只用於路由,代理目標位址仍為 IP</string>
|
||||
|
||||
|
||||
<string name="title_pref_local_dns_enabled">啟用本機 DNS</string>
|
||||
<string name="summary_pref_local_dns_enabled">DNS 請求匯入 core 由 DNS 模塊處理 (建議啟用,如果需要轉送略過區域網路及中國大陸)</string>
|
||||
@@ -177,6 +180,7 @@
|
||||
<string name="title_configuration_backup">備份配置</string>
|
||||
<string name="summary_configuration_backup">儲存位置: [%s], 卸載App或清除儲存後備份將被清除</string>
|
||||
<string name="title_configuration_restore">還原配置</string>
|
||||
<string name="title_configuration_share">分享配置</string>
|
||||
|
||||
<string name="title_pref_promotion">推廣</string>
|
||||
<string name="summary_pref_promotion">一些推廣,輕觸以檢視 (捐贈可去除)</string>
|
||||
|
||||
@@ -133,6 +133,8 @@
|
||||
|
||||
<string name="title_pref_sniffing_enabled">Enable Sniffing</string>
|
||||
<string name="summary_pref_sniffing_enabled">Try sniff domain from the packet (default on)</string>
|
||||
<string name="title_pref_route_only_enabled">Enable routeOnly</string>
|
||||
<string name="summary_pref_route_only_enabled">Use the sniffed domain name for routing only, and keep the target address as the IP address.</string>
|
||||
|
||||
<string name="title_pref_local_dns_enabled">Enable local DNS</string>
|
||||
<string name="summary_pref_local_dns_enabled">DNS processed by core‘s DNS module (Recommended, if need routing Bypassing LAN and
|
||||
@@ -190,6 +192,7 @@
|
||||
<string name="title_configuration_backup">Backup configuration</string>
|
||||
<string name="summary_configuration_backup">Storage location: [%s], The backup will be cleared after uninstalling the app or clearing the storage</string>
|
||||
<string name="title_configuration_restore">Restore configuration</string>
|
||||
<string name="title_configuration_share">Share configuration</string>
|
||||
|
||||
<string name="title_pref_promotion">Promotion</string>
|
||||
<string name="summary_pref_promotion">Promotion,click for details(Donation can be removed)</string>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<cache-path name="cache" path="/"/>
|
||||
</paths>
|
||||
@@ -8,6 +8,12 @@
|
||||
android:summary="@string/summary_pref_sniffing_enabled"
|
||||
android:title="@string/title_pref_sniffing_enabled" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pref_route_only_enabled"
|
||||
android:summary="@string/summary_pref_route_only_enabled"
|
||||
android:title="@string/title_pref_route_only_enabled" />
|
||||
|
||||
<PreferenceCategory android:title="@string/title_vpn_settings">
|
||||
<CheckBoxPreference
|
||||
android:key="pref_per_app_proxy"
|
||||
|
||||
Reference in New Issue
Block a user