ctx.locale() handles both step 3. and 4. here