Переглянути джерело

Merge pull request #8980 from goanpeca/fix/server-endpoint

PR: Fix translation server endpoint
Jason Grout 4 роки тому
батько
коміт
687215c1b8

+ 1 - 0
packages/application/src/frontend.ts

@@ -327,6 +327,7 @@ export namespace JupyterFrontEnd {
       readonly static: string;
       readonly settings: string;
       readonly themes: string;
+      readonly translations: string;
       readonly hubPrefix?: string;
       readonly hubHost?: string;
       readonly hubUser?: string;

+ 1 - 0
packages/application/src/lab.ts

@@ -268,6 +268,7 @@ export namespace JupyterLab {
       static: PageConfig.getOption('staticUrl'),
       settings: PageConfig.getOption('settingsUrl'),
       themes: PageConfig.getOption('themesUrl'),
+      translations: PageConfig.getOption('translationsApiUrl'),
       hubHost: PageConfig.getOption('hubHost') || undefined,
       hubPrefix: PageConfig.getOption('hubPrefix') || undefined,
       hubUser: PageConfig.getOption('hubUser') || undefined,

+ 11 - 15
packages/translation-extension/src/index.ts

@@ -16,9 +16,7 @@ import { ISettingRegistry } from '@jupyterlab/settingregistry';
 
 import {
   ITranslator,
-  ITranslatorConnector,
   TranslationManager,
-  TranslatorConnector,
   requestTranslationsAPI
 } from '@jupyterlab/translation';
 
@@ -37,21 +35,16 @@ export namespace CommandIDs {
  */
 const PLUGIN_ID = '@jupyterlab/translation-extension:plugin';
 
-const connector: JupyterFrontEndPlugin<ITranslatorConnector> = {
-  id: '@jupyterlab/translation:connector',
-  autoStart: true,
-  provides: ITranslatorConnector,
-  activate: () => {
-    return new TranslatorConnector();
-  }
-};
-
 const translator: JupyterFrontEndPlugin<ITranslator> = {
   id: '@jupyterlab/translation:translator',
   autoStart: true,
-  requires: [ISettingRegistry, ITranslatorConnector],
+  requires: [JupyterFrontEnd.IPaths, ISettingRegistry],
   provides: ITranslator,
-  activate: async (app: JupyterFrontEnd, settings: ISettingRegistry) => {
+  activate: async (
+    app: JupyterFrontEnd,
+    paths: JupyterFrontEnd.IPaths,
+    settings: ISettingRegistry
+  ) => {
     const setting = await settings.load(PLUGIN_ID);
     const currentLocale: string = setting.get('locale').composite as string;
     let stringsPrefix: string = setting.get('stringsPrefix')
@@ -59,7 +52,10 @@ const translator: JupyterFrontEndPlugin<ITranslator> = {
     const displayStringsPrefix: boolean = setting.get('displayStringsPrefix')
       .composite as boolean;
     stringsPrefix = displayStringsPrefix ? stringsPrefix : '';
-    const translationManager = new TranslationManager(stringsPrefix);
+    const translationManager = new TranslationManager(
+      paths.urls.translations,
+      stringsPrefix
+    );
     await translationManager.fetch(currentLocale);
     return translationManager;
   }
@@ -181,5 +177,5 @@ const langMenu: JupyterFrontEndPlugin<void> = {
 /**
  * Export the plugins as default.
  */
-const plugins: JupyterFrontEndPlugin<any>[] = [connector, translator, langMenu];
+const plugins: JupyterFrontEndPlugin<any>[] = [translator, langMenu];
 export default plugins;

+ 2 - 2
packages/translation/src/manager.ts

@@ -8,8 +8,8 @@ import { ITranslator, TranslationBundle, TranslatorConnector } from './tokens';
  * Translation Manager
  */
 export class TranslationManager implements ITranslator {
-  constructor(stringsPrefix?: string) {
-    this._connector = new TranslatorConnector();
+  constructor(translationsUrl: string = '', stringsPrefix?: string) {
+    this._connector = new TranslatorConnector(translationsUrl);
     this._stringsPrefix = stringsPrefix || '';
     this._englishBundle = new Gettext({ stringsPrefix: this._stringsPrefix });
   }

+ 3 - 5
packages/translation/src/server.ts

@@ -13,16 +13,14 @@ import { ServerConnection } from '@jupyterlab/services';
  * @returns The response body interpreted as JSON
  */
 export async function requestTranslationsAPI<T>(
+  translationsUrl: string = '',
   locale = '',
   init: RequestInit = {}
 ): Promise<T> {
   // Make request to Jupyter API
   const settings = ServerConnection.makeSettings();
-  const requestUrl = URLExt.join(
-    settings.baseUrl,
-    '/lab/api/translations/', // API Namespace
-    locale
-  );
+  translationsUrl = translationsUrl || `${settings.appUrl}/api/translations/`;
+  const requestUrl = URLExt.join(settings.baseUrl, translationsUrl, locale);
   let response: Response;
   try {
     response = await ServerConnection.makeRequest(requestUrl, init, settings);

+ 8 - 1
packages/translation/src/tokens.ts

@@ -24,9 +24,16 @@ export const ITranslatorConnector = new Token<ITranslatorConnector>(
 export class TranslatorConnector
   extends DataConnector<Language, Language, { language: string }>
   implements ITranslatorConnector {
+  constructor(translationsUrl: string = '') {
+    super();
+    this._translationsUrl = translationsUrl;
+  }
+
   async fetch(opts: { language: string }): Promise<Language> {
-    return requestTranslationsAPI(opts.language);
+    return requestTranslationsAPI(opts.language, this._translationsUrl);
   }
+
+  private _translationsUrl: string;
 }
 
 export type TranslationBundle = {