diff --git a/.tx/config b/.tx/config index 1621a4181f..d88ed808e1 100644 --- a/.tx/config +++ b/.tx/config @@ -43,6 +43,7 @@ trans.sr = public/language/sr/category.json trans.sv = public/language/sv/category.json trans.th = public/language/th/category.json trans.tr = public/language/tr/category.json +trans.uk = public/language/uk/category.json trans.vi = public/language/vi/category.json trans.zh_CN = public/language/zh-CN/category.json trans.zh_TW = public/language/zh-TW/category.json @@ -90,6 +91,7 @@ trans.sr = public/language/sr/login.json trans.sv = public/language/sv/login.json trans.th = public/language/th/login.json trans.tr = public/language/tr/login.json +trans.uk = public/language/uk/login.json trans.vi = public/language/vi/login.json trans.zh_CN = public/language/zh-CN/login.json trans.zh_TW = public/language/zh-TW/login.json @@ -137,6 +139,7 @@ trans.sr = public/language/sr/recent.json trans.sv = public/language/sv/recent.json trans.th = public/language/th/recent.json trans.tr = public/language/tr/recent.json +trans.uk = public/language/uk/recent.json trans.vi = public/language/vi/recent.json trans.zh_CN = public/language/zh-CN/recent.json trans.zh_TW = public/language/zh-TW/recent.json @@ -184,6 +187,7 @@ trans.sr = public/language/sr/unread.json trans.sv = public/language/sv/unread.json trans.th = public/language/th/unread.json trans.tr = public/language/tr/unread.json +trans.uk = public/language/uk/unread.json trans.vi = public/language/vi/unread.json trans.zh_CN = public/language/zh-CN/unread.json trans.zh_TW = public/language/zh-TW/unread.json @@ -231,6 +235,7 @@ trans.sr = public/language/sr/modules.json trans.sv = public/language/sv/modules.json trans.th = public/language/th/modules.json trans.tr = public/language/tr/modules.json +trans.uk = public/language/uk/modules.json trans.vi = public/language/vi/modules.json trans.zh_CN = public/language/zh-CN/modules.json trans.zh_TW = public/language/zh-TW/modules.json @@ -278,6 +283,7 @@ trans.sr = public/language/sr/register.json trans.sv = public/language/sv/register.json trans.th = public/language/th/register.json trans.tr = public/language/tr/register.json +trans.uk = public/language/uk/register.json trans.vi = public/language/vi/register.json trans.zh_CN = public/language/zh-CN/register.json trans.zh_TW = public/language/zh-TW/register.json @@ -325,6 +331,7 @@ trans.sr = public/language/sr/user.json trans.sv = public/language/sv/user.json trans.th = public/language/th/user.json trans.tr = public/language/tr/user.json +trans.uk = public/language/uk/user.json trans.vi = public/language/vi/user.json trans.zh_CN = public/language/zh-CN/user.json trans.zh_TW = public/language/zh-TW/user.json @@ -372,6 +379,7 @@ trans.sr = public/language/sr/global.json trans.sv = public/language/sv/global.json trans.th = public/language/th/global.json trans.tr = public/language/tr/global.json +trans.uk = public/language/uk/global.json trans.vi = public/language/vi/global.json trans.zh_CN = public/language/zh-CN/global.json trans.zh_TW = public/language/zh-TW/global.json @@ -419,6 +427,7 @@ trans.sr = public/language/sr/notifications.json trans.sv = public/language/sv/notifications.json trans.th = public/language/th/notifications.json trans.tr = public/language/tr/notifications.json +trans.uk = public/language/uk/notifications.json trans.vi = public/language/vi/notifications.json trans.zh_CN = public/language/zh-CN/notifications.json trans.zh_TW = public/language/zh-TW/notifications.json @@ -466,6 +475,7 @@ trans.sr = public/language/sr/reset_password.json trans.sv = public/language/sv/reset_password.json trans.th = public/language/th/reset_password.json trans.tr = public/language/tr/reset_password.json +trans.uk = public/language/uk/reset_password.json trans.vi = public/language/vi/reset_password.json trans.zh_CN = public/language/zh-CN/reset_password.json trans.zh_TW = public/language/zh-TW/reset_password.json @@ -513,6 +523,7 @@ trans.sr = public/language/sr/users.json trans.sv = public/language/sv/users.json trans.th = public/language/th/users.json trans.tr = public/language/tr/users.json +trans.uk = public/language/uk/users.json trans.vi = public/language/vi/users.json trans.zh_CN = public/language/zh-CN/users.json trans.zh_TW = public/language/zh-TW/users.json @@ -560,6 +571,7 @@ trans.sr = public/language/sr/language.json trans.sv = public/language/sv/language.json trans.th = public/language/th/language.json trans.tr = public/language/tr/language.json +trans.uk = public/language/uk/language.json trans.vi = public/language/vi/language.json trans.zh_CN = public/language/zh-CN/language.json trans.zh_TW = public/language/zh-TW/language.json @@ -607,6 +619,7 @@ trans.sr = public/language/sr/pages.json trans.sv = public/language/sv/pages.json trans.th = public/language/th/pages.json trans.tr = public/language/tr/pages.json +trans.uk = public/language/uk/pages.json trans.vi = public/language/vi/pages.json trans.zh_CN = public/language/zh-CN/pages.json trans.zh_TW = public/language/zh-TW/pages.json @@ -654,6 +667,7 @@ trans.sr = public/language/sr/topic.json trans.sv = public/language/sv/topic.json trans.th = public/language/th/topic.json trans.tr = public/language/tr/topic.json +trans.uk = public/language/uk/topic.json trans.vi = public/language/vi/topic.json trans.zh_CN = public/language/zh-CN/topic.json trans.zh_TW = public/language/zh-TW/topic.json @@ -701,6 +715,7 @@ trans.sr = public/language/sr/success.json trans.sv = public/language/sv/success.json trans.th = public/language/th/success.json trans.tr = public/language/tr/success.json +trans.uk = public/language/uk/success.json trans.vi = public/language/vi/success.json trans.zh_CN = public/language/zh-CN/success.json trans.zh_TW = public/language/zh-TW/success.json @@ -748,6 +763,7 @@ trans.sr = public/language/sr/error.json trans.sv = public/language/sv/error.json trans.th = public/language/th/error.json trans.tr = public/language/tr/error.json +trans.uk = public/language/uk/error.json trans.vi = public/language/vi/error.json trans.zh_CN = public/language/zh-CN/error.json trans.zh_TW = public/language/zh-TW/error.json @@ -842,6 +858,7 @@ trans.sr = public/language/sr/tags.json trans.sv = public/language/sv/tags.json trans.th = public/language/th/tags.json trans.tr = public/language/tr/tags.json +trans.uk = public/language/uk/tags.json trans.vi = public/language/vi/tags.json trans.zh_CN = public/language/zh-CN/tags.json trans.zh_TW = public/language/zh-TW/tags.json @@ -889,6 +906,7 @@ trans.sr = public/language/sr/email.json trans.sv = public/language/sv/email.json trans.th = public/language/th/email.json trans.tr = public/language/tr/email.json +trans.uk = public/language/uk/email.json trans.vi = public/language/vi/email.json trans.zh_CN = public/language/zh-CN/email.json trans.zh_TW = public/language/zh-TW/email.json @@ -936,6 +954,7 @@ trans.sr = public/language/sr/search.json trans.sv = public/language/sv/search.json trans.th = public/language/th/search.json trans.tr = public/language/tr/search.json +trans.uk = public/language/uk/search.json trans.vi = public/language/vi/search.json trans.zh_CN = public/language/zh-CN/search.json trans.zh_TW = public/language/zh-TW/search.json @@ -983,6 +1002,7 @@ trans.sr = public/language/sr/groups.json trans.sv = public/language/sv/groups.json trans.th = public/language/th/groups.json trans.tr = public/language/tr/groups.json +trans.uk = public/language/uk/groups.json trans.vi = public/language/vi/groups.json trans.zh_CN = public/language/zh-CN/groups.json trans.zh_TW = public/language/zh-TW/groups.json @@ -1030,6 +1050,7 @@ trans.sr = public/language/sr/uploads.json trans.sv = public/language/sv/uploads.json trans.th = public/language/th/uploads.json trans.tr = public/language/tr/uploads.json +trans.uk = public/language/uk/uploads.json trans.vi = public/language/vi/uploads.json trans.zh_CN = public/language/zh-CN/uploads.json trans.zh_TW = public/language/zh-TW/uploads.json @@ -1077,6 +1098,7 @@ trans.sr = public/language/sr/admin/admin.json trans.sv = public/language/sv/admin/admin.json trans.th = public/language/th/admin/admin.json trans.tr = public/language/tr/admin/admin.json +trans.uk = public/language/uk/admin/admin.json trans.vi = public/language/vi/admin/admin.json trans.zh_CN = public/language/zh-CN/admin/admin.json trans.zh_TW = public/language/zh-TW/admin/admin.json @@ -1124,6 +1146,7 @@ trans.sr = public/language/sr/admin/menu.json trans.sv = public/language/sv/admin/menu.json trans.th = public/language/th/admin/menu.json trans.tr = public/language/tr/admin/menu.json +trans.uk = public/language/uk/admin/menu.json trans.vi = public/language/vi/admin/menu.json trans.zh_CN = public/language/zh-CN/admin/menu.json trans.zh_TW = public/language/zh-TW/admin/menu.json @@ -1171,6 +1194,7 @@ trans.sr = public/language/sr/admin/advanced/cache.json trans.sv = public/language/sv/admin/advanced/cache.json trans.th = public/language/th/admin/advanced/cache.json trans.tr = public/language/tr/admin/advanced/cache.json +trans.uk = public/language/uk/admin/advanced/cache.json trans.vi = public/language/vi/admin/advanced/cache.json trans.zh_CN = public/language/zh-CN/admin/advanced/cache.json trans.zh_TW = public/language/zh-TW/admin/advanced/cache.json @@ -1218,6 +1242,7 @@ trans.sr = public/language/sr/admin/advanced/database.json trans.sv = public/language/sv/admin/advanced/database.json trans.th = public/language/th/admin/advanced/database.json trans.tr = public/language/tr/admin/advanced/database.json +trans.uk = public/language/uk/admin/advanced/database.json trans.vi = public/language/vi/admin/advanced/database.json trans.zh_CN = public/language/zh-CN/admin/advanced/database.json trans.zh_TW = public/language/zh-TW/admin/advanced/database.json @@ -1265,6 +1290,7 @@ trans.sr = public/language/sr/admin/advanced/errors.json trans.sv = public/language/sv/admin/advanced/errors.json trans.th = public/language/th/admin/advanced/errors.json trans.tr = public/language/tr/admin/advanced/errors.json +trans.uk = public/language/uk/admin/advanced/errors.json trans.vi = public/language/vi/admin/advanced/errors.json trans.zh_CN = public/language/zh-CN/admin/advanced/errors.json trans.zh_TW = public/language/zh-TW/admin/advanced/errors.json @@ -1312,6 +1338,7 @@ trans.sr = public/language/sr/admin/advanced/events.json trans.sv = public/language/sv/admin/advanced/events.json trans.th = public/language/th/admin/advanced/events.json trans.tr = public/language/tr/admin/advanced/events.json +trans.uk = public/language/uk/admin/advanced/events.json trans.vi = public/language/vi/admin/advanced/events.json trans.zh_CN = public/language/zh-CN/admin/advanced/events.json trans.zh_TW = public/language/zh-TW/admin/advanced/events.json @@ -1359,6 +1386,7 @@ trans.sr = public/language/sr/admin/advanced/logs.json trans.sv = public/language/sv/admin/advanced/logs.json trans.th = public/language/th/admin/advanced/logs.json trans.tr = public/language/tr/admin/advanced/logs.json +trans.uk = public/language/uk/admin/advanced/logs.json trans.vi = public/language/vi/admin/advanced/logs.json trans.zh_CN = public/language/zh-CN/admin/advanced/logs.json trans.zh_TW = public/language/zh-TW/admin/advanced/logs.json @@ -1406,6 +1434,7 @@ trans.sr = public/language/sr/admin/appearance/customise.json trans.sv = public/language/sv/admin/appearance/customise.json trans.th = public/language/th/admin/appearance/customise.json trans.tr = public/language/tr/admin/appearance/customise.json +trans.uk = public/language/uk/admin/appearance/customise.json trans.vi = public/language/vi/admin/appearance/customise.json trans.zh_CN = public/language/zh-CN/admin/appearance/customise.json trans.zh_TW = public/language/zh-TW/admin/appearance/customise.json @@ -1453,6 +1482,7 @@ trans.sr = public/language/sr/admin/appearance/skins.json trans.sv = public/language/sv/admin/appearance/skins.json trans.th = public/language/th/admin/appearance/skins.json trans.tr = public/language/tr/admin/appearance/skins.json +trans.uk = public/language/uk/admin/appearance/skins.json trans.vi = public/language/vi/admin/appearance/skins.json trans.zh_CN = public/language/zh-CN/admin/appearance/skins.json trans.zh_TW = public/language/zh-TW/admin/appearance/skins.json @@ -1500,6 +1530,7 @@ trans.sr = public/language/sr/admin/appearance/themes.json trans.sv = public/language/sv/admin/appearance/themes.json trans.th = public/language/th/admin/appearance/themes.json trans.tr = public/language/tr/admin/appearance/themes.json +trans.uk = public/language/uk/admin/appearance/themes.json trans.vi = public/language/vi/admin/appearance/themes.json trans.zh_CN = public/language/zh-CN/admin/appearance/themes.json trans.zh_TW = public/language/zh-TW/admin/appearance/themes.json @@ -1547,6 +1578,7 @@ trans.sr = public/language/sr/admin/development/info.json trans.sv = public/language/sv/admin/development/info.json trans.th = public/language/th/admin/development/info.json trans.tr = public/language/tr/admin/development/info.json +trans.uk = public/language/uk/admin/development/info.json trans.vi = public/language/vi/admin/development/info.json trans.zh_CN = public/language/zh-CN/admin/development/info.json trans.zh_TW = public/language/zh-TW/admin/development/info.json @@ -1594,6 +1626,7 @@ trans.sr = public/language/sr/admin/development/logger.json trans.sv = public/language/sv/admin/development/logger.json trans.th = public/language/th/admin/development/logger.json trans.tr = public/language/tr/admin/development/logger.json +trans.uk = public/language/uk/admin/development/logger.json trans.vi = public/language/vi/admin/development/logger.json trans.zh_CN = public/language/zh-CN/admin/development/logger.json trans.zh_TW = public/language/zh-TW/admin/development/logger.json @@ -1641,6 +1674,7 @@ trans.sr = public/language/sr/admin/extend/plugins.json trans.sv = public/language/sv/admin/extend/plugins.json trans.th = public/language/th/admin/extend/plugins.json trans.tr = public/language/tr/admin/extend/plugins.json +trans.uk = public/language/uk/admin/extend/plugins.json trans.vi = public/language/vi/admin/extend/plugins.json trans.zh_CN = public/language/zh-CN/admin/extend/plugins.json trans.zh_TW = public/language/zh-TW/admin/extend/plugins.json @@ -1688,6 +1722,7 @@ trans.sr = public/language/sr/admin/extend/rewards.json trans.sv = public/language/sv/admin/extend/rewards.json trans.th = public/language/th/admin/extend/rewards.json trans.tr = public/language/tr/admin/extend/rewards.json +trans.uk = public/language/uk/admin/extend/rewards.json trans.vi = public/language/vi/admin/extend/rewards.json trans.zh_CN = public/language/zh-CN/admin/extend/rewards.json trans.zh_TW = public/language/zh-TW/admin/extend/rewards.json @@ -1735,6 +1770,7 @@ trans.sr = public/language/sr/admin/extend/widgets.json trans.sv = public/language/sv/admin/extend/widgets.json trans.th = public/language/th/admin/extend/widgets.json trans.tr = public/language/tr/admin/extend/widgets.json +trans.uk = public/language/uk/admin/extend/widgets.json trans.vi = public/language/vi/admin/extend/widgets.json trans.zh_CN = public/language/zh-CN/admin/extend/widgets.json trans.zh_TW = public/language/zh-TW/admin/extend/widgets.json @@ -1782,6 +1818,7 @@ trans.sr = public/language/sr/admin/general/dashboard.json trans.sv = public/language/sv/admin/general/dashboard.json trans.th = public/language/th/admin/general/dashboard.json trans.tr = public/language/tr/admin/general/dashboard.json +trans.uk = public/language/uk/admin/general/dashboard.json trans.vi = public/language/vi/admin/general/dashboard.json trans.zh_CN = public/language/zh-CN/admin/general/dashboard.json trans.zh_TW = public/language/zh-TW/admin/general/dashboard.json @@ -1829,6 +1866,7 @@ trans.sr = public/language/sr/admin/general/homepage.json trans.sv = public/language/sv/admin/general/homepage.json trans.th = public/language/th/admin/general/homepage.json trans.tr = public/language/tr/admin/general/homepage.json +trans.uk = public/language/uk/admin/general/homepage.json trans.vi = public/language/vi/admin/general/homepage.json trans.zh_CN = public/language/zh-CN/admin/general/homepage.json trans.zh_TW = public/language/zh-TW/admin/general/homepage.json @@ -1876,6 +1914,7 @@ trans.sr = public/language/sr/admin/general/languages.json trans.sv = public/language/sv/admin/general/languages.json trans.th = public/language/th/admin/general/languages.json trans.tr = public/language/tr/admin/general/languages.json +trans.uk = public/language/uk/admin/general/languages.json trans.vi = public/language/vi/admin/general/languages.json trans.zh_CN = public/language/zh-CN/admin/general/languages.json trans.zh_TW = public/language/zh-TW/admin/general/languages.json @@ -1923,6 +1962,7 @@ trans.sr = public/language/sr/admin/general/navigation.json trans.sv = public/language/sv/admin/general/navigation.json trans.th = public/language/th/admin/general/navigation.json trans.tr = public/language/tr/admin/general/navigation.json +trans.uk = public/language/uk/admin/general/navigation.json trans.vi = public/language/vi/admin/general/navigation.json trans.zh_CN = public/language/zh-CN/admin/general/navigation.json trans.zh_TW = public/language/zh-TW/admin/general/navigation.json @@ -1970,6 +2010,7 @@ trans.sr = public/language/sr/admin/general/social.json trans.sv = public/language/sv/admin/general/social.json trans.th = public/language/th/admin/general/social.json trans.tr = public/language/tr/admin/general/social.json +trans.uk = public/language/uk/admin/general/social.json trans.vi = public/language/vi/admin/general/social.json trans.zh_CN = public/language/zh-CN/admin/general/social.json trans.zh_TW = public/language/zh-TW/admin/general/social.json @@ -2017,6 +2058,7 @@ trans.sr = public/language/sr/admin/general/sounds.json trans.sv = public/language/sv/admin/general/sounds.json trans.th = public/language/th/admin/general/sounds.json trans.tr = public/language/tr/admin/general/sounds.json +trans.uk = public/language/uk/admin/general/sounds.json trans.vi = public/language/vi/admin/general/sounds.json trans.zh_CN = public/language/zh-CN/admin/general/sounds.json trans.zh_TW = public/language/zh-TW/admin/general/sounds.json @@ -2064,6 +2106,7 @@ trans.sr = public/language/sr/admin/manage/categories.json trans.sv = public/language/sv/admin/manage/categories.json trans.th = public/language/th/admin/manage/categories.json trans.tr = public/language/tr/admin/manage/categories.json +trans.uk = public/language/uk/admin/manage/categories.json trans.vi = public/language/vi/admin/manage/categories.json trans.zh_CN = public/language/zh-CN/admin/manage/categories.json trans.zh_TW = public/language/zh-TW/admin/manage/categories.json @@ -2111,6 +2154,7 @@ trans.sr = public/language/sr/admin/manage/groups.json trans.sv = public/language/sv/admin/manage/groups.json trans.th = public/language/th/admin/manage/groups.json trans.tr = public/language/tr/admin/manage/groups.json +trans.uk = public/language/uk/admin/manage/groups.json trans.vi = public/language/vi/admin/manage/groups.json trans.zh_CN = public/language/zh-CN/admin/manage/groups.json trans.zh_TW = public/language/zh-TW/admin/manage/groups.json @@ -2158,6 +2202,7 @@ trans.sr = public/language/sr/admin/manage/ip-blacklist.json trans.sv = public/language/sv/admin/manage/ip-blacklist.json trans.th = public/language/th/admin/manage/ip-blacklist.json trans.tr = public/language/tr/admin/manage/ip-blacklist.json +trans.uk = public/language/uk/admin/manage/ip-blacklist.json trans.vi = public/language/vi/admin/manage/ip-blacklist.json trans.zh_CN = public/language/zh-CN/admin/manage/ip-blacklist.json trans.zh_TW = public/language/zh-TW/admin/manage/ip-blacklist.json @@ -2205,6 +2250,7 @@ trans.sr = public/language/sr/admin/manage/registration.json trans.sv = public/language/sv/admin/manage/registration.json trans.th = public/language/th/admin/manage/registration.json trans.tr = public/language/tr/admin/manage/registration.json +trans.uk = public/language/uk/admin/manage/registration.json trans.vi = public/language/vi/admin/manage/registration.json trans.zh_CN = public/language/zh-CN/admin/manage/registration.json trans.zh_TW = public/language/zh-TW/admin/manage/registration.json @@ -2252,6 +2298,7 @@ trans.sr = public/language/sr/admin/manage/tags.json trans.sv = public/language/sv/admin/manage/tags.json trans.th = public/language/th/admin/manage/tags.json trans.tr = public/language/tr/admin/manage/tags.json +trans.uk = public/language/uk/admin/manage/tags.json trans.vi = public/language/vi/admin/manage/tags.json trans.zh_CN = public/language/zh-CN/admin/manage/tags.json trans.zh_TW = public/language/zh-TW/admin/manage/tags.json @@ -2299,6 +2346,7 @@ trans.sr = public/language/sr/admin/manage/users.json trans.sv = public/language/sv/admin/manage/users.json trans.th = public/language/th/admin/manage/users.json trans.tr = public/language/tr/admin/manage/users.json +trans.uk = public/language/uk/admin/manage/users.json trans.vi = public/language/vi/admin/manage/users.json trans.zh_CN = public/language/zh-CN/admin/manage/users.json trans.zh_TW = public/language/zh-TW/admin/manage/users.json @@ -2346,6 +2394,7 @@ trans.sr = public/language/sr/admin/settings/advanced.json trans.sv = public/language/sv/admin/settings/advanced.json trans.th = public/language/th/admin/settings/advanced.json trans.tr = public/language/tr/admin/settings/advanced.json +trans.uk = public/language/uk/admin/settings/advanced.json trans.vi = public/language/vi/admin/settings/advanced.json trans.zh_CN = public/language/zh-CN/admin/settings/advanced.json trans.zh_TW = public/language/zh-TW/admin/settings/advanced.json @@ -2393,6 +2442,7 @@ trans.sr = public/language/sr/admin/settings/cookies.json trans.sv = public/language/sv/admin/settings/cookies.json trans.th = public/language/th/admin/settings/cookies.json trans.tr = public/language/tr/admin/settings/cookies.json +trans.uk = public/language/uk/admin/settings/cookies.json trans.vi = public/language/vi/admin/settings/cookies.json trans.zh_CN = public/language/zh-CN/admin/settings/cookies.json trans.zh_TW = public/language/zh-TW/admin/settings/cookies.json @@ -2440,6 +2490,7 @@ trans.sr = public/language/sr/admin/settings/general.json trans.sv = public/language/sv/admin/settings/general.json trans.th = public/language/th/admin/settings/general.json trans.tr = public/language/tr/admin/settings/general.json +trans.uk = public/language/uk/admin/settings/general.json trans.vi = public/language/vi/admin/settings/general.json trans.zh_CN = public/language/zh-CN/admin/settings/general.json trans.zh_TW = public/language/zh-TW/admin/settings/general.json @@ -2487,6 +2538,7 @@ trans.sr = public/language/sr/admin/settings/guest.json trans.sv = public/language/sv/admin/settings/guest.json trans.th = public/language/th/admin/settings/guest.json trans.tr = public/language/tr/admin/settings/guest.json +trans.uk = public/language/uk/admin/settings/guest.json trans.vi = public/language/vi/admin/settings/guest.json trans.zh_CN = public/language/zh-CN/admin/settings/guest.json trans.zh_TW = public/language/zh-TW/admin/settings/guest.json @@ -2534,6 +2586,7 @@ trans.sr = public/language/sr/admin/settings/pagination.json trans.sv = public/language/sv/admin/settings/pagination.json trans.th = public/language/th/admin/settings/pagination.json trans.tr = public/language/tr/admin/settings/pagination.json +trans.uk = public/language/uk/admin/settings/pagination.json trans.vi = public/language/vi/admin/settings/pagination.json trans.zh_CN = public/language/zh-CN/admin/settings/pagination.json trans.zh_TW = public/language/zh-TW/admin/settings/pagination.json @@ -2581,6 +2634,7 @@ trans.sr = public/language/sr/admin/settings/reputation.json trans.sv = public/language/sv/admin/settings/reputation.json trans.th = public/language/th/admin/settings/reputation.json trans.tr = public/language/tr/admin/settings/reputation.json +trans.uk = public/language/uk/admin/settings/reputation.json trans.vi = public/language/vi/admin/settings/reputation.json trans.zh_CN = public/language/zh-CN/admin/settings/reputation.json trans.zh_TW = public/language/zh-TW/admin/settings/reputation.json @@ -2628,6 +2682,7 @@ trans.sr = public/language/sr/admin/settings/tags.json trans.sv = public/language/sv/admin/settings/tags.json trans.th = public/language/th/admin/settings/tags.json trans.tr = public/language/tr/admin/settings/tags.json +trans.uk = public/language/uk/admin/settings/tags.json trans.vi = public/language/vi/admin/settings/tags.json trans.zh_CN = public/language/zh-CN/admin/settings/tags.json trans.zh_TW = public/language/zh-TW/admin/settings/tags.json @@ -2675,6 +2730,7 @@ trans.sr = public/language/sr/admin/settings/user.json trans.sv = public/language/sv/admin/settings/user.json trans.th = public/language/th/admin/settings/user.json trans.tr = public/language/tr/admin/settings/user.json +trans.uk = public/language/uk/admin/settings/user.json trans.vi = public/language/vi/admin/settings/user.json trans.zh_CN = public/language/zh-CN/admin/settings/user.json trans.zh_TW = public/language/zh-TW/admin/settings/user.json @@ -2722,6 +2778,7 @@ trans.sr = public/language/sr/admin/settings/chat.json trans.sv = public/language/sv/admin/settings/chat.json trans.th = public/language/th/admin/settings/chat.json trans.tr = public/language/tr/admin/settings/chat.json +trans.uk = public/language/uk/admin/settings/chat.json trans.vi = public/language/vi/admin/settings/chat.json trans.zh_CN = public/language/zh-CN/admin/settings/chat.json trans.zh_TW = public/language/zh-TW/admin/settings/chat.json @@ -2769,6 +2826,7 @@ trans.sr = public/language/sr/admin/settings/email.json trans.sv = public/language/sv/admin/settings/email.json trans.th = public/language/th/admin/settings/email.json trans.tr = public/language/tr/admin/settings/email.json +trans.uk = public/language/uk/admin/settings/email.json trans.vi = public/language/vi/admin/settings/email.json trans.zh_CN = public/language/zh-CN/admin/settings/email.json trans.zh_TW = public/language/zh-TW/admin/settings/email.json @@ -2816,6 +2874,7 @@ trans.sr = public/language/sr/admin/settings/group.json trans.sv = public/language/sv/admin/settings/group.json trans.th = public/language/th/admin/settings/group.json trans.tr = public/language/tr/admin/settings/group.json +trans.uk = public/language/uk/admin/settings/group.json trans.vi = public/language/vi/admin/settings/group.json trans.zh_CN = public/language/zh-CN/admin/settings/group.json trans.zh_TW = public/language/zh-TW/admin/settings/group.json @@ -2863,6 +2922,7 @@ trans.sr = public/language/sr/admin/settings/notifications.json trans.sv = public/language/sv/admin/settings/notifications.json trans.th = public/language/th/admin/settings/notifications.json trans.tr = public/language/tr/admin/settings/notifications.json +trans.uk = public/language/uk/admin/settings/notifications.json trans.vi = public/language/vi/admin/settings/notifications.json trans.zh_CN = public/language/zh-CN/admin/settings/notifications.json trans.zh_TW = public/language/zh-TW/admin/settings/notifications.json @@ -2910,6 +2970,7 @@ trans.sr = public/language/sr/admin/settings/post.json trans.sv = public/language/sv/admin/settings/post.json trans.th = public/language/th/admin/settings/post.json trans.tr = public/language/tr/admin/settings/post.json +trans.uk = public/language/uk/admin/settings/post.json trans.vi = public/language/vi/admin/settings/post.json trans.zh_CN = public/language/zh-CN/admin/settings/post.json trans.zh_TW = public/language/zh-TW/admin/settings/post.json @@ -2957,6 +3018,7 @@ trans.sr = public/language/sr/admin/settings/sockets.json trans.sv = public/language/sv/admin/settings/sockets.json trans.th = public/language/th/admin/settings/sockets.json trans.tr = public/language/tr/admin/settings/sockets.json +trans.uk = public/language/uk/admin/settings/sockets.json trans.vi = public/language/vi/admin/settings/sockets.json trans.zh_CN = public/language/zh-CN/admin/settings/sockets.json trans.zh_TW = public/language/zh-TW/admin/settings/sockets.json @@ -3004,6 +3066,7 @@ trans.sr = public/language/sr/admin/settings/uploads.json trans.sv = public/language/sv/admin/settings/uploads.json trans.th = public/language/th/admin/settings/uploads.json trans.tr = public/language/tr/admin/settings/uploads.json +trans.uk = public/language/uk/admin/settings/uploads.json trans.vi = public/language/vi/admin/settings/uploads.json trans.zh_CN = public/language/zh-CN/admin/settings/uploads.json trans.zh_TW = public/language/zh-TW/admin/settings/uploads.json @@ -3051,6 +3114,7 @@ trans.sr = public/language/sr/admin/settings/web-crawler.json trans.sv = public/language/sv/admin/settings/web-crawler.json trans.th = public/language/th/admin/settings/web-crawler.json trans.tr = public/language/tr/admin/settings/web-crawler.json +trans.uk = public/language/uk/admin/settings/web-crawler.json trans.vi = public/language/vi/admin/settings/web-crawler.json trans.zh_CN = public/language/zh-CN/admin/settings/web-crawler.json trans.zh_TW = public/language/zh-TW/admin/settings/web-crawler.json diff --git a/package.json b/package.json index 75a330a271..28d4cb5e06 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "daemon": "~1.1.0", "express": "^4.14.0", "express-session": "^1.8.2", - "express-useragent": "1.0.4", + "express-useragent": "1.0.7", "html-to-text": "2.1.3", "ip": "1.1.3", "jimp": "0.2.27", @@ -62,7 +62,7 @@ "nodebb-plugin-spam-be-gone": "0.4.10", "nodebb-rewards-essentials": "0.0.9", "nodebb-theme-lavender": "3.0.15", - "nodebb-theme-persona": "4.2.1", + "nodebb-theme-persona": "4.2.2", "nodebb-theme-vanilla": "5.2.0", "nodebb-widget-essentials": "2.0.13", "nodemailer": "2.6.4", diff --git a/public/language/de/admin/advanced/errors.json b/public/language/de/admin/advanced/errors.json index 64ac3b2d6c..42c26ee8af 100644 --- a/public/language/de/admin/advanced/errors.json +++ b/public/language/de/admin/advanced/errors.json @@ -8,7 +8,7 @@ "clear-error-log": "Fehlerprotokoll leeren", "route": "Zielroute", "count": "Anzahl", - "no-routes-not-found": "Juhui! Keine 404 Fehler!", + "no-routes-not-found": "Hurra! Keine 404 Fehler!", "clear404-confirm": "Bist du dir sicher, dass du das 404 Fehlerprotokoll löschen möchtest?", "clear404-success": "\"404 Not Found\" Fehler gelöscht" } \ No newline at end of file diff --git a/public/language/de/admin/settings/advanced.json b/public/language/de/admin/settings/advanced.json index b763912a7b..29a3d7c701 100644 --- a/public/language/de/admin/settings/advanced.json +++ b/public/language/de/admin/settings/advanced.json @@ -3,17 +3,17 @@ "maintenance-mode.help": "Während das Forum im Wartungsmodus ist werden alle Anfragen zu einer statischen Seite weitergeleitet. Administratoren sind von dieser Weiterleitung ausgenommen und können die Seite normal aufrufen.", "maintenance-mode.message": "Wartungsnachricht", "headers": "Headers", - "headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame", + "headers.allow-from": "ALLOW-FROM setzen um NodeBB in einem iFrame zu platzieren", "headers.powered-by": "Anpassen des \"Powered By\" Headers von NodeBB", "headers.acao": "Access-Control-Allow-Origin", "headers.acao-help": "Um den Zugriff auf alle Seiten zu blockieren, leer lassen oder auf null setzen", "headers.acam": "Access-Control-Allow-Methods", "headers.acah": "Access-Control-Allow-Headers", "traffic-management": "Traffic Management", - "traffic.help": "NodeBB deploys equipped with a module that automatically denies requests in high-traffic situations. You can tune these settings here, although the defaults are a good starting point.", - "traffic.enable": "Enable Traffic Management", - "traffic.event-lag": "Event Loop Lag Threshold (in milliseconds)", - "traffic.event-lag-help": "Lowering this value decreases wait times for page loads, but will also show the \"excessive load\" message to more users. (Restart required)", - "traffic.lag-check-interval": "Check Interval (in milliseconds)", - "traffic.lag-check-interval-help": "Lowering this value causes NodeBB to become more sensitive to spikes in load, but may also cause the check to become too sensitive. (Restart required)" + "traffic.help": "NodeBB wird mit einem module geliefert, welches automatisch anfragen in \"High-Traffic\" situationen blockiert. Sie können diese Einstellungen hier Fine-Tunen, auch wenn die Standardeinstellungen einen guten Anfang darstellen sollten", + "traffic.enable": "Traffic Management aktivieren", + "traffic.event-lag": "Eventschleifenverzögerungsschwelle (in Millisekunden)", + "traffic.event-lag-help": "Das Heruntersetzen dieses Werts reduziert die Ladezeiten, aber wird auch dafür sorgen, dass die \"Übermäßige Belastung\" nachricht öfter angezeigt wird. (Neustart erforderlich)", + "traffic.lag-check-interval": "Prüfungsintervall (in Millisekunden)", + "traffic.lag-check-interval-help": "Das Heruntersetzen dieses Werts sorgt dafür, dass NodeBB empfindlicher auf Auslastungs-Spikes reagiert, aber könnte auch dafür sorgen, dass der Test zu empfindlich werden könnte. (Neustart erforderlich)" } \ No newline at end of file diff --git a/public/language/de/admin/settings/email.json b/public/language/de/admin/settings/email.json index 1e92c88490..83b3683e91 100644 --- a/public/language/de/admin/settings/email.json +++ b/public/language/de/admin/settings/email.json @@ -1,25 +1,25 @@ { - "email-settings": "Email Settings", - "address": "Email Address", - "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", - "from": "From Name", - "from-help": "The from name to display in the email.", + "email-settings": "Email-Einstellungen", + "address": "E-Mail Adresse", + "address-help": "Die folgende Email-Adresse ist die Emai-Adresse, welche dem Empfänger im \"Von\" und \"Antworten\" Bereich sehen wird.", + "from": "Name des Absenders", + "from-help": "Der Name des Absenders, welcher in der Email angezeigt werden soll.", "gmail-routing": "Gmail Routing", - "gmail-routing-help1": "There have been reports of Gmail Routing not working on accounts with heightened security. In those scenarios, you will have to configure your GMail account to allow less secure apps.", - "gmail-routing-help2": "For more information about this workaround, please consult this NodeMailer article on the issue. An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. Browse available plugins here.", - "gmail-transport": "Route emails through a Gmail/Google Apps account", - "gmail-transport.username": "Username", - "gmail-transport.username-help": "Enter the full email address here, especially if you are using a Google Apps managed domain.", - "gmail-transport.password": "Password", - "template": "Edit Email Template", - "template.select": "Select Email Template", - "template.revert": "Revert to Original", - "testing": "Email Testing", - "testing.select": "Select Email Template", - "testing.send": "Send Test Email", - "testing.send-help": "The test email will be sent to the currently logged in user's email address.", - "subscriptions": "Email Subscriptions", - "subscriptions.disable": "Disable subscriber notification emails", - "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "gmail-routing-help1": "Es gab Berichte bezüglich des \"Gmail Routing\", welches nicht auf Accounts mit erhöhten Sicherheitseinstellungen funktionierte (Standardeinstellung). In diesem Fall müssen sie ihren Gmail Account konfigurieren weniger sichere Apps zu erlauben.", + "gmail-routing-help2": "Für mehr informationen zu diesem Workaround, konsultieren Sie bitte diesen NodeMailer Artikel über dieses Problem. Eine alternative wäre ein Plugin von Drittherstellern wie SendGrid, mailgun etc. zu verwenden. Verfügbare Plugins durchsuchen.", + "gmail-transport": "Emails über einen Gmail/Google Apps account verschicken", + "gmail-transport.username": "Benutzername", + "gmail-transport.username-help": "Geben Sie die volle Email-Adresse hier ein, insbesondere wenn Sie eine Google-Apps verwaltete domain verwenden.", + "gmail-transport.password": "Passwort", + "template": "Email Vorlage bearbeiten", + "template.select": "Email Vorlage auswählen", + "template.revert": "Original wiederherstellen", + "testing": "Emailtests", + "testing.select": "Wählen Sie die Email Vorlage", + "testing.send": "Test-Email versenden", + "testing.send-help": "Die Test-Email wird an die Email des momentan eingeloggten Nutzers geschickt.", + "subscriptions": "Email Abonnements", + "subscriptions.disable": "Email-Benachrichtigungsmails deaktivieren", + "subscriptions.hour": "Sende Zeit", + "subscriptions.hour-help": "Bitte geben Sie eine Nummer ein, welche die Stunde repräsentiert zu welcher geplante Emails versandt werden sollen (z.B. 0 für Mitternacht, 17 für 5 Uhr Nachmittags). Beachten Sie, dass die Zeit auf der Serverzeit basiert und daher nicht umbedingt mit ihrer Systemzeit übereinstimmen muss.
Die ungefähre Serverzeit ist:
Die nächste tägliche Sendung ist um geplant" } \ No newline at end of file diff --git a/public/language/de/admin/settings/general.json b/public/language/de/admin/settings/general.json index 72ecfe641f..e06ca77db0 100644 --- a/public/language/de/admin/settings/general.json +++ b/public/language/de/admin/settings/general.json @@ -1,31 +1,31 @@ { - "site-settings": "Site Settings", - "title": "Site Title", - "title.name": "Your Community Name", - "title.show-in-header": "Show Site Title in Header", - "browser-title": "Browser Title", - "browser-title-help": "If no browser title is specified, the site title will be used", - "title-layout": "Title Layout", - "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", - "description.placeholder": "A short description about your community", - "description": "Site Description", - "keywords": "Site Keywords", - "keywords-placeholder": "Keywords describing your community, comma-separated", - "logo": "Site Logo", - "logo.image": "Image", - "logo.image-placeholder": "Path to a logo to display on forum header", - "logo.upload": "Upload", + "site-settings": "Seiteneinstellungen", + "title": "Seiten Titel", + "title.name": "Ihr Community Name", + "title.show-in-header": "Seitentitel im Header anzeigen", + "browser-title": "Browser Titel", + "browser-title-help": "Wenn kein Browser-Titel spezifiziert wurde, wird der Seitentitel verwendet", + "title-layout": "Titel Layout", + "title-layout-help": "Definieren Sie, wie der Browser Titel Strukturiert wird d.h.z.B. {pageTitle} | {browserTitle}", + "description.placeholder": "Eine kurze Beschreibung ihrer Community", + "description": "Seitenbeschreibung", + "keywords": "Seiten-Schlüsselworte", + "keywords-placeholder": "Schlüsselworte, die ihre Community beschreiben, mit komma getrennt", + "logo": "Seiten-Logo", + "logo.image": "Bild", + "logo.image-placeholder": "Pfad zu einem Logo, welches im Kopfbereich des Forums angezeigt werden soll", + "logo.upload": "Hochladen", "logo.url": "URL", - "logo.url-placeholder": "The URL of the site logo", - "logo.url-help": "When the logo is clicked, send users to this address. If left blank, user will be sent to the forum index.", - "logo.alt-text": "Alt Text", - "log.alt-text-placeholder": "Alternative text for accessibility", + "logo.url-placeholder": "Die URL des Seiten-Logos", + "logo.url-help": "Wenn das Logo angeklickt wird, wird der Nutzer an diese Adresse weitergeleitet. Wenn das Feld leer gelassen wird, wird der Nutzer zur Startseite geleitet.", + "logo.alt-text": "Alternativer Text", + "log.alt-text-placeholder": "Alternativer text, falls das Bild nicht angezeigt werden kann", "favicon": "Favicon", - "favicon.upload": "Upload", + "favicon.upload": "Hochladen", "touch-icon": "Homescreen/Touch Icon", - "touch-icon.upload": "Upload", - "touch-icon.help": "Recommended size and format: 192x192, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.", - "outgoing-links": "Outgoing Links", - "outgoing-links.warning-page": "Use Outgoing Links Warning Page", - "search-default-sort-by": "Search default sort by" + "touch-icon.upload": "Hochladen", + "touch-icon.help": "Empfohlene Größe und Format: 192x192, ausschließlich PNG Format. Wenn kein Icon angegeben wird, wird NodeBB das Favicon verwenden.", + "outgoing-links": "Ausgehende Links", + "outgoing-links.warning-page": "Warnseite für ausgehende links verwenden", + "search-default-sort-by": "Standardmäßige Such-Sortierung" } \ No newline at end of file diff --git a/public/language/de/admin/settings/group.json b/public/language/de/admin/settings/group.json index 1ae88c9cf5..bce69d2f53 100644 --- a/public/language/de/admin/settings/group.json +++ b/public/language/de/admin/settings/group.json @@ -1,12 +1,12 @@ { - "general": "General", - "private-groups": "Private Groups", - "private-groups.help": "If enabled, joining of groups requires the approval of the group owner (Default: enabled)", - "private-groups.warning": "Beware! If this option is disabled and you have private groups, they automatically become public.", - "allow-creation": "Allow Group Creation", - "allow-creation-help": "If enabled, users can create groups (Default: disabled)", - "max-name-length": "Maximum Group Name Length", - "cover-image": "Group Cover Image", - "default-cover": "Default Cover Images", - "default-cover-help": "Add comma-separated default cover images for groups that don't have an uploaded cover image" + "general": "Allgemein", + "private-groups": "Private Gruppen", + "private-groups.help": "Wenn aktiviert, benötigt das beitreten einer Gruppe die Bestätigung des jeweiligen Besitzers(Standard: aktiviert)", + "private-groups.warning": "Vorsicht! Wenn diese Option deaktiviert ist, und Sie private Gruppen haben, werden diese automatisch Öffentlich.", + "allow-creation": "Erstellung von Gruppen erlauben", + "allow-creation-help": "Wenn aktiviert können Nutzer Gruppen erstellen (Standard: deaktiviert)", + "max-name-length": "Maximale Länge von Gruppennamen", + "cover-image": "Gruppen-Deckbild", + "default-cover": "Standard-Deckbild", + "default-cover-help": "Fügen Sie Komma-getrennte standard-Deckbilder für Gruppen hinzu, welche kein Deckbild hochgeladen haben" } \ No newline at end of file diff --git a/public/language/de/admin/settings/post.json b/public/language/de/admin/settings/post.json index f293e554d9..3c4d0b97d6 100644 --- a/public/language/de/admin/settings/post.json +++ b/public/language/de/admin/settings/post.json @@ -1,44 +1,44 @@ { - "sorting": "Post Sorting", - "sorting.post-default": "Default Post Sorting", - "sorting.oldest-to-newest": "Oldest to Newest", - "sorting.newest-to-oldest": "Newest to Oldest", - "sorting.most-votes": "Most Votes", - "sorting.topic-default": "Default Topic Sorting", - "restrictions": "Posting Restrictions", - "restrictions.seconds-between": "Seconds between Posts", - "restrictions.seconds-between-new": "Seconds between Posts for New Users", - "restrictions.rep-threshold": "Reputation threshold before this restriction is lifted", - "restrictions.seconds-defore-new": "Seconds before new user can post", - "restrictions.seconds-edit-after": "Number of seconds users are allowed to edit posts after posting. (0 disabled)", - "restrictions.seconds-delete-after": "Number of seconds users are allowed to delete posts after posting. (0 disabled)", - "restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics. (0 disabled)", - "restrictions.min-title-length": "Minimum Title Length", - "restrictions.max-title-length": "Maximum Title Length", - "restrictions.min-post-length": "Minimum Post Length", - "restrictions.max-post-length": "Maximum Post Length", - "restrictions.days-until-stale": "Days until Topic is considered stale", - "restrictions.stale-help": "If a topic is considered \"stale\", then a warning will be shown to users who attempt to reply to that topic.", - "timestamp": "Timestamp", - "timestamp.cut-off": "Date cut-off (in days)", - "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", - "teaser": "Teaser Post", - "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", - "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", - "teaser.first": "First", - "unread": "Unread Settings", - "unread.cutoff": "Unread cutoff days", - "unread.min-track-last": "Minimum posts in topic before tracking last read", - "signature": "Signature Settings", - "signature.disable": "Disable signatures", - "signature.no-links": "Disable links in signatures", - "signature.no-images": "Disable images in signatures", - "signature.max-length": "Maximum Signature Length", - "composer": "Composer Settings", - "composer-help": "The following settings govern the functionality and/or appearance of the post composer shown\n\t\t\t\tto users when they create new topics, or reply to existing topics.", - "composer.show-help": "Show \"Help\" tab", - "composer.enable-plugin-help": "Allow plugins to add content to the help tab", - "composer.custom-help": "Custom Help Text", - "ip-tracking": "IP Tracking", - "ip-tracking.each-post": "Track IP Address for each post" + "sorting": "Beitragssortierung", + "sorting.post-default": "Standardmäßige sortierung von Beiträgen", + "sorting.oldest-to-newest": "Von Alt bis Neu", + "sorting.newest-to-oldest": "Von Neu zu Alt", + "sorting.most-votes": "Meiste Bewertungen", + "sorting.topic-default": "Standardmäßige Themensortierung", + "restrictions": "Posting beschränkungen", + "restrictions.seconds-between": "Zeit zwischen der Erstellung von Beiträgen", + "restrictions.seconds-between-new": "Zeit zwischen der Erstellung von Beiträgen für neue Nutzer", + "restrictions.rep-threshold": "Vorrausgesetztes Ansehen um diese Beschränkung aufzuheben", + "restrictions.seconds-defore-new": "Sekunden befor ein neuer Nutzer einen Beitrag erstellen kann", + "restrictions.seconds-edit-after": "Zeit in Sekunden in der ein Nutzer nach erstellung eines Beitrags diesen bearbeiten kann. (0 = deaktiviert)", + "restrictions.seconds-delete-after": "Zeit in Sekunden in der ein Nutzer nach erstellung eines Beitrags diesen löschen kann. (0 = deaktiviert)", + "restrictions.replies-no-delete": "Anzahl der Antworten auf einen Thema, die Benötigt werden um das löschen des Themas durch den Besitzer zu verhindern. (0 = deaktiviert)", + "restrictions.min-title-length": "Minimale Titellänge", + "restrictions.max-title-length": "Maximale Titellänge", + "restrictions.min-post-length": "Minimale Beitragslänge", + "restrictions.max-post-length": "Maximale Beitragslänge", + "restrictions.days-until-stale": "Anzahl der Tage nachdem ein Thema als veraltet angesehen wird", + "restrictions.stale-help": "Wenn ein Thema als \"veraltet\" angesehen wird, wird Nutzern die versuchen diesem Thema zu antworten eine Warnung gezeigt", + "timestamp": "Zeitstempel", + "timestamp.cut-off": "Tageslimit für Relative Zeitangaben (in Tagen)", + "timestamp.cut-off-help": "Tage & Zeiten werden relativ angezeigt (z.B. \"vor 3 Stunden\" / \"vor 5 Tagen\"), und in viele Sprachen übersetzt. Nach einem bestimmten Zeitpunkt, kann dieses Text durch das übersetzte Datum selbst ersetzt werden (z.B. 5 Nov 2016 15:30).
(Standard: 30, oder ein Monat). Auf 0 setzen um immer Daten anzuzeigen, leer lassung um immer relative Zeiten anzuzeigen.", + "teaser": "Teaser-Beitrag", + "teaser.last-post": "Letzter - Den neuesten Beitrag anzeigen, den originalen Beitrag innbegriffen, wenn es keine Antworten gibt", + "teaser.last-reply": "Letzter - Den neuesten Beitrag oder einen \"Keine Antworten\" Platzhalter, wenn es keine Antworten gibt anzeigen", + "teaser.first": "Erster", + "unread": "Ungelesen-Einstellungen", + "unread.cutoff": "Ungelesen-Limit (in Tagen)", + "unread.min-track-last": "Minimale Anzahl an Beiträgen pro Thema bevor die letzte Sichtung mitgeschrieben wird", + "signature": "Signatureinstellungen", + "signature.disable": "Signaturen deaktivieren", + "signature.no-links": "Links in signaturen deaktivieren", + "signature.no-images": "Bilder in Signaturen deaktivieren", + "signature.max-length": "Maximale Signaturlänge", + "composer": "Editor Einstellungen", + "composer-help": "Die folgenden Einstellungen bestimmen die funktionalität und/oder das Aussehen des Beitragseditors, der Nutzern angezeigt wird, webb sie neue Themen erstellen, oder bereits existierenden Antworten.", + "composer.show-help": "\"Hilfe\"-Tab anzeigen", + "composer.enable-plugin-help": "Plugins erlauben Inhalte dem \"Help\"-Tab hinzuzufügen", + "composer.custom-help": "Benutzerdefinierter Hilfe-Text", + "ip-tracking": "IP-Verfolgung", + "ip-tracking.each-post": "IP-Adresse für jeden Beitrag speichern" } \ No newline at end of file diff --git a/public/language/de/admin/settings/tags.json b/public/language/de/admin/settings/tags.json index 6f31f60ba0..ae52d414ae 100644 --- a/public/language/de/admin/settings/tags.json +++ b/public/language/de/admin/settings/tags.json @@ -1,12 +1,12 @@ { - "tag": "Tag Settings", - "min-per-topic": "Minimum Tags per Topic", - "max-per-topic": "Maximum Tags per Topic", - "min-length": "Minimum Tag Length", - "max-length": "Maximum Tag Length", - "goto-manage": "Click here to visit the tag management page.", - "privacy": "Privacy", - "list-private": "Make the tags list private", - "related-topics": "Related Topics", - "max-related-topics": "Maximum related topics to display (if supported by theme)" + "tag": "Tag-Einstellungen", + "min-per-topic": "Minimale Tags pro Thema", + "max-per-topic": "Maximale Tags pro Thema", + "min-length": "Minimale Tag Länge", + "max-length": "Maximale Tag Länge", + "goto-manage": "Klicken Sie hier um die Tag Managementseite aufzurufen.", + "privacy": "Privatsphäre", + "list-private": "Tag-Liste privatisieren", + "related-topics": "Zusammenhängende Themen", + "max-related-topics": "Maximale Anzahl an Zusammenhängenden Themen die angezeigt werden sollen (Wenn vom Design unterstützt)" } \ No newline at end of file diff --git a/public/language/de/admin/settings/uploads.json b/public/language/de/admin/settings/uploads.json index 35eaa5a58f..c6cc165d88 100644 --- a/public/language/de/admin/settings/uploads.json +++ b/public/language/de/admin/settings/uploads.json @@ -1,28 +1,28 @@ { - "posts": "Posts", - "allow-files": "Allow users to upload regular files", - "private": "Make uploaded files private", - "max-image-width": "Resize images down to specified width (in pixels)", - "max-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)", - "max-file-size": "Maximum File Size (in KiB)", - "max-file-size-help": "(in kilobytes, default: 2048 KiB)", - "allow-topic-thumbnails": "Allow users to upload topic thumbnails", - "topic-thumb-size": "Topic Thumb Size", - "allowed-file-extensions": "Allowed File Extensions", - "allowed-file-extensions-help": "Enter comma-separated list of file extensions here (e.g. pdf,xls,doc). An empty list means all extensions are allowed.", - "profile-avatars": "Profile Avatars", - "allow-profile-image-uploads": "Allow users to upload profile images", - "convert-profile-image-png": "Convert profile image uploads to PNG", - "default-avatar": "Custom Default Avatar", - "upload": "Upload", - "profile-image-dimension": "Profile Image Dimension", - "profile-image-dimension-help": "(in pixels, default: 128 pixels)", - "max-profile-image-size": "Maximum Profile Image File Size", - "max-profile-image-size-help": "(in kilobytes, default: 256 KiB)", - "max-cover-image-size": "Maximum Cover Image File Size", - "max-cover-image-size-help": "(in kilobytes, default: 2,048 KiB)", - "keep-all-user-images": "Keep old versions of avatars and profile covers on the server", - "profile-covers": "Profile Covers", - "default-covers": "Default Cover Images", - "default-covers-help": "Add comma-separated default cover images for accounts that don't have an uploaded cover image" + "posts": "Beiträge", + "allow-files": "Nutzern erlauben normale Dateien hochzuladen", + "private": "Hochgeladene Dateien privatisieren", + "max-image-width": "Bilder zu einer bestimmten Breite runterskalieren", + "max-image-width-help": "(in Pixeln, standard 760 pixel, auf 0 setzen um zu deaktivieren)", + "max-file-size": "Maximale Dateigröße (in KiB)", + "max-file-size-help": "(Standard: 2048 KiB)", + "allow-topic-thumbnails": "Nutzern erlauben Themen Thumbnails hochzuladen", + "topic-thumb-size": "Thema Thumbnailgröße", + "allowed-file-extensions": "Erlaubte Dateiendungen", + "allowed-file-extensions-help": "Komma-getrennte Liste der Dateiendungen hier einfügen (z.B. pdf,xls,doc). Eine leere Liste bedeutet, dass alle Dateiendungen erlaubt sind.", + "profile-avatars": "Profil Avatare", + "allow-profile-image-uploads": "Nutzern erlauben Profilbilder hochzuladen", + "convert-profile-image-png": "Hochgeladene Profilbilder in PNG konvertieren", + "default-avatar": "Benutzerdefinierter Standardavatar", + "upload": "Hochladen", + "profile-image-dimension": "Profilbild-Abmessungen", + "profile-image-dimension-help": "(in pixeln, standard: 128 pixel)", + "max-profile-image-size": "Maximale Profibild-Dateigröße", + "max-profile-image-size-help": "(in Kilobytes, standard: 256 KiB)", + "max-cover-image-size": "Maximale Deckbild-Dateigröße", + "max-cover-image-size-help": "(in Kilobytes, standard: 2.048 KiB)", + "keep-all-user-images": "Alte Avatar- und Deckbild-Versionen auf dem Server lassen", + "profile-covers": "Profil Deckbilder", + "default-covers": "Standard Profil-Deckbilder", + "default-covers-help": "Komma-getrennte standard Deckbilder für Accounts, die kein Deckbild hochgeladen haben" } diff --git a/public/language/de/pages.json b/public/language/de/pages.json index 4b3fb77aa2..ce67bbcc10 100644 --- a/public/language/de/pages.json +++ b/public/language/de/pages.json @@ -28,7 +28,7 @@ "chats": "Chats", "chat": "Chatte mit %1", "flags": "Meldungen", - "flag-details": "Flag %1 Details", + "flag-details": "%1 Details melden", "account/edit": "Bearbeite %1", "account/edit/password": "Bearbeite Passwort von \"%1\"", "account/edit/username": "Bearbeite Benutzernamen von \"%1\"", diff --git a/public/language/de/search.json b/public/language/de/search.json index aa347a2324..e752a96c87 100644 --- a/public/language/de/search.json +++ b/public/language/de/search.json @@ -12,7 +12,7 @@ "reply-count": "Anzahl Antworten", "at-least": "Mindestens", "at-most": "Höchstens", - "relevance": "Relevance", + "relevance": "Relevanz", "post-time": "Verfaßt am", "newer-than": "Neuer als", "older-than": "Älter als", diff --git a/public/language/de/topic.json b/public/language/de/topic.json index fd1e20a27b..76861f0d00 100644 --- a/public/language/de/topic.json +++ b/public/language/de/topic.json @@ -13,8 +13,8 @@ "notify_me": "Erhalte eine Benachrichtigung bei neuen Antworten zu diesem Thema.", "quote": "Zitieren", "reply": "Antworten", - "replies_to_this_post": "%1 Replies", - "last_reply_time": "Last reply", + "replies_to_this_post": "%1 Antworten", + "last_reply_time": "Letzte Antwort", "reply-as-topic": "In einem neuen Thema antworten", "guest-login-reply": "Anmelden zum Antworten", "edit": "Bearbeiten", diff --git a/public/language/ja/admin/general/dashboard.json b/public/language/ja/admin/general/dashboard.json index d53f83d1bd..f1980545b9 100644 --- a/public/language/ja/admin/general/dashboard.json +++ b/public/language/ja/admin/general/dashboard.json @@ -23,11 +23,11 @@ "prerelease-warning": "

