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
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ const allLocales = [
["no", "no-NO"],
["uk", "uk-UA"],
["az", "az-AZ"],
["fa", "fa-IR"],
];

const ignoreUnused = [/^.*$/];
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import EasyModal from "ez-modal-react";
import { RawIntlProvider } from "react-intl";
import { ToastContainer } from "react-toastify";
import { AuthProvider, LocaleProvider, ThemeProvider } from "src/context";
import { intl } from "src/locale";
import { getLocale, intl, isRTLLocale } from "src/locale";
import Router from "src/Router.tsx";

// Create a client
Expand All @@ -26,7 +26,7 @@ function App() {
hideProgressBar={true}
newestOnTop={true}
closeOnClick={true}
rtl={false}
rtl={isRTLLocale(getLocale())}
closeButton={false}
/>
</AuthProvider>
Expand Down
17 changes: 15 additions & 2 deletions frontend/src/locale/IntlProvider.tsx
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import langHu from "./lang/hu.json";
import langNo from "./lang/no.json";
import langUk from "./lang/uk.json";
import langAz from "./lang/az.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 @@ -53,6 +54,7 @@ const localeOptions = [
["no", "no-NO", langNo],
["uk", "uk-UA", langUk],
["az", "az-AZ", langAz],
["fa", "fa-IR", langFa],
];

const loadMessages = (locale?: string): typeof langList & typeof langEn => {
Expand All @@ -79,6 +81,7 @@ const getFlagCodeForLocale = (locale?: string) => {
ga: "ie", // Ireland (Irish)
et: "ee", // Estonia (ISO 3166-1). "et" as a country code would be Ethiopia.
uk: "ua", // Ukraine
fa: "ir", // Iran (Persian)
};

if (specialCases[thisLocale]) {
Expand All @@ -87,6 +90,15 @@ const getFlagCodeForLocale = (locale?: string) => {
return thisLocale.toUpperCase();
};

const rtlLocales = ["fa"];

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

const applyDocumentLocale = (locale: string): void => {
document.documentElement.lang = locale;
document.documentElement.dir = isRTLLocale(locale) ? "rtl" : "ltr";
};

const getLocale = (short = false) => {
let loc = window.localStorage.getItem("locale");
if (!loc) {
Expand All @@ -105,13 +117,14 @@ const getLocale = (short = false) => {
const cache = createIntlCache();

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

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 @@ -147,4 +160,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 @@
## فهرست دسترسی چیست؟

فهرست دسترسی (Access List) به شما اجازه می‌دهد دسترسی آدرس‌های IP مشخص را مجاز یا مسدود کنید و در صورت نیاز با استفاده از Basic HTTP Authentication از Proxy Hostها با نام کاربری و رمز عبور محافظت کنید.

در هر فهرست دسترسی می‌توانید چندین قانون برای کلاینت‌ها و چندین نام کاربری و رمز عبور تعریف کنید و سپس همان فهرست را به یک یا چند _میزبان پراکسی (Proxy Host)_ اختصاص دهید.

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

### گواهی HTTP

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

برای این روش باید از قبل یک _میزبان پراکسی (Proxy Host)_ برای دامنهٔ موردنظر ایجاد کرده باشید که از طریق HTTP در دسترس باشد و به همین نصب Nginx Proxy Manager اشاره کند. پس از صدور گواهی می‌توانید Proxy Host را طوری تنظیم کنید که برای اتصال‌های HTTPS نیز از آن استفاده کند. با این حال، برای تمدید خودکار گواهی، دسترسی HTTP باید همچنان برقرار بماند.

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

### گواهی DNS

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

برای درخواست این نوع گواهی لازم نیست از قبل Proxy Host ساخته باشید و Proxy Host نیز نیازی به دسترسی HTTP ندارد.

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

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

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

میزبان 404 (404 Host) میزبانی است که برای درخواست‌های ورودی یک صفحهٔ 404 نمایش می‌دهد.

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

همچنین می‌توانید لاگ درخواست‌های ورودی به این Host و آدرس‌های ارجاع‌دهنده (Referrer) را بررسی کنید.
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 @@
## میزبان پراکسی چیست؟

میزبان پراکسی (Proxy Host) نقطهٔ ورودی برای یک سرویس وب است که می‌خواهید درخواست‌ها را به آن فوروارد کنید.

Proxy Host می‌تواند SSL/TLS Termination را نیز انجام دهد؛ بنابراین حتی اگر سرویس مقصد خودش SSL نداشته باشد، می‌توانید دسترسی HTTPS را در Nginx Proxy Manager فراهم کنید.

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

میزبان تغییر مسیر (Redirection Host) درخواست‌های دامنهٔ ورودی را به دامنهٔ دیگری Redirect می‌کند.

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

Stream در Nginx برای فوروارد کردن مستقیم ترافیک TCP/UDP به یک میزبان دیگر در شبکه استفاده می‌شود.

این قابلیت برای سرویس‌هایی مانند سرورهای بازی، FTP، SSH و سایر سرویس‌های مبتنی بر TCP یا UDP کاربرد دارد.
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 @@ -21,8 +21,9 @@ import * as tr from "./tr/index";
import * as hu from "./hu/index";
import * as uk from "./uk/index";
import * as az from "./az/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, uk, az };
const items: any = { en, de, pt, es, et, ja, sk, cs, zh, pl, ru, it, vi, nl, bg, ko, ga, id, fr, tr, hu, uk, az, fa };

const fallbackLang = "en";

Expand Down
Loading