1:- module(scasp_messages,
2 [ scasp_lang/1, 3 scasp_justification_message//1 4 ]). 5:- use_module(lang/en, []). 6:- use_module(lang/nl, []). 7:- use_module(library(solution_sequences)). 8
9:- create_prolog_flag(scasp_lang, default, [keep(true)]). 10
11:- multifile
12 scasp_lang_module/2. 13
14:- thread_local lang_module_cache/1 as volatile.
20lang_module(M) :-
21 ( lang_module_cache(M)
22 *-> true
23 ; forall(distinct(gen_lang_module(M)),
24 assertz(lang_module_cache(M))),
25 lang_module_cache(M)
26 ).
27
28gen_lang_module(Module) :-
29 scasp_lang(Lang),
30 clean_encoding(Lang, Clean),
31 longest_id(Clean, LangID),
32 scasp_lang_module(LangID, Module).
33gen_lang_module(Module) :-
34 scasp_lang_module(en, Module).
35
36clean_encoding(Lang0, Lang) :-
37 ( sub_atom(Lang0, A, _, _, '.')
38 -> sub_atom(Lang0, 0, A, _, Lang)
39 ; Lang = Lang0
40 ).
46scasp_lang(Lang),
47 current_prolog_flag(scasp_lang, Lang0),
48 Lang0 \== default =>
49 Lang = Lang0.
50:- if(current_prolog_flag(windows, true)). 51scasp_lang(Lang),
52 win_get_user_preferred_ui_languages(name, [Lang0|_]) =>
53 Lang = Lang0.
54:- else. 55scasp_lang(Lang),
56 catch(setlocale(messages, _, ''), _, fail) =>
57 setlocale(messages, Lang0, Lang0),
58 Lang = Lang0.
59:- endif. 60scasp_lang(Lang),
61 getenv('LANG', Lang0) =>
62 Lang = Lang0.
63scasp_lang(Lang) =>
64 Lang = en.
65
66longest_id(Lang, Id) :-
67 split_string(Lang, "_-", "", Components),
68 longest_prefix(Components, Taken),
69 atomic_list_concat(Taken, '_', Id).
70
71longest_prefix([H|T0], [H|T]) :-
72 longest_prefix(T0, T).
73longest_prefix(_, []).
74
75:- multifile
76 prolog:message//1. 77
78prolog:message(scasp(Term)) -->
79 [ 's(CASP): '-[] ],
80 { lang_module(Module)
81 },
82 Module:scasp_message(Term).
83
84scasp_justification_message(Term) -->
85 { lang_module(Module)
86 },
87 Module:scasp_message(Term),
88 !