Július Pastierik / 28. 04. 2010, 00:00
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
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