/*
 * Copyright 2003 Ulrich Czekalla for CodeWeavers
 *
 * 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_RESULTOBJDESC	"Insert a new %s object into your document"
  IDS_RESULTFILEOBJDESC	"Insert the contents of the file as an object into your document so that you may activate it using the program which created it."
  IDS_BROWSE            "Browse"
  IDS_NOTOLEMOD         "File does not appear to be a valid OLE module. Unable to register OLE control."
  IDS_NOTOLEMODCAPTION  "Add Control"
}

STRINGTABLE
{
    IDS_PS_PASTE_DATA                     "Inserts the contents of the clipboard into your document as %s."
    IDS_PS_PASTE_OBJECT                   "Inserts the contents of the clipboard into your document so that you can activate it using %s."
    IDS_PS_PASTE_OBJECT_AS_ICON           "Inserts the contents of the clipboard into your document so that you can activate it using %s.  It will be displayed as an icon."
    IDS_PS_PASTE_LINK_DATA                "Inserts the contents of the clipboard into your document as %s.  The data is linked to the source file so that changes to the file will be reflected in your document."
    IDS_PS_PASTE_LINK_OBJECT              "Inserts a picture of the clipboard contents into your document.  The picture is linked to the source file so that changes to the file will be reflected in your document."
    IDS_PS_PASTE_LINK_OBJECT_AS_ICON      "Inserts a shortcut which points to the location of the clipboard contents.  The shortcut is linked to the source file so that changes to the file will be reflected in your document."
    IDS_PS_NON_OLE                        "Inserts the contents of the clipboard into your document."
    IDS_PS_UNKNOWN_TYPE                   "Unknown Type"
    IDS_PS_UNKNOWN_SRC                    "Unknown Source"
    IDS_PS_UNKNOWN_APP                    "the program which created it"
}
