packages feed

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 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            -> ""