/*
 * Copyright 2010 Alexander N. Sørnes <alex@thehandofagony.com>
 *
 * 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"

#pragma code_page(65001)

LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL

STRINGTABLE DISCARDABLE
{
    IDS_TO_PRIMITIVE        "Klarte ikke konvertere objekt til primitiv type"
    IDS_INVALID_CALL_ARG    "Ugyldig funksjonskall eller argument"
    IDS_CREATE_OBJ_ERROR    "Automatiseringstjeneren klarte ikke opprette objekt"
    IDS_NO_PROPERTY         "Objektet støtter ikke denne egenskapen eller metoden"
    IDS_ARG_NOT_OPT         "Argumentet er ikke valgfritt"
    IDS_SYNTAX_ERROR        "Syntaksfeil"
    IDS_SEMICOLON           "Forventet ';'"
    IDS_LBRACKET            "Forventet '('"
    IDS_RBRACKET            "Forventet ')'"
    IDS_UNTERMINATED_STR    "Uavsluttet strengkonstant"
    IDS_NOT_FUNC            "Forventet funksjon"
    IDS_NOT_DATE            "'[object]' er ikke et dataobjekt"
    IDS_NOT_NUM             "Forventet nummer"
    IDS_OBJECT_EXPECTED     "Forventet objekt"
    IDS_ILLEGAL_ASSIGN      "Ugyldig tilordning"
    IDS_UNDEFINED           "'|' er udefinert"
    IDS_NOT_BOOL            "Forventet boolsk verdi"
    IDS_JSCRIPT_EXPECTED    "Forventet JScript-objekt"
    IDS_REGEXP_SYNTAX_ERROR "Syntaksfeil i regulært uttrykk"
    IDS_URI_INVALID_CHAR    "URI'en som skulle kodes inneholder ugyldige tegn"
    IDS_INVALID_LENGTH      "Rekkens lengde må være et endelig, positivt tall"
    IDS_ARRAY_EXPECTED      "Forventet rekke-objekt"
}
