wot-design-uni/tests/composables/useTranslate.test.ts
不如摸鱼去 7e84c5c91f
feat: 引入vitest做组件测试
* chore: 🚀 引入vitest做组件测试

* chore: 🚀 引入vitest做组件测试

* chore: 🚀 update workflow

* chore: 🚀 update workflow

* chore: 🚀 update workflow

* chore: 🚀 update workflow

* chore: 🚀 update nodejs version

* chore: 🚀 update nodejs version
2025-05-06 13:38:08 +08:00

238 lines
9.0 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 { useTranslate } from '@/uni_modules/wot-design-uni/components/composables/useTranslate'
import Locale from '@/uni_modules/wot-design-uni/locale'
import enUS from '@/uni_modules/wot-design-uni/locale/lang/en-US'
import viVN from '@/uni_modules/wot-design-uni/locale/lang/vi-VN'
import zhTW from '@/uni_modules/wot-design-uni/locale/lang/zh-TW'
import zhHK from '@/uni_modules/wot-design-uni/locale/lang/zh-HK'
import arSA from '@/uni_modules/wot-design-uni/locale/lang/ar-SA'
import deDE from '@/uni_modules/wot-design-uni/locale/lang/de-DE'
import esES from '@/uni_modules/wot-design-uni/locale/lang/es-ES'
import frFR from '@/uni_modules/wot-design-uni/locale/lang/fr-FR'
import jaJP from '@/uni_modules/wot-design-uni/locale/lang/ja-JP'
import koKR from '@/uni_modules/wot-design-uni/locale/lang/ko-KR'
import ptPT from '@/uni_modules/wot-design-uni/locale/lang/pt-PT'
import ruRU from '@/uni_modules/wot-design-uni/locale/lang/ru-RU'
import thTH from '@/uni_modules/wot-design-uni/locale/lang/th-TH'
import trTR from '@/uni_modules/wot-design-uni/locale/lang/tr-TR'
import { beforeEach, describe, expect, it } from 'vitest'
describe('useTranslate', () => {
beforeEach(() => {
Locale.use('zh-CN')
})
it('should translate basic messages in Chinese', () => {
const { translate: calendarTranslate } = useTranslate('calendar')
const { translate: pickerTranslate } = useTranslate('picker')
expect(calendarTranslate('placeholder')).toBe('请选择')
expect(pickerTranslate('cancel')).toBe('取消')
})
it('should switch to English translations', () => {
const { translate } = useTranslate('calendar')
expect(translate('confirm')).toBe('确定')
Locale.use('en-US', enUS)
expect(translate('confirm')).toBe('OK')
})
it('should handle function messages with parameters', () => {
const { translate } = useTranslate('calendarView')
expect(translate('rangePrompt', 7)).toBe('选择天数不能超过7天')
expect(translate('hour', 10)).toBe('10时')
expect(translate('minute', 30)).toBe('30分')
expect(translate('second', 45)).toBe('45秒')
Locale.use('en-US', enUS)
expect(translate('rangePrompt', 7)).toBe('The number of selected days cannot exceed 7 days')
expect(translate('hour', 10)).toBe('10')
expect(translate('minute', 30)).toBe('30')
expect(translate('second', 45)).toBe('45')
})
it('should handle nested object translations', () => {
const { translate } = useTranslate('calendarView')
expect(translate('weeks.mon')).toBe('一')
expect(translate('weeks.sun')).toBe('日')
Locale.use('en-US', enUS)
expect(translate('weeks.mon')).toBe('Mon')
expect(translate('weeks.sun')).toBe('Sun')
})
it('should handle pagination translations', () => {
const { translate } = useTranslate('pagination')
expect(translate('prev')).toBe('上一页')
expect(translate('next')).toBe('下一页')
expect(translate('total', 100)).toBe('当前数据100条')
Locale.use('en-US', enUS)
expect(translate('prev')).toBe('Previous')
expect(translate('next')).toBe('Next')
expect(translate('total', 100)).toBe('Total: 100')
})
it('should handle date formats', () => {
const { translate } = useTranslate('calendar')
expect(translate('timeFormat')).toBe('YY年MM月DD日 HH:mm:ss')
expect(translate('dateFormat')).toBe('YYYY年MM月DD日')
expect(translate('weekFormat', 2023, 1)).toBe('2023 第 1 周')
Locale.use('en-US', enUS)
expect(translate('timeFormat')).toBe('YY-MM-DD HH:mm:ss')
expect(translate('dateFormat')).toBe('YYYY-MM-DD')
expect(translate('weekFormat', 2023, 1)).toBe('2023 W1')
})
it('should handle form related translations', () => {
const { translate } = useTranslate('messageBox')
expect(translate('confirm')).toBe('确定')
expect(translate('cancel')).toBe('取消')
expect(translate('inputPlaceholder')).toBe('请输入')
Locale.use('en-US', enUS)
expect(translate('confirm')).toBe('OK')
expect(translate('cancel')).toBe('Cancel')
expect(translate('inputPlaceholder')).toBe('Please input information')
})
it('should fallback to key path when translation missing', () => {
const { translate } = useTranslate('nonexistent')
expect(translate('key')).toBe('nonexistent.key')
})
it('should handle component specific messages', () => {
const { translate: uploadTranslate } = useTranslate('upload')
const { translate: searchTranslate } = useTranslate('search')
const { translate: signatureTranslate } = useTranslate('signature')
expect(uploadTranslate('error')).toBe('上传失败')
expect(searchTranslate('search')).toBe('搜索')
expect(signatureTranslate('confirmText')).toBe('确认')
Locale.use('en-US', enUS)
expect(uploadTranslate('error')).toBe('Failed to upload')
expect(searchTranslate('search')).toBe('Search')
expect(signatureTranslate('confirmText')).toBe('OK')
})
it('should handle Vietnamese translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('vi-VN', viVN)
expect(translate('placeholder')).toBe('Vui lòng chọn')
expect(translate('confirm')).toBe('Xác nhận')
const { translate: calendarViewTranslate } = useTranslate('calendarView')
expect(calendarViewTranslate('weeks.mon')).toBe('T2')
expect(calendarViewTranslate('hour', 10)).toBe('10 giờ')
})
it('should handle Traditional Chinese translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('zh-TW', zhTW)
expect(translate('placeholder')).toBe('請選擇')
expect(translate('confirm')).toBe('確定')
const { translate: calendarViewTranslate } = useTranslate('calendarView')
expect(calendarViewTranslate('weeks.mon')).toBe('一')
expect(calendarViewTranslate('hour', 10)).toBe('10 時')
})
it('should handle Arabic translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('ar-SA', arSA)
expect(translate('placeholder')).toBe('حدد التاريخ')
expect(translate('confirm')).toBe('تأكيد')
})
it('should handle German translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('de-DE', deDE)
expect(translate('placeholder')).toBe('Wählen Sie')
expect(translate('confirm')).toBe('Bestätigen')
})
it('should handle Spanish translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('es-ES', esES)
expect(translate('placeholder')).toBe('Seleccionar')
expect(translate('confirm')).toBe('Confirmar')
})
it('should handle French translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('fr-FR', frFR)
expect(translate('placeholder')).toBe('Sélectionner')
expect(translate('confirm')).toBe('Confirmer')
})
it('should handle Japanese translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('ja-JP', jaJP)
expect(translate('placeholder')).toBe('選択してください')
expect(translate('confirm')).toBe('確認')
})
it('should handle Korean translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('ko-KR', koKR)
expect(translate('placeholder')).toBe('선택')
expect(translate('confirm')).toBe('확인')
})
it('should handle Portuguese translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('pt-PT', ptPT)
expect(translate('placeholder')).toBe('Por favor selecione')
expect(translate('confirm')).toBe('Confirmar')
})
it('should handle Russian translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('ru-RU', ruRU)
expect(translate('placeholder')).toBe('Выберите, пожалуйста')
expect(translate('confirm')).toBe('Ок')
})
it('should handle Thai translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('th-TH', thTH)
expect(translate('placeholder')).toBe('เลือก')
expect(translate('confirm')).toBe('ยืนยัน')
})
it('should handle Turkish translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('tr-TR', trTR)
expect(translate('placeholder')).toBe('Lütfen seçin')
expect(translate('confirm')).toBe('Tamam')
})
it('should handle Hong Kong Traditional Chinese translations', () => {
const { translate } = useTranslate('calendar')
Locale.use('zh-HK', zhHK)
expect(translate('placeholder')).toBe('請選擇')
expect(translate('confirm')).toBe('確定')
const { translate: calendarViewTranslate } = useTranslate('calendarView')
expect(calendarViewTranslate('weeks.mon')).toBe('一')
expect(calendarViewTranslate('hour', 10)).toBe('10時')
expect(calendarViewTranslate('minute', 30)).toBe('30分')
expect(calendarViewTranslate('second', 45)).toBe('45秒')
const { translate: paginationTranslate } = useTranslate('pagination')
expect(paginationTranslate('prev')).toBe('上一頁')
expect(paginationTranslate('next')).toBe('下一頁')
})
})