fix(ncm/ui): 文案中文化+事实性错误修正 — 音质档位对齐官方口径(Hi-Res/无损/极高/较高/标准)、设置页topbar/sheet/确认框中文、页脚会员提示改写准确; 播放页页脚「左右滑切歌」改「左缘右滑返回 ・ ⟳ 切横屏」、空态/歌词态/顶栏中文; 歌单/搜索空态与登录页状态全中文。二进制随 246 重链后热更

This commit is contained in:
MeowOS committed 2026-08-31 22:24:49 +08:00
1 parent 33b4ae703c
commit 94874107b6
5 files changed
+33 -33

No files matched your search

+7 -7
View File
@@ -66,12 +66,12 @@ static void login_draw(void *ctx)
meow_ui_fill_rect(ox + x*m, oy + y*m, m, m, qr_fg);
} else {
meow_ui_text_center(W/2, qy + qc/2 - 10,
g_err ? "no network - tap to retry" : "fetching QR key...", 20, th->dim);
g_err ? "网络异常,点按重试" : "正在获取二维码...", 20, th->dim);
}
/* 状态文字:成功/等待用红(day red / night red_lit),失败红字提示。 */
const char *st = login_status_str(g_st.login_state);
if (g_st.login_state == NCM_LOGIN_OK && g_done) st = "success";
if (g_st.login_state == NCM_LOGIN_OK && g_done) st = "登录成功";
uint32_t scol = (g_st.login_state == NCM_LOGIN_OK) ? pa->red : th->dim;
meow_ui_text_center(W/2, 476, st, 20, scol);
@@ -88,11 +88,11 @@ static void login_repaint(void)
const char *login_status_str(int state)
{
switch (state) {
case NCM_LOGIN_PENDING: return "waiting for scan...";
case NCM_LOGIN_SCANNED: return "scanned - confirm on phone";
case NCM_LOGIN_OK: return "signed in!";
case NCM_LOGIN_EXPIRED: return "QR expired - refreshing";
default: return "error, tap to retry";
case NCM_LOGIN_PENDING: return "等待扫码...";
case NCM_LOGIN_SCANNED: return "已扫码,请在手机上确认";
case NCM_LOGIN_OK: return "登录成功";
case NCM_LOGIN_EXPIRED: return "二维码已过期,正在刷新";
default: return "出错了,点按重试";
}
}
+4 -4
View File
@@ -190,7 +190,7 @@ static void plr_draw_dyn(void *ctx)
const ncm_pal_t *pa = ncm_palette(g_dark);
int sc = cur_song();
const ncm_song_t *s = (sc >= 0) ? &g_st.songs[sc] : NULL;
const char *nm = s ? s->name : "nothing playing";
const char *nm = s ? s->name : "暂无播放";
const char *ar = s ? s->art_name : "";
if (g_landscape) {
@@ -234,7 +234,7 @@ static void plr_draw_dyn(void *ctx)
if (n == 0) {
/* 二期:歌词后台加载,状态区分「加载中 / 真的无词」 */
meow_ui_text_center(lcx, center_y - 10,
lyric_state() == 2 ? "no lyric" : "loading lyric...",
lyric_state() == 2 ? "暂无歌词" : "歌词加载中…",
20, th->onSurfaceVariant);
}
else {
@@ -257,7 +257,7 @@ static void plr_draw_dyn(void *ctx)
/* 页脚提示(用「・」U+30FB 而非 U+00B7「·」:common 字库按 GB2312 解码 A1A4 得 U+30FB,
* 不含 U+00B7 → 后者在设备上是豆腐块。REPORT §11 二期。) */
char foot[64];
snprintf(foot, sizeof foot, "左右滑切歌 ・ 点顶部切横屏");
snprintf(foot, sizeof foot, "左缘右滑返回 ・ ⟳ 切横屏");
meow_ui_text_center(r_cont.x + r_cont.w / 2, r_cont.y + r_cont.h - APP_FOOTER_H,
foot, 20, th->onSurfaceVariant);
}
@@ -369,7 +369,7 @@ static void plr_page_create(meow_view *v, void *ctx)
((player_ctrl *)ctx)->view = v;
player_compute_geom();
meow_ui_activity_push(ACT_PLAYER); /* owner=ACT_PLAYER */
g_tb = ncm_topbar_create("Now Playing", 1, "\xe2\x86\xbb"); /* 返回 + ⟳ 布局 */
g_tb = ncm_topbar_create("正在播放", 1, "\xe2\x86\xbb"); /* 返回 + ⟳ 布局 */
meow_ui_activity_pop();
g_custom_disc = meow_draw_custom_register(10, g_disc_r.x, g_disc_r.y, g_disc_r.w, g_disc_r.h,
plr_draw_disc, NULL);
+4 -4
View File
@@ -155,10 +155,10 @@ static void pl_draw_empty(void *ctx)
(void)ctx;
if (meow_ui_activity_active() != ACT_PLAYLIST) return;
if (g_load_err == 0 && g_st.song_count != 0) return;
if (g_plloading) { ncm_draw_empty(r_list, "LOADING", "正在加载曲目..."); return; }
if (g_load_err == NCM_ERR_AUTH) ncm_draw_empty(r_list, "SESSION EXPIRED", "请重新登录");
else if (g_load_err) ncm_draw_empty(r_list, "LOAD FAILED", "点按重试");
else ncm_draw_empty(r_list, "NO TRACKS", "这个歌单是空的");
if (g_plloading) { ncm_draw_empty(r_list, "加载中", "正在加载曲目..."); return; }
if (g_load_err == NCM_ERR_AUTH) ncm_draw_empty(r_list, "登录已过期", "请重新登录");
else if (g_load_err) ncm_draw_empty(r_list, "加载失败", "点按重试");
else ncm_draw_empty(r_list, "暂无歌曲", "这个歌单是空的");
}
static void pl_draw_footer(void *ctx)
+5 -5
View File
@@ -56,11 +56,11 @@ static void sr_draw_empty(void *ctx)
(void)ctx;
if (meow_ui_activity_active() != ACT_SEARCH) return;
if (g_st.search_count != 0 && g_st.search_err == 0) return;
if (g_loading) { ncm_draw_empty(r_list, "SEARCHING", "正在搜索..."); return; }
if (g_st.search_err == NCM_ERR_AUTH) ncm_draw_empty(r_list, "SESSION EXPIRED", "请重新登录");
else if (g_st.search_err) ncm_draw_empty(r_list, "SEARCH FAILED", "点「搜索」重试");
else if (!g_query[0]) ncm_draw_empty(r_list, "NO KEYWORD", "输入关键词点「搜索」");
else ncm_draw_empty(r_list, "NO RESULTS", "未找到相关歌曲");
if (g_loading) { ncm_draw_empty(r_list, "搜索中", "正在搜索..."); return; }
if (g_st.search_err == NCM_ERR_AUTH) ncm_draw_empty(r_list, "登录已过期", "请重新登录");
else if (g_st.search_err) ncm_draw_empty(r_list, "搜索失败", "点「搜索」重试");
else if (!g_query[0]) ncm_draw_empty(r_list, "输入关键词", "输入后点「搜索」");
else ncm_draw_empty(r_list, "没有结果", "未找到相关歌曲");
}
static void sr_draw_footer(void *ctx)
+13 -13
View File
@@ -28,10 +28,10 @@ static const char *level_name(int lv)
{
switch (lv) {
case NCM_LEVEL_HIRES: return "Hi-Res";
case NCM_LEVEL_LOSSLESS:return "Lossless";
case NCM_LEVEL_EXHIGH: return "Exhigh";
case NCM_LEVEL_HIGHER: return "Higher";
default: return "Standard";
case NCM_LEVEL_LOSSLESS:return "无损";
case NCM_LEVEL_EXHIGH: return "极高";
case NCM_LEVEL_HIGHER: return "较高";
default: return "标准";
}
}
@@ -98,8 +98,8 @@ static void settings_draw(void *ctx)
/* 品牌红页脚小字。 */
int ny = y + SETTINGS_ROWS * (g_row_h + 8) + 4;
meow_ui_text(x, ny, "解锁完整音质请登录网易云黑胶会员", 20, th->onSurfaceVariant);
meow_ui_text(x, ny + 24, "品牌红 © MeowOS · NCM", 20, pa->red);
meow_ui_text(x, ny, "Hi-Res/无损需黑胶会员,不支持时自动降级", 20, th->onSurfaceVariant);
meow_ui_text(x, ny + 24, "网易云音乐 · MeowOS 移植版", 20, pa->red);
}
static int row_at(int x, int y)
@@ -150,10 +150,10 @@ int settings_on_tap(int x, int y)
if (row < 0) return 0;
if (row == 0) { /* 音质:Top 档选择,单曲不可用时 core 逐档降级 */
static const char *lbls[5] = { "Hi-Res", "Lossless", "Exhigh", "Higher", "Standard" };
static const char *lbls[5] = { "Hi-Res", "无损", "极高", "较高", "标准" };
static const int lvls[5] = { NCM_LEVEL_HIRES, NCM_LEVEL_LOSSLESS,
NCM_LEVEL_EXHIGH, NCM_LEVEL_HIGHER, NCM_LEVEL_STANDARD };
meow_sheet *s = meow_sheet_create("Music Quality", 0);
meow_sheet *s = meow_sheet_create("选择音质", 0);
for (int i = 0; i < 5; i++) meow_sheet_add_item(s, lbls[i]);
int op = meow_sheet_open(s);
meow_sheet_free(s);
@@ -169,7 +169,7 @@ int settings_on_tap(int x, int y)
static const int gbs[] = { 1, 2, 5, 10, 20, 30, 50, 100 };
static const char *labels[] = { "1 GB", "2 GB", "5 GB", "10 GB",
"20 GB", "30 GB", "50 GB", "100 GB" };
meow_sheet *s = meow_sheet_create("Cache Limit", 0);
meow_sheet *s = meow_sheet_create("缓存上限", 0);
for (int i = 0; i < 8; i++) meow_sheet_add_item(s, labels[i]);
meow_sheet_add_item(s, "自定义...");
int op = meow_sheet_open(s);
@@ -184,7 +184,7 @@ int settings_on_tap(int x, int y)
return 1;
}
if (row == 2) { /* 清理缓存 */
meow_dialog *d = meow_dialog_create(MEOW_DLG_CONFIRM, "Clear Cache?");
meow_dialog *d = meow_dialog_create(MEOW_DLG_CONFIRM, "清理缓存?");
char msg[160];
char usetxt[24];
fmt_bytes(g_cache_used, usetxt, sizeof usetxt);
@@ -203,9 +203,9 @@ int settings_on_tap(int x, int y)
return 1;
}
if (row == 3) { /* 退出登录 */
meow_dialog *d = meow_dialog_create(MEOW_DLG_CONFIRM, "Sign out?");
meow_dialog *d = meow_dialog_create(MEOW_DLG_CONFIRM, "退出登录?");
const char *msgs[1];
msgs[0] = "Playback will stop.\nYou'll need to scan a QR code again.";
msgs[0] = "将停止播放并清除登录态,\n下次使用需重新扫码。";
meow_dialog_set_items(d, msgs, 1, -1);
int yes = meow_dialog_confirm(d);
meow_dialog_free(d);
@@ -246,7 +246,7 @@ static void st_page_create(meow_view *v, void *ctx)
((settings_ctrl *)ctx)->view = v;
r_cont = ncm_content_rect();
meow_ui_activity_push(ACT_SETTINGS); /* owner=ACT_SETTINGS */
g_tb = ncm_topbar_create("Settings", 1, NULL);
g_tb = ncm_topbar_create("设置", 1, NULL);
meow_ui_activity_pop();
g_row_h = 60;
g_custom_id = meow_draw_custom_register(1, r_cont.x, r_cont.y, r_cont.w, r_cont.h,