1:- module(
    2  nlp_lang,
    3  [
    4    current_lrange/1, % -LRange
    5    current_ltag/1,   % -LTag
    6    current_ltag/2,   % +LTags, -LTag
    7    month_name/4,     % ?Month, ?LTag, ?Abbr, ?Full
    8    nlp_string/2,     % +Name, -Str
    9    nlp_string/3,     % +Name, +Args, -Str
   10    ordinal_suffix/3  % +N, +LTag, -Suffix
   11  ]
   12).

Natural language support

*/

   18:- use_module(library(http/html_write)).   19:- use_module(library(lists)).   20:- use_module(library(settings)).   21
   22:- dynamic
   23    nlp:nlp_string0/3.   24
   25:- setting(
   26     nlp:lrange,
   27     list(atom),
   28     [en],
   29     "The default langage range."
   30   ).   31
   32:- multifile
   33    nlp:nlp_string0/3.
 current_lrange(-LRange) is det
   41current_lrange(LRange) :-
   42  nlp:setting(lrange, LRange).
 current_ltag(-LTag) is det
 current_ltag(+LTags, -LTag) is det
   49current_ltag(LTag) :-
   50  current_lrange(LRange),
   51  lrange_to_ltag(LRange, LTag).
   52
   53
   54current_ltag(LTags, LTag) :-
   55  current_ltag(LTag),
   56  memberchk(LTag, LTags).
 lrange_to_ltag(+LRange, -LTag) is nondet
   62lrange_to_ltag(LRange, LTag2) :-
   63  member(LTag1, LRange),
   64  atomic_list_concat(Subtags, -, LTag1),
   65  longest_to_shortest_prefix0(PrefixSubtags, Subtags),
   66  PrefixSubtags \== [],
   67  atomic_list_concat(PrefixSubtags, -, LTag2).
   68
   69longest_to_shortest_prefix0(L, L).
   70longest_to_shortest_prefix0(Prefix, L1) :-
   71  append(L2, [_], L1),
   72  longest_to_shortest_prefix0(Prefix, L2).
 month_name(?Month, ?LTag, ?Abbr, ?Full) is nondet
   78month_name(1,  en, "Jan", "January").
   79month_name(2,  en, "Feb", "February").
   80month_name(3,  en, "Mar", "March").
   81month_name(4,  en, "Apr", "April").
   82month_name(5,  en, "May", "May").
   83month_name(6,  en, "Jun", "June").
   84month_name(7,  en, "Jul", "July").
   85month_name(8,  en, "Aug", "Augustus").
   86month_name(9,  en, "Sep", "September").
   87month_name(10, en, "Oct", "October").
   88month_name(11, en, "Nov", "November").
   89month_name(12, en, "Dec", "December").
   90month_name(1,  nl, "jan", "januari").
   91month_name(2,  nl, "feb", "februari").
   92month_name(3,  nl, "mrt", "maart").
   93month_name(4,  nl, "apr", "april").
   94month_name(5,  nl, "mei", "mei").
   95month_name(6,  nl, "jun", "juni").
   96month_name(7,  nl, "jul", "juli").
   97month_name(8,  nl, "aug", "augustus").
   98month_name(9,  nl, "sep", "september").
   99month_name(10, nl, "okt", "oktober").
  100month_name(11, nl, "nov", "november").
  101month_name(12, nl, "dec", "december").
 nlp_string(+Name, -String) is det
 nlp_string(+Name, +Args, -String) is det
  108nlp_string(Name, String) :-
  109  nlp_string(Name, [], String).
  110
  111
  112nlp_string(Name, Args, String) :-
  113  current_ltag(LTag),
  114  nlp:nlp_string0(LTag, Name, Format),
  115  format(string(String), Format, Args).
 ordinal_suffix(+N, +LTag, -W) is det
  121ordinal_suffix(1, en, "st").
  122ordinal_suffix(2, en, "nd").
  123ordinal_suffix(3, en, "rd").
  124ordinal_suffix(_, en, "th")