This is an automated email from the ASF dual-hosted git repository.

asf-ci-deploy pushed a commit to branch asf-site-production
in repository https://gitbox.apache.org/repos/asf/grails-website.git


The following commit(s) were added to refs/heads/asf-site-production by this 
push:
     new 7d7ada9276a Deploying to documentation branch - 14:25:27
7d7ada9276a is described below

commit 7d7ada9276a75928a53048f3f399bb4b9bbb0760
Author: jdaugherty <[email protected]>
AuthorDate: Fri Jul 10 14:25:30 2026 +0000

    Deploying to documentation branch - 14:25:27
---
 docs/snapshot/api/allclasses-frame.html            |   1 +
 docs/snapshot/api/index-all.html                   |  23 +++
 ...ilsPlugin.html => AvailableLocaleResolver.html} | 202 +++++++++------------
 .../grails/plugins/i18n/I18nAutoConfiguration.html |  35 +++-
 .../org/grails/plugins/i18n/I18nGrailsPlugin.html  |  36 +++-
 .../api/org/grails/plugins/i18n/package-frame.html |   2 +-
 .../org/grails/plugins/i18n/package-summary.html   |   9 +
 .../org/grails/plugins/web/taglib/FormTagLib.html  |   4 +-
 .../grails/web/errors/GrailsExceptionResolver.html |  40 ++--
 docs/snapshot/guide/commandLine.html               |  43 ++---
 docs/snapshot/guide/conf.html                      |   3 +-
 docs/snapshot/guide/i18n.html                      |  25 +++
 docs/snapshot/guide/introduction.html              |  17 ++
 docs/snapshot/guide/single.html                    |  88 ++++++---
 docs/snapshot/ref/Command Line/create-app.html     |  12 +-
 docs/snapshot/ref/Command Line/create-plugin.html  |  12 +-
 docs/snapshot/ref/Command Line/create-restapi.html |   4 +-
 .../ref/Command Line/create-web-plugin.html        |   4 +-
 docs/snapshot/ref/Command Line/help.html           |  10 +-
 docs/snapshot/ref/Command Line/list-features.html  |   5 +-
 .../ref/Configuration/Application Properties.html  |   6 +-
 docs/snapshot/ref/Tags - GSP/localeSelect.html     |   8 +-
 22 files changed, 385 insertions(+), 204 deletions(-)

diff --git a/docs/snapshot/api/allclasses-frame.html 
b/docs/snapshot/api/allclasses-frame.html
index d91867f9130..02c2c3f4847 100644
--- a/docs/snapshot/api/allclasses-frame.html
+++ b/docs/snapshot/api/allclasses-frame.html
@@ -288,6 +288,7 @@
 <li><a href="org/grails/datastore/gorm/events/AutoTimestampEventListener.html" 
title="class in org.grails.datastore.gorm.events" 
target="classFrame">AutoTimestampEventListener</a></li>
 <li><a href="org/grails/testing/spock/AutowiredInterceptor.html" title="class 
in org.grails.testing.spock" target="classFrame">AutowiredInterceptor</a></li>
 <li><a href="grails/testing/spring/AutowiredTest.html" title="trait in 
grails.testing.spring" target="classFrame"><I>AutowiredTest</I></a></li>
+<li><a href="org/grails/plugins/i18n/AvailableLocaleResolver.html" 
title="class in org.grails.plugins.i18n" 
target="classFrame">AvailableLocaleResolver</a></li>
 <li><a 
href="org/grails/orm/hibernate/cfg/domainbinding/util/BackticksRemover.html" 
title="class in org.grails.orm.hibernate.cfg.domainbinding.util" 
target="classFrame">BackticksRemover</a></li>
 <li><a 
href="org/grails/orm/hibernate/cfg/domainbinding/collectionType/BagCollectionType.html"
 title="class in org.grails.orm.hibernate.cfg.domainbinding.collectionType" 
target="classFrame">BagCollectionType</a></li>
 <li><a 
href="org/grails/web/converters/marshaller/xml/Base64ByteArrayMarshaller.html" 
title="class in org.grails.web.converters.marshaller.xml" 
target="classFrame">Base64ByteArrayMarshaller</a></li>
diff --git a/docs/snapshot/api/index-all.html b/docs/snapshot/api/index-all.html
index 49228d0ee82..912e8baf13c 100644
--- a/docs/snapshot/api/index-all.html
+++ b/docs/snapshot/api/index-all.html
@@ -3382,8 +3382,20 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd><div class="block"></div></dd>
 <dt><span class="strong"><a 
href="org/grails/test/support/GrailsTestInterceptor.html#autowireIfNecessary()" 
title="Method in GrailsTestInterceptor">autowireIfNecessary()</a></span> - 
Method in <a 
href="org/grails/test/support/GrailsTestInterceptor.html">GrailsTestInterceptor</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a 
href="org/grails/plugins/i18n/I18nGrailsPlugin.html#AVAILABLE_LOCALES_ATTRIBUTE"
 title="Property in I18nGrailsPlugin">AVAILABLE_LOCALES_ATTRIBUTE</a></span> - 
Property in <a 
href="org/grails/plugins/i18n/I18nGrailsPlugin.html">I18nGrailsPlugin</a>
+</dt><dd> <div class="block">Publishes the discovered available locales to the 
servlet context so that views and the
+ <CODE>g:localeSelect available="true"</CODE> tag can render a language 
selector. </div></dd>
 <dt><span class="strong"><a 
href="org/grails/datastore/gorm/mongo/MongoEntityTraitProvider.html#available" 
title="Property in MongoEntityTraitProvider">available</a></span> - Property in 
<a 
href="org/grails/datastore/gorm/mongo/MongoEntityTraitProvider.html">MongoEntityTraitProvider</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a 
href="org/grails/plugins/i18n/AvailableLocaleResolver.html" title="Class in 
org.grails.plugins.i18n">AvailableLocaleResolver</a></span> - Class in <a 
href="./org/grails/plugins/i18n/package-summary.html">org.grails.plugins.i18n</a>
+</dt><dd><div class="block">Discovers the locales an application is actually 
translated into by scanning the
+ classpath for <CODE>&lt;basename&gt;_&lt;locale&gt;.properties</CODE> 
resource bundles.</div></dd>
+<dt><span class="strong"><a 
href="org/grails/plugins/i18n/AvailableLocaleResolver.html#AvailableLocaleResolver(java.lang.ClassLoader,
 java.util.Locale, boolean)" title="Constructor in 
AvailableLocaleResolver">AvailableLocaleResolver(java.lang.ClassLoader, 
java.util.Locale, boolean)</a></span> - Constructor in <a 
href="org/grails/plugins/i18n/AvailableLocaleResolver.html">AvailableLocaleResolver</a>
+</dt><dd> <div class="block"> 
<DL><DT><B>Parameters:</B></DT><DD><code>classLoader</code> -  the class loader 
whose classpath is scanned for message bundles</DD></DL></div></dd>
+<dt><span class="strong"><a 
href="org/grails/plugins/i18n/I18nAutoConfiguration.html#availableLocaleResolver(grails.core.GrailsApplication,
 boolean)" title="Method in 
I18nAutoConfiguration">availableLocaleResolver(grails.core.GrailsApplication, 
boolean)</a></span> - Method in <a 
href="org/grails/plugins/i18n/I18nAutoConfiguration.html">I18nAutoConfiguration</a>
+</dt><dd> <div class="block">Discovers the locales the application is 
translated into (from <CODE>&lt;basename&gt;_&lt;locale&gt;.properties</CODE>
+ bundles on the classpath) so that a language selector can list only real 
translations rather
+ than every JVM locale. </div></dd>
 <dt><span class="strong"><a 
href="org/grails/datastore/bson/query/BsonQuery.html#AVERAGE_OPERATOR" 
title="Field in BsonQuery">AVERAGE_OPERATOR</a></span> - Field in <a 
href="org/grails/datastore/bson/query/BsonQuery.html">BsonQuery</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="org/grails/datastore/gorm/query/criteria/AbstractCriteriaBuilder.html#avg(java.lang.String)"
 title="Method in AbstractCriteriaBuilder">avg(java.lang.String)</a></span> - 
Method in <a 
href="org/grails/datastore/gorm/query/criteria/AbstractCriteriaBuilder.html">AbstractCriteriaBuilder</a>
@@ -6037,6 +6049,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="org/grails/gsp/jsp/JspWriterDelegate.html#clearBuffer()" title="Method in 
JspWriterDelegate">clearBuffer()</a></span> - Method in <a 
href="org/grails/gsp/jsp/JspWriterDelegate.html">JspWriterDelegate</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a 
href="org/grails/plugins/i18n/AvailableLocaleResolver.html#clearCache()" 
title="Method in AvailableLocaleResolver">clearCache()</a></span> - Method in 
<a 
href="org/grails/plugins/i18n/AvailableLocaleResolver.html">AvailableLocaleResolver</a>
+</dt><dd> <div class="block">Discards the cached list so the next <a 
href='#getAvailableLocales()'>getAvailableLocales()</a> re-scans the 
classpath.</div></dd>
 <dt><span class="strong"><a 
href="org/grails/web/mapping/CachingLinkGenerator.html#clearCache()" 
title="Method in CachingLinkGenerator">clearCache()</a></span> - Method in <a 
href="org/grails/web/mapping/CachingLinkGenerator.html">CachingLinkGenerator</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="org/grails/datastore/mapping/reflect/ClassPropertyFetcher.html#clearCache()"
 title="Method in ClassPropertyFetcher">clearCache()</a></span> - Method in <a 
href="org/grails/datastore/mapping/reflect/ClassPropertyFetcher.html">ClassPropertyFetcher</a>
@@ -10790,6 +10804,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="grails/rest/render/atom/AtomRenderer.html#DEFAULT_ATOM_MIME_TYPES" 
title="Field in AtomRenderer">DEFAULT_ATOM_MIME_TYPES</a></span> - Field in <a 
href="grails/rest/render/atom/AtomRenderer.html">AtomRenderer</a>
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a 
href="org/grails/plugins/i18n/AvailableLocaleResolver.html#DEFAULT_BASE_NAME" 
title="Field in AvailableLocaleResolver">DEFAULT_BASE_NAME</a></span> - Field 
in <a 
href="org/grails/plugins/i18n/AvailableLocaleResolver.html">AvailableLocaleResolver</a>
+</dt><dd> <div class="block">The base name of an application's own message 
bundles (<CODE>messages.properties</CODE>).</div></dd>
 <dt><span class="strong"><a 
href="grails/gorm/validation/ConstrainedProperty.html#DEFAULT_BLANK_MESSAGE_CODE"
 title="Field in ConstrainedProperty">DEFAULT_BLANK_MESSAGE_CODE</a></span> - 
Field in <a 
href="grails/gorm/validation/ConstrainedProperty.html">ConstrainedProperty</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="grails/gorm/validation/ConstrainedProperty.html#DEFAULT_BLANK_MESSAGE" 
title="Field in ConstrainedProperty">DEFAULT_BLANK_MESSAGE</a></span> - Field 
in <a 
href="grails/gorm/validation/ConstrainedProperty.html">ConstrainedProperty</a>
@@ -13290,6 +13306,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="org/grails/plugins/web/GroovyPagesGrailsPlugin.html#doWithApplicationContext()"
 title="Method in 
GroovyPagesGrailsPlugin">doWithApplicationContext()</a></span> - Method in <a 
href="org/grails/plugins/web/GroovyPagesGrailsPlugin.html">GroovyPagesGrailsPlugin</a>
 </dt><dd> <div class="block">Clear the page cache with the ApplicationContext 
is loaded</div></dd>
+<dt><span class="strong"><a 
href="org/grails/plugins/i18n/I18nGrailsPlugin.html#doWithApplicationContext()" 
title="Method in I18nGrailsPlugin">doWithApplicationContext()</a></span> - 
Method in <a 
href="org/grails/plugins/i18n/I18nGrailsPlugin.html">I18nGrailsPlugin</a>
+</dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="org/grails/plugins/web/interceptors/InterceptorsGrailsPlugin.html#doWithApplicationContext()"
 title="Method in 
InterceptorsGrailsPlugin">doWithApplicationContext()</a></span> - Method in <a 
href="org/grails/plugins/web/interceptors/InterceptorsGrailsPlugin.html">InterceptorsGrailsPlugin</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="grails/plugins/Plugin.html#doWithApplicationContext()" title="Method in 
Plugin">doWithApplicationContext()</a></span> - Method in <a 
href="grails/plugins/Plugin.html">Plugin</a>
@@ -18053,6 +18071,9 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="grails/core/InjectableGrailsClass.html#getAvailable()" title="Method in 
InjectableGrailsClass">getAvailable()</a></span> - Method in <a 
href="grails/core/InjectableGrailsClass.html">InjectableGrailsClass</a>
 </dt><dd> <div class="block">If class should be configured for dependency 
injection.</div></dd>
+<dt><span class="strong"><a 
href="org/grails/plugins/i18n/AvailableLocaleResolver.html#getAvailableLocales()"
 title="Method in AvailableLocaleResolver">getAvailableLocales()</a></span> - 
