@tabuckner/doggo-translator-ts
Version:
A typescript doggo translator based on DoggoTranslatorCore
298 lines (286 loc) • 11.4 kB
JavaScript
var DTT = (function (exports) {
'use strict';
(function (LANGUAGE_TOKENS_ENUM) {
LANGUAGE_TOKENS_ENUM["english"] = "en";
LANGUAGE_TOKENS_ENUM["userDefined"] = "userDefined";
})(exports.LANGUAGE_TOKENS_ENUM || (exports.LANGUAGE_TOKENS_ENUM = {}));
var TokensService = /** @class */ (function () {
function TokensService() {
}
TokensService.getAllLanguageTokenKeys = function () {
return Object.keys(exports.LANGUAGE_TOKENS_ENUM);
};
TokensService.getAllLanguageTokens = function () {
return Object.values(exports.LANGUAGE_TOKENS_ENUM);
};
TokensService.languageAvailable = function (languageToken) {
var matchesArray = this.getAllLanguageTokens().filter(function (token) { return token === languageToken; });
return matchesArray.length > 0;
};
return TokensService;
}());
var EN_TRANSLATION_SUFFIXES = {
ing: 'in'
};
var EN_TRANSLATION_WORDS = {
friend: 'fren',
small: 'smol',
dog: 'doggo',
dogs: 'doggos',
doggy: 'doggo',
doggies: 'doggos',
'smol doggo': 'pupper',
'smol doggos': 'puppers',
puppy: 'pupper',
puppies: 'puppers',
'smol pupper': 'pupperino',
'smol puppers': 'pupperinos',
'big doggo': 'woofer',
'big doggos': 'woofers',
'big ol doggo': 'woofer',
'big ol doggos': 'woofers',
'smol woofer': 'doggo',
'smol woofers': 'doggos',
corgi: 'corgo',
corgis: 'corgos',
pug: 'puggo',
pugs: 'puggos',
'smol pug': 'puggorino',
'smol pugs': 'puggorinos',
shiba: 'shibe',
shibas: 'shibes',
samoyed: 'cloud boye',
samoyeds: 'cloud boyes',
beaver: '???',
beavers: '???s',
seal: 'waterdoggo',
seals: 'waterdoggos',
bark: 'bork',
barking: 'borking',
hell: 'heck',
have: 'hav',
never: 'nvr',
good: 'gud',
when: 'wen',
hike: 'hik',
name: 'naym',
with: 'wit',
love: 'luv',
touch: 'boop',
touching: 'booping',
face: 'snoot',
human: 'hooman',
boy: 'boye',
boys: 'boyes',
lick: 'mlem',
licked: 'mlemmed',
licks: 'mlems',
licking: 'mlemming',
his: 'hims',
'you are scaring me': 'you are doing me a scare',
'you are frightening me': 'you are doing me a frighten',
'you are startling me': 'you are doing me a startle'
};
var EN_TRANSLATIONS = {
words: EN_TRANSLATION_WORDS,
suffixes: EN_TRANSLATION_SUFFIXES
};
var ErrorService = /** @class */ (function () {
function ErrorService() {
}
/**
* Logs an error message to the console with a prefix.
* @param message Message to log
*/
ErrorService.logError = function (message) {
var error = ErrorService.buildError(message);
console.error(error); //tslint:disable-line
};
ErrorService.throw = function (message) {
var error = ErrorService.buildError(message);
throw error;
};
ErrorService.buildError = function (message) {
return new Error("[DoggoTranslatorTS] " + message);
};
return ErrorService;
}());
var LocaleLoaderService = /** @class */ (function () {
function LocaleLoaderService() {
}
LocaleLoaderService.prototype.setTranslationsMap = function (newTranslationsMap) {
this.translationsMap = newTranslationsMap;
};
LocaleLoaderService.prototype.loadLibraryTranslations = function (token) {
switch (token) {
case exports.LANGUAGE_TOKENS_ENUM.english:
return this.setTranslationsMap(EN_TRANSLATIONS);
default:
return this.setTranslationsMap(EN_TRANSLATIONS);
}
};
LocaleLoaderService.prototype.getTranslationsMap = function () {
if (!this.translationMapHasTranslations) {
ErrorService.logError('No translations found in TranslationsMap.');
}
return this.translationsMap;
};
Object.defineProperty(LocaleLoaderService.prototype, "translationMapHasTranslations", {
get: function () {
return !!(Object.keys(this.translationsMap).length > 0);
},
enumerable: true,
configurable: true
});
return LocaleLoaderService;
}());
// Import here Polyfills if needed. Recommended core-js (npm i -D core-js)
// import "core-js/fn/array.find"
/**
* Given a language.json object, returns an instance of `DoggoTranslator`.
*/
var DoggoTranslator = /** @class */ (function () {
function DoggoTranslator(config) {
this.defaultResponse = 'Bork';
this.defaultLanguage = exports.LANGUAGE_TOKENS_ENUM.english;
this.localeLoaderService = new LocaleLoaderService();
this.configValidation(config);
this.setUpTranslator(config);
}
/**
*
* @param sourceSentence Sentence in the sourceLanguage
* @param reverse boolean to control direction of translation (e.g. true = sourceLanguage => doggo, false = doggo => sourceLanguage)
*/
DoggoTranslator.prototype.translateSentence = function (sourceSentence, reverse) {
if (reverse === void 0) { reverse = false; }
if (sourceSentence === '') {
return this.defaultResponse;
}
var translationsMap = this.localeLoaderService.getTranslationsMap();
var words = translationsMap.words;
var suffixes = translationsMap.suffixes;
sourceSentence = this.replaceWholeWords(words, reverse, sourceSentence);
if (suffixes) {
sourceSentence = this.replaceSuffixes(suffixes, reverse, sourceSentence);
}
return sourceSentence;
};
/**
* Returns available languages.
*/
DoggoTranslator.prototype.getAllLanguageTokens = function () {
return TokensService.getAllLanguageTokens();
};
/**
* Given a language token, will attempt to set the current language.
* @param languageToken the language token
*/
DoggoTranslator.prototype.setLanguage = function (languageToken) {
if (!this.languageAvailable(languageToken)) {
ErrorService.logError("The language was not found, defaulting to " + this.defaultLanguage);
this.languageToken = this.defaultLanguage;
return this.localeLoaderService.loadLibraryTranslations(languageToken);
}
this.languageToken = languageToken;
return this.localeLoaderService.loadLibraryTranslations(languageToken);
};
DoggoTranslator.prototype.configValidation = function (config) {
if (!config || (!config.languageToken && !config.userTranslationsMap)) {
ErrorService.throw('Invalid Config Provided. You must provide at least one of the following: \n\t`languageToken` or `userTranslationsMap`');
}
};
DoggoTranslator.prototype.setUpTranslator = function (config) {
if (!config.userTranslationsMap) {
return this.setLanguage(config.languageToken);
}
this.setLanguage(exports.LANGUAGE_TOKENS_ENUM.userDefined);
return this.localeLoaderService.setTranslationsMap(config.userTranslationsMap);
};
/**
* Given a language token, will return whether the language is available.
* @param language language token
*/
DoggoTranslator.prototype.languageAvailable = function (languageToken) {
return TokensService.languageAvailable(languageToken);
};
DoggoTranslator.prototype.replaceWholeWords = function (words, reverse, sourceSentence) {
for (var key in words) {
if (words.hasOwnProperty(key)) {
var value = words[key];
if (!reverse) {
sourceSentence = this.translateWholeWord(sourceSentence, key, value);
}
else {
sourceSentence = this.translateWholeWord(sourceSentence, value, key);
}
}
}
return sourceSentence;
};
DoggoTranslator.prototype.replaceSuffixes = function (suffixes, reverse, sourceSentence) {
for (var key in suffixes) {
if (suffixes.hasOwnProperty(key)) {
var value = suffixes[key];
if (!reverse) {
sourceSentence = this.transformSuffixes(sourceSentence, key, value);
}
else {
sourceSentence = this.transformSuffixes(sourceSentence, value, key);
}
}
}
return sourceSentence;
};
/**
* Replaces a part from the input and tries to format it with the proper case.
* @param input The complete input
* @param find The word or sentence to find
* @param replace The word or sentence to replace the found word or sentence
*/
DoggoTranslator.prototype.translateWholeWord = function (input, regex, replace) {
var _this = this;
regex = this.escapeRegex(regex);
return input.replace(new RegExp('\\b(' + regex + ')\\b', 'gi'), function (match) {
if (match === match.toUpperCase()) {
return replace.toUpperCase();
}
if (match === _this.capitalizeFirstCharacter(match)) {
return _this.capitalizeFirstCharacter(replace);
}
return replace;
});
};
DoggoTranslator.prototype.transformSuffixes = function (input, regex, replace) {
regex = this.escapeRegex(regex);
return input.replace(new RegExp('(' + regex + ')\\b', 'gi'), function (match) {
if (match === match.toUpperCase()) {
return replace.toUpperCase();
}
// TODO: Add support for respecting character capitalization.
return replace;
});
};
/**
* Returns a string with the first character capitalized.
* @param target The string to format
*/
DoggoTranslator.prototype.capitalizeFirstCharacter = function (target) {
var firstCharacterCapitalized = target.charAt(0).toUpperCase();
var restOfTheWord = target.slice(1);
return "" + firstCharacterCapitalized + restOfTheWord;
};
/**
* Given a string, returns the string with all special characters escaped so that the translation
* regex see them as special characters.
* @param target The string to escape
*/
DoggoTranslator.prototype.escapeRegex = function (target) {
return target.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
};
return DoggoTranslator;
}());
exports.DoggoTranslator = DoggoTranslator;
return exports;
}({}));
//# sourceMappingURL=doggo-translator-ts.min.js.map