summaryrefslogtreecommitdiffstats
path: root/toolkit/components/mozintl/mozIMozIntl.idl
blob: aa042a3fe112e5cc7533bdf7de87790defe7cb54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

/**
 * This is a set of APIs that are of general usefulness for user interface
 * internationalization.
 *
 * They're all in various stages of the standardization process through
 * ECMA402, so they are exposed to privileged content only but are written
 * in the way to allow for easy migration to standard Intl object once
 * the appropriate stage of the ECMA402 is achieved.
 *
 * The exact structure of the code is a little bit complex because of that:
 *
 * 1) The core is in SpiderMonkey together with other Intl APIs
 *
 * This allows us to write the code once, stick to the spec language
 * of the proposal, reuse our ICU bindings in Spidermonkey and use
 * the code to inform us on refining the spec proposal for the given API itself.
 *
 * 2) The MozIntlHelper API exposes the SpiderMonkey APIs
 *
 * This helper API allows attaching the new APIs on any regular object.
 *
 * 3) The MozIntl API provides the access to those APIs
 *
 * This API exposes the actual functionality and wraps around the MozIntlHelper
 * lazily retrieving and setting the accessors.
 * On top of that, the API also binds additional functionality like using
 * current application locale by default, and fetching OS regional preferences
 * for date time format.
 */
[scriptable, uuid(7f63279a-1a29-4ae6-9e7a-dc9684a23530)]
interface mozIMozIntl : nsISupports
{
  jsval getCalendarInfo([optional] in jsval locales);

  /**
   * Helper for IntlUtils.webidl, will be removed once Intl.DisplayNames
   * supports date-time types in non-privileged code.
   */
  jsval getDisplayNamesDeprecated([optional] in jsval locales, [optional] in jsval options);


  /**
   * Returns a list of locale codes for a given type.
   * At the moment only type="region" is supported.
   *
   * Example:
   *   let codes = getAvailableLocaleDisplayNames("region");
   *   codes === ["ar", "ae", "af", ...]
   */
  jsval getAvailableLocaleDisplayNames(in jsval type);

  /**
   * Returns a list of language names formatted for display.
   *
   * Example:
   *   let langs = getLanguageDisplayNames(["pl"], ["fr", "de", "en"]);
   *   langs === ["Francuski", "Niemiecki", "Angielski"]
   */
  jsval getLanguageDisplayNames(in jsval locales, in jsval langCodes);

  /**
   * Returns a list of region names formatted for display.
   *
   * Example:
   *   let regs = getRegionDisplayNames(["pl"], ["US", "CA", "MX"]);
   *   regs === ["Stany Zjednoczone", "Kanada", "Meksyk"]
   */
  jsval getRegionDisplayNames(in jsval locales, in jsval regionCodes);

  /**
   * Returns a list of locale names formatted for display.
   *
   * Example:
   *   let locs = getLocaleDisplayNames(["pl"], ["sr-RU", "es-MX", "fr-CA"]);
   *   locs === ["Serbski (Rosja)", "Hiszpański (Meksyk)", "Francuski (Kanada)"]
   */
  jsval getLocaleDisplayNames(in jsval locales, in jsval localeCodes, [optional] in jsval options);

  /**
   * Returns the assumed script directionality for known Firefox locales. This is
   * somewhat crude, but should work until Bug 1750781 lands.
   *
   * TODO (Bug 1750781) - Callers should use Intl.LocaleInfo once it is standardized (see
   * Bug 1693576), rather than maintaining a hardcoded list of RTL locales.
   */
  jsval getScriptDirection(in jsval locale);

  boolean stringHasRTLChars(in jsval str);

  readonly attribute jsval Collator;
  readonly attribute jsval DateTimeFormat;
  readonly attribute jsval DisplayNames;
  readonly attribute jsval ListFormat;
  readonly attribute jsval Locale;
  readonly attribute jsval NumberFormat;
  readonly attribute jsval PluralRules;
  readonly attribute jsval RelativeTimeFormat;
};