From 6d0bec14e514b1e1949e604709207a74f8bf053f Mon Sep 17 00:00:00 2001 From: Denys Nykula Date: Sun, 14 Sep 2025 22:17:30 +0300 Subject: Translate to Ukrainian (#7961) --- README.fr.md | 2 +- README.md | 2 +- app/i18n/cs/gen.php | 1 + app/i18n/de/gen.php | 1 + app/i18n/el/gen.php | 1 + app/i18n/en-us/gen.php | 1 + app/i18n/en/gen.php | 1 + app/i18n/es/gen.php | 1 + app/i18n/fa/gen.php | 1 + app/i18n/fi/gen.php | 1 + app/i18n/fr/gen.php | 1 + app/i18n/he/gen.php | 1 + app/i18n/hu/gen.php | 1 + app/i18n/id/gen.php | 1 + app/i18n/it/gen.php | 1 + app/i18n/ja/gen.php | 1 + app/i18n/ko/gen.php | 1 + app/i18n/lv/gen.php | 1 + app/i18n/nl/gen.php | 1 + app/i18n/oc/gen.php | 1 + app/i18n/pl/gen.php | 1 + app/i18n/pt-br/gen.php | 1 + app/i18n/pt-pt/gen.php | 1 + app/i18n/ru/gen.php | 1 + app/i18n/sk/gen.php | 1 + app/i18n/tr/gen.php | 1 + app/i18n/uk/admin.php | 240 ++++++++++++++++++++++++++++++ app/i18n/uk/api.php | 33 +++++ app/i18n/uk/conf.php | 362 +++++++++++++++++++++++++++++++++++++++++++++ app/i18n/uk/feedback.php | 152 +++++++++++++++++++ app/i18n/uk/gen.php | 273 ++++++++++++++++++++++++++++++++++ app/i18n/uk/index.php | 110 ++++++++++++++ app/i18n/uk/install.php | 128 ++++++++++++++++ app/i18n/uk/sub.php | 306 ++++++++++++++++++++++++++++++++++++++ app/i18n/uk/user.php | 54 +++++++ app/i18n/zh-cn/gen.php | 1 + app/i18n/zh-tw/gen.php | 1 + docs/i18n/flags/gen/uk.svg | 7 + 38 files changed, 1693 insertions(+), 2 deletions(-) create mode 100644 app/i18n/uk/admin.php create mode 100644 app/i18n/uk/api.php create mode 100644 app/i18n/uk/conf.php create mode 100644 app/i18n/uk/feedback.php create mode 100644 app/i18n/uk/gen.php create mode 100644 app/i18n/uk/index.php create mode 100644 app/i18n/uk/install.php create mode 100644 app/i18n/uk/sub.php create mode 100644 app/i18n/uk/user.php create mode 100644 docs/i18n/flags/gen/uk.svg diff --git a/README.fr.md b/README.fr.md index ef3d30758..035887554 100644 --- a/README.fr.md +++ b/README.fr.md @@ -3,7 +3,7 @@ -[![cs](./docs/i18n/flags/gen/cs.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) [![de](./docs/i18n/flags/gen/de.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) [![el](./docs/i18n/flags/gen/el.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) [![en](./docs/i18n/flags/gen/en.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) [![en-us](./docs/i18n/flags/gen/en-us.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-us+%2F%28TODO%7CDIRTY%29%24%2F) [![es](./docs/i18n/flags/gen/es.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) [![fa](./docs/i18n/flags/gen/fa.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) [![fi](./docs/i18n/flags/gen/fi.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) [![fr](./docs/i18n/flags/gen/fr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) [![he](./docs/i18n/flags/gen/he.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) [![hu](./docs/i18n/flags/gen/hu.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) [![id](./docs/i18n/flags/gen/id.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) [![it](./docs/i18n/flags/gen/it.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) [![ja](./docs/i18n/flags/gen/ja.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) [![ko](./docs/i18n/flags/gen/ko.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) [![lv](./docs/i18n/flags/gen/lv.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) [![nl](./docs/i18n/flags/gen/nl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) [![oc](./docs/i18n/flags/gen/oc.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) [![pl](./docs/i18n/flags/gen/pl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-br](./docs/i18n/flags/gen/pt-br.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-br+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-pt](./docs/i18n/flags/gen/pt-pt.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-pt+%2F%28TODO%7CDIRTY%29%24%2F) [![ru](./docs/i18n/flags/gen/ru.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) [![sk](./docs/i18n/flags/gen/sk.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) [![tr](./docs/i18n/flags/gen/tr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-cn](./docs/i18n/flags/gen/zh-cn.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-cn+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-tw](./docs/i18n/flags/gen/zh-tw.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-tw+%2F%28TODO%7CDIRTY%29%24%2F) +[![cs](./docs/i18n/flags/gen/cs.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) [![de](./docs/i18n/flags/gen/de.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) [![el](./docs/i18n/flags/gen/el.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) [![en](./docs/i18n/flags/gen/en.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) [![en-us](./docs/i18n/flags/gen/en-us.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-us+%2F%28TODO%7CDIRTY%29%24%2F) [![es](./docs/i18n/flags/gen/es.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) [![fa](./docs/i18n/flags/gen/fa.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) [![fi](./docs/i18n/flags/gen/fi.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) [![fr](./docs/i18n/flags/gen/fr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) [![he](./docs/i18n/flags/gen/he.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) [![hu](./docs/i18n/flags/gen/hu.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) [![id](./docs/i18n/flags/gen/id.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) [![it](./docs/i18n/flags/gen/it.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) [![ja](./docs/i18n/flags/gen/ja.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) [![ko](./docs/i18n/flags/gen/ko.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) [![lv](./docs/i18n/flags/gen/lv.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) [![nl](./docs/i18n/flags/gen/nl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) [![oc](./docs/i18n/flags/gen/oc.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) [![pl](./docs/i18n/flags/gen/pl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-br](./docs/i18n/flags/gen/pt-br.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-br+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-pt](./docs/i18n/flags/gen/pt-pt.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-pt+%2F%28TODO%7CDIRTY%29%24%2F) [![ru](./docs/i18n/flags/gen/ru.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) [![sk](./docs/i18n/flags/gen/sk.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) [![tr](./docs/i18n/flags/gen/tr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) [![uk](./docs/i18n/flags/gen/uk.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-cn](./docs/i18n/flags/gen/zh-cn.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-cn+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-tw](./docs/i18n/flags/gen/zh-tw.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-tw+%2F%28TODO%7CDIRTY%29%24%2F) diff --git a/README.md b/README.md index 932e82c69..cd1734ef3 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ -[![cs](./docs/i18n/flags/gen/cs.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) [![de](./docs/i18n/flags/gen/de.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) [![el](./docs/i18n/flags/gen/el.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) [![en](./docs/i18n/flags/gen/en.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) [![en-us](./docs/i18n/flags/gen/en-us.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-us+%2F%28TODO%7CDIRTY%29%24%2F) [![es](./docs/i18n/flags/gen/es.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) [![fa](./docs/i18n/flags/gen/fa.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) [![fi](./docs/i18n/flags/gen/fi.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) [![fr](./docs/i18n/flags/gen/fr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) [![he](./docs/i18n/flags/gen/he.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) [![hu](./docs/i18n/flags/gen/hu.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) [![id](./docs/i18n/flags/gen/id.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) [![it](./docs/i18n/flags/gen/it.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) [![ja](./docs/i18n/flags/gen/ja.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) [![ko](./docs/i18n/flags/gen/ko.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) [![lv](./docs/i18n/flags/gen/lv.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) [![nl](./docs/i18n/flags/gen/nl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) [![oc](./docs/i18n/flags/gen/oc.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) [![pl](./docs/i18n/flags/gen/pl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-br](./docs/i18n/flags/gen/pt-br.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-br+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-pt](./docs/i18n/flags/gen/pt-pt.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-pt+%2F%28TODO%7CDIRTY%29%24%2F) [![ru](./docs/i18n/flags/gen/ru.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) [![sk](./docs/i18n/flags/gen/sk.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) [![tr](./docs/i18n/flags/gen/tr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-cn](./docs/i18n/flags/gen/zh-cn.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-cn+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-tw](./docs/i18n/flags/gen/zh-tw.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-tw+%2F%28TODO%7CDIRTY%29%24%2F) +[![cs](./docs/i18n/flags/gen/cs.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) [![de](./docs/i18n/flags/gen/de.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) [![el](./docs/i18n/flags/gen/el.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) [![en](./docs/i18n/flags/gen/en.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) [![en-us](./docs/i18n/flags/gen/en-us.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-us+%2F%28TODO%7CDIRTY%29%24%2F) [![es](./docs/i18n/flags/gen/es.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) [![fa](./docs/i18n/flags/gen/fa.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) [![fi](./docs/i18n/flags/gen/fi.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) [![fr](./docs/i18n/flags/gen/fr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) [![he](./docs/i18n/flags/gen/he.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) [![hu](./docs/i18n/flags/gen/hu.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) [![id](./docs/i18n/flags/gen/id.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) [![it](./docs/i18n/flags/gen/it.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) [![ja](./docs/i18n/flags/gen/ja.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) [![ko](./docs/i18n/flags/gen/ko.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) [![lv](./docs/i18n/flags/gen/lv.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) [![nl](./docs/i18n/flags/gen/nl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) [![oc](./docs/i18n/flags/gen/oc.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) [![pl](./docs/i18n/flags/gen/pl.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-br](./docs/i18n/flags/gen/pt-br.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-br+%2F%28TODO%7CDIRTY%29%24%2F) [![pt-pt](./docs/i18n/flags/gen/pt-pt.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-pt+%2F%28TODO%7CDIRTY%29%24%2F) [![ru](./docs/i18n/flags/gen/ru.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) [![sk](./docs/i18n/flags/gen/sk.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) [![tr](./docs/i18n/flags/gen/tr.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) [![uk](./docs/i18n/flags/gen/uk.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-cn](./docs/i18n/flags/gen/zh-cn.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-cn+%2F%28TODO%7CDIRTY%29%24%2F) [![zh-tw](./docs/i18n/flags/gen/zh-tw.svg)](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-tw+%2F%28TODO%7CDIRTY%29%24%2F) diff --git a/app/i18n/cs/gen.php b/app/i18n/cs/gen.php index 282e6743b..f3abdfc43 100644 --- a/app/i18n/cs/gen.php +++ b/app/i18n/cs/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 45fc9540b..3371cd839 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/el/gen.php b/app/i18n/el/gen.php index ea93a0002..a9d13aa7b 100644 --- a/app/i18n/el/gen.php +++ b/app/i18n/el/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index 7e7b55a11..6e2a7b151 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 214b24474..743597380 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', 'sk' => 'Slovenčina', 'tr' => 'Türkçe', + 'uk' => 'Українська', 'zh-cn' => '简体中文', 'zh-tw' => '正體中文', ), diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index c563a1e9b..ba7a72ca3 100644 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/fa/gen.php b/app/i18n/fa/gen.php index 3168a3cb0..2e8856ac0 100644 --- a/app/i18n/fa/gen.php +++ b/app/i18n/fa/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // TODO 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/fi/gen.php b/app/i18n/fi/gen.php index 9171852f0..64e924be3 100644 --- a/app/i18n/fi/gen.php +++ b/app/i18n/fi/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index d9e8a5a67..1fc8494ea 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index c2e7a4888..7aca5b2f1 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/hu/gen.php b/app/i18n/hu/gen.php index 016f8742f..3157aab10 100644 --- a/app/i18n/hu/gen.php +++ b/app/i18n/hu/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/id/gen.php b/app/i18n/id/gen.php index d81a12bf4..b9e5ff6c9 100644 --- a/app/i18n/id/gen.php +++ b/app/i18n/id/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index 46973c02a..df2b41900 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index 56e649159..4f0a44cd3 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index f722c61f8..eb211a3e7 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/lv/gen.php b/app/i18n/lv/gen.php index 54e12fe68..f72e68f29 100644 --- a/app/i18n/lv/gen.php +++ b/app/i18n/lv/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 7178fa8b7..9bde0107f 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 9a45c356e..8e307e158 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index 4dad4e799..be686ba08 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index 95cecc26c..54a10f34f 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/pt-pt/gen.php b/app/i18n/pt-pt/gen.php index a7ca5d56b..eb4101281 100644 --- a/app/i18n/pt-pt/gen.php +++ b/app/i18n/pt-pt/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index b5c4cfa17..64fb7fdc1 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 6f53de79f..c61eb0d0d 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 50f75ad74..02926d52c 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/uk/admin.php b/app/i18n/uk/admin.php new file mode 100644 index 000000000..2e8e82801 --- /dev/null +++ b/app/i18n/uk/admin.php @@ -0,0 +1,240 @@ + array( + 'allow_anonymous' => 'Дозволити анонімне читання статей типового користувача (%s)', + 'allow_anonymous_refresh' => 'Дозволити анонімне оновлення статей', + 'api_enabled' => 'Дозволити доступ через API (треба для мобільних програм і поширення користувацьких запитів)', + 'form' => 'Вебформа (традиційно, треба JavaScript)', + 'http' => 'HTTP (складно: за допомогою вебсервера, OIDC, SSO…)', + 'none' => 'Нема (небезпечно)', + 'title' => 'Вхід', + 'token' => 'Головний токен входу', + 'token_help' => 'Надає доступ до всіх RSS-видач користувача, а також дає змогу оновлювати стрічки без входу:', + 'type' => 'Тип входу', + 'unsafe_autologin' => 'Дозволити небезпечний автоматичний вхід у форматі: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => 'Перевірте доступ до каталога ./data/cache. HTTP-серверу треба дозвіл на запис.', + 'ok' => 'Доступ до каталога кешу працює.', + ), + 'categories' => array( + 'nok' => 'Таблицю категорій хибно налаштовано.', + 'ok' => 'З таблицею категорій усе гаразд.', + ), + 'connection' => array( + 'nok' => 'Не вдалося зʼєднатися з базою даних.', + 'ok' => 'Доступ до бази даних працює.', + ), + 'ctype' => array( + 'nok' => 'Не вдалося знайти необхідну бібліотеку перевірки типу символа (php-ctype).', + 'ok' => 'У вас є необхідна бібліотека перевірки типу символа (ctype).', + ), + 'curl' => array( + 'nok' => 'Не вдалося знайти бібліотеку cURL (пакунок php-curl).', + 'ok' => 'У вас є бібліотека cURL.', + ), + 'data' => array( + 'nok' => 'Перевірте доступ до каталога ./data. HTTP-серверу треба дозвіл на запис.', + 'ok' => 'Доступ до каталога даних працює.', + ), + 'database' => 'Встановлення бази даних', + 'dom' => array( + 'nok' => 'Не вдалося знайти необхідну бібліотеку роботи з DOM (пакунок php-xml).', + 'ok' => 'У вас є необхідна бібліотека роботи з DOM.', + ), + 'entries' => array( + 'nok' => 'Таблицю новин хибно налаштовано.', + 'ok' => 'З таблицею новин усе гаразд.', + ), + 'favicons' => array( + 'nok' => 'Перевірте доступ до каталога ./data/favicons. HTTP-серверу треба дозвіл на запис.', + 'ok' => 'Доступ до каталога піктограм працює.', + ), + 'feeds' => array( + 'nok' => 'Таблицю стрічок хибно налаштовано.', + 'ok' => 'З таблицею стрічок усе гаразд.', + ), + 'fileinfo' => array( + 'nok' => 'Не вдалося знайти бібліотеку PHP fileinfo (пакунок fileinfo).', + 'ok' => 'У вас є бібліотека fileinfo.', + ), + 'files' => 'Встановлення файлів', + 'json' => array( + 'nok' => 'Не вдалося знайти розширення JSON (пакунок php-json).', + 'ok' => 'У вас є розширення JSON.', + ), + 'mbstring' => array( + 'nok' => 'Не вдалося знайти бажаної бібліотеки mbstring для Юнікоду.', + 'ok' => 'У вас є бажана бібліотека mbstring для Юнікоду.', + ), + 'pcre' => array( + 'nok' => 'Не вдалося знайти необхідної бібліотеки регулярних виразів (php-pcre).', + 'ok' => 'У вас є необхідна бібліотека регулярних виразів (PCRE).', + ), + 'pdo' => array( + 'nok' => 'Не вдалося знайти PDO чи одного з підтримуваних драйверів (pdo_mysql, pdo_sqlite чи pdo_pgsql).', + 'ok' => 'У вас є PDO та принаймні один підтримуваний драйвер (pdo_mysql, pdo_sqlite чи pdo_pgsql).', + ), + 'php' => array( + '_' => 'Встановлення PHP', + 'nok' => 'У вас PHP версії %s, але для FreshRSS треба принаймні %s.', + 'ok' => 'Версія PHP (%s) сумісна з FreshRSS.', + ), + 'tables' => array( + 'nok' => 'У базі даних бракує принаймні одної таблиці.', + 'ok' => 'Відповідні таблиці наявні в базі даних.', + ), + 'title' => 'Перевірка встановлення', + 'tokens' => array( + 'nok' => 'Перевірте доступ до каталога ./data/tokens. HTTP-серверу треба дозвіл на запис', + 'ok' => 'Доступ до каталога токенів працює.', + ), + 'users' => array( + 'nok' => 'Перевірте доступ до каталога ./data/users. HTTP-серверу треба дозвіл на запис', + 'ok' => 'Доступ до користувацького каталога працює.', + ), + 'zip' => array( + 'nok' => 'Не вдалося знайти ZIP-розширення (пакунок php-zip).', + 'ok' => 'У вас є ZIP-розширення.', + ), + ), + 'extensions' => array( + 'author' => 'Автор', + 'community' => 'Доступні розширення спільноти', + 'description' => 'Опис', + 'disabled' => 'Вимкнено', + 'empty_list' => 'Розширень не встановлено', + 'empty_list_help' => 'Щоб виявити причину порожнього списку розширень, перегляньте журнали.', + 'enabled' => 'Увімкнено', + 'latest' => 'Встановлено', + 'name' => 'Назва', + 'no_configure_view' => 'Розширення не налаштовується.', + 'system' => array( + '_' => 'Системні розширення', + 'no_rights' => 'Системне розширення (вам бракує дозволу)', + ), + 'title' => 'Розширення', + 'update' => 'Наявне оновлення', + 'user' => 'Користувацькі розширення', + 'version' => 'Версія', + ), + 'stats' => array( + '_' => 'Статистика', + 'all_feeds' => 'Всі стрічки', + 'category' => 'Категорія', + 'entry_count' => 'Кількість статей', + 'entry_per_category' => 'Статей у категорії', + 'entry_per_day' => 'Статей за день (минулі 30 днів)', + 'entry_per_day_of_week' => 'За день тижня (в середньому повідомлень: %.2f)', + 'entry_per_hour' => 'За годину (в середньому статей: %.2f)', + 'entry_per_month' => 'За місяць (у середньому статей: %.2f)', + 'entry_repartition' => 'Перерозподіл статей', + 'feed' => 'Стрічка', + 'feed_per_category' => 'Стрічок у категорії', + 'idle' => 'Неактивні стрічки', + 'main' => 'Основна статистика', + 'main_stream' => 'Головний потік', + 'no_idle' => 'Неактивних стрічок нема!', + 'number_entries' => 'Статей: %d', + 'overview' => 'Огляд', + 'percent_of_total' => '% від загальної кількості', + 'repartition' => 'Перерозподіл статей: %s', + 'status_favorites' => 'Вподобано', + 'status_read' => 'Прочитано', + 'status_total' => 'Усього', + 'status_unread' => 'Непрочитано', + 'title' => 'Статистика', + 'top_feed' => 'Десять найактивніших стрічок', + ), + 'system' => array( + '_' => 'Налаштування системи', + 'auto-update-url' => 'URL-адреса сервера автоматичного оновлення', + 'base-url' => array( + '_' => 'Базова URL-адреса', + 'recommendation' => 'Автоматична порада: %s', + ), + 'cookie-duration' => array( + 'help' => 'секунд', + 'number' => 'Тривалість сеансу', + ), + 'force_email_validation' => 'Підтверджувати адресу електронної пошти', + 'instance-name' => 'Назва сервера', + 'max-categories' => 'Максимум категорій у користувача', + 'max-feeds' => 'Максимум стрічок у користувача', + 'registration' => array( + 'number' => 'Максимум облікових записів', + 'select' => array( + 'label' => 'Форма реєстрації', + 'option' => array( + 'noform' => 'Вимкнено: форма реєстрації недоступна', + 'nolimit' => 'Увімкнено: кількість облікових записів необмежена', + 'setaccountsnumber' => 'Обмежити кількість облікових записів', + ), + ), + 'status' => array( + 'disabled' => 'Форму вимкнено', + 'enabled' => 'Форму ввімкнено', + ), + 'title' => 'Форма користувацької реєстрації', + ), + 'sensitive-parameter' => 'Чутливий параметр. Відредагуйте вручну в ./data/config.php', + 'tos' => array( + 'disabled' => 'вимкнено', + 'enabled' => 'налаштовано', + 'help' => 'Як налаштувати умови надання послуг', + ), + 'websub' => array( + 'help' => 'Про WebSub', + ), + ), + 'update' => array( + '_' => 'Оновити FreshRSS', + 'apply' => 'Почати оновлення', + 'changelog' => 'Журнал змін', + 'check' => 'Пошукати оновлення', + 'copiedFromURL' => 'update.php скопійовано з %s до ./data', + 'current_version' => 'Поточна встановлена версія', + 'last' => 'Минула перевірка', + 'loading' => 'Оновлення…', + 'none' => 'Нема доступних оновлень', + 'releaseChannel' => array( + '_' => 'Канал випусків', + 'edge' => 'Крайній випуск («edge»)', + 'latest' => 'Стабільний випуск («latest»)', + ), + 'title' => 'Оновити FreshRSS', + 'viaGit' => 'Розпочато оновлення за допомогою git і GitHub.com', + ), + 'user' => array( + 'admin' => 'Адміністратор', + 'article_count' => 'Статей', + 'back_to_manage' => '← Повернутися до списку користувачів', + 'create' => 'Створити користувача', + 'database_size' => 'Розмір бази даних', + 'email' => 'Адреса електронної пошти', + 'enabled' => 'Увімкнено', + 'feed_count' => 'Стрічок', + 'is_admin' => 'Адміністратор', + 'language' => 'Мова', + 'last_user_activity' => 'Найновіша активність', + 'list' => 'Список користувачів', + 'number' => 'Створено %d обліковий запис', + 'numbers' => 'Створено облікових записів: %d', + 'password_form' => 'Пароль
(для входу через вебформу)', + 'password_format' => 'Принаймні 7 символів', + 'title' => 'Керувати користувачами', + 'username' => 'Користувацьке імʼя', + ), +); diff --git a/app/i18n/uk/api.php b/app/i18n/uk/api.php new file mode 100644 index 000000000..56cce71b0 --- /dev/null +++ b/app/i18n/uk/api.php @@ -0,0 +1,33 @@ + array( + 'address' => 'Адреса вашого API:', + 'output' => array( + 'encoding-support' => '⚠️ УВАГА: бракує підтримки %2F, деякі клієнти можуть не працювати!', + 'invalid-configuration' => '⚠️ УВАГА: ймовірно хибна базова URL-адреса в ./data/config.php', + 'pass' => '✔️ УСПІХ', + 'unknown-error' => '❌ ', // IGNORE + ), + 'test' => array( + 'fever' => 'Перевірка налаштування Fever API:', + 'greader' => 'Перевірка налаштування Google Reader API:', + ), + 'title' => array( + '_' => 'Ендпойнти API FreshRSS', + 'extension' => 'API для розширень', + 'fever' => 'API, сумісне з Fever', + 'greader' => 'API, сумісне з Google Reader', + ), + ), +); diff --git a/app/i18n/uk/conf.php b/app/i18n/uk/conf.php new file mode 100644 index 000000000..de63fe673 --- /dev/null +++ b/app/i18n/uk/conf.php @@ -0,0 +1,362 @@ + array( + '_' => 'Архівування', + 'exception' => 'Винятки з видалення', + 'help' => 'Більше опцій — у параметрах окремої стрічки', + 'keep_favourites' => 'Ніколи не видаляти вподобаних', + 'keep_labels' => 'Ніколи не видаляти міток', + 'keep_max' => 'Максимум статей у стрічці', + 'keep_min_by_feed' => 'Мінімум статей у стрічці', + 'keep_period' => 'Тривалість зберігання статей', + 'keep_unreads' => 'Ніколи не видаляти непрочитаних статей', + 'maintenance' => 'Супровід', + 'optimize' => 'Оптимізувати базу даних', + 'optimize_help' => 'Запускайте час від часу, щоб зменшити розмір бази даних', + 'policy' => 'Політика видалення', + 'policy_warning' => 'Якщо політики видалення не встановлено, всі статті зберігатимуться.', + 'purge_now' => 'Застосувати політику видалення', + 'title' => 'Архівування', + 'ttl' => 'Частота автоматичного оновлення', + ), + 'display' => array( + '_' => 'Оформлення', + 'darkMode' => array( + '_' => 'Темний режим', + 'auto' => 'Автоматично', + 'help' => 'Лише для підтримуваних тем', + 'no' => 'Вимкнено', + ), + 'icon' => array( + 'bottom_line' => 'Нижній рядок', + 'display_authors' => 'Автори', + 'entry' => 'Піктограми статей', + 'publication_date' => 'Дата оприлюднення', + 'related_tags' => 'Теги статей', + 'sharing' => 'Поширення', + 'summary' => 'Підсумок', + 'top_line' => 'Верхній рядок', + ), + 'language' => 'Мова', + 'notif_html5' => array( + 'seconds' => 'секунд (0 означає без тайм-ауту)', + 'timeout' => 'Тайм-аут сповіщення HTML5', + ), + 'show_nav_buttons' => 'Показати кнопки навігації', + 'theme' => array( + '_' => 'Тема', + 'deprecated' => array( + '_' => 'Застаріла', + 'description' => 'Тема більше не підтримується. Її буде вилучено з майбутнього випуску FreshRSS', + ), + ), + 'theme_not_available' => 'Тема «%s» більше не підтримується. Будь ласка, оберіть іншу тему.', + 'thumbnail' => array( + 'label' => 'Ілюстрація', + 'landscape' => 'Горизонтальна', + 'none' => 'Вимкнена', + 'portrait' => 'Вертикальна', + 'square' => 'Квадрат', + ), + 'timezone' => 'Часовий пояс', + 'title' => 'Оформлення', + 'website' => array( + 'full' => 'Піктограма й назва', + 'icon' => 'Лише піктограма', + 'label' => 'Вебсайт', + 'name' => 'Лише назва', + 'none' => 'Вимкнено', + ), + 'width' => array( + 'content' => 'Ширина тексту', + 'large' => 'Велика', + 'medium' => 'Середня', + 'no_limit' => 'Повна', + 'thin' => 'Мала', + ), + ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Важливість', + 'message' => 'Повідомлення', + 'timestamp' => 'Час', + ), + 'pagination' => array( + 'first' => 'Перша', + 'last' => 'Остання', + 'next' => 'Наступна', + 'previous' => 'Попередня', + ), + ), + 'mark_read_button' => array( + '_' => 'Кнопка «Позначити все прочитаним»', + 'big' => 'Велика', + 'none' => 'Не показувати', + 'small' => 'Мала', + ), + 'privacy' => array( + '_' => 'Приватність', + 'retrieve_extension_list' => 'Завантажувати список розширень', + ), + 'profile' => array( + '_' => 'Керування профілем', + 'api' => array( + '_' => 'Зовнішній доступ через API', + 'api_not_set' => 'Пароля API не налаштовано', + 'api_set' => 'Пароль API налаштовано', + 'check_link' => 'Перевірте стан API: %s', + 'disabled' => 'Доступ через API вимкнено.', + 'documentation_link' => 'Перегляньте документацію та перелік відомих програм', + 'help' => 'Перегляньте документацію', + ), + 'change_password' => 'Змінити пароль', + 'confirm_new_password' => 'Підтвердьте новий пароль', + 'current_password' => 'Поточний пароль
(для входу через вебформу)', + 'delete' => array( + '_' => 'Видалення облікового запису', + 'warn' => 'Ваш обліковий запис і всі повʼязані дані буде видалено.', + ), + 'email' => 'Адреса електронної пошти', + 'new_password' => 'Новий пароль', + 'password_api' => 'Пароль API
(наприклад, для мобільних програм)', + 'password_format' => 'Принаймні 7 символів', + 'title' => 'Профіль', + ), + 'query' => array( + '_' => 'Користувацькі запити', + 'deprecated' => 'Запит більше не чинний. Згадану категорію чи стрічку видалено.', + 'description' => 'Опис', + 'filter' => array( + '_' => 'Застосовано фільтр:', + 'categories' => 'Показати категорію', + 'feeds' => 'Показати стрічку', + 'order' => 'Впорядкувати за датою', + 'search' => 'Вираз', + 'shareOpml' => 'Увімкнути OPML-поширення відповідних категорій і стрічок', + 'shareRss' => 'Увімкнути поширення в форматі HTML і RSS', + 'state' => 'Стан', + 'tags' => 'Показати за тегом', + 'type' => 'Тип', + ), + 'get_A' => 'Показати всі стрічки, зокрема показані в межах категорії', + 'get_Z' => 'Показати всі стрічки, зокрема архівовані', + 'get_all' => 'Показати всі статті', + 'get_all_labels' => 'Показати статті з будь-якою міткою', + 'get_category' => 'Показати категорію «%s»', + 'get_favorite' => 'Показати вподобані статті', + 'get_feed' => 'Показати стрічку «%s»', + 'get_important' => 'Показати статті з важливих стрічок', + 'get_label' => 'Показати статті з міткою «%s»', + 'help' => 'Перегляньте документацію користувацьких запитів і їх поширення в форматі HTML, RSS та OPML.', + 'image_url' => 'URL-адреса зображення', + 'name' => 'Назва', + 'no_filter' => 'Без фільтру', + 'no_queries' => array( + '_' => 'Користувацьких запитів ще не збережено.', + 'help' => 'Перегляньте документацію', + ), + 'number' => 'Запит №%d', + 'order_asc' => 'Спершу старіші статті', + 'order_desc' => 'Спершу новіші статті', + 'search' => 'Пошук «%s»', + 'share' => array( + '_' => 'Поширити запит за посиланням', + 'disabled' => array( + '_' => 'вимкнено', + 'title' => 'Поширення', + ), + 'greader' => 'Загальнодоступне посилання на JSON для GReader', + 'help' => 'Щоб поділитися з кимось цим запитом, скопіюйте це посилання', + 'html' => 'Загальнодоступне посилання на HTML-сторінку', + 'opml' => 'Загальнодоступне посилання на OPML-список стрічок', + 'rss' => 'Загальнодоступне посилання на RSS-стрічку', + ), + 'state_0' => 'Показати всі статті', + 'state_1' => 'Показати прочитані статті', + 'state_2' => 'Показати непрочитані статті', + 'state_3' => 'Показати всі статті', + 'state_4' => 'Показати вподобані статті', + 'state_5' => 'Показати прочитані вподобані статті', + 'state_6' => 'Показати непрочитані вподобані статті', + 'state_7' => 'Показати вподобані статті', + 'state_8' => 'Показати невподобані статті', + 'state_9' => 'Показати прочитані невподобані статті', + 'state_10' => 'Показати непрочитані невподобані статті', + 'state_11' => 'Показати невподобані статті', + 'state_12' => 'Показати всі статті', + 'state_13' => 'Показати прочитані статті', + 'state_14' => 'Показати непрочитані статті', + 'state_15' => 'Показати всі статті', + 'title' => 'Користувацькі запити', + ), + 'reading' => array( + '_' => 'Читання', + 'after_onread' => 'Коли все позначено прочитаним,', + 'always_show_favorites' => 'У вподобаних типово показувати всі статті', + 'apply_to_individual_feed' => 'Застосовується до саме цієї стрічки', + 'article' => array( + 'authors_date' => array( + '_' => 'Автори й дата', + 'both' => 'Вгорі й унизу', + 'footer' => 'Внизу', + 'header' => 'Вгорі', + 'none' => 'Не показувати', + ), + 'feed_name' => array( + 'above_title' => 'Над заголовком і тегами', + 'none' => 'Не показувати', + 'with_authors' => 'У рядку авторів і дати', + ), + 'feed_title' => 'Назва стрічки', + 'icons' => array( + '_' => 'Піктограми статті
(Тільки читацький показ)', + 'above_title' => 'Над заголовком', + 'with_authors' => 'У рядку авторів і дати', + ), + 'tags' => array( + '_' => 'Теги', + 'both' => 'Вгорі й унизу', + 'footer' => 'Внизу', + 'header' => 'Вгорі', + 'none' => 'Не показувати', + ), + 'tags_max' => array( + '_' => 'Показувати тегів', + 'help' => '0 означає показати всі теги й не згортати їх', + ), + ), + 'articles_per_page' => 'Статей на сторінці', + 'auto_load_more' => 'Завантажувати більше статей при прокручуванні', + 'auto_remove_article' => 'Ховати статті після прочитання', + 'confirm_enabled' => 'Перепитувати, чи позначати все прочитаним', + 'display_articles_unfolded' => 'Розгортати статті типово', + 'display_categories_unfolded' => 'Категорії для розгортання', + 'headline' => array( + 'articles' => 'Статті: відкриті/закриті', + 'articles_header_footer' => 'Статті: верх/низ', + 'categories' => 'Ліва навігація: категорії', + 'mark_as_read' => 'Позначити статтю прочитаною', + 'misc' => 'Різне', + 'view' => 'Показ', + ), + 'hide_read_feeds' => 'Ховати категорії та стрічки, усі статті яких прочитано (не працює при виборі «Показати всі статті»)', + 'img_with_lazyload' => 'Відкладати завантаження зображень до появи їх у видимій області', + 'jump_next' => 'перейти до наступного непрочитаного поруч', + 'mark_updated_article_unread' => 'Позначати оновленні статті непрочитаними', + 'number_divided_when_reader' => 'Ділиться на 2 в читацькому показі.', + 'read' => array( + 'article_open_on_website' => 'при переході на сайт статті', + 'article_viewed' => 'при відкритті статті', + 'focus' => 'при фокусуванні (крім важливих стрічок)', + 'keep_max_n_unread' => 'Максимум непрочитаних статей', + 'scroll' => 'при гортанні (крім важливих стрічок)', + 'upon_gone' => 'коли статті більше нема в оригінальній стрічці новин', + 'upon_reception' => 'при отриманні статті', + 'when' => 'Позначити статтю прочитаною…', + 'when_same_title_in_category' => 'якщо котрась зі стількох найновіших статей категорії має такий самий заголовок', + 'when_same_title_in_feed' => 'якщо котрась зі стількох найновіших статей стрічки має такий самий заголовок', + ), + 'show' => array( + '_' => 'Статті для показу', + 'active_category' => 'Активна категорія', + 'adaptive' => 'Показати непрочитані за наявності, інакше всі статті', + 'all_articles' => 'Показати всі статті', + 'all_categories' => 'Всі категорії', + 'no_category' => 'Без категорії', + 'remember_categories' => 'Памʼятати відкриті категорії', + 'unread' => 'Показати непрочитані', + 'unread_or_favorite' => 'Показати непрочитані та вподобані', + ), + 'show_fav_unread_help' => 'Впливає також на мітки', + 'sides_close_article' => 'Натиск за межами тексту статті закриває статтю', + 'sort' => array( + '_' => 'Порядок', + 'newer_first' => 'Спершу новіші', + 'older_first' => 'Спершу старіші', + ), + 'star' => array( + 'when' => 'Вподобати статтю…', + ), + 'sticky_post' => 'Закріплювати статтю вгорі при відкритті', + 'title' => 'Читання', + 'view' => array( + 'default' => 'Типовий показ', + 'global' => 'Глобальний показ', + 'normal' => 'Звичайний показ', + 'reader' => 'Читацький показ', + ), + ), + 'sharing' => array( + '_' => 'Поширення', + 'add' => 'Додати спосіб поширення', + 'bluesky' => 'Bluesky', // IGNORE + 'deprecated' => 'Цей сервіс більше не підтримується. Його буде вилучено з FreshRSS у наступному випуску.', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => 'Email', // IGNORE + 'facebook' => 'Facebook', // IGNORE + 'more_information' => 'Докладніше', + 'print' => 'Друк', + 'raindrop' => 'Raindrop.io', // IGNORE + 'remove' => 'Вилучити спосіб поширення', + 'shaarli' => 'Shaarli', // IGNORE + 'share_name' => 'Підпис у меню', + 'share_url' => 'URL-адреса поширення', + 'title' => 'Поширення', + 'twitter' => 'Twitter', // IGNORE + 'wallabag' => 'wallabag', // IGNORE + ), + 'shortcut' => array( + '_' => 'Клавіші', + 'article_action' => 'Дії зі статею', + 'auto_share' => 'Поширити', + 'auto_share_help' => 'Якщо решим поширення лише один, використовується одразу він. Інакше обирайте режими їхніми номерами.', + 'close_menus' => 'Закрити меню', + 'collapse_article' => 'Згорнути', + 'first_article' => 'Перша стаття', + 'focus_search' => 'Пошук', + 'global_view' => 'Глобальний показ', + 'help' => 'Документація', + 'javascript' => 'Щоб використовувати клавіші, слід увімкнути JavaScript', + 'last_article' => 'Остання стаття', + 'load_more' => 'Завантажити більше статей', + 'mark_favorite' => 'Перемкнути вподобання', + 'mark_read' => 'Перемкнути прочитаність', + 'navigation' => 'Навігація', + 'navigation_help' => 'При затисненій ⇧ Shift клавіші навігації застосовуються до стрічок.
При затисненій Alt ⎇ клавіші навігації застосовуються до категорій.', + 'navigation_no_mod_help' => 'Наступні клавіші навігації не підтримують описаного вгорі затиснення.', + 'next_article' => 'Наступна стаття', + 'next_unread_article' => 'Наступна непрочитана стаття', + 'non_standard' => 'Деякі клавіші (%s) можуть не працювати.', + 'normal_view' => 'Звичайний показ', + 'other_action' => 'Інші дії', + 'previous_article' => 'Попередня стаття', + 'reading_view' => 'Читацький показ', + 'rss_view' => 'Відкрити як RSS-стрічку', + 'see_on_website' => 'Сайт оригіналу', + 'shift_for_all_read' => 'Затисніть також Alt ⎇, щоб позначити попередні статті прочитаними
Затисніть також ⇧ Shift, щоб позначити всі статті прочитаними', + 'skip_next_article' => 'Сфокусувати наступну не відкриваючи', + 'skip_previous_article' => 'Сфокусувати попередню не відкриваючи', + 'title' => 'Клавіші', + 'toggle_media' => 'Почати/зупинити відтворення', + 'user_filter' => 'Користувацькі запити', + 'user_filter_help' => 'Якщо користувацький запит лише один, використовується одразу він. Інакше обирайте запити їхніми номерами.', + 'views' => 'Показ', + ), + 'user' => array( + 'articles_and_size' => 'Статей: %s (%s)', + 'current' => 'Поточний користувач', + 'is_admin' => 'адміністратор', + 'users' => 'Користувачі', + ), +); diff --git a/app/i18n/uk/feedback.php b/app/i18n/uk/feedback.php new file mode 100644 index 000000000..638b75d89 --- /dev/null +++ b/app/i18n/uk/feedback.php @@ -0,0 +1,152 @@ + array( + 'denied' => 'Бракує дозволу на доступ до цієї сторінки', + 'not_found' => 'Шуканої сторінки не існує', + ), + 'admin' => array( + 'optimization_complete' => 'Оптимізацію завершено', + ), + 'api' => array( + 'password' => array( + 'failed' => 'Не вдалося змінити пароль', + 'updated' => 'Пароль змінено', + ), + ), + 'auth' => array( + 'login' => array( + 'invalid' => 'Не вдалось увійти', + 'success' => 'Вхід успішний', + ), + 'logout' => array( + 'success' => 'Вихід успішний', + ), + ), + 'conf' => array( + 'error' => 'Не вдалося зберегти налаштування', + 'query_created' => 'Запит «%s» створено.', + 'shortcuts_updated' => 'Клавіші оновлено', + 'updated' => 'Налаштування оновлено', + ), + 'extensions' => array( + 'already_enabled' => '%s уже ввімкнено', + 'cannot_remove' => 'Неможливо вилучити %s', + 'disable' => array( + 'ko' => 'Неможливо вимкнути %s. Докладніше в журналах FreshRSS.', + 'ok' => '%s тепер вимкнено', + ), + 'enable' => array( + 'ko' => 'Неможливо ввімкнути %s. Докладніше в журналах FreshRSS.', + 'ok' => '%s тепер увімкнено', + ), + 'invalid_view_mode' => 'Хибний режим показу «%s»! Повернутися до «звичайного показу».', + 'no_access' => 'Бракує доступу до %s', + 'not_enabled' => '%s вимкнено', + 'not_found' => '%s не існує', + 'removed' => '%s вилучено', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'ZIP-розширення не встановлено на вашому сервері. Спробуйте експортувати файли поодинці.', + 'feeds_imported' => 'Стрічки імпортовано. Якщо більше не потрібно нічого імпортувати, натисніть кнопку Оновити стрічки.', + 'feeds_imported_with_errors' => 'Стрічки імпортовано, проте виникли помилки. Якщо більше не потрібно нічого імпортувати, натисніть кнопку Оновити стрічки.', + 'file_cannot_be_uploaded' => 'Не вдалося вивантажити файл!', + 'no_zip_extension' => 'На сервері бракує ZIP-розширення.', + 'zip_error' => 'При обробці ZIP виникла помилка.', + ), + 'profile' => array( + 'error' => 'Не вдалось оновити профіль', + 'passwords_dont_match' => 'Паролі не збігаються', + 'updated' => 'Профіль оновлено', + ), + 'sub' => array( + 'actualize' => 'Оновлення', + 'articles' => array( + 'marked_read' => 'Вибрані статті позначено прочитаними.', + 'marked_unread' => 'Статті позначено непрочитаними.', + ), + 'category' => array( + 'created' => 'Створено категорію %s.', + 'deleted' => 'Категорію видалено.', + 'emptied' => 'Категорію спорожнено', + 'error' => 'Не вдалося оновити категорію', + 'name_exists' => 'Категорія з такою назвою вже існує.', + 'no_id' => 'Слід вказати ідентифікатор категорії.', + 'no_name' => 'Категорії слід мати назву.', + 'not_delete_default' => 'Неможливо видалити типову категорію!', + 'not_exist' => 'Категорія не існує!', + 'over_max' => 'Ви вже маєте максимум дозволених категорій (%d)', + 'updated' => 'Категорію оновлено.', + ), + 'feed' => array( + 'actualized' => '%s оновлено', + 'actualizeds' => 'RSS-стрічки оновлено', + 'added' => 'Додано RSS-стрічку %s', + 'already_subscribed' => 'Ви вже підписані на %s', + 'cache_cleared' => 'Кеш %s очищено', + 'deleted' => 'Стрічку видалено', + 'error' => 'Не вдалося оновити стрічку', + 'favicon' => array( + 'too_large' => 'Завантажена піктограма завелика. Максимальний розмір файлу %s.', + 'unsupported_format' => 'Формат зображення не підтримується!', + ), + 'internal_problem' => 'Не вдалося додати стрічку новин. Докладніше в журналах FreshRSS. Щоб спробувати примусове додання, допишіть #force_feed до URL-адреси.', + 'invalid_url' => 'URL-адреса %s хибна', + 'n_actualized' => 'Стрічки оновлено (%d)', + 'n_entries_deleted' => 'Статті видалено (%d)', + 'no_refresh' => 'Нема стрічок, які можна було б оновити', + 'not_added' => 'Не вдалося додати %s', + 'not_found' => 'Стрічки не знайдено', + 'over_max' => 'Ви вже маєте максимум дозволених стрічок (%d)', + 'reloaded' => '%s перезавантажено', + 'selector_preview' => array( + 'http_error' => 'Не вдалося завантажити сайт.', + 'no_entries' => 'У стрічці нема статей. Щоб створити попередній перегляд, треба принаймні одна стаття.', + 'no_feed' => 'Внутрішня помилка (стрічки не знайдено).', + 'no_result' => 'Селектору ніщо не відповідає. Натомість буде показано початковий текст стрічки.', + 'selector_empty' => 'Селектор порожній. Щоб створити попередній перегляд, налаштуйте селектор.', + ), + 'updated' => 'Стрічку оновлено', + ), + 'purge_completed' => 'Видалення завершено (видалено статей: %d)', + ), + 'tag' => array( + 'created' => 'Мітку «%» створено.', + 'error' => 'Не вдалося оновити мітку!', + 'name_exists' => 'Мітка з такою назвою вже існує.', + 'renamed' => 'Мітку «%s» перейменовано на «%s».', + 'updated' => 'Мітку оновлено.', + ), + 'update' => array( + 'can_apply' => 'Наявне оновлення FreshRSS: версія %s.', + 'error' => 'При оновленні виникла помилка: %s', + 'file_is_nok' => 'Наявне оновлення FreshRSS (версія %s), але перевірте доступи до каталога %s. HTTP-серверу потрібен дозвіл на запис', + 'finished' => 'Оновлення завершено!', + 'none' => 'Нема доступних оновлень', + 'server_not_found' => 'Не вдалося знайти сервер оновлень. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => 'Користувача %s створено', + 'error' => 'Не вдалося створити користувача %s', + ), + 'deleted' => array( + '_' => 'Користувача %s видалено', + 'error' => 'Не вдалося видалити користувача %s', + ), + 'updated' => array( + '_' => 'Користувача %s оновлено', + 'error' => 'Не вдалося оновити користувача %s', + ), + ), +); diff --git a/app/i18n/uk/gen.php b/app/i18n/uk/gen.php new file mode 100644 index 000000000..1743b36d0 --- /dev/null +++ b/app/i18n/uk/gen.php @@ -0,0 +1,273 @@ + array( + 'actualize' => 'Оновити стрічки', + 'add' => 'Додати', + 'back_to_rss_feeds' => '← Повернутися до RSS-стрічок', + 'cancel' => 'Скасувати', + 'close' => 'Закрити', + 'create' => 'Створити', + 'delete_all_feeds' => 'Видалити всі стрічки', + 'delete_errored_feeds' => 'Видалити стрічки з помилками', + 'delete_muted_feeds' => 'Видалити зупинені стрічки', + 'demote' => 'Забрати повноваження', + 'disable' => 'Вимкнути', + 'download' => 'Завантажити', + 'empty' => 'Спорожнити', + 'enable' => 'Увімкнути', + 'export' => 'Експортувати', + 'filter' => 'Фільтрувати', + 'import' => 'Імпортувати', + 'load_default_shortcuts' => 'Відновити типові клавіші', + 'manage' => 'Керувати', + 'mark_read' => 'Позначити прочитаними', + 'menu' => array( + 'open' => 'Відкрити меню', + ), + 'nav_buttons' => array( + 'next' => 'Наступна стаття', + 'prev' => 'Попередня стаття', + 'up' => 'Вгору', + ), + 'open_url' => 'Відкрити URL-адресу', + 'promote' => 'Підвищити', + 'purge' => 'Застосувати політику видалення', + 'refresh_opml' => 'Оновити OPML', + 'remove' => 'Вилучити', + 'rename' => 'Перейменувати', + 'see_website' => 'Переглянути вебсайт', + 'submit' => 'Надіслати', + 'truncate' => 'Видалити всі статті', + 'update' => 'Оновити', + ), + 'auth' => array( + 'accept_tos' => 'Погоджуюся з умовами надання послуг.', + 'email' => 'Адреса електронної пошти', + 'keep_logged_in' => 'Памʼятати мене (%s днів)', + 'login' => 'Увійти', + 'logout' => 'Вийти', + 'password' => array( + '_' => 'Пароль', + 'format' => 'Принаймні 7 символів', + ), + 'reauth' => array( + 'header' => 'Слід перезайти', + 'tip' => 'Система не проситиме вас перезаходити найближчі %d хвилин', + 'title' => 'Повторний вхід', + ), + 'registration' => array( + '_' => 'Новий обліковий запис', + 'ask' => 'Створити обліковий запис?', + 'title' => 'Створення облікового запису', + ), + 'username' => array( + '_' => 'Користувацьке імʼя', + 'format' => 'Максимум 16 латинських літер або цифер', + ), + ), + 'date' => array( + 'Apr' => '\\к\\в\\і\\т\\н\\я', + 'Aug' => '\\с\\е\\р\\п\\н\\я', + 'Dec' => '\\г\\р\\у\\д\\н\\я', + 'Feb' => '\\л\\ю\\т\\о\\г\\о', + 'Jan' => '\\с\\і\\ч\\н\\я', + 'Jul' => '\\л\\и\\п\\н\\я', + 'Jun' => '\\ч\\е\\р\\в\\н\\я', + 'Mar' => '\\б\\е\\р\\е\\з\\н\\я', + 'May' => '\\т\\р\\а\\в\\н\\я', + 'Nov' => '\\л\\и\\с\\т\\о\\п\\а\\д\\а', + 'Oct' => '\\ж\\о\\в\\т\\н\\я', + 'Sep' => '\\в\\е\\р\\е\\с\\н\\я', + 'apr' => 'кві', + 'april' => 'квітня', + 'aug' => 'сер', + 'august' => 'серпня', + 'before_yesterday' => 'Раніше за вчора', + 'dec' => 'гру', + 'december' => 'грудня', + 'feb' => 'лют', + 'february' => 'лютого', + 'format_date' => 'j %s Y', // IGNORE + 'format_date_hour' => 'j %s Y \\о H\\:i', + 'fri' => 'Пт', + 'jan' => 'січ', + 'january' => 'січня', + 'jul' => 'лип', + 'july' => 'липня', + 'jun' => 'чер', + 'june' => 'червня', + 'last_2_year' => 'Минулі два роки', + 'last_3_month' => 'Минулі три місяці', + 'last_3_year' => 'Минулі три роки', + 'last_5_year' => 'Минулі пʼять років', + 'last_6_month' => 'Минулі шість місяців', + 'last_month' => 'Минулий місяць', + 'last_week' => 'Минулий тиждень', + 'last_year' => 'Минулий рік', + 'mar' => 'бер', + 'march' => 'березня', + 'may' => 'тра', + 'may_' => 'травня', + 'mon' => 'Пн', + 'month' => 'місяці', + 'nov' => 'лис', + 'november' => 'листопада', + 'oct' => 'жов', + 'october' => 'жовтня', + 'sat' => 'Сб', + 'sep' => 'вер', + 'september' => 'вересня', + 'sun' => 'Нд', + 'thu' => 'Чт', + 'today' => 'Сьогодні', + 'tue' => 'Вт', + 'wed' => 'Ср', + 'yesterday' => 'Вчора', + ), + 'dir' => 'ltr', // IGNORE + 'flag' => '🇺🇦', + 'freshrss' => array( + '_' => 'FreshRSS', // IGNORE + 'about' => 'Про FreshRSS', + ), + 'js' => array( + 'category_empty' => 'Порожня категорія', + 'confirm_action' => 'Точно виконати цю дію? Її неможливо скасувати!', + 'confirm_action_feed_cat' => 'Точно виконати цю дію? Ви втратите повʼязані вподобання й користувацькі запити. Дію неможливо скасувати!', + 'confirm_exit_slider' => 'Точно відкинути незбережені параметри?', + 'feedback' => array( + 'body_new_articles' => 'Наявні нові статті (%%d) у FreshRSS.', + 'body_unread_articles' => '(непрочитано: %%d)', + 'request_failed' => 'Не вдалося виконати запит. Можливо, інтернет-зʼєднання нестабільне.', + 'title_new_articles' => 'FreshRSS: нові статті!', + ), + 'labels_empty' => 'Міток нема', + 'new_article' => 'Наявні нові статті. Натисніть, щоб оновити сторінку.', + 'should_be_activated' => 'Слід увімкнути JavaScript', + 'unsafe_csp_header' => 'Через використовуваний CSP-заголовок FreshRSS під загрозою XSS-атак. Переглянути документацію', + ), + 'lang' => array( + 'cs' => 'Čeština', // IGNORE + 'de' => 'Deutsch', // IGNORE + 'el' => 'Ελληνικά', // IGNORE + 'en' => 'English', // IGNORE + 'en-us' => 'English (United States)', // IGNORE + 'es' => 'Español', // IGNORE + 'fa' => 'فارسی', // IGNORE + 'fi' => 'Suomi', // IGNORE + 'fr' => 'Français', // IGNORE + 'he' => 'עברית', // IGNORE + 'hu' => 'Magyar', // IGNORE + 'id' => 'Bahasa Indonesia', // IGNORE + 'it' => 'Italiano', // IGNORE + 'ja' => '日本語', // IGNORE + 'ko' => '한국어', // IGNORE + 'lv' => 'Latviešu', // IGNORE + 'nl' => 'Nederlands', // IGNORE + 'oc' => 'Occitan', // IGNORE + 'pl' => 'Polski', // IGNORE + 'pt-br' => 'Português (Brasil)', // IGNORE + 'pt-pt' => 'Português (Portugal)', // IGNORE + 'ru' => 'Русский', // IGNORE + 'sk' => 'Slovenčina', // IGNORE + 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE + 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE + ), + 'menu' => array( + 'about' => 'Про програму', + 'account' => 'Обліковий запис', + 'admin' => 'Адміністрування', + 'archiving' => 'Архівування', + 'authentication' => 'Вхід', + 'check_install' => 'Перевірка встановлення', + 'configuration' => 'Налаштування', + 'display' => 'Оформлення', + 'extensions' => 'Розширення', + 'logs' => 'Журнали', + 'privacy' => 'Приватність', + 'queries' => 'Користувацькі запити', + 'reading' => 'Читання', + 'search' => 'Шукати слова або #теги', + 'search_help' => 'Перегляньте документацію складніших параметрів пошуку', + 'sharing' => 'Поширення', + 'shortcuts' => 'Клавіші', + 'stats' => 'Статистика', + 'system' => 'Налаштування системи', + 'update' => 'Оновити', + 'user_management' => 'Керувати користувачами', + 'user_profile' => 'Профіль', + ), + 'period' => array( + 'days' => 'д.', + 'hours' => 'год', + 'months' => 'міс.', + 'weeks' => 'тижд', + 'years' => 'р.', + ), + 'share' => array( + 'Known' => 'Сайти на Known', + 'archiveIS' => 'archive.is', // IGNORE + 'archiveORG' => 'archive.org', // IGNORE + 'archivePH' => 'archive.ph', // IGNORE + 'bluesky' => 'Bluesky', // IGNORE + 'buffer' => 'Buffer', // IGNORE + 'clipboard' => 'Копіювати посилання', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => 'Електронна пошта', + 'email-webmail-firefox-fix' => 'Електронна пошта (веб-версія — виправлення для Firefox)', + 'facebook' => 'Facebook', // IGNORE + 'gnusocial' => 'GNU social', // IGNORE + 'jdh' => 'Journal du hacker', // IGNORE + 'lemmy' => 'Lemmy', // IGNORE + 'linkding' => 'Linkding', // IGNORE + 'linkedin' => 'LinkedIn', // IGNORE + 'mastodon' => 'Mastodon', // IGNORE + 'movim' => 'Movim', // IGNORE + 'omnivore' => 'Omnivore', // IGNORE + 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // IGNORE + 'pocket' => 'Pocket', // IGNORE + 'print' => 'Друк', + 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // IGNORE + 'shaarli' => 'Shaarli', // IGNORE + 'telegram' => 'Telegram', // IGNORE + 'twitter' => 'Twitter', // IGNORE + 'wallabag' => 'wallabag v1', // IGNORE + 'wallabagv2' => 'wallabag v2', // IGNORE + 'web-sharing-api' => 'Системне поширення', + 'whatsapp' => 'Whatsapp', // IGNORE + 'xing' => 'Xing', // IGNORE + ), + 'short' => array( + 'attention' => 'Увага!', + 'blank_to_disable' => 'Щоб вимкнути, залиште порожнім', + 'by_author' => 'Від:', + 'by_default' => 'Типово', + 'damn' => 'Йой!', + 'default_category' => 'Без категорії', + 'no' => 'Ні', + 'not_applicable' => 'Недоступно', + 'ok' => 'Гаразд!', + 'or' => 'чи', + 'yes' => 'Так', + ), + 'stream' => array( + 'load_more' => 'Завантажити більше статей', + 'mark_all_read' => 'Позначити всі прочитаними', + 'nothing_to_load' => 'Більше статей нема', + ), +); diff --git a/app/i18n/uk/index.php b/app/i18n/uk/index.php new file mode 100644 index 000000000..8d12139f8 --- /dev/null +++ b/app/i18n/uk/index.php @@ -0,0 +1,110 @@ + array( + '_' => 'Про програму', + 'agpl3' => 'AGPL 3', // IGNORE + 'bug_reports' => array( + 'environment_information' => array( + '_' => 'Дані про систему', + 'browser' => 'Браузер', + 'database' => 'База даних', + 'server_software' => 'Серверне ПЗ', + 'version_curl' => 'Версія cURL', + 'version_frss' => 'Версія FreshRSS', + 'version_php' => 'Версія PHP', + ), + ), + 'bugs_reports' => 'Звіти про вади', + 'documentation' => 'Документація', + 'freshrss_description' => 'FreshRSS — це агрегатор і читач RSS-стрічок, який можна встановити на власному сервері. Це надає змогу підписуватись на декілька сайтів новин і читати їх в одній стрічці, не перемикаючись між сайтами. FreshRSS — ощадлива й проста у використанні програма, гнучка в налаштуванні.', + 'github' => 'на GitHub', + 'license' => 'Ліцензія', + 'project_website' => 'Сайт проєкту', + 'title' => 'Про програму', + 'version' => 'Версія', + ), + 'feed' => array( + 'empty' => 'Нема статей для показу.', + 'received' => array( + 'before_yesterday' => 'Отримано раніше за вчора', + 'today' => 'Отримано сьогодні', + 'yesterday' => 'Отримано вчора', + ), + 'rss_of' => 'RSS-стрічка %s', + 'title' => 'Головний потік', + 'title_fav' => 'Вподобані', + 'title_global' => 'Глобальний показ', + ), + 'log' => array( + '_' => 'Журнали', + 'clear' => 'Очистити журнали', + 'empty' => 'Файл журналів порожній', + 'title' => 'Журнали', + ), + 'menu' => array( + 'about' => 'Про FreshRSS', + 'before_one_day' => 'Старіші за день', + 'before_one_week' => 'Старіші за тиждень', + 'bookmark_query' => 'Додати поточний запит у закладки', + 'favorites' => 'Вподобані (%s)', + 'global_view' => 'Загальний показ', + 'important' => 'Важливі стрічки', + 'main_stream' => 'Головний потік', + 'mark_all_read' => 'Позначити всі прочитаними', + 'mark_cat_read' => 'Позначити категорію прочитаною', + 'mark_feed_read' => 'Позначити стрічку прочитаною', + 'mark_selection_unread' => 'Позначити вибрані непрочитаними', + 'mylabels' => 'Мої мітки', + 'newer_first' => 'Спершу новіші', + 'non-starred' => 'Показати невподобані', + 'normal_view' => 'Звичайний показ', + 'older_first' => 'Спершу старіші', + 'queries' => 'Користувацькі запити', + 'read' => 'Показати прочитані', + 'reader_view' => 'Читацький показ', + 'rss_view' => 'RSS-стрічка', + 'search_short' => 'Пошук', + 'sort' => array( + '_' => 'Критерії впорядкування', + 'c' => array( + 'name_asc' => 'Заголовки категорії та стрічки А→Я', + 'name_desc' => 'Заголовки категорії та стрічки Я→А', + ), + 'date_asc' => 'Дата оприлюднення 1→9', + 'date_desc' => 'Дата оприлюднення 9→1', + 'f' => array( + 'name_asc' => 'Назва стрічки A→Z', + 'name_desc' => 'Назва стрічки Z→A', + ), + 'id_asc' => 'Спершу найдавніше отримані', + 'id_desc' => 'Спершу щойно отримані', + 'link_asc' => 'Посилання А→Я', + 'link_desc' => 'Посилання Я→А', + 'rand' => 'Довільний порядок', + 'title_asc' => 'Заголовок А→Я', + 'title_desc' => 'Заголовок Я→А', + ), + 'starred' => 'Показати вподобані', + 'stats' => 'Статистика', + 'subscription' => 'Керування підписками', + 'unread' => 'Показати непрочитані', + ), + 'share' => 'Поширити', + 'tag' => array( + 'related' => 'Теги статей', + ), + 'tos' => array( + 'title' => 'Умови надання послуг', + ), +); diff --git a/app/i18n/uk/install.php b/app/i18n/uk/install.php new file mode 100644 index 000000000..18dfd8f8e --- /dev/null +++ b/app/i18n/uk/install.php @@ -0,0 +1,128 @@ + array( + 'finish' => 'Завершити встановлення', + 'fix_errors_before' => 'Перш ніж почати наступний крок, слід виправити всі помилки.', + 'keep_install' => 'Зберегти попереднє налаштування', + 'next_step' => 'Почати наступний крок', + 'reinstall' => 'Перевстановити FreshRSS', + ), + 'bdd' => array( + '_' => 'База даних', + 'conf' => array( + '_' => 'Налаштування бази даних', + 'ko' => 'Перевірте налаштування бази даних.', + 'ok' => 'Налаштування бази даних збережено.', + ), + 'host' => 'Хост', + 'password' => 'Пароль до бази даних', + 'prefix' => 'Префікс таблиць', + 'type' => 'Тип бази даних', + 'username' => 'Користувацьке імʼя бази даних', + ), + 'check' => array( + '_' => 'Перевірки', + 'already_installed' => 'Виявлено вже встановлену FreshRSS!', + 'cache' => array( + 'nok' => 'Перевірте доступ до каталога %1$s для користувача %2$s. HTTP-серверу потрібен дозвіл на запис.', + 'ok' => 'Доступ до каталога кешу працює.', + ), + 'ctype' => array( + 'nok' => 'Не вдалося знайти необхідної бібліотеки перевірки типу символа (php-ctype).', + 'ok' => 'У вас є необхідна бібліотека перевірки типу символа (ctype).', + ), + 'curl' => array( + 'nok' => 'Не вдалося знайти бібліотеку cURL (пакунок php-curl).', + 'ok' => 'У вас є бібліотека cURL.', + ), + 'data' => array( + 'nok' => 'Перевірте доступ до каталога %1$s для користувача %2$s. HTTP-серверу потрібен дозвіл на запис.', + 'ok' => 'Доступ до каталога даних працює.', + ), + 'dom' => array( + 'nok' => 'Не вдалося знайти необхідну бібліотеку роботи з DOM.', + 'ok' => 'У вас є необхідна бібліотека роботи з DOM.', + ), + 'favicons' => array( + 'nok' => 'Перевірте доступ до каталога %1$s для користувача %2$s. HTTP-серверу потрібен дозвіл на запис.', + 'ok' => 'Доступ до каталога favicons працює.', + ), + 'fileinfo' => array( + 'nok' => 'Не вдалося знайти бібліотеку PHP fileinfo (пакунок fileinfo).', + 'ok' => 'У вас є бібліотека fileinfo.', + ), + 'json' => array( + 'nok' => 'Не вдалося знайти бажану бібліотеку розпізнання JSON.', + 'ok' => 'У вас є бажана бібліотека розпізнання JSON.', + ), + 'mbstring' => array( + 'nok' => 'Не вдалося знайти бажану бібліотеку mbstring для Юнікоду.', + 'ok' => 'У вас є бажана бібліотека mbstring для Юнікоду.', + ), + 'pcre' => array( + 'nok' => 'Не вдалося знайти необхідну бібліотеку регулярних виразів (php-pcre).', + 'ok' => 'У вас є необхідна бібліотека регулярних виразів (PCRE).', + ), + 'pdo' => array( + 'nok' => 'Не вдалося знайти PDO чи один із підтримуваних драйверів (pdo_mysql, pdo_sqlite чи pdo_pgsql).', + 'ok' => 'У вас є PDO та принаймні один із підтримуваних драйверів (pdo_mysql, pdo_sqlite чи pdo_pgsql).', + ), + 'php' => array( + 'nok' => 'У вас PHP версії %s, проте для FreshRSS треба принаймні %s.', + 'ok' => 'Ваша версія PHP, %s, сумісна з FreshRSS.', + ), + 'reload' => 'Повторити перевірку', + 'tmp' => array( + 'nok' => 'Перевірте доступ до каталога %1$s для користувача %2$s. HTTP-серверу потрібен дозвіл на запис.', + 'ok' => 'Доступ до тимчасового каталога працює.', + ), + 'unknown_process_username' => 'невідомо', + 'users' => array( + 'nok' => 'Перевірте доступ до каталога %1$s для користувача %2$s. HTTP-серверу потрібен дозвіл на запис.', + 'ok' => 'Доступ до користувацького каталога працює.', + ), + 'xml' => array( + 'nok' => 'Не вдалося знайти необхідну бібліотеку розпізнання XML.', + 'ok' => 'У вас є необхідна бібліотека розпізнання XML.', + ), + ), + 'conf' => array( + '_' => 'Загальне налаштування', + 'ok' => 'Загальне налаштування збережено.', + ), + 'congratulations' => 'Вітаємо!', + 'default_user' => array( + '_' => 'Імʼя типового користувача', + 'max_char' => 'максимум 16 латинських літер і цифр', + ), + 'fix_errors_before' => 'Перш ніж перейти до наступного кроку, слід виправити помилки.', + 'javascript_is_better' => 'FreshRSS зручніше, коли JavaScript увімкнено', + 'js' => array( + 'confirm_reinstall' => 'Перевстановлення FreshRSS призведе до втрати налаштувань. Точно продовжити?', + ), + 'language' => array( + '_' => 'Мова', + 'choose' => 'Оберіть мову FreshRSS', + 'defined' => 'Мову визначено.', + ), + 'missing_applied_migrations' => 'Щось пішло не так; створіть порожній файл %s вручну.', + 'ok' => 'Встановлення успішне.', + 'session' => array( + 'nok' => 'Схоже, вебсервер має хибні налаштування кукі для PHP-сеансів!', + ), + 'step' => 'крок %d', + 'steps' => 'Кроки', + 'this_is_the_end' => 'Готово', + 'title' => 'Встановлення · FreshRSS', +); diff --git a/app/i18n/uk/sub.php b/app/i18n/uk/sub.php new file mode 100644 index 000000000..7f1854f98 --- /dev/null +++ b/app/i18n/uk/sub.php @@ -0,0 +1,306 @@ + array( + 'documentation' => 'Скопіюйте наступну URL-адресу для використання зі сторонньою програмою.', + 'title' => 'API', // IGNORE + ), + 'bookmarklet' => array( + 'documentation' => 'Посуньте цю кнопку до вашої панелі закладок або натисніть її правою кнопкою мишки та оберіть «Додати посилання до закладок». Тоді натисніть закладку «Підписатися» на будь-якій сторінці, на яку бажаєте підписатись.', + 'label' => 'Підписатися', + 'title' => 'Закладка-скрипт', + ), + 'category' => array( + '_' => 'Категорія', + 'add' => 'Додати категорію', + 'archiving' => 'Архівування', + 'dynamic_opml' => array( + '_' => 'Динамічний OPML', + 'help' => 'Щоб динамічно заповнювати цю категорію стрічками, вкажіть URL-адресу OPML-файлу', + ), + 'empty' => 'Порожня категорія', + 'expand' => 'Розгорнути категорію', + 'information' => 'Інформація', + 'open' => 'Відкрити категорію', + 'opml_url' => 'URL-адреса OPML', + 'position' => 'Пріоритет показу', + 'position_help' => 'Визначає порядок категорій', + 'title' => 'Заголовок', + ), + 'feed' => array( + 'accept_cookies' => 'Приймати кукі', + 'accept_cookies_help' => 'Дозволити серверу стрічки призначати кукі (зберігаються в памʼяті лише на час запиту)', + 'add' => 'Додати стрічку', + 'advanced' => 'Особливості', + 'archiving' => 'Архівування', + 'auth' => array( + 'configuration' => 'Авторизація', + 'help' => 'Дає змогу читати RSS-стрічки, захищені за допомогою HTTP-авторизації', + 'http' => 'HTTP-автентифікація', + 'password' => 'Пароль HTTP', + 'username' => 'Користувацьке імʼя HTTP', + ), + 'change_favicon' => 'Змінити…', + 'clear_cache' => 'Завжди чистити кеш', + 'content_action' => array( + '_' => 'Дія з текстом при завантаженні тексту статті', + 'append' => 'Додати після наявного тексту', + 'prepend' => 'Додати перед наявним текстом', + 'replace' => 'Замінити наявний текст', + ), + 'content_retrieval' => 'Завантаження тексту', + 'css_cookie' => 'Використовувати кукі при завантаженні тексту статті', + 'css_cookie_help' => 'Наприклад, foo=bar; gdpr_consent=true; cookie=value', + 'css_help' => 'Завантажує скорочені RSS-стрічки (обережно, це повільніше!)', + 'css_path' => 'CSS-селектор статті на вебсайті', + 'css_path_filter' => array( + '_' => 'CSS-селектор видалення елементів', + 'help' => 'CSS-селектор може бути списком, наприклад footer, aside, p[data-sanitized-class~="menu"]', + ), + 'description' => 'Опис', + 'empty' => 'Стрічка порожня. Перевірте, чи її все ще ведуть.', + 'error' => 'Зі стрічкою виникла проблема. Якщо це повторюватиметься, перевірте, чи стрічка все ще доступна.', + 'export-as-opml' => array( + 'download' => 'Завантажити', + 'help' => 'XML-файл (підмножина даних. Перегляньте документацію)', + 'label' => 'Експорт у форматі OPML', + ), + 'ext_favicon' => 'Налаштувати автоматично', + 'favicon_changed_by_ext' => 'Піктограму налаштовано розширенням %s.', + 'filteractions' => array( + '_' => 'Автоматичний фільтр', + 'help' => 'По одному фільтру на рядок. Перегляньте документацію операторів.', + ), + 'http_headers' => 'HTTP-заголовки', + 'http_headers_help' => 'По заголовку на рядок. Назву й значення відокремлено двокрапкою (наприклад, Accept: application/atom+xml
Authorization: Bearer деякий-токен
).', + 'icon' => 'Піктограма', + 'information' => 'Інформація', + 'keep_min' => 'Мінімум збережених статей', + 'kind' => array( + '_' => 'Тип джерела стрічки', + 'html_json' => array( + '_' => 'HTML + XPath + JSON із крапковою нотацією (JSON в HTML)', + 'xpath' => array( + '_' => 'XPath-селектор JSON в HTML', + 'help' => 'Приклад: normalize-space(//script[@type="application/json"]) (єдиний JSON)
або: //script[@type="application/ld+json"] (по одному JSON-обʼєкту на статтю)', + ), + ), + 'html_xpath' => array( + '_' => 'HTML + XPath (скрейпінг)', + 'feed_title' => array( + '_' => 'заголовка стрічки', + 'help' => 'Наприклад, //title або статичний рядок "Моя власна стрічка"', + ), + 'help' => 'XPath 1.0 — це стандартна мова запитів, за допомогою яких FreshRSS може скрейпити вебсайти.', + 'item' => array( + '_' => 'знаходження новин
(найважливіше)', + 'help' => 'Наприклад, //div[@class="news-item"]', + ), + 'item_author' => array( + '_' => 'автора новини', + 'help' => 'Може також бути статичним рядком, наприклад "Anonymous"', + ), + 'item_categories' => 'тегів новини', + 'item_content' => array( + '_' => 'тексту новини', + 'help' => 'Приклад для виділення цілої новини: .', + ), + 'item_thumbnail' => array( + '_' => 'ілюстрації новини', + 'help' => 'Наприклад, descendant::img/@src', + ), + 'item_timeFormat' => array( + '_' => 'Особливий формат дати й часу', + 'help' => 'Необовʼязково. Формат мусить підтримуватись DateTime::createFromFormat(), наприклад d-m-Y H:i:s', + ), + 'item_timestamp' => array( + '_' => 'дати новини', + 'help' => 'Результат буде розпізнано за допомогою strtotime()', + ), + 'item_title' => array( + '_' => 'заголовка новини', + 'help' => 'Використовуйте зокрема вісь XPath descendant::, наприклад descendant::h2', + ), + 'item_uid' => array( + '_' => 'унікального ідентифікатора новини', + 'help' => 'Необовʼязково. Наприклад, descendant::div/@data-uri', + ), + 'item_uri' => array( + '_' => 'URL-адреси новини', + 'help' => 'Наприклад, descendant::a/@href', + ), + 'relative' => 'XPath (відносно новини) до:', + 'xpath' => 'XPath для:', + ), + 'json_dotnotation' => array( + '_' => 'JSON (крапкова нотація)', + 'feed_title' => array( + '_' => 'назви стрічки', + 'help' => 'Наприклад, meta.title або статичний рядок: "Моя власна стрічка"', + ), + 'help' => 'У JSON-розмітці з крапковою нотацією між обʼєктами стоять крапки, а масиви позначаються квадратними дужками (наприклад, data.items[0].title)', + 'item' => array( + '_' => 'знаходження новин
(найважливіше)', + 'help' => 'JSON-шлях до масива, що містить новини, наприклад $ чи newsItems', + ), + 'item_author' => 'автора новини', + 'item_categories' => 'тегів новини', + 'item_content' => array( + '_' => 'тексту новини', + 'help' => 'Ключ, за яким знаходиться текст, наприклад content', + ), + 'item_thumbnail' => array( + '_' => 'ілюстрації новини', + 'help' => 'Наприклад, image', + ), + 'item_timeFormat' => array( + '_' => 'Особливий формат дати й часу', + 'help' => 'Необовʼязково. Формат мусить підтримуватись DateTime::createFromFormat(), наприклад d-m-Y H:i:s', + ), + 'item_timestamp' => array( + '_' => 'дати новини', + 'help' => 'Результат буде розпізнано за допомогою strtotime()', + ), + 'item_title' => 'заголовка новини', + 'item_uid' => 'унікального ідентифікатора новини', + 'item_uri' => array( + '_' => 'URL-адреси новини', + 'help' => 'Наприклад, permalink', + ), + 'json' => 'крапкова нотація для:', + 'relative' => 'шлях у крапковій нотації (відносно новини) до:', + ), + 'jsonfeed' => 'JSON-стрічка', + 'rss' => 'RSS/Atom (типово)', + 'xml_xpath' => 'XML + XPath', // IGNORE + ), + 'maintenance' => array( + 'clear_cache' => 'Очистити кеш', + 'clear_cache_help' => 'Спорожнити кеш стрічки.', + 'reload_articles' => 'Перезавантажити статті', + 'reload_articles_help' => 'Перезавантажити стільки статей і завантажити повний текст, якщо визначено селектор.', + 'title' => 'Супровід', + ), + 'max_http_redir' => 'Максимум HTTP-переспрямувань', + 'max_http_redir_help' => '0 або порожнє поле — вимкнути; щоб не обмежувати переспрямувань, -1', + 'method' => array( + '_' => 'HTTP-метод', + ), + 'method_help' => 'POST-тіло автоматично набуває формату application/x-www-form-urlencoded чи application/json', + 'method_postparams' => 'Тіло POST-запиту', + 'moved_category_deleted' => 'При видаленні категорії її стрічки переходять до списку «%s».', + 'mute' => array( + '_' => 'зупинено', + 'state_is_muted' => 'Стрічку зупинено', + ), + 'no_selected' => 'Стрічки не обрано.', + 'number_entries' => 'Статей: %d', + 'open_feed' => 'Відкрити стрічку %s', + 'path_entries_conditions' => 'Умови завантаження тексту', + 'priority' => array( + '_' => 'Видимість', + 'archived' => 'Не показувати (архівовано)', + 'category' => 'Показати в категорії', + 'important' => 'Показати у важливих стрічках', + 'main_stream' => 'Показати в головному потоці', + ), + 'proxy' => 'Налаштувати проксі для завантаження стрічки', + 'proxy_help' => 'Оберіть протокол (наприклад, SOCKS5) і введіть адресу проксі (наприклад, 127.0.0.1:1080 чи логін:пароль@127.0.0.1:1080)', + 'reset_favicon' => 'Відновити типову', + 'selector_preview' => array( + 'show_raw' => 'Показати початковий код', + 'show_rendered' => 'Показати текст', + ), + 'show' => array( + 'all' => 'Усі стрічки', + 'error' => 'Лише стрічки з помилками', + ), + 'showing' => array( + 'error' => 'Показано лише стрічки з помилками', + ), + 'ssl_verify' => 'Перевіряти SSL-захист', + 'stats' => 'Статистика', + 'think_to_add' => 'Можете додати кілька стрічок.', + 'timeout' => 'Тайм-аут у секундах', + 'title' => 'Заголовок', + 'title_add' => 'Додати RSS-стрічку', + 'ttl' => 'Частота автоматичного оновлення', + 'unicityCriteria' => array( + '_' => 'Критерій унікальності статей', + 'forced' => 'примусово', + 'help' => 'Стосується некоректних стрічок.
⚠️ Зміна політики призведе до появи дублів.', + 'id' => 'Стандартний ідентифікатор (типово)', + 'link' => 'Посилання', + 'sha1:content' => 'Текст', + 'sha1:content_published' => 'Текст і дата', + 'sha1:link_published' => 'Посилання й дата', + 'sha1:link_published_title' => 'Посилання, дата й заголовок', + 'sha1:link_published_title_content' => 'Посилання, дата, заголовок і текст', + 'sha1:published' => 'Дата', + 'sha1:title' => 'Заголовок', + 'sha1:title_published' => 'Заголовок і дата', + 'sha1:title_published_content' => 'Заголовок, дата й текст', + ), + 'url' => 'URL-адреса стрічки', + 'useragent' => 'Налаштувати користувацький агент для завантаження стрічки', + 'useragent_help' => 'Наприклад, Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', + 'validator' => 'Перевірити коректність стрічки', + 'website' => 'URL-адреса вебсайту', + 'websub' => 'Негайні сповіщення за допомогою WebSub', + ), + 'import_export' => array( + 'export' => array( + '_' => 'Експорт', + 'sqlite' => 'Завантажити користувацьку базу даних у форматі SQLite', + ), + 'export_labelled' => 'Статті з мітками', + 'export_opml' => 'Перелік стрічок (OPML)', + 'export_starred' => 'Вподобані', + 'feed_list' => 'Список статей %s', + 'file_to_import' => 'Файл для імпорту
(OPML, JSON або ZIP)', + 'file_to_import_no_zip' => 'Файл для імпорту
(OPML або JSON)', + 'import' => 'Імпорт', + 'starred_list' => 'Список вподобаних статей', + 'title' => 'Імпорт/експорт', + ), + 'menu' => array( + 'add' => 'Додати стрічку чи категорію', + 'import_export' => 'Імпорт/експорт', + 'label_management' => 'Керування мітками', + 'stats' => array( + 'idle' => 'Неактивні стрічки', + 'main' => 'Основна статистика', + 'repartition' => 'Перерозподіл статей', + ), + 'subscription_management' => 'Керування підписками', + 'subscription_tools' => 'Засоби підписки', + ), + 'tag' => array( + 'auto_label' => 'Додавати мітку до нових статей', + 'name' => 'Назва', + 'new_name' => 'Нова назва', + 'old_name' => 'Стара назва', + ), + 'title' => array( + '_' => 'Керування підписками', + 'add' => 'Додати стрічку чи категорію', + 'add_category' => 'Додати категорію', + 'add_dynamic_opml' => 'Додати динамічний OPML', + 'add_feed' => 'Додати стрічку', + 'add_label' => 'Додати мітку', + 'add_opml_category' => 'Назва категорії OPML', + 'delete_label' => 'Видалити мітку', + 'feed_management' => 'Керування RSS-стрічками', + 'subscription_tools' => 'Засоби підписки', + ), +); diff --git a/app/i18n/uk/user.php b/app/i18n/uk/user.php new file mode 100644 index 000000000..57b692771 --- /dev/null +++ b/app/i18n/uk/user.php @@ -0,0 +1,54 @@ + array( + 'feedback' => array( + 'invalid' => 'Хибна адреса електронної пошти.', + 'required' => 'Адреса електронної пошти обовʼязкова.', + ), + 'validation' => array( + 'change_email' => 'Можете змінити адресу електронної пошти на сторінці профілю.', + 'email_sent_to' => 'На %s надіслано лист. Щоб підтвердити вашу адресу, виконайте інструкції з нього.', + 'feedback' => array( + 'email_failed' => 'Не вдалося надіслати вам лист через помилку налаштування сервера.', + 'email_sent' => 'На вашу адресу надіслано лист.', + 'error' => 'Не вдалося підтвердити адресу електронної пошти.', + 'ok' => 'Адресу електронної пошти підтверджено.', + 'unnecessary' => 'Цю адресу електронної пошти вже було підтверджено.', + 'wrong_token' => 'Не вдалося підтвердити адресу електронної пошти через хибний токен.', + ), + 'need_to' => 'Перш ніж почати користуватися %s, підтвердьте адресу електронної пошти %s.', + 'resend_email' => 'Надіслати лист повторно', + 'title' => 'Підтвердження адреси електронної пошти', + ), + ), + 'mailer' => array( + 'email_need_validation' => array( + 'body' => 'Ви щойно зареєструвались у %s, але спершу вам слід підтвердити адресу електронної пошти. Для цього перейдіть за посиланням:', + 'title' => 'Слід підтвердити реєстрацію', + 'welcome' => 'Вітаємо, %s,', + ), + ), + 'password' => array( + 'invalid' => 'Хибний пароль.', + ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'Щоб зареєструватись, необхідно прийняти умови надання послуг.', + ), + ), + 'username' => array( + 'invalid' => 'Хибне користувацьке імʼя.', + 'taken' => 'Користувацьке імʼя %s зайнято.', + ), +); diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index cb4be6b7e..f1c543b91 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '简体中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/app/i18n/zh-tw/gen.php b/app/i18n/zh-tw/gen.php index 420ecd61c..ad9f5e470 100644 --- a/app/i18n/zh-tw/gen.php +++ b/app/i18n/zh-tw/gen.php @@ -182,6 +182,7 @@ return array( 'ru' => 'Русский', // IGNORE 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE + 'uk' => 'Українська', // IGNORE 'zh-cn' => '簡體中文', // IGNORE 'zh-tw' => '正體中文', // IGNORE ), diff --git a/docs/i18n/flags/gen/uk.svg b/docs/i18n/flags/gen/uk.svg new file mode 100644 index 000000000..c59c7a9e9 --- /dev/null +++ b/docs/i18n/flags/gen/uk.svg @@ -0,0 +1,7 @@ + + + + + 🇺🇦 100% + + \ No newline at end of file -- cgit v1.2.3