Add files via upload

This commit is contained in:
百地 希留耶 2020-12-26 03:14:16 -06:00 committed by GitHub
parent ed8824a34b
commit 3cf7b1fca5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 376 additions and 401 deletions

View File

@ -78,7 +78,7 @@ static Result action_delete_restore(void* data, u32 index) {
}
static bool action_delete_error(void* data, u32 index, Result res, ui_view** errorView) {
*errorView = error_display_res(data, action_delete_draw_top, res, "無法刪除档案");
*errorView = error_display_res(data, action_delete_draw_top, res, "无法删除项目.");
return true;
}
@ -105,7 +105,7 @@ static void action_delete_update(ui_view* view, void* data, float* progress, cha
info_destroy(view);
if(R_SUCCEEDED(deleteData->deleteInfo.result)) {
prompt_display_notify("成功", "刪除", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "删除.", COLOR_TEXT, NULL, NULL, NULL);
}
action_delete_free_data(deleteData);
@ -127,9 +127,9 @@ static void action_delete_onresponse(ui_view* view, void* data, u32 response) {
if(response == PROMPT_YES) {
Result res = task_data_op(&deleteData->deleteInfo);
if(R_SUCCEEDED(res)) {
info_display("刪除中", "按B鍵取消", true, data, action_delete_update, action_delete_draw_top);
info_display("正在删除", "按 B 取消.", true, data, action_delete_update, action_delete_draw_top);
} else {
error_display_res(NULL, NULL, res, "無法初始化刪除操作");
error_display_res(NULL, NULL, res, "无法启动删除操作.");
action_delete_free_data(deleteData);
}
@ -161,9 +161,9 @@ static void action_delete_loading_update(ui_view* view, void* data, float* progr
loadingData->deleteData->deleteInfo.total = linked_list_size(&loadingData->deleteData->contents);
loadingData->deleteData->deleteInfo.processed = loadingData->deleteData->deleteInfo.total;
prompt_display_yes_no("確認", loadingData->message, COLOR_TEXT, loadingData->deleteData, action_delete_draw_top, action_delete_onresponse);
prompt_display_yes_no("确认", loadingData->message, COLOR_TEXT, loadingData->deleteData, action_delete_draw_top, action_delete_onresponse);
} else {
error_display_res(NULL, NULL, loadingData->popData.result, "無法列舉档案列表");
error_display_res(NULL, NULL, loadingData->popData.result, "无法填充项目列表.");
action_delete_free_data(loadingData->deleteData);
}
@ -176,13 +176,13 @@ static void action_delete_loading_update(ui_view* view, void* data, float* progr
svcSignalEvent(loadingData->popData.cancelEvent);
}
snprintf(text, PROGRESS_TEXT_MAX, "獲取档案列表...");
snprintf(text, PROGRESS_TEXT_MAX, "正在获取项目列表...");
}
static void action_delete_internal(linked_list* items, list_item* selected, const char* message, bool recursive, bool includeBase, bool ciasOnly, bool ticketsOnly) {
delete_data* data = (delete_data*) calloc(1, sizeof(delete_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配刪除數據");
error_display(NULL, NULL, "无法分配删除的数据.");
return;
}
@ -192,7 +192,7 @@ static void action_delete_internal(linked_list* items, list_item* selected, cons
file_info* targetInfo = (file_info*) selected->data;
Result targetCreateRes = task_create_file_item(&data->targetItem, targetInfo->archive, targetInfo->path, targetInfo->attributes, false);
if(R_FAILED(targetCreateRes)) {
error_display_res(NULL, NULL, targetCreateRes, "無法創建目標档案");
error_display_res(NULL, NULL, targetCreateRes, "无法创建目标文件.");
action_delete_free_data(data);
return;
@ -217,7 +217,7 @@ static void action_delete_internal(linked_list* items, list_item* selected, cons
delete_loading_data* loadingData = (delete_loading_data*) calloc(1, sizeof(delete_loading_data));
if(loadingData == NULL) {
error_display(NULL, NULL, "無法分配讀取數據");
error_display(NULL, NULL, "无法分配加载的数据.");
action_delete_free_data(data);
return;
@ -237,34 +237,32 @@ static void action_delete_internal(linked_list* items, list_item* selected, cons
Result listRes = task_populate_files(&loadingData->popData);
if(R_FAILED(listRes)) {
error_display_res(NULL, NULL, listRes, "無法初始化档案列表");
error_display_res(NULL, NULL, listRes, "无法启动项目列表填充.");
free(loadingData);
action_delete_free_data(data);
return;
}
info_display("讀取中", "按B鍵取消", false, loadingData, action_delete_loading_update, action_delete_loading_draw_top);
info_display("正在加载", "按 B 取消.", false, loadingData, action_delete_loading_update, action_delete_loading_draw_top);
}
void action_delete_file(linked_list* items, list_item* selected) {
action_delete_internal(items, selected, "即將刪除選中的档案,是否繼續?", false, true, false, false);
action_delete_internal(items, selected, "删除所选文件?", false, true, false, false);
}
void action_delete_dir(linked_list* items, list_item* selected) {
action_delete_internal(items, selected, "即將刪除選中的資料夾,是否繼續?", true, true, false, false);
action_delete_internal(items, selected, "删除当前文件夹?", true, true, false, false);
}
void action_delete_dir_contents(linked_list* items, list_item* selected) {
action_delete_internal(items, selected, "即將刪除資料夾中所有的档案,是否繼續?", true, false, false, false);
action_delete_internal(items, selected, "删除当前文件夹的所有项目?", true, false, false, false);
}
void action_delete_dir_cias(linked_list* items, list_item* selected) {
action_delete_internal(items, selected, "即將刪除資料夾中所有的 CIAs是否繼續", false, false, true, false);
action_delete_internal(items, selected, "删除当前文件夹的所有安装包?", false, false, true, false);
}
void action_delete_dir_tickets(linked_list* items, list_item* selected) {
action_delete_internal(items, selected, "即將刪除資料夾中所有的 Tickets是否繼續", false, false, false, true);
action_delete_internal(items, selected, "删除当前文件夹的所有应用引导表?", false, false, false, true);
}
// オケー

View File

@ -27,12 +27,12 @@ static void action_delete_ext_save_data_update(ui_view* view, void* data, float*
info_destroy(view);
if(R_FAILED(res)) {
error_display_res(info, task_draw_ext_save_data_info, res, "無法刪除追加儲存數據");
error_display_res(info, task_draw_ext_save_data_info, res, "无法删除追加数据.");
} else {
linked_list_remove(deleteData->items, deleteData->selected);
task_free_ext_save_data(deleteData->selected);
prompt_display_notify("成功", "刪除追加儲存數據", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "删除.", COLOR_TEXT, NULL, NULL, NULL);
}
free(data);
@ -40,7 +40,7 @@ static void action_delete_ext_save_data_update(ui_view* view, void* data, float*
static void action_delete_ext_save_data_onresponse(ui_view* view, void* data, u32 response) {
if(response == PROMPT_YES) {
info_display("刪除追加讀取數據中", "", false, data, action_delete_ext_save_data_update, action_delete_ext_save_data_draw_top);
info_display("正在删除", "", false, data, action_delete_ext_save_data_update, action_delete_ext_save_data_draw_top);
} else {
free(data);
}
@ -49,7 +49,7 @@ static void action_delete_ext_save_data_onresponse(ui_view* view, void* data, u3
void action_delete_ext_save_data(linked_list* items, list_item* selected) {
delete_ext_save_data_data* data = (delete_ext_save_data_data*) calloc(1, sizeof(delete_ext_save_data_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配刪除追加儲存數據的數據");
error_display(NULL, NULL, "无法分配删除追加数据的数据.");
return;
}
@ -57,5 +57,5 @@ void action_delete_ext_save_data(linked_list* items, list_item* selected) {
data->items = items;
data->selected = selected;
prompt_display_yes_no("確認", "即將刪除所選的追加儲存數據,是否繼續?", COLOR_TEXT, data, action_delete_ext_save_data_draw_top, action_delete_ext_save_data_onresponse);
}
prompt_display_yes_no("确认", "删除所选追加数据?", COLOR_TEXT, data, action_delete_ext_save_data_draw_top, action_delete_ext_save_data_onresponse);
}

View File

@ -63,7 +63,7 @@ static Result action_delete_pending_titles_restore(void* data, u32 index) {
}
static bool action_delete_pending_titles_error(void* data, u32 index, Result res, ui_view** errorView) {
*errorView = error_display_res(data, action_delete_pending_titles_draw_top, res, "無法刪除待裝程式");
*errorView = error_display_res(data, action_delete_pending_titles_draw_top, res, "无法删除未完成的应用.");
return true;
}
@ -84,7 +84,7 @@ static void action_delete_pending_titles_update(ui_view* view, void* data, float
info_destroy(view);
if(R_SUCCEEDED(deleteData->deleteInfo.result)) {
prompt_display_notify("成功", "待裝程式已刪除", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "已删除.", COLOR_TEXT, NULL, NULL, NULL);
}
action_delete_pending_titles_free_data(deleteData);
@ -106,9 +106,9 @@ static void action_delete_pending_titles_onresponse(ui_view* view, void* data, u
if(response == PROMPT_YES) {
Result res = task_data_op(&deleteData->deleteInfo);
if(R_SUCCEEDED(res)) {
info_display("刪除待裝程式中", "按B鍵取消", true, data, action_delete_pending_titles_update, action_delete_pending_titles_draw_top);
info_display("正在删除", "按 B 取消.", true, data, action_delete_pending_titles_update, action_delete_pending_titles_draw_top);
} else {
error_display_res(NULL, NULL, res, "無法初始化刪除操作");
error_display_res(NULL, NULL, res, "无法启动删除操作.");
action_delete_pending_titles_free_data(deleteData);
}
@ -140,9 +140,9 @@ static void action_delete_pending_titles_loading_update(ui_view* view, void* dat
loadingData->deleteData->deleteInfo.total = linked_list_size(&loadingData->deleteData->contents);
loadingData->deleteData->deleteInfo.processed = loadingData->deleteData->deleteInfo.total;
prompt_display_yes_no("Confirmation", loadingData->message, COLOR_TEXT, loadingData->deleteData, action_delete_pending_titles_draw_top, action_delete_pending_titles_onresponse);
prompt_display_yes_no("确认", loadingData->message, COLOR_TEXT, loadingData->deleteData, action_delete_pending_titles_draw_top, action_delete_pending_titles_onresponse);
} else {
error_display_res(NULL, NULL, loadingData->popData.result, "Failed to populate pending title list.");
error_display_res(NULL, NULL, loadingData->popData.result, "无法填充未完成的应用列表.");
action_delete_pending_titles_free_data(loadingData->deleteData);
}
@ -155,13 +155,13 @@ static void action_delete_pending_titles_loading_update(ui_view* view, void* dat
svcSignalEvent(loadingData->popData.cancelEvent);
}
snprintf(text, PROGRESS_TEXT_MAX, "Fetching pending title list...");
snprintf(text, PROGRESS_TEXT_MAX, "正在获取未完成的应用列表...");
}
void action_delete_pending_titles(linked_list* items, list_item* selected, const char* message, bool all) {
delete_pending_titles_data* data = (delete_pending_titles_data*) calloc(1, sizeof(delete_pending_titles_data));
if(data == NULL) {
error_display(NULL, NULL, "Failed to allocate delete pending titles data.");
error_display(NULL, NULL, "无法分配删除未完成的应用的数据.");
return;
}
@ -189,7 +189,7 @@ void action_delete_pending_titles(linked_list* items, list_item* selected, const
if(all) {
delete_pending_titles_loading_data* loadingData = (delete_pending_titles_loading_data*) calloc(1, sizeof(delete_pending_titles_loading_data));
if(loadingData == NULL) {
error_display(NULL, NULL, "Failed to allocate loading data.");
error_display(NULL, NULL, "无法分配加载的数据.");
action_delete_pending_titles_free_data(data);
return;
@ -202,28 +202,28 @@ void action_delete_pending_titles(linked_list* items, list_item* selected, const
Result listRes = task_populate_pending_titles(&loadingData->popData);
if(R_FAILED(listRes)) {
error_display_res(NULL, NULL, listRes, "Failed to initiate pending title list population.");
error_display_res(NULL, NULL, listRes, "无法启动未完成的应用列表填充.");
free(loadingData);
action_delete_pending_titles_free_data(data);
return;
}
info_display("Loading", "Press B to cancel.", false, loadingData, action_delete_pending_titles_loading_update, action_delete_pending_titles_loading_draw_top);
info_display("正在加载", "按 B 取消.", false, loadingData, action_delete_pending_titles_loading_update, action_delete_pending_titles_loading_draw_top);
} else {
linked_list_add(&data->contents, selected);
data->deleteInfo.total = 1;
data->deleteInfo.processed = data->deleteInfo.total;
prompt_display_yes_no("Confirmation", message, COLOR_TEXT, data, action_delete_pending_titles_draw_top, action_delete_pending_titles_onresponse);
prompt_display_yes_no("确认", message, COLOR_TEXT, data, action_delete_pending_titles_draw_top, action_delete_pending_titles_onresponse);
}
}
void action_delete_pending_title(linked_list* items, list_item* selected) {
action_delete_pending_titles(items, selected, "Delete the selected pending title?", false);
action_delete_pending_titles(items, selected, "删除所选未完成的应用?", false);
}
void action_delete_all_pending_titles(linked_list* items, list_item* selected) {
action_delete_pending_titles(items, selected, "Delete all pending titles?", true);
}
action_delete_pending_titles(items, selected, "删除所有未完成的应用?", true);
}

View File

@ -18,18 +18,18 @@ static void action_delete_secure_value_update(ui_view* view, void* data, float*
info_destroy(view);
if(R_FAILED(res)) {
error_display_res(info, task_draw_title_info, res, "無法已刪除安全值");
error_display_res(info, task_draw_title_info, res, "无法删除安全值.");
} else {
prompt_display_notify("成功", "刪除安全值", COLOR_TEXT, info, task_draw_title_info, NULL);
prompt_display_notify("成功", "删除.", COLOR_TEXT, info, task_draw_title_info, NULL);
}
}
static void action_delete_secure_value_onresponse(ui_view* view, void* data, u32 response) {
if(response == PROMPT_YES) {
info_display("刪除安全值中", "", false, data, action_delete_secure_value_update, task_draw_title_info);
info_display("正在删除", "", false, data, action_delete_secure_value_update, task_draw_title_info);
}
}
void action_delete_secure_value(linked_list* items, list_item* selected) {
prompt_display_yes_no("確認", "即將刪除所選程式的安全值,是否繼續?", COLOR_TEXT, selected->data, task_draw_title_info, action_delete_secure_value_onresponse);
}
prompt_display_yes_no("确认", "删除所选应用的安全值?", COLOR_TEXT, selected->data, task_draw_title_info, action_delete_secure_value_onresponse);
}

View File

@ -28,12 +28,12 @@ static void action_delete_system_save_data_update(ui_view* view, void* data, flo
info_destroy(view);
if(R_FAILED(res)) {
error_display_res(info, task_draw_system_save_data_info, res, "Failed to delete 系統儲存數據");
error_display_res(info, task_draw_system_save_data_info, res, "无法删除系统数据.");
} else {
linked_list_remove(deleteData->items, deleteData->selected);
task_free_system_save_data(deleteData->selected);
prompt_display_notify("成功", "系統儲存數據已刪除", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "已删除.", COLOR_TEXT, NULL, NULL, NULL);
}
free(data);
@ -41,7 +41,7 @@ static void action_delete_system_save_data_update(ui_view* view, void* data, flo
static void action_delete_system_save_data_onresponse(ui_view* view, void* data, u32 response) {
if(response == PROMPT_YES) {
info_display("正在刪除系統儲存數據中", "", false, data, action_delete_system_save_data_update, action_delete_system_save_data_draw_top);
info_display("正在删除", "", false, data, action_delete_system_save_data_update, action_delete_system_save_data_draw_top);
} else {
free(data);
}
@ -50,7 +50,7 @@ static void action_delete_system_save_data_onresponse(ui_view* view, void* data,
void action_delete_system_save_data(linked_list* items, list_item* selected) {
delete_system_save_data_data* data = (delete_system_save_data_data*) calloc(1, sizeof(delete_system_save_data_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配刪除系統儲存數據的數據");
error_display(NULL, NULL, "无法分配删除系统数据的数据.");
return;
}
@ -58,5 +58,5 @@ void action_delete_system_save_data(linked_list* items, list_item* selected) {
data->items = items;
data->selected = selected;
prompt_display_yes_no("確認", "即將刪除選定的系統儲存數據,是否繼續?", COLOR_TEXT, data, action_delete_system_save_data_draw_top, action_delete_system_save_data_onresponse);
}
prompt_display_yes_no("确认", "删除所选系统数据?", COLOR_TEXT, data, action_delete_system_save_data_draw_top, action_delete_system_save_data_onresponse);
}

View File

@ -59,7 +59,7 @@ static Result action_delete_tickets_restore(void* data, u32 index) {
}
static bool action_delete_tickets_error(void* data, u32 index, Result res, ui_view** errorView) {
*errorView = error_display_res(data, action_delete_tickets_draw_top, res, "無法刪除憑據");
*errorView = error_display_res(data, action_delete_tickets_draw_top, res, "无法删除应用引导表.");
return true;
}
@ -80,7 +80,7 @@ static void action_delete_tickets_update(ui_view* view, void* data, float* progr
info_destroy(view);
if(R_SUCCEEDED(deleteData->deleteInfo.result)) {
prompt_display_notify("成功", "憑據已刪除", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "已删除.", COLOR_TEXT, NULL, NULL, NULL);
}
action_delete_tickets_free_data(deleteData);
@ -102,9 +102,9 @@ static void action_delete_tickets_onresponse(ui_view* view, void* data, u32 resp
if(response == PROMPT_YES) {
Result res = task_data_op(&deleteData->deleteInfo);
if(R_SUCCEEDED(res)) {
info_display("正在刪除中", "按B鍵取消", true, data, action_delete_tickets_update, action_delete_tickets_draw_top);
info_display("正在删除", "按 B 取消.", true, data, action_delete_tickets_update, action_delete_tickets_draw_top);
} else {
error_display_res(NULL, NULL, res, "無法初始化刪除操作");
error_display_res(NULL, NULL, res, "无法启动删除操作.");
action_delete_tickets_free_data(deleteData);
}
@ -148,9 +148,9 @@ static void action_delete_tickets_loading_update(ui_view* view, void* data, floa
loadingData->deleteData->deleteInfo.total = linked_list_size(&loadingData->deleteData->contents);
loadingData->deleteData->deleteInfo.processed = loadingData->deleteData->deleteInfo.total;
prompt_display_yes_no("確認", loadingData->message, COLOR_TEXT, loadingData->deleteData, action_delete_tickets_draw_top, action_delete_tickets_onresponse);
prompt_display_yes_no("确认", loadingData->message, COLOR_TEXT, loadingData->deleteData, action_delete_tickets_draw_top, action_delete_tickets_onresponse);
} else {
error_display_res(NULL, NULL, loadingData->popData.result, "無法列舉憑據目錄");
error_display_res(NULL, NULL, loadingData->popData.result, "无法填充应用引导表列表.");
action_delete_tickets_free_data(loadingData->deleteData);
}
@ -163,13 +163,13 @@ static void action_delete_tickets_loading_update(ui_view* view, void* data, floa
svcSignalEvent(loadingData->popData.cancelEvent);
}
snprintf(text, PROGRESS_TEXT_MAX, "正在獲取憑據目錄中......");
snprintf(text, PROGRESS_TEXT_MAX, "正在获取应用引导表列表...");
}
static void action_delete_tickets_internal(linked_list* items, list_item* selected, const char* message, bool unused) {
delete_tickets_data* data = (delete_tickets_data*) calloc(1, sizeof(delete_tickets_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配刪除數據");
error_display(NULL, NULL, "无法分配删除的数据.");
return;
}
@ -195,7 +195,7 @@ static void action_delete_tickets_internal(linked_list* items, list_item* select
if(unused) {
delete_tickets_loading_data* loadingData = (delete_tickets_loading_data*) calloc(1, sizeof(delete_tickets_loading_data));
if(loadingData == NULL) {
error_display(NULL, NULL, "無法分配讀取數據");
error_display(NULL, NULL, "无法分配加载的数据.");
action_delete_tickets_free_data(data);
return;
@ -208,28 +208,28 @@ static void action_delete_tickets_internal(linked_list* items, list_item* select
Result listRes = task_populate_tickets(&loadingData->popData);
if(R_FAILED(listRes)) {
error_display_res(NULL, NULL, listRes, "無法初始化憑據目錄結構");
error_display_res(NULL, NULL, listRes, "无法启动应用引导表列表填充.");
free(loadingData);
action_delete_tickets_free_data(data);
return;
}
info_display("正在讀取中", "按B鍵取消", false, loadingData, action_delete_tickets_loading_update, action_delete_tickets_loading_draw_top);
info_display("正在加载", "按 B 取消.", false, loadingData, action_delete_tickets_loading_update, action_delete_tickets_loading_draw_top);
} else {
linked_list_add(&data->contents, selected);
data->deleteInfo.total = 1;
data->deleteInfo.processed = data->deleteInfo.total;
prompt_display_yes_no("確認", message, COLOR_TEXT, data, action_delete_tickets_draw_top, action_delete_tickets_onresponse);
prompt_display_yes_no("确认", message, COLOR_TEXT, data, action_delete_tickets_draw_top, action_delete_tickets_onresponse);
}
}
void action_delete_ticket(linked_list* items, list_item* selected) {
action_delete_tickets_internal(items, selected, "即將刪除所選的憑據,是否繼續?", false);
action_delete_tickets_internal(items, selected, "删除所选应用引导表?", false);
}
void action_delete_tickets_unused(linked_list* items, list_item* selected) {
action_delete_tickets_internal(items, selected, "即將刪除所有未使用的憑據,是否繼續?", true);
action_delete_tickets_internal(items, selected, "删除所有未使用的应用引导表?", true);
}

View File

@ -32,12 +32,12 @@ static void action_delete_title_update(ui_view* view, void* data, float* progres
info_destroy(view);
if(R_FAILED(res)) {
error_display_res(info, task_draw_title_info, res, "無法刪除程式");
error_display_res(info, task_draw_title_info, res, "无法删除应用.");
} else {
linked_list_remove(deleteData->items, deleteData->selected);
task_free_title(deleteData->selected);
prompt_display_notify("成功", "程式已刪除", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "已删除.", COLOR_TEXT, NULL, NULL, NULL);
}
free(data);
@ -45,7 +45,7 @@ static void action_delete_title_update(ui_view* view, void* data, float* progres
static void action_delete_title_onresponse(ui_view* view, void* data, u32 response) {
if(response == PROMPT_YES) {
info_display("正在刪除程式中", "", false, data, action_delete_title_update, action_delete_title_draw_top);
info_display("正在删除", "", false, data, action_delete_title_update, action_delete_title_draw_top);
} else {
free(data);
}
@ -54,7 +54,7 @@ static void action_delete_title_onresponse(ui_view* view, void* data, u32 respon
static void action_delete_title_internal(linked_list* items, list_item* selected, const char* message, bool ticket) {
delete_title_data* data = (delete_title_data*) calloc(1, sizeof(delete_title_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配程式刪除數據");
error_display(NULL, NULL, "无法分配删除应用的数据.");
return;
}
@ -63,13 +63,13 @@ static void action_delete_title_internal(linked_list* items, list_item* selected
data->selected = selected;
data->ticket = ticket;
prompt_display_yes_no("確認", message, COLOR_TEXT, data, action_delete_title_draw_top, action_delete_title_onresponse);
prompt_display_yes_no("确认", message, COLOR_TEXT, data, action_delete_title_draw_top, action_delete_title_onresponse);
}
void action_delete_title(linked_list* items, list_item* selected) {
action_delete_title_internal(items, selected, "即將刪除所選的程式,是否繼續?", false);
action_delete_title_internal(items, selected, "删除所选应用?", false);
}
void action_delete_title_ticket(linked_list* items, list_item* selected) {
action_delete_title_internal(items, selected, "即將刪除所選的程式及憑據,是否繼續?", true);
}
action_delete_title_internal(items, selected, "删除所选的应用和应用引导表?", true);
}

View File

@ -75,7 +75,7 @@ static Result action_erase_twl_save_restore(void* data, u32 index) {
}
static bool action_erase_twl_save_error(void* data, u32 index, Result res, ui_view** errorView) {
*errorView = error_display_res(((erase_twl_save_data*) data)->title, task_draw_title_info, res, "無法清楚儲存數據");
*errorView = error_display_res(((erase_twl_save_data*) data)->title, task_draw_title_info, res, "无法清除数据.");
return true;
}
@ -87,7 +87,7 @@ static void action_erase_twl_save_update(ui_view* view, void* data, float* progr
info_destroy(view);
if(R_SUCCEEDED(eraseData->eraseInfo.result)) {
prompt_display_notify("成功", "儲存數據已清理", COLOR_TEXT, eraseData->title, task_draw_title_info, NULL);
prompt_display_notify("成功", "已清除.", COLOR_TEXT, eraseData->title, task_draw_title_info, NULL);
}
free(data);
@ -116,9 +116,9 @@ static void action_erase_twl_save_onresponse(ui_view* view, void* data, u32 resp
Result res = task_data_op(&eraseData->eraseInfo);
if(R_SUCCEEDED(res)) {
info_display("正在清理存儲數據中", "按B鍵取消", true, data, action_erase_twl_save_update, action_erase_twl_save_draw_top);
info_display("正在清", "按 B 取消.", true, data, action_erase_twl_save_update, action_erase_twl_save_draw_top);
} else {
error_display_res(eraseData->title, task_draw_title_info, res, "無法初始化清理儲存數據");
error_display_res(eraseData->title, task_draw_title_info, res, "无法启动清除数据.");
free(data);
}
} else {
@ -129,7 +129,7 @@ static void action_erase_twl_save_onresponse(ui_view* view, void* data, u32 resp
void action_erase_twl_save(linked_list* items, list_item* selected) {
erase_twl_save_data* data = (erase_twl_save_data*) calloc(1, sizeof(erase_twl_save_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配清理DSi儲存數據");
error_display(NULL, NULL, "无法分配清除 TWL 数据的数据.");
return;
}
@ -164,5 +164,5 @@ void action_erase_twl_save(linked_list* items, list_item* selected) {
data->eraseInfo.finished = true;
prompt_display_yes_no("確認", "即將清理所選程式的儲存數據,是否繼續?", COLOR_TEXT, data, action_erase_twl_save_draw_top, action_erase_twl_save_onresponse);
}
prompt_display_yes_no("确认", "清除所选应用的数据?", COLOR_TEXT, data, action_erase_twl_save_draw_top, action_erase_twl_save_onresponse);
}

View File

@ -19,7 +19,7 @@ static void action_export_secure_value_update(ui_view* view, void* data, float*
ui_pop();
info_destroy(view);
prompt_display_notify("", "安全值未設置", COLOR_TEXT, info, task_draw_title_info, NULL);
prompt_display_notify("", "未设置安全值.", COLOR_TEXT, info, task_draw_title_info, NULL);
return;
}
@ -53,18 +53,18 @@ static void action_export_secure_value_update(ui_view* view, void* data, float*
info_destroy(view);
if(R_SUCCEEDED(res)) {
prompt_display_notify("成功", "導出安全值", COLOR_TEXT, info, task_draw_title_info, NULL);
prompt_display_notify("成功", "导出.", COLOR_TEXT, info, task_draw_title_info, NULL);
} else {
error_display_res(info, task_draw_title_info, res, "無法導出安全值");
error_display_res(info, task_draw_title_info, res, "无法导出安全值.");
}
}
static void action_export_secure_value_onresponse(ui_view* view, void* data, u32 response) {
if(response == PROMPT_YES) {
info_display("正在導出安全值中", "", false, data, action_export_secure_value_update, task_draw_title_info);
info_display("正在导出", "", false, data, action_export_secure_value_update, task_draw_title_info);
}
}
void action_export_secure_value(linked_list* items, list_item* selected) {
prompt_display_yes_no("確認", "即將導出所選程式的安全值,是否繼續?", COLOR_TEXT, selected->data, task_draw_title_info, action_export_secure_value_onresponse);
}
prompt_display_yes_no("确认", "导出所选应用的安全值?", COLOR_TEXT, selected->data, task_draw_title_info, action_export_secure_value_onresponse);
}

View File

@ -97,7 +97,7 @@ static Result action_export_twl_save_restore(void* data, u32 index) {
}
static bool action_export_twl_save_error(void* data, u32 index, Result res, ui_view** errorView) {
*errorView = error_display_res(((export_twl_save_data*) data)->title, task_draw_title_info, res, "無法導出儲存數據");
*errorView = error_display_res(((export_twl_save_data*) data)->title, task_draw_title_info, res, "无法导出数据.");
return true;
}
@ -109,7 +109,7 @@ static void action_export_twl_save_update(ui_view* view, void* data, float* prog
info_destroy(view);
if(R_SUCCEEDED(exportData->exportInfo.result)) {
prompt_display_notify("成功", "儲存數據已導出", COLOR_TEXT, exportData->title, task_draw_title_info, NULL);
prompt_display_notify("成功", "已导出.", COLOR_TEXT, exportData->title, task_draw_title_info, NULL);
}
free(data);
@ -138,9 +138,9 @@ static void action_export_twl_save_onresponse(ui_view* view, void* data, u32 res
Result res = task_data_op(&exportData->exportInfo);
if(R_SUCCEEDED(res)) {
info_display("正在導出儲存數據中", "按B鍵取消", true, data, action_export_twl_save_update, action_export_twl_save_draw_top);
info_display("正在导出", "按 B 取消.", true, data, action_export_twl_save_update, action_export_twl_save_draw_top);
} else {
error_display_res(exportData->title, task_draw_title_info, res, "無法初始化導出儲存數據");
error_display_res(exportData->title, task_draw_title_info, res, "无法启动导出数据.");
free(data);
}
} else {
@ -151,7 +151,7 @@ static void action_export_twl_save_onresponse(ui_view* view, void* data, u32 res
void action_export_twl_save(linked_list* items, list_item* selected) {
export_twl_save_data* data = (export_twl_save_data*) calloc(1, sizeof(export_twl_save_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配導出DSi儲存數據");
error_display(NULL, NULL, "无法分配导出 TWL 数据的数据.");
return;
}
@ -186,5 +186,5 @@ void action_export_twl_save(linked_list* items, list_item* selected) {
data->exportInfo.finished = true;
prompt_display_yes_no("確認", "即將導出所選程式的儲存數據,是否繼續?", COLOR_TEXT, data, action_export_twl_save_draw_top, action_export_twl_save_onresponse);
}
prompt_display_yes_no("确认", "导出所选应用的数据?", COLOR_TEXT, data, action_export_twl_save_draw_top, action_export_twl_save_onresponse);
}

View File

@ -61,18 +61,18 @@ static void action_extract_smdh_update(ui_view* view, void* data, float* progres
info_destroy(view);
if(R_SUCCEEDED(res)) {
prompt_display_notify("成功", "SMDH 已提取", COLOR_TEXT, info, task_draw_title_info, NULL);
prompt_display_notify("成功", "已提取.", COLOR_TEXT, info, task_draw_title_info, NULL);
} else {
error_display_res(info, task_draw_title_info, res, "法提取 SMDH.");
error_display_res(info, task_draw_title_info, res, "法提取 SMDH.");
}
}
static void action_extract_smdh_onresponse(ui_view* view, void* data, u32 response) {
if(response == PROMPT_YES) {
info_display("正在提取 SMDH 中", "", false, data, action_extract_smdh_update, task_draw_title_info);
info_display("正在提取", "", false, data, action_extract_smdh_update, task_draw_title_info);
}
}
void action_extract_smdh(linked_list* items, list_item* selected) {
prompt_display_yes_no("確認", "即將提取所選程式的 SMDH是否繼續", COLOR_TEXT, selected->data, task_draw_title_info, action_extract_smdh_onresponse);
}
prompt_display_yes_no("确认", "提取所选应用的 SMDH?", COLOR_TEXT, selected->data, task_draw_title_info, action_extract_smdh_onresponse);
}

View File

@ -37,18 +37,18 @@ static void action_import_secure_value_update(ui_view* view, void* data, float*
info_destroy(view);
if(R_SUCCEEDED(res)) {
prompt_display_notify("成功", "導入安全值", COLOR_TEXT, info, task_draw_title_info, NULL);
prompt_display_notify("成功", "导入.", COLOR_TEXT, info, task_draw_title_info, NULL);
} else {
error_display_res(info, task_draw_title_info, res, "無法導入安全值");
error_display_res(info, task_draw_title_info, res, "无法导入安全值.");
}
}
static void action_import_secure_value_onresponse(ui_view* view, void* data, u32 response) {
if(response == PROMPT_YES) {
info_display("正在導入安全值中", "", false, data, action_import_secure_value_update, task_draw_title_info);
info_display("正在导入", "", false, data, action_import_secure_value_update, task_draw_title_info);
}
}
void action_import_secure_value(linked_list* items, list_item* selected) {
prompt_display_yes_no("確認", "即將導入所選的安全值到所選的程式中,是否繼續?", COLOR_TEXT, selected->data, task_draw_title_info, action_import_secure_value_onresponse);
}
prompt_display_yes_no("确认", "导入安全值至所选应用?", COLOR_TEXT, selected->data, task_draw_title_info, action_import_secure_value_onresponse);
}

View File

@ -16,18 +16,18 @@ static void action_import_seed_update(ui_view* view, void* data, float* progress
info_destroy(view);
if(R_SUCCEEDED(res)) {
prompt_display_notify("成功", "導入 Seed.", COLOR_TEXT, info, task_draw_title_info, NULL);
prompt_display_notify("成功", "导入.", COLOR_TEXT, info, task_draw_title_info, NULL);
} else {
error_display_res(info, task_draw_title_info, res, "Failed to import seed.");
error_display_res(info, task_draw_title_info, res, "无法导入种子.");
}
}
static void action_import_seed_onresponse(ui_view* view, void* data, u32 response) {
if(response == PROMPT_YES) {
info_display("正在導入 Seed 中", "", false, data, action_import_seed_update, task_draw_title_info);
info_display("正在导入", "", false, data, action_import_seed_update, task_draw_title_info);
}
}
void action_import_seed(linked_list* items, list_item* selected) {
prompt_display_yes_no("確認", "即將導入所選的 Seed 到所選的程式中,是否繼續?", COLOR_TEXT, selected->data, task_draw_title_info, action_import_seed_onresponse);
}
prompt_display_yes_no("确认", "导入种子至所选应用?", COLOR_TEXT, selected->data, task_draw_title_info, action_import_seed_onresponse);
}

View File

@ -83,7 +83,7 @@ static Result action_import_twl_save_restore(void* data, u32 index) {
}
static bool action_import_twl_save_error(void* data, u32 index, Result res, ui_view** errorView) {
*errorView = error_display_res(((import_twl_save_data*) data)->title, task_draw_title_info, res, "無法導入儲存數據");
*errorView = error_display_res(((import_twl_save_data*) data)->title, task_draw_title_info, res, "无法导入数据.");
return true;
}
@ -95,7 +95,7 @@ static void action_import_twl_save_update(ui_view* view, void* data, float* prog
info_destroy(view);
if(R_SUCCEEDED(importData->importInfo.result)) {
prompt_display_notify("成功", "導入儲存數據", COLOR_TEXT, importData->title, task_draw_title_info, NULL);
prompt_display_notify("成功", "导入.", COLOR_TEXT, importData->title, task_draw_title_info, NULL);
}
free(data);
@ -124,9 +124,9 @@ static void action_import_twl_save_onresponse(ui_view* view, void* data, u32 res
Result res = task_data_op(&importData->importInfo);
if(R_SUCCEEDED(res)) {
info_display("正在導入儲存數據中", "按B鍵取消", true, data, action_import_twl_save_update, action_import_twl_save_draw_top);
info_display("正在导入", "按 B 取消.", true, data, action_import_twl_save_update, action_import_twl_save_draw_top);
} else {
error_display_res(importData->title, task_draw_title_info, res, "無法初始化儲存數據導入");
error_display_res(importData->title, task_draw_title_info, res, "无法启动导入数据.");
free(data);
}
} else {
@ -137,7 +137,7 @@ static void action_import_twl_save_onresponse(ui_view* view, void* data, u32 res
void action_import_twl_save(linked_list* items, list_item* selected) {
import_twl_save_data* data = (import_twl_save_data*) calloc(1, sizeof(import_twl_save_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配DSi儲存數據導入");
error_display(NULL, NULL, "无法分配导入 TWL 数据的数据.");
return;
}
@ -172,5 +172,5 @@ void action_import_twl_save(linked_list* items, list_item* selected) {
data->importInfo.finished = true;
prompt_display_yes_no("確認", "即將導入所選儲存數據到所選程式中,是否繼續?", COLOR_TEXT, data, action_import_twl_save_draw_top, action_import_twl_save_onresponse);
}
prompt_display_yes_no("确认", "导入数据至所选应用?", COLOR_TEXT, data, action_import_twl_save_draw_top, action_import_twl_save_onresponse);
}

View File

@ -120,7 +120,7 @@ static Result action_install_cias_open_dst(void* data, u32 index, void* initialR
bool n3ds = false;
if(R_SUCCEEDED(APT_CheckNew3DS(&n3ds)) && !n3ds && ((info->ciaInfo.titleId >> 28) & 0xF) == 2) {
ui_view* view = prompt_display_yes_no("確認", "此程式是New 3DS專用程式\n是否繼續?", COLOR_TEXT, data, action_install_cias_draw_top, action_install_cias_n3ds_onresponse);
ui_view* view = prompt_display_yes_no("确认", "该应用只适用于 New 3DS.\n继续?", COLOR_TEXT, data, action_install_cias_draw_top, action_install_cias_n3ds_onresponse);
if(view != NULL) {
svcWaitSynchronization(view->active, U64_MAX);
}
@ -180,7 +180,7 @@ static Result action_install_cias_restore(void* data, u32 index) {
}
bool action_install_cias_error(void* data, u32 index, Result res, ui_view** errorView) {
*errorView = error_display_res(data, action_install_cias_draw_top, res, "無法安裝3DS可導入档案");
*errorView = error_display_res(data, action_install_cias_draw_top, res, "无法安装安装包.");
return true;
}
@ -209,7 +209,7 @@ static void action_install_cias_update(ui_view* view, void* data, float* progres
info_destroy(view);
if(R_SUCCEEDED(installData->installInfo.result)) {
prompt_display_notify("成功", "完成安裝", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "安装.", COLOR_TEXT, NULL, NULL, NULL);
}
action_install_cias_free_data(installData);
@ -222,7 +222,7 @@ static void action_install_cias_update(ui_view* view, void* data, float* progres
}
*progress = installData->installInfo.currTotal != 0 ? (float) ((double) installData->installInfo.currProcessed / (double) installData->installInfo.currTotal) : 0;
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s, 剩余 %s", installData->installInfo.processed, installData->installInfo.total,
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", installData->installInfo.processed, installData->installInfo.total,
ui_get_display_size(installData->installInfo.currProcessed),
ui_get_display_size_units(installData->installInfo.currProcessed),
ui_get_display_size(installData->installInfo.currTotal),
@ -238,9 +238,9 @@ static void action_install_cias_onresponse(ui_view* view, void* data, u32 respon
if(response == PROMPT_YES) {
Result res = task_data_op(&installData->installInfo);
if(R_SUCCEEDED(res)) {
info_display("安裝 3DS可導入档案", "按B鍵取消", true, data, action_install_cias_update, action_install_cias_draw_top);
info_display("正在安装", "按 B 取消.", true, data, action_install_cias_update, action_install_cias_draw_top);
} else {
error_display_res(NULL, NULL, res, "無法初始化安裝 3DS可導入档案");
error_display_res(NULL, NULL, res, "无法启动安装包安装.");
action_install_cias_free_data(installData);
}
@ -273,9 +273,9 @@ static void action_install_cias_loading_update(ui_view* view, void* data, float*
loadingData->installData->installInfo.total = linked_list_size(&loadingData->installData->contents);
loadingData->installData->installInfo.processed = loadingData->installData->installInfo.total;
prompt_display_yes_no("確認", loadingData->message, COLOR_TEXT, loadingData->installData, action_install_cias_draw_top, action_install_cias_onresponse);
prompt_display_yes_no("确认", loadingData->message, COLOR_TEXT, loadingData->installData, action_install_cias_draw_top, action_install_cias_onresponse);
} else {
error_display_res(NULL, NULL, loadingData->popData.result, "無法列舉3DS可導入档案目錄");
error_display_res(NULL, NULL, loadingData->popData.result, "无法填充安装包列表.");
action_install_cias_free_data(loadingData->installData);
}
@ -288,13 +288,13 @@ static void action_install_cias_loading_update(ui_view* view, void* data, float*
svcSignalEvent(loadingData->popData.cancelEvent);
}
snprintf(text, PROGRESS_TEXT_MAX, "獲取3DS可導入档案目錄...");
snprintf(text, PROGRESS_TEXT_MAX, "正在获取安装包列表...");
}
static void action_install_cias_internal(linked_list* items, list_item* selected, bool (*filter)(void* data, const char* name, u32 attributes), void* filterData, const char* message, bool delete) {
install_cias_data* data = (install_cias_data*) calloc(1, sizeof(install_cias_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配3DS可導入档案安裝數據");
error_display(NULL, NULL, "无法分配安装安装包的数据.");
return;
}
@ -304,7 +304,7 @@ static void action_install_cias_internal(linked_list* items, list_item* selected
file_info* targetInfo = (file_info*) selected->data;
Result targetCreateRes = task_create_file_item(&data->targetItem, targetInfo->archive, targetInfo->path, targetInfo->attributes, true);
if(R_FAILED(targetCreateRes)) {
error_display_res(NULL, NULL, targetCreateRes, "無法創建目標档案");
error_display_res(NULL, NULL, targetCreateRes, "无法创建目标文件.");
action_install_cias_free_data(data);
return;
@ -346,7 +346,7 @@ static void action_install_cias_internal(linked_list* items, list_item* selected
install_cias_loading_data* loadingData = (install_cias_loading_data*) calloc(1, sizeof(install_cias_loading_data));
if(loadingData == NULL) {
error_display(NULL, NULL, "無法分配讀取數據");
error_display(NULL, NULL, "无法分配加载的数据.");
action_install_cias_free_data(data);
return;
@ -369,30 +369,28 @@ static void action_install_cias_internal(linked_list* items, list_item* selected
Result listRes = task_populate_files(&loadingData->popData);
if(R_FAILED(listRes)) {
error_display_res(NULL, NULL, listRes, "無法初始化3DS可導入档案目錄結構");
error_display_res(NULL, NULL, listRes, "无法启动安装包列表填充.");
free(loadingData);
action_install_cias_free_data(data);
return;
}
info_display("讀取", "按B鍵取消.", false, loadingData, action_install_cias_loading_update, action_install_cias_loading_draw_top);
info_display("正在加载", "按 B 取消.", false, loadingData, action_install_cias_loading_update, action_install_cias_loading_draw_top);
}
void action_install_cia(linked_list* items, list_item* selected) {
action_install_cias_internal(items, selected, NULL, NULL, "即將安裝所選的3DS可導入档案是否繼續", false);
action_install_cias_internal(items, selected, NULL, NULL, "安装所选安装包?", false);
}
void action_install_cia_delete(linked_list* items, list_item* selected) {
action_install_cias_internal(items, selected, NULL, NULL, "即將安裝並刪除所選的3DS可導入档案是否繼續", true);
action_install_cias_internal(items, selected, NULL, NULL, "安装并删除所选安装包?", true);
}
void action_install_cias(linked_list* items, list_item* selected, bool (*filter)(void* data, const char* name, u32 attributes), void* filterData) {
action_install_cias_internal(items, selected, filter, filterData, "即將安裝資料夾中所有的3DS可導入档案是否繼續", false);
action_install_cias_internal(items, selected, filter, filterData, "安装当前文件夹的所有安装包?", false);
}
void action_install_cias_delete(linked_list* items, list_item* selected, bool (*filter)(void* data, const char* name, u32 attributes), void* filterData) {
action_install_cias_internal(items, selected, filter, filterData, "即將安裝並刪除資料夾中所有的3DS可導入档案是否繼續", true);
action_install_cias_internal(items, selected, filter, filterData, "安装并删除当前文件夹的所有安装包?", true);
}
// オケー

View File

@ -129,7 +129,7 @@ static Result action_install_tickets_restore(void* data, u32 index) {
}
static bool action_install_tickets_error(void* data, u32 index, Result res, ui_view** errorView) {
*errorView = error_display_res(data, action_install_tickets_draw_top, res, "無法安裝憑據");
*errorView = error_display_res(data, action_install_tickets_draw_top, res, "无法安装应用引导表.");
return true;
}
@ -158,7 +158,7 @@ static void action_install_tickets_update(ui_view* view, void* data, float* prog
info_destroy(view);
if(R_SUCCEEDED(installData->installInfo.result)) {
prompt_display_notify("成功", "成功安裝", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "安装.", COLOR_TEXT, NULL, NULL, NULL);
}
action_install_tickets_free_data(installData);
@ -171,7 +171,7 @@ static void action_install_tickets_update(ui_view* view, void* data, float* prog
}
*progress = installData->installInfo.currTotal != 0 ? (float) ((double) installData->installInfo.currProcessed / (double) installData->installInfo.currTotal) : 0;
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s, 剩餘 %s", installData->installInfo.processed, installData->installInfo.total,
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", installData->installInfo.processed, installData->installInfo.total,
ui_get_display_size(installData->installInfo.currProcessed),
ui_get_display_size_units(installData->installInfo.currProcessed),
ui_get_display_size(installData->installInfo.currTotal),
@ -187,9 +187,9 @@ static void action_install_tickets_onresponse(ui_view* view, void* data, u32 res
if(response == PROMPT_YES) {
Result res = task_data_op(&installData->installInfo);
if(R_SUCCEEDED(res)) {
info_display("正在安裝憑據中", "按B鍵取消", true, data, action_install_tickets_update, action_install_tickets_draw_top);
info_display("正在安", "按 B 取消.", true, data, action_install_tickets_update, action_install_tickets_draw_top);
} else {
error_display_res(NULL, NULL, res, "無法初始化憑據安裝");
error_display_res(NULL, NULL, res, "无法启动应用引导表安装.");
action_install_tickets_free_data(installData);
}
@ -222,9 +222,9 @@ static void action_install_tickets_loading_update(ui_view* view, void* data, flo
loadingData->installData->installInfo.total = linked_list_size(&loadingData->installData->contents);
loadingData->installData->installInfo.processed = loadingData->installData->installInfo.total;
prompt_display_yes_no("確認", loadingData->message, COLOR_TEXT, loadingData->installData, action_install_tickets_draw_top, action_install_tickets_onresponse);
prompt_display_yes_no("Confirmation", loadingData->message, COLOR_TEXT, loadingData->installData, action_install_tickets_draw_top, action_install_tickets_onresponse);
} else {
error_display_res(NULL, NULL, loadingData->popData.result, "無法列舉憑據目錄");
error_display_res(NULL, NULL, loadingData->popData.result, "无法填充应用引导表列表.");
action_install_tickets_free_data(loadingData->installData);
}
@ -237,13 +237,13 @@ static void action_install_tickets_loading_update(ui_view* view, void* data, flo
svcSignalEvent(loadingData->popData.cancelEvent);
}
snprintf(text, PROGRESS_TEXT_MAX, "獲取憑據目錄......");
snprintf(text, PROGRESS_TEXT_MAX, "正在获取应用引导表列表...");
}
static void action_install_tickets_internal(linked_list* items, list_item* selected, bool (*filter)(void* data, const char* name, u32 attributes), void* filterData, const char* message, bool delete) {
install_tickets_data* data = (install_tickets_data*) calloc(1, sizeof(install_tickets_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配憑據安裝數據");
error_display(NULL, NULL, "无法分配安装应用引导表的数据.");
return;
}
@ -253,7 +253,7 @@ static void action_install_tickets_internal(linked_list* items, list_item* selec
file_info* targetInfo = (file_info*) selected->data;
Result targetCreateRes = task_create_file_item(&data->targetItem, targetInfo->archive, targetInfo->path, targetInfo->attributes, true);
if(R_FAILED(targetCreateRes)) {
error_display_res(NULL, NULL, targetCreateRes, "無法創建目標档案");
error_display_res(NULL, NULL, targetCreateRes, "无法创建目标文件.");
action_install_tickets_free_data(data);
return;
@ -293,7 +293,7 @@ static void action_install_tickets_internal(linked_list* items, list_item* selec
install_tickets_loading_data* loadingData = (install_tickets_loading_data*) calloc(1, sizeof(install_tickets_loading_data));
if(loadingData == NULL) {
error_display(NULL, NULL, "無法分配讀取數據");
error_display(NULL, NULL, "无法分配加载的数据.");
action_install_tickets_free_data(data);
return;
@ -316,28 +316,28 @@ static void action_install_tickets_internal(linked_list* items, list_item* selec
Result listRes = task_populate_files(&loadingData->popData);
if(R_FAILED(listRes)) {
error_display_res(NULL, NULL, listRes, "無法初始化憑據目錄結構");
error_display_res(NULL, NULL, listRes, "无法启动应用引导表列表填充.");
free(loadingData);
action_install_tickets_free_data(data);
return;
}
info_display("正在讀取中", "按B鍵取消", false, loadingData, action_install_tickets_loading_update, action_install_tickets_loading_draw_top);
info_display("Loading", "Press B to cancel.", false, loadingData, action_install_tickets_loading_update, action_install_tickets_loading_draw_top);
}
void action_install_ticket(linked_list* items, list_item* selected) {
action_install_tickets_internal(items, selected, NULL, NULL, "即將安裝所選的憑據,是否繼續?", false);
action_install_tickets_internal(items, selected, NULL, NULL, "安装所选应用引导表?", false);
}
void action_install_ticket_delete(linked_list* items, list_item* selected) {
action_install_tickets_internal(items, selected, NULL, NULL, "即將安裝並刪除所選的憑據,是否繼續?", true);
action_install_tickets_internal(items, selected, NULL, NULL, "安装并删除所选应用引导表?", true);
}
void action_install_tickets(linked_list* items, list_item* selected, bool (*filter)(void* data, const char* name, u32 attributes), void* filterData) {
action_install_tickets_internal(items, selected, filter, filterData, "即將安裝當前資料夾中所有的憑據,是否繼續?", false);
action_install_tickets_internal(items, selected, filter, filterData, "安装当前文件夹的所有应用引导表?", false);
}
void action_install_tickets_delete(linked_list* items, list_item* selected, bool (*filter)(void* data, const char* name, u32 attributes), void* filterData) {
action_install_tickets_internal(items, selected, filter, filterData, "即將安裝並刪除當前資料夾中所有的憑據,是否繼續?", true);
}
action_install_tickets_internal(items, selected, filter, filterData, "安装并删除当前文件夹的所有应用引导表?", true);
}

View File

@ -103,7 +103,7 @@ static Result action_install_url_open_dst(void* data, u32 index, void* initialRe
bool n3ds = false;
if(R_SUCCEEDED(APT_CheckNew3DS(&n3ds)) && !n3ds && ((titleId >> 28) & 0xF) == 2) {
ui_view* view = prompt_display_yes_no("Confirmation", "Title is intended for New 3DS systems.\nContinue?", COLOR_TEXT, data, action_install_url_draw_top, action_install_url_n3ds_onresponse);
ui_view* view = prompt_display_yes_no("确认", "该应用只适用于 New 3DS.\n继续?", COLOR_TEXT, data, action_install_url_draw_top, action_install_url_n3ds_onresponse);
if(view != NULL) {
svcWaitSynchronization(view->active, U64_MAX);
}
@ -245,9 +245,9 @@ static bool action_install_url_error(void* data, u32 index, Result res, ui_view*
char* url = installData->urls[index];
if(strlen(url) > 38) {
*errorView = error_display_res(data, action_install_url_draw_top, res, "Failed to install from URL.\n%.35s...", url);
*errorView = error_display_res(data, action_install_url_draw_top, res, "无法从链接安装.\n%.35s...", url);
} else {
*errorView = error_display_res(data, action_install_url_draw_top, res, "Failed to install from URL.\n%.38s", url);
*errorView = error_display_res(data, action_install_url_draw_top, res, "无法从链接安装.\n%.38s", url);
}
return true;
@ -261,7 +261,7 @@ static void action_install_url_install_update(ui_view* view, void* data, float*
info_destroy(view);
if(R_SUCCEEDED(installData->installInfo.result)) {
prompt_display_notify("成功", "成功安裝", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "安装.", COLOR_TEXT, NULL, NULL, NULL);
}
action_install_url_free_data(installData);
@ -274,7 +274,7 @@ static void action_install_url_install_update(ui_view* view, void* data, float*
}
*progress = installData->installInfo.currTotal != 0 ? (float) ((double) installData->installInfo.currProcessed / (double) installData->installInfo.currTotal) : 0;
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s, 剩餘 %s", installData->installInfo.processed, installData->installInfo.total,
snprintf(text, PROGRESS_TEXT_MAX, "%lu / %lu\n%.2f %s / %.2f %s\n%.2f %s/s, ETA %s", installData->installInfo.processed, installData->installInfo.total,
ui_get_display_size(installData->installInfo.currProcessed),
ui_get_display_size_units(installData->installInfo.currProcessed),
ui_get_display_size(installData->installInfo.currTotal),
@ -290,9 +290,9 @@ static void action_install_url_confirm_onresponse(ui_view* view, void* data, u32
if(response == PROMPT_YES) {
Result res = task_data_op(&installData->installInfo);
if(R_SUCCEEDED(res)) {
info_display("正在從 URL(s) 安裝", "按B鍵取消", true, data, action_install_url_install_update, action_install_url_draw_top);
info_display("正在安装", "按 B 取消.", true, data, action_install_url_install_update, action_install_url_draw_top);
} else {
error_display_res(NULL, NULL, res, "無法初始化安裝程式");
error_display_res(NULL, NULL, res, "无法启动链接安装.");
action_install_url_free_data(installData);
}
@ -307,7 +307,7 @@ void action_install_url(const char* confirmMessage, const char* urls, const char
void (*drawTop)(ui_view* view, void* data, float x1, float y1, float x2, float y2, u32 index)) {
install_url_data* data = (install_url_data*) calloc(1, sizeof(install_url_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配 URL 安裝數據");
error_display(NULL, NULL, "无法分配链接安装的数据.");
return;
}
@ -399,5 +399,5 @@ void action_install_url(const char* confirmMessage, const char* urls, const char
data->installInfo.finished = true;
prompt_display_yes_no("確認", confirmMessage, COLOR_TEXT, data, action_install_url_draw_top, action_install_url_confirm_onresponse);
}
prompt_display_yes_no("确认", confirmMessage, COLOR_TEXT, data, action_install_url_draw_top, action_install_url_confirm_onresponse);
}

View File

@ -21,16 +21,16 @@ static void action_launch_title_update(ui_view* view, void* data, float* progres
ui_pop();
info_destroy(view);
error_display_res(info, task_draw_title_info, res, "無法啟動程式");
error_display_res(info, task_draw_title_info, res, "无法启动应用.");
}
}
static void action_launch_title_onresponse(ui_view* view, void* data, u32 response) {
if(response == PROMPT_YES) {
info_display("正在啟動程式中", "", false, data, action_launch_title_update, task_draw_title_info);
info_display("正在启动", "", false, data, action_launch_title_update, task_draw_title_info);
}
}
void action_launch_title(linked_list* items, list_item* selected) {
prompt_display_yes_no("確認", "即將啟動所選的程式,是否繼續?", COLOR_TEXT, selected->data, task_draw_title_info, action_launch_title_onresponse);
}
prompt_display_yes_no("确认", "启动所选应用?", COLOR_TEXT, selected->data, task_draw_title_info, action_launch_title_onresponse);
}

View File

@ -43,9 +43,9 @@ static void action_new_folder_onresponse(ui_view* view, void* data, SwkbdButton
linked_list_sort(newFolderData->items, NULL, task_compare_files);
}
prompt_display_notify("成功", "創建新的資料夾", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "创建.", COLOR_TEXT, NULL, NULL, NULL);
} else {
error_display_res(NULL, NULL, res, "無法創建新的資料夾");
error_display_res(NULL, NULL, res, "无法创建文件夹.");
}
}
@ -55,7 +55,7 @@ static void action_new_folder_onresponse(ui_view* view, void* data, SwkbdButton
void action_new_folder(linked_list* items, list_item* selected) {
new_folder_data* data = (new_folder_data*) calloc(1, sizeof(new_folder_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配新資料夾的數據");
error_display(NULL, NULL, "无法分配新建文件夹的数据.");
return;
}
@ -63,6 +63,5 @@ void action_new_folder(linked_list* items, list_item* selected) {
data->items = items;
data->selected = selected;
kbd_display("輸入新資料夾的名字", "", SWKBD_TYPE_NORMAL, 0, SWKBD_NOTEMPTY_NOTBLANK, FILE_NAME_MAX, data, action_new_folder_onresponse);
kbd_display("输入文件夹名称", "", SWKBD_TYPE_NORMAL, 0, SWKBD_NOTEMPTY_NOTBLANK, FILE_NAME_MAX, data, action_new_folder_onresponse);
}

View File

@ -211,7 +211,7 @@ static Result action_paste_contents_restore(void* data, u32 index) {
}
static bool action_paste_contents_error(void* data, u32 index, Result res, ui_view** errorView) {
*errorView = error_display_res(data, action_paste_contents_draw_top, res, "Failed to paste content.");
*errorView = error_display_res(data, action_paste_contents_draw_top, res, "无法粘贴项目.");
return true;
}
@ -240,7 +240,7 @@ static void action_paste_contents_update(ui_view* view, void* data, float* progr
info_destroy(view);
if(R_SUCCEEDED(pasteData->pasteInfo.result)) {
prompt_display_notify("成功", "档案以粘貼", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "已粘贴.", COLOR_TEXT, NULL, NULL, NULL);
}
action_paste_contents_free_data(pasteData);
@ -268,9 +268,9 @@ static void action_paste_contents_onresponse(ui_view* view, void* data, u32 resp
if(response == PROMPT_YES) {
Result res = task_data_op(&pasteData->pasteInfo);
if(R_SUCCEEDED(res)) {
info_display("正在粘貼档案中", "按B鍵取消", true, data, action_paste_contents_update, action_paste_contents_draw_top);
info_display("正在粘", "按 B 取消.", true, data, action_paste_contents_update, action_paste_contents_draw_top);
} else {
error_display_res(NULL, NULL, res, "無法初始化粘貼操作");
error_display_res(NULL, NULL, res, "无法启动粘贴操作.");
action_paste_contents_free_data(pasteData);
}
@ -300,9 +300,9 @@ static void action_paste_contents_loading_update(ui_view* view, void* data, floa
loadingData->pasteData->pasteInfo.total = linked_list_size(&loadingData->pasteData->contents);
loadingData->pasteData->pasteInfo.processed = loadingData->pasteData->pasteInfo.total;
prompt_display_yes_no("確認", "即將粘貼剪貼板档案到當前資料夾下,是否繼續?", COLOR_TEXT, loadingData->pasteData, action_paste_contents_draw_top, action_paste_contents_onresponse);
prompt_display_yes_no("确认", "粘贴至当前文件夹?", COLOR_TEXT, loadingData->pasteData, action_paste_contents_draw_top, action_paste_contents_onresponse);
} else {
error_display_res(NULL, NULL, loadingData->popData.result, "無法列舉剪貼板档案目錄");
error_display_res(NULL, NULL, loadingData->popData.result, "无法启动剪贴板项目填充.");
action_paste_contents_free_data(loadingData->pasteData);
}
@ -315,18 +315,18 @@ static void action_paste_contents_loading_update(ui_view* view, void* data, floa
svcSignalEvent(loadingData->popData.cancelEvent);
}
snprintf(text, PROGRESS_TEXT_MAX, "獲取剪貼板档案目錄中......");
snprintf(text, PROGRESS_TEXT_MAX, "正在获取剪贴板项目...");
}
void action_paste_contents(linked_list* items, list_item* selected) {
if(!clipboard_has_contents()) {
prompt_display_notify("", "剪貼板無档案.", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("", "剪贴板为空.", COLOR_TEXT, NULL, NULL, NULL);
return;
}
paste_contents_data* data = (paste_contents_data*) calloc(1, sizeof(paste_contents_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配粘貼档案數據");
error_display(NULL, NULL, "无法分配粘贴项目的数据.");
return;
}
@ -336,7 +336,7 @@ void action_paste_contents(linked_list* items, list_item* selected) {
file_info* targetInfo = (file_info*) selected->data;
Result targetCreateRes = task_create_file_item(&data->targetItem, targetInfo->archive, targetInfo->path, targetInfo->attributes, false);
if(R_FAILED(targetCreateRes)) {
error_display_res(NULL, NULL, targetCreateRes, "無法創建目標档案");
error_display_res(NULL, NULL, targetCreateRes, "无法创建目标文件.");
action_paste_contents_free_data(data);
return;
@ -374,7 +374,7 @@ void action_paste_contents(linked_list* items, list_item* selected) {
paste_contents_loading_data* loadingData = (paste_contents_loading_data*) calloc(1, sizeof(paste_contents_loading_data));
if(loadingData == NULL) {
error_display(NULL, NULL, "無法分配讀取數據");
error_display(NULL, NULL, "无法分配加载的数据.");
action_paste_contents_free_data(data);
return;
@ -393,12 +393,12 @@ void action_paste_contents(linked_list* items, list_item* selected) {
Result listRes = task_populate_files(&loadingData->popData);
if(R_FAILED(listRes)) {
error_display_res(NULL, NULL, listRes, "無法初始化剪貼板档案目錄結構");
error_display_res(NULL, NULL, listRes, "无法启动剪贴板项目填充.");
free(loadingData);
action_paste_contents_free_data(data);
return;
}
info_display("正在讀期中", "按B鍵取消", false, loadingData, action_paste_contents_loading_update, action_paste_contents_loading_draw_top);
}
info_display("正在加载", "按 B 取消.", false, loadingData, action_paste_contents_loading_update, action_paste_contents_loading_draw_top);
}

View File

@ -57,7 +57,7 @@ static void action_rename_onresponse(ui_view* view, void* data, SwkbdButton butt
}
if(R_SUCCEEDED(res)) {
if(strncmp(selected->name, "<當前目錄>", LIST_ITEM_NAME_MAX) != 0 && strncmp(selected->name, "<當前檔案>", LIST_ITEM_NAME_MAX) != 0) {
if(strncmp(selected->name, "<当前文件夹>", LIST_ITEM_NAME_MAX) != 0 && strncmp(selected->name, "<当前文件>", LIST_ITEM_NAME_MAX) != 0) {
string_copy(selected->name, fileName, LIST_ITEM_NAME_MAX);
}
@ -66,9 +66,9 @@ static void action_rename_onresponse(ui_view* view, void* data, SwkbdButton butt
linked_list_sort(renameData->items, NULL, task_compare_files);
prompt_display_notify("成功", "已重命名", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "已重命名.", COLOR_TEXT, NULL, NULL, NULL);
} else {
error_display_res(NULL, NULL, res, "無法重命名");
error_display_res(NULL, NULL, res, "无法执行重命名.");
}
}
@ -78,7 +78,7 @@ static void action_rename_onresponse(ui_view* view, void* data, SwkbdButton butt
void action_rename(linked_list* items, list_item* selected) {
rename_data* data = (rename_data*) calloc(1, sizeof(rename_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配重命名數據");
error_display(NULL, NULL, "无法分配重命名的数据.");
return;
}
@ -86,7 +86,5 @@ void action_rename(linked_list* items, list_item* selected) {
data->items = items;
data->selected = selected;
kbd_display("輸入新的名字", ((file_info*) selected->data)->name, SWKBD_TYPE_NORMAL, 0, SWKBD_NOTEMPTY_NOTBLANK, FILE_NAME_MAX, data, action_rename_onresponse);
kbd_display("输入新名称", ((file_info*) selected->data)->name, SWKBD_TYPE_NORMAL, 0, SWKBD_NOTEMPTY_NOTBLANK, FILE_NAME_MAX, data, action_rename_onresponse);
}
// オケー

View File

@ -80,7 +80,7 @@ static Result dumpnand_restore(void* data, u32 index) {
}
static bool dumpnand_error(void* data, u32 index, Result res, ui_view** errorView) {
*errorView = error_display_res(NULL, NULL, res, "無法導出NAND");
*errorView = error_display_res(NULL, NULL, res, "无法导出 NAND.");
return true;
}
@ -92,7 +92,7 @@ static void dumpnand_update(ui_view* view, void* data, float* progress, char* te
info_destroy(view);
if(R_SUCCEEDED(dumpData->result)) {
prompt_display_notify("成功", "成功導出NAND", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "已导出.", COLOR_TEXT, NULL, NULL, NULL);
}
free(dumpData);
@ -118,9 +118,9 @@ static void dumpnand_onresponse(ui_view* view, void* data, u32 response) {
Result res = task_data_op(dumpData);
if(R_SUCCEEDED(res)) {
info_display("導出NAND", "按B鍵停止", true, data, dumpnand_update, NULL);
info_display("正在导出", "按 B 取消.", true, data, dumpnand_update, NULL);
} else {
error_display_res(NULL, NULL, res, "無法初始化導出NAND");
error_display_res(NULL, NULL, res, "无法启动导出 NAND.");
free(data);
}
} else {
@ -131,7 +131,7 @@ static void dumpnand_onresponse(ui_view* view, void* data, u32 response) {
void dumpnand_open() {
data_op_data* data = (data_op_data*) calloc(1, sizeof(data_op_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配導出NAND數據");
error_display(NULL, NULL, "无法分配导出 NAND 的数据.");
return;
}
@ -164,7 +164,5 @@ void dumpnand_open() {
data->finished = true;
prompt_display_yes_no("確認", "是否導出原始NAND鏡像", COLOR_TEXT, data, NULL, dumpnand_onresponse);
prompt_display_yes_no("确认", "导出原始 NAND 镜像至 SD 卡?", COLOR_TEXT, data, NULL, dumpnand_onresponse);
}
// オケー

View File

@ -10,9 +10,9 @@
#include "task/uitask.h"
#include "../core/core.h"
static list_item browse_user_save_data = {"瀏覽使用者儲存資料", COLOR_TEXT, action_browse_user_ext_save_data};
static list_item browse_spotpass_save_data = {"瀏覽悄然連接儲存資料", COLOR_TEXT, action_browse_boss_ext_save_data};
static list_item delete_save_data = {"刪除儲存資料", COLOR_TEXT, action_delete_ext_save_data};
static list_item browse_user_save_data = {"浏览用户数据", COLOR_TEXT, action_browse_user_ext_save_data};
static list_item browse_spotpass_save_data = {"浏览悄然连接数据", COLOR_TEXT, action_browse_boss_ext_save_data};
static list_item delete_save_data = {"删除数据", COLOR_TEXT, action_delete_ext_save_data};
typedef struct {
populate_ext_save_data_data populateData;
@ -69,7 +69,7 @@ static void extsavedata_action_update(ui_view* view, void* data, linked_list* it
static void extsavedata_action_open(linked_list* items, list_item* selected) {
extsavedata_action_data* data = (extsavedata_action_data*) calloc(1, sizeof(extsavedata_action_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配追加儲存數據操作的數據.");
error_display(NULL, NULL, "无法分配追加数据操作的数据.");
return;
}
@ -77,7 +77,7 @@ static void extsavedata_action_open(linked_list* items, list_item* selected) {
data->items = items;
data->selected = selected;
list_display("追加儲存數據操作", "A: 選擇, B: 返回", data, extsavedata_action_update, extsavedata_action_draw_top);
list_display("追加数据操作", "A: 选择, B: 返回", data, extsavedata_action_update, extsavedata_action_draw_top);
}
static void extsavedata_options_add_entry(linked_list* items, const char* name, bool* val) {
@ -135,15 +135,15 @@ static void extsavedata_options_update(ui_view* view, void* data, linked_list* i
}
if(linked_list_size(items) == 0) {
extsavedata_options_add_entry(items, "顯示SD卡", &listData->showSD);
extsavedata_options_add_entry(items, "顯示NAND", &listData->showNAND);
extsavedata_options_add_entry(items, "ID排列", &listData->sortById);
extsavedata_options_add_entry(items, "按名稱排列", &listData->sortByName);
extsavedata_options_add_entry(items, "显示 SD 卡中的数据", &listData->showSD);
extsavedata_options_add_entry(items, "显示 NAND 中的数据", &listData->showNAND);
extsavedata_options_add_entry(items, " ID 排序", &listData->sortById);
extsavedata_options_add_entry(items, "按名称排序", &listData->sortByName);
}
}
static void extsavedata_options_open(extsavedata_data* data) {
list_display("選項", "A: 切換, B: 返回", data, extsavedata_options_update, NULL);
list_display("选项", "A: 切换, B: 返回", data, extsavedata_options_update, NULL);
}
static void extsavedata_draw_top(ui_view* view, void* data, float x1, float y1, float x2, float y2, list_item* selected) {
@ -188,14 +188,14 @@ static void extsavedata_update(ui_view* view, void* data, linked_list* items, li
listData->populateData.items = items;
Result res = task_populate_ext_save_data(&listData->populateData);
if(R_FAILED(res)) {
error_display_res(NULL, NULL, res, "無法初始化追加儲存數據目錄結構");
error_display_res(NULL, NULL, res, "无法启动追加数据列表填充.");
}
listData->populated = true;
}
if(listData->populateData.finished && R_FAILED(listData->populateData.result)) {
error_display_res(NULL, NULL, listData->populateData.result, "無法列舉追加儲存數據目錄");
error_display_res(NULL, NULL, listData->populateData.result, "无法填充追加数据列表.");
listData->populateData.result = 0;
}
@ -255,7 +255,7 @@ static int extsavedata_compare(void* data, const void* p1, const void* p2) {
void extsavedata_open() {
extsavedata_data* data = (extsavedata_data*) calloc(1, sizeof(extsavedata_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配追加儲存數據數據");
error_display(NULL, NULL, "无法分配追加数据的数据.");
return;
}
@ -271,7 +271,5 @@ void extsavedata_open() {
data->sortById = false;
data->sortByName = true;
list_display("追加儲存數據", "A: 選擇, B: 返回, X: 刷新, Select: 選項", data, extsavedata_update, extsavedata_draw_top);
list_display("追加数据", "A: 选择, B: 返回, X: 刷新, SELECT: 选项", data, extsavedata_update, extsavedata_draw_top);
}
// オケー

View File

@ -11,29 +11,29 @@
#include "../core/core.h"
static list_item rename_opt = {"重命名", COLOR_TEXT, action_rename};
static list_item copy = {"拷貝", COLOR_TEXT, NULL};
static list_item paste = {"", COLOR_TEXT, action_paste_contents};
static list_item copy = {"复制", COLOR_TEXT, NULL};
static list_item paste = {"", COLOR_TEXT, action_paste_contents};
static list_item delete_file = {"", COLOR_TEXT, action_delete_file};
static list_item delete_file = {"", COLOR_TEXT, action_delete_file};
static list_item install_cia = {"裝3DS可導入档案", COLOR_TEXT, action_install_cia};
static list_item install_and_delete_cia = {"裝並刪除3DS可導入档案", COLOR_TEXT, action_install_cia_delete};
static list_item install_cia = {"装安装包", COLOR_TEXT, action_install_cia};
static list_item install_and_delete_cia = {"装并删除安装包", COLOR_TEXT, action_install_cia_delete};
static list_item install_ticket = {"裝ticket", COLOR_TEXT, action_install_ticket};
static list_item install_and_delete_ticket = {"裝並刪除憑據", COLOR_TEXT, action_install_ticket_delete};
static list_item install_ticket = {"装应用引导表", COLOR_TEXT, action_install_ticket};
static list_item install_and_delete_ticket = {"装并删除应用引导表", COLOR_TEXT, action_install_ticket_delete};
static list_item delete_dir = {"", COLOR_TEXT, action_delete_dir};
static list_item copy_all_contents = {"拷貝所有档案", COLOR_TEXT, NULL};
static list_item delete_all_contents = {"刪除所有档案", COLOR_TEXT, action_delete_dir_contents};
static list_item new_folder = {"新建資料夾", COLOR_TEXT, action_new_folder};
static list_item delete_dir = {"", COLOR_TEXT, action_delete_dir};
static list_item copy_all_contents = {"复制所有项目", COLOR_TEXT, NULL};
static list_item delete_all_contents = {"删除所有项目", COLOR_TEXT, action_delete_dir_contents};
static list_item new_folder = {"新建文件夹", COLOR_TEXT, action_new_folder};
static list_item install_all_cias = {"裝所有3DS可導入档案", COLOR_TEXT, action_install_cias};
static list_item install_and_delete_all_cias = {"裝並刪除所有3DS可導入档案", COLOR_TEXT, action_install_cias_delete};
static list_item delete_all_cias = {"刪除所有3DS可導入档案", COLOR_TEXT, action_delete_dir_cias};
static list_item install_all_cias = {"装所有安装包", COLOR_TEXT, action_install_cias};
static list_item install_and_delete_all_cias = {"装并删除所有安装包", COLOR_TEXT, action_install_cias_delete};
static list_item delete_all_cias = {"删除安装包", COLOR_TEXT, action_delete_dir_cias};
static list_item install_all_tickets = {"裝所有憑據", COLOR_TEXT, action_install_tickets};
static list_item install_and_delete_all_tickets = {"裝並刪除所有憑據", COLOR_TEXT, action_install_tickets_delete};
static list_item delete_all_tickets = {"刪除所有憑據", COLOR_TEXT, action_delete_dir_tickets};
static list_item install_all_tickets = {"装所有应用引导表", COLOR_TEXT, action_install_tickets};
static list_item install_and_delete_all_tickets = {"装并删除所有应用引导表", COLOR_TEXT, action_install_tickets_delete};
static list_item delete_all_tickets = {"删除所有应用引导表", COLOR_TEXT, action_delete_dir_tickets};
typedef struct {
populate_files_data populateData;
@ -107,9 +107,9 @@ static void files_action_update(ui_view* view, void* data, linked_list* items, l
Result res = 0;
if(R_SUCCEEDED(res = clipboard_set_contents(actionData->parent->archive, info->path, selected == &copy_all_contents))) {
prompt_display_notify("成功", selected == &copy_all_contents ? "當前資料夾的档案已拷貝到剪貼板上" : (info->attributes & FS_ATTRIBUTE_DIRECTORY) ? "當前資料夾已拷貝到剪貼板上" : "档案已拷貝到剪貼板上", COLOR_TEXT, info, task_draw_file_info, NULL);
prompt_display_notify("成功", selected == &copy_all_contents ? "当前文件夹的所有项目已复制到剪贴板." : (info->attributes & FS_ATTRIBUTE_DIRECTORY) ? "当前文件夹已复制到剪贴板." : "文件已复制到剪贴板.", COLOR_TEXT, info, task_draw_file_info, NULL);
} else {
error_display_res(info, task_draw_file_info, res, "無法拷貝到剪貼板上");
error_display_res(info, task_draw_file_info, res, "无法复制到剪贴板.");
}
} else if(selected == &install_all_cias || selected == &install_and_delete_all_cias || selected == &install_all_tickets || selected == &install_and_delete_all_tickets) {
void (*filteredAction)(linked_list*, list_item*, bool (*)(void*, const char*, u32), void*) = action;
@ -171,7 +171,7 @@ static void files_action_update(ui_view* view, void* data, linked_list* items, l
static void files_action_open(linked_list* items, list_item* selected, files_data* parent) {
files_action_data* data = (files_action_data*) calloc(1, sizeof(files_action_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配档案操作數據");
error_display(NULL, NULL, "无法分配文件操作的数据.");
return;
}
@ -196,7 +196,7 @@ static void files_action_open(linked_list* items, list_item* selected, files_dat
}
}
list_display((((file_info*) selected->data)->attributes & FS_ATTRIBUTE_DIRECTORY) ? "資料夾操作" : "档案操作", "A: 選擇, B: 返回", data, files_action_update, files_action_draw_top);
list_display((((file_info*) selected->data)->attributes & FS_ATTRIBUTE_DIRECTORY) ? "文件夹操作" : "文件操作", "A: 选择, B: 返回", data, files_action_update, files_action_draw_top);
}
static void files_options_add_entry(linked_list* items, const char* name, bool* val) {
@ -238,16 +238,16 @@ static void files_options_update(ui_view* view, void* data, linked_list* items,
}
if(linked_list_size(items) == 0) {
files_options_add_entry(items, "顯示隠藏档案", &listData->showHidden);
files_options_add_entry(items, "顯示資料夾", &listData->showDirectories);
files_options_add_entry(items, "顯示档案", &listData->showFiles);
files_options_add_entry(items, "顯示 CIAs", &listData->showCias);
files_options_add_entry(items, "顯示 Tickets", &listData->showTickets);
files_options_add_entry(items, "显示隐藏的项目", &listData->showHidden);
files_options_add_entry(items, "显示文件夹", &listData->showDirectories);
files_options_add_entry(items, "显示文件", &listData->showFiles);
files_options_add_entry(items, "显示安装包", &listData->showCias);
files_options_add_entry(items, "显示应用引导表", &listData->showTickets);
}
}
static void files_options_open(files_data* data) {
list_display("選項", "A: 切換, B: 返回", data, files_options_update, NULL);
list_display("选项", "A: 切换, B: 返回", data, files_options_update, NULL);
}
static void files_draw_top(ui_view* view, void* data, float x1, float y1, float x2, float y2, list_item* selected) {
@ -270,7 +270,7 @@ static void files_repopulate(files_data* listData, linked_list* items) {
Result res = task_populate_files(&listData->populateData);
if(R_FAILED(res)) {
error_display_res(NULL, NULL, res, "無法初始化档案目錄結構");
error_display_res(NULL, NULL, res, "无法启动文件列表填充.");
}
listData->populated = true;
@ -347,7 +347,7 @@ static void files_update(ui_view* view, void* data, linked_list* items, list_ite
if(selected != NULL && selected->data != NULL && (selectedTouched || (hidKeysDown() & KEY_A))) {
file_info* fileInfo = (file_info*) selected->data;
if((fileInfo->attributes & FS_ATTRIBUTE_DIRECTORY) && strncmp(selected->name, "<當前資料夾>", LIST_ITEM_NAME_MAX) != 0) {
if((fileInfo->attributes & FS_ATTRIBUTE_DIRECTORY) && strncmp(selected->name, "<当前文件夹>", LIST_ITEM_NAME_MAX) != 0) {
files_navigate(listData, items, fileInfo->path);
} else {
files_action_open(items, selected, listData);
@ -360,7 +360,7 @@ static void files_update(ui_view* view, void* data, linked_list* items, list_ite
}
if(listData->populateData.finished && R_FAILED(listData->populateData.result)) {
error_display_res(NULL, NULL, listData->populateData.result, "無法列舉档案目錄");
error_display_res(NULL, NULL, listData->populateData.result, "无法填充文件列表.");
listData->populateData.result = 0;
}
@ -369,7 +369,7 @@ static void files_update(ui_view* view, void* data, linked_list* items, list_ite
void files_open(FS_ArchiveID archiveId, FS_Path archivePath) {
files_data* data = (files_data*) calloc(1, sizeof(files_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配档案數據");
error_display(NULL, NULL, "无法分配文件的数据.");
return;
}
@ -397,7 +397,7 @@ void files_open(FS_ArchiveID archiveId, FS_Path archivePath) {
if(archivePath.data != NULL) {
data->archivePath.data = calloc(1, data->archivePath.size);
if(data->archivePath.data == NULL) {
error_display(NULL, NULL, "無法分配档案數據");
error_display(NULL, NULL, "无法分配文件的数据.");
files_free_data(data);
return;
@ -412,13 +412,13 @@ void files_open(FS_ArchiveID archiveId, FS_Path archivePath) {
Result res = 0;
if(R_FAILED(res = fs_open_archive(&data->archive, archiveId, archivePath))) {
error_display_res(NULL, NULL, res, "無法打開档案列表存档");
error_display_res(NULL, NULL, res, "没有找到文件夹.");
files_free_data(data);
return;
}
list_display("档案", "A: 選擇, B: 返回, X: 刷新, Select: 選項", data, files_update, files_draw_top);
list_display("文件", "A: 选择, B: 返回, X: 刷新, SELECT: 选项", data, files_update, files_draw_top);
}
static void files_open_nand_warning_onresponse(ui_view* view, void* data, u32 response) {
@ -430,7 +430,7 @@ static void files_open_nand_warning_onresponse(ui_view* view, void* data, u32 re
}
void files_open_nand_warning(FS_ArchiveID archive) {
prompt_display_yes_no("確認", "修改NAND是危險的可能會導致\n 系統無法正常運行。\n確保自己知道行為造成的後果。\n\n是否繼續?", COLOR_TEXT, (void*) archive, NULL, files_open_nand_warning_onresponse);
prompt_display_yes_no("确认", "修改 NAND 是危险的,\n这可能导致系统无法正常运行,\n请您确保自己知道正在做什么.\n\n继续?", COLOR_TEXT, (void*) archive, NULL, files_open_nand_warning_onresponse);
}
void files_open_sd() {
@ -452,5 +452,3 @@ void files_open_twl_photo() {
void files_open_twl_sound() {
files_open(ARCHIVE_TWL_SOUND, fsMakePath(PATH_EMPTY, ""));
}
// オケー

View File

@ -120,19 +120,19 @@ void init() {
Result romfsRes = romfsInit();
if(R_FAILED(romfsRes)) {
error_panic("無法掛載 RomFS: %08lX", romfsRes);
error_panic("无法挂载 RomFS: %08lX", romfsRes);
return;
}
if(R_FAILED(init_services())) {
if(!attempt_patch_pid()) {
error_panic("無法操控內核\n請確認已獲得內核權限");
error_panic("内核破解未安装.\n请运行内核破解并重试.");
return;
}
Result initRes = init_services();
if(R_FAILED(initRes)) {
error_panic("無法初始化服務: %08lX", initRes);
error_panic("无法初始化服务: %08lX", initRes);
return;
}
}
@ -142,7 +142,7 @@ void init() {
APT_GetAppCpuTimeLimit(&old_time_limit);
Result cpuRes = APT_SetAppCpuTimeLimit(30);
if(R_FAILED(cpuRes)) {
error_panic("無法設置 Syscore CPU 時間限制: %08lX", cpuRes);
error_panic("无法设置系统核心 CPU 时间限制: %08lX", cpuRes);
return;
}
@ -186,4 +186,4 @@ int main(int argc, const char* argv[]) {
cleanup();
return 0;
}
}

View File

@ -7,19 +7,19 @@
#include "section.h"
#include "../core/core.h"
static list_item sd = {"SD Card", COLOR_TEXT, files_open_sd};
static list_item sd = {"SD ", COLOR_TEXT, files_open_sd};
static list_item ctr_nand = {"CTR NAND", COLOR_TEXT, files_open_ctr_nand};
static list_item twl_nand = {"TWL NAND", COLOR_TEXT, files_open_twl_nand};
static list_item twl_photo = {"TWL Photo", COLOR_TEXT, files_open_twl_photo};
static list_item twl_sound = {"TWL Sound", COLOR_TEXT, files_open_twl_sound};
static list_item dump_nand = {"出 NAND", COLOR_TEXT, dumpnand_open};
static list_item titles = {"程式", COLOR_TEXT, titles_open};
static list_item pending_titles = {"待裝程式", COLOR_TEXT, pendingtitles_open};
static list_item tickets = {"憑據", COLOR_TEXT, tickets_open};
static list_item ext_save_data = {"追加儲存數據", COLOR_TEXT, extsavedata_open};
static list_item system_save_data = {"統儲存數據", COLOR_TEXT, systemsavedata_open};
static list_item remote_install = {"遠程安裝", COLOR_TEXT, remoteinstall_open};
static list_item update = {"升級至最新Latest Not Releases", COLOR_TEXT, update_open};
static list_item twl_photo = {"TWL 照片", COLOR_TEXT, files_open_twl_photo};
static list_item twl_sound = {"TWL 声音", COLOR_TEXT, files_open_twl_sound};
static list_item dump_nand = {"出 NAND", COLOR_TEXT, dumpnand_open};
static list_item titles = {"应用", COLOR_TEXT, titles_open};
static list_item pending_titles = {"未完成的应用", COLOR_TEXT, pendingtitles_open};
static list_item tickets = {"应用引导表", COLOR_TEXT, tickets_open};
static list_item ext_save_data = {"追加数据", COLOR_TEXT, extsavedata_open};
static list_item system_save_data = {"统数据", COLOR_TEXT, systemsavedata_open};
static list_item remote_install = {"远程安装", COLOR_TEXT, remoteinstall_open};
static list_item update = {"检查更新", COLOR_TEXT, update_open};
static void mainmenu_draw_top(ui_view* view, void* data, float x1, float y1, float x2, float y2, list_item* selected) {
u32 logoWidth;
@ -64,5 +64,5 @@ static void mainmenu_update(ui_view* view, void* data, linked_list* items, list_
void mainmenu_open() {
resources_load();
list_display("選單", "A: 選擇, START: 退出", NULL, mainmenu_update, mainmenu_draw_top);
list_display("菜单", "A: 选择, START: 退出", NULL, mainmenu_update, mainmenu_draw_top);
}

View File

@ -9,8 +9,8 @@
#include "task/uitask.h"
#include "../core/core.h"
static list_item delete_pending_title = {"刪除待裝程式", COLOR_TEXT, action_delete_pending_title};
static list_item delete_all_pending_titles = {"刪除全部待裝程式", COLOR_TEXT, action_delete_all_pending_titles};
static list_item delete_pending_title = {"删除未完成的应用", COLOR_TEXT, action_delete_pending_title};
static list_item delete_all_pending_titles = {"删除所有未完成的应用", COLOR_TEXT, action_delete_all_pending_titles};
typedef struct {
populate_pending_titles_data populateData;
@ -61,7 +61,7 @@ static void pendingtitles_action_update(ui_view* view, void* data, linked_list*
static void pendingtitles_action_open(linked_list* items, list_item* selected) {
pendingtitles_action_data* data = (pendingtitles_action_data*) calloc(1, sizeof(pendingtitles_action_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配待裝程式操作數據");
error_display(NULL, NULL, "无法分配未完成的应用操作的数据.");
return;
}
@ -69,7 +69,7 @@ static void pendingtitles_action_open(linked_list* items, list_item* selected) {
data->items = items;
data->selected = selected;
list_display("待裝程式操作", "A: 選擇, B: 返回", data, pendingtitles_action_update, pendingtitles_action_draw_top);
list_display("未完成的应用操作", "A: 选择, B: 返回", data, pendingtitles_action_update, pendingtitles_action_draw_top);
}
static void pendingtitles_draw_top(ui_view* view, void* data, float x1, float y1, float x2, float y2, list_item* selected) {
@ -109,14 +109,14 @@ static void pendingtitles_update(ui_view* view, void* data, linked_list* items,
listData->populateData.items = items;
Result res = task_populate_pending_titles(&listData->populateData);
if(R_FAILED(res)) {
error_display_res(NULL, NULL, res, "無法初始化待裝程式目錄結構");
error_display_res(NULL, NULL, res, "无法启动未完成的应用列表填充.");
}
listData->populated = true;
}
if(listData->populateData.finished && R_FAILED(listData->populateData.result)) {
error_display_res(NULL, NULL, listData->populateData.result, "無法列舉待裝程式目錄");
error_display_res(NULL, NULL, listData->populateData.result, "无法填充未完成的应用列表.");
listData->populateData.result = 0;
}
@ -130,14 +130,12 @@ static void pendingtitles_update(ui_view* view, void* data, linked_list* items,
void pendingtitles_open() {
pendingtitles_data* data = (pendingtitles_data*) calloc(1, sizeof(pendingtitles_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配待裝程式數據");
error_display(NULL, NULL, "无法分配未完成的应用的数据.");
return;
}
data->populateData.finished = true;
list_display("待裝程式 (Pending Titles)", "A: 選擇, B: 返回, X: 刷新", data, pendingtitles_update, pendingtitles_draw_top);
list_display("未完成的应用", "A: 选择, B: 返回, X: 刷新", data, pendingtitles_update, pendingtitles_draw_top);
}
// オケー

View File

@ -144,7 +144,7 @@ static void remoteinstall_network_update(ui_view* view, void* data, float* progr
u32 size = 0;
if(remoteinstall_network_recvwait(networkData->clientSocket, &size, sizeof(size), 0) != sizeof(size)) {
error_display_errno(NULL, NULL, errno, "無法讀取載荷長度");
error_display_errno(NULL, NULL, errno, "无法读取载荷大小.");
remoteinstall_network_close_client(data);
return;
@ -152,7 +152,7 @@ static void remoteinstall_network_update(ui_view* view, void* data, float* progr
size = ntohl(size);
if(size >= DOWNLOAD_URL_MAX * INSTALL_URLS_MAX) {
error_display(NULL, NULL, "載荷過長");
error_display(NULL, NULL, "载荷过大.");
remoteinstall_network_close_client(data);
return;
@ -160,14 +160,14 @@ static void remoteinstall_network_update(ui_view* view, void* data, float* progr
char* urls = (char*) calloc(size + 1, sizeof(char));
if(urls == NULL) {
error_display(NULL, NULL, "無法分配 URL 緩存");
error_display(NULL, NULL, "无法分配链接的缓存.");
remoteinstall_network_close_client(data);
return;
}
if(remoteinstall_network_recvwait(networkData->clientSocket, urls, size, 0) != size) {
error_display_errno(NULL, NULL, errno, "無法讀取 URL");
error_display_errno(NULL, NULL, errno, "无法读取链接.");
free(urls);
remoteinstall_network_close_client(data);
@ -175,7 +175,7 @@ static void remoteinstall_network_update(ui_view* view, void* data, float* progr
}
remoteinstall_set_last_urls(urls);
action_install_url("從收到的 URL 中安裝?", urls, NULL, data, NULL, remoteinstall_network_close_client, NULL);
action_install_url("从接收到的链接安装?", urls, NULL, data, NULL, remoteinstall_network_close_client, NULL);
free(urls);
} else if(errno != EAGAIN) {
@ -184,7 +184,7 @@ static void remoteinstall_network_update(ui_view* view, void* data, float* progr
info_destroy(view);
}
error_display_errno(NULL, NULL, errno, "無法打開接口");
error_display_errno(NULL, NULL, errno, "无法打开接口.");
if(errno == 22 || errno == 115) {
remoteinstall_network_free_data(networkData);
@ -194,20 +194,20 @@ static void remoteinstall_network_update(ui_view* view, void* data, float* progr
}
struct in_addr addr = {(in_addr_t) gethostid()};
snprintf(text, PROGRESS_TEXT_MAX, "等待接中...\nIP: %s\n端口: 5000", inet_ntoa(addr));
snprintf(text, PROGRESS_TEXT_MAX, "等待接中...\nIP: %s\n端口: 5000", inet_ntoa(addr));
}
static void remoteinstall_receive_urls_network() {
remoteinstall_network_data* data = (remoteinstall_network_data*) calloc(1, sizeof(remoteinstall_network_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配互聯網安裝數據");
error_display(NULL, NULL, "无法分配网络安装的数据.");
return;
}
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if(sock < 0) {
error_display_errno(NULL, NULL, errno, "無法打開伺服器接口");
error_display_errno(NULL, NULL, errno, "无法打开服务接口.");
remoteinstall_network_free_data(data);
return;
@ -221,7 +221,7 @@ static void remoteinstall_receive_urls_network() {
server.sin_addr.s_addr = (in_addr_t) gethostid();
if(bind(data->serverSocket, (struct sockaddr*) &server, sizeof(server)) < 0) {
error_display_errno(NULL, NULL, errno, "無法綁定伺服器接口");
error_display_errno(NULL, NULL, errno, "无法绑定服务接口.");
remoteinstall_network_free_data(data);
return;
@ -230,13 +230,13 @@ static void remoteinstall_receive_urls_network() {
fcntl(data->serverSocket, F_SETFL, fcntl(data->serverSocket, F_GETFL, 0) | O_NONBLOCK);
if(listen(data->serverSocket, 5) < 0) {
error_display_errno(NULL, NULL, errno, "無法監聽伺服器接口");
error_display_errno(NULL, NULL, errno, "无法监听服务接口.");
remoteinstall_network_free_data(data);
return;
}
info_display("受URL(s)", "B: 返回", false, data, remoteinstall_network_update, NULL);
info_display("收链接", "B: 返回", false, data, remoteinstall_network_update, NULL);
}
#define QR_IMAGE_WIDTH 400
@ -324,7 +324,7 @@ static void remoteinstall_qr_update(ui_view* view, void* data, float* progress,
ui_pop();
info_destroy(view);
error_display_res(NULL, NULL, capRes, "無法啟動後鏡頭捕獲");
error_display_res(NULL, NULL, capRes, "无法打开相机捕获.");
remoteinstall_qr_free_data(installData);
return;
@ -338,7 +338,7 @@ static void remoteinstall_qr_update(ui_view* view, void* data, float* progress,
info_destroy(view);
if(R_FAILED(installData->captureInfo.result)) {
error_display_res(NULL, NULL, installData->captureInfo.result, "獲圖像時發生錯誤");
error_display_res(NULL, NULL, installData->captureInfo.result, "获相机画面时出错.");
}
remoteinstall_qr_free_data(installData);
@ -376,18 +376,18 @@ static void remoteinstall_qr_update(ui_view* view, void* data, float* progress,
remoteinstall_set_last_urls((const char*) qrData.payload);
action_install_url("即將從掃描到的 QR Code 中安裝,是否繼續?", (const char*) qrData.payload, NULL, NULL, NULL, NULL, NULL);
action_install_url("从扫描到的二维码安装?", (const char*) qrData.payload, NULL, NULL, NULL, NULL, NULL);
return;
}
}
snprintf(text, PROGRESS_TEXT_MAX, "等待 QR code...");
snprintf(text, PROGRESS_TEXT_MAX, "等待扫描二维码中...");
}
static void remoteinstall_scan_qr_code() {
remoteinstall_qr_data* data = (remoteinstall_qr_data*) calloc(1, sizeof(remoteinstall_qr_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配 QR 安裝數據");
error_display(NULL, NULL, "无法分配二维码安装的数据.");
return;
}
@ -405,14 +405,14 @@ static void remoteinstall_scan_qr_code() {
data->qrContext = quirc_new();
if(data->qrContext == NULL) {
error_display(NULL, NULL, "無法創建 QR 環境");
error_display(NULL, NULL, "无法创建二维码框.");
remoteinstall_qr_free_data(data);
return;
}
if(quirc_resize(data->qrContext, QR_IMAGE_WIDTH, QR_IMAGE_HEIGHT) != 0) {
error_display(NULL, NULL, "無法調整 QR 環境");
error_display(NULL, NULL, "无法调整二维码框大小.");
remoteinstall_qr_free_data(data);
return;
@ -420,7 +420,7 @@ static void remoteinstall_scan_qr_code() {
data->captureInfo.buffer = (u16*) calloc(1, QR_IMAGE_WIDTH * QR_IMAGE_HEIGHT * sizeof(u16));
if(data->captureInfo.buffer == NULL) {
error_display(NULL, NULL, "無法創建圖像緩存");
error_display(NULL, NULL, "无法创建图像缓存.");
remoteinstall_qr_free_data(data);
return;
@ -428,50 +428,50 @@ static void remoteinstall_scan_qr_code() {
data->tex = screen_allocate_free_texture();
info_display("QR Code 安裝", "B: 返回, X: 切換鏡頭", false, data, remoteinstall_qr_update, remoteinstall_qr_draw_top);
info_display("二维码安装", "B: 返回, X: 切换相机", false, data, remoteinstall_qr_update, remoteinstall_qr_draw_top);
}
static void remoteinstall_manually_enter_urls_onresponse(ui_view* view, void* data, SwkbdButton button, const char* response) {
if(button == SWKBD_BUTTON_CONFIRM) {
remoteinstall_set_last_urls(response);
action_install_url("即將從輸入的 URL(s) 安裝,是否繼續?", response, NULL, NULL, NULL, NULL, NULL);
action_install_url("从输入的链接安装?", response, NULL, NULL, NULL, NULL, NULL);
}
}
static void remoteinstall_manually_enter_urls() {
kbd_display("輸入 URL(s)", "", SWKBD_TYPE_NORMAL, SWKBD_MULTILINE, SWKBD_NOTEMPTY_NOTBLANK, DOWNLOAD_URL_MAX * INSTALL_URLS_MAX, NULL, remoteinstall_manually_enter_urls_onresponse);
kbd_display("输入链接", "", SWKBD_TYPE_NORMAL, SWKBD_MULTILINE, SWKBD_NOTEMPTY_NOTBLANK, DOWNLOAD_URL_MAX * INSTALL_URLS_MAX, NULL, remoteinstall_manually_enter_urls_onresponse);
}
static void remoteinstall_repeat_last_request() {
char* textBuf = (char*) calloc(1, DOWNLOAD_URL_MAX * INSTALL_URLS_MAX);
if(textBuf != NULL) {
if(remoteinstall_get_last_urls(textBuf, DOWNLOAD_URL_MAX * INSTALL_URLS_MAX)) {
action_install_url("即將從上一需要的 URL(s) 中安裝,是否繼續?", textBuf, NULL, NULL, NULL, NULL, NULL);
action_install_url("从上次请求的链接安装?", textBuf, NULL, NULL, NULL, NULL, NULL);
} else {
prompt_display_notify("", "沒有先前需要的 URL(s)", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("", "没有找到以前请求的链接.", COLOR_TEXT, NULL, NULL, NULL);
}
free(textBuf);
} else {
error_display_res(NULL, NULL, R_APP_OUT_OF_MEMORY, "無法分配 URL 文本緩存");
error_display_res(NULL, NULL, R_APP_OUT_OF_MEMORY, "无法分配链接文本的缓存.");
}
}
static void remoteinstall_forget_last_request() {
Result forgetRes = remoteinstall_set_last_urls(NULL);
if(R_SUCCEEDED(forgetRes)) {
prompt_display_notify("成功", "已清除上一需要的 URL(s)", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "已清除.", COLOR_TEXT, NULL, NULL, NULL);
} else {
error_display_res(NULL, NULL, forgetRes, "無法清除上一需要的 URL(s).");
error_display_res(NULL, NULL, forgetRes, "无法清除上次请求的链接.");
}
}
static list_item receive_urls_network = {"接受互聯網的 URLs", COLOR_TEXT, remoteinstall_receive_urls_network};
static list_item scan_qr_code = {"掃描 QR Code", COLOR_TEXT, remoteinstall_scan_qr_code};
static list_item manually_enter_urls = {"動輸入 URLs", COLOR_TEXT, remoteinstall_manually_enter_urls};
static list_item repeat_last_request = {"復上一需要的 URLs", COLOR_TEXT, remoteinstall_repeat_last_request};
static list_item forget_last_request = {"清除上一需要的 URLs", COLOR_TEXT, remoteinstall_forget_last_request};
static list_item receive_urls_network = {"网络接收链接", COLOR_TEXT, remoteinstall_receive_urls_network};
static list_item scan_qr_code = {"扫描二维码", COLOR_TEXT, remoteinstall_scan_qr_code};
static list_item manually_enter_urls = {"动输入链接", COLOR_TEXT, remoteinstall_manually_enter_urls};
static list_item repeat_last_request = {"复上次请求的链接", COLOR_TEXT, remoteinstall_repeat_last_request};
static list_item forget_last_request = {"清除上次请求的链接", COLOR_TEXT, remoteinstall_forget_last_request};
static void remoteinstall_update(ui_view* view, void* data, linked_list* items, list_item* selected, bool selectedTouched) {
if(hidKeysDown() & KEY_B) {
@ -496,7 +496,5 @@ static void remoteinstall_update(ui_view* view, void* data, linked_list* items,
}
void remoteinstall_open() {
list_display("遠程安裝", "A: 選擇, B: 返回", NULL, remoteinstall_update, NULL);
list_display("远程安装", "A: 选择, B: 返回", NULL, remoteinstall_update, NULL);
}
// オケー

View File

@ -25,7 +25,7 @@ static FILE* resources_open_file(const char* path) {
static void resources_load_texture(u32 id, const char* name) {
FILE* fd = resources_open_file(name);
if(fd == NULL) {
error_panic("無法打開 texture \"%s\": %s\n", name, strerror(errno));
error_panic("无法打开纹理 \"%s\": %s\n", name, strerror(errno));
return;
}
@ -37,7 +37,7 @@ static void resources_load_texture(u32 id, const char* name) {
void resources_load() {
FILE* fd = resources_open_file("textcolor.cfg");
if(fd == NULL) {
error_panic("無法打開文字顏色配置: %s\n", strerror(errno));
error_panic("无法打开文本颜色配置: %s\n", strerror(errno));
return;
}
@ -105,4 +105,4 @@ void resources_load() {
resources_load_texture(TEXTURE_WIFI_1, "wifi1.png");
resources_load_texture(TEXTURE_WIFI_2, "wifi2.png");
resources_load_texture(TEXTURE_WIFI_3, "wifi3.png");
}
}

View File

@ -9,8 +9,8 @@
#include "task/uitask.h"
#include "../core/core.h"
static list_item browse_save_data = {"瀏覽儲存數據", COLOR_TEXT, action_browse_system_save_data};
static list_item delete_save_data = {"刪除儲存數據", COLOR_TEXT, action_delete_system_save_data};
static list_item browse_save_data = {"浏览数据", COLOR_TEXT, action_browse_system_save_data};
static list_item delete_save_data = {"删除数据", COLOR_TEXT, action_delete_system_save_data};
typedef struct {
populate_system_save_data_data populateData;
@ -61,7 +61,7 @@ static void systemsavedata_action_update(ui_view* view, void* data, linked_list*
static void systemsavedata_action_open(linked_list* items, list_item* selected) {
systemsavedata_action_data* data = (systemsavedata_action_data*) calloc(1, sizeof(systemsavedata_action_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配系統儲存數據操作的數據");
error_display(NULL, NULL, "无法分配系统数据操作的数据.");
return;
}
@ -69,7 +69,7 @@ static void systemsavedata_action_open(linked_list* items, list_item* selected)
data->items = items;
data->selected = selected;
list_display("統儲存數據操作", "A: 選擇, B: 返回", data, systemsavedata_action_update, systemsavedata_action_draw_top);
list_display("统数据操作", "A: 选择, B: 返回", data, systemsavedata_action_update, systemsavedata_action_draw_top);
}
static void systemsavedata_draw_top(ui_view* view, void* data, float x1, float y1, float x2, float y2, list_item* selected) {
@ -109,14 +109,14 @@ static void systemsavedata_update(ui_view* view, void* data, linked_list* items,
listData->populateData.items = items;
Result res = task_populate_system_save_data(&listData->populateData);
if(R_FAILED(res)) {
error_display_res(NULL, NULL, res, "無法初始化系統儲存數據目錄結構");
error_display_res(NULL, NULL, res, "无法启动系统数据列表填充.");
}
listData->populated = true;
}
if(listData->populateData.finished && R_FAILED(listData->populateData.result)) {
error_display_res(NULL, NULL, listData->populateData.result, "無法列舉系統儲存數據目錄");
error_display_res(NULL, NULL, listData->populateData.result, "无法填充系统数据列表.");
listData->populateData.result = 0;
}
@ -130,12 +130,12 @@ static void systemsavedata_update(ui_view* view, void* data, linked_list* items,
void systemsavedata_open() {
systemsavedata_data* data = (systemsavedata_data*) calloc(1, sizeof(systemsavedata_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配系統儲存數據的數據");
error_display(NULL, NULL, "无法分配系统数据的数据.");
return;
}
data->populateData.finished = true;
list_display("統儲存數據", "A: 選擇, B: 返回, X: 刷新", data, systemsavedata_update, systemsavedata_draw_top);
}
list_display("统数据", "A: 选择, B: 返回, X: 刷新", data, systemsavedata_update, systemsavedata_draw_top);
}

View File

@ -16,8 +16,8 @@ int task_compare_files(void* userData, const void* p1, const void* p2) {
list_item* info1 = (list_item*) p1;
list_item* info2 = (list_item*) p2;
bool info1Base = strncmp(info1->name, "<當前資料夾>", LIST_ITEM_NAME_MAX) == 0 || strncmp(info1->name, "<當前档案>", LIST_ITEM_NAME_MAX) == 0;
bool info2Base = strncmp(info2->name, "<當前資料夾>", LIST_ITEM_NAME_MAX) == 0 || strncmp(info2->name, "<當前档案>", LIST_ITEM_NAME_MAX) == 0;
bool info1Base = strncmp(info1->name, "<当前文件夹>", LIST_ITEM_NAME_MAX) == 0 || strncmp(info1->name, "<当前文件>", LIST_ITEM_NAME_MAX) == 0;
bool info2Base = strncmp(info2->name, "<当前文件夹>", LIST_ITEM_NAME_MAX) == 0 || strncmp(info2->name, "<当前文件>", LIST_ITEM_NAME_MAX) == 0;
if(info1Base && !info2Base) {
return -1;
@ -199,9 +199,9 @@ static void task_populate_files_thread(void* arg) {
if(R_SUCCEEDED(res = task_create_file_item(&baseItem, data->archive, data->path, 0, false))) {
file_info* baseInfo = (file_info*) baseItem->data;
if(baseInfo->attributes & FS_ATTRIBUTE_DIRECTORY) {
string_copy(baseItem->name, "<當前資料夾>", LIST_ITEM_NAME_MAX);
string_copy(baseItem->name, "<当前文件夹>", LIST_ITEM_NAME_MAX);
} else {
string_copy(baseItem->name, "<當前档案>", LIST_ITEM_NAME_MAX);
string_copy(baseItem->name, "<当前文件>", LIST_ITEM_NAME_MAX);
}
linked_list queue;
@ -363,6 +363,4 @@ Result task_populate_files(populate_files_data* data) {
}
return res;
}
// オケー
}

View File

@ -67,8 +67,8 @@ void task_draw_ext_save_data_info(ui_view* view, void* data, float x1, float y1,
char infoText[512];
snprintf(infoText, sizeof(infoText),
"額外儲存數據 ID: %016llX\n"
"動態: %s",
"追加数据 ID: %016llX\n"
"共享: %s",
info->extSaveDataId,
info->shared ? "" : "");
@ -87,18 +87,18 @@ void task_draw_file_info(ui_view* view, void* data, float x1, float y1, float x2
size_t infoTextPos = 0;
if(strlen(info->name) > 48) {
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, ": %.45s...\n", info->name);
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, ": %.45s...\n", info->name);
} else {
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, ": %.48s\n", info->name);
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, ": %.48s\n", info->name);
}
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "性: ");
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "性: ");
if(info->attributes & (FS_ATTRIBUTE_DIRECTORY | FS_ATTRIBUTE_HIDDEN | FS_ATTRIBUTE_ARCHIVE | FS_ATTRIBUTE_READ_ONLY)) {
bool needsSeparator = false;
if(info->attributes & FS_ATTRIBUTE_DIRECTORY) {
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "資料夾");
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "文件夹");
needsSeparator = true;
}
@ -107,7 +107,7 @@ void task_draw_file_info(ui_view* view, void* data, float x1, float y1, float x2
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, ", ");
}
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "隠藏档案");
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "隐藏的项目");
needsSeparator = true;
}
@ -116,7 +116,7 @@ void task_draw_file_info(ui_view* view, void* data, float x1, float y1, float x2
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, ", ");
}
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "档案");
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "文件");
needsSeparator = true;
}
@ -125,11 +125,11 @@ void task_draw_file_info(ui_view* view, void* data, float x1, float y1, float x2
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, ", ");
}
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "");
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "");
needsSeparator = true;
}
} else {
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "");
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "");
}
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "\n");
@ -150,17 +150,17 @@ void task_draw_file_info(ui_view* view, void* data, float x1, float y1, float x2
}
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos,
"程式 ID: %016llX\n"
"应用 ID: %016llX\n"
"版本: %hu (%d.%d.%d)\n"
"域: %s\n"
"裝後大小: %.2f %s",
"域: %s\n"
"装后大小: %.2f %s",
info->ciaInfo.titleId,
info->ciaInfo.version, (info->ciaInfo.version >> 10) & 0x3F, (info->ciaInfo.version >> 4) & 0x3F, info->ciaInfo.version & 0xF,
regionString,
ui_get_display_size(info->ciaInfo.installedSize),
ui_get_display_size_units(info->ciaInfo.installedSize));
} else if(info->isTicket && info->ticketInfo.loaded) {
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "數據 ID: %016llX", info->ticketInfo.titleId);
infoTextPos += snprintf(infoText + infoTextPos, sizeof(infoText) - infoTextPos, "应用 ID: %016llX", info->ticketInfo.titleId);
}
}
@ -178,11 +178,11 @@ void task_draw_pending_title_info(ui_view* view, void* data, float x1, float y1,
char infoText[512];
snprintf(infoText, sizeof(infoText),
"待裝程式 ID: %016llX\n"
"未完成的应用 ID: %016llX\n"
"位置: %s\n"
"版本: %hu (%d.%d.%d)",
info->titleId,
info->mediaType == MEDIATYPE_NAND ? "NAND" : info->mediaType == MEDIATYPE_SD ? "SD Card" : "遊戲 Card",
info->mediaType == MEDIATYPE_NAND ? "NAND" : info->mediaType == MEDIATYPE_SD ? "SD " : "游戏卡带",
info->version, (info->version >> 10) & 0x3F, (info->version >> 4) & 0x3F, info->version & 0xF);
float infoWidth;
@ -198,7 +198,7 @@ void task_draw_system_save_data_info(ui_view* view, void* data, float x1, float
char infoText[512];
snprintf(infoText, sizeof(infoText), "統儲存數據 ID: %08lX", info->systemSaveDataId);
snprintf(infoText, sizeof(infoText), "统数据 ID: %08lX", info->systemSaveDataId);
float infoWidth;
screen_get_string_size(&infoWidth, NULL, infoText, 0.5f, 0.5f);
@ -214,7 +214,7 @@ void task_draw_ticket_info(ui_view* view, void* data, float x1, float y1, float
if(info->loaded) {
char infoText[512];
snprintf(infoText, sizeof(infoText), "憑據 ID: %016llX", info->titleId);
snprintf(infoText, sizeof(infoText), "应用 ID: %016llX", info->titleId);
float infoWidth;
screen_get_string_size(&infoWidth, NULL, infoText, 0.5f, 0.5f);
@ -241,14 +241,14 @@ void task_draw_title_info(ui_view* view, void* data, float x1, float y1, float x
char infoText[512];
snprintf(infoText, sizeof(infoText),
"程式 ID: %016llX\n"
"应用 ID: %016llX\n"
"位置: %s\n"
"版本: %hu (%d.%d.%d)\n"
"産品代碼: %s\n"
"域: %s\n"
"产品代码: %s\n"
"域: %s\n"
"大小: %.2f %s",
info->titleId,
info->mediaType == MEDIATYPE_NAND ? "NAND" : info->mediaType == MEDIATYPE_SD ? "SD Card" : "遊戲 Card",
info->mediaType == MEDIATYPE_NAND ? "NAND" : info->mediaType == MEDIATYPE_SD ? "SD " : "游戏卡带",
info->version, (info->version >> 10) & 0x3F, (info->version >> 4) & 0x3F, info->version & 0xF,
info->productCode,
regionString,
@ -261,5 +261,3 @@ void task_draw_title_info(ui_view* view, void* data, float x1, float y1, float x
float infoY = y1 + (y2 - y1) / 2 - 8;
screen_draw_string(infoText, infoX, infoY, 0.5f, 0.5f, COLOR_TEXT, true);
}
// オケー

View File

@ -9,8 +9,8 @@
#include "task/uitask.h"
#include "../core/core.h"
static list_item delete_ticket = {"刪除憑據", COLOR_TEXT, action_delete_ticket};
static list_item delete_unused_tickets = {"刪除未使用的憑據", COLOR_TEXT, action_delete_tickets_unused};
static list_item delete_ticket = {"删除应用引导表", COLOR_TEXT, action_delete_ticket};
static list_item delete_unused_tickets = {"删除未使用的应用引导表", COLOR_TEXT, action_delete_tickets_unused};
typedef struct {
populate_tickets_data populateData;
@ -61,7 +61,7 @@ static void tickets_action_update(ui_view* view, void* data, linked_list* items,
static void tickets_action_open(linked_list* items, list_item* selected) {
tickets_action_data* data = (tickets_action_data*) calloc(1, sizeof(tickets_action_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配憑據操作數據");
error_display(NULL, NULL, "无法分配应用引导表操作的数据.");
return;
}
@ -69,7 +69,7 @@ static void tickets_action_open(linked_list* items, list_item* selected) {
data->items = items;
data->selected = selected;
list_display("憑據操作", "A: 選擇, B: 返回", data, tickets_action_update, tickets_action_draw_top);
list_display("应用引导表操作", "A: 选择, B: 返回", data, tickets_action_update, tickets_action_draw_top);
}
static void tickets_draw_top(ui_view* view, void* data, float x1, float y1, float x2, float y2, list_item* selected) {
@ -109,14 +109,14 @@ static void tickets_update(ui_view* view, void* data, linked_list* items, list_i
listData->populateData.items = items;
Result res = task_populate_tickets(&listData->populateData);
if(R_FAILED(res)) {
error_display_res(NULL, NULL, res, "無法初始化憑據目錄結構");
error_display_res(NULL, NULL, res, "无法启动应用引导表列表填充.");
}
listData->populated = true;
}
if(listData->populateData.finished && R_FAILED(listData->populateData.result)) {
error_display_res(NULL, NULL, listData->populateData.result, "無法列舉憑據目錄");
error_display_res(NULL, NULL, listData->populateData.result, "无法填充应用引导表列表.");
listData->populateData.result = 0;
}
@ -130,14 +130,12 @@ static void tickets_update(ui_view* view, void* data, linked_list* items, list_i
void tickets_open() {
tickets_data* data = (tickets_data*) calloc(1, sizeof(tickets_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配憑據數據");
error_display(NULL, NULL, "无法分配应用引导表的数据.");
return;
}
data->populateData.finished = true;
list_display("憑據", "A: 選擇, B: 返回, X: 刷新", data, tickets_update, tickets_draw_top);
list_display("应用引导表", "A: 选择, B: 返回, X: 刷新", data, tickets_update, tickets_draw_top);
}
// オケー

View File

@ -10,18 +10,18 @@
#include "task/uitask.h"
#include "../core/core.h"
static list_item launch_title = {"啓動程式", COLOR_TEXT, action_launch_title};
static list_item delete_title = {"刪除程式", COLOR_TEXT, action_delete_title};
static list_item delete_title_ticket = {"刪除程式和儲存數據", COLOR_TEXT, action_delete_title_ticket};
static list_item launch_title = {"启动应用", COLOR_TEXT, action_launch_title};
static list_item delete_title = {"删除应用", COLOR_TEXT, action_delete_title};
static list_item delete_title_ticket = {"删除应用和应用引导表", COLOR_TEXT, action_delete_title_ticket};
static list_item extract_smdh = {"提取 SMDH", COLOR_TEXT, action_extract_smdh};
static list_item import_seed = {"導入 Seed", COLOR_TEXT, action_import_seed};
static list_item browse_save_data = {"瀏覽儲存文件", COLOR_TEXT, action_browse_title_save_data};
static list_item import_save_data = {"導入儲存文件", COLOR_TEXT, action_import_twl_save};
static list_item export_save_data = {"導出儲存文件", COLOR_TEXT, action_export_twl_save};
static list_item erase_save_data = {"清除儲存文件", COLOR_TEXT, action_erase_twl_save};
static list_item import_secure_value = {"導入安全値", COLOR_TEXT, action_import_secure_value};
static list_item export_secure_value = {"導出安全値", COLOR_TEXT, action_export_secure_value};
static list_item delete_secure_value = {"刪除安全値", COLOR_TEXT, action_delete_secure_value};
static list_item import_seed = {"导入种子", COLOR_TEXT, action_import_seed};
static list_item browse_save_data = {"浏览数据", COLOR_TEXT, action_browse_title_save_data};
static list_item import_save_data = {"导入数据", COLOR_TEXT, action_import_twl_save};
static list_item export_save_data = {"导出数据", COLOR_TEXT, action_export_twl_save};
static list_item erase_save_data = {"清除数据", COLOR_TEXT, action_erase_twl_save};
static list_item import_secure_value = {"导入安全值", COLOR_TEXT, action_import_secure_value};
static list_item export_secure_value = {"导出安全值", COLOR_TEXT, action_export_secure_value};
static list_item delete_secure_value = {"删除安全值", COLOR_TEXT, action_delete_secure_value};
typedef struct {
populate_titles_data populateData;
@ -105,7 +105,7 @@ static void titles_action_update(ui_view* view, void* data, linked_list* items,
static void titles_action_open(linked_list* items, list_item* selected) {
titles_action_data* data = (titles_action_data*) calloc(1, sizeof(titles_action_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配程式操作數據");
error_display(NULL, NULL, "无法分配应用操作的数据.");
return;
}
@ -113,7 +113,7 @@ static void titles_action_open(linked_list* items, list_item* selected) {
data->items = items;
data->selected = selected;
list_display("程式操作", "A: 選擇, B: 返回", data, titles_action_update, titles_action_draw_top);
list_display("应用操作", "A: 选择, B: 返回", data, titles_action_update, titles_action_draw_top);
}
static void titles_options_add_entry(linked_list* items, const char* name, bool* val) {
@ -176,17 +176,17 @@ static void titles_options_update(ui_view* view, void* data, linked_list* items,
}
if(linked_list_size(items) == 0) {
titles_options_add_entry(items, "顯示遊戲 Card", &listData->showGameCard);
titles_options_add_entry(items, "顯示 SD Card 程式", &listData->showSD);
titles_options_add_entry(items, "顯示 NAND 程式", &listData->showNAND);
titles_options_add_entry(items, "按 ID 排", &listData->sortById);
titles_options_add_entry(items, "按名稱排列", &listData->sortByName);
titles_options_add_entry(items, "按大小排", &listData->sortBySize);
titles_options_add_entry(items, "显示游戏卡带中的应用", &listData->showGameCard);
titles_options_add_entry(items, "显示 SD 卡中的应用", &listData->showSD);
titles_options_add_entry(items, "显示 NAND 中的应用", &listData->showNAND);
titles_options_add_entry(items, "按 ID 排", &listData->sortById);
titles_options_add_entry(items, "按名称排序", &listData->sortByName);
titles_options_add_entry(items, "按大小排", &listData->sortBySize);
}
}
static void titles_options_open(titles_data* data) {
list_display("選項", "A: 切換, B: 返回", data, titles_options_update, NULL);
list_display("选项", "A: 切换, B: 返回", data, titles_options_update, NULL);
}
static void titles_draw_top(ui_view* view, void* data, float x1, float y1, float x2, float y2, list_item* selected) {
@ -231,14 +231,14 @@ static void titles_update(ui_view* view, void* data, linked_list* items, list_it
listData->populateData.items = items;
Result res = task_populate_titles(&listData->populateData);
if(R_FAILED(res)) {
error_display_res(NULL, NULL, res, "無法初始化程式目錄結構");
error_display_res(NULL, NULL, res, "无法启动应用列表填充.");
}
listData->populated = true;
}
if(listData->populateData.finished && R_FAILED(listData->populateData.result)) {
error_display_res(NULL, NULL, listData->populateData.result, "無法列舉程式目錄");
error_display_res(NULL, NULL, listData->populateData.result, "无法填充应用列表.");
listData->populateData.result = 0;
}
@ -312,7 +312,7 @@ static int titles_compare(void* data, const void* p1, const void* p2) {
void titles_open() {
titles_data* data = (titles_data*) calloc(1, sizeof(titles_data));
if(data == NULL) {
error_display(NULL, NULL, "無法分配程式數據.");
error_display(NULL, NULL, "无法分配应用的数据.");
return;
}
@ -330,7 +330,5 @@ void titles_open() {
data->sortByName = true;
data->sortBySize = false;
list_display("程式Titles", "A: 選擇, B: 返回, X: 刷新, Select: 選項", data, titles_update, titles_draw_top);
list_display("应用", "A: 选择, B: 返回, X: 刷新, SELECT: 选项", data, titles_update, titles_draw_top);
}
// オケー

View File

@ -18,7 +18,7 @@ static void update_check_update(ui_view* view, void* data, float* progress, char
Result res = 0;
json_t* json = NULL;
if(R_SUCCEEDED(res = http_download_json("https://api.github.com/repos/Rintim/FBI-i18n-zh-tw/releases/latest", &json, 16 * 1024))) {
if(R_SUCCEEDED(res = http_download_json("https://api.github.com/repos/qianxu2001/fbi-i18n-zh-cn/releases/latest", &json, 16 * 1024))) {
if(json_is_object(json)) {
json_t* name = json_object_get(json, "name");
json_t* assets = json_object_get(json, "assets");
@ -66,16 +66,16 @@ static void update_check_update(ui_view* view, void* data, float* progress, char
info_destroy(view);
if(hasUpdate) {
action_install_url("即將升級 FBI 到最新版本,是否繼續?", updateURL, fs_get_3dsx_path(), NULL, NULL, NULL, NULL);
action_install_url("更新 FBI 至最新版本?", updateURL, fs_get_3dsx_path(), NULL, NULL, NULL, NULL);
} else {
if(R_FAILED(res)) {
error_display_res(NULL, NULL, res, "無法連接伺服器");
error_display_res(NULL, NULL, res, "无法检查更新.");
} else {
prompt_display_notify("成功", "已完成升級", COLOR_TEXT, NULL, NULL, NULL);
prompt_display_notify("成功", "无可用的更新.", COLOR_TEXT, NULL, NULL, NULL);
}
}
}
void update_open() {
info_display("檢查升級", "", false, NULL, update_check_update, NULL);
info_display("正在检查更新", "", false, NULL, update_check_update, NULL);
}