# drakx messages in Simplified Chinese # Danny Zeng , 2000, 2002 # Jesse Kuang , 2002 # Shiyu Tang , 2003, 2004 # Funda Wang , 2002, 2003, 2004, 2005 # msgid "" msgstr "" "Project-Id-Version: DrakX 2007\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-09 11:27+0200\n" "PO-Revision-Date: 2006-09-16 07:01+0800\n" "Last-Translator: Funda Wang \n" "Language-Team: Mandriva Linux i18n Team \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: drakboot:49 #, c-format msgid "No bootloader found, creating a new configuration" msgstr "未找到引导程序,创建新配置" #: drakboot:83 harddrake2:194 harddrake2:195 logdrake:71 #, c-format msgid "/_File" msgstr "/文件(_F)" #: drakboot:84 logdrake:77 #, c-format msgid "/File/_Quit" msgstr "/文件(F)/退出(_Q)" #: drakboot:84 harddrake2:195 logdrake:77 #, c-format msgid "Q" msgstr "Q" #: drakboot:124 #, c-format msgid "Text only" msgstr "只有文本" #: drakboot:125 #, c-format msgid "Verbose" msgstr "详细" #: drakboot:126 #, c-format msgid "Silent" msgstr "静默" #: drakboot:133 #, c-format msgid "" "Your system bootloader is not in framebuffer mode. To activate graphical " "boot, select a graphic video mode from the bootloader configuration tool." msgstr "" "您的系统引导程序并不位于帧缓存模式。要激活图形化引导程序, 请在引导程序配置工" "具中选择图形视频模式。" #: drakboot:134 #, c-format msgid "Do you want to configure it now?" msgstr "您想要现在配置吗?" #: drakboot:143 #, c-format msgid "Install themes" msgstr "安装主题" #: drakboot:145 #, c-format msgid "Graphical boot theme selection" msgstr "图形化启动主题选择" #: drakboot:148 #, c-format msgid "Graphical boot mode:" msgstr "图形化启动模式:" #: drakboot:150 #, c-format msgid "Theme" msgstr "主题" #: drakboot:153 #, c-format msgid "" "Display theme\n" "under console" msgstr "" "在控制台\n" "显示主题" #: drakboot:158 draksplash:25 #, c-format msgid "Create new theme" msgstr "创建新主题" #: drakboot:190 #, c-format msgid "Default user" msgstr "默认用户" #: drakboot:191 #, c-format msgid "Default desktop" msgstr "默认桌面" #: drakboot:194 #, c-format msgid "No, I do not want autologin" msgstr "否, 不要自动登录" #: drakboot:195 #, c-format msgid "Yes, I want autologin with this (user, desktop)" msgstr "是, 以指定用户的身份自动登录到指定桌面" #: drakboot:202 #, c-format msgid "System mode" msgstr "系统模式" #: drakboot:205 #, c-format msgid "Launch the graphical environment when your system starts" msgstr "系统启动时进入图形环境" #: drakboot:260 #, c-format msgid "" "Please choose a video mode, it will be applied to each of the boot entries " "selected below.\n" "Be sure your video card supports the mode you choose." msgstr "" "请选择视频模式, 该模式将应用到下面所选的每个启动项。\n" "请确定您的视频卡支持您所选的模式。" #: drakbug:46 #, c-format msgid "Mandriva Linux Bug Report Tool" msgstr "Mandriva Linux 故障报告工具" #: drakbug:51 #, c-format msgid "Mandriva Linux Control Center" msgstr "Mandriva Linux 控制中心" #: drakbug:52 #, c-format msgid "First Time Wizard" msgstr "初次使用向导" #: drakbug:53 #, c-format msgid "Synchronization tool" msgstr "同步工具" #: drakbug:54 drakbug:168 #, c-format msgid "Standalone Tools" msgstr "独立工具" #: drakbug:56 drakbug:57 #, c-format msgid "Mandriva Online" msgstr "Mandriva 在线" #: drakbug:58 #, c-format msgid "Remote Control" msgstr "远程控制" #: drakbug:59 #, c-format msgid "Software Manager" msgstr "软件管理器" #: drakbug:60 #, c-format msgid "Windows Migration tool" msgstr "Windows 迁移工具" #: drakbug:61 #, c-format msgid "Configuration Wizards" msgstr "配置向导" #: drakbug:83 #, c-format msgid "Select Mandriva Tool:" msgstr "选择 Mandriva 工具:" #: drakbug:84 #, c-format msgid "" "or Application Name\n" "(or Full Path):" msgstr "" "应用程序名\n" "(或完整路径): " #: drakbug:87 #, c-format msgid "Find Package" msgstr "查找软件包" #: drakbug:89 #, c-format msgid "Package: " msgstr "软件包: " #: drakbug:90 #, c-format msgid "Kernel:" msgstr "内核: " #: drakbug:102 #, c-format msgid "The \"%s\" program has crashed with the following error:" msgstr "" #: drakbug:104 #, c-format msgid "The \"%s\" program has crashed." msgstr "" #: drakbug:106 #, c-format msgid "" "To submit a bug report, click on the report button. \n" "This will open a web browser window on %s where you'll find a form to fill " "in. The information displayed above will be transferred to that server. \n" "Things useful to include in your report are the output of lspcidrake -v, " "kernel version, and /proc/cpuinfo." msgstr "" "要提交故障报告, 单击报告按钮。\n" "它会打开一个浏览器窗口, 进入 %s, 那里有一个表格需要您填写。上面显示的信息将被" "传送到服务器。\n" "如果在您的报告中列出 lspcidrake -v 的输出、内核的版本以及 /proc/cpuinfo 的内" "容, 可能会更有帮助一些。" #: drakbug:112 #, c-format msgid "Report" msgstr "报告" #: drakbug:178 #, c-format msgid "Not installed" msgstr "没有安装" #: drakbug:191 #, c-format msgid "Package not installed" msgstr "软件包未安装" #: drakclock:39 #, c-format msgid "not defined" msgstr "未定义" #: drakclock:41 #, c-format msgid "Change Time Zone" msgstr "更改时区" #: drakclock:44 #, c-format msgid "Timezone - DrakClock" msgstr "时区 - Drak 时间设置" #: drakclock:45 #, c-format msgid "GMT - DrakClock" msgstr "GMT - Drak 时间设置" #: drakclock:45 #, c-format msgid "Is your hardware clock set to GMT?" msgstr "您的系统时钟是否为 GMT?" #: drakclock:70 #, c-format msgid "Network Time Protocol" msgstr "网络时间协议" #: drakclock:72 #, c-format msgid "" "Your computer can synchronize its clock\n" " with a remote time server using NTP" msgstr "" "您的计算机可以通过 NTP 协议与远程时间服\n" "务器的时钟同步" #: drakclock:73 #, c-format msgid "Enable Network Time Protocol" msgstr "启用网络时间协议" #: drakclock:81 #, c-format msgid "Server:" msgstr "服务器:" #: drakclock:110 #, c-format msgid "Please enter a valid NTP server address." msgstr "请输入有效的 NTP 服务器地址。" #: drakclock:125 #, c-format msgid "Could not synchronize with %s." msgstr "无法与 %s 同步。" #: drakclock:127 #, c-format msgid "Retry" msgstr "重试" #: drakclock:149 drakclock:159 #, c-format msgid "Reset" msgstr "重置" #: drakedm:41 #, c-format msgid "GDM (GNOME Display Manager)" msgstr "GDM (GNOME 显示管理器)" #: drakedm:42 #, c-format msgid "KDM (KDE Display Manager)" msgstr "KDM (KDE 显示管理器)" #: drakedm:43 #, c-format msgid "XDM (X Display Manager)" msgstr "XDM (X 显示管理器)" #: drakedm:54 #, c-format msgid "Choosing a display manager" msgstr "选择其它显示管理器" #: drakedm:55 #, c-format msgid "" "X11 Display Manager allows you to graphically log\n" "into your system with the X Window System running and supports running\n" "several different X sessions on your local machine at the same time." msgstr "" "X11 显示管理器允许您以图形化方式登录到您的系统, 使用 X 窗口系统和在您的本\n" "地机器同时跑很多个不同的 X 连接服务。" #: drakedm:73 #, c-format msgid "The change is done, do you want to restart the dm service?" msgstr "更改已经完成, 您想要重新启动 dm 服务吗?" #: drakedm:74 #, c-format msgid "" "You are going to close all running programs and lose your current session. " "Are you really sure that you want to restart the dm service?" msgstr "" "您即将关闭运行中的全部程序, 并丢失您当前的会话。您真的确定您想要重新启动 dm " "服务吗?" #: drakfont:187 #, c-format msgid "Search installed fonts" msgstr "搜索已安装的字体" #: drakfont:189 #, c-format msgid "Unselect fonts installed" msgstr "不选已安装的文件" #: drakfont:213 #, c-format msgid "No fonts found" msgstr "找不到字体" #: drakfont:217 #, c-format msgid "parse all fonts" msgstr "分析所有字体" #: drakfont:222 drakfont:263 drakfont:332 drakfont:373 drakfont:380 #: drakfont:406 drakfont:424 drakfont:438 #, c-format msgid "done" msgstr "完成" #: drakfont:226 #, c-format msgid "Could not find any font in your mounted partitions" msgstr "在已挂载的分区中找不到任何字体" #: drakfont:261 #, c-format msgid "Reselect correct fonts" msgstr "重新选择正确字体" #: drakfont:264 #, c-format msgid "Could not find any font.\n" msgstr "找不到任何字体。\n" #: drakfont:274 #, c-format msgid "Search for fonts in installed list" msgstr "在安装记录中查找字体" #: drakfont:293 #, c-format msgid "%s fonts conversion" msgstr "%s 字体转换" #: drakfont:330 #, c-format msgid "Fonts copy" msgstr "复制字体" #: drakfont:333 #, c-format msgid "True Type fonts installation" msgstr "TrueType 字体安装" #: drakfont:341 #, c-format msgid "please wait during ttmkfdir..." msgstr "正在运行 ttmkfdir, 请稍候..." #: drakfont:342 #, c-format msgid "True Type install done" msgstr "TrueType 字体安装完成" #: drakfont:348 drakfont:363 #, c-format msgid "type1inst building" msgstr "正在构造 type1inst" #: drakfont:357 #, c-format msgid "Ghostscript referencing" msgstr "Ghostscript 引用" #: drakfont:374 #, c-format msgid "Suppress Temporary Files" msgstr "删除临时文件" #: drakfont:376 drakfont:434 #, c-format msgid "Restart XFS" msgstr "重新启动 XFS" #: drakfont:422 drakfont:432 #, c-format msgid "Suppress Fonts Files" msgstr "删除字体文件" #: drakfont:442 #, c-format msgid "" "Before installing any fonts, be sure that you have the right to use and " "install them on your system.\n" "\n" "You can install the fonts the normal way. In rare cases, bogus fonts may " "hang up your X Server." msgstr "" "安装任何字体之前, 请确认您有权利在您的系统安装并使用这些字体。\n" "\n" "通常字体安装可以正常进行。但有罕见的例外, 有问题的字体会使 X 挂住。" #: drakfont:482 #, c-format msgid "Font Installation" msgstr "字体安装" #: drakfont:493 #, c-format msgid "DrakFont" msgstr "Drak 字体" #: drakfont:494 drakfont:646 #, c-format msgid "Font List" msgstr "字体列表" #: drakfont:497 #, c-format msgid "Get Windows Fonts" msgstr "获得 Windows 字体" #: drakfont:503 #, c-format msgid "About" msgstr "关于" #: drakfont:505 drakfont:725 #, c-format msgid "Uninstall" msgstr "卸载" #: drakfont:506 #, c-format msgid "Import" msgstr "导入" #: drakfont:524 #, c-format msgid "Drakfont" msgstr "Drakfont" #: drakfont:526 #, c-format msgid "Copyright (C) 2001-2006 by Mandriva" msgstr "版权 (C) 2001-2006 Mandriva" #: drakfont:528 #, c-format msgid "Font installer." msgstr "字体安装程序。" #: drakfont:530 harddrake2:236 #, c-format msgid "Mandriva Linux" msgstr "Mandriva Linux" #. -PO: put here name(s) and email(s) of translator(s) (eg: "John Smith ") #. -PO: put here name(s) and email(s) of translator(s) (eg: "John Smith ") #: drakfont:537 harddrake2:241 #, c-format msgid "_: Translator(s) name(s) & email(s)\n" msgstr "Funda Wang \n" #: drakfont:547 #, c-format msgid "Choose the applications that will support the fonts:" msgstr "请选择要支持字体的应用程序: " #: drakfont:558 #, c-format msgid "Ghostscript" msgstr "Ghostscript" #: drakfont:559 #, c-format msgid "OpenOffice.org" msgstr "OpenOffice.org" #: drakfont:560 #, c-format msgid "Abiword" msgstr "Abiword" #: drakfont:561 #, c-format msgid "Generic Printers" msgstr "通用打印机" #: drakfont:575 #, c-format msgid "Select the font file or directory and click on 'Add'" msgstr "选择字体文件或目录, 然后单击“添加”" #: drakfont:576 #, c-format msgid "File Selection" msgstr "选择文件" #: drakfont:580 #, c-format msgid "Fonts" msgstr "字体" #: drakfont:644 #, c-format msgid "Import fonts" msgstr "导入字体" #: drakfont:657 #, c-format msgid "Install" msgstr "安装" #: drakfont:688 #, c-format msgid "Are you sure you want to uninstall the following fonts?" msgstr "您确定想要卸载下列字体吗?" #: drakfont:733 #, c-format msgid "Unselected All" msgstr "全部不选" #: drakfont:736 #, c-format msgid "Selected All" msgstr "全部选中" #: drakfont:750 drakfont:769 #, c-format msgid "Importing fonts" msgstr "导入字体" #: drakfont:754 drakfont:774 #, c-format msgid "Initial tests" msgstr "初始测试" #: drakfont:755 #, c-format msgid "Copy fonts on your system" msgstr "复制系统中的字体" #: drakfont:756 #, c-format msgid "Install & convert Fonts" msgstr "安装并转换字体" #: drakfont:757 #, c-format msgid "Post Install" msgstr "安装后的设置" #: drakfont:775 #, c-format msgid "Remove fonts on your system" msgstr "删除系统中的字体" #: drakfont:776 #, c-format msgid "Post Uninstall" msgstr "删除后" #: drakhelp:17 #, c-format msgid "" " drakhelp 0.1\n" "Copyright (C) %s Mandriva.\n" "This is free software and may be redistributed under the terms of the GNU " "GPL.\n" "\n" "Usage: \n" msgstr "" " Drak 帮助 0.1\n" "版权 (C) %s Mandriva.\n" "这是自由软件, 可按照 GNU GPL 协议条款再发放。\n" "\n" "用法: \n" #: drakhelp:22 #, c-format msgid " --help - display this help \n" msgstr " --help - 显示此帮助\n" #: drakhelp:23 #, c-format msgid "" " --id - load the html help page which refers to id_label\n" msgstr " --id - 装入引用 id_label 的 HTML 帮助页面\n" #: drakhelp:24 #, c-format msgid "" " --doc - link to another web page ( for WM welcome " "frontend)\n" msgstr " --doc - 链接到其他网页 ( 给 WM 欢迎的前端使用)\n" #: drakhelp:52 #, c-format msgid "Mandriva Linux Help Center" msgstr "Mandriva Linux 帮助中心" #: drakhelp:52 #, c-format msgid "No Help entry for %s\n" msgstr "%s 没有帮助项\n" #: drakperm:22 #, c-format msgid "System settings" msgstr "系统设置" #: drakperm:23 #, c-format msgid "Custom settings" msgstr "自定义设置" #: drakperm:24 #, c-format msgid "Custom & system settings" msgstr "自定义和系统设置" #: drakperm:32 #, c-format msgid "Security Permissions" msgstr "安全权限" #: drakperm:44 #, c-format msgid "Editable" msgstr "可编辑" #: drakperm:49 drakperm:322 #, c-format msgid "Path" msgstr "路径" #: drakperm:49 drakperm:250 #, c-format msgid "User" msgstr "用户" #: drakperm:49 drakperm:250 #, c-format msgid "Group" msgstr "组" #: drakperm:49 drakperm:334 #, c-format msgid "Permissions" msgstr "权限" #: drakperm:59 #, c-format msgid "Add a new rule" msgstr "添加新规则" #: drakperm:66 drakperm:101 drakperm:126 #, c-format msgid "Edit current rule" msgstr "编辑当前规则" #: drakperm:108 #, c-format msgid "" "Here you can see files to use in order to fix permissions, owners, and " "groups via msec.\n" "You can also edit your own rules which will owerwrite the default rules." msgstr "" "您可以在此处查看权限定义文件, 以便使用 msec 来调整各种文件权限、所有者、组" "等。\n" "您还可以编辑您自己的规则以取代默认的规则。" #: drakperm:110 #, c-format msgid "" "The current security level is %s.\n" "Select permissions to see/edit" msgstr "" "当前安全级别为 %s。\n" "选择要查看/编辑的权限" #: drakperm:122 #, c-format msgid "Up" msgstr "上移" #: drakperm:122 #, c-format msgid "Move selected rule up one level" msgstr "把选中的规则提高一级" #: drakperm:123 #, c-format msgid "Down" msgstr "下移" #: drakperm:123 #, c-format msgid "Move selected rule down one level" msgstr "把选中的规则降低一级" #: drakperm:124 #, c-format msgid "Add a rule" msgstr "添加规则" #: drakperm:124 #, c-format msgid "Add a new rule at the end" msgstr "在末尾添加新的规则" #: drakperm:125 #, c-format msgid "Delete selected rule" msgstr "删除选中的规则" #: drakperm:126 drakups:300 drakups:362 drakups:382 #, c-format msgid "Edit" msgstr "编辑" #: drakperm:242 #, c-format msgid "browse" msgstr "浏览" #: drakperm:247 #, c-format msgid "user" msgstr "用户" #: drakperm:247 #, c-format msgid "group" msgstr "组" #: drakperm:247 #, c-format msgid "other" msgstr "其它" #: drakperm:252 #, c-format msgid "Read" msgstr "读取" #. -PO: here %s will be either "user", "group" or "other" #: drakperm:255 #, c-format msgid "Enable \"%s\" to read the file" msgstr "允许“%s”读取文件" #: drakperm:259 #, c-format msgid "Write" msgstr "写入" #. -PO: here %s will be either "user", "group" or "other" #: drakperm:262 #, c-format msgid "Enable \"%s\" to write the file" msgstr "允许“%s”写入文件" #: drakperm:266 #, c-format msgid "Execute" msgstr "执行" #. -PO: here %s will be either "user", "group" or "other" #: drakperm:269 #, c-format msgid "Enable \"%s\" to execute the file" msgstr "允许“%s”执行此文件" #: drakperm:272 #, c-format msgid "Sticky-bit" msgstr "Sticky-bit" #: drakperm:272 #, c-format msgid "" "Used for directory:\n" " only owner of directory or file in this directory can delete it" msgstr "" "用于目录:\n" " 只有目录的所有者或目录中文件的所有者可以删除它" #: drakperm:273 #, c-format msgid "Set-UID" msgstr "Set-UID" #: drakperm:273 #, c-format msgid "Use owner id for execution" msgstr "使用所有者 ID 执行" #: drakperm:274 #, c-format msgid "Set-GID" msgstr "Set-GID" #: drakperm:274 #, c-format msgid "Use group id for execution" msgstr "使用组 ID 执行" #: drakperm:292 #, c-format msgid "User:" msgstr "用户:" #: drakperm:293 #, c-format msgid "Group:" msgstr "组:" #: drakperm:297 #, c-format msgid "Current user" msgstr "当前用户" #: drakperm:298 #, c-format msgid "When checked, owner and group will not be changed" msgstr "选中后,无法更改所有者和组" #: drakperm:308 #, c-format msgid "Path selection" msgstr "选择路径" #: drakperm:328 #, c-format msgid "Property" msgstr "属性" #: drakperm:378 #, c-format msgid "" "The first character of the path must be a slash (\"/\"):\n" "\"%s\"" msgstr "" "路径的第一个字符必须是斜线(“/”):\n" "“%s”" #: drakperm:388 #, c-format msgid "Both the username and the group must valid!" msgstr "用户名和组名必须都有效!" #: drakperm:389 #, c-format msgid "User: %s" msgstr "用户: %s" #: drakperm:390 #, c-format msgid "Group: %s" msgstr "组: %s" #: draksec:53 #, c-format msgid "ALL" msgstr "所有" #: draksec:54 #, c-format msgid "LOCAL" msgstr "本地" #: draksec:55 #, c-format msgid "NONE" msgstr "无" #: draksec:57 #, c-format msgid "Ignore" msgstr "忽略" #. -PO: Do not alter the and tags. #. -PO: Translate the security levels (Poor, Standard, High, Higher and Paranoid) in the same way, you translated these individuals words. #. -PO: keep the double empty lines between sections, this is formatted a la LaTeX. #: draksec:93 #, c-format msgid "" "Here, you can setup the security level and administrator of your machine.\n" "\n" "\n" "The 'Security Administrator' is the one who " "will receive security alerts if the\n" "'Security Alerts' option is set. It can be a " "username or an email.\n" "\n" "\n" "The 'Security Level' menu allows you to select " "one of the six preconfigured security levels\n" "provided with msec. These levels range from 'poor' security and ease of use, to\n" "'paranoid' config, suitable for very sensitive " "server applications:\n" "\n" "\n" "Poor: This is a totally unsafe but " "very\n" "easy to use security level. It should only be used for machines not " "connected to\n" "any network and that are not accessible to everybody.\n" "\n" "\n" "Standard: This is the standard " "security\n" "recommended for a computer that will be used to connect to the Internet as " "a\n" "client.\n" "\n" "\n" "High: There are already some\n" "restrictions, and more automatic checks are run every night.\n" "\n" "\n" "Higher: The security is now high " "enough\n" "to use the system as a server which can accept connections from many " "clients. If\n" "your machine is only a client on the Internet, you should choose a lower " "level.\n" "\n" "\n" "Paranoid: This is similar to the " "previous\n" "level, but the system is entirely closed and security features are at their\n" "maximum" msgstr "" "您可在此设置安全级别以及您机器的管理员。\n" "\n" "\n" "“安全管理员”是这样一个人, 如果设置了“安全警告”选项, 他就会收到这样的安全警告。您可以设置用" "户名或者电子邮件。\n" "\n" "\n" "“安全级别”菜单允许您从 msec 提供的六种预先配置的" "安全级别中选择一种。这些级别涵盖从易于使用的“”安全性到适合非常敏感的服务器应用的“苛刻”配" "置:\n" "\n" "\n" ":这种情况下非常不安全, 但却是非常易" "于使用的安全级别。这一安全级别应仅用于不连接到任何网络, 且并非人人都可访问的" "机器。\n" "\n" "\n" "标准:对于那些会以客户端连接到 " "Internet 的计算机, 推荐使用本安全级别。\n" "\n" "\n" ":此安全级别已有一些限制, 并且会在每" "晚执行更多的自动检查。\n" "\n" "\n" "较高:假如要将系统用作将接受大量客户访" "问的服务器的话, 本安全级别已经足够安全了。如果您的计算机仅仅是 Internet 的客" "户端, 请使用较低的级别。\n" "\n" "\n" "苛刻:本级别与前一级别类似, 但系统几乎" "完全封闭, 安全特性达到最高" #: draksec:147 harddrake2:211 #, c-format msgid "" "Description of the fields:\n" "\n" msgstr "" "各个域的描述:\n" "\n" #: draksec:161 #, c-format msgid "(default value: %s)" msgstr "(默认值: %s)" #: draksec:166 #, c-format msgid "Security Level and Checks" msgstr "安全级别和检查" #: draksec:203 #, c-format msgid "Security Level:" msgstr "安全级别:" #: draksec:210 #, c-format msgid "Security Administrator:" msgstr "安全管理员:" #: draksec:212 #, c-format msgid "Basic options" msgstr "基本选项" #: draksec:226 #, c-format msgid "Network Options" msgstr "网络选项" #: draksec:226 #, c-format msgid "System Options" msgstr "系统选项" #: draksec:261 #, c-format msgid "Periodic Checks" msgstr "定期检查" #: draksec:291 #, c-format msgid "Please wait, setting security level..." msgstr "请稍候, 正在设置安全级别..." #: draksec:297 #, c-format msgid "Please wait, setting security options..." msgstr "请稍候, 正在设置安全选项..." #: draksound:47 #, c-format msgid "No Sound Card detected!" msgstr "没有发现声卡!" #. -PO: keep the double empty lines between sections, this is formatted a la LaTeX #: draksound:50 #, c-format msgid "" "No Sound Card has been detected on your machine. Please verify that a Linux-" "supported Sound Card is correctly plugged in.\n" "\n" "\n" "You can visit our hardware database at:\n" "\n" "\n" "http://www.mandrivalinux.com/en/hardware.php3" msgstr "" "在您的机器上没有检测到声卡。请检查您是否正确的安装了您的声卡, 它是否被 Linux " "支持。\n" "\n" "\n" "您可以访问硬件数据库: \n" "\n" "\n" "http://www.mandrivalinux.com/zh_CN/hardware.php3" #: draksound:57 #, c-format msgid "" "\n" "\n" "\n" "Note: if you've an ISA PnP sound card, you'll have to use the alsaconf or " "the sndconfig program. Just type \"alsaconf\" or \"sndconfig\" in a console." msgstr "" "\n" "\n" "\n" "注意: 如果您的声卡是 ISA 即插即用的,您需要使用 sndconfig 程序。只需在控制台" "中输入“alsaconf”或“sndconfig”。" #: draksplash:32 #, c-format msgid "X coordinate of text box" msgstr "文本框的 X 坐标" #: draksplash:33 #, c-format msgid "Y coordinate of text box" msgstr "文本框的 Y 坐标" #: draksplash:34 #, c-format msgid "Text box width" msgstr "文本框宽度" #: draksplash:35 #, c-format msgid "Text box height" msgstr "文本框高度" #: draksplash:36 #, c-format msgid "" "The progress bar X coordinate\n" "of its upper left corner" msgstr "进度条的左上角的 X 坐标" #: draksplash:37 #, c-format msgid "" "The progress bar Y coordinate\n" "of its upper left corner" msgstr "进度条的左上角的 Y 坐标" #: draksplash:38 #, c-format msgid "The width of the progress bar" msgstr "进度条的宽度" #: draksplash:39 #, c-format msgid "The height of the progress bar" msgstr "进度条的高度" #: draksplash:40 #, c-format msgid "X coordinate of the text" msgstr "文本的 X 坐标" #: draksplash:41 #, c-format msgid "Y coordinate of the text" msgstr "文本的 Y 坐标" #: draksplash:42 #, c-format msgid "Text box transparency" msgstr "文本框透明度" #: draksplash:43 #, c-format msgid "Progress box transparency" msgstr "进度框透明度" #: draksplash:44 #, c-format msgid "Text size" msgstr "文本大小" #: draksplash:61 #, c-format msgid "Choose progress bar color 1" msgstr "选择进度条颜色 1" #: draksplash:62 #, c-format msgid "Choose progress bar color 2" msgstr "选择进度条颜色 2" #: draksplash:63 #, c-format msgid "Choose progress bar background" msgstr "选择进度条背景" #: draksplash:64 #, c-format msgid "Gradient type" msgstr "渐变类型" #: draksplash:65 #, c-format msgid "Choose text color" msgstr "选择文本区域颜色" #: draksplash:67 draksplash:74 #, c-format msgid "Choose picture" msgstr "选择图片" #: draksplash:68 #, c-format msgid "Silent bootsplash" msgstr "静默启动屏幕" #: draksplash:71 #, c-format msgid "Choose text zone color" msgstr "选择文本区域颜色" #: draksplash:72 #, c-format msgid "Text color" msgstr "文本颜色" #: draksplash:73 #, c-format msgid "Background color" msgstr "背景颜色" #: draksplash:75 #, c-format msgid "Verbose bootsplash" msgstr "详细静默屏幕" #: draksplash:81 #, c-format msgid "Theme name" msgstr "主题名称" #: draksplash:84 #, c-format msgid "Final resolution" msgstr "最终分辨率" #: draksplash:87 #, c-format msgid "Display logo on Console" msgstr "在控制台显示 LOGO" #: draksplash:92 #, c-format msgid "Save theme" msgstr "保存主题" #: draksplash:154 #, c-format msgid "Please enter a theme name" msgstr "请输入要主题名称" #: draksplash:157 #, c-format msgid "Please select a splash image" msgstr "请选择飞溅图像" #: draksplash:160 #, c-format msgid "saving Bootsplash theme..." msgstr "正在保存开机画面主题..." #: draksplash:169 #, c-format msgid "Unable to load image file %s" msgstr "无法装入图像文件 %s" #: draksplash:180 #, c-format msgid "choose image" msgstr "选择图像" #: draksplash:195 #, c-format msgid "Color selection" msgstr "颜色选择" #: drakups:71 #, c-format msgid "Connected through a serial port or an usb cable" msgstr "通过串口或 USB 电缆连接" #: drakups:72 #, c-format msgid "Manual configuration" msgstr "手工配置" #: drakups:78 #, c-format msgid "Add an UPS device" msgstr "添加 UPS 设备" #: drakups:81 #, c-format msgid "" "Welcome to the UPS configuration utility.\n" "\n" "Here, you'll add a new UPS to your system.\n" msgstr "" "欢迎使用 UPS 配置工具。\n" "\n" "在这里您可以为系统添加一台新的 UPS。\n" #: drakups:88 #, c-format msgid "" "We're going to add an UPS device.\n" "\n" "Do you want to autodetect UPS devices connected to this machine or to " "manually select them?" msgstr "" "现在即将添加 UPS 设备。\n" "\n" "您是想要自动检测连接到本机的 UPS 设备还是手动选择?" #: drakups:91 #, c-format msgid "Autodetection" msgstr "自动检测" #: drakups:99 harddrake2:367 #, c-format msgid "Detection in progress" msgstr "检测进行中" #: drakups:118 drakups:157 logdrake:457 logdrake:463 #, c-format msgid "Congratulations" msgstr "恭喜" #: drakups:119 #, c-format msgid "The wizard successfully added the following UPS devices:" msgstr "向导已经成功添加了下列 UPS 设备:" #: drakups:121 #, c-format msgid "No new UPS devices was found" msgstr "没有发现新的 UPS 设备" #: drakups:126 drakups:138 #, c-format msgid "UPS driver configuration" msgstr "UPS 驱动程序配置" #: drakups:126 #, c-format msgid "Please select your UPS model." msgstr "请选择您 UPS 的型号。" #: drakups:127 #, c-format msgid "Manufacturer / Model:" msgstr "制造商/型号:" #: drakups:138 #, c-format msgid "" "We are configuring the \"%s\" UPS from \"%s\".\n" "Please fill in its name, its driver and its port." msgstr "" "正在配置“%2$s”的“%1$s”。\n" "请填入其名称, 其驱动程序和其端口。" #: drakups:143 #, c-format msgid "Name:" msgstr "名称:" #: drakups:143 #, c-format msgid "The name of your ups" msgstr "UPS 的名称" #: drakups:144 #, c-format msgid "The driver that manages your ups" msgstr "管理您 UPS 的驱动程序" #: drakups:145 #, c-format msgid "Port:" msgstr "端口:" #: drakups:147 #, c-format msgid "The port on which is connected your ups" msgstr "连接您 UPS 的端口" #: drakups:157 #, c-format msgid "The wizard successfully configured the new \"%s\" UPS device." msgstr "向导已经成功配置了“%s”UPS 设备。" #: drakups:248 #, c-format msgid "UPS devices" msgstr "UPS 设备" #: drakups:249 drakups:268 drakups:284 harddrake2:85 harddrake2:111 #: harddrake2:118 #, c-format msgid "Name" msgstr "名称" #: drakups:249 harddrake2:133 #, c-format msgid "Driver" msgstr "驱动程序" #: drakups:249 harddrake2:52 #, c-format msgid "Port" msgstr "端口" #: drakups:267 #, c-format msgid "UPS users" msgstr "UPS 用户" #: drakups:283 #, c-format msgid "Access Control Lists" msgstr "访问控制列表" #: drakups:284 #, c-format msgid "IP address" msgstr "IP 地址" #: drakups:284 #, c-format msgid "IP mask" msgstr "IP 掩码" #: drakups:296 #, c-format msgid "Rules" msgstr "规则" #: drakups:297 #, c-format msgid "Action" msgstr "操作" #: drakups:297 harddrake2:82 #, c-format msgid "Level" msgstr "级别" #: drakups:297 #, c-format msgid "ACL name" msgstr "ACL 名称" #: drakups:329 #, c-format msgid "UPS Management" msgstr "UPS 管理" #: drakups:333 drakups:342 #, c-format msgid "DrakUPS" msgstr "DrakUPS" #: drakups:339 #, c-format msgid "Welcome to the UPS configuration tools" msgstr "欢迎使用 UPS 配置工具" #: drakxtv:67 #, c-format msgid "No TV Card detected!" msgstr "没有发现电视卡!" #. -PO: keep the double empty lines between sections, this is formatted a la LaTeX #: drakxtv:69 #, c-format msgid "" "No TV Card has been detected on your machine. Please verify that a Linux-" "supported Video/TV Card is correctly plugged in.\n" "\n" "\n" "You can visit our hardware database at:\n" "\n" "\n" "http://www.mandrivalinux.com/en/hardware.php3" msgstr "" "没有在您的计算机上检测到电视卡。请检查是否正确安装了 Linux 支持的视频/电视" "卡。\n" "\n" "\n" "请您访问我们的硬件数据库:\n" "\n" "\n" "http://www.mandarkelinux.com/zh_CN/hardware.php3" #: finish-install:44 #, c-format msgid "Please, choose your keyboard layout." msgstr "请选择您使用的键盘布局。" #: finish-install:111 finish-install:129 finish-install:141 #, c-format msgid "Encrypted home partition" msgstr "加密的主分区" #: finish-install:111 #, c-format msgid "Please enter a password for the %s user" msgstr "请输入 %s 用户的密码" #: finish-install:129 #, c-format msgid "Creating encrypted home partition" msgstr "创建加密的主分区" #: finish-install:141 #, c-format msgid "Formatting encrypted home partition" msgstr "格式化加密的主分区" #: harddrake2:27 #, c-format msgid "Alternative drivers" msgstr "替代的驱动程序" #: harddrake2:28 #, c-format msgid "the list of alternative drivers for this sound card" msgstr "这个声卡的替代驱动程序列表" #: harddrake2:30 harddrake2:120 #, c-format msgid "Bus" msgstr "总线" #: harddrake2:31 #, c-format msgid "" "this is the physical bus on which the device is plugged (eg: PCI, USB, ...)" msgstr "设备所插在的物理总线(例如:PCI, USB, ...)" #: harddrake2:33 harddrake2:146 #, c-format msgid "Bus identification" msgstr "总线标识" #: harddrake2:34 #, c-format msgid "" "- PCI and USB devices: this lists the vendor, device, subvendor and " "subdevice PCI/USB ids" msgstr "" "- PCI 和 USB 设备:列出 PCI/USB 的 vendor, device, subvendor 和 subdevice 代码" #: harddrake2:36 #, c-format msgid "Location on the bus" msgstr "在总线上的位置" #: harddrake2:37 #, c-format msgid "" "- pci devices: this gives the PCI slot, device and function of this card\n" "- eide devices: the device is either a slave or a master device\n" "- scsi devices: the scsi bus and the scsi device ids" msgstr "" "- pci 设备: 列出 PCI 插槽, 设备和功能\n" "- eide 设备: 主设备或从设备\n" "- scsi 设备: 列出 scsi 总线和 scsi 设备号" #: harddrake2:40 #, c-format msgid "Drive capacity" msgstr "驱动器能力" #: harddrake2:40 #, c-format msgid "special capacities of the driver (burning ability and or DVD support)" msgstr "驱动器的特殊能力(刻录能力和/或 DVD 支持)" #: harddrake2:41 #, c-format msgid "Description" msgstr "描述" #: harddrake2:41 #, c-format msgid "this field describes the device" msgstr "此处描述了设备" #: harddrake2:42 #, c-format msgid "Old device file" msgstr "旧的设备文件" #: harddrake2:43 #, c-format msgid "old static device name used in dev package" msgstr "dev 软件包中使用的旧的静态设备名" #. -PO: here "module" is the "jargon term" for a kernel driver #: harddrake2:46 #, c-format msgid "Module" msgstr "模块" #: harddrake2:46 #, c-format msgid "the module of the GNU/Linux kernel that handles the device" msgstr "管理该设备的 GNU/Linux 内核模块" #: harddrake2:47 #, c-format msgid "Extended partitions" msgstr "扩展分区" #: harddrake2:47 #, c-format msgid "the number of extended partitions" msgstr "扩展分区的编号" #: harddrake2:48 #, c-format msgid "Geometry" msgstr "物理参数" #: harddrake2:48 #, c-format msgid "Cylinder/head/sectors geometry of the disk" msgstr "磁盘的磁头/扇区等物理参数" #: harddrake2:49 #, c-format msgid "Disk controller" msgstr "磁盘控制器" #: harddrake2:49 #, c-format msgid "the disk controller on the host side" msgstr "主机方的磁盘控制器" #: harddrake2:50 #, c-format msgid "Media class" msgstr "介质类别" #: harddrake2:50 #, c-format msgid "class of hardware device" msgstr "硬件设备的分类" #: harddrake2:51 harddrake2:83 #, c-format msgid "Model" msgstr "型号" #: harddrake2:51 #, c-format msgid "hard disk model" msgstr "硬盘型号" #: harddrake2:52 #, c-format msgid "network printer port" msgstr "网络打印机端口" #: harddrake2:53 #, c-format msgid "Primary partitions" msgstr "主分区" #: harddrake2:53 #, c-format msgid "the number of the primary partitions" msgstr "主分区的编号" #: harddrake2:54 harddrake2:88 #, c-format msgid "Vendor" msgstr "厂家" #: harddrake2:54 #, c-format msgid "the vendor name of the device" msgstr "设备的厂家名称" #: harddrake2:55 #, c-format msgid "PCI domain" msgstr "" #: harddrake2:55 #, fuzzy, c-format msgid "the PCI domain of the device" msgstr "设备的厂家名称" #: harddrake2:56 #, c-format msgid "Bus PCI #" msgstr "总线 PCI #" #: harddrake2:56 #, c-format msgid "the PCI bus on which the device is plugged" msgstr "设备所插入的 PCI 总线" #: harddrake2:57 #, c-format msgid "PCI device #" msgstr "PCI 设备 #" #: harddrake2:57 #, c-format msgid "PCI device number" msgstr "PCI 设备号" #: harddrake2:58 #, c-format msgid "PCI function #" msgstr "PCI 功能 #" #: harddrake2:58 #, c-format msgid "PCI function number" msgstr "PCI 功能号" #: harddrake2:59 #, c-format msgid "Vendor ID" msgstr "厂家 ID" #: harddrake2:59 #, c-format msgid "this is the standard numerical identifier of the vendor" msgstr "这是厂家的标准数字标识" #: harddrake2:60 #, c-format msgid "Device ID" msgstr "设备 ID " #: harddrake2:60 #, c-format msgid "this is the numerical identifier of the device" msgstr "这是设备的数字标识" #: harddrake2:61 #, c-format msgid "Sub vendor ID" msgstr "子供应商 ID" #: harddrake2:61 #, c-format msgid "this is the minor numerical identifier of the vendor" msgstr "这是供应商的次要数字标识" #: harddrake2:62 #, c-format msgid "Sub device ID" msgstr "子设备 ID" #: harddrake2:62 #, c-format msgid "this is the minor numerical identifier of the device" msgstr "这是设备的次要数字标识" #: harddrake2:63 #, c-format msgid "Device USB ID" msgstr "设备 USB ID" #: harddrake2:63 #, c-format msgid ".." msgstr ".." #: harddrake2:66 #, c-format msgid "Bogomips" msgstr "Bogomips" #: harddrake2:66 #, c-format msgid "" "the GNU/Linux kernel needs to run a calculation loop at boot time to " "initialize a timer counter. Its result is stored as bogomips as a way to " "\"benchmark\" the cpu." msgstr "" "GNU/Linux 核心需要在启动时运行计算循环以便初始化计时器。其结果将以 bogomips " "存储, 以便作为 CPU 的衡量“基准”(Benchmark)。" #: harddrake2:67 #, c-format msgid "Cache size" msgstr "缓存大小" #: harddrake2:67 #, c-format msgid "size of the (second level) cpu cache" msgstr "CPU 二级缓存大小" #. -PO: here "comas" is the medical coma, not the lexical coma!! #: harddrake2:70 #, c-format msgid "Coma bug" msgstr "Coma 错误" #: harddrake2:70 #, c-format msgid "whether this cpu has the Cyrix 6x86 Coma bug" msgstr "此 CPU 是否有 Cyrix 6x86 Coma 错误" #: harddrake2:71 #, c-format msgid "Cpuid family" msgstr "CPUID 家族" #: harddrake2:71 #, c-format msgid "family of the cpu (eg: 6 for i686 class)" msgstr "CPU 家族(如 6 代表 i686 级别)" #: harddrake2:72 #, c-format msgid "Cpuid level" msgstr "CPUID 级别" #: harddrake2:72 #, c-format msgid "information level that can be obtained through the cpuid instruction" msgstr "通过 CPUID 指令可获取的信息级别" #: harddrake2:73 #, c-format msgid "Frequency (MHz)" msgstr "频率(MHz)" #: harddrake2:73 #, c-format msgid "" "the CPU frequency in MHz (Megahertz which in first approximation may be " "coarsely assimilated to number of instructions the cpu is able to execute " "per second)" msgstr "" "以 MHz 为单位的 CPU 频率(初次估计的兆赫兹可能比较接近 CPU 每秒可执行的指令数)" #: harddrake2:74 #, c-format msgid "Flags" msgstr "标志" #: harddrake2:74 #, c-format msgid "CPU flags reported by the kernel" msgstr "核心报告的 CPU 标志" #: harddrake2:75 #, c-format msgid "Fdiv bug" msgstr "Fdiv 错误" #: harddrake2:76 #, c-format msgid "" "Early Intel Pentium chips manufactured have a bug in their floating point " "processor which did not achieve the required precision when performing a " "Floating point DIVision (FDIV)" msgstr "" "早期的 Intel Pentium 芯片在浮点处理器中有错误, 导致在执行浮点除法(FDIV)时精度" "下降" #: harddrake2:77 #, c-format msgid "Is FPU present" msgstr "FPU 存在" #: harddrake2:77 #, c-format msgid "yes means the processor has an arithmetic coprocessor" msgstr "“是”代表处理器有数学协处理器" #: harddrake2:78 #, c-format msgid "Whether the FPU has an irq vector" msgstr "FPU 是否有 IRQ 向量" #: harddrake2:78 #, c-format msgid "yes means the arithmetic coprocessor has an exception vector attached" msgstr "“是”代表算术协处理器附加了意外向量" #: harddrake2:79 #, c-format msgid "F00f bug" msgstr "F00f 错误" #: harddrake2:79 #, c-format msgid "early pentiums were buggy and freezed when decoding the F00F bytecode" msgstr "早期的奔腾芯片在解码 FOOF 字节码时存在错误并可能会死锁" #: harddrake2:80 #, c-format msgid "Halt bug" msgstr "死锁错误" #: harddrake2:81 #, c-format msgid "" "Some of the early i486DX-100 chips cannot reliably return to operating mode " "after the \"halt\" instruction is used" msgstr "某些早期的 i486DX-100 芯片在使用“halt”指令后无法确定返回操作模式" #: harddrake2:82 #, c-format msgid "sub generation of the cpu" msgstr "CPU 的次世代" #: harddrake2:83 #, c-format msgid "generation of the cpu (eg: 8 for Pentium III, ...)" msgstr "CPU 世代(如 8 代表 Pentium III, 等等)" #: harddrake2:84 #, c-format msgid "Model name" msgstr "型号名称" #: harddrake2:84 #, c-format msgid "official vendor name of the cpu" msgstr "CPU 的官方厂家名称" #: harddrake2:85 #, c-format msgid "the name of the CPU" msgstr "CPU 名称" #: harddrake2:86 #, c-format msgid "Processor ID" msgstr "处理器 ID" #: harddrake2:86 #, c-format msgid "the number of the processor" msgstr "处理器编号" #: harddrake2:87 #, c-format msgid "Model stepping" msgstr "型号步进" #: harddrake2:87 #, c-format msgid "stepping of the cpu (sub model (generation) number)" msgstr "CPU 步进(次型号(世代))" #: harddrake2:88 #, c-format msgid "the vendor name of the processor" msgstr "处理器供应商" #: harddrake2:89 #, c-format msgid "Write protection" msgstr "写保护" #: harddrake2:89 #, c-format msgid "" "the WP flag in the CR0 register of the cpu enforce write protection at the " "memory page level, thus enabling the processor to prevent unchecked kernel " "accesses to user memory (aka this is a bug guard)" msgstr "" "CPU 中 CRO 寄存器的 WP 标志位强制在内存页面级别进行写保护, 这使得处理器可以避" "免未检查的内核访问用户内存(不过此防护有 bug)" #: harddrake2:93 #, c-format msgid "Floppy format" msgstr "软盘格式化" #: harddrake2:93 #, c-format msgid "format of floppies supported by the drive" msgstr "驱动器接受的软盘格式" #: harddrake2:97 #, c-format msgid "Channel" msgstr "通道" #: harddrake2:97 #, c-format msgid "EIDE/SCSI channel" msgstr "EIDE/SCSI 通道" #: harddrake2:98 #, c-format msgid "Disk identifier" msgstr "磁盘标识" #: harddrake2:98 #, c-format msgid "usually the disk serial number" msgstr "通常是磁盘序列号" #: harddrake2:99 #, c-format msgid "Logical unit number" msgstr "逻辑单元号" #: harddrake2:99 #, c-format msgid "" "the SCSI target number (LUN). SCSI devices connected to a host are uniquely " "identified by a\n" "channel number, a target id and a logical unit number" msgstr "" "SCSI 目标号(LUN)。连接到主机的 SCSI 设备将通过通道号、目标 ID 和逻辑单元号加" "以唯一标识。" #. -PO: here, "size" is the size of the ram chip (eg: 128Mo, 256Mo, ...) #: harddrake2:106 #, c-format msgid "Installed size" msgstr "安装容量" #: harddrake2:106 #, c-format msgid "Installed size of the memory bank" msgstr "已安装的内存容量" #: harddrake2:107 #, c-format msgid "Enabled Size" msgstr "启用容量" #: harddrake2:107 #, c-format msgid "Enabled size of the memory bank" msgstr "已启用的内存容量" #: harddrake2:108 #, c-format msgid "type of the memory device" msgstr "内存条类型" #: harddrake2:109 #, c-format msgid "Speed" msgstr "速度" #: harddrake2:109 #, c-format msgid "Speed of the memory bank" msgstr "内存速度" #: harddrake2:110 #, c-format msgid "Bank connections" msgstr "内存条连接" #: harddrake2:111 #, c-format msgid "Socket designation of the memory bank" msgstr "内存条的插座设计" #: harddrake2:115 #, c-format msgid "Device file" msgstr "设备文件" #: harddrake2:115 #, c-format msgid "" "the device file used to communicate with the kernel driver for the mouse" msgstr "内核驱动程序与鼠标进行通讯的设备文件" #: harddrake2:116 #, c-format msgid "Emulated wheel" msgstr "模拟滚轮" #: harddrake2:116 #, c-format msgid "whether the wheel is emulated or not" msgstr "是否模拟滚轮" #: harddrake2:117 #, c-format msgid "the type of the mouse" msgstr "鼠标类型" #: harddrake2:118 #, c-format msgid "the name of the mouse" msgstr "鼠标名称" #: harddrake2:119 #, c-format msgid "Number of buttons" msgstr "按钮数目" #: harddrake2:119 #, c-format msgid "the number of buttons the mouse has" msgstr "鼠标按钮数" #: harddrake2:120 #, c-format msgid "the type of bus on which the mouse is connected" msgstr "请选择您鼠标所连接的总线类型" #: harddrake2:121 #, c-format msgid "Mouse protocol used by X11" msgstr "X11 所用的鼠标协议" #: harddrake2:121 #, c-format msgid "the protocol that the graphical desktop use with the mouse" msgstr "图形桌面使用鼠标的协议" #: harddrake2:128 harddrake2:137 harddrake2:144 harddrake2:152 harddrake2:332 #, c-format msgid "Identification" msgstr "标识" #: harddrake2:129 harddrake2:145 #, c-format msgid "Connection" msgstr "连接" #: harddrake2:138 #, c-format msgid "Performances" msgstr "性能" #: harddrake2:139 #, c-format msgid "Bugs" msgstr "错误" #: harddrake2:140 #, c-format msgid "FPU" msgstr "FPU" #: harddrake2:147 #, c-format msgid "Device" msgstr "设备" #: harddrake2:148 #, c-format msgid "Partitions" msgstr "分区" #: harddrake2:153 #, c-format msgid "Features" msgstr "特性" #. -PO: please keep all "/" characters !!! #: harddrake2:176 logdrake:78 #, c-format msgid "/_Options" msgstr "/选项(_O)" #: harddrake2:177 harddrake2:206 logdrake:80 #, c-format msgid "/_Help" msgstr "/帮助(_H)" #: harddrake2:181 #, c-format msgid "/Autodetect _printers" msgstr "/自动检测打印机(_P)" #: harddrake2:182 #, c-format msgid "/Autodetect _modems" msgstr "/自动检测调制解调器(_M)" #: harddrake2:183 #, c-format msgid "/Autodetect _jaz drives" msgstr "/自动检测 jaz 驱动器(_J)" #: harddrake2:184 #, c-format msgid "/Autodetect parallel _zip drives" msgstr "/自动检测并口 zip 驱动器(_Z)" #: harddrake2:188 #, c-format msgid "Hardware Configuration" msgstr "硬件配置" #: harddrake2:195 #, c-format msgid "/_Quit" msgstr "/退出(_Q)" #: harddrake2:208 #, c-format msgid "/_Fields description" msgstr "/域描述(_F)" #: harddrake2:210 #, c-format msgid "Harddrake help" msgstr "“Drak 硬件配置”帮助" #: harddrake2:219 #, c-format msgid "Select a device!" msgstr "请选择设备!" #: harddrake2:219 #, c-format msgid "" "Once you've selected a device, you'll be able to see the device information " "in fields displayed on the right frame (\"Information\")" msgstr "只要您选中了设备, 您就能看到在右侧框架(“信息”)中显示的解释。" #: harddrake2:225 #, c-format msgid "/_Report Bug" msgstr "/故障报告(_R)" #: harddrake2:227 #, c-format msgid "/_About..." msgstr "/关于(_A)..." #: harddrake2:230 #, c-format msgid "Harddrake" msgstr "Drak 硬件配置" #: harddrake2:232 #, c-format msgid "Copyright (C) %s by Mandriva" msgstr "版权 (C) %s Mandriva" #: harddrake2:234 #, c-format msgid "This is HardDrake, a %s hardware configuration tool." msgstr "这是 HardDrake,%s 的硬件配置工具。" #: harddrake2:267 #, c-format msgid "Detected hardware" msgstr "检测到的硬件" #: harddrake2:270 scannerdrake:286 #, c-format msgid "Information" msgstr "信息" #: harddrake2:272 #, c-format msgid "Set current driver options" msgstr "设定当前驱动程序选项" #: harddrake2:279 #, c-format msgid "Run config tool" msgstr "运行配置工具" #: harddrake2:299 #, c-format msgid "" "Click on a device in the left tree in order to display its information here." msgstr "单击左侧树中的设备, 就可在此显示其信息。" #: harddrake2:319 #, c-format msgid "unknown" msgstr "未知" #: harddrake2:340 #, c-format msgid "Misc" msgstr "杂项" #: harddrake2:415 #, c-format msgid "secondary" msgstr "次要" #: harddrake2:415 #, c-format msgid "primary" msgstr "主" #: harddrake2:419 #, c-format msgid "burner" msgstr "刻录机" #: harddrake2:419 #, c-format msgid "DVD" msgstr "DVD" #: localedrake:47 #, c-format msgid "LocaleDrake" msgstr "Drak 语言设置" #: localedrake:53 #, c-format msgid "You should install the following packages: %s" msgstr "您应该安装下列软件包:%s" #. -PO: the following is used to combine packages names. eg: "initscripts, harddrake, yudit" #: localedrake:56 #, c-format msgid ", " msgstr "、" #: localedrake:64 #, c-format msgid "The change is done, but to be effective you must logout" msgstr "修改已经完成, 不过您必须退出登录修改才会生效" #: logdrake:51 #, c-format msgid "Mandriva Linux Tools Logs" msgstr "Mandriva Linux 工具日志" #: logdrake:52 #, c-format msgid "Logs" msgstr "日志" #: logdrake:65 #, c-format msgid "Show only for the selected day" msgstr "仅显示被选择的日期" #: logdrake:72 #, c-format msgid "/File/_New" msgstr "/文件(F)/新建(_N)" #: logdrake:72 #, c-format msgid "N" msgstr "N" #: logdrake:73 #, c-format msgid "/File/_Open" msgstr "/文件(F)/打开(_O)" #: logdrake:73 #, c-format msgid "O" msgstr "O" #: logdrake:74 #, c-format msgid "/File/_Save" msgstr "/文件(F)/保存(_S)" #: logdrake:74 #, c-format msgid "S" msgstr "S" #: logdrake:75 #, c-format msgid "/File/Save _As" msgstr "/文件(F)/另存为(_A)" #: logdrake:76 #, c-format msgid "/File/-" msgstr "/文件(F)/-" #: logdrake:79 #, c-format msgid "/Options/Test" msgstr "/选项(O)/测试" #: logdrake:81 #, c-format msgid "/Help/_About..." msgstr "/帮助(H)/关于(_A)..." #: logdrake:110 #, c-format msgid "" "_:this is the auth.log log file\n" "Authentication" msgstr "身份认证" #: logdrake:111 #, c-format msgid "" "_:this is the user.log log file\n" "User" msgstr "用户" #: logdrake:112 #, c-format msgid "" "_:this is the /var/log/messages log file\n" "Messages" msgstr "消息" #: logdrake:113 #, c-format msgid "" "_:this is the /var/log/syslog log file\n" "Syslog" msgstr "系统日志" #: logdrake:117 #, c-format msgid "search" msgstr "搜索" #: logdrake:129 #, c-format msgid "A tool to monitor your logs" msgstr "日志监视工具" #: logdrake:131 #, c-format msgid "Settings" msgstr "设置" #: logdrake:134 #, c-format msgid "Matching" msgstr "匹配" #: logdrake:135 #, c-format msgid "but not matching" msgstr "不匹配" #: logdrake:138 #, c-format msgid "Choose file" msgstr "选择文件" #: logdrake:150 #, c-format msgid "Calendar" msgstr "日历" #: logdrake:159 #, c-format msgid "Content of the file" msgstr "文件内容" #: logdrake:163 logdrake:407 #, c-format msgid "Mail alert" msgstr "邮件提醒" #: logdrake:170 #, c-format msgid "The alert wizard has failed unexpectedly:" msgstr "提醒向导意外失败:" #: logdrake:174 #, c-format msgid "Save" msgstr "保存" #: logdrake:222 #, c-format msgid "please wait, parsing file: %s" msgstr "请等待, 正在分析文件: %s" #: logdrake:244 #, c-format msgid "Sorry, log file isn't available!" msgstr "" #: logdrake:292 #, c-format msgid "Error while opening \"%s\" log file: %s\n" msgstr "" #: logdrake:385 #, c-format msgid "Apache World Wide Web Server" msgstr "Apache WWW 服务器" #: logdrake:386 #, c-format msgid "Domain Name Resolver" msgstr "域名解析器" #: logdrake:387 #, c-format msgid "Ftp Server" msgstr "FTP 服务器" #: logdrake:388 #, c-format msgid "Postfix Mail Server" msgstr "Postfix 邮件服务" #: logdrake:389 #, c-format msgid "Samba Server" msgstr "Samba 服务器" #: logdrake:390 #, c-format msgid "SSH Server" msgstr "SSH 服务器" #: logdrake:391 #, c-format msgid "Webmin Service" msgstr "Webmin 服务" #: logdrake:392 #, c-format msgid "Xinetd Service" msgstr "Xinetd 服务" #: logdrake:401 #, c-format msgid "Configure the mail alert system" msgstr "配置邮件提醒系统" #: logdrake:402 #, c-format msgid "Stop the mail alert system" msgstr "停止邮件提醒系统" #: logdrake:410 #, c-format msgid "Mail alert configuration" msgstr "邮件提醒设定" #: logdrake:411 #, c-format msgid "" "Welcome to the mail configuration utility.\n" "\n" "Here, you'll be able to set up the alert system.\n" msgstr "" "欢迎使用电子邮件配置工具。\n" "\n" "您可以在这里配置提醒。\n" #: logdrake:414 #, c-format msgid "What do you want to do?" msgstr "您想做什么?" #: logdrake:421 #, c-format msgid "Services settings" msgstr "服务设置" #: logdrake:422 #, c-format msgid "" "You will receive an alert if one of the selected services is no longer " "running" msgstr "如果选中的服务中有任何一个停止运行, 您将收到提醒" #: logdrake:429 #, c-format msgid "Load setting" msgstr "负载设置" #: logdrake:430 #, c-format msgid "You will receive an alert if the load is higher than this value" msgstr "当负载超过这个值时您会收到一个警报" #: logdrake:431 #, c-format msgid "" "_: load here is a noun, the load of the system\n" "Load" msgstr "负载" #: logdrake:436 #, c-format msgid "Alert configuration" msgstr "提醒配置" #: logdrake:437 #, c-format msgid "Please enter your email address below " msgstr "请在下面输入您的电子邮件地址 " #: logdrake:438 #, c-format msgid "and enter the name (or the IP) of the SMTP server you wish to use" msgstr "请输入您想使用的 SMTP 服务器的名称(或 IP 地址)" #: logdrake:445 #, c-format msgid "\"%s\" neither is a valid email nor is an existing local user!" msgstr "“%s”既不是有效的电子邮件, 也不是已存在的本地用户!" #: logdrake:450 #, c-format msgid "" "\"%s\" is a local user, but you did not select a local smtp, so you must use " "a complete email address!" msgstr "" "“%s”是本地用户, 但是您没有选择本地 SMTP, 所以您必须使用完整的电子邮件地址!" #: logdrake:457 #, c-format msgid "The wizard successfully configured the mail alert." msgstr "向导已经成功配置了邮件提醒。" #: logdrake:463 #, c-format msgid "The wizard successfully disabled the mail alert." msgstr "向导已经成功禁用了邮件提醒。" #: logdrake:522 #, c-format msgid "Save as.." msgstr "另存为..." #: scannerdrake:51 #, c-format msgid "" "SANE packages need to be installed to use scanners.\n" "\n" "Do you want to install the SANE packages?" msgstr "" "要使用扫描仪, 需要安装 SANE 软件包。\n" "\n" "您想要安装 SANE 软件包吗?" #: scannerdrake:55 #, c-format msgid "Aborting Scannerdrake." msgstr "终止 Drak 扫描仪。" #: scannerdrake:60 #, c-format msgid "" "Could not install the packages needed to set up a scanner with Scannerdrake." msgstr "无法安装用“Drak 扫描仪”设置扫描仪所需的软件包。" #: scannerdrake:61 #, c-format msgid "Scannerdrake will not be started now." msgstr "“Drak 扫描仪”现在不会启动。" #: scannerdrake:67 scannerdrake:506 #, c-format msgid "Searching for configured scanners..." msgstr "正在搜索已配置的扫描仪..." #: scannerdrake:71 scannerdrake:510 #, c-format msgid "Searching for new scanners..." msgstr "正在搜索新的扫描仪..." #: scannerdrake:79 scannerdrake:532 #, c-format msgid "Re-generating list of configured scanners..." msgstr "正在重新生成已配置的扫描仪清单..." #: scannerdrake:101 #, c-format msgid "The %s is not supported by this version of %s." msgstr "%2$s 版本不支持 %1$s。" #: scannerdrake:104 #, c-format msgid "%s found on %s, configure it automatically?" msgstr "发现 %s 连接在 %s 上, 是否自动配置它?" #: scannerdrake:116 #, c-format msgid "%s is not in the scanner database, configure it manually?" msgstr "扫描仪数据库中没有 %s, 要手工配置它吗?" #: scannerdrake:130 #, c-format msgid "Scanner configuration" msgstr "扫描仪配置" #: scannerdrake:131 #, c-format msgid "Select a scanner model (Detected model: %s, Port: %s)" msgstr "选择扫描仪型号(检测到的型号:%s,端口:%s)" #: scannerdrake:133 #, c-format msgid "Select a scanner model (Detected model: %s)" msgstr "选择扫描仪型号(检测到的型号:%s)" #: scannerdrake:134 #, c-format msgid "Select a scanner model (Port: %s)" msgstr "选择扫描仪型号(端口:%s)" #: scannerdrake:136 scannerdrake:139 #, c-format msgid " (UNSUPPORTED)" msgstr " (不支持)" #: scannerdrake:142 #, c-format msgid "The %s is not supported under Linux." msgstr "%s 不支持 Linux。" #: scannerdrake:169 scannerdrake:183 #, c-format msgid "Do not install firmware file" msgstr "不安装固件文件" #: scannerdrake:172 scannerdrake:222 #, c-format msgid "Scanner Firmware" msgstr "扫描仪固件" #: scannerdrake:173 scannerdrake:225 #, c-format msgid "" "It is possible that your %s needs its firmware to be uploaded everytime when " "it is turned on." msgstr "很有可能您的 %s 需要每次它们启动时都上载它们的固件。" #: scannerdrake:174 scannerdrake:226 #, c-format msgid "If this is the case, you can make this be done automatically." msgstr "如果是这样的话, 您可以让它自动完成。" #: scannerdrake:175 scannerdrake:229 #, c-format msgid "" "To do so, you need to supply the firmware file for your scanner so that it " "can be installed." msgstr "要这样做的话, 您需要提供您扫描仪的固件文件, 这样它就可以被安装了。" #: scannerdrake:176 scannerdrake:230 #, c-format msgid "" "You find the file on the CD or floppy coming with the scanner, on the " "manufacturer's home page, or on your Windows partition." msgstr "" "您可能需要在随同扫描仪的 CD 或者软盘、制造商的网站或者您的 Windows 分区中寻找" "它。" #: scannerdrake:178 scannerdrake:237 #, c-format msgid "Install firmware file from" msgstr "固件文件存放在" #: scannerdrake:180 scannerdrake:188 scannerdrake:239 scannerdrake:246 #, c-format msgid "CD-ROM" msgstr "CD-ROM" #: scannerdrake:181 scannerdrake:190 scannerdrake:240 scannerdrake:248 #, c-format msgid "Floppy Disk" msgstr "软盘" #: scannerdrake:182 scannerdrake:192 scannerdrake:241 scannerdrake:250 #, c-format msgid "Other place" msgstr "其它位置" #: scannerdrake:198 #, c-format msgid "Select firmware file" msgstr "选择固件文件" #: scannerdrake:201 scannerdrake:260 #, c-format msgid "The firmware file %s does not exist or is unreadable!" msgstr "固件文件 %s 不存在或无法访问!" #: scannerdrake:224 #, c-format msgid "" "It is possible that your scanners need their firmware to be uploaded " "everytime when they are turned on." msgstr "很有可能您的扫描仪需要每次它们启动时都上载它们的固件。" #: scannerdrake:228 #, c-format msgid "" "To do so, you need to supply the firmware files for your scanners so that it " "can be installed." msgstr "要这样做的话, 您需要提供您扫描仪的固件文件, 这样它就可以被安装了。" #: scannerdrake:231 #, c-format msgid "" "If you have already installed your scanner's firmware you can update the " "firmware here by supplying the new firmware file." msgstr "" "如果您已经安装了您扫描仪的固件, 您也可以通过在这里提供新固件的方式来升级固" "件。" #: scannerdrake:233 #, c-format msgid "Install firmware for the" msgstr "选择要安装固件的扫描仪" #: scannerdrake:256 #, c-format msgid "Select firmware file for the %s" msgstr "选择 %s 的固件文件" #: scannerdrake:274 #, c-format msgid "Could not install the firmware file for the %s!" msgstr "无法安装 %s 的固件文件!" #: scannerdrake:287 #, c-format msgid "The firmware file for your %s was successfully installed." msgstr "您 %s 的固件文件已经成功安装。" #: scannerdrake:297 #, c-format msgid "The %s is unsupported" msgstr "扫描仪 %s 不被支持" #: scannerdrake:302 #, c-format msgid "" "The %s must be configured by printerdrake.\n" "You can launch printerdrake from the %s Control Center in Hardware section." msgstr "" "这个 %s 必须使用“Drak 打印机”来配置。\n" "您可以在“%s 控制中心”的“硬件”部分打开“Drak 打印机”。" #: scannerdrake:320 #, c-format msgid "Setting up kernel modules..." msgstr "正在设置内核模块..." #: scannerdrake:330 scannerdrake:337 scannerdrake:367 #, c-format msgid "Auto-detect available ports" msgstr "自动检测可用的端口" #: scannerdrake:331 scannerdrake:377 #, c-format msgid "Device choice" msgstr "设备选择" #: scannerdrake:332 scannerdrake:378 #, c-format msgid "Please select the device where your %s is attached" msgstr "请选择您的 %s 所连接的设备。" #: scannerdrake:333 #, c-format msgid "(Note: Parallel ports cannot be auto-detected)" msgstr "(注意: 并行端口无法自动检测)" #: scannerdrake:335 scannerdrake:380 #, c-format msgid "choose device" msgstr "选择设备" #: scannerdrake:369 #, c-format msgid "Searching for scanners..." msgstr "正在搜索扫描仪..." #: scannerdrake:405 scannerdrake:412 #, c-format msgid "Attention!" msgstr "小心!" #: scannerdrake:406 #, c-format msgid "" "Your %s cannot be configured fully automatically.\n" "\n" "Manual adjustments are required. Please edit the configuration file /etc/" "sane.d/%s.conf. " msgstr "" "您的 %s 无法全自动进行配置。\n" "\n" "您需要手动调节。请自行编辑配置文件 /etc/sane.d/%s.conf。" #: scannerdrake:407 scannerdrake:416 #, c-format msgid "" "More info in the driver's manual page. Run the command \"man sane-%s\" to " "read it." msgstr "更多信息请参看驱动程序的手册页。运行“man sane-%s”可阅读。" #: scannerdrake:409 scannerdrake:418 #, c-format msgid "" "After that you may scan documents using \"XSane\" or \"Kooka\" from " "Multimedia/Graphics in the applications menu." msgstr "" "此后您就可以从应用程序菜单的“多媒体/图像”中使用“XSane”或“Kooka”来扫描文档了。" #: scannerdrake:413 #, c-format msgid "" "Your %s has been configured, but it is possible that additional manual " "adjustments are needed to get it to work. " msgstr "您的 %s 已经配置好了,但可能需要额外的手动调节才能正常工作。" #: scannerdrake:414 #, c-format msgid "" "If it does not appear in the list of configured scanners in the main window " "of Scannerdrake or if it does not work correctly, " msgstr "" "如果您没有在 ScannerDrake 主窗口的已配置扫描仪列表中找到它,或者无法正常工" "作," #: scannerdrake:415 #, c-format msgid "edit the configuration file /etc/sane.d/%s.conf. " msgstr "请编辑配置文件 /etc/sane.d/%s.conf。" #: scannerdrake:420 #, c-format msgid "Congratulations!" msgstr "恭喜!" #: scannerdrake:421 #, c-format msgid "" "Your %s has been configured.\n" "You may now scan documents using \"XSane\" or \"Kooka\" from Multimedia/" "Graphics in the applications menu." msgstr "" "您的 %s 已经配置好了。\n" "现在您可以从应用程序菜单的“多媒体/图像”中使用“XSane”或“Kooka”来扫描文档。" #: scannerdrake:446 #, c-format msgid "" "The following scanners\n" "\n" "%s\n" "are available on your system.\n" msgstr "" "下列扫描仪\n" "\n" "%s\n" "直接连接在您的系统。\n" #: scannerdrake:447 #, c-format msgid "" "The following scanner\n" "\n" "%s\n" "is available on your system.\n" msgstr "" "下列扫描仪\n" "\n" "%s\n" "直接连接在您的系统。\n" #: scannerdrake:450 scannerdrake:453 #, c-format msgid "There are no scanners found which are available on your system.\n" msgstr "没有发现扫描仪直接连接在您的机器上。\n" #: scannerdrake:461 #, c-format msgid "Scanner Management" msgstr "扫描仪管理" #: scannerdrake:467 #, c-format msgid "Search for new scanners" msgstr "搜索新扫描仪" #: scannerdrake:473 #, c-format msgid "Add a scanner manually" msgstr "手动添加扫描仪" #: scannerdrake:480 #, c-format msgid "Install/Update firmware files" msgstr "安装/更新固件文件" #: scannerdrake:486 #, c-format msgid "Scanner sharing" msgstr "扫描仪共享" #: scannerdrake:545 scannerdrake:710 #, c-format msgid "All remote machines" msgstr "全部远程计算机" #: scannerdrake:557 scannerdrake:860 #, c-format msgid "This machine" msgstr "本机" #: scannerdrake:596 #, c-format msgid "Scanner Sharing" msgstr "扫描仪共享" #: scannerdrake:597 #, c-format msgid "" "Here you can choose whether the scanners connected to this machine should be " "accessible by remote machines and by which remote machines." msgstr "" "您可以在此选择是否将连接到本机的扫描仪共享给远程计算机, 以及共享给哪些计算" "机。" #: scannerdrake:598 #, c-format msgid "" "You can also decide here whether scanners on remote machines should be made " "available on this machine." msgstr "您还可以在此决定是否要将远程的扫描仪自动安装为本机所用。" #: scannerdrake:601 #, c-format msgid "The scanners on this machine are available to other computers" msgstr "此计算机上的扫描仪可共享给计算机" #: scannerdrake:603 #, c-format msgid "Scanner sharing to hosts: " msgstr "在主机上共享扫描仪:" #: scannerdrake:608 scannerdrake:625 #, c-format msgid "No remote machines" msgstr "没有远程计算机" #: scannerdrake:617 #, c-format msgid "Use scanners on remote computers" msgstr "在远程计算机上使用扫描仪" #: scannerdrake:620 #, c-format msgid "Use the scanners on hosts: " msgstr "在下列主机上使用扫描仪:" #: scannerdrake:647 scannerdrake:719 scannerdrake:869 #, c-format msgid "Sharing of local scanners" msgstr "共享本地扫描仪" #: scannerdrake:648 #, c-format msgid "" "These are the machines on which the locally connected scanner(s) should be " "available:" msgstr "下面是本地连接的扫描仪要开放的计算机:" #: scannerdrake:659 scannerdrake:809 #, c-format msgid "Add host" msgstr "添加主机" #: scannerdrake:665 scannerdrake:815 #, c-format msgid "Edit selected host" msgstr "编辑选中的主机" #: scannerdrake:674 scannerdrake:824 #, c-format msgid "Remove selected host" msgstr "删除选中的主机" #: scannerdrake:698 scannerdrake:706 scannerdrake:711 scannerdrake:757 #: scannerdrake:848 scannerdrake:856 scannerdrake:861 scannerdrake:907 #, c-format msgid "Name/IP address of host:" msgstr "主机的名称/IP 地址:" #: scannerdrake:720 scannerdrake:870 #, c-format msgid "Choose the host on which the local scanners should be made available:" msgstr "选择本地扫描仪适用的网络或主机:" #: scannerdrake:731 scannerdrake:881 #, c-format msgid "You must enter a host name or an IP address.\n" msgstr "您必须输入主机名或 IP 地址。\n" #: scannerdrake:742 scannerdrake:892 #, c-format msgid "This host is already in the list, it cannot be added again.\n" msgstr "此主机已经位于列表中, 无法再次添加。\n" #: scannerdrake:797 #, c-format msgid "Usage of remote scanners" msgstr "远程扫描仪使用情况" #: scannerdrake:798 #, c-format msgid "These are the machines from which the scanners should be used:" msgstr "下面是要使用扫描仪的计算机:" #: scannerdrake:955 #, c-format msgid "" "saned needs to be installed to share the local scanner(s).\n" "\n" "Do you want to install the saned package?" msgstr "" "要共享本地打印机, 必须安装 saned。\n" "\n" "您是否想要安装 saned 软件包?" #: scannerdrake:959 scannerdrake:963 #, c-format msgid "Your scanner(s) will not be available on the network." msgstr "您的扫描仪将不会在网络上出现。" #: service_harddrake:131 #, c-format msgid "Some devices in the \"%s\" hardware class were removed:\n" msgstr "删除了一些“%s”类别的设备:\n" #: service_harddrake:132 #, c-format msgid "- %s was removed\n" msgstr "- %s 已删除\n" #: service_harddrake:135 #, c-format msgid "Some devices were added: %s\n" msgstr "添加了一些设备: %s\n" #: service_harddrake:136 #, c-format msgid "- %s was added\n" msgstr "- %s 已添加\n" #: service_harddrake:259 #, c-format msgid "Hardware probing in progress" msgstr "硬件检测进行中" #: service_harddrake_confirm:7 #, c-format msgid "Hardware changes in \"%s\" class (%s seconds to answer)" msgstr "在“%s”类别更改了硬件(还剩 %s 秒回答)" #: service_harddrake_confirm:8 #, c-format msgid "Do you want to run the appropriate config tool?" msgstr "您想要运行相应的配置工具吗?" #~ msgid "Error!" #~ msgstr "错误!" #~ msgid "I can not find needed image file `%s'." #~ msgstr "无法找到映像文件“%s”。" #~ msgid "Auto Install Configurator" #~ msgstr "自动安装配置程序" #~ msgid "" #~ "You are about to configure an Auto Install floppy. This feature is " #~ "somewhat dangerous and must be used circumspectly.\n" #~ "\n" #~ "With that feature, you will be able to replay the installation you've " #~ "performed on this computer, being interactively prompted for some steps, " #~ "in order to change their values.\n" #~ "\n" #~ "For maximum safety, the partitioning and formatting will never be " #~ "performed automatically, whatever you chose during the install of this " #~ "computer.\n" #~ "\n" #~ "Press ok to continue." #~ msgstr "" #~ "现在配置自动安装软盘。该功能有些危险, 请慎重使用。\n" #~ "\n" #~ "使用此功能, 您可以重现该机器的安装, 交互提示某些步骤, 修改数值。\n" #~ "\n" #~ "为安全起见, 分区及格式化不会自动执行。您必须在要安装的机器上选择。\n" #~ "\n" #~ "请点击确定继续。" #~ msgid "replay" #~ msgstr "重放" #~ msgid "manual" #~ msgstr "手动" #~ msgid "Automatic Steps Configuration" #~ msgstr "自动步骤配置" #~ msgid "" #~ "Please choose for each step whether it will replay like your install, or " #~ "it will be manual" #~ msgstr "请指定安装的每一步骤, 是要按照本次安装重放, 还是手工完成" #~ msgid "Insert a blank floppy in drive %s" #~ msgstr "请在驱动器 %s 中插入一张空白软盘" #~ msgid "Creating auto install floppy" #~ msgstr "创建自动安装软盘" #~ msgid "Insert another blank floppy in drive %s (for drivers disk)" #~ msgstr "请在驱动器 %s 中插入一张空白软盘(驱动程序盘)" #~ msgid "Creating auto install floppy (drivers disk)" #~ msgstr "创建自动安装软盘(驱动程序盘)" #~ msgid "" #~ "\n" #~ "Welcome.\n" #~ "\n" #~ "The parameters of the auto-install are available in the sections on the " #~ "left" #~ msgstr "" #~ "\n" #~ "欢迎。\n" #~ "\n" #~ "左边列出了自动安装可用的选项" #~ msgid "" #~ "The floppy has been successfully generated.\n" #~ "You may now replay your installation." #~ msgstr "" #~ "您的软盘已经成功生成。\n" #~ "您可以用它重现这次安装。" #~ msgid "Auto Install" #~ msgstr "自动安装" #~ msgid "Add an item" #~ msgstr "添加项目" #~ msgid "Remove the last item" #~ msgstr "删除最后一项" #~ msgid "HardDrake" #~ msgstr "Drak 硬件管理" #~ msgid "Menudrake" #~ msgstr "Drak 菜单编辑" #~ msgid "Msec" #~ msgstr "Msec" #~ msgid "Urpmi" #~ msgstr "Urpmi" #~ msgid "Userdrake" #~ msgstr "Drak 用户管理" pt">); } return if eval { Done($in, $all_hds) }; if (my $err = $@) { $in->ask_warn(N("Error"), formatError($err)); } goto &main; } ################################################################################ # general actions ################################################################################ sub general_possible_actions { my ($_in, $_all_hds) = @_; N_("Undo"), ($::expert ? N_("Toggle to normal mode") : N_("Toggle to expert mode")); } sub Undo { my ($_in, $all_hds) = @_; fsedit::undo($all_hds); } sub Wizard { $::o->{wizard} = 1; goto &Done; } sub Done { my ($in, $all_hds) = @_; eval { raid::verify($all_hds->{raids}) }; if (my $err = $@) { $::expert or die; $in->ask_okcancel('', [ formatError($err), N("Continue anyway?") ]) or return; } foreach (@{$all_hds->{hds}}) { if (!write_partitions($in, $_, 'skip_check_rebootNeeded')) { return if !$::isStandalone; $in->ask_yesorno(N("Quit without saving"), N("Quit without writing the partition table?"), 1) or return; } } if (!$::isInstall) { my $new = fs::fstab_to_string($all_hds); if ($new ne $all_hds->{current_fstab} && $in->ask_yesorno('', N("Do you want to save /etc/fstab modifications"), 1)) { $all_hds->{current_fstab} = $new; fs::write_fstab($all_hds); } if (any { $_->{rebootNeeded} } @{$all_hds->{hds}}) { $in->ask_warn('', N("You need to reboot for the partition table modifications to take place")); tell_wm_and_reboot(); } } 1; } ################################################################################ # per-hd actions ################################################################################ sub hd_possible_actions { my ($_in, $hd, $_all_hds) = @_; ( if_(!$hd->{readonly} || $hd->{getting_rid_of_readonly_allowed}, N_("Clear all")), if_(!$hd->{readonly} && $::isInstall, N_("Auto allocate")), N_("More"), ); } sub hd_possible_actions_interactive { my ($_in, $_hd, $_all_hds) = @_; &hd_possible_actions, N_("Hard drive information"); } sub Clear_all { my ($in, $hd, $all_hds) = @_; my @parts = partition_table::get_normal_parts($hd); foreach (@parts) { RemoveFromLVM($in, $hd, $_, $all_hds) if isPartOfLVM($_); RemoveFromRAID($in, $hd, $_, $all_hds) if isPartOfRAID($_); } if (isLVM($hd)) { lvm::lv_delete($hd, $_) foreach @parts } else { $hd->{readonly} = 0; #- give a way out of readonly-ness. only allowed when getting_rid_of_readonly_allowed $hd->{getting_rid_of_readonly_allowed} = 0; partition_table::raw::zero_MBR_and_dirty($hd); } } sub Auto_allocate { my ($in, $hd, $all_hds) = @_; my $suggestions = partitions_suggestions($in) or return; my %all_hds_ = %$all_hds; $all_hds_{hds} = [ sort { $a == $hd ? -1 : 1 } @{$all_hds->{hds}} ]; eval { fsedit::auto_allocate(\%all_hds_, $suggestions) }; if ($@) { $@ =~ /partition table already full/ or die; $in->ask_warn("", [ N("All primary partitions are used"), N("I can't add any more partition"), N("To have more partitions, please delete one to be able to create an extended partition"), ]); } } sub More { my ($in, $hd) = @_; my $r; $in->ask_from('', '', [ { val => N("Save partition table"), clicked_may_quit => sub { SaveInFile($in, $hd); 1 } }, { val => N("Restore partition table"), clicked_may_quit => sub { ReadFromFile($in, $hd); 1 } }, { val => N("Rescue partition table"), clicked_may_quit => sub { Rescuept($in, $hd); 1 } }, if_($::isInstall, { val => N("Reload partition table"), clicked_may_quit => sub { $r = 'force_reload'; 1 } }), if_($::isInstall, { text => N("Removable media automounting"), val => \$::o->{useSupermount}, type => 'bool' }, ), ], ) && $r; } sub ReadFromFile { my ($in, $hd) = @_; my $file = $::isStandalone ? $in->ask_file(N("Select file")) : devices::make("fd0") or return; eval { catch_cdie { partition_table::load($hd, $file) } sub { $@ =~ /bad totalsectors/ or return; $in->ask_yesorno('', N("The backup partition table has not the same size Still continue?"), 0); }; }; if (my $err = $@) { $in->ask_warn(N("Error"), formatError($err)); } } sub SaveInFile { my ($in, $hd) = @_; my $file = $::isStandalone ? $in->ask_file(N("Select file")) : $in->ask_okcancel(N("Warning"), N("Insert a floppy in drive All data on this floppy will be lost"), 1) && devices::make(detect_devices::floppy()) or return; eval { partition_table::save($hd, $file) }; if (my $err = $@) { $in->ask_warn(N("Error"), formatError($err)); } } sub Rescuept { my ($in, $hd) = @_; my $_w = $in->wait_message('', N("Trying to rescue partition table")); fsedit::rescuept($hd); } sub Hd_info { my ($in, $hd) = @_; $in->ask_warn('', [ N("Detailed information"), format_hd_info($hd) ]); } ################################################################################ # per-part actions ################################################################################ sub part_possible_actions { my ($_in, $hd, $part, $_all_hds) = @_; $part or return; my %actions = my @l = ( N_("Mount point") => '($part->{real_mntpoint} && common::usingRamdisk()) || (!isBusy && !isSwap && !isNonMountable)', N_("Type") => '!isBusy && $::expert && (!readonly || ($part->{type} & 0xff) == 0x83)', N_("Options") => '$::expert', N_("Resize") => '!isBusy && !readonly && !isSpecial || isLVM($hd) && isMounted && isThisFs("xfs", $part)', N_("Move") => '!isBusy && !readonly && !isSpecial && $::expert && 0', # disable for the moment N_("Format") => '!isBusy && !readonly && ($::expert || $::isStandalone)', N_("Mount") => '!isBusy && (hasMntpoint || isSwap) && maybeFormatted && ($::expert || $::isStandalone)', N_("Add to RAID") => '!isBusy && isRawRAID && (!isSpecial || isRAID)', N_("Add to LVM") => '!isBusy && isRawLVM', N_("Unmount") => '!$part->{real_mntpoint} && isMounted', N_("Delete") => '!isBusy && !readonly', N_("Remove from RAID") => 'isPartOfRAID', N_("Remove from LVM") => 'isPartOfLVM', N_("Modify RAID") => 'isPartOfRAID && !isMounted($all_hds->{raids}[$part->{raid}])', N_("Use for loopback") => '!$part->{real_mntpoint} && isMountableRW && !isSpecial && hasMntpoint && $::expert', ); my ($actions_names) = list2kv(@l); my %macros = ( readonly => '$hd->{readonly}', hasMntpoint => '$part->{mntpoint}', isPrimary => 'isPrimary($part, $hd)', ); if ($part->{type} == 0) { if_(!$hd->{readonly}, N_("Create")); } else { grep { my $cond = $actions{$_}; while (my ($k, $v) = each %macros) { $cond =~ s/$k/qq(($v))/e; } $cond =~ s/(^|[^:\$]) \b ([a-z]\w{3,}) \b ($|[\s&\)])/$1 . $2 . '($part)' . $3/exg; eval $cond; } @$actions_names; } } sub Create { my ($in, $hd, $part, $all_hds) = @_; my ($def_start, $def_size, $max) = ($part->{start}, $part->{size}, $part->{start} + $part->{size}); $part->{maxsize} = $part->{size}; $part->{size} = 0; if (!fsedit::suggest_part($part, $all_hds)) { $part->{size} = $part->{maxsize}; $part->{type} ||= 0x483; } #- update adjustment for start and size, take into account the minimum partition size #- including one less sector for start due to a capacity to increase the adjustement by #- one. my ($primaryOrExtended, $migrate_files); my $type = type2name($part->{type}); my $mb_size = $part->{size} >> 11; my $has_startsector = ($::expert || arch() !~ /i.86/) && !isLVM($hd); $in->ask_from(N("Create a new partition"), '', [ if_($has_startsector, { label => N("Start sector: "), val => \$part->{start}, min => $def_start, max => ($max - min_partition_size($hd)), type => 'range' }, ), { label => N("Size in MB: "), val => \$mb_size, min => min_partition_size($hd) >> 11, max => $def_size >> 11, type => 'range' }, { label => N("Filesystem type: "), val => \$type, list => [ partition_table::important_types() ], sort => 0 }, { label => N("Mount point: "), val => \$part->{mntpoint}, list => [ fsedit::suggestions_mntpoint($all_hds), '' ], disabled => sub { my $p = { type => name2type($type) }; isSwap($p) || isNonMountable($p) }, type => 'combo', not_edit => 0, }, if_($::expert && $hd->hasExtended, { label => N("Preference: "), val => \$primaryOrExtended, list => [ '', "Extended", "Primary", if_($::expert, "Extended_0x85") ] }, ), if_($::expert && isLVM($hd), { label => N("Logical volume name "), val => \$part->{lv_name}, list => [ qw(root swap usr home var), '' ], sort => 0, not_edit => 0 }, ), ], changed => sub { if ($part->{start} + ($mb_size << 11) > $max) { if ($_[0] == 0) { # Start sector changed => restricting Size $mb_size = ($max - $part->{start}) >> 11; } else { # Size changed => restricting Start sector $part->{start} = $max - ($mb_size << 11); } } }, complete => sub { $part->{size} = from_Mb($mb_size, min_partition_size($hd), $max - $part->{start}); #- need this to be able to get back the approximation of using MB $part->{type} = name2type($type); $part->{mntpoint} = '' if isNonMountable($part); $part->{mntpoint} = 'swap' if isSwap($part); fs::set_default_options($part); check($in, $hd, $part, $all_hds) or return 1; $migrate_files = need_migration($in, $part->{mntpoint}) or return 1; my $seen; eval { catch_cdie { fsedit::add($hd, $part, $all_hds, { force => 1, primaryOrExtended => $primaryOrExtended }) } sub { $seen = 1; $in->ask_okcancel('', formatError($@)) }; }; if (my $err = $@) { if ($err =~ /raw_add/ && $hd->hasExtended && !$hd->{primary}{extended}) { $in->ask_warn(N("Error"), N("You can't create a new partition (since you reached the maximal number of primary partitions). First remove a primary partition and create an extended partition.")); return 0; } else { $in->ask_warn(N("Error"), formatError($err)) if !$seen; return 1; } } 0; }, ) or return; warn_if_renumbered($in, $hd); if ($migrate_files eq 'migrate') { format_($in, $hd, $part, $all_hds) or return; migrate_files($in, $hd, $part); fs::mount_part($part); } } sub Delete { my ($in, $hd, $part, $all_hds) = @_; if (isRAID($part)) { raid::delete($all_hds->{raids}, $part); } elsif (isLVM($hd)) { lvm::lv_delete($hd, $part); } elsif (isLoopback($part)) { my $f = "$part->{loopback_device}{mntpoint}$part->{loopback_file}"; if (-e $f && $in->ask_yesorno('', N("Remove the loopback file?"))) { unlink $f; } my $l = $part->{loopback_device}{loopback}; @$l = grep { $_ != $part } @$l; delete $part->{loopback_device}{loopback} if @$l == 0; fsedit::recompute_loopbacks($all_hds); } else { if (arch() =~ /ppc/) { undef $partition_table::mac::bootstrap_part if isAppleBootstrap($part) && ($part->{device} = $partition_table::mac::bootstrap_part); } partition_table::remove($hd, $part); warn_if_renumbered($in, $hd); } } sub Type { my ($in, $hd, $part) = @_; my $warn = sub { ask_alldatawillbelost($in, $part, N_("After changing type of partition %s, all data on this partition will be lost")) }; #- for ext2, warn after choosing as ext2->ext3 can be achieved without loosing any data :) isExt2($part) or $warn->() or return; my @types = partition_table::important_types(); #- when readonly, Type() is allowed only when changing between various { 0x83, 0x183, ... } @types = grep { (name2type($_) & 0xff) == 0x83 } @types if $hd->{readonly}; my $type_name = type2name($part->{type}); $in->ask_from_({ title => N("Change partition type"), messages => N("Which filesystem do you want?"), focus_first => 1, }, [ { label => N("Type"), val => \$type_name, list => \@types, sort => 0, not_edit => !$::expert } ]) or return; my $type = $type_name && name2type($type_name); if (isExt2($part) && isThisFs('ext3', { type => $type })) { my $_w = $in->wait_message('', N("Switching from ext2 to ext3")); if (run_program::run("tune2fs", "-j", devices::make($part->{device}))) { $part->{type} = $type; $part->{isFormatted} = 1; #- assume that if tune2fs works, partition is formatted #- disable the fsck (don't do it together with -j in case -j fails?) fs::disable_forced_fsck($part->{device}); return; } } #- either we switch to non-ext3 or switching losslessly to ext3 failed !isExt2($part) or $warn->() or return; if (defined $type) { check_type($in, $type, $hd, $part) and fsedit::change_type($type, $hd, $part); } } sub Mount_point { my ($in, $hd, $part, $all_hds) = @_; my $migrate_files; my $mntpoint = $part->{mntpoint} || do { my $part_ = { %$part }; if (fsedit::suggest_part($part_, $all_hds)) { fsedit::has_mntpoint('/', $all_hds) || $part_->{mntpoint} eq '/boot' ? $part_->{mntpoint} : '/'; } else { '' } }; $in->ask_from_({ messages => isLoopback($part) ? N("Where do you want to mount the loopback file %s?", $part->{loopback_file}) : N("Where do you want to mount device %s?", $part->{device}), focus_first => 1, callbacks => { complete => sub { !isPartOfLoopback($part) || $mntpoint or $in->ask_warn('', N("Can't unset mount point as this partition is used for loop back. Remove the loopback first")), return 1; $part->{mntpoint} eq $mntpoint || check_mntpoint($in, $mntpoint, $hd, $part, $all_hds) or return 1; $migrate_files = need_migration($in, $mntpoint) or return 1; 0; } }, }, [ { label => N("Mount point"), val => \$mntpoint, list => [ uniq(if_($mntpoint, $mntpoint), fsedit::suggestions_mntpoint($all_hds), '') ], not_edit => 0 } ], ) or return; $part->{mntpoint} = $mntpoint; if ($migrate_files eq 'migrate') { format_($in, $hd, $part, $all_hds) or return; migrate_files($in, $hd, $part); fs::mount_part($part); } } sub Mount_point_raw_hd { my ($in, $part, $all_hds, @propositions) = @_; my $mntpoint = $part->{mntpoint} || shift @propositions; $in->ask_from( '', N("Where do you want to mount %s?", $part->{device}), [ { label => N("Mount point"), val => \$mntpoint, list => [ if_($mntpoint, $mntpoint), '', @propositions ], not_edit => 0 } ], complete => sub { $part->{mntpoint} eq $mntpoint || check_mntpoint($in, $mntpoint, {}, $part, $all_hds) or return 1; 0; } ) or return; $part->{mntpoint} = $mntpoint; } sub Resize { my ($in, $hd, $part) = @_; my (%nice_resize, $block_count, $free_block, $block_size); my ($min, $max) = (min_partition_size($hd), partition_table::next_start($hd, $part) - $part->{start}); if (maybeFormatted($part)) { # here we may have a non-formatted or a formatted partition # -> doing as if it was formatted if (isFat($part)) { write_partitions($in, $hd) or return; #- try to resize without losing data my $_w = $in->wait_message(N("Resizing"), N("Computing FAT filesystem bounds")); require resize_fat::main; $nice_resize{fat} = resize_fat::main->new($part->{device}, devices::make($part->{device})); $min = max($min, $nice_resize{fat}->min_size); $max = min($max, $nice_resize{fat}->max_size); } elsif (isExt2($part) || isThisFs('ext3', $part)) { write_partitions($in, $hd) or return; my $dev = devices::make($part->{device}); my $r = run_program::get_stdout('dumpe2fs', $dev); $r =~ /Block count:\s*(\d+)/ and $block_count = $1; $r =~ /Free blocks:\s*(\d+)/ and $free_block = $1; $r =~ /Block size:\s*(\d+)/ and $block_size = $1; log::l("dumpe2fs $nice_resize{ext2} gives: Block_count=$block_count, Free_blocks=$free_block, Block_size=$block_size"); if ($block_count && $free_block && $block_size) { $min = max($min, ($block_count - $free_block) * ($block_size / 512)); $nice_resize{ext2} = $dev; } } elsif (isThisFs('ntfs', $part)) { write_partitions($in, $hd) or return; require diskdrake::resize_ntfs; $nice_resize{ntfs} = diskdrake::resize_ntfs->new($part->{device}, devices::make($part->{device})); $min = $nice_resize{ntfs}->min_size or delete $nice_resize{ntfs}; } elsif (isThisFs("reiserfs", $part)) { write_partitions($in, $hd) or return; if (defined(my $free = fs::df($part))) { $nice_resize{reiserfs} = 1; $min = max($min, $part->{size} - $free); } } elsif (isThisFs('xfs', $part) && isLVM($hd) && $::isStandalone && isMounted($part)) { $min = $part->{size}; #- ensure the user can only increase $nice_resize{xfs} = 1; } #- make sure that even after normalizing the size to cylinder boundaries, the minimun will be saved, #- this save at least a cylinder (less than 8Mb). $min += partition_table::raw::cylinder_size($hd); $min >= $max and return $in->ask_warn('', N("This partition is not resizeable")); #- for these, we have tools to resize partition table #- without losing data (or at least we hope so :-) if (%nice_resize) { ask_alldatamaybelost($in, $part, N_("All data on this partition should be backed-up")) or return; } else { ask_alldatawillbelost($in, $part, N_("After resizing partition %s, all data on this partition will be lost")) or return; } } my $mb_size = $part->{size} >> 11; $in->ask_from(N("Resize"), N("Choose the new size"), [ { label => N("New size in MB: "), val => \$mb_size, min => $min >> 11, max => $max >> 11, type => 'range' }, ]) or return; my $size = from_Mb($mb_size, $min, $max); $part->{size} == $size and return; my $oldsize = $part->{size}; $part->{size} = $size; $hd->adjustEnd($part); undef $@; my $_b = before_leaving { $@ and $part->{size} = $oldsize }; my $adjust = sub { my ($write_partitions) = @_; partition_table::will_tell_kernel($hd, resize => $part); if (isLVM($hd)) { lvm::lv_resize($part, $oldsize); } else { partition_table::adjust_local_extended($hd, $part); partition_table::adjust_main_extended($hd); write_partitions($in, $hd) or return if $write_partitions && %nice_resize; } 1; }; $adjust->(1) or return if $size > $oldsize; my $wait = $in->wait_message(N("Resizing"), ''); if ($nice_resize{fat}) { local *log::l = sub { $wait->set(join(' ', @_)) }; $nice_resize{fat}->resize($part->{size}); } elsif ($nice_resize{ext2}) { my $s = int($part->{size} / ($block_size / 512)); log::l("resize2fs $nice_resize{ext2} to size $s in block of $block_size bytes"); run_program::run("resize2fs", "-pf", $nice_resize{ext2}, $s); } elsif ($nice_resize{ntfs}) { log::l("ntfs resize to $part->{size} sectors"); $nice_resize{ntfs}->resize($part->{size}); $wait = undef; $in->ask_warn('', N("To ensure data integrity after resizing the partition(s), filesystem checks will be run on your next boot into Windows(TM)")); } elsif ($nice_resize{reiserfs}) { log::l("reiser resize to $part->{size} sectors"); run_program::run('resize_reiserfs', '-f', '-q', '-s' . int($part->{size}/2) . 'K', devices::make($part->{device})); } elsif ($nice_resize{xfs}) { #- happens only with mounted LVM, see above run_program::run("xfs_growfs", $part->{mntpoint}); } if (%nice_resize) { $part->{isFormatted} = 1; } else { $part->{notFormatted} = 1; $part->{isFormatted} = 0; partition_table::verifyParts($hd); $part->{mntpoint} = '' if isNonMountable($part); #- mainly for ntfs, which we can't format } $adjust->(0) if $size < $oldsize; } sub Move { my ($in, $hd, $part, $all_hds) = @_; my $hd2 = $in->ask_from_listf(N("Move"), N("Which disk do you want to move it to?"), \&partition_table::description, @{$all_hds->{hds}}) or return; my $start2 = $in->ask_from_entry(N("Sector"), N("Which sector do you want to move it to?")); defined $start2 or return; my $_w = $in->wait_message(N("Moving"), N("Moving partition...")); fsedit::move($hd, $part, $hd2, $start2); } sub Format { my ($in, $hd, $part, $all_hds) = @_; format_($in, $hd, $part, $all_hds); } sub Mount { my ($in, $hd, $part) = @_; write_partitions($in, $hd) or return; my $w; fs::mount_part($part, $::prefix, 0, sub { my ($msg) = @_; $w ||= $in->wait_message('', $msg); $w->set($msg); }); } sub Add2RAID { my ($in, $_hd, $part, $all_hds) = @_; my $raids = $all_hds->{raids}; local $_ = @$raids == () ? "new" : $in->ask_from_list_('', N("Choose an existing RAID to add to"), [ (grep { $_ } map_index { $_ && "md$::i" } @$raids), N_("new") ]) or return; if (/new/) { my $nb1 = raid::new($raids, $part); defined modifyRAID($in, $raids, $nb1) or return raid::delete($raids, $nb1); } else { raid::add($raids, $part, $_); } raid::update(@$raids); } sub Add2LVM { my ($in, $hd, $part, $all_hds) = @_; my $lvms = $all_hds->{lvms}; write_partitions($in, $_) or return foreach isRAID($part) ? @{$all_hds->{hds}} : $hd; my $lvm = $in->ask_from_listf_('', N("Choose an existing LVM to add to"), sub { ref($_[0]) ? $_[0]{VG_name} : $_[0] }, [ @$lvms, N_("new") ]) or return; require lvm; if (!ref $lvm) { # create new lvm my $name = $in->ask_from_entry('', N("LVM name?")) or return; $lvm = new lvm($name); push @$lvms, $lvm; } raid::make($all_hds->{raids}, $part) if isRAID($part); $part->{lvm} = $lvm->{VG_name}; push @{$lvm->{disks}}, $part; delete $part->{mntpoint}; lvm::check($in) if $::isStandalone; lvm::vg_add($part); lvm::update_size($lvm); } sub Unmount { my ($_in, $_hd, $part) = @_; fs::umount_part($part); } sub RemoveFromRAID { my ($_in, $_hd, $part, $all_hds) = @_; raid::removeDisk($all_hds->{raids}, $part); } sub RemoveFromLVM { my ($_in, $_hd, $part, $all_hds) = @_; my $lvms = $all_hds->{lvms}; isPartOfLVM($part) or die; (my $lvm, $lvms) = partition { $_->{VG_name} eq $part->{lvm} } @$lvms; lvm::vg_destroy($lvm->[0]); } sub ModifyRAID { my ($in, $_hd, $part, $all_hds) = @_; modifyRAID($in, $all_hds->{raids}, $part->{raid}); } sub Loopback { my ($in, $hd, $real_part, $all_hds) = @_; write_partitions($in, $hd) or return; my $handle = any::inspect($real_part) or $in->ask_warn('', N("This partition can't be used for loopback")), return; my ($min, $max) = (1, loopback::getFree($handle->{dir}, $real_part)); $max = min($max, 1 << (31 - 9)) if isFat($real_part); #- FAT doesn't handle file size bigger than 2GB my $part = { maxsize => $max, size => 0, loopback_device => $real_part, notFormatted => 1 }; if (!fsedit::suggest_part($part, $all_hds)) { $part->{size} = $part->{maxsize}; $part->{type} ||= 0x483; } delete $part->{mntpoint}; # we don't want the suggested mntpoint my $type = type2name($part->{type}); my $mb_size = $part->{size} >> 11; $in->ask_from(N("Loopback"), '', [ { label => N("Loopback file name: "), val => \$part->{loopback_file} }, { label => N("Size in MB: "), val => \$mb_size, min => $min >> 11, max => $max >> 11, type => 'range' }, { label => N("Filesystem type: "), val => \$type, list => [ partition_table::important_types() ], not_edit => !$::expert, sort => 0 }, ], complete => sub { $part->{loopback_file} or $in->ask_warn('', N("Give a file name")), return 1, 0; $part->{loopback_file} =~ s|^([^/])|/$1|; if (my $size = loopback::verifFile($handle->{dir}, $part->{loopback_file}, $real_part)) { $size == -1 and $in->ask_warn('', N("File is already used by another loopback, choose another one")), return 1, 0; $in->ask_yesorno('', N("File already exists. Use it?")) or return 1, 0; delete $part->{notFormatted}; $part->{size} = divide($size, 512); } else { $part->{size} = from_Mb($mb_size, $min, $max); } 0; }) or return; $part->{type} = name2type($type); push @{$real_part->{loopback}}, $part; fsedit::recompute_loopbacks($all_hds); } sub Options { my ($in, $hd, $part, $all_hds) = @_; my @simple_options = qw(user noauto supermount username= password=); my (undef, $user_implies) = fs::mount_options(); my ($options, $unknown) = fs::mount_options_unpack($part); my %help = fs::mount_options_help(); my $prev_user = $options->{user}; $in->ask_from(N("Mount options"), '', [ (map { { label => $_, text => scalar warp_text(formatAlaTeX($help{$_})), val => \$options->{$_}, hidden => scalar(/password/), advanced => !$part->{rootDevice} && !member($_, @simple_options), if_(!/=$/, type => 'bool'), } } keys %$options), { label => N("Various"), val => \$unknown, advanced => 1 }, ], changed => sub { if ($prev_user != $options->{user}) { $prev_user = $options->{user}; $options->{$_} = $options->{user} foreach @$user_implies; } if ($options->{encrypted}) { # modify $part->{options} for the check local $part->{options}; fs::mount_options_pack($part, $options, $unknown); if (!check($in, $hd, $part, $all_hds)) { $options->{encrypted} = 0; } elsif (!$part->{encrypt_key} && !isSwap($part)) { if (my $encrypt_key = choose_encrypt_key($in)) { $options->{'encryption='} = 'AES128'; $part->{encrypt_key} = $encrypt_key; } else { $options->{encrypted} = 0; } } } else { delete $options->{'encryption='}; delete $part->{encrypt_key}; } }, ) or return; fs::mount_options_pack($part, $options, $unknown); 1; } { no strict; *{'Toggle to normal mode'} = sub() { $::expert = 0 }; *{'Toggle to expert mode'} = sub() { $::expert = 1 }; *{'Clear all'} = \&Clear_all; *{'Auto allocate'} = \&Auto_allocate; *{'Mount point'} = \&Mount_point; *{'Modify RAID'} = \&ModifyRAID; *{'Add to RAID'} = \&Add2RAID; *{'Remove from RAID'} = \&RemoveFromRAID; *{'Add to LVM'} = \&Add2LVM; *{'Remove from LVM'} = \&RemoveFromLVM; *{'Use for loopback'} = \&Loopback; *{'Hard drive information'} = \&Hd_info; } ################################################################################ # helpers ################################################################################ sub is_part_existing { my ($part, $all_hds) = @_; $part && any { fsedit::is_same_part($part, $_) } fsedit::get_all_fstab_and_holes($all_hds); } sub modifyRAID { my ($in, $raids, $nb) = @_; my $md = "md$nb"; $in->ask_from('', '', [ { label => N("device"), val => \$md, list => [ map { "md$_" } grep { $nb == $_ || !$raids->[$_] } 0..8 ] }, { label => N("level"), val => \$raids->[$nb]{level}, list => [ qw(0 1 4 5 linear) ] }, { label => N("chunk size"), val => \$raids->[$nb]{'chunk-size'} }, ], ) or return; raid::updateSize($raids->[$nb]); # changing the raid level changes the size available raid::changeNb($raids, $nb, first($md =~ /(\d+)/)); } sub ask_alldatamaybelost { my ($in, $part, $msg) = @_; maybeFormatted($part) or return 1; #- here we may have a non-formatted or a formatted partition #- -> doing as if it was formatted $in->ask_okcancel(N("Read carefully!"), [ N("Be careful: this operation is dangerous."), sprintf(translate($msg), $part->{device}) ], 1); } sub ask_alldatawillbelost { my ($in, $part, $msg) = @_; maybeFormatted($part) or return 1; #- here we may have a non-formatted or a formatted partition #- -> doing as if it was formatted $in->ask_okcancel(N("Read carefully!"), sprintf(translate($msg), $part->{device}), 1); } sub partitions_suggestions { my ($in) = @_; my $t = $::expert ? $in->ask_from_list_('', N("What type of partitioning?"), [ keys %fsedit::suggestions ]) : 'simple'; $fsedit::suggestions{$t}; } sub check_type { my ($in, $type, $hd, $part) = @_; eval { fsedit::check_type($type, $hd, $part) }; if (my $err = $@) { $in->ask_warn('', formatError($err)); return; } if ($::isStandalone) { if (my $pkg = fsedit::package_needed_for_partition_type({ type => $type })) { my $fs = type2fs({ type => $type }); if (!-x "/sbin/mkfs.$fs") { $in->ask_yesorno('', N("The package %s is needed. Install it?", $pkg), 1) or return; $in->do_pkgs->install($pkg); } -x "/sbin/mkfs.$fs" or $in->ask_warn('', "Mandatory package $pkg is missing"), return; } } 1; } sub check_mntpoint { my ($in, $mntpoint, $hd, $part, $all_hds) = @_; my $seen; eval { catch_cdie { fsedit::check_mntpoint($mntpoint, $hd, $part, $all_hds) } sub { $seen = 1; $in->ask_okcancel('', formatError($@)) }; }; if (my $err = $@) { $in->ask_warn('', formatError($err)) if !$seen; return; } 1; } sub check { my ($in, $hd, $part, $all_hds) = @_; check_type($in, $part->{type}, $hd, $part) && check_mntpoint($in, $part->{mntpoint}, $hd, $part, $all_hds); } sub check_rebootNeeded { my ($_in, $hd) = @_; $hd->{rebootNeeded} and die \N("You'll need to reboot before the modification can take place"); } sub write_partitions { my ($in, $hd, $b_skip_check_rebootNeeded) = @_; check_rebootNeeded($in, $hd) if !$b_skip_check_rebootNeeded; $hd->{isDirty} or return 1; isLVM($hd) and return 1; $in->ask_okcancel(N("Read carefully!"), N("Partition table of drive %s is going to be written to disk!", $hd->{device}), 1) or return; partition_table::write($hd) if !$::testing; check_rebootNeeded($in, $hd) if !$b_skip_check_rebootNeeded; 1; } sub unmount { my ($_hd, $part) = @_; fs::umount_part($part); } sub format_ { my ($in, $hd, $part, $all_hds) = @_; write_partitions($in, $_) or return foreach isRAID($part) ? @{$all_hds->{hds}} : $hd; ask_alldatawillbelost($in, $part, N_("After formatting partition %s, all data on this partition will be lost")) or return; $part->{isFormatted} = 0; #- force format; my $w; fs::format_part($all_hds->{raids}, $part, $::prefix, sub { my ($msg) = @_; $w ||= $in->wait_message('', $msg); $w->set($msg); }); 1; } sub need_migration { my ($in, $mntpoint) = @_; my @l = grep { $_ ne "lost+found" } all($mntpoint);