Не уверен, действительно ли ты хочешь это сделать.Локаль может быть глобальной (*) для программы, поэтому она может давать странное поведение в многопоточном контексте.Хуже того, в документации стандартной библиотеки сказано:
Стандарт C определяет языковой стандарт как свойство всей программы, которое может быть относительно дорогим для изменения.Вдобавок ко всему, некоторые реализации ломаются таким образом, что частые изменения локали могут вызвать дампы ядра.
Тем не менее, можно построить собственный менеджер контекста:
class LocaleManager:
def __init__(self, localename):
self.name = localename
def __enter__(self):
self.orig = locale.setlocale(locale.LC_CTYPE)
locale.setlocale(locale.LC_ALL, self.name)
def __exit__(self, exc_type, exc_value, traceback):
locale.setlocale(locale.LC_ALL, self.orig)
Пример для французской Windows:
>>> print(locale.getlocale())
('fr_FR', 'cp1252')
>>> with LocaleManager("C"):
print(locale.getlocale())
(None, None)
>>> print(locale.getlocale())
('fr_FR', 'cp1252')