Merge branch 'r4sas-master'

This commit is contained in:
El RIDO 2016-12-25 11:38:12 +01:00
commit 3d6676eee8
No known key found for this signature in database
GPG Key ID: 0F5C940A6BD81F92
11 changed files with 193 additions and 14 deletions

View File

@ -59,11 +59,11 @@
"Przełącz nawigację",
"%d seconds": ["%d second", "%d second", "%d second"],
"%d minutes": ["%d minut", "%d minut", "%d minut"],
"%d hours": ["%d godzina", "%d godzina", "godzinę"],
"%d hours": ["%d godzina", "%d godzina", "%d godzinę"],
"%d days": ["%d dzień", "%d dzień", "%d dzień"],
"%d weeks": ["%d tydzień", "%d tydzień", "tydzień"],
"%d months": ["%d miesiąc", "%d miesiąc", "miesiąc"],
"%d years": ["%d rok", "%d rok", "rok"],
"%d weeks": ["%d tydzień", "%d tydzień", "%d tydzień"],
"%d months": ["%d miesiąc", "%d miesiąc", "%d miesiąc"],
"%d years": ["%d rok", "%d rok", "%d rok"],
"Never":
"nigdy",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.":

157
i18n/ru.json Normal file
View File

@ -0,0 +1,157 @@
{
"en": "ru",
"Paste does not exist, has expired or has been deleted.":
"Запись не существует, просрочена или была удалена.",
"PrivateBin requires php 5.3.0 or above to work. Sorry.":
"Для работы PrivateBin требуется PHP 5.3.0 или выше. Извините.",
"PrivateBin requires configuration section [%s] to be present in configuration file.":
"PrivateBin необходимо наличие секции [%s] в конфигурационном файле.",
"Please wait %d seconds between each post.":
["Пожалуйста ожидайте %d секунду между каждыми записями.", "Пожалуйста ожидайте %d секунды между каждыми записями.", "Пожалуйста ожидайте %d секунд между каждыми записями."],
"Paste is limited to %s of encrypted data.":
"Размер записи ограничен %s зашифрованных данных.",
"Invalid data.":
"Неверные данные.",
"You are unlucky. Try again.":
"Вам не повезло. Попробуйте еще раз.",
"Error saving comment. Sorry.":
"Ошибка при сохранении комментария. Извините.",
"Error saving paste. Sorry.":
"Ошибка при сохранении записи. Извините.",
"Invalid paste ID.":
"Неверный ID записи.",
"Paste is not of burn-after-reading type.":
"Тип записи не \"Удалить после прочтения\".",
"Wrong deletion token. Paste was not deleted.":
"Неверный ключ удаления записи. Запись не удалена",
"Paste was properly deleted.":
"Запись была успешно удалена.",
"PrivateBin": "PrivateBin",
"PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href=\"https://privatebin.info/\">project page</a>.":
"PrivateBin это минималистичный Open Source проект для создания заметок, где сервер не знает ничего о сохраняемых данных. Данные шифруются/расшифровываются <i>в браузере</i> с использованием 256 битного шифрования AES. Подробнее можно узнать на <a href=\"https://privatebin.info/\">сайте проекта</a>.",
"Because ignorance is bliss":
"Потому что неведение - благо",
"JavaScript is required for PrivateBin to work.<br />Sorry for the inconvenience.":
"Для работы PrivateBin требуется включенный JavaScript.<br />Приносим извинения за неудобства..",
"PrivateBin requires a modern browser to work.":
"Для работы PrivateBin требуется более современный браузер.",
"Still using Internet Explorer? Do yourself a favor, switch to a modern browser:":
"До сих пор используете Internet Explorer? Пожалейте себя, перейдите на более современный браузер:",
"New":
"Новая запись",
"Send":
"Отправить",
"Clone":
"Дублировать",
"Raw text":
"Исходный текст",
"Expires":
"Удалить через",
"Burn after reading":
"Удалить после прочтения",
"Open discussion":
"Открыть обсуждение",
"Password (recommended)":
"Пароль (рекомендуется)",
"Discussion":
"Обсуждение",
"Toggle navigation":
"Переключить навигацию",
"%d seconds": ["%d секунду", "%d секунды", "%d секунд"],
"%d minutes": ["%d минуту", "%d минуты", "%d минут"],
"%d hours": ["%d час", "%d часа", "%d часов"],
"%d days": ["%d день", "%d дня", "%d дней"],
"%d weeks": ["%d неделю", "%d недели", "%d недель"],
"%d months": ["%d месяц", "%d месяца", "%d месяцев"],
"%d years": ["%d год", "%d года", "%d лет"],
"Never":
"Никогда",
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.":
"Примечание: Этот сервис тестовый: Данные могут быть удалены в любое время. Котята умрут, если вы будете злоупотреблять серсисом.",
"This document will expire in %d seconds.":
["Документ будет удален через %d секунду.", "Документ будет удален через %d секунды.", "Документ будет удален через %d секунд."],
"This document will expire in %d minutes.":
["Документ будет удален через %d минуту.", "Документ будет удален через %d минуты.", "Документ будет удален через %d минут."],
"This document will expire in %d hours.":
["Документ будет удален через %d час.", "Документ будет удален через %d часа.", "Документ будет удален через %d часов."],
"This document will expire in %d days.":
["Документ будет удален через %d день.", "Документ будет удален через %d дня.", "Документ будет удален через %d дней."],
"This document will expire in %d months.":
["Документ будет удален через %d месяц.", "Документ будет удален через %d месяца.", "Документ будет удален через %d месяцев."],
"Please enter the password for this paste:":
"Пожалуйста введите пароль от записи:",
"Could not decrypt data (Wrong key?)":
"Невозможно расшифровать данные (Неверный ключ?)",
"Could not delete the paste, it was not stored in burn after reading mode.":
"Невозможно удалить запись, она не была сохранена в режиме удаления после прочтения",
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.":
"ТОЛЬКО ДЛЯ ВАШИХ ГЛАЗ. Не закрывайте это окно, это сообщение не может быть показано снова.",
"Could not decrypt comment; Wrong key?":
"Невозможно расшифровать комментарий; Неверный ключ?",
"Reply":
"Ответить",
"Anonymous":
"Аноним",
"Anonymous avatar (Vizhash of the IP address)":
"Анонимный аватар (Vizhash IP адреса)",
"Add comment":
"Добавить комментарий",
"Optional nickname...":
"Опциональный никнейм...",
"Post comment":
"Отправить комментарий",
"Sending comment...":
"Отправка комментария...",
"Comment posted.":
"Комментарий опубликован.",
"Could not refresh display: %s":
"Невозможно обновить данные: %s",
"unknown status":
"неизвестная причина",
"server error or not responding":
"ошибка сервера или нет ответа",
"Could not post comment: %s":
"Не удалось опубликовать комментарий: %s",
"Sending paste (Please move your mouse for more entropy)...":
"Отправка записи (Пожалуйста двигайте мышкой для большей энтропии)...",
"Sending paste...":
"Отправка записи...",
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>":
"Ссылка на запись <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Нажмите [Ctrl]+[c] чтобы скопировать ссылку)</span>",
"Delete data":
"Удалить запись",
"Could not create paste: %s":
"Не удалось опубликовать запись: %s",
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)":
"Невозможно расшифровать запись: Ключ расшифровки отсутствует в ссылке (Может быть вы используете сокращатель ссылок, который удаляет часть ссылки?)",
"B": "байт",
"KiB": "Кбайт",
"MiB": "Мбайт",
"GiB": "Гбайт",
"TiB": "Тбайт",
"PiB": "Пбайт",
"EiB": "Эбайт",
"ZiB": "Збайт",
"YiB": "Йбайт",
"Format": "Формат",
"Plain Text": "Обычный текст",
"Source Code": "Исходный код",
"Markdown": "Язык разметки",
"Download attachment": "Скачать прикрепленный файл",
"Cloned file attached.": "Дубль файла прикреплен.",
"Attach a file": "Прикрепить файл",
"Remove attachment": "Удалить вложение",
"Your browser does not support uploading encrypted files. Please use a newer browser.":
"Ваш браузер не поддерживает отправку зашифрованных файлов. Используйте более новый браузер.",
"Invalid attachment.": "Неизвестное вложение.",
"Options": "Опции",
"Shorten URL": "Короткая ссылка",
"Editor": "Редактор",
"Preview": "Предпросмотр",
"PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
"Переменная PATH необходима PrivateBin в конце \"%s\". Пожалуйста обновите переменную PATH в вашем index.php.",
"Decrypt":
"Расшифровать",
"Enter password":
"Введите пароль"
}

