=8 ) { $v = (int)$v; return pack ( "NN", $v>>32, $v&0xFFFFFFFF ); } // x32, int if ( is_int($v) ) return pack ( "NN", $v < 0 ? -1 : 0, $v ); // x32, bcmath if ( function_exists("bcmul") ) { if ( bccomp ( $v, 0 ) == -1 ) $v = bcadd ( "18446744073709551616", $v ); $h = bcdiv ( $v, "4294967296", 0 ); $l = bcmod ( $v, "4294967296" ); return pack ( "NN", (float)$h, (float)$l ); // conversion to float is intentional; int would lose 31st bit } // x32, no-bcmath $p = max(0, strlen($v) - 13); $lo = abs((float)substr($v, $p)); $hi = abs((float)substr($v, 0, $p)); $m = $lo + $hi*1316134912.0; // (10 ^ 13) % (1 << 32) = 1316134912 $q = floor($m/4294967296.0); $l = $m - ($q*4294967296.0); $h = $hi*2328.0 + $q; // (10 ^ 13) / (1 << 32) = 2328 if ( $v<0 ) { if ( $l==0 ) $h = 4294967296.0 - $h; else { $h = 4294967295.0 - $h; $l = 4294967296.0 - $l; } } return pack ( "NN", $h, $l ); } /// pack 64-bit unsigned function sphPackU64 ( $v ) { assert ( is_numeric($v) ); // x64 if ( PHP_INT_SIZE>=8 ) { assert ( $v>=0 ); // x64, int if ( is_int($v) ) return pack ( "NN", $v>>32, $v&0xFFFFFFFF ); // x64, bcmath if ( function_exists("bcmul") ) { $h = bcdiv ( $v, 4294967296, 0 ); $l = bcmod ( $v, 4294967296 ); return pack ( "NN", $h, $l ); } // x64, no-bcmath $p = max ( 0, strlen($v) - 13 ); $lo = (int)substr ( $v, $p ); $hi = (int)substr ( $v, 0, $p ); $m = $lo + $hi*1316134912; $l = $m % 4294967296; $h = $hi*2328 + (int)($m/4294967296); return pack ( "NN", $h, $l ); } // x32, int if ( is_int($v) ) return pack ( "NN", 0, $v ); // x32, bcmath if ( function_exists("bcmul") ) { $h = bcdiv ( $v, "4294967296", 0 ); $l = bcmod ( $v, "4294967296" ); return pack ( "NN", (float)$h, (float)$l ); // conversion to float is intentional; int would lose 31st bit } // x32, no-bcmath $p = max(0, strlen($v) - 13); $lo = (float)substr($v, $p); $hi = (float)substr($v, 0, $p); $m = $lo + $hi*1316134912.0; $q = floor($m / 4294967296.0); $l = $m - ($q * 4294967296.0); $h = $hi*2328.0 + $q; return pack ( "NN", $h, $l ); } // unpack 64-bit unsigned function sphUnpackU64 ( $v ) { list ( $hi, $lo ) = array_values ( unpack ( "N*N*", $v ) ); if ( PHP_INT_SIZE>=8 ) { if ( $hi<0 ) $hi += (1<<32); // because php 5.2.2 to 5.2.5 is totally fucked up again if ( $lo<0 ) $lo += (1<<32); // x64, int if ( $hi<=2147483647 ) return ($hi<<32) + $lo; // x64, bcmath if ( function_exists("bcmul") ) return bcadd ( $lo, bcmul ( $hi, "4294967296" ) ); // x64, no-bcmath $C = 100000; $h = ((int)($hi / $C) << 32) + (int)($lo / $C); $l = (($hi % $C) << 32) + ($lo % $C); if ( $l>$C ) { $h += (int)($l / $C); $l = $l % $C; } if ( $h==0 ) return $l; return sprintf ( "%d%05d", $h, $l ); } // x32, int if ( $hi==0 ) { if ( $lo>0 ) return $lo; return sprintf ( "%u", $lo ); } $hi = sprintf ( "%u", $hi ); $lo = sprintf ( "%u", $lo ); // x32, bcmath if ( function_exists("bcmul") ) return bcadd ( $lo, bcmul ( $hi, "4294967296" ) ); // x32, no-bcmath $hi = (float)$hi; $lo = (float)$lo; $q = floor($hi/10000000.0); $r = $hi - $q*10000000.0; $m = $lo + $r*4967296.0; $mq = floor($m/10000000.0); $l = $m - $mq*10000000.0; $h = $q*4294967296.0 + $r*429.0 + $mq; $h = sprintf ( "%.0f", $h ); $l = sprintf ( "%07.0f", $l ); if ( $h=="0" ) return sprintf( "%.0f", (float)$l ); return $h . $l; } // unpack 64-bit signed function sphUnpackI64 ( $v ) { list ( $hi, $lo ) = array_values ( unpack ( "N*N*", $v ) ); // x64 if ( PHP_INT_SIZE>=8 ) { if ( $hi<0 ) $hi += (1<<32); // because php 5.2.2 to 5.2.5 is totally fucked up again if ( $lo<0 ) $lo += (1<<32); return ($hi<<32) + $lo; } // x32, int if ( $hi==0 ) { if ( $lo>0 ) return $lo; return sprintf ( "%u", $lo ); } // x32, int elseif ( $hi==-1 ) { if ( $lo<0 ) return $lo; return sprintf ( "%.0f", $lo - 4294967296.0 ); } $neg = ""; $c = 0; if ( $hi<0 ) { $hi = ~$hi; $lo = ~$lo; $c = 1; $neg = "-"; } $hi = sprintf ( "%u", $hi ); $lo = sprintf ( "%u", $lo ); // x32, bcmath if ( function_exists("bcmul") ) return $neg . bcadd ( bcadd ( $lo, bcmul ( $hi, "4294967296" ) ), $c ); // x32, no-bcmath $hi = (float)$hi; $lo = (float)$lo; $q = floor($hi/10000000.0); $r = $hi - $q*10000000.0; $m = $lo + $r*4967296.0; $mq = floor($m/10000000.0); $l = $m - $mq*10000000.0 + $c; $h = $q*4294967296.0 + $r*429.0 + $mq; if ( $l==10000000 ) { $l = 0; $h += 1; } $h = sprintf ( "%.0f", $h ); $l = sprintf ( "%07.0f", $l ); if ( $h=="0" ) return $neg . sprintf( "%.0f", (float)$l ); return $neg . $h . $l; } function sphFixUint ( $value ) { if ( PHP_INT_SIZE>=8 ) { // x64 route, workaround broken unpack() in 5.2.2+ if ( $value<0 ) $value += (1<<32); return $value; } else { // x32 route, workaround php signed/unsigned braindamage return sprintf ( "%u", $value ); } } /// sphinx searchd client class class SphinxClient { var $_host; ///< searchd host (default is "localhost") var $_port; ///< searchd port (default is 9312) var $_offset; ///< how many records to seek from result-set start (default is 0) var $_limit; ///< how many records to return from result-set starting at offset (default is 20) var $_mode; ///< query matching mode (default is SPH_MATCH_ALL) var $_weights; ///< per-field weights (default is 1 for all fields) var $_sort; ///< match sorting mode (default is SPH_SORT_RELEVANCE) var $_sortby; ///< attribute to sort by (defualt is "") var $_min_id; ///< min ID to match (default is 0, which means no limit) var $_max_id; ///< max ID to match (default is 0, which means no limit) var $_filters; ///< search filters var $_groupby; ///< group-by attribute name var $_groupfunc; ///< group-by function (to pre-process group-by attribute value with) var $_groupsort; ///< group-by sorting clause (to sort groups in result set with) var $_groupdistinct;///< group-by count-distinct attribute var $_maxmatches; ///< max matches to retrieve var $_cutoff; ///< cutoff to stop searching at (default is 0) var $_retrycount; ///< distributed retries count var $_retrydelay; ///< distributed retries delay var $_anchor; ///< geographical anchor point var $_indexweights; ///< per-index weights var $_ranker; ///< ranking mode (default is SPH_RANK_PROXIMITY_BM25) var $_rankexpr; ///< ranking mode expression (for SPH_RANK_EXPR) var $_maxquerytime; ///< max query time, milliseconds (default is 0, do not limit) var $_fieldweights; ///< per-field-name weights var $_overrides; ///< per-query attribute values overrides var $_select; ///< select-list (attributes or expressions, with optional aliases) var $_error; ///< last error message var $_warning; ///< last warning message var $_connerror; ///< connection error vs remote error flag var $_reqs; ///< requests array for multi-query var $_mbenc; ///< stored mbstring encoding var $_arrayresult; ///< whether $result["matches"] should be a hash or an array var $_timeout; ///< connect timeout ///////////////////////////////////////////////////////////////////////////// // common stuff ///////////////////////////////////////////////////////////////////////////// /// create a new client object and fill defaults function SphinxClient () { // per-client-object settings $this->_host = "localhost"; $this->_port = 9312; $this->_path = false; $this->_socket = false; // per-query settings $this->_offset = 0; $this->_limit = 20; $this->_mode = SPH_MATCH_ALL; $this->_weights = array (); $this->_sort = SPH_SORT_RELEVANCE; $this->_sortby = ""; $this->_min_id = 0; $this->_max_id = 0; $this->_filters = array (); $this->_groupby = ""; $this->_groupfunc = SPH_GROUPBY_DAY; $this->_groupsort = "@group desc"; $this->_groupdistinct= ""; $this->_maxmatches = 1000; $this->_cutoff = 0; $this->_retrycount = 0; $this->_retrydelay = 0; $this->_anchor = array (); $this->_indexweights= array (); $this->_ranker = SPH_RANK_PROXIMITY_BM25; $this->_rankexpr = ""; $this->_maxquerytime= 0; $this->_fieldweights= array(); $this->_overrides = array(); $this->_select = "*"; $this->_error = ""; // per-reply fields (for single-query case) $this->_warning = ""; $this->_connerror = false; $this->_reqs = array (); // requests storage (for multi-query case) $this->_mbenc = ""; $this->_arrayresult = false; $this->_timeout = 0; } function __destruct() { if ( $this->_socket !== false ) fclose ( $this->_socket ); } /// get last error message (string) function GetLastError () { return $this->_error; } /// get last warning message (string) function GetLastWarning () { return $this->_warning; } /// get last error flag (to tell network connection errors from searchd errors or broken responses) function IsConnectError() { return $this->_connerror; } /// set searchd host name (string) and port (integer) function SetServer ( $host, $port = 0 ) { assert ( is_string($host) ); if ( $host[0] == '/') { $this->_path = 'unix://' . $host; return; } if ( substr ( $host, 0, 7 )=="unix://" ) { $this->_path = $host; return; } assert ( is_int($port) ); $this->_host = $host; $this->_port = $port; $this->_path = ''; } /// set server connection timeout (0 to remove) function SetConnectTimeout ( $timeout ) { assert ( is_numeric($timeout) ); $this->_timeout = $timeout; } function _Send ( $handle, $data, $length ) { if ( feof($handle) || fwrite ( $handle, $data, $length ) !== $length ) { $this->_error = 'connection unexpectedly closed (timed out?)'; $this->_connerror = true; return false; } return true; } ///////////////////////////////////////////////////////////////////////////// /// enter mbstring workaround mode function _MBPush () { $this->_mbenc = ""; if ( ini_get ( "mbstring.func_overload" ) & 2 ) { $this->_mbenc = mb_internal_encoding(); mb_internal_encoding ( "latin1" ); } } /// leave mbstring workaround mode function _MBPop () { if ( $this->_mbenc ) mb_internal_encoding ( $this->_mbenc ); } /// connect to searchd server function _Connect () { if ( $this->_socket!==false ) { // we are in persistent connection mode, so we have a socket // however, need to check whether it's still alive if ( !@feof ( $this->_socket ) ) return $this->_socket; // force reopen $this->_socket = false; } $errno = 0; $errstr = ""; $this->_connerror = false; if ( $this->_path ) { $host = $this->_path; $port = 0; } else { $host = $this->_host; $port = $this->_port; } if ( $this->_timeout<=0 ) $fp = @fsockopen ( $host, $port, $errno, $errstr ); else $fp = @fsockopen ( $host, $port, $errno, $errstr, $this->_timeout ); if ( !$fp ) { if ( $this->_path ) $location = $this->_path; else $location = "{$this->_host}:{$this->_port}"; $errstr = trim ( $errstr ); $this->_error = "connection to $location failed (errno=$errno, msg=$errstr)"; $this->_connerror = true; return false; } // send my version // this is a subtle part. we must do it before (!) reading back from searchd. // because otherwise under some conditions (reported on FreeBSD for instance) // TCP stack could throttle write-write-read pattern because of Nagle. if ( !$this->_Send ( $fp, pack ( "N", 1 ), 4 ) ) { fclose ( $fp ); $this->_error = "failed to send client protocol version"; return false; } // check version list(,$v) = unpack ( "N*", fread ( $fp, 4 ) ); $v = (int)$v; if ( $v<1 ) { fclose ( $fp ); $this->_error = "expected searchd protocol version 1+, got version '$v'"; return false; } return $fp; } /// get and check response packet from searchd server function _GetResponse ( $fp, $client_ver ) { $response = ""; $len = 0; $header = fread ( $fp, 8 ); if ( strlen($header)==8 ) { list ( $status, $ver, $len ) = array_values ( unpack ( "n2a/Nb", $header ) ); $left = $len; while ( $left>0 && !feof($fp) ) { $chunk = fread ( $fp, min ( 8192, $left ) ); if ( $chunk ) { $response .= $chunk; $left -= strlen($chunk); } } } if ( $this->_socket === false ) fclose ( $fp ); // check response $read = strlen ( $response ); if ( !$response || $read!=$len ) { $this->_error = $len ? "failed to read searchd response (status=$status, ver=$ver, len=$len, read=$read)" : "received zero-sized searchd response"; return false; } // check status if ( $status==SEARCHD_WARNING ) { list(,$wlen) = unpack ( "N*", substr ( $response, 0, 4 ) ); $this->_warning = substr ( $response, 4, $wlen ); return substr ( $response, 4+$wlen ); } if ( $status==SEARCHD_ERROR ) { $this->_error = "searchd error: " . substr ( $response, 4 ); return false; } if ( $status==SEARCHD_RETRY ) { $this->_error = "temporary searchd error: " . substr ( $response, 4 ); return false; } if ( $status!=SEARCHD_OK ) { $this->_error = "unknown status code '$status'"; return false; } // check version if ( $ver<$client_ver ) { $this->_warning = sprintf ( "searchd command v.%d.%d older than client's v.%d.%d, some options might not work", $ver>>8, $ver&0xff, $client_ver>>8, $client_ver&0xff ); } return $response; } ///////////////////////////////////////////////////////////////////////////// // searching ///////////////////////////////////////////////////////////////////////////// /// set offset and count into result set, /// and optionally set max-matches and cutoff limits function SetLimits ( $offset, $limit, $max=0, $cutoff=0 ) { assert ( is_int($offset) ); assert ( is_int($limit) ); assert ( $offset>=0 ); assert ( $limit>0 ); assert ( $max>=0 ); $this->_offset = $offset; $this->_limit = $limit; if ( $max>0 ) $this->_maxmatches = $max; if ( $cutoff>0 ) $this->_cutoff = $cutoff; } /// set maximum query time, in milliseconds, per-index /// integer, 0 means "do not limit" function SetMaxQueryTime ( $max ) { assert ( is_int($max) ); assert ( $max>=0 ); $this->_maxquerytime = $max; } /// set matching mode function SetMatchMode ( $mode ) { assert ( $mode==SPH_MATCH_ALL || $mode==SPH_MATCH_ANY || $mode==SPH_MATCH_PHRASE || $mode==SPH_MATCH_BOOLEAN || $mode==SPH_MATCH_EXTENDED || $mode==SPH_MATCH_FULLSCAN || $mode==SPH_MATCH_EXTENDED2 ); $this->_mode = $mode; } /// set ranking mode function SetRankingMode ( $ranker, $rankexpr="" ) { assert ( $ranker>=0 && $ranker_ranker = $ranker; $this->_rankexpr = $rankexpr; } /// set matches sorting mode function SetSortMode ( $mode, $sortby="" ) { assert ( $mode==SPH_SORT_RELEVANCE || $mode==SPH_SORT_ATTR_DESC || $mode==SPH_SORT_ATTR_ASC || $mode==SPH_SORT_TIME_SEGMENTS || $mode==SPH_SORT_EXTENDED || $mode==SPH_SORT_EXPR ); assert ( is_string($sortby) ); assert ( $mode==SPH_SORT_RELEVANCE || strlen($sortby)>0 ); $this->_sort = $mode; $this->_sortby = $sortby; } /// bind per-field weights by order /// DEPRECATED; use SetFieldWeights() instead function SetWeights ( $weights ) { assert ( is_array($weights) ); foreach ( $weights as $weight ) assert ( is_int($weight) ); $this->_weights = $weights; } /// bind per-field weights by name function SetFieldWeights ( $weights ) { assert ( is_array($weights) ); foreach ( $weights as $name=>$weight ) { assert ( is_string($name) ); assert ( is_int($weight) ); } $this->_fieldweights = $weights; } /// bind per-index weights by name function SetIndexWeights ( $weights ) { assert ( is_array($weights) ); foreach ( $weights as $index=>$weight ) { assert ( is_string($index) ); assert ( is_int($weight) ); } $this->_indexweights = $weights; } /// set IDs range to match /// only match records if document ID is beetwen $min and $max (inclusive) function SetIDRange ( $min, $max ) { assert ( is_numeric($min) ); assert ( is_numeric($max) ); assert ( $min<=$max ); $this->_min_id = $min; $this->_max_id = $max; } /// set values set filter /// only match records where $attribute value is in given set function SetFilter ( $attribute, $values, $exclude=false ) { assert ( is_string($attribute) ); assert ( is_array($values) ); assert ( count($values) ); if ( is_array($values) && count($values) ) { foreach ( $values as $value ) assert ( is_numeric($value) ); $this->_filters[] = array ( "type"=>SPH_FILTER_VALUES, "attr"=>$attribute, "exclude"=>$exclude, "values"=>$values ); } } /// set range filter /// only match records if $attribute value is beetwen $min and $max (inclusive) function SetFilterRange ( $attribute, $min, $max, $exclude=false ) { assert ( is_string($attribute) ); assert ( is_numeric($min) ); assert ( is_numeric($max) ); assert ( $min<=$max ); $this->_filters[] = array ( "type"=>SPH_FILTER_RANGE, "attr"=>$attribute, "exclude"=>$exclude, "min"=>$min, "max"=>$max ); } /// set float range filter /// only match records if $attribute value is beetwen $min and $max (inclusive) function SetFilterFloatRange ( $attribute, $min, $max, $exclude=false ) { assert ( is_string($attribute) ); assert ( is_float($min) ); assert ( is_float($max) ); assert ( $min<=$max ); $this->_filters[] = array ( "type"=>SPH_FILTER_FLOATRANGE, "attr"=>$attribute, "exclude"=>$exclude, "min"=>$min, "max"=>$max ); } /// setup anchor point for geosphere distance calculations /// required to use @geodist in filters and sorting /// latitude and longitude must be in radians function SetGeoAnchor ( $attrlat, $attrlong, $lat, $long ) { assert ( is_string($attrlat) ); assert ( is_string($attrlong) ); assert ( is_float($lat) ); assert ( is_float($long) ); $this->_anchor = array ( "attrlat"=>$attrlat, "attrlong"=>$attrlong, "lat"=>$lat, "long"=>$long ); } /// set grouping attribute and function function SetGroupBy ( $attribute, $func, $groupsort="@group desc" ) { assert ( is_string($attribute) ); assert ( is_string($groupsort) ); assert ( $func==SPH_GROUPBY_DAY || $func==SPH_GROUPBY_WEEK || $func==SPH_GROUPBY_MONTH || $func==SPH_GROUPBY_YEAR || $func==SPH_GROUPBY_ATTR || $func==SPH_GROUPBY_ATTRPAIR ); $this->_groupby = $attribute; $this->_groupfunc = $func; $this->_groupsort = $groupsort; } /// set count-distinct attribute for group-by queries function SetGroupDistinct ( $attribute ) { assert ( is_string($attribute) ); $this->_groupdistinct = $attribute; } /// set distributed retries count and delay function SetRetries ( $count, $delay=0 ) { assert ( is_int($count) && $count>=0 ); assert ( is_int($delay) && $delay>=0 ); $this->_retrycount = $count; $this->_retrydelay = $delay; } /// set result set format (hash or array; hash by default) /// PHP specific; needed for group-by-MVA result sets that may contain duplicate IDs function SetArrayResult ( $arrayresult ) { assert ( is_bool($arrayresult) ); $this->_arrayresult = $arrayresult; } /// set attribute values override /// there can be only one override per attribute /// $values must be a hash that maps document IDs to attribute values function SetOverride ( $attrname, $attrtype, $values ) { assert ( is_string ( $attrname ) ); assert ( in_array ( $attrtype, array ( SPH_ATTR_INTEGER, SPH_ATTR_TIMESTAMP, SPH_ATTR_BOOL, SPH_ATTR_FLOAT, SPH_ATTR_BIGINT ) ) ); assert ( is_array ( $values ) ); $this->_overrides[$attrname] = array ( "attr"=>$attrname, "type"=>$attrtype, "values"=>$values ); } /// set select-list (attributes or expressions), SQL-like syntax function SetSelect ( $select ) { assert ( is_string ( $select ) ); $this->_select = $select; } ////////////////////////////////////////////////////////////////////////////// /// clear all filters (for multi-queries) function ResetFilters () { $this->_filters = array(); $this->_anchor = array(); } /// clear groupby settings (for multi-queries) function ResetGroupBy () { $this->_groupby = ""; $this->_groupfunc = SPH_GROUPBY_DAY; $this->_groupsort = "@group desc"; $this->_groupdistinct= ""; } /// clear all attribute value overrides (for multi-queries) function ResetOverrides () { $this->_overrides = array (); } ////////////////////////////////////////////////////////////////////////////// /// connect to searchd server, run given search query through given indexes, /// and return the search results function Query ( $query, $index="*", $comment="" ) { assert ( empty($this->_reqs) ); $this->AddQuery ( $query, $index, $comment ); $results = $this->RunQueries (); $this->_reqs = array (); // just in case it failed too early if ( !is_array($results) ) return false; // probably network error; error message should be already filled $this->_error = $results[0]["error"]; $this->_warning = $results[0]["warning"]; if ( $results[0]["status"]==SEARCHD_ERROR ) return false; else return $results[0]; } /// helper to pack floats in network byte order function _PackFloat ( $f ) { $t1 = pack ( "f", $f ); // machine order list(,$t2) = unpack ( "L*", $t1 ); // int in machine order return pack ( "N", $t2 ); } /// add query to multi-query batch /// returns index into results array from RunQueries() call function AddQuery ( $query, $index="*", $comment="" ) { // mbstring workaround $this->_MBPush (); // build request $req = pack ( "NNNN", $this->_offset, $this->_limit, $this->_mode, $this->_ranker ); if ( $this->_ranker==SPH_RANK_EXPR ) $req .= pack ( "N", strlen($this->_rankexpr) ) . $this->_rankexpr; $req .= pack ( "N", $this->_sort ); // (deprecated) sort mode $req .= pack ( "N", strlen($this->_sortby) ) . $this->_sortby; $req .= pack ( "N", strlen($query) ) . $query; // query itself $req .= pack ( "N", count($this->_weights) ); // weights foreach ( $this->_weights as $weight ) $req .= pack ( "N", (int)$weight ); $req .= pack ( "N", strlen($index) ) . $index; // indexes $req .= pack ( "N", 1 ); // id64 range marker $req .= sphPackU64 ( $this->_min_id ) . sphPackU64 ( $this->_max_id ); // id64 range // filters $req .= pack ( "N", count($this->_filters) ); foreach ( $this->_filters as $filter ) { $req .= pack ( "N", strlen($filter["attr"]) ) . $filter["attr"]; $req .= pack ( "N", $filter["type"] ); switch ( $filter["type"] ) { case SPH_FILTER_VALUES: $req .= pack ( "N", count($filter["values"]) ); foreach ( $filter["values"] as $value ) $req .= sphPackI64 ( $value ); break; case SPH_FILTER_RANGE: $req .= sphPackI64 ( $filter["min"] ) . sphPackI64 ( $filter["max"] ); break; case SPH_FILTER_FLOATRANGE: $req .= $this->_PackFloat ( $filter["min"] ) . $this->_PackFloat ( $filter["max"] ); break; default: assert ( 0 && "internal error: unhandled filter type" ); } $req .= pack ( "N", $filter["exclude"] ); } // group-by clause, max-matches count, group-sort clause, cutoff count $req .= pack ( "NN", $this->_groupfunc, strlen($this->_groupby) ) . $this->_groupby; $req .= pack ( "N", $this->_maxmatches ); $req .= pack ( "N", strlen($this->_groupsort) ) . $this->_groupsort; $req .= pack ( "NNN", $this->_cutoff, $this->_retrycount, $this->_retrydelay ); $req .= pack ( "N", strlen($this->_groupdistinct) ) . $this->_groupdistinct; // anchor point if ( empty($this->_anchor) ) { $req .= pack ( "N", 0 ); } else { $a =& $this->_anchor; $req .= pack ( "N", 1 ); $req .= pack ( "N", strlen($a["attrlat"]) ) . $a["attrlat"]; $req .= pack ( "N", strlen($a["attrlong"]) ) . $a["attrlong"]; $req .= $this->_PackFloat ( $a["lat"] ) . $this->_PackFloat ( $a["long"] ); } // per-index weights $req .= pack ( "N", count($this->_indexweights) ); foreach ( $this->_indexweights as $idx=>$weight ) $req .= pack ( "N", strlen($idx) ) . $idx . pack ( "N", $weight ); // max query time $req .= pack ( "N", $this->_maxquerytime ); // per-field weights $req .= pack ( "N", count($this->_fieldweights) ); foreach ( $this->_fieldweights as $field=>$weight ) $req .= pack ( "N", strlen($field) ) . $field . pack ( "N", $weight ); // comment $req .= pack ( "N", strlen($comment) ) . $comment; // attribute overrides $req .= pack ( "N", count($this->_overrides) ); foreach ( $this->_overrides as $key => $entry ) { $req .= pack ( "N", strlen($entry["attr"]) ) . $entry["attr"]; $req .= pack ( "NN", $entry["type"], count($entry["values"]) ); foreach ( $entry["values"] as $id=>$val ) { assert ( is_numeric($id) ); assert ( is_numeric($val) ); $req .= sphPackU64 ( $id ); switch ( $entry["type"] ) { case SPH_ATTR_FLOAT: $req .= $this->_PackFloat ( $val ); break; case SPH_ATTR_BIGINT: $req .= sphPackI64 ( $val ); break; default: $req .= pack ( "N", $val ); break; } } } // select-list $req .= pack ( "N", strlen($this->_select) ) . $this->_select; // mbstring workaround $this->_MBPop (); // store request to requests array $this->_reqs[] = $req; return count($this->_reqs)-1; } /// connect to searchd, run queries batch, and return an array of result sets function RunQueries () { if ( empty($this->_reqs) ) { $this->_error = "no queries defined, issue AddQuery() first"; return false; } // mbstring workaround $this->_MBPush (); if (!( $fp = $this->_Connect() )) { $this->_MBPop (); return false; } // send query, get response $nreqs = count($this->_reqs); $req = join ( "", $this->_reqs ); $len = 8+strlen($req); $req = pack ( "nnNNN", SEARCHD_COMMAND_SEARCH, VER_COMMAND_SEARCH, $len, 0, $nreqs ) . $req; // add header if ( !( $this->_Send ( $fp, $req, $len+8 ) ) || !( $response = $this->_GetResponse ( $fp, VER_COMMAND_SEARCH ) ) ) { $this->_MBPop (); return false; } // query sent ok; we can reset reqs now $this->_reqs = array (); // parse and return response return $this->_ParseSearchResponse ( $response, $nreqs ); } /// parse and return search query (or queries) response function _ParseSearchResponse ( $response, $nreqs ) { $p = 0; // current position $max = strlen($response); // max position for checks, to protect against broken responses $results = array (); for ( $ires=0; $ires<$nreqs && $p<$max; $ires++ ) { $results[] = array(); $result =& $results[$ires]; $result["error"] = ""; $result["warning"] = ""; // extract status list(,$status) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; $result["status"] = $status; if ( $status!=SEARCHD_OK ) { list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; $message = substr ( $response, $p, $len ); $p += $len; if ( $status==SEARCHD_WARNING ) { $result["warning"] = $message; } else { $result["error"] = $message; continue; } } // read schema $fields = array (); $attrs = array (); list(,$nfields) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; while ( $nfields-->0 && $p<$max ) { list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; $fields[] = substr ( $response, $p, $len ); $p += $len; } $result["fields"] = $fields; list(,$nattrs) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; while ( $nattrs-->0 && $p<$max ) { list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; $attr = substr ( $response, $p, $len ); $p += $len; list(,$type) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; $attrs[$attr] = $type; } $result["attrs"] = $attrs; // read match count list(,$count) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; list(,$id64) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; // read matches $idx = -1; while ( $count-->0 && $p<$max ) { // index into result array $idx++; // parse document id and weight if ( $id64 ) { $doc = sphUnpackU64 ( substr ( $response, $p, 8 ) ); $p += 8; list(,$weight) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; } else { list ( $doc, $weight ) = array_values ( unpack ( "N*N*", substr ( $response, $p, 8 ) ) ); $p += 8; $doc = sphFixUint($doc); } $weight = sprintf ( "%u", $weight ); // create match entry if ( $this->_arrayresult ) $result["matches"][$idx] = array ( "id"=>$doc, "weight"=>$weight ); else $result["matches"][$doc]["weight"] = $weight; // parse and create attributes $attrvals = array (); foreach ( $attrs as $attr=>$type ) { // handle 64bit ints if ( $type==SPH_ATTR_BIGINT ) { $attrvals[$attr] = sphUnpackI64 ( substr ( $response, $p, 8 ) ); $p += 8; continue; } // handle floats if ( $type==SPH_ATTR_FLOAT ) { list(,$uval) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; list(,$fval) = unpack ( "f*", pack ( "L", $uval ) ); $attrvals[$attr] = $fval; continue; } // handle everything else as unsigned ints list(,$val) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; if ( $type==SPH_ATTR_MULTI ) { $attrvals[$attr] = array (); $nvalues = $val; while ( $nvalues-->0 && $p<$max ) { list(,$val) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; $attrvals[$attr][] = sphFixUint($val); } } else if ( $type==SPH_ATTR_MULTI64 ) { $attrvals[$attr] = array (); $nvalues = $val; while ( $nvalues>0 && $p<$max ) { $attrvals[$attr][] = sphUnpackU64 ( substr ( $response, $p, 8 ) ); $p += 8; $nvalues -= 2; } } else if ( $type==SPH_ATTR_STRING ) { $attrvals[$attr] = substr ( $response, $p, $val ); $p += $val; } else { $attrvals[$attr] = sphFixUint($val); } } if ( $this->_arrayresult ) $result["matches"][$idx]["attrs"] = $attrvals; else $result["matches"][$doc]["attrs"] = $attrvals; } list ( $total, $total_found, $msecs, $words ) = array_values ( unpack ( "N*N*N*N*", substr ( $response, $p, 16 ) ) ); $result["total"] = sprintf ( "%u", $total ); $result["total_found"] = sprintf ( "%u", $total_found ); $result["time"] = sprintf ( "%.3f", $msecs/1000 ); $p += 16; while ( $words-->0 && $p<$max ) { list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; $word = substr ( $response, $p, $len ); $p += $len; list ( $docs, $hits ) = array_values ( unpack ( "N*N*", substr ( $response, $p, 8 ) ) ); $p += 8; $result["words"][$word] = array ( "docs"=>sprintf ( "%u", $docs ), "hits"=>sprintf ( "%u", $hits ) ); } } $this->_MBPop (); return $results; } ///////////////////////////////////////////////////////////////////////////// // excerpts generation ///////////////////////////////////////////////////////////////////////////// /// connect to searchd server, and generate exceprts (snippets) /// of given documents for given query. returns false on failure, /// an array of snippets on success function BuildExcerpts ( $docs, $index, $words, $opts=array() ) { assert ( is_array($docs) ); assert ( is_string($index) ); assert ( is_string($words) ); assert ( is_array($opts) ); $this->_MBPush (); if (!( $fp = $this->_Connect() )) { $this->_MBPop(); return false; } ///////////////// // fixup options ///////////////// if ( !isset($opts["before_match"]) ) $opts["before_match"] = ""; if ( !isset($opts["after_match"]) ) $opts["after_match"] = ""; if ( !isset($opts["chunk_separator"]) ) $opts["chunk_separator"] = " ... "; if ( !isset($opts["limit"]) ) $opts["limit"] = 256; if ( !isset($opts["limit_passages"]) ) $opts["limit_passages"] = 0; if ( !isset($opts["limit_words"]) ) $opts["limit_words"] = 0; if ( !isset($opts["around"]) ) $opts["around"] = 5; if ( !isset($opts["exact_phrase"]) ) $opts["exact_phrase"] = false; if ( !isset($opts["single_passage"]) ) $opts["single_passage"] = false; if ( !isset($opts["use_boundaries"]) ) $opts["use_boundaries"] = false; if ( !isset($opts["weight_order"]) ) $opts["weight_order"] = false; if ( !isset($opts["query_mode"]) ) $opts["query_mode"] = false; if ( !isset($opts["force_all_words"]) ) $opts["force_all_words"] = false; if ( !isset($opts["start_passage_id"]) ) $opts["start_passage_id"] = 1; if ( !isset($opts["load_files"]) ) $opts["load_files"] = false; if ( !isset($opts["html_strip_mode"]) ) $opts["html_strip_mode"] = "index"; if ( !isset($opts["allow_empty"]) ) $opts["allow_empty"] = false; if ( !isset($opts["passage_boundary"]) ) $opts["passage_boundary"] = "none"; if ( !isset($opts["emit_zones"]) ) $opts["emit_zones"] = false; if ( !isset($opts["load_files_scattered"]) ) $opts["load_files_scattered"] = false; ///////////////// // build request ///////////////// // v.1.2 req $flags = 1; // remove spaces if ( $opts["exact_phrase"] ) $flags |= 2; if ( $opts["single_passage"] ) $flags |= 4; if ( $opts["use_boundaries"] ) $flags |= 8; if ( $opts["weight_order"] ) $flags |= 16; if ( $opts["query_mode"] ) $flags |= 32; if ( $opts["force_all_words"] ) $flags |= 64; if ( $opts["load_files"] ) $flags |= 128; if ( $opts["allow_empty"] ) $flags |= 256; if ( $opts["emit_zones"] ) $flags |= 512; if ( $opts["load_files_scattered"] ) $flags |= 1024; $req = pack ( "NN", 0, $flags ); // mode=0, flags=$flags $req .= pack ( "N", strlen($index) ) . $index; // req index $req .= pack ( "N", strlen($words) ) . $words; // req words // options $req .= pack ( "N", strlen($opts["before_match"]) ) . $opts["before_match"]; $req .= pack ( "N", strlen($opts["after_match"]) ) . $opts["after_match"]; $req .= pack ( "N", strlen($opts["chunk_separator"]) ) . $opts["chunk_separator"]; $req .= pack ( "NN", (int)$opts["limit"], (int)$opts["around"] ); $req .= pack ( "NNN", (int)$opts["limit_passages"], (int)$opts["limit_words"], (int)$opts["start_passage_id"] ); // v.1.2 $req .= pack ( "N", strlen($opts["html_strip_mode"]) ) . $opts["html_strip_mode"]; $req .= pack ( "N", strlen($opts["passage_boundary"]) ) . $opts["passage_boundary"]; // documents $req .= pack ( "N", count($docs) ); foreach ( $docs as $doc ) { assert ( is_string($doc) ); $req .= pack ( "N", strlen($doc) ) . $doc; } //////////////////////////// // send query, get response //////////////////////////// $len = strlen($req); $req = pack ( "nnN", SEARCHD_COMMAND_EXCERPT, VER_COMMAND_EXCERPT, $len ) . $req; // add header if ( !( $this->_Send ( $fp, $req, $len+8 ) ) || !( $response = $this->_GetResponse ( $fp, VER_COMMAND_EXCERPT ) ) ) { $this->_MBPop (); return false; } ////////////////// // parse response ////////////////// $pos = 0; $res = array (); $rlen = strlen($response); for ( $i=0; $i $rlen ) { $this->_error = "incomplete reply"; $this->_MBPop (); return false; } $res[] = $len ? substr ( $response, $pos, $len ) : ""; $pos += $len; } $this->_MBPop (); return $res; } ///////////////////////////////////////////////////////////////////////////// // keyword generation ///////////////////////////////////////////////////////////////////////////// /// connect to searchd server, and generate keyword list for a given query /// returns false on failure, /// an array of words on success function BuildKeywords ( $query, $index, $hits ) { assert ( is_string($query) ); assert ( is_string($index) ); assert ( is_bool($hits) ); $this->_MBPush (); if (!( $fp = $this->_Connect() )) { $this->_MBPop(); return false; } ///////////////// // build request ///////////////// // v.1.0 req $req = pack ( "N", strlen($query) ) . $query; // req query $req .= pack ( "N", strlen($index) ) . $index; // req index $req .= pack ( "N", (int)$hits ); //////////////////////////// // send query, get response //////////////////////////// $len = strlen($req); $req = pack ( "nnN", SEARCHD_COMMAND_KEYWORDS, VER_COMMAND_KEYWORDS, $len ) . $req; // add header if ( !( $this->_Send ( $fp, $req, $len+8 ) ) || !( $response = $this->_GetResponse ( $fp, VER_COMMAND_KEYWORDS ) ) ) { $this->_MBPop (); return false; } ////////////////// // parse response ////////////////// $pos = 0; $res = array (); $rlen = strlen($response); list(,$nwords) = unpack ( "N*", substr ( $response, $pos, 4 ) ); $pos += 4; for ( $i=0; $i<$nwords; $i++ ) { list(,$len) = unpack ( "N*", substr ( $response, $pos, 4 ) ); $pos += 4; $tokenized = $len ? substr ( $response, $pos, $len ) : ""; $pos += $len; list(,$len) = unpack ( "N*", substr ( $response, $pos, 4 ) ); $pos += 4; $normalized = $len ? substr ( $response, $pos, $len ) : ""; $pos += $len; $res[] = array ( "tokenized"=>$tokenized, "normalized"=>$normalized ); if ( $hits ) { list($ndocs,$nhits) = array_values ( unpack ( "N*N*", substr ( $response, $pos, 8 ) ) ); $pos += 8; $res [$i]["docs"] = $ndocs; $res [$i]["hits"] = $nhits; } if ( $pos > $rlen ) { $this->_error = "incomplete reply"; $this->_MBPop (); return false; } } $this->_MBPop (); return $res; } function EscapeString ( $string ) { $from = array ( '\\', '(',')','|','-','!','@','~','"','&', '/', '^', '$', '=' ); $to = array ( '\\\\', '\(','\)','\|','\-','\!','\@','\~','\"', '\&', '\/', '\^', '\$', '\=' ); return str_replace ( $from, $to, $string ); } ///////////////////////////////////////////////////////////////////////////// // attribute updates ///////////////////////////////////////////////////////////////////////////// /// batch update given attributes in given rows in given indexes /// returns amount of updated documents (0 or more) on success, or -1 on failure function UpdateAttributes ( $index, $attrs, $values, $mva=false ) { // verify everything assert ( is_string($index) ); assert ( is_bool($mva) ); assert ( is_array($attrs) ); foreach ( $attrs as $attr ) assert ( is_string($attr) ); assert ( is_array($values) ); foreach ( $values as $id=>$entry ) { assert ( is_numeric($id) ); assert ( is_array($entry) ); assert ( count($entry)==count($attrs) ); foreach ( $entry as $v ) { if ( $mva ) { assert ( is_array($v) ); foreach ( $v as $vv ) assert ( is_int($vv) ); } else assert ( is_int($v) ); } } // build request $this->_MBPush (); $req = pack ( "N", strlen($index) ) . $index; $req .= pack ( "N", count($attrs) ); foreach ( $attrs as $attr ) { $req .= pack ( "N", strlen($attr) ) . $attr; $req .= pack ( "N", $mva ? 1 : 0 ); } $req .= pack ( "N", count($values) ); foreach ( $values as $id=>$entry ) { $req .= sphPackU64 ( $id ); foreach ( $entry as $v ) { $req .= pack ( "N", $mva ? count($v) : $v ); if ( $mva ) foreach ( $v as $vv ) $req .= pack ( "N", $vv ); } } // connect, send query, get response if (!( $fp = $this->_Connect() )) { $this->_MBPop (); return -1; } $len = strlen($req); $req = pack ( "nnN", SEARCHD_COMMAND_UPDATE, VER_COMMAND_UPDATE, $len ) . $req; // add header if ( !$this->_Send ( $fp, $req, $len+8 ) ) { $this->_MBPop (); return -1; } if (!( $response = $this->_GetResponse ( $fp, VER_COMMAND_UPDATE ) )) { $this->_MBPop (); return -1; } // parse response list(,$updated) = unpack ( "N*", substr ( $response, 0, 4 ) ); $this->_MBPop (); return $updated; } ///////////////////////////////////////////////////////////////////////////// // persistent connections ///////////////////////////////////////////////////////////////////////////// function Open() { if ( $this->_socket !== false ) { $this->_error = 'already connected'; return false; } if ( !$fp = $this->_Connect() ) return false; // command, command version = 0, body length = 4, body = 1 $req = pack ( "nnNN", SEARCHD_COMMAND_PERSIST, 0, 4, 1 ); if ( !$this->_Send ( $fp, $req, 12 ) ) return false; $this->_socket = $fp; return true; } function Close() { if ( $this->_socket === false ) { $this->_error = 'not connected'; return false; } fclose ( $this->_socket ); $this->_socket = false; return true; } ////////////////////////////////////////////////////////////////////////// // status ////////////////////////////////////////////////////////////////////////// function Status () { $this->_MBPush (); if (!( $fp = $this->_Connect() )) { $this->_MBPop(); return false; } $req = pack ( "nnNN", SEARCHD_COMMAND_STATUS, VER_COMMAND_STATUS, 4, 1 ); // len=4, body=1 if ( !( $this->_Send ( $fp, $req, 12 ) ) || !( $response = $this->_GetResponse ( $fp, VER_COMMAND_STATUS ) ) ) { $this->_MBPop (); return false; } $res = substr ( $response, 4 ); // just ignore length, error handling, etc $p = 0; list ( $rows, $cols ) = array_values ( unpack ( "N*N*", substr ( $response, $p, 8 ) ) ); $p += 8; $res = array(); for ( $i=0; $i<$rows; $i++ ) for ( $j=0; $j<$cols; $j++ ) { list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; $res[$i][] = substr ( $response, $p, $len ); $p += $len; } $this->_MBPop (); return $res; } ////////////////////////////////////////////////////////////////////////// // flush ////////////////////////////////////////////////////////////////////////// function FlushAttributes () { $this->_MBPush (); if (!( $fp = $this->_Connect() )) { $this->_MBPop(); return -1; } $req = pack ( "nnN", SEARCHD_COMMAND_FLUSHATTRS, VER_COMMAND_FLUSHATTRS, 0 ); // len=0 if ( !( $this->_Send ( $fp, $req, 8 ) ) || !( $response = $this->_GetResponse ( $fp, VER_COMMAND_FLUSHATTRS ) ) ) { $this->_MBPop (); return -1; } $tag = -1; if ( strlen($response)==4 ) list(,$tag) = unpack ( "N*", $response ); else $this->_error = "unexpected response length"; $this->_MBPop (); return $tag; } } // // $Id: sphinxapi.php 3087 2012-01-30 23:07:35Z shodan $ // f='#n1210'>1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082
# translation of eu.po to EUSKARA
# translation of DrakX-eu.po to EUSKARA
# translation of DrakX-eu.po to basque
# EUSKARA: Mageia translation.
# Copyright (C) 2002,2003, 2004, 2005 Free Software Foundation, Inc.
# Iñigo Salvador Azurmendi <xalba@euskalnet.net>, 2001-2002,2003,2004, 2005.
# Hizkuntza Politikarako Sailburuordetza <hizpol@ej-gv.es>, 2004.
#
msgid ""
msgstr ""
"Project-Id-Version: DrakX-eu\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-09-12 12:22+0200\n"
"PO-Revision-Date: 2005-12-31 14:02+0100\n"
"Last-Translator: Iñigo Salvador Azurmendi <xalba@euskalnet.net>\n"
"Language-Team: EUSKARA <itzulpena@euskalgnu.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.10.2\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ../help.pm:14
#, fuzzy, c-format
msgid ""
"Before continuing, you should carefully read the terms of the license. It\n"
"covers the entire Mageia distribution. If you agree with all the\n"
"terms it contains, check the \"%s\" box. If not, clicking on the \"%s\"\n"
"button will reboot your computer."
msgstr ""
"Aurrera jarraitu aurretik lizentziaren baldintzak arretaz irakurri. \n"
"Mageia banaketa osoa hartzen du. Baldintza guztiekin ados \n"
"bazaude, hautatu \"%s\" laukia. Onartzen ez badituzu, \"%s\" botoian klik\n"
"egin eta ordenagailua berrabiaraziko da."

