-- Swedish (thanks Closey from forums.gentoo.org) --------------------------------------------------------------------------------------------------------------------------------- module FuzzyTime.Swedish (showFuzzyTimeSe) where import {-# SOURCE #-} FuzzyTime import Prelude hiding (min) -- showFuzzyTimeSe ---------------------------------------------------------------------------------------------------------------------------------------------------------------- showFuzzyTimeSe :: FuzzyTime -> String -- FuzzyClock showFuzzyTimeSe fc@(FuzzyClock _ caps _ _ _ _ _) = capsizeDef caps (showFuzzyTimeSeHlp fc) showFuzzyTimeSe ft@(FuzzyTimer _ _) = showFuzzyTimeSeHlp ft showFuzzyTimeSeHlp :: FuzzyTime -> String showFuzzyTimeSeHlp fc@(FuzzyClock _ _ clock hour _ min style) | min == 0 = getHour hour | min `elem` [23..29] = getMin (30-min) ++ " i halv " ++ getHour (nextFTHour fc) | min < 30 = getMin min ++ " över " ++ getHour hour | min `elem` [31..37] = getMin (min-30) ++ " över halv " ++ getHour (nextFTHour fc) | min == 30 = "halv " ++ getHour (nextFTHour fc) | min > 30 = getMin (60-min) ++ " i " ++ getHour (nextFTHour fc) | otherwise = "Oops, looks like it's " ++ show hour ++ ":" ++ show min ++ "." where getHour :: Int -> String getHour h | h `elem` [0, 24] = if style==1 then numeralSe clock else "midnatt" | otherwise = numeralSe h getMin :: Int -> String getMin m | m `elem` [15, 45] = "kvart" | otherwise = numeralSe m -- FuzzyTimer showFuzzyTimeSeHlp (FuzzyTimer _ mins) | mins > 0 = "om " ++ showHelper | mins == 0 = "nu!" | mins < 0 = "! för " ++ showHelper ++ " sedan !" where showHelper :: String showHelper | mm > 90 = numeralSe hours ++ (if half then " och en halv" else "") ++ " timmar" | mm == 90 = "en och en halv timme" | mm == 75 = "en timme och en kvart" | mm == 60 = "en timme" | mm == 45 = "fyrtiofem minuter" | mm == 30 = "halv timme" | mm == 15 = "en kvart" | mm > 1 = numeralSe mm ++ " minuter" | mm == 1 = "en minut" | otherwise = "Oops, it looks like there's " ++ show mins ++ " left." hours :: Int hours = round $ (fromIntegral mm :: Float) / 60 mm :: Int mm = abs mins half :: Bool half = mm `mod` 60 == 30 -- numeralSe ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- numeralSe :: Int -> String numeralSe n | n < 20 = numeralSeHelper1 n | n `mod` 10 == 0 = numeralSeHelper10 (n `div` 10) | otherwise = numeralSeHelper10 (n `div` 10) ++ numeralSeHelper1 (n `mod` 10) where numeralSeHelper1 :: Int -> String numeralSeHelper1 i = ["ett", "två", "tre", "fyra", "fem", "sex", "sju", "åtta", "nio", "tio", "elva", "tolv", "tretton", "fjorton", "femton", "sexton", "sjutton", "arton", "nitton"] !! (i-1) numeralSeHelper10 :: Int -> String numeralSeHelper10 i = ["tjugo", "trettio", "fyrtio", "femtio"] !! (i-2)