+ v.add_string(str, location)
+ end
+end
+
+redef class ASuperstringExpr
+
+ redef fun accept_string_finder(v) do
+ var fmt = ""
+ var exprs = new Array[AExpr]
+ for i in n_exprs do
+ if i isa AStartStringExpr or i isa AEndStringExpr or i isa AMidStringExpr then
+ assert i isa AStringFormExpr
+ var str = i.value
+ fmt += str.replace("%", "%%")
+ else
+ fmt += "%"
+ exprs.push i
+ fmt += (exprs.length-1).to_s
+ end
+ end
+ fmt = fmt.escape_to_gettext
+ v.add_string(fmt, location)
+ var code = "\"{fmt}\".get_translation(\"{v.domain}\", \"{v.languages_location}\").format()"
+ var parse = v.toolcontext.parse_expr(code)
+ if not parse isa ACallExpr then
+ v.toolcontext.error(location, "Fatal error in i18n annotation, the parsed superstring could not be generated properly")
+ return
+ end
+ var parse_exprs = parse.n_args.n_exprs
+ parse_exprs.add_all exprs
+ replace_with parse