diff --git a/.env.local-dist b/.env.local-dist
index 1ac517d..590ffa1 100644
--- a/.env.local-dist
+++ b/.env.local-dist
@@ -9,3 +9,4 @@ NEXT_PUBLIC_API_BASE_URL=https://backend.ideologicalatlas.com
NEXT_PUBLIC_API_VERSION=v1
NEXT_PUBLIC_GOOGLE_CLIENT_ID=CHANGE-ME
NEXT_PUBLIC_HERO_IMAGE_URL=https://lh3.googleusercontent.com/aida-public/AB6AXuBl8rwoOPJmg5qcAJKw4Vc6naau5P9eLyJ11DFXm2z8frKF2DuZpaVtUU0tL_UAYE1-Gg3dtYJgWrWlU_8kCc87rTxzi3e-c6ywBJA1hpaaPmgc3hKuIOpw3Qfv3euB3XL9at_gn3qn5xy3pyMMkJDpTLV2gMQc4T4FV5HMpZdZWzkQW17SYW4cfF3k9iyZ3LbX4Tdlh4RTI92ZQxhbAMjigy44BQhG-ULKSVmLIkOkxN7NYTEX_vir3J4LmvlsDq5UrY5E_VTLT60
+NEXT_PUBLIC_GITHUB_URL=https://github.com/Ideological-Atlas
diff --git a/messages/en.json b/messages/en.json
index 2fd13e3..605fe5e 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -11,19 +11,19 @@
"profile": "Profile",
"logout": "Logout",
"cancel": "Cancel",
- "beta_warning": "Page in testing mode. Errors may occur. For suggestions or bug reports: support@ideologicalatlas.com",
+ "beta_warning": "Beta mode. Errors may occur. Reports: support@ideologicalatlas.com",
"home": "Home",
"theme_select": "Theme",
"info": "Info",
- "explore_ideologies": "Explore ideologies",
+ "explore_ideologies": "Explore Ideologies",
"filters": "Filters",
"country": "Country",
"region": "Region",
"religion": "Religion",
"tag": "Tag",
"all": "All",
- "clear_filters": "Clear filters",
- "show_all": "Show all"
+ "clear_filters": "Clear Filters",
+ "show_all": "Show All"
},
"Navigation": {
"home": "Home",
@@ -34,11 +34,11 @@
},
"Hero": {
"title": "Discover your true ideological position",
- "subtitle": "A modern, accurate, and detailed political spectrum test based on real data."
+ "subtitle": "A modern, precise, and detailed political spectrum test based on real data."
},
"Features": {
"title": "Analyze your political thought",
- "subtitle": "Our algorithm evaluates multiple dimensions to offer you an accurate result.",
+ "subtitle": "Our algorithm evaluates multiple dimensions to offer precise results.",
"cards": {
"spectrum": {
"title": "Multidimensional Spectrum",
@@ -46,16 +46,16 @@
},
"exploration": {
"title": "Deep Exploration",
- "description": "Understand the historical and philosophical influences of your ideology."
+ "description": "Understand historical and philosophical influences of your ideology."
},
"analysis": {
"title": "Data Analysis",
- "description": "Compare your results with global and regional trends."
+ "description": "Compare results with global and regional trends."
}
}
},
"CTA": {
- "title": "Ready to discover your place on the map?",
+ "title": "Ready to map your ideology?",
"text": "Join thousands of users who have already mapped their ideology."
},
"Auth": {
@@ -65,57 +65,60 @@
"username_placeholder": "user123",
"password_label": "Password",
"password_placeholder": "********",
- "forgot_password": "Forgot your password?",
+ "forgot_password": "Forgot password?",
"login_button": "Sign In",
"logging_in": "Signing in...",
- "no_account": "Don't have an account?",
+ "no_account": "No account?",
"register_link": "Sign up",
"copyright": "All rights reserved.",
"or": "OR WITH EMAIL",
"continue_google": "Continue with Google",
"continue_google_loading": "Connecting...",
"register_title": "Create Account",
- "register_subtitle": "Register to establish your ideological profile and explore the spectrum.",
+ "register_subtitle": "Sign up to establish your ideological profile.",
"email_label": "Email",
"email_placeholder": "email@example.com",
- "confirm_password_label": "Confirm password",
+ "confirm_password_label": "Confirm Password",
"register_button": "Sign Up",
"registering": "Registering...",
"has_account": "Already have an account?",
"login_link": "Sign In",
- "password_requirements": "Password must be at least 7 characters long, cannot be entirely numeric, and must not be too common or similar to your details.",
+ "password_requirements": "Password must be at least 7 chars, not purely numeric, nor too common.",
"password_mismatch": "Passwords do not match",
- "register_error": "Error creating account. Please try again.",
+ "register_error": "Error creating account. Try again.",
"network_error": "Connection error.",
"invalid_credentials": "Invalid credentials. Please try again.",
- "login_error": "An error occurred during login. Please try again later.",
- "post_register_title": "Account created successfully!",
- "post_register_subtitle": "We have sent you a confirmation email. Please check your inbox and follow the link to verify your account and start exploring the atlas.",
- "status_completed": "Registration completed",
- "status_pending": "Waiting for email verification...",
+ "login_error": "Login error. Try again later.",
+ "post_register_title": "Account Created!",
+ "post_register_subtitle": "We sent a confirmation email. Please check your inbox.",
+ "status_completed": "Registration Complete",
+ "status_pending": "Waiting for verification...",
"explore_button": "Explore Atlas",
- "dashboard_button": "Go to my Dashboard",
+ "dashboard_button": "Go to Dashboard",
"forgot_password_title": "Recover Password",
- "forgot_password_subtitle": "Enter your email address and we'll send you a link to reset your password.",
- "send_recovery_link": "Send recovery link",
+ "forgot_password_subtitle": "Enter your email to receive a reset link.",
+ "send_recovery_link": "Send Recovery Link",
"sending": "Sending...",
"recovery_email_sent_title": "Email Sent!",
- "recovery_email_sent_description": "If an account exists with this email, you will receive instructions shortly.",
- "back_to_login": "Back to login",
+ "recovery_email_sent_description": "If an account exists, you will receive instructions shortly.",
+ "back_to_login": "Back to Login",
"reset_password_title": "New Password",
- "reset_password_subtitle": "Set a secure password to protect your Ideological Atlas account.",
+ "reset_password_subtitle": "Set a secure password for your account.",
"new_password_label": "NEW PASSWORD",
"confirm_new_password_label": "CONFIRM NEW PASSWORD",
"update_password_button": "Update Password",
"updating": "Updating...",
"password_updated_title": "Password Updated!",
- "password_updated_description": "Your password has been changed successfully. Your account is now secure and ready to explore.",
- "go_to_login_button": "Go to Main Panel",
+ "password_updated_description": "Your password has been changed successfully.",
+ "go_to_login_button": "Go to Login",
"verifying_token": "Verifying link...",
"invalid_token_title": "Invalid Link",
- "invalid_token_description": "This recovery link has expired or is invalid. Please request a new one.",
- "reset_password_error": "There was an error resetting the password.",
- "invalid_username_format": "Only letters, numbers and @/./+/-/_ (no spaces)"
+ "invalid_token_description": "This link has expired or is invalid.",
+ "reset_password_error": "Error resetting password.",
+ "invalid_username_format": "Only letters, numbers, and @/./+/-/_ allowed",
+ "password_too_short": "Password must be at least 8 characters long",
+ "password_numeric": "Password must contain at least one number",
+ "invalid_email": "Invalid email address"
},
"Footer": {
"privacy": "Privacy",
@@ -125,68 +128,78 @@
},
"Verify": {
"title_loading": "Verifying...",
- "description_loading": "We are confirming your verification link.",
+ "description_loading": "Confirming your verification link.",
"title_success": "Profile Verified!",
- "description_success": "Your email has been successfully confirmed. You can now explore the Ideological Atlas without restrictions.",
+ "description_success": "Your email has been confirmed. You can now explore freely.",
"title_error": "Invalid Link",
- "description_error": "We could not verify your account. The link may have expired or be incorrect.",
+ "description_error": "Could not verify account. Link may be expired.",
"go_to_dashboard": "Go to Dashboard",
"go_to_login": "Login",
- "title_already_verified": "Profile already active",
- "description_already_verified": "Your account has already been verified. No further action is required."
+ "title_already_verified": "Profile Active",
+ "description_already_verified": "Account was already verified."
},
"Atlas": {
+ "public_profile_title": "Ideological Profile",
+ "public_profile_description": "View detailed ideological profile and comparison.",
+ "complexity_level": "Complexity Level",
+ "complexity_subtitle": "Select analysis depth",
+ "header_title": "Ideological Atlas",
+ "header_description": "Explore the different dimensions",
+ "context_section": "Context",
+ "progress_label": "Progress: {name}",
+ "discover_ideology_btn": "Discover my Ideology",
+ "share_button": "Share",
"you_label": "You",
- "your_answer_label": "Your answer",
- "their_answer_label": "Their answer",
+ "your_answer_label": "Your Answer",
+ "their_answer_label": "Their Answer",
"anonymous_user": "Anonymous User",
"sign_in_to_compare": "Sign in to save",
- "discovery_lock_title": "Save your progress",
- "discovery_lock_desc": "To discover your ideology and save it permanently, we recommend creating an account. However, you can continue anonymously.",
+ "discovery_lock_title": "Save Progress",
+ "discovery_lock_desc": "To save your ideology permanently, create an account.",
"discovery_lock_login": "Login / Register",
- "discovery_lock_cancel": "Continue Anonymously",
+ "discovery_lock_cancel": "Continue Anonymous",
+ "welcome_modal": {
+ "title": "Welcome to the Atlas",
+ "description": "Would you like a quick interactive tutorial to learn how to use the axes, margins, and conditioners?",
+ "start_btn": "Start Tutorial",
+ "skip_btn": "Skip Tutorial",
+ "guest_note": "Note: You are in guest mode. Answers are saved locally."
+ },
"guest_warning": {
"title": "Continue as Guest?",
- "description": "You can take the test without an account, but your answers will only be saved on this device and could be lost. You will still be able to compare affinity at the end.",
- "login": "Create Account (Recommended)",
- "continue_guest": "Continue Anonymously"
+ "description": "You can take the test without an account, but answers are saved on this device only.",
+ "login": "Create Account",
+ "continue_guest": "Continue"
},
"unverified_warning": {
"title": "Verification Pending",
- "description": "You can complete your Atlas and see real-time results, but your answers will NOT be saved to the cloud until you verify your account. Please check your email.",
- "dismiss": "Understood, I will continue without saving"
+ "description": "Your answers won't save to cloud until you verify email.",
+ "dismiss": "Understood"
},
"title": "Ideological Atlas",
- "complexity_level": "Abstraction Level",
- "context_configuration": "Context Configuration",
+ "context_configuration": "Context Config",
"selector_placeholder": "Selector for {type}",
- "no_questions": "No questions available in this section.",
- "header_title": "Ideological Atlas",
- "header_description": "Define your position on the spectrum.",
- "complexity_subtitle": "Select depth level",
- "context_section": "Context",
+ "no_questions": "No questions available.",
"select_placeholder": "Select",
"options_label": "Options",
"yes": "Yes",
"no": "No",
"numeric_placeholder": "Numeric value",
- "text_placeholder": "Type your answer...",
+ "text_placeholder": "Type answer...",
"margin_label": "Margin",
- "indifferent_label": "Mark as indifferent",
- "reset_label": "Reset answer",
+ "indifferent_label": "Mark indifferent",
+ "reset_label": "Reset",
"conditioned_label": "CONDITIONED",
"depends_on_label": "Depends on",
"asymmetric_label": "ASYMMETRIC",
- "progress_label": "{name} Progress",
- "share_posture_title": "Share Posture",
- "share_posture_description": "Share your position in the ideological spectrum via this unique link. Anyone with the link will be able to see your configuration.",
+ "share_posture_title": "Share Position",
+ "share_posture_description": "Share your position via unique link.",
"direct_link_label": "DIRECT LINK",
"copied": "Copied",
"copy": "Copy",
- "link_copied_success": "Link copied to clipboard successfully!",
- "share_button": "Share",
+ "link_copied_success": "Link copied!",
"public_profile_badge": "PUBLIC PROFILE",
- "similarity_label": "SIMILARITY WITH YOU",
+ "similarity_label": "SIMILARITY",
"affinity_identical": "Identical",
"affinity_very_high": "Very High",
"affinity_high": "High",
@@ -198,31 +211,30 @@
"your_answers_label": "Your Answers",
"affinity_medium": "Medium Similarity",
"affinity_short_label": "Affinity",
- "affinity_almost_identical": "Very compatible",
- "affinity_almost_opposite": "Not compatible",
- "copy_answer_tooltip": "Copy answer from {username}",
+ "affinity_almost_identical": "Almost Identical",
+ "affinity_almost_opposite": "Almost Opposite",
+ "copy_answer_tooltip": "Copy answer",
"copy_answer_label": "Copy",
"indifferent_status": "Indifferent",
- "not_answered_status": "Not Answered",
+ "not_answered_status": "Not answered",
"previous_label": "Previous",
"next_section_label": "Next Section",
"next_level_label": "Next Level",
"incomplete_modal_title": "Incomplete Sections",
- "incomplete_modal_description": "You still have unanswered questions in this level. We recommend completing them before proceeding for a more accurate result.",
+ "incomplete_modal_description": "You have unanswered questions.",
"incomplete_modal_continue": "Continue anyway",
- "incomplete_modal_cancel": "Review sections",
+ "incomplete_modal_cancel": "Review",
"answered_on": "Answered on {date}",
- "ideology_definition_label": "Ideological Definition",
+ "ideology_definition_label": "Ideology Definition",
"back_to_encyclopedia": "Back to Encyclopedia",
- "admin_mode_label": "Ideology Editing Mode",
- "discover_ideology_btn": "Check your Ideology",
- "discovery_title": "Ideological Affinity Analysis",
- "discovery_subtitle": "Calculating your compatibility with defined ideologies in real-time based on your current answers.",
+ "admin_mode_label": "Admin Mode",
+ "discovery_title": "Affinity Analysis",
+ "discovery_subtitle": "Calculating compatibility.",
"calculating_affinity": "Calculating...",
"affinity_score": "Affinity",
"discovery_modal_title": "Ideology Found!",
- "discovery_modal_subtitle": "Based on your answers, your closest ideology is:",
- "view_comparison": "Compare Answers",
+ "discovery_modal_subtitle": "Based on your answers:",
+ "view_comparison": "Compare",
"close_modal": "Close",
"affinity_pending": "Pending...",
"read_more": "Read more",
@@ -231,351 +243,315 @@
"Profile": {
"page_title": "Profile Settings",
"header_title": "Profile Settings",
- "header_description": "Manage your identity, preferences, and privacy in the Ideological Atlas.",
- "menu_configuration": "CONFIGURATION MENU",
- "view_public_profile": "View Public Profile",
- "save_changes": "Save Changes",
- "save_all": "Save All",
- "saved": "Saved",
+ "header_description": "Manage identity and preferences.",
"public_profile": "Public Profile",
- "public_profile_desc": "Information visible to other Atlas users.",
+ "website_label": "Website",
"first_name_label": "First Name",
"last_name_label": "Last Name",
- "bio_label": "Biography",
- "bio_placeholder": "",
- "website_label": "Website",
- "preferences_title": "General Preferences",
- "preferences_desc": "Customize your experience in the application.",
+ "bio_label": "Bio",
+ "preferences_title": "Preferences",
"language_label": "Language",
"language_select": "Select language",
"appearance_label": "Appearance",
"theme_select": "Select theme",
"security_title": "Security",
- "security_desc": "Protect your account and sensitive data.",
"change_password_title": "Change Password",
- "new_password_label": "New password",
+ "new_password_label": "New Password",
"privacy_title": "Privacy",
- "privacy_desc": "Control who can see your activity.",
- "visibility_label": "Profile Visibility",
- "visibility_description": "Define who can see your position on the spectrum.",
+ "visibility_label": "Visibility",
+ "visibility_description": "Who can see your profile.",
"public": "Public",
"private": "Private",
- "email_not_verified_warning": "User not verified, please check your email."
+ "save_all": "Save All",
+ "saved": "Saved",
+ "menu_configuration": "CONFIGURATION MENU",
+ "view_public_profile": "View Public Profile",
+ "general_preferences": "General Preferences",
+ "save_changes": "Save Changes",
+ "cancel": "Cancel",
+ "public_profile_desc": "Visible information.",
+ "bio_placeholder": "",
+ "preferences_desc": "Customize experience.",
+ "security_desc": "Protect account.",
+ "privacy_desc": "Control visibility.",
+ "email_not_verified_warning": "Email not verified."
},
"Legal": {
- "table_of_contents": "Table of Contents",
- "intro_title": "Introduction",
- "collection_title": "Data Collection",
- "usage_title": "Information Usage",
- "cookies_title": "Cookie Usage",
- "rights_title": "User Rights",
- "contact_title": "Contact",
- "need_help_title": "Need extra help?",
- "need_help_desc": "Our legal team is available to answer specific questions about your data.",
- "open_ticket": "Contact Support",
"privacy_policy_title": "Privacy Policy",
- "privacy_policy_subtitle": "Your privacy is fundamental. We are committed to protecting your identity and not using invasive trackers.",
+ "privacy_policy_subtitle": "Your privacy is the fundamental pillar of our platform.",
"last_updated": "Last updated",
- "intro_p1": "Welcome to Ideological Atlas. This Privacy Policy describes how we handle your personal information. By accessing our services, you agree to these practices.",
- "intro_p2": "Our mission is to map ideologies transparently. We do not trade your data nor use hidden tracking techniques.",
+ "table_of_contents": "Contents",
+ "need_help_title": "Any questions?",
+ "need_help_desc": "If you have questions about your data, we are here to help.",
+ "open_ticket": "Contact support",
+ "intro_title": "Introduction",
+ "intro_p1": "At Ideological Atlas, we take your personal data protection very seriously.",
+ "intro_p2": "This policy describes what data we collect and how we protect it, always guaranteeing your anonymity if you choose so.",
+ "collection_title": "Data Collection",
"col_account_title": "Account Information",
- "col_account_desc": "We collect basic data such as your name, email address, and language preferences when you register to create a personalized account.",
- "col_interaction_title": "Interaction Data",
- "col_interaction_desc": "We record your answers to ideological questionnaires, your markers in the atlas, and the time spent exploring different information nodes.",
+ "col_account_desc": "Email and username for registered users.",
+ "col_interaction_title": "Atlas Answers",
+ "col_interaction_desc": "Your positions on ideological axes to calculate affinities.",
"col_tech_title": "Technical Data",
- "col_tech_desc": "We automatically collect information about your device, IP address, browser type, and operating system to optimize the visual experience of the Atlas.",
+ "col_tech_desc": "Basic device information to optimize the experience.",
"col_contrib_title": "Contributions",
- "col_contrib_desc": "Any content you voluntarily post in community forums or comments on specific nodes will be publicly visible.",
- "usage_intro": "We do not sell your data to third parties. We use information exclusively for:",
- "use_algo_title": "Algorithm Improvement",
- "use_algo_desc": "We analyze anonymous patterns to refine positioning.",
+ "col_contrib_desc": "Suggestions or bug reports you send us.",
+ "usage_title": "Information Usage",
+ "usage_intro": "We use your data exclusively for:",
+ "use_algo_title": "Affinity Calculation",
+ "use_algo_desc": "Comparing your profile with ideologies or other users.",
"use_perso_title": "Personalization",
- "use_perso_desc": "We adapt suggested content to your results.",
+ "use_perso_desc": "Saving your theme and language preferences.",
"use_sec_title": "Security",
- "use_sec_desc": "Protection against abuse and account notifications.",
- "cookies_desc": "We use strictly necessary cookies and local storage to manage your session and authentication securely. We do not use third-party cookies for advertising tracking.",
- "cookies_note_label": "Technical Note",
- "cookies_note_text": "The 'access_token' and 'refresh_token' cookies are essential to keep you logged in when you reload the page.",
- "rights_intro": "We guarantee the following rights regarding your personal data:",
- "right_access_title": "Right of Access",
- "right_access_desc": "Request a copy of all the data we hold about you.",
- "right_rect_title": "Right to Rectification",
- "right_rect_desc": "Correct any inaccurate or incomplete information in your profile.",
- "right_del_title": "Right to Erasure",
- "right_del_desc": "Request the total deletion of your account and associated data (\"Right to be forgotten\").",
- "right_port_title": "Right to Portability",
- "right_port_desc": "Receive your data in a structured format to transfer it to another service.",
- "contact_desc": "If you have questions about this Policy or wish to exercise your rights, contact us. We respond within 48 hours.",
- "contact_btn": "Send Email"
+ "use_sec_desc": "Protecting site integrity and preventing abuse.",
+ "cookies_title": "Cookies",
+ "cookies_desc": "We only use essential technical cookies for session operation and your preferences.",
+ "cookies_note_label": "Important",
+ "cookies_note_text": "We do not use third-party tracking cookies or for advertising purposes.",
+ "rights_title": "Your Rights",
+ "rights_intro": "You have full control over your information according to GDPR.",
+ "right_access_title": "Access",
+ "right_access_desc": "You can see all your data in your profile.",
+ "right_rect_title": "Rectification",
+ "right_rect_desc": "You can change your answers at any time.",
+ "right_del_title": "Deletion",
+ "right_del_desc": "You can delete your account and data permanently.",
+ "right_port_title": "Portability",
+ "right_port_desc": "Export your data in a structured format.",
+ "contact_title": "Legal Contact",
+ "contact_desc": "For any legal or privacy matters, write to us directly.",
+ "contact_btn": "Send email"
},
"Terms": {
- "table_of_contents": "Table of Contents",
"title": "Terms of Use",
- "subtitle": "Clear rules for an open-source and free knowledge platform.",
- "last_updated": "Last updated",
- "version": "Version 0.1",
+ "subtitle": "Community rules and platform usage.",
+ "version": "Version 0.1.0",
"sidebar": {
- "intro": "Introduction",
- "acceptance": "1. Acceptance",
- "service": "2. Service",
- "responsible": "3. Responsible Use",
- "accounts": "4. Accounts",
- "modifications": "5. Modifications",
- "liability": "6. Liability"
+ "intro": "Welcome",
+ "acceptance": "Acceptance",
+ "service": "The Service",
+ "responsible": "Responsible Use",
+ "accounts": "Accounts",
+ "modifications": "Changes",
+ "liability": "Liability"
},
"intro": {
- "p1": "Welcome to Ideological Atlas. This page describes the legal terms governing the use of our ideological data visualization platform.",
- "p2": "By accessing our platform, you agree to be bound by the following terms and conditions. Please read them carefully."
+ "p1": "Welcome to Ideological Atlas. By using our site, you agree to these rules.",
+ "p2": "This is an educational and social research project."
},
"acceptance": {
- "title": "Acceptance of Terms",
- "p1": "By accessing or using the Service, you confirm that you have the legal capacity to enter into this agreement.",
- "p2": "If you do not agree to any part of the terms, you may not access the service."
+ "title": "Acceptance of terms",
+ "p1": "Accessing the site implies full acceptance of these terms.",
+ "p2": "If you do not agree, please do not use the service."
},
"service": {
- "title": "Service Description",
- "p1": "Ideological Atlas is a non-profit, open-source project. Tools are provided \"as is\" for educational and research purposes."
+ "title": "Service description",
+ "p1": "We offer an ideological analysis tool based on open mathematical models."
},
"responsible": {
- "title": "Responsible Use & Licenses",
- "desc": "How we share our work and what we expect from our users.",
- "prohibitions_title": "Strict Prohibitions",
- "prohibitions_desc": "It is strictly forbidden to use the platform to:",
+ "title": "Responsible Use",
+ "desc": "Your behavior affects the community.",
+ "prohibitions_title": "Prohibitions",
+ "prohibitions_desc": "It is strictly forbidden to:",
"prohibitions_list": [
- "Spread hate speech or discrimination.",
- "Manipulate data for disinformation.",
- "Abusive scraping affecting the server."
+ "Use bots to alter statistics.",
+ "Denial of service attacks.",
+ "Mass data extraction (scraping) without permission.",
+ "Identity theft."
],
- "license_title": "Open Source & License",
- "license_desc": "The code is Open Source (MIT). Data uses Creative Commons (CC BY-NC-SA).",
- "license_quote": "Use, modification, and distribution for non-commercial purposes with proper attribution is permitted."
+ "license_title": "Code License",
+ "license_desc": "Our code is open under MIT license.",
+ "license_quote": "Free to use, study and improve."
},
"accounts": {
- "title": "Collaborator Accounts",
- "p1": "To contribute data, you may need to register. We encourage verifiable identities to maintain quality.",
- "p2": "You are responsible for the confidentiality of your account and all activities under it."
+ "title": "Account Management",
+ "p1": "You are responsible for maintaining your password confidentiality.",
+ "p2": "We reserve the right to close accounts that violate these rules."
},
"modifications": {
- "title": "Service Modifications",
- "p1": "We reserve the right to modify these Terms. Substantial changes will be announced on GitHub/Discord 30 days in advance."
+ "title": "Modifications",
+ "p1": "We may update these terms. We will notify you of important changes."
},
"liability": {
"title": "Limitation of Liability",
- "p1": "Ideological Atlas shall not be liable for damages arising from the use of the service. The platform is an experimental educational tool."
+ "p1": "We are not responsible for personal interpretations of Atlas results."
},
"contact_community": {
- "title": "Questions about the license?",
- "desc": "Our community can help you understand how to use the data.",
- "btn": "Contact Community"
- }
+ "title": "Legal questions?",
+ "desc": "Our legal team will review any inquiry.",
+ "btn": "Inquire"
+ },
+ "last_updated": "Last updated"
},
"FeaturesPage": {
- "hero_title": "The Ideological Operating System",
- "hero_subtitle": "Map, visualize, and understand your political position with unprecedented precision.",
+ "hero_title": "The Future of Political Analysis",
+ "hero_subtitle": "An ever-evolving platform to map human ideological complexity.",
"current_title": "Current Features",
- "roadmap_title": "Product Roadmap",
- "roadmap_subtitle": "Our vision for the future of ideological analysis.",
+ "roadmap_title": "Roadmap",
+ "roadmap_subtitle": "What we are building for the future.",
+ "coming_soon": "Coming Soon",
+ "help_wanted_title": "We need your help",
+ "help_wanted_desc": "This is an ambitious open-source project. If you are a developer, designer, or researcher, your help is welcome.",
+ "contact_us": "Contact Us",
"cards": {
"multidimensional": {
- "title": "Multidimensional",
- "desc": "Beyond left and right. A complete multi-axis analysis."
+ "title": "Multidimensional Analysis",
+ "desc": "Beyond left and right. Analyze ideologies through multiple axes and complexity levels."
},
"contextual": {
- "title": "Contextual",
- "desc": "Questions adapt dynamically based on your previous answers."
+ "title": "Dynamic Context",
+ "desc": "Questions adapt to your previous answers to drill down where it matters most."
},
"privacy": {
- "title": "Total Privacy",
- "desc": "Your data is yours. Open source and no hidden trackers."
+ "title": "Privacy First",
+ "desc": "Your data is yours. Anonymous analysis or private profile, you decide."
}
},
"upcoming": {
- "explorer": {
- "title": "Ideology Explorer",
- "desc": "Browse a comprehensive library of human ideologies and definitions."
- },
"dashboard": {
- "title": "Analytics Dashboard",
- "desc": "Visualize your statistics, evolution over time, and deep metrics."
+ "title": "Analytical Dashboard",
+ "desc": "Advanced visualizations of your trends over time."
},
"countries": {
- "title": "Atlas by Country",
- "desc": "Compare ideological trends globally, regionally, and nationally."
+ "title": "Regional Adaptation",
+ "desc": "Specific political contexts by country and region."
},
"community": {
- "title": "Community & Groups",
- "desc": "Connect with like-minded people, form groups, and debate in moderated spaces."
+ "title": "Community",
+ "desc": "Debate and compare stances with other users respectfully."
},
"ai": {
- "title": "Ideology AI",
- "desc": "Analyze texts, news, and speeches to identify biases automatically."
+ "title": "AI Insights",
+ "desc": "Deep analysis of ideological patterns assisted by AI."
},
"mobile": {
- "title": "Mobile Versions",
- "desc": "Take your ideological profile with you. Native apps for iOS and Android."
+ "title": "Mobile App",
+ "desc": "Take the Atlas with you on iOS and Android."
}
},
- "coming_soon": "Coming Soon",
- "help_wanted_title": "We need your help",
- "help_wanted_desc": "This is an ambitious open-source project. If you are a developer, designer, or researcher, your help is welcome.",
- "contact_us": "Contact us"
+ "version_badge": "Ideological Atlas v0.1.0"
},
"AboutPage": {
"hero": {
- "title": "Beyond Left and Right",
- "subtitle": "An open-source initiative to dismantle biased diagrams and build a transparent, rigorous standard for political measurement.",
- "mission_btn": "Our Mission",
- "github_btn": "View Code"
+ "title": "About the Project",
+ "subtitle": "Exploring the dimensions of modern political thought.",
+ "github_btn": "Source Code"
},
"story": {
"title": "Our Story",
- "content_p1": "Ideological Atlas was born in late 2025 out of frustration with circular political discussions. We realized complex thinkers were forced into simplistic labels because obsolete tools like the Nolan Chart couldn't represent them.",
- "content_p2": "We are a small team operating from Spain using VPS hosted in Germany, non-profit, with a clear goal: to prove that human ideology has more dimensions than a simple Cartesian plane.",
- "quote": "Political reality is too complex to fit into two axes."
+ "content_p1": "Ideological Atlas was born from the need to overcome the extreme simplification of the left-right axis.",
+ "content_p2": "We seek to provide a scientific and open tool for every individual to understand their position in an increasingly complex world.",
+ "quote": "Politics is not a line, it's an infinite map."
},
"algorithm": {
- "title": "The Affinity Engine",
- "subtitle": "Forget simple averages. We use a Quadratic Decay model to calculate real compatibility.",
- "indifference_title": "Indifference Logic",
- "indifference_desc": "The system respects apathy. If both users are indifferent, affinity is total (100%). If only one is, we penalize slightly (75%) for the lack of connection.",
- "quadratic_title": "Quadratic Decay",
- "quadratic_desc": "Affinity does not drop linearly. We gently penalize small deviations (nuance) but severely punish large differences (conflict).",
- "phases_title": "Two Calculation Phases",
- "phases_overlap": "Contact Phase (50-100%): When tolerance ranges touch.",
- "phases_gap": "Gap Phase (0-50%): When positions are irreconcilable.",
- "aggregation_title": "Hierarchical Aggregation",
- "aggregation_desc": "Axis → Section → Complexity. Affinity is built layer by layer."
+ "title": "The Algorithm",
+ "subtitle": "Total transparency in affinity calculations.",
+ "indifference_title": "Managing Indifference",
+ "indifference_desc": "The system distinguishes between a neutral stance and a lack of opinion on a topic.",
+ "quadratic_title": "Quadratic Error",
+ "quadratic_desc": "We use quadratic functions to fairly penalize ideological deviations.",
+ "phases_title": "Phase Calculation",
+ "phases_gap": "Granular analysis of gaps and overlaps between answers.",
+ "aggregation_title": "Data Aggregation",
+ "aggregation_desc": "How axes combine into sections and complexity levels."
},
"contribute": {
- "title": "Join the Resistance",
- "subtitle": "This project is Open Source and community-maintained. We need your brain.",
- "role_dev": "Developers",
- "role_dev_desc": "Help with React, Python (Django) code, and data visualization.",
- "role_research": "Researchers",
- "role_research_desc": "Help define new axes, review bibliography, and neutralize bias.",
- "role_translate": "Translators",
- "role_translate_desc": "Currently in ES/EN. Help us reach more cultures.",
- "role_design": "Design & UX",
- "role_design_desc": "Design intuitive interfaces and improve user experience.",
+ "title": "Contribute to the Atlas",
+ "subtitle": "This is a community-driven, open project.",
+ "role_dev": "Development",
+ "role_dev_desc": "React, Next.js, Django, and system optimization.",
+ "role_research": "Research",
+ "role_research_desc": "Validation of ideological axes and definitions.",
+ "role_design": "Design",
+ "role_design_desc": "Improving user experience and visualization.",
"role_product": "Product",
- "role_product_desc": "Help define features and project direction.",
- "role_data": "Data & Analytics",
- "role_data_desc": "Extract value from data to empower user analysis."
+ "role_product_desc": "Project strategy and roadmap.",
+ "role_data": "Data",
+ "role_data_desc": "Statistical analysis and affinity models.",
+ "role_translate": "Translation",
+ "role_translate_desc": "Making the Atlas accessible to everyone."
}
},
"Onboarding": {
"tour": {
"welcome": {
- "desc": "Welcome to the Ideological Atlas. This guide will show you how to define your political stance and discover your affinity with different ideologies, even without creating an account.",
- "title": "Welcome to the Atlas!"
+ "desc": "Welcome guide.",
+ "title": "Welcome!"
},
"discovery": {
- "desc": "Once you complete a complexity level, you can discover which ideologies you have the highest affinity with based on your current answers.",
- "title": "Discover your Ideology"
+ "desc": "Discover affinity.",
+ "title": "Discovery"
},
"share": {
- "desc": "Share your ideological profile with others or save it for later. If you haven't logged in, a temporary public link will be generated.",
+ "desc": "Share profile.",
"title": "Share"
},
"levels": {
- "title": "Abstraction Levels",
- "desc": "These are the different abstraction levels configured for the atlas. As you progress to less abstract levels, the defined ideologies will become more complex and closer to reality."
+ "title": "Levels",
+ "desc": "Abstraction levels."
},
"progress": {
- "title": "Your Progress",
- "desc": "As you advance in your ideology definition, this percentage will increase. Please note that it is independent per level and indicates how much of the *current level* you have completed."
+ "title": "Progress",
+ "desc": "Level progress."
},
"header": {
- "title": "Level Information",
- "desc": "Here you will find detailed information about the abstraction level you are currently in. It is an indicative description. For now, descriptions have been generated by AI and suggestions are welcome."
+ "title": "Level Info",
+ "desc": "Details."
},
"sections": {
"title": "Sections",
- "desc": "In this first level there is only one section, but other levels may have multiple thematic sections."
+ "desc": "Thematic sections."
},
"section_help": {
- "title": "Section Help",
- "desc": "If you need more information about what a specific section covers, you can find it by clicking here."
+ "title": "Help",
+ "desc": "More info."
},
"axis": {
- "title": "Ideological Axis",
- "desc": "This is an ideological axis. It marks a range of values between which you perceive yourself at this moment. The central ball is your desired value, and the other balls are the maximum position you would be willing to accept on either side."
+ "title": "Axis",
+ "desc": "Range of values."
},
"axis_title": {
- "title": "Axis Name",
- "desc": "This is the name of the axis opposing two ideological positions."
+ "title": "Name",
+ "desc": "Axis name."
},
"axis_help": {
- "title": "Axis Help",
- "desc": "If you need help with concepts or explanations of the two terms, here is where you find the context."
+ "title": "Help",
+ "desc": "Context."
},
"axis_indifferent": {
"title": "Indifference",
- "desc": "If an axis is indifferent to you and any value works, you can check this box."
+ "desc": "Mark indifferent."
},
"slider_value": {
- "title": "Set Values",
- "desc": "You can move the values by dragging the central ball to one side or the other to indicate your ideal position."
+ "title": "Value",
+ "desc": "Your position."
},
"slider_margin": {
- "title": "Tolerance Margins",
- "desc": "Each margin is independent. The wider the margin, the more willing you are to accept other positions even if they are not your ideal."
+ "title": "Margins",
+ "desc": "Tolerance."
},
"conditioners": {
- "title": "Conditioning Questions",
- "desc": "These questions will activate or deactivate certain axes or entire sections. They apply mostly in lower abstraction levels."
+ "title": "Conditioners",
+ "desc": "Logic."
},
"complete_level": {
- "title": "Complete Level",
- "desc": "Once you have completed a level, you will see the progress at 100% and the bar full."
+ "title": "Complete",
+ "desc": "100%."
},
"finish": {
- "title": "We hope you enjoy it!",
- "desc": "You are ready to start defining your atlas."
+ "title": "Enjoy!",
+ "desc": "Ready."
},
"header_toggle": {
- "title": "Collapse Description",
- "desc": "If the level description takes up too much space, you can collapse or expand it using this button to focus on the axes."
+ "title": "Toggle",
+ "desc": "Expand/Collapse."
}
},
- "guest_prompt": {
- "title": "Continue as guest?",
- "subtitle": "You can explore the Atlas without an account, but your answers won't be saved permanently.",
- "yes": "Create Account",
- "no": "Continue"
- },
"buttons": {
"next": "Next",
- "prev": "Previous",
- "done": "Finish"
+ "prev": "Prev",
+ "done": "Done"
},
- "restart_tutorial": "View Tutorial"
- },
- "Encyclopedia": {
- "title": "Ideological Encyclopedia",
- "subtitle": "Explore and understand the different currents of thought that make up the political spectrum.",
- "search_placeholder": "Search ideology...",
- "no_results": "No ideologies found",
- "read_more": "Read more",
- "tab_supporter": "Supporter",
- "tab_neutral": "Neutral",
- "tab_detractor": "Detractor",
- "ideology_tag": "Ideology",
- "close": "Close",
- "explore_in_atlas": "Explore atlas",
- "no_description": "No description available.",
- "sort_label": "Sort by",
- "sort_name": "Name",
- "sort_affinity": "Affinity",
- "affinity_label": "Affinity",
- "sort_name_asc": "Name (A-Z)",
- "sort_name_desc": "Name (Z-A)",
- "sort_affinity_desc": "Highest Affinity",
- "sort_affinity_asc": "Lowest Affinity",
- "affinity_loading": "Calculating...",
- "secular": "Secular",
- "location_label": "Location",
- "religion_label": "Belief",
- "read_full_article": "Read full article"
+ "restart_tutorial": "Tutorial"
}
}
diff --git a/messages/es.json b/messages/es.json
index 04327a8..11779ed 100644
--- a/messages/es.json
+++ b/messages/es.json
@@ -115,7 +115,10 @@
"invalid_token_title": "Enlace no válido",
"invalid_token_description": "Este enlace de recuperación ha caducado o no es válido. Por favor, solicita uno nuevo.",
"reset_password_error": "Hubo un error al restablecer la contraseña.",
- "invalid_username_format": "Solo letras, números y @/./+/-/_ (sin espacios)"
+ "invalid_username_format": "Solo letras, números y @/./+/-/_ (sin espacios)",
+ "password_too_short": "La contraseña debe tener al menos 8 caracteres",
+ "password_numeric": "La contraseña debe contener al menos un número",
+ "invalid_email": "El correo electrónico no es válido"
},
"Footer": {
"privacy": "Privacidad",
@@ -136,6 +139,16 @@
"description_already_verified": "Tu cuenta ya fue verificada anteriormente. No necesitas realizar ninguna acción adicional."
},
"Atlas": {
+ "public_profile_title": "Perfil Ideológico",
+ "public_profile_description": "Ver perfil ideológico detallado y comparativa.",
+ "complexity_level": "Nivel de Complejidad",
+ "complexity_subtitle": "Selecciona profundidad de análisis",
+ "header_title": "Atlas Ideológico",
+ "header_description": "Explora las diferentes dimensiones",
+ "context_section": "Contexto",
+ "progress_label": "Progreso: {name}",
+ "discover_ideology_btn": "Descubrir mi Ideología",
+ "share_button": "Compartir",
"you_label": "Tú",
"your_answer_label": "Tu respuesta",
"their_answer_label": "Su respuesta",
@@ -145,6 +158,13 @@
"discovery_lock_desc": "Para descubrir tu ideología y guardarla permanentemente, te recomendamos crear una cuenta. Sin embargo, puedes continuar anónimamente.",
"discovery_lock_login": "Iniciar Sesión / Registrarse",
"discovery_lock_cancel": "Continuar Anónimo",
+ "welcome_modal": {
+ "title": "Bienvenido al Atlas",
+ "description": "¿Quieres aprender a usar la herramienta con un breve tutorial interactivo? Te enseñaremos cómo funcionan los ejes, márgenes y condicionantes.",
+ "start_btn": "Ver Tutorial",
+ "skip_btn": "Saltar Tutorial",
+ "guest_note": "Nota: Estás en modo invitado. Tus respuestas se guardarán localmente."
+ },
"guest_warning": {
"title": "¿Continuar como invitado?",
"description": "Puedes realizar el test sin cuenta, pero tus respuestas se guardarán solo en este dispositivo y podrías perderlas. Al finalizar podrás comparar tu afinidad igualmente.",
@@ -157,14 +177,9 @@
"dismiss": "Entendido, continuaré sin guardar"
},
"title": "Atlas Ideológico",
- "complexity_level": "Nivel de Abstracción",
"context_configuration": "Configuración de Contexto",
"selector_placeholder": "Selector para {type}",
"no_questions": "No hay preguntas disponibles en esta sección.",
- "header_title": "Atlas Ideológico",
- "header_description": "Define tu posición en el espectro.",
- "complexity_subtitle": "Selecciona el nivel de profundidad",
- "context_section": "Contexto",
"select_placeholder": "Seleccionar",
"options_label": "Opciones",
"yes": "Sí",
@@ -177,14 +192,12 @@
"conditioned_label": "CONDICIONADA",
"depends_on_label": "Depende de",
"asymmetric_label": "ASIMÉTRICO",
- "progress_label": "Progreso {name}",
"share_posture_title": "Compartir Postura",
"share_posture_description": "Comparte tu posición en el espectro ideológico mediante este enlace único. Cualquiera con el enlace podrá ver tu configuración.",
"direct_link_label": "ENLACE DIRECTO",
"copied": "Copiado",
"copy": "Copiar",
"link_copied_success": "¡Enlace copiado al portapapeles correctamente!",
- "share_button": "Compartir",
"public_profile_badge": "PERFIL PÚBLICO",
"similarity_label": "SIMILITUD CONTIGO",
"affinity_identical": "Idéntico",
@@ -215,7 +228,6 @@
"ideology_definition_label": "Definición Ideológica",
"back_to_encyclopedia": "Volver a la Enciclopedia",
"admin_mode_label": "Modo Edición de Ideología",
- "discover_ideology_btn": "Descubre tu Ideología",
"discovery_title": "Análisis de Afinidad Ideológica",
"discovery_subtitle": "Calculando tu compatibilidad con las ideologías definidas en el sistema en tiempo real basado en tus respuestas actuales.",
"calculating_affinity": "Calculando...",
@@ -228,247 +240,10 @@
"read_more": "Leer más",
"read_less": "Leer menos"
},
- "Profile": {
- "page_title": "Configuración de Perfil",
- "header_title": "Configuración de Perfil",
- "header_description": "Gestiona tu identidad, preferencias y privacidad en el Atlas Ideológico.",
- "public_profile": "Perfil Público",
- "website_label": "Sitio Web",
- "first_name_label": "Nombre",
- "last_name_label": "Apellidos",
- "bio_label": "Biografía",
- "preferences_title": "Preferencias Generales",
- "language_label": "Idioma",
- "language_select": "Seleccionar idioma",
- "appearance_label": "Apariencia",
- "theme_select": "Seleccionar tema",
- "security_title": "Seguridad",
- "change_password_title": "Cambiar Contraseña",
- "new_password_label": "Nueva contraseña",
- "privacy_title": "Privacidad",
- "visibility_label": "Visibilidad del Perfil",
- "visibility_description": "Define quién puede ver tu posición en el espectro.",
- "public": "Público",
- "private": "Privado",
- "save_all": "Guardar Todo",
- "saved": "Guardado",
- "menu_configuration": "MENÚ DE CONFIGURACIÓN",
- "view_public_profile": "Ver Perfil Público",
- "general_preferences": "Preferencias Generales",
- "save_changes": "Guardar Cambios",
- "cancel": "Cancelar",
- "public_profile_desc": "Información visible para otros usuarios del Atlas.",
- "bio_placeholder": "",
- "preferences_desc": "Personaliza tu experiencia en la aplicación.",
- "security_desc": "Protege tu cuenta y datos sensibles.",
- "privacy_desc": "Controla quién puede ver tu actividad.",
- "email_not_verified_warning": "Usuario no verificado, por favor revisa tu correo."
- },
- "Legal": {
- "table_of_contents": "Tabla de Contenidos",
- "intro_title": "Introducción",
- "collection_title": "Recopilación de Datos",
- "usage_title": "Uso de la Información",
- "cookies_title": "Uso de Cookies",
- "rights_title": "Derechos del Usuario",
- "contact_title": "Contacto",
- "need_help_title": "¿Necesitas ayuda extra?",
- "need_help_desc": "Nuestro equipo legal está disponible para resolver dudas específicas sobre tus datos.",
- "open_ticket": "Contactar Soporte",
- "privacy_policy_title": "Política de Privacidad",
- "privacy_policy_subtitle": "Tu privacidad es fundamental. Nos comprometemos a proteger tu identidad y a no utilizar rastreadores invasivos.",
- "last_updated": "Última actualización",
- "intro_p1": "Bienvenido a Ideological Atlas. Esta Política de Privacidad describe cómo tratamos tu información personal. Al acceder a nuestros servicios, aceptas las prácticas descritas.",
- "intro_p2": "Nuestra misión es mapear las ideologías de manera transparente. No comerciamos con tus datos ni utilizamos técnicas de rastreo ocultas.",
- "col_account_title": "Información de Cuenta",
- "col_account_desc": "Recopilamos datos básicos como tu nombre, dirección de correo electrónico y preferencias de idioma cuando te registras para crear una cuenta personalizada.",
- "col_interaction_title": "Datos de Interacción",
- "col_interaction_desc": "Registramos tus respuestas a los cuestionarios ideológicos, tus marcadores en el atlas y el tiempo dedicado a explorar diferentes nodos de información.",
- "col_tech_title": "Datos Técnicos",
- "col_tech_desc": "Recopilamos automáticamente información sobre tu dispositivo, dirección IP, tipo de navegador y sistema operativo para optimizar la experiencia visual del Atlas.",
- "col_contrib_title": "Contribuciones",
- "col_contrib_desc": "Cualquier contenido que publiques voluntariamente en los foros de la comunidad o comentarios en nodos específicos será visible públicamente.",
- "usage_intro": "No vendemos tus datos a terceros. Utilizamos la información exclusivamente para:",
- "use_algo_title": "Mejora del Algoritmo",
- "use_algo_desc": "Analizamos patrones anónimos para refinar el posicionamiento.",
- "use_perso_title": "Personalización",
- "use_perso_desc": "Adaptamos el contenido sugerido a tus resultados.",
- "use_sec_title": "Seguridad",
- "use_sec_desc": "Protección contra abusos y notificaciones de cuenta.",
- "cookies_desc": "Utilizamos cookies estrictamente necesarias y almacenamiento local para gestionar tu sesión y autenticación de forma segura. No utilizamos cookies de terceros para seguimiento publicitario.",
- "cookies_note_label": "Nota Técnica",
- "cookies_note_text": "Las cookies 'access_token' y 'refresh_token' son esenciales para mantener tu sesión iniciada al recargar la página.",
- "rights_intro": "Garantizamos los siguientes derechos sobre tus datos personales:",
- "right_access_title": "Derecho de Acceso",
- "right_access_desc": "Solicita una copia de todos los datos que tenemos sobre ti.",
- "right_rect_title": "Derecho de Rectificación",
- "right_rect_desc": "Corrige cualquier información inexacta o incompleta en tu perfil.",
- "right_del_title": "Derecho de Supresión",
- "right_del_desc": "Solicita la eliminación total de tu cuenta y datos asociados (\"Derecho al olvido\").",
- "right_port_title": "Derecho a la Portabilidad",
- "right_port_desc": "Recibe tus datos en un formato estructurado para transferirlos a otro servicio.",
- "contact_desc": "Si tienes preguntas sobre esta Política o deseas ejercer tus derechos, contáctanos. Respondemos en 48 horas.",
- "contact_btn": "Enviar Email"
- },
- "Terms": {
- "table_of_contents": "Tabla de Contenidos",
- "title": "Términos de Uso",
- "subtitle": "Normas claras para una plataforma de código abierto y conocimiento libre.",
- "last_updated": "Última actualización",
- "version": "Versión 0.1",
- "sidebar": {
- "intro": "Introducción",
- "acceptance": "1. Aceptación",
- "service": "2. Servicio",
- "responsible": "3. Uso Responsable",
- "accounts": "4. Cuentas",
- "modifications": "5. Modificaciones",
- "liability": "6. Responsabilidad"
- },
- "intro": {
- "p1": "Bienvenido a Ideological Atlas. Esta página describe los términos legales que rigen el uso de nuestra plataforma de visualización de datos ideológicos.",
- "p2": "Al acceder a nuestra plataforma, usted acepta estar sujeto a los siguientes términos y condiciones. Por favor, léalos cuidadosamente."
- },
- "acceptance": {
- "title": "Aceptación de los Términos",
- "p1": "Al acceder o utilizar el Servicio, usted confirma que tiene capacidad legal para celebrar este contrato.",
- "p2": "Si no está de acuerdo con alguna parte de los términos, no podrá acceder al servicio."
- },
- "service": {
- "title": "Descripción del Servicio",
- "p1": "Ideological Atlas es un proyecto sin ánimo de lucro y de código abierto. Las herramientas se ofrecen \"tal cual\" para fines educativos e investigación."
- },
- "responsible": {
- "title": "Uso Responsable y Licencias",
- "desc": "Cómo compartimos nuestro trabajo y qué esperamos de nuestros usuarios.",
- "prohibitions_title": "Prohibiciones Estrictas",
- "prohibitions_desc": "Queda estrictamente prohibido utilizar la plataforma para:",
- "prohibitions_list": [
- "Difundir discursos de odio o discriminación.",
- "Manipular datos para desinformación.",
- "Scraping abusivo que afecte al servidor."
- ],
- "license_title": "Código Abierto y Licencia",
- "license_desc": "El código es Open Source (MIT). Los datos utilizan Creative Commons (CC BY-NC-SA).",
- "license_quote": "Se permite el uso, modificación y distribución con fines no comerciales y debida atribución."
- },
- "accounts": {
- "title": "Cuentas de Colaborador",
- "p1": "Para contribuir datos, es posible que deba registrarse. Fomentamos el uso de identidades verificables para mantener la calidad.",
- "p2": "Usted es responsable de la confidencialidad de su cuenta y de todas las actividades realizadas bajo ella."
- },
- "modifications": {
- "title": "Modificaciones del Servicio",
- "p1": "Nos reservamos el derecho de modificar estos Términos. Los cambios sustanciales serán anunciados en GitHub/Discord con 30 días de antelación."
- },
- "liability": {
- "title": "Limitación de Responsabilidad",
- "p1": "Ideological Atlas no será responsable por daños derivados del uso del servicio. La plataforma es una herramienta educativa experimental."
- },
- "contact_community": {
- "title": "¿Dudas sobre la licencia?",
- "desc": "Nuestra comunidad puede ayudarte a entender cómo usar los datos.",
- "btn": "Contactar Comunidad"
- }
- },
- "FeaturesPage": {
- "hero_title": "El Sistema Operativo Ideológico",
- "hero_subtitle": "Mapea, visualiza y comprende tu posición política con una precisión sin precedentes.",
- "current_title": "Características Actuales",
- "roadmap_title": "Hoja de Ruta",
- "roadmap_subtitle": "Nuestra visión para el futuro del análisis ideológico.",
- "cards": {
- "multidimensional": {
- "title": "Multidimensional",
- "desc": "Más allá de la izquierda y la derecha. Un análisis completo de múltiples ejes."
- },
- "contextual": {
- "title": "Contextual",
- "desc": "Las preguntas se adaptan dinámicamente según tus respuestas previas."
- },
- "privacy": {
- "title": "Privacidad Total",
- "desc": "Tus datos son tuyos. Código abierto y sin rastreadores ocultos."
- }
- },
- "upcoming": {
- "explorer": {
- "title": "Explorador de Ideologías",
- "desc": "Navega por una biblioteca completa de ideologías humanas y sus definiciones."
- },
- "dashboard": {
- "title": "Dashboard Analítico",
- "desc": "Visualiza tus estadísticas, cambios en el tiempo y métricas profundas."
- },
- "countries": {
- "title": "Atlas por Países",
- "desc": "Compara tendencias ideológicas a nivel global, regional y nacional."
- },
- "community": {
- "title": "Comunidad y Grupos",
- "desc": "Conecta con personas afines, forma grupos y debate en espacios moderados."
- },
- "ai": {
- "title": "IA de Ideologías",
- "desc": "Analiza textos, noticias y discursos para identificar sesgos automáticamente."
- },
- "mobile": {
- "title": "Versiones Móviles",
- "desc": "Lleva tu perfil ideológico contigo. Apps nativas para iOS y Android."
- }
- },
- "coming_soon": "Próximamente",
- "help_wanted_title": "Necesitamos tu ayuda",
- "help_wanted_desc": "Este es un proyecto open-source ambicioso. Si eres desarrollador, diseñador o investigador, tu ayuda es bienvenida.",
- "contact_us": "Contáctanos"
- },
- "AboutPage": {
- "hero": {
- "title": "Más allá de la izquierda y la derecha",
- "subtitle": "Una iniciativa de código abierto para desmantelar los diagramas sesgados y construir un estándar de medición política transparente y riguroso.",
- "mission_btn": "Nuestra Misión",
- "github_btn": "Ver Código"
- },
- "story": {
- "title": "Nuestra Historia",
- "content_p1": "Ideological Atlas nació a finales de 2025, fruto de la frustración en discusiones políticas circulares. Nos dimos cuenta de que personas con ideas complejas eran forzadas a etiquetas simplistas porque herramientas obsoletas como el Gráfico de Nolan no podían representarlas.",
- "content_p2": "Somos un equipo pequeño que opera desde España usando VPS alojados en Alemania, sin ánimo de lucro y con un objetivo claro: demostrar que la ideología humana tiene más dimensiones que un simple plano cartesiano.",
- "quote": "La realidad política es demasiado compleja para caber en dos ejes."
- },
- "algorithm": {
- "title": "El Motor de Afinidad",
- "subtitle": "Olvídate de las medias simples. Utilizamos un modelo de Decaimiento Cuadrático para calcular la compatibilidad real.",
- "indifference_title": "Lógica de Indiferencia",
- "indifference_desc": "El sistema respeta la apatía. Si ambos usuarios son indiferentes a un tema, la afinidad es total (100%). Si solo uno lo es, penalizamos levemente (75%) por la falta de conexión.",
- "quadratic_title": "Decaimiento Cuadrático",
- "quadratic_desc": "La afinidad no baja linealmente. Penalizamos suavemente las pequeñas desviaciones (matiz), pero castigamos severamente las grandes diferencias (conflicto).",
- "phases_title": "Dos Fases de Cálculo",
- "phases_overlap": "Fase de Contacto (50-100%): Cuando los rangos de tolerancia se tocan.",
- "phases_gap": "Fase de Brecha (0-50%): Cuando las posturas son irreconciliables.",
- "aggregation_title": "Agregación Jerárquica",
- "aggregation_desc": "Eje → Sección → Complejidad. No mezclamos peras con manzanas; la afinidad se construye capa a capa."
- },
- "contribute": {
- "title": "Únete a la Resistencia",
- "subtitle": "Este proyecto es Open Source y mantenido por la comunidad. Necesitamos tu cerebro.",
- "role_dev": "Desarrolladores",
- "role_dev_desc": "Ayuda con el código en React, Python (Django) y visualización de datos.",
- "role_research": "Investigadores",
- "role_research_desc": "Ayuda a definir nuevos ejes, revisar bibliografía y neutralizar sesgos.",
- "role_translate": "Traductores",
- "role_translate_desc": "Actualmente estamos en ES/EN. Ayúdanos a llegar a más culturas.",
- "role_design": "Diseño & UX",
- "role_design_desc": "Diseña interfaces intuitivas y mejora la experiencia de usuario.",
- "role_product": "Producto",
- "role_product_desc": "Ayuda a definir funcionalidades y la dirección del proyecto.",
- "role_data": "Datos & Analytics",
- "role_data_desc": "Extrae valor de los datos para potenciar el análisis de los usuarios."
- }
- },
"Onboarding": {
"tour": {
"welcome": {
- "desc": "Bienvenido al Atlas Ideológico. Esta guía te enseñará cómo definir tu postura política y descubrir tu afinidad con diferentes ideologías, incluso sin crear una cuenta.",
+ "desc": "Bienvenido al Atlas Ideológico. Esta guía te enseñará cómo definir tu postura política y descubrir tu afinidad con diferentes ideologías.",
"title": "¡Bienvenido al Atlas!"
},
"discovery": {
@@ -540,12 +315,6 @@
"desc": "Si la descripción del nivel ocupa mucho espacio, puedes colapsarla o expandirla usando este botón para centrarte en los ejes."
}
},
- "guest_prompt": {
- "title": "¿Continuar como invitado?",
- "subtitle": "Puedes explorar el Atlas sin cuenta, pero tus respuestas no se guardarán permanentemente.",
- "yes": "Crear Cuenta",
- "no": "Continuar"
- },
"buttons": {
"next": "Siguiente",
"prev": "Anterior",
@@ -579,5 +348,201 @@
"location_label": "Ubicación",
"religion_label": "Creencia",
"read_full_article": "Leer artículo completo"
+ },
+ "FeaturesPage": {
+ "hero_title": "El Futuro del Análisis Político",
+ "hero_subtitle": "Una plataforma en evolución constante para mapear la complejidad ideológica humana.",
+ "current_title": "Funcionalidades Actuales",
+ "roadmap_title": "Hoja de Ruta",
+ "roadmap_subtitle": "Lo que estamos construyendo para el futuro.",
+ "coming_soon": "Próximamente",
+ "help_wanted_title": "Necesitamos tu ayuda",
+ "help_wanted_desc": "Este es un proyecto open-source ambicioso. Si eres desarrollador, diseñador o investigador, tu ayuda es bienvenida.",
+ "contact_us": "Contáctanos",
+ "cards": {
+ "multidimensional": {
+ "title": "Análisis Multidimensional",
+ "desc": "Más allá de izquierda y derecha. Analiza ideologías a través de múltiples ejes y niveles de complejidad."
+ },
+ "contextual": {
+ "title": "Contexto Dinámico",
+ "desc": "Las preguntas se adaptan a tus respuestas anteriores para profundizar donde más importa."
+ },
+ "privacy": {
+ "title": "Privacidad Primero",
+ "desc": "Tus datos son tuyos. Análisis anónimo o perfil privado, tú decides."
+ }
+ },
+ "upcoming": {
+ "dashboard": {
+ "title": "Dashboard Analítico",
+ "desc": "Visualizaciones avanzadas de tus tendencias a lo largo del tiempo."
+ },
+ "countries": {
+ "title": "Adaptación Regional",
+ "desc": "Contextos políticos específicos por país y región."
+ },
+ "community": {
+ "title": "Comunidad",
+ "desc": "Debate y compara posturas con otros usuarios de forma respetuosa."
+ },
+ "ai": {
+ "title": "Insights con IA",
+ "desc": "Análisis profundo de patrones ideológicos asistido por IA."
+ },
+ "mobile": {
+ "title": "App Móvil",
+ "desc": "Lleva el Atlas contigo en iOS y Android."
+ }
+ },
+ "version_badge": "Atlas Ideológico v0.1.0"
+ },
+ "AboutPage": {
+ "hero": {
+ "title": "Sobre el Proyecto",
+ "subtitle": "Explorando las dimensiones del pensamiento político moderno.",
+ "github_btn": "Código Fuente"
+ },
+ "story": {
+ "title": "Nuestra Historia",
+ "content_p1": "El Atlas Ideológico nació de la necesidad de superar la simplificación extrema del eje izquierda-derecha.",
+ "content_p2": "Buscamos proporcionar una herramienta científica y abierta para que cada individuo comprenda su posición en un mundo cada vez más complejo.",
+ "quote": "La política no es una línea, es un mapa infinito."
+ },
+ "algorithm": {
+ "title": "El Algoritmo",
+ "subtitle": "Transparencia total en el cálculo de afinidades.",
+ "indifference_title": "Gestión de la Indiferencia",
+ "indifference_desc": "El sistema distingue entre una postura neutral y la falta de opinión sobre un tema.",
+ "quadratic_title": "Error Cuadrático",
+ "quadratic_desc": "Utilizamos funciones cuadráticas para penalizar de forma justa las desviaciones ideológicas.",
+ "phases_title": "Cálculo por Fases",
+ "phases_gap": "Análisis granular de huecos y solapamientos entre respuestas.",
+ "aggregation_title": "Agregación de Datos",
+ "aggregation_desc": "Cómo los ejes se combinan en secciones y niveles de complejidad."
+ },
+ "contribute": {
+ "title": "Contribuye al Atlas",
+ "subtitle": "Este es un proyecto comunitario y abierto.",
+ "role_dev": "Desarrollo",
+ "role_dev_desc": "React, Next.js, Django y optimización de sistemas.",
+ "role_research": "Investigación",
+ "role_research_desc": "Validación de ejes ideológicos y definiciones.",
+ "role_design": "Diseño",
+ "role_design_desc": "Mejora de la experiencia de usuario y visualización.",
+ "role_product": "Producto",
+ "role_product_desc": "Estrategia y hoja de ruta del proyecto.",
+ "role_data": "Datos",
+ "role_data_desc": "Análisis estadístico y modelos de afinidad.",
+ "role_translate": "Traducción",
+ "role_translate_desc": "Haciendo el Atlas accesible a todo el mundo."
+ }
+ },
+ "Legal": {
+ "privacy_policy_title": "Política de Privacidad",
+ "privacy_policy_subtitle": "Tu privacidad es el pilar fundamental de nuestra plataforma.",
+ "last_updated": "Última actualización",
+ "table_of_contents": "Contenido",
+ "need_help_title": "¿Tienes dudas?",
+ "need_help_desc": "Si tienes preguntas sobre tus datos, estamos aquí para ayudarte.",
+ "open_ticket": "Contactar soporte",
+ "intro_title": "Introducción",
+ "intro_p1": "En Ideological Atlas, nos tomamos muy en serio la protección de tus datos personales.",
+ "intro_p2": "Esta política describe qué datos recogemos y cómo los protegemos, garantizando siempre tu anonimato si así lo decides.",
+ "collection_title": "Recogida de Datos",
+ "col_account_title": "Información de Cuenta",
+ "col_account_desc": "Email y nombre de usuario para usuarios registrados.",
+ "col_interaction_title": "Respuestas del Atlas",
+ "col_interaction_desc": "Tus posiciones en los ejes ideológicos para calcular afinidades.",
+ "col_tech_title": "Datos Técnicos",
+ "col_tech_desc": "Información básica del dispositivo para optimizar la experiencia.",
+ "col_contrib_title": "Contribuciones",
+ "col_contrib_desc": "Sugerencias o informes de errores que nos envíes.",
+ "usage_title": "Uso de la Información",
+ "usage_intro": "Utilizamos tus datos exclusivamente para:",
+ "use_algo_title": "Cálculo de Afinidad",
+ "use_algo_desc": "Comparar tu perfil con ideologías u otros usuarios.",
+ "use_perso_title": "Personalización",
+ "use_perso_desc": "Guardar tus preferencias de tema e idioma.",
+ "use_sec_title": "Seguridad",
+ "use_sec_desc": "Proteger la integridad del sitio y prevenir abusos.",
+ "cookies_title": "Cookies",
+ "cookies_desc": "Solo usamos cookies técnicas esenciales para el funcionamiento de la sesión y tus preferencias.",
+ "cookies_note_label": "Importante",
+ "cookies_note_text": "No usamos cookies de rastreo de terceros ni fines publicitarios.",
+ "rights_title": "Tus Derechos",
+ "rights_intro": "Tienes control total sobre tu información conforme al RGPD.",
+ "right_access_title": "Acceso",
+ "right_access_desc": "Puedes ver todos tus datos en tu perfil.",
+ "right_rect_title": "Rectificación",
+ "right_rect_desc": "Puedes cambiar tus respuestas en cualquier momento.",
+ "right_del_title": "Eliminación",
+ "right_del_desc": "Puedes borrar tu cuenta y datos permanentemente.",
+ "right_port_title": "Portabilidad",
+ "right_port_desc": "Exporta tus datos en formato estructurado.",
+ "contact_title": "Contacto Legal",
+ "contact_desc": "Para cualquier asunto legal o de privacidad, escríbenos directamente.",
+ "contact_btn": "Enviar email"
+ },
+ "Terms": {
+ "title": "Términos de Uso",
+ "subtitle": "Normas de convivencia y uso de la plataforma.",
+ "version": "Versión 0.1.0",
+ "sidebar": {
+ "intro": "Bienvenida",
+ "acceptance": "Aceptación",
+ "service": "El Servicio",
+ "responsible": "Uso Responsable",
+ "accounts": "Cuentas",
+ "modifications": "Cambios",
+ "liability": "Responsabilidad"
+ },
+ "intro": {
+ "p1": "Bienvenido a Ideological Atlas. Al usar nuestra web, aceptas estas normas.",
+ "p2": "Este es un proyecto educativo y de investigación social."
+ },
+ "acceptance": {
+ "title": "Aceptación de los términos",
+ "p1": "El acceso a la web implica la aceptación total de estos términos.",
+ "p2": "Si no estás de acuerdo, por favor, no utilices el servicio."
+ },
+ "service": {
+ "title": "Descripción del servicio",
+ "p1": "Ofrecemos una herramienta de análisis ideológico basada en modelos matemáticos abiertos."
+ },
+ "responsible": {
+ "title": "Uso Responsable",
+ "desc": "Tu comportamiento afecta a la comunidad.",
+ "prohibitions_title": "Prohibiciones",
+ "prohibitions_desc": "Está estrictamente prohibido:",
+ "prohibitions_list": [
+ "Uso de bots para alterar estadísticas.",
+ "Ataques de denegación de servicio.",
+ "Extracción masiva de datos (scraping) sin permiso.",
+ "Suplantación de identidad."
+ ],
+ "license_title": "Licencia de Código",
+ "license_desc": "Nuestro código es abierto bajo licencia MIT.",
+ "license_quote": "Libre para usar, estudiar y mejorar."
+ },
+ "accounts": {
+ "title": "Gestión de Cuentas",
+ "p1": "Eres responsable de mantener la confidencialidad de tu contraseña.",
+ "p2": "Nos reservamos el derecho de cerrar cuentas que violen estas normas."
+ },
+ "modifications": {
+ "title": "Modificaciones",
+ "p1": "Podemos actualizar estos términos. Te avisaremos de cambios importantes."
+ },
+ "liability": {
+ "title": "Limitación de Responsabilidad",
+ "p1": "No nos hacemos responsables de las interpretaciones personales de los resultados del Atlas."
+ },
+ "contact_community": {
+ "title": "¿Dudas legales?",
+ "desc": "Nuestro equipo legal revisará cualquier consulta.",
+ "btn": "Consultar"
+ },
+ "last_updated": "Última actualización"
}
}
diff --git a/src/app/[locale]/(auth)/forgot-password/page.tsx b/src/app/[locale]/(auth)/forgot-password/page.tsx
index 3dbbd0e..5c1a32d 100644
--- a/src/app/[locale]/(auth)/forgot-password/page.tsx
+++ b/src/app/[locale]/(auth)/forgot-password/page.tsx
@@ -1,11 +1,17 @@
import { AuthTemplate } from '@/components/templates/AuthTemplate';
-import { ForgotPasswordForm } from '@/components/organisms/ForgotPasswordForm';
+import { ForgotPasswordForm } from '@/components/organisms/auth/ForgotPasswordForm';
+import { getTranslations } from 'next-intl/server';
import type { Metadata } from 'next';
-export const metadata: Metadata = {
- title: 'Recuperar Contraseña | Ideological Atlas',
- description: 'Solicita un enlace para restablecer tu contraseña.',
-};
+export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise {
+ const { locale } = await params;
+ const t = await getTranslations({ locale, namespace: 'Auth' });
+
+ return {
+ title: `${t('forgot_password_title')} | Ideological Atlas`,
+ description: t('forgot_password_subtitle'),
+ };
+}
export default function ForgotPasswordPage() {
return (
diff --git a/src/app/[locale]/(auth)/login/page.tsx b/src/app/[locale]/(auth)/login/page.tsx
index a32fec8..cd814c8 100644
--- a/src/app/[locale]/(auth)/login/page.tsx
+++ b/src/app/[locale]/(auth)/login/page.tsx
@@ -1,11 +1,17 @@
import { AuthTemplate } from '@/components/templates/AuthTemplate';
-import { LoginForm } from '@/components/organisms/LoginForm';
+import { LoginForm } from '@/components/organisms/auth/LoginForm';
+import { getTranslations } from 'next-intl/server';
import type { Metadata } from 'next';
-export const metadata: Metadata = {
- title: 'Iniciar Sesión | Ideological Atlas',
- description: 'Inicia sesión para acceder a tu perfil ideológico.',
-};
+export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise {
+ const { locale } = await params;
+ const t = await getTranslations({ locale, namespace: 'Auth' });
+
+ return {
+ title: `${t('login_title')} | Ideological Atlas`,
+ description: t('login_subtitle'),
+ };
+}
export default function LoginPage() {
return (
diff --git a/src/app/[locale]/(auth)/register/page.tsx b/src/app/[locale]/(auth)/register/page.tsx
index cedaa17..ac8315c 100644
--- a/src/app/[locale]/(auth)/register/page.tsx
+++ b/src/app/[locale]/(auth)/register/page.tsx
@@ -1,11 +1,16 @@
import { AuthTemplate } from '@/components/templates/AuthTemplate';
-import { RegisterForm } from '@/components/organisms/RegisterForm';
+import { RegisterForm } from '@/components/organisms/auth/RegisterForm';
+import { getTranslations } from 'next-intl/server';
import type { Metadata } from 'next';
-export const metadata: Metadata = {
- title: 'Crear Cuenta | Ideological Atlas',
- description: 'Regístrate para establecer tu perfil ideológico.',
-};
+export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise {
+ const { locale } = await params;
+ const t = await getTranslations({ locale, namespace: 'Auth' });
+ return {
+ title: `${t('register_title')} | Ideological Atlas`,
+ description: t('register_subtitle'),
+ };
+}
export default function RegisterPage() {
return (
diff --git a/src/app/[locale]/(auth)/reset-password/[token]/page.tsx b/src/app/[locale]/(auth)/reset-password/[token]/page.tsx
index 8e1b630..5c1617f 100644
--- a/src/app/[locale]/(auth)/reset-password/[token]/page.tsx
+++ b/src/app/[locale]/(auth)/reset-password/[token]/page.tsx
@@ -1,11 +1,16 @@
import { AuthTemplate } from '@/components/templates/AuthTemplate';
-import { ResetPasswordForm } from '@/components/organisms/ResetPasswordForm';
+import { ResetPasswordForm } from '@/components/organisms/auth/ResetPasswordForm';
+import { getTranslations } from 'next-intl/server';
import type { Metadata } from 'next';
-export const metadata: Metadata = {
- title: 'Restablecer Contraseña | Ideological Atlas',
- description: 'Establece una nueva contraseña segura para tu cuenta.',
-};
+export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise {
+ const { locale } = await params;
+ const t = await getTranslations({ locale, namespace: 'Auth' });
+ return {
+ title: `${t('reset_password_title')} | Ideological Atlas`,
+ description: t('reset_password_subtitle'),
+ };
+}
export default async function ResetPasswordPage({ params }: { params: Promise<{ token: string }> }) {
const { token } = await params;
diff --git a/src/app/[locale]/(auth)/verify/[uuid]/page.tsx b/src/app/[locale]/(auth)/verify/[uuid]/page.tsx
index 5642973..fd019df 100644
--- a/src/app/[locale]/(auth)/verify/[uuid]/page.tsx
+++ b/src/app/[locale]/(auth)/verify/[uuid]/page.tsx
@@ -1,11 +1,15 @@
import { AuthTemplate } from '@/components/templates/AuthTemplate';
-import { VerifyStatus } from '@/components/organisms/VerifyStatus';
+import { VerifyStatus } from '@/components/organisms/auth/VerifyStatus';
+import { getTranslations } from 'next-intl/server';
import type { Metadata } from 'next';
-export const metadata: Metadata = {
- title: 'Verificación | Ideological Atlas',
- description: 'Verificando tu cuenta de usuario.',
-};
+export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise {
+ const { locale } = await params;
+ const t = await getTranslations({ locale, namespace: 'Verify' });
+ return {
+ title: `${t('title_loading')} | Ideological Atlas`,
+ };
+}
export default function VerifyPage() {
return (
diff --git a/src/app/[locale]/(auth)/welcome/page.tsx b/src/app/[locale]/(auth)/welcome/page.tsx
index b6b4ddc..fe8e73e 100644
--- a/src/app/[locale]/(auth)/welcome/page.tsx
+++ b/src/app/[locale]/(auth)/welcome/page.tsx
@@ -1,10 +1,15 @@
import { AuthTemplate } from '@/components/templates/AuthTemplate';
-import { PostRegisterStatus } from '@/components/organisms/PostRegisterStatus';
+import { PostRegisterStatus } from '@/components/organisms/auth/PostRegisterStatus';
+import { getTranslations } from 'next-intl/server';
import type { Metadata } from 'next';
-export const metadata: Metadata = {
- title: '¡Bienvenido! | Ideological Atlas',
-};
+export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise {
+ const { locale } = await params;
+ const t = await getTranslations({ locale, namespace: 'Auth' });
+ return {
+ title: `${t('post_register_title')} | Ideological Atlas`,
+ };
+}
export default function WelcomePage() {
return (
diff --git a/src/app/[locale]/answers/[uuid]/page.tsx b/src/app/[locale]/answers/[uuid]/page.tsx
index 4c7c167..644e96f 100644
--- a/src/app/[locale]/answers/[uuid]/page.tsx
+++ b/src/app/[locale]/answers/[uuid]/page.tsx
@@ -1,10 +1,16 @@
import { PublicAtlasView } from '@/components/organisms/Atlas/PublicAtlasView';
+import { getTranslations } from 'next-intl/server';
import type { Metadata } from 'next';
-export const metadata: Metadata = {
- title: 'Perfil Ideológico | Ideological Atlas',
- description: 'Ver perfil ideológico detallado.',
-};
+export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise {
+ const { locale } = await params;
+ const t = await getTranslations({ locale, namespace: 'Atlas' });
+
+ return {
+ title: `${t('public_profile_title')} | Ideological Atlas`,
+ description: t('public_profile_description'),
+ };
+}
export default async function PublicAnswerPage({ params }: { params: Promise<{ uuid: string }> }) {
const { uuid } = await params;
diff --git a/src/app/[locale]/atlas/page.tsx b/src/app/[locale]/atlas/page.tsx
index 94b5f3d..1686397 100644
--- a/src/app/[locale]/atlas/page.tsx
+++ b/src/app/[locale]/atlas/page.tsx
@@ -1,10 +1,16 @@
import { AtlasView } from '@/components/organisms/Atlas/AtlasView';
+import { getTranslations } from 'next-intl/server';
import type { Metadata } from 'next';
-export const metadata: Metadata = {
- title: 'Atlas Ideológico | Ideological Atlas',
- description: 'Define tu posición en el espectro.',
-};
+export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise {
+ const { locale } = await params;
+ const t = await getTranslations({ locale, namespace: 'Atlas' });
+
+ return {
+ title: `${t('header_title')} | Ideological Atlas`,
+ description: t('header_description'),
+ };
+}
export default function AtlasPage() {
return (
diff --git a/src/app/[locale]/legal/terms-of-use/page.tsx b/src/app/[locale]/legal/terms-of-use/page.tsx
index 070405c..ac64ed6 100644
--- a/src/app/[locale]/legal/terms-of-use/page.tsx
+++ b/src/app/[locale]/legal/terms-of-use/page.tsx
@@ -1,15 +1,14 @@
'use client';
-import { useTranslations, useLocale } from 'next-intl';
-import Link from 'next/link';
+import { useTranslations } from 'next-intl';
import { motion, type Variants } from 'framer-motion';
import { LegalSidebar } from '@/components/molecules/legal/LegalSidebar';
import { LegalSection } from '@/components/molecules/legal/LegalSection';
+import { LegalPageHeader } from '@/components/organisms/legal/LegalPageHeader';
+import { LegalContactCard } from '@/components/molecules/legal/LegalContactCard';
export default function TermsOfUsePage() {
const t = useTranslations('Terms');
- const tCommon = useTranslations('Common');
- const locale = useLocale();
const sidebarItems = [
{ id: 'intro', icon: 'info', label: t('sidebar.intro') },
@@ -29,15 +28,6 @@ export default function TermsOfUsePage() {
},
};
- const headerVariants: Variants = {
- hidden: { opacity: 0, y: -20 },
- visible: {
- opacity: 1,
- y: 0,
- transition: { duration: 0.6, ease: 'easeOut' },
- },
- };
-
return (