@@ -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 ( / : f x $ / . 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