diff --git a/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt b/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt index 672f0d4..019dc87 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt @@ -88,6 +88,16 @@ object FrameworkHooker : YukiBaseHooker() { } } + /** 语言区域改变广播接收器 */ + private val localeChangedReceiver by lazy { + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + /** 刷新模块 Resources 缓存 */ + refreshModuleAppResources() + } + } + } + /** * 注册广播接收器 * @param context 实例 @@ -95,9 +105,18 @@ object FrameworkHooker : YukiBaseHooker() { private fun registerReceiver(context: Context) { if (isRegisterReceiver) return context.registerReceiver(userPresentReceiver, IntentFilter().apply { addAction(Intent.ACTION_USER_PRESENT) }) + context.registerReceiver(localeChangedReceiver, IntentFilter().apply { addAction(Intent.ACTION_LOCALE_CHANGED) }) isRegisterReceiver = true } + /** + * 获取 I18n 字符串 + * @param resId 模块资源 Id + * @param objArrs 格式化数组 + * @return [String] + */ + private fun string(resId: Int, vararg objArrs: Any) = moduleAppResources.getString(resId, *objArrs) + /** * 创建对话框按钮 * @param context 实例 @@ -208,47 +227,47 @@ object FrameworkHooker : YukiBaseHooker() { android.R.style.Theme_Material_Dialog else android.R.style.Theme_Material_Light_Dialog ).create().apply { - setTitle("$appName ${if (isRepeating) "屡次停止运行" else "已停止运行"}") + setTitle(string(if (isRepeating) R.string.aerr_repeated_title else R.string.aerr_title, appName)) setView(LinearLayout(context).apply { orientation = LinearLayout.VERTICAL /** 应用信息按钮 */ val appInfoButton = - createButtonItem(context, R.drawable.ic_baseline_info, content = "应用信息") { + createButtonItem(context, R.drawable.ic_baseline_info, string(R.string.app_info)) { cancel() context.openSelfSetting(packageName) } /** 关闭应用按钮 */ val closeAppButton = - createButtonItem(context, R.drawable.ic_baseline_close, content = "关闭应用") { cancel() } + createButtonItem(context, R.drawable.ic_baseline_close, string(R.string.close_app)) { cancel() } /** 重新打开按钮 */ val reOpenButton = - createButtonItem(context, R.drawable.ic_baseline_refresh, content = "重新打开") { + createButtonItem(context, R.drawable.ic_baseline_refresh, string(R.string.reopen_app)) { cancel() context.openApp(packageName) } /** 错误详情按钮 */ val errorDetailButton = - createButtonItem(context, R.drawable.ic_baseline_bug_report, content = "错误详情") { + createButtonItem(context, R.drawable.ic_baseline_bug_report, string(R.string.error_detail)) { // TODO 待开发 } /** 忽略按钮 - 直到解锁 */ val ignoredUntilUnlockButton = - createButtonItem(context, R.drawable.ic_baseline_eject, content = "忽略(直到设备重新解锁)") { + createButtonItem(context, R.drawable.ic_baseline_eject, string(R.string.ignore_if_unlock)) { cancel() ignoredErrorsIfUnlockApps.add(packageName) - context.toast(msg = "忽略“$appName”的错误直到设备重新解锁") + context.toast(string(R.string.ignore_if_unlock_tip, appName)) } /** 忽略按钮 - 直到重启 */ val ignoredUntilRestartButton = - createButtonItem(context, R.drawable.ic_baseline_eject, content = "忽略(直到设备重新启动)") { + createButtonItem(context, R.drawable.ic_baseline_eject, string(R.string.ignore_if_restart)) { cancel() ignoredErrorsIfRestartApps.add(packageName) - context.toast(msg = "忽略“$appName”的错误直到设备重新启动") + context.toast(string(R.string.ignore_if_restart_tip, appName)) } /** 判断进程是否为 APP */ if (isApp) { diff --git a/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt b/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt index fd6449a..de8c4f9 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt @@ -72,7 +72,7 @@ fun Context.openSelfSetting(packageName: String = this.packageName) = runCatchin action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS data = Uri.fromParts("package", packageName, null) }) -}.onFailure { toast(msg = "无法打开 $packageName 的设置界面") } +}.onFailure { toast(msg = "Cannot open '$packageName'") } /** * 当前 APP 是否可被启动 @@ -89,4 +89,4 @@ fun Context.openApp(packageName: String = this.packageName) = runCatching { startActivity(packageManager.getLaunchIntentForPackage(packageName)?.apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK }) -}.onFailure { toast(msg = "无法启动 $packageName") } \ No newline at end of file +}.onFailure { toast(msg = "Cannot start '$packageName'") } \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml new file mode 100644 index 0000000..ffc50e2 --- /dev/null +++ b/app/src/main/res/values-ja/strings.xml @@ -0,0 +1,16 @@ + + + 例外追跡 + ネイティブFCダイアログに機能を追加し、中国の国内カスタムROMがFCダイアログを削除する問題を修正して、Android開発者のエクスペリエンスを向上させます。 + アプリ情報 + 再開する + エラーの詳細 + 無視(ロックが解除されるまで) + 無視(システイムが再起動するまで) + アプリを閉じる + %1$s がエラー + %1$s が再びエラー + システイムが再起動するまで、「%1$s」のエラーを無視します + ロックが解除されるまで、「%1$s」のエラーを無視します + 戻る + \ No newline at end of file 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 0000000..0286a64 --- /dev/null +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,16 @@ + + + 异常跟踪 + 为原生 FC 对话框增加更多功能并修复国内定制 ROM 删除 FC 对话框的问题,给 Android 开发者带来更好的体验。\\n开发者:酷安 @星夜不荟 + 应用信息 + 重新打开 + 错误详情 + 忽略(直到设备重新解锁) + 忽略(直到设备重新启动) + 关闭应用 + %1$s 已停止运行 + %1$s 屡次停止运行 + 忽略“%1$s”的错误直到设备重新解锁 + 忽略“%1$s”的错误直到设备重新启动 + 返回 + \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000..d780ce5 --- /dev/null +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -0,0 +1,16 @@ + + + 異常追綜 + 為原生 FC 對話框增加更多功能並修復中國大陸定制 ROM 刪除 FC 對話框的問題,給 Android 開發者帶來更好的體驗。 \\n開發者:酷安 @星夜不薈 + 程式情報 + 重新開啟 + 異常詳解 + 忽略(直到設備重新開屏) + 忽略(直到設備重新開機) + 結束程式 + %1$s 已停止運作 + %1$s 屢次停止運作 + 忽略“%1$s”的錯誤直到設備重新開屏 + 忽略“%1$s”的錯誤直到設備重新開機 + 回退 + \ No newline at end of file diff --git a/app/src/main/res/values-zh-rMO/strings.xml b/app/src/main/res/values-zh-rMO/strings.xml new file mode 100644 index 0000000..626e18d --- /dev/null +++ b/app/src/main/res/values-zh-rMO/strings.xml @@ -0,0 +1,16 @@ + + + 異常跟踪 + 為原生 FC 對話框增加更多功能並修復中國大陸定制 ROM 刪除 FC 對話框的問題,給 Android 開發者帶來更好的體驗。 \\n開發者:酷安 @星夜不薈 + 程式詳情 + 重新開啟 + 異常詳解 + 忽略(直到設備重新開屏) + 忽略(直到設備重新開機) + 結束程式 + %1$s 已停止運作 + %1$s 屢次停止運作 + 忽略“%1$s”的錯誤直到設備重新開屏 + 忽略“%1$s”的錯誤直到設備重新開機 + 回退 + \ No newline at end of file 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 0000000..aa1729a --- /dev/null +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,16 @@ + + + 異常調查 + 為原生 FC 對話框增加更多功能並修復中國大陸定制 ROM 刪除 FC 對話框的問題,給 Android 開發者帶來更好的體驗。 \\n開發者:酷安 @星夜不薈 + 程式情報 + 重新開啟 + 異常詳解 + 忽略(直到設備重新開屏) + 忽略(直到設備重新開機) + 結束程式 + %1$s 已停止運作 + %1$s 屢次停止運作 + 忽略“%1$s”的錯誤直到設備重新開屏 + 忽略“%1$s”的錯誤直到設備重新開機 + 回退 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f10bcf3..d40b09d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,15 @@ - 异常跟踪 - 为原生 FC 对话框增加更多功能并修复国内定制 ROM 删除 FC 对话框的问题,给 Android 开发者带来更好的体验。\n开发者:酷安 @星夜不荟 + AppErrorsTracking + Added more features to app\'s crash dialog, fixed custom rom deleted dialog, the best experience to Android developer. + App\'s Info + Reopen App + Error Detail + Mute until device unlocks + Mute until device restarts + Close App + %1$s has stopped + %1$s keeps stopping + Ignore errors for \'%1$s\' until device is re-unlocked + Ignore errors for \'%1$s\' until device reboots + Back \ No newline at end of file