Skočiť na obsah Skočiť na menu

Inet.sk - internetový denník

internetový denník

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.


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

Je Vaša doména voľná?

Platená reklama

Textová reklama

Ako začať podnikať na internete? Nechajte si poradiť. Aký má byť obsah kvalitne www stránky? Tvorba www stránok, Tvorba webu, Redakčný systém - CMS, Prieskumy o nakupovaní na internete, Pôžičky

Newsletter


Copyright © 2002 - 2012 Inet.sk, s. r. o.Všetky práva vyhradenéNeprešlo jazykovou úpravouISSN 1336-1899

Využívame kvalitný webhosting za rozumnú cenu od Webhosting Inet.sk


Bilancia skrývky Fotokniha Fotografie Osobnosti.sk