Class _locale
- All Implemented Interfaces:
ClassDictInit
RegistryKey.PYTHON_LOCALE_CONTROL
. Additional implementation
details for users of this class are captured below.
Unicode. In general, Java and its locale settings are quite unicode heavy, making rich use of different symbols for e.g. currencies. This solution allows some of that to leak through by encoding the Java locale value with the current character encoding. The Python locale module is quite conservative and tends to keep things as solely strings. Python 2.x usually supports only string / ascii by default in many cases, and only unicode when asked. This is a little less conservative while only allowing values consistent with the current encoding.
An example of this is some Python implementations using EUR rather than the Euro symbol €
('u20ac'
), probably because € is only available in Unicode. In the Java implementation,
if UTF-8 encoding is set, the resulting entry in localeconv()['currency_code']
is
'\xe2\x82\xac'
. This can be used by print()
and related functions directly.
Encoding failures for currency_symbol
fall back to int_curr_symbol
(eg EUR).
Encoding failures for negative_sign
, which are sometimes unicode, fall back to an ANSI
hyphen ('-'). Other encoding failures fallback to the 'C' locale values, where possible.
The C emulation locale uses only ANSI characters in non-unicode strings, in keeping with it being the locale of last resort and maximum compatibility.
Positive sign position (p_sign_posn
) is not a distinguished concept in Java and so this
is hardcoded to 3.
This class ensures read/write consistency, when changing locales via
setlocale(PyInteger,PyString)
, by declaring private variable currentLocale
as
volatile, and only assigning it immutable objects. It does not lock to guarantee sequencing of
setLocale()
calls from separate threads. In the rare cases where that would be needed, it
is the responsibility of the calling code.
- Since:
- Jython 2.7.2
-
Field Summary
Modifier and TypeFieldDescriptionstatic final PyString
static PyString
static PyString
static PyString
static PyString
static final PyString
static final int
static final PyInteger
static PyObject
Thelocale
module exposes_locale.Error
aslocale.Error
.static final PyInteger
static final PyInteger
static final PyInteger
static final PyInteger
static final PyInteger
static final PyInteger
static final PyInteger
static final String
static final String
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic void
classDictInit
(PyObject dict) static DateSymbolLocale
CurrentDateSymbolLocale
used by the Python interpreter.static void
initClassExceptions
(PyObject exceptions) static PyDictionary
static PyException
LocaleException
(String message) static PyString
static PyString
Java Locale loading behaviour is quite forgiving, or uninformative, depending on your perspective.static int
static PyString
-
Field Details
-
Error
Thelocale
module exposes_locale.Error
aslocale.Error
. Some Python functions, includingstrptime()
, depend onlocale.Error
, making it part of the public API for native locale implementations. -
__doc__
-
LOCALE_CONTROL_SETTABLE
- See Also:
-
LOCALE_CONTROL_JYTHON2_LEGACY
- See Also:
-
LC_CTYPE
-
LC_NUMERIC
-
LC_TIME
-
LC_COLLATE
-
LC_MONETARY
-
LC_MESSAGES
-
LC_ALL
-
CHAR_MAX
public static final int CHAR_MAX- See Also:
-
CHAR_MAX_PY_INT
-
C_LOCALE_PY_STRING
-
__doc___localeconv
-
__doc___strcoll
-
__doc___strxfrm
-
__doc___setlocale
-
-
Constructor Details
-
_locale
public _locale()
-
-
Method Details
-
LocaleException
-
initClassExceptions
-
classDictInit
-
localeconv
-
strcoll
-
strxfrm
-
setlocale
-
setlocale
Java Locale loading behaviour is quite forgiving, or uninformative, depending on your perspective. It will return a dummy locale for any language tag that fits the syntax, or make various attempts to approximate a locale. This solution instead follows the stricter Python behaviour of requiring a particular locale to be installed. -
getDateSymbolLocale
CurrentDateSymbolLocale
used by the Python interpreter. This object will no longer reflect the current state after subsequent calls tosetlocale
.
-