PHPackages                             liwenyu/yii2-translate - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Localization &amp; i18n](/categories/localization)
4. /
5. liwenyu/yii2-translate

ActiveYii2-extension[Localization &amp; i18n](/categories/localization)

liwenyu/yii2-translate
======================

Yii2 货币替换消息源组件 - 自动替换翻译结果中的货币单位并填充货币符号

v1.1.2(5mo ago)029MITPHPPHP &gt;=7.0

Since Dec 3Pushed 5mo agoCompare

[ Source](https://github.com/liwenyu/yii2-translate)[ Packagist](https://packagist.org/packages/liwenyu/yii2-translate)[ RSS](/packages/liwenyu-yii2-translate/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (7)Dependencies (1)Versions (8)Used By (0)

Yii2 Translate - 货币替换消息源组件
==========================

[](#yii2-translate---货币替换消息源组件)

一个用于 Yii2 框架的国际化消息源组件，可以自动替换翻译结果中的货币单位并填充货币符号。

[![License](https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667)](LICENSE)[![PHP Version](https://camo.githubusercontent.com/3294914c61dc5d766feda54ef3f020110cb3200d82f3e63b5fe0fcf876cc7d59/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344372e302d626c75652e737667)](https://php.net)[![Yii2 Version](https://camo.githubusercontent.com/719edf17f915c708d027845e8e88da935a7c396c56953494d0633d6282376bb7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f796969322d253345253344322e302e302d626c75652e737667)](https://www.yiiframework.com/)

功能特性
----

[](#功能特性)

- ✅ 自动将翻译结果中的货币单位（如"元"、"yuan"等）替换为 `{currency}` 变量
- ✅ 自动将 `Yii::$app->params['currency_symbol']` 的值填充到 `{currency}` 中
- ✅ 支持中英文各种形式的货币单位（包括单独的货币单位 value）
- ✅ 支持翻译文件中单独的货币单位 value（如 `'currency' => '元'` 会被正确替换）
- ✅ 支持HTML标签前的货币单位替换（如 `:{user_gift}元 [
        'i18n' => [
            'translations' => [
                'app' => [
                    // 关键：将 class 替换为自定义类
                    'class' => 'liwenyu\translate\MessageSource',
                    'basePath' => '@app/messages',
                    'forceTranslation' => true,
                    'fileMap' => [
                        'app' => 'app.php',
                    ],
                ],
            ],
        ],
    ],
];
```

### 高级配置

[](#高级配置)

可以自定义货币单位列表、货币符号键名等：

```
return [
    'components' => [
        'i18n' => [
            'translations' => [
                'app' => [
                    'class' => 'liwenyu\translate\MessageSource',
                    'basePath' => '@app/messages',
                    'forceTranslation' => true,
                    'fileMap' => [
                        'app' => 'app.php',
                    ],
                    // 可选：自定义需要替换的货币单位
                    // 如果不配置，使用默认值（包含更多货币单位，见下方说明）
                    'currencyUnits' => [
                        '元',      // 中文：元
                        'yuan',    // 英文：yuan
                        'yuans',   // 英文复数：yuans
                        'Yuan',    // 首字母大写
                        'Yuans',   // 首字母大写复数
                        'dollar',  // 美元（英文）
                        'dollars', // 美元复数
                        'Dollar',  // 首字母大写
                        'Dollars', // 首字母大写复数
                        '$',       // 美元符号
                        'USD',     // 美元
                        'RMB',     // 人民币
                        'CNY',     // 中国元
                        '¥',       // 人民币符号
                    ],
                    // 可选：是否启用货币单位替换（默认 true）
                    'enableCurrencyReplace' => true,
                    // 可选：params 中货币符号的键名（默认 'currency_symbol'）
                    'currencySymbolKey' => 'currency_symbol',
                    // 可选：默认货币符号（当 params 中不存在时使用，默认 '￥'）
                    'defaultCurrencySymbol' => '￥',
                ],
            ],
        ],
    ],
];
```

### 配置货币符号

[](#配置货币符号)

在 `common/config/params.php`（或相应的配置文件中）配置货币符号：

```
return [
    'currency_symbol' => '￥',  // 或 '$', '€', '£' 等
];
```

工作原理
----

[](#工作原理)

1. **货币单位替换**：组件会扫描翻译结果，将配置的货币单位（如"元"、"yuan"等）替换为 `{currency}` 变量
2. **货币符号填充**：将 `{currency}` 变量替换为实际的货币符号（从 `Yii::$app->params['currency_symbol']` 读取）

### 示例

[](#示例)

#### 示例 1：翻译消息中包含货币单位

[](#示例-1翻译消息中包含货币单位)

假设翻译文件中有一条消息：

```
// messages/zh-CN/app.php
return [
    'balance_insufficient' => '余额不足，当前余额为 {balance} 元',
];
```

经过组件处理后，如果 `Yii::$app->params['currency_symbol']` 为 `'$'`，则最终输出：

```
"余额不足，当前余额为 {balance} $"

```

#### 示例 2：翻译文件中单独的货币单位 value

[](#示例-2翻译文件中单独的货币单位-value)

如果翻译文件中 value 就是单独的货币单位：

```
// messages/zh-CN/app.php
return [
    'currency' => '元',
];
```

当调用 `Yii::t('app', 'currency')` 时，组件会自动将 `'元'` 替换为配置的货币符号（如 `'￥'`），最终输出：

```
"￥"

```

#### 示例 3：各种场景

[](#示例-3各种场景)

- `'100元'` → `'100￥'`（数字后的货币单位）
- `'余额500元'` → `'余额500￥'`（数字后的货币单位）
- `'元'` → `'￥'`（单独的货币单位）
- `':{user_gift}元'`（HTML标签前的货币单位）
- `'元素'` → `'元素'`（不会误替换，因为"元"后面不是标点或结尾）
- `'100 yuan'` → `'100 ￥'`（英文货币单位）

配置选项
----

[](#配置选项)

选项类型默认值说明`currencyUnits`array包含多种货币单位（见代码注释）需要替换的货币单位列表`enableCurrencyReplace`bool`true`是否启用货币单位替换`currencySymbolKey`string`'currency_symbol'`params 中货币符号的键名`defaultCurrencySymbol`string`'￥'`默认货币符号（当 params 中不存在时使用）**默认 `currencyUnits` 列表**：

- 中文：`'元'`
- 英文：`'yuan'`, `'yuans'`, `'Yuan'`, `'Yuans'`
- 美元：`'dollar'`, `'dollars'`, `'Dollar'`, `'Dollars'`, `'$'`, `'USD'`
- 人民币：`'RMB'`, `'CNY'`, `'¥'`

注意事项
----

[](#注意事项)

1. 组件使用正则表达式进行替换，对于中文使用特定的匹配规则（支持字符串开头的货币单位），对于英文使用单词边界 `\b`，确保不会误替换其他文本
2. **支持单独的货币单位**：如果翻译文件中的 value 就是单独的货币单位（如 `'currency' => '元'`），会被正确替换为货币符号
3. **支持HTML标签前的货币单位**：如果货币单位后面是HTML标签（如 ``），会被正确替换（如 `:{user_gift}元 [
    '元',
    'yuan',
    'RMB',
    'CNY',
    'dollar',  // 添加美元
    'dollars', // 添加美元复数
],
```

### Q: 如何禁用货币替换功能？

[](#q-如何禁用货币替换功能)

A: 设置 `enableCurrencyReplace` 为 `false`：

```
'enableCurrencyReplace' => false,
```

### Q: 支持哪些货币符号？

[](#q-支持哪些货币符号)

A: 支持任何字符串，包括 `￥`、`$`、`€`、`£`、`¥` 等，只需在 `params` 中配置即可。

### Q: 翻译文件中的 value 就是单独的货币单位（如 `'currency' => '元'`）会被替换吗？

[](#q-翻译文件中的-value-就是单独的货币单位如-currency--元会被替换吗)

A: 是的！从 1.1.1 版本开始，组件支持替换翻译文件中单独的货币单位 value。例如：

```
// messages/zh-CN/app.php
return [
    'currency' => '元',
];
```

当调用 `Yii::t('app', 'currency')` 时，会自动将 `'元'` 替换为配置的货币符号（如 `'￥'`）。

### Q: HTML标签前的货币单位（如 `:{user_gift}元 ':{user_gift}元
