Files
esengine/packages/editor/plugins/particle-editor/src/locales/es.ts

268 lines
7.2 KiB
TypeScript
Raw Normal View History

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 依赖
2025-12-09 18:04:03 +08:00
/**
* Spanish translations for Particle Editor
* Traducciones en español del editor de partículas
*/
export const es = {
// ========================================
// Panel
// ========================================
panel: {
title: 'Editor de Partículas',
noFileOpen: 'No hay archivo de partículas abierto',
dropToOpen: 'Arrastre un archivo .particle aquí o use el botón Abrir'
},
// ========================================
// Toolbar
// ========================================
toolbar: {
play: 'Reproducir',
pause: 'Pausar',
restart: 'Reiniciar',
save: 'Guardar',
open: 'Abrir',
maximize: 'Maximizar vista previa',
minimize: 'Minimizar vista previa',
followMouse: 'Seguir ratón',
resetPosition: 'Restablecer posición'
},
// ========================================
// Sections
// ========================================
sections: {
basic: 'Básico',
emission: 'Emisión',
particle: 'Partícula',
color: 'Color',
modules: 'Módulos',
presets: 'Preajustes'
},
// ========================================
// Basic Properties
// ========================================
basic: {
name: 'Nombre',
texture: 'Textura',
maxParticles: 'Máx. Partículas',
looping: 'Bucle',
duration: 'Duración',
prewarm: 'Precalentamiento',
playSpeed: 'Velocidad',
blendMode: 'Modo mezcla',
space: 'Espacio',
particleSize: 'Tamaño partícula',
sortOrder: 'Orden'
},
// ========================================
// Blend Modes
// ========================================
blendMode: {
normal: 'Normal',
additive: 'Aditivo',
multiply: 'Multiplicar'
},
// ========================================
// Simulation Space
// ========================================
space: {
world: 'Mundo',
local: 'Local'
},
// ========================================
// Emission Properties
// ========================================
emission: {
rate: 'Tasa',
shape: 'Forma',
radius: 'Radio',
width: 'Ancho',
height: 'Alto',
coneAngle: 'Ángulo cono'
},
// ========================================
// Emission Shapes
// ========================================
shapes: {
point: 'Punto',
circle: 'Círculo',
ring: 'Anillo',
rectangle: 'Rectángulo',
edge: 'Borde',
line: 'Línea',
cone: 'Cono'
},
// ========================================
// Particle Properties
// ========================================
particle: {
lifetime: 'Vida',
speed: 'Velocidad',
direction: 'Dirección',
spread: 'Dispersión',
scale: 'Escala',
gravity: 'Gravedad'
},
// ========================================
// Color Properties
// ========================================
color: {
startColor: 'Color inicial',
startAlpha: 'Alfa inicial',
endAlpha: 'Alfa final',
endScale: 'Escala final'
},
// ========================================
// Module Names
// ========================================
modules: {
colorOverLifetime: 'Color durante vida',
sizeOverLifetime: 'Tamaño durante vida',
velocityOverLifetime: 'Velocidad durante vida',
rotationOverLifetime: 'Rotación durante vida',
noise: 'Ruido',
collision: 'Colisión',
forceField: 'Campo de fuerza'
},
// ========================================
// Velocity Over Lifetime
// ========================================
velocity: {
drag: 'Arrastre',
orbital: 'Orbital',
radial: 'Radial'
},
// ========================================
// Rotation Over Lifetime
// ========================================
rotation: {
startMult: 'Mult. inicial',
endMult: 'Mult. final',
additional: 'Adicional'
},
// ========================================
// Noise Module
// ========================================
noise: {
position: 'Posición',
velocity: 'Velocidad',
rotation: 'Rotación',
frequency: 'Frecuencia',
scroll: 'Desplazamiento'
},
// ========================================
// Collision Module
// ========================================
collision: {
boundary: 'Límite',
behavior: 'Comportamiento',
left: 'Izquierda',
right: 'Derecha',
top: 'Arriba',
bottom: 'Abajo',
radius: 'Radio',
bounce: 'Rebote',
lifeLoss: 'Pérdida de vida'
},
// ========================================
// Boundary Types
// ========================================
boundaryType: {
none: 'Ninguno',
rectangle: 'Rectángulo',
circle: 'Círculo'
},
// ========================================
// Collision Behaviors
// ========================================
collisionBehavior: {
kill: 'Eliminar',
bounce: 'Rebotar',
wrap: 'Envolver'
},
// ========================================
// Force Field Module
// ========================================
forceField: {
type: 'Tipo',
strength: 'Fuerza',
directionX: 'Dirección X',
directionY: 'Dirección Y',
centerX: 'Centro X',
centerY: 'Centro Y',
range: 'Rango',
falloff: 'Caída'
},
// ========================================
// Force Field Types
// ========================================
forceFieldType: {
wind: 'Viento',
point: 'Punto',
vortex: 'Vórtice',
turbulence: 'Turbulencia'
},
// ========================================
// Curve Editor
// ========================================
curve: {
deletePoint: 'Eliminar punto',
constant: 'Valor constante',
fadeIn: 'Aparecer',
fadeOut: 'Desvanecer',
bellCurve: 'Curva campana',
uCurve: 'Curva U'
},
// ========================================
// Gradient Editor
// ========================================
gradient: {
deleteStop: 'Eliminar parada'
},
// ========================================
// Texture Picker
// ========================================
texturePicker: {
browse: 'Examinar...',
clear: 'Limpiar'
},
// ========================================
// Notifications
// ========================================
notifications: {
fileSaved: 'Archivo guardado: {{path}}',
fileSaveFailed: 'Error al guardar archivo',
fileOpened: 'Archivo abierto: {{path}}',
fileOpenFailed: 'Error al abrir archivo'
},
// ========================================
// Dialogs
// ========================================
dialogs: {
selectTexture: 'Seleccionar imagen de textura',
selectParticleFile: 'Seleccionar archivo de partículas',
saveParticleFile: 'Guardar archivo de partículas'
}
};