Merge remote-tracking branch 'upstream/develop' into user-contact

This commit is contained in:
Michael 2021-09-25 18:34:55 +00:00
commit 3fddf3807a
12 changed files with 157 additions and 60 deletions

View file

@ -15,6 +15,22 @@ steps:
---
kind: pipeline
type: docker
name: Integrity checks
steps:
- name: Check database version
image: alpine
commands:
- export DBSTRUCTURE_VERSION="$(sed -rn "s/.*'DB_UPDATE_VERSION', ([0-9]+).*/\1/p" static/dbstructure.config.php)"
- export DATABASE_VERSION="$(sed -rn 's/.*DB_UPDATE_VERSION ([0-9]+).*/\1/p' database.sql)"
- echo "Database $DATABASE_VERSION - DB-Structure $DBSTRUCTURE_VERSION"
- if [[ "$DBSTRUCTURE_VERSION" != "$DATABASE_VERSION" ]]; then
echo "Database version mismatch.";
exit 1;
fi
---
kind: pipeline
type: docker
name: php7.3-lint
steps:

View file

@ -1,10 +1,60 @@
Version 2021.09 (unreleased)
Version 2021.12 (unreleased)
Version 2021.09 (2021-09-25)
Friendica Core
Simplified the proxy mechanism. The proxy cache directory (/proxy) can now be removed [annando]
DFRN is now always handled with the Diaspora transport layer. The legacy DFRN transport layer is removed [annando]
Legacy OAuth server is removed [annando]
Scheduled posts are now possible [annando]
The minimal PHP version in the composer is increased to version 7.2 [annando]
Updates to the translation DE, FR, HU, RU [translation teams]
Updates to the documentation [foss-, nupplaphil]
General code cleanup [annando, MrPetovan, nupplaphil]
Unification of setting label wordings towards activating something [heluecht]
Enhanced the proxy mechanism [annando]
Enhanced the desktop notifications [annando]
Enhanced the Mastodon compatible API [annando]
Enhanced the UI to follow new contacts [MrPetovan]
Enhanced remote AP follow of new contacts [annando]
Enhanced the installer [tobiasd]
Enhanced the handling of attachments by the addon hooks [MrPetovan]
Enhanced the federation with PeerTube [MrPetovan]
Enhanced the federation with Diaspora* [annando]
Enhanced the federation with Mastodon [MrPetovan, realkinetix]
Enhanced the interaction with items in various places [annando]
Enhanced the storage back-end handling [nupplaphil]
Enhanced the handling of zmg BBCode elements [annando]
Enhanced the display of logs in the admin panel [fabrixxm]
Fixed a bug in the L10n functions not showing plural forms [annando]
Fixed a bug in following IMAP accounts [annando]
Fixed a bug preventing photos to be deleted [annando]
Fixed a bug preventing the display of the accounts avatar [annando]
Fixed a bug preventing following accounts from profiles visited [annando]
Removed the legacy DFRN transport layer, DFRN is now always using the Diaspora* transport layer [annando]
Removed the legacy OAuth server [annando]
Bumped the minimal PHP version to 7.2
Added user option to control how postings are shortened [annando]
Added Persian to the possible detected languages of a postings [MrPetovan]
Added Matrix account profile field [annando]
Added scheduled postings [annando]
Added transmission of push subscriptions [annando]
Added the possibility to put the config files in a different directory [nupplaphil]
Friendica Addons
Updates to the translation JA, ZH CN [translation teams]
advancedcontentfilter
allow filtering by attachments [MrPetovan]
blockbot
some good guys and bad guys added [annando]
irc
switch from freenode to libera.chat [tobiasd]
langfilter
improved performance [annando]
nitter
handle mobile links as well [tobiasd]
improve settings [tobiasd]
rendertime
rename "Parser" to "session" [annando]
Closed Issues
6101, 8038, 9378, 9723, 9871, 10262, 10491, 10502, 10514, 10558,
10568, 10587, 10603, 10617, 10640, 10651, 10672, 10692, 10698,
10699, 10705
Version 2021.07 (2021-07-04)
Friendica Core
@ -17,7 +67,7 @@ Version 2021.07 (2021-07-04)
Enhanced the possibilities to download the calendar [annando]
Enhanced the Vagrant development box setup [fabrixxm]
Enhanced the console commands [fabrixxm, mexon]
Enhances the support of PHP8 [nupplaphil, MrPetovan]
Enhanced the support of PHP8 [nupplaphil, MrPetovan]
Enhanced the link detection [annando]
Enhanced the worker task display in the admin panel [tobiasd]
Enhanced the installation wizard [tobiasd]

