/*
 * Copyright 2003, 2008 Rok Mandeljc
 *
 * 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_SLOVENIAN, SUBLANG_DEFAULT

IDD_SAVEOPTIONS DIALOG FIXED IMPURE  43, 37, 226, 82
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Možnosti stiskanja"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "&Izbran tok:",-1,2,5,154,10
    COMBOBOX        IDC_STREAM,2,18,154,61,CBS_DROPDOWNLIST | WS_VSCROLL |
                    WS_TABSTOP
    PUSHBUTTON      "&Možnosti ...",IDC_OPTIONS,170,17,50,14
    AUTOCHECKBOX    "&Prepletanje vsake",IDC_INTERLEAVE,3,42,85,11,WS_TABSTOP
    EDITTEXT        IDC_INTERLEAVEEVERY,91,41,32,12,ES_AUTOHSCROLL
    LTEXT           "slike",-1,129,43,36,9
    LTEXT           "Trenutna oblika zapisa:",-1,3,56,73,9
    LTEXT           "This space for rent",IDC_FORMATTEXT,75,56,90,26
    DEFPUSHBUTTON   "V redu",IDOK,170,42,50,14
    PUSHBUTTON      "Prekliči",IDCANCEL,170,61,50,14
END

STRINGTABLE DISCARDABLE
{
  IDS_WAVESTREAMFORMAT	"Waveform: %s"
  IDS_WAVEFILETYPE	"Waveform"
  IDS_ALLMULTIMEDIA	"Vse večpredstavnostne datoteke"
  IDS_ALLFILES		"Vse datoteke (*.*)@*.*"
  IDS_VIDEO		"video"
  IDS_AUDIO		"avdio"
  IDS_AVISTREAMFORMAT	"%s %s #%d"
  IDS_AVIFILETYPE	"Wine privzeti-upravljalec-AVI-datotek"
  IDS_UNCOMPRESSED      "nestisnjeno"
}