#: ../help.pm:20
#, c-format
msgid ""
"GNU/Linux is a multi-user system which means each user can have his or her\n"
"own preferences, own files and so on. But unlike \"root\", who is the\n"
"system administrator, the users you add at this point will not be "
"authorized\n"
"to change anything except their own files and their own configurations,\n"
"protecting the system from unintentional or malicious changes which could\n"
"impact on the system as a whole. You'll have to create at least one regular\n"
"user for yourself -- this is the account which you should use for routine,\n"
"day-to-day usage. Although it's very easy to log in as \"root\" to do\n"
"anything and everything, it may also be very dangerous! A very simple\n"
"mistake could mean that your system will not work any more. If you make a\n"
"serious mistake as a regular user, the worst that can happen is that you'll\n"
"lose some information, but you will not affect the entire system.\n"
"\n"
"The first field asks you for a real name. Of course, this is not mandatory\n"
"-- you can actually enter whatever you like. DrakX will use the first word\n"
"you type in this field and copy it to the \"%s\" one, which is the name\n"
"this user will enter to log onto the system. If you like, you may override\n"
"the default and change the user name. The next step is to enter a password.\n"
"From a security point of view, a non-privileged (regular) user password is\n"
"not as crucial as the \"root\" password, but that's no reason to neglect it\n"
"by making it blank or too simple: after all, your files could be the ones\n"
"at risk.\n"
"\n"
"Once you click on \"%s\", you can add other users. Add a user for each one\n"
"of your friends, your father, your sister, etc. Click \"%s\" when you're\n"
"finished adding users.\n"
"\n"
"Clicking the \"%s\" button allows you to change the default \"shell\" for\n"
"that user (bash by default).\n"
"\n"
"When you're finished adding users, you'll be asked to choose a user who\n"
"will be automatically logged into the system when the computer boots up. If\n"
"you're interested in that feature (and do not care much about local\n"
"security), choose the desired user and window manager, then click on\n"
"\"%s\". If you're not interested in this feature, uncheck the \"%s\" box."
msgstr ""
"GNU/Linux erabiltzaile anitzeko sistema da, eta beraz erabiltzaile\n"
"bakoitzak bere hobespenak, bere fitxategiak eta abar eduki ditzake. \n"
"``Hasiberrien gida'' irakur dezakezu, erabiltzaile anitzeko sistemei buruz"
"\"gehiago ikasteko. Baina \"root\"ak, hau da, \n"
"sistema-administratzaileak ez bezala, hemen gehitzen dituzun \n"
"erabiltzaileek ezingo dute ezer aldatu, beren fitxategiak eta beren \n"
"konfigurazioa izan ezik, eta, hortaz, sistema babestuta egongo da \n"
"sistema osoan eragina duten nahigabeko aldaketetatik edo intentzio \n"
"txarrez egindakoetatik. \n"
"Gutxienez, erabiltzaile arrunt bat sortu behar duzu zuretzat - hori da \n"
"eguneroko lanetarako erabili behar duzuna. Oso erraza den arren saioa beti \n"
"\"root\" gisa hastea, kontuan izan oso arriskutsua izan daitekeela! \n"
"Hutsegiterik txikienak sistema funtzionatu ezinda utz dezake. Erabiltzaile \n"
"arrunt gisa akats larriren bat egiten baduzu, gerta litekeen okerrena \n"
"informazioa galtzea da, baina ez du eraginik izango sistema osoan\n"
"\n"
"Lehen eremuan benetako izena eskatuko zaizu. Jakina, hori ez da \n"
"nahitaezkoa -nahi duzun izena idatz dezakezu. DrakX-k eremu honetan \n"
"idatzitako lehen hitza gordeko du, eta \"%s\" eremuan kopiatuko du.\n"
"Horixe izango da erabiltzaile honek sisteman saioa hasteko idatziko duena. \n"
"Nahi izanez gero, lehenetsia gainidatz dezakezu, eta erabiltzaile-izena \n"
"aldatu. Hurrengo urratsa pasahitza idaztea da.\n"
"Segurtasunaren ikuspegitik, pribilegio gabeko erabiltzaile (arrunt) baten\n"
"pasahitza ez da \"root\"arena bezain garrantzizkoa; baina, hala ere, ez da\n"
"axolagabeki jokatu behar, hutsik utziz edo pasahitz errazegia erabiliz: \n"
"azken batean, zure fitxategiak arriskuan egon litezke.\n"
"\n"
"\"%s\"(e)n klik egindakoan, beste erabiltzaile batzuk gehitu ditzakezu. \n"
"Gehitu erabiltzaile bat zure lagun bakoitzarentzat: zure aitarentzat edo \n"
"arrebarentzat, adibidez. Erabiltzaileak gehitutakoan, hautatu \"%s\".\n"
"\n"
"\"%s\" botoian klik eginez, \"shell\" lehenetsia aldatu ahal izango diozu\n"
"erabiltzaile horri (bash lehenespenez).\n"
"\n"
"Erabiltzaileak gehitzen amaitutakoan, ordenagailua abiaraztean automatikoki\n"
"saioa has dezakeen erabiltzailea aukeratzeko eskatuko zaizu. Eginbide\n"
"hori interesatzen bazaizu (ez du eragin handirik segurtasun lokalean),\n"
"hautatu erabiltzailea eta leiho-kudeatzailea, eta egin klik \"%s\"(e)n. \n"
"Eginbidea interesatzen ez bazaizu, garbitu \"%s\" laukia."

