wikimusic-ssr-0.6.0.1: src/WikiMusic/SSR/Language.hs
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}
module WikiMusic.SSR.Language
( DictTerm (..),
Titles (..),
Errors (..),
Slogans (..),
ApplicationDictionary (..),
More (..),
Forms (..),
Sortings (..),
towerOfBabel,
dictionary,
(|##|),
)
where
import Data.Text (unpack)
import Optics
import Relude
import WikiMusic.SSR.Model.Api
data DictTerm = DictTerm
{ en :: Text,
nl :: Text
}
deriving (Eq, Generic, Show)
makeFieldLabelsNoPrefix ''DictTerm
data Titles = Titles
{ wikimusicSSR :: DictTerm,
errorOccurred :: DictTerm,
artistsPage :: DictTerm,
genresPage :: DictTerm,
songsPage :: DictTerm,
login :: DictTerm
}
deriving (Eq, Generic, Show)
makeFieldLabelsNoPrefix ''Titles
data Errors = Errors
{ clientError :: DictTerm
}
deriving (Eq, Generic, Show)
makeFieldLabelsNoPrefix ''Errors
data More = More
{ likes :: DictTerm,
dislikes :: DictTerm,
artistsNav :: DictTerm,
genresNav :: DictTerm,
songsNav :: DictTerm,
loginNav :: DictTerm,
views :: DictTerm,
warningHeavyDevelopment :: DictTerm,
createdBy :: DictTerm,
createdAt :: DictTerm,
lastEditedAt :: DictTerm,
musicTuning :: DictTerm,
musicKey :: DictTerm,
musicCreationDate :: DictTerm,
albumName :: DictTerm,
albumInfoLink :: DictTerm
}
deriving (Eq, Generic, Show)
makeFieldLabelsNoPrefix ''More
data Slogans = Slogans
{ pageTop :: DictTerm
}
deriving (Eq, Generic, Show)
makeFieldLabelsNoPrefix ''Slogans
data Forms = Forms
{ email :: DictTerm,
password :: DictTerm,
submit :: DictTerm
}
deriving (Eq, Generic, Show)
makeFieldLabelsNoPrefix ''Forms
data Sortings = Sortings
{ alphabeticalAsc :: DictTerm,
alphabeticalDesc :: DictTerm,
createdAtAsc :: DictTerm,
createdAtDesc :: DictTerm
}
deriving (Eq, Generic, Show)
makeFieldLabelsNoPrefix ''Sortings
data Buttons = Buttons
{ edit :: DictTerm,
delete :: DictTerm,
like :: DictTerm,
dislike :: DictTerm
}
deriving (Eq, Generic, Show)
makeFieldLabelsNoPrefix ''Buttons
data ApplicationDictionary = ApplicationDictionary
{ titles :: Titles,
errors :: Errors,
slogans :: Slogans,
more :: More,
forms :: Forms,
sortings :: Sortings,
buttons :: Buttons
}
deriving (Eq, Generic, Show)
makeFieldLabelsNoPrefix ''ApplicationDictionary
dictionary :: ApplicationDictionary
dictionary =
ApplicationDictionary
{ titles =
Titles
{ wikimusicSSR = DictTerm {en = "WikiMusic", nl = "WikiMusic"},
errorOccurred = DictTerm {en = "Error occurred!", nl = "Fout opgetreden"},
artistsPage = DictTerm {en = "Artists", nl = "Artiesten"},
genresPage = DictTerm {en = "Genres", nl = "Genres"},
songsPage = DictTerm {en = "Songs", nl = "Nummers"},
login = DictTerm {en = "Login", nl = "Inloggen"}
},
forms =
Forms
{ email = DictTerm {en = "email address:", nl = "emailadres:"},
password = DictTerm {en = "password:", nl = "wachtwoord:"},
submit = DictTerm {en = "submit", nl = "indienen"}
},
errors =
Errors
{ clientError = DictTerm {en = "Client error!", nl = "Client error!"}
},
buttons =
Buttons
{ edit = DictTerm {en = "edit", nl = "bewerken"},
delete = DictTerm {en = "delete", nl = "verwijderen"},
like = DictTerm {en = "like", nl = "leuk"},
dislike = DictTerm {en = "dislike", nl = "niet leuk"}
},
slogans =
Slogans
{ pageTop =
DictTerm
{ en = "Welcome to the music knowledge sharing community 🎼",
nl = "Welkom bij de gemeenschap waar je muziek kennis kan delen 🎼"
}
},
sortings =
Sortings
{ alphabeticalAsc = DictTerm {en = "alphabetical - asc", nl = "alfabetisch - opl"},
alphabeticalDesc = DictTerm {en = "alphabetical - desc", nl = "alfabetisch - afl"},
createdAtAsc = DictTerm {en = "created at - asc", nl = "datum gemaakt - opl"},
createdAtDesc = DictTerm {en = "created at - desc", nl = "datum gemaakt - afl"}
},
more =
More
{ likes =
DictTerm
{ en = "likes",
nl = "leuks"
},
dislikes =
DictTerm
{ en = "dislikes",
nl = "niet leuks"
},
artistsNav =
DictTerm
{ en = "Artists",
nl = "Artiesten"
},
genresNav =
DictTerm
{ en = "Genres",
nl = "Genres"
},
songsNav =
DictTerm
{ en = "Songs",
nl = "Nummers"
},
loginNav =
DictTerm
{ en = "Login",
nl = "Inloggen"
},
views =
DictTerm
{ en = "views",
nl = "weergaven"
},
createdBy =
DictTerm
{ en = "added by:",
nl = "toegevoeg door:"
},
createdAt =
DictTerm
{ en = "date created:",
nl = "datum gemaakt:"
},
lastEditedAt =
DictTerm
{ en = "last edited at:",
nl = "laatst bijgewerkt:"
},
warningHeavyDevelopment = DictTerm {en = "Warning! WikiMusic is ongoing an experimental stage! Certain features will not work and are being fixed.", nl = "Let op! WikiMusic is momenteel in een experimentele periode. Hou rekening met de feit dat sommige functies niet zullen werken, er wordt aan gewerkt. "},
musicTuning = DictTerm {en = "tuning:", nl = "stemming:"},
musicKey = DictTerm {en = "music key:", nl = "muziek key:"},
musicCreationDate = DictTerm {en = "music creation:", nl = "muziek geschreven:"},
albumName = DictTerm {en = "album name:", nl = "album naam:"},
albumInfoLink = DictTerm {en = "album info:", nl = "info over album:"}
}
}
translateTerm :: Text -> DictTerm -> Text
translateTerm "nl" x = x ^. #nl
translateTerm _ x = x ^. #en
towerOfBabel :: Language -> DictTerm -> Text
towerOfBabel language x = fromString . unpack $ translateTerm (language ^. #value) x
-- towerOfBabel alias
infixl 8 |##|
(|##|) :: (ApplicationDictionary -> DictTerm) -> Language -> Text
(|##|) fromDict language = towerOfBabel language (fromDict dictionary)