Знайомство з 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),