aboutsummaryrefslogtreecommitdiffstats
path: root/po/id.po
blob: 8ac1898e8f6e031bba82f5c0500b53b175ccb8b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# Indonesian translation for isodumper package.
# Copyright (C) 2013 THE isodumper'S COPYRIGHT HOLDER
# This file is distributed under the same license as the isodumper package.
#
# Translators:
# Automatically generated, 2013
# FIRST AUTHOR <EMAIL@ADDRESS>, 2008
# kiki.syahadat <kiki.syahadat@yahoo.co.id>, 2013
msgid ""
msgstr ""
"Project-Id-Version: isodumper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-12-09 22:47+0100\n"
"PO-Revision-Date: 2013-12-10 11:35+0000\n"
"Last-Translator: kiki.syahadat <kiki.syahadat@yahoo.co.id>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/mageia/language/id/)\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: lib/isodumper.py:110
msgid "Mb"
msgstr "Mb"

#: lib/isodumper.py:153 share/isodumper/isodumper.glade.h:21
msgid "Backup in:"
msgstr "Backup di:"

#: lib/isodumper.py:154
msgid "Image: "
msgstr "Image: "

#: lib/isodumper.py:155
msgid "Target Device: "
msgstr "Perangkat Target: "

#: lib/isodumper.py:158
msgid "The device is too small to contain the ISO file."
msgstr "Perangkat terlalu kecil untuk file ISO."

#: lib/isodumper.py:165
msgid "The device is bigger than 32 Gbytes. Are you sure you want use it?"
msgstr ""
"Perangkat lebih besar dari 32Gbyte. Apakah Anda yakin akan menggunakannya?"

#: lib/isodumper.py:191
msgid "Unmounting all partitions of "
msgstr "Melepas semua partisi dari "

#: lib/isodumper.py:193
msgid "Trying to unmount "
msgstr "Mencoba untuk melepas "

#: lib/isodumper.py:199
msgid " was terminated by signal "
msgstr " dihentikan oleh sinyal "

#: lib/isodumper.py:199 lib/isodumper.py:205
msgid "Error, umount "
msgstr "Error, melepaskan "

#: lib/isodumper.py:203
msgid " successfully unmounted"
msgstr " berhasil dilepaskan"

#: lib/isodumper.py:205
msgid " returned "
msgstr " dikembalikan "

#: lib/isodumper.py:208
msgid "Execution failed: "
msgstr "Eksekusi gagal: "

#: lib/isodumper.py:216
msgid "Could not read mtab !"
msgstr "Tidak bisa membaca mtab!"

#: lib/isodumper.py:224 lib/isodumper.py:247
msgid "Reading error."
msgstr "Error membaca."

#: lib/isodumper.py:230
msgid "You have not the rights for writing on the device"
msgstr "Anda tidak memiliki izin untuk menulisi perangkat"

#: lib/isodumper.py:235 lib/isodumper.py:236
msgid " to "
msgstr " ke "

#: lib/isodumper.py:235
msgid "Writing "
msgstr "Menulisi "

#: lib/isodumper.py:236
msgid "Executing copy from "
msgstr "Mengeksekusi salin dari"

#: lib/isodumper.py:252 lib/isodumper.py:265 lib/isodumper.py:274
msgid "Writing error."
msgstr "Error menulisi."

#: lib/isodumper.py:257
msgid "Wrote: "
msgstr "Ditulis: "

#: lib/isodumper.py:269
msgid " successfully written to"
msgstr " berhasil ditulis ke"

#: lib/isodumper.py:269
msgid "Image "
msgstr "Image "

#: lib/isodumper.py:270
msgid "Bytes written: "
msgstr "Byte tertulis:"

#: share/isodumper/isodumper.glade.h:1
msgid "Select"
msgstr "Pilih"

#: share/isodumper/isodumper.glade.h:2
msgid "IsoDumper"
msgstr "IsoDumper"

