Path: csiph.com!usenet.pasdenom.info!news.redatomik.org!newsfeed.xs4all.nl!newsfeed2.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.006 X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'else:': 0.03; 'broken': 0.04; 'output': 0.05; 'sys': 0.07; '"__main__":': 0.09; '__name__': 0.09; 'locale': 0.09; 'wrapper': 0.09; 'python': 0.11; 'def': 0.12; 'windows': 0.15; '@property': 0.16; 'bug:': 0.16; 'bugs.': 0.16; 'lang': 0.16; 'example': 0.22; 'import': 0.22; 'print': 0.22; 'skip:l 30': 0.24; 'code': 0.31; '"")': 0.31; 'libraries': 0.31; 'class': 0.32; 'thanks!': 0.32; 'worked': 0.33; 'skip:_ 10': 0.34; 'skip:s 30': 0.35; 'but': 0.35; 'done': 0.36; 'charset:us-ascii': 0.36; 'hi,': 0.36; 'skip:o 20': 0.38; 'sometimes': 0.38; 'system,': 0.38; 'to:addr:python-list': 0.38; 'to:addr:python.org': 0.39; 'skip:p 20': 0.39; 'received:98.137': 0.60; 'received:gq1.yahoo.com': 0.68; 'received:mail.gq1.yahoo.com': 0.68; 'received:98.136': 0.69; 'apart': 0.72; 'received:bullet.mail.gq1.yahoo.com': 0.84; 'us?': 0.84; 'medicine,': 0.91; 'education,': 0.96 X-Yahoo-Newman-Property: ymail-3 X-Yahoo-Newman-Id: 548317.62422.bm@omp1025.mail.gq1.yahoo.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024; t=1425296569; bh=dhEaqPlytMUkbO2to6ZUZdc35FrcVwLSAe4ZRczzeIg=; h=Message-ID:Date:From:Subject:To:MIME-Version:Content-Type; b=wtWrPvEv8OBfurncNDHqo0Lu0dbEuzn7vT3UTxqy9cH99RwLN0shBXRTKZJaVNtTCPp05vAuqBsVfWogLZf61FOIzcnhL6dzCj55QVqJaHuSOBZCA5TB0JRGvVFbYFaQhSqF8Q31XomAVYUROjBdwF0jUGn3BCc2gV2oj3BOGJI= X-YMail-OSG: Mgn9rYcVM1lWURA63FCVlB7lyUCjLDVc8aEdj0PVJKG04q7 XtSy6f2jXkJjlhYE1vlGUf9kSeylSvNdfpiUWJQVjmDvavBn9kD5xVMmS0A. TUYgqybOm_uMb2CPkqUrt1BjHN0fLg0UO6YObobglvtaV1OTRF58wEM6gFs9 knrLQcoWU0v7la1POJw.DAjTaoNx3pOYeXr2SWCvPNHSrsBAhwoRksZigrJj DzHLj_ABybiFkW_HOOdg01HzxqwafQ4kRHCqd7859OiBqjkrY7N8lZ4GLG3B _vQ6IQNX68Cpu8JZkux3iCbL4yrEe6_PO1Fr6oUGUmR1fTD3sBtmwaBO6dT6 npzUvZEtddsyx55Z1ptvk8BYUGppLleK9nlSFsfyJkomLMFsJCfakjN3fk5M EHnNHZTwcZMUcmjOsMxdDHM4B0B4cAbHNV2mkceQbbeEDhDU8sCW2PQcQ8HM D_vpv80UmZFhWNndOipoRaCAZ4myrXCs_7TKthGUaRc666q8D6Hqrh19K4C. 9Ue0uX9qfHbuwri6D9lDSaRYv5duvzH6oyut.en4ig8Og59e.BI81lh1LSIj pwps- X-Rocket-MIMEInfo: 002.001, SGksDQoNClRoZSBQeXRob24gbG9jYWxlIHN0YW5kYXJkIGxpYnJhcmllcyBoYXMgc29tZSBvZGRpdGllcyBhbmQgKGxvbmctc3RhbmRpbmcpIGJ1Z3MuDQpFeGFtcGxlIG9kZGl0eTogU0VUbG9jYWxlICpyZXR1cm5zKiBhIGxvY2FsZTsgZ2V0bG9jYWxlIG91dHB1dCBjYW5ub3QgYWx3YXlzIGJlIGNvbnN1bWVkIGJ5IHNldGxvY2FsZS4gRXhhbXBsZSBidWc6IHJlc2V0bG9jYWxlIGZhaWxzIGluIFdpbmRvd3MuIFdoYXQgaXMgeW91ciBvcGluaW9uIGFib3V0IHRoZSB3b3JrLWFyb3VuZCBjb2RlIGJlbG93PyABMAEBAQE- X-Mailer: YahooMailClassic/394 YahooMailWebService/0.8.203.740 Date: Mon, 2 Mar 2015 03:42:49 -0800 From: Albert-Jan Roskam Subject: Pythonic locale To: Python MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.19 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 74 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1425296685 news.xs4all.nl 2962 [2001:888:2000:d::a6]:58245 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:86721 Hi, The Python locale standard libraries has some oddities and (long-standing) bugs. Example oddity: SETlocale *returns* a locale; getlocale output cannot always be consumed by setlocale. Example bug: resetlocale fails in Windows. What is your opinion about the work-around code below? import sys import os import locale as locale_ locale_.setlocale(locale_.LC_ALL, "") class PythonicLocale(object): LC_ALL = locale_.LC_ALL LC_CTYPE = locale_.LC_CTYPE def __init__(self, failsafe=False): self.failsafe = failsafe @property def locale(self): """Partial wrapper for locale in standard library""" # LANG and LC_ALL sometimes not set if not sys.platform.startswith("win"): if locale_.getlocale()[0] is None and self.failsafe: os.environ["LANG"] = "en_US" os.environ["LC_ALL"] = "en_US.UTF-8" # getlocale output cannot be consumed by setlocale return locale_.setlocale(locale_.LC_ALL) @locale.setter def locale(self, category_and_locale_tuple): locale_.setlocale(*category_and_locale_tuple) @locale.deleter def locale(self): if sys.platform.startswith("win"): # resetlocale() is broken in Windows locale_.setlocale(locale_.LC_ALL, "") else: locale_.resetlocale() def getdefaultlocale(self): return locale_.getdefaultlocale() if __name__ == "__main__": locale = PythonicLocale() # getter print locale.locale # setter locale.locale = (locale.LC_ALL, "german") print locale.locale # deleter del locale.locale # check if deleter worked print locale.locale Thanks! Regards, Albert-Jan ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ All right, but apart from the sanitation, the medicine, education, wine, public order, irrigation, roads, a fresh water system, and public health, what have the Romans ever done for us? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~