import { simpleGet } from '@vue-devtools/shared-utils' ; const reg = /\{\{\s*([\w_.-]+)\s*\}\}/g ; type StringMap = { [ key ] : string | StringMap ; } ; type ValuesMap = { [ key ] : any ; } ; type Replacer = ( text : string ) => string ; let strings ; let defaultValues ; let replacer ; export function translate ( path , values = { } ) { values = Object . assign ( { } , defaultValues , values ) ; let text = simpleGet ( strings , path ) ; text = text . replace ( reg , ( substring , matched ) => { const value = simpleGet ( values , matched ) ; return typeof value !== 'undefined' ? value : substring ; } ) ; replacer && ( text = replacer ( text ) ) ; return text ; } interface Options { strings : StringMap ; defaultValues : ValuesMap ; replacer : Replacer ; } export default { install ( Vue , options ) { strings = options . strings || { } ; defaultValues = options . defaultValues || { } ; replacer = options . replacer ; Vue . prototype . $t = translate ; } , } ;