GoogleTranslate 0.0.2 → 0.0.3
raw patch · 2 files changed
+20/−16 lines, 2 filesdep +AttoJsondep −jsondep −textPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: AttoJson
Dependencies removed: json, text
API changes (from Hackage documentation)
- Language.Translate.Google: translate :: ByteString -> Maybe Language -> Language -> IO (Either String Text)
+ Language.Translate.Google: translate :: ByteString -> Maybe Language -> Language -> IO (Either String ByteString)
Files
- GoogleTranslate.cabal +3/−3
- Language/Translate/Google.hs +17/−13
GoogleTranslate.cabal view
@@ -1,5 +1,5 @@ name: GoogleTranslate-version: 0.0.2+version: 0.0.3 Cabal-Version: >= 1.6 license: GPL-3 license-file: LICENSE@@ -17,5 +17,5 @@ Library Exposed-Modules: Language.Translate.Google- Build-depends: base >= 4 && < 5, json >= 0.4.4, download-curl >= 0.1.2, - containers >= 0.3.0.0, bytestring >= 0.9.1.7, dataenc, text+ Build-depends: base >= 4 && < 5, AttoJson >= 0.5.3, download-curl >= 0.1.2, + containers >= 0.3.0.0, bytestring >= 0.9.1.7, dataenc
Language/Translate/Google.hs view
@@ -16,7 +16,7 @@ -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. -{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE OverloadedStrings #-} module Language.Translate.Google ( Language (..), translate,@@ -24,14 +24,12 @@ ) where import Data.Map (Map)-import Data.Text (Text) import Network.Curl.Download-import Text.JSON+import Text.JSON.AttoJSON import qualified Codec.Binary.Url as C import qualified Data.ByteString as B import qualified Data.Map as M-import qualified Data.Text as T data Language = Afrikaans@@ -219,10 +217,10 @@ ,(Unknown, "")] -- | Get translation from Google Translate.-translate :: B.ByteString -- ^ @text@ the byte string need to translate- -> Maybe Language -- ^ @sourceLanguage@ source language, or 'Nothing' use automatic language detect- -> Language -- ^ @destinationLanguage@ destination language- -> IO (Either String Text) +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 @@ -231,20 +229,26 @@ | 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 ++ "|" ++ getLangStr destLang)) - string <- openURIString url+ -- Request JSON data.+ string <- openURI url return $ case string of Left error -> Left error Right jsonString -> - case decode jsonString of - Ok ((valFromObj "responseData") -> Ok ((valFromObj "translatedText") -> Ok tr)) -> - Right $ T.pack $ fromJSString tr- Error error -> Left error+ case parseJSON jsonString of+ Left error -> Left error+ Right jsvalue -> + case getFields ["responseData", "translatedText"] jsvalue of+ Just (JSString str) -> Right str+ _ -> Left "translate : parse failed."