/*
 * Norwegian Bokmål resources for MSI
 *
 * Copyright 2005-2007 Alexander N. Sørnes <alex@thehandofagony.com>
 * Copyright 2010 Trygve Vea <trygve.vea@gmail.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 "windef.h"

#pragma code_page(65001)

LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL

STRINGTABLE DISCARDABLE
{
	4 "Klarte ikke å åpne den oppgitte installasjonspakken.  Kontroller filbanen og prøv igjen."
	5 "fant ikke stien '%s'."
	9 "sett inn disk '%s'"
	10 "Windows Installer %s\n\n" \
	"Bruk:\n" \
	"msiexec kommando {obligatorisk parameter} [valgfritt parameter]\n\n" \
	"Installere et produkt:\n" \
	"\t/i {pakke|produktkode} [egenskap]\n" \
	"\t/package {pakke|produktkode} [egenskap]\n" \
	"\t/a pakke [egenskap]\n" \
	"Reparere en installasjon:\n" \
	"\t/f[p|o|e|d|c|a|u|m|s|v] {pakke|produktkode}\n" \
	"Avinstallere et produkt:\n" \
	"\t/uninstall {pakke|produktkode} [egenskap]\n" \
	"\t/x {pakke|produktkode} [egenskap]\n" \
	"Annonsere et produkt:\n" \
	"\t/j[u|m] pakke [/t transformere] [/g språk-ID]\n" \
	"Installer patch:\n" \
	"\t/p patchpakke [egenskap]\n" \
	"\t/p patchpakke /a pakke [egenskap]\n" \
	"Logg og brukergrensesnitt-modifikatorer for overnevnte kommandoer:\n" \
	"\t/l[*][i|w|e|a|r|u|c|m|o|p|v|][+|!] loggfil\n" \
	"\t/q{|n|b|r|f|n+|b+|b-}\n" \
	"Registrer MSI-tjeneste:\n" \
	"\t/y\n" \
	"Avregistrer MSI-tjeneste:\n" \
	"\t/z\n" \
	"Vis denne hjelpeteksten:\n" \
	"\t/help\n" \
	"\t/?\n"
	11 "Oppgi katalogen som inneholder '%s'."
	12 "Egenskapens installasjonskilde mangler."
	13 "Egenskapens nettverksstasjon mangler."
	14 "Egenskap fra::"
	15 "Velg katalogen som inneholder '%s'."
}
