wot-design-uni/tests/composables/useTranslate.spec.ts

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