diff --git a/resources/language_pack/zh_CN.json b/resources/language_pack/zh_CN.json new file mode 100644 index 0000000..56f5992 --- /dev/null +++ b/resources/language_pack/zh_CN.json @@ -0,0 +1,98 @@ +{ + "launch_tip_in_content": "当你发现什么事情都没有发生时
也许你应该看看是否授予了Auto.js悬浮窗权限


建议使用 4.1.1 Alpha2 版本!
4.1.1 Alpha2 版本下载: https://github.com/Ericwyn/Auto.js/releases/tag/V4.1.1.Alpha2", + "launch_tip_force_exit": "强制退出", + "launch_tip_storage_on_android11": "安卓11不允许外部应用读取应用私有文件夹,乐谱文件夹移至 {0}", + + "op_loading_resources": "加载资源中...", + "op_user_agreement_title": "使用须知", + + "button_confirm": "确认", + "button_cancel": "取消", + + "sheet_detail_dialog_suggestion_locale": "建议弹奏地点:", + "sheet_detail_dialog_view_author_social_link": "查看作者:", + + "page_lc_title": "本地乐谱", + "page_lc_navigation_title": "本地乐谱", + "page_lc_sheet_item_info": "键数: {0} - BPM: {1}", + "page_lc_kc_title": "设置键位数", + "page_lc_kc_desc": "这是一个本地乐谱,请设置这个乐谱的键位数", + "page_lc_kc_8k": "8键位", + "page_lc_kc_15k": "15键位", + "page_lc_kc_set": "已将 {0} 设置为 {1} 键乐谱\n请再次点击弹奏按钮。\n长按乐谱以重新设置键位数。", + "page_lc_no_8k_set": "未设置 8 键键位坐标或坐标数据错误,请前往设置页设置键位坐标", + "page_lc_no_15k_set": "未设置 15 键键位坐标或坐标数据错误,请前往设置页设置键位坐标", + "page_lc_del_title": "删除文件", + "page_lc_del_desc": "确认要删除 {0} 吗?\n该操作不可恢复!", + "page_lc_import_title": "如何导入本地乐谱", + "page_lc_import_desc": "本地乐谱文件夹在{0}\n{1}\n将外部乐谱复制进这个文件夹即可\n\n注意:\nSkyStudio对乐谱的存储/读取使用{2}编码\n请确保外部乐谱的编码与SkyStudio使用的编码一致\n", + "page_lc_import_stand_document_folder": "Android标准文档文件夹", + "page_lc_import_sky_pri_storage_folder": "SkyStudio的乐谱存储位置", + "page_lc_kctip_title": "修改乐谱键位数", + "page_lc_kctip_desc": "版本15增加了对不同键位乐器(8键位和15键位)乐谱的支持,它们使用不同的坐标数据。\n当前已存储在本地的乐谱(外部导入的乐谱或在版本15之前从共享乐谱下载的乐谱),它们没有键位信息,SkyAutoPlayerScript无法确认它是8键位乐谱还是15键位乐谱。\n共享乐谱信息已更新,现在下载的共享乐谱它已经包含了乐谱键位信息,不需要再设置。\n点击开始弹奏按钮时,若无键位信息,则会弹出对话框以选择乐谱键位,SkyAutoPlayerScript会保存键位信息到乐谱。\n如果因为一些原因设置了错误的键位信息,可以长按乐谱来重新设置。\n\np.s.: 需要重新设置15键键位坐标。", + "page_lc_load_failed_title": "加载 {0} 失败", + "page_lc_load_failed_desc": "加载乐谱 {0} 失败\n\n原因:\n{1}\n\n请检查以下内容:\n{2}", + "page_lc_load_failed_r1": "谱子编码是否为UTF16-LE", + "page_lc_load_failed_r2": "谱子是否为未加密的JSON格式", + "page_lc_load_failed_r3": "谱子是否有JSON语法错误", + "page_lc_loading_sheet": "加载中: 共 {0} 首乐谱({1} 失败)", + + "page_sc_title": "共享乐谱", + "page_sc_navigation_title": "共享乐谱", + "page_sc_downloading": "下载乐谱中...", + "page_sc_analyzing": "解析乐谱中...", + "page_sc_download_success": "下载完成: {0}\n请在本地曲谱页面刷新", + "page_sc_download_failed": "下载 {0} 失败: {1}", + "page_sc_upload_title": "如何上传乐谱", + "page_sc_upload_desc": "共有两种方式可以上传乐谱:\n\n①酷安私信@StageGuard,发送时请附带简介,曲谱链接(百度云或其他云盘都可)\n②在github fork StageGuard/SkyAutoplayerScript\n在shared_sheets文件夹添加你的曲谱,并按照格式修改shared_sheets.json\n并提出 Pull Request 合并申请\n\n注:若是转载转载请注明原作者同意\n\n如果所有人都白嫖,那么这个列表将永远也不会扩充", + "page_sc_upload_open_coolapk": "打开酷安", + "page_sc_upload_open_github": "打开 Github", + "page_sc_upload_ca_not_exist": "无法打开酷安,应用不存在!", + "page_sc_announcement_title": "乐谱共享声明", + "page_sc_announcement_desc": "此列表共享的乐谱在\ngithub.com/StageGuard/SkyAutoPlayerScript\n均可以找到\n\n用户原创乐谱仅在SkyAutoplayerScript共享并使用,\n转载至其他平台请取得作者授权!\n\n转载在此共享列表的乐谱均会标明\n转载请注明原作者授权或遵循原作者意愿\n\n此声明没有强制执行性,这是个人素质的体现\n非法利益不可取", + "page_sc_announcement_confirm": "我已了解", + "page_sc_search_hint": "按回车开始搜索", + "page_sc_fetching_list": "获取列表中...", + + "page_setting_title": "设置", + "page_setting_navigation_title": "设置", + "page_setting_basic": "基础设置", + "page_setting_set_8key_coordinate": "设置8键盘键位坐标", + "page_setting_set_15key_coordinate": "设置15键盘键位坐标", + "page_setting_key_coordinate_saved": "坐标设置已保存至存储!", + "page_setting_random_and_continuate_play": "连续随机播放", + "page_setting_show_broken_sheet": "显示加载失败的乐谱", + "page_setting_show_storage_tip_on_android11": "启动脚本时显示存储提示", + "page_setting_set_theme": "设置主题色", + "page_setting_theme_light": "亮色", + "page_setting_theme_dark": "暗色", + "page_setting_about": "关于", + "page_setting_user_agreement": "查看使用须知", + "page_setting_user_agreement_title": "使用须知", + "page_setting_show_license": "查看 LICENSE", + "page_setting_show_changelog": "查看更新日志", + "page_setting_changelog_title": "更新日志", + "page_setting_exit_script": "结束脚本运行", + + "gui_player_panel_tip": "拖动标题栏的标题文字来移动弹奏控制面板悬浮窗。", + "gui_player_penel_analyzing": "解析中...", + "gui_move_diamond_tip": "移动\"\u26d2\"至目标位置来设置第 {0} 个键坐标", + "gui_key_coordinate_is_set": "键 {0} 坐标已设置: [{1}, {2}]", + "gui_move_window_tip": "拖动标题栏的标题文字来移动悬浮窗位置。", + "gui_dialog_do_not_show_again": "不再显示", + + "res_updated": "SkyAutoPlayer已更新", + "res_updated_detail": "当前版本: {0} ← {1}\n\n更新日志: \n{2}", + "res_check_update_error": "版本检查失败,无法获取更新信息", + "res_loading_general": "加载资源中...", + "res_loading_detail": "加载资源中: {0}", + "res_loading_error": "加载失败: {0}", + "res_put_into_download_queue": "无本地资源,进入下载队列: {0}", + "res_load_successful": "资源加载完成", + "res_try_download": "第 {0} 次尝试下载资源,共需下载 {1} 项资源", + "res_downloading": "下载资源中: {0}", + "res_download_or_load_failed": "资源 {0} 下载/加载失败: {1}", + "res_download_failed": "以下资源下载失败:{0}", + "res_download_successful": "资源下载完成", + "res_error_while_downloading": "资源下载时发生了问题: {0}" +} \ No newline at end of file diff --git a/source/SkyAutoplayer.js b/source/SkyAutoplayer.js index f437400..21c128c 100644 --- a/source/SkyAutoplayer.js +++ b/source/SkyAutoplayer.js @@ -61,6 +61,15 @@ const error = function(text) { console.error("SkyAutoPlayer发生了一个错误,请酷安私信@StageGuard或在github中的StageGuard/SkyAutoPlayerScript新建Issue来反馈这个BUG!\n详细信息:" + text); }; +String.format = function() { + var s = arguments[0]; + for (var i = 0; i < arguments.length - 1; i++) { + var reg = new RegExp("\\{" + i + "\\}", "gm"); + s = s.replace(reg, arguments[i + 1]); + } + return s; +} + //Asynchronous load script threads.start(function() { @@ -386,10 +395,134 @@ config = { showFailedSheets: true, tipOnAndroidR: true, theme: "dark", - autoPlay: false + autoPlay: false, + lang: "zh_CN" }, bitmaps: {}, + + languages: { + zh_CN: { + launch_tip_in_content: "当你发现什么事情都没有发生时
也许你应该看看是否授予了Auto.js悬浮窗权限


建议使用 4.1.1 Alpha2 版本!
4.1.1 Alpha2 版本下载: https://github.com/Ericwyn/Auto.js/releases/tag/V4.1.1.Alpha2", + launch_tip_force_exit: "强制退出", + launch_tip_storage_on_android11: "安卓11不允许外部应用读取应用私有文件夹,乐谱文件夹移至 {0}", + + op_loading_resources: "加载资源中...", + op_user_agreement_title: "使用须知", + + button_confirm: "确认", + button_cancel: "取消", + + sheet_detail_dialog_suggestion_locale: "建议弹奏地点:", + sheet_detail_dialog_view_author_social_link: "查看作者:", + + page_lc_title: "本地乐谱", + page_lc_navigation_title: "本地乐谱", + page_lc_sheet_item_info: "键数: {0} - BPM: {1}", + page_lc_kc_title: "设置键位数", + page_lc_kc_desc: "这是一个本地乐谱,请设置这个乐谱的键位数", + page_lc_kc_8k: "8键位", + page_lc_kc_15k: "15键位", + page_lc_kc_set: "已将 {0} 设置为 {1} 键乐谱\n请再次点击弹奏按钮。\n长按乐谱以重新设置键位数。", + page_lc_no_8k_set: "未设置 8 键键位坐标或坐标数据错误,请前往设置页设置键位坐标", + page_lc_no_15k_set: "未设置 15 键键位坐标或坐标数据错误,请前往设置页设置键位坐标", + page_lc_del_title: "删除文件", + page_lc_del_desc: "确认要删除 {0} 吗?\n该操作不可恢复!", + page_lc_import_title: "如何导入本地乐谱", + page_lc_import_desc: "本地乐谱文件夹在{0}\n" + + "{1}\n" + + "将外部乐谱复制进这个文件夹即可\n\n" + + "注意:\n" + + "SkyStudio对乐谱的存储/读取使用{2}编码\n" + + "请确保外部乐谱的编码与SkyStudio使用的编码一致\n", + page_lc_import_stand_document_folder: "Android标准文档文件夹", + page_lc_import_sky_pri_storage_folder: "SkyStudio的乐谱存储位置", + page_lc_kctip_title: "修改乐谱键位数", + page_lc_kctip_desc: "版本15增加了对不同键位乐器(8键位和15键位)乐谱的支持,它们使用不同的坐标数据。\n" + + "当前已存储在本地的乐谱(外部导入的乐谱或在版本15之前从共享乐谱下载的乐谱),它们没有键位信息,SkyAutoPlayerScript无法确认它是8键位乐谱还是15键位乐谱。\n" + + "共享乐谱信息已更新,现在下载的共享乐谱它已经包含了乐谱键位信息,不需要再设置。\n" + + "点击开始弹奏按钮时,若无键位信息,则会弹出对话框以选择乐谱键位,SkyAutoPlayerScript会保存键位信息到乐谱。\n" + + "如果因为一些原因设置了错误的键位信息,可以长按乐谱来重新设置。\n\n" + + "p.s.: 需要重新设置15键键位坐标。", + page_lc_load_failed_title: "加载 {0} 失败", + page_lc_load_failed_desc: "加载乐谱 {0} 失败\n\n原因:\n{1}\n\n请检查以下内容:\n{2}", + page_lc_load_failed_r1: "谱子编码是否为UTF16-LE", + page_lc_load_failed_r2: "谱子是否为未加密的JSON格式", + page_lc_load_failed_r3: "谱子是否有JSON语法错误", + page_lc_loading_sheet: "加载中: 共 {0} 首乐谱({1} 失败)", + + page_sc_title: "共享乐谱", + page_sc_navigation_title: "共享乐谱", + page_sc_downloading: "下载乐谱中...", + page_sc_analyzing: "解析乐谱中...", + page_sc_download_success: "下载完成: {0}\n请在本地曲谱页面刷新", + page_sc_download_failed: "下载 {0} 失败: {1}", + page_sc_upload_title: "如何上传乐谱", + page_sc_upload_desc: "共有两种方式可以上传乐谱:\n\n" + + "①酷安私信@StageGuard,发送时请附带简介,曲谱链接(百度云或其他云盘都可)\n" + + "②在github fork StageGuard/SkyAutoplayerScript\n" + + "在shared_sheets文件夹添加你的曲谱,并按照格式修改shared_sheets.json\n" + + "并提出 Pull Request 合并申请\n\n" + + "注:若是转载转载请注明原作者同意\n\n" + + "如果所有人都白嫖,那么这个列表将永远也不会扩充", + page_sc_upload_open_coolapk: "打开酷安", + page_sc_upload_open_github: "打开 Github", + page_sc_upload_ca_not_exist: "无法打开酷安,应用不存在!", + page_sc_announcement_title: "乐谱共享声明", + page_sc_announcement_desc: "此列表共享的乐谱在\ngithub.com/StageGuard/SkyAutoPlayerScript\n均可以找到\n\n" + + "用户原创乐谱仅在SkyAutoplayerScript共享并使用,\n" + + "转载至其他平台请取得作者授权!\n\n" + + "转载在此共享列表的乐谱均会标明\n" + + "转载请注明原作者授权或遵循原作者意愿\n\n" + + "此声明没有强制执行性,这是个人素质的体现\n" + + "非法利益不可取", + page_sc_announcement_confirm: "我已了解", + page_sc_search_hint: "按回车开始搜索", + page_sc_fetching_list: "获取列表中...", + + page_setting_title: "设置", + page_setting_navigation_title: "设置", + page_setting_basic: "基础设置", + page_setting_set_8key_coordinate: "设置8键盘键位坐标", + page_setting_set_15key_coordinate: "设置15键盘键位坐标", + page_setting_key_coordinate_saved: "坐标设置已保存至存储!", + page_setting_random_and_continuate_play: "连续随机播放", + page_setting_show_broken_sheet: "显示加载失败的乐谱", + page_setting_show_storage_tip_on_android11: "启动脚本时显示存储提示", + page_setting_set_theme: "设置主题色", + page_setting_theme_light: "亮色", + page_setting_theme_dark: "暗色", + page_setting_about: "关于", + page_setting_user_agreement: "查看使用须知", + page_setting_user_agreement_title: "使用须知", + page_setting_show_license: "查看 LICENSE", + page_setting_show_changelog: "查看更新日志", + page_setting_changelog_title: "更新日志", + page_setting_exit_script: "结束脚本运行", + + gui_player_panel_tip: "拖动标题栏的标题文字来移动弹奏控制面板悬浮窗。", + gui_player_penel_analyzing: "解析中...", + gui_move_diamond_tip: "移动\"\u26d2\"至目标位置来设置第 {0} 个键坐标", + gui_key_coordinate_is_set: "键 {0} 坐标已设置: [{1}, {2}]", + gui_move_window_tip: "拖动标题栏的标题文字来移动悬浮窗位置。", + gui_dialog_do_not_show_again: "不再显示", + + res_updated: "SkyAutoPlayer已更新", + res_updated_detail: "当前版本: {0} ← {1}\n\n更新日志: \n{2}", + res_check_update_error: "版本检查失败,无法获取更新信息", + res_loading_general: "加载资源中...", + res_loading_detail: "加载资源中: {0}", + res_loading_error: "加载失败: {0}", + res_put_into_download_queue: "无本地资源,进入下载队列: {0}", + res_load_successful: "资源加载完成", + res_try_download: "第 {0} 次尝试下载资源,共需下载 {1} 项资源", + res_downloading: "下载资源中: {0}", + res_download_or_load_failed: "资源 {0} 下载/加载失败: {1}", + res_download_failed: "以下资源下载失败:{0}", + res_download_successful: "资源下载完成", + res_error_while_downloading: "资源下载时发生了问题: {0}", + } + }, init: function() { this._global_storage = storages.create("StageGuard:SkyAutoPlayer:Config"); @@ -407,10 +540,11 @@ config = { this.values.tipOnAndroidR = this._global_storage.get("tip_storage_on_android_r", this.values.tipOnAndroidR); this.values.theme = this._global_storage.get("theme", this.values.theme); this.values.autoPlay = this._global_storage.get("auto_play", this.values.autoPlay); + this.values.lang = this._global_storage.get("language", this.values.lang) try { android.os.Build.VERSION_CODES.R sheetmgr.rootDir = android.os.Environment.getExternalStorageDirectory() + "/Documents/SkyAutoPlayer/sheets/"; - if(this.values.tipOnAndroidR) toast("安卓11不允许外部应用读取应用私有文件夹,乐谱文件夹移至" + sheetmgr.rootDir); + if(this.values.tipOnAndroidR) toast(String.format(config.languages[config.values.lang].launch_tip_storage_on_android11, sheetmgr.rootDir)); } catch (e) {} files.ensureDir(sheetmgr.rootDir); @@ -430,13 +564,13 @@ config = { if(periodVersion < currentVersion) { config.fetchRepoFile("update_log.txt", this.values.gitVersion, function(body) { gui.dialogs.showConfirmDialog({ - title: "SkyAutoPlayer已更新", - text: "当前版本: " + currentVersion + " ← " + periodVersion + "\n\n更新日志: \n" + body.string(), + title: config.languages[config.values.lang].res_updated, + text: String.format(config.languages[config.values.lang].res_updated_detail, currentVersion, periodVersion, body.string()), canExit: false, - buttons: ["确认"] + buttons: [config.languages[config.values.lang].button_confirm] }); }, function(msg) { - toast("版本检查失败,无法获取更新信息"); + toast(config.languages[config.values.lang].res_check_update_error); }); } this.save("version", currentVersion); @@ -450,35 +584,35 @@ config = { var tryCount = 1; try { files.createWithDirs(localRootDir); - listener("加载资源中..."); + listener(config.languages[config.values.lang].res_loading_general); resourceList.map(function(element, i) { var absolutePath = files.join(localRootDir, element); if(files.exists(absolutePath)) { try { - listener("加载资源中: " + element); + listener(String.format(config.languages[config.values.lang].res_loading_detail, element)); config.bitmaps[files.getNameWithoutExtension(absolutePath)] = android.graphics.Bitmap.createBitmap(android.graphics.BitmapFactory.decodeFile(absolutePath)); } catch(e) { - listener("加载失败: " + element); + listener(String.format(config.languages[config.values.lang].res_loading_error, element)); downloadQueue.push(element); } } else { - listener("无本地资源,进入下载队列: " + element); + listener(String.format(config.languages[config.values.lang].res_put_into_download_queue, element)); downloadQueue.push(element); } }); if(downloadQueue.length == 0) { - listener("资源加载完成"); + listener(config.languages[config.values.lang].res_load_successful); java.lang.Thread.sleep(500); //为了方便看清 return; } while (downloadQueue.length != 0 && tryCount <= 5) { - listener("第" + tryCount + "次尝试下载资源,共需下载" + downloadQueue.length + "项资源"); + listener(String.format(config.languages[config.values.lang].res_try_download, tryCount, downloadQueue.length)); java.lang.Thread.sleep(750); //为了方便看清 var tmpQueue = []; for(var i in downloadQueue) tmpQueue.push(downloadQueue[i]); var iterator = 0; tmpQueue.map(function(element, i) { - listener("下载资源中: " + element); + listener(String.format(config.languages[config.values.lang].res_downloading, element)); config.fetchRepoFile("resources/" + element, config.values.gitVersion, function(body) { var absolutePath = files.join(localRootDir, element); files.create(absolutePath); @@ -487,7 +621,7 @@ config = { downloadQueue.splice(iterator, 1); }, function(msg) { iterator++; - listener("资源" + element + "下载/加载失败: " + e); + listener(String.format(config.languages[config.values.lang].res_download_or_load_failed, element, e)); java.lang.Thread.sleep(500); //为了方便看清 }); @@ -496,13 +630,13 @@ config = { } //处理结果 if(tryCount > 5) { - listener(new Error("以下资源下载失败:" + downloadQueue)) + listener(new Error(String.format(config.languages[config.values.lang].res_download_failed, downloadQueue))) } else { - listener("资源下载完成"); + listener(config.languages[config.values.lang].res_download_successful); java.lang.Thread.sleep(1000); //为了方便看清 } } catch(error) { - listener(new Error("资源下载时发生了问题" + error)); + listener(new Error(String.format(config.languages[config.values.lang].res_error_while_downloading, error))); } }, @@ -981,7 +1115,7 @@ gui = { //skip.setChecked(Boolean(s.canSkip)); skip.setLayoutParams(android.widget.LinearLayout.LayoutParams(-2, -2, 0)); skip.getLayoutParams().setMargins(0, 0, 0, 10 * dp) - skip.setText("不再提示"); + skip.setText(config.languages[config.values.lang].gui_dialog_do_not_show_again); skip.setTextColor(gui.config.colors[config.values.theme].sec_text) layout.addView(skip); } @@ -1325,7 +1459,7 @@ gui = { if(s._anim != null) s._anim(); if(!config.values.skipOpenWindowTip) { - toast("拖动标题栏的标题文字来移动悬浮窗位置。"); + toast(config.languages[config.values.lang].gui_move_window_tip); config.values.skipOpenWindowTip = config.save("skip_open_window_tip", true); } } else { //window is showing, change content view @@ -1617,7 +1751,7 @@ gui = { onTouchFunction.offsetY = s.y - event.getRawY(); break; case event.ACTION_UP: - gui.key_coordinate_navigation._global_text.setText("键" + (gui.key_coordinate_navigation.current_index + 1) + "坐标已设置: [" + event.getRawX() + ", " + event.getRawY() + "]"); + gui.key_coordinate_navigation._global_text.setText(String.format(config.languages[config.values.lang].gui_key_coordinate_is_set, gui.key_coordinate_navigation.current_index + 1, event.getRawX(), event.getRawY())); keyTargetedCbk([event.getRawX(), event.getRawY()]); gui.utils.value_animation("Float", 1, 0, 200 , new android.view.animation.DecelerateInterpolator(), function(anim) { gui.key_coordinate_navigation._global_base.setAlpha(anim.getAnimatedValue()); @@ -1657,7 +1791,7 @@ gui = { gui.key_coordinate_navigation._global_base.setAlpha(anim.getAnimatedValue()); gui.key_coordinate_navigation._global_text.setAlpha(anim.getAnimatedValue()); }); - gui.key_coordinate_navigation._global_text.setText("移动\"\u26d2\"至目标位置来设置第" + (gui.key_coordinate_navigation.current_index + 1) + "个键坐标"); + gui.key_coordinate_navigation._global_text.setText(String.format(config.languages[config.values.lang].gui_move_diamond_tip, gui.key_coordinate_navigation.current_index + 1)); gui.key_coordinate_navigation.isShowing = true; } })}, @@ -1739,7 +1873,7 @@ gui = { gui.player_panel._global_text.setLayoutParams(new android.widget.RelativeLayout.LayoutParams(-2, -2)); gui.player_panel._global_text.setTextColor(gui.config.colors[config.values.theme].text); gui.player_panel._global_text.setTextSize(14); - gui.player_panel._global_text.setText("解析中..."); + gui.player_panel._global_text.setText(config.languages[config.values.lang].gui_player_penel_analyzing); gui.player_panel._global_text.setSingleLine(true); gui.player_panel._global_text.setEllipsize(android.text.TextUtils.TruncateAt.END); //gui.player_panel._global_text.setPadding(dp * 5, dp * 5, dp * 5, dp * 5); @@ -1934,7 +2068,7 @@ gui = { gui.player_panel.refreshStatus(); if(!config.values.skipOpenPlayerPanelWindowTip) { - toast("拖动标题栏的标题文字来移动弹奏控制面板悬浮窗。"); + toast(config.languages[config.values.lang].gui_player_panel_tip); config.values.skipOpenPlayerPanelWindowTip = config.save("skip_open_player_panel_window_tip", true); } @@ -2036,44 +2170,12 @@ gui = { }; -gui.run(function(){ - ui.setContentView((function(){ - var layout = new android.widget.LinearLayout(ctx); - layout.setLayoutParams(new android.widget.LinearLayout.LayoutParams(-1, -1)); - layout.setOrientation(android.widget.LinearLayout.VERTICAL); - layout.setPadding(15 * dp, 15 * dp, 15 * dp, 15 * dp); - layout.setGravity(android.view.Gravity.CENTER | android.view.Gravity.CENTER); - var prompt = new android.widget.TextView(ctx); - prompt.setLayoutParams(new android.widget.RelativeLayout.LayoutParams(-2, -2)); - prompt.getLayoutParams().setMargins(dp * 15, dp * 5, dp * 15, dp * 15); - prompt.setGravity(android.view.Gravity.CENTER | android.view.Gravity.CENTER); - prompt.setText(android.text.Html.fromHtml("当你发现什么事情都没有发生时
也许你应该看看是否授予了Auto.js悬浮窗权限

" + (function() { - if(app.autojs.versionCode == 461) { - return "Auto.js版本为 4.1.1 Alpha2" - } else { - return "Auto.js版本为 " + app.autojs.versionName + ",不保证稳定性!
建议使用 4.1.1 Alpha2 版本!
4.1.1 Alpha2 版本下载: https://github.com/Ericwyn/Auto.js/releases/tag/V4.1.1.Alpha2" - } - }()))); - layout.addView(prompt); - var btn = new android.widget.Button(ctx); - btn.setLayoutParams(new android.widget.LinearLayout.LayoutParams(-2, -2)); - btn.setText("强制退出"); - btn.setOnClickListener(new android.view.View.OnClickListener({ - onClick: function() { - java.lang.System.exit(0); - } - })); - layout.addView(btn); - return layout; - }())); -}); - gui.dialogs.showProgressDialog(function(o) { o.setIndeterminate(true); o.setText("加载配置中..."); config.init(); config.checkVersion(); - o.setText("加载资源中..."); + o.setText(config.languages[config.values.lang].op_loading_resources); config.fetchResources(function(msg) { if(msg instanceof Error) { o.close(); @@ -2218,7 +2320,7 @@ gui.dialogs.showProgressDialog(function(o) { layout.addView(infoLayout); var sugPrompt = new android.widget.TextView(ctx); - sugPrompt.setText("建议弹奏地点:"); + sugPrompt.setText(config.languages[config.values.lang].sheet_detail_dialog_suggestion_locale); sugPrompt.setLayoutParams(new android.widget.LinearLayout.LayoutParams(-2, -2)); sugPrompt.setGravity(android.view.Gravity.LEFT | android.view.Gravity.CENTER); sugPrompt.setTextColor(gui.config.colors[config.values.theme].text); @@ -2274,7 +2376,7 @@ gui.dialogs.showProgressDialog(function(o) { return rBitmap; }; var socialPrompt = new android.widget.TextView(ctx); - socialPrompt.setText("查看作者:"); + socialPrompt.setText(config.languages[config.values.lang].sheet_detail_dialog_view_author_social_link); socialPrompt.setLayoutParams(new android.widget.LinearLayout.LayoutParams(-2, -2)); socialPrompt.setGravity(android.view.Gravity.LEFT | android.view.Gravity.CENTER); socialPrompt.setTextColor(gui.config.colors[config.values.theme].text); @@ -2335,8 +2437,8 @@ gui.dialogs.showProgressDialog(function(o) { }); gui.main.addPage({ index: 0, - title: "本地乐谱", - navigation_title: "本地乐谱", + title: config.languages[config.values.lang].page_lc_title, + navigation_title: config.languages[config.values.lang].page_lc_navigation_title, navigation_icon: "local", func: [{ icon: "refresh", @@ -2399,7 +2501,7 @@ gui.dialogs.showProgressDialog(function(o) { element.v_author.getLayoutParams().addRule(android.widget.RelativeLayout.ALIGN_PARENT_LEFT); element.v_author.setTextSize(14); element.v_author.setTextColor(gui.config.colors[config.values.theme].sec_text); - element.v_author.setText("键数: " + element.songNotes.length + " - BPM: " + element.bpm); + element.v_author.setText(String.format(config.languages[config.values.lang].page_lc_sheet_item_info, element.songNotes.length, element.bpm)); element.v_relative.addView(element.v_author); element.v_play = new android.widget.ImageView(ctx); @@ -2418,10 +2520,10 @@ gui.dialogs.showProgressDialog(function(o) { if(gui.main.isShowing) { if(!element.keyCount) { gui.dialogs.showConfirmDialog({ - title: "设置键位数", - text: "这是一个本地乐谱,请设置这个乐谱的键位数", + title: config.languages[config.values.lang].page_lc_kc_title, + text: config.languages[config.values.lang].page_lc_kc_desc, canExit: true, - buttons: ["8 键位", "15 键位"], + buttons: [config.languages[config.values.lang].page_lc_kc_8k, config.languages[config.values.lang].page_lc_kc_15k], callback: function(id) { files.write(files.join(sheetmgr.rootDir, element.fileName), (function() { var readable = files.open(files.join(sheetmgr.rootDir, element.fileName), "r", sheetmgr.encoding); @@ -2430,20 +2532,20 @@ gui.dialogs.showProgressDialog(function(o) { parsed.keyCount = id == 0 ? (element.keyCount = 8) : (element.keyCount = 15) return "[" + JSON.stringify(parsed) + "]"; }()), sheetmgr.encoding); - toast("已将 " + element.name + " 设置为 " + element.keyCount + " 键乐谱\n请再次点击弹奏按钮。\n长按乐谱以重新设置键位数。"); + toast(String.format(config.languages[config.values.lang].page_lc_kc_set, element.name, element.keyCount)); }, }); } else { switch(element.keyCount) { case 8: { if(config.values.key_coordinates8.length != 8) { - toast("未设置8键键位坐标或坐标数据错误,请前往设置页设置键位坐标"); + toast(config.languages[config.values.lang].page_lc_no_8k_set); return true; } };break; case 15: { if(config.values.key_coordinates15.length != 15) { - toast("未设置15键键位坐标或坐标数据错误,请前往设置页设置键位坐标"); + toast(config.languages[config.values.lang].page_lc_no_15k_set); return true; } };break; @@ -2476,10 +2578,10 @@ gui.dialogs.showProgressDialog(function(o) { onClick: function() { var path = files.join(sheetmgr.rootDir, element.fileName); gui.dialogs.showConfirmDialog({ - title: "删除文件", - text: "确认要删除 " + path + " 吗?\n该操作不可恢复!", + title: config.languages[config.values.lang].page_lc_del_title, + text: String.format(config.languages[config.values.lang].page_lc_del_desc, path), canExit: true, - buttons: ["确认", "取消"], + buttons: [config.languages[config.values.lang].button_confirm, config.languages[config.values.lang].button_cancel], callback: function(id) { if(id == 0) { files.remove(path); @@ -2503,44 +2605,37 @@ gui.dialogs.showProgressDialog(function(o) { switch(item.index) { case 0: { gui.dialogs.showConfirmDialog({ - title: "如何导入本地乐谱", - text: android.text.Html.fromHtml(String("本地乐谱文件夹在" + (function(){ - try { - android.os.Build.VERSION_CODES.R - return "Android标准文档文件夹下" - } catch (e) { - return "SkyStudio的乐谱存储位置"; - } - }()) + "\n" + - "" + sheetmgr.rootDir + "\n" + - "将外部乐谱复制进这个文件夹即可\n\n" + - "注意:\n" + - "SkyStudio对乐谱的存储/读取使用" + sheetmgr.encoding.toUpperCase() + "编码\n" + - "请确保外部乐谱的编码与SkyStudio使用的编码一致\n").replace(new RegExp("\x0a", "gi"), "
")), + title: config.languages[config.values.lang].page_lc_import_title, + text: android.text.Html.fromHtml(String.format( + config.languages[config.values.lang].page_lc_import_desc, + (function(){ + try { + android.os.Build.VERSION_CODES.R + return "" + config.languages[config.values.lang].page_lc_import_stand_document_folder + "" + } catch (e) { + return "" + config.languages[config.values.lang].page_lc_import_sky_pri_storage_folder + ""; + } + }()), sheetmgr.rootDir, sheetmgr.encoding.toUpperCase() + ).replace(new RegExp("\x0a", "gi"), "
")), canExit: true, skip: function(checked) { config.values.skipImportLocalSheetTip = config.save("skip_import_local_sheet_tip", checked); if(checked) s.ns0_listAdapterController.removeByIndex(pos, true); }, - buttons: ["确认"] + buttons: [config.languages[config.values.lang].button_confirm] }); break; } case 1: { gui.dialogs.showConfirmDialog({ - title: "修改乐谱键位数", - text: "版本15增加了对不同键位乐器(8键位和15键位)乐谱的支持,它们使用不同的坐标数据。\n" + - "当前已存储在本地的乐谱(外部导入的乐谱或在版本15之前从共享乐谱下载的乐谱),它们没有键位信息,SkyAutoPlayerScript无法确认它是8键位乐谱还是15键位乐谱。\n" + - "共享乐谱信息已更新,现在下载的共享乐谱它已经包含了乐谱键位信息,不需要再设置。\n" + - "点击开始弹奏按钮时,若无键位信息,则会弹出对话框以选择乐谱键位,SkyAutoPlayerScript会保存键位信息到乐谱。\n" + - "如果因为一些原因设置了错误的键位信息,可以长按乐谱来重新设置。\n\n" + - "p.s.: 需要重新设置15键键位坐标。", + title: config.languages[config.values.lang].page_lc_kctip_title, + text: config.languages[config.values.lang].page_lc_kctip_desc, canExit: true, skip: function(checked) { config.values.skipChangeKeyCountTip = config.save("skip_change_key_count_tip", checked); if(checked) s.ns0_listAdapterController.removeByIndex(pos, true); }, - buttons: ["确认"] + buttons: [config.languages[config.values.lang].button_confirm] }); break; } @@ -2549,14 +2644,16 @@ gui.dialogs.showProgressDialog(function(o) { } if(item.failed) { gui.dialogs.showConfirmDialog({ - title: "加载" + item.fileName + "失败", - text: android.text.Html.fromHtml(String("加载乐谱" + item.fileName + "失败\n\n原因:\n" + item.reason + "\n\n请检查以下内容:\n" + - (item.errtype == -1 ? "1. 谱子编码是否为UTF16-LE\n" : "1. 谱子编码是否为UTF16-LE\n") + - (item.errtype == 1 ? "2. 谱子是否为未加密的JSON格式\n" : "2. 谱子是否为未加密的JSON格式\n") + - (item.errtype == 2 ? "3. 谱子是否有JSON语法错误" : "3. 谱子是否有JSON语法错误") + title: String.format(config.languages[config.values.lang].page_lc_load_failed_title, item.fileName), + text: android.text.Html.fromHtml(String.format( + config.languages[config.values.lang].page_lc_load_failed_desc, + item.fileName, item.reason, + (item.errtype == -1 ? "1. " + config.languages[config.values.lang].page_lc_load_failed_r1 + "\n" : "1. " + config.languages[config.values.lang].page_lc_load_failed_r1 + "\n") + + (item.errtype == 1 ? "2. " + config.languages[config.values.lang].page_lc_load_failed_r2 + "\n" : "2. " + config.languages[config.values.lang].page_lc_load_failed_r2 + "\n") + + (item.errtype == 2 ? "3. " + config.languages[config.values.lang].page_lc_load_failed_r3 + "" : "3. " + config.languages[config.values.lang].page_lc_load_failed_r3 + "") ).replace(new RegExp("\x0a", "gi"), "
")), canExit: true, - buttons: ["确认"] + buttons: [config.languages[config.values.lang].button_confirm] }); } else { gui.dialogs.showDialog(gui.getViewMaker("sheetInfo")(item), -2, -2, null, true); @@ -2569,10 +2666,10 @@ gui.dialogs.showProgressDialog(function(o) { var item = s.ns0_listAdapterController.get(pos); if(!item.failed && item.type == 0) { gui.dialogs.showConfirmDialog({ - title: "设置键位数", - text: "这是一个本地乐谱,请设置这个乐谱的键位数", + title: config.languages[config.values.lang].page_lc_kc_title, + text: config.languages[config.values.lang].page_lc_kc_desc, canExit: true, - buttons: ["8 键位", "15 键位"], + buttons: [config.languages[config.values.lang].page_lc_kc_8k, config.languages[config.values.lang].page_lc_kc_15k], callback: function(id) { files.write(files.join(sheetmgr.rootDir, item.fileName), (function() { var readable = files.open(files.join(sheetmgr.rootDir, item.fileName), "r", sheetmgr.encoding); @@ -2581,7 +2678,7 @@ gui.dialogs.showProgressDialog(function(o) { parsed.keyCount = id == 0 ? (item.keyCount = 8) : (item.keyCount = 15) return "[" + JSON.stringify(parsed) + "]"; }()), sheetmgr.encoding); - toast("已将 " + item.name + " 设置为 " + item.keyCount + " 键乐谱\n请再次点击弹奏按钮。\n长按乐谱以重新设置键位数。"); + toast(String.format(config.languages[config.values.lang].page_lc_kc_set, item.name, item.keyCount)); }, }); } @@ -2621,19 +2718,19 @@ gui.dialogs.showProgressDialog(function(o) { s.ns0_listView.setAlpha(1); if(!config.values.skipImportLocalSheetTip) s.ns0_listAdapterController.add({ type: -1, - title: "如何导入本地乐谱", + title: config.languages[config.values.lang].page_lc_import_title, index: 0 });//上传乐谱提示 if(!config.values.skipChangeKeyCountTip) s.ns0_listAdapterController.add({ type: -1, - title: "修改乐谱键位数", + title: config.languages[config.values.lang].page_lc_kctip_title, index: 1 });//修改乐谱键位提示 s.ns0_listAdapterController.notifyChange(); threads.start(function() { sheetmgr.getLocalSheetList(isForce, function(successCount, failedCount) { gui.run(function(){ - gui.main._global_title.setText("加载中: 共" + successCount + "首乐谱(" + failedCount + "失败)"); + gui.main._global_title.setText(String.format(config.languages[config.values.lang].page_lc_loading_sheet, successCount, failedCount)); }); }).map(function(e, i) { gui.run(function(){ @@ -2664,8 +2761,8 @@ gui.dialogs.showProgressDialog(function(o) { }); gui.main.addPage({ index: 1, - title: "共享乐谱", - navigation_title: "共享乐谱", + title: config.languages[config.values.lang].page_sc_title, + navigation_title: config.languages[config.values.lang].page_sc_navigation_title, navigation_icon: "online", func: [{ icon: "refresh", @@ -2780,7 +2877,7 @@ gui.dialogs.showProgressDialog(function(o) { switch(r.status) { case 1: { gui.run(function() { - element.v_status.setText("下载中..."); + element.v_status.setText(config.languages[config.values.lang].page_sc_downloading); element.v_relative.addView(element.v_status); element.v_relative.addView(element.v_progress); element.isShowingStatusBar = true; @@ -2795,13 +2892,13 @@ gui.dialogs.showProgressDialog(function(o) { } case 2: { if(gui.main.isShowing) gui.run(function() { - element.v_status.setText("解析中..."); + element.v_status.setText(config.languages[config.values.lang].page_sc_analyzing); }); break; } case 3: { if(gui.main.isShowing) { gui.run(function() { - toast("下载完成: " + element.name + "\n请在本地曲谱页面刷新"); + toast(String.format(config.languages[config.values.lang].page_sc_download_success, element.name)); gui.utils.value_animation("Float", 1, 0, 150, new android.view.animation.DecelerateInterpolator(), function(anim) { element.v_progress.setAlpha(anim.getAnimatedValue()); element.v_status.setAlpha(anim.getAnimatedValue()); @@ -2817,7 +2914,7 @@ gui.dialogs.showProgressDialog(function(o) { } case -1: { if(gui.main.isShowing) { gui.run(function() { - toast("下载" + element.name + "失败: " + r.msg); + toast(String.format(config.languages[config.values.lang].page_sc_download_failed, element.name, r.msg)); gui.utils.value_animation("Float", 1, 0, 150, new android.view.animation.DecelerateInterpolator(), function(anim) { element.v_progress.setAlpha(anim.getAnimatedValue()); element.v_status.setAlpha(anim.getAnimatedValue()); @@ -2871,23 +2968,21 @@ gui.dialogs.showProgressDialog(function(o) { switch(item.index) { case 0: { gui.dialogs.showConfirmDialog({ - title: "如何上传乐谱", - text: "共有两种方式可以上传乐谱:\n\n" + - "①酷安私信@StageGuard,发送时请附带简介,曲谱链接(百度云或其他云盘都可)\n" + - "②在github fork StageGuard/SkyAutoplayerScript\n" + - "在shared_sheets文件夹添加你的曲谱,并按照格式修改shared_sheets.json\n" + - "并提出 Pull Request 合并申请\n\n" + - "注:若是转载转载请注明原作者同意\n\n" + - "如果所有人都白嫖,那么这个列表将永远也不会扩充", + title: config.languages[config.values.lang].page_sc_upload_title, + text: config.languages[config.values.lang].page_sc_upload_desc, canExit: true, skip: function(checked) { config.values.skipOnlineUploadTip = config.save("skip_online_upload_tip", checked); if(checked) s.ns1_listAdapterController.removeByIndex(pos, true); }, - buttons: ["打开酷安", "打开Github", "取消"], + buttons: [ + config.languages[config.values.lang].page_sc_upload_open_coolapk, + config.languages[config.values.lang].page_sc_upload_open_github, + config.languages[config.values.lang].button_cancel + ], callback: function(id) { if(id == 0) { - if(!app.launch("com.coolapk.market")) toast("应用 酷安 不存在!"); + if(!app.launch("com.coolapk.market")) toast(config.languages[config.values.lang].page_sc_upload_ca_not_exist); } else if(id == 1) { app.openUrl("https://github.com/StageGuard/SkyAutoplayerScript/"); } @@ -2897,20 +2992,14 @@ gui.dialogs.showProgressDialog(function(o) { } case 1: { gui.dialogs.showConfirmDialog({ - title: "乐谱共享声明", - text: android.text.Html.fromHtml(String("此列表共享的乐谱在\ngithub.com/StageGuard/SkyAutoPlayerScript\n均可以找到\n\n" + - "用户原创乐谱仅在SkyAutoplayerScript共享并使用,\n" + - "转载至其他平台请取得作者授权!\n\n" + - "转载在此共享列表的乐谱均会标明\n" + - "转载请注明原作者授权或遵循原作者意愿\n\n" + - "此声明没有强制执行性,这是个人素质的体现\n" + - "非法利益不可取").replace(new RegExp("\x0a", "gi"), "
")), + title: config.languages[config.values.lang].page_sc_announcement_title, + text: android.text.Html.fromHtml(String(config.languages[config.values.lang].page_sc_announcement_desc).replace(new RegExp("\x0a", "gi"), "
")), canExit: true, skip: function(checked) { config.values.skipOnlineSharedSheetCTip = config.save("skip_shared_sheet_c_tip", checked); if(checked) s.ns1_listAdapterController.removeByIndex(pos, true); }, - buttons: ["我已了解"] + buttons: [config.languages[config.values.lang].page_sc_announcement_confirm] }); break; } @@ -2957,7 +3046,7 @@ gui.dialogs.showProgressDialog(function(o) { s.ns1_searchEditText.setTextSize(15); s.ns1_searchEditText.setTextColor(gui.config.colors[config.values.theme].text); s.ns1_searchEditText.setHintTextColor(gui.config.colors[config.values.theme].sec_text); - s.ns1_searchEditText.setHint("按回车开始搜索"); + s.ns1_searchEditText.setHint(config.languages[config.values.lang].page_sc_search_hint); s.ns1_searchEditText.setAlpha(0); s.ns1_searchEditText.setOnClickListener(new android.view.View.OnClickListener({ onClick: function(view) { @@ -3027,17 +3116,17 @@ gui.dialogs.showProgressDialog(function(o) { if(anim.getAnimatedValue() == 0) { if(!config.values.skipOnlineUploadTip) s.ns1_listAdapterController.add({ type: -1, - title: "如何上传乐谱", + title: config.languages[config.values.lang].page_sc_upload_title, index: 0 });//上传乐谱提示 if(!config.values.skipOnlineSharedSheetCTip) s.ns1_listAdapterController.add({ type: -1, - title: "乐谱共享声明", + title: config.languages[config.values.lang].page_sc_announcement_title, index: 1 });//乐谱共享问题提示 s.ns1_listAdapterController.notifyChange(); s.ns1_listView.setAlpha(1); - gui.main._global_title.setText("获取列表中..."); + gui.main._global_title.setText(config.languages[config.values.lang].page_sc_fetching_list); threads.start(function() { var list = []; if(typeof(filterBlock) == "function") { @@ -3069,8 +3158,8 @@ gui.dialogs.showProgressDialog(function(o) { }); gui.main.addPage({ index: 2, - title: "设置", - navigation_title: "设置", + title: config.languages[config.values.lang].page_setting_title, + navigation_title: config.languages[config.values.lang].page_setting_navigation_title, navigation_icon: "settings", view: function(s) { s.ns2_listView = new android.widget.ListView(ctx); @@ -3078,10 +3167,10 @@ gui.dialogs.showProgressDialog(function(o) { s.ns2_listView.setAdapter(s.ns2_listAdapter = new RhinoListAdapter((function sList(){ sList.list = [{ type: "tag", - name: "基本设置", + name: config.languages[config.values.lang].page_setting_basic, }, { type: "default", - name: "设置8键盘键位坐标", + name: config.languages[config.values.lang].page_setting_set_8key_coordinate, onClick: function(v) { gui.main.__internal_dismiss(); config.values.key_coordinates8.length = 0; @@ -3089,12 +3178,12 @@ gui.dialogs.showProgressDialog(function(o) { config.values.key_coordinates8.push(value); }, function() { config.save("key_coordinates8"); - toast("坐标设置已保存至存储!"); + toast(config.languages[config.values.lang].page_setting_key_coordinate_saved); }); } }, { type: "default", - name: "设置15键盘键位坐标", + name: config.languages[config.values.lang].page_setting_set_15key_coordinate, onClick: function(v) { gui.main.__internal_dismiss(); config.values.key_coordinates15.length = 0; @@ -3102,38 +3191,38 @@ gui.dialogs.showProgressDialog(function(o) { config.values.key_coordinates15.push(value); }, function() { config.save("key_coordinates15"); - toast("坐标设置已保存至存储!"); + toast(config.languages[config.values.lang].page_setting_key_coordinate_saved); }); } }, { type: "checkbox", - name: "连续随机播放", + name: config.languages[config.values.lang].page_setting_random_and_continuate_play, check: config.values.autoPlay, onClick: function(checked) { config.values.autoPlay = config.save("auto_play", checked); } }, { type: "checkbox", - name: "显示加载失败的乐谱", + name: config.languages[config.values.lang].page_setting_show_broken_sheet, check: config.values.showFailedSheets, onClick: function(checked) { config.values.showFailedSheets = config.save("show_failed_sheets", checked); } }, { type: "checkbox", - name: "启动脚本时显示存储提示", + name: config.languages[config.values.lang].page_setting_show_storage_tip_on_android11, check: config.values.tipOnAndroidR, onClick: function(checked) { config.values.tipOnAndroidR = config.save("tip_storage_on_android_r", checked); } }, { type: "default", - name: "设置主题色", + name: config.languages[config.values.lang].page_setting_set_theme, onClick: function(v) { gui.dialogs.showOperateDialog([{ - text: "亮色" + text: config.languages[config.values.lang].page_setting_theme_light }, { - text: "暗色" + text: config.languages[config.values.lang].page_setting_theme_dark }], function(pos) { config.values.theme = config.save("theme", pos == 1 ? "dark" : "light"); config.updateBitmapTheme(); @@ -3146,21 +3235,21 @@ gui.dialogs.showProgressDialog(function(o) { } }, { type: "tag", - name: "关于", + name: config.languages[config.values.lang].page_setting_about, }, { type: "default", - name: "查看使用须知", + name: config.languages[config.values.lang].page_setting_user_agreement, onClick: function(v) { gui.dialogs.showConfirmDialog({ - title: "使用须知", + title: config.languages[config.values.lang].page_setting_user_agreement_title, text: user_agreements, canExit: true, - buttons: ["确认"], + buttons: [config.languages[config.values.lang].button_confirm], }) }, }, { type: "default", - name: "查看LICENSE", + name: config.languages[config.values.lang].page_setting_show_license, onClick: function(v) { threads.start(function() { config.fetchRepoFile("LICENSE", null, function(body) { @@ -3168,29 +3257,29 @@ gui.dialogs.showProgressDialog(function(o) { title: "GNU GENERAL PUBLIC LICENSE", text: body.string(), canExit: true, - buttons: ["确认"], + buttons: [config.languages[config.values.lang].button_confirm], }); }); }); }, }, { type: "default", - name: "查看更新日志", + name: config.languages[config.values.lang].page_setting_show_changelog, onClick: function(v) { threads.start(function() { config.fetchRepoFile("update_log.txt", null, function(body) { gui.dialogs.showConfirmDialog({ - title: "更新日志", + title: config.languages[config.values.lang].page_setting_changelog_title, text: body.string(), canExit: true, - buttons: ["确认"], + buttons: [config.languages[config.values.lang].button_confirm], }); }); }); }, }, { type: "default", - name: "结束脚本运行", + name: config.languages[config.values.lang].page_setting_exit_script, onClick: function(v) { gui.main.__internal_dismiss(); exit(); @@ -3287,16 +3376,41 @@ gui.dialogs.showProgressDialog(function(o) { //ctx.moveTaskToBack(true); if(!config.values.skipRunScriptTip) { gui.dialogs.showConfirmDialog({ - title: "使用须知", + title: config.languages[config.values.lang].op_user_agreement_title, text: user_agreements, canExit: false, - buttons: ["确认"], + buttons: [config.languages[config.values.lang].button_confirm], skip: function(checked) { config.save("skip_run_script_tip", checked); }, callback: function(id) {}, }); } -}, false, false); + gui.run(function(){ + ui.setContentView((function(){ + var layout = new android.widget.LinearLayout(ctx); + layout.setLayoutParams(new android.widget.LinearLayout.LayoutParams(-1, -1)); + layout.setOrientation(android.widget.LinearLayout.VERTICAL); + layout.setPadding(15 * dp, 15 * dp, 15 * dp, 15 * dp); + layout.setGravity(android.view.Gravity.CENTER | android.view.Gravity.CENTER); + var prompt = new android.widget.TextView(ctx); + prompt.setLayoutParams(new android.widget.RelativeLayout.LayoutParams(-2, -2)); + prompt.getLayoutParams().setMargins(dp * 15, dp * 5, dp * 15, dp * 15); + prompt.setGravity(android.view.Gravity.CENTER | android.view.Gravity.CENTER); + prompt.setText(android.text.Html.fromHtml(config.languages[config.values.lang].launch_tip_in_content)); + layout.addView(prompt); + var btn = new android.widget.Button(ctx); + btn.setLayoutParams(new android.widget.LinearLayout.LayoutParams(-2, -2)); + btn.setText(config.languages[config.values.lang].launch_tip_force_exit); + btn.setOnClickListener(new android.view.View.OnClickListener({ + onClick: function() { + java.lang.System.exit(0); + } + })); + layout.addView(btn); + return layout; + }())); + }); +}, false, true); }); \ No newline at end of file