1/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2/* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6#include "nsISupports.idl"
7
8%{C++
9// Define Contractid and CID
10#define MOZ_OSPREFERENCES_CID \
11  { 0x65944815, 0xe9ae, 0x48bd, { 0xa2, 0xbf, 0xf1, 0x10, 0x87, 0x20, 0x95, 0x0c } }
12
13#define MOZ_OSPREFERENCES_CONTRACTID "@mozilla.org/intl/ospreferences;1"
14%}
15
16[scriptable, uuid(65944815-e9ae-48bd-a2bf-f1108720950c)]
17interface mozIOSPreferences : nsISupports
18{
19  const long dateTimeFormatStyleNone     = 0;
20  const long dateTimeFormatStyleShort    = 1;
21  const long dateTimeFormatStyleMedium   = 2;
22  const long dateTimeFormatStyleLong     = 3;
23  const long dateTimeFormatStyleFull     = 4;
24
25  /**
26   * Returns a list of locales used by the host environment for UI
27   * localization.
28   *
29   * The result is a sorted list and we expect that the OS attempts to
30   * use the top locale from the list for which it has data.
31   *
32   * Each element of the list is a valid locale ID that can be passed to ICU
33   * and ECMA402 Intl APIs,
34   * At the same time each element is a valid BCP47 language tag that can be
35   * used for language negotiation.
36   *
37   * Example: ["en-US", "de", "pl", "sr-Cyrl", "zh-Hans-HK"]
38   */
39  readonly attribute Array<ACString> systemLocales;
40
41  /**
42   * Returns a list of locales used by host environment for regional
43   * preferences internationalization.
44   *
45   * The result is a sorted list and we expect that the OS attempts to
46   * use the top locale from the list for which it has data.
47   *
48   * Each element of the list is a valid locale ID that can be passed to ICU
49   * and ECMA402 Intl APIs,
50   *
51   * Example: ["en-US", "de", "pl", "sr-Cyrl", "zh-Hans-HK"]
52   */
53  readonly attribute Array<ACString> regionalPrefsLocales;
54
55  /**
56   * Returns the best locale that the host environment is localized to.
57   *
58   * The result is a valid locale ID and it should be
59   * used for all APIs that do not handle language negotiation.
60   *
61   * In any scenario involving language negotiation, systemLocales should
62   * be preferred over the single value.
63   *
64   * Example: "zh-Hans-HK"
65   */
66  readonly attribute ACString systemLocale;
67
68  /**
69   * Returns the best possible date/time pattern for the host environment
70   * taking into account date/time regional settings user defined in the OS
71   * preferences.
72   *
73   * Notice, that depending on the OS it may take into account those settings
74   * for all locales, or only if the locale matches the OS locale.
75   *
76   * It takes two integer arguments that must be valid `dateTimeFormatStyle*`
77   * values (see constants defined above), and a string representing a
78   * BCP47 locale.
79   *
80   * It returns a string with a LDML date/time pattern.
81   *
82   * If no pattern can be retrieved from the host environment, it will
83   * lookup the best available pattern from ICU.
84   *
85   * Notice, this is a pretty unique method in this API in that it does
86   * more than look up into host environment.
87   * The reason for that is that constructing the right date/time pattern
88   * requires a lot of OS-specific logic and it ends up being easier to just
89   * handle all scenarios, including with cases where we fail to retrieve
90   * anything from the OS, here.
91   */
92  AUTF8String getDateTimePattern(in long timeFormatStyle,
93                                 in long dateFormatStyle,
94                                 [optional] in ACString locale);
95};
96