diff --git a/CustomKeyboard/Resource/KBSkinIconMap_es.strings b/CustomKeyboard/Resource/KBSkinIconMap_es.strings new file mode 100644 index 0000000..1335d15 --- /dev/null +++ b/CustomKeyboard/Resource/KBSkinIconMap_es.strings @@ -0,0 +1,260 @@ +/* 西班牙语(拉丁美洲)键盘皮肤映射 */ +/* Spanish (Latin America) Keyboard Skin Icon Map */ + +/* 字母 q(小写) */ +"letter_q_lower" = "key_q"; +/* 字母 Q(大写) */ +"letter_q_upper" = "key_q_up"; + +/* 字母 w(小写) */ +"letter_w_lower" = "key_w"; +/* 字母 W(大写) */ +"letter_w_upper" = "key_w_up"; + +/* 字母 e(小写) */ +"letter_e_lower" = "key_e"; +/* 字母 E(大写) */ +"letter_e_upper" = "key_e_up"; + +/* 字母 r(小写) */ +"letter_r_lower" = "key_r"; +/* 字母 R(大写) */ +"letter_r_upper" = "key_r_up"; + +/* 字母 t(小写) */ +"letter_t_lower" = "key_t"; +/* 字母 T(大写) */ +"letter_t_upper" = "key_t_up"; + +/* 字母 y(小写) */ +"letter_y_lower" = "key_y"; +/* 字母 Y(大写) */ +"letter_y_upper" = "key_y_up"; + +/* 字母 u(小写) */ +"letter_u_lower" = "key_u"; +/* 字母 U(大写) */ +"letter_u_upper" = "key_u_up"; + +/* 字母 i(小写) */ +"letter_i_lower" = "key_i"; +/* 字母 I(大写) */ +"letter_i_upper" = "key_i_up"; + +/* 字母 o(小写) */ +"letter_o_lower" = "key_o"; +/* 字母 O(大写) */ +"letter_o_upper" = "key_o_up"; + +/* 字母 p(小写) */ +"letter_p_lower" = "key_p"; +/* 字母 P(大写) */ +"letter_p_upper" = "key_p_up"; + +/* 字母 a(小写) */ +"letter_a_lower" = "key_a"; +/* 字母 A(大写) */ +"letter_a_upper" = "key_a_up"; + +/* 字母 s(小写) */ +"letter_s_lower" = "key_s"; +/* 字母 S(大写) */ +"letter_s_upper" = "key_s_up"; + +/* 字母 d(小写) */ +"letter_d_lower" = "key_d"; +/* 字母 D(大写) */ +"letter_d_upper" = "key_d_up"; + +/* 字母 f(小写) */ +"letter_f_lower" = "key_f"; +/* 字母 F(大写) */ +"letter_f_upper" = "key_f_up"; + +/* 字母 g(小写) */ +"letter_g_lower" = "key_g"; +/* 字母 G(大写) */ +"letter_g_upper" = "key_g_up"; + +/* 字母 h(小写) */ +"letter_h_lower" = "key_h"; +/* 字母 H(大写) */ +"letter_h_upper" = "key_h_up"; + +/* 字母 j(小写) */ +"letter_j_lower" = "key_j"; +/* 字母 J(大写) */ +"letter_j_upper" = "key_j_up"; + +/* 字母 k(小写) */ +"letter_k_lower" = "key_k"; +/* 字母 K(大写) */ +"letter_k_upper" = "key_k_up"; + +/* 字母 l(小写) */ +"letter_l_lower" = "key_l"; +/* 字母 L(大写) */ +"letter_l_upper" = "key_l_up"; + +/* 字母 ñ(小写)- 西班牙语专用 */ +"letter_ñ_lower" = "key_n_tilde"; +/* 字母 Ñ(大写)- 西班牙语专用 */ +"letter_ñ_upper" = "key_n_tilde_up"; + +/* 字母 z(小写) */ +"letter_z_lower" = "key_z"; +/* 字母 Z(大写) */ +"letter_z_upper" = "key_z_up"; + +/* 字母 x(小写) */ +"letter_x_lower" = "key_x"; +/* 字母 X(大写) */ +"letter_x_upper" = "key_x_up"; + +/* 字母 c(小写) */ +"letter_c_lower" = "key_c"; +/* 字母 C(大写) */ +"letter_c_upper" = "key_c_up"; + +/* 字母 v(小写) */ +"letter_v_lower" = "key_v"; +/* 字母 V(大写) */ +"letter_v_upper" = "key_v_up"; + +/* 字母 b(小写) */ +"letter_b_lower" = "key_b"; +/* 字母 B(大写) */ +"letter_b_upper" = "key_b_up"; + +/* 字母 n(小写) */ +"letter_n_lower" = "key_n"; +/* 字母 N(大写) */ +"letter_n_upper" = "key_n_up"; + +/* 字母 m(小写) */ +"letter_m_lower" = "key_m"; +/* 字母 M(大写) */ +"letter_m_upper" = "key_m_up"; + +/* 数字 1 */ +"digit_1" = "key_1"; +/* 数字 2 */ +"digit_2" = "key_2"; +/* 数字 3 */ +"digit_3" = "key_3"; +/* 数字 4 */ +"digit_4" = "key_4"; +/* 数字 5 */ +"digit_5" = "key_5"; +/* 数字 6 */ +"digit_6" = "key_6"; +/* 数字 7 */ +"digit_7" = "key_7"; +/* 数字 8 */ +"digit_8" = "key_8"; +/* 数字 9 */ +"digit_9" = "key_9"; +/* 数字 0 */ +"digit_0" = "key_0"; + +/* '-' */ +"sym_minus" = "key_minus"; +/* '/' */ +"sym_slash" = "key_slash"; +/* ':' */ +"sym_colon" = "key_colon"; +/* ';' */ +"sym_semicolon" = "key_semicolon"; +/* '(' */ +"sym_paren_l" = "key_paren_l"; +/* ')' */ +"sym_paren_r" = "key_paren_r"; +/* '$' */ +"sym_dollar" = "key_dollar"; +/* '&' */ +"sym_amp" = "key_amp"; +/* '@' */ +"sym_at" = "key_at"; +/* 双引号 " */ +"sym_quote_double" = "key_quote_d"; + +/* ',' */ +"sym_comma" = "key_comma"; +/* '.' */ +"sym_dot" = "key_dot"; +/* '?' */ +"sym_question" = "key_question"; +/* '!' */ +"sym_exclam" = "key_exclam"; +/* 单引号 ' */ +"sym_quote_single" = "key_quote"; + +/* '¿' - 西班牙语专用 */ +"sym_question_inv" = "key_question_inv"; +/* '¡' - 西班牙语专用 */ +"sym_exclam_inv" = "key_exclam_inv"; + +/* '[' */ +"sym_bracket_l" = "key_bracket_l"; +/* ']' */ +"sym_bracket_r" = "key_bracket_r"; +/* '{' */ +"sym_brace_l" = "key_brace_l"; +/* '}' */ +"sym_brace_r" = "key_brace_r"; +/* '#' */ +"sym_hash" = "key_hash"; +/* '%' */ +"sym_percent" = "key_percent"; +/* '^' */ +"sym_caret" = "key_caret"; +/* '*' */ +"sym_asterisk" = "key_asterisk"; +/* '+' */ +"sym_plus" = "key_plus"; +/* '=' */ +"sym_equal" = "key_equal"; + +/* '_' */ +"sym_underscore" = "key_underscore"; +/* '\' */ +"sym_backslash" = "key_backslash"; +/* '|' */ +"sym_pipe" = "key_pipe"; +/* '~' */ +"sym_tilde" = "key_tilde"; +/* '<' */ +"sym_lt" = "key_lt"; +/* '>' */ +"sym_gt" = "key_gt"; +/* '¥' */ +"sym_money" = "key_money"; +/* '€' */ +"sym_euro" = "key_euro"; +/* '£' */ +"sym_pound" = "key_pound"; +/* '•' */ +"sym_bullet" = "key_bullet"; + +/* 空格键 */ +"space" = "key_space"; +/* 删除键(⌫) */ +"backspace" = "key_del"; +/* Shift(⇧) */ +"shift" = "key_up"; +/* Shift(⇧)大写 */ +"shift_upper" = "key_up_upper"; +/* 字母面板左下角 "123" */ +"mode_123" = "key_123"; +/* 数字面板左下角 "abc" */ +"mode_abc" = "key_abc"; +/* 数字面板内 "123 -> #+=" */ +"symbols_toggle_more" = "key_symbols_more"; +/* 数字面板内 "#+= -> 123" */ +"symbols_toggle_123" = "key_symbols_123"; +/* 自定义 AI 功能键 */ +"ai" = "key_ai"; +/* Emoji功能键 */ +"emoji_panel" = "key_emoji"; +/* 发送/换行键 */ +"return" = "key_send"; diff --git a/CustomKeyboard/Resource/KBSkinIconMap_id.strings b/CustomKeyboard/Resource/KBSkinIconMap_id.strings new file mode 100644 index 0000000..d68fe6a --- /dev/null +++ b/CustomKeyboard/Resource/KBSkinIconMap_id.strings @@ -0,0 +1,250 @@ +/* 印尼语键盘皮肤映射 */ +/* Indonesian Keyboard Skin Icon Map */ + +/* 字母 q(小写) */ +"letter_q_lower" = "key_q"; +/* 字母 Q(大写) */ +"letter_q_upper" = "key_q_up"; + +/* 字母 w(小写) */ +"letter_w_lower" = "key_w"; +/* 字母 W(大写) */ +"letter_w_upper" = "key_w_up"; + +/* 字母 e(小写) */ +"letter_e_lower" = "key_e"; +/* 字母 E(大写) */ +"letter_e_upper" = "key_e_up"; + +/* 字母 r(小写) */ +"letter_r_lower" = "key_r"; +/* 字母 R(大写) */ +"letter_r_upper" = "key_r_up"; + +/* 字母 t(小写) */ +"letter_t_lower" = "key_t"; +/* 字母 T(大写) */ +"letter_t_upper" = "key_t_up"; + +/* 字母 y(小写) */ +"letter_y_lower" = "key_y"; +/* 字母 Y(大写) */ +"letter_y_upper" = "key_y_up"; + +/* 字母 u(小写) */ +"letter_u_lower" = "key_u"; +/* 字母 U(大写) */ +"letter_u_upper" = "key_u_up"; + +/* 字母 i(小写) */ +"letter_i_lower" = "key_i"; +/* 字母 I(大写) */ +"letter_i_upper" = "key_i_up"; + +/* 字母 o(小写) */ +"letter_o_lower" = "key_o"; +/* 字母 O(大写) */ +"letter_o_upper" = "key_o_up"; + +/* 字母 p(小写) */ +"letter_p_lower" = "key_p"; +/* 字母 P(大写) */ +"letter_p_upper" = "key_p_up"; + +/* 字母 a(小写) */ +"letter_a_lower" = "key_a"; +/* 字母 A(大写) */ +"letter_a_upper" = "key_a_up"; + +/* 字母 s(小写) */ +"letter_s_lower" = "key_s"; +/* 字母 S(大写) */ +"letter_s_upper" = "key_s_up"; + +/* 字母 d(小写) */ +"letter_d_lower" = "key_d"; +/* 字母 D(大写) */ +"letter_d_upper" = "key_d_up"; + +/* 字母 f(小写) */ +"letter_f_lower" = "key_f"; +/* 字母 F(大写) */ +"letter_f_upper" = "key_f_up"; + +/* 字母 g(小写) */ +"letter_g_lower" = "key_g"; +/* 字母 G(大写) */ +"letter_g_upper" = "key_g_up"; + +/* 字母 h(小写) */ +"letter_h_lower" = "key_h"; +/* 字母 H(大写) */ +"letter_h_upper" = "key_h_up"; + +/* 字母 j(小写) */ +"letter_j_lower" = "key_j"; +/* 字母 J(大写) */ +"letter_j_upper" = "key_j_up"; + +/* 字母 k(小写) */ +"letter_k_lower" = "key_k"; +/* 字母 K(大写) */ +"letter_k_upper" = "key_k_up"; + +/* 字母 l(小写) */ +"letter_l_lower" = "key_l"; +/* 字母 L(大写) */ +"letter_l_upper" = "key_l_up"; + +/* 字母 z(小写) */ +"letter_z_lower" = "key_z"; +/* 字母 Z(大写) */ +"letter_z_upper" = "key_z_up"; + +/* 字母 x(小写) */ +"letter_x_lower" = "key_x"; +/* 字母 X(大写) */ +"letter_x_upper" = "key_x_up"; + +/* 字母 c(小写) */ +"letter_c_lower" = "key_c"; +/* 字母 C(大写) */ +"letter_c_upper" = "key_c_up"; + +/* 字母 v(小写) */ +"letter_v_lower" = "key_v"; +/* 字母 V(大写) */ +"letter_v_upper" = "key_v_up"; + +/* 字母 b(小写) */ +"letter_b_lower" = "key_b"; +/* 字母 B(大写) */ +"letter_b_upper" = "key_b_up"; + +/* 字母 n(小写) */ +"letter_n_lower" = "key_n"; +/* 字母 N(大写) */ +"letter_n_upper" = "key_n_up"; + +/* 字母 m(小写) */ +"letter_m_lower" = "key_m"; +/* 字母 M(大写) */ +"letter_m_upper" = "key_m_up"; + +/* 数字 1 */ +"digit_1" = "key_1"; +/* 数字 2 */ +"digit_2" = "key_2"; +/* 数字 3 */ +"digit_3" = "key_3"; +/* 数字 4 */ +"digit_4" = "key_4"; +/* 数字 5 */ +"digit_5" = "key_5"; +/* 数字 6 */ +"digit_6" = "key_6"; +/* 数字 7 */ +"digit_7" = "key_7"; +/* 数字 8 */ +"digit_8" = "key_8"; +/* 数字 9 */ +"digit_9" = "key_9"; +/* 数字 0 */ +"digit_0" = "key_0"; + +/* '-' */ +"sym_minus" = "key_minus"; +/* '/' */ +"sym_slash" = "key_slash"; +/* ':' */ +"sym_colon" = "key_colon"; +/* ';' */ +"sym_semicolon" = "key_semicolon"; +/* '(' */ +"sym_paren_l" = "key_paren_l"; +/* ')' */ +"sym_paren_r" = "key_paren_r"; +/* '$' */ +"sym_dollar" = "key_dollar"; +/* '&' */ +"sym_amp" = "key_amp"; +/* '@' */ +"sym_at" = "key_at"; +/* 双引号 " */ +"sym_quote_double" = "key_quote_d"; + +/* ',' */ +"sym_comma" = "key_comma"; +/* '.' */ +"sym_dot" = "key_dot"; +/* '?' */ +"sym_question" = "key_question"; +/* '!' */ +"sym_exclam" = "key_exclam"; +/* 单引号 ' */ +"sym_quote_single" = "key_quote"; + +/* '[' */ +"sym_bracket_l" = "key_bracket_l"; +/* ']' */ +"sym_bracket_r" = "key_bracket_r"; +/* '{' */ +"sym_brace_l" = "key_brace_l"; +/* '}' */ +"sym_brace_r" = "key_brace_r"; +/* '#' */ +"sym_hash" = "key_hash"; +/* '%' */ +"sym_percent" = "key_percent"; +/* '^' */ +"sym_caret" = "key_caret"; +/* '*' */ +"sym_asterisk" = "key_asterisk"; +/* '+' */ +"sym_plus" = "key_plus"; +/* '=' */ +"sym_equal" = "key_equal"; + +/* '_' */ +"sym_underscore" = "key_underscore"; +/* '\' */ +"sym_backslash" = "key_backslash"; +/* '|' */ +"sym_pipe" = "key_pipe"; +/* '~' */ +"sym_tilde" = "key_tilde"; +/* '<' */ +"sym_lt" = "key_lt"; +/* '>' */ +"sym_gt" = "key_gt"; +/* '¥' */ +"sym_money" = "key_money"; +/* '€' */ +"sym_euro" = "key_euro"; +/* '£' */ +"sym_pound" = "key_pound"; +/* '•' */ +"sym_bullet" = "key_bullet"; + +/* 空格键 */ +"space" = "key_space"; +/* 删除键(⌫) */ +"backspace" = "key_del"; +/* Shift(⇧) */ +"shift" = "key_up"; +/* Shift(⇧)大写 */ +"shift_upper" = "key_up_upper"; +/* 字母面板左下角 "123" */ +"mode_123" = "key_123"; +/* 数字面板左下角 "abc" */ +"mode_abc" = "key_abc"; +/* 数字面板内 "123 -> #+=" */ +"symbols_toggle_more" = "key_symbols_more"; +/* 数字面板内 "#+= -> 123" */ +"symbols_toggle_123" = "key_symbols_123"; +/* 自定义 AI 功能键 */ +"ai" = "key_ai"; +/* Emoji功能键 */ +"emoji_panel" = "key_emoji"; +/* 发送/换行键 */ +"return" = "key_send"; diff --git a/CustomKeyboard/Resource/KBSkinIconMap_pt.strings b/CustomKeyboard/Resource/KBSkinIconMap_pt.strings new file mode 100644 index 0000000..a275f01 --- /dev/null +++ b/CustomKeyboard/Resource/KBSkinIconMap_pt.strings @@ -0,0 +1,250 @@ +/* 葡萄牙语键盘皮肤映射 */ +/* Portuguese Keyboard Skin Icon Map */ + +/* 字母 q(小写) */ +"letter_q_lower" = "key_q"; +/* 字母 Q(大写) */ +"letter_q_upper" = "key_q_up"; + +/* 字母 w(小写) */ +"letter_w_lower" = "key_w"; +/* 字母 W(大写) */ +"letter_w_upper" = "key_w_up"; + +/* 字母 e(小写) */ +"letter_e_lower" = "key_e"; +/* 字母 E(大写) */ +"letter_e_upper" = "key_e_up"; + +/* 字母 r(小写) */ +"letter_r_lower" = "key_r"; +/* 字母 R(大写) */ +"letter_r_upper" = "key_r_up"; + +/* 字母 t(小写) */ +"letter_t_lower" = "key_t"; +/* 字母 T(大写) */ +"letter_t_upper" = "key_t_up"; + +/* 字母 y(小写) */ +"letter_y_lower" = "key_y"; +/* 字母 Y(大写) */ +"letter_y_upper" = "key_y_up"; + +/* 字母 u(小写) */ +"letter_u_lower" = "key_u"; +/* 字母 U(大写) */ +"letter_u_upper" = "key_u_up"; + +/* 字母 i(小写) */ +"letter_i_lower" = "key_i"; +/* 字母 I(大写) */ +"letter_i_upper" = "key_i_up"; + +/* 字母 o(小写) */ +"letter_o_lower" = "key_o"; +/* 字母 O(大写) */ +"letter_o_upper" = "key_o_up"; + +/* 字母 p(小写) */ +"letter_p_lower" = "key_p"; +/* 字母 P(大写) */ +"letter_p_upper" = "key_p_up"; + +/* 字母 a(小写) */ +"letter_a_lower" = "key_a"; +/* 字母 A(大写) */ +"letter_a_upper" = "key_a_up"; + +/* 字母 s(小写) */ +"letter_s_lower" = "key_s"; +/* 字母 S(大写) */ +"letter_s_upper" = "key_s_up"; + +/* 字母 d(小写) */ +"letter_d_lower" = "key_d"; +/* 字母 D(大写) */ +"letter_d_upper" = "key_d_up"; + +/* 字母 f(小写) */ +"letter_f_lower" = "key_f"; +/* 字母 F(大写) */ +"letter_f_upper" = "key_f_up"; + +/* 字母 g(小写) */ +"letter_g_lower" = "key_g"; +/* 字母 G(大写) */ +"letter_g_upper" = "key_g_up"; + +/* 字母 h(小写) */ +"letter_h_lower" = "key_h"; +/* 字母 H(大写) */ +"letter_h_upper" = "key_h_up"; + +/* 字母 j(小写) */ +"letter_j_lower" = "key_j"; +/* 字母 J(大写) */ +"letter_j_upper" = "key_j_up"; + +/* 字母 k(小写) */ +"letter_k_lower" = "key_k"; +/* 字母 K(大写) */ +"letter_k_upper" = "key_k_up"; + +/* 字母 l(小写) */ +"letter_l_lower" = "key_l"; +/* 字母 L(大写) */ +"letter_l_upper" = "key_l_up"; + +/* 字母 z(小写) */ +"letter_z_lower" = "key_z"; +/* 字母 Z(大写) */ +"letter_z_upper" = "key_z_up"; + +/* 字母 x(小写) */ +"letter_x_lower" = "key_x"; +/* 字母 X(大写) */ +"letter_x_upper" = "key_x_up"; + +/* 字母 c(小写) */ +"letter_c_lower" = "key_c"; +/* 字母 C(大写) */ +"letter_c_upper" = "key_c_up"; + +/* 字母 v(小写) */ +"letter_v_lower" = "key_v"; +/* 字母 V(大写) */ +"letter_v_upper" = "key_v_up"; + +/* 字母 b(小写) */ +"letter_b_lower" = "key_b"; +/* 字母 B(大写) */ +"letter_b_upper" = "key_b_up"; + +/* 字母 n(小写) */ +"letter_n_lower" = "key_n"; +/* 字母 N(大写) */ +"letter_n_upper" = "key_n_up"; + +/* 字母 m(小写) */ +"letter_m_lower" = "key_m"; +/* 字母 M(大写) */ +"letter_m_upper" = "key_m_up"; + +/* 数字 1 */ +"digit_1" = "key_1"; +/* 数字 2 */ +"digit_2" = "key_2"; +/* 数字 3 */ +"digit_3" = "key_3"; +/* 数字 4 */ +"digit_4" = "key_4"; +/* 数字 5 */ +"digit_5" = "key_5"; +/* 数字 6 */ +"digit_6" = "key_6"; +/* 数字 7 */ +"digit_7" = "key_7"; +/* 数字 8 */ +"digit_8" = "key_8"; +/* 数字 9 */ +"digit_9" = "key_9"; +/* 数字 0 */ +"digit_0" = "key_0"; + +/* '-' */ +"sym_minus" = "key_minus"; +/* '/' */ +"sym_slash" = "key_slash"; +/* ':' */ +"sym_colon" = "key_colon"; +/* ';' */ +"sym_semicolon" = "key_semicolon"; +/* '(' */ +"sym_paren_l" = "key_paren_l"; +/* ')' */ +"sym_paren_r" = "key_paren_r"; +/* '$' */ +"sym_dollar" = "key_dollar"; +/* '&' */ +"sym_amp" = "key_amp"; +/* '@' */ +"sym_at" = "key_at"; +/* 双引号 " */ +"sym_quote_double" = "key_quote_d"; + +/* ',' */ +"sym_comma" = "key_comma"; +/* '.' */ +"sym_dot" = "key_dot"; +/* '?' */ +"sym_question" = "key_question"; +/* '!' */ +"sym_exclam" = "key_exclam"; +/* 单引号 ' */ +"sym_quote_single" = "key_quote"; + +/* '[' */ +"sym_bracket_l" = "key_bracket_l"; +/* ']' */ +"sym_bracket_r" = "key_bracket_r"; +/* '{' */ +"sym_brace_l" = "key_brace_l"; +/* '}' */ +"sym_brace_r" = "key_brace_r"; +/* '#' */ +"sym_hash" = "key_hash"; +/* '%' */ +"sym_percent" = "key_percent"; +/* '^' */ +"sym_caret" = "key_caret"; +/* '*' */ +"sym_asterisk" = "key_asterisk"; +/* '+' */ +"sym_plus" = "key_plus"; +/* '=' */ +"sym_equal" = "key_equal"; + +/* '_' */ +"sym_underscore" = "key_underscore"; +/* '\' */ +"sym_backslash" = "key_backslash"; +/* '|' */ +"sym_pipe" = "key_pipe"; +/* '~' */ +"sym_tilde" = "key_tilde"; +/* '<' */ +"sym_lt" = "key_lt"; +/* '>' */ +"sym_gt" = "key_gt"; +/* '¥' */ +"sym_money" = "key_money"; +/* '€' */ +"sym_euro" = "key_euro"; +/* '£' */ +"sym_pound" = "key_pound"; +/* '•' */ +"sym_bullet" = "key_bullet"; + +/* 空格键 */ +"space" = "key_space"; +/* 删除键(⌫) */ +"backspace" = "key_del"; +/* Shift(⇧) */ +"shift" = "key_up"; +/* Shift(⇧)大写 */ +"shift_upper" = "key_up_upper"; +/* 字母面板左下角 "123" */ +"mode_123" = "key_123"; +/* 数字面板左下角 "abc" */ +"mode_abc" = "key_abc"; +/* 数字面板内 "123 -> #+=" */ +"symbols_toggle_more" = "key_symbols_more"; +/* 数字面板内 "#+= -> 123" */ +"symbols_toggle_123" = "key_symbols_123"; +/* 自定义 AI 功能键 */ +"ai" = "key_ai"; +/* Emoji功能键 */ +"emoji_panel" = "key_emoji"; +/* 发送/换行键 */ +"return" = "key_send"; diff --git a/CustomKeyboard/Resource/KBSkinIconMap_zh_hant.strings b/CustomKeyboard/Resource/KBSkinIconMap_zh_hant.strings new file mode 100644 index 0000000..19ce04c --- /dev/null +++ b/CustomKeyboard/Resource/KBSkinIconMap_zh_hant.strings @@ -0,0 +1,308 @@ +/* 繁体中文键盘皮肤映射 */ +/* Traditional Chinese Keyboard Skin Icon Map */ +/* 包含:拼音布局 + 注音布局 */ + +/* ========== 拼音布局(与英文相同)========== */ + +/* 字母 q(小写) */ +"letter_q_lower" = "key_q"; +/* 字母 Q(大写) */ +"letter_q_upper" = "key_q_up"; + +/* 字母 w(小写) */ +"letter_w_lower" = "key_w"; +/* 字母 W(大写) */ +"letter_w_upper" = "key_w_up"; + +/* 字母 e(小写) */ +"letter_e_lower" = "key_e"; +/* 字母 E(大写) */ +"letter_e_upper" = "key_e_up"; + +/* 字母 r(小写) */ +"letter_r_lower" = "key_r"; +/* 字母 R(大写) */ +"letter_r_upper" = "key_r_up"; + +/* 字母 t(小写) */ +"letter_t_lower" = "key_t"; +/* 字母 T(大写) */ +"letter_t_upper" = "key_t_up"; + +/* 字母 y(小写) */ +"letter_y_lower" = "key_y"; +/* 字母 Y(大写) */ +"letter_y_upper" = "key_y_up"; + +/* 字母 u(小写) */ +"letter_u_lower" = "key_u"; +/* 字母 U(大写) */ +"letter_u_upper" = "key_u_up"; + +/* 字母 i(小写) */ +"letter_i_lower" = "key_i"; +/* 字母 I(大写) */ +"letter_i_upper" = "key_i_up"; + +/* 字母 o(小写) */ +"letter_o_lower" = "key_o"; +/* 字母 O(大写) */ +"letter_o_upper" = "key_o_up"; + +/* 字母 p(小写) */ +"letter_p_lower" = "key_p"; +/* 字母 P(大写) */ +"letter_p_upper" = "key_p_up"; + +/* 字母 a(小写) */ +"letter_a_lower" = "key_a"; +/* 字母 A(大写) */ +"letter_a_upper" = "key_a_up"; + +/* 字母 s(小写) */ +"letter_s_lower" = "key_s"; +/* 字母 S(大写) */ +"letter_s_upper" = "key_s_up"; + +/* 字母 d(小写) */ +"letter_d_lower" = "key_d"; +/* 字母 D(大写) */ +"letter_d_upper" = "key_d_up"; + +/* 字母 f(小写) */ +"letter_f_lower" = "key_f"; +/* 字母 F(大写) */ +"letter_f_upper" = "key_f_up"; + +/* 字母 g(小写) */ +"letter_g_lower" = "key_g"; +/* 字母 G(大写) */ +"letter_g_upper" = "key_g_up"; + +/* 字母 h(小写) */ +"letter_h_lower" = "key_h"; +/* 字母 H(大写) */ +"letter_h_upper" = "key_h_up"; + +/* 字母 j(小写) */ +"letter_j_lower" = "key_j"; +/* 字母 J(大写) */ +"letter_j_upper" = "key_j_up"; + +/* 字母 k(小写) */ +"letter_k_lower" = "key_k"; +/* 字母 K(大写) */ +"letter_k_upper" = "key_k_up"; + +/* 字母 l(小写) */ +"letter_l_lower" = "key_l"; +/* 字母 L(大写) */ +"letter_l_upper" = "key_l_up"; + +/* 字母 z(小写) */ +"letter_z_lower" = "key_z"; +/* 字母 Z(大写) */ +"letter_z_upper" = "key_z_up"; + +/* 字母 x(小写) */ +"letter_x_lower" = "key_x"; +/* 字母 X(大写) */ +"letter_x_upper" = "key_x_up"; + +/* 字母 c(小写) */ +"letter_c_lower" = "key_c"; +/* 字母 C(大写) */ +"letter_c_upper" = "key_c_up"; + +/* 字母 v(小写) */ +"letter_v_lower" = "key_v"; +/* 字母 V(大写) */ +"letter_v_upper" = "key_v_up"; + +/* 字母 b(小写) */ +"letter_b_lower" = "key_b"; +/* 字母 B(大写) */ +"letter_b_upper" = "key_b_up"; + +/* 字母 n(小写) */ +"letter_n_lower" = "key_n"; +/* 字母 N(大写) */ +"letter_n_upper" = "key_n_up"; + +/* 字母 m(小写) */ +"letter_m_lower" = "key_m"; +/* 字母 M(大写) */ +"letter_m_upper" = "key_m_up"; + +/* ========== 注音符号 ========== */ + +/* 声母 */ +"letter_ㄅ" = "key_bopomofo_b"; +"letter_ㄆ" = "key_bopomofo_p"; +"letter_ㄇ" = "key_bopomofo_m"; +"letter_ㄈ" = "key_bopomofo_f"; +"letter_ㄉ" = "key_bopomofo_d"; +"letter_ㄊ" = "key_bopomofo_t"; +"letter_ㄋ" = "key_bopomofo_n"; +"letter_ㄌ" = "key_bopomofo_l"; +"letter_ㄍ" = "key_bopomofo_g"; +"letter_ㄎ" = "key_bopomofo_k"; +"letter_ㄏ" = "key_bopomofo_h"; +"letter_ㄐ" = "key_bopomofo_j"; +"letter_ㄑ" = "key_bopomofo_q"; +"letter_ㄒ" = "key_bopomofo_x"; +"letter_ㄓ" = "key_bopomofo_zh"; +"letter_ㄔ" = "key_bopomofo_ch"; +"letter_ㄕ" = "key_bopomofo_sh"; +"letter_ㄖ" = "key_bopomofo_r"; +"letter_ㄗ" = "key_bopomofo_z"; +"letter_ㄘ" = "key_bopomofo_c"; +"letter_ㄙ" = "key_bopomofo_s"; + +/* 韵母 */ +"letter_ㄚ" = "key_bopomofo_a"; +"letter_ㄛ" = "key_bopomofo_o"; +"letter_ㄜ" = "key_bopomofo_e"; +"letter_ㄝ" = "key_bopomofo_eh"; +"letter_ㄞ" = "key_bopomofo_ai"; +"letter_ㄟ" = "key_bopomofo_ei"; +"letter_ㄠ" = "key_bopomofo_au"; +"letter_ㄡ" = "key_bopomofo_ou"; +"letter_ㄢ" = "key_bopomofo_an"; +"letter_ㄣ" = "key_bopomofo_en"; +"letter_ㄤ" = "key_bopomofo_ang"; +"letter_ㄥ" = "key_bopomofo_eng"; +"letter_ㄦ" = "key_bopomofo_er"; +"letter_ㄧ" = "key_bopomofo_i"; +"letter_ㄨ" = "key_bopomofo_u"; +"letter_ㄩ" = "key_bopomofo_iu"; + +/* 声调 */ +"letter_ˊ" = "key_bopomofo_tone2"; +"letter_ˇ" = "key_bopomofo_tone3"; +"letter_ˋ" = "key_bopomofo_tone4"; +"letter_˙" = "key_bopomofo_tone5"; + +/* ========== 数字 ========== */ + +/* 数字 1 */ +"digit_1" = "key_1"; +/* 数字 2 */ +"digit_2" = "key_2"; +/* 数字 3 */ +"digit_3" = "key_3"; +/* 数字 4 */ +"digit_4" = "key_4"; +/* 数字 5 */ +"digit_5" = "key_5"; +/* 数字 6 */ +"digit_6" = "key_6"; +/* 数字 7 */ +"digit_7" = "key_7"; +/* 数字 8 */ +"digit_8" = "key_8"; +/* 数字 9 */ +"digit_9" = "key_9"; +/* 数字 0 */ +"digit_0" = "key_0"; + +/* ========== 符号 ========== */ + +/* '-' */ +"sym_minus" = "key_minus"; +/* '/' */ +"sym_slash" = "key_slash"; +/* ':' */ +"sym_colon" = "key_colon"; +/* ';' */ +"sym_semicolon" = "key_semicolon"; +/* '(' */ +"sym_paren_l" = "key_paren_l"; +/* ')' */ +"sym_paren_r" = "key_paren_r"; +/* '$' */ +"sym_dollar" = "key_dollar"; +/* '&' */ +"sym_amp" = "key_amp"; +/* '@' */ +"sym_at" = "key_at"; +/* 双引号 " */ +"sym_quote_double" = "key_quote_d"; + +/* ',' */ +"sym_comma" = "key_comma"; +/* '.' */ +"sym_dot" = "key_dot"; +/* '?' */ +"sym_question" = "key_question"; +/* '!' */ +"sym_exclam" = "key_exclam"; +/* 单引号 ' */ +"sym_quote_single" = "key_quote"; + +/* '[' */ +"sym_bracket_l" = "key_bracket_l"; +/* ']' */ +"sym_bracket_r" = "key_bracket_r"; +/* '{' */ +"sym_brace_l" = "key_brace_l"; +/* '}' */ +"sym_brace_r" = "key_brace_r"; +/* '#' */ +"sym_hash" = "key_hash"; +/* '%' */ +"sym_percent" = "key_percent"; +/* '^' */ +"sym_caret" = "key_caret"; +/* '*' */ +"sym_asterisk" = "key_asterisk"; +/* '+' */ +"sym_plus" = "key_plus"; +/* '=' */ +"sym_equal" = "key_equal"; + +/* '_' */ +"sym_underscore" = "key_underscore"; +/* '\' */ +"sym_backslash" = "key_backslash"; +/* '|' */ +"sym_pipe" = "key_pipe"; +/* '~' */ +"sym_tilde" = "key_tilde"; +/* '<' */ +"sym_lt" = "key_lt"; +/* '>' */ +"sym_gt" = "key_gt"; +/* '¥' */ +"sym_money" = "key_money"; +/* '€' */ +"sym_euro" = "key_euro"; +/* '£' */ +"sym_pound" = "key_pound"; +/* '•' */ +"sym_bullet" = "key_bullet"; + +/* ========== 功能键 ========== */ + +/* 空格键 */ +"space" = "key_space"; +/* 删除键(⌫) */ +"backspace" = "key_del"; +/* Shift(⇧) */ +"shift" = "key_up"; +/* Shift(⇧)大写 */ +"shift_upper" = "key_up_upper"; +/* 字母面板左下角 "123" */ +"mode_123" = "key_123"; +/* 数字面板左下角 "abc" */ +"mode_abc" = "key_abc"; +/* 数字面板内 "123 -> #+=" */ +"symbols_toggle_more" = "key_symbols_more"; +/* 数字面板内 "#+= -> 123" */ +"symbols_toggle_123" = "key_symbols_123"; +/* 自定义 AI 功能键 */ +"ai" = "key_ai"; +/* Emoji功能键 */ +"emoji_panel" = "key_emoji"; +/* 发送/换行键 */ +"return" = "key_send"; diff --git a/Shared/KBSkinInstallBridge.h b/Shared/KBSkinInstallBridge.h index 08e7cb2..bb7ee63 100644 --- a/Shared/KBSkinInstallBridge.h +++ b/Shared/KBSkinInstallBridge.h @@ -39,6 +39,11 @@ typedef void (^KBSkinInstallConsumeCompletion)(BOOL success, NSError * _Nullable /// 默认图标短文件名映射(从 KBSkinIconMap.strings 读取)。 + (NSDictionary *)defaultIconShortNames; +/// 根据语言代码加载对应的图标短文件名映射。 +/// @param languageCode 语言代码(如 "en", "es", "pt", "id", "zh-Hant") +/// @return 按键ID -> 切图文件名的映射字典 ++ (NSDictionary *)iconShortNamesForLanguageCode:(NSString *)languageCode; + /// 主 App / 键盘扩展:通过远程 zip_url 下载并安装一套皮肤。 /// - skinJSON 结构与后端约定一致,至少包含: /// * id: 皮肤唯一标识 diff --git a/Shared/KBSkinInstallBridge.m b/Shared/KBSkinInstallBridge.m index a1b6a81..8b5fb06 100644 --- a/Shared/KBSkinInstallBridge.m +++ b/Shared/KBSkinInstallBridge.m @@ -202,6 +202,62 @@ static NSString * const kKBSkinMetadataThemeKey = @"theme_json"; return map; } ++ (NSDictionary *)iconShortNamesForLanguageCode:(NSString *)languageCode { + if (languageCode.length == 0) { + return [self defaultIconShortNames]; + } + + static NSMutableDictionary *> *cachedMaps = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + cachedMaps = [NSMutableDictionary dictionary]; + }); + + NSDictionary *cached = cachedMaps[languageCode]; + if (cached) { + return cached; + } + + NSString *mapFileName = nil; + + if ([languageCode isEqualToString:@"es"]) { + mapFileName = @"KBSkinIconMap_es"; + } else if ([languageCode isEqualToString:@"pt"]) { + mapFileName = @"KBSkinIconMap_pt"; + } else if ([languageCode isEqualToString:@"id"]) { + mapFileName = @"KBSkinIconMap_id"; + } else if ([languageCode hasPrefix:@"zh-Hant"] || [languageCode isEqualToString:@"zh-TW"]) { + mapFileName = @"KBSkinIconMap_zh_hant"; + } else if ([languageCode hasPrefix:@"zh-Hans"] || [languageCode isEqualToString:@"zh-CN"]) { + mapFileName = @"KBSkinIconMap"; + } else { + mapFileName = @"KBSkinIconMap"; + } + + NSString *path = [[NSBundle mainBundle] pathForResource:mapFileName ofType:@"strings"]; + NSDictionary *map = nil; + + if (path.length > 0) { + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; + if ([dict isKindOfClass:NSDictionary.class]) { + map = dict; + } + } + + if (!map || map.count == 0) { + map = [self defaultIconShortNames]; + } + + if (map) { + cachedMaps[languageCode] = map; + } + + NSLog(@"[SkinBridge] Loaded icon map for language: %@, file: %@, count: %lu", + languageCode, mapFileName, (unsigned long)map.count); + + return map ?: @{}; +} + + (NSUserDefaults *)sharedDefaults { return [[NSUserDefaults alloc] initWithSuiteName:AppGroup]; } @@ -240,7 +296,9 @@ static NSString * const kKBSkinMetadataThemeKey = @"theme_json"; if ([skinJSON[@"key_icons"] isKindOfClass:NSDictionary.class]) { iconShortNames = skinJSON[@"key_icons"]; } else { - iconShortNames = [self defaultIconShortNames]; + NSString *currentLanguageCode = [[NSUserDefaults standardUserDefaults] + stringForKey:AppGroup_SelectedKeyboardLanguageCode]; + iconShortNames = [self iconShortNamesForLanguageCode:currentLanguageCode]; } NSLog(@"[SkinBridge] iconShortNames source=%@ count=%tu", [skinJSON[@"key_icons"] isKindOfClass:NSDictionary.class] ? @"server" : @"default", @@ -779,7 +837,9 @@ static NSString * const kKBSkinMetadataThemeKey = @"theme_json"; NSDictionary *shortNames = payload[kKBSkinPendingIconShortKey]; if (![shortNames isKindOfClass:NSDictionary.class] || shortNames.count == 0) { - shortNames = [self defaultIconShortNames]; + NSString *currentLanguageCode = [[NSUserDefaults standardUserDefaults] + stringForKey:AppGroup_SelectedKeyboardLanguageCode]; + shortNames = [self iconShortNamesForLanguageCode:currentLanguageCode]; } NSString *iconsDirFinal = iconsDir; diff --git a/Shared/Resource/kb_input_profiles.json b/Shared/Resource/kb_input_profiles.json index bc82373..76bc884 100644 --- a/Shared/Resource/kb_input_profiles.json +++ b/Shared/Resource/kb_input_profiles.json @@ -18,7 +18,7 @@ { "code": "es", "name": "Español (Latinoamérica)", - "defaultSkinZip": "", + "defaultSkinZip": "西班牙初始皮肤.zip", "layouts": [ { "variant": "qwerty", diff --git a/keyBoard.xcodeproj/project.pbxproj b/keyBoard.xcodeproj/project.pbxproj index 057277e..5bbd601 100644 --- a/keyBoard.xcodeproj/project.pbxproj +++ b/keyBoard.xcodeproj/project.pbxproj @@ -40,6 +40,11 @@ 043213A62F5561FD0065C888 /* kb_keyboard_layouts_i18n.json in Resources */ = {isa = PBXBuildFile; fileRef = 043213A52F5561FD0065C888 /* kb_keyboard_layouts_i18n.json */; }; 043213A92F5566EF0065C888 /* kb_input_profiles.json in Resources */ = {isa = PBXBuildFile; fileRef = 043213A72F5566EF0065C888 /* kb_input_profiles.json */; }; 043213AA2F5566EF0065C888 /* kb_input_profiles.json in Resources */ = {isa = PBXBuildFile; fileRef = 043213A72F5566EF0065C888 /* kb_input_profiles.json */; }; + 043213AF2F556DF80065C888 /* KBSkinIconMap_pt.strings in Resources */ = {isa = PBXBuildFile; fileRef = 043213AD2F556DF80065C888 /* KBSkinIconMap_pt.strings */; }; + 043213B02F556DF80065C888 /* KBSkinIconMap_id.strings in Resources */ = {isa = PBXBuildFile; fileRef = 043213AC2F556DF80065C888 /* KBSkinIconMap_id.strings */; }; + 043213B12F556DF80065C888 /* KBSkinIconMap_es.strings in Resources */ = {isa = PBXBuildFile; fileRef = 043213AB2F556DF80065C888 /* KBSkinIconMap_es.strings */; }; + 043213B22F556DF80065C888 /* KBSkinIconMap_zh_hant.strings in Resources */ = {isa = PBXBuildFile; fileRef = 043213AE2F556DF80065C888 /* KBSkinIconMap_zh_hant.strings */; }; + 043213B42F557CC50065C888 /* 西班牙初始皮肤.zip in Resources */ = {isa = PBXBuildFile; fileRef = 043213B32F557CC50065C888 /* 西班牙初始皮肤.zip */; }; 043FBCD22EAF97630036AFE1 /* KBPermissionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 04C6EAE12EAF940F0089C901 /* KBPermissionViewController.m */; }; 0450AA742EF013D000B6AF06 /* KBEmojiCollectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 0450AA732EF013D000B6AF06 /* KBEmojiCollectionCell.m */; }; 0450AAE22EF03D5100B6AF06 /* KBPerson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0450AAE12EF03D5100B6AF06 /* KBPerson.swift */; }; @@ -392,6 +397,11 @@ 043213A22F5528140065C888 /* pinyin_to_traditional.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = pinyin_to_traditional.json; sourceTree = ""; }; 043213A52F5561FD0065C888 /* kb_keyboard_layouts_i18n.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = kb_keyboard_layouts_i18n.json; sourceTree = ""; }; 043213A72F5566EF0065C888 /* kb_input_profiles.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = kb_input_profiles.json; sourceTree = ""; }; + 043213AB2F556DF80065C888 /* KBSkinIconMap_es.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = KBSkinIconMap_es.strings; sourceTree = ""; }; + 043213AC2F556DF80065C888 /* KBSkinIconMap_id.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = KBSkinIconMap_id.strings; sourceTree = ""; }; + 043213AD2F556DF80065C888 /* KBSkinIconMap_pt.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = KBSkinIconMap_pt.strings; sourceTree = ""; }; + 043213AE2F556DF80065C888 /* KBSkinIconMap_zh_hant.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = KBSkinIconMap_zh_hant.strings; sourceTree = ""; }; + 043213B32F557CC50065C888 /* 西班牙初始皮肤.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "西班牙初始皮肤.zip"; sourceTree = ""; }; 0450AA722EF013D000B6AF06 /* KBEmojiCollectionCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBEmojiCollectionCell.h; sourceTree = ""; }; 0450AA732EF013D000B6AF06 /* KBEmojiCollectionCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBEmojiCollectionCell.m; sourceTree = ""; }; 0450AAE02EF03D5100B6AF06 /* keyBoard-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "keyBoard-Bridging-Header.h"; sourceTree = ""; }; @@ -928,9 +938,13 @@ A1B2C3F02F20000000000002 /* kb_keyboard_layout_config.json */, 043213A52F5561FD0065C888 /* kb_keyboard_layouts_i18n.json */, 0498BDF42EEC50EE006CC1D5 /* emoji_categories.json */, - 041007D12ECE012000D203BB /* KBSkinIconMap.strings */, 043213A12F5528140065C888 /* bopomofo_to_chinese.json */, 043213A22F5528140065C888 /* pinyin_to_traditional.json */, + 041007D12ECE012000D203BB /* KBSkinIconMap.strings */, + 043213AB2F556DF80065C888 /* KBSkinIconMap_es.strings */, + 043213AC2F556DF80065C888 /* KBSkinIconMap_id.strings */, + 043213AD2F556DF80065C888 /* KBSkinIconMap_pt.strings */, + 043213AE2F556DF80065C888 /* KBSkinIconMap_zh_hant.strings */, ); path = Resource; sourceTree = ""; @@ -1281,6 +1295,7 @@ 047C652C2EBCAAAC0035E841 /* Resource */ = { isa = PBXGroup; children = ( + 043213B32F557CC50065C888 /* 西班牙初始皮肤.zip */, 0479200A2ED87CEE004E8522 /* permiss_video.mp4 */, 047920102ED98E7D004E8522 /* permiss_video_2.mp4 */, 047920062ED86ABC004E8522 /* kb_guide_keyboard.gif */, @@ -2288,6 +2303,10 @@ A1B2C3ED2F20000000000001 /* kb_words.txt in Resources */, A1B2C3F12F20000000000002 /* kb_keyboard_layout_config.json in Resources */, 0498BDF52EEC50EE006CC1D5 /* emoji_categories.json in Resources */, + 043213AF2F556DF80065C888 /* KBSkinIconMap_pt.strings in Resources */, + 043213B02F556DF80065C888 /* KBSkinIconMap_id.strings in Resources */, + 043213B12F556DF80065C888 /* KBSkinIconMap_es.strings in Resources */, + 043213B22F556DF80065C888 /* KBSkinIconMap_zh_hant.strings in Resources */, 043213A32F5528140065C888 /* bopomofo_to_chinese.json in Resources */, 043213A42F5528140065C888 /* pinyin_to_traditional.json in Resources */, 043213AA2F5566EF0065C888 /* kb_input_profiles.json in Resources */, @@ -2313,6 +2332,7 @@ 04C6EABC2EAF86530089C901 /* LaunchScreen.storyboard in Resources */, 04E0394F2F236E75002CA5A0 /* KBChatTableView_Usage.md in Resources */, 04286A132ECDEBF900CE730C /* KBSkinIconMap.strings in Resources */, + 043213B42F557CC50065C888 /* 西班牙初始皮肤.zip in Resources */, 04C6EABD2EAF86530089C901 /* Main.storyboard in Resources */, 046086CB2F1A092500757C95 /* comments_mock.json in Resources */, 04E038E32F20E500002CA5A0 /* deepgramAPI.md in Resources */, diff --git a/keyBoard/Class/Resource/西班牙初始皮肤.zip b/keyBoard/Class/Resource/西班牙初始皮肤.zip new file mode 100644 index 0000000..dc701e8 Binary files /dev/null and b/keyBoard/Class/Resource/西班牙初始皮肤.zip differ