Monikielisyyden hallinta ja automaatio: Kattava asennusohje
Tämä dokumentti sisältää ohjeet The Chronicles of Ultimate Retro Station -projektin dokumentaation monikielisyyden toteuttamiseen. Järjestelmä perustuu automaattiseen kääntämiseen, i18n-lisäosaan ja englanninkielisiin Mermaid-kaavioihin. Tarkasta repositoriosta oikeat versiot python kääntäjästä ja mkdocs.yml:stä, alla esimerkkeinä.
1. Ympäristön valmistelu
Asenna tarvittavat Python-kirjastot järjestelmääsi. Tämä kattaa MkDocsin, käyttöliittymäteeman, kielituen sekä käännöstyökalun.
# Perusympäristö ja teema
pip install mkdocs-material
# Kielituki ja navigoinnin hallinta
pip install mkdocs-static-i18n
# Automaattinen kääntäjätyökalu
pip install deep-translator
2. Käännösskripti (translate_docs.py)
Ei käännä koodi tai tekstilohkoja, mermaid kuvioita, kuvalinkeistä ainoastaan selittävän tekstin.
import os
import re
from deep_translator import GoogleTranslator
from dotenv import load_dotenv
# Ladataan asetukset .env-tiedostosta
load_dotenv()
docs_dir = os.getenv('DOCS_DIR', 'docs')
source_lang = os.getenv('SOURCE_LANG', 'fi')
target_lang = os.getenv('TARGET_LANG', 'en')
def translate_markdown(content):
translator = GoogleTranslator(source=source_lang, target=target_lang)
lines = content.split('\n')
translated_lines = []
is_code_block = False
# Regex-kuviot:
# 1. Kuvalinkit: 
# 2. Tavalliset linkit: [teksti](polku)
image_or_link_pattern = re.compile(r'(!?\[.*?\]\(.*?\))')
for line in lines:
# 1. SUOJAUS: Koodilohkot (```text, ```mermaid, jne.)
if line.strip().startswith('```'):
is_code_block = not is_code_block
translated_lines.append(line)
continue
# Jos ollaan koodilohkon sisällä tai rivi on tyhjä, kopioidaan sellaisenaan
if is_code_block or not line.strip():
translated_lines.append(line)
continue
# 2. SUOJAUS: Kuvalinkit ja polut
# Jos rivi sisältää Markdown-linkin tai kuvan, on turvallisinta
# kääntää se varoen tai ohittaa automaatio, jotta polku ei hajoa.
# Tässä versiossa ohitetaan rivit, joissa on kuvia/linkkejä virheiden välttämiseksi.
if image_or_link_pattern.search(line):
# Vaihtoehtoisesti voisit kääntää vain osia, mutta polkujen
# rikkoutuminen on suurin riski, joten säilytetään alkuperäinen rivi.
translated_lines.append(line)
continue
# 3. KÄÄNNÖS: Tavalliset tekstirivit
try:
translated = translator.translate(line)
if translated is not None:
translated_lines.append(translated)
else:
translated_lines.append(line)
except Exception as e:
print(f"Virhe kääntäessä riviä: {line[:30]}... -> {e}")
translated_lines.append(line)
return '\n'.join(translated_lines)
def process_docs():
if not os.path.exists(docs_dir):
print(f"Virhe: Kansiota '{docs_dir}' ei löydy. Tarkista .env tai polku.")
return
for root, dirs, files in os.walk(docs_dir):
for file in files:
# Käsitellään vain .md tiedostot, mutta ohitetaan jo käännetyt (.en.md)
if file.endswith('.md') and not file.endswith(f'.{target_lang}.md'):
path = os.path.join(root, file)
new_path = os.path.join(root, file.replace('.md', f'.{target_lang}.md'))
print(f"Käsitellään: {path} -> {new_path}")
try:
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
translated_content = translate_markdown(content)
with open(new_path, 'w', encoding='utf-8') as f:
f.write(translated_content)
except Exception as e:
print(f"Tiedostovirhe {path}: {e}")
if __name__ == "__main__":
print(f"Aloitetaan käännös: {source_lang} -> {target_lang}")
process_docs()
print("\nKaikki tiedostot käsitelty!")
3. MkDocs konfigurointi (mkdocs.yml)
Lisätään seuraavat asetukset mkdocs.yml-tiedostoon, jotta kielenvaihto ja Mermaid-tuki aktivoituvat käyttöliittymässä.
site_name: The Chronicles of Ultimate Retro Station
theme:
name: material
language: fi
features:
- i18n.nav
- navigation.tabs
- content.code.copy
plugins:
- search
- i18n:
default_language: fi
languages:
fi:
name: Suomi
build: true
en:
name: English
build: true
nav_translations:
en:
"JÄRJESTELMÄHISTORIA": "SYSTEM HISTORY"
"ASENNUS": "INSTALLATION"
markdown_extensions:
- pymdownx.superfences:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format
4. Työnkulku ja säännöt
Noudata tätä rutiinia dokumentaatiota päivittäessäsi:
- Kirjoittaminen: Luo uusi .md-tiedosto docs/-kansioon ja kirjoita sisältö suomeksi.
- Mermaid-kaaviot: Luo kaaviot suoraan englanniksi (esim. node1["CPU"]). Älä käytä ääkkösiä kaavioiden teknisissä tunnisteissa.
- Kääntäminen: Aja python translate_docs.py. Tämä päivittää englanninkieliset versiot.
- Testaus: Aja mkdocs serve ja varmista, että oikean yläkulman kielenvaihdin ohjaa oikeille sivuille.
5. Vianetsintä
Mermaid ei näy: Varmista, että mkdocs.yml-tiedostossa on pymdownx.superfences-laajennus oikein konfiguroitu.
Käännös katkeaa: Google Translaten ilmaisrajapinnassa on merkkirajatyksiä per kutsu. Skripti kääntää rivi kerrallaan tämän välttämiseksi.
Kielenvaihdin puuttuu: Varmista, että i18n.nav on lisätty teeman features-listalle.
Monikielisyyden hallinta ja vianetsintä
Tämä ohje kuvaa, miten projektin suomen- ja englanninkieliset versiot pidetään synkronoituna ja miten yleisimmät navigaatio-ongelmat ratkaistaan.
1. Ongelman kuvaus (Case Study)
Projektin alkuvaiheessa navigaatio ei kääntynyt englanniksi, vaikka asetukset näyttivät olevan kunnossa. Syynä oli kaksi tekijää:
-
Versioristiriita: Käytössä oli
mkdocs-static-i18nversio 1.x, mutta asetukset noudattivat vanhaa 0.x-standardia. -
Plugin-konflikti:
awesome-pages-lisäosa yritti hallita navigaatiota automaattisesti, mikä esti manuaalisten käännösten aktivoitumisen.
2. Ratkaisu: Oikea konfiguraatio
Nykyisessä versiossa (v1.x+) käännökset on sijoitettava suoraan kohdekielen alle mkdocs.yml-tiedostossa.
Oikea rakenne:
plugins:
- i18n:
languages:
- locale: fi
default: true
- locale: en
nav_translations: # TÄRKEÄÄ: Sisennetty kielen sisään
"Suomi-otsikko": "English Title"
reconfigure_material: true
6. Manuaalinen ajo (Paikallinen kehitys)
Aina kun olet muokannut suomenkielisiä tiedostoja, sinun tulee ajaa skripti terminaalissa ennen kuin käynnistät MkDocsin:
python translate_docs.py # Luo/päivittää .en.md tiedostot
mkdocs serve # Käynnistää esikatselun
7. Automaattinen ajo (GitLab CI/CD)
Jos halutaan, että käännös tapahtuu täysin automaattisesti aina kun lähetetään koodia GitLabiin (git push), tulee lisätä skriptin suoritus .gitlab-ci.yml -tiedostoon. Tällöin putki hoitaa työn:
pages:
stage: deploy
script:
- pip install -r requirements.txt
- python translate_docs.py # Skripti kääntää tiedostot CI-ympäristössä
- mkdocs build # Rakentaa sivuston, jossa on molemmat kielet
artifacts:
paths:
- public
Requirements.txt määritys
- Tallenna tämä projektin juurikansioon nimellä: requirements.txt
# MkDocs perusrunko ja suosittu teema
mkdocs>=1.5.0
mkdocs-material>=9.0.0
# Mermaid-tuki ja edistyneet Markdown-laajennukset
pymdown-extensions>=10.0
# Monikielisyystuki (i18n)
mkdocs-static-i18n>=1.2.0
# Automaattinen kääntäminen (translate_docs.py skriptiä varten)
deep-translator>=1.11.0
pip install -r requirements.txt
Vain manuaalinen on otettu käyttöön