#: ../help.pm:54
#, c-format
msgid "User name"
msgstr ""

#: ../help.pm:54
#, c-format
msgid "Accept user"
msgstr ""

#: ../help.pm:54
#, c-format
msgid "Do you want to use this feature?"
msgstr "Eginbide hau erabili nahi duzu?"

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:57
#, c-format
msgid ""
"Listed here are the existing Linux partitions detected on your hard disk drive.\n"
"You can keep the choices made by the wizard, since they are good for most\n"
"common installations. If you make any changes, you must at least define a\n"
"root partition (\"/\"). Do not choose too small a partition or you will not\n"
"be able to install enough software. If you want to store your data on a\n"
"separate partition, you will also need to create a \"/home\" partition\n"
"(only possible if you have more than one Linux partition available).\n"
"\n"
"Each partition is listed as follows: \"Name\", \"Capacity\".\n"
"\n"
"\"Name\" is structured: \"hard disk drive type\", \"hard disk drive number\",\n"
"\"partition number\" (for example, \"hda1\").\n"
"\n"
"\"Hard disk drive type\" is \"hd\" if your hard disk drive is an IDE hard disk drive and\n"
"\"sd\" if it is a SCSI hard disk drive.\n"
"\n"
"\"Hard disk drive number\" is always a letter after \"hd\" or \"sd\". For IDE\n"
"hard disk drives:\n"
"\n"
" * \"a\" means \"master hard disk drive on the primary IDE controller\";\n"
"\n"
" * \"b\" means \"slave hard disk drive on the primary IDE controller\";\n"
"\n"
" * \"c\" means \"master hard disk drive on the secondary IDE controller\";\n"
"\n"
" * \"d\" means \"slave hard disk drive on the secondary IDE controller\".\n"
"\n"
"With SCSI hard disk drives, an \"a\" means \"lowest SCSI ID\", a \"b\" means\n"
"\"second lowest SCSI ID\", etc."
msgstr ""
"Hemen dituzu zure disko zurrunean detektatutako Linux partizioak.\n"
"Morroiak egindako aukerak manten ditzakezu, egokiak baitira instalazio\n"
"ohikoenetarako. Aldaketarik egiten baduzu, gutxienez erroko partizio bat\n"
"definitu behar duzu (\"/\"). Ez aukeratu partizio txikiegirik edo ezin \n"
"izango duzu nahikoa software instalatu. Datuak beste partizio batean \n"
"gorde nahi badituzu, \"/home\"rako partizio bat ere sortu beharko duzu\n"
"(Linux partizio bat baino gehiago baduzu soilik da posible).\n"
"\n"
"Partizio bakoitza honela azaltzen da: \"Izena\", \"Edukiera\".\n"
"\n"
"\"Izena\" honela osatzen da: \"disko zurrun mota\", \"disko \n"
"zurrun zenbakia\", \"partizio-zenbakia\" (adibidez, \"hda1\").\n"
"\n"
"\"Disko zurrun mota\" \"hd\" izaten da, disko zurruna IDE motakoa\n"
"bada, eta \"sd\", SCSI motakoa bada.\n"
"\n"
"\"Disko zurrun zenbakia\" beti letra bat izaten da \"hd\" edo\n"
"\"sd\"ren ondoren. \n"
"IDE disko zurrunetan:\n"
"\n"
" * \"a\"k esan nahi du \"IDE kontroladore primarioko disko zurrun\n"
"nagusia\";\n"
"\n"
" * \"b\"k esan nahi du \"IDE kontroladore primarioko mendeko disko\n"
"zurruna\";\n"
"\n"
" * \"c\"k esan nahi du \"IDE kontroladore sekundarioko disko zurrun\n"
"nagusia\";\n"
"\n"
" * \"d\"k esan nahi du \"IDE kontroladore sekundarioko mendeko disko\n"
"zurruna\".\n"
"\n"
"SCSI disko zurrunetan, \"a\"k esan nahi du\"SCSI ID baxuena\", \"b\"k\n"
"\"bigarren SCSI ID baxuena\", etab."

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:88
#, fuzzy, c-format
msgid ""
"The Mageia installation is distributed on several CD-ROMs. If a\n"
"selected package is located on another CD-ROM, DrakX will eject the current\n"
"CD and ask you to insert the required one. If you do not have the requested\n"
"CD at hand, just click on \"%s\", the corresponding packages will not be\n"
"installed."
msgstr ""
"Mageia instalazioa zenbait CD-ROMetan banatuta dago. \n"
"Hautatutako pakete bat beste CD-ROM batean badago, DrakX-k du\n"
"uneko CDa egotziko eta behar den CDa sartzeko eskatuko dizu.\n"
"Eskatzen zaizun CDa ez badaukazu eskura, sakatu \"%s\",\n"
"dagozkion paketeak ez dira instalatuko."

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:95
#, fuzzy, c-format
msgid ""
"It's now time to specify which programs you wish to install on your system.\n"
"There are thousands of packages available for Mageia, and to make it\n"
"simpler to manage, they have been placed into groups of similar\n"
"applications.\n"
"\n"
"Mageia sorts package groups in four categories. You can mix and\n"
"match applications from the various categories, so a ``Workstation''\n"
"installation can still have applications from the ``Server'' category\n"
"installed.\n"
"\n"
" * \"%s\": if you plan to use your machine as a workstation, select one or\n"
"more of the groups in the workstation category.\n"
"\n"
" * \"%s\": if you plan on using your machine for programming, select the\n"
"appropriate groups from that category. The special \"LSB\" group will\n"
"configure your system so that it complies as much as possible with the\n"
"Linux Standard Base specifications.\n"
"\n"
"   Selecting the \"LSB\" group will ensure 100%%-LSB compliance\n"
"of the system. However, if you do not select the \"LSB\" group you will\n"
"still have a system which is nearly 100%% LSB-compliant.\n"
"\n"
" * \"%s\": if your machine is intended to be a server, select which of the\n"
"more common services you wish to install on your machine.\n"
"\n"
" * \"%s\": this is where you will choose your preferred graphical\n"
"environment. At least one must be selected if you want to have a graphical\n"
"interface available.\n"
"\n"
"Moving the mouse cursor over a group name will display a short explanatory\n"
"text about that group.\n"
"\n"
"You can check the \"%s\" box, which is useful if you're familiar with the\n"
"packages being offered or if you want to have total control over what will\n"
"be installed.\n"
"\n"
"If you start the installation in \"%s\" mode, you can deselect all groups\n"
"and prevent the installation of any new packages. This is useful for\n"
"repairing or updating an existing system.\n"
"\n"
"If you deselect all groups when performing a regular installation (as\n"
"opposed to an upgrade), a dialog will pop up suggesting different options\n"
"for a minimal installation:\n"
"\n"
" * \"%s\": install the minimum number of packages possible to have a\n"
"working graphical desktop.\n"
"\n"
" * \"%s\": installs the base system plus basic utilities and their\n"
"documentation. This installation is suitable for setting up a server.\n"
"\n"
" * \"%s\": will install the absolute minimum number of packages necessary\n"
"to get a working Linux system. With this installation you will only have a\n"
"command-line interface. The total size of this installation is about 65\n"
"megabytes."
msgstr ""
"Sisteman zein programa instalatu nahi dituzun zehazteko garaia da.\n"
"Mageia-erako milaka pakete dituzu erabilgarri, eta kudeaketa\n"
"errazteko, antzeko aplikazioen multzotan kokatu dira.\n"
"\n"
"Mageia-ek pakete multzoak lau kategoriatan antolatzen ditu.\n"
"Kategoria anitzetako aplikazioak nahastu eta bateratu ditzakezu, honela\n"
"\"Lanpostua\" instalazio batek \"Zerbitzari\" kategoriako aplikazioak\n"
"instalatuta izan ditzake.\n"
"\n"
" * \"%s\": makina lanpostu gisa erabiltzeko asmoa baduzu,\n"
"hautatu 'lanpostua' kategoriako taldeetako bat edo gehiago.\n"
"\n"
" * \"%s\": zure makina programazioan erabiltzeko asmoa baduzu, hautatu\n"
"kategoria horretako talde egokiak. \"LSB\" talde bereziak zure sistema\n"
"Linux eStandar Base-ren zehaztapenekin ahalik bateragarrien izan\n"
"dadin konfiguratuko du.\n"
"\n"
"   \"LSB\" taldea hautatzeak \"2.4\" nukleoaren seriea ere instalatuko da,\n"
"\"2.6\" lehenetsiaren ordez. Hau sistemaren  %%100 LSB bateragarritasuna\n"
"ziurtatzeko egiten da. Hala ere, \"LSB\" taldea aukeratzen ez baduzu ere\n"
"LSB-rekin ia  %%100 bateragarria den sistema izango duzu.\n"
"\n"
" * \"%s\": zure makina zerbitzaria izatea nahi baduzu, aukeratu\n"
"zerbitzu ohikoenetatik zeintzu instalatu nahi dituzun zure makinan.\n"
"\n"
" * \"%s\": hemen aukeratuko duzu nahien duzun ingurune grafikoa.\n"
"Bat behintzat hautatu behar duzu, interfaze grafikoa erabili nahi\n"
"baduzu behintzat.\n"
"\n"
"Saguaren kurtsorea talde izen baten gainetik pasatuta, talde\n"
"horri buruzko azalpen labur bat bistaratuko da.\n"
"\n"
"\"%s\" laukia markatu dezakezu, erabilgarria da eskainitako paketeak\n"
"ezagun badituzu edo instalatuko denaren gaineko erabateko kontrola \n"
"nahi baduzu.\n"
"\n"
"Instalazioa \"%s\" moduan hasten baduzu, talde guztiak desautatu\n"
"ditzakezu eta edozein pakete berriren instalazioa eragozteko. Hau\n"
"erabilgarria da exisitzen den sistema bat konpondu edo eguneratzeko.\n"
"\n"
"Instalazio arrunt bat (hau da, eguneraketa ez dena) egiterakoan talde\n"
"guztiak desautatzen badituzu, elkarrizketa bat aterako zaizu instalazio\n"
"minimo bat egiteko aukera desberdinak aholkatuz:\n"
"\n"
" * \"%s\": Instalatu ahalik eta pakete kopuru txikiena dabilen idaztegi "
"grafiko bat izateko.\n"
"\n"
" * \"%s\": oinarrizko sistema gehi oinarrizko utilitateak eta heuren\n"
"dokumentazioa instalatzen ditu. Egokia da zerbitzari bat ezartzeko.\n"
"\n"
" * \"%s\": Linux sistema batekin lan egin ahal izateko behar den pakete\n"
"kopuru txikiena instalatzen du. Instalazio honekin, komando-lerroko \n"
"interfazea bakarrik izango duzu. Instalazio honen neurri osoa 65\n"
"megabyte ingurukoa da."

