Persist the avatar render style and apply it consistently to previews, snapshots, animations, and standalone exports.
387 lines
19 KiB
TypeScript
387 lines
19 KiB
TypeScript
export const chinese: Record<string, string> = {
|
||
'Playground de l’avatar': '头像游乐场',
|
||
Arrêté: '已停止',
|
||
'Aperçu procédural en direct': '实时程序化预览',
|
||
'Aperçu de l’avatar': '头像预览',
|
||
'Choisissez une animation exportée pour la lancer。': '选择一个已导出的动画以播放。',
|
||
'Choisissez une animation exportée pour la lancer.': '选择一个已导出的动画以播放。',
|
||
Lecture: '播放',
|
||
'Contrôlez l’animation active.': '控制当前动画。',
|
||
Lire: '播放',
|
||
Arrêter: '停止',
|
||
'API JavaScript': 'JavaScript API',
|
||
'Le module réutilisable est disponible dans avatar.js.': '可复用模块位于 avatar.js。',
|
||
'Ouvrez cette démo directement, ou servez le dossier localement pour importer avatar.js depuis un autre module.':
|
||
'可直接打开此演示,或在本地启动该目录,以便从其他模块导入 avatar.js。',
|
||
'Langue de l’interface': '界面语言',
|
||
'Redimensionner l’aperçu et l’éditeur': '调整预览和编辑器大小',
|
||
'Nom de l’avatar': '头像名称',
|
||
sélecteur: '选择器',
|
||
hexadécimal: '十六进制值',
|
||
'Lier width': '关联宽度',
|
||
'Lier height': '关联高度',
|
||
'Lier size': '关联尺寸',
|
||
'Lier la position des yeux': '关联眼睛位置',
|
||
'Glisser horizontalement pour modifier': '水平拖动以调整',
|
||
'En lecture': '播放中',
|
||
'En pause': '已暂停',
|
||
'Réinitialiser la rotation de la tête': '重置头部旋转',
|
||
'Réinitialiser la position et la rotation de': '重置位置和旋转:',
|
||
'Avatar procédural': '程序化头像',
|
||
'Gizmo de rotation': '旋转控制器',
|
||
'Retour aux expressions': '返回表情',
|
||
'Retour aux animations': '返回动画',
|
||
'Retour au studio': '返回工作室',
|
||
'Preset en mémoire': '已保存预设',
|
||
'Nouvelle expression': '新建表情',
|
||
'L’avatar à gauche affiche cette expression en direct.': '左侧头像会实时预览此表情。',
|
||
Corps: '身体',
|
||
Rendu: '渲染',
|
||
'Choisis la finition visuelle propre à cet avatar.': '选择此头像专属的视觉效果。',
|
||
'Type de rendu': '渲染类型',
|
||
'Pixel utilise une palette franche, sans lissage ni couleur intermédiaire.':
|
||
'像素渲染使用纯色调色板,不进行平滑处理,也不产生中间色。',
|
||
Vectoriel: '矢量',
|
||
Pixel: '像素',
|
||
'Définition de la grille': '网格分辨率',
|
||
'Apparence et orientation générale de l’avatar.': '头像的整体外观和方向。',
|
||
'Couleur du corps': '身体颜色',
|
||
'Rotation de la tête': '头部旋转',
|
||
Yeux: '眼睛',
|
||
'Forme, placement et orientation propres au regard.': '眼睛的形状、位置和方向。',
|
||
'Couleur des yeux': '眼睛颜色',
|
||
Largeur: '宽度',
|
||
Hauteur: '高度',
|
||
Échelle: '缩放',
|
||
'Taille proportionnelle': '等比尺寸',
|
||
'Œil gauche': '左眼',
|
||
'Œil droit': '右眼',
|
||
'Position et espacement': '位置和间距',
|
||
Horizontale: '水平',
|
||
Verticale: '垂直',
|
||
Espacement: '间距',
|
||
'Rotation locale': '局部旋转',
|
||
Projection: '投影',
|
||
'Perspective appliquée à la surface active.': '应用于当前表面的透视。',
|
||
Perspective: '透视',
|
||
Supprimer: '删除',
|
||
Enregistrer: '保存',
|
||
'Construction du corps': '身体构建',
|
||
'Choisis la forme principale puis assemble les primitives autour d’elle.':
|
||
'选择主形状,然后在其周围组合基础形状。',
|
||
'Choisir un avatar': '选择头像',
|
||
'Double-clic pour modifier': '双击编辑',
|
||
'Nouvel avatar': '新建头像',
|
||
Modifier: '编辑',
|
||
'Mode d’édition': '编辑模式',
|
||
Pose: '姿势',
|
||
Expressions: '表情',
|
||
Animations: '动画',
|
||
Exporter: '导出',
|
||
Export: '导出',
|
||
'Exporter l’avatar': '导出头像',
|
||
'Télécharge un composant autonome avec les animations de ton choix.':
|
||
'下载包含所选动画的独立组件。',
|
||
'Avatar sélectionné': '已选头像',
|
||
Format: '格式',
|
||
'Choisis l’intégration correspondant à ton projet.': '选择适合项目的集成方式。',
|
||
'Composant TSX autonome': '独立 TSX 组件',
|
||
'Package React local (.zip)': '本地 React 包(.zip)',
|
||
'Module JavaScript': 'JavaScript 模块',
|
||
'Module ES autonome': '独立 ES 模块',
|
||
'Projet HTML + module JS (.zip)': 'HTML 项目 + JS 模块(.zip)',
|
||
sélectionnées: '已选择',
|
||
'Animations à exporter': '要导出的动画',
|
||
'Tout sélectionner': '全选',
|
||
'Tout désélectionner': '取消全选',
|
||
'Télécharger le composant TSX': '下载 TSX 组件',
|
||
'Télécharger le package React': '下载 React 包',
|
||
'Télécharger le module': '下载模块',
|
||
Snapshot: '快照',
|
||
'Mode photo': '照片模式',
|
||
'Capture une image statique de l’avatar.': '捕获头像的静态图像。',
|
||
'Les options de capture seront configurées ici.': '快照选项将在此配置。',
|
||
'Aperçu du Snapshot': '快照预览',
|
||
'Aperçu du mode photo': '照片模式预览',
|
||
'Arrière-plan': '背景',
|
||
'Choisis un fond transparent, uni ou en dégradé.': '选择透明、纯色或渐变背景。',
|
||
Style: '样式',
|
||
Transparent: '透明',
|
||
Uni: '纯色',
|
||
'Dégradé linéaire': '线性渐变',
|
||
'Dégradé radial': '径向渐变',
|
||
'Style d’arrière-plan': '背景样式',
|
||
Couleur: '颜色',
|
||
Départ: '起始颜色',
|
||
Arrivée: '结束颜色',
|
||
Définition: '分辨率',
|
||
'Dimensions inscrites dans le fichier SVG.': '写入 SVG 文件的尺寸。',
|
||
'Dimensions du fichier exporté.': '导出文件的尺寸。',
|
||
'Définition du Snapshot': '快照分辨率',
|
||
'Définition du mode photo': '照片模式分辨率',
|
||
'Télécharger le Snapshot SVG': '下载 SVG 快照',
|
||
'Télécharger en SVG': '下载 SVG',
|
||
'Télécharger en PNG': '下载 PNG',
|
||
'Format d’export': '导出格式',
|
||
'Format d’export du mode photo': '照片模式导出格式',
|
||
'Choisis le type de fichier généré par le mode photo.': '选择照片模式生成的文件类型。',
|
||
'Prendre une photo': '拍照',
|
||
'Informations sur le mode photo': '照片模式信息',
|
||
'Tu peux modifier le format, le fond et la définition du mode photo dans Export.':
|
||
'你可以在“导出”中更改照片模式的格式、背景和分辨率。',
|
||
'Projet du Studio': '工作室项目',
|
||
'Transfère tous les avatars, expressions et animations vers un autre navigateur.':
|
||
'将所有头像、表情和动画传输到另一个浏览器。',
|
||
'Télécharger le projet JSON': '下载 JSON 项目',
|
||
'Importer un projet JSON': '导入 JSON 项目',
|
||
'Ce fichier ne contient pas un projet Avatar Studio valide et compatible.':
|
||
'此文件不包含有效且兼容的头像工作室项目。',
|
||
'Importer ce projet ?': '导入此项目?',
|
||
'Le projet local actuel sera remplacé par les avatars, expressions, animations et état de lecture de ce fichier.':
|
||
'当前本地项目将被此文件中的头像、表情、动画和播放状态替换。',
|
||
'Le projet n’a pas pu être enregistré dans ce navigateur. Libère de l’espace puis réessaie.':
|
||
'无法在此浏览器中保存项目。请释放空间后重试。',
|
||
Importer: '导入',
|
||
'Construction, forme et couleur de la tête de l’avatar.': '头像头部的构建、形状和颜色。',
|
||
'Une forme principale porte les yeux. Les autres primitives se placent autour d’elle.':
|
||
'主形状承载眼睛,其他基础形状围绕它放置。',
|
||
'Forme principale': '主形状',
|
||
'porte les yeux': '承载眼睛',
|
||
'Ajouter une forme': '添加形状',
|
||
Dupliquer: '复制',
|
||
'Gizmo local': '局部控制器',
|
||
'Déplacer dans le plan de la caméra': '在相机平面中移动',
|
||
Transformer: '变换',
|
||
copie: '副本',
|
||
'Glisse un axe pour déplacer la forme, ou un anneau pour la faire tourner.':
|
||
'拖动轴来移动形状,或拖动圆环来旋转形状。',
|
||
Profondeur: '深度',
|
||
'Position locale': '局部位置',
|
||
'Cette surface est la référence du visage et porte les yeux.': '此表面是面部基准并承载眼睛。',
|
||
'Rondeur des arêtes': '边缘圆度',
|
||
Rondeur: '圆度',
|
||
'Rondeur morphologique': '形态圆度',
|
||
'Rondeur de la pointe': '尖端圆度',
|
||
'Rondeur de la base': '底部圆度',
|
||
'Rondeur globale': '整体圆度',
|
||
'Rondeur pointe': '尖端圆度',
|
||
'Rondeur base': '底部圆度',
|
||
'Couleur de base utilisée par les poses et les expressions.': '姿势和表情使用的基础颜色。',
|
||
'Forme, placement, orientation et couleur du regard par défaut.':
|
||
'默认眼睛的形状、位置、方向和颜色。',
|
||
'Définis l’identité du regard de cet avatar. Les poses s’ajoutent ensuite à cette base.':
|
||
'定义此头像的默认眼睛,姿势将在此基础上叠加。',
|
||
'Coordonnées propres à l’avatar, indépendantes des poses.': '头像自身的坐标,与姿势无关。',
|
||
'Inclinaison par défaut propre à chaque œil.': '每只眼睛的默认倾斜角度。',
|
||
'Orientation et apparence générale de la pose.': '姿势的整体方向和外观。',
|
||
'La pose peut remplacer temporairement la couleur de l’avatar.': '姿势可以暂时覆盖头像颜色。',
|
||
'Reprendre la couleur de l’avatar': '恢复头像颜色',
|
||
'Les libellés ↔ sont scrubbables, comme dans Figma.': '带 ↔ 的标签可像 Figma 一样拖动调整。',
|
||
'Forme, placement, orientation et couleur du regard.': '眼睛的形状、位置、方向和颜色。',
|
||
'Coordonnées communes projetées sur la forme choisie.': '投影到所选形状上的共享坐标。',
|
||
'Inclinaison propre à chaque œil.': '每只眼睛各自的倾斜角度。',
|
||
'Perspective et repères appliqués à la surface active.': '应用于当前表面的透视和参考线。',
|
||
'Profondeur simulée du visage.': '模拟的面部深度。',
|
||
'Afficher le maillage': '显示网格',
|
||
Réinitialiser: '重置',
|
||
Mouvement: '运动',
|
||
Motion: '运动',
|
||
'Mouvement perpétuel': '持续运动',
|
||
'Aucun mouvement': '无运动',
|
||
'Dérive lente': '缓慢漂移',
|
||
'Micro-ajustements': '微调',
|
||
Tremblement: '抖动',
|
||
'Ajoute une légère présence ou un tremblement continu au corps.':
|
||
'为身体添加轻微的生命感或持续抖动。',
|
||
'Anime le regard par petites saccades naturelles ou par tremblement.':
|
||
'通过自然的微小跳动或抖动让眼神动起来。',
|
||
'Motion interpole les valeurs et notre moteur effectue le slerp quaternion.':
|
||
'Motion 对数值进行插值,引擎执行四元数球面插值。',
|
||
'Vitesse du ressort': '弹簧速度',
|
||
'Une animation est en cours de lecture': '动画正在播放',
|
||
'Mettez l’animation en pause avant de manipuler les paramètres de pose.':
|
||
'调整姿势参数前请暂停动画。',
|
||
'Mettez l’animation en pause avant de choisir ou personnaliser une expression.':
|
||
'选择或自定义表情前请暂停动画。',
|
||
Cligner: '眨眼',
|
||
'Expression aléatoire': '随机表情',
|
||
'Cycle de vie': '生命周期',
|
||
Réactions: '反应',
|
||
'Éditeur d’animation': '动画编辑器',
|
||
'Modifier l’animation': '编辑动画',
|
||
'Nouvelle animation': '新建动画',
|
||
'Compose les expressions, leur cadence et les clignements de cette animation.':
|
||
'组合此动画的表情、节奏和眨眼。',
|
||
'Prévisualiser l’animation': '预览动画',
|
||
'Arrêter l’animation': '停止动画',
|
||
Identité: '基本信息',
|
||
'Nom, catégorie et comportement de lecture de l’animation.': '动画的名称、分类和播放行为。',
|
||
Nom: '名称',
|
||
Catégorie: '分类',
|
||
Description: '描述',
|
||
'Mode de lecture': '播放模式',
|
||
Boucle: '循环',
|
||
'Une fois': '一次',
|
||
'Aller-retour': '往返',
|
||
Timeline: '时间轴',
|
||
'Glisse les étapes pour les réordonner, puis sélectionne-en une pour régler sa cadence.':
|
||
'拖动步骤以重新排序,然后选择一个步骤调整时间。',
|
||
'Ajoute une expression pour commencer.': '添加一个表情以开始。',
|
||
'Étape sélectionnée': '已选步骤',
|
||
'Durée visible avant de passer à l’expression suivante.': '切换到下一个表情前的显示时长。',
|
||
'Supprimer cette étape': '删除此步骤',
|
||
'Temps d’affichage': '显示时间',
|
||
'Durée de transition': '过渡时长',
|
||
Transition: '过渡',
|
||
Ressort: '弹簧',
|
||
Douce: '平滑',
|
||
Rapide: '迅速',
|
||
'Ajouter une expression': '添加表情',
|
||
'Sélectionne un preset pour l’ajouter à la fin de la timeline.':
|
||
'选择一个预设并添加到时间轴末尾。',
|
||
Clignements: '眨眼',
|
||
'Le blink fonctionne indépendamment des changements d’expression.': '眨眼独立于表情变化运行。',
|
||
'Activer les clignements': '启用眨眼',
|
||
'Intervalle minimum': '最小间隔',
|
||
'Intervalle maximum': '最大间隔',
|
||
'Intervalle du clignement': '眨眼间隔',
|
||
'Durée du clignement': '眨眼时长',
|
||
animations: '动画',
|
||
'Chaque étape possède sa propre durée et sa propre transition.':
|
||
'每个步骤都有自己的持续时间和过渡。',
|
||
Désactivé: '已禁用',
|
||
'comportement de la timeline': '时间轴行为',
|
||
'Supprimer cette animation ?': '删除此动画?',
|
||
'Cette action supprimera définitivement cette animation.': '此操作将永久删除该动画。',
|
||
'Cette animation enchaîne un pool de presets et des clignements.':
|
||
'此动画依次播放一组预设并执行眨眼。',
|
||
'Cet état enchaîne un pool de presets et des clignements.': '此动画依次播放一组预设并执行眨眼。',
|
||
'Expressions de l’animation': '动画表情',
|
||
'Les presets sont joués dans cet ordre, puis la boucle recommence.':
|
||
'预设按此顺序播放,然后重新开始循环。',
|
||
'Logique de clignement': '眨眼行为',
|
||
'Le rythme reste naturel grâce à un intervalle légèrement aléatoire.':
|
||
'略带随机性的间隔使节奏保持自然。',
|
||
'Premier clignement': '首次眨眼',
|
||
'après le lancement': '启动后',
|
||
Intervalle: '间隔',
|
||
'tirage aléatoire': '随机',
|
||
Durée: '时长',
|
||
'fermeture et ouverture': '闭合与睁开',
|
||
'Changement d’expression': '表情变化',
|
||
'cadence de l’animation': '动画节奏',
|
||
'Détails de l’animation': '动画详情',
|
||
'Afficher les détails de l’animation': '显示动画详情',
|
||
'Masquer les détails de l’animation': '隐藏动画详情',
|
||
Relancer: '重新开始',
|
||
Lancer: '播放',
|
||
Pause: '暂停',
|
||
Reprendre: '继续',
|
||
Annuler: '取消',
|
||
'Supprimer cette expression ?': '删除此表情?',
|
||
'Cette action retirera définitivement le preset de la bibliothèque de cet avatar.':
|
||
'此操作将从该头像的库中永久删除该预设。',
|
||
'Cette expression sera aussi retirée des animations suivantes :': '此表情也会从以下动画中移除:',
|
||
'Si une animation ne contient que cette expression, l’expression de repli lui sera assignée pour qu’elle reste jouable.':
|
||
'如果动画只包含此表情,将为其分配备用表情以保持可播放。',
|
||
'Le corps, les expressions et les animations propres à cet avatar seront définitivement supprimés. La bibliothèque de base sera conservée.':
|
||
'此头像的身体、表情和动画将被永久删除,基础库将被保留。',
|
||
'Glisse sur la surface pour orienter la tête. Les anneaux du gizmo contrôlent X, Y et Z.':
|
||
'在表面上拖动以调整头部方向。控制器圆环分别控制 X、Y 和 Z。',
|
||
Sphère: '球体',
|
||
Cube: '立方体',
|
||
Capsule: '胶囊体',
|
||
Curseur: '光标',
|
||
Cylindre: '圆柱体',
|
||
Cône: '圆锥体',
|
||
Diamant: '菱形体',
|
||
'Yeux presque fermés, respiration lente et expression de sommeil.':
|
||
'双眼几乎闭合,呼吸缓慢,呈现睡眠表情。',
|
||
'Animation courte de réveil avant retour vers une expression neutre.':
|
||
'短暂的醒来动画,然后恢复中性表情。',
|
||
'Séquence courte de réveil avant retour vers une expression neutre.':
|
||
'短暂的醒来动画,然后恢复中性表情。',
|
||
'Micro-mouvements lents, expressions 00 et 08, clignement rare.':
|
||
'缓慢微动,使用表情 00 和 08,偶尔眨眼。',
|
||
'Expressions 10, 01 et 19, regard stable et clignement attentif.':
|
||
'使用表情 10、01 和 19,视线稳定并专注眨眼。',
|
||
'Regard haut et latéral, expressions asymétriques et changements fréquents.':
|
||
'向上侧视,不对称表情并频繁变化。',
|
||
'Balayage rapide et changements très fréquents.': '快速扫视并非常频繁地变化。',
|
||
'Rythme régulier, regard concentré et micro-variations.': '节奏稳定,目光专注并有细微变化。',
|
||
'Grandes expressions positives et mouvements rapides.': '夸张的积极表情和快速运动。',
|
||
'Inclinaisons et rotations rapides pour simuler un agent en mouvement.':
|
||
'通过快速倾斜和旋转模拟运动中的角色。',
|
||
'Rythme régulier et expressions concentrées.': '节奏稳定且表情专注。',
|
||
'Grandes expressions et transitions rapides.': '夸张表情和快速过渡。',
|
||
'Inclinaisons et forte asymétrie.': '明显倾斜和强烈不对称。',
|
||
loop: '循环',
|
||
once: '一次',
|
||
pingPong: '往返',
|
||
Custom: '自定义',
|
||
'Untitled animation': '未命名动画',
|
||
'Untitled sequence': '未命名动画',
|
||
sleeping: '睡眠',
|
||
waking: '醒来',
|
||
idle: '待机',
|
||
listening: '聆听',
|
||
thinking: '思考',
|
||
searching: '搜索',
|
||
working: '工作',
|
||
excited: '兴奋',
|
||
surprised: '惊讶',
|
||
suspicious: '怀疑',
|
||
angry: '生气',
|
||
drowsy: '困倦',
|
||
happy: '开心',
|
||
curious: '好奇',
|
||
confused: '困惑',
|
||
bored: '无聊',
|
||
proud: '自豪',
|
||
shy: '害羞',
|
||
sad: '悲伤',
|
||
laughing: '大笑',
|
||
scared: '害怕',
|
||
playful: '顽皮',
|
||
celebrate: '庆祝',
|
||
orbit: '环绕',
|
||
radar: '雷达',
|
||
progress: '进度',
|
||
spawning: '出现',
|
||
humming: '哼唱',
|
||
loading: '加载',
|
||
dictating: '听写',
|
||
writing: '书写',
|
||
sending: '发送',
|
||
receiving: '接收',
|
||
uploading: '上传',
|
||
notifying: '通知',
|
||
alerting: '警报',
|
||
dragging: '拖动',
|
||
bouncing: '弹跳',
|
||
'powering-down': '关机',
|
||
Avatars: '头像',
|
||
'React / TypeScript': 'React / TypeScript',
|
||
}
|
||
|
||
export const translateChineseDynamicText = (text: string) => {
|
||
const rules: Array<[RegExp, (...matches: string[]) => string]> = [
|
||
[/^Modifier l’expression (.+)$/, value => `编辑表情 ${value}`],
|
||
[/^Modifier (.+)$/, value => `编辑${value}`],
|
||
[/^Supprimer (.+) \?$/, value => `删除${value}?`],
|
||
[/^Ajouter une forme · (.+)$/, value => `添加形状 · ${value}`],
|
||
[/^Réinitialiser la position et la rotation de (.+)$/, value => `重置${value}的位置和旋转`],
|
||
[/^Animation en cours : (.+)$/, value => `当前动画:${value}`],
|
||
[/^Mettre (.+) en pause$/, value => `暂停${value}`],
|
||
[/^Reprendre (.+)$/, value => `继续${value}`],
|
||
[/^Arrêter (.+)$/, value => `停止${value}`],
|
||
[/^(.+) expressions$/, value => `${value} 个表情`],
|
||
]
|
||
|
||
for (const [pattern, replacement] of rules) {
|
||
const match = text.match(pattern)
|
||
if (match) return replacement(...match.slice(1))
|
||
}
|
||
return null
|
||
}
|