页面.常量
12003在本节中,我们将介绍如何在项目中使用常量,通过 pageHook 实现 UI 国际化。常量可以用于存储在多个页面中重复使用的文本或数据。通过使用 _constant_ui 配置常量,我们可以在页面中方便地引用这些常量。同时,我们将展示如何通过配置 language 实现国际化支持。
使用常量
首先,我们需要在
_constant_ui中配置常量。以下表格展示了一个名为constantDemo的常量,它包含一个版权声明文本。constantKey constantType pageId en zh constantDemo object all { "copyright": "Copyright © 2022 jianghujs.org" } { "copyright": "版权声明 © 2022 jianghujs.org" } 添加
/app/service/constantUi.js'use strict';const Service = require('egg').Service;class ConstantUiService extends Service {async getConstantUiMap() {const { jianghuKnex } = this.app;const { pageId } = this.ctx.packagePage;const { language } = this.app.config;const constantUiList = await jianghuKnex(`_constant_ui`).whereIn('pageId', ['all', pageId]).select();const constantUiMap = Object.fromEntries(constantUiList.map(obj => {const { constantKey } = obj;try {return [constantKey, JSON.parse(obj[language] || '{}')];} catch (error) {this.app.logger.error('getConstantUiMap', ` constantKey:${constantKey} `, error);return [constantKey, {}];}}));return constantUiMap;}}module.exports = ConstantUiService;
接下来,我们需要确保
demoPage页面的pageHook已经配置好了。pageId pageType pageHook demoPage showInMenu {"beforeHook":[{"field": "constantUiMap", "service": "constantUi", "serviceFunc": "getConstantUiMap"}]} 在页面中使用常量,我们可以通过
<$ constantUiMap.constantDemo.copyright $>引用常量中的版权声明文本。<div><h2><$ constantUiMap.constantDemo.copyright $></h3></div><script type="module">new Vue({el: '#app',template: '#app-template',vuetify: new Vuetify(),data: {},})</script>
常量国际化
为了实现国际化支持,我们需要在 /config/config.local.js 中配置 language。例如,如果我们希望使用英文,我们可以将 language 设置为 'en'。
language: 'en',
_constant_ui表结构
CREATE TABLE `_constant_ui` (`id` int(11) NOT NULL AUTO_INCREMENT,`constantKey` varchar(255) DEFAULT NULL,`constantType` varchar(255) DEFAULT NULL COMMENT '常量类型; object, array',`pageId` varchar(255) DEFAULT 'all' COMMENT '页面id',`desc` varchar(255) DEFAULT NULL COMMENT '描述',`en` text COMMENT '常量内容; object, array',`zh` text COMMENT '常量内容; object, array',`operation` varchar(255) DEFAULT 'insert' COMMENT '操作; insert, update, jhInsert, jhUpdate, jhDelete jhRestore',`operationByUserId` varchar(255) DEFAULT NULL COMMENT '操作者userId',`operationByUser` varchar(255) DEFAULT NULL COMMENT '操作者用户名',`operationAt` varchar(255) DEFAULT NULL COMMENT '操作时间; E.g: 2021-05-28T10:24:54+08:00 ',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `pageId_constantKey_unique` (`constantKey`, `pageId`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 15 DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMMENT = '常量表;'