diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 8a3f0df422..724a49d584 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -192,7 +192,7 @@ jobs: run: npm run coverage - name: Test coverage - uses: coverallsapp/github-action@cfd0633edbd2411b532b808ba7a8b5e04f76d2c8 # v2.3.4 + uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 if: matrix.coverage with: github-token: ${{ secrets.GITHUB_TOKEN }} @@ -206,7 +206,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Coveralls Finished - uses: coverallsapp/github-action@cfd0633edbd2411b532b808ba7a8b5e04f76d2c8 # v2.3.4 + uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 with: github-token: ${{ secrets.GITHUB_TOKEN }} parallel-finished: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 34402b38c9..273e8de4c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,65 @@ +#### v4.0.6 (2025-02-27) + +##### Chores + +* up dbsearch (9e1a0a13) +* add sourceContent to schema (b2cdd5fd) +* up harmony (f94cf5ce) +* up deps (a9563d75) +* up harmony (08014e7c) +* up harmony (8385d4ae) +* up harmony (0a9d28d5) +* up harmony (c920836a) +* up esbuild (2ab6a368) +* up widgets (02a8d9b6) +* up harmony (05bbefd1) +* incrementing version number - v4.0.5 (1792a62b) +* update changelog for v4.0.5 (f84b9fc7) +* incrementing version number - v4.0.4 (b1125cce) +* incrementing version number - v4.0.3 (2b65c735) +* incrementing version number - v4.0.2 (73fe5fcf) +* incrementing version number - v4.0.1 (a461b758) +* incrementing version number - v4.0.0 (c1eaee45) + +##### New Features + +* match events and parent style (e38d1531) +* merge consecutive share events (9153f8cf) +* **config:** add `acpPluginInstallDisabled` option (#13189) (577eee2f) + +##### Bug Fixes + +* add missing file (04d5edbb) +* #13202, private note assertion failure when cc property is missing (c65e1ebb) +* tests for public and private note assertion, failing test for private note assertion with missing cc prop (efb27ce0) +* closes #13206, truncate long usernames (51872d54) +* closes #13207, add localComments (13a13e1d) +* handle multiple types in remote actor payload (d91b80d2) +* don't send validation email for pending emails (07957e82) +* missing db (52b23313) +* #13198, use email from confirmObj (b4dfc48b) +* summary post parse (e9d4c7b9) +* add sourceContent to getPostSummaryByPids (ad92e931) +* #13193, add lang strings (2c830567) +* #13194, dont notify about cid=-1 (b8c8ae09) +* old upgrade script so it doesn't create settings objects (fe980688) +* escape confirm email in acp manage users (9bfa8853) +* add missing await on filter:user.logout (c6b8256f) +* relaxing strict allowedTags configuration for incoming AP content (allowing picture, source, and additional attributes for img) (2ad48f17) + +##### Other Changes + +* fix (ec11b0c2) + +##### Refactors + +* use sortedSetRemoveBulk (349084d8) +* don't make db request if there is no code (53a2be9d) + +##### Tests + +* remove extra .only, add basic tests for public note assertion (64267f7d) + #### v4.0.5 (2025-02-20) ##### Chores diff --git a/docker-compose-pgsql.yml b/docker-compose-pgsql.yml index 115cb94e37..e7af970bf5 100644 --- a/docker-compose-pgsql.yml +++ b/docker-compose-pgsql.yml @@ -14,7 +14,7 @@ services: - ./install/docker/setup.json:/usr/src/app/setup.json postgres: - image: postgres:17.2-alpine + image: postgres:17.4-alpine restart: unless-stopped environment: POSTGRES_USER: nodebb diff --git a/docker-compose.yml b/docker-compose.yml index 13dfc20d72..7877582680 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -34,7 +34,7 @@ services: - redis postgres: - image: postgres:17.2-alpine + image: postgres:17.4-alpine restart: unless-stopped environment: POSTGRES_USER: nodebb diff --git a/install/package.json b/install/package.json index d04cda689c..fdbea1d17c 100644 --- a/install/package.json +++ b/install/package.json @@ -39,11 +39,11 @@ "@textcomplete/contenteditable": "0.1.13", "@textcomplete/core": "0.1.13", "@textcomplete/textarea": "0.1.13", - "ace-builds": "1.38.0", + "ace-builds": "1.39.0", "archiver": "7.0.1", "async": "3.2.6", "autoprefixer": "10.4.20", - "bcryptjs": "2.4.3", + "bcryptjs": "3.0.2", "benchpressjs": "2.5.3", "body-parser": "1.20.3", "bootbox": "6.0.0", @@ -63,7 +63,7 @@ "connect-pg-simple": "10.0.0", "connect-redis": "8.0.1", "cookie-parser": "1.4.7", - "cron": "3.5.0", + "cron": "4.0.0", "cropperjs": "1.6.2", "csrf-sync": "4.0.3", "daemon": "1.1.0", @@ -129,7 +129,7 @@ "rss": "1.2.2", "rtlcss": "4.3.0", "sanitize-html": "2.14.0", - "sass": "1.85.0", + "sass": "1.85.1", "satori": "0.12.1", "semver": "7.7.1", "serve-favicon": "2.5.0", @@ -153,14 +153,14 @@ "winston": "3.17.0", "workerpool": "9.2.0", "xml": "1.0.1", - "xregexp": "5.1.1", + "xregexp": "5.1.2", "yargs": "17.7.2", "zxcvbn": "4.4.2" }, "devDependencies": { "@apidevtools/swagger-parser": "10.1.0", - "@commitlint/cli": "19.6.1", - "@commitlint/config-angular": "19.7.0", + "@commitlint/cli": "19.7.1", + "@commitlint/config-angular": "19.7.1", "coveralls": "3.1.1", "eslint": "8.57.1", "eslint-config-nodebb": "0.2.1", @@ -169,15 +169,15 @@ "grunt-contrib-watch": "1.1.0", "husky": "8.0.3", "jsdom": "26.0.0", - "lint-staged": "15.4.0", - "mocha": "11.0.1", + "lint-staged": "15.4.3", + "mocha": "11.1.0", "mocha-lcov-reporter": "1.3.0", "mockdate": "3.0.5", "nyc": "17.1.0", "smtp-server": "3.13.6" }, "optionalDependencies": { - "sass-embedded": "1.83.4" + "sass-embedded": "1.85.1" }, "resolutions": { "*/jquery": "3.7.1" diff --git a/public/language/ar/admin/settings/advanced.json b/public/language/ar/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/ar/admin/settings/advanced.json +++ b/public/language/ar/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/ar/admin/settings/general.json b/public/language/ar/admin/settings/general.json index 5009685c7e..43e7f5a38c 100644 --- a/public/language/ar/admin/settings/general.json +++ b/public/language/ar/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "الكلمات الدليله للموقع", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/ar/category.json b/public/language/ar/category.json index 24a54025a1..a936ead4b5 100644 --- a/public/language/ar/category.json +++ b/public/language/ar/category.json @@ -1,6 +1,8 @@ { "category": "قسم", "subcategories": "قسم فرعي", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "موضوع جديد", "guest-login-post": "سجل الدخول للمشاركة", "no-topics": "لا توجد مواضيع في هذه القسملم لا تحاول إنشاء موضوع؟
", diff --git a/public/language/ar/error.json b/public/language/ar/error.json index addd07fd9c..cc38794512 100644 --- a/public/language/ar/error.json +++ b/public/language/ar/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/ar/themes/harmony.json b/public/language/ar/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/ar/themes/harmony.json +++ b/public/language/ar/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/bg/admin/settings/advanced.json b/public/language/bg/admin/settings/advanced.json index 7992505008..c82011bfa0 100644 --- a/public/language/bg/admin/settings/advanced.json +++ b/public/language/bg/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "По подразбиране: %1", "sockets.delay": "Забавяне при повторно свързване", - "analytics.settings": "Настройки за анализите", - "analytics.max-cache": "Макс. стойност на кеша за анализите", - "analytics.max-cache-help": "При инсталации с натоварен трафик, кешът може да бъде изразходен, ако има повече едновременни потребители, от колкото е максималната стойност на кеша. (Изисква рестартиране)", "compression.settings": "Настройки за компресирането", "compression.enable": "Включване на компресирането", "compression.help": "Тази настройка включва компресирането чрез „gzip“. За натоварени уеб сайтове най-добрият начин за използване на компресия е тя да се случва на нивото на обратния сървър-посредник (reverse proxy). Но с цел тестване, можете да го включите и тук." diff --git a/public/language/bg/admin/settings/general.json b/public/language/bg/admin/settings/general.json index 65e1e54448..9c84b5413d 100644 --- a/public/language/bg/admin/settings/general.json +++ b/public/language/bg/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Разположение на заглавието", "title-layout-help": "Определете как ще бъде структурирано заглавието на браузъра, например: {pageTitle} | {browserTitle}", "description.placeholder": "Кратко описание на общността Ви", - "description": "Изберете коя страница да бъде показана, когато потребителите отидат на главния адрес на форума.", + "description": "Описание на уеб сайта", "keywords": "Ключови думи на уеб сайта", "keywords-placeholder": "Ключови думи, описващи общността Ви. Трябва да бъдат разделени със запетаи.", "logo-and-icons": "Лого и иконки на уеб сайта", @@ -51,6 +51,7 @@ "topic-tools": "Инструменти за темите", "home-page": "Начална страница", "home-page-route": "Път на началната страница", + "home-page-description": "Изберете коя страница да бъде показана, когато потребителите отидат на главния адрес на форума.", "custom-route": "Персонализиран път", "allow-user-home-pages": "Разрешаване на потребителските начални страници", "home-page-title": "Заглавие на началната страница (по подразбиране: „Начало“)", diff --git a/public/language/bg/category.json b/public/language/bg/category.json index 2d28ec9299..69de6b55ec 100644 --- a/public/language/bg/category.json +++ b/public/language/bg/category.json @@ -1,6 +1,8 @@ { "category": "Категория", "subcategories": "Подкатегории", + "uncategorized": "Без категория", + "uncategorized.description": "Теми, които не пасват на никоя конкретна категория", "new-topic-button": "Нова тема", "guest-login-post": "Впишете се, за да можете да публикувате", "no-topics": "Все още няма теми в тази категория.
Защо не създадете някоя?", diff --git a/public/language/bg/error.json b/public/language/bg/error.json index 30952b74ec..61fce25ea4 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "В момента сървърът е недостъпен. Натиснете тук, за да опитате отново, или опитайте пак по-късно.", "invalid-plugin-id": "Грешен идентификатор на добавка", "plugin-not-whitelisted": "Добавката не може да бъде инсталирана – само добавки, одобрени от пакетния мениджър на NodeBB могат да бъдат инсталирани чрез ACP", + "plugin-installation-via-acp-disabled": "Инсталирането на добавки чрез ACP е изключено", "plugins-set-in-configuration": "Не можете да променяте състоянието на добавката, тъй като то се определя по време на работата ѝ (чрез config.json, променливи на средата или аргументи при изпълнение). Вместо това може да промените конфигурацията.", "theme-not-set-in-configuration": "Когато определяте активните добавки в конфигурацията, промяната на темите изисква да се добави новата тема към активните добавки, преди актуализирането ѝ в ACP", "topic-event-unrecognized": "Събитието „%1“ на темата е неизвестно", @@ -249,7 +250,7 @@ "api.501": "Пътят, който се опитвате да извикате, все още не съществува. Моля, опитайте отново утре.", "api.503": "Пътят, който се опитвате да извикате, в момента не е достъпен, поради настройките на сървъра.", "api.reauth-required": "Ресурсът, който се опитвате да достъпите, изисква (повторно) удостоверяване.", - "activitypub.not-enabled": "Federation is not enabled on this server", + "activitypub.not-enabled": "Федерирането не е включено на този сървър", "activitypub.invalid-id": "Входният идентификатор не може да бъде разпознат – може да е неправилен.", "activitypub.get-failed": "Посоченият материал не може да бъде получен.", "activitypub.pubKey-not-found": "Публичният ключ не може да бъде разпознат, така че потвърждението на данните не може да бъде извършено.", diff --git a/public/language/bg/themes/harmony.json b/public/language/bg/themes/harmony.json index 0aa61b4924..ea6809c9b5 100644 --- a/public/language/bg/themes/harmony.json +++ b/public/language/bg/themes/harmony.json @@ -13,10 +13,11 @@ "settings.mobileTopicTeasers": "Показване на резюмета на темите на мобилни устройства", "settings.stickyToolbar": "Статична лента с инструменти", "settings.stickyToolbar.help": "Лентата с инструменти в страниците с теми и категории ще стои винаги в горния край на страницата", - "settings.topicSidebarTools": "Topic sidebar tools", - "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Автоматично скриване на долната лента", - "settings.autohideBottombar.help": "В изгледа за мобилни устройства долната лента ще се скрива, когато страницата се превърта надолу", + "settings.topicSidebarTools": "Странична лента с инструменти за темите", + "settings.topicSidebarTools.help": "Тази настройка ще премести инструментите за темите в страничната лента, когато се ползва настолната версия на уеб сайта", + "settings.autohideBottombar": "Автоматично скриване на лентата за навигация за мобилни устройства", + "settings.autohideBottombar.help": "Лентата за мобилни устройства ще се скрива, когато страницата бъде превъртяна надолу", + "settings.topMobilebar": "Преместване на лентата за навигация за мобилни устройства в горната част", "settings.openSidebars": "Отваряне на страничните ленти", "settings.chatModals": "Включване на прозорците за разговори" } \ No newline at end of file diff --git a/public/language/bn/admin/settings/advanced.json b/public/language/bn/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/bn/admin/settings/advanced.json +++ b/public/language/bn/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/bn/admin/settings/general.json b/public/language/bn/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/bn/admin/settings/general.json +++ b/public/language/bn/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/bn/category.json b/public/language/bn/category.json index 259bf0e7d6..7bf90a4440 100644 --- a/public/language/bn/category.json +++ b/public/language/bn/category.json @@ -1,6 +1,8 @@ { "category": "বিভাগ", "subcategories": "উপবিভাগ", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "নতুন টপিক", "guest-login-post": "উত্তর দিতে লগিন করুন", "no-topics": "এই বিভাগে কোন আলোচনা নেই!
আপনি চাইলে নতুন আলোচনা শুরু করতে পারেন।", diff --git a/public/language/bn/error.json b/public/language/bn/error.json index 4509d0dba3..d458e34b40 100644 --- a/public/language/bn/error.json +++ b/public/language/bn/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/bn/themes/harmony.json b/public/language/bn/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/bn/themes/harmony.json +++ b/public/language/bn/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/cs/admin/settings/advanced.json b/public/language/cs/admin/settings/advanced.json index bc10146c76..6f65a2bc45 100644 --- a/public/language/cs/admin/settings/advanced.json +++ b/public/language/cs/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/cs/admin/settings/general.json b/public/language/cs/admin/settings/general.json index fae5a99573..78c991a4f9 100644 --- a/public/language/cs/admin/settings/general.json +++ b/public/language/cs/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Vzhled názvu", "title-layout-help": "Určete jak název prohlížeče má být sestaven, tj. {pageTitle} | {browserTitle}", "description.placeholder": "Zkrácený popis vaší komunity", - "description": "Vyberte, kterou stránku chcete zobrazit, jakmile uživatel přejde na výchozí URL vašeho fóra.", + "description": "Site Description", "keywords": "Klíčová slova pro stránky", "keywords-placeholder": "Klíčová slova popisující vaši komunitu, odděleno čárkou", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Domovská stránka", "home-page-route": "Cesta k domovské stránce", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Upravit cestu", "allow-user-home-pages": "Povolit uživatelům domovské stránky", "home-page-title": "Titulka domovské stránky (výchozí „Domů”)", diff --git a/public/language/cs/category.json b/public/language/cs/category.json index eb98a2b514..224b2b3351 100644 --- a/public/language/cs/category.json +++ b/public/language/cs/category.json @@ -1,6 +1,8 @@ { "category": "Kategorie", "subcategories": "Podkategorie", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nové téma", "guest-login-post": "Přihlásit se pro přispívání", "no-topics": "V této kategorii zatím nejsou žádné příspěvky.
Můžeš být první.", diff --git a/public/language/cs/error.json b/public/language/cs/error.json index 0f33bfcd0d..ba7e5906f2 100644 --- a/public/language/cs/error.json +++ b/public/language/cs/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/cs/themes/harmony.json b/public/language/cs/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/cs/themes/harmony.json +++ b/public/language/cs/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/da/admin/settings/advanced.json b/public/language/da/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/da/admin/settings/advanced.json +++ b/public/language/da/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/da/admin/settings/general.json b/public/language/da/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/da/admin/settings/general.json +++ b/public/language/da/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/da/category.json b/public/language/da/category.json index 3c8ed6132d..b817d7d2a4 100644 --- a/public/language/da/category.json +++ b/public/language/da/category.json @@ -1,6 +1,8 @@ { "category": "Kategori", "subcategories": "Underkategorier", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nyt emne", "guest-login-post": "Log ind", "no-topics": "Der er ikke nogen nye emner i denne kategori.
Hvorfor prøver du ikke at lave et?", diff --git a/public/language/da/error.json b/public/language/da/error.json index ea4d8cd145..fe7366fe7a 100644 --- a/public/language/da/error.json +++ b/public/language/da/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/da/themes/harmony.json b/public/language/da/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/da/themes/harmony.json +++ b/public/language/da/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ 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 9310b773b2..472cc8e05e 100644 --- a/public/language/de/admin/settings/advanced.json +++ b/public/language/de/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Standard: %1", "sockets.delay": "Wiederverbindungsverzögerung", - "analytics.settings": "Analytik-Einstellungen", - "analytics.max-cache": "Analytik-Cache Max-Wert", - "analytics.max-cache-help": "Bei Installationen mit hohem Datenverkehr kann der Cache kontinuierlich erschöpft werden, wenn die Anzahl der gleichzeitig aktiven Benutzer den Wert für \"Max Cache\" überschreitet. (Neustart erforderlich)", "compression.settings": "Komprimierungseinstellungen", "compression.enable": "Komprimierung einschalten", "compression.help": "Diese Einstellung aktiviert die gzip-Komprimierung. Für eine produktive Website mit hohem Datenverkehr ist es am besten, die Komprimierung auf der Ebene des Reverse-Proxys zu implementieren. Sie können sie hier zu Testzwecken aktivieren." diff --git a/public/language/de/admin/settings/general.json b/public/language/de/admin/settings/general.json index 795070f128..4ea6834bda 100644 --- a/public/language/de/admin/settings/general.json +++ b/public/language/de/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Titel Layout", "title-layout-help": "Definiert wie der Browser Titel gebildet wird, z.B. {pageTitle} | {browserTitle}", "description.placeholder": "Eine kurze Beschreibung der Community", - "description": "Wähle, welche Seite angezeigt wird, wenn Benutzer zur Stamm-URL deines Forums navigieren.", + "description": "Site Description", "keywords": "Forum Schlüsselworte", "keywords-placeholder": "Schlüsselworte, die ihre Community beschreiben, mit Komma getrennt", "logo-and-icons": "Website-Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Themen-Tools", "home-page": "Startseite", "home-page-route": "Startseiten Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Benutzerdefinierte Route", "allow-user-home-pages": "Benutzer-Startseiten zulassen", "home-page-title": "Titel der Startseite (Standardmäßig \"Home\")", diff --git a/public/language/de/category.json b/public/language/de/category.json index 1078ba6e54..71d782cdff 100644 --- a/public/language/de/category.json +++ b/public/language/de/category.json @@ -1,6 +1,8 @@ { "category": "Kategorie", "subcategories": "Unterkategorien", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Neues Thema", "guest-login-post": "Melde dich an, um einen Beitrag zu erstellen", "no-topics": "Es gibt noch keine Themen in dieser Kategorie.
Warum beginnst du nicht eins?", diff --git a/public/language/de/error.json b/public/language/de/error.json index 2cdb346ff6..1ec4c0df92 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Der Server kann zurzeit nicht erreicht werden. Klicken Sie hier, um es erneut zu versuchen, oder versuchen Sie es später erneut", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Plugin kann nicht installiert werden – nur Plugins, die vom NodeBB Package Manager in die Whitelist aufgenommen wurden, können über den ACP installiert werden", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "Du darfst den Status der Plugins nicht ändern, da sie zur Laufzeit definiert werden (config.json, Umgebungsvariablen oder Terminalargumente). Bitte ändere stattdessen die Konfiguration.", "theme-not-set-in-configuration": "Wenn in der Konfiguration aktive Plugins definiert werden, muss bei einem Themenwechsel das neue Thema zur Liste der aktiven Plugins hinzugefügt werden, bevor es im ACP aktualisiert wird.", "topic-event-unrecognized": "Themenereignis „%1“ nicht erkannt", diff --git a/public/language/de/themes/harmony.json b/public/language/de/themes/harmony.json index b6f021d6cb..dc403bdec3 100644 --- a/public/language/de/themes/harmony.json +++ b/public/language/de/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "Die Toolbar auf Themen- und Kategorieseiten bleibt oben an der Seite kleben", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Fußzeile automatisch verbergen", - "settings.autohideBottombar.help": "Die Fußzeile wird auf Mobilgeräten versteckt, sobald nach unten gescrollt wird", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Seitennavigation öffnen", "settings.chatModals": "Chatfenster aktivieren" } \ No newline at end of file diff --git a/public/language/el/admin/settings/advanced.json b/public/language/el/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/el/admin/settings/advanced.json +++ b/public/language/el/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/el/admin/settings/general.json b/public/language/el/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/el/admin/settings/general.json +++ b/public/language/el/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/el/category.json b/public/language/el/category.json index 52cb9e2f8a..bc454a3a1f 100644 --- a/public/language/el/category.json +++ b/public/language/el/category.json @@ -1,6 +1,8 @@ { "category": "Κατηγορία", "subcategories": "Υποκατηγορίες", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Νέο Θέμα", "guest-login-post": "Συνδέσου για να δημοσιεύσεις", "no-topics": "Δεν υπάρχουν θέματα σε αυτή την κατηγορία.
Γιατί δεν δοκιμάζεις να δημοσιεύσεις ένα εσύ;", diff --git a/public/language/el/error.json b/public/language/el/error.json index 280e7c9a92..ea67f20c41 100644 --- a/public/language/el/error.json +++ b/public/language/el/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/el/themes/harmony.json b/public/language/el/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/el/themes/harmony.json +++ b/public/language/el/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/en-US/admin/settings/advanced.json b/public/language/en-US/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/en-US/admin/settings/advanced.json +++ b/public/language/en-US/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/en-US/admin/settings/general.json b/public/language/en-US/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/en-US/admin/settings/general.json +++ b/public/language/en-US/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/en-US/category.json b/public/language/en-US/category.json index 8b1e83e8b3..322e54b1a7 100644 --- a/public/language/en-US/category.json +++ b/public/language/en-US/category.json @@ -1,6 +1,8 @@ { "category": "Category", "subcategories": "Subcategories", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "New Topic", "guest-login-post": "Log in to post", "no-topics": "There are no topics in this category.
Why don't you try posting one?", diff --git a/public/language/en-US/error.json b/public/language/en-US/error.json index e6757200f1..f2c5fa7a39 100644 --- a/public/language/en-US/error.json +++ b/public/language/en-US/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/en-US/themes/harmony.json b/public/language/en-US/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/en-US/themes/harmony.json +++ b/public/language/en-US/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/en-x-pirate/admin/settings/advanced.json b/public/language/en-x-pirate/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/en-x-pirate/admin/settings/advanced.json +++ b/public/language/en-x-pirate/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/en-x-pirate/admin/settings/general.json b/public/language/en-x-pirate/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/en-x-pirate/admin/settings/general.json +++ b/public/language/en-x-pirate/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/en-x-pirate/category.json b/public/language/en-x-pirate/category.json index 3ee2e842f9..1d54301312 100644 --- a/public/language/en-x-pirate/category.json +++ b/public/language/en-x-pirate/category.json @@ -1,6 +1,8 @@ { "category": "Category", "subcategories": "Subcategories", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "New Topic", "guest-login-post": "Log in to post", "no-topics": "Thar be no topics in 'tis category.
Why don't ye give a go' postin' one?", diff --git a/public/language/en-x-pirate/error.json b/public/language/en-x-pirate/error.json index e6757200f1..f2c5fa7a39 100644 --- a/public/language/en-x-pirate/error.json +++ b/public/language/en-x-pirate/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/en-x-pirate/themes/harmony.json b/public/language/en-x-pirate/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/en-x-pirate/themes/harmony.json +++ b/public/language/en-x-pirate/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/es/admin/settings/advanced.json b/public/language/es/admin/settings/advanced.json index 4c912b4d14..8fe86a5412 100644 --- a/public/language/es/admin/settings/advanced.json +++ b/public/language/es/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/es/admin/settings/general.json b/public/language/es/admin/settings/general.json index 8548ae4d0c..09a6c8295f 100644 --- a/public/language/es/admin/settings/general.json +++ b/public/language/es/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Plantilla del Sitio", "title-layout-help": "Define cómo el se estructurará el título del explorador. Por ejemplo: {TítulodelaPágina} | {TítulodelExplorador}\n", "description.placeholder": "Una descripción corta de tu comunidad", - "description": "Escoge que pagina se muestra cuando los usuarios navegan en la raíz del foro.", + "description": "Site Description", "keywords": "Palabras Clave (keywords) del Sitio", "keywords-placeholder": "Palabras Clave (keywords) que describen tu comunidad, separadas por comas", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Página Principal", "home-page-route": "Ruta de la Pagina Principal", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Ruta Personalizada", "allow-user-home-pages": "Permitir Pagina de Perfil del Usuario", "home-page-title": "Título de la página de inicio (por defecto, \"Home\" o \"Inicio\")", diff --git a/public/language/es/category.json b/public/language/es/category.json index d4ebd7cb64..a32720e450 100644 --- a/public/language/es/category.json +++ b/public/language/es/category.json @@ -1,6 +1,8 @@ { "category": "Categoría", "subcategories": "Subcategorías", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nuevo tema", "guest-login-post": "Accede para escribir", "no-topics": "No hay temas en esta categoría.
¿Por qué no te animas y publicas uno?", diff --git a/public/language/es/error.json b/public/language/es/error.json index 242383ea1f..eb1db32c9b 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/es/themes/harmony.json b/public/language/es/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/es/themes/harmony.json +++ b/public/language/es/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/et/admin/settings/advanced.json b/public/language/et/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/et/admin/settings/advanced.json +++ b/public/language/et/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/et/admin/settings/general.json b/public/language/et/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/et/admin/settings/general.json +++ b/public/language/et/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/et/category.json b/public/language/et/category.json index c7ca3a30d0..1dab6f32f1 100644 --- a/public/language/et/category.json +++ b/public/language/et/category.json @@ -1,6 +1,8 @@ { "category": "Kategooria", "subcategories": "Alamkategooriad", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Uus teema", "guest-login-post": "Postitamiseks logi sisse", "no-topics": "Kahjuks ei leidu siin kategoorias ühtegi teemat.
Soovid postitada?", diff --git a/public/language/et/error.json b/public/language/et/error.json index cb54921c35..3dac3d12f4 100644 --- a/public/language/et/error.json +++ b/public/language/et/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/et/themes/harmony.json b/public/language/et/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/et/themes/harmony.json +++ b/public/language/et/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/fa-IR/admin/settings/advanced.json b/public/language/fa-IR/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/fa-IR/admin/settings/advanced.json +++ b/public/language/fa-IR/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/fa-IR/admin/settings/general.json b/public/language/fa-IR/admin/settings/general.json index 6465a4a2c4..e8b37f08e5 100644 --- a/public/language/fa-IR/admin/settings/general.json +++ b/public/language/fa-IR/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/fa-IR/category.json b/public/language/fa-IR/category.json index 78734b05d5..11a89d9102 100644 --- a/public/language/fa-IR/category.json +++ b/public/language/fa-IR/category.json @@ -1,6 +1,8 @@ { "category": "دسته‌بندی", "subcategories": "زیر دسته‌بندی‌", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "تاپیک جدید", "guest-login-post": "برای ارسال پست وارد شوید", "no-topics": "هیچ تاپیکی در این دسته‌بندی نیست.
چرا شما یکی نمی‌فرستید؟", diff --git a/public/language/fa-IR/error.json b/public/language/fa-IR/error.json index 58ced215dd..cd26a5d8c1 100644 --- a/public/language/fa-IR/error.json +++ b/public/language/fa-IR/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/fa-IR/themes/harmony.json b/public/language/fa-IR/themes/harmony.json index 69dfb3e60f..414e4ecb51 100644 --- a/public/language/fa-IR/themes/harmony.json +++ b/public/language/fa-IR/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "نوار ابزار در تاپیک و صفحه دسته بدی ها در بالای صفحه ثابت می‌ماند", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "مخفی کردن اتوماتیک منوی پایینی ", - "settings.autohideBottombar.help": "وقتی صفحه به پایین اسکرول می شود، منوی پایین در نمایش گوشی مخفی خواهد شد ", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "فعال کردن پنجره کوچک برای چت " } \ No newline at end of file diff --git a/public/language/fi/admin/settings/advanced.json b/public/language/fi/admin/settings/advanced.json index e5ccf69f20..c4310bcb46 100644 --- a/public/language/fi/admin/settings/advanced.json +++ b/public/language/fi/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Oletus: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/fi/admin/settings/general.json b/public/language/fi/admin/settings/general.json index bb130934b1..58d803f7ee 100644 --- a/public/language/fi/admin/settings/general.json +++ b/public/language/fi/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Aihetyökalut", "home-page": "Aloitussivu", "home-page-route": "Aloitussivun polku", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Mukautettu polku", "allow-user-home-pages": "Salli käyttäjäkohtaiset aloitussivut", "home-page-title": "Aloitussivun otsikko (oletus on \"Aloitus\")", diff --git a/public/language/fi/category.json b/public/language/fi/category.json index 8b5f6fbd40..66570f55eb 100644 --- a/public/language/fi/category.json +++ b/public/language/fi/category.json @@ -1,6 +1,8 @@ { "category": "Kategoria", "subcategories": "Alikategoria", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Uusi aihe", "guest-login-post": "Kirjaudu sisään julkastaksesi", "no-topics": "Kategoriassa ei ole aiheita.
Jospa aloittaisit sellaisen?", diff --git a/public/language/fi/error.json b/public/language/fi/error.json index 50e10c40f4..82e6c6d83c 100644 --- a/public/language/fi/error.json +++ b/public/language/fi/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/fi/themes/harmony.json b/public/language/fi/themes/harmony.json index 9d2db8a733..971ee1ad91 100644 --- a/public/language/fi/themes/harmony.json +++ b/public/language/fi/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "Aihe- ja kategoriasivujen työkalupalkki näytetään yläreunassa aina.", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Piilota alapalkki automaattisesti", - "settings.autohideBottombar.help": "Mobiilinäykymän alapalkki piilotetaan kun sivua vieritetään alaspäin.", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Avaa sivupalkit", "settings.chatModals": "Käytä keskusteluruutuja" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/advanced.json b/public/language/fr/admin/settings/advanced.json index d63cdbc243..d7a2e675ee 100644 --- a/public/language/fr/admin/settings/advanced.json +++ b/public/language/fr/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Défaut : %1", "sockets.delay": "Délai de reconnexion", - "analytics.settings": "Paramètres d'analytique", - "analytics.max-cache": "Valeur maximale du cache Analytique", - "analytics.max-cache-help": "Sur les installations à fort trafic, le cache peut être utilisé en permanence s'il y a plus d'utilisateurs actifs simultanément que la valeur Max Cache. (Redémarrage requis)", "compression.settings": "Paramètres de compression", "compression.enable": "Activer la compression", "compression.help": "Ce paramètre active la compression gzip. Pour un site Web à fort trafic en production, la meilleure façon de mettre en place la compression est de l'implémenter au niveau du reverse proxy. Vous pouvez l'activer ici à des fins de test." diff --git a/public/language/fr/admin/settings/general.json b/public/language/fr/admin/settings/general.json index 62af1f018b..d4b6872288 100644 --- a/public/language/fr/admin/settings/general.json +++ b/public/language/fr/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Disposition du titre", "title-layout-help": "Définir la manière dont le titre est structuré dans le navigateur ex : {pageTitle} | {browserTitle}", "description.placeholder": "Une courte description de votre communauté", - "description": "Choisir la page affichée lorsque les utilisateurs naviguent à la racine de votre forum.", + "description": "Site Description", "keywords": "Mots-clés du site", "keywords-placeholder": "Mots-clés décrivant votre communauté, séparés par des virgules", "logo-and-icons": "Logo & Icônes du site", @@ -51,6 +51,7 @@ "topic-tools": "Outils pour les sujets", "home-page": "Page d'accueil", "home-page-route": "Route de la page d'accueil", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Route personnalisée", "allow-user-home-pages": "Permettre aux utilisateurs de choisir une page d'accueil personnalisée", "home-page-title": "Titre de la page d'accueil (par défaut \"Accueil\")", diff --git a/public/language/fr/category.json b/public/language/fr/category.json index f005ed6d19..feb05ac150 100644 --- a/public/language/fr/category.json +++ b/public/language/fr/category.json @@ -1,6 +1,8 @@ { "category": "Catégorie", "subcategories": "Sous-catégories", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nouveau sujet", "guest-login-post": "Se connecter pour poster", "no-topics": "Il n'y a aucun sujet dans cette catégorie.
Pourquoi ne pas en créer un ?", diff --git a/public/language/fr/error.json b/public/language/fr/error.json index 575a3dd190..cfabd20297 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Serveur inaccessible pour le moment. Cliquez ici pour réessayer ou réessayez plus tard", "invalid-plugin-id": "ID de plugin invalide", "plugin-not-whitelisted": "Impossible d'installer le plugin, seuls les plugins mis en liste blanche dans le gestionnaire de packages NodeBB peuvent être installés via l'ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "Vous n'êtes pas autorisé à modifier l'état des plugins car ils sont définis au moment de l'exécution (config.json, variables d'environnement ou arguments de terminal), veuillez plutôt modifier la configuration.", "theme-not-set-in-configuration": "Lors de la définition des plugins actifs, le changement de thème nécessite d'ajouter le nouveau thème à la liste des plugins actifs avant de le mettre à jour dans l'ACP", "topic-event-unrecognized": "Événement du sujet '%1' non reconnu", diff --git a/public/language/fr/themes/harmony.json b/public/language/fr/themes/harmony.json index d58d85cad7..bd02a12b57 100644 --- a/public/language/fr/themes/harmony.json +++ b/public/language/fr/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "La barre d'outils sur les pages de sujets et de catégories restera en haut de la page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Masquer automatiquement la barre inférieure", - "settings.autohideBottombar.help": "La barre inférieure sur mobile sera masquée lorsque la page défilera vers le bas", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Barres latérales ouvertes", "settings.chatModals": "Activer les discussions" } \ No newline at end of file diff --git a/public/language/gl/admin/settings/advanced.json b/public/language/gl/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/gl/admin/settings/advanced.json +++ b/public/language/gl/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/gl/admin/settings/general.json b/public/language/gl/admin/settings/general.json index e4f6ecf827..23438c4828 100644 --- a/public/language/gl/admin/settings/general.json +++ b/public/language/gl/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/gl/category.json b/public/language/gl/category.json index ed21644e65..25ea0c1dc3 100644 --- a/public/language/gl/category.json +++ b/public/language/gl/category.json @@ -1,6 +1,8 @@ { "category": "Categoría", "subcategories": "Subcategoría", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Novo tema", "guest-login-post": "Inicia sesión para poder escribir mensaxes", "no-topics": "Non hai temas nesta categoría.
Por que non abres un?", diff --git a/public/language/gl/error.json b/public/language/gl/error.json index b94bdb5900..d4723dafe3 100644 --- a/public/language/gl/error.json +++ b/public/language/gl/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/gl/themes/harmony.json b/public/language/gl/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/gl/themes/harmony.json +++ b/public/language/gl/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/he/admin/settings/advanced.json b/public/language/he/admin/settings/advanced.json index d29f7f3560..e862f6dfdb 100644 --- a/public/language/he/admin/settings/advanced.json +++ b/public/language/he/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "ברירת מחדל: %1", "sockets.delay": "זמן השעייה בן נסיונות חיבור מחדש", - "analytics.settings": "הגדרות אנליטיקס", - "analytics.max-cache": "גודל מקסימלי של מטמון Analytics", - "analytics.max-cache-help": "בהתקנות עם תעבורה גבוהה, המטמון עלול להתרוקן ברציפות אם יש יותר משתמשים פעילים במקביל מערך המטמון המקסימלי. (הפעלה מחדש נדרשת)", "compression.settings": "הגדרות דחיסה", "compression.enable": "הפעלת דחיסה", "compression.help": "הגדרה זו מפעילה דחיסת gzip. עבור אתר אינטרנט מרובה תנועה בייצור, הדרך הטובה ביותר להפעיל דחיסה היא ליישם אותו ברמת פרוקסי הפוך. אתה יכול להפעיל אותו כאן למטרות בדיקה." diff --git a/public/language/he/admin/settings/general.json b/public/language/he/admin/settings/general.json index 90ff9787d7..3d0cfbd4ba 100644 --- a/public/language/he/admin/settings/general.json +++ b/public/language/he/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "פריסת כותרת", "title-layout-help": "הגדרה כיצד כותרת הדפדפן תהיה מובנית לדוגמא. {pageTitle} | {browserTitle}", "description.placeholder": "תיאור קצר על הקהילה שלך", - "description": "בחר איזה דף יוצג כאשר מנווטים לכתובת ה-URL הראשית של הפורום.", + "description": "תיאור האתר", "keywords": "מילות מפתח של האתר", "keywords-placeholder": "מילות מפתח המתארות את הקהילה שלך, מופרדות באמצעות פסיקים", "logo-and-icons": "לוגו אתר ואייקונים", @@ -51,6 +51,7 @@ "topic-tools": "כלי נושא", "home-page": "דף הבית", "home-page-route": "נתיב דף הבית", + "home-page-description": "בחרו איזה דף יוצג כאשר משתמשים ינווטו לכתובת הראשי של הפורום שלכם.", "custom-route": "נתיב מותאם אישית", "allow-user-home-pages": "אפשר בחירת דף הבית בהגדרות המשתמשים להתאמה אישית", "home-page-title": "כותרת דף הבית (ברירת מחדל \"דף הבית\")", diff --git a/public/language/he/category.json b/public/language/he/category.json index 17abd2c13f..9b27df0cb5 100644 --- a/public/language/he/category.json +++ b/public/language/he/category.json @@ -1,9 +1,11 @@ { "category": "קטגוריה", "subcategories": "קטגוריות משנה", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "נושא חדש", - "guest-login-post": "התחבר כדי לפרסם", - "no-topics": "קטגוריה זו ריקה מנושאים.
למה שלא תנסה להוסיף נושא חדש?", + "guest-login-post": "התחברו כדי לפרסם", + "no-topics": "קטגוריה זו ריקה מנושאים.
למה שלא תנסו להוסיף נושא חדש?", "browsing": "צופים בנושא זה כעת", "no-replies": "אין תגובות", "no-new-posts": "אין פוסטים חדשים.", @@ -13,7 +15,7 @@ "tracking": "מעקב", "not-watching": "לא עוקב", "ignoring": "מתעלם", - "watching.description": "הודע לי על נושאים חדשים.
הצג נושאים שלא נקראו ואחרונים", + "watching.description": "עדכן אותי על נושאים חדשים.
הצג נושאים שלא נקראו ואחרונים", "tracking.description": "מציג נושאים שלא נקראו ואחרונים", "not-watching.description": "הסתר בנושאים שלא נקראו, הצג בנושאים אחרונים", "ignoring.description": "אל תציג נושאים שלא נקראו ואחרונים", diff --git a/public/language/he/error.json b/public/language/he/error.json index 2041b227e1..a57d396600 100644 --- a/public/language/he/error.json +++ b/public/language/he/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "לא ניתן להגיע לשרת בשלב זה. לחצו כאן כדי לנסות שוב, או נסו שוב במועד מאוחר יותר", "invalid-plugin-id": "מזהה תוסף לא תקין", "plugin-not-whitelisted": "לא ניתן להתקין את התוסף – ניתן להתקין דרך הניהול רק תוספים שנמצאים ברשימה הלבנה של מנהל החבילות של NodeBB.", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "אינך רשאי לשנות את מצב הפלאגין כפי שהם מוגדרים בזמן ריצה (config.json, משתני סביבה או ארגומנטים של מסוף), אנא שנה את התצורה במקום זאת.", "theme-not-set-in-configuration": "כאשר מגדירים תוספים פעילים בתצורה, שינוי ערכות נושא מחייב הוספת ערכת הנושא החדשה לרשימת התוספים הפעילים לפני עדכון שלו ב-ACP", "topic-event-unrecognized": "אירוע הנושא '%1' לא מזוהה", @@ -249,7 +250,7 @@ "api.501": "הנתיב אליו אתם מנסים לתקשר עדיין לא מיושם, אנא נסו שוב מחר", "api.503": "הנתיב אליו אתם מנסים לתקשר אינו זמין כעת עקב תצורת שרת", "api.reauth-required": "המשאב שאליו אתה מנסה לגשת דורש אימות (מחודש).", - "activitypub.not-enabled": "Federation is not enabled on this server", + "activitypub.not-enabled": "הפדרציה אינה מופעלת בשרת זה", "activitypub.invalid-id": "לא ניתן לפתור את מזהה הקלט, ככל הנראה מכיוון שהוא פגום.", "activitypub.get-failed": "לא ניתן לאחזר את המשאב שצוין.", "activitypub.pubKey-not-found": "לא ניתן לפתור מפתח ציבורי, ולכן לא ניתן לבצע אימות מטען.", diff --git a/public/language/he/login.json b/public/language/he/login.json index 69ab89cb01..6760e96517 100644 --- a/public/language/he/login.json +++ b/public/language/he/login.json @@ -7,6 +7,6 @@ "failed-login-attempt": "ההתחברות נכשלה", "login-successful": "התחברת בהצלחה!", "dont-have-account": "אין לך חשבון עדיין?", - "logged-out-due-to-inactivity": "התנתקת מפאנל הניהול בעקבות חוסר פעילות", + "logged-out-due-to-inactivity": "התנתקתם מפאנל הניהול בעקבות חוסר פעילות", "caps-lock-enabled": "Caps Lock מופעל" } \ No newline at end of file diff --git a/public/language/he/modules.json b/public/language/he/modules.json index 3cd835e583..fb546965c1 100644 --- a/public/language/he/modules.json +++ b/public/language/he/modules.json @@ -4,7 +4,7 @@ "chat.placeholder": "כתבו את תוכן הפוסט כאן. ניתן לגרור ולשחרר כאן תמונות.", "chat.placeholder.mobile": "הקלידו הודעת צ'אט", "chat.placeholder.message-room": "הודעה #%1", - "chat.scroll-up-alert": "עבור להודעה האחרונה", + "chat.scroll-up-alert": "מעבר להודעה האחרונה", "chat.usernames-and-x-others": "%1 ו-%2 אחרים", "chat.chat-with-usernames": "צ'אט עם %1", "chat.chat-with-usernames-and-x-others": "צ'אט עם %1 ו-%2 אחרים", @@ -16,8 +16,8 @@ "chat.user-typing-n": "%1, %2 ו%3 אחרים מקלידים...", "chat.user-has-messaged-you": "ל%1 יש הודעה עבורכם.", "chat.replying-to": "מגיב ל%1", - "chat.see-all": "צפו בכל הצ'אטים", - "chat.mark-all-read": "סמנו את כל הצ'אטים כ'נקראו'", + "chat.see-all": "צפייה בכל הצ'אטים", + "chat.mark-all-read": "סימון כל הצ'אטים כ'נקראו'", "chat.no-messages": "בחרו משתמש על מנת לראות את שיחות הצ'אט ביניכם", "chat.no-users-in-room": "אין משתמשים בחדר הזה", "chat.recent-chats": "צ'אטים אחרונים", @@ -25,34 +25,34 @@ "chat.message-history": "היסטוריית הודעות", "chat.message-deleted": "ההודעה נמחקה", "chat.options": "אפשרויות צ'אט", - "chat.pop-out": "מזעור חלונית צ'אט", - "chat.minimize": "צמצום", + "chat.pop-out": "הגדלת חלונית צ'אט", + "chat.minimize": "מזעור", "chat.maximize": "הרחבה", "chat.seven-days": "7 ימים", "chat.thirty-days": "30 ימים", "chat.three-months": "3 חודשים", "chat.delete-message-confirm": "האם למחוק הודעה זו?", "chat.retrieving-users": "מאחזר משתמשים...", - "chat.view-users-list": "הצג רשימת משתמשים", + "chat.view-users-list": "הצגת רשימת משתמשים", "chat.pinned-messages": "הודעות מוצמדות", "chat.no-pinned-messages": "אין הודעות מוצמדות", - "chat.pin-message": "הצמד הודעה", - "chat.unpin-message": "בטל את הצמדת ההודעה", + "chat.pin-message": "הצמדת הודעה", + "chat.unpin-message": "ביטול הצמדת הודעה", "chat.public-rooms": "חדרים ציבוריים (%1)", "chat.private-rooms": "חדרים פרטיים (%1)", - "chat.create-room": "צור חדר צ'אט", + "chat.create-room": "יצירת חדר צ'אט", "chat.private.option": "פרטי (גלוי רק למשתמשים שנוספו לחדר)", "chat.public.option": "ציבורי (גלוי לכל משתמש בקבוצות שנבחרו)", - "chat.public.groups-help": "כדי ליצור חדר צ'אט הגלוי לכל המשתמשים בחר \"משתמשים רשומים\" מרשימת הקבוצות.", + "chat.public.groups-help": "כדי ליצור חדר צ'אט הגלוי לכל המשתמשים בחרו ב\"משתמשים רשומים\" מרשימת הקבוצות.", "chat.manage-room": "ניהול חדר צ'אט", - "chat.add-user": "הוסף משתמש", + "chat.add-user": "הוספת משתמש", "chat.notification-settings": "הגדרות התראות", "chat.default-notification-setting": "הגדרת ברירת מחדל להתראות", "chat.notification-setting-room-default": "ברירת המחדל של החדר", "chat.notification-setting-none": "ללא התראות", "chat.notification-setting-at-mention-only": "@אזכור בלבד", "chat.notification-setting-all-messages": "כל ההודעות", - "chat.select-groups": "בחר קבוצות", + "chat.select-groups": "בחירת קבוצות", "chat.add-user-help": "חפשו משתמשים כאן. כאשר משתמש נבחר, הוא יצורף לצ'אט. המשתמש החדש לא יוכל לראות הודעות שנכתבו לפני הצטרפותו. רק מנהלי החדר () יכולים להסיר משתמשים מהצ'אט.", "chat.confirm-chat-with-dnd-user": "משתמש זה שינה את הסטטוס שלו ל'לא להפריע'. אתם עדיין מעוניין לשוחח איתו?", "chat.room-name-optional": "שם חדר (אופציונלי)", @@ -60,17 +60,17 @@ "chat.rename-placeholder": "הזינו את שם החדר שלכם כאן", "chat.rename-help": "שם החדר המוגדר כאן יהיה זמין לכל המשתתפים בחדר.", "chat.leave": "יציאה", - "chat.leave-room": "עזוב חדר", - "chat.leave-prompt": "האם לעזוב שיחה זו?", - "chat.leave-help": "עזיבת שיחה, תסיר אתכם מהתכתבות עתידית בצ'אט זה. אם תצטרפו מחדש בעתיד, לא תראו את היסטוריית הצ'אט שלפני הצטרפותכם מחדש.", + "chat.leave-room": "יציאה מהחדר", + "chat.leave-prompt": "האם לצאת משיחה זו?", + "chat.leave-help": "יציאה משיחה, תסיר אתכם מהתכתבות עתידית בצ'אט זה. אם תצטרפו מחדש בעתיד, לא תראו את היסטוריית הצ'אט שלפני הצטרפותכם מחדש.", "chat.delete": "מחיקה", - "chat.delete-room": "מחק חדר", + "chat.delete-room": "מחיקת חדר", "chat.delete-prompt": "האם אתם בטוחים שברצונכם למחוק את חדר הצ'אט הזה?", "chat.in-room": "בתוך חדר זה", "chat.kick": "הוצאה", - "chat.show-ip": "הצג IP", - "chat.copy-text": "העתק טקסט", - "chat.copy-link": "העתק קישור", + "chat.show-ip": "הצגת IP", + "chat.copy-text": "העתקת טקסט", + "chat.copy-link": "העתקת קישור", "chat.owner": "מנהלי החדר", "chat.grant-rescind-ownership": "הענקת/ביטול בעלות", "chat.system.user-join": "%1 צורף לחדר ", @@ -84,7 +84,7 @@ "composer.user-said": "%1 כתב:", "composer.discard": "האם לבטל את השינויים שנעשו בפוסט זה?", "composer.submit-and-lock": "אשרו ונעלו", - "composer.toggle-dropdown": "הדליקו / כבו את התפריט הנפתח", + "composer.toggle-dropdown": "הצגת תפריט הנפתח", "composer.uploading": "העלאה %1", "composer.formatting.bold": "מודגש", "composer.formatting.italic": "נטוי", @@ -96,7 +96,7 @@ "composer.formatting.heading5": "כותרת 5", "composer.formatting.heading6": "כותרת 6", "composer.formatting.list": "רשימה", - "composer.formatting.strikethrough": "קו פוסל", + "composer.formatting.strikethrough": "קו חוצה", "composer.formatting.code": "קוד", "composer.formatting.link": "קישור", "composer.formatting.picture": "קישור תמונה", @@ -110,7 +110,7 @@ "composer.schedule-date": "תאריך", "composer.schedule-time": "שעה", "composer.cancel-scheduling": "ביטול תזמון", - "composer.change-schedule-date": "שנה תאריך", + "composer.change-schedule-date": "שינוי תאריך", "composer.set-schedule-date": "הגדרת תאריך", "composer.discard-all-drafts": "מחיקת כל הטיוטות", "composer.no-drafts": "אין לכם טיוטות", diff --git a/public/language/he/themes/harmony.json b/public/language/he/themes/harmony.json index 500a923904..f71d306f16 100644 --- a/public/language/he/themes/harmony.json +++ b/public/language/he/themes/harmony.json @@ -13,10 +13,11 @@ "settings.mobileTopicTeasers": "הצגת טיזרים של נושאים בנייד", "settings.stickyToolbar": "הצמד את סרגל הכלים בעת גלילה", "settings.stickyToolbar.help": "סרגל הכלים בדפי נושאים וקטגוריות ייצמד לראש העמוד בעת גלילה", - "settings.topicSidebarTools": "Topic sidebar tools", - "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "הסתרה אוטומטית של סרגל תחתון", - "settings.autohideBottombar.help": "הסרגל התחתון בתצוגת הנייד יוסתר כאשר הדף ייגלל מטה", + "settings.topicSidebarTools": "כלי סרגל הצד", + "settings.topicSidebarTools.help": "אפשרות זו תעביר את כלי הנושא לסרגל הצד במחשבים שולחניים", + "settings.autohideBottombar": "הסתרה אוטומטי של סרגל ניווט בנייד", + "settings.autohideBottombar.help": "הסרגל בתצוגת הנייד יוסתר כאשר הדף ייגלל מטה", + "settings.topMobilebar": "העברת סרגל הניווט בנייד לראש הדף", "settings.openSidebars": "פתח סרגלי צד", "settings.chatModals": "הפעלת צ'אט בחלונית מוקטנת" } \ No newline at end of file diff --git a/public/language/he/unread.json b/public/language/he/unread.json index f18e70d7fd..6a05076592 100644 --- a/public/language/he/unread.json +++ b/public/language/he/unread.json @@ -1,13 +1,13 @@ { "title": "לא נקרא", - "no-unread-topics": "אין נושאים שלא נקראו", + "no-unread-topics": "אין נושאים שלא נקראו.", "load-more": "טען עוד", "mark-as-read": "סמן כנקרא", "mark-as-unread": "סימון כלא נקרא", "selected": "נבחר", "all": "הכל", "all-categories": "כל הקטגוריות", - "topics-marked-as-read.success": "הנושאים שבחרת סומנו כנקרא!", + "topics-marked-as-read.success": "הנושאים שבחרת סומנו כנקראו!", "all-topics": "כל הנושאים", "new-topics": "נושאים חדשים", "watched-topics": "נושאים שאתם עוקבים אחריהם", diff --git a/public/language/he/user.json b/public/language/he/user.json index c850298326..a45f411cd0 100644 --- a/public/language/he/user.json +++ b/public/language/he/user.json @@ -10,10 +10,10 @@ "joindate": "תאריך הצטרפות", "postcount": "כמות פוסטים", "email": "כתובת אימייל", - "confirm-email": "אשר מייל", + "confirm-email": "אישור מייל", "account-info": "פרטי חשבון", "admin-actions-label": "פעולות ניהול", - "ban-account": "הרחק חשבון", + "ban-account": "הרחקת חשבון", "ban-account-confirm": "האם אתהם בטוחים שאתם רוצים להרחיק משתמש זה?", "unban-account": "ביטול הרחקת חשבון", "mute-account": "השתקת חשבון", @@ -40,7 +40,7 @@ "bookmarks": "מועדפים", "watched-categories": "קטגוריות במעקב", "watched-tags": "תגיות במעקב", - "change-all": "שנה הכל", + "change-all": "שינוי הכל", "watched": "נצפה", "ignored": "התעלם", "read": "נקרא", @@ -61,7 +61,7 @@ "new-chat-with": "התחלת צ'אט עם %1", "flag-profile": "דיווח על משתמש", "profile-flagged": "דווח כבר", - "follow": "עקוב", + "follow": "מעקב", "unfollow": "הפסקת מעקב", "cancel-follow": "ביטול בקשת המעקב", "more": "עוד", @@ -147,8 +147,8 @@ "topic-search-help": "החיפוש בתוך הנושא יעקוף את שיטת החיפוש של הדפדפן, ויאפשר לכם לחפש בכל הנושא - ולא רק במה שמוצג על המסך, עם זאת בלחיצה נוספת על Ctrl+F ייפתח לכם החיפוש הרגיל של הדפדפן", "update-url-with-post-index": "עדכון כתובת ה-URL עם אינדקס הפוסט בעת גלישה בנושאים", "scroll-to-my-post": "הצג את הפוסט לאחר פרסום התגובה", - "follow-topics-you-reply-to": "עקוב אחר נושאים שהגבת עליהם", - "follow-topics-you-create": "עקוב אחר נושאים שייצרת", + "follow-topics-you-reply-to": "מעקב אחר נושאים שהגבת עליהם", + "follow-topics-you-create": "מעקב אחר נושאים שייצרת", "grouptitle": "כותרת הקבוצה", "group-order-help": "בחרו קבוצה והשתמשו בחיצים על מנת לסדר כותרות", "show-group-title": "הצגת כותרת קבוצה", diff --git a/public/language/hr/admin/settings/advanced.json b/public/language/hr/admin/settings/advanced.json index cdf6f454c4..ccb4ec6805 100644 --- a/public/language/hr/admin/settings/advanced.json +++ b/public/language/hr/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/hr/admin/settings/general.json b/public/language/hr/admin/settings/general.json index f01ec43454..d21861149a 100644 --- a/public/language/hr/admin/settings/general.json +++ b/public/language/hr/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Raspored naslova", "title-layout-help": "Definiraj kako će naslov pretraživača biti strukturiran npr.: {pageTitle} | {browserTitle}", "description.placeholder": "Kratak opis zajednice", - "description": "Izaberi koja stranica će se prikazivati kada korisnici navigiraju u root URL Vašeg foruma", + "description": "Site Description", "keywords": "Ključne riječi", "keywords-placeholder": "Ključne riječi koje opisuju Vašu zajednicu, odvojeni zarezom", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Naslovnica", "home-page-route": "Putanja naslovnice", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Uobičajna putanja", "allow-user-home-pages": "Dozvoli korisničke naslovnice", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/hr/category.json b/public/language/hr/category.json index 73726a84c7..bd475858e5 100644 --- a/public/language/hr/category.json +++ b/public/language/hr/category.json @@ -1,6 +1,8 @@ { "category": "Kategorija", "subcategories": "Podkategorije", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nova Tema", "guest-login-post": "Prijavi se za objavu", "no-topics": "Nema tema u ovoj kategoriji.
Zašto ne probate napisati novu?", diff --git a/public/language/hr/error.json b/public/language/hr/error.json index 44bf70e78d..63580480e0 100644 --- a/public/language/hr/error.json +++ b/public/language/hr/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/hr/themes/harmony.json b/public/language/hr/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/hr/themes/harmony.json +++ b/public/language/hr/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/hu/admin/settings/advanced.json b/public/language/hu/admin/settings/advanced.json index 7548677a97..74ec70c79e 100644 --- a/public/language/hu/admin/settings/advanced.json +++ b/public/language/hu/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Alapértelmezett: %1", "sockets.delay": "Újracsatlakozási késleltetés", - "analytics.settings": "Analitikai beállítások", - "analytics.max-cache": "Analitikai gyorsítótár maximális értéke", - "analytics.max-cache-help": "Nagy forgalmú telepítéseknél ez a gyorsítótár hamar megtelik, ha az oldalt egyszerrre használó felhasználók száma nagyobb mint a gyorsítótár maximális értéke. (Újraindítás szükséges)", "compression.settings": "Tömörítési beállítások", "compression.enable": "Tömörítés bekapcsolása", "compression.help": "Ez a beállítás engedélyezi a gzip tömörítést. Magas forgalmú weboldal esetén éles környezetbe a legjobb megoldás, ha a reverse proxy szintjén történik ez meg. Bekapcsolhatod kipróbálási céllal." diff --git a/public/language/hu/admin/settings/general.json b/public/language/hu/admin/settings/general.json index 7a9226f00a..29839979b5 100644 --- a/public/language/hu/admin/settings/general.json +++ b/public/language/hu/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Cím formátuma", "title-layout-help": "Add meg, hogy a böngésző cím hogyan épüljön fel. Pl.: {pageTitle} | {browserTitle}", "description.placeholder": "A közösséged rövid leírása", - "description": "Válaszd ki milyen oldal jelenjen meg, amikor a felhasználók fórumod gyökér URL címéhez navigálnak.", + "description": "Site Description", "keywords": "Weboldal kulcsszavak", "keywords-placeholder": "A közösségedet leíró kulcsszavak, vesszővel elválasztva", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Témakör eszközök", "home-page": "Főoldal", "home-page-route": "Főoldal útvonala", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Egyéni útvonal", "allow-user-home-pages": "Felhasználói főoldalak engedélyezése", "home-page-title": "A főoldal címe (alapértelmezés \"Kezdőlap\")", diff --git a/public/language/hu/category.json b/public/language/hu/category.json index 9779cff0aa..6069635538 100644 --- a/public/language/hu/category.json +++ b/public/language/hu/category.json @@ -1,6 +1,8 @@ { "category": "Kategória", "subcategories": "Alkategóriák", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Új témakör", "guest-login-post": "Lépj be a hozzászóláshoz", "no-topics": "Nincs témakör a kategóriában.Miért nem próbálsz létrehozni egyet?", diff --git a/public/language/hu/error.json b/public/language/hu/error.json index 8916a02e0d..a1fb8bde9a 100644 --- a/public/language/hu/error.json +++ b/public/language/hu/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Nem lehet elérni a szervert. Kattints ide az újra próbáláshoz vagy várj egy kicsit", "invalid-plugin-id": "Érvénytelen plugin ID", "plugin-not-whitelisted": "Ez a bővítmény nem telepíthető – csak olyan bővítmények telepíthetőek amiket a NodeBB Package Manager az ACP-n keresztül tud telepíteni", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Témakör esemény '%1' ismeretlen", diff --git a/public/language/hu/themes/harmony.json b/public/language/hu/themes/harmony.json index c6d48ad76a..3be806d84e 100644 --- a/public/language/hu/themes/harmony.json +++ b/public/language/hu/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Oldalsáv nyitása", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/hy/admin/settings/advanced.json b/public/language/hy/admin/settings/advanced.json index 0afd476609..6858f7f6f9 100644 --- a/public/language/hy/admin/settings/advanced.json +++ b/public/language/hy/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Վերլուծության կարգավորումներ", - "analytics.max-cache": "Վերլուծության քեշի առավելագույն արժեքը", - "analytics.max-cache-help": "Մեծ թրաֆիկի տեղադրումների դեպքում քեշը կարող է շարունակաբար սպառվել, եթե միաժամանակ ակտիվ օգտագործողներն ավելի շատ լինեն, քան Max Cache արժեքը: (Պահանջվում է վերագործարկել)", "compression.settings": "Սեղմման կարգավորումներ", "compression.enable": "Միացնել սեղմումը", "compression.help": "արտադրություն, սեղմումը տեղադրելու լավագույն միջոցը այն իրականացնելն է հակառակ պրոքսի մակարդակով: Դուք կարող եք այն միացնել այստեղ՝ թեստավորման նպատակով:" diff --git a/public/language/hy/admin/settings/general.json b/public/language/hy/admin/settings/general.json index 51ddc35d49..ba5240156d 100644 --- a/public/language/hy/admin/settings/general.json +++ b/public/language/hy/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Վերնագրի դասավորություն", "title-layout-help": "Սահմանեք, թե ինչպես է կառուցված բրաուզերի վերնագիրը, այսինքն. {էջի վերնագիր} | {browserTitle}", "description.placeholder": "Ձեր համայնքի մասին կարճ նկարագրություն", - "description": "Ընտրեք, թե որ էջը կցուցադրվի, երբ օգտվողները անցնեն դեպի ձեր ֆորումի արմատային URL-ը:", + "description": "Site Description", "keywords": "Կայքի հիմնաբառեր", "keywords-placeholder": "Ձեր համայնքը նկարագրող հիմնաբառեր՝ բաժանված ստորակետերով", "logo-and-icons": "Կայքի Լոգո և պատկերանշաններ", @@ -51,6 +51,7 @@ "topic-tools": "Թեմայի գործիքներ", "home-page": "Գլխավոր էջ", "home-page-route": "Գլխավոր Էջի ուղեգիծ", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Հատուկ ուղեգիծ", "allow-user-home-pages": "Թույլատրել օգտատիրոջ գլխավոր էջերը", "home-page-title": "Գլխավոր էջի անվանումը (կանխադրված «Գլխավոր»)", diff --git a/public/language/hy/category.json b/public/language/hy/category.json index 5a35ddd815..ec1aec6bae 100644 --- a/public/language/hy/category.json +++ b/public/language/hy/category.json @@ -1,6 +1,8 @@ { "category": "Կատեգորիա", "subcategories": "Ենթակատեգորիաներ", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Նոր թեմա", "guest-login-post": "Մուտք գործեք՝ գրառում կատարելու համար", "no-topics": "Այս բաժնում ոչ մի թեմա չկա։
Գուցե հենց Դո՞ւք ստեղծեք մեկը։", diff --git a/public/language/hy/error.json b/public/language/hy/error.json index 49a58a8222..9605a7f3b1 100644 --- a/public/language/hy/error.json +++ b/public/language/hy/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Այս պահին հնարավոր չէ միանալ սերվերին: Սեղմեք այստեղ՝ նորից փորձելու համար, կամ ավելի ուշ նորից փորձեք", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Հնարավոր չէ տեղադրել plugin – ACP-ի միջոցով կարող են տեղադրվել միայն NodeBB Package Manager-ի կողմից սպիտակ ցուցակում ներառված պլագինները", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "Ձեզ չի թույլատրվում փոխել plugin-ի վիճակը, քանի որ դրանք սահմանված են գործարկման ժամանակ (config.json, շրջակա միջավայրի փոփոխականներ կամ տերմինալի արգումենտներ), փոխարենը փոխեք կազմաձևը:", "theme-not-set-in-configuration": "Կազմաձևում ակտիվ պլագիններ սահմանելիս, թեմաները փոխելիս անհրաժեշտ է ավելացնել նոր թեման ակտիվ հավելումների ցանկում՝ նախքան այն թարմացնելը ACP-ում:", "topic-event-unrecognized": "Թեմայի իրադարձությունը «% 1» անհայտ է", diff --git a/public/language/hy/themes/harmony.json b/public/language/hy/themes/harmony.json index 787a8d7ed5..6bd179fbba 100644 --- a/public/language/hy/themes/harmony.json +++ b/public/language/hy/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "Թեմայի և կատեգորիայի էջերի գործիքագոտին կմնա էջի վերևում", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Ավտոմատ թաքցնել ներքևի բարը", - "settings.autohideBottombar.help": "Բջջային դիտման ներքևի տողը կթաքցվի, երբ էջը ներքև իջացնեք", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Բացել կողքի տողերը", "settings.chatModals": "Միացնել զրույցի ռեժիմները" } \ No newline at end of file diff --git a/public/language/id/admin/settings/advanced.json b/public/language/id/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/id/admin/settings/advanced.json +++ b/public/language/id/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/id/admin/settings/general.json b/public/language/id/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/id/admin/settings/general.json +++ b/public/language/id/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/id/category.json b/public/language/id/category.json index 3acd7c111e..10ad65a691 100644 --- a/public/language/id/category.json +++ b/public/language/id/category.json @@ -1,6 +1,8 @@ { "category": "Kategori", "subcategories": "Subkategori", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Topik Baru", "guest-login-post": "Masuk untuk memposting", "no-topics": "Tidak ada topik dikategori ini
Mengapa anda tidak mencoba membuat yang baru?", diff --git a/public/language/id/error.json b/public/language/id/error.json index 48c708f31a..7b31b66311 100644 --- a/public/language/id/error.json +++ b/public/language/id/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/id/themes/harmony.json b/public/language/id/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/id/themes/harmony.json +++ b/public/language/id/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/it/admin/settings/advanced.json b/public/language/it/admin/settings/advanced.json index 2948f4fe4f..6b780c5747 100644 --- a/public/language/it/admin/settings/advanced.json +++ b/public/language/it/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Predefinito: %1", "sockets.delay": "Ritardo di riconnessione", - "analytics.settings": "Impostazioni di analisi", - "analytics.max-cache": "Analisi valore massimo cache", - "analytics.max-cache-help": "Nelle installazioni ad alto traffico, la cache potrebbe esaurirsi continuamente se ci sono più utenti attivi contemporanei rispetto al valore Max Cache. (Riavvio richiesto)", "compression.settings": "Impostazioni compressione", "compression.enable": "Abilita compressione", "compression.help": "Questa impostazione abilita la compressione gzip. Per un sito Web ad alto traffico in produzione, il modo migliore per implementare la compressione a livello di proxy inverso. È possibile abilitarlo qui a scopo di test." diff --git a/public/language/it/admin/settings/general.json b/public/language/it/admin/settings/general.json index 32cb5f7f82..f0a5c1ed0d 100644 --- a/public/language/it/admin/settings/general.json +++ b/public/language/it/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Layout del Titolo", "title-layout-help": "Definire come sarà strutturato il titolo del browser, ad es. {pageTitle} | {browserTitle}", "description.placeholder": "Una breve descrizione della tua comunità", - "description": "Scegliere quale pagina visualizzare quando gli utenti navigano all'URL principale del forum.", + "description": "Site Description", "keywords": "Parole chiave del sito", "keywords-placeholder": "Parole chiave che descrivono la vostra comunità, separate da virgole", "logo-and-icons": "Logo e icone del sito", @@ -51,6 +51,7 @@ "topic-tools": "Strumenti discussione", "home-page": "Pagina Iniziale", "home-page-route": "Percorso Pagina Iniziale", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Percorso personalizzato", "allow-user-home-pages": "Consenti Pagina Iniziale Utente", "home-page-title": "Titolo della pagina iniziale (impostazione predefinita \"Home\")", diff --git a/public/language/it/category.json b/public/language/it/category.json index 0cb69d20c9..d0a935a983 100644 --- a/public/language/it/category.json +++ b/public/language/it/category.json @@ -1,6 +1,8 @@ { "category": "Categoria", "subcategories": "Sottocategorie", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nuova Discussione", "guest-login-post": "Accedi per postare", "no-topics": "Non ci sono discussioni in questa categoria.
Perché non ne posti una?", diff --git a/public/language/it/error.json b/public/language/it/error.json index d24d4b0cc3..e40a94c23d 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Impossibile raggiungere il server al momento. Clicca qui per riprovare o riprova in un secondo momento", "invalid-plugin-id": "ID plugin non valido", "plugin-not-whitelisted": "Impossibile installare il plug-in & solo i plugin nella whitelist del Gestione Pacchetti di NodeBB possono essere installati tramite ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "Non è possibile modificare lo stato dei plugin, poiché sono definiti in fase di esecuzione. (config.json, variabili ambientali o argomenti del terminale); modificare invece la configurazione.", "theme-not-set-in-configuration": "Quando si definiscono i plugin attivi nella configurazione, la modifica dei temi richiede l'aggiunta del nuovo tema all'elenco dei plugin attivi prima di aggiornarlo nell'ACP", "topic-event-unrecognized": "Evento discussione '%1' non riconosciuto", diff --git a/public/language/it/pages.json b/public/language/it/pages.json index 5038b2f486..351226874b 100644 --- a/public/language/it/pages.json +++ b/public/language/it/pages.json @@ -36,7 +36,7 @@ "chat": "In chat con %1", "flags": "Segnalazioni", "flag-details": "Dettagli segnalazione %1", - "world": "World", + "world": "Mondo", "account/edit": "Modifica di \"%1\"", "account/edit/password": "Modificando la password di \"%1\"", "account/edit/username": "Modificando il nome utente di \"%1\"", @@ -63,7 +63,7 @@ "account/blocks": "Utenti bloccati per %1", "account/uploads": "Inviati da %1", "account/sessions": "Sessioni di accesso", - "account/shares": "Topics shared by %1", + "account/shares": "Discussioni condivise da %1", "confirm": "Email Confermata", "maintenance.text": "%1è attualmente in fase di manutenzione.
Per favore torna un'altra volta.", "maintenance.messageIntro": "Inoltre, l'amministratore ha lasciato questo messaggio:", diff --git a/public/language/it/recent.json b/public/language/it/recent.json index 810038d872..2ff5b581b5 100644 --- a/public/language/it/recent.json +++ b/public/language/it/recent.json @@ -8,6 +8,6 @@ "no-recent-topics": "Non ci sono discussioni recenti.", "no-popular-topics": "Non ci sono discussioni popolari.", "load-new-posts": "Carica nuovi post", - "uncategorized.title": "All known topics", + "uncategorized.title": "Tutte le discussioni note", "uncategorized.intro": "This page shows a chronological listing of every topic that this forum has received.
The views and opinions expressed in the topics below are not moderated and may not represent the views and opinions of this website." } \ No newline at end of file diff --git a/public/language/it/themes/harmony.json b/public/language/it/themes/harmony.json index f52afb85ec..8ce6b71e02 100644 --- a/public/language/it/themes/harmony.json +++ b/public/language/it/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "La barra degli strumenti nelle pagine delle discussioni e delle categorie si attacca alla parte superiore della pagina.", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Nascondi automaticamente la barra inferiore", - "settings.autohideBottombar.help": "La barra inferiore nella visualizzazione mobile sarà nascosta quando la pagina viene fatta scorrere verso il basso.", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Apri le barre laterali", "settings.chatModals": "Abilita i modali della chat" } \ No newline at end of file diff --git a/public/language/it/user.json b/public/language/it/user.json index f44e508d07..d33709d1ac 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -47,7 +47,7 @@ "default-category-watch-state": "Stato di controllo della categoria predefinita", "followers": "Da chi è seguito", "following": "Chi segue", - "shares": "Shares", + "shares": "Condivisioni", "blocks": "Blocchi", "blocked-users": "Utenti bloccati", "block-toggle": "Gestisci blocco", @@ -60,10 +60,10 @@ "chat-with": "Continua la chat con %1", "new-chat-with": "Inizia una nuova chat con %1", "flag-profile": "Segnala Profilo", - "profile-flagged": "Already flagged", + "profile-flagged": "Già segnalato", "follow": "Segui", "unfollow": "Smetti di seguire", - "cancel-follow": "Cancel follow request", + "cancel-follow": "Annulla richiesta di segui", "more": "Altro", "profile-update-success": "Profilo aggiornato correttamente!", "change-picture": "Cambia Foto", @@ -123,7 +123,7 @@ "has-no-downvoted-posts": "Questo utente non ha ancora votato negativamente alcun post", "has-no-controversial-posts": "Questo utente non ha ancora nessun post votato negativamente.", "has-no-blocks": "Non hai bloccato utenti.", - "has-no-shares": "This user has not shared any topics.", + "has-no-shares": "Questo utente non ha condiviso alcuna discussioni.", "email-hidden": "Email Nascosta", "hidden": "nascosta", "paginate-description": "Impagina discussioni e post invece di utilizzare lo scorrimento infinito", diff --git a/public/language/ja/admin/settings/advanced.json b/public/language/ja/admin/settings/advanced.json index 72ad0891bf..7aafbb94f0 100644 --- a/public/language/ja/admin/settings/advanced.json +++ b/public/language/ja/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/ja/admin/settings/general.json b/public/language/ja/admin/settings/general.json index a7d62d281c..2d79a2bc35 100644 --- a/public/language/ja/admin/settings/general.json +++ b/public/language/ja/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "タイトル配置", "title-layout-help": "ブラウザのタイトルがどのように構成されるかを定義します。{pageTitle} | {browserTitle}", "description.placeholder": "あなたのコミュニティについての簡単な説明", - "description": "ユーザーがあなたのフォーラムのルートURLに移動するときに表示されるページを選択します。", + "description": "Site Description", "keywords": "サイトのキーワード", "keywords-placeholder": "あなたのコミュニティを記述するキーワード、カンマ区切り", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "ホームページ", "home-page-route": "ホームページのルート", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "カスタムルート", "allow-user-home-pages": "ユーザーホームページを有効にする", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/ja/category.json b/public/language/ja/category.json index 320ff70d34..84639c650e 100644 --- a/public/language/ja/category.json +++ b/public/language/ja/category.json @@ -1,6 +1,8 @@ { "category": "カテゴリ", "subcategories": "サブカテゴリ", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "新規スレッド", "guest-login-post": "投稿するにはログインしてください", "no-topics": "まだスレッドはありません
最初のスレッドを書いてみませんか?", diff --git a/public/language/ja/error.json b/public/language/ja/error.json index 71927aed4c..00ff74b1cc 100644 --- a/public/language/ja/error.json +++ b/public/language/ja/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/ja/themes/harmony.json b/public/language/ja/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/ja/themes/harmony.json +++ b/public/language/ja/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/ko/admin/settings/advanced.json b/public/language/ko/admin/settings/advanced.json index 6f030d4aaa..6b49fdd2fe 100644 --- a/public/language/ko/admin/settings/advanced.json +++ b/public/language/ko/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "기본값: %1", "sockets.delay": "재연결 지연", - "analytics.settings": "분석 설정", - "analytics.max-cache": "분석 캐시 최대 값", - "analytics.max-cache-help": "높은 트래픽 상황에서 동시에 활성 사용자 수가 최대 캐시 값보다 많으면 캐시가 지속적으로 고갈될 수 있습니다. (다시 시작 필요)", "compression.settings": "압축 설정", "compression.enable": "압축 사용", "compression.help": "이 설정은 gzip 압축을 활성화합니다. 운영 중인 높은 트래픽 웹 사이트의 경우 최상의 방법은 역방향 프록시 수준에서 압축을 구현하는 것입니다. 여기에서 테스트 목적으로 활성화할 수 있습니다." diff --git a/public/language/ko/admin/settings/general.json b/public/language/ko/admin/settings/general.json index c489bc7ba1..0756494d50 100644 --- a/public/language/ko/admin/settings/general.json +++ b/public/language/ko/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "제목 레이아웃", "title-layout-help": "브라우저 제목을 구성할 방식을 정의합니다. 예를 들어, {pageTitle} | {browserTitle} 형식으로 구성됩니다.", "description.placeholder": "커뮤니티에 대한 간단한 설명", - "description": "사용자가 포럼의 루트 URL로 이동할 때 표시되는 페이지를 선택합니다.", + "description": "Site Description", "keywords": "사이트 키워드", "keywords-placeholder": "커뮤니티를 설명하는 키워드, 쉼표로 구분", "logo-and-icons": "사이트 로고 & 아이콘", @@ -51,6 +51,7 @@ "topic-tools": "토픽 도구", "home-page": "홈 페이지", "home-page-route": "홈 페이지 경로", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "사용자 정의 경로", "allow-user-home-pages": "사용자 홈 페이지 허용", "home-page-title": "홈 페이지 제목 (default \"Home\")", diff --git a/public/language/ko/category.json b/public/language/ko/category.json index f50c4e9ace..f23eb362e4 100644 --- a/public/language/ko/category.json +++ b/public/language/ko/category.json @@ -1,6 +1,8 @@ { "category": "카테고리", "subcategories": "하위 카테고리", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "새 토픽", "guest-login-post": "게시물을 작성하려면 로그인하세요.", "no-topics": "이 카테고리에는 토픽이 없습니다.
한 가지 올려보는 건 어떨까요?", diff --git a/public/language/ko/error.json b/public/language/ko/error.json index 8f7c42ca71..cd92a20de1 100644 --- a/public/language/ko/error.json +++ b/public/language/ko/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "현재 서버에 연결할 수 없습니다. 여기를 클릭 후 다시 시도하거나 나중에 다시 시도하세요", "invalid-plugin-id": "잘못된 플러그인 ID", "plugin-not-whitelisted": "플러그인을 설치할 수 없습니다 - NodeBB 패키지 관리자에서 허용목록에 등록된 플러그인만 ACP를 통해 설치할 수 있습니다", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "실행 중에 정의된 플러그인 상태를 변경할 수 없습니다 (config.json, 환경 변수 또는 터미널 인수). 대신 구성을 수정하세요.", "theme-not-set-in-configuration": "구성에서 활성 플러그인을 정의할 때 새 테마를 추가하기 전에 ACP에서 테마를 업데이트해야 합니다", "topic-event-unrecognized": "토픽 이벤트 '%1' 인식되지 않았습니다", diff --git a/public/language/ko/themes/harmony.json b/public/language/ko/themes/harmony.json index a8d98525b6..d5ba1daaee 100644 --- a/public/language/ko/themes/harmony.json +++ b/public/language/ko/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "토픽 및 카테고리 페이지의 툴바가 페이지 상단에 고정됩니다.", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "하단 바 자동 숨기기", - "settings.autohideBottombar.help": "모바일 뷰에서 페이지가 아래로 스크롤될 때 하단 막대가 숨겨집니다.", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "사이드바 열기", "settings.chatModals": "채팅 모달 활성화" } \ No newline at end of file diff --git a/public/language/lt/admin/settings/advanced.json b/public/language/lt/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/lt/admin/settings/advanced.json +++ b/public/language/lt/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/lt/admin/settings/general.json b/public/language/lt/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/lt/admin/settings/general.json +++ b/public/language/lt/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/lt/category.json b/public/language/lt/category.json index 2955e922c4..2438050680 100644 --- a/public/language/lt/category.json +++ b/public/language/lt/category.json @@ -1,6 +1,8 @@ { "category": "Kategorija", "subcategories": "Subkategorijos", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nauja tema", "guest-login-post": "Prisijungti įrašų paskelbimui", "no-topics": "Šioje kategorijoje temų nėra.
Kodėl gi jums nesukūrus naujos?", diff --git a/public/language/lt/error.json b/public/language/lt/error.json index f9c57c0052..5251f16d0f 100644 --- a/public/language/lt/error.json +++ b/public/language/lt/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/lt/themes/harmony.json b/public/language/lt/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/lt/themes/harmony.json +++ b/public/language/lt/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/lv/admin/settings/advanced.json b/public/language/lv/admin/settings/advanced.json index 1899c0dd8f..3ab713e0b4 100644 --- a/public/language/lv/admin/settings/advanced.json +++ b/public/language/lv/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/lv/admin/settings/general.json b/public/language/lv/admin/settings/general.json index eaef60c569..fabfbb824e 100644 --- a/public/language/lv/admin/settings/general.json +++ b/public/language/lv/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Virsraksta izkārtojums", "title-layout-help": "Noteikt, kā virsraksts pārlūkā tiks izkārtots, t.i., {pageTitle} | {browserTitle}", "description.placeholder": "Īss foruma apraksts", - "description": "Izvēlies, kādu lapu rādīt, kad lietotājs izvēlas foruma saknes URL.", + "description": "Site Description", "keywords": "Foruma atslēgvārdi", "keywords-placeholder": "Atslēgvārdi, kas apraksta forumu, atdalīti ar komatu", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Sākums", "home-page-route": "Sākumlapas ceļš", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Pielāgotais ceļš", "allow-user-home-pages": "Atļaut lietotājiem savas mājaslapas", "home-page-title": "Sākumlapas titulis (pēc noklusējuma \"Sākums\")", diff --git a/public/language/lv/category.json b/public/language/lv/category.json index c13c0a2508..31f18e247d 100644 --- a/public/language/lv/category.json +++ b/public/language/lv/category.json @@ -1,6 +1,8 @@ { "category": "Kategorija", "subcategories": "Apakškategorijas", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Izveidot jaunu tematu", "guest-login-post": "Ielogojies lai rakstītu", "no-topics": "Šinī kategorijā nav rakstu.
Vēlies izveidot kādu rakstu?", diff --git a/public/language/lv/error.json b/public/language/lv/error.json index 6c23706ed0..ee00b5faac 100644 --- a/public/language/lv/error.json +++ b/public/language/lv/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/lv/themes/harmony.json b/public/language/lv/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/lv/themes/harmony.json +++ b/public/language/lv/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/ms/admin/settings/advanced.json b/public/language/ms/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/ms/admin/settings/advanced.json +++ b/public/language/ms/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/ms/admin/settings/general.json b/public/language/ms/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/ms/admin/settings/general.json +++ b/public/language/ms/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/ms/category.json b/public/language/ms/category.json index d967bca72c..b5270c1c75 100644 --- a/public/language/ms/category.json +++ b/public/language/ms/category.json @@ -1,6 +1,8 @@ { "category": "Kategori", "subcategories": "Subkategori", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Topik Baru", "guest-login-post": "Log masuk untuk kirim", "no-topics": "Tiada topik dalam kategori ini.
Cuba hantar topik yang baru?", diff --git a/public/language/ms/error.json b/public/language/ms/error.json index a27c91df3e..a88b269748 100644 --- a/public/language/ms/error.json +++ b/public/language/ms/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/ms/themes/harmony.json b/public/language/ms/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/ms/themes/harmony.json +++ b/public/language/ms/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/nb/admin/manage/categories.json b/public/language/nb/admin/manage/categories.json index 17d6c8267d..fadadac3ba 100644 --- a/public/language/nb/admin/manage/categories.json +++ b/public/language/nb/admin/manage/categories.json @@ -7,7 +7,7 @@ "privileges": "Rettigheter", "back-to-categories": "Tilbake til kategorier", "name": "Kategorinavn", - "handle": "Category Handle", + "handle": "Kategoristi", "handle.help": "Your category handle is used as a representation of this category across other networks, similar to a username. A category handle must not match an existing username or user group.", "description": "Kategoribeskrivelse", "bg-color": "Bakgrunnsfarge", @@ -39,7 +39,7 @@ "disable": "Deaktiver", "edit": "Rediger", "analytics": "Analyser", - "federation": "Federation", + "federation": "Føderasjon", "view-category": "Vis kategori", "set-order": "Sett rekkefølge", @@ -82,18 +82,18 @@ "federation.title": "Federation settings for \"%1\" category", "federation.disabled": "Federation is disabled site-wide, so category federation settings are currently unavailable.", "federation.disabled-cta": "Federation Settings →", - "federation.syncing-header": "Synchronization", + "federation.syncing-header": "Synkronisering", "federation.syncing-intro": "A category can follow a \"Group Actor\" via the ActivityPub protocol. If content is received from one of the actors listed below, it will be automatically added to this category.", "federation.syncing-caveat": "N.B. Setting up syncing here establishes a one-way synchronization. NodeBB attempts to subscribe/follow the actor, but the reverse cannot be assumed.", "federation.syncing-none": "This category is not currently following anybody.", - "federation.syncing-add": "Synchronize with...", - "federation.syncing-actorUri": "Actor", - "federation.syncing-follow": "Follow", - "federation.syncing-unfollow": "Unfollow", + "federation.syncing-add": "Synkroniser med...", + "federation.syncing-actorUri": "Aktør", + "federation.syncing-follow": "Følg", + "federation.syncing-unfollow": "Avfølg", "federation.followers": "Remote users following this category", "federation.followers-handle": "Handle", "federation.followers-id": "ID", - "federation.followers-none": "No followers.", + "federation.followers-none": "Ingen følgere", "alert.created": "Opprettet", "alert.create-success": "Kategori opprettet!", diff --git a/public/language/nb/admin/menu.json b/public/language/nb/admin/menu.json index ebf15d0d34..6c51ad8ccf 100644 --- a/public/language/nb/admin/menu.json +++ b/public/language/nb/admin/menu.json @@ -38,7 +38,7 @@ "settings/tags": "Emneord", "settings/notifications": "Varsler", "settings/api": "API-tilgang", - "settings/activitypub": "Federation (ActivityPub)", + "settings/activitypub": "Føderasjon (ActivityPub)", "settings/sounds": "Lyder", "settings/social": "Sosialt", "settings/cookies": "Informasjonskapsler", diff --git a/public/language/nb/admin/settings/activitypub.json b/public/language/nb/admin/settings/activitypub.json index 94f9ad7822..5ad03708e4 100644 --- a/public/language/nb/admin/settings/activitypub.json +++ b/public/language/nb/admin/settings/activitypub.json @@ -12,13 +12,13 @@ "allowLoopback": "Allow loopback processing", "allowLoopback-help": "Useful for debugging purposes only. You should probably leave this disabled.", - "probe": "Open in App", + "probe": "Åpne i app", "probe-enabled": "Try to open ActivityPub-enabled resources in NodeBB", "probe-enabled-help": "If enabled, NodeBB will check every external link for an ActivityPub equivalent, and load it in NodeBB instead.", "probe-timeout": "Lookup Timeout (milliseconds)", "probe-timeout-help": "(Default: 2000) If the lookup query does not receive a response within the set timeframe, will send the user to the link directly instead. Adjust this number higher if sites are responding slowly and you wish to give extra time.", - "server-filtering": "Filtering", + "server-filtering": "Filtrering", "count": "This NodeBB is currently aware of %1 server(s)", "server.filter-help": "Specify servers you would like to bar from federating with your NodeBB. Alternatively, you may opt to selectively allow federation with specific servers, instead. Both options are supported, although they are mutually exclusive.", "server.filter-help-hostname": "Enter just the instance hostname below (e.g. example.org), separated by line breaks.", diff --git a/public/language/nb/admin/settings/advanced.json b/public/language/nb/admin/settings/advanced.json index f1be4b2bff..ab1578ac7d 100644 --- a/public/language/nb/admin/settings/advanced.json +++ b/public/language/nb/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Standard: %1", "sockets.delay": "Forsinkelse ved tilkobling på nytt", - "analytics.settings": "Innstillinger for analyse", - "analytics.max-cache": "Maksimal verdi for analysedatahurtigbuffer", - "analytics.max-cache-help": "På installasjoner med høy trafikk kan hurtigbufferen bli kontinuerlig brukt opp hvis det er flere aktive brukere samtidig enn den maksimale hurtigbufferen tillater. (Omstart kreves)", "compression.settings": "Innstillinger for komprimering", "compression.enable": "Aktiver komprimering", "compression.help": "Denne innstillingen aktiverer gzip-komprimering. For nettsteder med høy trafikk anbefales det å implementere komprimering på omvendt proxy-nivå. Du kan aktivere det her for testformål." diff --git a/public/language/nb/admin/settings/general.json b/public/language/nb/admin/settings/general.json index c8960ad53a..17d717b787 100644 --- a/public/language/nb/admin/settings/general.json +++ b/public/language/nb/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Tittellayout", "title-layout-help": "Definer hvordan nettlesertittelen skal struktureres, f.eks. {pageTitle} | {browserTitle}", "description.placeholder": "En kort beskrivelse av fellesskapet ditt", - "description": "Velg hvilken side som vises når brukere navigerer til rot-URL-en for forumet ditt.", + "description": "Site Description", "keywords": "Nøkkelord for nettstedet", "keywords-placeholder": "Nøkkelord som beskriver fellesskapet ditt, kommaseparert", "logo-and-icons": "Logo og ikoner for nettstedet", @@ -51,6 +51,7 @@ "topic-tools": "Verktøy for emner", "home-page": "Hjemmeside", "home-page-route": "Rute for hjemmeside", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Egendefinert rute", "allow-user-home-pages": "Tillat brukerspesifikke hjemmesider", "home-page-title": "Tittel på hjemmesiden (standard: \"Hjem\")", diff --git a/public/language/nb/category.json b/public/language/nb/category.json index 91e5e13598..011cbe99fc 100644 --- a/public/language/nb/category.json +++ b/public/language/nb/category.json @@ -1,6 +1,8 @@ { "category": "Kategori", "subcategories": "Underkategorier", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nytt emne", "guest-login-post": "Logg inn for å publisere innlegg", "no-topics": "Denne kategorien er foreløpig tom.
Har du noe å dele? Opprett et innlegg her!", diff --git a/public/language/nb/error.json b/public/language/nb/error.json index e9d3700379..560fdc0b6a 100644 --- a/public/language/nb/error.json +++ b/public/language/nb/error.json @@ -232,10 +232,11 @@ "socket-reconnect-failed": "Får ikke tilgang til serveren for øyeblikket. Klikk her for å prøve igjen, eller prøv igjen senere", "invalid-plugin-id": "Ugyldig innstikk-ID", "plugin-not-whitelisted": "Ute av stand til å installere tillegget – bare tillegg som er hvitelistet av NodeBB sin pakkebehandler kan bli installert via administratorkontrollpanelet", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "Du har ikke tillatelse til å endre plugin-status da de er definert under kjøring (config.json, miljøvariabler eller terminalargumenter)Vennligst endre konfigurasjonen i stedet.", "theme-not-set-in-configuration": "Når aktive plugins er definert i konfigurasjonen, krever endring av tema at det nye temaet legges til i listen over aktive plugins før det oppdateres i ACP.", "topic-event-unrecognized": "Trådhendelse '%1' er ukjent", - "category.handle-taken": "Category handle is already taken, please choose another.", + "category.handle-taken": "Kategoristi er allerede tatt, velg noe annet.", "cant-set-child-as-parent": "Kan ikke sette underkategori til hovedkategori", "cant-set-self-as-parent": "Kan ikke sette denne som hovedkategori", "api.master-token-no-uid": "Et master token ble mottatt uten korresponderende `_uid` i request body", @@ -249,10 +250,10 @@ "api.501": "Ruten du prøver å kalle er ikke implementert enda. Prøv igjen i morgen", "api.503": "Ruten du prøver å kalle er for øyeblikket ikke tilgjengelig grunnet innstilling på serveren", "api.reauth-required": "Ressursen du prøver å få tilgang til krever (re-)autentisering.", - "activitypub.not-enabled": "Federation is not enabled on this server", - "activitypub.invalid-id": "Unable to resolve the input id, likely as it is malformed.", - "activitypub.get-failed": "Unable to retrieve the specified resource.", - "activitypub.pubKey-not-found": "Unable to resolve public key, so payload verification cannot take place.", + "activitypub.not-enabled": "Føderasjon er ikke aktivert på denne serveren", + "activitypub.invalid-id": "Kan ikke løse opp input-ID-en, sannsynligvis fordi den er ugyldig.", + "activitypub.get-failed": "Kan ikke hente den angitte ressursen.", + "activitypub.pubKey-not-found": "Kan ikke løse opp offentlig nøkkel, så verifisering av nyttelasten kan ikke gjennomføres.", "activitypub.origin-mismatch": "The received object's origin does not match the sender's origin", "activitypub.actor-mismatch": "The received activity is being carried out by an actor that is different from expected.", "activitypub.not-implemented": "The request was denied because it or an aspect of it is not implemented by the recipient server" diff --git a/public/language/nb/global.json b/public/language/nb/global.json index 1e79477472..86a0654284 100644 --- a/public/language/nb/global.json +++ b/public/language/nb/global.json @@ -50,7 +50,7 @@ "header.navigation": "Navigasjon", "header.manage": "Administrer", "header.drafts": "Utkast", - "header.world": "World", + "header.world": "Verden", "notifications.loading": "Laster varsler", "chats.loading": "Laster samtaler", "drafts.loading": "Laster utkast", @@ -111,7 +111,7 @@ "dnd": "Ikke forstyrr", "invisible": "Usynlig", "offline": "Frakoblet", - "remote-user": "This user is from outside of this forum", + "remote-user": "Denne brukeren er fra utsiden av dette forumet.", "email": "E-post", "language": "Språk", "guest": "Gjest", diff --git a/public/language/nb/modules.json b/public/language/nb/modules.json index e11a03e664..0ed1b210cf 100644 --- a/public/language/nb/modules.json +++ b/public/language/nb/modules.json @@ -115,8 +115,8 @@ "composer.discard-all-drafts": "Forkast alle utkast", "composer.no-drafts": "Du har ingen utkast", "composer.discard-draft-confirm": "Vil du forkaste dette utkastet?", - "composer.remote-pid-editing": "Editing a remote post", - "composer.remote-pid-content-immutable": "The content of remote posts cannot be edited. However, you are able change the topic title and tags.", + "composer.remote-pid-editing": "Redigerer et eksternt innlegg", + "composer.remote-pid-content-immutable": "Innholdet i eksterne innlegg kan ikke redigeres. Du kan imidlertid endre emnetittel og merkelapper.", "bootbox.ok": "OK", "bootbox.cancel": "Avbryt", "bootbox.confirm": "Bekreft", diff --git a/public/language/nb/notifications.json b/public/language/nb/notifications.json index 115879e8ec..eb518f1378 100644 --- a/public/language/nb/notifications.json +++ b/public/language/nb/notifications.json @@ -99,8 +99,8 @@ "notificationType-new-post-flag": "Når ett nytt innlegg er flagget", "notificationType-new-user-flag": "Når en bruker er flagget", "notificationType-new-reward": "Når du får en ny tildelning", - "activitypub.announce": "%1 shared your post in %2 to their followers.", - "activitypub.announce-dual": "%1 and %2 shared your post in %3 to their followers.", - "activitypub.announce-triple": "%1, %2 and %3 shared your post in %4 to their followers.", - "activitypub.announce-multiple": "%1, %2 and %3 others shared your post in %4 to their followers." + "activitypub.announce": "%1 delte din post i %2 til sine følgere.", + "activitypub.announce-dual": "%1 og %2 delte din post i %3 til sine følgere.", + "activitypub.announce-triple": "%1, %2 og %3 delte din post i %4 til sine følgere.", + "activitypub.announce-multiple": "%1, %2 og %3 andre delte din post i %4 til sine følgere." } \ No newline at end of file diff --git a/public/language/nb/pages.json b/public/language/nb/pages.json index bfeaece7e9..cda6874860 100644 --- a/public/language/nb/pages.json +++ b/public/language/nb/pages.json @@ -36,7 +36,7 @@ "chat": "Samtale med %1", "flags": "Flagg", "flag-details": "Flagg %1 detaljer", - "world": "World", + "world": "Verden", "account/edit": "Endrer \"%1\"", "account/edit/password": "Redigeringspassord for \"%1\"", "account/edit/username": "Rediger brukernavnet til \"%1\"", @@ -63,7 +63,7 @@ "account/blocks": "Brukere blokkert av %1", "account/uploads": "Opplastninger av %1", "account/sessions": "Påloggingsøkter", - "account/shares": "Topics shared by %1", + "account/shares": "Emner delt av %1", "confirm": "E-post bekreftet", "maintenance.text": "%1 er for øyeblikket under vedlikehold.
Vennligst kom tilbake en annen gang.", "maintenance.messageIntro": "I tillegg har administratoren skrevet denne meldingen:", diff --git a/public/language/nb/recent.json b/public/language/nb/recent.json index c3a05198b5..e8ec1af77b 100644 --- a/public/language/nb/recent.json +++ b/public/language/nb/recent.json @@ -8,6 +8,6 @@ "no-recent-topics": "Det er ingen nye emner.", "no-popular-topics": "Det er ingen populære emner.", "load-new-posts": "Last inn nye innlegg", - "uncategorized.title": "All known topics", - "uncategorized.intro": "This page shows a chronological listing of every topic that this forum has received.
The views and opinions expressed in the topics below are not moderated and may not represent the views and opinions of this website." + "uncategorized.title": "Alle kjente emner", + "uncategorized.intro": "Denne siden viser en kronologisk liste over alle emner som dette forumet har mottatt.
Meningene og synspunktene som uttrykkes i emnene nedenfor, er ikke moderert og representerer kanskje ikke meningene og synspunktene til denne nettsiden." } \ No newline at end of file diff --git a/public/language/nb/themes/harmony.json b/public/language/nb/themes/harmony.json index bd6204cb1a..f9c66e050b 100644 --- a/public/language/nb/themes/harmony.json +++ b/public/language/nb/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "Verktøylinjen på emne- og kategorisider vil feste seg til toppen av siden", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Skjul bunnlinjen automatisk", - "settings.autohideBottombar.help": "Bunnlinjen i mobilvisning skjules automatisk når siden rulles ned", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Åpne sidepaneler", "settings.chatModals": "Aktiver chat-modaler" } \ No newline at end of file diff --git a/public/language/nb/topic.json b/public/language/nb/topic.json index 21646ac420..0ff7f17abf 100644 --- a/public/language/nb/topic.json +++ b/public/language/nb/topic.json @@ -61,8 +61,8 @@ "user-restored-topic-on": "%1 gjenopprettet dette menet på %2", "user-moved-topic-from-ago": "%1 flyttet dette emnet fra %2 %3", "user-moved-topic-from-on": "%1 flyttet dette emnet fra %2 på %3", - "user-shared-topic-ago": "%1 shared this topic %2", - "user-shared-topic-on": "%1 shared this topic on %2", + "user-shared-topic-ago": "%1 delte dette emnet %2", + "user-shared-topic-on": "%1 delte dette emnet på %2", "user-queued-post-ago": "%1 i kø post til godkjenning %3", "user-queued-post-on": "%1 i køpost til godkjenning %3", "user-referenced-topic-ago": "%1 refererte dette emnet %3", @@ -137,7 +137,7 @@ "bookmarks": "Bokmerker", "bookmarks.has-no-bookmarks": "Du har ikke bokmerket noen innlegg ennå.", "copy-permalink": "Kopier permanent lenke", - "go-to-original": "View Original Post", + "go-to-original": "Vis innlegg", "loading-more-posts": "Laster flere innlegg", "move-topic": "Flytt tråd", "move-topics": "Flytt tråder", @@ -223,6 +223,6 @@ "post-tools": "Innleggsverktøy", "unread-posts-link": "Lenke til uleste innlegg", "thumb-image": "Miniatyrbilde for emne", - "announcers": "Shares", - "announcers-x": "Shares (%1)" + "announcers": "Delinger", + "announcers-x": "Delinger (%1)" } \ No newline at end of file diff --git a/public/language/nb/user.json b/public/language/nb/user.json index da9b6365ff..9c22c99c1b 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -47,7 +47,7 @@ "default-category-watch-state": "Standard følgesstatus for kategorier", "followers": "Følgere", "following": "Følger", - "shares": "Shares", + "shares": "Delinger", "blocks": "Blokkeringer", "blocked-users": "Blokkerte brukere", "block-toggle": "Endre blokkering", @@ -60,10 +60,10 @@ "chat-with": "Fortsett å chatte med %1", "new-chat-with": "Start ny chat med %1", "flag-profile": "Rapporter profil", - "profile-flagged": "Already flagged", + "profile-flagged": "Allerede flagget", "follow": "Følg", "unfollow": "Avfølg", - "cancel-follow": "Cancel follow request", + "cancel-follow": "Avbryt forespørsel om å følge", "more": "Mer", "profile-update-success": "Profilen ble oppdatert!", "change-picture": "Bytt bilde", @@ -75,7 +75,7 @@ "edit-profile": "Rediger profil", "default-picture": "Standardikonet", "uploaded-picture": "Opplastet bilde", - "upload-new-picture": "Last opp nytt bidle", + "upload-new-picture": "Last opp nytt bilde", "upload-new-picture-from-url": "Last opp nytt bilde fra URL", "current-password": "Gjeldende passord", "new-password": "Nytt passord", @@ -123,7 +123,7 @@ "has-no-downvoted-posts": "Denne brukeren har ikke stemt ned noen innlegg ennå.", "has-no-controversial-posts": "Denne brukeren har ikke noen nedstemte innlegg ennå.", "has-no-blocks": "Du har ingen blokkerte brukere.", - "has-no-shares": "This user has not shared any topics.", + "has-no-shares": "Denne brukeren har ikke delt noen tråder enda.", "email-hidden": "E-post skjult", "hidden": "skjult", "paginate-description": "Bruk sidevelger for tråder og innlegg istedet for uendelig scrolling", diff --git a/public/language/nb/world.json b/public/language/nb/world.json index 3753335278..54ab26f15e 100644 --- a/public/language/nb/world.json +++ b/public/language/nb/world.json @@ -1,17 +1,17 @@ { - "name": "World", - "popular": "Popular topics", - "recent": "All topics", - "help": "Help", + "name": "Verden", + "popular": "Populære tema", + "recent": "Alle tema", + "help": "Hjelp", - "help.title": "What is this page?", + "help.title": "Hva er denne siden?", "help.intro": "Welcome to your corner of the fediverse.", "help.fediverse": "The \"fediverse\" is a network of interconnected applications and websites that all talk to one another and whose users can see each other. This forum is federated, and can interact with that social web (or \"fediverse\"). This page is your corner of the fediverse. It consists solely of topics created by — and shared from — users you follow.", "help.build": "There might not be a lot of topics here to start; that's normal. You will start to see more content here over time when you start following other users.", "help.federating": "Likewise, if users from outside of this forum start following you, then your posts will start appearing on those apps and websites as well.", "help.next-generation": "This is the next generation of social media, start contributing today!", - "onboard.title": "Your window to the fediverse...", + "onboard.title": "Ditt vindu til fødiverset...", "onboard.what": "This is your personalized category made up of only content found outside of this forum. Whether something shows up in this page depends on whether you follow them, or whether that post was shared by someone you follow.", "onboard.why": "There's a lot that goes on outside of this forum, and not all of it is relevant to your interests. That's why following people is the best way to signal that you want to see more from someone.", "onboard.how": "In the meantime, you can click on the shortcut buttons at the top to see what else this forum knows about, and start discovering some new content!" diff --git a/public/language/nl/admin/settings/advanced.json b/public/language/nl/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/nl/admin/settings/advanced.json +++ b/public/language/nl/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/nl/admin/settings/general.json b/public/language/nl/admin/settings/general.json index 051d022488..a5828eaa84 100644 --- a/public/language/nl/admin/settings/general.json +++ b/public/language/nl/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Titel Lay-out", "title-layout-help": "Defineer hoe de browser titel gestructureerd word. bijv: {paginaTitel} | {browserTitel}", "description.placeholder": "Een korte beschrijving van uw gemeenschap", - "description": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Trefwoorden", "keywords-placeholder": "Trefwoorden die uw community beschrijven, kommagescheiden", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/nl/category.json b/public/language/nl/category.json index 4efaa05ad3..c745ec8690 100644 --- a/public/language/nl/category.json +++ b/public/language/nl/category.json @@ -1,6 +1,8 @@ { "category": "Categorie", "subcategories": "Subcategorieën", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nieuw onderwerp", "guest-login-post": "Log in om een reactie te plaatsen", "no-topics": "Er zijn geen onderwerpen in deze categorie.
Waarom maak je er niet een aan?", diff --git a/public/language/nl/error.json b/public/language/nl/error.json index 26e8cb387a..1b9fd1883b 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Kan plugin niet installeren – alleen plugins toegestaan door de NodeBB Package Manager kunnen via de ACP geinstalleerd worden", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/nl/themes/harmony.json b/public/language/nl/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/nl/themes/harmony.json +++ b/public/language/nl/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/nn-NO/admin/dashboard.json b/public/language/nn-NO/admin/dashboard.json index fc6a1f9ae9..6d874339a4 100644 --- a/public/language/nn-NO/admin/dashboard.json +++ b/public/language/nn-NO/admin/dashboard.json @@ -12,8 +12,8 @@ "page-views-custom": "Tilpassa sidevisningar", "page-views-custom-start": "Startdato", "page-views-custom-end": "Sluttdato", - "page-views-custom-help": "Vel eit tidsintervall for å sjå sidevisningar.", - "page-views-custom-error": "Ugyldig tidsintervall.", + "page-views-custom-help": "Vel eit tidsintervall på datoformat YYYY-MM-DD for å sjå sidevisningar. ", + "page-views-custom-error": "Ugyldig tidsintervall. Bruk format YYYY-MM-DD", "stats.yesterday": "I går", "stats.today": "I dag", @@ -24,11 +24,11 @@ "stats.all": "Alle", "updates": "Oppdateringar", - "running-version": "Køyrer versjon", + "running-version": "Køyrer NodeBB versjon %1 .", "keep-updated": "Hald oppdatert", - "up-to-date": "Oppdatert", - "upgrade-available": "Oppgradering tilgjengeleg", - "prerelease-upgrade-available": "Førehandsutgåveoppgradering tilgjengeleg", + "up-to-date": "Oppdatert ", + "upgrade-available": "Oppgradering tilgjengeleg. Vurder å oppgradere din versjon av NodeBB.", + "prerelease-upgrade-available": "Førehandsutgåveoppgradering tilgjengeleg. Vurder å oppgradere din versjon av NodeBB.", "prerelease-warning": "Ver varsam når du oppgraderer til førehandsutgåver, dei kan innehalde feil.", "fallback-emailer-not-found": "Fann ikkje tilbakefallse-postar", "running-in-development": "Køyrer i utviklingsmodus", diff --git a/public/language/nn-NO/admin/development/logger.json b/public/language/nn-NO/admin/development/logger.json index f1109a6cca..c25ddc3d61 100644 --- a/public/language/nn-NO/admin/development/logger.json +++ b/public/language/nn-NO/admin/development/logger.json @@ -1,12 +1,12 @@ { "logger": "Loggførar", "logger-settings": "Innstillingar loggførar ", - "description": "Konfigurer loggførarinnstillingar for å overvake aktivitetar og førespurnader i NodeBB.", + "description": "Ved å aktivere avkrysningsboksane vil du få loggar til terminalen din. Dersom du spesifiserer ein sti, vil loggane bli lagra i ei fil i staden. HTTP-logging er nyttig for å samle statistikk om kven, når og kva folk har tilgang til på forumet ditt. I tillegg til å logge HTTP-forespurningar, kan vi òg logge socket.io-hendingar. Socket.io-logging, i kombinasjon med redis-cli monitor, kan vere svært nyttig for å forstå NodeBB sitt indre system.", "explanation": "Aktiver loggføring av HTTP- og WebSocket-aktivitet for feilsøking og overvaking.", "enable-http": "Aktiver HTTP-loggføring", "enable-socket": "Aktiver WebSocket-loggføring", "file-path": "Filsti", - "file-path-placeholder": "Skriv inn stien til loggføringsfila", + "file-path-placeholder": "/path/to/log/file.log ::: la stå tom for å logge til terminalen din", "control-panel": "Kontrollpanel loggførar", "update-settings": "Oppdater loggførar innstillingar" diff --git a/public/language/nn-NO/admin/extend/plugins.json b/public/language/nn-NO/admin/extend/plugins.json index ad23225ed6..dc4e69aa33 100644 --- a/public/language/nn-NO/admin/extend/plugins.json +++ b/public/language/nn-NO/admin/extend/plugins.json @@ -17,8 +17,8 @@ "dev-interested": "Er du ein utviklar?", "docs-info": "Dokumentasjon for utvikling av innstikk kan du sjå i NodeBB Docs Portal.", - "order.description": "Du kan dra og sleppe pluginar for å endre rekkjefølgja", - "order.explanation": "Rekkjefølgja kan påverke korleis pluginar fungerer saman", + "order.description": "Visse innstikk fungerer best når dei blir initierte før/etter andre innstikk.", + "order.explanation": "Innstikk blir lasta inn i rekkjefølgja som er spesifisert her, frå topp til botn.", "plugin-item.themes": "Tema", "plugin-item.deactivate": "Deaktiver", @@ -33,26 +33,26 @@ "plugin-item.unknown": "Ukjent", "plugin-item.unknown-explanation": "Vi kunne ikkje finne informasjon om denne pluginen", "plugin-item.compatible": "Innstikk er kompatibelt med NodeBB %1", - "plugin-item.not-compatible": "Ikkje kompatibel", + "plugin-item.not-compatible": "Dette innstikket har ingen kompatibilitetsdata, sørg for at det fungerer før du installerer det i produksjonsmiljøet ditt.", - "alert.enabled": "Plugin aktivert", - "alert.disabled": "Plugin deaktivert", - "alert.upgraded": "Plugin oppgradert", - "alert.installed": "Plugin installert", - "alert.uninstalled": "Plugin avinstallert", - "alert.activate-success": "Plugin vart aktivert med suksess", - "alert.deactivate-success": "Plugin vart deaktivert med suksess", - "alert.upgrade-success": "Plugin vart oppgradert med suksess", - "alert.install-success": "Plugin vart installert med suksess", + "alert.enabled": "Innstikk aktivert", + "alert.disabled": "Innstikk deaktivert", + "alert.upgraded": "Innstikk oppgradert", + "alert.installed": "Innstikk installert", + "alert.uninstalled": "Innstikk avinstallert", + "alert.activate-success": "Ver venleg å bygg og start NodeBB på nytt for å fullt ut aktivere dette innstikket.", + "alert.deactivate-success": "Innstikk vart deaktivert med suksess", + "alert.upgrade-success": "Ver venleg å bygg og start NodeBB på nytt for å fullt ut aktivere dette innstikket.", + "alert.install-success": "Innstikk vart installert med suksess", "alert.uninstall-success": "Plugin vart avinstallert med suksess", - "alert.suggest-error": "Vi kan ikkje foreslå pluginar for augneblinken", - "alert.package-manager-unreachable": "Pakkehåndteraren er ikkje tilgjengeleg for augneblinken", - "alert.incompatible": "Denne pluginen er ikkje kompatibel med din versjon av NodeBB", - "alert.possibly-incompatible": "Denne pluginen kan vere inkompatibel med din versjon av NodeBB", + "alert.suggest-error": "

 NodeBB kunne ikkje nå pakkebehandlaren. Vil du halde fram med installasjonen av siste versjon?

Server returnerte (%1): %2
", + "alert.package-manager-unreachable": "

Pakkehåndteraren er ikkje tilgjengeleg for NodeBB for augneblinken.

", + "alert.incompatible": "

Versjonen din av NodeBB (v%1) er berre godkjend for oppgradering til v%2 av dette innstikket. Oppdater NodeBB dersom du ønskjer å installere ein nyare versjon av dette innstikket..

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

Ingen kompatibilitetsinformasjon funnen

 Dette innstikket spesifiserte ikkje ein spesifikk versjon for installasjon med tanke på din NodeBB-versjon. Full kompatibilitet kan ikkje garanterast, og det kan føre til at NodeBB ikkje startar som det skal.

Dersom NodeBB ikkje kan starte som det skal:

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

Vil du halde fram med installasjonen av siste versjon av dette innstikket?

", "alert.reorder": "Pluginar omorganisert", "alert.reorder-success": "Rekkjefølgja av pluginar vart oppdatert med suksess", "license.title": "Lisens", - "license.intro": "Les lisensavtalen før du installerer eller brukar denne pluginen.", + "license.intro": "Innstikket %1 er lisensiert under %2. Les og forstå lisensvilkåra før du aktiverer dette innstikket.", "license.cta": "Godta og fortset" } diff --git a/public/language/nn-NO/admin/extend/rewards.json b/public/language/nn-NO/admin/extend/rewards.json index 6cd3e5f719..866e7a5138 100644 --- a/public/language/nn-NO/admin/extend/rewards.json +++ b/public/language/nn-NO/admin/extend/rewards.json @@ -2,7 +2,7 @@ "rewards": "Utmerkingar", "add-reward": "Legg til utmerking", "condition-if-users": "Vilkår: Om brukarar", - "condition-is": "er", + "condition-is": "er:", "condition-then": "Då", "max-claims": "Maks krav", "zero-infinite": "0 for uendeleg", diff --git a/public/language/nn-NO/admin/extend/widgets.json b/public/language/nn-NO/admin/extend/widgets.json index 10856e53f3..67cf922d1c 100644 --- a/public/language/nn-NO/admin/extend/widgets.json +++ b/public/language/nn-NO/admin/extend/widgets.json @@ -2,7 +2,7 @@ "widgets": "Widgetar", "available": "Tilgjengelege", "explanation": "Dra og slepp widgetar for å tilpasse forumet.", - "none-installed": "Ingen widgetar installert", + "none-installed": "Ingen widgetar funne! Aktiver innstikket for widget-essensialar i innstikk kontrollpanelet.", "clone-from": "Klon frå", "containers.available": "Tilgjengelege konteinarar", "containers.explanation": "Konteinarar fungerer som behaldarar for widgetar.", diff --git a/public/language/nn-NO/admin/manage/categories.json b/public/language/nn-NO/admin/manage/categories.json index 93e824e599..32374d39e7 100644 --- a/public/language/nn-NO/admin/manage/categories.json +++ b/public/language/nn-NO/admin/manage/categories.json @@ -7,8 +7,8 @@ "privileges": "Rettar", "back-to-categories": "Tilbake til kategoriar", "name": "Namn", - "handle": "Category Handle", - "handle.help": "Your category handle is used as a representation of this category across other networks, similar to a username. A category handle must not match an existing username or user group.", + "handle": "Kategori-sti", + "handle.help": " Kategori-stien din blir brukt som ein representasjon av denne kategorien på andre nettverk, liknande eit brukarnamn. Ein kategori-sti må ikkje samsvare med eit eksisterande brukarnamn eller ei brukargruppe.", "description": "Skildring", "bg-color": "Bakgrunnsfarge", "text-color": "Tekstfarge", @@ -39,7 +39,7 @@ "disable": "Deaktiver", "edit": "Rediger", "analytics": "Analyse", - "federation": "Federation", + "federation": "Føderasjon", "view-category": "Vis kategori", "set-order": "Set rekkjefølgje", @@ -79,21 +79,21 @@ "analytics.topics-daily": "Emne per dag", "analytics.posts-daily": "Innlegg per dag", - "federation.title": "Federation settings for \"%1\" category", - "federation.disabled": "Federation is disabled site-wide, so category federation settings are currently unavailable.", - "federation.disabled-cta": "Federation Settings →", - "federation.syncing-header": "Synchronization", - "federation.syncing-intro": "A category can follow a \"Group Actor\" via the ActivityPub protocol. If content is received from one of the actors listed below, it will be automatically added to this category.", - "federation.syncing-caveat": "N.B. Setting up syncing here establishes a one-way synchronization. NodeBB attempts to subscribe/follow the actor, but the reverse cannot be assumed.", - "federation.syncing-none": "This category is not currently following anybody.", - "federation.syncing-add": "Synchronize with...", - "federation.syncing-actorUri": "Actor", - "federation.syncing-follow": "Follow", - "federation.syncing-unfollow": "Unfollow", - "federation.followers": "Remote users following this category", - "federation.followers-handle": "Handle", + "federation.title": "Føderasjonsinnstillingar for kategorien \"%1\"", + "federation.disabled": "Føderasjon er deaktivert for heile nettstaden, så innstillingar for kategori-føderasjon er for tida ikkje tilgjengelege.", + "federation.disabled-cta": "Føderasjonsinnstillingar →", + "federation.syncing-header": "Synkronisering", + "federation.syncing-intro": "Ein kategori kan følgje ein “Gruppeaktør” via ActivityPub-protokollen. Dersom innhald blir mottatt frå ein av aktørane som er lista opp nedanfor, vil det automatisk bli lagt til i denne kategorien.", + "federation.syncing-caveat": " Merk: Å konfigurere synkronisering her opprettar ein einvegs synkronisering. NodeBB prøver å abonnere på/følgje aktøren, men det motsette kan ikkje føresetjast.", + "federation.syncing-none": "Denne kategorien følgjer for tida ingen.", + "federation.syncing-add": "Synkronser med...", + "federation.syncing-actorUri": "Aktør", + "federation.syncing-follow": "Følg", + "federation.syncing-unfollow": "Avfølg", + "federation.followers": "Eksterne brukarar som følgjer denne kategorien", + "federation.followers-handle": "Sti", "federation.followers-id": "ID", - "federation.followers-none": "No followers.", + "federation.followers-none": "Ingen følgjarar.", "alert.created": "Oppretta", "alert.create-success": "Kategori oppretta med suksess", diff --git a/public/language/nn-NO/admin/menu.json b/public/language/nn-NO/admin/menu.json index 8ab19ed3c7..828f60842b 100644 --- a/public/language/nn-NO/admin/menu.json +++ b/public/language/nn-NO/admin/menu.json @@ -38,7 +38,7 @@ "settings/tags": "Emneord", "settings/notifications": "Varsel", "settings/api": "API-tilgang", - "settings/activitypub": "Federation (ActivityPub)", + "settings/activitypub": "Føderasjon (ActivityPub)", "settings/sounds": "Lydar", "settings/social": "Sosial", "settings/cookies": "Informasjonskapslar", diff --git a/public/language/nn-NO/admin/settings/activitypub.json b/public/language/nn-NO/admin/settings/activitypub.json index 94f9ad7822..96d0526ecc 100644 --- a/public/language/nn-NO/admin/settings/activitypub.json +++ b/public/language/nn-NO/admin/settings/activitypub.json @@ -1,26 +1,26 @@ { - "intro-lead": "What is Federation?", - "intro-body": "NodeBB is able to communicate with other NodeBB instances that support it. This is achieved through a protocol called ActivityPub. If enabled, NodeBB will also be able to communicate with other apps and websites that use ActivityPub (e.g. Mastodon, Peertube, etc.)", - "general": "General", - "pruning": "Content Pruning", - "content-pruning": "Days to keep remote content", - "content-pruning-help": "Note that remote content that has received engagement (a reply or a upvote/downvote) will be preserved. (0 for disabled)", - "user-pruning": "Days to cache remote user accounts", - "user-pruning-help": "Remote user accounts will only be pruned if they have no posts. Otherwise they will be re-retrieved. (0 for disabled)", - "enabled": "Enable Federation", - "enabled-help": "If enabled, will allow this NodeBB will be able to communicate with all Activitypub-enabled clients on the wider fediverse.", - "allowLoopback": "Allow loopback processing", - "allowLoopback-help": "Useful for debugging purposes only. You should probably leave this disabled.", + "intro-lead": "Kva er føderering?", + "intro-body": "NodeBB kan kommunisere med andre NodeBB-instansar som støttar det. Dette blir oppnådd gjennom ein protokoll kalla ActivityPub. Dersom aktivert, vil NodeBB òg kunne kommunisere med andre appar og nettsider som brukar ActivityPub (t.d. Mastodon, Peertube, osb.).", + "general": "Generelt", + "pruning": "Innhaldsbeskjæring", + "content-pruning": "Dagar å behalde eksternt innhald", + "content-pruning-help": " Merk at eksternt innhald som har fått engasjement (eit svar eller ei opp-/nedstemming) vil bli bevart. (0 for deaktivert)", + "user-pruning": "Dagar å mellomlagre eksterne brukarkontoar", + "user-pruning-help": "Eksterne brukarkontoar vil berre bli fjerna dersom dei ikkje har innlegg. Elles vil dei bli henta på nytt. (0 for deaktivert)", + "enabled": "Aktiver føderering", + "enabled-help": "Dersom aktivert, vil dette gjere at NodeBB kan kommunisere med alle ActivityPub-aktiverte klientar i det større fødiverset.", + "allowLoopback": "Tillat loopback-prosessering", + "allowLoopback-help": "Nyttig berre for feilsøking. Du bør sannsynlegvis la dette vere deaktivert.", - "probe": "Open in App", - "probe-enabled": "Try to open ActivityPub-enabled resources in NodeBB", - "probe-enabled-help": "If enabled, NodeBB will check every external link for an ActivityPub equivalent, and load it in NodeBB instead.", - "probe-timeout": "Lookup Timeout (milliseconds)", - "probe-timeout-help": "(Default: 2000) If the lookup query does not receive a response within the set timeframe, will send the user to the link directly instead. Adjust this number higher if sites are responding slowly and you wish to give extra time.", + "probe": "Opne i app", + "probe-enabled": "Forsøk å opne ActivityPub-aktiverte ressursar i NodeBB", + "probe-enabled-help": "Dersom aktivert, vil NodeBB sjekke kvar ekstern lenkje for ein ActivityPub-ekvivalent og laste den inn i NodeBB i staden.", + "probe-timeout": "Oppslagstimeout (millisekund)", + "probe-timeout-help": "(Standard: 2000) Dersom oppslagsførespurnaden ikkje får eit svar innan den angitte tidsramma, vil brukaren bli sendt direkte til lenkja i staden. Juster dette talet oppover dersom nettsider responderer sakte, og du ønskjer å gi ekstra tid.", - "server-filtering": "Filtering", - "count": "This NodeBB is currently aware of %1 server(s)", - "server.filter-help": "Specify servers you would like to bar from federating with your NodeBB. Alternatively, you may opt to selectively allow federation with specific servers, instead. Both options are supported, although they are mutually exclusive.", - "server.filter-help-hostname": "Enter just the instance hostname below (e.g. example.org), separated by line breaks.", - "server.filter-allow-list": "Use this as an Allow List instead" + "server-filtering": "Filtrer etter", + "count": "Denne NodeBB-en er for tida klar over %1 server(ar)", + "server.filter-help": "Spesifiser serverar du ønskjer å hindre frå å føderere med din NodeBB. Alternativt kan du velje å tillate føderasjon berre med spesifikke serverar. Begge alternativ er støtta, men dei er gjensidig utelukkande.", + "server.filter-help-hostname": "Skriv berre inn vertsnamnet for instansen nedanfor (t.d. døme.no), separert med linjeskift.", + "server.filter-allow-list": "Bruk dette som ei tillatingsliste i staden" } \ No newline at end of file diff --git a/public/language/nn-NO/admin/settings/advanced.json b/public/language/nn-NO/admin/settings/advanced.json index 70504c5cd8..c3baf4992c 100644 --- a/public/language/nn-NO/admin/settings/advanced.json +++ b/public/language/nn-NO/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Standardverdi", "sockets.delay": "Forseinking", - "analytics.settings": "Analyseinnstillingar", - "analytics.max-cache": "Maksimal cache for analyse", - "analytics.max-cache-help": "Angi kor mykje cache som skal lagrast for analyseformål.", "compression.settings": "Kompresjonsinnstillingar", "compression.enable": "Aktiver kompresjon", "compression.help": "Konfigurer om forumet skal komprimere data for å redusere overføringsstorleiken." diff --git a/public/language/nn-NO/admin/settings/general.json b/public/language/nn-NO/admin/settings/general.json index 85a1a62132..f14f5c6598 100644 --- a/public/language/nn-NO/admin/settings/general.json +++ b/public/language/nn-NO/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Titteloppsett", "title-layout-help": "Vel korleis tittelen skal visast på forumet.", "description.placeholder": "Skriv inn ei kort skildring av nettstaden", - "description": "Konfigurer forumets heimeside og tilpass ruta for brukarane.", + "description": "Site Description", "keywords": "Nøkkelord", "keywords-placeholder": "Skriv inn nøkkelord, skilde med komma", "logo-and-icons": "Logo og ikon", @@ -51,6 +51,7 @@ "topic-tools": "Emneverktøy", "home-page": "Startside", "home-page-route": "Startsiderute", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Tilpassa rute", "allow-user-home-pages": "Tillat brukarar å setje eigne heimesider", "home-page-title": "Startsidetittel", diff --git a/public/language/nn-NO/admin/settings/uploads.json b/public/language/nn-NO/admin/settings/uploads.json index 4986849ef3..c729541aff 100644 --- a/public/language/nn-NO/admin/settings/uploads.json +++ b/public/language/nn-NO/admin/settings/uploads.json @@ -12,7 +12,7 @@ "resize-image-width-threshold-help": "( i pixels, standard er 2000 pixler, angi 0 for å avvise) ", "resize-image-width": "Endre bilete breidde", "resize-image-width-help": "Angi ny breidde for bilete som vert endra ved opplasting.", - "resize-image-keep-original": "Keep original image after resize", + "resize-image-keep-original": "Behald originalbiletet etter endring av storleik", "resize-image-quality": "Biletekvalitet ved endring", "resize-image-quality-help": "Angi kvaliteten for bilete som vert endra ved opplasting.", "max-file-size": "Maks filstorleik", diff --git a/public/language/nn-NO/aria.json b/public/language/nn-NO/aria.json index 54e2f61bc4..a89012d5a8 100644 --- a/public/language/nn-NO/aria.json +++ b/public/language/nn-NO/aria.json @@ -2,7 +2,7 @@ "post-sort-option": "Val for innleggssortering, %1", "topic-sort-option": "Val for emnessortering, %1", "user-avatar-for": "Brukar ikon for %1", - "profile-page-for": "Profile page for user %1", + "profile-page-for": "Profilside for brukar %1", "user-watched-tags": "Emneord følgt av brukar", "delete-upload-button": "Slett opplasting-knapp", "group-page-link-for": "Gruppeside-lenkje for, %1" diff --git a/public/language/nn-NO/category.json b/public/language/nn-NO/category.json index 7287400455..406245319e 100644 --- a/public/language/nn-NO/category.json +++ b/public/language/nn-NO/category.json @@ -1,6 +1,8 @@ { "category": "Kategori", "subcategories": "Underkategoriar", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nytt emne", "guest-login-post": "Logg inn for å legge inn innlegg", "no-topics": "Denne kategorien er foreløpig tom.
Har du noko å dele? Opprett eit innlegg her!", diff --git a/public/language/nn-NO/error.json b/public/language/nn-NO/error.json index bd14df3803..a1eacdd8c3 100644 --- a/public/language/nn-NO/error.json +++ b/public/language/nn-NO/error.json @@ -232,10 +232,11 @@ "socket-reconnect-failed": "Kan ikkje nå serveren for augneblinken. Klikk her for å prøve igjen, eller prøv seinare", "invalid-plugin-id": "Ugyldig plugin-ID", "plugin-not-whitelisted": "Kan ikkje installere plugin – berre pluginar som er kvitelistet av NodeBB Package Manager kan installerast via ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "Du har ikkje løyve til å endre plugin-status sidan dei er definert ved oppstart (config.json, miljøvariablar eller terminalargument), ver venleg å endre konfigurasjonen i staden.", "theme-not-set-in-configuration": "Når ein definerer aktive pluginar i konfigurasjonen, krev endring av tema at det nye temaet vert lagt til i lista over aktive pluginar før det oppdaterast i ACP", "topic-event-unrecognized": "Emnehending '%1' ikkje gjenkjent", - "category.handle-taken": "Category handle is already taken, please choose another.", + "category.handle-taken": "Kategori-stien er allereie i bruk, vel vennlegst eit anna.", "cant-set-child-as-parent": "Kan ikkje setje barn som overordna kategori", "cant-set-self-as-parent": "Kan ikkje setje seg sjølv som overordna kategori", "api.master-token-no-uid": "Ein mastertoken vart mottatt utan ein tilsvarande `_uid` i førespurnadsinnhaldet", @@ -249,11 +250,11 @@ "api.501": "Ruta du prøver å kalle på er ikkje implementert enno, prøv igjen i morgon", "api.503": "Ruta du prøver å kalle på er for augneblinken ikkje tilgjengeleg grunna serverkonfigurasjon", "api.reauth-required": "Ressursen du prøver å nå krev (re-)autentisering.", - "activitypub.not-enabled": "Federation is not enabled on this server", - "activitypub.invalid-id": "Unable to resolve the input id, likely as it is malformed.", - "activitypub.get-failed": "Unable to retrieve the specified resource.", - "activitypub.pubKey-not-found": "Unable to resolve public key, so payload verification cannot take place.", - "activitypub.origin-mismatch": "The received object's origin does not match the sender's origin", - "activitypub.actor-mismatch": "The received activity is being carried out by an actor that is different from expected.", - "activitypub.not-implemented": "The request was denied because it or an aspect of it is not implemented by the recipient server" + "activitypub.not-enabled": " Føderasjon er ikkje aktivert på denne serveren.", + "activitypub.invalid-id": "Kan ikkje løyse opp input-ID-en, sannsynlegvis fordi ho er ugyldig.", + "activitypub.get-failed": "Kan ikkje hente den spesifiserte ressursen.", + "activitypub.pubKey-not-found": " Kan ikkje løyse opp den offentlege nøkkelen, så verifisering av nyttelasta kan ikkje gjennomførast.", + "activitypub.origin-mismatch": "Den mottatte objektet sin opphavsstad samsvarar ikkje med avsendaren sin opphavsstad.", + "activitypub.actor-mismatch": " Den mottatte aktiviteten blir utført av ein aktør som er annleis enn forventa.", + "activitypub.not-implemented": "Førespurnaden blei avvist fordi han, eller ein del av han, ikkje er implementert av mottakarserveren." } \ No newline at end of file diff --git a/public/language/nn-NO/flags.json b/public/language/nn-NO/flags.json index e90ecdbf42..0ab74af824 100644 --- a/public/language/nn-NO/flags.json +++ b/public/language/nn-NO/flags.json @@ -84,17 +84,17 @@ "modal-reason-offensive": "Støytande innhald", "modal-reason-other": "Annan grunn", "modal-reason-custom": "Skriv inn eigen grunn", - "modal-notify-remote": "Forward this report to %1", + "modal-notify-remote": "Vidareformidle denne rapporten til %1", "modal-submit": "Send inn", "modal-submit-success": "Rapport sendt med suksess", - "modal-confirm-rescind": "Rescind Report?", + "modal-confirm-rescind": "Trekke tilbake rapporten?", "bulk-actions": "Massehandlingar", "bulk-resolve": "Løys alle", - "confirm-purge": "Are you sure you want to permanently delete these flags?", - "purge-cancelled": "Flag Purge Cancelled", - "bulk-purge": "Purge Flag(s)", + "confirm-purge": "Er du sikker på at du vil slette desse flagga?", + "purge-cancelled": "Merking sletting avbroten", + "bulk-purge": "Slett merking(ar)", "bulk-success": "Alle vart handsama med suksess", "flagged-timeago": "Rapportert for %1 sidan", "auto-flagged": "Automatisk rapportert" diff --git a/public/language/nn-NO/global.json b/public/language/nn-NO/global.json index 29b9deba32..e66aa148f4 100644 --- a/public/language/nn-NO/global.json +++ b/public/language/nn-NO/global.json @@ -50,7 +50,7 @@ "header.navigation": "Navigasjon", "header.manage": "Administrer", "header.drafts": "Utkast", - "header.world": "World", + "header.world": "Verda", "notifications.loading": "Laster varsel", "chats.loading": "Laster chattar", "drafts.loading": "Laster utkast", @@ -111,7 +111,7 @@ "dnd": "Ikkje forstyrr", "invisible": "Usynleg", "offline": "Avlogga", - "remote-user": "This user is from outside of this forum", + "remote-user": "Denne brukaren kjem frå utsida av dette forumet.", "email": "E-post", "language": "Språk", "guest": "Gjest", diff --git a/public/language/nn-NO/modules.json b/public/language/nn-NO/modules.json index 131bc561fb..56391f107a 100644 --- a/public/language/nn-NO/modules.json +++ b/public/language/nn-NO/modules.json @@ -115,8 +115,8 @@ "composer.discard-all-drafts": "Forkast alle utkast", "composer.no-drafts": "Du har ingen utkast", "composer.discard-draft-confirm": "Ønskjer du å forkaste dette utkastet?", - "composer.remote-pid-editing": "Editing a remote post", - "composer.remote-pid-content-immutable": "The content of remote posts cannot be edited. However, you are able change the topic title and tags.", + "composer.remote-pid-editing": "Redigering av ein ekstern post", + "composer.remote-pid-content-immutable": "Innhaldet i eksterne postar kan ikkje redigerast. Du kan likevel endre emnetittelen og merkelappane.", "bootbox.ok": "OK", "bootbox.cancel": "Avbryt", "bootbox.confirm": "Stadfest", diff --git a/public/language/nn-NO/notifications.json b/public/language/nn-NO/notifications.json index 30e4e6d510..d7602b43b4 100644 --- a/public/language/nn-NO/notifications.json +++ b/public/language/nn-NO/notifications.json @@ -99,8 +99,8 @@ "notificationType-new-post-flag": "Når eit innlegg vert rapportert", "notificationType-new-user-flag": "Når ein brukar vert rapportert", "notificationType-new-reward": "Når du får ein ny utmerking", - "activitypub.announce": "%1 shared your post in %2 to their followers.", - "activitypub.announce-dual": "%1 and %2 shared your post in %3 to their followers.", - "activitypub.announce-triple": "%1, %2 and %3 shared your post in %4 to their followers.", - "activitypub.announce-multiple": "%1, %2 and %3 others shared your post in %4 to their followers." + "activitypub.announce": "%1 delte din post i %2 til sine følgjarar.", + "activitypub.announce-dual": "%1 og %2 delte din post i %3til sine følgjarar.", + "activitypub.announce-triple": "%1, %2 og %3 delte din post i %4 til sine følgjarar.", + "activitypub.announce-multiple": "%1, %2 og %3 andre delte din post i %4 til sine følgjarar." } \ No newline at end of file diff --git a/public/language/nn-NO/pages.json b/public/language/nn-NO/pages.json index 0cf6246cfe..4d1cdb955d 100644 --- a/public/language/nn-NO/pages.json +++ b/public/language/nn-NO/pages.json @@ -36,7 +36,7 @@ "chat": "Chattar med %1", "flags": "Rapportar", "flag-details": "Detaljar for rapport %1", - "world": "World", + "world": "Verda", "account/edit": "Redigerar \"%1\"", "account/edit/password": "Endrar passord for \"%1\"", "account/edit/username": "Endrar brukarnamn for \"%1\"", @@ -63,7 +63,7 @@ "account/blocks": "Blokkerte brukarar for %1", "account/uploads": "Opplastingar av %1", "account/sessions": "Påloggingssesjonar", - "account/shares": "Topics shared by %1", + "account/shares": "Emne delt av %1", "confirm": "E-post stadfesta", "maintenance.text": "%1 er for augneblinken under vedlikehald.
Ver venleg å kome tilbake seinare.", "maintenance.messageIntro": "Administratoren har også lagt att denne meldinga:", diff --git a/public/language/nn-NO/recent.json b/public/language/nn-NO/recent.json index d3f22b10c1..ee3a39b778 100644 --- a/public/language/nn-NO/recent.json +++ b/public/language/nn-NO/recent.json @@ -8,6 +8,6 @@ "no-recent-topics": "Det er ingen nylege emne.", "no-popular-topics": "Det er ingen populære emne.", "load-new-posts": "Last nye innlegg", - "uncategorized.title": "All known topics", - "uncategorized.intro": "This page shows a chronological listing of every topic that this forum has received.
The views and opinions expressed in the topics below are not moderated and may not represent the views and opinions of this website." + "uncategorized.title": "Alle kjente emner", + "uncategorized.intro": "Denne sida viser ei kronologisk liste over alle emne som dette forumet har mottatt.
Meiningane og synspunkta som kjem til uttrykk i emna nedanfor, er ikkje modererte og representerer kanskje ikkje meiningane og synspunkta til denne nettsida." } \ No newline at end of file diff --git a/public/language/nn-NO/themes/harmony.json b/public/language/nn-NO/themes/harmony.json index d7d23b22a7..39f3a67a9a 100644 --- a/public/language/nn-NO/themes/harmony.json +++ b/public/language/nn-NO/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "Gjer verktøylinja fast øvst på sida når du rullar.", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Gøym botnlinja automatisk", - "settings.autohideBottombar.help": "Botnlinja vert automatisk gøymd når du rullar nedover.", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Opne sidefelt", "settings.chatModals": "Chat-modalar" } \ No newline at end of file diff --git a/public/language/nn-NO/topic.json b/public/language/nn-NO/topic.json index ae7274ff73..48f429a550 100644 --- a/public/language/nn-NO/topic.json +++ b/public/language/nn-NO/topic.json @@ -61,8 +61,8 @@ "user-restored-topic-on": "%1 gjenoppretta dette emnet den %2", "user-moved-topic-from-ago": "%1 flytta dette emnet frå %2 %3", "user-moved-topic-from-on": "%1 flytta dette emnet frå %2 den %3", - "user-shared-topic-ago": "%1 shared this topic %2", - "user-shared-topic-on": "%1 shared this topic on %2", + "user-shared-topic-ago": "%1 delte dette emnet %2", + "user-shared-topic-on": "%1 delte dette emnet på %2", "user-queued-post-ago": "%1 køyrde innlegget for godkjenning %3", "user-queued-post-on": "%1 køyrde innlegget for godkjenning den %3", "user-referenced-topic-ago": "%1 refererte til dette emnet %3", @@ -137,7 +137,7 @@ "bookmarks": "Bokmerke", "bookmarks.has-no-bookmarks": "Du har ikkje bokmerka noko innlegg enno.", "copy-permalink": "Kopier permalenkje", - "go-to-original": "View Original Post", + "go-to-original": "Sjå innlegget", "loading-more-posts": "Lastar fleire innlegg", "move-topic": "Flytt emne", "move-topics": "Flytt emne", @@ -223,6 +223,6 @@ "post-tools": "Innleggsverktøy", "unread-posts-link": "Lenkje til uleste innlegg", "thumb-image": "Emne miniatyrbilete", - "announcers": "Shares", - "announcers-x": "Shares (%1)" + "announcers": "Delingar", + "announcers-x": "Delingar (%1)" } \ No newline at end of file diff --git a/public/language/nn-NO/user.json b/public/language/nn-NO/user.json index 5ebe918014..600ad9bd04 100644 --- a/public/language/nn-NO/user.json +++ b/public/language/nn-NO/user.json @@ -47,7 +47,7 @@ "default-category-watch-state": "Standard kategori følgjetilstand", "followers": "Følgjarar", "following": "Følgjer", - "shares": "Shares", + "shares": "Delingar", "blocks": "Blokker", "blocked-users": "Blokkerte brukarar", "block-toggle": "Veksle blokkering", @@ -60,10 +60,10 @@ "chat-with": "Fortset chat med %1", "new-chat-with": "Start ny chat med %1", "flag-profile": "Rapporter profil", - "profile-flagged": "Already flagged", + "profile-flagged": "Allerede flagga", "follow": "Følg", "unfollow": "Slutt å følgje", - "cancel-follow": "Cancel follow request", + "cancel-follow": " Avbryt førespurnad om å følgje", "more": "Meir", "profile-update-success": "Profilen er oppdatert!", "change-picture": "Endre bilete", @@ -123,7 +123,7 @@ "has-no-downvoted-posts": "Denne brukaren har ikkje stemt ned nokre innlegg enno.", "has-no-controversial-posts": "Denne brukaren har inga kontroversielle innlegg enno.", "has-no-blocks": "Du har ikkje blokkert nokon brukarar.", - "has-no-shares": "This user has not shared any topics.", + "has-no-shares": "Denne brukaren har ikkje delt nokre emner.", "email-hidden": "E-post er skjult", "hidden": "skjult", "paginate-description": "Del emne og innlegg i sider i staden for å bruke uendeleg rulling", diff --git a/public/language/nn-NO/world.json b/public/language/nn-NO/world.json index 3753335278..c5c0c1ae1f 100644 --- a/public/language/nn-NO/world.json +++ b/public/language/nn-NO/world.json @@ -1,18 +1,18 @@ { - "name": "World", - "popular": "Popular topics", - "recent": "All topics", - "help": "Help", + "name": "Verda", + "popular": "Populære emne", + "recent": "Alle emne", + "help": "Hjelp", - "help.title": "What is this page?", - "help.intro": "Welcome to your corner of the fediverse.", - "help.fediverse": "The \"fediverse\" is a network of interconnected applications and websites that all talk to one another and whose users can see each other. This forum is federated, and can interact with that social web (or \"fediverse\"). This page is your corner of the fediverse. It consists solely of topics created by — and shared from — users you follow.", - "help.build": "There might not be a lot of topics here to start; that's normal. You will start to see more content here over time when you start following other users.", - "help.federating": "Likewise, if users from outside of this forum start following you, then your posts will start appearing on those apps and websites as well.", - "help.next-generation": "This is the next generation of social media, start contributing today!", + "help.title": "Kva er denne sida?", + "help.intro": "Velkommen til ditt hjørne av fødiverset.", + "help.fediverse": "“Fødiverset” er eit nettverk av samanbundne applikasjonar og nettsider som kommuniserer med kvarandre, og der brukarane kan sjå kvarandre. Dette forumet er føderert og kan samhandle med det sosiale nettet (eller “fødiverset”). Denne sida er ditt hjørne av fødiverset. Ho består utelukkande av emne oppretta av – og delt frå – brukarar du følgjer.", + "help.build": "Det kan vere at det ikkje er mange emne her til å begynne med; det er heilt normalt. Du vil sjå meir innhald her etter kvart som du begynner å følgje andre brukarar.", + "help.federating": "På same måte, dersom brukarar frå utsida av dette forumet begynner å følgje deg, vil innlegga dine òg begynne å visast på desse appane og nettsidene.", + "help.next-generation": "Dette er den neste generasjonen av sosiale medium, begynn å bidra i dag!", - "onboard.title": "Your window to the fediverse...", - "onboard.what": "This is your personalized category made up of only content found outside of this forum. Whether something shows up in this page depends on whether you follow them, or whether that post was shared by someone you follow.", - "onboard.why": "There's a lot that goes on outside of this forum, and not all of it is relevant to your interests. That's why following people is the best way to signal that you want to see more from someone.", - "onboard.how": "In the meantime, you can click on the shortcut buttons at the top to see what else this forum knows about, and start discovering some new content!" + "onboard.title": "Ditt vindauge til fødiverset...", + "onboard.what": "Dette er din personlege kategori som berre består av innhald funne utanfor dette forumet. Om noko blir vist på denne sida, avheng av om du følgjer dei, eller om innlegget blei delt av nokon du følgjer.", + "onboard.why": "Det skjer mykje utanfor dette forumet, og ikkje alt er relevant for interessene dine. Difor er det å følgje folk den beste måten å signalisere at du ønskjer å sjå meir frå nokon.", + "onboard.how": "I mellomtida kan du klikke på snarvegsknappane øvst for å sjå kva anna dette forumet kjenner til, og begynne å oppdage nytt innhald!" } \ No newline at end of file diff --git a/public/language/pl/admin/manage/categories.json b/public/language/pl/admin/manage/categories.json index a652daa9ca..67fd4b5e55 100644 --- a/public/language/pl/admin/manage/categories.json +++ b/public/language/pl/admin/manage/categories.json @@ -7,7 +7,7 @@ "privileges": "Uprawnienia", "back-to-categories": "Wróć do kategorii", "name": "Nazwa kategorii", - "handle": "Obsługa kategorii", + "handle": "Przydział kategorii", "handle.help": "Obsługa kategorii robi za znak rozpoznawczy w innych sieciach na wzór nazwy użytkownika. Z tej racji jej nazwa nie może się pokrywać z nazwą użytkownika lub grupą użytkowników.", "description": "Opis kategorii", "bg-color": "Kolor tła", @@ -91,7 +91,7 @@ "federation.syncing-follow": "Śledź", "federation.syncing-unfollow": "Przestań śledzić", "federation.followers": "Zdalni użytkownicy śledzący tę kategorię", - "federation.followers-handle": "Obsługa", + "federation.followers-handle": "Przydział", "federation.followers-id": "ID", "federation.followers-none": "Brak śledzących.", diff --git a/public/language/pl/admin/settings/activitypub.json b/public/language/pl/admin/settings/activitypub.json index 910806e69c..31aa6e7282 100644 --- a/public/language/pl/admin/settings/activitypub.json +++ b/public/language/pl/admin/settings/activitypub.json @@ -1,8 +1,8 @@ { - "intro-lead": "Czym jest Federacja? ", + "intro-lead": "Czym jest Federacja?", "intro-body": "NodeBB jest w stanie komunikować się z innymi instancjami NodeBB, które to obsługują. Jest to osiągnięte za pomocą protokołu ActivityPub. Jeśli włączono, NodeBB będzie też w stanie komunikować się z innymi aplikacjami i stronami, które używają ActivityPub (jak Mastodon, Peertube, itp.)", "general": "Ogólne", - "pruning": "Usuwanie Zawartości", + "pruning": "Usuwanie zawartości", "content-pruning": "Dni przechowywania zawartości zdalnej", "content-pruning-help": "Zauważ, że zawartość zdalna, która uzyskała jakąś reakcję (jak odpowiedź, głos) zostanie zachowana. (0 aby wyłączyć)", "user-pruning": "Dni przechowywania użytkowników zdalnych", @@ -12,7 +12,7 @@ "allowLoopback": "Zezwól na przetwarzanie pętli zwrotnej", "allowLoopback-help": "Użyteczne tylko do debugowania. Raczej powinieneś(-aś) zostawić to wyłączone.", - "probe": "Otwórz w Aplikacji", + "probe": "Otwórz w aplikacji", "probe-enabled": "Spróbuj otworzyć zawartość związaną z ActivityPub w NodeBB", "probe-enabled-help": "O ile włączone, NodeBB sprawdzi każdy odnośnik pod kątem odpowiednika ActivityPub, a załaduje w NodeBB.", "probe-timeout": "Czas oczekiwania (milisekundy)", diff --git a/public/language/pl/admin/settings/advanced.json b/public/language/pl/admin/settings/advanced.json index 522818a4d1..9de696bf83 100644 --- a/public/language/pl/admin/settings/advanced.json +++ b/public/language/pl/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Domyślnie: %1", "sockets.delay": "Opóźnienie ponownego łączenia", - "analytics.settings": "Ustawienia analityki", - "analytics.max-cache": "Maksymalna wartość pamięci podręcznej analityki", - "analytics.max-cache-help": "Przy dużym ruchu na forum weź poprawkę na to aby zapewnić pamięć podręczną przekraczającą liczbę odwiedzających stronę w tej samej chwili (potrzebny restartart).", "compression.settings": "Ustawienia Kompresji", "compression.enable": "Włącz Kompresję", "compression.help": "To ustawienie włącza kompresję gzip. Na stronach produkcyjnych o dużym ruchu, najlepiej ustawić kompresję na poziomie reverse-proxy. Możesz włączyć je tutaj na cele testów." diff --git a/public/language/pl/admin/settings/general.json b/public/language/pl/admin/settings/general.json index cf397e2aa5..ed26bb21bf 100644 --- a/public/language/pl/admin/settings/general.json +++ b/public/language/pl/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Struktura tytułu karty przeglądarki", "title-layout-help": "Określ strukturę tytułu karty przeglądarki, np. {pageTitle} | {browserTitle}", "description.placeholder": "Krótki opis twojej społeczności", - "description": "Wybierz stronę startową dla forum", + "description": "Opis strony", "keywords": "Słowa kluczowe strony", "keywords-placeholder": "Słowa kluczowe opisujące społeczność, oddzielone przecinkami", "logo-and-icons": "Logo i ikony strony", @@ -51,12 +51,13 @@ "topic-tools": "Narzędzia tematu", "home-page": "Strona główna", "home-page-route": "Ścieżka strony głównej", - "custom-route": "Niestandardowa Ścieżka", + "home-page-description": "Wybierz stronę, która ma być dostępna pod startowym URL tego forum.", + "custom-route": "Niestandardowa ścieżka", "allow-user-home-pages": "Zezwalaj na strony startowe użytkowników", - "home-page-title": "Tytuł strony głównej (domyślnie: „Strona Główna”)", + "home-page-title": "Tytuł strony głównej (domyślnie: \"Strona główna\")", "default-language": "Domyślny język", "auto-detect": "Automatycznie wykrywaj język gości", "default-language-help": "Domyślny język określa ustawienia języka dla wszystkich użytkowników, którzy odwiedzają forum.
Użytkownicy mogą zmienić domyślny język w ustawieniach swojego konta.", - "post-sharing": "Udostępnianie postów", - "info-plugins-additional": "Wtyczki mogą dodać dodatkowe platformy do udostępniania postów" + "post-sharing": "Udostępnianie wpisów", + "info-plugins-additional": "Wtyczki mogą dodać dodatkowe platformy do udostępniania wpisów." } \ No newline at end of file diff --git a/public/language/pl/category.json b/public/language/pl/category.json index f422bb0811..8f50d052b5 100644 --- a/public/language/pl/category.json +++ b/public/language/pl/category.json @@ -1,6 +1,8 @@ { "category": "Kategoria", "subcategories": "Podkategorie", + "uncategorized": "Nieokreślone", + "uncategorized.description": "Wątki, które nie do końca pasują do istniejących kategorii", "new-topic-button": "Nowy temat", "guest-login-post": "Zaloguj się, aby napisać post", "no-topics": "W tej kategorii nie ma jeszcze żadnych tematów.
Może pora na napisanie pierwszego?", diff --git a/public/language/pl/error.json b/public/language/pl/error.json index e62c08f1d0..a401ede3b2 100644 --- a/public/language/pl/error.json +++ b/public/language/pl/error.json @@ -184,7 +184,7 @@ "not-enough-reputation-custom-field": "Wymagane %1 reputatacji dla %2", "custom-user-field-value-too-long": "Zawartość dodatkowego pola za długa, %1", "custom-user-field-select-value-invalid": "Zawartość pola niewłaściwa, %1", - "custom-user-field-invalid-text": "Dodatkowe pole profilu jest wadliwa, %1", + "custom-user-field-invalid-text": "Dodatkowe pole profilu jest wadliwe, %1", "custom-user-field-invalid-link": "Odnośnik jest niewłaściwy, %1", "custom-user-field-invalid-number": "Wartość jest niewłaściwa, %1", "custom-user-field-invalid-date": "Data dodatkowego pola jest wadliwa, %1", @@ -232,6 +232,7 @@ "socket-reconnect-failed": "W tej chwili nie można połączyć się z serwerem. Kliknij tutaj, aby spróbować ponownie, lub spróbuj ponownie później", "invalid-plugin-id": "Niepoprawny identyfikator wtyczki", "plugin-not-whitelisted": "Nie da się zainstalować tej wtyczki – tylko wtyczki z białej listy menadżera pakietów NodeBB mogą być instalowane przez ACP", + "plugin-installation-via-acp-disabled": "Instalacja wtyczek przez ACP jest wyłączona", "plugins-set-in-configuration": "Nie możesz zmienić stanu wtyczki, bo został on zdefiniowany przy uruchamianiu (config.json, zmienne środowiskowe lub argumenty z terminala). Zamiast tego zmień konfigurację.", "theme-not-set-in-configuration": "Pamiętaj o zależności między aktywnymi wtyczkami a wystrojem, który ma z nimi współpracować.", "topic-event-unrecognized": "Zdarzenie w temacie '%1' nierozpoznane", @@ -249,7 +250,7 @@ "api.501": "Ścieżka jaką próbujesz wywołać, nie jest jeszcze zaimplementowana. Spróbuj ponownie jutro.", "api.503": "Ścieżka z którą próbujesz się połączyć, jest obecnie niedostępna z powodu konfiguracji serwera", "api.reauth-required": "Zasób, do którego próbujesz uzyskać dostęp, wymaga (być może ponownego) uwierzytelnienia.", - "activitypub.not-enabled": "Federation is not enabled on this server", + "activitypub.not-enabled": "Fediverse nie jest włączone na tym serwerze", "activitypub.invalid-id": "Nie można przetworzyć id na wejściu, czyli pewnie jest zdeformowane.", "activitypub.get-failed": "Nie udało się pobrać zadanego zasobu.", "activitypub.pubKey-not-found": "Nie udało się uzyskać klucza publicznego, więc nie może zajść weryfikacja zawartości.", diff --git a/public/language/pl/themes/harmony.json b/public/language/pl/themes/harmony.json index 0a7a315138..324acf6f5e 100644 --- a/public/language/pl/themes/harmony.json +++ b/public/language/pl/themes/harmony.json @@ -13,10 +13,11 @@ "settings.mobileTopicTeasers": "Pokazuj zwiastuny tematów na telefonie", "settings.stickyToolbar": "Przyklejaj pasek narzędziowy", "settings.stickyToolbar.help": "Pasek z narzędziami na stronach tematów i kategorii będzie przyklejony do góry strony", - "settings.topicSidebarTools": "Topic sidebar tools", - "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Automatycznie chowaj dolny panel", - "settings.autohideBottombar.help": "Dolny panel schowa się w widoku mobilnym, jeśli strona zostanie przesunięta w dół", + "settings.topicSidebarTools": "Narzędzia paska bocznego", + "settings.topicSidebarTools.help": "Ta opcja sprawi, że narzędzia wątku wskoczą do paska bocznego", + "settings.autohideBottombar": "Ukryj nawigację dla mobilnych z automatu", + "settings.autohideBottombar.help": "Belka dla mobilnych zostanie ukryta przy przewijaniu strony w dół", + "settings.topMobilebar": "Przenieś nawigację mobilną na szczyt", "settings.openSidebars": "Otwórz panele boczne", "settings.chatModals": "Włącz okienka czatu" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/advanced.json b/public/language/pt-BR/admin/settings/advanced.json index 84d1f48c6f..ade3213a4c 100644 --- a/public/language/pt-BR/admin/settings/advanced.json +++ b/public/language/pt-BR/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Padrão: %1", "sockets.delay": "Espera de Reconexão", - "analytics.settings": "Configurações de Analytics", - "analytics.max-cache": "Valor Máx. do Cache de Analytics", - "analytics.max-cache-help": "Em instalações de alto tráfego, o cache pode ser exaurido continuamente se houver mais usuários ativos simultâneos do que o valor Max Cache. (É necessário reiniciar)", "compression.settings": "Configurções de Compressão", "compression.enable": "Habilitar Compreesão", "compression.help": "Esta configuração ativa a compactação gzip. Para um site de alto tráfego em produção, a melhor maneira de implementar a compactação é implementá-la em um nível de proxy reverso. Você pode habilitá-lo aqui para fins de teste." diff --git a/public/language/pt-BR/admin/settings/general.json b/public/language/pt-BR/admin/settings/general.json index 14e76ff8d9..d59c71f9f5 100644 --- a/public/language/pt-BR/admin/settings/general.json +++ b/public/language/pt-BR/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Layout do Título", "title-layout-help": "Defina como o título do navegador será estruturado, por exemplo: {pageTitle} | {browserTitle}", "description.placeholder": "Uma descrição curta sobre a sua comunidade", - "description": "Escolha qual página será mostrada quando usuários navegarem para a URL raíz do seu fórum.", + "description": "Site Description", "keywords": "Palavras-chave do Site", "keywords-placeholder": "Palavras-chave descrevendo sua comunidade, separadas por vírgula", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Página Inicial", "home-page-route": "Rota da Página Inicial", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Rota Personalizada", "allow-user-home-pages": "Permitir Páginas Iniciais do Usuário", "home-page-title": "Título da página inicial (padrão \"Home\")", diff --git a/public/language/pt-BR/category.json b/public/language/pt-BR/category.json index bad6452df6..d584d88425 100644 --- a/public/language/pt-BR/category.json +++ b/public/language/pt-BR/category.json @@ -1,6 +1,8 @@ { "category": "Categoria", "subcategories": "Subcategorias", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Novo Tópico", "guest-login-post": "Entre para postar", "no-topics": "Não há tópicos nesta categoria.
Por que você não tenta postar um?", diff --git a/public/language/pt-BR/error.json b/public/language/pt-BR/error.json index e429c6f80c..950cd5aa56 100644 --- a/public/language/pt-BR/error.json +++ b/public/language/pt-BR/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Não foi possível acessar o servidor neste momento. Clique aqui para tentar novamente ou tente novamente mais tarde", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Não foi possível instalar o plugin - apenas os plug-ins permitidos pelo NodeBB Package Manager podem ser instalados através do ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Evento de tópico '%1' não reconhecido", diff --git a/public/language/pt-BR/themes/harmony.json b/public/language/pt-BR/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/pt-BR/themes/harmony.json +++ b/public/language/pt-BR/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/pt-PT/admin/settings/advanced.json b/public/language/pt-PT/admin/settings/advanced.json index 5b01a7fefd..7708e175da 100644 --- a/public/language/pt-PT/admin/settings/advanced.json +++ b/public/language/pt-PT/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Predefinição: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/pt-PT/admin/settings/general.json b/public/language/pt-PT/admin/settings/general.json index 605582eff1..8e7e464640 100644 --- a/public/language/pt-PT/admin/settings/general.json +++ b/public/language/pt-PT/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Escolhe qual página é apresentada quando os utilizadores navegam para o URL raiz do teu fórum.", + "description": "Site Description", "keywords": "Palavras-chave do Site", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Página Principal", "home-page-route": "Caminho da Página Principal", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Caminho personalizado", "allow-user-home-pages": "Permitir página principal personalizada para os utilizadores", "home-page-title": "Título da página inicial (predefinido \"Página inicial\")", diff --git a/public/language/pt-PT/category.json b/public/language/pt-PT/category.json index ff3b335d39..4953c9f1ce 100644 --- a/public/language/pt-PT/category.json +++ b/public/language/pt-PT/category.json @@ -1,6 +1,8 @@ { "category": "Categoria", "subcategories": "Subcategorias", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Novo Tópico", "guest-login-post": "Inicia sessão para publicar algo", "no-topics": "Não existe nenhum tópico nesta categoria.
Que tal seres o primeiro a publicar aqui?", diff --git a/public/language/pt-PT/error.json b/public/language/pt-PT/error.json index 227c67ba55..ed4702a3ee 100644 --- a/public/language/pt-PT/error.json +++ b/public/language/pt-PT/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/pt-PT/themes/harmony.json b/public/language/pt-PT/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/pt-PT/themes/harmony.json +++ b/public/language/pt-PT/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/ro/admin/settings/advanced.json b/public/language/ro/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/ro/admin/settings/advanced.json +++ b/public/language/ro/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/ro/admin/settings/general.json b/public/language/ro/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/ro/admin/settings/general.json +++ b/public/language/ro/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/ro/category.json b/public/language/ro/category.json index a2868a09bb..ee3ccaa929 100644 --- a/public/language/ro/category.json +++ b/public/language/ro/category.json @@ -1,6 +1,8 @@ { "category": "Categorie", "subcategories": "Subcategorii", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Subiect Nou", "guest-login-post": "Conecteaza-te pentru a posta", "no-topics": "Nu există nici un subiect de discuție în această categorie.
De ce nu încerci să postezi tu unul?", diff --git a/public/language/ro/error.json b/public/language/ro/error.json index 627a24414b..58e31c549b 100644 --- a/public/language/ro/error.json +++ b/public/language/ro/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/ro/themes/harmony.json b/public/language/ro/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/ro/themes/harmony.json +++ b/public/language/ro/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/advanced.json b/public/language/ru/admin/settings/advanced.json index caf3bd0ef3..1c949f2030 100644 --- a/public/language/ru/admin/settings/advanced.json +++ b/public/language/ru/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "По умолчанию: %1", "sockets.delay": "Задержка", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/ru/admin/settings/general.json b/public/language/ru/admin/settings/general.json index ea5e5fa1bd..21aceec945 100644 --- a/public/language/ru/admin/settings/general.json +++ b/public/language/ru/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Макет заголовка", "title-layout-help": "Укажите, как сформировать заголовок для браузера, напр.\n{название сайта} | {название для браузера}", "description.placeholder": "Краткое описание вашего сообщества", - "description": "Выберите, какую страницу показывать по корневому URL форума.", + "description": "Site Description", "keywords": "Ключевые слова для сайта", "keywords-placeholder": "Укажите через запятую ключевые слова, описывающие ваше сообщество", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Управление темой", "home-page": "Главная страница", "home-page-route": "Маршрут для главной страницы", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Другой маршрут", "allow-user-home-pages": "Разрешить пользователям выбирать персональные главные страницы", "home-page-title": "Заголовок домашней страницы («Главная» по умолчанию)", diff --git a/public/language/ru/category.json b/public/language/ru/category.json index 0c868965f4..0777a2c402 100644 --- a/public/language/ru/category.json +++ b/public/language/ru/category.json @@ -1,6 +1,8 @@ { "category": "Категория", "subcategories": "Подкатегории", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Создать тему", "guest-login-post": "Авторизуйтесь, чтобы написать сообщение", "no-topics": "В этой категории еще нет тем.
Почему бы вам не создать первую?", diff --git a/public/language/ru/error.json b/public/language/ru/error.json index 404e44e0a8..7148990f60 100644 --- a/public/language/ru/error.json +++ b/public/language/ru/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "В настоящее время невозможно связаться с сервером. Нажмите здесь, чтобы повторить попытку, или сделайте это позднее", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Не удалось установить плагин – только плагины, внесенные в белый список диспетчером пакетов NodeBB, могут быть установлены через ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Событие темы \"%1\" нераспознанно", diff --git a/public/language/ru/themes/harmony.json b/public/language/ru/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/ru/themes/harmony.json +++ b/public/language/ru/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/rw/admin/settings/advanced.json b/public/language/rw/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/rw/admin/settings/advanced.json +++ b/public/language/rw/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/rw/admin/settings/general.json b/public/language/rw/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/rw/admin/settings/general.json +++ b/public/language/rw/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/rw/category.json b/public/language/rw/category.json index b71de51d7c..9e476ecdf4 100644 --- a/public/language/rw/category.json +++ b/public/language/rw/category.json @@ -1,6 +1,8 @@ { "category": "Icyiciro", "subcategories": "Icyiciro gito", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Ikiganiro Gishya", "guest-login-post": "Injiramo wandike", "no-topics": "Nta biganiro byo muri iki cyiciro bihari
Watangije kimwe hano se?", diff --git a/public/language/rw/error.json b/public/language/rw/error.json index 05d3442175..d0f360ab05 100644 --- a/public/language/rw/error.json +++ b/public/language/rw/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/rw/themes/harmony.json b/public/language/rw/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/rw/themes/harmony.json +++ b/public/language/rw/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/sc/admin/settings/advanced.json b/public/language/sc/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/sc/admin/settings/advanced.json +++ b/public/language/sc/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/sc/admin/settings/general.json b/public/language/sc/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/sc/admin/settings/general.json +++ b/public/language/sc/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/sc/category.json b/public/language/sc/category.json index 7032bfb8c7..96b589501a 100644 --- a/public/language/sc/category.json +++ b/public/language/sc/category.json @@ -1,6 +1,8 @@ { "category": "Category", "subcategories": "Subcategories", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Arresonada Noa", "guest-login-post": "Log in to post", "no-topics": "Non bi sunt arresonadas in custa creze.
Pro ite non nde pones una?", diff --git a/public/language/sc/error.json b/public/language/sc/error.json index e6757200f1..f2c5fa7a39 100644 --- a/public/language/sc/error.json +++ b/public/language/sc/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/sc/themes/harmony.json b/public/language/sc/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/sc/themes/harmony.json +++ b/public/language/sc/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/sk/admin/settings/advanced.json b/public/language/sk/admin/settings/advanced.json index a464b384da..baf1cdf3bd 100644 --- a/public/language/sk/admin/settings/advanced.json +++ b/public/language/sk/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/sk/admin/settings/general.json b/public/language/sk/admin/settings/general.json index 961feb9697..2dfddf133e 100644 --- a/public/language/sk/admin/settings/general.json +++ b/public/language/sk/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Vzhľad názvu", "title-layout-help": "Určite, ako má byť zostavený názov prehliadača, tj. {pageTitle} | {browserTitle}", "description.placeholder": "Skrátený popis Vašej komunity", - "description": "Vyberte, akú stránku sa zobrazí, keď sa používatelia dostanú do koreňovej adresy URL vášho fóra.", + "description": "Site Description", "keywords": "Kľúčové slová pre stránky", "keywords-placeholder": "Kľúčové slová popisujúce Vašu komunitu, oddelené čiarkou", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Domovská stránka", "home-page-route": "Cesta k domovskej stránke", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Upraviť cestu", "allow-user-home-pages": "Povoliť používateľom domovské stránky", "home-page-title": "Titulok domovskej stránky (Predvolený „Domov”)", diff --git a/public/language/sk/category.json b/public/language/sk/category.json index 4501fb419d..07303af457 100644 --- a/public/language/sk/category.json +++ b/public/language/sk/category.json @@ -1,6 +1,8 @@ { "category": "Kategória", "subcategories": "Podkategórie", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nová téma", "guest-login-post": "Prihlásiť sa k pridávaniu príspevkov", "no-topics": "V tejto kategórií zatiaľ nie sú žiadne témy.
Môžete byť prvý!", diff --git a/public/language/sk/error.json b/public/language/sk/error.json index 941f5feb59..e64e1ac6f1 100644 --- a/public/language/sk/error.json +++ b/public/language/sk/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/sk/themes/harmony.json b/public/language/sk/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/sk/themes/harmony.json +++ b/public/language/sk/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/sl/admin/settings/advanced.json b/public/language/sl/admin/settings/advanced.json index ab1242a9b4..64cee9bee4 100644 --- a/public/language/sl/admin/settings/advanced.json +++ b/public/language/sl/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Privzeto: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "Pri namestitvah z velikim prometom bi se lahko predpomnilnik neprestano izčrpal, če je hkrati aktivnih uporabnikov več kot je največja vrednost predpomnilnika. (Potreben ponovni zagon)", "compression.settings": "Nastavitve stiskanja", "compression.enable": "Omogoči stiskanje", "compression.help": "Ta nastavitev omogoča stiskanje GZIP. Za produkcijsko spletno mesto z velikim prometom je najboljši način za uvedbo stiskanja izvajanje na obratni ravni proxyja. Za namene testiranja ga lahko omogočite tukaj." diff --git a/public/language/sl/admin/settings/general.json b/public/language/sl/admin/settings/general.json index c3fa039095..ea11d557c7 100644 --- a/public/language/sl/admin/settings/general.json +++ b/public/language/sl/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Postavitev naslova", "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}", "description.placeholder": "Kratek opis vaše skupnosti", - "description": "Izberite, katera stran se prikaže, ko se uporabniki pomaknejo do korenskega URL-ja vašega foruma.", + "description": "Site Description", "keywords": "Ključne besede spletnega mesta", "keywords-placeholder": "Ključne besede, ki opisujejo vašo skupnost, ločene z vejicami", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Domača stran", "home-page-route": "Pot do domače strani", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Pot po meri", "allow-user-home-pages": "Dovoli domače strani uporabnikov", "home-page-title": "Naslov domače strani (privzeto »Domača stran«)", diff --git a/public/language/sl/category.json b/public/language/sl/category.json index 10ac321844..336bbd591e 100644 --- a/public/language/sl/category.json +++ b/public/language/sl/category.json @@ -1,6 +1,8 @@ { "category": "Od sedaj naprej spremljate posodobitve te kategorije in njenih podkategorij.\nOd sedaj naprej ne spremljate posodobitev te kategorije in njenih podkategorij.", "subcategories": "Podkategorije", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nova tema", "guest-login-post": "Prijava", "no-topics": "V tej kategoriji ni tem.", diff --git a/public/language/sl/error.json b/public/language/sl/error.json index d3edb0a4a9..83f8a3bbdc 100644 --- a/public/language/sl/error.json +++ b/public/language/sl/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/sl/themes/harmony.json b/public/language/sl/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/sl/themes/harmony.json +++ b/public/language/sl/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/sq-AL/admin/settings/advanced.json b/public/language/sq-AL/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/sq-AL/admin/settings/advanced.json +++ b/public/language/sq-AL/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/sq-AL/admin/settings/general.json b/public/language/sq-AL/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/sq-AL/admin/settings/general.json +++ b/public/language/sq-AL/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/sq-AL/category.json b/public/language/sq-AL/category.json index 94f45c4810..6273cfaad4 100644 --- a/public/language/sq-AL/category.json +++ b/public/language/sq-AL/category.json @@ -1,6 +1,8 @@ { "category": "Kategoria", "subcategories": "Nënkategoritë", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Temë e re", "guest-login-post": "Hyr për të postuar", "no-topics": "Nuk ka tema në këtë kategori.
Pse nuk provon të postosh diçka?", diff --git a/public/language/sq-AL/error.json b/public/language/sq-AL/error.json index 2a57750eba..84a77bed74 100644 --- a/public/language/sq-AL/error.json +++ b/public/language/sq-AL/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Nuk mund të arrihet serveri në këtë moment. Kliko këtu për të provuar përsëri, ose provo më vonë", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Nuk mund të instalohet plugin – vetëm shtojcat e listuara në listën e bardhë nga Menaxheri i Paketave të NodeBB mund të instalohen nëpërmjet ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Ngjarja e temës '%1' nuk njihet", diff --git a/public/language/sq-AL/themes/harmony.json b/public/language/sq-AL/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/sq-AL/themes/harmony.json +++ b/public/language/sq-AL/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/sr/admin/settings/advanced.json b/public/language/sr/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/sr/admin/settings/advanced.json +++ b/public/language/sr/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/sr/admin/settings/general.json b/public/language/sr/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/sr/admin/settings/general.json +++ b/public/language/sr/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/sr/category.json b/public/language/sr/category.json index e43cf7d4db..418b7ee4f8 100644 --- a/public/language/sr/category.json +++ b/public/language/sr/category.json @@ -1,6 +1,8 @@ { "category": "Категорија", "subcategories": "Поткатегорије", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Нова тема", "guest-login-post": "Пријавите се да бисте послали поруку", "no-topics": "Нема тема у овој категорији.
Зашто не бисте поставили једну?", diff --git a/public/language/sr/error.json b/public/language/sr/error.json index 1252073081..3a3c8be272 100644 --- a/public/language/sr/error.json +++ b/public/language/sr/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Тренутно није могуће приступити серверу. Кликните овде да бисте покушали поново или покушајте поново касније", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Инсталација додатне компоненте &ndash није могућа; преко ACP-а могу се инсталирати само додатне компоненте које је на белој листи ставио NodeBB Package Manager", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "Није вам дозвољено да мењате стање додатне компоненте онако како је дефинисано у време извршавања (config.json, променљиве окружења или аргументи терминала), уместо тога измените конфигурацију.", "theme-not-set-in-configuration": "Приликом дефинисања активних додатних компоненти у конфигурацији, промена тема захтева додавање нове теме на листу активних додатних компоненти пре ажурирања у ACP", "topic-event-unrecognized": "Догађај из теме „%1“ није препознат", diff --git a/public/language/sr/themes/harmony.json b/public/language/sr/themes/harmony.json index 03c5638a6d..439fd93b97 100644 --- a/public/language/sr/themes/harmony.json +++ b/public/language/sr/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "Трака алата на страницама са темама и категоријама ће бити на врху странице", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Аутоматско сакривање доње траке", - "settings.autohideBottombar.help": "Доња трака у приказу за мобилне уређаје биће скривена када се страница помера надоле", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Омогући модале ћаскања" } \ No newline at end of file diff --git a/public/language/sv/admin/settings/advanced.json b/public/language/sv/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/sv/admin/settings/advanced.json +++ b/public/language/sv/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/sv/admin/settings/general.json b/public/language/sv/admin/settings/general.json index 6848747e86..d56c819745 100644 --- a/public/language/sv/admin/settings/general.json +++ b/public/language/sv/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "Choose what page is shown when users navigate to the root URL of your forum.", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Home Page", "home-page-route": "Home Page Route", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Custom Route", "allow-user-home-pages": "Allow User Home Pages", "home-page-title": "Title of the home page (default \"Home\")", diff --git a/public/language/sv/category.json b/public/language/sv/category.json index 6afc046f00..023e6c6024 100644 --- a/public/language/sv/category.json +++ b/public/language/sv/category.json @@ -1,6 +1,8 @@ { "category": "Kategori", "subcategories": "Underkategori", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Nytt ämne", "guest-login-post": "Logga in för att posta", "no-topics": "Det finns inga ämnen i denna kategori.
Varför skapar inte du ett ämne?", diff --git a/public/language/sv/error.json b/public/language/sv/error.json index 2eff186979..c80d0c25a0 100644 --- a/public/language/sv/error.json +++ b/public/language/sv/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/sv/themes/harmony.json b/public/language/sv/themes/harmony.json index 797298e428..70ea942824 100644 --- a/public/language/sv/themes/harmony.json +++ b/public/language/sv/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/th/admin/settings/advanced.json b/public/language/th/admin/settings/advanced.json index 982eaa2f64..fa1abbad0f 100644 --- a/public/language/th/admin/settings/advanced.json +++ b/public/language/th/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/th/admin/settings/general.json b/public/language/th/admin/settings/general.json index 29d02412e8..a0f6cc7655 100644 --- a/public/language/th/admin/settings/general.json +++ b/public/language/th/admin/settings/general.json @@ -15,7 +15,7 @@ "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": "เลือกหน้าเว็บที่จะแสดงเมื่อผู้ใช้ไปที่ URL หลักของฟอรัม", + "description": "Site Description", "keywords": "Site Keywords", "keywords-placeholder": "Keywords describing your community, comma-separated", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "หน้าแรก", "home-page-route": "เส้นทางหน้าแรก", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "เส้นทางที่กำหนดเอง", "allow-user-home-pages": "อนุญาตหน้าแรกของผู้ใช้", "home-page-title": "ชื่อของหน้าแรก (ค่าเริ่มต้นคือ \"Home\")", diff --git a/public/language/th/category.json b/public/language/th/category.json index 33eec3759a..a6ae26917c 100644 --- a/public/language/th/category.json +++ b/public/language/th/category.json @@ -1,6 +1,8 @@ { "category": "หมวดหมู่", "subcategories": "หมวดหมู่ย่อย", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "ตั้งกระทู้", "guest-login-post": "เข้าสู่ระบบเพื่อโพสต์", "no-topics": "ยังไม่มีกระทู้ในหมวดนี้
ลองโพสต์กระทู้แรกดูมั้ย?", diff --git a/public/language/th/error.json b/public/language/th/error.json index c24d6b5dac..8607f0000b 100644 --- a/public/language/th/error.json +++ b/public/language/th/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "ไม่สามารถติดต่อกับเซิร์ฟเวอร์ในขณะนี้ คลิกที่นี่เพื่อลองใหม่ หรือลองอีกครั้งภายหลัง", "invalid-plugin-id": "รหัสปลั๊กอินไม่ถูกต้อง", "plugin-not-whitelisted": "ไม่สามารถติดตั้งปลั๊กอิน – เฉพาะปลั๊กอินที่ได้รับอนุญาตจาก NodeBB Package Manager ถึงจะติดตั้งผ่านแผงควบคุมผู้ดูแลระบบได้", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "คุณไม่สามารถเปลี่ยนสถานะของปลั๊กอินเนื่องจากถูกกำหนดตอนรัน (ไฟล์ config.json, ตัวแปร environmental หรือระบุตอนสั่งในบรรทัดคำสั่ง) โปรดปรับที่การตั้งค่าแทน", "theme-not-set-in-configuration": "เมื่อกำหนดปลั๊กอันที่กำลังทำงานในส่วนตั้งค่า การเปลี่ยนธีมต้องเพิ่มทีมในรายการปลั๊กอินที่กำลังใช้งานก่อนที่จะเปลี่ยนในแผงควบคุมผู้ดูแล", "topic-event-unrecognized": "ไม่รู้จักอีเวนต์กระทู้ '%1'", diff --git a/public/language/th/themes/harmony.json b/public/language/th/themes/harmony.json index bd67eabcce..1f02284aa2 100644 --- a/public/language/th/themes/harmony.json +++ b/public/language/th/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "แถบเครื่องมือในหน้ากระทู้และหมวดหมู่จะอยู่ด้านบนสุดของหน้าเสมอ", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "ซ่อนแถบล่าง", - "settings.autohideBottombar.help": "แถบล่างบนมือถือจะถูกซ่อนเมื่อเลื่อนหน้าลง", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "เปิดแถบข้าง", "settings.chatModals": "เปิดใช้งานหน้าต่างแชท" } \ No newline at end of file diff --git a/public/language/tr/admin/settings/advanced.json b/public/language/tr/admin/settings/advanced.json index ee33386298..5f4efbd2f1 100644 --- a/public/language/tr/admin/settings/advanced.json +++ b/public/language/tr/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Varsayılan: %1", "sockets.delay": "Yeniden Bağlanma Gecikmesi", - "analytics.settings": "Analitik Ayarlar", - "analytics.max-cache": "Analitik Önbellek Maksimum Değeri", - "analytics.max-cache-help": "Yüksek trafikli zamanlarda, Maksimum Önbellek değerinden daha fazla eşzamanlı etkin kullanıcı varsa önbellek sürekli olarak tüketilebilir. (Yeniden başlatmak gerekir)", "compression.settings": "Sıkıştırma Ayarları", "compression.enable": "Sıkıştırmayı Aktifleştir", "compression.help": "Bu ayar gzip sıkıştırmasını etkinleştirir. Üretimdeki yüksek trafiğe sahip bir web sitesi için sıkıştırmayı uygulamaya koymanın en iyi yolu ters proxy düzeyinden uygulamaktır. Test amacıyla buradan etkinleştirebilirsiniz." diff --git a/public/language/tr/admin/settings/general.json b/public/language/tr/admin/settings/general.json index 552fa724cf..e553bcdf41 100644 --- a/public/language/tr/admin/settings/general.json +++ b/public/language/tr/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Başlık Düzeni", "title-layout-help": "Tarayıcı başlığının nasıl yapılandırılacağını tanımlayın örn. {pageTitle} | {browserTitle}", "description.placeholder": "Topluluk hakkında kısa bir açıklama yazın", - "description": "Kullanıcıların, forumunuzun kök bağlantısına gittiğinde hangi sayfanın görüntüleneceğini seçin.", + "description": "Site Description", "keywords": "Site Anahtar Kelimeler", "keywords-placeholder": "Topluluğunuzu tanımlayan anahtar kelimeler, virgülle-ayrılmış", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Konu Araçları", "home-page": "Ana Sayfa", "home-page-route": "Ana Sayfa Yolu", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Özel Yol", "allow-user-home-pages": "Kullanıcılara ana sayfalarını özelleştirmeleri için izin ver", "home-page-title": "Ana sayfanın başlığı (varsayılan \"Ana Sayfa\")", diff --git a/public/language/tr/category.json b/public/language/tr/category.json index cb38c05ace..ca8cf836ee 100644 --- a/public/language/tr/category.json +++ b/public/language/tr/category.json @@ -1,6 +1,8 @@ { "category": "Kategori", "subcategories": "Alt kategoriler", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Yeni Başlık", "guest-login-post": "Giriş Yap", "no-topics": " Bu kategoride hiç konu yok.
Yeni bir konu oluşturmak istemez misiniz?", diff --git a/public/language/tr/error.json b/public/language/tr/error.json index d2fce121fd..7a2724d40f 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Şu anda sunucuya ulaşılamıyor. Tekrar denemek için buraya tıklayın, veya daha sonra tekrar deneyin.", "invalid-plugin-id": "Geçersiz Eklenti ID", "plugin-not-whitelisted": "– eklentisi yüklenemedi, sadece NodeBB Paket Yöneticisi tarafından onaylanan eklentiler kontrol panelinden kurulabilir", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Konu aktivitesi '%1' tanımlanamadı", diff --git a/public/language/tr/themes/harmony.json b/public/language/tr/themes/harmony.json index b8f56c369a..4c233e77d8 100644 --- a/public/language/tr/themes/harmony.json +++ b/public/language/tr/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "Kategori ve konu sayfalarındaki araç çubuğu sayfanın üstünde sabitlenmiş şekilde kalacak", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Alttaki şeridi otomatik olarak gizle", - "settings.autohideBottombar.help": "Sayfanın altındaki şerit sayfayı aşağıya doğru kaydırırken mobilde gizlenecek", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Yan menüleri aç", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/uk/admin/settings/advanced.json b/public/language/uk/admin/settings/advanced.json index 58e45a1bfb..0a50bdfd84 100644 --- a/public/language/uk/admin/settings/advanced.json +++ b/public/language/uk/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Default: %1", "sockets.delay": "Reconnection Delay", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/uk/admin/settings/general.json b/public/language/uk/admin/settings/general.json index 321c2a26e2..96962dfe01 100644 --- a/public/language/uk/admin/settings/general.json +++ b/public/language/uk/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Структура заголовка", "title-layout-help": "Визначте як заголовок браузера буде сформовано, наприклад {pageTitle} | {browserTitle}", "description.placeholder": "Короткий опис вашої спільноти", - "description": "Вкажіть яку сторінку показувати коли користувач переходить на корньовий URL форуму.", + "description": "Site Description", "keywords": "Ключові слова сайту", "keywords-placeholder": "Ключові слова, що описують вашу спільноту, розділені комами", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "Головна сторінка", "home-page-route": "Шлях головної сторінки", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "Користувацький шлях", "allow-user-home-pages": "Дозволити користувачам власні сторінки", "home-page-title": "Назва домашньої сторінки (за замовчуванням \"Домашня сторінка\")", diff --git a/public/language/uk/category.json b/public/language/uk/category.json index fa48efea41..42f490d22b 100644 --- a/public/language/uk/category.json +++ b/public/language/uk/category.json @@ -1,6 +1,8 @@ { "category": "Категорія", "subcategories": "Підкатегорія", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "Новий запис", "guest-login-post": "Увійдіть, щоб постити", "no-topics": " У цій категорії немає жодної теми.
Чому б вам не створити першу?", diff --git a/public/language/uk/error.json b/public/language/uk/error.json index fc415db9f3..bc164a2cdb 100644 --- a/public/language/uk/error.json +++ b/public/language/uk/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "Invalid plugin ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/uk/themes/harmony.json b/public/language/uk/themes/harmony.json index e3ba514912..727a1b0553 100644 --- a/public/language/uk/themes/harmony.json +++ b/public/language/uk/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "Open sidebars", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/public/language/vi/admin/advanced/cache.json b/public/language/vi/admin/advanced/cache.json index bb874c1930..d1c5839d64 100644 --- a/public/language/vi/admin/advanced/cache.json +++ b/public/language/vi/admin/advanced/cache.json @@ -1,9 +1,9 @@ { - "cache": "Bộ đệm", - "post-cache": "Bộ Nhớ Đệm Bài Viết", - "group-cache": "Bộ Nhớ Đệm Nhóm", - "local-cache": "Bộ Nhớ Đệm Cục Bộ", - "object-cache": "Bộ Nhớ Đệm Đối Tượng", + "cache": "Bộ nhớ đệm", + "post-cache": "Bộ Đệm Bài Đăng", + "group-cache": "Bộ Đệm Nhóm", + "local-cache": "Bộ Đệm Cục Bộ", + "object-cache": "Bộ Đệm Đối Tượng", "percent-full": "%1% Đầy", "post-cache-size": "Kích Cỡ Bộ Đệm Bài Đăng", "items-in-cache": "Các Mục trong Bộ Đệm" diff --git a/public/language/vi/admin/advanced/database.json b/public/language/vi/admin/advanced/database.json index 3197226f05..21303274fb 100644 --- a/public/language/vi/admin/advanced/database.json +++ b/public/language/vi/admin/advanced/database.json @@ -2,20 +2,20 @@ "x-b": "%1 b", "x-mb": "%1 mb", "x-gb": "%1 gb", - "uptime-seconds": "Hoạt động theo Giây", + "uptime-seconds": "Thời Gian Chạy tính theo Giây", "uptime-days": "Hoạt động theo Ngày", "mongo": "MongoDB", "mongo.version": "Phiên bản MongoDB ", "mongo.storage-engine": "Công Cụ Lưu Trữ", - "mongo.collections": "Tập dữ liệu", + "mongo.collections": "Tập Dữ Liệu", "mongo.objects": "Đối tượng", - "mongo.avg-object-size": "Kích cỡ Trung bình Đối Tượng", + "mongo.avg-object-size": "Kích Cỡ Trung Bình Đối Tượng", "mongo.data-size": "Kích thước dữ liệu", "mongo.storage-size": "Kích thước lưu trữ", "mongo.index-size": "Kích thước chỉ mục", "mongo.file-size": "Kích cỡ tệp", - "mongo.resident-memory": "Bộ Nhớ Thường Trú", + "mongo.resident-memory": "Bộ Nhớ Thực Sự Sử Dụng", "mongo.virtual-memory": "Bộ Nhớ Ảo", "mongo.mapped-memory": "Bộ nhớ được ánh xạ", "mongo.bytes-in": "Byte trong", diff --git a/public/language/vi/admin/appearance/skins.json b/public/language/vi/admin/appearance/skins.json index a3a7ca9392..743d91f24b 100644 --- a/public/language/vi/admin/appearance/skins.json +++ b/public/language/vi/admin/appearance/skins.json @@ -1,6 +1,6 @@ { "skins": "Trang điểm", - "bootswatch-skins": "Trang Điểm Đồng Hồ Khởi Động", + "bootswatch-skins": "Trang Điểm Giao Diện", "custom-skins": "Trang Điểm Tùy Chỉnh", "add-skin": "Thêm Trang Điểm", "save-custom-skins": "Lưu Trang Điểm Tùy Chỉnh", @@ -14,5 +14,5 @@ "current-skin": "Trang Điểm Hiện Tại", "skin-updated": "Đã Cập Nhật Trang Điểm", "applied-success": "%1 trang điểm sử dụng thành công", - "revert-success": "Đã trả trang điểm về màu cơ bản" + "revert-success": "Trang điểm đã về màu cơ bản" } \ No newline at end of file diff --git a/public/language/vi/admin/dashboard.json b/public/language/vi/admin/dashboard.json index 619eb9f93b..1ee8f9ff54 100644 --- a/public/language/vi/admin/dashboard.json +++ b/public/language/vi/admin/dashboard.json @@ -3,7 +3,7 @@ "page-views": "Xem Trang", "unique-visitors": "Khách Độc Lập", "logins": "Đăng nhập", - "new-users": "Người dùng mới", + "new-users": "Người Mới", "posts": "Lượt Đăng", "topics": "Chủ đề", "page-views-seven": "7 ngày trước", diff --git a/public/language/vi/admin/manage/users.json b/public/language/vi/admin/manage/users.json index dc870f4693..49fd318d4b 100644 --- a/public/language/vi/admin/manage/users.json +++ b/public/language/vi/admin/manage/users.json @@ -28,7 +28,7 @@ "add-group": "Thêm Nhóm", "create": "Tạo Người Dùng", "invite": "Mời qua Email", - "new": "Người Dùng Mới", + "new": "Người Mới", "filter-by": "Lọc theo", "pills.unvalidated": "Không Hợp Lệ", "pills.validated": "Đã xác thực", diff --git a/public/language/vi/admin/settings/advanced.json b/public/language/vi/admin/settings/advanced.json index 10d7079b5a..b6c2785458 100644 --- a/public/language/vi/admin/settings/advanced.json +++ b/public/language/vi/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "Mặc định: %1", "sockets.delay": "Độ Trễ Kết Nối Lại", - "analytics.settings": "Cài Đặt Phân Tích", - "analytics.max-cache": "Giá trị tối đa trong bộ nhớ đệm cho phân tích", - "analytics.max-cache-help": "Cài đặt khi có lưu lượng truy cập cao, bộ nhớ đệm có thể bị cạn liên tục nếu có nhiều người dùng hoạt động cùng lúc hơn giá trị Bộ Nhớ Đệm tối đa. (Yêu cầu khởi động lại)", "compression.settings": "Cài Đặt Nén", "compression.enable": "Bật Nén", "compression.help": "Cài đặt này bật nén gzip. Với trang web có lượng truy cập cao khi vận hành, tốt nhất để đặt tính năng nén là triển khai nó ở cấp độ proxy ngược. Bạn có thể bật nó ở đây cho việc thử nghiệm." diff --git a/public/language/vi/admin/settings/email.json b/public/language/vi/admin/settings/email.json index e94da09d29..4b87cb981f 100644 --- a/public/language/vi/admin/settings/email.json +++ b/public/language/vi/admin/settings/email.json @@ -41,7 +41,7 @@ "subscriptions.hour": "Giờ Thông Báo", "subscriptions.hour-help": "Vui lòng nhập một số đại diện cho giờ để gửi thông báo email đã lên lịch (VD: 0 cho nửa đêm, 17 cho 5:00 chiều). Hãy nhớ rằng đây là giờ theo chính máy chủ và có thể không khớp chính xác với đồng hồ hệ thống của bạn.
Thời gian máy chủ gần đúng là:
Thông báo hàng ngày kế tiếp được lên lịch để gửi ", "notifications.remove-images": "Xóa hình ảnh khỏi thông báo email", - "require-email-address": "Bắt buộc người dùng mới phải điền địa chỉ email", + "require-email-address": "Yêu cầu người dùng mới phải ghi địa chỉ email", "require-email-address-warning": "Mặc định, người dùng có thể từ chối nhập địa chỉ email bằng cách để trống trường này. Bật tùy chọn này nghĩa là người dùng mới sẽ phải nhập và xác nhận một địa chỉ email để tiến hành đăng ký và tiếp theo truy cập vào diễn đàn. Nó không đảm bảo người dùng sẽ nhập địa chỉ email thực, thậm chí không phải là địa chỉ mà họ sở hữu.", "send-validation-email": "Gửi email xác thực khi một email được thêm vào hoặc thay đổi", "include-unverified-emails": "Gửi email đến những người nhận chưa xác nhận rõ ràng email của họ", diff --git a/public/language/vi/admin/settings/general.json b/public/language/vi/admin/settings/general.json index d2e924a248..0637405db9 100644 --- a/public/language/vi/admin/settings/general.json +++ b/public/language/vi/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "Bố Cục Tiêu Đề", "title-layout-help": "Xác định cách tiêu đề trình duyệt sẽ được cấu trúc, tức là {pageTitle} | {browserTitle}", "description.placeholder": "Mô tả ngắn gọn về cộng đồng của bạn", - "description": "Chọn trang hiển thị khi người dùng chuyển hướng đến URL gốc diễn đàn của bạn.", + "description": "Mô Tả Trang", "keywords": "Từ Khóa Trang", "keywords-placeholder": "Các từ khóa mô tả cộng đồng của bạn, được phân tách bằng dấu phẩy", "logo-and-icons": "Lô-gô & Biểu Tượng Trang", @@ -51,6 +51,7 @@ "topic-tools": "Công cụ chủ đề", "home-page": "Trang Chủ", "home-page-route": "Liên Kết Trang Chủ", + "home-page-description": "Chọn trang nào được hiển thị khi người dùng điều hướng đến URL gốc của diễn đàn của bạn.", "custom-route": "Tùy Chỉnh Liên Kết", "allow-user-home-pages": "Cho Phép Trang Chủ Người Dùng", "home-page-title": "Tiêu đề trang chủ (mặc định là \"Trang chủ\")", diff --git a/public/language/vi/admin/settings/post.json b/public/language/vi/admin/settings/post.json index 3e4772f3dc..adf16f815d 100644 --- a/public/language/vi/admin/settings/post.json +++ b/public/language/vi/admin/settings/post.json @@ -2,8 +2,8 @@ "general": "Chung", "sorting": "Sắp Xếp Bài Đăng", "sorting.post-default": "Sắp Xếp Bài Đăng Mặc Định", - "sorting.oldest-to-newest": "Cũ nhất đến Mới nhất", - "sorting.newest-to-oldest": "Mới nhất đến Cũ nhất", + "sorting.oldest-to-newest": "Cũ Đến Mới", + "sorting.newest-to-oldest": "Mới Đến Cũ", "sorting.recently-replied": "Trả Lời Gần Đây", "sorting.recently-created": "Đã Tạo Gần Đây", "sorting.most-votes": "Nhiều Bình Chọn", @@ -25,7 +25,7 @@ "restrictions.replies-no-delete": "Số câu trả lời sau khi người dùng không được phép xóa chủ đề của chính họ (đặt thành 0 để tắt)", "restrictions.title-length": "Độ dài tiêu đề", "restrictions.post-length": "Độ dài bài đăng", - "restrictions.days-until-stale": "Số ngày cho đến khi chủ đề được coi là cũ", + "restrictions.days-until-stale": "Số ngày đến khi chủ đề bị coi là cũ", "restrictions.stale-help": "Nếu một chủ đề được coi là \"cũ\" thì cảnh báo sẽ được hiển thị cho những người dùng cố gắng trả lời chủ đề đó. (đặt thành 0 để tắt)", "timestamp": "Mốc thời gian", "timestamp.cut-off": "Giới hạn ngày (tính theo ngày)", diff --git a/public/language/vi/admin/settings/reputation.json b/public/language/vi/admin/settings/reputation.json index 8783121a00..886f0b6ed2 100644 --- a/public/language/vi/admin/settings/reputation.json +++ b/public/language/vi/admin/settings/reputation.json @@ -4,7 +4,7 @@ "disable-down-voting": "Tắt Phản Đối", "upvote-visibility": "Khả năng hiển thị số ủng hộ", "upvote-visibility-all": "Mọi người có thể xem số ủng hộ", - "upvote-visibility-loggedin": "Chỉ người dùng đã đăng nhập mới có thể xem số ủng hộ", + "upvote-visibility-loggedin": "Chỉ người đã đăng nhập được xem số ủng hộ", "upvote-visibility-privileged": "Chỉ những ai có đặc quyền như admin và mod được xem số ủng hộ", "downvote-visibility": "Khả năng hiển thị số phản đối", "downvote-visibility-all": "Mọi người có thể xem số phản đối", diff --git a/public/language/vi/admin/settings/user.json b/public/language/vi/admin/settings/user.json index e1721d6901..b023915ad6 100644 --- a/public/language/vi/admin/settings/user.json +++ b/public/language/vi/admin/settings/user.json @@ -16,7 +16,7 @@ "hide-email": "Ẩn email khỏi người dùng", "show-fullname-as-displayname": "Hiển thị tên đầy đủ của người dùng làm tên hiển thị của họ nếu có", "themes": "Giao diện", - "disable-user-skins": "Ngăn người dùng chọn trang điểm tùy chỉnh", + "disable-user-skins": "Chặn người dùng chọn trang điểm tùy ý", "account-protection": "Bảo Vệ Tài Khoản", "admin-relogin-duration": "Thời lượng đăng nhập lại của quản trị viên (phút)", "admin-relogin-duration-help": "Sau một khoảng thời gian truy cập nhất định vào phần quản trị sẽ yêu cầu đăng nhập lại, hãy đặt thành 0 để tắt", @@ -82,13 +82,13 @@ "categoryWatchState.tracking": "Theo dõi", "categoryWatchState.notwatching": "Chưa Xem", "categoryWatchState.ignoring": "Bỏ Qua", - "restrictions-new": "Hạn chế người dùng mới", + "restrictions-new": "Hạn Chế Người Mới", "restrictions.rep-threshold": "Ngưỡng uy tín trước khi những hạn chế này được dỡ bỏ", - "restrictions.seconds-between-new": "Giây giữa các bài viết cho người dùng mới", - "restrictions.seconds-before-new": "Số giây trước khi người dùng mới có thể đăng bài đầu tiên của họ", - "restrictions.seconds-edit-after-new": "Số giây một bài đăng vẫn có thể chỉnh sửa đối với người dùng mới (đặt thành 0 để tắt)", + "restrictions.seconds-between-new": "Số giây giữa các bài cho người mới", + "restrictions.seconds-before-new": "Số giây trước khi người mới được đăng bài đầu tiên của họ", + "restrictions.seconds-edit-after-new": "Số giây một bài đăng vẫn có thể chỉnh sửa đối với người mới (đặt thành 0 để tắt)", "restrictions.milliseconds-between-messages": "Thời gian giữa các tin nhắn trò chuyện đối với người dùng mới (ms)", - "restrictions.groups-exempt-from-new-user-restrictions": "Chọn các nhóm sẽ được miễn các hạn chế mới đối với người dùng", + "restrictions.groups-exempt-from-new-user-restrictions": "Chọn các nhóm được miễn trừ hạn chế mới đối với người dùng mới", "guest-settings": "Cài Đặt Khách", "handles.enabled": "Cho phép xử lý khách", "handles.enabled-help": "Tùy chọn này hiển thị một trường mới cho phép khách chọn tên để liên kết với mỗi bài đăng mà họ thực hiện. Nếu bị tắt, họ sẽ chỉ được gọi là \"Khách\"", diff --git a/public/language/vi/category.json b/public/language/vi/category.json index db5e443add..445772b0f1 100644 --- a/public/language/vi/category.json +++ b/public/language/vi/category.json @@ -1,9 +1,11 @@ { "category": "Danh mục", "subcategories": "Danh mục phụ", + "uncategorized": "Chưa có danh mục", + "uncategorized.description": "Các chủ đề không phù hợp với bất kỳ danh mục hiện có nào", "new-topic-button": "Chủ Đề Mới", "guest-login-post": "Đăng nhập để đăng bài", - "no-topics": "Không chủ đề nào trong danh mục này.
Tại sao bạn không thử đăng?", + "no-topics": "Không có chủ đề nào trong danh mục này.
Sao bạn không thử đăng?", "browsing": "lướt xem", "no-replies": "Không có ai trả lời", "no-new-posts": "Không bài đăng mới.", diff --git a/public/language/vi/error.json b/public/language/vi/error.json index 3638e8b12b..4eb6415fb4 100644 --- a/public/language/vi/error.json +++ b/public/language/vi/error.json @@ -90,8 +90,8 @@ "title-too-long": "Hãy nhập tiêu đề ngắn hơn. Tiêu đề không thể dài hơn %1 ký tự.", "category-not-selected": "Danh mục không được chọn.", "too-many-posts": "Bạn chỉ có đăng một bài mới mỗi %1 giây - vui lòng đợi để tiếp tục đăng bài.", - "too-many-posts-newbie": "Là người dùng mới, bạn chỉ có thể đăng %1 giây một lần cho đến khi bạn đạt được %2 danh tiếng - vui lòng đợi trước khi đăng lại", - "too-many-posts-newbie-minutes": "Là người dùng mới, bạn chỉ được đăng bài %1 phút một lần cho đến khi bạn đạt được %2 danh tiếng - vui lòng đợi trước khi đăng lại", + "too-many-posts-newbie": "Là người mới, bạn chỉ có thể đăng %1 giây một lần cho đến khi bạn đạt được %2 danh tiếng - vui lòng đợi trước khi đăng lại", + "too-many-posts-newbie-minutes": "Là người mới, bạn chỉ được đăng bài %1 phút một lần cho đến khi bạn đạt được %2 danh tiếng - vui lòng đợi trước khi đăng lại", "already-posting": "Bạn đã đăng rồi", "tag-too-short": "Vui lòng nhập tag dài hơn. Tag phải chứa ít nhất %1 ký tự.", "tag-too-long": "Vui lòng nhập tag ngắn hơn. Tag không thể dài hơn %1 ký tự.", @@ -112,8 +112,8 @@ "cant-merge-scheduled": "Các chủ đề đã lên lịch không thể gộp", "cant-move-posts-to-scheduled": "Không thể đưa bài sang chủ đề đã lên lịch.", "cant-move-from-scheduled-to-existing": "Không thể chuyển bài đăng từ một chủ đề đã lên lịch sang một chủ đề hiện có.", - "already-bookmarked": "Bạn đã đánh dấu trang chủ đề này rồi", - "already-unbookmarked": "Bạn đã hủy đánh dấu trang chủ đề này rồi", + "already-bookmarked": "Bạn đã đánh dấu bài đăng này", + "already-unbookmarked": "Bạn đã không đánh dấu bài đăng này", "cant-ban-other-admins": "Bạn không thể cấm quản trị viên khác!", "cant-mute-other-admins": "Bạn không thể buộc quản trị viên khác im lặng!", "user-muted-for-hours": "Bạn bị buộc giữ im lặng, bạn sẽ có thể đăng sau %1 giờ", @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Không thể truy cập máy chủ vào lúc này. Nhấp vào đây để thử lại hoặc thử lại sau", "invalid-plugin-id": "ID plugin không hợp lệ", "plugin-not-whitelisted": "Không thể cài đặt plugin – chỉ có plugin được Quản Lý Gói NodeBB đưa vào danh sách trắng mới có thể được cài đặt qua ACP", + "plugin-installation-via-acp-disabled": "Cài đặt plugin qua ACP bị tắt", "plugins-set-in-configuration": "Bạn không được phép thay đổi trạng thái plugin vì chúng được xác định trong thời gian chạy (config.json, biến môi trường hoặc đối số đầu cuối), thay vào đó hãy sửa đổi cấu hình.", "theme-not-set-in-configuration": "Khi xác định các plugin hoạt động trong cấu hình, thay đổi giao diện buộc phải thêm giao diện mới vào danh sách các plugin hoạt động trước khi cập nhật nó trong ACP", "topic-event-unrecognized": "Sự kiện chủ đề '%1' không được công nhận", @@ -249,7 +250,7 @@ "api.501": "Định tuyến bạn đang cố gắng gọi chưa được triển khai, vui lòng thử lại vào ngày mai", "api.503": "Định tuyến bạn đang cố gọi hiện không khả dụng do cấu hình máy chủ", "api.reauth-required": "Tài nguyên bạn đang cố truy cập yêu cầu xác thực (lại).", - "activitypub.not-enabled": "Federation is not enabled on this server", + "activitypub.not-enabled": "Liên đoàn không được bật trên máy chủ này", "activitypub.invalid-id": "Không thể giải quyết id đầu vào, có thể vì nó không đúng định dạng.", "activitypub.get-failed": "Không thể truy xuất tài nguyên được chỉ định.", "activitypub.pubKey-not-found": "Không thể giải quyết khóa công khai, do đó việc xác minh payload không thể diễn ra.", diff --git a/public/language/vi/global.json b/public/language/vi/global.json index c54ff71d72..27300b81f7 100644 --- a/public/language/vi/global.json +++ b/public/language/vi/global.json @@ -72,14 +72,14 @@ "x-topics": "%1 chủ để", "x-reputation": "%1 uy tín", "best": "Tốt", - "controversial": "Gây tranh cãi", + "controversial": "Tranh cãi", "votes": "Bình chọn", "x-votes": "%1 bình chọn", "voters": "Người Bình Chọn", - "upvoters": "Người Ủng Hộ", - "upvoted": "Đã ủng hộ", + "upvoters": "Người ủng hộ", + "upvoted": "Ủng hộ", "downvoters": "Người phản đối", - "downvoted": "Đã phản đối", + "downvoted": "Phản đối", "views": "Lượt xem", "posters": "Người đăng bài", "reputation": "Uy tín", diff --git a/public/language/vi/modules.json b/public/language/vi/modules.json index e392bc9c7b..74436afff8 100644 --- a/public/language/vi/modules.json +++ b/public/language/vi/modules.json @@ -105,7 +105,7 @@ "composer.zen-mode": "Chế Độ Zen", "composer.select-category": "Chọn chuyên mục", "composer.textarea.placeholder": "Nhập nội dung bài đăng của bạn vào đây, kéo và thả hình ảnh", - "composer.post-queue-alert": "Chào👋!
Diễn đàn này dùng hệ thống xếp hàng bài đăng, vì bạn là người dùng mới nên bài đăng của bạn bị ẩn cho đến khi nhóm kiểm duyệt chấp thuận.", + "composer.post-queue-alert": "Chào👋!
Diễn đàn này dùng hệ thống xếp hàng bài đăng, vì bạn là người mới nên bài đăng của bạn bị ẩn cho đến khi nhóm kiểm duyệt chấp thuận.", "composer.schedule-for": "Lên lịch chủ đề cho", "composer.schedule-date": "Ngày", "composer.schedule-time": "Thời gian", diff --git a/public/language/vi/pages.json b/public/language/vi/pages.json index bbe1d38680..851486de52 100644 --- a/public/language/vi/pages.json +++ b/public/language/vi/pages.json @@ -16,7 +16,7 @@ "post-queue": "Xếp Hàng Bài Viết", "registration-queue": "Hàng đợi đăng ký", "users/online": "Thành viên trực tuyến", - "users/latest": "Người Dùng Mới Nhất", + "users/latest": "Người Mới Nhất", "users/sort-posts": "Người dùng nhiều bài đăng nhất", "users/sort-reputation": "Người dùng uy tín cao nhất", "users/banned": "Người dùng bị cấm", @@ -50,7 +50,7 @@ "account/groups": "Nhóm của %1", "account/watched-categories": "Danh Mục Đã Xem Của %1", "account/watched-tags": "%1's Thẻ Đã Xem", - "account/bookmarks": "Bài Đăng Được Đánh Dấu Trang Của %1", + "account/bookmarks": "Đánh Dấu Bài Đăng Của %1", "account/settings": "Cài Đặt Người Dùng", "account/settings-of": "Thay đổi cài đặt của %1", "account/watched": "Chủ đề đã được %1 xem", diff --git a/public/language/vi/themes/harmony.json b/public/language/vi/themes/harmony.json index a4740df89e..42be89ca94 100644 --- a/public/language/vi/themes/harmony.json +++ b/public/language/vi/themes/harmony.json @@ -1,5 +1,5 @@ { - "theme-name": "Chủ Đề Hòa Âm", + "theme-name": "Chủ Đề Hài Hòa", "skins": "Trang điểm", "collapse": "Thu gọn", "expand": "Mở rộng", @@ -13,10 +13,11 @@ "settings.mobileTopicTeasers": "Hiển thị đoạn giới thiệu chủ đề trên di động", "settings.stickyToolbar": "Thanh công cụ cố định", "settings.stickyToolbar.help": "Thanh công cụ trên các trang chủ đề và danh mục sẽ nằm ở đầu trang", - "settings.topicSidebarTools": "Topic sidebar tools", - "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Tự động ẩn thanh dưới cùng", - "settings.autohideBottombar.help": "Thanh dưới cùng trên chế độ xem di động sẽ ẩn khi trang được cuộn xuống", + "settings.topicSidebarTools": "Công cụ thanh bên chủ đề", + "settings.topicSidebarTools.help": "Tùy chọn này sẽ chuyển các công cụ chủ đề sang thanh bên trên máy tính để bàn", + "settings.autohideBottombar": "Tự động ẩn thanh điều hướng di động", + "settings.autohideBottombar.help": "Thanh di động sẽ bị ẩn khi trang được cuộn xuống", + "settings.topMobilebar": "Di chuyển thanh điều hướng di động lên đỉnh", "settings.openSidebars": "Mở thanh bên", "settings.chatModals": "Bật phương thức trò chuyện" } \ No newline at end of file diff --git a/public/language/vi/topic.json b/public/language/vi/topic.json index c501addfc7..409a6e3483 100644 --- a/public/language/vi/topic.json +++ b/public/language/vi/topic.json @@ -3,7 +3,7 @@ "title": "Tiêu đề", "no-topics-found": "Không tìm thấy chủ đề nào!", "no-posts-found": "Không thấy bài nào!", - "post-is-deleted": "Bài gửi này đã bị xóa!", + "post-is-deleted": "Đã xóa bài đăng này!", "topic-is-deleted": "Chủ đề này đã bị xóa!", "profile": "Hồ sơ", "posted-by": "Được đăng bởi %1", @@ -83,7 +83,7 @@ "ignoring-topic.message": "Bạn sẽ không thấy chủ đề này trong danh sách chủ đề chưa đọc. Bạn sẽ nhận thông báo khi bạn được đề cập hoặc bài viết của bạn được ủng hộ.", "login-to-subscribe": "Vui lòng đăng ký hoặc đăng nhập để theo dõi chủ đề này", "markAsUnreadForAll.success": "Chủ đề đã đánh dấu chưa đọc cho tất cả", - "mark-unread": "Đánh dấu chưa đọc", + "mark-unread": "Chưa đọc", "mark-unread.success": "Đã đánh dấu chủ đề chưa đọc.", "watch": "Xem", "unwatch": "Bỏ xem", @@ -98,8 +98,8 @@ "ignoring.description": "Đừng thông báo tôi các trả lời mới.
Không hiển thị chủ đề chưa đọc.", "thread-tools.title": "Công cụ chủ đề", "thread-tools.markAsUnreadForAll": "Đánh Dấu Chưa Đọc Tất Cả", - "thread-tools.pin": "Ghim chủ đề", - "thread-tools.unpin": "Bỏ ghim chủ đề", + "thread-tools.pin": "Ghim Chủ Đề", + "thread-tools.unpin": "Bỏ Ghim Chủ Đề", "thread-tools.lock": "Khóa Chủ Đề", "thread-tools.unlock": "Mở Khóa Chủ Đề", "thread-tools.move": "Di Chuyển Chủ Đề", @@ -125,32 +125,32 @@ "topic-move-undone": "Đã hoàn tác di chuyển chủ đề", "topic-move-posts-success": "Bài viết sẽ sớm được di chuyển. Nhấn vào đây để hoàn tác.", "topic-move-posts-undone": "Đã hoàn tác di chuyển bài viết", - "post-delete-confirm": "Bạn có chắc là muốn xóa bài gửi này không?", + "post-delete-confirm": "Bạn có chắc muốn xóa bài đăng này không?", "post-restore-confirm": "Bạn có chắc muốn khôi phục bài đăng này không?", "post-purge-confirm": "Bạn có chắc muốn xóa hẳn bài này?", "pin-modal-expiry": "Ngày Hết Hạn", - "pin-modal-help": "Bạn có thể đặt ngày hết hạn chủ đề được ghim tại đây. Ngoài ra, bạn có thể để trống để giữ chủ đề được ghim cho đến khi chủ đề được bỏ ghim theo cách thủ công.", + "pin-modal-help": "Bạn có thể đặt ngày hết hạn cho các chủ đề được ghim tại đây. Ngoài ra, bạn có thể để trống để giữ chủ đề được ghim cho đến khi chủ đề được bỏ ghim theo cách thủ công.", "load-categories": "Đang Tải Chuyên Mục", "confirm-move": "Di chuyển", "confirm-fork": "Tạo bảo sao", - "bookmark": "Đánh dấu trang", - "bookmarks": "Đánh dấu trang", - "bookmarks.has-no-bookmarks": "Bạn chưa đánh dấu trang bài viết nào cả.", + "bookmark": "Dấu trang", + "bookmarks": "Dấu trang", + "bookmarks.has-no-bookmarks": "Bạn chưa đánh dấu bất kỳ bài viết nào.", "copy-permalink": "Sao Chép Liên Kết Tĩnh", "go-to-original": "Xem Bài Đăng Gốc", - "loading-more-posts": "Tải thêm các bài gửi khác", + "loading-more-posts": "Tải Thêm Bài Đăng", "move-topic": "Di Chuyển Chủ Đề", "move-topics": "Di Chuyển Chủ Đề", "move-post": "Di chuyển bài đăng", - "post-moved": "Đã chuyển bài gửi!", + "post-moved": "Đã di chuyển bài đăng!", "fork-topic": "Tạo bản sao chủ đề", "enter-new-topic-title": "Nhập tiêu đề chủ đề mới", "fork-topic-instruction": "Nhấp vào bài đăng bạn muốn rẽ nhánh, nhập tiêu đề cho chủ đề mới và nhấp vào chủ đề rẽ nhánh", - "fork-no-pids": "Chưa chọn bài gửi nào!", + "fork-no-pids": "Chưa chọn bài đăng nào!", "no-posts-selected": "Không bài viết nào được chọn!", "x-posts-selected": "%1 bài viết được chọn", "x-posts-will-be-moved-to-y": "%1 bài viết sẽ được chuyển đến \"%2\"", - "fork-pid-count": "%1 bài viết(s) đã được gửi", + "fork-pid-count": "Đã chọn %1 bài đăng", "fork-success": "Tạo bản sao thành công! Nhấn vào đây để chuyển tới chủ đề vừa tạo.", "delete-posts-instruction": "Chọn các bài viết bạn muốn xoá/loại bỏ", "merge-topics-instruction": "Nhấn vào các chủ đề bạn muốn gộp hoặc tìm kiếm chúng", @@ -162,7 +162,7 @@ "move-posts-instruction": "Chọn bài đăng bạn muốn di chuyển, sau đó nhập ID chủ đề hoặc đi đến chủ đề mong muốn", "move-topic-instruction": "Chọn danh mục nhắm đến và sau đó nhấp vào di chuyển", "change-owner-instruction": "Bấm vào bài viết bạn muốn chỉ định cho người dùng khác", - "manage-editors-instruction": "Quản lý người dùng có thể chỉnh sửa bài đăng này bên dưới.", + "manage-editors-instruction": "Quản lý những người dùng có thể chỉnh sửa bài đăng này bên dưới.", "composer.title-placeholder": "Nhập tiêu đề chủ đề của bạn tại đây...", "composer.handle-placeholder": "Nhập tên/xử lý của bạn ở đây", "composer.hide": "Ẩn", @@ -186,8 +186,8 @@ "more-guests": "%1 khách nữa", "users-and-others": "%1 và %2 khác", "sort-by": "Sắp xếp theo", - "oldest-to-newest": "Cũ đến mới", - "newest-to-oldest": "Mới đến cũ", + "oldest-to-newest": "Cũ Đến Mới", + "newest-to-oldest": "Mới Đến Cũ", "recently-replied": "Trả Lời Gần Đây", "recently-created": "Đã Tạo Gần Đây", "most-votes": "Nhiều Bình Chọn Nhất", diff --git a/public/language/vi/unread.json b/public/language/vi/unread.json index 8781031062..d7e7ccfe18 100644 --- a/public/language/vi/unread.json +++ b/public/language/vi/unread.json @@ -3,13 +3,13 @@ "no-unread-topics": "Không có chủ đề chưa đọc.", "load-more": "Tải Thêm", "mark-as-read": "Đánh Dấu Đã Đọc", - "mark-as-unread": "Đánh Dấu Chưa Đọc", + "mark-as-unread": "Chưa Đọc", "selected": "Đã chọn", "all": "Tất cả", "all-categories": "Tất cả danh mục", "topics-marked-as-read.success": "Chủ đề được đánh dấu đã đọc!", "all-topics": "Tất Cả Chủ Đề", - "new-topics": "Chủ đề mới", + "new-topics": "Chủ Đề Mới", "watched-topics": "Chủ Đề Đã Xem", "unreplied-topics": "Chủ Đề Chưa Trả Lời", "multiple-categories-selected": "Chọn Nhiều" diff --git a/public/language/vi/user.json b/public/language/vi/user.json index 3e6404fa66..adc1e20637 100644 --- a/public/language/vi/user.json +++ b/public/language/vi/user.json @@ -37,7 +37,7 @@ "profile": "Hồ sơ", "profile-views": "Xem hồ sơ", "reputation": "Uy tín", - "bookmarks": "Đánh dấu trang", + "bookmarks": "Dấu trang", "watched-categories": "Chuyên mục đã xem", "watched-tags": "Thẻ đã xem", "change-all": "Thay Đổi Tất Cả", @@ -199,7 +199,7 @@ "browser-version-on-platform": "%1 %2 trên %3", "consent.title": "Quyền của bạn & Bằng lòng", "consent.lead": "Diễn đàn cộng đồng này thu thập và xử lý thông tin cá nhân của bạn.", - "consent.intro": "Chúng tôi dùng thông tin này cẩn thận để cá nhân hóa trải nghiệm của bạn, cũng như để liên kết các bài đăng bạn thực hiện với tài khoản người dùng của bạn. Bạn đã nhập tên người dùng và địa chỉ email khi đăng ký và cũng có thể hoàn tất hồ sơ bằng cách cung cấp thêm thông tin.

Chúng tôi giữ thông tin này suốt vòng đời tài khoản của bạn và bạn có thể rút lại sự đồng ý bất cứ lúc nào bằng cách xóa tài khoản. Bạn có thể yêu cầu một bản sao đóng góp của bạn cho trang web này, ở trang Quyền & Đồng ý

Nếu bạn có câu hỏi hoặc thắc mắc, vui lòng liên hệ với nhóm quản trị diễn đàn.", + "consent.intro": "Chúng tôi dùng thông tin này cẩn thận để cá nhân hóa trải nghiệm của bạn, cũng như để liên kết các bài đăng bạn thực hiện với tài khoản người dùng của bạn. Bạn đã nhập tên người dùng và địa chỉ email khi đăng ký và cũng có thể hoàn tất hồ sơ bằng cách cung cấp thêm thông tin.

Chúng tôi giữ thông tin này suốt vòng đời tài khoản của bạn và bạn có thể rút lại sự đồng ý bất cứ lúc nào bằng cách xóa tài khoản. Bạn có thể yêu cầu một bản sao đóng góp của bạn cho trang web này, ở trang Quyền & Đồng ý

Nếu bạn có bất kỳ câu hỏi hoặc mối quan tâm nào, chúng tôi khuyến khích bạn liên hệ với nhóm quản trị của diễn đàn này.", "consent.email-intro": "Đôi khi, chúng tôi gửi email đến email bạn đã đăng ký để cung cấp thông tin cập nhật và / hoặc thông báo hoạt động mới phù hợp với bạn. Bạn có thể chỉnh tần suất thông báo cộng đồng (bao gồm vô hiệu hóa hoàn toàn), cũng như chọn loại thông báo sẽ nhận qua email, ở trang cài đặt người dùng của bạn.", "consent.digest-frequency": "Trừ khi thay đổi rõ ràng trong cài đặt người dùng của bạn, cộng đồng này cung cấp thông báo email mỗi %1.", "consent.digest-off": "Trừ khi thay đổi trong cài đặt người dùng của bạn, cộng đồng này sẽ không gửi thông báo qua email thông báo", diff --git a/public/language/vi/users.json b/public/language/vi/users.json index 126a6e7d8d..bf1c11b467 100644 --- a/public/language/vi/users.json +++ b/public/language/vi/users.json @@ -1,7 +1,7 @@ { "all-users": "Tất Cả Người Dùng", "followed-users": "Người Theo Dõi", - "latest-users": "Người Dùng Mới Nhất", + "latest-users": "Người Mới Nhất", "top-posters": "Người Đăng Hàng Đầu", "most-reputation": "Uy Tín Nhất", "most-flags": "Nhiều Cờ Nhất", diff --git a/public/language/zh-CN/admin/development/info.json b/public/language/zh-CN/admin/development/info.json index b7a4410f29..ac389d848e 100644 --- a/public/language/zh-CN/admin/development/info.json +++ b/public/language/zh-CN/admin/development/info.json @@ -3,7 +3,7 @@ "ip": "IP %1", "nodes-responded": "%1个节点在%2ms内响应!", "host": "主机", - "primary": "primary / jobs", + "primary": "主节点 / 任务", "pid": "pid", "nodejs": "nodejs", "online": "在线", diff --git a/public/language/zh-CN/admin/manage/user-custom-fields.json b/public/language/zh-CN/admin/manage/user-custom-fields.json index 3ef0e5eacd..a77d0262f6 100644 --- a/public/language/zh-CN/admin/manage/user-custom-fields.json +++ b/public/language/zh-CN/admin/manage/user-custom-fields.json @@ -16,7 +16,7 @@ "input-type-select": "单选", "input-type-select-multi": "多选", "select-options": "选项", - "select-options-help": "为选择元素每行添加一个选项", + "select-options-help": "为属性添加一些选项,每行一个", "minimum-reputation": "最低声望", "minimum-reputation-help": "如果用户的声望值小于此值,则无法使用此字段", "delete-field-confirm-x": "您真的要删除自定义字段“ %1 ”吗?", diff --git a/public/language/zh-CN/admin/manage/users.json b/public/language/zh-CN/admin/manage/users.json index f9157e7749..f330c37f6c 100644 --- a/public/language/zh-CN/admin/manage/users.json +++ b/public/language/zh-CN/admin/manage/users.json @@ -22,7 +22,7 @@ "delete-content": "删除用户内容", "purge": "删除用户和内容", "download-csv": "下载CSV", - "custom-user-fields": "Custom User Fields", + "custom-user-fields": "自定义用户字段", "manage-groups": "管理用户组", "set-reputation": "设置声望", "add-group": "添加至群组", diff --git a/public/language/zh-CN/admin/menu.json b/public/language/zh-CN/admin/menu.json index 7bb0105577..ed72e739a4 100644 --- a/public/language/zh-CN/admin/menu.json +++ b/public/language/zh-CN/admin/menu.json @@ -38,7 +38,7 @@ "settings/tags": "标签", "settings/notifications": "通知", "settings/api": "API 访问", - "settings/activitypub": "Federation (ActivityPub)", + "settings/activitypub": "“联邦” (ActivityPub)", "settings/sounds": "铃声", "settings/social": "社交", "settings/cookies": "Cookies", diff --git a/public/language/zh-CN/admin/settings/advanced.json b/public/language/zh-CN/admin/settings/advanced.json index 56e2b49c18..2d318cf978 100644 --- a/public/language/zh-CN/admin/settings/advanced.json +++ b/public/language/zh-CN/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "默认:%1", "sockets.delay": "重连等待时间", - "analytics.settings": "分析设置", - "analytics.max-cache": "分析缓存最大值", - "analytics.max-cache-help": "在大流量的服务器中,如果同时活跃的用户比这个缓存最大值要多,缓存可能会被持续耗尽。(需要重新启动)", "compression.settings": "压缩设置", "compression.enable": "启用压缩", "compression.help": "此设置启用 gzip 压缩。对大流量的生产环境网站,最佳的启用压缩的方法是在反向代理中实现。您可以出于测试目的启用这个设置。" diff --git a/public/language/zh-CN/admin/settings/general.json b/public/language/zh-CN/admin/settings/general.json index ddab0b7b53..cd6cc33bac 100644 --- a/public/language/zh-CN/admin/settings/general.json +++ b/public/language/zh-CN/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "标题布局", "title-layout-help": "定义浏览器标题的布局,即{pageTitle} | {browserTitle}", "description.placeholder": "关于您的社区的简短说明", - "description": "请选择用户到达根 URL 时所显示的页面。", + "description": "站点描述", "keywords": "站点关键字", "keywords-placeholder": "描述您的社区的关键字(以逗号分隔)", "logo-and-icons": "网站徽标与图标", @@ -51,6 +51,7 @@ "topic-tools": "主题工具", "home-page": "主页", "home-page-route": "主页路由", + "home-page-description": "选择用户导航到论坛根 URL 时显示的页面。", "custom-route": "自定义路由", "allow-user-home-pages": "允许用户主页", "home-page-title": "首页标题(默认“Home”)", diff --git a/public/language/zh-CN/admin/settings/uploads.json b/public/language/zh-CN/admin/settings/uploads.json index 8778274e58..382195d94a 100644 --- a/public/language/zh-CN/admin/settings/uploads.json +++ b/public/language/zh-CN/admin/settings/uploads.json @@ -5,14 +5,14 @@ "strip-exif-data": "去除 EXIF 数据", "preserve-orphaned-uploads": "当一个帖子被清除后保留上传的文件", "orphanExpiryDays": "保存未使用文件的天数", - "orphanExpiryDays-help": "在这么多天后,未使用的上传会从文件系统中被删除。
设置 0 或留白以禁用。", + "orphanExpiryDays-help": "超过此天数后,无主的上传文件将从文件系统中删除。
设置为 0 或留空表示禁用。", "private-extensions": "自定义文件扩展名", "private-uploads-extensions-help": "在此处输入以逗号分隔的文件扩展名列表 (例如 pdf,xls,doc )并将其用于自定义。为空则表示允许所有扩展名。", "resize-image-width-threshold": "如果图像宽度超过指定大小,则对图像进行缩放", - "resize-image-width-threshold-help": "(in pixels, default: 2000 pixels, set to 0 to disable)", + "resize-image-width-threshold-help": "(单位:像素,默认值:2000 px,设为 0 则禁用)", "resize-image-width": "缩小图片到指定宽度", "resize-image-width-help": "(像素单位,默认 760 px,设置为0以禁用)", - "resize-image-keep-original": "Keep original image after resize", + "resize-image-keep-original": "调整大小后保留原始图片", "resize-image-quality": "调整图像大小时使用的质量", "resize-image-quality-help": "使用较低质量的设置来减小调整过大小的图像的文件大小", "max-file-size": "最大文件尺寸(单位 KiB)", diff --git a/public/language/zh-CN/aria.json b/public/language/zh-CN/aria.json index d7840769e3..9df98227c1 100644 --- a/public/language/zh-CN/aria.json +++ b/public/language/zh-CN/aria.json @@ -2,7 +2,7 @@ "post-sort-option": "帖子分类选项,%1", "topic-sort-option": "主题分类选项,%1", "user-avatar-for": "用户头像%1", - "profile-page-for": "Profile page for user %1", + "profile-page-for": "用户 %1 的资料页面", "user-watched-tags": "用户关注标签", "delete-upload-button": "删除上传按钮", "group-page-link-for": "群组页面链接%1" diff --git a/public/language/zh-CN/category.json b/public/language/zh-CN/category.json index 5b8301fcf6..4da3067d0b 100644 --- a/public/language/zh-CN/category.json +++ b/public/language/zh-CN/category.json @@ -1,6 +1,8 @@ { "category": "版块", "subcategories": "子版块", + "uncategorized": "未分类的", + "uncategorized.description": "不完全符合任何现有类别的主题", "new-topic-button": "发表主题", "guest-login-post": "登录以发布", "no-topics": "此版块还没有任何内容。
赶紧来发帖吧!", diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json index 43b8c7fbdc..cc5f511540 100644 --- a/public/language/zh-CN/error.json +++ b/public/language/zh-CN/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "目前无法连接到服务器。请点击这里重试,或稍后再试", "invalid-plugin-id": "无效插件ID", "plugin-not-whitelisted": "无法安装插件 – 只有被NodeBB包管理器列入白名单的插件才能通过ACP安装。", + "plugin-installation-via-acp-disabled": "ACP 安装插件已被禁用", "plugins-set-in-configuration": "您不能修改插件状态因为它们在运行时中被定义(config.json,环境变量或终端选项),请转而修改配置。", "theme-not-set-in-configuration": "在配置中定义活跃的插件时,需要先将新主题加入活跃插件的列表,才能在管理员控制面板中修改主题", "topic-event-unrecognized": "无法识别主题事件'%1'", @@ -249,7 +250,7 @@ "api.501": "您试图调用的路由还没被实现,请明天重试", "api.503": "您试图调用的路由因为服务器配置而目前不可用", "api.reauth-required": "您试图访问的资源需要(重新)进行身份验证。", - "activitypub.not-enabled": "Federation is not enabled on this server", + "activitypub.not-enabled": "此服务器未启用“联邦”", "activitypub.invalid-id": "无法解析输入 id,可能是畸形输入。", "activitypub.get-failed": "无法检索指定资源。", "activitypub.pubKey-not-found": "无法解析公钥,因此无法进行有效载荷验证。", diff --git a/public/language/zh-CN/flags.json b/public/language/zh-CN/flags.json index 55f18b131f..49ee3c0532 100644 --- a/public/language/zh-CN/flags.json +++ b/public/language/zh-CN/flags.json @@ -84,17 +84,17 @@ "modal-reason-offensive": "人身攻击", "modal-reason-other": "其他(请在下方指定)", "modal-reason-custom": "举报此内容的理由……", - "modal-notify-remote": "Forward this report to %1", + "modal-notify-remote": "将此举报转发至 %1", "modal-submit": "提交举报", "modal-submit-success": "已举报此内容。", - "modal-confirm-rescind": "Rescind Report?", + "modal-confirm-rescind": "撤销举报?", "bulk-actions": "批量操作", "bulk-resolve": "处理举报", - "confirm-purge": "Are you sure you want to permanently delete these flags?", - "purge-cancelled": "Flag Purge Cancelled", - "bulk-purge": "Purge Flag(s)", + "confirm-purge": "您确定要永久删除这些举报吗?", + "purge-cancelled": "已取消清除举报", + "bulk-purge": "清除举报", "bulk-success": "已更新%1个举报", "flagged-timeago": "标记", "auto-flagged": "【自动举报】收到 %1 个踩" diff --git a/public/language/zh-CN/global.json b/public/language/zh-CN/global.json index bafc874b49..09545fde3e 100644 --- a/public/language/zh-CN/global.json +++ b/public/language/zh-CN/global.json @@ -50,7 +50,7 @@ "header.navigation": "导航", "header.manage": "管理", "header.drafts": "草稿", - "header.world": "World", + "header.world": "世界", "notifications.loading": "正在加载通知", "chats.loading": "正在加载聊天", "drafts.loading": "正在加载草稿", @@ -111,7 +111,7 @@ "dnd": "请勿打扰", "invisible": "隐身", "offline": "离线", - "remote-user": "This user is from outside of this forum", + "remote-user": "该用户来自本论坛之外", "email": "电子邮箱", "language": "语言", "guest": "游客", diff --git a/public/language/zh-CN/modules.json b/public/language/zh-CN/modules.json index 15e2026baf..184fc4dec0 100644 --- a/public/language/zh-CN/modules.json +++ b/public/language/zh-CN/modules.json @@ -115,8 +115,8 @@ "composer.discard-all-drafts": "丢弃所有的草稿", "composer.no-drafts": "你没有草稿", "composer.discard-draft-confirm": "你想丢弃这个草案吗?", - "composer.remote-pid-editing": "Editing a remote post", - "composer.remote-pid-content-immutable": "The content of remote posts cannot be edited. However, you are able change the topic title and tags.", + "composer.remote-pid-editing": "编辑远程帖子", + "composer.remote-pid-content-immutable": "远程帖子的内容不可编辑。不过,您可以更改主题标题和标签。", "bootbox.ok": "确认", "bootbox.cancel": "取消", "bootbox.confirm": "确认", diff --git a/public/language/zh-CN/notifications.json b/public/language/zh-CN/notifications.json index e677fa3b74..874b0b4d70 100644 --- a/public/language/zh-CN/notifications.json +++ b/public/language/zh-CN/notifications.json @@ -99,8 +99,8 @@ "notificationType-new-post-flag": "当有新的帖子举报时", "notificationType-new-user-flag": "当有新的用户信息举报时", "notificationType-new-reward": "当您获得新奖励时", - "activitypub.announce": "%1 shared your post in %2 to their followers.", - "activitypub.announce-dual": "%1 and %2 shared your post in %3 to their followers.", - "activitypub.announce-triple": "%1, %2 and %3 shared your post in %4 to their followers.", - "activitypub.announce-multiple": "%1, %2 and %3 others shared your post in %4 to their followers." + "activitypub.announce": "%1%2 中向他们的粉丝分享了您的帖子。", + "activitypub.announce-dual": "%1%2 将您的帖子分享给了他们的粉丝 %3 。", + "activitypub.announce-triple": "%1, %2%3 将您的帖子分享给了他们的粉丝 %4 。 ", + "activitypub.announce-multiple": "%1, %2 和其余 %3 人 将您的帖子分享给了他们的粉丝 %4 。" } \ No newline at end of file diff --git a/public/language/zh-CN/pages.json b/public/language/zh-CN/pages.json index 11795afae2..86add3ecb3 100644 --- a/public/language/zh-CN/pages.json +++ b/public/language/zh-CN/pages.json @@ -36,7 +36,7 @@ "chat": "与 %1 聊天", "flags": "举报", "flag-details": "举报 %1 详情", - "world": "World", + "world": "世界", "account/edit": "正在编辑 \"%1\"", "account/edit/password": "正在编辑 \"%1\" 的密码", "account/edit/username": "正在编辑 \"%1\" 的用户名", @@ -63,7 +63,7 @@ "account/blocks": "%1 屏蔽的用户", "account/uploads": "%1 上传的文件", "account/sessions": "已登录的会话", - "account/shares": "Topics shared by %1", + "account/shares": "%1 分享的主题", "confirm": "电子邮箱已确认", "maintenance.text": "%1 目前正在进行维护,请下次再来。", "maintenance.messageIntro": "此外,管理员留下的消息:", diff --git a/public/language/zh-CN/recent.json b/public/language/zh-CN/recent.json index 032ecafda0..e62fcbee77 100644 --- a/public/language/zh-CN/recent.json +++ b/public/language/zh-CN/recent.json @@ -8,6 +8,6 @@ "no-recent-topics": "暂无主题。", "no-popular-topics": "暂无热门主题。", "load-new-posts": "加载新的帖子", - "uncategorized.title": "All known topics", - "uncategorized.intro": "This page shows a chronological listing of every topic that this forum has received.
The views and opinions expressed in the topics below are not moderated and may not represent the views and opinions of this website." + "uncategorized.title": "所有已知主题", + "uncategorized.intro": "本页按时间顺序列出了本论坛收到的每个主题。
以下主题中表达的观点和意见未经审核,可能不代表本网站的观点和意见。" } \ No newline at end of file diff --git a/public/language/zh-CN/themes/harmony.json b/public/language/zh-CN/themes/harmony.json index dfba3d89d5..03c4e9b38c 100644 --- a/public/language/zh-CN/themes/harmony.json +++ b/public/language/zh-CN/themes/harmony.json @@ -13,10 +13,11 @@ "settings.mobileTopicTeasers": "在移动设备显示话题预告", "settings.stickyToolbar": "附着工具条", "settings.stickyToolbar.help": "主题和类别页面上的工具条将附着在页面顶部", - "settings.topicSidebarTools": "Topic sidebar tools", - "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "自动隐藏底栏", - "settings.autohideBottombar.help": "当页面向下滚动时,移动设备视图的底栏将被隐藏", + "settings.topicSidebarTools": "主题侧栏工具", + "settings.topicSidebarTools.help": "该选项将把主题工具移动到侧边", + "settings.autohideBottombar": "自动隐藏移动导航栏", + "settings.autohideBottombar.help": "页面向下滚动时,移动栏将被隐藏", + "settings.topMobilebar": "将移动导航栏移到顶部", "settings.openSidebars": "打开侧栏", "settings.chatModals": "启用聊天模式" } \ No newline at end of file diff --git a/public/language/zh-CN/topic.json b/public/language/zh-CN/topic.json index ece35b8f6f..a9830d1883 100644 --- a/public/language/zh-CN/topic.json +++ b/public/language/zh-CN/topic.json @@ -61,8 +61,8 @@ "user-restored-topic-on": "%1 恢复了该主题于 %2", "user-moved-topic-from-ago": "%1 从 %2 %3 移动了该主题", "user-moved-topic-from-on": "%1 从 %3 中的 %2 移动了该主题", - "user-shared-topic-ago": "%1 shared this topic %2", - "user-shared-topic-on": "%1 shared this topic on %2", + "user-shared-topic-ago": "%1 分享此主题 %2", + "user-shared-topic-on": "%1 在 %2 上分享了此主题", "user-queued-post-ago": "%1 篇 已排队 待审批的帖子 %3", "user-queued-post-on": "在 %3 中 已排队 %1 篇待审批的帖子", "user-referenced-topic-ago": "%1 被引用 于这个主题 %3", @@ -137,7 +137,7 @@ "bookmarks": "书签", "bookmarks.has-no-bookmarks": "您还没有添加任何书签", "copy-permalink": "复制固定链接", - "go-to-original": "View Original Post", + "go-to-original": "查看原帖", "loading-more-posts": "正在加载更多帖子", "move-topic": "移动主题", "move-topics": "移动主题", @@ -223,6 +223,6 @@ "post-tools": "帖子工具", "unread-posts-link": "未读帖子链接", "thumb-image": "主题缩略图", - "announcers": "Shares", - "announcers-x": "Shares (%1)" + "announcers": "分享", + "announcers-x": "分享 (%1)" } \ No newline at end of file diff --git a/public/language/zh-CN/user.json b/public/language/zh-CN/user.json index 66cc4b9744..f764d93289 100644 --- a/public/language/zh-CN/user.json +++ b/public/language/zh-CN/user.json @@ -47,7 +47,7 @@ "default-category-watch-state": "默认版块关注状态", "followers": "粉丝", "following": "关注", - "shares": "Shares", + "shares": "分享", "blocks": "屏蔽", "blocked-users": "屏蔽用户", "block-toggle": "屏蔽该用户", @@ -60,10 +60,10 @@ "chat-with": "继续与 %1 聊天", "new-chat-with": "开始与 %1 的新会话", "flag-profile": "举报资料", - "profile-flagged": "Already flagged", + "profile-flagged": "已举报", "follow": "关注", "unfollow": "取消关注", - "cancel-follow": "Cancel follow request", + "cancel-follow": "取消关注请求", "more": "更多", "profile-update-success": "资料已经成功更新。", "change-picture": "更改头像", @@ -123,7 +123,7 @@ "has-no-downvoted-posts": "此用户还未踩过任何帖子。", "has-no-controversial-posts": "此用户没有任何踩过的帖子。", "has-no-blocks": "您没有屏蔽其他用户。", - "has-no-shares": "This user has not shared any topics.", + "has-no-shares": "该用户未分享任何主题。", "email-hidden": "电子邮箱已隐藏", "hidden": "隐藏", "paginate-description": "使用分页式版块浏览", diff --git a/public/language/zh-TW/admin/settings/advanced.json b/public/language/zh-TW/admin/settings/advanced.json index 454475cb71..b554477556 100644 --- a/public/language/zh-TW/admin/settings/advanced.json +++ b/public/language/zh-TW/admin/settings/advanced.json @@ -41,9 +41,6 @@ "sockets.default-placeholder": "預設: %1", "sockets.delay": "重新連線延遲時間", - "analytics.settings": "Analytics Settings", - "analytics.max-cache": "Analytics Cache Max Value", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", "compression.settings": "Compression Settings", "compression.enable": "Enable Compression", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." diff --git a/public/language/zh-TW/admin/settings/general.json b/public/language/zh-TW/admin/settings/general.json index 8a9be80e02..992143a90b 100644 --- a/public/language/zh-TW/admin/settings/general.json +++ b/public/language/zh-TW/admin/settings/general.json @@ -15,7 +15,7 @@ "title-layout": "標題佈局", "title-layout-help": "定義瀏覽器標題的佈局,即{pageTitle} | {browserTitle}", "description.placeholder": "關於您的社區的簡短說明", - "description": "請選擇使用者到達根 URL 時所顯示的頁面。", + "description": "Site Description", "keywords": "網站關鍵字", "keywords-placeholder": "描述您的社區的關鍵字,以逗號分隔", "logo-and-icons": "Site Logo & Icons", @@ -51,6 +51,7 @@ "topic-tools": "Topic Tools", "home-page": "首頁", "home-page-route": "首頁路徑", + "home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.", "custom-route": "自訂路徑", "allow-user-home-pages": "允許使用者自訂首頁", "home-page-title": "首頁標題(預設為“Home”)", diff --git a/public/language/zh-TW/category.json b/public/language/zh-TW/category.json index e172e33048..b1e2cc93c2 100644 --- a/public/language/zh-TW/category.json +++ b/public/language/zh-TW/category.json @@ -1,6 +1,8 @@ { "category": "版面", "subcategories": "子版面", + "uncategorized": "Uncategorized", + "uncategorized.description": "Topics that do not strictly fit in with any existing categories", "new-topic-button": "發表主題", "guest-login-post": "登入以發表", "no-topics": "此版面還沒有任何內容。
趕緊來貼文吧!", diff --git a/public/language/zh-TW/error.json b/public/language/zh-TW/error.json index 192ff59029..2eebb4f94f 100644 --- a/public/language/zh-TW/error.json +++ b/public/language/zh-TW/error.json @@ -232,6 +232,7 @@ "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "invalid-plugin-id": "無效的插件 ID", "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", + "plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", "topic-event-unrecognized": "Topic event '%1' unrecognized", diff --git a/public/language/zh-TW/themes/harmony.json b/public/language/zh-TW/themes/harmony.json index 2a04ca3420..2b199e254f 100644 --- a/public/language/zh-TW/themes/harmony.json +++ b/public/language/zh-TW/themes/harmony.json @@ -15,8 +15,9 @@ "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.topicSidebarTools": "Topic sidebar tools", "settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", - "settings.autohideBottombar": "Auto hide bottom bar", - "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down", + "settings.autohideBottombar": "Auto hide mobile navigation bar", + "settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down", + "settings.topMobilebar": "Move the mobile navigation bar to the top", "settings.openSidebars": "打開側欄", "settings.chatModals": "Enable chat modals" } \ No newline at end of file diff --git a/src/activitypub/contexts.js b/src/activitypub/contexts.js index b6cb1890e6..0748e42ece 100644 --- a/src/activitypub/contexts.js +++ b/src/activitypub/contexts.js @@ -7,8 +7,6 @@ const topics = require('../topics'); const activitypub = module.parent.exports; const Contexts = module.exports; -const acceptableTypes = ['Collection', 'CollectionPage', 'OrderedCollection', 'OrderedCollectionPage']; - Contexts.get = async (uid, id) => { let context; let type; @@ -27,11 +25,16 @@ Contexts.get = async (uid, id) => { } try { - ({ context } = await activitypub.get('uid', uid, id, { headers })); - if (!context) { + ({ id, type, context } = await activitypub.get('uid', uid, id, { headers })); + if (activitypub._constants.acceptable.contextTypes.has(type)) { // is context + activitypub.helpers.log(`[activitypub/context] ${id} is the context.`); + return { context: id }; + } else if (!context) { activitypub.helpers.log(`[activitypub/context] ${id} contains no context.`); return false; } + + // context provided; try to resolve it. ({ type } = await activitypub.get('uid', uid, context)); } catch (e) { if (e.code === 'ap_get_304') { @@ -43,7 +46,7 @@ Contexts.get = async (uid, id) => { return false; } - if (acceptableTypes.includes(type)) { + if (activitypub._constants.acceptable.contextTypes.has(type)) { return { context }; } @@ -69,7 +72,7 @@ Contexts.getItems = async (uid, id, options) => { } let { type, items, orderedItems, first, next } = object; - if (!acceptableTypes.includes(type)) { + if (!activitypub._constants.acceptable.contextTypes.has(type)) { return false; } @@ -114,9 +117,13 @@ Contexts.getItems = async (uid, id, options) => { const inputId = activitypub.helpers.isUri(options.input) ? options.input : options.input.id; const inCollection = Array.from(chain).map(p => p.pid).includes(inputId); if (!inCollection) { - chain.add(activitypub.helpers.isUri(options.input) ? + const item = activitypub.helpers.isUri(options.input) ? await parseString(uid, options.input) : - await parseItem(uid, options.input)); + await parseItem(uid, options.input); + + if (item) { + chain.add(item); + } } return chain; diff --git a/src/activitypub/feps.js b/src/activitypub/feps.js new file mode 100644 index 0000000000..d22731fd79 --- /dev/null +++ b/src/activitypub/feps.js @@ -0,0 +1,85 @@ +'use strict'; + +const nconf = require('nconf'); + +const posts = require('../posts'); + +const activitypub = module.parent.exports; +const Feps = module.exports; + +Feps.announce = async function announce(id, activity) { + let localId; + if (String(id).startsWith(nconf.get('url'))) { + ({ id: localId } = await activitypub.helpers.resolveLocalId(id)); + } + const cid = await posts.getCidByPid(localId || id); + if (cid === -1) { + return; + } + + const followers = await activitypub.notes.getCategoryFollowers(cid); + if (!followers.length) { + return; + } + + const { actor } = activity; + if (actor && !actor.startsWith(nconf.get('url'))) { + followers.unshift(actor); + } + + if (activity.type === 'Create') { + const isMain = await posts.isMain(localId || id); + if (isMain) { + activitypub.helpers.log(`[activitypub/inbox.announce(1b12)] Announcing plain object (${activity.id}) to followers of cid ${cid}`); + await activitypub.send('cid', cid, followers, { + id: `${nconf.get('url')}/post/${encodeURIComponent(id)}#activity/announce/${Date.now()}`, + type: 'Announce', + actor: `${nconf.get('url')}/category/${cid}`, + to: [`${nconf.get('url')}/category/${cid}/followers`], + cc: [actor, activitypub._constants.publicAddress], + object: activity.object, + }); + } + } + + activitypub.helpers.log(`[activitypub/inbox.announce(1b12)] Announcing ${activity.type} (${activity.id}) to followers of cid ${cid}`); + await activitypub.send('cid', cid, followers, { + id: `${nconf.get('url')}/post/${encodeURIComponent(id)}#activity/announce/${Date.now()}`, + type: 'Announce', + actor: `${nconf.get('url')}/category/${cid}`, + to: [`${nconf.get('url')}/category/${cid}/followers`], + cc: [actor, activitypub._constants.publicAddress], + object: activity, + }); +}; + +Feps.announceObject = async function announceObject(id) { + let localId; + if (String(id).startsWith(nconf.get('url'))) { + ({ id: localId } = await activitypub.helpers.resolveLocalId(id)); + } + const cid = await posts.getCidByPid(localId || id); + if (cid === -1) { + return; + } + + const followers = await activitypub.notes.getCategoryFollowers(cid); + if (!followers.length) { + return; + } + + const author = await posts.getPostField(id, 'uid'); + if (!author.startsWith(nconf.get('url'))) { + followers.unshift(author); + } + + activitypub.helpers.log(`[activitypub/inbox.announce(1b12)] Announcing object (${id}) to followers of cid ${cid}`); + await activitypub.send('cid', cid, followers, { + id: `${nconf.get('url')}/post/${encodeURIComponent(id)}#activity/announce/${Date.now()}`, + type: 'Announce', + actor: `${nconf.get('url')}/category/${cid}`, + to: [`${nconf.get('url')}/category/${cid}/followers`], + cc: [author, activitypub._constants.publicAddress], + object: id, + }); +}; diff --git a/src/activitypub/helpers.js b/src/activitypub/helpers.js index 79aebc25dc..637d4b4afd 100644 --- a/src/activitypub/helpers.js +++ b/src/activitypub/helpers.js @@ -37,7 +37,6 @@ Helpers._test = (method, args) => { // process.nextTick(() => { // Helpers._test(activitypub.notes.assert, [1, `https://`]); // }); - let _lastLog; Helpers.log = (message) => { if (!message) { @@ -372,13 +371,25 @@ Helpers.generateTitle = (html) => { return title; }; -Helpers.remoteAnchorToLocalProfile = async (content) => { - const anchorRegex = /(.*?)<\/a>/ig; +Helpers.remoteAnchorToLocalProfile = async (content, isMarkdown = false) => { + let anchorRegex; + if (isMarkdown) { + anchorRegex = /\[(.*?)\]\((.+?)\)/ig; + } else { + anchorRegex = /(.*?)<\/a>/ig; + } + const anchors = content.matchAll(anchorRegex); const urls = new Set(); const matches = []; for (const anchor of anchors) { - const [match, url] = anchor; + let match; + let url; + if (isMarkdown) { + [match,, url] = anchor; + } else { + [match, url] = anchor; + } matches.push([match, url]); urls.add(url); } diff --git a/src/activitypub/inbox.js b/src/activitypub/inbox.js index 980709fb58..e9b17d92c8 100644 --- a/src/activitypub/inbox.js +++ b/src/activitypub/inbox.js @@ -32,34 +32,6 @@ function reject(type, object, target, senderType = 'uid', id = 0) { }).catch(err => winston.error(err.stack)); } -// FEP 1b12 -async function announce(id, activity) { - let localId; - if (id.startsWith(nconf.get('url'))) { - ({ id: localId } = await activitypub.helpers.resolveLocalId(id)); - } - const cid = await posts.getCidByPid(localId || id); - - const followers = await activitypub.notes.getCategoryFollowers(cid); - if (!followers.length) { - return; - } - - const { actor } = activity; - followers.unshift(actor); - - winston.info(`[activitypub/inbox.announce(1b12)] Announcing ${activity.type} to followers of cid ${cid}`); - await Promise.all([activity, activity.object].map(async (object) => { - await activitypub.send('cid', cid, followers, { - id: `${nconf.get('url')}/post/${encodeURIComponent(id)}#activity/announce/${Date.now()}`, - type: 'Announce', - to: [`${nconf.get('url')}/category/${cid}/followers`], - cc: [actor, activitypub._constants.publicAddress], - object, - }); - })); -} - inbox.create = async (req) => { const { object } = req.body; @@ -71,7 +43,7 @@ inbox.create = async (req) => { const asserted = await activitypub.notes.assert(0, object); if (asserted) { - announce(object.id, req.body); + activitypub.feps.announce(object.id, req.body); api.activitypub.add(req, { pid: object.id }); } }; @@ -141,7 +113,7 @@ inbox.update = async (req) => { const asserted = await activitypub.notes.assert(0, object.id); if (asserted) { - announce(object.id, req.body); + activitypub.feps.announce(object.id, req.body); } break; } @@ -229,7 +201,7 @@ inbox.delete = async (req) => { switch (true) { case isNote: { const uid = await posts.getPostField(pid, 'uid'); - await announce(pid, req.body); + await activitypub.feps.announce(pid, req.body); await api.posts[method]({ uid }, { pid }); break; } @@ -263,7 +235,7 @@ inbox.like = async (req) => { winston.verbose(`[activitypub/inbox/like] id ${id} via ${actor}`); const result = await posts.upvote(id, actor); - announce(object.id, req.body); + activitypub.feps.announce(object.id, req.body); socketHelpers.upvote(result, 'notifications:upvoted-your-post-in'); }; @@ -529,7 +501,7 @@ inbox.undo = async (req) => { } await posts.unvote(id, actor); - announce(object.object, req.body); + activitypub.feps.announce(object.object, req.body); notifications.rescind(`upvote:post:${id}:uid:${actor}`); break; } diff --git a/src/activitypub/index.js b/src/activitypub/index.js index eb60b7a1a6..8472a552ac 100644 --- a/src/activitypub/index.js +++ b/src/activitypub/index.js @@ -37,13 +37,14 @@ ActivityPub._constants = Object.freeze({ 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', ], acceptedPostTypes: [ - 'Note', 'Page', 'Article', 'Question', + 'Note', 'Page', 'Article', 'Question', 'Video', ], acceptableActorTypes: new Set(['Application', 'Group', 'Organization', 'Person', 'Service']), requiredActorProps: ['inbox', 'outbox'], acceptedProtocols: ['https', ...(process.env.CI === 'true' ? ['http'] : [])], acceptable: { customFields: new Set(['PropertyValue', 'Link', 'Note']), + contextTypes: new Set(['Collection', 'CollectionPage', 'OrderedCollection', 'OrderedCollectionPage']), }, }); ActivityPub._cache = requestCache; @@ -55,6 +56,7 @@ ActivityPub.notes = require('./notes'); ActivityPub.contexts = require('./contexts'); ActivityPub.actors = require('./actors'); ActivityPub.instances = require('./instances'); +ActivityPub.feps = require('./feps'); ActivityPub.startJobs = () => { ActivityPub.helpers.log('[activitypub/jobs] Registering jobs.'); diff --git a/src/activitypub/mocks.js b/src/activitypub/mocks.js index 4a2fa1e9b2..3164fd85e1 100644 --- a/src/activitypub/mocks.js +++ b/src/activitypub/mocks.js @@ -153,9 +153,6 @@ Mocks.post = async (objects) => { objects = [objects]; } - const actorIds = new Set(objects.map(object => object.attributedTo).filter(Boolean)); - await activitypub.actors.assert(Array.from(actorIds)); - const posts = await Promise.all(objects.map(async (object) => { if ( !activitypub._constants.acceptedPostTypes.includes(object.type) || @@ -170,20 +167,38 @@ Mocks.post = async (objects) => { attributedTo: uid, inReplyTo: toPid, published, updated, name, content, source, - to, cc, audience, attachment, tag, image, + type, to, cc, audience, attachment, tag, image, } = object; + if (Array.isArray(uid)) { // Handle array attributedTo + uid = uid.reduce((valid, cur) => { + if (typeof cur === 'string') { + valid.push(cur); + } else if (typeof cur === 'object') { + if (cur.type === 'Person' && cur.id) { + valid.push(cur.id); + } + } + + return valid; + }, []); + uid = uid.shift(); // take first valid uid + await activitypub.actors.assert(uid); + } + const resolved = await activitypub.helpers.resolveLocalId(toPid); if (resolved.type === 'post') { toPid = resolved.id; } + const timestamp = new Date(published).getTime(); let edited = new Date(updated); edited = Number.isNaN(edited.valueOf()) ? undefined : edited; - const sourceContent = source && source.mediaType === 'text/markdown' ? source.content : undefined; + let sourceContent = source && source.mediaType === 'text/markdown' ? source.content : undefined; if (sourceContent) { content = null; + sourceContent = await activitypub.helpers.remoteAnchorToLocalProfile(sourceContent, true); } else if (content && content.length) { content = sanitize(content, sanitizeConfig); content = await activitypub.helpers.remoteAnchorToLocalProfile(content); @@ -214,6 +229,30 @@ Mocks.post = async (objects) => { } } + if (url) { // Handle url array + if (Array.isArray(url)) { + url = url.reduce((valid, cur) => { + if (typeof cur === 'string') { + valid.push(cur); + } else if (typeof cur === 'object') { + if (cur.type === 'Link' && cur.href) { + if (!cur.mediaType || (cur.mediaType && cur.mediaType === 'text/html')) { + valid.push(cur.href); + } + } + } + + return valid; + }, []); + url = url.shift(); // take first valid url + } + } + + if (type === 'Video') { + attachment = attachment || []; + attachment.push({ url }); + } + const payload = { uid, pid, @@ -449,7 +488,7 @@ Mocks.notes.public = async (post) => { } const content = await posts.getPostField(post.pid, 'content'); - post.content = content; // re-send raw content + post.content = content; // re-send raw content into parsePost const parsed = await posts.parsePost(post, 'activitypub.note'); post.content = sanitize(parsed.content, sanitizeConfig); post.content = posts.relativeToAbsolute(post.content, posts.urlRegex); @@ -461,9 +500,14 @@ Mocks.notes.public = async (post) => { plugins.isActive('nodebb-plugin-mentions'), ]); if (markdownEnabled) { + // Re-parse for markdown + const _post = { ...post }; const raw = await posts.getPostField(post.pid, 'content'); + _post.content = raw; + let { content } = await posts.parsePost(_post, 'markdown'); + content = posts.relativeToAbsolute(content, posts.mdImageUrlRegex); source = { - content: raw, + content, mediaType: 'text/markdown', }; } @@ -508,7 +552,7 @@ Mocks.notes.public = async (post) => { }); // Inspect post content for external imagery as well - let match = posts.imgRegex.regex.exec(post.content); + let match = posts.imgRegex.exec(post.content); while (match !== null) { if (match[1]) { const { hostname, pathname, href: url } = new URL(match[1]); @@ -517,7 +561,7 @@ Mocks.notes.public = async (post) => { attachment.push({ mediaType, url }); } } - match = posts.imgRegex.regex.exec(post.content); + match = posts.imgRegex.exec(post.content); } attachment = attachment.map(({ mediaType, url, width, height }) => { @@ -608,8 +652,11 @@ Mocks.notes.private = async ({ messageObj }) => { let source; const markdownEnabled = await plugins.isActive('nodebb-plugin-markdown'); if (markdownEnabled) { + let { content } = messageObj; + content = posts.relativeToAbsolute(content, posts.mdImageUrlRegex); + source = { - content: messageObj.content, + content, mediaType: 'text/markdown', }; } diff --git a/src/activitypub/notes.js b/src/activitypub/notes.js index ed0b1f6791..26dbbc0bd1 100644 --- a/src/activitypub/notes.js +++ b/src/activitypub/notes.js @@ -162,8 +162,12 @@ Notes.assert = async (uid, input, options = { skipChecks: false }) => { const systemTags = (meta.config.systemTags || '').split(','); const maxTags = await categories.getCategoryField(cid, 'maxTags'); tags = (mainPost._activitypub.tag || []) - .filter(o => o.type === 'Hashtag' && !systemTags.includes(o.name.slice(1))) - .map(o => o.name.slice(1)); + .map((tag) => { + tag.name = tag.name.startsWith('#') ? tag.name.slice(1) : tag.name; + return tag; + }) + .filter(o => o.type === 'Hashtag' && !systemTags.includes(o.name)) + .map(t => t.name); if (tags.length > maxTags) { tags.length = maxTags; @@ -183,7 +187,6 @@ Notes.assert = async (uid, input, options = { skipChecks: false }) => { _activitypub: mainPost._activitypub, }), Notes.updateLocalRecipients(mainPid, { to, cc }), - posts.attachments.update(mainPid, attachment), ]); unprocessed.shift(); @@ -193,6 +196,7 @@ Notes.assert = async (uid, input, options = { skipChecks: false }) => { id: tid, path: mainPost._activitypub.image, }) : null, + posts.attachments.update(mainPid, attachment), ]); if (context) { @@ -418,9 +422,9 @@ Notes.getParentChain = async (uid, input) => { }; Notes.syncUserInboxes = async function (tid, uid) { - const [pids, { cid, mainPid }] = await Promise.all([ + const [pids, { cid, mainPid, tags }] = await Promise.all([ db.getSortedSetMembers(`tid:${tid}:posts`), - topics.getTopicFields(tid, ['tid', 'cid', 'mainPid']), + topics.getTopicFields(tid, ['tid', 'cid', 'mainPid', 'tags']), ]); pids.unshift(mainPid); @@ -430,6 +434,12 @@ Notes.syncUserInboxes = async function (tid, uid) { uids.add(parseInt(uid, 10)); } + // Tag followers + const tagsFollowers = await topics.getTagsFollowers(tags.map(tag => tag.value)); + new Set(tagsFollowers.flat()).forEach((uid) => { + uids.add(uid); + }); + const keys = Array.from(uids).map(uid => `uid:${uid}:inbox`); const score = await db.sortedSetScore(`cid:${cid}:tids`, tid); diff --git a/src/api/activitypub.js b/src/api/activitypub.js index 3b078a7862..0632219e66 100644 --- a/src/api/activitypub.js +++ b/src/api/activitypub.js @@ -128,8 +128,6 @@ activitypubApi.create.note = enabledCheck(async (caller, { pid, post }) => { const { to, cc, targets } = await activitypub.buildRecipients(object, { pid, uid: post.user.uid }); object.to = to; object.cc = cc; - const { cid } = post.category; - const followers = await activitypub.notes.getCategoryFollowers(cid); const payload = { id: `${object.id}#activity/create/${Date.now()}`, @@ -140,22 +138,11 @@ activitypubApi.create.note = enabledCheck(async (caller, { pid, post }) => { object, }; - await activitypub.send('uid', caller.uid, Array.from(targets), payload); - - setTimeout(() => { // Delay sending to avoid potential race condition - if (followers.length) { - Promise.all([payload, payload.object].map(async (object) => { - await activitypub.send('cid', cid, followers, { - id: `${nconf.get('url')}/post/${encodeURIComponent(object.object ? object.object.id : object.id)}#activity/announce/${Date.now()}`, - type: 'Announce', - to: [activitypub._constants.publicAddress], - cc: [`${nconf.get('url')}/category/${cid}/followers`], - object, - }); - })).catch(err => winston.error(err.stack)); - } - activitypubApi.add(caller, { pid }); - }, 5000); + await Promise.all([ + activitypub.send('uid', caller.uid, Array.from(targets), payload), + activitypub.feps.announce(pid, payload), + activitypubApi.add(caller, { pid }), + ]); }); activitypubApi.create.privateNote = enabledCheck(async (caller, { messageObj }) => { @@ -236,7 +223,10 @@ activitypubApi.update.note = enabledCheck(async (caller, { post }) => { object, }; - await activitypub.send('uid', caller.uid, Array.from(targets), payload); + await Promise.all([ + activitypub.send('uid', caller.uid, Array.from(targets), payload), + activitypub.feps.announce(post.pid, payload), + ]); }); activitypubApi.update.privateNote = enabledCheck(async (caller, { messageObj }) => { @@ -292,7 +282,10 @@ activitypubApi.delete.note = enabledCheck(async (caller, { pid }) => { origin: object.context, }; - await activitypub.send('uid', caller.uid, Array.from(targets), payload); + await Promise.all([ + activitypub.send('uid', caller.uid, Array.from(targets), payload), + activitypub.feps.announce(pid, payload), + ]); }); activitypubApi.like = {}; @@ -307,11 +300,17 @@ activitypubApi.like.note = enabledCheck(async (caller, { pid }) => { return; } - await activitypub.send('uid', caller.uid, [uid], { + const payload = { id: `${nconf.get('url')}/uid/${caller.uid}#activity/like/${encodeURIComponent(pid)}`, type: 'Like', + actor: `${nconf.get('url')}/uid/${caller.uid}`, object: pid, - }); + }; + + await Promise.all([ + activitypub.send('uid', caller.uid, [uid], payload), + activitypub.feps.announce(pid, payload), + ]); }); activitypubApi.announce = {}; @@ -362,16 +361,22 @@ activitypubApi.undo.like = enabledCheck(async (caller, { pid }) => { return; } - await activitypub.send('uid', caller.uid, [uid], { + const payload = { id: `${nconf.get('url')}/uid/${caller.uid}#activity/undo:like/${encodeURIComponent(pid)}/${Date.now()}`, type: 'Undo', + actor: `${nconf.get('url')}/uid/${caller.uid}`, object: { actor: `${nconf.get('url')}/uid/${caller.uid}`, id: `${nconf.get('url')}/uid/${caller.uid}#activity/like/${encodeURIComponent(pid)}`, type: 'Like', object: pid, }, - }); + }; + + await Promise.all([ + activitypub.send('uid', caller.uid, [uid], payload), + activitypub.feps.announce(pid, payload), + ]); }); activitypubApi.flag = enabledCheck(async (caller, flag) => { diff --git a/src/api/topics.js b/src/api/topics.js index b9066786a0..f1e9f9408a 100644 --- a/src/api/topics.js +++ b/src/api/topics.js @@ -10,6 +10,7 @@ const meta = require('../meta'); const privileges = require('../privileges'); const events = require('../events'); const batch = require('../batch'); +const activitypub = require('../activitypub'); const activitypubApi = require('./activitypub'); const apiHelpers = require('./helpers'); @@ -327,7 +328,7 @@ topicsAPI.move = async (caller, { tid, cid }) => { if (!canMove) { throw new Error('[[error:no-privileges]]'); } - const topicData = await topics.getTopicFields(tid, ['tid', 'cid', 'slug', 'deleted']); + const topicData = await topics.getTopicFields(tid, ['tid', 'cid', 'mainPid', 'slug', 'deleted']); if (!cids.includes(topicData.cid)) { cids.push(topicData.cid); } @@ -341,6 +342,7 @@ topicsAPI.move = async (caller, { tid, cid }) => { if (!topicData.deleted) { socketHelpers.sendNotificationToTopicOwner(tid, caller.uid, 'move', 'notifications:moved-your-topic'); activitypubApi.announce.note(caller, { tid }); + activitypub.feps.announceObject(topicData.mainPid); } await events.log({ diff --git a/src/categories/topics.js b/src/categories/topics.js index 918cc4c244..64e9046614 100644 --- a/src/categories/topics.js +++ b/src/categories/topics.js @@ -99,7 +99,8 @@ module.exports = function (Categories) { most_views: `cid:${cid}:tids:views`, }; - const set = new Set([sortToSet.hasOwnProperty(sort) ? sortToSet[sort] : `cid:${cid}:tids`]); + const mainSet = sortToSet.hasOwnProperty(sort) ? sortToSet[sort] : `cid:${cid}:tids`; + const set = new Set([mainSet]); if (data.tag) { if (Array.isArray(data.tag)) { @@ -116,6 +117,7 @@ module.exports = function (Categories) { } if (parseInt(cid, 10) === -1 && uid > 0) { + set.delete(mainSet); set.add(`uid:${uid}:inbox`); } const setValue = Array.from(set); @@ -251,4 +253,24 @@ module.exports = function (Categories) { }); notifications.push(notification, followers); }; + + Categories.sortTidsBySet = async (tids, cid, sort) => { + sort = sort || meta.config.categoryTopicSort || 'recently_replied'; + const sortToSet = { + recently_replied: `cid:${cid}:tids`, + recently_created: `cid:${cid}:tids:create`, + most_posts: `cid:${cid}:tids:posts`, + most_votes: `cid:${cid}:tids:votes`, + most_views: `cid:${cid}:tids:views`, + }; + + const orderBy = sortToSet[sort]; + const scores = await db.sortedSetScores(orderBy, tids); + const sorted = tids + .map((tid, idx) => [tid, scores[idx]]) + .sort(([, a], [, b]) => b - a) + .map(([tid]) => tid); + + return sorted; + }; }; diff --git a/src/controllers/activitypub/actors.js b/src/controllers/activitypub/actors.js index c80f6e2867..f9212ba09d 100644 --- a/src/controllers/activitypub/actors.js +++ b/src/controllers/activitypub/actors.js @@ -55,12 +55,12 @@ Actors.userBySlug = async function (req, res) { Actors.user(req, res); }; -Actors.note = async function (req, res) { +Actors.note = async function (req, res, next) { // technically a note isn't an actor, but it is here purely for organizational purposes. // but also, wouldn't it be wild if you could follow a note? lol. const allowed = await privileges.posts.can('topics:read', req.params.pid, activitypub._constants.uid); if (!allowed) { - return res.sendStatus(404); + return next(); } // Handle requests for remote content @@ -72,8 +72,8 @@ Actors.note = async function (req, res) { parse: false, extraFields: ['edited'], })).pop(); - if (!post) { - return res.sendStatus(404); + if (!post || post.timestamp > Date.now()) { + return next(); } const payload = await activitypub.mocks.notes.public(post); @@ -120,15 +120,19 @@ Actors.topic = async function (req, res, next) { const page = parseInt(req.query.page, 10) || undefined; const perPage = meta.config.postsPerPage; - const { cid, titleRaw: name, mainPid, slug } = await topics.getTopicFields(req.params.tid, ['cid', 'title', 'mainPid', 'slug']); + const { cid, titleRaw: name, mainPid, slug, timestamp } = await topics.getTopicFields(req.params.tid, ['cid', 'title', 'mainPid', 'slug', 'timestamp']); try { + if (timestamp > Date.now()) { // Scheduled topic, no response + return next(); + } + let [collection, pids] = await Promise.all([ activitypub.helpers.generateCollection({ set: `tid:${req.params.tid}:posts`, method: posts.getPidsFromSet, page, perPage, - url: `${nconf.get('url')}/topic/${req.params.tid}`, + url: `${nconf.get('url')}/topic/${req.params.tid}/posts`, }), db.getSortedSetMembers(`tid:${req.params.tid}:posts`), ]); diff --git a/src/controllers/activitypub/topics.js b/src/controllers/activitypub/topics.js index fac130eb97..afcc7eb942 100644 --- a/src/controllers/activitypub/topics.js +++ b/src/controllers/activitypub/topics.js @@ -2,7 +2,6 @@ const nconf = require('nconf'); -const db = require('../../database'); const user = require('../../user'); const topics = require('../../topics'); @@ -20,22 +19,6 @@ const validSorts = [ 'recently_replied', 'recently_created', 'most_posts', 'most_votes', 'most_views', ]; -async function getTids(data) { - // Poor man's intersect used instead of getSortedSetIntersect because the zsets are huge - const sets = await categories.buildTopicsSortedSet(data); - const intersect = Array.isArray(sets); - const mainSet = intersect ? sets.shift() : sets; - let tids = await db.getSortedSetRevRange(mainSet, 0, 499); - if (!intersect) { - return tids.slice(data.start, data.stop + 1); - } - - let intersection = await Promise.all(sets.map(async set => db.isSortedSetMembers(set, tids))); - intersection = intersection.reduce((memo, cur) => memo.map((show, idx) => show && cur[idx])); - tids = tids.filter((_, idx) => intersection[idx]); - return tids.slice(data.start, data.stop + 1); -} - controller.list = async function (req, res) { if (!req.uid) { return helpers.redirect(res, '/recent?cid=-1', false); @@ -68,7 +51,8 @@ controller.list = async function (req, res) { const data = await categories.getCategoryById(cidQuery); delete data.children; - const tids = await getTids(cidQuery); + let tids = await categories.getTopicIds(cidQuery); + tids = await categories.sortTidsBySet(tids, -1, sort); // sorting not handled if cid is -1 data.topicCount = tids.length; data.topics = await topics.getTopicsByTids(tids, { uid: req.uid }); topics.calculateTopicIndices(data.topics, start); diff --git a/src/middleware/activitypub.js b/src/middleware/activitypub.js index 05f67d3338..4d3edb016c 100644 --- a/src/middleware/activitypub.js +++ b/src/middleware/activitypub.js @@ -137,6 +137,7 @@ middleware.resolveObjects = async function (req, res, next) { next(); }; +// todo: deprecate... this should be handled in actor and note assertion methods instead, or perhaps via helper fn middleware.normalize = async function (req, res, next) { // Normalizes the received data structure const { body } = req; diff --git a/src/posts/parse.js b/src/posts/parse.js index fcc87b1ecd..8d0c902e46 100644 --- a/src/posts/parse.js +++ b/src/posts/parse.js @@ -33,18 +33,12 @@ let sanitizeConfig = { 'tabindex', 'title', 'translate', 'aria-*', 'data-*', ], }; -const allowedTypes = new Set(['default', 'plaintext', 'activitypub.note', 'activitypub.article']); +const allowedTypes = new Set(['default', 'plaintext', 'activitypub.note', 'activitypub.article', 'markdown']); module.exports = function (Posts) { - Posts.urlRegex = { - regex: /href="([^"]+)"/g, - length: 6, - }; - - Posts.imgRegex = { - regex: /src="([^"]+)"/g, - length: 5, - }; + Posts.urlRegex = /href="([^"]+)"/g; + Posts.imgRegex = /src="([^"]+)"/g; + Posts.mdImageUrlRegex = /\[.+?\]\(([^\\)]+)\)/g; Posts.parsePost = async function (postData, type) { if (!postData) { @@ -89,7 +83,7 @@ module.exports = function (Posts) { return content; } let parsed; - let current = regex.regex.exec(content); + let current = regex.exec(content); let absolute; while (current !== null) { if (current[1]) { @@ -104,15 +98,16 @@ module.exports = function (Posts) { absolute = `//${current[1]}`; } - content = content.slice(0, current.index + regex.length) + + const offset = current[0].indexOf(current[1]); + content = content.slice(0, current.index + offset) + absolute + - content.slice(current.index + regex.length + current[1].length); + content.slice(current.index + offset + current[1].length); } } catch (err) { winston.verbose(err.messsage); } } - current = regex.regex.exec(content); + current = regex.exec(content); } return content; diff --git a/src/request.js b/src/request.js index 7f6efb300a..b84b198914 100644 --- a/src/request.js +++ b/src/request.js @@ -1,5 +1,6 @@ 'use strict'; +const nconf = require('nconf'); const { CookieJar } = require('tough-cookie'); const fetchCookie = require('fetch-cookie').default; const { version } = require('../package.json'); @@ -8,7 +9,7 @@ exports.jar = function () { return new CookieJar(); }; -const userAgent = `NodeBB/${version.split('.').shift()}.x`; +const userAgent = `NodeBB/${version.split('.').shift()}.x (${nconf.get('url')})`; // Initialize fetch - somewhat hacky, but it's required for globalDispatcher to be available async function call(url, method, { body, timeout, jar, ...config } = {}) { diff --git a/src/routes/activitypub.js b/src/routes/activitypub.js index 8993cb8875..b6a516b481 100644 --- a/src/routes/activitypub.js +++ b/src/routes/activitypub.js @@ -42,11 +42,11 @@ module.exports = function (app, middleware, controllers) { app.get('/topic/:tid/:slug?', [...middlewares, middleware.assert.topic], controllers.activitypub.actors.topic); - app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category); app.get('/category/:cid/inbox', [...middlewares, middleware.assert.category], controllers.activitypub.getInbox); app.post('/category/:cid/inbox', [...inboxMiddlewares, middleware.assert.category, ...inboxMiddlewares], controllers.activitypub.postInbox); app.get('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.getCategoryOutbox); app.post('/category/:cid/outbox', [...middlewares, middleware.assert.category], controllers.activitypub.postOutbox); + app.get('/category/:cid/:slug?', [...middlewares, middleware.assert.category], controllers.activitypub.actors.category); app.get('/message/:mid', [...middlewares, middleware.assert.message], controllers.activitypub.actors.message); }; diff --git a/src/search.js b/src/search.js index 5e9b3c8e47..8e9d947dae 100644 --- a/src/search.js +++ b/src/search.js @@ -173,6 +173,9 @@ async function fetchRemoteObject(data) { } else if (activitypub._constants.acceptableActorTypes.has(type)) { data.searchIn = 'users'; return await user.search(data); + } else if (activitypub._constants.acceptable.contextTypes.has(type)) { + ({ tid } = await activitypub.notes.assert(uid, id)); + id = await topics.getTopicField(tid, 'mainPid'); } } diff --git a/src/topics/tags.js b/src/topics/tags.js index 9d4865122d..80fea5e6c6 100644 --- a/src/topics/tags.js +++ b/src/topics/tags.js @@ -564,6 +564,10 @@ module.exports = function (Topics) { return await db.getSortedSetRange(`tag:${tag}:followers`, start, stop); }; + Topics.getTagsFollowers = async function (tags) { + return await db.getSortedSetsMembers(tags.map(tag => `tag:${tag}:followers`)); + }; + Topics.followTag = async (tag, uid) => { if (!(parseInt(uid, 10) > 0)) { throw new Error('[[error:not-logged-in]]'); diff --git a/test/activitypub.js b/test/activitypub.js index d05f50e4e6..57942ffe72 100644 --- a/test/activitypub.js +++ b/test/activitypub.js @@ -308,168 +308,6 @@ describe('ActivityPub integration', () => { }); }); - describe('User Actor endpoint', () => { - let uid; - let slug; - - beforeEach(async () => { - slug = slugify(utils.generateUUID().slice(0, 8)); - uid = await user.create({ username: slug }); - }); - - it('should return a valid ActivityPub Actor JSON-LD payload', async () => { - const { response, body } = await request.get(`${nconf.get('url')}/uid/${uid}`, { - headers: { - Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', - }, - }); - - assert(response); - assert.strictEqual(response.statusCode, 200); - assert(body.hasOwnProperty('@context')); - assert(body['@context'].includes('https://www.w3.org/ns/activitystreams')); - - ['id', 'url', 'followers', 'following', 'inbox', 'outbox'].forEach((prop) => { - assert(body.hasOwnProperty(prop)); - assert(body[prop]); - }); - - assert.strictEqual(body.id, `${nconf.get('url')}/uid/${uid}`); - assert.strictEqual(body.type, 'Person'); - }); - - it('should contain a `publicKey` property with a public key', async () => { - const { response, body } = await request.get(`${nconf.get('url')}/uid/${uid}`, { - headers: { - Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', - }, - }); - - assert(body.hasOwnProperty('publicKey')); - assert(['id', 'owner', 'publicKeyPem'].every(prop => body.publicKey.hasOwnProperty(prop))); - }); - }); - - describe('Category Actor endpoint', () => { - let cid; - let slug; - let description; - - beforeEach(async () => { - slug = slugify(utils.generateUUID().slice(0, 8)); - description = utils.generateUUID(); - ({ cid } = await categories.create({ - name: slug, - description, - })); - }); - - it('should return a valid ActivityPub Actor JSON-LD payload', async () => { - const { response, body } = await request.get(`${nconf.get('url')}/category/${cid}`, { - headers: { - Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', - }, - }); - - assert(response); - assert.strictEqual(response.statusCode, 200); - assert(body.hasOwnProperty('@context')); - assert(body['@context'].includes('https://www.w3.org/ns/activitystreams')); - - ['id', 'url', /* 'followers', 'following', */ 'inbox', 'outbox'].forEach((prop) => { - assert(body.hasOwnProperty(prop)); - assert(body[prop]); - }); - - assert.strictEqual(body.id, `${nconf.get('url')}/category/${cid}`); - assert.strictEqual(body.type, 'Group'); - assert.strictEqual(body.summary, description); - assert.deepStrictEqual(body.icon, { - type: 'Image', - mediaType: 'image/png', - url: `${nconf.get('url')}/assets/uploads/category/category-${cid}-icon.png`, - }); - }); - - it('should contain a `publicKey` property with a public key', async () => { - const { body } = await request.get(`${nconf.get('url')}/category/${cid}`, { - headers: { - Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', - }, - }); - - assert(body.hasOwnProperty('publicKey')); - assert(['id', 'owner', 'publicKeyPem'].every(prop => body.publicKey.hasOwnProperty(prop))); - }); - - it('should serve the the backgroundImage in `icon` if set', async () => { - const payload = {}; - payload[cid] = { - backgroundImage: `/assets/uploads/files/test.png`, - }; - await categories.update(payload); - - const { body } = await request.get(`${nconf.get('url')}/category/${cid}`, { - headers: { - Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', - }, - }); - - assert.deepStrictEqual(body.icon, { - type: 'Image', - mediaType: 'image/png', - url: `${nconf.get('url')}/assets/uploads/files/test.png`, - }); - }); - }); - - describe('Instance Actor endpoint', () => { - let response; - let body; - - before(async () => { - ({ response, body } = await request.get(`${nconf.get('url')}/actor`, { - headers: { - Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', - }, - })); - }); - - it('should respond properly', async () => { - assert(response); - assert.strictEqual(response.statusCode, 200); - }); - - it('should return a valid ActivityPub Actor JSON-LD payload', async () => { - assert(body.hasOwnProperty('@context')); - assert(body['@context'].includes('https://www.w3.org/ns/activitystreams')); - - ['id', 'url', 'inbox', 'outbox', 'name', 'preferredUsername'].forEach((prop) => { - assert(body.hasOwnProperty(prop)); - assert(body[prop]); - }); - - assert.strictEqual(body.id, body.url); - assert.strictEqual(body.type, 'Application'); - assert.strictEqual(body.name, meta.config.site_title || 'NodeBB'); - assert.strictEqual(body.preferredUsername, nconf.get('url_parsed').hostname); - }); - - it('should contain a `publicKey` property with a public key', async () => { - assert(body.hasOwnProperty('publicKey')); - assert(['id', 'owner', 'publicKeyPem'].every(prop => body.publicKey.hasOwnProperty(prop))); - }); - - it('should also have a valid WebFinger response tied to `preferredUsername`', async () => { - const { response, body: body2 } = await request.get(`${nconf.get('url')}/.well-known/webfinger?resource=acct%3a${body.preferredUsername}@${nconf.get('url_parsed').host}`); - - assert.strictEqual(response.statusCode, 200); - assert(body2 && body2.aliases && body2.links); - assert(body2.aliases.includes(nconf.get('url'))); - assert(body2.links.some(item => item.rel === 'self' && item.type === 'application/activity+json' && item.href === `${nconf.get('url')}/actor`)); - }); - }); - describe('Receipt of ActivityPub events to inboxes (federating IN)', () => { describe('Create', () => { describe('Note', () => { @@ -648,83 +486,6 @@ describe('ActivityPub integration', () => { }); }); - describe('Actor asserton', () => { - describe('happy path', () => { - let uid; - let actorUri; - - before(async () => { - uid = utils.generateUUID().slice(0, 8); - actorUri = `https://example.org/user/${uid}`; - activitypub._cache.set(`0;${actorUri}`, { - '@context': 'https://www.w3.org/ns/activitystreams', - id: actorUri, - url: actorUri, - - type: 'Person', - name: 'example', - preferredUsername: 'example', - inbox: `https://example.org/user/${uid}/inbox`, - outbox: `https://example.org/user/${uid}/outbox`, - - publicKey: { - id: `${actorUri}#key`, - owner: actorUri, - publicKeyPem: 'somekey', - }, - }); - }); - - it('should return true if successfully asserted', async () => { - const result = await activitypub.actors.assert([actorUri]); - assert(result && result.length); - }); - - it('should contain a representation of that remote user in the database', async () => { - const exists = await db.exists(`userRemote:${actorUri}`); - assert(exists); - - const userData = await user.getUserData(actorUri); - assert(userData); - assert.strictEqual(userData.uid, actorUri); - }); - - it('should save the actor\'s publicly accessible URL in the hash as well', async () => { - const url = await user.getUserField(actorUri, 'url'); - assert.strictEqual(url, actorUri); - }); - }); - - describe('edge case: loopback handles and uris', () => { - let uid; - const userslug = utils.generateUUID().slice(0, 8); - before(async () => { - uid = await user.create({ username: userslug }); - }); - - it('should return true but not actually assert the handle into the database', async () => { - const handle = `${userslug}@${nconf.get('url_parsed').host}`; - const result = await activitypub.actors.assert([handle]); - assert(result); - - const handleExists = await db.isObjectField('handle:uid', handle); - assert.strictEqual(handleExists, false); - - const userRemoteHashExists = await db.exists(`userRemote:${nconf.get('url')}/uid/${uid}`); - assert.strictEqual(userRemoteHashExists, false); - }); - - it('should return true but not actually assert the uri into the database', async () => { - const uri = `${nconf.get('url')}/uid/${uid}`; - const result = await activitypub.actors.assert([uri]); - assert(result); - - const userRemoteHashExists = await db.exists(`userRemote:${uri}`); - assert.strictEqual(userRemoteHashExists, false); - }); - }); - }); - describe('ActivityPub', async () => { let files; diff --git a/test/activitypub/actors.js b/test/activitypub/actors.js new file mode 100644 index 0000000000..9da0380c27 --- /dev/null +++ b/test/activitypub/actors.js @@ -0,0 +1,395 @@ +'use strict'; + +const assert = require('assert'); +const nconf = require('nconf'); + +const db = require('../mocks/databasemock'); +const meta = require('../../src/meta'); +const categories = require('../../src/categories'); +const user = require('../../src/user'); +const topics = require('../../src/topics'); +const activitypub = require('../../src/activitypub'); +const utils = require('../../src/utils'); +const request = require('../../src/request'); +const slugify = require('../../src/slugify'); + +describe('Actor asserton', () => { + describe('happy path', () => { + let uid; + let actorUri; + + before(async () => { + uid = utils.generateUUID().slice(0, 8); + actorUri = `https://example.org/user/${uid}`; + activitypub._cache.set(`0;${actorUri}`, { + '@context': 'https://www.w3.org/ns/activitystreams', + id: actorUri, + url: actorUri, + + type: 'Person', + name: 'example', + preferredUsername: 'example', + inbox: `https://example.org/user/${uid}/inbox`, + outbox: `https://example.org/user/${uid}/outbox`, + + publicKey: { + id: `${actorUri}#key`, + owner: actorUri, + publicKeyPem: 'somekey', + }, + }); + }); + + it('should return true if successfully asserted', async () => { + const result = await activitypub.actors.assert([actorUri]); + assert(result && result.length); + }); + + it('should contain a representation of that remote user in the database', async () => { + const exists = await db.exists(`userRemote:${actorUri}`); + assert(exists); + + const userData = await user.getUserData(actorUri); + assert(userData); + assert.strictEqual(userData.uid, actorUri); + }); + + it('should save the actor\'s publicly accessible URL in the hash as well', async () => { + const url = await user.getUserField(actorUri, 'url'); + assert.strictEqual(url, actorUri); + }); + }); + + describe('edge case: loopback handles and uris', () => { + let uid; + const userslug = utils.generateUUID().slice(0, 8); + before(async () => { + uid = await user.create({ username: userslug }); + }); + + it('should return true but not actually assert the handle into the database', async () => { + const handle = `${userslug}@${nconf.get('url_parsed').host}`; + const result = await activitypub.actors.assert([handle]); + assert(result); + + const handleExists = await db.isObjectField('handle:uid', handle); + assert.strictEqual(handleExists, false); + + const userRemoteHashExists = await db.exists(`userRemote:${nconf.get('url')}/uid/${uid}`); + assert.strictEqual(userRemoteHashExists, false); + }); + + it('should return true but not actually assert the uri into the database', async () => { + const uri = `${nconf.get('url')}/uid/${uid}`; + const result = await activitypub.actors.assert([uri]); + assert(result); + + const userRemoteHashExists = await db.exists(`userRemote:${uri}`); + assert.strictEqual(userRemoteHashExists, false); + }); + }); +}); + +describe('Controllers', () => { + describe('User Actor endpoint', () => { + let uid; + let slug; + + beforeEach(async () => { + slug = slugify(utils.generateUUID().slice(0, 8)); + uid = await user.create({ username: slug }); + }); + + it('should return a valid ActivityPub Actor JSON-LD payload', async () => { + const { response, body } = await request.get(`${nconf.get('url')}/uid/${uid}`, { + headers: { + Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + }, + }); + + assert(response); + assert.strictEqual(response.statusCode, 200); + assert(body.hasOwnProperty('@context')); + assert(body['@context'].includes('https://www.w3.org/ns/activitystreams')); + + ['id', 'url', 'followers', 'following', 'inbox', 'outbox'].forEach((prop) => { + assert(body.hasOwnProperty(prop)); + assert(body[prop]); + }); + + assert.strictEqual(body.id, `${nconf.get('url')}/uid/${uid}`); + assert.strictEqual(body.type, 'Person'); + }); + + it('should contain a `publicKey` property with a public key', async () => { + const { response, body } = await request.get(`${nconf.get('url')}/uid/${uid}`, { + headers: { + Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + }, + }); + + assert(body.hasOwnProperty('publicKey')); + assert(['id', 'owner', 'publicKeyPem'].every(prop => body.publicKey.hasOwnProperty(prop))); + }); + }); + + describe('Category Actor endpoint', () => { + let cid; + let slug; + let description; + + beforeEach(async () => { + slug = slugify(utils.generateUUID().slice(0, 8)); + description = utils.generateUUID(); + ({ cid } = await categories.create({ + name: slug, + description, + })); + }); + + it('should return a valid ActivityPub Actor JSON-LD payload', async () => { + const { response, body } = await request.get(`${nconf.get('url')}/category/${cid}`, { + headers: { + Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + }, + }); + + assert(response); + assert.strictEqual(response.statusCode, 200); + assert(body.hasOwnProperty('@context')); + assert(body['@context'].includes('https://www.w3.org/ns/activitystreams')); + + ['id', 'url', /* 'followers', 'following', */ 'inbox', 'outbox'].forEach((prop) => { + assert(body.hasOwnProperty(prop)); + assert(body[prop]); + }); + + assert.strictEqual(body.id, `${nconf.get('url')}/category/${cid}`); + assert.strictEqual(body.type, 'Group'); + assert.strictEqual(body.summary, description); + assert.deepStrictEqual(body.icon, { + type: 'Image', + mediaType: 'image/png', + url: `${nconf.get('url')}/assets/uploads/category/category-${cid}-icon.png`, + }); + }); + + it('should contain a `publicKey` property with a public key', async () => { + const { body } = await request.get(`${nconf.get('url')}/category/${cid}`, { + headers: { + Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + }, + }); + + assert(body.hasOwnProperty('publicKey')); + assert(['id', 'owner', 'publicKeyPem'].every(prop => body.publicKey.hasOwnProperty(prop))); + }); + + it('should serve the the backgroundImage in `icon` if set', async () => { + const payload = {}; + payload[cid] = { + backgroundImage: `/assets/uploads/files/test.png`, + }; + await categories.update(payload); + + const { body } = await request.get(`${nconf.get('url')}/category/${cid}`, { + headers: { + Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + }, + }); + + assert.deepStrictEqual(body.icon, { + type: 'Image', + mediaType: 'image/png', + url: `${nconf.get('url')}/assets/uploads/files/test.png`, + }); + }); + }); + + describe('Instance Actor endpoint', () => { + let response; + let body; + + before(async () => { + ({ response, body } = await request.get(`${nconf.get('url')}/actor`, { + headers: { + Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + }, + })); + }); + + it('should respond properly', async () => { + assert(response); + assert.strictEqual(response.statusCode, 200); + }); + + it('should return a valid ActivityPub Actor JSON-LD payload', async () => { + assert(body.hasOwnProperty('@context')); + assert(body['@context'].includes('https://www.w3.org/ns/activitystreams')); + + ['id', 'url', 'inbox', 'outbox', 'name', 'preferredUsername'].forEach((prop) => { + assert(body.hasOwnProperty(prop)); + assert(body[prop]); + }); + + assert.strictEqual(body.id, body.url); + assert.strictEqual(body.type, 'Application'); + assert.strictEqual(body.name, meta.config.site_title || 'NodeBB'); + assert.strictEqual(body.preferredUsername, nconf.get('url_parsed').hostname); + }); + + it('should contain a `publicKey` property with a public key', async () => { + assert(body.hasOwnProperty('publicKey')); + assert(['id', 'owner', 'publicKeyPem'].every(prop => body.publicKey.hasOwnProperty(prop))); + }); + + it('should also have a valid WebFinger response tied to `preferredUsername`', async () => { + const { response, body: body2 } = await request.get(`${nconf.get('url')}/.well-known/webfinger?resource=acct%3a${body.preferredUsername}@${nconf.get('url_parsed').host}`); + + assert.strictEqual(response.statusCode, 200); + assert(body2 && body2.aliases && body2.links); + assert(body2.aliases.includes(nconf.get('url'))); + assert(body2.links.some(item => item.rel === 'self' && item.type === 'application/activity+json' && item.href === `${nconf.get('url')}/actor`)); + }); + }); + + describe('Topic Collection endpoint', () => { + let cid; + let uid; + + before(async () => { + ({ cid } = await categories.create({ name: utils.generateUUID().slice(0, 8) })); + const slug = slugify(utils.generateUUID().slice(0, 8)); + uid = await user.create({ username: slug }); + }); + + describe('Live', () => { + let topicData; + let response; + let body; + + before(async () => { + ({ topicData } = await topics.post({ + uid, + cid, + title: 'Lorem "Lipsum" Ipsum', + content: 'Lorem ipsum dolor sit amet', + })); + + ({ response, body } = await request.get(`${nconf.get('url')}/topic/${topicData.slug}`, { + headers: { + Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + }, + })); + }); + + it('should respond properly', async () => { + assert(response); + assert.strictEqual(response.statusCode, 200); + }); + + it('should return an OrderedCollection with one item', () => { + assert.strictEqual(body.type, 'OrderedCollection'); + assert.strictEqual(body.totalItems, 1); + assert(Array.isArray(body.orderedItems)); + assert.strictEqual(body.orderedItems[0], `${nconf.get('url')}/post/${topicData.mainPid}`); + }); + }); + + describe('Scheduled', () => { + let topicData; + let response; + let body; + + before(async () => { + ({ topicData } = await topics.post({ + uid, + cid, + title: 'Lorem "Lipsum" Ipsum', + content: 'Lorem ipsum dolor sit amet', + timestamp: Date.now() + (1000 * 60 * 60), // 1 hour in the future + })); + + ({ response, body } = await request.get(`${nconf.get('url')}/topic/${topicData.slug}`, { + headers: { + Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + }, + })); + }); + + it('should respond with a 404 Not Found', async () => { + assert(response); + assert.strictEqual(response.statusCode, 404); + }); + }); + }); + + describe('Post Object endpoint', () => { + let cid; + let uid; + + before(async () => { + ({ cid } = await categories.create({ name: utils.generateUUID().slice(0, 8) })); + const slug = slugify(utils.generateUUID().slice(0, 8)); + uid = await user.create({ username: slug }); + }); + + describe('Live', () => { + let postData; + let response; + let body; + + before(async () => { + ({ postData } = await topics.post({ + uid, + cid, + title: 'Lorem "Lipsum" Ipsum', + content: 'Lorem ipsum dolor sit amet', + })); + + ({ response, body } = await request.get(`${nconf.get('url')}/post/${postData.pid}`, { + headers: { + Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + }, + })); + }); + + it('should respond properly', async () => { + assert(response); + assert.strictEqual(response.statusCode, 200); + }); + + it('should return a Note type object', () => { + assert.strictEqual(body.type, 'Note'); + }); + }); + + describe('Scheduled', () => { + let topicData; + let postData; + let response; + let body; + + before(async () => { + ({ topicData, postData } = await topics.post({ + uid, + cid, + title: 'Lorem "Lipsum" Ipsum', + content: 'Lorem ipsum dolor sit amet', + timestamp: Date.now() + (1000 * 60 * 60), // 1 hour in the future + })); + + ({ response, body } = await request.get(`${nconf.get('url')}/post/${postData.pid}`, { + headers: { + Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + }, + })); + }); + + it('should respond with a 404 Not Found', async () => { + assert(response); + assert.strictEqual(response.statusCode, 404); + }); + }); + }); +}); diff --git a/test/activitypub/notes.js b/test/activitypub/notes.js index 6a27c5904b..77d7a18677 100644 --- a/test/activitypub/notes.js +++ b/test/activitypub/notes.js @@ -25,7 +25,11 @@ describe('Notes', () => { describe('Public objects', () => { it('should pull a remote root-level object by its id and create a new topic', async () => { const { id } = helpers.mocks.note(); - const { tid, count } = await activitypub.notes.assert(0, id, { skipChecks: true }); + const assertion = await activitypub.notes.assert(0, id, { skipChecks: true }); + assert(assertion); + + const { tid, count } = assertion; + assert(tid); assert.strictEqual(count, 1); const exists = await topics.exists(tid); @@ -34,7 +38,26 @@ describe('Notes', () => { it('should assert if the cc property is missing', async () => { const { id } = helpers.mocks.note({ cc: 'remove' }); - const { tid, count } = await activitypub.notes.assert(0, id, { skipChecks: true }); + const assertion = await activitypub.notes.assert(0, id, { skipChecks: true }); + assert(assertion); + + const { tid, count } = assertion; + assert(tid); + assert.strictEqual(count, 1); + + const exists = await topics.exists(tid); + assert(exists); + }); + + it('should assert if the object is of type Video', async () => { + const { id } = helpers.mocks.note({ + type: 'Video', + }); + const assertion = await activitypub.notes.assert(0, id, { skipChecks: true }); + assert(assertion); + + const { tid, count } = assertion; + assert(tid); assert.strictEqual(count, 1); const exists = await topics.exists(tid); diff --git a/test/password.js b/test/password.js index 4ad6d5a7e1..592d3a09af 100644 --- a/test/password.js +++ b/test/password.js @@ -9,7 +9,7 @@ describe('Password', () => { describe('.hash()', () => { it('should return a password hash when called', async () => { const hash = await password.hash(12, 'test'); - assert(hash.startsWith('$2a$')); + assert(hash.startsWith('$2b$')); }); }); diff --git a/test/user.js b/test/user.js index 579386b166..dde35f5b18 100644 --- a/test/user.js +++ b/test/user.js @@ -760,7 +760,7 @@ describe('User', () => { } else if (key !== 'password') { assert.equal(data[key], userData[key]); } else { - assert(userData[key].startsWith('$2a$')); + assert(userData[key].startsWith('$2b$')); } }); // updateProfile only saves valid fields