View file

@ -1 +1 @@
2021.09-rc
2021.12-dev

View file

@ -38,7 +38,7 @@ use Friendica\Util\DateTimeFormat;
define('FRIENDICA_PLATFORM', 'Friendica');
define('FRIENDICA_CODENAME', 'Siberian Iris');
define('FRIENDICA_VERSION', '2021.09-rc');
define('FRIENDICA_VERSION', '2021.12-dev');
define('DFRN_PROTOCOL_VERSION', '2.23');
define('NEW_TABLE_STRUCTURE_VERSION', 1288);

View file

@ -312,7 +312,7 @@ function conversation(App $a, array $items, $mode, $update, $preview = false, $o
. "'; </script>\r\n";
}
} elseif ($mode === 'profile') {
$items = conversation_add_children($items, false, $order, $uid);
$items = conversation_add_children($items, false, $order, local_user());
if (!$update) {
$tab = 'posts';
@ -400,7 +400,7 @@ function conversation(App $a, array $items, $mode, $update, $preview = false, $o
$formSecurityToken = BaseModule::getFormSecurityToken('contact_action');
if (!empty($items)) {
if (in_array($mode, ['community', 'contacts'])) {
if (in_array($mode, ['community', 'contacts', 'profile'])) {
$writable = true;
} else {
$writable = ($items[0]['uid'] == 0) && in_array($items[0]['network'], Protocol::FEDERATED);

View file

@ -44,10 +44,16 @@ class ContactBlock
* @hook contact_block_end (contacts=>array, output=>string)
* @return string
*/
public static function getHTML(array $profile)
public static function getHTML(array $profile, int $visitor_uid = null)
{
$o = '';
if (is_null($visitor_uid) || ($visitor_uid == $profile['uid'])) {
$contact_uid = $profile['uid'];
} else {
$contact_uid = 0;
}
$shown = DI::pConfig()->get($profile['uid'], 'system', 'display_friend_count', 24);
if ($shown == 0) {
return $o;
@ -82,7 +88,7 @@ class ContactBlock
$rel = [Contact::FOLLOWER, Contact::FRIEND];
}
$contact_ids_stmt = DBA::select('contact', ['id'], [
$personal_contacts = DBA::selectToArray('contact', ['uri-id'], [
'uid' => $profile['uid'],
'self' => false,
'blocked' => false,
@ -93,13 +99,10 @@ class ContactBlock
'network' => Protocol::FEDERATED,
], ['limit' => $shown]);
if (DBA::isResult($contact_ids_stmt)) {
$contact_ids = [];
while($contact = DBA::fetch($contact_ids_stmt)) {
$contact_ids[] = $contact["id"];
}
$contact_uriids = array_column($personal_contacts, 'uri-id');
$contacts_stmt = DBA::select('contact', ['id', 'uid', 'addr', 'url', 'name', 'thumb', 'avatar', 'network'], ['id' => $contact_ids]);
if (!empty($contact_uriids)) {
$contacts_stmt = DBA::select('contact', ['id', 'uid', 'addr', 'url', 'name', 'thumb', 'avatar', 'network'], ['uri-id' => $contact_uriids, 'uid' => $contact_uid]);
if (DBA::isResult($contacts_stmt)) {
$contacts_title = DI::l10n()->tt('%d Contact', '%d Contacts', $total);
@ -113,8 +116,6 @@ class ContactBlock
DBA::close($contacts_stmt);
}
DBA::close($contact_ids_stmt);
}
$tpl = Renderer::getMarkupTemplate('widget/contacts.tpl');

View file

@ -406,7 +406,7 @@ class Profile
}
if (!$block && $show_contacts) {
$contact_block = ContactBlock::getHTML($profile);
$contact_block = ContactBlock::getHTML($profile, local_user());
if (is_array($profile) && !$profile['hide-friends']) {
$contact_count = DBA::count('contact', [

View file

@ -80,7 +80,7 @@ class Thread
break;
case 'profile':
$this->profile_owner = $a->getProfileOwner();
$this->writable = Security::canWriteToUserWall($this->profile_owner);
$this->writable = Security::canWriteToUserWall($this->profile_owner) || $writable;
break;
case 'display':
$this->profile_owner = $a->getProfileOwner();

View file

@ -165,7 +165,7 @@ class JsonLD
}
catch (Exception $e) {
$compacted = false;
Logger::error('compacting error', ['line' => $e->getLine(), 'message' => $e->getMessage()]);
Logger::notice('compacting error', ['line' => $e->getLine(), 'exception' => $e]);
}
$json = json_decode(json_encode($compacted, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE), true);

View file

@ -1116,7 +1116,11 @@ class ParseUrl
}
$content = JsonLD::fetchElement($jsonld, 'image', 'url', '@type', 'ImageObject');
if (!empty($content)) {
if (!empty($content) && !is_string($content)) {
Logger::notice('Unexpected return value for the author image', ['content' => $content]);
}
if (!empty($content) && is_string($content)) {
$jsonldinfo['author_img'] = trim($content);
}

View file

@ -25,7 +25,7 @@ msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-10 00:27+0000\n"
"PO-Revision-Date: 2021-09-11 07:34+0000\n"
"PO-Revision-Date: 2021-09-22 05:47+0000\n"
"Last-Translator: Alexander An <ravnina@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n"
"MIME-Version: 1.0\n"
@ -174,7 +174,7 @@ msgstr ""
#: include/conversation.php:680
#, php-format
msgid "%s is participating in this thread."
msgstr "%s участвует в этой ветке."
msgstr "%s участвует в этом обсуждении"
#: include/conversation.php:683
msgid "Stored"
@ -204,7 +204,7 @@ msgstr ""
#: include/conversation.php:844 view/theme/frio/theme.php:323
msgid "Follow Thread"
msgstr "Подписаться на тему"
msgstr "Подписаться на обсуждение"
#: include/conversation.php:845 src/Model/Contact.php:1050
msgid "View Status"
@ -481,7 +481,7 @@ msgstr "Категории (список через запятую)"
#: include/conversation.php:1143 src/Module/Item/Compose.php:172
msgid "Scheduled at"
msgstr ""
msgstr "Запланировано на"
#: include/conversation.php:1147 mod/editpost.php:108
msgid "Permission settings"
@ -4636,7 +4636,7 @@ msgstr ""
#: src/Model/Notification.php:189
#, php-format
msgid "%1$s had started following you"
msgstr ""
msgstr "%1$s подписались на вас"
#: src/Model/Notification.php:259
#, php-format
@ -4681,7 +4681,7 @@ msgstr ""
#: src/Model/Notification.php:297
#, php-format
msgid "%1$s commented in your thread %2$s"
msgstr ""
msgstr "%1$s ответил в вашем обсуждении %2$s"
#: src/Model/Notification.php:301
#, php-format
@ -4691,27 +4691,27 @@ msgstr ""
#: src/Model/Notification.php:307
#, php-format
msgid "%1$s commented in their thread %2$s"
msgstr ""
msgstr "%1$s ответил в своём обсуждении %2$s"
#: src/Model/Notification.php:309
#, php-format
msgid "%1$s commented in their thread"
msgstr ""
msgstr "%1$s ответил в своём обсуждении"
#: src/Model/Notification.php:311
#, php-format
msgid "%1$s commented in the thread %2$s from %3$s"
msgstr ""
msgstr "%1$s ответил в обсуждении %2$s от %3$s"
#: src/Model/Notification.php:313
#, php-format
msgid "%1$s commented in the thread from %3$s"
msgstr ""
msgstr "%1$s ответил в обсуждении от %3$s"
#: src/Model/Notification.php:318
#, php-format
msgid "%1$s commented on your thread %2$s"
msgstr ""
msgstr "%1$s ответил в вашем обсуждении %2$s"
#: src/Model/Notification.php:323
#, php-format
@ -7057,16 +7057,16 @@ msgstr ""
#: src/Module/Api/Mastodon/Statuses/Bookmark.php:51
msgid "Only starting posts can be bookmarked"
msgstr ""
msgstr "Только заглавные записи могут быть добавлены в закладки"
#: src/Module/Api/Mastodon/Statuses/Mute.php:50
msgid "Only starting posts can be muted"
msgstr ""
msgstr "Только заглавные записи можно заглушить"
#: src/Module/Api/Mastodon/Statuses/Pin.php:50
#: src/Module/Api/Mastodon/Statuses/Unpin.php:50
msgid "Only starting posts can be pinned"
msgstr ""
msgstr "Только заглавные записи можно закрепить"
#: src/Module/Api/Mastodon/Statuses/Reblog.php:53
#, php-format
@ -7218,11 +7218,11 @@ msgstr "Только вы можете это видеть"
#: src/Module/BaseProfile.php:115 src/Module/Profile/Schedule.php:82
msgid "Scheduled Posts"
msgstr ""
msgstr "Запланированные записи"
#: src/Module/BaseProfile.php:118
msgid "Posts that are scheduled for publishing"
msgstr ""
msgstr "Записи, публикация которых запланирована"
#: src/Module/BaseProfile.php:137 src/Module/BaseProfile.php:140
msgid "Tips for New Members"
@ -7589,7 +7589,7 @@ msgstr "Пакетные действия"
#: src/Module/Contact.php:886
msgid "Conversations started by this contact"
msgstr ""
msgstr "Диалоги этого контакта"
#: src/Module/Contact.php:891
msgid "Posts and Comments"
@ -8902,7 +8902,7 @@ msgstr "Комментарии %s"
#: src/Module/Profile/Schedule.php:84
msgid "Scheduled"
msgstr ""
msgstr "Запланировано"
#: src/Module/Profile/Schedule.php:85
msgid "Content"
@ -9402,11 +9402,11 @@ msgstr "Автоматически подгружать новые записи,
#: src/Module/Settings/Display.php:215
msgid "Enable Smart Threading"
msgstr ""
msgstr "Включить умное ветвление обсуждений"
#: src/Module/Settings/Display.php:215
msgid "Enable the automatic suppression of extraneous thread indentation."
msgstr ""
msgstr "Включить автоматическое удаление излишних отступов в ветках обсуждений."
#: src/Module/Settings/Display.php:216
msgid "Display the Dislike feature"
@ -10263,7 +10263,7 @@ msgstr "Редактировать"
#: src/Object/Post.php:214
msgid "Pinned item"
msgstr ""
msgstr "Закреплённая запись"
#: src/Object/Post.php:218
msgid "Delete globally"
@ -10296,11 +10296,11 @@ msgstr "Возможно"
#: src/Object/Post.php:303
msgid "Ignore thread"
msgstr "Игнорировать тему"
msgstr "Игнорировать обсуждение"
#: src/Object/Post.php:304
msgid "Unignore thread"
msgstr "Не игнорировать тему"
msgstr "Не игнорировать обсуждение"
#: src/Object/Post.php:305
msgid "Toggle ignore status"
@ -10308,31 +10308,31 @@ msgstr "Переключить игнорирование"
#: src/Object/Post.php:315
msgid "Add star"
msgstr ""
msgstr "Добавить в Избранное"
#: src/Object/Post.php:316
msgid "Remove star"
msgstr ""
msgstr "Убрать из Избранного"
#: src/Object/Post.php:317
msgid "Toggle star status"
msgstr ""
msgstr "Добавить/убрать из Избранного"
#: src/Object/Post.php:328
msgid "Pin"
msgstr ""
msgstr "Закрепить"
#: src/Object/Post.php:329
msgid "Unpin"
msgstr ""
msgstr "Открепить"
#: src/Object/Post.php:330
msgid "Toggle pin status"
msgstr ""
msgstr "Закрепить/открепить"
#: src/Object/Post.php:333
msgid "Pinned"
msgstr ""
msgstr "Закреплено"
#: src/Object/Post.php:338
msgid "Add tag"
@ -10755,7 +10755,7 @@ msgstr ""
#: view/theme/frio/config.php:166
msgid "Pink"
msgstr ""
msgstr "Розовый"
#: view/theme/frio/config.php:167
msgid "Copy or paste schemestring"

View file

@ -40,10 +40,10 @@ $a->strings["You are following %s."] = "Вы подписаны на %s.";
$a->strings["Tagged"] = "Отмечено";
$a->strings["%s reshared this."] = "%s поделился этим.";
$a->strings["Reshared"] = "Репост";
$a->strings["%s is participating in this thread."] = "%s участвует в этой ветке.";
$a->strings["%s is participating in this thread."] = "%s участвует в этом обсуждении";
$a->strings["Relayed"] = "Ретранслировано";
$a->strings["Fetched"] = "Загружено";
$a->strings["Follow Thread"] = "Подписаться на тему";
$a->strings["Follow Thread"] = "Подписаться на обсуждение";
$a->strings["View Status"] = "Просмотреть статус";
$a->strings["View Profile"] = "Просмотреть профиль";
$a->strings["View Photos"] = "Просмотреть фото";
@ -100,6 +100,7 @@ $a->strings["Clear browser location"] = "Очистить местонахожд
$a->strings["clear location"] = "убрать местонахождение";
$a->strings["Set title"] = "Установить заголовок";
$a->strings["Categories (comma-separated list)"] = "Категории (список через запятую)";
$a->strings["Scheduled at"] = "Запланировано на";
$a->strings["Permission settings"] = "Настройки разрешений";
$a->strings["Permissions"] = "Разрешения";
$a->strings["Public post"] = "Публичное сообщение";
@ -975,6 +976,13 @@ $a->strings["Content warning: %s"] = "Предупреждение о конте
$a->strings["bytes"] = "байт";
$a->strings["View on separate page"] = "Посмотреть в отдельной вкладке";
$a->strings["[no subject]"] = "[без темы]";
$a->strings["%1\$s had started following you"] = "%1\$s подписались на вас";
$a->strings["%1\$s commented in your thread %2\$s"] = "%1\$s ответил в вашем обсуждении %2\$s";
$a->strings["%1\$s commented in their thread %2\$s"] = "%1\$s ответил в своём обсуждении %2\$s";
$a->strings["%1\$s commented in their thread"] = "%1\$s ответил в своём обсуждении";
$a->strings["%1\$s commented in the thread %2\$s from %3\$s"] = "%1\$s ответил в обсуждении %2\$s от %3\$s";
$a->strings["%1\$s commented in the thread from %3\$s"] = "%1\$s ответил в обсуждении от %3\$s";
$a->strings["%1\$s commented on your thread %2\$s"] = "%1\$s ответил в вашем обсуждении %2\$s";
$a->strings["Edit profile"] = "Редактировать профиль";
$a->strings["Change profile photo"] = "Изменить фото профиля";
$a->strings["Homepage:"] = "Домашняя страничка:";
@ -1405,6 +1413,9 @@ $a->strings["Request date"] = "Запрос даты";
$a->strings["No registrations."] = "Нет регистраций.";
$a->strings["Note from the user"] = "Сообщение от пользователя";
$a->strings["Deny"] = "Отклонить";
$a->strings["Only starting posts can be bookmarked"] = "Только заглавные записи могут быть добавлены в закладки";
$a->strings["Only starting posts can be muted"] = "Только заглавные записи можно заглушить";
$a->strings["Only starting posts can be pinned"] = "Только заглавные записи можно закрепить";
$a->strings["Contact not found"] = "Контакт не найден";
$a->strings["Profile not found"] = "Профиль не найден";
$a->strings["No installed applications."] = "Нет установленных приложений.";
@ -1427,6 +1438,8 @@ $a->strings["Diagnostics"] = "Диагностика";
$a->strings["User registrations waiting for confirmation"] = "Регистрации пользователей, ожидающие подтверждения";
$a->strings["Profile Details"] = "Информация о вас";
$a->strings["Only You Can See This"] = "Только вы можете это видеть";
$a->strings["Scheduled Posts"] = "Запланированные записи";
$a->strings["Posts that are scheduled for publishing"] = "Записи, публикация которых запланирована";
$a->strings["Tips for New Members"] = "Советы для новых участников";
$a->strings["People Search - %s"] = "Поиск по людям - %s";
$a->strings["Forum Search - %s"] = "Поиск по форумам - %s";
@ -1510,6 +1523,7 @@ $a->strings["Search your contacts"] = "Поиск ваших контактов"
$a->strings["Results for: %s"] = "Результаты для: %s";
$a->strings["Update"] = "Обновление";
$a->strings["Batch Actions"] = "Пакетные действия";
$a->strings["Conversations started by this contact"] = "Диалоги этого контакта";
$a->strings["Posts and Comments"] = "Записи и комментарии";
$a->strings["View all known contacts"] = "Показать все известные контакты";
$a->strings["Advanced Contact Settings"] = "Дополнительные Настройки Контакта";
@ -1764,6 +1778,7 @@ $a->strings["View as"] = "Посмотреть как";
$a->strings["%s's timeline"] = "Лента %s";
$a->strings["%s's posts"] = "Записи %s";
$a->strings["%s's comments"] = "Комментарии %s";
$a->strings["Scheduled"] = "Запланировано";
$a->strings["Only parent users can create additional accounts."] = "Только основные пользователи могут создавать дополнительные учётные записи.";
$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Если вы не знакомы с OpenID, пожалуйста, оставьте это поле пустым и заполните остальные элементы.";
$a->strings["Your OpenID (optional): "] = "Ваш OpenID (необязательно):";
@ -1858,6 +1873,8 @@ $a->strings["Minimum of 10 seconds. Enter -1 to disable it."] = "Минимум
$a->strings["Auto update may add new posts at the top of the post stream pages, which can affect the scroll position and perturb normal reading if it happens anywhere else the top of the page."] = "Автообновление может загружать новые записи в начало ленты, что может изменить положение прокрутки и помешать чтению, если вы находитесь не в начале страницы.";
$a->strings["Infinite scroll"] = "Бесконечная прокрутка";
$a->strings["Automatic fetch new items when reaching the page end."] = "Автоматически подгружать новые записи, когда вы оказываетесь в конце страницы.";
$a->strings["Enable Smart Threading"] = "Включить умное ветвление обсуждений";
$a->strings["Enable the automatic suppression of extraneous thread indentation."] = "Включить автоматическое удаление излишних отступов в ветках обсуждений.";
$a->strings["Beginning of week:"] = "Начало недели:";
$a->strings["Profile Name is required."] = "Необходимо имя профиля.";
$a->strings["Profile couldn't be updated."] = "Профиль не получилось обновить.";
@ -1962,6 +1979,7 @@ $a->strings["%s posted an update."] = "%s отправил/а/ обновлен
$a->strings["This entry was edited"] = "Эта запись была отредактирована";
$a->strings["Private Message"] = "Личное сообщение";
$a->strings["Edit"] = "Редактировать";
$a->strings["Pinned item"] = "Закреплённая запись";
$a->strings["Delete globally"] = "Удалить везде";
$a->strings["Remove locally"] = "Убрать для себя";
$a->strings["Block %s"] = "Заблокировать %s";
@ -1969,9 +1987,16 @@ $a->strings["Save to folder"] = "Сохранить в папку";
$a->strings["I will attend"] = "Я буду";
$a->strings["I will not attend"] = "Меня не будет";
$a->strings["I might attend"] = "Возможно";
$a->strings["Ignore thread"] = "Игнорировать тему";
$a->strings["Unignore thread"] = "Не игнорировать тему";
$a->strings["Ignore thread"] = "Игнорировать обсуждение";
$a->strings["Unignore thread"] = "Не игнорировать обсуждение";
$a->strings["Toggle ignore status"] = "Переключить игнорирование";
$a->strings["Add star"] = "Добавить в Избранное";
$a->strings["Remove star"] = "Убрать из Избранного";
$a->strings["Toggle star status"] = "Добавить/убрать из Избранного";
$a->strings["Pin"] = "Закрепить";
$a->strings["Unpin"] = "Открепить";
$a->strings["Toggle pin status"] = "Закрепить/открепить";
$a->strings["Pinned"] = "Закреплено";
$a->strings["Add tag"] = "Добавить тег";
$a->strings["Quote share this"] = "Поделиться с комментарием";
$a->strings["Quote Share"] = "Цитировать";
@ -2034,3 +2059,4 @@ $a->strings["minutes"] = "мин.";
$a->strings["second"] = "секунда";
$a->strings["seconds"] = "сек.";
$a->strings["%1\$d %2\$s ago"] = "%1\$d %2\$s назад";
$a->strings["Pink"] = "Розовый";