Archív Inet.sk Pôvodný autor: Július Pastierik
24. 02. 2010 o 00:00 2762x

Makrá v OpenOffice.org – jazykovo lokalizované vkladanie dátumu a času

Potrebujete jazykovo lokalizovať svoje makro? V prvom dieli článkov o makrách, ktoré budú venované jazykovým lokalizáciám, si ukážeme, ako zistíte aktuálny jazyk znaku v textovom dokumente či jazyk bunky v module Calc v makre pre vkladanie dátumu a času.
Makrá v OpenOffice.org – jazykovo lokalizované vkladanie dátumu a času

 

Pri programovaní makier sa stretávate s problematikou, že vaše makro potrebujete z ľubovoľného dôvodu jazykovo lokalizovať. Jazyková lokalizácia sa môže týkať viacerých oblastí – dialógových panelov, vypisovaných oznámení, jazyka dokumentu či iba aktuálneho jazyka práve vkladaného textu v textovom procesore či bunky v zošite tabuľkového procesora.

V dnešnom dieli si pre začiatok zoberieme iba jednu problematiku – jazyk práve vkladaného textu v module Writer a jazyk aktuálnej bunky v module Calc. Tieto údaje následne použijeme pri vkladaní názvu mesiaca v dátume, ktorý budeme automaticky nastavovať podľa jazyka. Pravdaže, nebudeme tu riešiť všetky jazyky, ale obmedzíme sa iba na tri – slovenčinu, češtinu a angličtinu.

Jazyk je v OpenOffice.org určený znakmi (napr. „sk“) podľa normy ISO 639-1, pričom je k dispozícii aj kódové označenie štátu (napr. „SK“) podľa normy ISO 3166-1 alpha-2. Označenie štátu využijete vtedy, ak potrebujete urobiť inú lokalizáciu napríklad pre americkú a inú pre britskú angličtinu (v dnešnom príklade túto možnosť nevyužijeme). V textovom dokumente zistíte jazyk a štát znaku, na ktorom sa nachádzate, pomocou nasledovných príkazov:

ThisComponent.currentcontroller.getViewCursor().CharLocale.Language
ThisComponent.currentcontroller.getViewCursor().CharLocale.Country


V zošite tabuľkového procesora zistíte jazyk a štát bunky, na ktorej sa nachádzate, pomocou nasledovných príkazov:

ThisComponent.getCurrentSelection().getCellByPosition(0,0).CharLocale.Language
ThisComponent.getCurrentSelection().getCellByPosition(0,0).CharLocale.Country


A teraz nasleduje, ako obvykle, vlastné makro s komentármi.

REM Makro pre vloženie aktuálneho dátumu na bunku (Calc) alebo pozíciu (Writer), kde sa nachádzame
sub Vloz_Datum
 dim dokument, bunka as object
 dim teraz, datum, cas as string
 dim i as integer
 teraz=now ' Aktuálny dátum a čas vo formáte "dd.mm.rrrr hh:mm:ss"
 i=instr(teraz," ") ' Pozícia, kde je oddelený dátum a čas
 datum=left(teraz,i-1) ' Dátum
 if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then ' Ak sme v tabuľkovom procesore
  ' Funkcia vloží dátum do aktuálnej bunky zošitu v Calcu
  dokument=ThisComponent.getCurrentSelection() ' Aktuálny výber
  bunka=dokument.getCellByPosition(0,0) ' Aktuálna bunka
  bunka.value=datevalue(datum) ' Vloženie dátumu ako hodnoty
 endif
 if ThisComponent.supportsService("com.sun.star.text.TextDocument") then ' Ak sme v textovom dokumente
  ' Funkcia vloží dátum na aktuálnu pozíciu vo Writeri
  dokument=ThisComponent.currentcontroller.getViewCursor() ' Aktuálna pozícia kurzora
  dokument.collapseToEnd() ' Presun na koniec a zrušenie označenia, ak je označený text
  teraz=dokument.getstring() ' Text na konci kurzora
  dokument.setstring(teraz+datum) ' K textu pridáme dátum
  dokument.collapseToEnd() ' Presun na koniec vloženého dátumu
 endif
