🌐 feat(i18n): overhaul translation system & add languages (#145)

Revamp the existing translation system, simplifying
management and adding several new languages. The new system reads from
TOML files in the `/i18n` directory and improves template structures.
It also enhances customisation options and robustness by providing
fallbacks and modularity.

- Implement a new, streamlined translation macro.
- Load translations from `/i18n` TOML files.
- Remove redundant configuration requirements.
- Refactor templates to align with new i18n system.
- Add support for Hindi, Japanese, Russian, Portuguese, Chinese,
  Italian, German, Ukranian, Korean, and French languages.
- Credit Thomas Weitzel (@thomasweitzel) for inspiration.
This commit is contained in:
Óscar
2023-09-12 18:58:58 +02:00
committed by GitHub
parent 327545f2d5
commit 32a2d5094b
46 changed files with 1534 additions and 483 deletions

View File

@@ -1,7 +1,12 @@
{%- import "macros/translate.html" as macros_translate -%}
{# Load internationalisation data #}
{%- set language_strings = load_data(path="i18n/" ~ lang ~ '.toml', required=false) -%}
{%- if not language_strings -%}
{%- set language_strings = load_data(path="themes/tabi/i18n/" ~ lang ~ ".toml", required=false) -%}
{%- endif -%}
{%- set open_quote = macros_translate::translate(key="open_quotation_mark", default="“") -%}
{%- set close_quote = macros_translate::translate(key="close_quotation_mark", default="”") -%}
{%- set open_quote = macros_translate::translate(key="open_quotation_mark", default="“", language_strings=language_strings) -%}
{%- set close_quote = macros_translate::translate(key="close_quotation_mark", default="”", language_strings=language_strings) -%}
{#- The `random_id` ensures that each instance of the shortcode has a "unique" id -#}
{#- allowing individual interactive elements (like toggles) to function correctly. -#}
@@ -15,16 +20,16 @@
<div class="translated">
<blockquote>
<p>{{ open_quote ~ translated ~ close_quote }}</p>
{% if author %}<p> — {{ author }}{% endif %}<label for="toggle-{{ random_id }}" class="quote-label quote-label-original">
({{- macros_translate::translate(key="show_original_quote", default="Show original quote") -}})
</label></p>
{% if author %}<p> — {{ author }}{% endif %} <label for="toggle-{{ random_id }}" class="quote-label quote-label-original">
({{- macros_translate::translate(key="show_original_quote", default="Show original quote", language_strings=language_strings) -}})
</label></p>
</blockquote>
</div>
<div class="original">
<blockquote>
<p>{{ open_quote ~ original ~ close_quote }}</p>
{% if author %}<p> — {{ author }}{% endif %} <label for="toggle-{{ random_id }}" class="quote-label quote-label-translate">
({{- macros_translate::translate(key="show_translation", default="Show translation") -}})
({{- macros_translate::translate(key="show_translation", default="Show translation", language_strings=language_strings) -}})
</label></p>
</blockquote>
</div>