Мы используем сторонний промежуточный программный продукт, который позволяет нам писать код во встроенном интерпретаторе Python и предоставляет API, к которому мы можем обращаться. Некоторые из этих вызовов API позволяют нам загружать различные типы файлов, а код загрузки реализован на C. Загрузка файлов происходит в отдельном потоке и вызывается обратно в Python, когда данные доступны. Пока все хорошо и ладно.
Мы занимались i14ing (хе-хе) нашим продуктом, и одна вещь, которую мы хотели бы сделать, это отформатировать числовой вывод, ориентированный на пользователя, в соответствии с настройками локали пользователя. Итак, из Python мы делаем это:
import locale
locale.setLocale( locale.LC_ALL, '' )
Теперь это работает (в том смысле, что числа, обращенные к пользователю, отформатированы правильно для их локали). Однако, если локаль пользователя отличается от локали C по умолчанию, любые файлы, которые впоследствии загружаются, будут возвращать неверные данные, предположительно потому, что было затронуто все преобразование строки в число с плавающей запятой, вплоть до металла.
Мы не можем обойти это, реализовав загрузку файлов с учетом локали, поэтому наш текущий обходной путь — установить локаль только при форматировании вывода для пользователя, а затем снова установить ее обратно. То есть что-то вроде:
import locale
currentLocale = locale.getLocale( locale.LC_ALL )
locale.setLocale( locale.LC_ALL, '' )
displayNumbersToTheUser()
locale.setlocale( locale.LC_ALL, currentLocale )
Это кажется немного неуклюжим, и мне было интересно, является ли это распространенным подходом к форматированию вывода с учетом локали для пользователя? Другая моя проблема заключается в том, что это, очевидно, не потокобезопасно, поэтому мы, по-видимому, по-прежнему будем получать проблемы, если какой-либо синтаксический анализ файла будет происходить в отдельном потоке при изменении локали.
Приветствуется любая информация о передовой практике - у меня нет большого опыта в подобных вещах.