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 fced29ff..259f4a2b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/App.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/App.kt @@ -18,7 +18,6 @@ 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 @@ -276,15 +275,21 @@ class App : Application(), CactusCallback, Configuration.Provider by Core { // 初始化语种切换框架 MultiLanguages.init(this) // 设置语种变化监听器 - MultiLanguages.setOnLanguageListener(object : OnLanguageListener { + /*MultiLanguages.setOnLanguageListener(object : OnLanguageListener { override fun onAppLocaleChange(oldLocale: Locale, newLocale: Locale) { + // 注意:只有setAppLanguage时触发,clearAppLanguage时不触发 Log.i(TAG, "监听到应用切换了语种,旧语种:$oldLocale,新语种:$newLocale") } override fun onSystemLocaleChange(oldLocale: Locale, newLocale: Locale) { - Log.i(TAG, "监听到系统切换了语种,旧语种:" + oldLocale + ",新语种:" + newLocale + ",是否跟随系统:" + MultiLanguages.isSystemLanguage(this@App)) + //val isFlowSystem = MultiLanguages.isSystemLanguage(context) //取值不对,一直是false + val isFlowSystem = SettingUtils.isFlowSystemLanguage + Log.i(TAG, "监听到系统切换了语种,旧语种:$oldLocale,新语种:$newLocale,是否跟随系统:$isFlowSystem") + if (isFlowSystem) { + CommonUtils.switchLanguage(oldLocale, newLocale) + } } - }) + })*/ } @SuppressLint("CheckResult") diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/AppDatabase.kt b/app/src/main/java/com/idormy/sms/forwarder/database/AppDatabase.kt index 4f3fe4fd..3461e360 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/AppDatabase.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/AppDatabase.kt @@ -22,11 +22,13 @@ import com.idormy.sms.forwarder.database.entity.Sender import com.idormy.sms.forwarder.database.entity.Task import com.idormy.sms.forwarder.database.ext.ConvertersDate import com.idormy.sms.forwarder.utils.DATABASE_NAME +import com.idormy.sms.forwarder.utils.SettingUtils +import com.idormy.sms.forwarder.utils.TAG_LIST @Database( entities = [Frpc::class, Msg::class, Logs::class, Rule::class, Sender::class, Task::class], views = [LogsDetail::class], - version = 18, + version = 19, exportSchema = false ) @TypeConverters(ConvertersDate::class) @@ -107,6 +109,7 @@ custom_domains = smsf.demo.com MIGRATION_15_16, MIGRATION_16_17, MIGRATION_17_18, + MIGRATION_18_19, ) /*if (BuildConfig.DEBUG) { @@ -408,7 +411,39 @@ CREATE TABLE "Task" ( ) """.trimIndent() ) - //TODO:原来的电量/网络/SIM卡状态转换为自动化任务 + } + } + + //自定义模板可用变量统一成英文标签 + private val MIGRATION_18_19 = object : Migration(18, 19) { + override fun migrate(database: SupportSQLiteDatabase) { + //替换自定义模板标签 + var smsTemplate = SettingUtils.smsTemplate + //替换Rule.sms_template中的标签 + var ruleColumnCN = "sms_template" + var ruleColumnTW = "sms_template" + //替换Sender.json_setting中的标签 + var senderColumnCN = "json_setting" + var senderColumnTW = "json_setting" + + for (i in TAG_LIST.indices) { + val tagCN = TAG_LIST[i]["zh_CN"].toString() + val tagTW = TAG_LIST[i]["zh_TW"].toString() + val tagEN = TAG_LIST[i]["en"].toString() + smsTemplate = smsTemplate.replace(tagCN, tagEN) + ruleColumnCN = "REPLACE($ruleColumnCN, '$tagCN', '$tagEN')" + ruleColumnTW = "REPLACE($ruleColumnTW, '$tagTW', '$tagEN')" + senderColumnCN = "REPLACE($senderColumnCN, '$tagCN', '$tagEN')" + senderColumnTW = "REPLACE($senderColumnTW, '$tagTW', '$tagEN')" + } + + database.execSQL("UPDATE Rule SET sms_template = $ruleColumnCN WHERE sms_template != ''") + database.execSQL("UPDATE Rule SET sms_template = $ruleColumnTW WHERE sms_template != ''") + + database.execSQL("UPDATE Sender SET json_setting = $senderColumnCN WHERE type NOT IN (4, 5, 6, 7, 8, 14)") + database.execSQL("UPDATE Sender SET json_setting = $senderColumnTW WHERE type NOT IN (4, 5, 6, 7, 8, 14)") + + SettingUtils.smsTemplate = smsTemplate } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt b/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt index a2ab2eb6..75cb1afc 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt @@ -58,4 +58,6 @@ interface RuleDao { @Query("SELECT * FROM Rule ORDER BY id DESC") fun getAll(): Single> + @RawQuery + fun replaceTags(query: SupportSQLiteQuery): Int } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt b/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt index c27634be..5ebffae4 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt @@ -63,4 +63,7 @@ interface SenderDao { @Query("SELECT COUNT(id) FROM Sender WHERE status = 1") fun getOnCount(): Flow + @RawQuery + fun replaceTags(query: SupportSQLiteQuery): Int + } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/repository/RuleRepository.kt b/app/src/main/java/com/idormy/sms/forwarder/database/repository/RuleRepository.kt index 052fa0ac..756a3e2b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/repository/RuleRepository.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/repository/RuleRepository.kt @@ -41,4 +41,8 @@ class RuleRepository(private val ruleDao: RuleDao) { fun getRuleList(type: String, status: Int, simSlot: String) = ruleDao.getRuleList(type, status, simSlot) + fun replaceTags(sql: String): Int { + val query = SimpleSQLiteQuery(sql) + return ruleDao.replaceTags(query) + } } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt b/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt index c74a0f94..c56bae40 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt @@ -46,4 +46,9 @@ class SenderRepository(private val senderDao: SenderDao) { val count: Flow = senderDao.getOnCount() + fun replaceTags(sql: String): Int { + val query = SimpleSQLiteQuery(sql) + return senderDao.replaceTags(query) + } + } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/condition/LockScreenSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/condition/LockScreenSetting.kt index e4938118..d7b92704 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/condition/LockScreenSetting.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/condition/LockScreenSetting.kt @@ -65,12 +65,4 @@ data class LockScreenSetting( } } - fun getDuration(action: String): Int { - return when (action) { - Intent.ACTION_SCREEN_ON -> timeAfterScreenOn - Intent.ACTION_SCREEN_OFF -> timeAfterScreenOff - Intent.ACTION_USER_PRESENT -> timeAfterScreenUnlocked - else -> timeAfterScreenLocked - } - } } 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 5262c4d4..6b63df90 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 @@ -1020,11 +1020,12 @@ class SettingsFragment : BaseFragment(), View.OnClickL //多语言设置 private fun switchLanguage(rgMainLanguages: RadioGroup) { + val context = App.context rgMainLanguages.check( - if (MultiLanguages.isSystemLanguage(requireContext())) { + if (MultiLanguages.isSystemLanguage(context)) { R.id.rb_main_language_auto } else { - when (MultiLanguages.getAppLanguage(requireContext())) { + when (MultiLanguages.getAppLanguage(context)) { LocaleContract.getSimplifiedChineseLocale() -> R.id.rb_main_language_cn LocaleContract.getTraditionalChineseLocale() -> R.id.rb_main_language_tw LocaleContract.getEnglishLocale() -> R.id.rb_main_language_en @@ -1034,35 +1035,49 @@ class SettingsFragment : BaseFragment(), View.OnClickL ) rgMainLanguages.setOnCheckedChangeListener { _, checkedId -> - // 是否需要重启 + val oldLang = MultiLanguages.getAppLanguage(context) + var newLang = MultiLanguages.getSystemLanguage(context) + //SettingUtils.isFlowSystemLanguage = false when (checkedId) { R.id.rb_main_language_auto -> { + // 只为了触发onAppLocaleChange + // MultiLanguages.setAppLanguage(context, newLang) + // SettingUtils.isFlowSystemLanguage = true // 跟随系统 - MultiLanguages.clearAppLanguage(requireContext()) + MultiLanguages.clearAppLanguage(context) } R.id.rb_main_language_cn -> { // 简体中文 - MultiLanguages.setAppLanguage(requireContext(), LocaleContract.getSimplifiedChineseLocale()) + newLang = LocaleContract.getSimplifiedChineseLocale() + MultiLanguages.setAppLanguage(context, newLang) } R.id.rb_main_language_tw -> { // 繁体中文 - MultiLanguages.setAppLanguage(requireContext(), LocaleContract.getTraditionalChineseLocale()) + newLang = LocaleContract.getTraditionalChineseLocale() + MultiLanguages.setAppLanguage(context, newLang) } R.id.rb_main_language_en -> { // 英语 - MultiLanguages.setAppLanguage(requireContext(), LocaleContract.getEnglishLocale()) + newLang = LocaleContract.getEnglishLocale() + MultiLanguages.setAppLanguage(context, newLang) } } // 重启应用 - XToastUtils.toast(R.string.multi_languages_toast) - val intent = Intent(App.context, MainActivity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) - startActivity(intent) - requireActivity().finish() + Log.d(TAG, "oldLang: $oldLang, newLang: $newLang") + if (oldLang.toString() != newLang.toString()) { + //CommonUtils.switchLanguage(oldLang, newLang) + XToastUtils.toast(R.string.multi_languages_toast) + //切换语种后重启APP + Thread.sleep(200) + val intent = Intent(App.context, MainActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) + startActivity(intent) + requireActivity().finish() + } } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtils.kt index b4f263df..50c1c864 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/CommonUtils.kt @@ -326,6 +326,39 @@ class CommonUtils private constructor() { context.startActivity(mainIntent) XUtil.exitApp() } + + /*fun switchLanguage(oldLocale: Locale, newLocale: Locale) { + val oldLang = if (TAG_LANG.contains(oldLocale.toString())) oldLocale.toString() else "en" + val newLang = if (TAG_LANG.contains(newLocale.toString())) newLocale.toString() else "en" + Log.i(App.TAG, "switchLanguage: oldLang=$oldLang, newLang=$newLang") + + //替换自定义模板标签 + var smsTemplate = SettingUtils.smsTemplate + //替换Rule.sms_template中的标签 + var ruleColumn = "sms_template" + //替换Sender.json_setting中的标签 + var senderColumn = "json_setting" + + for (i in TAG_LIST.indices) { + val oldTag = TAG_LIST[i][oldLang].toString() + val newTag = TAG_LIST[i][newLang].toString() + if (oldTag == newTag) continue + + smsTemplate = smsTemplate.replace(oldTag, newTag) + ruleColumn = "REPLACE($ruleColumn, '$oldTag', '$newTag')" + senderColumn = "REPLACE($senderColumn, '$oldTag', '$newTag')" + } + + SettingUtils.smsTemplate = smsTemplate + + val updateRuleSql = "UPDATE Rule SET sms_template = $ruleColumn WHERE sms_template != ''" + Log.d(App.TAG, "updateRuleSql: $updateRuleSql") + Core.rule.replaceTags(updateRuleSql) + + val updateSenderSql = "UPDATE Sender SET json_setting = $senderColumn WHERE type NOT IN (4, 5, 6, 7, 8, 14)" + Log.d(App.TAG, "updateSenderSql: $updateSenderSql") + Core.sender.replaceTags(updateSenderSql) + }*/ } init { 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 31551a6e..d73160e0 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 @@ -77,6 +77,8 @@ const val SP_SMS_TEMPLATE = "sms_template" const val SP_PURE_CLIENT_MODE = "enable_pure_client_mode" const val SP_PURE_TASK_MODE = "enable_pure_task_mode" const val SP_DEBUG_MODE = "enable_debug_mode" + +//const val SP_IS_FLOW_SYSTEM_LANGUAGE = "is_flow_system_language" const val SP_LOCATION = "enable_location" const val SP_LOCATION_ACCURACY = "location_accuracy" const val SP_LOCATION_POWER_REQUIREMENT = "location_power_requirement" @@ -263,4 +265,31 @@ const val SP_LOCATION_INFO_NEW = "location_info_new" const val SP_LOCK_SCREEN_ACTION = "lock_screen_action" //SIM卡已准备就绪时,延迟5秒(给够搜索信号时间)才执行任务 -const val DELAY_TIME_AFTER_SIM_READY = 5000L \ No newline at end of file +const val DELAY_TIME_AFTER_SIM_READY = 5000L + +//切换语言需要替换的自定义模板标签列表 +val TAG_LANG = arrayOf("zh_CN", "zh_TW", "en") +val TAG_LIST = arrayOf( + mapOf("zh_CN" to "{{来源号码}}", "zh_TW" to "{{來源號碼}}", "en" to "{{FROM}}"), + mapOf("zh_CN" to "{{短信内容}}", "zh_TW" to "{{簡訊內容}}", "en" to "{{SMS}}"), + mapOf("zh_CN" to "{{APP包名}}", "zh_TW" to "{{APP包名}}", "en" to "{{PACKAGE_NAME}}"), + mapOf("zh_CN" to "{{APP名称}}", "zh_TW" to "{{APP名稱}}", "en" to "{{APP_NAME}}"), + mapOf("zh_CN" to "{{通知内容}}", "zh_TW" to "{{通知內容}}", "en" to "{{MSG}}"), + mapOf("zh_CN" to "{{卡槽信息}}", "zh_TW" to "{{卡槽信息}}", "en" to "{{CARD_SLOT}}"), + mapOf("zh_CN" to "{{卡槽主键}}", "zh_TW" to "{{卡槽主鍵}}", "en" to "{{CARD_SUBID}}"), + mapOf("zh_CN" to "{{接收时间}}", "zh_TW" to "{{接收時間}}", "en" to "{{RECEIVE_TIME}}"), + mapOf("zh_CN" to "{{当前时间}}", "zh_TW" to "{{當前時間}}", "en" to "{{CURRENT_TIME}}"), + mapOf("zh_CN" to "{{设备名称}}", "zh_TW" to "{{設備名稱}}", "en" to "{{DEVICE_NAME}}"), + mapOf("zh_CN" to "{{当前应用版本号}}", "zh_TW" to "{{當前應用版本號}}", "en" to "{{APP_VERSION}}"), + mapOf("zh_CN" to "{{通知标题}}", "zh_TW" to "{{通知標題}}", "en" to "{{TITLE}}"), + mapOf("zh_CN" to "{{通知Scheme}}", "zh_TW" to "{{通知Scheme}}", "en" to "{{SCHEME}}"), + mapOf("zh_CN" to "{{通话类型}}", "zh_TW" to "{{通話類型}}", "en" to "{{CALL_TYPE}}"), + mapOf("zh_CN" to "{{定位信息}}", "zh_TW" to "{{定位信息}}", "en" to "{{LOCATION}}"), + mapOf("zh_CN" to "{{定位信息_经度}}", "zh_TW" to "{{定位信息_經度}}", "en" to "{{LOCATION_LONGITUDE}}"), + mapOf("zh_CN" to "{{定位信息_纬度}}", "zh_TW" to "{{定位信息_緯度}}", "en" to "{{LOCATION_LATITUDE}}"), + mapOf("zh_CN" to "{{定位信息_地址}}", "zh_TW" to "{{定位信息_地址}}", "en" to "{{LOCATION_ADDRESS}}"), + mapOf("zh_CN" to "{{电池电量}}", "zh_TW" to "{{電池電量}}", "en" to "{{BATTERY_PCT}}"), + mapOf("zh_CN" to "{{电池状态}}", "zh_TW" to "{{電池狀態}}", "en" to "{{BATTERY_STATUS}}"), + mapOf("zh_CN" to "{{充电方式}}", "zh_TW" to "{{充電方式}}", "en" to "{{BATTERY_PLUGGED}}"), + mapOf("zh_CN" to "{{电池信息}}", "zh_TW" to "{{電池信息}}", "en" to "{{BATTERY_INFO}}") +) diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt index 3f38bf07..cbe8aafa 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt @@ -140,6 +140,8 @@ class SettingUtils private constructor() { //设置位置更新最小距离(单位:米);默认距离:0米 var locationMinDistance: Int by SharedPreference(SP_LOCATION_MIN_DISTANCE, 0) + //是否跟随系统语言 + //var isFlowSystemLanguage: Boolean by SharedPreference(SP_IS_FLOW_SYSTEM_LANGUAGE, false) } init { diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 8a5e8d83..e1afc54f 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -1534,6 +1534,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" + android:gravity="center_vertical" android:orientation="vertical"> Alarm Resend Message Resend forwarded records since N hours ago, 0=ALL - Resend forwarding records since %s hours ago for %s + Resend forwarding records since %s hours ago for %s At least one "Original Result" must be selected Second diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 41568f0c..a54b37ec 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -609,28 +609,28 @@ 成功 失败 处理中 - {{来源号码}} - {{短信内容}} - {{APP包名}} - {{APP名称}} - {{通知内容}} - {{卡槽信息}} - {{卡槽主键}} - {{接收时间}} - {{当前时间}} - {{设备名称}} - {{当前应用版本号}} - {{通知标题}} - {{通知Scheme}} - {{通话类型}} - {{定位信息}} - {{定位信息_经度}} - {{定位信息_纬度}} - {{定位信息_地址}} - {{电池电量}} - {{电池状态}} - {{充电方式}} - {{电池信息}} + {{FROM}} + {{SMS}} + {{PACKAGE_NAME}} + {{APP_NAME}} + {{MSG}} + {{CARD_SLOT}} + {{CARD_SUBID}} + {{RECEIVE_TIME}} + {{CURRENT_TIME}} + {{DEVICE_NAME}} + {{APP_VERSION}} + {{TITLE}} + {{SCHEME}} + {{CALL_TYPE}} + {{LOCATION}} + {{LOCATION_LONGITUDE}} + {{LOCATION_LATITUDE}} + {{LOCATION_ADDRESS}} + {{BATTERY_PCT}} + {{BATTERY_STATUS}} + {{BATTERY_PLUGGED}} + {{BATTERY_INFO}} {{UID}} {{IPV4}} {{IPV6}} @@ -1195,7 +1195,7 @@ 控制HttpServer的启动/停止,并支持启用/禁用功能 清理日志 批量删除N天前的转发记录、删除缓存等 - 批量删除N天前的转发记录、删除缓存等 + 批量删除 %s 天前的转发记录、删除缓存等 通用设置 控制【通用设置】的配置开关 启停规则 @@ -1206,7 +1206,7 @@ 声音警报 重发消息 自动重发N小时以来的转发记录,0=全部 - 自动重发%s小时以来%s的转发记录 + 自动重发%s小时以来%s的转发记录 必须至少选择一个【原转发状态】 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index ac68c90a..e96966e1 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -609,28 +609,28 @@ 成功 失敗 處理中 - {{來源號碼}} - {{簡訊內容}} - {{APP包名}} - {{APP名稱}} - {{通知內容}} - {{卡槽信息}} - {{卡槽主鍵}} - {{接收時間}} - {{當前時間}} - {{設備名稱}} - {{當前應用版本號}} - {{通知標題}} - {{通知Scheme}} - {{通話類型}} - {{定位信息}} - {{定位信息_經度}} - {{定位信息_緯度}} - {{定位信息_地址}} - {{電池電量}} - {{電池狀態}} - {{充電方式}} - {{電池信息}} + {{FROM}} + {{SMS}} + {{PACKAGE_NAME}} + {{APP_NAME}} + {{MSG}} + {{CARD_SLOT}} + {{CARD_SUBID}} + {{RECEIVE_TIME}} + {{CURRENT_TIME}} + {{DEVICE_NAME}} + {{APP_VERSION}} + {{TITLE}} + {{SCHEME}} + {{CALL_TYPE}} + {{LOCATION}} + {{LOCATION_LONGITUDE}} + {{LOCATION_LATITUDE}} + {{LOCATION_ADDRESS}} + {{BATTERY_PCT}} + {{BATTERY_STATUS}} + {{BATTERY_PLUGGED}} + {{BATTERY_INFO}} {{UID}} {{IPV4}} {{IPV6}} @@ -1195,7 +1195,7 @@ 控制HttpServer的啟動/停止,並支持啟用/禁用功能 清理日誌 批量刪除N天前的轉發記錄、刪除快取等 - 批量刪除N天前的轉發記錄、刪除快取等 + 批量刪除 %s 天前的轉發記錄、刪除快取等 通用設置 控制「通用設置」的設定開關 啟停規則 @@ -1206,7 +1206,7 @@ 聲音警報 重發消息 自動重發N小時以來的轉發記錄,0=全部 - 自動重發%s小時以來%s的轉發記錄 + 自動重發%s小時以來%s的轉發記錄 必须至少选择一個「原轉發狀態」 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9fec3ba0..e2eb04ab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1195,7 +1195,7 @@ 控制HttpServer的启动/停止,并支持启用/禁用功能 清理日志 批量删除N天前的转发记录、删除缓存等 - 批量删除N天前的转发记录、删除缓存等 + 批量删除 %s 天前的转发记录、删除缓存等 通用设置 控制【通用设置】的配置开关 启停规则 @@ -1206,7 +1206,7 @@ 播放音乐提醒 重发消息 自动重发N小时以来的转发记录,0=全部 - 自动重发%s小时以来%s的转发记录 + 自动重发%s小时以来%s的转发记录 必须至少选择一个【原转发状态】