@jupyterlab/translation-extension 4.0.0-alpha.9 → 4.0.0-beta.1
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 +26 -11
- package/lib/index.js.map +1 -1
- package/package.json +9 -8
- package/schema/plugin.json +2 -2
- package/src/index.ts +195 -0
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: [
|
|
48
|
+
requires: [ISettingRegistry, ITranslator],
|
|
49
|
+
optional: [IMainMenu, ICommandPalette],
|
|
43
50
|
autoStart: true,
|
|
44
|
-
activate: (app,
|
|
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 =
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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":"AAAA;;;+EAG+E;AAC/E;;;GAGG;AAEH,OAAO,EACL,eAAe,EAEhB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
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-
|
|
3
|
+
"version": "4.0.0-beta.1",
|
|
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-
|
|
42
|
-
"@jupyterlab/apputils": "^4.0.0-
|
|
43
|
-
"@jupyterlab/mainmenu": "^4.0.0-
|
|
44
|
-
"@jupyterlab/settingregistry": "^4.0.0-
|
|
45
|
-
"@jupyterlab/translation": "^4.0.0-
|
|
42
|
+
"@jupyterlab/application": "^4.0.0-beta.1",
|
|
43
|
+
"@jupyterlab/apputils": "^4.0.0-beta.1",
|
|
44
|
+
"@jupyterlab/mainmenu": "^4.0.0-beta.1",
|
|
45
|
+
"@jupyterlab/settingregistry": "^4.0.0-beta.1",
|
|
46
|
+
"@jupyterlab/translation": "^4.0.0-beta.1"
|
|
46
47
|
},
|
|
47
48
|
"devDependencies": {
|
|
48
49
|
"rimraf": "~3.0.0",
|
|
49
|
-
"typescript": "~
|
|
50
|
+
"typescript": "~5.0.2"
|
|
50
51
|
},
|
|
51
52
|
"publishConfig": {
|
|
52
53
|
"access": "public"
|
package/schema/plugin.json
CHANGED
|
@@ -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', '
|
|
37
|
-
"default": "
|
|
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;
|