Archív Inet.sk Pôvodný autor: Július Pastierik
12. 05. 2010 o 00:00 3955x

Makrá v OpenOffice.org – programovo lokalizované dialógové okná (3)

V predposlednom pokračovaní návodov o jazykovo lokalizovaných makrách si ukážeme, ako musíme jazykovo lokalizovať makro zo súborov v rôznych operačných systémoch.
Makrá v OpenOffice.org – programovo lokalizované dialógové okná (3)

V predchádzajúcom dieli seriálu o jazykovo lokalizovaných makrách sme si ukázali základnú možnosť, ako je možné lokalizovať dialógové okná a makrá zo súboru. Pravdaže, v tomto prípade prichádza na rad aj ďalšie riešenie jazykových lokalizácií dialógových okien, pretože, pokiaľ ich lokalizujete priamo v prostredí OpenOffice.org je to časovo náročné, pričom všetko musíte robiť sami, môžete ľahko posunúť jednotlivé prvky dialógového okna, čím si pokazíte formátovanie atď.

Z uvedených dôvodov prichádza na um riešenie, ktoré poznáte aj z rôznych programov – kompletná lokalizácia do iných jazykov, okrem základného, bude v externých súboroch. V tomto prípade sa v makre nemusíte už vôbec zaoberať tým, aké budú jazykové lokalizácie, na ktorých môžu spolupracovať ľudia z celého sveta, pokiaľ dodržia určitý štandard. A práve preto, aby tento štandard dodržali, určíme si jednoduchý formát definičného textového súboru podobný tomu, aký sme uviedli minule:

Polozka_dialogu=Vlastný text bez úvodzoviek

V tomto prípade budeme nastavovať text v dialógu pomocou príkazu:

dlg.model.getByName("Polozka_dialogu").setpropertyvalue("Label","príslušný text")

a nadpis dialógu pomocou príkazu:

dlg.Title="vlastný nadpis"
Definícia dialógového okna

V makre zabezpečíme, že ak niekto niektorú položku nepreloží, tak nebude preložená a použije sa automaticky tá, ktorá je nastavená priamo v dialógu. Zároveň v makre nastavíme, že ak niektorá položka je definovaná chybne, budeme ju ignorovať.

Teraz však prichádza na rad ďalšia vec – OpenOffice.org pri textových súboroch v rôznych operačných systémoch používa rôzne kódovanie. V operačnom systéme Linux je to UTF-8, vo Windows je to CP1250. Preto, ak chcete, aby sa texty správne zobrazovali v rôznych systémoch, musíte pripraviť rôzne verzie (s rôznym kódovaním) textových súborov s jazykovou lokalizáciou a ich názov musí okrem jazyka obsahovať aj skratku operačného systému (napr. „jp_znaky_lin_en.txt“, „jp_znaky_win_cs.txt“). V tomto prípade súbor môžete otvárať takto:

if GetGUIType()=1 then ' 1-Windows, 4-Linux
 nazov="win_" ' ISO 8859-2
else
 nazov="lin_" ' UTF-8
endif

kde=basiclibraries.getLibraryLinkURL("JP_znaky") ' Adresár, kde je rozšírenie nainštalované
nazov=left(kde,len(kde)-10)+"jp_znaky_"+nazov+Jazyk_OOo+".txt" ' Súbor s jazykovou lokalizáciou

open nazov for Input as #subor


OpenOffice.org však poskytuje nástroje pre otváranie súborov s presným kódovaním. Preto je jednoduchšie, ak sa pripraví iba jeden lokalizačný súbor pre daný jazyk (povedzme v kódovaní UTF-8) a tento sa bude otvárať v makre.


Zobrazený počet znakov

Príklad s takouto jazykovou lokalizáciou si ukážeme na makre, ktoré spočíta všetky slová a znaky dokumentu s medzerami aj bez medzier a prepočíta ich na normostrany a autorské hárky. To isté urobí zároveň aj pre označenú (vybranú) časť textu. Makro zároveň zobrazí počet riadkov dokumentu.

Dnes si ukážeme iba procedúru pre jazykovú lokalizáciu, ostatné funkcie a procedúry budú uvedené v budúcom dieli tohto seriálu.

