annotate babel/core.py @ 74:d9c34d2f3d1d

More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
author cmlenz
date Fri, 08 Jun 2007 19:10:51 +0000
parents b298e583d326
children a72de8971819
rev   line source
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
2 #
14
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
3 # Copyright (C) 2007 Edgewall Software
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
4 # All rights reserved.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
5 #
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
8 # are also available at http://babel.edgewall.org/wiki/License.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
9 #
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
10 # This software consists of voluntary contributions made by many
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
11 # individuals. For the exact contribution history, see the revision
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
12 # history and logs, available at http://babel.edgewall.org/log/.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
13
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
14 """Core locale representation and locale data access."""
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
15
41
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
16 import os
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
17
28
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
18 from babel import localedata
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
19
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
20 __all__ = ['UnknownLocaleError', 'Locale', 'default_locale', 'negotiate_locale',
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
21 'parse_locale']
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
22 __docformat__ = 'restructuredtext en'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
23
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
24
33
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
25 class UnknownLocaleError(Exception):
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
26 """Exception thrown when a locale is requested for which no locale data
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
27 is available.
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
28 """
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
29
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
30 def __init__(self, identifier):
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
31 """Create the exception.
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
32
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
33 :param identifier: the identifier string of the unsupported locale
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
34 """
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
35 Exception.__init__(self, 'unknown locale %r' % identifier)
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
36 self.identifier = identifier
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
37
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
38
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
39 class Locale(object):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
40 """Representation of a specific locale.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
41
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
42 >>> locale = Locale('en', territory='US')
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
43 >>> repr(locale)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
44 '<Locale "en_US">'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
45 >>> locale.display_name
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
46 u'English (United States)'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
47
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
48 A `Locale` object can also be instantiated from a raw locale string:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
49
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
50 >>> locale = Locale.parse('en-US', sep='-')
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
51 >>> repr(locale)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
52 '<Locale "en_US">'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
53
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
54 `Locale` objects provide access to a collection of locale data, such as
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
55 territory and language names, number and date format patterns, and more:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
56
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
57 >>> locale.number_symbols['decimal']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
58 u'.'
33
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
59
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
60 If a locale is requested for which no locale data is available, an
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
61 `UnknownLocaleError` is raised:
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
62
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
63 >>> Locale.parse('en_DE')
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
64 Traceback (most recent call last):
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
65 ...
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
66 UnknownLocaleError: unknown locale 'en_DE'
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
67
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
68 :see: `IETF RFC 3066 <http://www.ietf.org/rfc/rfc3066.txt>`_
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
69 """
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
70
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
71 def __init__(self, language, territory=None, variant=None):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
72 """Initialize the locale object from the given identifier components.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
73
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
74 >>> locale = Locale('en', 'US')
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
75 >>> locale.language
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
76 'en'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
77 >>> locale.territory
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
78 'US'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
79
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
80 :param language: the language code
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
81 :param territory: the territory (country or region) code
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
82 :param variant: the variant code
33
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
83 :raise `UnknownLocaleError`: if no locale data is available for the
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
84 requested locale
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
85 """
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
86 self.language = language
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
87 self.territory = territory
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
88 self.variant = variant
43
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
89 self.__data = None
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
90
33
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
91 identifier = str(self)
43
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
92 if not localedata.exists(identifier):
33
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
93 raise UnknownLocaleError(identifier)
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
94
41
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
95 def default(cls, category=None):
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
96 """Return the system default locale for the specified category.
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
97
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
98 >>> for name in ['LANGUAGE', 'LC_ALL', 'LC_CTYPE']:
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
99 ... os.environ[name] = ''
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
100 >>> os.environ['LANG'] = 'fr_FR.UTF-8'
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
101 >>> Locale.default('LC_MESSAGES')
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
102 <Locale "fr_FR">
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
103
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
104 :param category: one of the ``LC_XXX`` environment variable names
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
105 :return: the value of the variable, or any of the fallbacks
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
106 (``LANGUAGE``, ``LC_ALL``, ``LC_CTYPE``, and ``LANG``)
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
107 :rtype: `Locale`
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
108 """
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
109 return cls(default_locale(category))
41
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
110 default = classmethod(default)
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
111
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
112 def negotiate(cls, preferred, available, sep='_'):
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
113 """Find the best match between available and requested locale strings.
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
114
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
115 >>> Locale.negotiate(['de_DE', 'en_US'], ['de_DE', 'de_AT'])
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
116 <Locale "de_DE">
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
117 >>> Locale.negotiate(['de_DE', 'en_US'], ['en', 'de'])
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
118 <Locale "de">
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
119 >>> Locale.negotiate(['de_DE', 'de'], ['en_US'])
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
120
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
121 :param preferred: the list of locale identifers preferred by the user
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
122 :param available: the list of locale identifiers available
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
123 :return: the `Locale` object for the best match, or `None` if no match
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
124 was found
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
125 :rtype: `Locale`
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
126 """
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
127 identifier = negotiate_locale(preferred, available, sep=sep)
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
128 if identifier:
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
129 return Locale.parse(identifier)
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
130 negotiate = classmethod(negotiate)
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
131
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
132 def parse(cls, identifier, sep='_'):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
133 """Create a `Locale` instance for the given locale identifier.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
134
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
135 >>> l = Locale.parse('de-DE', sep='-')
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
136 >>> l.display_name
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
137 u'Deutsch (Deutschland)'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
138
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
139 If the `identifier` parameter is not a string, but actually a `Locale`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
140 object, that object is returned:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
141
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
142 >>> Locale.parse(l)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
143 <Locale "de_DE">
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
144
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
145 :param identifier: the locale identifier string
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
146 :param sep: optional component separator
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
147 :return: a corresponding `Locale` instance
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
148 :rtype: `Locale`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
149 :raise `ValueError`: if the string does not appear to be a valid locale
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
150 identifier
33
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
151 :raise `UnknownLocaleError`: if no locale data is available for the
df1e2f0ef627 Raise error on unsupported locales. Closes #5.
cmlenz
parents: 30
diff changeset
152 requested locale
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
153 """
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
154 if type(identifier) is cls:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
155 return identifier
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
156 return cls(*parse_locale(identifier, sep=sep))
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
157 parse = classmethod(parse)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
158
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
159 def __eq__(self, other):
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
160 return str(self) == str(other)
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
161
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
162 def __repr__(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
163 return '<Locale "%s">' % str(self)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
164
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
165 def __str__(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
166 return '_'.join(filter(None, [self.language, self.territory,
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
167 self.variant]))
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
168
43
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
169 def _data(self):
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
170 if self.__data is None:
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
171 self.__data = localedata.load(str(self))
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
172 return self.__data
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
173 _data = property(_data)
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
174
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
175 def display_name(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
176 retval = self.languages.get(self.language)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
177 if self.territory:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
178 variant = ''
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
179 if self.variant:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
180 variant = ', %s' % self.variants.get(self.variant)
43
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
181 retval += ' (%s%s)' % (self.territories.get(self.territory),
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
182 variant)
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
183 return retval
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
184 display_name = property(display_name, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
185 The localized display name of the locale.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
186
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
187 >>> Locale('en').display_name
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
188 u'English'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
189 >>> Locale('en', 'US').display_name
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
190 u'English (United States)'
43
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
191 >>> Locale('sv').display_name
0ad88be7da38 Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
cmlenz
parents: 41
diff changeset
192 u'svenska'
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
193
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
194 :type: `unicode`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
195 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
196
55
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
197 def english_name(self):
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
198 en = Locale('en')
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
199 retval = en.languages.get(self.language)
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
200 if self.territory:
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
201 variant = ''
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
202 if self.variant:
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
203 variant = ', %s' % en.variants.get(self.variant)
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
204 retval += ' (%s%s)' % (en.territories.get(self.territory),
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
205 variant)
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
206 return retval
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
207 english_name = property(english_name, doc="""\
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
208 The english display name of the locale.
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
209
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
210 >>> Locale('de').english_name
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
211 u'German'
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
212 >>> Locale('de', 'DE').english_name
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
213 u'German (Germany)'
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
214
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
215 :type: `unicode`
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
216 """)
b298e583d326 Add `english_name` property to `Locale` class.
cmlenz
parents: 43
diff changeset
217
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
218 #{ General Locale Display Names
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
219
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
220 def languages(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
221 return self._data['languages']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
222 languages = property(languages, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
223 Mapping of language codes to translated language names.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
224
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
225 >>> Locale('de', 'DE').languages['ja']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
226 u'Japanisch'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
227
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
228 :type: `dict`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
229 :see: `ISO 639 <http://www.loc.gov/standards/iso639-2/>`_
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
230 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
231
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
232 def scripts(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
233 return self._data['scripts']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
234 scripts = property(scripts, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
235 Mapping of script codes to translated script names.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
236
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
237 >>> Locale('en', 'US').scripts['Hira']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
238 u'Hiragana'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
239
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
240 :type: `dict`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
241 :see: `ISO 15924 <http://www.evertype.com/standards/iso15924/>`_
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
242 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
243
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
244 def territories(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
245 return self._data['territories']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
246 territories = property(territories, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
247 Mapping of script codes to translated script names.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
248
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
249 >>> Locale('es', 'CO').territories['DE']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
250 u'Alemania'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
251
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
252 :type: `dict`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
253 :see: `ISO 3166 <http://www.iso.org/iso/en/prods-services/iso3166ma/>`_
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
254 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
255
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
256 def variants(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
257 return self._data['variants']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
258 variants = property(variants, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
259 Mapping of script codes to translated script names.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
260
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
261 >>> Locale('de', 'DE').variants['1901']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
262 u'alte deutsche Rechtschreibung'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
263
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
264 :type: `dict`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
265 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
266
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
267 #{ Number Formatting
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
268
28
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
269 def currencies(self):
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
270 return self._data['currency_names']
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
271 currencies = property(currencies, doc="""\
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
272 Mapping of currency codes to translated currency names.
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
273
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
274 >>> Locale('en').currencies['COP']
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
275 u'Colombian Peso'
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
276 >>> Locale('de', 'DE').currencies['COP']
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
277 u'Kolumbianischer Peso'
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
278
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
279 :type: `dict`
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
280 """)
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
281
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
282 def currency_symbols(self):
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
283 return self._data['currency_symbols']
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
284 currency_symbols = property(currency_symbols, doc="""\
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
285 Mapping of currency codes to symbols.
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
286
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
287 >>> Locale('en').currency_symbols['USD']
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
288 u'US$'
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
289 >>> Locale('en', 'US').currency_symbols['USD']
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
290 u'$'
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
291
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
292 :type: `dict`
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
293 """)
695884591af6 * Reduce size of locale data pickles by only storing the data provided by each locale itself, and merging inherited data at runtime.
cmlenz
parents: 24
diff changeset
294
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
295 def number_symbols(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
296 return self._data['number_symbols']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
297 number_symbols = property(number_symbols, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
298 Symbols used in number formatting.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
299
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
300 >>> Locale('fr', 'FR').number_symbols['decimal']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
301 u','
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
302
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
303 :type: `dict`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
304 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
305
14
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
306 def decimal_formats(self):
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
307 return self._data['decimal_formats']
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
308 decimal_formats = property(decimal_formats, doc="""\
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
309 Locale patterns for decimal number formatting.
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
310
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
311 >>> Locale('en', 'US').decimal_formats[None]
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
312 <NumberPattern u'#,##0.###'>
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
313
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
314 :type: `dict`
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
315 """)
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
316
24
6c2c9fc7d787 Implemented babel.numbers.format_percent
jonas
parents: 17
diff changeset
317 def percent_formats(self):
6c2c9fc7d787 Implemented babel.numbers.format_percent
jonas
parents: 17
diff changeset
318 return self._data['percent_formats']
6c2c9fc7d787 Implemented babel.numbers.format_percent
jonas
parents: 17
diff changeset
319 percent_formats = property(percent_formats, doc="""\
6c2c9fc7d787 Implemented babel.numbers.format_percent
jonas
parents: 17
diff changeset
320 Locale patterns for percent number formatting.
6c2c9fc7d787 Implemented babel.numbers.format_percent
jonas
parents: 17
diff changeset
321
6c2c9fc7d787 Implemented babel.numbers.format_percent
jonas
parents: 17
diff changeset
322 >>> Locale('en', 'US').percent_formats[None]
6c2c9fc7d787 Implemented babel.numbers.format_percent
jonas
parents: 17
diff changeset
323 <NumberPattern u'#,##0%'>
6c2c9fc7d787 Implemented babel.numbers.format_percent
jonas
parents: 17
diff changeset
324
6c2c9fc7d787 Implemented babel.numbers.format_percent
jonas
parents: 17
diff changeset
325 :type: `dict`
6c2c9fc7d787 Implemented babel.numbers.format_percent
jonas
parents: 17
diff changeset
326 """)
6c2c9fc7d787 Implemented babel.numbers.format_percent
jonas
parents: 17
diff changeset
327
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
328 #{ Calendar Information and Date Formatting
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
329
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
330 def periods(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
331 return self._data['periods']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
332 periods = property(periods, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
333 Locale display names for day periods (AM/PM).
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
334
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
335 >>> Locale('en', 'US').periods['am']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
336 u'AM'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
337
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
338 :type: `dict`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
339 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
340
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
341 def days(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
342 return self._data['days']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
343 days = property(days, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
344 Locale display names for weekdays.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
345
17
aa33ad077d24 Minor date formatting improvements.
cmlenz
parents: 14
diff changeset
346 >>> Locale('de', 'DE').days['format']['wide'][3]
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
347 u'Donnerstag'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
348
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
349 :type: `dict`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
350 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
351
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
352 def months(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
353 return self._data['months']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
354 months = property(months, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
355 Locale display names for months.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
356
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
357 >>> Locale('de', 'DE').months['format']['wide'][10]
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
358 u'Oktober'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
359
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
360 :type: `dict`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
361 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
362
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
363 def quarters(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
364 return self._data['quarters']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
365 quarters = property(quarters, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
366 Locale display names for quarters.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
367
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
368 >>> Locale('de', 'DE').quarters['format']['wide'][1]
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
369 u'1. Quartal'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
370
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
371 :type: `dict`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
372 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
373
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
374 def eras(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
375 return self._data['eras']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
376 eras = property(eras, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
377 Locale display names for eras.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
378
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
379 >>> Locale('en', 'US').eras['wide'][1]
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
380 u'Anno Domini'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
381 >>> Locale('en', 'US').eras['abbreviated'][0]
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
382 u'BC'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
383
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
384 :type: `dict`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
385 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
386
30
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
387 def time_zones(self):
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
388 return self._data['time_zones']
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
389 time_zones = property(time_zones, doc="""\
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
390 Locale display names for time zones.
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
391
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
392 >>> Locale('en', 'US').time_zones['America/Los_Angeles']['long']['standard']
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
393 u'Pacific Standard Time'
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
394 >>> Locale('en', 'US').time_zones['Europe/Dublin']['city']
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
395 u'Dublin'
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
396
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
397 :type: `dict`
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
398 """)
9a00ac84004c Import basic timezone info from CLDR (see #3). Still missing a couple other pieces in the puzzle.
cmlenz
parents: 28
diff changeset
399
36
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
400 def zone_aliases(self):
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
401 return self._data['zone_aliases']
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
402 zone_aliases = property(zone_aliases, doc="""\
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
403 Mapping of time zone aliases to their respective canonical identifer.
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
404
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
405 >>> Locale('en').zone_aliases['UTC']
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
406 'Etc/GMT'
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
407
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
408 :type: `dict`
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
409 :note: this doesn't really belong here, as it does not change between
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
410 locales
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
411 """)
2e143f1a0003 Extended time-zone support.
cmlenz
parents: 35
diff changeset
412
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
413 def first_week_day(self):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
414 return self._data['week_data']['first_day']
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
415 first_week_day = property(first_week_day, doc="""\
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
416 The first day of a week.
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
417
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
418 >>> Locale('de', 'DE').first_week_day
17
aa33ad077d24 Minor date formatting improvements.
cmlenz
parents: 14
diff changeset
419 0
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
420 >>> Locale('en', 'US').first_week_day
17
aa33ad077d24 Minor date formatting improvements.
cmlenz
parents: 14
diff changeset
421 6
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
422
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
423 :type: `int`
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
424 """)
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
425
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
426 def weekend_start(self):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
427 return self._data['week_data']['weekend_start']
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
428 weekend_start = property(weekend_start, doc="""\
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
429 The day the weekend starts.
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
430
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
431 >>> Locale('de', 'DE').weekend_start
17
aa33ad077d24 Minor date formatting improvements.
cmlenz
parents: 14
diff changeset
432 5
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
433
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
434 :type: `int`
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
435 """)
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
436
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
437 def weekend_end(self):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
438 return self._data['week_data']['weekend_end']
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
439 weekend_end = property(weekend_end, doc="""\
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
440 The day the weekend ends.
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
441
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
442 >>> Locale('de', 'DE').weekend_end
17
aa33ad077d24 Minor date formatting improvements.
cmlenz
parents: 14
diff changeset
443 6
10
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
444
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
445 :type: `int`
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
446 """)
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
447
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
448 def min_week_days(self):
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
449 return self._data['week_data']['min_days']
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
450 min_week_days = property(min_week_days, doc="""\
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
451 The minimum number of days in a week so that the week is counted as the
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
452 first week of a year or month.
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
453
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
454 >>> Locale('de', 'DE').min_week_days
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
455 4
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
456
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
457 :type: `int`
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
458 """)
0ca5dd65594f Pull in some supplemental data from the CLDR, for things like the first day of the week.
cmlenz
parents: 3
diff changeset
459
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
460 def date_formats(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
461 return self._data['date_formats']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
462 date_formats = property(date_formats, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
463 Locale patterns for date formatting.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
464
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
465 >>> Locale('en', 'US').date_formats['short']
14
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
466 <DateTimePattern u'M/d/yy'>
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
467 >>> Locale('fr', 'FR').date_formats['long']
14
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
468 <DateTimePattern u'd MMMM yyyy'>
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
469
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
470 :type: `dict`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
471 """)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
472
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
473 def time_formats(self):
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
474 return self._data['time_formats']
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
475 time_formats = property(time_formats, doc="""\
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
476 Locale patterns for time formatting.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
477
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
478 >>> Locale('en', 'US').time_formats['short']
14
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
479 <DateTimePattern u'h:mm a'>
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
480 >>> Locale('fr', 'FR').time_formats['long']
14
29ef15a6fd75 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 11
diff changeset
481 <DateTimePattern u'HH:mm:ss z'>
11
11f64b232b04 Add basic support for number format patterns.
jonas
parents: 10
diff changeset
482
11f64b232b04 Add basic support for number format patterns.
jonas
parents: 10
diff changeset
483 :type: `dict`
11f64b232b04 Add basic support for number format patterns.
jonas
parents: 10
diff changeset
484 """)
11f64b232b04 Add basic support for number format patterns.
jonas
parents: 10
diff changeset
485
35
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
486 def datetime_formats(self):
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
487 return self._data['datetime_formats']
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
488 datetime_formats = property(datetime_formats, doc="""\
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
489 Locale patterns for datetime formatting.
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
490
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
491 >>> Locale('en').datetime_formats[None]
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
492 u'{1} {0}'
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
493 >>> Locale('th').datetime_formats[None]
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
494 u'{1}, {0}'
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
495
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
496 :type: `dict`
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
497 """)
0505d666fa1f * Import datetime patterns from CLDR.
cmlenz
parents: 33
diff changeset
498
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
499
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
500 def default_locale(category=None):
41
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
501 """Returns the system default locale for a given category, based on
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
502 environment variables.
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
503
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
504 >>> for name in ['LANGUAGE', 'LC_ALL', 'LC_CTYPE']:
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
505 ... os.environ[name] = ''
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
506 >>> os.environ['LANG'] = 'fr_FR.UTF-8'
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
507 >>> default_locale('LC_MESSAGES')
41
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
508 'fr_FR'
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
509
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
510 :param category: one of the ``LC_XXX`` environment variable names
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
511 :return: the value of the variable, or any of the fallbacks (``LANGUAGE``,
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
512 ``LC_ALL``, ``LC_CTYPE``, and ``LANG``)
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
513
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
514 :rtype: `str`
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
515 """
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
516 varnames = (category, 'LANGUAGE', 'LC_ALL', 'LC_CTYPE', 'LANG')
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
517 for name in filter(None, varnames):
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
518 locale = os.getenv(name)
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
519 if locale:
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
520 return '_'.join(filter(None, parse_locale(locale)))
41
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
521
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
522 def negotiate_locale(preferred, available, sep='_'):
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
523 """Find the best match between available and requested locale strings.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
524
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
525 >>> negotiate_locale(['de_DE', 'en_US'], ['de_DE', 'de_AT'])
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
526 'de_DE'
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
527 >>> negotiate_locale(['de_DE', 'en_US'], ['en', 'de'])
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
528 'de'
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
529
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
530 :param preferred: the list of locale strings preferred by the user
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
531 :param available: the list of locale strings available
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
532 :param sep: character that separates the different parts of the locale
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
533 strings
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
534 :return: the locale identifier for the best match, or `None` if no match
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
535 was found
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
536 :rtype: `str`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
537 """
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
538 for locale in preferred:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
539 if locale in available:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
540 return locale
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
541 parts = locale.split(sep)
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
542 if len(parts) > 1 and parts[0] in available:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
543 return parts[0]
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
544 return None
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
545
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
546 def parse_locale(identifier, sep='_'):
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
547 """Parse a locale identifier into a ``(language, territory, variant)``
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
548 tuple.
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
549
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
550 >>> parse_locale('zh_CN')
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
551 ('zh', 'CN', None)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
552
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
553 The default component separator is "_", but a different separator can be
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
554 specified using the `sep` parameter:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
555
74
d9c34d2f3d1d More explicit module-level function names in `babel.core`. Added `Locale.negotiate` class method.
cmlenz
parents: 55
diff changeset
556 >>> parse_locale('zh-CN', sep='-')
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
557 ('zh', 'CN', None)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
558
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
559 :param identifier: the locale identifier string
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
560 :param sep: character that separates the different parts of the locale
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
561 string
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
562 :return: the ``(language, territory, variant)`` tuple
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
563 :rtype: `tuple`
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
564 :raise `ValueError`: if the string does not appear to be a valid locale
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
565 identifier
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
566
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
567 :see: `IETF RFC 3066 <http://www.ietf.org/rfc/rfc3066.txt>`_
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
568 """
41
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
569 if '.' in identifier:
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
570 # this is probably the charset/encoding, which we don't care about
359ec55de578 Move function for determining the system default locale to `babel.core`, and make it available as a class method on `Locale`.
cmlenz
parents: 36
diff changeset
571 identifier = identifier.split('.', 1)[0]
3
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
572 parts = identifier.split(sep)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
573 lang, territory, variant = parts[0].lower(), None, None
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
574 if not lang.isalpha():
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
575 raise ValueError('expected only letters, got %r' % lang)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
576 if len(parts) > 1:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
577 territory = parts[1].upper().split('.', 1)[0]
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
578 if not territory.isalpha():
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
579 raise ValueError('expected only letters, got %r' % territory)
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
580 if len(parts) > 2:
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
581 variant = parts[2].upper().split('.', 1)[0]
e9eaddab598e Import of initial code base.
cmlenz
parents:
diff changeset
582 return lang, territory, variant
Copyright (C) 2012-2017 Edgewall Software