Skip to content

Commit f9fedcd

Browse files
committed
feat: respect browser language
close #123
1 parent d925ba3 commit f9fedcd

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/monaco/env.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import onigasmWasm from 'onigasm/lib/onigasm.wasm?url'
77
import { editor, languages, Uri } from 'monaco-editor-core'
88
import * as volar from '@volar/monaco'
99
import { Store } from '../store'
10-
import { createJsDelivrDtsHost } from 'volar-service-typescript'
1110
import { getOrCreateModel } from './utils'
1211
import type { CreateData } from './vue.worker'
1312

@@ -76,15 +75,30 @@ export class WorkerHost {
7675
}
7776
}
7877

78+
async function fetchJson<T>(url: string) {
79+
try {
80+
const res = await fetch(url);
81+
if (res.status === 200) {
82+
return await res.json();
83+
}
84+
} catch {
85+
// ignore
86+
}
87+
}
88+
7989
let disposeVue: undefined | (() => void)
8090
export async function reloadVue(store: Store) {
8191
disposeVue?.()
8292

93+
const locale = navigator.language.toLowerCase()
94+
const tsLocalized = await fetchJson(`https://cdn.jsdelivr.net/npm/typescript/lib/${locale}/diagnosticMessages.generated.json`)
8395
const worker = editor.createWebWorker<any>({
8496
moduleId: 'vs/language/vue/vueWorker',
8597
label: 'vue',
8698
host: new WorkerHost(),
8799
createData: {
100+
locale: locale,
101+
tsLocalized: tsLocalized,
88102
tsconfig: store.getTsConfig?.() || {},
89103
dependencies: !store.vueVersion
90104
? {}

src/monaco/vue.worker.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { createLanguageService, createLanguageHost, createServiceEnvironment } f
88
import type { WorkerHost } from './env'
99

1010
export interface CreateData {
11+
locale: string
12+
tsLocalized: any
1113
tsconfig: {
1214
compilerOptions?: ts.CompilerOptions
1315
vueCompilerOptions?: Partial<VueCompilerOptions>
@@ -19,7 +21,7 @@ self.onmessage = () => {
1921
worker.initialize(
2022
(
2123
ctx: monaco.worker.IWorkerContext<WorkerHost>,
22-
{ tsconfig, dependencies }: CreateData
24+
{ tsconfig, dependencies, locale, tsLocalized }: CreateData
2325
) => {
2426
const { options: compilerOptions } = ts.convertCompilerOptionsFromJson(
2527
tsconfig?.compilerOptions || {},
@@ -30,6 +32,13 @@ self.onmessage = () => {
3032
const jsDelivrFs = createJsDelivrFs(ctx.host.onFetchCdnFile)
3133
const jsDelivrUriResolver = createJsDelivrUriResolver('/node_modules', dependencies)
3234

35+
if (locale) {
36+
env.locale = locale
37+
}
38+
if (tsLocalized) {
39+
host.getLocalizedDiagnosticMessages = () => tsLocalized
40+
}
41+
3342
decorateServiceEnvironment(env, jsDelivrUriResolver, jsDelivrFs)
3443

3544
return createLanguageService(

0 commit comments

Comments
 (0)