annotate 0.8.x/babel/core.py @ 159:fbc3f7b43577 stable

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