Skip to content

Commit 1ddd349

Browse files
authored
Merge pull request #19 from alexankitty/i18n
Translation, CORS and more
2 parents 48d716d + 0138bb0 commit 1ddd349

32 files changed

+3589
-461
lines changed

config/i18n.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import i18n from 'i18n';
2+
import path from 'path';
3+
import { fileURLToPath } from 'url';
4+
import fs from 'fs';
5+
6+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
7+
const localesDir = path.join(__dirname, 'locales');
8+
9+
// Automatically detect available languages from locale files
10+
const getAvailableLocales = () => {
11+
try {
12+
return fs.readdirSync(localesDir)
13+
.filter(file => file.endsWith('.json'))
14+
.map(file => path.basename(file, '.json'));
15+
} catch (error) {
16+
console.error('Error reading locale directory:', error);
17+
return ['en']; // Fallback to English
18+
}
19+
};
20+
21+
const availableLocales = getAvailableLocales();
22+
console.log('Available locales:', availableLocales);
23+
24+
i18n.configure({
25+
locales: availableLocales,
26+
defaultLocale: 'en',
27+
directory: localesDir,
28+
objectNotation: true,
29+
updateFiles: false,
30+
syncFiles: false,
31+
cookie: 'lang',
32+
queryParameter: 'lang'
33+
});
34+
35+
// Export available locales for use in templates
36+
export const locales = availableLocales;
37+
export default i18n;

