diff options
Diffstat (limited to 'includes/classes/Babelfish.php')
| -rwxr-xr-x | includes/classes/Babelfish.php | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/includes/classes/Babelfish.php b/includes/classes/Babelfish.php new file mode 100755 index 0000000..8029db5 --- /dev/null +++ b/includes/classes/Babelfish.php @@ -0,0 +1,177 @@ +<?php +/** + * @package languages + * @version $Header$ + * + * Tiki is copyright (c) 2002-2003, Luis Argerich, Garland Foster, Eduardo Polidor, et. al. + * All Rights Reserved. See below for details and a complete list of authors. + * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See http://www.gnu.org/copyleft/lesser.html for details. + * + * This file copyright (c) 2002-2003, Ross Smith II + */ + +/** + * @package languages + */ +class Babelfish { + /** + * Return the host name of the server + * + * @todo move to BitBase class + */ + function host() { + if (isset($_SERVER['HTTP_HOST'])) { + // HTTP_HOST already includes a ':port' if it is used + return $_SERVER['HTTP_HOST']; + } + + if (!isset($_SERVER['SERVER_NAME'])) { + return false; + } + + $rv = $_SERVER['SERVER_NAME']; + + if (!isset($_SERVER['SERVER_PORT'])) { + return $rv; + } + + if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on')) { + if ($_SERVER['SERVER_PORT'] != 443) { + $rv .= ':' . $_SERVER['SERVER_PORT']; + } + } else { + if ($_SERVER['SERVER_PORT'] != 80) { + $rv .= ':' . $_SERVER['SERVER_PORT']; + } + } + + return $rv; + } + + /** + * Return babelfish URL to translate \c $lang_from to \c $lang_to + * + * @param lang_from + * @param lang_to + */ + function url($lang_from, $lang_to) { + static $url_map = array( + 'en' => 'english', + 'fr' => 'french', + 'de' => 'german', + 'it' => 'italian', + 'es' => 'spanish', + 'pt' => 'portugese', + ); + + $lang_from = strtolower($lang_from); + $lang_to = strtolower($lang_to); + + if (!isset($url_map[$lang_from])) { + return ''; + } + + $url = 'http://jump.altavista.com/translate_' . $url_map[$lang_from] . '.go' . + '?http://babelfish.altavista.com/babelfish/tr?doit=done' . + '&lp=' . $lang_from . '_' . $lang_to . + '&urltext=http'; + if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { + $url .= 's'; + } + $url .= '://' . Babelfish::host() . $_SERVER['REQUEST_URI'] . + (strpos('?', $_SERVER['REQUEST_URI']) ? '&' : '?') . + 'babelfish=' . $lang_from . '_' . $lang_to; + + return $url; + } + + /** + * Return HTML of babelfish links + * + * @param lang_from Language to translate from + */ + function links($lang_from = 'en') { + static $fishes = array( + 'en' => array( # English + 'de' => 'Übersetzen Sie diese Seite ins Deutsche', + 'es' => 'Traduzca esta paginación a español', + 'fr' => 'Traduisez cette page en français', + 'it' => 'Tradurre questa pagina in italiano', + 'pt' => 'Traduza esta página em portuguêses', + 'zh' => '翻译这页成汉语 (CN)', + 'ja' => '日本語にこのページを翻訳しなさい (Nihongo)', + 'ko' => '한국인으로 이 페이지를 번역하십시요 (Hangul)', + ), + 'fr' => array( # French + 'de' => 'Übersetzen Sie diese Seite in Deutschen', + 'en' => 'Translate this page into English', + ), + 'de' => array( # German + 'en' => 'Translate this page into English', + 'fr' => 'Traduisez cette page en français', + ), + 'it' => array( # Italian + 'en' => 'Translate this page into English', + ), + 'es' => array( # Spanish + 'en' => 'Translate this page into English', + ), + 'pt' => array( # Portugese + 'en' => 'Translate this page into English', + ), + 'ru' => array( # Russian + 'en' => 'Translate this page into English', + ), + ); + + // \todo Use phpsniff or PEAR's Net_UserAgent_Detect to detect the browser type + // as Netscape 4.x and possibly others displays 'ꯍ' literally +// if (preg_match('/(mozilla\/4)/i', $_SERVER['HTTP_USER_AGENT'])) { +// $fishes['en']['zh'] = 'Translate this page into Chinese (CN)'; +// $fishes['en']['ja'] = 'Translate this page into Japenese (Nihongo)'; +// $fishes['en']['ko'] = 'Translate this page into Korean (Hangul)'; +// } + + // If we have already translated this page (babelfish=en_fr), then don't display the strings again + if (!isset($fishes[$lang_from]) || isset($_GET['babelfish'])) { + return []; + } + + $a = []; + foreach ($fishes[$lang_from] as $lang_to => $msg) { + $a[] = array('target' => $lang_to, + 'href' => Babelfish::url($lang_from, $lang_to), + 'msg' => $msg); + } + + return $a; + } + + /** + * Return javascript code to display babelfish logo + * + * \static + */ + function logo($lang = 'en') { + static $s = "<script language=\"JavaScript1.2\" src=\"http://www.altavista.com/r?%str\"></script>"; + + $lang = strtolower($lang); + + switch ($lang) { + case 'en': + case 'de': + case 'fr': + case 'it': + return sprintf($s, $lang); + case 'es': + return sprintf($s, 'esp'); + case 'pt': + return sprintf($s, 'port'); + } + + return ''; + } + +} + +?> |