Method in <a 
href="org/grails/plugins/i18n/AvailableLocaleResolver.html">AvailableLocaleResolver</a>
+</dt><dd> <div class="block">  <DL><DT><B>Returns:</B></DT><DD>an 
unmodifiable, display-name-sorted list of the locales the application is
+ translated into.</DD></DL></div></dd>
 <dt><span class="strong"><a 
href="org/grails/taglib/TagLibraryLookup.html#getAvailableNamespaces()" 
title="Method in TagLibraryLookup">getAvailableNamespaces()</a></span> - Method 
in <a href="org/grails/taglib/TagLibraryLookup.html">TagLibraryLookup</a>
 </dt><dd> <div class="block"> <DL><DT><B>Returns:</B></DT><DD>The namespaces 
available</DD></DL></div></dd>
 <dt><span class="strong"><a 
href="org/grails/taglib/TagLibraryLookup.html#getAvailableTags(java.lang.String)"
 title="Method in 
TagLibraryLookup">getAvailableTags(java.lang.String)</a></span> - Method in <a 
href="org/grails/taglib/TagLibraryLookup.html">TagLibraryLookup</a>
@@ -31957,6 +31978,8 @@ if (location.href.indexOf('is-external=true') == -1) {
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="org/grails/datastore/mapping/model/config/GormMappingConfigurationStrategy.html#isExcludedProperty(java.lang.String,
 org.grails.datastore.mapping.model.ClassMapping, java.util.Collection, 
boolean)" title="Method in 
GormMappingConfigurationStrategy">isExcludedProperty(java.lang.String, 
org.grails.datastore.mapping.model.ClassMapping, java.util.Collection, 
boolean)</a></span> - Method in <a 
href="org/grails/datastore/mapping/model/config/GormMappingConfigu [...]
 </dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a 
href="org/grails/web/errors/GrailsExceptionResolver.html#isExcludedRequestParameter(java.lang.String,
 List<String>)" title="Method in 
GrailsExceptionResolver">isExcludedRequestParameter(java.lang.String, 
List&lt;String&gt;)</a></span> - Method in <a 
href="org/grails/web/errors/GrailsExceptionResolver.html">GrailsExceptionResolver</a>
+</dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="org/apache/grails/data/testing/tck/tests/TestSaveOrUpdateEventListener.html#isExecuted"
 title="Property in TestSaveOrUpdateEventListener">isExecuted</a></span> - 
Property in <a 
href="org/apache/grails/data/testing/tck/tests/TestSaveOrUpdateEventListener.html">TestSaveOrUpdateEventListener</a>
 </dt><dd> <div class="block"></div></dd>
 <dt><span class="strong"><a 
href="org/grails/web/servlet/view/GroovyPageView.html#isExpired()" 
title="Method in GroovyPageView">isExpired()</a></span> - Method in <a 
href="org/grails/web/servlet/view/GroovyPageView.html">GroovyPageView</a>
diff --git a/docs/snapshot/api/org/grails/plugins/i18n/I18nGrailsPlugin.html 
b/docs/snapshot/api/org/grails/plugins/i18n/AvailableLocaleResolver.html
similarity index 56%
copy from docs/snapshot/api/org/grails/plugins/i18n/I18nGrailsPlugin.html
copy to docs/snapshot/api/org/grails/plugins/i18n/AvailableLocaleResolver.html
index d0db8422860..2abb1befce2 100644
--- a/docs/snapshot/api/org/grails/plugins/i18n/I18nGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/i18n/AvailableLocaleResolver.html
@@ -27,7 +27,7 @@
 <html>
 <head>
     <!-- Generated by groovydoc (5.0.7) -->
-    <title>I18nGrailsPlugin (Grails 8.0.0-SNAPSHOT)</title>
+    <title>AvailableLocaleResolver (Grails 8.0.0-SNAPSHOT)</title>
     
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <link href="../../../../groovy.ico" type="image/x-icon" rel="shortcut 
icon">
@@ -37,7 +37,7 @@
 <body class="center">
 <script type="text/javascript"><!--
 if (location.href.indexOf('is-external=true') == -1) {
-    parent.document.title="I18nGrailsPlugin (Grails 8.0.0-SNAPSHOT)";
+    parent.document.title="AvailableLocaleResolver (Grails 8.0.0-SNAPSHOT)";
 }
 //-->
 </script>
@@ -63,18 +63,18 @@ if (location.href.indexOf('is-external=true') == -1) {
 <div class="subNav">
     <div>
         <ul class="navList">
-            <li><a 
href="../../../../index.html?org/grails/plugins/i18n/I18nGrailsPlugin" 
target="_top">Frames</a></li>
-            <li><a href="I18nGrailsPlugin.html" target="_top">No 
Frames</a></li>
+            <li><a 
href="../../../../index.html?org/grails/plugins/i18n/AvailableLocaleResolver" 
target="_top">Frames</a></li>
+            <li><a href="AvailableLocaleResolver.html" target="_top">No 
Frames</a></li>
         </ul>
     </div>
     <div>
         <ul class="subNavList">
             <li>Summary:&nbsp;</li>
-            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;<li><a 
href="#property_summary">Property</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Nested&nbsp;&nbsp;&nbsp;<li><a 
href="#field_summary">Field</a></li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a 
href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
         <ul class="subNavList">
             <li>&nbsp;|&nbsp;Detail:&nbsp;</li>
-            Field&nbsp;&nbsp;&nbsp;<li><a 
href="#prop_detail">Property</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
+            <li><a 
href="#field_detail">Field</a></li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a 
href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
     </div>
     <a name="skip-navbar_top">
@@ -87,11 +87,11 @@ if (location.href.indexOf('is-external=true') == -1) {
 
     <div class="subTitle">Package: 
<strong>org.grails.plugins.i18n</strong></div>
 
-    <h2 title="[Groovy] Class I18nGrailsPlugin" class="title">[Groovy] Class 
I18nGrailsPlugin</h2>
+    <h2 title="[Java] Class AvailableLocaleResolver" class="title">[Java] 
Class AvailableLocaleResolver</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
-<li><ul class="inheritance"></ul></li><li><ul 
class="inheritance"></ul></li><li>org.grails.plugins.i18n.I18nGrailsPlugin
+<li><ul 
class="inheritance"></ul></li><li>org.grails.plugins.i18n.AvailableLocaleResolver
 </ul>
 <div class="description">
     <ul class="blockList">
@@ -101,11 +101,27 @@ if (location.href.indexOf('is-external=true') == -1) {
             <!-- todo: direct known subclasses -->
             <hr>
 
-<pre>@groovy.util.logging.Slf4j
-class I18nGrailsPlugin
-extends <a href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
+<pre>public class AvailableLocaleResolver
+extends java.lang.Object</pre>
 
-    <p> Configures Grails' internationalisation support. 
<DL><DT><B>Authors:</B></DT><DD>Graeme 
Rocher</DD></DL><DL><DT><B>Since:</B></DT><DD>0.4</DD></DL></p>
+    <p> Discovers the locales an application is actually translated into by 
scanning the
+ classpath for <CODE>&lt;basename&gt;_&lt;locale&gt;.properties</CODE> 
resource bundles.
+
+ <p>Unlike java.util.Locale#getAvailableLocales() (which returns every locale
+ the JVM knows about), this returns only the locales that have a matching 
message
+ bundle plus the configured default locale, making it suitable for driving a 
language
+ selector. The result is sorted by each locale's display name in its own 
language and
+ cached; <a href='#clearCache()'>clearCache()</a> forces a re-scan (used when 
bundles change in development).
+
+ <p>By default only the application's own <CODE>messages_*.properties</CODE> 
bundles are
+ scanned. When <CODE>includePluginBundles</CODE> is enabled, every 
<CODE>*.properties</CODE>
+ bundle on the classpath is considered, so locales contributed by plugins 
&mdash; whose
+ bundles are namespaced (e.g. <CODE>spring-security-core_fr.properties</CODE>) 
&mdash; are
+ included too. Candidate suffixes are validated against the ISO language codes 
(and the ISO
+ country codes when a country is present), so non-i18n properties files (e.g.
+ <CODE>application.properties</CODE> or <CODE>foo_en_prod.properties</CODE>) 
are ignored. See
+ <CODE>grails.i18n.availableLocales.includePlugins</CODE>.
+  <DL><DT><B>Since:</B></DT><DD>8.0.0</DD></DL></p>
 
           </li>
     </ul>
@@ -123,77 +139,32 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
         
             <ul class="blockList">
                 <li class="blockList"><a name="field_summary"><!--   --></a>
+                    <h3>Field Summary</h3>
                     <ul class="blockList">
-                    <table class="overviewSummary" border="0" cellpadding="3" 
cellspacing="0" summary="Inherited fields summary table">
-                        <caption><span>Inherited fields</span><span 
class="tabEnd">&nbsp;</span></caption>
+                    <table class="overviewSummary" border="0" cellpadding="3" 
cellspacing="0" summary="Enum constants summary table">
+                        <caption><span>Fields</span><span 
class="tabEnd">&nbsp;</span></caption>
                         <tr>
-                            <th class="colFirst" scope="col">Fields inherited 
from class</th>
-                            <th class="colLast" scope="col">Fields</th>
-                        </tr>
-                                                <tr class="altColor">
-                            <td class="colFirst"><strong><code>class <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></strong></td>
-                            <td class="colLast"><code><a 
href='../../../../grails/plugins/Plugin.html#enabled'>enabled</a></code></td>
-                        </tr>
-
-                    </table>
-                    </ul>
-                </li>
-                
-            </ul>
-        
-
-        <!-- =========== PROPERTY SUMMARY =========== -->
-        
-         <ul class="blockList"> 
-                <li class="blockList"><a name="property_summary"><!--   --></a>
-                    <h3>Properties Summary</h3>
-                    <ul class="blockList">
-                    <table class="overviewSummary" border="0" cellpadding="3" 
cellspacing="0" summary="Properties Summary table, listing nested classes, and 
an explanation">
-                        <caption><span>Properties</span><span 
class="tabEnd">&nbsp;</span></caption>
-                        <tr>
-                            <th class="colFirst" scope="col">Type</th>
-                            <th class="colLast" scope="col">Name and 
description</th>
-                        </tr>
-                        
-                        <tr class="altColor">
-                            <td 
class="colFirst"><code><strong>java.lang.String</strong></code>&nbsp;</td>
-                            <td class="colLast"><code><a 
href="#baseDir">baseDir</a></code><br></td>
-                        </tr>
-                        
-                        <tr class="rowColor">
-                            <td 
class="colFirst"><code><strong>java.lang.String</strong></code>&nbsp;</td>
-                            <td class="colLast"><code><a 
href="#version">version</a></code><br></td>
+                            <th class="colFirst" scope="col">Modifiers</th>
+                            <th class="colLast" scope="col">Name</th>
+                            <th class="colLast" scope="col">Description</th>
                         </tr>
                         
                         <tr class="altColor">
-                            <td 
class="colFirst"><code><strong>java.lang.String</strong></code>&nbsp;</td>
-                            <td class="colLast"><code><a 
href="#watchedResources">watchedResources</a></code><br></td>
+                            <td 
class="colFirst"><code><strong>static&nbsp;java.lang.String</strong></code>&nbsp;</td>
+                            <td class="colLast"><code><a 
href="#DEFAULT_BASE_NAME">DEFAULT_BASE_NAME</a></code></td>
+                            <td class="colLast">The base name of an 
application's own message bundles (<CODE>messages.properties</CODE>).</td>
                         </tr>
                         
                     </table>
                    </ul>
                 </li>
                 
-                 <li class="blockList"><a name="properties_summary"><!--   
--></a>
-                     <ul class="blockList">
-                         <table class="overviewSummary" border="0" 
cellpadding="3" cellspacing="0" summary="Inherited properties summary table">
-                             <caption><span>Inherited properties</span><span 
class="tabEnd">&nbsp;</span></caption>
-                             <tr>
-                                 <th class="colFirst" scope="col">Properties 
inherited from class</th>
-                                 <th class="colLast" 
scope="col">Properties</th>
-                             </tr>
-                                                     <tr class="altColor">
-                                <td class="colFirst"><strong><code>class <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></strong></td>
-                                <td class="colLast"><code>applicationContext, 
artefacts, environment, grailsApplication, plugin, pluginManager</code></td>
-                            </tr>
-
-                         </table>
-                     </ul>
-                 </li>
-                 
             </ul>
         
 
+        <!-- =========== PROPERTY SUMMARY =========== -->
+        
+
         <!-- =========== ELEMENT SUMMARY =========== -->
         
 
@@ -211,7 +182,12 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst">
-                                <code><strong><a 
href="#I18nGrailsPlugin()">I18nGrailsPlugin</a></strong>()</code><br></td>
+                                <code><strong><a 
href="#AvailableLocaleResolver(java.lang.ClassLoader, 
java.util.Locale)">AvailableLocaleResolver</a></strong>(java.lang.ClassLoader 
classLoader, java.util.Locale defaultLocale)</code><br>Scans only the 
application's own <CODE>messages_*.properties</CODE> bundles.</td>
+                        </tr>
+                        
+                        <tr class="rowColor">
+                            <td class="colFirst">
+                                <code><strong><a 
href="#AvailableLocaleResolver(java.lang.ClassLoader, java.util.Locale, 
boolean)">AvailableLocaleResolver</a></strong>(java.lang.ClassLoader 
classLoader, java.util.Locale defaultLocale, boolean 
includePluginBundles)</code><br> 
<DL><DT><B>Parameters:</B></DT><DD><code>classLoader</code> -  the class loader 
whose classpath is scanned for message bundles</DD></DL></td>
                         </tr>
                         
                     </table>
