Current section
Files
Jump to
Current section
Files
src/deeperl_translate.erl
%% @private
-module(deeperl_translate).
-behaviour(gen_deeperl_method).
%% API
-export([request/1, response/1]).
request({TargetLanguage, Texts, #{} = TranslationOptions}) ->
TextParams = [{"text", Text} || Text <- Texts],
TargetLangParam = [{"target_lang", TargetLanguage}],
TranslationParams = [translation_option(Name, Value) || {Name, Value} <- maps:to_list(TranslationOptions)],
{
post,
{
"/v2/translate",
[],
"application/x-www-form-urlencoded; charset=utf-8",
uri_string:compose_query(TextParams ++ TargetLangParam ++ TranslationParams)
}
}.
response(Body) ->
Response = jiffy:decode(Body, [return_maps]),
{ok, [{
unicode:characters_to_list(maps:get(<<"detected_source_language">>, Map)),
maps:get(<<"text">>, Map)
} || Map <- maps:get(<<"translations">>, Response)]}.
%% Internal
translation_option(source_lang, SourceLang) ->
{"source_lang", SourceLang};
translation_option(split_sentences, SplitSentences) ->
{"split_sentences",
case SplitSentences of
nonewlines -> "nonewlines";
true -> "1";
false -> "0"
end
};
translation_option(preserve_formatting, PreserveFormatting) ->
{"preserve_formatting",
case PreserveFormatting of
true -> "1";
false -> "0"
end
};
translation_option(tag_handling, xml) ->
{"tag_handling", "xml"};
translation_option(non_splitting_tags, TagList) ->
{"non_splitting_tags", string:join(TagList, ",")};
translation_option(splitting_tags, TagList) ->
{"splitting_tags", string:join(TagList, ",")};
translation_option(ignore_tags, TagList) ->
{"ignore_tags", string:join(TagList, ",")};
translation_option(outline_detection, OutlineDetection) ->
{"outline_detection",
case OutlineDetection of
true -> "1";
false -> "0"
end
};
translation_option(formality, Formality) ->
{"formality",
case Formality of
default -> "default";
more -> "more";
less -> "less"
end
};
translation_option(glossary_id, GlossaryId) ->
{"glossary_id", GlossaryId}.