Знайомство з n2o v4.4 [14]

розглянемо повністю варіант реалізації мультимовності
на сайті з erlang n2o вебсокет фреймворком

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

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

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

function setCookie(name,value,options){options=options||{};var expires=options.expires;if(typeof expires=="number"&&expires){var d=new Date();d.setTime(d.getTime()+expires*1000);expires=options.expires=d;}
if(expires&&expires.toUTCString){options.expires=expires.toUTCString();}
value=encodeURIComponent(value);var updatedCookie=name+"="+value;for(var propName in options){updatedCookie+="; "+propName;var propValue=options[propName];if(propValue!==true){updatedCookie+="="+propValue;}}
document.cookie=updatedCookie;}

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),

далі нам потрібно вивести певні фрази на сторінку відповідною мовою
їх ми зберігаємо в окремому модулі, так як описано тут

користуємось так

Value = tr:tr(Lang, key1, key2),

Продовження

Посилання

https://learn.javascript.ru/cookie