View File

@ -328,7 +328,7 @@ $(function() {
/**
* supported languages, minus the built in 'en'
*/
supportedLanguages: ['de', 'fr', 'it', 'pl', 'sl', 'zh'],
supportedLanguages: ['de', 'fr', 'it', 'pl', 'ru', 'sl', 'zh'],
/**
* translate a string, alias for translate()
@ -413,7 +413,9 @@ $(function() {
case 'zh':
return (n > 1 ? 1 : 0);
case 'pl':
return (n === 1 ? 0 : n%10 >= 2 && n %10 <=4 && (n%100 < 10 || n%100 >= 20) ? 1 : 2);
return (n === 1 ? 0 : (n%10 >= 2 && n %10 <=4 && (n%100 < 10 || n%100 >= 20) ? 1 : 2));
case 'ru':
return (n % 10 === 1 && n % 100 !== 11 ? 0 : (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2));
// en, de
default:
return (n !== 1 ? 1 : 0);

View File

@ -298,7 +298,9 @@ class I18n
case 'zh':
return $n > 1 ? 1 : 0;
case 'pl':
return $n == 1 ? 0 : $n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2;
return $n == 1 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
case 'ru':
return $n % 10 == 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
// en, de
default:
return $n != 1 ? 1 : 0;

View File

@ -52,7 +52,7 @@ if ($MARKDOWN):
<?php
endif;
?>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-aKd7/5EFMPmeZTmL0Iyttt6sbukO9E40bUink8A/IJmrncCh1upGLlkhti7ygO+hq/ocgLJ0kKoxZETzTgNEww==" crossorigin="anonymous"></script>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-V/iOsbg0tz5cbcOCtBOgY+uK/X92E8EQLlW6L7OYvzLSYOO1YfPVupEbYEWgOj9KllOLrIsN8Oe+MfBsnFSW2g==" crossorigin="anonymous"></script>
<!--[if lt IE 10]>
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
<![endif]-->

View File

@ -52,7 +52,7 @@ if ($MARKDOWN):
<?php
endif;
?>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-aKd7/5EFMPmeZTmL0Iyttt6sbukO9E40bUink8A/IJmrncCh1upGLlkhti7ygO+hq/ocgLJ0kKoxZETzTgNEww==" crossorigin="anonymous"></script>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-V/iOsbg0tz5cbcOCtBOgY+uK/X92E8EQLlW6L7OYvzLSYOO1YfPVupEbYEWgOj9KllOLrIsN8Oe+MfBsnFSW2g==" crossorigin="anonymous"></script>
<!--[if lt IE 10]>
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
<![endif]-->

View File

@ -53,7 +53,7 @@ if ($MARKDOWN):
<?php
endif;
?>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-aKd7/5EFMPmeZTmL0Iyttt6sbukO9E40bUink8A/IJmrncCh1upGLlkhti7ygO+hq/ocgLJ0kKoxZETzTgNEww==" crossorigin="anonymous"></script>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-V/iOsbg0tz5cbcOCtBOgY+uK/X92E8EQLlW6L7OYvzLSYOO1YfPVupEbYEWgOj9KllOLrIsN8Oe+MfBsnFSW2g==" crossorigin="anonymous"></script>
<!--[if lt IE 10]>
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
<![endif]-->

View File

@ -52,7 +52,7 @@ if ($MARKDOWN):
<?php
endif;
?>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-aKd7/5EFMPmeZTmL0Iyttt6sbukO9E40bUink8A/IJmrncCh1upGLlkhti7ygO+hq/ocgLJ0kKoxZETzTgNEww==" crossorigin="anonymous"></script>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-V/iOsbg0tz5cbcOCtBOgY+uK/X92E8EQLlW6L7OYvzLSYOO1YfPVupEbYEWgOj9KllOLrIsN8Oe+MfBsnFSW2g==" crossorigin="anonymous"></script>
<!--[if lt IE 10]>
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
<![endif]-->

View File

@ -53,7 +53,7 @@ if ($MARKDOWN):
<?php
endif;
?>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-aKd7/5EFMPmeZTmL0Iyttt6sbukO9E40bUink8A/IJmrncCh1upGLlkhti7ygO+hq/ocgLJ0kKoxZETzTgNEww==" crossorigin="anonymous"></script>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-V/iOsbg0tz5cbcOCtBOgY+uK/X92E8EQLlW6L7OYvzLSYOO1YfPVupEbYEWgOj9KllOLrIsN8Oe+MfBsnFSW2g==" crossorigin="anonymous"></script>
<!--[if lt IE 10]>
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
<![endif]-->

View File

@ -47,7 +47,7 @@ if ($MARKDOWN):
<?php
endif;
?>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-aKd7/5EFMPmeZTmL0Iyttt6sbukO9E40bUink8A/IJmrncCh1upGLlkhti7ygO+hq/ocgLJ0kKoxZETzTgNEww==" crossorigin="anonymous"></script>
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-V/iOsbg0tz5cbcOCtBOgY+uK/X92E8EQLlW6L7OYvzLSYOO1YfPVupEbYEWgOj9KllOLrIsN8Oe+MfBsnFSW2g==" crossorigin="anonymous"></script>
<!--[if lt IE 10]>
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
<![endif]-->

View File

@ -63,7 +63,25 @@ class I18nTest extends PHPUnit_Framework_TestCase
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'pl;q=0.8,en-GB;q=0.6,en-US;q=0.4,en;q=0.2';
I18n::loadTranslations();
$this->assertEquals('pl', I18n::_('en'), 'browser language pl');
$this->assertEquals('2 godzina', I18n::_('%d hours', 2), 'hours in polish');
$this->assertEquals('1 godzina', I18n::_('%d hours', 1), '1 hour in polish');
$this->assertEquals('2 godzina', I18n::_('%d hours', 2), '2 hours in polish');
$this->assertEquals('12 godzinę', I18n::_('%d hours', 12), '12 hours in polish');
$this->assertEquals('22 godzina', I18n::_('%d hours', 22), '22 hours in polish');
$this->assertEquals('1 minut', I18n::_('%d minutes', 1), '1 minute in polish');
$this->assertEquals('3 minut', I18n::_('%d minutes', 3), '3 minutes in polish');
$this->assertEquals('13 minut', I18n::_('%d minutes', 13), '13 minutes in polish');
$this->assertEquals('23 minut', I18n::_('%d minutes', 23), '23 minutes in polish');
}
public function testBrowserLanguageRuDetection()
{
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'ru;q=0.8,en-GB;q=0.6,en-US;q=0.4,en;q=0.2';
I18n::loadTranslations();
$this->assertEquals('ru', I18n::_('en'), 'browser language ru');
$this->assertEquals('1 минуту', I18n::_('%d minutes', 1), '1 minute in russian');
$this->assertEquals('3 минуты', I18n::_('%d minutes', 3), '3 minutes in russian');
$this->assertEquals('10 минут', I18n::_('%d minutes', 10), '10 minutes in russian');
$this->assertEquals('21 минуту', I18n::_('%d minutes', 21), '21 minutes in russian');
}
public function testBrowserLanguageAnyDetection()