Skip to content

Commit

Permalink
#193 Add variable replacement
Browse files Browse the repository at this point in the history
  • Loading branch information
softwarerero committed May 4, 2019
1 parent 43fa5f4 commit ece6c8b
Showing 1 changed file with 39 additions and 17 deletions.
56 changes: 39 additions & 17 deletions t9n.coffee
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
Meteor?.startup ->
if Meteor.isClient
console.log('startup4')
Template?.registerHelper 't9n', (x, params) ->
T9n.get(x, true, params.hash)

Expand All @@ -21,35 +22,34 @@ class T9n
@map: (language, map) ->
if(!@maps[language])
@maps[language] = {}
@registerMap(language, '', false, map)
@registerItem(language, '', false, map)
@dep?.changed()

@get: (label, markIfMissing = true, args = {}, language) ->
@dep?.depend()
@depLanguage?.depend()
if typeof label != 'string' then return ''
return '' if typeof label isnt 'string'
language ?= @language
ret = @maps[language]?[label]
unless ret
index = language.lastIndexOf '_'
if index
parent = language.substring 0, index
if parent
return @get label, markIfMissing, args, parent
parent = language.substring 0, index
return @get(label, markIfMissing, args, parent) if parent
unless ret
ret = @maps[@defaultLanguage]?[label]
unless ret
return if markIfMissing then @missingPrefix + label + @missingPostfix else label
if Object.keys(args).length == 0 then ret else @replaceParams ret, args
if Object.keys(args).length is 0 then ret else @replaceParams ret, args

@registerMap = (language, prefix, dot, map) ->
if typeof map == 'string'
@maps[language][prefix] = map
else if typeof map == 'object'
@registerItem = (language, prefix, dot, item) ->
if typeof item is 'string'
@maps[language][prefix] = item
else if typeof item is 'object'
if dot
prefix = prefix + '.'
for key, value of map
@registerMap(language, prefix + key, true, value)
for key, value of item
@registerItem(language, prefix + key, true, value)

@getLanguage: () ->
@depLanguage?.depend()
Expand All @@ -76,12 +76,34 @@ class T9n
@language = language
@depLanguage?.changed()


@replaceParams = (str, args) ->
for key, value of args
re = new RegExp "@{#{key}}", 'g'
str = str.replace re, value
str
index1 = 0
strCopy = str
while index1 > -1
index1 = strCopy.indexOf('@{')
if index1 > -1
index2 = strCopy.substring(index1).indexOf('}')
token = strCopy.substring(index1, index2 + 1)
if token.indexOf('->') > -1
lines = strCopy.split(/\n/)
tokenName = token.substring(2, token.indexOf(' '))
arg = args[tokenName]
line = lines.find((l) -> l.indexOf("[#{arg}]") > -1)
if line
value = line.substring(line.lastIndexOf(']') + 1).trim()
else
line = lines.find((l) -> l.indexOf('[*]') > -1)
value =
line.substring(line.lastIndexOf(']') + 1)
.trim()
.replace(new RegExp("\\$#{tokenName}"), args[tokenName])
str = str.replace(token, value)
else
tokenName = token.substring(2, token.indexOf('}'))
str = str.replace(token, args[tokenName])
strCopy = strCopy.substring(index2+2).trim()
return str

@T9n = T9n
@t9n = (x, includePrefix, params) -> T9n.get(x)
Expand Down

0 comments on commit ece6c8b

Please sign in to comment.