Július Pastierik / 14. 04. 2010, 00:00
V dnešnom pokračovaní návodov o jazykovo lokalizovaných makrách si ukážeme, ako dokážeme nastavovať jazyk nadpisov v dialógových oknách programovo, t. j. priamo v makrách.
V minulom dieli sme si ukázali spôsob, ako sa lokalizujú dialógové okná. Niekedy však potrebujete meniť ich obsah aj v makre, preto si dnes ukážeme, ako sa to dá naprogramovať. Samozrejme, tento postup sa dá aplikovať aj na iné jazykové lokalizácie, napríklad aj na správy vypisované pomocou príkazu msgbox a pod.
Ako príklad môžeme použiť zobrazovanie počtu znakov počas písania s tým, že budeme chcieť skloňovať vypisované slová znak/znaky/znakov a slovo/slová/slov.
Prvý spôsob takejto lokalizácie, ktorý si ukážeme, bude spočívať v tom, že podľa jazyka pracovného rozhrania OpenOffice.org budeme pomocou prepínača (príkaz select case) nastavovať vlastné texty. Toto riešenie je jednoduché a postačuje pre menšie makrá, prípadne pre malý počet jazykov a vypisovaných textov. Akonáhle však v makre potrebujete jazykovo lokalizovať viac textov a to do pomerne veľkého množstva jazykov, programový kód sa zbytočne predlžuje (pre každý jazyk musíte vždy pridávať ďalšie a ďalšie voľby v príslušných prepínačoch), čím stráca aj na prehľadnosti.
Teraz si však ukážme makro, kde je lokalizácia prevedená priamo v ňom. Minule ukázané dialógové okno pre zobrazovanie počtu znakov a slov mierne upravíme – stačí, ak v ňom ponecháme dva textové oznamy, pretože počet znakov a slov môžeme pridávať priamo ku skloňovaným slovám znak/znaky/znakov a slovo/slová/slov. Makro je jazykovo lokalizované do slovenčiny, češtiny a angličtiny s tým, že pokiaľ bude mať OpenOffice.org nastavený iný jazyk pracovného rozhrania, použije sa angličtina.
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 jazyk as string
jazyk = Jazyk_OOo '"sk", "cs", ...
select case jazyk ' Názov tlačidla Odkry/Vymaž budeme meniť podľa jazyka
case "sk" ' Slovenčina
txt_znak0="znak"
txt_znak1="znaky"
txt_znak2="znakov"
txt_slovo0="slovo"
txt_slovo1="slová"
txt_slovo2="slov"
case "cs" ' Čeština
txt_znak0="znak"
txt_znak1="znaky"
txt_znak2="znaků"
txt_slovo0="slovo"
txt_slovo1="slova"
txt_slovo2="slov"
case else ' Ostatné jazyky budú anglicky
txt_znak0="char"
txt_znak1="chars"
txt_znak2="chars"
txt_slovo0="word"
txt_slovo1="words"
txt_slovo2="words"
end select
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
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk