【问题标题】:Can't get Django localization to work无法让 Django 本地化工作
【发布时间】:2011-03-21 07:01:36
【问题描述】:

我已经搜索了几个线程和错误报告,但找不到解决方案。

我将 Django 项目的语言环境更改为 pt-br,但没有任何区别。我排除了所有输入字段和输出以本地化日期和数字,特别是 DECIMAL_SEPARATORTHOUSAND_SEPARATOR,包括在管理 API 中。但是那里的日期继续显示为yyyy-mm-dd 和小数点分隔符“,”在输入时会产生错误。

我做了所有我发现的事情:更改设置、添加本地化中间件类、启用 USE_I18N 和 USE_L10N、尝试手动强制 setlocale 等等。这是我的 settings.py 的一瞥:

LANGUAGE_CODE = 'pt-br'
USE_I18N = True
USE_L10N = True

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.transaction.TransactionMiddleware',
)

DATE_FORMAT = 'd/m/Y'
SHORT_DATE_FORMAT = 'd/m/Y'
DATE_INPUT_FORMATS = ('%d/%m/%Y', '%d/%m/%y', '%Y-%m-%d')
DECIMAL_SEPARATOR = ','
THOUSAND_SEPARATOR = '.'

我在巴西葡萄牙语 Windows 上运行的 Python 控制台输出这个是不是很奇怪?

>>> locale.setlocale(locale.LC_ALL, ('pt_BR', 'cp1252'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python25\lib\locale.py", line 478, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

关于我忘记尝试的任何想法?

【问题讨论】:

    标签: python django locale


    【解决方案1】:

    Windows 使用不同的区域设置 ID。以下应该可以工作(从Microsoft's site 的表格中获得):

    In [15]: locale.setlocale(locale.LC_ALL, 'Portuguese_Brazil')
    Out[15]: 'Portuguese_Brazil.1252'
    

    【讨论】:

    • 好吧,setlocale 确实有效,但它并没有改变 Django 中的任何行为。
    【解决方案2】:

    根据Django Track,如果USE_L10N 设置为TrueINPUT_FORMATS 设置将被忽略。

    【讨论】:

      【解决方案3】:

      可能有点OT,但我想补充一下我对网络翻译的看法。

      我强烈建议使用Bablic。这是一种完全客户端的翻译方法。他们跟踪显示在您网站上的字符串,构建“字典”,并通知您有新的或未翻译的文本。它们还可以与基于云的翻译提供商集成,因此即使是新提交的内容也几乎可以立即翻译,而无需您跟踪或对服务器端代码或配置进行任何更新。

      我喜欢你不需要做整个收集字符串->发送-mo-file-to-translators->编译->部署->调试->重复。作为一名网络开发人员,这个解决方案对我来说是零摩擦。

      【讨论】:

        【解决方案4】:

        在某些情况下,服务器上未启用,您需要运行此命令来启用语言环境(在我的服务器 Ubuntu 示例中)

        sudo locale-gen pt_BR
        

        然后运行

        python -c "import locale; locale.setlocale(locale.LC_ALL, 'pt_BR')"
        

        【讨论】:

          猜你喜欢
          • 2016-04-14
          • 1970-01-01
          • 2013-05-09
          • 1970-01-01
          • 1970-01-01
          • 2018-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多