/*
 * IP configuration utility
 * Serbian language support
 *
 * Copyright 2010 Andrew Nguyen
 * Copyright 2010 Đorđe Vasiljević
 *
 * 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 "ipconfig.h"

#pragma code_page(65001)

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC

STRINGTABLE
{
    STRING_USAGE, "Употреба: ipconfig [ /? | /all ]\n"
    STRING_INVALID_CMDLINE, "Грешка: унесени су непознати или неисправни параметри наредбене линије\n"
    STRING_ADAPTER_FRIENDLY, "%s адаптер %s\n"
    STRING_ETHERNET, "Етернет"
    STRING_UNKNOWN, "Непознато"
    STRING_CONN_DNS_SUFFIX, "Веза одређена DNS суфиксом"
    STRING_IP_ADDRESS, "IP адреса"
    STRING_HOSTNAME, "Назив домаћина"
    STRING_NODE_TYPE, "Врста чвора"
    STRING_BROADCAST, "Емитовање"
    STRING_PEER_TO_PEER, "Непосредна размена"
    STRING_MIXED, "Измешано"
    STRING_HYBRID, "Хибридно"
    STRING_IP_ROUTING, "IP усмеравање је омогућено"
    STRING_DESCRIPTION, "Опис"
    STRING_PHYS_ADDR, "Физичка адреса"
    STRING_DHCP_ENABLED, "DHCP је омогућен"
    STRING_YES, "Да"
    STRING_NO, "Не"
    STRING_DEFAULT_GATEWAY, "Подразумевани мрежни пролаз"
}

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN

STRINGTABLE
{
    STRING_USAGE, "Upotreba: ipconfig [ /? | /all ]\n"
    STRING_INVALID_CMDLINE, "Greška: uneseni su nepoznati ili neispravni parametri naredbene linije\n"
    STRING_ADAPTER_FRIENDLY, "%s adapter %s\n"
    STRING_ETHERNET, "Eternet"
    STRING_UNKNOWN, "Nepoznato"
    STRING_CONN_DNS_SUFFIX, "Veza određena DNS sufiksom"
    STRING_IP_ADDRESS, "IP adresa"
    STRING_HOSTNAME, "Naziv domaćina"
    STRING_NODE_TYPE, "Vrsta čvora"
    STRING_BROADCAST, "Emitovanje"
    STRING_PEER_TO_PEER, "Neposredna razmena"
    STRING_MIXED, "Izmešano"
    STRING_HYBRID, "Hibridno"
    STRING_IP_ROUTING, "IP usmeravanje je omogućeno"
    STRING_DESCRIPTION, "Opis"
    STRING_PHYS_ADDR, "Fizička adresa"
    STRING_DHCP_ENABLED, "DHCP je omogućen"
    STRING_YES, "Da"
    STRING_NO, "Ne"
    STRING_DEFAULT_GATEWAY, "Podrazumevani mrežni prolaz"
}
