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

Dell - Latitude

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.


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

Soulad s normou nemusí znamenat bezpečnost

ALEFNemusíme se vracet daleko do minulosti, aby bylo možné pozorovat IT oddělní velkých společností, jak se soustředí téměř výhradně na efektivitu poskytovaných služeb pro primární účely organizace. Proč také ne? Informační bezpečnost byla výsadou několika málo oborů a většina organizací si vystačila s firewallem a antivirovým programem.

Pokračování ...


IBM POWER

Redakční blog

Pavel Fric

Pavel Fric, 21. August

Sayonara Player 1.5.1

Přehrávač, jak má být. Poslední dobou vývoj šlape


Pavel Fric

Pavel Fric, 26. January

MuseScore 3

První aktualizace třetí řady notačního editoru MuseScore


Redakce

Redakce, 21. December

Pište pro LinuxEXPRES

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


Všechny blogy »

Dell - Precision