structure + layout header sidebar

This commit is contained in:
hamid zarghami
2025-10-14 13:06:18 +03:30
commit 31967a2ecb
53 changed files with 6362 additions and 0 deletions
+18
View File
@@ -0,0 +1,18 @@
export const fa = {
sidebar: {
menu: "منو",
mainPage: "صفحه اصلی",
other: "سایر",
logout: "خروج",
myOrders: "سفارشات من",
preFactors: "پیش فاکتورها",
tickets: "تیکت ها",
announcement: "انتشارات",
criticisms: "انتقادات",
learning: "آموزش",
},
notif: {
natification: "اعلان‌ها",
all_read: "خواندن همه",
},
};
+39
View File
@@ -0,0 +1,39 @@
import { fa } from "./fa";
export type LocaleKey = "fa";
export interface TranslationsType {
[key: string]: string | TranslationsType;
}
const locales: Record<LocaleKey, TranslationsType> = { fa };
let currentLang: LocaleKey = "fa";
export const setLang = (lang: LocaleKey) => {
currentLang = lang;
};
export const getLang = (): LocaleKey => currentLang;
const cache = new Map<string, string>();
export const t = (key: string, fallback?: string): string => {
const cacheKey = `${currentLang}:${key}`;
if (cache.has(cacheKey)) return cache.get(cacheKey)!;
const keys = key.split(".");
let value: string | TranslationsType | undefined = locales[currentLang];
for (const k of keys) {
if (typeof value === "object" && value !== null) {
value = value[k];
} else {
value = undefined;
break;
}
}
const result = typeof value === "string" ? value : fallback || key;
cache.set(cacheKey, result);
return result;
};