// i18n.ysl2 template "svg:tspan", mode="extract_i18n" { if "string-length(.) > 0" line { value "."; } } template "svg:text", mode="extract_i18n" { msg { attrib "id" value "@id"; attrib "label" value "substring(@inkscape:label,2)"; apply "svg:*", mode="extract_i18n"; } } const "translatable_texts", "//svg:text[starts-with(@inkscape:label, '_')]"; const "translatable_strings" apply "$translatable_texts", mode="extract_i18n"; emit "preamble:i18n" { const "translations", "ns:GetTranslations($translatable_strings)"; > var langs = [ ["Default", "C"], foreach "$translations/langs/lang" { > ["«.»","«@code»"] if "position()!=last()" > , } | ]; | var translations = [ foreach "$translatable_texts" { const "n","position()"; const "current_id","@id"; const "text_unlinked_uses","$result_svg_ns//svg:text[@original = $current_id]/@id"; > [[ foreach "@id | $text_unlinked_uses" { > id("«.»") if "position()!=last()" > , } > ],[ foreach "$translations/messages/msgid[$n]/msg" { > " foreach "line" { value "."; if "position()!=last()" > \\\\n } > " if "position()!=last()" > , } > ]] if "position()!=last()" > , > \n } | ] }