Skip to content

Instantly share code, notes, and snippets.

@Torthu
Last active November 7, 2019 09:37
Show Gist options
  • Save Torthu/20b95f1d74f14d0135c959d80fd6f7cc to your computer and use it in GitHub Desktop.
Save Torthu/20b95f1d74f14d0135c959d80fd6f7cc to your computer and use it in GitHub Desktop.
Quick and dirty i18n lib
let i18nStrings: Object, currentLanguage: string;
// Replace ${var} with {var: 'This Value'}
function simpleStrReplace(str, replace = {}, failWithThrow = false) {
return str.replace(/\$\{(.*?)\}/g, (match) => {
match = match.substring(2, match.length - 1);
return replace[match] || `??[${match}]??`;
});
}
function findString(id, lang: string) {
return i18nStrings[lang[id]] || `??[${id}][${lang}]??`;
}
/**
* Initialises Babelfish with default values
* @example
* import Babelfish from './Babelfish'
* let t = Babelfish({no: {one: 'en', two: 'to'}}, 'no');
* @param languages Object containing languages to register
* @param currentLang Default current language
* @returns {Function} The t (translate) function
*/
export default function Babelfish(languages, currentLang): Function {
i18nStrings = languages;
currentLanguage = currentLang;
return this.t;
}
/**
* Get current language
* @return {String}
*/
export function getLanguage(): string {
return currentLanguage;
}
/**
*
* @param lang Set current language
*/
export function setLanguage(lang: string): void {
currentLanguage = lang;
}
/**
* Register string object for new language
* @param langCode
* @param lang
*/
export function registerLanguage(langCode: string, lang: Object): void {
i18nStrings[langCode] = lang;
}
/**
*
* @param id Key to look up string
* @param props Replacement values for string
* @param language (default: currentLanguage) The language to look up for
*/
export function t(id: string, props: Object, language = currentLanguage): string {
const str = findString(id, language);
const returnStr = simpleStrReplace(str, props);
return returnStr;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment