You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
4.8 KiB
166 lines
4.8 KiB
jsworld.Locale = function(properties) { |
|
|
|
// LC_NUMERIC |
|
|
|
|
|
this.frac_digits = properties.frac_digits; |
|
|
|
|
|
// may be empty string/null for currencies with no fractional part |
|
if (properties.mon_decimal_point === null || properties.mon_decimal_point == "") { |
|
|
|
if (this.frac_digits > 0) |
|
throw "Error: Undefined mon_decimal_point property"; |
|
else |
|
properties.mon_decimal_point = ""; |
|
} |
|
|
|
if (typeof properties.mon_decimal_point != "string") |
|
throw "Error: Invalid/missing mon_decimal_point property"; |
|
|
|
this.mon_decimal_point = properties.mon_decimal_point; |
|
|
|
|
|
if (typeof properties.mon_thousands_sep != "string") |
|
throw "Error: Invalid/missing mon_thousands_sep property"; |
|
|
|
this.mon_thousands_sep = properties.mon_thousands_sep; |
|
|
|
|
|
if (typeof properties.mon_grouping != "string") |
|
throw "Error: Invalid/missing mon_grouping property"; |
|
|
|
this.mon_grouping = properties.mon_grouping; |
|
|
|
|
|
if (typeof properties.positive_sign != "string") |
|
throw "Error: Invalid/missing positive_sign property"; |
|
|
|
this.positive_sign = properties.positive_sign; |
|
|
|
|
|
if (typeof properties.negative_sign != "string") |
|
throw "Error: Invalid/missing negative_sign property"; |
|
|
|
this.negative_sign = properties.negative_sign; |
|
|
|
|
|
if (properties.p_cs_precedes !== 0 && properties.p_cs_precedes !== 1) |
|
throw "Error: Invalid/missing p_cs_precedes property, must be 0 or 1"; |
|
|
|
this.p_cs_precedes = properties.p_cs_precedes; |
|
|
|
|
|
if (properties.n_cs_precedes !== 0 && properties.n_cs_precedes !== 1) |
|
throw "Error: Invalid/missing n_cs_precedes, must be 0 or 1"; |
|
|
|
this.n_cs_precedes = properties.n_cs_precedes; |
|
|
|
|
|
if (properties.p_sep_by_space !== 0 && |
|
properties.p_sep_by_space !== 1 && |
|
properties.p_sep_by_space !== 2) |
|
throw "Error: Invalid/missing p_sep_by_space property, must be 0, 1 or 2"; |
|
|
|
this.p_sep_by_space = properties.p_sep_by_space; |
|
|
|
|
|
if (properties.n_sep_by_space !== 0 && |
|
properties.n_sep_by_space !== 1 && |
|
properties.n_sep_by_space !== 2) |
|
throw "Error: Invalid/missing n_sep_by_space property, must be 0, 1, or 2"; |
|
|
|
this.n_sep_by_space = properties.n_sep_by_space; |
|
|
|
|
|
if (properties.p_sign_posn !== 0 && |
|
properties.p_sign_posn !== 1 && |
|
properties.p_sign_posn !== 2 && |
|
properties.p_sign_posn !== 3 && |
|
properties.p_sign_posn !== 4) |
|
throw "Error: Invalid/missing p_sign_posn property, must be 0, 1, 2, 3 or 4"; |
|
|
|
this.p_sign_posn = properties.p_sign_posn; |
|
|
|
|
|
if (properties.n_sign_posn !== 0 && |
|
properties.n_sign_posn !== 1 && |
|
properties.n_sign_posn !== 2 && |
|
properties.n_sign_posn !== 3 && |
|
properties.n_sign_posn !== 4) |
|
throw "Error: Invalid/missing n_sign_posn property, must be 0, 1, 2, 3 or 4"; |
|
|
|
this.n_sign_posn = properties.n_sign_posn; |
|
|
|
|
|
if (typeof properties.int_frac_digits != "number" && properties.int_frac_digits < 0) |
|
throw "Error: Invalid/missing int_frac_digits property"; |
|
|
|
this.int_frac_digits = properties.int_frac_digits; |
|
|
|
|
|
if (properties.int_p_cs_precedes !== 0 && properties.int_p_cs_precedes !== 1) |
|
throw "Error: Invalid/missing int_p_cs_precedes property, must be 0 or 1"; |
|
|
|
this.int_p_cs_precedes = properties.int_p_cs_precedes; |
|
|
|
|
|
if (properties.int_n_cs_precedes !== 0 && properties.int_n_cs_precedes !== 1) |
|
throw "Error: Invalid/missing int_n_cs_precedes property, must be 0 or 1"; |
|
|
|
this.int_n_cs_precedes = properties.int_n_cs_precedes; |
|
|
|
|
|
if (properties.int_p_sep_by_space !== 0 && |
|
properties.int_p_sep_by_space !== 1 && |
|
properties.int_p_sep_by_space !== 2) |
|
throw "Error: Invalid/missing int_p_sep_by_spacev, must be 0, 1 or 2"; |
|
|
|
this.int_p_sep_by_space = properties.int_p_sep_by_space; |
|
|
|
|
|
if (properties.int_n_sep_by_space !== 0 && |
|
properties.int_n_sep_by_space !== 1 && |
|
properties.int_n_sep_by_space !== 2) |
|
throw "Error: Invalid/missing int_n_sep_by_space property, must be 0, 1, or 2"; |
|
|
|
this.int_n_sep_by_space = properties.int_n_sep_by_space; |
|
|
|
|
|
if (properties.int_p_sign_posn !== 0 && |
|
properties.int_p_sign_posn !== 1 && |
|
properties.int_p_sign_posn !== 2 && |
|
properties.int_p_sign_posn !== 3 && |
|
properties.int_p_sign_posn !== 4) |
|
throw "Error: Invalid/missing int_p_sign_posn property, must be 0, 1, 2, 3 or 4"; |
|
|
|
this.int_p_sign_posn = properties.int_p_sign_posn; |
|
|
|
|
|
if (properties.int_n_sign_posn !== 0 && |
|
properties.int_n_sign_posn !== 1 && |
|
properties.int_n_sign_posn !== 2 && |
|
properties.int_n_sign_posn !== 3 && |
|
properties.int_n_sign_posn !== 4) |
|
throw "Error: Invalid/missing int_n_sign_posn property, must be 0, 1, 2, 3 or 4"; |
|
|
|
this.int_n_sign_posn = properties.int_n_sign_posn; |
|
|
|
|
|
// LC_TIME |
|
|
|
if (properties == null || typeof properties != "object") |
|
throw "Error: Invalid/missing time locale properties"; |
|
|
|
|
|
// parse the supported POSIX LC_TIME properties |
|
|
|
// abday |
|
try { |
|
this.abday = this._parseList(properties.abday, 7); |
|
} |
|
catch (error) { |
|
throw "Error: Invalid abday property: " + error; |
|
} |
|
|
|
}
|
|
|