GoogleTranslate 0.0.4 → 0.0.5
raw patch · 2 files changed
+103/−111 lines, 2 filesdep −containersPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies removed: containers
API changes (from Hackage documentation)
- Language.Translate.Google: languageMap :: Map Language String
Files
- GoogleTranslate.cabal +3/−2
- Language/Translate/Google.hs +100/−109
GoogleTranslate.cabal view
@@ -1,5 +1,5 @@ name: GoogleTranslate-version: 0.0.4+version: 0.0.5 Cabal-Version: >= 1.6 license: GPL-3 license-file: LICENSE@@ -18,4 +18,5 @@ Exposed-Modules: Language.Translate.Google Build-depends: base >= 4 && < 5, AttoJson >= 0.5.3, download-curl >= 0.1.2, - containers >= 0.3.0.0, bytestring, dataenc+ bytestring, dataenc+ ghc-options: -Wall
Language/Translate/Google.hs view
@@ -19,17 +19,14 @@ {-# LANGUAGE OverloadedStrings #-} module Language.Translate.Google ( Language (..),- translate,- languageMap+ translate ) where -import Data.Map (Map) import Network.Curl.Download import Text.JSON.AttoJSON import qualified Codec.Binary.Url as C import qualified Data.ByteString as B-import qualified Data.Map as M data Language = Afrikaans@@ -123,132 +120,126 @@ | Unknown deriving (Show, Eq, Ord, Read) -languageMap :: Map Language String-languageMap = - M.fromList- [(Afrikaans, "af")- ,(Albanian, "sq")- ,(Amharic, "am")- ,(Arabic, "ar")- ,(Armenian, "hy")- ,(Azerbaijani, "az")- ,(Basque, "eu")- ,(Belarusian, "be")- ,(Bengali, "bn")- ,(Bihari, "bh")- ,(Bulgarian, "bg")- ,(Burmese, "my")- ,(Catalan, "ca")- ,(Cherokee, "chr")- ,(Chinese, "zh")- ,(ChineseSimplified, "zh-CN")- ,(ChineseTraditional, "zh-TW")- ,(Croatian, "hr")- ,(Czech, "cs")- ,(Danish, "da")- ,(Dhivehi, "dv")- ,(Dutch, "nl")- ,(English, "en")- ,(Esperanto, "eo")- ,(Estonian, "et")- ,(Filipino, "tl")- ,(Finnish, "fi")- ,(French, "fr")- ,(Galician, "gl")- ,(Georgian, "ka")- ,(German, "de")- ,(Greek, "el")- ,(Guarani, "gn")- ,(Gujarati, "gu")- ,(Hebrew, "iw")- ,(Hindi, "hi")- ,(Hungarian, "hu")- ,(Icelandic, "is")- ,(Indonesian, "id")- ,(Inuktitut, "iu")- ,(Italian, "it")- ,(Japanese, "ja")- ,(Kannada, "kn")- ,(Kazakh, "kk")- ,(Khmer, "km")- ,(Korean, "ko")- ,(Kurdish, "ku")- ,(Kyrgyz, "ky")- ,(Laothian, "lo")- ,(Latvian, "lv")- ,(Lithuanian, "lt")- ,(Macedonian, "mk")- ,(Malay, "ms")- ,(Malayalam, "ml")- ,(Maltese, "mt")- ,(Marathi, "mr")- ,(Mongolian, "mn")- ,(Nepali, "ne")- ,(Norwegian, "no")- ,(Oriya, "or")- ,(Pashto, "ps")- ,(Persian, "fa")- ,(Polish, "pl")- ,(Portuguese, "pt-PT")- ,(Punjabi, "pa")- ,(Romanian, "ro")- ,(Russian, "ru")- ,(Sanskrit, "sa")- ,(Serbian, "sr")- ,(Sindhi, "sd")- ,(Sinhalese, "si")- ,(Slovak, "sk")- ,(Slovenian, "sl")- ,(Spanish, "es")- ,(Swahili, "sw")- ,(Swedish, "sv")- ,(Tajik, "tg")- ,(Tamil, "ta")- ,(Tagalog, "tl")- ,(Telugu, "te")- ,(Thai, "th")- ,(Tibetan, "bo")- ,(Turkish, "tr")- ,(Ukrainian, "uk")- ,(Urdu, "ur")- ,(Uzbek, "uz")- ,(Uighur, "ug")- ,(Vietnamese, "vi")- ,(Unknown, "")]- -- | Get translation from Google Translate. translate :: B.ByteString -- ^ the byte string need to translate -> Maybe Language -- ^ source language, or 'Nothing' use automatic language detect -> Language -- ^ destination language -> IO (Either String B.ByteString) translate text srcLang destLang = do- let getLangStr :: Language -> String- getLangStr lang - | M.null newMap- = error $ "Miss match language : " ++ show lang- | otherwise - = snd $ M.findMin newMap- where newMap = M.filterWithKey (\ l _ -> l == lang) languageMap -- Build url. let url = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0" -- Request text. ++ ("&q=" ++ C.encode (B.unpack text)) -- Source language and destination language. ++ ("&langpair=" - ++ (maybe "" getLangStr srcLang+ ++ (maybe "" getLanguageCode srcLang ++ "|" - ++ getLangStr destLang))+ ++ getLanguageCode destLang)) -- Request JSON data. string <- openURI url return $ case string of- Left error -> Left error+ Left err -> Left err Right jsonString -> case parseJSON jsonString of- Left error -> Left error+ Left err -> Left err Right jsvalue -> - case getFields ["responseData", "translatedText"] jsvalue of+ case lookupDeep ["responseData", "translatedText"] jsvalue of Just (JSString str) -> Right str _ -> Left "translate : parse failed."++-- | Get language code.+getLanguageCode :: Language -> String+getLanguageCode lang = + case lang of+ Afrikaans -> "af"+ Albanian -> "sq"+ Amharic -> "am"+ Arabic -> "ar"+ Armenian -> "hy"+ Azerbaijani -> "az"+ Basque -> "eu"+ Belarusian -> "be"+ Bengali -> "bn"+ Bihari -> "bh"+ Bulgarian -> "bg"+ Burmese -> "my"+ Catalan -> "ca"+ Cherokee -> "chr"+ Chinese -> "zh"+ ChineseSimplified -> "zh-CN"+ ChineseTraditional -> "zh-TW"+ Croatian -> "hr"+ Czech -> "cs"+ Danish -> "da"+ Dhivehi -> "dv"+ Dutch -> "nl"+ English -> "en"+ Esperanto -> "eo"+ Estonian -> "et"+ Filipino -> "tl"+ Finnish -> "fi"+ French -> "fr"+ Galician -> "gl"+ Georgian -> "ka"+ German -> "de"+ Greek -> "el"+ Guarani -> "gn"+ Gujarati -> "gu"+ Hebrew -> "iw"+ Hindi -> "hi"+ Hungarian -> "hu"+ Icelandic -> "is"+ Indonesian -> "id"+ Inuktitut -> "iu"+ Italian -> "it"+ Japanese -> "ja"+ Kannada -> "kn"+ Kazakh -> "kk"+ Khmer -> "km"+ Korean -> "ko"+ Kurdish -> "ku"+ Kyrgyz -> "ky"+ Laothian -> "lo"+ Latvian -> "lv"+ Lithuanian -> "lt"+ Macedonian -> "mk"+ Malay -> "ms"+ Malayalam -> "ml"+ Maltese -> "mt"+ Marathi -> "mr"+ Mongolian -> "mn"+ Nepali -> "ne"+ Norwegian -> "no"+ Oriya -> "or"+ Pashto -> "ps"+ Persian -> "fa"+ Polish -> "pl"+ Portuguese -> "pt-PT"+ Punjabi -> "pa"+ Romanian -> "ro"+ Russian -> "ru"+ Sanskrit -> "sa"+ Serbian -> "sr"+ Sindhi -> "sd"+ Sinhalese -> "si"+ Slovak -> "sk"+ Slovenian -> "sl"+ Spanish -> "es"+ Swahili -> "sw"+ Swedish -> "sv"+ Tajik -> "tg"+ Tamil -> "ta"+ Tagalog -> "tl"+ Telugu -> "te"+ Thai -> "th"+ Tibetan -> "bo"+ Turkish -> "tr"+ Ukrainian -> "uk"+ Urdu -> "ur"+ Uzbek -> "uz"+ Uighur -> "ug"+ Vietnamese -> "vi"+ Unknown -> ""