Skip to content

Commit d294b65

Browse files
authored
Merge pull request #33 from Ketbome/fix/language-fallback-and-german
Fix/language fallback and german
2 parents 09a524c + e1eff40 commit d294b65

8 files changed

Lines changed: 1034 additions & 10 deletions

File tree

config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "1.6.6",
2+
"version": "1.6.7",
33
"description": "Minecraft Docker Manager - Control panel for managing Minecraft servers via Docker",
44
"author": "ketbome",
55
"license": "MIT"

frontend/src/components/ui/language-switcher.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ export function LanguageSwitcher() {
2626
<DropdownMenuItem onClick={() => setLanguage("nl")} className={`flex items-center gap-2 px-3 py-2 rounded font-minecraft text-sm transition-colors ${language === "nl" ? "bg-emerald-700/80 text-white" : "hover:bg-emerald-800/60 hover:text-emerald-200 text-emerald-300"}`}>
2727
<span>🇳🇱</span> {t("dutch")}
2828
</DropdownMenuItem>
29+
<DropdownMenuItem onClick={() => setLanguage("de")} className={`flex items-center gap-2 px-3 py-2 rounded font-minecraft text-sm transition-colors ${language === "de" ? "bg-emerald-700/80 text-white" : "hover:bg-emerald-800/60 hover:text-emerald-200 text-emerald-300"}`}>
30+
<span>🇩🇪</span> {t("german")}
31+
</DropdownMenuItem>
2932
</DropdownMenuContent>
3033
</DropdownMenu>
3134
);

frontend/src/lib/hooks/useLanguage.tsx

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,14 @@ interface LanguageContextType {
1313
const LanguageContext = createContext<LanguageContextType | undefined>(undefined);
1414

1515
export function LanguageProvider({ children }: { children: ReactNode }) {
16-
const defaultLanguage = (env("NEXT_PUBLIC_DEFAULT_LANGUAGE") as Language) || "en";
16+
const envLang = env("NEXT_PUBLIC_DEFAULT_LANGUAGE");
17+
const isValidLang = envLang && envLang in translations;
18+
19+
if (envLang && !isValidLang) {
20+
console.warn(`[Minepanel] Language "${envLang}" is not available. Available: ${Object.keys(translations).join(", ")}. Falling back to "en".`);
21+
}
22+
23+
const defaultLanguage = isValidLang ? (envLang as Language) : "en";
1724
const [language, setLanguageState] = useState<Language>(defaultLanguage);
1825

1926
useEffect(() => {
@@ -29,15 +36,15 @@ export function LanguageProvider({ children }: { children: ReactNode }) {
2936
localStorage.setItem("language", lang);
3037
}, []);
3138

32-
const t = useCallback((key: TranslationKey): string => {
33-
return translations[language][key] || key;
34-
}, [language]);
35-
36-
const value = useMemo(
37-
() => ({ language, setLanguage, t }),
38-
[language, setLanguage, t]
39+
const t = useCallback(
40+
(key: TranslationKey): string => {
41+
return translations[language][key] || key;
42+
},
43+
[language]
3944
);
4045

46+
const value = useMemo(() => ({ language, setLanguage, t }), [language, setLanguage, t]);
47+
4148
return <LanguageContext.Provider value={value}>{children}</LanguageContext.Provider>;
4249
}
4350

0 commit comments

Comments
 (0)