#: ../help.pm:149 ../help.pm:591
#, c-format
msgid "Upgrade"
msgstr "Bertsio-berritzea"

#: ../help.pm:149
#, c-format
msgid "With basic documentation"
msgstr "Oinarrizko dokumentazioarekin"

#: ../help.pm:149
#, c-format
msgid "Truly minimal install"
msgstr "Instalazio minimo-minimoa"

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:152
#, fuzzy, c-format
msgid ""
"If you choose to install packages individually, the installer will present\n"
"a tree containing all packages classified by groups and subgroups. While\n"
"browsing the tree, you can select entire groups, subgroups, or individual\n"
"packages.\n"
"\n"
"Whenever you select a package on the tree, a description will appear on the\n"
"right to let you know the purpose of that package.\n"
"\n"
"!! If a server package has been selected, either because you specifically\n"
"chose the individual package or because it was part of a group of packages,\n"
"you'll be asked to confirm that you really want those servers to be\n"
"installed. By default Mageia will automatically start any installed\n"
"services at boot time. Even if they are safe and have no known issues at\n"
"the time the distribution was shipped, it is entirely possible that\n"
"security holes were discovered after this version of Mageia was\n"
"finalized. If you do not know what a particular service is supposed to do "
"or\n"
"why it's being installed, then click \"%s\". Clicking \"%s\" will install\n"
"the listed services and they will be started automatically at boot time. !!\n"
"\n"
"The \"%s\" option is used to disable the warning dialog which appears\n"
"whenever the installer automatically selects a package to resolve a\n"
"dependency issue. Some packages depend on others and the installation of\n"
"one particular package may require the installation of another package. The\n"
"installer can determine which packages are required to satisfy a dependency\n"
"to successfully complete the installation.\n"
"\n"
"The tiny floppy disk icon at the bottom of the list allows you to load a\n"
"package list created during a previous installation. This is useful if you\n"
"have a number of machines that you wish to configure identically. Clicking\n"
"on this icon will ask you to insert the floppy disk created at the end of\n"
"another installation. See the second tip of the last step on how to create\n"
"such a floppy."
msgstr ""
"Paketeak banaka instalatzea hautatzen baduzu, instalatzaileak pakete\n"
"guztiak talde eta azpitaldetan klasifikatuta dituen zuhaitz bat aurkeztuko "
"du.\n"
"Zuhaitza arakatzerakoan, talde osoak, azpitaldeak edo banako paketeak\n"
"hauta ditzakezu.\n"
"\n"
"Pakete bat hautatzen duzun bakoitzean, azalpen bat agertuko\n"
"da eskuinean, paketearen helburua jakinarazteko.\n"
"\n"
"Zerbitzari pakete bat hautatu bada, pakete hori zehazki hautatu duzulako\n"
"edo pakete-talde bateko zati zelako, zerbitzari horiek instalatu nahi "
"dituzula\n"
" berresteko eskatuko zaizu. Lehenespenez Mageia-ek instalatutako\n"
"edozein zerbitzu abioan automatikoki abiaraziko du. Nahiz eta seguruak\n"
" diren eta arazo ezagunik ez duten banaketa kaleratzeko garaian, guztiz\n"
" posible da Mageia bertsio hau amaitu eta gero segurtasun zuloak\n"
" aurkitu izana. Ez badakizu zerbitzu zehatz batek zer egiten duen edo "
"zergatik\n"
" instalatu den, klikatu \"%s\". \"%s \" klikatzeak zerrendatutako "
"zerbitzuak\n"
" instalatuko ditu eta abiapen garaian automatikoki hasiko dira!!\n"
"\n"
"\"%s\" aukera menpekotasun arazoak konpontzeko xedez instalatzaileak\n"
" automatikoki pakete bat hautatzen duenean agertzen den abisua ezgaitzeko\n"
" erabiltzen da. Pakete batzuk beste batzurekiko menpekotasuna izaten dute,\n"
" eta zenbait pakete instalatu ahal izateko beste pakete batzuk instalatuta\n"
" eduki behar izaten dira. Instalatzaileak zehatz dezake instalazioa behar\n"
"bezala burutu dadin, menpekotasun bat asetzeko, zein pakete behar diren.\n"
"\n"
"Zerrendaren azpian agertzen den diskete ikonoak aukera ematen du\n"
"aurreko instalazio batean sortutako pakete-zerrenda bat zamatzeko. Oso\n"
"erabilgarria da hainbat makina berdin konfiguratu nahi badituzu. Ikono\n"
"honetan klik egiten baduzu, beste instalazio baten amaieran sortutako\n"
" disketea sartzeko eskatuko dizu. Ikus diskete hori sortzeko azken "
"urratseko\n"
"bigarren iradokizuna."

