# Icelandic translations for Git.
# Copyright (C) 2010 Ævar Arnfjörð Bjarmason <avarab@gmail.com>
# This file is distributed under the same license as the Git package.
# Ævar Arnfjörð Bjarmason <avarab@gmail.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
"POT-Creation-Date: 2010-09-20 14:44+0000\n"
"PO-Revision-Date: 2010-06-05 19:06 +0000\n"
"Last-Translator: Ævar Arnfjörð Bjarmason <avarab@gmail.com>\n"
"Language-Team: Git Mailing List <git@vger.kernel.org>\n"
"Language: is\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. TRANSLATORS: This is a test. You don't need to translate it.
#: t/t0200/test.c:5
msgid "See 'git help COMMAND' for more information on a specific command."
msgstr "Sjá 'git help SKIPUN' til að sjá hjálp fyrir tiltekna skipun."

#. TRANSLATORS: This is a test. You don't need to translate it.
#: t/t0200/test.c:10
msgid "TEST: A C test string"
msgstr "TILRAUN: C tilraunastrengur"

#. TRANSLATORS: This is a test. You don't need to translate it.
#: t/t0200/test.c:13
#, c-format
msgid "TEST: A C test string %s"
msgstr "TILRAUN: C tilraunastrengur %s"

#. TRANSLATORS: This is a test. You don't need to translate it.
#: t/t0200/test.c:16
#, c-format
msgid "TEST: Hello World!"
msgstr "TILRAUN: Halló Heimur!"

#. TRANSLATORS: This is a test. You don't need to translate it.
#: t/t0200/test.c:19
#, c-format
msgid "TEST: Old English Runes"
msgstr "TILRAUN: ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛏ ᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ ᚹᛁᚦ ᚦᚪ ᚹᛖᛥᚫ"

#. TRANSLATORS: This is a test. You don't need to translate it.
#: t/t0200/test.c:22
#, c-format
msgid "TEST: ‘single’ and “double” quotes"
msgstr "TILRAUN: ‚einfaldar‘ og „tvöfaldar“ gæsalappir"

#. TRANSLATORS: This is a test. You don't need to translate it.
#: t/t0200/test.sh:8
msgid "TEST: A Shell test string"
msgstr "TILRAUN: Skeljartilraunastrengur"

#. TRANSLATORS: This is a test. You don't need to translate it.
#: t/t0200/test.sh:11
#, sh-format
msgid "TEST: A Shell test $variable"
msgstr "TILRAUN: Skeljartilraunastrengur með breytunni $variable"

#. TRANSLATORS: This is a test. You don't need to translate it.
#: t/t0200/test.perl:8
msgid "TEST: A Perl test string"
msgstr "TILRAUN: Perl tilraunastrengur"

#. TRANSLATORS: This is a test. You don't need to translate it.
#: t/t0200/test.perl:11
#, perl-format
msgid "TEST: A Perl test variable %s"
msgstr "TILRAUN: Perl tilraunastrengur með breytunni %s"

#. TRANSLATORS: The first '%s' is either "Reinitialized
#. existing" or "Initialized empty", the second " shared" or
#. "", and the last '%s%s' is the verbatim directory name.
#: builtin/init-db.c:355
#, c-format
msgid "%s%s Git repository in %s%s\n"
msgstr "%s%s Git lind í %s%s\n"

#: builtin/init-db.c:356
msgid "Reinitialized existing"
msgstr "Endurgerði"

#: builtin/init-db.c:356
msgid "Initialized empty"
msgstr "Bjó til tóma"

#: builtin/init-db.c:357
msgid " shared"
msgstr " sameiginlega"
