@jupyterlab/translation-extension 4.0.0-alpha.8 → 4.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -6,8 +6,8 @@
6
6
  * @packageDocumentation
7
7
  * @module translation-extension
8
8
  */
9
- import { JupyterFrontEnd } from '@jupyterlab/application';
10
- import { Dialog, showDialog } from '@jupyterlab/apputils';
9
+ import { ILabShell, JupyterFrontEnd } from '@jupyterlab/application';
10
+ import { Dialog, ICommandPalette, showDialog } from '@jupyterlab/apputils';
11
11
  import { IMainMenu } from '@jupyterlab/mainmenu';
12
12
  import { ISettingRegistry } from '@jupyterlab/settingregistry';
13
13
  import { ITranslator, requestTranslationsAPI, TranslationManager } from '@jupyterlab/translation';
@@ -19,8 +19,9 @@ const translator = {
19
19
  id: '@jupyterlab/translation:translator',
20
20
  autoStart: true,
21
21
  requires: [JupyterFrontEnd.IPaths, ISettingRegistry],
22
+ optional: [ILabShell],
22
23
  provides: ITranslator,
23
- activate: async (app, paths, settings) => {
24
+ activate: async (app, paths, settings, labShell) => {
24
25
  const setting = await settings.load(PLUGIN_ID);
25
26
  const currentLocale = setting.get('locale').composite;
26
27
  let stringsPrefix = setting.get('stringsPrefix')
@@ -31,6 +32,11 @@ const translator = {
31
32
  const serverSettings = app.serviceManager.serverSettings;
32
33
  const translationManager = new TranslationManager(paths.urls.translations, stringsPrefix, serverSettings);
33
34
  await translationManager.fetch(currentLocale);
35
+ // Set translator to UI
36
+ if (labShell) {
37
+ labShell.translator = translationManager;
38
+ }
39
+ Dialog.translator = translationManager;
34
40
  return translationManager;
35
41
  }
36
42
  };
@@ -39,9 +45,10 @@ const translator = {
39
45
  */
40
46
  const langMenu = {
41
47
  id: PLUGIN_ID,
42
- requires: [IMainMenu, ISettingRegistry, ITranslator],
48
+ requires: [ISettingRegistry, ITranslator],
49
+ optional: [IMainMenu, ICommandPalette],
43
50
  autoStart: true,
44
- activate: (app, mainMenu, settings, translator) => {
51
+ activate: (app, settings, translator, mainMenu, palette) => {
45
52
  const trans = translator.load('jupyterlab');
46
53
  const { commands } = app;
47
54
  let currentLocale;
@@ -60,15 +67,17 @@ const langMenu = {
60
67
  var _a;
61
68
  // Read the settings
62
69
  loadSetting(setting);
63
- document.documentElement.lang = currentLocale;
70
+ document.documentElement.lang = (currentLocale !== null && currentLocale !== void 0 ? currentLocale : '').replace('_', '-');
64
71
  // Listen for your plugin setting changes using Signal
65
72
  setting.changed.connect(loadSetting);
66
73
  // Create a languages menu
67
- const languagesMenu = (_a = mainMenu.settingsMenu.items.find(item => {
68
- var _a;
69
- return item.type === 'submenu' &&
70
- ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.id) === 'jp-mainmenu-settings-language';
71
- })) === null || _a === void 0 ? void 0 : _a.submenu;
74
+ const languagesMenu = mainMenu
75
+ ? (_a = mainMenu.settingsMenu.items.find(item => {
76
+ var _a;
77
+ return item.type === 'submenu' &&
78
+ ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.id) === 'jp-mainmenu-settings-language';
79
+ })) === null || _a === void 0 ? void 0 : _a.submenu
80
+ : null;
72
81
  let command;
73
82
  const serverSettings = app.serviceManager.serverSettings;
74
83
  // Get list of available locales
@@ -119,6 +128,12 @@ const langMenu = {
119
128
  args: {}
120
129
  });
121
130
  }
131
+ if (palette) {
132
+ palette.addItem({
133
+ category: trans.__('Display Languages'),
134
+ command
135
+ });
136
+ }
122
137
  }
123
138
  })
