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