mirror of
https://github.com/godotengine/godot-website.git
synced 2026-09-03 23:34:58 +03:00
Add localization plugin and initial es translation (#1011)
* Add plugin and initial `es` translation * Add missing features to plugin * Translate home page and sponsors * Add language selector and widen nav * Fix mobile style and language selector * Add js helper file * Update header.css * translate footer
This commit is contained in:
16
Gemfile.lock
16
Gemfile.lock
@@ -1,10 +1,10 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
addressable (2.8.1)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
addressable (2.8.7)
|
||||
public_suffix (>= 2.0.2, < 7.0)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.1.10)
|
||||
concurrent-ruby (1.3.5)
|
||||
em-websocket (0.5.3)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0)
|
||||
@@ -13,7 +13,7 @@ GEM
|
||||
ffi (1.15.5-x64-unknown)
|
||||
forwardable-extended (2.6.0)
|
||||
http_parser.rb (0.8.0)
|
||||
i18n (1.12.0)
|
||||
i18n (1.14.7)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (4.2.2)
|
||||
addressable (~> 2.4)
|
||||
@@ -38,8 +38,8 @@ GEM
|
||||
sassc (> 2.0.1, < 3.0)
|
||||
jekyll-watch (2.2.1)
|
||||
listen (~> 3.0)
|
||||
kramdown (2.4.0)
|
||||
rexml
|
||||
kramdown (2.5.1)
|
||||
rexml (>= 3.3.9)
|
||||
kramdown-parser-gfm (1.1.0)
|
||||
kramdown (~> 2.0)
|
||||
liquid (4.0.4)
|
||||
@@ -49,11 +49,11 @@ GEM
|
||||
mercenary (0.4.0)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (5.0.1)
|
||||
public_suffix (6.0.1)
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rexml (3.3.9)
|
||||
rexml (3.4.0)
|
||||
rouge (3.30.0)
|
||||
safe_yaml (1.0.5)
|
||||
sassc (2.4.0)
|
||||
|
||||
@@ -67,12 +67,9 @@ defaults:
|
||||
plugins:
|
||||
- jekyll-paginate-v2
|
||||
- jekyll-redirect-from
|
||||
# - jekyll-multiple-languages-plugin
|
||||
|
||||
# Internationalization
|
||||
languages: ["en", "es"]
|
||||
exclude_from_localizations: ["assets", "storage"]
|
||||
default_lang: "en"
|
||||
lang: "en"
|
||||
|
||||
# Pagination (used by the blog)
|
||||
pagination:
|
||||
|
||||
91
_i18n/en.yml
91
_i18n/en.yml
@@ -1,3 +1,90 @@
|
||||
meta:
|
||||
description: Develop your 2D & 3D games, cross-platform projects, or even XR ideas!
|
||||
header:
|
||||
features: Features
|
||||
showcase: Showcase
|
||||
blog: Blog
|
||||
community: Community
|
||||
assets: Assets
|
||||
download: Download
|
||||
docs: Docs
|
||||
contribute: Contribute
|
||||
donate: Donate
|
||||
language: Language
|
||||
footer:
|
||||
download: Download
|
||||
documentation: Documentation
|
||||
features: Features
|
||||
web_editor: Web editor
|
||||
release_archive: Release archive
|
||||
source_code: Source code
|
||||
project: Project
|
||||
blog: Blog
|
||||
code_of_conduct: Code of conduct
|
||||
governance: Governance
|
||||
teams: Teams
|
||||
priorities: Priorities
|
||||
communities: Communities
|
||||
resources: Resources
|
||||
asset_library: Asset library
|
||||
press_kit: Press kit
|
||||
showcase: Showcase
|
||||
education: Education
|
||||
foundation: Foundation
|
||||
about: About
|
||||
donate: Donate
|
||||
license: License
|
||||
privacy_policy: Privacy policy
|
||||
contact_us: Contact us
|
||||
text: "Juan Linietsky, Ariel Manzur and <a href='https://github.com/godotengine/godot/blob/master/AUTHORS.md' target='_blank' rel='noopener'>contributors</a>. Hosted by the <a href='https://godot.foundation/' target='_blank' rel='noopener'>Godot Foundation</a>. Website <a href='https://github.com/godotengine/godot-website' target='_blank' rel='noopener'>source code on GitHub</a>."
|
||||
sponsors:
|
||||
title: "Godot is sponsored by:"
|
||||
text: If you are interested in a corporate sponsorship, please write to <a href='mailto:contact@godot.foundation'>contact@godot.foundation</a>.<br>To donate as an individual, you can do so through the <a href='https://fund.godotengine.org/'>Godot Engine development fund</a>.
|
||||
cta: Donate
|
||||
home:
|
||||
h1: "The game engine you've been waiting for."
|
||||
subtitle: "A simple, responsive Jekyll theme for your blog or site."
|
||||
h1: Your free, open‑source<br>game engine.
|
||||
subtitle: Develop your 2D & 3D games, cross-platform projects, or even XR ideas!
|
||||
whats_new: What's new
|
||||
download_latest: Download Latest
|
||||
looking_for: 'Looking for <a href="/download/windows/" class="set-os-download-url" data-version="3" title="Download the long-term support version of Godot 3">Godot 3</a>, our <a href="/download/archive">experimental releases</a>, or a <a href="/download/archive">previous version</a>?'
|
||||
latest_news: Latest news
|
||||
more_news: More news
|
||||
cards:
|
||||
h2: A different way to make games
|
||||
design:
|
||||
title: Innovative design
|
||||
text: Godot's Node and Scene system gives you both power and flexibility to create anything.
|
||||
script:
|
||||
title: Use the right language for the job
|
||||
text: Keep your code modular with an object-oriented API using Godot's own GDScript, C#, C++, or bring your own using GDExtension.
|
||||
extra: C# support is currently only available for desktop and mobile platforms as of Godot 4.2.<br>Use Godot 3 to run C# on the Web platform.
|
||||
2d:
|
||||
title: Dedicated 2D engine
|
||||
text: Make crisp and performant 2D games with Godot's dedicated 2D rendering engine with real 2D pixel coordinates and 2D nodes.
|
||||
3d:
|
||||
title: Simple and powerful 3D
|
||||
text: Godot's 3D nodes give you everything you need to build, animate, and render your 3D worlds and characters.
|
||||
deploy:
|
||||
title: Release on all platforms
|
||||
text: Deploy your game on desktop, mobile, and the web in seconds. Godot even supports consoles through third party publishers.
|
||||
open:
|
||||
title: Open Source
|
||||
text: "Truly open development: anyone who contributes to Godot benefits equally from others’ contributions."
|
||||
cta: Learn more about using Godot
|
||||
get_involved:
|
||||
title: Get involved
|
||||
text: Join the community and help create a game engine that belongs to everybody.
|
||||
cards:
|
||||
cta: Learn more
|
||||
code:
|
||||
title: Code
|
||||
text: If you know how to code, you can help by fixing bugs and working with engine contributors towards the implementation of new features.
|
||||
document:
|
||||
title: Document
|
||||
text: Documentation quality is essential in a game engine; help make it better by updating the API reference, writing new guides or submitting corrections.
|
||||
report:
|
||||
title: Report
|
||||
text: Found a problem with the engine? Don't forget to report it so that developers can track it down.
|
||||
foundation:
|
||||
text: "You don't need to be an engine developer to help Godot. Join the <a href='https://fund.godotengine.org/'>development fund</a> and help us make the Godot Engine even more awesome!"
|
||||
donate: Donate
|
||||
91
_i18n/es.yml
91
_i18n/es.yml
@@ -1,3 +1,90 @@
|
||||
meta:
|
||||
description: Desarrolla tus juegos 2D y 3D, proyectos multiplataforma o incluso XR
|
||||
header:
|
||||
features: Funciones
|
||||
showcase: Creaciones
|
||||
blog: Blog
|
||||
community: Comunidad
|
||||
assets: Assets
|
||||
download: Descargar
|
||||
docs: Docs
|
||||
contribute: Contribuir
|
||||
donate: Donar
|
||||
language: Idioma
|
||||
footer:
|
||||
download: Descargar
|
||||
documentation: Documentación
|
||||
features: Funciones
|
||||
web_editor: Editor web
|
||||
release_archive: Archivo de versiones
|
||||
source_code: Código fuente
|
||||
project: Proyecto
|
||||
blog: Blog
|
||||
code_of_conduct: Código de conducta
|
||||
governance: Gobernanza
|
||||
teams: Equipos
|
||||
priorities: Prioridades
|
||||
communities: Comunidades
|
||||
resources: Recursos
|
||||
asset_library: Biblioteca de Assets
|
||||
press_kit: Kit de prensa
|
||||
showcase: Creaciones
|
||||
education: Educación
|
||||
foundation: Fundación
|
||||
about: Acerca de
|
||||
donate: Donar
|
||||
license: Licencia
|
||||
privacy_policy: Política de privacidad
|
||||
contact_us: Contáctanos
|
||||
text: "Juan Linietsky, Ariel Manzur y <a href='https://github.com/godotengine/godot/blob/master/AUTHORS.md' target='_blank' rel='noopener'>colaboradores</a>. Alojado por la <a href='https://godot.foundation/' target='_blank' rel='noopener'>Godot Foundation</a>. <a href='https://github.com/godotengine/godot-website' target='_blank' rel='noopener'>Código fuente de la web en GitHub</a>."
|
||||
sponsors:
|
||||
title: "Godot está patrocinado por:"
|
||||
text: Si estás interesado en un patrocinio corporativo, por favor escribe a <a href='mailto:'mailto:contact@godot.foundation'>contact@godot.foundation</a>.<br>Si quieres donar como individuo, puedes hacerlo a través del <a href='https://fund.godotengine.org/'>fondo de desarrollo de Godot Engine</a>.
|
||||
cta: Donar
|
||||
home:
|
||||
h1: "Español"
|
||||
subtitle: "Un tema Jekyll simple y adaptable para tu blog o sitio."
|
||||
h1: Tu motor de juegos gratuito<br> y de código abierto.
|
||||
subtitle: Desarrolla tus juegos 2D y 3D, proyectos multiplataforma o incluso XR
|
||||
whats_new: Novedades
|
||||
download_latest: Descargar Última Versión
|
||||
looking_for: '¿Buscas <a href="/download/windows/" class="set-os-download-url" data-version="3" title="Descarga la versión de soporte a largo plazo de Godot 3">Godot 3</a>, nuestras <a href="/download/archive">versiones experimentales</a>, o una <a href="/download/archive">versión anterior</a>?'
|
||||
latest_news: Últimas noticias (en inglés)
|
||||
more_news: Más noticias
|
||||
cards:
|
||||
h2: Una forma diferente de hacer juegos
|
||||
design:
|
||||
title: "Diseño innovador"
|
||||
text: "El sistema de Nodos y Escenas de Godot te da poder y flexibilidad para crear cualquier cosa."
|
||||
script:
|
||||
title: "Usa el lenguaje adecuado para cada trabajo"
|
||||
text: "Mantén tu código modular con una API orientada a objetos usando GDScript, C#, C++, o trae el tuyo propio usando GDExtension."
|
||||
extra: "El soporte para C# solo está disponible actualmente para plataformas de escritorio y móviles en Godot 4.2. Usa Godot 3 para ejecutar C# en Web."
|
||||
2d:
|
||||
title: "Motor 2D dedicado"
|
||||
text: "Crea juegos 2D con el motor de renderizado 2D dedicado de Godot con coordenadas de píxeles 2D reales y nodos 2D."
|
||||
3d:
|
||||
title: "3D simple y potente"
|
||||
text: "Los nodos 3D de Godot te dan todo lo que necesitas para construir, animar y renderizar tus mundos y personajes 3D."
|
||||
deploy:
|
||||
title: "Publica en todas las plataformas"
|
||||
text: "Publica tu juego en escritorio, móvil y web en segundos. Godot incluso soporta consolas a través de terceros."
|
||||
open:
|
||||
title: "Código abierto"
|
||||
text: "Desarrollo verdaderamente abierto: cualquiera que contribuya a Godot se beneficia igualmente de las contribuciones de otros."
|
||||
cta: ¿Quieres saber más sobre Godot?
|
||||
get_involved:
|
||||
title: Contribuye
|
||||
text: "Únete a la comunidad y ayuda a crear un motor de juegos que pertenezca a todos."
|
||||
cards:
|
||||
cta: Ver más
|
||||
code:
|
||||
title: Código
|
||||
text: Si sabes programar, puedes ayudar a corregir errores y trabajar con los contribuyentes del motor con la implementación de nuevas funciones.
|
||||
document:
|
||||
title: Documenta
|
||||
text: La calidad de la documentación es esencial en un motor de juegos; ayúdanos a mejorarla actualizando la referencia de la API, escribiendo nuevas guías o enviando correcciones.
|
||||
report:
|
||||
title: Reporta
|
||||
text: ¿Encontraste un problema con el motor? No olvides reportarlo para que los desarrolladores puedan solucionarlo.
|
||||
foundation:
|
||||
text: "No necesitas ser un desarrollador para ayudar a Godot. ¡Únete al <a href='https://fund.godotengine.org/'>fondo de desarrollo</a> y ayúdanos a hacer el motor Godot aún más impresionante!"
|
||||
donate: Dona
|
||||
@@ -6,49 +6,49 @@
|
||||
<div class="col">
|
||||
<h2>Godot Engine</h2>
|
||||
<ul>
|
||||
<li><a class="set-os-download-url" href="/download">Download</a></li>
|
||||
<li><a href="https://docs.godotengine.org">Documentation</a></li>
|
||||
<li><a href="/features/">Features</a></li>
|
||||
<li><a href="https://editor.godotengine.org/releases/latest/">Web Editor</a></li>
|
||||
<li><a href="/download/archive/">Release Archive</a></li>
|
||||
<li><a href="https://github.com/godotengine">Source Code</a></li>
|
||||
<li><a class="set-os-download-url" href="/download">{% t footer.download %}</a></li>
|
||||
<li><a href="https://docs.godotengine.org">{% t footer.documentation %}</a></li>
|
||||
<li><a href="/features/">{% t footer.features %}</a></li>
|
||||
<li><a href="https://editor.godotengine.org/releases/latest/">{% t footer.web_editor %}</a></li>
|
||||
<li><a href="/download/archive/">{% t footer.release_archive %}</a></li>
|
||||
<li><a href="https://github.com/godotengine">{% t footer.source_code %}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h2>Project</h2>
|
||||
<h2>{% t footer.project %}</h2>
|
||||
<ul>
|
||||
<li><a href="/blog/">Blog</a></li>
|
||||
<li><a href="/code-of-conduct/">Code of Conduct</a></li>
|
||||
<li><a href="/governance/">Governance</a></li>
|
||||
<li><a href="/teams/">Teams</a></li>
|
||||
<li><a href="/priorities/">Priorities</a></li>
|
||||
<li><a href="/community/">Communities</a></li>
|
||||
<li><a href="/blog/">{% t footer.blog %}</a></li>
|
||||
<li><a href="/code-of-conduct/">{% t footer.code_of_conduct %}</a></li>
|
||||
<li><a href="/governance/">{% t footer.governance %}</a></li>
|
||||
<li><a href="/teams/">{% t footer.teams %}</a></li>
|
||||
<li><a href="/priorities/">{% t footer.priorities %}</a></li>
|
||||
<li><a href="/community/">{% t footer.communities %}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h2>Resources</h2>
|
||||
<h2>{% t footer.resources %}</h2>
|
||||
<ul>
|
||||
<li><a href="https://godotengine.org/asset-library/asset">Asset Library</a></li>
|
||||
<li><a href="/press/">Press Kit</a></li>
|
||||
<li><a href="/showcase/">Showcase</a></li>
|
||||
<li><a href="/education/">Education</a></li>
|
||||
<li><a href="https://godotengine.org/asset-library/asset">{% t footer.asset_library %}</a></li>
|
||||
<li><a href="/press/">{% t footer.press_kit %}</a></li>
|
||||
<li><a href="/showcase/">{% t footer.showcase %}</a></li>
|
||||
<li><a href="/education/">{% t footer.education %}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h2>Foundation</h2>
|
||||
<h2>{% t footer.foundation %}</h2>
|
||||
<ul>
|
||||
<li><a href="https://godot.foundation/">About</a></li>
|
||||
<li><a href="https://fund.godotengine.org">Donate</a></li>
|
||||
<li><a href="/license/">License</a></li>
|
||||
<li><a href="/privacy-policy/">Privacy Policy</a></li>
|
||||
<li><a href="/contact/">Contact us</a></li>
|
||||
<li><a href="https://godot.foundation/">{% t footer.about %}</a></li>
|
||||
<li><a href="https://fund.godotengine.org">{% t footer.donate %}</a></li>
|
||||
<li><a href="/license/">{% t footer.license %}</a></li>
|
||||
<li><a href="/privacy-policy/">{% t footer.privacy_policy %}</a></li>
|
||||
<li><a href="/contact/">{% t footer.contact_us %}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="credits-and-socials">
|
||||
<p>
|
||||
© 2007-{{ site.time | date: '%Y' }} Juan Linietsky, Ariel Manzur and <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md" target="_blank" rel="noopener">contributors</a>. Hosted by the <a href="https://godot.foundation/" target="_blank" rel="noopener">Godot Foundation</a>. Website <a href="https://github.com/godotengine/godot-website" target="_blank" rel="noopener">source code on GitHub</a>.
|
||||
© 2007-{{ site.time | date: '%Y' }} {% t footer.text %}
|
||||
</p>
|
||||
<div class="social">
|
||||
<a href="https://github.com/godotengine" target="_blank" rel="noopener" title="GitHub">
|
||||
@@ -74,6 +74,7 @@
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script defer src="/assets/js/localize.js"></script>
|
||||
<script defer src="/assets/js/tobii.min.js"></script>
|
||||
<script defer src="/assets/js/highlight.min.js?1"></script>
|
||||
<script defer src="/assets/js/highlight.gdscript.min.js?1"></script>
|
||||
|
||||
@@ -16,22 +16,44 @@
|
||||
|
||||
<nav id="nav">
|
||||
<ul class="left">
|
||||
<li><a href="/features/">Features</a></li>
|
||||
<li><a href="/showcase/">Showcase</a></li>
|
||||
<li><a href="/blog/">Blog</a></li>
|
||||
<li><a href="/community/">Community</a></li>
|
||||
<li><a href="https://godotengine.org/asset-library/asset">Assets</a></li>
|
||||
<li><a href="/features/">{% t header.features %}</a></li>
|
||||
<li><a href="/showcase/">{% t header.showcase %}</a></li>
|
||||
<li><a href="/blog/">{% t header.blog %}</a></li>
|
||||
<li><a href="/community/">{% t header.community %}</a></li>
|
||||
<li><a href="https://godotengine.org/asset-library/asset">{% t header.assets %}</a></li>
|
||||
</ul>
|
||||
|
||||
<ul class="right">
|
||||
<li><a href="/download/windows/" class="set-os-download-url">Download</a></li>
|
||||
<li><a href="https://docs.godotengine.org">Docs</a></li>
|
||||
<li><a href="https://docs.godotengine.org/en/stable/contributing/how_to_contribute.html">Contribute</a></li>
|
||||
<li><a href="/download/windows/" class="set-os-download-url">{% t header.download %}</a></li>
|
||||
<li><a href="https://docs.godotengine.org">{% t header.docs %}</a></li>
|
||||
<li><a href="https://docs.godotengine.org/en/stable/contributing/how_to_contribute.html">{% t header.contribute %}</a></li>
|
||||
{% if page.localize %}
|
||||
<li class="language-selector" onclick="this.classList.toggle('open')">
|
||||
<a class="mobile-language-selector" href="#">{% t header.language %}: </a>
|
||||
<div class="language-dropdown">
|
||||
{% for lang in page.localize %}
|
||||
<div class="language-option"><a href="{% if lang == 'en' %}/{% else %}/{{ lang }}/{% endif %}"><span class="localize-language-label">{{ lang }}</span></a></div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="fund desktop"><a href="https://fund.godotengine.org"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 13px; fill: white; margin-right: 4px; top: 1px;
|
||||
position: relative;"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/></svg> Donate</a></li>
|
||||
position: relative;"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/></svg> {% t header.donate %}</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<script>
|
||||
document.addEventListener('click', function(event) {
|
||||
const languageSelector = document.querySelector('.language-selector');
|
||||
if (!languageSelector) return;
|
||||
|
||||
// Check if the click is outside the language selector
|
||||
if (!languageSelector.contains(event.target)) {
|
||||
languageSelector.classList.remove('open');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<main>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<section class="sponsors padded" id="sponsors">
|
||||
<div class="container">
|
||||
<h2>Godot is sponsored by:</h2>
|
||||
<h2>{% t sponsors.title %}</h2>
|
||||
<h3>Patron</h3>
|
||||
<div class="grid patron">
|
||||
{% for sponsor in site.data.sponsors.patron %}
|
||||
@@ -33,7 +33,7 @@
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<p class="for-more" style="margin-top: 50px; text-align: left; opacity: 0.8;">If you want to sponsor the project, please write to <a href="mailto:contact@godot.foundation">contact@godot.foundation</a>.</p>
|
||||
<a href="https://fund.godotengine.org" class="btn">Donate now!</a>
|
||||
<p class="for-more" style="margin-top: 50px; text-align: left; opacity: 0.8;">{% t sponsors.text %}</p>
|
||||
<a href="https://fund.godotengine.org" class="btn">{% t sponsors.cta %}</a>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,11 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="{% current_lang %}">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="author" content="Godot Engine">
|
||||
<meta name="description" content="{% if page.description %}{{ page.description }}{% elsif page.excerpt %}{{ page.excerpt }}{% else %}Develop your 2D & 3D games, cross-platform projects, or even XR ideas!{% endif %}">
|
||||
<meta name="description" content="{% if page.description %}{{ page.description }}{% elsif page.excerpt %}{{ page.excerpt }}{% else %}{% t meta.description %}{% endif %}">
|
||||
|
||||
<!-- Plausible -->
|
||||
<script defer data-domain="godotengine.org" src="https://plausible.godot.foundation/js/script.file-downloads.outbound-links.js"></script>
|
||||
@@ -14,21 +14,23 @@
|
||||
<meta property="og:site_name" content="Godot Engine">
|
||||
<meta property="og:url" content="https://godotengine.org{{ page.url }}">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="{{ page.title | default: "Godot Engine" }}">
|
||||
<meta property="og:description" content="{% if page.description %}{{ page.description }}{% elsif page.excerpt %}{{ page.excerpt }}{% else %}Develop your 2D & 3D games, cross-platform projects, or even XR ideas!{% endif %}">
|
||||
<meta property="og:description" content="{% if page.description %}{{ page.description }}{% elsif page.excerpt %}{{ page.excerpt }}{% else %}{% t meta.description %}{% endif %}">
|
||||
<meta property="og:image" content="{{ site.url }}{{ page.image | default: '/assets/share-image.webp' }}">
|
||||
<!-- meta tags -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@godotengine">
|
||||
<meta property="twitter:domain" content="godotengine.org">
|
||||
<meta property="twitter:url" content="https://godotengine.org{{ page.url }}">
|
||||
<meta name="twitter:title" content="{{ page.title | default: "Godot Engine" }}">
|
||||
<meta name="twitter:description" content="{% if page.description %}{{ page.description }}{% elsif page.excerpt %}{{ page.excerpt }}{% else %}Develop your 2D & 3D games, cross-platform projects, or even XR ideas!{% endif %}">
|
||||
<meta name="twitter:image" content="{{ site.url }}{{ page.image | default: '/assets/share-image.webp' }}">
|
||||
|
||||
{% if page.title %}
|
||||
<title>{{ page.title | remove: " - Godot Engine" }}{% if page.notitlesuffix != true %} – Godot Engine{% endif %}</title>
|
||||
{% if page.title[current_lang] or page.title %}
|
||||
{% if page.title[current_lang] %}
|
||||
<meta property="og:title" content="{{ page.title[current_lang] | remove: " - Godot Engine" }}{% if page.notitlesuffix != true %} – Godot Engine{% endif %}">
|
||||
<title>{{ page.title[current_lang] | remove: " - Godot Engine" }}{% if page.notitlesuffix != true %} – Godot Engine{% endif %}</title>
|
||||
{% else %}
|
||||
<meta property="og:title" content="{{ page.title | remove: " - Godot Engine" }}{% if page.notitlesuffix != true %} – Godot Engine{% endif %}">
|
||||
<title>{{ page.title | remove: " - Godot Engine" }}{% if page.notitlesuffix != true %} – Godot Engine{% endif %}</title>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<meta property="og:title" content="Godot Engine">
|
||||
<title>Godot Engine</title>
|
||||
{% endif %}
|
||||
|
||||
@@ -38,6 +40,7 @@
|
||||
<link rel="icon" href="/assets/favicon.png" sizes="any">
|
||||
<link rel="icon" href="/assets/favicon.svg" type="image/svg+xml">
|
||||
<link rel="stylesheet" href="/assets/css/main.css?119">
|
||||
<link rel="stylesheet" href="/assets/css/header.css">
|
||||
<link rel="stylesheet" href="/assets/css/tobii.min.css">
|
||||
<link rel="preload" as="font" href="/assets/fonts/Montserrat-Italic-VariableFont_wght.woff2" crossorigin>
|
||||
<link rel="preload" as="font" href="/assets/fonts/Montserrat-VariableFont_wght.woff2" crossorigin>
|
||||
|
||||
164
_plugins/localize.rb
Normal file
164
_plugins/localize.rb
Normal file
@@ -0,0 +1,164 @@
|
||||
# Simple localization plugin for Jekyll by Emilio Coppola v1.0
|
||||
#
|
||||
# Usage:
|
||||
# - Add 'localize' front matter to pages that should be localized
|
||||
# - Add 'lang' front matter to pages that should have a specific language
|
||||
# - Add translations to _i18n/{lang}.yml files
|
||||
# - Use the '{% t useyourkeyhere %}' tag to translate text
|
||||
# - Use the '{% current_lang %}' tag to get the current page language
|
||||
# - Use the '{% tlink /your/path %}' tag to get the localized URL
|
||||
# ----------------------------------------
|
||||
# Example `index.html`:
|
||||
# ---
|
||||
# localize: [en, fr]
|
||||
# ---
|
||||
# <h1>{% t home.title %}</h1>
|
||||
# <p>Current language: {% current_lang %}</p>
|
||||
# <a href="{% tlink /about %}">About</a>
|
||||
#
|
||||
# _i18n/en.yml:
|
||||
# home:
|
||||
# title: "Welcome"
|
||||
#
|
||||
# _i18n/fr.yml:
|
||||
# home:
|
||||
# title: "Bienvenue"
|
||||
#
|
||||
# This will generate the following pages:
|
||||
# - /index.html
|
||||
# - /fr/index.html
|
||||
#
|
||||
# -----
|
||||
# Localize front-matter by adding an array of the languages you want to support.
|
||||
# For example, to support titles in English and French:
|
||||
# ---
|
||||
# title:
|
||||
# en: "Welcome"
|
||||
# fr: "Bienvenue"
|
||||
# ---
|
||||
# And then use in a template or layout like this:
|
||||
# <title>{{ page.title[current_lang] | default: page.title }}</title>
|
||||
# -----
|
||||
|
||||
require 'yaml'
|
||||
module Jekyll
|
||||
class TranslateTag < Liquid::Tag
|
||||
def initialize(tag_name, text, tokens)
|
||||
super
|
||||
@text = text.strip
|
||||
end
|
||||
|
||||
def render(context)
|
||||
site = context.registers[:site]
|
||||
page = context.registers[:page]
|
||||
lang = page['lang'] || site.config['lang'] || 'en'
|
||||
|
||||
translations = YAML.load_file(File.join(site.source, "_i18n/#{lang}.yml"))
|
||||
result = @text.split('.').reduce(translations) { |result, key| result&.[](key) }
|
||||
|
||||
if result.nil?
|
||||
default_translations = YAML.load_file(File.join(site.source, "_i18n/en.yml"))
|
||||
result = @text.split('.').reduce(default_translations) { |result, key| result&.[](key) }
|
||||
return result || "Translation key doesn't exist: #{@text}"
|
||||
end
|
||||
|
||||
result
|
||||
end
|
||||
end
|
||||
|
||||
class CurrentLangTag < Liquid::Tag
|
||||
def render(context)
|
||||
site = context.registers[:site]
|
||||
page = context.registers[:page]
|
||||
lang = page['lang'] || site.config['lang'] || 'en'
|
||||
|
||||
# Store the language in Liquid's context
|
||||
context['current_lang'] = lang
|
||||
|
||||
lang # Still return the language for inline use
|
||||
end
|
||||
end
|
||||
|
||||
class TranslateUrlTag < Liquid::Tag
|
||||
def initialize(tag_name, url, tokens)
|
||||
super
|
||||
@url = url.strip
|
||||
end
|
||||
|
||||
def render(context)
|
||||
site = context.registers[:site]
|
||||
page = context.registers[:page]
|
||||
lang = page['lang'] || site.config['lang'] || 'en'
|
||||
default_lang = site.config['lang'] || 'en'
|
||||
|
||||
# If we're in the default language, return the URL as is
|
||||
return @url if lang == default_lang
|
||||
|
||||
# Otherwise, prepend the language code
|
||||
# Ensure the URL starts with a forward slash
|
||||
url = @url.start_with?('/') ? @url : "/#{@url}"
|
||||
"/#{lang}#{url}"
|
||||
end
|
||||
end
|
||||
|
||||
class LocalizationGenerator < Generator
|
||||
safe true
|
||||
priority :high
|
||||
|
||||
def clean_url(url)
|
||||
# Remove any file with extension from the end of the URL
|
||||
# This will match 'index.html', 'index.php', etc.
|
||||
cleaned_url = url.sub(/index\.[^\/]+$/, '')
|
||||
|
||||
# Ensure trailing slash
|
||||
cleaned_url.end_with?('/') ? cleaned_url : "#{cleaned_url}/"
|
||||
end
|
||||
|
||||
def create_page(site, original_page, lang, is_default = false)
|
||||
new_page = Jekyll::Page.new(
|
||||
site,
|
||||
site.source,
|
||||
File.dirname(original_page.path),
|
||||
File.basename(original_page.path)
|
||||
)
|
||||
|
||||
new_page.data.merge!(original_page.data)
|
||||
new_page.content = original_page.content.dup
|
||||
new_page.data['lang'] = lang
|
||||
|
||||
unless is_default
|
||||
base_url = clean_url(original_page.url)
|
||||
new_page.data['permalink'] = "/#{lang}#{base_url}"
|
||||
end
|
||||
|
||||
new_page
|
||||
end
|
||||
|
||||
def generate(site)
|
||||
default_lang = site.config['lang'] || 'en'
|
||||
|
||||
# Process pages with localization front matter
|
||||
localizable_pages = site.pages.select { |page| page.data['localize'].is_a?(Array) }
|
||||
|
||||
new_pages = localizable_pages.flat_map do |page|
|
||||
# Create default language page
|
||||
default_page = create_page(site, page, default_lang, true)
|
||||
|
||||
# Create pages for other languages
|
||||
other_pages = page.data['localize']
|
||||
.reject { |lang| lang == default_lang }
|
||||
.map { |lang| create_page(site, page, lang) }
|
||||
|
||||
[default_page, *other_pages]
|
||||
end
|
||||
|
||||
# Replace original pages with localized versions
|
||||
site.pages.delete_if { |page| page.data['localize'].is_a?(Array) }
|
||||
site.pages.concat(new_pages)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Liquid::Template.register_tag('t', Jekyll::TranslateTag)
|
||||
Liquid::Template.register_tag('current_lang', Jekyll::CurrentLangTag)
|
||||
Liquid::Template.register_tag('tlink', Jekyll::TranslateUrlTag)
|
||||
271
assets/css/header.css
Normal file
271
assets/css/header.css
Normal file
@@ -0,0 +1,271 @@
|
||||
header {
|
||||
/* Show on top of GodotCon banner (if any). */
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
|
||||
height: 64px;
|
||||
background-color: var(--navbar-background-color);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-shadow: var(--base-shadow);
|
||||
|
||||
.container {
|
||||
overflow: initial;
|
||||
width: 100%;
|
||||
}
|
||||
#logo-link {
|
||||
/* Make the logo's clickable area as tall as for other navigation links. */
|
||||
padding: 0.2rem 0.5rem;
|
||||
padding-top: 6px;
|
||||
margin-left: -9px;
|
||||
padding-right: 15px;
|
||||
margin-right: -23px;
|
||||
}
|
||||
}
|
||||
|
||||
#nav, #nav_head {
|
||||
.fund {
|
||||
margin-right: 0px;
|
||||
margin-left: 0px;
|
||||
padding-left: 7px;
|
||||
&.desktop {
|
||||
@media (max-width: 1200px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
&.mobile {
|
||||
top: -2px;
|
||||
position: relative;
|
||||
@media (min-width: 1200px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #F35774;
|
||||
color: white;
|
||||
background-color: #F35774 !important;
|
||||
border-radius: var(--button-border-radius);
|
||||
box-shadow: inset 0 0 0 2px #F35774;
|
||||
padding: 13px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#nav_toggle_cb {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#nav_toggle_btn {
|
||||
line-height: 0px;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
border-radius: 100%;
|
||||
@media (min-width: 1200px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.mobile-language-selector {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.mobile-links {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 49px;
|
||||
align-items: center;
|
||||
@media (min-width: 1200px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#nav {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding-left: 26px;
|
||||
a {
|
||||
text-decoration: none;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
color: var(--navbar-link-color);
|
||||
padding: 1.3175rem 1rem;
|
||||
margin-left: 14px;
|
||||
}
|
||||
ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding-left: 0;
|
||||
|
||||
}
|
||||
a:hover, #logo-link:hover {
|
||||
background-color: hsla(0, 0%, 50%, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
#nav > ul {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#nav > ul > :first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
#nav > ul > :last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
#nav > ul li {
|
||||
padding-left: 1rem;
|
||||
margin-bottom: 0;
|
||||
margin-left: -1rem;
|
||||
margin-right: -1rem;
|
||||
}
|
||||
|
||||
#nav li.active > a {
|
||||
color: var(--navbar-link-current-color);
|
||||
}
|
||||
|
||||
#nav > ul ul {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#nav_head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
/* Mobile style */
|
||||
@media (max-width: 1200px) {
|
||||
.hide-on-mobile {
|
||||
display: none;
|
||||
}
|
||||
|
||||
header {
|
||||
height: auto;
|
||||
}
|
||||
header > div {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#logo-link {
|
||||
margin: 0;
|
||||
}
|
||||
#nav_head {
|
||||
width: 100%;
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
#nav_toggle_btn {
|
||||
display: block;
|
||||
/* Make the navbar toggle button easier to click. */
|
||||
padding: 1.25rem;
|
||||
margin-top: -0.2rem;
|
||||
margin-right: -1rem;
|
||||
}
|
||||
#nav_toggle_btn:hover {
|
||||
background-color: hsla(0, 0%, 50%, 0.15);
|
||||
}
|
||||
#nav_toggle_btn:active {
|
||||
background-color: hsla(0, 0%, 50%, 0.25);
|
||||
}
|
||||
#nav_toggle_cb:checked ~ header nav {
|
||||
display: block;
|
||||
}
|
||||
#nav {
|
||||
display: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
#nav ul {
|
||||
align-items: flex-start;
|
||||
flex-direction: column;
|
||||
height: auto;
|
||||
}
|
||||
#nav > ul {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
#nav ul li {
|
||||
padding: 0;
|
||||
padding-top: 16px;
|
||||
width: 100%;
|
||||
}
|
||||
#nav ul a {
|
||||
width: 100%;
|
||||
display: block;
|
||||
/* Make links easier to click but still close to each other. */
|
||||
padding-top: 0.75rem;
|
||||
padding-bottom: 0.75rem;
|
||||
padding-left: 1.5rem;
|
||||
padding-right: 1.5rem;
|
||||
margin-top: -0.4375rem;
|
||||
margin-bottom: -0.4375rem;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Language selector */
|
||||
.language-selector {
|
||||
background-image: none;
|
||||
}
|
||||
.language-option {
|
||||
@media (max-width: 1200px) {
|
||||
margin-left: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#nav_toggle_btn {
|
||||
filter: invert(100%)saturate(0%)brightness(120%);
|
||||
}
|
||||
}
|
||||
|
||||
/* Language selector */
|
||||
@media (min-width: 1200px) {
|
||||
#nav {
|
||||
.language-selector {
|
||||
width: 66px;
|
||||
height: 43px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
background-image: url(/assets/icons/language.svg);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 28px 6px;
|
||||
background-size: 42px;
|
||||
opacity: 0.8;
|
||||
margin-left: -10px;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
@media (prefers-color-scheme: light) {
|
||||
background-image: url(/assets/icons/language-light.svg);
|
||||
}
|
||||
}
|
||||
.language-dropdown {
|
||||
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
||||
z-index: 1;
|
||||
border-radius: 5px;
|
||||
background: #303030;
|
||||
border: 1px solid #ffffff3b;
|
||||
position: relative;
|
||||
top: 50px;
|
||||
width: 120px;
|
||||
left: -65px;
|
||||
display: none;
|
||||
a {
|
||||
padding: 5px 10px;
|
||||
margin: 0;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.language-selector.open .language-dropdown {
|
||||
display: block;
|
||||
}
|
||||
.language-option {
|
||||
user-select: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,8 +37,6 @@
|
||||
|
||||
--big-button-color: #478cbf;
|
||||
|
||||
--fund-color: #F35774;
|
||||
|
||||
--base-shadow: 0 0 4px rgba(0, 0, 0, 0.2);
|
||||
--more-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
||||
--background-color: #d5daea;
|
||||
@@ -125,8 +123,6 @@
|
||||
|
||||
--big-button-color: #478cbf;
|
||||
|
||||
--fund-color: #F35774;
|
||||
|
||||
--base-shadow: 0 0 4px rgba(0, 0, 0, 0.4);
|
||||
--more-shadow: 0 2px 10px rgba(0, 0, 0, 0.4);
|
||||
--background-color: #202326;
|
||||
@@ -180,10 +176,7 @@
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
/* Invert hamburger menu button on mobile to be visible on dark navbar. */
|
||||
#nav_toggle_btn {
|
||||
filter: invert(100%) saturate(0%) brightness(120%);
|
||||
}
|
||||
|
||||
|
||||
.dark-invert {
|
||||
filter: invert(100%);
|
||||
@@ -428,168 +421,6 @@ main {
|
||||
padding-right: 0px;
|
||||
}
|
||||
|
||||
header {
|
||||
/* Show on top of GodotCon banner (if any). */
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
|
||||
width: 100vw;
|
||||
height: 64px;
|
||||
background-color: var(--navbar-background-color);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-shadow: var(--base-shadow);
|
||||
|
||||
.container {
|
||||
overflow: initial;
|
||||
}
|
||||
|
||||
#nav, #nav_head {
|
||||
.fund {
|
||||
margin-right: 0px;
|
||||
&.desktop {
|
||||
@media (max-width: 1200px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
&.mobile {
|
||||
top: -2px;
|
||||
position: relative;
|
||||
@media (min-width: 1200px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: var(--fund-color);
|
||||
color: white;
|
||||
background-color: var(--fund-color) !important; // avoid hover overwrite
|
||||
border-radius: var(--button-border-radius);
|
||||
box-shadow: inset 0 0 0 2px var(--fund-color);
|
||||
padding: 13px;
|
||||
}
|
||||
}
|
||||
}
|
||||
#logo-link {
|
||||
/* Make the logo's clickable area as tall as for other navigation links. */
|
||||
padding: 0.2rem 0.5rem;
|
||||
padding-top: 6px;
|
||||
margin-left: -9px;
|
||||
padding-right: 15px;
|
||||
margin-right: -23px;
|
||||
}
|
||||
}
|
||||
|
||||
header > div.container {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#nav_head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
#nav_toggle_cb,
|
||||
#nav_toggle_btn {
|
||||
display: none;
|
||||
line-height: 0px;
|
||||
cursor: pointer;
|
||||
/* Prevent double-clicking the button from highlighting the icon as selected text on desktop. */
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.mobile-links {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 49px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#nav {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
|
||||
#nav a {
|
||||
text-decoration: none;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
color: var(--navbar-link-color);
|
||||
/* Make links easier to click. */
|
||||
padding: 1.3175rem 1rem;
|
||||
}
|
||||
|
||||
#nav a:hover,
|
||||
#logo-link:hover {
|
||||
background-color: hsla(0, 0%, 50%, 0.1);
|
||||
}
|
||||
|
||||
#nav ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
#nav > ul {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#nav > ul > :first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
#nav > ul > :last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
#nav > ul li {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
margin-bottom: 0;
|
||||
margin-left: -1rem;
|
||||
margin-right: -1rem;
|
||||
}
|
||||
|
||||
#nav li.active > a {
|
||||
color: var(--navbar-link-current-color);
|
||||
}
|
||||
|
||||
#nav > ul ul {
|
||||
display: none;
|
||||
}
|
||||
|
||||
a.patronImgLink {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
a.patronImgLink > img {
|
||||
display: block;
|
||||
}
|
||||
|
||||
a.patreonLink {
|
||||
text-decoration: none;
|
||||
height: 64px !important;
|
||||
margin-left: 16px !important;
|
||||
}
|
||||
|
||||
a.patreonLink > .patreon {
|
||||
height: inherit;
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
a.patreonLink .patreon-brand {
|
||||
background-size: 160px;
|
||||
}
|
||||
|
||||
a.patreonLink .patreon-uppercase {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 2rem;
|
||||
}
|
||||
@@ -1000,75 +831,6 @@ pre > code {
|
||||
article .content {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
header {
|
||||
height: auto;
|
||||
}
|
||||
header > div {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#logo-link {
|
||||
margin: 0;
|
||||
}
|
||||
#nav_head {
|
||||
width: 100%;
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
#nav_toggle_btn {
|
||||
display: block;
|
||||
/* Make the navbar toggle button easier to click. */
|
||||
padding: 1.25rem;
|
||||
margin-top: -0.2rem;
|
||||
margin-right: -1rem;
|
||||
}
|
||||
#nav_toggle_btn:hover {
|
||||
background-color: hsla(0, 0%, 50%, 0.15);
|
||||
}
|
||||
#nav_toggle_btn:active {
|
||||
background-color: hsla(0, 0%, 50%, 0.25);
|
||||
}
|
||||
#nav_toggle_cb:checked ~ header nav {
|
||||
display: block;
|
||||
}
|
||||
#nav {
|
||||
display: none;
|
||||
}
|
||||
#nav ul {
|
||||
align-items: flex-start;
|
||||
flex-direction: column;
|
||||
height: auto;
|
||||
}
|
||||
#nav > ul {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
#nav ul li {
|
||||
padding: 0;
|
||||
padding-top: 16px;
|
||||
width: 100%;
|
||||
}
|
||||
#nav ul a {
|
||||
width: 100%;
|
||||
display: block;
|
||||
/* Make links easier to click but still close to each other. */
|
||||
padding-top: 0.75rem;
|
||||
padding-bottom: 0.75rem;
|
||||
padding-left: 1.5rem;
|
||||
padding-right: 1.5rem;
|
||||
margin-top: -0.4375rem;
|
||||
margin-bottom: -0.4375rem;
|
||||
}
|
||||
a.patreonLink {
|
||||
text-decoration: none;
|
||||
height: 64px !important;
|
||||
margin-left: 0px !important;
|
||||
margin-top: 16px;
|
||||
}
|
||||
a.patreonLink > .patreon {
|
||||
height: inherit;
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1020px) {
|
||||
|
||||
@@ -49,3 +49,9 @@ nav#nav {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#nav .language-selector {
|
||||
@media (min-width: 1200px) {
|
||||
background-image: url(/assets/icons/language.svg) !important;
|
||||
}
|
||||
}
|
||||
1
assets/icons/language-light.svg
Normal file
1
assets/icons/language-light.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#333f67" d="M0 128C0 92.7 28.7 64 64 64l192 0 48 0 16 0 256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64l-256 0-16 0-48 0L64 448c-35.3 0-64-28.7-64-64L0 128zm320 0l0 256 256 0 0-256-256 0zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1 73.6 0 8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276l-38 0 19-42.8zM448 164c11 0 20 9 20 20l0 4 44 0 16 0c11 0 20 9 20 20s-9 20-20 20l-2 0-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45L448 228l-72 0c-11 0-20-9-20-20s9-20 20-20l52 0 0-4c0-11 9-20 20-20z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
1
assets/icons/language.svg
Normal file
1
assets/icons/language.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#ffffff" d="M0 128C0 92.7 28.7 64 64 64l192 0 48 0 16 0 256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64l-256 0-16 0-48 0L64 448c-35.3 0-64-28.7-64-64L0 128zm320 0l0 256 256 0 0-256-256 0zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1 73.6 0 8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276l-38 0 19-42.8zM448 164c11 0 20 9 20 20l0 4 44 0 16 0c11 0 20 9 20 20s-9 20-20 20l-2 0-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45L448 228l-72 0c-11 0-20-9-20-20s9-20 20-20l52 0 0-4c0-11 9-20 20-20z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
16
assets/js/localize.js
Normal file
16
assets/js/localize.js
Normal file
@@ -0,0 +1,16 @@
|
||||
// Get the language label
|
||||
const languageMap = {
|
||||
'en': 'English',
|
||||
'es': 'Español',
|
||||
'de': 'Deutsch',
|
||||
'ja': '日本語',
|
||||
'zh': '中文',
|
||||
'pt': 'Português'
|
||||
};
|
||||
|
||||
document.querySelectorAll('.localize-language-label').forEach(function(el) {
|
||||
const lang = el.textContent;
|
||||
if (languageMap[lang]) {
|
||||
el.textContent = languageMap[lang];
|
||||
}
|
||||
});
|
||||
113
pages/home.html
113
pages/home.html
@@ -1,10 +1,13 @@
|
||||
---
|
||||
permalink: /
|
||||
title: "Godot Engine - Free and open source 2D and 3D game engine"
|
||||
title:
|
||||
en: "Godot Engine - Free and open source 2D and 3D game engine"
|
||||
es: "Godot Engine - Motor de videojuegos 2D y 3D gratuito y de código abierto"
|
||||
notitlesuffix: true
|
||||
description: "Godot provides a huge set of common tools, so you can just focus on making your game without reinventing
|
||||
the wheel."
|
||||
layout: default
|
||||
localize: ["en", "es"]
|
||||
---
|
||||
|
||||
{% include header.html %}
|
||||
@@ -199,11 +202,8 @@ layout: default
|
||||
<div class="background-image" style="background-image: url()"></div>
|
||||
<div class="wrapper">
|
||||
<div class="copy container">
|
||||
<h1>
|
||||
Your free, open‑source<br>
|
||||
game engine.
|
||||
</h1>
|
||||
<p>Develop your 2D & 3D games, cross-platform projects, or even XR ideas!</p>
|
||||
<h1>{% t home.h1 %}</h1>
|
||||
<p>{% t home.subtitle %}</p>
|
||||
|
||||
<div class="main-download">
|
||||
{% assign stable_version_3 = site.data.versions | find: "featured", "3" %}
|
||||
@@ -213,16 +213,16 @@ layout: default
|
||||
<div class="main-download-links-buttons">
|
||||
<a href="/download/windows/" class="btn btn-download set-os-download-url" data-version="4"
|
||||
title="Download the latest version of Godot 4">
|
||||
<div class="download-title">Download Latest</div>
|
||||
<div class="download-title">{% t home.download_latest %}</div>
|
||||
<div class="download-hint">{{ stable_version_4.name }}</div>
|
||||
</a>
|
||||
<a href="/releases/" class="btn btn-whats-new"
|
||||
title="See what's new in Godot">
|
||||
<div class="download-title">What's new?</div>
|
||||
<div class="download-title">{% t home.whats_new %}</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<span class="download-3">Looking for <a href="/download/windows/" class="set-os-download-url" data-version="3" title="Download the long-term support version of Godot 3">Godot 3</a>, our <a href="/download/archive">experimental releases</a>, or a <a href="/download/archive">previous version</a>?</span>
|
||||
<span class="download-3">{% t home.looking_for %}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -233,7 +233,7 @@ layout: default
|
||||
</section>
|
||||
|
||||
<section class="container padded">
|
||||
<h2>Latest news</h2>
|
||||
<h2>{% t home.latest_news %}</h2>
|
||||
<div class="flex eqsize responsive" style="gap: 30px;">
|
||||
|
||||
{% assign latest_posts = site.article | sort:"date" | reverse %}
|
||||
@@ -267,7 +267,7 @@ layout: default
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<div class="button-container">
|
||||
<a href="/blog/" class="btn no-margin">More News</a>
|
||||
<a href="/blog/" class="btn no-margin">{% t home.more_news %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -276,7 +276,7 @@ layout: default
|
||||
|
||||
|
||||
<section id="features" class="container padded">
|
||||
<h2>A different way to make games</h2>
|
||||
<h2>{% t home.cards.h2 %}</h2>
|
||||
|
||||
<div class="features-grid">
|
||||
<a class="feature-link" href="/features#design" data-barba-prevent>
|
||||
@@ -284,10 +284,8 @@ layout: default
|
||||
<img src="/assets/home/features/innovative.webp" alt="" width="1" height="1"
|
||||
style="background: linear-gradient(90deg, #333747 11%, #2d3342 50%, #2d3342 68%, #272d3c 87%)" loading="lazy">
|
||||
<div class="body">
|
||||
<h4>Innovative design</h4>
|
||||
<p>
|
||||
Godot's Node and Scene system gives you both power and flexibility
|
||||
to create anything.
|
||||
<h4>{%t home.cards.design.title %}</h4>
|
||||
<p>{%t home.cards.design.text %}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -298,15 +296,8 @@ layout: default
|
||||
<img src="/assets/home/features/language.webp" alt="" width="1" height="1"
|
||||
style="background: linear-gradient(90deg, #252a35 46%, #252a35 53%, #202630 76%, #202630 89%)" loading="lazy">
|
||||
<div class="body">
|
||||
<h4>Use the right language for the job</h4>
|
||||
<p>
|
||||
Keep your code modular with an object-oriented API using Godot's own
|
||||
GDScript, C#, C++, or bring your own using GDExtension.
|
||||
<div style="margin-top: 0.5rem; font-size: 0.875rem; line-height: 1.6; opacity: 0.8">
|
||||
C# support is currently only available for desktop and mobile platforms
|
||||
as of Godot 4.2.<br>Use Godot 3 to run C# on the Web platform.
|
||||
</div>
|
||||
</p>
|
||||
<h4>{%t home.cards.script.title %}</h4>
|
||||
<p>{%t home.cards.script.text %}<div style="margin-top: 0.5rem; font-size: 0.875rem; line-height: 1.6; opacity: 0.8">{%t home.cards.script.extra %}</div></p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
@@ -315,11 +306,8 @@ layout: default
|
||||
<img src="/assets/home/features/2d.webp" alt="" width="1" height="1"
|
||||
style="background: linear-gradient(90deg, #196f36 7%, #28674e 29%, #2a4b46 65%, #3b6f4e 97%)" loading="lazy">
|
||||
<div class="body">
|
||||
<h4>Dedicated 2D engine</h4>
|
||||
<p>
|
||||
Make crisp and performant 2D games with Godot's dedicated 2D
|
||||
rendering engine with real 2D pixel coordinates and 2D nodes.
|
||||
</p>
|
||||
<h4>{%t home.cards.2d.title %}</h4>
|
||||
<p>{%t home.cards.2d.text %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
@@ -329,11 +317,8 @@ layout: default
|
||||
<img src="/assets/home/features/3d.webp" alt="" width="1" height="1" title="Screenshot from the game 'Human Diaspora'"
|
||||
style="background: linear-gradient(90deg, #196f36 7%, #28674e 29%, #2a4b46 65%, #3b6f4e 97%)" loading="lazy">
|
||||
<div class="body">
|
||||
<h4>Simple and powerful 3D</h4>
|
||||
<p>
|
||||
Godot's 3D nodes give you everything you need to build, animate,
|
||||
and render your 3D worlds and characters.
|
||||
</p>
|
||||
<h4>{%t home.cards.3d.title %}</h4>
|
||||
<p>{%t home.cards.3d.text %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
@@ -343,11 +328,8 @@ layout: default
|
||||
<img src="/assets/home/features/cross-platform.svg" alt="" width="1" height="1"
|
||||
style="background-color: #333667" loading="lazy">
|
||||
<div class="body">
|
||||
<h4>Release on all platforms</h4>
|
||||
<p>
|
||||
Deploy your game on desktop, mobile, and the web in seconds. Godot
|
||||
even supports consoles through third party publishers.
|
||||
</p>
|
||||
<h4>{%t home.cards.deploy.title %}</h4>
|
||||
<p>{%t home.cards.deploy.text %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
@@ -357,59 +339,47 @@ layout: default
|
||||
<img src="/assets/home/features/oss.svg" alt="" width="1" height="1" style="background-color: #333667"
|
||||
loading="lazy">
|
||||
<div class="body">
|
||||
<h4>Open Source</h4>
|
||||
<p>
|
||||
Truly open development: anyone who contributes to Godot benefits
|
||||
equally from others’ contributions.
|
||||
</p>
|
||||
<h4>{%t home.cards.open.title %}</h4>
|
||||
<p>{%t home.cards.open.text %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="features-learn-more">
|
||||
<a href="/features/" class="btn btn-flat btn-flat-white btn-flat-frosted">Learn more about using Godot</a>
|
||||
<a href="/features/" class="btn btn-flat btn-flat-white btn-flat-frosted">{%t home.cards.cta %}</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="get_involved" class="container padded">
|
||||
<h2>Get involved</h2>
|
||||
<p>
|
||||
Join the community and help create a game engine that belongs to everybody.
|
||||
<h2>{%t home.get_involved.title %}</h2>
|
||||
<p>{%t home.get_involved.text %}
|
||||
</p>
|
||||
|
||||
<div class="flex eqsize responsive">
|
||||
|
||||
<div class="text-center base-padding">
|
||||
<img src="/assets/home/code.svg" alt="" width="250" height="250" loading="lazy">
|
||||
<h4>Code</h4>
|
||||
<p>
|
||||
If you know how to code, you can help by fixing bugs and working with engine contributors towards the
|
||||
implementation of new features.
|
||||
</p>
|
||||
<h4>{%t home.get_involved.cards.code.title %}</h4>
|
||||
<p>{%t home.get_involved.cards.code.text %}</p>
|
||||
<a href="https://docs.godotengine.org/en/stable/contributing/how_to_contribute.html#technical-contributions"
|
||||
class="btn btn-flat btn-flat-frosted" target="_blank" rel="noopener">Learn more</a>
|
||||
class="btn btn-flat btn-flat-frosted" target="_blank" rel="noopener">{%t home.get_involved.cards.cta %}</a>
|
||||
</div>
|
||||
|
||||
<div class="text-center base-padding">
|
||||
<img src="/assets/home/document.svg" alt="" width="250" height="250" loading="lazy">
|
||||
<h4>Document</h4>
|
||||
<p>
|
||||
Documentation quality is essential in a game engine; help make it better by updating the API reference, writing
|
||||
new guides or submitting corrections.
|
||||
</p>
|
||||
<h4>{%t home.get_involved.cards.document.title %}</h4>
|
||||
<p>{%t home.get_involved.cards.document.text %}</p>
|
||||
<a href="https://docs.godotengine.org/en/stable/contributing/how_to_contribute.html#technical-contributions"
|
||||
class="btn btn-flat btn-flat-frosted" target="_blank" rel="noopener">Learn more</a>
|
||||
class="btn btn-flat btn-flat-frosted" target="_blank" rel="noopener">{%t home.get_involved.cards.cta %}</a>
|
||||
</div>
|
||||
|
||||
<div class="text-center base-padding">
|
||||
<img src="/assets/home/report.svg" alt="" width="250" height="250" loading="lazy">
|
||||
<h4>Report</h4>
|
||||
<p>
|
||||
Found a problem with the engine? Don't forget to report it so that developers can track it down.
|
||||
</p>
|
||||
<h4>{%t home.get_involved.cards.report.title %}</h4>
|
||||
<p>{%t home.get_involved.cards.report.text %}</p>
|
||||
<a href="https://docs.godotengine.org/en/stable/contributing/how_to_contribute.html#technical-contributions"
|
||||
class="btn btn-flat btn-flat-frosted" target="_blank" rel="noopener">Learn more</a>
|
||||
class="btn btn-flat btn-flat-frosted" target="_blank" rel="noopener">{%t home.get_involved.cards.cta %}</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -421,11 +391,9 @@ layout: default
|
||||
<img id="foundation_graphic" src="/assets/home/foundation/godot-foundation-logo-dark.svg" alt="Godot Foundation logo" width="1" height="1"
|
||||
class="img-auto-size" loading="lazy">
|
||||
</a>
|
||||
<p class="small auto-margin">
|
||||
You don't need to be an engine developer to help Godot. Join the <a href="https://fund.godotengine.org/">development fund</a> and help us make the Godot Engine even more awesome!
|
||||
</p>
|
||||
<p class="small auto-margin">{%t home.foundation.text %}</p>
|
||||
|
||||
<a href="https://fund.godotengine.org/" class="btn btn-flat btn-flat-white btn-flat-frosted">Donate</a>
|
||||
<a href="https://fund.godotengine.org/" class="btn btn-flat btn-flat-white btn-flat-frosted">{%t home.foundation.donate %}</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -434,10 +402,6 @@ layout: default
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// Updating the hero on the home page
|
||||
// get the current html lang attribute
|
||||
const htmlLang = document.documentElement.lang;
|
||||
if (window.location.pathname === '/' || window.location.pathname === '/' + htmlLang || window.location.pathname === '/' + htmlLang + '/') {
|
||||
const authors = [
|
||||
{% for project in site.showcase %}
|
||||
{% if project.featured_in_home %}
|
||||
@@ -489,7 +453,6 @@ layout: default
|
||||
window.requestAnimationFrame(parallaxTick)
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user