module Text.I18N.GetText (
getText,
bindTextDomain,
textDomain
) where
import Foreign.C.Types
import Foreign.C.String
import Foreign.Ptr
import Data.Maybe (fromMaybe)
foreign import ccall unsafe "libintl.h gettext" c_gettext :: CString -> IO CString
foreign import ccall unsafe "libintl.h bindtextdomain" c_bindtextdomain ::
CString -> CString -> IO CString
foreign import ccall unsafe "libintl.h textdomain" c_textdomain :: CString -> IO CString
fromCString :: CString -> IO (Maybe String)
fromCString x | x == nullPtr = return Nothing
| otherwise = peekCString x >>= return . Just
fromCStringDefault :: String -> CString -> IO String
fromCStringDefault d x = fromCString x >>= \r -> return (fromMaybe d r)
getText :: String -> IO String
getText s =
withCString s $ \s' ->
c_gettext s' >>= fromCStringDefault s
bindTextDomain :: String
-> Maybe String
-> IO (Maybe String)
bindTextDomain domainname (Just dirname) =
withCString domainname $ \domain ->
withCString dirname $ \dir ->
c_bindtextdomain domain dir >>= fromCString
bindTextDomain domainname Nothing =
withCString domainname $ \domain ->
c_bindtextdomain domain nullPtr >>= fromCString
textDomain :: String
-> IO (Maybe String)
textDomain domainname =
withCString domainname $ \domain ->
c_textdomain domain >>= fromCString