@@ -237,14 +213,15 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         
                         <tr class="altColor">
                             <td class="colFirst"><code></code></td>
-                            <td 
class="colLast"><code>protected&nbsp;boolean</code></td>
-                            <td class="colLast"><code><strong><a 
href="#isChildOfFile(java.io.File, 
java.io.File)">isChildOfFile</a></strong>(java.io.File child, java.io.File 
parent)</code><br></td>
+                            <td 
class="colLast"><code>public&nbsp;void</code></td>
+                            <td class="colLast"><code><strong><a 
href="#clearCache()">clearCache</a></strong>()</code><br>Discards the cached 
list so the next <a href='#getAvailableLocales()'>getAvailableLocales()</a> 
re-scans the classpath.</td>
                         </tr>
                         
                         <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
-                            <td class="colLast"><code>void</code></td>
-                            <td class="colLast"><code><strong><a 
href="#onChange(Map)">onChange</a></strong>(java.util.Map&lt;java.lang.String, 
java.lang.Object&gt; event)</code><br></td>
+                            <td 
class="colLast"><code>public&nbsp;java.util.List&lt;java.util.Locale&gt;</code></td>
+                            <td class="colLast"><code><strong><a 
href="#getAvailableLocales()">getAvailableLocales</a></strong>()</code><br>  
<DL><DT><B>Returns:</B></DT><DD>an unmodifiable, display-name-sorted list of 
the locales the application is
+ translated into.</DD></DL></td>
                         </tr>
                         
                     </table>
@@ -262,8 +239,8 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         </tr>
                         
                         <tr class="altColor">
-                            <td class="colFirst"><code>class <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></code></td>
-                            <td class="colLast"><code><a 
href='../../../../grails/plugins/Plugin.html#beanRegistrar()'>beanRegistrar</a>,
 <a 
href='../../../../grails/plugins/Plugin.html#beans(groovy.lang.Closure)'>beans</a>,
 <a 
href='../../../../grails/plugins/Plugin.html#doWithApplicationContext()'>doWithApplicationContext</a>,
 <a 
href='../../../../grails/plugins/Plugin.html#doWithDynamicMethods()'>doWithDynamicMethods</a>,
 <a href='../../../../grails/plugins/Plugin.html#doWithSpring()' [...]
+                            <td class="colFirst"><code>class 
java.lang.Object</code></td>
+                            <td 
class="colLast"><code>java.lang.Object#equals(java.lang.Object), 
java.lang.Object#getClass(), java.lang.Object#hashCode(), 
java.lang.Object#notify(), java.lang.Object#notifyAll(), 
java.lang.Object#toString(), java.lang.Object#wait(), 
java.lang.Object#wait(long), java.lang.Object#wait(long, int)</code></td>
                         </tr>
                     </table>
                    </ul>
@@ -281,36 +258,18 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
            
 
             
-
-            
-            <!-- =========== PROPERTY DETAIL =========== -->
+            <!-- =========== FIELD DETAIL =========== -->
             <ul class="blockList">
-                <li class="blockList"><a name="prop_detail">
+                <li class="blockList"><a name="field_detail">
                     <!--   -->
                 </a>
-                    <h3>Property Detail</h3>
-                    
-                        <a name="baseDir"><!-- --></a>
-                        <ul class="blockListLast">
-                            <li class="blockList">
-                                <h4>java.lang.String 
<strong>baseDir</strong></h4>
-                                <p></p>
-                            </li>
-                        </ul>
+                    <h3>Field Detail</h3>
                     
-                        <a name="version"><!-- --></a>
+                        <a name="DEFAULT_BASE_NAME"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4>java.lang.String 
<strong>version</strong></h4>
-                                <p></p>
-                            </li>
-                        </ul>
-                    
-                        <a name="watchedResources"><!-- --></a>
-                        <ul class="blockListLast">
-                            <li class="blockList">
-                                <h4>java.lang.String 
<strong>watchedResources</strong></h4>
-                                <p></p>
+                                
<h4>public&nbsp;static&nbsp;final&nbsp;java.lang.String 
<strong>DEFAULT_BASE_NAME</strong></h4>
+                                <p> The base name of an application's own 
message bundles (<CODE>messages.properties</CODE>). </p>
                             </li>
                         </ul>
                     
@@ -321,6 +280,8 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
             
 
             
+
+            
             <!-- =========== CONSTRUCTOR DETAIL =========== -->
             <ul class="blockList">
                 <li class="blockList"><a name="constructor_detail">
@@ -328,11 +289,23 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                 </a>
                     <h3>Constructor Detail</h3>
                     
-                        <a name="I18nGrailsPlugin()"><!-- --></a>
+                        <a 
name="AvailableLocaleResolver(java.lang.ClassLoader, java.util.Locale)"><!-- 
--></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                
<h4>public&nbsp;<strong>AvailableLocaleResolver</strong>(java.lang.ClassLoader 
classLoader, java.util.Locale defaultLocale)</h4>
+                                <p> Scans only the application's own 
<CODE>messages_*.properties</CODE> bundles.
+      <DL><DT><B>Parameters:</B></DT><DD><code>classLoader</code> -  the class 
loader whose classpath is scanned for message 
bundles</DD><DD><code>defaultLocale</code> -  the locale of the base 
<CODE>messages.properties</CODE> bundle,
+ always included in the result (may be <CODE>null</CODE> to include 
none)</DD></DL></p>
+                            </li>
+                        </ul>
+                    
+                        <a 
name="AvailableLocaleResolver(java.lang.ClassLoader, java.util.Locale, 
boolean)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4><strong>I18nGrailsPlugin</strong>()</h4>
-                                <p></p>
+                                
<h4>public&nbsp;<strong>AvailableLocaleResolver</strong>(java.lang.ClassLoader 
classLoader, java.util.Locale defaultLocale, boolean includePluginBundles)</h4>
+                                <p>
+      <DL><DT><B>Parameters:</B></DT><DD><code>classLoader</code> -  the class 
loader whose classpath is scanned for message 
bundles</DD><DD><code>defaultLocale</code> -  the locale of the base bundle, 
always included (may be 
<CODE>null</CODE>)</DD><DD><code>includePluginBundles</code> -  whether to also 
consider plugin-contributed bundles (every
+ <CODE>*.properties</CODE> on the classpath) rather than only the 
application's <CODE>messages</CODE></DD></DL></p>
                             </li>
                         </ul>
                     
@@ -349,19 +322,22 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                 </a>
                     <h3>Method Detail</h3>
                     
-                        <a name="isChildOfFile(java.io.File, 
java.io.File)"><!-- --></a>
+                        <a name="clearCache()"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4>protected&nbsp;boolean 
<strong>isChildOfFile</strong>(java.io.File child, java.io.File parent)</h4>
-                                <p></p>
+                                <h4>public&nbsp;void 
<strong>clearCache</strong>()</h4>
+                                <p> Discards the cached list so the next <a 
href='#getAvailableLocales()'>getAvailableLocales()</a> re-scans the classpath.
+     </p>
                             </li>
                         </ul>
                     
-                        <a name="onChange(Map)"><!-- --></a>
+                        <a name="getAvailableLocales()"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
-                                <h4>@java.lang.Override<br>void 
<strong>onChange</strong>(java.util.Map&lt;java.lang.String, 
java.lang.Object&gt; event)</h4>
-                                <p></p>
+                                
<h4>public&nbsp;java.util.List&lt;java.util.Locale&gt; 
<strong>getAvailableLocales</strong>()</h4>
+                                <p>
+      <DL><DT><B>Returns:</B></DT><DD>an unmodifiable, display-name-sorted 
list of the locales the application is
+ translated into. Computed once and cached until <a 
href='#clearCache()'>clearCache()</a> is called.</DD></DL></p>
                             </li>
                         </ul>
                     
@@ -392,18 +368,18 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
 <div class="subNav">
     <div>
         <ul class="navList">
-            <li><a 
href="../../../../index.html?org/grails/plugins/i18n/I18nGrailsPlugin" 
target="_top">Frames</a></li>
-            <li><a href="I18nGrailsPlugin.html" target="_top">No 
Frames</a></li>
+            <li><a 
href="../../../../index.html?org/grails/plugins/i18n/AvailableLocaleResolver" 
target="_top">Frames</a></li>
+            <li><a href="AvailableLocaleResolver.html" target="_top">No 
Frames</a></li>
         </ul>
     </div>
     <div>
         <ul class="subNavList">
             <li>Summary:&nbsp;</li>
-            Nested&nbsp;&nbsp;&nbsp;Field&nbsp;&nbsp;&nbsp;<li><a 
href="#property_summary">Property</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
+            Nested&nbsp;&nbsp;&nbsp;<li><a 
href="#field_summary">Field</a></li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a 
href="#constructor_summary">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#method_summary">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
         <ul class="subNavList">
             <li>&nbsp;|&nbsp;Detail:&nbsp;</li>
-            Field&nbsp;&nbsp;&nbsp;<li><a 
href="#prop_detail">Property</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
+            <li><a 
href="#field_detail">Field</a></li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a 
href="#constructor_detail">Constructor</a></li>&nbsp;&nbsp;&nbsp;<li><a 
href="#method_detail">Method</a></li>&nbsp;&nbsp;&nbsp;
         </ul>
     </div>
     <p><!-- Matomo -->
diff --git 
a/docs/snapshot/api/org/grails/plugins/i18n/I18nAutoConfiguration.html 
b/docs/snapshot/api/org/grails/plugins/i18n/I18nAutoConfiguration.html
index 6433de44869..f20dddbce48 100644
--- a/docs/snapshot/api/org/grails/plugins/i18n/I18nAutoConfiguration.html
+++ b/docs/snapshot/api/org/grails/plugins/i18n/I18nAutoConfiguration.html
@@ -145,18 +145,26 @@ extends java.lang.Object</pre>
                         </tr>
                         
                         <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>public&nbsp;<a 
href='../../../../org/grails/plugins/i18n/AvailableLocaleResolver.html'>AvailableLocaleResolver</a></code></td>
+                            <td class="colLast"><code><strong><a 
href="#availableLocaleResolver(grails.core.GrailsApplication, 
boolean)">availableLocaleResolver</a></strong>(<a 
href='../../../../grails/core/GrailsApplication.html'>GrailsApplication</a> 
grailsApplication, boolean includePlugins)</code><br>Discovers the locales the 
application is translated into (from 
<CODE>&lt;basename&gt;_&lt;locale&gt;.properties</CODE>
+ bundles on the classpath) so that a language selector can list only real 
translations rather
+ than every JVM locale. </td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a 
href='../../../../org.springframework.web.servlet.i18n.LocaleChangeInterceptor.html'>LocaleChangeInterceptor</a></code></td>
                             <td class="colLast"><code><strong><a 
href="#localeChangeInterceptor()">localeChangeInterceptor</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a 
href='../../../../org.springframework.web.servlet.LocaleResolver.html'>LocaleResolver</a></code></td>
                             <td class="colLast"><code><strong><a 
href="#localeResolver()">localeResolver</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a 
href='../../../../org.springframework.context.MessageSource.html'>MessageSource</a></code></td>
                             <td class="colLast"><code><strong><a 
href="#messageSource(grails.core.GrailsApplication, 
grails.plugins.GrailsPluginManager)">messageSource</a></strong>(<a 
href='../../../../grails/core/GrailsApplication.html'>GrailsApplication</a> 
grailsApplication, <a 
href='../../../../grails/plugins/GrailsPluginManager.html'>GrailsPluginManager</a>
 pluginManager)</code><br></td>
@@ -212,6 +220,29 @@ extends java.lang.Object</pre>
                 </a>
                     <h3>Method Detail</h3>
                     
+                        <a 
name="availableLocaleResolver(grails.core.GrailsApplication, boolean)"><!-- 
--></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                
<h4>@org.springframework.context.annotation.Bean<br>@org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean(AvailableLocaleResolver.class)<br>public&nbsp;<a
 
