优化:自定义模板可用变量统一成英文标签

This commit is contained in:
pppscn 2024-02-24 12:07:24 +08:00
parent e8012e8e21
commit c4f298ebe8
16 changed files with 205 additions and 78 deletions

View File

@ -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")

View File

@ -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
}
}

View File

@ -58,4 +58,6 @@ interface RuleDao {
@Query("SELECT * FROM Rule ORDER BY id DESC")
fun getAll(): Single<List<Rule>>
@RawQuery
fun replaceTags(query: SupportSQLiteQuery): Int
}

View File

@ -63,4 +63,7 @@ interface SenderDao {
@Query("SELECT COUNT(id) FROM Sender WHERE status = 1")
fun getOnCount(): Flow<Long>
@RawQuery
fun replaceTags(query: SupportSQLiteQuery): Int
}

View File

@ -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)
}
}

View File

@ -46,4 +46,9 @@ class SenderRepository(private val senderDao: SenderDao) {
val count: Flow<Long> = senderDao.getOnCount()
fun replaceTags(sql: String): Int {
val query = SimpleSQLiteQuery(sql)
return senderDao.replaceTags(query)
}
}

View File

@ -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
}
}
}

View File

@ -1020,11 +1020,12 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), 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<FragmentSettingsBinding?>(), 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()
}
}
}

View File

@ -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 {

View File

@ -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
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}}")
)

View File

