首页 > 解决方案 > Django:L10N 和 en-IN

问题描述

我在谷歌上搜索了很多以找到与 Django 的L10N设置相关的问题的解决方案,en-IN但没有发现任何令人满意的方法。所以,终于回到这里给朋友们。

我正在努力将货币格式化为印度数字格式化标准。接下来是NUMBER_GROUPING = (3, 2, 0)LANGUAGE_CODE = 'en-IN'

我当前的settings.py文件配置是:

LANGUAGE_CODE = 'en-IN'
USE_I18N = False
USE_L10N = True
USE_THOUSAND_SEPARATOR = True
NUMBER_GROUPING = (3, 2, 0)

也试过设置:

USE_I18N = True

在模板文件中我使用:

{% load humanize %}
{# where object.price value is 524300 #}
<p>
{{ object.price }}
<!-- and -->
{{ object.price|intcomma }}
</p>

然而,这输出:

524,300而不是5,24,300

在此处输入图像描述

我在做什么错,这正在停止 Django 以遵循LANGUAGE_CODE,USE_L10NNUMBER_GROUPING

它适用于hi-IN

如果我改变LANGUAGE_CODE = 'hi-IN',我得到格式化货币的预期输出为5,24,300。但问题是我们的网站不是印地语,而是印地语本地化的印度英语。真是一团糟 :(

Django Docs甚至显示语言示例en_IN。这清楚地告诉它会像我预期的那样格式化数字。但这对我不起作用。

设置LANGUAGE_CODE = 'en_IN'会引发错误。不接受下划线而是连字符。

我当前的系统区域设置如下:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_IN.UTF-8
LC_TIME=en_IN.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_IN.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_IN.UTF-8
LC_NAME=en_IN.UTF-8
LC_ADDRESS=en_IN.UTF-8
LC_TELEPHONE=en_IN.UTF-8
LC_MEASUREMENT=en_IN.UTF-8
LC_IDENTIFICATION=en_IN.UTF-8
LC_ALL=

任何想法或建议将不胜感激!

标签: pythondjango

解决方案


When "formats" are controlled by templates, the result depends not only on Django settings but also on the system and the browser settings

The best thing to do is to send it as a pre-formated string to the html template :

pip install Babel

from babel.numbers import format_currency
format_currency(524300, 'INR', locale='en_IN')

Result what ever are Django and system and Browser settings :

₹5,24,300.00

推荐阅读