Skip to content

Commit e7c0dfb

Browse files
committed
Implement React Context for translation management to enable dynamic translation loading in VS Code views
1 parent e0a0b6d commit e7c0dfb

8 files changed

Lines changed: 31 additions & 10 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { createContext } from 'react'
2+
3+
export const TranslationContext = createContext<
4+
Record<string, Record<string, string>>
5+
>({})
File renamed without changes.

packages/vscode/src/i18n/use-translation.ts renamed to packages/vscode/src/views/i18n/use-translation.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1-
import { translations } from '@/i18n/translations'
1+
import { useContext } from 'react'
2+
import { translations } from '@/views/i18n/translations'
3+
import { TranslationContext } from '@/views/i18n/TranslationContext'
24

35
export type TranslationKey = keyof (typeof translations)['en']
46

57
export const use_translation = () => {
68
let lang = document.documentElement.lang || 'en'
9+
const context_translations = useContext(TranslationContext)
710

8-
const translations_record = translations as Record<
9-
string,
10-
Record<string, string>
11-
>
11+
const translations_record = (
12+
Object.keys(context_translations).length > 0
13+
? context_translations
14+
: translations
15+
) as Record<string, Record<string, string>>
1216

1317
// Fallback to generic language code if specific locale not found (e.g. 'pl-PL' -> 'pl')
1418
if (!translations_record[lang]) {

packages/vscode/src/views/panel/frontend/App.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
import ReactDOM from 'react-dom/client'
22
import { Panel } from './Panel'
3+
import { translations } from '@/views/i18n/translations'
4+
import { TranslationContext } from '@/views/i18n/TranslationContext'
35

46
import '@vscode/codicons/dist/codicon.css'
57
import 'simplebar-react/dist/simplebar.min.css'
68
import '@ui/styles/global.scss'
79

810
const App = () => {
9-
return <Panel />
11+
return (
12+
<TranslationContext.Provider value={translations}>
13+
<Panel />
14+
</TranslationContext.Provider>
15+
)
1016
}
1117

1218
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement)

packages/vscode/src/views/panel/frontend/Home/Home.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { Checkpoint, FrontendMessage } from '@/views/panel/types/messages'
88
import { Responses as UiResponses } from '@ui/components/editor/panel/Responses'
99
import { ResponseHistoryItem } from '@shared/types/response-history-item'
1010
import { Separator } from '@ui/components/editor/panel/Separator'
11-
import { use_translation } from '@/i18n/use-translation'
11+
import { use_translation } from '@/views/i18n/use-translation'
1212

1313
type Props = {
1414
vscode: any

packages/vscode/src/views/panel/frontend/Main/MainView/components/Header/Header.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { IconButton as UiIconButton } from '@ui/components/editor/panel/IconButt
88
import styles from './Header.module.scss'
99
import { api_mode_labels, web_mode_labels } from '../../modes'
1010
import { use_keyboard_shortcuts } from './hooks/use-keyboard-shortcuts'
11-
import { use_translation } from '@/i18n/use-translation'
11+
import { use_translation } from '@/views/i18n/use-translation'
1212

1313
type Props = {
1414
mode: Mode

packages/vscode/src/views/settings/frontend/App.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
import ReactDOM from 'react-dom/client'
22
import { Settings } from './Settings'
3+
import { translations } from '@/views/i18n/translations'
4+
import { TranslationContext } from '@/views/i18n/TranslationContext'
35

46
import '@vscode/codicons/dist/codicon.css'
57
import 'simplebar-react/dist/simplebar.min.css'
68
import '@ui/styles/global.scss'
79

810
const App = () => {
9-
return <Settings />
11+
return (
12+
<TranslationContext.Provider value={translations}>
13+
<Settings />
14+
</TranslationContext.Provider>
15+
)
1016
}
1117

1218
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement)

packages/vscode/src/views/settings/frontend/Home/Home.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
} from '@/views/settings/types/messages'
1717
import { GeneralSection } from './sections/GeneralSection'
1818
import { PresetsSection } from './sections/PresetsSection'
19-
import { use_translation, TranslationKey } from '@/i18n/use-translation'
19+
import { use_translation, TranslationKey } from '@/views/i18n/use-translation'
2020

2121
type NavItem =
2222
| 'general'

0 commit comments

Comments
 (0)