mkMessage generate translations from translation files
This function will:
look in the supplied subdirectory for files ending in
.msggenerate a type based on the constructors found
create a RenderMessage instance
:: a typeCtrl KGHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27
Moduleshakespeare-2.1.0.1Haskell2010
This module provides a type-based system for providing translations for text strings.
It is similar in purpose to gettext or Java message bundles.
The core idea is to create simple data type where each constructor represents a phrase, sentence, paragraph, etc. For example:
data AppMessages = Hello | GoodbyeThe RenderMessage class is used to retrieve the appropriate translation for a message value:
class RenderMessage master message where
renderMessage :: master -- ^ type that specifies which set of translations to use
-> [Lang] -- ^ acceptable languages in descending order of preference
-> message -- ^ message to translate
-> TextDefining the translation type and providing the RenderMessage
instance in Haskell is not very translator friendly. Instead,
translations are generally provided in external translations
files. Then the mkMessage Template Haskell function is used to
read the external translation files and automatically create the
translation type and the RenderMessage instance.
A full description of using this module to create translations for Hamlet can be found here:
http://www.yesodweb.com/book/internationalization
A full description of using the module to create translations for HSP can be found here:
http://happstack.com/docs/crashcourse/Templates.html#hsp-i18n
You can also adapt those instructions for use with other systems.
mkMessage generate translations from translation files
This function will:
look in the supplied subdirectory for files ending in .msg
generate a type based on the constructors found
create a RenderMessage instance
mkMessageFor create RenderMessage instance for an existing data-type
mkMessageVariant create an additional set of translations for a type created by mkMessage
the RenderMessage is used to provide translations for a message types
The master argument exists so that it is possible to provide more
than one set of translations for a message type. This is useful
if a library provides a default set of translations, but the user
of the library wants to provide a different set of translations.
renderMessage :: master -> [Lang] -> message -> TextRenderMessage master TextDefined in shakespeare-2.1.0.1 · Text.Shakespeare.I18Nmaster ~ master' => RenderMessage master (SomeMessage master')Defined in shakespeare-2.1.0.1 · Text.Shakespeare.I18Nforall msg. RenderMessage master msg => SomeMessage msgmaster ~ master' => RenderMessage master (SomeMessage master')Defined in shakespeare-2.1.0.1 · Text.Shakespeare.I18NIsString (SomeMessage master)Defined in shakespeare-2.1.0.1 · Text.Shakespeare.I18Nan RFC1766 / ISO 639-1 language code (eg, fr, en-GB, etc).