/*
 * Copyright 2005-2006 Jacek Caban
 * Copyright 2010 Đorđe Vasiljević
 *
 * 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 "resource.h"

#pragma code_page(65001)

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC

STRINGTABLE
{
    IDS_STATUS_DONE            "Завршено"
    IDS_STATUS_DOWNLOADINGFROM "Преузимање из %s..."
}

STRINGTABLE
{
    IDS_HTMLDISABLED    "HTML исцртавање је онемогућено."
    IDS_HTMLDOCUMENT    "HTML документ"
    IDS_DOWNLOADING     "Преузимање..."
    IDS_INSTALLING      "Инсталирање..."
}

ID_DWL_DIALOG DIALOG  0, 0, 260, 95
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Wine Gecko инсталациони програм"
FONT 8, "MS Shell Dlg"
{
    LTEXT "Wine није успео да пронађе Gecko пакет који је неопходан за исправно функционисање HTML " \
          "програма. Wine је у могућности да аутоматски преузме и инсталира програм.\n\n" \
          "Напомена: препоручујемо Вам да користите расподељене пакете. Погледајте http://wiki.winehq.org/Gecko за више информација.",
          ID_DWL_STATUS, 10, 10, 240, 50, SS_LEFT
    CONTROL "Напредак", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12
    DEFPUSHBUTTON "&Инсталирај", ID_DWL_INSTALL, 200, 70, 50, 15, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "&Откажи", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP
}

IDD_HYPERLINK DIALOG 0, 0, 250, 65
STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Хипервеза"
FONT 8, "MS Shell Dlg"
{
    GROUPBOX "Подаци о хипервези", -1, 5, 5, 190, 55
    LTEXT "&Врста:", -1, 10, 22, 20, 10
    COMBOBOX IDC_TYPE, 35, 20, 45, 100, WS_TABSTOP | WS_GROUP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS
    LTEXT "&Адреса:", -1, 10, 42, 20, 10
    EDITTEXT IDC_URL, 35, 40, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
    PUSHBUTTON "У реду", IDOK, 200, 10, 45, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
    PUSHBUTTON "Откажи", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP
}

ID_PROMPT_DIALOG DIALOG 0, 0, 200, 90
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 8, "MS Shell Dlg"
{
    LTEXT "", ID_PROMPT_PROMPT, 10, 10, 180, 30
    EDITTEXT ID_PROMPT_EDIT, 10, 45, 180, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
    PUSHBUTTON "У реду", IDOK, 40, 65, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
    PUSHBUTTON "Откажи", IDCANCEL, 115, 65, 45, 15, WS_GROUP | WS_TABSTOP
}

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN

STRINGTABLE
{
    IDS_STATUS_DONE            "Završeno"
    IDS_STATUS_DOWNLOADINGFROM "Preuzimanje iz %s..."
}

STRINGTABLE
{
    IDS_HTMLDISABLED    "HTML iscrtavanje je onemogućeno."
    IDS_HTMLDOCUMENT    "HTML dokument"
    IDS_DOWNLOADING     "Preuzimanje..."
    IDS_INSTALLING      "Instaliranje..."
}

ID_DWL_DIALOG DIALOG  0, 0, 260, 95
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Wine Gecko instalacioni program"
FONT 8, "MS Shell Dlg"
{
    LTEXT "Wine nije uspeo da pronađe Gecko paket koji je neophodan za ispravno funkcionisanje HTML " \
          "programa. Wine je u mogućnosti da automatski preuzme i instalira program.\n\n" \
          "Napomena: preporučujemo Vam da koristite raspodeljene pakete. Pogledajte http://wiki.winehq.org/Gecko za više informacija.",
          ID_DWL_STATUS, 10, 10, 240, 50, SS_LEFT
    CONTROL "Napredak", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12
    DEFPUSHBUTTON "&Instaliraj", ID_DWL_INSTALL, 200, 70, 50, 15, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "&Otkaži", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP
}

IDD_HYPERLINK DIALOG 0, 0, 250, 65
STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Hiperveza"
FONT 8, "MS Shell Dlg"
{
    GROUPBOX "Podaci o hipervezi", -1, 5, 5, 190, 55
    LTEXT "&Vrsta:", -1, 10, 22, 20, 10
    COMBOBOX IDC_TYPE, 35, 20, 45, 100, WS_TABSTOP | WS_GROUP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS
    LTEXT "&Adresa:", -1, 10, 42, 20, 10
    EDITTEXT IDC_URL, 35, 40, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
    PUSHBUTTON "U redu", IDOK, 200, 10, 45, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
    PUSHBUTTON "Otkaži", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP
}

ID_PROMPT_DIALOG DIALOG 0, 0, 200, 90
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 8, "MS Shell Dlg"
{
    LTEXT "", ID_PROMPT_PROMPT, 10, 10, 180, 30
    EDITTEXT ID_PROMPT_EDIT, 10, 45, 180, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
    PUSHBUTTON "U redu", IDOK, 40, 65, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
    PUSHBUTTON "Otkaži", IDCANCEL, 115, 65, 45, 15, WS_GROUP | WS_TABSTOP
}