end sub

REM Makro pre vloženie aktuálneho dátumu ako text s medzerami na bunku (Calc) alebo pozíciu (Writer), kde sa nachádzame
sub Vloz_Datum_text
 dim dokument, bunka as object
 dim teraz, datum, cas as string
 dim dd, mm, rr as string
 dim i as integer
 teraz=now ' Aktuálny dátum a čas vo formáte "dd.mm.rrrr hh:mm:ss"
 i=instr(teraz," ") ' Pozícia, kde je oddelený dátum a čas
 datum=left(teraz,i-1) ' Dátum
 ' Dátum je v tvare dd.mm.rrrr, z toho vytvoríme dd. mm. rrrr – medzi čísla vložíme nezalomiteľné medzery
 dd=left(datum,3)
 mm=mid(datum,4,3)
 rr=right(datum,len(datum)-6)
 datum=dd+chr$(&HA0)+mm+chr$(&HA0)+rr
 if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then ' Ak sme v tabuľkovom procesore
  ' Funkcia vloží dátum do aktuálnej bunky zošitu v Calcu
  dokument=ThisComponent.getCurrentSelection() ' Aktuálny výber
  bunka=dokument.getCellByPosition(0,0) ' Aktuálna bunka
  bunka.string=datum ' Vloženie dátumu ako reťazca
 endif
 if ThisComponent.supportsService("com.sun.star.text.TextDocument") then ' Ak sme v textovom dokumente
  ' Funkcia vloží dátum na aktuálnu pozíciu vo Writeri
  dokument=ThisComponent.currentcontroller.getViewCursor() ' Aktuálna pozícia kurzora
  dokument.collapseToEnd() ' Presun na koniec a zrušenie označenia, ak je označený text
  teraz=dokument.getstring() ' Text na konci kurzora
  dokument.setstring(teraz+datum) ' K textu pridáme dátum
  dokument.collapseToEnd() ' Presun na koniec vloženého dátumu
 endif
end sub

REM Makro pre vloženie aktuálneho času na bunku (Calc) alebo pozíciu (Writer), kde sa nachádzame
sub Vloz_Cas
 dim dokument, bunka as object
 dim teraz, datum, cas as string
 dim i as integer
 teraz=now ' Aktuálny dátum a čas vo formáte "dd.mm.rrrr hh:mm:ss"
 i=instr(teraz," ") ' Pozícia, kde je oddelený dátum a čas
 cas=right(teraz,len(teraz)-i) ' Čas
 if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
  ' Funkcia vloží čas do aktuálnej bunky zošitu v Calcu
  dokument=ThisComponent.getCurrentSelection() ' Aktuálny výber
  bunka=dokument.getCellByPosition(0,0) ' Aktuálna bunka
  bunka.value=timevalue(cas) ' Vloženie času ako hodnoty
 endif
 if ThisComponent.supportsService("com.sun.star.text.TextDocument") then
  ' Funkcia vloží čas na aktuálnu pozíciu vo Writeri
  dokument=ThisComponent.currentcontroller.getViewCursor() ' Aktuálna pozícia kurzora
  dokument.collapseToEnd() ' Presun na koniec a zrušenie označenia, ak je označený text
  teraz=dokument.getstring() ' Text na konci kurzora
  dokument.setstring(teraz+cas) ' K textu pridáme čas
  dokument.collapseToEnd() ' Presun na koniec vloženého dátumu
 endif
end sub

