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