Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions frontend/check-locales.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const allLocales = [
["tr", "tr-TR"],
["hu", "hu-HU"],
["no", "no-NO"],
["fa", "fa-IR"],
];

const ignoreUnused = [/^.*$/];
Expand Down
21 changes: 19 additions & 2 deletions frontend/src/locale/IntlProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import langZh from "./lang/zh.json";
import langTr from "./lang/tr.json";
import langHu from "./lang/hu.json";
import langNo from "./lang/no.json";
import langFa from "./lang/fa.json";
import langList from "./lang/lang-list.json";

// first item of each array should be the language code,
Expand Down Expand Up @@ -49,6 +50,7 @@ const localeOptions = [
["tr", "tr-TR", langTr],
["hu", "hu-HU", langHu],
["no", "no-NO", langNo],
["fa", "fa-IR", langFa],
];

const loadMessages = (locale?: string): typeof langList & typeof langEn => {
Expand All @@ -73,6 +75,7 @@ const getFlagCodeForLocale = (locale?: string) => {
ko: "kr", // Korea
cs: "cz", // Czechia
ga: "ie", // Ireland (Irish)
fa: "ir", // Iran (Persian)
};

if (specialCases[thisLocale]) {
Expand All @@ -96,16 +99,30 @@ const getLocale = (short = false) => {
return loc;
};

// Locales that are written right-to-left
const rtlLocales = ["fa"];

const isRTLLocale = (locale?: string): boolean => rtlLocales.includes((locale || "en").slice(0, 2));

// Apply the language and text direction to the root <html> element.
// Called on initial load (so direction survives a reload) and when switching locale.
const applyDocumentLocale = (locale: string): void => {
document.documentElement.lang = locale;
document.documentElement.dir = isRTLLocale(locale) ? "rtl" : "ltr";
};

const cache = createIntlCache();

const initialMessages = loadMessages(getLocale());
let intl = createIntl({ locale: getLocale(), messages: initialMessages }, cache);

applyDocumentLocale(getLocale());

const changeLocale = (locale: string): void => {
const messages = loadMessages(locale);
intl = createIntl({ locale, messages }, cache);
window.localStorage.setItem("locale", locale);
document.documentElement.lang = locale;
applyDocumentLocale(locale);
};

// This is a translation component that wraps the translation in a span with a data
Expand Down Expand Up @@ -141,4 +158,4 @@ const T = ({

//console.log("L:", localeOptions);

export { localeOptions, getFlagCodeForLocale, getLocale, createIntl, changeLocale, intl, T };
export { localeOptions, getFlagCodeForLocale, getLocale, isRTLLocale, createIntl, changeLocale, intl, T };
7 changes: 7 additions & 0 deletions frontend/src/locale/src/HelpDoc/fa/AccessLists.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
## فهرست دسترسی چیست؟

فهرست‌های دسترسی، یک فهرست سیاه (Blacklist) یا فهرست سفید (Whitelist) از آدرس‌های IP مشخصِ کلاینت‌ها را به‌همراه احراز هویت برای میزبان‌های پراکسی از طریق احراز هویت پایه HTTP فراهم می‌کنند.

می‌توانید چندین قانونِ کلاینت، نام کاربری و رمز عبور را برای یک فهرست دسترسی پیکربندی کرده و سپس آن را روی یک یا چند _میزبان پراکسی_ اعمال کنید.

این قابلیت بیشتر برای سرویس‌های وبِ فوروارد‌شده‌ای کاربرد دارد که مکانیزم احراز هویت داخلی ندارند، یا زمانی که می‌خواهید از دسترسی کلاینت‌های ناشناس جلوگیری کنید.
32 changes: 32 additions & 0 deletions frontend/src/locale/src/HelpDoc/fa/Certificates.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
## راهنمای گواهی‌ها

### گواهی HTTP

یک گواهیِ اعتبارسنجی‌شده با HTTP به این معناست که سرورهای Let's Encrypt
تلاش می‌کنند از طریق HTTP (نه HTTPS!) به دامنه‌های شما دسترسی پیدا کنند و در صورت موفقیت،
گواهی شما را صادر می‌کنند.

برای این روش، باید یک _میزبان پراکسی_ برای دامنه‌های خود ایجاد کرده باشید که
از طریق HTTP در دسترس بوده و به این نصبِ Nginx اشاره کند. پس از صدور گواهی،
می‌توانید _میزبان پراکسی_ را طوری تغییر دهید که از این گواهی برای اتصالات HTTPS نیز
استفاده کند. با این حال، _میزبان پراکسی_ همچنان باید برای دسترسی HTTP پیکربندی شده باشد
تا گواهی بتواند تمدید شود.

این فرایند از دامنه‌های Wildcard پشتیبانی _نمی‌کند_.

### گواهی DNS

یک گواهیِ اعتبارسنجی‌شده با DNS مستلزم استفاده از یک افزونه ارائه‌دهنده DNS است. این
ارائه‌دهنده DNS برای ایجاد رکوردهای موقت روی دامنه شما استفاده می‌شود و سپس Let's
Encrypt آن رکوردها را پرس‌وجو می‌کند تا مطمئن شود مالک دامنه هستید و در صورت موفقیت،
گواهی شما را صادر می‌کند.

برای درخواست این نوع گواهی، نیازی نیست از پیش یک _میزبان پراکسی_ ایجاد کرده باشید.
همچنین لازم نیست _میزبان پراکسی_ شما برای دسترسی HTTP پیکربندی شده باشد.

این فرایند از دامنه‌های Wildcard پشتیبانی _می‌کند_.

### گواهی سفارشی

از این گزینه برای بارگذاری گواهی SSL خودتان استفاده کنید، گواهی‌ای که توسط
مرجع صدور گواهی (CA) خودتان ارائه شده است.
10 changes: 10 additions & 0 deletions frontend/src/locale/src/HelpDoc/fa/DeadHosts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
## میزبان 404 چیست؟

یک میزبان 404 صرفاً تنظیمات میزبانی است که یک صفحه 404 را نمایش می‌دهد.

این قابلیت زمانی مفید است که دامنه شما در موتورهای جستجو فهرست شده و می‌خواهید
یک صفحه خطای بهتر ارائه دهید، یا به‌طور مشخص به ایندکس‌کننده‌های موتور جستجو اعلام کنید
که صفحات این دامنه دیگر وجود ندارند.

مزیت دیگرِ داشتن این میزبان، امکان دنبال کردن گزارش‌های بازدید از آن و
مشاهده ارجاع‌دهنده‌ها (Referrers) است.
7 changes: 7 additions & 0 deletions frontend/src/locale/src/HelpDoc/fa/ProxyHosts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
## میزبان پراکسی چیست؟

میزبان پراکسی، نقطه ورودیِ یک سرویس وب است که می‌خواهید آن را فوروارد کنید.

این قابلیت، خاتمه‌دهیِ اختیاری SSL را برای سرویسی فراهم می‌کند که ممکن است پشتیبانی داخلی از SSL نداشته باشد.

میزبان‌های پراکسی رایج‌ترین کاربرد Nginx Proxy Manager هستند.
7 changes: 7 additions & 0 deletions frontend/src/locale/src/HelpDoc/fa/RedirectionHosts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
## میزبان تغییر مسیر چیست؟

یک میزبان تغییر مسیر، درخواست‌ها را از دامنه ورودی به دامنه‌ای دیگر هدایت کرده
و بازدیدکننده را به آن دامنه می‌فرستد.

رایج‌ترین دلیل برای استفاده از این نوع میزبان، زمانی است که وب‌سایت شما دامنه‌اش را تغییر می‌دهد
اما همچنان لینک‌هایی از موتورهای جستجو یا ارجاع‌دهنده‌ها به دامنه قدیمی اشاره می‌کنند.
6 changes: 6 additions & 0 deletions frontend/src/locale/src/HelpDoc/fa/Streams.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## استریم چیست؟

استریم که قابلیتی نسبتاً جدید در Nginx است، برای فوروارد کردن مستقیم ترافیک
TCP/UDP به رایانه‌ای دیگر در شبکه به کار می‌رود.

اگر سرورهای بازی، FTP یا SSH اجرا می‌کنید، این قابلیت می‌تواند کاربردی باشد.
6 changes: 6 additions & 0 deletions frontend/src/locale/src/HelpDoc/fa/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export * as AccessLists from "./AccessLists.md";
export * as Certificates from "./Certificates.md";
export * as DeadHosts from "./DeadHosts.md";
export * as ProxyHosts from "./ProxyHosts.md";
export * as RedirectionHosts from "./RedirectionHosts.md";
export * as Streams from "./Streams.md";
3 changes: 2 additions & 1 deletion frontend/src/locale/src/HelpDoc/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ import * as vi from "./vi/index";
import * as zh from "./zh/index";
import * as tr from "./tr/index";
import * as hu from "./hu/index";
import * as fa from "./fa/index";

const items: any = { en, de, pt, es, et, ja, sk, cs, zh, pl, ru, it, vi, nl, bg, ko, ga, id, fr, tr, hu };
const items: any = { en, de, pt, es, et, ja, sk, cs, zh, pl, ru, it, vi, nl, bg, ko, ga, id, fr, tr, hu, fa };


const fallbackLang = "en";
Expand Down
Loading