Support i18n

This commit is contained in:
2022-05-10 02:15:30 +08:00
parent b0787c1fa3
commit 174f7ab697
8 changed files with 123 additions and 13 deletions

View File

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

View File

@@ -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") }
}.onFailure { toast(msg = "Cannot start '$packageName'") }

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">例外追跡</string>
<string name="xposed_desc">ネイティブFCダイアログに機能を追加し、中国の国内カスタムROMがFCダイアログを削除する問題を修正して、Android開発者のエクスペリエンスを向上させます。</string>
<string name="app_info">アプリ情報</string>
<string name="reopen_app">再開する</string>
<string name="error_detail">エラーの詳細</string>
<string name="ignore_if_unlock">無視(ロックが解除されるまで)</string>
<string name="ignore_if_restart">無視(システイムが再起動するまで)</string>
<string name="close_app">アプリを閉じる</string>
<string name="aerr_title">%1$s がエラー</string>
<string name="aerr_repeated_title">%1$s が再びエラー</string>
<string name="ignore_if_restart_tip">システイムが再起動するまで、「%1$s」のエラーを無視します</string>
<string name="ignore_if_unlock_tip">ロックが解除されるまで、「%1$s」のエラーを無視します</string>
<string name="back">戻る</string>
</resources>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">异常跟踪</string>
<string name="xposed_desc">为原生 FC 对话框增加更多功能并修复国内定制 ROM 删除 FC 对话框的问题,给 Android 开发者带来更好的体验。\\n开发者酷安 @星夜不荟</string>
<string name="app_info">应用信息</string>
<string name="reopen_app">重新打开</string>
<string name="error_detail">错误详情</string>
<string name="ignore_if_unlock">忽略(直到设备重新解锁)</string>
<string name="ignore_if_restart">忽略(直到设备重新启动)</string>
<string name="close_app">关闭应用</string>
<string name="aerr_title">%1$s 已停止运行</string>
<string name="aerr_repeated_title">%1$s 屡次停止运行</string>
<string name="ignore_if_unlock_tip">忽略“%1$s”的错误直到设备重新解锁</string>
<string name="ignore_if_restart_tip">忽略“%1$s”的错误直到设备重新启动</string>
<string name="back">返回</string>
</resources>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">異常追綜</string>
<string name="xposed_desc">為原生 FC 對話框增加更多功能並修復中國大陸定制 ROM 刪除 FC 對話框的問題,給 Android 開發者帶來更好的體驗。 \\n開發者酷安 @星夜不薈</string>
<string name="app_info">程式情報</string>
<string name="reopen_app">重新開啟</string>
<string name="error_detail">異常詳解</string>
<string name="ignore_if_unlock">忽略(直到設備重新開屏)</string>
<string name="ignore_if_restart">忽略(直到設備重新開機)</string>
<string name="close_app">結束程式</string>
<string name="aerr_title">%1$s 已停止運作</string>
<string name="aerr_repeated_title">%1$s 屢次停止運作</string>
<string name="ignore_if_unlock_tip">忽略“%1$s”的錯誤直到設備重新開屏</string>
<string name="ignore_if_restart_tip">忽略“%1$s”的錯誤直到設備重新開機</string>
<string name="back">回退</string>
</resources>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">異常跟踪</string>
<string name="xposed_desc">為原生 FC 對話框增加更多功能並修復中國大陸定制 ROM 刪除 FC 對話框的問題,給 Android 開發者帶來更好的體驗。 \\n開發者酷安 @星夜不薈</string>
<string name="app_info">程式詳情</string>
<string name="reopen_app">重新開啟</string>
<string name="error_detail">異常詳解</string>
<string name="ignore_if_unlock">忽略(直到設備重新開屏)</string>
<string name="ignore_if_restart">忽略(直到設備重新開機)</string>
<string name="close_app">結束程式</string>
<string name="aerr_title">%1$s 已停止運作</string>
<string name="aerr_repeated_title">%1$s 屢次停止運作</string>
<string name="ignore_if_unlock_tip">忽略“%1$s”的錯誤直到設備重新開屏</string>
<string name="ignore_if_restart_tip">忽略“%1$s”的錯誤直到設備重新開機</string>
<string name="back">回退</string>
</resources>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">異常調查</string>
<string name="xposed_desc">為原生 FC 對話框增加更多功能並修復中國大陸定制 ROM 刪除 FC 對話框的問題,給 Android 開發者帶來更好的體驗。 \\n開發者酷安 @星夜不薈</string>
<string name="app_info">程式情報</string>
<string name="reopen_app">重新開啟</string>
<string name="error_detail">異常詳解</string>
<string name="ignore_if_unlock">忽略(直到設備重新開屏)</string>
<string name="ignore_if_restart">忽略(直到設備重新開機)</string>
<string name="close_app">結束程式</string>
<string name="aerr_title">%1$s 已停止運作</string>
<string name="aerr_repeated_title">%1$s 屢次停止運作</string>
<string name="ignore_if_unlock_tip">忽略“%1$s”的錯誤直到設備重新開屏</string>
<string name="ignore_if_restart_tip">忽略“%1$s”的錯誤直到設備重新開機</string>
<string name="back">回退</string>
</resources>

View File

@@ -1,4 +1,15 @@
<resources>
<string name="app_name">异常跟踪</string>
<string name="xposed_desc">为原生 FC 对话框增加更多功能并修复国内定制 ROM 删除 FC 对话框的问题,给 Android 开发者带来更好的体验。\n开发者酷安 @星夜不荟</string>
<string name="app_name">AppErrorsTracking</string>
<string name="xposed_desc">Added more features to app\'s crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.</string>
<string name="app_info">App\'s Info</string>
<string name="reopen_app">Reopen App</string>
<string name="error_detail">Error Detail</string>
<string name="ignore_if_unlock">Mute until device unlocks</string>
<string name="ignore_if_restart">Mute until device restarts</string>
<string name="close_app">Close App</string>
<string name="aerr_title">%1$s has stopped</string>
<string name="aerr_repeated_title">%1$s keeps stopping</string>
<string name="ignore_if_unlock_tip">Ignore errors for \'%1$s\' until device is re-unlocked</string>
<string name="ignore_if_restart_tip">Ignore errors for \'%1$s\' until device reboots</string>
<string name="back">Back</string>
</resources>