bible-strong-avatar-lab/src/i18n/__tests__/i18n-test.ts
2026-08-20 08:06:58 +02:00

174 lines
8.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.'
)
})
})