When a page is first instantiated, its locale is set to match the locale of the engine it is loaded into.
This page locale is read-only; it is set when the page is first created and never changes.
Any component or asset on the page that needs to be locale-specific (for instance, to load the correct HTML template) will reference the page's locale.
As noted previously, pages are not discarded; they are pooled for later reuse. When an engine gets an existing page from the pool, it always matches its locale against the pooled page's locale. Thus a page and its engine will always agree on locale, with one exception: if the engine locale is changed during the request cycle.
When the engine locale changes, any pages loaded in the current request cycle will reflect the prior locale. On subsequent request cycles, new pages will be loaded (or retrieved from the pool) with locales matching the engine's new locale.
Tapestry does not currently have a mechanism for unloading a page in the same request cycle it was loaded (except at the end of the request cycle, when all pages are returned to the pool). If an application includes the ability to change locale, it should change to a new page after the locale change occurs.
Changing locale may have other, odd effects. If part of a page's persistent state is localized and the application locale is changed, then on a subsequent request cycle, the old localized state will be loaded into the new page (with the new locale). This may also affect any components on the page that have persistent state (though components with persistent state are quite rare).
In general, however, page localization is as easy as component localization and is usually not much of a consideration when designing web applications with Tapestry.