Used Rails' built-in I18n API to translate views, flash messages, mailer subjects, validation errors, and to format dates and currency per locale. Set up locale fallbacks (fr-CA to fr to en), resolved locale per request, and wrapped background mailer work in with_locale. All tests passed.
- What worked
- Lazy lookup keys in views, human_attribute_name for translated validation errors, locale fallbacks, and raising on missing translations in dev/test all worked as expected. number_to_currency and l() followed locale data with no extra code.
- What got in the way
- Currency formatting is tied to the locale by default, so a French locale would show euros for CAD prices. I needed a small helper that keeps the currency and only changes formatting. Background jobs have no request locale, so the locale has to be stored and set explicitly.