ublog

n2o - мультимовність на сайті

programming [35]erlang [33]n2o [18]js [6]

Вітаю!

мультимовний сайт -- це спосіб збільшити аудиторію, не зачиняти сайт лише в одній локалі
розглянемо повністю варіант реалізації мультимовності на сайті з n2o

для початку, десь на сайті є елемент керування, перемикач мови
(це може бути html select, url чи просто span з js-обробником)

наступний js код ставить cookie мови та перезавантажує сторінку
(код мови передається, в іншому варіанті - береться зі значення елемента)
function changeLang(a){
  setCookie("lang",a,{expires:31104000,path:'/'});
  window.location.replace(window.location.href);
}

далі нам потрібно отримати код мови на стороні сервера,
з куки чи заголовка браузера, erlang
get_language_from_header(Req) ->
  {Headers,_} = wf:headers(Req),
  Accept_language = [ V || {K,V} <- Headers, K =:= <<"accept-language">> ],
  case Accept_language of
    [] ->
      <<"en">>;
    [H|_] ->
      <<Lang:2/binary,_/binary>> = H,
      case lists:member(Lang, [<<"en">>,<<"uk">>,<<"ru">>]) of
        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">>,<<"ru">>]) 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.

користуємось так
Lang = your_module:get_language(<<"lang">>,?REQ),

далі нам потрібно вивести певні фрази на сторінку відповідною мовою
їх ми зберігаємо в окремому модулі, так як описано тут https://blog.clever-games.win/post/11

користуємось так
Value = tr:tr(Lang, key1, key2),



це все :)