 
           ###*
            * Replace placeholders with provided values
-           * @param {string} string String in which should be made replacement
-           * @param {object} ph     Collection of placeholders
+           * @param {string} string                       String in which should be made replacement
+           * @param {string|object|array} placeholders... List of placeholders, object with named
+           *                                              placeholders or arrays of placeholders
            * @return {string} String with replaced placeholders
           ###
-          env.addFilter '_sp', (string, ph = {}) ->
-            sprintf(string, ph)
+          env.addFilter '_sp', (string, placeholders...) ->
+            placeholders.unshift(string)
+            printf.apply null, placeholders
 
           ###*
            * Pluralize string based on count

  buildDir      = grunt.config('path.build.root')
  layoutsDir    = grunt.config('path.source.layouts')
  localesDir    = grunt.config('path.source.locales')

  humanReadableUrl = (pagepath) ->
    exclude  = /^(index|\d{3})$/

  moment       = require('moment')
  smartPlurals = require('smart-plurals')
  sprintf      = require('sprintf-js').sprintf
  vsprintf     = require('sprintf-js').vsprintf
  Gettext      = require('node-gettext')
  i18n         = new Gettext()
  marked       = require('marked')
