@@ -1,29 +1,14 @@ | |||
PROGRAM=tasksel | |||
DOMAIN=debian-tasks | |||
TASKDESC=$(DOMAIN).desc | |||
TASKDIR=/usr/share/tasksel | |||
DESCDIR=tasks | |||
DESCPO=$(DESCDIR)/po | |||
CC=gcc | |||
CFLAGS=-g -Wall #-Os | |||
DEBUG=1 | |||
ifeq (0,$(DEBUG)) | |||
DEFS=-DUTF8 -DVERSION=\"$(VERSION)\" -DPACKAGE=\"$(PROGRAM)\" -DLOCALEDIR=\"/usr/share/locale\" \ | |||
-DTASKDIR=\"$(TASKDIR)\" | |||
else | |||
DEFS=-DUTF8 -DVERSION=\"$(VERSION)\" -DPACKAGE=\"$(PROGRAM)\" -DLOCALEDIR=\"/usr/share/locale\" \ | |||
-DTASKDIR=\".\" -DDEBUG | |||
endif | |||
VERSION=$(shell expr "`dpkg-parsechangelog 2>/dev/null |grep Version:`" : '.*Version: \(.*\)' | cut -d - -f 1) | |||
LIBS=-lslang -ltextwrap #-lccmalloc -ldl | |||
OBJS=tasksel.o slangui.o data.o util.o strutl.o | |||
LANGS=bg bs ca cs cy da de el es fi fr gl hu id it ja ko lt nb nl nn pl pt pt_BR ru sk sl sq sv tr uk zh_CN zh_TW | |||
LANGS_DESC=bg bs ca cs cy da de el es fi fr hu id it ja ko lt nb nl nn pl pt pt_BR ru sk sl sq sv tr uk zh_CN zh_TW | |||
LOCALEDIR=$(DESTDIR)/usr/share/locale | |||
COMPILE = $(CC) $(CFLAGS) $(DEFS) -c | |||
LINK = $(CC) $(CFLAGS) $(DEFS) -o | |||
all: $(PROGRAM) $(TASKDESC) $(DESCPO)/build_stamp | |||
all: $(TASKDESC) $(DESCPO)/build_stamp po/build_stamp | |||
$(TASKDESC): makedesc.pl $(DESCDIR)/[a-z]??* | |||
./doincludes.pl $(DESCDIR) | |||
@@ -44,27 +29,28 @@ $(DESCPO)/build_stamp: | |||
updatetaskspo: | |||
$(MAKE) -C $(DESCPO) update LANGS="$(LANGS_DESC)" | |||
$(PROGRAM): $(OBJS) po/build_stamp | |||
$(LINK) $(PROGRAM) $(OBJS) $(LIBS) | |||
install: | |||
install -m 755 tasksel $(DESTDIR)/usr/bin | |||
install -d $(DESTDIR)/usr/bin $(DESTDIR)$(TASKDIR) \ | |||
$(DESTDIR)/usr/lib/tasksel/tests \ | |||
$(DESTDIR)/usr/share/man/man8 | |||
install -m 755 tasksel.pl $(DESTDIR)/usr/bin/tasksel | |||
install -m 755 tasksel-debconf $(DESTDIR)/usr/lib/tasksel/ | |||
install -m 0644 $(TASKDESC) $(DESTDIR)$(TASKDIR) | |||
pod2man --center "Debian specific manpage" --release $(VERSION) tasksel.pod | gzip -9c > $(DESTDIR)/usr/share/man/man8/tasksel.8.gz | |||
pod2man --section=8 --center "Debian specific manpage" --release $(VERSION) tasksel.pod | gzip -9c > $(DESTDIR)/usr/share/man/man8/tasksel.8.gz | |||
for lang in $(LANGS); do \ | |||
[ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \ | |||
install -m 644 po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/$(PROGRAM).mo; \ | |||
[ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \ | |||
install -m 644 po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/tasksel.mo; \ | |||
done | |||
for lang in $(LANGS_DESC); do \ | |||
[ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \ | |||
install -m 644 tasks/po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/$(DOMAIN).mo; \ | |||
[ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \ | |||
install -m 644 tasks/po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/$(DOMAIN).mo; \ | |||
done | |||
for test in tests/*; do \ | |||
install -m 755 $$test $(DESTDIR)/usr/lib/tasksel/tests/; \ | |||
done | |||
test: | |||
$(MAKE) -C scratch | |||
clean: | |||
rm -f $(PROGRAM) $(TASKDESC) *.o *~ | |||
rm -f $(TASKDESC) *~ | |||
$(MAKE) -C po clean | |||
$(MAKE) -C $(DESCPO) clean | |||
@@ -1,38 +1,18 @@ | |||
$Id: README,v 1.4 2003/09/16 23:38:46 joeyh Rel $ | |||
Task Selection UI v0.1 | |||
Nov 20, 1999 | |||
Randolph Chung <tausq@debian.org> | |||
The interface uses debconf for consistency with the rest of the Debian | |||
installer. | |||
Here's a first cut at a task selection user interface. | |||
The interface GUI is based on libslang. It has no other special library | |||
dependencies. | |||
On startup, the tasksel program will read | |||
/usr/share/tasksel/debian-tasks.desc for information about what tasks are | |||
available and their descriptions and sections. Next it will read the output | |||
of apt-cache dumpavail. Task: fields can be used to state that a package | |||
belongs to a task or tasks. Also, the package names are used to identify | |||
task packages (matching "task-*"). | |||
The tasks will be presented in a simple list selection screen with | |||
their short descriptions. Users can drill down into the tasks to | |||
see detailed descriptions and some information about the packages in the | |||
task. | |||
On startup, the tasksel program will read all *.desc files in | |||
/usr/share/tasksel/ for information about what tasks are available. The | |||
tasks will be presented in a simple list selection screen with their short | |||
descriptions. | |||
On exit, tasksel executes the appropriate apt-get command to install the | |||
selected packages. If the -t option is given, then tasksel prints out the | |||
command line to use to stdout instead. All other messages are printed to | |||
stderr. | |||
The appropriate display strings in the source have been marked with gettext | |||
macros, though I have never done any other i18n work and am not sure if it | |||
is done correctly at the moment. | |||
A word on building.... use make CFLAGS="-Os" to get a smaller binary. The | |||
default build rule produces binaries with debugging symbols. You can also | |||
turn on -DDEBUG to get extra debugging info. | |||
Comments and suggestions are most welcome. | |||
To get a new task added, please file a bug report on tasksel. | |||
Debian derived distributions can add a new .desc file to | |||
/usr/share/tasksel/ to add additional tasks, or modify/divert | |||
debian-tasks.desc to remove tasks. |
@@ -12,7 +12,8 @@ There are two directories containing translations: | |||
Contain the phrases used in the tasks themselves. | |||
The text in both these directories need to be translated for the | |||
translation to be complete. | |||
translation to be complete. You'll also need to translate the debconf | |||
templates, of course. | |||
Your language should be listed in LANGS and LANGS_DESC variables | |||
in Makefile. (LANGS is for translations in po/, and LANGS_DESC | |||
@@ -1,6 +1,3 @@ | |||
$Id: TODO,v 1.11 2003/07/25 23:56:36 joeyh Rel $ | |||
- fix screen resize code (in dialogs, it doesn't work right) | |||
- figure out how to properly install the i18n stuff | |||
- show already installed tasks | |||
- language tasks like spanish that include stuff like mozilla-locale-es-es | |||
and openoffice.org-l10n-es pull in all of mozilla and openoffice, which | |||
@@ -1,696 +0,0 @@ | |||
/* $Id: data.c,v 1.20 2003/09/16 23:38:46 joeyh Rel $ */ | |||
/* data.c - encapsulates functions for reading a package listing like dpkg's available file | |||
* Internally, packages are stored in a binary tree format to faciliate search operations | |||
*/ | |||
#include "data.h" | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <search.h> | |||
#include <string.h> | |||
#include <ctype.h> | |||
#include <libintl.h> | |||
#include "slangui.h" | |||
#include "util.h" | |||
#include "macros.h" | |||
#define PACKAGEFIELD "Package: " | |||
#define TASKFIELD "Task: " | |||
#define KEYFIELD "Key:" /* multiline; no space necessary */ | |||
#define RELEVANCEFIELD "Relevance: " | |||
#define DEPENDSFIELD "Depends: " | |||
#define RECOMMENDSFIELD "Recommends: " | |||
#define SUGGESTSFIELD "Suggests: " | |||
#define DESCRIPTIONFIELD "Description: " | |||
#define PRIORITYFIELD "Priority: " | |||
#define SECTIONFIELD "Section: " | |||
#define STATUSFIELD "Status: " | |||
#define STATUSFILE "/var/lib/dpkg/status" | |||
#define DUMPAVAIL "apt-cache dumpavail" | |||
#define BUF_SIZE 1024 | |||
#define MATCHFIELD(buf, s) (strncmp(buf, s, strlen(s)) == 0) | |||
#define FIELDDATA(buf, s) (buf + strlen(s)) | |||
#define CHOMP(s) if (s[strlen(s)-1] == '\n') s[strlen(s)-1] = 0 | |||
/* module variables */ | |||
static struct package_t **_packages_enumbuf = NULL; | |||
static int _packages_enumcount = 0; | |||
static void *_packages_root = NULL; | |||
static struct task_t **_tasks_enumbuf = NULL; | |||
static int _tasks_enumcount = 0; | |||
static void *_tasks_root = NULL; | |||
int _tasks_count; | |||
/* private functions */ | |||
static int packagecompare(const void *p1, const void *p2) | |||
{ | |||
/* compares two packages by name; used for binary tree routines */ | |||
char *s1, *s2; | |||
s1 = ((struct package_t *)p1)->name; | |||
s2 = ((struct package_t *)p2)->name; | |||
return strcmp(s1, s2); | |||
} | |||
static void packages_walk_enumerate(const void *nodep, const VISIT order, const int depth) | |||
{ | |||
/* adds nodep to list of nodes if we haven't visited this node before */ | |||
struct package_t *datap = *(struct package_t **)nodep; | |||
if (order == leaf || order == postorder) { | |||
_packages_enumcount++; | |||
_packages_enumbuf[_packages_enumcount - 1] = datap; | |||
} | |||
} | |||
static void tasks_walk_enumerate(const void *nodep, const VISIT order, const int depth) | |||
{ | |||
/* adds nodep to list of nodes if we haven't visited this node before */ | |||
struct task_t *datap = *(struct task_t **)nodep; | |||
if (order == leaf || order == postorder) { | |||
_tasks_enumcount++; | |||
_tasks_enumbuf[_tasks_enumcount - 1] = datap; | |||
} | |||
} | |||
static int taskcompare(const void *lp, const void *rp) | |||
{ | |||
const struct task_t *l = (const struct task_t *)lp; | |||
const struct task_t *r = (const struct task_t *)rp; | |||
return strcmp(l->name, r->name); | |||
} | |||
static void tasks_walk_delete(const void *nodep, const VISIT order, const int depth) | |||
{ | |||
/* deletes memory associated with nodep */ | |||
struct task_t *datap = *(struct task_t **)nodep; | |||
int i; | |||
if (order == leaf || order == endorder) { | |||
tdelete((void *)datap, &_tasks_root, taskcompare); | |||
if (datap->name) FREE(datap->name); | |||
if (datap->packages) { | |||
for (i = 0; i < datap->packagescount; i++) FREE(datap->packages[i]); | |||
FREE(datap->packages); | |||
} | |||
FREE(datap); | |||
} | |||
} | |||
static void tasks_walk_crop(const void *nodep, const VISIT order, const int depth) | |||
{ | |||
struct task_t *datap = *(struct task_t **)nodep; | |||
if (order == leaf || order == endorder) { | |||
if (! datap->task_pkg || ! datap->task_pkg->shortdesc) { | |||
if (tdelete((void *)datap, &_tasks_root, taskcompare)) { | |||
_tasks_count--; | |||
} | |||
} | |||
} | |||
} | |||
static void packages_walk_delete(const void *nodep, const VISIT order, const int depth) | |||
{ | |||
/* deletes memory associated with nodep */ | |||
struct package_t *datap = *(struct package_t **)nodep; | |||
int i; | |||
if (order == leaf || order == endorder) { | |||
tdelete((void *)datap, &_packages_root, packagecompare); | |||
if (datap->name) FREE(datap->name); | |||
if (datap->shortdesc) FREE(datap->shortdesc); | |||
if (datap->longdesc) FREE(datap->longdesc); | |||
if (datap->depends) { | |||
for (i = 0; i < datap->dependscount; i++) FREE(datap->depends[i]); | |||
FREE(datap->depends); | |||
} | |||
if (datap->suggests) { | |||
for (i = 0; i < datap->suggestscount; i++) FREE(datap->suggests[i]); | |||
FREE(datap->suggests); | |||
} | |||
if (datap->recommends) { | |||
for (i = 0; i < datap->recommendscount; i++) FREE(datap->recommends[i]); | |||
FREE(datap->recommends); | |||
} | |||
FREE(datap); | |||
} | |||
} | |||
static int splitlinkdesc(const char *desc, char ***array) | |||
{ | |||
/* given a comma separate list of names, returns an array with the names split into elts of the array */ | |||
char *p; | |||
char *token; | |||
int i = 0, elts = 1; | |||
VERIFY(array != NULL); | |||
*array = NULL; | |||
if (desc == NULL) return 0; | |||
p = (char *)desc; | |||
while (*p != 0) if (*p++ == ',') elts++; | |||
*array = MALLOC(sizeof(char *) * elts); | |||
memset(*array, 0, sizeof(char *) * elts); | |||
p = (char *)desc; | |||
while ((token = strsep(&p, ","))) { | |||
while (isspace(*token)) token++; | |||
(*array)[i++] = STRDUP(token); | |||
} | |||
return elts; | |||
} | |||
void deletetask(struct tasks_t *tasks, const char *taskname) { | |||
struct task_t *task; | |||
task = tasks_find(tasks, taskname); | |||
if (! task) | |||
return; | |||
/* TODO: free structs */ | |||
if (tdelete((void *)task, &tasks->tasks, taskcompare)) { | |||
tasks->count--; | |||
} | |||
} | |||
static struct task_t *addtask( | |||
struct tasks_t *tasks, | |||
const char *taskname, | |||
const char *package) | |||
{ | |||
struct task_t t = {0}, *task; | |||
void *result; | |||
t.name = (char*)taskname; | |||
result = tfind(&t, &tasks->tasks, taskcompare); | |||
if (result) { | |||
task = *(struct task_t**)result; | |||
} else { | |||
task = NEW(struct task_t); | |||
task->name = STRDUP(taskname); | |||
task->task_pkg = NULL; | |||
task->packages = MALLOC(sizeof(char*)*10); | |||
task->packagesmax = 10; | |||
task->packagescount = 0; | |||
task->selected = 0; | |||
task->relevance = 5; | |||
tsearch(task, &tasks->tasks, taskcompare); | |||
tasks->count++; | |||
} | |||
{ | |||
char const *pch; | |||
if (*package == '\0') return task; | |||
for (pch = package; *pch; pch++) { | |||
if ('a' <= *pch && *pch <= 'z') continue; | |||
if ('0' <= *pch && *pch <= '9') continue; | |||
if (*pch == '+' || *pch == '-' || *pch == '.') continue; | |||
return task; | |||
} | |||
} | |||
if (task->packagescount >= task->packagesmax) { | |||
ASSERT(task->packagescount == task->packagesmax); | |||
task->packagesmax *= 2; | |||
task->packages = REALLOC(task->packages, task->packagesmax * sizeof(char*)); | |||
} | |||
task->packages[task->packagescount++] = STRDUP(package); | |||
return task; | |||
} | |||
static struct package_t *addpackage( | |||
struct packages_t *pkgs, | |||
const char *name, const char *dependsdesc, | |||
const char *recommendsdesc, const char *suggestsdesc, | |||
const char *shortdesc, const char *longdesc, | |||
const priority_t priority) | |||
{ | |||
/* Adds package to the package list binary tree */ | |||
struct package_t *node = NEW(struct package_t); | |||
void *p; | |||
VERIFY(name != NULL); | |||
/* DPRINTF("Adding package %s to list\n", name); */ | |||
memset(node, 0, sizeof(struct package_t)); | |||
node->name = STRDUP(name); | |||
node->shortdesc = STRDUP(shortdesc); | |||
node->longdesc = STRDUP(longdesc); | |||
node->priority = priority; | |||
node->section = NULL; | |||
node->pseudopackage = 0; | |||
if (dependsdesc) node->dependscount = splitlinkdesc(dependsdesc, &node->depends); | |||
if (recommendsdesc) node->recommendscount = splitlinkdesc(recommendsdesc, &node->recommends); | |||
if (suggestsdesc) node->suggestscount = splitlinkdesc(suggestsdesc, &node->suggests); | |||
p = tsearch(node, &pkgs->packages, packagecompare); | |||
VERIFY(p != NULL); | |||
if (*(struct package_t**)p == node) { | |||
pkgs->count++; | |||
} else { | |||
/* hmmm. this happens when there's a task- package and an entry in | |||
* the task file. what to do about it? I *think* what's happening is | |||
* the task- package is being replaced by the entry in the file, which | |||
* would mean **p is getting leaked right now. XXX | |||
*/ | |||
fprintf(stderr, "W: duplicate task info for %s\n", node->name); | |||
} | |||
return node; | |||
} | |||
/* public functions */ | |||
struct package_t *packages_find(const struct packages_t *pkgs, const char *name) | |||
{ | |||
/* Given a package name, returns a pointer to the appropriate package_t | |||
* structure or NULL if none is found */ | |||
struct package_t pkg; | |||
void *result; | |||
pkg.name = (char *)name; | |||
result = tfind((void *)&pkg, &pkgs->packages, packagecompare); | |||
if (result == NULL) | |||
return NULL; | |||
else | |||
return *(struct package_t **)result; | |||
} | |||
struct task_t *tasks_find(const struct tasks_t *tasks, const char *name) | |||
{ | |||
/* Given a task name, returns a pointer to the appropriate task_t | |||
* structure or NULL if none is found */ | |||
struct task_t task; | |||
void *result; | |||
task.name = (char *)name; | |||
result = tfind((void *)&task, &tasks->tasks, taskcompare); | |||
if (result == NULL) | |||
return NULL; | |||
else | |||
return *(struct task_t **)result; | |||
} | |||
struct package_t **packages_enumerate(const struct packages_t *packages) | |||
{ | |||
/* Converts a packages binary tree into an array */ | |||
_packages_enumbuf = MALLOC(sizeof(struct package_t *) * packages->count); | |||
if (_packages_enumbuf == NULL) | |||
DIE(_("Cannot allocate memory for enumeration buffer")); | |||
memset(_packages_enumbuf, 0, sizeof(struct package_t *) * packages->count); | |||
_packages_enumcount = 0; | |||
twalk((void *)packages->packages, packages_walk_enumerate); | |||
ASSERT(_packages_enumcount == packages->count); | |||
return _packages_enumbuf; | |||
} | |||
struct task_t **tasks_enumerate(const struct tasks_t *tasks) | |||
{ | |||
/* Converts the tasks binary tree into an array. */ | |||
_tasks_enumbuf = MALLOC(sizeof(struct task_t *) * tasks->count); | |||
if (_tasks_enumbuf == NULL) | |||
DIE(_("Cannot allocate memory for enumeration buffer")); | |||
memset(_tasks_enumbuf, 0, sizeof(struct task_t *) * tasks->count); | |||
_tasks_enumcount = 0; | |||
twalk((void *)tasks->tasks, tasks_walk_enumerate); | |||
ASSERT(_tasks_enumcount == tasks->count); | |||
qsort(_tasks_enumbuf, tasks->count, sizeof(struct task_t *), | |||
taskcompare); | |||
return _tasks_enumbuf; | |||
} | |||
void tasks_crop(struct tasks_t *tasks) { | |||
_tasks_root = tasks->tasks; | |||
_tasks_count = tasks->count; | |||
twalk(tasks->tasks, tasks_walk_crop); | |||
tasks->count = _tasks_count; | |||
} | |||
static void walktasks(const void *t, const VISIT which, const int depth) | |||
{ | |||
struct task_t *task = *(struct task_t**)t; | |||
int i; | |||
if (which == postorder || which == leaf) { | |||
fprintf(stderr, "Task %s [%s]:\n", task->name, | |||
(task->task_pkg ? task->task_pkg->section : "misc")); | |||
for (i = 0; i < task->packagescount; i++) { | |||
fprintf(stderr, " %s\n", task->packages[i]); | |||
} | |||
} | |||
} | |||
static void add_translated_paragraph(char *domain, char **trans, char *msgid) | |||
{ | |||
char *l, *msgstr; | |||
l = msgid+strlen(msgid) - 1; | |||
while (l[0] == '\n' || l[0] == ' ') { | |||
l[0] = '\0'; | |||
if (l == msgid) | |||
break; | |||
l--; | |||
} | |||
msgstr = dgettext(domain, msgid); | |||
if (*trans == NULL) { | |||
/* '\n\n' will be appended */ | |||
*trans = MALLOC(strlen(msgstr) + 3); | |||
**trans = '\0'; | |||
} | |||
else { | |||
*trans = REALLOC(*trans, strlen(*trans) + strlen(msgstr) + 3); | |||
} | |||
strcat(*trans, msgstr); | |||
strcat(*trans, "\n\n"); | |||
} | |||
void taskfile_read(char *fn, struct tasks_t *tasks, struct packages_t *pkgs, | |||
unsigned char showempties) | |||
{ | |||
/* Reads a task definition file, and populates internal data structures | |||
* with information about the tasks defined therein. | |||
* | |||
* The format of the task definition file is a series of stanzas, | |||
* seperated by blank lines. Each stanza is in rfc-822 format, and | |||
* contains fields named Task, Description (with extended desc), and | |||
* Section. (The information about what packages belong in a task is | |||
* contained in Task fields in the Packages file.) */ | |||
FILE *f; | |||
char buf[BUF_SIZE]; | |||
char *pkgname, *s; | |||
char *task, *shortdesc, *longdesc, *translongdesc, *section; | |||
int relevance = 5; | |||
struct package_t *p; | |||
struct task_t *t; | |||
char *package; | |||
int key_missing; | |||
char *domainname, *newdomainname, *l, *startdesc; | |||
int verbatimline; | |||
f = fopen(fn, "r"); | |||
if (f == NULL) PERROR(fn); | |||
/* Use a domain matching the task file that's being read, so translations | |||
* can be found. */ | |||
domainname=STRDUP(fn); | |||
l = strrchr(domainname, '/'); | |||
if (l) { | |||
newdomainname=STRDUP(l+1); | |||
FREE(domainname); | |||
domainname = newdomainname; | |||
} | |||
l = strrchr(domainname, '.'); | |||
if (l) | |||
l[0] = '\0'; | |||
while (!feof(f)) { | |||
fgets(buf, BUF_SIZE, f); | |||
CHOMP(buf); | |||
if (MATCHFIELD(buf, TASKFIELD)) { | |||
shortdesc = longdesc = section = NULL; | |||
task = STRDUP(FIELDDATA(buf, TASKFIELD)); | |||
VERIFY(task != NULL); | |||
key_missing=0; | |||
while (!feof(f)) { | |||
fgets(buf, BUF_SIZE, f); | |||
dontmakemethink: | |||
/* after reading the Description:, we may actually have some more fields. | |||
* but the only way we might know this is if we've just read one of those | |||
* fields. to ensure we don't miss it, we immediately goto the label above | |||
* when we realise our mistake. a computer scientist would use lookahead | |||
* for this | |||
*/ | |||
CHOMP(buf); | |||
if (buf[0] == 0) break; | |||
if (MATCHFIELD(buf, SECTIONFIELD)) { | |||
section = STRDUP(FIELDDATA(buf, SECTIONFIELD)); | |||
} else if (MATCHFIELD(buf, RELEVANCEFIELD)) { | |||
char *data = FIELDDATA(buf, RELEVANCEFIELD); | |||
if (strlen(data)) | |||
relevance = atoi(data); | |||
} else if (MATCHFIELD(buf, DESCRIPTIONFIELD)) { | |||
shortdesc = STRDUP(dgettext(domainname, FIELDDATA(buf, DESCRIPTIONFIELD))); | |||
VERIFY(shortdesc != NULL); | |||
do { | |||
if (fgets(buf, BUF_SIZE, f) == 0) | |||
break; | |||
if (buf[0] != ' ') goto dontmakemethink; | |||
if (longdesc == NULL) { | |||
longdesc = (char *)MALLOC(strlen(buf) + 1); | |||
strcpy(longdesc, buf + 1); | |||
} else { | |||
longdesc = realloc(longdesc, strlen(longdesc) + strlen(buf) + 1); | |||
strcat(longdesc, buf + 1); | |||
} | |||
} while (buf[0] != '\n' && !feof(f)); | |||
break; | |||
} else if (MATCHFIELD(buf, KEYFIELD)) { | |||
do { | |||
if (fgets(buf, BUF_SIZE, f) == 0) | |||
break; | |||
if (buf[0] != ' ') goto dontmakemethink; | |||
CHOMP(buf); | |||
pkgname=buf; | |||
while(pkgname[0] == ' ') | |||
pkgname++; | |||
s=pkgname+strlen(pkgname)-1; | |||
while(s[0] == ' ') { | |||
s[0]='\0'; | |||
s--; | |||
} | |||
if (pkgname) { | |||
if (! packages_find(pkgs, pkgname)) { | |||
DPRINTF("task %s is missing key package %s", task, pkgname); | |||
key_missing=1; | |||
} | |||
} | |||
} while (buf[0] != '\n' && !feof(f)); | |||
} | |||
} | |||
/* Munge long desc to something that gettext might be able to use. */ | |||
verbatimline = 0; | |||
l = startdesc = longdesc; | |||
translongdesc = NULL; | |||
while ((l = strchr(l, '\n'))) { | |||
if (l[1] == ' ') | |||
verbatimline = 1; | |||
else if (l[1] == '.' && l[2] == '\n') { | |||
/* Translate current paragraph and pass to next one */ | |||
l[0] = '\0'; | |||
add_translated_paragraph(domainname, &translongdesc, startdesc); | |||
startdesc = l + 3; | |||
l += 2; | |||
verbatimline = 0; | |||
} | |||
else { | |||
if (!verbatimline) | |||
l[0] = ' '; | |||
verbatimline = 0; | |||
} | |||
l++; | |||
} | |||
add_translated_paragraph(domainname, &translongdesc, startdesc); | |||
FREE(longdesc); | |||
l = longdesc = translongdesc; | |||
/* Dirty trick: text is reformatted in reflowtext(), but | |||
* superfluous \n are already stripped, so keep remaining ones | |||
*/ | |||
while ((l = strchr(l, '\n'))) | |||
l[0] = '\r'; | |||
/* packages_readlist must be called before this function, so we can | |||
* tell if any packages are in this task, and ignore it if none are */ | |||
if (showempties || (!key_missing && tasks_find(tasks, task))) { | |||
/* This is a fake package to go with the task. I add the task- | |||
* prefix to the package name to ensure that adding this fake | |||
* package stomps on the toes of no real package. */ | |||
/* FIXME: It should not be necessary to do this; instead task_t | |||
* should include description and section fields and not need an | |||
* associated package. */ | |||
package = MALLOC(strlen(task) + 6); | |||
package = MALLOC(6 + strlen(task)); | |||
strcpy(package, "task-"); strcat(package, task); | |||
p = addpackage(pkgs, package, NULL, NULL, NULL, shortdesc, longdesc, | |||
PRIORITY_UNKNOWN); | |||
p->section = STRDUP(section); | |||
p->pseudopackage = 1; | |||
t = addtask(tasks, task, ""); | |||
t->task_pkg = p; | |||
t->relevance = relevance; | |||
} | |||
else { | |||
DPRINTF("skipping empty task %s", task); | |||
deletetask(tasks, task); | |||
} | |||
if (task != NULL) FREE(task); | |||
if (shortdesc != NULL) FREE(shortdesc); | |||
if (longdesc != NULL) FREE(longdesc); | |||
if (section != NULL) FREE(section); | |||
} | |||
} | |||
if (domainname != NULL) FREE(domainname); | |||
fclose(f); | |||
} | |||
void packages_readlist(struct tasks_t *tasks, struct packages_t *pkgs) | |||
{ | |||
/* Populates internal data structures with information about available | |||
* packages */ | |||
FILE *f; | |||
char buf[BUF_SIZE]; | |||
char *name, *shortdesc, *longdesc; | |||
char *dependsdesc, *recommendsdesc, *suggestsdesc, *prioritydesc, *taskdesc; | |||
char *section; | |||
priority_t priority; | |||
/* XXX This is hardly idea. */ | |||
if ((f = popen(DUMPAVAIL, "r")) == NULL) PERROR(DUMPAVAIL); | |||
while (!feof(f)) { | |||
fgets(buf, BUF_SIZE, f); | |||
CHOMP(buf); | |||
if (MATCHFIELD(buf, PACKAGEFIELD)) { | |||
/*DPRINTF("Package = %s\n", FIELDDATA(buf, PACKAGEFIELD)); */ | |||
name = shortdesc = longdesc = taskdesc = dependsdesc = recommendsdesc = suggestsdesc = section = NULL; | |||
priority = PRIORITY_UNKNOWN; | |||
name = STRDUP(FIELDDATA(buf, PACKAGEFIELD)); | |||
VERIFY(name != NULL); | |||
/* look for depends/suggests and shotdesc/longdesc */ | |||
while (!feof(f)) { | |||
fgets(buf, BUF_SIZE, f); | |||
dontmakemethink: | |||
/* after reading the Description:, we make actually have some more fields. | |||
* but the only way we might know this is if we've just read one of those | |||
* fields. to ensure we don't miss it, we immediately goto the label above | |||
* when we realise our mistake. a computer scientist would use lookahead | |||
* for this | |||
*/ | |||
CHOMP(buf); | |||
if (buf[0] == 0) break; | |||
if (MATCHFIELD(buf, TASKFIELD)) { | |||
taskdesc = STRDUP(FIELDDATA(buf, TASKFIELD)); | |||
VERIFY(taskdesc != NULL); | |||
} else if (MATCHFIELD(buf, DEPENDSFIELD)) { | |||
dependsdesc = STRDUP(FIELDDATA(buf, DEPENDSFIELD)); | |||
VERIFY(dependsdesc != NULL); | |||
} else if (MATCHFIELD(buf, RECOMMENDSFIELD)) { | |||
recommendsdesc = STRDUP(FIELDDATA(buf, RECOMMENDSFIELD)); | |||
VERIFY(recommendsdesc != NULL); | |||
} else if (MATCHFIELD(buf, SUGGESTSFIELD)) { | |||
suggestsdesc = STRDUP(FIELDDATA(buf, SUGGESTSFIELD)); | |||
VERIFY(suggestsdesc != NULL); | |||
} else if (MATCHFIELD(buf, SECTIONFIELD)) { | |||
section = STRDUP(FIELDDATA(buf, SECTIONFIELD)); | |||
} else if (MATCHFIELD(buf, PRIORITYFIELD)) { | |||
prioritydesc = FIELDDATA(buf, PRIORITYFIELD); | |||
if (strcmp(prioritydesc, "required") == 0) { | |||
priority = PRIORITY_REQUIRED; | |||
} else if (strcmp(prioritydesc, "important") == 0) { | |||
priority = PRIORITY_IMPORTANT; | |||
} else if (strcmp(prioritydesc, "standard") == 0) { | |||
priority = PRIORITY_STANDARD; | |||
} else if (strcmp(prioritydesc, "optional") == 0) { | |||
priority = PRIORITY_OPTIONAL; | |||
} else if (strcmp(prioritydesc, "extra") == 0) { | |||
priority = PRIORITY_EXTRA; | |||
} | |||
} else if (MATCHFIELD(buf, DESCRIPTIONFIELD)) { | |||
shortdesc = STRDUP(FIELDDATA(buf, DESCRIPTIONFIELD)); | |||
VERIFY(shortdesc != NULL); | |||
do { | |||
if (fgets(buf, BUF_SIZE, f) == 0) | |||
break; | |||
if (buf[0] != ' ') goto dontmakemethink; | |||
if (buf[1] == '.') buf[1] = ' '; | |||
if (longdesc == NULL) { | |||
longdesc = (char *)MALLOC(strlen(buf) + 1); | |||
strcpy(longdesc, buf + 1); | |||
} else { | |||
longdesc = realloc(longdesc, strlen(longdesc) + strlen(buf) + 1); | |||
strcat(longdesc, buf + 1); | |||
} | |||
} while (buf[0] != '\n' && !feof(f)); | |||
break; | |||
} | |||
} | |||
if (strncmp(name, "task-", 5) != 0) { | |||
addpackage(pkgs, name, NULL, NULL, NULL, shortdesc, | |||
NULL, priority); | |||
} else { | |||
struct package_t *p; | |||
struct task_t *t; | |||
int i; | |||
p = addpackage(pkgs, name, dependsdesc, recommendsdesc, | |||
suggestsdesc, shortdesc, | |||
longdesc, priority); | |||
#if 1 | |||
if (section && strncmp(section, "tasks-", 6) == 0) { | |||
p->section = STRDUP(section+6); | |||
} else { | |||
p->section = "junk"; | |||
} | |||
#else | |||
p->section = STRDUP(section); | |||
#endif | |||
t = addtask(tasks, name+5, ""); | |||
t->task_pkg = p; | |||
for (i = 0; i < p->dependscount; i++) { | |||
addtask(tasks, name+5, p->depends[i]); | |||
} | |||
} | |||
if (taskdesc != NULL) { | |||
char **ts; | |||
int tscount; | |||
int i; | |||
tscount = splitlinkdesc(taskdesc, &ts); | |||
for (i = 0; i < tscount; i++) { | |||
addtask(tasks, ts[i], name); | |||
FREE(ts[i]); | |||
} | |||
FREE(ts); | |||
} | |||
if (name != NULL) FREE(name); | |||
if (dependsdesc != NULL) FREE(dependsdesc); | |||
if (recommendsdesc != NULL) FREE(recommendsdesc); | |||
if (suggestsdesc != NULL) FREE(suggestsdesc); | |||
if (taskdesc != NULL) FREE(taskdesc); | |||
if (shortdesc != NULL) FREE(shortdesc); | |||
if (longdesc != NULL) FREE(longdesc); | |||
if (section != NULL) FREE(section); | |||
} | |||
}; | |||
fclose(f); | |||
/*twalk(tasks->tasks, walktasks);*/ | |||
} | |||
void packages_free(struct tasks_t *tasks, struct packages_t *pkgs) | |||
{ | |||
/* Frees up memory allocated by taskfile_read and packages_readlist */ | |||
_tasks_root = tasks->tasks; | |||
twalk(tasks->tasks, tasks_walk_delete); | |||
_packages_root = pkgs->packages; | |||
twalk(pkgs->packages, packages_walk_delete); | |||
} | |||
@@ -1,64 +0,0 @@ | |||
/* $Id: data.h,v 1.10 2003/08/01 01:39:35 joeyh Rel $ */ | |||
#ifndef _DATA_H | |||
#define _DATA_H | |||
typedef enum { | |||
PRIORITY_UNKNOWN = 0, | |||
PRIORITY_REQUIRED, | |||
PRIORITY_IMPORTANT, | |||
PRIORITY_STANDARD, | |||
PRIORITY_OPTIONAL, | |||
PRIORITY_EXTRA | |||
} priority_t; | |||
struct package_t { | |||
char *name; | |||
char *shortdesc; | |||
char *longdesc; | |||
int dependscount; | |||
char **depends; | |||
int recommendscount; | |||
char **recommends; | |||
int suggestscount; | |||
char **suggests; | |||
char *section; | |||
priority_t priority; | |||
int selected; | |||
int pseudopackage; | |||
}; | |||
struct packages_t { | |||
int count; | |||
void *packages; | |||
}; | |||
struct task_t { | |||
char *name; | |||
struct package_t *task_pkg; | |||
char **packages; | |||
int packagescount; | |||
int packagesmax; | |||
int selected; | |||
int relevance; | |||
}; | |||
struct tasks_t { | |||
int count; | |||
void *tasks; | |||
}; | |||
/* Reads in a list of tasks from task description file */ | |||
void taskfile_read(char *fn, struct tasks_t *tasks, struct packages_t *pkgs, unsigned char showempties); | |||
/* Reads in a list of package and package descriptions from available file */ | |||
void packages_readlist(struct tasks_t *tasks, struct packages_t *packages); | |||
/* free memory allocated to store packages */ | |||
void packages_free(struct tasks_t *tasks, struct packages_t *packages); | |||
void tasks_crop(struct tasks_t *tasks); | |||
struct package_t *packages_find(const struct packages_t *packages, const char *name); | |||
struct task_t *tasks_find(const struct tasks_t *tasks, const char *name); | |||
struct package_t **packages_enumerate(const struct packages_t *packages); | |||
struct task_t **tasks_enumerate(const struct tasks_t *tasks); | |||
#endif |
@@ -1,8 +1,57 @@ | |||
tasksel (1.53) UNRELEASED; urgency=low | |||
tasksel (2.01) UNRELEASED; urgency=low | |||
* Joey Hess | |||
- Add hspell-gui to Hebrew task. | |||
- Merge office with desktop task, dropping gnucash. | |||
* Translations | |||
- Eugeniy Meshcheryakov | |||
- Updated Ukrainian translation | |||
- Christian Perrier | |||
- Updated POT files and PO files accordingly | |||
- Updated French programs and debconf translations | |||
- Kęstutis Biliūnas | |||
- Updated Lithuanian programs and debconf translations | |||
- Claus Hindsgaul | |||
- Updated Danish translation | |||
-- Christian Perrier <bubulle@kheops.frmug.org> Tue, 15 Jun 2004 08:26:08 +0200 | |||
tasksel (2.00) experimental; urgency=low | |||
* Joey Hess | |||
- Rewrote tasksel to use debconf for the UI, and support test programs | |||
for flexible automatic task selection, etc. | |||
Closes: #65992, #103363, #105718, #234216, #251419, #251638, #251639 | |||
Closes: #244949, #251743 | |||
- Tagged all the language tasks with Test-lang fields holding the | |||
language that the task is useful for, to allow for autoselection | |||
of languages matching the installation language. | |||
- Add fortune-mod to the desktop task as a gnome or kde screensaver does | |||
very silly things w/o it. | |||
- Adopted new, stricter criteria for task additions. Removed the following | |||
tasks, which did not meet it: c-dev, java-dev, python-dev, broadband, | |||
dialup, laptop, junior, kernel-compile, science, tex, games, lsb, | |||
unix-server. Some of these (laptop, etc) could be reinstated if tests | |||
were developed for them. | |||
Closes: #192747, #249309, #234393, #202878, #249702, #142873, #186085 | |||
Closes: #237255, #245649, #254329 | |||
- Added a dependency on liblocale-gettext-perl. | |||
- Added a dependency on aptitude, which is used to do the work of | |||
installing tasks, etc. | |||
- Added a conflicts with older debconf versions that do not work | |||
with tasksel. | |||
- Tasksel now accepts long options in addition to the short ones. | |||
- The -q option is not yet re-implemented, and I hope not to implement | |||
it, as to do so would mean a lot more messing with the package | |||
database. This breaks older base-config's, so conflict with them. | |||
- The -a option is also not yet re-implemented. | |||
- Add --new-install option, intended to be used by base-config to make | |||
tasksel enter a special mode more suited for initial system installs. | |||
- Fixes "tasksel install". Closes: #165628 | |||
- Fix man page internal section. | |||
- Rejiggered the maintainer and uploader fields. | |||
- Update copyright. | |||
- Add Italian task. | |||
* Changwoo Ryu | |||
- Replaced old IM ami from Korean task with descent nabi and imhangul. | |||
- Added more fonts and docs to Korean task. | |||
@@ -16,7 +65,7 @@ tasksel (1.53) UNRELEASED; urgency=low | |||
- Tomohiro KUBOTA (久保田智広) | |||
- Updated Japanese tasks translation | |||
-- Christian Perrier <bubulle@debian.org> Wed, 26 May 2004 23:08:26 -0300 | |||
-- Joey Hess <joeyh@debian.org> Tue, 8 Jun 2004 13:32:12 -0400 | |||
tasksel (1.52) unstable; urgency=high | |||
@@ -1,16 +1,17 @@ | |||
Source: tasksel | |||
Section: base | |||
Priority: optional | |||
Maintainer: Randolph Chung <tausq@debian.org> | |||
Uploaders: Joey Hess <joeyh@debian.org> | |||
Maintainer: Debian Install System Team <debian-boot@lists.debian.org> | |||
Uploaders: Randolph Chung <tausq@debian.org>, Joey Hess <joeyh@debian.org> | |||
Standards-Version: 3.6.1.0 | |||
Build-Depends: po-debconf, debhelper (>= 4), slang1-utf8-dev, gettext, dpkg-dev (>= 1.9.0), libtextwrap-dev | |||
Build-Depends: po-debconf, debhelper (>= 4), gettext, dpkg-dev (>= 1.9.0) | |||
Package: tasksel | |||
Architecture: any | |||
Depends: ${shlibs:Depends}, ${misc:Depends} | |||
Depends: ${shlibs:Depends}, ${misc:Depends}, liblocale-gettext-perl, aptitude | |||
Conflicts: debconf (<< 1.4.27), base-config (<< 2.27) | |||
Description: Tool for selecting tasks for installation on Debian system | |||
This package provides 'tasksel', a simple interface for users who | |||
want to pick general tasks for installation on their Debian GNU/Linux | |||
system. This program is used during the installation process, but | |||
system. This program is used during the installation process, but | |||
users can also use tasksel at any point. |
@@ -1,6 +1,6 @@ | |||
This package was debianized by Randolph Chung <tausq@debian.org> on | |||
Wed, 8 Dec 1999 21:41:46 -0700. | |||
Upstream Author: Randolph Chung | |||
Upstream Authors: Randolph Chung and Joey Hess | |||
Copyright: GPLv2, see /usr/share/common-licenses/GPL |
@@ -1,4 +0,0 @@ | |||
usr/bin | |||
usr/share/man/man8 | |||
usr/share/locale | |||
usr/share/tasksel |
@@ -1,2 +0,0 @@ | |||
README | |||
TODO |
@@ -0,0 +1 @@ | |||
[type: gettext/rfc822deb] templates |
@@ -0,0 +1,63 @@ | |||
# | |||
# Translators, if you are not familiar with the PO format, gettext | |||
# documentation is worth reading, especially sections dedicated to | |||
# this format, e.g. by running: | |||
# info -n '(gettext)PO Files' | |||
# info -n '(gettext)Header Entry' | |||
# | |||
# Some information specific to po-debconf are available at | |||
# /usr/share/doc/po-debconf/README-trans | |||
# or http://www.debian.org/intl/l10n/po-debconf/README-trans | |||
# | |||
# Developers do not need to manually edit POT or PO files. | |||
# | |||
msgid "" | |||
msgstr "" | |||
"Project-Id-Version: tasksel\n" | |||
"Report-Msgid-Bugs-To: \n" | |||
"POT-Creation-Date: 2004-06-06 19:41-0400\n" | |||
"PO-Revision-Date: 2004-06-10 21:00+0200\n" | |||
"Last-Translator: Miroslav Kure <kurem@debian.cz>\n" | |||
"Language-Team: Czech <provoz@debian.cz>\n" | |||
"MIME-Version: 1.0\n" | |||
"Content-Type: text/plain; charset=ISO-8859-2\n" | |||
"Content-Transfer-Encoding: 8bit\n" | |||
#. Type: multiselect | |||
#. Choices | |||
#: ../templates:3 | |||
msgid "${CHOICES}, manual package selection" | |||
msgstr "${CHOICES}, ruèní výbìr balíkù" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:4 | |||
msgid "" | |||
"At the moment, only the core of Debian is installed. To tune the " | |||
"installation to your needs, you can choose to install one or more of the " | |||
"following predefined collections of software. Experienced users may prefer " | |||
"to select packages manually." | |||
msgstr "" | |||
"Momentálnì je nainstalováno pouze jádro Debianu. Abyste si vyladili systém " | |||
"dle svých potøeb, mù¾ete nyní instalovat tzv. úlohy. Úlohy jsou pøipravené " | |||
"kolekce souvisejícího softwaru. Zku¹ení u¾ivatelé mohou vybrat balíky ruènì." | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "Choose software to install:" | |||
msgstr "Zvolte programy k instalaci:" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "" | |||
"You can choose to install one or more of the following predefined " | |||
"collections of software." | |||
msgstr "Nyní mù¾ete nainstalovat jednu nebo více pøedpøipravených úloh." | |||
#. Type: title | |||
#. Description | |||
#: ../templates:19 | |||
msgid "Debian software selection" | |||
msgstr "Výbìr programù v Debianu" |
@@ -0,0 +1,65 @@ | |||
# | |||
# Translators, if you are not familiar with the PO format, gettext | |||
# documentation is worth reading, especially sections dedicated to | |||
# this format, e.g. by running: | |||
# info -n '(gettext)PO Files' | |||
# info -n '(gettext)Header Entry' | |||
# Some information specific to po-debconf are available at | |||
# /usr/share/doc/po-debconf/README-trans | |||
# or http://www.debian.org/intl/l10n/po-debconf/README-trans# | |||
# Developers do not need to manually edit POT or PO files. | |||
# Piarres Beobide Egaña <pi@beobide.net>, 2004. | |||
# | |||
msgid "" | |||
msgstr "" | |||
"Project-Id-Version: tasksel_debian_tem\n" | |||
"Report-Msgid-Bugs-To: \n" | |||
"POT-Creation-Date: 2004-06-06 19:41-0400\n" | |||
"PO-Revision-Date: 2004-06-21 17:36+0200\n" | |||
"Last-Translator: Piarres Beobide Egaña <pi@beobide.net>\n" | |||
"Language-Team: Euskara <librezale@librezale.org>\n" | |||
"MIME-Version: 1.0\n" | |||
"Content-Type: text/plain; charset=UTF-8\n" | |||
"Content-Transfer-Encoding: 8bit\n" | |||
"X-Generator: KBabel 1.3.1\n" | |||
"Plural-Forms: Plural-Forms: nplurals=2; plural=n != 1;\n" | |||
#. Type: multiselect | |||
#. Choices | |||
#: ../templates:3 | |||
msgid "${CHOICES}, manual package selection" | |||
msgstr "${CHOICES}, eskuzko pakete aukerareketa" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:4 | |||
msgid "" | |||
"At the moment, only the core of Debian is installed. To tune the " | |||
"installation to your needs, you can choose to install one or more of the " | |||
"following predefined collections of software. Experienced users may prefer " | |||
"to select packages manually." | |||
msgstr "" | |||
"Momentu honetan, Debianen muina bakarrik duzu instalaturik. Instalakuntza zure beharretara egokitzeko, aurreaukeratutako pakete bilduma " | |||
"hauetako bat edo gehiago instalatu ditzakezu. Erabiltzaile aurreratuek " | |||
"nahiago dute banakako aukeraketa bat egitea." | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "Choose software to install:" | |||
msgstr "Instalatu nahi duzun softwarea aukeratu:" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "" | |||
"You can choose to install one or more of the following predefined " | |||
"collections of software." | |||
msgstr "aurreaukeratutako pakete bilduma hauetako bat edo gehiago instalatu ditzakezu." | |||
#. Type: title | |||
#. Description | |||
#: ../templates:19 | |||
msgid "Debian software selection" | |||
msgstr "Debian software aukeraketa" | |||
@@ -0,0 +1,65 @@ | |||
# | |||
# Translators, if you are not familiar with the PO format, gettext | |||
# documentation is worth reading, especially sections dedicated to | |||
# this format, e.g. by running: | |||
# info -n '(gettext)PO Files' | |||
# info -n '(gettext)Header Entry' | |||
# | |||
# Some information specific to po-debconf are available at | |||
# /usr/share/doc/po-debconf/README-trans | |||
# or http://www.debian.org/intl/l10n/po-debconf/README-trans | |||
# | |||
# Developers do not need to manually edit POT or PO files. | |||
# | |||
msgid "" | |||
msgstr "" | |||
"Project-Id-Version: tasksel 2.00 debconf\n" | |||
"POT-Creation-Date: 2004-06-06 19:41-0400\n" | |||
"PO-Revision-Date: 2004-06-10 21:07+0100\n" | |||
"Last-Translator: Christian Perrier <bubulle@debian.org>\n" | |||
"Language-Team: French <debian-l10n-french@lists.debian.org>\n" | |||
"MIME-Version: 1.0\n" | |||
"Content-Type: text/plain; charset=iso-8859-1\n" | |||
"Content-Transfer-Encoding: 8bit\n" | |||
#. Type: multiselect | |||
#. Choices | |||
#: ../templates:3 | |||
msgid "${CHOICES}, manual package selection" | |||
msgstr "${CHOICES}, choix manuel des paquets" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:4 | |||
msgid "" | |||
"At the moment, only the core of Debian is installed. To tune the " | |||
"installation to your needs, you can choose to install one or more of the " | |||
"following predefined collections of software. Experienced users may prefer " | |||
"to select packages manually." | |||
msgstr "" | |||
"Actuellement, seul le système de base de Debian est installé. Pour adapter " | |||
"l'installation à vos besoins, vou spouvez choisir d'installer un ou " | |||
"plusieurs ensembles prédéfinis de logiciels. Les utilisateurs expérimentés " | |||
"préféreront probablement choisir eux-mêmes les paquets à installer." | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "Choose software to install:" | |||
msgstr "Logiciels à installer :" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "" | |||
"You can choose to install one or more of the following predefined " | |||
"collections of software." | |||
msgstr "" | |||
"Vous pouvez choisir d'installer un ou plusieurs des ensembles suivants de " | |||
"logiciels." | |||
#. Type: title | |||
#. Description | |||
#: ../templates:19 | |||
msgid "Debian software selection" | |||
msgstr "Sélection des logiciels Debian" |
@@ -0,0 +1,60 @@ | |||
# translation of tasksel_debian.po to Lithuanian | |||
# This file is distributed under the same license as the tasksel package. | |||
# Copyright (C) 2004 Free Software Foundation, Inc. | |||
# Kęstutis Biliūnas <kebil@kaunas.init.lt>, 2004. | |||
# | |||
msgid "" | |||
msgstr "" | |||
"Project-Id-Version: tasksel_debian\n" | |||
"Report-Msgid-Bugs-To: \n" | |||
"POT-Creation-Date: 2004-06-06 19:41-0400\n" | |||
"PO-Revision-Date: 2004-06-17 02:09+0300\n" | |||
"Last-Translator: Kęstutis Biliūnas <kebil@kaunas.init.lt>\n" | |||
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n" | |||
"MIME-Version: 1.0\n" | |||
"Content-Type: text/plain; charset=UTF-8\n" | |||
"Content-Transfer-Encoding: 8bit\n" | |||
"X-Generator: KBabel 1.3.1\n" | |||
#. Type: multiselect | |||
#. Choices | |||
#: ../templates:3 | |||
msgid "${CHOICES}, manual package selection" | |||
msgstr "${CHOICES}, rankinis paketų pasirinkimas" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:4 | |||
msgid "" | |||
"At the moment, only the core of Debian is installed. To tune the " | |||
"installation to your needs, you can choose to install one or more of the " | |||
"following predefined collections of software. Experienced users may prefer " | |||
"to select packages manually." | |||
msgstr "" | |||
"Esamu momentu yra įdiegta tik esminė Debian'o dalis. Tam, kad priderinti " | |||
"įdiegimą savo poreikiams, Jūs galite pasirinkti vieną ar kelis iš žemiau " | |||
"apibrėžtų programinės įrangos rinkinių. Patyrę naudotojai gali teikti pirmenybę " | |||
"rankiniam paketų pasirinkimui." | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "Choose software to install:" | |||
msgstr "Pasirinkite programas įdiegimui:" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "" | |||
"You can choose to install one or more of the following predefined " | |||
"collections of software." | |||
msgstr "" | |||
"Jūs galite pasirinkti vieną ar kelis iš žemiau apibrėžtų programinės " | |||
"įrangos rinkinių." | |||
#. Type: title | |||
#. Description | |||
#: ../templates:19 | |||
msgid "Debian software selection" | |||
msgstr "Debian'o programinės įrangos pasirinkimas" | |||
@@ -0,0 +1,65 @@ | |||
# | |||
# Translators, if you are not familiar with the PO format, gettext | |||
# documentation is worth reading, especially sections dedicated to | |||
# this format, e.g. by running: | |||
# info -n '(gettext)PO Files' | |||
# info -n '(gettext)Header Entry' | |||
# | |||
# Some information specific to po-debconf are available at | |||
# /usr/share/doc/po-debconf/README-trans | |||
# or http://www.debian.org/intl/l10n/po-debconf/README-trans | |||
# | |||
# Developers do not need to manually edit POT or PO files. | |||
# | |||
msgid "" | |||
msgstr "" | |||
"Project-Id-Version: tasksel\n" | |||
"Report-Msgid-Bugs-To: \n" | |||
"POT-Creation-Date: 2004-06-06 19:41-0400\n" | |||
"PO-Revision-Date: 2004-06-22 16:18+0200\n" | |||
"Last-Translator: Peter KLFMANiK Mann <Peter.Mann@tuke.sk>\n" | |||
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n" | |||
"MIME-Version: 1.0\n" | |||
"Content-Type: text/plain; charset=UTF-8\n" | |||
"Content-Transfer-Encoding: 8bit\n" | |||
#. Type: multiselect | |||
#. Choices | |||
#: ../templates:3 | |||
msgid "${CHOICES}, manual package selection" | |||
msgstr "${CHOICES}, manuálny výber balíkov" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:4 | |||
msgid "" | |||
"At the moment, only the core of Debian is installed. To tune the " | |||
"installation to your needs, you can choose to install one or more of the " | |||
"following predefined collections of software. Experienced users may prefer " | |||
"to select packages manually." | |||
msgstr "" | |||
"Momentálne je nainštalovaný iba základ Debianu. Aby ste si vyladili systém " | |||
"podľa svojich potrieb, môžete teraz inštalovať tzv. úlohy. Úlohy sú pripravené " | |||
"kolekcie súvisiaceho softvéru. Skúsení používatelia si môžu vybrať balíky " | |||
"manuálne." | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "Choose software to install:" | |||
msgstr "Zvoľte programy na inštaláciu:" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "" | |||
"You can choose to install one or more of the following predefined " | |||
"collections of software." | |||
msgstr "Teraz môžete inštalovať jednu alebo viac predpripravených úloh." | |||
#. Type: title | |||
#. Description | |||
#: ../templates:19 | |||
msgid "Debian software selection" | |||
msgstr "Výber programov v Debiane" | |||
@@ -0,0 +1,61 @@ | |||
# | |||
# Translators, if you are not familiar with the PO format, gettext | |||
# documentation is worth reading, especially sections dedicated to | |||
# this format, e.g. by running: | |||
# info -n '(gettext)PO Files' | |||
# info -n '(gettext)Header Entry' | |||
# | |||
# Some information specific to po-debconf are available at | |||
# /usr/share/doc/po-debconf/README-trans | |||
# or http://www.debian.org/intl/l10n/po-debconf/README-trans | |||
# | |||
# Developers do not need to manually edit POT or PO files. | |||
# | |||
#, fuzzy | |||
msgid "" | |||
msgstr "" | |||
"Project-Id-Version: PACKAGE VERSION\n" | |||
"Report-Msgid-Bugs-To: \n" | |||
"POT-Creation-Date: 2004-06-06 19:41-0400\n" | |||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |||
"Language-Team: LANGUAGE <LL@li.org>\n" | |||
"MIME-Version: 1.0\n" | |||
"Content-Type: text/plain; charset=CHARSET\n" | |||
"Content-Transfer-Encoding: 8bit\n" | |||
#. Type: multiselect | |||
#. Choices | |||
#: ../templates:3 | |||
msgid "${CHOICES}, manual package selection" | |||
msgstr "" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:4 | |||
msgid "" | |||
"At the moment, only the core of Debian is installed. To tune the " | |||
"installation to your needs, you can choose to install one or more of the " | |||
"following predefined collections of software. Experienced users may prefer " | |||
"to select packages manually." | |||
msgstr "" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "Choose software to install:" | |||
msgstr "" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "" | |||
"You can choose to install one or more of the following predefined " | |||
"collections of software." | |||
msgstr "" | |||
#. Type: title | |||
#. Description | |||
#: ../templates:19 | |||
msgid "Debian software selection" | |||
msgstr "" |
@@ -0,0 +1,65 @@ | |||
# translation of tasksel-templates.po to Ukrainian | |||
# | |||
# Translators, if you are not familiar with the PO format, gettext | |||
# documentation is worth reading, especially sections dedicated to | |||
# this format, e.g. by running: | |||
# info -n '(gettext)PO Files' | |||
# info -n '(gettext)Header Entry' | |||
# Some information specific to po-debconf are available at | |||
# /usr/share/doc/po-debconf/README-trans | |||
# or http://www.debian.org/intl/l10n/po-debconf/README-trans# | |||
# Developers do not need to manually edit POT or PO files. | |||
# Eugeniy Meshcheryakov <eugen@univ.kiev.ua>, 2004. | |||
# | |||
msgid "" | |||
msgstr "" | |||
"Project-Id-Version: tasksel-templates_uk\n" | |||
"Report-Msgid-Bugs-To: \n" | |||
"POT-Creation-Date: 2004-06-06 19:41-0400\n" | |||
"PO-Revision-Date: 2004-06-15 22:27+0300\n" | |||
"Last-Translator: Eugeniy Meshcheryakov <eugen@univ.kiev.ua>\n" | |||
"Language-Team: Ukrainian\n" | |||
"MIME-Version: 1.0\n" | |||
"Content-Type: text/plain; charset=UTF-8\n" | |||
"Content-Transfer-Encoding: 8bit\n" | |||
"X-Generator: KBabel 1.3.1\n" | |||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" | |||
#. Type: multiselect | |||
#. Choices | |||
#: ../templates:3 | |||
msgid "${CHOICES}, manual package selection" | |||
msgstr "${CHOICES}, вибрати пакунки вручну" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:4 | |||
msgid "" | |||
"At the moment, only the core of Debian is installed. To tune the " | |||
"installation to your needs, you can choose to install one or more of the " | |||
"following predefined collections of software. Experienced users may prefer " | |||
"to select packages manually." | |||
msgstr "" | |||
"На даний момент, тільки встановлена тільки основна частина Debian. " | |||
"Для того, щоб підлаштувати інсталяцію під ваші потреби, ви можете вибрати встановлення одного або кількох наступних наборів програмного забезпечення. Досвідчені користувачі, можливо, нададуть перевагу ручному вибору пакунків." | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "Choose software to install:" | |||
msgstr "Виберіть програмне забезпечення для встановлення:" | |||
#. Type: multiselect | |||
#. Description | |||
#: ../templates:13 | |||
msgid "" | |||
"You can choose to install one or more of the following predefined " | |||
"collections of software." | |||
msgstr "Ви можете встановити один або декілька наступних наборів програмного забезпечення." | |||
#. Type: title | |||
#. Description | |||
#: ../templates:19 | |||
msgid "Debian software selection" | |||
msgstr "Вибір програмного забезпечення Debian" | |||
@@ -0,0 +1,4 @@ | |||
#!/bin/sh | |||
# Get tasksel's templates loaded up. | |||
. /usr/share/debconf/confmodule | |||
#DEBHELPER# |
@@ -50,6 +50,7 @@ binary-arch: build install | |||
dh_link | |||
dh_strip | |||
dh_compress | |||
dh_installdebconf | |||
dh_fixperms | |||
dh_installdeb | |||
dh_shlibdeps | |||
@@ -0,0 +1,19 @@ | |||
Template: tasksel/first | |||
Type: multiselect | |||
_Choices: ${CHOICES}, manual package selection | |||
_Description: Choose software to install: | |||
At the moment, only the core of Debian is installed. To tune the | |||
installation to your needs, you can choose to install one or more of the | |||
following predefined collections of software. Experienced users may prefer | |||
to select packages manually. | |||
Template: tasksel/tasks | |||
Type: multiselect | |||
Choices: ${CHOICES} | |||
_Description: Choose software to install: | |||
You can choose to install one or more of the following predefined | |||
collections of software. | |||
Template: tasksel/title | |||
Type: title | |||
_Description: Debian software selection |
@@ -1,61 +0,0 @@ | |||
/* $Id: macros.h,v 1.4 2001/11/22 17:53:48 tausq Rel $ */ | |||
#ifndef _MACROS_H | |||
#define _MACROS_H | |||
#include <stdio.h> | |||
#include <errno.h> | |||
#ifdef DEBUG | |||
#define DPRINTF(fmt, arg...) \ | |||
do { \ | |||
fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \ | |||
fprintf(stderr, fmt, ##arg); \ | |||
fprintf(stderr, "\n"); \ | |||
} while (0); | |||
#define ASSERT(cond) \ | |||
if (!(cond)) { \ | |||
if (ui_running()) ui_shutdown(); \ | |||
fprintf(stderr, "ASSERTION FAILED at %s:%d! (%s)\n", __FILE__, __LINE__, #cond); \ | |||
exit(255); \ | |||
} | |||
#define VERIFY(cond) ASSERT(cond) | |||
#define ABORT abort() | |||
#define STRDUP(s) safe_strdup(s) | |||
#define MALLOC(sz) safe_malloc(sz) | |||
#define REALLOC(x,sz) safe_realloc(x,sz) | |||
#define FREE(p) safe_free((void **)&p); | |||
#else | |||
#define DPRINTF(fmt, arg...) | |||
#define ASSERT(cond) | |||
#define VERIFY(cond) | |||
#define ABORT exit(255) | |||
#define STRDUP(s) (s ? strdup(s) : NULL) | |||
#define MALLOC(sz) malloc(sz) | |||
#define REALLOC(x,sz) realloc(x,sz) | |||
#define FREE(p) if (p) free(p) | |||
#endif | |||
/* Do you see a perl influence? :-) */ | |||
#define DIE(fmt, arg...) \ | |||
do { \ | |||
if (ui_running()) ui_shutdown(); \ | |||
fprintf(stderr, _("Fatal error encountered at %s:%d\n\t"), __FILE__, __LINE__); \ | |||
fprintf(stderr, fmt, ##arg); \ | |||
fprintf(stderr, "\n"); \ | |||
ABORT; \ | |||
} while (0); | |||
#define PERROR(ctx) \ | |||
do { \ | |||
if (ui_running()) ui_shutdown(); \ | |||
fprintf(stderr, _("I/O error at %s:%d\n\t"), __FILE__, __LINE__); \ | |||
fprintf(stderr, "%s: %s\n", ctx, strerror(errno)); \ | |||
ABORT; \ | |||
} while (0); | |||
#define NEW(S) (S *)MALLOC(sizeof(S)) | |||
#define _(s) gettext(s) | |||
#define gettext_noop(s) (s) | |||
#define N_(s) gettext_noop (s) | |||
#endif |
@@ -94,7 +94,8 @@ sub processfile { | |||
} | |||
} | |||
foreach (qw{task section relevance description key}) { | |||
foreach (qw{task section relevance description key}, | |||
grep(/^test-(.*)/, keys %fields)) { | |||
print OUT ucfirst($_).": ".$fields{$_}."\n" if length $fields{$_}; | |||
} | |||
print OUT "\n"; | |||
@@ -5,8 +5,8 @@ MOS:=$(addsuffix .mo, $(LANGS)) | |||
all: $(POTFILE) $(MOS) | |||
touch build_stamp | |||
$(POTFILE): ../*.[ch] | |||
$(XGETTEXT) -o $(POTFILE)-update ../*.[ch] | |||
$(POTFILE): ../tasksel.pl | |||
$(XGETTEXT) -o $(POTFILE)-update ../tasksel.pl | |||
if test -f $(POTFILE); then \ | |||
if diff -I '^"POT-Creation-Date:' -I '^Report-Msgid-Bugs-To:' $(POTFILE) $(POTFILE)-update >/dev/null 2>&1; then \ | |||
rm -f $(POTFILE)-update; \ | |||
@@ -9,215 +9,192 @@ msgid "" | |||
msgstr "" | |||
"Project-Id-Version: tasksel 1.44\n" | |||
"Report-Msgid-Bugs-To: \n" | |||
"POT-Creation-Date: 2004-01-28 08:04+0100\n" | |||
"POT-Creation-Date: 2004-06-10 09:02+0200\n" | |||
"PO-Revision-Date: 2004-02-15 14:32+0200\n" | |||
"Last-Translator: Ognyan Kulev <ogi@fmi.uni-sofia.bg>\n" | |||
"Language-Team: Bulgarian <dict@linux.zonebg.com>\n" | |||
"MIME-Version: 1.0\n" | |||
"Content-Type: text/plain; charset=UTF-8\n" | |||
"Content-Transfer-Encoding: 8bit" | |||
"Content-Transfer-Encoding: 8bit\n" | |||
#: ../data.c:307 ../data.c:321 | |||
msgid "Cannot allocate memory for enumeration buffer" | |||
msgstr "Няма достатъчно памет за изброяващия буфер" | |||
#: ../macros.h:42 | |||
#, c-format | |||
#: ../tasksel.pl:188 | |||
msgid "" | |||
"Fatal error encountered at %s:%d\n" | |||
"\t" | |||
"Usage:\n" | |||
"tasksel install <task>\n" | |||
"tasksel [options]; where options is any combination of:\n" | |||
"\t-t -- test mode; don't really do anything\n" | |||
"\t-r -- install all required-priority packages\n" | |||
"\t-i -- install all important-priority packages\n" | |||
"\t-s -- install all standard-priority packages\n" | |||
"\t-n -- don't show UI; use with -r or -i usually\n" | |||
"\t-a -- show all tasks, even those with no packages in them\n" | |||
msgstr "" | |||
"Фатална грешка в %s:%d\n\t" | |||
#: ../macros.h:51 | |||
#, c-format | |||
msgid "" | |||
"I/O error at %s:%d\n" | |||
"\t" | |||
#: ../tasksel.pl:250 | |||
msgid "ignoring other selected packages in favour of manual package selection" | |||
msgstr "" | |||
"Входно-изходна грешка в %s:%d\n\t" | |||
#: ../slangui.c:18 ../slangui.c:19 | |||
msgid "(no description)" | |||
msgstr "(без описание)" | |||
#: ../slangui.c:75 | |||
msgid "End-user" | |||
msgstr "Краен потребител" | |||
#: ../slangui.c:76 | |||
msgid "Hardware Support" | |||
msgstr "Хардуерна поддръжка" | |||
#: ../slangui.c:77 | |||
msgid "Servers" | |||
msgstr "Сървъри" | |||
#: ../slangui.c:78 | |||
msgid "Development" | |||
msgstr "Разработка" | |||
#: ../slangui.c:79 | |||
msgid "Localization" | |||
msgstr "Локализация" | |||
#: ../slangui.c:80 | |||
msgid "Miscellaneous" | |||
msgstr "Други" | |||
#: ../slangui.c:219 | |||
msgid "Unable to initialize the terminal" | |||
msgstr "Терминалът не може да се инициализира" | |||
#: ../slangui.c:221 | |||
msgid "Unable to initialize screen output" | |||
msgstr "Изходът на екрана не може да се инициализира" | |||
#: ../slangui.c:222 | |||
msgid "Unable to initialize keyboard interface" | |||
msgstr "Клавиатурният интерфейс не може да се инициализира" | |||
#: ../slangui.c:239 | |||
#, c-format | |||
msgid "Debian Task Installer v%s - (c) 1999-2004 SPI and others" | |||
msgstr "Дебиански Инсталатор на Задачи v%s - (c)·1999-2004·SPI·и други" | |||
#: ../slangui.c:393 | |||
msgid "^Finish" | |||
msgstr "^Край" | |||
#: ../slangui.c:401 ../slangui.c:402 | |||
msgid "Task ^Info" | |||
msgstr "^Информация" | |||
#: ../slangui.c:406 ../slangui.c:407 | |||
msgid "^Help" | |||
msgstr "Помощ (^H)" | |||
#: ../slangui.c:441 | |||
msgid "Select tasks to install" | |||
msgstr "Изберете задачи за инсталиране" | |||
#: ../slangui.c:576 | |||
msgid "Ok" | |||
msgstr "Добре" | |||
#: ../slangui.c:685 ../slangui.c:699 ../slangui.c:810 | |||
#, c-format | |||
msgid "Index out of bounds: %d >= %d" | |||
msgstr "Индексът е извън границите: %d >= %d" | |||
#: ../slangui.c:776 | |||
msgid "Help" | |||
msgstr "Помощ" | |||
#: ../slangui.c:777 | |||
msgid "" | |||
"Tasks allow you to quickly install a selection of packages that performs a " | |||
"given task.\n" | |||
"\n" | |||
"The main chooser list shows a list of tasks that you can choose to install. " | |||
"The arrow keys moves the cursor. Pressing ENTER or the SPACEBAR toggles the " | |||
"selection of the task at the cursor. You can also press A to select all " | |||
"tasks, or N to deselect all tasks. Pressing Q will exit this program and " | |||
"begin installation of your selected tasks.\n" | |||
"\n" | |||
"Thank you for using Debian.\n" | |||
"\n" | |||
"Press enter to return to the task selection screen" | |||
msgstr "" | |||
"Задачите позволяват бързо инсталиране на набор от пакети, които изпълняват определена задача." | |||
"" | |||
"Главният списък показва задачи, които може да изберете за инсталиране. Клавишите-стрелки придвижват показалеца. Натискането на ENTER или на ИНТЕРВАЛ превключват избора на задачата под показалеца. Можете също да натиснете A, за да изберете всички задачи, или N за отказ от всички задачи. Натискането на Q предизвиква излизане от програмата и започване на инсталицията на избраните задачи." | |||
"" | |||
"Благодарим Ви, че избрахте Debian." | |||
"" | |||
"Натиснете ENTER, за да се върнете към екрана за избор на задачи" | |||
#: ../slangui.c:818 | |||
#, c-format | |||
msgid "" | |||
"Description:\n" | |||
"%s\n" | |||
"\n" | |||
"Included packages:\n" | |||
msgstr "" | |||
"Описание:\n" | |||
"%s\n" | |||
"\n" | |||
"Включени пакети:\n" | |||
#: ../slangui.c:826 | |||
msgid "(no description available)" | |||
msgstr "(липсва описание)" | |||
#: ../tasksel.c:33 | |||
msgid "Unknown signal seen" | |||
msgstr "Прихванат е неизвестен сигнал" | |||
#: ../tasksel.c:39 | |||
#, c-format | |||
msgid "tasksel install <task>\n" | |||
msgstr "tasksel install <задача>\n" | |||
#: ../tasksel.c:40 | |||
#, c-format | |||
msgid "tasksel [options]; where options is any combination of:\n" | |||
msgstr "tasksel [опции]; където опциите са всяка комбинация от:\n" | |||
#: ../tasksel.c:41 | |||
msgid "-t -- test mode; don't actually run apt-get on exit" | |||
msgstr "-t -- тестов режим; не изпълнява apt-get на излизане" | |||
#: ../tasksel.c:42 | |||
msgid "" | |||
"-q -- queue installs; do not install packages with apt-get;\n" | |||
"\t\tjust queue them in dpkg" | |||
#: ../tasksel.pl:254 ../tasksel.pl:266 | |||
msgid "aptitude failed" | |||
msgstr "" | |||
"-q -- забавено инсталиране; пакетите не се инсталират с apt-get;\n" | |||
"\t\tпросто се слагат в опашката за инсталиране на dpkg" | |||
#: ../tasksel.c:43 | |||
msgid "-r -- install all required-priority packages" | |||
msgstr "-r -- инсталиране на всички пакети с приоритет \"задължителен\"" | |||
#: ../tasksel.c:44 | |||
msgid "-i -- install all important-priority packages" | |||
msgstr "-i -- инсталиране на всички пакети с приоритет \"важен\"" | |||
#: ../tasksel.c:45 | |||
msgid "-s -- install all standard-priority packages" | |||
msgstr "-s -- инсталиране на всички пакети с приоритет \"стандартен\"" | |||
#: ../tasksel.c:46 | |||
msgid "-n -- don't show UI; use with -r or -i usually" | |||
msgstr "-n -- не се показва потребителски интерфейс; обикновено се използва с -r или -i" | |||
#: ../tasksel.c:47 | |||
msgid "-a -- show all tasks, even those with no packages in them" | |||
msgstr "-a -- показване на всички задачи, дори тези, които не съдържат пакети" | |||
#: ../tasksel.c:88 ../tasksel.c:123 | |||
#, c-format | |||
msgid "No packages selected\n" | |||
msgstr "Не са избрани пакети\n" | |||
#: ../tasksel.c:197 | |||
#, c-format | |||
msgid "No tasks found on this system.\n" | |||
msgstr "Не са намерени задачи в системата.\n" | |||
#: ../util.c:21 | |||
msgid "Cannot allocate memory for strdup" | |||
msgstr "Няма памет за strdup" | |||
#: ../util.c:39 | |||
#, c-format | |||
msgid "Cannot allocate %d bytes of memory" | |||
msgstr "Няма памет за %d байта" | |||
#~ msgid "Cannot allocate memory for enumeration buffer" | |||
#~ msgstr "Няма достатъчно памет за изброяващия буфер" | |||
#~ msgid "" | |||
#~ "Fatal error encountered at %s:%d\n" | |||
#~ "\t" | |||
#~ msgstr "" | |||
#~ "Фатална грешка в %s:%d\n" | |||
#~ "\t" | |||
#~ msgid "" | |||
#~ "I/O error at %s:%d\n" | |||
#~ "\t" | |||
#~ msgstr "" | |||
#~ "Входно-изходна грешка в %s:%d\n" | |||
#~ "\t" | |||
#~ msgid "(no description)" | |||
#~ msgstr "(без описание)" | |||
#~ msgid "End-user" | |||
#~ msgstr "Краен потребител" | |||
#~ msgid "Hardware Support" | |||
#~ msgstr "Хардуерна поддръжка" | |||
#~ msgid "Servers" | |||
#~ msgstr "Сървъри" | |||
#~ msgid "Development" | |||
#~ msgstr "Разработка" | |||
#~ msgid "Localization" | |||
#~ msgstr "Локализация" | |||
#~ msgid "Miscellaneous" | |||
#~ msgstr "Други" | |||
#~ msgid "Unable to initialize the terminal" | |||
#~ msgstr "Терминалът не може да се инициализира" | |||
#~ msgid "Unable to initialize screen output" | |||
#~ msgstr "Изходът на екрана не може да се инициализира" | |||
#~ msgid "Unable to initialize keyboard interface" | |||
#~ msgstr "Клавиатурният интерфейс не може да се инициализира" | |||
#~ msgid "Debian Task Installer v%s - (c) 1999-2004 SPI and others" | |||
#~ msgstr "Дебиански Инсталатор на Задачи v%s - (c)·1999-2004·SPI·и други" | |||
#~ msgid "^Finish" | |||
#~ msgstr "^Край" | |||
#~ msgid "Task ^Info" | |||
#~ msgstr "^Информация" | |||
#~ msgid "^Help" | |||
#~ msgstr "Помощ (^H)" | |||
#~ msgid "Select tasks to install" | |||
#~ msgstr "Изберете задачи за инсталиране" | |||
#~ msgid "Ok" | |||
#~ msgstr "Добре" | |||
#~ msgid "Index out of bounds: %d >= %d" | |||
#~ msgstr "Индексът е извън границите: %d >= %d" | |||
#~ msgid "Help" | |||
#~ msgstr "Помощ" | |||
#~ msgid "" | |||
#~ "Tasks allow you to quickly install a selection of packages that performs " | |||
#~ "a given task.\n" | |||
#~ "\n" | |||
#~ "The main chooser list shows a list of tasks that you can choose to " | |||
#~ "install. The arrow keys moves the cursor. Pressing ENTER or the SPACEBAR " | |||
#~ "toggles the selection of the task at the cursor. You can also press A to " | |||
#~ "select all tasks, or N to deselect all tasks. Pressing Q will exit this " | |||
#~ "program and begin installation of your selected tasks.\n" | |||
#~ "\n" | |||
#~ "Thank you for using Debian.\n" | |||
#~ "\n" | |||
#~ "Press enter to return to the task selection screen" | |||
#~ msgstr "" | |||
#~ "Задачите позволяват бързо инсталиране на набор от пакети, които " | |||
#~ "изпълняват определена задача.Главният списък показва задачи, които може " | |||
#~ "да изберете за инсталиране. Клавишите-стрелки придвижват показалеца. " | |||
#~ "Натискането на ENTER или на ИНТЕРВАЛ превключват избора на задачата под " | |||
#~ "показалеца. Можете също да натиснете A, за да изберете всички задачи, или " | |||
#~ "N за отказ от всички задачи. Натискането на Q предизвиква излизане от " | |||
#~ "програмата и започване на инсталицията на избраните задачи.Благодарим Ви, " | |||
#~ "че избрахте Debian.Натиснете ENTER, за да се върнете към екрана за избор " | |||
#~ "на задачи" | |||
#~ msgid "" | |||
#~ "Description:\n" | |||
#~ "%s\n" | |||
#~ "\n" | |||
#~ "Included packages:\n" | |||
#~ msgstr "" | |||
#~ "Описание:\n" | |||
#~ "%s\n" | |||
#~ "\n" | |||
#~ "Включени пакети:\n" | |||
#~ msgid "(no description available)" | |||
#~ msgstr "(липсва описание)" | |||
#~ msgid "Unknown signal seen" | |||
#~ msgstr "Прихванат е неизвестен сигнал" | |||
#~ msgid "tasksel install <task>\n" | |||
#~ msgstr "tasksel install <задача>\n" | |||
#: ../util.c:48 | |||
#, c-format | |||
msgid "Cannot reallocate %d bytes of memory" | |||
msgstr "Няма памет за презаделяне на %d байта" | |||
#~ msgid "tasksel [options]; where options is any combination of:\n" | |||
#~ msgstr "tasksel [опции]; където опциите са всяка комбинация от:\n" | |||
#~ msgid "-t -- test mode; don't actually run apt-get on exit" | |||
#~ msgstr "-t -- тестов режим; не изпълнява apt-get на излизане" | |||
#~ msgid "" | |||
#~ "-q -- queue installs; do not install packages with apt-get;\n" | |||
#~ "\t\tjust queue them in dpkg" | |||
#~ msgstr "" | |||
#~ "-q -- забавено инсталиране; пакетите не се инсталират с apt-get;\n" | |||
#~ "\t\tпросто се слагат в опашката за инсталиране на dpkg" | |||
#~ msgid "-r -- install all required-priority packages" | |||
#~ msgstr "-r -- инсталиране на всички пакети с приоритет \"задължителен\"" | |||
#~ msgid "-i -- install all important-priority packages" | |||
#~ msgstr "-i -- инсталиране на всички пакети с приоритет \"важен\"" | |||
#~ msgid "-s -- install all standard-priority packages" | |||
#~ msgstr "-s -- инсталиране на всички пакети с приоритет \"стандартен\"" | |||
#~ msgid "-n -- don't show UI; use with -r or -i usually" | |||
#~ msgstr "" | |||
#~ "-n -- не се показва потребителски интерфейс; обикновено се използва с -r " | |||
#~ "или -i" | |||
#~ msgid "-a -- show all tasks, even those with no packages in them" | |||
#~ msgstr "" | |||
#~ "-a -- показване на всички задачи, дори тези, които не съдържат пакети" | |||
#~ msgid "No packages selected\n" | |||
#~ msgstr "Не са избрани пакети\n" | |||
#~ msgid "No tasks found on this system.\n" | |||
#~ msgstr "Не са намерени задачи в системата.\n" | |||
#~ msgid "Cannot allocate memory for strdup" | |||
#~ msgstr "Няма памет за strdup" | |||
#~ msgid "Cannot allocate %d bytes of memory" | |||
#~ msgstr "Няма памет за %d байта" | |||
#~ msgid "Cannot reallocate %d bytes of memory" | |||
#~ msgstr "Няма памет за презаделяне на %d байта" |
@@ -6,7 +6,8 @@ | |||
msgid "" | |||
msgstr "" | |||