#ifndef I18N_H #define I18N_H #include "common.h" typedef struct { const char *text[UI_LANG_COUNT]; } i18n_string_t; #define I18N_STRING(en_text, zh_text) \ {{ [UI_LANG_EN] = (en_text), [UI_LANG_ZH] = (zh_text) }} typedef enum { I18N_USERNAME_PROMPT, I18N_INVALID_USERNAME, I18N_ROOM_FULL, I18N_WELCOME_SUBTITLE, I18N_WELCOME_TAGLINE, I18N_WELCOME_FALLBACK_FORMAT, I18N_INSERT_HINT_WIDE, I18N_INSERT_HINT_NARROW, I18N_NORMAL_LATEST, I18N_NORMAL_NEW_MESSAGES, I18N_HELP_TITLE, I18N_HELP_STATUS_FORMAT, I18N_COMMAND_OUTPUT_TITLE, I18N_COMMAND_OUTPUT_STATUS_FORMAT, I18N_MOTD_TITLE, I18N_MOTD_CONTINUE_HINT, I18N_TITLE_ONLINE_FORMAT, I18N_TITLE_MUTED, I18N_TITLE_HELP_HINT, I18N_IDLE_TIMEOUT_FORMAT, I18N_SYSTEM_USERNAME, I18N_SYSTEM_JOIN_FORMAT, I18N_SYSTEM_LEAVE_FORMAT, I18N_SYSTEM_NICK_FORMAT, I18N_USERS_TITLE, I18N_MSG_SENT_FORMAT, I18N_MSG_USER_NOT_FOUND_FORMAT, I18N_INBOX_TITLE, I18N_INBOX_EMPTY, I18N_NICK_INVALID, I18N_NICK_TAKEN_FORMAT, I18N_NICK_UNCHANGED, I18N_NICK_CHANGED_FORMAT, I18N_LAST_HEADER_FORMAT, I18N_SEARCH_HEADER_FORMAT, I18N_MUTE_JOINS_FORMAT, I18N_MUTE_JOINS_MUTED, I18N_MUTE_JOINS_UNMUTED, I18N_CLEAR_DONE, I18N_LANG_CURRENT_FORMAT, I18N_LANG_SET_FORMAT, I18N_LANG_UNSUPPORTED_FORMAT, I18N_UNKNOWN_COMMAND_FORMAT, I18N_DID_YOU_MEAN_FORMAT, I18N_UNKNOWN_GUIDANCE, I18N_EXEC_POST_EMPTY, I18N_EXEC_POST_INVALID_UTF8, I18N_EXEC_POST_TOO_LONG, I18N_EXEC_POST_PERSIST_FAILED, I18N_EXEC_COMMAND_TOO_LONG, I18N_EXEC_UNKNOWN_COMMAND_FORMAT, I18N_TEXT_COUNT } i18n_text_id_t; bool i18n_try_parse_ui_lang(const char *value, ui_lang_t *lang); ui_lang_t i18n_parse_ui_lang(const char *value, ui_lang_t fallback); ui_lang_t i18n_default_ui_lang(void); ui_lang_t i18n_next_ui_lang(ui_lang_t lang); const char *i18n_ui_lang_code(ui_lang_t lang); const char *i18n_text(ui_lang_t lang, i18n_text_id_t id); static inline const char *i18n_string(i18n_string_t value, ui_lang_t lang) { if ((int)lang < 0 || lang >= UI_LANG_COUNT) { lang = UI_LANG_EN; } if (value.text[lang]) { return value.text[lang]; } if (value.text[UI_LANG_EN]) { return value.text[UI_LANG_EN]; } return ""; } #endif /* I18N_H */