@@ -17,6 +17,53 @@ const {
1717  FrontendApplicationConfigProvider, 
1818}  =  require ( '@theia/core/lib/browser/frontend-application-config-provider' ) ; 
1919
20+ function  fetchFrom ( path )  { 
21+   const  {  Endpoint }  =  require ( '@theia/core/lib/browser/endpoint' ) ; 
22+   const  endpoint  =  new  Endpoint ( {  path } ) . getRestUrl ( ) . toString ( ) ; 
23+   return  fetch ( endpoint ) ; 
24+ } 
25+ 
26+ async  function  loadTranslations ( )  { 
27+   const  {  nls }  =  require ( '@theia/core/lib/common/nls' ) ; 
28+   const  defaultLocale  =  typeof  window  ===  'object'  &&  window  &&  window . localStorage . getItem ( nls . localeId )  ||  '' ; 
29+   if  ( defaultLocale  &&  ! nls . locale )  { 
30+       Object . assign ( nls ,  { 
31+           locale : defaultLocale 
32+       } ) ; 
33+   } 
34+   if  ( nls . locale )  { 
35+       const  response  =  await  fetchFrom ( `/i18n/${ nls . locale }  ) ; 
36+       nls . localization  =  await  response . json ( ) ; 
37+   } 
38+ } 
39+ 
40+ async  function  loadBackendOS ( )  { 
41+   const  response  =  await  fetchFrom ( '/os' ) ; 
42+   const  osType  =  await  response . text ( ) ; 
43+   const  isWindows  =  osType  ===  'Windows' ; 
44+   const  isOSX  =  osType  ===  'OSX' ; 
45+   OS . backend . isOSX  =  isOSX ; 
46+   OS . backend . isWindows  =  isWindows ; 
47+   OS . backend . type  =  ( )  =>  osType ; 
48+ } 
49+ 
50+ function  customizeMonacoNls ( )  { 
51+   const  MonacoNls  =  require ( '@theia/monaco-editor-core/esm/vs/nls' ) ; 
52+   const  {  nls : TheiaNls  }  =  require ( '@theia/core/lib/common/nls' ) ; 
53+   const  {  Localization }  =  require ( '@theia/core/lib/common/i18n/localization' ) ; 
54+   Object . assign ( MonacoNls ,  { 
55+     localize ( _ ,  label ,  ...args )  { 
56+       if  ( TheiaNls . locale )  { 
57+         const  defaultKey  =  TheiaNls . getDefaultKey ( label ) ; 
58+         if  ( defaultKey )  { 
59+           return  TheiaNls . localize ( defaultKey ,  label ,  ...args ) ; 
60+         } 
61+       } 
62+       return  Localization . format ( label ,  args ) ; 
63+     } 
64+   } ) ; 
65+ } 
66+ 
2067// It is a mighty hack to support theme updates in the bundled IDE2. 
2168// If the custom theme registration happens before the restoration of the existing monaco themes, then any custom theme changes will be ignored. 
2269// This patch introduces a static deferred promise in the monaco-theming service that will be resolved when the restoration is ready. 
@@ -25,8 +72,14 @@ const {
2572// This patch customizes the monaco theme service behavior before loading the DI containers via the preload. 
2673// The preload is called only once before the app loads. The Theia extensions are not loaded at that point, but the app config provider is ready. 
2774const  preloader  =  require ( '@theia/core/lib/browser/preloader' ) ; 
28- const  originalPreload  =  preloader . preload ; 
2975preloader . preload  =  async  function  ( )  { 
76+   // Must require the monaco frontend module to activate the NLS customization for monaco. 
77+   // Otherwise, the NLS customization would trigger after the monaco UI components with all their translations are already loaded. 
78+   await  Promise . allSettled ( [ 
79+     loadTranslations ( ) , 
80+     loadBackendOS ( ) , 
81+   ] ) ; 
82+   customizeMonacoNls ( ) ; 
3083  const  {  MonacoThemingService }  =  require ( '@theia/monaco/lib/browser/monaco-theming-service' ) ; 
3184  const  {  MonacoThemeServiceIsReady }  =  require ( 'arduino-ide-extension/lib/browser/utils/window' ) ; 
3285  const  {  Deferred }  =  require ( '@theia/core/lib/common/promise-util' ) ; 
@@ -42,7 +95,6 @@ preloader.preload = async function () {
4295    await  this . restore ( ) ; 
4396    ready . resolve ( ) ; 
4497  } . bind ( MonacoThemingService ) ; 
45-   return  originalPreload ( ) ; 
4698} . bind ( preloader ) ; 
4799
48100const  lightTheme  =  'arduino-theme' ; 
0 commit comments