#: share/isodumper/isodumper.glade.h:3
msgid ""
"<b>Warning</b>\n"
" This will <b>destroy all data</b> on the target\n"
" device, are you sure you want to proceed ?\n"
"\n"
" If you say ok here, please <b>do not unplug</b>\n"
" the device during the following operation."
msgstr ""
"<b>Peringatan</b>\n"
" Ini akan <b>menghapus semua data</b> pada perangkat\n"
" target, apakah Anda yakin ingin melanjutkan?\n"
"\n"
" Apabila anda setuju, mohon <b>jangan melepas</b>\n"
" perangkat selama operasi berikut."

#: share/isodumper/isodumper.glade.h:9
msgid ""
"<b>Error</b>\n"
" Something went wrong, please see the details\n"
" window for the exact error.\n"
" \n"
" A logfile isodumper.log with the content will be saved in your\n"
" homedir/.isodumper when the application is closed."
msgstr ""
"<b>Error</b>\n"
" Ada yang salah, silakan lihat rincian\n"
" kesalahan.\n"
" \n"
" file log isodumper.log akan disimpan di\n"
" homedir/.isodumper saat aplikasi ditutup."

#: share/isodumper/isodumper.glade.h:15
msgid "Write Image:"
msgstr "Menulis Image:"

#: share/isodumper/isodumper.glade.h:16
msgid "Select an image file to be written to the device"
msgstr "Pilih sebuah image untuk ditulis ke perangkat"

#: share/isodumper/isodumper.glade.h:17
msgid "Select Image"
msgstr "Pilih image"

#: share/isodumper/isodumper.glade.h:18
msgid "to"
msgstr "ke"

#: share/isodumper/isodumper.glade.h:19
msgid "Select target device to write the image to"
msgstr "Pilih perangkat target untuk ditulisi image"

#: share/isodumper/isodumper.glade.h:20
msgid "Create a backup of the device as image to restore it later"
msgstr "Buat backup dari perangkat sebagai image untuk dikembalikan nanti"

#: share/isodumper/isodumper.glade.h:22
msgid "(None)"
msgstr "(Tidak ada)"

#: share/isodumper/isodumper.glade.h:23
msgid "Details"
msgstr "Rincian"

#: share/isodumper/isodumper.glade.h:24
msgid "Write to device"
msgstr "Menulis ke perangkat"

#: share/isodumper/isodumper.glade.h:25
msgid ""
"<b>Warning</b>\n"
" No target devices were found. \n"
"\n"
" You need to plug in a USB Key\n"
" to which the image can be written."
msgstr ""
"<b>Peringatan</b>\n"
" Tidak ada perangkat target yang ditemukan. \n"
"\n"
" Anda harus memasang flashdisk\n"
" untuk penulisan image."

#: share/isodumper/isodumper.glade.h:30
msgid ""
"<b>Success</b>\n"
" The image was successfully written to the\n"
" target device.\n"
" \n"
" You are free to unplug it now, a log isodumper.log \n"
" of the operation will be saved in your homedir/.isodumper/ when\n"
" you close the application."
msgstr ""
"<b>Berhasil</b>\n"
" Image berhasil ditulis ke\n"
" perangkat target.\n"
" \n"
" Sekarang Anda bisa melepaskannya, log isodumper.log \n"
" dari operasi ini akan disimpan di homedir/.isodumper/ saat\n"
" Anda menutup aplikasi."
2'>672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773
package interactive::gtk; # $Id$

use diagnostics;
use strict;
use vars qw(@ISA);

@ISA = qw(interactive);

use interactive;
use common;
use ugtk2 qw(:helpers :wrappers :create);
use Gtk2::Gdk::Keysyms;

my $forgetTime = 1000; #- in milli-seconds

sub new {
    ($::windowwidth, $::windowheight) = gtkroot()->get_size if !$::isInstall;
    goto &interactive::new;
}
sub enter_console { my ($o) = @_; $o->{suspended} = common::setVirtual(1) }
sub leave_console { my ($o) = @_; common::setVirtual(delete $o->{suspended}) }

