Skip to content

Commit 5d1a911

Browse files
committed
fix: add more language entries to SUPPORTED_LANGUAGES for translation
1 parent 65eaa0d commit 5d1a911

File tree

2 files changed

+65
-63
lines changed

2 files changed

+65
-63
lines changed

utils/language/detect.test.ts

Lines changed: 25 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,40 @@
1-
import { beforeEach, describe, expect, it } from 'vitest'
1+
// @ts-expect-error -- guesslanguage has no types
2+
import { guessLanguage } from 'guesslanguage'
3+
import { afterAll, beforeEach, describe, expect, it, vi } from 'vitest'
24
import { fakeBrowser } from 'wxt/testing'
35

4-
import { detectLanguage } from './detect'
6+
import type { LanguageCode } from './detect'
7+
import { detectLanguage, getLanguageName, SUPPORTED_LANGUAGE_CODES } from './detect'
58

6-
const englishSentences = [
7-
'Hello, how are you?',
8-
'This is a test sentence.',
9-
'The quick brown fox jumps over the lazy dog.',
10-
'I love programming in JavaScript.',
11-
'What is your favorite color?',
12-
'The weather is nice today.',
13-
'I enjoy reading books in my free time.',
14-
'Can you help me with this problem?',
15-
'I am learning new things every day.',
16-
]
17-
18-
const chineseSentences = [
19-
'你好,今天怎么样?',
20-
'我喜欢编程和学习新知识。',
21-
'今天天气很好,我们去散步吧。',
22-
'你最喜欢的食物是什么?',
23-
'我正在学习中文,希望能流利地说。',
24-
'这本书非常有趣,我很喜欢。',
25-
'你能帮我解决这个问题吗?',
26-
'你对未来有什么计划?',
27-
]
28-
29-
const japaneseSentences = [
30-
'こんにちは、今日はどうですか?',
31-
'私はプログラミングと新しい知識を学ぶのが好きです。',
32-
'今日は天気が良いので、散歩に行きましょう。',
33-
'あなたの好きな食べ物は何ですか?',
34-
'私は日本語を勉強しています。流暢に話せるようになりたいです。',
35-
'この本はとても面白いです。私はそれが大好きです。',
36-
'この問題を解決するのを手伝ってくれますか?',
37-
'あなたの将来の計画は何ですか?',
38-
]
39-
40-
const koreanSentences = [
41-
'안녕하세요, 오늘은 어때요?',
42-
'저는 프로그래밍과 새로운 지식을 배우는 것을 좋아합니다.',
43-
'오늘 날씨가 좋아서 산책하러 가요.',
44-
'가장 좋아하는 음식은 무엇인가요?',
45-
'저는 한국어를 배우고 있습니다. 유창하게 말할 수 있게 되고 싶어요.',
46-
'이 책은 정말 재미있어요. 저는 그것을 좋아해요.',
47-
'이 문제를 해결하는 데 도와줄 수 있나요?',
48-
'당신의 미래 계획은 무엇인가요?',
49-
]
9+
const guessDetectSpy = vi.spyOn(guessLanguage, 'detect')
5010

5111
describe('language detector', () => {
5212
beforeEach(() => {
5313
// See https://webext-core.aklinker1.io/fake-browser/reseting-state
5414
fakeBrowser.reset()
15+
guessDetectSpy.mockReset()
16+
guessDetectSpy.mockImplementation((_text: string, cb: (lang: string) => void) => cb('en'))
17+
})
18+
19+
it.each(SUPPORTED_LANGUAGE_CODES)('returns the detected code when supported (%s)', async (code) => {
20+
guessDetectSpy.mockImplementation((_text: string, cb: (lang: string) => void) => cb(code))
21+
22+
await expect(detectLanguage('sample text')).resolves.toBe(code)
5523
})
5624

57-
it('should detect the language of input string', async () => {
58-
for (const sentence of englishSentences) {
59-
const lang = await detectLanguage(sentence)
60-
expect(lang).toBe('en')
61-
}
25+
it('falls back to en when the detected code is not supported', async () => {
26+
guessDetectSpy.mockImplementation((_text: string, cb: (lang: string) => void) => cb('xx'))
6227

63-
for (const sentence of chineseSentences) {
64-
const lang = await detectLanguage(sentence)
65-
expect(lang).toBe('zh')
66-
}
28+
await expect(detectLanguage('unknown language')).resolves.toBe('en')
29+
})
6730

68-
for (const sentence of japaneseSentences) {
69-
const lang = await detectLanguage(sentence)
70-
expect(lang).toBe('ja')
71-
}
31+
it('returns the language display name or defaults to English', () => {
32+
expect(getLanguageName('zh')).toBe('简体中文')
33+
expect(getLanguageName('en')).toBe('English')
34+
expect(getLanguageName('xx' as LanguageCode)).toBe('English')
35+
})
7236

73-
for (const sentence of koreanSentences) {
74-
const lang = await detectLanguage(sentence)
75-
expect(lang).toBe('ko')
76-
}
37+
afterAll(() => {
38+
guessDetectSpy.mockRestore()
7739
})
7840
})

utils/language/detect.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,30 @@ export const SUPPORTED_LANGUAGES = [
1010
name: 'Español',
1111
code: 'es',
1212
},
13+
{
14+
name: 'Français',
15+
code: 'fr',
16+
},
17+
{
18+
name: 'Deutsch',
19+
code: 'de',
20+
},
21+
{
22+
name: 'Português',
23+
code: 'pt',
24+
},
25+
{
26+
name: 'Italiano',
27+
code: 'it',
28+
},
29+
{
30+
name: 'Русский',
31+
code: 'ru',
32+
},
33+
{
34+
name: 'Nederlands',
35+
code: 'nl',
36+
},
1337
{
1438
name: '日本語',
1539
code: 'ja',
@@ -22,6 +46,22 @@ export const SUPPORTED_LANGUAGES = [
2246
code: 'zh',
2347
name: '简体中文',
2448
},
49+
{
50+
code: 'zh-TW',
51+
name: '繁體中文',
52+
},
53+
{
54+
code: 'tr',
55+
name: 'Türkçe',
56+
},
57+
{
58+
code: 'vi',
59+
name: 'TiếngViệt',
60+
},
61+
{
62+
code: 'th',
63+
name: 'ภาษาไทย',
64+
},
2565
] as const
2666

2767
export const SUPPORTED_LANGUAGE_CODES = SUPPORTED_LANGUAGES.map((lang) => lang.code)

0 commit comments

Comments
 (0)