<?php
+
/**
* SquirrelMail translate plugin functions
*
- * Copyright (c) 2004 The SquirrelMail Project Team
- * Licensed under the GNU GPL. For full terms see the file COPYING.
- *
+ * @copyright 2004-2009 The SquirrelMail Project Team
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package plugins
* @subpackage translate
*/
/**
- * Define for wrecked souls accessing functions script directly
- * @ignore
+ * do not allow to call this file directly
*/
-if (!defined('SM_PATH')) {
- define('SM_PATH','../../');
+if (isset($_SERVER['SCRIPT_FILENAME']) && $_SERVER['SCRIPT_FILENAME'] == __FILE__) {
+ header("Location: ../../src/login.php");
+ die();
}
-
/** Load default config */
if (file_exists(SM_PATH . 'plugins/translate/config_default.php')) {
include_once(SM_PATH . 'plugins/translate/config_default.php');
$translate_server_option='translate_' . $translate_server . '_enabled';
if ($translate_server=='gpltrans' && $translate_gpltrans_url=='' ||
! $$translate_server_option || ! function_exists('translate_form_' . $translate_server)) {
- error_box(_("Selected translation engine is disabled. Please update your translation preferences."),$color);
+ error_box(_("Selected translation engine is disabled. Please update your translation preferences."));
return;
}
$translate_dir = 'to';
$trans_ar = $message->findDisplayEntity(array(), array('text/plain'));
$body = '';
- if ($trans_ar[0] != '') {
+ $final_body = '';
+ if ( !empty($trans_ar[0]) ) {
for ($i = 0; $i < count($trans_ar); $i++) {
- $body .= formatBody($imapConnection, $message, $color, $wrap_at, $trans_ar[$i], $passed_id, $mailbox);
+ /* reduced version of formatBody and translateText functions */
+
+ // get message entity information
+ $body_message = getEntity($message, $trans_ar[$i]);
+ // get message body
+ $body = mime_fetch_body ($imapConnection, $passed_id, $trans_ar[$i]);
+ // convert encoded messages
+ $body = decodeBody($body, $body_message->header->encoding);
+
+ /*
+ * if message part is html formated - convert spaces, html line feeds,
+ * less than and greater than html entities and remove tags
+ */
+ if ($body_message->header->type1 == 'html') {
+ $entity_conv = array(' ' => ' ',
+ '<p>' => "\n",
+ '<P>' => "\n",
+ '<br>' => "\n",
+ '<BR>' => "\n",
+ '<br />' => "\n",
+ '<BR />' => "\n",
+ '>' => '>',
+ '<' => '<');
+ $body = strtr($body, $entity_conv);
+ $body = strip_tags($body);
+ }
+ // remove whitespace
+ $body = trim($body);
+ // save processed text and parse other entity
+ $final_body.= charset_decode($body_message->header->getParameter('charset'),$body);
}
- $hookResults = do_hook('message_body', $body);
- $body = $hookResults[1];
- } else {
- $body = 'Message can\'t be translated';
- }
- $new_body = $body;
- $pos = strpos($new_body,
- '">'. _("Download this as a file") . '</a></center><br /></small>');
- if (is_int($pos)) {
- $new_body = substr($new_body, 0, $pos);
+ // add form if message is not empty
+ if (!empty($final_body)) {
+ $function = 'translate_form_' . $translate_server;
+ $function($final_body);
+ }
}
-
- $trans = get_html_translation_table(HTML_ENTITIES);
- $trans[' '] = ' ';
- $trans = array_flip($trans);
- $new_body = strtr($new_body, $trans);
-
- $new_body = urldecode($new_body);
- $new_body = strip_tags($new_body);
-
- /* I really don't like this next part ... */
- $new_body = str_replace('"', "''", $new_body);
- $new_body = strtr($new_body, "\n", ' ');
-
- $function = 'translate_form_' . $translate_server;
- $function($new_body);
}
/**
'http://www.dictionary.com/translate' );
if ($translate_google_enabled) translate_showtrad_internal( 'Google Translate',
_("No known limits, powered by Systran").
- '<br />'.sprintf(_("Number of supported language pairs: %s"),'12').' ' ,
+ '<br />'.sprintf(_("Number of supported language pairs: %s"),'20').' ' ,
'http://www.google.com/translate' );
if ($translate_gpltrans_enabled && $translate_gpltrans_url!='') translate_showtrad_internal( 'GPLTrans',
_("No known limits, powered by GPLTrans (free, open source)").
* Starts translation box
*
* @param string $action url that has to recieve message for translation
+ * @param string $charset (since sm 1.5.1) character set, that should be used
+ * to submit 8bit information.
* @access private
*/
-function translate_new_form($action) {
+function translate_new_form($action,$charset=null) {
global $translate_dir, $translate_location;
global $color, $translate_same_window;
echo ' target="_blank"';
}
+ if (! is_null($charset))
+ echo ' accept-charset="'.htmlspecialchars($charset).'"';
+
echo ">\n";
?><table align="<?php echo $translate_location; ?>" cellpadding="3" cellspacing="0" border="0" bgcolor="<?php echo $color[10]; ?>">
* @access private
*/
function translate_form_babelfish($message) {
- translate_new_form('http://babelfish.altavista.com/babelfish/tr');
+ translate_new_form('http://babelfish.altavista.com/babelfish/tr','utf-8');
?>
<input type="hidden" name="doit" value="done" />
<input type="hidden" name="intl" value="1" />
* @access private
*/
function translate_form_intertran($message) {
- translate_new_form('http://www.tranexp.com:2000/InterTran');
+ translate_new_form('http://intertran.tranexp.com/Translate/result.shtml');
echo '<input type="hidden" name="topframe" value="yes" />'.
'<input type="hidden" name="type" value="text" />'.
'<input type="hidden" name="keyb" value="non" />'.
* @access private
*/
function translate_form_gpltrans($message) {
- translate_new_form('http://www.translator.cx/cgi-bin/gplTrans');
+ global $translate_gpltrans_url;
+
+ // make sure that it is not empty
+ if ($translate_gpltrans_url=='')
+ $translate_gpltrans_url='http://www.translator.cx/cgi-bin/gplTrans';
+
+ translate_new_form($translate_gpltrans_url);
echo '<select name="language">'.
translate_lang_opt('', 'nl_NL', 'dutch_dict', _("Dutch")).
translate_lang_opt('', 'fr_FR', 'french_dict', _("French")).
* @access private
*/
function translate_form_otenet($message) {
- translate_new_form('http://systran.otenet.gr/cgi-bin/systran.cgi');
+ translate_new_form('http://trans.otenet.gr/systran/box','windows-1253');
?>
<input type="hidden" name="doit" value="done" />
<input type="hidden" name="partner" value="OTEnet-en" />
* @access private
*/
function translate_form_promt($message) {
- translate_new_form('http://www.online-translator.com/text.asp#tr_form');
+ translate_new_form('http://www.online-translator.com/text.asp#tr_form','windows-1251');
echo '<input type="hidden" name="status" value="translate" />';
echo '<input type="hidden" name="source" value="'.$message.'" />';
echo _("Interface language")." : ";
* @access private
*/
function translate_form_google($message) {
- translate_new_form('http://www.google.com/translate_t');
- echo '<input type="hidden" name="ie" value="Unknown" />' .
- '<input type="hidden" name="oe" value="ASCII" />' .
- '<input type="hidden" name="hl" value="en" />' .
- '<input type="hidden" name="text" value="' . $message . '" />';
+ translate_new_form('http://www.google.com/translate_t','utf-8');
+ echo '<input type="hidden" name="text" value="' . $message . '" />';
echo '<select name="langpair">'.
translate_lang_opt('en_US', 'de_DE', 'en|de',
sprintf( _("%s to %s"),_("English"),_("German"))) .
sprintf( _("%s to %s"),_("English"),_("Italian"))) .
translate_lang_opt('en_US', 'pt*', 'en|pt',
sprintf( _("%s to %s"),_("English"),_("Portuguese"))) .
+ translate_lang_opt('en_US', 'ar', 'en|ar',
+ sprintf( _("%s to %s"),_("English"),_("Arabic"))) .
+ translate_lang_opt('en_US', 'ja_JP', 'en|ja',
+ sprintf( _("%s to %s"),_("English"),_("Japanese"))) .
+ translate_lang_opt('en_US', 'ko_KR', 'en|ko',
+ sprintf( _("%s to %s"),_("English"),_("Korean"))) .
+ translate_lang_opt('en_US', 'zh_CN', 'en|zh-CN',
+ sprintf( _("%s to %s"),_("English"),_("Chinese, Simplified"))) .
translate_lang_opt('de_DE', 'en_US', 'de|en',
sprintf( _("%s to %s"),_("German"),_("English"))) .
translate_lang_opt('de_DE', '', 'de|fr',
translate_lang_opt('it_IT', '', 'it|en',
sprintf( _("%s to %s"),_("Italian"),_("English"))) .
translate_lang_opt('pt*', '', 'pt|en',
- sprintf( _("%s to %s"),_("Portuguese"),_("English")));
+ sprintf( _("%s to %s"),_("Portuguese"),_("English"))).
+ translate_lang_opt('ar', '', 'ar|en',
+ sprintf( _("%s to %s"),_("Arabic"),_("English"))).
+ translate_lang_opt('ja_JP', '', 'ja|en',
+ sprintf( _("%s to %s"),_("Japanese"),_("English"))).
+ translate_lang_opt('ko_KR', '', 'ko|en',
+ sprintf( _("%s to %s"),_("Korean"),_("English"))).
+ translate_lang_opt('zh_CN', '', 'zh-CN|en',
+ sprintf( _("%s to %s"),_("Chinese, Simplified"),_("English")));
echo '</select>'.
- 'Google: <input type="submit" value="' . _("Translate") . '" />';
+ '<input type="hidden" name="hl" value="en" />' .
+ '<input type="hidden" name="ie" value="UTF8" />' .
+ '<input type="hidden" name="oe" value="UTF8" />' .
+ 'Google: <input type="submit" value="' . _("Translate") . '" />';
translate_table_end();
}
-?>
\ No newline at end of file