přejít na obsah přejít na navigaci

Linux E X P R E S, Grafické komponenty v Ruby - Dokončení a lokalizace

Autodesk

Grafické komponenty v Ruby - Dokončení a lokalizace

GTK.jpg

Dnes dokončíme naše programování a také se podíváme, jak by se prováděla lokalizace programu do dalších jazyků. Co říct víc? Snad jen: Pusťme se do toho.


reklama

Jak jsem sliboval minule, nejprve dodělejme převod souborů. Aby to nebylo zas tak jednoduché, aby program vypadal lépe, aby toho uživatel více viděl a také abychom si zas trochu procvičili získané znalosti, zobrazme uživateli prováděné akce v novém informačním okně spolu s pruhem znázorňujícím postup aplikace při převodu souborů.

Následující text zapisujte do metody prováděné po kliknutí na tlačítko Převést!. Tzn. do minule připraveného volání:

button.signal_connect("clicked") {
	
  if check_before then 
		# požadované akce po kliknutí na tlačítko
  end
}

Hotový finální soubor si můžete opět stáhnout. 3.rb

Nejprve vytvořme zobrazované okno

status_window = Gtk::Window.new

# pruh znázorňující průběh převodu
progress_bar = Gtk::ProgressBar.new
vbox = Gtk::VBox.new(false,5)
status_button = Gtk::Button.new("Pokračovat")

# tlačítko Pokračovat není před dokončením operací aktivní
status_button.sensitive = false
	
vbox.pack_start_defaults(progress_bar)
vbox.pack_start_defaults(status_button)

status_button.signal_connect("clicked") {
		status_window.destroy
}

status_window.add(vbox)

status_window.set_title "Převádím"
status_window.set_default_size(400,40)
status_window.show_all

# aktualizace okna
window_refresh

V podstatě standardní sada příkazů, která se postará o zobrazení nového okna. Navíc použijeme komponentu Gtk::ProgressBar pro pěkný přehled o aktuálním stavu převodu souborů. Kromě toho se odvolávám na metodu window_refresh, kterou je třeba ještě definovat.

def window_refresh 
	while (Gtk.events_pending?)
    		Gtk.main_iteration
   end
end

Metoda se stará o překreslení zobrazeného okna. Pokud byste toto překreslování v průběhu následující smyčky neprováděli, může se požitá komponenta zachovat poněkud líně a změnu informačního textu jednoduše nezobrazí. Podívejme se nyní na druhou a zároveň poslední část volané metody:

# vytvoření seznamu grafických souborů *.jpg
files = `cd \"#{@sdirectory.text}\";ls *.jpg`

# spočítání převáděných souborů pro potřeby pruhu s pokrokem 
number_of_files = `cd \"#{@sdirectory.text}\";ls *.jpg | wc -l`
i=1

files.each do |file|
   	progress_bar.text = "Převádím soubor: #{file.chomp}"

		# posun pokroku
		progress_bar.fraction=(i/number_of_files.to_f)

		i+=1

		# nucené překreslení okna
		window_refresh

		file = file.chomp

		# jádro programu, volání příkazu convert
		system("cd \"#{@sdirectory.text}\"; convert -scale #{@width.text}x#{@height.text} \"#{@sdirectory.text}/#{file}\" \"#{@ddirectory.text}/#{file}\"")
	
end

# změna informačního textu
progress_bar.text = "Hotovo!"	

# aktivace tlačítka Pokračovat pro zavření okna
status_button.sensitive = true

To je vše, tím byla záhada programu odtajněna. Všimněte si, že na proměnné se můžete odkazovat v textovém řetězci pomocí symbolu #{jméno_proměnné}, což se jistě hodí v případě volání metody system pro provedení příkazu systému a v dalších situacích.

Okno zobrazované při převodu souborůOkno zobrazované při převodu souborů

Na závěr našeho miniseriálu se ještě podívejme na lokalizaci programu. K tomu se používá knihovna GetText. Abychom si to rovnou vyzkoušeli, přidejte na začátek programu řádek:

include GetText

A v místě, kde chcete uživateli vypsat nějaký text (ať už na nějaký widget nebo do terminálu), použijte místo běžného:

sbutton = Gtk::Button.new("Zdrojový adresář")
sbutton = Gtk::Button.new(_("Zdrojový adresář"))

Tím se sice na první pohled nic nestane, ale nyní budete moci použít nástroj rgettext, který za vás vytvoří soubor .pot, s kterým si už každý překladatel bude vědět rady.

Zadáním příkazu rgettext 3.rb -o program.pot dojde k vytvoření souboru program.pot, který mimo standardní hlavičky obsahuje i řádky jako:

#: 3.rb:113
msgid "Zdrojový adresář"
msgstr ""

Tedy původní text (msgid) a místo pro napsání lokalizované verze (msgstr). Samozřejmě pokud budete chtít svoji aplikaci tímto způsobem lokalizovat i do jiných jazyků, pak je nepsaným pravidlem, že se šablona (soubor .pot) dodává v anglické verzi a je na ostatních překladatelích, aby tuto šablonu lokalizovali do svého jazyka.

Lokalizovaný soubor pak je nutno ještě přeložit a nakopírovat na to správné místo v systému. To je možno provést pomocí tohoto příkazu:

rmsgfmt cs.po -o /usr/local/share/locale/cs/LC_MESSAGES/program.mo

Do češtiny přeložený soubor se standardně pojmenovává jako cs.po (cs je přitom označení češtiny) a jméno souboru program.mo v LC_MESSAGES musí odpovídat názvu spustitelného souboru programu v systému. Pokud vás lokalizace programu zaujala, určitě se podívejte na Ruby GetText HOWTO odkazované na konci tohoto článku.

V tom nejlepším přestat. To je přesně to, co nyní provedu. Zbytek je na vás. Pokud vás programování v Ruby zaujalo a programování pro grafické prostředí se vám líbí, pak není co řešit a nezbývá než popřát spoustu dobrých nápadů i programů, které pomocí těchto nástrojů můžete vytvořit. Možností, jak se uplatnit, je mnoho a stále chybí ty dobré aplikace, o kterých si lidé povídají a které v systému prostě musíte mít. Pokud vám tedy něco chybí, zkuste situaci napravit a vytvořte si program sami. Přeji mnoho příjemných zážitků při hledání správného postupu a vylepšování toho jinak mrtvého stroje, jakým počítač bez programů je.

Nahoru

Odkazy

Přidat téma diskuse

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Martin Šín

Martin Šín

Martin Šín (*1980) vystudoval pedagogickou fakultu a nyní pracuje jako učitel matematiky a výpočetní techniky na střední škole. Ve volném čase překládá a také hraje hry (ani jedno mu příliš nejde). V práci se snaží prosazovat open-source programy.


  • Distribuce: Debian

| proč linux



Public Relations

Studium IT pro správce sítí nově i v kombinované formě

Na plzeňské Vyšší odborné škole zdravotnické, managementu a veřejnosprávních studií – vošplzeň.cz – zaznamenáváme dlouhodobý trend poptávky po odbornících v oblasti informačních technologií. Jelikož je v tomto oboru potřeba v souvislosti s neustálým vývojem nových technologií získávat nové znalosti, připravili jsme již od letošního školního roku 2018/2019 3letý vzdělávací program Systémový administrátor IT v kombinované (dálkové) formě.

Pokračování ...


Tiskárna Brno

Redakční blog

Redakce

Redakce, 21. prosinec

Pište pro LinuxEXPRES

Baví vás Linux? Pište o něm, není to nic těžkého. LinuxEXPRES hledá nové autory.


Pavel Fric

Pavel Fric, 23. říjen

Nové motivy pro přehrávač Sayonara

Pomozte rozšířit možnost měnit vzhled programu za běhu


Pavel Fric

Pavel Fric, 28. únor

Lollypop


Všechny blogy »