diff options
Diffstat (limited to 'app-dicts/libtranslate/files')
-rw-r--r-- | app-dicts/libtranslate/files/libtranslate-0.99-charsetparse.diff | 47 | ||||
-rw-r--r-- | app-dicts/libtranslate/files/libtranslate-0.99-condfix.diff | 38 | ||||
-rw-r--r-- | app-dicts/libtranslate/files/libtranslate-ds-empty.patch | 17 | ||||
-rw-r--r-- | app-dicts/libtranslate/files/libtranslate-ds-fixcharset.patch | 93 | ||||
-rw-r--r-- | app-dicts/libtranslate/files/libtranslate-ds-memory.patch | 12 | ||||
-rw-r--r-- | app-dicts/libtranslate/files/libtranslate-ds-promt.patch | 27 | ||||
-rw-r--r-- | app-dicts/libtranslate/files/libtranslate-ds-timed.patch.bz2 | bin | 0 -> 2863 bytes | |||
-rw-r--r-- | app-dicts/libtranslate/files/libtranslate-ds-timed24.patch | 360 | ||||
-rw-r--r-- | app-dicts/libtranslate/files/libtranslate-soup24inc.patch | 533 | ||||
-rw-r--r-- | app-dicts/libtranslate/files/services.xml | 258 |
10 files changed, 1385 insertions, 0 deletions
diff --git a/app-dicts/libtranslate/files/libtranslate-0.99-charsetparse.diff b/app-dicts/libtranslate/files/libtranslate-0.99-charsetparse.diff new file mode 100644 index 0000000..1626f25 --- /dev/null +++ b/app-dicts/libtranslate/files/libtranslate-0.99-charsetparse.diff @@ -0,0 +1,47 @@ +--- src/modules/translate-generic-service.c.orig Mon Apr 11 23:08:47 2005 ++++ src/modules/translate-generic-service.c Mon Apr 11 23:15:54 2005 +@@ -484,7 +484,7 @@ + + if (SOUP_STATUS_IS_SUCCESSFUL(message->status_code)) + { +- const char *charset = NULL; ++ char *charset = NULL; + + if (flags & TRANSFER_CONVERT) + { +@@ -493,14 +493,31 @@ + content_type = translate_generic_service_get_header(message, &info, "Content-Type"); + if (content_type) + { +- charset = translate_ascii_strcasestr(content_type, "charset="); +- if (charset) +- charset += 8; ++ const char *tmp; ++ ++ tmp = translate_ascii_strcasestr(content_type, "charset="); ++ if (tmp) ++ { ++ int len; ++ ++ tmp += 8; ++ if (*tmp == '\'' || *tmp == '"') ++ tmp++; ++ ++ len = strlen(tmp); ++ if (len > 0 && (tmp[len - 1] == '\'' || tmp[len - 1] == '"')) ++ len--; ++ ++ charset = g_strndup(tmp, len); ++ } + } + } + + if (charset) +- response = g_convert(message->response.body, message->response.length, "UTF-8", charset, NULL, NULL, err); ++ { ++ response = g_convert(message->response.body, message->response.length, "UTF-8", charset, NULL, NULL, err); ++ g_free(charset); ++ } + else + { + if ((flags & TRANSFER_CONVERT) && ! g_utf8_validate(message->response.body, message->response.length, NULL)) diff --git a/app-dicts/libtranslate/files/libtranslate-0.99-condfix.diff b/app-dicts/libtranslate/files/libtranslate-0.99-condfix.diff new file mode 100644 index 0000000..4011dcd --- /dev/null +++ b/app-dicts/libtranslate/files/libtranslate-0.99-condfix.diff @@ -0,0 +1,38 @@ +--- src/translate-session.c.orig Mon Apr 11 22:44:53 2005 ++++ src/translate-session.c Mon Apr 11 22:51:48 2005 +@@ -703,7 +703,14 @@ + GError *tmp_err = NULL; + + g_mutex_lock(info->mutex); +- ret = info->err != NULL; ++ if (info->err) ++ { ++ ret = TRUE; ++ if (info->progress_cond) ++ g_cond_signal(info->progress_cond); ++ } ++ else ++ ret = FALSE; + g_mutex_unlock(info->mutex); + + if (ret) +@@ -728,6 +735,9 @@ + else + g_propagate_error(&info->err, tmp_err); + ++ if (info->progress_cond) ++ g_cond_signal(info->progress_cond); ++ + g_mutex_unlock(info->mutex); + + return; +@@ -759,6 +769,9 @@ + info->err = g_error_new(TRANSLATE_SESSION_ERROR, + TRANSLATE_SESSION_ERROR_NO_SERVICE, + _("no service could translate chunk")); ++ ++ if (info->progress_cond) ++ g_cond_signal(info->progress_cond); + } + + g_mutex_unlock(info->mutex); diff --git a/app-dicts/libtranslate/files/libtranslate-ds-empty.patch b/app-dicts/libtranslate/files/libtranslate-ds-empty.patch new file mode 100644 index 0000000..eb2e0ce --- /dev/null +++ b/app-dicts/libtranslate/files/libtranslate-ds-empty.patch @@ -0,0 +1,17 @@ +diff -dPNur libtranslate-0.99/src/modules/translate-generic-service.c libtranslate-0.99-new/src/modules/translate-generic-service.c +--- libtranslate-0.99/src/modules/translate-generic-service.c 2007-06-27 17:26:10.000000000 +0200 ++++ libtranslate-0.99-new/src/modules/translate-generic-service.c 2007-06-27 17:23:55.000000000 +0200 +@@ -1042,6 +1042,13 @@ + + g_free(response); + } ++ ++ if ((!answer)&&(!*err)) { ++ g_set_error(err, ++ TRANSLATE_GENERIC_SERVICE_ERROR, ++ TRANSLATE_GENERIC_SERVICE_ERROR_PARSE, ++ _("empty server response")); ++ } + + return answer ? g_string_free(answer, FALSE) : NULL; + } diff --git a/app-dicts/libtranslate/files/libtranslate-ds-fixcharset.patch b/app-dicts/libtranslate/files/libtranslate-ds-fixcharset.patch new file mode 100644 index 0000000..0665d2f --- /dev/null +++ b/app-dicts/libtranslate/files/libtranslate-ds-fixcharset.patch @@ -0,0 +1,93 @@ +diff -dPNur libtranslate-0.99-new/src/modules/translate-generic-parser.c libtranslate-0.99-new-uk/src/modules/translate-generic-parser.c +--- libtranslate-0.99-new/src/modules/translate-generic-parser.c 2005-01-17 17:46:24.000000000 +0100 ++++ libtranslate-0.99-new-uk/src/modules/translate-generic-parser.c 2007-06-27 22:40:04.000000000 +0200 +@@ -726,6 +726,7 @@ + { + const char *url; + const char *post; ++ const char *charset; + const char *content_type; + + g_return_if_fail(info != NULL); +@@ -740,6 +741,7 @@ + "url", REQUIRED, &url, + "post", OPTIONAL, &post, + "content-type", OPTIONAL, &content_type, ++ "response-charset", OPTIONAL, &charset, + NULL); + + if (! *err) +@@ -748,6 +750,7 @@ + (*location)->url = g_strdup(url); + (*location)->post = g_strdup(post); + (*location)->content_type = g_strdup(content_type ? content_type : "application/x-www-form-urlencoded"); ++ (*location)->response_charset = g_strdup(charset); + } + } + +@@ -759,6 +762,7 @@ + g_free(location->url); + g_free(location->post); + g_free(location->content_type); ++ g_free(location->response_charset); + g_slist_foreach(location->http_headers, (GFunc) translate_generic_http_header_free, NULL); + g_slist_free(location->http_headers); + g_free(location); +diff -dPNur libtranslate-0.99-new/src/modules/translate-generic-parser.h libtranslate-0.99-new-uk/src/modules/translate-generic-parser.h +--- libtranslate-0.99-new/src/modules/translate-generic-parser.h 2005-01-17 17:46:30.000000000 +0100 ++++ libtranslate-0.99-new-uk/src/modules/translate-generic-parser.h 2007-06-27 22:34:13.000000000 +0200 +@@ -51,6 +51,7 @@ + char *url; + char *post; + char *content_type; ++ char *response_charset; + GSList *http_headers; + } TranslateGenericLocation; + +diff -dPNur libtranslate-0.99-new/src/modules/translate-generic-service.c libtranslate-0.99-new-uk/src/modules/translate-generic-service.c +--- libtranslate-0.99-new/src/modules/translate-generic-service.c 2007-06-27 17:23:55.000000000 +0200 ++++ libtranslate-0.99-new-uk/src/modules/translate-generic-service.c 2007-06-27 22:40:29.000000000 +0200 +@@ -129,6 +129,7 @@ + static char *translate_generic_service_get (const char *uri, + const char *post, + const char *post_content_type, ++ const char *response_charset, + const GSList *headers, + TransferFlags flags, + GTimeVal *deadline, +@@ -407,6 +408,7 @@ + translate_generic_service_get (const char *uri, + const char *post, + const char *post_content_type, ++ const char *response_charset, + const GSList *headers, + TransferFlags flags, + GTimeVal *deadline, +@@ -550,9 +552,9 @@ + } + } + +- if (charset) ++ if ((charset)||(response_charset)) + { +- response = g_convert(message->response.body, message->response.length, "UTF-8", charset, NULL, NULL, err); ++ response = g_convert(message->response.body, message->response.length, "UTF-8", response_charset?response_charset:charset, NULL, NULL, err); + g_free(charset); + } + else +@@ -941,6 +943,7 @@ + response = translate_generic_service_get(url, + post, + group->text_location->content_type, ++ group->text_location->response_charset, + headers, + TRANSFER_FOLLOW_REFRESH | TRANSFER_CONVERT, + deadline, +@@ -1339,6 +1342,7 @@ + response = translate_generic_service_get(translation_url, + post, + group->web_page_location->content_type, ++ group->web_page_location->response_charset, + headers, + 0, + NULL, diff --git a/app-dicts/libtranslate/files/libtranslate-ds-memory.patch b/app-dicts/libtranslate/files/libtranslate-ds-memory.patch new file mode 100644 index 0000000..e05c7b4 --- /dev/null +++ b/app-dicts/libtranslate/files/libtranslate-ds-memory.patch @@ -0,0 +1,12 @@ +diff -dPNur libtranslate-0.99/src/translate-util.c libtranslate-0.99-new/src/translate-util.c +--- libtranslate-0.99/src/translate-util.c 2005-01-17 16:45:45.000000000 +0000 ++++ libtranslate-0.99-new/src/translate-util.c 2005-12-29 18:35:04.000000000 +0000 +@@ -136,7 +136,7 @@ + g_return_val_if_fail(big != NULL, NULL); + g_return_val_if_fail(little != NULL, NULL); + +- lower_big = g_ascii_strdown(big, big_len); ++ lower_big = g_ascii_strdown(big, (int)big_len); + lower_little = g_ascii_strdown(little, -1); + + s = strstr(lower_big, lower_little); diff --git a/app-dicts/libtranslate/files/libtranslate-ds-promt.patch b/app-dicts/libtranslate/files/libtranslate-ds-promt.patch new file mode 100644 index 0000000..6b30145 --- /dev/null +++ b/app-dicts/libtranslate/files/libtranslate-ds-promt.patch @@ -0,0 +1,27 @@ +diff -dPNur libtranslate-0.99/src/modules/translate-generic-service.c libtranslate-0.99-new/src/modules/translate-generic-service.c +--- libtranslate-0.99/src/modules/translate-generic-service.c 2007-06-27 17:26:10.000000000 +0200 ++++ libtranslate-0.99-new/src/modules/translate-generic-service.c 2007-06-27 17:23:55.000000000 +0200 +@@ -1238,7 +1245,22 @@ + { + if (modifier_value) + g_warning(_("%s: value specified for \"escape\" modifier"), warning_prefix); +- modified = soup_uri_encode(value, NULL); ++ modified = soup_uri_encode(value, "&"); ++ } ++ else if (! strcmp(modifier_name, "entities")) ++ { ++ int i; ++ char *ptr; ++ ++ modified = g_malloc(strlen(value)*6 + 1); ++ for (i=0,ptr=modified;value[i];i++) { ++ if ((unsigned char)(value[i])<160) *(ptr++)=value[i]; ++ else { ++ sprintf(ptr, "&#%u;", (unsigned char)(value[i])); ++ ptr+=6; ++ } ++ } ++ *ptr = 0; + } + else if (! strcmp(modifier_name, "charset")) + { diff --git a/app-dicts/libtranslate/files/libtranslate-ds-timed.patch.bz2 b/app-dicts/libtranslate/files/libtranslate-ds-timed.patch.bz2 Binary files differnew file mode 100644 index 0000000..c5b3a86 --- /dev/null +++ b/app-dicts/libtranslate/files/libtranslate-ds-timed.patch.bz2 diff --git a/app-dicts/libtranslate/files/libtranslate-ds-timed24.patch b/app-dicts/libtranslate/files/libtranslate-ds-timed24.patch new file mode 100644 index 0000000..daf3811 --- /dev/null +++ b/app-dicts/libtranslate/files/libtranslate-ds-timed24.patch @@ -0,0 +1,360 @@ +diff -dPNur libtranslate-0.99/src/modules/translate-generic-service.c libtranslate-0.99-new/src/modules/translate-generic-service.c +--- libtranslate-0.99/src/modules/translate-generic-service.c 2005-01-17 17:46:38.000000000 +0100 ++++ libtranslate-0.99-new/src/modules/translate-generic-service.c 2005-07-27 22:13:33.000000000 +0200 +@@ -131,6 +131,7 @@ + const char *post_content_type, + const GSList *headers, + TransferFlags flags, ++ GTimeVal *deadline, + TranslateProgressFunc progress_func, + gpointer user_data, + GError **err); +@@ -181,6 +182,15 @@ + gpointer user_data, + GError **err); + ++static char *translate_generic_service_timed_translate_text (TranslateService *service, ++ const char *text, ++ const char *from, ++ const char *to, ++ GTimeVal *deadline, ++ TranslateProgressFunc progress_func, ++ gpointer user_data, ++ GError **err); ++ + char *translate_generic_service_expand (const char *warning_prefix, + const char *str, + ...); +@@ -248,6 +258,7 @@ + + service_class->get_pairs = translate_generic_service_get_pairs; + service_class->translate_text = translate_generic_service_translate_text; ++ service_class->timed_translate_text = translate_generic_service_timed_translate_text; + service_class->translate_web_page = translate_generic_service_translate_web_page; + + g_object_class_install_property(object_class, +@@ -387,12 +398,22 @@ + return TRUE; /* continue */ + } + ++#ifdef HAVE_LIBSOUP22 ++static void send_message_cb(SoupMessage *req, gpointer user_data) { ++#else ++static void send_message_cb(SoupSession *session, SoupMessage *req, gpointer user_data) { ++#endif ++ g_object_ref(req); ++ *(gboolean*)user_data = TRUE; ++} ++ + static char * + translate_generic_service_get (const char *uri, + const char *post, + const char *post_content_type, + const GSList *headers, + TransferFlags flags, ++ GTimeVal *deadline, + TranslateProgressFunc progress_func, + gpointer user_data, + GError **err) +@@ -400,6 +417,8 @@ + TransferInfo info; + SoupMessage *message; + const GSList *l; ++ GTimeVal tv; ++ gboolean completed = 0, canceled = 0; + char *response = NULL; + + g_return_val_if_fail(uri != NULL, FALSE); +@@ -479,9 +498,31 @@ + if (translate_generic_debug_flags & TRANSLATE_GENERIC_DEBUG_LOG_TRANSFERS) + translate_generic_service_log_connect(message); + ++ if (deadline) { ++ soup_session_queue_message(info.session, message, send_message_cb, &completed); ++ ++ do { ++ g_main_iteration (FALSE); ++ if (completed) break; ++ ++ g_get_current_time(&tv); ++ } while ((tv.tv_sec < deadline->tv_sec)||((tv.tv_sec == deadline->tv_sec)&&(tv.tv_usec < deadline->tv_usec))); ++ ++ if (!completed) { ++#ifdef HAVE_LIBSOUP22 ++ soup_session_cancel_message(info.session, message); ++#else ++ soup_session_cancel_message(info.session, message, SOUP_STATUS_CANCELLED); ++#endif ++ canceled = 1; ++ } ++ } else + soup_session_send_message(info.session, message); + g_object_unref(info.session); + ++ if (canceled) ++ g_set_error(err, TRANSLATE_ERROR, TRANSLATE_ERROR_CANCELLED, _("Timeout")); ++ else + if (SOUP_STATUS_IS_SUCCESSFUL(message->status_code)) + { + const char *charset = NULL; +@@ -833,10 +870,11 @@ + } + + static char * +-translate_generic_service_translate_text (TranslateService *service, ++translate_generic_service_timed_translate_text (TranslateService *service, + const char *text, + const char *from, + const char *to, ++ GTimeVal *deadline, + TranslateProgressFunc progress_func, + gpointer user_data, + GError **err) +@@ -882,16 +920,16 @@ + + headers = g_slist_copy(group->http_headers); + headers = g_slist_concat(headers, g_slist_copy(group->text_location->http_headers)); +- ++ + response = translate_generic_service_get(url, + post, + group->text_location->content_type, + headers, + TRANSFER_FOLLOW_REFRESH | TRANSFER_CONVERT, ++ deadline, + progress_func, + user_data, + err); +- + g_free(url); + g_free(post); + g_slist_free(headers); +@@ -991,6 +1029,18 @@ + return answer ? g_string_free(answer, FALSE) : NULL; + } + ++static char * ++translate_generic_service_translate_text (TranslateService *service, ++ const char *text, ++ const char *from, ++ const char *to, ++ TranslateProgressFunc progress_func, ++ gpointer user_data, ++ GError **err) ++{ ++ return translate_generic_service_timed_translate_text(service, text, from, to, NULL, progress_func, user_data, err); ++} ++ + char * + translate_generic_service_expand (const char *warning_prefix, + const char *str, +@@ -1252,6 +1302,7 @@ + group->web_page_location->content_type, + headers, + 0, ++ NULL, + progress_func, + user_data, + err); +@@ -1311,7 +1362,7 @@ + g_free(proxy_text_uri); + } + +- session = soup_session_sync_new_with_options(SOUP_SESSION_PROXY_URI, proxy_uri, NULL); ++ session = soup_session_async_new_with_options(SOUP_SESSION_PROXY_URI, proxy_uri, NULL); + + if (proxy_uri) + soup_uri_free(proxy_uri); +diff -dPNur libtranslate-0.99/src/translate-service.c libtranslate-0.99-new/src/translate-service.c +--- libtranslate-0.99/src/translate-service.c 2005-01-17 17:45:23.000000000 +0100 ++++ libtranslate-0.99-new/src/translate-service.c 2005-07-27 17:18:07.000000000 +0200 +@@ -372,6 +372,28 @@ + } + + char * ++translate_service_timed_translate_text (TranslateService *service, ++ const char *text, ++ const char *from, ++ const char *to, ++ GTimeVal *deadline, ++ TranslateProgressFunc progress_func, ++ gpointer user_data, ++ GError **err) ++{ ++ g_return_val_if_fail(TRANSLATE_IS_SERVICE(service), NULL); ++ g_return_val_if_fail(TRANSLATE_SERVICE_GET_CLASS(service)->translate_text != NULL, NULL); ++ g_return_val_if_fail(text != NULL, NULL); ++ g_return_val_if_fail(from != NULL, NULL); ++ g_return_val_if_fail(to != NULL, NULL); ++ ++ if (TRANSLATE_SERVICE_GET_CLASS(service)->timed_translate_text) ++ return TRANSLATE_SERVICE_GET_CLASS(service)->timed_translate_text(service, text, from, to, deadline, progress_func, user_data, err); ++ ++ return TRANSLATE_SERVICE_GET_CLASS(service)->translate_text(service, text, from, to, progress_func, user_data, err); ++} ++ ++char * + translate_service_translate_web_page (TranslateService *service, + const char *url, + const char *from, +diff -dPNur libtranslate-0.99/src/translate-service.h libtranslate-0.99-new/src/translate-service.h +--- libtranslate-0.99/src/translate-service.h 2005-01-17 17:45:29.000000000 +0100 ++++ libtranslate-0.99-new/src/translate-service.h 2005-07-27 16:54:46.000000000 +0200 +@@ -73,6 +73,14 @@ + TranslateProgressFunc progress_func, + gpointer user_data, + GError **err); ++ char *(*timed_translate_text)(TranslateService *service, ++ const char *text, ++ const char *from, ++ const char *to, ++ GTimeVal *deadline, ++ TranslateProgressFunc progress_func, ++ gpointer user_data, ++ GError **err); + char *(*translate_web_page) (TranslateService *service, + const char *url, + const char *from, +diff -dPNur libtranslate-0.99/src/translate-service-private.h libtranslate-0.99-new/src/translate-service-private.h +--- libtranslate-0.99/src/translate-service-private.h 2005-01-17 17:45:17.000000000 +0100 ++++ libtranslate-0.99-new/src/translate-service-private.h 2005-07-27 17:30:00.000000000 +0200 +@@ -41,6 +41,14 @@ + TranslateProgressFunc progress_func, + gpointer user_data, + GError **err); ++char *translate_service_timed_translate_text (TranslateService *service, ++ const char *text, ++ const char *from, ++ const char *to, ++ GTimeVal *deadline, ++ TranslateProgressFunc progress_func, ++ gpointer user_data, ++ GError **err); + char *translate_service_translate_web_page (TranslateService *service, + const char *url, + const char *from, +diff -dPNur libtranslate-0.99/src/translate-session.c libtranslate-0.99-new/src/translate-session.c +--- libtranslate-0.99/src/translate-session.c 2005-01-17 17:45:35.000000000 +0100 ++++ libtranslate-0.99-new/src/translate-session.c 2005-07-27 16:52:46.000000000 +0200 +@@ -62,6 +62,8 @@ + { + GMutex *mutex; + GCond *progress_cond; ++ ++ GTimeVal *deadline; + + TranslateSession *session; + GSList *services; +@@ -487,6 +489,7 @@ + * @text: a nul-terminated string. + * @from: a RFC 3066 language tag. + * @to: a RFC 3066 language tag. ++ * @timeout: timeout in microseconds. + * @progress_func: a function to call when progressing, or %NULL. + * @user_data: data to pass to @progress_func, or %NULL. + * @err: a location to report errors, or %NULL. Any of the errors in +@@ -505,10 +508,11 @@ + * when no longer needed. + **/ + char * +-translate_session_translate_text (TranslateSession *session, ++translate_session_timed_translate_text (TranslateSession *session, + const char *text, + const char *from, + const char *to, ++ gulong timeout, + TranslateProgressFunc progress_func, + gpointer user_data, + GError **err) +@@ -519,6 +523,7 @@ + unsigned int max_threads; + GThreadPool *pool; + GSList *l; ++ GTimeVal deadline; + unsigned int max_chunk_len = 0; + char *translated = NULL; + +@@ -527,6 +532,11 @@ + g_return_val_if_fail(from != NULL, NULL); + g_return_val_if_fail(to != NULL, NULL); + ++ if (timeout) { ++ g_get_current_time(&deadline); ++ g_time_val_add(&deadline, timeout); ++ } ++ + LOCK(session); + info.services = translate_session_get_services_for_translation(session, + TRANSLATE_PAIR_TEXT, +@@ -560,7 +570,8 @@ + chunks = translate_session_split(text, max_chunk_len); + + info.mutex = g_mutex_new(); +- info.progress_cond = progress_func ? g_cond_new() : NULL; ++ info.progress_cond = (progress_func||timeout) ? g_cond_new() : NULL; ++ info.deadline = timeout ? &deadline : NULL; + info.session = session; + info.chunks = NULL; + info.from = from; +@@ -614,6 +625,11 @@ + GSList *l; + int n_chunks; + ++ if (timeout) { ++ if (!g_cond_timed_wait(info.progress_cond, info.mutex, info.deadline)) ++ info.err = g_error_new(TRANSLATE_ERROR,TRANSLATE_ERROR_CANCELLED,_("timeout")); ++ break; ++ } else + g_cond_wait(info.progress_cond, info.mutex); + + if (info.err) +@@ -680,6 +696,18 @@ + return translated; + } + ++char * ++translate_session_translate_text (TranslateSession *session, ++ const char *text, ++ const char *from, ++ const char *to, ++ TranslateProgressFunc progress_func, ++ gpointer user_data, ++ GError **err) ++{ ++ return translate_session_timed_translate_text(session, text, from, to, 0, progress_func, user_data, err); ++} ++ + static void + translate_session_translate_thread (gpointer data, gpointer user_data) + { +@@ -709,10 +737,11 @@ + if (ret) + return; + +- chunk_info->translated = translate_service_translate_text(service, ++ chunk_info->translated = translate_service_timed_translate_text(service, + chunk_info->chunk, + info->from, + info->to, ++ info->deadline, + info->progress_cond ? translate_session_translate_progress_cb : NULL, + info->progress_cond ? chunk_info : NULL, + &tmp_err); +diff -dPNur libtranslate-0.99/src/translate-session.h libtranslate-0.99-new/src/translate-session.h +--- libtranslate-0.99/src/translate-session.h 2005-01-17 17:45:40.000000000 +0100 ++++ libtranslate-0.99-new/src/translate-session.h 2005-07-27 14:41:05.000000000 +0200 +@@ -93,6 +93,14 @@ + unsigned int translate_session_get_max_threads (TranslateSession *session); + int translate_session_get_max_retries (TranslateSession *session); + ++char *translate_session_timed_translate_text (TranslateSession *session, ++ const char *text, ++ const char *from, ++ const char *to, ++ gulong timeout, ++ TranslateProgressFunc progress_func, ++ gpointer user_data, ++ GError **err); + char *translate_session_translate_text (TranslateSession *session, + const char *text, + const char *from, diff --git a/app-dicts/libtranslate/files/libtranslate-soup24inc.patch b/app-dicts/libtranslate/files/libtranslate-soup24inc.patch new file mode 100644 index 0000000..8de7c07 --- /dev/null +++ b/app-dicts/libtranslate/files/libtranslate-soup24inc.patch @@ -0,0 +1,533 @@ +diff -dPNur libtranslate-0.99/config.h.in libtranslate-0.99-1/config.h.in +--- libtranslate-0.99/config.h.in 2005-01-17 18:06:58.000000000 +0100 ++++ libtranslate-0.99-1/config.h.in 2010-02-14 03:55:56.000000000 +0100 +@@ -24,6 +24,12 @@ + /* Define if your <locale.h> file defines LC_MESSAGES. */ + #undef HAVE_LC_MESSAGES + ++/* Building with libsoup 2.2 */ ++#undef HAVE_LIBSOUP22 ++ ++/* Building with libsoup 2.4 */ ++#undef HAVE_LIBSOUP24 ++ + /* Define to 1 if you have the <locale.h> header file. */ + #undef HAVE_LOCALE_H + +diff -dPNur libtranslate-0.99/configure.ac libtranslate-0.99-1/configure.ac +--- libtranslate-0.99/configure.ac 2005-01-15 17:24:12.000000000 +0100 ++++ libtranslate-0.99-1/configure.ac 2010-02-14 03:55:56.000000000 +0100 +@@ -50,7 +50,11 @@ + ### optional libraries + + if TRANSLATE_FEATURE_ENABLED(generic); then +- PKG_CHECK_MODULES(SOUP, [libsoup-2.2],, [TRANSLATE_FEATURE_DISABLE(generic, [libsoup not found])]) ++ PKG_CHECK_MODULES(SOUP, [libsoup-2.4], ++ [AC_DEFINE(HAVE_LIBSOUP24, 1, [Building with libsoup 2.4])], ++ [PKG_CHECK_MODULES(SOUP, [libsoup-2.2], ++ [AC_DEFINE(HAVE_LIBSOUP22, 1, [Building with libsoup 2.2])], ++ [TRANSLATE_FEATURE_DISABLE(generic, [libsoup not found])])]) + fi + if TRANSLATE_FEATURE_ENABLED(generic); then + PKG_CHECK_MODULES(LIBXML, [libxml-2.0],, [TRANSLATE_FEATURE_DISABLE(generic, [libxml not found])]) +diff -dPNur libtranslate-0.99/src/modules/translate-generic-service.c libtranslate-0.99-1/src/modules/translate-generic-service.c +--- libtranslate-0.99/src/modules/translate-generic-service.c 2010-02-14 03:55:34.000000000 +0100 ++++ libtranslate-0.99-1/src/modules/translate-generic-service.c 2010-02-14 04:04:56.000000000 +0100 +@@ -35,7 +35,9 @@ + #include <stdlib.h> + #include <glib/gi18n-lib.h> + #include <libsoup/soup.h> ++#ifdef HAVE_LIBSOUP22 + #include <libsoup/soup-message-filter.h> ++#endif + #include <libxml/HTMLparser.h> + #include "translate.h" + #include "translate-generic-service.h" +@@ -43,6 +45,17 @@ + #include "translate-generic-parser.h" + #include "translate-generic-soup-cookie-jar.h" + ++#ifdef HAVE_LIBSOUP22 ++#define soup_message_headers_get soup_message_get_header ++#define soup_message_headers_append soup_message_add_header ++#define SoupURI SoupUri ++#define SOUP_MESSAGE_RESPONSE_BODY(msg) ((msg)->response.body) ++#define SOUP_MESSAGE_RESPONSE_LENGTH(msg) ((msg)->response.length) ++#else ++#define SOUP_MESSAGE_RESPONSE_BODY(msg) ((msg)->response_body->data) ++#define SOUP_MESSAGE_RESPONSE_LENGTH(msg) ((msg)->response_body->length) ++#endif ++ + #define MAKE_WARNING_PREFIX(service, group_pos, attribute, element) \ + g_strdup_printf(_("in %s, group %i, \"%s\" attribute of \"%s\" element"), \ + translate_service_get_name((service)), \ +@@ -142,6 +155,7 @@ + const char *name); + + static void translate_generic_service_log_connect (SoupMessage *message); ++#ifdef HAVE_LIBSOUP22 + static void translate_generic_service_log_wrote_headers_h (SoupMessage *message, + gpointer user_data); + static void translate_generic_service_log_wrote_body_h (SoupMessage *message, +@@ -153,10 +167,20 @@ + static void translate_generic_service_log_headers_cb (const char *key, + const char *value, + gpointer user_data); ++#else ++static void translate_generic_service_log_printer (SoupLogger *logger, ++ SoupLoggerLogLevel level, ++ char direction, ++ const char *data, ++ gpointer user_data); ++#endif + + static void translate_generic_service_progress_got_headers_h (SoupMessage *message, + gpointer user_data); + static void translate_generic_service_progress_got_chunk_h (SoupMessage *message, ++#ifdef HAVE_LIBSOUP24 ++ SoupBuffer *chunk, ++#endif + gpointer user_data); + + static void translate_generic_service_html_got_headers_h (SoupMessage *message, +@@ -172,8 +196,10 @@ + static void translate_generic_service_refresh_got_body_h (SoupMessage *message, + gpointer user_data); + ++#ifdef HAVE_LIBSOUP22 + static void translate_generic_service_redirect_handler (SoupMessage *message, + gpointer user_data); ++#endif + + static char *translate_generic_service_translate_text (TranslateService *service, + const char *text, +@@ -440,7 +466,11 @@ + g_return_val_if_fail(post_content_type != NULL, NULL); + soup_message_set_request(message, + post_content_type, ++#ifdef HAVE_LIBSOUP22 + SOUP_BUFFER_USER_OWNED, ++#else ++ SOUP_MEMORY_TEMPORARY, ++#endif + (char *) post, + strlen(post)); + } +@@ -448,7 +478,7 @@ + for (l = headers; l != NULL; l = l->next) + { + TranslateGenericHttpHeader *header = l->data; +- soup_message_add_header(message->request_headers, header->name, header->value); ++ soup_message_headers_append(message->request_headers, header->name, header->value); + } + + info.session = translate_generic_service_soup_session_sync_new(); +@@ -456,12 +486,21 @@ + info.html_http_equiv = NULL; + + if (translate_generic_debug_flags & TRANSLATE_GENERIC_DEBUG_LOG_TRANSFERS) +- g_object_connect(message, +- "signal::wrote-headers", translate_generic_service_log_wrote_headers_h, &info, +- "signal::wrote-body", translate_generic_service_log_wrote_body_h, &info, +- "signal::got-headers", translate_generic_service_log_got_headers_h, &info, +- "signal::got-body", translate_generic_service_log_got_body_h, &info, +- NULL); ++ { ++#ifdef HAVE_LIBSOUP22 ++ g_object_connect(message, ++ "signal::wrote-headers", translate_generic_service_log_wrote_headers_h, &info, ++ "signal::wrote-body", translate_generic_service_log_wrote_body_h, &info, ++ "signal::got-headers", translate_generic_service_log_got_headers_h, &info, ++ "signal::got-body", translate_generic_service_log_got_body_h, &info, ++ NULL); ++#else ++ SoupLogger *logger = soup_logger_new (SOUP_LOGGER_LOG_BODY, -1); ++ soup_logger_set_printer (logger, translate_generic_service_log_printer, NULL, NULL); ++ soup_logger_attach (logger, info.session); ++ g_object_unref (logger); ++#endif ++ } + + if (progress_func) + { +@@ -489,6 +528,7 @@ + if (flags & TRANSFER_FOLLOW_REFRESH) + g_signal_connect(message, "got-body", G_CALLBACK(translate_generic_service_refresh_got_body_h), &info); + ++#ifdef HAVE_LIBSOUP22 + /* http://bugzilla.ximian.com/show_bug.cgi?id=70688 */ + soup_message_set_flags(message, SOUP_MESSAGE_NO_REDIRECT); + soup_message_add_status_class_handler(message, +@@ -496,6 +536,7 @@ + SOUP_HANDLER_POST_BODY, + translate_generic_service_redirect_handler, + info.session); ++#endif + + if (translate_generic_debug_flags & TRANSLATE_GENERIC_DEBUG_LOG_TRANSFERS) + translate_generic_service_log_connect(message); +@@ -554,18 +595,18 @@ + + if ((charset)||(response_charset)) + { +- response = g_convert(message->response.body, message->response.length, "UTF-8", response_charset?response_charset:charset, NULL, NULL, err); ++ response = g_convert(SOUP_MESSAGE_RESPONSE_BODY (message), SOUP_MESSAGE_RESPONSE_LENGTH (message), "UTF-8", charset, NULL, NULL, err); + g_free(charset); + } + else + { +- if ((flags & TRANSFER_CONVERT) && ! g_utf8_validate(message->response.body, message->response.length, NULL)) ++ if ((flags & TRANSFER_CONVERT) && ! g_utf8_validate(SOUP_MESSAGE_RESPONSE_BODY (message), SOUP_MESSAGE_RESPONSE_LENGTH (message), NULL)) + g_set_error(err, + TRANSLATE_GENERIC_SERVICE_ERROR, + TRANSLATE_GENERIC_SERVICE_ERROR_TRANSFER, + _("invalid UTF-8")); + else +- response = g_strndup(message->response.body, message->response.length); ++ response = g_strndup(SOUP_MESSAGE_RESPONSE_BODY (message), SOUP_MESSAGE_RESPONSE_LENGTH (message)); + } + } + else +@@ -606,7 +647,7 @@ + : NULL; + + if (! value) +- value = soup_message_get_header(message->response_headers, name); ++ value = soup_message_headers_get(message->response_headers, name); + + return value; + } +@@ -614,12 +655,14 @@ + static void + translate_generic_service_log_connect (SoupMessage *message) + { +- const SoupUri *uri; ++ const SoupURI *uri; + + uri = soup_message_get_uri(message); + g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, _("connecting to %s:%i"), uri->host, uri->port); + } + ++#ifdef HAVE_LIBSOUP22 ++ + static void + translate_generic_service_log_wrote_headers_h (SoupMessage *message, + gpointer user_data) +@@ -674,6 +717,20 @@ + g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%s %s: %s", prefix, key, value); + } + ++#else /* !HAVE_LIBSOUP22 */ ++ ++static void ++translate_generic_service_log_printer (SoupLogger *logger, ++ SoupLoggerLogLevel level, ++ char direction, ++ const char *data, ++ gpointer user_data) ++{ ++ g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%c %s", direction, data); ++} ++ ++#endif /* HAVE_LIBSOUP22 */ ++ + static void + translate_generic_service_progress_got_headers_h (SoupMessage *message, + gpointer user_data) +@@ -681,7 +738,7 @@ + TransferInfo *info = user_data; + const char *content_length; + +- content_length = soup_message_get_header(message->response_headers, "Content-Length"); ++ content_length = soup_message_headers_get(message->response_headers, "Content-Length"); + info->length = (content_length + && *content_length + && strspn(content_length, "0123456789") == strlen(content_length)) +@@ -691,6 +748,9 @@ + + static void + translate_generic_service_progress_got_chunk_h (SoupMessage *message, ++#ifdef HAVE_LIBSOUP24 ++ SoupBuffer *chunk, ++#endif + gpointer user_data) + { + TransferInfo *info = user_data; +@@ -700,7 +760,11 @@ + progress = -1; + else + { ++#ifdef HAVE_LIBSOUP22 + info->received += message->response.length; ++#else ++ info->received += chunk->length; ++#endif + progress = (double) info->received / info->length; + progress = CLAMP(progress, 0.0, 1.0); + } +@@ -716,7 +780,7 @@ + TransferInfo *info = user_data; + const char *content_type; + +- content_type = soup_message_get_header(message->response_headers, "Content-Type"); ++ content_type = soup_message_headers_get(message->response_headers, "Content-Type"); + info->parse_html = content_type + && (g_str_has_prefix(content_type, "text/html") + || g_str_has_prefix(content_type, "application/xhtml+xml") +@@ -736,7 +800,7 @@ + info->html_http_equiv = NULL; + } + +- if (info->parse_html && message->response.length > 0) ++ if (info->parse_html && SOUP_MESSAGE_RESPONSE_LENGTH (message) > 0) + { + char *body; + xmlSAXHandler sax_handler = { NULL }; +@@ -750,7 +814,7 @@ + sax_handler.startElement = translate_generic_service_html_start_element_cb; + sax_handler.endElement = translate_generic_service_html_end_element_cb; + +- body = g_strndup(message->response.body, message->response.length); ++ body = g_strndup(SOUP_MESSAGE_RESPONSE_BODY (message), SOUP_MESSAGE_RESPONSE_LENGTH (message)); + htmlSAXParseDoc(body, NULL, &sax_handler, user_data); + g_free(body); + } +@@ -817,7 +881,7 @@ + { + TransferInfo *info = user_data; + const char *refresh_uri; +- SoupUri *new_uri = NULL; ++ SoupURI *new_uri = NULL; + + refresh_uri = translate_generic_service_get_header(message, info, "Refresh"); + if (refresh_uri) +@@ -832,9 +896,9 @@ + new_uri = soup_uri_new(refresh_uri); + if (! new_uri) + { +- const SoupUri *base_uri; ++ SoupURI *base_uri; + +- base_uri = soup_message_get_uri(message); ++ base_uri = (SoupURI *)soup_message_get_uri(message); + new_uri = soup_uri_new_with_base(base_uri, refresh_uri); + } + } +@@ -851,6 +915,7 @@ + } + } + ++#ifdef HAVE_LIBSOUP22 + static void + translate_generic_service_redirect_handler (SoupMessage *message, + gpointer user_data) +@@ -887,6 +952,7 @@ + soup_session_requeue_message(session, message); + } + } ++#endif + + static char * + translate_generic_service_timed_translate_text (TranslateService *service, +@@ -1391,7 +1457,7 @@ + translate_generic_service_soup_session_sync_new (void) + { + char *proxy_text_uri; +- SoupUri *proxy_uri = NULL; ++ SoupURI *proxy_uri = NULL; + SoupSession *session; + TranslateGenericSoupCookieJar *cookie_jar; + +@@ -1411,7 +1477,7 @@ + soup_uri_free(proxy_uri); + + cookie_jar = translate_generic_soup_cookie_jar_new(); +- soup_session_add_filter(session, SOUP_MESSAGE_FILTER(cookie_jar)); ++ translate_generic_soup_cookie_jar_attach(cookie_jar, session); + g_object_unref(cookie_jar); + + return session; +diff -dPNur libtranslate-0.99/src/modules/translate-generic-soup-cookie-jar.c libtranslate-0.99-1/src/modules/translate-generic-soup-cookie-jar.c +--- libtranslate-0.99/src/modules/translate-generic-soup-cookie-jar.c 2005-01-17 17:46:53.000000000 +0100 ++++ libtranslate-0.99-1/src/modules/translate-generic-soup-cookie-jar.c 2010-02-14 03:55:56.000000000 +0100 +@@ -29,9 +29,12 @@ + * POSSIBILITY OF SUCH DAMAGE. + */ + ++#include "config.h" + #include <string.h> + #include <libsoup/soup.h> ++#ifdef HAVE_LIBSOUP22 + #include <libsoup/soup-message-filter.h> ++#endif + #include "translate-generic-soup-cookie-jar.h" + + struct _TranslateGenericSoupCookieJarPrivate +@@ -44,9 +47,12 @@ + static void translate_generic_soup_cookie_jar_register_type (GType *type); + static void translate_generic_soup_cookie_jar_class_init (TranslateGenericSoupCookieJarClass *class); + static void translate_generic_soup_cookie_jar_init (TranslateGenericSoupCookieJar *jar); ++#ifdef HAVE_LIBSOUP22 + static void translate_generic_soup_cookie_jar_filter_init (SoupMessageFilterClass *iface); ++#else ++#define SoupMessageFilter TranslateGenericSoupCookieJar ++#endif + static void translate_generic_soup_cookie_jar_finalize (GObject *object); +- + static void translate_generic_soup_cookie_jar_setup_message (SoupMessageFilter *filter, + SoupMessage *message); + +@@ -75,17 +81,21 @@ + 0, + (GInstanceInitFunc) translate_generic_soup_cookie_jar_init + }; ++#ifdef HAVE_LIBSOUP22 + static const GInterfaceInfo filter_info = { + (GInterfaceInitFunc) translate_generic_soup_cookie_jar_filter_init, + NULL, + NULL + }; ++#endif + + *type = g_type_register_static(G_TYPE_OBJECT, + "TranslateGenericSoupCookieJar", + &info, + 0); ++#ifdef HAVE_LIBSOUP22 + g_type_add_interface_static(*type, SOUP_TYPE_MESSAGE_FILTER, &filter_info); ++#endif + } + + static void +@@ -107,11 +117,13 @@ + TranslateGenericSoupCookieJarPrivate); + } + ++#ifdef HAVE_LIBSOUP22 + static void + translate_generic_soup_cookie_jar_filter_init (SoupMessageFilterClass *iface) + { + iface->setup_message = translate_generic_soup_cookie_jar_setup_message; + } ++#endif + + static void + translate_generic_soup_cookie_jar_finalize (GObject *object) +@@ -125,26 +137,46 @@ + } + + static void ++add_cookie_to_jar (TranslateGenericSoupCookieJar *jar, const char *cookie) ++{ ++ char *s; ++ ++ s = strchr(cookie, ';'); ++ if (s) ++ jar->priv->cookies = g_slist_append(jar->priv->cookies, g_strndup(cookie, s - cookie)); ++} ++ ++#ifdef HAVE_LIBSOUP24 ++static void ++maybe_add_cookie_to_jar (const char *header, const char *value, gpointer jar) ++{ ++ if (!g_ascii_strcasecmp (header, "Set-Cookie")) ++ add_cookie_to_jar (jar, value); ++} ++#endif ++ ++static void + translate_generic_soup_cookie_jar_setup_message (SoupMessageFilter *filter, +- SoupMessage *message) ++ SoupMessage *message) + { + TranslateGenericSoupCookieJar *jar = TRANSLATE_GENERIC_SOUP_COOKIE_JAR(filter); +- const GSList *cookies; + const GSList *l; + + /* FIXME: add full RFC 2965 support */ + ++#ifdef HAVE_LIBSOUP22 ++ const GSList *cookies; ++ + cookies = soup_message_get_header_list(message->response_headers, "Set-Cookie"); + for (l = cookies; l != NULL; l = l->next) + { + const char *cookie = l->data; +- char *s; +- +- s = strchr(cookie, ';'); +- if (s) +- jar->priv->cookies = g_slist_append(jar->priv->cookies, g_strndup(cookie, s - cookie)); ++ add_cookie_to_jar(jar, cookie); + } +- ++#else ++ soup_message_headers_foreach(message->response_headers, maybe_add_cookie_to_jar, jar); ++#endif ++ + if (jar->priv->cookies) + { + GString *string; +@@ -159,13 +191,44 @@ + g_string_append(string, "; "); + } + ++#ifdef HAVE_LIBSOUP22 + soup_message_add_header(message->request_headers, "Cookie", string->str); ++#else ++ soup_message_headers_append(message->request_headers, "Cookie", string->str); ++#endif + g_string_free(string, TRUE); + } + } + ++#ifdef HAVE_LIBSOUP24 ++static void ++translate_generic_soup_cookie_jar_request_started (SoupSession *session, ++ SoupMessage *message, ++ SoupSocket *socket, ++ gpointer cookie_jar) ++{ ++ translate_generic_soup_cookie_jar_setup_message (cookie_jar, message); ++} ++#endif ++ + TranslateGenericSoupCookieJar * + translate_generic_soup_cookie_jar_new (void) + { + return g_object_new(TRANSLATE_GENERIC_TYPE_SOUP_COOKIE_JAR, NULL); + } ++ ++void ++translate_generic_soup_cookie_jar_attach (TranslateGenericSoupCookieJar *cookie_jar, ++ SoupSession *session) ++{ ++#ifdef HAVE_LIBSOUP22 ++ soup_session_add_filter (session, SOUP_MESSAGE_FILTER(cookie_jar)); ++#else ++ g_signal_connect (session, "request_started", ++ G_CALLBACK (translate_generic_soup_cookie_jar_request_started), ++ cookie_jar); ++ g_object_set_data_full (G_OBJECT (session), "TranslateGenericSoupCookieJar", ++ g_object_ref (cookie_jar), g_object_unref); ++#endif ++} ++ +diff -dPNur libtranslate-0.99/src/modules/translate-generic-soup-cookie-jar.h libtranslate-0.99-1/src/modules/translate-generic-soup-cookie-jar.h +--- libtranslate-0.99/src/modules/translate-generic-soup-cookie-jar.h 2005-01-17 17:47:00.000000000 +0100 ++++ libtranslate-0.99-1/src/modules/translate-generic-soup-cookie-jar.h 2010-02-14 03:55:56.000000000 +0100 +@@ -33,6 +33,7 @@ + #define _TRANSLATE_GENERIC_SOUP_COOKIE_JAR_H + + #include <glib-object.h> ++#include <libsoup/soup-session.h> + + #define TRANSLATE_GENERIC_TYPE_SOUP_COOKIE_JAR (translate_generic_soup_cookie_jar_get_type()) + #define TRANSLATE_GENERIC_SOUP_COOKIE_JAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), TRANSLATE_GENERIC_TYPE_SOUP_COOKIE_JAR, TranslateGenericSoupCookieJar)) +@@ -59,5 +60,6 @@ + + GType translate_generic_soup_cookie_jar_get_type (void); + TranslateGenericSoupCookieJar *translate_generic_soup_cookie_jar_new (void); ++void translate_generic_soup_cookie_jar_attach (TranslateGenericSoupCookieJar *cookie_jar, SoupSession *session); + + #endif /* _TRANSLATE_GENERIC_SOUP_COOKIE_JAR_H */ diff --git a/app-dicts/libtranslate/files/services.xml b/app-dicts/libtranslate/files/services.xml new file mode 100644 index 0000000..14d0548 --- /dev/null +++ b/app-dicts/libtranslate/files/services.xml @@ -0,0 +1,258 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE services SYSTEM "services.dtd"> +<services> + <custom-language tag="zh-TW" name="Chinese (Taiwan)"/> + + <service nick="Google" name="google"> + <group> + <language to="*" tag="en"/> + <language to="en,de" tag="fr"/> + <language to="en,fr" tag="de"/> + <language to="en" tag="it"/> + <language to="en" tag="pt"/> + <language to="en" tag="es"/> + <language to="en" tag="pt"/> + <language to="en" tag="ru"/> + <language to="en" tag="zh"/> + <language to="en" tag="zh-TW"/> + <language to="en" tag="ja"/> + <language to="en" tag="ko"/> + <language to="en" tag="ar"/> + <text-translation url="http://www.google.com/translate_t?text=${text:escape}&langpair=${from}|${to}&ie=utf8&oe=utf8"> + <pre-marker text="id=result_box"/> + <pre-marker text="mouseover"/> + <pre-marker text=">"/> + <post-marker text="<br>"/> + </text-translation> + <web-page-translation url="http://www.google.com/translate_c?u=${url:escape}&langpair=${from}|${to}"/> + </group> + </service> + + <service nick="FreeTranslation" name="freetranslation" max-chunk-len="600"> + <group> + <language to="en" tag="nl" service-tag="dutch"/> + <language to="*" tag="en" service-tag="english"/> + <language to="en" tag="fr" service-tag="french"/> + <language to="en" tag="de" service-tag="german"/> + <language to="en" tag="it" service-tag="italian"/> + <language tag="no" service-tag="norwegian"/> + <language to="en" tag="pt" service-tag="portuguese"/> + <language to="en" tag="es" service-tag="spanish"/> + <text-translation url="http://ets.freetranslation.com/?sequence=core&srctext=${text:escape}&language=${from}/${to}&charset=utf-8"/> + <web-page-translation url="http://fets5.freetranslation.com/?sequence=core&url=${url:escape}&language=${from}/${to}"/> + </group> + <group> + <language tag="zh" service-tag="simplifiedchinese"/> + <language tag="zh-TW" service-tag="traditionalchinese"/> + <language to="*" tag="en" service-tag="english"/> + <language to="en" tag="ru" service-tag="russian"/> + <text-translation url="http://ets6.freetranslation.com/?sequence=core&srctext=${text:escape}&language=${from}/${to}&charset=utf-8"/> + </group> + <group> + <language to="*" tag="en" service-tag="english"/> + <language to="en" tag="ja" service-tag="japanese"/> + <text-translation url="http://tets9.freetranslation.com/?sequence=core&srctext=${text:escape}&language=${from}/${to}&charset=utf-8"/> + </group> + </service> + + <service nick="Pereklad" name="pereklad"> + <group> + <language to="*" tag="ru" service-tag="Rus"/> + <language to="*" tag="uk" service-tag="Ukr"/> + <text-translation + url="http://pereklad.online.ua/" + post="TranFrom=${from}&TranTo=${to}&SrcTxt=${text:escape}"> + <pre-marker text="id="DstTxt""/> + <pre-marker text=">"/> + <post-marker text="</textarea>"/> + </text-translation> + </group> + <group> + <language to="*" tag="en" service-tag="Eng"/> + <language to="*" tag="de" service-tag="Ger"/> + <language to="*" tag="fr" service-tag="Fra"/> + <text-translation + url="http://pereklad.online.ua/" + post="TranFrom=${from}&TranTo=${to}&SrcTxt=${text:escape}" + response-charset="ISO-8859-1"> + <pre-marker text="id="DstTxt""/> + <pre-marker text=">"/> + <post-marker text="</textarea>"/> + </text-translation> + </group> + <group> + <language to="en,de,fr" tag="ru" service-tag="Rus"/> + <language to="en,de,fr" tag="uk" service-tag="Ukr"/> + <language to="" tag="en" service-tag="Eng"/> + <language to="" tag="de" service-tag="Ger"/> + <language to="" tag="fr" service-tag="Fra"/> + <text-translation + url="http://pereklad.online.ua/" + post="TranFrom=${from}&TranTo=${to}&SrcTxt=${text:escape}" + response-charset="ISO-8859-1"> + <pre-marker text="id="DstTxt""/> + <pre-marker text=">"/> + <post-marker text="</textarea>"/> + </text-translation> + </group> + <group> + <language to="" tag="ru" service-tag="Rus"/> + <language to="" tag="uk" service-tag="Ukr"/> + <language to="ru,uk" tag="en" service-tag="Eng"/> + <language to="ru,uk" tag="de" service-tag="Ger"/> + <language to="ru,uk" tag="fr" service-tag="Fra"/> + <text-translation + url="http://pereklad.online.ua/" + post="TranFrom=${from}&TranTo=${to}&SrcTxt=${text:escape}"> + <pre-marker text="id="DstTxt""/> + <pre-marker text=">"/> + <post-marker text="</textarea>"/> + </text-translation> + </group> + <group> + <language to="" tag="ru" service-tag="Rus"/> + <language to="" tag="uk" service-tag="Ukr"/> + <language to="ru,uk" tag="lv" service-tag="Lat"/> + <text-translation + url="http://pereklad.online.ua/" + post="TranFrom=${from}&TranTo=${to}&SrcTxt=${text:escape}"> + <pre-marker text="id="DstTxt""/> + <pre-marker text=">"/> + <post-marker text="</textarea>"/> + </text-translation> + </group> + <group> + <language to="*" tag="lv" service-tag="Lat"/> + <language to="" tag="en" service-tag="Eng"/> + <language to="" tag="de" service-tag="Ger"/> + <language to="" tag="fr" service-tag="Fra"/> + <text-translation + url="http://pereklad.online.ua/" + post="TranFrom=${from}&TranTo=${to}&SrcTxt=${text:escape}" + response-charset="ISO-8859-1"> + <pre-marker text="id="DstTxt""/> + <pre-marker text=">"/> + <post-marker text="</textarea>"/> + </text-translation> + </group> + <group> + <language to="" tag="lv" service-tag="Lat"/> + <language to="lv" tag="ru" service-tag="Rus"/> + <language to="lv" tag="uk" service-tag="Ukr"/> + <text-translation + url="http://pereklad.online.ua/" + post="TranFrom=${from}&TranTo=${to}&SrcTxt=${text:escape}" + response-charset="ISO-8859-4"> + <pre-marker text="id="DstTxt""/> + <pre-marker text=">"/> + <post-marker text="</textarea>"/> + </text-translation> + </group> + <group> + <language to="" tag="lv" service-tag="Lat"/> + <language to="lv" tag="en" service-tag="Eng"/> + <language to="lv" tag="de" service-tag="Ger"/> + <language to="lv" tag="fr" service-tag="Fra"/> + <text-translation + url="http://pereklad.online.ua/" + post="TranFrom=${from}&TranTo=${to}&SrcTxt=${text:escape}" + response-charset="ISO-8859-4"> + <pre-marker text="id="DstTxt""/> + <pre-marker text=">"/> + <post-marker text="</textarea>"/> + </text-translation> + </group> + </service> + + <service nick="Promt" name="promt"> + <group> + <language to="*" tag="ru" service-tag="r"/> + <language to="ru,de,fr,es" tag="en" service-tag="e"/> + <language to="ru,en,fr,es" tag="de" service-tag="g"/> + <language to="ru,en,de,es" tag="fr" service-tag="f"/> + <language to="ru,en" tag="it" service-tag="i"/> + <language to="ru,en,de,fr" tag="es" service-tag="s"/> + <language to="en" tag="pt" service-tag="p"/> + <text-translation + url="http://www.translate.ru/Default.aspx/Text" + post="__EVENTTARGET=&__EVENTTARGUMENT=&ctl00$SiteContent$MA_trasnlform$bTranslate=Translate&ctl00$SiteContent$MA_trasnlform$DropDownList2=&ctl00$SiteContent$trasnlform$sLang=${from}&ctl00$SiteContent$MA_trasnlform$rLang=${to}&ctl00$SiteContent$MA_trasnlform$sourceText=${text:escape}&ctl00$SiteContent$MA_trasnlform$rblTemplates=General"> + <pre-marker text="ctl00$SiteContent$MA_trasnlform$tbPismo"/> + <pre-marker text=">"/> + <post-marker text="</textarea"/> + + </text-translation> + </group> + </service> + + <service nick="SYSTRAN" name="systran"> + <group> + <language to="en" tag="ar"/> + <language to="en" tag="zh"/> + <language to="en" tag="zh-TW" service-tag="zt"/> + <language to="en,fr" tag="nl"/> + <language to="*" tag="en"/> + <language to="nl,en,de,it,pt,es" tag="fr"/> + <language to="en,fr" tag="de"/> + <language to="en,fr" tag="it"/> + <language to="en" tag="ja"/> + <language to="en" tag="ko"/> + <language to="en,fr" tag="pt"/> + <language to="en" tag="ru"/> + <language to="en,fr" tag="es"/> + <language to="en" tag="sv"/> + <http-header value="http://www.systransoft.com/" name="Referer"/> + <text-translation + url="http://www.systranet.com/tt?lp=${from}_${to}&service=translate" + post=". ${text}."> + <pre-marker text=". "/> + <post-marker text="."/> + </text-translation> + </group> + </service> + + <service nick="Babel Fish" name="babelfish"> + <group> + <language to="en" tag="zh"/> + <language to="en" tag="zh-TW" service-tag="zt"/> + <language to="*" tag="en"/> + <language to="en,fr" tag="nl"/> + <language to="en,de,el,it,pt,nl,es" tag="fr"/> + <language to="en,fr" tag="de"/> + <language to="en,fr" tag="el"/> + <language to="en,fr" tag="it"/> + <language to="en" tag="ja"/> + <language to="en" tag="ko"/> + <language to="en,fr" tag="pt"/> + <language to="en" tag="ru"/> + <language to="en,fr" tag="es"/> + <text-translation + url="http://babelfish.yahoo.com/translate_txt" + post="trtext=${text:escape}&lp=${from}_${to}&ei=UTF-8"> + <pre-marker text="id="result""/> + <pre-marker text="<div"/> + <pre-marker text=">"/> + <post-marker text="</div"/> + </text-translation> +<!-- + <web-page-translation url="http://babelfish.altavista.com/babelfish/trurl_load?url=${url:escape}&lp=${from}_${to}&enc=utf8"/> +!--> + </group> + </service> + +<!-- + <service nick="Kataku" name="kataku"> + <group> + <language to="*" tag="en"/> + <language to="*" tag="id" service-tag="in"/> + <text-translation url="http://www.toggletext.com/kataku_trial.php" post="input_text=${text:charset=ISO8859-1,escape}&langset_text=${from}_${to}"> + <pre-marker text="Translation:"/> + <pre-marker text="<pre"/> + <pre-marker text=">"/> + <post-marker text=" </pre>"/> + </text-translation> + <web-page-translation url="http://www.toggletext.com/kataku_webpage_translate.php?input=${url:escape}&langset=${from}_${to}"/> + </group> + </service> +--> + +</services>
\ No newline at end of file |