#: ../help.pm:183
#, c-format
msgid "Automatic dependencies"
msgstr "Mendekotasun automatikoak"

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:185
#, c-format
msgid ""
"This dialog is used to select which services you wish to start at boot\n"
"time.\n"
"\n"
"DrakX will list all services available on the current installation. Review\n"
"each one of them carefully and uncheck those which are not needed at boot\n"
"time.\n"
"\n"
"A short explanatory text will be displayed about a service when it is\n"
"selected. However, if you're not sure whether a service is useful or not,\n"
"it is safer to leave the default behavior.\n"
"\n"
"!! At this stage, be very careful if you intend to use your machine as a\n"
"server: you probably do not want to start any services which you do not "
"need.\n"
"Please remember that some services can be dangerous if they're enabled on a\n"
"server. In general, select only those services you really need. !!"
msgstr ""
"Elkarrizketa hau abio garaian zein zerbitzu hastea nahi duzun aukeratzeko\n"
" erabiltzen da.\n"
"\n"
"DrakX-ek uneko instalazioan erabilgarri dauden zerbitzu guztiak zerrendatuko "
"ditu. Aztertu haietako bakoitza arretaz eta ezautatu abio garaian behar ez\n"
" direnak.\n"
"\n"
"Zerbitzu bat hautatzean, azalpen-testu labur bat bistaratuko da.\n"
"Hala ere, ez bazaude ziur zerbitzu bat erabiltzea komeni den ala ez,\n"
"seguruagoa da jokabide lehenetsia uztea.\n"
"\n"
"Etapa honetan, oso kontuz ibili zure makina zerbitzari gisa erabiltzeko\n"
"asmoa baduzu: seguru asko ez duzu nahi izango behar ez duzun zerbitzurik \n"
"abiaraztea. Gogoan izan zerbitzu batzuk arriskutsuak izan daitezkeela \n"
"zerbitzari batean gaitzen badira. Oro har, benetan behar dituzun zerbitzuak\n"
"soilik hautatu!!"

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:209
#, c-format
msgid ""
"GNU/Linux manages time in GMT (Greenwich Mean Time) and translates it to\n"
"local time according to the time zone you selected. If the clock on your\n"
"motherboard is set to local time, you may deactivate this by unselecting\n"
"\"%s\", which will let GNU/Linux know that the system clock and the\n"
"hardware clock are in the same time zone. This is useful when the machine\n"
"also hosts another operating system.\n"
"\n"
"The \"%s\" option will automatically regulate the system clock by\n"
"connecting to a remote time server on the Internet. For this feature to\n"
"work, you must have a working Internet connection. We recommend that you\n"
"choose a time server located near you. This option actually installs a time\n"
"server which can be used by other machines on your local network as well."
msgstr ""
"GNU/Linux-ek GMT (Greenwich Mean Time) ordua erabiltzen du eta tokian\n"
"tokiko ordura aldatzen du, hautatutako ordu-gunearen arabera. Zure plaka\n"
"nagusiko ordua bertako orduan ezarrita badago, hau desaktibatu dezakezu\n"
"\"%s \" aukera ezautatuz, GNU/Linux-i sistemaren ordua eta hardwarearena\n"
" ordu-gune berean daudela jakinaraziko diolarik. Hau erabilgarria da\n"
"makinak beste sistema eragile bati ere ostatu ematen badio.\n"
"\n"
"\"%s\" aukerak automatikoki doituko du sistemaren ordularia, Interneteko\n"
" urruneko ordu zerbitzari batekin konektatuz. Ezaugarri hau erabili ahal\n"
" izateko, Interneteko konexioa behar duzu. Zugandik hurbil dagoen ordu\n"
" zerbitzaria aukeratzea gomendatzen dizugu. Aukera honek ordu zerbitzari\n"
" bat instalatzen du zure bertako sareko beste makinek ere erabili dezaketena."

