Space Plugin SDKSpace Plugin SDK
首页
概述
  • 中文简体
  • English
首页
概述
  • 中文简体
  • English
  • 插件SDK

    • 概述
    • 开始
    • 术语
    • 基础
    • 清单
    • 国际化
    • 接收的事件
    • 发送的事件
    • 注册程序
    • 属性检查器
    • 风格指南
    • 更新日志
  • 示例

    • 计数器
    • 计时器
    • 数字展示
    • 时间
  • 支持

    • 帮助和错误报告

国际化

Stream Dock 支持多语言。

清单包含多个可以国际化的字符串。您可以在位于manifest.json旁边的 JSON en.json

{
  "Description": "Test", 
  "Name": "Test", 
  "Category": "Test", 
  "com.mirabox.demo.action1": {
    "Name": "Test", 
    "Tooltip": "Test"
  },
  "Localization": {
    "test": "Test"
  }
}

请注意,如果您不提供本地化字符串,则将使用manifest.json文件中的字符串。Stream Dock 支持以下语言:

  • 简体中文: zh_CN.json

  • 德语: de.json

  • 英语: en.json

  • 法语: fr.json

  • 日语: ja.json

  • 韩语: ko.json

  • 西班牙语: es.json

您还可以在 JSON 文件中提供自己的字符串。

这些文件必须保存在插件的目录中。您将在模板插件中找到一个示例。下面是该文件的一个示例en.json

如何在 Property Inspector 中自动本地化字符串

{
  "Description": "Test", 
  "Name": "Test", 
  "Category": "Test", 
  "com.mirabox.demo.action1": {
    "Name": "Test", 
    "Tooltip": "Test"
  },
  "Localization": {
    "test": "Test"
  }
}

对于普通的 js 模板如果您在插件中需要以国际化形式显示这些字符串,您只需要将Localization中对应的键直接写在您属性检查器的index.js中并设置$local = true,SDK会自动翻译

 if (!$local) return;
    $lang = await new Promise(resolve => {
        const req = new XMLHttpRequest();
        req.open('GET', `../../${JSON.parse(app).application.language}.json`);
        req.send();
        req.onreadystatechange = () => {
            if (req.readyState === 4) {
                resolve(JSON.parse(req.responseText).Localization);
            }
        };
    });

    // 遍历文本节点并翻译所有文本节点
    const walker = document.createTreeWalker($dom.main, NodeFilter.SHOW_TEXT, (e) => {
        return e.data.trim() && NodeFilter.FILTER_ACCEPT;
    });
    while (walker.nextNode()) {
        console.log(walker.currentNode.data);
        walker.currentNode.data = $lang[walker.currentNode.data];
    }
    // placeholder 特殊处理
    const translate = item => {
        if (item.placeholder?.trim()) {
            console.log(item.placeholder);
            item.placeholder = $lang[item.placeholder];
        }
    };
    $('input', true).forEach(translate);
    $('textarea', true).forEach(translate);

对于 Vue 模板需要在src/hooks/i18n.ts中定义这些字符串,并在需要使用的地方手动引入useI18nStore并使用

export const useI18nStore = () => {
  const language = window.argv[3].application.language;
  const localString = {
    en: {
      test: 'test'
    },
    zh_CN: {
      test: '测试'
    }
  };
  return localString[language] || localString['en'];
};

示例:

<script setup lang="ts">
  import { usePropertyStore, useWatchEvent } from '@/hooks/property';
  import { useI18nStore } from '@/hooks/i18n';

  const i18n = useI18nStore();
  const property = usePropertyStore();
  useWatchEvent({
    didReceiveSettings(data) {},
    sendToPropertyInspector(data) {}
  });
</script>

<template>
  <div>{{ i18n.test }}</div>
</template>
Last Updated:
Contributors: Heart
Prev
清单
Next
接收的事件