href='../../../../org/grails/plugins/i18n/AvailableLocaleResolver.html'>AvailableLocaleResolver</a>
 <strong>availableLocaleResolver</strong>(<a 
href='../../../../grails/core/GrailsApplication.html'>GrailsApplication</a> 
grailsApplication, @org.springframework.beans.factory.annotation [...]
+                                <p> Discovers the locales the application is 
translated into (from <CODE>&lt;basename&gt;_&lt;locale&gt;.properties</CODE>
+ bundles on the classpath) so that a language selector can list only real 
translations rather
+ than every JVM locale. Published to the servlet context by <a 
href='../../../../org/grails/plugins/i18n/I18nGrailsPlugin.html' 
title='I18nGrailsPlugin'>I18nGrailsPlugin</a> and
+ consumed by the <CODE>g:localeSelect available="true"</CODE> tag.
+
+ <p>By default every <CODE>*.properties</CODE> bundle on the classpath is 
considered, so locales
+ contributed by plugins &mdash; whose bundles are namespaced (e.g.
+ <CODE>spring-security-core_*.properties</CODE>) &mdash; are included 
alongside the application's own.
+ Set <CODE>grails.i18n.availableLocales.includePlugins=false</CODE> to 
restrict discovery to the
+ application's own <CODE>messages_*.properties</CODE> bundles.
+
+ <p>The base <CODE>messages.properties</CODE> locale is always included, 
resolved from
+ <CODE>grails.i18n.default.locale</CODE> exactly like the rest of this class 
(falling back to the
+ JVM default locale when the property is not set).
+      <DL><DT><B>Parameters:</B></DT><DD><code>includePlugins</code> -  
whether to also scan plugin-contributed message bundles
+ (<CODE>grails.i18n.availableLocales.includePlugins</CODE>, defaults to 
<CODE>true</CODE>)</DD></DL></p>
+                            </li>
+                        </ul>
+                    
                         <a name="localeChangeInterceptor()"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/api/org/grails/plugins/i18n/I18nGrailsPlugin.html 
b/docs/snapshot/api/org/grails/plugins/i18n/I18nGrailsPlugin.html
index d0db8422860..6db8a6397f2 100644
--- a/docs/snapshot/api/org/grails/plugins/i18n/I18nGrailsPlugin.html
+++ b/docs/snapshot/api/org/grails/plugins/i18n/I18nGrailsPlugin.html
@@ -156,16 +156,22 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         </tr>
                         
                         <tr class="altColor">
+                            <td 
class="colFirst"><code><strong>static&nbsp;java.lang.String</strong></code>&nbsp;</td>
+                            <td class="colLast"><code><a 
href="#AVAILABLE_LOCALES_ATTRIBUTE">AVAILABLE_LOCALES_ATTRIBUTE</a></code><br>Publishes
 the discovered available locales to the servlet context so that views and the
+ <CODE>g:localeSelect available="true"</CODE> tag can render a language 
selector. </td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td 
class="colFirst"><code><strong>java.lang.String</strong></code>&nbsp;</td>
                             <td class="colLast"><code><a 
href="#baseDir">baseDir</a></code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td 
class="colFirst"><code><strong>java.lang.String</strong></code>&nbsp;</td>
                             <td class="colLast"><code><a 
href="#version">version</a></code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td 
class="colFirst"><code><strong>java.lang.String</strong></code>&nbsp;</td>
                             <td class="colLast"><code><a 
href="#watchedResources">watchedResources</a></code><br></td>
                         </tr>
@@ -236,12 +242,18 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                         </tr>
                         
                         <tr class="altColor">
+                            <td class="colFirst"><code></code></td>
+                            <td class="colLast"><code>void</code></td>
+                            <td class="colLast"><code><strong><a 
href="#doWithApplicationContext()">doWithApplicationContext</a></strong>()</code><br></td>
+                        </tr>
+                        
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td 
class="colLast"><code>protected&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a 
href="#isChildOfFile(java.io.File, 
java.io.File)">isChildOfFile</a></strong>(java.io.File child, java.io.File 
parent)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>void</code></td>
                             <td class="colLast"><code><strong><a 
href="#onChange(Map)">onChange</a></strong>(java.util.Map&lt;java.lang.String, 
java.lang.Object&gt; event)</code><br></td>
@@ -290,6 +302,16 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                 </a>
                     <h3>Property Detail</h3>
                     
+                        <a name="AVAILABLE_LOCALES_ATTRIBUTE"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>static&nbsp;final&nbsp;java.lang.String 
<strong>AVAILABLE_LOCALES_ATTRIBUTE</strong></h4>
+                                <p> Publishes the discovered available locales 
to the servlet context so that views and the
+ <CODE>g:localeSelect available="true"</CODE> tag can render a language 
selector. Reading a servlet
+ context attribute keeps consumers decoupled from this module.</p>
+                            </li>
+                        </ul>
+                    
                         <a name="baseDir"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
@@ -349,6 +371,14 @@ extends <a 
href='../../../../grails/plugins/Plugin.html'>Plugin</a></pre>
                 </a>
                     <h3>Method Detail</h3>
                     
+                        <a name="doWithApplicationContext()"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>@java.lang.Override<br>void 
<strong>doWithApplicationContext</strong>()</h4>
+                                <p></p>
+                            </li>
+                        </ul>
+                    
                         <a name="isChildOfFile(java.io.File, 
java.io.File)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/api/org/grails/plugins/i18n/package-frame.html 
b/docs/snapshot/api/org/grails/plugins/i18n/package-frame.html
index 013144eb48d..a249c8d719b 100644
--- a/docs/snapshot/api/org/grails/plugins/i18n/package-frame.html
+++ b/docs/snapshot/api/org/grails/plugins/i18n/package-frame.html
@@ -43,7 +43,7 @@
 <div class="indexContainer">
     <h2>Classes</h2>
     <ul>
-        <li><a href="GrailsLocaleResolverAutoConfiguration.html" title="class 
in org.grails.plugins.i18n" 
target="classFrame">GrailsLocaleResolverAutoConfiguration</a></li><li><a 
href="I18nAutoConfiguration.html" title="class in org.grails.plugins.i18n" 
target="classFrame">I18nAutoConfiguration</a></li><li><a 
href="I18nGrailsPlugin.html" title="class in org.grails.plugins.i18n" 
target="classFrame">I18nGrailsPlugin</a></li>
+        <li><a href="AvailableLocaleResolver.html" title="class in 
org.grails.plugins.i18n" 
target="classFrame">AvailableLocaleResolver</a></li><li><a 
href="GrailsLocaleResolverAutoConfiguration.html" title="class in 
org.grails.plugins.i18n" 
target="classFrame">GrailsLocaleResolverAutoConfiguration</a></li><li><a 
href="I18nAutoConfiguration.html" title="class in org.grails.plugins.i18n" 
target="classFrame">I18nAutoConfiguration</a></li><li><a 
href="I18nGrailsPlugin.html" title="class in  [...]
     </ul>
 </div>
 
diff --git a/docs/snapshot/api/org/grails/plugins/i18n/package-summary.html 
b/docs/snapshot/api/org/grails/plugins/i18n/package-summary.html
index caba3b217ac..ef47bda917e 100644
--- a/docs/snapshot/api/org/grails/plugins/i18n/package-summary.html
+++ b/docs/snapshot/api/org/grails/plugins/i18n/package-summary.html
@@ -88,6 +88,15 @@ function windowTitle()
                         <th class="colFirst" scope="col">Class</th>
                         <th class="colLast" scope="col">Description</th>
                     </tr>
+<tr class="altColor">
+                            <td class="colOne">
+                                <strong><a href="AvailableLocaleResolver.html" 
title="class in org/grails/plugins/i18n">
+                                    AvailableLocaleResolver
+                                </a></strong>
+                            </td>
+                            <td>Discovers the locales an application is 
actually translated into by scanning the
+ classpath for <CODE>&lt;basename&gt;_&lt;locale&gt;.properties</CODE> 
resource bundles.</td>
+                        </tr>
 <tr class="altColor">
                             <td class="colOne">
                                 <strong><a 
href="GrailsLocaleResolverAutoConfiguration.html" title="class in 
org/grails/plugins/i18n">
diff --git a/docs/snapshot/api/org/grails/plugins/web/taglib/FormTagLib.html 
b/docs/snapshot/api/org/grails/plugins/web/taglib/FormTagLib.html
index 4c62f06b74f..4c7cc2c845e 100644
--- a/docs/snapshot/api/org/grails/plugins/web/taglib/FormTagLib.html
+++ b/docs/snapshot/api/org/grails/plugins/web/taglib/FormTagLib.html
@@ -563,7 +563,9 @@ implements <a 
href='../../../../../org.springframework.context.ApplicationContex
                                 <h4>java.lang.Object 
<strong>localeSelect</strong>(java.util.Map attrs)</h4>
                                 <p> A helper tag for creating locale 
selects.<br/>
 
- eg. &lt;g:localeSelect name="myLocale" value="${locale}" 
/&gt;<DL><DT><B>emptyTag:</B></DT><DD>@attr name REQUIRED The name of the 
select</DD></DL><DL><DT><B>attr:</B></DT><DD>value The set locale, defaults to 
the current request locale if not 
specified</DD></DL><DL><DT><B>attr:</B></DT><DD>locale The locale to use for 
formatting the locale names. Defaults to the current request locale and then 
the system default locale if not specified</DD></DL> </p>
+ eg. &lt;g:localeSelect name="myLocale" value="${locale}" 
/&gt;<DL><DT><B>emptyTag:</B></DT><DD>@attr name REQUIRED The name of the 
select</DD></DL><DL><DT><B>attr:</B></DT><DD>value The set locale, defaults to 
the current request locale if not 
specified</DD></DL><DL><DT><B>attr:</B></DT><DD>locale The locale to use for 
formatting the locale names. Defaults to the current request locale and then 
the system default locale if not 
specified</DD></DL><DL><DT><B>attr:</B></DT><DD>available If [...]
+ (those with a <code>messages_*.properties</code> bundle, as published to the 
servlet context by
+ the i18n plugin) instead of every locale the JVM knows about. Defaults to 
<code>false</code>.</DD></DL> </p>
                             </li>
                         </ul>
                     
diff --git 
a/docs/snapshot/api/org/grails/web/errors/GrailsExceptionResolver.html 
b/docs/snapshot/api/org/grails/web/errors/GrailsExceptionResolver.html
index b23597bb22c..ade2963e6dc 100644
--- a/docs/snapshot/api/org/grails/web/errors/GrailsExceptionResolver.html
+++ b/docs/snapshot/api/org/grails/web/errors/GrailsExceptionResolver.html
@@ -293,6 +293,12 @@ implements <a 
href='../../../../grails/core/support/GrailsApplicationAware.html'
                         </tr>
                         
                         <tr class="rowColor">
+                            <td class="colFirst"><code></code></td>
+                            <td 
class="colLast"><code>protected&nbsp;boolean</code></td>
+                            <td class="colLast"><code><strong><a 
href="#isExcludedRequestParameter(java.lang.String, 
List)">isExcludedRequestParameter</a></strong>(java.lang.String parameterName, 
java.util.List&lt;java.lang.String&gt; excludedParameterNames)</code><br></td>
+                        </tr>
+                        
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td 
class="colLast"><code>protected&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a 
href="#logFullStackTraceIfEnabled(java.lang.Exception)">logFullStackTraceIfEnabled</a></strong>(java.lang.Exception
 e)</code><br>When the <CODE>grails.exceptionresolver.logFullStackTrace</CODE> 
property is enabled,
@@ -300,79 +306,79 @@ implements <a 
href='../../../../grails/core/support/GrailsApplicationAware.html'
  </td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td 
class="colLast"><code>protected&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a 
href="#logStackTrace(java.lang.Exception, 
jakarta.servlet.http.HttpServletRequest)">logStackTrace</a></strong>(java.lang.Exception
 e, <a 
href='../../../../jakarta.servlet.http.HttpServletRequest.html'>HttpServletRequest</a>
 request)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;<a 
href='../../../../grails/web/mapping/UrlMappingsHolder.html'>UrlMappingsHolder</a></code></td>
                             <td class="colLast"><code><strong><a 
href="#lookupUrlMappings()">lookupUrlMappings</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;<a 
href='../../../../grails/web/mapping/UrlMappingInfo.html'>UrlMappingInfo</a></code></td>
                             <td class="colLast"><code><strong><a 
href="#matchStatusCode(java.lang.Exception, 
grails.web.mapping.UrlMappingsHolder)">matchStatusCode</a></strong>(java.lang.Exception
 ex, <a 
href='../../../../grails/web/mapping/UrlMappingsHolder.html'>UrlMappingsHolder</a>
 urlMappings)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>public&nbsp;<a 
href='../../../../org.springframework.web.servlet.ModelAndView.html'>ModelAndView</a></code></td>
                             <td class="colLast"><code><strong><a 
href="#resolveException(jakarta.servlet.http.HttpServletRequest, 
jakarta.servlet.http.HttpServletResponse, java.lang.Object, 
java.lang.Exception)">resolveException</a></strong>(<a 
href='../../../../jakarta.servlet.http.HttpServletRequest.html'>HttpServletRequest</a>
 request, <a 