#: ../help.pm:213
#, c-format
msgid "Hardware clock set to GMT"
msgstr ""

#: ../help.pm:213
#, c-format
msgid "Automatic time synchronization"
msgstr "Ordu-sinkronizazio automatikoa"

#: ../help.pm:223
#, c-format
msgid ""
"Graphic Card\n"
"\n"
"   The installer will normally automatically detect and configure the\n"
"graphic card installed on your machine. If this is not correct, you can\n"
"choose from this list the card you actually have installed.\n"
"\n"
"   In the situation where different servers are available for your card,\n"
"with or without 3D acceleration, you're asked to choose the server which\n"
"best suits your needs."
msgstr ""
"Txartel grafikoa\n"
"\n"
"   Instalatzaileak normalean automatikoki detektatzen eta konfiguratzen\n"
"du makinan instalatutako txartel grafikoa. Ez badu automatikoki detektatzen\n"
"zerrendan hauta dezakezu zure txartel grafikoa.\n"
"\n"
"   Zure txartelarentzat zerbitzari bat baino gehiago badaude erabilgarri, \n"
"3D azeleraziodunak nahiz gabeak, zure beharren arabera ondoen datorkizuna\n"
"aukeratu beharko duzu."

#: ../help.pm:234
#, fuzzy, c-format
msgid ""
"X (for X Window System) is the heart of the GNU/Linux graphical interface\n"
"on which all the graphical environments (KDE, GNOME, AfterStep,\n"
"WindowMaker, etc.) bundled with Mageia rely upon.\n"
"\n"
"You'll see a list of different parameters to change to get an optimal\n"
"graphical display.\n"
"\n"
"Graphic Card\n"
"\n"
"   The installer will normally automatically detect and configure the\n"
"graphic card installed on your machine. If this is not correct, you can\n"
"choose from this list the card you actually have installed.\n"
"\n"
"   In the situation where different servers are available for your card,\n"
"with or without 3D acceleration, you're asked to choose the server which\n"
"best suits your needs.\n"
"\n"
"\n"
"\n"
"Monitor\n"
"\n"
"   Normally the installer will automatically detect and configure the\n"
"monitor connected to your machine. If it is not correct, you can choose\n"
"from this list the monitor which is connected to your computer.\n"
"\n"
"\n"
"\n"
"Resolution\n"
"\n"
"   Here you can choose the resolutions and color depths available for your\n"
"graphics hardware. Choose the one which best suits your needs (you will be\n"
"able to make changes after the installation). A sample of the chosen\n"
"configuration is shown in the monitor picture.\n"
"\n"
"\n"
"\n"
"Test\n"
"\n"
"   Depending on your hardware, this entry might not appear.\n"
"\n"
"   The system will try to open a graphical screen at the desired\n"
"resolution. If you see the test message during the test and answer \"%s\",\n"
"then DrakX will proceed to the next step. If you do not see it, then it\n"
"means that some part of the auto-detected configuration was incorrect and\n"
"the test will automatically end after 12 seconds and return you to the\n"
"menu. Change settings until you get a correct graphical display.\n"
"\n"
"\n"
"\n"
"Options\n"
"\n"
"   This steps allows you to choose whether you want your machine to\n"
"automatically switch to a graphical interface at boot. Obviously, you may\n"
"want to check \"%s\" if your machine is to act as a server, or if you were\n"
"not successful in getting the display configured."
msgstr ""
"X (X Window sistema) GNU/Linux-en interfaze grafikoaren bihotza da,\n"
" Mageia-ekin bildutako ingurune grafiko guztiek (KDE, Gnome,\n"
"Afterstep, WindowMaker...) erabiltzen dutena.\n"
"\n"
"Bistaratze grafiko optimoa lortzeko aldatu daitekeen parametro zerrenda\n"
"bat ikusiko duzu.\n"
"\n"
"Txartel Grafikoa\n"
"\n"
"   Instalatzaileak normalean automatikoki detektatu eta konfiguratuko\n"
"du makinan instalatutako txartel grafikoa. Hau zuzena ez bada, zerrendatik\n"
"hauta dezakezu instalatuta daukazun txartela.\n"
"\n"
"   Zure txartelarentzat zerbitzari desberdinak erabilgarri badaude, 3D\n"
"azelerazioarekin edo gabe, zure beharretara ondoen egokitzen den\n"
"zerbitzaria hautatzeko eskatuko zaizu.\n"
"\n"
"\n"
"\n"
"Monitorea\n"
"\n"
"   Normalean instalatzaileak automatikoki detektatu eta konfiguratuko\n"
"du makinara lotutako monitorea. Hau zuzena ez bada, zerrendatik\n"
"hauta dezakezu lotuta daukazun monitorea.\n"
"\n"
"\n"
"\n"
"Bereizmena\n"
"\n"
"   Hemen, zure grafikoen hardwarearentzako erabilgarri dauden bereizmen\n"
"eta kolore sakonerak hautatu ditzakezu. Aukeratu zure beharretara hobe\n"
"egokitzen dena (instalazio ondoren aldaketak egiteko aukera izango duzu).\n"
"Hautatutako konfigurazioa erakusten da monitorearen irudian.\n"
"\n"
"\n"
"\n"
"Proba\n"
"\n"
"   Zure hardwarearen arabera, baliteke sarrera hau ez agertzea.\n"
"\n"
"   Sistema nahi duzun bereizmeneko pantaila grafiko bat irekitzen saiatuko\n"
"da. Proba mezua ikusi eta \"%s\" erantzuten baduzu, DrakX hurrengo \n"
"urratsera jarraituko du. Ikusten ez baduzu , horrek esan nahi du\n"
"automatikoki detektatutako konfigurazioaren zatiren bat gaizki zegoela\n"
"eta proba automatikoki amaituko da 12 segundo igarotakoan, eta menura\n"
" itzuliko da. Aldatu ezarpenak bistaratze grafiko zuzena lortu arte.\n"
"\n"
"\n"
"\n"
"Aukerak\n"
"\n"
"   Urrats hauek zure makina abiaraztean automatikoki interfaze grafikora\n"
" aldatzea nahi duzun aukeratzeko bidea emango dizute. Jakina, \"%s\"\n"
"aukeratu nahiko duzu makinak zerbitzari moduan lanegingo badu, edo\n"
"bistaratzea konfiguratzea lortu ez baduzu."

