blob: c7fe8e9ffc504c17c06f66535d84259497d854ef [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/**
* A wrapper around the angular-translate $translate service that offers a
* convenient way to fall back to a default translation if the requested
* translation is not available.
*/
angular.module('client').factory('guacTranslate', ['$injector', function guacTranslate($injector) {
// Required services
const $q = $injector.get('$q');
const $translate = $injector.get('$translate');
// Required types
const TranslationResult = $injector.get('TranslationResult');
/**
* Returns a promise that will be resolved with a TranslationResult containg either the
* requested ID and message (if translated), or the default ID and message if translated,
* or the literal value of `defaultTranslationId` for both the ID and message if neither
* is translated.
*
* @param {String} translationId
* The requested translation ID, which may or may not be translated.
*
* @param {Sting} defaultTranslationId
* The translation ID that will be used if no translation is found for `translationId`.
*
* @returns {Promise.<TranslationResult>}
* A promise which resolves with a TranslationResult containing the results from
* the translation attempt.
*/
var translateWithFallback = function translateWithFallback(translationId, defaultTranslationId) {
const deferredTranslation = $q.defer();
// Attempt to translate the requested translation ID
$translate(translationId).then(
// If the requested translation is available, use that
translation => deferredTranslation.resolve(new TranslationResult({
id: translationId, message: translation
})),
// Otherwise, try the default translation ID
() => $translate(defaultTranslationId).then(
// Default translation worked, so use that
defaultTranslation =>
deferredTranslation.resolve(new TranslationResult({
id: defaultTranslationId, message: defaultTranslation
})),
// Neither translation is available; as a fallback, return default ID for both
() => deferredTranslation.resolve(new TranslationResult({
id: defaultTranslationId, message: defaultTranslationId
})),
)
);
return deferredTranslation.promise;
};
return translateWithFallback;
}]);