href='../../../../jakarta.servlet.http.HttpServletResponse.html'>HttpServletResponse</a>
 response, java.lang.Object handler, java.lang.Exception ex) [...]
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td 
class="colLast"><code>protected&nbsp;java.lang.String</code></td>
                             <td class="colLast"><code><strong><a 
href="#resolveRemoteAddr(jakarta.servlet.http.HttpServletRequest)">resolveRemoteAddr</a></strong>(<a
 
href='../../../../jakarta.servlet.http.HttpServletRequest.html'>HttpServletRequest</a>
 request)</code><br>Resolves the client address to include in the exception log 
headline. </td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td 
class="colLast"><code>protected&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a 
href="#resolveView(jakarta.servlet.http.HttpServletRequest, 
grails.web.mapping.UrlMappingInfo, 
org.springframework.web.servlet.ModelAndView)">resolveView</a></strong>(<a 
href='../../../../jakarta.servlet.http.HttpServletRequest.html'>HttpServletRequest</a>
 request, <a 
href='../../../../grails/web/mapping/UrlMappingInfo.html'>UrlMappingInfo</a> 
info, <a 
href='../../../../org.springframework.web.servlet.ModelAndView.html'>Mod [...]
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td class="colLast"><code>protected&nbsp;<a 
href='../../../../org.springframework.web.servlet.ModelAndView.html'>ModelAndView</a></code></td>
                             <td class="colLast"><code><strong><a 
href="#resolveViewOrForward(java.lang.Exception, 
grails.web.mapping.UrlMappingsHolder, jakarta.servlet.http.HttpServletRequest, 
jakarta.servlet.http.HttpServletResponse, 
org.springframework.web.servlet.ModelAndView)">resolveViewOrForward</a></strong>(java.lang.Exception
 ex, <a 
href='../../../../grails/web/mapping/UrlMappingsHolder.html'>UrlMappingsHolder</a>
 urlMappings, <a href='../../../../jakarta.servlet.http.HttpServlet [...]
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td 
class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a 
href="#setGrailsApplication(grails.core.GrailsApplication)">setGrailsApplication</a></strong>(<a
 href='../../../../grails/core/GrailsApplication.html'>GrailsApplication</a> 
grailsApplication)</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td 
class="colLast"><code>public&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a 
href="#setServletContext(jakarta.servlet.ServletContext)">setServletContext</a></strong>(<a
 href='../../../../jakarta.servlet.ServletContext.html'>ServletContext</a> 
servletContext)</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td 
class="colLast"><code>protected&nbsp;void</code></td>
                             <td class="colLast"><code><strong><a 
href="#setStatus(jakarta.servlet.http.HttpServletRequest, 
jakarta.servlet.http.HttpServletResponse, 
org.springframework.web.servlet.ModelAndView, 
java.lang.Exception)">setStatus</a></strong>(<a 
href='../../../../jakarta.servlet.http.HttpServletRequest.html'>HttpServletRequest</a>
 request, <a 
href='../../../../jakarta.servlet.http.HttpServletResponse.html'>HttpServletResponse</a>
 response, <a href='../../../../org.springfram [...]
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td 
class="colLast"><code>protected&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a 
href="#shouldLogAuditor()">shouldLogAuditor</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="rowColor">
+                        <tr class="altColor">
                             <td class="colFirst"><code></code></td>
                             <td 
class="colLast"><code>protected&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a 
href="#shouldLogFullStackTrace()">shouldLogFullStackTrace</a></strong>()</code><br></td>
                         </tr>
                         
-                        <tr class="altColor">
+                        <tr class="rowColor">
                             <td class="colFirst"><code></code></td>
                             <td 
class="colLast"><code>protected&nbsp;boolean</code></td>
                             <td class="colLast"><code><strong><a 
href="#shouldLogRemoteAddr()">shouldLogRemoteAddr</a></strong>()</code><br></td>
@@ -588,6 +594,14 @@ implements <a 
href='../../../../grails/core/support/GrailsApplicationAware.html'
                             </li>
                         </ul>
                     
+                        <a name="isExcludedRequestParameter(java.lang.String, 
List)"><!-- --></a>
+                        <ul class="blockListLast">
+                            <li class="blockList">
+                                <h4>protected&nbsp;boolean 
<strong>isExcludedRequestParameter</strong>(java.lang.String parameterName, 
java.util.List&lt;java.lang.String&gt; excludedParameterNames)</h4>
+                                <p></p>
+                            </li>
+                        </ul>
+                    
                         <a 
name="logFullStackTraceIfEnabled(java.lang.Exception)"><!-- --></a>
                         <ul class="blockListLast">
                             <li class="blockList">
diff --git a/docs/snapshot/guide/commandLine.html 
b/docs/snapshot/guide/commandLine.html
index 98e80909086..e6917f2fc9f 100644
--- a/docs/snapshot/guide/commandLine.html
+++ b/docs/snapshot/guide/commandLine.html
@@ -623,13 +623,13 @@ Here&#8217;s an example of the available options in 
interactive mode:</p>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="shell">grails&gt; create-app -h
-Usage: grails create-app [-hivVx] [--list-features] [-g=GORM Implementation] 
[--jdk=&lt;javaVersion&gt;]
+Usage: grails create-app [-hivVx] [--list-features] [-d=Grails Data 
Implementation] [--jdk=&lt;javaVersion&gt;]
                          [-s=Servlet Implementation] [-t=TEST] 
[-f=FEATURE[,FEATURE...]]... [NAME]
 Creates an application
       [NAME]            The name of the application to create.
   -f, --features=FEATURE[,FEATURE...]
                         The features to use. Possible values: h2, scaffolding, 
gorm-hibernate5,
-                          spring-boot-starter-jetty, 
spring-boot-starter-tomcat,
+                          gorm-hibernate7, spring-boot-starter-jetty, 
spring-boot-starter-tomcat,
                           micronaut-http-client, cache-ehcache, 
hibernate-validator, postgres,
                           mysql, cache, database-migration, grails-gsp, 
hamcrest, gorm-mongodb,
                           assertj, mockito, spring-boot-starter-undertow,
@@ -637,9 +637,9 @@ Creates an application
                           grails-console, views-markup, asset-pipeline-grails, 
views-json,
                           gorm-neo4j, asciidoctor, grails-web-console,
                           logbackGroovy, mongo-sync, shade, geb, properties
-  -g, --gorm=GORM Implementation
-                        Which GORM Implementation to configure. Possible 
values: hibernate,
-                          mongodb, neo4j.
+  -d, --data, -g, --gorm=Grails Data Implementation
+                        Which Grails Data implementation to configure (-g, 
--gorm are legacy
+                          aliases). Possible values: hibernate5, hibernate7, 
mongodb.
   -h, --help            Show this help message and exit.
   -i, --inplace         Create a service using the current directory
       --jdk, --java-version=&lt;javaVersion&gt;
@@ -679,8 +679,9 @@ Available Features
 
   Database
   database-migration                  Adds support for Liquibase database 
migrations. The Database Migration plugin helps you manage database changes 
while developing Grails applications.
-  gorm-hibernate5 (+)                 Adds support for Hibernate5 using GORM
-  gorm-mongodb                        Configures GORM for MongoDB for Groovy 
applications
+  gorm-hibernate5 (+)                 Configure Grails Data for using 
Hibernate 5.
+  gorm-hibernate7                     Configure Grails Data for using 
Hibernate 7.
+  gorm-mongodb                        Configure Grails Data for using MongoDB.
   gorm-neo4j                          Configures GORM for Neo4j for Groovy 
applications
   h2 (+)                              Adds the H2 driver and default config
   mongo-sync                          Adds support for the MongoDB Synchronous 
Driver
@@ -1373,7 +1374,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <p>-s, --servlet</p>
 </li>
 <li>
-<p>-g, --gorm</p>
+<p>-d, --data (-g, --gorm are legacy aliases)</p>
 </li>
 <li>
 <p>-t, --test</p>
@@ -1391,7 +1392,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <pre class="CodeRay highlight"><code data-lang="console">./grails -t forge 
create-app \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo</code></pre>
@@ -1410,7 +1411,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <p>-s, --servlet</p>
 </li>
 <li>
-<p>-g, --gorm</p>
+<p>-d, --data (-g, --gorm are legacy aliases)</p>
 </li>
 <li>
 <p>-t, --test</p>
@@ -1428,7 +1429,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <pre class="CodeRay highlight"><code data-lang="console">./grails -t forge 
create-restapi \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo</code></pre>
@@ -1447,7 +1448,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <p>-s, --servlet</p>
 </li>
 <li>
-<p>-g, --gorm</p>
+<p>-d, --data (-g, --gorm are legacy aliases)</p>
 </li>
 <li>
 <p>-t, --test</p>
@@ -1465,7 +1466,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <pre class="CodeRay highlight"><code data-lang="console">./grails -t forge 
create-plugin \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo</code></pre>
@@ -1484,7 +1485,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <p>-s, --servlet</p>
 </li>
 <li>
-<p>-g, --gorm</p>
+<p>-d, --data (-g, --gorm are legacy aliases)</p>
 </li>
 <li>
 <p>-t, --test</p>
@@ -1502,7 +1503,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <pre class="CodeRay highlight"><code data-lang="console">./grails -t forge 
create-web-plugin \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo</code></pre>
@@ -1514,7 +1515,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <div class="sect2">
 <h3 id="_the_create_command_flags">The <code>create-</code> command flags</h3>
 <div class="paragraph">
-<p>The "create-*" commands are used to produce a fundamental Grails project, 
allowing for the inclusion of optional flags to select additional features, to 
customize GORM settings, an embedded servlet, the test framework, and the Java 
version.</p>
+<p>The "create-*" commands are used to produce a fundamental Grails project, 
allowing for the inclusion of optional flags to select additional features, to 
customize Grails Data settings, an embedded servlet, the test framework, and 
the Java version.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
 <colgroup>
@@ -1549,11 +1550,11 @@ Commands defined this way still have access to the 
execution context via a varia
 </div></div></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">-g, 
--gorm</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Which GORM 
Implementation to configure. Possible values: hibernate, mongodb, 
neo4j.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">-d, --data 
(-g, --gorm are legacy aliases)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Which 
Grails Data implementation to configure. Possible values: hibernate5, 
hibernate7, mongodb. The value hibernate is accepted as a legacy alias for 
hibernate5.</p></td>
 <td class="tableblock halign-left valign-top"><div class="content"><div 
class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="shell">--gorm 
hibernate</code></pre>
+<pre class="CodeRay highlight"><code data-lang="shell">--data 
hibernate5</code></pre>
 </div>
 </div></div></td>
 </tr>
@@ -1568,7 +1569,7 @@ Commands defined this way still have access to the 
execution context via a varia
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">-f, 
--features</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The 
features to use. Possible values: h2, gorm-hibernate5, 
spring-boot-starter-jetty, micronaut-http-client, cache-ehcache, 
hibernate-validator, postgres, mysql, cache, database-migration, grails-gsp, 
hamcrest, gorm-mongodb, assertj, mockito, spring-boot-starter-undertow, 
github-workflow-java-ci, jrebel, testcontainers, sqlserver, grails-console, 
views-markup, views-json, gorm-neo4j, asciidoctor, grails-web-console, logb 
[...]
+<td class="tableblock halign-left valign-top"><p class="tableblock">The 
features to use. Possible values: h2, gorm-hibernate5, gorm-hibernate7, 
spring-boot-starter-jetty, micronaut-http-client, cache-ehcache, 
hibernate-validator, postgres, mysql, cache, database-migration, grails-gsp, 
hamcrest, gorm-mongodb, assertj, mockito, spring-boot-starter-undertow, 
github-workflow-java-ci, jrebel, testcontainers, sqlserver, grails-console, 
views-markup, views-json, gorm-neo4j, asciidoctor, grails- [...]
 <td class="tableblock halign-left valign-top"><div class="content"><div 
