@designable/core中提供了GlobalRegistry,可用来做语言翻译、Icon svg 代码以及全局行为的管理,可以理解为 vuex、redux。

全局语言翻译

通过@designable/core提供的全局状态管理对象GlobalRegistry提供的registerDesignerLocales方法,可以进行全局语言 map 的管理。

代码示例

设计器最左侧的“左侧组合布局面板的翻译配置”如下

  1. GlobalRegistry.registerDesignerLocales({
  2. 'zh-CN': {
  3. panels: {
  4. Component: '组件',
  5. OutlinedTree: '大纲树',
  6. PropertySettings: '属性配置',
  7. History: '历史记录',
  8. },
  9. },
  10. 'en-US': {
  11. panels: {
  12. Component: 'Component',
  13. OutlinedTree: 'Outlined Tree',
  14. PropertySettings: 'Property Settings',
  15. History: 'History',
  16. },
  17. },
  18. 'ko-KR': {
  19. panels: {
  20. Component: '컴포넌트',
  21. OutlinedTree: '트리 노드',
  22. PropertySettings: '속성 설정',
  23. History: '기록',
  24. },
  25. },
  26. });

组件栏里组件的“分组名翻译配置”如下

  1. GlobalRegistry.registerDesignerLocales({
  2. 'zh-CN': {
  3. sources: {
  4. Inputs: '输入控件',
  5. Layouts: '布局组件',
  6. Arrays: '自增组件',
  7. Displays: '展示组件',
  8. },
  9. },
  10. 'en-US': {
  11. sources: {
  12. Inputs: 'Inputs',
  13. Layouts: 'Layouts',
  14. Arrays: 'Arrays',
  15. Displays: 'Displays',
  16. },
  17. },
  18. 'ko-KR': {
  19. sources: {
  20. Inputs: '입력',
  21. Layouts: '레이아웃',
  22. Arrays: '배열',
  23. Displays: '디스플레이',
  24. },
  25. },
  26. });

格式说明

其中对象的第一层 key 为“语言类型”,第二层为“分组名”,第三层为“具体的字段翻译字段”。

DesignerLocales 中部分“分组名”是内置的,比如前面案例提及的panels@designable/reactCompositePanel中内置的,需避免命名冲突

如果本意就是想修改它,重新通过GlobalRegistry.registerDesignerLocales函数配置即可。

根据语言设置取值

通过@designable/reactTextWidget组件可以翻译它内部的文本。

比方说,我们做了如下注册:

  1. GlobalRegistry.registerDesignerLocales({
  2. 'zh-CN': {
  3. product: {
  4. name: '名称',
  5. },
  6. },
  7. 'en-US': {
  8. product: {
  9. name: 'Name',
  10. },
  11. },
  12. });

通过setDesignerLanguage设置语言,通过TextWidget渲染内容:

  1. import { useDesigner, TextWidget } from '@designable/react';
  2. GlobalRegistry.setDesignerLanguage('zh-cn'); // 通常这部分时放在某个全局的组件里做“语言选择”即可,不需要每次都设置。
  3. export const ProductNameWidget = () => {
  4. return <TextWidget>product.name</TextWidget>;
  5. };

很多@designable/react提供的组件内部都使用了TextWidget组件来实现语言翻译。例如CompositePanel.ItemResourceWidget的 title 等字段。

内置的registerDesignerLocales配置

@designable/react提供的组件内置了以下内容。

  • global
  • panels
  • icons
  • operations

具体内容请移步github 源码,这里不做赘述。

Icon SVG 代码

在我们开始使用@designable/reactDesigner组件时,就会通过GlobalRegistry.registerDesignerIcons()全局注册 icon 的 svg 代码。

内置 Icon

具体内容请移步github 源码,这里不做赘述。

我们可以通过GlobalRegistry.getDesignerIcon()方便的获取到对应的 svg 代码。

代码示例

以下是添加自己的 icon 的示例。

  1. import {GlobalRegistry} from '@designable/core';
  2. // 全局注册icon
  3. GlobalRegistry.registerDesignerIcons({
  4. 'add':<svg viewBox="64 64 896 896">
  5. <path d="M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"></path>
  6. <path d="M176 474h672q8 0 8 8v60q0 8-8 8H176q-8 0-8-8v-60q0-8 8-8z"></path>
  7. </svg>;
  8. export const AddIconWidget = () => {
  9. return GlobalRegistry.getDesignerIcon('add'); // icon取值
  10. };

很多@designable/react提供的组件内部都使用了GlobalRegistry.getDesignerIcon()函数来实现 icon 图标的配置。例如CompositePanel.Item的 icon 字段等。