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á (2)

V ďalšom pokračovaní návodov o jazykovo lokalizovaných makrách si ukážeme, ako dokážeme jazykovo lokalizovať makro zo súborov, ktoré obsahuje definíciu príslušných textov.


 

Minule sme si ukázali, ako dokážeme jazykovo lokalizovať makro priamo v programovom kóde, pričom definícia príslušných jazykovo lokalizovaných textov bola súčasťou tohto makra. Iný spôsob jazykovej lokalizácie spočíva v tom, že príslušné preklady budeme mať v súboroch. Pokiaľ dodržíme rovnakú špecifikáciu názvov týchto súborov podľa jazyka, riešenie môže byť absolútne univerzálne s tým, že vopred nemusíme vôbec počítať s tým, aký preklad sa kedy urobí – pokiaľ bude existovať, načíta sa príslušný súbor, inak sa použije štandardný, povedzme anglický text.

Predpokladajme, že v adresári, kde máme makro sú (alebo budú) zároveň uložené súbory „jp_znaky_xx.txt“, pričom „xx“ označuje príslušný jazyk pracovného rozhrania. Pokiaľ súbor pre príslušný jazyk nebude existovať, nastavíme text priamo v makre. A aby sme makro dotiahli do čo najväčšej dokonalosti, budme predpokladať, že preklad nemusí byť úplný a preto v súbore budeme požadovať definíciu prekladu v tvare podobnom, ako je zápis v programe, t. j. ak niektorý zápis bude chýbať alebo bude nesprávny, ponecháme pri príslušnom texte štandardný text. Súbor „jp_znaky_sk.txt“ by mal v tomto prípade obsahovať nasledujúce záznamy:

txt_znak0=znak
txt_znak1=znaky
txt_znak2=znakov
txt_slovo0=slovo
txt_slovo1=slová
txt_slovo2=slov


Vlastné makro potom môže vyzerať nasledovne:

dim dlg as object ' Dialóg pre on-line zobrazovanie počtu znakov
dim txt_znak0, txt_znak1, txt_znak2, txt_slovo0, txt_slovo1, txt_slovo2 as string ' Pre jazykovo lokalizované vypisovanie

function Jazyk_OOo as string
 dim ConfigProvider, MasterKey as object
 dim NodePath(0) as new com.sun.star.beans.PropertyValue
 dim jazyk as string
 
 NodePath(0).Name = "nodepath"
 NodePath(0).Value = "org.openoffice.Setup/L10N/"
 
 ConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
 MasterKey = ConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", NodePath())
 Jazyk_OOo = MasterKey.getByName("ooLocale") '"sk", "cs", ...
end function

sub Nastav_jazyk_text

 ' dim cesta as object
 dim kde, nazov as string
 dim subor, rovna as integer
 dim riadok, premenna, definicia as string
  
 txt_znak0="char"
 txt_znak1="chars"
 txt_znak2="chars"
 txt_slovo0="word"
 txt_slovo1="words"
 txt_slovo2="words"
 
 ' cesta=CreateUnoService("com.sun.star.util.PathSettings") ' Pokiaľ by sme mali súbor v adresári používateľských nastavení OO.o
 ' nazov=cesty.UserConfig+"/"+"jp_znaky_"+Jazyk_OOo+".txt"
 
 kde=basiclibraries.getLibraryLinkURL("JP_znaky") ' Pokiaľ máme makro nainštalované ako rozšírenie
 nazov=left(kde,len(kde)-10)+"jp_znaky_"+Jazyk_OOo+".txt"
  
 if fileexists(nazov) then ' Ak súbor existuje, tak načítame definície do premenných
  subor = Freefile
  open nazov for Input as #subor
  While not eof(subor)
   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))
    select case premenna
     case "txt_znak0"
      txt_znak0=definicia
     case "txt_znak1"
      txt_znak1=definicia
     case "txt_znak2"
      txt_znak2=definicia
     case "txt_slovo0"
      txt_slovo0=definicia
     case "txt_slovo1"
      txt_slovo1=definicia
     case "txt_slovo2"
      txt_slovo2=definicia
    end select
   end if
  wend
  close #subor
 end if
end sub

function daj_text(cislo, i as long) as string
 dim pom as string
 select case cislo
  case 1
   select case i
    case 1
     pom=txt_znak0
    case else
     pom=txt_slovo0
   end select
  case 2, 3, 4
   select case i
    case 1
     pom=txt_znak1
    case else
     pom=txt_slovo1
   end select
  case else
   select case i
    case 1
     pom=txt_znak2
    case else
     pom=txt_slovo2
   end select
 end select
 daj_text=str(cislo)+" "+pom
end function

Sub Pocitanie_online
 rem Procedura priebežbe zobrazuje počet znakov a slov
 
 Nastav_jazyk_text ' Nastavenie textov podľa jazyka pracovného rozhrania
 
 DialogLibraries.LoadLibrary("JP_znaky")
 
 dlg=CreateUnoDialog(DialogLibraries.JP_znaky.Znaky_online)
 
 ' Počiatočné nastavenie zobrazovaného počtu
 
 dlg.model.Label1.Label=daj_text(ThisComponent.CharacterCount, 1) ' počet znakov
 dlg.model.Label2.Label=daj_text(ThisComponent.WordCount, 2) ' počet slov
 
 dlg.setVisible(true) ' zviditeľnenie dialógu – namiesto dlg.Execute(), aby sa dalo paralelne pracovať s textom
 
 on error goto Zatvoreny_dokument ' Ak počas behu makra zatvoríme dokument, vedie to ku chybe – skočíme na zatvorenie dialógu
 
 while dlg.isVisible() ' Cyklus, ktorý čaká na stlačenie klávesy "Koniec" v dialógu (kým je dialóg viditeľný)
  wait 500 ' Časová medzera 500 milisekúnd (0,5 sec) na to, aby sa dalo paralelne pracovať s dokumentom
  ' Výpis zmeneného počtu každú 0,5 sec
  dlg.model.Label1.Label=daj_text(ThisComponent.CharacterCount, 1) ' počet znakov
  dlg.model.Label2.Label=daj_text(ThisComponent.WordCount, 2) ' počet slov
 wend
 Zatvoreny_dokument:
 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
Kompletné informácie o Kika Banská Bystrica | Čo takto navštíviť Viedeň? | Zaujímavé informácie priamo od zdroja

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