Merge branch 'dev' into mrjvs-progress-github-links

This commit is contained in:
mrjvs 2021-08-23 00:08:10 +02:00 committed by GitHub
commit cdcd91bfbe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 759 additions and 35 deletions

139
locales/ES_es.json Normal file
View File

@ -0,0 +1,139 @@
{
"nav": {
"about": "Acerca de",
"faq": "FAQ",
"credits": "Créditos",
"progress": "Progreso"
},
"hero": {
"subtitle": "Servidores en línea",
"title": "Recreados",
"text": "Pretendo es un reemplazo gratuito y de código abierto de los servidores de Nintendo para 3DS y Wii U que permite la comunicación en línea incluso después del cierre de los servidores oficiales.",
"buttons": {
"readMore": "Leer más"
}
},
"aboutUs": {
"title": "Sobre nosotros",
"paragraphs": [
"Pretendo es un proyecto de código abierto que busca recrear Nintendo Network para 3DS y Wii U aplicando ingeniería inversa con un diseño en sala limpia.",
"Como nuestros servicios serán gratuitos y de código abierto, podrán existir tras el inevitable cierre de Nintendo Network."
]
},
"progress": {
"title": "Progreso",
"paragraphs": [
"Actualmente, estamos trabajando en Miiverse, junto con los servidores de cuentas y la integración con los servicios.",
"En 3DS también trabajamos en el soporte de Mario Kart 7, con el deseo de continuar trabajando en otros juegos en cuanto sea posible."
]
},
"faq": {
"title": "Frequently Asked Questions",
"text": "Aquí se muestran algunas cuestiones comunes.",
"QAs": [
{
"question": "¿Qué es Pretendo?",
"answer": "Pretendo es un reemplazo gratuito y de código abierto de Nintendo Network que nace con el objetivo de crear servidores en línea personalizados para las consolas Wii U y 3DS. Nuestra meta es preservar las funcionalidades en línea de esas consolas, permitiendo a los jugadores seguir jugando sus juegos favoritos de Wii U y 3DS en su plena capacidad."
},
{
"question": "¿Mi NNID actual funciona en Pretendo?",
"answer": "Tristemente, no. Los NNID no funcionan en Pretendo, ya que solo Nintendo almacena tus datos de usuario. Aunque una migración NNID-a-PNID es teóricamente posible, sería arriesgado y requiere datos de usuario sensibles que preferimos no almacenar."
},
{
"question": "¿Cómo uso Pretendo?",
"answer": "Pretendo no está actualmente en un estado adecuado para el uso público. Sin embargo, en cuanto esté listo podrás usar Pretendo simplemente cargando nuestro parcheador homebrew en tu consola."
},
{
"question": "¿Sabéis cuándo <determinada función/servicio> estará listo/a?",
"answer": "No. Muchos/as funciones/servicios de Pretendo son desarrolladas independientemente (por ejemplo, un desarrollador puede estar trabajando en Miiverse mientras otro se encarga de las Cuentas y los Amigos) y, por lo tanto, no podemos dar una ETA exacta de cuánto puede tardar en estar listo."
},
{
"question": "¿Pretendo funciona en Cemu/emuladores?",
"answer": "Pretendo está diseñado con el hardware de Wii U y 3DS en mente. Hasta ahora, el único emulador para esas consolas con soporte de NN es Cemu. Cemu no soporta oficialmente servidores personalizados, pero debería ser posible en un futuro llegar a usar Pretendo con Cemu.<br>A día de hoy, Pretendo no soporta Cemu."
},
{
"question": "Si estoy baneado en Nintendo Network, ¿seguiré baneado al usar Pretendo?",
"answer": "No tenemos acceso a los baneos de Nintendo Network motivo por el nadie estará baneado en nuestros servidores al principio. Sin embargo, tendremos reglas a seguir al acceder a nuestros servicios y no hacerlo resultará en un baneo."
},
{
"question": "¿Pretendo soportará Wii/Switch?",
"answer": "La Wii ya tiene servidores en línea personalizados de parte de <a href=\"https://wiimmfi.de/\" target=\"_blank\">Wiimmfi</a>. No tenemos planeado trabajar con Switch ya que sus servidores son de pago y completamente diferentes a los de Nintendo Network."
},
{
"question": "¿Necesitaré modificar mi consola para conectarme?",
"answer": "Sí, necesitas modificar tu consola para conectarte. Sin embargo, en Wii U solo necesitas acceso al Homebrew Launcher (p.e. Haxchi, Coldboot Haxchi, o el exploit web). La información sobre como conectarse con una 3DS llegará posteriormente."
}
]
},
"credits": {
"title": "Equipo",
"text": "Conoce al equipo tras el proyecto",
"people": [
{
"name": "Jonathan Barrow (jonbarrow)",
"caption": "Líder del proyecto y desarrollador principal",
"picture": "https://github.com/jonbarrow.png",
"github": "https://github.com/jonbarrow"
},
{
"name": "Jemma (CaramelKat)",
"caption": "Estudio y desarrollo de Miiverse",
"picture": "https://github.com/caramelkat.png",
"github": "https://github.com/CaramelKat"
},
{
"name": "superwhiskers",
"caption": "Desarrollo de librerías crunch",
"picture": "https://github.com/superwhiskers.png",
"github": "https://github.com/superwhiskers"
},
{
"name": "SuperMarioDaBom",
"caption": "Estudio de consolas y otros sistemas",
"picture": "https://github.com/supermariodabom.png",
"github": "https://github.com/SuperMarioDaBom"
},
{
"name": "Rambo6Glaz",
"caption": "Instalador de la red y estudio de consolas",
"picture": "https://github.com/Rambo6Glaz.png",
"github": "https://github.com/NexoDevelopment"
},
{
"name": "mrjvs",
"caption": "Desarrollo web y temprano estudio de eShop",
"picture": "https://github.com/mrjvs.png",
"github": "https://github.com/mrjvs"
},
{
"name": "Benjamin Moss (kxpler442b)",
"caption": "Desarrollo web",
"picture": "https://github.com/kxpler442b.png",
"github": "https://github.com/kxpler442b"
},
{
"name": "Jip Fr",
"caption": "Desarrollo web",
"picture": "https://github.com/jipfr.png",
"github": "https://github.com/jipfr"
},
{
"name": "Shutterbug2000",
"caption": "Estudio de Mario Kart 7 y 3DS",
"picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128",
"github": "https://github.com/shutterbug2000"
},
{
"name": "Kinnay",
"special": "Agradecimientos",
"caption": "Estudio de las estructuras de datos de Nintendo",
"picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128",
"github": "https://github.com/Kinnay"
}
]
},
"progressPage": {
"title": "Progreso",
"description": "¡Comprueba el progreso y las metas pendientes! (Se actualiza cada hora, así que no refleja TODAS nuestras metas o el progreso total)"
}
}

