From 919ba8eb3fd454d9a485bea7daf791a0858dec94 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 8 Jul 2011 20:32:12 -0400 Subject: [ticket/10003] Delete the copy of db_tools in database_update.php. PHPBB3-10003 --- phpBB/install/database_update.php | 2239 ------------------------------------- 1 file changed, 2239 deletions(-) (limited to 'phpBB/install/database_update.php') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 99928e1007..d73848c871 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -1989,2243 +1989,4 @@ function change_database_data(&$no_updates, $version) } } - -/** -* Database Tools for handling cross-db actions such as altering columns, etc. -* Currently not supported is returning SQL for creating tables. -* -* @package dbal -*/ -class updater_db_tools -{ - /** - * Current sql layer - */ - var $sql_layer = ''; - - /** - * @var object DB object - */ - var $db = NULL; - - /** - * The Column types for every database we support - * @var array - */ - var $dbms_type_map = array( - 'mysql_41' => array( - 'INT:' => 'int(%d)', - 'BINT' => 'bigint(20)', - 'UINT' => 'mediumint(8) UNSIGNED', - 'UINT:' => 'int(%d) UNSIGNED', - 'TINT:' => 'tinyint(%d)', - 'USINT' => 'smallint(4) UNSIGNED', - 'BOOL' => 'tinyint(1) UNSIGNED', - 'VCHAR' => 'varchar(255)', - 'VCHAR:' => 'varchar(%d)', - 'CHAR:' => 'char(%d)', - 'XSTEXT' => 'text', - 'XSTEXT_UNI'=> 'varchar(100)', - 'STEXT' => 'text', - 'STEXT_UNI' => 'varchar(255)', - 'TEXT' => 'text', - 'TEXT_UNI' => 'text', - 'MTEXT' => 'mediumtext', - 'MTEXT_UNI' => 'mediumtext', - 'TIMESTAMP' => 'int(11) UNSIGNED', - 'DECIMAL' => 'decimal(5,2)', - 'DECIMAL:' => 'decimal(%d,2)', - 'PDECIMAL' => 'decimal(6,3)', - 'PDECIMAL:' => 'decimal(%d,3)', - 'VCHAR_UNI' => 'varchar(255)', - 'VCHAR_UNI:'=> 'varchar(%d)', - 'VCHAR_CI' => 'varchar(255)', - 'VARBINARY' => 'varbinary(255)', - ), - - 'mysql_40' => array( - 'INT:' => 'int(%d)', - 'BINT' => 'bigint(20)', - 'UINT' => 'mediumint(8) UNSIGNED', - 'UINT:' => 'int(%d) UNSIGNED', - 'TINT:' => 'tinyint(%d)', - 'USINT' => 'smallint(4) UNSIGNED', - 'BOOL' => 'tinyint(1) UNSIGNED', - 'VCHAR' => 'varbinary(255)', - 'VCHAR:' => 'varbinary(%d)', - 'CHAR:' => 'binary(%d)', - 'XSTEXT' => 'blob', - 'XSTEXT_UNI'=> 'blob', - 'STEXT' => 'blob', - 'STEXT_UNI' => 'blob', - 'TEXT' => 'blob', - 'TEXT_UNI' => 'blob', - 'MTEXT' => 'mediumblob', - 'MTEXT_UNI' => 'mediumblob', - 'TIMESTAMP' => 'int(11) UNSIGNED', - 'DECIMAL' => 'decimal(5,2)', - 'DECIMAL:' => 'decimal(%d,2)', - 'PDECIMAL' => 'decimal(6,3)', - 'PDECIMAL:' => 'decimal(%d,3)', - 'VCHAR_UNI' => 'blob', - 'VCHAR_UNI:'=> array('varbinary(%d)', 'limit' => array('mult', 3, 255, 'blob')), - 'VCHAR_CI' => 'blob', - 'VARBINARY' => 'varbinary(255)', - ), - - 'firebird' => array( - 'INT:' => 'INTEGER', - 'BINT' => 'DOUBLE PRECISION', - 'UINT' => 'INTEGER', - 'UINT:' => 'INTEGER', - 'TINT:' => 'INTEGER', - 'USINT' => 'INTEGER', - 'BOOL' => 'INTEGER', - 'VCHAR' => 'VARCHAR(255) CHARACTER SET NONE', - 'VCHAR:' => 'VARCHAR(%d) CHARACTER SET NONE', - 'CHAR:' => 'CHAR(%d) CHARACTER SET NONE', - 'XSTEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', - 'STEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', - 'TEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', - 'MTEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', - 'XSTEXT_UNI'=> 'VARCHAR(100) CHARACTER SET UTF8', - 'STEXT_UNI' => 'VARCHAR(255) CHARACTER SET UTF8', - 'TEXT_UNI' => 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8', - 'MTEXT_UNI' => 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8', - 'TIMESTAMP' => 'INTEGER', - 'DECIMAL' => 'DOUBLE PRECISION', - 'DECIMAL:' => 'DOUBLE PRECISION', - 'PDECIMAL' => 'DOUBLE PRECISION', - 'PDECIMAL:' => 'DOUBLE PRECISION', - 'VCHAR_UNI' => 'VARCHAR(255) CHARACTER SET UTF8', - 'VCHAR_UNI:'=> 'VARCHAR(%d) CHARACTER SET UTF8', - 'VCHAR_CI' => 'VARCHAR(255) CHARACTER SET UTF8', - 'VARBINARY' => 'CHAR(255) CHARACTER SET NONE', - ), - - 'mssql' => array( - 'INT:' => '[int]', - 'BINT' => '[float]', - 'UINT' => '[int]', - 'UINT:' => '[int]', - 'TINT:' => '[int]', - 'USINT' => '[int]', - 'BOOL' => '[int]', - 'VCHAR' => '[varchar] (255)', - 'VCHAR:' => '[varchar] (%d)', - 'CHAR:' => '[char] (%d)', - 'XSTEXT' => '[varchar] (1000)', - 'STEXT' => '[varchar] (3000)', - 'TEXT' => '[varchar] (8000)', - 'MTEXT' => '[text]', - 'XSTEXT_UNI'=> '[varchar] (100)', - 'STEXT_UNI' => '[varchar] (255)', - 'TEXT_UNI' => '[varchar] (4000)', - 'MTEXT_UNI' => '[text]', - 'TIMESTAMP' => '[int]', - 'DECIMAL' => '[float]', - 'DECIMAL:' => '[float]', - 'PDECIMAL' => '[float]', - 'PDECIMAL:' => '[float]', - 'VCHAR_UNI' => '[varchar] (255)', - 'VCHAR_UNI:'=> '[varchar] (%d)', - 'VCHAR_CI' => '[varchar] (255)', - 'VARBINARY' => '[varchar] (255)', - ), - - 'mssqlnative' => array( - 'INT:' => '[int]', - 'BINT' => '[float]', - 'UINT' => '[int]', - 'UINT:' => '[int]', - 'TINT:' => '[int]', - 'USINT' => '[int]', - 'BOOL' => '[int]', - 'VCHAR' => '[varchar] (255)', - 'VCHAR:' => '[varchar] (%d)', - 'CHAR:' => '[char] (%d)', - 'XSTEXT' => '[varchar] (1000)', - 'STEXT' => '[varchar] (3000)', - 'TEXT' => '[varchar] (8000)', - 'MTEXT' => '[text]', - 'XSTEXT_UNI'=> '[varchar] (100)', - 'STEXT_UNI' => '[varchar] (255)', - 'TEXT_UNI' => '[varchar] (4000)', - 'MTEXT_UNI' => '[text]', - 'TIMESTAMP' => '[int]', - 'DECIMAL' => '[float]', - 'DECIMAL:' => '[float]', - 'PDECIMAL' => '[float]', - 'PDECIMAL:' => '[float]', - 'VCHAR_UNI' => '[varchar] (255)', - 'VCHAR_UNI:'=> '[varchar] (%d)', - 'VCHAR_CI' => '[varchar] (255)', - 'VARBINARY' => '[varchar] (255)', - ), - - 'oracle' => array( - 'INT:' => 'number(%d)', - 'BINT' => 'number(20)', - 'UINT' => 'number(8)', - 'UINT:' => 'number(%d)', - 'TINT:' => 'number(%d)', - 'USINT' => 'number(4)', - 'BOOL' => 'number(1)', - 'VCHAR' => 'varchar2(255)', - 'VCHAR:' => 'varchar2(%d)', - 'CHAR:' => 'char(%d)', - 'XSTEXT' => 'varchar2(1000)', - 'STEXT' => 'varchar2(3000)', - 'TEXT' => 'clob', - 'MTEXT' => 'clob', - 'XSTEXT_UNI'=> 'varchar2(300)', - 'STEXT_UNI' => 'varchar2(765)', - 'TEXT_UNI' => 'clob', - 'MTEXT_UNI' => 'clob', - 'TIMESTAMP' => 'number(11)', - 'DECIMAL' => 'number(5, 2)', - 'DECIMAL:' => 'number(%d, 2)', - 'PDECIMAL' => 'number(6, 3)', - 'PDECIMAL:' => 'number(%d, 3)', - 'VCHAR_UNI' => 'varchar2(765)', - 'VCHAR_UNI:'=> array('varchar2(%d)', 'limit' => array('mult', 3, 765, 'clob')), - 'VCHAR_CI' => 'varchar2(255)', - 'VARBINARY' => 'raw(255)', - ), - - 'sqlite' => array( - 'INT:' => 'int(%d)', - 'BINT' => 'bigint(20)', - 'UINT' => 'INTEGER UNSIGNED', //'mediumint(8) UNSIGNED', - 'UINT:' => 'INTEGER UNSIGNED', // 'int(%d) UNSIGNED', - 'TINT:' => 'tinyint(%d)', - 'USINT' => 'INTEGER UNSIGNED', //'mediumint(4) UNSIGNED', - 'BOOL' => 'INTEGER UNSIGNED', //'tinyint(1) UNSIGNED', - 'VCHAR' => 'varchar(255)', - 'VCHAR:' => 'varchar(%d)', - 'CHAR:' => 'char(%d)', - 'XSTEXT' => 'text(65535)', - 'STEXT' => 'text(65535)', - 'TEXT' => 'text(65535)', - 'MTEXT' => 'mediumtext(16777215)', - 'XSTEXT_UNI'=> 'text(65535)', - 'STEXT_UNI' => 'text(65535)', - 'TEXT_UNI' => 'text(65535)', - 'MTEXT_UNI' => 'mediumtext(16777215)', - 'TIMESTAMP' => 'INTEGER UNSIGNED', //'int(11) UNSIGNED', - 'DECIMAL' => 'decimal(5,2)', - 'DECIMAL:' => 'decimal(%d,2)', - 'PDECIMAL' => 'decimal(6,3)', - 'PDECIMAL:' => 'decimal(%d,3)', - 'VCHAR_UNI' => 'varchar(255)', - 'VCHAR_UNI:'=> 'varchar(%d)', - 'VCHAR_CI' => 'varchar(255)', - 'VARBINARY' => 'blob', - ), - - 'postgres' => array( - 'INT:' => 'INT4', - 'BINT' => 'INT8', - 'UINT' => 'INT4', // unsigned - 'UINT:' => 'INT4', // unsigned - 'USINT' => 'INT2', // unsigned - 'BOOL' => 'INT2', // unsigned - 'TINT:' => 'INT2', - 'VCHAR' => 'varchar(255)', - 'VCHAR:' => 'varchar(%d)', - 'CHAR:' => 'char(%d)', - 'XSTEXT' => 'varchar(1000)', - 'STEXT' => 'varchar(3000)', - 'TEXT' => 'varchar(8000)', - 'MTEXT' => 'TEXT', - 'XSTEXT_UNI'=> 'varchar(100)', - 'STEXT_UNI' => 'varchar(255)', - 'TEXT_UNI' => 'varchar(4000)', - 'MTEXT_UNI' => 'TEXT', - 'TIMESTAMP' => 'INT4', // unsigned - 'DECIMAL' => 'decimal(5,2)', - 'DECIMAL:' => 'decimal(%d,2)', - 'PDECIMAL' => 'decimal(6,3)', - 'PDECIMAL:' => 'decimal(%d,3)', - 'VCHAR_UNI' => 'varchar(255)', - 'VCHAR_UNI:'=> 'varchar(%d)', - 'VCHAR_CI' => 'varchar_ci', - 'VARBINARY' => 'bytea', - ), - ); - - /** - * A list of types being unsigned for better reference in some db's - * @var array - */ - var $unsigned_types = array('UINT', 'UINT:', 'USINT', 'BOOL', 'TIMESTAMP'); - - /** - * A list of supported DBMS. We change this class to support more DBMS, the DBMS itself only need to follow some rules. - * @var array - */ - var $supported_dbms = array('firebird', 'mssql', 'mssqlnative', 'mysql_40', 'mysql_41', 'oracle', 'postgres', 'sqlite'); - - /** - * This is set to true if user only wants to return the 'to-be-executed' SQL statement(s) (as an array). - * This mode has no effect on some methods (inserting of data for example). This is expressed within the methods command. - */ - var $return_statements = false; - - /** - * Constructor. Set DB Object and set {@link $return_statements return_statements}. - * - * @param phpbb_dbal $db DBAL object - * @param bool $return_statements True if only statements should be returned and no SQL being executed - */ - function updater_db_tools(&$db, $return_statements = false) - { - $this->db = $db; - $this->return_statements = $return_statements; - - // Determine mapping database type - switch ($this->db->sql_layer) - { - case 'mysql': - $this->sql_layer = 'mysql_40'; - break; - - case 'mysql4': - if (version_compare($this->db->sql_server_info(true), '4.1.3', '>=')) - { - $this->sql_layer = 'mysql_41'; - } - else - { - $this->sql_layer = 'mysql_40'; - } - break; - - case 'mysqli': - $this->sql_layer = 'mysql_41'; - break; - - case 'mssql': - case 'mssql_odbc': - $this->sql_layer = 'mssql'; - break; - - case 'mssqlnative': - $this->sql_layer = 'mssqlnative'; - break; - - default: - $this->sql_layer = $this->db->sql_layer; - break; - } - } - - /** - * Check if table exists - * - * - * @param string $table_name The table name to check for - * @return bool true if table exists, else false - */ - function sql_table_exists($table_name) - { - $this->db->sql_return_on_error(true); - $result = $this->db->sql_query_limit('SELECT * FROM ' . $table_name, 1); - $this->db->sql_return_on_error(false); - - if ($result) - { - $this->db->sql_freeresult($result); - return true; - } - - return false; - } - - /** - * Create SQL Table - * - * @param string $table_name The table name to create - * @param array $table_data Array containing table data. - * @return array Statements if $return_statements is true. - */ - function sql_create_table($table_name, $table_data) - { - // holds the DDL for a column - $columns = $statements = array(); - - if ($this->sql_table_exists($table_name)) - { - return $this->_sql_run_sql($statements); - } - - // Begin transaction - $statements[] = 'begin'; - - // Determine if we have created a PRIMARY KEY in the earliest - $primary_key_gen = false; - - // Determine if the table must be created with TEXTIMAGE - $create_textimage = false; - - // Determine if the table requires a sequence - $create_sequence = false; - - // Begin table sql statement - switch ($this->sql_layer) - { - case 'mssql': - case 'mssqlnative': - $table_sql = 'CREATE TABLE [' . $table_name . '] (' . "\n"; - break; - - default: - $table_sql = 'CREATE TABLE ' . $table_name . ' (' . "\n"; - break; - } - - // Iterate through the columns to create a table - foreach ($table_data['COLUMNS'] as $column_name => $column_data) - { - // here lies an array, filled with information compiled on the column's data - $prepared_column = $this->sql_prepare_column_data($table_name, $column_name, $column_data); - - if (isset($prepared_column['auto_increment']) && strlen($column_name) > 26) // "${column_name}_gen" - { - trigger_error("Index name '${column_name}_gen' on table '$table_name' is too long. The maximum auto increment column length is 26 characters.", E_USER_ERROR); - } - - // here we add the definition of the new column to the list of columns - switch ($this->sql_layer) - { - case 'mssql': - case 'mssqlnative': - $columns[] = "\t [{$column_name}] " . $prepared_column['column_type_sql_default']; - break; - - default: - $columns[] = "\t {$column_name} " . $prepared_column['column_type_sql']; - break; - } - - // see if we have found a primary key set due to a column definition if we have found it, we can stop looking - if (!$primary_key_gen) - { - $primary_key_gen = isset($prepared_column['primary_key_set']) && $prepared_column['primary_key_set']; - } - - // create textimage DDL based off of the existance of certain column types - if (!$create_textimage) - { - $create_textimage = isset($prepared_column['textimage']) && $prepared_column['textimage']; - } - - // create sequence DDL based off of the existance of auto incrementing columns - if (!$create_sequence && isset($prepared_column['auto_increment']) && $prepared_column['auto_increment']) - { - $create_sequence = $column_name; - } - } - - // this makes up all the columns in the create table statement - $table_sql .= implode(",\n", $columns); - - // Close the table for two DBMS and add to the statements - switch ($this->sql_layer) - { - case 'firebird': - $table_sql .= "\n);"; - $statements[] = $table_sql; - break; - - case 'mssql': - case 'mssqlnative': - $table_sql .= "\n) ON [PRIMARY]" . (($create_textimage) ? ' TEXTIMAGE_ON [PRIMARY]' : ''); - $statements[] = $table_sql; - break; - } - - // we have yet to create a primary key for this table, - // this means that we can add the one we really wanted instead - if (!$primary_key_gen) - { - // Write primary key - if (isset($table_data['PRIMARY_KEY'])) - { - if (!is_array($table_data['PRIMARY_KEY'])) - { - $table_data['PRIMARY_KEY'] = array($table_data['PRIMARY_KEY']); - } - - switch ($this->sql_layer) - { - case 'mysql_40': - case 'mysql_41': - case 'postgres': - case 'sqlite': - $table_sql .= ",\n\t PRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . ')'; - break; - - case 'firebird': - case 'mssql': - case 'mssqlnative': - // We need the data here - $old_return_statements = $this->return_statements; - $this->return_statements = true; - - $primary_key_stmts = $this->sql_create_primary_key($table_name, $table_data['PRIMARY_KEY']); - foreach ($primary_key_stmts as $pk_stmt) - { - $statements[] = $pk_stmt; - } - - $this->return_statements = $old_return_statements; - break; - - case 'oracle': - $table_sql .= ",\n\t CONSTRAINT pk_{$table_name} PRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . ')'; - break; - } - } - } - - // close the table - switch ($this->sql_layer) - { - case 'mysql_41': - // make sure the table is in UTF-8 mode - $table_sql .= "\n) CHARACTER SET `utf8` COLLATE `utf8_bin`;"; - $statements[] = $table_sql; - break; - - case 'mysql_40': - case 'sqlite': - $table_sql .= "\n);"; - $statements[] = $table_sql; - break; - - case 'postgres': - // do we need to add a sequence for auto incrementing columns? - if ($create_sequence) - { - $statements[] = "CREATE SEQUENCE {$table_name}_seq;"; - } - - $table_sql .= "\n);"; - $statements[] = $table_sql; - break; - - case 'oracle': - $table_sql .= "\n)"; - $statements[] = $table_sql; - - // do we need to add a sequence and a tigger for auto incrementing columns? - if ($create_sequence) - { - // create the actual sequence - $statements[] = "CREATE SEQUENCE {$table_name}_seq"; - - // the trigger is the mechanism by which we increment the counter - $trigger = "CREATE OR REPLACE TRIGGER t_{$table_name}\n"; - $trigger .= "BEFORE INSERT ON {$table_name}\n"; - $trigger .= "FOR EACH ROW WHEN (\n"; - $trigger .= "\tnew.{$create_sequence} IS NULL OR new.{$create_sequence} = 0\n"; - $trigger .= ")\n"; - $trigger .= "BEGIN\n"; - $trigger .= "\tSELECT {$table_name}_seq.nextval\n"; - $trigger .= "\tINTO :new.{$create_sequence}\n"; - $trigger .= "\tFROM dual;\n"; - $trigger .= "END;"; - - $statements[] = $trigger; - } - break; - - case 'firebird': - if ($create_sequence) - { - $statements[] = "CREATE GENERATOR {$table_name}_gen;"; - $statements[] = "SET GENERATOR {$table_name}_gen TO 0;"; - - $trigger = "CREATE TRIGGER t_$table_name FOR $table_name\n"; - $trigger .= "BEFORE INSERT\nAS\nBEGIN\n"; - $trigger .= "\tNEW.{$create_sequence} = GEN_ID({$table_name}_gen, 1);\nEND;"; - $statements[] = $trigger; - } - break; - } - - // Write Keys - if (isset($table_data['KEYS'])) - { - foreach ($table_data['KEYS'] as $key_name => $key_data) - { - if (!is_array($key_data[1])) - { - $key_data[1] = array($key_data[1]); - } - - $old_return_statements = $this->return_statements; - $this->return_statements = true; - - $key_stmts = ($key_data[0] == 'UNIQUE') ? $this->sql_create_unique_index($table_name, $key_name, $key_data[1]) : $this->sql_create_index($table_name, $key_name, $key_data[1]); - - foreach ($key_stmts as $key_stmt) - { - $statements[] = $key_stmt; - } - - $this->return_statements = $old_return_statements; - } - } - - // Commit Transaction - $statements[] = 'commit'; - - return $this->_sql_run_sql($statements); - } - - /** - * Handle passed database update array. - * Expected structure... - * Key being one of the following - * change_columns: Column changes (only type, not name) - * add_columns: Add columns to a table - * drop_keys: Dropping keys - * drop_columns: Removing/Dropping columns - * add_primary_keys: adding primary keys - * add_unique_index: adding an unique index - * add_index: adding an index (can be column:index_size if you need to provide size) - * - * The values are in this format: - * {TABLE NAME} => array( - * {COLUMN NAME} => array({COLUMN TYPE}, {DEFAULT VALUE}, {OPTIONAL VARIABLES}), - * {KEY/INDEX NAME} => array({COLUMN NAMES}), - * ) - * - * For more information have a look at /develop/create_schema_files.php (only available through SVN) - */ - function perform_schema_changes($schema_changes) - { - if (empty($schema_changes)) - { - return; - } - - $statements = array(); - $sqlite = false; - - // For SQLite we need to perform the schema changes in a much more different way - if ($this->db->sql_layer == 'sqlite' && $this->return_statements) - { - $sqlite_data = array(); - $sqlite = true; - } - - // Add tables? - if (!empty($schema_changes['add_tables'])) - { - foreach ($schema_changes['add_tables'] as $table => $table_data) - { - $result = $this->sql_create_table($table, $table_data); - if ($this->return_statements) - { - $statements = array_merge($statements, $result); - } - } - } - - // Change columns? - if (!empty($schema_changes['change_columns'])) - { - foreach ($schema_changes['change_columns'] as $table => $columns) - { - foreach ($columns as $column_name => $column_data) - { - // If the column exists we change it, else we add it ;) - if ($column_exists = $this->sql_column_exists($table, $column_name)) - { - $result = $this->sql_column_change($table, $column_name, $column_data, true); - } - else - { - $result = $this->sql_column_add($table, $column_name, $column_data, true); - } - - if ($sqlite) - { - if ($column_exists) - { - $sqlite_data[$table]['change_columns'][] = $result; - } - else - { - $sqlite_data[$table]['add_columns'][] = $result; - } - } - else if ($this->return_statements) - { - $statements = array_merge($statements, $result); - } - } - } - } - - // Add columns? - if (!empty($schema_changes['add_columns'])) - { - foreach ($schema_changes['add_columns'] as $table => $columns) - { - foreach ($columns as $column_name => $column_data) - { - // Only add the column if it does not exist yet - if ($column_exists = $this->sql_column_exists($table, $column_name)) - { - continue; - // This is commented out here because it can take tremendous time on updates -// $result = $this->sql_column_change($table, $column_name, $column_data, true); - } - else - { - $result = $this->sql_column_add($table, $column_name, $column_data, true); - } - - if ($sqlite) - { - if ($column_exists) - { - continue; -// $sqlite_data[$table]['change_columns'][] = $result; - } - else - { - $sqlite_data[$table]['add_columns'][] = $result; - } - } - else if ($this->return_statements) - { - $statements = array_merge($statements, $result); - } - } - } - } - - // Remove keys? - if (!empty($schema_changes['drop_keys'])) - { - foreach ($schema_changes['drop_keys'] as $table => $indexes) - { - foreach ($indexes as $index_name) - { - if (!$this->sql_index_exists($table, $index_name)) - { - continue; - } - - $result = $this->sql_index_drop($table, $index_name); - - if ($this->return_statements) - { - $statements = array_merge($statements, $result); - } - } - } - } - - // Drop columns? - if (!empty($schema_changes['drop_columns'])) - { - foreach ($schema_changes['drop_columns'] as $table => $columns) - { - foreach ($columns as $column) - { - // Only remove the column if it exists... - if ($this->sql_column_exists($table, $column)) - { - $result = $this->sql_column_remove($table, $column, true); - - if ($sqlite) - { - $sqlite_data[$table]['drop_columns'][] = $result; - } - else if ($this->return_statements) - { - $statements = array_merge($statements, $result); - } - } - } - } - } - - // Add primary keys? - if (!empty($schema_changes['add_primary_keys'])) - { - foreach ($schema_changes['add_primary_keys'] as $table => $columns) - { - $result = $this->sql_create_primary_key($table, $columns, true); - - if ($sqlite) - { - $sqlite_data[$table]['primary_key'] = $result; - } - else if ($this->return_statements) - { - $statements = array_merge($statements, $result); - } - } - } - - // Add unqiue indexes? - if (!empty($schema_changes['add_unique_index'])) - { - foreach ($schema_changes['add_unique_index'] as $table => $index_array) - { - foreach ($index_array as $index_name => $column) - { - if ($this->sql_unique_index_exists($table, $index_name)) - { - continue; - } - - $result = $this->sql_create_unique_index($table, $index_name, $column); - - if ($this->return_statements) - { - $statements = array_merge($statements, $result); - } - } - } - } - - // Add indexes? - if (!empty($schema_changes['add_index'])) - { - foreach ($schema_changes['add_index'] as $table => $index_array) - { - foreach ($index_array as $index_name => $column) - { - if ($this->sql_index_exists($table, $index_name)) - { - continue; - } - - $result = $this->sql_create_index($table, $index_name, $column); - - if ($this->return_statements) - { - $statements = array_merge($statements, $result); - } - } - } - } - - if ($sqlite) - { - foreach ($sqlite_data as $table_name => $sql_schema_changes) - { - // Create temporary table with original data - $statements[] = 'begin'; - - $sql = "SELECT sql - FROM sqlite_master - WHERE type = 'table' - AND name = '{$table_name}' - ORDER BY type DESC, name;"; - $result = $this->db->sql_query($sql); - - if (!$result) - { - continue; - } - - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); - - // Create a backup table and populate it, destroy the existing one - $statements[] = preg_replace('#CREATE\s+TABLE\s+"?' . $table_name . '"?#i', 'CREATE TEMPORARY TABLE ' . $table_name . '_temp', $row['sql']); - $statements[] = 'INSERT INTO ' . $table_name . '_temp SELECT * FROM ' . $table_name; - $statements[] = 'DROP TABLE ' . $table_name; - - // Get the columns... - preg_match('#\((.*)\)#s', $row['sql'], $matches); - - $plain_table_cols = trim($matches[1]); - $new_table_cols = preg_split('/,(?![\s\w]+\))/m', $plain_table_cols); - $column_list = array(); - - foreach ($new_table_cols as $declaration) - { - $entities = preg_split('#\s+#', trim($declaration)); - if ($entities[0] == 'PRIMARY') - { - continue; - } - $column_list[] = $entities[0]; - } - - // note down the primary key notation because sqlite only supports adding it to the end for the new table - $primary_key = false; - $_new_cols = array(); - - foreach ($new_table_cols as $key => $declaration) - { - $entities = preg_split('#\s+#', trim($declaration)); - if ($entities[0] == 'PRIMARY') - { - $primary_key = $declaration; - continue; - } - $_new_cols[] = $declaration; - } - - $new_table_cols = $_new_cols; - - // First of all... change columns - if (!empty($sql_schema_changes['change_columns'])) - { - foreach ($sql_schema_changes['change_columns'] as $column_sql) - { - foreach ($new_table_cols as $key => $declaration) - { - $entities = preg_split('#\s+#', trim($declaration)); - if (strpos($column_sql, $entities[0] . ' ') === 0) - { - $new_table_cols[$key] = $column_sql; - } - } - } - } - - if (!empty($sql_schema_changes['add_columns'])) - { - foreach ($sql_schema_changes['add_columns'] as $column_sql) - { - $new_table_cols[] = $column_sql; - } - } - - // Now drop them... - if (!empty($sql_schema_changes['drop_columns'])) - { - foreach ($sql_schema_changes['drop_columns'] as $column_name) - { - // Remove from column list... - $new_column_list = array(); - foreach ($column_list as $key => $value) - { - if ($value === $column_name) - { - continue; - } - - $new_column_list[] = $value; - } - - $column_list = $new_column_list; - - // Remove from table... - $_new_cols = array(); - foreach ($new_table_cols as $key => $declaration) - { - $entities = preg_split('#\s+#', trim($declaration)); - if (strpos($column_name . ' ', $entities[0] . ' ') === 0) - { - continue; - } - $_new_cols[] = $declaration; - } - $new_table_cols = $_new_cols; - } - } - - // Primary key... - if (!empty($sql_schema_changes['primary_key'])) - { - $new_table_cols[] = 'PRIMARY KEY (' . implode(', ', $sql_schema_changes['primary_key']) . ')'; - } - // Add a new one or the old primary key - else if ($primary_key !== false) - { - $new_table_cols[] = $primary_key; - } - - $columns = implode(',', $column_list); - - // create a new table and fill it up. destroy the temp one - $statements[] = 'CREATE TABLE ' . $table_name . ' (' . implode(',', $new_table_cols) . ');'; - $statements[] = 'INSERT INTO ' . $table_name . ' (' . $columns . ') SELECT ' . $columns . ' FROM ' . $table_name . '_temp;'; - $statements[] = 'DROP TABLE ' . $table_name . '_temp'; - - $statements[] = 'commit'; - } - } - - if ($this->return_statements) - { - return $statements; - } - } - - /** - * Check if a specified column exist - * - * @param string $table Table to check the column at - * @param string $column_name The column to check - * - * @return bool True if column exists, else false - */ - function sql_column_exists($table, $column_name) - { - switch ($this->sql_layer) - { - case 'mysql_40': - case 'mysql_41': - - $sql = "SHOW COLUMNS FROM $table"; - $result = $this->db->sql_query($sql); - - while ($row = $this->db->sql_fetchrow($result)) - { - // lower case just in case - if (strtolower($row['Field']) == $column_name) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - return false; - break; - - // PostgreSQL has a way of doing this in a much simpler way but would - // not allow us to support all versions of PostgreSQL - case 'postgres': - $sql = "SELECT a.attname - FROM pg_class c, pg_attribute a - WHERE c.relname = '{$table}' - AND a.attnum > 0 - AND a.attrelid = c.oid"; - $result = $this->db->sql_query($sql); - while ($row = $this->db->sql_fetchrow($result)) - { - // lower case just in case - if (strtolower($row['attname']) == $column_name) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - - return false; - break; - - // same deal with PostgreSQL, we must perform more complex operations than - // we technically could - case 'mssql': - case 'mssqlnative': - $sql = "SELECT c.name - FROM syscolumns c - LEFT JOIN sysobjects o ON c.id = o.id - WHERE o.name = '{$table}'"; - $result = $this->db->sql_query($sql); - while ($row = $this->db->sql_fetchrow($result)) - { - // lower case just in case - if (strtolower($row['name']) == $column_name) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - return false; - break; - - case 'oracle': - $sql = "SELECT column_name - FROM user_tab_columns - WHERE LOWER(table_name) = '" . strtolower($table) . "'"; - $result = $this->db->sql_query($sql); - while ($row = $this->db->sql_fetchrow($result)) - { - // lower case just in case - if (strtolower($row['column_name']) == $column_name) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - return false; - break; - - case 'firebird': - $sql = "SELECT RDB\$FIELD_NAME as FNAME - FROM RDB\$RELATION_FIELDS - WHERE RDB\$RELATION_NAME = '" . strtoupper($table) . "'"; - $result = $this->db->sql_query($sql); - while ($row = $this->db->sql_fetchrow($result)) - { - // lower case just in case - if (strtolower($row['fname']) == $column_name) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - return false; - break; - - // ugh, SQLite - case 'sqlite': - $sql = "SELECT sql - FROM sqlite_master - WHERE type = 'table' - AND name = '{$table}'"; - $result = $this->db->sql_query($sql); - - if (!$result) - { - return false; - } - - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); - - preg_match('#\((.*)\)#s', $row['sql'], $matches); - - $cols = trim($matches[1]); - $col_array = preg_split('/,(?![\s\w]+\))/m', $cols); - - foreach ($col_array as $declaration) - { - $entities = preg_split('#\s+#', trim($declaration)); - if ($entities[0] == 'PRIMARY') - { - continue; - } - - if (strtolower($entities[0]) == $column_name) - { - return true; - } - } - return false; - break; - } - } - - /** - * Check if a specified index exists in table. Does not return PRIMARY KEY and UNIQUE indexes. - * - * @param string $table_name Table to check the index at - * @param string $index_name The index name to check - * - * @return bool True if index exists, else false - */ - function sql_index_exists($table_name, $index_name) - { - if ($this->sql_layer == 'mssql' || $this->sql_layer == 'mssqlnative') - { - $sql = "EXEC sp_statistics '$table_name'"; - $result = $this->db->sql_query($sql); - - while ($row = $this->db->sql_fetchrow($result)) - { - if ($row['TYPE'] == 3) - { - if (strtolower($row['INDEX_NAME']) == strtolower($index_name)) - { - $this->db->sql_freeresult($result); - return true; - } - } - } - $this->db->sql_freeresult($result); - - return false; - } - - switch ($this->sql_layer) - { - case 'firebird': - $sql = "SELECT LOWER(RDB\$INDEX_NAME) as index_name - FROM RDB\$INDICES - WHERE RDB\$RELATION_NAME = '" . strtoupper($table_name) . "' - AND RDB\$UNIQUE_FLAG IS NULL - AND RDB\$FOREIGN_KEY IS NULL"; - $col = 'index_name'; - break; - - case 'postgres': - $sql = "SELECT ic.relname as index_name - FROM pg_class bc, pg_class ic, pg_index i - WHERE (bc.oid = i.indrelid) - AND (ic.oid = i.indexrelid) - AND (bc.relname = '" . $table_name . "') - AND (i.indisunique != 't') - AND (i.indisprimary != 't')"; - $col = 'index_name'; - break; - - case 'mysql_40': - case 'mysql_41': - $sql = 'SHOW KEYS - FROM ' . $table_name; - $col = 'Key_name'; - break; - - case 'oracle': - $sql = "SELECT index_name - FROM user_indexes - WHERE table_name = '" . strtoupper($table_name) . "' - AND generated = 'N' - AND uniqueness = 'NONUNIQUE'"; - $col = 'index_name'; - break; - - case 'sqlite': - $sql = "PRAGMA index_list('" . $table_name . "');"; - $col = 'name'; - break; - } - - $result = $this->db->sql_query($sql); - while ($row = $this->db->sql_fetchrow($result)) - { - if (($this->sql_layer == 'mysql_40' || $this->sql_layer == 'mysql_41') && !$row['Non_unique']) - { - continue; - } - - // These DBMS prefix index name with the table name - switch ($this->sql_layer) - { - case 'firebird': - case 'oracle': - case 'postgres': - case 'sqlite': - $row[$col] = substr($row[$col], strlen($table_name) + 1); - break; - } - - if (strtolower($row[$col]) == strtolower($index_name)) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - - return false; - } - - /** - * Check if a specified UNIQUE index exists in table. - * - * @param string $table_name Table to check the index at - * @param string $index_name The index name to check - * - * @return bool True if index exists, else false - */ - function sql_unique_index_exists($table_name, $index_name) - { - if ($this->sql_layer == 'mssql' || $this->sql_layer == 'mssqlnative') - { - $sql = "EXEC sp_statistics '$table_name'"; - $result = $this->db->sql_query($sql); - - while ($row = $this->db->sql_fetchrow($result)) - { - // Usually NON_UNIQUE is the column we want to check, but we allow for both - if ($row['TYPE'] == 3) - { - if (strtolower($row['INDEX_NAME']) == strtolower($index_name)) - { - $this->db->sql_freeresult($result); - return true; - } - } - } - $this->db->sql_freeresult($result); - return false; - } - - switch ($this->sql_layer) - { - case 'firebird': - $sql = "SELECT LOWER(RDB\$INDEX_NAME) as index_name - FROM RDB\$INDICES - WHERE RDB\$RELATION_NAME = '" . strtoupper($table_name) . "' - AND RDB\$UNIQUE_FLAG IS NOT NULL - AND RDB\$FOREIGN_KEY IS NULL"; - $col = 'index_name'; - break; - - case 'postgres': - $sql = "SELECT ic.relname as index_name, i.indisunique - FROM pg_class bc, pg_class ic, pg_index i - WHERE (bc.oid = i.indrelid) - AND (ic.oid = i.indexrelid) - AND (bc.relname = '" . $table_name . "') - AND (i.indisprimary != 't')"; - $col = 'index_name'; - break; - - case 'mysql_40': - case 'mysql_41': - $sql = 'SHOW KEYS - FROM ' . $table_name; - $col = 'Key_name'; - break; - - case 'oracle': - $sql = "SELECT index_name, table_owner - FROM user_indexes - WHERE table_name = '" . strtoupper($table_name) . "' - AND generated = 'N' - AND uniqueness = 'UNIQUE'"; - $col = 'index_name'; - break; - - case 'sqlite': - $sql = "PRAGMA index_list('" . $table_name . "');"; - $col = 'name'; - break; - } - - $result = $this->db->sql_query($sql); - while ($row = $this->db->sql_fetchrow($result)) - { - if (($this->sql_layer == 'mysql_40' || $this->sql_layer == 'mysql_41') && ($row['Non_unique'] || $row[$col] == 'PRIMARY')) - { - continue; - } - - if ($this->sql_layer == 'sqlite' && !$row['unique']) - { - continue; - } - - if ($this->sql_layer == 'postgres' && $row['indisunique'] != 't') - { - continue; - } - - // These DBMS prefix index name with the table name - switch ($this->sql_layer) - { - case 'oracle': - // Two cases here... prefixed with U_[table_owner] and not prefixed with table_name - if (strpos($row[$col], 'U_') === 0) - { - $row[$col] = substr($row[$col], strlen('U_' . $row['table_owner']) + 1); - } - else if (strpos($row[$col], strtoupper($table_name)) === 0) - { - $row[$col] = substr($row[$col], strlen($table_name) + 1); - } - break; - - case 'firebird': - case 'postgres': - case 'sqlite': - $row[$col] = substr($row[$col], strlen($table_name) + 1); - break; - } - - if (strtolower($row[$col]) == strtolower($index_name)) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - - return false; - } - - /** - * Private method for performing sql statements (either execute them or return them) - * @access private - */ - function _sql_run_sql($statements) - { - if ($this->return_statements) - { - return $statements; - } - - // We could add error handling here... - foreach ($statements as $sql) - { - if ($sql === 'begin') - { - $this->db->sql_transaction('begin'); - } - else if ($sql === 'commit') - { - $this->db->sql_transaction('commit'); - } - else - { - $this->db->sql_query($sql); - } - } - - return true; - } - - /** - * Function to prepare some column information for better usage - * @access private - */ - function sql_prepare_column_data($table_name, $column_name, $column_data) - { - if (strlen($column_name) > 30) - { - trigger_error("Column name '$column_name' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR); - } - - // Get type - if (strpos($column_data[0], ':') !== false) - { - list($orig_column_type, $column_length) = explode(':', $column_data[0]); - if (!is_array($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'])) - { - $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'], $column_length); - } - else - { - if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'])) - { - switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][0]) - { - case 'div': - $column_length /= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][1]; - $column_length = ceil($column_length); - $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length); - break; - } - } - - if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'])) - { - switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][0]) - { - case 'mult': - $column_length *= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][1]; - if ($column_length > $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][2]) - { - $column_type = $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][3]; - } - else - { - $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length); - } - break; - } - } - } - $orig_column_type .= ':'; - } - else - { - $orig_column_type = $column_data[0]; - $column_type = $this->dbms_type_map[$this->sql_layer][$column_data[0]]; - } - - // Adjust default value if db-dependant specified - if (is_array($column_data[1])) - { - $column_data[1] = (isset($column_data[1][$this->sql_layer])) ? $column_data[1][$this->sql_layer] : $column_data[1]['default']; - } - - $sql = ''; - - $return_array = array(); - - switch ($this->sql_layer) - { - case 'firebird': - $sql .= " {$column_type} "; - $return_array['column_type_sql_type'] = " {$column_type} "; - - if (!is_null($column_data[1])) - { - $sql .= 'DEFAULT ' . ((is_numeric($column_data[1])) ? $column_data[1] : "'{$column_data[1]}'") . ' '; - $return_array['column_type_sql_default'] = ((is_numeric($column_data[1])) ? $column_data[1] : "'{$column_data[1]}'") . ' '; - } - - $sql .= 'NOT NULL'; - - // This is a UNICODE column and thus should be given it's fair share - if (preg_match('/^X?STEXT_UNI|VCHAR_(CI|UNI:?)/', $column_data[0])) - { - $sql .= ' COLLATE UNICODE'; - } - - $return_array['auto_increment'] = false; - if (isset($column_data[2]) && $column_data[2] == 'auto_increment') - { - $return_array['auto_increment'] = true; - } - - break; - - case 'mssql': - case 'mssqlnative': - $sql .= " {$column_type} "; - $sql_default = " {$column_type} "; - - // For adding columns we need the default definition - if (!is_null($column_data[1])) - { - // For hexadecimal values do not use single quotes - if (strpos($column_data[1], '0x') === 0) - { - $return_array['default'] = 'DEFAULT (' . $column_data[1] . ') '; - $sql_default .= $return_array['default']; - } - else - { - $return_array['default'] = 'DEFAULT (' . ((is_numeric($column_data[1])) ? $column_data[1] : "'{$column_data[1]}'") . ') '; - $sql_default .= $return_array['default']; - } - } - - if (isset($column_data[2]) && $column_data[2] == 'auto_increment') - { -// $sql .= 'IDENTITY (1, 1) '; - $sql_default .= 'IDENTITY (1, 1) '; - } - - $return_array['textimage'] = $column_type === '[text]'; - - $sql .= 'NOT NULL'; - $sql_default .= 'NOT NULL'; - - $return_array['column_type_sql_default'] = $sql_default; - - break; - - case 'mysql_40': - case 'mysql_41': - $sql .= " {$column_type} "; - - // For hexadecimal values do not use single quotes - if (!is_null($column_data[1]) && substr($column_type, -4) !== 'text' && substr($column_type, -4) !== 'blob') - { - $sql .= (strpos($column_data[1], '0x') === 0) ? "DEFAULT {$column_data[1]} " : "DEFAULT '{$column_data[1]}' "; - } - $sql .= 'NOT NULL'; - - if (isset($column_data[2])) - { - if ($column_data[2] == 'auto_increment') - { - $sql .= ' auto_increment'; - } - else if ($this->sql_layer === 'mysql_41' && $column_data[2] == 'true_sort') - { - $sql .= ' COLLATE utf8_unicode_ci'; - } - } - - break; - - case 'oracle': - $sql .= " {$column_type} "; - $sql .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}' " : ''; - - // In Oracle empty strings ('') are treated as NULL. - // Therefore in oracle we allow NULL's for all DEFAULT '' entries - // Oracle does not like setting NOT NULL on a column that is already NOT NULL (this happens only on number fields) - if (!preg_match('/number/i', $column_type)) - { - $sql .= ($column_data[1] === '') ? '' : 'NOT NULL'; - } - - $return_array['auto_increment'] = false; - if (isset($column_data[2]) && $column_data[2] == 'auto_increment') - { - $return_array['auto_increment'] = true; - } - - break; - - case 'postgres': - $return_array['column_type'] = $column_type; - - $sql .= " {$column_type} "; - - $return_array['auto_increment'] = false; - if (isset($column_data[2]) && $column_data[2] == 'auto_increment') - { - $default_val = "nextval('{$table_name}_seq')"; - $return_array['auto_increment'] = true; - } - else if (!is_null($column_data[1])) - { - $default_val = "'" . $column_data[1] . "'"; - $return_array['null'] = 'NOT NULL'; - $sql .= 'NOT NULL '; - } - - $return_array['default'] = $default_val; - - $sql .= "DEFAULT {$default_val}"; - - // Unsigned? Then add a CHECK contraint - if (in_array($orig_column_type, $this->unsigned_types)) - { - $return_array['constraint'] = "CHECK ({$column_name} >= 0)"; - $sql .= " CHECK ({$column_name} >= 0)"; - } - - break; - - case 'sqlite': - $return_array['primary_key_set'] = false; - if (isset($column_data[2]) && $column_data[2] == 'auto_increment') - { - $sql .= ' INTEGER PRIMARY KEY'; - $return_array['primary_key_set'] = true; - } - else - { - $sql .= ' ' . $column_type; - } - - $sql .= ' NOT NULL '; - $sql .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}'" : ''; - - break; - } - - $return_array['column_type_sql'] = $sql; - - return $return_array; - } - - /** - * Add new column - */ - function sql_column_add($table_name, $column_name, $column_data, $inline = false) - { - $column_data = $this->sql_prepare_column_data($table_name, $column_name, $column_data); - $statements = array(); - - switch ($this->sql_layer) - { - case 'firebird': - // Does not support AFTER statement, only POSITION (and there you need the column position) - $statements[] = 'ALTER TABLE ' . $table_name . ' ADD "' . strtoupper($column_name) . '" ' . $column_data['column_type_sql']; - break; - - case 'mssql': - case 'mssqlnative': - // Does not support AFTER, only through temporary table - $statements[] = 'ALTER TABLE [' . $table_name . '] ADD [' . $column_name . '] ' . $column_data['column_type_sql_default']; - break; - - case 'mysql_40': - case 'mysql_41': - $after = (!empty($column_data['after'])) ? ' AFTER ' . $column_data['after'] : ''; - $statements[] = 'ALTER TABLE `' . $table_name . '` ADD COLUMN `' . $column_name . '` ' . $column_data['column_type_sql'] . $after; - break; - - case 'oracle': - // Does not support AFTER, only through temporary table - $statements[] = 'ALTER TABLE ' . $table_name . ' ADD ' . $column_name . ' ' . $column_data['column_type_sql']; - break; - - case 'postgres': - // Does not support AFTER, only through temporary table - - if (version_compare($this->db->sql_server_info(true), '8.0', '>=')) - { - $statements[] = 'ALTER TABLE ' . $table_name . ' ADD COLUMN "' . $column_name . '" ' . $column_data['column_type_sql']; - } - else - { - // old versions cannot add columns with default and null information - $statements[] = 'ALTER TABLE ' . $table_name . ' ADD COLUMN "' . $column_name . '" ' . $column_data['column_type'] . ' ' . $column_data['constraint']; - - if (isset($column_data['null'])) - { - if ($column_data['null'] == 'NOT NULL') - { - $statements[] = 'ALTER TABLE ' . $table_name . ' ALTER COLUMN ' . $column_name . ' SET NOT NULL'; - } - } - - if (isset($column_data['default'])) - { - $statements[] = 'ALTER TABLE ' . $table_name . ' ALTER COLUMN ' . $column_name . ' SET DEFAULT ' . $column_data['default']; - } - } - break; - - case 'sqlite': - - if ($inline && $this->return_statements) - { - return $column_name . ' ' . $column_data['column_type_sql']; - } - - if (version_compare(sqlite_libversion(), '3.0') == -1) - { - $sql = "SELECT sql - FROM sqlite_master - WHERE type = 'table' - AND name = '{$table_name}' - ORDER BY type DESC, name;"; - $result = $this->db->sql_query($sql); - - if (!$result) - { - break; - } - - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); - - $statements[] = 'begin'; - - // Create a backup table and populate it, destroy the existing one - $statements[] = preg_replace('#CREATE\s+TABLE\s+"?' . $table_name . '"?#i', 'CREATE TEMPORARY TABLE ' . $table_name . '_temp', $row['sql']); - $statements[] = 'INSERT INTO ' . $table_name . '_temp SELECT * FROM ' . $table_name; - $statements[] = 'DROP TABLE ' . $table_name; - - preg_match('#\((.*)\)#s', $row['sql'], $matches); - - $new_table_cols = trim($matches[1]); - $old_table_cols = preg_split('/,(?![\s\w]+\))/m', $new_table_cols); - $column_list = array(); - - foreach ($old_table_cols as $declaration) - { - $entities = preg_split('#\s+#', trim($declaration)); - if ($entities[0] == 'PRIMARY') - { - continue; - } - $column_list[] = $entities[0]; - } - - $columns = implode(',', $column_list); - - $new_table_cols = $column_name . ' ' . $column_data['column_type_sql'] . ',' . $new_table_cols; - - // create a new table and fill it up. destroy the temp one - $statements[] = 'CREATE TABLE ' . $table_name . ' (' . $new_table_cols . ');'; - $statements[] = 'INSERT INTO ' . $table_name . ' (' . $columns . ') SELECT ' . $columns . ' FROM ' . $table_name . '_temp;'; - $statements[] = 'DROP TABLE ' . $table_name . '_temp'; - - $statements[] = 'commit'; - } - else - { - $statements[] = 'ALTER TABLE ' . $table_name . ' ADD ' . $column_name . ' [' . $column_data['column_type_sql'] . ']'; - } - break; - } - - return $this->_sql_run_sql($statements); - } - - /** - * Drop column - */ - function sql_column_remove($table_name, $column_name, $inline = false) - { - $statements = array(); - - switch ($this->sql_layer) - { - case 'firebird': - $statements[] = 'ALTER TABLE ' . $table_name . ' DROP "' . strtoupper($column_name) . '"'; - break; - - case 'mssql': - case 'mssqlnative': - $statements[] = 'ALTER TABLE [' . $table_name . '] DROP COLUMN [' . $column_name . ']'; - break; - - case 'mysql_40': - case 'mysql_41': - $statements[] = 'ALTER TABLE `' . $table_name . '` DROP COLUMN `' . $column_name . '`'; - break; - - case 'oracle': - $statements[] = 'ALTER TABLE ' . $table_name . ' DROP ' . $column_name; - break; - - case 'postgres': - $statements[] = 'ALTER TABLE ' . $table_name . ' DROP COLUMN "' . $column_name . '"'; - break; - - case 'sqlite': - - if ($inline && $this->return_statements) - { - return $column_name; - } - - if (version_compare(sqlite_libversion(), '3.0') == -1) - { - $sql = "SELECT sql - FROM sqlite_master - WHERE type = 'table' - AND name = '{$table_name}' - ORDER BY type DESC, name;"; - $result = $this->db->sql_query($sql); - - if (!$result) - { - break; - } - - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); - - $statements[] = 'begin'; - - // Create a backup table and populate it, destroy the existing one - $statements[] = preg_replace('#CREATE\s+TABLE\s+"?' . $table_name . '"?#i', 'CREATE TEMPORARY TABLE ' . $table_name . '_temp', $row['sql']); - $statements[] = 'INSERT INTO ' . $table_name . '_temp SELECT * FROM ' . $table_name; - $statements[] = 'DROP TABLE ' . $table_name; - - preg_match('#\((.*)\)#s', $row['sql'], $matches); - - $new_table_cols = trim($matches[1]); - $old_table_cols = preg_split('/,(?![\s\w]+\))/m', $new_table_cols); - $column_list = array(); - - foreach ($old_table_cols as $declaration) - { - $entities = preg_split('#\s+#', trim($declaration)); - if ($entities[0] == 'PRIMARY' || $entities[0] === $column_name) - { - continue; - } - $column_list[] = $entities[0]; - } - - $columns = implode(',', $column_list); - - $new_table_cols = $new_table_cols = preg_replace('/' . $column_name . '[^,]+(?:,|$)/m', '', $new_table_cols); - - // create a new table and fill it up. destroy the temp one - $statements[] = 'CREATE TABLE ' . $table_name . ' (' . $new_table_cols . ');'; - $statements[] = 'INSERT INTO ' . $table_name . ' (' . $columns . ') SELECT ' . $columns . ' FROM ' . $table_name . '_temp;'; - $statements[] = 'DROP TABLE ' . $table_name . '_temp'; - - $statements[] = 'commit'; - } - else - { - $statements[] = 'ALTER TABLE ' . $table_name . ' DROP COLUMN ' . $column_name; - } - break; - } - - return $this->_sql_run_sql($statements); - } - - /** - * Drop Index - */ - function sql_index_drop($table_name, $index_name) - { - $statements = array(); - - switch ($this->sql_layer) - { - case 'mssql': - case 'mssqlnative': - $statements[] = 'DROP INDEX ' . $table_name . '.' . $index_name; - break; - - case 'mysql_40': - case 'mysql_41': - $statements[] = 'DROP INDEX ' . $index_name . ' ON ' . $table_name; - break; - - case 'firebird': - case 'oracle': - case 'postgres': - case 'sqlite': - $statements[] = 'DROP INDEX ' . $table_name . '_' . $index_name; - break; - } - - return $this->_sql_run_sql($statements); - } - - /** - * Add primary key - */ - function sql_create_primary_key($table_name, $column, $inline = false) - { - $statements = array(); - - switch ($this->sql_layer) - { - case 'firebird': - case 'postgres': - case 'mysql_40': - case 'mysql_41': - $statements[] = 'ALTER TABLE ' . $table_name . ' ADD PRIMARY KEY (' . implode(', ', $column) . ')'; - break; - - case 'mssql': - case 'mssqlnative': - $sql = "ALTER TABLE [{$table_name}] WITH NOCHECK ADD "; - $sql .= "CONSTRAINT [PK_{$table_name}] PRIMARY KEY CLUSTERED ("; - $sql .= '[' . implode("],\n\t\t[", $column) . ']'; - $sql .= ') ON [PRIMARY]'; - - $statements[] = $sql; - break; - - case 'oracle': - $statements[] = 'ALTER TABLE ' . $table_name . 'add CONSTRAINT pk_' . $table_name . ' PRIMARY KEY (' . implode(', ', $column) . ')'; - break; - - case 'sqlite': - - if ($inline && $this->return_statements) - { - return $column; - } - - $sql = "SELECT sql - FROM sqlite_master - WHERE type = 'table' - AND name = '{$table_name}' - ORDER BY type DESC, name;"; - $result = $this->db->sql_query($sql); - - if (!$result) - { - break; - } - - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); - - $statements[] = 'begin'; - - // Create a backup table and populate it, destroy the existing one - $statements[] = preg_replace('#CREATE\s+TABLE\s+"?' . $table_name . '"?#i', 'CREATE TEMPORARY TABLE ' . $table_name . '_temp', $row['sql']); - $statements[] = 'INSERT INTO ' . $table_name . '_temp SELECT * FROM ' . $table_name; - $statements[] = 'DROP TABLE ' . $table_name; - - preg_match('#\((.*)\)#s', $row['sql'], $matches); - - $new_table_cols = trim($matches[1]); - $old_table_cols = preg_split('/,(?![\s\w]+\))/m', $new_table_cols); - $column_list = array(); - - foreach ($old_table_cols as $declaration) - { - $entities = preg_split('#\s+#', trim($declaration)); - if ($entities[0] == 'PRIMARY') - { - continue; - } - $column_list[] = $entities[0]; - } - - $columns = implode(',', $column_list); - - // create a new table and fill it up. destroy the temp one - $statements[] = 'CREATE TABLE ' . $table_name . ' (' . $new_table_cols . ', PRIMARY KEY (' . implode(', ', $column) . '));'; - $statements[] = 'INSERT INTO ' . $table_name . ' (' . $columns . ') SELECT ' . $columns . ' FROM ' . $table_name . '_temp;'; - $statements[] = 'DROP TABLE ' . $table_name . '_temp'; - - $statements[] = 'commit'; - break; - } - - return $this->_sql_run_sql($statements); - } - - /** - * Add unique index - */ - function sql_create_unique_index($table_name, $index_name, $column) - { - $statements = array(); - - $table_prefix = substr(CONFIG_TABLE, 0, -6); // strlen(config) - if (strlen($table_name . $index_name) - strlen($table_prefix) > 24) - { - $max_length = $table_prefix + 24; - trigger_error("Index name '{$table_name}_$index_name' on table '$table_name' is too long. The maximum is $max_length characters.", E_USER_ERROR); - } - - switch ($this->sql_layer) - { - case 'firebird': - case 'postgres': - case 'oracle': - case 'sqlite': - $statements[] = 'CREATE UNIQUE INDEX ' . $table_name . '_' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')'; - break; - - case 'mysql_40': - case 'mysql_41': - $statements[] = 'CREATE UNIQUE INDEX ' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')'; - break; - - case 'mssql': - case 'mssqlnative': - $statements[] = 'CREATE UNIQUE INDEX ' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ') ON [PRIMARY]'; - break; - } - - return $this->_sql_run_sql($statements); - } - - /** - * Add index - */ - function sql_create_index($table_name, $index_name, $column) - { - $statements = array(); - - $table_prefix = substr(CONFIG_TABLE, 0, -6); // strlen(config) - if (strlen($table_name . $index_name) - strlen($table_prefix) > 24) - { - $max_length = $table_prefix + 24; - trigger_error("Index name '{$table_name}_$index_name' on table '$table_name' is too long. The maximum is $max_length characters.", E_USER_ERROR); - } - - // remove index length unless MySQL4 - if ('mysql_40' != $this->sql_layer) - { - $column = preg_replace('#:.*$#', '', $column); - } - - switch ($this->sql_layer) - { - case 'firebird': - case 'postgres': - case 'oracle': - case 'sqlite': - $statements[] = 'CREATE INDEX ' . $table_name . '_' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')'; - break; - - case 'mysql_40': - // add index size to definition as required by MySQL4 - foreach ($column as $i => $col) - { - if (false !== strpos($col, ':')) - { - list($col, $index_size) = explode(':', $col); - $column[$i] = "$col($index_size)"; - } - } - // no break - case 'mysql_41': - $statements[] = 'CREATE INDEX ' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')'; - break; - - case 'mssql': - case 'mssqlnative': - $statements[] = 'CREATE INDEX ' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ') ON [PRIMARY]'; - break; - } - - return $this->_sql_run_sql($statements); - } - - /** - * Change column type (not name!) - */ - function sql_column_change($table_name, $column_name, $column_data, $inline = false) - { - $column_data = $this->sql_prepare_column_data($table_name, $column_name, $column_data); - $statements = array(); - - switch ($this->sql_layer) - { - case 'firebird': - // Change type... - if (!empty($column_data['column_type_sql_default'])) - { - $statements[] = 'ALTER TABLE ' . $table_name . ' ALTER COLUMN "' . strtoupper($column_name) . '" TYPE ' . ' ' . $column_data['column_type_sql_type']; - $statements[] = 'ALTER TABLE ' . $table_name . ' ALTER COLUMN "' . strtoupper($column_name) . '" SET DEFAULT ' . ' ' . $column_data['column_type_sql_default']; - } - else - { - // TODO: try to change pkey without removing trigger, generator or constraints. ATM this query may fail. - $statements[] = 'ALTER TABLE ' . $table_name . ' ALTER COLUMN "' . strtoupper($column_name) . '" TYPE ' . ' ' . $column_data['column_type_sql_type']; - } - break; - - case 'mssql': - case 'mssqlnative': - $statements[] = 'ALTER TABLE [' . $table_name . '] ALTER COLUMN [' . $column_name . '] ' . $column_data['column_type_sql']; - - if (!empty($column_data['default'])) - { - // Using TRANSACT-SQL for this statement because we do not want to have colliding data if statements are executed at a later stage - $statements[] = "DECLARE @drop_default_name VARCHAR(100), @cmd VARCHAR(1000) - SET @drop_default_name = - (SELECT so.name FROM sysobjects so - JOIN sysconstraints sc ON so.id = sc.constid - WHERE object_name(so.parent_obj) = '{$table_name}' - AND so.xtype = 'D' - AND sc.colid = (SELECT colid FROM syscolumns - WHERE id = object_id('{$table_name}') - AND name = '{$column_name}')) - IF @drop_default_name <> '' - BEGIN - SET @cmd = 'ALTER TABLE [{$table_name}] DROP CONSTRAINT [' + @drop_default_name + ']' - EXEC(@cmd) - END - SET @cmd = 'ALTER TABLE [{$table_name}] ADD CONSTRAINT [DF_{$table_name}_{$column_name}_1] {$column_data['default']} FOR [{$column_name}]' - EXEC(@cmd)"; - } - break; - - case 'mysql_40': - case 'mysql_41': - $statements[] = 'ALTER TABLE `' . $table_name . '` CHANGE `' . $column_name . '` `' . $column_name . '` ' . $column_data['column_type_sql']; - break; - - case 'oracle': - $statements[] = 'ALTER TABLE ' . $table_name . ' MODIFY ' . $column_name . ' ' . $column_data['column_type_sql']; - break; - - case 'postgres': - $sql = 'ALTER TABLE ' . $table_name . ' '; - - $sql_array = array(); - $sql_array[] = 'ALTER COLUMN ' . $column_name . ' TYPE ' . $column_data['column_type']; - - if (isset($column_data['null'])) - { - if ($column_data['null'] == 'NOT NULL') - { - $sql_array[] = 'ALTER COLUMN ' . $column_name . ' SET NOT NULL'; - } - else if ($column_data['null'] == 'NULL') - { - $sql_array[] = 'ALTER COLUMN ' . $column_name . ' DROP NOT NULL'; - } - } - - if (isset($column_data['default'])) - { - $sql_array[] = 'ALTER COLUMN ' . $column_name . ' SET DEFAULT ' . $column_data['default']; - } - - // we don't want to double up on constraints if we change different number data types - if (isset($column_data['constraint'])) - { - $constraint_sql = "SELECT consrc as constraint_data - FROM pg_constraint, pg_class bc - WHERE conrelid = bc.oid - AND bc.relname = '{$table_name}' - AND NOT EXISTS ( - SELECT * - FROM pg_constraint as c, pg_inherits as i - WHERE i.inhrelid = pg_constraint.conrelid - AND c.conname = pg_constraint.conname - AND c.consrc = pg_constraint.consrc - AND c.conrelid = i.inhparent - )"; - - $constraint_exists = false; - - $result = $this->db->sql_query($constraint_sql); - while ($row = $this->db->sql_fetchrow($result)) - { - if (trim($row['constraint_data']) == trim($column_data['constraint'])) - { - $constraint_exists = true; - break; - } - } - $this->db->sql_freeresult($result); - - if (!$constraint_exists) - { - $sql_array[] = 'ADD ' . $column_data['constraint']; - } - } - - $sql .= implode(', ', $sql_array); - - $statements[] = $sql; - break; - - case 'sqlite': - - if ($inline && $this->return_statements) - { - return $column_name . ' ' . $column_data['column_type_sql']; - } - - $sql = "SELECT sql - FROM sqlite_master - WHERE type = 'table' - AND name = '{$table_name}' - ORDER BY type DESC, name;"; - $result = $this->db->sql_query($sql); - - if (!$result) - { - break; - } - - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); - - $statements[] = 'begin'; - - // Create a temp table and populate it, destroy the existing one - $statements[] = preg_replace('#CREATE\s+TABLE\s+"?' . $table_name . '"?#i', 'CREATE TEMPORARY TABLE ' . $table_name . '_temp', $row['sql']); - $statements[] = 'INSERT INTO ' . $table_name . '_temp SELECT * FROM ' . $table_name; - $statements[] = 'DROP TABLE ' . $table_name; - - preg_match('#\((.*)\)#s', $row['sql'], $matches); - - $new_table_cols = trim($matches[1]); - $old_table_cols = preg_split('/,(?![\s\w]+\))/m', $new_table_cols); - $column_list = array(); - - foreach ($old_table_cols as $key => $declaration) - { - $entities = preg_split('#\s+#', trim($declaration)); - $column_list[] = $entities[0]; - if ($entities[0] == $column_name) - { - $old_table_cols[$key] = $column_name . ' ' . $column_data['column_type_sql']; - } - } - - $columns = implode(',', $column_list); - - // create a new table and fill it up. destroy the temp one - $statements[] = 'CREATE TABLE ' . $table_name . ' (' . implode(',', $old_table_cols) . ');'; - $statements[] = 'INSERT INTO ' . $table_name . ' (' . $columns . ') SELECT ' . $columns . ' FROM ' . $table_name . '_temp;'; - $statements[] = 'DROP TABLE ' . $table_name . '_temp'; - - $statements[] = 'commit'; - - break; - } - - return $this->_sql_run_sql($statements); - } -} - ?> -- cgit v1.2.1 From 5b5c2274232bee869548a17399645a70cf550577 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 8 Jul 2011 20:33:16 -0400 Subject: [ticket/10003] Use phpbb_db_tools in database_update.php. Now that the copy of db tools has been deleted, change which class name is used. PHPBB3-10003 --- phpBB/install/database_update.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/install/database_update.php') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index d73848c871..7b6deb5727 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -180,7 +180,7 @@ $db->sql_freeresult($result); // We do not include DB Tools here, because we can not be sure the file is up-to-date ;) // Instead, this file defines a clean db_tools version (we are also not able to provide a different file, else the database update will not work standalone) -$db_tools = new updater_db_tools($db, true); +$db_tools = new phpbb_db_tools($db, true); $database_update_info = database_update_info(); -- cgit v1.2.1 From fd728c2815d3e21f5f6022b973109a839fe0164f Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 8 Jul 2011 20:36:39 -0400 Subject: [ticket/10003] Require db_tools.php in database_update.php. Use require_updated to use the new version of db_tools if one is present. PHPBB3-10003 --- phpBB/install/database_update.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'phpBB/install/database_update.php') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 7b6deb5727..8154155650 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -99,6 +99,8 @@ require($phpbb_root_path . 'includes/constants.' . $phpEx); require($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx); require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); +phpbb_require_updated('includes/db/db_tools.' . $phpEx); + // new table constants are separately defined here in case the updater is run // before the files are updated if (!defined('LOGIN_ATTEMPT_TABLE')) -- cgit v1.2.1 From 00f7db66f24327b6d115e18d1dad8bf48ea22290 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 9 Jul 2011 01:56:43 -0400 Subject: [ticket/10003] Fixed comment referring to db_tools duplication. PHPBB3-10003 --- phpBB/install/database_update.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB/install/database_update.php') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 8154155650..36d8bab467 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -180,8 +180,8 @@ while ($row = $db->sql_fetchrow($result)) } $db->sql_freeresult($result); -// We do not include DB Tools here, because we can not be sure the file is up-to-date ;) -// Instead, this file defines a clean db_tools version (we are also not able to provide a different file, else the database update will not work standalone) +// phpbb_db_tools will be taken from new files (under install/update/new) +// if possible, falling back to the board's copy. $db_tools = new phpbb_db_tools($db, true); $database_update_info = database_update_info(); -- cgit v1.2.1 >-msgstr ""
+msgstr "Valitse osio, käytettävä tiedostojärjestelmä ja tehtävä toimenpide"
#: diskdrake/hd_gtk.pm:105 diskdrake/interactive.pm:1089
#: diskdrake/interactive.pm:1099 diskdrake/interactive.pm:1152
@@ -1337,9 +1325,9 @@ msgid ""
"I suggest you first resize that partition\n"
"(click on it, then click on \"Resize\")"
msgstr ""
-"Sinulla on yksi suuri Microsoft Windows osio.\n"
-"Ehdotan että muutat ensimmäiseksi osion kokoa\n"
-"(klikkaa osiota ja valitse sitten \"Muuta kokoa\")"
+"Löytyi yksi suuri Microsoft Windows -osio.\n"
+"Ehdotan, että ensimmäiseksi muutetaan osion kokoa\n"
+"(klikkaa osiota ja valitse \"Muuta kokoa\")."
#: diskdrake/hd_gtk.pm:226
#, c-format
@@ -1389,7 +1377,7 @@ msgstr "HFS"
#: diskdrake/hd_gtk.pm:379
#, c-format
msgid "Windows"
-msgstr "Windows "
+msgstr "Windows"
#: diskdrake/hd_gtk.pm:380 services.pm:158
#, c-format
@@ -1404,7 +1392,7 @@ msgstr "Tyhjä"
#: diskdrake/hd_gtk.pm:387
#, c-format
msgid "Filesystem types:"
-msgstr "Tiedostojärjestelmien tyypit:"
+msgstr "Tiedostojärjestelmät:"
#: diskdrake/hd_gtk.pm:408 diskdrake/interactive.pm:303
#: diskdrake/interactive.pm:388 diskdrake/interactive.pm:546
@@ -1420,17 +1408,17 @@ msgstr "Varoitus"
#: diskdrake/hd_gtk.pm:408
#, c-format
msgid "This partition is already empty"
-msgstr "Tämä osio on jo tyhjä"
+msgstr "Osio on jo tyhjä"
#: diskdrake/hd_gtk.pm:417
#, c-format
msgid "Use ``Unmount'' first"
-msgstr "Käytä ensin komentoa ``Irrota''"
+msgstr "Käytä ensin komentoa \"Irrota\""
#: diskdrake/hd_gtk.pm:417
#, c-format
msgid "Use ``%s'' instead (in expert mode)"
-msgstr "Käytä sen sijaan ``%s'':ää (asiantuntijatilassa)"
+msgstr "Käytä sen sijaan sovellusta %s (asiantuntijatilassa)"
#: diskdrake/hd_gtk.pm:417 diskdrake/interactive.pm:402
#: diskdrake/interactive.pm:584 diskdrake/removable.pm:25
@@ -1479,13 +1467,13 @@ msgstr "Lopeta kirjoittamatta osiotaulua?"
#: diskdrake/interactive.pm:291
#, c-format
msgid "Do you want to save /etc/fstab modifications"
-msgstr "Haluatko tallentaa muutokset tiedostoon /etc/fstab"
+msgstr "Tallennetaanko muutokset tiedostoon /etc/fstab"
#: diskdrake/interactive.pm:298 fs/partitioning_wizard.pm:250
#, c-format
msgid "You need to reboot for the partition table modifications to take place"
msgstr ""
-"Sinun tulee käynnistää järjestelmä uudelleen jotta muutokset tulevat voimaan"
+"Järjestelmä tulee käynnistää uudelleen osiotaulun muutosten toteutumiseksi"
#: diskdrake/interactive.pm:303
#, c-format
@@ -1494,9 +1482,9 @@ msgid ""
"Otherwise no entry for mount point %s will be written in fstab.\n"
"Quit anyway?"
msgstr ""
-"Sinun pitäisi alustaa osio %s.\n"
-"Muuten tietuetta liitoskohdalle %s ei kirjoiteta fstab:iin.\n"
-"Lopeta kummiskin?"
+"Osio %s tulisi alustaa.\n"
+"Muuten fstab:iin ei kirjoiteta merkintää liitoskohdasta %s.\n"
+"Lopeta joka tapauksessa?"
#: diskdrake/interactive.pm:316
#, c-format
@@ -1526,7 +1514,7 @@ msgstr "Kiintolevyn tiedot"
#: diskdrake/interactive.pm:368
#, c-format
msgid "All primary partitions are used"
-msgstr "Kaikki primääriosiot käytetty"
+msgstr "Kaikki ensisijaiset osiot on käytetty"
#: diskdrake/interactive.pm:369
#, c-format
@@ -1539,13 +1527,14 @@ msgid ""
"To have more partitions, please delete one to be able to create an extended "
"partition"
msgstr ""
-"Voidaksesi luoda lisää osioita tuhoa yksi olemassa oleva osio jotta voisit "
-"luoda laajennetun osion"
+"Uusien osioiden luomiseksi on tuhottava yksi olemassa oleva osio "
+"(laajennetun "
+"osion luomiseksi)"
#: diskdrake/interactive.pm:381
#, c-format
msgid "Reload partition table"
-msgstr "Uudelleenlataa osiotaulu"
+msgstr "Lataa osiotaulu uudelleen"
#: diskdrake/interactive.pm:388
#, c-format
@@ -1555,7 +1544,7 @@ msgstr "Yksityiskohtaiset tiedot"
#: diskdrake/interactive.pm:400
#, c-format
msgid "View"
-msgstr ""
+msgstr "Näytä"
#: diskdrake/interactive.pm:405 diskdrake/interactive.pm:756
#, c-format
@@ -1577,10 +1566,9 @@ msgstr "Lisää RAIDiin"
msgid "Add to LVM"
msgstr "Lisää LVM:iin"
-#: diskdrake/interactive.pm:410
-#, fuzzy, c-format
+#: diskdrake/interactive.pm:410, c-format
msgid "Use"
-msgstr "Käyttäjä-ID"
+msgstr "Käytä"
#: diskdrake/interactive.pm:412
#, c-format
@@ -1597,10 +1585,9 @@ msgstr "Poista RAID:sta"
msgid "Remove from LVM"
msgstr "Poista LVM:stä"
-#: diskdrake/interactive.pm:415
-#, fuzzy, c-format
+#: diskdrake/interactive.pm:415, c-format
msgid "Remove from dm"
-msgstr "Poista LVM:stä"
+msgstr "Poista dm:stä"
#: diskdrake/interactive.pm:416
#, c-format
@@ -1654,9 +1641,10 @@ msgid ""
"(since you reached the maximal number of primary partitions).\n"
"First remove a primary partition and create an extended partition."
msgstr ""
-"Et voi luoda uutta osiota.\n"
-"(koska sinulla on jo maksimimäärä primääriosioita käytössä).\n"
-"Poista ensin yksi primääriosio, ja luo laajennettu osio sen tilalle."
+"Uutta osiota ei voi luoda.\n"
+"(Koska maksimimäärä ensisijaisia osioita on jo käytössä).\n"
+"Ensin on poistettava yksi ensisijainen osio ja luotava tilalle laajennettu "
+"osio."
# mat
#: diskdrake/interactive.pm:546
@@ -1669,7 +1657,7 @@ msgstr "Poista loopback-tiedosto?"
#, c-format
msgid ""
"After changing type of partition %s, all data on this partition will be lost"
-msgstr "Vaihdettuasi osion %s tyyppiä kaikki siinä olevat tiedot häviävät"
+msgstr "Osion %s tyypin vaihtamisen jälkeen kaikki sen tiedot tuhoutuvat"
#: diskdrake/interactive.pm:581
#, c-format
@@ -1679,48 +1667,47 @@ msgstr "Muuta osiotyyppiä"
#: diskdrake/interactive.pm:583 diskdrake/removable.pm:47
#, c-format
msgid "Which filesystem do you want?"
-msgstr "Minkä tiedostojärjestelmän haluat?"
+msgstr "Valitse tiedostojärjestelmä"
#: diskdrake/interactive.pm:590
#, c-format
msgid "Switching from %s to %s"
-msgstr "Vaihdetaan %s tyyppiin %s"
+msgstr "Vaihdetaan %s tiedostojärjestelmään %s"
-#: diskdrake/interactive.pm:620
-#, fuzzy, c-format
+#: diskdrake/interactive.pm:620, c-format
msgid "Set volume label"
-msgstr "Osion nimi?"
+msgstr "Anna taltion nimi"
#: diskdrake/interactive.pm:622
#, c-format
msgid "Beware, this will be written to disk as soon as you validate!"
-msgstr ""
+msgstr "HUOM! Tiedot kirjoitetaan levylle heti hyväksymisen jälkeen!"
#: diskdrake/interactive.pm:623
#, c-format
msgid "Beware, this will be written to disk only after formatting!"
-msgstr ""
+msgstr "HUOM! Tiedot kirjoitetaan levylle vasta alustamisen jälkeen!"
#: diskdrake/interactive.pm:625
#, c-format
msgid "Which volume label?"
-msgstr "Osion nimi?"
+msgstr "Mikä taltio?"
#: diskdrake/interactive.pm:626
#, c-format
msgid "Label:"
-msgstr "Nimike:"
+msgstr "Nimi:"
# mat
#: diskdrake/interactive.pm:647
#, c-format
msgid "Where do you want to mount the loopback file %s?"
-msgstr "Minne haluat liittää loopback-tiedoston %s?"
+msgstr "Minne loopback-tiedosto %s liitetään?"
#: diskdrake/interactive.pm:648
#, c-format
msgid "Where do you want to mount device %s?"
-msgstr "Minne haluat liittää laitteen %s?"
+msgstr "Minne laite %s liitetään?"
#: diskdrake/interactive.pm:653
#, c-format
@@ -1728,13 +1715,13 @@ msgid ""
"Can not unset mount point as this partition is used for loop back.\n"
"Remove the loopback first"
msgstr ""
-"Liitospistettä ei voida poistaa koska osiota käytetään loopback-tilassa.\n"
-"Poista loopback-tiedosto ensin."
+"Liitospistettä ei voida poistaa, koska osiota käytetään loopback-tilassa.\n"
+"Loopback-tiedosto on poistettava ensin."
#: diskdrake/interactive.pm:683
#, c-format
msgid "Where do you want to mount %s?"
-msgstr "Minne haluat liittää laitteen %s?"
+msgstr "Minne laite %s liitetään?"
#: diskdrake/interactive.pm:707 diskdrake/interactive.pm:790
#: fs/partitioning_wizard.pm:146 fs/partitioning_wizard.pm:178
@@ -1750,7 +1737,7 @@ msgstr "Lasketaan FAT-tiedostojärjestelmän rajoja"
#: diskdrake/interactive.pm:743
#, c-format
msgid "This partition is not resizeable"
-msgstr "Tämän osion kokoa ei voi muuttaa"
+msgstr "Osion kokoa ei voi muuttaa"
#: diskdrake/interactive.pm:748
#, c-format
@@ -1783,25 +1770,23 @@ msgstr "Minimikoko: %s Mt"
msgid "Maximum size: %s MB"
msgstr "Maksimikoko: %s Mt"
-#: diskdrake/interactive.pm:801
-#, fuzzy, c-format
+#: diskdrake/interactive.pm:801, c-format
msgid ""
"To ensure data integrity after resizing the partition(s),\n"
"filesystem checks will be run on your next boot into Microsoft Windows®"
msgstr ""
-"Tietojen yhtenäisyyden varmistamiseksi osio(ide)n koon\n"
-"muuttamisen jälkeen suoritetaan tiedostojärjestelmän\n"
-"tarkistus seuraavan kerran kun käynnistät Windowsin(TM)."
+"Tietojen yhtenäisyyden varmistamiseksi osion tai osioiden koon\n"
+"muuttamisen jälkeen suoritetaan tiedostojärjestelmän tarkistus,\n"
+"kun kun Microsoft Windows® käynnistetään seuraavan kerran."
#: diskdrake/interactive.pm:849 diskdrake/interactive.pm:1393
#, c-format
msgid "Filesystem encryption key"
msgstr "Tiedostojärjestelmän salausavain"
-#: diskdrake/interactive.pm:850
-#, fuzzy, c-format
+#: diskdrake/interactive.pm:850, c-format
msgid "Enter your filesystem encryption key"
-msgstr "Valitse tiedostojärjestelmäsi salausavain"
+msgstr "Annan tiedostojärjestelmän salausavain"
#: diskdrake/interactive.pm:851 diskdrake/interactive.pm:1401
#, c-format
@@ -1811,7 +1796,7 @@ msgstr "Salausavain"
#: diskdrake/interactive.pm:858
#, c-format
msgid "Invalid key"
-msgstr ""
+msgstr "Virheellinen avain"
#: diskdrake/interactive.pm:866
#, c-format
@@ -1840,12 +1825,12 @@ msgid ""
"Do you want to move used physical extents on this volume to other volumes?"
msgstr ""
"Fyysinen levy %s on vielä käytössä.\n"
-"Haluatko siirtää käytetyt fyysiset extent-osat muille levyille?"
+"Siirretäänkö käytetyt fyysiset extent-osat muille levyille?"
#: diskdrake/interactive.pm:920
#, c-format
msgid "Moving physical extents"
-msgstr "Siirretään fyysiset extent-osat"
+msgstr "Siirretään fyysisiä extent-osia"
#: diskdrake/interactive.pm:938
#, c-format
@@ -1860,7 +1845,7 @@ msgstr "Loopback"
#: diskdrake/interactive.pm:952
#, c-format
msgid "Loopback file name: "
-msgstr "Loopback tiedostonimi: "
+msgstr "Loopback-tiedoston nimi: "
#: diskdrake/interactive.pm:957
#, c-format
@@ -1880,7 +1865,7 @@ msgstr "Tiedosto on jo olemassa. Käytetäänkö sitä?"
#: diskdrake/interactive.pm:993 diskdrake/interactive.pm:996
#, c-format
msgid "Mount options"
-msgstr "Liitosoptiot"
+msgstr "Liitosasetukset"
#: diskdrake/interactive.pm:1003
#, c-format
@@ -1907,10 +1892,9 @@ msgstr "lohkon koko kilotavuina"
msgid "Be careful: this operation is dangerous."
msgstr "Varoitus: tämä on vaarallinen toiminto"
-#: diskdrake/interactive.pm:1105
-#, fuzzy, c-format
+#: diskdrake/interactive.pm:1105, c-format
msgid "Partitioning Type"
-msgstr "Osiointi"
+msgstr "Osioinnin tyyppi"
#: diskdrake/interactive.pm:1105
#, c-format
@@ -1920,12 +1904,12 @@ msgstr "Minkä tyyppinen osiointi?"
#: diskdrake/interactive.pm:1143
#, c-format
msgid "You'll need to reboot before the modification can take place"
-msgstr "Sinun täytyy käynnistää kone uudelleen ennen kuin muutos tulee voimaan"
+msgstr "Kone täytyy käynnistää uudelleen, jotta muutos tulee voimaan"
#: diskdrake/interactive.pm:1152
#, c-format
msgid "Partition table of drive %s is going to be written to disk"
-msgstr "Levyn %s osiotaulu kirjoitetaan levylle"
+msgstr "Kirjoitetaan levyn %s osiotaulu levylle"
#: diskdrake/interactive.pm:1174 fs/format.pm:96 fs/format.pm:103
#, c-format
@@ -1963,6 +1947,12 @@ msgid ""
"mounted there or leave them where they are (which results in hiding them by "
"the contents of the mounted partition)"
msgstr ""
+"Hakemisto %s sisältää jo tiedot\n"
+"(%s)\n"
+"\n"
+"Tiedostot voidaan siirtää osiolle, joka liitetään kyseiseen sijaintiin tai "
+"tiedostot voidaan jättää entiseen sijaintiinsa (jonka seurauksena "
+"liitettävän osion tiedot piilottavat ne)"
#: diskdrake/interactive.pm:1226
#, c-format
@@ -2002,12 +1992,12 @@ msgstr "Osion nimi: "
#: diskdrake/interactive.pm:1276
#, c-format
msgid "UUID: "
-msgstr ""
+msgstr "UUID: "
#: diskdrake/interactive.pm:1277
#, c-format
msgid "DOS drive letter: %s (just a guess)\n"
-msgstr "DOS-asema: %s (vain arvaus)\n"
+msgstr "DOS-kirjaintunnus: %s (vain arvaus)\n"
#: diskdrake/interactive.pm:1281 diskdrake/interactive.pm:1290
#: diskdrake/interactive.pm:1361
@@ -2066,25 +2056,24 @@ msgstr "Liitetty\n"
msgid "RAID %s\n"
msgstr "RAID %s\n"
-#: diskdrake/interactive.pm:1304
-#, fuzzy, c-format
+#: diskdrake/interactive.pm:1304, c-format
msgid "Encrypted"
-msgstr "Salausavain"
+msgstr "Salattu"
#: diskdrake/interactive.pm:1304
-#, c-format
+#, fuzzy, c-format
msgid " (mapped on %s)"
-msgstr ""
+msgstr " (liitetty %s)"
#: diskdrake/interactive.pm:1305
-#, c-format
+#, fuzzy, c-format
msgid " (to map on %s)"
-msgstr ""
+msgstr " (liitettäväksi %s)"
#: diskdrake/interactive.pm:1306
#, c-format
msgid " (inactive)"
-msgstr ""
+msgstr "(ei aktiivinen)"
#: diskdrake/interactive.pm:1312
#, c-format
@@ -2133,9 +2122,9 @@ msgid ""
"probably leave it alone.\n"
msgstr ""
"\n"
-"On mahdollista, että tämä osio on\n"
-"ajuriosio. Sinun olisi kaiketi\n"
-"parasta jättää se rauhaan.\n"
+"On mahdollista, että osio on\n"
+"ajuriosio. On ehkä parasta\n"
+"jättää se rauhaan.\n"
#: diskdrake/interactive.pm:1325
#, c-format
@@ -2146,14 +2135,15 @@ msgid ""
"dual-booting your system.\n"
msgstr ""
"\n"
-"Tämä erityinen Bootsrap-osio\n"
-"on järjestelmäsi käynnistämiseksi\n"
-"eri käyttöjärjestelmiin.\n"
+"Erityinen Bootsrap-osio\n"
+"on tarkoitettu järjestelmän\n"
+"käynnistämiseksi eri\n"
+"käyttöjärjestelmiin.\n"
#: diskdrake/interactive.pm:1334
#, c-format
msgid "Free space on %s (%s)"
-msgstr ""
+msgstr "Vapaata tilaa osiolla %s (%s)"
#: diskdrake/interactive.pm:1343
#, c-format
@@ -2170,10 +2160,9 @@ msgstr "Koko: %s\n"
msgid "Geometry: %s cylinders, %s heads, %s sectors\n"
msgstr "Levyn tiedot: %s sylinteriä, %s lukupäätä, %s sektoria\n"
-#: diskdrake/interactive.pm:1347
-#, fuzzy, c-format
+#: diskdrake/interactive.pm:1347, c-format
msgid "Medium type: "
-msgstr "Tiedostojärjestelmä: "
+msgstr "Tietovälineen tyyppi: "
#: diskdrake/interactive.pm:1348
#, c-format
@@ -2184,7 +2173,7 @@ msgstr "LVM-levyt %s\n"
#: diskdrake/interactive.pm:1349
#, c-format
msgid "Partition table type: %s\n"
-msgstr "Osion tyyppi: %s\n"
+msgstr "Osiotaulun tyyppi: %s\n"
#: diskdrake/interactive.pm:1350
#, c-format
@@ -2194,7 +2183,7 @@ msgstr "väylässä %d id %d\n"
#: diskdrake/interactive.pm:1394
#, c-format
msgid "Choose your filesystem encryption key"
-msgstr "Valitse tiedostojärjestelmäsi salausavain"
+msgstr "Valitse tiedostojärjestelmän salausavain"
#: diskdrake/interactive.pm:1397
#, c-format
@@ -2215,7 +2204,7 @@ msgstr "Salausavain (uudelleen)"
#: diskdrake/interactive.pm:1404
#, c-format
msgid "Encryption algorithm"
-msgstr "salausalgoritmi"
+msgstr "Salausalgoritmi"
#: diskdrake/removable.pm:46
#, c-format
@@ -2233,12 +2222,12 @@ msgstr "Peruuta"
#: diskdrake/smbnfs_gtk.pm:164
#, c-format
msgid "Can not login using username %s (bad password?)"
-msgstr "Ei voida kirjautua sisään käyttäjätunnuksella: %s (väärä salasana?)"
+msgstr "Käyttäjätunnuksella %s ei voida kirjautua (väärä salasana?)"
#: diskdrake/smbnfs_gtk.pm:168 diskdrake/smbnfs_gtk.pm:177
#, c-format
msgid "Domain Authentication Required"
-msgstr "Verkkoaluetunnistus vaaditaan"
+msgstr "Verkkoaluetunnistautuminen vaaditaan"
#: diskdrake/smbnfs_gtk.pm:169
#, c-format
@@ -2254,8 +2243,7 @@ msgstr "Muu"
#, c-format
msgid ""
"Please enter your username, password and domain name to access this host."
-msgstr ""
-"Anna tunnuksesi, salasanasi ja verkkoalue käyttääksesi tätä palvelinta."
+msgstr "Anna tunnus, salasana ja verkkoalue käyttääksesi tätä konetta."
#: diskdrake/smbnfs_gtk.pm:180
#, c-format
@@ -2280,12 +2268,12 @@ msgstr "Etsi uudet palvelimet"
#: do_pkgs.pm:19 do_pkgs.pm:57
#, c-format
msgid "The package %s needs to be installed. Do you want to install it?"
-msgstr "Paketti %s pitää asentaa. Haluatko asentaa sen?"
+msgstr "Paketti %s pitää asentaa. Asennetaanko se?"
#: do_pkgs.pm:23 do_pkgs.pm:44 do_pkgs.pm:60 do_pkgs.pm:82
#, c-format
msgid "Could not install the %s package!"
-msgstr "%s pakettia ei voitu asentaa!"
+msgstr "Pakettia %s ei voitu asentaa!"
#: do_pkgs.pm:28 do_pkgs.pm:65
#, c-format
@@ -2313,33 +2301,31 @@ msgid ""
"An error occurred - no valid devices were found on which to create new "
"filesystems. Please check your hardware for the cause of this problem"
msgstr ""
-"On tapahtunut virhe - ei löytynyt ainuttakaan laitetta, joille voi luoda "
-"uuden tiedostojärjestelmän. Tarkista laitteistosi korjataksesi ongelman"
+"Tapahtui virhe - ei löytynyt yhtään laitetta, jolle voisi luoda "
+"uuden tiedostojärjestelmän. Tarkista laitteisto ongelman varalta."
#: fs/any.pm:75 fs/partitioning_wizard.pm:59
#, c-format
msgid "You must have a FAT partition mounted in /boot/efi"
-msgstr "Sinulla pitää olla FAT-osio liitettynä hakemistoon /boot/efi"
+msgstr "Hakemistoon /boot/efi tulee olla liitettynä FAT-osio"
#: fs/format.pm:100
#, c-format
msgid "Creating and formatting file %s"
msgstr "Luodaan ja alustetaan tiedostoa %s"
-#: fs/format.pm:119
-#, fuzzy, c-format
+#: fs/format.pm:119, c-format
msgid "I do not know how to set label on %s with type %s"
-msgstr "en osaa alustaa %s tyyppiä %s"
+msgstr "Nimen lisääminen levylle %s (%s) ei onnistu"
-#: fs/format.pm:126
-#, fuzzy, c-format
+#: fs/format.pm:126, c-format
msgid "setting label on %s failed, is it formatted?"
-msgstr "%s alustus %s epäonnistui"
+msgstr "levyn %s nimeäminen epäonnistui, onko se alustettu?"
#: fs/format.pm:167
#, c-format
msgid "I do not know how to format %s in type %s"
-msgstr "en osaa alustaa %s tyyppiä %s"
+msgstr "Levyn %s (%s) alustaminen ei onnistu"
#: fs/format.pm:172 fs/format.pm:174
#, c-format
@@ -2376,20 +2362,21 @@ msgstr "virhe irrotettaessa %s: %s"
msgid "Enabling swap partition %s"
msgstr "Otetaan käyttöön sivutusosiota %s"
-#: fs/mount_options.pm:114
-#, fuzzy, c-format
+#: fs/mount_options.pm:114, c-format
msgid "Use an encrypted file system"
-msgstr "Et voi käyttää salattua tiedostojärjestelmää liitospisteelle %s"
+msgstr "Käytä salattua tiedostojärjestelmää"
#: fs/mount_options.pm:116
#, c-format
msgid "Flush write cache on file close"
-msgstr ""
+msgstr "Tyhjennä kirjoitusvälimuisti suljettaessa tiedosto"
#: fs/mount_options.pm:118
#, c-format
msgid "Enable group disk quota accounting and optionally enforce limits"
msgstr ""
+"Ota ryhmän levynkäytön rajoitukset käyttöön ja vaihtoehtoisesti pakota "
+"rajoitukset"
#: fs/mount_options.pm:120
#, c-format
@@ -2400,13 +2387,12 @@ msgstr ""
"Älä päivitä inoodien käyttöaikaa tässä tiedostojärjestelmässä\n"
"(esim. nopeampaan uutisspoolin käyttöön nopeuttamaan uutispalvelimia)."
-#: fs/mount_options.pm:123
-#, fuzzy, c-format
+#: fs/mount_options.pm:123, c-format
msgid ""
"Update inode access times on this filesystem in a more efficient way\n"
"(e.g, for faster access on the news spool to speed up news servers)."
msgstr ""
-"Älä päivitä inoodien käyttöaikaa tässä tiedostojärjestelmässä\n"
+"Päivitä inoodien käyttöaika tehokkaammin tässä tiedostojärjestelmässä\n"
"(esim. nopeampaan uutisspoolin käyttöön nopeuttamaan uutispalvelimia)."
#: fs/mount_options.pm:126
@@ -2416,7 +2402,7 @@ msgid ""
"the -a option will not cause the file system to be mounted)."
msgstr ""
"Voidaan liittää vain erikseen määritettynä\n"
-"(esim. -a valitsin ei liitä tiedostojärjestelmää)."
+"(esim. valitsin -a ei liitä tiedostojärjestelmää)."
#: fs/mount_options.pm:129
#, c-format
@@ -2432,7 +2418,7 @@ msgid ""
msgstr ""
"Älä salli minkään binääritiedoston suoritusta tiedosto-\n"
"järjestelmässä. Tämä optio saattaa olla hyödyllinen\n"
-"palvelimelle jonka tiedostojärjestelmässä on binäärejä\n"
+"palvelimelle, jonka tiedostojärjestelmässä on binäärejä\n"
"muille kuin omalle arkkitehtuurille."
#: fs/mount_options.pm:135
@@ -2443,8 +2429,8 @@ msgid ""
"have suidperl(1) installed.)"
msgstr ""
"Älä salli aseta-käyttäjätunniste tai aseta-ryhmätunniste\n"
-"bittien vaikutusta. (Tämä vaikuttaa turvalliselta mutta on\n"
-"itse asiassa melko turvaton mikäli sinulla on suidperl(1)\n"
+"bittien vaikutusta. (Tämä vaikuttaa turvalliselta, mutta on\n"
+"itse asiassa melko turvaton mikäli järjestelmässä on suidperl(1)\n"
"asennettuna.)"
#: fs/mount_options.pm:139
@@ -2460,32 +2446,34 @@ msgstr "Kaikki luku/kirjoitustoiminnot tehdään synkronoidusti."
#: fs/mount_options.pm:143
#, c-format
msgid "Allow every user to mount and umount the file system."
-msgstr ""
+msgstr "Salli kaikkien käyttäjien liittää ja irrottaa tiedostojärjestelmä."
#: fs/mount_options.pm:145
#, c-format
msgid "Allow an ordinary user to mount the file system."
-msgstr ""
+msgstr "Salli tavallisen käyttäjän liittää tiedostojärjestelmä."
#: fs/mount_options.pm:147
#, c-format
msgid "Enable user disk quota accounting, and optionally enforce limits"
msgstr ""
+"Ota käyttäjien levynkäytön rajoitukset käyttöön ja vaihtoehtoisesti pakota "
+"rajoitukset"
#: fs/mount_options.pm:149
#, c-format
msgid "Support \"user.\" extended attributes"
-msgstr ""
+msgstr "Tue laajennettuja \"user.\"-ominaisuuksia"
#: fs/mount_options.pm:151
#, c-format
msgid "Give write access to ordinary users"
-msgstr "Salli kirjoitusoikeus tavallisille käyttäjille"
+msgstr "Anna kirjoitusoikeus tavallisille käyttäjille"
#: fs/mount_options.pm:153
#, c-format
msgid "Give read-only access to ordinary users"
-msgstr "Salli vain luku -oikeus tavallisille käyttäjille"
+msgstr "Anna vain luku -oikeus tavallisille käyttäjille"
#: fs/mount_point.pm:80
#, c-format
@@ -2495,7 +2483,7 @@ msgstr "Kahdentunut liitospiste %s"
#: fs/mount_point.pm:95
#, c-format
msgid "No partition available"
-msgstr "ei vapaita osioita"
+msgstr "Ei vapaita osioita"
#: fs/mount_point.pm:98
#, c-format
@@ -2518,8 +2506,8 @@ msgid ""
"Failed to check filesystem %s. Do you want to repair the errors? (beware, "
"you can lose data)"
msgstr ""
-"Tiedostojärjestelmän %s tarkistus epäonnistui. Haluatko korjata virheet?\n"
-"(huomioi: voit menettää tietoja)"
+"Tiedostojärjestelmän %s tarkistus epäonnistui. Korjataanko virheet?\n"
+"(HUOM: voit menettää tietoja)"
#: fs/partitioning.pm:78
#, c-format
@@ -2533,9 +2521,9 @@ msgid ""
"For this, create a partition (or click on an existing one).\n"
"Then choose action ``Mount point'' and set it to `/'"
msgstr ""
-"Sinulla tulee olla juuriosio.\n"
-"Tätä varten luo osio (tai klikkaa olemassa olevaa).\n"
-"Valitse sitten toiminto ``Liitospiste'' ja aseta se arvoon `/'"
+"Juuriosio tulee olla olemassa.\n"
+"Luo osio sitä varten (tai klikkaa olemassa olevaa)\n"
+"ja valitse \"Liitospiste\" ja aseta sille arvo \"/\"."
#: fs/partitioning_wizard.pm:56
#, c-format
@@ -2544,7 +2532,7 @@ msgid ""
"\n"
"Continue anyway?"
msgstr ""
-"Sinulla ei ole sivutusosiota\n"
+"Sivutusosiota ei ole olemassa.\n"
"\n"
"Jatka kuitenkin?"
@@ -2556,7 +2544,7 @@ msgstr "Käytä tyhjää tilaa"
#: fs/partitioning_wizard.pm:86
#, c-format
msgid "Not enough free space to allocate new partitions"
-msgstr "Ei tarpeeksi tilaa uusien osioiden luomiseksi"
+msgstr "Tilaa ei ole tarpeeksi uusien osioiden luomiseksi"
#: fs/partitioning_wizard.pm:94
#, c-format
@@ -2566,7 +2554,7 @@ msgstr "Käytä olemassa olevia osioita"
#: fs/partitioning_wizard.pm:96
#, c-format
msgid "There is no existing partition to use"
-msgstr "Ei ole olemassa olevaa osiota käytettäväksi"
+msgstr "Ei olemassa olevaa osiota käytettäväksi"
#: fs/partitioning_wizard.pm:103
#, c-format
@@ -2576,7 +2564,7 @@ msgstr "Käytä Microsoft Windows®-osiota loopback-tiedostona"
#: fs/partitioning_wizard.pm:106
#, c-format
msgid "Which partition do you want to use for Linux4Win?"
-msgstr "Mille osiolle haluat laittaa Linux4Win:n?"
+msgstr "Valitse osio Linux4Win:lle"
#: fs/partitioning_wizard.pm:108
#, c-format
@@ -2597,18 +2585,17 @@ msgstr "Sivutusosion koko Mt: "
#, c-format
msgid "There is no FAT partition to use as loopback (or not enough space left)"
msgstr ""
-"Ei ole FAT-osioita, jota voisi käyttää loopback-tiedostona (tai ei "
+"FAT-osiota ei löydy käytettäväksi loopback-tiedostona (tai levyllä ei ole "
"riittävästi vapaata tilaa)"
-#: fs/partitioning_wizard.pm:127
-#, fuzzy, c-format
+#: fs/partitioning_wizard.pm:127, c-format
msgid "Use the free space on a Microsoft Windows® partition"
-msgstr "Käytä tyhjää tilaa Windows-osiolla"
+msgstr "Käytä Microsoft Windows®-osion tyhjää tilaa"
#: fs/partitioning_wizard.pm:129
#, c-format
msgid "Which partition do you want to resize?"
-msgstr "Minkä osion kokoa haluat muuttaa?"
+msgstr "Valitse osio, jonka kokoa muutetaan"
#: fs/partitioning_wizard.pm:143
#, c-format
@@ -2616,13 +2603,13 @@ msgid ""
"The FAT resizer is unable to handle your partition, \n"
"the following error occurred: %s"
msgstr ""
-"FAT-tiedostojärjestelmän koon muuttaja ei osaa käsitellä osiotasi,\n"
-"seuraava virhe tapahtui: %s"
+"FAT-tiedostojärjestelmän koon muuttaja ei osaa käsitellä osiota,\n"
+"tapahtui virhe: %s"
#: fs/partitioning_wizard.pm:146
#, c-format
msgid "Computing the size of the Microsoft Windows® partition"
-msgstr "Lasken Microsoft Windows®-osion kokoa"
+msgstr "Lasketaan Microsoft Windows®-osion kokoa"
#: fs/partitioning_wizard.pm:153
#, c-format
@@ -2631,9 +2618,9 @@ msgid ""
"computer under Microsoft Windows®, run the ``defrag'' utility, then restart "
"the Mandriva Linux installation."
msgstr ""
-"Microsoft Windows®-osiosi on liian pirstoutunut, käynnistä koneesi "
-"uudelleen, mene Microsoft Windows®iin ja aja \"Levyn eheytys\" ensin, ja "
-"aloita Mandriva Linuxin asennus uudestaan sen jälkeen."
+"Microsoft Windows®-osio on liian pirstoutunut. Käynnistä kone "
+"uudelleen Windowsiin ja suorita \"Levyn eheytys\" ja aloita "
+"Mandriva Linuxin asennus sen jälkeen uudestaan."
#: fs/partitioning_wizard.pm:156
#, c-format
@@ -2657,15 +2644,16 @@ msgstr ""
"VAROITUS!\n"
"\n"
"\n"
-"DrakX aikoo nyt muuttaa Windows-osiosi kokoa.\n"
+"DrakX aikoo nyt muuttaa Windows-osion kokoa.\n"
"\n"
"\n"
-"Ole varovainen: tämä toimenpide on vaarallinen. Jos et ole vielä "
-"tarkistanut Windows-osioitasi, sinun tulisi poistua asennuksesta, ajaa "
-"kiintolevyjen tarkistus \"chkdsk c:\" Windowsissa komentokehotteessa (huomaa "
-"että graafisen \"scandisk\" ohjelman käyttö ei riitä), sekä mahdollisesti "
-"myös eheyttää levyt käyttäen defrag. Sen jälkeen voit aloittaa asennuksen "
-"uudelleen.Samalla suosittelemme ottamaan varmuuskopiot tärkeistä tiedoista.\n"
+"Ole varovainen, toimenpide on vaarallinen. Jos Windows-osiota "
+"ei ole vielä tarkistettu, tulisi asennuksesta poistua ja suorittaa "
+"kiintolevyjen tarkistus \"chkdsk c:\" Windowsin komentokehotteessa "
+"(graafisen \"scandisk\"-ohjelman käyttö ei riitä) sekä mahdollisesti "
+"myös eheyttää levyt käyttämällä ohjelmaa \"Levyn eheytys\". Tämän "
+"jälkeen asennus voidaan aloittaa uudelleen. Samalla suosittelemme "
+"ottamaan varmuuskopiot tärkeistä tiedoista.\n"
"\n"
"\n"
"Kun olet varma, paina %s."
@@ -2677,15 +2665,14 @@ msgstr ""
msgid "Next"
msgstr "Seuraava"
-#: fs/partitioning_wizard.pm:168
-#, fuzzy, c-format
+#: fs/partitioning_wizard.pm:168, c-format
msgid "Partitionning"
msgstr "Osiointi"
#: fs/partitioning_wizard.pm:168
#, c-format
msgid "Which size do you want to keep for Microsoft Windows® on partition %s?"
-msgstr "Kuinka paljon tilaa haluat säilyttää Microsoft Windows®ille osio %s?"
+msgstr "Kuinka paljon Microsoft Windows®:lle jätetään tilaa osiolle %s?"
# mat
#: fs/partitioning_wizard.pm:169
@@ -2696,7 +2683,7 @@ msgstr "Koko"
#: fs/partitioning_wizard.pm:178
#, c-format
msgid "Resizing Microsoft Windows® partition"
-msgstr "Muutan Microsoft Windows®-osion kokoa"
+msgstr "Muutetaan Microsoft Windows®-osion kokoa"
#: fs/partitioning_wizard.pm:183
#, c-format
@@ -2709,16 +2696,15 @@ msgid ""
"To ensure data integrity after resizing the partition(s), \n"
"filesystem checks will be run on your next boot into Microsoft Windows®"
msgstr ""
-"Tietojen yhtenäisyyden varmistamiseksi osio(ide)n koon\n"
-"muuttamisen jälkeen suoritetaan tiedostojärjestelmän\n"
-"tarkistus seuraavan kerran kun käynnistät Windowsin(TM)."
+"Tietojen yhtenäisyyden varmistamiseksi osion tai osioiden koon\n"
+"muuttamisen jälkeen suoritetaan tiedostojärjestelmän tarkistus,\n"
+"kun kun Microsoft Windows® käynnistetään seuraavan kerran."
#: fs/partitioning_wizard.pm:198
#, c-format
msgid "There is no FAT partition to resize (or not enough space left)"
msgstr ""
-"Ei ole FAT-osioita, joiden kokoa voisi muuttaa (tai ei riittävästi vapaata "
-"tilaa)"
+"Muutettavaa FAT-osiota ei löydy (tai osiolla ei ole tarpeeksi vapaata tilaa)"
#: fs/partitioning_wizard.pm:203
#, c-format
@@ -2733,7 +2719,9 @@ msgstr "Tyhjennä ja käytä koko levy"
#: fs/partitioning_wizard.pm:205
#, c-format
msgid "You have more than one hard drive, which one do you install linux on?"
-msgstr "Sinulla on enemmän kuin yksi kiintolevy. Mille haluat asentaa Linuxin?"
+msgstr ""
+"Tietokoneessa on useampi kuin yksi kiintolevy. Valitse kiintolevy, jolle "
+"Linux asennetaan."
# mat
#: fs/partitioning_wizard.pm:210 fsedit.pm:600
@@ -2757,13 +2745,13 @@ msgid ""
"You can now partition %s.\n"
"When you are done, do not forget to save using `w'"
msgstr ""
-"Voit nyt osioida kiintolevysi %s\n"
-"Kun olet valmis, älä unohda tallentaa asetuksia komennolla `w'"
+"Kiintolevy %s voidaan nyt osioida.\n"
+"Kun olet valmis, älä unohda tallentaa asetuksia komennolla \"w\"."
#: fs/partitioning_wizard.pm:269
#, c-format
msgid "I can not find any room for installing"
-msgstr "Ei ole tarpeeksi tilaa asentamiseen"
+msgstr "Asennukselle ei löydy tarpeeksi vapaata tilaa"
#: fs/partitioning_wizard.pm:278
#, c-format
@@ -2779,12 +2767,12 @@ msgstr "Osiointi epäonnistui: %s"
#: fs/type.pm:380
#, c-format
msgid "You can not use JFS for partitions smaller than 16MB"
-msgstr "Et voi käyttää JFS-tiedostojärjestelmää alle 16 Mt osioilla"
+msgstr "JFS-tiedostojärjestelmää ei voida käyttää alle 16 Mt osioilla"
#: fs/type.pm:381
#, c-format
msgid "You can not use ReiserFS for partitions smaller than 32MB"
-msgstr "Et voi käyttää ReiserFS-tiedostojärjestelmää alle 32 Mt osioilla"
+msgstr "ReiserFS-tiedostojärjestelmää ei voida käyttää alle 32 Mt osioilla"
#: fsedit.pm:24
#, c-format
@@ -2794,7 +2782,7 @@ msgstr "yksinkertainen"
#: fsedit.pm:28
#, c-format
msgid "with /usr"
-msgstr "erillinen '/usr' osio"
+msgstr "erillinen /usr-osio"
#: fsedit.pm:33
#, c-format
@@ -2802,9 +2790,10 @@ msgid "server"
msgstr "palvelin"
#: fsedit.pm:137
-#, c-format
+#, fuzzy, c-format
msgid "BIOS software RAID detected on disks %s. Activate it?"
msgstr ""
+"Levyltä %s löytyi BIOSin ohjelmistopohjainen RAID. Otetaanko se käyttöön?"
#: fsedit.pm:247
#, c-format
@@ -2818,16 +2807,16 @@ msgid ""
"Do you agree to lose all the partitions?\n"
msgstr ""
"Laitteen %s osiotaulua ei voida lukea. Se on liian vioittunut.\n"
-"Tästä voidaan yrittää jatkaa poistamalla kaikki virheelliset osiot\n"
-"(KAIKKI TIEDOT tuhotaan). Toinen vaihtoehto on, ettei DrakX:n anneta\n"
-"muokata osiotaulua.(virhe: %s)\n"
+"Poistamalla kaikki virheelliset osiot, ja niiden tiedot, voidaan jatkaa.\n"
+"Vaihtoehtoisesti DrakX voidaan käskeä olemaan koskematta osiotauluun.\n"
+"(Virhe: %s)\n"
"\n"
"Poistetaanko kaikki virheelliset osiot?\n"
#: fsedit.pm:425
#, c-format
msgid "Mount points must begin with a leading /"
-msgstr "Liitospisteiden pitää alkaa /-merkillä."
+msgstr "Liitospisteiden tulee alkaa /-merkillä."
#: fsedit.pm:426
#, c-format
@@ -2847,28 +2836,28 @@ msgid ""
"No bootloader is able to handle this without a /boot partition.\n"
"Please be sure to add a /boot partition"
msgstr ""
-"Olet valinnut ohjelmallisen RAID-osion juuriosioksi (/).\n"
-"Mikään käynnistyslataaja ei osaa käsitellä tätä ilman /boot -osiota.\n"
-"Lisää /boot -osio, jos haluat käyttää LILO:a tai GRUB:a"
+"Valittiin ohjelmallinen RAID-osio juuriosioksi (/).\n"
+"Käynnistyslataimet eivät osaa käsitellä tätä ilman /boot-osiota.\n"
+"On lisättävä /boot-osio, jotta voidaan käyttää LILO:a tai GRUB:a"
-#: fsedit.pm:437
-#, fuzzy, c-format
+#: fsedit.pm:437, c-format
msgid ""
"You can not use the LVM Logical Volume for mount point %s since it spans "
"physical volumes"
-msgstr "Et voi käyttää LVM loogista taltiota liitepisteelle %s"
+msgstr ""
+"LVM:n loogista taltiota ei voi käyttää liitospisteessä %s, koska se "
+"ylittää fyysiset taltiot"
-#: fsedit.pm:439
-#, fuzzy, c-format
+#: fsedit.pm:439, c-format
msgid ""
"You've selected the LVM Logical Volume as root (/).\n"
"The bootloader is not able to handle this when the volume spans physical "
"volumes.\n"
"You should create a /boot partition first"
msgstr ""
-"Olet valinnut LVM-osion juuriosioksi (/).\n"
-"Mikään käynnistyslataaja ei osaa käsitellä tätä ilman /boot -osiota.\n"
-"Lisää /boot -osio, jos haluat käyttää LILO:a tai GRUB:a"
+"Valittiin LVM-osio juuriosioksi (/).\n"
+"Käynnistyslataimet eivät osaa käsitellä tätä ilman /boot-osiota.\n"
+"On lisättävä /boot-osio, jotta voidaan käyttää LILO:a tai GRUB:a "
#: fsedit.pm:443 fsedit.pm:445
#, c-format
@@ -2881,13 +2870,14 @@ msgid ""
"You need a true filesystem (ext2/ext3, reiserfs, xfs, or jfs) for this mount "
"point\n"
msgstr ""
-"Tarvitset oikean tiedostojärjestelmän (ext2/ext3, ReiserFS, XFS tai JFS) "
+"Tarvotaan \"oikea\" tiedostojärjestelmä (ext2/ext3/ext4, ReiserFS, XFS tai "
+"JFS) "
"tälle liitospisteelle.\n"
#: fsedit.pm:451
#, c-format
msgid "You can not use an encrypted file system for mount point %s"
-msgstr "Et voi käyttää salattua tiedostojärjestelmää liitospisteelle %s"
+msgstr "Salattua tiedostojärjestelmää ei voi käyttää liitospisteelle %s"
#: fsedit.pm:516
#, c-format
@@ -2897,248 +2887,247 @@ msgstr "Vapaa tila ei riitä automaattiseen varaukseen"
#: fsedit.pm:518
#, c-format
msgid "Nothing to do"
-msgstr "Ei mitään tekemistä"
+msgstr "Ei mitään tehtävää"
-#: harddrake/data.pm:62
+#: harddrake/data.pm:73
#, c-format
msgid "SATA controllers"
msgstr "SATA-ohjaimet"
-#: harddrake/data.pm:71
+#: harddrake/data.pm:82
#, c-format
msgid "RAID controllers"
msgstr "RAID-ohjaimet"
-#: harddrake/data.pm:81
+#: harddrake/data.pm:92
#, c-format
msgid "(E)IDE/ATA controllers"
msgstr "(E)IDE/ATA-ohjaimet"
-#: harddrake/data.pm:92
-#, fuzzy, c-format
+#: harddrake/data.pm:103, c-format
msgid "Card readers"
-msgstr "Kortin malli:"
+msgstr "Kortinlukijat"
-#: harddrake/data.pm:101
+#: harddrake/data.pm:112
#, c-format
msgid "Firewire controllers"
msgstr "FireWire-ohjaimet"
-#: harddrake/data.pm:110
+#: harddrake/data.pm:121
#, c-format
msgid "PCMCIA controllers"
msgstr "PCMCIA-ohjaimet"
-#: harddrake/data.pm:119
+#: harddrake/data.pm:130
#, c-format
msgid "SCSI controllers"
msgstr "SCSI-ohjaimet"
-#: harddrake/data.pm:128
+#: harddrake/data.pm:139
#, c-format
msgid "USB controllers"
msgstr "USB-ohjaimet"
-#: harddrake/data.pm:137
+#: harddrake/data.pm:148
#, c-format
msgid "USB ports"
msgstr "USB-portit"
-#: harddrake/data.pm:146
+#: harddrake/data.pm:157
#, c-format
msgid "SMBus controllers"
msgstr "SMBus-ohjaimet"
-#: harddrake/data.pm:155
+#: harddrake/data.pm:166
#, c-format
msgid "Bridges and system controllers"
msgstr "Sillat ja järjestelmäohjaimet"
-#: harddrake/data.pm:167
+#: harddrake/data.pm:178
#, c-format
msgid "Floppy"
msgstr "Levyke"
-#: harddrake/data.pm:177
+#: harddrake/data.pm:188
#, c-format
msgid "Zip"
msgstr "Zip"
-#: harddrake/data.pm:193
+#: harddrake/data.pm:204
#, c-format
msgid "Hard Disk"
-msgstr "Levy"
+msgstr "Kiintolevy"
-#: harddrake/data.pm:203
+#: harddrake/data.pm:214
#, c-format
msgid "USB Mass Storage Devices"
-msgstr ""
+msgstr "USB-massamuistit"
-#: harddrake/data.pm:212
+#: harddrake/data.pm:223
#, c-format
msgid "CDROM"
msgstr "CD-ROM"
-#: harddrake/data.pm:222
+#: harddrake/data.pm:233
#, c-format
msgid "CD/DVD burners"
msgstr "Polttavat CD/DVD-asemat"
-#: harddrake/data.pm:232
+#: harddrake/data.pm:243
#, c-format
msgid "DVD-ROM"
msgstr "DVD-ROM"
-#: harddrake/data.pm:242
+#: harddrake/data.pm:253
#, c-format
msgid "Tape"
msgstr "Nauha"
-#: harddrake/data.pm:253
+#: harddrake/data.pm:264
#, c-format
msgid "AGP controllers"
-msgstr "AGP-ohjaimet"
+msgstr "AGP-näytönohjaimet"
-#: harddrake/data.pm:262
+#: harddrake/data.pm:273
#, c-format
msgid "Videocard"
msgstr "Näytönohjain"
-#: harddrake/data.pm:271
+#: harddrake/data.pm:282
#, c-format
msgid "DVB card"
-msgstr ""
+msgstr "Digi-TV-kortti"
-#: harddrake/data.pm:279
+#: harddrake/data.pm:290
#, c-format
msgid "Tvcard"
msgstr "TV-kortti"
-#: harddrake/data.pm:289
+#: harddrake/data.pm:300
#, c-format
msgid "Other MultiMedia devices"
-msgstr "Muu multimedialaite"
+msgstr "Muut multimedialaitteet"
-#: harddrake/data.pm:298
+#: harddrake/data.pm:309
#, c-format
msgid "Soundcard"
msgstr "Äänikortti"
-#: harddrake/data.pm:312
+#: harddrake/data.pm:323
#, c-format
msgid "Webcam"
-msgstr "Webbikamera"
+msgstr "Web-kamera"
-#: harddrake/data.pm:327
+#: harddrake/data.pm:338
#, c-format
msgid "Processors"
msgstr "Prosessorit"
-#: harddrake/data.pm:337
+#: harddrake/data.pm:348
#, c-format
msgid "ISDN adapters"
msgstr "ISDN-sovittimet"
-#: harddrake/data.pm:348
+#: harddrake/data.pm:359
#, c-format
msgid "USB sound devices"
-msgstr ""
+msgstr "USB-äänikortit"
-#: harddrake/data.pm:357
+#: harddrake/data.pm:368
#, c-format
msgid "Radio cards"
-msgstr ""
+msgstr "Radiokortit"
-#: harddrake/data.pm:366
+#: harddrake/data.pm:377
#, c-format
msgid "ATM network cards"
-msgstr ""
+msgstr "ATM-verkkokortit"
-#: harddrake/data.pm:375
+#: harddrake/data.pm:386
#, c-format
msgid "WAN network cards"
-msgstr ""
+msgstr "WAN-verkkokortit"
-#: harddrake/data.pm:384
+#: harddrake/data.pm:395
#, c-format
msgid "Bluetooth devices"
-msgstr ""
+msgstr "Bluetooth-laitteet"
-#: harddrake/data.pm:393
+#: harddrake/data.pm:404
#, c-format
msgid "Ethernetcard"
msgstr "Verkkokortti"
-#: harddrake/data.pm:410
+#: harddrake/data.pm:421
#, c-format
msgid "Modem"
msgstr "Modeemi"
-#: harddrake/data.pm:420
+#: harddrake/data.pm:431
#, c-format
msgid "ADSL adapters"
msgstr "ADSL-sovittimet"
-#: harddrake/data.pm:432
+#: harddrake/data.pm:443
#, c-format
msgid "Memory"
msgstr "Muisti"
-#: harddrake/data.pm:441
+#: harddrake/data.pm:452
#, c-format
msgid "Printer"
msgstr "Tulostin"
#. -PO: these are joysticks controllers:
-#: harddrake/data.pm:455
+#: harddrake/data.pm:466
#, c-format
msgid "Game port controllers"
-msgstr ""
+msgstr "Peliportin ohjain"
-#: harddrake/data.pm:464
+#: harddrake/data.pm:475
#, c-format
msgid "Joystick"
msgstr "Peliohjain"
-#: harddrake/data.pm:474
+#: harddrake/data.pm:485
#, c-format
msgid "Keyboard"
msgstr "Näppäimistö"
-#: harddrake/data.pm:488
+#: harddrake/data.pm:499
#, c-format
msgid "Tablet and touchscreen"
-msgstr ""
+msgstr "Kosketusnäytöt"
-#: harddrake/data.pm:497
+#: harddrake/data.pm:508
#, c-format
msgid "Mouse"
msgstr "Hiiri"
-#: harddrake/data.pm:512
+#: harddrake/data.pm:523
#, c-format
msgid "Biometry"
-msgstr ""
+msgstr "Biometria"
-#: harddrake/data.pm:520
+#: harddrake/data.pm:531
#, c-format
msgid "UPS"
msgstr "UPS"
-#: harddrake/data.pm:529
+#: harddrake/data.pm:540
#, c-format
msgid "Scanner"
msgstr "Kuvanlukija"
-#: harddrake/data.pm:540
+#: harddrake/data.pm:551
#, c-format
msgid "Unknown/Others"
msgstr "Tuntematon/Muut"
-#: harddrake/data.pm:570
+#: harddrake/data.pm:581
#, c-format
msgid "cpu # "
-msgstr "cpu # "
+msgstr "CPU # "
#: harddrake/sound.pm:300
#, c-format
@@ -3148,32 +3137,27 @@ msgstr "Odota hetki... Otetaan asetukset käyttöön"
#: harddrake/sound.pm:363
#, c-format
msgid "Enable PulseAudio"
-msgstr ""
+msgstr "Ota PulseAudio käyttöön"
#: harddrake/sound.pm:367
#, c-format
msgid "Automatic routing from ALSA to PulseAudio"
-msgstr ""
+msgstr "Automaattinen reititys ALSA:n ja PulseAudion välillä"
#: harddrake/sound.pm:372
#, c-format
msgid "Enable 5.1 sound with Pulse Audio"
-msgstr ""
+msgstr "Ota 5.1-äänet käyttöön PulseAudion kanssa"
#: harddrake/sound.pm:377
#, c-format
msgid "Enable user switching for audio applications"
-msgstr ""
-
-#: harddrake/sound.pm:404
-#, c-format
-msgid "Use Glitch-Free mode"
-msgstr ""
+msgstr "Salli käyttäjien kytkeä ääniohjelmia"
-#: harddrake/sound.pm:410
+#: harddrake/sound.pm:382
#, c-format
msgid "Reset sound mixer to default values"
-msgstr ""
+msgstr "Palauta äänimikserin asetukset oletusasetuksille"
#: harddrake/sound.pm:387
#, c-format
@@ -3191,8 +3175,8 @@ msgid ""
"There's no known OSS/ALSA alternative driver for your sound card (%s) which "
"currently uses \"%s\""
msgstr ""
-"Tunnettua vaihtoehtoista OSS/ALSA ajuria äänikortillesi (%s), joka tällä "
-"hetkellä käyttää \"%s\", ei ole"
+"Tunnettua vaihtoehtoista OSS- tai ALSA-ajuria äänikortille \"%s\" ei ole. "
+"Käytössä oleva ajuri: %s"
#: harddrake/sound.pm:402
#, c-format
@@ -3204,10 +3188,9 @@ msgstr "Ääniasetukset"
msgid ""
"Here you can select an alternative driver (either OSS or ALSA) for your "
"sound card (%s)."
-msgstr ""
-"Täällä voit valita vaihtoehtoisen ajurin (OSS tai ALSA) äänikortillesi (%s)."
+msgstr "Valitse vaihtoehtoinen OSS- tai ALSA-ajuri äänikortille \"%s\"."
-#. -PO: here the first %s is either "OSS" or "ALSA",
+#. -PO: here the first %s is either "OSS" or "ALSA",
#. -PO: the second %s is the name of the current driver
#. -PO: and the third %s is the name of the default driver
#: harddrake/sound.pm:409
@@ -3220,7 +3203,7 @@ msgid ""
msgstr ""
"\n"
"\n"
-"Käytät tällä hetkellä ajuria %s\"%s\" (vakioajuri kortillesi on \"%s\")."
+"Käytössä on %s-ajuri %s. (Oletusajuri: %s)"
#: harddrake/sound.pm:411
#, c-format
@@ -3244,7 +3227,7 @@ msgstr ""
"OSS (Open Sound System, eli avoin äänijärjestelmä) oli ensimmäinen ääni-"
"API.\n"
"Se on käyttöjärjestelmäriippumaton ääni-API (se on saatavilla useimmille\n"
-"unix-järjestelmille), mutta se aika perustasoa ja rajoitettu API.\n"
+"Unix-järjestelmille), mutta se aika perustasoa ja rajoitettu API.\n"
"Sen lisäksi, OSS-ajureissa kaikki 'kehittävät pyörän uudelleen'.\n"
"\n"
"ALSA (Advanced Linux Sound Architecture, eli Linuxin edistynyt\n"
@@ -3272,11 +3255,11 @@ msgid ""
"\n"
"The new \"%s\" driver will only be used on next bootstrap."
msgstr ""
-"Vanha \"%s\" ajuri on 'mustalla listalla'.\n"
+"Vanha ajuri \"%s\" \"mustalla listalla\".\n"
"\n"
-"Sen on raportoitu kaatavan ytimen kun sitä poistetaan käytöstä.\n"
+"Sen on raportoitu kaatavan ytimen, kun sitä poistetaan käytöstä.\n"
"\n"
-"Uusi \"%s\" ajuri otetaan käyttöön seuraavassa käynnistyksessä."
+"Uusi ajuri \"%s\" otetaan käyttöön seuraavassa käynnistyksessä."
#: harddrake/sound.pm:447
#, c-format
@@ -3289,8 +3272,8 @@ msgid ""
"There's no free driver for your sound card (%s), but there's a proprietary "
"driver at \"%s\"."
msgstr ""
-"Äänikortillesi (%s) ei löydy vapaata ajuria, mutta patenttisuojattu ajuri "
-"löytyy osoitteesta \"%s\"."
+"Äänikortille \"%s\" ei löydy vapaata ajuria, mutta suljettu ajuri löytyy "
+"osoitteesta \"%s\"."
#: harddrake/sound.pm:451
#, c-format
@@ -3373,10 +3356,10 @@ msgid ""
"\n"
"The current driver for your \"%s\" sound card is \"%s\" "
msgstr ""
-"Jos todellakin uskot tietäväsi mikä ajuri on oikea äänikortillesi \n"
+"Jos todellakin uskot tietäväsi, mikä ajuri on oikea äänikortillesi,\n"
"voit valita yhden yllä olevasta listasta.\n"
"\n"
-"Nykyinen ajuri äänikortillesi \"%s\" on \"%s\" "
+"Nykyinen ajuri äänikortille \"%s\" on \"%s\" "
#: harddrake/v4l.pm:12
#, c-format
@@ -3406,10 +3389,11 @@ msgid ""
"If your card is misdetected, you can force the right tuner and card types "
"here. Just select your tv card parameters if needed."
msgstr ""
-"Useimmille nykyisille TV-korteille GNU/Linux ytimen bttv-moduuli tunnistaa "
+"GNU/Linux-ytimen bttv-moduuli tunnistaa useimmille nykyisille TV-korteille "
"automaattisesti oikeat parametrit.\n"
-"Jos korttisi on tunnistettu väärin, voit pakottaa oikean vastaanottimen sekä "
-"kortin tyypin täällä. Valitse TV-korttisi parametrit tarvittaessa."
+"Jos kortti on tunnistettu väärin, oikea vastaanotin sekä kortin tyyppi "
+"voidaan "
+"pakottaa täällä. Valitse TV-korttisi parametrit vain tarvittaessa."
#: harddrake/v4l.pm:478
#, c-format
@@ -3477,27 +3461,27 @@ msgstr "Tiedostoa ei valittu"
#: interactive/curses.pm:560 ugtk2.pm:876
#, c-format
msgid "You have chosen a directory, not a file"
-msgstr "Olet valinnut hakemiston, eikä tiedostoa"
+msgstr "Valittiin hakemisto, ei tiedostoa"
#: interactive/curses.pm:562 ugtk2.pm:878
#, c-format
msgid "No such directory"
-msgstr "Hakemisto ei ole olemassa"
+msgstr "Hakemistoa ei ole olemassa"
#: interactive/curses.pm:562 ugtk2.pm:878
#, c-format
msgid "No such file"
-msgstr "Ei tiedostoa"
+msgstr "Tiedostoa ei ole olemassa"
#: interactive/gtk.pm:570
#, c-format
msgid "Beware, Caps Lock is enabled"
-msgstr ""
+msgstr "HUOM: Caps Lock on käytössä"
#: interactive/stdio.pm:29 interactive/stdio.pm:154
#, c-format
msgid "Bad choice, try again\n"
-msgstr "Huono valinta, yritä uudelleen\n"
+msgstr "Väärä valinta, yritä uudelleen\n"
#: interactive/stdio.pm:30 interactive/stdio.pm:155
#, c-format
@@ -3510,7 +3494,7 @@ msgid ""
"Entries you'll have to fill:\n"
"%s"
msgstr ""
-"Kohdat, jotka sinun pitää täyttää:\n"
+"Kohdat, jotka pitää täyttää:\n"
"%s"
#: interactive/stdio.pm:70
@@ -3550,7 +3534,7 @@ msgid ""
"or just hit Enter to proceed.\n"
"Your choice? "
msgstr ""
-"Valitse ensimmäinen numero 10-alueella, jota haluat muokata,\n"
+"Valitse ensimmäinen numero 10-alueella, jota muokataan,\n"
"tai paina vain Enter jatkaaksesi.\n"
"Valintasi? "
@@ -3560,7 +3544,7 @@ msgid ""
"=> Notice, a label changed:\n"
"%s"
msgstr ""
-"=> Huomaa, nimike vaihtui:\n"
+"=> Huomaa, että nimi vaihtui:\n"
"%s"
#: interactive/stdio.pm:151
@@ -3819,7 +3803,7 @@ msgstr "Costa Rica"
#: lang.pm:258
#, c-format
msgid "Serbia & Montenegro"
-msgstr "Serbia & Montenegro"
+msgstr "Serbia ja Montenegro"
#: lang.pm:259
#, c-format
@@ -4134,7 +4118,7 @@ msgstr "Kirgistan"
#: lang.pm:321
#, c-format
msgid "Cambodia"
-msgstr "Kambodza"
+msgstr "Kambodža"
#: lang.pm:322
#, c-format
@@ -4234,7 +4218,7 @@ msgstr "Libya"
#: lang.pm:341
#, c-format
msgid "Morocco"
-msgstr "Marocco"
+msgstr "Marokko"
#: lang.pm:342
#, c-format
@@ -4594,7 +4578,7 @@ msgstr "Turks ja Caicossaaret"
#: lang.pm:413
#, c-format
msgid "Chad"
-msgstr "Tsad"
+msgstr "Tšad"
#: lang.pm:414
#, c-format
@@ -4780,7 +4764,7 @@ msgstr ""
#: lvm.pm:141
#, c-format
msgid "Physical volume %s is still in use"
-msgstr ""
+msgstr "Fyysinen osio %s on edelleen käytössä"
#: lvm.pm:151
#, c-format
@@ -4791,9 +4775,10 @@ msgstr "Poista ensin loogiset osiot\n"
#, c-format
msgid "The bootloader can't handle /boot on multiple physical volumes"
msgstr ""
+"Käynnistyslatain ei osaa käsitellä /boot-osiota tai hakemistoa usealla "
+"fyysisellä osiolla"
-#: messages.pm:11
-#, fuzzy, c-format
+#: messages.pm:11, c-format
msgid ""
"Introduction\n"
"\n"
@@ -5167,7 +5152,7 @@ msgstr ""
"court. As a last \n"
"resort, the dispute will be referred to the appropriate Courts of Law of "
"Paris - France.\n"
-"For any question on this document, please contact Mandriva S.A. \n"
+"For any question on this document, please contact Mandriva S.A."
#. -PO: keep the double empty lines between sections, this is formatted a la LaTeX
#: messages.pm:90
@@ -5317,20 +5302,19 @@ msgstr ""
"Poista käynnistyslevyke ja paina Enter käynnistääksesi koneesi uudelleen.\n"
"\n"
"\n"
-"Löydät tähän Mandriva Linuxin versioon saatavilla olevat korjaukset ja\n"
-"korjattujen virheiden listan osoitteesta:\n"
+"Tähän Mandriva Linuxin versioon saatavilla olevat korjaukset ja\n"
+"korjattujen virheiden lista löytyy osoitteesta:\n"
"\n"
"\n"
"%s\n"
"\n"
"\n"
-"Järjestelmän asettamisesta saat tietoja virallisen Mandriva Linuxin\n"
+"Järjestelmän asettamisesta löytyy tietoja virallisen Mandriva Linuxin\n"
"käyttäjäoppaan jälkiasennuskappaleesta."
-#: modules/interactive.pm:19
-#, fuzzy, c-format
+#: modules/interactive.pm:19, c-format
msgid "This driver has no configuration parameter!"
-msgstr "UPS ajurin asetukset"
+msgstr "Ajurilla ei ole muutettavia asetusparametreja"
#: modules/interactive.pm:22
#, c-format
@@ -5340,7 +5324,7 @@ msgstr "Moduulien asetukset"
#: modules/interactive.pm:22
#, c-format
msgid "You can configure each parameter of the module here."
-msgstr "Voit määrittää moduulin jokaisen parametrin täällä."
+msgstr "Muokkaa moduulin parametreja."
#: modules/interactive.pm:64
#, c-format
@@ -5350,7 +5334,7 @@ msgstr "Löydetty %s liitäntää"
#: modules/interactive.pm:65
#, c-format
msgid "Do you have another one?"
-msgstr "Onko sinulla muita?"
+msgstr "Onko tietokoneessa muita?"
#: modules/interactive.pm:66
#, c-format
@@ -5365,34 +5349,34 @@ msgstr "Katso laitteistotietoja"
#: modules/interactive.pm:83
#, c-format
msgid "Installing driver for USB controller"
-msgstr "Asennetaan ajuria USB ohjaimelle"
+msgstr "Asennetaan ajuria USB-ohjaimelle"
#: modules/interactive.pm:84
#, c-format
msgid "Installing driver for firewire controller %s"
-msgstr "Asennetaan ajuria firewireohjaimelle %s"
+msgstr "Asennetaan ajuria FireWire-ohjaimelle %s"
#: modules/interactive.pm:85
#, c-format
msgid "Installing driver for hard drive controller %s"
-msgstr "Asennetaan ajuria kovalevyohjaimelle %s"
+msgstr "Asennetaan ajuria kiintolevyohjaimelle %s"
#: modules/interactive.pm:86
#, c-format
msgid "Installing driver for ethernet controller %s"
-msgstr "Asennetaan ajuria verkkoohjaimelle %s"
+msgstr "Asennetaan ajuria verkkokortille %s"
#. -PO: the first %s is the card type (scsi, network, sound,...)
#. -PO: the second is the vendor+model name
#: modules/interactive.pm:97
#, c-format
msgid "Installing driver for %s card %s"
-msgstr "Asennetaan ajuria %s ohjaimelle %s"
+msgstr "Asennetaan ajuria %s-ohjaimelle \"%s\""
#: modules/interactive.pm:100
#, c-format
msgid "Configuring Hardware"
-msgstr ""
+msgstr "Määritellään laitteistoa"
#: modules/interactive.pm:111
#, c-format
@@ -5400,8 +5384,9 @@ msgid ""
"You may now provide options to module %s.\n"
"Note that any address should be entered with the prefix 0x like '0x123'"
msgstr ""
-"Voit nyt määrittää moduulin %s optiot.\n"
-"Huomaa että osoite täytyy määrittää '0x' etuliitteellä, esim. 0x123."
+"Moduulin %s asetukset voidaan nyt määritellä.\n"
+"Huomaa, että osoite täytyy määrittää etuliitteellä '0x' varustettuna, esim. "
+"0x123."
#: modules/interactive.pm:117
#, c-format
@@ -5410,20 +5395,20 @@ msgid ""
"Options are in format ``name=value name2=value2 ...''.\n"
"For instance, ``io=0x300 irq=7''"
msgstr ""
-"Voit antaa lisäasetuksia moduulille %s.\n"
-"Asetukset ovat muotoa ``nimi=arvo nimi2=arvo2 ...''.\n"
-"Esimerkiksi, ``io=0x300 irq=7''"
+"Moduulille %s voidaan nyt antaa lisäasetuksia.\n"
+"Asetukset ovat muotoa \"nimi=arvo nimi2=arvo2 ...\".\n"
+"Esim. \"io=0x300 irq=7\""
#: modules/interactive.pm:119
#, c-format
msgid "Module options:"
-msgstr "Moduulin optiot:"
+msgstr "Moduulin asetukset:"
#. -PO: the %s is the driver type (scsi, network, sound,...)
#: modules/interactive.pm:132
#, c-format
msgid "Which %s driver should I try?"
-msgstr "Mitä %s ajuria kokeillaan?"
+msgstr "Mitä %s-ajuria kokeillaan?"
#: modules/interactive.pm:141
#, c-format
@@ -5436,10 +5421,11 @@ msgid ""
"should\n"
"not cause any damage."
msgstr ""
-"Joissakin tapauksissa %s ajuri tarvitsee lisätietoja toimiakseen kunnolla,\n"
-"joskin tavallisesti se toimii hyvin ilmankin. Haluatko antaa ajurille\n"
-"lisämääreitä vai annatko sen itse etsiä tarvitsemansa tiedot? Joskus haku\n"
-"voi jumiuttaa tietokoneen, mutta sen ei pitäisi aiheuttaa vahinkoa."
+"Joissakin tapauksissa %s-ajuri tarvitsee lisätietoja toimiakseen kunnolla,\n"
+"joskin tavallisesti se toimii hyvin ilmankin. Annetaanko ajurille "
+"lisämääreitä\n"
+"vai annetaanko sen itse etsiä tarvitsemansa tiedot? Joskus haku voi\n"
+"jumiuttaa tietokoneen, mutta sen ei pitäisi aiheuttaa vahinkoa."
#: modules/interactive.pm:145
#, c-format
@@ -5458,12 +5444,12 @@ msgid ""
"Do you want to try again with other parameters?"
msgstr ""
"Moduulin %s lataaminen epäonnistui.\n"
-"Haluatko yrittää muilla asetuksilla?"
+"Yritetäänkö muilla asetuksilla?"
#: partition_table.pm:411
#, c-format
msgid "mount failed: "
-msgstr "liittäminen epäonnistui: "
+msgstr "Liittäminen epäonnistui: "
#: partition_table.pm:523
#, c-format
@@ -5477,8 +5463,8 @@ msgid ""
"The only solution is to move your primary partitions to have the hole next "
"to the extended partitions."
msgstr ""
-"Sinulla on reikä osiotaulussasi eikä sitä voida käyttää.\n"
-"Ainoa ratkaisu on siirtää primääriosioita siten että reikä on ennen "
+"Osiotaulussa on reikä, eikä sitä voida käyttää.\n"
+"Ainoa ratkaisu on siirtää ensisijaisia osioita siten, että reikä on ennen "
"laajennettuja osioita"
#: partition_table/raw.pm:285
@@ -5489,57 +5475,56 @@ msgid ""
"It means writing anything on the disk will end up with random, corrupted "
"data."
msgstr ""
-"Jotakin kamalaa on tapahtunut kiintolevyllesi.\n"
+"Kiintolevylle on tapahtunut jotakin kamalaa.\n"
"Tiedon oikeellisuuden tarkistus epäonnistui.\n"
-"Tämä tarkoittaa että kaikki asemalle kirjoitettu\n"
+"Tämä tarkoittaa, että kaikki asemalle kirjoitettu\n"
"tieto muuttuu tunnistamattomaksi."
#: pkgs.pm:236 pkgs.pm:239 pkgs.pm:248
#, c-format
msgid "Unused packages removal"
-msgstr ""
+msgstr "Käyttämättömien pakettien poisto"
#: pkgs.pm:236
#, c-format
msgid "Finding unused hardware packages..."
-msgstr ""
+msgstr "Etsitään käyttämättömiä laitteisto-paketteja..."
#: pkgs.pm:239
#, c-format
msgid "Finding unused localization packages..."
-msgstr ""
+msgstr "Etsitään käyttämättömiä kieli-paketteja..."
#: pkgs.pm:249
#, c-format
msgid ""
"We have detected that some packages are not needed for your system "
"configuration."
-msgstr ""
+msgstr "Havaittiin, että jotkut asennetut paketit ovat tarpeettomia."
#: pkgs.pm:250
#, c-format
msgid "We will remove the following packages, unless you choose otherwise:"
-msgstr ""
+msgstr "Paketit poistetaan, ellei toisin määrätä:"
-#: pkgs.pm:253 pkgs.pm:254
-#, fuzzy, c-format
+#: pkgs.pm:253 pkgs.pm:254, c-format
msgid "Unused hardware support"
-msgstr "ota radio-tuki käyttöön"
+msgstr "Käyttämättömät laitteistopaketit"
#: pkgs.pm:257 pkgs.pm:258
#, c-format
msgid "Unused localization"
-msgstr ""
+msgstr "Käyttämättömät kieli-paketit"
#: raid.pm:42
#, c-format
msgid "Can not add a partition to _formatted_ RAID %s"
-msgstr "Ei voitu lisätä osiota _alustetulle_ RAID:lle %s"
+msgstr "_Alustetulle_ RAID:lle (%s) ei voitu lisätä osiota."
#: raid.pm:157
#, c-format
msgid "Not enough partitions for RAID level %d\n"
-msgstr "Ei riittävästi osioita RAID tasolle %d\n"
+msgstr "RAID-tasolle %d ei löydy tarpeeksi käytettäviä osioita\n"
#: scanner.pm:96
#, c-format
@@ -5560,46 +5545,41 @@ msgstr ""
#: scanner.pm:121
#, c-format
msgid "Could not set permissions of firmware file %s!"
-msgstr "Firmware-tiedoston %s oikeuksia ei voitu asettaa!"
+msgstr "Ei voitu asettaa firmware-tiedoston %s oikeuksia!"
#: scanner.pm:200
#, c-format
msgid "Scannerdrake"
-msgstr "Scannerdrake"
+msgstr "ScannerDrake"
#: scanner.pm:201
#, c-format
msgid "Could not install the packages needed to share your scanner(s)."
-msgstr "Kuvanlukijasi jakamiseen tarvittavia paketteja ei voitu asentaa."
+msgstr "Kuvanlukijan jakamiseen tarvittavia paketteja ei voitu asentaa."
#: scanner.pm:202
#, c-format
msgid "Your scanner(s) will not be available for non-root users."
-msgstr "Kuvanlukijasi ei ole käytettävissä muille kuin pääkäyttäjälle."
+msgstr "Kuvanlukija ei ole käytettävissä muille kuin pääkäyttäjälle."
-#: security/help.pm:11
-#, fuzzy, c-format
+#: security/help.pm:11, c-format
msgid "Accept bogus IPv4 error messages."
-msgstr "Hyväksy virheelliset IPv4 virheviestit"
+msgstr "Hyväksy virheelliset IPv4-virheviestit."
-#: security/help.pm:13
-#, fuzzy, c-format
+#: security/help.pm:13, c-format
msgid "Accept broadcasted icmp echo."
-msgstr "Hyväksy kuulutetut icmp echo viestit"
+msgstr "Hyväksy kuulutetut \"icmp echo\"-viestit."
-#: security/help.pm:15
-#, fuzzy, c-format
+#: security/help.pm:15, c-format
msgid "Accept icmp echo."
-msgstr "Salli icmp echo"
+msgstr "Salli \"icmp echo\"."
-#: security/help.pm:17
-#, fuzzy, c-format
+#: security/help.pm:17, c-format
msgid "Allow autologin."
-msgstr "Salli / Estä automaattinen sisäänkirjautuminen."
+msgstr "Salli automaattinen kirjautuminen."
#. -PO: here "ALL" is a value in a pull-down menu; translate it the same as "ALL" is
-#: security/help.pm:21
-#, fuzzy, c-format
+#: security/help.pm:21, c-format
msgid ""
"If set to \"ALL\", /etc/issue and /etc/issue.net are allowed to exist.\n"
"\n"
@@ -5607,49 +5587,43 @@ msgid ""
"\n"
"Else only /etc/issue is allowed."
msgstr ""
-"Jos \"KAIKKI\" asetettu, salli /etc/issue ja /etc/issue.net olemassaolo.\n"
+"Jos valittu asetus \"KAIKKI\", tiedostojen /etc/issue ja /etc/issue.net "
+"olemassaolo sallitaan.\n"
"\n"
-"Jos \"EI\" asetettu, kumpaakaan ei sallita.\n"
+"Jos valittu asetus \"EI\", kummankaan tiedoston olomassaoloa ei sallita.\n"
"\n"
-"Muutoin sallitaan ainoastaan/etc/issue."
+"Muutoin sallitaan ainoastaan tiedosto /etc/issue."
-#: security/help.pm:27
-#, fuzzy, c-format
+#: security/help.pm:27, c-format
msgid "Allow reboot by the console user."
-msgstr "Salli / Estä 'reboot' konsolin käyttäjille."
+msgstr "Salli konsolikäyttäjän käynnistää kone uudelleen."
-#: security/help.pm:29
-#, fuzzy, c-format
+#: security/help.pm:29, c-format
msgid "Allow remote root login."
-msgstr "Salli root sisäänkirjautuminen etäyhteyksiltä."
+msgstr "Salli pääkäyttäjän kirjautuminen etänä."
-#: security/help.pm:31
-#, fuzzy, c-format
+#: security/help.pm:31, c-format
msgid "Allow direct root login."
-msgstr "Salli / Estä root sisäänkirjautuminen paikallisesti."
+msgstr "Salli pääkäyttäjän kirjautuminen paikallisesti."
-#: security/help.pm:33
-#, fuzzy, c-format
+#: security/help.pm:33, c-format
msgid ""
"Allow the list of users on the system on display managers (kdm and gdm)."
-msgstr ""
-"Salli / Estä järjestelmän käyttäjien listaus näytönhallinnassa (kdm ja gdm)."
+msgstr "Salli käyttäjien listaus näytönhallinnassa (kdm ja gdm)."
-#: security/help.pm:35
-#, fuzzy, c-format
+#: security/help.pm:35, c-format
msgid ""
"Allow to export display when\n"
"passing from the root account to the other users.\n"
"\n"
"See pam_xauth(8) for more details.'"
msgstr ""
-"Salli/Kiellä näytön edelleenohjaus\n"
-"kun siirrytään root-tilistä muihin käyttäjiin.\n"
+"Salli näytön edelleenohjaus,\n"
+"kun siirrytään root-tililtä muille tileille.\n"
"\n"
-"Katso pam_xauth(8) saadaaksesi lisää tietoa."
+"Katso pam_xauth(8) saadaksesi lisää tietoa."
-#: security/help.pm:40
-#, fuzzy, c-format
+#: security/help.pm:40, c-format
msgid ""
"Allow X connections:\n"
"\n"
@@ -5659,13 +5633,13 @@ msgid ""
"\n"
"- \"None\" (no connection)."
msgstr ""
-"Salli / Estä X-yhteydet:\n"
+"Salli X-yhteydet:\n"
"\n"
-"- KAIKKI (kaikki yhteydet sallitaan)\n"
+"- \"KAIKKI\" (kaikki yhteydet sallitaan),\n"
"\n"
-"- PAIKALLINEN (ainoastaan paikalliset yhteydet)\n"
+"- \"PAIKALLINEN\" (ainoastaan paikalliset yhteydet),\n"
"\n"
-"- EI (ei yhteyttä)."
+"- \"EI\" (ei yhteyttä)."
#: security/help.pm:48
#, c-format
@@ -5677,8 +5651,7 @@ msgstr ""
"TCP-portissa 6000 vai ei."
#. -PO: here "ALL", "Local" and "None" are values in a pull-down menu; translate them the same as they're
-#: security/help.pm:53
-#, fuzzy, c-format
+#: security/help.pm:53, c-format
msgid ""
"Authorize:\n"
"\n"
@@ -5695,11 +5668,11 @@ msgstr ""
"Salli:\n"
"\n"
"- kaikki palvelut joita ohjataan tcp_wrappers:ien kautta (katso hosts.deny"
-"(5)) jos \"KAIKKI\",\n"
+"(5)) jos valittuna on asetus \"KAIKKI\",\n"
"\n"
-"- vain paikalliset jos \"PAIKALLINEN\",\n"
+"- vain paikalliset palvelut, jos valittuna on asetus \"PAIKALLINEN\",\n"
"\n"
-"- ei yhtään jos \"EI\". \n"
+"- ei mitään palvelua, jos valittuna on asetus \"EI\". \n"
"\n"
"Salliaksesi tarvitsemasi palvelut, käytä /etc/hosts.allow (katso hosts.allow"
"(5))."
@@ -5716,107 +5689,97 @@ msgid ""
"add a service if it is present in the file during the installation of\n"
"packages."
msgstr ""
-"Jos SERVER_LEVEL (tai SECURE_LEVEL sen puuttuessa) on\n"
-"korkeampi kuin 3 (kolme) tiedostossa '/etc/security/msec/security.conf',\n"
-"luodaan symlinkin '/etc/security/msec/server' :istä \n"
-"'/etc/security/msec/server.<SERVER_LEVEL>'\n"
+"Jos SERVER_LEVEL (tai SECURE_LEVEL sen puuttuessa) on määritelty\n"
+"tiedostossa /etc/security/msec/security.conf korkeammaksi kuin 3 (kolme),\n"
+"luodaan linkki tiedostosta /etc/security/msec/server\n"
+"tiedostoon /etc/security/msec/server.<SERVER_LEVEL>.\n"
"\n"
-"'chkconfig --add' käyttää '/etc/security/msec/server' päättääkseen jos\n"
-"palvelu pitää asettaa vai ei asennuksen aikana."
+"Komento \"chkconfig --add\" käyttää tiedostoa /etc/security/msec/server\n"
+"päättääkseen lisätäänkö palvelu asentamisen yhteydessä."
-#: security/help.pm:72
-#, fuzzy, c-format
+#: security/help.pm:72, c-format
msgid ""
"Enable crontab and at for users.\n"
"\n"
"Put allowed users in /etc/cron.allow and /etc/at.allow (see man at(1)\n"
"and crontab(1))."
msgstr ""
-"Ota käyttöön / poista käytöstä crontab ja at käyttäjille.\n"
+"Ota \"crontab\" ja \"at\" käyttöön kaikille käyttäjille.\n"
"\n"
-"Laita hyväksytyt käyttäjät tiedostoihin '/etc/cron.allow' ja '/etc/at."
-"allow'.\n"
-"(katso man at(1) ja crontab(1))."
+"Lisää sallitut käyttäjät tiedostoihin /etc/cron.allow ja /etc/at.allow.\n"
+"(katso \"man at(1)\" ja \"man crontab(1)\")."
-#: security/help.pm:77
-#, fuzzy, c-format
+#: security/help.pm:77, c-format
msgid "Enable syslog reports to console 12"
-msgstr "Ota käyttöön / poista käytöstä syslog:n raportin ohjaus konsoliin 12."
+msgstr "Ota käyttöön syslog-raporttien ohjaus konsoliin 12."
-#: security/help.pm:79
-#, fuzzy, c-format
+#: security/help.pm:79, c-format
msgid ""
"Enable name resolution spoofing protection. If\n"
"\"%s\" is true, also reports to syslog."
msgstr ""
-"Ota käyttöön / poista käytöstä nimiselvityksen spoofing suojaus.\n"
-"Jos \"%s\" on tosi, raportoidaan myös syslog:iin."
+"Ota käyttöön nimienselvityksen \"spoofing\"-suojaus.\n"
+"Jos \"%s\" on tosi, raportoidaan ne myös syslogiin."
#: security/help.pm:80
#, c-format
msgid "Security Alerts:"
msgstr "Tietoturvahälytykset:"
-#: security/help.pm:82
-#, fuzzy, c-format
+#: security/help.pm:82, c-format
msgid "Enable IP spoofing protection."
-msgstr "Ota käyttöön IP spoofing suojaus."
+msgstr "Ota käyttöön \"IP spoofing\"-suojaus."
-#: security/help.pm:84
-#, fuzzy, c-format
+#: security/help.pm:84, c-format
msgid "Enable libsafe if libsafe is found on the system."
-msgstr "Ota käyttöön libsafe jos se löytyy järjestelmästä."
+msgstr "Ota käyttöön libsafe, jos se löytyy järjestelmästä."
-#: security/help.pm:86
-#, fuzzy, c-format
+#: security/help.pm:86, c-format
msgid "Enable the logging of IPv4 strange packets."
-msgstr "Ota käyttöön epätavallisten IPv4 pakettien kirjaaminen lokiin"
+msgstr "Kirjaa epätavalliset IPv4-paketit lokiin."
-#: security/help.pm:88
-#, fuzzy, c-format
+#: security/help.pm:88, c-format
msgid "Enable msec hourly security check."
-msgstr "Ota käyttöön msec turvallisuustarkistukset joka tunti."
+msgstr ""
+"Ota käyttöön kerran tunnissa suoritettavat msec-turvallisuustarkistukset."
-#: security/help.pm:90
-#, fuzzy, c-format
+#: security/help.pm:90, c-format
msgid ""
"Enable su only from members of the wheel group. If set to no, allows su from "
"any user."
msgstr ""
-"Salli 'su' vain 'wheel' ryhmään kuuluville jäsenille, tai salli komento "
-"kaikille."
+"Salli komento \"su\" vain ryhmän \"wheel\" käyttäjille. (Jos ei käytössä, "
+"kaikilla "
+"on oikeus käyttää komentoa \"su\".)"
#: security/help.pm:92
#, c-format
msgid "Use password to authenticate users."
msgstr "Käytä salasanoja käyttäjien tunnistamiseen."
-#: security/help.pm:94
-#, fuzzy, c-format
+#: security/help.pm:94, c-format
msgid "Activate ethernet cards promiscuity check."
-msgstr "Ota käyttöön / poista käytöstä verkkokorttien 'promiscuous' tarkistus."
+msgstr "Ota käyttöön verkkokorttien \"promiscuous\"-tarkistus."
-#: security/help.pm:96
-#, fuzzy, c-format
+#: security/help.pm:96, c-format
msgid "Activate daily security check."
-msgstr "Ota käyttöön / poista käytöstä päivittäiset turvallisuustarkistukset."
+msgstr "Ota käyttöön päivittäiset turvallisuustarkistukset."
-#: security/help.pm:98
-#, fuzzy, c-format
+#: security/help.pm:98, c-format
msgid "Enable sulogin(8) in single user level."
-msgstr "Ota käyttöön / Poista käytöstä sulogin(8) yhden käyttäjän tasossa."
+msgstr "Ota käyttöön sulogin(8) yhden käyttäjän tasolla."
#: security/help.pm:100
#, c-format
msgid "Add the name as an exception to the handling of password aging by msec."
-msgstr "Lisää nimi jota msec:n salasanojen vanheneminen ei koske."
+msgstr "Lisää nimi, jota msec:n salasanojen vanheneminen ei koske."
#: security/help.pm:102
#, c-format
msgid "Set password aging to \"max\" days and delay to change to \"inactive\"."
msgstr ""
-"Asettaa salasanojen vanhenemisen \"max\" päivään ja viiveen vaihtamiselle "
-"\"inactive\"."
+"Asettaa salasanojen vanhenemisen \"max\" päivään ja viiveen tunnuksen "
+"määrittelemiseksi \"inactive\"-tilaan."
#: security/help.pm:104
#, c-format
@@ -5834,10 +5797,9 @@ msgstr ""
"Aseta salasanojen vähimmäispituus sekä vähimmäismäärä numeroita ja isoja "
"kirjaimia."
-#: security/help.pm:108
-#, fuzzy, c-format
+#: security/help.pm:108, c-format
msgid "Set the root's file mode creation mask."
-msgstr "Aseta root umask."
+msgstr "Aseta pääkäyttäjän luomien tiedostojen \"umask\"."
#: security/help.pm:109
#, c-format
@@ -5861,7 +5823,7 @@ msgstr ""
"\n"
"- salasanan puuttuminen tiedostossa /etc/shadow\n"
"\n"
-"- muut käyttäjät kuin root joiden id on 0."
+"- onko muiden käyttäjätunnuksien, kuin \"root\", UID nolla."
#: security/help.pm:117
#, c-format
@@ -5873,7 +5835,7 @@ msgstr ""
#, c-format
msgid "if set to yes, check if the network devices are in promiscuous mode."
msgstr ""
-"jos asetettu, tarkistetaan ovatko verkkolaitteet 'promiscuous' tilassa."
+"jos asetettu, tarkistetaan ovatko verkkolaitteet \"promiscuous\"-tilassa."
#: security/help.pm:119
#, c-format
@@ -5883,7 +5845,8 @@ msgstr "jos asetettu, suoritetaan päivittäiset turvallisuustarkistukset."
#: security/help.pm:120
#, c-format
msgid "if set to yes, check additions/removals of sgid files."
-msgstr "jos asetettu, tarkistetaan 'sgid' tiedostojen lisäykset/poistamiset."
+msgstr ""
+"jos asetettu, tarkistetaan \"sgid\"-tiedostojen lisäämiset/poistamiset."
#: security/help.pm:121
#, c-format
@@ -5893,13 +5856,14 @@ msgstr "jos asetettu, tarkistetaan tyhjät salasanat tiedostossa /etc/shadow."
#: security/help.pm:122
#, c-format
msgid "if set to yes, verify checksum of the suid/sgid files."
-msgstr "jos asetettu, tarkistetaan 'suid/sgid' tiedostojen tarkistussumma."
+msgstr ""
+"jos asetettu, tarkistetaan \"suid\"- ja \"sgid\"-tiedostojen tarkistussumma."
#: security/help.pm:123
#, c-format
msgid "if set to yes, check additions/removals of suid root files."
msgstr ""
-"jos 'kyllä', tarkistetaan 'suid root' tiedostojen lisäämiset/poistamiset."
+"jos asetettu, tarkistetaan \"suid root\"-tiedostojen lisäämiset/poistamiset."
#: security/help.pm:124
#, c-format
@@ -5916,7 +5880,7 @@ msgstr ""
#: security/help.pm:126
#, c-format
msgid "if set to yes, run chkrootkit checks."
-msgstr "jos asetettu, suoritetaan chkrootkit tarkistuksia."
+msgstr "jos asetettu, suoritetaan \"chkrootkit\"-tarkistuksia."
#: security/help.pm:127
#, c-format
@@ -5932,7 +5896,7 @@ msgstr "jos asetettu, raportoi tarkistuksen tulos sähköpostitse."
#: security/help.pm:129
#, c-format
msgid "Do not send mails if there's nothing to warn about"
-msgstr "Älä lähetä viestiä jos ei ole varoituksia."
+msgstr "Älä lähetä viestiä, jos ei ole mitään varoitettavaa."
#: security/help.pm:130
#, c-format
@@ -5942,12 +5906,12 @@ msgstr "jos asetettu, suoritetaan tarkistuksia rpm-tietokannassa."
#: security/help.pm:131
#, c-format
msgid "if set to yes, report check result to syslog."
-msgstr "jos asetettu, raportoidaan tarkistuksen tulokset syslog:iin."
+msgstr "jos asetettu, raportoidaan tarkistuksen tulokset syslogiin."
#: security/help.pm:132
#, c-format
msgid "if set to yes, reports check result to tty."
-msgstr "jos asetettu, raportoi tarkistuksen tulokset näytölle."
+msgstr "jos asetettu, raportoidaan tarkistuksen tulokset näytölle."
#: security/help.pm:134
#, c-format
@@ -5958,73 +5922,73 @@ msgstr ""
#: security/help.pm:136
#, c-format
msgid "Set the shell timeout. A value of zero means no timeout."
-msgstr "Asettaa komentotulkin aikaviiveen. Arvo 0 (nolla) poistaa aikaviiveen."
+msgstr ""
+"Asettaa komentotulkin aikakatkaisun. Arvo 0 (nolla) poistaa aikakatkaisun."
#: security/help.pm:136
#, c-format
msgid "Timeout unit is second"
-msgstr "Aikaviiveen yksikkö on sekunti"
+msgstr "Aikakatkaisun yksikkö on sekunti"
-#: security/help.pm:138
-#, fuzzy, c-format
+#: security/help.pm:138, c-format
msgid "Set the user's file mode creation mask."
-msgstr "Aseta käyttäjän umask."
+msgstr "Aseta käyttäjän luomien tiedostojen umask."
#: security/l10n.pm:11
#, c-format
msgid "Accept bogus IPv4 error messages"
-msgstr "Hyväksy virheelliset IPv4 virheviestit"
+msgstr "Hyväksy virheelliset IPv4-virheviestit."
#: security/l10n.pm:12
#, c-format
msgid "Accept broadcasted icmp echo"
-msgstr "Hyväksy kuulutetut icmp echo viestit"
+msgstr "Hyväksy kuulutetut \"icmp echo\"-viestit."
#: security/l10n.pm:13
#, c-format
msgid "Accept icmp echo"
-msgstr "Salli icmp echo"
+msgstr "Salli \"icmp echo\"."
#: security/l10n.pm:15
#, c-format
msgid "/etc/issue* exist"
-msgstr "/etc/issue* on olemassa"
+msgstr "Onko /etc/issue* olemassa"
#: security/l10n.pm:16
#, c-format
msgid "Reboot by the console user"
-msgstr "Uudelleenkäynnistys konsolikäyttäjällä"
+msgstr "Konsolikäyttäjän mahdollisuus käynnistää kone uudelleen."
#: security/l10n.pm:17
#, c-format
msgid "Allow remote root login"
-msgstr "Salli root sisäänkirjautuminen etäyhteyksiltä."
+msgstr "Salli pääkäyttäjän kirjautua etänä."
#: security/l10n.pm:18
#, c-format
msgid "Direct root login"
-msgstr "Suora root-sisäänkirjautuminen"
+msgstr "Pääkäyttäjän paikallinen kirjautuminen."
#: security/l10n.pm:19
#, c-format
msgid "List users on display managers (kdm and gdm)"
-msgstr "Näytä lista järjestelmän käyttäjistä näytönhallinnassa (kdm ja gdm)"
+msgstr "Näytä lista käyttäjistä näytönhallinnassa (kdm ja gdm)."
#: security/l10n.pm:20
#, c-format
msgid "Export display when passing from root to the other users"
msgstr ""
-"Käytä näytön edelleenlähetys kun siirrytään root-tilistä muihin käyttäjiin."
+"Käytä näytön edelleenlähetystä, kun siirrytään root-tililtä muille tileille."
#: security/l10n.pm:21
#, c-format
msgid "Allow X Window connections"
-msgstr "Salli X Window -yhteydet"
+msgstr "Salli \"X Window\"-yhteydet"
#: security/l10n.pm:22
#, c-format
msgid "Authorize TCP connections to X Window"
-msgstr "Valtuuta TCP-yhteydet X Windowille"
+msgstr "Valtuuta TCP-yhteydet \"X Window\":lle"
#: security/l10n.pm:23
#, c-format
@@ -6039,7 +6003,7 @@ msgstr "Chkconfig tottelee msec:n sääntöjä"
#: security/l10n.pm:25
#, c-format
msgid "Enable \"crontab\" and \"at\" for users"
-msgstr "Salli \"crontab\" ja \"at\" käyttäjille"
+msgstr "Salli \"crontab\" ja \"at\" kaikille käyttäjille"
#: security/l10n.pm:26
#, c-format
@@ -6054,29 +6018,26 @@ msgstr "Koneen nimen huijaussuojaus"
#: security/l10n.pm:28
#, c-format
msgid "Enable IP spoofing protection"
-msgstr "Ota käyttöön IP spoofing suojaus."
+msgstr "Ota käyttöön \"IP spoofing\"-suojaus."
#: security/l10n.pm:29
#, c-format
msgid "Enable libsafe if libsafe is found on the system"
-msgstr "Ota käyttöön libsafe jos se löytyy järjestelmästä."
+msgstr "Ota käyttöön libsafe, jos se löytyy järjestelmästä."
#: security/l10n.pm:30
#, c-format
msgid "Enable the logging of IPv4 strange packets"
-msgstr "Ota käyttöön epätavallisten IPv4 pakettien kirjaaminen lokiin"
+msgstr "Kirjaa epätavalliset IPv4-paketit lokiin."
#: security/l10n.pm:31
#, c-format
msgid "Enable msec hourly security check"
-msgstr "Ota käyttöön msec turvallisuustarkistukset joka tunti."
+msgstr "Suorita msec-turvallisuustarkastukset joka tunti."
-#: security/l10n.pm:32
-#, fuzzy, c-format
+#: security/l10n.pm:32, c-format
msgid "Enable su only from the wheel group members"
-msgstr ""
-"Salli 'su' vain 'wheel' ryhmään kuuluville jäsenille, tai salli komento "
-"kaikille"
+msgstr "Salli komento \"su\" vain ryhmän \"wheel\" jäsenille."
#: security/l10n.pm:33
#, c-format
@@ -6086,7 +6047,7 @@ msgstr "Käytä salasanoja käyttäjien tunnistamiseen."
#: security/l10n.pm:34
#, c-format
msgid "Ethernet cards promiscuity check"
-msgstr "Verkkokorttien 'promiscuous' tarkistus"
+msgstr "Verkkokorttien \"promiscuous\"-tarkistus"
#: security/l10n.pm:35
#, c-format
@@ -6096,43 +6057,44 @@ msgstr "Päivittäiset turvallisuustarkistukset"
#: security/l10n.pm:36
#, c-format
msgid "Sulogin(8) in single user level"
-msgstr "Sulogin(8) yhden käyttäjän tasossa."
+msgstr "Sulogin(8) yhden käyttäjän tasolla."
#: security/l10n.pm:37
#, c-format
msgid "No password aging for"
-msgstr "Salasana ei vanhene"
+msgstr "Salasana ei vanhene."
#: security/l10n.pm:38
#, c-format
msgid "Set password expiration and account inactivation delays"
-msgstr "Aseta salasanan vanheneminen ja tilin käyttämättömyysviive"
+msgstr ""
+"Aseta salasanan vanheneminen ja viive tilin merkitsemiselle käyttämättömäksi."
#: security/l10n.pm:39
#, c-format
msgid "Password history length"
-msgstr "Salasanahistorian pituus"
+msgstr "Salasanahistorian pituus."
#: security/l10n.pm:40
#, c-format
msgid "Password minimum length and number of digits and upcase letters"
msgstr ""
-"Salasanan vähimmäispituus sekä numeroiden ja isojen kirjainten lukumäärä"
+"Salasanan vähimmäispituus sekä numeroiden ja isojen kirjainten lukumäärä."
#: security/l10n.pm:41
#, c-format
msgid "Root umask"
-msgstr "Pääkäyttäjän umask"
+msgstr "Pääkäyttäjän umask."
#: security/l10n.pm:42
#, c-format
msgid "Shell history size"
-msgstr "Komentotulkin historian koko"
+msgstr "Komentotulkin historian koko."
#: security/l10n.pm:43
#, c-format
msgid "Shell timeout"
-msgstr "Komentotulkin aikaviive"
+msgstr "Komentotulkin aikakatkaisu."
#: security/l10n.pm:44
#, c-format
@@ -6142,12 +6104,12 @@ msgstr "Käyttäjän umask"
#: security/l10n.pm:45
#, c-format
msgid "Check open ports"
-msgstr "Tarkista avoimet portit"
+msgstr "Tarkista avoimet portit."
#: security/l10n.pm:46
#, c-format
msgid "Check for unsecured accounts"
-msgstr "Tarkista turvattomat tilit"
+msgstr "Tarkista turvattomat tilit."
#: security/l10n.pm:47
#, c-format
@@ -6157,58 +6119,59 @@ msgstr "Tarkista tiedostojen oikeudet käyttäjien kotihakemistossa."
#: security/l10n.pm:48
#, c-format
msgid "Check if the network devices are in promiscuous mode"
-msgstr "Tarkista ovatko verkkolaitteet 'promiscuous' tilassa."
+msgstr "Tarkista ovatko verkkolaitteet \"promiscuous\"-tilassa."
#: security/l10n.pm:49
#, c-format
msgid "Run the daily security checks"
-msgstr "Suorita päivittäiset turvallisuustarkistukset"
+msgstr "Suorita päivittäiset turvallisuustarkistukset."
#: security/l10n.pm:50
#, c-format
msgid "Check additions/removals of sgid files"
-msgstr "Tarkista 'sgid' tiedostojen lisäämiset/poistamiset"
+msgstr "Tarkista \"sgid\"-tiedostojen lisäämiset/poistamiset."
#: security/l10n.pm:51
#, c-format
msgid "Check empty password in /etc/shadow"
-msgstr "Tarkista tyhjät salasanat tiedostossa /etc/shadow"
+msgstr "Tarkista tyhjät salasanat tiedostossa /etc/shadow."
#: security/l10n.pm:52
#, c-format
msgid "Verify checksum of the suid/sgid files"
-msgstr "Tarkistetaan 'suid/sgid' tiedostojen tarkistussumma."
+msgstr "Tarkistetaan \"suid\"- ja \"sgid\" tiedostojen tarkistussumma."
#: security/l10n.pm:53
#, c-format
msgid "Check additions/removals of suid root files"
-msgstr "Tarkista 'suid root' tiedostojen lisäykset/poistamiset."
+msgstr "Tarkista \"suid root\"-tiedostojen lisäämiset/poistamiset."
#: security/l10n.pm:54
#, c-format
msgid "Report unowned files"
-msgstr "Raportoi omistamattomat tiedostot"
+msgstr "Raportoi omistamattomat tiedostot."
#: security/l10n.pm:55
#, c-format
msgid "Check files/directories writable by everybody"
-msgstr "Tarkistetaan sallivatko tiedostot/hakemistot kirjoituksen kaikille."
+msgstr "Tarkista, onko tiedostot/hakemistot kaikkien kirjoitettavissa."
#: security/l10n.pm:56
#, c-format
msgid "Run chkrootkit checks"
-msgstr "Suorita chkrootkit tarkistuksia"
+msgstr "Suorita \"chkrootkit\"-tarkistukset"
#: security/l10n.pm:57
#, c-format
msgid "Do not send empty mail reports"
-msgstr ""
+msgstr "Älä lähetä tyhjiä raportteja sähköpostitse."
#: security/l10n.pm:58
#, c-format
msgid "If set, send the mail report to this email address else send it to root"
msgstr ""
-"Jos asetettu, raportit lähetetään tähän osoitteeseen, muuten root saa ne."
+"Jos asetettu, raportit lähetetään määriteltyyn osoitteeseen, muuten root saa "
+"ne."
#: security/l10n.pm:59
#, c-format
@@ -6218,32 +6181,31 @@ msgstr "Raportoi tarkistuksen tulos sähköpostitse."
#: security/l10n.pm:60
#, c-format
msgid "Run some checks against the rpm database"
-msgstr "Suorita tarkistuksia rpm-tietokannassa"
+msgstr "Suorita tarkistuksia rpm-tietokannassa."
#: security/l10n.pm:61
#, c-format
msgid "Report check result to syslog"
-msgstr "Raportoi tarkistuksien tulokset järjestelmälokiin"
+msgstr "Raportoi tarkistuksien tulokset järjestelmälokiin."
#: security/l10n.pm:62
#, c-format
msgid "Reports check result to tty"
-msgstr "Raportoi tarkistuksen tulokset näytölle"
+msgstr "Raportoi tarkistuksen tulokset näytölle."
#: security/level.pm:10
#, c-format
msgid "Disable msec"
-msgstr ""
+msgstr "Poista msec käytöstä"
#: security/level.pm:11
#, c-format
msgid "Standard"
msgstr "Vakio"
-#: security/level.pm:12
-#, fuzzy, c-format
+#: security/level.pm:12, c-format
msgid "Secure"
-msgstr "Tietoturva"
+msgstr "Turvallinen"
#: security/level.pm:38
#, c-format
@@ -6253,6 +6215,9 @@ msgid ""
"system security\n"
"on your own."
msgstr ""
+"Tasoa on käytettävä varoen, koska se poistaa käytöstä kaiken\n"
+"msecin tarjoaman ylimääräisen turvallisuuden. Käytä tasoa\n"
+"vain, jos haluat huolehtia itse järjestelmän turvallisuudesta."
#: security/level.pm:41
#, c-format
@@ -6260,8 +6225,8 @@ msgid ""
"This is the standard security recommended for a computer that will be used "
"to connect to the Internet as a client."
msgstr ""
-"Tämä on vakio turvataso, jota suositellaan tietokoneelle, jota käytetään\n"
-"Internetissä asiakaskoneena."
+"Normaali turvallisuustaso. Tasoa suositellaan käytettäväksi tietokoneilla,\n"
+"joita käytetään Internetin asiakaskoneina."
#: security/level.pm:42
#, c-format
@@ -6273,12 +6238,11 @@ msgid ""
"connections from many clients. Note: if your machine is only a client on the "
"Internet, you should choose a lower level."
msgstr ""
-"Tällä turvatasolla tämän järjestelmän käyttö palvelimena on mahdollista.\n"
-"Turvallisuustaso on riittävän korkea, jotta järjestelmää voi käyttää "
-"palvelimena,\n"
-"joka hyväksyy monia yhteyksiä asiakaskoneilta. Huomaa: Jos koneesi on\n"
-"ainoastaan asiakaskone Internetissä, sinun kannattaisi valita alhaisempi "
-"turvataso."
+"Turvallisuustaso mahdollistaa järjestelmän käytön palvelimena.\n"
+"Turvallisuustaso on riittävän korkea, jotta järjestelmää voidaan\n"
+"käyttää palvelimena, joka hyväksyy yhteyksiä monilta asiakaskoneilta.\n"
+"HUOM: Jos konetta käytetään ainoastaan Internetin asiakaskoneena,\n"
+"riittää alhaisempi turvallisuustaso."
#: security/level.pm:49
#, c-format
@@ -6288,18 +6252,18 @@ msgstr "Tietoturva"
#: security/level.pm:49
#, c-format
msgid "DrakSec Basic Options"
-msgstr "DracSec perusoptiot"
+msgstr "DracSec perusasetukset"
#: security/level.pm:52
#, c-format
msgid "Please choose the desired security level"
-msgstr "Valitse haluttu turvataso"
+msgstr "Valitse haluttu turvallisuustaso"
#. -PO: this string is used to properly format "<security level>: <level description>"
#: security/level.pm:56
#, c-format
msgid "%s: %s"
-msgstr ""
+msgstr "%s: %s"
#: security/level.pm:59
#, c-format
@@ -6309,17 +6273,17 @@ msgstr "Tietoturvan ylläpitäjä:"
#: security/level.pm:60
#, c-format
msgid "Login or email:"
-msgstr ""
+msgstr "Tunnus tai sähköpostiosoite:"
#: services.pm:19
#, c-format
msgid "Launch the ALSA (Advanced Linux Sound Architecture) sound system"
-msgstr "Käynnistä ALSA (Advanced Linux Sound Architecture) äänijärjestelmä"
+msgstr "Käynnistä ALSA-äänijärjestelmä."
#: services.pm:20
#, c-format
msgid "Anacron is a periodic command scheduler."
-msgstr "Anacron on ajoitettujen komentojen ajastaja."
+msgstr "Anacron on ajoitettujen komentojen ajastaja.."
#: services.pm:21
#, c-format
@@ -6327,7 +6291,7 @@ msgid ""
"apmd is used for monitoring battery status and logging it via syslog.\n"
"It can also be used for shutting down the machine when the battery is low."
msgstr ""
-"apmd:ta käytetään valvomaan akkujen tilaa ja raportoimaan siitä syslogin\n"
+"apmd:a käytetään valvomaan akkujen tilaa ja raportoimaan siitä syslogin\n"
"kautta. apmd:a voidaan myös käyttää sulkemaan kone akkujen ollessa tyhjiä."
#: services.pm:23
@@ -6336,8 +6300,9 @@ msgid ""
"Runs commands scheduled by the at command at the time specified when\n"
"at was run, and runs batch commands when the load average is low enough."
msgstr ""
-"Ajaa komentoja määrätyillä ajanhetkillä, jotka on määritelty at-komennolla.\n"
-"Ajaa myös eräajoja, kun järjestelmän kuormitus on riittävän matala."
+"Suorittaa komentoja tiettyinä ajanhetkillä, jotka on määritelty "
+"at-komennolla.\n"
+"Suorittaa myös eräajoja, kun järjestelmän kuormitus on riittävän matala."
#: services.pm:25
#, c-format
@@ -6347,20 +6312,23 @@ msgid ""
"basic\n"
"UNIX cron, including better security and more powerful configuration options."
msgstr ""
-"cron on UNIX:n perusohjelma joka ajaa määriteltyjä ohjelmia määrätyillä\n"
-"ajanhetkillä. vixie cron lisää monia ominaisuuksia verrattuna normaaliin\n"
-"UNIX:n cron ohjelmaan, kuten paremman turvallisuuden ja laajemmat asetukset."
+"cron on UNIX:n perusohjelma, joka suorittaa määriteltyjä ohjelmia\n"
+"määriteltyinä ajanhetkinä. vixie cron lisää monia ominaisuuksia\n"
+"verrattuna normaaliin UNIX:n cron-ohjelmaan, kuten paremman\n"
+"turvallisuuden ja laajemmat asetukset."
#: services.pm:28
#, c-format
msgid ""
"Common UNIX Printing System (CUPS) is an advanced printer spooling system"
msgstr ""
+"Common UNIX Printing System (CUPS) on edistynyt "
+"tulostustenhallintajärjestelmä."
#: services.pm:29
#, c-format
msgid "Launches the graphical display manager"
-msgstr ""
+msgstr "Käynnistää graafisen näytönhallinnan."
#: services.pm:30
#, c-format
@@ -6369,8 +6337,9 @@ msgid ""
"change.\n"
"It is used by GNOME and KDE"
msgstr ""
-"FAM on tiedostonvalvontademoni. Sitä käytetään raportoimaan tiedostojen\n"
-"muuttuminen. Sitä käyttävät GNOME ja KDE."
+"FAM on tiedostonvalvontataustaprosessi. Sitä käytetään raportoimaan "
+"tiedostojen\n"
+"muuttumisesta. Sitä käyttävät GNOME ja KDE."
#: services.pm:32
#, c-format
@@ -6381,13 +6350,14 @@ msgid ""
"and includes support for pop-up menus on the console."
msgstr ""
"GPM lisää hiirituen tekstipohjaisiin Linux-sovelluksiin kuten\n"
-"Midnight Commanderiin. GPM mahdollistaa myös leikkaa/liimaa\n"
-"toiminnot hiirellä ja sisältää tuen valikoille konsolissa."
+"Midnight Commanderiin. GPM mahdollistaa myös konsolissa\n"
+"\"Copy and Paste\"-toiminnot hiirellä ja sisältää tuen valikoille\n"
+"konsolissa."
#: services.pm:35
#, c-format
msgid "HAL is a daemon that collects and maintains information about hardware"
-msgstr ""
+msgstr "HAL on taustaprosessi, joka kerää ja ylläpitää tietoja laitteistosta."
#: services.pm:36
#, c-format
@@ -6395,8 +6365,8 @@ msgid ""
"HardDrake runs a hardware probe, and optionally configures\n"
"new/changed hardware."
msgstr ""
-"HardDrake etsii uutta laitteistoa ja tarvittaessa\n"
-"asettaa uuden/muuttuneen laitteiston."
+"HardDrake etsii järjestelmästä uusia laitteita ja tarvittaessa\n"
+"asettaa uuden tai muuttuneen laitteiston."
#: services.pm:38
#, c-format
@@ -6416,8 +6386,8 @@ msgid ""
"disables\n"
"all of the services it is responsible for."
msgstr ""
-"Internet pääpalvelindemoni (yleensä inetd) käynnistää useita eri\n"
-"Internetpalveluita, kuten telnet, ftp, rsh ja rlogin tarpeen mukaan.\n"
+"Internetin pääpalvelin-taustaprosessi (inetd) käynnistää tarpeen\n"
+"mukaan useita eri Internet-palveluita kuten telnet, ftp,rsh ja rlogin.\n"
"Inetd:n poistaminen poistaa myös nämä palvelut käytöstä."
#: services.pm:43
@@ -6426,8 +6396,9 @@ msgid ""
"Launch packet filtering for Linux kernel 2.2 series, to set\n"
"up a firewall to protect your machine from network attacks."
msgstr ""
-"Käynnistä pakettisuodatin Linux-ytimen 2.2-sarjalle, jos haluat\n"
-"pystyttää palomuurin suojaamaan konettasi verkkohyökkäyksiltä."
+"Käynnistä pakettisuodatin Linux-ytimen 2.2-sarjalle\n"
+"pystyttääksesi palomuurin ja suojataksesi tietokoneen\n"
+"mahdollisilta verkkohyökkäyksiltä."
#: services.pm:45
#, c-format
@@ -6436,9 +6407,9 @@ msgid ""
"/etc/sysconfig/keyboard. This can be selected using the kbdconfig utility.\n"
"You should leave this enabled for most machines."
msgstr ""
-"Paketti lataa valitun näppäinkartan /etc/sysconfig/keyboard\n"
-"tiedoston asetusten mukaisesti. Asetukset voidaan valita kbdconfig\n"
-"työkalulla. Tämä tulisi ottaa käyttöön lähes kaikissa järjestelmissä."
+"Palvelu valitun näppäinkartan tiedoston /etc/sysconfig/keyboard\n"
+"asetusten mukaisesti. Asetukset voidaan valita kbdconfig-työkalulla.\n"
+"Palvelu tulisi ottaa käyttöön lähes kaikissa järjestelmissä."
#: services.pm:48
#, c-format
@@ -6471,8 +6442,8 @@ msgid ""
"lpd is the print daemon required for lpr to work properly. It is\n"
"basically a server that arbitrates print jobs to printer(s)."
msgstr ""
-"lpd on tulostuspalvelin, jonka lpr ohjelma vaatii toimiakseen.\n"
-"lpd on palvelin joka jakaa tulostustöitä tulostimille."
+"lpd on tulostuspalvelin, jonka lpr-ohjelma vaatii toimiakseen.\n"
+"lpd on palvelin, joka jakaa tulostustöitä tulostimille."
#: services.pm:55
#, c-format
@@ -6480,8 +6451,8 @@ msgid ""
"Linux Virtual Server, used to build a high-performance and highly\n"
"available server."
msgstr ""
-"Linux Virtual Server, jonka avulla voidaan rakentaa\n"
-"tehokas korkean käytettävyyden palvelin."
+"Linux Virtual Serverin avulla voidaan rakentaa tehokas\n"
+"korkean käytettävyyden palvelin."
#: services.pm:57
#, c-format
@@ -6489,6 +6460,8 @@ msgid ""
"DBUS is a daemon which broadcasts notifications of system events and other "
"messages"
msgstr ""
+"DBUS on taustaprosessi, joka kuuluttaa järjestelmän ilmoituksia ja muista "
+"viestejä."
#: services.pm:58
#, c-format
@@ -6496,7 +6469,7 @@ msgid ""
"named (BIND) is a Domain Name Server (DNS) that is used to resolve host "
"names to IP addresses."
msgstr ""
-"named (BIND) on nimipalvelin (DNS) jota käytetään\n"
+"named (BIND) on nimipalvelin (DNS), jota käytetään\n"
"muunnettaessa koneiden verkkonimiä IP-osoitteiksi."
#: services.pm:59
@@ -6505,8 +6478,8 @@ msgid ""
"Mounts and unmounts all Network File System (NFS), SMB (Lan\n"
"Manager/Windows), and NCP (NetWare) mount points."
msgstr ""
-"Liittää ja irrottaa NFS (Network File System),\n"
-"SMB (Lan Manager/Windows) ja NCP (NetWare) liitospisteet"
+"Liittää ja irrottaa NFS- (Network File System),\n"
+"SMB- (Lan Manager/Windows) ja NCP- (NetWare) liitospisteet"
#: services.pm:61
#, c-format
@@ -6514,8 +6487,8 @@ msgid ""
"Activates/Deactivates all network interfaces configured to start\n"
"at boot time."
msgstr ""
-"Aktivoi/Poistaa kaikki verkkoliitännät jotka on asetettu\n"
-"käynnistymään koneen käynnistyksen yhteydessä."
+"Ottaa käyttöön tai poistaa käytöstä kaikki verkkoliitännät,\n"
+"jotka on asetettu käynnistyväksi käynnistyksen yhteydessä."
#: services.pm:63
#, c-format
@@ -6526,7 +6499,7 @@ msgid ""
msgstr ""
"NFS on yleinen protokolla tiedostojen jakoon TCP/IP-\n"
"verkoissa. Tämä palvelu mahdollistaa NFS-palvelimen\n"
-"käynnistyksen, jakoa ohjataan tiedostosta /etc/exports."
+"käynnistämisen, jota ohjataan tiedostosta /etc/exports."
#: services.pm:66
#, c-format
@@ -6540,7 +6513,7 @@ msgstr ""
#: services.pm:68
#, c-format
msgid "Synchronizes system time using the Network Time Protocol (NTP)"
-msgstr ""
+msgstr "Tahdistaan järjestelmän kellon NTP-protokollan avulla."
#: services.pm:69
#, c-format
@@ -6548,8 +6521,8 @@ msgid ""
"Automatically switch on numlock key locker under console\n"
"and Xorg at boot."
msgstr ""
-"Asettaa käynnistyksessä numlock-tilan päälle\n"
-"sekä konsolille että Xorg:lle."
+"Asettaa käynnistyksen yhteydessä näppäimistön numlock-tilan päälle,\n"
+"sekä konsoleille että Xorg:lle."
#: services.pm:71
#, c-format
@@ -6564,9 +6537,10 @@ msgid ""
"to have\n"
"it installed on machines that do not need it."
msgstr ""
-"PCMCIA tukea käytetään yleensä kannettavissa ethernet- ja modeemi-\n"
-"korttien tukemiseen. Palvelu ei käynnisty ellei sitä ole asetettu,\n"
-"joten sen voi asentaa myös koneisiin jotka eivät sitä tarvitse."
+"PCMCIA-tukea käytetään yleensä kannettavissa tietokoneissa\n"
+"ethernet- ja modeemikorttien tukemiseen. Palvelu ei käynnisty,\n"
+"ellei sitä ole asetettu, joten sen voi asentaa myös koneisiin,\n"
+"jotka eivät sitä tarvitse."
#: services.pm:75
#, c-format
@@ -6577,8 +6551,8 @@ msgid ""
"which act as servers for protocols which make use of the RPC mechanism."
msgstr ""
"Portmapper hallitsee RPC-yhteyksiä, joita käyttävät esimerkiksi\n"
-"NFS ja NIS-protokollat. Portmap-palvelin on oltava käynnissä\n"
-"järjestelmissä jotka haluavat tarjota näitä protokollia."
+"NFS- ja NIS-protokollat. Portmap-palvelin on oltava käynnissä\n"
+"järjestelmissä, jotka haluavat tarjota näitä protokollia."
#: services.pm:78
#, c-format
@@ -6595,7 +6569,7 @@ msgid ""
"Saves and restores system entropy pool for higher quality random\n"
"number generation."
msgstr ""
-"Tallentaa ja palauttaa järjestelmän satunnaislukualtaan,\n"
+"Tallentaa ja palauttaa järjestelmän satunnaislukuvarannon,\n"
"mikä parantaa satunnaislukujen laatua."
#: services.pm:81
@@ -6625,7 +6599,7 @@ msgid ""
"performance metrics for any machine on that network."
msgstr ""
"Rstat-protokolla mahdollistaa verkon käyttäjien hakea\n"
-"kyseisen verkon eri koneiden tilatietoja."
+"lisätietoja minkä tahansa verkon koneen suorituskyvystä."
#: services.pm:88
#, c-format
@@ -6650,6 +6624,8 @@ msgstr ""
msgid ""
"SANE (Scanner Access Now Easy) enables to access scanners, video cameras, ..."
msgstr ""
+"SANE mahdollistaa kuvanlukijoiden, videokameroiden yms. liittämisen "
+"tietokoneeseen"
#: services.pm:93
#, c-format
@@ -6657,11 +6633,13 @@ msgid ""
"The SMB/CIFS protocol enables to share access to files & printers and also "
"integrates with a Windows Server domain"
msgstr ""
+"SMB/CIFS-protokolla mahdollistaa tiedostojen ja tulostimien jakamisen sekä\n"
+"Windows-toimialueeseen yhdistämisen."
#: services.pm:94
#, c-format
msgid "Launch the sound system on your machine"
-msgstr "Käynnistä äänijärjestelmä tietokoneessasi"
+msgstr "Käynnistä tietokoneen äänijärjestelmä"
#: services.pm:95
#, c-format
@@ -6669,6 +6647,8 @@ msgid ""
"Secure Shell is a network protocol that allows data to be exchanged over a "
"secure channel between two computers"
msgstr ""
+"SSH on verkkoprotokolla, joka sallii tiedon välittämisen\n"
+"salattuna kahden koneen välillä."
#: services.pm:96
#, c-format
@@ -6676,8 +6656,8 @@ msgid ""
"Syslog is the facility by which many daemons use to log messages\n"
"to various system log files. It is a good idea to always run syslog."
msgstr ""
-"Syslog on tapa jolla monet palvelut kirjoittavat viestinsä talteen\n"
-"useisiin lokitiedostoihin. On järkevää käyttää syslog-ohjelmaa."
+"Syslog on tapa, jolla monet palvelut kirjoittavat viestinsä talteen\n"
+"useisiin lokitiedostoihin. On järkevää käyttää syslog-ohjelmaa."
#: services.pm:98
#, c-format
@@ -6687,12 +6667,12 @@ msgstr "Lataa USB-laitteiden ajurit."
#: services.pm:99
#, c-format
msgid "Starts the X Font Server."
-msgstr ""
+msgstr "Käynnistää X-kirjasinpalvelimen."
#: services.pm:100
#, c-format
msgid "Starts other deamons on demand."
-msgstr ""
+msgstr "Käynnistää muut taustaprosessit tarvittaessa."
#: services.pm:123
#, c-format
@@ -6732,9 +6712,7 @@ msgstr "Palvelut"
#: services.pm:153
#, c-format
msgid "Choose which services should be automatically started at boot time"
-msgstr ""
-"Valitse mitkä palvelut käynnistetään automaattisesti koneen käynnistyksen "
-"yhteydessä"
+msgstr "Valitse automaattisesti käynnistettävät palvelut"
#: services.pm:171
#, c-format
@@ -6754,7 +6732,7 @@ msgstr "pysähtynyt"
#: services.pm:213
#, c-format
msgid "Services and daemons"
-msgstr "Palvelut ja demonit"
+msgstr "Palvelut ja taustaprosessit"
#: services.pm:219
#, c-format
@@ -6762,8 +6740,8 @@ msgid ""
"No additional information\n"
"about this service, sorry."
msgstr ""
-"Ei lisätietoja tästä\n"
-"palvelusta, valitan."
+"Valitettavasti palvelusta\n"
+"ei löydy lisätietoja."
#: services.pm:224 ugtk2.pm:924
#, c-format
@@ -6844,12 +6822,12 @@ msgstr ""
"Varmistus- ja palautussovellus\n"
"\n"
"--default : tallenna oletushakemistot.\n"
-"--debug : näytä kaikki debuggaus-viestit.\n"
+"--debug : näytä kaikki vianjäljitysviestit.\n"
"--show-conf : varmistettavien tiedostojen tai hakemistojen "
"listaus.\n"
-"--config-info : selitä asetustiedoston optiot (käyttäjille ilman "
-"X).\n"
-"--daemon : käytä demoni-asetukset. \n"
+"--config-info : selitä asetustiedoston asetukset (käyttäjille ilman "
+"X-palvelinta).\n"
+"--daemon : käytä taustaprosessi-asetukset. \n"
"--help : näytä tämä viesti.\n"
"--version : näytä versiotiedot.\n"
@@ -6863,8 +6841,8 @@ msgid ""
"default mode: offer to configure autologin feature"
msgstr ""
"[--boot] [--splash]\n"
-"VALINNAT:\n"
-" --boot - aseta käynnistyslataaja\n"
+"VALITSIMET:\n"
+" --boot - aseta käynnistyslatain\n"
" --splash - aseta käynnistysteema\n"
"Oletustila: tarjoutuu asettamaan automaattisen sisäänkirjautumisen"
@@ -6878,9 +6856,9 @@ msgid ""
" --report - program should be one of Mandriva Linux tools\n"
" --incident - program should be one of Mandriva Linux tools"
msgstr ""
-"[OPTIOT] [OHJELMAN_NIMI]\n"
+"[VALITSIMET] [OHJELMAN_NIMI]\n"
"\n"
-"OPTIOT:\n"
+"VALITSIMET:\n"
" --help - tulosta tämä viesti.\n"
" --report - ohjelman pitäisi olla yksi Mandriva Linuxin "
"työkaluista\n"
@@ -6897,10 +6875,10 @@ msgid ""
" --wizard - like --add"
msgstr ""
"[--add]\n"
-" --add - \"lisää verkkoliitäntä\" velho\n"
-" --del - \"poista verkkoliitäntä\" velho\n"
+" --add - \"lisää verkkoliitäntä\"-velho\n"
+" --del - \"poista verkkoliitäntä\"-velho\n"
" --skip-wizard - yhteyksien hallinta\n"
-" --internet - aseta Internet\n"
+" --internet - aseta Internet-asetukset\n"
" --wizard - kuten --add"
#: standalone.pm:73
@@ -6923,7 +6901,7 @@ msgstr ""
"\n"
"Kirjasinten tuonti- ja valvontasovellus\n"
"\n"
-"OPTIOT:\n"
+"VALITSIMET:\n"
"--windows_import : tuo kaikilta käytettävissä olevilta windows-osioilta.\n"
"--xls_fonts : näytä kaikki olemassa olevat xls-kirjasimet\n"
"--install : hyväksy mikä tahansa kirjasin ja hakemisto.\n"
@@ -6951,7 +6929,7 @@ msgid ""
"--delclient : delete a client machine from MTS (requires MAC address, "
"IP, nbi image name)"
msgstr ""
-"[OPTIOT]...\n"
+"[VALITSIMET]...\n"
"Mandriva Linux Terminal Server asetustyökalu\n"
"--enable : ota MTS käyttöön.\n"
"--disable : poista MTS käytöstä.\n"
@@ -6987,14 +6965,14 @@ msgid ""
"--status : returns 1 if connected 0 otherwise, then exit.\n"
"--quiet : do not be interactive. To be used with (dis)connect."
msgstr ""
-"[OPTIOT]\n"
-"Verkko & Internet yhteys- ja seurantasovellus\n"
+"[VALITSIMET]\n"
+"Verkon ja Internetin yhteys- ja seurantasovellus\n"
"\n"
"--defaultintf liitäntä : näytä tämä liitäntä oletuksena.\n"
-"--connect : avaa yhteyden Internetiin jos sitä ei ole.\n"
-"--disconnect : sulkee yhteyden Internetiin jos se on käytössä.\n"
+"--connect : avaa yhteyden Internetiin, jos sitä ei ole.\n"
+"--disconnect : sulkee yhteyden Internetiin, jos se on käytössä.\n"
"--force : käytä (dis)connect:n kanssa: pakota yhteyden avaus/sulkeminen.\n"
-"--status : palauttaa 1 jos yhteys on avattu, muuten 0, ja poistuu.\n"
+"--status : palauttaa arvon 1, jos yhteys on avattu, muuten 0, ja poistuu.\n"
"--quiet : ei-interaktiivinen tila. Käytetään (dis)connect:n kanssa."
#: standalone.pm:112
@@ -7008,12 +6986,12 @@ msgid ""
"description window\n"
" --merge-all-rpmnew propose to merge all .rpmnew/.rpmsave files found"
msgstr ""
-"[OPTIO]...\n"
-" --no-confirmation älä pyydä varmistusta Mandriva Update tilassa.\n"
+"[VALITSIMET]...\n"
+" --no-confirmation älä pyydä varmistusta Mandriva Update -tilassa.\n"
" --no-verify-rpm älä tarkista pakettien allekirjoitusta\n"
" --changelog-first näytä muutosloki ennen tiedostolistausta "
"kuvausikkunassa\n"
-" --merge-all-rpmnew ehdota kaikkien .rpmnew/.rpmsave tiedostojen "
+" --merge-all-rpmnew ehdota kaikkien .rpmnew- ja .rpmsave-tiedostojen "
"yhdistämistä"
#: standalone.pm:117
@@ -7047,50 +7025,45 @@ msgstr ""
"Käyttö: %s [--auto] [--beginner] [--expert] [-h|--help] [--noauto] [--"
"testing] [-v|--version] "
-#: timezone.pm:161 timezone.pm:162
-#, fuzzy, c-format
+#: timezone.pm:161 timezone.pm:162, c-format
msgid "All servers"
-msgstr "Lisää palvelin"
+msgstr "Kaikki palvelimet"
#: timezone.pm:196
#, c-format
msgid "Global"
msgstr "Yleiset"
-#: timezone.pm:199
-#, fuzzy, c-format
+#: timezone.pm:199, c-format
msgid "Africa"
-msgstr "Etelä-Afrikka"
+msgstr "Afrikka"
-#: timezone.pm:200
-#, fuzzy, c-format
+#: timezone.pm:200, c-format
msgid "Asia"
-msgstr "Itävalta"
+msgstr "Aasia"
#: timezone.pm:201
#, c-format
msgid "Europe"
-msgstr ""
+msgstr "Eurooppa"
-#: timezone.pm:202
-#, fuzzy, c-format
+#: timezone.pm:202, c-format
msgid "North America"
-msgstr "Etelä-Afrikka"
+msgstr "Pohjois-Amerikka"
#: timezone.pm:203
#, c-format
msgid "Oceania"
msgstr "Oseania"
-#: timezone.pm:204
-#, fuzzy, c-format
+#: timezone.pm:204, c-format
msgid "South America"
-msgstr "Etelä-Afrikka"
+msgstr "Etelä-Amerikka"
#: timezone.pm:213
#, c-format
msgid "Hong Kong"
-msgstr "HongKong"
+msgstr "Hong Kong"
#: timezone.pm:250
#, c-format
@@ -7110,7 +7083,7 @@ msgstr "Onko tämä oikein?"
#: ugtk2.pm:874
#, c-format
msgid "You have chosen a file, not a directory"
-msgstr "Olet valinnut tiedostoo, ei hakemistoa"
+msgstr "Valittiin tiedosto, ei hakemistoa."
#: wizards.pm:95
#, c-format
@@ -7119,7 +7092,7 @@ msgid ""
"Click \"Next\" to install or \"Cancel\" to quit"
msgstr ""
"%s ei ole asennettu\n"
-"Klikkaa \"Seuraava\" asentaaksesi tai \"Peruuta\" lopettaaksesi"
+"Napsauta \"Seuraava\" asentaaksesi tai \"Peruuta\" lopettaaksesi."
#: wizards.pm:99
#, c-format