├── .eslintrc.js ├── .github ├── CODEOWNERS ├── CONTRIBUTING.md └── workflows │ ├── appstore-build-publish.yml │ └── pr-feedback.yml ├── .gitignore ├── .l10nignore ├── .nextcloudignore ├── .tx └── config ├── AUTHORS.md ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── COPYING ├── README.md ├── SECURITY.md ├── appinfo ├── info.xml └── routes.php ├── composer.json ├── composer.lock ├── css ├── dashboard.css └── discourse-search.css ├── img ├── app-dark.svg ├── app.svg ├── arobase.svg ├── badge.svg ├── chromium.png ├── firefox.png ├── group.svg ├── heart.svg ├── message.svg ├── reply.svg ├── screenshot1.jpg ├── solved.svg └── sound-border.svg ├── krankerl.toml ├── l10n ├── .gitkeep ├── ar.js ├── ar.json ├── ast.js ├── ast.json ├── bg.js ├── bg.json ├── ca.js ├── ca.json ├── cs.js ├── cs.json ├── da.js ├── da.json ├── de.js ├── de.json ├── de_DE.js ├── de_DE.json ├── el.js ├── el.json ├── en_GB.js ├── en_GB.json ├── es.js ├── es.json ├── es_EC.js ├── es_EC.json ├── et_EE.js ├── et_EE.json ├── eu.js ├── eu.json ├── fa.js ├── fa.json ├── fi.js ├── fi.json ├── fr.js ├── fr.json ├── ga.js ├── ga.json ├── gl.js ├── gl.json ├── he.js ├── he.json ├── hr.js ├── hr.json ├── hu.js ├── hu.json ├── id.js ├── id.json ├── is.js ├── is.json ├── it.js ├── it.json ├── ja.js ├── ja.json ├── ko.js ├── ko.json ├── lt_LT.js ├── lt_LT.json ├── lv.js ├── lv.json ├── mk.js ├── mk.json ├── nb.js ├── nb.json ├── nl.js ├── nl.json ├── oc.js ├── oc.json ├── pl.js ├── pl.json ├── pt_BR.js ├── pt_BR.json ├── pt_PT.js ├── pt_PT.json ├── ro.js ├── ro.json ├── ru.js ├── ru.json ├── sc.js ├── sc.json ├── sk.js ├── sk.json ├── sl.js ├── sl.json ├── sr.js ├── sr.json ├── sv.js ├── sv.json ├── tr.js ├── tr.json ├── ug.js ├── ug.json ├── uk.js ├── uk.json ├── uz.js ├── uz.json ├── vi.js ├── vi.json ├── zh_CN.js ├── zh_CN.json ├── zh_HK.js ├── zh_HK.json ├── zh_TW.js └── zh_TW.json ├── lib ├── AppInfo │ └── Application.php ├── Controller │ ├── ConfigController.php │ └── DiscourseAPIController.php ├── Dashboard │ ├── DiscourseReadNotificationsWidget.php │ └── DiscourseWidget.php ├── Migration │ └── Version2200Date202410231719.php ├── Reference │ └── DiscourseReferenceProvider.php ├── Search │ ├── DiscourseSearchPostsProvider.php │ └── DiscourseSearchTopicsProvider.php ├── Service │ └── DiscourseAPIService.php └── Settings │ ├── Personal.php │ └── PersonalSection.php ├── makefile ├── package-lock.json ├── package.json ├── src ├── bootstrap.js ├── components │ ├── PersonalSettings.vue │ └── icons │ │ └── DiscourseIcon.vue ├── dashboard.js ├── personalSettings.js ├── utils.js └── views │ └── Dashboard.vue ├── stylelint.config.js ├── templates └── personalSettings.php └── webpack.js /.eslintrc.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | module.exports = { 6 | globals: { 7 | appVersion: true, 8 | }, 9 | parserOptions: { 10 | requireConfigFile: false, 11 | }, 12 | extends: [ 13 | '@nextcloud', 14 | ], 15 | rules: { 16 | 'jsdoc/require-jsdoc': 'off', 17 | 'jsdoc/tag-lines': 'off', 18 | 'vue/first-attribute-linebreak': 'off', 19 | 'import/extensions': 'off', 20 | }, 21 | } 22 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | /appinfo/info.xml @andrey18106 @julien-nc 2 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | We always welcome contributions. Have an issue or an idea for a feature? Let us know. Additionally, we happily accept pull requests. 2 | 3 | In order to make the process run more smoothly, you can make sure of the following things: 4 | 5 | - Announce that you're working on a feature/bugfix in the relevant issue 6 | - Make sure the tests are passing 7 | - If you have any questions you can let the maintainers above know privately via email, or simply open an issue on github 8 | 9 | Please read the [Code of Conduct](https://nextcloud.com/community/code-of-conduct/). This document offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other. 10 | 11 | More information on how to contribute: https://nextcloud.com/contribute/ 12 | -------------------------------------------------------------------------------- /.github/workflows/pr-feedback.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | 6 | # SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-FileCopyrightText: 2023 Marcel Klehr 8 | # SPDX-FileCopyrightText: 2023 Joas Schilling <213943+nickvergessen@users.noreply.github.com> 9 | # SPDX-FileCopyrightText: 2023 Daniel Kesselberg 10 | # SPDX-FileCopyrightText: 2023 Florian Steffens 11 | # SPDX-License-Identifier: MIT 12 | 13 | name: 'Ask for feedback on PRs' 14 | on: 15 | schedule: 16 | - cron: '30 1 * * *' 17 | 18 | permissions: 19 | contents: read 20 | pull-requests: write 21 | 22 | jobs: 23 | pr-feedback: 24 | if: ${{ github.repository_owner == 'nextcloud' }} 25 | runs-on: ubuntu-latest 26 | steps: 27 | - name: The get-github-handles-from-website action 28 | uses: marcelklehr/get-github-handles-from-website-action@06b2239db0a48fe1484ba0bfd966a3ab81a08308 # v1.0.1 29 | id: scrape 30 | with: 31 | website: 'https://nextcloud.com/team/' 32 | 33 | - name: Get blocklist 34 | id: blocklist 35 | run: | 36 | blocklist=$(curl https://raw.githubusercontent.com/nextcloud/.github/master/non-community-usernames.txt | paste -s -d, -) 37 | echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT" 38 | 39 | - uses: marcelklehr/pr-feedback-action@1883b38a033fb16f576875e0cf45f98b857655c4 40 | with: 41 | feedback-message: | 42 | Hello there, 43 | Thank you so much for taking the time and effort to create a pull request to our Nextcloud project. 44 | 45 | We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. 46 | 47 | Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 48 | 49 | Thank you for contributing to Nextcloud and we hope to hear from you soon! 50 | 51 | (If you believe you should not receive this message, you can add yourself to the [blocklist](https://github.com/nextcloud/.github/blob/master/non-community-usernames.txt).) 52 | days-before-feedback: 14 53 | start-date: '2024-04-30' 54 | exempt-authors: '${{ steps.blocklist.outputs.blocklist }},${{ steps.scrape.outputs.users }}' 55 | exempt-bots: true 56 | 57 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | js/ 3 | .code-workspace 4 | .DS_Store 5 | .idea/ 6 | .vscode/ 7 | .vscode-upload.json 8 | .*.sw* 9 | node_modules 10 | -------------------------------------------------------------------------------- /.l10nignore: -------------------------------------------------------------------------------- 1 | js/ 2 | vendor/ -------------------------------------------------------------------------------- /.nextcloudignore: -------------------------------------------------------------------------------- 1 | .git 2 | .github 3 | .gitignore 4 | .tx 5 | .vscode 6 | .php-cs-fixer.* 7 | /.codecov.yml 8 | /.eslintrc.js 9 | /.gitattributes 10 | /.gitignore 11 | /.l10nignore 12 | /.nextcloudignore 13 | /.travis.yml 14 | /.pre-commit-config.yaml 15 | /babel.config.js 16 | /build 17 | /CODE_OF_CONDUCT.md 18 | /README.md 19 | /SECURITY.md 20 | /composer.* 21 | /node_modules 22 | /screenshots 23 | /src 24 | /vendor/bin 25 | /jest.config.js 26 | /Makefile 27 | /krankerl.toml 28 | /package-lock.json 29 | /package.json 30 | /postcss.config.js 31 | /psalm.xml 32 | /pyproject.toml 33 | /renovate.json 34 | /stylelint.config.js 35 | /webpack.* 36 | tests 37 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi 4 | 5 | [o:nextcloud:p:nextcloud:r:integration_discourse] 6 | file_filter = translationfiles//integration_discourse.po 7 | source_file = translationfiles/templates/integration_discourse.pot 8 | source_lang = en 9 | type = PO 10 | 11 | -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | 5 | # Authors 6 | 7 | * Julien Veyssier (Developper) 8 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 5 | # Change Log 6 | All notable changes to this project will be documented in this file. 7 | 8 | The format is based on [Keep a Changelog](http://keepachangelog.com/) 9 | and this project adheres to [Semantic Versioning](http://semver.org/). 10 | 11 | ## [Unreleased] 12 | 13 | ## 2.3.0 - 2025-02-13 14 | 15 | ### Added 16 | 17 | - Helper text to instance URL in Personal settings 18 | - Second Dashboard widget to show already read notifications 19 | - Option to manually trigger custom protocol handler registration if prompt is not shown on page load 20 | 21 | ### Fixed 22 | 23 | - Fixed incorrect encrypted token handling (regression) 24 | 25 | 26 | ## 2.1.0 - 2024-09-16 27 | 28 | Maintenance update 29 | 30 | ### Changed 31 | 32 | - Drop support for NC 26, 27 33 | - Update pkgs 34 | 35 | ## 2.0.7 – 2024-04-24 36 | 37 | Maintenance update 38 | 39 | ### Changed 40 | 41 | - Update npm packages (security) 42 | - Localization (l10n) updates 43 | 44 | ## 2.0.6 - 2024-03-28 45 | 46 | ### Changed 47 | 48 | - Support Nextcloud 29 49 | - Update npm pkgs 50 | - Use dashboard widget component from nextcloud/vue 51 | 52 | ## 2.0.5 - 2023-12-11 53 | 54 | Maintenance update 55 | 56 | ### Added 57 | 58 | - Added Nextcloud 28 support 59 | 60 | ### Changed 61 | 62 | - Updated npm packages 63 | - Updated l10n (localization) 64 | 65 | ## 2.0.4 - 2023-05-31 66 | 67 | ### Fixed 68 | 69 | - Add missing composer install in krankerl config 70 | 71 | ## 2.0.3 - 2023-05-31 72 | 73 | ### Fixed 74 | 75 | - vendor dir was excluded from the release archive 76 | 77 | ## 2.0.2 - 2023-05-17 78 | 79 | Maintenance update 80 | 81 | ### Added 82 | 83 | - Added Nextcloud 27 support 84 | 85 | ## 2.0.1 – 2023-02-22 86 | ### Changed 87 | - implement reference provider to search for topics and posts 88 | - NC 26 compat 89 | - use @nextcloud/vue 7.6.1 90 | 91 | ## 1.0.4 – 2022-08-25 92 | ### Added 93 | - optional navigation link 94 | 95 | ### Changed 96 | - use node 16, bump js libs, adjust to new eslint config 97 | - use material icons 98 | - improve frontend style 99 | 100 | ## 1.0.2 – 2021-11-12 101 | ### Changed 102 | - bump max NC version to 24 103 | - improve release action 104 | - clarify package dependencies 105 | 106 | ## 1.0.1 – 2021-06-28 107 | ### Changed 108 | - stop polling widget content when document is hidden 109 | - bump js libs 110 | - get rid of all deprecated stuff 111 | - bump min NC version to 22 112 | - cleanup backend code 113 | 114 | ## 1.0.0 – 2021-03-19 115 | ### Changed 116 | - bump js libs 117 | 118 | ## 0.0.9 – 2021-02-16 119 | ### Changed 120 | - app certificate 121 | 122 | ## 0.0.8 – 2021-02-12 123 | ### Changed 124 | - bump js libs 125 | - bump max NC version 126 | 127 | ### Fixed 128 | - import nc dialogs style 129 | 130 | ## 0.0.7 – 2021-01-21 131 | ### Fixed 132 | - avoid using invalid Discourse URL 133 | 134 | ## 0.0.6 – 2021-01-01 135 | ### Changed 136 | - bump js libs 137 | 138 | ### Fixed 139 | - browser detection 140 | 141 | ## 0.0.5 – 2020-10-22 142 | ### Added 143 | - automatic releases 144 | 145 | ### Changed 146 | - use Webpack 5 and style lint 147 | 148 | ## 0.0.4 – 2020-10-12 149 | ### Changed 150 | - various small improvements in backend 151 | 152 | ### Fixed 153 | - use browser's real cryto tool to make a nonce 154 | 155 | ## 0.0.3 – 2020-10-02 156 | ### Added 157 | - handle more notification types 158 | - unified search providers for topics and posts 159 | - lots of translations 160 | 161 | ### Changed 162 | - improve setting hints 163 | - improve code quality 164 | - bump libs 165 | 166 | ## 0.0.2 – 2020-09-21 167 | ### Changed 168 | * improve authentication design 169 | * improve widget empty content 170 | 171 | ## 0.0.1 – 2020-09-02 172 | ### Added 173 | * the app 174 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | 5 | # Code of Conduct 6 | 7 | Be openness, as well as friendly and didactic in discussions. 8 | 9 | Treat everybody equally, and value their contributions. 10 | 11 | Decisions are made based on technical merit and consensus. 12 | 13 | Try to follow most principles described here: https://nextcloud.com/code-of-conduct/ 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 5 | # Discourse integration into Nextcloud 6 | 7 | 🗨️ Discourse integration provides a dashboard widget displaying your important notifications 8 | and the ability to find topics and posts with Nextcloud's unified search. 9 | 10 | ## 🔧 Configuration 11 | 12 | ### User settings 13 | 14 | The account configuration happens in the "Connected accounts" user settings section. 15 | 16 | A link to the "Connected accounts" user settings section will be displayed in the widget for users who didn't configure a Discourse account. 17 | 18 | ## 🛠️ State of maintenance 19 | 20 | While there are some things that could be done to further improve this app, the app is currently maintained with **limited effort**. This means: 21 | 22 | * The main functionality works for the majority of the use cases 23 | * We will ensure that the app will continue to work like this for future releases and we will fix bugs that we classify as 'critical' 24 | * We will not invest further development resources ourselves in advancing the app with new features 25 | * We do review and enthusiastically welcome community PR's 26 | 27 | We would be more than excited if you would like to collaborate with us. We will merge pull requests for new features and fixes. We also would love to welcome co-maintainers. 28 | 29 | If you are a customer of Nextcloud and you have a strong business case for any development of this app, we will consider your wishes for our roadmap. Please contact your account manager to talk about the possibilities. 30 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 5 | # Security Policy 6 | 7 | ## Supported Versions 8 | 9 | 10 | | Version | Supported | 11 | |---------|--------------------| 12 | | 2.1.0+ | :white_check_mark: | 13 | | <2.1.0 | :x: | 14 | 15 | 16 | ## Reporting a Vulnerability 17 | 18 | Please report security vulnerabilities by email to one of the maintainers, with Subject containing `integration_discourse` substring. 19 | If there was no reply in 24 hours, then create an Issue, without technical details, to inform about previously sent mail. 20 | -------------------------------------------------------------------------------- /appinfo/info.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | integration_discourse 8 | Discourse integration 9 | Integration of Discourse forum and mailing list management system 10 | 12 | 2.3.0 13 | agpl 14 | Julien Veyssier 15 | Discourse 16 | 17 | https://github.com/nextcloud/integration_discourse 18 | 19 | integration 20 | dashboard 21 | https://github.com/nextcloud/integration_discourse 22 | https://github.com/nextcloud/integration_discourse/issues 23 | https://github.com/nextcloud/integration_discourse/raw/main/img/screenshot1.jpg 24 | 25 | 26 | 27 | 28 | OCA\Discourse\Settings\Personal 29 | OCA\Discourse\Settings\PersonalSection 30 | 31 | 32 | -------------------------------------------------------------------------------- /appinfo/routes.php: -------------------------------------------------------------------------------- 1 | [ 9 | ['name' => 'config#oauthRedirect', 'url' => '/oauth-redirect', 'verb' => 'GET'], 10 | ['name' => 'config#oauthProtocolRedirect', 'url' => '/oauth-protocol-redirect', 'verb' => 'GET'], 11 | ['name' => 'config#setConfig', 'url' => '/config', 'verb' => 'PUT'], 12 | ['name' => 'config#setSensitiveConfig', 'url' => '/sensitive-config', 'verb' => 'PUT'], 13 | ['name' => 'discourseAPI#getDiscourseUrl', 'url' => '/url', 'verb' => 'GET'], 14 | ['name' => 'discourseAPI#getDiscourseUsername', 'url' => '/username', 'verb' => 'GET'], 15 | ['name' => 'discourseAPI#getNotifications', 'url' => '/notifications', 'verb' => 'GET'], 16 | ['name' => 'discourseAPI#getDiscourseAvatar', 'url' => '/avatar', 'verb' => 'GET'], 17 | ] 18 | ]; 19 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "phpseclib/phpseclib": "^2.0.28" 4 | }, 5 | "require-dev": { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /css/dashboard.css: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | .icon-discourse { 6 | background-image: url('../img/app-dark.svg'); 7 | filter: var(--background-invert-if-dark); 8 | } 9 | 10 | body.theme--dark .icon-discourse { 11 | background-image: url('../img/app.svg'); 12 | } 13 | -------------------------------------------------------------------------------- /css/discourse-search.css: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | .icon-discourse-search-fallback { 6 | background-image: url('../img/app-dark.svg'); 7 | filter: var(--background-invert-if-dark); 8 | } 9 | 10 | /* for NC <= 24 */ 11 | body.theme--dark .icon-discourse-search-fallback { 12 | background-image: url('../img/app.svg'); 13 | } 14 | -------------------------------------------------------------------------------- /img/app-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /img/app.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /img/arobase.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 41 | 43 | 44 | 46 | image/svg+xml 47 | 49 | 50 | 51 | 52 | 53 | 58 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /img/badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 28 | 48 | 53 | 54 | -------------------------------------------------------------------------------- /img/chromium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/integration_discourse/66e90a2618fa6892fcaf3d6b80dd8deed4da9ab5/img/chromium.png -------------------------------------------------------------------------------- /img/firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/integration_discourse/66e90a2618fa6892fcaf3d6b80dd8deed4da9ab5/img/firefox.png -------------------------------------------------------------------------------- /img/group.svg: -------------------------------------------------------------------------------- 1 | 2 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 29 | 49 | 55 | 56 | -------------------------------------------------------------------------------- /img/heart.svg: -------------------------------------------------------------------------------- 1 | 2 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 28 | 48 | 53 | 54 | -------------------------------------------------------------------------------- /img/message.svg: -------------------------------------------------------------------------------- 1 | 2 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 28 | 48 | 52 | 60 | 61 | -------------------------------------------------------------------------------- /img/reply.svg: -------------------------------------------------------------------------------- 1 | 2 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 28 | 48 | 53 | 54 | -------------------------------------------------------------------------------- /img/screenshot1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/integration_discourse/66e90a2618fa6892fcaf3d6b80dd8deed4da9ab5/img/screenshot1.jpg -------------------------------------------------------------------------------- /img/solved.svg: -------------------------------------------------------------------------------- 1 | 2 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 28 | 48 | 53 | 54 | -------------------------------------------------------------------------------- /img/sound-border.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /krankerl.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | before_cmds = [ 3 | "composer install --no-dev -a", 4 | "npm ci", 5 | "npm run build", 6 | ] 7 | -------------------------------------------------------------------------------- /l10n/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/integration_discourse/66e90a2618fa6892fcaf3d6b80dd8deed4da9ab5/l10n/.gitkeep -------------------------------------------------------------------------------- /l10n/ast.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "posts" : "artículos", 5 | "Failed to save Discourse options" : "Nun se puen guardar les opciones de Discourse", 6 | "Failed to get Discourse notifications" : "Nun se puen consiguir los avisos de Discourse" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/ast.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "posts" : "artículos", 3 | "Failed to save Discourse options" : "Nun se puen guardar les opciones de Discourse", 4 | "Failed to get Discourse notifications" : "Nun se puen consiguir los avisos de Discourse" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/ca.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Error during authentication exchanges" : "Error durant els intercanvis d'autenticació", 5 | "No API key returned by Discourse" : "No hi ha cap clau de l'API retornada per Discourse", 6 | "Discourse notifications" : "Notificacions de Discourse", 7 | "Discourse posts" : "Missatges de Discourse", 8 | "Discourse topics" : "Temes de Discourse", 9 | "posts" : "publicacions", 10 | "Bad HTTP method" : "Mètode HTTP incorrecte", 11 | "Bad credentials" : "Credencials dolentes", 12 | "Connected accounts" : "Comptes connectats", 13 | "Discourse integration" : "Integració de Discourse", 14 | "Integration of Discourse forum and mailing list management system" : "Integració del Fòrum de Discourse i sistema de gestió de llistes de correu", 15 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "La integració de Discourse proporciona un giny d'escriptori digital que mostra les vostres notificacions importants\ni la possibilitat de trobar temes i entrades amb la cerca unificada de Nextcloud.", 16 | "Successfully connected to Discourse!" : "Connectat amb èxit a Discourse!", 17 | "Discourse API-key could not be obtained:" : "No s'ha pogut obtenir la clau de l'API de Discourse:", 18 | "Nextcloud Discourse integration on {ncUrl}" : "Integració de Nextcloud i Discourse a {ncUrl}", 19 | "Discourse options saved" : "Opcions de Discourse desades.", 20 | "Failed to save Discourse options" : "No s'han pogut desar les opcions de Discourse", 21 | "Failed to save Discourse nonce" : "No s' ha pogut desar el nonce de Discourse", 22 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Si no teniu accés al vostre compte de Discourse, probablement és perquè la seva instància de Discourse no està autoritzada per donar claus d'API a la instància Nextcloud.", 23 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Demaneu a l'administrador de Discourse que afegeixi aquest URI a la llista \"allowed_user_api_auth_redirects\" a la configuració de l'administrador:", 24 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Assegureu-vos que heu acceptat el registre del protocol a la part superior d'aquesta pàgina si voleu autenticar-vos a Discourse.", 25 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "Amb Chrome/Chromium, hauríeu de veure una finestra emergent al navegador de dalt a l'esquerra per autoritzar aquesta pàgina a obrir enllaços \"web+nextclouddiscourse\".", 26 | "If you don't see the popup, you can still click on this icon in the address bar." : "Si no veieu la finestra emergent, encara podeu fer clic en aquesta icona de la barra d'adreces.", 27 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "A continuació, autoritzeu aquesta pàgina per obrir enllaços \"web+nextclouddiscourse\".", 28 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Si encara no aconseguiu registrar el protocol, comproveu la configuració d'aquesta pàgina:", 29 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "Amb Firefox, hauríeu de veure una barra a la part superior d'aquesta pàgina per autoritzar aquesta pàgina a obrir enllaços \"web+nextclouddiscourse\".", 30 | "Enable navigation link" : "Habilita l'enllaç de navegació", 31 | "Discourse instance address" : "Adreça de la instància de Discourse", 32 | "Connect to Discourse" : "Connecta't a Discourse", 33 | "Connected as {username}" : "S'ha connectat com a {username}", 34 | "Disconnect from Discourse" : "Desconnecta de Discourse", 35 | "Enable searching for posts" : "Habilita la cerca de publicacions", 36 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Avis, tot el que escriviu a la barra de cerca s'enviarà a la vostra instància de Discourse.", 37 | "No Discourse account connected" : "No hi ha cap compte de Discourse connectat", 38 | "Error connecting to Discourse" : "S'ha produït un error en connectar-se a Discourse", 39 | "No Discourse notifications!" : "No hi ha notificacions de Discourse!", 40 | "Failed to get Discourse notifications" : "No s'han pogut rebre les notificacions de Discourse." 41 | }, 42 | "nplurals=2; plural=(n != 1);"); 43 | -------------------------------------------------------------------------------- /l10n/ca.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error during authentication exchanges" : "Error durant els intercanvis d'autenticació", 3 | "No API key returned by Discourse" : "No hi ha cap clau de l'API retornada per Discourse", 4 | "Discourse notifications" : "Notificacions de Discourse", 5 | "Discourse posts" : "Missatges de Discourse", 6 | "Discourse topics" : "Temes de Discourse", 7 | "posts" : "publicacions", 8 | "Bad HTTP method" : "Mètode HTTP incorrecte", 9 | "Bad credentials" : "Credencials dolentes", 10 | "Connected accounts" : "Comptes connectats", 11 | "Discourse integration" : "Integració de Discourse", 12 | "Integration of Discourse forum and mailing list management system" : "Integració del Fòrum de Discourse i sistema de gestió de llistes de correu", 13 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "La integració de Discourse proporciona un giny d'escriptori digital que mostra les vostres notificacions importants\ni la possibilitat de trobar temes i entrades amb la cerca unificada de Nextcloud.", 14 | "Successfully connected to Discourse!" : "Connectat amb èxit a Discourse!", 15 | "Discourse API-key could not be obtained:" : "No s'ha pogut obtenir la clau de l'API de Discourse:", 16 | "Nextcloud Discourse integration on {ncUrl}" : "Integració de Nextcloud i Discourse a {ncUrl}", 17 | "Discourse options saved" : "Opcions de Discourse desades.", 18 | "Failed to save Discourse options" : "No s'han pogut desar les opcions de Discourse", 19 | "Failed to save Discourse nonce" : "No s' ha pogut desar el nonce de Discourse", 20 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Si no teniu accés al vostre compte de Discourse, probablement és perquè la seva instància de Discourse no està autoritzada per donar claus d'API a la instància Nextcloud.", 21 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Demaneu a l'administrador de Discourse que afegeixi aquest URI a la llista \"allowed_user_api_auth_redirects\" a la configuració de l'administrador:", 22 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Assegureu-vos que heu acceptat el registre del protocol a la part superior d'aquesta pàgina si voleu autenticar-vos a Discourse.", 23 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "Amb Chrome/Chromium, hauríeu de veure una finestra emergent al navegador de dalt a l'esquerra per autoritzar aquesta pàgina a obrir enllaços \"web+nextclouddiscourse\".", 24 | "If you don't see the popup, you can still click on this icon in the address bar." : "Si no veieu la finestra emergent, encara podeu fer clic en aquesta icona de la barra d'adreces.", 25 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "A continuació, autoritzeu aquesta pàgina per obrir enllaços \"web+nextclouddiscourse\".", 26 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Si encara no aconseguiu registrar el protocol, comproveu la configuració d'aquesta pàgina:", 27 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "Amb Firefox, hauríeu de veure una barra a la part superior d'aquesta pàgina per autoritzar aquesta pàgina a obrir enllaços \"web+nextclouddiscourse\".", 28 | "Enable navigation link" : "Habilita l'enllaç de navegació", 29 | "Discourse instance address" : "Adreça de la instància de Discourse", 30 | "Connect to Discourse" : "Connecta't a Discourse", 31 | "Connected as {username}" : "S'ha connectat com a {username}", 32 | "Disconnect from Discourse" : "Desconnecta de Discourse", 33 | "Enable searching for posts" : "Habilita la cerca de publicacions", 34 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Avis, tot el que escriviu a la barra de cerca s'enviarà a la vostra instància de Discourse.", 35 | "No Discourse account connected" : "No hi ha cap compte de Discourse connectat", 36 | "Error connecting to Discourse" : "S'ha produït un error en connectar-se a Discourse", 37 | "No Discourse notifications!" : "No hi ha notificacions de Discourse!", 38 | "Failed to get Discourse notifications" : "No s'han pogut rebre les notificacions de Discourse." 39 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 40 | } -------------------------------------------------------------------------------- /l10n/da.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Bad HTTP method" : "Dårlig HTTP metode", 5 | "Bad credentials" : "Forkerte legitimationsoplysninger", 6 | "Connected accounts" : "Forbundne konti", 7 | "Enable navigation link" : "Aktiver navigationslink" 8 | }, 9 | "nplurals=2; plural=(n != 1);"); 10 | -------------------------------------------------------------------------------- /l10n/da.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Bad HTTP method" : "Dårlig HTTP metode", 3 | "Bad credentials" : "Forkerte legitimationsoplysninger", 4 | "Connected accounts" : "Forbundne konti", 5 | "Enable navigation link" : "Aktiver navigationslink" 6 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 7 | } -------------------------------------------------------------------------------- /l10n/et_EE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Bad HTTP method" : "Vigane HTTP-meetod", 5 | "Bad credentials" : "Vale kasutajanimi, salasõna või tunnusluba", 6 | "Connected accounts" : "Ühendatud kasutajakontod", 7 | "Connected as {username}" : "Ühendatud kui {username}" 8 | }, 9 | "nplurals=2; plural=(n != 1);"); 10 | -------------------------------------------------------------------------------- /l10n/et_EE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Bad HTTP method" : "Vigane HTTP-meetod", 3 | "Bad credentials" : "Vale kasutajanimi, salasõna või tunnusluba", 4 | "Connected accounts" : "Ühendatud kasutajakontod", 5 | "Connected as {username}" : "Ühendatud kui {username}" 6 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 7 | } -------------------------------------------------------------------------------- /l10n/eu.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Discourse" : "Discourse", 5 | "Error during authentication exchanges" : "Errorea autentifikazio trukeak egitean", 6 | "No API key returned by Discourse" : "Discourse-k ez du API gakorik itzuli", 7 | "Discourse notifications" : "Discourse jakinarazpenak", 8 | "Discourse topics and posts" : "Diskurtso-gaiak eta mezuak", 9 | "Discourse posts" : "Discourse argitalpenak", 10 | "Discourse topics" : "Discourse gaiak", 11 | "posts" : "mezuak", 12 | "Bad HTTP method" : "HTTP metodo okerra", 13 | "Bad credentials" : "Kredentzial okerrak", 14 | "Connected accounts" : "Konektaturiko kontuak", 15 | "Discourse integration" : "Discourse integrazioa", 16 | "Integration of Discourse forum and mailing list management system" : "Discourse forum eta posta zerrendak kudeatzeko sistemaren integrazioa", 17 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse-ren integrazioak zure jakinarazpen garrantzitsuak erakusten dituen panel-trepeta eskaintzen du\n eta gaiak eta mezuak aurkitzeko aukera Nextcloud-en bilaketa bateratuarekin.", 18 | "Successfully connected to Discourse!" : "Discourse-ra behar bezala konektatu da!", 19 | "Discourse API-key could not be obtained:" : "Ezin izan da Discourse-ren API gakoa eskuratu:", 20 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse integrazioa {ncUrl} -n", 21 | "Discourse URL is invalid" : "Discourse URLa baliogabea da", 22 | "Discourse options saved" : "Discourse aukerak ondo gorde dira", 23 | "Failed to save Discourse options" : "Discourse aukerak gordetzeak huts egin du", 24 | "Failed to save Discourse nonce" : "Discourse nonce gordetzeak huts egin du", 25 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Zure Discourse konturako sarbiderik lortzen ez baduzu, ziur aski zure Discourse instantziak ez du baimenik API gakoak emateko zure Nextcloud instantziari.", 26 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Eskatu Discourse administratzaileari URI hau gehitzeko \"allowed_user_api_auth_redirects\" zerrendan administratzaile ezarpenetan:", 27 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Ziurtatu protokoloaren erregistroa onartu duzula orrialde honen goiko aldean, Discourse-n autentifikatu nahi baduzu.", 28 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "Chrome/Chromium-ekin, laster-leiho bat ikusi beharko zenuke nabigatzailearen goiko-ezkerreko aldean, orri honi \"web+nextclouddiscourse\" estekak irekitzeko baimena emateko.", 29 | "If you don't see the popup, you can still click on this icon in the address bar." : "Popup-a ikusten ez baduzu, ikono honetan klik egin dezakezu helbide-barran.", 30 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Ondoren, baimendu orri honi \"web+nextclouddiscourse\" estekak irekitzeko.", 31 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Protokoloa erregistratzen lortzen ez baduzu, egiaztatu ezarpenak orri honetan:", 32 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "Firefox-ekin, orri honen gainean barra bat ikusi beharko zenuke orrialde honi \"web+nextclouddiscourse\" estekak irekitzeko baimena emateko.", 33 | "Enable navigation link" : "Gaitu nabigazio esteka", 34 | "Discourse instance address" : "Discourse instantzia helbidea", 35 | "Connect to Discourse" : "Konektatu Discoursera", 36 | "Connected as {username}" : "{username} gisa konektatuta", 37 | "Disconnect from Discourse" : "Deskonektatu Discoursetik", 38 | "Enable unified search for topics" : "Gaitu bilaketa bateratua gaientzako", 39 | "Enable searching for posts" : "Gaitu argitalpenak bilatzea", 40 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Abisua: bilaketa-barran idazten duzun guztia zure Discourse instantziara bidaliko da.", 41 | "No Discourse account connected" : "Ez dago Discourse konturik konektatuta", 42 | "Error connecting to Discourse" : "Errorea Discourse-ra konektatzean", 43 | "No Discourse notifications!" : "Ez dago Discourse jakinarazpenik!", 44 | "Failed to get Discourse notifications" : "Ezin izan da Discourse-ren jakinarazpenik lortu", 45 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} elementuak zure administratzaileen sarrera-ontzian ","{nb} elementuak zure administratzaileen sarrera-ontzian"], 46 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} elementuak zure moderatzaileen sarrera-ontzian","{nb} elementuak zure moderatzaileen sarrera-ontzian"] 47 | }, 48 | "nplurals=2; plural=(n != 1);"); 49 | -------------------------------------------------------------------------------- /l10n/eu.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Discourse" : "Discourse", 3 | "Error during authentication exchanges" : "Errorea autentifikazio trukeak egitean", 4 | "No API key returned by Discourse" : "Discourse-k ez du API gakorik itzuli", 5 | "Discourse notifications" : "Discourse jakinarazpenak", 6 | "Discourse topics and posts" : "Diskurtso-gaiak eta mezuak", 7 | "Discourse posts" : "Discourse argitalpenak", 8 | "Discourse topics" : "Discourse gaiak", 9 | "posts" : "mezuak", 10 | "Bad HTTP method" : "HTTP metodo okerra", 11 | "Bad credentials" : "Kredentzial okerrak", 12 | "Connected accounts" : "Konektaturiko kontuak", 13 | "Discourse integration" : "Discourse integrazioa", 14 | "Integration of Discourse forum and mailing list management system" : "Discourse forum eta posta zerrendak kudeatzeko sistemaren integrazioa", 15 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse-ren integrazioak zure jakinarazpen garrantzitsuak erakusten dituen panel-trepeta eskaintzen du\n eta gaiak eta mezuak aurkitzeko aukera Nextcloud-en bilaketa bateratuarekin.", 16 | "Successfully connected to Discourse!" : "Discourse-ra behar bezala konektatu da!", 17 | "Discourse API-key could not be obtained:" : "Ezin izan da Discourse-ren API gakoa eskuratu:", 18 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse integrazioa {ncUrl} -n", 19 | "Discourse URL is invalid" : "Discourse URLa baliogabea da", 20 | "Discourse options saved" : "Discourse aukerak ondo gorde dira", 21 | "Failed to save Discourse options" : "Discourse aukerak gordetzeak huts egin du", 22 | "Failed to save Discourse nonce" : "Discourse nonce gordetzeak huts egin du", 23 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Zure Discourse konturako sarbiderik lortzen ez baduzu, ziur aski zure Discourse instantziak ez du baimenik API gakoak emateko zure Nextcloud instantziari.", 24 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Eskatu Discourse administratzaileari URI hau gehitzeko \"allowed_user_api_auth_redirects\" zerrendan administratzaile ezarpenetan:", 25 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Ziurtatu protokoloaren erregistroa onartu duzula orrialde honen goiko aldean, Discourse-n autentifikatu nahi baduzu.", 26 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "Chrome/Chromium-ekin, laster-leiho bat ikusi beharko zenuke nabigatzailearen goiko-ezkerreko aldean, orri honi \"web+nextclouddiscourse\" estekak irekitzeko baimena emateko.", 27 | "If you don't see the popup, you can still click on this icon in the address bar." : "Popup-a ikusten ez baduzu, ikono honetan klik egin dezakezu helbide-barran.", 28 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Ondoren, baimendu orri honi \"web+nextclouddiscourse\" estekak irekitzeko.", 29 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Protokoloa erregistratzen lortzen ez baduzu, egiaztatu ezarpenak orri honetan:", 30 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "Firefox-ekin, orri honen gainean barra bat ikusi beharko zenuke orrialde honi \"web+nextclouddiscourse\" estekak irekitzeko baimena emateko.", 31 | "Enable navigation link" : "Gaitu nabigazio esteka", 32 | "Discourse instance address" : "Discourse instantzia helbidea", 33 | "Connect to Discourse" : "Konektatu Discoursera", 34 | "Connected as {username}" : "{username} gisa konektatuta", 35 | "Disconnect from Discourse" : "Deskonektatu Discoursetik", 36 | "Enable unified search for topics" : "Gaitu bilaketa bateratua gaientzako", 37 | "Enable searching for posts" : "Gaitu argitalpenak bilatzea", 38 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Abisua: bilaketa-barran idazten duzun guztia zure Discourse instantziara bidaliko da.", 39 | "No Discourse account connected" : "Ez dago Discourse konturik konektatuta", 40 | "Error connecting to Discourse" : "Errorea Discourse-ra konektatzean", 41 | "No Discourse notifications!" : "Ez dago Discourse jakinarazpenik!", 42 | "Failed to get Discourse notifications" : "Ezin izan da Discourse-ren jakinarazpenik lortu", 43 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} elementuak zure administratzaileen sarrera-ontzian ","{nb} elementuak zure administratzaileen sarrera-ontzian"], 44 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} elementuak zure moderatzaileen sarrera-ontzian","{nb} elementuak zure moderatzaileen sarrera-ontzian"] 45 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 46 | } -------------------------------------------------------------------------------- /l10n/fa.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Discourse" : "Discourse", 5 | "Error during authentication exchanges" : "Error during authentication exchanges", 6 | "No API key returned by Discourse" : "No API key returned by Discourse", 7 | "Discourse notifications" : "Discourse notifications", 8 | "Discourse topics and posts" : "Discourse topics and posts", 9 | "Discourse posts" : "Discourse posts", 10 | "Discourse topics" : "Discourse topics", 11 | "posts" : "پست ها", 12 | "Bad HTTP method" : "روش HTTP بد", 13 | "Bad credentials" : "اعتبارنامه بد", 14 | "Connected accounts" : "حساب‌های متصل", 15 | "Discourse integration" : "Discourse integration", 16 | "Integration of Discourse forum and mailing list management system" : "Integration of Discourse forum and mailing list management system", 17 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search.", 18 | "Successfully connected to Discourse!" : "Successfully connected to Discourse!", 19 | "Discourse API-key could not be obtained:" : "Discourse API-key could not be obtained:", 20 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse integration on {ncUrl}", 21 | "Discourse URL is invalid" : "Discourse URL is invalid", 22 | "Discourse options saved" : "Discourse options saved", 23 | "Failed to save Discourse options" : "Failed to save Discourse options", 24 | "Failed to save Discourse nonce" : "Failed to save Discourse nonce", 25 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance.", 26 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:", 27 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse.", 28 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links.", 29 | "If you don't see the popup, you can still click on this icon in the address bar." : "If you don't see the popup, you can still click on this icon in the address bar.", 30 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Then authorize this page to open \"web+nextclouddiscourse\" links.", 31 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "If you still don't manage to get the protocol registered, check your settings on this page:", 32 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links.", 33 | "Enable navigation link" : "Enable navigation link", 34 | "Discourse instance address" : "Discourse instance address", 35 | "Connect to Discourse" : "Connect to Discourse", 36 | "Connected as {username}" : "متصل به عنوان {username}", 37 | "Disconnect from Discourse" : "Disconnect from Discourse", 38 | "Enable unified search for topics" : "Enable unified search for topics", 39 | "Enable searching for posts" : "Enable searching for posts", 40 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Warning, everything you type in the search bar will be sent to your Discourse instance.", 41 | "No Discourse account connected" : "No Discourse account connected", 42 | "Error connecting to Discourse" : "Error connecting to Discourse", 43 | "No Discourse notifications!" : "No Discourse notifications!", 44 | "Failed to get Discourse notifications" : "Failed to get Discourse notifications", 45 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} item in your admins inbox","{nb} items in your admins inbox"], 46 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} item in your moderators inbox","{nb} items in your moderators inbox"] 47 | }, 48 | "nplurals=2; plural=(n > 1);"); 49 | -------------------------------------------------------------------------------- /l10n/fa.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Discourse" : "Discourse", 3 | "Error during authentication exchanges" : "Error during authentication exchanges", 4 | "No API key returned by Discourse" : "No API key returned by Discourse", 5 | "Discourse notifications" : "Discourse notifications", 6 | "Discourse topics and posts" : "Discourse topics and posts", 7 | "Discourse posts" : "Discourse posts", 8 | "Discourse topics" : "Discourse topics", 9 | "posts" : "پست ها", 10 | "Bad HTTP method" : "روش HTTP بد", 11 | "Bad credentials" : "اعتبارنامه بد", 12 | "Connected accounts" : "حساب‌های متصل", 13 | "Discourse integration" : "Discourse integration", 14 | "Integration of Discourse forum and mailing list management system" : "Integration of Discourse forum and mailing list management system", 15 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search.", 16 | "Successfully connected to Discourse!" : "Successfully connected to Discourse!", 17 | "Discourse API-key could not be obtained:" : "Discourse API-key could not be obtained:", 18 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse integration on {ncUrl}", 19 | "Discourse URL is invalid" : "Discourse URL is invalid", 20 | "Discourse options saved" : "Discourse options saved", 21 | "Failed to save Discourse options" : "Failed to save Discourse options", 22 | "Failed to save Discourse nonce" : "Failed to save Discourse nonce", 23 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance.", 24 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:", 25 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse.", 26 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links.", 27 | "If you don't see the popup, you can still click on this icon in the address bar." : "If you don't see the popup, you can still click on this icon in the address bar.", 28 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Then authorize this page to open \"web+nextclouddiscourse\" links.", 29 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "If you still don't manage to get the protocol registered, check your settings on this page:", 30 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links.", 31 | "Enable navigation link" : "Enable navigation link", 32 | "Discourse instance address" : "Discourse instance address", 33 | "Connect to Discourse" : "Connect to Discourse", 34 | "Connected as {username}" : "متصل به عنوان {username}", 35 | "Disconnect from Discourse" : "Disconnect from Discourse", 36 | "Enable unified search for topics" : "Enable unified search for topics", 37 | "Enable searching for posts" : "Enable searching for posts", 38 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Warning, everything you type in the search bar will be sent to your Discourse instance.", 39 | "No Discourse account connected" : "No Discourse account connected", 40 | "Error connecting to Discourse" : "Error connecting to Discourse", 41 | "No Discourse notifications!" : "No Discourse notifications!", 42 | "Failed to get Discourse notifications" : "Failed to get Discourse notifications", 43 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} item in your admins inbox","{nb} items in your admins inbox"], 44 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} item in your moderators inbox","{nb} items in your moderators inbox"] 45 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 46 | } -------------------------------------------------------------------------------- /l10n/fi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Discourse notifications" : "Discourse-ilmoitukset", 5 | "posts" : "julkaisut", 6 | "Bad HTTP method" : "Virheellinen HTTP-metodi", 7 | "Bad credentials" : "Virheelliset kirjautumistiedot", 8 | "Connected accounts" : "Yhdistetyt tilit", 9 | "Discourse integration" : "Discourse-integraatio", 10 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse-integraatio tarjoaa sekä konsoliin pienoissovelluksen, joka näyttää tärkeät ilmoituksesi,\n että mahdollisuuden etsiä aiheita ja postauksia Nextcloudin yhtenäisestä hausta.", 11 | "Successfully connected to Discourse!" : "Yhdistetty Discourseen!", 12 | "Enable navigation link" : "Näytä navigointipalkissa", 13 | "Discourse instance address" : "Discourse-instanssin osoite", 14 | "Connect to Discourse" : "Yhdistä Discourseen", 15 | "Connected as {username}" : "Yhdistetty käyttäjänä {username}", 16 | "Disconnect from Discourse" : "Katkaise yhteys Discourseen", 17 | "No Discourse account connected" : "Discourse-tiliä ei ole yhdistetty", 18 | "Error connecting to Discourse" : "Virhe yhdistäessä Discourseen", 19 | "No Discourse notifications!" : "Ei Discourse-ilmoituksia!" 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/fi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Discourse notifications" : "Discourse-ilmoitukset", 3 | "posts" : "julkaisut", 4 | "Bad HTTP method" : "Virheellinen HTTP-metodi", 5 | "Bad credentials" : "Virheelliset kirjautumistiedot", 6 | "Connected accounts" : "Yhdistetyt tilit", 7 | "Discourse integration" : "Discourse-integraatio", 8 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse-integraatio tarjoaa sekä konsoliin pienoissovelluksen, joka näyttää tärkeät ilmoituksesi,\n että mahdollisuuden etsiä aiheita ja postauksia Nextcloudin yhtenäisestä hausta.", 9 | "Successfully connected to Discourse!" : "Yhdistetty Discourseen!", 10 | "Enable navigation link" : "Näytä navigointipalkissa", 11 | "Discourse instance address" : "Discourse-instanssin osoite", 12 | "Connect to Discourse" : "Yhdistä Discourseen", 13 | "Connected as {username}" : "Yhdistetty käyttäjänä {username}", 14 | "Disconnect from Discourse" : "Katkaise yhteys Discourseen", 15 | "No Discourse account connected" : "Discourse-tiliä ei ole yhdistetty", 16 | "Error connecting to Discourse" : "Virhe yhdistäessä Discourseen", 17 | "No Discourse notifications!" : "Ei Discourse-ilmoituksia!" 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/he.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Error during authentication exchanges" : "שגיאה במהלך חילופי אימות", 5 | "No API key returned by Discourse" : "אף מפתח API לא הוחזר על ידי Discourse", 6 | "Discourse notifications" : "הודעות Discourse", 7 | "Discourse posts" : "פוסטים ב-Discourse", 8 | "Discourse topics" : "נושאי Discourse", 9 | "posts" : "פוסטים", 10 | "Bad HTTP method" : "שגיאה במתודת HTTP", 11 | "Bad credentials" : "פרטי גישה שגויים", 12 | "Connected accounts" : "חשבונות מחוברים", 13 | "Discourse integration" : "שילוב Discourse", 14 | "Integration of Discourse forum and mailing list management system" : "שילוב פורום Discourse ומערכת ניהול רשימת תפוצה", 15 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "שילוב Discourse מספק יישומון לוח מחוונים המציג את ההתראות החשובות שלך ואת היכולת למצוא נושאים ופוסטים בעזרת החיפוש המאוחד של Nextcloud.", 16 | "Successfully connected to Discourse!" : "התחבר בהצלחה ל-Discourse!", 17 | "Discourse API-key could not be obtained:" : "לא ניתן היה להשיג מפתח API ל-Discourse:", 18 | "Nextcloud Discourse integration on {ncUrl}" : "שילוב Nextcloud Discourse ב- {ncUrl}", 19 | "Discourse options saved" : "נשמרו אפשרויות ה-Discourse", 20 | "Failed to save Discourse options" : "שמירת אפשרויות ה-Discourse נכשלה", 21 | "Failed to save Discourse nonce" : "שמירת nonce של Discourse נכשלה", 22 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "אם אינך מצליח לקבל גישה לחשבון ה-Discourse שלך, זה כנראה בגלל שמופע ה-Discourse שלך אינו מורשה לתת מפתחות API למופע ה-Nextcloud שלך.", 23 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "בקש ממנהל ה-Discourse להוסיף את ה- URI הזה לרשימת \"allowed_user_api_auth_redirects\" בהגדרות ה-admin:", 24 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "ודא שקיבלת את רישום הפרוטוקול בראש העמוד הזה אם ברצונך לאמת ל-Discourse.", 25 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "עם Chrome/Chromium, אתה אמור לראות חלון קופץ בצד שמאל למעלה בדפדפן כדי לאשר לדף זה לפתוח קישורי \"web + nextclouddiscourse\".", 26 | "If you don't see the popup, you can still click on this icon in the address bar." : "אם אינך רואה את החלון הקופץ, תוכל עדיין ללחוץ על סמל זה בשורת הכתובת.", 27 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "ואז אשר לדף זה לפתוח קישורי \"web + nextclouddiscourse\".", 28 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "אם אתה עדיין לא מצליח לרשום את הפרוטוקול, בדוק את ההגדרות שלך בדף זה:", 29 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "עם Firefox, אתה אמור לראות סרגל בראש העמוד הזה כדי לאשר לדף זה לפתוח קישורי \"web + nextclouddiscourse\".", 30 | "Enable navigation link" : "הפעלת קישור ניווט", 31 | "Discourse instance address" : "כתובת מופע ה-Discourse", 32 | "Connect to Discourse" : "התחבר ל-Discourse", 33 | "Connected as {username}" : "מחובר כ- {username}", 34 | "Disconnect from Discourse" : "התנתק מ-Discourse", 35 | "Enable searching for posts" : "אפשר חיפוש אחר פוסטים", 36 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "אזהרה: כל מה שתקליד בסרגל החיפוש יישלח למופע ה-Discourse שלך.", 37 | "No Discourse account connected" : "אין חשבון Discourse מחובר", 38 | "Error connecting to Discourse" : "שגיאה בהתחברות ל-Discourse", 39 | "No Discourse notifications!" : "אין הודעות Discourse!", 40 | "Failed to get Discourse notifications" : "קבלת התראות Discourse נכשלה", 41 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} פריט בתיבת הדואר הנכנס של המנהלים שלך","{nb} פריטים בתיבת הדואר הנכנס של המנהלים שלך","{nb} פריטים בתיבת הדואר הנכנס של המנהלים שלך","{nb} פריטים בתיבת הדואר הנכנס של המנהלים שלך"], 42 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} פריט בתיבת הדואר הנכנס של המנחים שלך","{nb} פריטים בתיבת הדואר הנכנס של המנחים שלך","{nb} פריטים בתיבת הדואר הנכנס של המנחים שלך"] 43 | }, 44 | "nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); 45 | -------------------------------------------------------------------------------- /l10n/he.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error during authentication exchanges" : "שגיאה במהלך חילופי אימות", 3 | "No API key returned by Discourse" : "אף מפתח API לא הוחזר על ידי Discourse", 4 | "Discourse notifications" : "הודעות Discourse", 5 | "Discourse posts" : "פוסטים ב-Discourse", 6 | "Discourse topics" : "נושאי Discourse", 7 | "posts" : "פוסטים", 8 | "Bad HTTP method" : "שגיאה במתודת HTTP", 9 | "Bad credentials" : "פרטי גישה שגויים", 10 | "Connected accounts" : "חשבונות מחוברים", 11 | "Discourse integration" : "שילוב Discourse", 12 | "Integration of Discourse forum and mailing list management system" : "שילוב פורום Discourse ומערכת ניהול רשימת תפוצה", 13 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "שילוב Discourse מספק יישומון לוח מחוונים המציג את ההתראות החשובות שלך ואת היכולת למצוא נושאים ופוסטים בעזרת החיפוש המאוחד של Nextcloud.", 14 | "Successfully connected to Discourse!" : "התחבר בהצלחה ל-Discourse!", 15 | "Discourse API-key could not be obtained:" : "לא ניתן היה להשיג מפתח API ל-Discourse:", 16 | "Nextcloud Discourse integration on {ncUrl}" : "שילוב Nextcloud Discourse ב- {ncUrl}", 17 | "Discourse options saved" : "נשמרו אפשרויות ה-Discourse", 18 | "Failed to save Discourse options" : "שמירת אפשרויות ה-Discourse נכשלה", 19 | "Failed to save Discourse nonce" : "שמירת nonce של Discourse נכשלה", 20 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "אם אינך מצליח לקבל גישה לחשבון ה-Discourse שלך, זה כנראה בגלל שמופע ה-Discourse שלך אינו מורשה לתת מפתחות API למופע ה-Nextcloud שלך.", 21 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "בקש ממנהל ה-Discourse להוסיף את ה- URI הזה לרשימת \"allowed_user_api_auth_redirects\" בהגדרות ה-admin:", 22 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "ודא שקיבלת את רישום הפרוטוקול בראש העמוד הזה אם ברצונך לאמת ל-Discourse.", 23 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "עם Chrome/Chromium, אתה אמור לראות חלון קופץ בצד שמאל למעלה בדפדפן כדי לאשר לדף זה לפתוח קישורי \"web + nextclouddiscourse\".", 24 | "If you don't see the popup, you can still click on this icon in the address bar." : "אם אינך רואה את החלון הקופץ, תוכל עדיין ללחוץ על סמל זה בשורת הכתובת.", 25 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "ואז אשר לדף זה לפתוח קישורי \"web + nextclouddiscourse\".", 26 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "אם אתה עדיין לא מצליח לרשום את הפרוטוקול, בדוק את ההגדרות שלך בדף זה:", 27 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "עם Firefox, אתה אמור לראות סרגל בראש העמוד הזה כדי לאשר לדף זה לפתוח קישורי \"web + nextclouddiscourse\".", 28 | "Enable navigation link" : "הפעלת קישור ניווט", 29 | "Discourse instance address" : "כתובת מופע ה-Discourse", 30 | "Connect to Discourse" : "התחבר ל-Discourse", 31 | "Connected as {username}" : "מחובר כ- {username}", 32 | "Disconnect from Discourse" : "התנתק מ-Discourse", 33 | "Enable searching for posts" : "אפשר חיפוש אחר פוסטים", 34 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "אזהרה: כל מה שתקליד בסרגל החיפוש יישלח למופע ה-Discourse שלך.", 35 | "No Discourse account connected" : "אין חשבון Discourse מחובר", 36 | "Error connecting to Discourse" : "שגיאה בהתחברות ל-Discourse", 37 | "No Discourse notifications!" : "אין הודעות Discourse!", 38 | "Failed to get Discourse notifications" : "קבלת התראות Discourse נכשלה", 39 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} פריט בתיבת הדואר הנכנס של המנהלים שלך","{nb} פריטים בתיבת הדואר הנכנס של המנהלים שלך","{nb} פריטים בתיבת הדואר הנכנס של המנהלים שלך","{nb} פריטים בתיבת הדואר הנכנס של המנהלים שלך"], 40 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} פריט בתיבת הדואר הנכנס של המנחים שלך","{nb} פריטים בתיבת הדואר הנכנס של המנחים שלך","{nb} פריטים בתיבת הדואר הנכנס של המנחים שלך"] 41 | },"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" 42 | } -------------------------------------------------------------------------------- /l10n/hr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Error during authentication exchanges" : "Pogreška tijekom razmjena radi autentifikacije", 5 | "No API key returned by Discourse" : "Discourse nije vratio API ključ", 6 | "Discourse notifications" : "Discourse obavijesti", 7 | "Discourse posts" : "Discourse objave", 8 | "Discourse topics" : "Discourse teme", 9 | "posts" : "objave", 10 | "Bad HTTP method" : "Pogrešna metoda HTTP-a", 11 | "Bad credentials" : "Pogrešne vjerodajnice", 12 | "Connected accounts" : "Povezani računi", 13 | "Discourse integration" : "Discourse integracija", 14 | "Integration of Discourse forum and mailing list management system" : "Integracija foruma i sustava za upravljanje popisima za slanje e-pošte Discourse", 15 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Integracija s platformom Discourse omogućuje stavljanje widgeta na nadzornu ploču koji prikazuje važne obavijesti\n i služi za traženje tema i postova putem objedinjenog pretraživanja u Nextcloudu.", 16 | "Successfully connected to Discourse!" : "Uspješno povezivanje s Discourseom!", 17 | "Discourse API-key could not be obtained:" : "Nije moguće dohvatiti API-ključ Discoursea:", 18 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse integracija na {ncUrl}", 19 | "Discourse URL is invalid" : "URL Discoursea je nevažeći", 20 | "Discourse options saved" : "Spremljene postavke Discoursea", 21 | "Failed to save Discourse options" : "Spremanje postavki Discoursea nije uspjelo", 22 | "Failed to save Discourse nonce" : "Nije uspjelo spremanje Discourse nonce", 23 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Ako ne uspijete pristupiti svom računu za Discourse, to je vjerojatno stoga što vaša instanca Discoursea nije ovlaštena za davanje API ključeva vašoj instanci Nextclouda.", 24 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Zatražite administratora sustava Discourse da doda ovaj URI na popis „allowed_user_api_auth_redirects“ u postavkama administratora:", 25 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Provjerite jeste li prihvatili registraciju protokola na vrhu ove stranice ako želite izvesti autentifikaciju na Discourse.", 26 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "U pregledniku Chrome/Chromium biste trebali vidjeti skočni prozor s gornje lijeve strane preglednika putem kojeg možete ovlastiti ovu stranicu da otvara poveznice „web+nextclouddiscourse“.", 27 | "If you don't see the popup, you can still click on this icon in the address bar." : "Ako ne vidite skočni prozor, možete kliknuti na ovu ikonu u adresnoj traci.", 28 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Zatim ovlastite stranicu da otvara poveznice „web+nextclouddiscourse“.", 29 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Ako i dalje ne uspijevate registrirati protokol, provjerite postavke na ovoj stranici:", 30 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "U pregledniku Firefox biste trebali vidjeti traku pri vrhu ove stranice putem koje možete ovlastiti ovu stranicu da otvara poveznice „web+nextclouddiscourse“.", 31 | "Enable navigation link" : "Omogući navigacijsku poveznicu", 32 | "Discourse instance address" : "Adresa instance Discoursea", 33 | "Connect to Discourse" : "Poveži se s Discourseom", 34 | "Connected as {username}" : "Povezan kao {username}", 35 | "Disconnect from Discourse" : "Odspoji se s Discoursea", 36 | "Enable searching for posts" : "Omogući traženje objava", 37 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Upozorenje, sve što upišete u traku za pretraživanje bit će poslano vašoj instanci Discoursea.", 38 | "No Discourse account connected" : "Nema povezanih Discourse računa", 39 | "Error connecting to Discourse" : "Pogreška pri povezivanju s Discourseom", 40 | "No Discourse notifications!" : "Nema Discourse obavijesti!", 41 | "Failed to get Discourse notifications" : "Dohvaćanje Discourse obavijesti nije uspjelo", 42 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} poruka u dolaznom sandučiću administratora","{nb} poruke u dolaznom sandučiću administratora","{nb} poruka u dolaznom sandučiću administratora"], 43 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} poruka u dolaznom sandučiću moderatora","{nb} poruke u dolaznom sandučiću moderatora","{nb} poruka u dolaznom sandučiću moderatora"] 44 | }, 45 | "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); 46 | -------------------------------------------------------------------------------- /l10n/hr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error during authentication exchanges" : "Pogreška tijekom razmjena radi autentifikacije", 3 | "No API key returned by Discourse" : "Discourse nije vratio API ključ", 4 | "Discourse notifications" : "Discourse obavijesti", 5 | "Discourse posts" : "Discourse objave", 6 | "Discourse topics" : "Discourse teme", 7 | "posts" : "objave", 8 | "Bad HTTP method" : "Pogrešna metoda HTTP-a", 9 | "Bad credentials" : "Pogrešne vjerodajnice", 10 | "Connected accounts" : "Povezani računi", 11 | "Discourse integration" : "Discourse integracija", 12 | "Integration of Discourse forum and mailing list management system" : "Integracija foruma i sustava za upravljanje popisima za slanje e-pošte Discourse", 13 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Integracija s platformom Discourse omogućuje stavljanje widgeta na nadzornu ploču koji prikazuje važne obavijesti\n i služi za traženje tema i postova putem objedinjenog pretraživanja u Nextcloudu.", 14 | "Successfully connected to Discourse!" : "Uspješno povezivanje s Discourseom!", 15 | "Discourse API-key could not be obtained:" : "Nije moguće dohvatiti API-ključ Discoursea:", 16 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse integracija na {ncUrl}", 17 | "Discourse URL is invalid" : "URL Discoursea je nevažeći", 18 | "Discourse options saved" : "Spremljene postavke Discoursea", 19 | "Failed to save Discourse options" : "Spremanje postavki Discoursea nije uspjelo", 20 | "Failed to save Discourse nonce" : "Nije uspjelo spremanje Discourse nonce", 21 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Ako ne uspijete pristupiti svom računu za Discourse, to je vjerojatno stoga što vaša instanca Discoursea nije ovlaštena za davanje API ključeva vašoj instanci Nextclouda.", 22 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Zatražite administratora sustava Discourse da doda ovaj URI na popis „allowed_user_api_auth_redirects“ u postavkama administratora:", 23 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Provjerite jeste li prihvatili registraciju protokola na vrhu ove stranice ako želite izvesti autentifikaciju na Discourse.", 24 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "U pregledniku Chrome/Chromium biste trebali vidjeti skočni prozor s gornje lijeve strane preglednika putem kojeg možete ovlastiti ovu stranicu da otvara poveznice „web+nextclouddiscourse“.", 25 | "If you don't see the popup, you can still click on this icon in the address bar." : "Ako ne vidite skočni prozor, možete kliknuti na ovu ikonu u adresnoj traci.", 26 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Zatim ovlastite stranicu da otvara poveznice „web+nextclouddiscourse“.", 27 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Ako i dalje ne uspijevate registrirati protokol, provjerite postavke na ovoj stranici:", 28 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "U pregledniku Firefox biste trebali vidjeti traku pri vrhu ove stranice putem koje možete ovlastiti ovu stranicu da otvara poveznice „web+nextclouddiscourse“.", 29 | "Enable navigation link" : "Omogući navigacijsku poveznicu", 30 | "Discourse instance address" : "Adresa instance Discoursea", 31 | "Connect to Discourse" : "Poveži se s Discourseom", 32 | "Connected as {username}" : "Povezan kao {username}", 33 | "Disconnect from Discourse" : "Odspoji se s Discoursea", 34 | "Enable searching for posts" : "Omogući traženje objava", 35 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Upozorenje, sve što upišete u traku za pretraživanje bit će poslano vašoj instanci Discoursea.", 36 | "No Discourse account connected" : "Nema povezanih Discourse računa", 37 | "Error connecting to Discourse" : "Pogreška pri povezivanju s Discourseom", 38 | "No Discourse notifications!" : "Nema Discourse obavijesti!", 39 | "Failed to get Discourse notifications" : "Dohvaćanje Discourse obavijesti nije uspjelo", 40 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} poruka u dolaznom sandučiću administratora","{nb} poruke u dolaznom sandučiću administratora","{nb} poruka u dolaznom sandučiću administratora"], 41 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} poruka u dolaznom sandučiću moderatora","{nb} poruke u dolaznom sandučiću moderatora","{nb} poruka u dolaznom sandučiću moderatora"] 42 | },"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" 43 | } -------------------------------------------------------------------------------- /l10n/id.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Bad HTTP method" : "Metode HTTP tidak benar", 5 | "Bad credentials" : "Kredensial tidak benar", 6 | "Connected accounts" : "Akun terhubung", 7 | "Enable navigation link" : "Aktifkan tautan navigasi" 8 | }, 9 | "nplurals=1; plural=0;"); 10 | -------------------------------------------------------------------------------- /l10n/id.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Bad HTTP method" : "Metode HTTP tidak benar", 3 | "Bad credentials" : "Kredensial tidak benar", 4 | "Connected accounts" : "Akun terhubung", 5 | "Enable navigation link" : "Aktifkan tautan navigasi" 6 | },"pluralForm" :"nplurals=1; plural=0;" 7 | } -------------------------------------------------------------------------------- /l10n/is.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "posts" : "færslur", 5 | "Bad credentials" : "Gölluð auðkenni", 6 | "Connected accounts" : "Tengdir aðgangar", 7 | "Enable navigation link" : "Virkja flakktengil" 8 | }, 9 | "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); 10 | -------------------------------------------------------------------------------- /l10n/is.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "posts" : "færslur", 3 | "Bad credentials" : "Gölluð auðkenni", 4 | "Connected accounts" : "Tengdir aðgangar", 5 | "Enable navigation link" : "Virkja flakktengil" 6 | },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" 7 | } -------------------------------------------------------------------------------- /l10n/ja.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Discourse notifications" : "Discourse通知", 5 | "Discourse posts" : "Discourse記事", 6 | "posts" : "投稿", 7 | "Bad HTTP method" : "不正なHTTPメソッド", 8 | "Bad credentials" : "不正な資格情報", 9 | "Connected accounts" : "接続済みアカウント", 10 | "If you don't see the popup, you can still click on this icon in the address bar." : "ポップアップが表示されない場合、アドレスバーのこのアイコンをクリックしてください。", 11 | "Enable navigation link" : "ナビゲーションリンクを有効化", 12 | "Connect to Discourse" : "Discourseに接続", 13 | "Connected as {username}" : "{username}として接続しました", 14 | "Disconnect from Discourse" : "Discourseから接続を解除", 15 | "No Discourse account connected" : "接続済みDiscourseアカウントがありません", 16 | "No Discourse notifications!" : "Discourse通知がありません!" 17 | }, 18 | "nplurals=1; plural=0;"); 19 | -------------------------------------------------------------------------------- /l10n/ja.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Discourse notifications" : "Discourse通知", 3 | "Discourse posts" : "Discourse記事", 4 | "posts" : "投稿", 5 | "Bad HTTP method" : "不正なHTTPメソッド", 6 | "Bad credentials" : "不正な資格情報", 7 | "Connected accounts" : "接続済みアカウント", 8 | "If you don't see the popup, you can still click on this icon in the address bar." : "ポップアップが表示されない場合、アドレスバーのこのアイコンをクリックしてください。", 9 | "Enable navigation link" : "ナビゲーションリンクを有効化", 10 | "Connect to Discourse" : "Discourseに接続", 11 | "Connected as {username}" : "{username}として接続しました", 12 | "Disconnect from Discourse" : "Discourseから接続を解除", 13 | "No Discourse account connected" : "接続済みDiscourseアカウントがありません", 14 | "No Discourse notifications!" : "Discourse通知がありません!" 15 | },"pluralForm" :"nplurals=1; plural=0;" 16 | } -------------------------------------------------------------------------------- /l10n/ko.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Bad HTTP method" : "옳지 않은 HTTP 메소드", 5 | "Bad credentials" : "잘못된 자격 증명", 6 | "Connected accounts" : "계정 연결됨", 7 | "No Discourse account connected" : "연결된 Discourse 계정이 없음", 8 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["중재자 수신함에 {nb}개 항목이 있음"] 9 | }, 10 | "nplurals=1; plural=0;"); 11 | -------------------------------------------------------------------------------- /l10n/ko.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Bad HTTP method" : "옳지 않은 HTTP 메소드", 3 | "Bad credentials" : "잘못된 자격 증명", 4 | "Connected accounts" : "계정 연결됨", 5 | "No Discourse account connected" : "연결된 Discourse 계정이 없음", 6 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["중재자 수신함에 {nb}개 항목이 있음"] 7 | },"pluralForm" :"nplurals=1; plural=0;" 8 | } -------------------------------------------------------------------------------- /l10n/lt_LT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Error during authentication exchanges" : "Klaida tapatybės nustatymo apsikeitimo metu", 5 | "No API key returned by Discourse" : "„Discourse“ negrąžino jokio API rakto", 6 | "Discourse notifications" : "„Discourse“ pranešimai", 7 | "Discourse posts" : "„Discourse“ įrašai", 8 | "Discourse topics" : "„Discourse“ temos", 9 | "posts" : "įrašai", 10 | "Bad HTTP method" : "Blogas HTTP metodas", 11 | "Bad credentials" : "Blogi prisijungimo duomenys", 12 | "Connected accounts" : "Prijungtos paskyros", 13 | "Discourse integration" : "„Discourse“ integracija", 14 | "Successfully connected to Discourse!" : "Sėkmingai prisijungta prie „Discourse“!", 15 | "Discourse API-key could not be obtained:" : "Nepavyko gauti „Discourse“ API rakto:", 16 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud „Discourse“ integracija ties {ncUrl}", 17 | "Discourse options saved" : "„Discourse“ parinktys įrašytos", 18 | "Failed to save Discourse options" : "Nepavyko įrašyti „Discourse“ parinkčių", 19 | "Discourse instance address" : "„Discourse“ egzemplioriaus adresas", 20 | "Connect to Discourse" : "Prisijungti prie „Discourse“", 21 | "Connected as {username}" : "Prisijungta kaip {username}", 22 | "Disconnect from Discourse" : "Atsijungti nuo „Discourse“", 23 | "Enable searching for posts" : "Įjungti įrašų paiešką", 24 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Įspėjimas: viskas, ką rašysite paieškos juostoje, bus siunčiama į jūsų „Discourse“ egzempliorių.", 25 | "No Discourse account connected" : "Neprijungta jokia „Discourse“ paskyra", 26 | "Error connecting to Discourse" : "Klaida jungiantis prie „Discourse“", 27 | "No Discourse notifications!" : "Nėra „Discourse“ pranešimų!", 28 | "Failed to get Discourse notifications" : "Nepavyko gauti „Discourse“ pranešimų" 29 | }, 30 | "nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); 31 | -------------------------------------------------------------------------------- /l10n/lt_LT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error during authentication exchanges" : "Klaida tapatybės nustatymo apsikeitimo metu", 3 | "No API key returned by Discourse" : "„Discourse“ negrąžino jokio API rakto", 4 | "Discourse notifications" : "„Discourse“ pranešimai", 5 | "Discourse posts" : "„Discourse“ įrašai", 6 | "Discourse topics" : "„Discourse“ temos", 7 | "posts" : "įrašai", 8 | "Bad HTTP method" : "Blogas HTTP metodas", 9 | "Bad credentials" : "Blogi prisijungimo duomenys", 10 | "Connected accounts" : "Prijungtos paskyros", 11 | "Discourse integration" : "„Discourse“ integracija", 12 | "Successfully connected to Discourse!" : "Sėkmingai prisijungta prie „Discourse“!", 13 | "Discourse API-key could not be obtained:" : "Nepavyko gauti „Discourse“ API rakto:", 14 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud „Discourse“ integracija ties {ncUrl}", 15 | "Discourse options saved" : "„Discourse“ parinktys įrašytos", 16 | "Failed to save Discourse options" : "Nepavyko įrašyti „Discourse“ parinkčių", 17 | "Discourse instance address" : "„Discourse“ egzemplioriaus adresas", 18 | "Connect to Discourse" : "Prisijungti prie „Discourse“", 19 | "Connected as {username}" : "Prisijungta kaip {username}", 20 | "Disconnect from Discourse" : "Atsijungti nuo „Discourse“", 21 | "Enable searching for posts" : "Įjungti įrašų paiešką", 22 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Įspėjimas: viskas, ką rašysite paieškos juostoje, bus siunčiama į jūsų „Discourse“ egzempliorių.", 23 | "No Discourse account connected" : "Neprijungta jokia „Discourse“ paskyra", 24 | "Error connecting to Discourse" : "Klaida jungiantis prie „Discourse“", 25 | "No Discourse notifications!" : "Nėra „Discourse“ pranešimų!", 26 | "Failed to get Discourse notifications" : "Nepavyko gauti „Discourse“ pranešimų" 27 | },"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" 28 | } -------------------------------------------------------------------------------- /l10n/lv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "posts" : "ieraksts", 5 | "Bad HTTP method" : "Nederīgs HTTP pieprasījuma veids", 6 | "Bad credentials" : "Nederīgi pieteikšanās dati", 7 | "Connected accounts" : "Sasaistītie konti", 8 | "No Discourse account connected" : "Nav sasaistītu Discourse kontu" 9 | }, 10 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); 11 | -------------------------------------------------------------------------------- /l10n/lv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "posts" : "ieraksts", 3 | "Bad HTTP method" : "Nederīgs HTTP pieprasījuma veids", 4 | "Bad credentials" : "Nederīgi pieteikšanās dati", 5 | "Connected accounts" : "Sasaistītie konti", 6 | "No Discourse account connected" : "Nav sasaistītu Discourse kontu" 7 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" 8 | } -------------------------------------------------------------------------------- /l10n/mk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "posts" : "објави", 5 | "Bad credentials" : "Неточни акредитиви", 6 | "Connected accounts" : "Поврзани сметки", 7 | "Enable navigation link" : "Овозможи линк за навигација", 8 | "Connected as {username}" : "Поврзан како {username}" 9 | }, 10 | "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); 11 | -------------------------------------------------------------------------------- /l10n/mk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "posts" : "објави", 3 | "Bad credentials" : "Неточни акредитиви", 4 | "Connected accounts" : "Поврзани сметки", 5 | "Enable navigation link" : "Овозможи линк за навигација", 6 | "Connected as {username}" : "Поврзан како {username}" 7 | },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" 8 | } -------------------------------------------------------------------------------- /l10n/nb.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Discourse" : "Discourse", 5 | "Error during authentication exchanges" : "Feil under godkjenningsutvekslinger", 6 | "No API key returned by Discourse" : "Ingen API-nøkkel returnert av Discourse", 7 | "Discourse notifications" : "Discourse-varsler", 8 | "Discourse topics and posts" : "Discourse emner og innlegg", 9 | "Discourse posts" : "Discourse innlegg", 10 | "Discourse topics" : "Discourse emner", 11 | "posts" : "innlegg", 12 | "Bad HTTP method" : "HTTP-metode er feil", 13 | "Bad credentials" : "Påloggingsdetaljene er feil", 14 | "Connected accounts" : "Tilknyttede kontoer", 15 | "Discourse integration" : "Discourse-integrasjon", 16 | "Integration of Discourse forum and mailing list management system" : "Integrasjon av Discourse forum og e-postlistestyringssystem", 17 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse-integrasjon gir en kontrollpanel-widget som viser de viktigste varslene dine\n og muligheten til å finne emner og innlegg med Nextclouds enhetlige søk.", 18 | "Successfully connected to Discourse!" : "Koblet til Discourse!", 19 | "Discourse API-key could not be obtained:" : "Discourse API-nøkkel kunne ikke hentes:", 20 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse-integrasjon på {ncUrl}", 21 | "Discourse URL is invalid" : "Discourse URL er ugyldig", 22 | "Discourse options saved" : "Alternativer for Discourse lagret", 23 | "Failed to save Discourse options" : "Lagring av alternativer for Discourse feilet", 24 | "Failed to save Discourse nonce" : "Lagring av Discourse-engangs feilet", 25 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Hvis du ikke får tilgang til Discourse-kontoen din, er dette sannsynligvis fordi Discourse-forekomsten din ikke er autorisert til å gi API-nøkler til Nextcloud-forekomsten din.", 26 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Be Discourse-administratoren om å legge til denne URIen i «allowed_user_api_auth_redirects»-listen i administratorinnstillingene:", 27 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Forsikre deg om at du godtok protokollregistreringen øverst på denne siden hvis du vil autentisere deg til Discourse.", 28 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "Med Chrome / Chromium bør du se et sprettoppvindu i nettleseren øverst til venstre for å autorisere denne siden til å åpne \"web + nextclouddiscourse\" -koblinger.", 29 | "If you don't see the popup, you can still click on this icon in the address bar." : "Hvis du ikke ser popup-vinduet, kan du fortsatt klikke på dette ikonet i adressefeltet.", 30 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Autoriser deretter denne siden til å åpne \"web+nextclouddiscourse\"-lenker.", 31 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Hvis du fortsatt ikke klarer å få registrert protokollen, sjekk innstillingene dine på denne siden:", 32 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "Med Firefox bør du se en linje øverst på denne siden for å autorisere denne siden til å åpne \"web + nextclouddiscourse\" -koblinger.", 33 | "Enable navigation link" : "Aktiver navigasjonskobling", 34 | "Discourse instance address" : "Discourse-forekomstadresse", 35 | "Connect to Discourse" : "Koble til Discourse", 36 | "Connected as {username}" : "Tilkoblet som {username}", 37 | "Disconnect from Discourse" : "Koble fra Discourse", 38 | "Enable unified search for topics" : "Aktiver enhetlig søk for emner", 39 | "Enable searching for posts" : "Aktiver søking etter innlegg", 40 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Advarsel, alt du skriver i søkefeltet vil bli sendt til Discourse-forekomsten din.", 41 | "No Discourse account connected" : "Ingen Discourse-konto tilkoblet", 42 | "Error connecting to Discourse" : "Feil ved tilkobling til Discourse", 43 | "No Discourse notifications!" : "Ingen Discourse-varsler!", 44 | "Failed to get Discourse notifications" : "Henting av Discourse-varsler feilet", 45 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} element i administratorinnboksen din","{nb} elementer i administratorinnboksen din"], 46 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} element i moderatorinnboksen din","{nb} elementer i moderatorinnboksen din"] 47 | }, 48 | "nplurals=2; plural=(n != 1);"); 49 | -------------------------------------------------------------------------------- /l10n/nb.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Discourse" : "Discourse", 3 | "Error during authentication exchanges" : "Feil under godkjenningsutvekslinger", 4 | "No API key returned by Discourse" : "Ingen API-nøkkel returnert av Discourse", 5 | "Discourse notifications" : "Discourse-varsler", 6 | "Discourse topics and posts" : "Discourse emner og innlegg", 7 | "Discourse posts" : "Discourse innlegg", 8 | "Discourse topics" : "Discourse emner", 9 | "posts" : "innlegg", 10 | "Bad HTTP method" : "HTTP-metode er feil", 11 | "Bad credentials" : "Påloggingsdetaljene er feil", 12 | "Connected accounts" : "Tilknyttede kontoer", 13 | "Discourse integration" : "Discourse-integrasjon", 14 | "Integration of Discourse forum and mailing list management system" : "Integrasjon av Discourse forum og e-postlistestyringssystem", 15 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse-integrasjon gir en kontrollpanel-widget som viser de viktigste varslene dine\n og muligheten til å finne emner og innlegg med Nextclouds enhetlige søk.", 16 | "Successfully connected to Discourse!" : "Koblet til Discourse!", 17 | "Discourse API-key could not be obtained:" : "Discourse API-nøkkel kunne ikke hentes:", 18 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse-integrasjon på {ncUrl}", 19 | "Discourse URL is invalid" : "Discourse URL er ugyldig", 20 | "Discourse options saved" : "Alternativer for Discourse lagret", 21 | "Failed to save Discourse options" : "Lagring av alternativer for Discourse feilet", 22 | "Failed to save Discourse nonce" : "Lagring av Discourse-engangs feilet", 23 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Hvis du ikke får tilgang til Discourse-kontoen din, er dette sannsynligvis fordi Discourse-forekomsten din ikke er autorisert til å gi API-nøkler til Nextcloud-forekomsten din.", 24 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Be Discourse-administratoren om å legge til denne URIen i «allowed_user_api_auth_redirects»-listen i administratorinnstillingene:", 25 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Forsikre deg om at du godtok protokollregistreringen øverst på denne siden hvis du vil autentisere deg til Discourse.", 26 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "Med Chrome / Chromium bør du se et sprettoppvindu i nettleseren øverst til venstre for å autorisere denne siden til å åpne \"web + nextclouddiscourse\" -koblinger.", 27 | "If you don't see the popup, you can still click on this icon in the address bar." : "Hvis du ikke ser popup-vinduet, kan du fortsatt klikke på dette ikonet i adressefeltet.", 28 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Autoriser deretter denne siden til å åpne \"web+nextclouddiscourse\"-lenker.", 29 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Hvis du fortsatt ikke klarer å få registrert protokollen, sjekk innstillingene dine på denne siden:", 30 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "Med Firefox bør du se en linje øverst på denne siden for å autorisere denne siden til å åpne \"web + nextclouddiscourse\" -koblinger.", 31 | "Enable navigation link" : "Aktiver navigasjonskobling", 32 | "Discourse instance address" : "Discourse-forekomstadresse", 33 | "Connect to Discourse" : "Koble til Discourse", 34 | "Connected as {username}" : "Tilkoblet som {username}", 35 | "Disconnect from Discourse" : "Koble fra Discourse", 36 | "Enable unified search for topics" : "Aktiver enhetlig søk for emner", 37 | "Enable searching for posts" : "Aktiver søking etter innlegg", 38 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Advarsel, alt du skriver i søkefeltet vil bli sendt til Discourse-forekomsten din.", 39 | "No Discourse account connected" : "Ingen Discourse-konto tilkoblet", 40 | "Error connecting to Discourse" : "Feil ved tilkobling til Discourse", 41 | "No Discourse notifications!" : "Ingen Discourse-varsler!", 42 | "Failed to get Discourse notifications" : "Henting av Discourse-varsler feilet", 43 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} element i administratorinnboksen din","{nb} elementer i administratorinnboksen din"], 44 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} element i moderatorinnboksen din","{nb} elementer i moderatorinnboksen din"] 45 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 46 | } -------------------------------------------------------------------------------- /l10n/nl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Error during authentication exchanges" : "Fout tijdens authenticatie-uitwisselingen", 5 | "No API key returned by Discourse" : "Geen API-sleutel geretourneerd door Discourse", 6 | "Discourse notifications" : "Discourse meldingen", 7 | "Discourse posts" : "Discourse berichten", 8 | "Discourse topics" : "Discourse onderwerpen", 9 | "posts" : "berichten", 10 | "Bad HTTP method" : "Foute HTTP methode", 11 | "Bad credentials" : "Foute inloggegevens", 12 | "Connected accounts" : "Verbonden accounts", 13 | "Discourse integration" : "Discourse integratie", 14 | "Integration of Discourse forum and mailing list management system" : "Integratie van het Discourse forum en mailinglijst beheersysteem", 15 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse-integratie biedt een dashboardwidget dat je belangrijkste meldingen weergeeft,\nmet de mogelijkheid om onderwerpen en berichten te vinden in de Nextcloud geïngetgreerde zoekfunctie.", 16 | "Successfully connected to Discourse!" : "Succesvol verbonden met Discourse!", 17 | "Discourse API-key could not be obtained:" : "Discourse API-sleutel kon niet opgehaald worden:", 18 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse integratie op {ncUrl}", 19 | "Discourse URL is invalid" : "Discourse URL is ongeldig", 20 | "Discourse options saved" : "Discourse opties opgeslagen", 21 | "Failed to save Discourse options" : "Opslaan Discourse-opties mislukt", 22 | "Failed to save Discourse nonce" : "Opslaan Discourse nonce mislukt", 23 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Als je geen toegang krijgt tot je Discourse account, dan is dat vermoedelijk doordat je Discourse server niet is geautoriseerd om API keys aan he Nextcloud server te verstrekken.", 24 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Vraag de Discourse beheerder om deze URI aan de \"allowed_user_api_auth_redirects\" lijst in admin settings toe te voegen:", 25 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Accepteer de protocol-registratie bovenaan deze pagina om authenticatie bij Discourse mogelijk te maken.", 26 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "In Chrome/Chromium zou je linksboven in de browser een pop-up moeten zien om deze pagina toestemming te geven om \"web+nextclouddiscourse\" links te openen.", 27 | "If you don't see the popup, you can still click on this icon in the address bar." : "Als je deze pop-up niet ziet, kunt je nog steeds op dit pictogram in de adresbalk klikken.", 28 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Geef daarna toestemming aan deze pagina om \"web+nextclouddiscourse\" links te openen.", 29 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Als je het protocol nog steeds niet kunt registreren, controleer dan de instellingen op deze pagina:", 30 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "In Firefox zou je bovenaan de pagina een balk moeten zien om toestemming te geven om \"web+nextclouddiscourse\" links te openen.", 31 | "Enable navigation link" : "Inschakelen navigatielink", 32 | "Discourse instance address" : "Adres van Discourse-instantie", 33 | "Connect to Discourse" : "Verbinden met Discourse", 34 | "Connected as {username}" : "Verbonden als {username}", 35 | "Disconnect from Discourse" : "Verbinding met Discourse verbreken", 36 | "Enable searching for posts" : "Inschakelen zoeken naar berichten", 37 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Let op: alles wat je intypt in de zoekbalk wordt naar de Discourseserver gestuurd.", 38 | "No Discourse account connected" : "Geen Discourse account verbonden", 39 | "Error connecting to Discourse" : "Fout bij het verbinden met Discourse", 40 | "No Discourse notifications!" : "Geen Discourse meldingen!", 41 | "Failed to get Discourse notifications" : "Kon Discource meldingen niet ophalen.", 42 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} bericht in je beheerdersinbox","{nb} berichten in je beheerdersinbox"], 43 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} bericht in je moderatorinbox","{nb} berichten in je moderatorinbox"] 44 | }, 45 | "nplurals=2; plural=(n != 1);"); 46 | -------------------------------------------------------------------------------- /l10n/nl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error during authentication exchanges" : "Fout tijdens authenticatie-uitwisselingen", 3 | "No API key returned by Discourse" : "Geen API-sleutel geretourneerd door Discourse", 4 | "Discourse notifications" : "Discourse meldingen", 5 | "Discourse posts" : "Discourse berichten", 6 | "Discourse topics" : "Discourse onderwerpen", 7 | "posts" : "berichten", 8 | "Bad HTTP method" : "Foute HTTP methode", 9 | "Bad credentials" : "Foute inloggegevens", 10 | "Connected accounts" : "Verbonden accounts", 11 | "Discourse integration" : "Discourse integratie", 12 | "Integration of Discourse forum and mailing list management system" : "Integratie van het Discourse forum en mailinglijst beheersysteem", 13 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse-integratie biedt een dashboardwidget dat je belangrijkste meldingen weergeeft,\nmet de mogelijkheid om onderwerpen en berichten te vinden in de Nextcloud geïngetgreerde zoekfunctie.", 14 | "Successfully connected to Discourse!" : "Succesvol verbonden met Discourse!", 15 | "Discourse API-key could not be obtained:" : "Discourse API-sleutel kon niet opgehaald worden:", 16 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse integratie op {ncUrl}", 17 | "Discourse URL is invalid" : "Discourse URL is ongeldig", 18 | "Discourse options saved" : "Discourse opties opgeslagen", 19 | "Failed to save Discourse options" : "Opslaan Discourse-opties mislukt", 20 | "Failed to save Discourse nonce" : "Opslaan Discourse nonce mislukt", 21 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Als je geen toegang krijgt tot je Discourse account, dan is dat vermoedelijk doordat je Discourse server niet is geautoriseerd om API keys aan he Nextcloud server te verstrekken.", 22 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Vraag de Discourse beheerder om deze URI aan de \"allowed_user_api_auth_redirects\" lijst in admin settings toe te voegen:", 23 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Accepteer de protocol-registratie bovenaan deze pagina om authenticatie bij Discourse mogelijk te maken.", 24 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "In Chrome/Chromium zou je linksboven in de browser een pop-up moeten zien om deze pagina toestemming te geven om \"web+nextclouddiscourse\" links te openen.", 25 | "If you don't see the popup, you can still click on this icon in the address bar." : "Als je deze pop-up niet ziet, kunt je nog steeds op dit pictogram in de adresbalk klikken.", 26 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Geef daarna toestemming aan deze pagina om \"web+nextclouddiscourse\" links te openen.", 27 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Als je het protocol nog steeds niet kunt registreren, controleer dan de instellingen op deze pagina:", 28 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "In Firefox zou je bovenaan de pagina een balk moeten zien om toestemming te geven om \"web+nextclouddiscourse\" links te openen.", 29 | "Enable navigation link" : "Inschakelen navigatielink", 30 | "Discourse instance address" : "Adres van Discourse-instantie", 31 | "Connect to Discourse" : "Verbinden met Discourse", 32 | "Connected as {username}" : "Verbonden als {username}", 33 | "Disconnect from Discourse" : "Verbinding met Discourse verbreken", 34 | "Enable searching for posts" : "Inschakelen zoeken naar berichten", 35 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Let op: alles wat je intypt in de zoekbalk wordt naar de Discourseserver gestuurd.", 36 | "No Discourse account connected" : "Geen Discourse account verbonden", 37 | "Error connecting to Discourse" : "Fout bij het verbinden met Discourse", 38 | "No Discourse notifications!" : "Geen Discourse meldingen!", 39 | "Failed to get Discourse notifications" : "Kon Discource meldingen niet ophalen.", 40 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} bericht in je beheerdersinbox","{nb} berichten in je beheerdersinbox"], 41 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} bericht in je moderatorinbox","{nb} berichten in je moderatorinbox"] 42 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 43 | } -------------------------------------------------------------------------------- /l10n/oc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Bad credentials" : "Marrits identificants", 5 | "Connected accounts" : "Comptes connectats", 6 | "Connect to Discourse" : "Se connectar a Discourse", 7 | "Connected as {username}" : "Connectat coma {username}", 8 | "Disconnect from Discourse" : "Se desconnectar de Discourse" 9 | }, 10 | "nplurals=2; plural=(n > 1);"); 11 | -------------------------------------------------------------------------------- /l10n/oc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Bad credentials" : "Marrits identificants", 3 | "Connected accounts" : "Comptes connectats", 4 | "Connect to Discourse" : "Se connectar a Discourse", 5 | "Connected as {username}" : "Connectat coma {username}", 6 | "Disconnect from Discourse" : "Se desconnectar de Discourse" 7 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 8 | } -------------------------------------------------------------------------------- /l10n/pt_PT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "posts" : "publicações", 5 | "Bad HTTP method" : "Método HTTP incorreto", 6 | "Bad credentials" : "Credenciais inválidas" 7 | }, 8 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/pt_PT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "posts" : "publicações", 3 | "Bad HTTP method" : "Método HTTP incorreto", 4 | "Bad credentials" : "Credenciais inválidas" 5 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/ro.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Bad HTTP method" : "Metodă HTTP nepotrivită", 5 | "Bad credentials" : "Credențiale greșite", 6 | "Connected accounts" : "Conturile conectate", 7 | "Enable navigation link" : "Pornește link-ul de navifare" 8 | }, 9 | "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); 10 | -------------------------------------------------------------------------------- /l10n/ro.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Bad HTTP method" : "Metodă HTTP nepotrivită", 3 | "Bad credentials" : "Credențiale greșite", 4 | "Connected accounts" : "Conturile conectate", 5 | "Enable navigation link" : "Pornește link-ul de navifare" 6 | },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" 7 | } -------------------------------------------------------------------------------- /l10n/sc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error during authentication exchanges" : "Errore in is cuncàmbios de s'autenticatzione", 3 | "No API key returned by Discourse" : "Peruna crae API torrada dae Discourse", 4 | "Discourse notifications" : "Notìficas de Discourse", 5 | "Discourse posts" : "Publicatziones de Discourse", 6 | "Discourse topics" : "Argumentos de Discourse", 7 | "posts" : "publicatziones", 8 | "Bad HTTP method" : "Mètodu HTTP no bàlidu", 9 | "Bad credentials" : "Credentziales non bàlidas", 10 | "Connected accounts" : "Contos connètidos", 11 | "Discourse integration" : "Integratzione Discourse", 12 | "Integration of Discourse forum and mailing list management system" : "Integratzione de Discourse de su sistema de controllu de forum e listas de posta eletrònica ", 13 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "S'integrazione de Discourse frunit unu trastu de su pannellu de controllu chi mustrat is notìficas tuas de importu\n e sa capatzidade de agatare argumentos e publicatziones cun sa chirca unificada de Nextcloud.", 14 | "Successfully connected to Discourse!" : "Connètidu a Discourse in manera curreta!", 15 | "Discourse API-key could not be obtained:" : "No at fatu a otènnere sa crae API de atzessu a Discourse:", 16 | "Nextcloud Discourse integration on {ncUrl}" : "Integratzione Discourse de Nextcloud in {ncUrl}", 17 | "Discourse URL is invalid" : "S'URL de Discourse no est bàlidu", 18 | "Discourse options saved" : "Sèberos de Discourse sarvados", 19 | "Failed to save Discourse options" : "No at fatu a sarvare is sèberos de Discourse", 20 | "Failed to save Discourse nonce" : "No at fatu a sarvare su nonce de Discourse", 21 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Chi no renesses a fàghere s'atzessu in su contu Discourse tuo, fortzis est ca s'istàntzia Discourse no est autorizada a frunire craes API a s'istàntzia Nextcloud tua.", 22 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Pedi a s'amministratzione de Discourse de agiùnghere custu URI a sa lista \"allowed_user_api_auth_redirects\" in sa cunfiguratzione de amministratzione:", 23 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Segura·ti de àere atzetadu sa registratzione de su protocollu de sa parte superiora de custa pàgina si ti cheres identificare in Discourse.", 24 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "Cun Chrome/Chromium, dias dèpere bìdere una bentana istupada in artu a manu manca de su navigadore pro autorizare custa pàgina a abèrrere is ligòngios \"web+nextclouddiscourse\".", 25 | "If you don't see the popup, you can still click on this icon in the address bar." : "Si non bides chi istupat sa bentana, podes, in cada manera, incarcare in custa icona in s'istanca laterale de is indiritzos. ", 26 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Duncas autoriza custa pàgina a abèrrere is ligòngios \"web+nextclouddiscourse\".", 27 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Si non renesses a otènnere sa registratzione a su protocollu, controlla sa cunfiguratzione in custa pàgina:", 28 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "Cun Firefox, dias dèpere bìdere un'istanca in artu in custa pàgina pro dda autoritzare a abèrrere is ligòngios \"web+nextclouddiscourse\".", 29 | "Enable navigation link" : "Ativa su ligòngiu de navigatzione", 30 | "Discourse instance address" : "Indiritzu istàntzia Discourse", 31 | "Connect to Discourse" : "Connete a Discourse", 32 | "Connected as {username}" : "Connètidu comente {username}", 33 | "Disconnect from Discourse" : "Disconnete dae Discourse", 34 | "Enable searching for posts" : "Ativa sa chirca de is publicatziones", 35 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Avisu: totu su chi iscries in s'istanca de chirca s'at a imbiare a s'istàntzia Discourse tua.", 36 | "No Discourse account connected" : "Perunu contu Discourse connètidu", 37 | "Error connecting to Discourse" : "Errore connetende a Discourse", 38 | "No Discourse notifications!" : "Peruna notìfica de Discourse!", 39 | "Failed to get Discourse notifications" : "No at fatu a retzire is notìficas de Discourse", 40 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} elementu in sa safata de amministratzione","{nb} elementos in sa safata de amministratzione"], 41 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} elementu in sa safata de moderatzione","{nb} elementos in sa safata de moderatzione"] 42 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 43 | } -------------------------------------------------------------------------------- /l10n/sl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Error during authentication exchanges" : "Napaka med izmenjavo podatkov", 5 | "No API key returned by Discourse" : "Strežnik Discourse ni vrnil ključna vmesnika API", 6 | "Discourse notifications" : "Obvestila Discourse", 7 | "Discourse posts" : "Objave Discourse", 8 | "Discourse topics" : "Teme Discourse", 9 | "posts" : "objave", 10 | "Bad HTTP method" : "Neustrezna metoda HTTP", 11 | "Bad credentials" : "Neustrezna poverila", 12 | "Connected accounts" : "Povezani računi", 13 | "Discourse integration" : "Združevalnik Discourse", 14 | "Integration of Discourse forum and mailing list management system" : "Združevalnik za dostop do foruma in upravljalnika dopisnega seznama Discourse", 15 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Združevalnik Discourse omogoča gradnike za prikazovanje pomembnih obvestil in\nmožnost iskanja tem in objav z enotnim iskalnikom Nextcloud.", 16 | "Successfully connected to Discourse!" : "Povezava z računom Discourse je uspešno vzpostavljena!", 17 | "Discourse API-key could not be obtained:" : "Ključa Discourse API ni mogoče pridobiti:", 18 | "Nextcloud Discourse integration on {ncUrl}" : "Združevalnik Discourse na naslovu {ncUrl}", 19 | "Discourse URL is invalid" : "Spletni naslov URL za Discourse ni veljaven", 20 | "Discourse options saved" : "Nastavitve Discourse so shranjene", 21 | "Failed to save Discourse options" : "Shranjevanje nastavitev Discourse je spodletelo", 22 | "Failed to save Discourse nonce" : "Shranjevanje enkratnice Discourse je spodletelo", 23 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Če dostop do računa Discourse ni mogoč, je težava najverjetneje v overitvi uporabe ključev API z okoljem Nextcloud.", 24 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Skrbnik mora dodati naslov URI »allowed_user_api_auth_redirects« na seznam skrbniških nastavitev:", 25 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Vpis protokola na vrhu te strani je treba odobriti in nato dovoliti overitev okolja Discourse.", 26 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "Pri uporabi brskalnika Chrome/Chromium bi morali videti pojavno okno v zgornjem levem kotu za overitev odpiranja povezav »web+nextclouddiscourse«.", 27 | "If you don't see the popup, you can still click on this icon in the address bar." : "Če se pojavno okno ne pokaže, je to še vedno mogoče odpreti s klikom na ikono v naslovni vrstici.", 28 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Nato overite to stran za odpiranje povezav »web+nextclouddiscourse«.", 29 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Če še vedno ni mogoče vpisati protokola, preverite nastavitve na tej strani:", 30 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "Pri uporabi brskalnika Firefox bi morali videti vrstico na vrhu te strani za overitev odpiranja povezav »web+nextclouddiscourse«.", 31 | "Enable navigation link" : "Omogoči povezave za krmarjenje", 32 | "Discourse instance address" : "Naslov povezave do računa Discourse", 33 | "Connect to Discourse" : "Poveži z računom Discourse", 34 | "Connected as {username}" : "Povezan je uporabniški račun {username}", 35 | "Disconnect from Discourse" : "Prekini povezavo s programom Discourse", 36 | "Enable searching for posts" : "Omogoči iskanje med objavami", 37 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Opozorilo! Karkoli vpišete v iskalno polje bo poslano na strežnik Discourse.", 38 | "No Discourse account connected" : "Ni še povezanega računa Discourse", 39 | "Error connecting to Discourse" : "Napaka povezovanja z računom Discourse", 40 | "No Discourse notifications!" : "Ni obvestil Discourse!", 41 | "Failed to get Discourse notifications" : "Pridobivanje obvestil Discourse je spodletelo", 42 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["v skrbniškem predalu je {nb} sporočilo","v skrbniškem predalu sta {nb} sporočili","v skrbniškem predalu so {nb} sporočila","v skrbniškem predalu je {nb} sporočil"], 43 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["v moderatorskem predalu je {nb} sporočilo","v moderatorskem predalu sta {nb} sporočili","v moderatorskem predalu so {nb} sporočila","v moderatorskem predalu je {nb} sporočil"] 44 | }, 45 | "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); 46 | -------------------------------------------------------------------------------- /l10n/sl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error during authentication exchanges" : "Napaka med izmenjavo podatkov", 3 | "No API key returned by Discourse" : "Strežnik Discourse ni vrnil ključna vmesnika API", 4 | "Discourse notifications" : "Obvestila Discourse", 5 | "Discourse posts" : "Objave Discourse", 6 | "Discourse topics" : "Teme Discourse", 7 | "posts" : "objave", 8 | "Bad HTTP method" : "Neustrezna metoda HTTP", 9 | "Bad credentials" : "Neustrezna poverila", 10 | "Connected accounts" : "Povezani računi", 11 | "Discourse integration" : "Združevalnik Discourse", 12 | "Integration of Discourse forum and mailing list management system" : "Združevalnik za dostop do foruma in upravljalnika dopisnega seznama Discourse", 13 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Združevalnik Discourse omogoča gradnike za prikazovanje pomembnih obvestil in\nmožnost iskanja tem in objav z enotnim iskalnikom Nextcloud.", 14 | "Successfully connected to Discourse!" : "Povezava z računom Discourse je uspešno vzpostavljena!", 15 | "Discourse API-key could not be obtained:" : "Ključa Discourse API ni mogoče pridobiti:", 16 | "Nextcloud Discourse integration on {ncUrl}" : "Združevalnik Discourse na naslovu {ncUrl}", 17 | "Discourse URL is invalid" : "Spletni naslov URL za Discourse ni veljaven", 18 | "Discourse options saved" : "Nastavitve Discourse so shranjene", 19 | "Failed to save Discourse options" : "Shranjevanje nastavitev Discourse je spodletelo", 20 | "Failed to save Discourse nonce" : "Shranjevanje enkratnice Discourse je spodletelo", 21 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "Če dostop do računa Discourse ni mogoč, je težava najverjetneje v overitvi uporabe ključev API z okoljem Nextcloud.", 22 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "Skrbnik mora dodati naslov URI »allowed_user_api_auth_redirects« na seznam skrbniških nastavitev:", 23 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "Vpis protokola na vrhu te strani je treba odobriti in nato dovoliti overitev okolja Discourse.", 24 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "Pri uporabi brskalnika Chrome/Chromium bi morali videti pojavno okno v zgornjem levem kotu za overitev odpiranja povezav »web+nextclouddiscourse«.", 25 | "If you don't see the popup, you can still click on this icon in the address bar." : "Če se pojavno okno ne pokaže, je to še vedno mogoče odpreti s klikom na ikono v naslovni vrstici.", 26 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "Nato overite to stran za odpiranje povezav »web+nextclouddiscourse«.", 27 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "Če še vedno ni mogoče vpisati protokola, preverite nastavitve na tej strani:", 28 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "Pri uporabi brskalnika Firefox bi morali videti vrstico na vrhu te strani za overitev odpiranja povezav »web+nextclouddiscourse«.", 29 | "Enable navigation link" : "Omogoči povezave za krmarjenje", 30 | "Discourse instance address" : "Naslov povezave do računa Discourse", 31 | "Connect to Discourse" : "Poveži z računom Discourse", 32 | "Connected as {username}" : "Povezan je uporabniški račun {username}", 33 | "Disconnect from Discourse" : "Prekini povezavo s programom Discourse", 34 | "Enable searching for posts" : "Omogoči iskanje med objavami", 35 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Opozorilo! Karkoli vpišete v iskalno polje bo poslano na strežnik Discourse.", 36 | "No Discourse account connected" : "Ni še povezanega računa Discourse", 37 | "Error connecting to Discourse" : "Napaka povezovanja z računom Discourse", 38 | "No Discourse notifications!" : "Ni obvestil Discourse!", 39 | "Failed to get Discourse notifications" : "Pridobivanje obvestil Discourse je spodletelo", 40 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["v skrbniškem predalu je {nb} sporočilo","v skrbniškem predalu sta {nb} sporočili","v skrbniškem predalu so {nb} sporočila","v skrbniškem predalu je {nb} sporočil"], 41 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["v moderatorskem predalu je {nb} sporočilo","v moderatorskem predalu sta {nb} sporočili","v moderatorskem predalu so {nb} sporočila","v moderatorskem predalu je {nb} sporočil"] 42 | },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" 43 | } -------------------------------------------------------------------------------- /l10n/sv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "posts" : "Inlägg", 5 | "Bad HTTP method" : "Felaktig HTTP-metod", 6 | "Bad credentials" : "Ogiltiga inloggningsuppgifter", 7 | "Connected accounts" : "Anslutna konton", 8 | "Enable navigation link" : "Aktivera navigeringslänk", 9 | "Connected as {username}" : "Ansluten som {user}", 10 | "Enable unified search for topics" : "Aktivera enhetlig sökning efter ämnen", 11 | "Enable searching for posts" : "Aktivera sökning efter inlägg", 12 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Varning, allt du skriver i sökfältet skickas till Discourse." 13 | }, 14 | "nplurals=2; plural=(n != 1);"); 15 | -------------------------------------------------------------------------------- /l10n/sv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "posts" : "Inlägg", 3 | "Bad HTTP method" : "Felaktig HTTP-metod", 4 | "Bad credentials" : "Ogiltiga inloggningsuppgifter", 5 | "Connected accounts" : "Anslutna konton", 6 | "Enable navigation link" : "Aktivera navigeringslänk", 7 | "Connected as {username}" : "Ansluten som {user}", 8 | "Enable unified search for topics" : "Aktivera enhetlig sökning efter ämnen", 9 | "Enable searching for posts" : "Aktivera sökning efter inlägg", 10 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "Varning, allt du skriver i sökfältet skickas till Discourse." 11 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 12 | } -------------------------------------------------------------------------------- /l10n/ug.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Discourse" : "مۇنازىرە", 5 | "Error during authentication exchanges" : "دەلىللەش ئالماشتۇرۇش جەريانىدا خاتالىق", 6 | "No API key returned by Discourse" : "Discourse تەرىپىدىن قايتۇرۇلغان API ئاچقۇچى يوق", 7 | "Discourse notifications" : "ئۇقتۇرۇش ئۇقتۇرۇشى", 8 | "Discourse topics and posts" : "تېما ۋە يازمىلارنى سۆزلەڭ", 9 | "Discourse posts" : "يازمىلارنى سۆزلەڭ", 10 | "Discourse topics" : "تېما تېمىسى", 11 | "posts" : "يازمىلار", 12 | "Bad HTTP method" : "ناچار HTTP ئۇسۇلى", 13 | "Bad credentials" : "ناچار كىنىشكا", 14 | "Connected accounts" : "ئۇلانغان ھېساباتلار", 15 | "Discourse integration" : "بىرلەشتۈرۈشنى مۇھاكىمە قىلىش", 16 | "Integration of Discourse forum and mailing list management system" : "مۇنازىرە مۇنبىرى ۋە پوچتا يوللانمىلىرىنى باشقۇرۇش سىستېمىسى", 17 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "سۆز بىرىكمىسى مۇھىم ئۇقتۇرۇشلىرىڭىزنى كۆرسىتىدىغان باشقۇرۇش تاختىسى كىچىك قورالى بىلەن تەمىنلەيدۇ\n Nextcloud نىڭ بىر تۇتاش ئىزدىشى بىلەن تېما ۋە يازمىلارنى تېپىش ئىقتىدارى.", 18 | "Successfully connected to Discourse!" : "مۇھاكىمە مۇۋەپپەقىيەتلىك بولدى!", 19 | "Discourse API-key could not be obtained:" : "API ئاچقۇچنى سۆزلەشكە ئېرىشەلمىدى:", 20 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse ncUrl on ئۈستىدە بىرلەشتۈرۈش", 21 | "Discourse URL is invalid" : "سۆزلىشىش URL ئىناۋەتسىز", 22 | "Discourse options saved" : "سۆز تاللاشلىرى ساقلاندى", 23 | "Failed to save Discourse options" : "مۇنازىرە تاللانمىلىرىنى ساقلىيالمىدى", 24 | "Failed to save Discourse nonce" : "Discourse نى ساقلاپ قېلىش مەغلۇب بولدى", 25 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "ئەگەر سىز «Discourse» ھېساباتىڭىزغا كىرەلمىسىڭىز ، بۇ بەلكىم سىزنىڭ «Discourse» مىسالىڭىزنىڭ Nextcloud مىسالىڭىزغا API ئاچقۇچ بېرىش ھوقۇقى بېرىلمىگەنلىكىدىن بولسا كېرەك.", 26 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "مۇنازىرە باشقۇرغۇچىدىن بۇ URI نى باشقۇرۇش تەڭشەكلىرىدىكى «رۇخسەت قىلىنغان_ ئىشلەتكۈچى_ api_auth_redirects» تىزىملىكىگە قوشۇشىنى سوراڭ:", 27 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "ئەگەر «مۇنازىرە» گە دەلىللىمەكچى بولسىڭىز ، بۇ بەتنىڭ ئۈستىدىكى كېلىشىم تىزىملىكىنى قوبۇل قىلغانلىقىڭىزنى جەزملەشتۈرۈڭ.", 28 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "Chrome / Chromium ئارقىلىق ، توركۆرگۈنىڭ سول ئۈستى تەرىپىدە «تور + nextclouddiscourse» ئۇلانمىسىنى ئېچىشقا ھوقۇق بېرىش ئۈچۈن بىر سەكرىمە كۆزنەكنى كۆرۈشىڭىز كېرەك.", 29 | "If you don't see the popup, you can still click on this icon in the address bar." : "ئەگەر سەكرىمە كۆرۈنۈشنى كۆرمىسىڭىز ، يەنىلا ئادرېس ستونىدىكى بۇ سىنبەلگىنى باسسىڭىز بولىدۇ.", 30 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "ئاندىن بۇ بەتكە ھوقۇق بېرىپ «web + nextclouddiscourse» ئۇلانمىسىنى ئېچىڭ.", 31 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "ئەگەر سىز يەنىلا كېلىشىمنى تىزىمغا ئالدۇرالمىسىڭىز ، بۇ بەتتىكى تەڭشەكلىرىڭىزنى تەكشۈرۈڭ:", 32 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "Firefox ئارقىلىق بۇ بەتنىڭ ئۈستىدىكى بىر بالداقنى كۆرۈپ ، بۇ بەتنى «web + nextclouddiscourse» ئۇلانمىسىنى ئېچىشقا ھوقۇق بېرىسىز.", 33 | "Enable navigation link" : "يول باشلاش ئۇلانمىسىنى قوزغىتىڭ", 34 | "Discourse instance address" : "مىسال ئادرېسى", 35 | "Connect to Discourse" : "سۆزلىشىشكە ئۇلاڭ", 36 | "Connected as {username}" : "{username} ئىسمى as قىلىپ ئۇلاندى", 37 | "Disconnect from Discourse" : "سۆزلىشىشتىن ئۈزۈڭ", 38 | "Enable unified search for topics" : "تېمىنى بىرلىككە كەلتۈرۈشنى قوزغىتىڭ", 39 | "Enable searching for posts" : "يازمىلارنى ئىزدەشنى قوزغىتىڭ", 40 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "ئاگاھلاندۇرۇش ، ئىزدەش ستونىغا يازغانلىرىڭىزنىڭ ھەممىسى سىزنىڭ سۆزلىشىش ئۈلگىڭىزگە ئەۋەتىلىدۇ.", 41 | "No Discourse account connected" : "مۇنازىرە ھېساباتى ئۇلانمىدى", 42 | "Error connecting to Discourse" : "سۆزلىشىشكە ئۇلىنىشتا خاتالىق", 43 | "No Discourse notifications!" : "مۇھاكىمە ئۇقتۇرۇشى يوق!", 44 | "Failed to get Discourse notifications" : "مۇھاكىمە ئۇقتۇرۇشىغا ئېرىشەلمىدى" 45 | }, 46 | "nplurals=2; plural=(n != 1);"); 47 | -------------------------------------------------------------------------------- /l10n/ug.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Discourse" : "مۇنازىرە", 3 | "Error during authentication exchanges" : "دەلىللەش ئالماشتۇرۇش جەريانىدا خاتالىق", 4 | "No API key returned by Discourse" : "Discourse تەرىپىدىن قايتۇرۇلغان API ئاچقۇچى يوق", 5 | "Discourse notifications" : "ئۇقتۇرۇش ئۇقتۇرۇشى", 6 | "Discourse topics and posts" : "تېما ۋە يازمىلارنى سۆزلەڭ", 7 | "Discourse posts" : "يازمىلارنى سۆزلەڭ", 8 | "Discourse topics" : "تېما تېمىسى", 9 | "posts" : "يازمىلار", 10 | "Bad HTTP method" : "ناچار HTTP ئۇسۇلى", 11 | "Bad credentials" : "ناچار كىنىشكا", 12 | "Connected accounts" : "ئۇلانغان ھېساباتلار", 13 | "Discourse integration" : "بىرلەشتۈرۈشنى مۇھاكىمە قىلىش", 14 | "Integration of Discourse forum and mailing list management system" : "مۇنازىرە مۇنبىرى ۋە پوچتا يوللانمىلىرىنى باشقۇرۇش سىستېمىسى", 15 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "سۆز بىرىكمىسى مۇھىم ئۇقتۇرۇشلىرىڭىزنى كۆرسىتىدىغان باشقۇرۇش تاختىسى كىچىك قورالى بىلەن تەمىنلەيدۇ\n Nextcloud نىڭ بىر تۇتاش ئىزدىشى بىلەن تېما ۋە يازمىلارنى تېپىش ئىقتىدارى.", 16 | "Successfully connected to Discourse!" : "مۇھاكىمە مۇۋەپپەقىيەتلىك بولدى!", 17 | "Discourse API-key could not be obtained:" : "API ئاچقۇچنى سۆزلەشكە ئېرىشەلمىدى:", 18 | "Nextcloud Discourse integration on {ncUrl}" : "Nextcloud Discourse ncUrl on ئۈستىدە بىرلەشتۈرۈش", 19 | "Discourse URL is invalid" : "سۆزلىشىش URL ئىناۋەتسىز", 20 | "Discourse options saved" : "سۆز تاللاشلىرى ساقلاندى", 21 | "Failed to save Discourse options" : "مۇنازىرە تاللانمىلىرىنى ساقلىيالمىدى", 22 | "Failed to save Discourse nonce" : "Discourse نى ساقلاپ قېلىش مەغلۇب بولدى", 23 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "ئەگەر سىز «Discourse» ھېساباتىڭىزغا كىرەلمىسىڭىز ، بۇ بەلكىم سىزنىڭ «Discourse» مىسالىڭىزنىڭ Nextcloud مىسالىڭىزغا API ئاچقۇچ بېرىش ھوقۇقى بېرىلمىگەنلىكىدىن بولسا كېرەك.", 24 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "مۇنازىرە باشقۇرغۇچىدىن بۇ URI نى باشقۇرۇش تەڭشەكلىرىدىكى «رۇخسەت قىلىنغان_ ئىشلەتكۈچى_ api_auth_redirects» تىزىملىكىگە قوشۇشىنى سوراڭ:", 25 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "ئەگەر «مۇنازىرە» گە دەلىللىمەكچى بولسىڭىز ، بۇ بەتنىڭ ئۈستىدىكى كېلىشىم تىزىملىكىنى قوبۇل قىلغانلىقىڭىزنى جەزملەشتۈرۈڭ.", 26 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "Chrome / Chromium ئارقىلىق ، توركۆرگۈنىڭ سول ئۈستى تەرىپىدە «تور + nextclouddiscourse» ئۇلانمىسىنى ئېچىشقا ھوقۇق بېرىش ئۈچۈن بىر سەكرىمە كۆزنەكنى كۆرۈشىڭىز كېرەك.", 27 | "If you don't see the popup, you can still click on this icon in the address bar." : "ئەگەر سەكرىمە كۆرۈنۈشنى كۆرمىسىڭىز ، يەنىلا ئادرېس ستونىدىكى بۇ سىنبەلگىنى باسسىڭىز بولىدۇ.", 28 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "ئاندىن بۇ بەتكە ھوقۇق بېرىپ «web + nextclouddiscourse» ئۇلانمىسىنى ئېچىڭ.", 29 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "ئەگەر سىز يەنىلا كېلىشىمنى تىزىمغا ئالدۇرالمىسىڭىز ، بۇ بەتتىكى تەڭشەكلىرىڭىزنى تەكشۈرۈڭ:", 30 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "Firefox ئارقىلىق بۇ بەتنىڭ ئۈستىدىكى بىر بالداقنى كۆرۈپ ، بۇ بەتنى «web + nextclouddiscourse» ئۇلانمىسىنى ئېچىشقا ھوقۇق بېرىسىز.", 31 | "Enable navigation link" : "يول باشلاش ئۇلانمىسىنى قوزغىتىڭ", 32 | "Discourse instance address" : "مىسال ئادرېسى", 33 | "Connect to Discourse" : "سۆزلىشىشكە ئۇلاڭ", 34 | "Connected as {username}" : "{username} ئىسمى as قىلىپ ئۇلاندى", 35 | "Disconnect from Discourse" : "سۆزلىشىشتىن ئۈزۈڭ", 36 | "Enable unified search for topics" : "تېمىنى بىرلىككە كەلتۈرۈشنى قوزغىتىڭ", 37 | "Enable searching for posts" : "يازمىلارنى ئىزدەشنى قوزغىتىڭ", 38 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "ئاگاھلاندۇرۇش ، ئىزدەش ستونىغا يازغانلىرىڭىزنىڭ ھەممىسى سىزنىڭ سۆزلىشىش ئۈلگىڭىزگە ئەۋەتىلىدۇ.", 39 | "No Discourse account connected" : "مۇنازىرە ھېساباتى ئۇلانمىدى", 40 | "Error connecting to Discourse" : "سۆزلىشىشكە ئۇلىنىشتا خاتالىق", 41 | "No Discourse notifications!" : "مۇھاكىمە ئۇقتۇرۇشى يوق!", 42 | "Failed to get Discourse notifications" : "مۇھاكىمە ئۇقتۇرۇشىغا ئېرىشەلمىدى" 43 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 44 | } -------------------------------------------------------------------------------- /l10n/uk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Bad HTTP method" : "Поганий метод HTTP", 5 | "Bad credentials" : "Погані облікові дані", 6 | "Connected accounts" : "Підключені облікові записи", 7 | "Enable unified search for topics" : "Універсальний пошук для тем" 8 | }, 9 | "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); 10 | -------------------------------------------------------------------------------- /l10n/uk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Bad HTTP method" : "Поганий метод HTTP", 3 | "Bad credentials" : "Погані облікові дані", 4 | "Connected accounts" : "Підключені облікові записи", 5 | "Enable unified search for topics" : "Універсальний пошук для тем" 6 | },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" 7 | } -------------------------------------------------------------------------------- /l10n/uz.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "posts" : "postlar", 5 | "Bad HTTP method" : "Yomon HTTP usuli", 6 | "Bad credentials" : "Akkaunt ma'lumotlari xato" 7 | }, 8 | "nplurals=1; plural=0;"); 9 | -------------------------------------------------------------------------------- /l10n/uz.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "posts" : "postlar", 3 | "Bad HTTP method" : "Yomon HTTP usuli", 4 | "Bad credentials" : "Akkaunt ma'lumotlari xato" 5 | },"pluralForm" :"nplurals=1; plural=0;" 6 | } -------------------------------------------------------------------------------- /l10n/vi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Bad HTTP method" : "Phương thức HTTP không hợp lệ", 5 | "Bad credentials" : "Thông tin đăng nhập không hợp lệ.", 6 | "Connected accounts" : "Đã kết nối tài khoản" 7 | }, 8 | "nplurals=1; plural=0;"); 9 | -------------------------------------------------------------------------------- /l10n/vi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Bad HTTP method" : "Phương thức HTTP không hợp lệ", 3 | "Bad credentials" : "Thông tin đăng nhập không hợp lệ.", 4 | "Connected accounts" : "Đã kết nối tài khoản" 5 | },"pluralForm" :"nplurals=1; plural=0;" 6 | } -------------------------------------------------------------------------------- /l10n/zh_CN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Error during authentication exchanges" : "在验证时发生错误", 5 | "No API key returned by Discourse" : "Discourse 没有返回API密钥", 6 | "Discourse notifications" : "会话通知", 7 | "Discourse posts" : "Discourse 帖子", 8 | "Discourse topics" : "Discourse 主题", 9 | "posts" : "帖子", 10 | "Bad HTTP method" : "错误的 HTTP 方法", 11 | "Bad credentials" : "不好的证书", 12 | "Connected accounts" : "关联账号", 13 | "Discourse integration" : "Discourse 集成", 14 | "Integration of Discourse forum and mailing list management system" : "Discourse 论坛与邮件列表管理系统的集成", 15 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse 集成提供了一个仪表盘小部件,可以显示你的重要通知\n 以及使用 Nextcloud 的统一搜索功能查找主题和帖子的能力。", 16 | "Discourse API-key could not be obtained:" : "无法获取 Discourse API-key:", 17 | "Discourse URL is invalid" : "Discourse URL 无效", 18 | "Discourse options saved" : "Discourse 选项已保存", 19 | "Failed to save Discourse options" : "保存Discourse选项失败", 20 | "Failed to save Discourse nonce" : "保存Discourse nonce失败", 21 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "如果你无法访问自己的 Discourse 账号,则可能是因为你的 Discourse 实例未批准向你的 Nextcloud 实例提供 API 密钥。", 22 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "要求 Discourse 管理员将此 URI 添加到管理员设置的 “allowed_user_api_auth_redirects” 列表中:", 23 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "如果您想进行 Discourse 身份验证,请确保您接受了在此页面顶部的协议注册。", 24 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "使用 Chrome / Chromium 时,您应该能在浏览器的左上角看到一個弹出窗口,以授权该页面打开 “web+nextclouddiscourse” 链接。", 25 | "If you don't see the popup, you can still click on this icon in the address bar." : "如果你没有看到弹出窗口,您还可以在地址栏点击这个图标。", 26 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "然后授权这此页面打开 “web+nextcloudtwitter” 链接。 ", 27 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "如果您仍然不能成功注册协议,请在此页面检查您的设置:", 28 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "在Firefox中,您应该会在页面顶部看到一个授权该页面打开“web+nextcloudtwitter”链接的栏。", 29 | "Enable navigation link" : "启用应用图标链接至实例", 30 | "Discourse instance address" : "Discourse 实例地址", 31 | "Connect to Discourse" : "连接到 Discourse", 32 | "Connected as {username}" : "以 {用户名}连接成功", 33 | "Disconnect from Discourse" : "与 Discourse 断开连接", 34 | "No Discourse account connected" : "没有已连接的Discourse账号", 35 | "Error connecting to Discourse" : "在连接到会话时发生错误", 36 | "No Discourse notifications!" : "暂无会话通知", 37 | "Failed to get Discourse notifications" : "获取Discourse通知失败" 38 | }, 39 | "nplurals=1; plural=0;"); 40 | -------------------------------------------------------------------------------- /l10n/zh_CN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error during authentication exchanges" : "在验证时发生错误", 3 | "No API key returned by Discourse" : "Discourse 没有返回API密钥", 4 | "Discourse notifications" : "会话通知", 5 | "Discourse posts" : "Discourse 帖子", 6 | "Discourse topics" : "Discourse 主题", 7 | "posts" : "帖子", 8 | "Bad HTTP method" : "错误的 HTTP 方法", 9 | "Bad credentials" : "不好的证书", 10 | "Connected accounts" : "关联账号", 11 | "Discourse integration" : "Discourse 集成", 12 | "Integration of Discourse forum and mailing list management system" : "Discourse 论坛与邮件列表管理系统的集成", 13 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse 集成提供了一个仪表盘小部件,可以显示你的重要通知\n 以及使用 Nextcloud 的统一搜索功能查找主题和帖子的能力。", 14 | "Discourse API-key could not be obtained:" : "无法获取 Discourse API-key:", 15 | "Discourse URL is invalid" : "Discourse URL 无效", 16 | "Discourse options saved" : "Discourse 选项已保存", 17 | "Failed to save Discourse options" : "保存Discourse选项失败", 18 | "Failed to save Discourse nonce" : "保存Discourse nonce失败", 19 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "如果你无法访问自己的 Discourse 账号,则可能是因为你的 Discourse 实例未批准向你的 Nextcloud 实例提供 API 密钥。", 20 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "要求 Discourse 管理员将此 URI 添加到管理员设置的 “allowed_user_api_auth_redirects” 列表中:", 21 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "如果您想进行 Discourse 身份验证,请确保您接受了在此页面顶部的协议注册。", 22 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "使用 Chrome / Chromium 时,您应该能在浏览器的左上角看到一個弹出窗口,以授权该页面打开 “web+nextclouddiscourse” 链接。", 23 | "If you don't see the popup, you can still click on this icon in the address bar." : "如果你没有看到弹出窗口,您还可以在地址栏点击这个图标。", 24 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "然后授权这此页面打开 “web+nextcloudtwitter” 链接。 ", 25 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "如果您仍然不能成功注册协议,请在此页面检查您的设置:", 26 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "在Firefox中,您应该会在页面顶部看到一个授权该页面打开“web+nextcloudtwitter”链接的栏。", 27 | "Enable navigation link" : "启用应用图标链接至实例", 28 | "Discourse instance address" : "Discourse 实例地址", 29 | "Connect to Discourse" : "连接到 Discourse", 30 | "Connected as {username}" : "以 {用户名}连接成功", 31 | "Disconnect from Discourse" : "与 Discourse 断开连接", 32 | "No Discourse account connected" : "没有已连接的Discourse账号", 33 | "Error connecting to Discourse" : "在连接到会话时发生错误", 34 | "No Discourse notifications!" : "暂无会话通知", 35 | "Failed to get Discourse notifications" : "获取Discourse通知失败" 36 | },"pluralForm" :"nplurals=1; plural=0;" 37 | } -------------------------------------------------------------------------------- /l10n/zh_HK.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Discourse" : "Discourse 帖子", 5 | "Error during authentication exchanges" : "驗證交換時發生錯誤", 6 | "No API key returned by Discourse" : "Discourse 沒有返回API密鑰", 7 | "Discourse read notifications" : "Discourse 讀取通知", 8 | "Discourse notifications" : "Discourse 通知", 9 | "Discourse topics and posts" : "Discourse 主題和帖文", 10 | "Discourse posts" : "Discourse 帖子", 11 | "Discourse topics" : "Discourse 主題", 12 | "posts" : "帖子", 13 | "Bad HTTP method" : "不正確的 HTTP 方法", 14 | "Bad credentials" : "錯誤的身分驗證", 15 | "Connected accounts" : "已連線的帳號", 16 | "Discourse integration" : "Discourse 整合", 17 | "Integration of Discourse forum and mailing list management system" : "Discourse 話語論壇與郵件列表管理系統的整合", 18 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "話語集成提供了一個儀表板小部件,可顯示您的重要通知\n以及使用Nextcloud的統一搜索功能查找主題和帖子的能力。", 19 | "For example, https://help.nextcloud.com" : "例如 https://help.nextcloud.com", 20 | "Successfully connected to Discourse!" : "與 Discourse 連線成功!", 21 | "Discourse API-key could not be obtained:" : "無法取得 Discourse API-key:", 22 | "Nextcloud Discourse integration on {ncUrl}" : "{ncUrl} 上的 Nextcloud Discourse 整合", 23 | "Discourse URL is invalid" : "Discourse URL 是無效的", 24 | "Discourse options saved" : "已儲存 Discourse 選項", 25 | "Failed to save Discourse options" : "儲存 Discourse 選項失敗", 26 | "Failed to save Discourse nonce" : "儲存 Discourse nonce 失敗", 27 | "Protocol handler registration requires a secure context (https) or is not supported by your browser" : "通訊協定處理程式註冊需要安全情境 (https) 或您的瀏覽器不支援此功能", 28 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "如果您無法訪問自己的 Discourse 帳戶,則可能是因為您的 Discourse 實例無權向您的 Nextcloud 實例提供 API 密鑰。", 29 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "要求 Discourse 管理員將此 URI 添加到管理員設置中的 “allowed_user_api_auth_redirects” 列表中:", 30 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "確保接受此頁面頂部的協定註冊,以允許對 Discourse 進行身分驗證。", 31 | "Use the button below to trigger the custom protocol handler registration. If no prompt appears, make sure it is not already registered." : "使用下面的按鈕啟動自訂通訊協定處理程式註冊。如果沒有出現提示,請確定尚未註冊。", 32 | "Register protocol handler" : "註冊通訊協定處理程式", 33 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "使用 Chrome / Chromium,您應該在瀏覽器的左上角看到一個彈出窗口,以授權該頁面打開 “web+nextclouddiscourse” 連結。", 34 | "If you don't see the popup, you can still click on this icon in the address bar." : "如果沒有看到彈出窗口,您仍然可以在地址欄中單擊此圖標。", 35 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "然後授權此頁面打開 “web+nextclouddiscourse” 連結。", 36 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "如果仍然無法註冊協定,請在此頁面上檢查設置:", 37 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "使用Firefox,您應該在此頁面頂部看到一個欄,以授權該頁面打開 “web+nextclouddiscourse” 連結。", 38 | "Enable navigation link" : "啟用導覽連結", 39 | "Discourse instance address" : "Discourse 站台地址", 40 | "Connect to Discourse" : "連線至 Discourse", 41 | "Connected as {username}" : "以 {user} 身分連線", 42 | "Disconnect from Discourse" : "與 Discourse 斷開連線", 43 | "Enable unified search for topics" : "啟用統一搜尋主題", 44 | "Enable searching for posts" : "啟用帖子搜尋", 45 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "警告,您在搜尋列中輸入的所有東西都會傳送到 Discourse。", 46 | "No Discourse account connected" : "未連線至 Discourse 帳號", 47 | "Error connecting to Discourse" : "連線至 Discourse 時發生錯誤", 48 | "No Discourse notifications!" : "無 Discourse 通知!", 49 | "Failed to get Discourse notifications" : "未能獲取 Discourse 通知", 50 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} 個項目在您的管理員收件箱中"], 51 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} 個項目在您的主持人收件箱中"] 52 | }, 53 | "nplurals=1; plural=0;"); 54 | -------------------------------------------------------------------------------- /l10n/zh_HK.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Discourse" : "Discourse 帖子", 3 | "Error during authentication exchanges" : "驗證交換時發生錯誤", 4 | "No API key returned by Discourse" : "Discourse 沒有返回API密鑰", 5 | "Discourse read notifications" : "Discourse 讀取通知", 6 | "Discourse notifications" : "Discourse 通知", 7 | "Discourse topics and posts" : "Discourse 主題和帖文", 8 | "Discourse posts" : "Discourse 帖子", 9 | "Discourse topics" : "Discourse 主題", 10 | "posts" : "帖子", 11 | "Bad HTTP method" : "不正確的 HTTP 方法", 12 | "Bad credentials" : "錯誤的身分驗證", 13 | "Connected accounts" : "已連線的帳號", 14 | "Discourse integration" : "Discourse 整合", 15 | "Integration of Discourse forum and mailing list management system" : "Discourse 話語論壇與郵件列表管理系統的整合", 16 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "話語集成提供了一個儀表板小部件,可顯示您的重要通知\n以及使用Nextcloud的統一搜索功能查找主題和帖子的能力。", 17 | "For example, https://help.nextcloud.com" : "例如 https://help.nextcloud.com", 18 | "Successfully connected to Discourse!" : "與 Discourse 連線成功!", 19 | "Discourse API-key could not be obtained:" : "無法取得 Discourse API-key:", 20 | "Nextcloud Discourse integration on {ncUrl}" : "{ncUrl} 上的 Nextcloud Discourse 整合", 21 | "Discourse URL is invalid" : "Discourse URL 是無效的", 22 | "Discourse options saved" : "已儲存 Discourse 選項", 23 | "Failed to save Discourse options" : "儲存 Discourse 選項失敗", 24 | "Failed to save Discourse nonce" : "儲存 Discourse nonce 失敗", 25 | "Protocol handler registration requires a secure context (https) or is not supported by your browser" : "通訊協定處理程式註冊需要安全情境 (https) 或您的瀏覽器不支援此功能", 26 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "如果您無法訪問自己的 Discourse 帳戶,則可能是因為您的 Discourse 實例無權向您的 Nextcloud 實例提供 API 密鑰。", 27 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "要求 Discourse 管理員將此 URI 添加到管理員設置中的 “allowed_user_api_auth_redirects” 列表中:", 28 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "確保接受此頁面頂部的協定註冊,以允許對 Discourse 進行身分驗證。", 29 | "Use the button below to trigger the custom protocol handler registration. If no prompt appears, make sure it is not already registered." : "使用下面的按鈕啟動自訂通訊協定處理程式註冊。如果沒有出現提示,請確定尚未註冊。", 30 | "Register protocol handler" : "註冊通訊協定處理程式", 31 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "使用 Chrome / Chromium,您應該在瀏覽器的左上角看到一個彈出窗口,以授權該頁面打開 “web+nextclouddiscourse” 連結。", 32 | "If you don't see the popup, you can still click on this icon in the address bar." : "如果沒有看到彈出窗口,您仍然可以在地址欄中單擊此圖標。", 33 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "然後授權此頁面打開 “web+nextclouddiscourse” 連結。", 34 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "如果仍然無法註冊協定,請在此頁面上檢查設置:", 35 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "使用Firefox,您應該在此頁面頂部看到一個欄,以授權該頁面打開 “web+nextclouddiscourse” 連結。", 36 | "Enable navigation link" : "啟用導覽連結", 37 | "Discourse instance address" : "Discourse 站台地址", 38 | "Connect to Discourse" : "連線至 Discourse", 39 | "Connected as {username}" : "以 {user} 身分連線", 40 | "Disconnect from Discourse" : "與 Discourse 斷開連線", 41 | "Enable unified search for topics" : "啟用統一搜尋主題", 42 | "Enable searching for posts" : "啟用帖子搜尋", 43 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "警告,您在搜尋列中輸入的所有東西都會傳送到 Discourse。", 44 | "No Discourse account connected" : "未連線至 Discourse 帳號", 45 | "Error connecting to Discourse" : "連線至 Discourse 時發生錯誤", 46 | "No Discourse notifications!" : "無 Discourse 通知!", 47 | "Failed to get Discourse notifications" : "未能獲取 Discourse 通知", 48 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} 個項目在您的管理員收件箱中"], 49 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} 個項目在您的主持人收件箱中"] 50 | },"pluralForm" :"nplurals=1; plural=0;" 51 | } -------------------------------------------------------------------------------- /l10n/zh_TW.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "integration_discourse", 3 | { 4 | "Discourse" : "Discourse", 5 | "Error during authentication exchanges" : "身份驗證交換時發生錯誤", 6 | "No API key returned by Discourse" : "Discourse 並未回傳 API 金鑰", 7 | "Discourse read notifications" : "Discourse 讀取通知", 8 | "Discourse notifications" : "Discourse 通知", 9 | "Discourse topics and posts" : "Discourse 主題與貼文", 10 | "Discourse posts" : "Discourse 貼文", 11 | "Discourse topics" : "Discourse 主題", 12 | "posts" : "貼文", 13 | "Bad HTTP method" : "錯誤的 HTTP 方法", 14 | "Bad credentials" : "錯誤的憑證", 15 | "Connected accounts" : "已連線的帳號", 16 | "Discourse integration" : "Discourse 整合", 17 | "Integration of Discourse forum and mailing list management system" : "Discourse 論壇與郵遞論壇系統的整合", 18 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse 整合提供了一個儀表板小工具,顯示您的重要通知\n 以及透過 Nextcloud 的統一搜尋尋找主題與貼文的能力。", 19 | "For example, https://help.nextcloud.com" : "例如 https://help.nextcloud.com", 20 | "Successfully connected to Discourse!" : "成功連結至 Discourse!", 21 | "Discourse API-key could not be obtained:" : "無法擷取 Discouese API 金鑰:", 22 | "Nextcloud Discourse integration on {ncUrl}" : "{ncUrl} 上的 Nextcloud Discourse 的整合", 23 | "Discourse URL is invalid" : "Discourse URL 無效", 24 | "Discourse options saved" : "Discouese 選項已儲存", 25 | "Failed to save Discourse options" : "儲存 Discourse 選項失敗", 26 | "Failed to save Discourse nonce" : "儲存 Discourse nonce 失敗", 27 | "Protocol handler registration requires a secure context (https) or is not supported by your browser" : "通訊協定處理程式註冊需要安全情境 (https) 或您的瀏覽器不支援此功能", 28 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "若您無法存取您的 Discourse 帳號,這可能是因為您的 Discourse 站台無權將 API 金鑰提供給 Nextcloud 站台。", 29 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "要求 Discourse 管理員將此 URI 新增至管理員設定的 \"allowed_user_api_auth_redirects\" 清單中:", 30 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "若您想要使用 Discourse 進行身份驗證,請確保您接受了此頁面頂部的協定註冊。", 31 | "Use the button below to trigger the custom protocol handler registration. If no prompt appears, make sure it is not already registered." : "使用下面的按鈕啟動自訂通訊協定處理程式註冊。如果沒有出現提示,請確定尚未註冊。", 32 | "Register protocol handler" : "註冊通訊協定處理程式", 33 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "使用 Chrome/Chromium 時,您應該會在瀏覽器左上角看到一個彈出式視窗,以授權該頁面開啟 \"web+nextclouddiscourse\" 連結。", 34 | "If you don't see the popup, you can still click on this icon in the address bar." : "若您沒有看到彈出式視窗,您仍然可以點擊地址列中的此圖示。", 35 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "然後授權此頁面開啟 \"web+nextclouddiscourse\" 連結。", 36 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "若您仍然無法註冊協定,請在此頁面上檢查您的設定:", 37 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "使用 Chrome/Chromium 時,您應該會在此頁面頂部看到一條授權列,以授權該頁面開啟 \"web+nextclouddiscourse\" 連結。", 38 | "Enable navigation link" : "啟用導覽連結", 39 | "Discourse instance address" : "Discourse 站台地址", 40 | "Connect to Discourse" : "連線至 Discourse", 41 | "Connected as {username}" : "以 {username} 身份連結", 42 | "Disconnect from Discourse" : "與 Discourse 斷開連線", 43 | "Enable unified search for topics" : "對主題啟用統一搜尋", 44 | "Enable searching for posts" : "啟用搜尋貼文", 45 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "警告,您在搜尋列中輸入的所有東西都會傳送 Discourse 站台。", 46 | "No Discourse account connected" : "未連結至 Discourse 帳號", 47 | "Error connecting to Discourse" : "連結至 Discourse 時發生錯誤", 48 | "No Discourse notifications!" : "無 Discourse 通知!", 49 | "Failed to get Discourse notifications" : "取得 Discourse 通知失敗", 50 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} 個項目在您的管理員收件匣中"], 51 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} 個項目在您的版主收件匣中"] 52 | }, 53 | "nplurals=1; plural=0;"); 54 | -------------------------------------------------------------------------------- /l10n/zh_TW.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Discourse" : "Discourse", 3 | "Error during authentication exchanges" : "身份驗證交換時發生錯誤", 4 | "No API key returned by Discourse" : "Discourse 並未回傳 API 金鑰", 5 | "Discourse read notifications" : "Discourse 讀取通知", 6 | "Discourse notifications" : "Discourse 通知", 7 | "Discourse topics and posts" : "Discourse 主題與貼文", 8 | "Discourse posts" : "Discourse 貼文", 9 | "Discourse topics" : "Discourse 主題", 10 | "posts" : "貼文", 11 | "Bad HTTP method" : "錯誤的 HTTP 方法", 12 | "Bad credentials" : "錯誤的憑證", 13 | "Connected accounts" : "已連線的帳號", 14 | "Discourse integration" : "Discourse 整合", 15 | "Integration of Discourse forum and mailing list management system" : "Discourse 論壇與郵遞論壇系統的整合", 16 | "Discourse integration provides a dashboard widget displaying your important notifications\n and the ability to find topics and posts with Nextcloud's unified search." : "Discourse 整合提供了一個儀表板小工具,顯示您的重要通知\n 以及透過 Nextcloud 的統一搜尋尋找主題與貼文的能力。", 17 | "For example, https://help.nextcloud.com" : "例如 https://help.nextcloud.com", 18 | "Successfully connected to Discourse!" : "成功連結至 Discourse!", 19 | "Discourse API-key could not be obtained:" : "無法擷取 Discouese API 金鑰:", 20 | "Nextcloud Discourse integration on {ncUrl}" : "{ncUrl} 上的 Nextcloud Discourse 的整合", 21 | "Discourse URL is invalid" : "Discourse URL 無效", 22 | "Discourse options saved" : "Discouese 選項已儲存", 23 | "Failed to save Discourse options" : "儲存 Discourse 選項失敗", 24 | "Failed to save Discourse nonce" : "儲存 Discourse nonce 失敗", 25 | "Protocol handler registration requires a secure context (https) or is not supported by your browser" : "通訊協定處理程式註冊需要安全情境 (https) 或您的瀏覽器不支援此功能", 26 | "If you fail getting access to your Discourse account, this is probably because your Discourse instance is not authorized to give API keys to your Nextcloud instance." : "若您無法存取您的 Discourse 帳號,這可能是因為您的 Discourse 站台無權將 API 金鑰提供給 Nextcloud 站台。", 27 | "Ask the Discourse admin to add this URI to the \"allowed_user_api_auth_redirects\" list in admin settings:" : "要求 Discourse 管理員將此 URI 新增至管理員設定的 \"allowed_user_api_auth_redirects\" 清單中:", 28 | "Make sure you accepted the protocol registration on top of this page if you want to authenticate to Discourse." : "若您想要使用 Discourse 進行身份驗證,請確保您接受了此頁面頂部的協定註冊。", 29 | "Use the button below to trigger the custom protocol handler registration. If no prompt appears, make sure it is not already registered." : "使用下面的按鈕啟動自訂通訊協定處理程式註冊。如果沒有出現提示,請確定尚未註冊。", 30 | "Register protocol handler" : "註冊通訊協定處理程式", 31 | "With Chrome/Chromium, you should see a popup on browser top-left to authorize this page to open \"web+nextclouddiscourse\" links." : "使用 Chrome/Chromium 時,您應該會在瀏覽器左上角看到一個彈出式視窗,以授權該頁面開啟 \"web+nextclouddiscourse\" 連結。", 32 | "If you don't see the popup, you can still click on this icon in the address bar." : "若您沒有看到彈出式視窗,您仍然可以點擊地址列中的此圖示。", 33 | "Then authorize this page to open \"web+nextclouddiscourse\" links." : "然後授權此頁面開啟 \"web+nextclouddiscourse\" 連結。", 34 | "If you still don't manage to get the protocol registered, check your settings on this page:" : "若您仍然無法註冊協定,請在此頁面上檢查您的設定:", 35 | "With Firefox, you should see a bar on top of this page to authorize this page to open \"web+nextclouddiscourse\" links." : "使用 Chrome/Chromium 時,您應該會在此頁面頂部看到一條授權列,以授權該頁面開啟 \"web+nextclouddiscourse\" 連結。", 36 | "Enable navigation link" : "啟用導覽連結", 37 | "Discourse instance address" : "Discourse 站台地址", 38 | "Connect to Discourse" : "連線至 Discourse", 39 | "Connected as {username}" : "以 {username} 身份連結", 40 | "Disconnect from Discourse" : "與 Discourse 斷開連線", 41 | "Enable unified search for topics" : "對主題啟用統一搜尋", 42 | "Enable searching for posts" : "啟用搜尋貼文", 43 | "Warning, everything you type in the search bar will be sent to your Discourse instance." : "警告,您在搜尋列中輸入的所有東西都會傳送 Discourse 站台。", 44 | "No Discourse account connected" : "未連結至 Discourse 帳號", 45 | "Error connecting to Discourse" : "連結至 Discourse 時發生錯誤", 46 | "No Discourse notifications!" : "無 Discourse 通知!", 47 | "Failed to get Discourse notifications" : "取得 Discourse 通知失敗", 48 | "_{nb} item in your admins inbox_::_{nb} items in your admins inbox_" : ["{nb} 個項目在您的管理員收件匣中"], 49 | "_{nb} item in your moderators inbox_::_{nb} items in your moderators inbox_" : ["{nb} 個項目在您的版主收件匣中"] 50 | },"pluralForm" :"nplurals=1; plural=0;" 51 | } -------------------------------------------------------------------------------- /lib/AppInfo/Application.php: -------------------------------------------------------------------------------- 1 | registerDashboardWidget(DiscourseWidget::class); 37 | $context->registerDashboardWidget(DiscourseReadNotificationsWidget::class); 38 | $context->registerSearchProvider(DiscourseSearchPostsProvider::class); 39 | $context->registerSearchProvider(DiscourseSearchTopicsProvider::class); 40 | $context->registerReferenceProvider(DiscourseReferenceProvider::class); 41 | } 42 | 43 | public function boot(IBootContext $context): void { 44 | $context->injectFn(Closure::fromCallable([$this, 'registerNavigation'])); 45 | Util::addStyle(self::APP_ID, 'discourse-search'); 46 | } 47 | 48 | public function registerNavigation(IUserSession $userSession, IConfig $config): void { 49 | $user = $userSession->getUser(); 50 | if ($user !== null) { 51 | $userId = $user->getUID(); 52 | $container = $this->getContainer(); 53 | 54 | if ($config->getUserValue($userId, self::APP_ID, 'navigation_enabled', '0') === '1') { 55 | $discourseUrl = $config->getUserValue($userId, self::APP_ID, 'url', ''); 56 | if ($discourseUrl === '') { 57 | return; 58 | } 59 | $container->get(INavigationManager::class)->add(function () use ($container, $discourseUrl) { 60 | $urlGenerator = $container->get(IURLGenerator::class); 61 | $l10n = $container->get(IL10N::class); 62 | return [ 63 | 'id' => self::APP_ID, 64 | 'order' => 10, 65 | 'href' => $discourseUrl, 66 | 'target' => '_blank', 67 | 'icon' => $urlGenerator->imagePath(self::APP_ID, 'app.svg'), 68 | 'name' => $l10n->t('Discourse'), 69 | ]; 70 | }); 71 | } 72 | } 73 | } 74 | } 75 | 76 | -------------------------------------------------------------------------------- /lib/Controller/DiscourseAPIController.php: -------------------------------------------------------------------------------- 1 | accessToken = $this->config->getUserValue($this->userId, Application::APP_ID, 'token'); 37 | if ($this->accessToken !== '') { 38 | $this->accessToken = $crypto->decrypt($this->accessToken); 39 | } 40 | $this->clientID = $this->config->getUserValue($this->userId, Application::APP_ID, 'client_id'); 41 | if ($this->clientID !== '') { 42 | $this->clientID = $crypto->decrypt($this->clientID); 43 | } 44 | $this->discourseUrl = $this->config->getUserValue($this->userId, Application::APP_ID, 'url'); 45 | $this->discourseUsername = $this->config->getUserValue($this->userId, Application::APP_ID, 'user_name'); 46 | } 47 | 48 | /** 49 | * @NoAdminRequired 50 | * 51 | * @return DataResponse 52 | */ 53 | public function getDiscourseUrl(): DataResponse { 54 | return new DataResponse($this->discourseUrl); 55 | } 56 | 57 | /** 58 | * @NoAdminRequired 59 | * 60 | * @return DataResponse 61 | */ 62 | public function getDiscourseUsername(): DataResponse { 63 | return new DataResponse($this->discourseUsername); 64 | } 65 | 66 | /** 67 | * get discourse user avatar 68 | * @NoAdminRequired 69 | * @NoCSRFRequired 70 | * 71 | * @param string $username 72 | * @return DataDisplayResponse 73 | */ 74 | public function getDiscourseAvatar(string $username): DataDisplayResponse { 75 | $avatar = $this->discourseAPIService->getDiscourseAvatar($this->discourseUrl, $this->accessToken, $username); 76 | $headers = []; 77 | if (isset($avatar['mime'])) { 78 | $headers['Content-Type'] = $avatar['mime']; 79 | } 80 | $response = new DataDisplayResponse($avatar['content'] ?? '', Http::STATUS_OK, $headers); 81 | $response->cacheFor(60*60*24); 82 | return $response; 83 | } 84 | 85 | /** 86 | * get todo list 87 | * @NoAdminRequired 88 | * 89 | * @param string $since 90 | * @return DataResponse 91 | */ 92 | public function getNotifications(string $since = ''): DataResponse { 93 | if ($this->accessToken === '' || $this->clientID === '' || !preg_match('/^(https?:\/\/)?[A-Za-z0-9]+\.[A-Za-z0-9].*/', $this->discourseUrl)) { 94 | return new DataResponse('', 400); 95 | } 96 | $result = $this->discourseAPIService->getNotifications($this->discourseUrl, $this->accessToken, $since); 97 | if (!isset($result['error'])) { 98 | $response = new DataResponse($result); 99 | } else { 100 | $response = new DataResponse($result, 401); 101 | } 102 | return $response; 103 | } 104 | 105 | } 106 | -------------------------------------------------------------------------------- /lib/Dashboard/DiscourseReadNotificationsWidget.php: -------------------------------------------------------------------------------- 1 | l10n->t('Discourse read notifications'); 34 | } 35 | 36 | /** 37 | * @inheritDoc 38 | */ 39 | public function getOrder(): int { 40 | return 10; 41 | } 42 | 43 | /** 44 | * @inheritDoc 45 | */ 46 | public function getIconClass(): string { 47 | return 'icon-discourse'; 48 | } 49 | 50 | /** 51 | * @inheritDoc 52 | */ 53 | public function getUrl(): ?string { 54 | return $this->url->linkToRoute('settings.PersonalSettings.index', ['section' => 'connected-accounts']); 55 | } 56 | 57 | /** 58 | * @inheritDoc 59 | */ 60 | public function load(): void { 61 | Util::addScript(Application::APP_ID, Application::APP_ID . '-dashboard'); 62 | Util::addStyle(Application::APP_ID, 'dashboard'); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /lib/Dashboard/DiscourseWidget.php: -------------------------------------------------------------------------------- 1 | l10n->t('Discourse notifications'); 34 | } 35 | 36 | /** 37 | * @inheritDoc 38 | */ 39 | public function getOrder(): int { 40 | return 10; 41 | } 42 | 43 | /** 44 | * @inheritDoc 45 | */ 46 | public function getIconClass(): string { 47 | return 'icon-discourse'; 48 | } 49 | 50 | /** 51 | * @inheritDoc 52 | */ 53 | public function getUrl(): ?string { 54 | return $this->url->linkToRoute('settings.PersonalSettings.index', ['section' => 'connected-accounts']); 55 | } 56 | 57 | /** 58 | * @inheritDoc 59 | */ 60 | public function load(): void { 61 | Util::addScript(Application::APP_ID, Application::APP_ID . '-dashboard'); 62 | Util::addStyle(Application::APP_ID, 'dashboard'); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /lib/Migration/Version2200Date202410231719.php: -------------------------------------------------------------------------------- 1 | config->getAppValue(Application::APP_ID, 'private_key'); 40 | if ($privKey !== '') { 41 | $privKey = $this->crypto->encrypt($privKey); 42 | $this->config->setAppValue(Application::APP_ID, 'private_key', $privKey); 43 | } 44 | 45 | // encrypt user tokens and client_ids 46 | $qbUpdate = $this->connection->getQueryBuilder(); 47 | $qbUpdate->update('preferences') 48 | ->set('configvalue', $qbUpdate->createParameter('updateValue')) 49 | ->where( 50 | $qbUpdate->expr()->eq('appid', $qbUpdate->createNamedParameter(Application::APP_ID, IQueryBuilder::PARAM_STR)) 51 | ) 52 | ->andWhere( 53 | $qbUpdate->expr()->eq('configkey', $qbUpdate->createParameter('updateConfigKey')) 54 | ); 55 | $qbUpdate->andWhere( 56 | $qbUpdate->expr()->eq('userid', $qbUpdate->createParameter('updateUserId')) 57 | ); 58 | 59 | $qbSelect = $this->connection->getQueryBuilder(); 60 | $qbSelect->select(['userid', 'configvalue', 'configkey']) 61 | ->from('preferences') 62 | ->where( 63 | $qbSelect->expr()->eq('appid', $qbSelect->createNamedParameter(Application::APP_ID, IQueryBuilder::PARAM_STR)) 64 | ); 65 | 66 | $or = $qbSelect->expr()->orx(); 67 | $or->add($qbSelect->expr()->eq('configkey', $qbSelect->createNamedParameter('token', IQueryBuilder::PARAM_STR))); 68 | $or->add($qbSelect->expr()->eq('configkey', $qbSelect->createNamedParameter('client_id', IQueryBuilder::PARAM_STR))); 69 | $qbSelect->andWhere($or); 70 | 71 | $qbSelect->andWhere( 72 | $qbSelect->expr()->nonEmptyString('configvalue') 73 | ) 74 | ->andWhere( 75 | $qbSelect->expr()->isNotNull('configvalue') 76 | ); 77 | $req = $qbSelect->executeQuery(); 78 | while ($row = $req->fetch()) { 79 | $userId = $row['userid']; 80 | $configKey = $row['configkey']; 81 | $storedClearValue = $row['configvalue']; 82 | $encryptedValue = $this->crypto->encrypt($storedClearValue); 83 | $qbUpdate->setParameter('updateUserId', $userId, IQueryBuilder::PARAM_STR); 84 | $qbUpdate->setParameter('updateConfigKey', $configKey, IQueryBuilder::PARAM_STR); 85 | $qbUpdate->setParameter('updateValue', $encryptedValue, IQueryBuilder::PARAM_STR); 86 | $qbUpdate->executeStatement(); 87 | } 88 | $req->closeCursor(); 89 | return null; 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /lib/Reference/DiscourseReferenceProvider.php: -------------------------------------------------------------------------------- 1 | l10n->t('Discourse topics and posts'); 42 | } 43 | 44 | /** 45 | * @inheritDoc 46 | */ 47 | public function getOrder(): int { 48 | return 10; 49 | } 50 | 51 | /** 52 | * @inheritDoc 53 | */ 54 | public function getIconUrl(): string { 55 | return $this->urlGenerator->getAbsoluteURL( 56 | $this->urlGenerator->imagePath(Application::APP_ID, 'app-dark.svg') 57 | ); 58 | } 59 | 60 | /** 61 | * @inheritDoc 62 | */ 63 | public function getSupportedSearchProviderIds(): array { 64 | if ($this->userId !== null) { 65 | $ids = []; 66 | $searchTopicsEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'search_topics_enabled', '0') === '1'; 67 | $searchPostsEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'search_posts_enabled', '0') === '1'; 68 | if ($searchPostsEnabled) { 69 | $ids[] = 'discourse-search-post'; 70 | } 71 | if ($searchTopicsEnabled) { 72 | $ids[] = 'discourse-search-topic'; 73 | } 74 | return $ids; 75 | } 76 | return ['discourse-search-post', 'discourse-search-topic']; 77 | } 78 | 79 | /** 80 | * @inheritDoc 81 | */ 82 | public function matchReference(string $referenceText): bool { 83 | if ($this->userId !== null) { 84 | $linkPreviewEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; 85 | if (!$linkPreviewEnabled) { 86 | return false; 87 | } 88 | } 89 | return false; 90 | } 91 | 92 | /** 93 | * @inheritDoc 94 | */ 95 | public function resolveReference(string $referenceText): ?IReference { 96 | //if ($this->matchReference($referenceText)) { 97 | //} 98 | 99 | return null; 100 | } 101 | 102 | /** 103 | * We use the userId here because when connecting/disconnecting from the GitHub account, 104 | * we want to invalidate all the user cache and this is only possible with the cache prefix 105 | * @inheritDoc 106 | */ 107 | public function getCachePrefix(string $referenceId): string { 108 | return $this->userId ?? ''; 109 | } 110 | 111 | /** 112 | * We don't use the userId here but rather a reference unique id 113 | * @inheritDoc 114 | */ 115 | public function getCacheKey(string $referenceId): ?string { 116 | return $referenceId; 117 | } 118 | 119 | /** 120 | * @param string $userId 121 | * @return void 122 | */ 123 | public function invalidateUserCache(string $userId): void { 124 | $this->referenceManager->invalidateCache($userId); 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /lib/Search/DiscourseSearchPostsProvider.php: -------------------------------------------------------------------------------- 1 | l10n->t('Discourse posts'); 48 | } 49 | 50 | /** 51 | * @inheritDoc 52 | */ 53 | public function getOrder(string $route, array $routeParameters): int { 54 | if (strpos($route, Application::APP_ID . '.') === 0) { 55 | // Active app, prefer Discourse results 56 | return -1; 57 | } 58 | 59 | return 20; 60 | } 61 | 62 | /** 63 | * @inheritDoc 64 | */ 65 | public function search(IUser $user, ISearchQuery $query): SearchResult { 66 | if (!$this->appManager->isEnabledForUser(Application::APP_ID, $user)) { 67 | return SearchResult::complete($this->getName(), []); 68 | } 69 | 70 | $limit = $query->getLimit(); 71 | $term = $query->getTerm(); 72 | $offset = $query->getCursor(); 73 | $offset = $offset ? intval($offset) : 0; 74 | 75 | $theme = $this->config->getUserValue($user->getUID(), 'accessibility', 'theme'); 76 | $thumbnailUrl = ($theme === 'dark') 77 | ? $this->urlGenerator->imagePath(Application::APP_ID, 'app.svg') 78 | : $this->urlGenerator->imagePath(Application::APP_ID, 'app-dark.svg'); 79 | 80 | $discourseUrl = $this->config->getUserValue($user->getUID(), Application::APP_ID, 'url'); 81 | $accessToken = $this->config->getUserValue($user->getUID(), Application::APP_ID, 'token'); 82 | if ($accessToken !== '') { 83 | $accessToken = $this->crypto->decrypt($accessToken); 84 | } 85 | 86 | $searchPostsEnabled = $this->config->getUserValue($user->getUID(), Application::APP_ID, 'search_posts_enabled', '0') === '1'; 87 | if ($accessToken === '' || !$searchPostsEnabled) { 88 | return SearchResult::paginated($this->getName(), [], 0); 89 | } 90 | 91 | $searchResults = $this->discourseAPIService->searchPosts($discourseUrl, $accessToken, $term, $offset, $limit); 92 | 93 | if (isset($searchResults['error'])) { 94 | return SearchResult::paginated($this->getName(), [], 0); 95 | } 96 | 97 | $formattedResults = array_map(function (array $entry) use ($thumbnailUrl, $discourseUrl): SearchResultEntry { 98 | return new SearchResultEntry( 99 | $this->getThumbnailUrl($entry, $thumbnailUrl), 100 | $this->getMainText($entry), 101 | $this->getSubline($entry), 102 | $this->getLinkToDiscourse($entry, $discourseUrl), 103 | '', 104 | true 105 | ); 106 | }, $searchResults); 107 | 108 | return SearchResult::paginated( 109 | $this->getName(), 110 | $formattedResults, 111 | $offset + $limit 112 | ); 113 | } 114 | 115 | /** 116 | * @param array $entry 117 | * @return string 118 | */ 119 | protected function getMainText(array $entry): string { 120 | return $entry['blurb'] ?? $entry['username']; 121 | } 122 | 123 | /** 124 | * @param array $entry 125 | * @return string 126 | */ 127 | protected function getSubline(array $entry): string { 128 | return '#' . $entry['topic_id']; 129 | } 130 | 131 | /** 132 | * @param array $entry 133 | * @param string $url 134 | * @return string 135 | */ 136 | protected function getLinkToDiscourse(array $entry, string $url): string { 137 | return $url . '/t/dum/' . $entry['topic_id']; 138 | } 139 | 140 | /** 141 | * @param array $entry 142 | * @param string $thumbnailUrl 143 | * @return string 144 | */ 145 | protected function getThumbnailUrl(array $entry, string $thumbnailUrl): string { 146 | return isset($entry['username']) 147 | ? $this->urlGenerator->linkToRouteAbsolute('integration_discourse.discourseAPI.getDiscourseAvatar', ['username' => $entry['username']]) 148 | : $thumbnailUrl; 149 | } 150 | } 151 | -------------------------------------------------------------------------------- /lib/Search/DiscourseSearchTopicsProvider.php: -------------------------------------------------------------------------------- 1 | l10n->t('Discourse topics'); 48 | } 49 | 50 | /** 51 | * @inheritDoc 52 | */ 53 | public function getOrder(string $route, array $routeParameters): int { 54 | if (strpos($route, Application::APP_ID . '.') === 0) { 55 | // Active app, prefer Discourse results 56 | return -1; 57 | } 58 | 59 | return 20; 60 | } 61 | 62 | /** 63 | * @inheritDoc 64 | */ 65 | public function search(IUser $user, ISearchQuery $query): SearchResult { 66 | if (!$this->appManager->isEnabledForUser(Application::APP_ID, $user)) { 67 | return SearchResult::complete($this->getName(), []); 68 | } 69 | 70 | $limit = $query->getLimit(); 71 | $term = $query->getTerm(); 72 | $offset = $query->getCursor(); 73 | $offset = $offset ? intval($offset) : 0; 74 | 75 | $discourseUrl = $this->config->getUserValue($user->getUID(), Application::APP_ID, 'url'); 76 | $accessToken = $this->config->getUserValue($user->getUID(), Application::APP_ID, 'token'); 77 | if ($accessToken !== '') { 78 | $accessToken = $this->crypto->decrypt($accessToken); 79 | } 80 | 81 | $searchTopicsEnabled = $this->config->getUserValue($user->getUID(), Application::APP_ID, 'search_topics_enabled', '0') === '1'; 82 | if ($accessToken === '' || !$searchTopicsEnabled) { 83 | return SearchResult::paginated($this->getName(), [], 0); 84 | } 85 | 86 | $searchResults = $this->discourseAPIService->searchTopics($discourseUrl, $accessToken, $term, $offset, $limit); 87 | 88 | if (isset($searchResults['error'])) { 89 | return SearchResult::paginated($this->getName(), [], 0); 90 | } 91 | 92 | $formattedResults = array_map(function (array $entry) use ($discourseUrl): SearchResultEntry { 93 | return new SearchResultEntry( 94 | $this->getThumbnailUrl($entry), 95 | $this->getMainText($entry), 96 | $this->getSubline($entry), 97 | $this->getLinkToDiscourse($entry, $discourseUrl), 98 | 'icon-discourse-search-fallback', 99 | true 100 | ); 101 | }, $searchResults); 102 | 103 | return SearchResult::paginated( 104 | $this->getName(), 105 | $formattedResults, 106 | $offset + $limit 107 | ); 108 | } 109 | 110 | /** 111 | * @param array $entry 112 | * @return string 113 | */ 114 | protected function getMainText(array $entry): string { 115 | return $entry['title']; 116 | } 117 | 118 | /** 119 | * @param array $entry 120 | * @return string 121 | */ 122 | protected function getSubline(array $entry): string { 123 | return '#' . $entry['id'] . ' (' . $entry['posts_count'] . ' ' . $this->l10n->t('posts') . ')'; 124 | } 125 | 126 | /** 127 | * @param array $entry 128 | * @param string $url 129 | * @return string 130 | */ 131 | protected function getLinkToDiscourse(array $entry, string $url): string { 132 | return $url . '/t/' . $entry['slug'] . '/' . $entry['id']; 133 | } 134 | 135 | /** 136 | * @param array $entry 137 | * @return string 138 | */ 139 | protected function getThumbnailUrl(array $entry): string { 140 | return $this->urlGenerator->getAbsoluteURL( 141 | $this->urlGenerator->imagePath(Application::APP_ID, 'app-dark.svg') 142 | ); 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /lib/Settings/Personal.php: -------------------------------------------------------------------------------- 1 | config->getUserValue($this->userId, Application::APP_ID, 'token'); 37 | if ($token !== '') { 38 | $token = $this->crypto->decrypt($token); 39 | } 40 | $url = $this->config->getUserValue($this->userId, Application::APP_ID, 'url'); 41 | $userName = $this->config->getUserValue($this->userId, Application::APP_ID, 'user_name'); 42 | $navigationEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'navigation_enabled', '0'); 43 | $searchTopicsEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'search_topics_enabled', '0'); 44 | $searchPostsEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'search_posts_enabled', '0'); 45 | 46 | // for OAuth 47 | $clientID = $this->config->getUserValue($this->userId, Application::APP_ID, 'client_id'); 48 | if ($clientID !== '') { 49 | $clientID = $this->crypto->decrypt($clientID); 50 | } 51 | $pubKey = $this->config->getAppValue(Application::APP_ID, 'public_key'); 52 | $privKey = $this->config->getAppValue(Application::APP_ID, 'private_key'); 53 | if ($privKey !== '') { 54 | $privKey = $this->crypto->decrypt($privKey); 55 | } 56 | 57 | if ($clientID === '') { 58 | // random string of 32 chars length 59 | $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyz'; 60 | $clientID = $this->crypto->encrypt(substr(str_shuffle($permitted_chars), 0, 32)); 61 | $this->config->setUserValue($this->userId, Application::APP_ID, 'client_id', $clientID); 62 | } 63 | if ($pubKey === '' || $privKey === '') { 64 | $rsa = new RSA(); 65 | $rsa->setPrivateKeyFormat(RSA::PRIVATE_FORMAT_PKCS1); 66 | $rsa->setPublicKeyFormat(RSA::PUBLIC_FORMAT_PKCS1); 67 | $keys = $rsa->createKey(2048); 68 | $pubKey = $keys['publickey']; 69 | $privKey = $this->crypto->encrypt($keys['privatekey']); 70 | 71 | $this->config->setAppValue(Application::APP_ID, 'public_key', $pubKey); 72 | $this->config->setAppValue(Application::APP_ID, 'private_key', $privKey); 73 | } 74 | 75 | $userConfig = [ 76 | 'token' => $token, 77 | 'url' => $url, 78 | 'client_id' => $clientID, 79 | 'public_key' => $pubKey, 80 | 'user_name' => $userName, 81 | 'navigation_enabled' => ($navigationEnabled === '1'), 82 | 'search_posts_enabled' => ($searchPostsEnabled === '1'), 83 | 'search_topics_enabled' => ($searchTopicsEnabled === '1'), 84 | ]; 85 | $this->initialStateService->provideInitialState('user-config', $userConfig); 86 | return new TemplateResponse(Application::APP_ID, 'personalSettings'); 87 | } 88 | 89 | public function getSection(): string { 90 | return 'connected-accounts'; 91 | } 92 | 93 | public function getPriority(): int { 94 | return 10; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /lib/Settings/PersonalSection.php: -------------------------------------------------------------------------------- 1 | l->t('Connected accounts'); 36 | } 37 | 38 | /** 39 | * @return int whether the form should be rather on the top or bottom of 40 | * the settings navigation. The sections are arranged in ascending order of 41 | * the priority values. It is required to return a value between 0 and 99. 42 | */ 43 | public function getPriority(): int { 44 | return 80; 45 | } 46 | 47 | /** 48 | * @return ?string The relative path to a an icon describing the section 49 | */ 50 | public function getIcon(): ?string { 51 | return $this->urlGenerator->imagePath('core', 'categories/integration.svg'); 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | app_name=integration_discourse 5 | app_version=$(version) 6 | project_dir=. 7 | build_dir=/tmp/build 8 | sign_dir=/tmp/sign 9 | cert_dir=$(HOME)/.nextcloud/certificates 10 | webserveruser ?= www-data 11 | occ_dir ?= /var/www/html/dev/server 12 | 13 | build_tools_directory=$(CURDIR)/build/tools 14 | npm=$(shell which npm 2> /dev/null) 15 | composer=$(shell which composer 2> /dev/null) 16 | 17 | all: build 18 | 19 | .PHONY: build 20 | build: 21 | ifneq (,$(wildcard $(CURDIR)/composer.json)) 22 | make composer 23 | endif 24 | ifneq (,$(wildcard $(CURDIR)/package.json)) 25 | make npm 26 | endif 27 | 28 | .PHONY: dev 29 | dev: 30 | ifneq (,$(wildcard $(CURDIR)/composer.json)) 31 | make composer 32 | endif 33 | ifneq (,$(wildcard $(CURDIR)/package.json)) 34 | make npm-dev 35 | endif 36 | 37 | # Installs and updates the composer dependencies. If composer is not installed 38 | # a copy is fetched from the web 39 | .PHONY: composer 40 | composer: 41 | ifeq (, $(composer)) 42 | @echo "No composer command available, downloading a copy from the web" 43 | mkdir -p $(build_tools_directory) 44 | curl -sS https://getcomposer.org/installer | php 45 | mv composer.phar $(build_tools_directory) 46 | php $(build_tools_directory)/composer.phar install --prefer-dist 47 | else 48 | composer install --prefer-dist 49 | endif 50 | 51 | .PHONY: npm 52 | npm: 53 | $(npm) ci 54 | $(npm) run build 55 | 56 | .PHONY: npm-dev 57 | npm-dev: 58 | $(npm) ci 59 | $(npm) run dev 60 | 61 | clean: 62 | sudo rm -rf $(build_dir) 63 | sudo rm -rf $(sign_dir) 64 | 65 | appstore: clean 66 | mkdir -p $(sign_dir) 67 | mkdir -p $(build_dir) 68 | @rsync -a \ 69 | --exclude=.git \ 70 | --exclude=appinfo/signature.json \ 71 | --exclude=*.swp \ 72 | --exclude=build \ 73 | --exclude=.gitignore \ 74 | --exclude=.travis.yml \ 75 | --exclude=.scrutinizer.yml \ 76 | --exclude=CONTRIBUTING.md \ 77 | --exclude=composer.json \ 78 | --exclude=composer.lock \ 79 | --exclude=composer.phar \ 80 | --exclude=package.json \ 81 | --exclude=package-lock.json \ 82 | --exclude=js/node_modules \ 83 | --exclude=node_modules \ 84 | --exclude=/src \ 85 | --exclude=translationfiles \ 86 | --exclude=webpack.* \ 87 | --exclude=.eslintrc.js \ 88 | --exclude=stylelint.config.js \ 89 | --exclude=.github \ 90 | --exclude=.gitlab-ci.yml \ 91 | --exclude=crowdin.yml \ 92 | --exclude=tools \ 93 | --exclude=.tx \ 94 | --exclude=.l10nignore \ 95 | --exclude=l10n/.tx \ 96 | --exclude=l10n/l10n.pl \ 97 | --exclude=l10n/templates \ 98 | --exclude=l10n/*.sh \ 99 | --exclude=l10n/[a-z][a-z] \ 100 | --exclude=l10n/[a-z][a-z]_[A-Z][A-Z] \ 101 | --exclude=l10n/no-php \ 102 | --exclude=makefile \ 103 | --exclude=screenshots \ 104 | --exclude=phpunit*xml \ 105 | --exclude=tests \ 106 | --exclude=ci \ 107 | --exclude=vendor/bin \ 108 | $(project_dir) $(sign_dir)/$(app_name) 109 | @if [ -f $(cert_dir)/$(app_name).key ]; then \ 110 | sudo chown $(webserveruser) $(sign_dir)/$(app_name)/appinfo ;\ 111 | sudo -u $(webserveruser) php $(occ_dir)/occ integrity:sign-app --privateKey=$(cert_dir)/$(app_name).key --certificate=$(cert_dir)/$(app_name).crt --path=$(sign_dir)/$(app_name)/ ;\ 112 | sudo chown -R $(USER) $(sign_dir)/$(app_name)/appinfo ;\ 113 | else \ 114 | echo "!!! WARNING signature key not found" ;\ 115 | fi 116 | tar -czf $(build_dir)/$(app_name)-$(app_version).tar.gz \ 117 | -C $(sign_dir) $(app_name) 118 | @if [ -f $(cert_dir)/$(app_name).key ]; then \ 119 | echo NEXTCLOUD------------------------------------------ ;\ 120 | openssl dgst -sha512 -sign $(cert_dir)/$(app_name).key $(build_dir)/$(app_name)-$(app_version).tar.gz | openssl base64 | tee $(build_dir)/sign.txt ;\ 121 | fi 122 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "integration_discourse", 3 | "version": "0.0.1", 4 | "description": "Discourse integration", 5 | "main": "index.js", 6 | "directories": { 7 | "test": "tests" 8 | }, 9 | "scripts": { 10 | "build": "NODE_ENV=production webpack --progress --config webpack.js", 11 | "dev": "NODE_ENV=development webpack --progress --config webpack.js", 12 | "watch": "NODE_ENV=development webpack --progress --watch --config webpack.js", 13 | "lint": "eslint --ext .js,.vue src", 14 | "lint:fix": "eslint --ext .js,.vue src --fix", 15 | "stylelint": "stylelint src/**/*.vue src/**/*.scss src/**/*.css", 16 | "stylelint:fix": "stylelint src/**/*.vue src/**/*.scss src/**/*.css --fix" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "https://github.com/nextcloud/integration_discourse" 21 | }, 22 | "keywords": [ 23 | "discourse" 24 | ], 25 | "author": "Julien Veyssier", 26 | "license": "AGPL-3.0", 27 | "bugs": { 28 | "url": "https://github.com/nextcloud/integration_discourse/issues" 29 | }, 30 | "homepage": "https://github.com/nextcloud/integration_discourse", 31 | "browserslist": [ 32 | "extends @nextcloud/browserslist-config" 33 | ], 34 | "engines": { 35 | "node": "^20.0.0", 36 | "npm": "^9.0.0 || ^10.0.0" 37 | }, 38 | "dependencies": { 39 | "@nextcloud/auth": "^2.4.0", 40 | "@nextcloud/axios": "^2.5.1", 41 | "@nextcloud/dialogs": "^6.1.1", 42 | "@nextcloud/initial-state": "^2.2.0", 43 | "@nextcloud/l10n": "^3.1.0", 44 | "@nextcloud/moment": "^1.3.2", 45 | "@nextcloud/password-confirmation": "^5.3.1", 46 | "@nextcloud/router": "^3.0.1", 47 | "@nextcloud/vue": "^8.22.0", 48 | "vue": "^2.6.14", 49 | "vue-material-design-icons": "^5.3.1" 50 | }, 51 | "devDependencies": { 52 | "@nextcloud/babel-config": "^1.2.0", 53 | "@nextcloud/browserslist-config": "^3.0.1", 54 | "@nextcloud/eslint-config": "^8.4.1", 55 | "@nextcloud/stylelint-config": "^3.0.1", 56 | "@nextcloud/webpack-vue-config": "^6.2.0", 57 | "eslint-webpack-plugin": "^4.2.0", 58 | "stylelint-webpack-plugin": "^5.0.1" 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/bootstrap.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | 6 | import Vue from 'vue' 7 | import { translate, translatePlural } from '@nextcloud/l10n' 8 | 9 | Vue.prototype.t = translate 10 | Vue.prototype.n = translatePlural 11 | Vue.prototype.OC = window.OC 12 | Vue.prototype.OCA = window.OCA 13 | -------------------------------------------------------------------------------- /src/components/icons/DiscourseIcon.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 32 | 33 | 52 | -------------------------------------------------------------------------------- /src/dashboard.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | 6 | import { getCSPNonce } from '@nextcloud/auth' 7 | import Vue from 'vue' 8 | import './bootstrap.js' 9 | import Dashboard from './views/Dashboard.vue' 10 | 11 | __webpack_nonce__ = getCSPNonce() // eslint-disable-line 12 | 13 | document.addEventListener('DOMContentLoaded', function() { 14 | if (!OCA.Dashboard) { 15 | return 16 | } 17 | 18 | OCA.Dashboard.register('discourse_notifications', (el, { widget }) => { 19 | const View = Vue.extend(Dashboard) 20 | return new View({ 21 | propsData: { 22 | title: widget.title, 23 | widgetType: 'unread', 24 | }, 25 | }).$mount(el) 26 | }) 27 | 28 | OCA.Dashboard.register('discourse_notifications_read', (el, { widget }) => { 29 | const View = Vue.extend(Dashboard) 30 | return new View({ 31 | propsData: { 32 | title: widget.title, 33 | widgetType: 'read', 34 | }, 35 | }).$mount(el) 36 | }) 37 | }) 38 | -------------------------------------------------------------------------------- /src/personalSettings.js: -------------------------------------------------------------------------------- 1 | /* jshint esversion: 6 */ 2 | 3 | /** 4 | * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors 5 | * SPDX-License-Identifier: AGPL-3.0-or-later 6 | */ 7 | 8 | import Vue from 'vue' 9 | import './bootstrap.js' 10 | import PersonalSettings from './components/PersonalSettings.vue' 11 | 12 | // eslint-disable-next-line 13 | 'use strict' 14 | 15 | // eslint-disable-next-line 16 | new Vue({ 17 | el: '#discourse_prefs', 18 | render: h => h(PersonalSettings), 19 | }) 20 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | 6 | let mytimer = 0 7 | export function delay(callback, ms) { 8 | return function() { 9 | const context = this 10 | const args = arguments 11 | clearTimeout(mytimer) 12 | mytimer = setTimeout(function() { 13 | callback.apply(context, args) 14 | }, ms || 0) 15 | } 16 | } 17 | 18 | export function detectBrowser() { 19 | // Opera 8.0+ 20 | // eslint-disable-next-line 21 | if ((!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0) { 22 | return 'opera' 23 | } 24 | 25 | // Firefox 1.0+ 26 | if (typeof InstallTrigger !== 'undefined') { 27 | return 'firefox' 28 | } 29 | 30 | // Chrome 1 - 79 31 | // eslint-disable-next-line 32 | if (!!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime)) { 33 | return 'chrome' 34 | } 35 | 36 | // Safari 3.0+ "[object HTMLElementConstructor]" 37 | // eslint-disable-next-line 38 | if (/constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === '[object SafariRemoteNotification]'; })(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification))) { 39 | return 'safari' 40 | } 41 | 42 | // Internet Explorer 6-11 43 | // eslint-disable-next-line 44 | if (/*@cc_on!@*/false || !!document.documentMode) { 45 | return 'ie' 46 | } 47 | 48 | // Edge 20+ 49 | // eslint-disable-next-line 50 | if ((typeof isIE === 'undefined' || !isIE) && !!window.StyleMedia) { 51 | return 'edge' 52 | } 53 | 54 | // Edge (based on chromium) detection 55 | // eslint-disable-next-line 56 | if (typeof isChrome !== 'undefined' && isChrome && (navigator.userAgent.indexOf('Edg') != -1)) { 57 | return 'edge-chromium' 58 | } 59 | 60 | // Blink engine detection 61 | // eslint-disable-next-line 62 | if (((typeof isChrome !== 'undefined' && isChrome) || (typeof isOpera !== 'undefined' && isOpera)) 63 | && !!window.CSS 64 | ) { 65 | return 'blink' 66 | } 67 | return 'unknown browser' 68 | } 69 | -------------------------------------------------------------------------------- /stylelint.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | module.exports = { 6 | extends: 'stylelint-config-recommended-vue', 7 | rules: { 8 | 'selector-type-no-unknown': null, 9 | 'rule-empty-line-before': [ 10 | 'always', 11 | { 12 | ignore: ['after-comment', 'inside-block'], 13 | }, 14 | ], 15 | 'declaration-empty-line-before': [ 16 | 'never', 17 | { 18 | ignore: ['after-declaration'], 19 | }, 20 | ], 21 | 'comment-empty-line-before': null, 22 | 'selector-type-case': null, 23 | 'no-descending-specificity': null, 24 | 'selector-pseudo-element-no-unknown': [ 25 | true, 26 | { 27 | ignorePseudoElements: ['v-deep'], 28 | }, 29 | ], 30 | }, 31 | plugins: ['stylelint-scss'], 32 | } 33 | -------------------------------------------------------------------------------- /templates/personalSettings.php: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 | -------------------------------------------------------------------------------- /webpack.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | const path = require('path') 6 | const webpackConfig = require('@nextcloud/webpack-vue-config') 7 | const ESLintPlugin = require('eslint-webpack-plugin') 8 | const StyleLintPlugin = require('stylelint-webpack-plugin') 9 | 10 | const buildMode = process.env.NODE_ENV 11 | const isDev = buildMode === 'development' 12 | webpackConfig.devtool = isDev ? 'cheap-source-map' : 'source-map' 13 | 14 | webpackConfig.stats = { 15 | colors: true, 16 | modules: false, 17 | } 18 | 19 | const appId = 'integration_discourse' 20 | webpackConfig.entry = { 21 | personalSettings: { import: path.join(__dirname, 'src', 'personalSettings.js'), filename: appId + '-personalSettings.js' }, 22 | dashboard: { import: path.join(__dirname, 'src', 'dashboard.js'), filename: appId + '-dashboard.js' }, 23 | } 24 | 25 | webpackConfig.plugins.push( 26 | new ESLintPlugin({ 27 | extensions: ['js', 'vue'], 28 | files: 'src', 29 | failOnError: !isDev, 30 | }) 31 | ) 32 | webpackConfig.plugins.push( 33 | new StyleLintPlugin({ 34 | files: 'src/**/*.{css,scss,vue}', 35 | failOnError: !isDev, 36 | }), 37 | ) 38 | module.exports = webpackConfig 39 | --------------------------------------------------------------------------------