diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index a323f1f1..00000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-# To get started with Dependabot version updates, you'll need to specify which
-# package ecosystems to update and where the package manifests are located.
-# Please see the documentation for all configuration options:
-# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
-
-version: 2
-updates:
- # Enable version updates for npm
- - package-ecosystem: "npm"
- # Look for `package.json` and `lock` files in the `root` directory
- directory: "/"
- # Check the npm registry for updates every day (weekdays)
- schedule:
- interval: "daily"
- - package-ecosystem: "github-actions"
- # Workflow files stored in the default location of `.github/workflows`
- # You don't need to specify `/.github/workflows` for `directory`. You can use `directory: "/"`.
- directory: "/"
- schedule:
- interval: "weekly"
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index d311ac02..1aca6866 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -17,7 +17,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
- node-version: "20"
+ node-version: "24"
- name: Install dependencies
run: npm ci
diff --git a/apps/juxtaposition-ui/package.json b/apps/juxtaposition-ui/package.json
index 620fea18..6df13b89 100644
--- a/apps/juxtaposition-ui/package.json
+++ b/apps/juxtaposition-ui/package.json
@@ -25,12 +25,10 @@
"connect-redis": "^9.0.0",
"cookie-parser": "^1.4.7",
"crc": "^4.3.2",
- "express": "^4.22.1",
- "express-async-errors": "^3.1.1",
+ "express": "^5.2.1",
"express-prom-bundle": "^7.0.2",
"express-rate-limit": "^8.2.1",
"express-session": "^1.19.0",
- "express-subdomain": "^1.0.6",
"hashmap": "^2.4.0",
"i18next": "^25.8.13",
"luxon": "^3.7.2",
@@ -67,7 +65,7 @@
"@types/hashmap": "^2.3.4",
"@types/luxon": "^3.7.1",
"@types/method-override": "^3.0.0",
- "@types/node": "^22.19.15",
+ "@types/node": "^24.12.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"browserslist": "^4.28.1",
@@ -82,4 +80,4 @@
"tsup": "^8.5.1",
"typescript": "^5.9.3"
}
-}
+}
\ No newline at end of file
diff --git a/apps/juxtaposition-ui/src/assets/locales/de.json b/apps/juxtaposition-ui/src/assets/locales/de.json
index 317b5b4f..05f26659 100644
--- a/apps/juxtaposition-ui/src/assets/locales/de.json
+++ b/apps/juxtaposition-ui/src/assets/locales/de.json
@@ -22,7 +22,9 @@
"updates": "Neuigkeiten",
"notifications_and_messages": "Benachrichtigungen und Nachrichten",
"search": "Suche...",
- "global_feed_short": "Global"
+ "global_feed_short": "Global",
+ "people_feed": "Nutzer-Feed",
+ "people_feed_short": "Folge ich"
},
"all_communities": {
"text": "Alle Communitys",
diff --git a/apps/juxtaposition-ui/src/assets/locales/es.json b/apps/juxtaposition-ui/src/assets/locales/es.json
index 1be0e3ae..2a5886eb 100644
--- a/apps/juxtaposition-ui/src/assets/locales/es.json
+++ b/apps/juxtaposition-ui/src/assets/locales/es.json
@@ -15,7 +15,16 @@
"close": "Cerrar",
"save": "Guardar",
"exit": "Salir",
- "next": "Siguiente"
+ "next": "Siguiente",
+ "friend_requests": "Solicitudes de amistad",
+ "search": "Buscar...",
+ "notifications_and_messages": "Notificaciones y Mensajes",
+ "updates": "Novedades",
+ "people_feed_short": "Usuarios",
+ "people_feed": "Actividad de usuarios",
+ "global_feed_short": "Global",
+ "global_feed": "Actividad global",
+ "my_feed": "Mi actividad"
},
"all_communities": {
"text": "Todas las comunidades",
@@ -27,7 +36,11 @@
"posts": "Publicaciones",
"tags": "Distintivos de uso",
"recent": "Recientes",
- "popular": "Populares"
+ "popular": "Populares",
+ "followers_count": "{{count}} seguidores",
+ "related": "Otras comunidades",
+ "related_to": "Otras comunidades de {{community}}",
+ "closed": "Esta comunidad está cerrada a nuevos mensajes."
},
"user_page": {
"country": "País",
@@ -38,23 +51,41 @@
"following": "Sigue a",
"followers": "Seguidores",
"follow_user": "Seguir",
- "following_user": "Sigue a"
+ "following_user": "Sigue a",
+ "friend_requests": "Solicitudes",
+ "game_experience_unknown": "Desconocido",
+ "settings": "Ajustes",
+ "deleted": "Usuario eliminado",
+ "banned": "Usuario restringido"
},
"user_settings": {
- "profile_settings": "Preferencias del perfil",
+ "profile_settings": "Ajustes del perfil",
"show_country": "Mostrar el país en el perfil",
"show_birthday": "Mostrar cumpleaños en el perfil",
- "show_game": "Mostrar tu nivel como jugador en el perfil"
+ "show_game": "Mostrar tu nivel como jugador en el perfil",
+ "save_action": "Guardar ajustes",
+ "gdpr_download": "Descargar información de usuario",
+ "gdpr_download_action": "Descargar"
},
"activity_feed": {
"empty": "No hay nada que ver. ¡Prueba a seguir a alguien!"
},
"notifications": {
- "none": "Sin notificaciones."
+ "none": "Sin notificaciones.",
+ "new_follower/one": "¡ te ha seguido!",
+ "new_follower/two": "¡ y te han seguido!",
+ "new_follower/three": "¡, , y {{count_other}} más te han seguido!",
+ "new_follower/multiple": "¡, , y otros {{count_other}} te han seguido!"
},
"new_post": {
- "post_to": "Publicar en {{user}}",
- "swearing": "No se puede incluir lenguaje inapropiado en las publicaciones."
+ "post_to": "Mensaje para \"{{user}}\"",
+ "swearing": "No se puede incluir lenguaje inapropiado en las publicaciones.",
+ "spoiler_label": "Revelaciones",
+ "painting_close": "Cancelar",
+ "screenshots_coming_soon": "La función de capturas no está lista. ¡Vuelve más tarde!",
+ "new_post_short": "Publicar",
+ "content_placeholder": "Toca aquí para escribir un mensaje.",
+ "painting_submit": "Aceptar"
},
"messages": {
"coming_soon": "No hay mensajes"
@@ -99,5 +130,63 @@
"ready_text": "Primero, revisa algunas comunidades y mira las publicaciones de personas de todo el mundo. Aprovecha esta oportunidad para familiarizarte con Juxt. ¡Podrías hacer nuevos descubrimientos en el camino!",
"done": "¡A disfrutar de Juxt!",
"done_button": "¡Vamos!"
+ },
+ "error": {
+ "message": "¡Vaya! Parece que no hemos podido encontrar lo que buscas.Comprueba el enlace o intenta de nuevo más tarde",
+ "title": "Código de error: {{code}}",
+ "heading": "Código de error: {{code}}: {{message}}",
+ "no_access": "No tienes permiso para acceder a esta aplicación ({{code}})",
+ "error_details": "ID de solicitud: {{id}}",
+ "message_web": "Mira el estado actual del servidor.O, vuelve a la página principal"
+ },
+ "post": {
+ "yeahs_count/one": "Le mola a persona.",
+ "yeahs_count/multiple": "A personas les mola.",
+ "reply_post": "Comentar",
+ "report_post": "Denunciar",
+ "title": "Mensaje de {{username}}",
+ "show_spoiler": "Ver revelación",
+ "removed": "El mensaje ha sido eliminado.",
+ "heading": "Publicar",
+ "delete_post": "Eliminar"
+ },
+ "login": {
+ "username": "Nombre de usuario",
+ "password": "Contraseña",
+ "forgot_password": "¿Has olvidado tu contraseña?",
+ "no_account": "¿No tienes una cuenta?",
+ "no_account_setup": "La creación de cuenta estará disponible cuando tengas vinculada una Wii U o una 3DS.",
+ "title": "Iniciar sesión en Juxtaposition",
+ "heading": "Registrarse en Juxtaposition",
+ "login_action": "Iniciar sesión",
+ "sub_title": "Introduce tus datos de acceso"
+ },
+ "reporting": {
+ "description": "Estás a punto de denunciar un mensaje que viola el Código de conducta de Juxtaposition. La denuncia será enviada a los adminstradores de Juxtaposition de Pretendo y no al creador del mensaje.",
+ "label": "Motivo:",
+ "additional_info_placeholder": "Introduce comentarios o información adicionales",
+ "reason_spoiler": "Revelación",
+ "reason_personal_info": "Información personal",
+ "reason_violence": "Contenido violento",
+ "reason_bullying": "Odio/Acoso",
+ "reason_advertising": "Publicidad",
+ "reason_piracy": "Piratería",
+ "reason_inappropiate_ingame": "Comportamiento inapropiado en el juego",
+ "reason_inappropiate": "Conducta inapropiada/Perjudicial",
+ "reason_nsfw": "Sexualmente explícito",
+ "reason_missing_images": "Imágenes faltantes",
+ "submit": "Enviar denuncia",
+ "title": "Denunciar mensaje",
+ "reason_one": "",
+ "reason_many": "",
+ "reason_other": ""
+ },
+ "friend_requests": {
+ "none": "No hay solicitudes de amistad"
+ },
+ "moderation": {
+ "moderate_user": "Moderar usuario",
+ "title": "Moderación",
+ "silently_delete_post": "Eliminar en silencio"
}
}
diff --git a/apps/juxtaposition-ui/src/assets/locales/he.json b/apps/juxtaposition-ui/src/assets/locales/he.json
index 4be53989..9d3b4db8 100644
--- a/apps/juxtaposition-ui/src/assets/locales/he.json
+++ b/apps/juxtaposition-ui/src/assets/locales/he.json
@@ -3,18 +3,27 @@
"user_page": "עמוד משתמש",
"communities": "קהילות",
"no_posts": "אין פוסטים",
- "activity_feed": "עדכון פעילות",
- "exit": "יְצִיאָה",
- "next": "הַבָּא",
+ "activity_feed": "פיד פעילויות",
+ "exit": "יציאה",
+ "next": "הבא",
"messages": "הודעות",
"notifications": "התראות",
- "go_back": "לַחֲזוֹר",
- "back": "בְּחֲזָרָה",
- "yeahs": "כן",
+ "go_back": "חזרה",
+ "back": "חזרה",
+ "yeahs": "",
"more": "טען עוד פוסטים",
- "private": "פְּרָטִי",
+ "private": "פרטי",
"close": "לִסְגוֹר",
- "save": "לְהַצִיל"
+ "save": "שמירה",
+ "my_feed": "הפיד שלי",
+ "global_feed": "פיד עולמי",
+ "global_feed_short": "עולמי",
+ "people_feed": "פיד אנשים",
+ "people_feed_short": "אנשים",
+ "friend_requests": "בקשות חברות",
+ "updates": "עדכונים",
+ "notifications_and_messages": "התראות והודעות",
+ "search": "חיפוש..."
},
"all_communities": {
"text": "כל הקהילות",
@@ -25,79 +34,162 @@
"posts": "פוסטים",
"recent": "פוסטים אחרונים",
"popular": "פוסטים פופולריים",
- "tags": "",
- "followers": ""
+ "tags": "תגיות",
+ "followers": "עוקבים",
+ "followers_count": "{{count}} עוקבים",
+ "related": "קהילות קשורות",
+ "related_to": "קהילות שקשורות ל{{community}}",
+ "closed": "הקהילה הזאת סגורה לפוסטים חדשים.",
+ "tags_not_applicable": "-"
},
"user_page": {
"birthday": "יוֹם הוּלֶדֶת",
"game_experience": "חווית משחק",
"posts": "פוסטים",
"friends": "חברים",
- "following": "עוקבים",
- "follow_user": "לַעֲקוֹב",
- "following_user": "עוקבים",
- "followers": "",
- "country": ""
+ "following": "במעקב",
+ "follow_user": "לעקוב",
+ "following_user": "במעקב",
+ "followers": "עוקבים",
+ "country": "מדינה",
+ "game_experience_unknown": "לא ידוע",
+ "settings": "הגדרות",
+ "friend_requests": "בקשות",
+ "deleted": "משתמש מחוק",
+ "banned": "משתמש חסום"
},
"user_settings": {
"profile_settings": "הגדרות פרופיל",
"show_birthday": "הצג יום הולדת בפרופיל",
- "show_game": "",
- "show_country": ""
+ "show_game": "הצגת ניסיון משחקים בפרופיל",
+ "show_country": "הצגת המדינה בפרופיל",
+ "save_action": "שמירת הגדרות",
+ "gdpr_download": "הורדת נתוני משתמש",
+ "gdpr_download_action": "הורדה"
},
"setup": {
"rules_text": {
- "eleventh": "",
- "tenth": "",
- "third": "",
- "thirteenth": "",
- "fifth": "",
- "ninth": "",
- "fourth": "",
- "second": "",
- "sixth": "",
- "first": "",
- "eighth": "",
- "seventh": "",
- "twelfth": ""
+ "eleventh": "המטרה שלנן היא לשמור על Juxt מקום כיף ומהנה לכולם. במקרה שמישהו.י מפר.ה את קוד הההתנהגות של Juxt, אנחנו ננקוט בצעדים מתאימים, עד כדי חסימת המשתמש.ת או הקונסולה הפוגעים.",
+ "tenth": "הפרות קוד ההתנהגות",
+ "third": "Juxt מכילה הרבה קהילות גיימינג בהן אנשים מכל העולם יכולים לשתף את המחשבות שלהם. כשאתם מפרסמים בקהילה, זכרו שכולם יכולים לראות את זה, אז בבקשה בטאו את עצמכם בדרך שכולם יכולים להנות ממנה. השתמשו בהגיון בריא, וחשבו לפני שאתם מפרסמים. Juxt הוא שירות שנגיש גם מהאינטרנט, אז זכרו שגם אנשים שלא משתמשים ב Juxt עשויים לראות את הפוסטים שלכם. בנוסף, תגובות שאתם משאירים על פוסטים של חברים יכולות להיראות לא רק על ידי החברים, אלא גם על ידי אנשים ברחבי העולם. אנא זכרו גם את זה.",
+ "thirteenth": "אם אתם מפרסמים בקהילה של משחק ששיחקתם, לפוסטים שלכם יהיה אייקון שמעיד שייחקתם בו.",
+ "fifth": "כדי ש-Juxt יישאר מקום כיף לכולם, אנחנן מבקשים שתתחשבו אחד בשני. עזרו לנו לשמור על Juxt כחוויה מהנה ואל תפרסמו שום דבר לא ראוי או פוגעני.",
+ "ninth": "יש אנשים שבאים ל Juxt בשביל טיפים וטריקים למשחקים, אבל יש גם כאלה שרוצים לגלות סודות במשחקים לגמרי לבד. פוסטים שחושפים מידע על הסודות או על העלילה של משחק נקראים \"ספוילרים\". אם אתם מפרסמים משהו על משחק שעשוי להיות ספוילר, סמנו וי בתיבת \"ספוילרים\" לפני שאתם שולחים את הפוסט. כך, אנשים שלא מעוניינים בספוילרים לא יראו את הפוסט שלכם.",
+ "fourth": "תהיו נחמדים אחד לשני",
+ "second": "אפשר לצפות בפוסטים מרחבי העולם",
+ "sixth": "אל תפרסמו מידע אישי — שלכם או של אחרים",
+ "first": "להלן קווים מנחים חשובים כדי ש Juxt תהיה חוויה כיפית ומהנה לכולם. קוד ההתנהלות של Juxt מכיל מידע מפורט, אז בבקשה קראו אותו בעיון רב.",
+ "eighth": "אל תפרסמו ספוילרים",
+ "seventh": "זכרו, להכיר מישהו ב Juxt זה לא אותו דבר כמו בחיים האמיתיים. אף פעם אל תשתפו ב Juxt את כתובת האימייל שלכם, כתובת המגורים שלכם, שם העבודה או בית הספר, או כל מידע אישי מזהה אחר, וגם אל תפרסמו מידע של אנשים אחרים. בנוסף, אם אדם שהכרתם ב Juxt מציע.ה לכם להיפגש בחיים האמיתיים, אל תסכימו. Juxt היא קהילה מקוונת ולא אמורה לשמש למפגשים בעולם האמיתי.",
+ "twelfth": "האם שיחקת במשחק הזה?"
},
"beta_text": {
"third": "",
- "second": "",
- "first": ""
+ "second": "זה יכול ועלול לכלול מחיקה כוללת של בסיס הנתונים בסיום או במהלך תקופת הבטא.",
+ "first": "ברוכים הבאים לבטא הציבורית של רשת Pretendo! למרות שהרבה השתנה מהבטא הציבורית הראשונה, Juxt עדיין עבודה בתהליך והרבה יכול להשתנות בכל זמן נתון."
},
"experience_text": {
- "expert": "",
- "info": "",
- "intermediate": "",
- "beginner": ""
+ "expert": "מומחה.ית",
+ "info": "אנא ספרו לנו איך הייתם מתארים את רמת הניסיון שלכם עם משחקים. אפשר לשנות את ההגדרה הזו מאוחר יותר.",
+ "intermediate": "בינוני.ת",
+ "beginner": "מתחיל.ה"
},
- "done_button": "",
- "ready": "",
- "experience": "",
- "analytics": "",
- "rules": "",
- "welcome_text": "",
- "analytics_text": "",
- "info": "",
- "info_text": "",
- "ready_text": "",
- "done": "",
- "beta": "",
- "welcome": ""
+ "done_button": "בואו נתחיל!",
+ "ready": "מוכנים להתחיל להשתמש ב Juxt",
+ "experience": "ניסיון משחקים",
+ "analytics": "אנליטיקות",
+ "rules": "חוקי Juxt",
+ "welcome_text": "Juxt היא קהילת גיימינג שמחברת אנשים מכל העולם בעזרת דמויות Mii. השתמשו ב-Juxt כדי לשתף את חוויות הגיימינג שלכם ולהכיר אנשים מרחבי העולם.",
+ "analytics_text": "Juxtaposition משתמש ב Cloudflare Web Analytics כדי לעקוב אחרי השימוש בשירןת שלנו. הנתונים שנאספים כוללים אך לא מוגבלים לשעת הביקור, דפים בהם ביקרתם, ומשך הזמן שביליתם באתר. נתונים אלה לא מוצמדים אליכם בשום אופן, ולא משומשים לפרסומות על ידינו או על ידי Cloudflare.",
+ "info": "מה זה Juxtaposition?",
+ "info_text": "Juxt היא קהילה מכוונת משתמשים שאפשר לתקשר בה עם אנשים\nברחבי העולם. אפשר לכתוב או לצייר פוסטים בקהילות משחקים או לשלוח הודעות ישירות לחברים שלכם.",
+ "ready_text": "קודם כל, תסתכלו על קהילות ותראו על מה אנשים מכל העולם מפרסמים. קחו את ההזדמנות להכיר את Juxt. אולי תגלו דברים חדשים לאורך הדרך!",
+ "done": "תהנו ב Juxt!",
+ "beta": "דיסקליימר בטא",
+ "welcome": "ברוכים הבאים ל-Juxtaposition!",
+ "title": "הכנת Juxtaposition"
},
"notifications": {
- "none": ""
+ "none": "אין התראות.",
+ "new_follower/one": " עקב אחריכם!",
+ "new_follower/two": ", עקבו אחריכם!",
+ "new_follower/three": ", ו-{{count_other}} נוסף עקבו אחריכם!",
+ "new_follower/multiple": ", ו-{{count_other}} נוספים עקבו אחריכם!"
},
"new_post": {
- "swearing": "",
- "post_to": ""
+ "swearing": "הפוסט לא יכול להכיל שפה בוטה.",
+ "post_to": "שליחה ל{{user}}",
+ "new_post_short": "שליחה",
+ "content_placeholder": "שתפו את המחשבות שלכם בפוסט לקהילה או לעוקבים שלכם.",
+ "screenshots_coming_soon": "צילומי מסך לא מוכנים עדיין. בדקו שוב בקרוב!",
+ "no_screenshot": "אין צילום מסך",
+ "spoiler_label": "ספוילר",
+ "painting_close": "ביטול",
+ "painting_submit": "אישור"
},
- "language": "",
+ "language": "עברית",
"activity_feed": {
- "empty": ""
+ "empty": "קצת ריק פה. נסו לעקוב אחרי מישהו!"
},
"messages": {
- "coming_soon": ""
+ "coming_soon": "אין הודעות"
+ },
+ "login": {
+ "title": "התחברות לJuxtaposition",
+ "heading": "כניסה לJuxtaposition",
+ "sub_title": "הכניסו את פרטי החשבון למטה",
+ "username": "שם משתמש",
+ "password": "סיסמה",
+ "forgot_password": "שכחתם סיסמה?",
+ "no_account": "אין לכם חשבון?",
+ "login_action": "כניסה",
+ "no_account_setup": "יצירת חשבון אפשרית רק כשיש לכם Wii U או 3DS מקושרים."
+ },
+ "error": {
+ "title": "שגיאה {{code}}",
+ "heading": "שגיאה {{code}}: {{message}}",
+ "message": "אופס! נראה שלא יכלנו למצוא את הדף שאתם מחפשים.בדקו שוב את הקישור או נסו שנית מאוחר יותר",
+ "no_access": "אתם לא מורשים לגשת ליישום הזה ({{code}})",
+ "message_web": "צפו בסטטוס השרת הנוכחי.או, חזרו לדף הבית",
+ "error_details": "מזהה בקשה: {{id}}"
+ },
+ "friend_requests": {
+ "none": "אין בקשות חברות"
+ },
+ "post": {
+ "title": "פוסט ע\"י {{username}}",
+ "yeahs_count/one": "אדם נתן לפוסט הזה Yeah.",
+ "yeahs_count/multiple": " אנשים נתנו לפוסט הזה Yeah.",
+ "show_spoiler": "הצג ספוילר",
+ "reply_post": "תגובה",
+ "report_post": "דיווח על פוסט",
+ "delete_post": "מחיקת פוסט",
+ "removed": "הפוסט הוסר.",
+ "copy_link": "העתקת קישור",
+ "heading": "פוסט"
+ },
+ "reporting": {
+ "title": "דווחו על פוסט",
+ "submit": "הגשת דיווח",
+ "description": "אתם עומדים לדווח על פוסט עם תוכן שמפר את קוד ההתנהגות של Juxtaposition. הדיווח הזה יישלח למנהלי Juxtaposition של Pretendo ולא ליוצר הפוסט.",
+ "label": "סיבה:",
+ "additional_info_placeholder": "הכניסו תגובות נוספות או מידע נוסף",
+ "reason_spoiler": "ספוילר",
+ "reason_personal_info": "מידע אישי",
+ "reason_violence": "תוכן אלים",
+ "reason_inappropiate": "התנהגות לא הולמת/פוגענית",
+ "reason_bullying": "שנאה/בריונות",
+ "reason_advertising": "פרסומת",
+ "reason_nsfw": "תוכן מיני",
+ "reason_piracy": "פיראטיות",
+ "reason_inappropiate_ingame": "התנהגות לא הולמת במשחק",
+ "reason_missing_images": "תמונות חסרות",
+ "reason_one": "אחר",
+ "reason_two": "אחרים",
+ "reason_other": "אחרים"
+ },
+ "moderation": {
+ "title": "ניהול",
+ "silently_delete_post": "מחיקה שקטה"
}
}
diff --git a/apps/juxtaposition-ui/src/assets/locales/hr.json b/apps/juxtaposition-ui/src/assets/locales/hr.json
index 36413125..7ab66d90 100644
--- a/apps/juxtaposition-ui/src/assets/locales/hr.json
+++ b/apps/juxtaposition-ui/src/assets/locales/hr.json
@@ -14,7 +14,16 @@
"user_page": "Korisnička stranica",
"communities": "Zajednice",
"messages": "Poruke",
- "notifications": "Obavijesti"
+ "notifications": "Obavijesti",
+ "my_feed": "Moj feed",
+ "global_feed": "Globalni feed",
+ "global_feed_short": "Globalni",
+ "people_feed": "Feed ljudi koje pratiš",
+ "people_feed_short": "Ljudi",
+ "friend_requests": "Zahtjevi za prijateljstvo",
+ "updates": "Novosti",
+ "notifications_and_messages": "Obavijesti i poruke",
+ "search": "Pretraga …"
},
"all_communities": {
"text": "Sve zajednice",
@@ -26,7 +35,12 @@
"posts": "Objave",
"recent": "Nedavne objave",
"popular": "Popularane objave",
- "followers": "Sljedbenici"
+ "followers": "Pratitelji",
+ "followers_count": "Broj pratitelja: {{count}}",
+ "tags_not_applicable": "--",
+ "related": "Povezane zajednice",
+ "related_to": "Povezane zajednice s {{community}}",
+ "closed": "Ova je zajednica zatvorena za nove objave."
},
"user_page": {
"country": "Zemlja",
@@ -37,20 +51,39 @@
"follow_user": "Prati",
"following": "Praćenje",
"following_user": "Praćenje",
- "followers": "Sljedbenici"
+ "followers": "Pratitelji",
+ "game_experience_unknown": "Nepoznato",
+ "settings": "Postavke",
+ "friend_requests": "Zahtjevi",
+ "deleted": "Izbrisani korisnik",
+ "banned": "Isključen korisnik"
},
"user_settings": {
"profile_settings": "Postavke profila",
"show_country": "Prikaži zemlju u profilu",
"show_birthday": "Prikaži rođendan u profilu",
- "show_game": "Prikaži iskustvo igranja u profilu"
+ "show_game": "Prikaži iskustvo igranja u profilu",
+ "save_action": "Spremi postavke",
+ "gdpr_download": "Preuzmi korisničke podatke",
+ "gdpr_download_action": "Preuzmi"
},
"notifications": {
- "none": "Nema obavijesti."
+ "none": "Nema obavijesti.",
+ "new_follower/one": " te je pratiol/la!",
+ "new_follower/two": ", su te pratili!",
+ "new_follower/three": ", i {{count_other}} druga pratitelja su te pratili!",
+ "new_follower/multiple": ", i {{count_other}} drugih pratitelja su te pratili!"
},
"new_post": {
"post_to": "Objava za {{user}}",
- "swearing": "Objava ne smije sadržavati prostačke izraze."
+ "swearing": "Objava ne smije sadržavati prostačke izraze.",
+ "new_post_short": "Objava",
+ "no_screenshot": "Bez snimke ekrana",
+ "painting_close": "Odustani",
+ "painting_submit": "U redu",
+ "content_placeholder": "Dijeli svoje misli u objavi sa zajednicom ili sa svojim pratiteljima.",
+ "screenshots_coming_soon": "Snimke ekrana još nisu spremne. Navrati kasnije!",
+ "spoiler_label": "Spoiler"
},
"messages": {
"coming_soon": "Nema poruka"
@@ -94,10 +127,70 @@
"ready_text": "Najprije pogledaj neke zajednice i vidi što ljudi iz cijelog svijeta objavljuju. Iskoristi ovu priliku da upoznaš Juxt. Možda ćeš otkriti nešto novo!",
"done": "Uživaj u Juxtu!",
"done_button": "Krenimo!",
- "rules": "Juxt pravila"
+ "rules": "Juxt pravila",
+ "title": "Postavljanje Juxtapositiona"
},
"language": "Hrvatski",
"activity_feed": {
"empty": "Ovdje je prazno. Pokušaj nekoga pratiti!"
+ },
+ "login": {
+ "title": "Juxtaposition prijava",
+ "heading": "Juxtaposition prijava",
+ "sub_title": "Dolje unesi podatke o svom računu",
+ "username": "Korisničko ime",
+ "password": "Lozinka",
+ "forgot_password": "Ne sjećaš se lozinke?",
+ "no_account": "Nemaš račun?",
+ "login_action": "Prijava",
+ "no_account_setup": "Izrada računa je dostupna samo kada ima vezu s Wii U ili 3DS."
+ },
+ "error": {
+ "title": "Greška {{code}}",
+ "heading": "Greška {{code}}: {{message}}",
+ "error_details": "ID zahtjeva: {{id}}",
+ "message": "Ups! Čini da nismo mogli pronaći stranicu koju tražiš.Provjeri svoju poveznicu ili pokušaj ponovo kasnije",
+ "no_access": "Nemaš ovlaštenje za pristup ovoj aplikaciji ({{code}})",
+ "message_web": "Pogledaj trenutačno stanje servera.Ili se vrati na početnu stranicu"
+ },
+ "post": {
+ "heading": "Objava",
+ "title": "Objava od {{username}}",
+ "yeahs_count/one": " osoba odobrava obu objavu.",
+ "yeahs_count/multiple": " ljudi odobravaju obu objavu.",
+ "reply_post": "Odgovori",
+ "report_post": "Prijavi objavu",
+ "delete_post": "Izbriši objavu",
+ "removed": "Objava je uklonjena.",
+ "copy_link": "Kopiraj poveznicu",
+ "show_spoiler": "Prikaži spoiler"
+ },
+ "friend_requests": {
+ "none": "Nema zahtjeva za prijateljstvo"
+ },
+ "reporting": {
+ "title": "Prijavi objavu",
+ "submit": "Pošalji prijavu",
+ "description": "Prijavit ćeš objavu sa sadržajem koji krši kodeks ponašanja za Juxtaposition. Ova prijava će se poslati administratorima Juxtapositiona, a ne autoru objave.",
+ "label": "Razlog:",
+ "additional_info_placeholder": "Unesi dodatne komentare ili informacije",
+ "reason_personal_info": "Osobne informacije",
+ "reason_violence": "Nasilni sadržaj",
+ "reason_inappropiate": "Neprimjereno/štetno ponašanje",
+ "reason_bullying": "Govor mržnje/maltretiranje",
+ "reason_advertising": "Oglašavanje",
+ "reason_nsfw": "Eksplicitno seksualno",
+ "reason_piracy": "Piratstvo",
+ "reason_inappropiate_ingame": "Neprimjereno ponašanje u igri",
+ "reason_missing_images": "Nedostajuće slike",
+ "reason_one": "Drugi",
+ "reason_few": "Druga",
+ "reason_other": "Drugih",
+ "reason_spoiler": "Spoiler"
+ },
+ "moderation": {
+ "title": "Moderacija",
+ "silently_delete_post": "Tiho brisanje",
+ "moderate_user": "Moderiraj korisnika"
}
}
diff --git a/apps/juxtaposition-ui/src/assets/locales/it.json b/apps/juxtaposition-ui/src/assets/locales/it.json
index 6eb92170..2a876cfc 100644
--- a/apps/juxtaposition-ui/src/assets/locales/it.json
+++ b/apps/juxtaposition-ui/src/assets/locales/it.json
@@ -1,8 +1,8 @@
{
"language": "Italiano",
"global": {
- "user_page": "Pagina dell'utente",
- "activity_feed": "Attività",
+ "user_page": "La mia pagina",
+ "activity_feed": "Riepilogo attività",
"communities": "Gruppi",
"messages": "Messaggi",
"notifications": "Notifiche",
@@ -15,7 +15,16 @@
"close": "Chiudi",
"save": "Salva",
"exit": "Esci",
- "next": "Avanti"
+ "next": "Avanti",
+ "friend_requests": "Richieste di amicizia",
+ "updates": "Aggiornamenti",
+ "my_feed": "Le mie attività",
+ "global_feed": "Attività globali",
+ "global_feed_short": "Globale",
+ "people_feed": "Attività seguiti",
+ "people_feed_short": "Seguiti",
+ "search": "Cerca...",
+ "notifications_and_messages": "Notifiche e messaggi"
},
"all_communities": {
"text": "Tutti i gruppi",
@@ -27,7 +36,12 @@
"posts": "Post",
"tags": "Etichette",
"recent": "Post recenti",
- "popular": "Post popolari"
+ "popular": "Post popolari",
+ "tags_not_applicable": "Non disponibile",
+ "related": "Gruppi correlati",
+ "related_to": "{{community}} Gruppi correlati",
+ "closed": "Non è possibile pubblicare nuovi post in questo gruppo.",
+ "followers_count": "{{count}} seguaci"
},
"user_page": {
"country": "Paese",
@@ -38,23 +52,42 @@
"following": "Seguiti",
"followers": "Seguaci",
"follow_user": "Segui",
- "following_user": "Stai seguendo"
+ "following_user": "Stai seguendo",
+ "settings": "Impostazioni",
+ "deleted": "Utente eliminato",
+ "banned": "Utente bannato",
+ "game_experience_unknown": "Sconosciuta",
+ "friend_requests": "Richieste"
},
"user_settings": {
"profile_settings": "Impostazioni del profilo",
- "show_country": "Mostra Paese sul profilo",
- "show_birthday": "Mostra compleanno sul profilo",
- "show_game": "Mostra esperienza di gioco sul profilo"
+ "show_country": "Mostra Paese sul tuo profilo",
+ "show_birthday": "Mostra compleanno sul tuo profilo",
+ "show_game": "Mostra esperienza di gioco sul tuo profilo",
+ "save_action": "Salva impostazioni",
+ "gdpr_download": "Scarica dati utente",
+ "gdpr_download_action": "Scarica"
},
"activity_feed": {
- "empty": "È vuoto qui. Prova a seguire qualcuno!"
+ "empty": "È vuoto. Prova a seguire qualcuno!"
},
"notifications": {
- "none": "Nessuna notifica."
+ "none": "Nessuna notifica.",
+ "new_follower/one": " ti segue!",
+ "new_follower/two": " e ti seguono!",
+ "new_follower/three": ", e {{count_other}} altro ti seguono!",
+ "new_follower/multiple": ", e altri {{count_other}} ti seguono!"
},
"new_post": {
"post_to": "Posta su {{user}}",
- "swearing": "Il post non deve contenere linguaggio esplicito."
+ "swearing": "Il post non deve contenere linguaggio esplicito.",
+ "new_post_short": "Pubblica",
+ "no_screenshot": "Nessuno screenshot",
+ "painting_close": "Annulla",
+ "spoiler_label": "Spoiler",
+ "content_placeholder": "Condividi il tuo pensiero con un post rivolto ad un gruppo o ai tuoi seguaci.",
+ "screenshots_coming_soon": "Gli screenshot non sono ancora pronti. Ricontrolla preso!",
+ "painting_submit": "OK"
},
"messages": {
"coming_soon": "Nessun messaggio"
@@ -72,19 +105,19 @@
"info_text": "Juxt è una comunità di gioco guidata dagli utenti dove puoi interagire con persone\n da tutto il mondo. Puoi scrivere o disegnare post in un gruppo di un gioco o mandare messaggi direttamente ai tuoi amici.",
"rules": "Regole di Juxt",
"rules_text": {
- "first": "Di seguito sono elencate delle linee guida importanti per rendere Juxt un'esperienza divertente e piacevole per tutti. Il codice di condotta di Juxt contiene informazioni dettagliate, quindi leggilo attentamente.",
+ "first": "Di seguito sono elencate delle linee guida importanti per rendere Juxt un'esperienza divertente e piacevole per tutti. Il Codice di Condotta di Juxt contiene informazioni dettagliate, quindi leggilo attentamente.",
"second": "I post possono essere visualizzati da tutto il mondo",
- "third": "Juxt contiene diversi gruppi di gioco dove persone da tutto il mondo possono condividere le loro opinioni. Quando posti in un gruppo, ricordati che chiunque può vedere il tuo post, quindi esprimiti in modo rispettoso verso tutti. Usa il buon senso e pensa prima di postare. Juxt è un servizio che è anche accessibile via Internet, quindi tieni a mente che i tuoi post potrebbero essere visualizzati anche da persone che non utilizzano Juxt. Inoltre, qualunque commento che scrivi su un post di un tuo amico potra essere visto non solo dai tuoi amici, ma anche da persone da tutto il mondo. Per favore, tieni questo a mente.",
+ "third": "Juxt contiene diversi gruppi di gioco dove persone da tutto il mondo possono condividere le loro opinioni. Quando pubblichi un post in un gruppo, ricordati che chiunque può vederlo, quindi esprimiti in modo rispettoso verso tutti. Usa il buon senso e pensa prima di postare. Juxt è un servizio accessibile anche via Internet, quindi sappi che i tuoi post potrebbero essere visualizzati anche da persone che non utilizzano Juxt. Inoltre tutti i commenti che scrivi sotto un post di un tuo amico potranno essere visti non solo dai tuoi amici, ma anche da persone da tutto il mondo. Tienilo a mente.",
"fourth": "Sii gentile verso gli altri utenti",
"fifth": "Affinché Juxt resti un luogo divertente per tutti, ti chiediamo di essere rispettoso degli altri utenti. Aiutaci a fare di Juxt un'esperienza picacevole e non postare niente di inappropriato o offensivo.",
- "sixth": "Non postare informazioni personali - tue o di qualcun altro",
+ "sixth": "Non postare informazioni personali tue o di altre persone",
"seventh": "Ricorda, conoscere qualcuno su Juxt non è come conoscerlo nella realtà. Non condividere con nessuno su Juxt il tuo indirizzo e-mail, di casa, nome della tua scuola o luogo di lavoro, o qualunque altra informazione personale, e lo stesso vale per le informazioni personali di qualcun altro. Inoltre, se qualcuno che conosci su Juxt ti offre di incontrarlo nel mondo reale, non accettare. Juxt è una comunità online e non deve essere usata per organizzare incontri nel mondo reale.",
"eighth": "Non postare spoiler",
- "ninth": "Alcune persone visitano Juxt per trovare suggerimenti e trucchi per i giochi, ma altre vogliono scoprire i segreti di un gioco da sole. Post che rivelano i segreti di un gioco o della sua storia sono detti \"spoiler\". Se stai postando qualcosa che potrebbe essere uno spoiler, assicurati di selezionare la casella Spoiler prima di inviare il tuo post. In questo modo il tuo post non sarà visibile agli utenti che non vogliono vedere spoiler.",
+ "ninth": "Alcune persone visitano Juxt per trovare suggerimenti e trucchi per i giochi, ma altre vogliono scoprire i segreti di un gioco da sole. I post che rivelano i segreti di un gioco o della sua storia sono detti \"spoiler\". Se stai postando qualcosa che potrebbe essere uno spoiler, assicurati di selezionare la casella Spoiler prima di inviare il tuo post. In questo modo il tuo post non sarà visibile agli utenti che non vogliono vedere spoiler.",
"tenth": "Violazioni del Codice di Condotta",
"eleventh": "Il nostro obiettivo è rendere Juxt divertente e piacevole per tutti. Nel caso in cui qualcuno violi il Codice di Condotta, prenderemo i provvedimenti opportuni, fino a bloccare l'utente o la console incriminati.",
"twelfth": "Hai mai giocato a quel gioco?",
- "thirteenth": "Se stai postando nel gruppo di un gioco a cui hai giocato, i tuoi post avranno un'icona per indicare che ci hai giocato."
+ "thirteenth": "Se crei un post nel gruppo di un gioco a cui hai giocato, i tuoi post avranno un'icona per indicare che ci hai giocato."
},
"experience": "Esperienza di gioco",
"experience_text": {
@@ -93,11 +126,71 @@
"intermediate": "Intermedio",
"expert": "Esperto"
},
- "analytics": "Analytics",
+ "analytics": "Analisi",
"analytics_text": "Juxtaposition utilizza Cloudflare Web Analytics per tracciare il modo in cui gli utenti utilizzano il nostro servizio. I dati raccolti includono ma non si limitano a: momento della visita, pagine visitate e tempo passato sul sito. Questi dati non sono ricollegabili a te in alcun modo, e non sono utilizzati per finalità pubblicitarie da noi o Cloudflare.",
"ready": "Pronto a iniziare a usare Juxt",
"ready_text": "Per prima cosa dai un'occhiata a qualche gruppo e scopri di cosa stanno parlando persone da tutto il mondo. Cogli questa opportunità per familiarizzarti con Juxt. Potresti fare nuove scoperte strada facendo!",
- "done": "Divertiti in Juxt!",
- "done_button": "Andiamo!"
+ "done": "Divertiti su Juxt!",
+ "done_button": "Andiamo!",
+ "title": "Configura Juxtaposition"
+ },
+ "login": {
+ "no_account": "Non hai un account?",
+ "login_action": "Accedi",
+ "username": "Nome utente",
+ "password": "Password",
+ "no_account_setup": "Puoi creare un account solo se hai una Wii U o un 3DS collegati.",
+ "heading": "Registrati su Juxtaposition",
+ "sub_title": "Inserisci le informazioni del tuo account qui sotto",
+ "forgot_password": "Hai dimenticato la password?",
+ "title": "Accedi a Juxtaposition"
+ },
+ "friend_requests": {
+ "none": "Nessuna richiesta di amicizia"
+ },
+ "post": {
+ "yeahs_count/one": " persona ha messo sìì al tuo post.",
+ "yeahs_count/multiple": " persone hanno messo sìì al tuo post.",
+ "show_spoiler": "Mostra Spoiler",
+ "reply_post": "Commenta",
+ "report_post": "Segnala post",
+ "title": "Post di {{username}}",
+ "heading": "Post",
+ "delete_post": "Elimina post",
+ "removed": "Il post è stato eliminato.",
+ "copy_link": "Copia link"
+ },
+ "reporting": {
+ "description": "Stai per segnalare un post il cui contenuto viola il Codice di Condotta di Juxtaposition. La segnalazione sarà inviata agli amministratori di Juxtaposition di Pretendo e non al creatore del post.",
+ "label": "Motivo:",
+ "additional_info_placeholder": "Commenti o informazioni aggiuntive",
+ "reason_spoiler": "Spoiler",
+ "reason_personal_info": "Informazioni personali",
+ "reason_violence": "Contenuto violento",
+ "reason_inappropiate": "Comportamento inappropriato/dannoso",
+ "reason_bullying": "Discriminazione/Minacce",
+ "reason_advertising": "Pubblicità",
+ "reason_nsfw": "Contenuti sessualmente espliciti",
+ "reason_piracy": "Pirateria",
+ "reason_inappropiate_ingame": "Comportamento scorretto nel gioco",
+ "reason_missing_images": "Immagini mancanti",
+ "title": "Segnala post",
+ "submit": "Invia segnalazione",
+ "reason_one": "altro",
+ "reason_many": "altri",
+ "reason_other": "altri"
+ },
+ "error": {
+ "title": "Errore {{code}}",
+ "heading": "Errore {{code}}: {{message}}",
+ "message_web": "Visualizza lo stato del server.Oppure torna al menù principale",
+ "error_details": "ID richiesta: {{id}}",
+ "no_access": "Non hai l'autorizzazione per accedere a questa applicazione ({{code}})",
+ "message": "Ops! Sembra che la pagina che stai cercando non esista.Controlla il link o riprova più tardi"
+ },
+ "moderation": {
+ "title": "Moderazione",
+ "silently_delete_post": "Elimina senza notifica",
+ "moderate_user": "Modera utente"
}
}
diff --git a/apps/juxtaposition-ui/src/assets/locales/ko.json b/apps/juxtaposition-ui/src/assets/locales/ko.json
index 6b79dbb0..09f89c70 100644
--- a/apps/juxtaposition-ui/src/assets/locales/ko.json
+++ b/apps/juxtaposition-ui/src/assets/locales/ko.json
@@ -8,7 +8,7 @@
"notifications": "알림",
"go_back": "뒤로 가기",
"back": "뒤로",
- "yeahs": "당근이지",
+ "yeahs": "그렇지",
"more": "게시물 더보기",
"no_posts": "게시물 없음",
"private": "비공개",
@@ -27,7 +27,10 @@
"posts": "게시물",
"tags": "태그",
"recent": "최근 게시물",
- "popular": "인기 게시물"
+ "popular": "인기 게시물",
+ "related": "관련된 커뮤니티",
+ "related_to": "{{community}}에 관련된 커뮤니티",
+ "closed": "이 커뮤니티는 더 이상 새로운 게시글을 받지 않습니다."
},
"user_page": {
"country": "국가",
@@ -38,33 +41,52 @@
"following": "팔로우 중",
"followers": "팔로워",
"follow_user": "팔로우",
- "following_user": "팔로우 중"
+ "following_user": "팔로우 중",
+ "friend_requests": "요청",
+ "game_experience_unknown": "알 수 없음",
+ "settings": "설정",
+ "deleted": "삭제된 유저",
+ "banned": "정지된 유저"
},
"user_settings": {
"profile_settings": "프로필 설정",
"show_country": "프로필에 국가 표시",
"show_birthday": "프로필에 생년월일 표시",
- "show_game": "프로필에 게임 경험 표시"
+ "show_game": "프로필에 게임 경험 표시",
+ "save_action": "설정 저장",
+ "gdpr_download": "유저 데이터 다운로드",
+ "gdpr_download_action": "다운로드"
},
"activity_feed": {
"empty": "아무도 없네요. 누군가를 팔로우 해 보세요!"
},
"notifications": {
- "none": "알림 없음."
+ "none": "알림 없음.",
+ "new_follower/one": "이(가) 당신을 팔로우했어요!",
+ "new_follower/two": ", 이(가) 당신을 팔로우했어요!",
+ "new_follower/three": ", , 그리고 {{count_other}}명이 당신을 팔로우했어요!",
+ "new_follower/multiple": ", , 그리고 {{count_other}}명이 당신을 팔로우했어요!"
},
"new_post": {
- "post_to": "여기로 게시하기 {{user}}",
- "swearing": "게시물에는 비속어를 사용 할 수 없습니다."
+ "post_to": "{{user}}에게 게시물 달기",
+ "swearing": "게시물에는 비속어를 사용 할 수 없습니다.",
+ "new_post_short": "게시물",
+ "content_placeholder": "당신의 팔로워들을 위해, 혹은 커뮤니티 게시물에 당신의 생각을 담아보세요.",
+ "screenshots_coming_soon": "스크린샷은 아직 지원되지 않습니다. 나중에 돌아와주세요!",
+ "no_screenshot": "스크린샷 없음",
+ "spoiler_label": "스포일러",
+ "painting_close": "취소",
+ "painting_submit": "확인"
},
"messages": {
- "coming_soon": "응 아직 개발 안됨 ㅅㄱ 나중에 다시 와 보세요!"
+ "coming_soon": "메시지 없음"
},
"setup": {
"welcome": "Juxtaposition에 오신 것을 환영합니다!",
"welcome_text": "Juxt는 Mii 캐릭터를 사용하여 전 세계의 사람들을 잇는 게이밍 커뮤니티입니다. Juxt를 사용해서 게임 경험을 나누고, 전 세계의 사람들과 소통하세요.",
"beta": "베타 테스트 주의",
"beta_text": {
- "first": "당신은 Juxt의 첫 공개 베타에 참가한다는 것을 잊지 마세요. 아직 버그들이 많을 것이며, 언제든지 모든 게 확 바뀔 수 있습니다.",
+ "first": "Pretendo Network 공개 베타에 오신 걸 환영합니다! 이미 첫 공개 베타로부터 상당히 바뀌었지만, Juxt는 아직 개발 중이고 많은 것들이 언제나 바뀔 수 있습니다.",
"second": "베타 기간 중 혹은 종료 후에는 전체 데이터베이스가 삭제 될 수도 있습니다.",
"third": "이 웹 사이트 및 그 소프트웨어, 그 외 모든 컨텐츠는 “있는 그대로” 및 “사용 가능한 상태로” 제공됩니다. Pretendo Network는 어떠한 웹사이트, 소프트웨어 또는 콘텐츠의 적합성 및 유용성에 대해 어떠한 명시적·묵시적 보증도 하지 않습니다."
},
@@ -88,16 +110,49 @@
},
"experience": "게임 경험",
"experience_text": {
- "info": "당신의 게임에 관한 경험 레벨을 알려 주세요. 나중에도 이 설정은 변경할 수 있습니다.",
+ "info": "당신이 게임을 얼마나 경험했는지 알려 주세요. 나중에도 이 설정은 변경할 수 있습니다.",
"beginner": "초급자",
"intermediate": "중급자",
"expert": "전문가"
},
- "analytics": "Analytics",
+ "analytics": "통계",
"analytics_text": "Juxtaposition은 사용자들이 어떻게 저희의 서비스를 활용하고 있는지 트래킹하기 위해 Cloudflare Web Analytics를 사용합니다. 수집하고 있는 데이터는 방문 횟수, 방문 페이지, 사이트에서 보낸 시간 등을 포함합니다. 이 데이터는 당신과 어떠한 연결도 없으며, 저희나 Cloudflare의 광고에 쓰이지도 않습니다.",
"ready": "Juxt 사용 준비 완료",
- "ready_text": "먼저 유명한 커뮤니티부터 찾아보세요! 사람들이 뭘 올리는지 확인하고, 그리고 이번 기회에 사람들이 어떤 걸 하는지 찾아보세요. 새로운 발견이 될 수도 있으니까요!",
+ "ready_text": "처음엔 여러 커뮤니티를 돌아다니면서 전세계의 사람들이 어떠한 얘기를 하고 있는지 살펴보세요. 그리고 이 기회를 Juxt와 친해질 수 있는 기회로 삼으세요. 무언가 새로운 발견을 하실 수도 있어요!",
"done": "Juxt에서 좋은 시간을 보내시기 바랍니다!",
- "done_button": "가자!"
+ "done_button": "가자!",
+ "title": "Juxtaposition 첫 설정"
+ },
+ "friend_requests": {
+ "none": "친구 요청 없음"
+ },
+ "post": {
+ "title": "{{username}}이(가) 쓴 글",
+ "heading": "게시물",
+ "yeahs_count/one": "명의 사람들이 이 게시물에 그렇지를 보냈습니다.",
+ "yeahs_count/multiple": "명의 사람들이 이 게시물에 그렇지를 보냈습니다.",
+ "show_spoiler": "스포일러 보이기",
+ "reply_post": "댓글",
+ "report_post": "게시물 신고하기",
+ "delete_post": "게시물 삭제하기",
+ "removed": "게시물이 삭제되었습니다.",
+ "copy_link": "주소 복사"
+ },
+ "reporting": {
+ "title": "게시물 신고하기",
+ "submit": "신고 제출",
+ "description": "당신은 Juxtaposition의 규칙을 위반하는 게시물을 신고하고 계십니다. 이 신고는 게시물의 작성자가 아닌, Pretendo의 Juxtaposition 관리자들에게 보내집니다.",
+ "label": "이유:",
+ "additional_info_placeholder": "추가적인 정보를 적으세요",
+ "reason_spoiler": "스포일러",
+ "reason_personal_info": "개인정보",
+ "reason_violence": "잔혹한·폭력적인 컨텐츠",
+ "reason_inappropiate": "부적절하거나 피해를 일으키는 행위",
+ "reason_bullying": "혐오/차별",
+ "reason_advertising": "광고",
+ "reason_nsfw": "성적인 유해함",
+ "reason_piracy": "불법 복제",
+ "reason_inappropiate_ingame": "게임에서의 부적절한 행위",
+ "reason_missing_images": "이미지가 없음"
}
}
diff --git a/apps/juxtaposition-ui/src/assets/locales/sk.json b/apps/juxtaposition-ui/src/assets/locales/sk.json
index 129f5e16..47f2554a 100644
--- a/apps/juxtaposition-ui/src/assets/locales/sk.json
+++ b/apps/juxtaposition-ui/src/assets/locales/sk.json
@@ -2,38 +2,57 @@
"language": "Slovenčina",
"global": {
"communities": "Komunity",
- "notifications": "Pripomienky",
+ "notifications": "Upozornenia",
"private": "Súkromné",
"close": "Zavrieť",
"save": "Uložiť",
"exit": "Ukončiť",
- "next": "Ďalší",
- "no_posts": "Žiadne príspevky",
+ "next": "Ďalej",
+ "no_posts": "Žiadne Príspevky",
"messages": "Správy",
- "user_page": "Používateľská stránka",
- "activity_feed": "Informačný kanál aktivity",
+ "user_page": "Uživateľská Stránka",
+ "activity_feed": "Prehľad Aktivity",
"go_back": "Choď späť",
"back": "Späť",
- "more": "Načítať ďalšie príspevky",
- "yeahs": ""
+ "more": "Načítať Ďalšie Príspevky",
+ "yeahs": "Yeahy",
+ "people_feed_short": "Ľudia",
+ "friend_requests": "Žiadosti o Priateľstvo",
+ "my_feed": "Moja Aktivita",
+ "global_feed": "Globálna Aktivita",
+ "global_feed_short": "Globálny",
+ "people_feed": "Aktivita Ľudí",
+ "updates": "Aktualizácie",
+ "notifications_and_messages": "Upozornenia a Správy",
+ "search": "Vyhľadávať..."
},
"community": {
- "followers": "Odoberatelia",
+ "followers": "Sledujúci",
"posts": "Príspevky",
- "recent": "Čerstvé príspevky",
- "popular": "Populárne príspevky",
- "tags": "Tagy"
+ "recent": "Nedávne Príspevky",
+ "popular": "Populárne Príspevky",
+ "tags": "Štítky",
+ "followers_count": "{{count}} sledovateľov",
+ "tags_not_applicable": "Nie je k dispozícii",
+ "related": "Príbuzné Komunity",
+ "related_to": "{{community}} Príbuzných Komunít",
+ "closed": "Táto komunita je uzavretá pre nové príspevky."
},
"user_page": {
"country": "Krajina",
"friends": "Priatelia",
- "following": "Odoberané",
- "followers": "Odoberatelia",
- "follow_user": "Odoberať",
- "following_user": "Odoberané",
+ "following": "Sledované",
+ "followers": "Sledujúci",
+ "follow_user": "Sledovať",
+ "following_user": "Sledované",
"posts": "Príspevky",
- "birthday": "Dátum narodenia",
- "game_experience": "Herný zážitok"
+ "birthday": "Narodeniny",
+ "game_experience": "Skúsenosť s Hrami",
+ "settings": "Nastavenia",
+ "game_experience_unknown": "Neznáme",
+ "friend_requests": "Žiadosti",
+ "deleted": "Vymazaný Uživateľ",
+ "banned": "Zakázaný Uživazeľ"
},
"all_communities": {
"text": "Všetky komunity",
@@ -41,63 +60,137 @@
"new_communities": "Nové komunity"
},
"user_settings": {
- "profile_settings": "Nastavenia profilu",
- "show_country": "Ukázať krajinu na profile",
- "show_birthday": "Ukázať dátum narodenia na profile",
- "show_game": "Zobraziť herný zážitok na profile"
+ "profile_settings": "Nastavenia Profilu",
+ "show_country": "Zobraziť Krajinu na Profile",
+ "show_birthday": "Zobraziť Dátum Narodenia na Profile",
+ "show_game": "Zobraziť Hernú Skúsenosť na Profile",
+ "save_action": "Uložiť Nastavenia",
+ "gdpr_download_action": "Stiahnuť",
+ "gdpr_download": "Stiahnť Uživateľské Údaje"
},
"notifications": {
- "none": "Žiadne pripomienky."
+ "none": "Žiadne upozornenia.",
+ "new_follower/one": " Vás začal/-a sledovať!",
+ "new_follower/two": ", Vás začali sledovať!",
+ "new_follower/three": ", , a {{count_other}} ďalší Vás začali sledovať!",
+ "new_follower/multiple": ", , a {{count_other}} ďalších Vás začali sledovať!"
},
"new_post": {
- "swearing": "Príspevok nemôže obsahovať nadávky.",
- "post_to": "Uverejniť na {{user}}"
+ "swearing": "Príspevok nemôže obsahovať nevhodné výrazy.",
+ "post_to": "Uverejniť na {{user}}",
+ "no_screenshot": "Žiadna Snímka Obrazovky",
+ "painting_close": "Zrušiť",
+ "painting_submit": "OK",
+ "new_post_short": "Príspevok",
+ "content_placeholder": "Zdieľajte Vaše myšlienky v príspevku pre komunity alebo pre Vašich sledovateľov.",
+ "screenshots_coming_soon": "Snímky obrazovky ešte nie sú pripravené. Skúste to znova neskôr!",
+ "spoiler_label": "Spojler"
},
"setup": {
"welcome": "Vitajte v Juxtaposition!",
"info": "Čo je Juxtaposition?",
"rules": "Pravidlá Juxta",
"rules_text": {
- "eighth": "Neposielajte spoilery",
+ "eighth": "Neposielajte Spojlery",
"third": "Juxt obsahuje mnoho herných komunít, kde môžu ľudia z celého sveta zdieľať svoje myšlienky. Keď uverejňujete príspevok v komunite, pamätajte na to, že ho môže vidieť každý, preto sa prosím vyjadrite spôsobom, ktorý bude baviť každého. Použite zdravý rozum a premýšľajte skôr, ako uverejníte príspevok. Juxt je služba, ktorá je dostupná aj z internetu, takže majte na pamäti, že vaše príspevky môžu vidieť aj ľudia, ktorí nepoužívajú Juxt. Navyše, všetky komentáre, ktoré pridáte k príspevkom svojich priateľov, uvidia nielen vaši priatelia, ale aj ľudia na celom svete. Majte to prosím na pamäti.",
"seventh": "Pamätajte, že poznať niekoho v Juxte nie je to isté ako poznať ho v skutočnom živote. Nikdy nezdieľajte svoju e-mailovú adresu, domácu adresu, meno do práce alebo školy ani iné osobné identifikačné údaje s nikým na Juxt a nikdy nezdieľajte informácie nikoho iného. Navyše, ak vás niekto, koho stretnete v Juxte, pozve, aby ste sa s ním stretli v skutočnom svete, neprijmite ho. Juxt je online komunita a nemala by sa používať na organizovanie stretnutí v reálnom svete.",
- "ninth": "Niektorí ľudia prichádzajú do Juxtu hľadať tipy a triky pre hry, no iní chcú objaviť tajomstvá hry úplne sami. Príspevky, ktoré odhaľujú tajomstvá hry alebo jej príbeh, sa nazývajú „spoilery“. Ak uverejňujete niečo o hre, ktorá by mohla byť spoilerom, pred odoslaním príspevku nezabudnite zaškrtnúť políčko Spoilers. Týmto spôsobom ľudia, ktorí nechcú byť rozmaznaní, neuvidia váš príspevok.",
+ "ninth": "Niektorí ľudia prichádzajú do Juxtu hľadať tipy a triky pre hry, no iní chcú objaviť tajomstvá hry úplne sami. Príspevky, ktoré odhaľujú tajomstvá hry alebo jej príbeh, sa nazývajú „spojlery“. Ak uverejňujete niečo o hre, ktorá by mohla byť spojlerom, pred odoslaním príspevku nezabudnite zaškrtnúť políčko Spojlery. Týmto spôsobom ľudia, ktorí nechcú byť rozmaznaní, neuvidia váš príspevok.",
"first": "Nasleduje niekoľko dôležitých pokynov na to, aby bol Juxt zábavný a príjemný pre každého. Etický kódex Juxt obsahuje podrobné informácie, preto si ho pozorne prečítajte.",
"second": "Príspevky je možné prezerať po celom svete",
"fourth": "Buďte k sebe milí",
"fifth": "Aby bol Juxt zábavným miestom pre každého, žiadame vás, aby ste boli ohľaduplní k ostatným používateľom. Pomôžte nám udržať Juxt príjemný zážitok tým, že nebudete uverejňovať nič nevhodné alebo urážlivé.",
"sixth": "Neuverejňujte osobné informácie – vaše alebo iných",
- "tenth": "Porušenie kódexu správania",
- "eleventh": "Naším cieľom je, aby bol Juxt zábavný a príjemný pre každého. V prípade, že niekto poruší Etický kódex Juxt, podnikneme príslušné kroky, vrátane zablokovania porušujúceho používateľa alebo konzoly.",
- "twelfth": "Hrali ste túto hru?",
+ "tenth": "Porušenie Pravidiel",
+ "eleventh": "Naším cieľom je, aby bol Juxt zábavný a príjemný pre každého. V prípade, že niekto poruší Pravidlá Juxt, podnikneme príslušné kroky, vrátane zablokovania porušujúceho používateľa alebo konzoly.",
+ "twelfth": "Hrali Ste Túto Hru?",
"thirteenth": "Ak uverejňujete príspevok v komunite pre hru, ktorú ste hrali, vaše príspevky budú mať ikonu označujúcu, že ste ju hrali."
},
"experience_text": {
"beginner": "Začiatočník",
- "expert": "Expert",
+ "expert": "Pokročilý",
"info": "Povedzte nám, ako by ste opísali úroveň svojich skúseností s hrami. Toto nastavenie môžete neskôr zmeniť.",
"intermediate": "Stredne pokročilý"
},
- "ready": "Pripavený začať používať Juxt",
- "done_button": "Poďme do toho!",
+ "ready": "Pripavený Začať Používať Juxt",
+ "done_button": "Poďme Do Toho!",
"beta_text": {
- "first": "Chystáte sa vyskúšať prvú verejnú beta verziu Juxtu. To znamená, že veľa je stále vo vzduchu a veľa sa môže kedykoľvek zmeniť.",
+ "first": "Vytajte vo Verejnej Beta Sieti Pretendo! Napriek tomu ze sa veľa vecí zmenilo od prvej verejnej bety, Juxt je stále v procese vývoja a veľa sa môže kedykoľvek zmeniť.",
"third": "Webová lokalita, jej softvér a všetok obsah, ktorý sa na nej nachádza, sú poskytované „tak ako sú“ a „ako sú dostupné“. Sieť Pretendo neposkytuje žiadne záruky, či už výslovné alebo predpokladané, pokiaľ ide o vhodnosť alebo použiteľnosť webovej stránky, jej softvéru alebo akéhokoľvek obsahu.",
- "second": "To môže a môže zahŕňať úplné vymazanie databázy na konci alebo počas beta obdobia."
+ "second": "To môže zahŕňať úplné vymazanie databázy na konci alebo počas obdobia bety."
},
"welcome_text": "Juxt je herná komunita, ktorá spája ľudí z celého sveta pomocou postavičiek Mii. Pomocou Juxt môžete zdieľať svoje herné zážitky a stretnúť sa s ľuďmi z celého sveta.",
- "beta": "Vyhlásenie beta verzie",
+ "beta": "Odmietnutie Zodpovednosti za Beta Verziu",
"info_text": "Juxt je herná komunita riadená používateľmi, kde môžete komunikovať s ľuďmi\n po celom svete. Môžete písať alebo kresliť príspevky v herných komunitách alebo posielať správy priamo svojim priateľom.",
"ready_text": "Najprv si pozrite niektoré komunity a zistite, o čom píšu ľudia z celého sveta. Využite túto príležitosť a zoznámte sa s Juxtom. Na ceste môžete urobiť nejaké nové objavy!",
- "experience": "Herný zážitok",
- "analytics": "Analytics",
+ "experience": "Skúsenosť s hrami",
+ "analytics": "Analytické údaje",
"analytics_text": "Juxtaposition používa Cloudflare Web Analytics na sledovanie toho, ako používatelia používajú našu službu. Zhromaždené údaje zahŕňajú, ale nie sú obmedzené na čas návštevy, navštívené stránky a čas strávený na stránke. Tieto údaje sa k vám žiadnym spôsobom nepripájajú a nepoužívajú sa ani my, ani spoločnosť Cloudflare.",
- "done": "Bavte sa v Juxte!"
+ "done": "Užite si Juxt!",
+ "title": "Nastavenie Juxtaposition"
},
"activity_feed": {
- "empty": "Je to tu prázdne. Skúste niekoho odoberať!"
+ "empty": "Je to tu prázdne. Skúste niekoho sledovať!"
},
"messages": {
- "coming_soon": "Správy ešte nie sú pripravené. Vráťte sa sem čoskoro!"
+ "coming_soon": "Žiadne Správy"
+ },
+ "login": {
+ "password": "Heslo",
+ "title": "Prihlásenie Juxtaposition",
+ "heading": "Registrovanie Juxtaposition",
+ "sub_title": "Zadajte detaily Vášho účtu",
+ "username": "Uživateľské meno",
+ "forgot_password": "Zabudli ste heslo?",
+ "no_account": "Nemáte účet?",
+ "login_action": "Prihlásenie",
+ "no_account_setup": "Vytvorenie Účtu je dostupné iba ak máte pripojené Wii U alebo 3DS."
+ },
+ "error": {
+ "title": "Chyba {{code}}",
+ "heading": "Chyba {{code}}: {{message}}",
+ "message": "Ups! Vyzerá že sme nenašli stránku, ktorú hľadáte.Skontrolujte či je odkaz správny alebo to skúste znova neskôr",
+ "no_access": "Nemáte oprávnenie na prístup k tejto aplikácii ({{code}})",
+ "message_web": "Zobraziť aktuálny stav servera.Alebo sa vráťte na domovskú stránku",
+ "error_details": "ID žiadosti: {{id}}"
+ },
+ "post": {
+ "reply_post": "Odpovedať",
+ "report_post": "Nahlásiť príspevok",
+ "delete_post": "Odstrániť príspevok",
+ "removed": "Príspevok bol odstránený.",
+ "copy_link": "Kopírovať odkaz",
+ "title": "Príspevok od {{username}}",
+ "heading": "Príspevok",
+ "show_spoiler": "Zobraziť Spojler",
+ "yeahs_count/one": " človek dal tomuto pŕispevku yeah.",
+ "yeahs_count/multiple": " ľudí dalo tomuto pŕispevku yeah."
+ },
+ "reporting": {
+ "label": "Dôvod:",
+ "reason_personal_info": "Osobné Informácie",
+ "reason_violence": "Násilný Obsah",
+ "title": "Nahlásiť Príspevok",
+ "submit": "Podať Správu",
+ "description": "Chystáte sa nahlásiť príspevok s obsahom, ktorý porušuje Kódex Správania Juxtaposition. Toto nahlásenie bude odoslané administrátorom Juxstaposition z Pretenda, nie autorovi príspevku.",
+ "additional_info_placeholder": "Zadajte ďalšie komentáre alebo informácie",
+ "reason_spoiler": "Spojler",
+ "reason_inappropiate": "Nevhodné/Škodlivé Správanie",
+ "reason_bullying": "Nenávistný/Šikanujúci",
+ "reason_advertising": "Reklamný",
+ "reason_nsfw": "Sexuálne Explicitný",
+ "reason_piracy": "Pirátstvo",
+ "reason_inappropiate_ingame": "Nevhodné Správanie v Hre",
+ "reason_missing_images": "Chýbajúce Obrázky",
+ "reason_one": "Jeden",
+ "reason_few": "Viacero",
+ "reason_other": "Veľa"
+ },
+ "friend_requests": {
+ "none": "Žiadne Žiadosti o Priateľstvo"
+ },
+ "moderation": {
+ "title": "Moderovanie",
+ "silently_delete_post": "Ticho vymazať",
+ "moderate_user": "Moderovať Používateľa"
}
}
diff --git a/apps/juxtaposition-ui/src/config.ts b/apps/juxtaposition-ui/src/config.ts
index bdfbaedf..2125a45a 100644
--- a/apps/juxtaposition-ui/src/config.ts
+++ b/apps/juxtaposition-ui/src/config.ts
@@ -69,6 +69,11 @@ const schema = z.object({
host: z.string(),
port: z.coerce.number().default(6379)
}),
+ domains: z.object({
+ web: z.hostname().default('juxt.pretendo.network'),
+ ctr: z.hostname().default('ctr.olv.pretendo.cc'),
+ portal: z.hostname().default('portal.olv.pretendo.cc')
+ }).prefault({}),
dmBanner: z.object({
text: z.string().optional(), // Add `content` to insert the url
url: z.url().optional(),
diff --git a/apps/juxtaposition-ui/src/database.js b/apps/juxtaposition-ui/src/database.js
index 75427866..90a991ab 100644
--- a/apps/juxtaposition-ui/src/database.js
+++ b/apps/juxtaposition-ui/src/database.js
@@ -114,13 +114,16 @@ async function getPostReplies(postID, number) {
}).limit(number);
}
-async function getDuplicatePosts(pid, post) {
+async function getDuplicatePosts(pid, post, olderThanMs) {
verifyConnected();
return POST.findOne({
pid: pid,
body: post.body,
- painting: post.painting,
screenshot: post.screenshot,
+ painting: post.painting,
+ created_at: {
+ $gte: new Date(Date.now() - olderThanMs)
+ },
parent: null,
removed: false
});
diff --git a/apps/juxtaposition-ui/src/middleware/hostLimit.ts b/apps/juxtaposition-ui/src/middleware/hostLimit.ts
new file mode 100644
index 00000000..604f0be6
--- /dev/null
+++ b/apps/juxtaposition-ui/src/middleware/hostLimit.ts
@@ -0,0 +1,14 @@
+import type express from 'express';
+
+export function restrictHostnames(
+ allowedHostnames: string[],
+ fn: TFn
+): (request: express.Request, response: express.Response, next: () => void) => void | TFn {
+ return (request: express.Request, response: express.Response, next: () => void) => {
+ if (allowedHostnames.includes(request.hostname)) {
+ return fn(request, response, next);
+ }
+
+ return next();
+ };
+}
diff --git a/apps/juxtaposition-ui/src/models/communities.ts b/apps/juxtaposition-ui/src/models/communities.ts
index ee9898c9..5aadd6bf 100644
--- a/apps/juxtaposition-ui/src/models/communities.ts
+++ b/apps/juxtaposition-ui/src/models/communities.ts
@@ -8,6 +8,14 @@ enum COMMUNITY_TYPE {
Private = 3
}
+export interface IIconPaths {
+ 32: string;
+ 48: string;
+ 64: string;
+ 96: string;
+ 128: string;
+}
+
export interface ICommunityPermissions {
open: boolean;
minimum_new_post_access_level: number;
@@ -38,6 +46,7 @@ export interface ICommunity {
icon: string;
ctr_header?: string;
wup_header?: string;
+ icon_paths?: IIconPaths;
/** @deprecated Does not actually exist on any community. Use title_id */
title_ids?: string[]; // Does not exist on any community
title_id: string[];
@@ -102,6 +111,29 @@ export const PermissionsSchema = new Schema({
}
});
+const IconPathsSchema = new Schema({
+ 32: {
+ type: String,
+ required: true
+ },
+ 48: {
+ type: String,
+ required: true
+ },
+ 64: {
+ type: String,
+ required: true
+ },
+ 96: {
+ type: String,
+ required: true
+ },
+ 128: {
+ type: String,
+ required: true
+ }
+});
+
/* Constraints here (default, required etc.) apply to new documents being added
* See ICommunity for expected shape of query results
* If you add default: or required:, please also update ICommunity and ICommunityInput!
@@ -171,6 +203,7 @@ export const CommunitySchema = new Schema = {
type: body.type,
has_shop_page: body.has_shop_page,
- platform_id: body.platform,
+ platform_id: Number(body.platform),
icon: icons?.tgaBlob ?? oldCommunity.icon,
+ icon_paths: iconPaths,
ctr_header: headers?.ctr ?? oldCommunity.ctr_header,
wup_header: headers?.wup ?? oldCommunity.wup_header,
title_id: body.title_ids,
diff --git a/apps/juxtaposition-ui/src/services/juxt-web/routes/console/posts.tsx b/apps/juxtaposition-ui/src/services/juxt-web/routes/console/posts.tsx
index 0553f336..a0127e19 100644
--- a/apps/juxtaposition-ui/src/services/juxt-web/routes/console/posts.tsx
+++ b/apps/juxtaposition-ui/src/services/juxt-web/routes/console/posts.tsx
@@ -488,7 +488,8 @@ async function newPost(req: Request, res: Response): Promise {
verified: res.locals.moderator,
parent: parentPost ? parentPost.id : null
};
- const duplicatePost = await database.getDuplicatePosts(auth().pid, document);
+ const maxDuplicatePostAgeMs = 5 * 60 * 1000;
+ const duplicatePost = await database.getDuplicatePosts(auth().pid, document, maxDuplicatePostAgeMs);
if (duplicatePost && params.post_id) {
return res.redirect('/posts/' + params.post_id.toString());
}
diff --git a/apps/juxtaposition-ui/src/services/juxt-web/views/ctr/communityListView.tsx b/apps/juxtaposition-ui/src/services/juxt-web/views/ctr/communityListView.tsx
index f05d23d8..389cd2e1 100644
--- a/apps/juxtaposition-ui/src/services/juxt-web/views/ctr/communityListView.tsx
+++ b/apps/juxtaposition-ui/src/services/juxt-web/views/ctr/communityListView.tsx
@@ -1,16 +1,15 @@
import { CtrPageBody, CtrRoot } from '@/services/juxt-web/views/ctr/root';
-import { useUrl } from '@/services/juxt-web/views/common/hooks/useUrl';
import { T } from '@/services/juxt-web/views/common/components/T';
+import { CtrCommunityIcon } from '@/services/juxt-web/views/ctr/components/ui/CtrCommunityIcon';
import type { ReactNode } from 'react';
import type { CommunityItemProps, CommunityListViewProps, CommunityOverviewViewProps } from '@/services/juxt-web/views/web/communityListView';
export function CtrCommunityItem(props: CommunityItemProps): ReactNode {
- const url = useUrl();
const id = props.community.olive_community_id;
return (