feat: Updates DeepL auto translate provider to get supported languages from API (#37250)

fix-upload-thumb-orientation^2
Abhinav Kumar 3 months ago committed by GitHub
parent 917005c53e
commit d075db2be5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 5
      .changeset/wild-impalas-sip.md
  2. 122
      apps/meteor/app/autotranslate/server/deeplTranslate.ts

@ -0,0 +1,5 @@
---
'@rocket.chat/meteor': minor
---
Updates AutoTranslate to fetch supported languages dynamically from DeepL API.

@ -34,6 +34,8 @@ class DeeplAutoTranslate extends AutoTranslate {
apiEndPointUrl: string;
private supportedLanguageEndpointUrl: string;
/**
* setup api reference to deepl translate to be used as message translation provider.
* @constructor
@ -50,9 +52,11 @@ class DeeplAutoTranslate extends AutoTranslate {
// if the api key ends with `:fx` it is a free api key
if (/:fx$/.test(value)) {
this.apiEndPointUrl = freeApiEndpoint;
this.supportedLanguageEndpointUrl = `https://api-free.deepl.com/v2/languages`;
return;
}
this.apiEndPointUrl = proApiEndpoint;
this.supportedLanguageEndpointUrl = `https://api.deepl.com/v2/languages`;
});
}
@ -97,106 +101,28 @@ class DeeplAutoTranslate extends AutoTranslate {
if (this.supportedLanguages[target]) {
return this.supportedLanguages[target];
}
this.supportedLanguages[target] = [
{
language: 'bg',
name: i18n.t('Language_Bulgarian', { lng: target }),
},
{
language: 'cs',
name: i18n.t('Language_Czech', { lng: target }),
},
{
language: 'da',
name: i18n.t('Language_Danish', { lng: target }),
},
{
language: 'de',
name: i18n.t('Language_German', { lng: target }),
},
{
language: 'el',
name: i18n.t('Language_Greek', { lng: target }),
},
{
language: 'en',
name: i18n.t('Language_English', { lng: target }),
},
{
language: 'es',
name: i18n.t('Language_Spanish', { lng: target }),
},
{
language: 'et',
name: i18n.t('Language_Estonian', { lng: target }),
},
{
language: 'fi',
name: i18n.t('Language_Finnish', { lng: target }),
},
{
language: 'fr',
name: i18n.t('Language_French', { lng: target }),
},
{
language: 'hu',
name: i18n.t('Language_Hungarian', { lng: target }),
},
{
language: 'it',
name: i18n.t('Language_Italian', { lng: target }),
},
{
language: 'ja',
name: i18n.t('Language_Japanese', { lng: target }),
},
{
language: 'lt',
name: i18n.t('Language_Lithuanian', { lng: target }),
},
{
language: 'lv',
name: i18n.t('Language_Latvian', { lng: target }),
},
{
language: 'nl',
name: i18n.t('Language_Dutch', { lng: target }),
},
{
language: 'pl',
name: i18n.t('Language_Polish', { lng: target }),
},
{
language: 'pt',
name: i18n.t('Language_Portuguese', { lng: target }),
},
{
language: 'ro',
name: i18n.t('Language_Romanian', { lng: target }),
},
{
language: 'ru',
name: i18n.t('Language_Russian', { lng: target }),
},
{
language: 'sk',
name: i18n.t('Language_Slovak', { lng: target }),
},
{
language: 'sl',
name: i18n.t('Language_Slovenian', { lng: target }),
},
{
language: 'sv',
name: i18n.t('Language_Swedish', { lng: target }),
},
{
language: 'zh',
name: i18n.t('Language_Chinese', { lng: target }),
let result: (ISupportedLanguage & { supports_formality?: boolean })[] = [];
const request = await fetch(this.supportedLanguageEndpointUrl, {
params: { type: 'target' },
headers: {
Authorization: `DeepL-Auth-Key ${this.apiKey}`,
},
];
});
if (!request.ok) {
throw new Error('Failed to fetch supported languages');
}
result = (await request.json()) as typeof result;
return this.supportedLanguages[target];
if (this.supportedLanguages[target]) {
return this.supportedLanguages[target];
}
this.supportedLanguages[target || 'en'] = result.map(({ language, ...other }) => ({
...other,
language: new Intl.Locale(language).toString(),
}));
return this.supportedLanguages[target || 'en'];
}
/**

Loading…
Cancel
Save