Skip to content

Commit d075db2

Browse files
authored
feat: Updates DeepL auto translate provider to get supported languages from API (RocketChat#37250)
1 parent 917005c commit d075db2

2 files changed

Lines changed: 29 additions & 98 deletions

File tree

.changeset/wild-impalas-sip.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@rocket.chat/meteor': minor
3+
---
4+
5+
Updates AutoTranslate to fetch supported languages dynamically from DeepL API.

apps/meteor/app/autotranslate/server/deeplTranslate.ts

Lines changed: 24 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ class DeeplAutoTranslate extends AutoTranslate {
3434

3535
apiEndPointUrl: string;
3636

37+
private supportedLanguageEndpointUrl: string;
38+
3739
/**
3840
* setup api reference to deepl translate to be used as message translation provider.
3941
* @constructor
@@ -50,9 +52,11 @@ class DeeplAutoTranslate extends AutoTranslate {
5052
// if the api key ends with `:fx` it is a free api key
5153
if (/:fx$/.test(value)) {
5254
this.apiEndPointUrl = freeApiEndpoint;
55+
this.supportedLanguageEndpointUrl = `https://api-free.deepl.com/v2/languages`;
5356
return;
5457
}
5558
this.apiEndPointUrl = proApiEndpoint;
59+
this.supportedLanguageEndpointUrl = `https://api.deepl.com/v2/languages`;
5660
});
5761
}
5862

@@ -97,106 +101,28 @@ class DeeplAutoTranslate extends AutoTranslate {
97101
if (this.supportedLanguages[target]) {
98102
return this.supportedLanguages[target];
99103
}
100-
this.supportedLanguages[target] = [
101-
{
102-
language: 'bg',
103-
name: i18n.t('Language_Bulgarian', { lng: target }),
104-
},
105-
{
106-
language: 'cs',
107-
name: i18n.t('Language_Czech', { lng: target }),
108-
},
109-
{
110-
language: 'da',
111-
name: i18n.t('Language_Danish', { lng: target }),
112-
},
113-
{
114-
language: 'de',
115-
name: i18n.t('Language_German', { lng: target }),
116-
},
117-
{
118-
language: 'el',
119-
name: i18n.t('Language_Greek', { lng: target }),
120-
},
121-
{
122-
language: 'en',
123-
name: i18n.t('Language_English', { lng: target }),
124-
},
125-
{
126-
language: 'es',
127-
name: i18n.t('Language_Spanish', { lng: target }),
128-
},
129-
{
130-
language: 'et',
131-
name: i18n.t('Language_Estonian', { lng: target }),
132-
},
133-
{
134-
language: 'fi',
135-
name: i18n.t('Language_Finnish', { lng: target }),
136-
},
137-
{
138-
language: 'fr',
139-
name: i18n.t('Language_French', { lng: target }),
140-
},
141-
{
142-
language: 'hu',
143-
name: i18n.t('Language_Hungarian', { lng: target }),
144-
},
145-
{
146-
language: 'it',
147-
name: i18n.t('Language_Italian', { lng: target }),
148-
},
149-
{
150-
language: 'ja',
151-
name: i18n.t('Language_Japanese', { lng: target }),
152-
},
153-
{
154-
language: 'lt',
155-
name: i18n.t('Language_Lithuanian', { lng: target }),
156-
},
157-
{
158-
language: 'lv',
159-
name: i18n.t('Language_Latvian', { lng: target }),
160-
},
161-
{
162-
language: 'nl',
163-
name: i18n.t('Language_Dutch', { lng: target }),
164-
},
165-
{
166-
language: 'pl',
167-
name: i18n.t('Language_Polish', { lng: target }),
168-
},
169-
{
170-
language: 'pt',
171-
name: i18n.t('Language_Portuguese', { lng: target }),
172-
},
173-
{
174-
language: 'ro',
175-
name: i18n.t('Language_Romanian', { lng: target }),
176-
},
177-
{
178-
language: 'ru',
179-
name: i18n.t('Language_Russian', { lng: target }),
180-
},
181-
{
182-
language: 'sk',
183-
name: i18n.t('Language_Slovak', { lng: target }),
184-
},
185-
{
186-
language: 'sl',
187-
name: i18n.t('Language_Slovenian', { lng: target }),
188-
},
189-
{
190-
language: 'sv',
191-
name: i18n.t('Language_Swedish', { lng: target }),
192-
},
193-
{
194-
language: 'zh',
195-
name: i18n.t('Language_Chinese', { lng: target }),
104+
let result: (ISupportedLanguage & { supports_formality?: boolean })[] = [];
105+
106+
const request = await fetch(this.supportedLanguageEndpointUrl, {
107+
params: { type: 'target' },
108+
headers: {
109+
Authorization: `DeepL-Auth-Key ${this.apiKey}`,
196110
},
197-
];
111+
});
112+
if (!request.ok) {
113+
throw new Error('Failed to fetch supported languages');
114+
}
115+
116+
result = (await request.json()) as typeof result;
198117

199-
return this.supportedLanguages[target];
118+
if (this.supportedLanguages[target]) {
119+
return this.supportedLanguages[target];
120+
}
121+
this.supportedLanguages[target || 'en'] = result.map(({ language, ...other }) => ({
122+
...other,
123+
language: new Intl.Locale(language).toString(),
124+
}));
125+
return this.supportedLanguages[target || 'en'];
200126
}
201127

202128
/**

0 commit comments

Comments
 (0)