2020/08/17:Inchar - a little change

This commit is contained in:
Rintim 2020-08-17 09:09:18 +08:00
parent d41fd886e6
commit ada077a0ca
14 changed files with 87 additions and 83 deletions

2
.gitignore vendored
View File

@ -4,3 +4,5 @@ CMakeLists.txt
build
output
.vscode

View File

@ -21,8 +21,8 @@ VERSION_MAJOR := $(word 1, $(VERSION_PARTS))
VERSION_MINOR := $(word 2, $(VERSION_PARTS))
VERSION_MICRO := $(word 3, $(VERSION_PARTS))
DESCRIPTION := Open source title manager.
AUTHOR := Steveice10
DESCRIPTION := 3DS開源程式管理器.
AUTHOR := Steveice10 Rintim+OasisAkari
PRODUCT_CODE := CTR-P-CFBI
UNIQUE_ID := 0xF8001

View File

@ -2,7 +2,7 @@
FBI是壹個3DS開源應用管理器。
本倉庫為FBI的繁體漢化版本。
本倉庫為FBI的繁體漢化版本,部分詞匯因兼容原字庫做簡化或改詞處理
原倉庫: https://github.com/Steveice10/FBI/
@ -25,9 +25,9 @@ FBI是壹個3DS開源應用管理器。
## 編譯
需要 [devkitARM](http://sourceforge.net/projects/devkitpro/files/devkitARM/) 中的 3ds-curl, 3ds-zlib, 和 3ds-jansson, 和Steveice10的 buildtools
- 需要 [devkitARM](http://sourceforge.net/projects/devkitpro/files/devkitARM/) 中的 3ds-curl, 3ds-zlib, 和 3ds-jansson
buildtools: https://github.com/Steveice10/buildtools
- 需要 Steveice10 的 [buildtools](https://github.com/Steveice10/buildtools)
```
git clone https://github.com/Steveice10/buildtools
@ -37,7 +37,9 @@ make
## 感謝
感謝原作者Steveice10提供FBI
感謝原作者 Steveice10 提供 FBI
OasisAkari : 用詞修正
>Banner: Originally created by [OctopusRift](http://gbatemp.net/members/octopusrift.356526/), touched up by [Apache Thunder](https://gbatemp.net/members/apache-thunder.105648/), updated for new logo by [PabloMK7](http://gbatemp.net/members/pablomk7.345712/).

View File

@ -411,5 +411,5 @@ const char* ui_get_display_size_units(u64 size) {
return "KiB";
}
return "B";
return "Byte";
}

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);
}

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("成功", "成功備份NAND", 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("備份NAND", "按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,7 @@ void dumpnand_open() {
data->finished = true;
prompt_display_yes_no("確認", "是否導出原始NAND鏡像", COLOR_TEXT, data, NULL, dumpnand_onresponse);
prompt_display_yes_no("確認", "是否備份原始NAND鏡像", 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 = {"瀏覽SpotPass保存數據", 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 = {"瀏覽SpotPass保存資料", 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;

View File

@ -11,7 +11,7 @@
#include "../core/core.h"
static list_item rename_opt = {"重命名", COLOR_TEXT, action_rename};
static list_item copy = {"復制", COLOR_TEXT, NULL};
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};
@ -23,9 +23,9 @@ static list_item install_ticket = {"安裝ticket", COLOR_TEXT, action_install_ti
static list_item install_and_delete_ticket = {"安裝並刪除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 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 = {"安裝所有CIAs", COLOR_TEXT, action_install_cias};
static list_item install_and_delete_all_cias = {"安裝並刪除所有CIAs", COLOR_TEXT, action_install_cias_delete};
@ -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,9 +238,9 @@ 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, "顯示隠藏档案", &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);
}
@ -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) {

View File

@ -12,14 +12,14 @@ 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 = {"Dump NAND", COLOR_TEXT, dumpnand_open};
static list_item titles = {"Titles", COLOR_TEXT, titles_open};
static list_item pending_titles = {"Pending Titles", COLOR_TEXT, pendingtitles_open};
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 = {"Tickets", COLOR_TEXT, tickets_open};
static list_item ext_save_data = {"Ext Save Data", COLOR_TEXT, extsavedata_open};
static list_item system_save_data = {"System Save Data", COLOR_TEXT, systemsavedata_open};
static list_item remote_install = {"Remote Install", COLOR_TEXT, remoteinstall_open};
static list_item update = {"Update", COLOR_TEXT, update_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

@ -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;

View File

@ -98,7 +98,7 @@ void task_draw_file_info(ui_view* view, void* data, float x1, float y1, float x2
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;
}
@ -150,7 +150,7 @@ 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",
@ -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"
"媒體類型: %s\n"
"待定程式ID: %016llX\n"
"位置: %s\n"
"版本: %hu (%d.%d.%d)",
info->titleId,
info->mediaType == MEDIATYPE_NAND ? "NAND" : info->mediaType == MEDIATYPE_SD ? "SD" : "遊戲卡帶",
info->mediaType == MEDIATYPE_NAND ? "NAND" : info->mediaType == MEDIATYPE_SD ? "SD" : "遊戲Card",
info->version, (info->version >> 10) & 0x3F, (info->version >> 4) & 0x3F, info->version & 0xF);
float infoWidth;
@ -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"
"媒體類型: %s\n"
"程式ID: %016llX\n"
"位置: %s\n"
"版本: %hu (%d.%d.%d)\n"
"品代碼: %s\n"
"品代碼: %s\n"
"區域: %s\n"
"大小: %.2f %s",
info->titleId,
info->mediaType == MEDIATYPE_NAND ? "NAND" : info->mediaType == MEDIATYPE_SD ? "SD" : "遊戲卡帶",
info->mediaType == MEDIATYPE_NAND ? "NAND" : info->mediaType == MEDIATYPE_SD ? "SD" : "遊戲Card",
info->version, (info->version >> 10) & 0x3F, (info->version >> 4) & 0x3F, info->version & 0xF,
info->productCode,
regionString,

View File

@ -9,8 +9,8 @@
#include "task/uitask.h"
#include "../core/core.h"
static list_item delete_ticket = {"Delete Ticket", COLOR_TEXT, action_delete_ticket};
static list_item delete_unused_tickets = {"Delete Unused Tickets", COLOR_TEXT, action_delete_tickets_unused};
static list_item delete_ticket = {"刪除Ticket", COLOR_TEXT, action_delete_ticket};
static list_item delete_unused_tickets = {"刪除未使用的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, "Failed to allocate tickets action data.");
error_display(NULL, NULL, "無法分配 Tickets 操作數據");
return;
}
@ -69,7 +69,7 @@ static void tickets_action_open(linked_list* items, list_item* selected) {
data->items = items;
data->selected = selected;
list_display("Ticket Action", "A: Select, B: Return", data, tickets_action_update, tickets_action_draw_top);
list_display("Ticket 操作", "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, "Failed to initiate ticket list population.");
error_display_res(NULL, NULL, res, "無法初始化 Tickets 列表");
}
listData->populated = true;
}
if(listData->populateData.finished && R_FAILED(listData->populateData.result)) {
error_display_res(NULL, NULL, listData->populateData.result, "Failed to populate ticket list.");
error_display_res(NULL, NULL, listData->populateData.result, "無法填充 Tickets 列表");
listData->populateData.result = 0;
}
@ -130,12 +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, "Failed to allocate tickets data.");
error_display(NULL, NULL, "無法分配 Tickets 數據");
return;
}
data->populateData.finished = true;
list_display("Tickets", "A: Select, B: Return, X: Refresh", data, tickets_update, tickets_draw_top);
list_display("Tickets", "A: 選擇, B: 返回, X: 刷新", data, tickets_update, tickets_draw_top);
}

View File

@ -10,15 +10,15 @@
#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 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};
@ -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) {
@ -177,8 +177,8 @@ 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, "顯示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);
@ -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,7 @@ void titles_open() {
data->sortByName = true;
data->sortBySize = false;
list_display("應用Titles", "A: 選擇, B: 返回, X: 刷新, Select: 選項", data, titles_update, titles_draw_top);
list_display("程式Titles", "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/Steveice10/FBI/releases/latest", &json, 16 * 1024))) {
if(R_SUCCEEDED(res = http_download_json("https://api.github.com/repos/Rintim/FBI-i18n-zh-tw/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");