Last active
November 7, 2019 09:37
-
-
Save Torthu/20b95f1d74f14d0135c959d80fd6f7cc to your computer and use it in GitHub Desktop.
Quick and dirty i18n lib
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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