devexpress-reporting
Version:
DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.
80 lines (79 loc) • 3.24 kB
JavaScript
/**
* DevExpress HTML/JS Reporting (designer\localization\localizationService.js)
* Version: 25.1.3
* Build date: Jun 26, 2025
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* License: https://www.devexpress.com/Support/EULAs/universal.xml
*/
import { DxDeferred, findFirstItemMatchesCondition, isPromise, ShowMessage } from '@devexpress/analytics-core/analytics-internal';
import * as $ from 'jquery';
import { ReportAIService } from '../services/_aiService';
class TranslationFactory {
constructor() {
this._services = {};
}
getFirstRegistered() {
return findFirstItemMatchesCondition(Object.keys(this._services), (serviseKey) => this._services[serviseKey].onRequest !== undefined);
}
getService(name) {
return this._services[name];
}
getTranslations(texts, destinationLanguage) {
const $deferred = new DxDeferred();
DxDeferred.when(Object.keys(this._services).map((serviceName) => this.translate(serviceName, texts, destinationLanguage))).done((results) => {
$deferred.resolve([].concat(results));
});
return $deferred;
}
translate(name, texts, destinationLanguage, destinationLanguageText) {
if (!this._services[name])
return;
const $deferred = new DxDeferred();
const request = this._services[name].onRequest(texts, destinationLanguage, destinationLanguageText);
const promise = isPromise(request) ? request : $.ajax(request);
promise.done((result) => {
$deferred.resolve({ name, texts: this._services[name].onResponse(result) });
}).fail(() => $deferred.reject());
return $deferred.promise();
}
register(name, service) {
this._services[name] = service;
}
unregister(name) {
delete this._services[name];
}
}
export const _translationFactory = new TranslationFactory();
const aiTranslationServiceName = 'dxAITranslationService';
export function registerTranslationService(name, service) {
_translationFactory.register(name, service);
}
export function _unregisterAITranslationService() {
_translationFactory.unregister(aiTranslationServiceName);
}
export function _registerAITranslationService() {
registerTranslationService(aiTranslationServiceName, {
onRequest: (strings, destinationLanguage, destinationLanguageText) => {
const deferred = new DxDeferred();
const language = destinationLanguageText || destinationLanguage;
ReportAIService.localize(strings, language).done((result) => {
if (result.success) {
deferred.resolve(JSON.parse(result.text));
}
else {
ShowMessage(result.errorMessage);
deferred.reject();
}
}).fail((reason) => deferred.reject(reason));
return deferred.promise();
},
onResponse: (result) => {
return result;
},
_iconClass: 'ai-localization-service',
_icon: 'dxrd-svg-actions-ai_localization_service'
});
}
export function unregisterTranslationService(name) {
_translationFactory.unregister(name);
}