/*
 * Start (Russian resources)
 *
 * Copyright 2003 Igor Stepin
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "resources.h"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE
{
STRING_USAGE,                                   "Запускает программы или открывает документы приложением,\n\
связанным с файлами с данным расширением.\n\n\
Использование:\n\
start [options] имя_файла_программы [...]\n\
start [options] имя_файла_документа\n\
\n\
Опции:\n\
/M[inimized] Запустить программу свёрнутой.\n\
/MAX[imized] Запустить программу на весь экран.\n\
/R[estored]  Запустить программу с обычным размером окна.\n\
/W[ait]      Ожидать завершения запущенной программы и выйти с кодом её выхода.\n\
/Unix        Воспринимать путь к документу записанным в Unix-формате.\n\
/ProgIDOpen  Открыть документ, используя указанный progID.\n\
/L           Показать лицензию конечного пользователя.\n\
\n\
start.exe версия 0.2 Copyright (C) 2003, Dan Kegel\n\
Start идет БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.\n\
Это свободная программа, и вы можете её распространять на определённых\n\
условиях. Подробности будут сообщены при запуске с параметром /L.\n\
"

STRING_LICENSE, "start.exe версия 0.2 Copyright (C) 2003, Dan Kegel\n\
Это программа распространяется по лицензии GNU Lesser Public License\n\
и является свободным программным продуктом.\n\
\n\
This program is free software; you can redistribute it and/or\n\
modify it under the terms of the GNU Lesser Public License\n\
as published by the Free Software Foundation; either version 2.1\n\
of the License, or (at your option) any later version.\n\
\n\
This program is distributed in the hope that it will be useful,\n\
but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\
GNU Lesser Public License for more details.\n\
\n\
You should have received a copy of the GNU Lesser Public License\n\
along with this program; if not, write to the Free Software\n\
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n\
\n\
See the COPYING.LIB file for license information.\n\
"

STRING_EXECFAIL "Приложение не может быть запущено или нет ассоциированных с типом данного документа приложений.\nВызов ShellExecuteEx провалился."

STRING_UNIXFAIL "Невозможно перевести имя программы UNIX в имя DOS."
}
