ui5-i18n-translate
Version:
A command-line interface (CLI) tool to effortlessly translate your UI5 i18n fallback files into multiple languages using the SAP Translation Hub. This package streamlines the localization process for your UI5 applications by automating the translation of
68 lines (58 loc) • 2.12 kB
text/typescript
import axios from "axios"
export default class Translator {
private authUrl: string
private authClientId: string
private authClientSecret: string
private apiUrl: string
private token: string
constructor(authUrl: string, authClientId: string, authClientSecret: string, apiUrl: string) {
this.authUrl = authUrl
this.authClientId = authClientId
this.authClientSecret = authClientSecret
this.apiUrl = apiUrl
}
private async requestToken() {
if (this.token) {
return
}
const encodedParams = new URLSearchParams()
encodedParams.set("client_id", this.authClientId)
encodedParams.set("client_secret", this.authClientSecret)
encodedParams.set("grant_type", "client_credentials")
encodedParams.set("response_type", "token")
const options = {
method: 'POST',
url: `${this.authUrl}/oauth/token`,
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data: encodedParams,
}
try {
const response: any = await axios.request(options)
this.token = response.data.access_token
} catch (error) {
throw new Error(error.message)
}
}
public async translate(units, targetLanguages, sourceLanguage) {
await this.requestToken()
const options = {
method: "POST",
url: `${this.apiUrl}/translationhub/api/v2/translate`,
headers: {
"content-type": "application/json; charset=utf-8",
authorization: `Bearer ${this.token}`,
},
data: {
targetLanguages: targetLanguages,
sourceLanguage: sourceLanguage,
units: units
}
}
try {
const response: any = await axios.request(options)
return response.data?.units
} catch (error) {
throw new Error(error.message)
}
}
}