Internal approach
Opa now provides support for translation by means of the @i18n
directive. We can put a translation function inside the @i18n
directive, and it will be replaced by a proper value according to different languages. An example is worth a thousand words, so let's get started with a simple example:
import stdlib.web.client hello = function { case "en": "Hello" case "fr": "Bonjour" case "zh": "你好" default: "Hi" } function page(){ <h1> {@i18n(hello)} </h1> <input type="button" value="English" onclick={set_lang("en")}/> <input type="button" value="French" onclick={set_lang("fr")}/> <input type="button" value="Chinese" onclick={set_lang("zh")}/> } function set_lang(lang)(_){ I18n.set_lang(lang) Client.reload() } Server.start(Server.http, {title:"Opa Packt", ~page})
Save this code into a file, 801.opa
, then compile and run it with the following command:
opa 801.opa --
The result looks as shown in the following screenshot:
The page shows...