datai-vue/src/locales/__tests__/en-US.test.ts

165 lines
6.8 KiB
TypeScript

import { describe, it, expect } from 'vitest'
import enUS from '../en-US'
describe('en-US translations', () => {
it('should contain all required sections', () => {
expect(enUS).toHaveProperty('common')
expect(enUS).toHaveProperty('navbar')
expect(enUS).toHaveProperty('tagsView')
expect(enUS).toHaveProperty('login')
expect(enUS).toHaveProperty('register')
expect(enUS).toHaveProperty('error')
})
it('should contain all common translations', () => {
expect(enUS.common).toHaveProperty('confirm')
expect(enUS.common).toHaveProperty('cancel')
expect(enUS.common).toHaveProperty('save')
expect(enUS.common).toHaveProperty('delete')
expect(enUS.common).toHaveProperty('edit')
expect(enUS.common).toHaveProperty('add')
expect(enUS.common).toHaveProperty('search')
expect(enUS.common).toHaveProperty('reset')
expect(enUS.common).toHaveProperty('submit')
expect(enUS.common).toHaveProperty('back')
expect(enUS.common).toHaveProperty('close')
expect(enUS.common).toHaveProperty('loading')
expect(enUS.common).toHaveProperty('success')
expect(enUS.common).toHaveProperty('error')
expect(enUS.common).toHaveProperty('warning')
expect(enUS.common).toHaveProperty('info')
})
it('should contain all navbar translations', () => {
expect(enUS.navbar).toHaveProperty('language')
expect(enUS.navbar).toHaveProperty('logout')
expect(enUS.navbar).toHaveProperty('fullscreen')
expect(enUS.navbar).toHaveProperty('exitFullscreen')
expect(enUS.navbar).toHaveProperty('size')
expect(enUS.navbar).toHaveProperty('theme')
expect(enUS.navbar).toHaveProperty('settings')
expect(enUS.navbar).toHaveProperty('dashboard')
expect(enUS.navbar).toHaveProperty('profile')
expect(enUS.navbar).toHaveProperty('focusMode')
expect(enUS.navbar).toHaveProperty('logoutConfirm')
expect(enUS.navbar).toHaveProperty('logoutConfirmTitle')
expect(enUS.navbar).toHaveProperty('logoutConfirmButton')
expect(enUS.navbar).toHaveProperty('logoutCancelButton')
})
it('should contain all tagsView translations', () => {
expect(enUS.tagsView).toHaveProperty('refreshPage')
expect(enUS.tagsView).toHaveProperty('closeCurrent')
expect(enUS.tagsView).toHaveProperty('closeOthers')
expect(enUS.tagsView).toHaveProperty('closeLeft')
expect(enUS.tagsView).toHaveProperty('closeRight')
expect(enUS.tagsView).toHaveProperty('closeAll')
})
it('should contain all login translations', () => {
expect(enUS.login).toHaveProperty('title')
expect(enUS.login).toHaveProperty('username')
expect(enUS.login).toHaveProperty('password')
expect(enUS.login).toHaveProperty('email')
expect(enUS.login).toHaveProperty('phonenumber')
expect(enUS.login).toHaveProperty('code')
expect(enUS.login).toHaveProperty('sendCode')
expect(enUS.login).toHaveProperty('loginButton')
expect(enUS.login).toHaveProperty('loginButtonLoading')
expect(enUS.login).toHaveProperty('rememberMe')
expect(enUS.login).toHaveProperty('autoRegister')
expect(enUS.login).toHaveProperty('noAccount')
expect(enUS.login).toHaveProperty('registerNow')
expect(enUS.login).toHaveProperty('usernameRequired')
expect(enUS.login).toHaveProperty('passwordRequired')
expect(enUS.login).toHaveProperty('codeRequired')
expect(enUS.login).toHaveProperty('emailRequired')
expect(enUS.login).toHaveProperty('phonenumberRequired')
})
it('should contain all register translations', () => {
expect(enUS.register).toHaveProperty('title')
expect(enUS.register).toHaveProperty('username')
expect(enUS.register).toHaveProperty('password')
expect(enUS.register).toHaveProperty('confirmPassword')
expect(enUS.register).toHaveProperty('email')
expect(enUS.register).toHaveProperty('phonenumber')
expect(enUS.register).toHaveProperty('code')
expect(enUS.register).toHaveProperty('sendCode')
expect(enUS.register).toHaveProperty('registerButton')
expect(enUS.register).toHaveProperty('registerButtonLoading')
expect(enUS.register).toHaveProperty('hasAccount')
expect(enUS.register).toHaveProperty('loginNow')
expect(enUS.register).toHaveProperty('usernameRequired')
expect(enUS.register).toHaveProperty('usernameLength')
expect(enUS.register).toHaveProperty('passwordRequired')
expect(enUS.register).toHaveProperty('passwordLength')
expect(enUS.register).toHaveProperty('passwordPattern')
expect(enUS.register).toHaveProperty('confirmPasswordRequired')
expect(enUS.register).toHaveProperty('confirmPasswordMismatch')
expect(enUS.register).toHaveProperty('codeRequired')
expect(enUS.register).toHaveProperty('emailRequired')
expect(enUS.register).toHaveProperty('phonenumberRequired')
expect(enUS.register).toHaveProperty('registerSuccess')
expect(enUS.register).toHaveProperty('registerSuccessTitle')
})
it('should contain all error translations', () => {
expect(enUS.error).toHaveProperty('authFailed')
expect(enUS.error).toHaveProperty('noPermission')
expect(enUS.error).toHaveProperty('notFound')
expect(enUS.error).toHaveProperty('default')
expect(enUS.error).toHaveProperty('networkError')
expect(enUS.error).toHaveProperty('timeout')
expect(enUS.error).toHaveProperty('systemError')
expect(enUS.error).toHaveProperty('sessionExpired')
expect(enUS.error).toHaveProperty('sessionExpiredTitle')
expect(enUS.error).toHaveProperty('relogin')
expect(enUS.error).toHaveProperty('invalidSession')
expect(enUS.error).toHaveProperty('dataProcessing')
expect(enUS.error).toHaveProperty('downloadError')
expect(enUS.error).toHaveProperty('downloading')
})
it('should have non-empty translation values', () => {
Object.values(enUS.common).forEach(value => {
expect(value).toBeTruthy()
expect(typeof value).toBe('string')
})
})
it('should support variable interpolation in registerSuccess', () => {
const username = 'testuser'
const message = enUS.register.registerSuccess.replace('{username}', username)
expect(message).toContain(username)
})
it('should support variable interpolation in systemError', () => {
const code = '404'
const message = enUS.error.systemError.replace('{code}', code)
expect(message).toContain(code)
})
it('should have matching keys with zh-CN', () => {
const zhCN = require('../zh-CN').default
const getKeys = (obj: any, prefix = ''): string[] => {
let keys: string[] = []
for (const key in obj) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
keys = keys.concat(getKeys(obj[key], prefix + key + '.'))
} else {
keys.push(prefix + key)
}
}
return keys
}
const zhCNKeys = getKeys(zhCN)
const enUSKeys = getKeys(enUS)
zhCNKeys.forEach(key => {
expect(enUSKeys).toContain(key)
})
})
})