stop enabling english (#5874)

This commit is contained in:
Anthony Stirling
2026-03-06 10:09:51 +00:00
committed by GitHub
parent 7d640e9ce6
commit 7c1eb4183b
5 changed files with 15 additions and 12 deletions

View File

@@ -42,9 +42,10 @@ public class LanguageService {
languageCode -> {
Set<String> allowedLanguages =
new HashSet<>(applicationProperties.getUi().getLanguages());
// Empty list means all languages are allowed (no filtering)
// Non-empty list acts as a strict whitelist
return allowedLanguages.isEmpty()
|| allowedLanguages.contains(languageCode)
|| "en_GB".equals(languageCode);
|| allowedLanguages.contains(languageCode);
})
.collect(Collectors.toSet());

View File

@@ -240,7 +240,7 @@ system:
ui:
appNameNavbar: "" # name displayed on the navigation bar
logoStyle: classic # Options: 'classic' (default - classic S icon) or 'modern' (minimalist logo)
languages: [] # If empty, all languages are enabled. To display only German and Polish ["de_DE", "pl_PL"]. British English is always enabled.
languages: [] # If empty, all languages are enabled. To restrict to specific languages, use a whitelist like ["de_DE", "pl_PL", "sv_SE"]. Empty list or not restricting any languages will enable all available languages.
defaultHideUnavailableTools: false # Default user preference: hide disabled tools instead of greying them out
defaultHideUnavailableConversions: false # Default user preference: hide disabled conversion options instead of greying them out
hideDisabledTools:

View File

@@ -93,7 +93,7 @@ class LanguageServiceBasicTest {
// Configure the test service
((LanguageServiceForTest) languageService).setMockResources(mockResources);
// Allow only specific languages (en_GB is always included)
// Allow only specific languages - strict whitelist
when(applicationProperties.getUi().getLanguages())
.thenReturn(Arrays.asList("en_US", "fr_FR"));
@@ -103,7 +103,7 @@ class LanguageServiceBasicTest {
// Verify filtering by restrictions
assertTrue(supportedLanguages.contains("en_US"), "Allowed language should be included");
assertTrue(supportedLanguages.contains("fr_FR"), "Allowed language should be included");
assertTrue(supportedLanguages.contains("en_GB"), "en_GB should always be included");
assertFalse(supportedLanguages.contains("en_GB"), "en_GB should NOT be included when not in whitelist");
assertFalse(supportedLanguages.contains("de_DE"), "Restricted language should be excluded");
}

View File

@@ -69,15 +69,15 @@ class LanguageServiceTest {
// Setup
Set<String> expectedLanguages =
new HashSet<>(Arrays.asList("en_US", "fr_FR", "de_DE", "en_GB"));
Set<String> allowedLanguages = new HashSet<>(Arrays.asList("en_US", "fr_FR", "en_GB"));
Set<String> allowedLanguages = new HashSet<>(Arrays.asList("en_US", "fr_FR"));
// Mock the resource resolver response
Resource[] mockResources = createMockResources(expectedLanguages);
((LanguageServiceForTest) languageService).setMockResources(mockResources);
// Set language restrictions in properties
// Set language restrictions in properties - strict whitelist only
when(applicationProperties.getUi().getLanguages())
.thenReturn(Arrays.asList("en_US", "fr_FR")); // en_GB is always allowed
.thenReturn(Arrays.asList("en_US", "fr_FR"));
// Test
Set<String> supportedLanguages = languageService.getSupportedLanguages();
@@ -86,8 +86,9 @@ class LanguageServiceTest {
assertEquals(
allowedLanguages,
supportedLanguages,
"Should return only allowed languages, plus en_GB which is always allowed");
assertTrue(supportedLanguages.contains("en_GB"), "en_GB should always be included");
"Should return only whitelisted languages");
assertFalse(supportedLanguages.contains("en_GB"), "en_GB should NOT be included when not in whitelist");
assertFalse(supportedLanguages.contains("de_DE"), "de_DE should NOT be included when not in whitelist");
}
@Test

View File

@@ -240,10 +240,11 @@ export function updateSupportedLanguages(configLanguages?: string[] | null, defa
i18n.options.supportedLngs = validLanguages;
i18n.options.fallbackLng = fallback;
// If current language is not in the new supported list, switch to fallback
// If current language is not in the new supported list, switch to fallback with higher priority to override browser detection
const currentLang = normalizeLanguageCode(i18n.language || '');
if (currentLang && !validLanguages.includes(currentLang)) {
setLanguageWithPriority(fallback, LanguageSource.Fallback);
// Use ServerDefault priority to override browser detection when language not in whitelist
setLanguageWithPriority(fallback, LanguageSource.ServerDefault);
} else if (validDefault) {
// Apply server default (respects user choice if already set)
setLanguageWithPriority(validDefault, LanguageSource.ServerDefault);