turbocommons-ts
Version:
General purpose library that implements frequently used and generic software development tasks
397 lines (396 loc) • 20.8 kB
TypeScript
/**
* TurboCommons is a general purpose and cross-language library that implements frequently used and generic software development tasks.
*
* Website : -> https://turboframework.org/en/libs/turbocommons
* License : -> Licensed under the Apache License, Version 2.0. You may not use this file except in compliance with the License.
* License Url : -> http://www.apache.org/licenses/LICENSE-2.0
* CopyRight : -> Copyright 2015 Edertone Advanded Solutions (08211 Castellar del Vallès, Barcelona). http://www.edertone.com
*/
/**
* Fully featured translation manager to be used with any application that requires text internationalization.
*/
export declare class LocalizationManager {
/**
* Defines the behaviour for get(), getStartCase(), etc... methods when a key is not found on
* a bundle or the bundle does not exist
*
* If this value is empty, all missing keys will return an empty value
* If this value contains a string, all missing keys will return that string
* If this value contains a string with some of the following wildcards:
* - $key will be replaced with the key name. For example: get("NAME") will output [NAME] if the key is not found and missingKeyFormat = '[$key]'
* - $exception (This is the default value) will throw an exception with the problem cause description.
*/
missingKeyFormat: string;
/**
* Wildcards are string fragments that are placed inside the translated texts. Their main purpose is to be replaced at
* runtime by custom values like for example a user name, a date, a numeric value, etc..
*
* This class helps with this process by including a parameter called 'toReplace' on all .get methods which allows us
* to specify a string or list of strings that will replace the respective wildcards on the translated text. Each wildcard
* must follow the format specified here, and contain a numeric digit that will be used to find the replacement text at the
* 'toReplace' list. For example, if we define $N as the wildcard format, and we have a translation that contains $0, $1, $2,
* $0 will be replaced with the first element on toReplace, $1 with the second and so.
*
* Note that N is mandayory on the wildcards format and the first index value is 0.
*/
wildCardsFormat: string;
/**
* If set to true, when we call any get method from this class to retrieve a translated text, we will be forced
* to provide the bundle for the key we are looking for. If set to false, only the key parameter will be required.
*/
isBundleMandatory: boolean;
/**
* Tells if the class has been initialized or not
*/
private _initialized;
/**
* @see this.locales()
*/
private _locales;
/**
* @see this.languages()
*/
private _languages;
/**
* Stores the latest resource bundle that's been used to read a localized value.
* This is used by default when calling get without a bundle value
*/
private _activeBundle;
/**
* Stores the label for the latest location that's been used to read a localized value
* This is used by default when calling get without a location value
*/
private _activeLocation;
/**
* Stores all the provided location definitions
*/
private _definedLocations;
/**
* Stores all the loaded localization data by location name, locales, bundle and key
*/
protected _loadedTranslations: {
[location: string]: {
[locale: string]: {
[bundle: string]: {
[key: string]: string;
};
};
};
};
/**
* A files manager instance used to load the data when paths are from file system.
*
* (Note that FilesManager class is part of the TurboDepot library)
*/
private _filesManager;
/**
* An http manager instance used to load the data when paths are urls
*/
private _httpManager;
/**
* Check if the class has been correctly initialized
*/
isInitialized(): boolean;
/**
* Checks if the specified locale is currently loaded for the currently defined bundles and paths.
*
* @param locale A locale to check. For example 'en_US'
*
* @return True if the locale is currently loaded on the class, false if not.
*/
isLocaleLoaded(locale: string): boolean;
/**
* Checks if the specified 2 digit language is currently loaded for the currently defined bundles and paths.
*
* @param language A language to check. For example 'en'
*
* @return True if the language is currently loaded on the class, false if not.
*/
isLanguageLoaded(language: string): boolean;
/**
* Performs the initial data load by looking for resource bundles on all the specified locations.
* All the translations will be loaded for each of the specified locales.
*
* Calling this method is mandatory before starting to use this class.
*
* @param locationsLoader An instance of HTTPManager or FilesManager that will be used to load the provided locations. If we are working
* with paths that are urls, we will pass here an HTTPManager. If we are working with file system paths, we will pass a FilesManager.
* (Note that FilesManager class is part of the TurboDepot library)
* @param locales List of languages for which we want to load the translations. The list also defines the preferred
* translation order when a specified key is not found for a locale.
* @param locations A list (sorted by preference) where each item defines a translations location and must have three properties:
* - label: A name that will be used to reference the location
* - path: A relative or absolute string that defines a location where resourcebundles reside. It must contain some wildcards:
* - $locale wildcard will be replaced by each specific locale when trying to reach a path
* - $bundle wildcard will be replaced by each specific bundle name when trying to reach a path
* Example1: 'myFolder/$locale/$bundle.txt' will resolve to
* 'myFolder/en_US/Customers.txt' when trying to load the Customers bundle for US english locale.
* Example2: 'myFolder/$bundle_$locale.properties' will resolve to
* 'myFolder/Customers_en_US.properties' when trying to load the Customers bundle for US english locale.
* - bundles: The list of bundles to be loaded from the specified path
* @param finishedCallback A method that will be executed once the initialization ends. An errors variable will be passed
* to this method containing an array with information on errors that may have happened while loading the data.
* @param progressCallback A method that can be used to track the loading progress when lots of bundles and locales are used.
*
* @return void
*/
initialize(locationsLoader: any, locales: string[], locations: {
label: string;
path: string;
bundles: string[];
}[], finishedCallback?: ((errors: {
path: string;
errorMsg: string;
errorCode: number;
}[]) => void) | null, progressCallback?: ((completedUrl: string, totalUrls: number) => void) | null): void;
/**
* Adds extra locales to the end of the list of currently active locales and load its related translation data.
*
* This method can only be called after the class has been initialized in case we need to load the translations for more languages.
* If any of the provided new locales is already loaded, its translation data will be refreshed
*
* @param locales List of languages for which we want to load the translations. The list will be appended at the end of any previously
* loaded locales and included in the preferred translation order. The translation data will be loaded from all the currently defined locations.
* @param finishedCallback A method that will be executed once the load ends. An errors variable will be passed
* to this method containing an array with information on errors that may have happened while loading the data.
* @param progressCallback A method that can be used to track the loading progress when lots of bundles and locales are used.
*
* @return void
*/
loadLocales(locales: string[], finishedCallback?: ((errors: {
path: string;
errorMsg: string;
errorCode: number;
}[]) => void) | null, progressCallback?: ((completedUrl: string, totalUrls: number) => void) | null): void;
/**
* Loads on the specified location the translation data for the specified bundles.
* This method can only be called after the class has been initialized in case we need to refresh or add more bundles to an already loaded location.
*
* @param bundles List of bundles to load from the specified location
* @param location The label for an already defined location. The extra bundles translation data will be added to the already loaded ones. If not defined,
* the current active location will be used.
* @param finishedCallback A method that will be executed once the load ends. An errors variable will be passed
* to this method containing an array with information on errors that may have happened while loading the data.
* @param progressCallback A method that can be used to track the loading progress when lots of bundles and locales are used.
*
* @see this.initialize()
*
* @return void
*/
loadBundles(bundles: string[], location?: string, finishedCallback?: ((errors: {
path: string;
errorMsg: string;
errorCode: number;
}[]) => void) | null, progressCallback?: ((completedUrl: string, totalUrls: number) => void) | null): void;
/**
* Auxiliary method used to perform the translation data load
*
* @see this.initialize()
*
* @param locales List of locales to load
* @param locations A list of locations and respective bundles to be loaded
* @param finishedCallback A method that will be executed once the load ends. An errors variable will be passed
* to this method containing an array with information on errors that may have happened while loading the data.
* @param progressCallback Executed after each request is performed
*/
private _loadData;
/**
* Perform the paths load from file system
*
* @param pathsToLoad list of paths that need to be loaded
* @param pathsToLoadInfo original info about the paths to load
* @param finishedCallback method to execute once finished
* @param progressCallback method to execute after each path is loaded
*/
/**
* Perform the paths load from urls
*
* @param pathsToLoad list of paths that need to be loaded
* @param pathsToLoadInfo original info about the paths to load
* @param finishedCallback method to execute once finished
* @param progressCallback method to execute after each path is loaded
*/
private _loadDataFromUrls;
/**
* A list of strings containing the locales that are used by this class to translate the given keys, sorted by preference.
* Each string is formatted as a standard locale code with language and country joined by an underscore, like: en_US, fr_FR
*
* When a key and bundle are requested for translation, the class will check on the first language of this
* list for a translated text. If missing, the next one will be used, and so. This list is constructed after the initialize
* or loadLocales methods are called.
*
* @example: After loading the following list of locales ['en_US', 'es_ES', 'fr_FR'] if we call localizationManager.get('HELLO', 'Greetings')
* the localization manager will try to locate the en_US value for the HELLO tag on the Greetings bundle. If the tag is not found for the
* specified locale and bundle, the same search will be performed for the es_ES locale, and so, till a value is found or no more locales
* are defined.
*/
locales(): readonly string[];
/**
* A list of strings containing the languages that are used by this class to translate the given keys, sorted by preference.
* Each string is formatted as a 2 digit language code, like: en, fr
*
* This list is the same as the locales() one, but containing only the language part of each locale (the first two digits)
*
* @see this.locales()
*/
languages(): readonly string[];
/**
* Get the bundle that is currently being used by default when traslating texts
*
* @return The name for the currently active bundle
*/
activeBundle(): string;
/**
* Get the first locale from the list of loaded locales, which is the currently used to search for translated texts.
*
* @return The locale that is defined as the primary one. For example: en_US, es_ES, ..
*/
primaryLocale(): string;
/**
* Get the first language from the list of loaded locales, which is the currently used to search for translated texts.
*
* @return The 2 digit language code that is defined as the primary one. For example: en, es, ..
*/
primaryLanguage(): string;
/**
* Define the bundle that is used by default when no bundle is specified on the get methods
*
* @param bundle A currently loaded bundle to be used as the active one
*
* @return void
*/
setActiveBundle(bundle: string): void;
/**
* Define the locale that will be placed at the front of the currently loaded locales list (moving all the others one position to the right).
*
* This will be the first locale to use when trying to get a translation.
*
* @param locale A currently loaded locale that will be moved to the first position of the loaded locales list. If the specified locale
* is not currently loaded, an exception will happen.
*
* @return void
*/
setPrimaryLocale(locale: string): void;
/**
* Moves the specified locales to the beginning of the locales list. This also alters the translation priority by setting the first
* provided locale as the most prioritary, the second as the next one and so.
*
* This method basically works exactly the same way as setPrimaryLocale but letting us add many locales at once.
*
* @see LocalizationManager.setPrimaryLocale()
*
* @param locales A list of locales to be moved to the beginning of the translation priority. First locales item will be the prefered
* locale for translation, second will be the next one in case some key is not translated for the first one and so. If any of the
* specified locales is not currently loaded, an exception will happen.
*
* @return void
*/
setPrimaryLocales(locales: string[]): void;
/**
* Define the 2 digit language that will be placed at the front of the currently loaded locales list (moving all the others one position to the right).
*
* This will be the first language to use when trying to get a translation.
*
* @param language A 2 digit language code that matches with any of the currently loaded locales, which will
* be moved to the first position of the loaded locales list. If the specified language does not match with
* a locale that is currently loaded, an exception will happen.
*
* @return void
*/
setPrimaryLanguage(language: string): void;
/**
* Moves the locales that match the specified languages to the beginning of the locales list.
* Works the same as setPrimaryLocales() but with a list of the 2 digit language codes that match the respective locales.
*
* @see LocalizationManager.setPrimaryLocale()
* @see LocalizationManager.setPrimaryLanguage()
*
* @param languages A list of 2 digit language codes to be moved to the beginning of the translation priority. If any of the
* specified languages does not match with a locale that is currently loaded, an exception will happen.
*
* @return void
*/
setPrimaryLanguages(languages: string[]): void;
/**
* Change the loaded locales translation preference order. The same locales that are currently loaded must be passed
* but with a different order to change the translation priority.
*
* @param locales A list with the new locales translation priority
*
* @return void
*/
setLocalesOrder(locales: string[]): void;
/**
* Get the translation for the given key, bundle and location
*
* @param key The key we want to read from the specified resource bundle and path
* @param bundle The name for the resource bundle file. If not specified, the value
* that was used on the inmediate previous call of this method will be used. This can save us lots of typing
* if we are reading multiple consecutive keys from the same bundle.
* @param location In case we have multiple bundles with the same name on different locations, we can set this parameter with
* the location label to uniquely reference the bundle and resolve the conflict. If all of our bundles have different
* names, this parameter can be ignored. Just like the bundle parameter, this one is remembered between get() calls.
* @param toReplace A list of values that will replace the wildcards that are found on the translated text. Each wildcard
* will be replaced with the element whose index on the list matches it. Check the documentation for this.wildCardsFormat
* property to know more about how to setup wildcards.
*
* @returns The localized text
*/
get(key: string, bundle?: string, location?: string, toReplace?: string | string[]): string;
/**
* Get the translation for the given key and bundle as a string with all words first character capitalized
* and all the rest of the word with lower case
*
* @see LocalizationManager.get
* @see StringUtils.formatCase
*
* @returns The localized and case formatted text
*/
getStartCase(key: string, bundle?: string, location?: string, toReplace?: string | string[]): string;
/**
* Get the translation for the given key and bundle as an all upper case string
*
* @see LocalizationManager.get
* @see StringUtils.formatCase
*
* @returns The localized and case formatted text
*/
getAllUpperCase(key: string, bundle?: string, location?: string, toReplace?: string | string[]): string;
/**
* Get the translation for the given key and bundle as an all lower case string
*
* @see LocalizationManager.get
* @see StringUtils.formatCase
*
* @returns The localized and case formatted text
*/
getAllLowerCase(key: string, bundle?: string, location?: string, toReplace?: string | string[]): string;
/**
* Get the translation for the given key and bundle as a string with the first character as Upper case
* and all the rest as lower case
*
* @see LocalizationManager.get
* @see StringUtils.formatCase
*
* @returns The localized and case formatted text
*/
getFirstUpperRestLower(key: string, bundle?: string, location?: string, toReplace?: string | string[]): string;
/**
* Auxiliary method that can be overriden when extending this class to customize the parsing of Json formatted
* resource bundles
*
* @param jsonString An object with the read resourcebundle json string
*/
protected parseJson(jsonString: string): {
[key: string]: string;
};
/**
* Auxiliary method that can be overriden when extending this class to customize the parsing of Java properties
* formatted resource bundles
*
* @param propertiesString A string containing the read resourcebundle java properties format string
*/
protected parseProperties(propertiesString: string): {
[key: string]: string;
};
}