mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-12-23 05:23:17 +00:00
commit
a691b27829
14 changed files with 559 additions and 189 deletions
|
@ -118,6 +118,9 @@
|
|||
- Updated PlaceController, require authentication. ([e7783af6](https://github.com/pixelfed/pixelfed/commit/e7783af6))
|
||||
- Updated PublicApiController, disable legacy public access to local timeline. ([6ba7d433](https://github.com/pixelfed/pixelfed/commit/6ba7d433))
|
||||
- Updated DiscoverController, cache public tag feed and only include local posts for unauthenticated users. ([0541aed5](https://github.com/pixelfed/pixelfed/commit/0541aed5))
|
||||
- Updated DiscoverController, improve tag feed performance. ([d8ff40eb](https://github.com/pixelfed/pixelfed/commit/d8ff40eb))
|
||||
- Updated ApiV1Controller, fix timeline pagination. ([a5cdc28b](https://github.com/pixelfed/pixelfed/commit/a5cdc28b))
|
||||
- Updated ApiV1Controller, add missing pagination header. ([5649873a](https://github.com/pixelfed/pixelfed/commit/5649873a))
|
||||
- ([](https://github.com/pixelfed/pixelfed/commit/))
|
||||
|
||||
## [v0.11.2 (2022-01-09)](https://github.com/pixelfed/pixelfed/compare/v0.11.1...v0.11.2)
|
||||
|
|
|
@ -1684,7 +1684,7 @@ class ApiV1Controller extends Controller
|
|||
->whereIn('profile_id', $following)
|
||||
->whereIn('visibility',['public', 'unlisted', 'private'])
|
||||
->latest()
|
||||
->take($limit)
|
||||
->take(($limit * 2))
|
||||
->get()
|
||||
->map(function($s) use($pid) {
|
||||
$status = StatusService::getMastodon($s['id']);
|
||||
|
@ -1701,8 +1701,8 @@ class ApiV1Controller extends Controller
|
|||
->filter(function($status) {
|
||||
return $status && isset($status['account']);
|
||||
})
|
||||
->values()
|
||||
->toArray();
|
||||
->take($limit)
|
||||
->values();
|
||||
} else {
|
||||
$res = Status::select(
|
||||
'id',
|
||||
|
@ -1715,7 +1715,7 @@ class ApiV1Controller extends Controller
|
|||
->whereIn('profile_id', $following)
|
||||
->whereIn('visibility',['public', 'unlisted', 'private'])
|
||||
->latest()
|
||||
->take($limit)
|
||||
->take(($limit * 2))
|
||||
->get()
|
||||
->map(function($s) use($pid) {
|
||||
$status = StatusService::getMastodon($s['id']);
|
||||
|
@ -1732,11 +1732,118 @@ class ApiV1Controller extends Controller
|
|||
->filter(function($status) {
|
||||
return $status && isset($status['account']);
|
||||
})
|
||||
->values()
|
||||
->toArray();
|
||||
->take($limit)
|
||||
->values();
|
||||
}
|
||||
|
||||
return $this->json($res);
|
||||
$baseUrl = config('app.url') . '/api/v1/timelines/home?limit=' . $limit . '&';
|
||||
$minId = $res->map(function($s) {
|
||||
return ['id' => $s['id']];
|
||||
})->min('id');
|
||||
$maxId = $res->map(function($s) {
|
||||
return ['id' => $s['id']];
|
||||
})->max('id');
|
||||
|
||||
if($minId == $maxId) {
|
||||
$minId = null;
|
||||
}
|
||||
|
||||
if($maxId) {
|
||||
$link = '<'.$baseUrl.'max_id='.$maxId.'>; rel="next"';
|
||||
}
|
||||
|
||||
if($minId) {
|
||||
$link = '<'.$baseUrl.'min_id='.$minId.'>; rel="prev"';
|
||||
}
|
||||
|
||||
if($maxId && $minId) {
|
||||
$link = '<'.$baseUrl.'max_id='.$maxId.'>; rel="next",<'.$baseUrl.'min_id='.$minId.'>; rel="prev"';
|
||||
}
|
||||
|
||||
$headers = isset($link) ? ['Link' => $link] : [];
|
||||
return $this->json($res->toArray(), 200, $headers);
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /api/v1/timelines/public
|
||||
*
|
||||
*
|
||||
* @return StatusTransformer
|
||||
*/
|
||||
public function timelinePublic(Request $request)
|
||||
{
|
||||
$this->validate($request,[
|
||||
'min_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX,
|
||||
'max_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX,
|
||||
'limit' => 'nullable|integer|max:100'
|
||||
]);
|
||||
|
||||
$min = $request->input('min_id');
|
||||
$max = $request->input('max_id');
|
||||
$limit = $request->input('limit') ?? 20;
|
||||
$user = $request->user();
|
||||
$filtered = $user ? UserFilterService::filters($user->profile_id) : [];
|
||||
|
||||
Cache::remember('api:v1:timelines:public:cache_check', 10368000, function() {
|
||||
if(PublicTimelineService::count() == 0) {
|
||||
PublicTimelineService::warmCache(true, 400);
|
||||
}
|
||||
});
|
||||
|
||||
if ($max) {
|
||||
$feed = PublicTimelineService::getRankedMaxId($max, $limit + 5);
|
||||
} else if ($min) {
|
||||
$feed = PublicTimelineService::getRankedMinId($min, $limit + 5);
|
||||
} else {
|
||||
$feed = PublicTimelineService::get(0, $limit + 5);
|
||||
}
|
||||
|
||||
$res = collect($feed)
|
||||
->map(function($k) use($user) {
|
||||
$status = StatusService::getMastodon($k);
|
||||
if(!$status || !isset($status['account']) || !isset($status['account']['id'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if($user) {
|
||||
$status['favourited'] = (bool) LikeService::liked($user->profile_id, $k);
|
||||
$status['reblogged'] = (bool) ReblogService::get($user->profile_id, $status['id']);
|
||||
}
|
||||
return $status;
|
||||
})
|
||||
->filter(function($s) use($filtered) {
|
||||
return $s && isset($s['account']) && in_array($s['account']['id'], $filtered) == false;
|
||||
})
|
||||
->take($limit)
|
||||
->values();
|
||||
// ->toArray();
|
||||
|
||||
$baseUrl = config('app.url') . '/api/v1/timelines/public?limit=' . $limit . '&';
|
||||
$minId = $res->map(function($s) {
|
||||
return ['id' => $s['id']];
|
||||
})->min('id');
|
||||
$maxId = $res->map(function($s) {
|
||||
return ['id' => $s['id']];
|
||||
})->max('id');
|
||||
|
||||
if($minId == $maxId) {
|
||||
$minId = null;
|
||||
}
|
||||
|
||||
if($maxId) {
|
||||
$link = '<'.$baseUrl.'max_id='.$maxId.'>; rel="next"';
|
||||
}
|
||||
|
||||
if($minId) {
|
||||
$link = '<'.$baseUrl.'min_id='.$minId.'>; rel="prev"';
|
||||
}
|
||||
|
||||
if($maxId && $minId) {
|
||||
$link = '<'.$baseUrl.'max_id='.$maxId.'>; rel="next",<'.$baseUrl.'min_id='.$minId.'>; rel="prev"';
|
||||
}
|
||||
|
||||
$headers = isset($link) ? ['Link' => $link] : [];
|
||||
return $this->json($res->toArray(), 200, $headers);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1805,62 +1912,6 @@ class ApiV1Controller extends Controller
|
|||
return $this->json($dms);
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /api/v1/timelines/public
|
||||
*
|
||||
*
|
||||
* @return StatusTransformer
|
||||
*/
|
||||
public function timelinePublic(Request $request)
|
||||
{
|
||||
$this->validate($request,[
|
||||
'min_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX,
|
||||
'max_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX,
|
||||
'limit' => 'nullable|integer|max:100'
|
||||
]);
|
||||
|
||||
$min = $request->input('min_id');
|
||||
$max = $request->input('max_id');
|
||||
$limit = $request->input('limit') ?? 20;
|
||||
$user = $request->user();
|
||||
$filtered = $user ? UserFilterService::filters($user->profile_id) : [];
|
||||
|
||||
Cache::remember('api:v1:timelines:public:cache_check', 10368000, function() {
|
||||
if(PublicTimelineService::count() == 0) {
|
||||
PublicTimelineService::warmCache(true, 400);
|
||||
}
|
||||
});
|
||||
|
||||
if ($max) {
|
||||
$feed = PublicTimelineService::getRankedMaxId($max, $limit);
|
||||
} else if ($min) {
|
||||
$feed = PublicTimelineService::getRankedMinId($min, $limit);
|
||||
} else {
|
||||
$feed = PublicTimelineService::get(0, $limit);
|
||||
}
|
||||
|
||||
$res = collect($feed)
|
||||
->map(function($k) use($user) {
|
||||
$status = StatusService::getMastodon($k);
|
||||
if(!$status || !isset($status['account']) || !isset($status['account']['id'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if($user) {
|
||||
$status['favourited'] = (bool) LikeService::liked($user->profile_id, $k);
|
||||
$status['reblogged'] = (bool) ReblogService::get($user->profile_id, $status['id']);
|
||||
}
|
||||
return $status;
|
||||
})
|
||||
->filter(function($s) use($filtered) {
|
||||
return $s && isset($s['account']) && in_array($s['account']['id'], $filtered) == false;
|
||||
})
|
||||
->values()
|
||||
->toArray();
|
||||
|
||||
return $this->json($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /api/v1/statuses/{id}
|
||||
*
|
||||
|
|
19
resources/lang/uk/auth.php
Normal file
19
resources/lang/uk/auth.php
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Переклад рядків входу
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Наступні рядки використовуються при автентифікації для різних
|
||||
| повідомлень, які ми показуємо користувачкам і користувачам. Можете
|
||||
| вільно редагувати ці переклади відповідно до потреб вашого застосунку.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'Особові дані не збігаються з нашими записами.',
|
||||
'throttle' => 'Забагато спроб входу. Повторіть спробу через :seconds секунд.',
|
||||
|
||||
];
|
11
resources/lang/uk/exception.php
Normal file
11
resources/lang/uk/exception.php
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'compose' => [
|
||||
'invalid' => [
|
||||
'album' => 'Мусить містити знімок, відеозапис чи декілька знімків.',
|
||||
],
|
||||
],
|
||||
|
||||
];
|
28
resources/lang/uk/helpcenter.php
Normal file
28
resources/lang/uk/helpcenter.php
Normal file
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'helpcenter' => 'Довідка',
|
||||
'whatsnew' => 'Що нового',
|
||||
|
||||
'gettingStarted' => 'Як розпочати',
|
||||
'sharingMedia' => 'Поширення медіа',
|
||||
'profile' => 'Профіль',
|
||||
'stories' => 'Сторі',
|
||||
'hashtags' => 'Хештеги',
|
||||
'discover' => 'Цікаве',
|
||||
'directMessages' => 'Прямі листи',
|
||||
'timelines' => 'Стрічки',
|
||||
'embed' => 'Експорт',
|
||||
|
||||
'communityGuidelines' => 'Правила спільноти',
|
||||
'whatIsTheFediverse' => 'Що таке федіверс?',
|
||||
'controllingVisibility' => 'Керування видимістю',
|
||||
'blockingAccounts' => 'Блокування облікових записів',
|
||||
'safetyTips' => 'Поради безпеки',
|
||||
'reportSomething' => 'Скарга на щось',
|
||||
'dataPolicy' => 'Політика даних',
|
||||
|
||||
'taggingPeople' => 'Позначення людей'
|
||||
|
||||
];
|
19
resources/lang/uk/navmenu.php
Normal file
19
resources/lang/uk/navmenu.php
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'search' => 'Пошук',
|
||||
'home' => 'Дім',
|
||||
'local' => 'Поруч',
|
||||
'network' => 'Мережа',
|
||||
'discover' => 'Цікаве',
|
||||
'viewMyProfile' => 'Переглянути свій профіль',
|
||||
'myProfile' => 'Мій профіль',
|
||||
'myTimeline' => 'Моя стрічка',
|
||||
'publicTimeline' => 'Загальнодоступна стрічка',
|
||||
'remoteFollow' => 'Стеження ззовні',
|
||||
'settings' => 'Параметри',
|
||||
'admin' => 'Адміністрування',
|
||||
'logout' => 'Вийти',
|
||||
'directMessages' => 'Прямі листи',
|
||||
'composePost' => 'Написати допис',
|
||||
];
|
12
resources/lang/uk/notification.php
Normal file
12
resources/lang/uk/notification.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'likedPhoto' => 'ставить уподобання під ваш допис.',
|
||||
'likedComment' => 'ставить уподобання під ваш коментар.',
|
||||
'startedFollowingYou' => 'починає за вами стежити.',
|
||||
'commented' => 'коментує ваш допис.',
|
||||
'mentionedYou' => 'згадує вам.',
|
||||
'shared' => 'поширює ваш допис.',
|
||||
|
||||
];
|
19
resources/lang/uk/pagination.php
Normal file
19
resources/lang/uk/pagination.php
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Переклади рядків пагінації
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Бібліотека поділу на сторінки використовує ці переклади рядків
|
||||
| у посиланнях на сторінки. Можете вільно редагувати ці переклади
|
||||
| відповідно до потреб вашого застосунку.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« Назад',
|
||||
'next' => 'Далі »',
|
||||
|
||||
];
|
22
resources/lang/uk/passwords.php
Normal file
22
resources/lang/uk/passwords.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Переклади рядків скидання паролю
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Ці переклади — усталені рядки, що відповідають причинам, якими
|
||||
| брокер паролів пояснює, чому спроба оновлення пароля не вдалася,
|
||||
| наприклад через хибний токен чи хибний новий пароль.
|
||||
|
|
||||
*/
|
||||
|
||||
'password' => 'Паролі мусять містити принаймні шість символів і збігатися.',
|
||||
'reset' => 'Пароль скинуто!',
|
||||
'sent' => 'Якщо ваша адреса е-пошти — в нашій базі, посилання для відновлення пароля е-пошти буде надіслано за кілька хвилин. Перевірте теку спаму, якщо лист не надходить.',
|
||||
'token' => 'Токен відновлення пароля хибний.',
|
||||
'user' => 'Якщо ваша адреса е-пошти — в нашій базі, посилання для відновлення пароля е-пошти буде надіслано за кілька хвилин. Перевірте теку спаму, якщо лист не надходить.',
|
||||
|
||||
];
|
15
resources/lang/uk/profile.php
Normal file
15
resources/lang/uk/profile.php
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'emptyTimeline' => 'Дописів іще нема.',
|
||||
'emptyFollowers' => 'Ніхто ще не стежить.',
|
||||
'emptyFollowing' => 'Ще ні за ким не стежить.',
|
||||
'emptySaved' => 'Ви ще не зберігали дописів.',
|
||||
'savedWarning' => 'Лише ви можете переглянути, що зберегли',
|
||||
'privateProfileWarning' => 'Обліковий запис приватний',
|
||||
'alreadyFollow' => 'Уже стежите за :username?',
|
||||
'loginToSeeProfile' => 'для перегляду їхніх фото й відео.',
|
||||
|
||||
'status.disabled.header' => 'Профіль недоступний',
|
||||
'status.disabled.body' => 'На жаль, профіль зараз недоступний. Будь ласка, повторіть спробу згодом.',
|
||||
];
|
20
resources/lang/uk/site.php
Normal file
20
resources/lang/uk/site.php
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'about' => 'Про застосунок',
|
||||
'help' => 'Довідка',
|
||||
'language' => 'Мова',
|
||||
'fediverse' => 'Федіверс',
|
||||
'opensource' => 'Вільне ПЗ',
|
||||
'terms' => 'Умови',
|
||||
'privacy' => 'Приватність',
|
||||
'l10nWip' => 'Переклад іще в роботі',
|
||||
'currentLocale' => 'Поточна мова',
|
||||
'selectLocale' => 'Оберіть підтримувану мову',
|
||||
'contact' => 'Сконтактувати',
|
||||
'contact-us' => 'Напишіть нам',
|
||||
'places' => 'Місця',
|
||||
'profiles' => 'Профілі',
|
||||
|
||||
];
|
7
resources/lang/uk/timeline.php
Normal file
7
resources/lang/uk/timeline.php
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'emptyPersonalTimeline' => 'Ваша стрічка порожня.',
|
||||
|
||||
];
|
122
resources/lang/uk/validation.php
Normal file
122
resources/lang/uk/validation.php
Normal file
|
@ -0,0 +1,122 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages here.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => 'Потрібно прийняти :attribute.',
|
||||
'active_url' => ':attribute — хибна URL-адреса.',
|
||||
'after' => ':attribute мусить бути пізніше, ніж :date.',
|
||||
'after_or_equal' => ':attribute мусить бути не раніше, ніж :date.',
|
||||
'alpha' => ':attribute може містити лише літери.',
|
||||
'alpha_dash' => ':attribute може містити лише літери, цифри й дефіси.',
|
||||
'alpha_num' => ':attribute може містити лише літери й цифри.',
|
||||
'array' => ':attribute мусить бути масивом.',
|
||||
'before' => ':attribute мусить бути раніше, ніж :date.',
|
||||
'before_or_equal' => ':attribute мусить бути не пізніше, ніж :date.',
|
||||
'between' => [
|
||||
'numeric' => ':attribute мусить бути між :min і :max.',
|
||||
'file' => ':attribute мусить містити від :min до :max кілобайтів.',
|
||||
'string' => ':attribute мусить містити від :min до :max знаків.',
|
||||
'array' => ':attribute мусить містити від :min до :max пунктів.',
|
||||
],
|
||||
'boolean' => 'Поле :attribute мусить бути істинним чи хибним.',
|
||||
'confirmed' => 'Підтвердження :attribute не збігається.',
|
||||
'date' => ':attribute — хибна дата.',
|
||||
'date_format' => ':attribute не відповідає формату :format.',
|
||||
'different' => ':attribute та :other мусять відрізнятися.',
|
||||
'digits' => ':attribute мусить містити :digits цифр.',
|
||||
'digits_between' => ':attribute мусить містити від :min до :max цифр.',
|
||||
'dimensions' => ':attribute має хибну ширину чи висоту.',
|
||||
'distinct' => 'Поле :attribute містить дубль.',
|
||||
'email' => ':attribute мусить бути чинною адресою е-пошти.',
|
||||
'exists' => ':attribute — не ок.',
|
||||
'file' => ':attribute мусить бути файлом.',
|
||||
'filled' => 'Полю :attribute бракує значення.',
|
||||
'image' => ':attribute мусить бути зображенням.',
|
||||
'in' => ':attribute — не ок.',
|
||||
'in_array' => 'Поля :attribute нема серед :other.',
|
||||
'integer' => ':attribute мусить бути числом.',
|
||||
'ip' => ':attribute мусить бути чинною IP-адресою.',
|
||||
'ipv4' => ':attribute мусить бути чинною IPv4-адресою.',
|
||||
'ipv6' => ':attribute мусить бути чинною IPv6-адресою.',
|
||||
'json' => ':attribute мусить бути чинним JSON-рядком.',
|
||||
'max' => [
|
||||
'numeric' => ':attribute мусить не перевищувати :max.',
|
||||
'file' => ':attribute мусить містити не більше, ніж :max кілобайтів.',
|
||||
'string' => ':attribute мусить містити не більше, ніж :max символів.',
|
||||
'array' => ':attribute мусить містити не більше, ніж :max пунктів.',
|
||||
],
|
||||
'mimes' => ':attribute мусить бути файлом: :values.',
|
||||
'mimetypes' => ':attribute мусить бути файлом: :values.',
|
||||
'min' => [
|
||||
'numeric' => ':attribute мусить бути не менше, ніж :max.',
|
||||
'file' => ':attribute мусить містити не менше, ніж :max кілобайтів.',
|
||||
'string' => ':attribute мусить містити не менше, ніж :max символів.',
|
||||
'array' => ':attribute мусить містити не менше, ніж :max пунктів.',
|
||||
],
|
||||
'not_in' => ':attribute містить хибний вибір.',
|
||||
'not_regex' => 'Формат :attribute хибний.',
|
||||
'numeric' => ':attribute мусить бути числом.',
|
||||
'present' => 'Бракує поля :attribute.',
|
||||
'regex' => 'Формат :attribute хибний.',
|
||||
'required' => "Поле :attribute обов'язкове.",
|
||||
'required_if' => "Поле :attribute обов'язкове, коли :other — :value.",
|
||||
'required_unless' => "Поле :attribute обов'язкове unless :other is in :values.",
|
||||
'required_with' => "Поле :attribute обов'язкове, коли є :values.",
|
||||
'required_with_all' => "Поле :attribute обов'язкове, коли є :values.",
|
||||
'required_without' => "Поле :attribute обов'язкове, коли бракує :values.",
|
||||
'required_without_all' => "Поле :attribute обов'язкове, коли бракує :values.",
|
||||
'same' => 'The :attribute and :other must match.',
|
||||
'size' => [
|
||||
'numeric' => ':attribute мусить бути :size.',
|
||||
'file' => ':attribute мусить містити :size кілобайтів.',
|
||||
'string' => ':attribute мусить містити :size символів.',
|
||||
'array' => ':attribute мусить містити :size пунктів.',
|
||||
],
|
||||
'string' => ':attribute мусить бути рядком.',
|
||||
'timezone' => ':attribute мусить бути чинним поясом.',
|
||||
'unique' => ':attribute уже зайнято.',
|
||||
'uploaded' => 'Не вдалося вивантажити :attribute.',
|
||||
'url' => 'Формат :attribute хибний.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'custom-message',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap attribute place-holders
|
||||
| with something more reader friendly such as E-Mail Address instead
|
||||
| of "email". This simply helps us make messages a little cleaner.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [],
|
||||
|
||||
];
|
|
@ -3,184 +3,206 @@
|
|||
return [
|
||||
|
||||
'common' => [
|
||||
'comment' => 'Comment',
|
||||
'commented' => 'Commented',
|
||||
'comments' => 'Comments',
|
||||
'like' => 'Like',
|
||||
'liked' => 'Liked',
|
||||
'likes' => 'Likes',
|
||||
'share' => 'Share',
|
||||
'shared' => 'Shared',
|
||||
'shares' => 'Shares',
|
||||
'unshare' => 'Unshare',
|
||||
'comment' => 'Коментувати',
|
||||
'commented' => 'Прокоментовано',
|
||||
'comments' => 'Коментарі',
|
||||
'like' => 'Вподобати',
|
||||
'liked' => 'Вподобано',
|
||||
'likes' => 'Вподобання',
|
||||
'share' => 'Поширити',
|
||||
'shared' => 'Поширено',
|
||||
'shares' => 'Поширення',
|
||||
'unshare' => 'Не поширювати',
|
||||
'bookmark' => 'Закладка',
|
||||
|
||||
'cancel' => 'Cancel',
|
||||
'copyLink' => 'Copy Link',
|
||||
'delete' => 'Delete',
|
||||
'error' => 'Error',
|
||||
'errorMsg' => 'Something went wrong. Please try again later.',
|
||||
'oops' => 'Oops!',
|
||||
'other' => 'Other',
|
||||
'readMore' => 'Read more',
|
||||
'success' => 'Success',
|
||||
'cancel' => 'Скасувати',
|
||||
'copyLink' => 'Копіювати посилання',
|
||||
'delete' => 'Видалити',
|
||||
'error' => 'Помилка',
|
||||
'errorMsg' => 'Щось пішло не так. Повторіть спробу згодом',
|
||||
'oops' => 'Йой!',
|
||||
'other' => 'Інше',
|
||||
'readMore' => 'Докладніше',
|
||||
'success' => 'Успіх',
|
||||
'proceed' => 'Продовжити',
|
||||
'next' => 'Далі',
|
||||
'close' => 'Закрити',
|
||||
'clickHere' => 'натисніть тут',
|
||||
|
||||
'sensitive' => 'Sensitive',
|
||||
'sensitiveContent' => 'Sensitive Content',
|
||||
'sensitiveContentWarning' => 'This post may contain sensitive content',
|
||||
'sensitive' => 'Чутливе',
|
||||
'sensitiveContent' => 'Чутливий вміст',
|
||||
'sensitiveContentWarning' => 'Цей допис може містити чутливий вміст',
|
||||
],
|
||||
|
||||
'site' => [
|
||||
'terms' => 'Terms of Use',
|
||||
'privacy' => 'Privacy Policy',
|
||||
'terms' => 'Умови використання',
|
||||
'privacy' => 'Політика приватності',
|
||||
],
|
||||
|
||||
'navmenu' => [
|
||||
'search' => 'Search',
|
||||
'admin' => 'Admin Dashboard',
|
||||
'search' => 'Пошук',
|
||||
'admin' => 'Адмінпанель',
|
||||
|
||||
// Timelines
|
||||
'homeFeed' => 'Home Feed',
|
||||
'localFeed' => 'Local Feed',
|
||||
'globalFeed' => 'Global Feed',
|
||||
'homeFeed' => 'Домашня стрічка',
|
||||
'localFeed' => 'Місцева стрічка',
|
||||
'globalFeed' => 'Світова стрічка',
|
||||
|
||||
// Core features
|
||||
'discover' => 'Discover',
|
||||
'directMessages' => 'Direct Messages',
|
||||
'notifications' => 'Notifications',
|
||||
'groups' => 'Groups',
|
||||
'stories' => 'Stories',
|
||||
'discover' => 'Цікаве',
|
||||
'directMessages' => 'Прямі листи',
|
||||
'notifications' => 'Сповіщення',
|
||||
'groups' => 'Групи',
|
||||
'stories' => 'Сторі',
|
||||
|
||||
// Self links
|
||||
'profile' => 'Profile',
|
||||
'drive' => 'Drive',
|
||||
'settings' => 'Settings',
|
||||
'compose' => 'Create New',
|
||||
'logout' => 'Logout',
|
||||
'profile' => 'Профіль',
|
||||
'drive' => 'Сховище',
|
||||
'settings' => 'Параметри',
|
||||
'compose' => 'Створити',
|
||||
'logout' => 'Вийти',
|
||||
|
||||
// Nav footer
|
||||
'about' => 'About',
|
||||
'help' => 'Help',
|
||||
'language' => 'Language',
|
||||
'privacy' => 'Privacy',
|
||||
'terms' => 'Terms',
|
||||
'about' => 'Про застосунок',
|
||||
'help' => 'Довідка',
|
||||
'language' => 'Мова',
|
||||
'privacy' => 'Приватність',
|
||||
'terms' => 'Умови',
|
||||
|
||||
// Temporary links
|
||||
'backToPreviousDesign' => 'Go back to previous design'
|
||||
'backToPreviousDesign' => 'Повернути минулий дизайн'
|
||||
],
|
||||
|
||||
'directMessages' => [
|
||||
'inbox' => 'Inbox',
|
||||
'sent' => 'Sent',
|
||||
'requests' => 'Requests'
|
||||
'inbox' => 'Вхідні',
|
||||
'sent' => 'Надіслані',
|
||||
'requests' => 'Запити'
|
||||
],
|
||||
|
||||
'notifications' => [
|
||||
'liked' => 'liked your',
|
||||
'commented' => 'commented on your',
|
||||
'reacted' => 'reacted to your',
|
||||
'shared' => 'shared your',
|
||||
'tagged' => 'tagged you in a',
|
||||
'liked' => 'ставить уподобання під ваш',
|
||||
'commented' => 'коментує ваш',
|
||||
'reacted' => 'реагує на ваш',
|
||||
'shared' => 'поширює ваш',
|
||||
'tagged' => 'позначає вас через',
|
||||
|
||||
'updatedA' => 'updated a',
|
||||
'sentA' => 'sent a',
|
||||
'updatedA' => 'оновлює',
|
||||
'sentA' => 'надсилає',
|
||||
|
||||
'followed' => 'followed',
|
||||
'mentioned' => 'mentioned',
|
||||
'you' => 'you',
|
||||
'followed' => 'відстежує',
|
||||
'mentioned' => 'згадує',
|
||||
'you' => 'вас',
|
||||
|
||||
'yourApplication' => 'Your application to join',
|
||||
'applicationApproved' => 'was approved!',
|
||||
'applicationRejected' => 'was rejected. You can re-apply to join in 6 months.',
|
||||
'yourApplication' => 'Вашу реєстраційну заявку',
|
||||
'applicationApproved' => 'підтверджено!',
|
||||
'applicationRejected' => 'відхилено. Можете повторити спробу через 6 місяців.',
|
||||
|
||||
'dm' => 'dm',
|
||||
'groupPost' => 'group post',
|
||||
'modlog' => 'modlog',
|
||||
'post' => 'post',
|
||||
'story' => 'story',
|
||||
'dm' => 'лист',
|
||||
'groupPost' => 'допис у групі',
|
||||
'modlog' => 'моджурнал',
|
||||
'post' => 'допис',
|
||||
'story' => 'сторі',
|
||||
'noneFound' => 'Сповіщень не знайдено',
|
||||
],
|
||||
|
||||
'post' => [
|
||||
'shareToFollowers' => 'Share to followers',
|
||||
'shareToOther' => 'Share to other',
|
||||
'noLikes' => 'No likes yet',
|
||||
'uploading' => 'Uploading',
|
||||
'shareToFollowers' => 'Поширити авдиторії',
|
||||
'shareToOther' => 'Поширити іншим',
|
||||
'noLikes' => 'Вподобань поки нема',
|
||||
'uploading' => 'Вивантаження',
|
||||
],
|
||||
|
||||
'profile' => [
|
||||
'posts' => 'Posts',
|
||||
'followers' => 'Followers',
|
||||
'following' => 'Following',
|
||||
'admin' => 'Admin',
|
||||
'collections' => 'Collections',
|
||||
'follow' => 'Follow',
|
||||
'unfollow' => 'Unfollow',
|
||||
'editProfile' => 'Edit Profile',
|
||||
'followRequested' => 'Follow Requested',
|
||||
'joined' => 'Joined',
|
||||
'posts' => 'Дописи',
|
||||
'followers' => 'Авдиторія',
|
||||
'following' => 'Підписки',
|
||||
'admin' => 'Адміністрація',
|
||||
'collections' => 'Збірки',
|
||||
'follow' => 'Стежити',
|
||||
'unfollow' => 'Не стежити',
|
||||
'editProfile' => 'Редагувати профіль',
|
||||
'followRequested' => 'Запит на стеження',
|
||||
'joined' => 'Долучається',
|
||||
|
||||
'emptyCollections' => 'We can\'t seem to find any collections',
|
||||
'emptyPosts' => 'We can\'t seem to find any posts',
|
||||
'emptyCollections' => 'Збірок у вас поки нема',
|
||||
'emptyPosts' => 'Дописів у вас поки нема',
|
||||
],
|
||||
|
||||
'menu' => [
|
||||
'viewPost' => 'View Post',
|
||||
'viewProfile' => 'View Profile',
|
||||
'moderationTools' => 'Moderation Tools',
|
||||
'report' => 'Report',
|
||||
'archive' => 'Archive',
|
||||
'unarchive' => 'Unarchive',
|
||||
'embed' => 'Embed',
|
||||
'viewPost' => 'Переглянути допис',
|
||||
'viewProfile' => 'Переглянути профіль',
|
||||
'moderationTools' => 'Засоби модерування',
|
||||
'report' => 'Скарга',
|
||||
'archive' => 'Архівувати',
|
||||
'unarchive' => 'Розархівувати',
|
||||
'embed' => 'Експорт',
|
||||
|
||||
'selectOneOption' => 'Select one of the following options',
|
||||
'unlistFromTimelines' => 'Unlist from Timelines',
|
||||
'addCW' => 'Add Content Warning',
|
||||
'removeCW' => 'Remove Content Warning',
|
||||
'markAsSpammer' => 'Mark as Spammer',
|
||||
'markAsSpammerText' => 'Unlist + CW existing and future posts',
|
||||
'spam' => 'Spam',
|
||||
'sensitive' => 'Sensitive Content',
|
||||
'abusive' => 'Abusive or Harmful',
|
||||
'underageAccount' => 'Underage Account',
|
||||
'copyrightInfringement' => 'Copyright Infringement',
|
||||
'impersonation' => 'Impersonation',
|
||||
'scamOrFraud' => 'Scam or Fraud',
|
||||
'confirmReport' => 'Confirm Report',
|
||||
'confirmReportText' => 'Are you sure you want to report this post?',
|
||||
'reportSent' => 'Report Sent!',
|
||||
'reportSentText' => 'We have successfully received your report.',
|
||||
'reportSentError' => 'There was an issue reporting this post.',
|
||||
'selectOneOption' => 'Оберіть один із наступних варіантів',
|
||||
'unlistFromTimelines' => 'Сховати зі стрічок',
|
||||
'addCW' => 'Застерегти про вміст',
|
||||
'removeCW' => 'Вилучити застереження',
|
||||
'markAsSpammer' => 'Позначити як спам',
|
||||
'markAsSpammerText' => 'Сховати цей і майбутні дописи, додаючи застереження',
|
||||
'spam' => 'Спам',
|
||||
'sensitive' => 'Чутливий вміст',
|
||||
'abusive' => 'Ображає чи шкодить',
|
||||
'underageAccount' => 'Недостатній вік',
|
||||
'copyrightInfringement' => 'Порушує авторські права',
|
||||
'impersonation' => 'Вдає когось',
|
||||
'scamOrFraud' => 'Шахрайство',
|
||||
'confirmReport' => 'Підтвердити скаргу',
|
||||
'confirmReportText' => 'Точно поскаржитись на допис?',
|
||||
'reportSent' => 'Скаргу надіслано!',
|
||||
'reportSentText' => 'Ми успішно отримали вашу скаргу.',
|
||||
'reportSentError' => 'Виникла помилка при надсиланні скарги.',
|
||||
|
||||
'modAddCWConfirm' => 'Are you sure you want to add a content warning to this post?',
|
||||
'modCWSuccess' => 'Successfully added content warning',
|
||||
'modRemoveCWConfirm' => 'Are you sure you want to remove the content warning on this post?',
|
||||
'modRemoveCWSuccess' => 'Successfully removed content warning',
|
||||
'modUnlistConfirm' => 'Are you sure you want to unlist this post?',
|
||||
'modUnlistSuccess' => 'Successfully unlisted post',
|
||||
'modMarkAsSpammerConfirm' => 'Are you sure you want to mark this user as a spammer? All existing and future posts will be unlisted on timelines and a content warning will be applied.',
|
||||
'modMarkAsSpammerSuccess' => 'Successfully marked account as spammer',
|
||||
'modAddCWConfirm' => 'Точно додати застереження про вміст цьому допису?',
|
||||
'modCWSuccess' => 'Застереження про вміст успішно додано',
|
||||
'modRemoveCWConfirm' => 'Точно вилучити застереження про вміст із цього допису?',
|
||||
'modRemoveCWSuccess' => 'Застереження про вміст успішно вилучено',
|
||||
'modUnlistConfirm' => 'Точно сховати цей допис?',
|
||||
'modUnlistSuccess' => 'Допис успішно сховано',
|
||||
'modMarkAsSpammerConfirm' => 'Точно позначити цей обліковий запис як спам? Усі наявні й майбутні дописи буде сховано зі стрічок, і їм буде додано застереження про вміст.',
|
||||
'modMarkAsSpammerSuccess' => 'Обліковий запис успішно позначено як спам',
|
||||
|
||||
'toFollowers' => 'to Followers',
|
||||
'toFollowers' => 'до авдиторії',
|
||||
|
||||
'showCaption' => 'Show Caption',
|
||||
'showLikes' => 'Show Likes',
|
||||
'compactMode' => 'Compact Mode',
|
||||
'embedConfirmText' => 'By using this embed, you agree to our',
|
||||
'showCaption' => 'Показати підпис',
|
||||
'showLikes' => 'Показати вподобання',
|
||||
'compactMode' => 'Компактний режим',
|
||||
'embedConfirmText' => 'Експортуючи кудись допис, ви погоджуєте наші',
|
||||
|
||||
'deletePostConfirm' => 'Are you sure you want to delete this post?',
|
||||
'archivePostConfirm' => 'Are you sure you want to archive this post?',
|
||||
'unarchivePostConfirm' => 'Are you sure you want to unarchive this post?',
|
||||
'deletePostConfirm' => 'Точно видалити допис?',
|
||||
'archivePostConfirm' => 'Точно архівувати допис?',
|
||||
'unarchivePostConfirm' => 'Точно розархівувати допис?',
|
||||
],
|
||||
|
||||
'story' => [
|
||||
'add' => 'Add Story'
|
||||
'add' => 'Додати сторі'
|
||||
],
|
||||
|
||||
'timeline' => [
|
||||
'peopleYouMayKnow' => 'People you may know'
|
||||
'peopleYouMayKnow' => 'Ймовірні знайомі',
|
||||
|
||||
'onboarding' => [
|
||||
'welcome' => 'Вітаємо',
|
||||
'thisIsYourHomeFeed' => 'Це ваша домашня стрічка — тут будуть дописи від облікових записів, за якими ви стежите, в порядку додання.',
|
||||
'letUsHelpYouFind' => 'Можемо допомогти вам знайти цікавих людей, за якими варто стежити',
|
||||
'refreshFeed' => 'Оновити мою стрічку',
|
||||
],
|
||||
],
|
||||
|
||||
'hashtags' => [
|
||||
'emptyFeed' => 'We can\'t seem to find any posts for this hashtag'
|
||||
'emptyFeed' => 'Дописів із цим хештегом поки нема'
|
||||
],
|
||||
|
||||
'report' => [
|
||||
'report' => 'Скарга',
|
||||
'selectReason' => 'Оберіть підставу',
|
||||
'reported' => 'Скаргу надіслано',
|
||||
'sendingReport' => 'Надсилання скарги',
|
||||
'thanksMsg' => 'Дякуємо за скаргу: ви допомагаєте вбезпечити нашу спільноту!',
|
||||
'contactAdminMsg' => 'Якщо бажаєте сконтактувати з адміністрацією про цей допис чи скаргу',
|
||||
],
|
||||
|
||||
];
|
||||
|
|
Loading…
Reference in a new issue