Pergunta

Estamos usando um produto middleware de terceiros que nos permite escrever código em um interpretador Python incorporado, e que expõe uma API que pode pôr em. Algumas dessas chamadas de API nos permitem carregar vários tipos de arquivo, eo código de carregamento é implementado em C. carregamento de arquivos acontece em um segmento separado, e chama de volta em Python, quando os dados estão disponíveis. Até agora, tudo bem e dândi.

Estamos i14ing (heh) nosso produto, e uma coisa que gostaríamos de fazer é o formato de saída numérica de acordo com as configurações locais do usuário virada usuário. Assim, a partir de Python, fazemos isso:

import locale
locale.setLocale( locale.LC_ALL, '' )

Agora, isso funciona (em que os números voltados para o usuário são formatados corretamente para sua localidade). No entanto, se difere localidade do usuário da localidade padrão C, todos os arquivos que são posteriormente carregados irá retornar dados incorretos, presumivelmente porque toda a conversão de Cadeia de caracteres-float foi afetada, para baixo à direita para o metal.

Não podemos contornar isso implementando o carregamento de arquivos ciente local, por isso a nossa solução atual é definir apenas o local quando a formatação de saída para o usuário e, em seguida, configurá-lo de volta depois. Ou seja, algo como:

import locale
currentLocale = locale.getLocale( locale.LC_ALL )
locale.setLocale( locale.LC_ALL, '' )
displayNumbersToTheUser()
locale.setlocale( locale.LC_ALL, currentLocale )

Este parece ser um desajeitado pouco, e eu queria saber se esta é uma abordagem comum para a formatação de saída locale-aware para o usuário? Minha outra preocupação é que este é, obviamente, não thread-safe, então vamos presumivelmente ainda ter problemas se houver análise de arquivo ocorre em um segmento separado quando a localidade é alterada.

Qualquer informação sobre as melhores práticas é apreciado -. Eu não tenho muita experiência com esse tipo de coisa

Foi útil?

Solução

Como definir a localidade após vários segmentos começaram operacional pode ter resultados inesperados. A menos que eu pudesse descobrir uma abordagem mais sutil, eu provavelmente apenas dividir o carregamento do arquivo e da interface do usuário em processos separados, comunicando através de um tubo ou uma tomada de arquivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top