@ -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 {

View File

@ -1534,6 +1534,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
@ -1781,6 +1782,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView

View File

@ -1205,7 +1205,7 @@
<string name="task_alarm_tips">Alarm</string>
<string name="task_resend">Resend Message</string>
<string name="task_resend_tips">Resend forwarded records since N hours ago, 0=ALL</string>
<string name="task_resend_desc">Resend forwarding records since %s hours ago for %s</string>
<string name="task_resend_desc" formatted="false">Resend forwarding records since %s hours ago for %s</string>
<string name="task_resend_error">At least one "Original Result" must be selected</string>
<string name="second">Second</string>

View File

@ -609,28 +609,28 @@
<string name="success">成功</string>
<string name="failed">失败</string>
<string name="processing">处理中</string>
<string name="tag_from">{{来源号码}}</string>
<string name="tag_sms">{{短信内容}}</string>
<string name="tag_package_name">{{APP包名}}</string>
<string name="tag_app_name">{{APP名称}}</string>
<string name="tag_msg">{{通知内容}}</string>
<string name="tag_card_slot">{{卡槽信息}}</string>
<string name="tag_card_subid">{{卡槽主键}}</string>
<string name="tag_receive_time">{{接收时间}}</string>
<string name="tag_current_time">{{当前时间}}</string>
<string name="tag_device_name">{{设备名称}}</string>
<string name="tag_app_version">{{当前应用版本号}}</string>
<string name="tag_title">{{通知标题}}</string>
<string name="tag_scheme">{{通知Scheme}}</string>
<string name="tag_call_type">{{通话类型}}</string>
<string name="tag_location">{{定位信息}}</string>
<string name="tag_location_longitude">{{定位信息_经度}}</string>
<string name="tag_location_latitude">{{定位信息_纬度}}</string>
<string name="tag_location_address">{{定位信息_地址}}</string>
<string name="tag_battery_pct">{{电池电量}}</string>
<string name="tag_battery_status">{{电池状态}}</string>
<string name="tag_battery_plugged">{{充电方式}}</string>
<string name="tag_battery_info">{{电池信息}}</string>
<string name="tag_from">{{FROM}}</string>
<string name="tag_sms">{{SMS}}</string>
<string name="tag_package_name">{{PACKAGE_NAME}}</string>
<string name="tag_app_name">{{APP_NAME}}</string>
<string name="tag_msg">{{MSG}}</string>
<string name="tag_card_slot">{{CARD_SLOT}}</string>
<string name="tag_card_subid">{{CARD_SUBID}}</string>
<string name="tag_receive_time">{{RECEIVE_TIME}}</string>
<string name="tag_current_time">{{CURRENT_TIME}}</string>
<string name="tag_device_name">{{DEVICE_NAME}}</string>
<string name="tag_app_version">{{APP_VERSION}}</string>
<string name="tag_title">{{TITLE}}</string>
<string name="tag_scheme">{{SCHEME}}</string>
<string name="tag_call_type">{{CALL_TYPE}}</string>
<string name="tag_location">{{LOCATION}}</string>
<string name="tag_location_longitude">{{LOCATION_LONGITUDE}}</string>
<string name="tag_location_latitude">{{LOCATION_LATITUDE}}</string>
<string name="tag_location_address">{{LOCATION_ADDRESS}}</string>
<string name="tag_battery_pct">{{BATTERY_PCT}}</string>
<string name="tag_battery_status">{{BATTERY_STATUS}}</string>
<string name="tag_battery_plugged">{{BATTERY_PLUGGED}}</string>
<string name="tag_battery_info">{{BATTERY_INFO}}</string>
<string name="tag_uid">{{UID}}</string>
<string name="tag_ipv4">{{IPV4}}</string>
<string name="tag_ipv6">{{IPV6}}</string>
@ -1195,7 +1195,7 @@
<string name="task_http_server_tips">控制HttpServer的启动/停止,并支持启用/禁用功能</string>
<string name="task_cleaner">清理日志</string>
<string name="task_cleaner_tips">批量删除N天前的转发记录、删除缓存等</string>
<string name="task_cleaner_desc">批量删除N天前的转发记录、删除缓存等</string>
<string name="task_cleaner_desc">批量删除 %s 天前的转发记录、删除缓存等</string>
<string name="task_settings">通用设置</string>
<string name="task_settings_tips">控制【通用设置】的配置开关</string>
<string name="task_rule">启停规则</string>
@ -1206,7 +1206,7 @@
<string name="task_alarm_tips">声音警报</string>
<string name="task_resend">重发消息</string>
<string name="task_resend_tips">自动重发N小时以来的转发记录0=全部</string>
<string name="task_resend_desc">自动重发%s小时以来%s的转发记录</string>
<string name="task_resend_desc" formatted="false">自动重发%s小时以来%s的转发记录</string>
<string name="task_resend_error">必须至少选择一个【原转发状态】</string>
<string name="second"></string>

View File

@ -609,28 +609,28 @@
<string name="success">成功</string>
<string name="failed">失敗</string>
<string name="processing">處理中</string>
<string name="tag_from">{{來源號碼}}</string>
<string name="tag_sms">{{簡訊內容}}</string>
<string name="tag_package_name">{{APP包名}}</string>
<string name="tag_app_name">{{APP名稱}}</string>
<string name="tag_msg">{{通知內容}}</string>
<string name="tag_card_slot">{{卡槽信息}}</string>
<string name="tag_card_subid">{{卡槽主鍵}}</string>
<string name="tag_receive_time">{{接收時間}}</string>
<string name="tag_current_time">{{當前時間}}</string>
<string name="tag_device_name">{{設備名稱}}</string>
<string name="tag_app_version">{{當前應用版本號}}</string>
<string name="tag_title">{{通知標題}}</string>
<string name="tag_scheme">{{通知Scheme}}</string>
<string name="tag_call_type">{{通話類型}}</string>
<string name="tag_location">{{定位信息}}</string>
<string name="tag_location_longitude">{{定位信息_經度}}</string>
<string name="tag_location_latitude">{{定位信息_緯度}}</string>
<string name="tag_location_address">{{定位信息_地址}}</string>
<string name="tag_battery_pct">{{電池電量}}</string>
<string name="tag_battery_status">{{電池狀態}}</string>
<string name="tag_battery_plugged">{{充電方式}}</string>
<string name="tag_battery_info">{{電池信息}}</string>
<string name="tag_from">{{FROM}}</string>
<string name="tag_sms">{{SMS}}</string>
<string name="tag_package_name">{{PACKAGE_NAME}}</string>
<string name="tag_app_name">{{APP_NAME}}</string>
<string name="tag_msg">{{MSG}}</string>
<string name="tag_card_slot">{{CARD_SLOT}}</string>
<string name="tag_card_subid">{{CARD_SUBID}}</string>
<string name="tag_receive_time">{{RECEIVE_TIME}}</string>
<string name="tag_current_time">{{CURRENT_TIME}}</string>
<string name="tag_device_name">{{DEVICE_NAME}}</string>
<string name="tag_app_version">{{APP_VERSION}}</string>
<string name="tag_title">{{TITLE}}</string>
<string name="tag_scheme">{{SCHEME}}</string>
<string name="tag_call_type">{{CALL_TYPE}}</string>
<string name="tag_location">{{LOCATION}}</string>
<string name="tag_location_longitude">{{LOCATION_LONGITUDE}}</string>
<string name="tag_location_latitude">{{LOCATION_LATITUDE}}</string>
<string name="tag_location_address">{{LOCATION_ADDRESS}}</string>
<string name="tag_battery_pct">{{BATTERY_PCT}}</string>
<string name="tag_battery_status">{{BATTERY_STATUS}}</string>
<string name="tag_battery_plugged">{{BATTERY_PLUGGED}}</string>
<string name="tag_battery_info">{{BATTERY_INFO}}</string>
<string name="tag_uid">{{UID}}</string>
<string name="tag_ipv4">{{IPV4}}</string>
<string name="tag_ipv6">{{IPV6}}</string>
@ -1195,7 +1195,7 @@
<string name="task_http_server_tips">控制HttpServer的啟動/停止,並支持啟用/禁用功能</string>
<string name="task_cleaner">清理日誌</string>
<string name="task_cleaner_tips">批量刪除N天前的轉發記錄、刪除快取等</string>
<string name="task_cleaner_desc">批量刪除N天前的轉發記錄、刪除快取等</string>
<string name="task_cleaner_desc">批量刪除 %s 天前的轉發記錄、刪除快取等</string>
<string name="task_settings">通用設置</string>
<string name="task_settings_tips">控制「通用設置」的設定開關</string>
<string name="task_rule">啟停規則</string>
@ -1206,7 +1206,7 @@
<string name="task_alarm_tips">聲音警報</string>
<string name="task_resend">重發消息</string>
<string name="task_resend_tips">自動重發N小時以來的轉發記錄0=全部</string>
<string name="task_resend_desc">自動重發%s小時以來%s的轉發記錄</string>
<string name="task_resend_desc" formatted="false">自動重發%s小時以來%s的轉發記錄</string>
<string name="task_resend_error">必须至少选择一個「原轉發狀態」</string>
<string name="second"></string>

View File

@ -1195,7 +1195,7 @@
<string name="task_http_server_tips">控制HttpServer的启动/停止,并支持启用/禁用功能</string>
<string name="task_cleaner">清理日志</string>
<string name="task_cleaner_tips">批量删除N天前的转发记录、删除缓存等</string>
<string name="task_cleaner_desc">批量删除N天前的转发记录、删除缓存等</string>
<string name="task_cleaner_desc">批量删除 %s 天前的转发记录、删除缓存等</string>
<string name="task_settings">通用设置</string>
<string name="task_settings_tips">控制【通用设置】的配置开关</string>
<string name="task_rule">启停规则</string>
@ -1206,7 +1206,7 @@
<string name="task_alarm_tips">播放音乐提醒</string>
<string name="task_resend">重发消息</string>
<string name="task_resend_tips">自动重发N小时以来的转发记录0=全部</string>
<string name="task_resend_desc">自动重发%s小时以来%s的转发记录</string>
<string name="task_resend_desc" formatted="false">自动重发%s小时以来%s的转发记录</string>
<string name="task_resend_error">必须至少选择一个【原转发状态】</string>
<string name="second"></string>