language_management.anubis 9.04 KB
/*
 * Created by PyramIDE.
 * User: フランスのトトロ aka (David RENÉ) 
 * Date: 17/04/2020
 * Time: 15:00
 * © David RENÉ
 */

read system/logger.anubis
read locale/L3.anubis
read locale/L3LanguageInfo.anubis
read xlib/web/types/controllers_web_site.anubis
read xlib/web/web_session.anubis

public define One     set_dictionary(WEB_Session s, String n)                     = replace_String(s.fields, "AWS_CURRENT_DICTIONARY", n).
public define One     set_dictionary(Var(List(Session_Field)) fields, String n)   = replace_String(fields, "AWS_CURRENT_DICTIONARY", n).
public define String  get_dictionary(WEB_Session s)                               = get_String    (s.fields, "AWS_CURRENT_DICTIONARY", "").

public define String default_language = "en".

public define (String symbolic_name) -> String
  make_translate_function
  (
    String                      dictionary_collection_name,
    String                      lang,
    (LogLevel, String) -> One   logger
  ) =
  if l3_load_base(dictionary_collection_name) is
  {
    failure           then   
      logger(logError, "Can't load translation dictionary for '"+dictionary_collection_name+"'");
      (String symbolic_name) |-> "<" + symbolic_name + ">",

    success(L3 local) then 
      //now we set the current language
      with _l3_object = l3_set_current(local, lang),
            l3_object = l3_set_default(_l3_object, default_language),
      if lang = "symb" then
        (String symbolic_name) |-> "[" + l3_get_text(l3_object, symbolic_name) + "]"
      else
        (String symbolic_name) |-> l3_get_text(l3_object, symbolic_name)
  }
.

public define (String symbolic_name) -> String
  make_translate_function_for_lang
  (
    WEB_Session                 _session,
    String                      lang,
    (LogLevel, String) -> One   logger
  ) =
  with app_dictionary = get_String(_session.fields, "AWS_CURRENT_DICTIONARY", ""), 
  make_translate_function(app_dictionary, lang, logger)
.

public define (String symbolic_name) -> String
  make_translate_function_for_lang
  (
    WEB_Session                 _session,
    String                      lang
  ) =
  with app_dictionary = get_String(_session.fields, "AWS_CURRENT_DICTIONARY", ""), 
  make_translate_function(app_dictionary, lang, (LogLevel level, String txt) |-> println(txt))
.


public define (String symbolic_name) -> String
  make_translate_function
  (
    WEB_Session                 _session,
    (LogLevel, String) -> One   logger
  ) =
  with        lang = _session.language,
   app_dictionary = get_String(_session.fields, "AWS_CURRENT_DICTIONARY", ""),

  make_translate_function(app_dictionary, lang, logger)
.

public define (String symbolic_name) -> String
  make_translate_function
  (
    WEB_Session                 _session
  ) =
  make_translate_function(_session, (LogLevel level, String txt) |-> println(txt))
.

public define (String symbolic_name) -> String
  make_translate_function_for_dictionary
  (
    WEB_Session                 _session,
    String                      dictionary_collection_name,
    (LogLevel, String) -> One   logger
  ) =
  with        lang = _session.language,
  make_translate_function(dictionary_collection_name, lang, logger)
.

public define (String symbolic_name) -> String
  make_translate_function_for_dictionary
  (
    WEB_Session                 _session,
    String                      dictionary_collection_name,
  ) =
  with        lang = _session.language,
  make_translate_function(dictionary_collection_name, lang, (LogLevel level, String txt) |-> println(txt))
.

public define (String symbolic_name, List((String, String)) list_key_value) -> String
  make_translate_with_key_value_function
  (
    WEB_Session                 _session
  ) =
  (String symbolic_name, List((String, String)) list_key_value) |->
  with translated_sentence = make_translate_function(_session, (LogLevel level, String txt) |-> println(txt))(symbolic_name),
  find_and_replace_dict(translated_sentence, list_key_value)
.
 
public define (String symbolic_name, List((String, String)) list_key_value) -> String
  make_translate_with_key_value_function_for_lang
  (
    WEB_Session                 _session,
    String                      lang,
  ) =
  (String symbolic_name, List((String, String)) list_key_value) |->
  with translated_sentence = make_translate_function_for_lang(_session, lang)(symbolic_name),
  find_and_replace_dict(translated_sentence, list_key_value)
.

public define (String symbolic_name, List((String, String)) list_key_value) -> String
  make_translate_with_key_value_function_for_dictionary
  (
    WEB_Session                 _session,
    String                      dictionary_collection_name,
  ) =
  (String symbolic_name, List((String, String)) list_key_value) |->
  with translated_sentence = make_translate_function_for_dictionary(_session, dictionary_collection_name)(symbolic_name),
  find_and_replace_dict(translated_sentence, list_key_value)
