# 货币格式化

> 用 money 系列过滤器在 Shoplazza 主题中格式化价格：展示货币符号或代码，并在多币种店铺下保持金额正确。

价格字段以纯数字存储。用 money 系列过滤器把它们格式化成货币字符串，让顾客看到符合预期的价格。本指南介绍如何格式化价格、展示货币代码，以及支持多货币。

## 格式化价格

`product.price`、`variant.price` 等价格字段是以店铺主单位表示的数字——例如 `33`，而不是 `3300`。务必用 money 过滤器输出价格，不要直接输出原始值。

用 [`money`](/zh-CN/docs/theme/references/liquid/filters/money)（或其别名 `money_with_symbol`）格式化带货币符号的价格：

```liquid title="代码"
{{ product.price | money }}
{{ product.price | money_with_symbol }}
```

```html title="输出"
$33.00
$33.00
```

需要不带符号的数字时（例如自定义排版），用 [`money_without_currency`](/zh-CN/docs/theme/references/liquid/filters/money)：

```liquid title="代码"
{{ product.price | money_without_currency }}
```

```html title="输出"
33.00
```

## 展示货币代码

`money_with_symbol` 只输出符号，而多种货币会共用同一个符号——美元和加元都用 `$`，人民币和日元都用 `¥`。为避免在购物车等总额处产生歧义，在金额旁同时展示货币代码。

用 [`cart.currency`](/zh-CN/docs/theme/references/liquid/objects/cart)——它是顾客当前正在查看的货币，与 `money_with_symbol` 渲染的符号一致：

```liquid title="代码"
{{ cart.total_price | money_with_symbol }} {{ cart.currency }}
```

```html title="输出"
¥225.00 CNY
```

:::warning
[shop object](/zh-CN/docs/theme/references/liquid/objects/shop) 的 `shop.currency` 和 `shop.currency_code` 返回店铺的**基准**货币，而非顾客正在查看的货币。不要用它们给展示价格标注币种：一旦[多货币](#支持多货币)应用换算了金额，`money_with_symbol` 显示展示货币（`¥`），而 `shop.currency_code` 仍返回基准货币（`USD`），配出来的标签会自相矛盾，如 `¥225.00 USD`。
:::

## 支持多货币

多货币展示由「多货币设置」应用提供，商家从应用商店安装，**不属于** theme 本身。安装与配置见[多货币设置插件](https://helpcenter.shoplazza.com/hc/zh-cn/articles/4411633235865-%E5%A4%9A%E8%B4%A7%E5%B8%81%E8%AE%BE%E7%BD%AE%E6%8F%92%E4%BB%B6)。应用启用后：

* 启用插件后，价格默认会根据顾客的语言自动切换；商家也可在主题编辑器中把货币切换器加到 header，让顾客手动选择。
* 你现有的 money 过滤器会自动以顾客选择的（展示）货币渲染价格——符号和换算后的金额都会更新。你无需改动 Liquid，也无需自行换算。

例如，同一句 `{{ product.price | money_with_symbol }}`，对美国顾客输出 `$33.00`，顾客切换到 CNY 后则输出 `¥224.08`。
