# Normalize the locale name and extract the encoding and modifier
if isinstance(localename, _unicode):
localename = localename.encode('ascii')
- code = localename.lower()
+ code = localename.translate(_ascii_lower_map)
if ':' in code:
# ':' is sometimes used as encoding delimiter.
code = code.replace(':', '.')
#print('lookup without modifier succeeded')
if '@' not in code:
return code + '@' + modifier
- if code.split('@', 1)[1].lower() == modifier:
+ if code.split('@', 1)[1].translate(_ascii_lower_map) == modifier:
return code
#print('second lookup failed')
if '@' not in code:
return _replace_encoding(code, encoding) + '@' + modifier
code, defmod = code.split('@', 1)
- if defmod.lower() == modifier:
+ if defmod.translate(_ascii_lower_map) == modifier:
return _replace_encoding(code, encoding) + '@' + defmod
return localename
# Issue #1813: setting and getting the locale under a Turkish locale
oldlocale = locale.getlocale()
self.addCleanup(locale.setlocale, locale.LC_CTYPE, oldlocale)
- try:
- locale.setlocale(locale.LC_CTYPE, 'tr_TR')
- except locale.Error:
+ for loc in ('tr_TR', 'tr_TR.UTF-8', 'tr_TR.ISO8859-9'):
+ try:
+ locale.setlocale(locale.LC_CTYPE, loc)
+ break
+ except locale.Error:
+ continue
+ else:
# Unsupported locale on this system
self.skipTest('test needs Turkish locale')
loc = locale.getlocale()
except Exception as e:
self.fail("Failed to set locale %r (default locale is %r): %r" %
(loc, oldlocale, e))
- print("set locale %r (default locale is %r)" % (loc, oldlocale))
self.assertEqual(loc, locale.getlocale())
def test_normalize_issue12752(self):
Library
-------
+- Issue #20086: Restored the use of locale-independing mapping instead of
+ locale-depending str.lower() in locale.normalize().
+
- Issue #20246: Fix buffer overflow in socket.recvfrom_into.
- Issue #19082: Working SimpleXMLRPCServer and xmlrpclib examples, both in