﻿#Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
# Web Console strings for reference all strings here are commented.
# This file may be used to produce a translation of the strings
#
# Note that properties files are ISO-8859-1 encoded. To provide translations
# for languages requiring different character encodings, you may use the
# native2ascii Maven Plugin from http://mojo.codehaus.org/native2ascii-maven-plugin/
# to translate the natively encoded files to ISO-8859-1 during bundle build
#
# Translations requiring non-ISO-8859-1 encoding are placed in the
# src/main/native2ascii/OSGI-INF/l10n folder and are converted using said
# plugin while building the bundle
#


# Memory Usage Plugin
dump.title = Памет
dump.dump = Heap запис
dump.gc = Изпълнение на Garbage Collector

dump.overview = Обща статистика
dump.threshold = Автоматичен запис на Heap (праг) (%)
dump.threshold.set = Запази
dump.interval = Автоматичен запи на Heap (интервал) (s)
dump.interval.set = Запази

dump.pools.name = Име
dump.pools.score = Използваемост
dump.pools.used = Заети
dump.pools.committed = Committed
dump.pools.max = Максимум
dump.pools.init = Първоначален
dump.pools.type = Тип

dump.statline = Heap записи: {0} файл(а), {1} байта
dump.name = Име на файл
dump.date = Дата на създаване
dump.size = Размер
dump.action = Действие
dump.remove = Изтриване
