-- | This module contains definitions related to
-- obtaining current localization settings from
-- process's locale.
module Text.Localize.Locale where

import Data.Maybe
import System.Locale.SetLocale

import Text.Localize.Types

-- | Obtain language to be used from process's locale.
languageFromLocale :: IO LanguageId
languageFromLocale :: IO LanguageId
languageFromLocale = do
  Maybe LanguageId
mbLocale <- Category -> Maybe LanguageId -> IO (Maybe LanguageId)
setLocale Category
LC_MESSAGES (LanguageId -> Maybe LanguageId
forall a. a -> Maybe a
Just LanguageId
"")
  let locale :: LanguageId
locale = LanguageId -> Maybe LanguageId -> LanguageId
forall a. a -> Maybe a -> a
fromMaybe LanguageId
"C" Maybe LanguageId
mbLocale
  LanguageId -> IO LanguageId
forall (m :: * -> *) a. Monad m => a -> m a
return (LanguageId -> IO LanguageId) -> LanguageId -> IO LanguageId
forall a b. (a -> b) -> a -> b
$ (Char -> Bool) -> LanguageId -> LanguageId
forall a. (a -> Bool) -> [a] -> [a]
takeWhile (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/= Char
'_') LanguageId
locale