54 lines
1.1 KiB
OCaml
54 lines
1.1 KiB
OCaml
open Drame
|
|
|
|
type t =
|
|
| French
|
|
| English
|
|
|
|
type choice =
|
|
{ fr : string
|
|
; en : string
|
|
}
|
|
|
|
type img =
|
|
{ name : string
|
|
; alt : choice
|
|
}
|
|
|
|
let default = French
|
|
|
|
let session_param_name = "lang"
|
|
|
|
let pp fmt = function
|
|
| French -> Fmt.string fmt "fr"
|
|
| English -> Fmt.string fmt "en"
|
|
|
|
let of_string = function
|
|
| "fr" -> Some French
|
|
| "en" -> Some English
|
|
| _unknown_lang -> None
|
|
|
|
let of_request request =
|
|
match Option.bind (Session.get request session_param_name) of_string with
|
|
| None -> default
|
|
| Some lang -> lang
|
|
|
|
let txt request ~fr ~en =
|
|
let lang_txt = match of_request request with French -> fr | English -> en in
|
|
Tyxml.Html.txt lang_txt
|
|
|
|
let txt_choice request { fr; en } =
|
|
let lang_txt = match of_request request with French -> fr | English -> en in
|
|
Tyxml.Html.txt lang_txt
|
|
|
|
let txt_anylang txt = Tyxml.Html.txt txt
|
|
|
|
let img request ~a ~src ~alt =
|
|
let alt =
|
|
match of_request request with French -> alt.fr | English -> alt.en
|
|
in
|
|
Tyxml.Html.img ~a ~src ~alt ()
|
|
|
|
let a_content request ~fr ~en =
|
|
let lang_txt = match of_request request with French -> fr | English -> en in
|
|
Tyxml.Html.a_content lang_txt
|