Vticnik: wvdslang
Verzija: 1.0.0
Imenski prostor: lib/plugins/wvdslang/
Avtor: Wolfgang van der Stille zeljko.petrusic@outlook.de
Licenca: GPL 2
Vticnik wvdslang omogoca vecjezicne prevode v DokuWiki straneh s centraliziranim upravljanjem. Rešuje problem raztresenih prevodov in ponuja varno alternativo PHP kodi v straneh.
{{wvds:lang>key}}
| Sintaksa | Opis | Primer |
|---|---|---|
{{wvds:lang>key}} | Prevod iz INI konfiguracije | {{wvds:lang>menu_home}} |
{{wvds:lang:CODE>key}} | Ekspliciten jezik | {{wvds:lang:en>menu_home}} |
{{wvds:lang>de:X|en:Y}} | Vgrajeni prevod | {{wvds:lang>de:Ja|en:Yes}} |
{{wvds:lang>conf:setting}} | DokuWiki konfiguracija | {{wvds:lang>conf:title}} |
{{wvds:lang>tpl:setting}} | Konfiguracija predloge | {{wvds:lang>tpl:footerText}} |
| Parameter | Tip | Opis |
|---|---|---|
| key | string | Kljuc iz INI konfiguracije |
| CODE | string | ISO 639-1 jezikovna koda (de, en, sl, itd.) |
| conf: | predpona | Predpona za DokuWiki konfiguracijske vrednosti |
| tpl: | predpona | Predpona za konfiguracijske vrednosti predloge |
Preko Skrbnik → Konfiguracija → wvdslang:
| Nastavitev | Tip | Privzeto | Opis |
|---|---|---|---|
enabled | Vklop/Izklop | Vklop | Omogoci/onemogoci vticnik |
languages | Besedilo | de,en | Razpolozljivi jeziki (loceni z vejico) |
defaultLang | Besedilo | de | Privzeti jezik za nadomestno vrednost |
langPosition | Število | 0 | Polozaj jezika v poti imenskega prostora (0 = prva raven) |
translations | Textarea | (prazno) | Prevodi v INI formatu |
Prevodi so shranjeni v INI formatu v konfiguraciji vticnika:
[de] menu_home = Startseite menu_contact = Kontakt menu_back = Zurück site_welcome = Willkommen auf unserer Seite [en] menu_home = Home menu_contact = Contact menu_back = Back site_welcome = Welcome to our site [sl] menu_home = Domov menu_contact = Kontakt menu_back = Nazaj site_welcome = Dobrodošli na naši strani
| Pravilo | Primer |
|---|---|
| Odsek z jezikovno kodo | [de], [en], [sl] |
| Kljuc = Vrednost | menu_home = Domov |
| Narekovaji niso potrebni | text = Moje besedilo |
| Presledki so dovoljeni | long_text = To je dolgo besedilo |
| Vecvrsticno ni mogoce | Uporabite \\n za prelome vrstic |
Zahteva: Besedilo menija naj se prikaže v trenutnem jeziku.
Dobrodošli na {{wvds:lang>menu_home}}!
Rezultat (pri sl:start):
Rezultat (pri en:start):
Zahteva: Prikazi angleški izraz v slovenski dokumentaciji.
Zgoščena vrednost (angl.: {{wvds:lang:en>term_hash}}) je kriptografski prstni odtis.
Konfiguracija:
[sl] term_hash = Zgoščena vrednost [en] term_hash = Hash
Rezultat:
Zahteva: Hiter prevod brez konfiguracijskega vnosa.
{{wvds:lang>de:Weiter|en:Continue|sl:Naprej}}
Rezultat:
Zahteva: Prevodi v stranski vrstici s HTML strukturo.
<html> <nav class="main-menu"> <ul> <li><a href="?id=start">{{wvds:lang>menu_home}}</a></li> <li><a href="?id=contact">{{wvds:lang>menu_contact}}</a></li> </ul> </nav> </html>
<html>…</html> blokov, ker nadomešca pred obdelavo HTML.
Zahteva: Preberi vecjezicni naslov wikija iz konfiguracije.
Dobrodošli v {{wvds:lang>conf:title}}
DokuWiki local.php:
$conf['title'] = 'de:Wissensdatenbank|en:Knowledge Base|sl:Baza znanja';
Rezultat (na slovenski strani):
1. Zaznava sintakse
└── Najde vse {{wvds:lang>...}} oznake na strani
2. Zaznava jezika
└── Preveri pot imenskega prostora (npr. sl:stran → "sl")
└── Ce ni najdeno: Brskalnikova Accept-Language glava
└── Ce ni najdeno: Privzeti jezik iz konfiguracije
3. Razrešitev kljuca
├── conf:* → Bere iz $conf[...]
├── tpl:* → Bere iz tpl_getConf(...)
├── de:X|en:Y → Razcleni vgrajeni format
└── key → Išce v INI prevodih
4. Ekstrakcija vrednosti
└── Za format s crtami: Izvlece vrednost za trenutni jezik
└── Za preprosto vrednost: Vrne vrednost neposredno
└── Nadomestna vrednost: defaultLang ali sam kljuc
5. Zamenjava
└── Zamenja oznako z najdeno vrednostjo
Jezik je zaznan v naslednji prioriteti:
| Prioriteta | Vir | Primer |
|---|---|---|
| 1 | Pot imenskega prostora | sl:dokumenti:start → „sl“ |
| 2 | Accept-Language glava | sl,en;q=0.9,de;q=0.8 → „sl“ |
| 3 | Privzeti jezik | defaultLang = sl → „sl“ |
langPosition. Pri langPosition=0 se uporabi prvi segment (npr. sl:dokumenti:start).
Preko Skrbnik → Konfiguracija → wvdslang:
| Nastavitev | Tip | Privzeto | Opis |
|---|---|---|---|
enabled | Vklop/Izklop | Vklop | Omogoci vticnik |
languages | Besedilo | de,en | Razpolozljivi jeziki |
defaultLang | Besedilo | de | Privzeti jezik |
langPosition | Število | 0 | Polozaj jezika v imenskem prostoru |
Textarea translations vsebuje vse prevode v INI formatu:
[de] ; Navigacija menu_home = Startseite menu_docs = Dokumentation menu_contact = Kontakt menu_back = Zurück ; Splošno site_welcome = Willkommen site_footer = © 2025 Moje podjetje [en] ; Navigation menu_home = Home menu_docs = Documentation menu_contact = Contact menu_back = Back ; General site_welcome = Welcome site_footer = © 2025 My Company [sl] ; Navigacija menu_home = Domov menu_docs = Dokumentacija menu_contact = Kontakt menu_back = Nazaj ; Splošno site_welcome = Dobrodošli site_footer = © 2025 Moje podjetje
| Scenarij | Vedenje |
|---|---|
| Kljuc ni najden | Vrne sam kljuc |
| Jezik ni v INI | Nadomestna vrednost na defaultLang |
| Nadomestna vrednost ni na voljo | Vrne kljuc |
| Neveljaven format | Vrne original |
Ce se pojavijo tezave, preverite:
langPosition pravilna?languages?| Scenarij | Priporocilo |
| Malo prevodov (<50) | Normalna uporaba |
| Veliko prevodov (50-500) | Združite po podrocju |
| Zelo veliko prevodov (>500) | Razdelite v wvdschunk |
{{wvds:lang>...}} naj uporabljajo ~~NOCACHE~~, ce se mora vsebina spreminjati glede na jezik.
| Verzija | Datum | Spremembe |
|---|---|---|
| 1.0.0 | 2025-01-06 | Zacetna izdaja |
Datoteka: lib/plugins/wvdslang/syntax.php
| Metoda | Opis |
|---|---|
getType() | Vrne substition |
getSort() | Vrne 305 (pred wvdschunk) |
connectTo($mode) | Registrira vzorec \\{\\{wvds:lang[^}]*>[^}]+\\}\\} |
handle($match, …) | Razcleni sintakso, izvlece kljuc in jezik |
render($mode, …) | Zamenja oznako s prevedeno vrednostjo |
Datoteka: lib/plugins/wvdslang/helper.php
| Metoda | Parametri | Vrne | Opis |
|---|---|---|---|
getLang() | - | string | Doloci trenutni jezik |
get() | $key, $lang=null | string | Vrne prevod |
parseTranslations() | $ini | array | Razcleni INI v polje |
parseValue() | $value, $lang | string | Izvlece jezikovno vrednost iz formata s crtami |
// V datotekah predlog (main.php, itd.) $helper = plugin_load('helper', 'wvdslang'); if ($helper) { $lang = $helper->getLang(); $homeText = $helper->get('menu_home'); echo "<a href='?id=start'>$homeText</a>"; }
// V drugih vticnikih $langHelper = plugin_load('helper', 'wvdslang'); if ($langHelper) { $translated = $langHelper->get('my_key'); }