feat(i18n): 统一国际化系统架构,支持插件独立翻译 (#301)
* feat(i18n): 统一国际化系统架构,支持插件独立翻译 ## 主要改动 ### 核心架构 - 增强 LocaleService,支持插件命名空间翻译扩展 - 新增 editor-runtime/i18n 模块,提供 createPluginLocale/createPluginTranslator - 新增 editor-core/tokens.ts,定义 LocaleServiceToken 等服务令牌 - 改进 PluginAPI 类型安全,使用 ServiceToken<T> 替代 any ### 编辑器本地化 - 扩展 en.ts/zh.ts 翻译文件,覆盖所有 UI 组件 - 新增 es.ts 西班牙语支持 - 重构 40+ 组件使用 useLocale() hook ### 插件本地化系统 - behavior-tree-editor: 新增 locales/ 和 useBTLocale hook - material-editor: 新增 locales/ 和 useMaterialLocale hook - particle-editor: 新增 locales/ 和 useParticleLocale hook - tilemap-editor: 新增 locales/ 和 useTilemapLocale hook - ui-editor: 新增 locales/ 和 useUILocale hook ### 类型安全改进 - 修复 Debug 工具使用公共接口替代 as any - 修复 ChunkStreamingSystem 添加 forEachChunk 公共方法 - 修复 blueprint-editor 移除不必要的向后兼容代码 * fix(behavior-tree-editor): 使用 ServiceToken 模式修复服务解析 - 创建 BehaviorTreeServiceToken 遵循"谁定义接口,谁导出Token"原则 - 使用 ServiceToken.id (symbol) 注册服务到 ServiceContainer - 更新 PluginSDKRegistry.resolveService 支持 ServiceToken 检测 - BehaviorTreeEditorPanel 现在使用类型安全的 PluginAPI.resolve * fix(behavior-tree-editor): 使用 ServiceContainer.resolve 获取类注册的服务 * fix: 修复多个包的依赖和类型问题 - core: EntityDataCollector.getEntityDetails 使用 HierarchySystem 获取父实体 - ui-editor: 添加 @esengine/editor-runtime 依赖 - tilemap-editor: 添加 @esengine/editor-runtime 依赖 - particle-editor: 添加 @esengine/editor-runtime 依赖
This commit is contained in:
71
packages/material-editor/src/locales/en.ts
Normal file
71
packages/material-editor/src/locales/en.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* Material Editor English Translations
|
||||
* 材质编辑器英文翻译
|
||||
*/
|
||||
export const en = {
|
||||
// Editor Panel
|
||||
panel: {
|
||||
loading: 'Loading...',
|
||||
emptyState: 'Double-click a .mat file to open the material editor',
|
||||
save: 'Save',
|
||||
saveTooltip: 'Save (Ctrl+S)',
|
||||
},
|
||||
|
||||
// Properties Section
|
||||
properties: {
|
||||
basicTitle: 'Basic Properties',
|
||||
name: 'Name',
|
||||
shader: 'Shader',
|
||||
shaderPath: 'Shader Path',
|
||||
shaderPathPlaceholder: 'Enter .shader file path',
|
||||
browse: 'Browse...',
|
||||
blendMode: 'Blend Mode',
|
||||
customShader: 'Custom Shader...',
|
||||
},
|
||||
|
||||
// Uniforms Section
|
||||
uniforms: {
|
||||
title: 'Uniform Parameters',
|
||||
empty: 'This shader has no custom parameters',
|
||||
namePlaceholder: 'Uniform name...',
|
||||
addTooltip: 'Add uniform',
|
||||
removeTooltip: 'Remove uniform',
|
||||
},
|
||||
|
||||
// File Info Section
|
||||
fileInfo: {
|
||||
title: 'File Info',
|
||||
path: 'Path',
|
||||
},
|
||||
|
||||
// Blend Mode Options
|
||||
blendModes: {
|
||||
none: 'None (Opaque)',
|
||||
alpha: 'Alpha Blend',
|
||||
additive: 'Additive',
|
||||
multiply: 'Multiply',
|
||||
screen: 'Screen',
|
||||
premultipliedAlpha: 'Premultiplied Alpha',
|
||||
},
|
||||
|
||||
// Built-in Shader Options
|
||||
shaders: {
|
||||
defaultSprite: 'Default Sprite',
|
||||
grayscale: 'Grayscale',
|
||||
tint: 'Tint',
|
||||
flash: 'Flash',
|
||||
outline: 'Outline',
|
||||
},
|
||||
|
||||
// Inspector Panel
|
||||
inspector: {
|
||||
saveTooltip: 'Save (Ctrl+S)',
|
||||
save: 'Save',
|
||||
reset: 'Reset',
|
||||
resetTooltip: 'Reset changes',
|
||||
basicProperties: 'Basic Properties',
|
||||
uniforms: 'Uniforms',
|
||||
loading: 'Loading...',
|
||||
parseError: 'Failed to parse material file',
|
||||
},
|
||||
};
|
||||
71
packages/material-editor/src/locales/es.ts
Normal file
71
packages/material-editor/src/locales/es.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* Material Editor Spanish Translations
|
||||
* 材质编辑器西班牙语翻译
|
||||
*/
|
||||
export const es = {
|
||||
// Editor Panel
|
||||
panel: {
|
||||
loading: 'Cargando...',
|
||||
emptyState: 'Haga doble clic en un archivo .mat para abrir el editor de materiales',
|
||||
save: 'Guardar',
|
||||
saveTooltip: 'Guardar (Ctrl+S)',
|
||||
},
|
||||
|
||||
// Properties Section
|
||||
properties: {
|
||||
basicTitle: 'Propiedades Básicas',
|
||||
name: 'Nombre',
|
||||
shader: 'Shader',
|
||||
shaderPath: 'Ruta del Shader',
|
||||
shaderPathPlaceholder: 'Ingrese la ruta del archivo .shader',
|
||||
browse: 'Explorar...',
|
||||
blendMode: 'Modo de Mezcla',
|
||||
customShader: 'Shader Personalizado...',
|
||||
},
|
||||
|
||||
// Uniforms Section
|
||||
uniforms: {
|
||||
title: 'Parámetros Uniform',
|
||||
empty: 'Este shader no tiene parámetros personalizados',
|
||||
namePlaceholder: 'Nombre del uniform...',
|
||||
addTooltip: 'Agregar uniform',
|
||||
removeTooltip: 'Eliminar uniform',
|
||||
},
|
||||
|
||||
// File Info Section
|
||||
fileInfo: {
|
||||
title: 'Información del Archivo',
|
||||
path: 'Ruta',
|
||||
},
|
||||
|
||||
// Blend Mode Options
|
||||
blendModes: {
|
||||
none: 'Ninguno (Opaco)',
|
||||
alpha: 'Mezcla Alpha',
|
||||
additive: 'Aditivo',
|
||||
multiply: 'Multiplicar',
|
||||
screen: 'Pantalla',
|
||||
premultipliedAlpha: 'Alpha Premultiplicado',
|
||||
},
|
||||
|
||||
// Built-in Shader Options
|
||||
shaders: {
|
||||
defaultSprite: 'Sprite por Defecto',
|
||||
grayscale: 'Escala de Grises',
|
||||
tint: 'Tinte',
|
||||
flash: 'Destello',
|
||||
outline: 'Contorno',
|
||||
},
|
||||
|
||||
// Inspector Panel
|
||||
inspector: {
|
||||
saveTooltip: 'Guardar (Ctrl+S)',
|
||||
save: 'Guardar',
|
||||
reset: 'Restablecer',
|
||||
resetTooltip: 'Restablecer cambios',
|
||||
basicProperties: 'Propiedades Básicas',
|
||||
uniforms: 'Uniforms',
|
||||
loading: 'Cargando...',
|
||||
parseError: 'Error al analizar el archivo de material',
|
||||
},
|
||||
};
|
||||
7
packages/material-editor/src/locales/index.ts
Normal file
7
packages/material-editor/src/locales/index.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* Material Editor Locale Exports
|
||||
* 材质编辑器语言导出
|
||||
*/
|
||||
export { en } from './en';
|
||||
export { zh } from './zh';
|
||||
export { es } from './es';
|
||||
71
packages/material-editor/src/locales/zh.ts
Normal file
71
packages/material-editor/src/locales/zh.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* Material Editor Chinese Translations
|
||||
* 材质编辑器中文翻译
|
||||
*/
|
||||
export const zh = {
|
||||
// Editor Panel
|
||||
panel: {
|
||||
loading: '加载中...',
|
||||
emptyState: '双击 .mat 文件打开材质编辑器',
|
||||
save: '保存',
|
||||
saveTooltip: '保存 (Ctrl+S)',
|
||||
},
|
||||
|
||||
// Properties Section
|
||||
properties: {
|
||||
basicTitle: '基本属性',
|
||||
name: '名称',
|
||||
shader: '着色器',
|
||||
shaderPath: '着色器路径',
|
||||
shaderPathPlaceholder: '输入 .shader 文件路径',
|
||||
browse: '浏览...',
|
||||
blendMode: '混合模式',
|
||||
customShader: '自定义着色器...',
|
||||
},
|
||||
|
||||
// Uniforms Section
|
||||
uniforms: {
|
||||
title: 'Uniform 参数',
|
||||
empty: '该着色器没有自定义参数',
|
||||
namePlaceholder: 'Uniform 名称...',
|
||||
addTooltip: '添加 uniform',
|
||||
removeTooltip: '删除 uniform',
|
||||
},
|
||||
|
||||
// File Info Section
|
||||
fileInfo: {
|
||||
title: '文件信息',
|
||||
path: '路径',
|
||||
},
|
||||
|
||||
// Blend Mode Options
|
||||
blendModes: {
|
||||
none: '无 (不透明)',
|
||||
alpha: 'Alpha 混合',
|
||||
additive: '叠加',
|
||||
multiply: '正片叠底',
|
||||
screen: '滤色',
|
||||
premultipliedAlpha: '预乘 Alpha',
|
||||
},
|
||||
|
||||
// Built-in Shader Options
|
||||
shaders: {
|
||||
defaultSprite: '默认精灵',
|
||||
grayscale: '灰度',
|
||||
tint: '着色',
|
||||
flash: '闪烁',
|
||||
outline: '描边',
|
||||
},
|
||||
|
||||
// Inspector Panel
|
||||
inspector: {
|
||||
saveTooltip: '保存 (Ctrl+S)',
|
||||
save: '保存',
|
||||
reset: '重置',
|
||||
resetTooltip: '重置更改',
|
||||
basicProperties: '基本属性',
|
||||
uniforms: 'Uniforms',
|
||||
loading: '加载中...',
|
||||
parseError: '材质文件解析失败',
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user