.

public define List((List(CoreAttrs),WebArgValue, String))
  language_list_for_combo
  (
    String dictionary_collection_name   //means application name
  )
  =
  map((L3LangDicProperty dico_prop)
      |->
      since dico_prop is l3LangDicProperty( _, _, lang_code, _, _, _),
      with lang_info = l3_get_language_info(lang_code),
      ((List(CoreAttrs))[], wav(lang_code), self_name(lang_info))
      , 
      l3_get_all_dicos(dictionary_collection_name)
  )
.

define HTML_Off_Form
  language_line
  (
    String language_code,
    String language
  )=
  li([style("background-image: url(/xlib/flags/24x24/"+language_code+".png);"), 
      event(onclick, "language_changed('"+language_code+"');")], text(language))
.

define HTML_Off_Form
  language_line
  (
    String language_code,
    String language,
    String -> String action
  )=
  div([class("clickable"), event(onclick, action(language_code))],[
    img("/xlib/flags/24x24/"+language_code+".png"),
    text(language)
  ])
.

public define HTML_Partial_Content 
  flags_menu
  (
    String                      dictionary_collection_name,
    String                      lang,
    Bool                        show_symbolic
  ) =
  with make_line = (L3LangDicProperty dico_prop) |-> 
                    if dico_prop is l3LangDicProperty( _, sha1, lang_code, user_def, creat, update) then
                    with lang_info = l3_get_language_info(lang_code),
                    if lang_code = lang then
                      empty
                    else
                      language_line(lang_code, self_name(lang_info)),
  partial_content([
      css(css_file("/xlib/css/flags_menu.css")),
      js(js_file("/xlib/js/xlib.js"))
    ],
    [
      dl([
      //literal("<dt style=\"background-image: url(../flags/"+lang+".png);\" onmouseover=\"javascript:montre('drapo1');\" onmouseout=\"javascript:montre();\">&nbsp;</dt>\n"),
      //literal("<img src=\"/xlib/flags/24x24/"+lang+".png\" onmouseover=\"javascript:montre('drapo1');\" onmouseout=\"javascript:montre();\">"),

      img([event(onmouseover, "showObject('l3-flag');"), event(onmouseout, "hideObject('l3-flag');")], "/xlib/flags/24x24/"+lang+".png" ),
      dd([style("display: none"),id("l3-flag"), event(onmouseover, "showObject('l3-flag');"), event(onmouseout, "hideObject('l3-flag');")],
      ul(
        map(make_line, l3_get_all_dicos(dictionary_collection_name))+
        [
          if show_symbolic then
            language_line("symb", "symbolic")
          else
            empty
        ]
      )),
      ])  //!dl
    ]
  )
.

public define HTML_Partial_Content 
  flags_menu
  (
    WEB_Session                 _session,
    Bool                        show_symbolic,
    (LogLevel, String) -> One   logger
  ) =
  with        lang = _session.language,
   app_dictionnary = get_dictionary(_session),
   
  flags_menu(app_dictionnary, lang, show_symbolic)
.

public define HTML_Partial_Content
  choose_lang_dialog
  (
    String           dictionary_collection_name,
    String -> String action,
    Bool             show_symbolic,
  )=
    with make_line = (L3LangDicProperty dico_prop) |-> 
                    if dico_prop is l3LangDicProperty( _, sha1, lang_code, user_def, creat, update) then
                    with lang_info = l3_get_language_info(lang_code),
                    language_line(lang_code, self_name(lang_info), action),
                      
   partial_content([
      css(css_file("/xlib/css/flags_menu.css")),
      js(js_file("/xlib/js/xlib.js"))
    ],
    [
      dl([
      //img([event(onmouseover, "showObject('l3-flag');"), event(onmouseout, "hideObject('l3-flag');")], "/xlib/flags/24x24/"+lang+".png" ),
      dd([style("display: block"),id("l3-flag")],
      ul(
        map(make_line, l3_get_all_dicos(dictionary_collection_name))+
        [
          if show_symbolic then
            language_line("symb", "symbolic", action)
          else
            empty
        ]
      )),
      ])  //!dl
    ]
  )
.

public define HTML_Partial_Content 
  choose_lang_dialog
  (
    WEB_Session       _session,
    String -> String  action
  ) =
  with        lang = _session.language,
   app_dictionnary = get_dictionary(_session),
   
  choose_lang_dialog(app_dictionnary, action, false)
.