UNPKG

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
/** * 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); }