#: ../help.pm:291
#, c-format
msgid ""
"Monitor\n"
"\n"
"   Normally the installer will automatically detect and configure the\n"
"monitor connected to your machine. If it is not correct, you can choose\n"
"from this list the monitor which is connected to your computer."
msgstr ""
"Monitorea\n"
"\n"
"   Normalean instalatzaileak automatikoki detektatzen eta konfiguratzen\n"
"du makinari konektatutako monitorea. Egokia ez bada, zerrendan\n"
"aukera dezakezu ordenagailuan konektatuta daukazun monitorea."

#: ../help.pm:298
#, c-format
msgid ""
"Resolution\n"
"\n"
"   Here you can choose the resolutions and color depths available for your\n"
"graphics hardware. Choose the one which best suits your needs (you will be\n"
"able to make changes after the installation). A sample of the chosen\n"
"configuration is shown in the monitor picture."
msgstr ""
"Bereizmena\n"
"\n"
"   Bereizmena eta kolore-sakonera hauta ditzakezu, zure hardwarearentzat\n"
"erabilgarri daudenen artean. Aukeratu zure beharren arabera ondoen \n"
"datorkizuna (edonola ere, instalazioaren ondoren aldatu ahal izango duzu). \n"
"Aukeratutako konfigurazioaren adibide bat erakutsiko zaizu monitorean."

#: ../help.pm:306
#, c-format
msgid ""
"In the situation where different servers are available for your card, with\n"
"or without 3D acceleration, you're asked to choose the server which best\n"
"suits your needs."
msgstr ""
"Zure txartelarentzako zerbitzari ugari dauden kasurako, 3D azeleraziodunak \n"
"nahiz gabeak, zure beharretara hobe egokitzen dena aukera dezazun "
"galdegiten\n"
"zaizu."

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:311
#, c-format
msgid ""
"Options\n"
"\n"
"   This steps allows you to choose whether you want your machine to\n"
"automatically switch to a graphical interface at boot. Obviously, you may\n"
"want to check \"%s\" if your machine is to act as a server, or if you were\n"
"not successful in getting the display configured."
msgstr ""
"Aukerak\n"
"\n"
"   Makina abiaraztean automatikoki interfaze grafikora aldatu dadin nahi\n"
"duzun hautatzeko aukera ematen dizu. Jakina, \"%s\" erantzun nahi \n"
"izango duzu zure ordenagailuak zerbitzari gisa jokatu behar badu, edo \n"
"bistaratzea konfiguratzea lortzen ez baduzu."

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:319
#, fuzzy, c-format
msgid ""
"You now need to decide where you want to install the Mageia\n"
"operating system on your hard disk drive. If your hard disk drive is empty or if an\n"
"existing operating system is using all the available space you will have to\n"
"partition the drive. Basically, partitioning a hard disk drive means to\n"
"logically divide it to create the space needed to install your new\n"
"Mageia system.\n"
"\n"
"Because the process of partitioning a hard disk drive is usually irreversible\n"
"and can lead to data losses, partitioning can be intimidating and stressful\n"
"for the inexperienced user. Fortunately, DrakX includes a wizard which\n"
"simplifies this process. Before continuing with this step, read through the\n"
"rest of this section and above all, take your time.\n"
"\n"
"Depending on the configuration of your hard disk drive, several options are\n"
"available:\n"
"\n"
" * \"%s\". This option will perform an automatic partitioning of your blank\n"
"drive(s). If you use this option there will be no further prompts.\n"
"\n"
" * \"%s\". The wizard has detected one or more existing Linux partitions on\n"
"your hard disk drive. If you want to use them, choose this option. You will then\n"
"be asked to choose the mount points associated with each of the partitions.\n"
"The legacy mount points are selected by default, and for the most part it's\n"
"a good idea to keep them.\n"
"\n"
" * \"%s\". If Microsoft Windows is installed on your hard disk drive and takes\n"
"all the space available on it, you will have to create free space for\n"
"GNU/Linux. To do so, you can delete your Microsoft Windows partition and\n"
"data (see ``Erase entire disk'' solution) or resize your Microsoft Windows\n"
"FAT or NTFS partition. Resizing can be performed without the loss of any\n"
"data, provided you've previously defragmented the Windows partition.\n"
"Backing up your data is strongly recommended. Using this option is\n"
"recommended if you want to use both Mageia and Microsoft Windows on\n"
"the same computer.\n"
"\n"
"   Before choosing this option, please understand that after this\n"
"procedure, the size of your Microsoft Windows partition will be smaller\n"
"than when you started. You'll have less free space under Microsoft Windows\n"
"to store your data or to install new software.\n"
"\n"
" * \"%s\". If you want to delete all data and all partitions present on\n"
"your hard disk drive and replace them with your new Mageia system, choose\n"
"this option. Be careful, because you will not be able to undo this "
"operation\n"
"after you confirm.\n"
"\n"
"   !! If you choose this option, all data on your disk will be deleted. !!\n"
"\n"
" * \"%s\". This option appears when the hard disk drive is entirely taken by\n"
"Microsoft Windows. Choosing this option will simply erase everything on the\n"
"drive and begin fresh, partitioning everything from scratch.\n"
"\n"
"   !! If you choose this option, all data on your disk will be lost. !!\n"
"\n"
" * \"%s\". Choose this option if you want to manually partition your hard\n"
"drive. Be careful -- it is a powerful but dangerous choice and you can very\n"
"easily lose all your data. That's why this option is really only\n"
"recommended if you have done something like this before and have some\n"
"experience. For more instructions on how to use the DiskDrake utility,\n"
"refer to the ``Managing Your Partitions'' section in the ``Starter Guide''."
msgstr ""
"Hona iritsita, Mageia sistema eragilea disko zurrunean non\n"
"instalatu aukeratu behar duzu. Zure disko zurruna hutsik badago edo\n"
"lehendik dagoen sistema eragile batek leku erabilgarri guztia betetzen\n"
"badu, diska zatikatu beharko duzu. Disko zurruna zatikatzea, funtsean,  \n"
"diskoa logikoki zatitzea da, Mageia sistema berria instalatzeko\n"
"behar den lekua sortzeko.\n"
"\n"
"Disko zurruna zatikatzeko prozesua normalean itzulbiderik gabea denez\n"
"eta datuen galera eragin dezakeenez, zatikatzeak beldurra eta estresa "
"eragin\n"
" dezake esperientzia gabeko erabiltzaileengan. Zorionez, DrakX-ek prozesu\n"
" hau errazten duen morroi bat dauka. Urrats honekin jarraitu aurretik, "
"irakurri\n"
" atal honetako gainerako zatia eta guztiaren gainetik hartu behar adina "
"denbora.\n"
"\n"
"Disko zurrunaren konfigurazioaren arabera, hainbat aukera izango dituzu:\n"
"\n"
" * \"%s\": Aukera honek zatikaketa automatia gauzatuko du hutsik dagoen\n"
" unitatean. Aukera hau erabiltzen baduzu, ez zaizu beste galderarik egingo \n"
"\n"
" * \"%s\": Morroiak Linux partizio bat edo gehiago detektatu ditu zure "
"disko\n"
" zurrunean. Erabili nahi badituzu, hautatu aukera hau. Partizio bakoitzari\n"
" dagokion muntatze-puntua aukeratzeko eskatuko zaizu. Oinordetzan\n"
" hartutako muntatze-puntuak hautatzen dira lehenespenez, eta gehienetan\n"
" ona izaten da haiek mantentzea.\n"
"\n"
" * \"%s\": Microsoft Windows disko zurrunean instalatuta badago eta\n"
"bertako leku erabilgarri guztia hartzen badu, lekua askatu beharko duzu\n"
" GNU/Linux-entzat. Horretarako, Microsoft Windows-en partizioa eta datuak\n"
" ezaba ditzakezu (ikus ``Ezabatu disko osoa'' aukera) edo Windows-en FAT\n"
" edo NTFS partizioei neurria aldatu. Neurri aldaketa datu galerarik gabe\n"
"gauzatu daiteke baldin eta aurretik Windows partizioa desfragmentatu\n"
" baduzu. Oso gomendagarria da datuen babeskopiak egitea. Aukera hau\n"
" erabiltzea gomendatzen da Mageia eta Microsoft Windows, biak,\n"
" konputagailu berean erabili nahi badituzu.\n"
"\n"
"   Aukera hau hautatu aurretik, ulertu ezazu prozedura honen ondoren,\n"
" Microsoft Windows partizioaren neurria hasi aurretik baino txikiagoa\n"
"izango dela. Leku aske gutxiago izango duzu Microsoft Windows-en\n"
"zure datuak gorde edo software berria instalatzeko.\n"
"\n"
" * \"%s\": Disko zurrunean dauden datu eta partizio guztiak ezabatu eta \n"
"Mageia sistema berriarekin ordeztu nahi badituzu, hautatu aukera\n"
" hau. Kontuz, berretsi ondoren ezingo baituzu eragiketa desegin.\n"
"\n"
"   !! Aukera hau hautatzen baduzu, diskoko datu guztiak ezabatuko dira. !!\n"
"\n"
" * \"%s\": Aukera hau diko osoa Microsoft Windows-ek hartzen duenean\n"
" agertzen da. Aukera hau hautatzeak unitatean dagoen guztia ezabatuko du\n"
" eta berriro hasiko da hutsetik partizioak sortzen.\n"
"\n"
"   !! Aukera hau hautatzen baduzu, diskoko datu guztiak galduko dituzu. !!\n"
"\n"
" * \"%s\": Hautatu aukera hau, disko zurruna eskuz zatikatu nahi baduzu.\n"
"Kontuz ibili -- aukera ahaltsu bezain arriskutsua da, eta oso erraz gal\n"
" ditzakezu datu guztiak. Horregatik, aurretik horrelako gauzak egin "
"dituztenei\n"
" eta esperientzia dutenei bakarrik gomendatzen zaie aukera hau. DiskDrake\n"
" erabiltzeko jarraibide gehiago nahi izanez gero, irakurri ``Hasiberrien\n"
" gida''ko ``Partizioen kudeaketa''atala."

#: ../help.pm:377
#, c-format
msgid "Use existing partition"
msgstr "Erabili lehendik dagoen partizioa"

#: ../help.pm:370
#, c-format
msgid "Use the free space on the Microsoft Windows® partition"
msgstr ""

