Fix #624 - Add localization for Bulgarian (#645)

* Add translation files and declarations for Bulgarian

* Add a bunch of translations to bg.jsx

* Add rest of translations to bg.jsx

* Add devise translations

* Fix devise translations
main
Svetlozar Todorov 2017-04-13 14:16:28 +03:00 committed by Eugen
parent 4f781b17cc
commit aa7bf1515c
9 changed files with 463 additions and 4 deletions

View File

@ -52,8 +52,8 @@ import no from 'react-intl/locale-data/no';
import ru from 'react-intl/locale-data/ru'; import ru from 'react-intl/locale-data/ru';
import uk from 'react-intl/locale-data/uk'; import uk from 'react-intl/locale-data/uk';
import zh from 'react-intl/locale-data/zh'; import zh from 'react-intl/locale-data/zh';
import bg from 'react-intl/locale-data/bg';
import { localeData as zh_hk } from '../locales/zh-hk'; import { localeData as zh_hk } from '../locales/zh-hk';
import getMessagesForLocale from '../locales'; import getMessagesForLocale from '../locales';
import { hydrateStore } from '../actions/store'; import { hydrateStore } from '../actions/store';
import createStream from '../stream'; import createStream from '../stream';
@ -66,7 +66,6 @@ const browserHistory = useRouterHistory(createBrowserHistory)({
basename: '/web' basename: '/web'
}); });
addLocaleData([ addLocaleData([
...en, ...en,
...de, ...de,
@ -82,9 +81,9 @@ addLocaleData([
...uk, ...uk,
...zh, ...zh,
...zh_hk, ...zh_hk,
...bg,
]); ]);
const Mastodon = React.createClass({ const Mastodon = React.createClass({
propTypes: { propTypes: {

View File

@ -0,0 +1,68 @@
const bg = {
"column_back_button.label": "Назад",
"lightbox.close": "Затвори",
"loading_indicator.label": "Зареждане...",
"status.mention": "Споменаване",
"status.delete": "Изтриване",
"status.reply": "Отговор",
"status.reblog": "Споделяне",
"status.favourite": "Предпочитани",
"status.reblogged_by": "{name} сподели",
"status.sensitive_warning": "Деликатно съдържание",
"status.sensitive_toggle": "Покажи",
"video_player.toggle_sound": "Звук",
"account.mention": "Споменаване",
"account.edit_profile": "Редактирай профила си",
"account.unblock": "Не блокирай",
"account.unfollow": "Не следвай",
"account.block": "Блокирай",
"account.follow": "Последвай",
"account.posts": "Публикации",
"account.follows": "Следвам",
"account.followers": "Последователи",
"account.follows_you": "Твой последовател",
"account.requested": "В очакване на одобрение",
"getting_started.heading": "Първи стъпки",
"getting_started.about_addressing": "Можеш да последваш потребител, ако знаеш потребителското му име и домейна, на който се намира, като в полето за търсене ги въведеш по този начин: име@домейн",
"getting_started.about_shortcuts": "Ако с търсения потребител се намирате на един и същ домейн, достатъчно е да въведеш само името. Същото важи и за споменаване на хора в публикации.",
"getting_started.about_developer": "Можеш да потърсиш разработчика на този проект като: Gargron@mastodon.social",
"getting_started.open_source_notice": "Mastodon е софтуер с отворен код. Можеш да помогнеш или да докладваш за проблеми в Github: {github}.",
"column.home": "Начало",
"column.mentions": "Споменавания",
"column.public": "Публичен канал",
"column.notifications": "Известия",
"tabs_bar.compose": "Съставяне",
"tabs_bar.home": "Начало",
"tabs_bar.mentions": "Споменавания",
"tabs_bar.public": "Публичен канал",
"tabs_bar.notifications": "Известия",
"compose_form.placeholder": "Какво си мислиш?",
"compose_form.publish": "Раздумай",
"compose_form.sensitive": "Отбележи съдържанието като деликатно",
"compose_form.spoiler": "Скрий текста зад предупреждение",
"compose_form.private": "Отбележи като поверително",
"compose_form.privacy_disclaimer": "Поверителни публикации ще бъдат изпратени до споменатите потребители на {domains}. Доверяваш ли се на {domainsCount, plural, one {that server} other {those servers}}, че няма да издаде твоята публикация?",
"compose_form.unlisted": "Не показвай в публичния канал",
"navigation_bar.edit_profile": "Редактирай профил",
"navigation_bar.preferences": "Предпочитания",
"navigation_bar.public_timeline": "Публичен канал",
"navigation_bar.logout": "Излизане",
"reply_indicator.cancel": "Отказ",
"search.placeholder": "Търсене",
"search.account": "Акаунт",
"search.hashtag": "Хаштаг",
"upload_button.label": "Добави медия",
"upload_form.undo": "Отмяна",
"notification.follow": "{name} те последва",
"notification.favourite": "{name} хареса твоята публикация",
"notification.reblog": "{name} сподели твоята публикация",
"notification.mention": "{name} те спомена",
"notifications.column_settings.alert": "Десктоп известия",
"notifications.column_settings.show": "Покажи в колона",
"notifications.column_settings.follow": "Нови последователи:",
"notifications.column_settings.favourite": "Предпочитани:",
"notifications.column_settings.mention": "Споменавания:",
"notifications.column_settings.reblog": "Споделяния:",
};
export default en;

View File

@ -11,7 +11,7 @@ import eo from './eo';
import ru from './ru'; import ru from './ru';
import ja from './ja'; import ja from './ja';
import zh_hk from './zh-hk'; import zh_hk from './zh-hk';
import bg from './bg';
const locales = { const locales = {
en, en,
@ -27,6 +27,7 @@ const locales = {
ru, ru,
ja, ja,
'zh-HK': zh_hk, 'zh-HK': zh_hk,
bg,
}; };
export default function getMessagesForLocale (locale) { export default function getMessagesForLocale (locale) {

View File

@ -16,6 +16,7 @@ module SettingsHelper
ja: '日本語', ja: '日本語',
'zh-CN': '简体中文', 'zh-CN': '简体中文',
'zh-HK': '繁體中文(香港)', 'zh-HK': '繁體中文(香港)',
bg: 'Български',
}.freeze }.freeze
def human_locale(locale) def human_locale(locale)

View File

@ -27,6 +27,7 @@ module Mastodon
config.i18n.available_locales = [ config.i18n.available_locales = [
:en, :en,
:bg,
:de, :de,
:eo, :eo,
:es, :es,

169
config/locales/bg.yml Normal file
View File

@ -0,0 +1,169 @@
---
bg:
about:
about_mastodon: Mastodon е <em>безплатен</em> сървър с <em>отворен код</em> за социални мрежи. Като <em>децентрализирана</em> алтернатива на комерсиалните платформи, той позволява избягването на риска от монополизация на твоята комуникация от единични компании. Изберете си сървър, на който се доверявате, и ще можете да контактувате с всички останали. Всеки може да пусне Mastodon и лесно да вземе участие в <em>социалната мрежа</em>.
about_this: За тази инстанция
apps: Приложения
business_email: 'Служебен e-mail:'
closed_registrations: В момента регистрациите за тази инстанция са затворени.
contact: За контакти
description_headline: Какво е %{domain}?
domain_count_after: други инстанции
domain_count_before: Свързани към
features:
api: Отворено API за приложения и услуги
blocks: Богат на инструменти за блокиране и заглушаване
characters: Публикации от 500 символа
chronology: Публикациите се показват хронологично
ethics: 'Етичен дизайн: без реклами и проследяване'
gifv: GIFV комплекти и кратки видео клипове
privacy: Настройване на поверителността за всяка публикация
public: Публични канали
features_headline: Какво откроява Mastodon
get_started: Първи стъпки
links: Връзки
other_instances: Други инстанции
source_code: Програмен код
status_count_after: публикации
status_count_before: Написали
terms: Условия
user_count_after: потребители
user_count_before: Дом на
accounts:
follow: Последвай
followers: Последователи
following: Следва
nothing_here: Тук няма никого!
people_followed_by: Хора, които %{name} следва
people_who_follow: Хора, които следват %{name}
posts: Публикации
remote_follow: Последвай
unfollow: Не следвай
application_mailer:
settings: 'Промяна на предпочитанията за e-mail: %{link}'
signature: Mastodon известия от %{instance}
view: 'Преглед:'
applications:
invalid_url: Предоставеният URL е невалиден
auth:
change_password: Идентификационни данни
didnt_get_confirmation: Не получих инструкции за потвърждение
forgot_password: Забравих си паролата
login: Влизане
logout: Излизане
register: Регистрация
resend_confirmation: Изпрати отново инструкции за потвърждение
reset_password: Подновяване на паролата
set_new_password: Задай нова парола
authorize_follow:
error: Възникна грешка в откриването на потребителя
follow: Последвай
prompt_html: '(<strong>%{self}</strong>), молбата ти беше изпратена до:'
title: Последвай %{acct}
datetime:
distance_in_words:
about_x_hours: "%{count} ч."
about_x_months: "%{count} м."
about_x_years: "%{count} г."
almost_x_years: "%{count} г."
half_a_minute: Току-що
less_than_x_minutes: "%{count} мин."
less_than_x_seconds: Току-що
over_x_years: "%{count} г."
x_days: "%{count} дни"
x_minutes: "%{count} мин."
x_months: "%{count} м."
x_seconds: "%{count} сек."
exports:
blocks: Вашите блокирания
csv: CSV
follows: Вашите следвания
storage: Съхранение на мултимедия
generic:
changes_saved_msg: Успешно запазване на промените!
powered_by: поддържано от %{link}
save_changes: Запази промените
validation_errors:
one: Нещо все още не е наред! Моля, прегледай грешката по-долу
other: Нещо все още не е наред! Моля, прегледай грешките по-долу
imports:
preface: Можеш да импортираш някои данни, като например всички хора, които следваш или блокираш в акаунта си на тази инстанция, от файлове, създадени чрез експорт в друга инстанция.
success: Твоите данни бяха успешно качени и ще бъдат обработени впоследствие.
types:
blocking: Списък на блокираните
following: Списък на последователите
upload: Качване
landing_strip_html: <strong>%{name}</strong> е потребител от <strong>%{domain}</strong>. Можеш да ги следваш, или да контактуваш с тях, ако имаш акаунт където и да е из федерираната вселена на Mastodon. Ако нямаш акаунт, можеш да си <a href="%{sign_up_path}">създадеш ето тук</a>.
notification_mailer:
digest:
body: 'Ето кратко резюме на нещата, които се случиха от последното ти посещение в %{instance} на %{since}:'
mention: "%{name} те спомена в:"
new_followers_summary:
one: Имаш един нов последовател! Ура!
other: Имаш %{count} нови последователи! Изумително!
subject:
one: "1 ново известие от последното ти посещение \U0001F418"
other: "%{count} нови известия от последното ти посещение \U0001F418"
favourite:
body: 'Публикацията ти беше харесана от %{name}:'
subject: "%{name} хареса твоята публикация"
follow:
body: "%{name} те последва!"
subject: "%{name} те последва"
follow_request:
body: "%{name} помоли за разрешение да те последва"
subject: 'Чакащ последовател: %{name}'
mention:
body: '%{name} те спомена в:'
subject: '%{name} те спомена'
reblog:
body: 'Твоята публикация беше споделена от %{name}:'
subject: "%{name} сподели публикацията ти"
pagination:
next: Напред
prev: Назад
remote_follow:
acct: Въведи потребителско_име@домейн, от които искаш да следваш
missing_resource: Неуспешно търсене на нужния URL за пренасочване за твоя акаунт
proceed: Започни следване
prompt: 'Ще последваш:'
settings:
authorized_apps: Упълномощени приложения
back: Обратно към Mastodon
edit_profile: Редактирай профила си
export: Експортиране на данни
import: Импортиране
preferences: Предпочитания
settings: Настройки
two_factor_auth: Двустепенно удостоверяване
statuses:
open_in_web: Отвори в уеб
over_character_limit: прехвърлен лимит от %{max} символа
show_more: Покажи повече
visibilities:
private: Покажи само на последователите си
public: Публично
unlisted: Публично, но не показвай в публичния канал
stream_entries:
click_to_show: Покажи
reblogged: споделено
sensitive_content: Деликатно съдържание
time:
formats:
default: "%d %b, %Y, %H:%M"
two_factor_auth:
description_html: При активация на <strong>двустепенно удостоверяване</strong>, за да влезеш в приложението, ще трябва да използваш телефона си. През него ще се генерира код, който да въвеждаш при влизане.
disable: Деактивирай
enable: Активирай
instructions_html: "<strong>Сканирай този QR код с Google Authenticator или подобно приложение от своя телефон</strong>. Oтсега нататък, това приложение ще генерира код, който ще трябва да въвеждаш при всяко влизане."
plaintext_secret_html: "Тайна в обикновен текст: <samp>%{secret}</samp>"
warning: Ако не можеш да настроиш приложението за удостверяване сега, избери "Деактивирай". В противен случай, няма да можеш да влезеш в акаунта си.
users:
invalid_email: E-mail адресът е невалиден
invalid_otp_token: Невалиден код
will_paginate:
page_gap: "&hellip;"
media_attachments:
validations:
too_many: Не мога да прикача повече от 4 файла
images_and_video: Не мога да прикача видеоклип към публикация, която вече съдържа изображения

View File

@ -0,0 +1,61 @@
---
bg:
devise:
confirmations:
confirmed: Твоят профил беше успешно потвърден. Влизането в профила е успешно.
send_instructions: Ще получиш писмо с инструкции как да потвърдиш своя профил до няколко минути.
send_paranoid_instructions: Ако твоят имейл адрес съществува в базата ни, ще получиш там инструкции как да потвърдиш своя профил.
failure:
already_authenticated: Вече си вътре в профила си.
inactive: Профилът ти все още не е активиран.
invalid: Невалиден имейл адрес или парола.
last_attempt: Разполагаш с още един опит преди профилът ти да бъде заключен.
locked: Профилът ти е заключен.
not_found_in_database: "Невалидни стойности за %{authentication_keys} или парола."
timeout: Сесията ти изтече, моля влез отново, за да продължиш.
unauthenticated: Преди да продължиш, трябва да влезеш в профила си или да се регистрираш.
unconfirmed: Преди да продължиш, трябва да потвърдиш регистрацията си.
mailer:
confirmation_instructions:
subject: 'Mastodon: Инструкции за потвърждаване'
password_change:
subject: 'Mastodon: Паролата е променена'
reset_password_instructions:
subject: 'Инструкции за смяна на паролата'
unlock_instructions:
subject: 'Инструкции за отключване'
omniauth_callbacks:
failure: "Не успяхме да те упълномощим чрез %{kind}, защото \"%{reason}\"."
success: "Успешно упълномощаване чрез %{kind} профил."
passwords:
no_token: Може да достъпваш тази страница само от имейл за промяна на паролата. Ако тази страница е отворена от такъв имейл, увери се, че използваш целия URL-адрес, който сме ти изпратили.
send_instructions: Ще получиш писмо с инструкции как да промениш паролата си до няколко минути.
send_paranoid_instructions: Ако твоят имейл адрес съществува в базата ни, ще получиш там инструкции за промяна на своята парола.
updated: Паролата ти беше променена успешно. Влизането в профила е успешно.
updated_not_active: Паролата ти беше променена успешно.
registrations:
destroyed: Довиждане! Твоят профил беше успешно изтрит. Надяваме се скоро да те видим отново.
signed_up: Привет! Регистрирацията ти е успешна.
signed_up_but_inactive: Регистрирацията ти е успешна. Въпреки това, не можеш да влезеш в профила си, защото той все още не е потвърден.
signed_up_but_locked: Регистрирацията ти е успешна. Въпреки това, не можеш да влезеш в профила си, защото той е заключен.
signed_up_but_unconfirmed: Писмо с връзка за потвърждаване на профила ти беше изпратено на твоя имейл адрес. Моля, отвори връзката, за да активираш своя профил.
update_needs_confirmation: Профилът ти е успешно променен, но ние трябва да проверим твоя нов имейл адрес. Моля, провери пощата си и отвори връзката за потвърждаване на новия адрес.
updated: Профилът ти е успешно променен.
sessions:
already_signed_out: Успешно излизане от профила.
signed_in: Успешно влизане.
signed_out: Успешно излизане.
unlocks:
send_instructions: Ще получиш писмо с инструкции как да отключиш профила си до няколко минути.
send_paranoid_instructions: Ако твоят профил съществува в базата ни, на своя имейл адрес ще получиш инструкции за отключването му до няколко минути.
unlocked: Твоят профил беше отключен успешно. За да продължиш, влез в него.
errors:
messages:
already_confirmed: е вече потвърден, моля опитай да влезеш в профила си с него
confirmation_period_expired: "трябва да се потвърди в рамките на %{period}, моля направи нова заявка за потвърждение"
expired: е изтекъл, моля заяви нов
not_found: не е намерен
not_locked: не бе заключен
not_saved:
one: "Една грешка попречи този %{resource} да бъде записан:"
other: "%{count} грешки попречиха този %{resource} да бъде записан:"

View File

@ -0,0 +1,113 @@
---
bg:
activerecord:
attributes:
doorkeeper/application:
name: Име
redirect_uri: URI за пренасочване
errors:
models:
doorkeeper/application:
attributes:
redirect_uri:
fragment_present: не може да съдържа фрагмент.
invalid_uri: трябва да е валидно URI.
relative_uri: трябва да е абсолютно URI.
secured_uri: трябва да е HTTPS/SSL URI.
doorkeeper:
applications:
buttons:
authorize: Упълномощаване
cancel: Отказ
destroy: Унищожаване
edit: Редакция
submit: Изпращане
confirmations:
destroy: Потвърждаваш ли изтриването?
edit:
title: Редактиране на приложението
form:
error: О, не! Провери формата за възможни грешки
help:
native_redirect_uri: Изполвай %{native_redirect_uri} за локални тестове
redirect_uri: Използвай един ред за всяко URI
scopes: Разделяй диапазоните с интервал. Остави празно, за да използваш диапазона по подразбиране.
index:
callback_url: URL за обратно повикване
name: Име
new: Ново приложение
title: Твоите приложения
new:
title: Ново приложение
show:
actions: Действия
application_id: Идентификатор на приложението
callback_urls: URL-и за обратно повикване
scopes: Диапазони
secret: Тайна
title: 'Приложение: %{name}'
authorizations:
buttons:
authorize: Упълномощаване
deny: Отказ
error:
title: Възникна грешка
new:
able_to: Ще е възможно
prompt: Приложението %{client_name} заявява достъп до твоя акаунт
title: Изисква се упълномощаване
show:
title: Код за упълномощаване
authorized_applications:
buttons:
revoke: Отмяна
confirmations:
revoke: Потвърждаваш ли отмяната?
index:
application: Приложение
created_at: Създадено на
date_format: "%Y-%m-%d %H:%M:%S"
scopes: Диапазони
title: Твоите упълномощени приложения
errors:
messages:
access_denied: Заявката беше отказана от собственика на ресурса или от сървъра за упълномощаване.
credential_flow_not_configured: Resource Owner Password Credentials предизвика грешка, заради това, че настройките за Doorkeeper.configure.resource_owner_from_credentials липсват.
invalid_client: Удостоверяването на клиента предизвика грешка, поради непознат клиент, липсващо клиентско удостоверяване, или заради това, че методът на удостоверяване не се поддържа.
invalid_grant: Предоставеното удостоверение за достъп е невалидно, изтекло, отхвърлено, не съвпада с пренасочващото URI, използвано в заявката за удостоверение, или е бил издадено от друг клиент.
invalid_redirect_uri: Наличното пренасочващо URI е невалидно.
invalid_request: Заявката е с липсващ задължителен параметър, включва стойност на параметъра, която не се поддържа, или е изкривена по друг начин.
invalid_resource_owner: Предоставените идентификационни данни на притежателя на ресурса са невалидни, или притежателят не може да бъде намерен.
invalid_scope: Заявеният диапазон е невалиден, неизвестен или изкривен.
invalid_token:
expired: Маркерът за достъп изтече
revoked: Маркерът за достъп беше отхвърлен
unknown: Маркерът за достъп е невалиден
resource_owner_authenticator_not_configured: Намирането на Resource Owner се провали поради липса на конфигурация на Doorkeeper.configure.resource_owner_authenticator.
server_error: Сървърът за удостоверяване попадна на неочаквано условие, което предотврати изпълнението на заявката.
temporarily_unavailable: Сървърът за удостоверяване не може да се справи със заявката в момента поради временно претоварване или профилактика на сървъра.
unauthorized_client: Клиентът не е удостоверен да изпълни заявката по този начин.
unsupported_grant_type: Типът на удостоврението за достъп не се поддържа от сървъра за удостоверяване.
unsupported_response_type: Удостоверяващият сървър не поддържа този тип отговор.
flash:
applications:
create:
notice: Приложението е създадено.
destroy:
notice: Приложението е изтрито.
update:
notice: Приложението е обновено.
authorized_applications:
destroy:
notice: Приложението е отказано.
layouts:
admin:
nav:
applications: Приложения
oauth2_provider: OAuth2 доставчик
application:
title: Нужно е упълномощаване по OAuth
scopes:
follow: следването, блокирането, деблокирането и отмяната на следването на акаунтите
read: четенето на данните от твоя акаунт
write: публикуването от твое име

View File

@ -0,0 +1,46 @@
---
bg:
simple_form:
hints:
defaults:
avatar: PNG, GIF или JPG. До 2MB. Ще бъде смалена до 120x120 пиксела
display_name: До 30 символа
header: PNG, GIF или JPG. До 2MB. Ще бъде смалена до 700x335 пиксела
locked: Изисква ръчно одобрение на последователите. По подразбиране, публикациите са достъпни само до последователи.
note: До 160 символа
imports:
data: CSV файл, експортиран от друга инстанция на Mastodon
labels:
defaults:
avatar: Аватар
confirm_new_password: Потвърди новата парола
confirm_password: Потвърди паролата
current_password: Текуща парола
data: Данни
display_name: Показвано име
email: E-mail адрес
header: Заглавен ред
locale: Език
locked: Направи акаунта поверителен
new_password: Нова парола
note: Био
otp_attempt: Двустепенен код
password: Парола
setting_default_privacy: Поверителност на публикациите
type: Тип на импортиране
username: Потребителско име
interactions:
must_be_follower: Блокирай известия от не-последователи
must_be_following: Блокирай известия от хора, които не следваш
notification_emails:
digest: Изпращай извлечения на съобщенията
favourite: Изпращай e-mail, когато някой хареса твоя публикация
follow: Изпращай e-mail, когато някой те последва
follow_request: Изпращай e-mail, когато някой пожелае да те последва
mention: Изпращай e-mail, когато някой те спомене
reblog: Изпращай e-mail, когато някой сподели твоя публикация
'no': 'Не'
required:
mark: "*"
text: задължително
'yes': 'Да'