124
139
  .catch(reason => {
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupyterlab/translation-extension",
3
- "version": "4.0.0-alpha.8",
3
+ "version": "4.0.0-beta.0",
4
4
  "description": "JupyterLab - Translation services",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -28,7 +28,8 @@
28
28
  "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}",
29
29
  "schema/**/*.{json,}",
30
30
  "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}",
31
- "style/index.js"
31
+ "style/index.js",
32
+ "src/**/*.{ts,tsx}"
32
33
  ],
33
34
  "scripts": {
34
35
  "build": "tsc",
@@ -38,15 +39,15 @@
38
39
  "watch": "tsc -w"
39
40
  },
40
41
  "dependencies": {
41
- "@jupyterlab/application": "^4.0.0-alpha.8",
42
- "@jupyterlab/apputils": "^4.0.0-alpha.8",
43
- "@jupyterlab/mainmenu": "^4.0.0-alpha.8",
44
- "@jupyterlab/settingregistry": "^4.0.0-alpha.8",
45
- "@jupyterlab/translation": "^4.0.0-alpha.8"
42
+ "@jupyterlab/application": "^4.0.0-beta.0",
43
+ "@jupyterlab/apputils": "^4.0.0-beta.0",
44
+ "@jupyterlab/mainmenu": "^4.0.0-beta.0",
45
+ "@jupyterlab/settingregistry": "^4.0.0-beta.0",
46
+ "@jupyterlab/translation": "^4.0.0-beta.0"
46
47
  },
47
48
  "devDependencies": {
48
49
  "rimraf": "~3.0.0",
49
- "typescript": "~4.5.2"
50
+ "typescript": "~5.0.2"
50
51
  },
51
52
  "publishConfig": {
52
53
  "access": "public"
@@ -33,8 +33,8 @@
33
33
  "locale": {
34
34
  "type": "string",
35
35
  "title": "Language locale",
36
- "description": "Set the interface display language. Examples: 'es_CO', 'fr'.",
37
- "default": "en"
36
+ "description": "Set the interface display language. Examples: 'es_CO', 'fr_FR'. Set 'default' to use the server default locale. Requires corresponding language pack to be installed.",
37
+ "default": "default"
38
38
  },
39
39
  "stringsPrefix": {
40
40
  "type": "string",
package/src/index.ts ADDED
@@ -0,0 +1,195 @@
1
+ /* ----------------------------------------------------------------------------
2
+ | Copyright (c) Jupyter Development Team.
3
+ | Distributed under the terms of the Modified BSD License.
4
+ |----------------------------------------------------------------------------*/
5
+ /**
6
+ * @packageDocumentation
7
+ * @module translation-extension
8
+ */
9
+
10
+ import {
11
+ ILabShell,
12
+ JupyterFrontEnd,
13
+ JupyterFrontEndPlugin
14
+ } from '@jupyterlab/application';
15
+ import { Dialog, ICommandPalette, showDialog } from '@jupyterlab/apputils';
16
+ import { IMainMenu } from '@jupyterlab/mainmenu';
17
+ import { ISettingRegistry } from '@jupyterlab/settingregistry';
18
+ import {
19
+ ITranslator,
20
+ requestTranslationsAPI,
21
+ TranslationManager
22
+ } from '@jupyterlab/translation';
23
+
24
+ /**
25
+ * Translation plugins
26
+ */
27
+ const PLUGIN_ID = '@jupyterlab/translation-extension:plugin';
28
+
29
+ const translator: JupyterFrontEndPlugin<ITranslator> = {
30
+ id: '@jupyterlab/translation:translator',
31
+ autoStart: true,
32
+ requires: [JupyterFrontEnd.IPaths, ISettingRegistry],
33
+ optional: [ILabShell],
34
+ provides: ITranslator,
35
+ activate: async (
36
+ app: JupyterFrontEnd,
37
+ paths: JupyterFrontEnd.IPaths,
38
+ settings: ISettingRegistry,
39
+ labShell: ILabShell | null
40
+ ) => {
41
+ const setting = await settings.load(PLUGIN_ID);
42
+ const currentLocale: string = setting.get('locale').composite as string;
43
+ let stringsPrefix: string = setting.get('stringsPrefix')
44
+ .composite as string;
45
+ const displayStringsPrefix: boolean = setting.get('displayStringsPrefix')
46
+ .composite as boolean;
47
+ stringsPrefix = displayStringsPrefix ? stringsPrefix : '';
48
+ const serverSettings = app.serviceManager.serverSettings;
49
+ const translationManager = new TranslationManager(
50
+ paths.urls.translations,
51
+ stringsPrefix,
52
+ serverSettings
53
+ );
54
+ await translationManager.fetch(currentLocale);
55
+
56
+ // Set translator to UI
57
+ if (labShell) {
58
+ labShell.translator = translationManager;
59
+ }
60
+
61
+ Dialog.translator = translationManager;
62
+
63
+ return translationManager;
64
+ }
65
+ };
66
+
67
+ /**
68
+ * Initialization data for the extension.
69
+ */
70
+ const langMenu: JupyterFrontEndPlugin<void> = {
71
+ id: PLUGIN_ID,
72
+ requires: [ISettingRegistry, ITranslator],
73
+ optional: [IMainMenu, ICommandPalette],
74
+ autoStart: true,
75
+ activate: (
76
+ app: JupyterFrontEnd,
77
+ settings: ISettingRegistry,
78
+ translator: ITranslator,
79
+ mainMenu: IMainMenu | null,
80
+ palette: ICommandPalette | null
81
+ ) => {
82
+ const trans = translator.load('jupyterlab');
83
+ const { commands } = app;
84
+ let currentLocale: string;
85
+ /**
86
+ * Load the settings for this extension
87
+ *
88
+ * @param setting Extension settings
89
+ */
90
+ function loadSetting(setting: ISettingRegistry.ISettings): void {
91
+ // Read the settings and convert to the correct type
92
+ currentLocale = setting.get('locale').composite as string;
93
+ }
94
+
95
+ settings
96
+ .load(PLUGIN_ID)
97
+ .then(setting => {
98
+ // Read the settings
99
+ loadSetting(setting);
100
+ document.documentElement.lang = (currentLocale ?? '').replace('_', '-');
101
+
102
+ // Listen for your plugin setting changes using Signal
103
+ setting.changed.connect(loadSetting);
104
+
105
+ // Create a languages menu
106
+ const languagesMenu = mainMenu
107
+ ? mainMenu.settingsMenu.items.find(
108
+ item =>
109
+ item.type === 'submenu' &&
110
+ item.submenu?.id === 'jp-mainmenu-settings-language'
111
+ )?.submenu
112
+ : null;
113
+
114
+ let command: string;
115
+
116
+ const serverSettings = app.serviceManager.serverSettings;
117
+ // Get list of available locales
118
+ requestTranslationsAPI<any>('', '', {}, serverSettings)
119
+ .then(data => {
120
+ for (const locale in data['data']) {
121
+ const value = data['data'][locale];
122
+ const displayName = value.displayName;
123
+ const nativeName = value.nativeName;
124
+ const toggled = displayName === nativeName;
125
+ const label = toggled
126
+ ? `${displayName}`
127
+ : `${displayName} - ${nativeName}`;
128
+
129
+ // Add a command per language
130
+ command = `jupyterlab-translation:${locale}`;
131
+ commands.addCommand(command, {
132
+ label: label,
133
+ caption: label,
134
+ isEnabled: () => !toggled,
135
+ isVisible: () => true,
136
+ isToggled: () => toggled,
137
+ execute: () => {
138
+ return showDialog({
139
+ title: trans.__('Change interface language?'),
140
+ body: trans.__(
141
+ 'After changing the interface language to %1, you will need to reload JupyterLab to see the changes.',
142
+ label
143
+ ),
144
+ buttons: [
145
+ Dialog.cancelButton({ label: trans.__('Cancel') }),
146
+ Dialog.okButton({ label: trans.__('Change and reload') })
147
+ ]
148
+ }).then(result => {
149
+ if (result.button.accept) {
150
+ setting
151
+ .set('locale', locale)
152
+ .then(() => {
153
+ window.location.reload();
154
+ })
155
+ .catch(reason => {
156
+ console.error(reason);
157
+ });
158
+ }
159
+ });
160
+ }
161
+ });
162
+
163
+ // Add the language command to the menu
164
+ if (languagesMenu) {
165
+ languagesMenu.addItem({
166
+ command,
167
+ args: {}
168
+ });
169
+ }
170
+
171
+ if (palette) {
172
+ palette.addItem({
173
+ category: trans.__('Display Languages'),
174
+ command
175
+ });
176
+ }
177
+ }
178
+ })
179
+ .catch(reason => {
180
+ console.error(`Available locales errored!\n${reason}`);
181
+ });
182
+ })
183
+ .catch(reason => {
184
+ console.error(
185
+ `The jupyterlab translation extension appears to be missing.\n${reason}`
186
+ );
187
+ });
188
+ }
189
+ };
190
+
191
+ /**
192
+ * Export the plugins as default.
193
+ */
194
+ const plugins: JupyterFrontEndPlugin<any>[] = [translator, langMenu];
195
+ export default plugins;