これはNodeBBのプレリリース版です。意図しないバグが発生することがあります。

", "notices": "通知", - "restart-not-required": "Restart not required", - "restart-required": "Restart required", - "search-plugin-installed": "Search Plugin installed", - "search-plugin-not-installed": "Search Plugin not installed", - "search-plugin-tooltip": "Install a search plugin from the plugin page in order to activate search functionality", + "restart-not-required": "再起動は必要ありません", + "restart-required": "再起動が必要です", + "search-plugin-installed": "検索プラグインのインストール", + "search-plugin-not-installed": "検索プラグインがインストールされていません", + "search-plugin-tooltip": "検索機能を有効にするには、プラグインページから検索プラグインをインストールしてください", "control-panel": "システムコントロール", "reload": "再読み込み", diff --git a/public/language/ja/admin/settings/general.json b/public/language/ja/admin/settings/general.json index b885c40d15..3579d42ba7 100644 --- a/public/language/ja/admin/settings/general.json +++ b/public/language/ja/admin/settings/general.json @@ -27,5 +27,5 @@ "touch-icon.help": "推奨サイズとフォーマット:192x192、PNG形式のみ。タッチアイコンが指定されていない場合、NodeBBはファビコンを使用します。", "outgoing-links": "外部サイトへのリンク", "outgoing-links.warning-page": "送信リンクの警告ページを使用", - "search-default-sort-by": "Search default sort by" + "search-default-sort-by": "デフォルトのソートを検索" } \ No newline at end of file diff --git a/public/language/ja/admin/settings/uploads.json b/public/language/ja/admin/settings/uploads.json index f980ea8bac..c352698762 100644 --- a/public/language/ja/admin/settings/uploads.json +++ b/public/language/ja/admin/settings/uploads.json @@ -9,7 +9,7 @@ "allow-topic-thumbnails": "ユーザーがスレッドのサムネイルをアップロードできるようにする", "topic-thumb-size": "スレッドのサムネイルの大きさ", "allowed-file-extensions": "ファイル拡張子が有効になりました。", - "allowed-file-extensions-help": "Enter comma-separated list of file extensions here (e.g. pdf,xls,doc). An empty list means all extensions are allowed.", + "allowed-file-extensions-help": "ここにファイル拡張子のカンマ区切りリストを入力します(例: pdf,xls,doc )。空のリストは、すべての拡張が許可されていることを意味します。", "profile-avatars": "プロフィールの顔写真", "allow-profile-image-uploads": "ユーザーがプロフィール画像をアップロードできるようにする。", "convert-profile-image-png": "プロフィール画像のアップロードをPNGに変換する", diff --git a/public/language/ja/notifications.json b/public/language/ja/notifications.json index a90c665158..3ac6f9d9b1 100644 --- a/public/language/ja/notifications.json +++ b/public/language/ja/notifications.json @@ -19,9 +19,9 @@ "user_flagged_post_in": "%1%2 の投稿にフラグを付けました。", "user_flagged_post_in_dual": "%1%2%3 の投稿にフラグを立てました。", "user_flagged_post_in_multiple": "%1 と %2 または他のユーザーが投稿 %3にフラグをつけました。", - "user_flagged_user": "%1 flagged a user profile (%2)", - "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user": "%1さんはユーザープロフィールにフラグを付けました(%2)", + "user_flagged_user_dual": "%1さんと%2さんは、ユーザープロフィール(%3)にフラグをつけました。", + "user_flagged_user_multiple": "%1さんと%2さんなどのユーザーがユーザープロフィール(%3)にフラグをつけました。", "user_posted_to": "%1さんは %2に返信しました。", "user_posted_to_dual": "%1%2 は、返信しました: %3", "user_posted_to_multiple": "%1 と %2 または他のユーザーが返信しました: %3", diff --git a/public/language/ja/topic.json b/public/language/ja/topic.json index d5b4d66397..6f7cac850b 100644 --- a/public/language/ja/topic.json +++ b/public/language/ja/topic.json @@ -14,7 +14,7 @@ "quote": "引用", "reply": "返信", "replies_to_this_post": "%1 件の返信", - "last_reply_time": "Last reply", + "last_reply_time": "最後の返信", "reply-as-topic": "スレッドとして返信する", "guest-login-reply": "投稿するのにログインして下さい", "edit": "編集", diff --git a/public/language/ja/user.json b/public/language/ja/user.json index 78cf9324c2..5ddd0fd082 100644 --- a/public/language/ja/user.json +++ b/public/language/ja/user.json @@ -33,7 +33,7 @@ "chat": "チャット", "chat_with": "%1とチャットを続ける", "new_chat_with": "%1とチャットを始める", - "flag-profile": "Flag Profile", + "flag-profile": "プロフィールを報告する", "follow": "フォロー", "unfollow": "フォロー解除", "more": "つづき", @@ -65,8 +65,8 @@ "remove_uploaded_picture": "アップした写真を取り消します", "upload_cover_picture": "カバー写真をアップロード", "remove_cover_picture_confirm": "カバー写真を削除してもよろしいですか?", - "crop_picture": "Crop picture", - "upload_cropped_picture": "Crop and upload", + "crop_picture": "画像を切り抜く", + "upload_cropped_picture": "切り抜いてアップロード", "settings": "設定", "show_email": "メールアドレスを表示", "show_fullname": "フルネームで表示", diff --git a/public/language/nb/admin/admin.json b/public/language/nb/admin/admin.json index 9c01f56006..2b7692c47b 100644 --- a/public/language/nb/admin/admin.json +++ b/public/language/nb/admin/admin.json @@ -1,6 +1,6 @@ { - "alert.confirm-reload": "Are you sure you wish to reload NodeBB?", - "alert.confirm-restart": "Are you sure you wish to restart NodeBB?", + "alert.confirm-reload": "Er du sikker på at du ønsker å laste inn NoddeBB på nytt?", + "alert.confirm-restart": "Er du sikker på at du ønsker å restarte NoddeBB?", "acp-title": "%1 | NodeBB Admin Control Panel", "settings-header-contents": "Contents" diff --git a/public/language/nb/search.json b/public/language/nb/search.json index e72d8ac6ab..81bba3d430 100644 --- a/public/language/nb/search.json +++ b/public/language/nb/search.json @@ -8,11 +8,11 @@ "posted-by": "Skapt av", "in-categories": "I kategorier", "search-child-categories": "Søk underkategorier", - "has-tags": "Has tags", + "has-tags": "Har emneord", "reply-count": "Mengde svar", "at-least": "Minst", "at-most": "Maks", - "relevance": "Relevance", + "relevance": "Relevanse", "post-time": "Innlegg-tid", "newer-than": "Nyere enn", "older-than": "Eldre en", diff --git a/public/language/nb/users.json b/public/language/nb/users.json index c491a4d7e2..04ea96aa68 100644 --- a/public/language/nb/users.json +++ b/public/language/nb/users.json @@ -4,7 +4,7 @@ "most_reputation": "Best rykte", "most_flags": "Most Flags", "search": "Søk", - "enter_username": "Skriv ett brukernavn for å søke", + "enter_username": "Skriv inn et brukernavn for å søke", "load_more": "Last flere", "users-found-search-took": "%1 bruker(e) funnet. Søket tok %2 sekunder.", "filter-by": "Filtrer etter", diff --git a/public/language/sk/admin/advanced/cache.json b/public/language/sk/admin/advanced/cache.json index e06dae19cb..2334b1f250 100644 --- a/public/language/sk/admin/advanced/cache.json +++ b/public/language/sk/admin/advanced/cache.json @@ -1,11 +1,11 @@ { - "post-cache": "Pamäť príspevku", - "posts-in-cache": "Príspevky v pamäti", + "post-cache": "Vyrovnávacia pamäť príspevku", + "posts-in-cache": "Príspevky vo vyrovnávacej pamäti", "average-post-size": "Priemerná veľkosť príspevku", "length-to-max": "Dĺžka / Maximum", "percent-full": "%1% plné", - "post-cache-size": "Veľkosť pamäti príspevku", - "items-in-cache": "Položky v pamäti", + "post-cache-size": "Veľkosť vyrovnávacej pamäti príspevku", + "items-in-cache": "Položky vo vyrovnávacej pamäti", "control-panel": "Ovládací panel", - "update-settings": "Aktualizovať nastavenia pamäti" + "update-settings": "Aktualizovať nastavenia vyrovnávacej pamäti" } \ No newline at end of file diff --git a/public/language/sk/notifications.json b/public/language/sk/notifications.json index 423c7cc1ea..01d1bcc90f 100644 --- a/public/language/sk/notifications.json +++ b/public/language/sk/notifications.json @@ -19,9 +19,9 @@ "user_flagged_post_in": "%1 pridal značku na príspevok %2", "user_flagged_post_in_dual": "%1 a %2 pridali značky na príspevok %3", "user_flagged_post_in_multiple": "%1 a %2 ďalší pridali značku na príspevok:%3", - "user_flagged_user": "%1 flagged a user profile (%2)", - "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user": "%1 označil profil používateľa (%2)", + "user_flagged_user_dual": "%1 a %2 označil profil používateľa (%3)", + "user_flagged_user_multiple": "%1 a %2 ďalší označili profil používateľa (%3)", "user_posted_to": "%1 odpovedal: %2", "user_posted_to_dual": "%1 a %2 uverejnili odpoveď na:%3", "user_posted_to_multiple": "%1 a %2 ďalší uverejnili odpovede na:%3", diff --git a/public/language/sk/search.json b/public/language/sk/search.json index 1dd20ebd20..0592755c2f 100644 --- a/public/language/sk/search.json +++ b/public/language/sk/search.json @@ -12,7 +12,7 @@ "reply-count": "Počet odpovedí", "at-least": "Najmenej", "at-most": "Najviac", - "relevance": "Relevance", + "relevance": "Dôležitosti", "post-time": "Čas publikovania", "newer-than": "Novšie ako", "older-than": "Staršie ako", diff --git a/public/language/sk/topic.json b/public/language/sk/topic.json index fd9aadb35f..e10b2f7afa 100644 --- a/public/language/sk/topic.json +++ b/public/language/sk/topic.json @@ -13,8 +13,8 @@ "notify_me": "Byť informovaný o nových príspevkov v tejto téme", "quote": "Citovať", "reply": "Odpovedať", - "replies_to_this_post": "%1 Replies", - "last_reply_time": "Last reply", + "replies_to_this_post": "%1 Odpovedí", + "last_reply_time": "Posledná odpoveď", "reply-as-topic": "Odpovedať ako téma", "guest-login-reply": "Pre odpoveď sa najprv prihláste", "edit": "Upraviť", diff --git a/public/language/sk/user.json b/public/language/sk/user.json index a0ea093b73..893e4a2802 100644 --- a/public/language/sk/user.json +++ b/public/language/sk/user.json @@ -33,7 +33,7 @@ "chat": "Konverzácia", "chat_with": "Konverzácia s %1", "new_chat_with": "Začať novú konverzáciu s %1", - "flag-profile": "Flag Profile", + "flag-profile": "Označiť profil", "follow": "Nasledovať", "unfollow": "Prestať sledovať", "more": "Viac", @@ -65,8 +65,8 @@ "remove_uploaded_picture": "Vymazať nahraný obrázok", "upload_cover_picture": "Nahrať titulný obrázok", "remove_cover_picture_confirm": "Ste si naozaj istý, že chcete odstrániť titulný obrázok?", - "crop_picture": "Crop picture", - "upload_cropped_picture": "Crop and upload", + "crop_picture": "Orezať obrázok", + "upload_cropped_picture": "Orezať a nahrať", "settings": "Nastavenia", "show_email": "Zobrazovať môj e-mail", "show_fullname": "Zobrazovať moje skutočné meno", diff --git a/public/language/sr/search.json b/public/language/sr/search.json index 78ac9a64c4..ef24e92f17 100644 --- a/public/language/sr/search.json +++ b/public/language/sr/search.json @@ -12,7 +12,7 @@ "reply-count": "Број одговора", "at-least": "Најмање", "at-most": "Највише", - "relevance": "Relevance", + "relevance": "Важност", "post-time": "Време објаве", "newer-than": "Новије од", "older-than": "Старије од", diff --git a/public/language/sr/topic.json b/public/language/sr/topic.json index dd2bd34ab3..3992fad51d 100644 --- a/public/language/sr/topic.json +++ b/public/language/sr/topic.json @@ -13,8 +13,8 @@ "notify_me": "Будите обавештени о новим порукама у овој теми", "quote": "Цитирај", "reply": "Одговори", - "replies_to_this_post": "%1 Replies", - "last_reply_time": "Last reply", + "replies_to_this_post": "%1 одговора", + "last_reply_time": "Последњи одговор", "reply-as-topic": "Постави одговор као тему", "guest-login-reply": "Пријавите се да бисте одговорили", "edit": "Уреди", diff --git a/public/language/uk/admin/admin.json b/public/language/uk/admin/admin.json new file mode 100644 index 0000000000..928d6b6c86 --- /dev/null +++ b/public/language/uk/admin/admin.json @@ -0,0 +1,7 @@ +{ + "alert.confirm-reload": "Ви впевнені, що бажаєте перевантажити NodeBB?", + "alert.confirm-restart": "Ви впевнені, що бажаєте перезавантажити NodeBB?", + + "acp-title": "%1 | Адмінська Панель Керування NodeBB", + "settings-header-contents": "Зміст" +} \ No newline at end of file diff --git a/public/language/uk/admin/advanced/cache.json b/public/language/uk/admin/advanced/cache.json new file mode 100644 index 0000000000..9d5aff3127 --- /dev/null +++ b/public/language/uk/admin/advanced/cache.json @@ -0,0 +1,11 @@ +{ + "post-cache": "Кеш постів", + "posts-in-cache": "Постів у кеші", + "average-post-size": "Середній розмір посту", + "length-to-max": "Довжина / Максимум", + "percent-full": "Заповнений на %1%", + "post-cache-size": "Розмір кешу постів", + "items-in-cache": "Елементів у кеші", + "control-panel": "Панель керування", + "update-settings": "Оновити налаштування кешу" +} \ No newline at end of file diff --git a/public/language/uk/admin/advanced/database.json b/public/language/uk/admin/advanced/database.json new file mode 100644 index 0000000000..b7ff1ae639 --- /dev/null +++ b/public/language/uk/admin/advanced/database.json @@ -0,0 +1,35 @@ +{ + "x-b": "%1 б", + "x-mb": "%1 мб", + "uptime-seconds": "Uptime в секундах", + "uptime-days": "Uptime в днях", + + "mongo": "Mongo", + "mongo.version": "Версія MongoDB", + "mongo.storage-engine": "Двигун сховища", + "mongo.collections": "Колекцій", + "mongo.objects": "Об'єктів", + "mongo.avg-object-size": "Середній розмір об'єкта", + "mongo.data-size": "Розмір даних", + "mongo.storage-size": "Розмір сховища", + "mongo.index-size": "Розмір індексу", + "mongo.file-size": "Розмір файлів", + "mongo.resident-memory": "Resident Memory", + "mongo.virtual-memory": "Virtual Memory", + "mongo.mapped-memory": "Mapped Memory", + "mongo.raw-info": "Сирі дані від MongoDB", + + "redis": "Redis", + "redis.version": "Версія Redis", + "redis.connected-clients": "Підключені клієнти", + "redis.connected-slaves": "Підключені слуги", + "redis.blocked-clients": "Заблоковані клієнти", + "redis.used-memory": "Використана пам'ять", + "redis.memory-frag-ratio": "Коефіцієнт фрагментації пам'яті", + "redis.total-connections-recieved": "Кількість отриманих підключень", + "redis.total-commands-processed": "Кілкість оброблених команд", + "redis.iops": "Кількість миттєвих операції в секунду", + "redis.keyspace-hits": "Попадання в ключах", + "redis.keyspace-misses": "Промахи в ключах", + "redis.raw-info": "Сирі дані від Redis" +} \ No newline at end of file diff --git a/public/language/uk/admin/advanced/errors.json b/public/language/uk/admin/advanced/errors.json new file mode 100644 index 0000000000..6d8a56ca30 --- /dev/null +++ b/public/language/uk/admin/advanced/errors.json @@ -0,0 +1,14 @@ +{ + "figure-x": "Рисунок %1", + "error-events-per-day": "%1 подій в день", + "error.404": "404 Not Found", + "error.503": "503 Service Unavailable", + "manage-error-log": "Керувати логом помилок", + "export-error-log": "Експортувати лог помилок (CSV)", + "clear-error-log": "Очистити лог помилок", + "route": "Шлях", + "count": "Кількість", + "no-routes-not-found": "Ура! Помилок 404 немає!", + "clear404-confirm": "Ви впевнені, що бажаєте очистити лог помилок 404?", + "clear404-success": "Помилки \"404 Not Found\" очищено" +} \ No newline at end of file diff --git a/public/language/uk/admin/advanced/events.json b/public/language/uk/admin/advanced/events.json new file mode 100644 index 0000000000..205b4736e1 --- /dev/null +++ b/public/language/uk/admin/advanced/events.json @@ -0,0 +1,6 @@ +{ + "events": "Події", + "no-events": "Подій немає", + "control-panel": "Панель керування подіями", + "delete-events": "Видалити події" +} \ No newline at end of file diff --git a/public/language/uk/admin/advanced/logs.json b/public/language/uk/admin/advanced/logs.json new file mode 100644 index 0000000000..b9ecc6916c --- /dev/null +++ b/public/language/uk/admin/advanced/logs.json @@ -0,0 +1,7 @@ +{ + "logs": "Логи", + "control-panel": "Панель керування логами", + "reload": "Перевантажити логи", + "clear": "Очистити логи", + "clear-success": "Логи очищено!" +} \ No newline at end of file diff --git a/public/language/uk/admin/appearance/customise.json b/public/language/uk/admin/appearance/customise.json new file mode 100644 index 0000000000..e14527f2b6 --- /dev/null +++ b/public/language/uk/admin/appearance/customise.json @@ -0,0 +1,9 @@ +{ + "custom-css": "Користувацькі CSS", + "custom-css.description": "Уведіть власні CSS правила, що будуть примінені після всіх інших стилів.", + "custom-css.enable": "Увімкнути користувацькі CSS", + + "custom-header": "Користувацький заголовок", + "custom-header.description": "Уведіть власний HTML (JavaScript, мета теги, тощо), що буде додано до секції <head> вашого форуму.", + "custom-header.enable": "Увімкнути користувацький заголовок" +} \ No newline at end of file diff --git a/public/language/uk/admin/appearance/skins.json b/public/language/uk/admin/appearance/skins.json new file mode 100644 index 0000000000..cc37055d8d --- /dev/null +++ b/public/language/uk/admin/appearance/skins.json @@ -0,0 +1,9 @@ +{ + "loading": "Завантаження стилів...", + "homepage": "Головна", + "select-skin": "Обрати стиль", + "current-skin": "Поточний стиль", + "skin-updated": "Стиль оновлено", + "applied-success": "Стиль %1 було успішно примінено", + "revert-success": "Стиль повернуто до базових кольорів" +} \ No newline at end of file diff --git a/public/language/uk/admin/appearance/themes.json b/public/language/uk/admin/appearance/themes.json new file mode 100644 index 0000000000..9d2dd953a9 --- /dev/null +++ b/public/language/uk/admin/appearance/themes.json @@ -0,0 +1,11 @@ +{ + "checking-for-installed": "Перевірка встановлених тем...", + "homepage": "Головна", + "select-theme": "Обрати тему", + "current-theme": "Поточна тема", + "no-themes": "Не знайдено вставлених тем", + "revert-confirm": "Ви впевнені, що бажаєте відновити тему NodeBB по замовчуванню?", + "theme-changed": "Тему змінено", + "revert-success": "Ви успішно повернули NodeBB до теми по замовчуванню.", + "restart-to-activate": "Будь ласка, перезавантажте NodeBB, щоб повністю активувати цю тему" +} \ No newline at end of file diff --git a/public/language/uk/admin/development/info.json b/public/language/uk/admin/development/info.json new file mode 100644 index 0000000000..e70699c869 --- /dev/null +++ b/public/language/uk/admin/development/info.json @@ -0,0 +1,16 @@ +{ + "you-are-on": "Інформація - Ви знаходитесь на %1:%2", + "host": "host", + "pid": "pid", + "nodejs": "nodejs", + "online": "online", + "git": "git", + "load": "load", + "uptime": "uptime", + + "registered": "Зареєстровано", + "sockets": "Сокети", + "guests": "Гостей", + + "info": "Інфо" +} \ No newline at end of file diff --git a/public/language/uk/admin/development/logger.json b/public/language/uk/admin/development/logger.json new file mode 100644 index 0000000000..b4887c2022 --- /dev/null +++ b/public/language/uk/admin/development/logger.json @@ -0,0 +1,12 @@ +{ + "logger-settings": "Налаштування логування", + "description": "Увімкнувши ці налаштування, ви будете отримувати логи в ваш термінал. Якщо ви вкажете шлях, логи натомість буде збережено в файл. HTTP логування корисно для сбору статистики про те хто, коли і до якого вмісту отримують доступ люди на вашому форумі. Додатково до логування HTTP запитів ми також можемо логувати події socket.io. Логування socket.io, в комбінації з redis-cli моніторингом може бути дуже зручним для вивчення внутрішньої роботи NodeBB.", + "explanation": "Просто поставте/зніміть прапорець, щоб вімкнути/вимкнути логування на льоту. Перезавантаження не потрібне. ", + "enable-http": "Увімкнути логування HTTP", + "enable-socket": "Увімкнути логування подій socket.io", + "file-path": "Шлях до лог файлу", + "file-path-placeholder": "/шлях/до/логу/file.log ::: залишити пустим для виводу в термінал", + + "control-panel": "Панель керування логуванням", + "update-settings": "Оновити налаштування логування" +} \ No newline at end of file diff --git a/public/language/uk/admin/extend/plugins.json b/public/language/uk/admin/extend/plugins.json new file mode 100644 index 0000000000..8efae9f8e1 --- /dev/null +++ b/public/language/uk/admin/extend/plugins.json @@ -0,0 +1,47 @@ +{ + "installed": "Встановлені", + "active": "Активні", + "inactive": "Неактивні", + "out-of-date": "Застарілі", + "none-found": "Плагінів не знайдено.", + "none-active": "Немає активних плагінів", + "find-plugins": "Знайти плагіни", + + "plugin-search": "Пошук плагінів", + "plugin-search-placeholder": "Шукати плагіни...", + "reorder-plugins": "Впорядкувати плагіни", + "order-active": "Впорядкувати активні плагіни", + "dev-interested": "Зацікавлені в написанні плагінів для NodeBB?", + "docs-info": "Повну документацію з розробки плагінів можна знайти на Порталі NodeBB.", + + "order.description": "Певні плагіни працють краще будучи ініціалізованими до/після інших плагінів.", + "order.explanation": "Плагіни вантажаться у заданому тут порядку, згори до низу", + + "plugin-item.themes": "Теми", + "plugin-item.deactivate": "Деактивувати", + "plugin-item.activate": "Активувати", + "plugin-item.install": "Встановити", + "plugin-item.uninstall": "Видалити", + "plugin-item.settings": "Налаштування", + "plugin-item.installed": "Встановлено", + "plugin-item.latest": "Остання", + "plugin-item.upgrade": "Оновити", + "plugin-item.more-info": "Більше інформації:", + "plugin-item.unknown": "Невідомо", + "plugin-item.unknown-explanation": "Стан цього плагіну неможливо визначити, можливо, через помилку налаштування.", + + "alert.enabled": "Плагін увімкнуто", + "alert.disabled": "Плагін вимкнуто", + "alert.upgraded": "Плагін оновлено", + "alert.installed": "Плагін встановлено", + "alert.uninstalled": "Плагін видалено", + "alert.activate-success": "Будь ласка, перезавантажте NodeBB, щоб повністю активувати цей плагін", + "alert.deactivate-success": "Плагін успішно деактивовано", + "alert.upgrade-success": "Будь ласка, перевантажте NodeBB, щоб повністю оновити цей плагін", + "alert.install-success": "Плагін успішно встановлено, будь-ласка активуйте його.", + "alert.uninstall-success": "Плагін успішно деактивовано та видалено.", + "alert.suggest-error": "

NodeBB не вдалося зв'язатися з менеджером пакетів, приступити до установки останньої версії?

Відповідь сервера (%1): %2
", + "alert.package-manager-unreachable": "

NodeBB не вдалося зв'язатися з менеджером пакетів, оновлення наразі не рекомендується.

", + "alert.incompatible": "

Ваша версія NodeBB (v%1) дозволяє оновлення цього плагіну лише до v%2. Будь ласка, оновіть NodeBB, щоб встановити новішу версію цього плагіну.

", + "alert.possibly-incompatible": "

Інформацію про сумісність не знайдено

У цьому плагіні не вказано сумісну версію NodeBB. Коректна робота не гарантується.

Якщо NodeBB перестане коректно стартувати, виконайте:

$ ./nodebb reset plugin=\"%1\"

Продовжити встановлення останньої версії цього плагіну?

" +} diff --git a/public/language/uk/admin/extend/rewards.json b/public/language/uk/admin/extend/rewards.json new file mode 100644 index 0000000000..a3ba8e3b5c --- /dev/null +++ b/public/language/uk/admin/extend/rewards.json @@ -0,0 +1,17 @@ +{ + "rewards": "Нагороди", + "condition-if-users": "Якщо у користувача", + "condition-is": "Є:", + "condition-then": "Тоді:", + "max-claims": "Скільки разів можна отримати цю нагороду", + "zero-infinite": "Уведіть 0 для нескінченності", + "delete": "Видалити", + "enable": "Увімкнути", + "disable": "Вимкнути", + "control-panel": "Керування нагородами", + "new-reward": "Нова нагорода", + + "alert.delete-success": "Нагороду успішно видалено", + "alert.no-inputs-found": "Невірна нагорода — поля пусті!", + "alert.save-success": "Нагороду успішно збережено" +} \ No newline at end of file diff --git a/public/language/uk/admin/extend/widgets.json b/public/language/uk/admin/extend/widgets.json new file mode 100644 index 0000000000..f22f8b9f17 --- /dev/null +++ b/public/language/uk/admin/extend/widgets.json @@ -0,0 +1,19 @@ +{ + "available": "Доступні віджети", + "explanation": "Оберіть віджет із випадаючого меню і перетягніть його в область зліва.", + "none-installed": "Віджетів не знайдено! Активуйте необхідний плагін віджетів в панелі керування плагінами.", + "containers.available": "Доступні контейнери", + "containers.explanation": "Перетягніть поверх будь-якого активного віджету", + "containers.none": "Ніякий", + "container.well": "Криниця", + "container.jumbotron": "Екран", + "container.panel": "Панель", + "container.panel-header": "Заголовок панелі", + "container.panel-body": "Тіло панелі", + "container.alert": "Тривога", + + "alert.confirm-delete": "Ви впевнені, що бажаєте видалити цей віджет?", + "alert.updated": "Віджети оновлено", + "alert.update-success": "Віджети успішно оновлено" + +} \ No newline at end of file diff --git a/public/language/uk/admin/general/dashboard.json b/public/language/uk/admin/general/dashboard.json new file mode 100644 index 0000000000..fa8b1498b0 --- /dev/null +++ b/public/language/uk/admin/general/dashboard.json @@ -0,0 +1,63 @@ +{ + "forum-traffic": "Трафік форуму", + "page-views": "Перегляди сторінок", + "unique-visitors": "Унікальні відвідувачі", + "users": "Користувачі", + "posts": "Пости", + "topics": "Теми", + "page-views-last-month": "Переглядів останнього місяця", + "page-views-this-month": "Переглядів цього місяця", + "page-views-last-day": "Переглядів за останні 24 години", + + "stats.day": "День", + "stats.week": "Тиждень", + "stats.month": "Місяць", + "stats.all": "Увесь час", + + "updates": "Оновлень", + "running-version": "У вас працює NodeBB v%1.", + "keep-updated": "Регулярно перевіряйте, що ваш NodeBB знаходиться в актуальному стані, щоб мати останні патчі та виправлення.", + "up-to-date": "

Ваша версія актуальна

", + "upgrade-available": "Була випущена нова версія (v%1). Подумайте про оновлення свого NodeBB.

", + "prerelease-upgrade-available": "У вас встановлено застарілу пре-релізну версію NodeBB. Була випущена нова версія (v%1). Подумайте про оновлення свого NodeBB.

", + "prerelease-warning": "

Це пре-релізна версія NodeBB. Можуть виникати неочікувані помилки.

", + + "notices": "Сповіщення", + "restart-not-required": "Перезавантаження не потрібне", + "restart-required": "Потрібне перезавантаження", + "search-plugin-installed": "Пошуковий плагін встановлено", + "search-plugin-not-installed": "Пошуковий плагін не встановлено", + "search-plugin-tooltip": "Встановіть пошуковий плагін зі сторінки плагінів, що активувати пошуковий функціонал", + + "control-panel": "Керування системою", + "reload": "Перевантажити", + "restart": "Перезавантажити", + "restart-warning": "Перевантажування або перезавантаження вашого NodeBB скине всі існуючі з`єднання на декілька секунд.", + "maintenance-mode": "Режим обслуговування", + "maintenance-mode-title": "Натисніть тут, щоб налаштувати режим обслуговування NodeBB", + "realtime-chart-updates": "Оновлення графіків в реальному часі", + + "active-users": "Активні користувачі", + "active-users.users": "Користувачі", + "active-users.guests": "Гості", + "active-users.total": "Разом", + "active-users.connections": "З'єднання", + + "anonymous-registered-users": "Аноніми проти Зареєстрованих", + "anonymous": "Аноніми", + "registered": "Зареєстровані", + + "user-presence": "Присутність користувача", + "on-categories": "На списку категорій", + "reading-posts": "Читають пости", + "browsing-topics": "Переглядають теми", + "recent": "Недавні", + "unread": "Непрочитані", + + "high-presence-topics": "Теми з високою присутністю", + + "graphs.page-views": "Перегляди сторінок", + "graphs.unique-visitors": "Унікальні відвідувачі", + "graphs.registered-users": "Зареєстровані користувачі", + "graphs.anonymous-users": "Анонімні користувачі" +} diff --git a/public/language/uk/admin/general/homepage.json b/public/language/uk/admin/general/homepage.json new file mode 100644 index 0000000000..da2cdffae7 --- /dev/null +++ b/public/language/uk/admin/general/homepage.json @@ -0,0 +1,7 @@ +{ + "home-page": "Головна сторінка", + "description": "Вкажіть яку сторінку показувати коли користувач переходить на корньовий URL форуму.", + "home-page-route": "Шлях головної сторінки", + "custom-route": "Користувацький шлях", + "allow-user-home-pages": "Дозволити користувачам власні сторінки" +} \ No newline at end of file diff --git a/public/language/uk/admin/general/languages.json b/public/language/uk/admin/general/languages.json new file mode 100644 index 0000000000..4db88abb21 --- /dev/null +++ b/public/language/uk/admin/general/languages.json @@ -0,0 +1,5 @@ +{ + "language-settings": "Налаштування мов", + "description": "Мова за замовчуванням задає мову для всіх користувачів, що відвідують форум.
Кожен користувач може перевизначити мову в своїх налаштуваннях акаунта.", + "default-language": "Мова за замовчуванням" +} \ No newline at end of file diff --git a/public/language/uk/admin/general/navigation.json b/public/language/uk/admin/general/navigation.json new file mode 100644 index 0000000000..1370621b63 --- /dev/null +++ b/public/language/uk/admin/general/navigation.json @@ -0,0 +1,27 @@ +{ + "icon": "Іконка:", + "change-icon": "змінити", + "route": "Шлях:", + "tooltip": "Підказка:", + "text": "Текст:", + "text-class": "Класс тексту: необов'язковий", + "id": "ID: необов'язковий", + + "properties": "Властивості:", + "only-admins": "Показувати лише Адмінам", + "only-global-mods-and-admins": "Показувати лише Модераторам та Адмінам", + "only-logged-in": "Показувати лише увійшовшим користувачам", + "open-new-window": "Відкривати у новому вікні", + + "installed-plugins-required": "Необхідні встановлені плагіни:", + "search-plugin": "Пошуковий плагін", + + "btn.delete": "Видалити", + "btn.disable": "Вимкнути", + "btn.enable": "Увімкнути", + + "available-menu-items": "Доступні пункти меню", + "custom-route": "Користувацький шлях", + "core": "ядро", + "plugin": "плагін" +} \ No newline at end of file diff --git a/public/language/uk/admin/general/social.json b/public/language/uk/admin/general/social.json new file mode 100644 index 0000000000..ce739d8b13 --- /dev/null +++ b/public/language/uk/admin/general/social.json @@ -0,0 +1,5 @@ +{ + "post-sharing": "Поширення постів", + "info-plugins-additional": "Плагіни можуть доповнювати набір доступних мереж для поширення постів", + "save-success": "Набір мереж для поширення постів успішно збережено!" +} \ No newline at end of file diff --git a/public/language/uk/admin/general/sounds.json b/public/language/uk/admin/general/sounds.json new file mode 100644 index 0000000000..17214deba0 --- /dev/null +++ b/public/language/uk/admin/general/sounds.json @@ -0,0 +1,9 @@ +{ + "notifications": "Сповіщення", + "chat-messages": "Повідомлення чату", + "play-sound": "Грати", + "incoming-message": "Вхідне повідомлення", + "outgoing-message": "Вихідне повідомлення", + "upload-new-sound": "Завантажити новий звук", + "saved": "Налаштування зберережні" +} \ No newline at end of file diff --git a/public/language/uk/admin/manage/categories.json b/public/language/uk/admin/manage/categories.json new file mode 100644 index 0000000000..d03162d48f --- /dev/null +++ b/public/language/uk/admin/manage/categories.json @@ -0,0 +1,68 @@ +{ + "settings": "Налаштування категорій", + "privileges": "Права", + + "name": "Назва категорії", + "description": "Опис категорії", + "bg-color": "Колір фону", + "text-color": "Колір тексту", + "bg-image-size": "Розмір фонового зображення", + "custom-class": "Користувацький клас", + "num-recent-replies": "Кількість свіжих відповідей", + "ext-link": "Зовнішнє посилання", + "upload-image": "Завантажити зображення", + "delete-image": "Видалити", + "category-image": "Зображення категорії", + "parent-category": "Батьківська категорія", + "optional-parent-category": "(Необов'язково) Батьківська категорія", + "parent-category-none": "(Жодна)", + "copy-settings": "Взяти налаштування з", + "optional-clone-settings": "(Необов'язково) Взяти налаштування з категорії", + "purge": "Видалити категорію", + + "enable": "Увімкнути", + "disable": "Вимкнути", + "edit": "Редагувати", + + "select-category": "Вибрати категорію", + "set-parent-category": "Встановити батьківську категорію", + + "privileges.description": "У цьому розділі ви можете налаштувати права доступу до категорії. Права можуть надаватися як користувачу так і групі. Ви можете додати користувача до таблиці використовуючи форму пошуку знизу.", + "privileges.warning": "Увага: Налаштування прав миттєво вступають у дію. Необов'язкового зберігати категорію після зміни цих налаштувань.", + "privileges.section-viewing": "Права перегляду", + "privileges.section-posting": "Права постингу", + "privileges.section-moderation": "Права модерації", + "privileges.section-user": "Користувач", + "privileges.search-user": "Додати користувача", + "privileges.no-users": "Для цієї категорії не задано особливих прав.", + "privileges.section-group": "Група", + "privileges.group-private": "Це приватна група", + "privileges.search-group": "Додати групу", + "privileges.copy-to-children": "Копіювати під-категоріям", + "privileges.copy-from-category": "Копіювати з категорії", + "privileges.inherit": "Надаючи права групі registered-users ви неявно надаєте ті ж самі права всім іншим групам, навіть якщо вони явно не відмічені. Це трапляється тому, що всі користувачі входять до групи registered-users.", + + "analytics.back": "Повернутися до списку категорій", + "analytics.title": "Аналітика по категорії \"%1\"", + "analytics.pageviews-hourly": "Рисунок 1 — Погодинна кількість переглядів категорії", + "analytics.pageviews-daily": "Рисунок 2 — Щоденна кількість переглядів категорії", + "analytics.topics-daily": "Рисунок 3 — Щоденна кількість створених тем у категорії", + "analytics.posts-daily": "Рисунок 4 — Щоденна кількість постів у категорії", + + "alert.created": "Створена", + "alert.create-success": "Категорія успішно створена!", + "alert.none-active": "У вас немає активних категорій.", + "alert.create": "Створити категорію", + "alert.confirm-moderate": "Ви точно бажаєте надати права модерування цій групі? Вона є відкритою і будь-хто зможе до неї приєднатися.", + "alert.confirm-purge": "

Ви впевнені, що бажаєте стерти категорію \"%1\"?

Увага! Всі теми та пости в цій категорії буде знищено!

Стирання категорії видалить всі теми та пости і видалить категорію з бази данних. Якщо ви хотіли тимчасово видалити категорію, вам, натомість, варто її просто \"вимкнути\".

", + "alert.purge-success": "Категорію стерто!", + "alert.copy-success": "Налаштування скопійовано!", + "alert.set-parent-category": "Встановити батьківську категорію", + "alert.updated": "Категорії оновлено", + "alert.updated-success": "ID категорій %1 успішно оновлено.", + "alert.upload-image": "Завантажити зображення категорії", + "alert.find-user": "Знайти користувача", + "alert.user-search": "Шукайте користувача тут...", + "alert.find-group": "Знайти групу", + "alert.group-search": "Шукайте групу тут..." +} \ No newline at end of file diff --git a/public/language/uk/admin/manage/flags.json b/public/language/uk/admin/manage/flags.json new file mode 100644 index 0000000000..df1fcb01cb --- /dev/null +++ b/public/language/uk/admin/manage/flags.json @@ -0,0 +1,19 @@ +{ + "daily": "Щоденні скарги", + "by-user": "Скарги за користувачем", + "by-user-search": "Пошук оскаржених постів за іменем користувача", + "category": "Категорія", + "sort-by": "Сортувати за", + "sort-by.most-flags": "Найбільше скарг", + "sort-by.most-recent": "Найсвіжіші", + "search": "Шукати", + "dismiss-all": "Відхилити всі", + "none-flagged": "Скарг немає!", + "posted-in": "Запощено в %1", + "read-more": "Читати далі", + "flagged-x-times": "Цей пост було оскаржено %1 раз(ів):", + "dismiss": "Відхилити цю скаргу", + "delete-post": "Видалити цей пост", + + "alerts.confirm-delete-post": "Ви точно бажаєте видалити цей пост?" +} \ No newline at end of file diff --git a/public/language/uk/admin/manage/groups.json b/public/language/uk/admin/manage/groups.json new file mode 100644 index 0000000000..8287ef6da8 --- /dev/null +++ b/public/language/uk/admin/manage/groups.json @@ -0,0 +1,34 @@ +{ + "name": "Назва групи", + "description": "Опис групи", + "system": "Системна група", + "edit": "Редагувати", + "search-placeholder": "Пошук", + "create": "Створити групу", + "description-placeholder": "Короткий опис вашої групи", + "create-button": "Створити", + + "alerts.create-failure": "Ой

Виникла проблема при створені вашої групи. Будь ласка, спробуйте пізніше!

", + "alerts.confirm-delete": "Ви впевнені, що бажаєте видалити цю групу?", + + "edit.name": "Назва", + "edit.description": "Опис", + "edit.user-title": "Назва учасників", + "edit.icon": "Іконка групи", + "edit.label-color": "Колір іконки групи", + "edit.show-badge": "Показувати бейдж", + "edit.private-details": "Якщо увімкнено, приєднання до групи вимагає підтвердження власника.", + "edit.private-override": "Увага: Приватні групи вимкнено на системному рівні, ця опція нічого не робить.", + "edit.disable-requests": "Вимкнути запити на приєднання", + "edit.hidden": "Прихована", + "edit.hidden-details": "Якщо увімкнено, групу не буде видно в загальному списку і запрошення користувачів потрібно буде здійснювати вручну", + "edit.add-user": "Додати користувача до групи", + "edit.add-user-search": "Пошук користувачів", + "edit.members": "Список учасників", + "control-panel": "Панель керування групами", + "revert": "Повернути", + + "edit.no-users-found": "Користувачів не знайдено", + "edit.confirm-remove-user": "Ви точно бажаєте видалити цього користувача?", + "edit.save-success": "Зміни збережено!" +} \ No newline at end of file diff --git a/public/language/uk/admin/manage/ip-blacklist.json b/public/language/uk/admin/manage/ip-blacklist.json new file mode 100644 index 0000000000..062a21b4dd --- /dev/null +++ b/public/language/uk/admin/manage/ip-blacklist.json @@ -0,0 +1,15 @@ +{ + "lead": "Налаштуйте чорний список IP адрес.", + "description": "Буває так, що бан користувача є недостатною мірою стримування. Іншим разом, заборона доступу до форуму для певної IP адреси або діапазону IP адрес є кращим засобом захисту форуму. У таких випадках ви можете додати проблемні адреси або цілі CIDR блоки до цього чорного списку і їм буде заборонено входити або реєструвати нові акаунти.", + "active-rules": "Активні правила", + "validate": "Перевірити чорний список", + "apply": "Примінити чорний список", + "hints": "Підказки по синтаксису", + "hint-1": "Вкажіть по одній IP адресі на кожен рядок. Ви можете додавати блоки IP адрес, якщо вони відповідні формату CIDR (наприклад, 192.168.100.0/22)", + "hint-2": "Ви можете додавати коментарі вказавши символ # на початку рядку.", + + "validate.x-valid": "%1 із %2 правил вірні.", + "validate.x-invalid": "Наступні %1 правил невірні:", + + "alerts.applied-success": "Чорний список примінено" +} \ No newline at end of file diff --git a/public/language/uk/admin/manage/registration.json b/public/language/uk/admin/manage/registration.json new file mode 100644 index 0000000000..4d0a80bb45 --- /dev/null +++ b/public/language/uk/admin/manage/registration.json @@ -0,0 +1,20 @@ +{ + "queue": "Черга", + "description": "В черзі на реєстрацію немає користувачів.
Щоб активувати цю функцію перейдіть до Налаштування → користувачів та реєстрації і встановіть Тип реєстрації на \"Підтвердження адміна\".", + + "list.name": "Ім'я", + "list.email": "Електронна пошта", + "list.ip": "IP-адреса", + "list.time": "Час", + "list.username-spam": "Частота: %1 Появи: %2 Впевненість: %3", + "list.email-spam": "Частота: %1 Появи: %2", + "list.ip-spam": "Частота: %1 Появи: %2", + + "invitations": "Запрошення", + "invitations.description": "Нижче наведено список надісланих запрошень. Використовуйте Ctrl+F щоб здійснити пошук за поштою чи іменем користувача.

Ім'я користувача буде показано справа від електронної пошти для тих користувачів, що використали свої запрошення.", + "invitations.inviter-username": "Ім'я запрошувача", + "invitations.invitee-email": "Електронна пошта запрошуваного", + "invitations.invitee-username": "Ім'я запрошуваного (якщо зареєстрований)", + + "invitations.confirm-delete": "Ви впевнені, що бажаєте видалити це запрошення?" +} \ No newline at end of file diff --git a/public/language/uk/admin/manage/tags.json b/public/language/uk/admin/manage/tags.json new file mode 100644 index 0000000000..6638741f36 --- /dev/null +++ b/public/language/uk/admin/manage/tags.json @@ -0,0 +1,18 @@ +{ + "none": "Жодна тема на вашому форумі ще не має тегів.", + "bg-color": "Колір фону", + "text-color": "Колір тексту", + "create-modify": "Створити та змінити теги", + "description": "Виберіть теги тиснучи або перетягуючи. Використовуйте Shift, щоб обрати декілька.", + "create": "Створити тег", + "modify": "Змінити тег", + "delete": "Видалити вибрані теги", + "search": "Пошук тегів...", + "settings": "Натисніть тут щоб перейти на сторінку налаштування тегів.", + "name": "Назва тегу", + + "alerts.editing-multiple": "Редагування декількох тегів", + "alerts.editing-x": "Редагування тегу \"%1\"", + "alerts.confirm-delete": "Бажаєте видалити декілька тегів?", + "alerts.update-success": "Тег оновлено!" +} \ No newline at end of file diff --git a/public/language/uk/admin/manage/users.json b/public/language/uk/admin/manage/users.json new file mode 100644 index 0000000000..9de068acca --- /dev/null +++ b/public/language/uk/admin/manage/users.json @@ -0,0 +1,91 @@ +{ + "users": "Користувачі", + "edit": "Редагувати", + "make-admin": "Створити адміна", + "remove-admin": "Видалити адміна", + "validate-email": "Підтвердити електронну адресу", + "send-validation-email": "Надіслати підтверджувального листа", + "password-reset-email": "Надіслати скидання паролю", + "ban": "Забанити", + "temp-ban": "Забанити тимчасово", + "unban": "Розбанити", + "reset-lockout": "Скинути блокування", + "reset-flags": "Скинути скарги", + "delete": "Видалити", + "purge": "Видалити разом зі змістом", + "download-csv": "Скачати CSV", + "invite": "Запросити", + "new": "Новий користувач", + + "pills.latest": "Останні користувачі", + "pills.unvalidated": "Не підтвердженні", + "pills.no-posts": "Без постів", + "pills.top-posters": "Кращі автори", + "pills.top-rep": "Найбільша репутація", + "pills.inactive": "Неактивні", + "pills.flagged": "Найбільш оскаржувані", + "pills.banned": "Забанені", + "pills.search": "Пошук користувачів", + + "search.username": "За іменем", + "search.username-placeholder": "Введіть ім'я для пошуку", + "search.email": "За поштою", + "search.email-placeholder": "Введіть пошту для пошуку", + "search.ip": "За IP адресою", + "search.ip-placeholder": "Введіть IP адресу для пошуку", + "search.not-found": "Користувача не знайдено!", + + "inactive.3-months": "3 місяці", + "inactive.6-months": "6 місяців", + "inactive.12-months": "12 місяців", + + "users.uid": "uid", + "users.username": "ім'я", + "users.email": "email", + "users.postcount": "постів", + "users.reputation": "репутація", + "users.flags": "скарги", + "users.joined": "приєднався", + "users.last-online": "востаннє в мережі", + "users.banned": "забанений", + + "create.username": "Ім'я користувача", + "create.email": "Електронна пошта", + "create.email-placeholder": "Електронна пошта користувача", + "create.password": "Пароль", + "create.password-confirm": "Пароль ще раз", + + "temp-ban.length": "Тривалість бану", + "temp-ban.reason": "Причина (необов'язково)", + "temp-ban.hours": "Години", + "temp-ban.days": "Дні", + "temp-ban.explanation": "Уведіть тривалість бану. 0 означатиме постійний бан.", + + "alerts.confirm-ban": "Ви впевнені, що бажаєте забанити цього користувача напостійно?", + "alerts.confirm-ban-multi": "Ви впевнені, що бажаєте забанити цих користувачів напостійно?", + "alerts.ban-success": "Користувачів забанено!", + "alerts.button-ban-x": "Забанити %1 користувачів", + "alerts.unban-success": "Користувачів забанено!", + "alerts.lockout-reset-success": "Блокування скинуто!", + "alerts.flag-reset-success": "Скарги скинуто!", + "alerts.no-remove-yourself-admin": "Ви не можете видалити себе як адміна!", + "alerts.make-admin-success": "Користувачі тепер адміністратори.", + "alerts.confirm-remove-admin": "Ви точно бажаєте видалити адмінів?", + "alerts.remove-admin-success": "Користувачі більше не адміністратори.", + "alerts.confirm-validate-email": "Ви точно бажаєте підтвердити електронні пошти цих користувачів?", + "alerts.validate-email-success": "Електронні пошти підтверджено", + "alerts.password-reset-confirm": "Ви точно бажаєте скинути паролі цим користувачам електронною поштою?", + "alerts.confirm-delete": "Увага!
Ви точно бажаєте видалити користувача(ів)?
Ця дія незворотня! Будуть видалені лише акаунти, пости та теми залишаться.", + "alerts.delete-success": "Користувачів видалено!", + "alerts.confirm-purge": "Увага!
Ви точно бажаєте видалити користувача(ів) на їх зміст?
Ця дія незворотня! Будуть видалені всі дані та зміст користувача!", + "alerts.create": "Створити користувача", + "alerts.button-create": "Створити", + "alerts.button-cancel": "Відмінити", + "alerts.error-passwords-different": "Паролі мають співпадати!", + "alerts.error-x": "Помилка

%1

", + "alerts.create-success": "Користувача створено!", + + "alerts.prompt-email": "Електронна пошта:", + "alerts.email-sent-to": "Запрошення надіслано за адресою %1", + "alerts.x-users-found": "%1 користувач(ів) знайдено! Пошук тривав %2 мс." +} \ No newline at end of file diff --git a/public/language/uk/admin/menu.json b/public/language/uk/admin/menu.json new file mode 100644 index 0000000000..ecfcd73b14 --- /dev/null +++ b/public/language/uk/admin/menu.json @@ -0,0 +1,74 @@ +{ + "section-general": "Загальні", + "general/dashboard": "Панель приладів", + "general/homepage": "Головна", + "general/navigation": "Навігація", + "general/languages": "Мови", + "general/sounds": "Звуки", + "general/social": "Соціальні", + + "section-manage": "Керування", + "manage/categories": "Категорії", + "manage/tags": "Теги", + "manage/users": "Користувачі", + "manage/registration": "Черга реєстрації", + "manage/groups": "Групи", + "manage/ip-blacklist": "Чорний список IP-адрес", + + "section-settings": "Налаштування", + "settings/general": "Загальні", + "settings/reputation": "Репутація", + "settings/email": "Електронна пошта", + "settings/user": "Користувач", + "settings/group": "Група", + "settings/guest": "Гості", + "settings/uploads": "Завантаження", + "settings/post": "Пост", + "settings/chat": "Чат", + "settings/pagination": "Пагінація", + "settings/tags": "Теги", + "settings/notifications": "Сповіщення", + "settings/cookies": "Куки", + "settings/web-crawler": "Роботи", + "settings/sockets": "Сокети", + "settings/advanced": "Розширені", + + "settings.page-title": "Налаштування %1", + + "section-appearance": "Зовнішній вигляд", + "appearance/themes": "Теми", + "appearance/skins": "Стилі", + "appearance/customise": "Користувацькі HTML та CSS", + + "section-extend": "Розширити", + "extend/plugins": "Плагіни", + "extend/widgets": "Віджети", + "extend/rewards": "Нагороди", + + "section-social-auth": "Авторизація соцмережами", + + "section-plugins": "Плагіни", + "extend/plugins.install": "Встановити плагіни", + + "section-advanced": "Розширені", + "advanced/database": "База даних", + "advanced/events": "Події", + "advanced/logs": "Логи", + "advanced/errors": "Помилки", + "advanced/cache": "Кеш", + "development/logger": "Логування", + "development/info": "Інформація", + + "reload-forum": "Перевантажити форум", + "restart-forum": "Перезавантажити форум", + "logout": "Вийти", + "view-forum": "Переглянути форум", + + "search.placeholder": "Пошук...", + "search.no-results": "Без результатів...", + "search.search-forum": "Шукати на форумі ", + "search.keep-typing": "Для результатів, надрукуйте ще...", + "search.start-typing": "Для результатів, почніть друкувати...", + + "connection-lost": "З'єднання з %1 було втрачено, намагаємось під'єднатись знов..." +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/advanced.json b/public/language/uk/admin/settings/advanced.json new file mode 100644 index 0000000000..6f27dfebd2 --- /dev/null +++ b/public/language/uk/admin/settings/advanced.json @@ -0,0 +1,19 @@ +{ + "maintenance-mode": "Режим обслуговування", + "maintenance-mode.help": "Коли форум знаходиться в режимі обслуговування, всі запити перенаправляються на статичну сторінку. Адміністратори, в свою чергу, не перенаправляються і можуть відвідувати сайт у звичному режимі.", + "maintenance-mode.message": "Повідомлення обслуговування", + "headers": "Заголовки", + "headers.allow-from": "Задати ALLOW-FROM для розміщення NodeBB в iFrame", + "headers.powered-by": "Налаштувати заголовок \"Powered By\", котрий відправляє NodeBB", + "headers.acao": "Access-Control-Allow-Origin", + "headers.acao-help": "Щоб заборонити доступ для всіх сайтів, залиште пустим або вкажіть null", + "headers.acam": "Access-Control-Allow-Methods", + "headers.acah": "Access-Control-Allow-Headers", + "traffic-management": "Керування трафіком", + "traffic.help": "NodeBB має модуль автоматичного відхилення запитів у разі надмірного напливу користувачів. Ви можете налаштувати цей модуль тут, хоча типові налаштування є достатньо дієвими.", + "traffic.enable": "Увімкнути керування трафіком", + "traffic.event-lag": "Затримка циклу обробки дій (в мілісекундах)", + "traffic.event-lag-help": "Зменшення цього значення прискорює час завантаження сторінок, але в той же час більше користувачів будуть отримувати повідомлення про \"надмірне навантаження\". (Потребує перезавантаження)", + "traffic.lag-check-interval": "Інтервал перевірки (в мілісекундах)", + "traffic.lag-check-interval-help": "Зменшення цього значення робить NodeBB більш чутливим до піків навантаження, але може зробити перевірку занадто чутливою. (Потребує перезавантаження)" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/chat.json b/public/language/uk/admin/settings/chat.json new file mode 100644 index 0000000000..01bc8f124d --- /dev/null +++ b/public/language/uk/admin/settings/chat.json @@ -0,0 +1,9 @@ +{ + "chat-settings": "Налаштування чату", + "disable": "Вимкнути чат", + "disable-editing": "Вимкнути редагування/видалення повідомлень чату", + "disable-editing-help": "Адміністратори на модератори звільнені від цього обмеження", + "max-length": "Максимальна довжина повідомлення", + "max-room-size": "Максимальна кількість людей у кімнаті", + "delay": "Час між повідомленнями в мілісекундах" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/cookies.json b/public/language/uk/admin/settings/cookies.json new file mode 100644 index 0000000000..1205e38819 --- /dev/null +++ b/public/language/uk/admin/settings/cookies.json @@ -0,0 +1,11 @@ +{ + "eu-consent": "Згода ЄС", + "consent.enabled": "Увімкнено", + "consent.message": "Текст сповіщення", + "consent.acceptance": "Текст погодження", + "consent.link-text": "Текст посилання на політику", + "consent.blank-localised-default": "Залишити пустими, щоб використати стандартні локалізовані тексти NodeBB", + "settings": "Налаштування", + "cookie-domain": "Домен куки сесії", + "blank-default": "Залишити пустим для налаштувань за замовченням" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/email.json b/public/language/uk/admin/settings/email.json new file mode 100644 index 0000000000..4bf8f18180 --- /dev/null +++ b/public/language/uk/admin/settings/email.json @@ -0,0 +1,25 @@ +{ + "email-settings": "Налаштування електронної пошти", + "address": "Електронна пошта", + "address-help": "Отримувачі будуть бачити цю адресу в полях \"From\" та \"Reply To\".", + "from": "Ім'я відправника", + "from-help": "Ім'я відправника, що буде показано в електронних листах", + "gmail-routing": "Маршрутизація Gmail", + "gmail-routing-help1": "До нас надходили звіти про те, що маршрутизація Gmail не працює на аканутах з підвищеною безпекою. У таких випадках вам потрібно дозволити менш безпечні додатки у своєму Gmail акаунті.", + "gmail-routing-help2": "Щоб дізнатися більше про цей обхідний шлях, прочитайте цю статтю на NodeMailer. Альтернативою буде використання сторонніх плагінів для листування як то SendGrid, Mailgun, тощо. Переглянути наявні плагіни тут.", + "gmail-transport": "Маршрутизувати листи через акаунт Gmail або Google Apps", + "gmail-transport.username": "Ім'я користувача", + "gmail-transport.username-help": "Вкажіть тут повну електронну адресу, особливо якщо ви використовуєте керований домен Google Apps.", + "gmail-transport.password": "Пароль", + "template": "Редагувати шаблон листа", + "template.select": "Обрати шаблон листа", + "template.revert": "Повернути до оригіналу", + "testing": "Тестування листа", + "testing.select": "Оберіть шаблон листа", + "testing.send": "Надіслати тестового листа", + "testing.send-help": "Тестовий лист було направлено на адресу поточного користувача.", + "subscriptions": "Підписки", + "subscriptions.disable": "Вимкнути сповіщення підписників", + "subscriptions.hour": "Година дайджесту", + "subscriptions.hour-help": "Вкажіть, будь ласка, годину о котрій кожного дня буде надсилатися дайджест (наприклад 0 — це північ, а 17 — п'ята година вечора). Зверніть увагу, що година визначається згідно налаштувань сервера і може не співпадати з часом вашого комп'ютера.
Приблизний час сервера:
Наступний дайджест заплановано до відправки " +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/general.json b/public/language/uk/admin/settings/general.json new file mode 100644 index 0000000000..72ff0d6fd9 --- /dev/null +++ b/public/language/uk/admin/settings/general.json @@ -0,0 +1,31 @@ +{ + "site-settings": "Налаштування сайту", + "title": "Назва сайту", + "title.name": "Назва вашої спільноти", + "title.show-in-header": "Показувати заголовок сайту в шапці", + "browser-title": "Заголовок браузера", + "browser-title-help": "Якщо не задано заголовок браузера, буде використано заголовок сайту", + "title-layout": "Структура заголовка", + "title-layout-help": "Визначте як заголовок браузера буде сформовано, наприклад {pageTitle} | {browserTitle}", + "description.placeholder": "Короткий опис вашої спільноти", + "description": "Опис сайту", + "keywords": "Ключові слова сайту", + "keywords-placeholder": "Ключові слова, що описують вашу спільноту, розділені комами", + "logo": "Логотип сайту", + "logo.image": "Зображення", + "logo.image-placeholder": "Шлях до логотипу для відображення в шапці форуму", + "logo.upload": "Завантажити", + "logo.url": "URL", + "logo.url-placeholder": "URL логотипу сайту", + "logo.url-help": "По кліку на логотип, направляти користувача за цією адресою. Якщо залишити пустим, користувач буде направлений в корінь сайту.", + "logo.alt-text": "Текст alt", + "log.alt-text-placeholder": "Альтернативний текст для доступності", + "favicon": "Фавіконка", + "favicon.upload": "Завантажити", + "touch-icon": "Сенсорна іконка", + "touch-icon.upload": "Завантажити", + "touch-icon.help": "Рекомендовані розмір та формат: 192x192, PNG. Якщо сенсорна іконка не задана, буде використано фавіконку NodeBB.", + "outgoing-links": "Зовнішні посилання", + "outgoing-links.warning-page": "Використовувати сторінку попередження про зовнішній перехід", + "search-default-sort-by": "Типовий порядок результатів пошуку" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/group.json b/public/language/uk/admin/settings/group.json new file mode 100644 index 0000000000..25aa9f7151 --- /dev/null +++ b/public/language/uk/admin/settings/group.json @@ -0,0 +1,12 @@ +{ + "general": "Загальні", + "private-groups": "Приватні групи", + "private-groups.help": "Якщо увімкнено, приєднання до групи вимагає підтвердження власника (По замовчуванню: увімкнено)", + "private-groups.warning": "Увага! Якщо ця опція вимикається і у вас є приватні групи, вони автоматично стають публічними.", + "allow-creation": "Дозволити створення груп", + "allow-creation-help": "Якщо увімкнено, користувачі можуть створювати групи (По замовчуванню: вимкнено)", + "max-name-length": "Максимальна довжина імені групи", + "cover-image": "Зображення обкладинки групи", + "default-cover": "Зображення обкладинки по замовчуванню", + "default-cover-help": "Вкажіть розділені комами зображення обкладинок, що будуть використовуватись по замовчуванню для груп, що не завантажили власних" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/guest.json b/public/language/uk/admin/settings/guest.json new file mode 100644 index 0000000000..4de7ce14dd --- /dev/null +++ b/public/language/uk/admin/settings/guest.json @@ -0,0 +1,8 @@ +{ + "handles": "Гостьові імена", + "handles.enabled": "Дозволити гостьові імена", + "handles.enabled-help": "Ця опція надає додаткове поле, що дозволяє гостям обрати собі ім'я для кожного посту. Якщо вимкнено, вони будуть просто зватися \"Гість\"", + "privileges": "Привілеї гостей", + "privileges.can-search": "Дозволити гостьовий пошук без входу", + "privileges.can-search-users": "Дозволити гостям пошук по користувачам без входу" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/notifications.json b/public/language/uk/admin/settings/notifications.json new file mode 100644 index 0000000000..68634d4721 --- /dev/null +++ b/public/language/uk/admin/settings/notifications.json @@ -0,0 +1,5 @@ +{ + "notifications": "Сповіщення", + "welcome-notification": "Сповіщення \"Ласкаво просимо\"", + "welcome-notification-link": "Посилання для сповіщення \"Ласкаво просимо\"" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/pagination.json b/public/language/uk/admin/settings/pagination.json new file mode 100644 index 0000000000..9efd986db3 --- /dev/null +++ b/public/language/uk/admin/settings/pagination.json @@ -0,0 +1,9 @@ +{ + "pagination": "Налаштування пагінації", + "enable": "Розбивати список тем та постів на сторінки замість нескінченної прокрутки", + "topics": "Пагінація тем", + "posts-per-page": "Постів на сторінку", + "categories": "Пагінація категорій", + "topics-per-page": "Тем на сторінку", + "initial-num-load": "Початкова кількість тем для завантаження в Непрочитаних, Недавніх та Популярних" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/post.json b/public/language/uk/admin/settings/post.json new file mode 100644 index 0000000000..77034cbf9c --- /dev/null +++ b/public/language/uk/admin/settings/post.json @@ -0,0 +1,44 @@ +{ + "sorting": "Сортування постів", + "sorting.post-default": "Типове сортування постів", + "sorting.oldest-to-newest": "Старі > Нові", + "sorting.newest-to-oldest": "Нові > Старі", + "sorting.most-votes": "Кількість голосів", + "sorting.topic-default": "Типове сортування тем", + "restrictions": "Обмеження постингу", + "restrictions.seconds-between": "Кількість секунд між постами", + "restrictions.seconds-between-new": "Кількість секунд між постами для нових користувачів", + "restrictions.rep-threshold": "Репутація, при якій зі обмеження буде знято", + "restrictions.seconds-defore-new": "Кількість секунд до першого посту для нового користувача", + "restrictions.seconds-edit-after": "Кількість секунд протягом яких користувач може редагувати пост після відправки. (0 — вимкнено)", + "restrictions.seconds-delete-after": "Кількість секунд протягом яких користувач може видалити пост після відправки. (0 — вимкнено)", + "restrictions.replies-no-delete": "Кількість відповідей після котрих користувач не зможе видалити власну тему. (0 — вимкнено)", + "restrictions.min-title-length": "Мінімальна довжина заголовку", + "restrictions.max-title-length": "Максимальна довжина заголовку", + "restrictions.min-post-length": "Мінімальна довжина посту", + "restrictions.max-post-length": "Максимальна довжина посту", + "restrictions.days-until-stale": "Кількість днів після яких тема буде вважатися застарілою", + "restrictions.stale-help": "Якщо тема є \"застарілою\", то для користувачів, що бажають відповісти на неї буде показано попередження.", + "timestamp": "Часова мітка", + "timestamp.cut-off": "Обрізка дат (в днях)", + "timestamp.cut-off-help": "Дата і час показуються відносно (тобто \"3 години тому\" / \"5 днів тому\"). Після певного періоду часу, цей текст може бути змінено на звичайну дати (тобто 5 Лис 2016 15:30).
(Типово: 30, або один місяць). Вкажіть 0, щоб завжди показувати дати або залиште пустим, щоб завжди показувати відносний час.", + "teaser": "Пост тизер", + "teaser.last-post": "Останній — показувати останній пост або перший, якщо немає відповідей", + "teaser.last-reply": "Останній — показувати останній пост або \"Немає відповідей\", якщо немає відповідей", + "teaser.first": "Перший", + "unread": "Налаштування непрочитаних", + "unread.cutoff": "За скільки днів показувати непрочитані", + "unread.min-track-last": "Мінімальна кількість постів у темі перш ніж відслідковувати останні прочитані", + "signature": "Налаштування підписів", + "signature.disable": "Вимкнути підписи", + "signature.no-links": "Вимкнути посилання в підписах", + "signature.no-images": "Вимкнути зображення в підписах", + "signature.max-length": "Максимальна довжина підпису", + "composer": "Налаштування редактора", + "composer-help": "Ці налаштування керують функціональністю та виглядом редактору постів для користувачів коли вони створюють нові теми або відповідають на існуючі.", + "composer.show-help": "Показувати вкладку \"Довідка\"", + "composer.enable-plugin-help": "Дозволити плагінам додавати зміст довідки", + "composer.custom-help": "Користувацький текст довідки", + "ip-tracking": "Відстеження IP", + "ip-tracking.each-post": "Відстежувати IP адреси для кожного посту" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/reputation.json b/public/language/uk/admin/settings/reputation.json new file mode 100644 index 0000000000..3feb96319e --- /dev/null +++ b/public/language/uk/admin/settings/reputation.json @@ -0,0 +1,8 @@ +{ + "reputation": "Налаштування репутації", + "disable": "Вимкнути систему репутації", + "disable-down-voting": "Вимкнути голосування проти", + "thresholds": "Допуски активності", + "min-rep-downvote": "Мінімальна репутація для голосування проти постів", + "min-rep-flag": "Мінімальна репутація для подання скарг на пости" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/sockets.json b/public/language/uk/admin/settings/sockets.json new file mode 100644 index 0000000000..8ff97b7761 --- /dev/null +++ b/public/language/uk/admin/settings/sockets.json @@ -0,0 +1,6 @@ +{ + "reconnection": "Налаштування перепідключення", + "max-attempts": "Максимальна кількість спроб перепідключення", + "default-placeholder": "По замовчуванню: %1", + "delay": "Затримка перепідключення" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/tags.json b/public/language/uk/admin/settings/tags.json new file mode 100644 index 0000000000..d1bdbbd82c --- /dev/null +++ b/public/language/uk/admin/settings/tags.json @@ -0,0 +1,12 @@ +{ + "tag": "Налаштування тегів", + "min-per-topic": "Мінімальна кількість тегів для теми", + "max-per-topic": "Максимальна кількість тегів для теми", + "min-length": "Мінімальна довжина тега", + "max-length": "Максимальна довжина тега", + "goto-manage": "Натисніть тут, щоб перейти на сторінку налаштування тегів.", + "privacy": "Приватність", + "list-private": "Зробити список тегів приватним", + "related-topics": "Пов'язані теми", + "max-related-topics": "Максимальна кількість пов'язаних тем до показу (якщо підтримується темою)" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/uploads.json b/public/language/uk/admin/settings/uploads.json new file mode 100644 index 0000000000..a9dfe9c1f6 --- /dev/null +++ b/public/language/uk/admin/settings/uploads.json @@ -0,0 +1,28 @@ +{ + "posts": "Пости", + "allow-files": "Дозволити користувачам завантажувати звичайні файли", + "private": "Зробити завантажувані файли приватними", + "max-image-width": "Змінювати розмір зображень до заданої ширини (в пікселях)", + "max-image-width-help": "(в пікселях, 760 — за замовчуванням, 0 — вимкнути)", + "max-file-size": "Максимальний розмір файлу (в КіБ)", + "max-file-size-help": "(в кілобайтах, 2048 — за замовчуванням)", + "allow-topic-thumbnails": "Дозволити користувачам завантажувати мініатюри тем", + "topic-thumb-size": "Розмір мініатюри теми", + "allowed-file-extensions": "Допустимі розширення файлів", + "allowed-file-extensions-help": "Вкажіть розширеня файлів розділені комою (наприклад, pdf,xls,doc). Пустий список дає дозвіл на будь-які розширення.", + "profile-avatars": "Аватарки профілів", + "allow-profile-image-uploads": "Дозволити користувачам завантажувати зображення профілю", + "convert-profile-image-png": "Конвертувати завантажувані зображення профілю в PNG", + "default-avatar": "Аватар за замовчуванням", + "upload": "Завантаження", + "profile-image-dimension": "Розміри зображення профілю", + "profile-image-dimension-help": "(в пікселях, 128 — за замовчуванням)", + "max-profile-image-size": "Максимальний розмір файлу зображення профілю", + "max-profile-image-size-help": "(в кілобайтах, 256 — за замовчуванням)", + "max-cover-image-size": "Максимальний розмір файлу зображення обкладинки", + "max-cover-image-size-help": "(в кілобайтах, 2048 — за замовчуванням)", + "keep-all-user-images": "Зберігати старі версію зображень аватарки та обкладинки на сервері", + "profile-covers": "Обкладинки профілю", + "default-covers": "Обкладинка за замовчуванням", + "default-covers-help": "Вкажіть розділені комами зображення обкладинок за замовчуванням для акаунтів, що не завантажували власних" +} diff --git a/public/language/uk/admin/settings/user.json b/public/language/uk/admin/settings/user.json new file mode 100644 index 0000000000..263df1745b --- /dev/null +++ b/public/language/uk/admin/settings/user.json @@ -0,0 +1,59 @@ +{ + "authentication": "Аутентифікація", + "allow-local-login": "Дозволити локальний вхід", + "require-email-confirmation": "Вимагати підтвердження електронної пошти", + "email-confirm-interval": "Користувач не може повторно надіслати підтвердження електронної пошти поки не мине", + "email-confirm-email2": "хвилин", + "allow-login-with": "Дозволити вхід використовуючи", + "allow-login-with.username-email": "Ім'я користувача або електронну пошту", + "allow-login-with.username": "Тільки ім'я користувача", + "allow-login-with.email": "Тільки електронну пошту", + "account-settings": "Налаштування акаунту", + "disable-username-changes": "Вимкнути зміну імені користувача", + "disable-email-changes": "Вимкнути зміну електронної пошти", + "disable-password-changes": "Вимкнути зміну пароля", + "allow-account-deletion": "Дозволити видалення акаунту", + "user-info-private": "Зробити інформацію користувачів приватною", + "themes": "Теми", + "disable-user-skins": "Заборонити користувачам обирати стиль сайту", + "account-protection": "Захист акаунту", + "login-attempts": "Кількість спроб входу за годину", + "login-attempts-help": "Якщо кількість спроб входу в акаунт користувача перевищить цей ліміт, акаунт буде заблоковано на задану кількість часу", + "lockout-duration": "Тривалість блокування акаунту (хвилин)", + "login-days": "Скільки днів пам'ятати сесію користувача", + "password-expiry-days": "Скидати пароль користувачам після заданої кількості днів", + "registration": "Реєстрація користувачів", + "registration-type": "Тип реєстрації", + "registration-type.normal": "Стандартна", + "registration-type.admin-approval": "Підтвердження адміна", + "registration-type.admin-approval-ip": "Підтвердження адміна для IP-адрес", + "registration-type.invite-only": "По запрошенню", + "registration-type.admin-invite-only": "По запрошенню адміна", + "registration-type.disabled": "Без реєстрації", + "registration-type.help": "Стандартна — користувачі можуть реєструватись на сторінці /register.
\nПідтвердження адміна — реєстрації користувачів потрапляють до адмінської черги на підтвердження.
\nПідтвердження адміна для IP-адрес — стандартна для нових користувачів і підтвердження адміністратора для IP-адрес для котрих уже створено акаунт.
\nПо запрошенню — користувачі можуть запрошувати інших зі сторінки users.
\nПо запрошенню адміна — лише адміністратори мошуть запрошувати інших зі сторінок users та admin/manage/users.
\nБез реєстрації — реєстрація вимкнена.
", + "registration.max-invites": "Кількість запрошень на користувача", + "max-invites": "Кількість запрошень на користувача", + "max-invites-help": "0 — без обмежень. Адміни отримуют необмежену кількість.
Працює лише з типом реєстрації \"По запрошенню\".", + "min-username-length": "Мінімальна довжина імені користувача", + "max-username-length": "Максимальна довжина імені користувача", + "min-password-length": "Мінімальна довжина пароля", + "max-about-me-length": "Максимальна довжина розділу \"Про мене\"", + "terms-of-use": "Умови користування форумом (Залиште пустим, щоб вимкнути)", + "user-search": "Пошук користувачів", + "user-search-results-per-page": "Кількість результатів до показу", + "default-user-settings": "Налаштування користувача за замовчуванням", + "show-email": "Показувати електронну пошту", + "show-fullname": "Показувати повне ім'я", + "restrict-chat": "Дозволяти чат повідомлення лише від користувачів за якими я стежу", + "outgoing-new-tab": "Відкривати зовнішні посилання у новій вкладці", + "topic-search": "Увімкнути пошук у темах", + "digest-freq": "Підписатися на дайджест", + "digest-freq.off": "Ніколи", + "digest-freq.daily": "Щоденно", + "digest-freq.weekly": "Щотижнево", + "digest-freq.monthly": "Щомісячно", + "email-chat-notifs": "Надсилати листа, коли я не в мережі, якщо приходить чат повідомлення", + "email-post-notif": "Надсилати листа, коли в темах на які я підписаний з'являються відповіді", + "follow-created-topics": "Стежити за темами які ви створюєте", + "follow-replied-topics": "Стежити за темами в котрих ви відповідаєте" +} \ No newline at end of file diff --git a/public/language/uk/admin/settings/web-crawler.json b/public/language/uk/admin/settings/web-crawler.json new file mode 100644 index 0000000000..f6f3a4b541 --- /dev/null +++ b/public/language/uk/admin/settings/web-crawler.json @@ -0,0 +1,10 @@ +{ + "crawlability-settings": "Налаштування можливості сканування", + "robots-txt": "Користувацький Robots.txt Залишити пустим для налаштувань за замовчуванням", + "sitemap-feed-settings": "Налаштування мапи сайту та стрічки оновлень", + "disable-rss-feeds": "Вимкнути RSS-стрічки", + "disable-sitemap-xml": "Вимкнути Sitemap.xml", + "sitemap-topics": "Кількість тем для показу в мапі сайту", + "clear-sitemap-cache": "Очистити кеш мапи сайту", + "view-sitemap": "Переглянути мапу сайту" +} \ No newline at end of file diff --git a/public/language/uk/category.json b/public/language/uk/category.json new file mode 100644 index 0000000000..bdd53de08b --- /dev/null +++ b/public/language/uk/category.json @@ -0,0 +1,20 @@ +{ + "category": "Категорія", + "subcategories": "Підкатегорія", + "new_topic_button": "Новий запис", + "guest-login-post": "Увійдіть, щоб постити", + "no_topics": " У цій категорії немає жодної теми.
Чому б вам не створити першу?", + "browsing": "переглядають", + "no_replies": "Немає відповідей", + "no_new_posts": "Немає нових постів.", + "share_this_category": "Поділитися цією категорією", + "watch": "Стежити", + "ignore": "Ігнорувати", + "watching": "Відстежується", + "ignoring": "Ігнорувати", + "watching.description": "Показати тему в непрочитаних", + "ignoring.description": "Не показувати тему в непрочитаних", + "watch.message": "Ви переглядаєте оновлення цієї категорії та підкатегорії", + "ignore.message": "Ви ігноруєте оновлення цієї категорії та її підкатегорій", + "watched-categories": "Переглянуті категорії" +} \ No newline at end of file diff --git a/public/language/uk/email.json b/public/language/uk/email.json new file mode 100644 index 0000000000..48574768db --- /dev/null +++ b/public/language/uk/email.json @@ -0,0 +1,36 @@ +{ + "password-reset-requested": "Отриман запит на відновлення паролю - %1!", + "welcome-to": "Ласкаво просимо до %1", + "invite": "Запрошення від %1", + "greeting_no_name": "Привіт", + "greeting_with_name": "Привіт %1", + "welcome.text1": "Дякуємо за реєстрацію з %1!", + "welcome.text2": "Щоб повністю активувати ваш аккаунт, нам потрібно верефікувати володіння е-мейлом, який ви вказали при реєстрації ", + "welcome.text3": "Адміністратор схвалив ваш запит на реєстрацію. Ви можете залогінитись, використовуючи свій пароль та назву аккаунту", + "welcome.cta": "Натисніть тут, щоб підтвердити вашу скриньку", + "invitation.text1": "%1 запросив вас приєднатися до %2", + "invitation.ctr": "Натисніть тут, щоб створити аккаунт", + "reset.text1": "Ми отримали запит на відновлення вашого паролю, можливо тому, что ви його забули. Якщо це не потрібно - проігноруйте цей лист", + "reset.text2": "Щоб продовжити відновлення паролю, будь ласка, перейдіть за посиланням", + "reset.cta": "Натисніть щоб скинути Ваш пароль", + "reset.notify.subject": "Пароль змінено", + "reset.notify.text1": "Ми повідомляємо вас, що на %1, ваш пароль було змінено", + "reset.notify.text2": "Якщо ви не авторизували це, повідомте негайно адміністратора", + "digest.notifications": "Ви маєте нове повідомлення від %1:", + "digest.latest_topics": "Останні теми від %1", + "digest.cta": "Натисніть, щоб відвідати %1", + "digest.unsub.info": "Цей дайджест був вислан вам, згідно ваших налаштувань підписки", + "digest.no_topics": "Не було активних тем, за останні %1", + "digest.day": "день", + "digest.week": "тиждень", + "digest.month": "місяць", + "digest.subject": "Дайджест для %1", + "notif.chat.subject": "Новє повідомлення чату було отриманно від %1", + "notif.chat.cta": "Натисніть тут, щоб продовжити розмову", + "notif.chat.unsub.info": "Це повідомлення чату було вислано вам, згідно ваших налаштувань підписки", + "notif.post.cta": "Натисніть тут, щоб повністю прочитати статтю", + "notif.post.unsub.info": "Це повідомлення пошти було вислано вам, згідно ваших налаштувань підписки", + "test.text1": "Це пробний лист, для верифікації адресату. Всі налаштування вірні для NodeBB.", + "unsub.cta": "Натисніть тут, щоб змінити ці налаштування", + "closing": "Дякуємо!" +} \ No newline at end of file diff --git a/public/language/uk/error.json b/public/language/uk/error.json new file mode 100644 index 0000000000..286eb36767 --- /dev/null +++ b/public/language/uk/error.json @@ -0,0 +1,131 @@ +{ + "invalid-data": "Невірні дані", + "not-logged-in": "Не схоже, що ви увійшли в систему.", + "account-locked": "Ваш акаунт тимчасово заблоковано", + "search-requires-login": "Для пошуку потрібен акаунт — будь ласка, увійдіть чи зареєструйтесь.", + "invalid-cid": "Невірний ID категорії", + "invalid-tid": "Невірний ID теми", + "invalid-pid": "Невірний ID поста", + "invalid-uid": "Невірний ID користувача", + "invalid-username": "Невірне ім'я користувача", + "invalid-email": "Невірна електронна адреса", + "invalid-title": "Невірний заголовок!", + "invalid-user-data": "Невірні користувацькі дані", + "invalid-password": "Невірний пароль", + "invalid-username-or-password": "Вкажіть, будь ласка, ім'я користувача та пароль", + "invalid-search-term": "Невірний пошуковий запит", + "csrf-invalid": "Нам не вдалося вас пустити, ймовірно, через прострочену сесію. Будь ласка, спробуйте ще раз", + "invalid-pagination-value": "Невірне значення сторінки, має бути щонайменше %1 та щонайбільше %2", + "username-taken": "Це ім'я зайняте", + "email-taken": "Ця електронна пошта зайнята", + "email-not-confirmed": "Ваша електронна пошта ще не підтверджена, натисніть тут, щоб це зробити.", + "email-not-confirmed-chat": "Ви не можете користуватися чатом поки ваша електронна пошта не буде підтверджена, натисніть тут, щоб це зробити.", + "email-not-confirmed-email-sent": "Ваша електронна пошта ще не підтверджена, перевірте свої вхідні повідомлення на наявність підтверджувального листа.", + "no-email-to-confirm": "Цей форум вимагає підтвердження електронної пошти, будь-ласка, натисніть тут, щоб його ввести.", + "email-confirm-failed": "Ми не можемо підтвердити вашу електронну пошту, будь ласка, спробуйте пізніше.", + "confirm-email-already-sent": "Підтвердження по електронній пошті вже було надіслано, зачекайте, будь ласка, %1 хвилин(и), щоб відправити ще одне. ", + "sendmail-not-found": "Виконуваний файл sendmail не знайдено, переконайтесь, будь ласка, що його встановлено та що він виконується власником процесу NodeBB.", + "username-too-short": "Ім'я користувача закоротке", + "username-too-long": "Ім'я користувача задовге", + "password-too-long": "Пароль задовгий", + "user-banned": "Користувача забанено", + "user-banned-reason": "Вибачте, але цей акаунт було забанено (Причина: %1)", + "user-too-new": "Вибачте, але вам необхідно зачекати %1 секунд(и), перед першим постом", + "blacklisted-ip": "Вибачте, але ваша IP-адреса була забанена в цій спільноті. Якщо ви гадаєте, що це сталось помилково, зв'яжіться з адміністратором.", + "ban-expiry-missing": "Вкажіть, будь ласка, кінцеву дату бану", + "no-category": "Категорія не існує", + "no-topic": "Тема не існує", + "no-post": "Посту не існує", + "no-group": "Група не існує", + "no-user": "Користувач не існує", + "no-teaser": "Тизер не існує", + "no-privileges": "У вас недостатньо повноважень для цієї дії. ", + "category-disabled": "Категорію відключено", + "topic-locked": "Тему заблоковано", + "post-edit-duration-expired": "Ви можете редагувати пости лиш на протязі %1 секунд(и) з часу відправки", + "post-edit-duration-expired-minutes": "Ви можете редагувати пости лиш на протязі %1 хвилин(и) з часу відправки", + "post-edit-duration-expired-minutes-seconds": "Ви можете редагувати пости лиш на протязі %1 хвилин(и) та %2 секунд(и) з часу відправки", + "post-edit-duration-expired-hours": "Ви можете редагувати пости лиш на протязі %1 годин(и) з часу відправки", + "post-edit-duration-expired-hours-minutes": "Ви можете редагувати пости лиш на протязі %1 годин(и) та %2 хвилин(и) з часу відправки", + "post-edit-duration-expired-days": "Ви можете редагувати пости лиш на протязі %1 дні з часу відправки", + "post-edit-duration-expired-days-hours": "Ви можете редагувати пости лиш на протязі %1 дні та %2 годин(и) з часу відправки", + "post-delete-duration-expired": "Ви можете видаляти пости лиш на протязі %1 секунд(и) з часу відправки", + "post-delete-duration-expired-minutes": "Ви можете видаляти пости лиш на протязі %1 хвилин(и) з часу відправки", + "post-delete-duration-expired-minutes-seconds": "Ви можете видаляти пости лиш на протязі %1 хвилин(и) та %2 секунд(и) з часу відправки", + "post-delete-duration-expired-hours": "Ви можете видаляти пости лиш на протязі %1 годин(и) з часу відправки", + "post-delete-duration-expired-hours-minutes": "Ви можете видаляти пости лиш на протязі %1 годин(и) та %2 хвилин(и) з часу відправки", + "post-delete-duration-expired-days": "Ви можете видаляти пости лиш на протязі %1 дні з часу відправки", + "post-delete-duration-expired-days-hours": "Ви можете видаляти пости лиш на протязі %1 дні та %2 годин(и) з часу відправки", + "cant-delete-topic-has-reply": "Ви не можете видалити тему з відповідями", + "cant-delete-topic-has-replies": "Ви не можете видалити тему з %1 відповідями", + "content-too-short": "Введіть, будь ласка, довший пост. Він має складати щонайменше %1 символ(ів).", + "content-too-long": "Введіть, будь ласка, коротший пост. Він має складати щонайбільше %1 символ(ів).", + "title-too-short": "Введіть, будь ласка, довший заголовок. Мінімальна довжина %1 символ(ів).", + "title-too-long": "Введіть, будь ласка, коротший заголовок. Максимальна довжина %1 символ(ів).", + "category-not-selected": "Категорію не вибрано.", + "too-many-posts": "Ви не можете постити частіше %1 секунд(и) — зачекайте, будь ласка, перед повторною спробою", + "too-many-posts-newbie": "Як новий користувач, ви не можете публікувати частіше %1 секунд(и) доки не заробите %2 репутації — зачекайте, будь ласка, перед повторною спробою", + "tag-too-short": "Введіть, будь ласка, довший тег. Мінімальна довжина тегу %1 символ(ів)", + "tag-too-long": "Введіть, будь ласка, коротший тег. Максимальна довжина тегу %1 символ(ів)", + "not-enough-tags": "Замало тегів. Тема повинна мати щонайменше %1 тег(и)", + "too-many-tags": "Забагато тегів. Тема не може мати більше %1 тег(и)", + "still-uploading": "Зачекайте, будь ласка, доки завантаження завершиться.", + "file-too-big": "Максимальний розмір файлу %1 кБ — завантажте менший файл, будь ласка.", + "guest-upload-disabled": "Гостьове завантаження вимкнено.", + "already-bookmarked": "Ви вже додали цей пост собі в закладки", + "already-unbookmarked": "Ви вже видалили цей пост із закладок", + "cant-ban-other-admins": "Ви не можете банити інших адмінів!", + "cant-remove-last-admin": "Ви єдиний адміністратор. Додайте іншого користувача в якості адміністратора перш ніж знімати з себе ці обов'язки.", + "cant-delete-admin": "Зніміть обов'язки адміністратора з цього акаунту перш ніж видаляти його.", + "invalid-image-type": "Невірний тип зображення. Дозволені типи: %1", + "invalid-image-extension": "Невірне розширення зображення", + "invalid-file-type": "Невірний тип файлу. Дозволені типи: %1", + "group-name-too-short": "Ім'я групи занадто коротке", + "group-name-too-long": "Ім'я групи занадто довге", + "group-already-exists": "Група вже існує", + "group-name-change-not-allowed": "Перейменування групи не дозволено", + "group-already-member": "Вже є учасником цієї групи", + "group-not-member": "Не є учасником цієї групи", + "group-needs-owner": "Ця група потребує щонайменше одного власника", + "group-already-invited": "Користувача вже було запрошено", + "group-already-requested": "Ваша заявка на вступ вже подана", + "post-already-deleted": "Цей пост вже видалено", + "post-already-restored": "Цей пост вже відновлено", + "topic-already-deleted": "Ця тема вже була видалена", + "topic-already-restored": "Ця тема вже була відновлена", + "cant-purge-main-post": "Ви не можете видалити головний пост, натомість видаліть тему.", + "topic-thumbnails-are-disabled": "Мініатюри теми вимкнено.", + "invalid-file": "Невірний файл", + "uploads-are-disabled": "Завантаження вимкнено", + "signature-too-long": "Вибачте, але ваш підпис не може бути довшим за %1 символ(и).", + "about-me-too-long": "Вибачте, але \"Про мене\" не може бути довшим за %1 символ(и).", + "cant-chat-with-yourself": "Ви не можете писати самому собі!", + "chat-restricted": "Цей користувач обмежив повідомлення. Він має стежити за вами, перш ніж ви зможете спілкуватися з ним", + "chat-disabled": "Чат вимкнено", + "too-many-messages": "Ви надіслали забагато повідомлень, зачекайте трішки.", + "invalid-chat-message": "Невірне повідомлення чату", + "chat-message-too-long": "Повідомлення чату задовге", + "cant-edit-chat-message": "Ви не можете редагувати повідомлення", + "cant-remove-last-user": "Ви не можете видалити останнього користувача", + "cant-delete-chat-message": "Ви не можете видалити це повідомлення", + "already-voting-for-this-post": "Ви вже проголосували за цей пост.", + "reputation-system-disabled": "Система репутацій вимкнена.", + "downvoting-disabled": "Голосування проти вимкнено", + "not-enough-reputation-to-downvote": "У вас недостатньо репутації, щоб голосувати проти цього посту", + "not-enough-reputation-to-flag": "У вас недостатньо репутації, щоб помітити цей пост", + "already-flagged": "Ви вже помітили цей пост", + "reload-failed": "У NodeBB виникла проблема при перевантаженні: \"%1\". NodeBB продовжить надавати існуючі клієнтські ресурси, проте радимо вам відмінити те, що було зроблено до перевантаження.", + "registration-error": "Помилка реєстрації", + "parse-error": "Щось пішло не так при розборі відповіді сервера", + "wrong-login-type-email": "Будь ласка, використайте вашу електронну пошту для входу", + "wrong-login-type-username": "Будь ласка, використайте ваше ім'я для входу", + "invite-maximum-met": "Ви запросили максимальну кілкість людей (%1 з %2).", + "no-session-found": "Жодної сесії не знайдено!", + "not-in-room": "Користувача немає в кімнаті", + "no-users-in-room": "Жодного користувача в кімнаті", + "cant-kick-self": "Ви не можете вигнати самі себе з групи", + "no-users-selected": "Не вибрано жодного користувача", + "invalid-home-page-route": "Невірний шлях на головну", + "invalid-session": "Сесія не існує", + "invalid-session-text": "Здається, що ваша сесія більше неактивна або розійшлася з серверною. Оновіть, будь ласка, цю сторінку." +} \ No newline at end of file diff --git a/public/language/uk/global.json b/public/language/uk/global.json new file mode 100644 index 0000000000..6fab3e2484 --- /dev/null +++ b/public/language/uk/global.json @@ -0,0 +1,107 @@ +{ + "home": "Додому", + "search": "Пошук", + "buttons.close": "Закрити", + "403.title": "Доступ заборонено", + "403.message": "Здається ви натрапили на сторінку до якої не маєте доступу.", + "403.login": "Можливо вам потрібно увійти?", + "404.title": "Не знайдено", + "404.message": "Здається ви натрапили на сторінку якої не існує. Поверніться на початкову сторінку.", + "500.title": "Внутрішня помилка.", + "500.message": "Ой! Здається щось пішло не так!", + "400.title": "Помилковий запит.", + "400.message": "Схоже, що посилання сформовано невірно, перевірте його і спробуйте ще раз. Інакше, поверніться на початкову сторінку.", + "register": "Реєстрація", + "login": "Логін", + "please_log_in": "Увійдіть, будь-ласка", + "logout": "Вийти", + "posting_restriction_info": "Наразі постити можуть лише зареєстровані користувачі, натисніть тут щоб увійти.", + "welcome_back": "З повернення", + "you_have_successfully_logged_in": "Ви успішно увійшли", + "save_changes": "Зберегти зміни", + "save": "Зберегти", + "close": "Закрити", + "pagination": "Розбиття на сторінки", + "pagination.out_of": "%1 із %2", + "pagination.enter_index": "Уведіть номер", + "header.admin": "Адмін", + "header.categories": "Категорії", + "header.recent": "Недавні", + "header.unread": "Непрочитані", + "header.tags": "Теги", + "header.popular": "Популярні", + "header.users": "Користувачі", + "header.groups": "Групи", + "header.chats": "Чати", + "header.notifications": "Сповіщення", + "header.search": "Пошук", + "header.profile": "Профіль", + "header.navigation": "Навігація", + "notifications.loading": "Завантаження сповіщень", + "chats.loading": "Завантаження чатів", + "motd.welcome": "Вітаємо у NodeBB, надсучасній платформі для обговорень.", + "previouspage": "Попередня сторінка", + "nextpage": "Наступна сторінка", + "alert.success": "Успіх", + "alert.error": "Помилка", + "alert.banned": "Забанений", + "alert.banned.message": "Вас щойно забанили і наразі ви будете розлогінені.", + "alert.unfollow": "Ви більше не стежите за %1!", + "alert.follow": "Ви тепер стежите за %1!", + "online": "Онлайн", + "users": "Користувачі", + "topics": "Теми", + "posts": "Пости", + "best": "Найкращі", + "upvoters": "За", + "upvoted": "За", + "downvoters": "Проти", + "downvoted": "Проти", + "views": "Перегляди", + "reputation": "Репутація", + "read_more": "читати далі", + "more": "Більше", + "posted_ago_by_guest": "запостив Гість %1", + "posted_ago_by": "запостив %2 %1", + "posted_ago": "запощено %1", + "posted_in": "запощено в %1", + "posted_in_by": "запостив %2 в %1 ", + "posted_in_ago": "запощено в %1 %2", + "posted_in_ago_by": "запостив %3 в %1 %2 ", + "user_posted_ago": "%1 запостив %2", + "guest_posted_ago": "Гість запостив %1", + "last_edited_by": "востаннє редагувалося %1", + "norecentposts": "Немає свіжих постів", + "norecenttopics": "Немає свіжих тем", + "recentposts": "Нещодавні пости", + "recentips": "Нещодавно увійшовші IP-адреси", + "moderator_tools": "Інструменти модератора", + "away": "Відсутній", + "dnd": "Не турбувати", + "invisible": "Невидимий", + "offline": "Не в мережі", + "email": "Email", + "language": "Мова", + "guest": "Гість", + "guests": "Гості", + "updated.title": "Форум оновлено", + "updated.message": "Форум було щойно оновлено до останньої версії. Клікніть тут, щоб оновити сторінку.", + "privacy": "Приватність", + "follow": "Стежити", + "unfollow": "Не стежити", + "delete_all": "Видалити все", + "map": "Мапа", + "sessions": "Сесії", + "ip_address": "IP Адреса", + "enter_page_number": "Уведіть номер сторінки", + "upload_file": "Завантажити файл", + "upload": "Завантажити", + "allowed-file-types": "Дозволені типи файлів %1", + "unsaved-changes": "У вас є незбережені зміни. Ви точно хочете піти звідси?", + "reconnecting-message": "Схоже, що з'єднання з %1 було втрачено, зачекайте поки ми спробуємо приєднатися знов.", + "play": "Грати", + "cookies.message": "Цей сайт використовує куки, щоб ви отримали найкращий досвід при роботі з сайтом.", + "cookies.accept": "Зрозуміло!", + "cookies.learn_more": "Дізнатися більше", + "edited": "Відредаговано" +} \ No newline at end of file diff --git a/public/language/uk/groups.json b/public/language/uk/groups.json new file mode 100644 index 0000000000..e7f6b48aa5 --- /dev/null +++ b/public/language/uk/groups.json @@ -0,0 +1,57 @@ +{ + "groups": "Групи", + "view_group": "Переглянути групу", + "owner": "Власник групи", + "new_group": "Створити нову групу", + "no_groups_found": "Тут немає груп", + "pending.accept": "Прийняти", + "pending.reject": "Відхилити", + "pending.accept_all": "Прийняти всі", + "pending.reject_all": "Відхилити всі", + "pending.none": "На даний момент жоден учасник не чекає розгляду", + "invited.none": "На даний момент немає запрошених учасників", + "invited.uninvite": "Анулювати запрошення", + "invited.search": "Пошук користувача для запрошення у групу", + "invited.notification_title": "Вас запросили проєднатися до %1", + "request.notification_title": "Запит на членство у групі від %1", + "request.notification_text": "%1 було запрошено стати учасником групи %2", + "cover-save": "Зберегти", + "cover-saving": "Збереження", + "details.title": "Деталі групи", + "details.members": "Список учасників", + "details.pending": "Учасники, що очікують", + "details.invited": "Запрошені учасники", + "details.has_no_posts": "Учасники групи не написали жодного посту.", + "details.latest_posts": "Останні пости", + "details.private": "Приватна", + "details.disableJoinRequests": "Вимкнути запити на приєднання", + "details.grant": "Надати/забрати права адміністратора", + "details.kick": "Вигнати", + "details.owner_options": "Адміністрація групи", + "details.group_name": "Назва групи", + "details.member_count": "Кількість учасників", + "details.creation_date": "Дата створення", + "details.description": "Опис", + "details.badge_preview": "Попередній перегляд бейджа", + "details.change_icon": "Змінити іконку", + "details.change_colour": "Змінити колір", + "details.badge_text": "Текст бейджа", + "details.userTitleEnabled": "Показати бейдж", + "details.private_help": "Якщо увімкнено, приєднання до групи вимагає підтвердження власника.", + "details.hidden": "Прихована", + "details.hidden_help": "Якщо увімкнено, групу не буде видно в загальному списку і запрошення користувачів потрібно буде здійснювати вручну.", + "details.delete_group": "Видалити групу", + "details.private_system_help": "Приватні групи вимкнено на системному рівні, ця опція нічого не робить.", + "event.updated": "Деталі групи оновлено", + "event.deleted": "Група \"%1\" видалена", + "membership.accept-invitation": "Прийняти запрошення", + "membership.invitation-pending": "Запрошення в черзі", + "membership.join-group": "Приєднатися до групи", + "membership.leave-group": "Покинути групу", + "membership.reject": "Відхилити", + "new-group.group_name": "Назва групи:", + "upload-group-cover": "Завантажити обкладинку групи", + "bulk-invite-instructions": "Уведіть список імен користувачів (розділених комами), котрих ви бажаєте запросити до групи", + "bulk-invite": "Масове запрошення", + "remove_group_cover_confirm": "Ви впевнені, що бажаєте видалити обкладинку?" +} \ No newline at end of file diff --git a/public/language/uk/language.json b/public/language/uk/language.json new file mode 100644 index 0000000000..5eda753089 --- /dev/null +++ b/public/language/uk/language.json @@ -0,0 +1,5 @@ +{ + "name": "Українська (Україна)", + "code": "uk", + "dir": "ltr" +} \ No newline at end of file diff --git a/public/language/uk/login.json b/public/language/uk/login.json new file mode 100644 index 0000000000..a1114c54c5 --- /dev/null +++ b/public/language/uk/login.json @@ -0,0 +1,12 @@ +{ + "username-email": "Ім'я / Пошта", + "username": "Ім'я користувача", + "email": "Пошта", + "remember_me": "Запам'ятати мене?", + "forgot_password": "Забули пароль?", + "alternative_logins": "Альтернативний вхід", + "failed_login_attempt": "Вхід невдався", + "login_successful": "Ви успішно зайшли!", + "dont_have_account": "Не маєте акаунту?", + "logged-out-due-to-inactivity": "Ви були розлогінені з Адмінської Панелі Керування через неактивність" +} \ No newline at end of file diff --git a/public/language/uk/modules.json b/public/language/uk/modules.json new file mode 100644 index 0000000000..f005377372 --- /dev/null +++ b/public/language/uk/modules.json @@ -0,0 +1,48 @@ +{ + "chat.chatting_with": "Чат з ", + "chat.placeholder": "Надрукуйте повідомлення і натисніть Enter для відправки", + "chat.send": "Надіслати", + "chat.no_active": "У вас немає активних чатів.", + "chat.user_typing": "%1 друкує...", + "chat.user_has_messaged_you": "%1 написав вам.", + "chat.see_all": "Показати всі чати", + "chat.mark_all_read": "Відмітити всі чати прочитаними", + "chat.no-messages": "Будь ласка, оберіть отримувача, щоб переглянути історію повідомлень", + "chat.no-users-in-room": "У цій кімнаті пусто", + "chat.recent-chats": "Нещодавні чати", + "chat.contacts": "Контакти", + "chat.message-history": "Історія повідомлень", + "chat.pop-out": "Залишити розмову", + "chat.minimize": "Згорнути", + "chat.maximize": "Розгорнути", + "chat.seven_days": "7 днів", + "chat.thirty_days": "30 днів", + "chat.three_months": "3 місяці", + "chat.delete_message_confirm": "Ви впевнені, що хочете видалити це повідомлення?", + "chat.add-users-to-room": "Додати користувачів до кімнати", + "composer.compose": "Редактор повідомлень", + "composer.show_preview": "Показати попередній перегляд", + "composer.hide_preview": "Сховати попередній перегляд", + "composer.user_said_in": "%1 написав в %2:", + "composer.user_said": "%1 написав:", + "composer.discard": "Ви впевнені, що хочете скасувати цей пост?", + "composer.submit_and_lock": "Надіслати і заблокувати", + "composer.toggle_dropdown": "Показати випадаючий список", + "composer.uploading": "Завантаження %1", + "composer.formatting.bold": "Жирний", + "composer.formatting.italic": "Курсив", + "composer.formatting.list": "Список", + "composer.formatting.strikethrough": "Закреслений", + "composer.formatting.link": "Посилання", + "composer.formatting.picture": "Зображення", + "composer.upload-picture": "Завантажити зображення", + "composer.upload-file": "Завантажити файл", + "composer.zen_mode": "Режим Дзен", + "composer.select_category": "Обрати категорію", + "bootbox.ok": "ОК", + "bootbox.cancel": "Відмінити", + "bootbox.confirm": "Підтвердити", + "cover.dragging_title": "Розташування обкладинки", + "cover.dragging_message": "Перетягніть обкладинку на бажане місце на натисніть \"Зберегти\"", + "cover.saved": "Зображення обкладинки та її позиція збережені" +} \ No newline at end of file diff --git a/public/language/uk/notifications.json b/public/language/uk/notifications.json new file mode 100644 index 0000000000..e716f9932d --- /dev/null +++ b/public/language/uk/notifications.json @@ -0,0 +1,38 @@ +{ + "title": "Сповіщення", + "no_notifs": "У вас немає нових сповіщень", + "see_all": "Переглянути всі сповіщення", + "mark_all_read": "Помітити всі сповіщення прочитаними", + "back_to_home": "Повернутись до %1", + "outgoing_link": "Зовнішнє посилання", + "outgoing_link_message": "Ви залишаєте %1", + "continue_to": "Перейти до %1", + "return_to": "Повернутись до %1", + "new_notification": "Нове сповіщення", + "you_have_unread_notifications": "У вас немає непрочитаних сповіщень", + "new_message_from": "Нове повідомлення від %1", + "upvoted_your_post_in": "%1 проголосував за ваш пост в %2.", + "upvoted_your_post_in_dual": "%1 та %2 проголосували за ваш пост в %3.", + "upvoted_your_post_in_multiple": "%1 та %2 інших проголосували за ваш пост в %3.", + "moved_your_post": "%1 перемістив ваш пост до %2", + "moved_your_topic": "%1 перемістив %2", + "user_flagged_post_in": "%1 поскаржився на пост в %2", + "user_flagged_post_in_dual": "%1 та %2 поскаржились на пост в %3", + "user_flagged_post_in_multiple": "%1 та %2 інших поскаржились на пост в %3", + "user_flagged_user": "%1 поскаржився на профіль користувача (%2)", + "user_flagged_user_dual": "%1 та %2 поскаржились на профіль користувача (%3)", + "user_flagged_user_multiple": "%1 та %2 інших поскаржились на профіль користувача (%3)", + "user_posted_to": "%1 запостив відповідь на: %2", + "user_posted_to_dual": "%1 та %2 запостили відповіді до: %3", + "user_posted_to_multiple": "%1 та %2 інших запостили відповіді до: %3", + "user_posted_topic": "%1 запостив нову тему: %2", + "user_started_following_you": "%1 почав стежити за вами.", + "user_started_following_you_dual": "%1 та %2 почали стежити за вами.", + "user_started_following_you_multiple": "%1 та %2 інших почали стежити за вами.", + "new_register": "%1 надіслав запит на реєстрацію.", + "new_register_multiple": "%1 запити на реєстрацію очікують розгляду.", + "email-confirmed": "Електронну пошту підтверджено", + "email-confirmed-message": "Дякуємо за підтвердження електронної пошти. Ваш акаунт тепер повністю активовано.", + "email-confirm-error-message": "При перевірці вашої електронної пошти сталася проблема. Можливо код був недійсним або простроченим.", + "email-confirm-sent": "Підтвердження по електронній пошті було надіслано." +} \ No newline at end of file diff --git a/public/language/uk/pages.json b/public/language/uk/pages.json new file mode 100644 index 0000000000..5d72bdc64c --- /dev/null +++ b/public/language/uk/pages.json @@ -0,0 +1,52 @@ +{ + "home": "Головна", + "unread": "Непрочитані теми", + "popular-day": "Популярні теми сьогодні", + "popular-week": "Популярні теми цього тижня", + "popular-month": "Популярні теми цього місяця", + "popular-alltime": "Популярні теми за весь час", + "recent": "Свіжі теми", + "flagged-content": "Оскаржений вміст", + "ip-blacklist": "Чорний список IP адрес", + "users/online": "Користувачі в мережі", + "users/latest": "Останні користувачі", + "users/sort-posts": "Користувачі з найбільшою кількістю постів", + "users/sort-reputation": "Користувачі з найкращою репутацією", + "users/banned": "Забанені користувачі", + "users/most-flags": "Користувачі з найбільшою кількістю скарг", + "users/search": "Пошук користувача", + "notifications": "Сповіщення", + "tags": "Теги", + "tag": "Теми з тегом \"%1\"", + "register": "Зареєструвати акаунт", + "registration-complete": "Реєстрацію завершено", + "login": "Увійдіть в свій акаунт", + "reset": "Скинути пароль вашого акаунту", + "categories": "Категорії", + "groups": "Групи", + "group": "Група %1", + "chats": "Чати", + "chat": "Чат з %1", + "flags": "Скарги", + "flag-details": "Деталі по скарзі %1", + "account/edit": "Редагування \"%1\"", + "account/edit/password": "Редагування паролю для \"%1\"", + "account/edit/username": "Редагування імені для \"%1\"", + "account/edit/email": "Редагування електронної пошти для \"%1\"", + "account/info": "Інформація акаунту", + "account/following": "Люди за котрими стежить %1", + "account/followers": "Люди котрі стежать за %1", + "account/posts": "Пости написані %1", + "account/topics": "Теми створені %1", + "account/groups": "Групи %1", + "account/bookmarks": "Закладки %1", + "account/settings": "Налаштування користувача", + "account/watched": "Теми за якими стежить %1", + "account/upvoted": "Пости за які проголосував %1", + "account/downvoted": "Пости проти яких проголосував %1", + "account/best": "Найкращі пости %1", + "confirm": "Електронну пошту підтверджено", + "maintenance.text": "%1 в данний час на технічному обслуговувані. Завітайте, будь ласка, пізніше.", + "maintenance.messageIntro": "Крім того, адміністратор залишив це повідомлення:", + "throttled.text": "%1 в даний час недоступний через надмірне навантаження. Завітайте, будь ласка, пізніше." +} \ No newline at end of file diff --git a/public/language/uk/recent.json b/public/language/uk/recent.json new file mode 100644 index 0000000000..95603beef3 --- /dev/null +++ b/public/language/uk/recent.json @@ -0,0 +1,19 @@ +{ + "title": "Свіжі", + "day": "День", + "week": "Тиждень", + "month": "Місяць", + "year": "Рік", + "alltime": "Весь час", + "no_recent_topics": "Немає свіжих тем.", + "no_popular_topics": "Немає популярних тем.", + "there-is-a-new-topic": "Є нова тема.", + "there-is-a-new-topic-and-a-new-post": "Є нова тема та нова публікація.", + "there-is-a-new-topic-and-new-posts": "Є нова тема та %1 нових публікацій.", + "there-are-new-topics": "Є %1 нових тем.", + "there-are-new-topics-and-a-new-post": "Є %1 нових тем на нова публікація.", + "there-are-new-topics-and-new-posts": "Є %1 нових тем та %2 нові публікації.", + "there-is-a-new-post": "Є нова публікація.", + "there-are-new-posts": "Є %1 нових публікацій.", + "click-here-to-reload": "Натисніть тут, щоб перевантажити." +} \ No newline at end of file diff --git a/public/language/uk/register.json b/public/language/uk/register.json new file mode 100644 index 0000000000..b4a84ff20f --- /dev/null +++ b/public/language/uk/register.json @@ -0,0 +1,23 @@ +{ + "register": "Реєстрація", + "cancel_registration": "Відмінити реєстрацію", + "help.email": "За замовчуванням, ваша email-адреса буде прихована від інших. ", + "help.username_restrictions": "Унікальне ім'я довжиною від %1 до %2 символів. Інші можуть вас згадувати за допомогою @ім'я.", + "help.minimum_password_length": "Довжина паролю має бути щонайменше %1 символів.", + "email_address": "Електронна адреса", + "email_address_placeholder": "Уведіть електронну адресу", + "username": "Ім'я користувача", + "username_placeholder": "Уведіть ім'я", + "password": "Пароль", + "password_placeholder": "Уведіть пароль", + "confirm_password": "Підтвердіть пароль", + "confirm_password_placeholder": "Підтвердження пароля", + "register_now_button": "Зареєструватися зараз", + "alternative_registration": "Альтернативна реєстрація", + "terms_of_use": "Умови користування", + "agree_to_terms_of_use": "Я погоджуюсь з Умовами користування", + "terms_of_use_error": "Ви маєте погодитись з Умовами користування", + "registration-added-to-queue": "Ваша реєстрація була додана в чергу затвердження. Ви отримаєте листа на електронну пошту, коли адміністратор її підтвердить.", + "interstitial.intro": "Нам потрібна додаткова інформація, перш ніж ми створимо ваш обліковий запис.", + "interstitial.errors-found": "Нам не вдалося вас зареєструвати:" +} \ No newline at end of file diff --git a/public/language/uk/reset_password.json b/public/language/uk/reset_password.json new file mode 100644 index 0000000000..f3bbe1b550 --- /dev/null +++ b/public/language/uk/reset_password.json @@ -0,0 +1,17 @@ +{ + "reset_password": "Скинути пароль", + "update_password": "Змінити пароль", + "password_changed.title": "Пароль змінено", + "password_changed.message": "

Пароль успішно скинуто, будь ласка, увійдіть знову.", + "wrong_reset_code.title": "Невірний код скидання", + "wrong_reset_code.message": "Отриманий код скидання невірний. Спробуйте, будь ласка, ще раз або запросіть новий код.", + "new_password": "Новий пароль", + "repeat_password": "Підтвердіть пароль", + "enter_email": "Будь ласка, введіть свою електронну пошту і ми надішлемо вам листа с інструкцією як скинути ваш обліковий запис.", + "enter_email_address": "Введіть електронну пошту", + "password_reset_sent": "Скидання паролю надіслано", + "invalid_email": "Невірна або неіснуюча електронна пошта!", + "password_too_short": "Уведений пароль закороткий, оберіть, будь ласка, інший.", + "passwords_do_not_match": "Паролі що ви ввели не співпадають.", + "password_expired": "Ваш пароль закінчився, будь ласка, виберіть новий пароль." +} \ No newline at end of file diff --git a/public/language/uk/search.json b/public/language/uk/search.json new file mode 100644 index 0000000000..7d7f6c65d5 --- /dev/null +++ b/public/language/uk/search.json @@ -0,0 +1,42 @@ +{ + "results_matching": "%1 збіг(ів) по запиту \"%2\" (%3 секунд)", + "no-matches": "Збіги не знайдено", + "advanced-search": "Розширений пошук", + "in": "В", + "titles": "Заголовки", + "titles-posts": "Заголовки та Пости", + "posted-by": "Запощено", + "in-categories": "В Категоріях", + "search-child-categories": "Шукати в дочірніх категоріях", + "has-tags": "Містить теги", + "reply-count": "Лічильник Відповідей", + "at-least": "Щонайменше", + "at-most": "Щонайбільше", + "relevance": "Релевантність", + "post-time": "Час посту", + "newer-than": "Новіші за", + "older-than": "Старіші за", + "any-date": "Будь-яка дата", + "yesterday": "Вчора", + "one-week": "Один тиждень", + "two-weeks": "Два тижні", + "one-month": "Один місяць", + "three-months": "Три місяці", + "six-months": "Шість місяців", + "one-year": "Один рік", + "sort-by": "Сортувати за", + "last-reply-time": "Час останньої відповіді", + "topic-title": "Заголовок теми", + "number-of-replies": "Кількість відповідей", + "number-of-views": "Кількість переглядів", + "topic-start-date": "Час початку теми", + "username": "Ім'я користувача", + "category": "Категорія", + "descending": "У порядку спадання", + "ascending": "У порядку зростання", + "save-preferences": "Зберегти налаштування", + "clear-preferences": "Очистити налаштування", + "search-preferences-saved": "Налаштування пошуку збережено", + "search-preferences-cleared": "Налаштування пошуку очищені", + "show-results-as": "Показати результати як" +} \ No newline at end of file diff --git a/public/language/uk/success.json b/public/language/uk/success.json new file mode 100644 index 0000000000..f250023ca4 --- /dev/null +++ b/public/language/uk/success.json @@ -0,0 +1,6 @@ +{ + "success": "Успіх", + "topic-post": "Публікацію успішно створено.", + "authentication-successful": "Аутентифікація успішна", + "settings-saved": "Налаштування збережені!" +} \ No newline at end of file diff --git a/public/language/uk/tags.json b/public/language/uk/tags.json new file mode 100644 index 0000000000..85041f32ff --- /dev/null +++ b/public/language/uk/tags.json @@ -0,0 +1,7 @@ +{ + "no_tag_topics": "Немає теми з цим тегом.", + "tags": "Теги", + "enter_tags_here": "Введіть тег сюди, між літерами %1 та %2 кожен", + "enter_tags_here_short": "Введіть тег", + "no_tags": "Ще немає тегів" +} \ No newline at end of file diff --git a/public/language/uk/topic.json b/public/language/uk/topic.json new file mode 100644 index 0000000000..111efb25d9 --- /dev/null +++ b/public/language/uk/topic.json @@ -0,0 +1,119 @@ +{ + "topic": "Тема", + "topic_id": "ID теми", + "topic_id_placeholder": "Уведіть ID теми", + "no_topics_found": "Тем не знайдено!", + "no_posts_found": "Постів не знайдено!", + "post_is_deleted": "Цей пост був видалений!", + "topic_is_deleted": "Ця тема була видалена!", + "profile": "Профіль", + "posted_by": "Запощено %1", + "posted_by_guest": "Запощено гостем", + "chat": "Чат", + "notify_me": "Отримувати сповіщення про нові відповіді в цій темі", + "quote": "Цитувати", + "reply": "Відповісти", + "replies_to_this_post": "%1 відповідей", + "last_reply_time": "Остання відповідь", + "reply-as-topic": "Відповісти темою", + "guest-login-reply": "Увійти для відповіді", + "edit": "Редагувати", + "delete": "Видалити", + "purge": "Стерти", + "restore": "Відновити", + "move": "Перемістити", + "fork": "Відгалужити", + "link": "Зв'язати", + "share": "Поширити", + "tools": "Інструменти", + "locked": "Заблокована", + "pinned": "Закріплена", + "moved": "Переміщена", + "bookmark_instructions": "Натисніть тут, щоб повернутися до останнього прочитаного посту у цій темі.", + "flag_title": "Поскаржитись цей пост модератору", + "deleted_message": "Цю тему було видалено. Лише користувачі з правом керування темами можуть її бачити.", + "following_topic.message": "Відтепер ви будете отримувати сповіщення коли хтось постить в цю тему.", + "not_following_topic.message": "Ви будете бачити цю тему в списку непрочитаних, але ви не будете отримувати сповіщень, коли хтось постить до неї.", + "ignoring_topic.message": "Ви більше не будете бачити цю тему в списку непрочитаних. Вас буде сповіщено коли хтось вас згадає або за ваш пост буде проголосовано.", + "login_to_subscribe": "Будь ласка, зареєструйтесь або увійдіть щоб підписатися на цю тему.", + "markAsUnreadForAll.success": "Тема відмічена для всіх як непрочитана.", + "mark_unread": "Помітити непрочитаною", + "mark_unread.success": "Тема помічена непрочитаною", + "watch": "Стежити", + "unwatch": "Не стежити", + "watch.title": "Отримуйте сповіщення про відповіді в цій темі", + "unwatch.title": "Перестати стежити за цією темою", + "share_this_post": "Поширити цей пост", + "watching": "Відстежується", + "not-watching": "Не відстежується", + "ignoring": "Ігнорується", + "watching.description": "Сповіщати мене про нові відповіді.
Показувати тему в непрочитаних.", + "not-watching.description": "Не сповіщати мене про нові відповіді.
Показувати тему в непрочитаних якщо категорія не ігнорується.", + "ignoring.description": "Не сповіщати мене про нові відповіді.
Не показувати тему в непрочитаних.", + "thread_tools.title": "Інструменти теми", + "thread_tools.markAsUnreadForAll": "Відмітити всі непрочитаними", + "thread_tools.pin": "Прикріпити тему", + "thread_tools.unpin": "Відкріпити тему", + "thread_tools.lock": "Заблокувати тему", + "thread_tools.unlock": "Розблокувати тему", + "thread_tools.move": "Перемістити тему", + "thread_tools.move_all": "Перемістити всі", + "thread_tools.fork": "Відгалужити тему", + "thread_tools.delete": "Видалити тему", + "thread_tools.delete-posts": "Видалити пости", + "thread_tools.delete_confirm": "Ви точно бажаєте видалити цю тему?", + "thread_tools.restore": "Відновити тему", + "thread_tools.restore_confirm": "Ви точно бажаєте відновити цю тему?", + "thread_tools.purge": "Стерти тему", + "thread_tools.purge_confirm": "Ви точно бажаєте стерти цю тему?", + "topic_move_success": "Тема була успішно переміщена до %1", + "post_delete_confirm": "Ви точно бажаєте видалити цей пост?", + "post_restore_confirm": "Ви точно бажаєте відновити цей пост?", + "post_purge_confirm": "Ви точно бажаєте стерти цей пост?", + "load_categories": "Завантаження категорій", + "disabled_categories_note": "Вимкнені категорії фарбуються в сірий", + "confirm_move": "Перемістити", + "confirm_fork": "Відгалужити", + "bookmark": "Закладка", + "bookmarks": "Закладки", + "bookmarks.has_no_bookmarks": "Ви ще не додали в закладки жодного поста.", + "loading_more_posts": "Завантажуємо більше постів", + "move_topic": "Перемістити тему", + "move_topics": "Перемістити теми", + "move_post": "Перемістити пост", + "post_moved": "Пост переміщено!", + "fork_topic": "Відгалужити тему", + "topic_will_be_moved_to": "Цю тему буде переміщено в категорію", + "fork_topic_instruction": "Тисніть пости які ви бажаєте відгалужити", + "fork_no_pids": "Не вибрано жодного поста!", + "fork_pid_count": "вибрано %1 пост(ів) ", + "fork_success": "Тему успішно відгалужено. Тисніть тут, щоб перейти до відгалуженої теми.", + "delete_posts_instruction": "Тисніть пости які ви бажаєте видалити/стерти", + "composer.title_placeholder": "Уведіть заголовок теми...", + "composer.handle_placeholder": "Ім'я", + "composer.discard": "Відмінити", + "composer.submit": "Надіслати", + "composer.replying_to": "Відповідь для %1", + "composer.new_topic": "Cтворити тему", + "composer.uploading": "завантаження...", + "composer.thumb_url_label": "Вставте URL мініатюри теми", + "composer.thumb_title": "Додати мініатюру цій темі", + "composer.thumb_url_placeholder": "http://example.com/thumb.png", + "composer.thumb_file_label": "Або завантажте файл", + "composer.thumb_remove": "Очистити поля", + "composer.drag_and_drop_images": "Перетягніть сюди зображення", + "more_users_and_guests": "ще %1 користувач(і) та %2 гостей", + "more_users": "ще %1 користувач(і)", + "more_guests": "ще %1 гостей", + "users_and_others": "%1 та %2 інших", + "sort_by": "Сортувати за", + "oldest_to_newest": "Старі > Нові", + "newest_to_oldest": "Нові > Старі", + "most_votes": "Кількість голосів", + "most_posts": "Кількість постів", + "stale.title": "Створити натомість нову тему?", + "stale.warning": "Тема на котру ви відповідаєте досить стара. Не бажаєте натомість створити новую тему і зіслатися на цю у вашій відповіді?", + "stale.create": "Так, створити нову тему", + "stale.reply_anyway": "Ні, відповісти все ж на існуючу", + "link_back": "Re: [%1](%2)" +} \ No newline at end of file diff --git a/public/language/uk/unread.json b/public/language/uk/unread.json new file mode 100644 index 0000000000..753fb83cca --- /dev/null +++ b/public/language/uk/unread.json @@ -0,0 +1,13 @@ +{ + "title": "Непрочитані", + "no_unread_topics": "Не залишилось непрочитаних тем.", + "load_more": "Завантажити більше", + "mark_as_read": "Помітити як прочитане", + "selected": "Вибрано", + "all": "Всі", + "all_categories": "Всі категорії", + "topics_marked_as_read.success": "Теми відмічені прочитаними!", + "all-topics": "Всі теми", + "new-topics": "Нові теми", + "watched-topics": "Переглянуті теми" +} \ No newline at end of file diff --git a/public/language/uk/uploads.json b/public/language/uk/uploads.json new file mode 100644 index 0000000000..9e5b5b75d5 --- /dev/null +++ b/public/language/uk/uploads.json @@ -0,0 +1,6 @@ +{ + "uploading-file": "Завантаження файлу...", + "select-file-to-upload": "Оберіть файл для завантаження!", + "upload-success": "Файл успішно завантажено!", + "maximum-file-size": "Максимально %1 кб" +} \ No newline at end of file diff --git a/public/language/uk/user.json b/public/language/uk/user.json new file mode 100644 index 0000000000..8b768580a7 --- /dev/null +++ b/public/language/uk/user.json @@ -0,0 +1,134 @@ +{ + "banned": "Заборонений", + "offline": "Не в мережі", + "username": "Ім'я користувача", + "joindate": "Дата вступу", + "postcount": "Кількість постів", + "email": "Електронна пошта", + "confirm_email": "Підтвердження пошти", + "account_info": "Акаунт", + "ban_account": "Заборонити акаунт", + "ban_account_confirm": "Ви точно хочете забанити цього користувача?", + "unban_account": "Розбанити акаунт", + "delete_account": "Видалити акаунт", + "delete_account_confirm": "Ви точно бажаєте видалити ваш акаунт?
Ця дія є незворотньою і ви не зможете відновити жодні з ваших даних.

Уведіть ваше ім'я користувача для підтвердження знищення цього акаунту.", + "delete_this_account_confirm": "Ви точно бажаєте видалити цей акаунт?
Ця дія є незворотньою і ви не зможете відновити жодні дані.

", + "account-deleted": "Акаунт видалено", + "fullname": "Повне ім'я", + "website": "Сайт", + "location": "Місце", + "age": "Вік", + "joined": "Приєднаний", + "lastonline": "Востаннє в мережі", + "profile": "Профіль", + "profile_views": "Переглядів профілю", + "reputation": "Репутація", + "bookmarks": "Закладки", + "watched": "Переглянуті", + "followers": "Відстежувачі", + "following": "Відстежувані", + "aboutme": "Про мене", + "signature": "Підпис", + "birthday": "День народження", + "chat": "Чат", + "chat_with": "Продовжити чат з %1", + "new_chat_with": "Почати новий чат з %1", + "flag-profile": "Поскаржитись на профіль", + "follow": "Стежити", + "unfollow": "Не стежити", + "more": "Більше", + "profile_update_success": "Профіль успішно оновлений!", + "change_picture": "Змінити зображення", + "change_username": "Змінити ім'я користувача", + "change_email": "Змінити електронну пошту", + "edit": "Редагувати", + "edit-profile": "Редагувати профіль", + "default_picture": "Стандартна іконка", + "uploaded_picture": "Завантажене зображення", + "upload_new_picture": "Завантажити нове зображення", + "upload_new_picture_from_url": "Завантажити нове зображення з URL", + "current_password": "Поточний пароль", + "change_password": "Змінити пароль", + "change_password_error": "Невірний пароль!", + "change_password_error_wrong_current": "Ваш поточний пароль не вірний!", + "change_password_error_length": "Пароль закороткий!", + "change_password_error_match": "Паролі мають співпадати!", + "change_password_error_privileges": "У вас немає прав змінювати цей пароль.", + "change_password_success": "Ваш пароль оновлено!", + "confirm_password": "Підтвердіть пароль", + "password": "Пароль", + "username_taken_workaround": "Ім'я користувача, що ви обрали, вже було зайняте, то ж ми його трішки змінили. Ви тепер відомі як %1", + "password_same_as_username": "Ваш пароль співпадає з іменем користувача. Оберіть інший пароль, будь ласка.", + "password_same_as_email": "Ваш пароль співпадає з електронною поштою. Оберіть інший пароль, будь ласка.", + "upload_picture": "Завантажити зображення", + "upload_a_picture": "Завантажити зображення", + "remove_uploaded_picture": "Видалити завантажене зображення", + "upload_cover_picture": "Завантажити обкладинку", + "remove_cover_picture_confirm": "Ви точно бажаєте видалити обкладинку?", + "crop_picture": "Обрізати зображення", + "upload_cropped_picture": "Обрізати та завантажити", + "settings": "Налаштування", + "show_email": "Показувати мою пошту", + "show_fullname": "Показувати повне ім'я", + "restrict_chats": "Дозволяти чат повідомлення лише від користувачів за якими я стежу", + "digest_label": "Підписатися на дайджест", + "digest_description": "Підписатися на оновлення цього форуму по електронній пошті (нові оповіщення та теми) згідно заданого розкладу", + "digest_off": "Ніколи", + "digest_daily": "Щоденно", + "digest_weekly": "Щотижнево", + "digest_monthly": "Щомісячно", + "send_chat_notifications": "Надсилати листа, коли я не в мережі, якщо приходить чат повідомлення", + "send_post_notifications": "Надсилати листа, коли в темах на які я підписаний з'являються відповіді", + "settings-require-reload": "Змінам певних налаштувань необхідне перевантаження. Натисніть тут, щоб перевантажити сторінку.", + "has_no_follower": "Цей користувач не має відстежувачів :(", + "follows_no_one": "Цей користувач нікого не відстежує :(", + "has_no_posts": "Цей користувач ще ніколи нічого не постив.", + "has_no_topics": "Цей користувач ще ніколи не створював нових тем.", + "has_no_watched_topics": "Цей користувач ще ніколи не переглядав жодної теми.", + "has_no_upvoted_posts": "Цей користувач ще не голосував за жоден з постів.", + "has_no_downvoted_posts": "Цей користувач ще не голосував проти жодного поста.", + "has_no_voted_posts": "У цього користувача немає постів за котрі хтось голосував", + "email_hidden": "Електронна адреса прихована", + "hidden": "прихований", + "paginate_description": "Розбивати список тем та постів на сторінки замість нескінченної прокрутки", + "topics_per_page": "Тем на сторінку", + "posts_per_page": "Постів на сторінку", + "notification_sounds": "Програвати звук, коли ви отримуєте сповіщення", + "notifications_and_sounds": "Сповіщення та звуки", + "incoming-message-sound": "Звук вхідного повідомлення", + "outgoing-message-sound": "Звук вихідного повідомлення", + "notification-sound": "Звук сповіщення", + "no-sound": "Без звуку", + "browsing": "Налаштування перегляду", + "open_links_in_new_tab": "Відкривати зовнішні посилання у новій вкладці", + "enable_topic_searching": "Увімкнути пошук у темах", + "topic_search_help": "Будучи увімкненою, ця функція перевизначає вбудований пошук браузера і дозволяє шукати по всій темі, а не лише по змісту, що показаний на екрані.", + "delay_image_loading": "Затримати завантаження зображень", + "image_load_delay_help": "Будучи увімкненою, ця функция відкладає завантаження зображень у темі до моменту коли вони потрапляють у поле зору", + "scroll_to_my_post": "Після відправки відповіді, показувати новий пост", + "follow_topics_you_reply_to": "Підписуватися на теми в котрих ви відповідаєте", + "follow_topics_you_create": "Підписуватися на теми які ви створюєте", + "grouptitle": "Заголовок групи", + "no-group-title": "Немає заголовка групи", + "select-skin": "Обрати стиль сайту", + "select-homepage": "Обрати домашню сторінку", + "homepage": "Домашня сторінка", + "homepage_description": "Вкажіть сторінку в якості першої сторінки форуму або \"None\", для використання сторінки за замовчуванням.", + "custom_route": "Шлях першої сторінки", + "custom_route_help": "Уведіть тут шлях, без слешу попереду (наприклад \"recent\" або \"popular\")", + "sso.title": "Сервіси єдиного входу", + "sso.associated": "Зв'язані з", + "sso.not-associated": "Натисніть тут, щоб зв'язати з", + "info.latest-flags": "Останні скарги", + "info.no-flags": "Не знайдено постів зі скаргами", + "info.ban-history": "Історія банів", + "info.no-ban-history": "Цього користувача ніколи не банили", + "info.banned-until": "Забанений до %1", + "info.banned-permanently": "Забанений назавжди", + "info.banned-reason-label": "Причина", + "info.banned-no-reason": "Причина не вказана", + "info.username-history": "Історія імені користувача", + "info.email-history": "Історія електронної пошти", + "info.moderation-note": "Коментар модератора", + "info.moderation-note.success": "Коментар модератора збережено" +} \ No newline at end of file diff --git a/public/language/uk/users.json b/public/language/uk/users.json new file mode 100644 index 0000000000..59a6e66d0f --- /dev/null +++ b/public/language/uk/users.json @@ -0,0 +1,21 @@ +{ + "latest_users": "Останні користувачі", + "top_posters": "Кращі автори", + "most_reputation": "Найбільша репутація", + "most_flags": "Найбільше скарг", + "search": "Пошук", + "enter_username": "Уведіть ім'я користувача для пошуку", + "load_more": "Завантажити більше", + "users-found-search-took": "%1 користувач(ів) знайдено! Пошук тривав %2 секунди.", + "filter-by": "Фільтрувати за", + "online-only": "Лише в мережі", + "invite": "Запросити", + "invitation-email-sent": "Лист із запрошенням відправлено %1", + "user_list": "Список користувачів", + "recent_topics": "Нещодавні теми", + "popular_topics": "Популярні теми", + "unread_topics": "Непрочитані теми", + "categories": "Категорії", + "tags": "Теги", + "no-users-found": "Жодного користувача не знайдено!" +} \ No newline at end of file diff --git a/public/language/zh-CN/admin/advanced/errors.json b/public/language/zh-CN/admin/advanced/errors.json index 66cb154017..257f88661c 100644 --- a/public/language/zh-CN/admin/advanced/errors.json +++ b/public/language/zh-CN/admin/advanced/errors.json @@ -8,7 +8,7 @@ "clear-error-log": "清空错误日志", "route": "路由", "count": "计数", - "no-routes-not-found": "Hooray! No 404 errors!", + "no-routes-not-found": "恭喜!没有404错误!", "clear404-confirm": "确认清除404错误日志?", "clear404-success": "“404 页面不存在” 错误已被清空" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/manage/categories.json b/public/language/zh-CN/admin/manage/categories.json index 4da113a71c..a881fce346 100644 --- a/public/language/zh-CN/admin/manage/categories.json +++ b/public/language/zh-CN/admin/manage/categories.json @@ -7,7 +7,7 @@ "bg-color": "背景颜色", "text-color": "文字颜色", "bg-image-size": "背景图片大小", - "custom-class": "自定义分类", + "custom-class": "自定义 Class", "num-recent-replies": "最近回复数", "ext-link": "外部链接", "upload-image": "上传图片", @@ -16,7 +16,7 @@ "parent-category": "父板块", "optional-parent-category": "(可选)父板块", "parent-category-none": "(无)", - "copy-settings": "复制设置窗体", + "copy-settings": "复制设置", "optional-clone-settings": "(可选) 从板块复制设置", "purge": "删除板块", diff --git a/public/language/zh-CN/admin/settings/general.json b/public/language/zh-CN/admin/settings/general.json index b3e7b036b0..6addbf4f38 100644 --- a/public/language/zh-CN/admin/settings/general.json +++ b/public/language/zh-CN/admin/settings/general.json @@ -27,5 +27,5 @@ "touch-icon.help": "推荐的尺寸和格式:192x192,仅限PNG格式。 如果没有指定触摸图标,NodeBB将回退到使用站点图标。", "outgoing-links": "站外链接", "outgoing-links.warning-page": "使用站外链接警告页", - "search-default-sort-by": "Search default sort by" + "search-default-sort-by": "默认搜索排序" } \ No newline at end of file diff --git a/public/language/zh-CN/search.json b/public/language/zh-CN/search.json index 19fbde48c6..4633e600ed 100644 --- a/public/language/zh-CN/search.json +++ b/public/language/zh-CN/search.json @@ -12,7 +12,7 @@ "reply-count": "回复数", "at-least": "至少", "at-most": "至多", - "relevance": "Relevance", + "relevance": "关联", "post-time": "发帖时间", "newer-than": "晚于", "older-than": "早于", diff --git a/public/language/zh-CN/topic.json b/public/language/zh-CN/topic.json index 7c67dbdd4a..5491cffe0d 100644 --- a/public/language/zh-CN/topic.json +++ b/public/language/zh-CN/topic.json @@ -13,8 +13,8 @@ "notify_me": "此主题有新回复时通知我", "quote": "引用", "reply": "回复", - "replies_to_this_post": "%1 Replies", - "last_reply_time": "Last reply", + "replies_to_this_post": "回复 %1", + "last_reply_time": "最后回复", "reply-as-topic": "在新帖中回复", "guest-login-reply": "登录后回复", "edit": "编辑", diff --git a/public/language/zh-CN/users.json b/public/language/zh-CN/users.json index d6795469f2..23a86966db 100644 --- a/public/language/zh-CN/users.json +++ b/public/language/zh-CN/users.json @@ -2,7 +2,7 @@ "latest_users": "最新会员", "top_posters": "发帖排行", "most_reputation": "声望排行", - "most_flags": "最多举报", + "most_flags": "被举报次数最多", "search": "搜索", "enter_username": "输入用户名搜索", "load_more": "加载更多", diff --git a/public/less/generics.less b/public/less/generics.less index 841b2daabf..ef4c7bd627 100644 --- a/public/less/generics.less +++ b/public/less/generics.less @@ -138,7 +138,7 @@ } #crop-picture-modal { - .cropped-image { + #cropped-image { max-width: 100%; } diff --git a/public/src/client/account/edit.js b/public/src/client/account/edit.js index 752499f34f..2856d10f99 100644 --- a/public/src/client/account/edit.js +++ b/public/src/client/account/edit.js @@ -252,6 +252,9 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator', imageData: imageData }, function (err, imageData) { if (err) { + cropperModal.find('#upload-progress-box').hide(); + cropperModal.find('.upload-btn').removeClass('disabled'); + cropperModal.find('.crop-btn').removeClass('disabled'); app.alertError(err.message); } @@ -259,6 +262,18 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator', cropperModal.modal('hide'); }); }); + + cropperModal.find('.upload-btn').on('click', function () { + $(this).addClass('disabled'); + cropperTool.destroy(); + + cropperTool = new cropper.default(img, { + viewMode: 1, + autoCropArea: 1 + }); + + cropperModal.find('.crop-btn').trigger('click'); + }); }); }); } diff --git a/src/meta/tags.js b/src/meta/tags.js index f7e349f353..0cd680a70a 100644 --- a/src/meta/tags.js +++ b/src/meta/tags.js @@ -28,18 +28,27 @@ module.exports = function (Meta) { }, { property: 'og:site_name', content: Meta.config.title || 'NodeBB' - }, { - name: 'keywords', - content: Meta.config.keywords || '' }, { name: 'msapplication-badge', content: 'frequency=30; polling-uri=' + nconf.get('url') + '/sitemap.xml', noEscape: true - }, { - name: 'msapplication-square150x150logo', - content: Meta.config['brand:logo'] || '', - noEscape: true }]; + + if (Meta.config.keywords) { + defaultTags.push({ + name: 'keywords', + content: Meta.config.keywords + }); + } + + if (Meta.config['brand:logo']) { + defaultTags.push({ + name: 'msapplication-square150x150logo', + content: Meta.config['brand:logo'], + noEscape: true + }); + } + plugins.fireHook('filter:meta.getMetaTags', defaultTags, next); }, links: function (next) { diff --git a/src/middleware/render.js b/src/middleware/render.js index 688b32c66f..ecd0ce8a5d 100644 --- a/src/middleware/render.js +++ b/src/middleware/render.js @@ -78,14 +78,17 @@ module.exports = function (middleware) { function (results, next) { var str = results.header + (res.locals.postHeader || '') + - results.content + + results.content + '' + (res.locals.preFooter || '') + results.footer; translate(str, req, res, next); }, function (translated, next) { - next(null, translated + ''); + translated = translated.replace('', function () { + return ''; + }); + next(null, translated); } ], fn); }; diff --git a/src/reset.js b/src/reset.js index 3baf145edf..d237059f8e 100644 --- a/src/reset.js +++ b/src/reset.js @@ -12,20 +12,32 @@ Reset.reset = function (callback) { db.init(function (err) { if (err) { winston.error(err.message); - process.exit(); + process.exit(1); } if (nconf.get('t')) { - if(nconf.get('t') === true) { + var themeId = nconf.get('t'); + if (themeId === true) { resetThemes(callback); } else { - resetTheme(nconf.get('t'), callback); + if (themeId.indexOf('nodebb-') !== 0) { + // Allow omission of `nodebb-theme-` + themeId = 'nodebb-theme-' + themeId; + } + + resetTheme(themeId, callback); } } else if (nconf.get('p')) { - if (nconf.get('p') === true) { + var pluginId = nconf.get('p'); + if (pluginId === true) { resetPlugins(callback); } else { - resetPlugin(nconf.get('p'), callback); + if (pluginId.indexOf('nodebb-') !== 0) { + // Allow omission of `nodebb-plugin-` + pluginId = 'nodebb-plugin-' + pluginId; + } + + resetPlugin(pluginId, callback); } } else if (nconf.get('w')) { resetWidgets(callback); @@ -39,11 +51,7 @@ Reset.reset = function (callback) { winston.error('[reset] Errors were encountered while resetting your forum settings: %s', err.message); } - if (typeof callback === 'function') { - callback(); - } else { - process.exit(0); - } + callback(); }); } else { process.stdout.write('\nNodeBB Reset\n'.bold); @@ -58,7 +66,7 @@ Reset.reset = function (callback) { process.stdout.write('\nPlugin and theme reset flags (-p & -t) can take a single argument\n'); process.stdout.write(' e.g. ./nodebb reset -p nodebb-plugin-mentions, ./nodebb reset -t nodebb-theme-persona\n'); - process.exit(); + process.exit(0); } }); }; @@ -67,11 +75,7 @@ function resetSettings(callback) { var meta = require('./meta'); meta.configs.set('allowLocalLogin', 1, function (err) { winston.info('[reset] Settings reset to default'); - if (typeof callback === 'function') { - callback(err); - } else { - process.exit(); - } + callback(err); }); } @@ -82,7 +86,7 @@ function resetTheme(themeId, callback) { fs.access('node_modules/' + themeId + '/package.json', function (err, fd) { if (err) { winston.warn('[reset] Theme `%s` is not installed on this forum', themeId); - process.exit(); + callback(new Error('theme-not-found')); } else { meta.themes.set({ type: 'local', @@ -94,11 +98,7 @@ function resetTheme(themeId, callback) { winston.info('[reset] Theme reset to ' + themeId); } - if (typeof callback === 'function') { - callback(); - } else { - process.exit(0); - } + callback(); }); } }); @@ -112,11 +112,7 @@ function resetThemes(callback) { id: 'nodebb-theme-persona' }, function (err) { winston.info('[reset] Theme reset to Persona'); - if (typeof callback === 'function') { - callback(err); - } else { - process.exit(0); - } + callback(err); }); } @@ -143,36 +139,25 @@ function resetPlugin(pluginId, callback) { } else { winston.warn('[reset] Plugin `%s` was not active on this forum', pluginId); winston.info('[reset] No action taken.'); + err = new Error('plugin-not-active'); } } - if (typeof callback === 'function') { - callback(); - } else { - process.exit(0); - } + callback(err); }); } function resetPlugins(callback) { db.delete('plugins:active', function (err) { winston.info('[reset] All Plugins De-activated'); - if (typeof callback === 'function') { - callback(err); - } else { - process.exit(0); - } + callback(err); }); } function resetWidgets(callback) { require('./widgets').reset(function (err) { winston.info('[reset] All Widgets moved to Draft Zone'); - if (typeof callback === 'function') { - callback(err); - } else { - process.exit(); - } + callback(err); }); } diff --git a/src/rewards/admin.js b/src/rewards/admin.js index fcfacf5877..ec5a26d5aa 100644 --- a/src/rewards/admin.js +++ b/src/rewards/admin.js @@ -1,35 +1,14 @@ "use strict"; -var rewards = {}, - async = require('async'), - plugins = require('../plugins'), - db = require('../database'); +var async = require('async'); +var plugins = require('../plugins'); +var db = require('../database'); +var rewards = module.exports; rewards.save = function (data, callback) { - function save(data, next) { - function commit(err, id) { - if (err) { - return callback(err); - } - data.id = id; - - async.series([ - function (next) { - rewards.delete(data, next); - }, - function (next) { - db.setAdd('rewards:list', data.id, next); - }, - function (next) { - db.setObject('rewards:id:' + data.id, data, next); - }, - function (next) { - db.setObject('rewards:id:' + data.id + ':rewards', rewardsData, next); - } - ], next); - } + async.each(data, function save(data, next) { if (!Object.keys(data.rewards).length) { return next(); @@ -38,14 +17,36 @@ rewards.save = function (data, callback) { var rewardsData = data.rewards; delete data.rewards; - if (!parseInt(data.id, 10)) { - db.incrObjectField('global', 'rewards:id', commit); - } else { - commit(false, data.id); - } - } + async.waterfall([ + function (next) { + if (!parseInt(data.id, 10)) { + db.incrObjectField('global', 'rewards:id', next); + } else { + next(null, data.id); + } + }, + function (rid, next) { + + data.id = rid; + + async.series([ + function (next) { + rewards.delete(data, next); + }, + function (next) { + db.setAdd('rewards:list', data.id, next); + }, + function (next) { + db.setObject('rewards:id:' + data.id, data, next); + }, + function (next) { + db.setObject('rewards:id:' + data.id + ':rewards', rewardsData, next); + } + ], next); + } + ], next); - async.each(data, save, function (err) { + }, function (err) { if (err) { return callback(err); } @@ -84,25 +85,29 @@ rewards.get = function (callback) { }; function saveConditions(data, callback) { - db.delete('conditions:active', function (err) { - if (err) { - return callback(err); - } - - var conditions = [], - rewardsPerCondition = {}; - - data.forEach(function (reward) { - conditions.push(reward.condition); - rewardsPerCondition[reward.condition] = rewardsPerCondition[reward.condition] || []; - rewardsPerCondition[reward.condition].push(reward.id); - }); + var rewardsPerCondition = {}; + async.waterfall([ + function (next) { + db.delete('conditions:active', next); + }, + function (next) { + var conditions = []; - db.setAdd('conditions:active', conditions, callback); + data.forEach(function (reward) { + conditions.push(reward.condition); + rewardsPerCondition[reward.condition] = rewardsPerCondition[reward.condition] || []; + rewardsPerCondition[reward.condition].push(reward.id); + }); - async.each(Object.keys(rewardsPerCondition), function (condition, next) { - db.setAdd('condition:' + condition + ':rewards', rewardsPerCondition[condition], next); - }, callback); + db.setAdd('conditions:active', conditions, next); + }, + function (next) { + async.each(Object.keys(rewardsPerCondition), function (condition, next) { + db.setAdd('condition:' + condition + ':rewards', rewardsPerCondition[condition], next); + }, next); + } + ], function (err) { + callback(err); }); } @@ -138,5 +143,3 @@ function getActiveRewards(callback) { }); }); } - -module.exports = rewards; diff --git a/src/rewards/index.js b/src/rewards/index.js index 398abfb8f3..3c09872e67 100644 --- a/src/rewards/index.js +++ b/src/rewards/index.js @@ -1,40 +1,36 @@ "use strict"; -var rewards = {}, - db = require('../database'), - plugins = require('../plugins'), - async = require('async'); +var db = require('../database'); +var plugins = require('../plugins'); +var async = require('async'); + +var rewards = module.exports; rewards.checkConditionAndRewardUser = function (uid, condition, method, callback) { + callback = callback || function () {}; + async.waterfall([ function (next) { - isConditionActive(condition, function (err, isActive) { - if (!isActive) { - return back(err); - } - - next(err); - }); + isConditionActive(condition, next); }, - function (next) { - getIDsByCondition(condition, function (err, ids) { - next(err, ids); - }); + function (isActive, next) { + if (!isActive) { + return callback(); + } + getIDsByCondition(condition, next); }, function (ids, next) { getRewardDataByIDs(ids, next); }, function (rewards, next) { - filterCompletedRewards(uid, rewards, function (err, filtered) { - if (!filtered || !filtered.length) { - return back(err); - } - - next(err, filtered); - }); + filterCompletedRewards(uid, rewards, next); }, function (rewards, next) { + if (!rewards || !rewards.length) { + return callback(); + } + async.filter(rewards, function (reward, next) { if (!reward) { return next(null, false); @@ -51,14 +47,7 @@ rewards.checkConditionAndRewardUser = function (uid, condition, method, callback giveRewards(uid, eligible, next); }); } - ], back); - - - function back(err) { - if (typeof callback === 'function') { - callback(err); - } - } + ], callback); }; function isConditionActive(condition, callback) { @@ -88,14 +77,10 @@ function filterCompletedRewards(uid, rewards, callback) { var claimable = parseInt(reward.claimable, 10); - if (claimable === 0) { - return true; - } - - return (userRewards[reward.id] >= reward.claimable) ? false : true; + return claimable === 0 || (userRewards[reward.id] < reward.claimable); }); - callback(false, rewards); + callback(null, rewards); }); } @@ -135,6 +120,3 @@ function giveRewards(uid, rewards, callback) { }, callback); }); } - - -module.exports = rewards; \ No newline at end of file diff --git a/src/routes/feeds.js b/src/routes/feeds.js index 4638582cb4..9521e65ce8 100644 --- a/src/routes/feeds.js +++ b/src/routes/feeds.js @@ -3,6 +3,7 @@ var async = require('async'); var rss = require('rss'); var nconf = require('nconf'); +var validator = require('validator'); var posts = require('../posts'); var topics = require('../topics'); @@ -12,6 +13,18 @@ var meta = require('../meta'); var helpers = require('../controllers/helpers'); var privileges = require('../privileges'); +module.exports = function (app, middleware, controllers) { + app.get('/topic/:topic_id.rss', middleware.maintenanceMode, generateForTopic); + app.get('/category/:category_id.rss', middleware.maintenanceMode, generateForCategory); + app.get('/recent.rss', middleware.maintenanceMode, generateForRecent); + app.get('/popular.rss', middleware.maintenanceMode, generateForPopular); + app.get('/popular/:term.rss', middleware.maintenanceMode, generateForPopular); + app.get('/recentposts.rss', middleware.maintenanceMode, generateForRecentPosts); + app.get('/category/:category_id/recentposts.rss', middleware.maintenanceMode, generateForCategoryRecentPosts); + app.get('/user/:userslug/topics.rss', middleware.maintenanceMode, generateForUserTopics); + app.get('/tags/:tag.rss', middleware.maintenanceMode, generateForTag); +}; + function generateForTopic(req, res, callback) { if (parseInt(meta.config['feeds:disableRSS'], 10) === 1) { @@ -56,15 +69,15 @@ function generateForTopic(req, res, callback) { var author = topicData.posts.length ? topicData.posts[0].username : ''; var feed = new rss({ - title: topicData.title, - description: description, - feed_url: nconf.get('url') + '/topic/' + tid + '.rss', - site_url: nconf.get('url') + '/topic/' + topicData.slug, - image_url: image_url, - author: author, - ttl: 60 - }), - dateStamp; + title: topicData.title, + description: description, + feed_url: nconf.get('url') + '/topic/' + tid + '.rss', + site_url: nconf.get('url') + '/topic/' + topicData.slug, + image_url: image_url, + author: author, + ttl: 60 + }); + var dateStamp; if (topicData.posts.length > 0) { feed.pubDate = new Date(parseInt(topicData.posts[0].timestamp, 10)).toUTCString(); @@ -189,38 +202,42 @@ function generateForPopular(req, res, next) { }; var term = terms[req.params.term] || 'day'; - topics.getPopular(term, req.uid, 19, function (err, topics) { + async.waterfall([ + function (next) { + topics.getPopular(term, req.uid, 19, next); + }, + function (topics, next) { + generateTopicsFeed({ + uid: req.uid, + title: 'Popular Topics', + description: 'A list of topics that are sorted by post count', + feed_url: '/popular/' + (req.params.term || 'daily') + '.rss', + site_url: '/popular/' + (req.params.term || 'daily') + }, topics, next); + } + ], function (err, feed) { if (err) { return next(err); } - - generateTopicsFeed({ - uid: req.uid, - title: 'Popular Topics', - description: 'A list of topics that are sorted by post count', - feed_url: '/popular/' + (req.params.term || 'daily') + '.rss', - site_url: '/popular/' + (req.params.term || 'daily') - }, topics, function (err, feed) { - if (err) { - return next(err); - } - sendFeed(feed, res); - }); + sendFeed(feed, res); }); } function generateForTopics(options, set, req, res, next) { - topics.getTopicsFromSet(set, req.uid, 0, 19, function (err, data) { + var start = options.hasOwnProperty('start') ? options.start : 0; + var stop = options.hasOwnProperty('stop') ? options.stop : 19; + async.waterfall([ + function (next) { + topics.getTopicsFromSet(set, req.uid, start, stop, next); + }, + function (data, next) { + generateTopicsFeed(options, data.topics, next); + } + ], function (err, feed) { if (err) { return next(err); } - - generateTopicsFeed(options, data.topics, function (err, feed) { - if (err) { - return next(err); - } - sendFeed(feed, res); - }); + sendFeed(feed, res); }); } @@ -359,18 +376,29 @@ function generateForPostsFeed(feedOptions, posts) { return feed; } +function generateForTag(req, res, next) { + if (parseInt(meta.config['feeds:disableRSS'], 10) === 1) { + return next(); + } + var tag = validator.escape(String(req.params.tag)); + var page = parseInt(req.query.page, 10) || 1; + var topicsPerPage = meta.config.topicsPerPage || 20; + var start = Math.max(0, (page - 1) * topicsPerPage); + var stop = start + topicsPerPage - 1; + generateForTopics({ + uid: req.uid, + title: 'Topics tagged with ' + tag, + description: 'A list of topics that have been tagged with ' + tag, + feed_url: '/tags/' + tag + '.rss', + site_url: '/tags/' + tag, + start: start, + stop: stop + }, 'tag:' + tag + ':topics', req, res, next); +} + function sendFeed(feed, res) { var xml = feed.xml(); res.type('xml').set('Content-Length', Buffer.byteLength(xml)).send(xml); } -module.exports = function (app, middleware, controllers) { - app.get('/topic/:topic_id.rss', middleware.maintenanceMode, generateForTopic); - app.get('/category/:category_id.rss', middleware.maintenanceMode, generateForCategory); - app.get('/recent.rss', middleware.maintenanceMode, generateForRecent); - app.get('/popular.rss', middleware.maintenanceMode, generateForPopular); - app.get('/popular/:term.rss', middleware.maintenanceMode, generateForPopular); - app.get('/recentposts.rss', middleware.maintenanceMode, generateForRecentPosts); - app.get('/category/:category_id/recentposts.rss', middleware.maintenanceMode, generateForCategoryRecentPosts); - app.get('/user/:userslug/topics.rss', middleware.maintenanceMode, generateForUserTopics); -}; + diff --git a/src/socket.io/admin/rewards.js b/src/socket.io/admin/rewards.js index 266d5f532f..3d895a5281 100644 --- a/src/socket.io/admin/rewards.js +++ b/src/socket.io/admin/rewards.js @@ -1,7 +1,7 @@ "use strict"; -var rewardsAdmin = require('../../rewards/admin'), - SocketRewards = {}; +var rewardsAdmin = require('../../rewards/admin'); +var SocketRewards = module.exports; SocketRewards.save = function (socket, data, callback) { rewardsAdmin.save(data, callback); @@ -11,5 +11,3 @@ SocketRewards.delete = function (socket, data, callback) { rewardsAdmin.delete(data, callback); }; - -module.exports = SocketRewards; \ No newline at end of file diff --git a/src/views/modals/crop_picture.tpl b/src/views/modals/crop_picture.tpl index d28a3a2d59..ba98860df4 100644 --- a/src/views/modals/crop_picture.tpl +++ b/src/views/modals/crop_picture.tpl @@ -32,6 +32,7 @@

diff --git a/test/controllers.js b/test/controllers.js index 51d1495e82..54578f76c3 100644 --- a/test/controllers.js +++ b/test/controllers.js @@ -288,6 +288,15 @@ describe('Controllers', function () { }); }); + it('should load tag rss feed', function (done) { + request(nconf.get('url') + '/tags/nodebb.rss', function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(body); + done(); + }); + }); + it('should load stylesheet.css', function (done) { request(nconf.get('url') + '/stylesheet.css', function (err, res, body) { assert.ifError(err); diff --git a/test/rewards.js b/test/rewards.js new file mode 100644 index 0000000000..5804465ef7 --- /dev/null +++ b/test/rewards.js @@ -0,0 +1,86 @@ +'use strict'; + +var assert = require('assert'); +var async = require('async'); + +var db = require('./mocks/databasemock'); +var meta = require('../src/meta'); +var User = require('../src/user'); +var Groups = require('../src/groups'); + +describe('rewards', function () { + var adminUid; + var bazUid; + var herpUid; + + before(function (done) { + Groups.resetCache(); + // Create 3 users: 1 admin, 2 regular + async.series([ + async.apply(User.create, { username: 'foo', password: 'barbar' }), + async.apply(User.create, { username: 'baz', password: 'quuxquux' }), + async.apply(User.create, { username: 'herp', password: 'derpderp' }) + ], function (err, uids) { + if (err) { + return done(err); + } + + adminUid = uids[0]; + bazUid = uids[1]; + herpUid = uids[2]; + + async.series([ + function (next) { + Groups.join('administrators', adminUid, done); + }, + function (next) { + Groups.join('rewardGroup', adminUid, done); + } + ], done); + }); + }); + + describe('rewards create', function () { + var socketAdmin = require('../src/socket.io/admin'); + var rewards = require('../src/rewards'); + it('it should save a reward', function (done) { + var data = [ + { + rewards: { groupname: 'Gamers' }, + condition: 'essentials/user.postcount', + conditional: 'greaterthan', + value: '10', + rid: 'essentials/add-to-group', + claimable: '1', + id: '', + disabled: false + } + ]; + + socketAdmin.rewards.save({uid: adminUid}, data, function (err) { + assert.ifError(err); + done(); + }); + }); + + it('should check condition', function (done) { + function method(next) { + next(null, 1); + } + rewards.checkConditionAndRewardUser(adminUid, 'essentials/user.postcount', method, function (err, data) { + assert.ifError(err); + done(); + }); + }); + + }); + + + + + + + after(function (done) { + db.emptydb(done); + }); +}); diff --git a/test/utils.js b/test/utils.js index 11b867e2a2..95f3040df4 100644 --- a/test/utils.js +++ b/test/utils.js @@ -135,5 +135,41 @@ describe('Utility Methods', function () { done(); }); + it('escape html', function (done) { + var escaped = utils.escapeHTML('&<>'); + assert.equal(escaped, '&<>'); + done(); + }); + + it('should escape regex chars', function (done) { + var escaped = utils.escapeRegexChars('some text {}'); + assert.equal(escaped, 'some\\ text\\ \\{\\}'); + done(); + }); + + it('should get hours array', function (done) { + var currentHour = new Date().getHours(); + var hours = utils.getHoursArray(); + var index = hours.length - 1; + for (var i = currentHour, ii = currentHour - 24; i > ii; i--) { + var hour = i < 0 ? 24 + i : i; + assert.equal(hours[index], hour + ':00'); + -- index; + } + done(); + }); + + it('should get days array', function (done) { + var currentDay = new Date(Date.now()).getTime(); + var days = utils.getDaysArray(); + var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + var index = 0; + for(var x = 29; x >= 0; x--) { + var tmpDate = new Date(currentDay - (1000 * 60 * 60 * 24 * x)); + assert.equal(months[tmpDate.getMonth()] + ' ' + tmpDate.getDate(), days[index]); + ++ index; + } + done(); + }); });