class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="shell">--features 
github-workflow-java-ci,micronaut-http-client</code></pre>
@@ -1949,7 +1950,7 @@ ext[<span class="string"><span 
class="delimiter">'</span><span class="content">s
 <p>Use <code>grails create-app myapp</code> to generate a default project 
using the Grails Shell CLI. This is the most common usage.</p>
 </li>
 <li>
-<p>Use <code>grails -t forge create-app myapp</code> to access advanced 
application generation options such as <code>--jdk</code>, <code>--gorm</code>, 
and other Forge-only flags.</p>
+<p>Use <code>grails -t forge create-app myapp</code> to access advanced 
application generation options such as <code>--jdk</code>, <code>--data</code>, 
and other Forge-only flags.</p>
 </li>
 </ul>
 </div>
diff --git a/docs/snapshot/guide/conf.html b/docs/snapshot/guide/conf.html
index 8ba914c6069..bc926cb4dcb 100644
--- a/docs/snapshot/guide/conf.html
+++ b/docs/snapshot/guide/conf.html
@@ -915,7 +915,8 @@ qualified name of the artifact.</p>
 
 <div class="paragraph">
 <p>When Grails logs a stacktrace, the log message may include the names and 
values of all of the request parameters for the current request.
-To mask out the values of secure request parameters, specify the parameter 
names in the <code>grails.exceptionresolver.params.exclude</code> config 
property:</p>
+To mask out the values of secure request parameters, specify the parameter 
names in the <code>grails.exceptionresolver.params.exclude</code> config 
property:
+Parameter names are matched case-insensitively.</p>
 </div>
 <div class="listingblock">
 <div class="title">grails-app/conf/application.yml</div>
diff --git a/docs/snapshot/guide/i18n.html b/docs/snapshot/guide/i18n.html
index 19e354687f2..8bcb28bcdf8 100644
--- a/docs/snapshot/guide/i18n.html
+++ b/docs/snapshot/guide/i18n.html
@@ -289,6 +289,31 @@ Companies deploy assistants like this [](https://kapa.ai) 
on docs via [website w
 <p>Grails will automatically switch the user&#8217;s locale and subsequent 
requests will use the switched locale.</p>
 </div>
 <div class="paragraph">
+<p>To offer a language selector, the i18n plugin discovers the locales your 
application is actually translated into by scanning the classpath for 
<code>messages_&#42;.properties</code> bundles (plus the default locale, 
configurable via <code>grails.i18n.default.locale</code>). This list is exposed 
as the <code>AvailableLocaleResolver</code> bean and published to the servlet 
context under the <code>availableLocales</code> attribute. The 
<code>&lt;g:localeSelect available="true"/&gt;</code [...]
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span 
class="tag">&lt;g:each</span> <span class="attribute-name">in</span>=<span 
class="string"><span class="delimiter">&quot;</span><span 
class="content">${application.getAttribute('availableLocales')}</span><span 
class="delimiter">&quot;</span></span> <span 
class="attribute-name">var</span>=<span class="string"><span 
class="delimiter">&quot;</span><span class="content">locale</span><span 
class="delimiter">&quot;</span></span><span cl [...]
+    <span class="tag">&lt;a</span> <span 
class="attribute-name">href</span>=<span class="string"><span 
class="delimiter">&quot;</span><span 
class="content">?lang=${locale.toLanguageTag()}</span><span 
class="delimiter">&quot;</span></span><span 
class="tag">&gt;</span>${locale.getDisplayName(locale)}<span 
class="tag">&lt;/a&gt;</span>
+<span class="tag">&lt;/g:each&gt;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>By default every <code>&#42;.properties</code> bundle on the classpath is 
considered, so locales contributed by plugins &mdash; whose bundles are 
namespaced (for example <code>spring-security-core_fr.properties</code>) 
&mdash; are listed alongside your application&#8217;s own. Candidate suffixes 
are validated against the ISO language codes (and the ISO country codes when a 
country is present), so non-i18n properties files (such as 
<code>application.properties</code>) are ignored. To r [...]
+</div>
+<div class="listingblock">
+<div class="title">grails-app/conf/application.yml</div>
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="yaml"><span 
class="key">grails</span>:
+    <span class="key">i18n</span>:
+        <span class="key">availableLocales</span>:
+            <span class="key">includePlugins</span>: <span 
class="string"><span class="content">false</span></span>   <span 
class="comment"># list only the application's own 
translations</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Applications created with <code>grails create-app</code> include a 
ready-made language dropdown in the default layout that uses exactly this 
mechanism.</p>
+</div>
+<div class="paragraph">
 <p>By default, Grails uses <a 
href="https://docs.spring.io/spring-framework/docs/7.0.8/javadoc-api/org/springframework/web/servlet/i18n/SessionLocaleResolver.html";>SessionLocaleResolver</a>
 as the <code>localeResolver</code> bean.</p>
 </div>
 <div class="paragraph">
diff --git a/docs/snapshot/guide/introduction.html 
b/docs/snapshot/guide/introduction.html
index cdfc3ebaf9d..533f306041f 100644
--- a/docs/snapshot/guide/introduction.html
+++ b/docs/snapshot/guide/introduction.html
@@ -330,6 +330,23 @@ This brings the Spring Boot 4 modular artifact layout, 
Spring Framework 7 API re
 </div>
 </div>
 <div class="sect3">
+<h4 id="_hibernate_7_application_generation">Hibernate 7 Application 
Generation</h4>
+<div class="paragraph">
+<p>Grails Forge can now generate applications configured for Grails Data with 
Hibernate 7.
+The <code>create-*</code> commands also accept a new <code>-d, --data</code> 
option (the previous <code>-g</code> and <code>--gorm</code> flags remain 
supported as legacy aliases) with the values <code>hibernate5</code>, 
<code>hibernate7</code>, and <code>mongodb</code>; the legacy value 
<code>hibernate</code> is still accepted and selects Hibernate 5:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="console">grails -t forge 
create-app --data=hibernate7 com.example.demo</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Applications generated for Hibernate 7 consume 
<code>grails-hibernate7-bom</code> — or 
<code>grails-hibernate7-micronaut-bom</code> when combined with the 
<code>grails-micronaut</code> feature — consistently across the application 
dependencies, the buildscript classpath, and <code>buildSrc</code>.
+This avoids the dependency resolution conflicts that occur when an application 
generated for Hibernate 5 is manually switched to 
<code>grails-data-hibernate7</code> while the default <code>grails-bom</code> 
remains on the build classpath.
+The <code>database-migration</code> feature also selects the matching 
<code>grails-data-hibernate7-dbmigration</code> plugin automatically.</p>
+</div>
+</div>
+<div class="sect3">
 <h4 id="_plugin_beans_register_before_spring_boot_auto_configuration">Plugin 
Beans Register Before Spring Boot Auto-Configuration</h4>
 <div class="paragraph">
 <p>Grails 8 unifies and retimes the plugin lifecycle so that the beans a 
plugin contributes are registered before Spring Boot processes its 
auto-configurations.
diff --git a/docs/snapshot/guide/single.html b/docs/snapshot/guide/single.html
index 23c43fd71fd..2fab8b863e4 100644
--- a/docs/snapshot/guide/single.html
+++ b/docs/snapshot/guide/single.html
@@ -931,6 +931,23 @@ This brings the Spring Boot 4 modular artifact layout, 
Spring Framework 7 API re
 </div>
 </div>
 <div class="sect3">
+<h4 id="_hibernate_7_application_generation">Hibernate 7 Application 
Generation</h4>
+<div class="paragraph">
+<p>Grails Forge can now generate applications configured for Grails Data with 
Hibernate 7.
+The <code>create-*</code> commands also accept a new <code>-d, --data</code> 
option (the previous <code>-g</code> and <code>--gorm</code> flags remain 
supported as legacy aliases) with the values <code>hibernate5</code>, 
<code>hibernate7</code>, and <code>mongodb</code>; the legacy value 
<code>hibernate</code> is still accepted and selects Hibernate 5:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="console">grails -t forge 
create-app --data=hibernate7 com.example.demo</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Applications generated for Hibernate 7 consume 
<code>grails-hibernate7-bom</code> — or 
<code>grails-hibernate7-micronaut-bom</code> when combined with the 
<code>grails-micronaut</code> feature — consistently across the application 
dependencies, the buildscript classpath, and <code>buildSrc</code>.
+This avoids the dependency resolution conflicts that occur when an application 
generated for Hibernate 5 is manually switched to 
<code>grails-data-hibernate7</code> while the default <code>grails-bom</code> 
remains on the build classpath.
+The <code>database-migration</code> feature also selects the matching 
<code>grails-data-hibernate7-dbmigration</code> plugin automatically.</p>
+</div>
+</div>
+<div class="sect3">
 <h4 id="_plugin_beans_register_before_spring_boot_auto_configuration">Plugin 
Beans Register Before Spring Boot Auto-Configuration</h4>
 <div class="paragraph">
 <p>Grails 8 unifies and retimes the plugin lifecycle so that the beans a 
plugin contributes are registered before Spring Boot processes its 
auto-configurations.
@@ -9595,7 +9612,8 @@ qualified name of the artifact.</p>
 
 <div class="paragraph">
 <p>When Grails logs a stacktrace, the log message may include the names and 
values of all of the request parameters for the current request.
-To mask out the values of secure request parameters, specify the parameter 
names in the <code>grails.exceptionresolver.params.exclude</code> config 
property:</p>
+To mask out the values of secure request parameters, specify the parameter 
names in the <code>grails.exceptionresolver.params.exclude</code> config 
property:
+Parameter names are matched case-insensitively.</p>
 </div>
 <div class="listingblock">
 <div class="title">grails-app/conf/application.yml</div>
@@ -12063,13 +12081,13 @@ Here&#8217;s an example of the available options in 
interactive mode:</p>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="shell">grails&gt; create-app -h
-Usage: grails create-app [-hivVx] [--list-features] [-g=GORM Implementation] 
[--jdk=&lt;javaVersion&gt;]
+Usage: grails create-app [-hivVx] [--list-features] [-d=Grails Data 
Implementation] [--jdk=&lt;javaVersion&gt;]
                          [-s=Servlet Implementation] [-t=TEST] 
[-f=FEATURE[,FEATURE...]]... [NAME]
 Creates an application
       [NAME]            The name of the application to create.
   -f, --features=FEATURE[,FEATURE...]
                         The features to use. Possible values: h2, scaffolding, 
gorm-hibernate5,
-                          spring-boot-starter-jetty, 
spring-boot-starter-tomcat,
+                          gorm-hibernate7, spring-boot-starter-jetty, 
spring-boot-starter-tomcat,
                           micronaut-http-client, cache-ehcache, 
hibernate-validator, postgres,
                           mysql, cache, database-migration, grails-gsp, 
hamcrest, gorm-mongodb,
                           assertj, mockito, spring-boot-starter-undertow,
@@ -12077,9 +12095,9 @@ Creates an application
                           grails-console, views-markup, asset-pipeline-grails, 
views-json,
                           gorm-neo4j, asciidoctor, grails-web-console,
                           logbackGroovy, mongo-sync, shade, geb, properties
-  -g, --gorm=GORM Implementation
-                        Which GORM Implementation to configure. Possible 
values: hibernate,
-                          mongodb, neo4j.
+  -d, --data, -g, --gorm=Grails Data Implementation
+                        Which Grails Data implementation to configure (-g, 
--gorm are legacy
+                          aliases). Possible values: hibernate5, hibernate7, 
mongodb.
   -h, --help            Show this help message and exit.
   -i, --inplace         Create a service using the current directory
       --jdk, --java-version=&lt;javaVersion&gt;
@@ -12119,8 +12137,9 @@ Available Features
 
   Database
   database-migration                  Adds support for Liquibase database 
migrations. The Database Migration plugin helps you manage database changes 
while developing Grails applications.
-  gorm-hibernate5 (+)                 Adds support for Hibernate5 using GORM
-  gorm-mongodb                        Configures GORM for MongoDB for Groovy 
applications
+  gorm-hibernate5 (+)                 Configure Grails Data for using 
Hibernate 5.
+  gorm-hibernate7                     Configure Grails Data for using 
Hibernate 7.
+  gorm-mongodb                        Configure Grails Data for using MongoDB.
   gorm-neo4j                          Configures GORM for Neo4j for Groovy 
applications
   h2 (+)                              Adds the H2 driver and default config
   mongo-sync                          Adds support for the MongoDB Synchronous 
Driver
@@ -12813,7 +12832,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <p>-s, --servlet</p>
 </li>
 <li>
-<p>-g, --gorm</p>
+<p>-d, --data (-g, --gorm are legacy aliases)</p>
 </li>
 <li>
 <p>-t, --test</p>
@@ -12831,7 +12850,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <pre class="CodeRay highlight"><code data-lang="console">./grails -t forge 
create-app \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo</code></pre>
@@ -12850,7 +12869,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <p>-s, --servlet</p>
 </li>
 <li>
-<p>-g, --gorm</p>
+<p>-d, --data (-g, --gorm are legacy aliases)</p>
 </li>
 <li>
 <p>-t, --test</p>
@@ -12868,7 +12887,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <pre class="CodeRay highlight"><code data-lang="console">./grails -t forge 
create-restapi \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo</code></pre>
@@ -12887,7 +12906,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <p>-s, --servlet</p>
 </li>
 <li>
-<p>-g, --gorm</p>
+<p>-d, --data (-g, --gorm are legacy aliases)</p>
 </li>
 <li>
 <p>-t, --test</p>
@@ -12905,7 +12924,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <pre class="CodeRay highlight"><code data-lang="console">./grails -t forge 
create-plugin \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo</code></pre>
@@ -12924,7 +12943,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <p>-s, --servlet</p>
 </li>
 <li>
-<p>-g, --gorm</p>
+<p>-d, --data (-g, --gorm are legacy aliases)</p>
 </li>
 <li>
 <p>-t, --test</p>
@@ -12942,7 +12961,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <pre class="CodeRay highlight"><code data-lang="console">./grails -t forge 
create-web-plugin \
     --servlet=tomcat \
     --jdk=11 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --test=spock \
     --features=github-workflow-java-ci \
     com.example.demo</code></pre>
@@ -12954,7 +12973,7 @@ Commands defined this way still have access to the 
execution context via a varia
 <div class="sect2">
 <h3 id="_the_create_command_flags">The <code>create-</code> command flags</h3>
 <div class="paragraph">
-<p>The "create-*" commands are used to produce a fundamental Grails project, 
allowing for the inclusion of optional flags to select additional features, to 
customize GORM settings, an embedded servlet, the test framework, and the Java 
version.</p>
+<p>The "create-*" commands are used to produce a fundamental Grails project, 
allowing for the inclusion of optional flags to select additional features, to 
customize Grails Data settings, an embedded servlet, the test framework, and 
the Java version.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
 <colgroup>
@@ -12989,11 +13008,11 @@ Commands defined this way still have access to the 
execution context via a varia
 </div></div></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">-g, 
--gorm</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Which GORM 
Implementation to configure. Possible values: hibernate, mongodb, 
neo4j.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">-d, --data 
(-g, --gorm are legacy aliases)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Which 
Grails Data implementation to configure. Possible values: hibernate5, 
hibernate7, mongodb. The value hibernate is accepted as a legacy alias for 
hibernate5.</p></td>
 <td class="tableblock halign-left valign-top"><div class="content"><div 
class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="shell">--gorm 
hibernate</code></pre>
+<pre class="CodeRay highlight"><code data-lang="shell">--data 
hibernate5</code></pre>
 </div>
 </div></div></td>
 </tr>
@@ -13008,7 +13027,7 @@ Commands defined this way still have access to the 
execution context via a varia
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">-f, 
--features</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The 
features to use. Possible values: h2, gorm-hibernate5, 
spring-boot-starter-jetty, micronaut-http-client, cache-ehcache, 
hibernate-validator, postgres, mysql, cache, database-migration, grails-gsp, 
hamcrest, gorm-mongodb, assertj, mockito, spring-boot-starter-undertow, 
github-workflow-java-ci, jrebel, testcontainers, sqlserver, grails-console, 
views-markup, views-json, gorm-neo4j, asciidoctor, grails-web-console, logb 
[...]
+<td class="tableblock halign-left valign-top"><p class="tableblock">The 
features to use. Possible values: h2, gorm-hibernate5, gorm-hibernate7, 
spring-boot-starter-jetty, micronaut-http-client, cache-ehcache, 
hibernate-validator, postgres, mysql, cache, database-migration, grails-gsp, 
hamcrest, gorm-mongodb, assertj, mockito, spring-boot-starter-undertow, 
github-workflow-java-ci, jrebel, testcontainers, sqlserver, grails-console, 
views-markup, views-json, gorm-neo4j, asciidoctor, grails- [...]
 <td class="tableblock halign-left valign-top"><div class="content"><div 
class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="shell">--features 
github-workflow-java-ci,micronaut-http-client</code></pre>
@@ -13389,7 +13408,7 @@ ext[<span class="string"><span 
class="delimiter">'</span><span class="content">s
 <p>Use <code>grails create-app myapp</code> to generate a default project 
using the Grails Shell CLI. This is the most common usage.</p>
 </li>
 <li>
-<p>Use <code>grails -t forge create-app myapp</code> to access advanced 
application generation options such as <code>--jdk</code>, <code>--gorm</code>, 
and other Forge-only flags.</p>
+<p>Use <code>grails -t forge create-app myapp</code> to access advanced 
application generation options such as <code>--jdk</code>, <code>--data</code>, 
and other Forge-only flags.</p>
 </li>
 </ul>
 </div>
@@ -35431,6 +35450,31 @@ You can find the full list of available CodeNarc rules 
at <a href="https://coden
 <p>Grails will automatically switch the user&#8217;s locale and subsequent 
requests will use the switched locale.</p>
 </div>
 <div class="paragraph">
+<p>To offer a language selector, the i18n plugin discovers the locales your 
application is actually translated into by scanning the classpath for 
<code>messages_&#42;.properties</code> bundles (plus the default locale, 
configurable via <code>grails.i18n.default.locale</code>). This list is exposed 
as the <code>AvailableLocaleResolver</code> bean and published to the servlet 
context under the <code>availableLocales</code> attribute. The 
<code>&lt;g:localeSelect available="true"/&gt;</code [...]
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span 
class="tag">&lt;g:each</span> <span class="attribute-name">in</span>=<span 
class="string"><span class="delimiter">&quot;</span><span 
class="content">${application.getAttribute('availableLocales')}</span><span 
class="delimiter">&quot;</span></span> <span 
class="attribute-name">var</span>=<span class="string"><span 
class="delimiter">&quot;</span><span class="content">locale</span><span 
class="delimiter">&quot;</span></span><span cl [...]
+    <span class="tag">&lt;a</span> <span 
class="attribute-name">href</span>=<span class="string"><span 
class="delimiter">&quot;</span><span 
class="content">?lang=${locale.toLanguageTag()}</span><span 
class="delimiter">&quot;</span></span><span 
class="tag">&gt;</span>${locale.getDisplayName(locale)}<span 
class="tag">&lt;/a&gt;</span>
+<span class="tag">&lt;/g:each&gt;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>By default every <code>&#42;.properties</code> bundle on the classpath is 
considered, so locales contributed by plugins &mdash; whose bundles are 
namespaced (for example <code>spring-security-core_fr.properties</code>) 
&mdash; are listed alongside your application&#8217;s own. Candidate suffixes 
are validated against the ISO language codes (and the ISO country codes when a 
country is present), so non-i18n properties files (such as 
<code>application.properties</code>) are ignored. To r [...]
+</div>
+<div class="listingblock">
+<div class="title">grails-app/conf/application.yml</div>
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="yaml"><span 
class="key">grails</span>:
+    <span class="key">i18n</span>:
+        <span class="key">availableLocales</span>:
+            <span class="key">includePlugins</span>: <span 
class="string"><span class="content">false</span></span>   <span 
class="comment"># list only the application's own 
translations</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Applications created with <code>grails create-app</code> include a 
ready-made language dropdown in the default layout that uses exactly this 
mechanism.</p>
+</div>
+<div class="paragraph">
 <p>By default, Grails uses <a 
href="https://docs.spring.io/spring-framework/docs/7.0.8/javadoc-api/org/springframework/web/servlet/i18n/SessionLocaleResolver.html";>SessionLocaleResolver</a>
 as the <code>localeResolver</code> bean.</p>
 </div>
 <div class="paragraph">
diff --git a/docs/snapshot/ref/Command Line/create-app.html 
b/docs/snapshot/ref/Command Line/create-app.html
index fd9bd8447e3..1ca4f3307c4 100644
--- a/docs/snapshot/ref/Command Line/create-app.html    
+++ b/docs/snapshot/ref/Command Line/create-app.html    
@@ -203,7 +203,7 @@ Companies deploy assistants like this [](https://kapa.ai) 
on docs via [website w
 <p>Most users should use the <strong>Grails Shell CLI</strong> by default 
(<code>grails create-app bookstore</code>). This version supports core 
development commands and project lifecycle management, and includes basic 
<code>create-*</code> flags like <code>--inplace</code>, 
<code>--features</code>, and <code>--profile</code>.</p>
 </li>
 <li>
-<p>The <strong>Forge CLI</strong> (<code>grails -t forge create-app 
bookstore</code>) is intended solely for <strong>application 
generation</strong> with extended configuration flags such as 
<code>--jdk</code>, <code>--gorm</code>, and <code>--servlet</code>.</p>
+<p>The <strong>Forge CLI</strong> (<code>grails -t forge create-app 
bookstore</code>) is intended solely for <strong>application 
generation</strong> with extended configuration flags such as 
<code>--jdk</code>, <code>--data</code>, and <code>--servlet</code>.</p>
 </li>
 </ul>
 </div>
@@ -233,7 +233,7 @@ $ cd bookstore</code></pre>
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="console">$ grails -t forge 
create-app bookstore \
     --jdk=17 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --servlet=tomcat \
     --test=spock \
     --features=asciidoctor,github-workflow-java-ci</code></pre>
@@ -251,10 +251,10 @@ $ cd bookstore</code></pre>
 <p><code>NAME</code>: The desired name for the application.</p>
 </li>
 <li>
-<p><code>-f, --features=FEATURE[,FEATURE&#8230;&#8203;]</code>: Enable 
features like <code>gorm-hibernate5</code>, <code>postgres</code>, 
<code>asciidoctor</code>, <code>grails-gsp</code>, etc.</p>
+<p><code>-f, --features=FEATURE[,FEATURE&#8230;&#8203;]</code>: Enable 
features like <code>gorm-hibernate5</code>, <code>gorm-hibernate7</code>, 
<code>postgres</code>, <code>asciidoctor</code>, <code>grails-gsp</code>, 
etc.</p>
 </li>
 <li>
-<p><code>-g, --gorm=GORM Implementation</code>: Choose GORM implementation: 
<code>hibernate</code>, <code>mongodb</code>, <code>neo4j</code>.</p>
+<p><code>-d, --data=Grails Data Implementation</code> (<code>-g</code>, 
<code>--gorm</code> are legacy aliases): Choose the Grails Data implementation: 
<code>hibernate5</code>, <code>hibernate7</code>, <code>mongodb</code>.</p>
 </li>
 <li>
 <p><code>--jdk=&lt;javaVersion&gt;</code>: Target JDK version (e.g., 11 or 
17).</p>
@@ -289,7 +289,7 @@ $ grails create-app --inplace</code></pre>
 - <code>--profile</code></p>
 </div>
 <div class="paragraph">
-<p>Forge-only options such as <code>--jdk</code>, <code>--gorm</code>, or 
<code>--servlet</code> are <strong>not supported</strong> in the Shell CLI.</p>
+<p>Forge-only options such as <code>--jdk</code>, <code>--data</code>, or 
<code>--servlet</code> are <strong>not supported</strong> in the Shell CLI.</p>
 </div>
 </div>
 <div class="sect2">
@@ -311,7 +311,7 @@ $ cd bookstore</code></pre>
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="console">$ grails -t forge 
create-app bookstore \
     --jdk=17 \
-    --gorm=hibernate \
+    --data=hibernate5 \
     --features=asciidoctor,grails-gsp</code></pre>
 </div>
 </div>
diff --git a/docs/snapshot/ref/Command Line/create-plugin.html 
b/docs/snapshot/ref/Command Line/create-plugin.html
index 330eca76b35..50f4205b1a6 100644
--- a/docs/snapshot/ref/Command Line/create-plugin.html 
+++ b/docs/snapshot/ref/Command Line/create-plugin.html 
@@ -245,7 +245,7 @@ Companies deploy assistants like this [](https://kapa.ai) 
on docs via [website w
 </ul>
 </div>
 <div class="paragraph">
-<p>Options include specifying features, configuring the GORM implementation, 
selecting a servlet implementation, choosing a test framework, setting the JDK 
version, and more. You can tailor your Grails plugin to your specific 
requirements using these options.</p>
+<p>Options include specifying features, configuring the Grails Data 
implementation, selecting a servlet implementation, choosing a test framework, 
setting the JDK version, and more. You can tailor your Grails plugin to your 
specific requirements using these options.</p>
 </div>
 </div>
 <div class="sect2">
@@ -256,10 +256,10 @@ Companies deploy assistants like this [](https://kapa.ai) 
on docs via [website w
 <div class="ulist">
 <ul>
 <li>
-<p>-f, --features=FEATURE[,FEATURE&#8230;&#8203;]: Specifies the features to 
include in the plugin. Available options include h2, gorm-hibernate5, 
spring-boot-starter-jetty, micronaut-http-client, cache-ehcache, 
hibernate-validator, postgres, mysql, cache, database-migration, grails-gsp, 
hamcrest, gorm-mongodb, assertj, mockito, spring-boot-starter-undertow,  
github-workflow-java-ci, jrebel, testcontainers, sqlserver, grails-console, 
views-markup, views-json, gorm-neo4j, asciidoctor, gra [...]
+<p>-f, --features=FEATURE[,FEATURE&#8230;&#8203;]: Specifies the features to 
include in the plugin. Available options include h2, gorm-hibernate5, 
gorm-hibernate7, spring-boot-starter-jetty, micronaut-http-client, 
cache-ehcache, hibernate-validator, postgres, mysql, cache, database-migration, 
grails-gsp, hamcrest, gorm-mongodb, assertj, mockito, 
spring-boot-starter-undertow,  github-workflow-java-ci, jrebel, testcontainers, 
sqlserver, grails-console, views-markup, views-json, gorm-neo4j, [...]
 </li>
 <li>
-<p>-g, --gorm=GORM Implementation: Specifies the GORM Implementation to 
configure for the plugin. Possible values are hibernate, mongodb, neo4j.</p>
+<p>-d, --data=Grails Data Implementation (-g, --gorm are legacy aliases): 
Specifies the Grails Data implementation to configure for the plugin. Possible 
values are hibernate5, hibernate7, mongodb.</p>
 </li>
 <li>
 <p>-h, --help: Displays the help message and exits.</p>
@@ -312,11 +312,11 @@ Companies deploy assistants like this [](https://kapa.ai) 
on docs via [website w
 <p>Create a plugin with MongoDB support:</p>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="shell">grails create-plugin 
mongodb-plugin --gorm=mongodb</code></pre>
+<pre class="CodeRay highlight"><code data-lang="shell">grails create-plugin 
mongodb-plugin --data=mongodb</code></pre>
 </div>
 </div>
 <div class="paragraph">
-<p>This command will generate a Grails plugin project named "mongodb-plugin" 
configured to use MongoDB as the GORM implementation.</p>
+<p>This command will generate a Grails plugin project named "mongodb-plugin" 
configured to use MongoDB as the Grails Data implementation.</p>
 </div>
 </li>
 <li>
@@ -333,7 +333,7 @@ Companies deploy assistants like this [](https://kapa.ai) 
on docs via [website w
 </ol>
 </div>
 <div class="paragraph">
-<p>These additional examples showcase different use cases for the 
<code>create-plugin</code> command, such as creating minimal plugins, 
customizing GORM implementations, and enabling specific features to meet 
project requirements.</p>
+<p>These additional examples showcase different use cases for the 
<code>create-plugin</code> command, such as creating minimal plugins, 
customizing Grails Data implementations, and enabling specific features to meet 
project requirements.</p>
 </div>
 </div>
 </div>
diff --git a/docs/snapshot/ref/Command Line/create-restapi.html 
b/docs/snapshot/ref/Command Line/create-restapi.html
index 145a0c3f4fb..f029ad6d356 100644
--- a/docs/snapshot/ref/Command Line/create-restapi.html        
+++ b/docs/snapshot/ref/Command Line/create-restapi.html        
@@ -217,10 +217,10 @@ Companies deploy assistants like this [](https://kapa.ai) 
on docs via [website w
 <p><code>NAME</code>: The desired name for the REST API application.</p>
 </li>
 <li>
-<p><code>-f, --features=FEATURE[,FEATURE&#8230;&#8203;]</code>: Specifies the 
features to include. Available options include h2, scaffolding, 
gorm-hibernate5, spring-boot-starter-jetty, spring-boot-starter-tomcat, 
micronaut-http-client, cache-ehcache, hibernate-validator, postgres, mysql, 
cache, database-migration, grails-gsp, hamcrest, gorm-mongodb, assertj, 
mockito, spring-boot-starter-undertow, github-workflow-java-ci, jrebel, 
testcontainers, sqlserver, grails-console, views-markup, a [...]
+<p><code>-f, --features=FEATURE[,FEATURE&#8230;&#8203;]</code>: Specifies the 
features to include. Available options include h2, scaffolding, 
gorm-hibernate5, gorm-hibernate7, spring-boot-starter-jetty, 
spring-boot-starter-tomcat, micronaut-http-client, cache-ehcache, 
hibernate-validator, postgres, mysql, cache, database-migration, grails-gsp, 
hamcrest, gorm-mongodb, assertj, mockito, spring-boot-starter-undertow, 
github-workflow-java-ci, jrebel, testcontainers, sqlserver, grails-console [...]
 </li>
 <li>
-<p><code>-g, --gorm=GORM Implementation</code>: Specifies the GORM 
Implementation to configure, with options like hibernate, mongodb, neo4j.</p>
+<p><code>-d, --data=Grails Data Implementation</code> (<code>-g</code>, 
<code>--gorm</code> are legacy aliases): Specifies the Grails Data 
implementation to configure, with options hibernate5, hibernate7, mongodb.</p>
 </li>
 <li>
 <p><code>-h, --help</code>: Displays the help message and exits.</p>
diff --git a/docs/snapshot/ref/Command Line/create-web-plugin.html 
b/docs/snapshot/ref/Command Line/create-web-plugin.html
index 7201ac2e28b..339358e2d7b 100644
--- a/docs/snapshot/ref/Command Line/create-web-plugin.html     
+++ b/docs/snapshot/ref/Command Line/create-web-plugin.html     
@@ -214,10 +214,10 @@ Companies deploy assistants like this [](https://kapa.ai) 
on docs via [website w
 <div class="ulist">
 <ul>
 <li>
-<p><code>-f, --features=FEATURE[,FEATURE&#8230;&#8203;]</code>: Specifies the 
features to include in the plugin. Available options include h2, 
gorm-hibernate5, spring-boot-starter-jetty, micronaut-http-client, 
cache-ehcache, hibernate-validator, postgres, mysql, cache, database-migration, 
grails-gsp, hamcrest, gorm-mongodb, assertj, mockito, 
spring-boot-starter-undertow, github-workflow-java-ci, jrebel, testcontainers, 
sqlserver, grails-console, views-markup, views-json, gorm-neo4j, asci [...]
+<p><code>-f, --features=FEATURE[,FEATURE&#8230;&#8203;]</code>: Specifies the 
features to include in the plugin. Available options include h2, 
gorm-hibernate5, gorm-hibernate7, spring-boot-starter-jetty, 
micronaut-http-client, cache-ehcache, hibernate-validator, postgres, mysql, 
cache, database-migration, grails-gsp, hamcrest, gorm-mongodb, assertj, 
mockito, spring-boot-starter-undertow, github-workflow-java-ci, jrebel, 
testcontainers, sqlserver, grails-console, views-markup, views-json, [...]
 </li>
 <li>
-<p><code>-g, --gorm=GORM Implementation</code>: Specifies the GORM 
Implementation to configure for the plugin. Possible values are hibernate, 
mongodb, neo4j.</p>
+<p><code>-d, --data=Grails Data Implementation</code> (<code>-g</code>, 
<code>--gorm</code> are legacy aliases): Specifies the Grails Data 
implementation to configure for the plugin. Possible values are hibernate5, 
hibernate7, mongodb.</p>
 </li>
 <li>
 <p><code>-h, --help</code>: Displays the help message and exits.</p>
diff --git a/docs/snapshot/ref/Command Line/help.html 
b/docs/snapshot/ref/Command Line/help.html
index e9f273ef1e8..bcb2bea2b3d 100644
--- a/docs/snapshot/ref/Command Line/help.html  
+++ b/docs/snapshot/ref/Command Line/help.html  
@@ -329,13 +329,13 @@ To access help for Forge-only options such as 
<code>--features</code>, <code>--j
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="shell">grails&gt; create-app 
--help
-Usage: grails create-app [-hivVx] [--list-features] [-g=GORM Implementation] 
[--jdk=&lt;javaVersion&gt;]
+Usage: grails create-app [-hivVx] [--list-features] [-d=Grails Data 
Implementation] [--jdk=&lt;javaVersion&gt;]
                          [-s=Servlet Implementation] [-t=TEST] 
[-f=FEATURE[,FEATURE...]]... [NAME]
 Creates an application
       [NAME]            The name of the application to create.
   -f, --features=FEATURE[,FEATURE...]
                         The features to use. Possible values: h2, scaffolding, 
gorm-hibernate5,
-                          spring-boot-starter-jetty, 
spring-boot-starter-tomcat,
+                          gorm-hibernate7, spring-boot-starter-jetty, 
spring-boot-starter-tomcat,
                           micronaut-http-client, cache-ehcache, 
hibernate-validator, postgres,
                           mysql, cache, database-migration, grails-gsp, 
hamcrest, gorm-mongodb,
                           assertj, mockito, spring-boot-starter-undertow,
@@ -343,9 +343,9 @@ Creates an application
                           grails-console, views-markup, asset-pipeline-grails, 
views-json,
                           gorm-neo4j, asciidoctor, grails-web-console,
                           logbackGroovy, mongo-sync, shade, geb, properties
-  -g, --gorm=GORM Implementation
-                        Which GORM Implementation to configure. Possible 
values: hibernate,
-                          mongodb, neo4j.
+  -d, --data, -g, --gorm=Grails Data Implementation
+                        Which Grails Data implementation to configure (-g, 
--gorm are legacy
+                          aliases). Possible values: hibernate5, hibernate7, 
mongodb.
   -h, --help            Show this help message and exit.
   -i, --inplace         Create a service using the current directory
       --jdk, --java-version=&lt;javaVersion&gt;
diff --git a/docs/snapshot/ref/Command Line/list-features.html 
b/docs/snapshot/ref/Command Line/list-features.html
index dd794d732a1..251ab28e492 100644
--- a/docs/snapshot/ref/Command Line/list-features.html 
+++ b/docs/snapshot/ref/Command Line/list-features.html 
@@ -244,8 +244,9 @@ Available Features
 
   Database
   database-migration                  Adds support for Liquibase database 
migrations. The Database Migration plugin helps you manage database changes 
while developing Grails applications.
-  gorm-hibernate5 (+)                 Adds support for Hibernate5 using GORM
-  gorm-mongodb                        Configures GORM for MongoDB for Groovy 
applications
+  gorm-hibernate5 (+)                 Configure Grails Data for using 
Hibernate 5.
+  gorm-hibernate7                     Configure Grails Data for using 
Hibernate 7.
+  gorm-mongodb                        Configure Grails Data for using MongoDB.
   gorm-neo4j                          Configures GORM for Neo4j for Groovy 
applications
   h2 (+)                              Adds the H2 driver and default config
   mongo-sync                          Adds support for the MongoDB Synchronous 
Driver
diff --git a/docs/snapshot/ref/Configuration/Application Properties.html 
b/docs/snapshot/ref/Configuration/Application Properties.html
index d5e14dd21aa..467c4b31b74 100644
--- a/docs/snapshot/ref/Configuration/Application Properties.html       
+++ b/docs/snapshot/ref/Configuration/Application Properties.html       
@@ -350,12 +350,12 @@ environments {
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>grails.exceptionresolver.logRequestParameters</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Whether to 
log request parameters in exception stack traces.</p></td>
-<td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Whether to 
log request parameters in exception stack traces. Defaults to true in 
development and false otherwise.</p></td>
+<td class="tableblock halign-left valign-top"></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>grails.exceptionresolver.params.exclude</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">List of 
parameter names to mask (replace with [<strong>*</strong>]) in exception stack 
traces, typically used for password and creditCard.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">List of 
parameter names to mask (replace with <strong>*</strong>) in exception stack 
traces, typically used for password and creditCard. Parameter names are matched 
case-insensitively.</p></td>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>[]</code></p></td>
 </tr>
 <tr>
diff --git a/docs/snapshot/ref/Tags - GSP/localeSelect.html 
b/docs/snapshot/ref/Tags - GSP/localeSelect.html
index 1852455f4d0..63b1a1aa56a 100644
--- a/docs/snapshot/ref/Tags - GSP/localeSelect.html    
+++ b/docs/snapshot/ref/Tags - GSP/localeSelect.html    
@@ -193,7 +193,10 @@ Companies deploy assistants like this [](https://kapa.ai) 
on docs via [website w
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="xml"><span 
class="comment">&lt;!-- create a locale select --&gt;</span>
-<span class="tag">&lt;g:localeSelect</span> <span 
class="attribute-name">name</span>=<span class="string"><span 
class="delimiter">&quot;</span><span class="content">myLocale</span><span 
class="delimiter">&quot;</span></span> <span 
class="attribute-name">value</span>=<span class="string"><span 
class="delimiter">&quot;</span><span class="content">${locale}</span><span 
class="delimiter">&quot;</span></span> <span 
class="tag">/&gt;</span></code></pre>
+<span class="tag">&lt;g:localeSelect</span> <span 
class="attribute-name">name</span>=<span class="string"><span 
class="delimiter">&quot;</span><span class="content">myLocale</span><span 
class="delimiter">&quot;</span></span> <span 
class="attribute-name">value</span>=<span class="string"><span 
class="delimiter">&quot;</span><span class="content">${locale}</span><span 
class="delimiter">&quot;</span></span> <span class="tag">/&gt;</span>
+
+<span class="comment">&lt;!-- list only the locales the application is 
translated into --&gt;</span>
+<span class="tag">&lt;g:localeSelect</span> <span 
class="attribute-name">name</span>=<span class="string"><span 
class="delimiter">&quot;</span><span class="content">myLocale</span><span 
class="delimiter">&quot;</span></span> <span 
class="attribute-name">available</span>=<span class="string"><span 
class="delimiter">&quot;</span><span class="content">true</span><span 
class="delimiter">&quot;</span></span> <span 
class="tag">/&gt;</span></code></pre>
 </div>
 </div>
 </div>
@@ -213,6 +216,9 @@ Companies deploy assistants like this [](https://kapa.ai) 
on docs via [website w
 <li>
 <p><code>locale</code> (optional) - The <a 
href="https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Locale.html";>Locale</a>
 to use for formatting the locale names. Defaults to the current request locale 
and then the system default locale if not specified</p>
 </li>
+<li>
+<p><code>available</code> (optional) - If <code>true</code>, lists only the 
locales the application is actually translated into (those with a 
<code>messages_&#42;.properties</code> bundle on the classpath, as discovered 
by the i18n plugin) rather than every locale the JVM knows about. Defaults to 
<code>false</code>.</p>
+</li>
 </ul>
 </div>
 </div>

Reply via email to