-module(hm). -compile([export_all, nowarn_export_all]). %-include_lib("nitro/include/nitro.hrl"). -include_lib("n4u/include/wf.hrl"). %-include_lib("kernel/include/file.hrl"). %% help module %% get params % get_language_from_header(Req) % get_language_from_cookies(Name, Req) % get_language(Name, Req) % get_tr_mod() %% todo mv this funcs to framework %% other % assert_int(X) %% get params get_language_from_header(Req) -> #{headers := Headers} = Req, F1 = fun(K, V, Acc) -> Is_Same = <<"accept-language">> =:= string:lowercase(K), case Is_Same of true -> Is_A = <<"*">> =:= binary:part(V, {0, 1}), Is_E = <<>> =:= V, case {Is_A, Is_E} of {false, false} -> V; _ -> [] end; _ -> Acc end end, Accept_language = maps:fold(F1, [], Headers), case Accept_language of [] -> en; Val -> <> = Val, %% Accept-Language: <<"uk,en;q=0.5">> %% <<"fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5">> Lang = try erlang:binary_to_existing_atom(Lang0, latin1) catch _:_ -> en end, case lists:member(Lang, [en, uk]) of %% todo mv to config langs list and default lang false -> en; true -> Lang end end. get_language_from_cookies(Name, Req) -> case wf:cookie_req(Name, Req) of undefined -> false; Lang -> case lists:member(Lang, [en, uk]) of false -> false; true -> Lang end end. get_language(Name, Req) -> case ?MODULE:get_language_from_cookies(Name, Req) of false -> ?MODULE:get_language_from_header(Req); Lang -> Lang end. get_tr_mod() -> %% modules with i18n for config langs list -- en -> tr_en, uk -> tr_uk etc Lang = get_language(<<"lang">>, ?REQ), case Lang of uk -> tr_uk; %en -> tr_en _ -> tr_en end. post_value(Req, Key) -> {ok, PostStr, _} = wf:request_body(Req), PostList = cow_qs:parse_qs(PostStr), ?MODULE:post_value2( [ Value || {_Key1, Value} <- PostList, _Key1 =:= Key ] ). % helper post_value2([]) -> undefined; post_value2([Val|_]) -> Val; post_value2(_) -> undefined. assert_int(X) when erlang:is_integer(X) -> ok.