sub exit { ugtk2::exit(@_) }

sub ask_fileW {
    my ($_o, $title, $dir) = @_;
    my $w = ugtk2->new($title);
    $dir .= '/' if $dir !~ m|/$|;
    ugtk2::_ask_file($w, $title, $dir); 
    $w->main;
}

sub create_boxradio {
    my ($e, $may_go_to_next, $changed, $double_click) = @_;

    my $boxradio = gtkshow(gtkpack2__(Gtk2::VBox->new(0, 0),
                                      my @radios = gtkradio('', @{$e->{formatted_list}})));
    my $tips = Gtk2::Tooltips->new;
    mapn {
	my ($txt, $w) = @_;
	$w->signal_connect(button_press_event => $double_click) if $double_click;

	$w->signal_connect(key_press_event => sub {
	    &$may_go_to_next;
	});
	$w->signal_connect(clicked => sub {
 	    ${$e->{val}} = $txt;
	    &$changed;
        });
	if ($e->{help}) {
	    gtkset_tip($tips, $w,
		       ref($e->{help}) eq 'HASH' ? $e->{help}{$txt} :
		       ref($e->{help}) eq 'CODE' ? $e->{help}($txt) : $e->{help});
	}
    } $e->{list}, \@radios;

    $boxradio, sub {
	my ($v, $full_struct) = @_;
	mapn { 
	    $_[0]->set_active($_[1] eq $v);
	    $full_struct->{focus_w} = $_[0] if $_[1] eq $v;
	} \@radios, $e->{list};
    }, $radios[0];
}

sub create_treeview_list {
    my ($e, $may_go_to_next, $changed, $double_click) = @_;
    my $curr;

    my $list = Gtk2::ListStore->new("Glib::String");
    my $list_tv = Gtk2::TreeView->new_with_model($list);
    $list_tv->set_headers_visible(0);
    $list_tv->get_selection->set_mode('browse');
    my $textcolumn = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0);
    $list_tv->append_column($textcolumn);
    
    my $select = sub {
	$list_tv->set_cursor($_[0], undef, 0);
    	$list_tv->scroll_to_cell($_[0], undef, 1, 0.5, 0);
    };

    my ($starting_word, $start_reg) = ('', '^');
    my $timeout;
    $list_tv->set_enable_search(0);
    $list_tv->signal_connect(key_press_event => sub {
        my ($_w, $event) = @_;
	my $c = chr($event->keyval & 0xff);

	Glib::Source->remove($timeout) if $timeout; $timeout = '';
	
	if ($event->keyval >= 0x100) {
	    &$may_go_to_next if member($event->keyval, ($Gtk2::Gdk::Keysyms{Return}, $Gtk2::Gdk::Keysyms{KP_Enter}));
	    $starting_word = '' if !member($event->keyval, ($Gtk2::Gdk::Keysyms{Control_L}, $Gtk2::Gdk::Keysyms{Control_R}));
	} else {
	    if (member('control-mask', @{$event->state})) {
		$c eq 's' or return 1;
		$start_reg and $start_reg = '', return 1;
		$curr++;
	    } else {
		&$may_go_to_next if $c eq ' ';

		$curr++ if $starting_word eq '' || $starting_word eq $c;
		$starting_word .= $c unless $starting_word eq $c;
	    }
	    my @l = @{$e->{formatted_list}};
	    my $word = quotemeta $starting_word;
	    my $j; for ($j = 0; $j < @l; $j++) {
		 $l[($j + $curr) % @l] =~ /$start_reg$word/i and last;
	    }
	    if ($j == @l) {
		$starting_word = '';
	    } else {
		$select->(Gtk2::TreePath->new_from_string(($j + $curr) % @l));
	    }

	    $timeout = Glib::Timeout->add($forgetTime, sub { $timeout = $starting_word = ''; 0 });
	}
	0;
    });
    $list_tv->show;

    $list->append_set([ 0 => $_ ]) foreach @{$e->{formatted_list}};

    $list_tv->get_selection->signal_connect(changed => sub {
	my ($model, $iter) = $_[0]->get_selected;
	$model && $iter or return;
	my $row = $model->get_path_str($iter);
	${$e->{val}} = $e->{list}[$curr = $row];
	&$changed;
    });
    $list_tv->signal_connect(button_press_event => $double_click) if $double_click;

    $list_tv, sub {
	my ($v) = @_;
	eval {
	    my $nb = find_index { $_ eq $v } @{$e->{list}};
	    my ($old_path) = $list_tv->get_cursor;
	    if (!$old_path || $nb != $old_path->to_string) {
		$select->(Gtk2::TreePath->new_from_string($nb));
	    }
	    undef $old_path if $old_path;
	};
    };
}