REM Funkcia pre konverziu mesiaca dátumu na jeho názov
function Datum2Text(datum as string, zaklad_tvar as boolean, jazyk as string) as string
 ' Význam parametrov:
 ' datum – dátum ako reťazec dd.mm.rrrr
 ' zaklad_tvar – ak true, názov mesiaca nebude skloňovaný (január), inak bude skloňovaný (januára)
 ' jazyk – označenie jazyka (sk, cs, en, ...)
 dim mesiac(12), mesiaca(12) as string
 dim dd, mm, rr as string
 dim mmc as integer
 
 select case jazyk
  case "sk" ' Slovenčina
   mesiac(1)="január"
   mesiac(2)="február"
   mesiac(3)="marec"
   mesiac(4)="apríl"
   mesiac(5)="máj"
   mesiac(6)="jún"
   mesiac(7)="júl"
   mesiac(8)="august"
   mesiac(9)="september"
   mesiac(10)="okóber"
   mesiac(11)="november"
   mesiac(12)="december"
   
   mesiaca(1)="januára"
   mesiaca(2)="februára"
   mesiaca(3)="marca"
   mesiaca(4)="apríla"
   mesiaca(5)="mája"
   mesiaca(6)="júna"
   mesiaca(7)="júla"
   mesiaca(8)="augusta"
   mesiaca(9)="septembra"
   mesiaca(10)="októbra"
   mesiaca(11)="novembra"
   mesiaca(12)="decembra"
  case "cs" ' Čeština
   mesiac(1)="leden"
   mesiac(2)="únor"
   mesiac(3)="březen"
   mesiac(4)="duben"
   mesiac(5)="květen"
   mesiac(6)="červen"
   mesiac(7)="červenec"
   mesiac(8)="srpen"
   mesiac(9)="září"
   mesiac(10)="říjen"
   mesiac(11)="listopad"
   mesiac(12)="prosinec"
   
   mesiaca(1)="ledna"
   mesiaca(2)="února"
   mesiaca(3)="března"
   mesiaca(4)="dubna"
   mesiaca(5)="května"
   mesiaca(6)="června"
   mesiaca(7)="července"
   mesiaca(8)="srpna"
   mesiaca(9)="září"
   mesiaca(10)="října"
   mesiaca(11)="listopadu"
   mesiaca(12)="prosince"
  case else ' V ostatných prípadoch bude angličtina
   mesiac(1)="january"
   mesiac(2)="february"
   mesiac(3)="march"
   mesiac(4)="april"
   mesiac(5)="may"
   mesiac(6)="june"
   mesiac(7)="july"
   mesiac(8)="august"
   mesiac(9)="september"
   mesiac(10)="october "
   mesiac(11)="november"
   mesiac(12)="december"
   
   mesiaca(1)="January"
   mesiaca(2)="February"
   mesiaca(3)="March"
   mesiaca(4)="April"
   mesiaca(5)="May"
   mesiaca(6)="June"
   mesiaca(7)="July"
   mesiaca(8)="August"
   mesiaca(9)="September"
   mesiaca(10)="October "
   mesiaca(11)="November"
   mesiaca(12)="December"
 end select
 
 ' Dátum je v tvare dd.mm.rrrr a z toho dostaneme dd. mesiac rrrr alebo dd. mesiaca rrrr (v dátume sú za dňom nezalomiteľné medzery)
 dd=left(datum,3)
 if left(dd,1)="0" then
  dd=right(dd,2)
 endif
 mmc=val(mid(datum,4,2))
 rr=right(datum,len(datum)-6)
 if zaklad_tvar then
  mm=mesiac(mmc)
 else
  mm=mesiaca(mmc)
 endif
 Datum2Text=dd+chr$(&HA0)+mm+" "+rr
end function

REM Makro pre vloženie aktuálneho dátumu v tvare dd. mesiac rrrr ako reťazec na bunku (Calc) alebo pozíciu (Writer), kde sa nachádzame
sub Vloz_Datum_text_zaklad
 dim dokument, bunka as object
 dim teraz, datum, cas, jazyk as string
 dim i as integer
 teraz=now ' Aktuálny dátum a čas vo formáte "dd.mm.rrrr hh:mm:ss"
 i=instr(teraz," ") ' Pozícia, kde je oddelený dátum a čas
 datum=left(teraz,i-1) ' Dátum
 if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
  ' Funkcia vloží dátum do aktuálnej bunky zošitu v Calcu
  dokument=ThisComponent.getCurrentSelection() ' Aktuálny výber
  bunka=dokument.getCellByPosition(0,0) ' Aktuálna bunka
  jazyk=bunka.CharLocale.Language ' Jazyk bunky (sk, cs, ...)
  bunka.string=Datum2Text(datum,true,jazyk) ' Vloženie dátumu ako reťazca
 endif
 if ThisComponent.supportsService("com.sun.star.text.TextDocument") then
  ' Funkcia vloží dátum na aktuálnu pozíciu vo Writeri
  dokument=ThisComponent.currentcontroller.getViewCursor() ' Viditeľný kurzor
  dokument.collapseToEnd() ' Skočíme na koniec prípadne označeného textu a zrušíme označenie
  jazyk=dokument.CharLocale.Language ' Jazyk znaku, na ktorom sa nachádzame (sk, cs, ...)
  teraz=dokument.getstring() ' Aktuálny reťazec
  dokument.setstring(teraz+Datum2Text(datum,true,jazyk)) ' Vložíme aktuálny reťazec + dátum
  dokument.collapseToEnd() ' Skočíme na koniec vloženého dátumu
 endif
