if this is your template:
{
here is what your context stack looks like as it iterates through the 'name' array
{ your original context} i18n -> firstname: "First Name" name -> "Moe"
what happens when you define a parameter, dust inserts into the context stack all the parameters that you defined. then when it finds the array in your context, the dust pushes onto the stack, one at a time, all the elements in the array.
so now when you define the path context in this section, even if you passed i18n as a parameter, the i18n context is still in the context stack, and when you try to access i18n using a path, for example {i18n.firstname}, dust will not find it, because it must back off to find it, and getPath does not indent. the get method, on the other hand, does the return path, so when you do this:
{
it works because it accesses the first in the get method section. I hope you understand what I'm trying to say.
what I would do is define a helper method that accepts such a section:
{
and define the method in your context (or push it into your global context [defined with makeBase] to make it a global helper) as follows:
i18n: function(chunk, context, bodies, params){ var trans = context.get(translation);
checked this on the dust site and it works. The advantage of this approach is that you can now format your i18n output within a section. Also, it would be nice to define both a helper and an i18n list in your global context, so use makeBase to do this. all the best.