Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在web应用程序中使用Python语言环境或等效语言环境?_Python_Django_Internationalization - Fatal编程技术网

在web应用程序中使用Python语言环境或等效语言环境?

在web应用程序中使用Python语言环境或等效语言环境?,python,django,internationalization,Python,Django,Internationalization,Python的语言环境实现似乎希望从系统设置中读取语言环境,或者通过setlocale调用进行设置。这两种方法都不适用于我,因为我希望在web应用程序中使用这些功能,其中所需的区域设置是用户的区域设置 还有一些警告让整个事情变得可怕: 除此之外,还有一些实现 以这样一种方式被破坏以至于频繁 区域设置更改可能导致核心转储。 这让现场有些痛苦 正确使用 及 打电话通常不是个好主意 某些库例程中的setlocale(), 因为作为副作用,它会影响 整个程序 那么,在web应用程序中是否有合理的语言环境

Python的语言环境实现似乎希望从系统设置中读取语言环境,或者通过setlocale调用进行设置。这两种方法都不适用于我,因为我希望在web应用程序中使用这些功能,其中所需的区域设置是用户的区域设置

还有一些警告让整个事情变得可怕:

除此之外,还有一些实现 以这样一种方式被破坏以至于频繁 区域设置更改可能导致核心转储。 这让现场有些痛苦 正确使用

打电话通常不是个好主意 某些库例程中的setlocale(), 因为作为副作用,它会影响 整个程序

那么,在web应用程序中是否有合理的语言环境替代方案?是这样还是有其他选择?我正在寻找的东西,将处理货币以及日期和数字


[更新]澄清一下,我最感兴趣的是各种语言环境的日期、数字和货币格式。

如果您使用的是货币、日期和数字,您最好的方法是在浏览器传递给您的语言环境上设置语言环境。Python文档中有很多zomgz警告,用于真正的非彩色平台;其中大部分可以忽略

“频繁的区域设置更改”应该无关紧要,除非我遗漏了什么


您没有做消息目录或任何花哨的事情,所以请坚持使用Python提供的内容。

不要使用setlocale。

检查它是如何在中完成的。看起来他们使用gettext库的类api,而不使用setlocale函数,我敢打赌这是有原因的


他们手动存储每个线程的实现方式(gettext函数和_ActiveDictionary)。

locale
对于任何需要支持多个locale的应用程序来说都是不好的——对于那些应用程序(基本上是任何服务器端应用程序,包括web应用程序),它的设计非常糟糕。在可行的情况下,这是一个非常优越的解决方案——高质量的i18n/L10n支持、速度和灵活性(缺点:虽然ICU的文档很好,但PyICU的文档不太好;-)。唉,并不总是允许您部署自己的扩展…:-(


特别是,我仍然在为应用引擎应用寻找一个可靠的i18n/L10n解决方案——“翻译”本身是最简单的问题(您可以切换到正确的模板集),问题是还有许多其他L10n方面(ICU非常支持的方面,例如排序规则等).我想前面提到的是唯一合理的起点。

Django的i18n框架解决了
setlocale()的缺点
不使用它。这样,区域设置是根据每个请求设置的,如果使用
LocaleMiddleware
它可以设置为根据UserAgent
Accept Language
设置进行更改。请参阅。

设置区域设置不是线程安全的。在任何多线程web服务器上,为一个请求设置区域设置将干扰另一个请求的区域设置,w非常奇怪的结果。谢谢zgoda。我正在寻找locale提供的一些功能,特别是货币、名称和数字格式。我在django文档中没有看到这些功能。它们属于l10n(本地化),不是i18n。我可以推荐Babel-,它有很好的Django集成,比python内置的locale模块准确得多。这个链接已经坏了。在python>=3.7的情况下,它在2019年仍然有效吗?