mirror of
https://github.com/10h30/astroplate.git
synced 2026-07-14 20:26:36 +09:00
66 lines
2.0 KiB
TypeScript
66 lines
2.0 KiB
TypeScript
import config from "@/config/config.json";
|
|
import languages from "@/config/language.json";
|
|
import React from "react";
|
|
|
|
const LanguageSwitcher = ({
|
|
lang,
|
|
pathname,
|
|
}: {
|
|
lang: string;
|
|
pathname: string;
|
|
}) => {
|
|
const { default_language, default_language_in_subdir } = config.settings;
|
|
|
|
// Function to remove trailing slash if necessary
|
|
const removeTrailingSlash = (path: string) => {
|
|
if (!config.site.trailing_slash) {
|
|
return path.replace(/\/$/, "");
|
|
}
|
|
return path;
|
|
};
|
|
|
|
// Sort languages by weight and filter out disabled languages
|
|
const sortedLanguages = languages
|
|
// @ts-ignore
|
|
.filter(language => !config.settings.disable_languages.includes(language.languageCode))
|
|
.sort((a, b) => a.weight - b.weight);
|
|
|
|
return (
|
|
<div className={`mr-5 ${sortedLanguages.length > 1 ? "block" : "hidden"}`}>
|
|
<select
|
|
className="border border-dark text-dark bg-transparent dark:border-darkmode-primary dark:text-white py-1 rounded-sm cursor-pointer focus:ring-0 focus:border-dark dark:focus:border-darkmode-primary"
|
|
onChange={(e) => {
|
|
const selectedLang = e.target.value;
|
|
let newPath;
|
|
const baseUrl = window.location.origin;
|
|
|
|
if (selectedLang === default_language) {
|
|
if (default_language_in_subdir) {
|
|
newPath = `${baseUrl}/${default_language}${removeTrailingSlash(pathname.replace(`/${lang}`, ""))}`;
|
|
} else {
|
|
newPath = `${baseUrl}${removeTrailingSlash(pathname.replace(`/${lang}`, ""))}`;
|
|
}
|
|
} else {
|
|
newPath = `/${selectedLang}${removeTrailingSlash(pathname.replace(`/${lang}`, ""))}`;
|
|
}
|
|
|
|
window.location.href = newPath;
|
|
}}
|
|
value={lang}
|
|
>
|
|
{sortedLanguages.map((language) => (
|
|
<option
|
|
className="dark:text-dark"
|
|
key={language.languageCode}
|
|
value={language.languageCode}
|
|
>
|
|
{language.languageName}
|
|
</option>
|
|
))}
|
|
</select>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default LanguageSwitcher;
|