/*
 * Resources for Device Enumerator
 *
 * Copyright 2002 Robert Shearman
 *
 * 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
 */

#pragma code_page(65001)

#include "windef.h"
#include "winbase.h"
#include "winnls.h"

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

#define WINE_FILEDESCRIPTION_STR "Wine Device Enumerator Library"
#define WINE_FILENAME_STR "devenum.dll"
#define WINE_FILEVERSION 6,5,1,902
#define WINE_FILEVERSION_STR "6.5.1.902"
#define WINE_PRODUCTVERSION 6,5,1,902
#define WINE_PRODUCTVERSION_STR "6.5"

#include "wine/wine_common_ver.rc"

STRINGTABLE DISCARDABLE
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
{
	7  "Default DirectSound"
	8  "DirectSound: %s"
	9  "Default WaveOut Device"
	10 "Default MidiOut Device"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
{
	7  "DirectSound par défaut"
	8  "DirectSound : %s"
	9  "Périphérique WaveOut par défaut"
	10 "Périphérique MidiOut par défaut"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
{
	7  "Standard DirectSound"
	8  "DirectSound: %s"
	9  "Standard WaveOut - Gerät"
	10 "Standard MidiOut - Gerät"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
{
	7  "DirectSound di Default"
	8  "DirectSound: %s"
	9  "Dispositivo WaveOut di Default"
	10 "Dispositivo MidiOut di Default"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
{
	7  "DirectSound padrão"
	8  "DirectSound: %s"
	9  "Dispositivo padrão WaveOut"
	10 "Dispositivo padrão MidiOut"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
{
	7  "DirectSound por defecto"
	8  "DirectSound: %s"
	9  "Dispositivo WaveOut por defecto"
	10 "Dispositivo MidiOut por defecto"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
{
	7  "Dafaultní DirectSound"
	8  "DirectSound: %s"
	9  "Standardní zařízení WaveOut"
	10 "Standardní zařízení MidiOut"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
{
	7  "Standardowe DirectSound"
	8  "DirectSound: %s"
	9  "Standardowe urządzenie WaveOut"
	10 "Standardowe urządzenie Device"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL
{
7  "Standard DirectSound"
8  "DirectSound: %s"
9  "Standard enhet for lydavspilling"
10 "Standard enhet for MIDI-avspilling"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
{
	7  "Standaard DirectSound"
	8  "DirectSound: %s"
	9  "Standaardapparaat WaveOut"
	10 "Standaardapparaat MidiOut"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
{
	7  "DirectSound implicit"
	8  "DirectSound: %s"
	9  "Dispozitiv WaveOut implicit"
	10 "Dispozitiv MidiOut implicit"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
{
	7  "Стандартный DirectSound"
	8  "DirectSound: %s"
	9  "Звуковое устройство вывода по умолчанию"
	10 "Устройство вывода MIDI по умолчанию"

}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
{
	7  "Privzeta DirectSound naprava"
	8  "DirectSound: %s"
	9  "Privzeta WaveOut naprava"
	10 "Privzeta MidiOut naprava"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
{
	7  "기본 다이렉트 사운드"
	8  "다이렉트 사운드: %s"
	9  "기본 웨이브 출력 장치"
	10 "기본 미디출력 장치"
}

STRINGTABLE DISCARDABLE
LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL
{
	7  "Numatytasis DirectSound"
	8  "DirectSound: %s"
	9  "Numatytasis WaveOut įrenginys"
	10 "Numatytasis MidiOut įrenginys"
}
