/*
 * Copyright 2001 Dmitry Timoshkov
 *
 * 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"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
  IDS_WESTERN           "Western"
  IDS_CENTRAL_EUROPEAN  "Central European"
  IDS_CYRILLIC          "Cyrillic"
  IDS_GREEK             "Greek"
  IDS_TURKISH           "Turkish"
  IDS_HEBREW            "Hebrew"
  IDS_ARABIC            "Arabic"
  IDS_BALTIC            "Baltic"
  IDS_VIETNAMESE        "Vietnamese"
  IDS_THAI              "Thai"
  IDS_JAPANESE          "Japanese"
  IDS_CHINESE_GB2312    "CHINESE_GB2312"
  IDS_HANGUL            "Hangul"
  IDS_CHINESE_BIG5      "CHINESE_BIG5"
  IDS_HANGUL_JOHAB      "Hangul(Johab)"
  IDS_SYMBOL            "Symbol"
  IDS_OEM_DOS           "OEM/DOS"
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

#define WINE_FILEDESCRIPTION_STR "Wine core dll"
#define WINE_FILENAME_STR "gdi32.dll"
#define WINE_FILEVERSION_STR "1.0"

#include "wine/wine_common_ver.rc"