config/locales/ar.json

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
{
2+
"app": {
3+
"name": "Myrient Search",
4+
"description": "محرك بحث لـ Myrient - خدمة مقدمة من Erista مخصصة للحفاظ على ألعاب الفيديو.",
5+
"tagline": "يقدم Myrient مجموعات منظمة ومتاحة للجميع من ألعاب الفيديو، للحفاظ عليها من الضياع مع مرور الزمن.",
6+
"disclaimer": "غير مرتبط بـ Myrient/Erista!"
7+
},
8+
"nav": {
9+
"settings": "الإعدادات",
10+
"emulators": "المحاكيات",
11+
"about": "حول الموقع",
12+
"search": "بحث",
13+
"results": "النتائج"
14+
},
15+
"search": {
16+
"placeholder": "ابحث...",
17+
"button": "بحث",
18+
"lucky": "أشعر بالحظ",
19+
"found": "تم العثور على نتيجة {{count}}",
20+
"found_plural": "تم العثور على {{count}} نتيجة",
21+
"in_seconds": "في {{seconds}} ثانية",
22+
"indexing": "جارٍ الفهرسة، إذا كان هناك شيء مفقود في القائمة، يرجى المحاولة مرة أخرى بعد بضع دقائق",
23+
"non_game_filter": "تم تفعيل فلتر المحتوى غير اللعبي",
24+
"displaying_results": "عرض النتائج من {{start}} إلى {{end}}."
25+
},
26+
"about": {
27+
"title": "حول الموقع",
28+
"support": "إذا أعجبك هذا المشروع، يرجى التفكير في دعم Myrient:",
29+
"donate": "تبرع لـ Myrient",
30+
"emulator": {
31+
"title": "محاكي مدمج",
32+
"description": "يتضمن هذا الموقع محاكياً مدمجاً مشغلاً بواسطة EmulatorJS يجلب الألعاب التقليدية مباشرةً إلى متصفحك.",
33+
"compatibility": "الألعاب المتوافقة ستظهر بها زر تشغيل في صفحة نتائج البحث.",
34+
"browser_tip": "للحصول على أفضل تجربة ألعاب، استخدم متصفحاً يعتمد على Chromium مع تفعيل تسريع الأجهزة.",
35+
"save_states": "يتم تحميل الألعاب مباشرة من أرشيف Myrient العام. يتم تخزين حالات الحفظ محلياً في المتصفح.",
36+
"limitations": "تعديلات الـ ROM، والموسيقى التصويرية، والمحتويات الأخرى غير اللعبية غير مدعومة من المحاكي وقد تفشل في التحميل.",
37+
"disabled": "تم تعطيل وظيفة المحاكي على الويب من قبل المسؤول.",
38+
"contact": "تواصل مع المسؤول أو قم بإنشاء نسختك الخاصة من Myrient Search."
39+
},
40+
"credits": {
41+
"created_by": "تم إنشاء محرك البحث بواسطة",
42+
"view_github": "عرض المشروع على GitHub"
43+
}
44+
},
45+
"settings": {
46+
"title": "الإعدادات",
47+
"search_columns": {
48+
"title": "أعمدة البحث",
49+
"tooltip": "يحدد الأعمدة التي سيبحث فيها محرك البحث."
50+
},
51+
"score_multiplier": {
52+
"title": "مضاعف نقاط البحث",
53+
"tooltip": "يضاعف نقاط التطابق لكل كلمة تم العثور عليها بناءً على الفئة التي وجدت فيها."
54+
},
55+
"extras": {
56+
"title": "خيارات إضافية",
57+
"fuzzy": {
58+
"label": "البحث الضبابي",
59+
"tooltip": "قيمة بين 0.00 و 1.00 تحدد المسافة الضبابية (مسافة ليفنشتاين) لمدى قرب الكلمة لاعتبارها متطابقة. القيمة الأعلى تسمح بتطابقات أقل صرامة. قيمة 0 تعطلها."
60+
},
61+
"prefix": {
62+
"label": "السماح بالبادئات",
63+
"tooltip": "يسمح بتطابقات جزئية للكلمات في بداية الكلمة."
64+
},
65+
"match_all": {
66+
"label": "تطابق جميع الكلمات",
67+
"tooltip": "يتطلب تطابق جميع الكلمات في استعلام البحث."
68+
},
69+
"hide_non_game": {
70+
"label": "إخفاء المحتوى غير اللعبي",
71+
"tooltip": "يفلتر تعديلات الـ ROM، والتصحيحات، والرسومات، والمحتويات الأخرى غير اللعبية من نتائج البحث."
72+
}
73+
},
74+
"save": "حفظ الإعدادات"
75+
},
76+
"footer": {
77+
"queries": "عدد الاستعلامات:",
78+
"files": "الملفات المعروفة:",
79+
"terms": "عدد المصطلحات:",
80+
"last_crawl": "وقت آخر زحف:"
81+
},
82+
"emulator": {
83+
"loading": {
84+
"rom": "جارٍ تحميل الـ ROM...",
85+
"downloading": "جارٍ تنزيل الـ ROM",
86+
"downloading_progress": "التنزيل: {{percent}}%",
87+
"decompressing": "جارٍ فك ضغط اللعبة..."
88+
},
89+
"error": {
90+
"loading": "خطأ في تحميل اللعبة",
91+
"no_rom": "لم يتم العثور على ملف ROM في الأرشيف",
92+
"http_error": "خطأ HTTP! الحالة: {{status}}"
93+
},
94+
"warning": {
95+
"non_game": "تحذير: قد لا يكون هذا الملف ROM لعبة وقد لا يعمل بشكل صحيح في المحاكي عبر الويب.",
96+
"see_about": "راجع صفحة {{link}} لمزيد من المعلومات.",
97+
"no_data": "لا توجد بيانات محاكي متاحة.",
98+
"https": "اتصال HTTP غير آمن: تتطلب بعض المحاكيات HTTPS للعمل بشكل صحيح. هذا الموقع غير مُعد بشكل صحيح."
99+
},
100+
"console": {
101+
"about": "هذا محاكي عبر الإنترنت يقوم بتشغيل ملفات ROM للألعاب مباشرة من أرشيف Myrient العام.",
102+
"disclaimer": "لا توجد ملفات ROM للألعاب مستضافة على هذا الموقع. يتم تحميل جميع المحتويات مباشرة من خوادم Myrient.",
103+
"more_info": "لمزيد من المعلومات حول هذه الخدمة، يرجى زيارة صفحة حول الموقع."
104+
},
105+
"recommended": "المحاكيات الموصى بها",
106+
"download": "تنزيل",
107+
"play": "تشغيل",
108+
"not_available": "----",
109+
"disclaimer": "يقوم هذا المحاكي بتحميل الألعاب مباشرة من {{link}}. تعرف على المزيد في صفحة {{about}}."
110+
},
111+
"results": {
112+
"table": {
113+
"name": "الاسم",
114+
"group": "المجموعة",
115+
"category": "الفئة",
116+
"region": "المنطقة",
117+
"type": "النوع",
118+
"size": "الحجم",
119+
"date": "التاريخ",
120+
"score": "الصلة",
121+
"play": "تشغيل"
122+
}
123+
},
124+
"error": {
125+
"title": "خطأ",
126+
"message": "حدث خطأ ما",
127+
"details": "تفاصيل الخطأ: {{message}}",
128+
"back_home": "العودة إلى الصفحة الرئيسية",
129+
"go_back": "رجوع"
130+
},
131+
"languages": {
132+
"en": "English",
133+
"es": "Español",
134+
"pt": "Português",
135+
"zh": "中文",
136+
"ja": "日本語",
137+
"fr": "Français",
138+
"de": "Deutsch",
139+
"ko": "한국어",
140+
"pl": "Polski",
141+
"tr": "Türkçe",
142+
"it": "Italiano",
143+
"romaji": "Romaji",
144+
"hi": "हिन्दी",
145+
"ar": "العربية",
146+
"bn": "বাংলা",
147+
"ru": "Русский"
148+
}
149+
}

0 commit comments

Comments
 (0)