sub create_treeview_tree {
    my ($e, $may_go_to_next, $changed, $double_click, $tree_expanded) = @_;

    $tree_expanded = to_bool($tree_expanded); #- to reduce "Use of uninitialized value", especially when debugging

    my $sep = quotemeta $e->{separator};
    my $tree_model = Gtk2::TreeStore->new("Glib::String", "Gtk2::Gdk::Pixbuf", "Glib::String");
    my $tree = Gtk2::TreeView->new_with_model($tree_model);
    $tree->get_selection->set_mode('browse');
    $tree->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0));
    $tree->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererPixbuf->new, 'pixbuf' => 1));
    $tree->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 2));
    $tree->set_headers_visible(0);

    my ($build_value, $clean_image);
    if (exists $e->{image2f}) {
	my $to_unref;
	$build_value = sub {
	    my ($text, $image) = $e->{image2f}->($_[0]);
	    [ $text  ? (0 => $text) : @{[]},
	      $image ? (1 => $to_unref = gtkcreate_pixbuf($image)) : @{[]} ];
	};
	$clean_image = sub { undef $to_unref };
    } else {
	$build_value = sub { [ 0 => $_[0] ] };
	$clean_image = sub {};
    }

    my (%wtree, %wleaves, $size, $selected_via_click);
    my $parent; $parent = sub {
	if (my $w = $wtree{"$_[0]$e->{separator}"}) { return $w }
	my $s = '';
	foreach (split $sep, $_[0]) {
	    $wtree{"$s$_$e->{separator}"} ||= 
	      $tree_model->append_set($s ? $parent->($s) : undef, $build_value->($_));
	    $clean_image->();
	    $size++ if !$s;
	    $s .= "$_$e->{separator}";
	}
	$wtree{$s};
    };

    #- do some precomputing to not slowdown selection change and key press
    my (%precomp, @ordered_keys);
    mapn {
	my ($root, $leaf) = $_[0] =~ /(.*)$sep(.+)/ ? ($1, $2) : ('', $_[0]);
	my $iter = $tree_model->append_set($parent->($root), $build_value->($leaf));
	$clean_image->();
	my $pathstr = $tree_model->get_path_str($iter);
	$precomp{$pathstr} = { value => $leaf, fullvalue => $_[0], listvalue => $_[1] };
	push @ordered_keys, $pathstr;
	$wleaves{$_[0]} = $pathstr;
    } $e->{formatted_list}, $e->{list};
    undef $_ foreach values %wtree;
    undef %wtree;

    my $select = sub {
	my ($path_str) = @_;
	$tree->expand_to_path(Gtk2::TreePath->new_from_string($path_str));
	my $path = Gtk2::TreePath->new_from_string($path_str);
	$tree->set_cursor($path, undef, 0);
        gtkflush();  #- workaround gtk2 bug not honouring centering on the given row if node was closed
	$tree->scroll_to_cell($path, undef, 1, 0.5, 0);
    };

    my $curr = $tree_model->get_iter_first; #- default value
    $tree->expand_all if $tree_expanded;

    $tree->get_selection->signal_connect(changed => sub {
	my ($model, $iter) = $_[0]->get_selected;
	$model && $iter or return;
	undef $curr if ref $curr;
	my $path = $tree_model->get_path($curr = $iter);
	if (!$tree_model->iter_has_child($iter)) {
	    ${$e->{val}} = $precomp{$path->to_string}{listvalue};
	    &$changed;
	} else {
	    $tree->expand_row($path, 0) if $selected_via_click;
	}
    });
    my ($starting_word, $start_reg) = ('', "^");
    my $timeout;

    my $toggle = sub {
	if ($tree_model->iter_has_child($curr)) {
	    $tree->toggle_expansion($tree_model->get_path($curr), 0);

	} else {
	    &$may_go_to_next;
	}
    };

    $tree->set_enable_search(0);
    $tree->signal_connect(key_press_event => sub {
        my ($_w, $event) = @_;
	$selected_via_click = 0;
	my $c = chr($event->keyval & 0xff);
	$curr or return 0;
	Glib::Source->remove($timeout) if $timeout; $timeout = '';

	if ($event->keyval >= 0x100) {
	    &$toggle if member($event->keyval, ($Gtk2::Gdk::Keysyms{Return}, $Gtk2::Gdk::Keysyms{KP_Enter}));
	    $starting_word = '' if !member($event->keyval, ($Gtk2::Gdk::Keysyms{Control_L}, $Gtk2::Gdk::Keysyms{Control_R}));
	} else {
	    my $next;
	    if (member('control-mask', @{$event->state})) {
		$c eq "s" or return 1;
		$start_reg and $start_reg = '', return 0;
		$next = 1;
	    } else {
		&$toggle if $c eq ' ';
		$next = 1 if $starting_word eq '' || $starting_word eq $c;
		$starting_word .= $c unless $starting_word eq $c;
	    }
	    my $word = quotemeta $starting_word;
	    my ($after, $best);

	    my $currpath = $tree_model->get_path_str($curr);
	    foreach my $v (@ordered_keys) { 
		$next &&= !$after;
		$after ||= $v eq $currpath;
		if ($precomp{$v}{value} =~ /$start_reg$word/i) {
		    if ($after && !$next) {
			($best, $after) = ($v, 0);
		    } else {
			$best ||= $v;
		    }
		}
	    }

	    if (defined $best) {
		$select->($best);
	    } else {
		$starting_word = '';
	    }

	    $timeout = Glib::Timeout->add($forgetTime, sub { $timeout = $starting_word = ''; 0 });
	}
	0;
    });
    $tree->signal_connect(button_press_event => sub {
	$selected_via_click = 1;
	&$double_click if $curr && !$tree_model->iter_has_child($curr) && $double_click;
    });

    $tree, sub {
	my $v = may_apply($e->{format}, $_[0]);
	my ($model, $iter) = $tree->get_selection->get_selected;
	$select->($wleaves{$v} || return) if !$model || $wleaves{$v} ne $model->get_path_str($iter);
	undef $iter if ref $iter;
    };
}

sub create_list {
    my ($e, $may_go_to_next, $changed, $double_click) = @_;
    my $l = $e->{list};
    my $list = Gtk2::List->new;
    $list->set_selection_mode('browse');

    my $select = sub {
	$list->select_item($_[0]);
    };

    my $tips = Gtk2::Tooltips->new;
    each_index {
	my $item = Gtk2::ListItem->new(may_apply($e->{format}, $_));
	$item->signal_connect(key_press_event => sub {
    	    my ($_w, $event) = @_;
    	    my $c = chr($event->keyval & 0xff);
	    &$may_go_to_next if $event->keyval < 0x100 ? $c eq ' ' : $c eq "\r" || $c eq "\x8d";
    	    0;
    	});