mirror of
https://gitlab.com/Theopse/fbi-i18n-zh.git
synced 2025-04-05 19:41:43 +08:00
2020/08/17:Inchar - a little change
This commit is contained in:
parent
d41fd886e6
commit
ada077a0ca
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,3 +4,5 @@ CMakeLists.txt
|
||||
|
||||
build
|
||||
output
|
||||
|
||||
.vscode
|
4
Makefile
4
Makefile
@ -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
|
||||
|
10
README.md
10
README.md
@ -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/).
|
||||
|
||||
|
@ -411,5 +411,5 @@ const char* ui_get_display_size_units(u64 size) {
|
||||
return "KiB";
|
||||
}
|
||||
|
||||
return "B";
|
||||
return "Byte";
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
// オケー
|
@ -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;
|
||||
|
@ -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 == ©_all_contents))) {
|
||||
prompt_display_notify("成功", selected == ©_all_contents ? "當前文件夾的文件已復制到剪貼板上" : (info->attributes & FS_ATTRIBUTE_DIRECTORY) ? "當前文件夾文件已復制到剪貼板上" : "文件已復制到剪貼板上", COLOR_TEXT, info, task_draw_file_info, NULL);
|
||||
prompt_display_notify("成功", selected == ©_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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
// オケー
|
@ -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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user