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:
Emi
2025-02-27 19:33:16 +01:00
committed by GitHub
parent 4f667964da
commit bf79f99062
16 changed files with 758 additions and 377 deletions

View File

@@ -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)

View File

@@ -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:

View File

@@ -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&nbsp;for."
subtitle: "A simple, responsive Jekyll theme for your blog or site."
h1: Your free, open&#8209;source<br>game engine.
subtitle: Develop your 2D &amp; 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&nbsp;Engine even more awesome!"
donate: Donate

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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
View 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
View 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;
}
}
}

View File

@@ -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) {

View File

@@ -49,3 +49,9 @@ nav#nav {
}
}
}
#nav .language-selector {
@media (min-width: 1200px) {
background-image: url(/assets/icons/language.svg) !important;
}
}

View 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

View 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
View 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];
}
});

View File

@@ -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&#8209;source<br>
game engine.
</h1>
<p>Develop your 2D &amp; 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&nbsp;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>