From 2b4468b6697fa34179e8dcfb847695e0bf7645a7 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Wed, 20 Dec 2023 14:36:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=A4=9A=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E5=88=87=E6=8D=A2=E8=AE=BE=E7=BD=AE=E9=80=82=E5=BA=94?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=20#378=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=EF=BC=9A=E7=B9=81=E4=BD=93=E4=B8=AD=E6=96=87=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E5=8C=85(=E6=9C=BA=E5=99=A8=E8=BD=AC=E6=8D=A2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 12 +- app/proguard-rules.pro | 5 +- .../main/java/com/idormy/sms/forwarder/App.kt | 18 +- .../sms/forwarder/activity/MainActivity.kt | 4 - .../idormy/sms/forwarder/core/BaseActivity.kt | 7 +- .../sms/forwarder/fragment/LogsFragment.kt | 3 - .../sms/forwarder/fragment/RulesFragment.kt | 3 - .../forwarder/fragment/SettingsFragment.kt | 57 + .../sms/forwarder/fragment/TasksFragment.kt | 3 - .../idormy/sms/forwarder/utils/Constants.kt | 5 - app/src/main/res/layout/fragment_settings.xml | 64 + .../main/res/layout/fragment_tasks_edit.xml | 10 +- app/src/main/res/values-en/strings.xml | 89 +- .../styles.xml | 0 app/src/main/res/values-zh-rCN/strings.xml | 1293 +++++++++++++++++ app/src/main/res/values-zh-rTW-v21/styles.xml | 85 ++ app/src/main/res/values-zh-rTW/strings.xml | 1293 +++++++++++++++++ app/src/main/res/values/strings.xml | 13 +- 18 files changed, 2896 insertions(+), 68 deletions(-) rename app/src/main/res/{values-v21 => values-zh-rCN-v21}/styles.xml (100%) create mode 100644 app/src/main/res/values-zh-rCN/strings.xml create mode 100644 app/src/main/res/values-zh-rTW-v21/styles.xml create mode 100644 app/src/main/res/values-zh-rTW/strings.xml diff --git a/app/build.gradle b/app/build.gradle index cc7e5750..5dc44a96 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -173,6 +173,12 @@ android { } } + bundle { + language { + enableSplit = false + } + } + sourceSets { main { jniLibs.srcDirs = ['libs'] @@ -278,6 +284,8 @@ dependencies { //权限请求框架:https://github.com/getActivity/XXPermissions implementation 'com.github.getActivity:XXPermissions:18.5' + //语种切换框架:https://github.com/getActivity/MultiLanguages + implementation 'com.github.getActivity:MultiLanguages:9.3' def mail_version = '1.6.7' implementation "com.sun.mail:android-mail:$mail_version" @@ -307,9 +315,9 @@ dependencies { //Java Parser For Cron Expressions: https://github.com/grahamar/cron-parser implementation 'net.redhogs.cronparser:cron-parser-core:3.5' - // 侧边栏菜单:https://github.com/yarolegovich/SlidingRootNav + //侧边栏菜单:https://github.com/yarolegovich/SlidingRootNav implementation 'com.yarolegovich:sliding-root-nav:1.1.1' - // TabBar:https://github.com/xuexiangjys/JPTabBar + //TabBar:https://github.com/xuexiangjys/JPTabBar // implementation 'com.github.xuexiangjys:JPTabBar:1.0.1' } //自动添加X-Library依赖 diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index b2391d59..140613ac 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -301,4 +301,7 @@ # This is generated automatically by the Android Gradle plugin. -dontwarn org.joda.convert.** --dontwarn org.slf4j.impl.** \ No newline at end of file +-dontwarn org.slf4j.impl.** + +# MultiLanguages +-keep class com.hjq.language.** {*;} diff --git a/app/src/main/java/com/idormy/sms/forwarder/App.kt b/app/src/main/java/com/idormy/sms/forwarder/App.kt index 95a42fb4..81ea9833 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/App.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/App.kt @@ -17,6 +17,8 @@ import androidx.work.Configuration import com.gyf.cactus.Cactus import com.gyf.cactus.callback.CactusCallback import com.gyf.cactus.ext.cactus +import com.hjq.language.MultiLanguages +import com.hjq.language.OnLanguageListener import com.idormy.sms.forwarder.activity.MainActivity import com.idormy.sms.forwarder.core.Core import com.idormy.sms.forwarder.database.AppDatabase @@ -90,7 +92,9 @@ class App : Application(), CactusCallback, Configuration.Provider by Core { } override fun attachBaseContext(base: Context) { - super.attachBaseContext(base) + //super.attachBaseContext(base) + // 绑定语种 + super.attachBaseContext(MultiLanguages.attach(base)) //解决4.x运行崩溃的问题 MultiDex.install(this) } @@ -230,6 +234,18 @@ class App : Application(), CactusCallback, Configuration.Provider by Core { XUpdateInit.init(this) // 运营统计数据 UMengInit.init(this) + // 初始化语种切换框架 + MultiLanguages.init(this) + // 设置语种变化监听器 + MultiLanguages.setOnLanguageListener(object : OnLanguageListener { + override fun onAppLocaleChange(oldLocale: Locale, newLocale: Locale) { + Log.i(TAG, "监听到应用切换了语种,旧语种:$oldLocale,新语种:$newLocale") + } + + override fun onSystemLocaleChange(oldLocale: Locale, newLocale: Locale) { + Log.i(TAG, "监听到系统切换了语种,旧语种:" + oldLocale + ",新语种:" + newLocale + ",是否跟随系统:" + MultiLanguages.isSystemLanguage(this@App)) + } + }) } @SuppressLint("CheckResult") diff --git a/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt b/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt index fedd988a..0a0b7a4c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt @@ -67,10 +67,6 @@ import java.io.File class MainActivity : BaseActivity(), DrawerAdapter.OnItemSelectedListener { private val TAG: String = MainActivity::class.java.simpleName - //private lateinit var mTitles: Array - //private var logsType: String = "sms" - //private var ruleType: String = "sms" - private val POS_LOG = 0 private val POS_RULE = 1 private val POS_SENDER = 2 diff --git a/app/src/main/java/com/idormy/sms/forwarder/core/BaseActivity.kt b/app/src/main/java/com/idormy/sms/forwarder/core/BaseActivity.kt index 580d63f9..813ccb7f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/core/BaseActivity.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/core/BaseActivity.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import androidx.viewbinding.ViewBinding +import com.hjq.language.MultiLanguages import com.idormy.sms.forwarder.utils.EVENT_TOAST_ERROR import com.idormy.sms.forwarder.utils.EVENT_TOAST_INFO import com.idormy.sms.forwarder.utils.EVENT_TOAST_SUCCESS @@ -18,7 +19,6 @@ import com.xuexiang.xrouter.facade.service.SerializationService import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.widget.slideback.SlideBack -import io.github.inflationx.viewpump.ViewPumpContextWrapper /** * 基础容器Activity @@ -41,7 +41,10 @@ open class BaseActivity : XPageActivity() { override fun attachBaseContext(newBase: Context) { //注入字体 - super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)) + //super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)) + // 绑定语种 + //super.attachBaseContext(ViewPumpContextWrapper.wrap(MultiLanguages.attach(newBase))) + super.attachBaseContext(MultiLanguages.attach(newBase)) } override fun getCustomRootView(): View? { diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/LogsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/LogsFragment.kt index d987b617..70626926 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/LogsFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/LogsFragment.kt @@ -21,11 +21,9 @@ import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory import com.idormy.sms.forwarder.database.viewmodel.MsgViewModel import com.idormy.sms.forwarder.databinding.FragmentLogsBinding -import com.idormy.sms.forwarder.utils.EVENT_UPDATE_LOGS_TYPE import com.idormy.sms.forwarder.utils.FORWARD_STATUS_MAP import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.XToastUtils -import com.jeremyliao.liveeventbus.LiveEventBus import com.scwang.smartrefresh.layout.api.RefreshLayout import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xpage.annotation.Page @@ -125,7 +123,6 @@ class LogsFragment : BaseFragment(), MsgPagingAdapter.OnIt else -> "sms" } viewModel.setType(currentType) - LiveEventBus.get(EVENT_UPDATE_LOGS_TYPE, String::class.java).post(currentType) adapter.refresh() binding!!.recyclerView.scrollToPosition(0) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesFragment.kt index 1e11bd29..6fd1f161 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesFragment.kt @@ -15,12 +15,10 @@ import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory import com.idormy.sms.forwarder.database.viewmodel.RuleViewModel import com.idormy.sms.forwarder.databinding.FragmentRulesBinding -import com.idormy.sms.forwarder.utils.EVENT_UPDATE_RULE_TYPE import com.idormy.sms.forwarder.utils.KEY_RULE_CLONE import com.idormy.sms.forwarder.utils.KEY_RULE_ID import com.idormy.sms.forwarder.utils.KEY_RULE_TYPE import com.idormy.sms.forwarder.utils.XToastUtils -import com.jeremyliao.liveeventbus.LiveEventBus import com.scwang.smartrefresh.layout.api.RefreshLayout import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xpage.annotation.Page @@ -90,7 +88,6 @@ class RulesFragment : BaseFragment(), RulePagingAdapter.O else -> "sms" } viewModel.setType(currentType) - LiveEventBus.get(EVENT_UPDATE_RULE_TYPE, String::class.java).post(currentType) adapter.refresh() binding!!.recyclerView.scrollToPosition(0) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt index 2f13aff9..80832277 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt @@ -23,6 +23,8 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager +import com.hjq.language.LocaleContract +import com.hjq.language.MultiLanguages import com.hjq.permissions.OnPermissionCallback import com.hjq.permissions.Permission import com.hjq.permissions.XXPermissions @@ -167,6 +169,9 @@ class SettingsFragment : BaseFragment(), View.OnClickL //纯自动任务模式 switchDirectlyToTask(binding!!.sbDirectlyToTask) + //多语言设置 + switchLanguage(binding!!.rgMainLanguages) + } override fun onResume() { @@ -982,6 +987,58 @@ class SettingsFragment : BaseFragment(), View.OnClickL } } + //多语言设置 + private fun switchLanguage(rgMainLanguages: RadioGroup) { + rgMainLanguages.check( + if (MultiLanguages.isSystemLanguage(requireContext())) { + R.id.rb_main_language_auto + } else { + when (MultiLanguages.getAppLanguage(requireContext())) { + LocaleContract.getSimplifiedChineseLocale() -> R.id.rb_main_language_cn + LocaleContract.getTraditionalChineseLocale() -> R.id.rb_main_language_tw + LocaleContract.getEnglishLocale() -> R.id.rb_main_language_en + else -> R.id.rb_main_language_auto + } + } + ) + + rgMainLanguages.setOnCheckedChangeListener { _, checkedId -> + // 是否需要重启 + val restart = when (checkedId) { + R.id.rb_main_language_auto -> { + // 跟随系统 + MultiLanguages.clearAppLanguage(requireContext()) + } + + R.id.rb_main_language_cn -> { + // 简体中文 + MultiLanguages.setAppLanguage(requireContext(), LocaleContract.getSimplifiedChineseLocale()) + } + + R.id.rb_main_language_tw -> { + // 繁体中文 + MultiLanguages.setAppLanguage(requireContext(), LocaleContract.getTraditionalChineseLocale()) + } + + R.id.rb_main_language_en -> { + // 英语 + MultiLanguages.setAppLanguage(requireContext(), LocaleContract.getEnglishLocale()) + } + + else -> false + } + + // 重启应用 + if (restart) { + XToastUtils.toast(R.string.multi_languages_toast) + val intent = requireActivity().baseContext.packageManager.getLaunchIntentForPackage(requireActivity().baseContext.packageName) + intent!!.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) + startActivity(intent) + requireActivity().finish() + } + } + } + //获取当前手机品牌 private fun getAutoStartTips(): String { return when (Build.BRAND.lowercase(Locale.ROOT)) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt index 18ede981..775d72dc 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt @@ -15,11 +15,9 @@ import com.idormy.sms.forwarder.database.entity.Task import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory import com.idormy.sms.forwarder.database.viewmodel.TaskViewModel import com.idormy.sms.forwarder.databinding.FragmentTasksBinding -import com.idormy.sms.forwarder.utils.EVENT_UPDATE_TASK_TYPE import com.idormy.sms.forwarder.utils.KEY_TASK_CLONE import com.idormy.sms.forwarder.utils.KEY_TASK_ID import com.idormy.sms.forwarder.utils.XToastUtils -import com.jeremyliao.liveeventbus.LiveEventBus import com.scwang.smartrefresh.layout.api.RefreshLayout import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xpage.annotation.Page @@ -80,7 +78,6 @@ class TasksFragment : BaseFragment(), TaskPagingAdapter.O else -> "mine" } viewModel.setType(currentType) - LiveEventBus.get(EVENT_UPDATE_TASK_TYPE, String::class.java).post(currentType) adapter.refresh() binding!!.recyclerView.scrollToPosition(0) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt index 4a3e7670..e67e3d0a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt @@ -358,11 +358,6 @@ const val EVENT_TOAST_ERROR = "key_toast_error" const val EVENT_TOAST_INFO = "key_toast_info" const val EVENT_TOAST_WARNING = "key_toast_warning" -//主页监听时间 -const val EVENT_UPDATE_LOGS_TYPE = "key_logs_type" -const val EVENT_UPDATE_RULE_TYPE = "key_rules_type" -const val EVENT_UPDATE_TASK_TYPE = "key_tasks_type" - const val KEY_SENDER_ID = "key_sender_id" const val KEY_SENDER_TYPE = "key_sender_type" const val KEY_SENDER_CLONE = "key_sender_clone" diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 099d9e0a..31de527e 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -1306,6 +1306,7 @@ style="@style/settingBarStyle" android:layout_width="match_parent" android:layout_height="wrap_content" + android:gravity="center_vertical" android:paddingEnd="15dp" tools:ignore="RtlSymmetry"> @@ -1377,6 +1378,7 @@ style="@style/settingBarStyle" android:layout_width="match_parent" android:layout_height="wrap_content" + android:gravity="center_vertical" android:paddingEnd="15dp" tools:ignore="RtlSymmetry"> @@ -1650,6 +1652,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_tasks_edit.xml b/app/src/main/res/layout/fragment_tasks_edit.xml index 6ce03296..09f78ef2 100644 --- a/app/src/main/res/layout/fragment_tasks_edit.xml +++ b/app/src/main/res/layout/fragment_tasks_edit.xml @@ -57,7 +57,7 @@ android:layout_marginStart="5dp" android:layout_marginTop="20dp" android:layout_marginEnd="5dp" - android:gravity="bottom" + android:gravity="center_vertical" android:orientation="horizontal"> + + - 短信 - 通话 - 应用 - 已启用 - 已禁用 - 接收 - 发送 - 未接来电 - 本机去电 - 已接来电 - 网络模式 - 离线模式 - 用户应用 - 系统应用 - 我的任务 - 任务中心 + Sms + Call + App + Enabled + Disabled + Receive + Send + Missed + Call Out + Received + Network + Offline + User App + System App + Mine + Fixed Universal Browser navigation @@ -552,19 +552,19 @@ Logs TODO Forwarding Function - Main switch: Enable the forwarding function as required + Main switch: Enable the function as required Extra Function Enable the extra function as required Call date: Call duration: Ring duration: Type: - Call type: - Incoming Received - Incoming Answered - Incoming Ended - Outgoing Started - Outgoing Ended + Call Type: + In Received + In Answered + In Ended + Out Started + Out Ended Missed Unknown Optional: @@ -693,7 +693,6 @@ Some permissions are successfully obtained, but some permissions are not granted normally, and some functions of the APP may be limited! Permanently denied authorization, go to system settings to manually grant permissions? Failed to obtain necessary permissions, APP function may be limited! - \n    首次使用请按照1234步骤顺序设置,数字点亮表示该步骤已设置(4点亮表示有成功日志)!\n\n    根据以往用户反馈,90%的新用户最终排查结果都是手机权限设置问题,5%的用户是APP保活问题,其他问题排查参考Wiki中的常见问题(APP右上角使用帮助入口)\n\n    强烈建议: 手动排查一下系统设置: 自启动、电源策略、APP的权限,把所有权限打开(始终允许,不要“使用中允许”,MIUI系统就全部变绿),特别是一些国产定制系统加入隐私保护、验证码保护等(例如: MIUI 系统的 空白通行证)\n\n    请选择是否立即“前往系统设置”检查,或“稍后自行处理”? Play Silent Music Play silent music to keep running in the background, which may consume more power, enable it on demand One Pixel @@ -1011,22 +1010,22 @@ E.g: http://127.0.0.1:5000 Features List Directly To Client - When starting the APP, it will directly enter the active control client + When starting, it will directly enter the control client Exit pure client mode Do you want to quit the app immediately and start it manually to take effect in pure client mode? Directly To Task - When starting the APP, it will directly enter the task center + When starting, it will directly enter the task center Exit pure task mode Do you want to quit the app immediately and start it manually to take effect in pure task mode? Optional: Enable Cactus Keep Alive - Dual process foreground service/JobScheduler/WorkManager/1px/silent music + Dual foreground service/JobScheduler/WorkManager/1px/silent music Get installed app info async at startup Used to speed up entering the application list/editing forwarding rules drop-down selection/replacement {{APP_NAME}} A type must be selected when enabling asynchronous loading of the list of installed apps There is no history record, it will be added automatically after the interface test is passed Select Time Period - Disable forwarding period + Disable FW. Period If the end time is less than the start time, it will span days; if it is equal, it will be disabled Do you want to download and restart to load! Download successful, do you want to restart the loading now? @@ -1114,8 +1113,8 @@ Accuracy Fine Coarse - No Requirement - Power Requirement + No Req. + Power Needs Low Medium High @@ -1127,9 +1126,9 @@ Name/Status Task Name Description - If - Influenced by the first condition, the others serve as determinants. - then execute. + IF + Influenced by the first condition, the other condition as determinants. + THEN Allow multiple execution actions, with each execution result being independent of the others. Last Exec Time Next Exec Time @@ -1139,12 +1138,12 @@ Delete confirmation Are you sure to delete this task? The task has deleted. - 添加条件 - 例如:如果电量低于20%时 - 继续添加条件 - 添加动作 - 例如:禁用所有转发通道 - 继续添加动作 + Add Condition + Example: Below 20% battery + Continue to add condition + Add Action + Example: Disable all forwarding + Continue to add Action Please select trigger condition Please select additional condition @@ -1278,4 +1277,16 @@ Specified Uid Enter FRPC config UIDs, separate with commas. + + English + Current Activity language: + Current Application language: + Current System language: + Multilingual + Default language shown on SmsF\'s interface at startup. + Need to restart the app to switch to your selected language. + Follow Sys. + 简体中文 + 繁體中文 + English diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-zh-rCN-v21/styles.xml similarity index 100% rename from app/src/main/res/values-v21/styles.xml rename to app/src/main/res/values-zh-rCN-v21/styles.xml diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 00000000..9743d536 --- /dev/null +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,1293 @@ + + + 短信 + 通话 + 应用 + 已启用 + 已禁用 + 接收 + 发送 + 未接来电 + 本机去电 + 已接来电 + 网络模式 + 离线模式 + 用户应用 + 系统应用 + 我的任务 + 任务中心 + + 通用浏览器 + 导航条 + guide_key_sliding_root_navigation + 打开导航抽屉 + 关闭导航抽屉 + + 转发日志 + 发送通道 + 转发规则 + 通用设置 + + 通用设置·第一步 + 发送通道·第二步 + 转发规则·第三步 + 转发日志·第四步 + + 自动任务·快捷指令 + 主动控制·服务端 + 主动控制·客户端 + 内网穿透·Frpc + 应用列表·复制包名 + 日志抓取·Logcat + 使用帮助 + 关于软件 + + 软件版本:%s + 缓存大小:%s + Frpc版本:%s + 微信小程序 + 已清理缓存 + 已删除动态库,重启APP以便生效! + © %1$s PPPSCN All rights reserved. + 开源仓库 + GitHub + Gitee + 打赏名单 + 钉钉客户群 + Telegram群组 + QQ频道 + https://github.com/pppscn/SmsForwarder + https://gitee.com/pp/SmsForwarder + https://gitee.com/pp/SmsForwarder/wikis/pages + https://gitee.com/pp/SmsForwarder.wiki/raw/master/%E6%89%93%E8%B5%8F%E5%90%8D%E5%8D%95.md + https://gitee.com/pp/SmsForwarder/raw/main/pic/dingtalk.png + https://gitee.com/pp/SmsForwarder/raw/main/pic/tg.png + https://qun.qq.com/qqweb/qunpro/share?_wv=3&_wwv=128&appChannel=share&inviteCode=1W5aewP&appChannel=share&businessType=9&from=246610&biz=ka + https://gitee.com/pp/SmsForwarder/raw/main/pic/wechat_miniprogram.jpg + + + + 是否允许页面打开"QQ"? + 是否允许页面打开第三方应用? + + + 退出应用 + 同意 + 不同意 + 再次查看 + 仍不同意 + 温馨提示 + 要不要再想想 + 我们非常重视对你个人信息的保护,承诺严格按照《%s隐私权政策》保护及处理你的信息。\n\n如果你不同意该政策,很遗憾我们将无法为你提供服务! + 《%s隐私权政策》 + + + 登录/注册 + 获取验证码 + 登录 + 验证码登录 + 注册 + 忘记密码? + 验证码登录 + 密码登录 + 请输入手机号码 + 手机号码 + 密码 + 旧密码 + 请输入验证码 + 验证码 + 密码必须是8~18位字母和数字的组合! + 新密码必须是8~18位字母和数字的组合! + 无效的手机号! + ^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(16[6])|(17[0,1,3,5-8])|(18[0-9])|(19[8,9]))\\d{8}$ + 请输入4位数验证码 + ^\\d{4}$ + ^(?:(?=.*[a-zA-Z])(?=.*[0-9])).{8,18}$ + 重置密码 + 点击注册即表示同意 + ]]> + 是否确认退出账号? + 用户协议 + 隐私政策 + 我已阅读并同意 + + + 跳过 + 上一条 + 下一条 + 以后不再提示此类信息 + 你知道吗? + 隐私政策 + 刷新网页 + 复制链接 + 网页分享 + 在浏览器打开 + 技术由 AgentWeb 提供 + Logo + + + 添加 + 新建配置文本 + 从网址导入 + 从文件导入 + 扫描二维码 + + 保存配置 + 返回编辑 + 放弃修改 + 测试规则 + 模板 + 保存Frpc配置 + 请输入配置内容 + 请输入配置名称 + 确定 + 保存成功 + 还原成功 + 已删除 + 删除失败 + 修改文件名称 + 未开启 + 已开启 + 未选择配置文件 + 请先关闭服务 + 关于 + Logcat + 未命名 + 复制 + 删除 + 复制成功 + 模板文件 + 提示 + 确定删除该条配置? + Frpc内网穿透服务运行中 + 正在启动服务 + + 短信转发器 + 不仅只转发短信,备用机必备神器!\n免费开源,禁止贩卖! + + 确定 + 取消 + 丢弃 + 退出 + 删除 + 保存 + 提交 + 发送 + 测试 + 确认 + 全部 + 选择 + 一键克隆 + 通用设置 + 关于软件 + 使用帮助 + 清空日志 + 清空记录 + 通知转发规则 + 通话转发规则 + 短信转发规则 + 添加转发规则 + 编辑转发规则 + 克隆转发规则 + 添加发送通道 + 编辑发送通道 + 克隆发送通道 + 还原配置 + + 当前版本 + 检查新版本 + 开机启动 + 帮助提示 + 建议老鸟关闭提示,页面更清爽,减少弹窗提示 + 开源仓库 + 同步镜像 + 互帮互助QQ群 + ①群:562854376 + ②群:31330492 + 加入①群 + 加入②群 + 缓存大小 + 清除缓存 + 检查中… + 已是最新版本! + 缓存清理完成 + 未安装手Q或安装的版本不支持! + + 日志删除确认 + 确定删除该条日志记录? + 该条日志记录已经删除! + 确定删除该分类的所有日志记录? + 该分类日志记录已经清空! + 正在尝试通过原发送通道重发 + 正在重新匹配规则发送 + 详情 + 确定要清空所有转发记录吗? + 下拉可以刷新! + 松开可以刷新! + 正在刷新… + + 设置短信转发规则 + 设置来电转发规则 + 设置APP通知转发规则 + 转发规则操作确认 + 删除转发规则后会级联删除其相关的转发日志的所有记录!\n\n确定删除该条规则? + 该条规则已经删除! + 请选择发送通道(若无,请先添加) + 请先去设置发送通道页面添加 + 发送通道 + 转发规则测试 + 测试模拟的接收卡槽 + 测试模拟的来源号码 + 测试模拟的短信内容 + 测试模拟的APP包名 + 测试模拟的通话类型 + 测试模拟的通知标题 + 测试模拟的通知内容 + 执行逻辑 + 全部执行 + 失败即止 + 成功即止 + 匹配卡槽 + 匹配字段 + 手机号 + 通话类型 + APP包名 + 短信内容 + 通知内容 + 多重匹配 + 匹配模式 + + 包含 + 不包含 + 开头 + 结尾 + 正则匹配 + 匹配的值 + 如需匹配多个关键词,请用 正则匹配 或 多重匹配 + 启用该条转发规则 + 该条转发规则已禁用 + 匹配的值不可为空 + 通话类型不正确,只能填写1到6的任意一个数字 + + 异常的发送通道类型,自动删除! + 发送通道操作确认 + 删除发送通道后会级联删除其相关的转发规则、转发日志的所有记录!\n\n确定删除该条发送通道? + 该条发送通道已经删除! + 选择发送通道类型 + 暂不支持这种转发 + 设置钉钉群机器人 + 设置邮箱 + 设置Webhook + 设置企业微信群机器人 + 设置企业微信应用 + 设置Bark + 设置Server酱·Turbo版 + 设置Telegram机器人 + 设置SMS + 设置飞书群机器人 + 设置PushPlus + 设置Gotify + 19999999999 + 测试分组 + 发送失败: + 通道名称不能为空 + token不合法 + 发件邮箱/登录密码/收件地址不可为空 + 服务器信息的主机/端口不可为空 + 消息图标不是有效URL + 消息链接不是有效URL + bark-server为空 或 不是有效URL + 机器人的ApiToken 和 被通知人的ChatId 都不能为空 + 已开启代理,主机名和端口号都不能为空 + 已开启身份验证,用户和密码不能同时为空 + Server酱·Turbo版的 SendKey 不能为空 + 最多两个通道,多个通道值用竖线|隔开 + 多个 openid 用 , 隔开 + 自定义API地址 不是有效URL + WebServer为空 或 不是有效URL + WebHook为空 或 不是有效URL + URL Scheme 为空 或 无效 + 指定成员/指定部门/指定标签 不能为空 或者 选择@all + 企业ID、AgentID、Secret都不能为空 + AgentId、AppKey、AppSecret、UserIds都不能为空 + 接收手机号不能为空 + 多重匹配规则的第 %s 行格式有误 + 正则替换内容的第 %s 行格式有误 + 分组名称/状态 + 名称/状态 + 主机 + 端口 + 开启SSL + 开启StartTLS + 发件邮箱 + 登录密码 + 发件人昵称 + 收件地址 + Tip:多个收件人以半角逗号,分隔 + 邮件主题 + Webhook 地址 + 加签 Secret (没有可不填) + 消息类型 + 纯文本 + 消息卡片 + 标题模板 + 自定义API + 企业ID + AgentId + Secret + 是否@所有人 + 指定成员 + \@all + Tip:接收消息的成员ID列表(多个接收者用‘|’分隔,最多支持1000个) + 指定成员 + 指定部门 + 指定标签 + Tip:接收消息的成员ID列表(多个接收者用‘|’分隔,最多支持1000个) + Tip:接收消息的部门ID列表(多个接收者用‘|’分隔,最多支持1000个) + Tip:接收消息的标签ID列表(多个接收者用‘|’分隔,最多支持1000个) + Tip:通过反向代理(proxy_pass)绕过IP白名单限制 + Tip:接收用户的userid,每次最多传20个(用‘|’分隔) + SendKey + 消息通道 + 提示:动态指定,支持最多两个通道,用竖线|隔开 + 选填,例如发送服务号和企业微信应用,则填 9|66 + 抄送OpenID + 提示:只支持测试号和企业微信应用消息通道 + 选填,多个openid用半角逗号,隔开 + ApiToken 或 自定义代理地址(http开头) + 被通知人(或群组)的ChatId + 请求方式 + + 发送卡槽 + 原进原出 + 接收手机 + Tips:\n1.多个号码以半角分号分隔,例如:15888888888;19999999999\n2.允许插入`{{来源号码}}`标签来实现短信自动回复(短信/来电场景) + 仅当无网络时启用 + + 通知文案 + 通知栏文案 + 设备名称 + 卡槽主键 + SIM1主键/备注 + SIM2主键/备注 + 序号/运营商_手机号 + 数字必须大于0! + ^[1-9]?\\d+$ + 请求重试机制 + 次数=0禁用,逐次递增 + 自动过滤多久内重复消息 + 0=禁用,判断重复:类型+来源+内容 + 转发短信广播 + 请授予读取短信、通知类短信、发送短信等权限,关闭验证码保护 + 短信指令 + 根据短信指令开关对应功能,指令格式:smsf#功能名#动作名 + 安全手机 + 仅处理指定手机请求,多个手机以逗号分隔 + 转发通话记录 + 请授予读取通话记录、联系人等权限,并选择转发类型,再开启 + 转发应用通知 + 请授予通知使用权再开启;开启“自动消除”可避免多条通知堆叠 + 自动消除通知 + 仅锁屏状态 + 启用自定义模版 + 优先级:转发规则的自定义模板 > 全局自定义模版 > 默认 + 启用正则替换内容 + 格式:正则表达式===替换结果,每行一个规则.\n例如:(\\d{3})\\d{4}(\\d{4})===$1****$2 + 在最近任务列表中隐藏 + 请先锁定后再开启隐藏,有效避免手动误杀进程 + 转发信息模版 + Tip:按需插入内容标签;留空使用默认模版 + 来源号码 + APP包名 + UID + 短信内容 + 通知标题 + 通知内容 + 卡槽信息 + 接收时间 + 设备名称 + 恢复初始配置 + 确定需要恢复初始配置吗?\n\n【警告】此操作将重置设置、删除发送通道、规则、日志! + 忽略电池优化设置 + 请设置为手动管理:允许自启动、允许关联启动、允许后台运行 + 未知号码 + 您的手机不支持此设置 + 已将省电优化设置为无限制(不优化)! + 本界面无法直接操作系统的省电优化设置 + 间隔时间最短为1秒 + 超时时间最短为1秒 + + v1.0 + https://github.com/pppscn/SmsForwarder + https://gitee.com/pp/SmsForwarder + 0KB + SIM1 + SIM2 + 多重匹配规则示例:(语法参见wiki)\n\n并且 是 手机号 相等 10086\n[空格]或者 是 手机号 相等 10011\n并且 是 短信内容 包含 欠费\n\n以上规则表示:收到短信,并且(手机号是10086 或者 手机号是10010),并且 短信内容 包含 欠费 时转发短信\n\n注意:每行开始的空格代表层级,太过复杂的多重规则可能导致内存占用很大! + 多重匹配规则示例:(语法参见wiki)\n\n并且 是 手机号 相等 10086\n[空格]或者 是 手机号 相等 10011\n并且 是 通话类型 相等 3\n\n以上规则表示:收到来电,并且(手机号是10086 或者 手机号是10010),并且 通话类型 是 未接来电 时转发提醒\n\n注意:每行开始的空格代表层级,太过复杂的多重规则可能导致内存占用很大!\n\n通话类型:1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 + 填写数字:1到6的任意一个\n\n通话类型:1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 + 多重匹配规则示例:(语法参见wiki)\n\n并且 是 APP包名 相等 com.tencent.mm\n[空格]或者 是 APP包名 相等 com.tencent.mobileqq\n并且 是 通知内容 包含 欠费\n\n以上规则表示:收到APP通知,并且(APP包名是com.tencent.mm 或者 APP包名是com.tencent.mobileqq),并且 通知内容 包含 欠费 时转发通知\n\n注意:每行开始的空格代表层级,太过复杂的多重规则可能导致内存占用很大! + POST + GET + PUT + PATCH + UDP + TCP + MQTT + SSL + + 本机IP: + 严正声明:\n该功能仅限个人新旧手机切换使用,用于非法用途后果自负!\n\n操作说明:\n1.新旧手机连接同一个WiFi网络(禁用AP隔离),如需穿透内网请先配置Frpc\n2.【二选一】旧手机点【推送】按钮,将本机的配置推送到服务端\n3.【二选一】新手机点【拉取】按钮,将拉取服务端的配置到本机\n\n注意事项:\n1.客户端与服务端的APP版本必须一致,才能克隆!\n2.导入成功后,发送通道、转发规则将完全被覆盖,清空历史记录!\n3.主动请求、保活措施、个性设置不在克隆范围 + 严正声明:\n该功能仅限个人新旧手机切换使用,用于非法用途后果自负!\n\n注意事项:\n1.导出方与导入方的APP版本必须一致,才能一键克隆!\n2.新手机导入成功后,发送通道、转发规则将完全被覆盖,清空历史记录!\n3.主动请求、保活措施、个性设置不在克隆范围 + 推送 + 拉取 + 停止 + 导出 + 导入 + 我是旧手机 + 我是新手机 + 服务端IP: + 主机: + 端口: + . + 请输入合法的IP或域名 + 请输入合法的输入/输出信息主题 + 请输入合法的端口号 + 服务端已启动 + 服务端已停止 + 本手机是发送端,不可接收文件,请先停止服务端! + 未接入Wifi网络,不可使用 HttpServer 功能! + 请输入服务端IP + 当前处于无线网络 + 当前处于移动网络 + 没有网络 + 未连接Wifi + 获取IP失败 + 短 信 + 来 电 + 应 用 + 应用图标 + 用户应用 + 系统应用 + 请将省电优化设置为无限制(不优化),有利于《短信转发器》保活! + 请先授予发送通知权限,有利于《短信转发器》保活! + 请先授予《短信转发器》通知使用权,否则无法转发APP通知,已经自动关闭转发! + 通知服务已开启 + 通知服务未开启 + 官网地址 + www.pushplus.plus + pushplus.hxtrip.com + 用户令牌 + 注意:请认真甄别您当前访问的官网地址 + 群组编码 + 发送模板 + html + 发送渠道 + webhook + 回调地址 + 有效时间(秒) + wechat + ✱帐户管理 + ✱服务器信息 + ✱邮件设置 + 低于 + % + 高于 + 0 + 首次发送时间: + 间隔(分钟): + 代理设置 + 无代理 + HTTP + SOCKS + 主机名 + 端口号 + 代理身份验证 + 用户 + 密码 + 输入编码 + 输出编码 + 输入消息主题 + 接收对应主题的消息 + 输出消息主题 + 发送对应主题的消息 + 通信方式 + 可选,默认为tcp + 通信路径 + 用于在使用ws进行通信时设置uri + 客户端ID + 如果为空则为随机值 + 隐私政策 + 同意 + 拒绝 +     SmsForwarder-短信转发器(下称本软件) 100% 免费开源,Github 在线编译发版,绝不会收集您的任何隐私数据! \n\n以下情形会上报本软件的版本信息: \n    1、启动本软件时,发送版本信息发送到《友盟+·U-App移动统计》,用于分析本软件的用户版本留存与软件奔溃统计; \n    2、手动检查更新时,发送版本号用于检查新版本; \n    除此之外,没有任何数据!!! \n\n    本软件会遵循《隐私政策》收集、使用版本信息,但不会因为您同意了《隐私政策》而进行强制捆绑式的信息收集。 + WebServer + ]]> + 标题模板 + 优先级(1 – 9) + 5 + 启用该条转发规则 + 钉钉群机器人 + 钉钉企业机器人 + 电子邮箱 + Bark + Webhook + 企微群机器人 + 企微应用消息 + Server酱·Turbo版 + Telegram机器人 + 手机短信 + 飞书群机器人 + 飞书企业应用 + PushPlus + Gotify + 0 + 1 + 2 + 3 + 4 + 10 + 通用设置 + 发送通道 + 转发规则 + 转发日志 + TODO + 转发功能 + 总开关,请根据实际需要,启用对应的转发功能 + 增强功能 + 请根据实际需要,启用对应的增强设置 + 通话时间: + 通话时长: + 响铃时长: + 类型: + 通话类型: + 来电提醒 + 来电接通 + 来电挂机 + 去电拨出 + 去电挂机 + 未接来电 + 未知通话 + 可选操作: + 可选类型: + 主动请求 + 通过 被动接收 或者 主动轮询 获取指令,从而操作本机 + 被动接收本地 HttpServer + WiFi网络下可用,启动后局域网内其他机器可直接调用本机接口 + SIM卡槽状态监控 + 网络状态监控 + 网络状态改变提醒 + 保活措施 + 开启前三项授权或设置,不禁用通知栏,避免APP被杀 + 个性设置 + 请手动填写备注 或 点击刷新按钮自动获取 + + 间隔 + 递增间隔 + 超时 + 单次超时 + + %s 秒 + 重试 + 最多重试 + 【%s】恭喜您,该发送通道测试成功,请继续添加转发规则! + 测试通道 + SIM1_测试运营商_18888888888 + 持续提醒 + 超过预设值之后,每次电量变化继续触发 + 重发消息 + 重新匹配规则 + 来源: + 标题: + Scheme: + 消息: + 卡槽: + 规则: + 时间: + 转发结果: + 成功 + 失败 + 处理中 + {{来源号码}} + {{短信内容}} + {{APP包名}} + {{APP名称}} + {{通知内容}} + {{卡槽信息}} + {{卡槽主键}} + {{接收时间}} + {{当前时间}} + {{设备名称}} + {{当前应用版本号}} + {{通知标题}} + {{通知Scheme}} + {{通话类型}} + {{定位信息}} + {{电池电量}} + {{电池状态}} + {{充电方式}} + {{电池信息}} + {{UID}} + 短信 + 来电 + 应用 + 全部 + 全部转发 + 手机号 + 内容 + 多重匹配 + APP包名 + 通知内容 + 通话类型 + UID + + + 转发到 + 全部转发到 + + 不是 + 包含 + 开头是 + 结尾是 + 不包含 + 正则匹配 + 已复制包名: + 正在加载用户应用,请稍候… + 正在加载系统应用,请稍候… + 很抱歉!程序出现异常,即将退出… + 必须选择一个通话类型,才能开启通话记录转发! + 通知服务已开启 + 【注意】电量预警阈值上下限都是0,持续提醒不起作用 + 兼容方案 + 点击启动后请等待3秒 + 一键克隆操作完成!\n请检查·通用设置·各项开关是否已开启! + 一键克隆失败: + APP版本不一致,无法一键克隆! + 获取一键克隆信息失败 + 通讯录名: + 被呼号码: + 授权提醒 + 授权失败,请正确授予权限 + 获取权限失败,请手动授予权限 + 获取权限失败,请手动授予%s + 没有授予后台定位权限,请您选择"始终允许" + 前往授权 + 日历权限 + 相机权限 + 通讯录权限 + 定位权限 + 后台定位权限 + 附近的设备权限 + 麦克风权限 + 电话权限 + 通话记录权限 + 身体传感器权限 + 健身运动权限 + 短信权限 + 存储权限 + 安装应用权限 + 悬浮窗权限 + 系统设置权限 + 通知栏权限 + 查看使用情况权限 + 获取所有必需的权限成功! + 获取部分权限成功,但部分权限未正常授予,APP部分功能可能受限! + 被永久拒绝授权,前往系统设置手动授予权限? + 获取必需的权限失败,APP功能可能受限! + 后台播放无声音乐 + 【按需启用】播放无声音乐让后台一直运行,可能比较耗电 + 1像素 + 1像素透明Activity + 【按需启用】使进程的优先级在屏幕锁屏时间由4提升为最高优先级1 + 可选 + 请按照wiki中的步骤获取 + 网络模式 + 离线模式 + 备份文件存放路径: + 配置名称 + 开机自启 + + Home + Settings + Logging + About + + HttpServer + 启动服务 + 停止服务 + Server is shutting down. Please wait. + Server failed to start! + Server can not run on this port! (Bind-Exception) + Sim-Card is missing or not ready to send sms! + SMS-Permission is required to run the server! + + Yes + No + --- + 刷新 + 无法获取卡槽信息,请确认应用权限【获取手机信息】为【始终允许】 + 未获取到卡槽%s中的SIM卡信息 + 添加 + 启动时检查 + 检查更新 + 清理缓存 + 删除动态库 + + 通道名称/状态 + 发送通道/状态 + + Webhook + 例:https://oapi.dingtalk.com/robot/send?access_token=XXX + 机器人设置→webhook + 加签 Secret + 机器人设置→安全设置→加签 + 被@人的手机号 + Tips:多个手机号用逗号分开,例如:18888888888,19999999999 + 被@人的钉钉号 + Tips:多个钉钉号用逗号分开,例如:user1,user2 + + Bark-Server + 例:https://api.day.app/XXXXXXXX/ + ^https?://[^/]+/[^/]+/$ + Url格式错误,例:https://api.day.app/XXXXXXXX/ + 分组名称 + 可选,例:短信转发器 + 消息图标 + 可选,填写Url,图片不要太大 + 消息声音 + 可选,例:minuet.caf + 消息角标 + 可选,例:888 + 消息链接 + 可选,例:https://github.com/pppscn/SmsForwarder + 通知级别 + 立即亮屏显示通知 + 时效性通知,可在专注状态下显示通知 + 仅添加到通知列表,不会亮屏提醒 + + + Url格式错误 + 加密算法 + 不加密 + 加密密钥 + 对应bark上的key + 偏移向量 + 对应bark上的iv + + 加密密钥必须是16位 + 加密密钥必须是24位 + 加密密钥必须是32位 + 偏移向量必须是16位 + + 填写 @ 前面的用户名 + 填写格式: AAA@BBB.CCC + 其他邮箱 + 其他邮箱,请填写完整的邮箱地址并手动填写SMTP服务器信息 + 填写登录密码 或 授权码 + + WebHook地址 + 示例:https://qyapi.weixin.qq.com/cgixx?key=xxx + 消息类型 + 纯文本 + markdown + 被@人的手机号 + Tips:多个手机号用逗号分开,例如:18888888888,19999999999 + 被@人的userid + Tips:多个userid用逗号分开,例如:user1,user2 + + URL Scheme + 示例:myapp://api/add?&type=0&msg=[msg] + + Socket + 示例:myapp://api/add?&type=0&msg=[msg] + 服务地址 + IP 或 域名 + 端口 + 取值范围:1-65535 + + Webhook Server + 例如:https://a.b.com/msg?token=xyz + 消息模板 + Params + 例如:payload=%7B%22text%22%3A%22[msg]%22%7D [msg]将被替换成短信内容。\n支持Json格式,例如:{\"text\":\"[msg]\"}。\n注意:除JSON格式外,msg会自动进行URLEncoder + Secret:置空则不计算sign + 成功应答关键字:置空则http状态200即为成功 + 成功应答关键字:置空则发出即成功 + Headers + Key + Value + 添加Header + 删除Header + 请选择发送通道类型 + 群机器人→Webhook 地址 + 群机器人→安全设置→签名校验 + 请前往对应的官网地址获取 + 下拉选择,关键字模糊匹配 + 已装APP列表 + 额外消除应用通知 + 一行一个包名\n开启异步加载App列表以便选择 + 下拉选择获取包名,关键字模糊匹配APP名称 + ^\\s*(并且|或者)\\s(是|不是)\\s(手机号|APP包名|短信内容|通知内容|通知标题|卡槽信息|通话类型)\\s(相等|包含|不包含|开头|结尾|正则匹配)\\s(.*)$ + 欢迎使用 + 我们深知个人信息对你的重要性,也感谢你对我们的信任。\n + 为了更好地保护你的权益,同时遵守相关监管的要求,我们将通过 + 向你说明我们会如何收集、存储、保护、使用及对外提供你的信息,并说明你享有的权利。\n + 更多详情,敬请查阅 + 全文。\n\n + 请先授予发送通知权限,有利于《短信转发器》保活! + 其他登录方式 + 请求成功 + 请求失败: + 请求失败:%s + 没有短信发送权限 + 缺少 FrpcLib v%s 动态库 + 正在下载中,请稍后…… + FrpcLib 版本不匹配 + 页面未找到! + 数据出错! + Can\'t open with browser + 分享到 + 您所打开的第三方App未安装! + 描述信息 + 登录成功! + 登录失败! + 登出成功! + 您已经安装的是最新版本! + 应用下载失败,是否考虑切换到 %s 下载? + 应用下载失败,是否考虑切换到 %s 下载? + 已取消更新 + 并且 + 或者 + 手机号 + 短信内容 + APP包名 + UID + 通知标题 + 通知内容 + 卡槽信息 + 通话类型 + + 不是 + 相等 + 包含 + 不包含 + 开头 + 结尾 + 正则匹配 + 未知手机品牌:需要自主查看设置操作 + 关闭应用开关 -> 打开允许自启动]]> + 关闭应用开关 -> 打开允许自启动]]> + 自启动管理 -> 允许应用自启动]]> + 自启动管理 -> 允许应用自启动]]> + 自启动 -> 允许应用自启动]]> + 后台管理 -> 点击应用 -> 允许后台运行]]> + 打开应用开关 -> 电池管理 -> 未监视的应用程序 -> 添加应用]]> + 允许应用自启动]]> + 自启动权限管理 -> 点击应用 -> 允许被系统启动]]> + 需要手动重新启动APP,才能生效该配置项 + 时间选择 + + HttpServer运行中,监听:%1$s:%2$d + HttpServer已停止 + 服务端设置 + 建议启用签名设置、点击“随机”自动生成并复制到剪贴板 + 复制 + 随机生成 + 签名密钥 + 已生成公私钥对,并复制公钥到剪贴板 + 已复制公钥到剪贴板 + 已生成密钥,并复制到剪贴板 + 启用功能 + 按需选择您要启用远程控制的功能 + 一键换新机 + 一键克隆本机的通用配置、发送通道、转发规则到新机器 + 远程发短信 + 非免费短信,短信资费以您的手机套餐为准 + 远程查短信 + 远程查短信记录,作为短信转发功能的补充 + 远程查通话 + 远程查通话记录,包括来电、去电、未接电话 + 远程查话簿 + 远程查联系人列表 + 远程加话簿 + 远程添加联系人 + 远程查电量 + 远程查询手机电量与电池状态 + 远程WOL + 远程打开启用LAN唤醒功能(Wake-On-LAN)的设备 + 远程找手机 + 远程查询手机定位,方便找回手机/防止老少走丢 + 请先在【通用设置】中【启用GPS定位功能】 + 经度:%s + 维度:%s + 地址:%s + 时间:%s + 供应商:%s + + 发送卡槽 + 姓名 + 选填,通讯录显示名称 + 手机号码 + 必填,多个手机号用半角分号分隔 + 手机号码格式错误,例:15888888888;19999999999 + ^([+]?\\d+)(;[+]?\\d+)*$ + 短信内容 + 必填,70个字符内算一条,超过70个字符,每增加64字符累加1条 + 短信内容不能为空,最多390字符(6条短信) + ^.{1,390}$ + + 未知 + AC + USB + 无线 + 充电中 + 放电中 + 未充电 + 充满电 + 良好 + 过热 + 没电 + 过电压 + 未知错误 + 温度过低 + 剩余电量:%s + 剩余电量 + 充满电量:%s + 当前电压:%s + 当前温度:%s + 电池状态:%s + 电池状态 + 健康度:%s + 充电器:%s + 充电器 + + 历史记录 + 登录服务 + 无效的服务地址!\n格式:http://127.0.0.1:5000 或 https://smsf.demo.com + 请先点击【登录服务】按钮,获取服务端已启用的功能列表 + 服务端禁用此功能 + Frpc运行失败 + 删除成功 + 【注意】该发送通道已经禁用,其关联的规则即便匹配上也不会发送! + 【注意】该发送通道已经在列表中,无需重复添加! + 本地呼叫: + 远程发短信: + 清除 + 未授权储存权限,该功能无法使用! + 姓名:%s\n号码:%s + 卡槽未匹配中规则 + 未匹配中规则 + 已复制到剪贴板:\n%s + 搜索关键字: %s + 导出配置成功! + 导出失败,请检查写入权限! + 导出失败: %s + 导入失败:请检查是否有外部存储访问权限! + 导入失败:本地备份文件不存在! + 导入配置成功!\n需要重启APP以便生效!\n重启后请再次核对所有配置项! + 导入失败: %s + 还原失败 + 电池状态监听 + 【电量预警】已低于电量预警下限,请及时充电!%s + 【电量预警】已高于电量预警上限,请拔掉充电器!%s + 【电量预警】已达到电量预警下限,请及时充电!%s + 【电量预警】已达到电量预警上限,请拔掉充电器!%s + 【充电状态】发生变化: + 第一行不允许缩进 + 服务端启用签名密钥,sign节点必传 + 服务端启用签名密钥,timestamp节点必传 + 签名校验失败 + version_code节点必传 + 客户端与服务端的App版本不一致 + timestamp校验失败,与服务器时间(%s)误差不能超过%s秒(diffTime=%s) + + 主标题 + 副标题 + 输入关键字模糊匹配短信内容 + 纯数字匹配号码/非数字匹配姓名 + 输入关键字模糊匹配手机号码 + 按照主动控制·服务端的配置填写以下项目 + 服务地址 + 例如:http://127.0.0.1:5000 + 功能列表 + 纯客户端模式 + 启动APP时直接进入主动控制·客户端 + 退出纯客户端模式 + 是否立即退出App,并手动启动以生效纯客户端模式? + 纯自动任务模式 + 启动APP时直接进入自动任务 + 退出纯自动任务模式 + 是否立即退出App,并手动启动以生效纯自动任务模式? + 可选组件: + 启用 Cactus 增强保活措施(会增加耗电) + 双进程前台服务/JobScheduler/WorkManager/1像素/无声音乐 + 启动时异步获取已安装App列表 + 用于加速进入应用列表/编辑转发规则下拉选择/替换{{APP名称}} + 开启异步获取已安装App列表时必选一个类型 + 暂无历史记录,接口测试通过后自动加入 + 时间段选择 + 免打扰(禁用转发)时间段 + 结束时间小于开始时间则跨天;相等则禁用 + 是否立即下载,并重启加载? + 下载成功,是否立即重启加载? + AppKey + AppSecret + 文本类型 + Markdown类型 + 可选,内网广播地址,例如:192.168.1.255 + IP地址格式错误,例如:192.168.168.168 + ^((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])$ + 必填,网卡mac,例如:AA:BB:CC:DD:EE:FF + 网卡mac格式错误,例如:AA:BB:CC:DD:EE:FF + ^((([a-fA-F0-9]{2}:){5})|(([a-fA-F0-9]{2}-){5}))[a-fA-F0-9]{2}$ + 内网广播地址 + IP + 网卡MAC + 暂无历史记录,WOL发送成功后自动加入 + 可选,WOL一般透过端口7或端口9进行发送 + 端口号取值范围:1~65535 + ^([0-9]|[1-9]\\d|[1-9]\\d{2}|[1-9]\\d{3}|[1-5]\\d{4}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5])$ + 选择目录 + Web客户端 + 正在重启HttpServer + 请先下载Web客户端并解压到:\n%s + 根目录:\n%s + 选择Web客户端目录 + AppId/AppSecret/UserId都不能为空 + App ID + App Secret + User ID + 自动删除N天前的转发记录 + 0=禁用,触发机制:每次电量变化时扫描 + 安全措施 + 客户端与服务端必须一致,强烈建议公网访问时启用加密 + 不需要 + 校验签名 + RSA加密 + SM4加密 + 参见 Github Wiki,下载到 Download 目录 + 客户端与服务端时间容差 + 尽量缩短时间容差,避免请求重放攻击 + RSA私钥 + RSA私钥用在服务端:服务端应答报文私钥加密,客户端公钥解密 + 生成密钥 + RSA公钥 + RSA公钥用在客户端:客户端请求报文公钥加密,服务端私钥解密 + 复制公钥 + SM4密钥 + 客户端/服务端交互采用SM4加解密 + + 删除发送通道 + 发送通道已禁用 + 未知发送通道 + 网络类型 + 运营商 + 本地IP + 努力加载应用列表中,请稍候… + + 运营商名 + ICC ID + 卡槽索引 + 数据卡槽 + 手机号码 + 国家代码 + 订阅标识 + + 没有网络 + 2G网络 + 3G网络 + 4G网络 + 5G网络 + 移动网络 + WiFi + 有线网络 + 未知网络 + 网络状态:%s + WiFi名称 + 留空则不判断连接的WiFi-SSID + IPv4 + IPv6 + + 启用GPS定位功能 + 必须开启定位服务,才能使用获取!\n是否立即启用? + 以便支持 查找手机、{{定位信息}}标签 等需要GPS的功能 + 位置精度 + 精确位置 + 模糊位置 + 不要求 + 电量消耗 + + + + 位置更新:最小时间间隔 + 最小距离间隔 + + UID + + 任务名称/状态 + 任务名称 + 任务描述 + 如果 + 由第一个条件触发,其他条件作为判断 + 就执行 + 允许添加多个执行动作,执行结果互不干扰 + 上次执行时间 + 下次执行时间 + 新建任务 + 编辑任务 + 克隆任务 + 删除任务操作确认 + 删除任务操作确认 + 删除任务操作确认 + 添加条件 + 例如:如果电量低于20%时 + 继续添加条件 + 添加动作 + 例如:禁用所有转发通道 + 继续添加动作 + + 请选择触发条件 + 请选择附加条件 + 请选择动作 + 关 闭 + 定时任务 + 采用 Quartz Cron 表达式 + 到达地点 + 采用经纬度坐标(WGS-84坐标系) + 离开地点 + 经纬度采用WGS-84坐标系 + 网络状态 + 当网络状态改变时触发 + SIM卡状态 + 当SIM卡状态改变时触发 + 电量使用 + 当剩余电量满足条件时触发 + 充电状态 + 当充电状态满足条件时触发 + 锁屏解锁 + 在屏幕锁定或解锁后立即或指定时间触发 + 发送短信 + 通道推送 + Frpc设置 + 控制内网穿透·FRPC的启动/停止 + HttpServer设置 + + + + + + + + + Cron表达式 + 每秒钟 + 每分钟 + 每小时 + 每日 + 每月 + 每周 + 每年 + 周期 + + 从星期 + + 起始 + 结束 + + 秒开始,每 + 秒钟执行一次 + + 分开始,每隔 + 分钟执行一次 + + 时开始,每隔 + 小时执行一次 + + 日开始,每隔 + 天执行一次 + + 月开始,每隔 + 月执行一次 + + 年开始,每隔 + 年执行一次 + 指定 + 不指定 + 最近工作日 + 每月 + 号最近的那个工作日 + 本月最后一天 + 本月最后一个工作日 + + 周的星期 + 本月最后 + 本月最后一个星期 + + Cron表达式测试结果 + Cron表达式无效:\n%s + 最近 %s 次运行时间:\n%s + + 通过卡槽 SIM-%s 发送短信到:\n%s + 放电到指定电量 + 充电到指定电量 + 电池放电低到%s%% + 电池放电低于%s%%, 持续提醒 + 电池充电达到%s%% + 电池充电高于%s%%, 持续提醒 + + SIM卡状态:%s + 被移除 + 已就绪 + 未知 + + 不限卡槽 + SIM-1 + SIM-2 + + 屏幕锁定后多长时间(分钟) + 屏幕锁定%s后 + 屏幕解锁后多长时间(分钟) + 屏幕解锁%s后 + %s分钟 + + 根据GPS坐标计算距离 + 根据地址关键字判断 + 经度 + 维度 + 距离 + 以经纬度为中心, + 米半径建立电子围栏 + 当前坐标 + 关键字 + 当前GPS地址包含 + 则表示到达 + 当前GPS地址不包含 + 则表示离开 + 经纬度或距离都不能为空 + 地址关键字不能为空 + 进入以经纬度(%s,%s)为中心, %s米为半径的区域 + 进入GPS地址包含[%s]关键字区域 + 离开以经纬度(%s,%s)为中心, %s米为半径的区域 + 离开GPS地址包含[%s]关键字区域 + 已添加过该类型条件 + 已添加过该类型动作 + 进入地点 与 离开地点 类型条件互斥 + 当前地址:%s + 定位失败,请稍后重试 + , 当前距离中心%s米 + + 指定配置 + 填写frpc的uid,多个以半角逗号分隔 + + 简体中文 + 当前 Activity 语种: + 当前 Application 语种: + 当前 System 语种: + 多语言设置 + SmsForwarder启动时界面默认显示的语言 + 需要重启App以便切换到您选择的语言 + 跟随系统 + 简体中文 + 繁體中文 + English + diff --git a/app/src/main/res/values-zh-rTW-v21/styles.xml b/app/src/main/res/values-zh-rTW-v21/styles.xml new file mode 100644 index 00000000..671bf105 --- /dev/null +++ b/app/src/main/res/values-zh-rTW-v21/styles.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 00000000..203e7893 --- /dev/null +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,1293 @@ + + + 簡訊 + 通話 + 應用 + 已啟用 + 已禁用 + 接收 + 發送 + 未接來電 + 本機去電 + 已接來電 + 網路模式 + 離線模式 + 用戶應用 + 系統應用 + 我的任務 + 任務中心 + + 通用瀏覽器 + 導航列 + guide_key_sliding_root_navigation + 打開導航抽屜 + 關閉導航抽屜 + + 轉發日誌 + 發送通道 + 轉發規則 + 通用設置 + + 通用設置·第一步 + 發送通道·第二步 + 轉發規則·第三步 + 轉發日誌·第四步 + + 自動任務·快捷指令 + 主動控制·服務端 + 主動控制·客戶端 + 內網穿透·Frpc + 應用列表·複製包名 + 日誌抓取·Logcat + 使用幫助 + 關於軟體 + + 軟體版本:%s + 緩存大小:%s + Frpc版本:%s + 微信小程序 + 已清理緩存 + 已刪除動態庫,重啟應用以生效! + © %1$s PPPSCN 版權所有。 + 開源倉庫 + GitHub + Gitee + 打賞名單 + 釘釘客戶群 + Telegram群組 + QQ頻道 + https://github.com/pppscn/SmsForwarder + https://gitee.com/pp/SmsForwarder + https://gitee.com/pp/SmsForwarder/wikis/pages + https://gitee.com/pp/SmsForwarder.wiki/raw/master/%E6%89%93%E8%B5%8F%E5%90%8D%E5%8D%95.md + https://gitee.com/pp/SmsForwarder/raw/main/pic/dingtalk.png + https://gitee.com/pp/SmsForwarder/raw/main/pic/tg.png + https://qun.qq.com/qqweb/qunpro/share?_wv=3&_wwv=128&appChannel=share&inviteCode=1W5aewP&appChannel=share&businessType=9&from=246610&biz=ka + https://gitee.com/pp/SmsForwarder/raw/main/pic/wechat_miniprogram.jpg + + + + 是否允許頁面打開"QQ"? + 是否允許頁面打開第三方應用? + + + 退出應用 + 同意 + 不同意 + 再次查看 + 仍不同意 + 溫馨提示 + 要不要再想想 + 我們非常重視對你個人信息的保護,承諾嚴格按照《%s隱私權政策》保護及處理你的信息。\n\n如果你不同意該政策,很遺憾我們將無法為你提供服務! + 《%s隱私權政策》 + + + 登錄/註冊 + 獲取驗證碼 + 登錄 + 驗證碼登錄 + 註冊 + 忘記密碼? + 驗證碼登錄 + 密碼登錄 + 請輸入手機號碼 + 手機號碼 + 密碼 + 舊密碼 + 請輸入驗證碼 + 驗證碼 + 密碼必須是8~18位字母和數字的組合! + 新密碼必須是8~18位字母和數字的組合! + 無效的手機號! + ^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(16[6])|(17[0,1,3,5-8])|(18[0-9])|(19[8,9]))\\d{8}$ + 請輸入4位數驗證碼 + ^\\d{4}$ + ^(?:(?=.*[a-zA-Z])(?=.*[0-9])).{8,18}$ + 重置密碼 + 點擊註冊即表示同意 + ]]> + 是否確認退出賬號? + 用戶協議 + 隱私政策 + 我已閱讀並同意 + + + 跳過 + 上一條 + 下一條 + 以後不再提示此類信息 + 你知道嗎? + 隱私政策 + 刷新網頁 + 複製鏈接 + 網頁分享 + 在瀏覽器打開 + 技術由 AgentWeb 提供 + 標誌 + + + 添加 + 新建配置文字 + 從網址導入 + 從文件導入 + 掃描二維碼 + + 保存配置 + 返回編輯 + 放棄修改 + 測試規則 + 模板 + 保存Frpc配置 + 請輸入配置內容 + 請輸入配置名稱 + 確定 + 保存成功 + 還原成功 + 已刪除 + 刪除失敗 + 修改文件名稱 + 未開啟 + 已開啟 + 未選擇配置文件 + 請先關閉服務 + 關於 + Logcat + 未命名 + 複製 + 刪除 + 複製成功 + 模板文件 + 提示 + 確定刪除該條配置? + Frpc內網穿透服務運行中 + 正在啟動服務 + + 簡訊轉發器 + 不僅只轉發簡訊,備用機必備神器!\n免費開源,禁止販賣! + + 確定 + 取消 + 丟棄 + 退出 + 刪除 + 保存 + 提交 + 發送 + 測試 + 確認 + 全部 + 選擇 + 一鍵克隆 + 通用設置 + 關於軟體 + 使用幫助 + 清空日誌 + 清空記錄 + 通知轉發規則 + 通話轉發規則 + 簡訊轉發規則 + 添加轉發規則 + 編輯轉發規則 + 克隆轉發規則 + 添加發送通道 + 編輯發送通道 + 克隆發送通道 + 還原配置 + + 當前版本 + 檢查新版本 + 開機啟動 + 幫助提示 + 建議老鳥關閉提示,頁面更清爽,減少彈窗提示 + 開源倉庫 + 同步鏡像 + 互幫互助QQ群 + ①群:562854376 + ②群:31330492 + 加入①群 + 加入②群 + 快取大小 + 清除快取 + 檢查中… + 已是最新版本! + 快取清理完成 + 未安裝手Q或安裝的版本不支持! + + 日誌刪除確認 + 確定刪除該條日誌記錄? + 該條日誌記錄已刪除! + 確定刪除該分類的所有日誌記錄? + 該分類日誌記錄已清空! + 正在嘗試通過原發送通道重發 + 正在重新匹配規則發送 + 詳情 + 確定要清空所有轉發記錄嗎? + 下拉可以刷新! + 鬆開可以刷新! + 正在刷新… + + 設置簡訊轉發規則 + 設置來電轉發規則 + 設置APP通知轉發規則 + 轉發規則操作確認 + 刪除轉發規則後會級聯刪除其相關的轉發日誌的所有記錄!\n\n確定刪除該條規則? + 該條規則已刪除! + 請選擇發送通道(若無,請先添加) + 請先去設置發送通道頁面添加 + 發送通道 + 轉發規則測試 + 測試模擬的接收卡槽 + 測試模擬的來源號碼 + 測試模擬的簡訊內容 + 測試模擬的APP包名 + 測試模擬的通話類型 + 測試模擬的通知標題 + 測試模擬的通知內容 + 執行邏輯 + 全部執行 + 失敗即止 + 成功即止 + 匹配卡槽 + 匹配字段 + 手機號 + 通話類型 + APP包名 + 簡訊內容 + 通知內容 + 多重匹配 + 匹配模式 + + 包含 + 不包含 + 開頭 + 結尾 + 正則匹配 + 匹配的值 + 如需匹配多個關鍵詞,請用 正則匹配 或 多重匹配 + 啟用該條轉發規則 + 該條轉發規則已禁用 + 匹配的值不可為空 + 通話類型不正確,只能填寫1到6的任意一個數字 + + 異常的發送通道類型,自動刪除! + 發送通道操作確認 + 刪除發送通道後會級聯刪除其相關的轉發規則、轉發日誌的所有記錄!\n\n確定刪除該條發送通道? + 該條發送通道已經刪除! + 選擇發送通道類型 + 暫不支持這種轉發 + 設置釘釘群機器人 + 設置郵箱 + 設置Webhook + 設置企業微信群機器人 + 設置企業微信應用 + 設置Bark + 設置Server醬·Turbo版 + 設置Telegram機器人 + 設置SMS + 設置飛書群機器人 + 設置PushPlus + 設置Gotify + 19999999999 + 測試分組 + 發送失敗: + 通道名稱不能為空 + token不合法 + 發件郵箱/登錄密碼/收件地址不可為空 + 服務器信息的主機/端口不可為空 + 消息圖標不是有效URL + 消息鏈接不是有效URL + bark-server為空 或 不是有效URL + 機器人的ApiToken 和 被通知人的ChatId 都不能為空 + 已開啟代理,主機名和端口號都不能為空 + 已開啟身份驗證,用戶和密碼不能同時為空 + Server醬·Turbo版的 SendKey 不能為空 + 最多兩個通道,多個通道值用縱線|隔開 + 多個 openid 用 , 隔開 + 自定義API地址 不是有效URL + WebServer為空 或 不是有效URL + WebHook為空 或 不是有效URL + URL Scheme 為空 或 無效 + 指定成員/指定部門/指定標籤 不能為空 或者 選擇@all + 企業ID、AgentID、Secret都不能為空 + AgentId、AppKey、AppSecret、UserIds都不能為空 + 接收手機號不能為空 + 多重匹配規則的第 %s 行格式有誤 + 正則替換內容的第 %s 行格式有誤 + 分組名稱/狀態 + 名稱/狀態 + 主機 + 端口 + 開啟SSL + 開啟StartTLS + 發件郵箱 + 登錄密碼 + 發件人昵稱 + 收件地址 + Tip:多個收件人以半角逗號,分隔 + 郵件主題 + Webhook 地址 + 加簽 Secret (沒有可不填) + 消息類型 + 純文本 + 消息卡片 + 標題模板 + 自定義API + 企業ID + AgentId + Secret + 是否@所有人 + 指定成員 + \@all + Tip:接收消息的成員ID列表(多個接收者用‘|’分隔,最多支持1000個) + 指定成員 + 指定部門 + 指定標籤 + Tip:接收消息的成員ID列表(多個接收者用‘|’分隔,最多支持1000個) + Tip:接收消息的部門ID列表(多個接收者用‘|’分隔,最多支持1000個) + Tip:接收消息的標籤ID列表(多個接收者用‘|’分隔,最多支持1000個) + Tip:通過反向代理(proxy_pass)繞過IP白名單限制 + Tip:接收用戶的userid,每次最多傳20個(用‘|’分隔) + SendKey + 消息通道 + 提示:動態指定,支持最多兩個通道,用縱線|隔開 + 選填,例如發送服務號和企業微信應用,则填 9|66 + 抄送OpenID + 提示:只支持測試號和企業微信應用消息通道 + 選填,多個openid用半角逗號,隔開 + ApiToken 或 自定義代理地址(http開頭) + 被通知人(或群組)的ChatId + 請求方式 + + 發送卡槽 + 原進原出 + 接收手機 + 提示:\n1.多個號碼以半角分號分隔,例如:15888888888;19999999999\n2.允許插入`{{來源號碼}}`標籤來實現簡訊自動回復(簡訊/來電場景) + 僅當無網路時啟用 + + 通知文案 + 通知欄文案 + 裝置名稱 + 卡槽主鍵 + SIM1主鍵/備註 + SIM2主鍵/備註 + 序號/運營商_手機號 + 數字必須大於0! + ^[1-9]?\\d+$ + 請求重試機制 + 次數=0禁用,逐次遞增 + 自動過濾多久內重複消息 + 0=禁用,判斷重複:類型+來源+內容 + 轉發簡訊廣播 + 請授予讀取簡訊、通知類簡訊、發送簡訊等權限,關閉驗證碼保護 + 簡訊指令 + 根據簡訊指令開關對應功能,指令格式:smsf#功能名#動作名 + 安全手機 + 僅處理指定手機請求,多個手機以逗號分隔 + 轉發通話記錄 + 請授予讀取通話記錄、聯繫人等權限,並選擇轉發類型,再開啟 + 轉發應用通知 + 請授予通知使用權再開啟;開啟“自動消除”可避免多條通知堆疊 + 自動消除通知 + 僅鎖屏狀態 + 啟用自定義模版 + 優先級:轉發規則的自定義模板 > 全局自定義模版 > 默認 + 啟用正則替換內容 + 格式:正則表達式===替換結果,每行一個規則.\n例如:(\\d{3})\\d{4}(\\d{4})===$1****$2 + 在最近任務列表中隱藏 + 請先鎖定後再開啟隱藏,有效避免手動誤殺進程 + 轉發信息模版 + Tip:按需插入內容標籤;留空使用默認模版 + 來源號碼 + APP包名 + UID + 簡訊內容 + 通知標題 + 通知內容 + 卡槽信息 + 接收時間 + 裝置名稱 + 恢復初始配置 + 確定需要恢復初始配置嗎?\n\n【警告】此操作將重置設置、刪除發送通道、規則、日誌! + 忽略電池優化設置 + 請設置為手動管理:允許自啟動、允許關聯啟動、允許後台運行 + 未知號碼 + 您的手機不支持此設置 + 已將省電優化設置為無限制(不優化)! + 本界面無法直接操作系統的省電優化設置 + 間隔時間最短為1秒 + 超時時間最短為1秒 + + v1.0 + https://github.com/pppscn/SmsForwarder + https://gitee.com/pp/SmsForwarder + 0KB + SIM1 + SIM2 + 多重匹配規則示例:(語法參見wiki)\n\n並且 是 手機號 相等 10086\n[空格]或者 是 手機號 相等 10011\n並且 是 簡訊內容 包含 欠費\n\n以上規則表示:收到簡訊,並且(手機號是10086 或者 手機號是10010),並且 簡訊內容 包含 欠費 時轉發簡訊\n\n注意:每行開始的空格代表層級,太過複雜的多重規則可能導致內存占用很大! + 多重匹配規則示例:(語法參見wiki)\n\n並且 是 手機號 相等 10086\n[空格]或者 是 手機號 相等 10011\n並且 是 通話類型 相等 3\n\n以上規則表示:收到來電,並且(手機號是10086 或者 手機號是10010),並且 通話類型 是 未接來電 時轉發提醒\n\n注意:每行開始的空格代表層級,太過複雜的多重規則可能導致內存占用很大!\n\n通話類型:1.來電掛機 2.去電掛機 3.未接來電 4.來電提醒 5.來電接通 6.去電撥出 + 填寫數字:1到6的任意一個\n\n通話類型:1.來電掛機 2.去電掛機 3.未接來電 4.來電提醒 5.來電接通 6.去電撥出 + 多重匹配規則示例:(語法參見wiki)\n\n並且 是 APP包名 相等 com.tencent.mm\n[空格]或者 是 APP包名 相等 com.tencent.mobileqq\n並且 是 通知內容 包含 欠費\n\n以上規則表示:收到APP通知,並且(APP包名是com.tencent.mm 或者 APP包名是com.tencent.mobileqq),並且 通知內容 包含 欠費 時轉發通知\n\n注意:每行開始的空格代表層級,太過複雜的多重規則可能導致內存占用很大! + POST + GET + PUT + PATCH + UDP + TCP + MQTT + SSL + + 本機IP: + 嚴正聲明:\n該功能僅限個人新舊手機切換使用,用於非法用途後果自負!\n\n操作說明:\n1.新舊手機連接同一個WiFi網絡(禁用AP隔離),如需穿透內網請先配置Frpc\n2.【二選一】舊手機點【推送】按鈕,將本機的配置推送到服務端\n3.【二選一】新手機點【拉取】按鈕,將拉取服務端的配置到本機\n\n注意事項:\n1.客戶端與服務端的APP版本必須一致,才能克隆!\n2.導入成功後,發送通道、轉發規則將完全被覆蓋,清空歷史記錄!\n3.主動請求、保活措施、個性設置不在克隆範圍 + 嚴正聲明:\n該功能僅限個人新舊手機切換使用,用於非法用途後果自負!\n\n注意事項:\n1.導出方與導入方的APP版本必須一致,才能一鍵克隆!\n2.新手機導入成功後,發送通道、轉發規則將完全被覆蓋,清空歷史記錄!\n3.主動請求、保活措施、個性設置不在克隆範圍 + 推送 + 拉取 + 停止 + 導出 + 導入 + 我是舊手機 + 我是新手機 + 服務端IP: + 主機: + 端口: + . + 請輸入合法的IP或域名 + 請輸入合法的輸入/輸出信息主題 + 請輸入合法的端口號 + 服務端已啟動 + 服務端已停止 + 本手機是發送端,不可接收文件,請先停止服務端! + 未接入Wifi網絡,不可使用HttpServer功能! + 請輸入服務端IP + 當前處於無線網絡 + 當前處於移動網絡 + 沒有網絡 + 未連接Wifi + 獲取IP失敗 + 簡 訊 + 來 電 + 應 用 + 應用圖標 + 用戶應用 + 系統應用 + 請將省電優化設置為無限制(不優化),有利於《簡訊轉發器》保活! + 請先授予發送通知權限,有利於《簡訊轉發器》保活! + 請先授予《簡訊轉發器》通知使用權,否則無法轉發應用程式通知,已經自動關閉轉發! + 通知服務已開啟 + 通知服務未開啟 + 官網地址 + www.pushplus.plus + pushplus.hxtrip.com + 用戶令牌 + 注意:請認真甄別您當前訪問的官網地址 + 群組編碼 + 發送模板 + html + 發送渠道 + webhook + 回調地址 + 有效時間(秒) + wechat + ✱帳戶管理 + ✱伺服器信息 + ✱郵件設置 + 低於 + % + 高於 + 0 + 首次發送時間: + 間隔(分鐘): + 代理設置 + 無代理 + HTTP + SOCKS + 主機名 + 端口號 + 代理身份驗證 + 用戶 + 密碼 + 輸入編碼 + 輸出編碼 + 輸入消息主題 + 接收對應主題的消息 + 輸出消息主題 + 發送對應主題的消息 + 通信方式 + 可選,默認為tcp + 通信路徑 + 用於在使用ws進行通信時設置uri + 客戶端ID + 如果為空則為隨機值 + 隱私政策 + 同意 + 拒絕 +     SmsForwarder-簡訊轉發器(下稱本軟體) 100% 免費開源,Github 在線編譯發佈,絕不會收集您的任何隱私數據! \n\n以下情形會上報本軟體的版本信息: \n    1、啟動本軟體時,發送版本信息發送到《友盟+·U-App移動統計》,用於分析本軟體的用戶版本留存與軟體奔潰統計; \n    2、手動檢查更新時,發送版本號用於檢查新版本; \n    除此之外,沒有任何數據!!! \n\n    本軟體會遵循《隱私政策》收集、使用版本信息,但不會因為您同意了《隱私政策》而進行強制捆綁式的信息收集。 + WebServer + ]]> + 標題模板 + 優先級(1 – 9) + 5 + 啟用該條轉發規則 + 釘釘群機器人 + 釘釘企業機器人 + 電子郵箱 + Bark + Webhook + 企微群機器人 + 企微應用消息 + Server醬·Turbo版 + Telegram機器人 + 手機簡訊 + 飛書群機器人 + 飛書企業應用 + PushPlus + Gotify + 0 + 1 + 2 + 3 + 4 + 10 + 通用設置 + 發送通道 + 轉發規則 + 轉發日誌 + TODO + 轉發功能 + 總開關,請根據實際需要,啟用對應的轉發功能 + 增強功能 + 請根據實際需要,啟用對應的增強設置 + 通話時間: + 通話時長: + 響鈴時長: + 類型: + 通話類型: + 來電提醒 + 來電接通 + 來電掛機 + 去電拨出 + 去電掛機 + 未接來電 + 未知通話 + 可選操作: + 可選類型: + 主動請求 + 通過 被動接收 或者 主動輪詢 獲取指令,從而操作本機 + 被動接收本地 HttpServer + WiFi網絡下可用,啟動後局域網內其他機器可直接調用本機接口 + SIM卡槽狀態監控 + 網絡狀態監控 + 網絡狀態改變提醒 + 保活措施 + 開啟前三項授權或設置,不禁用通知欄,避免應用被殺 + 個性設置 + 請手動填寫備註 或 點擊刷新按鈕自動獲取 + + 間隔 + 遞增間隔 + 超時 + 單次超時 + + %s 秒 + 重試 + 最多重試 + 【%s】恭喜您,該發送通道測試成功,請繼續添加轉發規則! + 測試通道 + SIM1_測試運營商_ + 持續提醒 + 超過預設值之後,每次電量變化繼續觸發 + 重發消息 + 重新匹配規則 + 來源: + 標題: + Scheme: + 消息: + 卡槽: + 規則: + 時間: + 轉發結果: + 成功 + 失敗 + 處理中 + {{來源號碼}} + {{簡訊內容}} + {{APP包名}} + {{APP名稱}} + {{通知內容}} + {{卡槽信息}} + {{卡槽主鍵}} + {{接收時間}} + {{當前時間}} + {{設備名稱}} + {{當前應用版本號}} + {{通知標題}} + {{通知Scheme}} + {{通話類型}} + {{定位信息}} + {{電池電量}} + {{電池狀態}} + {{充電方式}} + {{電池信息}} + {{UID}} + 簡訊 + 來電 + 應用 + 全部 + 全部轉發 + 手機號 + 內容 + 多重匹配 + APP包名 + 通知內容 + 通話類型 + UID + + + 轉發到 + 全部轉發到 + + 不是 + 包含 + 開頭是 + 結尾是 + 不包含 + 正則匹配 + 已復制包名: + 正在加載用戶應用,請稍候… + 正在加載系統應用,請稍候… + 很抱歉!程式出現異常,即將退出… + 必須選擇一個通話類型,才能開啟通話記錄轉發! + 通知服務已開啟 + 【注意】電量預警閾值上下限都是0,持續提醒不起作用 + 兼容方案 + 點擊啟動後請等待3秒 + 一鍵克隆操作完成!\n請檢查·通用設置·各項開關是否已開啟! + 一鍵克隆失敗: + APP版本不一致,無法一鍵克隆! + 獲取一鍵克隆信息失敗 + 通訊錄名: + 被呼號碼: + 授權提醒 + 授權失敗,請正確授予權限 + 獲取權限失敗,請手動授予權限 + 獲取權限失敗,請手動授予%s + 沒有授予後台定位權限,請您選擇"始終允許" + 前往授權 + 日曆權限 + 相機權限 + 通訊錄權限 + 定位權限 + 後臺定位權限 + 附近的設備權限 + 麥克風權限 + 電話權限 + 通話記錄權限 + 身體傳感器權限 + 健身運動權限 + 簡訊權限 + 儲存權限 + 安裝應用程式權限 + 懸浮視窗權限 + 系統設定權限 + 通知欄權限 + 檢視使用情況權限 + 獲取所有必需的權限成功! + 獲取部分權限成功,但部分權限未正常授予,應用部分功能可能受限! + 被永久拒絕授權,前往系統設定手動授權權限? + 獲取必需的權限失敗,應用功能可能受限! + 後台播放無聲音樂 + 【按需啟用】播放無聲音樂讓後台一直運行,可能比較耗電 + 1像素 + 1像素透明Activity + 【按需啟用】使進程的優先級在屏幕鎖屏時間由4提升為最高優先級1 + 可選 + 請按照wiki中的步驟獲取 + 網路模式 + 離線模式 + 備份文件存放路徑: + 配置名稱 + 開機自啟 + + Home + Settings + Logging + About + + HttpServer + 啟動服務 + 停止服務 + Server is shutting down. Please wait. + Server failed to start! + Server can not run on this port! (Bind-Exception) + Sim-Card is missing or not ready to send sms! + SMS-Permission is required to run the server! + + Yes + No + --- + 刷新 + 無法獲取卡槽信息,請確認應用權限【獲取手機信息】為【始終允許】 + 未獲取到卡槽%s中的SIM卡信息 + 添加 + 啟動時檢查 + 檢查更新 + 清理緩存 + 刪除動態庫 + + 通道名稱/狀態 + 發送通道/狀態 + + Webhook + 例:https://oapi.dingtalk.com/robot/send?access_token=XXX + 機器人設置→webhook + 加簽 Secret + 機器人設置→安全設置→加簽 + 被@人的手機號 + 提示:多個手機號用逗號分開,例如:,19999999999 + 被@人的釘釘號 + 提示:多個釘釘號用逗號分開,例如:user1,user2 + + Bark-Server + 例:https://api.day.app/XXXXXXXX/ + ^https?://[^/]+/[^/]+/$ + Url格式錯誤,例:https://api.day.app/XXXXXXXX/ + 分組名稱 + 可選,例:簡訊轉發器 + 消息圖標 + 可選,填寫Url,圖片不要太大 + 消息聲音 + 可選,例:minuet.caf + 消息角標 + 可選,例:888 + 消息鏈接 + 可選,例:https://github.com/pppscn/SmsForwarder + 通知級別 + 立即亮屏顯示通知 + 時效性通知,可在專注狀態下顯示通知 + 僅添加到通知列表,不會亮屏提醒 + + + Url格式錯誤 + 加密算法 + 不加密 + 加密密鑰 + 對應bark上的key + 偏移向量 + 對應bark上的iv + + 加密密鑰必須是16位 + 加密密鑰必須是24位 + 加密密鑰必須是32位 + 偏移向量必須是16位 + + 填寫 @ 前面的用戶名 + 填寫格式: AAA@BBB.CCC + 其他郵箱 + 其他郵箱,請填寫完整的郵箱地址並手動填寫SMTP服務器信息 + 填寫登錄密碼 或 授權碼 + + WebHook地址 + 示例:https://qyapi.weixin.qq.com/cgixx?key=xxx + 消息類型 + 純文本 + markdown + 被@人的手機號 + Tips:多個手機號用逗號分開,例如:,19999999999 + 被@人的userid + Tips:多個userid用逗號分開,例如:user1,user2 + + URL Scheme + 示例:myapp://api/add?&type=0&msg=[msg] + + Socket + 示例:myapp://api/add?&type=0&msg=[msg] + 服務地址 + IP 或 域名 + 端口 + 取值範圍:1-65535 + + Webhook Server + 例如:https://a.b.com/msg?token=xyz + 消息模板 + Params + 例如:payload=%7B%22text%22%3A%22[msg]%22%7D [msg]將被替換成簡訊內容。\n支持Json格式,例如:{\"text\":\"[msg]\"}。\n注意:除JSON格式外,msg會自動進行URLEncoder + Secret:置空則不計算sign + 成功應答關鍵字:置空則http狀態200即為成功 + 成功應答關鍵字:置空則發出即成功 + Headers + Key + Value + 添加Header + 刪除Header + 請選擇發送通道類型 + 群機器人→Webhook 地址 + 群機器人→安全設置→簽名驗證 + 請前往對應的官網地址獲取 + 下拉選擇,關鍵字模糊匹配 + 已裝APP列表 + 額外消除應用通知 + 一行一個包名\n開啟異步加載App列表以便選擇 + 下拉選擇獲取包名,關鍵字模糊匹配APP名稱 + ^\\s*(並且|或者)\\s(是|不是)\\s(手機號|APP包名|簡訊內容|通知內容|通知標題|卡槽信息|通話類型)\\s(相等|包含|不包含|開頭|結尾|正則匹配)\\s(.*)$ + 歡迎使用 + 我們深知個人信息對你的重要性,也感謝你對我們的信任。\n + 為了更好地保護你的權益,同時遵守相關監管的要求,我們將通過 + 向你說明我們會如何收集、存儲、保護、使用及對外提供你的信息,並說明你享有的權利。\n + 更多詳情,敬請查閱 + 全文。\n\n + 請先授予發送通知權限,有利於《簡訊轉發器》保活! + 其他登錄方式 + 請求成功 + 請求失敗: + 請求失敗:%s + 沒有簡訊發送權限 + 缺少 FrpcLib v%s 動態庫 + 正在下載中,請稍後…… + FrpcLib 版本不匹配 + 頁面未找到! + 數據出錯! + 無法使用瀏覽器打開 + 分享到 + 您所打開的第三方App未安裝! + 描述信息 + 登錄成功! + 登錄失敗! + 登出成功! + 您已經安裝的是最新版本! + 應用下載失敗,是否考慮切換到 %s 下載? + 應用下載失敗,是否考慮切換到 %s 下載? + 已取消更新 + 並且 + 或者 + 手機號 + 簡訊內容 + APP包名 + UID + 通知標題 + 通知內容 + 卡槽信息 + 通話類型 + + 不是 + 相等 + 包含 + 不包含 + 開頭 + 結尾 + 正則匹配 + 未知手機品牌:需要自主查看設置操作 + 關閉應用開關 -> 打開允許自啟動]]> + 關閉應用開關 -> 打開允許自啟動]]> + 自啟動管理 -> 允許應用自啟動]]> + 自啟動管理 -> 允許應用自啟動]]> + 自啟動 -> 允許應用自啟動]]> + 後台管理 -> 點擊應用 -> 允許後台運行]]> + 打開應用開關 -> 電池管理 -> 未監視的應用程序 -> 添加應用]]> + 允許應用自啟動]]> + 自啟動權限管理 -> 點擊應用 -> 允許被系統啟動]]> + 需要手動重新啟動APP,才能生效該配置項 + 時間選擇 + + HttpServer運行中,監聽:%1$s:%2$d + HttpServer已停止 + 服務端設置 + 建議啟用簽名設置、點擊“隨機”自動生成並複製到剪貼板 + 複製 + 隨機生成 + 簽名密鑰 + 已生成公私鑰對,並複製公鑰到剪貼板 + 已複製公鑰到剪貼板 + 已生成密鑰,並複製到剪貼板 + 啟用功能 + 按需選擇您要啟用遠程控制的功能 + 一鍵換新機 + 一鍵克隆本機的通用配置、發送通道、轉發規則到新機器 + 遠程發簡訊 + 非免費簡訊,簡訊資費以您的手機套餐為準 + 遠程查簡訊 + 遠程查簡訊記錄,作為簡訊轉發功能的補充 + 遠程查通話 + 遠程查通話記錄,包括來電、去電、未接電話 + 遠程查話簿 + 遠程查聯繫人列表 + 遠程加話簿 + 遠程添加聯繫人 + 遠程查電量 + 遠程查詢手機電量與電池狀態 + 遠程WOL + 遠程打開啟用LAN喚醒功能(Wake-On-LAN)的設備 + 遠程找手機 + 遠程查詢手機定位,方便找回手機/防止老少走丟 + 請先在【通用設置】中【啟用GPS定位功能】 + 經度:%s + 緯度:%s + 地址:%s + 時間:%s + 供應商:%s + + 發送卡槽 + 姓名 + 選填,通訊錄顯示名稱 + 手機號碼 + 必填,多個手機號用半角分號分隔 + 手機號碼格式錯誤,例:15888888888;19999999999 + ^([+]?\\d+)(;[+]?\\d+)*$ + 簡訊內容 + 必填,70個字符內算一條,超過70個字符,每增加64字符累加1條 + 簡訊內容不能為空,最多390字符(6條簡訊) + ^.{1,390}$ + + 未知 + AC + USB + 無線 + 充電中 + 放電中 + 未充電 + 充滿電 + 良好 + 過熱 + 沒電 + 過電壓 + 未知錯誤 + 溫度過低 + 剩餘電量:%s + 剩餘電量 + 充滿電量:%s + 當前電壓:%s + 當前溫度:%s + 電池狀態:%s + 電池狀態 + 健康度:%s + 充電器:%s + 充電器 + + 歷史記錄 + 登入服務 + 無效的服務地址!\n格式:http://127.0.0.1:5000 或 https://smsf.demo.com + 請先點擊【登入服務】按鈕,獲取服務端已啟用的功能列表 + 服務端禁用此功能 + Frpc運行失敗 + 刪除成功 + 【注意】該發送通道已經禁用,其關聯的規則即便匹配上也不會發送! + 【注意】該發送通道已經在列表中,無需重複添加! + 本地呼叫: + 遠程發簡訊: + 清除 + 未授權儲存權限,該功能無法使用! + 姓名:%s\n號碼:%s + 卡槽未匹配中規則 + 未匹配中規則 + 已複製到剪貼板:\n%s + 搜索關鍵字: %s + 導出配置成功! + 導出失敗,請檢查寫入權限! + 導出失敗: %s + 導入失敗:請檢查是否有外部存儲訪問權限! + 導入失敗:本地備份文件不存在! + 導入配置成功!\n需要重啟APP以便生效!\n重啟後請再次核對所有配置項! + 導入失敗: %s + 還原失敗 + 電池狀態監聽 + 【電量預警】已低於電量預警下限,請及時充電!%s + 【電量預警】已高於電量預警上限,請拔掉充電器!%s + 【電量預警】已達到電量預警下限,請及時充電!%s + 【電量預警】已達到電量預警上限,請拔掉充電器!%s + 【充電狀態】發生變化: + 第一行不允許縮進 + 服務端啟用簽名密鑰,sign節點必傳 + 服務端啟用簽名密鑰,timestamp節點必傳 + 簽名驗證失敗 + version_code節點必傳 + 客戶端與服務端的App版本不一致 + timestamp校驗失敗,與服務器時間(%s)誤差不能超過%s秒(diffTime=%s) + + 主標題 + 副標題 + 輸入關鍵字模糊匹配簡訊內容 + 純數字匹配號碼/非數字匹配姓名 + 輸入關鍵字模糊匹配手機號碼 + 按照主動控制·服務端的配置填寫以下項目 + 服務地址 + 例如:http://127.0.0.1:5000 + 功能列表 + 純客戶端模式 + 啟動APP時直接進入主動控制·客戶端 + 退出純客戶端模式 + 是否立即退出App,並手動啟動以生效純客戶端模式? + 純自動任務模式 + 啟動APP時直接進入自動任務 + 退出純自動任務模式 + 是否立即退出App,並手動啟動以生效純自動任務模式? + 可選組件: + 啟用 Cactus 增強保活措施(會增加耗電) + 雙進程前台服務/JobScheduler/WorkManager/1像素/無聲音樂 + 啟動時異步獲取已安裝App列表 + 用於加速進入應用列表/編輯轉發規則下拉選擇/替換{{APP名稱}} + 開啟異步獲取已安裝App列表時必選一個類型 + 暫無歷史記錄,接口測試通過後自動加入 + 時間段選擇 + 免打擾(禁用轉發)時間段 + 結束時間小於開始時間則跨天;相等則禁用 + 是否立即下載,並重啟加載? + 下載成功,是否立即重啟加載? + AppKey + AppSecret + 文本類型 + Markdown類型 + 可選,內網廣播地址,例如:192.168.1.255 + IP地址格式錯誤,例如:192.168.168.168 + ^((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])$ + 必填,網卡mac,例如:AA:BB:CC:DD:EE:FF + 網卡mac格式錯誤,例如:AA:BB:CC:DD:EE:FF + ^((([a-fA-F0-9]{2}:){5})|(([a-fA-F0-9]{2}-){5}))[a-fA-F0-9]{2}$ + 內網廣播地址 + IP + 網卡MAC + 暫無歷史記錄,WOL發送成功後自動加入 + 可選,WOL一般透過端口7或端口9進行發送 + 端口號取值範圍:1~65535 + ^([0-9]|[1-9]\\d|[1-9]\\d{2}|[1-9]\\d{3}|[1-5]\\d{4}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5])$ + 選擇目錄 + Web客戶端 + 正在重啟HttpServer + 請先下載Web客戶端並解壓到:\n%s + 根目錄:\n%s + 選擇Web客戶端目錄 + AppId/AppSecret/UserId都不能為空 + App ID + App Secret + User ID + 自動刪除N天前的轉發記錄 + 0=禁用,觸發機制:每次電量變化時掃描 + 安全措施 + 客戶端與服務端必須一致,強烈建議公網訪問時啟用加密 + 不需要 + 校驗簽名 + RSA加密 + SM4加密 + 參見 Github Wiki,下載到 Download 目錄 + 客戶端與服務端時間容差 + 盡量縮短時間容差,避免請求重放攻擊 + RSA私鑰 + RSA私鑰用在服務端:服務端應答報文私鑰加密,客戶端公鑰解密 + 生成密鑰 + RSA公鑰 + RSA公鑰用在客戶端:客戶端請求報文公鑰加密,服務端私鑰解密 + 複製公鑰 + SM4密鑰 + 客戶端/服務端交互採用SM4加解密 + + 刪除寄件者通道 + 寄件者通道已停用 + 未知的寄件者通道 + 網絡類型 + 運營商名稱 + 本地IP + 正在加載應用程式清單,請稍候… + + 運營商名 + ICC ID + 卡槽索引 + 數據卡槽 + 手機號碼 + 國家代碼 + 訂閱標識 + + 沒有網絡 + 2G網絡 + 3G網絡 + 4G網絡 + 5G網絡 + 移動網絡 + WiFi + 有線網絡 + 未知網絡 + 網絡狀態:%s + WiFi名稱 + 留空則不判斷連接的WiFi-SSID + IPv4 + IPv6 + + 啟用GPS定位功能 + 必須開啟定位服務,才能使用獲取!\n是否立即啟用? + 以便支持 查找手機、{{定位信息}}標籤 等需要GPS的功能 + 位置精度 + 精確位置 + 模糊位置 + 不要求 + 電量消耗 + + + + 位置更新:最小時間間隔 + 最小距離間隔 + + UID + + 任務名稱/狀態 + 任務名稱 + 任務描述 + 如果 + 由第一個條件觸發,其他條件作為判斷 + 就執行 + 允許添加多個執行動作,執行結果互不干擾 + 上次執行時間 + 下次執行時間 + 新建任務 + 編輯任務 + 克隆任務 + 刪除任務操作確認 + 刪除任務操作確認 + 刪除任務操作確認 + 添加條件 + 例如:如果電量低於20%時 + 繼續添加條件 + 添加動作 + 例如:禁用所有轉發通道 + 繼續添加動作 + + 請選擇觸發條件 + 請選擇附加條件 + 請選擇動作 + 關 閉 + 定時任務 + 採用 Quartz Cron 表達式 + 到達地點 + 採用經緯度坐標(WGS-84坐標系) + 離開地點 + 經緯度採用WGS-84坐標系 + 網絡狀態 + 當網絡狀態改變時觸發 + SIM卡狀態 + 當SIM卡狀態改變時觸發 + 電量使用 + 當剩餘電量滿足條件時觸發 + 充電狀態 + 當充電狀態滿足條件時觸發 + 鎖屏解鎖 + 在屏幕鎖定或解鎖後立即或指定時間觸發 + 發送簡訊 + 通道推送 + Frpc設置 + 控制內網穿透·FRPC的啟動/停止 + HttpServer設置 + + + + + + + + + Cron表達式 + 每秒鐘 + 每分鐘 + 每小時 + 每日 + 每月 + 每週 + 每年 + 週期 + + 從星期 + + 起始 + 結束 + + 秒開始,每 + 秒鐘執行一次 + + 分開始,每隔 + 分鐘執行一次 + + 時開始,每隔 + 小時執行一次 + + 日開始,每隔 + 天執行一次 + + 月開始,每隔 + 月執行一次 + + 年開始,每隔 + 年執行一次 + 指定 + 不指定 + 最近工作日 + 每月 + 號最近的那個工作日 + 本月最後一天 + 本月最後一個工作日 + + 週的星期 + 本月最後 + 本月最後一個星期 + + Cron表達式測試結果 + Cron表達式無效:\n%s + 最近 %s 次運行時間:\n%s + + 通过卡槽 SIM-%s 發送簡訊到:\n%s + 放電到指定電量 + 充電到指定電量 + 電池放電低到%s%% + 電池放電低於%s%%,持續提醒 + 電池充電達到%s%% + 電池充電高於%s%%,持續提醒 + + SIM卡狀態:%s + 被移除 + 已就緒 + 未知 + + 不限卡槽 + SIM-1 + SIM-2 + + 屏幕鎖定後多長時間(分鐘) + 屏幕鎖定%s後 + 屏幕解鎖後多長時間(分鐘) + 屏幕解鎖%s後 + %s分鐘 + + 根據GPS坐標計算距離 + 根據地址關鍵字判斷 + 經度 + 緯度 + 距離 + 以經緯度為中心, + 米半徑建立電子圍欄 + 當前坐標 + 關鍵字 + 當前GPS地址包含 + 則表示到達 + 當前GPS地址不包含 + 則表示離開 + 經緯度或距離都不能為空 + 地址關鍵字不能為空 + 進入以經緯度(%s,%s)為中心, %s米為半徑的區域 + 進入GPS地址包含[%s]關鍵字區域 + 離開以經緯度(%s,%s)為中心, %s米為半徑的區域 + 離開GPS地址包含[%s]關鍵字區域 + 已添加過該類型條件 + 已添加過該類型動作 + 進入地點與離開地點類型條件互斥 + 當前地址:%s + 定位失敗,請稍後重試 + , 當前距離中心%s米 + + 指定配置 + 填寫frpc的uid,多個以半角逗號分隔 + + 繁體中文 + 當前 Activity 語種: + 當前 Application 語種: + 當前 System 語種: + 多語言設置 + SmsForwarder啟動時界面預設顯示的語言 + 需要重新啟動應用程式以切換至您選擇的語言 + 跟隨系統 + 简体中文 + 繁體中文 + English + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d82f09e4..7ae89f7a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -694,7 +694,6 @@ 获取部分权限成功,但部分权限未正常授予,APP部分功能可能受限! 被永久拒绝授权,前往系统设置手动授予权限? 获取必需的权限失败,APP功能可能受限! - \n    首次使用请按照1234步骤顺序设置,数字点亮表示该步骤已设置(4点亮表示有成功日志)!\n\n    根据以往用户反馈,90%的新用户最终排查结果都是手机权限设置问题,5%的用户是APP保活问题,其他问题排查参考Wiki中的常见问题(APP右上角使用帮助入口)\n\n    强烈建议:手动排查一下系统设置:自启动、电源策略、APP的权限,把所有权限打开(始终允许,不要“使用中允许”,MIUI系统就全部变绿),特别是一些国产定制系统加入隐私保护、验证码保护等(例如:MIUI 系统的 空白通行证)\n\n    请选择是否立即“前往系统设置”检查,或“稍后自行处理”? 后台播放无声音乐 【按需启用】播放无声音乐让后台一直运行,可能比较耗电 1像素 @@ -1279,4 +1278,16 @@ 指定配置 填写frpc的uid,多个以半角逗号分隔 + + 跟随系统 + 当前 Activity 语种: + 当前 Application 语种: + 当前 System 语种: + 多语言设置 + SmsForwarder启动时界面默认显示的语言 + 需要重启App以便切换到您选择的语言 + 跟随系统 + 简体中文 + 繁體中文 + English