在网站运营中,尤其是面对全球用户时,内容的本地化体验至关重要。其中,动态调整计算结果的输出格式,比如根据用户所在国家或地区显示不同的货币格式,是一个常见的需求。安企CMS(AnQiCMS)作为一款灵活的内容管理系统,提供了强大的模板引擎和丰富的标签/过滤器,让我们可以优雅地实现这一功能。
要实现这个目标,我们主要依赖安企CMS模板引擎的几个核心能力:获取当前站点或用户的语言/地区信息、条件判断和数值格式化。
获取当前站点或用户的语言/地区信息
安企CMS在多语言支持方面表现出色,这为我们动态调整内容提供了基础。系统会自动识别当前访问站点的语言设置,或者用户通过语言切换器选择的语言。在模板中,我们可以通过 system 标签来获取当前站点的语言代码。
例如,要获取当前站点的语言设置,可以这样做:
{% set current_lang = "" %}
{% system current_lang with name="Language" %}
{# 此时,current_lang 变量将包含当前站点的语言代码,例如 "en-US", "zh-CN", "ja-JP" 等 #}
这里,我们首先定义了一个空变量 current_lang,然后使用 system 标签将其赋值为当前站点的语言代码。这个语言代码将是我们进行后续判断的关键依据。
动态调整计算结果输出格式的核心思路
有了当前语言/地区信息,接下来就是将这个信息应用到计算结果(例如商品价格)的输出上。核心思路是:
- 获取原始数值: 比如从文档详情中获取商品价格。
- 判断当前语言/地区: 使用
if逻辑判断标签,根据current_lang的值进行分支。 - 应用格式化: 针对不同的语言/地区,组合使用货币符号和数值格式化过滤器,输出符合当地习惯的货币格式。
实战:产品价格的货币格式化
假设我们有一个产品详情页面,其中需要显示产品的价格。产品的价格存储在 archive 对象的 Price 字段中。
1. 基本价格显示
最简单的显示方式是直接输出价格,但通常不带货币符号和合适的格式:
产品价格:{{ archive.Price }}
2. 根据语言/地区动态格式化
现在,我们结合获取到的语言信息,来为产品价格添加动态的货币格式。我们将利用 floatformat 过滤器来控制小数位数,并手动添加货币符号。
{% set current_lang = "" %}
{% system current_lang with name="Language" %}
<div>
产品价格:
{% if current_lang == "en-US" %}
$ {{ archive.Price|floatformat:2 }} {# 美国,显示美元符号,保留两位小数 #}
{% elif current_lang == "fr-FR" or current_lang == "de-DE" %}
{{ archive.Price|floatformat:2 }} € {# 欧洲,显示欧元符号,保留两位小数,符号在数字后 #}
{% elif current_lang == "ja-JP" %}
¥ {{ archive.Price|floatformat:0 }} {# 日本,显示日元符号,不保留小数 #}
{% elif current_lang == "zh-CN" %}
¥ {{ archive.Price|floatformat:2 }} {# 中国大陆,显示人民币符号,保留两位小数 #}
{% else %}
$ {{ archive.Price|floatformat:2 }} {# 默认格式,例如国际通用美元格式 #}
{% endif %}
</div>
在上述代码中:
- 我们首先获取了当前站点的语言代码并存储在
current_lang变量中。 - 接着,使用
if...elif...else结构,根据current_lang的值进行判断。 - 对于不同的语言,我们调整了货币符号的位置、类型以及小数位的显示。例如,日本通常不显示小数位,而欧美地区习惯保留两位小数。
floatformat:2表示将浮点数格式化为保留两位小数。floatformat:0则表示不保留小数。- 我们还设置了一个
else分支,作为所有未明确指定语言的默认显示格式。
3. 将格式化逻辑封装为辅助宏 (Macro)
如果网站中有很多地方需要用到货币格式化,我们可以将上述逻辑封装成一个宏(macro),提高代码的复用性和可维护性。
首先,在一个单独的模板文件(例如 partial/currency_macros.html)中定义宏:
{# partial/currency_macros.html #}
{% macro format_price(price_value, lang_code) %}
{% if lang_code == "en-US" %}
$ {{ price_value|floatformat:2 }}
{% elif lang_code == "fr-FR" or lang_code == "de-DE" %}
{{ price_value|floatformat:2 }} €
{% elif lang_code == "ja-JP" %}
¥ {{ price_value|floatformat:0 }}
{% elif lang_code == "zh-CN" %}
¥ {{ price_value|floatformat:2 }}
{% else %}
$ {{ price_value|floatformat:2 }} {# 默认格式 #}
{% endif %}
{% endmacro %}
然后,在需要使用的地方导入并调用这个宏:
{% import "partial/currency_macros.html" as currency_helpers %}
{% set current_lang = "" %}
{% system current_lang with name="Language" %}
<div>
产品价格:{{ currency_helpers.format_price(archive.Price, current_lang) }}
</div>
这样,当我们需要在其他地方显示价格时,只需调用 currency_helpers.format_price 宏即可,代码将