Skip to content

Commit c258811

Browse files
bratwurztDušan Markovič
andauthored
Add option to configure selectable languages in the UI
closes #1417 Co-authored-by: Dušan Markovič <[email protected]>
1 parent ee1abab commit c258811

File tree

9 files changed

+38
-4
lines changed

9 files changed

+38
-4
lines changed

spring-boot-admin-docs/src/main/asciidoc/customizing.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,8 @@ It is possible to use a custom favicon, which is also used for desktop notificat
140140
2. Configure the icons to use using the following properties:
141141
- `spring.boot.admin.ui.favicon`: Used as default icon. (e.g `assets/img/custom-favicon.png`
142142
- `spring.boot.admin.ui.favicon-danger`: Used when one or more service is down. (e.g `assets/img/custom-favicon-danger.png`)
143+
144+
=== Customizing Available Languages ===
145+
To filter languages to a subset of all supported languages:
146+
147+
- **spring.boot.admin.ui.available-languages**: Used as a filter of existing languages. (e.g `en,de` out of existing `de,en,fr,ko,pt-BR,ru,zh`)

spring-boot-admin-server-ui/src/main/frontend/sba-config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const DEFAULT_CONFIG = {
2525
faviconDanger: 'assets/img/favicon-danger.png',
2626
notificationFilterEnabled: false,
2727
routes: [],
28+
availableLanguages: []
2829
},
2930
user: null,
3031
extensions: [],

spring-boot-admin-server-ui/src/main/frontend/shell/navbar.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
import {compareBy} from '@/utils/collections';
8484
import {AVAILABLE_LANGUAGES} from '@/i18n';
8585
import moment from 'moment';
86+
import isEmpty from 'lodash/isEmpty';
8687
8788
const readCookie = (name) => {
8889
const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
@@ -132,7 +133,9 @@
132133
this.userName = sbaConfig.user ? sbaConfig.user.name : null;
133134
this.csrfToken = readCookie('XSRF-TOKEN');
134135
this.csrfParameterName = sbaConfig.csrf.parameterName;
135-
this.availableLanguages = AVAILABLE_LANGUAGES;
136+
this.availableLanguages = (isEmpty(sbaConfig.uiSettings.availableLanguages)) ?
137+
AVAILABLE_LANGUAGES :
138+
sbaConfig.uiSettings.availableLanguages.filter(language => AVAILABLE_LANGUAGES.includes(language))
136139
this.currentLanguage = this.$i18n.locale;
137140
},
138141
mounted() {

spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/config/AdminServerUiAutoConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ public UiController homeUiController(UiExtensions uiExtensions) throws IOExcepti
9090
.notificationFilterEnabled(
9191
!this.applicationContext.getBeansOfType(NotificationFilterController.class).isEmpty())
9292
.routes(routes).rememberMeEnabled(this.adminUi.isRememberMeEnabled())
93-
.externalViews(this.adminUi.getExternalViews()).build();
93+
.availableLanguages(this.adminUi.getAvailableLanguages()).externalViews(this.adminUi.getExternalViews())
94+
.build();
9495

9596
String publicUrl = (this.adminUi.getPublicUrl() != null) ? this.adminUi.getPublicUrl()
9697
: this.adminServer.getContextPath();

spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/config/AdminServerUiProperties.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ public class AdminServerUiProperties {
107107
*/
108108
private boolean rememberMeEnabled = true;
109109

110+
/**
111+
* Limit languages to this list. Intersection of all supported languages and this list
112+
* will be used.
113+
*/
114+
private List<String> availableLanguages = new ArrayList<>();
115+
110116
@lombok.Data
111117
public static class Cache {
112118

spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/web/UiController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ public static class Settings {
128128

129129
private final boolean rememberMeEnabled;
130130

131+
private final List<String> availableLanguages;
132+
131133
private final List<String> routes;
132134

133135
private final List<ExternalView> externalViews;

spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/AbstractAdminUiApplicationTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,20 @@ public void should_return_correct_content_type_for_css_extensions() {
119119
//@formatter:on
120120
}
121121

122+
@Test
123+
public void should_contain_only_one_language() {
124+
//@formatter:off
125+
this.webClient.get()
126+
.uri("/sba-settings.js")
127+
.accept(MediaType.ALL)
128+
.exchange()
129+
.expectStatus().isOk()
130+
.expectHeader().contentTypeCompatibleWith("application/javascript")
131+
.expectBody(String.class)
132+
.value((body) -> assertThat(body).contains("\"availableLanguages\":[\"de\"]"));
133+
//@formatter:on
134+
}
135+
122136
protected WebTestClient createWebClient(int port) {
123137
return WebTestClient.bindToServer().baseUrl("http://localhost:" + port).build();
124138
}

spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/AdminUiReactiveApplicationTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ public class AdminUiReactiveApplicationTest extends AbstractAdminUiApplicationTe
3737
public void setUp() {
3838
this.instance = new SpringApplicationBuilder().sources(TestAdminApplication.class)
3939
.web(WebApplicationType.REACTIVE).run("--server.port=0",
40-
"--spring.boot.admin.ui.extension-resource-locations=classpath:/META-INF/test-extensions/");
40+
"--spring.boot.admin.ui.extension-resource-locations=classpath:/META-INF/test-extensions/",
41+
"--spring.boot.admin.ui.available-languages=de");
4142

4243
super.setUp(this.instance.getEnvironment().getProperty("local.server.port", Integer.class, 0));
4344
}

spring-boot-admin-server-ui/src/test/java/de/codecentric/boot/admin/server/ui/AdminUiServletApplicationTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ public class AdminUiServletApplicationTest extends AbstractAdminUiApplicationTes
3737
public void setUp() {
3838
this.instance = new SpringApplicationBuilder().sources(TestAdminApplication.class)
3939
.web(WebApplicationType.SERVLET).run("--server.port=0",
40-
"--spring.boot.admin.ui.extension-resource-locations=classpath:/META-INF/test-extensions/");
40+
"--spring.boot.admin.ui.extension-resource-locations=classpath:/META-INF/test-extensions/",
41+
"--spring.boot.admin.ui.available-languages=de");
4142

4243
super.setUp(this.instance.getEnvironment().getProperty("local.server.port", Integer.class, 0));
4344
}

0 commit comments

Comments
 (0)