end sub

REM Makro pre vloženie aktuálneho dátumu v tvare dd. mesiaca rrrr ako reťazec na bunku (Calc) alebo pozíciu (Writer), kde sa nachádzame
sub Vloz_Datum_text_tvar
 dim dokument, bunka as object
 dim teraz, datum, cas, jazyk as string
 dim i as integer
 teraz=now ' Aktuálny dátum a čas vo formáte "dd.mm.rrrr hh:mm:ss"
 i=instr(teraz," ") ' Pozícia, kde je oddelený dátum a čas
 datum=left(teraz,i-1) ' Dátum
 if ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
  ' Funkcia vloží dátum do aktuálnej bunky zošitu v Calcu
  dokument=ThisComponent.getCurrentSelection() ' Aktuálny výber
  bunka=dokument.getCellByPosition(0,0) ' Aktuálna bunka
  jazyk=bunka.CharLocale.Language ' Jazyk bunky (sk, cs, ...)
  bunka.string=Datum2Text(datum,false,jazyk) ' Vloženie dátumu ako reťazca
 endif
 if ThisComponent.supportsService("com.sun.star.text.TextDocument") then
  ' Funkcia vloží dátum na aktuálnu pozíciu vo Writeri
  dokument=ThisComponent.currentcontroller.getViewCursor() ' Viditeľný kurzor
  dokument.collapseToEnd() ' Skočíme na koniec prípadne označeného textu a zrušíme označenie
  jazyk=dokument.CharLocale.Language ' Jazyk znaku, na ktorom sa nachádzame (sk, cs, ...)
  teraz=dokument.getstring() ' Aktuálny reťazec
  dokument.setstring(teraz+Datum2Text(datum,false,jazyk)) ' Vložíme aktuálny reťazec + dátum
  dokument.collapseToEnd() ' Skočíme na koniec vloženého dátumu
 endif
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í.

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
Plánovaná údržba v datacentre (20.09.2026) Oznamy
07. 09. 2026

Plánovaná údržba v datacentre (20.09.2026)

Stabilita a nepretržitá dostupnosť vašich webov je pre nás kľúčová. Aby sme tento štandard nielen udržali, ale neustále zvyšovali, naši p...

Čítať viac
Aktualizujte ihneď svoj Wordpress - Kritická zraniteľnosť (CVE-2026-63030) Oznamy
31. 08. 2026

Aktualizujte ihneď svoj Wordpress - Kritická zraniteľnosť (CVE-2026-63030)

Bezpečnostný tím WordPressu vydal núdzovú bezpečnostnú záplatu pre kritickú chybu označenú ako CVE-2026-63030. Táto zraniteľnosť dosiahla...

Čítať viac
Nespíme na vavrínoch, pozrite si našu úrodu nových webov Novinky
01. 07. 2026

Nespíme na vavrínoch, pozrite si našu úrodu nových webov

Prvých šesť mesiacov roka 2026 preverilo našu kreativitu aj technické nasadenie. Naše servery nezaznamenali len nárast prevádzky, ale aj ...

Čí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

Výborný pomer
cena / výkon

Ponúkame kvalitné a stabilné služby za rozumnú cenu 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