174 lines
8.6 KiB
TypeScript
174 lines
8.6 KiB
TypeScript
import { translateStudioText } from '@/i18n'
|
||
|
||
describe('avatar studio translations', () => {
|
||
it('uses English for static interface copy', () => {
|
||
expect(translateStudioText('Couleur des yeux', 'en')).toBe('Eye color')
|
||
})
|
||
|
||
it('translates dynamic editor labels', () => {
|
||
expect(translateStudioText('Modifier l’expression 08', 'en')).toBe('Edit expression 08')
|
||
expect(translateStudioText('Sphère · porte les yeux', 'en')).toBe('Sphere · carries the eyes')
|
||
expect(translateStudioText('Cône 1 copie', 'en')).toBe('Cone 1 copy')
|
||
})
|
||
|
||
it('keeps the original French copy in French', () => {
|
||
expect(translateStudioText('Nouvel avatar', 'fr')).toBe('Nouvel avatar')
|
||
expect(translateStudioText('sleeping', 'fr')).toBe('sommeil')
|
||
})
|
||
|
||
it('translates the studio interface and dynamic labels to Simplified Chinese', () => {
|
||
expect(translateStudioText('Couleur des yeux', 'zh-CN')).toBe('眼睛颜色')
|
||
expect(translateStudioText('Modifier l’expression 08', 'zh-CN')).toBe('编辑表情 08')
|
||
expect(translateStudioText('sleeping', 'zh-CN')).toBe('睡眠')
|
||
})
|
||
|
||
it('translates every Photo Mode control to Simplified Chinese', () => {
|
||
expect(translateStudioText('Mode photo', 'zh-CN')).toBe('照片模式')
|
||
expect(translateStudioText('Dégradé radial', 'zh-CN')).toBe('径向渐变')
|
||
expect(translateStudioText('Définition du mode photo', 'zh-CN')).toBe('照片模式分辨率')
|
||
expect(translateStudioText('Télécharger en PNG', 'zh-CN')).toBe('下载 PNG')
|
||
expect(translateStudioText('Prendre une photo', 'zh-CN')).toBe('拍照')
|
||
expect(translateStudioText('Format d’export', 'zh-CN')).toBe('导出格式')
|
||
expect(translateStudioText('Ouvrir le mode photo', 'en')).toBe('Open Photo Mode')
|
||
expect(translateStudioText('Ouvrir le mode photo', 'zh-CN')).toBe('打开照片模式')
|
||
expect(translateStudioText('Cadrage', 'en')).toBe('Framing')
|
||
expect(translateStudioText('Recentrer le cadrage', 'zh-CN')).toBe('重置构图')
|
||
expect(translateStudioText('Réinitialiser la pose et le cadrage', 'en')).toBe(
|
||
'Reset pose and framing'
|
||
)
|
||
expect(translateStudioText('Réinitialiser la pose et le cadrage', 'zh-CN')).toBe(
|
||
'重置姿态和构图'
|
||
)
|
||
expect(translateStudioText('Aléatoire', 'en')).toBe('Random')
|
||
expect(translateStudioText('Aléatoire', 'zh-CN')).toBe('随机')
|
||
expect(translateStudioText('Position, zoom et coins du cadre photo.', 'en')).toBe(
|
||
'Position, zoom and photo frame corners.'
|
||
)
|
||
expect(translateStudioText('Orientation, regard, couleurs et perspective.', 'zh-CN')).toBe(
|
||
'方向、视线、颜色和透视。'
|
||
)
|
||
})
|
||
|
||
it('keeps runtime-export authoring copy synchronized in all three languages', () => {
|
||
expect(translateStudioText('Clé sémantique', 'fr')).toBe('Clé sémantique')
|
||
expect(translateStudioText('Clé sémantique', 'en')).toBe('Semantic key')
|
||
expect(translateStudioText('Clé sémantique', 'zh-CN')).toBe('语义键')
|
||
expect(translateStudioText('Exporter le JSON runtime', 'en')).toBe('Export runtime JSON')
|
||
expect(translateStudioText('Exporter le JSON runtime', 'zh-CN')).toBe('导出运行时 JSON')
|
||
expect(translateStudioText('JSON runtime + createAvatar', 'en')).toBe(
|
||
'Runtime JSON + createAvatar'
|
||
)
|
||
expect(translateStudioText('JSON runtime + createAvatar', 'zh-CN')).toBe(
|
||
'运行时 JSON + createAvatar'
|
||
)
|
||
expect(translateStudioText('JavaScript / ESM', 'en')).toBe('JavaScript / ESM')
|
||
expect(translateStudioText('JSON runtime + avatar-web', 'zh-CN')).toBe(
|
||
'运行时 JSON + avatar-web'
|
||
)
|
||
expect(translateStudioText('Guide d’utilisation de l’avatar JavaScript', 'en')).toBe(
|
||
'JavaScript avatar usage guide'
|
||
)
|
||
expect(translateStudioText('Copier les instructions pour l’IA', 'en')).toBe(
|
||
'Copy instruction for AI'
|
||
)
|
||
expect(translateStudioText('Copier les instructions pour l’IA', 'zh-CN')).toBe(
|
||
'复制 AI 使用说明'
|
||
)
|
||
expect(translateStudioText('Preview de la définition exportée', 'en')).toBe(
|
||
'Exported definition preview'
|
||
)
|
||
expect(translateStudioText('Animations exportées', 'zh-CN')).toBe('导出的动画')
|
||
expect(
|
||
translateStudioText(
|
||
'Choisis les animations puis exporte le JSON runtime ou un package autonome.',
|
||
'en'
|
||
)
|
||
).toBe('Choose animations, then export runtime JSON or a standalone package.')
|
||
expect(
|
||
translateStudioText(
|
||
'Choisis les animations puis exporte le JSON runtime ou un package autonome.',
|
||
'zh-CN'
|
||
)
|
||
).toBe('选择动画,然后导出运行时 JSON 或独立包。')
|
||
expect(translateStudioText('Nouveau', 'en')).toBe('New')
|
||
expect(translateStudioText('Nouveau', 'zh-CN')).toBe('新增')
|
||
expect(translateStudioText('Lancer l’exemple', 'en')).toBe('Run example')
|
||
expect(translateStudioText('Lancer l’exemple', 'zh-CN')).toBe('运行示例')
|
||
expect(translateStudioText('Guide d’utilisation', 'en')).toBe('Usage guide')
|
||
expect(translateStudioText('Guide d’utilisation', 'zh-CN')).toBe('使用指南')
|
||
expect(translateStudioText('Le rendu Pixel est temporairement désactivé.', 'en')).toBe(
|
||
'Pixel rendering is temporarily disabled.'
|
||
)
|
||
expect(translateStudioText('Le rendu Pixel est temporairement désactivé.', 'zh-CN')).toBe(
|
||
'像素渲染暂时已禁用。'
|
||
)
|
||
expect(translateStudioText('Props de l’avatar', 'en')).toBe('Avatar props')
|
||
expect(translateStudioText('Props de l’avatar', 'zh-CN')).toBe('头像 Props')
|
||
expect(translateStudioText('Cible et lecture', 'en')).toBe('Target and playback')
|
||
expect(translateStudioText('Présentation', 'zh-CN')).toBe('外观')
|
||
expect(translateStudioText('API impérative', 'en')).toBe('Imperative API')
|
||
expect(translateStudioText('API impérative', 'zh-CN')).toBe('命令式 API')
|
||
expect(
|
||
translateStudioText('Retourne l’animation, l’expression et le statut actifs.', 'en')
|
||
).toBe('Returns the active animation, expression and status.')
|
||
expect(
|
||
translateStudioText(
|
||
'Utilise Avatar directement lorsque la définition est chargée à l’exécution ou change entre plusieurs avatars.',
|
||
'en'
|
||
)
|
||
).toBe(
|
||
'Use Avatar directly when the definition is loaded at runtime or changes between multiple avatars.'
|
||
)
|
||
expect(
|
||
translateStudioText(
|
||
'createAvatar valide le JSON et retourne un composant dédié dont les clés d’animations sont typées.',
|
||
'en'
|
||
)
|
||
).toBe(
|
||
'createAvatar validates the JSON and returns a dedicated component with typed animation keys.'
|
||
)
|
||
expect(
|
||
translateStudioText(
|
||
'Exporte le fichier .avatar.json utilisé par les nouveaux packages npm.',
|
||
'en'
|
||
)
|
||
).toBe('Export the .avatar.json file used by the new npm packages.')
|
||
expect(
|
||
translateStudioText(
|
||
'Génère l’export ZIP autonome React ou JavaScript qui existait déjà.',
|
||
'zh-CN'
|
||
)
|
||
).toBe('生成原有的 React 或 JavaScript 独立 ZIP 导出。')
|
||
expect(translateStudioText('Export runtime incomplet', 'en')).toBe(
|
||
'Runtime export is incomplete'
|
||
)
|
||
expect(translateStudioText('Export runtime incomplet', 'zh-CN')).toBe('运行时导出不完整')
|
||
expect(translateStudioText('Personnaliser', 'en')).toBe('Customize')
|
||
expect(translateStudioText('Personnaliser', 'zh-CN')).toBe('自定义')
|
||
expect(translateStudioText('Masquer la sélection', 'en')).toBe('Hide selection')
|
||
expect(translateStudioText('Masquer la sélection', 'zh-CN')).toBe('隐藏选择')
|
||
expect(translateStudioText('Expression de départ', 'en')).toBe('Starting expression')
|
||
expect(translateStudioText('Expression de départ', 'zh-CN')).toBe('起始表情')
|
||
expect(translateStudioText('Copier le JSON formaté', 'en')).toBe('Copy formatted JSON')
|
||
expect(translateStudioText('Copier le JSON formaté', 'zh-CN')).toBe('复制格式化的 JSON')
|
||
expect(translateStudioText('JSON runtime copié dans le presse-papiers.', 'en')).toBe(
|
||
'Runtime JSON copied to the clipboard.'
|
||
)
|
||
expect(translateStudioText('JSON runtime copié dans le presse-papiers.', 'zh-CN')).toBe(
|
||
'运行时 JSON 已复制到剪贴板。'
|
||
)
|
||
})
|
||
|
||
it('covers every configured state description in English', () => {
|
||
expect(translateStudioText('Rythme régulier et expressions concentrées.', 'en')).toBe(
|
||
'Steady rhythm and focused expressions.'
|
||
)
|
||
expect(translateStudioText('Grandes expressions et transitions rapides.', 'en')).toBe(
|
||
'Big expressions and fast transitions.'
|
||
)
|
||
expect(translateStudioText('Inclinaisons et forte asymétrie.', 'en')).toBe(
|
||
'Tilts and strong asymmetry.'
|
||
)
|
||
})
|
||
})
|