void translate_receiving_chat_msg_cb(const gchar *original_phrase, const gchar *translated_phrase, const gchar *detected_language, gpointer userdata) { struct TranslateConvMessage *convmsg = userdata; PurpleChat *chat; gchar *html_text; const gchar *stored_lang = ""; const gchar *language_name = NULL; gchar *message; if (detected_language) { chat = purple_blist_find_chat(convmsg->account, convmsg->conv->name); stored_lang = purple_blist_node_get_string((PurpleBlistNode *)chat, DEST_LANG_SETTING); purple_blist_node_set_string((PurpleBlistNode *)chat, DEST_LANG_SETTING, detected_language); language_name = get_language_name(detected_language); if (language_name != NULL) { message = g_strdup_printf("Now translating to %s (auto-detected)", language_name); purple_conversation_write(convmsg->conv, NULL, message, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LOG, time(NULL)); g_free(message); } } html_text = purple_strdup_withhtml(translated_phrase); purple_conversation_write(convmsg->conv, convmsg->sender, html_text, convmsg->flags, time(NULL)); g_free(html_text); g_free(convmsg->sender); g_free(convmsg); }
static void translate_conversation_created(PurpleConversation *conv) { PurpleBlistNode *node = NULL; gchar *message; const gchar *language_key; const gchar *language_name; if (conv->type == PURPLE_CONV_TYPE_IM) node = (PurpleBlistNode *) purple_find_buddy(conv->account, conv->name); else if (conv->type == PURPLE_CONV_TYPE_CHAT) node = (PurpleBlistNode *) purple_blist_find_chat(conv->account, conv->name); if (node != NULL) { language_key = purple_blist_node_get_string(node, DEST_LANG_SETTING); if (language_key != NULL) { language_name = get_language_name(language_key); message = g_strdup_printf(_("Now translating to %s"), language_name); purple_conversation_write(conv, NULL, message, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LOG, time(NULL)); g_free(message); } } }
const char * get_language_name_for_tag (guint32 tag) { hb_language_t lang; const char *s; lang = hb_ot_tag_to_language (tag); s = hb_language_to_string (lang); return get_language_name (pango_language_from_string (s)); }
// FIG 0/5 Service component language // ETSI EN 300 401 8.1.2 bool fig0_5(fig0_common_t& fig0, int indent) { uint16_t SCId; uint8_t i = 1, SubChId, FIDCId, Language, Rfa; char tmpbuf[256]; char desc[256]; bool LS_flag, MSC_FIC_flag; bool complete = false; uint8_t* f = fig0.f; while (i < (fig0.figlen - 1)) { // iterate over service component language LS_flag = f[i] >> 7; if (LS_flag == 0) { // Short form (L/S = 0) MSC_FIC_flag = (f[i] >> 6) & 0x01; Language = f[i+1]; if (MSC_FIC_flag == 0) { // 0: MSC in Stream mode and SubChId identifies the sub-channel SubChId = f[i] & 0x3F; sprintf(desc, "L/S flag=%d short form, MSC/FIC flag=%d MSC, SubChId=0x%X, Language=0x%X %s", LS_flag, MSC_FIC_flag, SubChId, Language, get_language_name(Language)); } else { // 1: FIC and FIDCId identifies the component FIDCId = f[i] & 0x3F; sprintf(desc, "L/S flag=%d short form, MSC/FIC flag=%d FIC, FIDCId=0x%X, Language=0x%X %s", LS_flag, MSC_FIC_flag, FIDCId, Language, get_language_name(Language)); } int key = (MSC_FIC_flag << 7) | (f[i] % 0x3F); complete |= fig0_5_is_complete(key); printbuf(desc, indent+1, NULL, 0); i += 2; } else { // Long form (L/S = 1) if (i < (fig0.figlen - 2)) {