Rem Procedúra spočíta znaky a slová v dokumente a definovanom výbere
Sub Pocitanie_znakov

 dim vsetky_riadky, vsetky_znaky, vsetky_slova, vsetky_znaky_bez as long ' Statisticke udaje o celom dokumente
 dim vsetky_normo, vsetky_AH as single
 dim vyber_pocet, vyber_znaky, vyber_znaky_bez, vyber_slova as long ' Statisticke udaje o vybere
 dim vyber_normo, vyber_AH as single
 
 dim riadok as string
 dim vyber_ktory, dlzka_riadku, i as long
 dim slovo as boolean
 dim znak as string
 
 dim kde, nazov as string
 dim rovna as integer
 dim premenna, definicia as string
 
 dim sf, inStream, inFile ' Pre čítanie z lokalizačného súboru
 
 init_znaky
 
 vsetky_riadky=dokument.CurrentController.LineCount
 vsetky_znaky=dokument.CharacterCount ' pocet znakov
 vsetky_znaky_bez=vsetky_znaky-Spocitaj_Hladanim(medzery_regularne,true,false,false)
 vsetky_slova=dokument.WordCount ' pocet slov
 vsetky_normo=vsetky_znaky/normo_strana ' pocet normo stran celeho dokumentu
 vsetky_AH=vsetky_normo/autorsky_harok ' pocet autorskych harkov celeho dokumentu
 
 vyber_pocet=vyber.getCount() ' Pocet vyberov
 
 vyber_znaky=0 ' pocet znakov s medzerami
 vyber_znaky_bez=0 ' pocet znakov bez medzier
 vyber_slova=0 ' pocet slov
 
 for vyber_ktory=0 to vyber_pocet-1
  riadok = vyber.getByIndex(vyber_ktory).getString() ' riadok z vyberu
  dlzka_riadku=len(riadok)
  slovo=false ' slovo neobsahuje este ziadny znak
  
  rem pre vsetky znaky
  for i=1 to dlzka_riadku
   znak=mid(riadok,i,1) ' spracovavame i-ty znak z riadku
   if instr(oddelovac_slov,znak)=0 then ' znak nie je oddelovac slov, t.j. je castou slova
    slovo=true ' slovo obsahuje nejaky znak
   Elseif slovo then ' znak je oddelovac slova a slovo obsahovalo nejaky znak – zvysuje sa pocet slov
    vyber_slova=vyber_slova+1
    slovo=false
   endif
   if instr(nepocitane_znaky,znak)=0 then ' znak pocitame
    vyber_znaky=vyber_znaky+1
    if instr(medzery,znak)=0 then ' znak nie je medzera
     vyber_znaky_bez=vyber_znaky_bez+1
    endif
   endif
  next i
 next vyber_ktory
 rem ak sme na konci posledneho slova nemali oddelovac, tak toto slovo este nemame zapocitane
 if slovo then
  vyber_slova=vyber_slova+1
 endif
 vyber_normo=vyber_znaky/normo_strana
 vyber_AH=vyber_normo/autorsky_harok
 
 DialogLibraries.LoadLibrary("JP_znaky")
 dlg=CreateUnoDialog(DialogLibraries.JP_znaky.Dialog_znaky) ' Sprístupnenie dialógu
  
 ' Nastavenie číselných výstupov
 dlg.model.getByName("AHD").setpropertyvalue("Label",trim(single_2_string(vsetky_AH)))
 dlg.model.getByName("AHV").setpropertyvalue("Label",trim(single_2_string(vyber_AH)))
 dlg.model.getByName("NSD").setpropertyvalue("Label",trim(single_2_string(vsetky_normo)))
 dlg.model.getByName("NSV").setpropertyvalue("Label",trim(single_2_string(vyber_normo)))
 dlg.model.getByName("RIA").setpropertyvalue("Label",trim(str(vsetky_riadky)))
 dlg.model.getByName("SLD").setpropertyvalue("Label",trim(str(vsetky_slova)))
 dlg.model.getByName("SLV").setpropertyvalue("Label",trim(str(vyber_slova)))
 dlg.model.getByName("ZMD").setpropertyvalue("Label",trim(str(vsetky_znaky)))
 dlg.model.getByName("ZMV").setpropertyvalue("Label",trim(str(vyber_znaky)))
 dlg.model.getByName("ZBD").setpropertyvalue("Label",trim(str(vsetky_znaky_bez)))
 dlg.model.getByName("ZBV").setpropertyvalue("Label",trim(str(vyber_znaky_bez)))
 
 kde=basiclibraries.getLibraryLinkURL("JP_znaky") ' Adresár, kde je rozšírenie nainštalované
 nazov=left(kde,len(kde)-10)+"jp_znaky_"+Jazyk_OOo+".txt" ' Súbor s jazykovou lokalizáciou
 
 on error resume next
 
 if fileexists(nazov) then ' Ak lokalizačný súbor existuje, tak načítame definície do premenných
  ' Namiesto postupu, v ktorom sa nedá definovať kódová stránka:
  ' subor = Freefile
  ' open nazov for Input as #subor
  ' While not eof(subor)
  ' ...
  ' close #subor
  ' Použijeme postup s definovaním kódovej stránky TXT súboru:
  sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  inStream = sf.openFileRead(nazov)
  inFile = createUnoService("com.sun.star.io.TextInputStream")
  inFile.InputStream = inStream
  inFile.Encoding = "UTF-8" ' lokalizačný súbor musí byť v UTF-8, inak nebude dobrá diakritika
  
  Do While not inFile.IsEOF
   riadok = inFile.readLine ' namiesto Line Input #subor, riadok
   rovna=instr(riadok,"=")
   if rovna<>0 then
    premenna=trim(left(riadok,rovna-1)) ' Budeme ignorovať medzery
    definicia=trim(right(riadok,len(riadok)-rovna))
    if premenna="Dialog_znaky" then
     dlg.Title=definicia
    else
     dlg.model.getByName(premenna).setpropertyvalue("Label",definicia)
    endif
   end if
  loop
  ' Zatvorenie definičného súboru – namiesto close #subor
  inStream.closeInput
  inFile.closeInput
 end if
 
 dlg.Execute() ' Spustenie dialógu
 dlg.dispose() ' Zatvorenie dialógu