View File

@ -70,10 +70,10 @@
"text": "Incontra il team dietro al progetto",
"people": [
{
"name": "Jonathan Barrow (RedDucks)",
"name": "Jonathan Barrow (jonbarrow)",
"caption": "Proprietario del progetto e sviluppatore principale",
"picture": "https://github.com/redduckss.png",
"github": "https://github.com/RedDuckss"
"picture": "https://github.com/jonbarrow.png",
"github": "https://github.com/jonbarrow"
},
{
"name": "Jemma (CaramelKat)",

139
locales/RU_ru.json Normal file
View File

@ -0,0 +1,139 @@
{
"nav": {
"about": "О нас",
"faq": "ЧЗВ",
"credits": "Титры",
"progress": "Прогресс"
},
"hero": {
"subtitle": "Игровые сервера",
"title": "Воссозданы",
"text": "Pretendo - это бесплатная замена серверов с открытым исходным кодом от серверов Nintendo для 3DS и Wii U, обеспечивающая подключение к Интернету для всех, даже после того, как исходные сервера перестанут поддерживаться",
"buttons": {
"readMore": "Читать дальше"
}
},
"aboutUs": {
"title": "О нас",
"paragraphs": [
"Pretendo - это проект с открытым исходным кодом, целью которого является воссоздание Nintendo Network для 3DS и Wii U с использованием обратного проектирования чистой комнаты",
"Поскольку наши услуги будут бесплатными и с открытым исходным кодом, они могут существовать еще долго после неизбежного закрытия Nintendo Network"
]
},
"progress": {
"title": "Прогресс",
"paragraphs": [
"В настоящее время мы работаем над Miiverse, а также над серверами наших учетных записей и их интеграцией с сервисами",
"Что касается 3DS, мы также работаем над Mario Kart 7 с желанием продолжить работу над другими играми, когда это возможно"
]
},
"faq": {
"title": "Часто задаваемые вопросы",
"text": "Вот несколько общих вопросов, которые нам задают, чтобы получить лёгкую информацию.",
"QAs": [
{
"question": "Что такое Pretendo?",
"answer": "Pretendo - это замена Nintendo Network с открытым исходным кодом, цель которой - создание собственных серверов для консолей Wii U и 3DS. Наша цель - сохранить онлайн-функциональность этих консолей, чтобы игроки могли продолжать играть в свои любимые игры. Игры Wii U и 3DS на полную мощность"
},
{
"question": "Будут ли мои существующие NNID работать на Pretendo?",
"answer": "К сожалению, нет. Существующие NNID не будут работать на Pretendo, так как только Nintendo хранит ваши пользовательские данные; хотя переход с NNID на PNID теоретически возможен, это было бы рискованно и потребовало бы конфиденциальных данных пользователя, которых мы не желаем. держать."
},
{
"question": "Как использовать Pretendo?",
"answer": "Pretendo в настоящее время не находится в состоянии, готовом к общедоступному использованию. Однако, как только это произойдет, вы сможете использовать Pretendo, просто запустив нашу прошивку на вашей консоли."
},
{
"question": "Вы знаете, когда будет готова <функция / услуга>?",
"answer": "Нет. Многие функции / услуги Pretendo разрабатываются независимо (например, над Miiverse может работать один разработчик, а над учетными записями и друзьями - другой), поэтому мы не можем дать общее точное время выхода, как долго это займет."
},
{
"question": "Работает ли Pretendo на Cemu / эмуляторах?",
"answer": "Pretendo по сути своей разработана для оборудования Wii U и 3DS; в настоящее время единственным эмулятором для этих консолей с поддержкой NN является Cemu. Cemu официально не поддерживает настраиваемые серверы, но все же можно использовать Pretendo. с Cemu. <br> Pretendo в настоящее время не поддерживает Cemu."
},
{
"question": "Если меня забанят в Nintendo Network, я останусь заблокированным при использовании Pretendo?",
"answer": "У нас не будет доступа к запретам Nintendo Network, и все пользователи не будут заблокированы на нашем сервисе. Однако у нас будут правила, которым нужно следовать при использовании сервиса, и их несоблюдение может привести к бану."
},
{
"question": "Будет ли Pretendo поддерживать Wii / Switch?",
"answer": "У Wii уже есть настраиваемые серверы, предоставленные <a href=\"https://wiimmfi.de/\" target=\"_blank\">Wiimmfi</a>. В настоящее время мы не хотим ориентироваться на Switch, поскольку он одновременно платный и полностью отличается от Nintendo Network"
},
{
"question": "Нужны ли мне хаки для подключения?",
"answer": "Да, вам нужно будет взломать свое устройство для подключения; однако на Wii U вам понадобится только доступ к Homebrew Launcher (например, Haxchi, Coldboot Haxchi или даже эксплойту веб-браузера) с информацией о том, как 3DS подключится позже"
}
]
},
"credits": {
"title": "Команда",
"text": "Познакомьтесь с командой, стоящей за проектом",
"people": [
{
"name": "Jonathan Barrow (jonbarrow)",
"caption": "Владелец проекта и ведущий разработчик",
"picture": "https://github.com/jonbarrow.png",
"github": "https://github.com/jonbarrow"
},
{
"name": "Jemma (CaramelKat)",
"caption": "Исследования и разработки Miiverse",
"picture": "https://github.com/caramelkat.png",
"github": "https://github.com/CaramelKat"
},
{
"name": "superwhiskers",
"caption": "разработка библиотеки сжатия текстур",
"picture": "https://github.com/superwhiskers.png",
"github": "https://github.com/superwhiskers"
},
{
"name": "SuperMarioDaBom",
"caption": "Консольные и другие системные исследования",
"picture": "https://github.com/supermariodabom.png",
"github": "https://github.com/SuperMarioDaBom"
},
{
"name": "Rambo6Glaz",
"caption": "Сетевой установщик и исследование консоли",
"picture": "https://github.com/Rambo6Glaz.png",
"github": "https://github.com/Rambo6Glaz"
},
{
"name": "mrjvs",
"caption": "Веб-разработка и ранние исследования интернет-магазина eshop",
"picture": "https://github.com/mrjvs.png",
"github": "https://github.com/mrjvs"
},
{
"name": "Benjamin Moss (kxpler442b)",
"caption": "Веб-разработка",
"picture": "https://github.com/kxpler442b.png",
"github": "https://github.com/kxpler442b"
},
{
"name": "Jip Fr",
"caption": "Веб-разработка",
"picture": "https://github.com/jipfr.png",
"github": "https://github.com/jipfr"
},
{
"name": "Shutterbug2000",
"caption": "Исследование Mario Kart 7 и 3DS",
"picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128",
"github": "https://github.com/shutterbug2000"
},
{
"name": "Kinnay",
"special": "Особая благодарность",
"caption": "Исследование структур данных Nintendo",
"picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128",
"github": "https://github.com/Kinnay"
}
]
},
"progressPage": {
"title": "Наш прогресс",
"description": "Проверяйте прогресс и цели проекта! (Обновляется каждый час или около того, не отражает ВСЕ цели или прогресс проекта)"
}
}

139
locales/TR_tr.json Normal file
View File

@ -0,0 +1,139 @@
{
"nav": {
"about": "Hakkımızda",
"faq": "SSS",
"credits": "Katkıda Bulunanlar",
"progress": "İlerleme"
},
"hero": {
"subtitle": "Oyun sunucuları",
"title": "Yenilendi",
"text": "Pretendo, Nintendo'nun Wii U ve 3DS konsollarının sunucuları yerine kullanılabilmesi için tasarlanmış, asıl sunucular kapatılmış olmasına rağmen çevrimiçi bağlantıya olanak sağlayan ücretsiz açık kaynaklı bir yazılımdır.",
"buttons": {
"readMore": "Daha fazlasını oku"
}
},
"aboutUs": {
"title": "Hakkımızda",
"paragraphs": [
"Pretendo, Wii U ve 3DS için yapılmış Nintendo Network'ü temiz oda tekniğini kullanarak yeniden oluşturmayı hedefleyen açık kaynaklı bir projedir.",
"Hem ücretsiz hem de açık kaynaklı olan hizmetlerimiz, Nintendo Network'ün kaçınılmaz kapanışından sonra uzun bir süre çalışabilecektir."
]
},
"progress": {
"title": "İlerleme",
"paragraphs": [
"Şu anda, hesap sunucularımız ve hizmetlerle entegrason ile birlikte Miiverse üzerinde çalışıyoruz.",
"3DS için ise, mümkün olduğu vakit diğer oyunlar üzerinde çalışmaya devam etme arzusuyla Mario Kart 7 üzerinde çalışıyoruz."
]
},
"faq": {
"title": "Sıkça Sorulan Sorular",
"text": "Bize sorulan bazı genel sorular ve cevapları:",
"QAs": [
{
"question": "Pretendo nedir?",
"answer": "Pretendo, Wii U ve 3DS konsolları için özel sunucu oluşturmayı amaç edinen Nintendo Network replasmanıdır. Hedefimiz, oyuncuların favori Wii U ve 3DS oyunlarını tam kapasitede oynayabilmeleri için konsolların çevrimiçi işlevlerini temin etmektir."
},
{
"question": "Varolan Nintendo Network Kimliklerim Pretendo'da çalışacak mı?",
"answer": "Ne yazık ki, hayır. Varolan Nintendo Kimlikleri, kullanıcı verilerinize sadece Nintendo sahip olduğundan, Pretendo'da çalışmaz. Tabi, Nintendo Network'ten Prentendo Network'e kimlik intikali teorik olarak mümkündür. Ancak bu işlemin risk ihtimali bulunmakta; ve işlem için sahip olmak istemediğimiz hassas kullanıcı verileri gerekmektedir."
},
{
"question": "Pretendo'yu nasıl kullanırım?",
"answer": "Pretendo, şuanlık topluluk kullanımı için uygun bir vaziyette değil. Bununla birlikte, hazır olduğunda Pretendo'yu sadece konsolunuzdaki Homebrew Yamamızı çalıştırarak kullanabileceksiniz."
},
{
"question": "<Özel aksam/Hizmet> işlevinin ne zaman hazır olacağını biliyor musunuz?",
"answer": "Maalesef. Pek çok Pretendo aksamı/hizmeti bağımsız olarak geliştirilmekte (örneğin, Miiverse üzerinde bir geliştirici çalışırken, Hesaplar ve Arkadaşlar üzerinde başka bir geliştirici çalışmaktadır). Bu yüzden, bu işin ne kadar süreceği hakkında herhangi bir tahmin yapamıyoruz."
},
{
"question": "Pretendo Cemu/emülatörlerde çalışır mı??",
"answer": "Pretendo tasarımında, Wii U ve 3DS donanımını esas alır. Konsollara Nintendo Network desteği sağlayan tek emülatör de Cemu'dur. Cemu resmî olarak özel suncuları desteklemiyor ancak yine de Pretendo'yu Cemu üzerinden kullanabilmek mümkün olmalı.<br>Pretendo şu anlık Cemu'yu desteklemiyor."
},
{
"question": "Nintendo Network'ten banlandıysam, Pretendo'da da banlı kalır mıyım?",
"answer": "Nintendo Network'ün banlarına erişemediğimizden dolayı herhangi bir kullanıcı banlı olmayacak. Ancak, hizmetimiz kullanılırken uyulması gereken kurallar olacak ve uyulmadığı takdirde banlanmalar meydana gelebilecektir."
},
{
"question": "Pretendo Wii/Switch'i destekleyecek mi?",
"answer": "Wii'nin hâlihazırda <a href=\"https://wiimmfi.de/\" target=\"_blank\">Wiimmfi</a> tarafından sağlanan özel sunucuları bulunmaktadır. Switch için ise, hem sunucular çalıştığından hem de sistemi Nintendo Network'ten tamamen farklı olduğundan dolayı, şimdilik üzerine uğraşmayı düşünmüyoruz."
},
{
"question": "Bağlanmak için hacke ihtiyacım var mı?",
"answer": "Evet, cihazınızı hacklemeniz gerekmektedir. Ancak, Wii U'nuzda sadece Homebrew Launcher'a erişebilmeniz gerekmektedir (yani Haxchi, Coldboot Haxchi veya web tarayıcı exploiti gerekmektedir). 3DS'in nasıl bağlanacağı ile ilgili bilgilendirme ileriki tarihlerde verilecektir."
}
]
},
"credits": {
"title": "Ekip",
"text": "Projenin arkasındaki ekiple tanışın",
"people": [
{
"name": "Jonathan Barrow (jonbarrow)",
"caption": "Proje sahibi ve rehber geliştirici",
"picture": "https://github.com/jonbarrow.png",
"github": "https://github.com/jonbarrow"
},
{
"name": "Jemma (CaramelKat)",
"caption": "Miiverse üzerine araştırma ve geliştirme",
"picture": "https://github.com/caramelkat.png",
"github": "https://github.com/CaramelKat"
},
{
"name": "superwhiskers",
"caption": "Sıkıştırılmış kütüphane geliştirme",
"picture": "https://github.com/superwhiskers.png",
"github": "https://github.com/superwhiskers"
},
{
"name": "SuperMarioDaBom",
"caption": "Konsol ve diğer sistem üzerine araştırma",
"picture": "https://github.com/supermariodabom.png",
"github": "https://github.com/SuperMarioDaBom"
},
{
"name": "Rambo6Glaz",
"caption": "Ağ yükleyicisi ve konsol üzerine araştırma",
"picture": "https://github.com/Rambo6Glaz.png",
"github": "https://github.com/Rambo6Glaz"
},
{
"name": "mrjvs",
"caption": "Web sayfası geliştirme ve başlarda eShop üzerine araştırma",
"picture": "https://github.com/mrjvs.png",
"github": "https://github.com/mrjvs"
},
{
"name": "Benjamin Moss (kxpler442b)",
"caption": "Web sayfası geliştirme",
"picture": "https://github.com/kxpler442b.png",
"github": "https://github.com/kxpler442b"
},
{
"name": "Jip Fr",
"caption": "Web sayfası geliştirme",
"picture": "https://github.com/jipfr.png",
"github": "https://github.com/jipfr"
},
{
"name": "Shutterbug2000",
"caption": "Mario Kart 7 ve 3DS üzerine araştırma",
"picture": "https://cdn.discordapp.com/avatars/191370953807233024/0311b61e2009c1576828dd2e9a59d72e.png?size=128",
"github": "https://github.com/shutterbug2000"
},
{
"name": "Kinnay",
"special": "Özel teşekkür",
"caption": "Nintendo'nun veri yapıları üzerine araştırma",
"picture": "https://cdn.discordapp.com/avatars/186572995848830987/b55c0d4e7bfd792edf0689f83a25d8ea.png?size=128",
"github": "https://github.com/Kinnay"
}
]
},
"progressPage": {
"title": "İlerlememiz",
"description": "Proje ilerlemesini ve hedeflerini kontrol edin! (Her saat başı güncellenir. TÜM proje hedeflerini veya ilerlemesini yansıtmaz)"
}
}

View File

@ -70,10 +70,10 @@
"text": "Meet the team behind the project",
"people": [
{
"name": "Jonathan Barrow (RedDucks)",
"name": "Jonathan Barrow (jonbarrow)",
"caption": "Project owner and lead developer",
"picture": "https://github.com/redduckss.png",
"github": "https://github.com/RedDuckss"
"picture": "https://github.com/jonbarrow.png",
"github": "https://github.com/jonbarrow"
},
{
"name": "Jemma (CaramelKat)",

72
package-lock.json generated
View File

@ -9,8 +9,10 @@
"license": "ISC",
"dependencies": {
"colors": "^1.4.0",
"cookie-parser": "^1.4.5",
"express": "^4.17.1",
"express-handlebars": "^4.0.4",
"express-locale": "^2.0.0",
"fs-extra": "^9.1.0",
"ioredis": "^4.26.0",
"morgan": "^1.10.0",
@ -155,6 +157,18 @@
"node": ">= 0.6"
}
},
"node_modules/cookie-parser": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz",
"integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==",
"dependencies": {
"cookie": "0.4.0",
"cookie-signature": "1.0.6"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
@ -286,6 +300,11 @@
"node": ">=0.10"
}
},
"node_modules/express-locale": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/express-locale/-/express-locale-2.0.0.tgz",
"integrity": "sha512-SUwsgOTV8lplAkgyfKSwKH3ZVSKUrAa+b48acPGXpwWX211WZ/BYWX2WcZO57+xLOqPYb6rSNpWCFnhGrt0moA=="
},
"node_modules/finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
@ -365,9 +384,9 @@
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
},
"node_modules/handlebars": {
"version": "4.7.6",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
"integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==",
"version": "4.7.7",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
"integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
"dependencies": {
"minimist": "^1.2.5",
"neo-async": "^2.6.0",
@ -819,11 +838,6 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/sax": {
"version": "0.5.8",
"resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
"integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE="
},
"node_modules/send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
@ -991,6 +1005,11 @@
"xmlbuilder": ">=0.4.2"
}
},
"node_modules/xml2js/node_modules/sax": {
"version": "0.5.8",
"resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
"integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE="
},
"node_modules/xmlbuilder": {
"version": "15.1.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
@ -1002,7 +1021,10 @@
"node_modules/yaml": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-0.2.3.tgz",
"integrity": "sha1-tUUOkudu82td0k42YAkeuu7z5cc="
"integrity": "sha1-tUUOkudu82td0k42YAkeuu7z5cc=",
"engines": {
"node": "*"
}
}
},
"dependencies": {
@ -1113,6 +1135,15 @@
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
},
"cookie-parser": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz",
"integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==",
"requires": {
"cookie": "0.4.0",
"cookie-signature": "1.0.6"
}
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
@ -1223,6 +1254,11 @@
"promise": "^8.1.0"
}
},
"express-locale": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/express-locale/-/express-locale-2.0.0.tgz",
"integrity": "sha512-SUwsgOTV8lplAkgyfKSwKH3ZVSKUrAa+b48acPGXpwWX211WZ/BYWX2WcZO57+xLOqPYb6rSNpWCFnhGrt0moA=="
},
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
@ -1287,9 +1323,9 @@
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
},
"handlebars": {
"version": "4.7.6",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
"integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==",
"version": "4.7.7",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
"integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
"requires": {
"minimist": "^1.2.5",
"neo-async": "^2.6.0",
@ -1629,11 +1665,6 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sax": {
"version": "0.5.8",
"resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
"integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE="
},
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
@ -1762,6 +1793,13 @@
"requires": {
"sax": "0.5.x",
"xmlbuilder": ">=0.4.2"
},
"dependencies": {
"sax": {
"version": "0.5.8",
"resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
"integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE="
}
}
},
"xmlbuilder": {

View File

@ -18,8 +18,10 @@
"homepage": "https://github.com/PretendoNetwork/website#readme",
"dependencies": {
"colors": "^1.4.0",
"cookie-parser": "^1.4.5",
"express": "^4.17.1",
"express-handlebars": "^4.0.4",
"express-locale": "^2.0.0",
"fs-extra": "^9.1.0",
"ioredis": "^4.26.0",
"morgan": "^1.10.0",

View File

@ -0,0 +1,106 @@
.select-box {
display: flex;
width: 200px;
flex-direction: column;
position: relative;
user-select: none;
}
.select-box > * {
box-sizing: border-box;
}
.select-box .options-container {
max-height: 0;
width: calc(100% - 12px);
opacity: 0;
transition: all 0.4s;
overflow: hidden;
border-radius: 5px;
background-color: var(--btn-secondary);
order: 1;
position: absolute;
top: 50px;
}
.selected-locale {
margin-bottom: 8px;
position: relative;
width: 188px;
height: 45px;
border-radius: 5px;
display: flex;
align-items: center;
background-color: var(--btn-secondary);
color: white;
order: 0;
}
.selected-locale::after {
content: "";
width: 1.2rem;
height: 1.2rem;
background: url("/assets/icons/down-arrow.svg");
position: absolute;
right: 15px;
top: 50%;
transition: transform 150ms;
transform: translateY(-50%);
background-size: contain;
background-position: center;
}
.select-box .option .item {
color: #afb5dd;
}
.select-box .lang {
width: 1.3rem;
height: 1rem;
margin-right: .2rem;
display: inline-block;
}
.select-box .options-container.active {
max-height: 240px;
opacity: 1;
overflow-y: auto;
}
.select-box .options-container.active + .selected-locale::after {
transform: translateY(-50%) rotateX(180deg);
}
.select-box .options-container::-webkit-scrollbar {
width: 8px;
background: #0d141f;
background: #81878f;
background: #f1f2f3;
border-radius: 0 5px 5px 0;
}
.select-box .options-container::-webkit-scrollbar-thumb {
background: #525861;
background: #81878f;
border-radius: 0 5px 5px 0;
}
.select-box .option,
.selected-locale {
padding: 12px 15px;
cursor: pointer;
}
.select-box .option:hover {
background: #2f345b;
}
.select-box .option:hover .item {
color: white;
}
.select-box label {
cursor: pointer;
}
.select-box .option .radio {
display: none;
}

View File

@ -4,6 +4,7 @@
--text: white;
--text-secondary: #A1A8D9;
--btn: #673DB6;
--btn-secondary: #333960;
--theme: var(--btn);
--text-secondary-2: #8990C1;
}
@ -80,6 +81,10 @@ header nav a {
text-decoration: none;
}
.locale-dropdown {
margin-left: auto;
z-index: 2;
}
/* Misc */
.purple-circle {
@ -114,7 +119,7 @@ header nav a {
left: 50%;
transform: translate(-50%, -50%);
margin-left: -40px;
z-index: 3;
z-index: 1;
}
.light-purple-circle .deco {
position: absolute;
@ -124,6 +129,15 @@ header nav a {
z-index: -2;
}
/* Twemoji */
img.emoji {
height: 1em;
width: 1em;
margin: 0 .05em 0 .1em;
vertical-align: -0.1em;
}
/* Title business */
.sect .title[id] {
padding-top: 100px;
@ -217,7 +231,7 @@ header nav a {
background: var(--btn);
}
.button.secondary {
background: #333960;
background: var(--btn-secondary);
}
.button.secondary.discord svg {
margin-bottom: -1px;
@ -554,6 +568,11 @@ footer {
display: none;
}
.locale-dropdown {
/* You don't really need this either on mobile IMHO */
display: none;
}
.hero-meta {
margin-top: 100px;
}

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-down"><polyline points="6 9 12 15 18 9"></polyline></svg>

After

Width:  |  Height:  |  Size: 261 B

View File

@ -0,0 +1,56 @@
function setDefaultDropdownLocale(localeString) {
const selected = document.querySelector(".selected-locale");
selected.innerHTML = document.querySelector(`label[for=${localeString}`).innerHTML
}
function localeDropdownHandler(selectedLocale) {
document.cookie = `preferredLocale=${selectedLocale};max-age=31536000`;
window.location.reload();
}
const dropdowns = document.querySelectorAll("*[data-dropdown]");
const dropdownOptions = document.querySelectorAll(
"*[data-dropdown] .options-container"
);
dropdowns.forEach((el) => {
const selected = el.querySelector(".selected-locale");
const optionsContainer = el.querySelector(".options-container");
const optionsList = el.querySelectorAll(".option");
// click dropdown element will open dropdown
selected.addEventListener("click", () => {
optionsContainer.classList.toggle("active");
});
// clicking on any option will close dropdown and change value
optionsList.forEach((option) => {
option.addEventListener("click", () => {
selected.innerHTML = option.querySelector("label").innerHTML;
optionsContainer.classList.remove("active");
const selectedLocale = option.querySelector("label").getAttribute("for");
localeDropdownHandler(selectedLocale);
});
});
});
// close all dropdowns on scroll
document.addEventListener("scroll", () => {
dropdownOptions.forEach((el) => el.classList.remove("active"));
});
// click outside of dropdown will close all dropdowns
document.addEventListener("click", (e) => {
const targetElement = e.target;
// check if target is from a dropdown
let found = false;
dropdowns.forEach((v) => {
if (v == targetElement || v.contains(targetElement)) found = true;
});
if (found) return;
// click outside of dropdowns
dropdownOptions.forEach((el) => el.classList.remove("active"));
});

View File

@ -6,14 +6,18 @@ const router = new Router();
const { getTrelloCache } = require('../trello');
router.get('/', async (request, response) => {
const tmpLocale = util.getLocale('US', 'en');
const reqLocale = request.locale
const locale = util.getLocale(reqLocale.region, reqLocale.language);
const cache = await getTrelloCache();
response.render('home', {
layout: 'main',
locale: tmpLocale,
featuredFeatureList: cache.sections[0],
boards,
locale,
localeString: reqLocale.toString(),
});
});

View File

@ -6,14 +6,20 @@ const router = new Router();
const { getTrelloCache } = require('../trello');
router.get('/', async (request, response) => {
const tmpLocale = util.getLocale('US', 'en');
const reqLocale = request.locale
const locale = util.getLocale(reqLocale.region, reqLocale.language);
const localeString = reqLocale.toString()
const cache = await getTrelloCache();
response.render('progress', {
layout: 'main',
locale: tmpLocale,
progressLists: cache,
boards,
locale,
localeString,
progressLists: cache
});
});

View File

@ -3,6 +3,8 @@ process.title = 'Pretendo - Website';
const express = require('express');
const handlebars = require('express-handlebars');
const morgan = require('morgan');
const expressLocale = require('express-locale');
const cookieParser = require('cookie-parser')
const logger = require('./logger');
const util = require('./util');
const config = require('../config.json');
@ -23,6 +25,28 @@ const routers = {
progress: require('./routers/progress')
};
app.use(cookieParser())
// Locale express middleware setup
app.use(expressLocale({
"priority": ["cookie", "accept-language", "map", "default"],
cookie: {name: 'preferredLocale'},
// fallbacks for browsers that don't send a region code, but only a language
map: {
de: 'de-DE',
es: 'es-ES',
fr: 'fr-FR',
it: 'it-IT',
ko: 'ko-KR',
ru: 'ru-RU',
tr: 'tr-TR'
},
"default": "en-US"
}))
app.use('/', routers.home);
app.use('/faq', routers.faq);
app.use('/progress', routers.progress);

View File

@ -1,4 +1,4 @@
const Trello = require('trello');
const Trello =require("trello")
const Redis = require('ioredis');
const JSONCache = require('redis-json');
const config = require('../config.json');

View File

@ -15,7 +15,7 @@
<meta name="theme-color" content="#673db6">
<!-- open graph/embeds -->
<meta property="og:title" content="Pretendo Network">
<meta property="og:escription" content="Pretendo is a as close as possible recreation of the original Nintendo Network for 3ds and Wiiu. It is an replacement for if the original servers shut down.">
<meta property="og:description" content="Pretendo is an open source Nintendo Network replacement that aims to build custom servers for the WiiU and 3DS family of consoles. Our goal is to preserve the online functionality of these consoles, to allow players to continue to play their favorite WiiU and 3DS games to their fullest capacity.">
<meta property="og:type" content="website">
<meta property="og:url" content="http://pretendo.network/">
<meta property="og:image" content="http://pretendo.network/assets/og_image.png">
@ -27,12 +27,19 @@
<!-- favicon -->
<link rel="shortcut icon" href="/assets/icons/favicon.ico"><title>Pretendo</title>
<!-- css files -->
<link rel="stylesheet" href="/assets/css/dropdown.css" />
<link rel="stylesheet" href="/assets/css/main.css">
<!-- favicon -->
<link rel="shortcut icon" href="/assets/icons/favicon.ico">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap" rel="stylesheet">
<!-- Twemoji setup -->
<script src="https://twemoji.maxcdn.com/v/latest/twemoji.min.js" crossorigin="anonymous"></script>
<script>
window.onload = function() {
twemoji.parse(document.body, {folder: 'svg', ext: '.svg'});
}
</script>
</head>
<body>
<div class="main-body">
@ -40,5 +47,8 @@
</div>
<script src="https://cdn.jsdelivr.net/npm/chart.js@3.5.1/dist/chart.min.js"></script>
<script src="/assets/js/progress-charts.js"></script>
<script src="/assets/js/locale-dropdown-handler.js"></script>
<script>setDefaultDropdownLocale("{{localeString}}")</script>
</body>
</html>

View File

@ -1 +1 @@
<footer>Copyright 2020 - Design by mrjvs, development by Jip Fr</footer>
<footer>Copyright 2021 - Design by mrjvs, development by Jip Fr</footer>

View File

@ -30,4 +30,45 @@
<a href="/#credits">{{ locale.nav.credits }}</a>
<a href="/progress" class="keep-on-mobile">{{ locale.nav.progress }}</a>
</nav>
<div class="select-box locale-dropdown" data-dropdown>
<div class="options-container">
<div class="option">
<input type="radio" class="radio" id="en-US" name="category" />
<label for="en-US">
<div class="item"><span class="lang">🇺🇸</span>English</div>
</label>
</div>
<div class="option">
<input type="radio" class="radio" id="es-ES" name="category" />
<label for="es-ES">
<div class="item"><span class="lang">🇪🇸</span>Español</div>
</label>
</div>
<div class="option">
<input type="radio" class="radio" id="it-IT" name="category" />
<label for="it-IT">
<div class="item"><span class="lang">🇮🇹</span>Italiano</div>
</label>
</div>
<div class="option">
<input type="radio" class="radio" id="ru-RU" name="category" />
<label for="ru-RU">
<div class="item"><span class="lang">🇷🇺</span>Pусский</div>
</label>
</div>
<div class="option">
<input type="radio" class="radio" id="tr-TR" name="category" />
<label for="tr-TR">
<div class="item"><span class="lang">🇹🇷</span>Türkçe</div>
</label>
</div>
</div>
<div class="selected-locale">
<div class="item"><span class="lang"></span></div>
</div>
</div>
</header>