/*
 * Copyright 2002 Michael Günnewig
 * 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 "avifile_private.h"

#pragma code_page(65001)

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC

IDD_SAVEOPTIONS DIALOG  43, 37, 226, 82
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Поставке сажимања"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "&Изабери ток:",-1,2,5,154,10
    COMBOBOX        IDC_STREAM,2,18,154,61,CBS_DROPDOWNLIST | WS_VSCROLL |
                    WS_TABSTOP
    PUSHBUTTON      "&Могућности...",IDC_OPTIONS,170,17,50,14
    AUTOCHECKBOX    "&Преплићи сваких",IDC_INTERLEAVE,3,42,85,11,WS_TABSTOP
    EDITTEXT        IDC_INTERLEAVEEVERY,91,41,32,12,ES_AUTOHSCROLL
    LTEXT           "кадрова",-1,129,43,36,9
    LTEXT           "Текући формат:",-1,3,56,73,9
    LTEXT           "Простор за изнајмљивање",IDC_FORMATTEXT,75,56,90,26
    DEFPUSHBUTTON   "У реду",IDOK,170,42,50,14
    PUSHBUTTON      "Откажи",IDCANCEL,170,61,50,14
END

STRINGTABLE
{
  IDS_WAVESTREAMFORMAT	"Таласни облик: %s"
  IDS_WAVEFILETYPE	"Таласни облик"
  IDS_ALLMULTIMEDIA	"Све мултимедијалне датотеке"
  IDS_ALLFILES		"Све датотеке (*.*)@*.*"
  IDS_VIDEO		"видео запис"
  IDS_AUDIO		"аудио запис"
  IDS_AVISTREAMFORMAT	"%s %s #%d"
  IDS_AVIFILETYPE	"Wine AVI-default-filehandler"
  IDS_UNCOMPRESSED      "несажето"
}

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN

IDD_SAVEOPTIONS DIALOG  43, 37, 226, 82
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Postavke sažimanja"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "&Izaberi tok:",-1,2,5,154,10
    COMBOBOX        IDC_STREAM,2,18,154,61,CBS_DROPDOWNLIST | WS_VSCROLL |
                    WS_TABSTOP
    PUSHBUTTON      "&Mogućnosti...",IDC_OPTIONS,170,17,50,14
    AUTOCHECKBOX    "&Preplići svakih",IDC_INTERLEAVE,3,42,85,11,WS_TABSTOP
    EDITTEXT        IDC_INTERLEAVEEVERY,91,41,32,12,ES_AUTOHSCROLL
    LTEXT           "kadrova",-1,129,43,36,9
    LTEXT           "Tekući format:",-1,3,56,73,9
    LTEXT           "Prostor za iznajmljivanje",IDC_FORMATTEXT,75,56,90,26
    DEFPUSHBUTTON   "U redu",IDOK,170,42,50,14
    PUSHBUTTON      "Otkaži",IDCANCEL,170,61,50,14
END

STRINGTABLE
{
  IDS_WAVESTREAMFORMAT	"Talasni oblik: %s"
  IDS_WAVEFILETYPE	"Talasni oblik"
  IDS_ALLMULTIMEDIA	"Sve multimedijalne datoteke"
  IDS_ALLFILES		"Sve datoteke (*.*)@*.*"
  IDS_VIDEO		"video zapis"
  IDS_AUDIO		"audio zapis"
  IDS_AVISTREAMFORMAT	"%s %s #%d"
  IDS_AVIFILETYPE	"Wine AVI-default-filehandler"
  IDS_UNCOMPRESSED      "nesažeto"
}
