Skip to content

Commit a223b07

Browse files
committed
Create Language plugin to provide languages of web site
1 parent 1497c5c commit a223b07

5 files changed

Lines changed: 82 additions & 1 deletion

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package grace.demos
2+
3+
import grails.plugins.*
4+
5+
class LanguageGrailsPlugin extends DynamicPlugin {
6+
7+
def grailsVersion = "2023.0.0 > *"
8+
def version = "1.0.0"
9+
def providedModules = [LanguageModuleDescriptor]
10+
11+
Closure doWithSpring() { {->
12+
// You can also use Spring AutoConfiguration
13+
languageManager(DefaultLanguageManager)
14+
}
15+
}
16+
17+
Closure doWithDynamicModules() { { ->
18+
// Supported Languages
19+
language(key: 'en_US', title: 'English', i18nNameKey: 'languages.en_US')
20+
language(key: 'zh_CN', title: 'Chinese (Simplified Chinese)', i18nNameKey: 'languages.zh_CN')
21+
language(key: 'zh_TW', title: 'Chinese (Traditional Chinese)', i18nNameKey: 'languages.zh_TW', enabled: true)
22+
}}
23+
24+
}

app/views/layouts/main.gsp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
<li class="nav-item dropdown">
4949
<a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Languages</a>
5050
<ul class="dropdown-menu dropdown-menu-end">
51-
<g:each var="lang" in="${['en', 'cs', 'da', 'de', 'es', 'fr', 'it', 'ja', 'nb', 'nl', 'pl', 'pt_BR', 'pt_PT', 'ru', 'sk', 'sv', 'th', 'zh_CN', 'zh_TW']}">
51+
<g:each var="lang" in="${applicationContext.getBean('languageManager').languages*.key}">
5252
<g:set var="locale" value="${Locale.forLanguageTag(lang.replace('_', '-'))}"/>
5353
<g:set var="paramsWithLang" value="${params + [lang:lang]}"/>
5454
<li>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package grace.demos
2+
3+
import grails.plugins.GrailsPluginManager
4+
import grails.plugins.PluginManagerAware
5+
6+
class DefaultLanguageManager implements LanguageManager, PluginManagerAware {
7+
8+
private GrailsPluginManager pluginManager
9+
10+
DefaultLanguageManager() {
11+
}
12+
13+
DefaultLanguageManager(GrailsPluginManager pluginManager) {
14+
this.pluginManager = pluginManager
15+
}
16+
17+
@Override
18+
List<LanguageModuleDescriptor> getLanguages() {
19+
this.pluginManager.getEnabledModuleDescriptorsByClass(LanguageModuleDescriptor)
20+
}
21+
22+
@Override
23+
void setPluginManager(GrailsPluginManager pluginManager) {
24+
this.pluginManager = pluginManager
25+
}
26+
27+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package grace.demos;
2+
3+
import java.util.List;
4+
5+
public interface LanguageManager {
6+
7+
List<LanguageModuleDescriptor> getLanguages();
8+
9+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package grace.demos
2+
3+
import grails.plugins.GrailsPlugin
4+
import grails.plugins.descriptors.AbstractModuleDescriptor
5+
import grails.plugins.exceptions.PluginException
6+
7+
class LanguageModuleDescriptor extends AbstractModuleDescriptor {
8+
9+
String title
10+
11+
LanguageModuleDescriptor() {
12+
super()
13+
}
14+
15+
@Override
16+
void init(GrailsPlugin plugin, Map args) throws PluginException {
17+
super.init(plugin, args)
18+
this.title = args.title
19+
}
20+
21+
}

0 commit comments

Comments
 (0)