#: ../help.pm:370
#, c-format
msgid "Erase entire disk"
msgstr "Borratu disko osoa"

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:380
#, c-format
msgid ""
"There you are. Installation is now complete and your GNU/Linux system is\n"
"ready to be used. Just click on \"%s\" to reboot the system. Do not forget\n"
"to remove the installation media (CD-ROM or floppy). The first thing you\n"
"should see after your computer has finished doing its hardware tests is the\n"
"boot-loader menu, giving you the choice of which operating system to start.\n"
"\n"
"The \"%s\" button shows two more buttons to:\n"
"\n"
" * \"%s\": enables you to create an installation floppy disk which will\n"
"automatically perform a whole installation without the help of an operator,\n"
"similar to the installation you've just configured.\n"
"\n"
"   Note that two different options are available after clicking on that\n"
"button:\n"
"\n"
"    * \"%s\". This is a partially automated installation. The partitioning\n"
"step is the only interactive procedure.\n"
"\n"
"    * \"%s\". Fully automated installation: the hard disk is completely\n"
"rewritten, all data is lost.\n"
"\n"
"   This feature is very handy when installing on a number of similar\n"
"machines. See the Auto install section on our web site for more\n"
"information.\n"
"\n"
" * \"%s\"(*): saves a list of the packages selected in this installation.\n"
"To use this selection with another installation, insert the floppy and\n"
"start the installation. At the prompt, press the [F1] key, type >>linux\n"
"defcfg=\"floppy\"<< and press the [Enter] key.\n"
"\n"
"(*) You need a FAT-formatted floppy. To create one under GNU/Linux, type\n"
"\"mformat a:\", or \"fdformat /dev/fd0\" followed by \"mkfs.vfat\n"
"/dev/fd0\"."
msgstr ""
"Hortxe duzu. Instalazioa osatu da eta zure GNU/Linux sistema erabiltzeko\n"
" prest duzu. Sakatu \"%s\" sistema berrabiarazteko. Ez ahaztu instalazio\n"
" euskarria ateratzeaz (CD-ROMa edo disketea). Konputagailuak bere\n"
" hardware probak amaitutakoan ikusi beharko zenuken lehen gauza\n"
" abio-zamatzailearen menua da, zein sistema eragile abiarazi hautatzeko\n"
"aukera emanez.\n"
"\n"
"\"%s\" Botoiak bi botoi gehiago erakusten ditu:\n"
"\n"
" * \"%s\": Instalazio-diskete bat sortzeko aukera ematen dizu, "
"automatikoki,\n"
" operadore baten laguntzarik gabe instalazio oso bat egingo duena, oraintxe\n"
" konfiguratu duzun instalazioaren antzera.\n"
"\n"
"   Kontuan izan beste bi aukera daudela erabilgarri botoian klik egin "
"ostean:\n"
"\n"
"    * \"%s\". Hau instalazio erdi-automatikoa da. Zatikaketa urratsa da\n"
" prozedura interaktibo bakarra.\n"
"\n"
"    * \"%s\". Instalazio guztiz automatikoa: disko zurruna erabat "
"berridatziko\n"
" da, eta datu guztiak galduko dira.\n"
"\n"
"   Eginbide hau oso praktikoa da antzeko ordenagailu asko instalatzen\n"
"direnerako. Ikus auto-instalazioaren atala gure web gunean informazio "
"gehiago nahi izanez gero.\n"
"\n"
" * \"%s\"(*): Instalazio honetan hautatutako paketeen zerrenda gordetzen\n"
" du. Hautapen hau beste instalazio batean erabiltzeko, sartu disketea eta\n"
" abiatu instalazioa. Gonbitan, sakatu [F1] tekla eta idatzi >>linux\n"
"defcfg=\"floppy\" << eta sakatu [Sartu] tekla.\n"
"\n"
"(*) FAT-ekin eratutako diskete bat behar duzu. GNU/Linux-en bat sortzeko\n"
"idatzi \"mformat a:\", edo \"fdformat /dev/fd0\" eta ondoren \"mkfs vfat\n"
"/dev/fd0\"."

#: ../help.pm:412
#, c-format
msgid "Generate auto-install floppy"
msgstr "Sortu auto-instalazioko disketea"

#: ../help.pm:405
#, c-format
msgid "Replay"
msgstr ""

#: ../help.pm:405
#, c-format
msgid "Automated"
msgstr ""

#: ../help.pm:405
#, c-format
msgid "Save packages selection"
msgstr ""

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:408
#, fuzzy, c-format
msgid ""
"If you chose to reuse some legacy GNU/Linux partitions, you may wish to\n"
"reformat some of them and erase any data they contain. To do so, please\n"
"select those partitions as well.\n"
"\n"
"Please note that it's not necessary to reformat all pre-existing\n"
"partitions. You must reformat the partitions containing the operating\n"
"system (such as \"/\", \"/usr\" or \"/var\") but you do not have to "
"reformat\n"
"partitions containing data that you wish to keep (typically \"/home\").\n"
"\n"
"Please be careful when selecting partitions. After the formatting is\n"
"completed, all data on the selected partitions will be deleted and you\n"
"will not be able to recover it.\n"
"\n"
"Click on \"%s\" when you're ready to format the partitions.\n"
"\n"
"Click on \"%s\" if you want to choose another partition for your new\n"
"Mageia operating system installation.\n"
"\n"
"Click on \"%s\" if you wish to select partitions which will be checked for\n"
"bad blocks on the disk."
msgstr ""
"Oinordetzan hartutako zenbait GNU/Linux partizio berrerabiltzea hautatzen\n"
"baduzu, haietako batzuk berreratu eta bertako datuak ezabatu nahi izan\n"
"dezakezu. Hori egiteko, mesedez partizio horiek ere aukeratu.\n"
"\n"
"Kontuan izan ez dela beharrezkoa lehendik dauden partizio guztiak\n"
" berreratzea. Sistema eragilea gordetzen duten partizioak berreratu behar\n"
" dituzu (\"/\", \"/usr\" edo \"/var\") baino ez mantendu nahi dituzun "
"datuak\n"
" gordetzen dituzten partizioak (normalean \"/home\").\n"
"\n"
"Kontuz ibili partizioak aukeratzerakoan. Eraketa amaitu ondoren,\n"
" aukeratutako partizioetako datu guztiak ezabatu egingo dira eta ezin\n"
"izango dituzu berreskuratu.\n"
"\n"
"Klikatu \"%s\" partizioak eratzeko prest zaudenean.\n"
"\n"
"Klikatu \"%s\" Mageia sistema eragile berria instalatzeko beste "
"partizio\n"
" bat aukeratu nahi baduzu.\n"
"\n"
"Klikatu \"%s\" diskoan hondatutako blokeak aurkitzeko egiaztatuko diren\n"
" partizioak aukeratu nahi badituzu."

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:437
#, fuzzy, c-format
msgid ""
"By the time you install Mageia, it's likely that some packages will\n"
"have been updated since the initial release. Bugs may have been fixed,\n"
"security issues resolved. To allow you to benefit from these updates,\n"
"you're now able to download them from the Internet. Check \"%s\" if you\n"
"have a working Internet connection, or \"%s\" if you prefer to install\n"
"updated packages later.\n"
"\n"
"Choosing \"%s\" will display a list of web locations from which updates can\n"
"be retrieved. You should choose one near to you. A package-selection tree\n"
"will appear: review the selection, and press \"%s\" to retrieve and install\n"
"the selected package(s), or \"%s\" to abort."
msgstr ""
"Mageia instalatzen duzunerako, litekeena da pakete batzuk\n"
"hasierako argitalpenetik aldatu izana. Baliteke akatsak zuzendu eta \n"
"segurtasun arazoak konpondu izatea. Eguneratzeez baliatu ahal izan\n"
"zaitezen, orain, Internetetik jaitsi ditzakezu. Markatu \"%s\" dabilen "
"Internet\n"
"lotura badaukazu, edo \"%s\" pakete eguneratuak geroago instalatu nahi\n"
" badituzu.\n"
"\n"
"\"%s\" hautatzen baduzu, eguneratzeak eskaintzen dituzten lekuen zerrenda \n"
"azalduko zaizu. Zugandik gertu dagoen bat aukeratu behar zenuke. Pakete\n"
" hautatzeko zuhaitza agertuko da: berrikusi hautapena, eta hautatu \"%s\" \n"
"aukeratutako paketeak hartu eta instalatzeko, edo \"%s\" galerazteko."

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:450
#, fuzzy, c-format
msgid ""
"At this point, DrakX will allow you to choose the security level you desire\n"
"for your machine. As a rule of thumb, the security level should be set\n"
"higher if the machine is to contain crucial data, or if it's to be directly\n"
"exposed to the Internet. The trade-off that a higher security level is\n"
"generally obtained at the expense of ease of use.\n"
"\n"
"If you do not know what to choose, keep the default option. You'll be able\n"
"to change it later with the draksec tool, which is part of Mageia\n"
"Control Center.\n"
"\n"
"Fill the \"%s\" field with the e-mail address of the person responsible for\n"
"security. Security messages will be sent to that address."
msgstr ""
"Puntu honetan, DrakX-ek zure makinarentzako nahi duzun segurtasun maila\n"
" hautatzeko aukera emango dizu. Arau nagusi bezala, segurtasun maila\n"
"handiagoa ezarri behar da makinak ezinbesteko datuak gorde behar baditu,\n"
"edo zuzenean Interneten agerian badago. Segurtasun maila handiagoa\n"
"ezartzean, normalean erabilera erraztasuna galtzen da.\n"
"\n"
"Zer aukeratu ez badakizu, hautatu aukera lehenetsia. Gero aldatu \n"
"ahal izango duzu draksec tresnarekin, Mageia Aginte Gunearen\n"
"zati bat.\n"
"\n"
"Bete \"%s\" eremua segurtasun arduradunaren postaE helbidearekin.\n"
"Segurtasun-mezuak helbide horretara bidaliko dira."

#: ../help.pm:461
#, c-format
msgid "Security Administrator"
msgstr "Segurtasun-administratzailea"

# DO NOT BOTHER TO MODIFY HERE, SEE:
# cvs.mandriva.com:/cooker/doc/manual/literal/drakx/eu/drakx-help.xml
#: ../help.pm:464
#, fuzzy, c-format
msgid ""
"At this point, you need to choose which partition(s) will be used for the\n"
"installation of your Mageia system. If partitions have already been\n"
"defined, either from a previous installation of GNU/Linux or by another\n"
"partitioning tool, you can use existing partitions. Otherwise, hard disk drive\n"
"partitions must be defined.\n"
"\n"
"To create partitions, you must first select a hard disk drive. You can select\n"
"the disk for partitioning by clicking on ``hda'' for the first IDE drive,\n"
"``hdb'' for the second, ``sda'' for the first SCSI drive and so on.\n"
"\n"
"To partition the selected hard disk drive, you can use these options:\n"
"\n"
" * \"%s\": this option deletes all partitions on the selected hard disk drive\n"
"\n"
" * \"%s\": this option enables you to automatically create ext3 and swap\n"
"partitions in the free space of your hard disk drive\n"
"\n"
"\"%s\": gives access to additional features:\n"
"\n"
" * \"%s\": saves the partition table to a floppy. Useful for later\n"
"partition-table recovery if necessary. It is strongly recommended that you\n"
"perform this step.\n"
"\n"
" * \"%s\": allows you to restore a previously saved partition table from a\n"
"floppy disk.\n"
"\n"
" * \"%s\": if your partition table is damaged, you can try to recover it\n"
"using this option. Please be careful and remember that it does not always\n"
"work.\n"
"\n"
" * \"%s\": discards all changes and reloads the partition table that was\n"
"originally on the hard disk drive.\n"
"\n"
" * \"%s\": un-checking this option will force users to manually mount and\n"
"unmount removable media such as floppies and CD-ROMs.\n"
"\n"
" * \"%s\": use this option if you wish to use a wizard to partition your\n"
"hard disk drive. This is recommended if you do not have a good understanding of\n"
"partitioning.\n"
"\n"
" * \"%s\": use this option to cancel your changes.\n"
"\n"
" * \"%s\": allows additional actions on partitions (type, options, format)\n"
"and gives more information about the hard disk drive.\n"
"\n"
" * \"%s\": when you are finished partitioning your hard disk drive, this will\n"
"save your changes back to disk.\n"
"\n"
"When defining the size of a partition, you can finely set the partition\n"
"size by using the Arrow keys of your keyboard.\n"
"\n"
"Note: you can reach any option using the keyboard. Navigate through the\n"
"partitions using [Tab] and the [Up/Down] arrows.\n"
"\n"
"When a partition is selected, you can use:\n"
"\n"
" * Ctrl-c to create a new partition (when an empty partition is selected)\n"
"\n"
" * Ctrl-d to delete a partition\n"
"\n"
" * Ctrl-m to set the mount point\n"
"\n"
"To get information about the different filesystem types available, please\n"
"read the ext2FS chapter from the ``Reference Manual''.\n"
"\n"
"If you are installing on a PPC machine, you will want to create a small HFS\n"
"``bootstrap'' partition of at least 1MB which will be used by the yaboot\n"