End Sub

Novinky a inšpirácie

Z nášho blogu

Prečítajte si novinky, inšpirácie a dôležité informácie zo sveta webhostingu a technológií.

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami Oznamy
21. 10. 2026

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami

Vývojársky tím PHP vydal dôležité bezpečnostné záplaty pre všetky oficiálne podporované verzie PHP 8. Na našich serveroch sme nezaváhali ...

Čítať viac
Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás? Oznamy
01. 10. 2026

Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás?

Google oznámil, že v januári 2027 zruší v Gmaile funkciu „Odoslať ako“ (Send as) pre e-mailové adresy od iných poskytovateľov. Ak ste si ...

Čítať viac
Večerná „prestávka“ pre server VIP033 Oznamy
25. 09. 2026

Večerná „prestávka“ pre server VIP033

Neustále pracujeme na tom, aby vaše weby bežali hladko, rýchlo a bezpečne. Technológie idú míľovými krokmi vpred a my v Inet.sk s nimi dr...

Čítať viac
Novinky na Inet.sk (09 / 2026) Novinky
09. 09. 2026

Novinky na Inet.sk (09 / 2026)

Posledné mesiace sme v Inet.sk nevenovali len stabilite serverov, ale najmä počúvaniu vašich reálnych skúseností z každodennej praxe. Výs...

Čítať viac

Podpora klientom

Máte ďalšie otázky?

Nezúfajte, pripravili sme pre Vás jednoduché odpovede na najdôležitejšie otázky, ktoré od našich klientov dostávame.

Zistiť viac

Naše výhody

Prečo si nás vybrať?

Našim klientom ponúkame až 30-dňovú záruku vrátenia peňazí.

Sme skutočný slovenský webhosting

Slovenská
firma

Nepatríme pod žiadnu nadnárodnú spoločnosť, sme malá rodinná firma.

Na nás sa môžete kedykoľvek spoľahnúť

Dlhoročné
skúsenosti

Na slovenskom trhu pôsobíme už viac ako 20 rokov, sme overená značka.

Naši prví zákazníci sú stále s nami

Spokojní
zákazníci

Naši zákazníci sú ako naša rodina, preto nám verí už viac ako 1250 klientov.

Maximálna bezpečnosť

Maximálna
bezpečnosť

Chránime Vás pred útokmi i SPAMom. U nás sú Vaše dáta v bezpečí.

Prozákaznícka podpora

Ochotná
podpora

Zakladáme si na individuálnom prístupe, preto Vám vždy radi pomôžeme.

Kvalita a dobrá cena

Férová
cena

Cena pri obnove je rovnaká ako pri objednávke. Nezdražujeme po prvom roku a bez skrytých poplatkov.

U nás sa Vám nič nestratí

Pravidelné
zálohovanie

Vaše dáta zálohujeme každý deň, dostupné sú aj zálohy z pred niekoľkých mesiacov.

Svižný Admin Panel nájdete len u nás

Prehľadný
Admin Panel

Máme rýchly a prehľadný Admin Panel, ktorý zvládne používať naozaj každý.

Správa používateľov

Správa
používateľov

Spravujte svoje projekty bez akýchkoľvek obáv s kolegami alebo externými partnermi.

Máme zľavy pre verných klientov

Vernostné
zľavy

Verní klienti u nás automaticky získavajú 15 % zľavu na každú ďalšiu objednávku.

My Vás nebudeme obmedzovať

Bez
obmedzení

Neobmedzujeme počet databáz, e-mailov, ftp a ani prenos dát.

Hosting pre WordPress

WordPress
na 1 klik

Nainštalujte si obľúbené redakčné systémy rýchlo a jednoducho.

Referencie

Spokojní zákazníci

Pozrite sa, čo o nás povedali naši klienti. Neváhajte a pridajte sa k nám ešte dnes.

Auto 100
Bystricoviny
eCall Slovakia
Filip Jančík
Frost
Merkury Broker
Mi:Su Design
Mesto Nitra
Pro Clienta
Schneider Lekáreň
Vego Marketing
Mesto Zlaté Moravce

Všetky ceny sú uvádzané bez DPH
© 2006 - 2026, Inet.sk, s. r. o., Všetky práva vyhradené

Na našej stránke používame "cookies". Vďaka nim sledujeme návštevnosť, prispôsobujeme reklamu a používateľské nastavenia, čo zlepšuje Váš zážitok z našej stránky. Súhlasíte s ich spracovaním?
Vlastné nastavenia cookies