diff --git a/.agents/skills b/.agents/skills new file mode 120000 index 0000000000000..0d981c82f4683 --- /dev/null +++ b/.agents/skills @@ -0,0 +1 @@ +../.skills/ \ No newline at end of file diff --git a/.claude/skills b/.claude/skills new file mode 120000 index 0000000000000..4ca0ec66cd63a --- /dev/null +++ b/.claude/skills @@ -0,0 +1 @@ +../.skills \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index de3d82c452606..176ede89e7d57 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -5,7 +5,7 @@ "workspaceFolder": "/workspace/discourse", "postStartCommand": "./.devcontainer/scripts/start.rb", "forwardPorts": [ - 9292, // bin/unicorn + 9292, // bin/pitchfork 3000, // bin/rails s 4200, // ember-cli 8025, // mailhog diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index d948dcc053503..092b0b0b66893 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -85,3 +85,6 @@ e41897a3066199f3b7f4c019fb638615dfe1f007 # remove route-template usage 88d4e242ead238b353f441533a0c4b8ce3fa1f7b + +# MT: Switch to nested module style across migrations/ (#38564) +89f26da39d8c977c3dde7ef7e0a5c3f2a4b58e44 diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1e55344b30a96..4cb14690ae7e8 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,7 +16,7 @@ updates: prefix: "DEPS" cooldown: default-days: 7 - open-pull-requests-limit: 20 + open-pull-requests-limit: 40 versioning-strategy: lockfile-only allow: - dependency-type: direct @@ -74,10 +74,9 @@ updates: prefix: "DEPS" cooldown: default-days: 7 - exclude: [ - "@discourse/*" - ] - open-pull-requests-limit: 20 + exclude: + - "@discourse/*" + open-pull-requests-limit: 40 versioning-strategy: increase ignore: - dependency-name: "webpack" # Recent versions have bugs with `/static` loading. We're working to move away from webpack anyway. diff --git a/.github/workflows/dependabot-pnpm-dedupe.yml b/.github/workflows/dependabot-pnpm-dedupe.yml index bf112b0e78856..21e4f11f5b593 100644 --- a/.github/workflows/dependabot-pnpm-dedupe.yml +++ b/.github/workflows/dependabot-pnpm-dedupe.yml @@ -23,10 +23,10 @@ jobs: token: ${{ secrets.GH_PUSH_TOKEN }} - name: Set up pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup@v5 - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 22 diff --git a/.github/workflows/developer-docs-lint.yml b/.github/workflows/developer-docs-lint.yml index 522e74821cbf8..5054a5fa6fa62 100644 --- a/.github/workflows/developer-docs-lint.yml +++ b/.github/workflows/developer-docs-lint.yml @@ -31,13 +31,14 @@ jobs: steps: - uses: actions/checkout@v6 + with: + fetch-depth: 1 - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@v5 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v6 with: - cache: "pnpm" - cache-dependency-path: docs/developer-guides/pnpm-lock.yaml + node-version: 24 - name: Install dependencies run: pnpm install --frozen-lockfile diff --git a/.github/workflows/licenses.yml b/.github/workflows/licenses.yml index 724627b6f2a4e..29649f55a5377 100644 --- a/.github/workflows/licenses.yml +++ b/.github/workflows/licenses.yml @@ -32,7 +32,7 @@ jobs: git config --global user.name "Discourse CI" - name: Bundler cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: vendor/bundle key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }} diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 6e6778f9ca0fd..54bca5fcbf799 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -72,7 +72,11 @@ jobs: - name: ESLint if: ${{ !cancelled() }} - run: pnpm lint:js + run: pnpm lint:js --max-warnings 0 + + - name: Types + if: ${{ !cancelled() }} + run: pnpm lint:types - name: Prettier if: ${{ !cancelled() }} @@ -95,7 +99,3 @@ jobs: - name: English locale lint (core plugins) if: ${{ !cancelled() }} run: bundle exec ruby script/i18n_lint.rb "plugins/**/locales/{client,server}.en.yml" - - - name: Types - if: ${{ !cancelled() }} - run: pnpm lint:types diff --git a/.github/workflows/migration-tests.yml b/.github/workflows/migration-tests.yml index 996c1091f9869..56ed22a467050 100644 --- a/.github/workflows/migration-tests.yml +++ b/.github/workflows/migration-tests.yml @@ -77,7 +77,7 @@ jobs: run: echo "cpu-cores=$(nproc)" >> $GITHUB_OUTPUT - name: Fetch app state cache - uses: actions/cache@v4 + uses: actions/cache@v5 id: app-cache with: path: tmp/app-cache @@ -112,12 +112,35 @@ jobs: - name: Validate IntermediateDB schema run: | + # Show structured differences between DSL config and database + migrations/bin/cli schema diff --db=intermediate_db || true + + # Regenerate schema from DSL config migrations/bin/cli schema generate --db=intermediate_db - if [ ! -z "$(git status --porcelain migrations/db/intermediate_db_schema/)" ]; then + # Check if generated output matches what's committed + if [ ! -z "$(git status --porcelain migrations/db/intermediate_db_schema/ migrations/lib/database/intermediate_db/ migrations/lib/database/intermediate_db/enums/)" ]; then + echo "" + echo "==========================================" echo "IntermediateDB schema is not up to date." - echo "---------------------------------------------" - git -c color.ui=always diff migrations/db/intermediate_db_schema/ + echo "==========================================" + echo "" + echo "The generated schema files differ from what is committed." + echo "This usually means the schema DSL config or the database" + echo "structure changed without regenerating." + echo "" + echo "To fix:" + echo " 1. Run: migrations/bin/cli schema diff" + echo " to see what changed between config and database" + echo " 2. Update config files in migrations/config/schema/intermediate_db/" + echo " - New tables: migrations/bin/cli schema add " + echo " - Ignore tables: migrations/bin/cli schema ignore
--reason '...'" + echo " - New columns: add to the table's include list or ignore with reason" + echo " 3. Run: migrations/bin/cli schema generate" + echo " 4. Commit the updated config and generated files" + echo "" + echo "Generated file diff:" + git -c color.ui=always diff -- migrations/db/intermediate_db_schema/ migrations/lib/database/intermediate_db/ migrations/lib/database/intermediate_db/enums/ exit 1 fi diff --git a/.github/workflows/patch-triage.yml b/.github/workflows/patch-triage.yml new file mode 100644 index 0000000000000..61b3e64b41528 --- /dev/null +++ b/.github/workflows/patch-triage.yml @@ -0,0 +1,159 @@ +# Patch Triage +# +# Runs on every non-draft pull request. Fetches the PR diff and sends it to +# the patch-triage VM for analysis. Results are posted back as a GitHub Check +# Run — staff can click "Details" to see the full review in patch-triage +# (login required). +# +# Also notifies the VM when a PR is closed (merged or not) so patch-triage +# can auto-resolve the associated record. + +name: Patch Triage + +on: + pull_request: + types: [opened, synchronize, ready_for_review, closed] + workflow_dispatch: + inputs: + pr_number: + description: "PR number to re-scan" + required: true + type: string + +permissions: + statuses: write + pull-requests: read + +jobs: + pr-closed: + if: ${{ github.event_name == 'pull_request' && github.event.action == 'closed' }} + runs-on: ubuntu-latest + + steps: + - name: Notify patch-triage of PR close + env: + GITHUB_SCAN_SECRET: ${{ secrets.SCAN_SECRET }} + VM_SCAN_URL: ${{ secrets.VM_SCAN_URL }} + PR_NUMBER: ${{ github.event.pull_request.number }} + REPO: ${{ github.repository }} + MERGED: ${{ github.event.pull_request.merged }} + shell: ruby {0} + run: | + require "json" + require "openssl" + require "net/http" + + vm_url = ENV["VM_SCAN_URL"].to_s + secret = ENV["GITHUB_SCAN_SECRET"].to_s + + if vm_url.empty? || secret.empty? + puts "Security scan not configured — skipping" + exit 0 + end + + payload = JSON.generate( + pr_number: ENV["PR_NUMBER"], + repo: ENV["REPO"], + merged: ENV["MERGED"] == "true", + ) + + sig = "sha256=" + OpenSSL::HMAC.hexdigest("SHA256", secret, payload) + + uri = URI("#{vm_url}/pr-closed") + req = Net::HTTP::Post.new(uri) + req["Content-Type"] = "application/json" + req["X-Scan-Signature"] = sig + req.body = payload + + res = Net::HTTP.start(uri.host, uri.port) { |h| h.request(req) } + abort "VM returned #{res.code}: #{res.body}" unless res.is_a?(Net::HTTPSuccess) + + security-scan: + if: ${{ github.event_name == 'workflow_dispatch' || (github.event.action != 'closed' && !github.event.pull_request.draft) }} + runs-on: ubuntu-latest + + steps: + - name: Resolve PR metadata + id: pr + env: + GH_TOKEN: ${{ github.token }} + INPUT_PR_NUMBER: ${{ github.event.inputs.pr_number }} + EVENT_PR_NUMBER: ${{ github.event.pull_request.number }} + shell: ruby {0} + run: | + require "json" + require "securerandom" + + pr_number = + if ENV["GITHUB_EVENT_NAME"] == "workflow_dispatch" + ENV["INPUT_PR_NUMBER"] + else + ENV["EVENT_PR_NUMBER"] + end + + pr = JSON.parse( + `gh pr view #{pr_number} --repo #{ENV["GITHUB_REPOSITORY"]} --json title,author,headRefOid,baseRefName` + ) + + d = SecureRandom.hex(8) + File.open(ENV["GITHUB_OUTPUT"], "a") do |f| + f.puts "number=#{pr_number}" + f.puts "title<<#{d}"; f.puts pr["title"]; f.puts d + f.puts "author<<#{d}"; f.puts pr.dig("author", "login"); f.puts d + f.puts "sha=#{pr["headRefOid"]}" + f.puts "base_branch=#{pr["baseRefName"]}" + end + + - name: Fetch PR diff + env: + GH_TOKEN: ${{ github.token }} + run: | + gh pr diff ${{ steps.pr.outputs.number }} \ + --repo ${{ github.repository }} > pr.diff + + echo "Diff size: $(wc -c < pr.diff) bytes" + + - name: Send to security scan + env: + GITHUB_SCAN_SECRET: ${{ secrets.SCAN_SECRET }} + VM_SCAN_URL: ${{ secrets.VM_SCAN_URL }} + PR_NUMBER: ${{ steps.pr.outputs.number }} + PR_TITLE: ${{ steps.pr.outputs.title }} + PR_AUTHOR: ${{ steps.pr.outputs.author }} + PR_SHA: ${{ steps.pr.outputs.sha }} + BASE_BRANCH: ${{ steps.pr.outputs.base_branch }} + REPO: ${{ github.repository }} + shell: ruby {0} + run: | + require "json" + require "openssl" + require "net/http" + + vm_url = ENV["VM_SCAN_URL"].to_s + secret = ENV["GITHUB_SCAN_SECRET"].to_s + + if vm_url.empty? || secret.empty? + puts "Security scan not configured — skipping" + exit 0 + end + + payload = JSON.generate( + pr_number: ENV["PR_NUMBER"], + title: ENV["PR_TITLE"], + diff: File.read("pr.diff"), + author: ENV["PR_AUTHOR"], + repo: ENV["REPO"], + sha: ENV["PR_SHA"], + base_branch: ENV["BASE_BRANCH"], + ) + + sig = "sha256=" + OpenSSL::HMAC.hexdigest("SHA256", secret, payload) + + uri = URI("#{vm_url}/scan-pr") + req = Net::HTTP::Post.new(uri) + req["Content-Type"] = "application/json" + req["X-Scan-Signature"] = sig + req.body = payload + + res = Net::HTTP.start(uri.host, uri.port) { |h| h.request(req) } + abort "VM returned #{res.code}: #{res.body}" unless res.is_a?(Net::HTTPSuccess) diff --git a/.github/workflows/publish-assets.yml b/.github/workflows/publish-assets.yml index 82effc5cb52db..cefdde98f9dbc 100644 --- a/.github/workflows/publish-assets.yml +++ b/.github/workflows/publish-assets.yml @@ -6,6 +6,7 @@ on: - main - stable - release/* + - precompile-asset-improvements tags: - beta - v* @@ -20,7 +21,7 @@ jobs: runs-on: 'cdck-linux-8-core' container: discourse/discourse_test:release timeout-minutes: 30 - + steps: - name: Install gh cli run: | @@ -46,6 +47,18 @@ jobs: git config --global user.email "ci@ci.invalid" git config --global user.name "Discourse CI" + - name: Symlink vendor/bundle from image + run: | + ln -s /var/www/discourse/vendor/bundle vendor/bundle + + - name: Setup gems + run: | + bundle config --local path vendor/bundle + bundle config --local deployment true + bundle config --local without development + bundle install --jobs $(($(nproc) - 1)) + bundle clean + - name: pnpm install run: pnpm install --frozen-lockfile diff --git a/.github/workflows/publish-types.yml b/.github/workflows/publish-types.yml new file mode 100644 index 0000000000000..311ba3747014b --- /dev/null +++ b/.github/workflows/publish-types.yml @@ -0,0 +1,58 @@ +name: Publish @discourse/types package + +on: + workflow_dispatch: + push: + branches: + - main + paths: + - "lib/version.rb" + +permissions: + contents: read + id-token: write + +jobs: + publish: + name: publish + runs-on: ubuntu-latest + if: github.repository == 'discourse/discourse' + timeout-minutes: 5 + + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 1 + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: "3.4" + + - uses: pnpm/action-setup@v5 + + - uses: actions/setup-node@v6 + with: + node-version: 24 + + - name: pnpm install + run: pnpm install --frozen-lockfile + + - name: Generate external type definitions + run: pnpm types:generate + + - name: Generate type definitions + run: pnpm lint:types + + - name: Prepare version + shell: bash + run: | + discourse_version=$(ruby -r ./lib/version.rb -e 'puts "#{Discourse::VERSION::MAJOR}.#{Discourse::VERSION::MINOR}.#{Discourse::VERSION::TINY}"') + commit_hash=$(git rev-parse --short HEAD) + package_version="${discourse_version}-${commit_hash}" + + echo "@discourse/types version: ${package_version}" + sed -i -E "s/\"version\": \"0\.0\.0\"/\"version\": \"${package_version}\"/" frontend/discourse-types/package.json + + - name: Publish the package + working-directory: frontend/discourse-types + run: pnpm publish --no-git-checks --tag latest diff --git a/.github/workflows/release-notes.yml b/.github/workflows/release-notes.yml index 950170b34a701..d3a9dbf31ec45 100644 --- a/.github/workflows/release-notes.yml +++ b/.github/workflows/release-notes.yml @@ -36,7 +36,7 @@ jobs: fetch-depth: 0 - name: Bundler cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: vendor/bundle key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }} @@ -75,7 +75,7 @@ jobs: bin/rake "release_note:plugins:generate[ ${{ steps.dates.outputs.from }} , ${{ steps.dates.outputs.to }} , ./tmp/all-the-plugins/official/* , discourse ]" | tee tmp/notes/plugins.txt - name: Export files - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: release-notes path: ./tmp/notes/*.txt diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a24e05b31c743..d9900f553bfca 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -24,7 +24,7 @@ permissions: jobs: build: if: github.event_name == 'pull_request' || github.repository != 'discourse/discourse-private-mirror' - name: ${{ matrix.target }} ${{ matrix.build_type }}${{ (matrix.target == 'core' && matrix.build_type == 'frontend' && format(' ({0})', matrix.browser)) || '' }} # Update fetch-job-id step if changing this + name: ${{ matrix.target }} ${{ matrix.build_type }}${{ (matrix.target == 'core' && matrix.build_type == 'frontend' && format(' ({0})', matrix.browser)) || '' }}${{ matrix.plugin_compiler == 'legacy' && ' (legacy)' || '' }} runs-on: >- ${{ github.repository_owner == 'discourse' && ( @@ -62,6 +62,7 @@ jobs: LOAD_PLUGINS: ${{ (matrix.target == 'core-plugins' || matrix.target == 'official-plugins' || matrix.target == 'plugins' || matrix.target == 'chat') && '1' || '0' }} ACTIONS_STEP_DEBUG: ${{ secrets.ACTIONS_STEP_DEBUG }} QUNIT_REUSE_BUILD: 1 + ROLLUP_PLUGIN_COMPILER: ${{ matrix.plugin_compiler == 'rollup' && '1' || '0' }} strategy: fail-fast: false @@ -70,6 +71,7 @@ jobs: build_type: [backend, frontend, system] target: [core, plugins, themes] browser: [Chrome] + plugin_compiler: ["rollup"] exclude: - build_type: backend target: themes @@ -87,6 +89,9 @@ jobs: - build_type: system target: chat browser: Chrome + - build_type: frontend + target: plugins + plugin_compiler: "legacy" # - build_type: frontend # target: core # browser: Firefox Evergreen @@ -186,7 +191,7 @@ jobs: run: echo "cpu-cores=$(nproc)" >> $GITHUB_OUTPUT - name: Fetch app state cache - uses: actions/cache@v4 + uses: actions/cache@v5 id: app-cache with: path: tmp/app-cache @@ -229,7 +234,7 @@ jobs: run: rm -rf tmp/app-cache/uploads && cp -r public/uploads tmp/app-cache/uploads - name: Fetch turbo_rspec_runtime.log cache - uses: actions/cache@v4 + uses: actions/cache@v5 id: test-runtime-cache if: matrix.build_type == 'backend' || matrix.build_type == 'system' with: @@ -317,7 +322,7 @@ jobs: if: matrix.build_type == 'frontend' && matrix.target == 'themes' run: DISCOURSE_DEV_DB=discourse_test bin/rake themes:qunit_all_official - - uses: actions/upload-artifact@v6 + - uses: actions/upload-artifact@v7 if: always() && matrix.build_type == 'frontend' with: name: ember-exam-execution-${{ matrix.target }}-${{ matrix.browser }}-frontend-${{ hashFiles('./frontend/discourse/test-execution-*.json') }} @@ -370,7 +375,7 @@ jobs: fi - name: Upload failed system test artifacts - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 if: always() && steps.check-failed-system-test-artifacts.outputs.exists == 'true' with: name: failed-system-test-artifacts-${{ matrix.build_type }}-${{ matrix.target }} @@ -394,7 +399,7 @@ jobs: run: cp tmp/turbo_rspec_flaky_tests.json tmp/turbo_rspec_flaky_tests-${{ matrix.build_type }}-${{ matrix.target }}-${{ job.check_run_id }}.json - name: Upload flaky tests report - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 if: steps.check-flaky-spec-report.outputs.exists == 'true' with: name: flaky-test-reports-${{ matrix.build_type }}-${{ matrix.target }} @@ -406,7 +411,7 @@ jobs: needs: build steps: - name: Merge Artifacts - uses: actions/upload-artifact/merge@v6 + uses: actions/upload-artifact/merge@v7 with: name: failed-system-test-artifacts pattern: failed-system-test-artifacts-* @@ -416,7 +421,7 @@ jobs: continue-on-error: true - name: Merge Artifacts - uses: actions/upload-artifact/merge@v6 + uses: actions/upload-artifact/merge@v7 with: name: flaky-test-reports pattern: flaky-test-reports-* diff --git a/.gitignore b/.gitignore index 668e5365ca2cc..cfd57af84b2ea 100644 --- a/.gitignore +++ b/.gitignore @@ -125,6 +125,10 @@ openapi/* # Types frontend/discourse-types/declarations +frontend/discourse-types/external-types +frontend/discourse-types/external-types.d.ts +frontend/discourse-i18n/src/index.d.ts +frontend/discourse-i18n/src/index.d.ts.map *.tsbuildinfo # discourse-ai evals @@ -136,3 +140,4 @@ frontend/discourse-types/declarations /.claude /.cursor .playwright-mcp +/frontend/discourse-types/dts-generator.js diff --git a/.licensed.yml b/.licensed.yml index 4e2188531879a..1338dd6254fa2 100644 --- a/.licensed.yml +++ b/.licensed.yml @@ -82,4 +82,3 @@ reviewed: - tilt # MIT - ttfunk # Ruby or GPLv2/GPLv3 - unf # BSD-2-Clause - - unicorn # Ruby or GPLv2/GPLv3 diff --git a/.prettierignore b/.prettierignore index fe06c902eb738..ac481a74096bb 100644 --- a/.prettierignore +++ b/.prettierignore @@ -15,6 +15,7 @@ public/ vendor/ frontend/discourse/tests/unit/utils/decorators-test.js frontend/discourse/tests/fixtures +frontend/discourse-types/dts-generator.js spec/ node_modules/ dist/ @@ -23,4 +24,5 @@ tmp/ **/*.rb **/*.html **/*.json +!**/tsconfig.json **/*.md diff --git a/.rubocop.yml b/.rubocop.yml index f1e4cca7ad39c..64372cac16199 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,6 +1,10 @@ inherit_gem: rubocop-discourse: stree-compat.yml +inherit_mode: + merge: + - Exclude + # Still work to do in ensuring we don't link old files Discourse/NoAddReferenceOrAliasesActiveRecordMigration: Enabled: false diff --git a/.skills/discourse-migration/SKILL.md b/.skills/discourse-migration/SKILL.md new file mode 100644 index 0000000000000..f402dc6fb9d84 --- /dev/null +++ b/.skills/discourse-migration/SKILL.md @@ -0,0 +1,293 @@ +--- +name: discourse-migration +description: MUST load before writing or reviewing any database migration (db/migrate, db/post_migrate, plugin migrations) +--- + +# Discourse Migration Skill + +Discourse runs zero-downtime deployments. Migrations are split across two directories: + +- **`db/migrate/`** — runs pre-deploy. SafeMigrate (`lib/migration/safe_migrate.rb`) **blocks** dropping/renaming tables or columns, and creating concurrent indexes without first dropping them. Raises `Discourse::InvalidMigration` on violation. +- **`db/post_migrate/`** — runs post-deploy (skipped when `SKIP_POST_DEPLOYMENT_MIGRATIONS=1`). No safety restrictions — destructive ops go here. + +Plugins mirror this: `plugins//db/migrate/` and `plugins//db/post_migrate/`. + +SafeMigrate is a dev/test guard only (disabled in production). + +## Generating migrations + +Always use generators — never hand-write timestamps. Manual timestamps like `120000`/`120001` cause collisions. + +```bash +bin/rails g migration CreateWidgets # db/migrate/ +bin/rails g post_migration DropOldColumns # db/post_migrate/ +bin/rails g plugin_migration CreatePluginTable --plugin-name=my-plugin # plugins//db/migrate/ +bin/rails g plugin_post_migration DropOldPluginCols --plugin-name=my-plugin # plugins//db/post_migrate/ +bin/rails g site_setting_rename_migration old_name new_name # site setting rename +``` + +Use `change` for reversible ops, `up`/`down` for irreversible. Use `raise ActiveRecord::IrreversibleMigration` in `down`. Use `up_only { ... }` for data ops inside an otherwise reversible `change`. + +## Avoiding application code in migrations + +Never call application code (models, `SiteSetting`, etc.) in migrations. These references break when code changes months or years later — settings get removed, methods get renamed, or semantics shift silently. + +```ruby +# BAD — relies on application code that may not exist when migration runs later +if SiteSetting.some_setting + add_column ... +end + +# GOOD — query the database directly +result = DB.query_single("SELECT value FROM site_settings WHERE name = 'some_setting'") +if result.first == "t" + add_column ... +end +``` + +`execute` is the default for all migration SQL. Only use `DB.exec`/`DB.query` when you need parameterized queries (`:param` syntax) or return values. + +## Safely removing columns + +Multi-step process across deployments. Helpers: `lib/migration/column_dropper.rb`, `lib/migration/base_dropper.rb`. + +**Step 1 — Mark readonly (regular migration):** + +```ruby +class MarkOldColumnReadonly < ActiveRecord::Migration[8.0] + def up + change_column_default :my_table, :old_column, nil # MUST drop default first + Migration::ColumnDropper.mark_readonly(:my_table, :old_column) + end + + def down + Migration::ColumnDropper.drop_readonly(:my_table, :old_column) + end +end +``` + +Creates a PG trigger rejecting non-null writes. Old code can still read. + +**Step 2 — Ignore in model (code change, same PR):** + +```ruby +self.ignored_columns += %i[old_column] +# TODO(MM-YYYY): Remove this line (calculate 6 months from today) +``` + +Use `+=` to append. Without this, dropping the column causes `StatementInvalid`. + +**Step 3 — Drop column (post-deploy migration):** + +```ruby +class DropOldColumn < ActiveRecord::Migration[8.0] + DROPPED_COLUMNS = { my_table: %i[old_column] } + + def up + DROPPED_COLUMNS.each { |table, columns| Migration::ColumnDropper.execute_drop(table, columns) } + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end +``` + +**Step 4** — Remove `ignored_columns` entry after post-deploy migration is promoted. + +For deprecation warnings before removal: `include HasDeprecatedColumns` then `deprecate_column :col, drop_from: "3.5"` (see `app/models/concerns/has_deprecated_columns.rb`). + +## Safely renaming columns + +Renaming is a multi-step process similar to column removal: + +1. **Pre-deploy migration:** Mark the old column readonly with `Migration::ColumnDropper.mark_readonly`, add the new column, create a trigger to mirror writes from old to new on inserts/updates, and backfill existing data from old column to new. +2. **Code change (same PR):** Update all application code to read/write the new column. Add `self.ignored_columns += %i[old_column]` to the model. +3. **Post-deploy migration:** Drop the old column using `Migration::ColumnDropper.execute_drop`. In most cases, delay this until the rename has been confirmed safe with no data loss. + +## Safely removing tables + +Same pattern via `lib/migration/table_dropper.rb`: + +1. Regular migration: `Migration::TableDropper.read_only_table(:old_table)` +2. Post-deploy migration: `Migration::TableDropper.execute_drop(:old_table)` + +If table is already fully unused, just `drop_table` directly in a post-deploy migration. + +## Removing site settings + +The most common migration type. Use `execute` with `DELETE` or `UPDATE`: + +```ruby +# Removal +execute "DELETE FROM site_settings WHERE name = 'old_setting_name'" + +# Rename +execute "UPDATE site_settings SET name = 'new_name' WHERE name = 'old_name'" +``` + +Always `up`/`down` with `raise ActiveRecord::IrreversibleMigration`. + +## Indexing + +### Concurrent indexes + +Large or busy existing tables require concurrent indexing. Always pair with `disable_ddl_transaction!`. SafeMigrate requires dropping the old index first: + +```ruby +class AddIndexToWidgets < ActiveRecord::Migration[8.0] + disable_ddl_transaction! + + def change + remove_index :widgets, :user_id, algorithm: :concurrently, if_exists: true + add_index :widgets, :user_id, algorithm: :concurrently + end +end +``` + +New tables and small/low-traffic existing tables can use regular (non-concurrent) indexes. + +### Partial indexes + +Use `where:` to reduce index size — common for soft-deletes, nullable uniques, type scoping: + +```ruby +add_index :topic_timers, [:topic_id], where: "deleted_at IS NULL" +add_index :email_logs, [:bounce_key], unique: true, where: "bounce_key IS NOT NULL" +add_index :users, [:id], name: "idx_users_admin", where: "admin" +``` + +### Composite indexes + +Order: equality conditions first, then range/sort. Add both directions for join tables: + +```ruby +add_index :topic_allowed_users, %i[topic_id user_id], unique: true +add_index :topic_allowed_users, %i[user_id topic_id], unique: true +``` + +### GiST indexes + +For trigram search: `using: "gist", opclass: :gist_trgm_ops`. + +### Naming + +Default Rails naming works unless the name exceeds 63 chars (PG limit) — then use a custom `name:`. + +## Foreign keys + +**Discourse mostly does NOT use foreign keys.** Referential integrity is enforced by application logic and `EnsureDbConsistency` (`app/jobs/scheduled/ensure_db_consistency.rb`), which runs every 12 hours calling `ensure_consistency!` on 18 core models. + +**Why:** avoids lock contention, simplifies soft-deletes and bulk ops, prevents unexpected cascading deletes. + +**Exceptions:** FKs are used selectively for critical relationships (uploads, security keys). Cascade deletes are rare (2 instances in codebase). Default: don't add FKs. + +## Data backfills + +Lightweight updates (e.g., nulling `baked_version` for rebake) on large tables are fine unbatched if the WHERE clause limits scope. For heavy data writes on large tables, batch with `disable_ddl_transaction!`: + +```ruby +class BackfillData < ActiveRecord::Migration[8.0] + disable_ddl_transaction! + BATCH_SIZE = 30_000 + + def up + loop do + count = DB.exec(<<~SQL, batch_size: BATCH_SIZE) + WITH cte AS ( + SELECT id, other_col FROM my_table WHERE new_col IS NULL LIMIT :batch_size + ) + UPDATE my_table SET new_col = cte.other_col FROM cte WHERE my_table.id = cte.id + SQL + break if count == 0 + end + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end +``` + +Use `ON CONFLICT` for idempotent inserts. Use parameterized queries (`:param` syntax via `DB.exec`) — not string interpolation. + +## Conditional logic + +Use `Migration::Helpers` (`lib/migration/helpers.rb`) for install-vs-upgrade behavior: + +```ruby +if Migration::Helpers.existing_site? # site created > 1 hour ago + # e.g., insert a site setting to disable new feature for existing sites +end +``` + +Use `column_exists?`, `table_exists?`, `index_exists?` for idempotency guards. + +## NOT NULL constraints and NULLable columns + +Avoid NULLable columns whenever possible — every NULL field is a potential `nil` error. Prefer adding a default (e.g., `false` for booleans, `""` for strings, `0` for counts). Limit NULLs to truly optional fields (optional description, optional URL). + +When adding a NOT NULL constraint to an existing column, always clean data first: `DELETE` invalid rows or `UPDATE` nulls to a default, then `change_column_null`. + +## Bigint conversions + +For large tables (e.g. `notifications.id`), use four migrations: +1. Add shadow bigint column + insert-mirroring trigger +2. Batch-copy existing rows (`disable_ddl_transaction!`, ~10k batches) +3. Swap columns (rename old/new, fix PK/sequences, mark old readonly) +4. Post-deploy: `execute_drop` the old column + +## Testing migrations + +When a migration includes data changes with potential for data loss or inaccuracy, write an RSpec test. Migration files aren't auto-loaded, so require them explicitly: + +```ruby +# frozen_string_literal: true + +require Rails.root.join("db/migrate/20240101000000_backfill_widget_status.rb") + +RSpec.describe BackfillWidgetStatus do + before do + @original_verbose = ActiveRecord::Migration.verbose + ActiveRecord::Migration.verbose = false + end + + after { ActiveRecord::Migration.verbose = @original_verbose } + + it "backfills status from legacy column" do + # Set up test data with fabricators or DB.exec + + described_class.new.up + + # Assert expected state + end +end +``` + +The same pattern works for plugin migrations — just adjust the `require` path (e.g., `plugins/chat/db/migrate/...`). + +## Running annotations + +After any migration that alters table schema (add/remove/rename columns, create tables), run: + +```bash +bin/annotate --models +``` + +This updates the schema comments at the top of model files to reflect the current database schema. + +## Review checklist + +1. Destructive ops in `db/post_migrate/`, everything else in `db/migrate/` +2. Timestamp from generator, not hand-written +3. `# frozen_string_literal: true` and `ActiveRecord::Migration[8.0]` +4. Concurrent indexes on large/busy tables: `disable_ddl_transaction!` + `remove_index ... if_exists: true` before `add_index` +5. Column drops: full lifecycle (mark_readonly -> ignored_columns -> execute_drop) +6. Default dropped before `mark_readonly` +7. Heavy data writes on large tables batched with `disable_ddl_transaction!` +8. Idempotent: `IF EXISTS`, `ON CONFLICT`, `column_exists?`, etc. +9. Rollback: `down` method or `raise ActiveRecord::IrreversibleMigration` +10. No foreign keys unless strong justification +11. No application code (models, `SiteSetting`) — query DB directly +12. `execute` for SQL; `DB.exec`/`DB.query` only when param binding or return values needed +13. Run `bin/annotate --models` after schema-altering migrations diff --git a/.skills/discourse-service-authoring/SKILL.md b/.skills/discourse-service-authoring/SKILL.md new file mode 100644 index 0000000000000..c20a91a4fbd9b --- /dev/null +++ b/.skills/discourse-service-authoring/SKILL.md @@ -0,0 +1,220 @@ +--- +name: discourse-service-authoring +description: Use when creating, editing, or reviewing Discourse service objects that include Service::Base - covers contracts, models, policies, steps, transactions, controller integration, and service specs +--- + +We want high quality code and very senior engineering work. Best oriented object practices are observed. Think principles like SOLID and battle-tested patterns. We also want to write idiomatic ruby. Good reference authors are Sandi Metz, Katrina Owen or Avdi Grimm. Your only source of truth to write services is the documentation at docs/developer-guides/docs/03-code-internals/19-service-objects.md, don't look at examples in the codebase. + +DONT USE ANY WRITING PLAN SKILL DURING THE SESSION + +## Autonomous Mode + +When the user says "autonomous mode" (or similar), apply these overrides: +- Do NOT use AskUserQuestion — make your best judgment call and state what you chose +- Do NOT wait for user approval at phase gates — present the deliverable and proceed immediately +- Still present audit tables, but fix all FAILs and continue without waiting for confirmation +- Still present service name suggestions, but pick the best one yourself + +## Task Tracking + +**MANDATORY:** At the start of every session using this skill, create a task for each phase using TaskCreate: + +1. "Phase 1: Deep Understanding" +2. "Phase 2: Assessment" +3. "Phase 3: Implementation" +4. "Phase 4: Quality" +5. "Phase 5: Business logic" +6. "Phase 6: Security" +7. "Phase 7: Specs" +8. "Phase 8: Finalization" + +Create ALL tasks upfront before starting any work. Mark each task as `in_progress` when you begin it and `completed` when the user approves the phase gate. + +## Execution Discipline + +Every phase is a discrete step. Complete one phase fully before starting the next. Each phase ends with a user-visible deliverable — findings, an audit table, or a confirmation. NEVER silently advance to the next phase. + +**Review phases (4, 5, 6) use a strict audit loop:** +1. Evaluate every rule in the phase's checklist against the current code +2. Present a numbered verdict table — one row per rule, each with PASS / FAIL / NA and a one-line evidence citation (file:line or brief rationale) +3. If any FAIL: fix the violations, then go back to step 1 and re-evaluate the **full** checklist (not just the items you fixed) +4. The phase ends only when the user sees an all-PASS table and approves + +**Audit table format** (used by phases 4, 5, 6): + +``` +| # | Rule | Verdict | Evidence | +|---|------|---------|----------| +| 1 | Service name describes core business concept | PASS | `Chat::Message::Trash` — uses domain vocabulary | +| 2 | Steps have one concern each | FAIL | `update_message` both validates and persists | +| 3 | No utility methods in service | NA | No utility methods present | +``` + +- **Every rule in the phase's checklist gets a row** — no omissions +- **FAIL rows must cite file:line** where the violation occurs +- **PASS rows need brief evidence** — not just "looks good" but what you actually verified +- **NA requires justification** — why the rule doesn't apply to this service +- After fixes, produce a **complete new table** (not a diff or "fixed items only") + +## Phase 1: Deep Understanding + +Build a thorough understanding of the codepath being refactored. Read every file involved: the controller action, the class method or inline logic being extracted, all models touched, guardian/policy extensions, serializers, routes, and every caller (production code, specs, import scripts, dev tools, other plugins). + +**Gate:** Present a summary to the user listing every file read and the key responsibilities discovered. Wait for user confirmation that the understanding is complete before proceeding to Phase 2. + +## Phase 2: Assessment + +Surface gaps, architectural decisions, and issues for user approval before writing any code. + +- Identify logic that belongs in a model (callbacks, computed values, configuration-driven setup) rather than in the service. The service orchestrates; models own their own setup concerns. +- Split computed values across the models that own each layer. Each model should own its own configuration; higher-level models compose from lower-level ones with fallbacks. +- Extract magic numbers into named constants on the module. +- Add `-> { with_deleted }` scope to `belongs_to` associations that may reference soft-deleted records. +- Note any bugs or security issues found during research — these will be addressed during implementation. +- Identify any plain-class serializers (not inheriting from ApplicationSerializer) and flag them for conversion to ActiveModel::Serializer. + +Present all findings to the user and get approval on scope before proceeding. + +## Phase 3: Implementation + +Write the service, controller, update all callers, and remove dead code. + +- Write model improvements first (associations, constants, extracted methods) +- Write the service class +- Write the controller integration +- Update ALL callers to use the service directly — specs, import scripts, dev tools, event handlers, other plugins. Update test `before` blocks with any site settings the service's policy requires. +- Remove dead code: if a helper method is no longer called by any production code after extraction, delete it. +- When converting serializers to AMS, update ALL callers (controllers, services, publishers) and remove any wrapper methods that just delegated to the old serializer. + +**Gate:** Present a summary of all files created, modified, and deleted. Wait for user acknowledgment before proceeding to Phase 4. + +## Phase 4: Quality + +Review the service against these structural rules. List every violation found. + +- Service name should describe the core concept business, makes 5 suggestions to the user using AskUserQuestion, don't hesitate to namespace, eg: PluginName::BusinessSubject::Action +- Steps are simple with one concern each +- Step names describe domain behavior, not code (`revoke_previous_accepted_answer` not `destroy_old_record`). ALWAYS use Discourse core domain vocabulary. Ask "why is this happening?" not "what ActiveRecord method am I calling?" +- Descriptive param names: `post_id` not `id`, `channel_id` not `target` +- `context[:]` is a code smell. Verify a `model`, `options`, or step keyword argument cannot achieve the same result. Refactoring should almost always let you use a model instead. +- `transaction` wraps ONLY DB writes that must succeed or fail together. Side effects (webhooks, events, MessageBus) live outside. +- `lock` wraps ONLY steps vulnerable to concurrent modification. Side effects are idempotent and MUST live outside the lock. +- No `return if`/`return unless` at the top of step methods — use `only_if` wrappers. Guard clauses in `only_if` predicate methods use bare `return` (not `return false`). +- NEVER have an utility methods in a service, use model, step or a dedicated action instead +- Instead of manipulating data from the contract directly in various steps, attempt to extract logic on the contract itself +- NEVER rate limiting in the service — if necessary, it belongs in the controller via `before_action` +- NEVER use an optional model steps just to store a value for condition checks +- `create` over `new` + separate `save!` in model steps +- Each side effect is its own step with its own `only_if` wrapper — never bundle conditional side effects with internal if-statements +- ALWAYS Group related side effects into one step ONLY when they are truly one conceptual action AND share the same condition +- No over-protection with `try` — trust internal bang methods, use non-bang persistence in model steps +- Consistent security constraints: if one MessageBus publish uses `secure_audience`, ALL publishes on that channel must +- Custom step names for model steps that CREATE (not the default `fetch_` prefix) +- When converting if/else to `only_if`, ask whether the else branch is truly conditional or default behavior that should always run +- Inline small external helper methods rather than delegating to other modules +- Idiomatic ActiveRecord: prefer association-based lookups (`target_post: record`) over foreign-key lookups +- Guard clauses in fetch methods for privilege-based branching (privileged path is the early return) +- No backward-compatible wrapper methods or `skip_policy` options +- Mutation steps ordered so rollback leaves consistent state (dependent writes after what they depend on) +- Serializers MUST inherit from `ApplicationSerializer` — never use plain classes with class-method `.serialize()` patterns +- Use `include_*?` methods for conditional attributes, not if/else hash building +- Extract nested serialization into separate serializer classes (e.g., topic data inside a card gets its own `CardTopicSerializer`) +- Use serializers directly at call sites: `MySerializer.new(object, root: false).as_json` — never hide them behind controller helper methods +- Pass pre-loaded data (e.g., batch-loaded assignments) through the serializer's options hash: `MySerializer.new(object, root: false, my_data:).as_json` accessed via `@options[:my_data]` +- ALWAYS use service_params and service_params.deep_merge(foo: bar) to pass params to the service from the controller + +When in doubt AskUserQuestion. + +**Audit loop:** +1. Produce the full audit table covering every rule above +2. Present the table to the user +3. If any FAIL verdicts exist: + a. Fix every FAIL violation + b. Return to step 1 — re-evaluate **all** rules, not just the ones you fixed (fixes can introduce new violations or invalidate previous PASS verdicts) +4. When the table is all PASS/NA, present it to the user for approval +5. Proceed to Phase 5 only after user approval + +## Phase 5: Business logic + +Trace every code path in the original implementation against the new service. List every bug found by criticality. + +- Confirm no code path is dropped or subtly altered +- Verify side effects (DB writes, notifications, events, webhooks) fire under the same conditions and in the same order +- Check transactional boundaries: what was atomic before must remain atomic + +**Audit loop:** +1. Produce the full audit table covering every rule above +2. Present the table to the user (including bugs from the prior implementation) +3. If any FAIL verdicts exist: + a. Fix user-approved items + b. Return to step 1 — re-trace **all** rules, not just the ones you fixed (fixes can introduce new regressions) +4. When the table is all PASS/NA, present it to the user for approval +5. Proceed to Phase 6 only after user approval + +## Phase 6: Security + +Review for security concerns. List every issue found by criticality. + +- Access control: are policies enforced consistently regardless of caller? +- Category moderation: for category-scoped resources, never rely on `user.moderator?` / `guardian.is_moderator?` alone. Verify whether category moderators for the specific category should be allowed, and whether the actor can see or act on that exact resource via an existing guardian/policy method or `guardian.is_category_group_moderator?(category)` plus the relevant visibility check. +- MessageBus: secure audience applied to all publishes on secured channels? +- Data leakage: can non-privileged users infer existence of soft-deleted or private resources? + +**Audit loop:** +1. Produce the full audit table covering every rule above +2. Present the table to the user +3. If any FAIL verdicts exist: + a. Fix user-approved items + b. Return to step 1 — re-review **all** rules, not just the ones you fixed +4. When the table is all PASS/NA, present it to the user for approval +5. Proceed to Phase 7 only after user approval + +## Phase 7: Specs + +**MANDATORY: Run this entire phase in a subagent.** Use the Agent tool to spawn a dedicated agent for writing and running specs. Pass it the service file path, the spec file path, and the full checklist below. Do NOT write specs in the main conversation. + +### Reference sources + +Two authoritative references govern how specs are written. Whenever you are unsure about an RSpec pattern, naming convention, matcher usage, or structural rule, **fetch the relevant section** before writing code: + +1. **RSpec Style Guide** — https://rspec.rubystyle.guide + Fetch this page and search for the keyword you need guidance on (e.g. "subject", "context", "let", "shared examples", "named subject", "aggregate_failures", "one expectation"). Use it as the definitive authority on RSpec idioms and style. + +2. **Service documentation** — `docs/developer-guides/docs/03-code-internals/19-service-objects.md`, section **Testing** + This is the definitive authority on testing Discourse services: structure, custom matchers, and conventions. Every spec must follow the patterns shown there. + +### Checklist + +- Test the contract in a separate `describe described_class::Contract, type: :model` block with shoulda matchers +- Use a `describe ".call"` block for the service execution +- Declare `subject(:result) { described_class.call(params:, **dependencies) }` as the first declaration in the `.call` block — the subject must be shared and parameterizable across contexts +- Declare setup data with `fab!`, params as `let(:params)`, dependencies as `let(:dependencies)` — order: subject, fab!, let, before +- One `context` per possible branching point, following the step order defined in the service +- Use the service-specific matchers for step failures: `fail_a_contract`, `fail_to_find_a_model(:name)`, `fail_a_policy(:name)`, `fail_with_an_invalid_model(:name)`, `fail_with_exception`, `fail_a_step(:name)`, `run_successfully` +- Do NOT re-test exhaustive contract validations in the `.call` block — the contract is tested above; the `.call` context only needs one example proving the step halts execution (e.g. one invalid value) +- The happy path context uses `run_successfully` and then tests side effects (DB changes, events, logs) +- Override `let` values in nested contexts to trigger each failure branch — NEVER duplicate the subject call +- Override `fab!` in nested contexts to change actors (e.g., `fab!(:acting_user, :admin)`) rather than overriding `let(:guardian)` +- ALWAYS use specific RSpec matchers (`change`, `eq`, `include`, `be_empty`, predicate matchers like `be_published`) — never bare `be` or vague assertions +- Context descriptions use "when …" / "with …" / "without …" phrasing +- Use `DiscourseEvent.track_events(:event_name) { result }` to test event triggers — NEVER manual `on`/`off` +- Use `let(:messages) { MessageBus.track_publish(channel) { result } }` as a lazy `let` +- Use fabricators for setup data, not raw `Model.create!` +- Use `:topic_with_op` fabricator when the topic needs an OP post for validations to pass +- Write model specs for any model callbacks introduced during the refactoring +- If an action is complex (many edge cases / branching), test it in isolation in its own spec file; the service spec only verifies it is called +- Follow the step order when writing contexts and methods + +**Audit loop:** +1. Produce the full audit table covering every rule above +2. Present the table to the user +3. If any FAIL verdicts exist: + a. Fix every FAIL violation + b. Return to step 1 — re-evaluate **all** rules, not just the ones you fixed +4. When the table is all PASS/NA, present it to the user for approval +5. Run specs and lint. Fix failures and re-run until green +6. Proceed to Phase 8 only after user approval + +## Phase 8: Finalization + +Run the full plugin spec suite and any cross-plugin specs that touch the refactored code. Lint all changed files. Verify everything is green before presenting the completed work. diff --git a/.skills/discourse-upcoming-changes-authoring/SKILL.md b/.skills/discourse-upcoming-changes-authoring/SKILL.md new file mode 100644 index 0000000000000..0fe38cbb17806 --- /dev/null +++ b/.skills/discourse-upcoming-changes-authoring/SKILL.md @@ -0,0 +1,333 @@ +--- +name: discourse-upcoming-changes-authoring +description: Use when modifying, debugging, or extending the upcoming changes framework code and system itself. +--- + +# Upcoming Changes Framework — Authoring Guide + +This skill is for working on the upcoming changes framework itself — the internal machinery that powers feature flag rollout in Discourse. For *adding a new feature flag* using the framework, see the `discourse-upcoming-changes` skill instead. + +## Architecture Overview + +The upcoming changes system has three layers: a **Ruby core** that manages state and business logic, a **services layer** that orchestrates tracking/notifications/toggling, and an **Ember frontend** that renders the admin UI and applies per-user overrides. + +### Ruby Core + +**`lib/upcoming_changes.rb`** — The central module. All business logic for resolving values, checking user eligibility, caching, and image handling lives here. + +Key methods to understand: + +- `resolved_value(setting_name)` — Determines the *effective* value of a setting. This is where auto-promotion logic lives: if a setting's status meets/exceeds `promote_upcoming_changes_on_status`, the resolved value is `true` even if the DB default is `false`. Permanent settings always resolve to `true` (admins can't disable them). +- `enabled_for_user?(setting_name, user)` — The primary access check. Considers: resolved value, group restrictions, anonymous users (only get access if no group restrictions). +- `stats_for_user(user:, acting_guardian:)` — Returns per-change status for a user including *why* they have/don't have access (the `user_enabled_reasons` enum). +- `current_statuses` / `permanent_upcoming_changes` — Cached lookups keyed by git version (one-time cost per deploy). Cleared by `clear_caches!` and automatically when `TrackNotifyStatusChanges` detects changes. + +**`app/models/upcoming_change_event.rb`** — Audit trail. Every lifecycle event (added, removed, status change, manual toggle, admin notification) is recorded here. Has unique indexes to prevent duplicate events of specific types per change. + +**`lib/site_setting_extension.rb`** — Where `upcoming_change:` metadata in `site_settings.yml` gets parsed. When a setting is registered with this metadata, it stores the parsed result in `@upcoming_change_metadata` and defines a `{name}_groups_map` method. The `impact` string is split into `impact_type` and `impact_role`. Also handles `upcoming_change_default_override:` metadata — see [Default Overrides](#default-overrides) below. + +**`lib/site_settings/defaults_provider.rb`** — Manages the default values for all settings, including upcoming change default overrides. Tracks which overrides are active via `@active_upcoming_change_overrides` and applies them when resolving defaults. Provides `upcoming_change_override_metadata` for the frontend to display warnings about changed defaults. + +**`app/models/site_setting_group.rb`** — Stores group restrictions for settings. Group IDs are pipe-separated strings (`"1|2|3"`). The `setting_group_ids` class method returns a hash used for in-memory caching. + +### Services Layer + +All services use `Service::Base`. They're organized under `app/services/upcoming_changes/`: + +| Service | Purpose | +|---------|---------| +| `List` | Admin-only, fetches all changes with metadata, group data, and images | +| `Toggle` | Admin enable/disable — updates SiteSetting, clears groups if `disallow_enabled_for_groups`, logs staff action, fires DiscourseEvent | +| `Track` | Orchestrator called by the scheduled job — delegates to three action sub-services | +| `TrackNotifyAddedChanges` | Compares current settings against event history, creates `added` events | +| `TrackRemovedChanges` | Creates `removed` events for settings no longer present | +| `TrackNotifyStatusChanges` | Detects status changes in metadata, creates events, clears caches | +| `NotifyPromotions` | Iterates all changes and calls `NotifyPromotion` for each | +| `NotifyPromotion` | Handles one promotion — checks policies, merges notifications, fires events | +| `NotifyAdminsOfAvailableChange` | Notifies admins when a change reaches one status below promotion threshold | +| `NotificationDataMerger` | Consolidates multiple change notifications into one to avoid spam | + +**`SiteSetting::UpsertGroups`** — Manages group assignments for settings (upserts `SiteSettingGroup`, refreshes caches, notifies clients). + +### Scheduled Job + +**`app/jobs/scheduled/check_upcoming_changes.rb`** — Runs every 20 minutes inside a `DistributedMutex`. Calls `Track` then `NotifyPromotions`. Supports verbose logging via the `upcoming_change_verbose_logging` setting. + +### Frontend + +**Admin page** — `admin/templates/admin-config/upcoming-changes.gjs` renders the page header, `admin/components/admin-config-areas/upcoming-changes.gjs` is the container with filtering, and `admin/components/admin-config-areas/upcoming-change-item.gjs` renders each row. + +**Key frontend patterns:** +- Filtering by status, impact type, impact role, and enabled/disabled state via `AdminFilterControls` +- Group selection uses a multi-select dropdown with debounced API saves +- Toast notifications for all toggle/group changes +- Lightbox integration for preview images + +**Site settings service** (`app/services/site-settings.js`) — Loads upcoming changes from `PreloadStore`, applies them as overrides to site settings, and stores them in `settings.currentUserUpcomingChanges`. + +**Body CSS classes** — `app/controllers/application.js` generates `uc-{dasherized-key}` classes on `` for each enabled upcoming change, allowing CSS-based feature gating. + +**Notifications** — Two notification types (`upcoming-change-available`, `upcoming-change-automatically-promoted`) handle singular/dual/many change descriptions and link to the admin page with filter params. + +**Sidebar** — Badge notification dot appears on the upcoming changes link when `currentUser.hasNewUpcomingChanges` is true. + +**MessageBus** — Subscribes to `/client_settings` and updates both `siteSettings` and `currentUserUpcomingChanges` in real time. + +### Controller + +**`admin/config/upcoming_changes_controller.rb`** — Three endpoints: +- `GET index` — List changes (with `filter_statuses` param) +- `PUT update_groups` — Set group restrictions for a setting +- `PUT toggle_change` — Enable/disable a setting + +### Problem Check + +**`app/services/problem_check/upcoming_change_stable_opted_out.rb`** — Warns admins hourly if they've opted out of a stable/permanent change. + +### Default Overrides + +Upcoming changes can override the default value of a *different* site setting when enabled. This allows feature rollouts to change related setting defaults without breaking admin customizations. + +#### Metadata Format + +A setting declares a default override with the `upcoming_change_default_override` key in `config/site_settings.yml`: + +```yaml +# The upcoming change setting (the "trigger") +increase_suggested_topics_max_days_old_default: + default: false + type: bool + upcoming_change: + status: experimental + impact: "site_setting_default,all_members" + +# The setting whose default changes (the "target") +suggested_topics_max_days_old: + default: 365 + type: integer + upcoming_change_default_override: + upcoming_change: increase_suggested_topics_max_days_old_default + new_default: 1000 +``` + +When `increase_suggested_topics_max_days_old_default` is enabled (either manually by admin or via auto-promotion), the default value of `suggested_topics_max_days_old` changes from `365` to `1000`. The `impact` field on the trigger setting should include `site_setting_default` as its `impact_type`. + +#### How It Works + +1. **Registration** — `lib/site_setting_extension.rb` parses `upcoming_change_default_override` during setting registration and stores it in `upcoming_change_default_overrides` (a hash keyed by setting name). + +2. **Activation** — During `SiteSetting.refresh!`, each override is checked: if `UpcomingChanges.enabled?(override[:upcoming_change])` returns true, the override is activated via `defaults.activate_upcoming_change_override`. The setting's current value is updated to `new_default` **only if the admin has not manually modified it**. + +3. **Default resolution** — `DefaultsProvider#all` applies active overrides when resolving defaults, so code reading `SiteSetting.defaults[:setting_name]` gets the overridden value. + +4. **Frontend display** — `DefaultsProvider#upcoming_change_override_metadata` returns `{ old_default:, new_default:, change_setting_name: }` for active overrides. The site settings UI (`admin/components/site-setting.gjs`) shows a warning linking to the upcoming changes page. + +#### Key Behaviors + +- **Non-destructive**: If an admin has manually set a custom value for the target setting, the override does not apply — it only affects the default. +- **Reversible**: Disabling the upcoming change deactivates the override and restores the original default. +- **Default-locale only**: Overrides currently only apply on the default locale. +- **Related setting link**: `UpcomingChanges.find_related_default_override_for_change` finds the target setting for a given upcoming change, used to show cross-links in the UI. + +## Key Design Decisions + +### Caching Strategy + +The `current_statuses` and `permanent_upcoming_changes` caches are keyed by git version (`Discourse.git_version`). This means they're naturally invalidated on every deploy — no TTL needed. Within a deploy, `TrackNotifyStatusChanges` calls `clear_caches!` when it detects metadata changes. Always call `clear_caches!` in tests after modifying metadata. + +### Auto-Promotion + +The `resolved_value` method is the single source of truth for whether a setting is "on." Auto-promotion happens implicitly: when a setting's status meets the threshold, `resolved_value` returns `true` regardless of the DB value. The DB value only changes when an admin explicitly toggles. This separation means promotion is reversible by the admin without losing the original opt-in/opt-out state. + +### Notification Merging + +When multiple changes need notifications, `NotificationDataMerger` consolidates them into a single notification per admin. It finds existing unread notifications and merges the change names array. The frontend notification types handle singular ("Feature X"), dual ("Feature X and Feature Y"), and many ("Feature X and 2 others") display. + +### New Site Notification Suppression + +Notifications for `added` and `promoted` changes are skipped on new sites (determined by `Migration::Helpers.new_site?` in `lib/migration/helpers.rb` — a site is "new" if its first schema migration was less than 1 hour ago). This prevents freshly provisioned sites from being flooded with notifications for every existing upcoming change on their first run. The tracking/detection steps still execute — only the notification delivery is suppressed. + +### Group-Based Access + +Group restrictions use a separate `SiteSettingGroup` model rather than storing groups on the setting itself. This allows the caching layer (`site_setting_group_ids`) to work independently. When `disallow_enabled_for_groups` is set in metadata, the UI only shows Everyone/No One options. Group IDs are pipe-separated in the DB for efficient single-row storage. + +### Event Idempotency + +`UpcomingChangeEvent` has unique indexes on specific event type + change name combinations. This prevents duplicate `added`, `removed`, or notification events even if the job runs multiple times. Always check for existing events before creating new ones in service code. + +## Common Modification Scenarios + +### Adding a New Status + +1. Add the status and its numeric value to `UpcomingChanges.statuses` in `lib/upcoming_changes.rb` +2. The numeric ordering determines hierarchy — `meets_or_exceeds_status?` uses these values +3. Update `previous_status` mapping if the new status fits in the progression +4. Add status badge styling in `app/assets/stylesheets/admin/upcoming-changes.scss` (`.upcoming-change__badge.--status-{name}`) +5. Add translations for the status label + +### Adding a New Event Type + +1. Add the enum value to `UpcomingChangeEvent` (`app/models/upcoming_change_event.rb`) +2. If the event should be unique per change, add a unique index in a migration +3. Create or update the relevant service to emit the event + +### Modifying the Admin UI + +The three main components to know: +- **Container** (`upcoming-changes.gjs`) — Filtering logic and data management +- **Item** (`upcoming-change-item.gjs`) — Individual change row rendering and interactions +- **User view** (`admin-user-upcoming-changes.gjs`) — Read-only per-user view + +State is managed via `trackedObject` for reactivity. API calls go through `ajax()` directly in the item component. + +### Adding a Default Override + +To make an upcoming change control the default of another setting: + +1. Add `upcoming_change_default_override` metadata to the **target** setting in `config/site_settings.yml`: + ```yaml + target_setting: + default: original_value + upcoming_change_default_override: + upcoming_change: trigger_setting_name + new_default: new_value + ``` +2. Ensure the **trigger** setting has `impact: "site_setting_default,..."` in its `upcoming_change:` metadata +3. The override activates automatically when the trigger is enabled — no additional code needed +4. Test with `mock_upcoming_change_default_overrides` — see [Mocking Default Overrides](#mocking-default-overrides) + +### Changing Resolution Logic + +All value resolution goes through `resolved_value` in `lib/upcoming_changes.rb`. If you need to change how settings are evaluated (e.g., adding a new override condition), this is the single place to modify. The method checks in order: permanent status, admin manual override, auto-promotion threshold. + +## Testing Patterns + +### Mocking Metadata + +Use the test helper to mock upcoming change metadata — never modify `site_settings.yml` in tests: + +```ruby +mock_upcoming_change_metadata( + { + enable_some_feature: { + impact: "feature,all_members", + status: :experimental, + impact_type: "feature", + impact_role: "all_members", + }, + }, +) +``` + +Always clean up with `clear_mocked_upcoming_change_metadata` in an `after` block (or the helper handles it automatically depending on context). The helper is defined in `spec/support/helpers.rb`. + +### Mocking Default Overrides + +Use `mock_upcoming_change_default_overrides` to set up override metadata in tests — never modify `site_settings.yml`: + +```ruby +mock_upcoming_change_default_overrides( + { + suggested_topics_max_days_old: { + upcoming_change: :increase_suggested_topics_max_days_old_default, + new_default: 1000, + }, + }, +) + +# Enable the trigger setting and refresh to activate the override +SiteSetting.increase_suggested_topics_max_days_old_default = true +SiteSetting.refresh! + +# Now SiteSetting.suggested_topics_max_days_old returns 1000 (the overridden default) +``` + +To test that the override does NOT apply when the admin has customized the target setting: + +```ruby +# Admin sets a custom value before the override activates +SiteSetting.suggested_topics_max_days_old = 730 +SiteSetting.increase_suggested_topics_max_days_old_default = true +SiteSetting.refresh! + +# Override is not applied — admin's explicit choice is preserved +expect(SiteSetting.suggested_topics_max_days_old).to eq(730) +``` + +### Cache Clearing in Tests + +After modifying metadata or settings, call `UpcomingChanges.clear_caches!` to ensure tests see fresh data. The caches are keyed by git version, so they persist across test examples unless explicitly cleared. + +### Testing Services + +Services follow standard `Service::Base` test patterns — see the `discourse-service-authoring` skill. Use `run_successfully`, `fail_a_policy`, etc. + +### System Tests + +Page objects live at: +- `spec/system/page_objects/pages/admin_upcoming_changes.rb` — Main page +- `spec/system/page_objects/pages/admin_upcoming_change_item.rb` — Item component + +Key page object methods: +- `change_item(setting_name)` — Get an item component by setting name +- `has_change?` / `has_no_change?` — Visibility assertions +- `select_enabled_for(option)` — Toggle the enabled dropdown +- `add_group` / `remove_group` / `save_groups` — Group management +- `has_enabled_for_success_toast?` — Verify success feedback + +System tests use `mock_upcoming_change_metadata` in `before` blocks. When revisiting pages to verify persistence, be aware of rate limiting on API calls. + +### Testing the Scheduled Job + +Use `track_log_messages` to verify job output: + +```ruby +track_log_messages do |logger| + described_class.new.execute({}) + expect(logger.infos.join("\n")).to include("Expected message") +end +``` + +Set up event history with `UpcomingChangeEvent.create!` and clean up with `delete_all` as needed. + +### Multisite Tests + +Cache isolation tests live in `spec/multisite/upcoming_changes_spec.rb`. Use `test_multisite_connection("default")` / `test_multisite_connection("second")` blocks and clean up cache keys explicitly per site. + +### JavaScript Tests + +Notification type tests create notifications with `Notification.create()` and verify `director.description`, `director.linkHref`, and `director.icon`. Test singular, dual, and many-change scenarios plus backward compatibility with old data formats. + +## File Reference + +| Area | Key Files | +|------|-----------| +| Core module | `lib/upcoming_changes.rb` | +| Event model | `app/models/upcoming_change_event.rb` | +| Group model | `app/models/site_setting_group.rb` | +| Settings integration | `lib/site_setting_extension.rb` (search for `upcoming_change`) | +| Defaults provider | `lib/site_settings/defaults_provider.rb` (default override activation/resolution) | +| Services | `app/services/upcoming_changes/*.rb` | +| Group upsert | `app/services/site_setting/upsert_groups.rb` | +| Controller | `admin/config/upcoming_changes_controller.rb` | +| Scheduled job | `app/jobs/scheduled/check_upcoming_changes.rb` | +| Problem check | `app/services/problem_check/upcoming_change_stable_opted_out.rb` | +| Initializer | `config/initializers/015-track-upcoming-change-toggle.rb` | +| Admin page | `admin/templates/admin-config/upcoming-changes.gjs` | +| Admin container | `admin/components/admin-config-areas/upcoming-changes.gjs` | +| Admin item | `admin/components/admin-config-areas/upcoming-change-item.gjs` | +| User view | `admin/components/admin-user-upcoming-changes.gjs` | +| Site settings svc | `frontend/discourse/app/services/site-settings.js` | +| App controller | `frontend/discourse/app/controllers/application.js` | +| Notifications | `frontend/discourse/app/lib/notification-types/upcoming-change-*.js` | +| Sidebar | `frontend/discourse/app/lib/sidebar/admin-sidebar.js` | +| Constants | `frontend/discourse/app/lib/constants.js` | +| Styles | `app/assets/stylesheets/admin/upcoming-changes.scss` | +| Core spec | `spec/lib/upcoming_changes_spec.rb` | +| Request spec | `spec/requests/admin/config/upcoming_changes_controller_spec.rb` | +| Admin system spec | `spec/system/admin_upcoming_changes_spec.rb` | +| Member system spec | `spec/system/member_upcoming_changes_spec.rb` | +| Job spec | `spec/jobs/scheduled/check_upcoming_changes_spec.rb` | +| Multisite spec | `spec/multisite/upcoming_changes_spec.rb` | +| Page objects | `spec/system/page_objects/pages/admin_upcoming_changes.rb`, `admin_upcoming_change_item.rb` | +| Test helpers | `spec/support/helpers.rb` (search for `mock_upcoming_change_metadata`) | diff --git a/AI-AGENTS.md b/AI-AGENTS.md index 12764b3ae4e0f..080040c8a74be 100644 --- a/AI-AGENTS.md +++ b/AI-AGENTS.md @@ -11,16 +11,18 @@ Discourse is large with long history. Understand context before changes. ### All Files - Always lint changed files -- Make display strings translatable (use placeholders, not split strings) - Create subagent to review changes against this file after completing tasks ### Toolset - Use `pnpm` for JavaScript, `bundle` for Ruby -- Use helpers in bin over bundle exec (bin/rspec, bin/rake) +- Use helpers in bin over bundle exec (bin/rspec, bin/rake, bin/lint) -### JavaScript +### JavaScript and UI - No empty backing classes for template-only components unless requested -- Use FormKit for forms: https://meta.discourse.org/t/discourse-toolkit-to-render-forms/326439 (`app/assets/javascripts/discourse/app/form-kit`) +- Use FormKit for forms, see ./docs/developer-guides/docs/03-code-internals/21-form-kit.md (`frontend/discourse/app/form-kit`) +- Use BEM for CSS, see ./docs/developer-guides/docs/03-code-internals/25-css-guidelines-bem.md +- Make display strings translatable (use placeholders, not split strings) +- Use "Sentence case" for strings, not "Proper Case" or "lower case" ### JSDoc - Do not add JSDoc to any new code you write. @@ -87,12 +89,13 @@ ALWAYS lint any changes you make ## Services - Extract business logic (validation, models, permissions) from controllers -- https://meta.discourse.org/t/using-service-objects-in-discourse/333641 +- docs/developer-guides/docs/03-code-internals/19-service-objects.md +- Use the skill at .skills/discourse-service-authoring - Examples: `app/services` (only classes with `Service::Base`) ## Database & Performance - ActiveRecord: use `includes()`/`preload()` (N+1), `find_each()`/`in_batches()` (large sets), `update_all`/`delete_all` (bulk), `exists?` over `present?` -- Migrations: rollback logic, `algorithm: :concurrently` for large tables, deprecate before removing columns, use `bin/rails generate migration` for new migrations +- Migrations: use the skill at .skills/discourse-migration before writing or reviewing any migration - Queries: use `explain`, specify columns, strategic indexing, `counter_cache` for counts ## HTTP Response Codes diff --git a/CODEOWNERS b/CODEOWNERS index a2e9f9dc92a2b..4bced546aa22f 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,3 +1,12 @@ +# Dev Experience (Block API, Dev Tools, Registry, Plugin API) +/frontend/discourse/app/blocks/ @discourse/dev-xp +/frontend/discourse/app/lib/blocks/ @discourse/dev-xp +/frontend/discourse/app/services/blocks.js @discourse/dev-xp +/frontend/discourse/app/static/dev-tools/ @discourse/dev-xp +/frontend/discourse/app/lib/registry/ @discourse/dev-xp +/frontend/discourse/app/lib/plugin-api.gjs @discourse/dev-xp + +# Migrations tooling /migrations/ @discourse/migrations-tooling /script/bulk_import/ @discourse/migrations-tooling /script/import_scripts/ @discourse/migrations-tooling diff --git a/Gemfile b/Gemfile index ceae914117431..b7f47a31c01f4 100644 --- a/Gemfile +++ b/Gemfile @@ -20,7 +20,7 @@ gem "propshaft" gem "json" # this will eventually be added to rails, -# allows us to precompile all our templates in the unicorn master +# allows us to precompile all our templates in the app server master gem "actionview_precompiler", require: false gem "discourse-seed-fu" @@ -64,6 +64,7 @@ gem "fastimage" gem "aws-sdk-s3", require: false gem "aws-sdk-sns", require: false gem "aws-sdk-mediaconvert", require: false +gem "aws-sdk-bedrockruntime", require: false gem "excon" gem "unf", require: false @@ -97,14 +98,14 @@ gem "rake" gem "thor", require: false gem "diffy", require: false gem "rinku" -gem "sidekiq" +gem "sidekiq", ">= 7.3.10" # ensuring it won't get downgraded to accomodate a connection_pool upgrade gem "mini_scheduler" gem "mini_racer" gem "highline", require: false -# When unicorn is not used anymore, we can use Rack 3 +# TODO: upgrade to Rack 3 now that Unicorn has been removed gem "rack", "< 3" gem "rack-protection" # security @@ -127,6 +128,7 @@ group :test do gem "rails-dom-testing", require: false gem "minio_runner", require: false gem "capybara-playwright-driver" + gem "puma", require: false end group :test, :development do @@ -142,7 +144,6 @@ group :test, :development do gem "shoulda-matchers", require: false gem "rspec-html-matchers" - gem "pry-stack_explorer", require: false gem "debug", ">= 1.0.0", require: "debug/prelude" gem "rubocop-discourse", require: false gem "parallel_tests" @@ -160,7 +161,6 @@ group :development do gem "ruby-prof", require: false, platform: :mri gem "bullet", require: !!ENV["BULLET"] gem "better_errors", platform: :mri, require: !!ENV["BETTER_ERRORS"] - gem "binding_of_caller" gem "yaml-lint" gem "yard" gem "ruby-lsp", require: false @@ -194,10 +194,12 @@ gem "htmlentities", require: false gem "rack-mini-profiler", require: ["enable_rails_patches"] -gem "unicorn", require: false, platform: :ruby -gem "puma", require: false gem "pitchfork", require: false +# Used by discourse-prometheus to collect socket queue stats. +# Was previously a transitive dependency of the unicorn gem. +gem "raindrops", require: false, platform: :ruby + gem "rbtrace", require: false, platform: :mri # required for feed importing and embedding diff --git a/Gemfile.lock b/Gemfile.lock index 9ad6e8887f387..3bb52347afeac 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,16 +2,16 @@ GEM remote: https://rubygems.org/ specs: Ascii85 (2.0.1) - actionmailer (8.0.4) - actionpack (= 8.0.4) - actionview (= 8.0.4) - activejob (= 8.0.4) - activesupport (= 8.0.4) + actionmailer (8.0.5) + actionpack (= 8.0.5) + actionview (= 8.0.5) + activejob (= 8.0.5) + activesupport (= 8.0.5) mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (8.0.4) - actionview (= 8.0.4) - activesupport (= 8.0.4) + actionpack (8.0.5) + actionview (= 8.0.5) + activesupport (= 8.0.5) nokogiri (>= 1.8.5) rack (>= 2.2.4) rack-session (>= 1.0.1) @@ -19,8 +19,8 @@ GEM rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) useragent (~> 0.16) - actionview (8.0.4) - activesupport (= 8.0.4) + actionview (8.0.5) + activesupport (= 8.0.5) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) @@ -29,16 +29,16 @@ GEM actionview (>= 6.0.a) active_model_serializers (0.8.4) activemodel (>= 3.0) - activejob (8.0.4) - activesupport (= 8.0.4) + activejob (8.0.5) + activesupport (= 8.0.5) globalid (>= 0.3.6) - activemodel (8.0.4) - activesupport (= 8.0.4) - activerecord (8.0.4) - activemodel (= 8.0.4) - activesupport (= 8.0.4) + activemodel (8.0.5) + activesupport (= 8.0.5) + activerecord (8.0.5) + activemodel (= 8.0.5) + activesupport (= 8.0.5) timeout (>= 0.4.0) - activesupport (8.0.4) + activesupport (8.0.5) base64 benchmark (>= 0.3) bigdecimal @@ -51,7 +51,7 @@ GEM securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) uri (>= 0.13.1) - addressable (2.8.8) + addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) afm (1.0.0) annotaterb (4.20.0) @@ -60,11 +60,15 @@ GEM ast (2.4.3) aws-eventstream (1.4.0) aws-partitions (1.1134.0) - aws-sdk-core (3.227.0) + aws-sdk-bedrockruntime (1.74.0) + aws-sdk-core (~> 3, >= 3.244.0) + aws-sigv4 (~> 1.5) + aws-sdk-core (3.244.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) base64 + bigdecimal jmespath (~> 1, >= 1.6.1) logger aws-sdk-kms (1.99.0) @@ -89,9 +93,7 @@ GEM rack (>= 0.9.0) rouge (>= 1.0.0) bigdecimal (3.3.1) - binding_of_caller (1.0.1) - debug_inspector (>= 1.2.0) - bootsnap (1.19.0) + bootsnap (1.23.0) msgpack (~> 1.2) builder (3.3.0) bullet (8.1.0) @@ -106,17 +108,17 @@ GEM rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) - capybara-playwright-driver (0.5.7) + capybara-playwright-driver (0.5.9) addressable capybara playwright-ruby-client (>= 1.16.0) - cbor (0.5.10.1) + cbor (0.5.10.2) certified (1.0.0) - cgi (0.5.0) + cgi (0.5.1) chunky_png (1.4.0) coderay (1.1.3) colored2 (4.0.3) - concurrent-ruby (1.3.5) + concurrent-ruby (1.3.6) connection_pool (2.5.5) cose (1.3.1) cbor (~> 0.5.9) @@ -126,24 +128,23 @@ GEM bigdecimal rexml crass (1.0.6) - css_parser (1.21.1) + css_parser (2.0.0) addressable csv (3.3.5) - date (3.5.0) - debug (1.11.0) + date (3.5.1) + debug (1.11.1) irb (~> 1.10) reline (>= 0.3.8) - debug_inspector (1.2.0) diff-lcs (1.6.2) diffy (3.4.4) digest (3.2.1) digest-xxhash (0.2.9) - discourse-emojis (1.0.44) + discourse-emojis (1.0.45) discourse-fonts (0.0.19) discourse-seed-fu (2.3.12) activerecord (>= 3.1) activesupport (>= 3.1) - discourse_ai-tokenizers (0.4) + discourse_ai-tokenizers (0.4.2) activesupport (>= 6.0) tiktoken_ruby (~> 0.0.15) tokenizers (~> 0.6.3) @@ -156,12 +157,12 @@ GEM dry-initializer (3.2.0) ed25519 (1.4.0) email_reply_trimmer (0.2.0) - erb (6.0.0) + erb (6.0.2) erubi (1.13.1) - excon (1.3.2) + excon (1.4.2) logger - exifr (1.4.1) - extralite-bundle (2.13) + exifr (1.5.1) + extralite-bundle (2.14) fabrication (3.0.0) faker (3.5.3) i18n (>= 1.8.11, < 2) @@ -169,59 +170,60 @@ GEM faraday-net_http (>= 2.0, < 3.5) json logger - faraday-multipart (1.1.1) + faraday-multipart (1.2.0) multipart-post (~> 2.0) faraday-net_http (3.4.2) net-http (~> 0.5) - faraday-retry (2.3.2) + faraday-retry (2.4.0) faraday (~> 2.0) fast_blank (1.0.1) - fastimage (2.3.1) - ffi (1.17.2-aarch64-linux-gnu) - ffi (1.17.2-aarch64-linux-musl) - ffi (1.17.2-arm-linux-gnu) - ffi (1.17.2-arm-linux-musl) - ffi (1.17.2-arm64-darwin) - ffi (1.17.2-x86_64-darwin) - ffi (1.17.2-x86_64-linux-gnu) - ffi (1.17.2-x86_64-linux-musl) + fastimage (2.4.1) + ffi (1.17.4-aarch64-linux-gnu) + ffi (1.17.4-aarch64-linux-musl) + ffi (1.17.4-arm-linux-gnu) + ffi (1.17.4-arm-linux-musl) + ffi (1.17.4-arm64-darwin) + ffi (1.17.4-x86_64-darwin) + ffi (1.17.4-x86_64-linux-gnu) + ffi (1.17.4-x86_64-linux-musl) fspath (3.1.2) globalid (1.3.0) activesupport (>= 6.1) goldiloader (6.0.0) activerecord (>= 7.2, < 8.3) activesupport (>= 7.2, < 8.3) - google-protobuf (4.33.2) + google-protobuf (4.34.1) bigdecimal - rake (>= 13) - google-protobuf (4.33.2-aarch64-linux-gnu) + rake (~> 13.3) + google-protobuf (4.34.1-aarch64-linux-gnu) bigdecimal - rake (>= 13) - google-protobuf (4.33.2-aarch64-linux-musl) + rake (~> 13.3) + google-protobuf (4.34.1-aarch64-linux-musl) bigdecimal - rake (>= 13) - google-protobuf (4.33.2-arm64-darwin) + rake (~> 13.3) + google-protobuf (4.34.1-arm64-darwin) bigdecimal - rake (>= 13) - google-protobuf (4.33.2-x86_64-darwin) + rake (~> 13.3) + google-protobuf (4.34.1-x86_64-darwin) bigdecimal - rake (>= 13) - google-protobuf (4.33.2-x86_64-linux-gnu) + rake (~> 13.3) + google-protobuf (4.34.1-x86_64-linux-gnu) bigdecimal - rake (>= 13) - google-protobuf (4.33.2-x86_64-linux-musl) + rake (~> 13.3) + google-protobuf (4.34.1-x86_64-linux-musl) bigdecimal - rake (>= 13) + rake (~> 13.3) guess_html_encoding (0.0.11) hana (1.3.7) hashdiff (1.2.1) hashery (2.1.2) - hashie (5.0.0) + hashie (5.1.0) + logger highline (3.1.2) reline htmlentities (4.4.2) http_accept_language (2.1.1) - i18n (1.14.7) + i18n (1.14.8) concurrent-ruby (~> 1.0) image_optim (0.31.4) exifr (~> 1.2, >= 1.2.2) @@ -232,17 +234,18 @@ GEM image_size (3.4.0) in_threads (1.6.0) inflection (1.0.0) - io-console (0.8.1) - irb (1.15.3) + io-console (0.8.2) + irb (1.17.0) pp (>= 0.6.0) + prism (>= 1.3.0) rdoc (>= 4.0.0) reline (>= 0.4.2) iso8601 (0.13.0) jmespath (1.6.2) - json (2.17.1) - json-schema (6.0.0) + json (2.19.3) + json-schema (6.2.0) addressable (~> 2.8) - bigdecimal (~> 3.1) + bigdecimal (>= 3.1, < 5) json_schemer (2.5.0) bigdecimal hana (~> 1.3) @@ -250,16 +253,17 @@ GEM simpleidn (~> 0.2) jwt (2.10.1) base64 - kgio (2.11.4) language_server-protocol (3.17.0.5) - libv8-node (24.1.0.0) - libv8-node (24.1.0.0-aarch64-linux) - libv8-node (24.1.0.0-arm64-darwin) - libv8-node (24.1.0.0-x86_64-darwin) - libv8-node (24.1.0.0-x86_64-linux) - libv8-node (24.1.0.0-x86_64-linux-musl) + libv8-node (24.12.0.1) + libv8-node (24.12.0.1-aarch64-linux) + libv8-node (24.12.0.1-aarch64-linux-musl) + libv8-node (24.12.0.1-arm64-darwin) + libv8-node (24.12.0.1-x86_64-darwin) + libv8-node (24.12.0.1-x86_64-linux) + libv8-node (24.12.0.1-x86_64-linux-musl) lint_roller (1.1.0) - listen (3.9.0) + listen (3.10.0) + logger rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) literate_randomizer (0.4.0) @@ -271,7 +275,7 @@ GEM request_store (~> 1.0) logstash-event (1.2.02) logster (2.20.1) - loofah (2.24.1) + loofah (2.25.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) lru_redux (1.1.0) @@ -284,6 +288,8 @@ GEM net-smtp matrix (0.4.3) maxminddb (0.1.22) + mcp (0.10.0) + json-schema (>= 4.1) memory_profiler (1.1.0) message_bus (4.5.2) rack (> 2, < 4) @@ -293,28 +299,30 @@ GEM mime-types (3.7.0) logger mime-types-data (~> 3.2025, >= 3.2025.0507) - mime-types-data (3.2025.0924) + mime-types-data (3.2026.0407) mini_mime (1.1.5) - mini_racer (0.19.1) - libv8-node (~> 24.1.0.0) + mini_racer (0.20.0) + libv8-node (~> 24.12.0.1) mini_scheduler (0.18.0) sidekiq (>= 6.5, < 8.0) mini_sql (1.6.0) mini_suffix (0.3.3) ffi (~> 1.9) minio_runner (1.0.0) - minitest (5.26.2) - mocha (2.8.2) + minitest (6.0.3) + drb (~> 2.0) + prism (~> 1.5) + mocha (3.1.0) ruby2_keywords (>= 0.0.5) msgpack (1.8.0) - multi_json (1.18.0) - multi_xml (0.7.2) - bigdecimal (~> 3.1) + multi_json (1.19.1) + multi_xml (0.8.1) + bigdecimal (>= 3.1, < 5) multipart-post (2.4.1) - mustache (1.1.1) - net-http (0.8.0) + mustache (1.1.2) + net-http (0.9.1) uri (>= 0.11.1) - net-imap (0.5.12) + net-imap (0.6.3) date net-protocol net-pop (0.1.2) @@ -324,21 +332,21 @@ GEM net-smtp (0.5.1) net-protocol nio4r (2.7.5) - nokogiri (1.18.10-aarch64-linux-gnu) + nokogiri (1.19.2-aarch64-linux-gnu) racc (~> 1.4) - nokogiri (1.18.10-aarch64-linux-musl) + nokogiri (1.19.2-aarch64-linux-musl) racc (~> 1.4) - nokogiri (1.18.10-arm-linux-gnu) + nokogiri (1.19.2-arm-linux-gnu) racc (~> 1.4) - nokogiri (1.18.10-arm-linux-musl) + nokogiri (1.19.2-arm-linux-musl) racc (~> 1.4) - nokogiri (1.18.10-arm64-darwin) + nokogiri (1.19.2-arm64-darwin) racc (~> 1.4) - nokogiri (1.18.10-x86_64-darwin) + nokogiri (1.19.2-x86_64-darwin) racc (~> 1.4) - nokogiri (1.18.10-x86_64-linux-gnu) + nokogiri (1.19.2-x86_64-linux-gnu) racc (~> 1.4) - nokogiri (1.18.10-x86_64-linux-musl) + nokogiri (1.19.2-x86_64-linux-musl) racc (~> 1.4) oauth (1.1.3) base64 (~> 0.1) @@ -353,7 +361,7 @@ GEM multi_json (~> 1.3) multi_xml (~> 0.5) rack (>= 1.2, < 4) - octokit (5.6.1) + octokit (10.0.0) faraday (>= 1, < 3) sawyer (~> 0.9) oj (3.16.12) @@ -389,58 +397,57 @@ GEM optimist (3.2.1) ostruct (0.6.3) parallel (1.27.0) - parallel_tests (5.5.0) + parallel_tests (5.6.0) parallel - parser (3.3.10.0) + parser (3.3.11.1) ast (~> 2.4.1) racc pastel (0.8.0) tty-color (~> 0.5) - pdf-reader (2.15.0) + pdf-reader (2.15.1) Ascii85 (>= 1.0, < 3.0, != 2.0.0) afm (>= 0.2.1, < 2) hashery (~> 2.0) ruby-rc4 ttfunk - pg (1.6.2) - pg (1.6.2-aarch64-linux) - pg (1.6.2-aarch64-linux-musl) - pg (1.6.2-arm64-darwin) - pg (1.6.2-x86_64-darwin) - pg (1.6.2-x86_64-linux) - pg (1.6.2-x86_64-linux-musl) - pitchfork (0.18.1) + pg (1.6.3) + pg (1.6.3-aarch64-linux) + pg (1.6.3-aarch64-linux-musl) + pg (1.6.3-arm64-darwin) + pg (1.6.3-x86_64-darwin) + pg (1.6.3-x86_64-linux) + pg (1.6.3-x86_64-linux-musl) + pitchfork (0.18.2) logger rack (>= 2.0) - playwright-ruby-client (1.57.0) + playwright-ruby-client (1.59.0) + base64 concurrent-ruby (>= 1.1.6) mime-types (>= 3.0) pp (0.6.3) prettyprint prettier_print (1.2.1) prettyprint (0.2.0) - prism (1.6.0) + prism (1.9.0) progress (3.6.0) propshaft (1.3.1) actionpack (>= 7.0.0) activesupport (>= 7.0.0) rack - pry (0.15.2) + pry (0.16.0) coderay (~> 1.1) method_source (~> 1.0) + reline (>= 0.6.0) pry-rails (0.3.11) pry (>= 0.13.0) - pry-stack_explorer (0.6.1) - binding_of_caller (~> 1.0) - pry (~> 0.13) - psych (5.2.6) + psych (5.3.1) date stringio - public_suffix (7.0.0) + public_suffix (7.0.5) puma (7.1.0) nio4r (~> 2.0) racc (1.8.1) - rack (2.2.22) + rack (2.2.23) rack-mini-profiler (4.0.1) rack (>= 1.2.0) rack-protection (3.2.0) @@ -457,8 +464,8 @@ GEM activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.6.2) - loofah (~> 2.21) + rails-html-sanitizer (1.7.0) + loofah (~> 2.25) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) rails_failover (2.3.0) activerecord (>= 6.1, < 9.0) @@ -467,9 +474,9 @@ GEM rails_multisite (7.0.0) activerecord (>= 7.1) railties (>= 7.1) - railties (8.0.4) - actionpack (= 8.0.4) - activesupport (= 8.0.4) + railties (8.0.5) + actionpack (= 8.0.5) + activesupport (= 8.0.5) irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) @@ -479,27 +486,30 @@ GEM rainbow (3.1.1) raindrops (0.20.1) rake (13.3.1) - rake-compiler-dock (1.10.0) + rake-compiler-dock (1.11.0) rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - rb_sys (0.9.119) - rake-compiler-dock (= 1.10.0) - rbs (3.9.5) + rb_sys (0.9.126) + json (>= 2) + rake-compiler-dock (= 1.11.0) + rbs (4.0.2) logger + prism (>= 1.6.0) + tsort rbtrace (0.5.3) ffi (>= 1.0.6) msgpack (>= 0.4.3) optimist (>= 3.0.0) rchardet (1.10.0) - rdoc (6.17.0) + rdoc (7.2.0) erb psych (>= 4.0.0) tsort redcarpet (3.6.1) redis (5.4.0) redis-client (>= 0.22.0) - redis-client (0.26.1) + redis-client (0.28.0) connection_pool redis-namespace (1.11.0) redis (>= 4) @@ -512,10 +522,10 @@ GEM rinku (2.0.6) rotp (6.3.0) rouge (4.7.0) - rqrcode (3.1.1) + rqrcode (3.2.0) chunky_png (~> 1.0) rqrcode_core (~> 2.0) - rqrcode_core (2.0.1) + rqrcode_core (2.1.0) rrule (0.7.0) activesupport (>= 2.3) rspec (3.13.2) @@ -530,21 +540,21 @@ GEM rspec-html-matchers (0.10.0) nokogiri (~> 1) rspec (>= 3.0.0.a) - rspec-mocks (3.13.7) + rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-multi-mock (0.3.1) rspec (>= 3.7.0) - rspec-rails (8.0.2) + rspec-rails (8.0.4) actionpack (>= 7.2) activesupport (>= 7.2) railties (>= 7.2) - rspec-core (~> 3.13) - rspec-expectations (~> 3.13) - rspec-mocks (~> 3.13) - rspec-support (~> 3.13) - rspec-support (3.13.6) - rss (0.3.1) + rspec-core (>= 3.13.0, < 5.0.0) + rspec-expectations (>= 3.13.0, < 5.0.0) + rspec-mocks (>= 3.13.0, < 5.0.0) + rspec-support (>= 3.13.0, < 5.0.0) + rspec-support (3.13.7) + rss (0.3.2) rexml rswag-specs (2.17.0) activesupport (>= 5.2, < 8.2) @@ -553,85 +563,89 @@ GEM rspec-core (>= 2.14) rtlcss (0.2.1) mini_racer (>= 0.6.3) - rubocop (1.81.7) + rubocop (1.85.1) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) + mcp (~> 0.6) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.47.1, < 2.0) + rubocop-ast (>= 1.49.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.48.0) + rubocop-ast (1.49.1) parser (>= 3.3.7.2) - prism (~> 1.4) + prism (~> 1.7) rubocop-capybara (2.22.1) lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) - rubocop-discourse (3.13.3) + rubocop-discourse (3.16.0) activesupport (>= 6.1) lint_roller (>= 1.1.0) - rubocop (>= 1.73.2) rubocop-capybara (>= 2.22.0) + rubocop-discourse-base (>= 1.0.0) rubocop-factory_bot (>= 2.27.0) rubocop-rails (>= 2.30.3) rubocop-rspec (>= 3.0.1) rubocop-rspec_rails (>= 2.31.0) + rubocop-discourse-base (1.0.0) + rubocop (>= 1.80.0) rubocop-factory_bot (2.28.0) lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) - rubocop-rails (2.33.4) + rubocop-rails (2.34.3) activesupport (>= 4.2.0) lint_roller (~> 1.1) rack (>= 1.1) rubocop (>= 1.75.0, < 2.0) rubocop-ast (>= 1.44.0, < 2.0) - rubocop-rspec (3.8.0) + rubocop-rspec (3.9.0) lint_roller (~> 1.1) rubocop (~> 1.81) rubocop-rspec_rails (2.32.0) lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) rubocop-rspec (~> 3.5) - ruby-lsp (0.26.4) + ruby-lsp (0.26.9) language_server-protocol (~> 3.17.0) prism (>= 1.2, < 2.0) rbs (>= 3, < 5) ruby-lsp-rails (0.4.8) ruby-lsp (>= 0.26.0, < 0.27.0) - ruby-lsp-rspec (0.1.28) + ruby-lsp-rspec (0.1.29) ruby-lsp (~> 0.26.0) - ruby-prof (1.7.2) + ruby-prof (2.0.4) base64 + ostruct ruby-progressbar (1.13.0) ruby-rc4 (0.1.5) - ruby-readability (0.7.2) + ruby-readability (0.7.3) guess_html_encoding (>= 0.0.4) nokogiri (>= 1.6.0) ruby2_keywords (0.0.5) - rubyzip (2.4.1) + rubyzip (3.2.2) sanitize (7.0.0) crass (~> 1.0.2) nokogiri (>= 1.16.8) - sass-embedded (1.91.0-aarch64-linux-gnu) + sass-embedded (1.99.0-aarch64-linux-gnu) google-protobuf (~> 4.31) - sass-embedded (1.91.0-aarch64-linux-musl) + sass-embedded (1.99.0-aarch64-linux-musl) google-protobuf (~> 4.31) - sass-embedded (1.91.0-arm-linux-gnueabihf) + sass-embedded (1.99.0-arm-linux-gnueabihf) google-protobuf (~> 4.31) - sass-embedded (1.91.0-arm-linux-musleabihf) + sass-embedded (1.99.0-arm-linux-musleabihf) google-protobuf (~> 4.31) - sass-embedded (1.91.0-arm64-darwin) + sass-embedded (1.99.0-arm64-darwin) google-protobuf (~> 4.31) - sass-embedded (1.91.0-x86_64-darwin) + sass-embedded (1.99.0-x86_64-darwin) google-protobuf (~> 4.31) - sass-embedded (1.91.0-x86_64-linux-gnu) + sass-embedded (1.99.0-x86_64-linux-gnu) google-protobuf (~> 4.31) - sass-embedded (1.91.0-x86_64-linux-musl) + sass-embedded (1.99.0-x86_64-linux-musl) google-protobuf (~> 4.31) - sassc-embedded (1.80.5) + sassc-embedded (1.80.8) sass-embedded (~> 1.80) sawyer (0.9.3) addressable (>= 2.3.5) @@ -639,12 +653,12 @@ GEM securerandom (0.4.1) shoulda-matchers (7.0.1) activesupport (>= 7.1) - sidekiq (7.3.9) + sidekiq (7.3.10) base64 - connection_pool (>= 2.3.0) + connection_pool (>= 2.3.0, < 3) logger - rack (>= 2.2.4) - redis-client (>= 0.22.2) + rack (>= 2.2.4, < 3.3) + redis-client (>= 0.23.0, < 1) simplecov (0.22.0) docile (~> 1.1) simplecov-html (~> 0.11) @@ -655,22 +669,22 @@ GEM snaky_hash (2.0.3) hashie (>= 0.1.0, < 6) version_gem (>= 1.1.8, < 3) - sqlite3 (2.8.1-aarch64-linux-gnu) - sqlite3 (2.8.1-aarch64-linux-musl) - sqlite3 (2.8.1-arm-linux-gnu) - sqlite3 (2.8.1-arm-linux-musl) - sqlite3 (2.8.1-arm64-darwin) - sqlite3 (2.8.1-x86_64-darwin) - sqlite3 (2.8.1-x86_64-linux-gnu) - sqlite3 (2.8.1-x86_64-linux-musl) + sqlite3 (2.9.2-aarch64-linux-gnu) + sqlite3 (2.9.2-aarch64-linux-musl) + sqlite3 (2.9.2-arm-linux-gnu) + sqlite3 (2.9.2-arm-linux-musl) + sqlite3 (2.9.2-arm64-darwin) + sqlite3 (2.9.2-x86_64-darwin) + sqlite3 (2.9.2-x86_64-linux-gnu) + sqlite3 (2.9.2-x86_64-linux-musl) sshkey (3.0.0) - stackprof (0.2.27) - stringio (3.1.9) + stackprof (0.2.28) + stringio (3.2.0) stripe (11.1.0) syntax_tree (6.3.0) prettier_print (>= 1.2.0) - test-prof (1.5.0) - thor (1.4.0) + test-prof (1.6.0) + thor (1.5.0) tiktoken_ruby (0.0.15.1-aarch64-linux) tiktoken_ruby (0.0.15.1-aarch64-linux-musl) tiktoken_ruby (0.0.15.1-arm-linux) @@ -678,7 +692,7 @@ GEM tiktoken_ruby (0.0.15.1-x86_64-darwin) tiktoken_ruby (0.0.15.1-x86_64-linux) tiktoken_ruby (0.0.15.1-x86_64-linux-musl) - timeout (0.5.0) + timeout (0.6.1) tokenizers (0.6.3) rb_sys tokenizers (0.6.3-aarch64-linux) @@ -687,7 +701,8 @@ GEM tokenizers (0.6.3-x86_64-darwin) tokenizers (0.6.3-x86_64-linux) tokenizers (0.6.3-x86_64-linux-musl) - trilogy (2.9.0) + trilogy (2.12.2) + bigdecimal tsort (0.2.0) ttfunk (1.8.0) bigdecimal (~> 3.1) @@ -703,15 +718,12 @@ GEM tty-screen (0.8.2) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - tzinfo-data (1.2025.2) + tzinfo-data (1.2026.1) tzinfo (>= 1.0.0) unf (0.2.0) unicode-display_width (3.2.0) unicode-emoji (~> 4.1) - unicode-emoji (4.1.0) - unicorn (6.1.0) - kgio (~> 2.6) - raindrops (~> 0.7) + unicode-emoji (4.2.0) uniform_notifier (1.18.0) uri (1.1.1) useragent (0.16.11) @@ -719,7 +731,7 @@ GEM web-push (3.0.1) jwt (~> 2.0) openssl (~> 3.0) - webmock (3.25.1) + webmock (3.26.2) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) @@ -729,7 +741,7 @@ GEM nokogiri (~> 1.8) yaml-lint (0.1.2) yard (0.9.38) - zeitwerk (2.7.3) + zeitwerk (2.7.5) zendesk_api (1.38.0.rc1) faraday (> 2.0.0) faraday-multipart @@ -766,11 +778,11 @@ DEPENDENCIES addressable afm annotaterb + aws-sdk-bedrockruntime aws-sdk-mediaconvert aws-sdk-s3 aws-sdk-sns better_errors - binding_of_caller bootsnap bullet capybara @@ -856,7 +868,6 @@ DEPENDENCIES pitchfork propshaft pry-rails - pry-stack_explorer puma rack (< 3) rack-mini-profiler @@ -865,6 +876,7 @@ DEPENDENCIES rails_failover rails_multisite railties (~> 8.0.0) + raindrops rake rb-fsevent rbtrace @@ -896,7 +908,7 @@ DEPENDENCIES sassc-embedded sawyer shoulda-matchers - sidekiq + sidekiq (>= 7.3.10) simplecov sqlite3 sshkey @@ -912,7 +924,6 @@ DEPENDENCIES tty-prompt tzinfo-data unf - unicorn web-push webmock yaml-lint @@ -922,22 +933,23 @@ DEPENDENCIES CHECKSUMS Ascii85 (2.0.1) sha256=15cb5d941808543cbb9e7e6aea3c8ec3877f154c3461e8b3673e97f7ecedbe5a - actionmailer (8.0.4) sha256=3b9270d8e19f0afb534b11c52f439937dc30028adcbbae2b244f3383ce75de4b - actionpack (8.0.4) sha256=0364c7582f32c8f404725fa30d3f6853f834c5f4964afd4a072b848c8a23cddb - actionview (8.0.4) sha256=5bd3c41ee7a59e14cf062bb5e4ee53c9a253d12fc13c8754cae368012e1a1648 + actionmailer (8.0.5) sha256=7918fac842cfe985ed21692f3d212c914a0c816e30e6fa68633177bb22f38561 + actionpack (8.0.5) sha256=c9de868975dd124a0956499140bd5e63c367865deca01292df7c3195c8da4b35 + actionview (8.0.5) sha256=6d0fa9e63df0cf2729b1f54d0988336c149eb2bbc6049f4c2834d7b62f351413 actionview_precompiler (0.4.0) sha256=33b6bd6ec4c1b856e02fdf5f6512c9eb4a92ac1c0545e941b3e354b7d540ed1c active_model_serializers (0.8.4) sha256=7350e3d3b6a5946bbec033241d908013cc85ff4d584230e6aa074225547c754c - activejob (8.0.4) sha256=cbc8a85d0e168cb90a5629c8a36fe2d08ba840103d3aed3eee0c7beb784fccce - activemodel (8.0.4) sha256=8f4e4fac3cd104b1bf30419c3745206f6f724c0e2902a939b4113f4c90730dfd - activerecord (8.0.4) sha256=bda32c171799e5ca5460447d3b7272ed14447244e2497abf2107f87fc44cbf32 - activesupport (8.0.4) sha256=894a3a6c7733b5fae5a7df3acd76c4b563f38687df8a04fa3cbd25360f3fe95a - addressable (2.8.8) sha256=7c13b8f9536cf6364c03b9d417c19986019e28f7c00ac8132da4eb0fe393b057 + activejob (8.0.5) sha256=2dabe5c3bfe284aba4687c52b930564335435dde3a60b047821f9d3bd0d2ea10 + activemodel (8.0.5) sha256=c796813d46dc1373f4c6c0ec91dfc520b53683ea773c3b3f9a12c4b3eb145bc2 + activerecord (8.0.5) sha256=89b261b6cd910c9431cf2475f3f6e5e2f5ce589805043a33ef2b004376a129e6 + activesupport (8.0.5) sha256=37f213ff6a37cf3fadfa1a28c1a9678e2cb73b59bb9ebd0eeeca653cccadcb23 + addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af afm (1.0.0) sha256=5bd4d6f6241e7014ef090985ec6f4c3e9745f6de0828ddd58bc1efdd138f4545 annotaterb (4.20.0) sha256=871b2e898d1d60c23bdc59b72a5b840678a56355bf5f6fdeb8c79d317ff98bf7 ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383 aws-eventstream (1.4.0) sha256=116bf85c436200d1060811e6f5d2d40c88f65448f2125bc77ffce5121e6e183b aws-partitions (1.1134.0) sha256=28f5f6156777ac346904a79ce6cb3b14a521e3866fee12a0da86d7b500266d3e - aws-sdk-core (3.227.0) sha256=99071fc5e3ca9347873fd114574319740c3041745df3c74e27875bd912dfc79e + aws-sdk-bedrockruntime (1.74.0) sha256=fc5eb0ab9485fc847bfcef058b8c50f2f7996d4a8266ce3562da2daa5bf1dea5 + aws-sdk-core (3.244.0) sha256=3e458c078b0c5bdee95bc370c3a483374b3224cf730c1f9f0faf849a5d9a18ea aws-sdk-kms (1.99.0) sha256=ba292fc3ffd672532aae2601fe55ff424eee78da8e23c23ba6ce4037138275a8 aws-sdk-mediaconvert (1.165.0) sha256=d955a571cd8b0407c0778e1d0f2333a70bf9ab48e36c81da8c5b317db24001e4 aws-sdk-s3 (1.182.0) sha256=d0fc3579395cb6cb69bf6e975240ce031fc673190e74c8dddbdd6c18572b450d @@ -947,37 +959,35 @@ CHECKSUMS benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c better_errors (2.10.1) sha256=f798f1bac93f3e775925b7fcb24cffbcf0bb62ee2210f5350f161a6b75fc0a73 bigdecimal (3.3.1) sha256=eaa01e228be54c4f9f53bf3cc34fe3d5e845c31963e7fcc5bedb05a4e7d52218 - binding_of_caller (1.0.1) sha256=2b2902abff4246ddcfbc4da9b69bc4a019e22aeb300c2ff6289a173d4b90b29a - bootsnap (1.19.0) sha256=d3e54558c1a9ea10cb095eb1eb8e921ae83fd4d5764b8809f63aec18ce9f60b5 + bootsnap (1.23.0) sha256=c1254f458d58558b58be0f8eb8f6eec2821456785b7cdd1e16248e2020d3f214 builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f bullet (8.1.0) sha256=604b7e2636ec2137dcab3ba61a56248c39a0004a0c9405d58bad0686d23b98ff capybara (3.40.0) sha256=42dba720578ea1ca65fd7a41d163dd368502c191804558f6e0f71b391054aeef - capybara-playwright-driver (0.5.7) sha256=875a1928077d56be8b484f84674901a2374752d7842d93de2045bbede1aad242 - cbor (0.5.10.1) sha256=79cdf79f18dcd9ee97e0b849c6d573e5a2e3ddc1954d180f384d6ed2612b6df0 + capybara-playwright-driver (0.5.9) sha256=4c17fed20817b7e1bde2cfc8186e7bf5cd72017ce1aa695e35130f8e600e7282 + cbor (0.5.10.2) sha256=df5104f7a62c881123e6505441b1e276208be1771540c2cc3b1de8a210a7c52c certified (1.0.0) sha256=aa4cdf0e90e7ee96f6e0ce3daae39eaa8f0486124e0d92daf64d2105aeb9069c - cgi (0.5.0) sha256=fe99f65bb2c146e294372ebb27602adbc3b4c008e9ea7038c6bd48c1ec9759da + cgi (0.5.1) sha256=e93fcafc69b8a934fe1e6146121fa35430efa8b4a4047c4893764067036f18e9 chunky_png (1.4.0) sha256=89d5b31b55c0cf4da3cf89a2b4ebc3178d8abe8cbaf116a1dba95668502fdcfe coderay (1.1.3) sha256=dc530018a4684512f8f38143cd2a096c9f02a1fc2459edcfe534787a7fc77d4b colored2 (4.0.3) sha256=63e1038183976287efc43034f5cca17fb180b4deef207da8ba78d051cbce2b37 - concurrent-ruby (1.3.5) sha256=813b3e37aca6df2a21a3b9f1d497f8cbab24a2b94cab325bffe65ee0f6cbebc6 + concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab connection_pool (2.5.5) sha256=e54ff92855753df1fd7c59fa04a398833355f27dd14c074f8c83a05f72a716ad cose (1.3.1) sha256=d5d4dbcd6b035d513edc4e1ab9bc10e9ce13b4011c96e3d1b8fe5e6413fd6de5 cppjieba_rb (0.4.4) sha256=319a7ab57b6ec28a8d1b223487ecd114432f1930d7740db2f99c1991e6c8faaf crack (1.0.1) sha256=ff4a10390cd31d66440b7524eb1841874db86201d5b70032028553130b6d4c7e crass (1.0.6) sha256=dc516022a56e7b3b156099abc81b6d2b08ea1ed12676ac7a5657617f012bd45d - css_parser (1.21.1) sha256=6cfd3ffc0a97333b39d2b1b49c95397b05e0e3b684d68f77ec471ba4ec2ef7c7 + css_parser (2.0.0) sha256=af5c759a127b125b635006a6c6c2e05b96a1ebdeec21b3c415fd5f09ec714a0a csv (3.3.5) sha256=6e5134ac3383ef728b7f02725d9872934f523cb40b961479f69cf3afa6c8e73f - date (3.5.0) sha256=5e74fd6c04b0e65d97ad4f3bb5cb2d8efb37f386cc848f46310b4593ffc46ee5 - debug (1.11.0) sha256=1425db64cfa0130c952684e3dc974985be201dd62899bf4bbe3f8b5d6cf1aef2 - debug_inspector (1.2.0) sha256=9bdfa02eebc3da163833e6a89b154084232f5766087e59573b70521c77ea68a2 + date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0 + debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6 diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962 diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3 digest (3.2.1) sha256=ab3312b4e272d7d5dc41c564c86a25861a1f34ac5153374199a0b74861395947 digest-xxhash (0.2.9) sha256=a989d8309c03c4136a4bea9981ec0a146a2750de7f3dfb7b5624a3038aa598d7 - discourse-emojis (1.0.44) sha256=63425a32379fb471d58f5eac9a1e931fc5a94efb7d327f71f1580af4dfe4edb3 + discourse-emojis (1.0.45) sha256=d4b512eb140475eb67fddc8c1f089d4bcd00a43517ead77758a7384713019bcf discourse-fonts (0.0.19) sha256=78d4ddd671615908303a675427039d8d787c935e6deae184c6e143c18c6e0033 discourse-seed-fu (2.3.12) sha256=4f61d95c11ed54609046cd04eb3a51b531c5fa863fa86d1bea7d74264e5c75e4 - discourse_ai-tokenizers (0.4) sha256=54d7ddcc5479f3bb3057b90f4a85106b4602a07336b51d372c1a1dd8f08104c5 + discourse_ai-tokenizers (0.4.2) sha256=61c2f254582a3ae69255115b2b072904361003612b5b0f52aa64773817aae413 discourse_dev_assets (0.0.6) sha256=4dfe7946927aa3d61a4ba89b5aef39d6daaeb70e35d7125dc481806a5c0aea4e discourse_math_bundle (1.0.1) sha256=c7d82fa65c9680cab2f77daeba32c1b89e500faccd2269e050ab27d5e1bc8337 docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e @@ -985,116 +995,117 @@ CHECKSUMS dry-initializer (3.2.0) sha256=37d59798f912dc0a1efe14a4db4a9306989007b302dcd5f25d0a2a20c166c4e3 ed25519 (1.4.0) sha256=16e97f5198689a154247169f3453ef4cfd3f7a47481fde0ae33206cdfdcac506 email_reply_trimmer (0.2.0) sha256=05843fa5ee1a2037235f1f3c876e922f613e2b4406fea5bb14212d1708d6c525 - erb (6.0.0) sha256=2730893f9d8c9733f16cab315a4e4b71c1afa9cabc1a1e7ad1403feba8f52579 + erb (6.0.2) sha256=9fe6264d44f79422c87490a1558479bd0e7dad4dd0e317656e67ea3077b5242b erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9 - excon (1.3.2) sha256=a089babe98638e58042a7d542b2bbd183304527e33d612b6dde22fa491a544a5 - exifr (1.4.1) sha256=768374cc6b6ff3743acba57c1c35229bdd8c6b9fbc1285952047fc1215c4b894 - extralite-bundle (2.13) sha256=0d00338dd3b348f44a02bb9e93db3714231e7240a48320f1ee3a1db5197db3cc + excon (1.4.2) sha256=32d8d8eda619717d9b8043b4675e096fb5c2139b080e2ad3b267f88c545aaa35 + exifr (1.5.1) sha256=ad87a5dbc92946fbf1d8ccd178d557d95d9168e8b3c5c5f381ea2bffcc312521 + extralite-bundle (2.14) sha256=906c6e61dba586d6a0857e96ba985eef458ecd1b5ee009c8495c2c92ce6f18f4 fabrication (3.0.0) sha256=a6a0bfad9071348ad3cb1701df788524b888c0cdd044b988893e7509f7463be3 faker (3.5.3) sha256=b961482dc0bb15ccb9a98ea7878b925669e9ae8f5e59b607da540b768137d765 faraday (2.14.1) sha256=a43cceedc1e39d188f4d2cdd360a8aaa6a11da0c407052e426ba8d3fb42ef61c - faraday-multipart (1.1.1) sha256=77a18ff40149030fd1aef55bb4fc7a67ce46419a8a3fcd010e28c2526e8d8903 + faraday-multipart (1.2.0) sha256=7d89a949693714176f612323ca13746a2ded204031a6ba528adee788694ef757 faraday-net_http (3.4.2) sha256=f147758260d3526939bf57ecf911682f94926a3666502e24c69992765875906c - faraday-retry (2.3.2) sha256=2402d2029032ebd238a2046221e67f6ef0da78c5a8ce8cd4f8b9c62e4d6451d1 + faraday-retry (2.4.0) sha256=7b79c48fb7e56526faf247b12d94a680071ff40c9fda7cf1ec1549439ad11ebe fast_blank (1.0.1) sha256=269fc30414fed4e6403bc4a49081e1ea539f8b9226e59276ed1efaefabaa17ea - fastimage (2.3.1) sha256=23c629f1f3e7d61bcfcc06c25b3d2418bc6bf41d2e615dbf5132c0e3b63ecce9 - ffi (1.17.2-aarch64-linux-gnu) sha256=c910bd3cae70b76690418cce4572b7f6c208d271f323d692a067d59116211a1a - ffi (1.17.2-aarch64-linux-musl) sha256=69e6556b091d45df83e6c3b19d3c54177c206910965155a6ec98de5e893c7b7c - ffi (1.17.2-arm-linux-gnu) sha256=d4a438f2b40224ae42ec72f293b3ebe0ba2159f7d1bd47f8417e6af2f68dbaa5 - ffi (1.17.2-arm-linux-musl) sha256=977dfb7f3a6381206dbda9bc441d9e1f9366bf189a634559c3b7c182c497aaa3 - ffi (1.17.2-arm64-darwin) sha256=54dd9789be1d30157782b8de42d8f887a3c3c345293b57ffb6b45b4d1165f813 - ffi (1.17.2-x86_64-darwin) sha256=981f2d4e32ea03712beb26e55e972797c2c5a7b0257955d8667ba58f2da6440e - ffi (1.17.2-x86_64-linux-gnu) sha256=05d2026fc9dbb7cfd21a5934559f16293815b7ce0314846fee2ac8efbdb823ea - ffi (1.17.2-x86_64-linux-musl) sha256=97c0eb3981414309285a64dc4d466bd149e981c279a56371ef811395d68cb95c + fastimage (2.4.1) sha256=c64bebd46b6fd8943ab70c1e6e85ff728f970f2e48f92ecd249b6bc3a540ad20 + ffi (1.17.4-aarch64-linux-gnu) sha256=b208f06f91ffd8f5e1193da3cae3d2ccfc27fc36fba577baf698d26d91c080df + ffi (1.17.4-aarch64-linux-musl) sha256=9286b7a615f2676245283aef0a0a3b475ae3aae2bb5448baace630bb77b91f39 + ffi (1.17.4-arm-linux-gnu) sha256=d6dbddf7cb77bf955411af5f187a65b8cd378cb003c15c05697f5feee1cb1564 + ffi (1.17.4-arm-linux-musl) sha256=9d4838ded0465bef6e2426935f6bcc93134b6616785a84ffd2a3d82bc3cf6f95 + ffi (1.17.4-arm64-darwin) sha256=19071aaf1419251b0a46852abf960e77330a3b334d13a4ab51d58b31a937001b + ffi (1.17.4-x86_64-darwin) sha256=aa70390523cf3235096cf64962b709b4cfbd5c082a2cb2ae714eb0fe2ccda496 + ffi (1.17.4-x86_64-linux-gnu) sha256=9d3db14c2eae074b382fa9c083fe95aec6e0a1451da249eab096c34002bc752d + ffi (1.17.4-x86_64-linux-musl) sha256=3fdf9888483de005f8ef8d1cf2d3b20d86626af206cbf780f6a6a12439a9c49e fspath (3.1.2) sha256=b5ac9bafb97e2c8f8f9e303cd98ebd484be76fe9aa588bc4d01c6d99e78c9d75 globalid (1.3.0) sha256=05c639ad6eb4594522a0b07983022f04aa7254626ab69445a0e493aa3786ff11 goldiloader (6.0.0) sha256=613db1b28e9964291255a67a521f04d481b6afd6b9ca56ea1a612fd86e9a89c7 - google-protobuf (4.33.2) sha256=748150d6c642fd655ef39efa23ecf2abe6d616020039a6d1c1764be1da530315 - google-protobuf (4.33.2-aarch64-linux-gnu) sha256=822b2dcb707e94e652cd994642c31035935fca021adfac6164772c511eb7acd4 - google-protobuf (4.33.2-aarch64-linux-musl) sha256=c4b64428183cfd1953ec8c37beec1036668c8ec0865cfb0b18df21181ca397ee - google-protobuf (4.33.2-arm64-darwin) sha256=6d0ac185fed18768e5f16338455b1e4b7c38a97fc46f352e709f7a3007b64e1d - google-protobuf (4.33.2-x86_64-darwin) sha256=87cde586234674562cf099e2b708a65e376e2d39b0f0f48281f4b4ea182b47f8 - google-protobuf (4.33.2-x86_64-linux-gnu) sha256=73cba041477afcac92ff383fcbdec195ea28d96b994876d1deaa944d18f91786 - google-protobuf (4.33.2-x86_64-linux-musl) sha256=97cdf4f772c5540f9274603b00f1474ed5e6e2238b1d8b1585e77f941a36bd2c + google-protobuf (4.34.1) sha256=347181542b8d659c60f028fa3791c9cccce651a91ad27782dbc5c5e374796cdc + google-protobuf (4.34.1-aarch64-linux-gnu) sha256=f9c07607dc139c895f2792a7740fcd01cd94d4d7b0e0a939045b50d7999f0b1d + google-protobuf (4.34.1-aarch64-linux-musl) sha256=db58e5a4a492b43c6614486aea31b7fb86955b175d1d48f28ebf388f058d78a9 + google-protobuf (4.34.1-arm64-darwin) sha256=2745061f973119e6e7f3c81a0c77025d291a3caa6585a2cd24a25bbc7bedb267 + google-protobuf (4.34.1-x86_64-darwin) sha256=4dc498376e218871613589c4d872400d42ad9ae0c700bdb2606fe1c77a593075 + google-protobuf (4.34.1-x86_64-linux-gnu) sha256=87088c9fd8e47b5b40ca498fc1195add6149e941ff7e81c532a5b0b8876d4cc9 + google-protobuf (4.34.1-x86_64-linux-musl) sha256=8c0e91436fbe504ffc64f0bd621f2e69adbcce8ed2c58439d7a21117069cfdd7 guess_html_encoding (0.0.11) sha256=cab6468b945f38673fc41ad147fbbc89693b3c6c34b03b071e2ed669a603e098 hana (1.3.7) sha256=5425db42d651fea08859811c29d20446f16af196308162894db208cac5ce9b0d hashdiff (1.2.1) sha256=9c079dbc513dfc8833ab59c0c2d8f230fa28499cc5efb4b8dd276cf931457cd1 hashery (2.1.2) sha256=d239cc2310401903f6b79d458c2bbef5bf74c46f3f974ae9c1061fb74a404862 - hashie (5.0.0) sha256=9d6c4e51f2a36d4616cbc8a322d619a162d8f42815a792596039fc95595603da + hashie (5.1.0) sha256=c266471896f323c446ea8207f8ffac985d2718df0a0ba98651a3057096ca3870 highline (3.1.2) sha256=67cbd34d19f6ef11a7ee1d82ffab5d36dfd5b3be861f450fc1716c7125f4bb4a htmlentities (4.4.2) sha256=bbafbdf69f2eca9262be4efef7e43e6a1de54c95eb600f26984f71d2fe96c5c3 http_accept_language (2.1.1) sha256=0043f0d55a148cf45b604dbdd197cb36437133e990016c68c892d49dbea31634 - i18n (1.14.7) sha256=ceba573f8138ff2c0915427f1fc5bdf4aa3ab8ae88c8ce255eb3ecf0a11a5d0f + i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5 image_optim (0.31.4) sha256=5bffd0891268e8d189d46ee4b8599918581bba1032d244e6ace4779a434776c0 image_size (3.4.0) sha256=c6a580513fe74947e25e5d3f0aea1e33add6c20f7d0007efa65504317b7f029a in_threads (1.6.0) sha256=91a7e6138d279dc632f59b8a9a409e47148948e297c0f69c92f9a2479a182149 inflection (1.0.0) sha256=ceba9b26fc28b9af82e33e822d28f78a4312af75687efec81d5ef1062498d355 - io-console (0.8.1) sha256=1e15440a6b2f67b6ea496df7c474ed62c860ad11237f29b3bd187f054b925fcb - irb (1.15.3) sha256=4349edff1efa7ff7bfd34cb9df74a133a588ba88c2718098b3b4468b81184aaa + io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc + irb (1.17.0) sha256=168c4ddb93d8a361a045c41d92b2952c7a118fa73f23fe14e55609eb7a863aae iso8601 (0.13.0) sha256=298c2b15b7be5fa95a1372813d36a2257656cd8e906dfbc1f5cb409851425aa2 jmespath (1.6.2) sha256=238d774a58723d6c090494c8879b5e9918c19485f7e840f2c1c7532cf84ebcb1 - json (2.17.1) sha256=e0e4824541336a44915436f53e7ea74c687314fb8f88080fa1456f6a34ead92e - json-schema (6.0.0) sha256=79ecaffba197008912933f66f6c5428f5ce7716e42bb1a8f0d56079f2d58633f + json (2.19.3) sha256=289b0bb53052a1fa8c34ab33cc750b659ba14a5c45f3fcf4b18762dc67c78646 + json-schema (6.2.0) sha256=e8bff46ed845a22c1ab2bd0d7eccf831c01fe23bb3920caa4c74db4306813666 json_schemer (2.5.0) sha256=2f01fb4cce721a4e08dd068fc2030cffd0702a7f333f1ea2be6e8991f00ae396 jwt (2.10.1) sha256=e6424ae1d813f63e761a04d6284e10e7ec531d6f701917fadcd0d9b2deaf1cc5 - kgio (2.11.4) sha256=bda7a2146115998a5b07154e708e0ac02c38dcee7e793c33e2e14f600fdfffc6 language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc - libv8-node (24.1.0.0) sha256=2f0e9ac629c4c5753eaf7001952bb6dce4eb596f3dc0df3049ee7d9cfb9471cd - libv8-node (24.1.0.0-aarch64-linux) sha256=fe7787bdb082d1101f65d8f42572ec6c634776a334d82b9fedded152e1d4f358 - libv8-node (24.1.0.0-arm64-darwin) sha256=f34bdd85787a32a16db137ffbe83feb1cd09f4d69ff3c43cd2f0a675656ee16b - libv8-node (24.1.0.0-x86_64-darwin) sha256=243cfae376d7d54b02fb9e8cfd2a2a08e791d066fb78252925a825f05805083b - libv8-node (24.1.0.0-x86_64-linux) sha256=0857486e64f7bd4133d4aa607c42d0abade1ab53dffcbfd30f12e0b7dba8f157 - libv8-node (24.1.0.0-x86_64-linux-musl) sha256=080a243ac014054780cc0d0be2c18b93642a139d09622c0cfd1ebc8614d24437 + libv8-node (24.12.0.1) sha256=d93d23b861bfe5de3ba829e34a142402fb83b4c3592dd58d9ac4e027588d739a + libv8-node (24.12.0.1-aarch64-linux) sha256=22bd0246cde85d70c88cf772727ac3677a20ac1d169105f82efe5f1f7c39f755 + libv8-node (24.12.0.1-aarch64-linux-musl) sha256=791b5960f79525e87d1bd1e5f2bf3715ef2a38bac6c97f297853e98a8411ba89 + libv8-node (24.12.0.1-arm64-darwin) sha256=124904a46b4a15c01ac024b4cf537dcf199cfb49a309cc59f66315e156e48339 + libv8-node (24.12.0.1-x86_64-darwin) sha256=5eee594393e7a27dc230a7fca5f9f72fc11ed58bce655624a683f4d027bf2d16 + libv8-node (24.12.0.1-x86_64-linux) sha256=e1236be4765edc109bd6ecef2989cf781bdcbac6f6e2cb3236ec9568540a9cfa + libv8-node (24.12.0.1-x86_64-linux-musl) sha256=7563175534c40893815bfd28e8fe27e12ff1656700c7208f53de06d14001712b lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87 - listen (3.9.0) sha256=db9e4424e0e5834480385197c139cb6b0ae0ef28cc13310cfd1ca78377d59c67 + listen (3.10.0) sha256=c6e182db62143aeccc2e1960033bebe7445309c7272061979bb098d03760c9d2 literate_randomizer (0.4.0) sha256=05073c9b383983b1ed7e26c40b963468e91bc86e663b3eeff3a4af91b84217b1 logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 lograge (0.14.0) sha256=42371a75823775f166f727639f5ddce73dd149452a55fc94b90c303213dc9ae1 logstash-event (1.2.02) sha256=89a7dc60fac67070a5f60ba07409e541b09cb58906c391e90cb74b9f217467ae logster (2.20.1) sha256=a84bbe58e7f99c4eb0246ea3a952ed87950f63aeea3cdbe7147018d10cc9a2a8 - loofah (2.24.1) sha256=655a30842b70ec476410b347ab1cd2a5b92da46a19044357bbd9f401b009a337 + loofah (2.25.1) sha256=d436c73dbd0c1147b16c4a41db097942d217303e1f7728704b37e4df9f6d2e04 lru_redux (1.1.0) sha256=ee71d0ccab164c51de146c27b480a68b3631d5b4297b8ffe8eda1c72de87affb lz4-ruby (0.3.3) sha256=011be5ee230cfddc8308d4e2e0b05300c7bc755a887de799377ca6c5b6aede89 mail (2.9.0) sha256=6fa6673ecd71c60c2d996260f9ee3dd387d4673b8169b502134659ece6d34941 matrix (0.4.3) sha256=a0d5ab7ddcc1973ff690ab361b67f359acbb16958d1dc072b8b956a286564c5b maxminddb (0.1.22) sha256=50933be438fbed9dceabef4163eab41884bd8830d171fdb8f739bee769c4907e + mcp (0.10.0) sha256=09b9231eb16dff75cc7b8a95817c8acfcf4d1cab8d34f350671e43e765242b57 memory_profiler (1.1.0) sha256=79a17df7980a140c83c469785905409d3027ca614c42c086089d128b805aa8f8 message_bus (4.5.2) sha256=f1381bce05d9560e5ea7dfa56e44dfdf0080bda0ac02f4011eb662bb7dd9e778 messageformat-wrapper (1.1.0) sha256=ecea879626e412d1bc841c457dacfcbb1a62cf88ca83573e4ea34bb371f160bc method_source (1.1.0) sha256=181301c9c45b731b4769bc81e8860e72f9161ad7d66dd99103c9ab84f560f5c5 mime-types (3.7.0) sha256=dcebf61c246f08e15a4de34e386ebe8233791e868564a470c3fe77c00eed5e56 - mime-types-data (3.2025.0924) sha256=f276bca15e59f35767cbcf2bc10e023e9200b30bd6a572c1daf7f4cc24994728 + mime-types-data (3.2026.0407) sha256=909395cf029731355136527aa11bf58ea0655ee782359ccbf32c66238a8cadb3 mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef - mini_racer (0.19.1) sha256=3e4ec1bfbb3ebb39c23d8fc4b6e641b5dc6767a173a8938356c271895e5d6de3 + mini_racer (0.20.0) sha256=860e944c20894413c0e4921f8531166b22180d988e75a5dc152be9505da91ff2 mini_scheduler (0.18.0) sha256=d2f084f38da8d76c5844a92f0d6bd01fc9982a8b5e6c7679b6cf44c82da33503 mini_sql (1.6.0) sha256=5296637f6a4af5bb43e06788037e9a2968ff9c8eb65928befcba8cb41f42d6ee mini_suffix (0.3.3) sha256=8d1d33f92f69a2247c9b7d27173235da90479d955cdb863b63a7f53843b722e7 minio_runner (1.0.0) sha256=ca0fc56a90c63b65a26cda632938c9075046835d41f4b9d1e165b0550eae0538 - minitest (5.26.2) sha256=f021118a6185b9ba9f5af71f2ba103ad770c75afde9f2ab8da512677c550cde3 - mocha (2.8.2) sha256=1f77e729db47e72b4ef776461ce20caeec2572ffdf23365b0a03608fee8f4eee + minitest (6.0.3) sha256=88ac8a1de36c00692420e7cb3cc11a0773bbcb126aee1c249f320160a7d11411 + mocha (3.1.0) sha256=75f42d69ebfb1f10b32489dff8f8431d37a418120ecdfc07afe3bc183d4e1d56 msgpack (1.8.0) sha256=e64ce0212000d016809f5048b48eb3a65ffb169db22238fb4b72472fecb2d732 - multi_json (1.18.0) sha256=23f70cf73e2895a33e6d10f0ec955b28ef5627ca4bbad0f292e7d16f4675596f - multi_xml (0.7.2) sha256=307a96dc48613badb7b2fc174fd4e62d7c7b619bc36ea33bfd0c49f64f5787ce + multi_json (1.19.1) sha256=7aefeff8f2c854bf739931a238e4aea64592845e0c0395c8a7d2eea7fdd631b7 + multi_xml (0.8.1) sha256=addba0290bac34e9088bfe73dc4878530297a82a7bbd66cb44dcd0a4b86edf5a multipart-post (2.4.1) sha256=9872d03a8e552020ca096adadbf5e3cb1cd1cdd6acd3c161136b8a5737cdb4a8 - mustache (1.1.1) sha256=90891fdd50b53919ca334c8c1031eada1215e78d226d5795e523d6123a2717d0 - net-http (0.8.0) sha256=df42c47ce9f9e95ad32a317c97c12f945bc1af365288837ea4ff259876ecb46d - net-imap (0.5.12) sha256=cb8cd05bd353fcc19b6cbc530a9cb06b577a969ea10b7ddb0f37787f74be4444 + mustache (1.1.2) sha256=d420243400354da78ded2d81541b381ad8d94e8e9b95022d0d71d66f8ef36c00 + net-http (0.9.1) sha256=25ba0b67c63e89df626ed8fac771d0ad24ad151a858af2cc8e6a716ca4336996 + net-imap (0.6.3) sha256=9bab75f876596d09ee7bf911a291da478e0cd6badc54dfb82874855ccc82f2ad net-pop (0.1.2) sha256=848b4e982013c15b2f0382792268763b748cce91c9e91e36b0f27ed26420dff3 net-protocol (0.2.2) sha256=aa73e0cba6a125369de9837b8d8ef82a61849360eba0521900e2c3713aa162a8 net-smtp (0.5.1) sha256=ed96a0af63c524fceb4b29b0d352195c30d82dd916a42f03c62a3a70e5b70736 nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1 - nokogiri (1.18.10-aarch64-linux-gnu) sha256=7fb87235d729c74a2be635376d82b1d459230cc17c50300f8e4fcaabc6195344 - nokogiri (1.18.10-aarch64-linux-musl) sha256=7e74e58314297cc8a8f1b533f7212d1999dbe2639a9ee6d97b483ea2acc18944 - nokogiri (1.18.10-arm-linux-gnu) sha256=51f4f25ab5d5ba1012d6b16aad96b840a10b067b93f35af6a55a2c104a7ee322 - nokogiri (1.18.10-arm-linux-musl) sha256=1c6ea754e51cecc85c30ee8ab1e6aa4ce6b6e134d01717e9290e79374a9e00aa - nokogiri (1.18.10-arm64-darwin) sha256=c2b0de30770f50b92c9323fa34a4e1cf5a0af322afcacd239cd66ee1c1b22c85 - nokogiri (1.18.10-x86_64-darwin) sha256=536e74bed6db2b5076769cab5e5f5af0cd1dccbbd75f1b3e1fa69d1f5c2d79e2 - nokogiri (1.18.10-x86_64-linux-gnu) sha256=ff5ba26ba2dbce5c04b9ea200777fd225061d7a3930548806f31db907e500f72 - nokogiri (1.18.10-x86_64-linux-musl) sha256=0651fccf8c2ebbc2475c8b1dfd7ccac3a0a6d09f8a41b72db8c21808cb483385 + nokogiri (1.19.2-aarch64-linux-gnu) sha256=c34d5c8208025587554608e98fd88ab125b29c80f9352b821964e9a5d5cfbd19 + nokogiri (1.19.2-aarch64-linux-musl) sha256=7f6b4b0202d507326841a4f790294bf75098aef50c7173443812e3ac5cb06515 + nokogiri (1.19.2-arm-linux-gnu) sha256=b7fa1139016f3dc850bda1260988f0d749934a939d04ef2da13bec060d7d5081 + nokogiri (1.19.2-arm-linux-musl) sha256=61114d44f6742ff72194a1b3020967201e2eb982814778d130f6471c11f9828c + nokogiri (1.19.2-arm64-darwin) sha256=58d8ea2e31a967b843b70487a44c14c8ba1866daa1b9da9be9dbdf1b43dee205 + nokogiri (1.19.2-x86_64-darwin) sha256=7d9af11fda72dfaa2961d8c4d5380ca0b51bc389dc5f8d4b859b9644f195e7a4 + nokogiri (1.19.2-x86_64-linux-gnu) sha256=fa8feca882b73e871a9845f3817a72e9734c8e974bdc4fbad6e4bc6e8076b94f + nokogiri (1.19.2-x86_64-linux-musl) sha256=93128448e61a9383a30baef041bf1f5817e22f297a1d400521e90294445069a8 oauth (1.1.3) sha256=71ca1b534561bf31a9b2aee01147384064b555e796d1a0fe2591806bb4bdd633 oauth-tty (1.0.6) sha256=9e8bd1861d367cce18318d8f214f2e1a1d7cb3898de0a9ea79162b4fdecb3152 oauth2 (1.4.11) sha256=6739fcc8872bc94f476b0cae3e8bd78a56d8364b1b79b0757794c25e152d5c10 - octokit (5.6.1) sha256=48efb2c2aa83c2c394358f073d35ad71d4ac0f14870cd00ceebd3ef3949fe495 + octokit (10.0.0) sha256=82e99a539b7637b7e905e6d277bb0c1a4bed56735935cc33db6da7eae49a24e8 oj (3.16.12) sha256=ad9fad6a06dabcf4cfe6a420690a4375377685c16eee0ae88e8d38a43ed7b556 omniauth (2.1.2) sha256=def03277298b8f8a5d3ff16cdb2eb5edb9bffed60ee7dda24cc0c89b3ae6a0ce omniauth-facebook (9.0.0) sha256=440ad8dd9edc9ebec1fd6607b787667c8ce70d2969c2030d7e9ca42a271af854 @@ -1108,57 +1119,56 @@ CHECKSUMS optimist (3.2.1) sha256=8cf8a0fd69f3aa24ab48885d3a666717c27bc3d9edd6e976e18b9d771e72e34e ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 parallel (1.27.0) sha256=4ac151e1806b755fb4e2dc2332cbf0e54f2e24ba821ff2d3dcf86bf6dc4ae130 - parallel_tests (5.5.0) sha256=783c1e4da27c4096a7b360f080ae03cf1122cb0dfdb4fe827013e0521642f666 - parser (3.3.10.0) sha256=ce3587fa5cc55a88c4ba5b2b37621b3329aadf5728f9eafa36bbd121462aabd6 + parallel_tests (5.6.0) sha256=b2d7af382d1c0289daba65308d9143b3ad82d817d500c0ad1b4bde468beb13af + parser (3.3.11.1) sha256=d17ace7aabe3e72c3cc94043714be27cc6f852f104d81aa284c2281aecc65d54 pastel (0.8.0) sha256=481da9fb7d2f6e6b1a08faf11fa10363172dc40fd47848f096ae21209f805a75 - pdf-reader (2.15.0) sha256=c5025750bec8de7b11cfd1d1ccc2b944d2782c3638cd15b5ee1531d1206c0886 - pg (1.6.2) sha256=58614afd405cc9c2c9e15bffe8432e0d6cfc58b722344ad4a47c73a85189c875 - pg (1.6.2-aarch64-linux) sha256=0503c6be5b0ca5ca3aaf91f2ed638f90843313cb81e8e7d7b60ad4bb62c3d131 - pg (1.6.2-aarch64-linux-musl) sha256=c4402447c56279bea80472770522e95c8a2ff49b7f3e534d0cdb01eb27fd6eb8 - pg (1.6.2-arm64-darwin) sha256=4d44500b28d5193b26674583d199a6484f80f1f2ea9cf54f7d7d06a1b7e316b6 - pg (1.6.2-x86_64-darwin) sha256=c441a55723584e2ae41749bf26024d7ffdfe1841b442308ed50cd6b7fda04115 - pg (1.6.2-x86_64-linux) sha256=525f438137f2d1411a1ebcc4208ec35cb526b5a3b285a629355c73208506a8ea - pg (1.6.2-x86_64-linux-musl) sha256=e5c8668ffeaf7a9c3458a3dcb002dffa6d8ee1fca9ae534ffef861d2b15644ca - pitchfork (0.18.1) sha256=98f294024352c208d28732f7c009eed0d9ccae48d878a3b42722687338713059 - playwright-ruby-client (1.57.0) sha256=978bd6a25a0e85c633216bf0d73e050217ca640025b8258caf6ea8034f3e9ef4 + pdf-reader (2.15.1) sha256=18c6a986a84a3117fa49f4279fc2de51f5d2399b71833df5d2bccd595c7068ce + pg (1.6.3) sha256=1388d0563e13d2758c1089e35e973a3249e955c659592d10e5b77c468f628a99 + pg (1.6.3-aarch64-linux) sha256=0698ad563e02383c27510b76bf7d4cd2de19cd1d16a5013f375dd473e4be72ea + pg (1.6.3-aarch64-linux-musl) sha256=06a75f4ea04b05140146f2a10550b8e0d9f006a79cdaf8b5b130cde40e3ecc2c + pg (1.6.3-arm64-darwin) sha256=7240330b572e6355d7c75a7de535edb5dfcbd6295d9c7777df4d9dddfb8c0e5f + pg (1.6.3-x86_64-darwin) sha256=ee2e04a17c0627225054ffeb43e31a95be9d7e93abda2737ea3ce4a62f2729d6 + pg (1.6.3-x86_64-linux) sha256=5d9e188c8f7a0295d162b7b88a768d8452a899977d44f3274d1946d67920ae8d + pg (1.6.3-x86_64-linux-musl) sha256=9c9c90d98c72f78eb04c0f55e9618fe55d1512128e411035fe229ff427864009 + pitchfork (0.18.2) sha256=95d0b5a25792ebc94d627abd8a206652ff22acff1cc32ecd42c71669ead4ab94 + playwright-ruby-client (1.59.0) sha256=b9e66233ed7b83e917980badc27ecd233e244503c74772a3854dbd5d41438c21 pp (0.6.3) sha256=2951d514450b93ccfeb1df7d021cae0da16e0a7f95ee1e2273719669d0ab9df6 prettier_print (1.2.1) sha256=a72838b5f23facff21f90a5423cdcdda19e4271092b41f4ea7f50b83929e6ff9 prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193 - prism (1.6.0) sha256=bfc0281a81718c4872346bc858dc84abd3a60cae78336c65ad35c8fbff641c6b + prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85 progress (3.6.0) sha256=360ed306dfa43d6174e847d563c70736dca249e2333cfec4b0387306c86cd573 propshaft (1.3.1) sha256=9acc664ef67e819ffa3d95bd7ad4c3623ea799110c5f4dee67fa7e583e74c392 - pry (0.15.2) sha256=12d54b8640d3fa29c9211dd4ffb08f3fd8bf7a4fd9b5a73ce5b59c8709385b6b + pry (0.16.0) sha256=d76c69065698ed1f85e717bd33d7942c38a50868f6b0673c636192b3d1b6054e pry-rails (0.3.11) sha256=a69e28e24a34d75d1f60bcf241192a54253f8f7ef8a62cba1e75750a9653593d - pry-stack_explorer (0.6.1) sha256=a2dbea9b47c4ad00cf5c1ce21499f8128b915089e90015f7bafb6e9453baf340 - psych (5.2.6) sha256=814328aa5dcb6d604d32126a20bc1cbcf05521a5b49dbb1a8b30a07e580f316e - public_suffix (7.0.0) sha256=f7090b5beb0e56f9f10d79eed4d5fbe551b3b425da65877e075dad47a6a1b095 + psych (5.3.1) sha256=eb7a57cef10c9d70173ff74e739d843ac3b2c019a003de48447b2963d81b1974 + public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623 puma (7.1.0) sha256=e45c10cb124f224d448c98db653a75499794edbecadc440ad616cf50f2fd49dd racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f - rack (2.2.22) sha256=c5cf0b7f872559966d974abe3101a57d51caf12504ee76290b98720004f64542 + rack (2.2.23) sha256=a8fe9d7e07064770b8ec123663fded8a59ef7e2b6db5cda7173d45a5718ab69c rack-mini-profiler (4.0.1) sha256=485810c23211f908196c896ea10cad72ed68780ee2998bec1f1dfd7558263d78 rack-protection (3.2.0) sha256=3c74ba7fc59066453d61af9bcba5b6fe7a9b3dab6f445418d3b391d5ea8efbff rack-session (1.0.2) sha256=a02115e5420b4de036839b9811e3f7967d73446a554b42aa45106af335851d76 rack-test (2.2.0) sha256=005a36692c306ac0b4a9350355ee080fd09ddef1148a5f8b2ac636c720f5c463 rackup (1.0.1) sha256=ba86604a28989fe1043bff20d819b360944ca08156406812dca6742b24b3c249 rails-dom-testing (2.3.0) sha256=8acc7953a7b911ca44588bf08737bc16719f431a1cc3091a292bca7317925c1d - rails-html-sanitizer (1.6.2) sha256=35fce2ca8242da8775c83b6ba9c1bcaad6751d9eb73c1abaa8403475ab89a560 + rails-html-sanitizer (1.7.0) sha256=28b145cceaf9cc214a9874feaa183c3acba036c9592b19886e0e45efc62b1e89 rails_failover (2.3.0) sha256=eed6ea0674fd6f9f6b070ad297ad2ead121ecf9202920f6068b6a4f29d9491c9 rails_multisite (7.0.0) sha256=7aacf364ed86d2bee73fb679cbfe6c343ce89067b9746b3d5857fffc57f036f2 - railties (8.0.4) sha256=8203d853dcffab4abcdd05c193f101676a92068075464694790f6d8f72d5cb47 + railties (8.0.5) sha256=ad98c6e9a096b7e8cf63c70872b60ec6c1d4152be2a4ffa63483ec02a837a9d5 rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a raindrops (0.20.1) sha256=aa0eb9ff6834f2d9e232ba688bd49cb30be893bc5a3452e74722c94c1fab4730 rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c - rake-compiler-dock (1.10.0) sha256=dd62ee19df2a185a3315697e560cfa8cc9129901332152851e023fab0e94bf11 + rake-compiler-dock (1.11.0) sha256=eab51f2cd533eb35cea6b624a75281f047123e70a64c58b607471bb49428f8c2 rb-fsevent (0.11.2) sha256=43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe rb-inotify (0.11.1) sha256=a0a700441239b0ff18eb65e3866236cd78613d6b9f78fea1f9ac47a85e47be6e - rb_sys (0.9.119) sha256=64393fa148e402e1b79b64496d2aabfc7df79da6b822b8bb48dc1141eaf40b4b - rbs (3.9.5) sha256=eabaaf60aee84e38cbf94839c6e1b9cd145c7295fc3cc0e88c92e4069b1119b0 + rb_sys (0.9.126) sha256=ba958e0b8b4b89eeae0b3d24b64c809eb2c37e0ab0773a49e9b1c2e22c95aef8 + rbs (4.0.2) sha256=af75671e66cd03434cc546622741ebf83f6197ec4328375805306330bf78ef25 rbtrace (0.5.3) sha256=c432292f305d9ab12fd47d9722e0d5210d983758a951fe6107c36cc955cb923f rchardet (1.10.0) sha256=d5ea2ed61a720a220f1914778208e718a0c7ed2a484b6d357ba695aa7001390f - rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7 + rdoc (7.2.0) sha256=8650f76cd4009c3b54955eb5d7e3a075c60a57276766ebf36f9085e8c9f23192 redcarpet (3.6.1) sha256=d444910e6aa55480c6bcdc0cdb057626e8a32c054c29e793fa642ba2f155f445 redis (5.4.0) sha256=798900d869418a9fc3977f916578375b45c38247a556b61d58cba6bb02f7d06b - redis-client (0.26.1) sha256=1e39d2862c4516a75ff777ee6ed08827af39336bfece4a48e944244891d9a073 + redis-client (0.28.0) sha256=888892f9cd8787a41c0ece00bdf5f556dfff7770326ce40bb2bc11f1bfec824b redis-namespace (1.11.0) sha256=e91a1aa2b2d888b6dea1d4ab8d39e1ae6fac3426161feb9d91dd5cca598a2239 regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4 reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835 @@ -1167,71 +1177,72 @@ CHECKSUMS rinku (2.0.6) sha256=8b60670e3143f3db2b37efa262971ce3619ec23092045498ef9f077d82828d7d rotp (6.3.0) sha256=75d40087e65ed0d8022c33055a6306c1c400d1c12261932533b5d6cbcd868854 rouge (4.7.0) sha256=dba5896715c0325c362e895460a6d350803dbf6427454f49a47500f3193ea739 - rqrcode (3.1.1) sha256=4c2e1e36dab80720062388cfc827986ab622dc652437214a5fb6382985b6f00f - rqrcode_core (2.0.1) sha256=52f76d97ec837fa91b15a15a95c5c2740b22d722db5d6b071f76d4b40a3ba98a + rqrcode (3.2.0) sha256=64c1494ca6bb67d731330f38b50e3fd09eeab4f5dcd04b608e21218d1d0b9542 + rqrcode_core (2.1.0) sha256=f303b85df89c1b8fc5ee8dc19808c9dc4330e6329b660d99d4a8cbb36ca13051 rrule (0.7.0) sha256=816b6ac33c5705addfe25de3c3de05003ae68ae2ca02cf5c0e805ee387851f87 rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587 rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-html-matchers (0.10.0) sha256=d424bfeb0104884478be299b6695b56c2d0432bb77dc9cedecb5138e91c0e9ae - rspec-mocks (3.13.7) sha256=0979034e64b1d7a838aaaddf12bf065ea4dc40ef3d4c39f01f93ae2c66c62b1c + rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 rspec-multi-mock (0.3.1) sha256=289470f28d1d9dcdecabf70e9a14f97b0dc7e3dba090dfbe4c98c64ebd53794c - rspec-rails (8.0.2) sha256=113139a53f5d068d4f48d1c29ad5f982013ed9b0daa69d7f7b266eda5d433ace - rspec-support (3.13.6) sha256=2e8de3702427eab064c9352fe74488cc12a1bfae887ad8b91cba480ec9f8afb2 - rss (0.3.1) sha256=b46234c04551b925180f8bedfc6f6045bf2d9998417feda72f300e7980226737 + rspec-rails (8.0.4) sha256=06235692fc0892683d3d34977e081db867434b3a24ae0dd0c6f3516bad4e22df + rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c + rss (0.3.2) sha256=3bd0446d32d832cda00ba07f4b179401f903b52ea1fdaac0f1f08de61a501efa rswag-specs (2.17.0) sha256=a3b2bdf6df89f8741fe4a4ee47ceb1e77dc13e1c96bbe07352117d6e61afa9e3 rtlcss (0.2.1) sha256=213d5a00bf61267f93a7a516d699d77e1cc5f396743abb33c01e3f3243a7bf60 - rubocop (1.81.7) sha256=6fb5cc298c731691e2a414fe0041a13eb1beed7bab23aec131da1bcc527af094 - rubocop-ast (1.48.0) sha256=22df9bbf3f7a6eccde0fad54e68547ae1e2a704bf8719e7c83813a99c05d2e76 + rubocop (1.85.1) sha256=3dbcf9e961baa4c376eeeb2a03913dca5e3987033b04d38fa538aa1e7406cc77 + rubocop-ast (1.49.1) sha256=4412f3ee70f6fe4546cc489548e0f6fcf76cafcfa80fa03af67098ffed755035 rubocop-capybara (2.22.1) sha256=ced88caef23efea53f46e098ff352f8fc1068c649606ca75cb74650970f51c0c - rubocop-discourse (3.13.3) sha256=637395e37ac45f0c5ba4376d7648b5f1e3a8406697c38befb66a9729738a059f + rubocop-discourse (3.16.0) sha256=a5119262b62d727226c40661649dc937e80cb3e92b4b652fd44e04cd73930da0 + rubocop-discourse-base (1.0.0) sha256=a4121f0f2a8e32c3259fee22106af9fd35372cbeac14b0c69673bdee79b472b7 rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb - rubocop-rails (2.33.4) sha256=34ec8f6637706dc224483d949ccc88b3e41596a81a11a1ec0c7d74ecbea356b5 - rubocop-rspec (3.8.0) sha256=28440dccb3f223a9938ca1f946bd3438275b8c6c156dab909e2cb8bc424cab33 + rubocop-rails (2.34.3) sha256=10d37989024865ecda8199f311f3faca990143fbac967de943f88aca11eb9ad2 + rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2 rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100 - ruby-lsp (0.26.4) sha256=1cb3046a066c8f1983dfe5f0cd3baa76034d6ba156e8ab460b15ab129d37a9f7 + ruby-lsp (0.26.9) sha256=33a01c001c00a76b4e821efc04ed7572983430f31ca5d6f3e343d0b6ccab4129 ruby-lsp-rails (0.4.8) sha256=f09d1f926d4063deeb2f3049311925c20dfe6c912371e3bcd04a265a865c44ae - ruby-lsp-rspec (0.1.28) sha256=0db3b3ffba08c6d70eb7831e79090a1863f572fe131ed0ecfce8a2f7d01bf491 - ruby-prof (1.7.2) sha256=270424fcac37e611f2d15a55226c4628e234f8434e1d7c25ca8a2155b9fc4340 + ruby-lsp-rspec (0.1.29) sha256=798be579723376cd56b17d32373288fb1163e4cfe2024c7d068516a1cf214ee5 + ruby-prof (2.0.4) sha256=42190ff6870e055a9d58b39df63e83442113ef7169c0e27b599942c3f15d1435 ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33 ruby-rc4 (0.1.5) sha256=00cc40a39d20b53f5459e7ea006a92cf584e9bc275e2a6f7aa1515510e896c03 - ruby-readability (0.7.2) sha256=7351ddc89ac62ecdd35336acb1313ac29dc1dad9745d59f25109ec2215c6580c + ruby-readability (0.7.3) sha256=bd213fab037118cc15d999e167a8ea2cc6b689dc78c033e78fb36a2a37efc241 ruby2_keywords (0.0.5) sha256=ffd13740c573b7301cf7a2e61fc857b2a8e3d3aff32545d6f8300d8bae10e3ef - rubyzip (2.4.1) sha256=8577c88edc1fde8935eb91064c5cb1aef9ad5494b940cf19c775ee833e075615 + rubyzip (3.2.2) sha256=c0ed99385f0625415c8f05bcae33fe649ed2952894a95ff8b08f26ca57ea5b3c sanitize (7.0.0) sha256=269d1b9d7326e69307723af5643ec032ff86ad616e72a3b36d301ac75a273984 - sass-embedded (1.91.0-aarch64-linux-gnu) sha256=932bf7223ffbbdeefc91cd364de6bf9dbfdc7d80201911eb4dae8d9a7f5bee50 - sass-embedded (1.91.0-aarch64-linux-musl) sha256=08449fac861094055a1afe7da376f887f8192b3dba6658db1de7be17d32355c4 - sass-embedded (1.91.0-arm-linux-gnueabihf) sha256=8e971474d34bdf15a31f5d4b0d7fcfb8bee87177d875323d7cc6d24e95602ca6 - sass-embedded (1.91.0-arm-linux-musleabihf) sha256=6134921019684df17c71f976404a2a23c561d8ced727dcf7ab78ad33c18210b6 - sass-embedded (1.91.0-arm64-darwin) sha256=04df4cb5661ea0c4bd2f2e819e73f22fee97307e58117ea158ae6c828ece9a77 - sass-embedded (1.91.0-x86_64-darwin) sha256=8deab415ffc209249f27369a620be2497221ad40fe60fa86b6e961b13622ea76 - sass-embedded (1.91.0-x86_64-linux-gnu) sha256=f94852f7b5442a2a34994544a578f7157cd64dc1a3b7b922baf059328734e813 - sass-embedded (1.91.0-x86_64-linux-musl) sha256=d8cd06bc64fea00070fc4c89d306d7def0d7b343510b52ad9c86f9b285853bbf - sassc-embedded (1.80.5) sha256=b2720c938de54e9798bea17bc044ea0df05f552acec30b8e9a79060cceb9cb3e + sass-embedded (1.99.0-aarch64-linux-gnu) sha256=a46615b0295ca7bd979b9ce79f6b9f1d26881736400188bd6fd5c4b7c9b46473 + sass-embedded (1.99.0-aarch64-linux-musl) sha256=eaa6d56968909d1d54073c46e21c13fd5bbcb5af609d7e4fbe6b196426ca8e49 + sass-embedded (1.99.0-arm-linux-gnueabihf) sha256=f5f0748934660cda6948917af6dc974caf4d36ea6121e450982153b7d9c49b55 + sass-embedded (1.99.0-arm-linux-musleabihf) sha256=29a4056e76bc136025ba5d03e82d86ecdabfb6c07a473a4fdedcd72fb28dbbc4 + sass-embedded (1.99.0-arm64-darwin) sha256=20773f2fb0e8f4d0194eb1874dab4c0ef60262ff6dafe29361e217beb2208629 + sass-embedded (1.99.0-x86_64-darwin) sha256=371774c83b6dce8a2cb7b5ce5a0f918ff2735bf200b00e3bc7067366654fff13 + sass-embedded (1.99.0-x86_64-linux-gnu) sha256=a4e2ae5e9951815cb8b3ab408cee8b800852491988a57de735f18d259c70d7c4 + sass-embedded (1.99.0-x86_64-linux-musl) sha256=94be72a6f856c610e67b12303dc76a58412e64b24ce97bdf4912199b8145c8dd + sassc-embedded (1.80.8) sha256=ea62825e4031cc8267e6befd492bcf8e29f11ccc18500f4e8ee9adb7feb6d563 sawyer (0.9.3) sha256=0d0f19298408047037638639fe62f4794483fb04320269169bd41af2bdcf5e41 securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1 shoulda-matchers (7.0.1) sha256=b4bfd8744c10e0a36c8ac1a687f921ee7e25ed529e50488d61b79a8688749c77 - sidekiq (7.3.9) sha256=1108712e1def89002b28e3545d5ae15d4a57ffd4d2c25d97bb1360988826b5a7 + sidekiq (7.3.10) sha256=781eb4f65ef36042534ad73d72f211283afb7fee82eec786ada4ed1972ef8e3c simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5 simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 simpleidn (0.2.3) sha256=08ce96f03fa1605286be22651ba0fc9c0b2d6272c9b27a260bc88be05b0d2c29 snaky_hash (2.0.3) sha256=25a3d299566e8153fb02fa23fd9a9358845950f7a523ddbbe1fa1e0d79a6d456 - sqlite3 (2.8.1-aarch64-linux-gnu) sha256=9bce166d3e3595a42fc92c28d986ea11d499b55be8bd1cd491be04af30029543 - sqlite3 (2.8.1-aarch64-linux-musl) sha256=34912f6acf3e9c43c7998c6f99ba3146708e654cf9716b2983e260315cdeed72 - sqlite3 (2.8.1-arm-linux-gnu) sha256=9118d6abb5ca7ea4f1b50a6c42c763e612670f5eb673bbdf12e8d3bd63339bde - sqlite3 (2.8.1-arm-linux-musl) sha256=48a50815521f812713310190589a8ae196fa48b70b62b72f5766bafebae77e33 - sqlite3 (2.8.1-arm64-darwin) sha256=3cb617640577ec9c1b7c09744d1e368ad3d3851c2494540f5f007387da943477 - sqlite3 (2.8.1-x86_64-darwin) sha256=0028f5dd0b7a1ee6f1dadf31fc632abf7d815cb0baa0606549634fa45578f92e - sqlite3 (2.8.1-x86_64-linux-gnu) sha256=878f4a0c5c2c4d9d4345afe2a142a87805f388a24aa8a3c2dfe2f964d7686b7a - sqlite3 (2.8.1-x86_64-linux-musl) sha256=0c191ddfd71437b439e107a0d148630bef29a1eebd7b28bcc931470c328f657d + sqlite3 (2.9.2-aarch64-linux-gnu) sha256=eeb86db55645b85327ba75129e3614658d974bf4da8fdc87018a0d42c59f6e42 + sqlite3 (2.9.2-aarch64-linux-musl) sha256=4feff91fb8c2b13688da34b5627c9d1ed9cedb3ee87a7114ec82209147f07a6d + sqlite3 (2.9.2-arm-linux-gnu) sha256=1ee2eb06b5301aaf5ce343a6e88d99ac932d95202d7b350f0e7b6d8d588580d7 + sqlite3 (2.9.2-arm-linux-musl) sha256=8ca0de6aceede968de0394e22e95d549834c4d8e318f69a92a52f049878a0057 + sqlite3 (2.9.2-arm64-darwin) sha256=d15bd9609a05f9d54930babe039585efc8cadd57517c15b64ec7dfa75158a5e9 + sqlite3 (2.9.2-x86_64-darwin) sha256=ed691b5021674d72582d03c5a38e89634b961902735fb6225273892805421d13 + sqlite3 (2.9.2-x86_64-linux-gnu) sha256=dce83ffcb7e72f9f7aeb6e5404f15d277a45332fe18ccce8a8b3ed51e8d23aee + sqlite3 (2.9.2-x86_64-linux-musl) sha256=e8dd906a613f13b60f6d47ae9dda376384d9de1ab3f7e3f2fdf2fd18a871a2d7 sshkey (3.0.0) sha256=655ba351d6e01a48dfe59d65530af8975c777b8cc57a061770de3228ff2d11cd - stackprof (0.2.27) sha256=aff6d28656c852e74cf632cc2046f849033dc1dedffe7cb8c030d61b5745e80c - stringio (3.1.9) sha256=c111af13d3a73eab96a3bc2655ecf93788d13d28cb8e25c1dcbff89ace885121 + stackprof (0.2.28) sha256=4ec2ace02f386012b40ca20ef80c030ad711831f59511da12e83b34efb0f9a04 + stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 stripe (11.1.0) sha256=a76e82cc7e4d2433803ca5fbe9453d019df376236f0b9fbcb7f36e6dd327f98d syntax_tree (6.3.0) sha256=56e25a9692c798ec94c5442fe94c5e94af76bef91edc8bb02052cbdecf35f13d - test-prof (1.5.0) sha256=da487be26216fdd2cf3a4901c9a3e63c8af87964aa28740757f9c26a4cd4eae8 - thor (1.4.0) sha256=8763e822ccb0f1d7bee88cde131b19a65606657b847cc7b7b4b82e772bcd8a3d + test-prof (1.6.0) sha256=b04cee7b9684b9b31e23e258f835ba67ee5b4fd5f6cc7204d076ef695805c335 + thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 tiktoken_ruby (0.0.15.1-aarch64-linux) sha256=e2c5d00b20c10bd220a103a271011bfa828e159cfba3b99d2c4029069bbb9198 tiktoken_ruby (0.0.15.1-aarch64-linux-musl) sha256=2b58d9f2b0615d876a767b756c117b1438e68354513aff3d540b665b8eb6559c tiktoken_ruby (0.0.15.1-arm-linux) sha256=078faa950c93ec0929d6f70acc7f7374b044cb2561ee74fccf8ffbaf71068ed9 @@ -1239,7 +1250,7 @@ CHECKSUMS tiktoken_ruby (0.0.15.1-x86_64-darwin) sha256=e7978a186e548c7c81ac5183f5ed2b57c69924aeec5d0a1ce2222892628fdab1 tiktoken_ruby (0.0.15.1-x86_64-linux) sha256=cc53f9c43e8a4d434831b5a5b10d94d4eb07ad15d0582d568e0e9c8293447dfc tiktoken_ruby (0.0.15.1-x86_64-linux-musl) sha256=84c8fe1a94732cb241a3f353d2c191df56c6242614237d2433e510d8fab3ee26 - timeout (0.5.0) sha256=852aefd13f41d84c2d0d83099b275034c6517395884b58e635acc8847c9190cb + timeout (0.6.1) sha256=78f57368a7e7bbadec56971f78a3f5ecbcfb59b7fcbb0a3ed6ddc08a5094accb tokenizers (0.6.3) sha256=cb76b8e86893695f6cfe661861cb24680755bf1fb42dca1ddd3cdfef9f657994 tokenizers (0.6.3-aarch64-linux) sha256=9d54a23f2e2246cc942d183af4549e3972b937d9b01f7a387cb146bf698eee84 tokenizers (0.6.3-aarch64-linux-musl) sha256=c178d8556769256857d77fb396f8ab004b29d058f59c620a2cfc56b01b501e27 @@ -1247,7 +1258,7 @@ CHECKSUMS tokenizers (0.6.3-x86_64-darwin) sha256=4b71386cc08ceff5f86b448c74b2b297c00a280a1d502399b6cda23ef94e01fd tokenizers (0.6.3-x86_64-linux) sha256=77a45cbde59daac33bdda1a74d45c18080478992a00ee7d898e7b8d15d0b3149 tokenizers (0.6.3-x86_64-linux-musl) sha256=a4b08c53bf0c8f7674c3abd03e013f0bb7c0c2457174b116c2872a37c64f0297 - trilogy (2.9.0) sha256=a2d63b663ba68a4758e15d1f9afb228f5d16efc7fe7cea68699e1c106ef6067f + trilogy (2.12.2) sha256=75186245e831a9a3987234f836bf2934b9ebdfe110b1be88a80836fdc00ead54 tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f ttfunk (1.8.0) sha256=a7cbc7e489cc46e979dde04d34b5b9e4f5c8f1ee5fc6b1a7be39b829919d20ca tty-color (0.6.0) sha256=6f9c37ca3a4e2367fb2e6d09722762647d6f455c111f05b59f35730eeb24332a @@ -1256,23 +1267,22 @@ CHECKSUMS tty-reader (0.9.0) sha256=c62972c985c0b1566f0e56743b6a7882f979d3dc32ff491ed490a076f899c2b1 tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50 tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b - tzinfo-data (1.2025.2) sha256=a92375a1fbb47d38fe88fd514c40a38cc8f97d168da2a6479f15185e86470939 + tzinfo-data (1.2026.1) sha256=4ea36519ae5ae2cf0fad471207a519be006daf42e3b2359ee9e9c53f113609fd unf (0.2.0) sha256=e6bcc2e101d80e3f9459753db747d5926aada1aaaf61e629e93359da9a5b04ab unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 - unicode-emoji (4.1.0) sha256=4997d2d5df1ed4252f4830a9b6e86f932e2013fbff2182a9ce9ccabda4f325a5 - unicorn (6.1.0) sha256=45dd987add4c2b084c1880a68373af42797a704ad7441faff9b14b4982aa0fc0 + unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f uniform_notifier (1.18.0) sha256=4787785556f66f6418486da0f1d78b3239aaff98e2e7938fb05e2062b0ffce9d uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6 useragent (0.16.11) sha256=700e6413ad4bb954bb63547fa098dddf7b0ebe75b40cc6f93b8d54255b173844 version_gem (1.1.9) sha256=0c1a0962ae543c84a00889bb018d9f14d8f8af6029d26b295d98774e3d2eb9a4 web-push (3.0.1) sha256=5b4dd2f2bba3bd8951da6416492fe920a6f203d14d3080f943c5d01c0cc4b18d - webmock (3.25.1) sha256=ab9d5d9353bcbe6322c83e1c60a7103988efc7b67cd72ffb9012629c3d396323 + webmock (3.26.2) sha256=774556f2ea6371846cca68c01769b2eac0d134492d21f6d0ab5dd643965a4c90 webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 wisper (2.0.1) sha256=ce17bc5c3a166f241a2e6613848b025c8146fce2defba505920c1d1f3f88fae6 xpath (3.2.0) sha256=6dfda79d91bb3b949b947ecc5919f042ef2f399b904013eb3ef6d20dd3a4082e yaml-lint (0.1.2) sha256=e3960b171766ae187338a169815e99fe10fcb0d9c22b1c539e8d57e114324c8a yard (0.9.38) sha256=721fb82afb10532aa49860655f6cc2eaa7130889df291b052e1e6b268283010f - zeitwerk (2.7.3) sha256=b2e86b4a9b57d26ba68a15230dcc7fe6f040f06831ce64417b0621ad96ba3e85 + zeitwerk (2.7.5) sha256=d8da92128c09ea6ec62c949011b00ed4a20242b255293dd66bf41545398f73dd zendesk_api (1.38.0.rc1) sha256=9ebe2575d223ed1c0651b2d10df6c010141cda49d524c38532b472f7e8bb3f7a RUBY VERSION diff --git a/README.md b/README.md index 11fd0c00bf764..0b3d7cb7fc89b 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ We look forward to seeing your pull requests! We take security very seriously at Discourse; all our code is 100% open source and peer reviewed. Please read [our security guide](https://github.com/discourse/discourse/blob/main/docs/SECURITY.md) for an overview of security measures in Discourse, or if you wish to report a security issue. -Security fixes are listed in the [release notes](https://meta.discourse.org/tags/c/announcements/67/release-notes) for each version. +Security fixes are listed in the [release notes](https://releases.discourse.org) for each version. ## The Discourse Team diff --git a/app/assets/stylesheets/admin/admin_base.scss b/app/assets/stylesheets/admin/admin_base.scss index 5c6b5521873dc..3b96756ec5316 100644 --- a/app/assets/stylesheets/admin/admin_base.scss +++ b/app/assets/stylesheets/admin/admin_base.scss @@ -86,12 +86,6 @@ $mobile-breakpoint: 700px; .admin-contents { position: relative; - .nav-stacked { - @media screen and (width <= 700px) { - margin: 0; - } - } - .row::before, .row::after { display: table; @@ -352,10 +346,6 @@ $mobile-breakpoint: 700px; } } - .go-back { - margin-top: 1em; - } - .desc { padding-top: 3px; font-size: var(--font-down-1); @@ -363,6 +353,10 @@ $mobile-breakpoint: 700px; color: var(--primary-medium); } + .go-back { + margin-top: 1em; + } + .outdated { border: 1px solid var(--content-border-color); box-sizing: border-box; @@ -382,6 +376,48 @@ $mobile-breakpoint: 700px; } } +.interpolation-keys { + display: flex; + flex-wrap: wrap; + gap: 0.35em; + padding-top: 0.5em; + + &__pill { + display: inline-flex; + align-items: center; + gap: 0.25em; + padding: 0.15em 0.5em; + border: 1px solid var(--primary-low-mid); + border-radius: var(--d-border-radius); + background: transparent; + color: var(--primary-medium); + font-size: var(--font-down-1); + font-family: var(--d-font-family--monospace); + cursor: pointer; + transition: + background 0.15s, + border-color 0.15s; + + &:hover { + background: var(--primary-very-low); + border-color: var(--primary-low); + } + + &.is-used { + color: var(--success); + border-color: var(--success-low); + background: var(--success-low); + } + + &.is-invalid { + color: var(--danger); + border-color: var(--danger-low); + background: var(--danger-low); + cursor: default; + } + } +} + .content-list { width: 27%; float: left; @@ -666,14 +702,12 @@ $mobile-breakpoint: 700px; .admin-controls { display: flex; align-items: center; - background: var(--primary-low); .admin-actions { margin-left: auto; } nav { - background-color: var(--primary-low); width: 100%; display: inline-flex; position: relative; @@ -742,9 +776,8 @@ $mobile-breakpoint: 700px; } .controls { - background: var(--primary-low); width: 100%; - padding: 10px; + padding-bottom: var(--space-2); display: flex; align-items: center; @@ -861,7 +894,7 @@ $mobile-breakpoint: 700px; } .nav-stacked { - background-color: inherit; + margin: 0; a.active { color: var(--primary); @@ -877,7 +910,7 @@ $mobile-breakpoint: 700px; background-color: var(--secondary); margin-left: 0; border-left: solid 1px var(--content-border-color); - padding: 30px 0 90px 30px; + padding: 30px 0 0 30px; width: 82%; box-sizing: border-box; @@ -1287,3 +1320,4 @@ a.inline-editable-field { @import "admin/admin_config_components"; @import "admin/upcoming-changes"; @import "admin/discourse_id"; +@import "admin/admin_new_category_setup"; diff --git a/app/assets/stylesheets/admin/admin_config_area.scss b/app/assets/stylesheets/admin/admin_config_area.scss index eafb2ea7a12c5..7f076b729f0c4 100644 --- a/app/assets/stylesheets/admin/admin_config_area.scss +++ b/app/assets/stylesheets/admin/admin_config_area.scss @@ -103,13 +103,7 @@ } .admin-site-settings-filter-controls { - background: var(--primary-very-low); - margin-bottom: 1em; - - .controls, - .search.controls { - background: var(--primary-very-low); - } + border-bottom: 1px solid var(--content-border-color); } .admin-config-area-empty-list, @@ -131,7 +125,8 @@ flex-direction: column; width: calc(100% - 1em); border: 1px solid var(--content-border-color); - padding: 0.5em; + padding: var(--space-4); + border-radius: var(--d-border-radius); @media (max-width: $mobile-breakpoint) { flex-direction: column; diff --git a/app/assets/stylesheets/admin/admin_new_category_setup.scss b/app/assets/stylesheets/admin/admin_new_category_setup.scss new file mode 100644 index 0000000000000..a770450789949 --- /dev/null +++ b/app/assets/stylesheets/admin/admin_new_category_setup.scss @@ -0,0 +1,94 @@ +@use "lib/viewport"; + +.admin-new-category-setup { + .category-type-cards { + display: flex; + flex-direction: column; + gap: var(--space-6); + margin-top: var(--space-8); + + &__card { + position: relative; + border: 1px solid var(--primary-low); + border-radius: var(--d-border-radius); + + &-select { + all: unset; // reset browser button styles + width: 100%; + display: grid; + grid-template-areas: "icon title" "icon description"; + grid-template-columns: auto 1fr; + cursor: pointer; + text-align: left; + gap: 0 var(--space-6); + padding: var(--space-9) 0 var(--space-9); + + @include viewport.from(sm) { + padding: var(--space-8) 0 var(--space-9); + gap: 0 var(--space-8); + } + } + + &-icon { + grid-area: icon; + font-size: 2.75em; + margin-top: -0.1em; + padding-left: var(--space-6); + } + + &-name { + grid-area: title; + font-size: var(--font-up-1); + font-weight: bold; + } + + &-description { + grid-area: description; + color: var(--primary-high); + } + + &-bottom { + display: flex; + } + + &:hover, + &:focus-within { + border-color: var(--tertiary); + } + + &.--unavailable { + padding-bottom: 0; + + .category-type-cards__card-select { + cursor: not-allowed; + } + + &:hover, + &:focus-visible { + border-color: var(--primary-low); + } + + [class^="category-type-cards__card-"] { + opacity: 0.5; + } + + .category-type-cards__card-bottom, + .category-type-cards__card-badge { + opacity: 1; + } + } + } + + &__card-badge { + position: absolute; + right: 0; + top: 0; + font-size: var(--font-down-2); + color: var(--primary); + padding: var(--space-1) var(--space-2); + background: var(--highlight-low); + border-radius: 0 calc(var(--d-border-radius) - 1px) 0 + var(--d-border-radius); + } + } +} diff --git a/app/assets/stylesheets/admin/admin_report.scss b/app/assets/stylesheets/admin/admin_report.scss index 910bc79cfc95c..7b0d857cb4dfb 100644 --- a/app/assets/stylesheets/admin/admin_report.scss +++ b/app/assets/stylesheets/admin/admin_report.scss @@ -1,6 +1,17 @@ @use "lib/viewport"; .admin-report { + .select-kit { + @include viewport.from(sm) { + width: auto; + max-width: 250px; + } + + @include viewport.until(sm) { + width: 100% !important; + } + } + .conditional-loading-section { &.is-loading { margin: 0; @@ -10,9 +21,7 @@ .header { display: flex; align-items: center; - border-bottom: 1px solid var(--content-border-color); margin-bottom: 0.5em; - padding-bottom: 0.5em; } .header .breadcrumb { @@ -79,17 +88,11 @@ } } - .body { - display: flex; - flex-direction: row; - } - - .main { - flex: 1; - min-width: 0; // allow chart.js to shrink below intrinsic width + .d-page-subheader__title a { + color: var(--primary); } - .main .report-alert { + .report-alert { margin: 0; text-align: center; padding: 3em; @@ -123,6 +126,18 @@ color: var(--danger); } } +} + +body:not(.uc-reporting-improvements) .admin-report { + .body { + display: flex; + flex-direction: row; + } + + .main { + flex: 1; + min-width: 0; // allow chart.js to shrink below intrinsic width + } .average-chart { font-style: italic; @@ -187,10 +202,6 @@ } } } - - .d-page-subheader__title a { - color: var(--primary); - } } .rtl .admin-report { diff --git a/app/assets/stylesheets/admin/admin_report_chart.scss b/app/assets/stylesheets/admin/admin_report_chart.scss index f39e2f9aa6908..0f7598f302f53 100644 --- a/app/assets/stylesheets/admin/admin_report_chart.scss +++ b/app/assets/stylesheets/admin/admin_report_chart.scss @@ -1,3 +1,5 @@ +@use "lib/viewport"; + .admin-report-chart { animation: fadein 2s; @@ -5,3 +7,151 @@ animation-duration: 0s; } } + +body.uc-reporting-improvements .admin-contents:not(.dashboard) .chart { + &__wrapper { + display: flex; + flex-direction: column; + } + + &__body { + margin-block: var(--space-4); + flex: 1; + min-width: 0; // allow chart.js to shrink below intrinsic width + + .report-alert { + margin: 0; + text-align: center; + padding: 3em; + border: 1px solid transparent; + + a { + color: var(--primary-high); + } + + .d-icon { + color: var(--primary-medium); + font-size: var(--font-up-5); + display: block; + margin: 0.25em auto; + } + + &.no-data, + &.rate-limited { + background: var(--secondary); + border-color: var(--primary-low); + color: var(--primary); + } + + &.rate-limited .d-icon { + color: var(--danger); + } + + &.timeout, + &.exception { + border-color: var(--danger-low); + color: var(--danger); + } + } + + .average-chart { + font-style: italic; + color: var(--primary-high); + text-align: right; + } + } + + &__filters { + display: flex; + align-items: flex-start; // aligned to top to provide alignment when subcat checkbox is in play + gap: var(--space-2); + margin-bottom: var(--space-4); + + @include viewport.until(sm) { + flex-direction: column; + align-items: stretch; + } + + .chart-groupings { + display: flex; + gap: var(--space-2); + background-color: var(--primary-very-low); + border-radius: var(--d-border-radius-large); + padding: var(--space-1) var(--space-2); + + @include viewport.from(sm) { + margin-right: auto; + } + + .chart-grouping { + border-radius: var(--d-border-radius-large); + background: transparent; + + @include viewport.until(sm) { + flex-grow: 1; + } + + &:hover { + background: transparent; + color: var(--primary); + } + + &.active { + background: var(--secondary); + box-shadow: var(--shadow-card); + } + } + } + } + + &__filter-label { + margin-top: var(--space-1); + } + + &__additional-filters { + display: flex; + gap: var(--space-2); + + @include viewport.until(sm) { + flex-direction: column; + } + } + + &__dates { + .d-date-time-input-range { + display: flex; + gap: var(--space-2); + + > * { + margin: 0; + } + } + + .d-date-time-input { + @include viewport.until(sm) { + flex-grow: 1; + } + } + } + + &__actions { + display: flex; + gap: var(--space-4); + justify-content: flex-end; + margin-top: var(--space-4); + } + + &__modes { + list-style: none; + margin-right: auto; + + .mode { + display: inline-flex; + flex: 1 0 0px; + + .mode-btn.is-current { + color: var(--tertiary); + } + } + } +} diff --git a/app/assets/stylesheets/admin/admin_report_stacked_chart.scss b/app/assets/stylesheets/admin/admin_report_stacked_chart.scss index e6e0267ac01bc..55a26ec4b2391 100644 --- a/app/assets/stylesheets/admin/admin_report_stacked_chart.scss +++ b/app/assets/stylesheets/admin/admin_report_stacked_chart.scss @@ -1,4 +1,4 @@ -.admin-report-stacked-chart { +body:not(.uc-reporting-improvements) .admin-report-stacked-chart { .chart-canvas-container { height: 250px; } diff --git a/app/assets/stylesheets/admin/admin_reports.scss b/app/assets/stylesheets/admin/admin_reports.scss index 6e2f7a31da7df..83fd5878edf27 100644 --- a/app/assets/stylesheets/admin/admin_reports.scss +++ b/app/assets/stylesheets/admin/admin_reports.scss @@ -9,8 +9,8 @@ } } - .admin-report-chart .chart-canvas-container .chart-canvas { - height: 400px; + .admin-report-chart .chart-canvas-container { + height: clamp(200px, 50vh, 350px); } } diff --git a/app/assets/stylesheets/admin/badges.scss b/app/assets/stylesheets/admin/badges.scss index 4da01218ddb93..d611f0ffd3e5d 100644 --- a/app/assets/stylesheets/admin/badges.scss +++ b/app/assets/stylesheets/admin/badges.scss @@ -98,6 +98,7 @@ .readonly-field { color: var(--primary-high); + font-size: var(--font-down-1-rem); } .badge-preview { diff --git a/app/assets/stylesheets/admin/customize.scss b/app/assets/stylesheets/admin/customize.scss index dd5e3d83db992..6efae03c06ebd 100644 --- a/app/assets/stylesheets/admin/customize.scss +++ b/app/assets/stylesheets/admin/customize.scss @@ -775,6 +775,28 @@ } .admin-embedding { + .admin-embedding-index__full-app-toggle { + display: flex; + align-items: flex-start; + gap: var(--space-3); + margin-bottom: var(--space-4); + } + + .admin-embedding-index__full-app-toggle-text { + display: flex; + flex-direction: column; + gap: var(--space-1); + } + + .admin-embedding-index__full-app-toggle-label { + font-weight: 700; + } + + .admin-embedding-index__full-app-toggle-description { + color: var(--primary-medium); + font-size: var(--font-down-1); + } + .admin-embeddable-host-item__delete { &:hover { svg.d-icon { diff --git a/app/assets/stylesheets/admin/dashboard.scss b/app/assets/stylesheets/admin/dashboard.scss index eaf802aab59b9..da9b66564ca92 100644 --- a/app/assets/stylesheets/admin/dashboard.scss +++ b/app/assets/stylesheets/admin/dashboard.scss @@ -210,6 +210,10 @@ margin-left: -5px; } + .site-traffic .chart-canvas-container { + height: 250px; + } + .chart-canvas { width: 100%; height: 100%; @@ -352,7 +356,9 @@ padding: 0.65em 0.25em; } - .admin-report .main { + .admin-report .main, + //temp fix for reporting upcoming changes + .admin-report .chart__body { border: 1px solid var(--content-border-color); &:hover { @@ -360,6 +366,13 @@ } } + // temp fix for reporting upcoming changes + .alert { + .uc-reporting-improvements & { + margin-bottom: 0; + } + } + .admin-report:not(:last-child) { .main { border-bottom: 0; @@ -741,17 +754,6 @@ } } -.admin-new-feature-item__header-experimental { - color: var(--tertiary); - background-color: var(--tertiary-very-low); - padding: 0.5em; - font-size: var(--font-down-3); - margin-left: 0.5rem; - font-weight: 400; - border-radius: var(--d-border-radius); - display: inline-block; -} - .admin-new-feature-item__body { display: flex; justify-content: space-between; @@ -825,13 +827,3 @@ } } } - -.admin-new-features__experiments-filter { - display: flex; - margin-bottom: 1em; - align-items: center; - - .d-toggle-switch { - margin-right: 0.5em; - } -} diff --git a/app/assets/stylesheets/admin/settings.scss b/app/assets/stylesheets/admin/settings.scss index 8d4dbaccd58be..03d5cf3de676e 100644 --- a/app/assets/stylesheets/admin/settings.scss +++ b/app/assets/stylesheets/admin/settings.scss @@ -3,6 +3,12 @@ .setting { padding-bottom: 20px; + &.icon { + .setting-value .multi-select .formatted-selection { + display: none; + } + } + .setting-label { float: left; width: 17.6576%; @@ -58,7 +64,7 @@ } } - .setting-theme-warning { + .setting-override-warning { font-size: var(--font-down-1); color: var(--primary-medium); diff --git a/app/assets/stylesheets/admin/site-settings.scss b/app/assets/stylesheets/admin/site-settings.scss index 101980108e034..26d1d284cd4e1 100644 --- a/app/assets/stylesheets/admin/site-settings.scss +++ b/app/assets/stylesheets/admin/site-settings.scss @@ -10,16 +10,13 @@ margin-left: 0.5em; } -.admin-plugin-config-area { - &__settings { - .admin-filtered-site-settings { - padding: 0.5em 1em; - } +.admin-filtered-site-settings { + padding: 1em; +} - .setting-label { - margin-left: 18px; - } - } +body.has-admin-changes-banner #main-outlet { + // makes space so banner doesn't overlap content + padding-bottom: 6em; } .admin-changes-banner { @@ -36,6 +33,12 @@ box-shadow: var(--shadow-card); z-index: 1; + .footer-nav-visible & { + bottom: calc( + var(--footer-nav-height) + env(safe-area-inset-bottom) + var(--space-4) + ); + } + @include viewport.until(sm) { flex-direction: column; justify-content: flex-start; diff --git a/app/assets/stylesheets/admin/staff_logs.scss b/app/assets/stylesheets/admin/staff_logs.scss index 6999211372e35..673276e1e76be 100644 --- a/app/assets/stylesheets/admin/staff_logs.scss +++ b/app/assets/stylesheets/admin/staff_logs.scss @@ -142,11 +142,8 @@ gap: 0.5em; justify-content: space-between; margin: 0 0 1em 0; - - // for too small screen, we want it to also wrap - @media (width <= 400px) { - flex-wrap: wrap; - } + min-width: 0; + flex-wrap: wrap; .staff-action-logs-controls__left { flex: 1 1 auto; @@ -155,6 +152,7 @@ display: flex; flex-wrap: wrap; gap: 0.5em; + min-width: 0; // we want to put it in one line .date-filter-container .d-date-time-input-range { @@ -180,15 +178,16 @@ gap: 0.5em; align-items: center; } +} - a.filter { - .label { - font-weight: bold; - } +.staff-action-logs-filters { + display: flex; + flex-wrap: wrap; + gap: var(--space-2); - .d-icon { - margin-left: 0.5em; - } + .btn { + gap: var(--space-2); + text-align: left; } } diff --git a/app/assets/stylesheets/admin/upcoming-changes.scss b/app/assets/stylesheets/admin/upcoming-changes.scss index f200b74f8935d..ff9429c0f3c30 100644 --- a/app/assets/stylesheets/admin/upcoming-changes.scss +++ b/app/assets/stylesheets/admin/upcoming-changes.scss @@ -21,7 +21,8 @@ width: 35%; } - &__dependents { + &__dependents, + &__related { margin-top: var(--space-2); } @@ -53,23 +54,48 @@ } &__badge { + display: flex; font-size: var(--font-down-2); - padding: 0.15rem 0.3rem; - border-radius: 4px; + border-radius: var(--d-button-border-radius); color: var(--primary-very-high); - background: var(--tertiary-low); + background: var(--tertiary-very-low); letter-spacing: 0.25px; - align-items: center; - display: inline-flex; - gap: var(--space-1); + + span { + display: flex; + align-items: center; + gap: 0 var(--space-1); + } + + &-content { + padding: var(--space-half) var(--space-2); + } svg { - height: 0.75em; + font-size: var(--font-down-2); color: var(--primary-high); } - &.--status-permanent { - background-color: var(--success-low); + &-info { + border-left: 1px solid var(--secondary); + border-radius: 0 var(--d-button-border-radius) + var(--d-button-border-radius) 0; + padding: var(--space-half) var(--space-1); + } + + &:focus-visible, + &:hover { + .upcoming-change__badge-info { + background: var(--tertiary); + + .d-icon { + color: var(--secondary); + } + } + } + + &.--has-tooltip { + cursor: pointer; } } diff --git a/app/assets/stylesheets/color_definitions.scss b/app/assets/stylesheets/color_definitions.scss index 13105b82d1125..45181ef2a71a8 100644 --- a/app/assets/stylesheets/color_definitions.scss +++ b/app/assets/stylesheets/color_definitions.scss @@ -139,7 +139,7 @@ --input-border-color: var(--primary-400); --table-border-color: var(--content-border-color); --metadata-color: var(--primary-medium); - --d-badge-card-background-color: var(--primary-very-low); + --d-badge-card-background-color: var(--secondary); --mention-background-color: var(--primary-low); --title-color: var(--primary); --title-color--header: var(--header_primary); diff --git a/app/assets/stylesheets/common/base/_index.scss b/app/assets/stylesheets/common/base/_index.scss index e9f3271338025..c4724fea42fb2 100644 --- a/app/assets/stylesheets/common/base/_index.scss +++ b/app/assets/stylesheets/common/base/_index.scss @@ -27,6 +27,7 @@ @import "faqs"; @import "group"; @import "groups"; +@import "heading-anchor"; @import "header"; @import "history"; @import "json_schema"; diff --git a/app/assets/stylesheets/common/base/_topic-list.scss b/app/assets/stylesheets/common/base/_topic-list.scss index cbac395345b50..05e22639d75e7 100644 --- a/app/assets/stylesheets/common/base/_topic-list.scss +++ b/app/assets/stylesheets/common/base/_topic-list.scss @@ -135,6 +135,10 @@ } .bulk-select-topics-dropdown { + display: flex; + align-items: center; + gap: var(--space-1) var(--space-2); + .select-kit.single-select.dropdown-select-box .select-kit-row { .texts .name { font-weight: normal; @@ -149,6 +153,11 @@ } } +.bulk-select-topics-actions { + display: flex; + gap: var(--space-2); +} + .topic-list { width: 100%; border-collapse: collapse; @@ -524,6 +533,7 @@ .topic-list-data.bulk-select { padding: 0; width: 30px; + text-align: center; label { margin: 0; @@ -652,11 +662,10 @@ .bulk-select-topics { display: inline-flex; + flex-wrap: wrap; + gap: var(--space-2); + align-items: end; margin-left: -5px; - - .btn { - margin-right: var(--space-2); - } } } @@ -876,18 +885,7 @@ .discourse-tags { display: inline; - - &__tag-separator { - position: absolute; - display: inline-block; - vertical-align: middle; - margin-left: -0.5em; - margin-top: 0.25em; - } - - .discourse-tag { - margin: 0 0.5em 0 0; - } + vertical-align: bottom; } .badge-wrapper { diff --git a/app/assets/stylesheets/common/base/about.scss b/app/assets/stylesheets/common/base/about.scss index 694713ca81427..4f37311606cc5 100644 --- a/app/assets/stylesheets/common/base/about.scss +++ b/app/assets/stylesheets/common/base/about.scss @@ -7,11 +7,15 @@ gap: 2em; max-width: 1100px; + h2 { + font-size: var(--font-up-1); + } + .--custom-group { max-width: unset; margin-top: 3em; - h3 { + h2 { a { color: var(--primary); @@ -40,6 +44,10 @@ &__header { max-width: 1100px; + + h1 { + font-size: var(--font-up-1); + } } &__left-side { @@ -113,7 +121,7 @@ &__moderators { margin-top: 3em; - h3 { + h2 { margin-bottom: 1em; } } diff --git a/app/assets/stylesheets/common/base/category-list.scss b/app/assets/stylesheets/common/base/category-list.scss index 59c945b7bf821..c19306544a2f1 100644 --- a/app/assets/stylesheets/common/base/category-list.scss +++ b/app/assets/stylesheets/common/base/category-list.scss @@ -1,5 +1,10 @@ @use "lib/viewport"; +:root { + --category-boxes-min-width: 15em; + --category-boxes-max-width: 1fr; +} + .category-list { table-layout: fixed; @@ -147,7 +152,10 @@ } .category-boxes { - grid-template-columns: repeat(auto-fit, minmax(15em, 1fr)); + grid-template-columns: repeat( + auto-fit, + minmax(var(--category-boxes-min-width), var(--category-boxes-max-width)) + ); .category-box { > a { diff --git a/app/assets/stylesheets/common/base/compose.scss b/app/assets/stylesheets/common/base/compose.scss index 0f4170081a68d..ea71c7713f5d2 100644 --- a/app/assets/stylesheets/common/base/compose.scss +++ b/app/assets/stylesheets/common/base/compose.scss @@ -318,7 +318,7 @@ html.composer-open:not(.has-full-page-chat) { width: 100%; align-items: center; position: relative; - gap: 0 0.5em; + gap: 0 var(--space-2); } .user-selector { @@ -365,9 +365,10 @@ html.composer-open:not(.has-full-page-chat) { .category-input { position: relative; display: flex; - flex: 1 0 40%; + flex: 1 1 auto; max-width: 40%; - margin: 0 0 8px 8px; + margin: 0 0 8px 0; + min-width: 0; .category-chooser { display: flex; @@ -665,7 +666,7 @@ html.composer-open:not(.has-full-page-chat) { .with-tags { .title-and-category { flex-wrap: nowrap; - gap: 0.5em; + gap: var(--space-2); .tags-input { max-width: 50%; @@ -852,11 +853,13 @@ html.composer-open:not(.has-full-page-chat) { // especially while the software keyboard is visible, so we top-anchor it here // and shift it using transform .ipados-device { - #reply-control { - // the two properties below are equivalent to bottom: 0 - top: calc(var(--composer-vh, 1vh) * 100); - transform: translateY(-100%); - bottom: unset; + body:not(.peek-mode-active) { + #reply-control { + // the two properties below are equivalent to bottom: 0 + top: calc(var(--composer-vh, 1vh) * 100); + transform: translateY(-100%); + bottom: unset; + } } } @@ -986,7 +989,7 @@ html.composer-open:not(.has-full-page-chat) { ul { margin: 0; - padding: 0 0 0 1.5em; + padding: 0 0 0 var(--space-6); &.list, &.topics { @@ -996,12 +999,17 @@ html.composer-open:not(.has-full-page-chat) { li { font-weight: normal; - margin-top: 8px; + margin-top: var(--space-2); } } .discourse-tags { font-size: var(--font-down-1); + padding: 0; + + li { + margin: 0; + } } } @@ -1026,12 +1034,13 @@ html.composer-open:not(.has-full-page-chat) { .first-line { width: 100%; + line-height: var(--line-height-medium); } .second-line { display: flex; flex-wrap: wrap; - gap: var(--space-2); + gap: 0 var(--space-2); } } diff --git a/app/assets/stylesheets/common/base/discourse.scss b/app/assets/stylesheets/common/base/discourse.scss index 1e9d812c7fa4f..16d94a23af298 100644 --- a/app/assets/stylesheets/common/base/discourse.scss +++ b/app/assets/stylesheets/common/base/discourse.scss @@ -64,6 +64,8 @@ --d-header-padding-x: 0.67em; --d-table-border-top-height: 3px; --d-wrap-padding-x: 0.67em; + --d-post-aside-background: var(--blend-primary-secondary-5); + --d-post-aside-border-left: 5px solid var(--primary-300); --topic-title-font-weight: 400; --topic-title-font-weight--visited: 400; --topic-list-item-background-color: var(--secondary); @@ -71,6 +73,7 @@ --list-container-padding-x: 0em; --d-topic-list-header-font-size: initial; --skip-links-offset: -75px; + --heading-font-weight: bold; } // Animation Keyframes @@ -251,7 +254,8 @@ small { } blockquote { - @include post-aside; + background: var(--d-post-aside-background); + border-left: var(--d-post-aside-border-left); @include viewport.until(sm) { clear: both; @@ -275,6 +279,7 @@ h6 { font-family: var(--heading-font-family); margin-top: 0; margin-bottom: 0.5rem; + font-weight: var(--heading-font-weight); } a.cancel { @@ -319,7 +324,7 @@ label { align-items: flex-start; color: var(--primary-high); - &:not(.checkbox-label) { + &:not(.checkbox-label, .d-segmented-control__label) { font-weight: bold; } @@ -1166,7 +1171,6 @@ body.has-sidebar-page { #main-outlet-wrapper { grid-template-columns: var(--d-sidebar-width) minmax(0, 1fr); gap: 0 var(--d-main-content-gap); - padding-left: 0; @include viewport.until(lg) { --d-main-content-gap: var(--space-4); diff --git a/app/assets/stylesheets/common/base/edit-category.scss b/app/assets/stylesheets/common/base/edit-category.scss index 6740cbbc70d05..e4f041ff9da45 100644 --- a/app/assets/stylesheets/common/base/edit-category.scss +++ b/app/assets/stylesheets/common/base/edit-category.scss @@ -123,6 +123,7 @@ div.edit-category { .category-permission-hint { font-size: var(--font-down-1); + color: var(--primary-high-or-secondary-low); } } @@ -228,7 +229,8 @@ div.edit-category { } .edit-category-tab-settings, - .edit-category-tab-tags { + .edit-category-tab-tags, + .edit-category-tab-topic-template { > section { margin-bottom: 1.5em; } @@ -378,6 +380,14 @@ div.edit-category { } } +.posting-review-group-chooser { + margin-top: 0.5em; + + .form-kit__field & { + margin-top: 0; + } +} + .edit-category .add-group { margin: 1em 0 2em; @@ -385,7 +395,3 @@ div.edit-category { width: 100%; } } - -.edit-category .everyone-has-access-warning { - margin-top: 2em; -} diff --git a/app/assets/stylesheets/common/base/embed-mode.scss b/app/assets/stylesheets/common/base/embed-mode.scss index e29f2efe58e5e..ef4d227c5d409 100644 --- a/app/assets/stylesheets/common/base/embed-mode.scss +++ b/app/assets/stylesheets/common/base/embed-mode.scss @@ -3,18 +3,105 @@ body.embed-mode { // Remove top padding since header is hidden #main-outlet { - padding-top: 1em; + padding-top: 0; + } + + #main-outlet-wrapper { + grid-template-columns: 1fr; + gap: 0; + padding: 0; } // Hide elements that don't make sense in embed context .signup-cta, .suggested-topics, - .more-topics__container { - display: none; + .more-topics__container, + #topic-title, + .topic-above-footer-buttons-outlet.presence, + .above-main-container-outlet, + .topic-footer-main-buttons__actions .toggle-admin-menu, + .topic-footer-main-buttons__actions .bookmark, + .topic-footer-main-buttons__actions .flag-topic, + .topic-footer-main-buttons__actions .assign, + .topic-notifications-button, + nav.post-controls .actions .show-more-actions, + .software-update-prompt, + .time-gap, + .topic-navigation, + .post-stream .gap, + .container.posts:not(:has(.post-stream .topic-post ~ .topic-post)) + ~ #topic-footer-buttons { + display: none !important; } // Ensure content fills the width #main-outlet-wrapper { max-width: 100%; } + + // Composer styling for embed mode + &:not(.has-sidebar-page) #reply-control:not(.fullscreen), + #reply-control { + margin-inline: 0; + margin-left: 0; + max-width: 100%; + border-radius: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom: none; + border-right: none; + border-left: none; + + .composer-action-title { + display: none; + } + } + + .embed-topic-footer { + margin-top: 1.5em; + text-align: center; + + &__first-reply { + display: flex; + flex-direction: column; + align-items: center; + gap: 0.5em; + padding: 2em 1em; + color: var(--primary-medium); + font-size: var(--font-up-1); + + .d-icon { + font-size: var(--font-up-4); + } + } + + &__powered-by { + display: flex; + justify-content: center; + padding: 1em 0; + } + + .powered-by-discourse { + grid-area: unset; + justify-self: unset; + } + } + + .topic-timer-info, + .post-stream .topic-post:nth-child(2) article .topic-body, + .post-stream .topic-post:nth-child(2) article .topic-avatar { + border-top: none; + } + + .topic-area .posts-wrapper:has(.post-stream .topic-post + .topic-post) { + border-bottom: 1px solid var(--content-border-color); + } + + // Hide OP + // Use visibility hidden to prevent issues with jumpy behavior + .post-stream .topic-post.topic-owner:first-child { + opacity: 0; + height: 0; + visibility: hidden; + } } diff --git a/app/assets/stylesheets/common/base/embedded-posts.scss b/app/assets/stylesheets/common/base/embedded-posts.scss index 615722c678e84..c6d17e1e0b6d3 100644 --- a/app/assets/stylesheets/common/base/embedded-posts.scss +++ b/app/assets/stylesheets/common/base/embedded-posts.scss @@ -2,6 +2,9 @@ // nested replies in topics .embedded-posts { + --border-color: var(--content-border-color); + --border-width: 1px; + @include viewport.until(sm) { position: relative; padding: 0.75em 0.5em 0.75em 0; @@ -9,13 +12,7 @@ margin-left: 0; } - @include viewport.from(sm) { - border: 1px solid var(--content-border-color); - } - .collapse-up { - color: var(--primary-high); - background: var(--primary-low); z-index: 1; .archetype-private_message & { @@ -24,27 +21,11 @@ @include viewport.until(sm) { position: relative; - padding: 6px; transform: translate(25%, -30%); - box-shadow: 0 0 0 1px var(--primary-300); - - .d-icon { - transform: scale(0.871); - } - - &:hover, - &:focus { - background: var(--primary-300); - - .d-icon { - color: var(--primary); - } - } } @include viewport.from(sm) { transform: translate(-50%, -164%); - border: 1px solid var(--primary-300); padding: var(--space-2); left: 32px; bottom: calc(-1 * var(--space-12)); @@ -67,7 +48,7 @@ top: calc(-2px - 0.75em); width: 1px; height: calc(100% + 1.5em + 5px); - background: var(--primary-300); + background: var(--border-color); left: 24px; } } @@ -112,7 +93,7 @@ .post-info.arrow { padding: 0.5em 0; margin-right: 0; - color: var(--primary-med-or-secondary-high); + color: var(--primary-medium); line-height: 1; &:hover, @@ -164,25 +145,7 @@ .collapse-up { position: absolute; color: var(--primary-medium); - background: var(--secondary); - border: 1px solid var(--content-border-color); - padding: 6px 9px 8px; z-index: 99; // Needs to be higher than topic-avatar - - .d-icon { - color: currentcolor; - } - - .discourse-no-touch & { - &:hover { - background: var(--primary-low); - color: var(--primary-high); - - .d-icon { - color: currentcolor; - } - } - } } // bottom means "reply expansion" below a post @@ -205,8 +168,8 @@ position: absolute; top: calc(-1 * var(--space-6)); width: 1px; - height: calc(100% + var(--space-5)); - background: var(--primary-300); + height: calc(100% + var(--space-3)); + background: var(--border-color); left: 32px; } } @@ -220,9 +183,9 @@ content: ""; position: absolute; top: calc(-1 * var(--space-6)); - width: 1px; + width: var(--border-width); height: calc(100% + var(--space-6)); - background: var(--primary-300); + background: var(--border-color); left: 32px; } @@ -241,7 +204,7 @@ .post-link-arrow { position: absolute; - bottom: var(--space-3); + bottom: var(--space-2); .archetype-private_message & { bottom: 0; @@ -276,20 +239,6 @@ } } - .collapse-up { - .d-icon { - transform: scale(0.871); - } - - .discourse-no-touch & { - &:hover, - &:focus { - color: var(--primary); - background: var(--primary-300); - } - } - } - .load-more-replies { font-size: var(--font-down-1); position: absolute; @@ -306,15 +255,19 @@ // top means "in reply to expansion" above a post &.top { margin-left: 0; - border: none; width: calc( var(--topic-body-width) + (var(--topic-body-width-padding) * 2) + var(--topic-avatar-width) - (var(--topic-avatar-width) + 2px) ); // 2px accounts for left and right borders + &.topic-body:first-of-type { + border-top: 1px solid var(--border-color); + } + .collapse-down { transform: translate(17%, 230%); z-index: 1; + margin-left: var(--border-width); } .row { @@ -334,9 +287,9 @@ content: ""; position: absolute; top: var(--space-6); - width: 1px; + width: var(--border-width); height: calc(100% + var(--space-6)); - background: var(--primary-300); + background: var(--border-color); left: -22px; } } @@ -380,3 +333,10 @@ } } } + +.replies-above > div:last-child { + .topic-avatar, + .topic-body { + border: none; + } +} diff --git a/app/assets/stylesheets/common/base/faqs.scss b/app/assets/stylesheets/common/base/faqs.scss index bb5d28488cac1..fea77aaaa2a13 100644 --- a/app/assets/stylesheets/common/base/faqs.scss +++ b/app/assets/stylesheets/common/base/faqs.scss @@ -30,6 +30,8 @@ .nav-pills { margin: 0 0 2em; + gap: 0; + overflow: auto; } ul:not(.nav-pills), diff --git a/app/assets/stylesheets/common/base/header.scss b/app/assets/stylesheets/common/base/header.scss index 3385a8d3ab4c5..e7dad8db48172 100644 --- a/app/assets/stylesheets/common/base/header.scss +++ b/app/assets/stylesheets/common/base/header.scss @@ -1,5 +1,13 @@ @use "lib/viewport"; +:root { + --d-header-icon-color: var(--header_primary-low-mid); + --d-header-icon-color--hover: var(--header_primary); + --d-header-icon-color--active: var(--header_primary-medium); + --d-header-icon-background--hover: var(--d-hover); + --d-header-icon-background--active: var(--secondary); +} + .d-header-wrap { position: sticky; top: 0; @@ -179,7 +187,11 @@ .discourse-no-touch &:hover, .discourse-no-touch &:focus-visible { - background-color: var(--d-hover); + background-color: var(--d-header-icon-background--hover); + + > .d-icon { + color: var(--d-header-icon-color--hover); + } } } @@ -187,11 +199,11 @@ .active .icon, .header-color-scheme-toggle .-expanded { position: relative; - background-color: var(--secondary); + background-color: var(--d-header-icon-background--active); cursor: default; > .d-icon { - color: var(--primary-medium); + color: var(--d-header-icon-color--active); } } } @@ -201,7 +213,7 @@ font-size: var(--font-up-4); line-height: var(--line-height-large); display: inline-block; - color: var(--header_primary-low-mid); + color: var(--d-header-icon-color); } .notifications { @@ -268,19 +280,21 @@ .d-icon { font-size: var(--font-down-2); width: 1em; - color: var(--header_primary-high); + color: var(--d-header-icon-color); } .discourse-no-touch & { &:hover { + color: var(--d-header-icon-color--hover); border: 1px solid var(--header_primary-medium); + background: var(--d-header-icon-background--hover); .language-switcher__locale { color: var(--header_primary); } .d-icon { - color: var(--header_primary-high); + color: var(--d-header-icon-color--hover); } } } @@ -429,6 +443,10 @@ display: inline; // tags need to stay inline in order for them to truncate vertical-align: unset; } + + li:has(.assigned-to) { + display: inline; + } } .topic-featured-link { diff --git a/app/assets/stylesheets/common/base/heading-anchor.scss b/app/assets/stylesheets/common/base/heading-anchor.scss new file mode 100644 index 0000000000000..3d90fb2bda2ff --- /dev/null +++ b/app/assets/stylesheets/common/base/heading-anchor.scss @@ -0,0 +1,36 @@ +%heading-anchor { + a.anchor { + opacity: 0; + transition: opacity 0.25s; + + &:focus-visible { + outline: 0; + opacity: 1; + } + + &::before { + content: svg-uri( + '' + ); + line-height: 1.4; + margin-left: -20px; + padding-right: 4px; + position: absolute; + z-index: 2; + } + } + + // the anchor icon is a CSS pseudo element set above + // so we can't change the color of the icon itself + // but we can change the color of the anchor text + &:has(a.anchor:focus-visible) { + color: var(--tertiary); + } + + // show when hovering where icon should be + // show when hovering header + .discourse-no-touch & a.anchor:hover, + .discourse-no-touch &:hover a.anchor { + opacity: 1; + } +} diff --git a/app/assets/stylesheets/common/base/history.scss b/app/assets/stylesheets/common/base/history.scss index 60fd9487887aa..be596e68c8b9b 100644 --- a/app/assets/stylesheets/common/base/history.scss +++ b/app/assets/stylesheets/common/base/history.scss @@ -313,15 +313,13 @@ } .hidden-revision-previous .row { - div:nth-of-type(1), - td:nth-of-type(1) { + .--previous { opacity: 0.5; } } .hidden-revision-current .row { - div:nth-of-type(2), - td:nth-of-type(2) { + .--current { opacity: 0.5; } } diff --git a/app/assets/stylesheets/common/base/menu-panel.scss b/app/assets/stylesheets/common/base/menu-panel.scss index ec99f93ea2fd5..adc050f86ec84 100644 --- a/app/assets/stylesheets/common/base/menu-panel.scss +++ b/app/assets/stylesheets/common/base/menu-panel.scss @@ -164,7 +164,7 @@ font-size: var(--font-down-1); } - div.discourse-tags { + .discourse-tags { font-size: var(--font-down-1); } @@ -661,7 +661,7 @@ overflow: hidden; // clears the text from wrapping below icons overflow-wrap: break-word; - @include line-clamp(2); + @include line-clamp(3); } } diff --git a/app/assets/stylesheets/common/base/onebox.scss b/app/assets/stylesheets/common/base/onebox.scss index 735a537750083..f8ca444163b2d 100644 --- a/app/assets/stylesheets/common/base/onebox.scss +++ b/app/assets/stylesheets/common/base/onebox.scss @@ -36,8 +36,8 @@ a.loading-onebox { margin-top: 15px; padding: 12px; font-size: var(--font-0); - - @include post-aside; + background: var(--d-post-aside-background); + border-left: var(--d-post-aside-border); .onebox-result-body { padding-top: 5px; @@ -387,7 +387,8 @@ aside.onebox .onebox-body .onebox-avatar { blockquote { aside.onebox { - @include post-aside; + background: var(--d-post-aside-background); + border-left: var(--d-post-aside-border); } } @@ -949,14 +950,14 @@ aside.onebox.xkcd .onebox-body img { } } -.onebox.reddit { - div.aspect-image-full-size { - position: relative; - } - - div.description { - color: var(--primary-med-or-secondary-med); - } +iframe.reddit-onebox { + width: 100%; + max-width: 640px; + display: block; + margin: 0 auto; + overflow: hidden; + border: 0; + border-radius: var(--d-border-radius); } .onebox.githubfolder { diff --git a/app/assets/stylesheets/common/base/personal-message.scss b/app/assets/stylesheets/common/base/personal-message.scss index e5b992786f193..f99fe91d3eb49 100644 --- a/app/assets/stylesheets/common/base/personal-message.scss +++ b/app/assets/stylesheets/common/base/personal-message.scss @@ -215,6 +215,8 @@ flex: 1 0 0px; align-items: center; justify-content: center; + align-self: stretch; + padding: 0 0.5em; box-sizing: border-box; border-radius: 0; } diff --git a/app/assets/stylesheets/common/base/reviewables.scss b/app/assets/stylesheets/common/base/reviewables.scss index 93e4e00fb2de9..6daf0450f667c 100644 --- a/app/assets/stylesheets/common/base/reviewables.scss +++ b/app/assets/stylesheets/common/base/reviewables.scss @@ -7,12 +7,6 @@ margin-bottom: 1em; } - .flagged-post-header { - width: 100%; - display: flex; - justify-content: space-between; - } - .status { color: var(--primary-medium); @@ -233,14 +227,10 @@ } .reviewable-filters { - background-color: var(--primary-very-low); padding: var(--space-4) var(--space-6); margin-bottom: var(--space-4); - - .topic-filter .btn { - display: flex; - width: auto; - } + border: 1px solid var(--content-border-color); + border-radius: var(--d-border-radius); .score-filter { width: 5em; @@ -378,24 +368,6 @@ } } - .reviewable-post-header { - display: flex; - justify-content: space-between; - align-items: center; - max-width: 100%; - - .reviewable-reply-to { - display: flex; - align-items: center; - color: var(--primary-medium); - font-size: 0.9em; - - .d-icon { - margin-right: 0.5em; - } - } - } - .post-contents { width: 100%; min-width: 0; // Flexbox fix @@ -548,25 +520,6 @@ font-weight: bold; } - .reviewable-contents { - display: flex; - flex-wrap: wrap; - margin: 1.5rem 0 1rem; - background: var(--secondary); - padding: 1rem; - - @include viewport.until(sm) { - .reviewable-post-header, - .post-body { - max-width: 100%; - - p { - overflow-x: scroll; - } - } - } - } - .reviewable-actions { display: flex; flex-wrap: wrap; @@ -583,13 +536,6 @@ opacity: 0.7; } -.reviewable-deleted { - .reviewable-contents .post-contents .post-body { - background-color: var(--danger-low-mid); - padding: 0.5em; - } -} - .blur-images { img:not(.avatar, .emoji) { filter: blur(10px); diff --git a/app/assets/stylesheets/common/base/rtl.scss b/app/assets/stylesheets/common/base/rtl.scss index a1bda5e374062..5b0732298c401 100644 --- a/app/assets/stylesheets/common/base/rtl.scss +++ b/app/assets/stylesheets/common/base/rtl.scss @@ -16,7 +16,8 @@ .d-icon-chevron-left, .d-icon-hand-point-left, .d-icon-quote-left, - .d-icon-reply { + .d-icon-reply, + .d-icon-up-right-from-square { transform: scaleX(-1); } } diff --git a/app/assets/stylesheets/common/base/sidebar-section-link.scss b/app/assets/stylesheets/common/base/sidebar-section-link.scss index d88e57ec57d02..3363802d5d35d 100644 --- a/app/assets/stylesheets/common/base/sidebar-section-link.scss +++ b/app/assets/stylesheets/common/base/sidebar-section-link.scss @@ -157,7 +157,9 @@ &.dropdown-menu__item .sidebar-section-link, .dropdown-menu__item .sidebar-section-link { - border-radius: 0; + height: var(--d-sidebar-row-height); + padding-inline: var(--d-sidebar-row-horizontal-padding); + border-radius: var(--d-border-radius); } .--link-button { diff --git a/app/assets/stylesheets/common/base/sidebar.scss b/app/assets/stylesheets/common/base/sidebar.scss index 043efa02e4ca4..110b844d7c0cf 100644 --- a/app/assets/stylesheets/common/base/sidebar.scss +++ b/app/assets/stylesheets/common/base/sidebar.scss @@ -85,6 +85,11 @@ align-self: start; overflow-y: auto; + @include viewport.until(md) { + // height gets in the way in slide-out mode + height: auto; + } + // back-compat for themes --1dvh: 1dvh; @@ -376,53 +381,24 @@ } .sidebar-filter { - margin-top: 1em; - margin-bottom: 1em; - border: 1px solid var(--primary-400); - border-radius: var(--d-input-border-radius); - background: var(--secondary); - width: calc( - var(--d-sidebar-width) - 2 * var(--d-sidebar-row-horizontal-padding) - ); - - &:focus-within { - border-color: var(--tertiary); - outline: 1px solid var(--tertiary); - outline-offset: -1px; - } + width: 100%; &__input-container { position: relative; display: flex; align-items: center; - background: var(--secondary); - border-radius: var(--d-input-border-radius); - } - - &__shortcut-hint { - background-color: rgb(var(--tertiary-rgb) / 10%); - padding: 0.25em 0.5em; - font-size: var(--font-down-3); - color: var(--primary-medium); } &__input[type="text"] { - border: 0; - background: none; - margin-bottom: 0; - height: 2em; width: 100%; - - &:focus-within { - outline: 0; - } + margin: 1em 0; } &__clear { width: 2em; height: 2em; - color: var(--primary-medium); - background-color: var(--secondary); + position: absolute; + right: 0; } } diff --git a/app/assets/stylesheets/common/base/tagging.scss b/app/assets/stylesheets/common/base/tagging.scss index c534185cb9ef8..672a9ff0b1024 100644 --- a/app/assets/stylesheets/common/base/tagging.scss +++ b/app/assets/stylesheets/common/base/tagging.scss @@ -2,6 +2,7 @@ :root { --tag-text-color: var(--primary-high); + --tag-max-width: 14em; } .container.tags-index { @@ -23,6 +24,10 @@ margin-bottom: 20px; } +.tags-index .tags-list h3 { + @extend %heading-anchor; +} + .tags-list .tag-box { width: 300px; margin-bottom: 1em; @@ -63,7 +68,7 @@ } .discourse-tag { - max-width: 14em; + max-width: var(--tag-max-width); display: inline-block; vertical-align: middle; margin: 0; @@ -117,6 +122,11 @@ } } +.link-bottom-line, +.topic-header-extra { + --tag-max-width: 18em; +} + .d-header .topic-header-extra { .discourse-tags { font-size: var(--font-down-1); @@ -126,6 +136,14 @@ .discourse-tags { display: inline-flex; flex-wrap: wrap; + list-style: none; + margin: 0; + + li { + display: inline-flex; + align-items: center; + flex-wrap: wrap; + } &:has(.box) { gap: var(--space-1); @@ -336,103 +354,6 @@ } } -section.tag-info { - display: flex; - flex-direction: column; - gap: 1em; - margin: 1em 0; - padding: 2em; - border: 1px solid var(--content-border-color); - - .edit-tag-wrapper { - display: flex; - flex-direction: column; - - #edit-name, - #edit-description { - width: 100%; - margin-bottom: 0.5em; - } - - #edit-description { - height: 120px; - } - - .edit-controls { - display: flex; - gap: 0.5em; - } - } - - .tag-name-wrapper { - display: flex; - font-size: var(--font-up-4); - align-items: baseline; - - button { - font-size: var(--font-down-1); - - .d-icon { - color: var(--primary-high); - } - - .discourse-no-touch & { - &:hover { - background: transparent; - } - } - } - - .edit-tag { - color: var(--primary-high); - font-size: var(--font-down-2); - margin-left: 0.5em; - } - } - - .tag-description-wrapper { - display: flex; - font-size: var(--font-up-1); - } - - .tag-box { - display: flex; - align-items: center; - margin-bottom: 0.25em; - - a { - margin-left: 0.5em; - } - } - - .tag-actions { - display: flex; - flex-wrap: wrap; - gap: 0.5em; - } - - .tag-associations:empty { - display: none; - } - - .add-synonyms { - &__controls { - display: flex; - gap: 0.5em; - } - } - - .tag-list { - margin: 0.5em 0 0; - padding: 0; - border: none; - - a { - color: var(--primary-medium); - } - } -} - .tag-navigation { .mini-tag-chooser.tags-intersection-chooser { margin: 0 0.5em 0 0; diff --git a/app/assets/stylesheets/common/base/topic-footer.scss b/app/assets/stylesheets/common/base/topic-footer.scss index 11e4e40765c01..d28b1d56faf49 100644 --- a/app/assets/stylesheets/common/base/topic-footer.scss +++ b/app/assets/stylesheets/common/base/topic-footer.scss @@ -52,10 +52,15 @@ } .bookmark.bookmarked { - .d-icon-discourse-bookmark-clock, - .d-icon-bookmark { + .d-icon-discourse-bookmark-clock { color: var(--tertiary); } + + &:not(.--post-bookmarked-only) { + .d-icon-bookmark { + color: var(--tertiary); + } + } } .create { diff --git a/app/assets/stylesheets/common/base/topic-post.scss b/app/assets/stylesheets/common/base/topic-post.scss index 11088d7e13640..facd611cafc4a 100644 --- a/app/assets/stylesheets/common/base/topic-post.scss +++ b/app/assets/stylesheets/common/base/topic-post.scss @@ -144,40 +144,7 @@ margin: 2rem 0 0.67rem; line-height: var(--line-height-medium); - a.anchor { - opacity: 0; - transition: opacity 0.25s; - - &:focus-visible { - outline: 0; - opacity: 1; - } - - &::before { - content: svg-uri( - '' - ); - line-height: 1.4; - margin-left: -20px; - padding-right: 4px; - position: absolute; - z-index: 2; - } - } - - // the anchor icon is a CSS pseudo element set above - // so we can't change the color of the icon itself - // but we can change the color of the anchor text - &:has(a.anchor:focus-visible) { - color: var(--tertiary); - } - - // show when hovering where icon should be - // show when hovering header - .discourse-no-touch & a.anchor:hover, - .discourse-no-touch &:hover a.anchor { - opacity: 1; - } + @extend %heading-anchor; } h1 { @@ -559,17 +526,6 @@ nav.post-controls { } button { - &.expand-post { - @include viewport.until(sm) { - margin: var(--control-space) 0 var(--control-space) 0; - } - - @include viewport.from(sm) { - margin-top: var(--space-3); - margin-left: var(--topic-body-width-padding); - } - } - .discourse-no-touch & { &:hover, &:focus-visible, @@ -614,22 +570,26 @@ nav.post-controls { } .btn.show-replies { + --border-width: 1px; font-size: inherit; - padding: 10px; color: var(--primary-medium); display: flex; align-items: center; border-radius: var(--d-button-border-radius); - @include viewport.until(sm) { - padding: 9px; + &[aria-expanded="true"] { + background: var(--primary-low); + color: var(--primary-high); + z-index: 1; - &[aria-expanded="true"] { - background: var(--primary-low); + .d-icon { color: var(--primary-high); - box-shadow: 0 0 0 1px var(--primary-300); - z-index: 1; - margin-left: 1px; + } + } + + .discourse-no-touch & { + &:hover { + color: var(--primary); .d-icon { color: var(--primary-high); @@ -638,38 +598,11 @@ nav.post-controls { } @include viewport.from(sm) { - margin-left: 0; white-space: nowrap; .topic-post & { margin-right: var(--space-2); } - - &[aria-expanded="true"] { - background: var(--primary-low); - color: var(--primary-high); - box-shadow: 0 0 0 1px var(--primary-300); - z-index: 1; - - .d-icon { - color: var(--primary-high); - } - - &:hover, - &:focus { - background: var(--primary-300); - color: var(--primary); - } - } - } - - .discourse-no-touch & { - &:hover, - &:focus-visible { - outline: none; - color: var(--d-post-control-text-color--hover); - background: var(--d-post-control-background--hover); - } } .d-icon { @@ -715,6 +648,17 @@ nav.post-controls { } } +.expand-post { + @include viewport.until(sm) { + margin: var(--space-3) 0; + } + + @include viewport.from(sm) { + margin-top: var(--space-3); + margin-left: var(--topic-body-width-padding); + } +} + .deleted { .regular > .cooked { background-color: var(--danger-low-mid); @@ -822,8 +766,9 @@ aside.quote { gap: var(--space-2); color: var(--primary-high-or-secondary-low); padding: 0.8em 0.8em 0 0.8em; + background: var(--d-post-aside-background); + border-left: var(--d-post-aside-border-left); - @include post-aside; @include unselectable; &[data-can-toggle-quote] { diff --git a/app/assets/stylesheets/common/base/topic.scss b/app/assets/stylesheets/common/base/topic.scss index 5261890722d56..9dece456460ac 100644 --- a/app/assets/stylesheets/common/base/topic.scss +++ b/app/assets/stylesheets/common/base/topic.scss @@ -464,7 +464,7 @@ a.topic-featured-link { .d-icon { font-size: var(--font-down-1); - margin-right: 0.25em; + margin-inline-end: 0.25em; } } diff --git a/app/assets/stylesheets/common/base/uc-modernize-foundation-theme.scss b/app/assets/stylesheets/common/base/uc-modernize-foundation-theme.scss index 4007f315a184b..cffc613dbbdd2 100644 --- a/app/assets/stylesheets/common/base/uc-modernize-foundation-theme.scss +++ b/app/assets/stylesheets/common/base/uc-modernize-foundation-theme.scss @@ -16,7 +16,7 @@ --d-button-default-text-color: var(--primary-900); --d-button-default-icon-color: var(--primary-900); --d-badge-card-background-color: var(--secondary); - --d-table-border-top-height: 0px; + --d-table-border-top-height: 1px; --category-boxes-text-alignment: left; --d-topic-list-data-font-size: var(--font-down-1); --d-topic-list-header-text-color: var(--primary-900); @@ -63,7 +63,10 @@ .user-menu-tab, .--with-description, .chat-message-react-btn, - .profile-tab-btn + .profile-tab-btn, + .back-button, + .composer-actions-btn, + .language-switcher-trigger ) { padding-block: 0; height: var(--button-height); @@ -72,7 +75,12 @@ } .btn.no-text.btn-icon { - &:not(.user-menu-tab, .user-menu-tab-active) { + &:not( + .user-menu-tab, + .user-menu-tab-active, + .composer-actions-btn, + .dropdown-select-box-header + ) { width: var(--button-height); } } @@ -82,18 +90,18 @@ --d-button-default-icon-color--hover: var(--tertiary); } - .select-kit.dropdown-select-box.composer-actions .select-kit-header .d-icon { - padding: 0; - } - .discourse-reactions-counter .reactions-counter { align-items: center; } - .select-kit .select-kit-header .selected-name .name { - @include ellipsis; + .user-primary-navigation .group-dropdown { max-width: 15ch; - display: inline-block; + + .name { + display: inline-block; + + @include ellipsis; + } } .d-header-icons .btn.icon { @@ -127,24 +135,6 @@ color: var(--d-nav-color--active); } - // dropdown menu - .dropdown-menu__item .btn, - .dropdown-menu__item .sidebar-section-link { - &:not(.notifications-tracking-btn, .--with-description) { - height: var(--d-sidebar-row-height) !important; - padding-inline: var(--d-sidebar-row-horizontal-padding); - } - } - - .sidebar-section-link-wrapper.dropdown-menu__item .sidebar-section-link, - .sidebar-section-link-wrapper .dropdown-menu__item .sidebar-section-link { - border-radius: var(--d-border-radius); - } - - .dropdown-menu__item { - border-radius: var(--d-border-radius); - } - .bookmark-menu-content .bookmark-menu__title, .bookmark-menu-content .bookmark-menu__row-title { padding-block: 0; @@ -161,29 +151,10 @@ margin-right: 0; } - .dropdown-menu { - display: flex; - flex-direction: column; - gap: var(--d-sidebar-vertical-gap); - padding: var(--space-1); - } - .sidebar-section-link-wrapper .sidebar-section-link-prefix .prefix-square { border-radius: calc(var(--d-border-radius) / 2); } - .dropdown-menu__item .btn { - display: inline-flex; - gap: var(--d-sidebar-section-link-prefix-margin-right); - padding-inline: var(--d-sidebar-row-horizontal-padding); - border-radius: var(--d-border-radius); - } - - .dropdown-menu__item .btn .svg-icon { - width: var(--d-sidebar-section-link-prefix-width); - margin-right: 0; - } - .sidebar-more-section-content .sidebar-row { padding-block: 0; } @@ -267,7 +238,7 @@ } // Select Kit - .select-kit .select-kit-header, + .select-kit .select-kit-header:not(.composer-actions-btn), .d-date-input .date-picker { height: var(--button-height); border: var(--d-button-default-border); @@ -328,6 +299,9 @@ .extra-info-wrapper .title-wrapper { font-size: var(--font-down-1); + + --category-badge-title-color: var(--primary-800); + --tag-text-color: var(--primary-800); } .header-sidebar-toggle button, @@ -372,40 +346,6 @@ border-radius: var(--d-border-radius); } - // Eliminate grey background - .search-container .search-header, - .search-container .search-filters, - .search-container .search-bar, - .d-admin-filter, - .search-container .search-filters .search-advanced-filters, - .reviewable-filters, - .admin-site-settings-filter-controls, - .admin-site-settings-filter-controls .controls, - .admin-site-settings-filter-controls .search.controls { - background: unset; - background-color: unset; - } - - // Misc Spacing - .d-admin-filter, - .reviewable-filters, - .admin-site-settings-filter-controls .controls { - padding: 0; - } - - .search-container .search-header { - padding: var(--space-6); - border: 1px solid var(--content-border-color); - } - - .admin-nav .nav-stacked { - margin: 0; - } - - .admin-filter-controls { - margin-block: 0; - } - // Full Calendar .fc .fc-button-primary { --fc-button-bg-color: var(--secondary); diff --git a/app/assets/stylesheets/common/base/uc-simplified-category-setup-edit-categories.scss b/app/assets/stylesheets/common/base/uc-simplified-category-setup-edit-categories.scss index 76e08a7282b50..9ac8ea0d9a1db 100644 --- a/app/assets/stylesheets/common/base/uc-simplified-category-setup-edit-categories.scss +++ b/app/assets/stylesheets/common/base/uc-simplified-category-setup-edit-categories.scss @@ -1,38 +1,95 @@ @use "lib/viewport"; .uc-enable-simplified-category-creation { - .select-kit.multi-select.group-chooser { - width: var(--form-kit-large-input); + .d-page-header__title-row { + line-height: var(--line-height-medium); + gap: var(--space-4); + } - @include viewport.until(sm) { - width: 100%; + .edit-category-tab-security { + .alert { + --permission-table-max-width: var(--form-kit-max-input); } } + .form-kit__container-content { + width: 100%; + } + + .edit-category-tab:not(.edit-category-tab-general) { + .form-kit__container-optional { + display: none; + } + } + + .category-permissions-table { + --permission-table-max-width: var(--form-kit-max-input); + width: 100%; + } + div.edit-category { display: block; + max-width: 75ch; + width: 100%; + margin: 0 auto; - .add-required-tag-group { - align-self: start; + h1 { + font-size: var(--font-up-3); } - .form-kit__control-icon { - .select-kit-row .d-icon, - .select-kit-header .d-icon, - .select-kit-header-wrapper .d-icon:first-of-type { - color: var(--icon-color, currentColor); + .form-kit__field-toggle { + flex-direction: column; + width: 100%; + gap: 0.5em; + align-items: start; + + .form-kit__container-content { + align-items: flex-start; } + } + + .form-kit__conditional-display-content { + // prevent content shift when changing style options + min-height: 2.6em; - .select-kit-header-wrapper { - gap: var(--space-2); + &:has(.badge-category__wrapper) { + justify-content: center; } } - .form-kit__control-icon .formatted-selection { - display: flex !important; // overrides another important - flex: 0 1 auto; + .--radio-cards { + .form-kit__container-title { + max-width: var(--form-kit-max-input); + width: 100%; + } + + .form-kit__conditional-display-content { + .form-kit__container { + flex-direction: column; + } + } + } + + .select-kit.multi-select.group-chooser { + max-width: var(--form-kit-max-input); + width: 100%; + } + + .edit-category-tab-settings label, + .edit-category-tab-tags label, + .edit-category-tab-settings input[type="text"], + .edit-category-tab-settings .select-kit, + .edit-category-tab-tags input[type="text"], + .edit-category-tab-tags .select-kit { + width: 100%; + max-width: var(--form-kit-max-input); + } + + .add-required-tag-group { + align-self: start; } + #control-icon, #control-emoji { &.form-kit__field .form-kit__container-content { width: auto; @@ -63,15 +120,16 @@ border-bottom: 1px solid var(--content-border-color); } + .edit-category-page-header { + margin-bottom: 1.5em; + } + .edit-category-content { - margin-top: 2em; grid-area: unset; } - } - .edit-category-tab-security { - .form-kit__container-content { - width: 100%; + .edit-category-type-schema-fields { + display: contents; } } @@ -98,11 +156,9 @@ } } - .category-permissions-table { - width: 100%; - } - .form-kit__errors-summary { + width: 100%; + max-width: var(--form-kit-max-input); margin-top: var(--space-4); + .form-kit__section.edit-category-content { @@ -111,11 +167,6 @@ } .form-kit__conditional-display { - .badge-category__wrapper { - min-height: 2.6em; - top: var(--space-1); - } - .form-kit__container-content:has(.is-disabled) { // select-kit has pointer-events disabled, so we need to style the parent cursor: not-allowed; @@ -126,4 +177,76 @@ padding: 0; margin-bottom: var(--space-4); } + + .edit-category-tab-localizations { + .btn-default { + align-self: start; + } + } + + #main-outlet:has(.edit-category) + .powered-by-discourse { + display: none; // hide for now due to alignment + } + + .admin-changes-banner { + max-width: var(--form-kit-max-input); + flex-direction: row-reverse; + align-items: center; + + .controls { + flex-direction: row-reverse; + margin-right: auto; + } + } +} + +.edit-category-description-container { + .readonly-field { + width: 100%; + font-size: var(--font-down-1); + color: var(--primary-high); + + > :first-child { + margin-top: 0; + } + + > :last-child { + margin-bottom: 0; + } + } + + .description-content { + &.--collapsed { + max-height: calc(4 * 1.5em); + overflow: hidden; + position: relative; + + &.--overflowing::after { + content: ""; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 1.5em; + background: linear-gradient(transparent, var(--secondary, white)); + pointer-events: none; + } + } + } + + .description-actions { + width: 100%; + display: flex; + align-items: center; + gap: var(--space-2); + margin-top: var(--space-2); + + .toggle-description { + color: var(--primary-medium); + + &:hover { + color: var(--primary-high); + } + } + } } diff --git a/app/assets/stylesheets/common/base/upload.scss b/app/assets/stylesheets/common/base/upload.scss index 2b1d6a41c4bad..9ec64d3daa402 100644 --- a/app/assets/stylesheets/common/base/upload.scss +++ b/app/assets/stylesheets/common/base/upload.scss @@ -12,12 +12,16 @@ position: relative; max-width: 400px; width: 100%; - height: 80px; + height: 125px; box-sizing: border-box; border-radius: var(--d-input-border-radius); background-origin: content-box; background-clip: content-box; + &:has(.lightbox) { + height: 85px; // ~125px with controls visible to match above height + } + &:focus, &:focus-within { border-color: var(--tertiary); @@ -194,6 +198,8 @@ align-items: center; justify-content: center; gap: var(--space-1); + padding: var(--space-2); + white-space: normal; &:hover, &:focus-visible { diff --git a/app/assets/stylesheets/common/base/user-badges.scss b/app/assets/stylesheets/common/base/user-badges.scss index c7889aaa5de63..a623b3587aa54 100644 --- a/app/assets/stylesheets/common/base/user-badges.scss +++ b/app/assets/stylesheets/common/base/user-badges.scss @@ -165,6 +165,8 @@ right: 0; bottom: 0; z-index: 1; + border-radius: var(--d-button-border-radius) 0 var(--d-button-border-radius) + 0; } .badge-contents { @@ -188,11 +190,15 @@ } } - .badge-summary:has(a) { - // for summary links to be reachable - // they must be positioned above .badge-link:after - position: relative; - z-index: 1; + .badge-summary { + overflow-wrap: break-word; + + &:has(a) { + // for summary links to be reachable + // they must be positioned above .badge-link:after + position: relative; + z-index: 1; + } } .badge-icon { @@ -226,6 +232,7 @@ } .badge-info { + min-width: 0; color: var(--primary); h3 { @@ -253,6 +260,15 @@ } } } + + &.--can-favorite { + // helps description text avoid favorite button overlap + .badge-summary { + width: 100%; + padding-right: var(--space-6); + box-sizing: border-box; + } + } } .badges-granted { diff --git a/app/assets/stylesheets/common/base/user.scss b/app/assets/stylesheets/common/base/user.scss index 4d6ff3548c277..d59776355ffc8 100644 --- a/app/assets/stylesheets/common/base/user.scss +++ b/app/assets/stylesheets/common/base/user.scss @@ -431,12 +431,12 @@ color: var(--secondary); display: flex; flex-wrap: wrap; - padding: 10px; - margin-bottom: 16px; - gap: var(--space-2); + padding: var(--space-2); + margin-bottom: var(--space-4); + gap: var(--space-3); - > div, - > div a { + a, + > div { display: flex; align-items: baseline; flex: 0 1 auto; @@ -444,9 +444,13 @@ color: var(--secondary); span { - padding: 0 7px 1px; - border-radius: 10px; + display: inline-block; + min-width: 0.85em; // keep low counts round + text-align: center; + padding: 0.15em 0.4em; + border-radius: 1em; margin-right: 5px; + font-size: var(--font-down-1); } } @@ -1069,6 +1073,11 @@ .pref-second-factor { margin-top: 0.5em; } + + .pref-show-original-content { + margin-top: var(--space-4); + margin-bottom: var(--space-4); + } } .user-upcoming-changes-table { @@ -1471,3 +1480,69 @@ width: 100%; } } + +.user-preferences .form-vertical:has(.calendar-subscriptions) { + width: 750px; +} + +.calendar-subscriptions { + &__description { + color: var(--primary-medium); + margin-bottom: 1em; + } + + &__warning { + display: flex; + align-items: center; + gap: 0.5em; + margin-bottom: 1em; + } + + &__urls { + margin-top: 1em; + } + + &__active-status { + display: flex; + align-items: center; + gap: 0.5em; + color: var(--success); + font-weight: bold; + margin-bottom: 1em; + } + + &__actions { + display: flex; + gap: 0.5em; + margin-top: 1em; + } +} + +.calendar-subscription-url { + padding: 0.75em 1em; + margin-bottom: 0.75em; + border: 1px solid var(--primary-low); + border-radius: var(--d-border-radius); + background: var(--secondary); + + &__header { + margin-bottom: 0.5em; + } + + &__label { + font-weight: bold; + } + + &__description { + color: var(--primary-medium); + font-size: var(--font-down-1); + margin-left: 0.25em; + } + + &__actions { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.5em; + } +} diff --git a/app/assets/stylesheets/common/components/_index.scss b/app/assets/stylesheets/common/components/_index.scss index b7e3b0a2702c5..6464d79388c16 100644 --- a/app/assets/stylesheets/common/components/_index.scss +++ b/app/assets/stylesheets/common/components/_index.scss @@ -10,6 +10,7 @@ @import "bookmark-modal"; @import "bookmark-menu"; @import "buttons"; +@import "d-segmented-control"; @import "d-select"; @import "color-input"; @import "char-counter"; @@ -71,9 +72,9 @@ @import "welcome-header"; @import "notifications-tracking"; @import "emoji-picker"; +@import "d-icon-grid-picker"; @import "filter-input"; @import "filter-navigation"; -@import "dropdown-menu"; @import "welcome-banner"; @import "d-multi-select"; @import "d-otp"; diff --git a/app/assets/stylesheets/common/components/admin-onboarding-banner.scss b/app/assets/stylesheets/common/components/admin-onboarding-banner.scss index 4622de376fef8..c881e1a40d740 100644 --- a/app/assets/stylesheets/common/components/admin-onboarding-banner.scss +++ b/app/assets/stylesheets/common/components/admin-onboarding-banner.scss @@ -103,3 +103,84 @@ } } } + +.start-posting-options-modal { + .modal-options { + display: flex; + flex-direction: column; + gap: var(--space-4); + } + + &__card { + display: flex; + flex-direction: column; + align-items: start; + text-align: left; + width: 100%; + padding: var(--space-4); + border: 1px solid var(--content-border-color); + border-radius: var(--d-border-radius); + background: var(--secondary); + + &:focus-visible, + &:hover { + outline: 2px solid var(--tertiary); + + .start-posting-options-modal__title { + color: var(--tertiary); + } + } + + &:disabled { + opacity: 0.5; + pointer-events: none; + } + } + + &__title { + display: block; + font-weight: bold; + } + + &__body { + max-width: var(--modal-max-width); + } +} + +.predefined-topic-options-modal { + &__list { + display: flex; + flex-direction: column; + gap: var(--space-4); + } + + &__card { + display: flex; + flex-direction: column; + align-items: start; + text-align: left; + width: 100%; + padding: var(--space-4); + border: 1px solid var(--content-border-color); + border-radius: var(--d-border-radius); + background: var(--secondary); + + &:focus-visible, + &:hover { + outline: 2px solid var(--tertiary); + + .predefined-topic-options-modal__title { + color: var(--tertiary); + } + } + } + + &__title { + display: block; + font-weight: bold; + } + + &__body { + max-width: var(--modal-max-width); + } +} diff --git a/app/assets/stylesheets/common/components/bookmark-menu.scss b/app/assets/stylesheets/common/components/bookmark-menu.scss index c58e209ee337d..4c8617f6f9e46 100644 --- a/app/assets/stylesheets/common/components/bookmark-menu.scss +++ b/app/assets/stylesheets/common/components/bookmark-menu.scss @@ -1,72 +1,101 @@ -.bookmark-menu-content { - .dropdown-menu { - padding: 0; - min-width: 200px; - } +@use "lib/viewport"; +.bookmark-menu-content { .bookmark-menu__title { - display: flex; - align-items: center; - gap: 0.75em; background: var(--tertiary-low); color: var(--tertiary); - padding: 0.75rem 1rem; - font-weight: bold; .d-icon { color: var(--tertiary); } } - .bookmark-menu__row { + .bookmark-menu__row-title, + .bookmark-menu__title { display: flex; + align-items: center; + font-weight: bold; + gap: var(--d-sidebar-section-link-prefix-margin-right); + height: var(--d-sidebar-row-height); + padding-inline: var(--d-sidebar-row-horizontal-padding); + border-radius: var(--d-border-radius); - &:hover, - &:focus { - background: var(--d-hover); + .d-icon { + width: var(--d-sidebar-section-link-prefix-width); + } + } +} + +.topic-bookmarks-menu-content { + @include viewport.from(sm) { + max-height: 60vh; + } - &.--remove { - background: var(--danger-low); + .--jump { + .btn { + .discourse-no-touch & { + &:hover, + &:focus-visible { + background: var(--d-hover); + } } } + } - &.--clear-reminder { - .d-icon { - color: var(--primary-low-mid); - } + .--has-name { + .btn { + height: auto; + min-height: 2.2em; + padding: var(--space-1); + } + + .d-icon { + align-self: flex-start; + padding-top: var(--space-1); } } - .bookmark-menu__row-title { - padding: 0.75rem 1rem; - font-weight: bold; + .bookmark-menu__row-texts { + line-height: var(--line-height-medium); + display: flex; + flex-direction: column; + align-items: flex-start; } - .bookmark-menu__row-btn { - margin: 0; - width: 100%; + .bookmark-menu__row-description { + font-size: var(--font-down-1); + color: var(--primary-medium); + white-space: normal; + overflow-wrap: anywhere; text-align: left; - justify-content: left !important; - gap: 0.75rem; - color: var(--primary); + max-width: 35ch; + } - &:hover, - &:focus { - color: var(--primary) !important; - background: var(--tertiary-very-low); + .--post-bookmark { + .d-button__suffix-icon { + margin-left: auto; + color: var(--primary-medium); } + } - .--remove & { - color: var(--danger); - } + .bookmark-menu__section-title { + display: flex; + align-items: center; + font-weight: 700; + font-size: var(--font-down-1); + color: var(--primary-medium); + gap: var(--d-sidebar-section-link-prefix-margin-right); + padding-inline: var(--d-sidebar-row-horizontal-padding); + padding-block: 0.35em; - .d-button-label { - color: inherit; + .d-icon { + width: var(--d-sidebar-section-link-prefix-width); } - .d-icon { - color: inherit; - margin: 0 !important; + span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } } } diff --git a/app/assets/stylesheets/common/components/buttons.scss b/app/assets/stylesheets/common/components/buttons.scss index 8e5dee77f8acb..c6503c66170e5 100644 --- a/app/assets/stylesheets/common/components/buttons.scss +++ b/app/assets/stylesheets/common/components/buttons.scss @@ -196,6 +196,7 @@ padding: $vpad $hpad; cursor: pointer; line-height: normal; + white-space: nowrap; .d-button__suffix-icon { margin-left: auto; @@ -216,6 +217,7 @@ @include hover { background-color: transparent; color: var(--tertiary-hover); + border: 0; .d-icon { color: var(--tertiary-hover); @@ -516,7 +518,7 @@ } } - /* The full classname is the old way of combining transparent buttons with colours – no longer use like this + /* The full classname is the old way of combining transparent buttons with colours – no longer use like this Use the --modifiers approach instead */ diff --git a/app/assets/stylesheets/common/components/d-icon-grid-picker.scss b/app/assets/stylesheets/common/components/d-icon-grid-picker.scss new file mode 100644 index 0000000000000..014da10be6557 --- /dev/null +++ b/app/assets/stylesheets/common/components/d-icon-grid-picker.scss @@ -0,0 +1,238 @@ +// Custom properties for the grid layout, set on the DMenu/modal container. +// The DMenu identifier generates `.fk-d-menu.d-icon-grid-picker-content` +// which doesn't follow the BEM `__` pattern, so it stays outside the block. +.fk-d-menu.d-icon-grid-picker-content, +.fk-d-menu-modal.d-icon-grid-picker-content { + z-index: z("modal", "dialog"); + + --icon-grid-columns: 12; + --icon-grid-cell: 36px; + --icon-grid-gap: 2px; + --icon-grid-h-padding: 0.5rem; +} + +.d-icon-grid-picker { + /* Apply icon color to the trigger icon when --icon-color is set */ + .fk-d-menu__trigger > .d-icon { + color: var(--icon-color, currentColor); + } + + /* Split-button layout: DMenu trigger + clear button side by side */ + &.--has-clear { + display: inline-flex; + + .fk-d-menu__trigger { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right-color: transparent; + } + + .d-icon-grid-picker__clear { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-color: transparent; + margin-left: 0.1em; + padding: 0.25em; + min-width: 0; + + .d-icon { + font-size: var(--font-down-2); + } + } + } + + &__caret { + margin-left: 1em; + font-size: var(--font-down-2); + } + + &__content { + display: flex; + flex-direction: column; + width: calc( + var(--icon-grid-columns) * var(--icon-grid-cell) + + (var(--icon-grid-columns) - 1) * var(--icon-grid-gap) + + var(--icon-grid-h-padding) * 2 + 8px + ); + max-height: 380px; + } + + // Mirrors emoji-picker__filter-container + &__filter-container { + background: var(--primary-very-low); + display: flex; + height: 50px; + } + + // Mirrors emoji-picker__filter + &__filter { + width: 100%; + margin: 0.5rem; + border-radius: var(--d-border-radius); + box-sizing: border-box; + + input { + background-color: transparent !important; + width: 100%; + } + + .d-icon { + color: var(--primary-medium); + } + + &.filter-input-container { + border-color: transparent; + background: var(--secondary); + } + } + + // Parent grid that both favorites and icon grid share + &__grid-wrapper { + display: grid; + grid-template-columns: repeat( + var(--icon-grid-columns), + var(--icon-grid-cell) + ); + gap: var(--icon-grid-gap); + padding: var(--icon-grid-h-padding); + overflow-x: hidden; + overflow-y: auto; + max-height: 300px; + scrollbar-width: thin; + box-sizing: border-box; + } + + // Favorites row inherits parent columns via subgrid + &__favorites { + display: grid; + grid-template-columns: subgrid; + grid-column: 1 / -1; + padding-bottom: 0.25rem; + } + + &__selected-name { + font-size: var(--font-down-1); + white-space: nowrap; + padding-left: 0.3em; + padding-right: 0.5em; + } + + // Main icon grid inherits parent columns via subgrid + &__grid { + display: grid; + grid-template-columns: subgrid; + grid-column: 1 / -1; + } + + &__icon { + display: flex; + align-items: center; + justify-content: center; + width: var(--icon-grid-cell); + height: var(--icon-grid-cell); + cursor: pointer; + color: var(--icon-color, var(--primary-high)); + border: none; + background: none; + padding: 0; + font: inherit; + + @media (prefers-reduced-motion: no-preference) { + transition: transform 0.15s ease; + } + + &:hover, + &:focus { + background: var(--primary-very-low); + border-radius: var(--d-border-radius); + + @media (prefers-reduced-motion: no-preference) { + transform: scale(1.25); + } + } + + &.--selected { + background: var(--tertiary-low); + color: var(--tertiary); + border-radius: var(--d-border-radius); + } + + // Inner grid so the chip icon aligns with the first grid column + &.d-icon-grid-picker__selected-chip { + display: grid; + grid-template-columns: var(--icon-grid-cell) 1fr; + align-items: center; + text-align: left; + padding: 0; + + // The chip spans multiple columns, so transform: scale() on the + // whole element would overlap neighbouring cells without triggering + // a grid reflow. Scale only the inner icon instead. + &:hover, + &:focus { + transform: none; + + @media (prefers-reduced-motion: no-preference) { + .d-icon { + transform: scale(1.25); + } + } + } + + .d-icon { + justify-self: center; + + @media (prefers-reduced-motion: no-preference) { + transition: transform 0.15s ease; + } + } + } + + .d-icon { + font-size: var(--font-up-2); + } + } + + &__loading { + display: flex; + align-items: center; + justify-content: center; + min-height: 150px; + grid-column: 1 / -1; + } + + &__empty { + padding: 1em; + text-align: center; + color: var(--primary-medium); + grid-column: 1 / -1; + } +} + +// Mobile overrides +@media screen and (width <= 767px) { + .fk-d-menu-modal.d-icon-grid-picker-content { + .d-modal__body { + padding: 0; + } + + .d-icon-grid-picker { + &__content { + width: 100%; + } + + &__filter-container { + width: 100%; + } + + &__grid-wrapper { + width: 100%; + grid-template-columns: repeat(auto-fill, var(--icon-grid-cell)); + justify-content: center; + max-height: calc( + var(--composer-vh, 1dvh) * 100 - 50px - env(safe-area-inset-bottom) + ); + } + } + } +} diff --git a/app/assets/stylesheets/common/components/d-otp.scss b/app/assets/stylesheets/common/components/d-otp.scss index a6270445ab441..61fe96867f9da 100644 --- a/app/assets/stylesheets/common/components/d-otp.scss +++ b/app/assets/stylesheets/common/components/d-otp.scss @@ -3,6 +3,11 @@ align-items: center; position: relative; width: min-content; + + .email-login & { + width: 100%; + justify-content: center; + } } .d-otp-group { diff --git a/app/assets/stylesheets/common/components/d-page-header.scss b/app/assets/stylesheets/common/components/d-page-header.scss index aae03467f6b0d..7ef3ce61d4dee 100644 --- a/app/assets/stylesheets/common/components/d-page-header.scss +++ b/app/assets/stylesheets/common/components/d-page-header.scss @@ -81,6 +81,10 @@ $mobile-breakpoint: 700px; display: flex; align-items: center; margin-bottom: var(--space-2); + + &:not(:has(*)) { + display: none; + } } } diff --git a/app/assets/stylesheets/common/components/d-segmented-control.scss b/app/assets/stylesheets/common/components/d-segmented-control.scss new file mode 100644 index 0000000000000..1eba72f74622d --- /dev/null +++ b/app/assets/stylesheets/common/components/d-segmented-control.scss @@ -0,0 +1,85 @@ +.d-segmented-control { + position: relative; + display: inline-flex; + align-items: center; + background: var(--primary-very-low); + gap: var(--space-2); + border-radius: var(--d-border-radius-large); + padding: var(--space-1) var(--space-2); + + &__legend { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: 0; + overflow: hidden; + clip-path: inset(50%); + white-space: nowrap; + } + + &__slider { + position: absolute; + top: var(--space-1); + left: 0; + width: var(--slider-width, 0); + height: var(--space-9); + transform: translateX(var(--slider-x, 0)); + background: var(--secondary); + border-radius: var(--d-border-radius-large); + box-shadow: 0 1px 6px rgb(0, 0, 0, 0.1); + pointer-events: none; + + &.is-animated { + transition: + transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), + width 0.25s cubic-bezier(0.4, 0, 0.2, 1); + + @media (prefers-reduced-motion: reduce) { + transition-duration: 0ms; + } + } + } + + &__input[type="radio"] { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: 0; + overflow: hidden; + clip-path: inset(50%); + } + + &__label { + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + font-weight: normal; + padding: var(--space-1) var(--space-4); + margin: 0; + border-radius: var(--d-border-radius-large); + color: var(--primary-high); + height: var(--space-7); + cursor: pointer; + user-select: none; + white-space: nowrap; + + &:hover { + background: var(--primary-low); + color: var(--primary); + } + + &:has(:focus-visible) { + outline: 2px solid var(--tertiary); + outline-offset: -2px; + } + + &:has(:checked), + &:has(:checked):hover { + background: transparent; + color: var(--primary); + } + } +} diff --git a/app/assets/stylesheets/common/components/d-toggle-switch.scss b/app/assets/stylesheets/common/components/d-toggle-switch.scss index 6209574c5e325..1044ab94e78f2 100644 --- a/app/assets/stylesheets/common/components/d-toggle-switch.scss +++ b/app/assets/stylesheets/common/components/d-toggle-switch.scss @@ -80,11 +80,13 @@ transition: background 0.25s; .d-icon { - font-size: var(--font-down-1); + width: calc(var(--toggle-switch-height) * 0.54); + height: calc(var(--toggle-switch-height) * 0.54); color: var(--secondary); - left: 7px; - top: 6px; position: absolute; + top: 50%; + left: calc(var(--toggle-switch-height) * 0.291); + transform: translateY(-50%); } } diff --git a/app/assets/stylesheets/common/components/dropdown-menu.scss b/app/assets/stylesheets/common/components/dropdown-menu.scss deleted file mode 100644 index 7fda5ce97689e..0000000000000 --- a/app/assets/stylesheets/common/components/dropdown-menu.scss +++ /dev/null @@ -1,41 +0,0 @@ -.dropdown-menu { - padding: 0; - margin: 0; - - &__item { - list-style: none; - - .btn { - padding: 0.65rem 1rem; - width: 100%; - justify-content: flex-start; - text-align: left; - - &.--danger { - &:hover, - :focus-visible { - background: var(--danger-low); - } - color: var(--danger); - - .d-icon { - color: var(--danger); - } - } - } - - &.--selected .btn { - background: var(--d-selected); - - &:hover, - &:focus-visible { - background: var(--d-selected-hover); - } - } - } - - &__divider { - margin: 0; - height: 0; - } -} diff --git a/app/assets/stylesheets/common/components/emoji-picker.scss b/app/assets/stylesheets/common/components/emoji-picker.scss index abb70341a0ecc..435110fe98f04 100644 --- a/app/assets/stylesheets/common/components/emoji-picker.scss +++ b/app/assets/stylesheets/common/components/emoji-picker.scss @@ -1,3 +1,5 @@ +@use "lib/viewport"; + .fk-d-menu[data-content][data-identifier="emoji-picker"] { z-index: z("modal", "dialog"); @@ -24,6 +26,10 @@ height: 300px; width: 500px; + @include viewport.until(sm) { + height: auto; + } + .spinner-container { height: 100%; width: 100%; @@ -56,6 +62,10 @@ background: var(--primary-very-low); display: flex; height: 50px; + + @include viewport.until(sm) { + padding-top: 0.25rem; + } } &__filter { @@ -83,6 +93,12 @@ display: flex; flex-direction: row; height: 250px; + + @include viewport.until(sm) { + flex-direction: column; + padding-top: 1em; + box-sizing: border-box; + } } &__scrollable-content { @@ -113,6 +129,17 @@ -ms-overflow-style: none; /* IE and Edge */ scrollbar-width: none; /* Firefox */ overscroll-behavior: contain; + + @include viewport.until(sm) { + order: 1; + height: 50px; + width: 100%; + flex-direction: row; + display: flex; + box-sizing: border-box; + overflow-y: hidden; + overflow-x: auto; + } } &__sections-nav::-webkit-scrollbar { @@ -246,3 +273,38 @@ align-items: center; } } + +@include viewport.until(sm) { + .fk-d-menu-modal.emoji-picker-content { + // specificity is important for the styles in this container + html:not(.keyboard-visible.mobile-view) & .d-modal__container { + height: calc(var(--composer-vh, 1dvh) * 100); + max-height: 100%; + + .emoji-picker__content { + height: calc( + var(--composer-vh, 1dvh) * 100 - 50px - env(safe-area-inset-bottom) + ); + } + } + + html.keyboard-visible.mobile-view & .d-modal__container { + .emoji-picker__content { + height: calc(var(--composer-vh, 1dvh) * 100 - 50px); + } + } + + .d-modal__body { + padding: 0; + } + + .d-modal__container { + align-self: flex-start; + } + + .emoji-picker__close-btn { + margin-left: 0.25em; + padding-left: 0.75em; + } + } +} diff --git a/app/assets/stylesheets/common/components/empty-states.scss b/app/assets/stylesheets/common/components/empty-states.scss index 8765c56fcf5e9..69c76ea9987a4 100644 --- a/app/assets/stylesheets/common/components/empty-states.scss +++ b/app/assets/stylesheets/common/components/empty-states.scss @@ -8,7 +8,8 @@ &.--text-only { .empty-state__title { - font-weight: bold; + font-family: var(--heading-font-family); + font-weight: var(--heading-font-weight); font-size: var(--font-up-1); } } diff --git a/app/assets/stylesheets/common/components/form-template-field.scss b/app/assets/stylesheets/common/components/form-template-field.scss index b2d0f9ad6ead9..3e7156fecd239 100644 --- a/app/assets/stylesheets/common/components/form-template-field.scss +++ b/app/assets/stylesheets/common/components/form-template-field.scss @@ -70,6 +70,12 @@ color: var(--primary-medium); } + &__upload-hidden-input { + position: absolute; + opacity: 0; + pointer-events: none; + } + &__composer { // same default effective height (150px) than a text control height: 189px; diff --git a/app/assets/stylesheets/common/components/horizontal-overflow-nav.scss b/app/assets/stylesheets/common/components/horizontal-overflow-nav.scss index 0bc47d062e0d0..a2a1d79bcc15e 100644 --- a/app/assets/stylesheets/common/components/horizontal-overflow-nav.scss +++ b/app/assets/stylesheets/common/components/horizontal-overflow-nav.scss @@ -56,25 +56,45 @@ } .horizontal-overflow-nav__scroll-right { + /*! rtl:ignore */ right: 0; &::before { content: ""; + + /*! rtl:ignore */ margin-left: calc(var(--fade-width) * -1); height: 100%; width: var(--fade-width); + + /*! rtl:ignore */ background: linear-gradient(to left, var(--fade-color), transparent); } + + // Undo automatic icon flip since button stays in physical position + .rtl & .d-icon { + transform: scaleX(1); + } } .horizontal-overflow-nav__scroll-left { + /*! rtl:ignore */ left: 0; &::after { content: ""; + + /*! rtl:ignore */ margin-right: calc(var(--fade-width) * -1); height: 100%; width: var(--fade-width); + + /*! rtl:ignore */ background: linear-gradient(to right, var(--fade-color), transparent); } + + // Undo automatic icon flip since button stays in physical position + .rtl & .d-icon { + transform: scaleX(1); + } } diff --git a/app/assets/stylesheets/common/components/more-topics.scss b/app/assets/stylesheets/common/components/more-topics.scss index 84f70f0107e55..66101edca0c72 100644 --- a/app/assets/stylesheets/common/components/more-topics.scss +++ b/app/assets/stylesheets/common/components/more-topics.scss @@ -8,7 +8,17 @@ .nav { margin-block: 0; + @include viewport.until(sm) { + margin-block: 0 7px; + border-bottom: 1px solid var(--content-border-color); + } + li { + @include viewport.until(sm) { + position: relative; + bottom: -1px; // compensate for the border-bottom + } + .btn { color: var(--d-nav-color); background-color: var(--d-nav-bg-color); @@ -52,22 +62,31 @@ } .more-topics__list { - .topic-list-header::after { - content: ""; - display: block; - height: 12px; + .topic-list-body { + border-top-width: 1px; } - .topic-list-body { - border-top: none; + .topic-list-header:has(.nav-pills) { + th.topic-list-data { + padding-bottom: 0; + + &:first-of-type { + padding-left: 0; + } + } + } + + @include viewport.until(sm) { + .topic-list-header.--has-tabs { + display: flex; - .topic-list-item { - &:first-child td { - padding-top: 0; + .nav-pills { + margin: 0; + border: none; } - &:last-of-type { - border-bottom: none; + th:not(.default) { + display: none; } } } diff --git a/app/assets/stylesheets/common/components/navs.scss b/app/assets/stylesheets/common/components/navs.scss index 0766a322bfee8..370ae7af3d5b6 100644 --- a/app/assets/stylesheets/common/components/navs.scss +++ b/app/assets/stylesheets/common/components/navs.scss @@ -99,10 +99,10 @@ } &.active { - position: relative; color: var(--primary); background-color: var(--d-selected); font-weight: bold; + font-weight: var(--d-sidebar-active-font-weight); } } diff --git a/app/assets/stylesheets/common/components/notifications-tracking.scss b/app/assets/stylesheets/common/components/notifications-tracking.scss index 5c2abfd46494b..5f2ddfb9e0a1b 100644 --- a/app/assets/stylesheets/common/components/notifications-tracking.scss +++ b/app/assets/stylesheets/common/components/notifications-tracking.scss @@ -8,7 +8,6 @@ &__icons { display: flex; align-self: flex-start; - margin-right: 0.75em; } &__texts { diff --git a/app/assets/stylesheets/common/components/post-translations.scss b/app/assets/stylesheets/common/components/post-translations.scss index abfb2771ab77c..75c20c6897066 100644 --- a/app/assets/stylesheets/common/components/post-translations.scss +++ b/app/assets/stylesheets/common/components/post-translations.scss @@ -13,6 +13,18 @@ } } +.fk-d-tooltip__content[data-identifier="post-language"] + .fk-d-tooltip__inner-content { + flex-direction: column; + align-items: flex-start; + + .post-language__disclaimer { + color: var(--primary-medium); + font-size: var(--font-down-2); + margin-top: var(--space-1); + } +} + .post-language-selector-trigger { .d-button-label { margin-left: var(--space-1); diff --git a/app/assets/stylesheets/common/components/table-layout.scss b/app/assets/stylesheets/common/components/table-layout.scss index ea58b647ebcc5..6097761560724 100644 --- a/app/assets/stylesheets/common/components/table-layout.scss +++ b/app/assets/stylesheets/common/components/table-layout.scss @@ -138,6 +138,17 @@ color: var(--primary); } + .d-table__overview-link { + color: var(--primary); + + .d-table__overview-name { + &:hover, + &:focus { + color: var(--tertiary); + } + } + } + a.d-table__overview-name { &:visited { color: currentcolor; diff --git a/app/assets/stylesheets/common/components/user-card.scss b/app/assets/stylesheets/common/components/user-card.scss index e88422f584ca1..694590bdb2cb5 100644 --- a/app/assets/stylesheets/common/components/user-card.scss +++ b/app/assets/stylesheets/common/components/user-card.scss @@ -1,4 +1,5 @@ @use "sass:math"; +@use "lib/viewport"; .fk-d-menu[data-identifier="usercard"] { max-width: calc(100vw - 2em); @@ -8,6 +9,12 @@ min-width: 0; overflow: visible; } + + @include viewport.until(sm) { + &[data-content] { + z-index: z("max"); + } + } } .animated-placeholder { @@ -58,6 +65,12 @@ box-shadow: unset !important; z-index: unset !important; + @include viewport.until(sm) { + box-sizing: border-box; + max-width: 95vw; + max-height: 85vh; // 2.5vh margin-top and margin-bottom. 10vh top + } + .card-content { padding: 10px; background: rgb(var(--secondary-rgb), 0.85); @@ -70,6 +83,7 @@ } a.card-huge-avatar { + border-radius: 50%; display: block; } @@ -84,9 +98,18 @@ // avatar - names - controls .first-row { + @include viewport.until(sm) { + flex-wrap: wrap; + } + .names { padding-left: 1.25em; + @include viewport.until(sm) { + box-sizing: border-box; + flex: 1 1 0; + } + .user-profile-link { display: flex; align-items: center; @@ -113,6 +136,31 @@ list-style-type: none; margin: 0; + @include viewport.until(sm) { + width: 100%; // always wraps to next line + display: flex; + flex-wrap: wrap; + margin-top: 1em; + gap: 0.5em; + + li { + flex: 1 0 45%; + min-width: 8em; + + &:empty { + display: none; + } + + button { + margin: 0; + + .d-button-label { + @include ellipsis; + } + } + } + } + button { width: 100%; } @@ -126,16 +174,28 @@ .names__primary { @include ellipsis; line-height: var(--line-height-medium); - font-size: var(--font-up-5); + font-size: var(--font-up-3); font-weight: bold; + @include viewport.from(sm) { + font-size: var(--font-up-5); + } + .d-icon { color: var(--primary); + + @include viewport.until(sm) { + font-size: var(--font-down-2); + } } } .names__secondary { font-size: var(--font-up-1); + + @include viewport.until(sm) { + font-size: var(--font-0); + } } .metadata { @@ -190,6 +250,10 @@ max-height: var(--avatar-width); position: relative; + @include viewport.until(sm) { + flex: 0 0 auto; + } + .own-avatar-pencil { opacity: 0; position: absolute; @@ -329,6 +393,19 @@ margin: 0; text-align: left; + @include viewport.until(sm) { + max-height: 40vh; + overflow-y: auto; + + .public-user-field { + @include line-clamp(3); + } + } + + @media screen and (height <= 550px) { + max-height: 12vh; + } + .user-field-value-list-item:not(:last-of-type) { &::after { // create comma separated list @@ -344,12 +421,28 @@ flex-wrap: wrap; gap: var(--space-1); + @include viewport.until(sm) { + display: grid; + grid-template-columns: repeat(2, 1fr); + } + .user-badge { @include ellipsis; background: var(--primary-very-low); border: 1px solid var(--content-border-color); color: var(--primary); border-radius: var(--d-border-radius); + + @include viewport.until(sm) { + display: flex; + margin: 0; + width: 100%; + + .badge-display-name { + overflow: hidden; + text-overflow: ellipsis; + } + } } .user-card-badge-link { @@ -360,6 +453,16 @@ .more-user-badges { vertical-align: top; display: inline-block; + + @include viewport.until(sm) { + display: flex; + box-sizing: border-box; + + a { + width: 100%; + display: flex; + } + } } .more-user-badges a { @@ -371,6 +474,10 @@ display: flex; align-items: center; + @include viewport.until(sm) { + font-size: var(--font-down-1); + } + img.emoji { margin-right: 0.3em; } @@ -441,3 +548,33 @@ } } } + +@include viewport.until(sm) { + .card-cloak { + position: fixed; + top: 0; + left: 0; + z-index: z("mobile-composer") + 1; // 1101 + height: 100vh; + width: 100vw; + background-color: #000; + opacity: 0; + visibility: hidden; + transition: + opacity 0.3s, + visibility 0s 0.3s; + + &.--visible { + pointer-events: all; + opacity: 0.6; + visibility: visible; + transition: + opacity 0.3s, + visibility 0s; + } + + @media (prefers-reduced-motion) { + transition-duration: 0s; + } + } +} diff --git a/app/assets/stylesheets/common/components/user-stream-item.scss b/app/assets/stylesheets/common/components/user-stream-item.scss index ff5e01e21f5e7..c58dea61a69fb 100644 --- a/app/assets/stylesheets/common/components/user-stream-item.scss +++ b/app/assets/stylesheets/common/components/user-stream-item.scss @@ -1,4 +1,5 @@ -// Common styles for "user-stream-item" component +@use "lib/viewport"; + .user-stream { // DEPRECATED: // The ".item" class should be removed because it's too generic. @@ -164,6 +165,10 @@ max-width: 400px; @include ellipsis; + + @include viewport.until(sm) { + vertical-align: middle; + } } .edit-reason { @@ -196,6 +201,12 @@ .group-member-info { display: flex; + + @include viewport.until(sm) { + .name { + vertical-align: inherit; + } + } } .user-stream-item .user-stream-item-draft-actions { diff --git a/app/assets/stylesheets/common/components/welcome-banner.scss b/app/assets/stylesheets/common/components/welcome-banner.scss index 523d88654ee74..c6aad4a90eebf 100644 --- a/app/assets/stylesheets/common/components/welcome-banner.scss +++ b/app/assets/stylesheets/common/components/welcome-banner.scss @@ -1,6 +1,16 @@ @use "lib/viewport"; @import "common/foundation/mixins"; +:root { + --d-welcome-banner-text-alignment: center; + --d-welcome-banner-header-size: var(--font-up-6); + --d-welcome-banner-padding-top: var(--space-6); + --d-welcome-banner-padding-right: 0; + --d-welcome-banner-padding-bottom: var(--space-12); + --d-welcome-banner-padding-left: 0; + --d-welcome-banner-title-margin-bottom: var(--space-4); +} + .display-welcome-banner { #main-outlet { padding-top: 0; @@ -23,11 +33,14 @@ &__wrap { box-sizing: border-box; position: relative; - padding: var(--space-6) 0 3em; + padding: var(--d-welcome-banner-padding-top) + var(--d-welcome-banner-padding-right) + var(--d-welcome-banner-padding-bottom); .--with-bg-img & { + --d-welcome-banner-padding-right: var(--space-4); + --d-welcome-banner-padding-left: var(--space-4); border-radius: var(--d-border-radius); - padding-inline: var(--space-4); background-size: cover; background-position: center; background-repeat: no-repeat; @@ -35,13 +48,13 @@ } @include viewport.until(md) { - padding: var(--space-4) 8px var(--space-5); + --d-welcome-banner-padding-top: var(--space-4); + --d-welcome-banner-padding-right: 8px; + --d-welcome-banner-padding-bottom: var(--space-5); margin-top: var(--space-2); } @include viewport.until(sm) { - display: block; - padding: var(--space-2); margin-top: 0; } @@ -153,19 +166,28 @@ } .search-menu-panel { - // hacky but best guestimate we can do: full height of the viewport minus the header, minus the welcome banner spacing, minus font-size:6 title - max-height: calc(100vh - var(--header-offset) - -3em - 4em); + // hacky but best guestimate we can do + // 4em is roughly the input height + --d-welcome-banner-height: calc( + var(--font-up-6) + var(--d-welcome-banner-padding-top) + + var(--d-welcome-banner-padding-bottom) + + var(--d-welcome-banner-title-margin-bottom) + 4em + ); + max-height: calc( + 100vh - var(--header-offset) - var(--d-welcome-banner-height) + ); } } .welcome-banner__title { font-size: var(--font-up-6); - line-height: $line-height-medium; - font-weight: bold; - margin-bottom: var(--space-2); + line-height: var(--line-height-medium); + font-family: var(--heading-font-family); + font-weight: var(--heading-font-weight); + margin-bottom: var(--d-welcome-banner-title-margin-bottom); + text-align: var(--d-welcome-banner-text-alignment); margin-inline: auto; max-width: 70ch; - text-align: center; @include viewport.until(md) { font-size: var(--font-up-4); diff --git a/app/assets/stylesheets/common/components/welcome-header.scss b/app/assets/stylesheets/common/components/welcome-header.scss index e8c7cf672bb33..3b0437812ba99 100644 --- a/app/assets/stylesheets/common/components/welcome-header.scss +++ b/app/assets/stylesheets/common/components/welcome-header.scss @@ -1,24 +1,42 @@ +@use "lib/viewport"; + .login-welcome-header { + box-sizing: border-box; display: grid; grid-template-columns: auto 1fr; grid-template-rows: auto 1fr; overflow-wrap: anywhere; .login-title { - font-size: var(--font-up-6); + font-size: var(--font-up-5); margin: 0; line-height: var(--line-height-medium); + + @include viewport.from(sm) { + font-size: var(--font-up-6); + } } .login-subheader { - font-size: var(--font-up-1); + font-size: var(--font-0); margin: 0; + + @include viewport.from(sm) { + font-size: var(--font-up-1); + } } .waving-hand { - width: 35px; - height: 35px; + width: 30px; + height: 30px; margin-left: 0.5em; align-self: center; + + @include viewport.from(sm) { + .waving-hand { + width: 35px; + height: 35px; + } + } } } diff --git a/app/assets/stylesheets/common/d-editor.scss b/app/assets/stylesheets/common/d-editor.scss index 727bd325ca26e..7840c433028c4 100644 --- a/app/assets/stylesheets/common/d-editor.scss +++ b/app/assets/stylesheets/common/d-editor.scss @@ -113,7 +113,8 @@ } } -.hide-preview .d-editor-preview-wrapper { +.hide-preview .d-editor-preview-wrapper, +.--rich-editor-enabled .d-editor-preview-wrapper { display: none; flex: 0; } @@ -312,25 +313,108 @@ } } -// d-editor bar button sizing +.d-editor-button-bar__wrap { + position: relative; + min-width: 0; + margin-left: 1px; + margin-right: 1px; + overflow: clip; + border-start-start-radius: inherit; + border-start-end-radius: inherit; +} + +.d-editor-button-bar__scroll-btn { + --fade-width: 2rem; + --fade-color: var(--secondary); + position: absolute; + top: 0; + bottom: 0; + z-index: 2; + background: var(--fade-color); + border: none; + padding: 0 var(--space-1); + margin-block: 1px; + display: flex; + align-items: center; + cursor: pointer; + color: var(--primary-high); + + .discourse-touch & { + width: 0; + padding: 0; + overflow: visible; + pointer-events: none; + color: transparent; + } + + .discourse-no-touch &:hover { + color: var(--primary); + } + + &.--left { + /*! rtl:ignore */ + left: 0; + + &::after { + content: ""; + position: absolute; + + /*! rtl:ignore */ + left: 100%; + height: 100%; + width: var(--fade-width); + + /*! rtl:ignore */ + background: linear-gradient(to right, var(--fade-color), transparent); + pointer-events: none; + } + + // Undo automatic icon flip since button stays in physical position + .rtl & .d-icon { + transform: scaleX(1); + } + } + + &.--right { + /*! rtl:ignore */ + right: 0; + + &::before { + content: ""; + position: absolute; + + /*! rtl:ignore */ + right: 100%; + height: 100%; + width: var(--fade-width); + + /*! rtl:ignore */ + background: linear-gradient(to left, var(--fade-color), transparent); + pointer-events: none; + } + + // Undo automatic icon flip since button stays in physical position + .rtl & .d-icon { + transform: scaleX(1); + } + } +} + .d-editor-button-bar { display: flex; flex-direction: row; - flex-wrap: wrap; + flex-wrap: nowrap; gap: var(--space-2); - margin: 0.25rem 0; - - @include viewport.until(sm) { - flex-wrap: nowrap; - padding-block: var(--space-1); - overflow-x: auto; - scrollbar-width: none; - -ms-overflow-style: none; - max-width: 100%; + margin: 0; + padding-block: var(--space-1); + overflow-x: auto; + overflow-y: hidden; + scrollbar-width: none; + -ms-overflow-style: none; + max-width: 100%; - &::-webkit-scrollbar { - display: none; - } + &::-webkit-scrollbar { + display: none; } .btn:focus-visible { @@ -366,7 +450,6 @@ &.--replaced-toolbar { animation: float-left ease 0.2s 1 forwards; - flex-wrap: nowrap; @keyframes float-left { 0% { diff --git a/app/assets/stylesheets/common/float-kit/_index.scss b/app/assets/stylesheets/common/float-kit/_index.scss index 6754da592bcc4..8e05f2f8f87a4 100644 --- a/app/assets/stylesheets/common/float-kit/_index.scss +++ b/app/assets/stylesheets/common/float-kit/_index.scss @@ -1,4 +1,5 @@ @import "d-menu"; +@import "d-menu-modal"; @import "d-tooltip"; @import "d-button-tooltip"; @import "d-toasts"; diff --git a/app/assets/stylesheets/mobile/float-kit/d-menu.scss b/app/assets/stylesheets/common/float-kit/d-menu-modal.scss similarity index 94% rename from app/assets/stylesheets/mobile/float-kit/d-menu.scss rename to app/assets/stylesheets/common/float-kit/d-menu-modal.scss index c2679a67ecebd..50d67e0bf2c0a 100644 --- a/app/assets/stylesheets/mobile/float-kit/d-menu.scss +++ b/app/assets/stylesheets/common/float-kit/d-menu-modal.scss @@ -1,3 +1,4 @@ +// used when @modalForMobile={{true}} is set on the d-menu component .fk-d-menu-modal { z-index: z("modal", "content"); diff --git a/app/assets/stylesheets/common/float-kit/d-menu.scss b/app/assets/stylesheets/common/float-kit/d-menu.scss index fad8fb4ce8e3d..e7fb3bfee1096 100644 --- a/app/assets/stylesheets/common/float-kit/d-menu.scss +++ b/app/assets/stylesheets/common/float-kit/d-menu.scss @@ -56,10 +56,6 @@ overflow: auto; } - .btn { - border-radius: 0; - } - .arrow { position: absolute; color: var(--secondary); @@ -96,17 +92,31 @@ // should probably be renamed fk-d-menu__list .dropdown-menu { min-width: 200px; - padding: 0; + display: flex; + flex-direction: column; + gap: var(--d-sidebar-vertical-gap); + padding: var(--space-1); margin: 0; list-style: none; &__item { .btn { - padding: 0.5em 1rem; + display: inline-flex; + gap: var(--d-sidebar-section-link-prefix-margin-right); + padding-inline: var(--d-sidebar-row-horizontal-padding); width: 100%; justify-content: flex-start; background: rgb(0, 0, 0, 0); - border-radius: 0; + border-radius: var(--d-border-radius); + + &:not( + .notifications-tracking-btn, + .--with-description, + .pinned-options-btn + ) { + height: var(--d-sidebar-row-height); + padding-block: 0; + } &.-selected { background: var(--d-hover); @@ -120,6 +130,11 @@ } } + .svg-icon { + width: var(--d-sidebar-section-link-prefix-width); + margin-right: 0; + } + &:hover, &:focus, &:focus-visible { diff --git a/app/assets/stylesheets/common/form-kit/_checkbox-group.scss b/app/assets/stylesheets/common/form-kit/_checkbox-group.scss index 75b9128fa2d77..777a1181f457e 100644 --- a/app/assets/stylesheets/common/form-kit/_checkbox-group.scss +++ b/app/assets/stylesheets/common/form-kit/_checkbox-group.scss @@ -1,4 +1,4 @@ .form-kit__checkbox-group { display: flex; - gap: 0; + gap: 0.25em; } diff --git a/app/assets/stylesheets/common/form-kit/_conditional-display.scss b/app/assets/stylesheets/common/form-kit/_conditional-display.scss index 8aca24a9b3610..f5cab6ee7b0b7 100644 --- a/app/assets/stylesheets/common/form-kit/_conditional-display.scss +++ b/app/assets/stylesheets/common/form-kit/_conditional-display.scss @@ -13,11 +13,7 @@ } .--radio-cards { - width: var(--form-kit-large-input); - - @include viewport.until(sm) { - width: 100%; - } + width: 100%; .form-kit__conditional-display, .form-kit__container-content.--large { diff --git a/app/assets/stylesheets/common/form-kit/_container.scss b/app/assets/stylesheets/common/form-kit/_container.scss index 0d4004763da26..fbfd874b970ce 100644 --- a/app/assets/stylesheets/common/form-kit/_container.scss +++ b/app/assets/stylesheets/common/form-kit/_container.scss @@ -15,9 +15,8 @@ gap: 0.25em; margin: 0; font-size: var(--font-down-1-rem); - color: var(--primary-high); - font-weight: bold; - padding-bottom: 0.25em; + color: var(--primary); + font-weight: 600 !important; } &-subtitle { @@ -26,8 +25,7 @@ gap: 0.25em; margin: 0; font-size: var(--font-down-1-rem); - color: var(--primary-high); - padding-bottom: 0.25em; + color: var(--primary-medium); > * { margin: 0; @@ -59,6 +57,11 @@ width: var(--form-kit-large-input); } + &.--max { + max-width: var(--form-kit-max-input); + width: 100%; + } + &.--full { width: 100% !important; } diff --git a/app/assets/stylesheets/common/form-kit/_control-checkbox-upcoming-changes.scss b/app/assets/stylesheets/common/form-kit/_control-checkbox-upcoming-changes.scss new file mode 100644 index 0000000000000..46a4d5c97c1a1 --- /dev/null +++ b/app/assets/stylesheets/common/form-kit/_control-checkbox-upcoming-changes.scss @@ -0,0 +1,92 @@ +.uc-enable-new-checkbox-style { + .form-kit { + &__control-checkbox { + /* hide native checkbox */ + position: absolute; + opacity: 0; + + &-label { + display: flex; + gap: 0.75em; + margin: 0; + font-weight: normal !important; + color: var(--primary); + font-size: var(--font-down-1-rem); + cursor: pointer; + + .form-kit__field[data-disabled] & { + cursor: not-allowed; + } + } + } + + &__control-checkbox-checkmark { + /* custom box */ + width: 1.25em; + height: 1.25em; + border: 2px solid var(--primary-low-mid); + border-radius: 5px; + align-items: center; + display: flex; + justify-content: center; + position: relative; + box-sizing: border-box; + background: var(--secondary); + flex-shrink: 0; + overflow: hidden; + transition: border 0.2s ease; + + &::before { + content: ""; + position: absolute; + top: 50%; + left: 50%; + width: 50%; + height: 50%; + background: var(--tertiary-high); + border-radius: 50%; + transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; + transform: translate(-50%, -50%) scale(0); + } + + .d-icon { + display: none; + width: 75%; + height: 75%; + } + } + + &__control-checkbox-content { + flex-direction: column; + gap: 0.25rem; + } + + &__control-checkbox-description { + color: var(--primary-medium); + + &:empty { + display: none; + } + } + } + + .form-kit__control-checkbox-label:hover + .form-kit__control-checkbox-checkmark { + border-color: var(--tertiary-high); + } + + .form-kit__control-checkbox:checked + .form-kit__control-checkbox-checkmark { + border-color: var(--tertiary-low); + + &::before { + opacity: 1; + transform: translate(-50%, -50%) scale(3); + } + + .d-icon { + display: initial; + color: var(--secondary); + } + } +} diff --git a/app/assets/stylesheets/common/form-kit/_control-checkbox.scss b/app/assets/stylesheets/common/form-kit/_control-checkbox.scss index c368ead8a603e..3b32c7b2a5f26 100644 --- a/app/assets/stylesheets/common/form-kit/_control-checkbox.scss +++ b/app/assets/stylesheets/common/form-kit/_control-checkbox.scss @@ -9,9 +9,10 @@ &-label { display: flex; gap: 0.5em; - font-weight: normal !important; margin: 0; + font-weight: normal !important; color: var(--primary); + font-size: var(--font-down-1-rem); .form-kit__field[data-disabled] & { cursor: not-allowed; @@ -27,5 +28,9 @@ &__control-checkbox-description { color: var(--primary-medium); + + &:empty { + display: none; + } } } diff --git a/app/assets/stylesheets/common/form-kit/_control-icon.scss b/app/assets/stylesheets/common/form-kit/_control-icon.scss index 7a0c795033fb0..7336b91f767a5 100644 --- a/app/assets/stylesheets/common/form-kit/_control-icon.scss +++ b/app/assets/stylesheets/common/form-kit/_control-icon.scss @@ -1,45 +1,15 @@ -@use "lib/viewport"; - .form-kit__control-icon { - width: 100% !important; - min-width: var(--form-kit-small-input); - - .formatted-selection { - display: none !important; - } - - .d-icon-angle-down, - .d-icon-angle-up { - color: var(--primary-medium) !important; - } - - .select-kit-header-wrapper .d-icon:first-of-type { - color: var(--primary); + .d-icon-grid-picker { + width: 100%; + min-width: var(--form-kit-small-input); } - .select-kit-header { - padding-inline: 0.65em !important; - height: 2em; - - @include viewport.until(sm) { - height: 2.25em; - } - - &:hover:not(:disabled) { - .discourse-no-touch & { - background-color: var(--secondary); - color: var(--primary); - border: 1px solid var(--tertiary); - - .d-icon { - color: inherit; - } - } - } + .d-icon-grid-picker__caret { + color: var(--primary-medium); } .form-kit__field.has-error & { - summary { + .fk-d-menu__trigger { border-color: var(--danger); } } diff --git a/app/assets/stylesheets/common/form-kit/_control-menu.scss b/app/assets/stylesheets/common/form-kit/_control-menu.scss index 50007c3e8289d..89199ca33dcaa 100644 --- a/app/assets/stylesheets/common/form-kit/_control-menu.scss +++ b/app/assets/stylesheets/common/form-kit/_control-menu.scss @@ -1,17 +1,43 @@ -.form-kit__control-menu-trigger { - justify-content: space-between; +@use "lib/viewport"; - @include default-input; -} +.form-kit__control-menu { + @include viewport.until(sm) { + justify-content: space-between; + min-width: var(--form-kit-small-input); + } + + &-trigger { + justify-content: space-between; -.form-kit__control-menu-content { - .dropdown-menu { - min-width: 200px; + @include default-input; + width: auto; } - .dropdown-menu__item { - &:hover { - background: var(--d-hover); + &-content { + .dropdown-menu { + min-width: 200px; + } + + .dropdown-menu__item { + &:hover { + background: var(--d-hover); + } + } + } + + @include viewport.until(sm) { + &-item { + .btn:focus, + .btn:active { + .discourse-touch & { + color: var(--primary); + background: rgb(0, 0, 0, 0); + } + } + + &:last-of-type .btn { + color: var(--tertiary); + } } } } diff --git a/app/assets/stylesheets/common/form-kit/_control-radio.scss b/app/assets/stylesheets/common/form-kit/_control-radio.scss index 0d00d5bf07211..ddb708fbff26b 100644 --- a/app/assets/stylesheets/common/form-kit/_control-radio.scss +++ b/app/assets/stylesheets/common/form-kit/_control-radio.scss @@ -1,9 +1,10 @@ .form-kit__control-radio-label { display: flex; gap: 0.5em; - font-weight: normal !important; + font-weight: 500 !important; margin: 0; color: var(--primary); + font-size: var(--font-down-1-rem); .form-kit__field[data-disabled] & { cursor: not-allowed; diff --git a/app/assets/stylesheets/common/form-kit/_control-textarea.scss b/app/assets/stylesheets/common/form-kit/_control-textarea.scss index 0432df5a36e13..0ac9ab7f6c15d 100644 --- a/app/assets/stylesheets/common/form-kit/_control-textarea.scss +++ b/app/assets/stylesheets/common/form-kit/_control-textarea.scss @@ -1,11 +1,12 @@ .form-kit__control-textarea { // prevents firefox/chrome to add spacing under textarea display: block; + min-height: 150px; + min-width: var(--form-kit-large-input); @include default-input { // reset textarea styles height: 150px; - min-width: auto !important; padding: 0.5em !important; } } diff --git a/app/assets/stylesheets/common/form-kit/_field.scss b/app/assets/stylesheets/common/form-kit/_field.scss index 58484bcdda0a3..5765b7f75f9d3 100644 --- a/app/assets/stylesheets/common/form-kit/_field.scss +++ b/app/assets/stylesheets/common/form-kit/_field.scss @@ -1,3 +1,5 @@ +@use "lib/viewport"; + .form-kit__field { .form-kit__container-content { align-items: flex-start; @@ -5,11 +7,17 @@ width: var(--form-kit-medium-input); } + @include viewport.until(sm) { + .form-kit__container-content, + .form-kit__container { + width: 100% !important; + } + } + &.--full { width: 100%; } - &-textarea, &-composer, &-code, &-image { @@ -18,6 +26,13 @@ } } + &-textarea { + .form-kit__container-content { + min-width: var(--form-kit-large-input); + width: fit-content !important; + } + } + &-toggle { flex-direction: row; align-items: center; @@ -35,17 +50,18 @@ .form-kit__container-description { margin: 0; - font-size: var(--font-down-1-rem); + font-size: var(--font-down-1); + color: var(--primary-medium); pre, code { - font-size: var(--font-down-2-rem); + font-size: var(--font-down-2); } } .form-kit__container-help-text { margin: 0; - font-size: var(--font-down-1-rem); + font-size: var(--font-down-1); color: var(--primary-high-or-secondary-low); } @@ -64,6 +80,11 @@ width: var(--form-kit-large-input); } + &.--max { + max-width: var(--form-kit-max-input); + width: 100%; + } + &.--full { width: 100% !important; } diff --git a/app/assets/stylesheets/common/form-kit/_fieldset.scss b/app/assets/stylesheets/common/form-kit/_fieldset.scss index 0cf0d4d204441..6e0eb80a1cd8e 100644 --- a/app/assets/stylesheets/common/form-kit/_fieldset.scss +++ b/app/assets/stylesheets/common/form-kit/_fieldset.scss @@ -10,7 +10,7 @@ align-items: center; margin: 0 0 0.25rem; font-size: var(--font-down-1-rem); - color: var(--primary-high); + color: var(--primary); } &__fieldset-description { diff --git a/app/assets/stylesheets/common/form-kit/_form-kit.scss b/app/assets/stylesheets/common/form-kit/_form-kit.scss index 05b02fe40af77..ce91b8d087e95 100644 --- a/app/assets/stylesheets/common/form-kit/_form-kit.scss +++ b/app/assets/stylesheets/common/form-kit/_form-kit.scss @@ -3,4 +3,9 @@ flex-direction: column; gap: 1.5em; align-items: flex-start; + + .alert { + // we space elements with gap, so don't need the margin + margin-bottom: 0; + } } diff --git a/app/assets/stylesheets/common/form-kit/_index.scss b/app/assets/stylesheets/common/form-kit/_index.scss index c99008e4c90fc..6af38bb9e0ff8 100644 --- a/app/assets/stylesheets/common/form-kit/_index.scss +++ b/app/assets/stylesheets/common/form-kit/_index.scss @@ -8,6 +8,7 @@ @import "_conditional-display"; @import "_container"; @import "_control-checkbox"; +@import "_control-checkbox-upcoming-changes"; @import "_control-code"; @import "_control-color"; @import "_control-composer"; diff --git a/app/assets/stylesheets/common/form-kit/_row.scss b/app/assets/stylesheets/common/form-kit/_row.scss index f14a230d0a0ca..df1593317ab69 100644 --- a/app/assets/stylesheets/common/form-kit/_row.scss +++ b/app/assets/stylesheets/common/form-kit/_row.scss @@ -1,3 +1,5 @@ +@use "lib/viewport"; + .form-kit__row { display: flex; flex-wrap: wrap; @@ -26,7 +28,11 @@ } .form-kit__button { - height: 2em; + height: 2.25em; + + @include viewport.from(sm) { + height: 2em; + } } .form-kit__container-title { diff --git a/app/assets/stylesheets/common/form-kit/_section.scss b/app/assets/stylesheets/common/form-kit/_section.scss index 05ef24389dba9..e8fdaef446e6d 100644 --- a/app/assets/stylesheets/common/form-kit/_section.scss +++ b/app/assets/stylesheets/common/form-kit/_section.scss @@ -13,9 +13,39 @@ .form-kit__section-title { margin: 0; - font-size: var(--font-up-1-rem); + font-size: var(--font-up-1); +} + +.form-kit__section-header { + border-bottom: 1px solid var(--content-border-color); + padding-bottom: 0.5em; } .form-kit__section-subtitle { margin-top: calc(var(--space-4) * -1); // Offset the gap of the section + color: var(--primary-medium); + font-size: var(--font-down-1); +} + +.form-kit__section.emphasis { + border: 2px solid var(--content-border-color); + border-radius: var(--d-border-radius); + padding: 1em; + box-sizing: border-box; + + &.emphasis-success { + border-color: var(--success-medium); + } + + &.emphasis-error { + border-color: var(--danger-medium); + } + + &.emphasis-warning { + border-color: var(--highlight); + } + + &.emphasis-info { + border-color: var(--tertiary-medium); + } } diff --git a/app/assets/stylesheets/common/form-kit/_variables.scss b/app/assets/stylesheets/common/form-kit/_variables.scss index 5ebf928587385..08dbe6f70dc98 100644 --- a/app/assets/stylesheets/common/form-kit/_variables.scss +++ b/app/assets/stylesheets/common/form-kit/_variables.scss @@ -1,6 +1,7 @@ :root { --form-kit-gutter-x: 1rem; --form-kit-gutter-y: 1rem; + --form-kit-max-input: 75ch; --form-kit-large-input: 325px; --form-kit-medium-input: 200px; --form-kit-small-input: 75px; diff --git a/app/assets/stylesheets/common/foundation/base.scss b/app/assets/stylesheets/common/foundation/base.scss index 54999375c920b..54c25d1d9319a 100644 --- a/app/assets/stylesheets/common/foundation/base.scss +++ b/app/assets/stylesheets/common/foundation/base.scss @@ -10,6 +10,7 @@ --d-nav-pill-border-radius: var(--d-border-radius); --d-input-border-radius: var(--d-border-radius); --d-content-background: initial; + --d-link-text-decoration: none; // used for padding & margin --space: 0.25rem; // 4px @@ -37,7 +38,6 @@ html { font-size: var(--base-font-size); line-height: var(--line-height-large); background-color: var(--secondary); - overflow-y: scroll; direction: ltr; &.text-size-smallest { @@ -64,7 +64,7 @@ a:visited, a:hover, a:active { color: var(--d-link-color); - text-decoration: none; + text-decoration: var(--d-link-text-decoration); cursor: pointer; } @@ -79,6 +79,10 @@ hr { padding: 0; } +.dot-separator { + @include dot-separator; +} + // Lists // -------------------------------------------------- ul, @@ -159,10 +163,6 @@ tbody tr { } } -.topic-list-header tr { - border-bottom: var(--table-border-width) solid var(--table-border-color); -} - // https://en.wikipedia.org/wiki/Ruby_character ruby > rt { font-size: 72%; // ~10px with 14px base diff --git a/app/assets/stylesheets/common/foundation/math.scss b/app/assets/stylesheets/common/foundation/math.scss index 74ff5aa924911..ca1a509a4e553 100644 --- a/app/assets/stylesheets/common/foundation/math.scss +++ b/app/assets/stylesheets/common/foundation/math.scss @@ -67,9 +67,10 @@ $SQRT2: 1.4142135623730951; // @param {Number} $x // @param {Number} $exp @function ldexp($x, $exp) { - $b: if($exp >= 0, 2, 1 * 0.5); + $b: 2; @if $exp < 0 { + $b: 0.5; $exp: $exp * -1; } @@ -135,7 +136,11 @@ $SQRT2: 1.4142135623730951; $base: $base * $base; } - @return if($s != 0, math.div(1, $r), $r); + @if $s != 0 { + $r: math.div(1, $r); + } + + @return $r; } // Returns E^x, where x is the argument, and E is Euler's constant, the base of the natural logarithms. diff --git a/app/assets/stylesheets/common/foundation/mixins.scss b/app/assets/stylesheets/common/foundation/mixins.scss index d4ea9a71c193f..88a1ffea5c544 100644 --- a/app/assets/stylesheets/common/foundation/mixins.scss +++ b/app/assets/stylesheets/common/foundation/mixins.scss @@ -41,7 +41,7 @@ $breakpoints: ( @if $sidebar { // when the sidebar is shown, we want to increase the breakpoints by the width of the sidebar /* stylelint-disable-next-line scss/no-global-function-names */ - @media #{$type} and (#{$rule}: calc(#{map-get($breakpoints, $bp)} + #{$sidebar-width})) { + @media #{$type} and (#{$rule}: calc(#{map-get($breakpoints, $bp)} + #{$d-sidebar-width})) { .has-sidebar-page { @content; } @@ -137,11 +137,6 @@ $hpad: 0.65em; } // Stuff we repeat -@mixin post-aside { - border-left: 5px solid var(--primary-300); - background-color: var(--blend-primary-secondary-5); -} - @mixin d-animation($name, $duration, $easing: ease) { animation: $name $duration $easing forwards; @@ -358,3 +353,12 @@ $hpad: 0.65em; } } } + +@mixin dot-separator($size: 0.35em) { + width: $size; + height: $size; + margin-inline: var(--space-1); + border-radius: 6.25em; + background: var(--primary-low-mid); + flex-shrink: 0; +} diff --git a/app/assets/stylesheets/common/rich-editor/rich-editor.scss b/app/assets/stylesheets/common/rich-editor/rich-editor.scss index 454229b41b00c..56eb38fdbca3b 100644 --- a/app/assets/stylesheets/common/rich-editor/rich-editor.scss +++ b/app/assets/stylesheets/common/rich-editor/rich-editor.scss @@ -184,6 +184,17 @@ padding: var(--space-half) var(--space-2) 0 var(--space-2); margin-block: var(--space-4); + > div { + display: flex; + flex-wrap: wrap; + gap: var(--space-2); + padding-block: var(--space-2); + + p { + margin: 0; + } + } + &__remove-btn { position: absolute; bottom: var(--space-2); diff --git a/app/assets/stylesheets/common/select-kit/_index.scss b/app/assets/stylesheets/common/select-kit/_index.scss index a73bcfb903d5d..a250c1cc4cc4e 100644 --- a/app/assets/stylesheets/common/select-kit/_index.scss +++ b/app/assets/stylesheets/common/select-kit/_index.scss @@ -20,6 +20,7 @@ @import "period-chooser"; @import "select-kit"; @import "single-select"; +@import "tag-category-admin-dropdown"; @import "tag-chooser"; @import "tag-drop"; @import "topic-chooser"; diff --git a/app/assets/stylesheets/common/select-kit/category-drop.scss b/app/assets/stylesheets/common/select-kit/category-drop.scss index d698e207bcca9..573a31fc336c4 100644 --- a/app/assets/stylesheets/common/select-kit/category-drop.scss +++ b/app/assets/stylesheets/common/select-kit/category-drop.scss @@ -1,3 +1,5 @@ +@use "lib/viewport"; + .select-kit { &.combo-box { &.category-drop { diff --git a/app/assets/stylesheets/common/select-kit/dropdown-select-box.scss b/app/assets/stylesheets/common/select-kit/dropdown-select-box.scss index 948baed0454f2..75cd853183149 100644 --- a/app/assets/stylesheets/common/select-kit/dropdown-select-box.scss +++ b/app/assets/stylesheets/common/select-kit/dropdown-select-box.scss @@ -1,3 +1,5 @@ +@use "lib/viewport"; + .select-kit { &.single-select { &.dropdown-select-box { @@ -43,9 +45,13 @@ font-size: var(--font-0); color: var(--primary); padding: 0; + max-width: 100%; @include ellipsis; - max-width: 100%; + + @include viewport.until(sm) { + font-weight: normal; + } } .desc { @@ -56,11 +62,22 @@ white-space: normal; } } + + @include viewport.until(sm) { + .svg-icon-title { + width: auto; + height: auto; + } + } } .select-kit-collection { padding: 0; max-height: 100%; + + @include viewport.until(sm) { + overflow-y: auto; + } } .select-kit-header { diff --git a/app/assets/stylesheets/common/select-kit/period-chooser.scss b/app/assets/stylesheets/common/select-kit/period-chooser.scss index b0294ed514998..9c01b2264eb69 100644 --- a/app/assets/stylesheets/common/select-kit/period-chooser.scss +++ b/app/assets/stylesheets/common/select-kit/period-chooser.scss @@ -13,6 +13,7 @@ background: transparent; border-color: transparent; padding: 0; + border-radius: 0; h2.selected-name { color: var(--secondary); diff --git a/app/assets/stylesheets/common/select-kit/select-kit.scss b/app/assets/stylesheets/common/select-kit/select-kit.scss index 98963a177859f..686494e15498d 100644 --- a/app/assets/stylesheets/common/select-kit/select-kit.scss +++ b/app/assets/stylesheets/common/select-kit/select-kit.scss @@ -1,3 +1,5 @@ +@use "lib/viewport"; + .select-kit { @include unselectable; border: none; @@ -210,6 +212,10 @@ justify-content: flex-start; padding: 0.5em; + @include viewport.until(sm) { + padding-block: 0.75em; + } + &.disabled { pointer-events: none; opacity: 0.4; @@ -311,6 +317,10 @@ width: 100%; box-sizing: border-box; min-height: 30px; + + @include viewport.until(sm) { + font-size: var(--font-0); + } } &.is-hidden { diff --git a/app/assets/stylesheets/common/select-kit/tag-category-admin-dropdown.scss b/app/assets/stylesheets/common/select-kit/tag-category-admin-dropdown.scss new file mode 100644 index 0000000000000..7c45981a8606d --- /dev/null +++ b/app/assets/stylesheets/common/select-kit/tag-category-admin-dropdown.scss @@ -0,0 +1,10 @@ +.tag-category-admin-dropdown { + .badge-category__wrapper { + font-size: var(--font-0); + } + + .discourse-tag { + display: inline; + vertical-align: baseline; + } +} diff --git a/app/assets/stylesheets/common/select-kit/tag-drop.scss b/app/assets/stylesheets/common/select-kit/tag-drop.scss index 835edb7598b7b..a66c958f004a8 100644 --- a/app/assets/stylesheets/common/select-kit/tag-drop.scss +++ b/app/assets/stylesheets/common/select-kit/tag-drop.scss @@ -1,3 +1,5 @@ +@use "lib/viewport"; + .select-kit { &.combo-box { &.tag-drop { @@ -8,12 +10,26 @@ color: var(--primary-high); } + @include viewport.until(sm) { + .tag-drop-header { + font-size: var(--font-0); + + .d-icon { + font-size: var(--font-0); + } + } + } + .select-kit-row { &[data-value="all-tags"], &[data-value="no-tags"] { color: var(--tertiary); font-weight: 700; } + + @include viewport.until(sm) { + font-weight: normal; + } } .angle-icon { diff --git a/app/assets/stylesheets/common/table-builder/table-edit-decorator.scss b/app/assets/stylesheets/common/table-builder/table-edit-decorator.scss index 2b2c7e49f5137..caa7f149d9f58 100644 --- a/app/assets/stylesheets/common/table-builder/table-edit-decorator.scss +++ b/app/assets/stylesheets/common/table-builder/table-edit-decorator.scss @@ -1,3 +1,5 @@ +@use "lib/viewport"; + .btn-edit-table { -webkit-touch-callout: none; user-select: none; @@ -17,13 +19,16 @@ } .discourse-touch & { - display: flex; - flex-direction: column-reverse; - padding-bottom: 0.5em; + @include viewport.until(xl) { + display: flex; + flex-direction: column-reverse; + padding-bottom: 0.5em; - .open-popup-link { - left: 0; - margin: 0; + .open-popup-link { + opacity: 100%; + left: 0; + margin: var(--space-2) 0 0; + } } } } diff --git a/app/assets/stylesheets/common/toolbar-popup-menu-options.scss b/app/assets/stylesheets/common/toolbar-popup-menu-options.scss index 0ea31c18b2e23..37c22e59d97bc 100644 --- a/app/assets/stylesheets/common/toolbar-popup-menu-options.scss +++ b/app/assets/stylesheets/common/toolbar-popup-menu-options.scss @@ -10,6 +10,41 @@ } } + .fk-d-menu__inner-content { + flex-direction: column; + + --fade-height: 2.5em; + + &::before, + &::after { + content: ""; + position: sticky; + display: block; + flex-shrink: 0; + height: var(--fade-height); + pointer-events: none; + opacity: 0; + z-index: 1; + } + + &::before { + top: 0; + margin-bottom: calc(var(--fade-height) * -1); + background: linear-gradient(to top, transparent, var(--secondary)); + } + + &::after { + bottom: 0; + margin-top: calc(var(--fade-height) * -1); + background: linear-gradient(to bottom, transparent, var(--secondary)); + } + } + + &.--scroll-top .fk-d-menu__inner-content::before, + &.--scroll-bottom .fk-d-menu__inner-content::after { + opacity: 1; + } + .fullscreen-composer & { z-index: z("header") + 1; } @@ -20,8 +55,12 @@ } .shortcut { + line-height: 1; + vertical-align: middle; + &.--apple { letter-spacing: 0.25em; + padding-right: 0.35em; } @include viewport.until(sm) { @@ -30,7 +69,9 @@ } } -.toolbar-menu__options-content { +.toolbar-menu__options-content, +.toolbar-menu__list-content, +.toolbar-menu__heading-content { .dropdown-menu { .btn { &.--active { @@ -46,6 +87,7 @@ flex: 1; justify-content: space-between; align-items: center; + min-width: 0; // shrink if needed &__active-icon { visibility: hidden; @@ -58,16 +100,10 @@ } } -.toolbar-menu__heading-content { +.toolbar-menu__heading-content, +.toolbar-menu__list-content { .dropdown-menu { .btn { - &.--active { - .d-button-label__active-icon { - visibility: visible; - margin-left: auto; - } - } - &:hover, &:focus, &:focus-visible { @@ -106,7 +142,11 @@ font-size: var(--font-down-1-rem); } } + } +} +.toolbar-menu__heading-content { + .dropdown-menu { .btn[data-name="heading-1"] { .d-button-label__text, .d-icon[class*="d-icon-discourse"] { diff --git a/app/assets/stylesheets/desktop/components/_index.scss b/app/assets/stylesheets/desktop/components/_index.scss index 0750dfa2ab6b8..973ee8c83fe5f 100644 --- a/app/assets/stylesheets/desktop/components/_index.scss +++ b/app/assets/stylesheets/desktop/components/_index.scss @@ -1,6 +1,5 @@ @import "drafts-dropdown-menu"; @import "header-search"; -@import "more-topics"; @import "sidebar/edit-navigation-menu/tags-modal"; @import "sidebar/sidebar-section"; @import "user-card"; diff --git a/app/assets/stylesheets/desktop/components/more-topics.scss b/app/assets/stylesheets/desktop/components/more-topics.scss deleted file mode 100644 index 11ee3aa866bc7..0000000000000 --- a/app/assets/stylesheets/desktop/components/more-topics.scss +++ /dev/null @@ -1,15 +0,0 @@ -.more-topics__container { - .nav { - position: absolute; - - li { - margin-right: 0; - } - } - - .more-topics__lists:not(.single-list) { - .topic-list-header .default { - visibility: hidden; - } - } -} diff --git a/app/assets/stylesheets/mobile.scss b/app/assets/stylesheets/mobile.scss index aa940719ed86c..d88bbbc645dfd 100644 --- a/app/assets/stylesheets/mobile.scss +++ b/app/assets/stylesheets/mobile.scss @@ -1,5 +1,3 @@ -// Import all component-specific files -@import "mobile/components/_index"; -@import "mobile/select-kit/_index"; -@import "mobile/float-kit/_index"; -@import "mobile/form-kit/_index"; +// This file intentionally left blank — the stylesheet compiler generates `@import "mobile"` +// Plugins and themes can still add mobile styles for import +// Instead of authoring mobile-specific styles, use media queries in the common stylesheets diff --git a/app/assets/stylesheets/mobile/components/_index.scss b/app/assets/stylesheets/mobile/components/_index.scss deleted file mode 100644 index 65a9a246803e0..0000000000000 --- a/app/assets/stylesheets/mobile/components/_index.scss +++ /dev/null @@ -1,7 +0,0 @@ -@import "topic-map"; -@import "user-card"; -@import "user-stream-item"; -@import "welcome-header"; -@import "more-topics"; -@import "emoji-picker"; -@import "welcome-banner"; diff --git a/app/assets/stylesheets/mobile/components/emoji-picker.scss b/app/assets/stylesheets/mobile/components/emoji-picker.scss deleted file mode 100644 index 8dabfa6b9836c..0000000000000 --- a/app/assets/stylesheets/mobile/components/emoji-picker.scss +++ /dev/null @@ -1,60 +0,0 @@ -.fk-d-menu-modal.emoji-picker-content { - .emoji-picker { - height: auto; - } - - html:not(.keyboard-visible.mobile-view) & .d-modal__container { - height: calc(var(--composer-vh, 1dvh) * 100); - max-height: 100%; - - .emoji-picker__content { - height: calc( - var(--composer-vh, 1dvh) * 100 - 50px - env(safe-area-inset-bottom) - ); - } - } - - html.keyboard-visible.mobile-view & .d-modal__container { - .emoji-picker__content { - height: calc(var(--composer-vh, 1dvh) * 100 - 50px); - } - } - - .d-modal__body { - padding: 0; - } - - .d-modal__container { - align-self: flex-start; - } - - .emoji-picker__sections-nav { - order: 1; - height: 50px; - width: 100%; - flex-direction: row; - display: flex; - box-sizing: border-box; - overflow-y: hidden; - overflow-x: auto; - } - - .emoji-picker__content { - flex-direction: column; - padding-top: 1em; - box-sizing: border-box; - } - - .emoji-picker__scrollable-content { - height: 100%; - } - - .emoji-picker__close-btn { - margin-left: 0.25em; - padding-left: 0.75em; - } - - .emoji-picker__filter-container { - padding-top: 0.25rem; - } -} diff --git a/app/assets/stylesheets/mobile/components/more-topics.scss b/app/assets/stylesheets/mobile/components/more-topics.scss deleted file mode 100644 index 08fbb76e44d92..0000000000000 --- a/app/assets/stylesheets/mobile/components/more-topics.scss +++ /dev/null @@ -1,25 +0,0 @@ -.more-topics__container { - .nav { - margin-block: 0 7px; - border-bottom: 1px solid var(--content-border-color); - - li { - position: relative; - bottom: -1px; // compensate for the border-bottom - } - } - - .more-content-topics { - padding: 15px 0 15px 0; - - .badge-category, - .badge-category-parent { - font-size: var(--font-down-1); - vertical-align: top; - } - - .suggested-topics-message { - margin-top: 1em; - } - } -} diff --git a/app/assets/stylesheets/mobile/components/topic-map.scss b/app/assets/stylesheets/mobile/components/topic-map.scss deleted file mode 100644 index 2173155542587..0000000000000 --- a/app/assets/stylesheets/mobile/components/topic-map.scss +++ /dev/null @@ -1,9 +0,0 @@ -.fk-d-menu-modal { - &.topic-map__links-content { - li { - a { - padding: 0; - } - } - } -} diff --git a/app/assets/stylesheets/mobile/components/user-card.scss b/app/assets/stylesheets/mobile/components/user-card.scss deleted file mode 100644 index 5b134941567cc..0000000000000 --- a/app/assets/stylesheets/mobile/components/user-card.scss +++ /dev/null @@ -1,127 +0,0 @@ -[data-content][data-identifier="usercard"] { - z-index: z("max"); -} - -// shared styles for user and group cards -.user-card, -.group-card { - max-width: 95vw; - margin: 0; - max-height: 85vh; // 2.5vh margin-top and margin-bottom. 10vh top - box-sizing: border-box; - - // avatar - names - controls - .first-row { - flex-wrap: wrap; - - .names { - flex: 1 1 0; - box-sizing: border-box; - } - - .user-card-avatar { - flex: 0 0 auto; - } - - .usercard-controls { - width: 100%; // always wraps to next line - display: flex; - flex-wrap: wrap; - margin-top: 1em; - gap: 0.5em; - - li { - flex: 1 0 45%; - min-width: 8em; - - &:empty { - display: none; - } - - button { - margin: 0; - - .d-button-label { - @include ellipsis; - } - } - } - } - } - - .names__primary { - font-size: var(--font-up-3); - - .d-icon { - font-size: var(--font-down-2); - } - } - - .names__secondary { - font-size: var(--font-0); - } - - .user-status { - font-size: var(--font-down-1); - } -} - -// styles for user cards only -.user-card { - // badges - .badge-section { - display: grid; - grid-template-columns: repeat(2, 1fr); - - .user-card-badge-link, - .more-user-badges { - display: flex; - box-sizing: border-box; - - a { - width: 100%; - display: flex; - } - } - - .user-badge { - display: flex; - margin: 0; - width: 100%; - - .badge-display-name { - overflow: hidden; - text-overflow: ellipsis; - } - } - } - - .public-user-fields { - max-height: 40vh; - overflow-y: auto; - - @media screen and (height <= 550px) { - max-height: 12vh; - } - - .public-user-field { - @include line-clamp(3); - } - } -} - -// mobile card cloak -.card-cloak { - position: fixed; - top: 0; - left: 0; - z-index: z("mobile-composer") + 1; // 1101 - height: 100vh; - width: 100vw; - background-color: rgb(black, 0.5); - animation: fadein 0.2s; - - @media (prefers-reduced-motion) { - animation-duration: 0s; - } -} diff --git a/app/assets/stylesheets/mobile/components/user-stream-item.scss b/app/assets/stylesheets/mobile/components/user-stream-item.scss deleted file mode 100644 index 7a9412869712b..0000000000000 --- a/app/assets/stylesheets/mobile/components/user-stream-item.scss +++ /dev/null @@ -1,12 +0,0 @@ -// Mobile styles for "user-stream-item" component -.user-stream { - .name { - vertical-align: middle; - } - - .group-member-info { - .name { - vertical-align: inherit; - } - } -} diff --git a/app/assets/stylesheets/mobile/components/welcome-banner.scss b/app/assets/stylesheets/mobile/components/welcome-banner.scss deleted file mode 100644 index 8fc028957b7bb..0000000000000 --- a/app/assets/stylesheets/mobile/components/welcome-banner.scss +++ /dev/null @@ -1,9 +0,0 @@ -.welcome-banner__search-menu { - .search-menu .search-link .badge-category { - display: inline-block; - } - - .search-menu .search-input input.search-term__input { - width: 100%; - } -} diff --git a/app/assets/stylesheets/mobile/components/welcome-header.scss b/app/assets/stylesheets/mobile/components/welcome-header.scss deleted file mode 100644 index 5dc3ae4d83c0f..0000000000000 --- a/app/assets/stylesheets/mobile/components/welcome-header.scss +++ /dev/null @@ -1,16 +0,0 @@ -.login-welcome-header { - box-sizing: border-box; - - .login-title { - font-size: var(--font-up-5); - } - - .login-subheader { - font-size: var(--font-0); - } - - .waving-hand { - width: 30px; - height: 30px; - } -} diff --git a/app/assets/stylesheets/mobile/float-kit/_index.scss b/app/assets/stylesheets/mobile/float-kit/_index.scss deleted file mode 100644 index 49e7912ed2ed4..0000000000000 --- a/app/assets/stylesheets/mobile/float-kit/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import "d-menu"; diff --git a/app/assets/stylesheets/mobile/form-kit/_control-input.scss b/app/assets/stylesheets/mobile/form-kit/_control-input.scss deleted file mode 100644 index d64c1506f39e9..0000000000000 --- a/app/assets/stylesheets/mobile/form-kit/_control-input.scss +++ /dev/null @@ -1,4 +0,0 @@ -.form-kit__before-input, -.form-kit__after-input { - height: 2.25em; -} diff --git a/app/assets/stylesheets/mobile/form-kit/_control-menu.scss b/app/assets/stylesheets/mobile/form-kit/_control-menu.scss deleted file mode 100644 index af7005fda9800..0000000000000 --- a/app/assets/stylesheets/mobile/form-kit/_control-menu.scss +++ /dev/null @@ -1,20 +0,0 @@ -.form-kit { - &__control-menu { - justify-content: space-between; - min-width: var(--form-kit-small-input); - } - - &__control-menu-item { - .btn:focus, - .btn:active { - .discourse-touch & { - color: var(--primary); - background: rgb(0, 0, 0, 0); - } - } - - &:last-of-type .btn { - color: var(--tertiary); - } - } -} diff --git a/app/assets/stylesheets/mobile/form-kit/_control-text.scss b/app/assets/stylesheets/mobile/form-kit/_control-text.scss deleted file mode 100644 index 2386799a66205..0000000000000 --- a/app/assets/stylesheets/mobile/form-kit/_control-text.scss +++ /dev/null @@ -1,3 +0,0 @@ -.form-kit__control-text { - height: 150px; -} diff --git a/app/assets/stylesheets/mobile/form-kit/_field.scss b/app/assets/stylesheets/mobile/form-kit/_field.scss deleted file mode 100644 index eb47a6fd7088d..0000000000000 --- a/app/assets/stylesheets/mobile/form-kit/_field.scss +++ /dev/null @@ -1,4 +0,0 @@ -.form-kit__field .form-kit__container-content, -.form-kit__container { - width: 100% !important; -} diff --git a/app/assets/stylesheets/mobile/form-kit/_index.scss b/app/assets/stylesheets/mobile/form-kit/_index.scss deleted file mode 100644 index 68a507a61eea6..0000000000000 --- a/app/assets/stylesheets/mobile/form-kit/_index.scss +++ /dev/null @@ -1,5 +0,0 @@ -@import "_control-input"; -@import "_control-menu"; -@import "_control-text"; -@import "_field"; -@import "_row"; diff --git a/app/assets/stylesheets/mobile/form-kit/_row.scss b/app/assets/stylesheets/mobile/form-kit/_row.scss deleted file mode 100644 index 47a11f597917e..0000000000000 --- a/app/assets/stylesheets/mobile/form-kit/_row.scss +++ /dev/null @@ -1,5 +0,0 @@ -.form-kit__row { - .form-kit__button { - height: 2.25em; - } -} diff --git a/app/assets/stylesheets/mobile/select-kit/_index.scss b/app/assets/stylesheets/mobile/select-kit/_index.scss deleted file mode 100644 index 2327d21b0fc62..0000000000000 --- a/app/assets/stylesheets/mobile/select-kit/_index.scss +++ /dev/null @@ -1,4 +0,0 @@ -@import "category-drop"; -@import "dropdown-select-box"; -@import "select-kit"; -@import "tag-drop"; diff --git a/app/assets/stylesheets/mobile/select-kit/category-drop.scss b/app/assets/stylesheets/mobile/select-kit/category-drop.scss deleted file mode 100644 index ecbc186a095f6..0000000000000 --- a/app/assets/stylesheets/mobile/select-kit/category-drop.scss +++ /dev/null @@ -1,21 +0,0 @@ -.select-kit { - &.combo-box { - &.category-drop { - .category-drop-header { - font-size: var(--font-0); - - .d-icon { - font-size: var(--font-0); - } - } - - .select-kit-row { - font-weight: normal; - } - - .category-name { - max-width: 70vw; - } - } - } -} diff --git a/app/assets/stylesheets/mobile/select-kit/dropdown-select-box.scss b/app/assets/stylesheets/mobile/select-kit/dropdown-select-box.scss deleted file mode 100644 index 57ed8327ccef1..0000000000000 --- a/app/assets/stylesheets/mobile/select-kit/dropdown-select-box.scss +++ /dev/null @@ -1,20 +0,0 @@ -.select-kit { - &.dropdown-select-box { - .select-kit-collection { - overflow-y: auto; - } - - .select-kit-row { - .svg-icon-title { - width: auto; - height: auto; - } - - .texts { - .name { - font-weight: normal; - } - } - } - } -} diff --git a/app/assets/stylesheets/mobile/select-kit/select-kit.scss b/app/assets/stylesheets/mobile/select-kit/select-kit.scss deleted file mode 100644 index 38a9d9d68f130..0000000000000 --- a/app/assets/stylesheets/mobile/select-kit/select-kit.scss +++ /dev/null @@ -1,15 +0,0 @@ -.select-kit { - &.is-expanded { - z-index: z("dropdown"); - } - - .select-kit-filter { - .filter-input { - font-size: 16px; - } - } - - .select-kit-row { - padding: 0.75em 0.5em; - } -} diff --git a/app/assets/stylesheets/mobile/select-kit/tag-drop.scss b/app/assets/stylesheets/mobile/select-kit/tag-drop.scss deleted file mode 100644 index 36c23e8537f73..0000000000000 --- a/app/assets/stylesheets/mobile/select-kit/tag-drop.scss +++ /dev/null @@ -1,17 +0,0 @@ -.select-kit { - &.combo-box { - &.tag-drop { - .tag-drop-header { - font-size: var(--font-0); - - .d-icon { - font-size: var(--font-0); - } - } - - .select-kit-row { - font-weight: normal; - } - } - } -} diff --git a/app/assets/stylesheets/wcag.scss b/app/assets/stylesheets/wcag.scss index ae00d8a802220..b79b764dcc531 100644 --- a/app/assets/stylesheets/wcag.scss +++ b/app/assets/stylesheets/wcag.scss @@ -12,21 +12,12 @@ html.discourse-no-touch { .btn-default { - .d-icon { - color: var(--primary-medium); - } - - &:hover, - &.btn-hover, - &:focus { - .d-icon { - color: var(--secondary); - } - } + --d-button-default-icon-color: var(--primary-medium); + --d-button-default-icon-color--hover: var(--secondary); } - .btn-primary .d-icon { - color: var(--secondary); + .btn-primary { + --d-button-primary-icon-color: var(--secondary); } .btn-icon.ok, @@ -176,13 +167,6 @@ html { color: var(--primary-medium); } - blockquote { - a, - a:visited { - color: var(--tertiary); - } - } - .meta .d-icon + .filename, .meta .informations { color: var(--secondary); @@ -201,15 +185,6 @@ html { color: var(--primary-high); } - // Post controls - .topic-admin-menu, - .timeline-controls { - .btn .d-icon { - // admin wrenches - color: var(--primary-medium); - } - } - nav.post-controls { .btn.btn-flat { --d-post-control-icon-color: var(--primary-high); diff --git a/app/controllers/admin/api_controller.rb b/app/controllers/admin/api_controller.rb index acb48730665c5..b4c3653367679 100644 --- a/app/controllers/admin/api_controller.rb +++ b/app/controllers/admin/api_controller.rb @@ -35,6 +35,7 @@ def scopes scopes = ApiKeyScope .scope_mappings + .sort_by { |resource, _| resource.to_s } .reduce({}) do |memo, (resource, actions)| memo.tap do |m| m[resource] = actions.map do |k, v| diff --git a/app/controllers/admin/config/logo_controller.rb b/app/controllers/admin/config/logo_controller.rb index 2bbc65d7fed97..37088a0b4672d 100644 --- a/app/controllers/admin/config/logo_controller.rb +++ b/app/controllers/admin/config/logo_controller.rb @@ -20,7 +20,10 @@ def update digest_logo opengraph_image x_summary_large_image - ].map { |setting| { setting_name: setting, value: params[setting] } } + ].filter_map do |setting| + next if SiteSetting.hidden_settings.include?(setting) + { setting_name: setting, value: params[setting] } + end SiteSetting::Update.call(guardian:, params: { settings: }) do on_success { render json: success_json } diff --git a/app/controllers/admin/config/upcoming_changes_controller.rb b/app/controllers/admin/config/upcoming_changes_controller.rb index 9fb58946b8fc0..14afb92ef522d 100644 --- a/app/controllers/admin/config/upcoming_changes_controller.rb +++ b/app/controllers/admin/config/upcoming_changes_controller.rb @@ -4,7 +4,9 @@ class Admin::Config::UpcomingChangesController < Admin::AdminController def index return if !request.xhr? - UpcomingChanges::List.call(service_params) do + filter_statuses = params[:filter_statuses]&.split(",") || [] + + UpcomingChanges::List.call(service_params.merge(options: { filter_statuses: })) do on_success { |upcoming_changes:| render(json: upcoming_changes) } on_failed_policy(:current_user_is_admin) { raise Discourse::InvalidAccess } end diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index bcabd7b9a4659..742a518866adc 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -44,13 +44,17 @@ def new_features end new_features = DiscourseUpdates.new_features(force_refresh:) + new_features_with_permanent_uc = + DiscourseUpdates.merge_new_features_with_upcoming_changes( + new_features&.map { |item| item.symbolize_keys } || [], + ) - if current_user.admin? && most_recent = new_features&.first - DiscourseUpdates.bump_last_viewed_feature_date(current_user.id, most_recent["created_at"]) + if current_user.admin? && most_recent = new_features_with_permanent_uc&.first + DiscourseUpdates.bump_last_viewed_feature_date(current_user.id, most_recent[:created_at]) end data = { - new_features: new_features, + new_features: new_features_with_permanent_uc, has_unseen_features: DiscourseUpdates.has_unseen_features?(current_user.id), release_notes_link: AdminDashboardGeneralData.fetch_cached_stats["release_notes_link"], } diff --git a/app/controllers/admin/email_controller.rb b/app/controllers/admin/email_controller.rb index 59d95aa1863dc..793b8c2167ff8 100644 --- a/app/controllers/admin/email_controller.rb +++ b/app/controllers/admin/email_controller.rb @@ -45,12 +45,19 @@ def send_digest params.require(:username) params.require(:email) user = User.find_by_username(params[:username]) + raise Discourse::InvalidParameters unless user message, skip_reason = - UserNotifications.public_send(:digest, user, since: params[:last_seen_at]) + UserNotifications.public_send( + :digest, + user, + since: params[:last_seen_at], + skip_unsubscribe_links: true, + ) if message message.to = params[:email] + begin Email::Sender.new(message, :digest).send render json: success_json diff --git a/app/controllers/admin/reports_controller.rb b/app/controllers/admin/reports_controller.rb index 40485efc51809..e8763ce5a1bdc 100644 --- a/app/controllers/admin/reports_controller.rb +++ b/app/controllers/admin/reports_controller.rb @@ -15,6 +15,7 @@ def bulk raise Discourse::NotFound unless report_type =~ /\A[a-z0-9\_]+\z/ args = parse_params(report_params) + args[:current_user] = current_user report = nil report = Report.find_cached(report_type, args) if (report_params[:cache]) @@ -51,6 +52,7 @@ def show raise Discourse::NotFound if Report.hidden?(report_type, admin: current_user.admin?) args = parse_params(params) + args[:current_user] = current_user report = nil report = Report.find_cached(report_type, args) if (params[:cache]) diff --git a/app/controllers/admin/screened_ip_addresses_controller.rb b/app/controllers/admin/screened_ip_addresses_controller.rb index 66f83123d47a3..f1a65b82c1942 100644 --- a/app/controllers/admin/screened_ip_addresses_controller.rb +++ b/app/controllers/admin/screened_ip_addresses_controller.rb @@ -3,6 +3,7 @@ class Admin::ScreenedIpAddressesController < Admin::StaffController before_action :can_see_ip before_action :fetch_screened_ip_address, only: %i[update destroy] + before_action :ensure_admin_for_allow_admin, only: %i[create update destroy] def index filter = params[:filter] @@ -54,6 +55,15 @@ def can_see_ip raise Discourse::InvalidAccess.new if !guardian.can_see_ip? end + def ensure_admin_for_allow_admin + return if current_user.admin? + + if params[:action_name].to_s == "allow_admin" || + @screened_ip_address&.action_type == ScreenedIpAddress.actions[:allow_admin] + raise Discourse::InvalidAccess + end + end + def allowed_params params.require(:ip_address) permitted = params.permit(:ip_address, :action_name) diff --git a/app/controllers/admin/search_controller.rb b/app/controllers/admin/search_controller.rb index 4157b86b12eec..a7134c60eade2 100644 --- a/app/controllers/admin/search_controller.rb +++ b/app/controllers/admin/search_controller.rb @@ -6,21 +6,30 @@ class Admin::SearchController < Admin::AdminController def index respond_to do |format| format.json do - render_json_dump( - settings: - SiteSetting.all_settings( - filter_names: params[:filter_names], - filter_area: params[:filter_area], - filter_plugin: params[:plugin], - filter_categories: Array.wrap(params[:categories]), - include_locale_setting: - params[:filter_area].blank? || params[:filter_area] == "localization", - basic_attributes: true, - ), - themes_and_components: - serialize_data(Theme.include_relations.order(:name), BasicThemeSerializer), - reports: Reports::ListQuery.call(admin: current_user.admin?), - ) + Admin::Search::List.call(service_params) do |result| + on_success do |settings:, themes_and_components:, reports:, upcoming_changes:| + themes_and_components_json = + ActiveModel::ArraySerializer.new( + themes_and_components, + each_serializer: BasicThemeSerializer, + scope: guardian, + ).as_json + + render_json_dump( + settings:, + themes_and_components: themes_and_components_json, + reports:, + upcoming_changes:, + ) + end + on_failed_contract do |contract| + render( + json: failed_json.merge(errors: contract.errors.full_messages), + status: :bad_request, + ) + end + on_failed_policy(:current_user_is_admin) { raise Discourse::InvalidAccess } + end end format.html { render body: nil } diff --git a/app/controllers/admin/site_texts_controller.rb b/app/controllers/admin/site_texts_controller.rb index ca78ff89fc58b..1f25f256e2f1c 100644 --- a/app/controllers/admin/site_texts_controller.rb +++ b/app/controllers/admin/site_texts_controller.rb @@ -186,7 +186,7 @@ def record_for(key:, value: nil, locale:) interpolation_keys = I18nInterpolationKeysFinder.find(I18n.overrides_disabled { I18n.t(en_key, locale: :en) }) custom_keys = TranslationOverride.custom_interpolation_keys(en_key) - { id: key, value: value, locale: locale, interpolation_keys: interpolation_keys + custom_keys } + { id: key, value:, locale:, interpolation_keys: (interpolation_keys | custom_keys).sort } end PLURALIZED_REGEX = /(.*)\.(zero|one|two|few|many|other)\z/ diff --git a/app/controllers/admin/staff_action_logs_controller.rb b/app/controllers/admin/staff_action_logs_controller.rb index d5c74530ae2b2..9a999e2a1a0c1 100644 --- a/app/controllers/admin/staff_action_logs_controller.rb +++ b/app/controllers/admin/staff_action_logs_controller.rb @@ -54,8 +54,12 @@ def diff diff_fields.each do |k, v| output << "

#{k}

" - diff = DiscourseDiff.new(v[:prev] || "", v[:cur] || "") - output << diff.side_by_side_markdown + begin + diff = DiscourseDiff.new(v[:prev] || "", v[:cur] || "") + output << diff.side_by_side_markdown + rescue ONPDiff::DiffLimitExceeded + output << "

#{CGI.escapeHTML(I18n.t("errors.diff_too_complex"))}

" + end end render json: { side_by_side: output } diff --git a/app/controllers/admin/themes_controller.rb b/app/controllers/admin/themes_controller.rb index d8dfef37e701e..1aabb1fb5d1ef 100644 --- a/app/controllers/admin/themes_controller.rb +++ b/app/controllers/admin/themes_controller.rb @@ -50,45 +50,7 @@ def generate_key_pair def import @theme = nil - if params[:theme] && params[:theme].content_type == "application/json" - ban_in_allowlist_mode! - - # .dcstyle.json import. Deprecated, but still available to allow conversion - json = JSON.parse(params[:theme].read) - theme = json["theme"] - - @theme = Theme.new(name: theme["name"], user_id: theme_user.id, auto_update: false) - theme["theme_fields"]&.each do |field| - if field["raw_upload"] - begin - tmp = Tempfile.new - tmp.binmode - file = Base64.decode64(field["raw_upload"]) - tmp.write(file) - tmp.rewind - upload = UploadCreator.new(tmp, field["filename"]).create_for(theme_user.id) - field["upload_id"] = upload.id - ensure - tmp.unlink - end - end - - @theme.set_field( - target: field["target"], - name: field["name"], - value: field["value"], - type_id: field["type_id"], - upload_id: field["upload_id"], - ) - end - - if @theme.save - log_theme_change(nil, @theme) - render json: serialize_data(@theme, ThemeSerializer), status: :created - else - render json: @theme.errors, status: :unprocessable_entity - end - elsif remote = params[:remote] + if remote = params[:remote] if remote.length > MAX_REMOTE_LENGTH error = I18n.t("themes.import_error.not_allowed_theme", { repo: remote[0..MAX_REMOTE_LENGTH] }) @@ -401,6 +363,67 @@ def objects_setting_metadata render_serialized(theme_setting, ThemeObjectsSettingMetadataSerializer, root: false) end + def update_source + @theme = Theme.include_relations.find_by(id: params[:id]) + raise Discourse::InvalidParameters.new(:id) unless @theme + raise Discourse::InvalidParameters.new(:remote_theme) unless @theme.remote_theme&.is_git? + + remote_url = params[:remote_url]&.strip + raise Discourse::InvalidParameters.new(:remote_url) if remote_url.blank? + + if remote_url.length > MAX_REMOTE_LENGTH + error = I18n.t("themes.import_error.not_allowed_theme", { repo: remote_url[0..100] }) + return render_json_error(error, status: 422) + end + + begin + guardian.ensure_allowed_theme_repo_import!(remote_url) + rescue Discourse::InvalidAccess + return( + render_json_error I18n.t("themes.import_error.not_allowed_theme", { repo: remote_url }), + status: :forbidden + ) + end + + theme_id = @theme.id + + hijack do + begin + private_key = nil + if params[:public_key].present? + private_key = Discourse.redis.get("ssh_key_#{params[:public_key]}") + return render_json_error I18n.t("themes.import_error.ssh_key_gone") if private_key.blank? + end + + theme = Theme.include_relations.find(theme_id) + remote_theme = theme.remote_theme + original_url = remote_theme.remote_url + original_branch = remote_theme.branch + original_private_key = remote_theme.private_key + + remote_theme.remote_url = remote_url + remote_theme.branch = params[:branch].presence + remote_theme.private_key = private_key if private_key.present? + remote_theme.local_version = nil + remote_theme.remote_version = nil + remote_theme.commits_behind = nil + remote_theme.save! + + remote_theme.update_from_remote + + log_theme_change(nil, theme.reload) + render json: serialize_data(theme, ThemeSerializer), status: :ok + rescue RemoteTheme::ImportError, ActiveRecord::RecordInvalid => e + remote_theme.update!( + remote_url: original_url, + branch: original_branch, + private_key: original_private_key, + ) + render_json_error e.message + end + end + end + private def ban_in_allowlist_mode! diff --git a/app/controllers/admin/user_fields_controller.rb b/app/controllers/admin/user_fields_controller.rb index 7b13d7216e213..2f712c884a177 100644 --- a/app/controllers/admin/user_fields_controller.rb +++ b/app/controllers/admin/user_fields_controller.rb @@ -60,7 +60,8 @@ def update def destroy field = UserField.where(id: params.require(:id)).first - field.destroy if field.present? + field.presence&.destroy + render json: success_json end diff --git a/app/controllers/admin/watched_words_controller.rb b/app/controllers/admin/watched_words_controller.rb index 797829adeb8b0..6a93e4fcdfad6 100644 --- a/app/controllers/admin/watched_words_controller.rb +++ b/app/controllers/admin/watched_words_controller.rb @@ -17,6 +17,10 @@ def create action = WatchedWord.actions[opts[:action_key].to_sym] words = opts.delete(:words) + if action == WatchedWord.actions[:tag] && watched_words_params[:replacement_tags].present? + opts = opts.merge(replacement: resolve_replacement_tags) + end + watched_word_group = WatchedWordGroup.new(action: action) watched_word_group.create_or_update_members(words, opts) @@ -54,10 +58,10 @@ def upload action_key = params[:action_key].to_sym has_replacement = WatchedWord.has_replacement?(action_key) + content = Encodings.to_utf8(File.read(file.tempfile, mode: "rb")) + Scheduler::Defer.later("Upload watched words") do begin - content = Encodings.to_utf8(File.read(file.tempfile, mode: "rb")) - words_updated = 0 CSV.parse(content) do |row| @@ -125,6 +129,32 @@ def clear_all def watched_words_params @watched_words_params ||= - params.permit(:id, :replacement, :action_key, :case_sensitive, :html, words: []) + params.permit( + :id, + :replacement, + :action_key, + :case_sensitive, + :html, + words: [], + replacement_tags: %i[id name], + ) + end + + def resolve_replacement_tags + tags_param = watched_words_params[:replacement_tags] + tags_param = tags_param.values if tags_param.is_a?(ActionController::Parameters) + return if tags_param.blank? + + tag_ids = tags_param.filter_map { |t| t[:id]&.to_i } + new_tag_names = tags_param.select { |t| t[:id].blank? }.filter_map { |t| t[:name] } + + tag_names = Tag.where(id: tag_ids).pluck(:name) + + if new_tag_names.present? + new_tags = DiscourseTagging.find_or_create_tags!(new_tag_names, guardian) + tag_names.concat(new_tags.map(&:name)) + end + + tag_names.join(",") end end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 7d0ee9d719cf0..780ee38bebf0c 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -101,8 +101,12 @@ def immutable_for(duration) def dont_cache_page if !response.headers["Cache-Control"] && response.cache_control.blank? - response.cache_control[:no_cache] = true - response.cache_control[:extras] = ["no-store"] + if SiteSetting.cache_control_bfcache_compatibility + response.cache_control[:no_cache] = true + else + response.cache_control[:no_cache] = true + response.cache_control[:extras] = ["no-store"] + end end response.headers["Discourse-No-Onebox"] = "1" if SiteSetting.login_required end @@ -802,6 +806,11 @@ def redirect_to_login_if_required return render plain: I18n.t("user_api_key.invalid_public_key") end + client = UserApiKeyClient.find_by(public_key: params[:user_api_public_key]) + if client&.auth_redirect.present? && params[:auth_redirect] != client.auth_redirect + return render plain: I18n.t("user_api_key.invalid_auth_redirect") + end + if UserApiKeyClient.invalid_auth_redirect?(params[:auth_redirect]) return render plain: I18n.t("user_api_key.invalid_auth_redirect") end diff --git a/app/controllers/calendar_subscriptions_controller.rb b/app/controllers/calendar_subscriptions_controller.rb new file mode 100644 index 0000000000000..d0c7d1e725823 --- /dev/null +++ b/app/controllers/calendar_subscriptions_controller.rb @@ -0,0 +1,87 @@ +# frozen_string_literal: true + +class CalendarSubscriptionsController < ApplicationController + requires_login + + CLIENT_ID = "calendar-subscriptions" + + before_action :rate_limit_create, only: :create + + def show + render json: { has_subscription: find_calendar_api_key.present?, feeds: feed_names } + end + + def create + revoke_existing_key! + + client = + UserApiKeyClient.find_or_create_by!(client_id: CLIENT_ID) do |c| + c.application_name = I18n.t("calendar_subscriptions.application_name") + end + + scopes = build_scopes + api_key = client.keys.create!(user_id: current_user.id, scopes: scopes) + raw_key = api_key.key + + render json: { key: raw_key, urls: build_urls(raw_key) } + end + + def destroy + revoke_existing_key! + head :no_content + end + + private + + def find_calendar_api_key + UserApiKey + .active + .joins(:client) + .where(user_id: current_user.id, user_api_key_clients: { client_id: CLIENT_ID }) + .first + end + + def revoke_existing_key! + find_calendar_api_key&.update!(revoked_at: Time.zone.now) + end + + def build_scopes + scope_names = ["bookmarks_calendar"] + plugin_feeds.map { |f| f[:scope] } + all_scopes = UserApiKeyScope.all_scopes + scope_names.uniq.filter_map do |name| + if all_scopes.key?(name.to_sym) + UserApiKeyScope.new(name: name) + else + Rails.logger.warn("Calendar subscription feed references unknown scope: #{name}. Skipping.") + nil + end + end + end + + def build_urls(raw_key) + base = Discourse.base_url + username = current_user.username_lower + + urls = { bookmarks: "#{base}/u/#{username}/bookmarks.ics?user_api_key=#{raw_key}" } + + plugin_feeds.each do |feed| + urls[feed[:name].to_sym] = feed[:url].call(base, current_user, raw_key) + end + + urls + end + + def feed_names + names = ["bookmarks"] + names += plugin_feeds.map { |f| f[:name] } + names + end + + def plugin_feeds + @plugin_feeds ||= DiscoursePluginRegistry.calendar_subscription_feeds + end + + def rate_limit_create + RateLimiter.new(current_user, "calendar-subscriptions-create", 5, 1.minute).performed! + end +end diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index 67aa2de875e0b..1065e77c019a1 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -127,6 +127,22 @@ def reorder render json: success_json end + def types + guardian.ensure_can_create_category! + + counts_by_type = + Discourse + .cache + .fetch(Categories::TypeRegistry::COUNTS_CACHE_KEY, expires_in: 1.hour) do + Categories::TypeRegistry.counts + end + + render json: { + types: Categories::TypeRegistry.list(only_visible: true), + counts: counts_by_type, + } + end + def show guardian.ensure_can_see!(@category) @@ -141,6 +157,7 @@ def show def create guardian.ensure_can_create!(Category) position = category_params.delete(:position) + category_type = params[:category_type] if category_params[:description].present? && category_params[:description].size > MAX_DESCRIPTION_PARAM_LENGTH @@ -166,6 +183,33 @@ def create if @category.save @category.move_to(position.to_i) if position + if category_type.present? && + UpcomingChanges.enabled_for_user?(:enable_simplified_category_creation, current_user) + Categories::Configure.call( + guardian:, + params: { + category_id: @category.id, + category_type:, + site_setting_configuration_values: params[:category_type_site_settings], + category_configuration_values: category_params[:custom_fields], + }, + ) do |result| + on_failed_policy(:type_is_available) do + return( + render json: { + errors: [ + I18n.t( + "category_types.not_available", + type_name: category_type.capitalize, + ), + ], + }, + status: :unprocessable_entity + ) + end + end + end + Scheduler::Defer.later "Log staff action create category" do @staff_action_logger.log_category_creation(@category) end @@ -186,17 +230,49 @@ def update category_params.delete(:position) old_custom_fields = cat.custom_fields.dup - if category_params[:custom_fields] - category_params[:custom_fields].each do |key, value| - if value.present? - cat.custom_fields[key] = value + category_params[:custom_fields]&.each do |key, value| + if value.nil? || value == "" + cat.custom_fields.delete(key) + else + cat.custom_fields[key] = if value.is_a?(TrueClass) || value.is_a?(FalseClass) + value.to_s else - cat.custom_fields.delete(key) + value end end end category_params.delete(:custom_fields) + if UpcomingChanges.enabled_for_user?(:enable_simplified_category_creation, current_user) && + params[:category_type_site_settings].present? + # NOTE: The code in this block is pretty similar to what we are doing in + # configure_site_settings in Categories::Types::Base, however here we + # need to be able to update site settings across all category types for + # the category and it's best to do this in one query rather than + # multiple. + # + # Maybe in future we do something different, but this is a good starting point. + category_type_settings = + params[:category_type_site_settings].permit!.to_h.map do |name, value| + { setting_name: name, value: } + end + + # We do this because we want to allow updating hidden settings for the + # category type, but not other settings. The configuration schema for a + # category type defines which settings it wants to change, so that's a + # good source to use as an allowlist here. + allowed_setting_names = cat.category_type_site_setting_names + SiteSetting::Update.call( + guardian:, + options: { + allow_changing_hidden: allowed_setting_names, + }, + params: { + settings: category_type_settings, + }, + ) + end + # properly null the value so the database constraint doesn't catch us category_params[:email_in] = nil if category_params[:email_in]&.blank? category_params[:minimum_required_tags] = 0 if category_params[:minimum_required_tags]&.blank? @@ -256,6 +332,7 @@ def set_notifications def destroy guardian.ensure_can_delete!(@category) @category.destroy + Discourse.cache.delete(Categories::TypeRegistry::COUNTS_CACHE_KEY) Scheduler::Defer.later "Log staff action delete category" do @staff_action_logger.log_category_deletion(@category) @@ -520,6 +597,7 @@ def category_params end if SiteSetting.content_localization_enabled? + conditional_param_keys << :locale conditional_param_keys << { category_localizations: %i[id locale name description] } end @@ -548,6 +626,7 @@ def category_params :slug, :allow_badges, :topic_template, + :topic_title_placeholder, :description, :sort_order, :sort_ascending, @@ -563,6 +642,8 @@ def category_params :allow_global_tags, :read_only_banner, :default_list_filter, + { topic_posting_review_group_ids: [] }, + { reply_posting_review_group_ids: [] }, *conditional_param_keys, ] @@ -578,6 +659,8 @@ def category_params num_auto_bump_daily require_reply_approval require_topic_approval + topic_posting_review_mode + reply_posting_review_mode ], custom_fields: { }, diff --git a/app/controllers/composer_controller.rb b/app/controllers/composer_controller.rb index 0ddffc5881264..17ded67c5840a 100644 --- a/app/controllers/composer_controller.rb +++ b/app/controllers/composer_controller.rb @@ -124,7 +124,19 @@ def group_reason(group) end def is_user_allowed?(user, user_ids, group_ids) - user_ids.include?(user.id) || user.group_ids.any? { |group_id| group_ids.include?(group_id) } + user_ids.include?(user.id) || + user.group_ids.any? do |group_id| + group_ids.include?(group_id) && visible_group_ids_for_allowed_check.include?(group_id) + end + end + + def visible_group_ids_for_allowed_check + @visible_group_ids_for_allowed_check ||= + if @allowed_names.present? + Group.members_visible_groups(current_user).where(name: @allowed_names).pluck(:id).to_set + else + topic_allowed_group_ids || Set.new + end end def users diff --git a/app/controllers/directory_items_controller.rb b/app/controllers/directory_items_controller.rb index 8cc9ef58a4ad0..f31d8d78fa294 100644 --- a/app/controllers/directory_items_controller.rb +++ b/app/controllers/directory_items_controller.rb @@ -113,7 +113,14 @@ def index if params[:user_field_ids] serializer_opts[:user_custom_field_map] = {} - user_field_ids = params[:user_field_ids]&.split("|")&.map(&:to_i) + allowed_field_ids = + if guardian.is_staff? + UserField.pluck(:id) + else + UserField.public_fields.pluck(:id) + end + + user_field_ids = params[:user_field_ids].split("|").map(&:to_i) & allowed_field_ids user_field_ids.each do |user_field_id| serializer_opts[:user_custom_field_map][ "#{User::USER_FIELD_PREFIX}#{user_field_id}" @@ -145,7 +152,9 @@ def index def set_groups_exclusion @exclude_group_names = params[:exclude_groups].split("|") - @exclude_group_ids = Group.where(name: @exclude_group_names).pluck(:id) + groups = Group.where(name: @exclude_group_names) + groups = groups.select { |g| guardian.can_see?(g) && guardian.can_see_group_members?(g) } + @exclude_group_ids = groups.map(&:id) @users_in_exclude_groups = GroupUser.where(group_id: @exclude_group_ids).pluck(:user_id) end diff --git a/app/controllers/embed_controller.rb b/app/controllers/embed_controller.rb index d58f26160ce95..45a8d861b2be9 100644 --- a/app/controllers/embed_controller.rb +++ b/app/controllers/embed_controller.rb @@ -149,6 +149,8 @@ def count topic_embeds = TopicEmbed.where(embed_url: urls).includes(:topic).references(:topic) topic_embeds.each do |te| + next if te.topic.present? && !guardian.can_see?(te.topic) + url = te.embed_url url = "#{url}#discourse-comments" if params[:embed_url].exclude?(url) if te.topic.present? diff --git a/app/controllers/emojis_controller.rb b/app/controllers/emojis_controller.rb index b490040a894a1..6a35c6faabe38 100644 --- a/app/controllers/emojis_controller.rb +++ b/app/controllers/emojis_controller.rb @@ -7,6 +7,14 @@ def index end def search_aliases - render json: MultiJson.dump(Emoji.search_aliases) + aliases = Emoji.search_aliases + + locale_aliases = Emoji.locale_search_aliases(I18n.locale) + if locale_aliases + aliases = + aliases.merge(locale_aliases) { |_key, base_val, locale_val| (base_val + locale_val).uniq } + end + + render json: MultiJson.dump(aliases) end end diff --git a/app/controllers/export_csv_controller.rb b/app/controllers/export_csv_controller.rb index c412a64f6475f..6ba212b7d5d29 100644 --- a/app/controllers/export_csv_controller.rb +++ b/app/controllers/export_csv_controller.rb @@ -7,7 +7,7 @@ class ExportCsvController < ApplicationController def export_entity entity = export_params[:entity] entity_id = params.dig(:args, :export_user_id)&.to_i if entity == "user_archive" - guardian.ensure_can_export_entity!(entity, entity_id) + guardian.ensure_can_export_entity!(entity, entity_id, export_params[:args]) raise Discourse::InvalidParameters.new(:entity) unless entity.is_a?(String) && entity.size < 100 (export_params[:args] || {}).each do |key, value| diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 257332b84106e..79456108a0a77 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -282,7 +282,7 @@ def members raise Discourse::InvalidParameters.new(:offset) if offset < 0 - dir = (params[:asc] && params[:asc].present?) ? "ASC" : "DESC" + dir = params[:asc].to_s == "true" ? "ASC" : "DESC" order = "NOT group_users.owner" if params[:requesters] @@ -387,7 +387,9 @@ def add_members end end - guardian.ensure_can_invite_to_forum!([group]) if emails.present? + if emails.present? && !guardian.can_invite_to_forum?([group]) + return render_json_error(I18n.t("groups.errors.cannot_add_emails")) + end if users.empty? && emails.empty? raise Discourse::InvalidParameters.new(I18n.t("groups.errors.usernames_or_emails_required")) @@ -411,17 +413,18 @@ def add_members ) else notify = params[:notify_users]&.to_s == "true" + uniq_users = users.uniq - uniq_users.each { |user| add_user_to_group(group, user, notify) } + add_users_to_group(group, uniq_users, notify) + + group_ids = [group.id] + + skip_email = params[:skip_email].to_s == "true" + skip_email ||= params.key?(:notify_users) && !notify emails.each do |email| begin - Invite.generate( - current_user, - email: email, - group_ids: [group.id], - skip_email: params[:skip_email].to_s == "true", - ) + Invite.generate(current_user, email:, group_ids:, skip_email:) rescue RateLimiter::LimitExceeded => e return( render_json_error( @@ -476,7 +479,7 @@ def join raise Discourse::InvalidAccess unless group.public_admission return if group.users.exists?(id: current_user.id) - add_user_to_group(group, current_user) + add_users_to_group(group, [current_user]) end def handle_membership_request @@ -569,23 +572,25 @@ def remove_member raise Discourse::InvalidParameters.new("user_ids or usernames or user_emails must be present") end - removed_users = [] - skipped_users = [] + removed_user_ids = GroupManager.new(group).remove(users.map(&:id)) + GroupActionLogger.new(current_user, group).bulk_log_remove_users_from_group(removed_user_ids) + + removed_usernames = [] + skipped_usernames = [] users.each do |user| - if group.remove(user) - removed_users << user.username - GroupActionLogger.new(current_user, group).log_remove_user_from_group(user) + if removed_user_ids.include?(user.id) + removed_usernames << user.username else if group.users.exclude? user - skipped_users << user.username + skipped_usernames << user.username else raise Discourse::InvalidParameters end end end - render json: success_json.merge!(usernames: removed_users, skipped_usernames: skipped_users) + render json: success_json.merge!(usernames: removed_usernames, skipped_usernames:) end def leave @@ -610,6 +615,9 @@ def request_membership group = find_group(:name) + raise Discourse::InvalidAccess unless group.allow_membership_requests? + raise Discourse::InvalidAccess if group.users.exists?(id: current_user.id) + begin GroupRequest.create!(group: group, user: current_user, reason: params[:reason]) rescue ActiveRecord::RecordNotUnique @@ -653,10 +661,10 @@ def set_notifications user_id = current_user.id user_id = params[:user_id] || user_id if guardian.is_staff? - GroupUser - .where(group_id: group.id) - .where(user_id: user_id) - .update_all(notification_level: notification_level) + group_user = GroupUser.find_by(group_id: group.id, user_id: user_id) + raise Discourse::InvalidParameters.new(:user_id) if group_user.blank? + + group_user.update!(notification_level: notification_level) render json: success_json end @@ -724,13 +732,21 @@ def test_email_settings params.require(:password) group = Group.find(params[:group_id]) - guardian.ensure_can_edit!(group) + guardian.ensure_can_admin_group!(group) RateLimiter.new(current_user, "group_test_email_settings", 5, 1.minute).performed! settings = params.except(:name, :protocol) email_host = params[:host] + begin + FinalDestination::SSRFDetector.lookup_and_filter_ips(email_host) + rescue FinalDestination::SSRFDetector::DisallowedIpError + raise Discourse::InvalidParameters.new(I18n.t("email_settings.invalid_host")) + rescue FinalDestination::SSRFDetector::LookupFailedError + raise Discourse::InvalidParameters.new(I18n.t("email_settings.host_resolve_failed")) + end + if params[:protocol] != "smtp" raise Discourse::InvalidParameters.new("Valid protocol to test is smtp") end @@ -771,14 +787,13 @@ def can_not_modify_automatic private - def add_user_to_group(group, user, notify = false) - group.add(user) - GroupActionLogger.new(current_user, group).log_add_user_to_group(user) - group.notify_added_to_group(user) if notify - rescue ActiveRecord::RecordNotUnique - # Under concurrency, we might attempt to insert two records quickly and hit a DB - # constraint. In this case we can safely ignore the error and act as if the user - # was added to the group. + def add_users_to_group(group, users, notify = false) + user_ids = users.map(&:id) + added_user_ids = GroupManager.new(group).add(user_ids) + GroupActionLogger.new(current_user, group).bulk_log_add_users_to_group(added_user_ids) + if notify && added_user_ids.present? + Jobs.enqueue(:notify_users_added_to_group, user_ids: added_user_ids, group_id: group.id) + end end def group_params(automatic: false) @@ -795,7 +810,6 @@ def group_params(automatic: false) if !automatic attributes.push( - :title, :allow_membership_requests, :full_name, :public_exit, @@ -818,6 +832,7 @@ def group_params(automatic: false) :email_username, :email_password, :email_from_alias, + :title, :primary_group, :name, :grant_trust_level, diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb index e0c2c15a3e5e4..5df6cf2ff795a 100644 --- a/app/controllers/invites_controller.rb +++ b/app/controllers/invites_controller.rb @@ -3,6 +3,8 @@ require "csv" class InvitesController < ApplicationController + ALLOWED_BULK_INVITE_COLUMNS = %w[email groups topic_id locale] + requires_login only: %i[ create create_multiple @@ -208,6 +210,8 @@ def update guardian.ensure_can_invite_to!(topic) end + invite.topics.each { |t| guardian.ensure_can_invite_to!(t) } if !params.has_key?(:topic_id) + if params[:group_ids].present? || params[:group_names].present? groups = Group.lookup_groups(group_ids: params[:group_ids], group_names: params[:group_names]) end @@ -430,8 +434,8 @@ def perform_accept_invitation end def destroy_all_expired - guardian.ensure_can_destroy_all_invites! user = fetch_user_from_params + guardian.ensure_can_destroy_all_invites!(user) Invite .where(invited_by: user) @@ -490,19 +494,29 @@ def upload_csv csv_header = nil invites = [] + valid_columns = nil CSV.foreach(file.tempfile, encoding: "bom|utf-8") do |row| # Try to extract a CSV header, if it exists if csv_header.nil? if row[0] == "email" csv_header = row + valid_columns = Set.new(ALLOWED_BULK_INVITE_COLUMNS + UserField.pluck(:name)) next else csv_header = %w[email groups topic_id] end end - invites.push(csv_header.zip(row).map.to_h.filter { |k, v| v.present? }) if row[0].present? + if row[0].present? + invite = + csv_header + .zip(row) + .map + .to_h + .filter { |k, v| v.present? && (!valid_columns || valid_columns.include?(k)) } + invites.push(invite) + end break if invites.count >= SiteSetting.max_bulk_invites end @@ -552,11 +566,13 @@ def show_invite(invite) # Show email if the user already authenticated their email different_external_email = false + email_verified_by_authentication = false if server_session[:authentication] auth_result = Auth::Result.from_session_data(server_session[:authentication], user: nil) if invite.email == auth_result.email email = invite.email + email_verified_by_authentication = auth_result.email_valid else different_external_email = true end @@ -585,7 +601,8 @@ def show_invite(invite) info[:different_external_email] = true if different_external_email - if staged_user = User.where(staged: true).with_email(invite.email).first + if (email_verified_by_link || email_verified_by_authentication) && + (staged_user = User.where(staged: true).with_email(invite.email).first) info[:username] = staged_user.username info[:user_fields] = staged_user.user_fields end diff --git a/app/controllers/list_controller.rb b/app/controllers/list_controller.rb index 78148b03f0498..3a370c32b14f0 100644 --- a/app/controllers/list_controller.rb +++ b/app/controllers/list_controller.rb @@ -58,13 +58,12 @@ class ListController < ApplicationController define_method(filter) do |options = nil| list_opts = build_topic_list_options list_opts.merge!(options) if options - user = list_target_user if params[:category].blank? && filter == :latest && !SiteSetting.show_category_definitions_in_topic_lists list_opts[:no_definitions] = true end - list = TopicQuery.new(user, list_opts).public_send("list_#{filter}") + list = TopicQuery.new(current_user, list_opts).public_send("list_#{filter}") if guardian.can_create_shared_draft? && @category.present? if @category.id == SiteSetting.shared_drafts_category.to_i @@ -75,7 +74,7 @@ class ListController < ApplicationController # destination are this category shared_drafts = TopicQuery.new( - user, + current_user, category: SiteSetting.shared_drafts_category, destination_category_id: list_opts[:category], ).list_latest @@ -136,7 +135,7 @@ def filter end end - user = list_target_user + user = current_user list = TopicQuery.new(user, topic_query_opts).list_filter list.more_topics_url = construct_url_with(:next, topic_query_opts) list.prev_topics_url = construct_url_with(:prev, topic_query_opts) @@ -238,13 +237,11 @@ def message_route(action) def latest_feed discourse_expires_in 1.minute - options = { order: "created" }.merge(build_topic_list_options) - @title = "#{SiteSetting.title} - #{I18n.t("rss_description.latest")}" @link = "#{Discourse.base_url}/latest" @atom_link = "#{Discourse.base_url}/latest.rss" @description = I18n.t("rss_description.latest") - @topic_list = TopicQuery.new(nil, options).list_latest + @topic_list = topic_query(nil, order: "created").list_latest render "list", formats: [:rss] end @@ -259,7 +256,7 @@ def top_feed period = params[:period] || SiteSetting.top_page_default_timeframe.to_sym TopTopic.validate_period(period) - @topic_list = TopicQuery.new(nil).list_top_for(period) + @topic_list = topic_query(nil).list_top_for(period) render "list", formats: [:rss] end @@ -272,7 +269,7 @@ def hot_feed @atom_link = "#{Discourse.base_url}/hot.rss" @description = I18n.t("rss_description.hot") - @topic_list = TopicQuery.new(nil).list_hot + @topic_list = topic_query(nil).list_hot render "list", formats: [:rss] end @@ -286,7 +283,7 @@ def category_feed @atom_link = "#{Discourse.base_url_no_prefix}#{@category.url}.rss" @description = "#{I18n.t("topics_in_category", category: @category.name)} #{@category.description}" - @topic_list = TopicQuery.new(current_user).list_new_in_category(@category) + @topic_list = topic_query.list_new_in_category(@category) render "list", formats: [:rss] end @@ -302,7 +299,7 @@ def user_topics_feed @atom_link = "#{target_user.full_url}/activity/topics.rss" @description = I18n.t("rss_description.user_topics", username: target_user.username) - @topic_list = TopicQuery.new(nil, order: "created").public_send("list_topics_by", target_user) + @topic_list = topic_query(nil, order: "created").public_send("list_topics_by", target_user) render "list", formats: [:rss] end @@ -331,7 +328,7 @@ def category_none_top top_options[:per_page] = top_options[:per_page].presence || SiteSetting.topics_per_period_in_top_page - user = list_target_user + user = current_user list = TopicQuery.new(user, top_options).list_top_for(period) list.for_period = period list.more_topics_url = construct_url_with(:next, top_options) @@ -359,7 +356,7 @@ def category_none_top @title = "#{SiteSetting.title} - #{@description}" @link = "#{Discourse.base_url}/top?period=#{period}" @atom_link = "#{Discourse.base_url}/top.rss?period=#{period}" - @topic_list = TopicQuery.new(nil).list_top_for(period) + @topic_list = topic_query(nil).list_top_for(period) render "list", formats: [:rss] end @@ -382,6 +379,10 @@ def prev_page_params private + def topic_query(user = current_user, opts = {}) + TopicQuery.new(user, build_topic_list_options.merge(opts)) + end + def page_params route_params = { format: "json" } @@ -445,14 +446,6 @@ def set_category end end - def list_target_user - if params[:user_id] && guardian.is_staff? - User.find(params[:user_id].to_i) - else - current_user - end - end - def generate_list_for(action, target_user, opts) TopicQuery.new(current_user, opts).public_send("list_#{action}", target_user) end diff --git a/app/controllers/post_action_users_controller.rb b/app/controllers/post_action_users_controller.rb index a9adac60c439e..029266a11b038 100644 --- a/app/controllers/post_action_users_controller.rb +++ b/app/controllers/post_action_users_controller.rb @@ -27,7 +27,9 @@ def index post_actions = DiscoursePluginRegistry.apply_modifier(:post_action_users_list, post_actions, post) - if !guardian.can_see_post_actors?(post.topic, post_action_type_id) + can_see_actors = guardian.can_see_post_actors?(post.topic, post_action_type_id) + + if !can_see_actors raise Discourse::InvalidAccess if current_user.blank? post_actions = post_actions.where(user_id: current_user.id) end @@ -44,7 +46,7 @@ def index ), } - data[:total_rows_post_action_users] = total_count if total_count > page_size + data[:total_rows_post_action_users] = total_count if can_see_actors && total_count > page_size render_json_dump(data) end diff --git a/app/controllers/post_actions_controller.rb b/app/controllers/post_actions_controller.rb index 333f8258ea455..a8a1c27369251 100644 --- a/app/controllers/post_actions_controller.rb +++ b/app/controllers/post_actions_controller.rb @@ -14,7 +14,7 @@ def create current_user, @post, @post_action_type_id, - is_warning: params[:is_warning], + is_warning: ActiveModel::Type::Boolean.new.cast(params[:is_warning]), message: params[:message], take_action: params[:take_action] == "true", flag_topic: params[:flag_topic] == "true", diff --git a/app/controllers/post_readers_controller.rb b/app/controllers/post_readers_controller.rb index a6ff0a1f5e13a..1d5f0a819e8fc 100644 --- a/app/controllers/post_readers_controller.rb +++ b/app/controllers/post_readers_controller.rb @@ -5,6 +5,7 @@ class PostReadersController < ApplicationController def index post = Post.includes(topic: %i[topic_allowed_groups topic_allowed_users]).find(params[:id]) + guardian.ensure_can_see!(post) ensure_can_see_readers!(post) readers = diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 66adcd5e52074..4ad243481f006 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -35,28 +35,9 @@ def markdown_id end def markdown_num - if params[:revision].present? - post_revision = find_post_revision_from_topic_id - render plain: post_revision.modifications[:raw].last - elsif params[:post_number].present? - markdown Post.find_by( - topic_id: params[:topic_id].to_i, - post_number: params[:post_number].to_i, - ) - else - opts = params.slice(:page) - opts[:limit] = MARKDOWN_TOPIC_PAGE_SIZE - topic_view = TopicView.new(params[:topic_id], current_user, opts) - content = topic_view.posts.map { |p| <<~MD } - #{p.user.username} | #{p.updated_at} | ##{p.post_number} - - #{p.raw} - - ------------------------- - - MD - render plain: content.join - end + return render plain: markdown_for_revision if params[:revision].present? + return markdown_for_post if params[:post_number].present? + render plain: markdown_for_topic end def latest @@ -82,6 +63,7 @@ def latest posts = Post .private_posts + .where(post_type: Topic.visible_post_types(current_user)) .order(id: :desc) .includes(topic: :category) .includes(user: %i[primary_group flair_group]) @@ -281,9 +263,13 @@ def update if params.key?(:bypass_bump) || params[:post]&.key?(:bypass_bump) if guardian.can_update_bumped_at? - opts[:bypass_bump] = ActiveModel::Type::Boolean.new.cast( - params[:bypass_bump].presence || params.dig(:post, :bypass_bump), - ) + bypass_bump_value = + if params.key?(:bypass_bump) + params[:bypass_bump] + else + params.dig(:post, :bypass_bump) + end + opts[:bypass_bump] = ActiveModel::Type::Boolean.new.cast(bypass_bump_value) end end @@ -489,20 +475,24 @@ def revisions post = find_post_from_params raise Discourse::NotFound if post.hidden && !guardian.can_view_hidden_post_revisions? - post_revision = find_post_revision_from_params - post_revision_serializer = - PostRevisionSerializer.new(post_revision, scope: guardian, root: false) - render_json_dump(post_revision_serializer) + render_json_dump( + PostRevisionSerializer.new(find_post_revision_from_params, scope: guardian, root: false), + ) end def latest_revision post = find_post_from_params raise Discourse::NotFound if post.hidden && !guardian.can_view_hidden_post_revisions? - post_revision = find_latest_post_revision_from_params - post_revision_serializer = - PostRevisionSerializer.new(post_revision, scope: guardian, root: false) - render_json_dump(post_revision_serializer) + render_json_dump( + PostRevisionSerializer.new( + find_latest_post_revision_from_params, + scope: guardian, + root: false, + ), + ) + rescue ONPDiff::DiffLimitExceeded + render_json_error(I18n.t("errors.diff_too_complex"), status: 422) end def hide_revision @@ -734,7 +724,7 @@ def unhide def deleted_posts params.permit(:offset, :limit) - guardian.ensure_can_see_deleted_posts! + guardian.ensure_can_see_deleted_posts_for_user! user = fetch_user_from_params offset = [params[:offset].to_i, 0].max @@ -835,6 +825,33 @@ def find_post_revision_from_topic_id private + def markdown_for_revision + find_post_revision_from_topic_id.modifications[:raw].last + end + + def markdown_for_post + post = Post.find_by(topic_id: params[:topic_id].to_i, post_number: params[:post_number].to_i) + markdown(post) + end + + def markdown_for_topic + topic_view = + TopicView.new( + params[:topic_id], + current_user, + page: params[:page], + limit: MARKDOWN_TOPIC_PAGE_SIZE, + ) + topic_view.posts.select { |post| guardian.can_see?(post) }.map { |post| <<~MD }.join + #{post.user.username} | #{post.updated_at} | ##{post.post_number} + + #{post.raw} + + ------------------------- + + MD + end + def user_posts(guardian, user_id, opts) # Topic.unscoped is necessary to remove the default deleted_at: nil scope posts = @@ -966,7 +983,11 @@ def create_params end PostRevisor.tracked_topic_fields.each_key do |f| - params.permit(f => []) + if f == :tags + params.permit(tags: %i[id name]) + else + params.permit(f => []) + end result[f] = params[f] if params.has_key?(f) end @@ -1033,7 +1054,14 @@ def signature_for(args) end def display_post(post) - post.revert_to(params[:version].to_i) if params[:version].present? + if params[:version].present? + version = params[:version].to_i + post_revision = PostRevision.find_by(post_id: post.id, number: version + 1) + if post_revision + guardian.ensure_can_see!(post_revision) + post.revert_to(version) + end + end render_post_json(post) end diff --git a/app/controllers/reviewable_claimed_topics_controller.rb b/app/controllers/reviewable_claimed_topics_controller.rb index f454392374d6e..c7bec08e17a12 100644 --- a/app/controllers/reviewable_claimed_topics_controller.rb +++ b/app/controllers/reviewable_claimed_topics_controller.rb @@ -23,9 +23,9 @@ def create def destroy topic = Topic.with_deleted.find_by(id: params[:id]) automatic = params[:automatic] == "true" - raise Discourse::NotFound if topic.blank? - - guardian.ensure_can_claim_reviewable_topic!(topic, automatic) + if topic.blank? || !guardian.can_claim_reviewable_topic?(topic, automatic) + raise Discourse::NotFound + end deleted_count = ReviewableClaimedTopic.where(topic_id: topic.id).delete_all if deleted_count > 0 topic.reviewables.find_each { |reviewable| reviewable.log_history(:unclaimed, current_user) } diff --git a/app/controllers/reviewable_notes_controller.rb b/app/controllers/reviewable_notes_controller.rb index c2a9cf4168c9c..7bd21f463dfa5 100644 --- a/app/controllers/reviewable_notes_controller.rb +++ b/app/controllers/reviewable_notes_controller.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true class ReviewableNotesController < ApplicationController - before_action :find_reviewable before_action :ensure_can_see + before_action :find_reviewable def create note = @reviewable.reviewable_notes.build(note_params) @@ -30,7 +30,7 @@ def destroy private def find_reviewable - @reviewable = Reviewable.find(params[:reviewable_id]) + @reviewable = Reviewable.viewable_by(current_user, preload: false).find(params[:reviewable_id]) end def note_params diff --git a/app/controllers/reviewables_controller.rb b/app/controllers/reviewables_controller.rb index e6d741c939e31..bee12fde0a19a 100644 --- a/app/controllers/reviewables_controller.rb +++ b/app/controllers/reviewables_controller.rb @@ -241,6 +241,12 @@ def update begin if reviewable.update_fields(edit_params, current_user, version: params[:version].to_i) result = edit_params.merge(version: reviewable.version) + if reviewable.is_a?(ReviewableQueuedPost) && reviewable.payload.present? + result[:cooked] = PrettyText.cook(reviewable.payload["raw"]) if reviewable.payload["raw"] + if reviewable.payload["title"] + result[:fancy_title] = ERB::Util.html_escape(reviewable.payload["title"]) + end + end render json: result else render_json_error(reviewable.errors) diff --git a/app/controllers/static_controller.rb b/app/controllers/static_controller.rb index 30dd80fa227f1..6fc7454974c5f 100644 --- a/app/controllers/static_controller.rb +++ b/app/controllers/static_controller.rb @@ -60,7 +60,8 @@ def show return redirect_to path("/") end - if SiteSetting.login_required? && current_user.nil? && %w[faq guidelines].include?(params[:id]) + if SiteSetting.login_required? && current_user.nil? && + %w[faq guidelines rules conduct].include?(params[:id]) return redirect_to path("/login") end @@ -152,12 +153,21 @@ def enter params.delete(:password) destination = extract_redirect_param - allow_other_host = false + # We need this to redirect the user back when Discourse Connect Provider is used. if cookies[:sso_destination_url] - destination = cookies.delete(:sso_destination_url) - allow_other_host = true + sso_url = cookies.delete(:sso_destination_url) + + begin + uri = URI(sso_url) + if valid_sso_redirect_uri?(uri) + destination = sso_url + allow_other_host = true + end + rescue URI::Error, ArgumentError + # Invalid URI, ignore and use default destination + end end destination = path(destination) if destination == "/" @@ -269,6 +279,20 @@ def service_worker_asset protected + def valid_sso_redirect_uri?(uri) + return false unless SiteSetting.enable_discourse_connect_provider + return false if uri.host.blank? + + provider_domains = + SiteSetting + .discourse_connect_provider_secrets + .split("\n") + .map { |row| row.split("|", 2).first } + .compact + + provider_domains.any? { |domain| WildcardDomainChecker.check_domain(domain, uri.host) } + end + def serve_asset(suffix = nil) path = File.expand_path(Rails.root + "public/assets/#{params[:path]}#{suffix}") @@ -284,6 +308,12 @@ def serve_asset(suffix = nil) begin if GlobalSetting.fallback_assets_path.present? path = File.expand_path("#{GlobalSetting.fallback_assets_path}/#{params[:path]}#{suffix}") + + # fallback path should not escape the fallback directory with /../ + unless path.start_with?(File.expand_path(GlobalSetting.fallback_assets_path)) + raise Discourse::NotFound + end + response.headers["Last-Modified"] = File.ctime(path).httpdate else raise diff --git a/app/controllers/stylesheets_controller.rb b/app/controllers/stylesheets_controller.rb index a1a077eec0df3..a5f9740613c28 100644 --- a/app/controllers/stylesheets_controller.rb +++ b/app/controllers/stylesheets_controller.rb @@ -24,7 +24,10 @@ def color_scheme params.require("id") params.permit("theme_id") - manager = Stylesheet::Manager.new(theme_id: params[:theme_id]) + theme_id = params[:theme_id]&.to_i + theme_id = nil if theme_id && !guardian.allow_themes?([theme_id]) + + manager = Stylesheet::Manager.new(theme_id: theme_id) stylesheet = manager.color_scheme_stylesheet_details(params[:id], fallback_to_base: true) render json: stylesheet diff --git a/app/controllers/tag_groups_controller.rb b/app/controllers/tag_groups_controller.rb index 0da4fab14b653..5257f6ba512cd 100644 --- a/app/controllers/tag_groups_controller.rb +++ b/app/controllers/tag_groups_controller.rb @@ -67,9 +67,15 @@ def update guardian.ensure_can_admin_tag_groups! old_data = TagGroupSerializer.new(@tag_group).to_json(root: false) json_result(@tag_group, serializer: TagGroupSerializer) do |tag_group| - @tag_group.update(tag_groups_params) - new_data = TagGroupSerializer.new(@tag_group).to_json(root: false) - StaffActionLogger.new(current_user).log_tag_group_change(@tag_group.name, old_data, new_data) + if @tag_group.update(tag_groups_params) + new_data = TagGroupSerializer.new(@tag_group).to_json(root: false) + StaffActionLogger.new(current_user).log_tag_group_change( + @tag_group.name, + old_data, + new_data, + ) + true + end end end diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index 3c499f8a7e008..f6a672c7e9f3b 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -10,8 +10,6 @@ def self.show_methods Discourse.anonymous_filters.map { |f| :"show_#{f}" } end - before_action :ensure_visible, only: [:show, :info, *show_methods] - requires_login except: [:index, :show, :tag_feed, :search, :info, *show_methods] skip_before_action :check_xhr, only: [:tag_feed, :show, :index, *show_methods] @@ -212,6 +210,9 @@ def list @list.more_topics_url = construct_url_with(:next, list_opts) @list.prev_topics_url = construct_url_with(:prev, list_opts) @rss = "tag" + @rss_description = "tag" + @rss_link = "#{@tag.full_url}.rss" if @tag + @title = I18n.t("rss_by_tag", tag: tag_params.join(" & ")) @description_meta = Tag.where(name: @tag_name).pick(:description) || @title @@ -288,7 +289,7 @@ def update previous_tag_name = @tag.name @tag.name = DiscourseTagging.clean_tag(new_tag_name) if new_tag_name.present? - @tag.description = new_tag_description if new_tag_description.present? + @tag.description = new_tag_description if new_tag.has_key?(:description) if @tag.save if @tag.name != previous_tag_name @@ -518,7 +519,7 @@ def personal_messages end def create_synonyms - guardian.ensure_can_edit_tag! + guardian.ensure_can_edit_tag!(@tag) # frontend uses form data tags_param = params[:tags].try(:values) || params[:tags] @@ -559,13 +560,21 @@ def destroy_synonym private def fetch_tag(raise_not_found: true) - @tag = - if params[:tag_id].present? - Tag.find_by(id: params[:tag_id]) - elsif params[:tag_name].present? - Tag.find_by_name(params[:tag_name].force_encoding("UTF-8")) + if params[:tag_id].present? + # Try finding by ID first + @tag = Tag.find_by(id: params[:tag_id]) + + # For numeric tag names on legacy routes, fallback to finding by name + if !@tag + @tag = Tag.find_by_name(params[:tag_id]) + # Track that we found the tag by name, not ID, to avoid redirecting + @tag_found_by_name = true if @tag end - raise Discourse::NotFound if raise_not_found && @tag.nil? + elsif params[:tag_name].present? + @tag = Tag.find_by_name(params[:tag_name].force_encoding("UTF-8")) + end + + raise Discourse::NotFound if @tag ? !guardian.can_see_tag?(@tag) : raise_not_found @tag end @@ -598,6 +607,8 @@ def should_redirect_tag?(tag) return false if request.format.json? # intersection routes use tag_name, not tag_slug/tag_id - don't redirect return false if params[:additional_tag_names].present? + # don't redirect if we found the tag by name (numeric tag name on legacy route) + return false if @tag_found_by_name if params[:tag_id].present? # new format - redirect if slug doesn't match @@ -612,12 +623,6 @@ def ensure_tags_enabled raise Discourse::NotFound unless SiteSetting.tagging_enabled? end - def ensure_visible - if DiscourseTagging.hidden_tag_names(guardian).include?(params[:tag_name]) - raise Discourse::NotFound - end - end - def self.tag_counts_json(tags, guardian) show_pm_tags = guardian.can_tag_pms? target_tags = Tag.where(id: tags.map(&:target_tag_id).compact.uniq).select(:id, :name, :slug) diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index 1829cd9bcb3a8..39465fe8e91c3 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -118,7 +118,15 @@ def show return redirect_to_correct_topic(topic, opts[:post_number]) if topic end - raise ex + topic_id = params[:topic_id] || params[:id] + original_path = + if params[:slug].present? && topic_id.present? + "/t/#{params[:slug]}/#{topic_id}" + else + request.path + end + + raise Discourse::NotFound.new(ex.message, check_permalinks: true, original_path:) rescue Discourse::NotLoggedIn => ex raise(SiteSetting.detailed_404 ? ex : Discourse::NotFound) rescue Discourse::InvalidAccess => ex @@ -167,7 +175,8 @@ def show discourse_expires_in 1.minute - if slugs_do_not_match || (!request.format.json? && params[:slug].nil?) + if slugs_do_not_match || + (!request.format.json? && params[:slug].nil? && @topic_view.topic.slug.present?) redirect_to_correct_topic(@topic_view.topic, opts[:post_number]) return end @@ -303,6 +312,7 @@ def excerpts @posts = Post + .secured(guardian) .where(hidden: false, deleted_at: nil, topic_id: @topic.id) .where("posts.id in (?)", post_ids) .joins("LEFT JOIN users u on u.id = posts.user_id") @@ -407,16 +417,17 @@ def update return render_json_error(I18n.t("category.errors.not_found")) end - if category && - topic_tags = (params[:tags] || topic.tags.pluck(:name)).reject { |c| c.empty? } - if topic_tags.present? + if category + topic_tag_names = resolve_tag_names(topic) + + if topic_tag_names.present? allowed_tags = DiscourseTagging.filter_allowed_tags(guardian, category: category).map(&:name) - invalid_tags = topic_tags - allowed_tags + invalid_tags = topic_tag_names - allowed_tags # Do not raise an error on a topic's hidden tags when not modifying tags - if params[:tags].blank? + if !params.has_key?(:tags) invalid_tags.each do |tag_name| if DiscourseTagging.hidden_tag_names.include?(tag_name) invalid_tags.delete(tag_name) @@ -466,6 +477,9 @@ def update changes.delete(:tags) end end + + # resolve to name strings before passing to PostRevisor + changes[:tags] = resolve_tag_names(topic) if changes.has_key?(:tags) elsif topic.tags.empty? changes.delete(:tags) end @@ -494,7 +508,12 @@ def update_tags topic = Topic.find_by(id: params[:topic_id]) guardian.ensure_can_edit_tags!(topic) - tags = params[:tags] || [] + tags = + if params[:tags].is_a?(ActionController::Parameters) + params[:tags].values + else + params[:tags] || [] + end if tags.present? && tags.first.is_a?(String) Discourse.deprecate( @@ -504,34 +523,37 @@ def update_tags ) end - success = - PostRevisor.new(topic.first_post, topic).revise!( - current_user, - { tags: }, - validate_post: false, - ) + revisor = PostRevisor.new(topic.first_post, topic) + revised = revisor.revise!(current_user, { tags: }, validate_post: false) - success ? render_serialized(topic, BasicTopicSerializer) : render_json_error(topic) + if revised || topic.errors.blank? + render_serialized(topic, BasicTopicSerializer) + else + render_json_error(topic) + end end def feature_stats - params.require(:category_id) - category_id = params[:category_id].to_i + category_id = params[:category_id]&.to_i visible_topics = Topic.listable_topics.visible.secured(guardian) - render json: { - pinned_in_category_count: - visible_topics - .where(category_id: category_id) - .where(pinned_globally: false) - .where.not(pinned_at: nil) - .count, - pinned_globally_count: - visible_topics.where(pinned_globally: true).where.not(pinned_at: nil).count, - banner_count: - Topic.listable_topics.secured(guardian).where(archetype: Archetype.banner).count, - } + result = { + pinned_globally_count: + visible_topics.where(pinned_globally: true).where.not(pinned_at: nil).count, + banner_count: + Topic.listable_topics.secured(guardian).where(archetype: Archetype.banner).count, + } + + if category_id + result[:pinned_in_category_count] = visible_topics + .where(category_id: category_id) + .where(pinned_globally: false) + .where.not(pinned_at: nil) + .count + end + + render json: result end def status @@ -611,6 +633,12 @@ def timer guardian.ensure_can_delete!(topic) if TopicTimer.destructive_types.values.include?(status_type) + if status_type == TopicTimer.types[:publish_to_category] && params[:time].present? + category = Category.find_by(id: params[:category_id]) + raise Discourse::NotFound if !category + raise Discourse::InvalidAccess if !guardian.can_create_topic_on_category?(category) + end + options = { by_user: current_user, based_on_last_post: based_on_last_post } options.merge!(category_id: params[:category_id]) if params[:category_id].present? @@ -958,6 +986,11 @@ def move_posts end end + if params[:destination_topic_id].present? + destination_topic = Topic.find_by(id: params[:destination_topic_id]) + guardian.ensure_can_create_post_on_topic!(destination_topic) + end + hijack do destination_topic = move_posts_to_destination(topic) render_topic_changes(destination_topic) @@ -1093,6 +1126,8 @@ def bulk :notification_level_id, :message, :silent, + :pinned_globally, + :pinned_until, *DiscoursePluginRegistry.permitted_bulk_action_parameters, tag_ids: [], tags: [], @@ -1100,8 +1135,10 @@ def bulk .to_h .symbolize_keys - if operation.has_key? :silent - operation[:silent] = ActiveModel::Type::Boolean.new.cast(operation[:silent]) + %i[silent pinned_globally].each do |key| + operation[key] = ActiveModel::Type::Boolean.new.cast(operation[key]) if operation.has_key?( + key, + ) end raise ActionController::ParameterMissing.new(:operation_type) if operation[:type].blank? @@ -1112,6 +1149,8 @@ def bulk result = { topic_ids: changed_topic_ids } result[:errors] = operator.errors if operator.errors.present? render_json_dump result + rescue Discourse::InvalidParameters => ex + render_json_error(ex, status: 400) end end @@ -1282,6 +1321,30 @@ def set_slow_mode private + def resolve_tag_names(topic) + @resolved_tag_names ||= + if params[:tags].present? + incoming = params[:tags] + if incoming.first.is_a?(String) + Discourse.deprecate( + "Passing tag names as strings to the tags param is deprecated, use tag objects ({id, name}) instead", + since: "2026.01", + drop_from: "2026.07", + ) + incoming.reject(&:empty?) + else + ids = incoming.filter_map { |t| t[:id]&.to_i } + names = incoming.filter_map { |t| t[:id].blank? && t[:name].presence } + names += Tag.visible(guardian).where(id: ids).pluck(:name) if ids.present? + names + end + elsif params.has_key?(:tags) + [] + else + topic.tags.pluck(:name) + end + end + def allow_embed_mode return if params[:embed_mode].blank? return unless SiteSetting.embed_full_app diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index 5b9808a46972f..a4ca7f4f73378 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -193,7 +193,12 @@ def show_secure # if the upload is still secure, that means the ACL is probably still # private, so we don't want to go to the CDN url just yet otherwise we # will get a 403. if the upload is not secure we assume the ACL is public - signed_secure_url = Discourse.store.signed_url_for_path(path_with_ext) + signed_secure_url = + Discourse.store.signed_url_for_path( + path_with_ext, + filename: upload.original_filename, + include_content_disposition: true, + ) redirect_to upload.secure? ? signed_secure_url : Discourse.store.cdn_url(upload.url), allow_other_host: true end @@ -219,6 +224,8 @@ def handle_secure_upload_request(upload, path_with_ext = nil) path_with_ext, expires_in: SiteSetting.s3_presigned_get_url_expires_after_seconds, force_download: force_download?, + filename: upload.original_filename, + include_content_disposition: true, ), allow_other_host: true end diff --git a/app/controllers/user_actions_controller.rb b/app/controllers/user_actions_controller.rb index ebad42936c4c0..32c1245a632e3 100644 --- a/app/controllers/user_actions_controller.rb +++ b/app/controllers/user_actions_controller.rb @@ -13,8 +13,11 @@ def index action_types = (user_actions_params[:filter] || "").split(",").map(&:to_i) limit = user_actions_params.fetch(:limit, 30).to_i - raise Discourse::NotFound unless guardian.can_see_profile?(user) - raise Discourse::NotFound unless guardian.can_see_user_actions?(user, action_types) + ensure_user_actions_visible!(user, action_types) + + if action_types.empty? && !guardian.can_see_user_actions?(user, UserAction.private_types) + action_types = UserAction.types.values - UserAction.private_types + end opts = { user_id: user.id, @@ -42,11 +45,24 @@ def index def show params.require(:id) - render_serialized(UserAction.stream_item(params[:id], guardian), UserActionSerializer) + stream_item = UserAction.stream_item(params[:id], guardian) + raise Discourse::NotFound if stream_item.blank? + + user = User.find_by(id: stream_item.target_user_id) + raise Discourse::NotFound if user.blank? + + ensure_user_actions_visible!(user, [stream_item.action_type]) + + render_serialized(stream_item, UserActionSerializer) end private + def ensure_user_actions_visible!(user, action_types) + raise Discourse::NotFound unless guardian.can_see_profile?(user) + raise Discourse::NotFound unless guardian.can_see_user_actions?(user, action_types) + end + def user_actions_params @user_actions_params ||= params.permit(:username, :filter, :offset, :acting_username, :limit) end diff --git a/app/controllers/user_api_keys_controller.rb b/app/controllers/user_api_keys_controller.rb index 3761b21853352..3e1496aa61526 100644 --- a/app/controllers/user_api_keys_controller.rb +++ b/app/controllers/user_api_keys_controller.rb @@ -22,6 +22,7 @@ def new find_client require_client_params validate_params + validate_auth_redirect unless current_user cookies[:destination_url] = request.fullpath @@ -51,7 +52,7 @@ def new nil else uri = URI.parse(@auth_redirect) - if [80, 443].include?(uri.port) + if uri.port.nil? || [80, 443].include?(uri.port) uri.host else uri.host + ":" + uri.port.to_s diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 5eed4da40b890..528d412b1f589 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -122,7 +122,7 @@ def failure error = provider.present? ? "generic_with_provider" : "generic_without_provider" end - flash[:error] = I18n.t("login.omniauth_error.#{error}", provider:).html_safe + flash[:error] = I18n.t("login.omniauth_error.#{error}", provider:) render "failure" end @@ -158,8 +158,8 @@ def invite_required? if SiteSetting.invite_only? path = Discourse.route_for(@origin) return true unless path - return true if path[:controller] != "invites" && path[:action] != "show" - !Invite.exists?(invite_key: path[:id]) + return true if path[:controller] != "invites" || path[:action] != "show" + !Invite.find_by(invite_key: path[:id])&.redeemable? end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 3fb03ec57a384..d3726926183db 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -30,6 +30,7 @@ class UsersController < ApplicationController register_passkey rename_passkey delete_passkey + update_security_key feature_topic clear_featured_topic bookmarks @@ -40,6 +41,11 @@ class UsersController < ApplicationController reset_recent_searches user_menu_bookmarks user_menu_messages + update_primary_email + destroy_email + badge_title + remove_password + private_message_topic_tracking_state toggle_anon ] @@ -78,8 +84,8 @@ class UsersController < ApplicationController create_second_factor_security_key register_passkey delete_passkey + update_security_key ] - before_action :respond_to_suspicious_request, only: [:create] # we need to allow account creation with bad CSRF tokens, if people are caching, the CSRF token on the @@ -1928,10 +1934,17 @@ def bookmarks end end format.ics do + @calendar_name = + I18n.t("calendar_subscriptions.bookmarks_feed_name", site_title: SiteSetting.title) + + bookmark_query = Bookmark.with_reminders.where(user_id: user.id) + + after_param = params[:after].presence || 3.months.ago.iso8601 + after_date = after_param == "now" ? Time.current : after_param.to_datetime + bookmark_query = bookmark_query.where("reminder_at >= ?", after_date) + @bookmark_reminders = - Bookmark - .with_reminders - .where(user_id: user.id) + bookmark_query .order(:reminder_at) .map do |bookmark| bookmark.registered_bookmarkable.serializer.new( diff --git a/app/controllers/webhooks_controller.rb b/app/controllers/webhooks_controller.rb index 763c31d07aa22..0b13d9a6d0aa0 100644 --- a/app/controllers/webhooks_controller.rb +++ b/app/controllers/webhooks_controller.rb @@ -22,9 +22,7 @@ def sendgrid if SiteSetting.sendgrid_verification_key.present? return signature_failure if !valid_sendgrid_signature? else - Rails.logger.warn( - "Received a Sendgrid webhook, but no verification key has been configured. This is unsafe behaviour and will be disallowed in the future.", - ) + return signature_failure end events = params["_json"] || [params] @@ -55,9 +53,7 @@ def mailjet if SiteSetting.mailjet_webhook_token.present? return signature_failure if !valid_mailjet_token? else - Rails.logger.warn( - "Received a Mailjet webhook, but no token has been configured. This is unsafe behaviour and will be disallowed in the future.", - ) + return signature_failure end events = params["_json"] || [params] @@ -79,6 +75,12 @@ def mailjet def mailpace # see https://docs.mailpace.com/guide/webhooks#email-events + if SiteSetting.mailpace_webhook_token.present? + return signature_failure if !valid_mailpace_token? + else + return signature_failure + end + message_id = Email::MessageIdService.message_id_clean(params["payload"]["message_id"]) to_address = params["payload"]["to"] status = params["payload"]["status"] @@ -97,9 +99,7 @@ def mandrill if SiteSetting.mandrill_authentication_key.present? return signature_failure if !valid_mandrill_signature? else - Rails.logger.warn( - "Received a Mandrill webhook, but no authentication key has been configured. This is unsafe behaviour and will be disallowed in the future.", - ) + return signature_failure end JSON @@ -130,9 +130,7 @@ def postmark if SiteSetting.postmark_webhook_token.present? return signature_failure if !valid_postmark_token? else - Rails.logger.warn( - "Received a Postmark webhook, but no token has been configured. This is unsafe behaviour and will be disallowed in the future.", - ) + return signature_failure end # see https://postmarkapp.com/developer/webhooks/bounce-webhook#bounce-webhook-data @@ -155,9 +153,7 @@ def sparkpost if SiteSetting.sparkpost_webhook_token.present? return signature_failure if !valid_sparkpost_token? else - Rails.logger.warn( - "Received a Sparkpost webhook, but no token has been configured. This is unsafe behaviour and will be disallowed in the future.", - ) + return signature_failure end events = params["_json"] || [params] @@ -325,6 +321,10 @@ def valid_mandrill_signature? ) end + def valid_mailpace_token? + ActiveSupport::SecurityUtils.secure_compare(params[:t], SiteSetting.mailpace_webhook_token) + end + def valid_postmark_token? return false if params[:t].blank? ActiveSupport::SecurityUtils.secure_compare(params[:t], SiteSetting.postmark_webhook_token) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index a6f72dc3624f5..5d4f3ee5579d2 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -90,6 +90,16 @@ def is_gzip_req? request.env["HTTP_ACCEPT_ENCODING"] =~ /gzip/ end + def generate_import_map(plugin_assets) + imports = + plugin_assets + .filter { it[:importmap_name] } + .map { [it[:importmap_name], script_asset_path(it[:name])] } + .to_h + + JSON.pretty_generate({ imports: }).html_safe + end + def script_asset_path(script) path = ActionController::Base.helpers.asset_path("#{script}.js") @@ -113,16 +123,17 @@ def script_asset_path(script) path = "#{resolved_s3_asset_cdn_url}#{path}" end - # assets needed for theme testing are not compressed because they take a fair - # amount of time to compress (+30 seconds) during rebuilds/deploys when the - # vast majority of sites will never need them, so it makes more sense to serve - # them uncompressed instead of making everyone's rebuild/deploy take +30 more - # seconds. - if !script.start_with?("discourse/tests/") - if is_brotli_req? - path = path.gsub(/\.([^.]+)\z/, '.br.\1') - elsif is_gzip_req? - path = path.gsub(/\.([^.]+)\z/, '.gz.\1') + if is_brotli_req? + if path.include?("/assets/js/") + path = path.sub("/assets/js/", "/assets/br/") + else + path = path.sub(/\.([^.]+)\z/, '.br.\1') + end + elsif is_gzip_req? + if path.include?("/assets/js/") + path = path.sub("/assets/js/", "/assets/gz/") + else + path = path.sub(/\.([^.]+)\z/, '.gz.\1') end end end @@ -130,7 +141,7 @@ def script_asset_path(script) path end - def preload_script(script) + def preload_script(script, attrs: {}) scripts = [] if chunks = EmberCli.script_chunks[script] @@ -142,20 +153,24 @@ def preload_script(script) scripts .map do |name| path = script_asset_path(name) - preload_script_url(path, entrypoint: script) + preload_script_url(path, entrypoint: script, attrs: attrs) end .join("\n") .html_safe end - def preload_script_url(url, entrypoint: nil, type_module: false) + def preload_script_url(url, entrypoint: nil, type_module: false, attrs: nil) entrypoint_attribute = entrypoint ? "data-discourse-entrypoint=\"#{entrypoint}\"" : "" nonce_attribute = "nonce=\"#{csp_nonce_placeholder}\"" + extra_attrs = + attrs&.map { |k, v| "#{ERB::Util.html_escape(k)}=\"#{ERB::Util.html_escape(v)}\"" }&.join(" ") + extra_attrs = " #{extra_attrs}" if extra_attrs.present? + add_resource_preload_list(url, "script") <<~HTML.html_safe - + HTML end @@ -354,9 +369,17 @@ def crawlable_meta_data(opts = nil) if opts[:read_time] && opts[:read_time] > 0 && opts[:like_count] && opts[:like_count] > 0 result << tag(:meta, name: "twitter:label1", value: I18n.t("reading_time")) - result << tag(:meta, name: "twitter:data1", value: "#{opts[:read_time]} mins 🕑") + result << tag( + :meta, + name: "twitter:data1", + value: I18n.t("reading_time_minutes", count: opts[:read_time]), + ) result << tag(:meta, name: "twitter:label2", value: I18n.t("likes")) - result << tag(:meta, name: "twitter:data2", value: "#{opts[:like_count]} ❤") + result << tag( + :meta, + name: "twitter:data2", + value: I18n.t("likes_count", count: opts[:like_count]), + ) end if opts[:published_time] @@ -666,7 +689,11 @@ def user_scheme_id def scheme_id return @scheme_id if defined?(@scheme_id) - return user_scheme_id if user_scheme_id + if user_scheme_id + return user_scheme_id unless theme_limits_color_schemes? + return user_scheme_id if ColorScheme.exists?(id: user_scheme_id, theme_id: theme_id) + end + return if theme_id.blank? @scheme_id = Theme.where(id: theme_id).pick(:color_scheme_id) @@ -679,8 +706,23 @@ def user_dark_scheme_id end def dark_scheme_id - user_dark_scheme_id || - (theme_id ? Theme.find_by_id(theme_id) : Theme.find_default)&.dark_color_scheme_id || -1 + if user_dark_scheme_id + return user_dark_scheme_id unless theme_limits_color_schemes? + return user_dark_scheme_id if ColorScheme.exists?(id: user_dark_scheme_id, theme_id: theme_id) + end + + theme = theme_id ? Theme.find_by_id(theme_id) : Theme.find_default + dark_id = theme&.dark_color_scheme_id + return dark_id if dark_id.present? + return theme&.color_scheme_id if theme_limits_color_schemes? + -1 + end + + def theme_limits_color_schemes? + return @theme_limits_color_schemes if defined?(@theme_limits_color_schemes) + @theme_limits_color_schemes = + theme_id.present? && + ThemeModifierSet.exists?(theme_id: theme_id, only_theme_color_schemes: true) end def current_homepage @@ -692,6 +734,38 @@ def build_plugin_html(name, **kwargs) DiscoursePluginRegistry.build_html(name, controller, **kwargs) || "" end + def crawler_topic_container_schema(topic) + tag.attributes( + DiscoursePluginRegistry.apply_modifier( + :topic_crawler_container_schema, + { itemscope: true, itemtype: "http://schema.org/DiscussionForumPosting" }, + topic, + ), + ) + end + + def crawler_topic_main_entity_schema(topic) + tag.attributes( + DiscoursePluginRegistry.apply_modifier(:topic_crawler_main_entity_schema, {}, topic), + ).presence + end + + def crawler_post_schema(post, topic) + default = { + itemprop: "comment", + itemscope: true, + itemtype: "http://schema.org/Comment", + } unless post.is_first_post? + tag.attributes( + DiscoursePluginRegistry.apply_modifier( + :topic_crawler_post_schema, + default || {}, + post, + topic, + ), + ) + end + # If there is plugin HTML return that, otherwise yield to the template def replace_plugin_html(name) if (html = build_plugin_html(name)).present? diff --git a/app/helpers/embed_helper.rb b/app/helpers/embed_helper.rb index 3af784f89aa78..bcd8e8c358794 100644 --- a/app/helpers/embed_helper.rb +++ b/app/helpers/embed_helper.rb @@ -1,6 +1,10 @@ # frozen_string_literal: true module EmbedHelper + def embed_post_date_title(dt) + dt.strftime I18n.t("datetime_formats.formats.long") + end + def embed_post_date(dt) current = Time.now diff --git a/app/helpers/topics_helper.rb b/app/helpers/topics_helper.rb index 7399094cb9928..7819136987f35 100644 --- a/app/helpers/topics_helper.rb +++ b/app/helpers/topics_helper.rb @@ -23,6 +23,7 @@ def categories_breadcrumb(topic) def localize_topic_view_content(topic_view) return if cookies.key?(ContentLocalization::SHOW_ORIGINAL_COOKIE) + return if current_user&.user_option&.show_original_content # locale param is appropriately set in the application controller # depending on site settings and presence of user diff --git a/app/jobs/regular/bulk_grant_trust_level.rb b/app/jobs/regular/bulk_grant_trust_level.rb index 5a5ccecf7ee1d..ec75bfe1845c1 100644 --- a/app/jobs/regular/bulk_grant_trust_level.rb +++ b/app/jobs/regular/bulk_grant_trust_level.rb @@ -3,13 +3,22 @@ module Jobs class BulkGrantTrustLevel < ::Jobs::Base def execute(args) - trust_level = args[:trust_level] user_ids = args[:user_ids] + trust_level = args[:trust_level] + recalculate = args[:recalculate] - raise Discourse::InvalidParameters.new(:trust_level) if trust_level.blank? raise Discourse::InvalidParameters.new(:user_ids) if user_ids.blank? + raise Discourse::InvalidParameters.new(:trust_level) if trust_level.blank? && !recalculate - User.where(id: user_ids).find_each { |user| TrustLevelGranter.grant(trust_level, user) } + User + .where(id: user_ids) + .find_each do |user| + if recalculate + Promotion.recalculate(user, use_previous_trust_level: true) + else + TrustLevelGranter.grant(trust_level, user) + end + end end end end diff --git a/app/jobs/regular/change_display_name.rb b/app/jobs/regular/change_display_name.rb index d087defd6a860..ca6b9c3cdd2dd 100644 --- a/app/jobs/regular/change_display_name.rb +++ b/app/jobs/regular/change_display_name.rb @@ -63,8 +63,8 @@ def update_post(post) def update_revision(revision) if revision.modifications["raw"] || revision.modifications["cooked"] - revision.modifications["raw"].map! { |raw| update_raw(raw) } - revision.modifications["cooked"].map! { |cooked| update_cooked(cooked) } + revision.modifications["raw"]&.map! { |raw| update_raw(raw) } + revision.modifications["cooked"]&.map! { |cooked| update_cooked(cooked) } revision.save! end rescue => e diff --git a/app/jobs/regular/export_csv_file.rb b/app/jobs/regular/export_csv_file.rb index 20bca4d3e23ce..739e21ed0d37c 100644 --- a/app/jobs/regular/export_csv_file.rb +++ b/app/jobs/regular/export_csv_file.rb @@ -221,10 +221,13 @@ def report_export end if report.modes == [Report::MODES[:stacked_chart]] + hidden_labels = @extra[:hidden_labels].to_s.split(",").map(&:strip) + header = [:x] data = {} - report.data.map do |series| + report.data.each do |series| + next if hidden_labels.include?(series[:req]) header << series[:label] series[:data].each do |datapoint| data[datapoint[:x]] ||= { x: datapoint[:x] } diff --git a/app/jobs/regular/export_user_archive.rb b/app/jobs/regular/export_user_archive.rb index 5508c2a10f86b..a5035f0e4b7c0 100644 --- a/app/jobs/regular/export_user_archive.rb +++ b/app/jobs/regular/export_user_archive.rb @@ -36,6 +36,7 @@ class ExportUserArchive < ::Jobs::Base like_count reply_count url + post_id created_at ], user_archive_profile: %w[location website bio views], @@ -205,7 +206,7 @@ def user_archive_export Post .includes(topic: :category) .where(user_id: @archive_for_user.id) - .select(:topic_id, :post_number, :raw, :cooked, :like_count, :reply_count, :created_at) + .select(:id, :topic_id, :post_number, :raw, :cooked, :like_count, :reply_count, :created_at) .order(:created_at) .with_deleted .each { |user_archive| yield get_user_archive_fields(user_archive) } @@ -599,6 +600,7 @@ def get_user_archive_fields(user_archive) "categories" => categories, "is_pm" => is_pm, "url" => url, + "post_id" => user_archive["id"], } user_archive.merge!(topic_hash) diff --git a/app/jobs/regular/notify_users_added_to_group.rb b/app/jobs/regular/notify_users_added_to_group.rb new file mode 100644 index 0000000000000..5d2f204233545 --- /dev/null +++ b/app/jobs/regular/notify_users_added_to_group.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module Jobs + class NotifyUsersAddedToGroup < ::Jobs::Base + def execute(args) + user_ids = args[:user_ids] + group_id = args[:group_id] + return if group_id.blank? || user_ids.blank? + + group = Group.find_by(id: group_id) + return if group.nil? + + User.where(id: user_ids).find_each { |user| group.notify_added_to_group(user) } + end + end +end diff --git a/app/jobs/regular/post_update_topic_tracking_state.rb b/app/jobs/regular/post_update_topic_tracking_state.rb index da3a11268d81e..912a742a70cc5 100644 --- a/app/jobs/regular/post_update_topic_tracking_state.rb +++ b/app/jobs/regular/post_update_topic_tracking_state.rb @@ -10,15 +10,16 @@ def execute(args) if topic.private_message? PrivateMessageTopicTrackingState.publish_unread(post) if post.post_number > 1 - - TopicGroup.new_message_update(topic.last_poster, topic.id, post.post_number) + if post.post_type != Post.types[:small_action] + TopicGroup.new_message_update(topic.last_poster, topic.id, post.post_number) + end else TopicTrackingState.publish_unmuted(post.topic) if post.post_number > 1 TopicTrackingState.publish_muted(post.topic) TopicTrackingState.publish_unread(post) end - TopicTrackingState.publish_latest(post.topic, post.whisper?) + TopicTrackingState.publish_latest(post.topic) unless post.whisper? end end end diff --git a/app/jobs/regular/pull_hotlinked_images.rb b/app/jobs/regular/pull_hotlinked_images.rb index d27f4180a5077..a8aadd1134122 100644 --- a/app/jobs/regular/pull_hotlinked_images.rb +++ b/app/jobs/regular/pull_hotlinked_images.rb @@ -129,7 +129,9 @@ class UploadCreateError < StandardError def attempt_download(src, user_id) # secure-uploads endpoint prevents anonymous downloads, so we # need the presigned S3 URL here - src = Upload.signed_url_from_secure_uploads_url(src) if Upload.secure_uploads_url?(src) + if Upload.secure_uploads_url?(src) + src = Upload.signed_url_from_secure_uploads_url(src, include_content_disposition: false) + end hotlinked = download(src) raise ImageBrokenError if !hotlinked diff --git a/app/jobs/regular/remove_banner.rb b/app/jobs/regular/remove_banner.rb index 6ef278e6d5fe0..86e241eba7327 100644 --- a/app/jobs/regular/remove_banner.rb +++ b/app/jobs/regular/remove_banner.rb @@ -8,7 +8,7 @@ def execute(args) return if topic_id.blank? topic = Topic.find_by(id: topic_id) - topic.remove_banner!(Discourse.system_user) if topic.present? + topic.presence&.remove_banner!(Discourse.system_user) end end end diff --git a/app/jobs/regular/unpin_topic.rb b/app/jobs/regular/unpin_topic.rb index ebf093e82fa3c..f2e2f7370fefd 100644 --- a/app/jobs/regular/unpin_topic.rb +++ b/app/jobs/regular/unpin_topic.rb @@ -8,7 +8,7 @@ def execute(args) return if topic_id.blank? topic = Topic.find_by(id: topic_id) - topic.update_pinned(false) if topic.present? + topic.presence&.update_pinned(false) end end end diff --git a/app/jobs/scheduled/check_new_features.rb b/app/jobs/scheduled/check_new_features.rb index b69410f351628..b249903ab79e4 100644 --- a/app/jobs/scheduled/check_new_features.rb +++ b/app/jobs/scheduled/check_new_features.rb @@ -7,40 +7,83 @@ class CheckNewFeatures < ::Jobs::Scheduled def execute(args) admin_ids = User.human_users.where(admin: true).pluck(:id) - prev_most_recent = DiscourseUpdates.new_features&.first + # Before we download the latest list from Meta: + # + # - Some admins have no "last time I looked at new features" stored yet. + # - If we already have at least one new-feature item saved for this site, + # set that stored time for them to the newest thing we know about, + # including permanent upcoming changes (those might be newer than the + # saved Meta list). + # - If we have no saved Meta items yet, do not set that time here. Only an + # upcoming change might exist; setting the time from that alone would + # make us think they are already up to date and we would skip sending the + # new-features notification. + new_features_from_feed = DiscourseUpdates.new_features + new_features_with_permanent_uc = find_new_features + prev_most_recent = + if new_features_from_feed.present? + new_features_with_permanent_uc&.first&.symbolize_keys || nil + else + nil + end if prev_most_recent admin_ids.each do |admin_id| if DiscourseUpdates.get_last_viewed_feature_date(admin_id).blank? - DiscourseUpdates.bump_last_viewed_feature_date(admin_id, prev_most_recent["created_at"]) + DiscourseUpdates.bump_last_viewed_feature_date(admin_id, prev_most_recent[:created_at]) end end end - # this memoization may seem pointless, but it actually avoids us hitting + # This memoization may seem pointless, but it actually avoids us hitting # Meta repeatedly and getting rate-limited when this job is ran on a # multisite cluster. - # in multisite, the `execute` method (of the same instance) is called for + # + # In multisite, the `execute` method (of the same instance) is called for # every site in the cluster. - @new_features_json ||= DiscourseUpdates.new_features_payload + @new_features_json ||= DiscourseUpdates.new_features_response_json DiscourseUpdates.update_new_features(@new_features_json) - new_most_recent = DiscourseUpdates.new_features&.first + # After the download is saved: + # + # - If an admin has no stored "last looked" time, or it is older than the + # newest item (Meta list plus permanent upcoming changes), send the + # new-features notification and update their stored time to that newest + # item. Compare using whole seconds so Redis round-trip (.to_s then parse) + # does not look older than in-memory DB timestamps within the same second. + new_features_with_permanent_uc = find_new_features + new_most_recent = new_features_with_permanent_uc&.first&.symbolize_keys if new_most_recent - most_recent_feature_date = Time.zone.parse(new_most_recent["created_at"]) + most_recent_created_at = new_most_recent[:created_at] + most_recent_feature_date = + ( + if most_recent_created_at.is_a?(String) + Time.zone.parse(most_recent_created_at) + else + most_recent_created_at + end + ) + admin_ids.each do |admin_id| admin_last_viewed_feature_date = DiscourseUpdates.get_last_viewed_feature_date(admin_id) if admin_last_viewed_feature_date.blank? || - admin_last_viewed_feature_date < most_recent_feature_date + admin_last_viewed_feature_date.to_i < most_recent_feature_date.to_i Notification.consolidate_or_create!( user_id: admin_id, notification_type: Notification.types[:new_features], data: { }, ) - DiscourseUpdates.bump_last_viewed_feature_date(admin_id, new_most_recent["created_at"]) + DiscourseUpdates.bump_last_viewed_feature_date(admin_id, most_recent_created_at) end end end end + + def find_new_features + new_features = DiscourseUpdates.new_features + DiscourseUpdates.merge_new_features_with_upcoming_changes( + new_features&.map { |item| item.symbolize_keys } || [], + ) + end end end diff --git a/app/jobs/scheduled/check_upcoming_changes.rb b/app/jobs/scheduled/check_upcoming_changes.rb index 722efb169ab70..0e85d0d2ded61 100644 --- a/app/jobs/scheduled/check_upcoming_changes.rb +++ b/app/jobs/scheduled/check_upcoming_changes.rb @@ -5,8 +5,6 @@ class CheckUpcomingChanges < ::Jobs::Scheduled every 20.minutes def execute(args) - return if !SiteSetting.enable_upcoming_changes - site = RailsMultisite::ConnectionManagement.current_db verbose_log( site, diff --git a/app/mailers/user_notifications.rb b/app/mailers/user_notifications.rb index 3deb70c0537c7..633e10affed2c 100644 --- a/app/mailers/user_notifications.rb +++ b/app/mailers/user_notifications.rb @@ -35,6 +35,7 @@ def signup_after_approval(user, opts = {}) template: "user_notifications.signup_after_approval", locale: locale, new_user_tips: tips, + recipient_user: user, ) end @@ -50,6 +51,7 @@ def post_approved(user, opts = {}) locale: locale, base_url: Discourse.base_url, post_url: post_url, + recipient_user: user, ) end @@ -60,6 +62,7 @@ def signup_after_reject(user, opts = {}) template: "user_notifications.signup_after_reject", locale: locale, reject_reason: opts[:reject_reason], + recipient_user: user, ) end @@ -79,6 +82,7 @@ def suspicious_login(user, opts = {}) browser: I18n.t("user_auth_tokens.browser.#{browser}"), device: I18n.t("user_auth_tokens.device.#{device}"), os: I18n.t("user_auth_tokens.os.#{os}"), + recipient_user: user, ) end @@ -88,6 +92,7 @@ def notify_old_email(user, opts = {}) template: "user_notifications.notify_old_email", locale: user_locale(user), new_email: opts[:new_email], + recipient_user: user, ) end @@ -97,6 +102,7 @@ def notify_old_email_add(user, opts = {}) template: "user_notifications.notify_old_email_add", locale: user_locale(user), new_email: opts[:new_email], + recipient_user: user, ) end @@ -165,6 +171,7 @@ def account_silenced(user, opts = nil) template: "user_notifications.account_silenced_forever", locale: user_locale(user), reason: user_history.details, + recipient_user: user, ) else silenced_till = user.silenced_till.in_time_zone(user.user_option.timezone.presence || "UTC") @@ -174,6 +181,7 @@ def account_silenced(user, opts = nil) locale: user_locale(user), reason: user_history.details, silenced_till: I18n.l(silenced_till, format: :long), + recipient_user: user, ) end end @@ -206,6 +214,7 @@ def account_suspended(user, opts = nil) template: "user_notifications.account_suspended_forever", locale: user_locale(user), reason: user_history.details, + recipient_user: user, ) else suspended_till = user.suspended_till.in_time_zone(user.user_option.timezone.presence || "UTC") @@ -215,6 +224,7 @@ def account_suspended(user, opts = nil) locale: user_locale(user), reason: user_history.details, suspended_till: I18n.l(suspended_till, format: :long), + recipient_user: user, ) end end @@ -225,6 +235,7 @@ def account_exists(user, opts = {}) template: "user_notifications.account_exists", locale: user_locale(user), email: user.email, + recipient_user: user, ) end @@ -234,12 +245,15 @@ def account_second_factor_disabled(user, opts = {}) template: "user_notifications.account_second_factor_disabled", locale: user_locale(user), email: user.email, + recipient_user: user, ) end def digest(user, opts = {}) build_summary_for(user) - @unsubscribe_key = UnsubscribeKey.create_key_for(@user, UnsubscribeKey::DIGEST_TYPE) + if !opts[:skip_unsubscribe_links] + @unsubscribe_key = UnsubscribeKey.create_key_for(@user, UnsubscribeKey::DIGEST_TYPE) + end @since = opts[:since].presence @since ||= [user.last_seen_at, user.user_stat&.digest_attempted_at, 1.month.ago].compact.max @@ -359,13 +373,15 @@ def digest(user, opts = {}) email_prefix: @email_prefix, date: short_date(Time.now), ), - add_unsubscribe_link: true, + add_unsubscribe_link: !opts[:skip_unsubscribe_links], unsubscribe_url: "#{Discourse.base_url}/email/unsubscribe/#{@unsubscribe_key}", topic_ids: topics_for_digest.pluck(:id), post_ids: topics_for_digest.joins(:posts).where(posts: { post_number: 1 }).pluck("posts.id"), } + opts[:recipient_user] = user + build_email(user.email, opts) end end @@ -787,6 +803,7 @@ def send_notification_email(opts) locale: locale, } + email_opts[:recipient_user] = user email_opts[:html_override] = html unless translation_override_exists # If we have a display name, change the from address @@ -855,7 +872,13 @@ def self.participants(post, recipient_user, reveal_staged_email: false) private def build_user_email_token_by_template(template, user, email_token) - build_email(user.email, template: template, locale: user_locale(user), email_token: email_token) + build_email( + user.email, + template: template, + locale: user_locale(user), + email_token: email_token, + recipient_user: user, + ) end def build_summary_for(user) diff --git a/app/models/about.rb b/app/models/about.rb index a6ead14dd1fb4..e4049d5b3ac02 100644 --- a/app/models/about.rb +++ b/app/models/about.rb @@ -66,21 +66,33 @@ def site_creation_date def moderators @moderators ||= - apply_excluded_groups( - User.where(moderator: true).human_users.order(last_seen_at: :desc), - ignore_groups: [Group::AUTO_GROUPS[:admins]], - ) + if guardian.public_can_see_profiles? + apply_hidden_profile( + apply_excluded_groups( + User.where(moderator: true).human_users.order(last_seen_at: :desc), + ignore_groups: [Group::AUTO_GROUPS[:admins]], + ), + ) + else + [] + end end def admins @admins ||= - DiscoursePluginRegistry.apply_modifier( - :about_admins, - apply_excluded_groups( - User.where(admin: true).human_users.order(last_seen_at: :desc), - ignore_groups: [Group::AUTO_GROUPS[:moderators]], - ), - ) + if guardian.public_can_see_profiles? + DiscoursePluginRegistry.apply_modifier( + :about_admins, + apply_hidden_profile( + apply_excluded_groups( + User.where(admin: true).human_users.order(last_seen_at: :desc), + ignore_groups: [Group::AUTO_GROUPS[:moderators]], + ), + ), + ) + else + [] + end end def stats @@ -88,7 +100,9 @@ def stats end def category_moderators - allowed_cats = Guardian.new(@user).allowed_category_ids + return [] unless guardian.public_can_see_profiles? + + allowed_cats = guardian.allowed_category_ids return [] if allowed_cats.blank? cats_with_mods = Category.joins(:category_moderation_groups).distinct.pluck(:id) @@ -99,6 +113,8 @@ def category_moderators per_cat_limit = category_mods_limit / category_ids.size per_cat_limit = 1 if per_cat_limit < 1 + filter_hidden_profiles = !guardian.is_staff? && SiteSetting.allow_users_to_hide_profile + results = DB.query(<<~SQL, category_ids:) WITH moderator_users AS ( SELECT @@ -111,7 +127,9 @@ def category_moderators ON cmg.group_id = gu.group_id INNER JOIN users u ON gu.user_id = u.id + #{"LEFT JOIN user_options uo ON uo.user_id = u.id" if filter_hidden_profiles} WHERE cmg.category_id IN (:category_ids) + #{"AND uo.hide_profile IS NOT TRUE" if filter_hidden_profiles} ) SELECT id AS category_id, user_ids FROM categories @@ -143,13 +161,24 @@ def category_mods_limit=(number) private + def guardian + @guardian ||= Guardian.new(@user) + end + + def apply_hidden_profile(query) + return query if guardian.is_staff? + return query unless SiteSetting.allow_users_to_hide_profile + + query.left_joins(:user_option).where("user_options.hide_profile IS NOT TRUE") + end + def apply_excluded_groups(query, ignore_groups: []) group_ids = SiteSetting.about_page_hidden_groups_map - ignore_groups return query if group_ids.blank? query.joins( DB.sql_fragment( - "LEFT JOIN group_users ON group_id IN (:group_ids) AND user_id = users.id", + "LEFT JOIN group_users ON group_users.group_id IN (:group_ids) AND group_users.user_id = users.id", group_ids:, ), ).where("group_users.id": nil) diff --git a/app/models/api_key_scope.rb b/app/models/api_key_scope.rb index 97af146ab83c6..adfaaf40da0ed 100644 --- a/app/models/api_key_scope.rb +++ b/app/models/api_key_scope.rb @@ -339,6 +339,8 @@ def find_urls(actions:, methods:) end def permits?(env) + return false if mapping.nil? + RouteMatcher.new(**mapping.except(:urls), allowed_param_values: allowed_parameters).match?( env: env, ) diff --git a/app/models/category.rb b/app/models/category.rb index fa84c0b239c23..87c5fb129994c 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -37,8 +37,17 @@ class Category < ActiveRecord::Base has_many :category_groups, dependent: :destroy has_many :category_moderation_groups, dependent: :destroy + has_many :category_posting_review_groups, dependent: :destroy + has_many :topic_posting_review_records, + -> { where(post_type: :topic) }, + class_name: "CategoryPostingReviewGroup" + has_many :reply_posting_review_records, + -> { where(post_type: :reply) }, + class_name: "CategoryPostingReviewGroup" has_many :groups, through: :category_groups has_many :moderating_groups, through: :category_moderation_groups, source: :group + has_many :topic_posting_review_groups, through: :topic_posting_review_records, source: :group + has_many :reply_posting_review_groups, through: :reply_posting_review_records, source: :group has_many :topic_timers, dependent: :destroy has_many :upload_references, as: :target, dependent: :destroy @@ -53,6 +62,10 @@ class Category < ActiveRecord::Base :require_topic_approval, :require_topic_approval=, :require_topic_approval?, + :topic_posting_review_mode, + :topic_posting_review_mode=, + :reply_posting_review_mode, + :reply_posting_review_mode=, to: :category_setting, allow_nil: true @@ -85,6 +98,7 @@ class Category < ActiveRecord::Base validate :email_in_validator validate :ensure_slug validate :permissions_compatibility_validator + validate :posting_review_groups_validator validates :default_slow_mode_seconds, numericality: { @@ -106,10 +120,12 @@ class Category < ActiveRecord::Base before_save :downcase_email before_save :downcase_name before_save :ensure_category_setting + before_save :clear_posting_review_groups_for_non_group_modes after_create :create_category_definition after_create :delete_category_permalink after_update :rename_category_definition, if: :saved_change_to_name? after_update :create_category_permalink, if: :saved_change_to_slug? + after_update :revise_category_definition, if: :saved_change_to_description? after_update :run_plugin_category_update_param_callbacks after_destroy :trash_category_definition after_destroy :clear_related_site_settings @@ -312,6 +328,25 @@ def reset_topic_ids_cache Category.reset_topic_ids_cache end + def category_types + return {} if !SiteSetting.enable_simplified_category_creation + Categories::TypeRegistry + .all + .values + .each_with_object({}) do |type_klass, result| + result[type_klass.type_id] = type_klass.metadata if type_klass.category_matches?(self) + end + end + + def category_type_site_setting_names + category_types + .values + .filter_map { |type_metadata| type_metadata.dig(:configuration_schema, :site_settings) } + .flatten(1) + .map { |setting| setting[:key].to_sym } + .uniq + end + # Accepts an array of slugs with each item in the array # Returns the category ids of the last slug in the array. The slugs array has to follow the proper category # nesting hierarchy. If any of the slug in the array is invalid or if the slugs array does not follow the proper @@ -444,29 +479,49 @@ def self.update_stats AND (c.topic_count <> COALESCE(x.topic_count, 0) OR c.post_count <> COALESCE(x.post_count, 0)) SQL - # Yes, there are a lot of queries happening below. - # Performing a lot of queries is actually faster than using one big update - # statement with sub-selects on large databases with many categories, - # topics, and posts. - # - # The old method with the one query is here: - # https://github.com/discourse/discourse/blob/5f34a621b5416a53a2e79a145e927fca7d5471e8/app/models/category.rb - # - # If you refactor this, test performance on a large database. - - Category.all.each do |c| + Category.find_each do |c| topics = c.topics.visible topics = topics.where.not(id: c.topic_id) if c.topic_id - c.topics_year = topics.created_since(1.year.ago).count - c.topics_month = topics.created_since(1.month.ago).count - c.topics_week = topics.created_since(1.week.ago).count - c.topics_day = topics.created_since(1.day.ago).count - posts = c.visible_posts - c.posts_year = posts.created_since(1.year.ago).count - c.posts_month = posts.created_since(1.month.ago).count - c.posts_week = posts.created_since(1.week.ago).count - c.posts_day = posts.created_since(1.day.ago).count + # Combine time-based topic counts into a single query + topic_counts = DB.query_single(<<~SQL, category_id: c.id, topic_id: c.topic_id) + SELECT + COUNT(*) FILTER (WHERE created_at >= NOW() - INTERVAL '1 year') AS year, + COUNT(*) FILTER (WHERE created_at >= NOW() - INTERVAL '1 month') AS month, + COUNT(*) FILTER (WHERE created_at >= NOW() - INTERVAL '1 week') AS week, + COUNT(*) FILTER (WHERE created_at >= NOW() - INTERVAL '1 day') AS day + FROM topics + WHERE category_id = :category_id + AND visible = true + AND deleted_at IS NULL + #{c.topic_id ? "AND id != :topic_id" : ""} + SQL + + c.topics_year = topic_counts[0] + c.topics_month = topic_counts[1] + c.topics_week = topic_counts[2] + c.topics_day = topic_counts[3] + + # Combine time-based post counts into a single query + post_counts = DB.query_single(<<~SQL, category_id: c.id, topic_id: c.topic_id) + SELECT + COUNT(*) FILTER (WHERE posts.created_at >= NOW() - INTERVAL '1 year') AS year, + COUNT(*) FILTER (WHERE posts.created_at >= NOW() - INTERVAL '1 month') AS month, + COUNT(*) FILTER (WHERE posts.created_at >= NOW() - INTERVAL '1 week') AS week, + COUNT(*) FILTER (WHERE posts.created_at >= NOW() - INTERVAL '1 day') AS day + FROM posts + INNER JOIN topics ON topics.id = posts.topic_id + WHERE topics.category_id = :category_id + AND topics.visible = true + AND posts.deleted_at IS NULL + AND posts.user_deleted = false + #{c.topic_id ? "AND topics.id != :topic_id" : ""} + SQL + + c.posts_year = post_counts[0] + c.posts_month = post_counts[1] + c.posts_week = post_counts[2] + c.posts_day = post_counts[3] c.save if c.changed? end @@ -512,6 +567,15 @@ def create_category_definition end end + def revise_category_definition + return if skip_category_definition + return if self.topic.blank? || self.topic.first_post.blank? + + # NOTE: Revising the first post will also update the category description, + # see PostRevisor#update_category_description + self.topic.first_post.revise(self.user, { raw: self.description }, skip_validations: true) + end + def trash_category_definition self.topic&.trash! end @@ -1201,6 +1265,36 @@ def ensure_category_setting self.build_category_setting if self.category_setting.blank? end + def group_based_posting_review_mode?(post_type) + mode = category_setting&.public_send(:"#{post_type}_posting_review_mode") + CategorySetting::GROUP_BASED_MODES.include?(mode) + end + + def posting_review_groups_validator + %i[topic reply].each do |post_type| + next unless group_based_posting_review_mode?(post_type) + + group_ids = public_send(:"#{post_type}_posting_review_group_ids") + if group_ids.blank? + errors.add( + :base, + I18n.t( + "category.errors.groups_required_for_mode", + setting: "#{post_type}_posting_review_mode", + ), + ) + end + end + end + + def clear_posting_review_groups_for_non_group_modes + %i[topic reply].each do |post_type| + unless group_based_posting_review_mode?(post_type) + public_send(:"#{post_type}_posting_review_group_ids=", []) + end + end + end + def check_permissions_compatibility(parent_permissions, child_permissions) parent_groups = parent_permissions.map(&:first) @@ -1252,64 +1346,65 @@ def on_custom_fields_change # Table name: categories # # id :integer not null, primary key -# name :string(50) not null -# color :string(6) default("0088CC"), not null -# topic_id :integer -# topic_count :integer default(0), not null -# created_at :datetime not null -# updated_at :datetime not null -# user_id :integer not null -# topics_year :integer default(0) -# topics_month :integer default(0) -# topics_week :integer default(0) -# slug :string not null -# description :text -# text_color :string(6) default("FFFFFF"), not null -# read_restricted :boolean default(FALSE), not null -# auto_close_hours :float -# post_count :integer default(0), not null -# latest_post_id :integer -# latest_topic_id :integer -# position :integer -# parent_category_id :integer -# posts_year :integer default(0) -# posts_month :integer default(0) -# posts_week :integer default(0) -# email_in :string -# email_in_allow_strangers :boolean default(FALSE) -# topics_day :integer default(0) -# posts_day :integer default(0) +# all_topics_wiki :boolean default(FALSE), not null # allow_badges :boolean default(TRUE), not null -# name_lower :string(50) not null +# allow_global_tags :boolean default(FALSE), not null +# allow_unlimited_owner_edits_on_first_post :boolean default(FALSE), not null # auto_close_based_on_last_post :boolean default(FALSE) -# topic_template :text +# auto_close_hours :float +# color :string(6) default("0088CC"), not null # contains_messages :boolean -# sort_order :string -# sort_ascending :boolean -# uploaded_logo_id :integer -# uploaded_background_id :integer -# topic_featured_link_allowed :boolean default(TRUE) -# all_topics_wiki :boolean default(FALSE), not null -# show_subcategory_list :boolean default(FALSE) -# num_featured_topics :integer default(3) -# default_view :string(50) -# subcategory_list_style :string(50) default("rows_with_featured_topics") +# default_list_filter :string(20) default("all") +# default_slow_mode_seconds :integer # default_top_period :string(20) default("all") +# default_view :string(50) +# description :text +# email_in :string +# email_in_allow_strangers :boolean default(FALSE) +# emoji :string +# icon :string +# locale :string(20) # mailinglist_mirror :boolean default(FALSE), not null # minimum_required_tags :integer default(0), not null +# name :string(50) not null +# name_lower :string(50) not null # navigate_to_first_post_after_read :boolean default(FALSE), not null -# search_priority :integer default(0) -# allow_global_tags :boolean default(FALSE), not null +# num_featured_topics :integer default(3) +# position :integer +# post_count :integer default(0), not null +# posts_day :integer default(0) +# posts_month :integer default(0) +# posts_week :integer default(0) +# posts_year :integer default(0) # read_only_banner :string -# default_list_filter :string(20) default("all") -# allow_unlimited_owner_edits_on_first_post :boolean default(FALSE), not null -# default_slow_mode_seconds :integer -# uploaded_logo_dark_id :integer -# uploaded_background_dark_id :integer +# read_restricted :boolean default(FALSE), not null +# search_priority :integer default(0) +# show_subcategory_list :boolean default(FALSE) +# slug :string not null +# sort_ascending :boolean +# sort_order :string # style_type :integer default("square"), not null -# emoji :string -# icon :string -# locale :string(20) +# subcategory_list_style :string(50) default("rows_with_featured_topics") +# text_color :string(6) default("FFFFFF"), not null +# topic_count :integer default(0), not null +# topic_featured_link_allowed :boolean default(TRUE) +# topic_template :text +# topic_title_placeholder :string +# topics_day :integer default(0) +# topics_month :integer default(0) +# topics_week :integer default(0) +# topics_year :integer default(0) +# created_at :datetime not null +# updated_at :datetime not null +# latest_post_id :integer +# latest_topic_id :integer +# parent_category_id :integer +# topic_id :integer +# uploaded_background_dark_id :integer +# uploaded_background_id :integer +# uploaded_logo_dark_id :integer +# uploaded_logo_id :integer +# user_id :integer not null # # Indexes # diff --git a/app/models/category_posting_review_group.rb b/app/models/category_posting_review_group.rb new file mode 100644 index 0000000000000..a9c410b757199 --- /dev/null +++ b/app/models/category_posting_review_group.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class CategoryPostingReviewGroup < ActiveRecord::Base + # TODO: Drop after 20260319054731 has been promoted to pre-deploy + self.ignored_columns += %w[permission] + + belongs_to :category + belongs_to :group + + validates :category, presence: true + validates :group, presence: true + + enum :post_type, { topic: 0, reply: 1 } + + def self.user_in_group?(category:, user:, post_type:) + where(category: category, post_type: post_type).where( + group_id: [Group::AUTO_GROUPS[:everyone]] + user.belonging_to_group_ids, + ).exists? + end +end + +# == Schema Information +# +# Table name: category_posting_review_groups +# +# id :bigint not null, primary key +# post_type :integer not null +# created_at :datetime not null +# updated_at :datetime not null +# category_id :integer not null +# group_id :integer not null +# +# Indexes +# +# idx_category_posting_review_groups_unique (category_id,group_id,post_type) UNIQUE +# diff --git a/app/models/category_setting.rb b/app/models/category_setting.rb index 95eb4a215d168..90e4787916ef5 100644 --- a/app/models/category_setting.rb +++ b/app/models/category_setting.rb @@ -1,8 +1,35 @@ # frozen_string_literal: true class CategorySetting < ActiveRecord::Base + # TODO: drop columns require_topic_approval, require_reply_approval in a future migration + self.ignored_columns += %i[require_topic_approval require_reply_approval] + belongs_to :category + enum :topic_posting_review_mode, + { no_one: 0, everyone: 1, everyone_except: 2, no_one_except: 3 }, + prefix: true + enum :reply_posting_review_mode, + { no_one: 0, everyone: 1, everyone_except: 2, no_one_except: 3 }, + prefix: true + + def require_topic_approval=(value) + self.topic_posting_review_mode = + ActiveModel::Type::Boolean.new.cast(value) ? :everyone : :no_one + end + + def require_reply_approval=(value) + self.reply_posting_review_mode = + ActiveModel::Type::Boolean.new.cast(value) ? :everyone : :no_one + end + + alias_method :require_topic_approval, :topic_posting_review_mode_everyone? + alias_method :require_topic_approval?, :topic_posting_review_mode_everyone? + alias_method :require_reply_approval, :reply_posting_review_mode_everyone? + alias_method :require_reply_approval?, :reply_posting_review_mode_everyone? + + GROUP_BASED_MODES = %w[everyone_except no_one_except].freeze + validates :num_auto_bump_daily, numericality: { only_integer: true, @@ -22,14 +49,15 @@ class CategorySetting < ActiveRecord::Base # # Table name: category_settings # -# id :bigint not null, primary key -# category_id :bigint not null -# require_topic_approval :boolean default(FALSE) -# require_reply_approval :boolean default(FALSE) -# num_auto_bump_daily :integer default(0) -# created_at :datetime not null -# updated_at :datetime not null -# auto_bump_cooldown_days :integer default(1) +# id :bigint not null, primary key +# auto_bump_cooldown_days :integer default(1) +# num_auto_bump_daily :integer default(0) +# reply_posting_review_mode :integer default("no_one"), not null +# topic_posting_review_mode :integer default("no_one"), not null +# created_at :datetime not null +# updated_at :datetime not null +# category_id :bigint not null +# # Indexes # # index_category_settings_on_category_id (category_id) UNIQUE diff --git a/app/models/category_user.rb b/app/models/category_user.rb index 22232a7fb3cf5..3e166255cf645 100644 --- a/app/models/category_user.rb +++ b/app/models/category_user.rb @@ -40,7 +40,7 @@ def self.batch_set(user, level, category_ids) end if category_ids.present? - params = { user_id: user.id, level_num: level_num } + params = { user_id: user.id, level_num: } sql = <<~SQL INSERT INTO category_users (user_id, category_id, notification_level) @@ -65,7 +65,7 @@ def self.batch_set(user, level, category_ids) end def self.set_notification_level_for_category(user, level, category_id) - record = CategoryUser.where(user: user, category_id: category_id).first + record = CategoryUser.where(user:, category_id:).first return if record && record.notification_level == level @@ -74,7 +74,7 @@ def self.set_notification_level_for_category(user, level, category_id) record.save! else begin - CategoryUser.create!(user: user, category_id: category_id, notification_level: level) + CategoryUser.create!(user:, category_id:, notification_level: level) rescue ActiveRecord::RecordNotUnique # does not matter end @@ -93,30 +93,31 @@ def self.auto_track(opts = {}) /*where*/ SQL - builder.where( - "tu.topic_id = t.id AND - cu.category_id = t.category_id AND - cu.user_id = tu.user_id AND - cu.notification_level = :tracking AND - tu.notification_level = :regular", - ) + builder.where <<~SQL + tu.topic_id = t.id + AND cu.category_id = t.category_id + AND cu.user_id = tu.user_id + AND cu.notification_level = :tracking + AND tu.notification_level = :regular + AND COALESCE(tu.notifications_reason_id, 0) != :user_changed + SQL if category_id = opts[:category_id] - builder.where("t.category_id = :category_id", category_id: category_id) + builder.where("t.category_id = :category_id", category_id:) end if topic_id = opts[:topic_id] - builder.where("tu.topic_id = :topic_id", topic_id: topic_id) + builder.where("tu.topic_id = :topic_id", topic_id:) end - if user_id = opts[:user_id] - builder.where("tu.user_id = :user_id", user_id: user_id) - end + user_ids = opts[:user_ids] || opts[:user_id] + builder.where("tu.user_id IN (:user_ids)", user_ids:) if user_ids.present? builder.exec( tracking: notification_levels[:tracking], regular: notification_levels[:regular], auto_track_category: TopicUser.notification_reasons[:auto_track_category], + user_changed: TopicUser.notification_reasons[:user_changed], ) end @@ -136,15 +137,8 @@ def self.auto_watch(opts = {}) FROM ( SELECT tu1.topic_id, tu1.user_id, - CASE WHEN - cu.user_id IS NULL AND tu1.notification_level = :watching AND tu1.notifications_reason_id = :auto_watch_category THEN true - ELSE false - END should_track, - CASE WHEN - cu.user_id IS NOT NULL AND tu1.notification_level in (:regular, :tracking) THEN true - ELSE false - END should_watch - + CASE WHEN cu.user_id IS NULL AND tu1.notification_level = :watching AND tu1.notifications_reason_id = :auto_watch_category THEN true ELSE false END should_track, + CASE WHEN cu.user_id IS NOT NULL AND tu1.notification_level in (:regular, :tracking) THEN true ELSE false END should_watch FROM topic_users tu1 JOIN topics t ON t.id = tu1.topic_id LEFT JOIN category_users cu ON cu.category_id = t.category_id AND cu.user_id = tu1.user_id AND cu.notification_level = :watching @@ -156,6 +150,7 @@ def self.auto_watch(opts = {}) builder.where("X.topic_id = tu.topic_id AND X.user_id = tu.user_id") builder.where("should_watch OR should_track") + builder.where2("COALESCE(tu1.notifications_reason_id, 0) != :user_changed") if category_id = opts[:category_id] builder.where2("t.category_id = :category_id", category_id: category_id) @@ -166,9 +161,10 @@ def self.auto_watch(opts = {}) builder.where2("tu1.topic_id = :topic_id", topic_id: topic_id) end - if user_id = opts[:user_id] - builder.where("tu.user_id = :user_id", user_id: user_id) - builder.where2("tu1.user_id = :user_id", user_id: user_id) + user_ids = opts[:user_ids] || opts[:user_id] + if user_ids.present? + builder.where("tu.user_id IN (:user_ids)", user_ids:) + builder.where2("tu1.user_id IN (:user_ids)", user_ids:) end builder.exec( @@ -176,6 +172,7 @@ def self.auto_watch(opts = {}) tracking: notification_levels[:tracking], regular: notification_levels[:regular], auto_watch_category: TopicUser.notification_reasons[:auto_watch_category], + user_changed: TopicUser.notification_reasons[:user_changed], ) end diff --git a/app/models/color_scheme.rb b/app/models/color_scheme.rb index 4a5c14aa55f34..983a4048f2b88 100644 --- a/app/models/color_scheme.rb +++ b/app/models/color_scheme.rb @@ -406,16 +406,17 @@ def self.base_color_schemes end def self.base - return @base_color_scheme if @base_color_scheme - @base_color_scheme = - new( - id: NAMES_TO_ID_MAP[LIGHT_PALETTE_NAME], - name: I18n.t("admin_js.admin.customize.theme.default_light_scheme"), - ) - @base_color_scheme.colors = base_colors.map { |name, hex| { name: name, hex: hex } } - @base_color_scheme.is_base = true - @base_color_scheme.is_builtin_default = true - @base_color_scheme + @base_color_scheme ||= + begin + scheme = new(id: NAMES_TO_ID_MAP[LIGHT_PALETTE_NAME], name: LIGHT_PALETTE_NAME) + scheme.colors = base_colors.map { |name, hex| { name: name, hex: hex } } + scheme.is_base = true + scheme.is_builtin_default = true + scheme.define_singleton_method(:name) do + I18n.t("admin_js.admin.customize.theme.default_light_scheme") + end + scheme + end end def self.is_base?(scheme_name) diff --git a/app/models/concerns/localizable.rb b/app/models/concerns/localizable.rb index 06039e0216d47..23cb65f34fab3 100644 --- a/app/models/concerns/localizable.rb +++ b/app/models/concerns/localizable.rb @@ -31,6 +31,10 @@ def get_localization(locale = I18n.locale) end end + def has_localization?(locale = I18n.locale) + get_localization(locale).present? + end + def in_user_locale? LocaleNormalizer.is_same?(locale, I18n.locale) end diff --git a/app/models/concerns/reports/post_edits.rb b/app/models/concerns/reports/post_edits.rb index c096e1ffa9503..560f2f346de45 100644 --- a/app/models/concerns/reports/post_edits.rb +++ b/app/models/concerns/reports/post_edits.rb @@ -81,8 +81,9 @@ def report_post_edits(report) /*limit*/ SQL + builder.join "topics t ON t.id = p.topic_id" + if category_id - builder.join "topics t ON t.id = p.topic_id" if include_subcategories builder.where("t.category_id IN (?)", Category.subcategory_ids(category_id)) else @@ -90,6 +91,12 @@ def report_post_edits(report) end end + unless report.current_user&.admin? + builder.where("t.archetype != ?", Archetype.private_message) + builder.join "categories c ON c.id = t.category_id" + builder.secure_category(Guardian.new(report.current_user).secure_category_ids) + end + if editor_username builder.where("editor.username = ?", editor_username) else diff --git a/app/models/concerns/reports/time_to_first_response.rb b/app/models/concerns/reports/time_to_first_response.rb index bd710b11eb32d..3b419e1acbed9 100644 --- a/app/models/concerns/reports/time_to_first_response.rb +++ b/app/models/concerns/reports/time_to_first_response.rb @@ -10,6 +10,7 @@ def report_time_to_first_response(report) report.icon = "reply" report.higher_is_better = false + report.y_axis_title = I18n.t("reports.time_to_first_response.yaxis") report.data = [] report.average = true diff --git a/app/models/concerns/reports/visits.rb b/app/models/concerns/reports/visits.rb index 7878d0a3b7d09..e62af80045444 100644 --- a/app/models/concerns/reports/visits.rb +++ b/app/models/concerns/reports/visits.rb @@ -10,20 +10,77 @@ def report_visits(report) report.icon = "user" - basic_report_about report, - UserVisit, - :by_day, - report.start_date, - report.end_date, - group_filter - add_counts report, UserVisit, "visited_at" - - report.prev30Days = - UserVisit.where( - "visited_at >= ? and visited_at < ?", - report.start_date - 30.days, + if SiteSetting.reporting_improvements + report_visits_stacked(report, group_filter) + else + basic_report_about report, + UserVisit, + :by_day, + report.start_date, + report.end_date, + group_filter + add_counts report, UserVisit, "visited_at" + + if report.facets.include?(:prev30Days) + report.prev30Days = + UserVisit.where( + "visited_at >= ? AND visited_at < ?", + report.start_date - 30.days, + report.start_date, + ).count + end + end + end + + private + + def report_visits_stacked(report, group_filter) + report.modes = [Report::MODES[:stacked_chart]] + report.default_group_by = "weekly" + + results = + UserVisit.counts_by_day_and_mobile( report.start_date, - ).count + report.end_date, + group_id: group_filter, + ) + + desktop_data = [] + mobile_data = [] + + results.each do |row| + if row.mobile + mobile_data << { x: row.visited_at.to_s, y: row.visit_count } + else + desktop_data << { x: row.visited_at.to_s, y: row.visit_count } + end + end + + report.data = [ + { + req: "desktop", + label: I18n.t("reports.visits.xaxis.desktop"), + color: report.colors[:turquoise], + data: desktop_data, + }, + { + req: "mobile", + label: I18n.t("reports.visits.xaxis.mobile"), + color: report.colors[:lime], + data: mobile_data, + }, + ] + + report.total = results.first&.total || 0 + + if report.facets.include?(:prev30Days) + report.prev30Days = + UserVisit.where( + "visited_at >= ? AND visited_at < ?", + report.start_date - 30.days, + report.start_date, + ).count + end end end end diff --git a/app/models/emoji.rb b/app/models/emoji.rb index d17a994ceb12f..c44ddd83ff3eb 100644 --- a/app/models/emoji.rb +++ b/app/models/emoji.rb @@ -13,7 +13,7 @@ class Emoji include ActiveModel::SerializerSupport - attr_accessor :name, :url, :tonable, :group, :search_aliases, :created_by + attr_accessor :name, :url, :tonable, :group, :created_by def self.global_emoji_cache @global_emoji_cache ||= DistributedCache.new("global_emoji_cache", namespace: false) @@ -47,6 +47,12 @@ def self.search_aliases search_aliases_db end + def self.locale_search_aliases(locale) + locale = locale.to_s + @locale_search_aliases ||= {} + @locale_search_aliases[locale] ||= load_locale_search_aliases(locale) + end + def self.translations Discourse.cache.fetch(cache_key("translations_emojis")) { load_translations } end @@ -112,7 +118,6 @@ def self.create_from_db_item(emoji) e.tonable = Emoji.tonable_emojis.include?(name) e.url = Emoji.url_for(filename) e.group = group - e.search_aliases = search_aliases[name] || [] end end @@ -140,6 +145,7 @@ def self.clear_cache end global_emoji_cache.clear site_emoji_cache.clear + @locale_search_aliases = nil end def self.groups_file @@ -214,6 +220,19 @@ def self.search_aliases_db @search_aliases_db ||= Emoji.parse_emoji_file(search_aliases_db_file) end + def self.locale_search_aliases_dir + @locale_search_aliases_dir ||= DiscourseEmojis.paths[:locale_search_aliases] + end + + def self.load_locale_search_aliases(locale) + dir = locale_search_aliases_dir + return nil if dir.nil? + file = File.join(dir, "#{locale}.json") + return nil unless File.exist?(file) + Emoji.parse_emoji_file(file) + end + private_class_method :load_locale_search_aliases + def self.load_standard emojis_db.map { |e| Emoji.create_from_db_item(e) }.compact end @@ -308,7 +327,10 @@ def self.unicode_replacements replacements[code] = name if is_tonable_emojis.include?(name) fitzpatrick_scales.each_with_index do |scale, index| - toned_code = code.codepoints.insert(1, scale).pack("U*") + codepoints = code.codepoints + codepoints.delete_at(1) if codepoints[1] == 0xfe0f + + toned_code = codepoints.insert(1, scale).pack("U*") replacements[toned_code] = "#{name}:t#{index + 2}" end end @@ -348,7 +370,10 @@ def self.lookup_unicode(name) map[e["name"]] = code if is_tonable_emojis.include?(e["name"]) FITZPATRICK_SCALE.each_with_index do |scale, index| - toned_code = (code.codepoints.insert(1, scale.to_i(16))).pack("U*") + codepoints = code.codepoints + codepoints.delete_at(1) if codepoints[1] == 0xfe0f + + toned_code = (codepoints.insert(1, scale.to_i(16))).pack("U*") map["#{e["name"]}:t#{index + 2}"] = toned_code end end diff --git a/app/models/group.rb b/app/models/group.rb index e720b05636cc1..cd9d08de22739 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -32,6 +32,7 @@ class Group < ActiveRecord::Base has_many :category_groups, dependent: :destroy has_many :category_moderation_groups, dependent: :destroy + has_many :category_posting_review_groups, dependent: :destroy has_many :group_users, dependent: :destroy has_many :group_requests, dependent: :destroy has_many :group_mentions, dependent: :destroy @@ -819,41 +820,15 @@ def usernames def add(user, notify: false, automatic: false) return false if user.nil? - return self if group_users.exists?(user_id: user.id) - - self.users.push(user) - send_membership_notification(user) if notify - publish_category_updates(user) - trigger_user_added_event(user, automatic) + added_ids = GroupManager.new(self).add([user.id], automatic:) + send_membership_notification(user) if notify && !added_ids.empty? self end def remove(user) return false if user.nil? - group_user = self.group_users.find_by(user: user) - return false if group_user.blank? - - group_user.destroy - publish_category_updates(user) - trigger_user_removed_event(user) - enqueue_user_removed_from_group_webhook_events(group_user) - - true - end - - def enqueue_user_removed_from_group_webhook_events(group_user) - return if !WebHook.active_web_hooks(:group_user) - - payload = WebHook.generate_payload(:group_user, group_user, WebHookGroupUserSerializer) - - WebHook.enqueue_hooks( - :group_user, - :user_removed_from_group, - id: group_user.id, - payload: payload, - group_ids: [self.id], - ) + GroupManager.new(self).remove([user.id]).present? end def trigger_user_added_event(user, automatic) @@ -881,60 +856,12 @@ def self.find_by_email(email) ).first end - def bulk_add(user_ids) - return if user_ids.blank? - - Group.transaction do - sql = <<~SQL - INSERT INTO group_users - (group_id, user_id, created_at, updated_at) - SELECT - #{self.id}, - u.id, - CURRENT_TIMESTAMP, - CURRENT_TIMESTAMP - FROM users AS u - WHERE u.id IN (:user_ids) - AND NOT EXISTS ( - SELECT 1 FROM group_users AS gu - WHERE gu.user_id = u.id AND - gu.group_id = :group_id - ) - SQL - - DB.exec(sql, group_id: self.id, user_ids: user_ids) - - user_attributes = {} - - user_attributes[:primary_group_id] = self.id if self.primary_group? - - user_attributes[:title] = self.title if self.title.present? - - User.where(id: user_ids).update_all(user_attributes) if user_attributes.present? - - # update group user count - recalculate_user_count - end - - if self.grant_trust_level.present? - Jobs.enqueue(:bulk_grant_trust_level, user_ids: user_ids, trust_level: self.grant_trust_level) - end - - self + def bulk_add(user_ids, automatic: false) + GroupManager.new(self).add(user_ids, automatic:) end def bulk_remove(user_ids) - Group.transaction do - group_users_to_be_destroyed = group_users.includes(:user).where(user_id: user_ids).destroy_all - group_users_to_be_destroyed.each do |group_user| - trigger_user_removed_event(group_user.user) - enqueue_user_removed_from_group_webhook_events(group_user) - end - end - - recalculate_user_count - - true + GroupManager.new(self).remove(user_ids) end def recalculate_user_count @@ -1244,26 +1171,6 @@ def send_membership_notification(user) ) end - def publish_category_updates(user) - if categories.count < PUBLISH_CATEGORIES_LIMIT - guardian = Guardian.new(user) - group_categories = categories.map { |c| Category.set_permission!(guardian, c) } - updated_categories = group_categories.select(&:permission) - removed_category_ids = group_categories.reject(&:permission).map(&:id) - - MessageBus.publish( - "/categories", - { - categories: ActiveModel::ArraySerializer.new(updated_categories).as_json, - deleted_categories: removed_category_ids, - }, - user_ids: [user.id], - ) - else - Discourse.request_refresh!(user_ids: [user.id]) - end - end - def validate_grant_trust_level unless TrustLevel.valid?(self.grant_trust_level) self.errors.add( diff --git a/app/models/group_user.rb b/app/models/group_user.rb index 4772dff448400..dddd915f2d5ae 100644 --- a/app/models/group_user.rb +++ b/app/models/group_user.rb @@ -138,37 +138,7 @@ def set_category_notifications end def self.set_category_notifications(group, user) - group_levels = - group - .group_category_notification_defaults - .each_with_object({}) do |r, h| - h[r.notification_level] ||= [] - h[r.notification_level] << r.category_id - end - - return if group_levels.empty? - - user_levels = - CategoryUser - .where(user_id: user.id) - .each_with_object({}) do |r, h| - h[r.notification_level] ||= [] - h[r.notification_level] << r.category_id - end - - higher_level_category_ids = user_levels.values.flatten - - %i[muted regular tracking watching_first_post watching].each do |level| - level_num = NotificationLevels.all[level] - higher_level_category_ids -= (user_levels[level_num] || []) - if group_category_ids = group_levels[level_num] - CategoryUser.batch_set( - user, - level, - group_category_ids + (user_levels[level_num] || []) - higher_level_category_ids, - ) - end - end + bulk_set_category_notifications(group, [user.id]) end def set_tag_notifications @@ -176,37 +146,52 @@ def set_tag_notifications end def self.set_tag_notifications(group, user) - group_levels = - group - .group_tag_notification_defaults - .each_with_object({}) do |r, h| - h[r.notification_level] ||= [] - h[r.notification_level] << r.tag_id - end - - return if group_levels.empty? - - user_levels = - TagUser - .where(user_id: user.id) - .each_with_object({}) do |r, h| - h[r.notification_level] ||= [] - h[r.notification_level] << r.tag_id - end - - higher_level_tag_ids = user_levels.values.flatten - - %i[muted regular tracking watching_first_post watching].each do |level| - level_num = NotificationLevels.all[level] - higher_level_tag_ids -= (user_levels[level_num] || []) - if group_tag_ids = group_levels[level_num] - TagUser.batch_set( - user, - level, - group_tag_ids + (user_levels[level_num] || []) - higher_level_tag_ids, - ) - end + bulk_set_tag_notifications(group, [user.id]) + end + + def self.bulk_set_category_notifications(group, user_ids) + defaults = group.group_category_notification_defaults.to_a + return if defaults.empty? + + defaults.each do |default| + DB.exec( + <<~SQL, + INSERT INTO category_users (user_id, category_id, notification_level) + SELECT unnest(ARRAY[:user_ids]::int[]), :category_id, :notification_level + ON CONFLICT (user_id, category_id) DO UPDATE + SET notification_level = #{semantically_higher_notification_level_sql("EXCLUDED.notification_level", "category_users.notification_level")} + SQL + user_ids: user_ids, + category_id: default.category_id, + notification_level: default.notification_level, + ) end + + CategoryUser.auto_watch(user_ids: user_ids) + CategoryUser.auto_track(user_ids: user_ids) + end + + def self.bulk_set_tag_notifications(group, user_ids) + defaults = group.group_tag_notification_defaults.to_a + return if defaults.empty? + + defaults.each do |default| + DB.exec( + <<~SQL, + INSERT INTO tag_users (user_id, tag_id, notification_level, created_at, updated_at) + SELECT unnest(ARRAY[:user_ids]::int[]), :tag_id, :notification_level, NOW(), NOW() + ON CONFLICT (user_id, tag_id) DO UPDATE + SET notification_level = #{semantically_higher_notification_level_sql("EXCLUDED.notification_level", "tag_users.notification_level")}, + updated_at = NOW() + SQL + user_ids: user_ids, + tag_id: default.tag_id, + notification_level: default.notification_level, + ) + end + + TagUser.auto_watch(user_ids: user_ids) + TagUser.auto_track(user_ids: user_ids) end def increase_group_user_count @@ -216,6 +201,18 @@ def increase_group_user_count def decrease_group_user_count Group.decrement_counter(:user_count, self.group_id) end + + def self.semantically_higher_notification_level_sql(new_col, existing_col) + <<~SQL.squish + CASE + WHEN (CASE #{new_col} WHEN 3 THEN 5 ELSE #{new_col} END) >= + (CASE #{existing_col} WHEN 3 THEN 5 ELSE #{existing_col} END) + THEN #{new_col} + ELSE #{existing_col} + END + SQL + end + private_class_method :semantically_higher_notification_level_sql end # == Schema Information diff --git a/app/models/notification.rb b/app/models/notification.rb index 7d4cf76e1e437..35436e33b8956 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -167,6 +167,7 @@ def self.types following_created_topic: 801, # Used by https://github.com/discourse/discourse-follow following_replied: 802, # Used by https://github.com/discourse/discourse-follow circles_activity: 900, # Used by https://github.com/discourse/discourse-circles + boost: 43, # Used by https://github.com/discourse/discourse-boosts ) end @@ -279,7 +280,7 @@ def data_hash end def url - topic.relative_url(post_number) if topic.present? + topic.presence&.relative_url(post_number) end def post @@ -383,7 +384,7 @@ def self.recent_report(user, count = nil, types = []) end def self.populate_acting_user(notifications) - if !(SiteSetting.show_user_menu_avatars || SiteSetting.prioritize_full_name_in_ux) + if !(SiteSetting.show_user_menu_avatars || !SiteSetting.prioritize_username_in_ux) return notifications end usernames = diff --git a/app/models/post.rb b/app/models/post.rb index e64e3a8c5a5cd..a5e64d658fd85 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -399,7 +399,7 @@ def total_hosts_usage hosts = linked_hosts.clone allowlisted = allowed_spam_hosts - hosts.reject! { |h| allowlisted.any? { |w| h.end_with?(w) } } + hosts.reject! { |h| allowlisted.any? { |w| h == w || h.end_with?(".#{w}") } } return hosts if hosts.length == 0 @@ -1187,10 +1187,6 @@ def mentions PrettyText.extract_mentions(Nokogiri::HTML5.fragment(cooked)) end - def has_localization?(locale = I18n.locale) - get_localization(locale).present? - end - private def access_control_post_id_for_upload diff --git a/app/models/post_action.rb b/app/models/post_action.rb index 226420de27654..977d85620f97a 100644 --- a/app/models/post_action.rb +++ b/app/models/post_action.rb @@ -102,7 +102,7 @@ def add_moderator_post_if_needed(moderator, disposition, delete_post = false) message_key << "_and_deleted" if delete_post I18n.with_locale(SiteSetting.default_locale) do - related_post.topic.add_moderator_post(moderator, I18n.t(message_key)) + related_post.topic.add_moderator_post(moderator, I18n.t(message_key), bump: true) end # archive message for moderators diff --git a/app/models/private_message_topic_tracking_state.rb b/app/models/private_message_topic_tracking_state.rb index 14518158fe7df..d50069b3182c8 100644 --- a/app/models/private_message_topic_tracking_state.rb +++ b/app/models/private_message_topic_tracking_state.rb @@ -92,6 +92,7 @@ def self.report_raw_sql(user, skip_unread: false, skip_new: false) topics.archetype = 'private_message' AND ((#{unread}) OR (#{new})) AND topics.deleted_at IS NULL + #{user.staff? ? "" : "AND topics.visible"} SQL end @@ -104,7 +105,7 @@ def self.publish_unread(post) allowed_group_ids = topic.allowed_groups.pluck(:id) group_ids = - if post.post_type == Post.types[:whisper] + if post.post_type == Post.types[:whisper] || post.post_type == Post.types[:small_action] [Group::AUTO_GROUPS[:staff]] else allowed_group_ids diff --git a/app/models/remote_theme.rb b/app/models/remote_theme.rb index de5c83c3dbdfd..95eadfb6b40b3 100644 --- a/app/models/remote_theme.rb +++ b/app/models/remote_theme.rb @@ -84,11 +84,16 @@ def self.update_zipped_theme( ) end - def self.import_theme_from_directory(directory, theme_id: nil) + def self.import_theme_from_directory( + directory, + theme_id: nil, + allow_out_of_sequence_migration: false + ) update_theme( ThemeStore::DirectoryImporter.new(directory), update_components: "none", theme_id: theme_id, + allow_out_of_sequence_migration: allow_out_of_sequence_migration, ) end @@ -97,7 +102,8 @@ def self.update_theme( user: Discourse.system_user, theme_id: nil, update_components: nil, - run_migrations: true + run_migrations: true, + allow_out_of_sequence_migration: false ) importer.import! @@ -132,6 +138,7 @@ def self.update_theme( skip_update: true, already_in_transaction: true, run_migrations:, + allow_out_of_sequence_migration:, ) if existing && update_components.present? && update_components != "none" @@ -236,7 +243,8 @@ def update_from_remote( skip_update: false, raise_if_theme_save_fails: true, already_in_transaction: false, - run_migrations: true + run_migrations: true, + allow_out_of_sequence_migration: false ) cleanup = false @@ -390,7 +398,12 @@ def update_from_remote( create_theme_site_settings(theme, theme_info["theme_site_settings"]) - theme.migrate_settings(start_transaction: false) if run_migrations + if run_migrations + theme.migrate_settings( + start_transaction: false, + allow_out_of_sequence_migration: allow_out_of_sequence_migration, + ) + end end if already_in_transaction @@ -480,7 +493,16 @@ def update_theme_color_schemes(theme, schemes) ColorScheme.unscoped.where(id: to_be_deleted_ids).destroy_all end - theme.color_scheme = ordered_schemes.first if theme.new_record? + if theme.new_record? && ordered_schemes.present? + if theme.theme_modifier_set.only_theme_color_schemes + light = ordered_schemes.find { |s| !s.is_dark? } || ordered_schemes.first + dark = ordered_schemes.find { |s| s.is_dark? } || ordered_schemes.first + theme.color_scheme = light + theme.dark_color_scheme = dark + else + theme.color_scheme = ordered_schemes.first + end + end end def create_theme_site_settings(theme, theme_site_settings) diff --git a/app/models/report.rb b/app/models/report.rb index 4f90d1e46d153..2920e472c8971 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -14,6 +14,7 @@ class Report trust_level file_extension include_subcategories + hidden_labels ] MODES = { @@ -54,17 +55,29 @@ def self.hidden?(type, admin:) } LEGACY_REPORTS = %w[ + associated_accounts_by_provider bookmarks + consolidated_api_requests + flags + flags_status likes moderator_warning_private_messages + mobile_visits notify_moderators_private_messages notify_user_private_messages post_edits profile_views + reactions + suspicious_logins system_private_messages + top_referrers top_users_by_likes_received_from_inferior_trust_level top_users_by_likes_received_from_a_variety_of_people + trust_level_growth + user_flagging_ratio user_to_user_private_messages + web_crawlers + web_hook_events_daily_aggregate ] include Reports::AssociatedAccountsByProvider @@ -138,7 +151,10 @@ def self.hidden?(type, admin:) :secondary_color, :filters, :available_filters, - :legacy + :legacy, + :default_group_by, + :y_axis_title, + :current_user def self.default_days 30 @@ -180,6 +196,7 @@ def self.cache_key(report) report.limit, report.filters.blank? ? nil : MultiJson.dump(report.filters), SCHEMA_VERSION, + report.current_user&.id, ].compact.map(&:to_s).join(":") end @@ -266,6 +283,8 @@ def as_json(options = nil) json[:prev_period] = self.prev_period if self.prev_period json[:prev30Days] = self.prev30Days if self.prev30Days json[:limit] = self.limit if self.limit + json[:default_group_by] = self.default_group_by if self.default_group_by + json[:y_axis_title] = self.y_axis_title if self.y_axis_title if type == "page_view_crawler_reqs" json[:related_report] = Report.find( @@ -298,6 +317,7 @@ def self._get(type, opts = nil) report.average = opts[:average] if opts[:average] report.percent = opts[:percent] if opts[:percent] report.filters = opts[:filters] if opts[:filters] + report.current_user = opts[:current_user] if opts[:current_user] report.labels = Report.default_labels report.legacy = LEGACY_REPORTS.include?(type) if SiteSetting.reporting_improvements diff --git a/app/models/reviewable.rb b/app/models/reviewable.rb index 0653d624506a8..a60413ebbca77 100644 --- a/app/models/reviewable.rb +++ b/app/models/reviewable.rb @@ -227,7 +227,11 @@ def add_score( rs.reason = reason.to_s if reason rs.save! - update(score: self.score + rs.score, latest_score: rs.created_at, force_review: force_review) + update( + score: self.score + rs.score, + latest_score: rs.created_at, + force_review: self.force_review || force_review, + ) topic.update(reviewable_score: topic.reviewable_score + rs.score) if topic # Flags are cached for performance reasons. diff --git a/app/models/reviewable_queued_post.rb b/app/models/reviewable_queued_post.rb index c32856bf2102c..4442751228c6d 100644 --- a/app/models/reviewable_queued_post.rb +++ b/app/models/reviewable_queued_post.rb @@ -154,6 +154,20 @@ def perform_reject_post(performed_by, args) end def perform_revise_and_reject_post(performed_by, args) + has_contact_user = SiteSetting.site_contact_username.present? + is_new_topic = self.topic.blank? + + edit_instructions_key = + if is_new_topic && has_contact_user + "system_messages.reviewable_queued_post_revise_and_reject_edit_topic" + elsif is_new_topic + "system_messages.reviewable_queued_post_revise_and_reject_edit_topic_no_reply" + elsif has_contact_user + "system_messages.reviewable_queued_post_revise_and_reject_edit_post" + else + "system_messages.reviewable_queued_post_revise_and_reject_edit_post_no_reply" + end + pm_translation_args = { topic_title: self.topic&.title || self.payload["title"], topic_url: self.topic&.url, @@ -161,11 +175,14 @@ def perform_revise_and_reject_post(performed_by, args) feedback: args[:revise_feedback], original_post: self.payload["raw"], site_name: SiteSetting.title, + edit_instructions: + I18n.t(edit_instructions_key, locale: self.target_created_by.effective_locale), } + SystemMessage.create( self.target_created_by, ( - if self.topic.blank? + if is_new_topic :reviewable_queued_post_revise_and_reject_new_topic else :reviewable_queued_post_revise_and_reject diff --git a/app/models/tag_localization.rb b/app/models/tag_localization.rb index 324c060021605..8ee4031f97fc2 100644 --- a/app/models/tag_localization.rb +++ b/app/models/tag_localization.rb @@ -5,10 +5,18 @@ class TagLocalization < ActiveRecord::Base belongs_to :tag + before_validation :clean_name + validates :locale, presence: true, length: { maximum: 20 } validates :name, presence: true validates :tag_id, uniqueness: { scope: :locale } validates :description, length: { maximum: 1000 } + + private + + def clean_name + self.name = DiscourseTagging.clean_tag(name) if name.present? + end end # == Schema Information diff --git a/app/models/tag_user.rb b/app/models/tag_user.rb index a8a9fc6e588c1..ac0843d13169c 100644 --- a/app/models/tag_user.rb +++ b/app/models/tag_user.rb @@ -112,18 +112,18 @@ def self.change(user_id, tag_id, level) tag_id = tag_id.to_i user_id = user_id.to_i - tag_user = TagUser.where(user_id: user_id, tag_id: tag_id).first + tag_user = TagUser.where(user_id:, tag_id:).first if tag_user return tag_user if tag_user.notification_level == level tag_user.notification_level = level tag_user.save else - tag_user = TagUser.create(user_id: user_id, tag_id: tag_id, notification_level: level) + tag_user = TagUser.create(user_id:, tag_id:, notification_level: level) end - auto_watch(user_id: user_id) - auto_track(user_id: user_id) + auto_watch(user_id:) + auto_track(user_id:) tag_user rescue ActiveRecord::RecordNotUnique @@ -133,87 +133,74 @@ def self.change(user_id, tag_id, level) def self.auto_watch(opts) builder = DB.build <<~SQL UPDATE topic_users - SET notification_level = CASE WHEN should_watch THEN :watching ELSE :tracking END, - notifications_reason_id = CASE WHEN should_watch THEN :auto_watch_tag ELSE NULL END - FROM - ( - SELECT tu.topic_id, tu.user_id, CASE - WHEN MAX(tag_users.notification_level) = :watching THEN true - ELSE false - END - should_watch, - - CASE WHEN MAX(tag_users.notification_level) IS NULL AND - tu.notification_level = :watching AND - tu.notifications_reason_id = :auto_watch_tag - THEN true - ELSE false - END - should_track - - FROM topic_users tu - LEFT JOIN topic_tags ON tu.topic_id = topic_tags.topic_id - LEFT JOIN tag_users ON tag_users.user_id = tu.user_id - AND topic_tags.tag_id = tag_users.tag_id - AND tag_users.notification_level = :watching - /*where*/ - GROUP BY tu.topic_id, tu.user_id, tu.notification_level, tu.notifications_reason_id - ) AS X - WHERE X.topic_id = topic_users.topic_id AND - X.user_id = topic_users.user_id AND - (should_track OR should_watch) - + SET notification_level = CASE WHEN should_watch THEN :watching ELSE :tracking END + , notifications_reason_id = CASE WHEN should_watch THEN :auto_watch_tag ELSE NULL END + FROM ( + SELECT tu.topic_id + , tu.user_id + , CASE WHEN MAX(tag_users.notification_level) = :watching THEN true ELSE false END should_watch + , CASE WHEN MAX(tag_users.notification_level) IS NULL AND tu.notification_level = :watching AND tu.notifications_reason_id = :auto_watch_tag THEN true ELSE false END should_track + FROM topic_users tu + LEFT JOIN topic_tags ON tu.topic_id = topic_tags.topic_id + LEFT JOIN tag_users ON tag_users.user_id = tu.user_id AND topic_tags.tag_id = tag_users.tag_id AND tag_users.notification_level = :watching + /*where*/ + GROUP BY tu.topic_id, tu.user_id, tu.notification_level, tu.notifications_reason_id + ) AS X + WHERE X.topic_id = topic_users.topic_id + AND X.user_id = topic_users.user_id + AND (should_track OR should_watch) SQL - builder.where("tu.notification_level in (:tracking, :regular, :watching)") + builder.where("tu.notification_level IN (:tracking, :regular, :watching)") + builder.where("COALESCE(tu.notifications_reason_id, 0) != :user_changed") if topic_id = opts[:topic_id] - builder.where("tu.topic_id = :topic_id", topic_id: topic_id) + builder.where("tu.topic_id = :topic_id", topic_id:) end - if user_id = opts[:user_id] - builder.where("tu.user_id = :user_id", user_id: user_id) - end + user_ids = opts[:user_ids] || opts[:user_id] + builder.where("tu.user_id IN (:user_ids)", user_ids:) if user_ids.present? builder.exec( watching: notification_levels[:watching], tracking: notification_levels[:tracking], regular: notification_levels[:regular], auto_watch_tag: TopicUser.notification_reasons[:auto_watch_tag], + user_changed: TopicUser.notification_reasons[:user_changed], ) end def self.auto_track(opts) builder = DB.build <<~SQL UPDATE topic_users - SET notification_level = :tracking, notifications_reason_id = :auto_track_tag - FROM ( - SELECT DISTINCT tu.topic_id, tu.user_id - FROM topic_users tu - JOIN topic_tags ON tu.topic_id = topic_tags.topic_id - JOIN tag_users ON tag_users.user_id = tu.user_id - AND topic_tags.tag_id = tag_users.tag_id - AND tag_users.notification_level = :tracking - /*where*/ - ) as X - WHERE - topic_users.notification_level = :regular AND - topic_users.topic_id = X.topic_id AND - topic_users.user_id = X.user_id + SET notification_level = :tracking + , notifications_reason_id = :auto_track_tag + FROM ( + SELECT DISTINCT tu.topic_id + , tu.user_id + FROM topic_users tu + JOIN topic_tags ON tu.topic_id = topic_tags.topic_id + JOIN tag_users ON tag_users.user_id = tu.user_id AND topic_tags.tag_id = tag_users.tag_id AND tag_users.notification_level = :tracking + /*where*/ + ) AS X + WHERE topic_users.notification_level = :regular + AND COALESCE(topic_users.notifications_reason_id, 0) != :user_changed + AND topic_users.topic_id = X.topic_id + AND topic_users.user_id = X.user_id SQL if topic_id = opts[:topic_id] - builder.where("tu.topic_id = :topic_id", topic_id: topic_id) + builder.where("tu.topic_id = :topic_id", topic_id:) end - if user_id = opts[:user_id] - builder.where("tu.user_id = :user_id", user_id: user_id) - end + user_ids = opts[:user_ids] || opts[:user_id] + builder.where("tu.user_id IN (:user_ids)", user_ids:) if user_ids.present? builder.exec( tracking: notification_levels[:tracking], regular: notification_levels[:regular], auto_track_tag: TopicUser.notification_reasons[:auto_track_tag], + user_changed: TopicUser.notification_reasons[:user_changed], ) end diff --git a/app/models/theme.rb b/app/models/theme.rb index 08617ba9b6017..778a876f1f48a 100644 --- a/app/models/theme.rb +++ b/app/models/theme.rb @@ -6,7 +6,6 @@ class Theme < ActiveRecord::Base include GlobalPath - BASE_COMPILER_VERSION = 101 CORE_THEMES = { "foundation" => -1, "horizon" => -2 } EDITABLE_SYSTEM_ATTRIBUTES = %w[ child_theme_ids @@ -32,7 +31,7 @@ class InvalidFieldTypeError < StandardError attr_accessor :skip_child_components_update def self.cache - @cache ||= DistributedCache.new("theme:compiler:#{BASE_COMPILER_VERSION}") + @cache ||= DistributedCache.new("theme:compiler:#{AssetProcessor::BASE_COMPILER_VERSION}") end belongs_to :user @@ -121,6 +120,7 @@ def self.cache :user, :locale_fields, :theme_translation_overrides, + :theme_modifier_set, color_scheme: %i[theme color_scheme_colors base_scheme], parent_themes: %i[color_scheme locale_fields theme_translation_overrides], ) @@ -243,13 +243,14 @@ def update_javascript_cache! def self.compiler_version get_set_cache "compiler_version" do dependencies = [ - BASE_COMPILER_VERSION, - AssetProcessor.new.ember_version, + AssetProcessor::BASE_COMPILER_VERSION, + AssetProcessor.ember_version, GlobalSetting.cdn_url, GlobalSetting.s3_cdn_url, GlobalSetting.s3_endpoint, GlobalSetting.s3_bucket, Discourse.current_hostname, + ENV["ROLLUP_PLUGIN_COMPILER"], ] Digest::SHA1.hexdigest(dependencies.join) end diff --git a/app/models/theme_field.rb b/app/models/theme_field.rb index 6901f43d05005..01c136f979306 100644 --- a/app/models/theme_field.rb +++ b/app/models/theme_field.rb @@ -127,92 +127,8 @@ def process_html(html) errors = [] errors << I18n.t("themes.errors.optimized_link") if contains_optimized_link?(html) - js_tree = {} - js_errors = [] - deprecated_template_names = [] - doc = Nokogiri::HTML5.fragment(html) - doc - .css('script[type="text/x-handlebars"]') - .each do |node| - name = node["name"] || node["data-template-name"] || "broken" - is_raw = name =~ /\.(raw|hbr)\z/ - hbs_template = node.inner_html - - if is_raw - js_errors.push( - "[THEME #{theme.id}] [discourse/templates/#{name}] Raw templates are no longer supported", - ) - else - js_tree["discourse/templates/#{name.delete_prefix("/")}.hbs"] = hbs_template - deprecated_template_names << name - end - - node.remove - end - - if deprecated_template_names.present? || js_errors.present? - js = <<~JS - import deprecated from "discourse/lib/deprecated"; - - export default { - initialize(){ - const names = #{deprecated_template_names.to_json}; - names.forEach((name) => { - deprecated( - `[${name}] adding templates to a theme using + <%- plugin_assets.each do |asset| %> - <%= preload_script asset[:name] %> + <% if asset[:type_module] %> + + > + <% else %> + <%= preload_script asset[:name], attrs: asset[:plugin_attributes] %> + <% end %> + <%- end %> + + <%- plugin_assets.flat_map { it[:imports] }.compact.uniq.each do |import| %> + <%- end %> <%- end %> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 5b07af6a4ce46..78559d5d53988 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -21,6 +21,14 @@ <%- end %> + <%= render("layouts/plugin_js", opts: { + include_official: allow_plugins?, + include_unofficial: allow_third_party_plugins?, + request: request, + include_admin_asset: staff? + }) if ENV["ROLLUP_PLUGIN_COMPILER"] != "0" + %> + <%= build_plugin_html 'server:before-script-load' %> <% add_resource_preload_list(script_asset_path("start-discourse"), "script") %> @@ -47,12 +55,13 @@ <%= preload_script "vendor" %> <%= preload_script "discourse" %> - <%= render "layouts/plugin_js", opts: { + + <%= render("layouts/plugin_js", opts: { include_official: allow_plugins?, include_unofficial: allow_third_party_plugins?, request: request, include_admin_asset: staff? - } + }) if ENV["ROLLUP_PLUGIN_COMPILER"] == "0" %> <%- if staff? %> diff --git a/app/views/list/list.erb b/app/views/list/list.erb index 60b6c4631bbf2..30a3f9d31a31b 100644 --- a/app/views/list/list.erb +++ b/app/views/list/list.erb @@ -133,7 +133,11 @@ <% if @rss %> <% content_for :head do %> <%= auto_discovery_link_tag(:rss, "#{Discourse.base_url}/posts.rss", title: I18n.t("rss_description.posts")) %> - <%= auto_discovery_link_tag(:rss, { action: "#{@rss}_feed", params: @params || {} }, title: I18n.t("rss_description.#{@rss_description}")) %> + <% if @rss_link %> + <%= auto_discovery_link_tag(:rss, @rss_link, title: I18n.t("rss_description.#{@rss_description}")) %> + <% else %> + <%= auto_discovery_link_tag(:rss, { action: "#{@rss}_feed", params: @params || {} }, title: I18n.t("rss_description.#{@rss_description}")) %> + <% end %> <% end %> <% end %> diff --git a/app/views/qunit/theme.html.erb b/app/views/qunit/theme.html.erb index 4c7e90878583b..178ea9bffd8fc 100644 --- a/app/views/qunit/theme.html.erb +++ b/app/views/qunit/theme.html.erb @@ -14,7 +14,7 @@ <%= preload_script "test-support" %> <%= preload_script "discourse" %> <%= preload_script "test" %> - <%= render "layouts/plugin_js", + <%= render "layouts/plugin_js", opts: { include_disabled: true, include_admin_asset: true, diff --git a/app/views/topics/show.html.erb b/app/views/topics/show.html.erb index f762e512ddc8f..31975d63df800 100644 --- a/app/views/topics/show.html.erb +++ b/app/views/topics/show.html.erb @@ -34,22 +34,30 @@ <%= server_plugin_outlet "topic_header" %> <%- if include_crawler_content? %> -
- + <% main_entity_schema = crawler_topic_main_entity_schema(@topic_view.topic) %> +
> + - <% if @topic_view.topic.category.present? %> - - <% end %> '> -
- - <% if application_logo_url.present? %> -
- -
+ <% unless main_entity_schema %> + <% if @topic_view.topic.category.present? %> + <% end %> -
+
+ + <% if application_logo_url.present? %> +
+ +
+ <% end %> +
+ <% end %> + + <% if main_entity_schema %> +
> + <%= build_plugin_html 'server:topic-main-entity-meta-crawler' %> + <% end %> <% if @topic_view.crawler_posts&.first && !@topic_view.crawler_posts.first.is_first_post? %> <% if @topic_view.topic.user.present? %> @@ -63,7 +71,7 @@ <% @topic_view.crawler_posts.each do |post| %> <% if (u = post.user) && !post.hidden && post.cooked && !post.cooked.strip.empty? %> -
class='topic-body crawler-post'> +
class='topic-body crawler-post'> <% end %> <% end %> + + <% if main_entity_schema %> +
+ <% end %>
<% if @topic_view.single_post_request? || @topic_view.prev_page || @topic_view.next_page %> diff --git a/app/views/user_api_keys/show.html.erb b/app/views/user_api_keys/show.html.erb index 7d657efe09e5d..fdf331a13a9ce 100644 --- a/app/views/user_api_keys/show.html.erb +++ b/app/views/user_api_keys/show.html.erb @@ -1,2 +1,23 @@

<%= t("user_api_key.instructions", application_name: @application_name) %>

-<%= @payload %> +
+ <%= @payload %> +
+
+ +
+ + diff --git a/app/views/user_notifications/digest/_footer.html.erb b/app/views/user_notifications/digest/_footer.html.erb index 7ffc059023ee2..bdfbb7f4e00c0 100644 --- a/app/views/user_notifications/digest/_footer.html.erb +++ b/app/views/user_notifications/digest/_footer.html.erb @@ -3,10 +3,12 @@
diff --git a/app/views/user_notifications/digest/_footer.text.erb b/app/views/user_notifications/digest/_footer.text.erb index 92db8e32127d4..c9a85a90584b7 100644 --- a/app/views/user_notifications/digest/_footer.text.erb +++ b/app/views/user_notifications/digest/_footer.text.erb @@ -3,10 +3,12 @@ <%= raw(@markdown_linker.references) %> <%= digest_custom_text("above_footer") %> -<%=raw(t :'user_notifications.digest.unsubscribe', - site_link: site_link, - email_preferences_link: raw(@markdown_linker.create(t('user_notifications.digest.your_email_settings'), '/my/preferences/emails')), - unsubscribe_link: raw(@markdown_linker.create(t('user_notifications.digest.click_here'), "/email/unsubscribe/#{@unsubscribe_key}"))) %> +<%- if @unsubscribe_key %> + <%=raw(t :'user_notifications.digest.unsubscribe', + site_link: site_link, + email_preferences_link: raw(@markdown_linker.create(t('user_notifications.digest.your_email_settings'), '/my/preferences/emails')), + unsubscribe_link: raw(@markdown_linker.create(t('user_notifications.digest.click_here'), "/email/unsubscribe/#{@unsubscribe_key}"))) %> +<%- end %> <%= raw(@markdown_linker.references) %> diff --git a/app/views/users/bookmarks.ics.erb b/app/views/users/bookmarks.ics.erb index 2c80cc951b85c..53862fe54781f 100644 --- a/app/views/users/bookmarks.ics.erb +++ b/app/views/users/bookmarks.ics.erb @@ -1,15 +1,16 @@ BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Discourse//<%= Discourse.current_hostname %>//<%= Discourse.full_version %>//EN +X-WR-CALNAME:<%= IcalEncoder.encode(@calendar_name) %> <% @bookmark_reminders.each do |bookmark| %> BEGIN:VEVENT UID:bookmark_reminder_#<%= bookmark.id %>@<%= Discourse.current_hostname %> DTSTAMP:<%= bookmark.updated_at.strftime(I18n.t("datetime_formats.formats.calendar_ics")) %> DTSTART:<%= bookmark.reminder_at_ics_start %> DTEND:<%= bookmark.reminder_at_ics_end %> -SUMMARY:<%= bookmark.name.presence || bookmark.title %> -DESCRIPTION:<%= bookmark.bookmarkable_url %> -URL:<%= bookmark.bookmarkable_url %> +SUMMARY:<%= IcalEncoder.encode(bookmark.name.presence || bookmark.title) %> +DESCRIPTION:<%= IcalEncoder.encode(bookmark.bookmarkable_url) %> +URL:<%= IcalEncoder.encode(bookmark.bookmarkable_url) %> END:VEVENT <% end %> END:VCALENDAR diff --git a/bin/docker/boot_dev b/bin/docker/boot_dev index 0e9c5ce7d5d1c..bcef680d91555 100755 --- a/bin/docker/boot_dev +++ b/bin/docker/boot_dev @@ -85,7 +85,6 @@ done [[ ! -z "$mount_plugin_symlinks" ]] && echo "Mounting symlinks for plugins: ${mount_plugin_symlinks}" # 8025 mailhog -# 3000 puma... if you must (but unicorn is preferred) # 9292 unicorn # 9405 prometheus exporter diff --git a/bin/docker/unicorn b/bin/docker/unicorn deleted file mode 100755 index 6dd548e124272..0000000000000 --- a/bin/docker/unicorn +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -exec "$(dirname "$0")/exec" bin/unicorn "$@" diff --git a/bin/ember-cli b/bin/ember-cli index a45adc3d228cc..57851a0843c54 100755 --- a/bin/ember-cli +++ b/bin/ember-cli @@ -7,7 +7,7 @@ require "open3" RAILS_ROOT = File.expand_path("../../", Pathname.new(__FILE__).realpath) PORT = ENV["UNICORN_PORT"] ||= "3000" HOSTNAME = ENV["DISCOURSE_HOSTNAME"] ||= "127.0.0.1" -CUSTOM_ARGS = %w[--try --test --build --unicorn -u --forward-host] +CUSTOM_ARGS = %w[--try --test --build --server --unicorn -u --forward-host] PROXY = if ARGV.include?("--try") "https://try.discourse.org" @@ -44,7 +44,7 @@ if ARGV.include?("-h") || ARGV.include?("--help") puts "ember-cli OPTIONS" puts "#{"--try".cyan} To proxy try.discourse.org" puts "#{"--test".cyan} To run the test suite" - puts "#{"--unicorn, -u".cyan} To run a unicorn server as well" + puts "#{"--server, -u".cyan} To run a server as well" puts "The rest of the arguments are passed to ember server per:", "" exec "pnpm ember #{command} --help" end @@ -79,11 +79,11 @@ pnpm_env = { } pnpm_env["FORWARD_HOST"] = "true" if ARGV.include?("--forward-host") -if ARGV.include?("-u") || ARGV.include?("--unicorn") - unicorn_env = { "DISCOURSE_PORT" => ENV["DISCOURSE_PORT"] || "4200" } +if ARGV.include?("-u") || ARGV.include?("--server") || ARGV.include?("--unicorn") + server_env = { "DISCOURSE_PORT" => ENV["DISCOURSE_PORT"] || "4200" } if command == "server" && ENV["CODESPACE_NAME"] - unicorn_env.merge!( + server_env.merge!( { "DISCOURSE_PORT" => "443", "DISCOURSE_FORCE_HTTPS" => "1", @@ -93,10 +93,9 @@ if ARGV.include?("-u") || ARGV.include?("--unicorn") ) end - server_name = ENV["RUN_PITCHFORK"] == "0" ? "unicorn" : "pitchfork" - unicorn_pid = spawn(unicorn_env, "#{__dir__}/#{server_name}") + server_pid = spawn(server_env, "#{__dir__}/pitchfork") ember_cli_pid = nil - tsc_pid = nil + sigint_received = false Thread.new do Open3.popen2e(pnpm_env, "pnpm", *args.to_a.flatten) do |i, oe, t| @@ -111,47 +110,51 @@ if ARGV.include?("-u") || ARGV.include?("--unicorn") end end end - if process_running?(unicorn_pid) - puts "[bin/ember-cli] ember-cli process stopped. Terminating unicorn." - Process.kill("TERM", unicorn_pid) + # Only send TERM to the server if ember exited on its own (not from + # Ctrl+C). When the user presses Ctrl+C, all processes in the foreground + # group already received INT directly from the terminal. Sending an + # additional TERM races with the server's hard shutdown and can cause it + # to fall back to a slow graceful shutdown, making the process appear + # stuck for up to 60 seconds. + if !sigint_received && process_running?(server_pid) + puts "[bin/ember-cli] ember-cli process stopped. Terminating server." + Process.kill("TERM", server_pid) end end - Thread.new do - Open3.popen2e( - pnpm_env, - "pnpm", - "ember-tsc", - "-b", - "--watch", - "--preserveWatchOutput", - ) do |i, oe, t| - tsc_pid = t.pid - puts "Ember TSC running on PID: #{tsc_pid}" - oe.each { |line| puts "[ember-tsc] #{line}" } - end - if process_running?(unicorn_pid) - puts "[bin/ember-cli] ember-tsc process stopped. Terminating unicorn." - Process.kill("TERM", unicorn_pid) + int_count = 0 + trap("INT") do + sigint_received = true + int_count += 1 + case int_count + when 1 + # Swallowed to give children time to handle it + when 2 + puts "\n[bin/ember-cli] Interrupt again to force shutdown..." + else + puts "\n[bin/ember-cli] Forcing shutdown..." + begin + Process.kill("KILL", server_pid) + rescue StandardError + nil + end + if ember_cli_pid + begin + Process.kill("KILL", ember_cli_pid) + rescue StandardError + nil + end + end + exit!(1) end end - trap("SIGINT") do - # we got to swallow sigint to give time for - # children to handle it - end - - Process.wait(unicorn_pid) + Process.wait(server_pid) if ember_cli_pid && process_running?(ember_cli_pid) - puts "[bin/ember-cli] unicorn process stopped. Terminating ember-cli." + puts "[bin/ember-cli] server process stopped. Terminating ember-cli." Process.kill("TERM", ember_cli_pid) end - - if tsc_pid && process_running?(tsc_pid) - puts "[bin/ember-cli] unicorn process stopped. Terminating ember-tsc." - Process.kill("TERM", tsc_pid) - end else exec(pnpm_env, "pnpm", *args.to_a.flatten) end diff --git a/bin/lint b/bin/lint index 58790e8e3c9ac..1f2d8c5b9e15f 100755 --- a/bin/lint +++ b/bin/lint @@ -4,7 +4,6 @@ require "optparse" require "open3" require "shellwords" -require "yaml" require "pathname" class LefthookLinter @@ -49,7 +48,17 @@ class LefthookLinter end files - .map { |f| normalize_relative_path(f) } + .flat_map do |f| + path = normalize_relative_path(f) + if File.directory?(path) + expanded = + Dir.glob(File.join(path, "**", "*")).select { |g| File.file?(g) && lintable_file?(g) } + abort "Error: No lintable files found in directory: #{path}" if expanded.empty? + expanded + else + [path] + end + end .select { |f| File.file?(f) && lintable_file?(f) } .uniq end @@ -153,25 +162,12 @@ class LefthookLinter end end - GLOB_FLAGS = File::FNM_PATHNAME | File::FNM_EXTGLOB | File::FNM_CASEFOLD | File::FNM_DOTMATCH - LEFTHOOK_CONFIG_PATH = File.expand_path("../lefthook.yml", __dir__) PROJECT_ROOT = File.expand_path("..", __dir__) def run_lefthook_command(hook, files) - commands = lefthook_config.dig(hook, "commands") - - if !files.empty? && commands + if !files.empty? normalized = files.map { |f| normalize_relative_path(f) } - any = false - - commands.each do |name, config| - filtered = filter_files_for_command(normalized, config) - next if filtered.empty? - - any = true - exec_lefthook(hook, name, filtered) - end - puts "No matching linters for provided files." if !any && @verbose + exec_lefthook(hook, nil, normalized) else exec_lefthook(hook, nil, files) end @@ -187,22 +183,6 @@ class LefthookLinter exit 1 unless system({ "LEFTHOOK" => "1" }, *cmd) end - def lefthook_config - @lefthook_config ||= YAML.load_file(LEFTHOOK_CONFIG_PATH) - end - - def filter_files_for_command(files, config) - globs = Array(config["glob"]).compact - excludes = Array(config["exclude"]).compact - - files.select do |file| - matches_includes = - globs.empty? || globs.any? { |pattern| File.fnmatch?(pattern, file, GLOB_FLAGS) } - matches_excludes = excludes.any? { |pattern| File.fnmatch?(pattern, file, GLOB_FLAGS) } - matches_includes && !matches_excludes - end - end - def normalize_relative_path(file) cleaned = file.start_with?("./") ? file[2..] : file path = Pathname.new(cleaned) @@ -222,7 +202,7 @@ def parse_options OptionParser .new do |parser| - parser.banner = "Usage: bin/lint [options] [files...]" + parser.banner = "Usage: bin/lint [options] [files|directories...]" parser.on("-h", "--help", "Show this help message") do puts parser @@ -235,6 +215,7 @@ def parse_options puts " bin/lint --wip # Lint staged + unstaged + files changed since main" puts " bin/lint --fix app.rb file2.js # Fix specific file/s" puts " bin/lint app/models/*.rb # Lint multiple files" + puts " bin/lint frontend/discourse/app/ # Lint all lintable files in directory" puts puts "Note: This script now uses lefthook to run linters." puts "Check lefthook.yml for linting configuration." diff --git a/bin/pitchfork b/bin/pitchfork index 1e6bf734fe749..2cb16de470f50 100755 --- a/bin/pitchfork +++ b/bin/pitchfork @@ -50,7 +50,7 @@ end # This is handy if you want to bind a key to restarting pitchfork in dev if dev_mode - UNICORN_DEV_SUPERVISOR_PID = Process.pid + DEV_SUPERVISOR_PID = Process.pid restart = true while restart @@ -58,8 +58,22 @@ if dev_mode pid = fork { load Gem.bin_path("pitchfork", "pitchfork") } done = false + int_count = 0 Signal.trap("INT") do - # wait for parent to be done + int_count += 1 + case int_count + when 1 + # Swallowed to give the child time to handle it + when 2 + STDERR.puts "\nInterrupt again to force shutdown..." + else + begin + Process.kill("KILL", pid) + rescue StandardError + nil + end + exit!(1) + end end Signal.trap("USR2") do diff --git a/bin/qunit b/bin/qunit index f9055748623af..a66e07d51a591 100755 --- a/bin/qunit +++ b/bin/qunit @@ -122,6 +122,7 @@ class QunitRunner opts.separator <<~NOTES \nExamples: bin/qunit frontend/discourse/tests/unit/models/user-test.js + bin/qunit frontend/discourse/tests/unit/ # Run all tests in directory bin/qunit --standalone --target plugins # Run all plugin tests bin/qunit --standalone --target chat # Run single plugin tests bin/qunit --standalone plugins/chat/test/javascripts/unit/lib/chat-audio-test.js @@ -183,14 +184,14 @@ class QunitRunner if File.directory?(path) test_files = Dir.glob(File.join(path, "**", "*-test.{js,gjs}")) if test_files.empty? - puts "Warning: No test files found in directory: #{path}" if @verbose + abort "Error: No test files found in directory: #{path}" else expanded.concat(test_files) end elsif File.file?(path) expanded << path else - puts "Warning: Path not found: #{path}" + abort "Error: Path not found: #{path}" end end @@ -367,20 +368,20 @@ class QunitRunner install_node_dependencies! @rails_port = next_available_port(60_098) - unicorn_env = build_unicorn_environment(@rails_port) - unicorn_pid = nil + server_env = build_server_environment(@rails_port) + server_pid = nil begin if @dry_run - puts "[dry-run] skipping unicorn startup" + puts "[dry-run] skipping server startup" else - unicorn_pid = - Process.spawn(unicorn_env, File.join(rails_root, "bin", "pitchfork"), pgroup: true) + server_pid = + Process.spawn(server_env, File.join(rails_root, "bin", "pitchfork"), pgroup: true) end wait_for_rails_server(@rails_port) yield ensure - stop_unicorn(unicorn_pid, unicorn_env["UNICORN_PID_PATH"]) if unicorn_pid + stop_server(server_pid, server_env["UNICORN_PID_PATH"]) if server_pid end end @@ -425,16 +426,16 @@ class QunitRunner false end - def build_unicorn_environment(unicorn_port) - pid_path = File.join(rails_root, "tmp/pids", "unicorn_test_#{unicorn_port}.pid") + def build_server_environment(server_port) + pid_path = File.join(rails_root, "tmp/pids", "test_server_#{server_port}.pid") env = { "RAILS_ENV" => @rails_env || "test", "SKIP_ENFORCE_HOSTNAME" => "1", "UNICORN_PID_PATH" => pid_path, - "UNICORN_PORT" => unicorn_port.to_s, + "UNICORN_PORT" => server_port.to_s, "UNICORN_SIDEKIQS" => "0", "DISCOURSE_SKIP_CSS_WATCHER" => "1", - "UNICORN_LISTENER" => "127.0.0.1:#{unicorn_port}", + "UNICORN_LISTENER" => "127.0.0.1:#{server_port}", "LOGSTASH_UNICORN_URI" => nil, "UNICORN_WORKERS" => "1", "UNICORN_TIMEOUT" => "90", @@ -475,11 +476,16 @@ class QunitRunner def run_ember_build if @dry_run - puts "[dry-run] skipping ember build for themes" + puts "[dry-run] skipping ember build" return end - system("pnpm", "ember", "build", chdir: frontend_dir, exception: true) + system( + { "LOAD_PLUGINS" => should_load_plugins? ? "1" : "0" }, + "script/assemble_ember_build.rb", + chdir: rails_root, + exception: true, + ) end def build_theme_test_pages(query) @@ -518,9 +524,9 @@ class QunitRunner encode_query_string(params) end - def stop_unicorn(pid, pid_path) + def stop_server(pid, pid_path) if @dry_run - puts "[dry-run] skipping unicorn shutdown" + puts "[dry-run] skipping server shutdown" return end Process.kill("-KILL", pid) diff --git a/bin/rails b/bin/rails index a3e9676eec169..5a8c7ed4c84bf 100755 --- a/bin/rails +++ b/bin/rails @@ -10,7 +10,7 @@ if !ENV["RAILS_ENV"] && (ARGV[0] == "s" || ARGV[0] == "server") && Process.respo ENV["RAILS_LOGS_STDOUT"] ||= "1" - exec File.expand_path(ENV["RUN_PITCHFORK"] == "0" ? "unicorn" : "pitchfork", __dir__) + exec File.expand_path("pitchfork", __dir__) end APP_PATH = File.expand_path("../config/application", __dir__) diff --git a/bin/unicorn b/bin/unicorn deleted file mode 100755 index 25b10923604c7..0000000000000 --- a/bin/unicorn +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -if ENV["RUN_PITCHFORK"] != "0" - STDERR.puts "[bin/unicorn] Running bin/pitchfork. Use RUN_PITCHFORK=0 to run unicorn instead." - exec File.expand_path("pitchfork", __dir__), *ARGV -end - -require "pathname" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", Pathname.new(__FILE__).realpath) - -require "rubygems" -require "bundler/setup" -require "fileutils" - -dev_mode = false - -# in development do some fussing around, to automate config -if !ARGV.include?("-E") && !ARGV.include?("--env") && - (%w[development test].include?(ENV["RAILS_ENV"]) || !ENV["RAILS_ENV"]) - dev_mode = true - - ARGV.push("-N") - if !ARGV.include?("-c") && !ARGV.include?("--config-file") - ARGV.push("-c") - ARGV.push(File.expand_path("../../config/unicorn.conf.rb", Pathname.new(__FILE__).realpath)) - end - - # we do not want to listen on 2 ports, so lets fix it - if (idx = ARGV.index("-p")) && (port = ARGV[idx + 1].to_i) > 0 - ENV["UNICORN_PORT"] ||= port.to_s - end - - ENV["UNICORN_PORT"] ||= "9292" - - if ARGV.delete("-x") - puts "Running without sidekiq" - ENV["UNICORN_SIDEKIQS"] = "0" - end - - ENV["UNICORN_SIDEKIQS"] ||= "1" -end - -if ARGV.include?("--help") - fork { load Gem.bin_path("unicorn", "unicorn") } - Process.wait - puts "Extra Discourse Options:" - puts " -x run without sidekiq" - exit -end - -# this dev_mode hackery enables the following to be used to restart unicorn: -# -# pkill -USR2 -f 'ruby bin/unicorn' -# -# This is handy if you want to bind a key to restarting unicorn in dev - -if dev_mode - UNICORN_DEV_SUPERVISOR_PID = Process.pid - - restart = true - while restart - restart = false - pid = - fork do - begin - load Gem.bin_path("unicorn", "unicorn") - rescue ArgumentError => err - if (err.message =~ /Already running on PID/) - puts "\n" - puts "Unicorn is already running!\n" - pid = err.message[/PID:(\d+)/, 1]&.to_i - puts "\n" - puts "kill -9 #{pid} to stop the existing unicorn master process, then try again." - else - raise err - end - end - end - done = false - - Signal.trap("INT") do - # wait for parent to be done - end - - Signal.trap("USR2") do - Process.kill("QUIT", pid) - puts "RESTARTING UNICORN" - restart = true - end - - Signal.trap("TERM") { Process.kill("TERM", pid) } - - while !done - sleep 1 - done = Process.waitpid(pid, Process::WNOHANG) - end - end -else - load Gem.bin_path("unicorn", "unicorn") -end diff --git a/config/discourse.pill.sample b/config/discourse.pill.sample index fdf9c24f7d38b..ce11ef361073c 100644 --- a/config/discourse.pill.sample +++ b/config/discourse.pill.sample @@ -86,27 +86,6 @@ Bluepill.application("discourse", :base_dir => ENV["HOME"] + '/.bluepill') do |a end end - # You can use Puma as WebServer as well, please use the scripts below. - #app.process("puma") do |process| - # process.start_command = "puma -e production -C #{rails_root}/config/puma.rb" - # - # # Puma's Setting file is located in config/puma.rb, if you want to edit them, go to puma.rb. - # # the upstream section in the nginx config to match. - # # The nginx.sample.conf file assumes you're using sockets. - # - # process.pid_file = "#{rails_root}/tmp/pids/puma.pid" - # process.start_grace_time = 30.seconds - # process.stop_grace_time = 10.seconds - # process.restart_grace_time = 10.seconds - # process.group = "pumas" - # process.uid = user - # process.gid = group - # process.daemonize = false - # process.stdout = process.stderr = "#{rails_root}/log/puma.log" - # # Thanks to: http://www.garrensmith.com/2012/09/24/Staying-up-with-Unicorn-Upstart-Bluepill.html - # # If the amount of memory is exceeded 3 times out of 5, restart - # process.checks :mem_usage, :every => 1.minutes, :below => 750.megabytes, :times => [3, 5] - #end #debug instance # app.process("thin-debug") do |process| diff --git a/config/discourse_defaults.conf b/config/discourse_defaults.conf index a98add589b172..186acce8d7d16 100644 --- a/config/discourse_defaults.conf +++ b/config/discourse_defaults.conf @@ -193,7 +193,7 @@ cors_origin = '' # enable if you really need to serve assets in prod serve_static_assets = false -# number of sidekiq workers (launched via unicorn master) +# number of sidekiq workers (launched via app server master) sidekiq_workers = 5 # Logs Sidekiq jobs that have been running for longer than the configured number of minutes to the Rails log @@ -227,7 +227,7 @@ secret_key_base = # fallback path for all assets which are served via the application # used by static_controller -# in multi host setups this allows you to have old unicorn instances serve +# in multi host setups this allows you to have old app server instances serve # newly compiled assets fallback_assets_path = @@ -359,10 +359,6 @@ anon_cache_store_threshold = 2 # https://github.com/discourse/discourse-custom-header-links.git,https://github.com/discourse/discourse-simple-theme.git allowed_theme_repos = -# DEPRECATED: This setting is no longer used as IMAP support has been removed. -# Keeping the setting for backwards compatibility with existing configurations. -enable_email_sync_demon = false - # we never want to queue more than 10000 digests per 30 minute block # this can easily lead to blocking sidekiq # on multisites we recommend a far lower number @@ -413,3 +409,6 @@ asset_url_salt = # Enable Ruby YJIT to get better performances at the cost of using more memory. yjit_enabled = false + +# Enable mini_racer single-threaded mode, and boot contexts before forking +mini_racer_single_threaded = true diff --git a/config/environments/development.rb b/config/environments/development.rb index e60babb8c276c..03011dc983158 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -57,8 +57,8 @@ if defined?(BetterErrors) BetterErrors::Middleware.allow_ip! ENV["TRUSTED_IP"] if ENV["TRUSTED_IP"] - if (defined?(Unicorn) || defined?(Pitchfork)) && ENV["UNICORN_WORKERS"].to_i != 1 - # BetterErrors doesn't work with multiple unicorn workers. Disable it to avoid confusion + if defined?(Pitchfork) && ENV["UNICORN_WORKERS"].to_i != 1 + # BetterErrors doesn't work with multiple workers. Disable it to avoid confusion Rails.configuration.middleware.delete BetterErrors::Middleware end end @@ -80,8 +80,7 @@ config.developer_emails = emails.split(",").map(&:downcase).map(&:strip) end - if ENV["DISCOURSE_SKIP_CSS_WATCHER"] != "1" && - (defined?(Rails::Server) || defined?(Puma) || defined?(Unicorn) || defined?(Pitchfork)) + if ENV["DISCOURSE_SKIP_CSS_WATCHER"] != "1" && (defined?(Rails::Server) || defined?(Pitchfork)) require "stylesheet/watcher" STDERR.puts "Starting CSS change watcher" @watcher = Stylesheet::Watcher.watch diff --git a/config/initializers/000-development_reload_warnings.rb b/config/initializers/000-development_reload_warnings.rb index cd7a6df90004e..bf8768c5ff168 100644 --- a/config/initializers/000-development_reload_warnings.rb +++ b/config/initializers/000-development_reload_warnings.rb @@ -40,7 +40,7 @@ def watch(path, *flags, &callback) only: /(\.rb|settings.yml)$/, ignore: [/node_modules/, /\.git/, /\.devenv/], ) do |modified, added, removed| - supervisor_pid = UNICORN_DEV_SUPERVISOR_PID + supervisor_pid = DEV_SUPERVISOR_PID auto_restart = supervisor_pid && ENV["AUTO_RESTART"] != "0" files = modified + added + removed diff --git a/config/initializers/000-mini_racer.rb b/config/initializers/000-mini_racer.rb new file mode 100644 index 0000000000000..4ff6de5a17659 --- /dev/null +++ b/config/initializers/000-mini_racer.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +MiniRacer::Platform.set_flags!(:single_threaded) if GlobalSetting.mini_racer_single_threaded diff --git a/config/initializers/000-zeitwerk.rb b/config/initializers/000-zeitwerk.rb index 50470d4126b10..b8142b83222e3 100644 --- a/config/initializers/000-zeitwerk.rb +++ b/config/initializers/000-zeitwerk.rb @@ -43,6 +43,10 @@ def self.inflect(overrides) "json" => "JSON", "ssrf_detector" => "SSRFDetector", "http" => "HTTP", + "oauth_client_registration" => "OAuthClientRegistration", + "oauth_discovery" => "OAuthDiscovery", + "oauth_flow" => "OAuthFlow", + "oauth_token_store" => "OAuthTokenStore", "gc_stat_instrumenter" => "GCStatInstrumenter", "chat_sdk" => "ChatSDK", "ip" => "IP", @@ -53,6 +57,6 @@ def self.inflect(overrides) "lib/generators", "lib/freedom_patches", "lib/i18n/backend", - "lib/unicorn_logstash_patch.rb", + "lib/release_utils", "lib/pitchfork_logstash_patch.rb", ) diff --git a/config/initializers/005-site_settings.rb b/config/initializers/005-site_settings.rb index c05c4709f724b..fa530bfcae115 100644 --- a/config/initializers/005-site_settings.rb +++ b/config/initializers/005-site_settings.rb @@ -23,6 +23,9 @@ SiteSetting.push_api_secret_key.length == 32 SiteSetting.push_api_secret_key = SecureRandom.hex end + + # Check for circular dependencies in site settings. + SiteSetting.type_supervisor.dependencies.order rescue ActiveRecord::StatementInvalid # This will happen when migrating a new database end diff --git a/config/initializers/012-category_types.rb b/config/initializers/012-category_types.rb new file mode 100644 index 0000000000000..dfa44e30bebe9 --- /dev/null +++ b/config/initializers/012-category_types.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Rails.application.config.to_prepare do + Categories::TypeRegistry.register(Categories::Types::Discussion) +end diff --git a/config/initializers/015-track-upcoming-change-toggle.rb b/config/initializers/015-track-upcoming-change-toggle.rb index 65798ecbe1f30..a84eb5a36518b 100644 --- a/config/initializers/015-track-upcoming-change-toggle.rb +++ b/config/initializers/015-track-upcoming-change-toggle.rb @@ -1,4 +1,7 @@ # frozen_string_literal: true + +Rails.application.config.after_initialize { UpcomingChanges.clear_caches! } + # # Similar to 014-track-setting-changes.rb, we can react to upcoming changes # being enabled/or disabled here for more complicated scenarios, where diff --git a/config/initializers/100-sidekiq.rb b/config/initializers/100-sidekiq.rb index 58cdba6fe0cf3..639e297800477 100644 --- a/config/initializers/100-sidekiq.rb +++ b/config/initializers/100-sidekiq.rb @@ -39,17 +39,6 @@ def print_banner # defer queue should simply run in sidekiq Scheduler::Defer.async = false - # warm up AR - RailsMultisite::ConnectionManagement.safe_each_connection do - (ActiveRecord::Base.connection.tables - %w[schema_migrations versions]).each do |table| - begin - table.classify.constantize.first - rescue StandardError - nil - end - end - end - scheduler_hostname = ENV["UNICORN_SCHEDULER_HOSTNAME"] if !scheduler_hostname || scheduler_hostname.split(",").include?(Discourse.os_hostname) diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index bc7092c941d85..cd6b61af002e9 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -15,7 +15,7 @@ ) Rails.application.config.assets.paths.push( - *Discourse.plugins.map { |p| "#{Rails.root}/app/assets/generated/#{p.directory_name}" }, + *Discourse.plugins.map { |p| "#{Rails.root}/app/assets/generated/#{p.directory_name}/" }, ) # These paths are added automatically by propshaft, but we don't want them diff --git a/config/locales/client.ar.yml b/config/locales/client.ar.yml index f4739b4aa8db4..25f6a25418d13 100644 --- a/config/locales/client.ar.yml +++ b/config/locales/client.ar.yml @@ -6,6 +6,22 @@ ar: js: + blocks: + ghost: + status: "الحالة" + conditions: "الشروط" + arguments: "الوسيطات" + container_args: "وسيطات الحاوية" + in_location: "في" + hidden: "مخفي" + not_registered: "غير مسجل" + no_visible_children: "لا توجد تبعيات ظاهرة" + failed: "فشل" + ghost_reasons: + optional_missing_hint: "لا يتم عرض هذه الكتلة الاختيارية لأنها غير مسجلة." + no_visible_children_hint: "لا يتم عرض كتلة الحاوية هذه لأنه لا توجد أي تبعيات ظاهرة." + condition_failed_hint: "لا يتم عرض هذه الكتلة نظرًا لإخفاق شروطها." + head_hidden_tail_hint: "لا يتم عرض هذه الكتلة لأنه يجري عرض كتلة أخرى أولًا في الحاوية `head`." carousel: go_to_slide: "الانتقال إلى الشريحة %{index}" previous: "الشريحة السابقة" @@ -274,7 +290,7 @@ ar: el: name: اليونانية en: - name: إنجليزي + name: الإنجليزية en_GB: name: الإنجليزية (المملكة المتحدة) es: @@ -409,10 +425,13 @@ ar: skip_to_top: "تخطي إلى الأعلى" skip_user_nav: "التخطي إلى محتوى الملف الشخصي" emails_are_disabled: "أوقف أحد المسؤولين البريد الصادر بشكلٍٍ عام. ولن يتم إرسال إشعارات عبر البريد الإلكتروني أيًا كان نوعها." + emails_are_disabled_no_smtp: "تم تعطيل جميع رسائل البريد الإلكتروني الصادرة نظرًا لعدم وجود خادم SMTP تم تكوينه. لا يمكن إرسال أي نوع من الرسائل الإلكترونية." emails_are_disabled_non_staff: "تم إيقاف البريد الإلكتروني الصادر للمستخدمين من خارج فريق العمل." software_update_prompt: message: "لقد أجرينا تحديثًا على هذا الموقع، يُرجى تحديث الصفحة للحفاظ على سير الأمور بسلاسة." dismiss: "تجاهل" + notifications_tracking: + tooltip: "مستوى الإشعارات: %{level}" back_button: "الرجوع" welcome_banner: header: @@ -432,12 +451,27 @@ ar: broken_page_change_alert: "أظهر معالج onPageChange خطأً. تحقَّق من أدوات مطوِّر المتصفح للمزيد من المعلومات." broken_plugin_alert: "بسبب المكوِّن الإضافي '%{name}'" broken_transformer_alert: "حدث خطأ. قد لا يعمل موقعك بشكلٍ صحيح." + broken_block_alert: "تم اكتشاف خطأ في تكوين الكتلة. يرجى مراجعة وحدة تحكم المتصفح للاطلاع على التفاصيل." + broken_block_factory_alert: "تعذر تحميل إحدى الكتل. قد لا تظهر بعض عناصر واجهة المستخدم بشكل صحيح." critical_deprecation: notice: "[إشعار المسؤول] إن %{source} يحتوي على رمز بحاجة إلى تحديث. (المعرّف: %{id})" learn_more_link: "(معرفة المزيد)" theme_source: "السمة '%{name}'" plugin_source: "المكوِّن الإضافي \"%{name}\"" unknown_source: "واحد من سماتك أو مكوِّناتك الإضافية" + dev_tools: + drag_to_move: "اسحب للتحريك" + toggle_plugin_outlet_debug: "تبديل وضع تصحيح أخطاء منفذ المكون الإضافي" + toggle_block_debug: "تبديل وضع تصحيح أخطاء الكتلة" + block_debug: + outlet_boundaries: "حدود المنفذ" + visual_overlay: "التراكب المرئي" + ghost_blocks: "الكتل المخفية" + condition_debugging: "تصحيح الأخطاء الشرطية" + toggle_safe_mode: "تبديل الوضع الآمن" + toggle_verbose_localization: "تبديل التوطين المطول" + toggle_mobile_view: "تبديل عرض الهاتف المحمول" + disable_dev_tools: "تعطيل أدوات المطورين" s3: regions: ap_northeast_1: "آسيا والمحيط الهادئ (طوكيو)" @@ -543,7 +577,38 @@ ar: pill: "مُقترح" pm_title: "الرسائل المقترحة" admin_onboarding_banner: + launch_in_easy_steps: "الإطلاق عبر %{step_count} خطوات سهلة" + congrats_onboarding_complete: "تهانينا على إكمال عملية الانضمام!" + invite_collaborators: + title: "دعوة المتعاونين" + description: "يساهم الأعضاء الأوائل في إثراء مجتمعك" + action: "إنشاء دعوة" + start_posting: + title: "بدء النشر" + description: "امنح الناس موضوعًا يتحدثون عنه معًا" + action: "اطّلع على الأفكار" + choose_option: "كيف تود أن تبدأ؟" + predefined_topics: "قوالب لكسر حالة السكوت" + predefined_topics_subtitle: "امنح الأعضاء الجدد موضوعًا يتحدثون عنه، واختر قالبًا لتعديله، ثم أنشئ قالبك الخاص." + predefined_topics_description: "اختر من بين مجموعة من الموضوعات لبدء المحادثات" + use_predefined: "تصفح القوالب" + back: "رجوع" + icebreakers: + fun_facts: + title: "اذكر بعض الحقائق الممتعة عنك" + body: "مرحبًا بالجميع! أنا متحمسٌ جدًا للبدء في تأسيس هذا المجتمع الجديد. ولإطلاق شرارة البداية، دعونا نتشارك حقيقةً ممتعةً عن أنفسنا. سأبدأ أنا أولاً: أنا أعشق التنزه سيرًا على الأقدام واستكشاف مسارات جديدة! فما هو الشيء المثير للاهتمام بخصوصكم؟" + coolest_thing_you_have_seen_today: + title: "ما أروع شيء رأيته اليوم؟" + body: "ما أروع شيء رأيته أو عشته اليوم؟ يمكن أن يكون أي شيء، بدءًا من غروب شمس بديع، وصولًا إلى عمل إنساني عفوي. سأبدأ أنا أولًا: لقد رأيت كلبًا يساعد شخصًا مسنًا على عبور الشارع!" + introduce_yourself: + title: "عرّف بنفسك" + body: "أهلاً بكم في هذا المجتمع! دعونا نبدأ بالتعرف على بعضنا بعضًا؛ يُرجى تقديم أنفسكم ومشاركتنا نبذة يسيرة عن اهتماماتكم. سأبدأ أنا أولاً: أنا شغوفٌ جدًا بعالم التكنولوجيا وأعشق تعليم الآخرين!" + what_is_your_favorite_food: + title: "ما طعامك المفضل؟" + body: "شارك طعامك المفضل مع المجتمع! سأبدأ: أنا أحب البيتزا، وخاصة مع إضافة الجبن والبيبروني." spread_the_word: + title: "انشروا مجتمعنا!" + description: "شارك الرابط مع جميع الأشخاص في نطاقك" action: "نسخ الرابط" copied_to_clipboard: "تم نسخ الرابط إلى الحافظة!" about: @@ -679,8 +744,6 @@ ar: other: "تم إنشاؤه منذ %{count} عام" bookmarked: title: "وضع إشارة مرجعية" - edit_bookmark: "تعديل الإشارة المرجعية" - clear_bookmarks: "مسح الإشارات المرجعية" help: bookmark: "انقر لإنشاء إشارة مرجعية لهذا الموضوع" edit_bookmark: "انقر لتعديل الإشارة المرجعية لمنشور في هذا الموضوع" @@ -699,12 +762,12 @@ ar: clear_reminder: "مسح التذكير" edit: "تعديل الإشارة المرجعية" not_bookmarked: "وضع إشارة مرجعية على هذا المنشور" + topic_bookmark: "الموضوع" remove_reminder_keep_bookmark: "إزالة التذكير والاحتفاظ بالإشارة المرجعية" created_with_reminder: "لقد وضعت إشارة مرجعية على هذا المنشور وعيَّنت تذكيرًا في %{date}. ‏%{name}" created_with_reminder_generic: "لقد وضعت إشارة مرجعية على هذا المنشور وعيَّنت تذكيرًا في %{date}. ‏%{name}" delete: "حذف الإشارة المرجعية" confirm_delete: "هل تريد بالتأكيد حذف هذه الإشارة المرجعية؟ سيتم حذف التذكير أيضًا." - confirm_clear: "هل تريد بالتأكيد مسح كل إشاراتك المرجعية من هذا الموضوع؟" save: "حفظ" no_timezone: 'لم تقم بتعيين منطقة زمنية بعد. ولن تتمكن من تعيين التذكيرات. قم بتعيين منطقة زمنية في ملفك الشخصي.' invalid_custom_datetime: "التاريخ والوقت الذين أدخلتهما غير صالحين، يُرجى إعادة المحاولة." @@ -771,6 +834,13 @@ ar: remove_confirmation: "هل تريد بالتأكيد حذف هذه المسودة؟" bulk_delete: "احذف المحدّد" bulk_delete_confirmation: "احذف المسودات" + bulk_delete_message: + zero: "هل تريد بالتأكيد حذف هذه المسودة؟" + one: "هل تريد بالتأكيد حذف هذه المسودة؟" + two: "هل تريد بالتأكيد حذف هاتين المسودتين؟" + few: "هل تريد بالتأكيد حذف %{count} مسودات؟" + many: "هل تريد بالتأكيد حذف %{count} مسودة؟" + other: "هل تريد بالتأكيد حذف %{count} مسودة؟" new_topic: "مسودة موضوع جديد" new_private_message: "مسودة رسالة خاصة جديدة" edit_topic: "تعديل مسودة الموضوع" @@ -785,6 +855,11 @@ ar: few: "+%{count} مسودات أخرى" many: "+%{count} مسودة أخرى" other: "+%{count} مسودة أخرى" + embed_mode: + storage_access_prompt: "هل لديك بالفعل حساب %{site_name}؟ اسمح بالوصول إلى جلستك للتعليق بنفسك." + allow_access: "السماح بالوصول" + continue_as_guest: "المتابعة كضيف" + be_first_to_reply: "كن أول مَن يرد!" topic_count_all: zero: "عرض %{count} موضوع جديد" one: "عرض موضوع واحد (%{count}) جديد" @@ -875,22 +950,22 @@ ar: filtered_flagged_by: "تم الإبلاغ بواسطة" unknown: title: - zero: "ليس لديك أي عناصر قابلة للمراجعة من المكوِّن الإضافي المُعطّل:" - one: "لديك عنصر واحد قابل للمراجعة من المكوِّن الإضافي المُعطّل:" - two: "لديك عنصران قابلان للمراجعة من المكوِّن الإضافي المُعطّل:" - few: "لديك عناصر قابلة للمراجعة من المكوِّن الإضافي المُعطّل:" - many: "لديك عناصر قابلة للمراجعة من المكوِّن الإضافي المُعطّل:" - other: "لديك عناصر قابلة للمراجعة من المكوِّن الإضافي المُعطّل:" + zero: "لديك عناصر قيد الانتظار في قائمة المراجعة من المكوِّن الإضافي المُعطّل:" + one: "لديك عناصر قيد الانتظار في قائمة المراجعة من المكوِّن الإضافي المُعطّل:" + two: "لديك عناصر قيد الانتظار في قائمة المراجعة من المكوِّنين الإضافيين المُعطّلين:" + few: "لديك عناصر قيد الانتظار في قائمة المراجعة من المكوِّنات الإضافية المُعطّلة:" + many: "لديك عناصر قيد الانتظار في قائمة المراجعة من المكوِّنات الإضافية المُعطّلة:" + other: "لديك عناصر قيد الانتظار في قائمة المراجعة من المكوِّنات الإضافية المُعطّلة:" instruction: "لا يمكن عرض تلك العناصر ما لم تفعّل المكوِّن الإضافي ذا الصلة. يُرجى تفعيل المكوِّن الإضافي ثم تحديث الصفحة. أو يمكنك تجاهلها. معرفة المزيد..." reviewable_unknown_source: "%{reviewableType} (مكوِّن إضافي غير معروف)" reviewable_known_source: "%{reviewableType} (من المكوِّن الإضافي \"%{pluginName}\")" ignore_all: "تجاهل الكل" enable_plugins: "تفعيل المكوِّنات الإضافية" - delete_confirm: "هل ترغب بالتأكيد في حذف كل المراجعات التي أُنشِئت بواسطة المكوِّنات الإضافية المعطّلة؟" - ignore_success: "حُذفت كل المراجعات التي أُنشِئت بواسطة المكوِّنات الإضافية المعطّلة." + delete_confirm: "هل ترغب بالتأكيد في حذف كل العناصر الموجودة في قائمة انتظار المراجعة التي أُنشِئت بواسطة المكوِّنات الإضافية المعطّلة؟" + ignore_success: "حُذفت كل العناصر الموجودة في قائمة انتظار المراجعة التي أُنشِئت بواسطة المكوِّنات الإضافية المعطّلة." explain: why: "اشرح سبب دخول هذا العنصر في قائمة الانتظار" - title: "التقييم القابل للمراجعة" + title: "تقييم العناصر الموجودة في قائمة انتظار المراجعة" formula: "المُعادلة" subtotal: "الإجمالي الفرعي" total: "الإجمالي" @@ -904,10 +979,10 @@ ar: title: "يحصل المستخدمون الذين تم التحقُّق من صحة بلاغاتهم بشكلٍٍ متكرر على مكافأة." trust_level_bonus: name: "مستوى الثقة" - title: "تحظى العناصر القابلة للمراجعة التي أنشأها مستخدمون من مستوى ثقة أعلى بنقاط أعلى." + title: "تحظى البلاغات التي أنشأها مستخدمون من مستوى ثقة أعلى بتقييم أعلى." type_bonus: name: "مكافأة النوع" - title: "يمكن لفريق العمل تخصيص مكافأة لبعض الأنواع القابلة للمراجعة لمنحها أولوية أعلى." + title: "يمكن لفريق العمل تخصيص مكافأة لبعض أنواع البلاغات لمنحها أولوية أعلى." revise_and_reject_post: title: "مراجعة" reason: "السبب" @@ -916,7 +991,7 @@ ar: custom_reason: "قدِّم وصفًا واضحًا للسبب" other_reason: "آخر..." optional: "اختياري" - stale_help: "تم إجراء هذه المراجعة بواسطة %{username}." + stale_help: "تم حل هذا العنصر بواسطة %{username}." claim_help: optional: "يمكنك المطالبة بهذا العنصر لمنع الآخرين من مراجعته." required: "يجب عليك المطالبة بالعناصر قبل أن تتمكن من مراجعتها." @@ -952,6 +1027,7 @@ ar: filtered_topic: "لقد قمت بالتصفية لعرض المحتوى القابل للمراجعة في موضوع واحد." filtered_user: "المستخدم المبلَّغ عنه" filtered_reviewed_by: "تمت المراجعة بواسطة" + filtered_claimed_by: "تمت المطالبة بالعلم من قِبل" show_all_topics: "عرض كل الموضوعات" deleted_post: "(تم حذف المنشور)" deleted_user: "(تم حذف المستخدم)" @@ -1096,6 +1172,10 @@ ar: is_this_post: "هل هذا %{reviewable_type} %{reviewable_human_score_types}؟" delimiter: "أو" something_else_wrong: "هل هناك خطأ ما في %{reviewable_type} هذا؟" + approve_user: "هل توافق على هذا المستخدم؟" + suspect_user: "هل ينشر هذا المستخدم رسائل عشوائية؟" + approve_post: "هل توافق على هذا المنشور؟" + approve_topic: "هل توافق على هذا الموضوع؟" types: reviewable_flagged_post: title: "المنشورات المُبلَغ عنها" @@ -1114,29 +1194,43 @@ ar: title: "المنشور" noun: "منشور" reviewable_ai_chat_message: + title: "رسالة دردشة تم الإبلاغ عنها بواسطة الذكاء الاصطناعي" noun: "رسالة الدردشة" reviewable_ai_post: + title: "منشور تم الإبلاغ عنه بواسطة الذكاء الاصطناعي" noun: "منشور" + reviewable_post_voting_comment: + title: "تعليق تم الإبلاغ عنه" + noun: "تعليق" flagged_as: "صفة الإبلاغ" post_flagged_as: "عُلّم على المنشور على أنه" chat_flagged_as: "عُلّم على الدردشة على أنها" + queued_post_label: "منشور في قائمة الانتظار" + queued_topic_label: "الموضوع في قائمة الانتظار" user_label: "المستخدم" + assigned_to: "المنشور مُخصص لـ" moderator_actions: "الإجراءات المتاحة للمشرفين" timeline_and_notes: "المخطط الزمني والملاحظات" timeline: target_created: "تم إنشاء المنشور" target_created_by: "أُنشئ المنشور من طرف %{username} · %{relativeDate}" target_deleted: "تم حذف المنشور" + target_deleted_by: "تم حذف المنشور بواسطة %{username} · %{relativeDate}" flagged: "تم الإبلاغ" flagged_as_by: "تم الإبلاغ عنه بسبب %{flagReason} من قِبل %{username} · %{relativeDate}" claimed: "تمت المطالبة به" claimed_by: "تمت المطالبة به من قِبل %{username} · %{relativeDate}" + unclaimed_by: "لم يتم المطالبة به من قِبل %{username} · %{relativeDate}" reviewed: "أُجريت مراجعته" + approved_by: "تمت الموافقة عليه من قِبل %{username} · %{relativeDate}" + rejected_by: "تم رفضه من قِبل %{username} · %{relativeDate}" + ignored_by: "تم تجاهله من قِبل %{username} · %{relativeDate}" view_conversation: "عرض الرسالة الخاصة" note_added: "ملاحظة المشرف" note_added_by: "ملاحظة المشرف من قِبل %{username} · %{relativeDate}" no_events: "لا توجد أحداث زمنية متاحة للعرض" notes: + add_note_description: "أضف ملاحظة لتوضيح السياق للمشرفين الآخرين." add_note_button: "أضف ملاحظة" placeholder: "اكتب ملاحظتك هنا..." chars_remaining: "متبقي %{count} من الحروف" @@ -1149,6 +1243,7 @@ ar: review_user: "المستخدم" need_help: "هل تحتاج إلى مساعدة؟" copy_link: "نسخ الرابط" + copy_permalink_title: "نسخ رابط هذا العنصر القابل للمراجعة إلى الحافظة" copy_link_feedback: "تم نسخ الرابط" view_source: "عرض المصدر" insights: @@ -1161,8 +1256,17 @@ ar: few: "جرى الإبلاغ بواسطة %{count} مستخدمين مختلفين" many: "جرى الإبلاغ بواسطة %{count} مستخدمًا مختلفًا" other: "جرى الإبلاغ بواسطة %{count} مستخدم مختلف" + similar_posts: "الانتهاكات السابقة" + flagged_in_timeframe: + zero: "لم يتم تأكيد أي إبلاغ" + one: "تم تأكيد إبلاغ واحد" + two: "تم تأكيد إبلاغين" + few: "تم تأكيد %{count} إبلاغات" + many: "تم تأكيد %{count} إبلاغًا" + other: "تم تأكيد %{count} إبلاغ" user_activity: "معلومات المستخدم" activities: + joined_on: "تاريخ الانضمام: %{joinDate}" trust_level: "مستوى الثقة: %{trustLevelName}" posts: zero: "%{count} من المنشورات" @@ -1171,10 +1275,17 @@ ar: few: "%{count} منشورات" many: "%{count} منشورًا" other: "%{count} منشور" + moderation_history: + label: "تاريخ الإشراف" + silenced: "صامت: %{count}" + suspended: "معلق: %{count}" + rejected_posts: "المنشورات المرفوضة: %{count}" solution_marked: "جرى تعيين الحل" topic_has_solution: "هناك حل لهذا الموضوع" visibility: "الرؤية" + topic_unlisted: "هذا الموضوع غير مدرج ولا يمكن الوصول إليه إلا عبر الرابط المباشر." help: + community_moderation_guide: "دليل الإشراف الخاص بهذا المجتمع" moderation_guide: "دليل الإشراف في Discourse" flag_priorities: "إدارة سمعة المستخدم وأولويات الإبلاغ" spam_detection: "اكتشاف المحتوى العشوائي" @@ -1324,6 +1435,7 @@ ar: add_members: title: "إضافة مستخدمين إلى %{group_name}" description: "أدخل قائمة المستخدمين الذين تريد دعوتهم إلى المجموعة أو الصقها في قائمة مفصولة بفاصلات:" + description_usernames_only: "أدخل قائمة المستخدمين الذين تريد دعوتهم إلى المجموعة أو الصقها في قائمة مفصولة بفاصلات:" usernames_placeholder: "اسم المستخدمين" usernames_or_emails_placeholder: "أسماء المستخدمين أو عناوين البريد الإلكتروني" notify_users: "إشعار المستخدمين" @@ -1351,6 +1463,7 @@ ar: title: التفاعل posting: النشر notification: الإشعارات + self_lockout: "أنت على وشك تغيير رؤية المجموعة بطريقة ستؤدي إلى إزالة صلاحية وصولك. هل أنت متأكد من رغبتك في المتابعة؟" email: title: "البريد الإلكتروني" enable_smtp: "تفعيل SMTP" @@ -1363,6 +1476,7 @@ ar: smtp_title: "SMTP" smtp_instructions: "عند تفعيل SMTP للمجموعة، سيتم إرسال جميع الرسائل الإلكترونية الصادرة المُرسَلة من صندوق الوارد الخاص بالمجموعة عبر إعدادات SMTP المحدَّدة هنا بدلًا من خادم البريد الذي تم إعداده للرسائل الإلكترونية الأخرى التي يرسلها منتداك." additional_settings: "إعدادات إضافية" + smtp_disable_confirm: "إذا أوقفت بروتوكول SMTP، فسيُعاد ضبط جميع إعداداته وتُعطل الوظائف المرتبطة به. هل تريد المتابعة فعلاً؟" prefill: title: "الملء المسبق بإعدادات:" gmail: "Gmail" @@ -1485,6 +1599,8 @@ ar: make_owner_description: "جعل %{username} أحد مالكي هذه المجموعة" remove_owner: "إزالة كمالك" remove_owner_description: "إزالة %{username} كمالك هذه المجموعة" + remove_member_self_lockout: "إذا أزلت نفسك من هذه المجموعة، فسيُسحب منك حق الوصول لإدارتها. هل تريد المتابعة فعلاً؟" + remove_owner_self_lockout: "إذا أزلت نفسك كمالك، فسيُسحب منك حق الوصول لإدارة هذه المجموعة. هل تريد المتابعة فعلاً؟" make_primary: "التعيين كمجموعة أساسية" make_primary_description: "جعل هذه المجموعة هي المجموعة الأساسية للمستخدم %{username}" remove_primary: "الإزالة كمجموعة أساسية" @@ -1651,6 +1767,13 @@ ar: organisation: المؤسسة phone: الهاتف other_accounts: "الحسابات الأخرى بعنوان IP هذا:" + other_accounts_with_ip: + zero: "%{count} من الحسابات الأخرى بعنوان IP هذا" + one: "حساب آخر (%{count}) بعنوان IP هذا" + two: "حسابان آخران (%{count}) بعنوان IP هذا" + few: "%{count} حسابات أخرى بعنوان IP هذا" + many: "%{count} حسابًا آخر بعنوان IP هذا" + other: "%{count} حساب آخر بعنوان IP هذا" delete_other_accounts: zero: "حذف %{count}" one: "حذف %{count}" @@ -1694,6 +1817,12 @@ ar: for_user: upcoming_change: "التغيير القادم" enabled: "مفعَّلة؟" + why: "لماذا؟" + why_reasons: + not_in_specific_groups: "المستخدم غير موجود في المجموعات المحددة المطلوبة لإجراء هذا التغيير." + in_specific_groups: "المستخدم موجود في المجموعات المحددة المطلوبة لإجراء هذا التغيير." + enabled_for_everyone: "هذا التغيير متاح لجميع الأعضاء" + enabled_for_no_one: "هذا التغيير غير متاح لجميع الأعضاء" user_notifications: filters: filter_by: "التصفية حسب" @@ -1898,6 +2027,13 @@ ar: undo_revoke_access: "التراجع عن إلغاء الوصول" api_approved: "تمت الموافقة عليها:" api_last_used_at: "آخر استخدام في:" + api_show_permissions: + zero: "الأذونات الممنوحة (%{count})" + one: "الأذونات الممنوحة (%{count})" + two: "الأذونات الممنوحة (%{count})" + few: "الأذونات الممنوحة (%{count})" + many: "الأذونات الممنوحة (%{count})" + other: "الأذونات الممنوحة (%{count})" theme: "السمة" save_to_change_theme: 'سيتم تحديث السمة بعد النقر على "%{save_text}"' home: "الصفحة الرئيسية المبدئية" @@ -1910,6 +2046,13 @@ ar: few: '%{count} بلاغات مفيدة' many: '%{count} بلاغًا مفيدًا' other: '%{count} بلاغ مفيد' + flags: + zero: 'عدد البلاغات: %{count}' + one: 'عدد البلاغات: %{count}' + two: 'عدد البلاغات: %{count}' + few: 'عدد البلاغات: %{count}' + many: 'عدد البلاغات: %{count}' + other: 'عدد البلاغات: %{count}' deleted_posts: zero: '%{count} منشور تم حذفه' one: 'منشور واحد (%{count}) تم حذفه' @@ -2068,11 +2211,19 @@ ar: interface: "الواجهة" apps: "التطبيقات" navigation_menu: "قائمة التنقل" + upcoming_changes: "التغييرات القادمة" + calendar_subscriptions: "التقويم" + calendar_subscriptions: + regenerate: "أعد توليد عناوين URL" + copy: "انسخ الرابط" + copied: "تم النسخ!" + add_to_google: "تقويم Google" change_password: success: "(تم إرسال رسالة البريد الإلكتروني)" in_progress: "(جارٍ إرسال رسالة البريد الإلكتروني)" error: "(خطأ)" action: "إرسال رسالة إلكترونية لإعادة تعيين كلمة المرور" + staged_user: "المستخدمون المؤقتون لا يمكنهم تلقي رسائل إعادة تعيين كلمة المرور." set_password: "تعيين كلمة المرور" choose_new: "اختيار كلمة مرور جديدة" choose: "اختيار كلمة مرور" @@ -2732,9 +2883,25 @@ ar: no_results: "لا توجد نتائج" search: "البحث…" label: "تحديد الخيارات" + d_otp: + screen_reader: + zero: أدخل رقمًا + one: أدخل رقمًا + two: أدخل رقمين + few: أدخل %{count} أرقام + many: أدخل %{count} رقمًا + other: أدخل %{count} رقم form_kit: reset: إعادة التعيين optional: اختياري + required: مطلوب + errors_summary_title: + zero: "أصلح هذا الخطأ للمتابعة" + one: "أصلح هذا الخطأ للمتابعة" + two: "أصلح هذين الخطأين للمتابعة" + few: "أصلح هذه الأخطاء للمتابعة" + many: "أصلح هذه الأخطاء للمتابعة" + other: "أصلح هذه الأخطاء للمتابعة" dirty_form: "لم ترسل التغييرات! هل تريد بالتأكيد المغادرة؟" errors: starts_with: "يجب أن يبدأ بـ %{prefix}" @@ -2762,6 +2929,10 @@ ar: few: "يجب ألا يقل عن %{count} أحرف" many: "يجب ألا يقل عن %{count} حرفًا" other: "يجب ألا يقل عن %{count} حرف" + color: + available_presets: "الإعدادات المسبقة المتاحة" + already_used: "مستخدمة بالفعل" + edit_presets: "تعديل الإعدادات المسبقة للألوان" close: "إغلاق" assets_changed_confirm: "لقد تلقى هذا الموقع للتو تحديثًا للبرنامج. هل تريد الحصول على أحدث إصدار الآن؟" logout: "تم تسجيل خروجك." @@ -2832,6 +3003,7 @@ ar: }. learn_more: "معرفة المزيد…" learn_more_with_link: "اعرف المزيد…" + feedback_with_link: "الملاحظات…" mute: كتم unmute: إلغاء الكتم last_post: آخر منشور @@ -3127,6 +3299,7 @@ ar: many: "%{count} موضوعًا في هذه الفئة" other: "%{count} موضوع في هذه الفئة" read_only: "للقراءة فقط" + read_only_description: "هذه الفئة للقراءة فقط، لذا لا يمكنك اختيارها لهذا الموضوع." timezone_input: ambiguous_ist: "اختصار IST غير واضح، يرجى اختيار منطقة زمنية محددة (مثل: Asia/Kolkata)" select_kit: @@ -3163,6 +3336,8 @@ ar: filter_for_more: التصفية للمزيد… categories_admin_dropdown: title: "إدارة الفئات" + tag_category_admin_dropdown: + edit_tag: "تعديل الوسم" bulk_select_topics_dropdown: title: "الإجراءات الجماعية" bulk_select_bookmarks_dropdown: @@ -3193,6 +3368,8 @@ ar: medium_dark_tone: لون البشرة الداكن المتوسط dark_tone: لون البشرة الداكن default: الرموز التعبيرية المخصَّصة + filter_input: + clear: "مسح الفلتر" shared_drafts: title: "المسودات المشتركة" notice: "هذا الموضوع مرئي فقط لمن يمكنهم نشر المسودات المشتركة." @@ -3230,7 +3407,7 @@ ar: translation: "ترجمة" no_translation_yet: "ابدأ الكتابة لرؤية معاينة الترجمة..." placeholder: "أدخل ترجمة المنشور هنا…" - show_raw_markdown: "اعرض الخام" + show_raw_markdown: "اعرض النص الأصلي" group_mentioned_limit: zero: "تحذير!لقد أشرت إلى %{group}، لكن هذه المجموعة تتضمَّن عدد أعضاء أكثر من حد الإشارة الذي عيَّنه المسؤول وهو %{count} مستخدم. لن يتم إرسال إشعار إلى أي أحد." one: "تحذير!لقد أشرت إلى %{group}، لكن هذه المجموعة تتضمَّن عدد أعضاء أكثر من حد الإشارة الذي عيَّنه المسؤول وهو مستخدم واحد (%{count}). لن يتم إرسال إشعار إلى أي أحد." @@ -3321,8 +3498,8 @@ ar: create_shared_draft: "إنشاء مسودة مشتركة" edit_shared_draft: "تعديل المسودة المشتركة" title: "أو اضغط على %{modifier}Enter" - save_and_close: "احفظ وأغلق" - discard: "أهمِل" + save_and_close: "حفظ وإغلاق" + discard: "تجاهل" draft_saved: "حُفظت المسودة!" users_placeholder: "إضافة مستخدمين أو مجموعات" title_placeholder: "ما موضوع هذه المناقشة في جملة واحدة مختصرة؟" @@ -3376,6 +3553,7 @@ ar: upload_description: "أدخِل وصف التحميل هنا" olist_title: "قائمة مرقَّمة" ulist_title: "قائمة منقَّطة" + list_title: "القوائم" list_item: "إدراج عنصر" toggle_direction: "تبديل الاتجاه" apply_wrap_title: "تطبيق عنصر الاحتواء" @@ -3390,9 +3568,9 @@ ar: no_attributes: "لم تتم إضافة أي سمات بعد." wrap_text: "إضافة عنصر احتواء للمحتوى" help: "مساعدة تحرير Markdown" - collapse: "صغّر لوحة الإنشاء" - open: "افتح لوحة الإنشاء" - abandon: "إغلاق أداة الإنشاء وأهمِل المسودة" + collapse: "تصغير لوحة أداة الإنشاء" + open: "فتح لوحة أداة الإنشاء" + abandon: "إغلاق أداة الإنشاء وتجاهل المسودة" enter_fullscreen: "فتح أداة الإنشاء في وضع ملء الشاشة" exit_fullscreen: "اخرج من أداة الإنشاء في وضع ملء الشاشة" exit_fullscreen_prompt: "اضغط على ESC للخروج من وضع الشاشة الكاملة" @@ -3445,6 +3623,7 @@ ar: desc: "الرد دون تغيير تاريخ آخر رد" toggle_unlisted: label: تفعيل إلغاء الإدراج + desc: "لا يمكن الوصول إلى الموضوعات غير المدرجة إلا من خلال الرابط المباشر" reload: "إعادة التحميل" ignore: "تجاهل" image_alt_text: @@ -3588,6 +3767,7 @@ ar: description: "\"%{changeName}\" متاح للمعاينة" automatically_promoted: title: "التغييرات القادمة" + description: "تم تفعيل '%{changeName}' تلقائيًا" dismiss_confirmation: body: default: @@ -3659,7 +3839,8 @@ ar: post_approved: "تمت الموافقة على المنشور" membership_request_consolidated: "طلبات العضوية الجديدة" reaction: "تفاعل جديد" - votes_released: "تم تحرير التصويت" + votes_released: "صدَر التصويت" + new_features: "تم إطلاق ميزات جديدة في Discourse" admin_problems: "نصيحة جديدة بشأن لوحة معلومات موقعك" upload_selector: change: "تغيير" @@ -3755,6 +3936,7 @@ ar: aria_label: التصفية باستخدام الوسوم filters: label: إرجاع الموضوعات/المنشورات فقط… + all: تضمين الرسائل title: مطابقة العنوان فقط likes: أعجبتني posted: نشرت فيها @@ -3800,8 +3982,6 @@ ar: max_views: placeholder: الحد الأقصى aria_label: التصفية حسب أقصى عدد من المشاهدات - additional_options: - label: "التصفية حسب عدد المنشورات وعدد مشاهدات الموضوع" hamburger_menu: "قائمة التنقل" new_item: "جديد" go_back: "الرجوع" @@ -3888,19 +4068,19 @@ ar: deleted_post: "(منشور محذوف)" post_number_with_topic_title: "المنشور #%{post_number} - %{title}" new_post_in_topic: "منشور جديد في %{title}" + new_post_in_deleted_topic: "منشور جديد في موضوع محذوف" user_requires_approval: "%{username} يتطلَّب الموافقة" default_item: "العنصر القابل للمراجعة #%{reviewable_id}" topics: new_messages_marker: "آخر زيارة" bulk: + select: "تحديد الكل" confirm: "تأكيد" select_all: "تحديد الكل" clear_all: "مسح الكل" - unlist_topics: "إلغاء إدراج الموضوعات" - relist_topics: "إعادة إدراج الموضوعات" reset_bump_dates: "إعادة تعيين تواريخ الرفع" defer: "وضع علامة كغير مقروءة" - delete: "حذف الموضوعات" + delete: "احذف الموضوعات" delete_topics_count: zero: "حذف الموضوعات" one: "حذف الموضوع" @@ -3915,6 +4095,13 @@ ar: few: "حذف المنشورات" many: "حذف المنشورات" other: "حذف المنشورات" + delete_posts_confirmation: + zero: "هل تريد بالتأكيد حذف %{count} منشورًا؟" + one: "هل تريد بالتأكيد حذف المنشور (%{count})؟" + two: "هل تريد بالتأكيد حذف المنشورين (%{count})؟" + few: "هل تريد بالتأكيد حذف %{count} منشورات؟" + many: "هل تريد بالتأكيد حذف %{count} منشورًا؟" + other: "هل تريد بالتأكيد حذف %{count} منشور؟" dismiss: "تجاهل" dismiss_read: "تجاهل كل الموضوعات غير المقروءة" dismiss_read_with_selected: @@ -3964,21 +4151,14 @@ ar: other: "تجاهل الجديدة (%{count})" toggle: "تفعيل التحديد الجماعي للموضوعات" actions: "الإجراءات الجماعية" - change_category: "ضبط الفئة…" - close_topics: "إغلاق الموضوعات" - archive_topics: "أرشفة الموضوعات" + change_category: "حدِّث الفئة" + close_topics: "أغلِق الموضوعات" + archive_topics: "أرشف الموضوعات" move_messages_to_inbox: "النقل إلى صندوق الوارد" archive_messages: "النقل إلى الأرشيف" - notification_level: "الإشعارات…" + notification_level: "حدِّث الإشعارات" change_notification_level: "تغيير مستوى الإشعارات" choose_new_category: "اختر الفئة الجديدة للموضوعات:" - selected: - zero: "لقد حدَّدت %{count} موضوع." - one: "لقد حدَّدت موضوعًا واحدًا (%{count})." - two: "لقد حدَّدت موضوعين (%{count})." - few: "لقد حدَّدت %{count} موضوعات." - many: "لقد حدَّدت %{count} موضوعًا." - other: "لقد حدَّدت %{count} موضوع." selected_sole_category: zero: "لقد حدَّدت %{count} موضوع من الفئة:" one: "لقد حدَّدت موضوعًا واحدًا (%{count}) من الفئة:" @@ -3993,12 +4173,12 @@ ar: few: "المحدَّدة: %{count}" many: "المحدَّدة: %{count}" other: "المحدَّدة: %{count}" - change_tags: "استبدال الوسوم" - append_tags: "إضافة الوسوم" + change_tags: "استبدل الوسوم" + append_tags: "إضافة وسوم" choose_new_tags: "اختيار الوسوم الجديدة لهذه الموضوعات:" - choose_append_tags: "اختيار الوسوم الجديدة لإضافتها إلى هذه الموضوعات:" + choose_append_tags: "إضافة وسوم" changed_tags: "تم تغيير وسومات هذه الموضوعات." - remove_tags: "إزالة كل الوسوم" + remove_tags: "أزِل الوسوم" confirm_remove_tags: zero: "ستتم إزالة كل الوسوم من %{count} موضوع. هل أنت متأكد؟" one: "ستتم إزالة كل الوسوم من هذا الموضوع. هل أنت متأكد؟" @@ -4013,9 +4193,30 @@ ar: few: "التقدُّم: %{count} موضوعات" many: "التقدُّم: %{count} موضوعًا" other: "التقدُّم: %{count} موضوع" - notify: "إخطار المستخدمين بهذا التغيير." + notify: "إخطار المستخدمين بهذا التغيير" performing: "جارٍ تنفيذ عمليات جماعية، يُرجى الانتظار..." completed: "تم تنفيذ العمليات المجمعة بنجاح!" + completed_count: + zero: "تم تحديث %{count} من الموضوعات." + one: "تم تحديث موضوع واحد %{count}." + two: "تم تحديث موضوعين %{count}." + few: "تم تحديث %{count} موضوعات." + many: "تم تحديث %{count} موضوعًا." + other: "تم تحديث %{count} موضوع." + not_completed: + zero: "تعذر تحديث %{count} من الموضوعات:" + one: "تعذر تحديث موضوع واحد %{count}:" + two: "تعذر تحديث موضوعين %{count}:" + few: "تعذر تحديث %{count} موضوعات:" + many: "تعذر تحديث %{count} موضوعًا:" + other: "تعذر تحديث %{count} موضوع:" + skipped_count: + zero: "هناك %{count} من الموضوعات محدثة بالفعل." + one: "هناك موضوع واحد %{count} محدث بالفعل." + two: "هناك موضوعان %{count} محدثان بالفعل." + few: "هناك %{count} موضوعات محدثة بالفعل." + many: "هناك %{count} موضوعًا محدثًا بالفعل." + other: "هناك %{count} موضوع محدث بالفعل." error_topic_count: zero: "%{count} موضوعات" one: "موضوع واحد" @@ -4046,7 +4247,6 @@ ar: name: "تجاهل" close_topics: name: "إغلاق" - note: "ملاحظة" optional: (اختياري) archive_topics: name: "الأرشيف" @@ -4061,23 +4261,20 @@ ar: remove_tags: name: "إزالة الوسوم" append_tags: - name: "إضافة الوسوم" + name: "أضف وسوم" replace_tags: name: "استبدال الوسوم" delete_topics: name: "حذف" update_category: name: "تحديث الفئة" - description: "اختر الفئة الجديدة للموضوعات المحدَّدة" reset_bump_dates: name: "إعادة تعيين تواريخ الرفع" - description: "إعادة تعيين تاريخ رفع الموضوع إلى تاريخ آخر منشور تم إنشاؤه، مما يؤثر على الترتيب في قائمة الموضوعات" defer: name: "وضع علامة غير مقروءة" - description: "وضع علامة على الموضوعات كغير مقروءة" update_notifications: name: "تحديث الإشعارات" - description: "تغيير مستوى الإشعارات إلى \"مراقبة\" أو \"تتبع\" أو \"عادي\" أو \"كتم\"" + description: "قم بتحديث مستوى الإشعارات الشخصي للموضوعات المحددة ليصبح:" topic: filter_to: zero: "%{count} منشور في الموضوع" @@ -4087,7 +4284,8 @@ ar: many: "%{count} منشورًا في الموضوع" other: "%{count} منشور في الموضوع" create: "موضوع جديد" - create_long: "أنشئ موضوعًا جديدًا" + create_long: "إنشاء موضوع جديد" + create_group: "موضوع جديد ومسودات جديدة" open_draft: "فتح المسودة" private_message: "إنشاء رسالة" archive_message: @@ -4292,6 +4490,13 @@ ar: few: "مضت %{count} ساعات بالفعل على آخر منشور في الموضوع؛ لذا فسيتم إغلاق الموضوع على الفور." many: "مضت %{count} ساعة بالفعل على آخر منشور في الموضوع؛ لذا فسيتم إغلاق الموضوع على الفور." other: "مضت %{count} ساعة بالفعل على آخر منشور في الموضوع؛ لذا فسيتم إغلاق الموضوع على الفور." + auto_delete_immediate: + zero: "مضت %{count} من الساعات بالفعل على آخر منشور في الموضوع؛ لذا فسيتم حذف الموضوع على الفور." + one: "مضت ساعة واحدة (%{count}) بالفعل على آخر منشور في الموضوع؛ لذا فسيتم حذف الموضوع على الفور." + two: "مضت ساعتان (%{count}) بالفعل على آخر منشور في الموضوع؛ لذا فسيتم حذف الموضوع على الفور." + few: "مضت %{count} ساعات بالفعل على آخر منشور في الموضوع؛ لذا فسيتم حذف الموضوع على الفور." + many: "مضت %{count} ساعة بالفعل على آخر منشور في الموضوع؛ لذا فسيتم حذف الموضوع على الفور." + other: "مضت %{count} ساعة بالفعل على آخر منشور في الموضوع؛ لذا فسيتم حذف الموضوع على الفور." timeline: back: "الرجوع" back_description: "الرجوع إلى آخر منشور غير مقروء" @@ -4612,12 +4817,25 @@ ar: many: "لقد حدَّدت %{count} منشورًا." other: "لقد حدَّدت %{count} منشور." deleted_by_author_simple: "(تم حذف الموضوع بواسطة الكاتب)" + localizations: + title_edit_warning: + message: "هذا عنوان موضوع مترجم.

هل تريد تعديل الفئة، والوسوم، والعنوان الأصلي بلغة %{language}، أم تعديل هذه الترجمة تحديدًا؟" + action_original: "تعديل النسخة الأصلية" + action_translation: "تعديل عنوان الموضوع المترجم" + editing_translation: "تعديل الترجمة باللغة %{language}" post_list: title: "آخر المنشورات" empty: "لا توجد منشورات" aria_post_number: "%{title} - المنشور #%{postNumber}" bulk: - select_all: "حدّد الكلّ" + selected: + zero: "لم يتم تحديد أي منشورات" + one: "تم تحديد منشور" + two: "تم تحديد منشورين" + few: "تم تحديد %{count} منشورات" + many: "تم تحديد %{count} منشورًا" + other: "تم تحديد %{count} منشور" + select_all: "تحديد الكل" clear_all: "مسح الكل" actions: "الإجراءات الجماعية" post: @@ -4747,7 +4965,13 @@ ar: edit: "تعديل" delete: "حذف" add: "أضف ترجمة جديدة" - manage: "إدارة الترجمات (الموجودة: %{count})" + manage: + zero: "إدارة الترجمات (الموجودة: %{count})" + one: "إدارة الترجمات (الموجودة: %{count})" + two: "إدارة الترجمات (الموجودة: %{count})" + few: "إدارة الترجمات (الموجودة: %{count})" + many: "إدارة الترجمات (الموجودة: %{count})" + other: "إدارة الترجمات (الموجودة: %{count})" view: zero: "عرض %{count} من لغات الترجمة" one: "عرض لغة ترجمة واحدة %{count}" @@ -4788,7 +5012,7 @@ ar: attachment_upload_not_allowed_for_new_user: "عذرًا، لا يمكن للمستخدمين الجُدد تحميل المرفقات." attachment_download_requires_login: "عذرًا، عليك تسجيل الدخول لتنزيل المرفقات." cancel_composer: - confirm: "أتريد إهمال مشاركتك؟" + confirm: "أتريد تجاهل مشاركتك؟" discard: "تجاهل" via_email: "لقد وصل هذا المنشور عبر البريد الإلكتروني" via_auto_generated_email: "لقد وصل هذا المنشور عبر رسالة إلكترونية تم إنشاؤها تلقائيًا" @@ -4929,6 +5153,7 @@ ar: many: "هل تريد بالتأكيد دمج تلك المنشورات البالغ عددها %{count}؟" other: "هل تريد بالتأكيد دمج تلك المنشورات البالغ عددها %{count}؟" revisions: + diff_too_complex: "من المعقد للغاية عرض الفروقات. يُرجى محاولة عرض تعديلات فردية أصغر." locale: no_locale_set: "لم تُحدد أي لغة بعد" locale_removed: "تمت إزالة اللغة" @@ -5021,6 +5246,8 @@ ar: tags: "الوسوم" localizations: "التوطينات" localization: + language: "لغة الفئة" + language_description: "اللغة الرئيسية لاسم هذه الفئة ووصفها." locale: "اللغة" name: "الاسم" description: "الوصف" @@ -5041,11 +5268,17 @@ ar: delete: "حذف" add: "إضافة مجموعة الوسوم المطلوبة" placeholder: "تحديد مجموعة الوسوم…" + min_count: "عدد الوسوم" + tag_group: "مجموعة الوسوم" topic_featured_link_allowed: "السماح بالروابط المميَّزة في هذه الفئة." delete: "احذف الفئة" create: "فئة جديدة" + create_with_type: "الفئة %{typeName} الجديدة" create_long: "إنشاء فئة جديدة" + type_settings_schema: + site_settings: "إعدادات الموقع" save: "احفظ الفئة" + unsaved_changes: "لديك تغييرات غير محفوظة" slug: "مسار الفئة" parent: "الفئة الرئيسية" slug_placeholder: "(اختياري) كلمات مفصولة بشرطة لعنوان URL" @@ -5054,6 +5287,7 @@ ar: errors: self_lockout: "أنت على وشك تغيير أذونات الفئة بطريقة ستؤدي إلى إزالة صلاحية وصولك. هل أنت متأكد من رغبتك في المتابعة؟" validations: + emoji_required: "اختيار رمز تعبيري." icon_required: "تحديد أيقونة." name: "اسم الفئة" untitled: "فئة بلا عنوان" @@ -5091,6 +5325,8 @@ ar: list: "إدراج الفئات" no_description: "يُرجى إضافة وصف لهذه الفئة." change_in_category_topic: "عدّل الوصف" + description_expand: "عرض المزيد" + description_collapse: "عرض أقل" already_used: "هذا اللون مستخدم بالفعل في فئة أخرى" color_palette: "لوحة الألوان" security: "الأمان" @@ -5101,9 +5337,15 @@ ar: reply: "الرد" create: "إنشاء" no_groups_selected: "لم يتم منح إذن الوصول لأي مجموعة؛ لذا فإن هذه الفئة ستكون مرئية لفريق العمل فقط." + everyone_full_access: 'هذه الفئة عامة، ويمكن للجميع رؤية المنشورات والرد عليها وإنشائها. لتقييد الأذونات، عليك إزالة واحد أو أكثر من الأذونات الممنوحة لمجموعة "%{everyone_group}".' + everyone_reply_access: 'هذه الفئة عامة، ويمكن للجميع رؤية الموضوعات والرد عليها. لتقييد الأذونات، قم بإزالة المجموعة "%{everyone_group}".' + everyone_see_access: 'هذه الفئة عامة، ويمكن للجميع رؤية المنشورات. لتقييد الأذونات، قم بإزالة المجموعة "%{everyone_group}".' specific_groups_have_access: "هذه الفئة خاصة، ويمكن للمجموعات المختارة فقط رؤية المنشورات والرد عليها وإنشائها." + all_parent_groups_used: "تمت إضافة جميع المجموعات من الفئة الرئيسية. لإضافة مجموعات أكثر، أضفها أولاً إلى الفئة الرئيسية." toggle_reply: "إذن تفعيل الرد" toggle_full: "إذن تفعيل الإنشاء" + inherited: 'هذا الإذن مكتسب من "%{everyone_group}"' + special_warning: "هذه الفئة مصنَّفة مسبقًا ولا يمكن تعديل إعدادات الأمان لها. إذا كنت لا ترغب في استخدام هذه الفئة، فعليك حذفها بدلًا من إعادة توظيفها." uncategorized_security_warning: "هذه الفئة خاصة. وتهدف إلى جمع الموضوعات التي لا تنتمي إلى أي فئة، ولا يمكنك تعيين إعدادات حماية لها." uncategorized_general_warning: 'هذه الفئة خاصة. ويتم استخدامها كفئة افتراضية للموضوعات الجديدة التي لا تنتمي إلى أي فئة. إذا أردت منع هذا السلوك وفرض تحديد الفئة، يُرجى إيقاف هذا الإعداد من هنا. إذا أردت تغيير اسم الفئة أو وصفها، فانتقل إلى التخصيص/المحتوى النصي.' pending_permission_change_alert: "لم تُضف المجموعة %{group} إلى هذه الفئة، انقر على هذا الزر لإضافتها." @@ -5120,22 +5362,39 @@ ar: all_topics_wiki: "تحويل الموضوعات الجديدة إلى Wiki بشكلٍٍ افتراضي" allow_unlimited_owner_edits_on_first_post: "السماح للمالك بعدد غير محدود من التعديلات على أول منشور" subcategory_list_style: "نمط قائمة الفئات الفرعية:" + sort_order: "ترتيب قائمة الموضوعات حسب:" + default_view: "قائمة الموضوعات الافتراضية:" + default_top_period: "الفترة الافتراضية للأكثر عرضًا:" + default_list_filter: "تصفية القائمة الافتراضية:" allow_badges_label: "السماح بمنح الشارات في هذه الفئة" edit_permissions: "عدّل الأذونات" reviewable_by_group: "بالإضافة إلى فريق العمل، يمكن أيضًا مراجعة المحتوى في هذه الفئة من قِبل:" review_group_name: "اسم المجموعة" require_topic_approval: "طلب موافقة المشرف على كل الموضوعات الجديدة" require_reply_approval: "طلب موافقة المشرف على جميع الردود الجديدة" + posting_review_modes: + no_one: "لا أحد" + everyone: "الجميع" + posting_review_groups_placeholder: "تحديد المجموعات..." this_year: "هذا العام" position: "الترتيب في صفحة الفئات:" + default_position: "الترتيب الافتراضي" position_disabled: "سيتم عرض الفئات بترتيب النشاط. للتحكم في ترتيب الفئات في القوائم، قم بتفعيل الإعداد \"المواضع الثابتة للفئات\"." minimum_required_tags: "الحد الأدنى من عدد الوسوم المطلوبة في الموضوع:" + default_slow_mode: 'تفعيل "الوضع البطيء" للموضوعات الجديدة في هذه الفئة.' + subcategory_of: "فئة فرعية من..." none_subcategory_text: "لا يوجد" + subcategory_permissions_warning: "لا يمكن أن تكون الفئة الفرعية لفئة خاصة عامة." visibility: title: "الرؤية" public: "عام" all_members: "جميع الأعضاء" group_restricted: "خاص" + who_can_see: "من يمكنه رؤية هذه الفئة؟" + who_can_post: "من يمكنه النشر في هذه الفئة" + which_groups_can_access: "المجموعات التي يمكن من خلالها الاطلاع على هذه الفئة والنشر فيها" + more_options_hint: "تتوفر المزيد من الأذونات في الإعدادات المتقدمة." + inherited_from_parent: "الأذونات مكتسبة من الفئة الأصلية. للتعديل عليها، يُرجى الانتقال إلى الإعدادات المتقدمة." num_auto_bump_daily: "عدد الموضوعات المفتوحة التي سيتم رفعها تلقائيًا بشكلٍ يومي:" auto_bump_cooldown_days: "الحد الأدنى لعدد الأيام قبل رفع الموضوع نفسه مرة أخرى:" navigate_to_first_post_after_read: "الانتقال إلى أول منشور بعد قراءة الموضوعات" @@ -5514,6 +5773,7 @@ ar: download: "تنزيل" open: "الصورة الأصلية" image_info: "معلومات الصورة" + quote: "اقتباس الصورة" previous: "السابق (مفتاح السهم الأيسر)" next: "التالي (مفتاح السهم الأيمن)" counter: "%curr% من %total%" @@ -5541,6 +5801,7 @@ ar: latest: "%{shortcut} الحديثة" new: "%{shortcut} الجديدة" unread: "%{shortcut} غير المقروءة" + unseen: "%{shortcut} غير مقروء" categories: "%{shortcut} الفئات" top: "%{shortcut} الأكثر نشاطًا" bookmarks: "%{shortcut} الإشارات المرجعية" @@ -5555,11 +5816,12 @@ ar: back: "%{shortcut} الرجوع" up_down: "%{shortcut} نقل التحديد ↑ ↓" open: "%{shortcut} فتح الموضوع المحدَّد" + open_new_window: "%{shortcut} فتح الموضوع المحدد في تبويب/نافذة جديدة" next_prev: "%{shortcut} القسم التالي/السابق" go_to_unread_post: "%{shortcut} الانتقال إلى أول منشور غير مقروء" application: title: "التطبيق" - create: "%{shortcut} أنشئ موضوع جديد أو رسالة شخصية" + create: "%{shortcut} أنشئ موضوعًا جديدًا أو رسالة شخصية" notifications: "%{shortcut} فتح الإخطارات" hamburger_menu: "%{shortcut} فتح قائمة التنقل" user_profile_menu: "%{shortcut} فتح قائمة المستخدم" @@ -5706,6 +5968,7 @@ ar: add_to_calendar: "إضافة إلى التقويم" google: "تقويم Google" ics: "ICS" + default_title: "حدث مجدول" tagging: all_tags: "كل الوسوم" other_tags: "وسوم أخرى" @@ -5734,6 +5997,7 @@ ar: category_restricted: "هذا الوسم مقيَّد بالفئات التي ليس لديك إذن بالوصول إليها." synonyms: "المرادفات" synonyms_description: "عند استخدام الوسوم التالية، سيتم استبدالها بالوسم %{base_tag_name}." + synonyms_inline: "سيتم استبدال هذه المرادفات بـ %{base_tag_name}:" save: "حفظ اسم الوسم ووصفه" tag_groups_info: zero: "هذا الوسم ينتمي إلى المجموعة: %{tag_groups}." @@ -5742,6 +6006,13 @@ ar: few: "هذا الوسم ينتمي إلى المجموعات: %{tag_groups}." many: "هذا الوسم ينتمي إلى المجموعات: %{tag_groups}." other: "هذا الوسم ينتمي إلى المجموعات: %{tag_groups}." + tag_groups_info_prefix: + zero: "هذا الوسم ينتمي إلى المجموعة " + one: "هذا الوسم ينتمي إلى المجموعة " + two: "هذا الوسم ينتمي إلى المجموعتين: " + few: "هذا الوسم ينتمي إلى المجموعات: " + many: "هذا الوسم ينتمي إلى المجموعات: " + other: "هذا الوسم ينتمي إلى المجموعات: " category_restrictions: zero: "لا يمكن استخدامه إلا في هذه الفئة:" one: "لا يمكن استخدامه إلا في هذه الفئة:" @@ -5749,6 +6020,8 @@ ar: few: "لا يمكن استخدامه إلا في هذه الفئات:" many: "لا يمكن استخدامه إلا في هذه الفئات:" other: "لا يمكن استخدامه إلا في هذه الفئات:" + restricted_to: "مقيد إلى" + no_synonyms: "هذا الوسم ليست له مرادفات." edit_synonyms: "تعديل المرادفات" add_synonyms_label: "إضافة المرادفات:" add_synonyms: "إضافة" @@ -5780,7 +6053,34 @@ ar: other: "سيتم حذف مرادفاته (%{count}) أيضًا." edit_tag: "تعديل اسم الوسم ووصفه" edit: "عدِّل هذا الوسم" - description: "الوصف (1000 حرف كحد أقصى)" + description: "الوصف" + settings: + title: "الإعدادان" + edit_title: "تعديل الوسم: %{name}" + edit_tag_prefix: "تعديل الوسم:" + select_tag: "حدد وسمًا لتحريره" + general: "عام" + localizations: "التوطينات" + back: "رجوع" + name: "الاسم" + slug: "المسار" + name_placeholder: "اسم الوسم" + slug_placeholder: "مسار الوسم (اختياري، يُنشأ تلقائيًا من الاسم)" + saved: "حُفظت إعدادات الوسم" + no_synonyms: "لا توجد مرادفات محددة لهذا الوسم." + add_synonym_placeholder: "ابحث عن الوسوم لإضافتها كمرادفات..." + synonyms_subtitle: "عند استخدام الوسوم التالية، سيتم استبدالها بالوسم %{name}" + save: "حفظ الوسم" + delete: "حذف الوسم" + synonyms_hint: "عند استخدام الوسوم السابقة، سيتم استبدالها بالوسم %{baseTagName}." + add_synonyms_confirm: "سيتحوَّل أي مكان يستخدم %{synonymNames} حاليًا إلى استخدام %{tagName} بدلًا منه. هل تريد بالتأكيد إجراء هذا التغيير؟" + localization: + hint: "أضف خيارات التوطين لعرض أسماء وسوم مختلفة للمستخدمين بلغات مختلفة." + locale: "اللغة" + name: "الاسم" + description: "الوصف" + add: "إضافة التوطين" + remove: "إزالة التوطين" sort_by: "الترتيب حسب:" sort_by_count: "العدد" sort_by_name: "الاسم" @@ -5790,7 +6090,23 @@ ar: upload_description: "تحميل ملف CSV لإنشاء الوسوم بشكلٍٍ جماعي" upload_instructions: "واحد في كل سطر، مع مجموعة وسوم بالتنسيق 'tag_name,tag_group' بشكلٍٍ اختياري." upload_successful: "تم تحميل الوسوم بنجاح" + bulk_create_inline_placeholder: "إنشاء وسوم (مفصولة بفواصل)" bulk_create_button: "إنشاء" + bulk_create_success: + zero: "الوسوم (%{count}) التي تم إنشاؤها:" + one: "الوسم (%{count}) الذي تم إنشاؤه:" + two: "الوسمان (%{count}) اللذان تم إنشاؤهما:" + few: "الوسوم (%{count}) التي تم إنشاؤها:" + many: "الوسوم (%{count}) التي تم إنشاؤها:" + other: "الوسوم (%{count}) التي تم إنشاؤها:" + bulk_create_already_exist: + zero: "%{count} وسم موجود بالفعل:" + one: "%{count} وسم موجود بالفعل:" + two: "%{count} وسم موجودان بالفعل:" + few: "%{count} وسوم موجودين بالفعل:" + many: "%{count} وسمًا موجودين بالفعل:" + other: "%{count} وسم موجودين بالفعل:" + bulk_create_some_failed: "فشل إنشاء بعض الوسوم:" delete_unused_confirmation: zero: "سيتم حذف %{count} وسم: %{tags}" one: "سيتم حذف وسم واحد (%{count}): %{tags}" @@ -5963,6 +6279,7 @@ ar: tags_form_modal: title: "يمكنك تعديل التنقل بين الوسوم" filter_placeholder: "تصفية الوسوم" + no_tags: "لا توجد وسوم مطابقة لعوامل التصفية الحالية." subtitle: text: "وسنعرض تلقائيًا أهم الوسوم على هذا الموقع" edit_navigation_modal_form: @@ -6060,6 +6377,8 @@ ar: header_link_text: "الفئات" header_action_title: "تعديل فئات الشريط الجانبي" header_action_new: "فئة جديدة" + header_action_edit_sidebar: "تعديل فئات الشريط الجانبي" + header_action_edit_header_dropdown: "تعديل فئات التنقل" configure_defaults: "إعداد الإعدادات الافتراضية" community: edit_section: @@ -6140,6 +6459,7 @@ ar: dark: "داكن" auto: "الوضع التلقائي" title: "وضع اللون" + aria_label: "وضع الألوان، حاليًا %{mode}" welcome_topic_banner: title: "إنشاء موضوعك الترحيبي" description: "إن موضوعك الترحيبي هو أول ما يقرأه الأعضاء الجُدد. انظر إليه على أنه \"عرض ترويجي\" أو \"بيان مهمة\". دَع الجميع يعرفون الجمهور المستهدف بهذا المجتمع، وما يتوقعون العثور عليه هنا، وما تريد منهم أن يفعلوه أولًا." @@ -6331,10 +6651,18 @@ ar: bookmarks: "الموضوعات في %{category} بدون وسوم التي وضعت إشارة مرجعية عليها" default: "الموضوعات في %{category} وفق %{filter} بدون وسوم" categories: "كل الفئات" + content_localization: + toggle_localized: + translated: "تمت ترجمة الصفحة آليًا. انقر لعرض النسخة الأصلية." + not_translated: "الصفحة غير مترجمة. انقر للترجمة." + translations_enabled: "تم تفعيل الترجمات" + translations_disabled: "تم تعطيل الترجمات" + language_switcher: + title: "تغيير لغة الموقع" admin_js: type_to_filter: "اكتب للتصفية…" settings: "الإعدادات" - reset_filter: "إعادة التعيين" + toggle_filters: "تبديل عوامل تصفية القائمة المنسدلة" admin: title: "مسؤول Discourse" moderator: "مشرف" @@ -6347,9 +6675,14 @@ ar: never: "أبدًا" reports: title: "قائمة التقارير المتاحة" - meta_doc: "تُعَد التقارير أداةً قوية لمساعدتك على فيهم ما يحدث على موقعك. ويمكنها مساعدتك في تحديد الاتجاهات الرائجة، واكتشاف المشكلات، واتخاذ القرارات استنادًا إلى البيانات." sidebar_title: "التقارير" back: "العودة إلى جميع التقارير" + group_engagement: "التفاعل" + group_traffic: "الزيارات" + group_members: "الأعضاء" + group_content: "المحتوى والصحة" + group_other: "أخرى" + legacy_warning: "هذا تقرير قديم، وسيتم إيقافه قريبًا. يرجى الاتصال بالدعم الفني إذا كنت بحاجة إلى مساعدة في إيجاد بديل." config_sections: account: title: "الحساب" @@ -6372,21 +6705,45 @@ ar: plugin: "الإضافات" metadata: "البيانات الوصفية" enabled: "مفعَّلة" + enabled_for: "مُفعّل لـ..." show_image: "اعرض الصورة" + edit_groups: "تعديل مجموعات الانضمام الاختياري" groups_updated: "حُدثت المجموعات!" save_groups: "احفظ المجموعات" + add_groups_to_enable: "أضف مجموعات لتفعيل هذه الميزة" + no_changes_to_save: "لا توجد تغييرات للحفظ" select_groups: "تحديد المجموعات…" + opt_in_groups: "مجموعات الانضمام الاختياري" + show_related_settings: "إظهار الإعدادات ذات الصلة..." + opt_in_groups_instructions: "يمكن استخدام مجموعات الانضمام الاختياري للسماح لمجموعة معينة من المستخدمين باختبار تغييرٍ ما قبل طرحه للجميع. يرجى ملاحظة أن هذه المجموعات لن تكون ذات صلة بمجرد انتقال التغيير إلى الحالة المستقرة." + enabled_for_throttle: "لقد قمت بتغيير الأشخاص المفعَّلة لديهم هذه الميزة بسرعة كبيرة. يرجى الانتظار لبضع ثوانٍ قبل المحاولة مرة أخرى." + change_enabled_for_success: "لقد فعلت هذا التغيير لـ %{enabledFor}" + change_disabled: "تم إلغاء اشتراكك في هذا التغيير" + permanent_notice: "أصبح هذا التغيير دائمًا وسيتم إزالته قريبًا. لم يعد بإمكانك إلغاء الاشتراك." + permanent_soon_notice: "سيصبح هذا التغيير دائمًا في أقرب وقت. لن تتمكن بعد الآن من إلغاء الاشتراك." + permanent_no_group_selection: "لا ينطبق؛ حيث تسري التغييرات الدائمة على كافة المجموعات" + no_changes: "لا توجد تغييرات قادمة في الوقت الحالي." preview: "معاينة" enabled_for_options: no_one: "لا أحد" everyone: "الجميع" - staff: "لفريق العمل فقط" + staff: "%{staffGroupName} فقط" + specific_groups: "مجموعة (مجموعات) محددة" + specific_groups_with_group_names: + zero: "المجموعة %{groupNames}" + one: "المجموعة %{groupNames}" + two: "المجموعتان %{groupNames}" + few: "المجموعات %{groupNames}" + many: "المجموعات %{groupNames}" + other: "المجموعات %{groupNames}" statuses: experimental: "تجريبي" alpha: "ألفا" beta: "تجريبي" stable: "مستقر" permanent: "دائم" + status_descriptions: + experimental: "هذا المنتج لا يزال في مراحل التطوير المبكرة وقد يخضع لتغييرات كبيرة أو يتم إيقافه. قد لا يكون متوافقًا تمامًا مع الميزات الأخرى." impact_roles: admins: "المسؤولون" moderators: "المشرفون" @@ -6394,12 +6751,25 @@ ar: all_members: "جميع الأعضاء" developers: "المطوّرون" filter: + search_placeholder: "تصفية حسب الاسم، أو الوصف، أو المكون الإضافي..." + no_results: "لا توجد تغييرات قادمة تطابق معايير التصفية" all: "الكل" + enabled_all: "جميع الحالات المُفعّلة" enabled: "مفعَّلة" + enabled_for_staff: "مُفعّل لصالح %{staffGroupName}" + enabled_for_specific_groups: "مُفعّل لصالح مجموعات محددة" disabled: "متوقفة" + impact_type_all: "كل أنواع التأثيرات" impact_type_feature: "الميزة" impact_type_other: "أخرى" + status_all: "جميع الحالات" + status_conceptual: "مفاهيمي" status_experimental: "تجريبي" + status_alpha: "ألفا" + status_beta: "تجريبي" + status_stable: "مستقر" + status_permanent: "دائم" + impact_role_all: "جميع الأدوار المتأثرة" impact_role_admins: "المسؤولون" impact_role_moderators: "المشرفون" impact_role_staff: "فريق العمل" @@ -6435,17 +6805,32 @@ ar: title: "التوطين" header_description: "ضبط لغة واجهة المنتدى وخيارات التوطين الأخرى لأعضاء مجتمعك" keywords: "اللغة|اللغة|المنطقة الزمنية|unicode|من اليسار إلى اليمين" + upcoming_changes: + title: "التغييرات القادمة" + header_description: "قائمة بالتغييرات القادمة في Discourse التي قد تؤثر في موقعك، إضافةً إلى الميزات التجريبية التي يمكنك الاشتراك فيها. يمكنك التصفية حسب مستوى التأثير، والنوع، والحالة.\n\nيمكن استخدام مجموعات الانضمام الاختياري لتمكين مجموعة محددة من المستخدمين من اختبار تغييرٍ ما قبل طرحه للجميع، مع العلم أن هذه المجموعات تصبح غير ذات صلة بمجرد انتقال التغيير إلى الحالة الدائمة." login: title: "تسجيل الدخول والمصادقة" - header_description: "تكوين كيفية تسجيل دخول المستخدمين ومصادقتهم، والعبارات السرية، والمفاتيح، ومقِّدمي OAuth2، وغير ذلك" + header_description: "تكوين كيفية تسجيل دخول المستخدمين ومصادقتهم، والعبارات السرية، والمفاتيح، ومقدِّمي المصادقة الثنائية، وغير ذلك" sub_pages: common_settings: - title: "الإعدادان" + title: "الإعدادات" + authenticators: + title: "تسجيل الدخول بحساب تواصل اجتماعي" + discourseconnect: + title: "Discourse Connect" discourse_id: title: "معرّف Discourse" discourse_id: title: "معرّف Discourse" + stats: + total_users: "إجمالي المستخدمين" + signups_30_days: "عمليات التسجيل (آخر 30 يومًا)" + logins_30_days: "تسجيلات الدخول (آخر 30 يومًا)" + regenerate_credentials: "إعادة إنشاء بيانات الاعتماد" + regenerate_confirm: "هل أنت متأكد من رغبتك في إعادة إنشاء بيانات اعتماد معرف Discourse لديك؟ سيؤدي ذلك إلى إنشاء سر عميل جديد. عادةً لا يكون إعادة إنشاء بيانات الاعتماد ضروريًا، لكنه قد يكون مفيدًا لتعزيز الأمان." + description: "يعد معرف Discourse خدمة تسجيل دخول موحد تتيح للمستخدمين الوصول إلى عدة مواقع Discourse باستخدام حساب واحد فقط. كما يدعم مقدمو خدمات تسجيل الدخول عبر حسابات التواصل الاجتماعي الشائعة مثل Google وFacebook وApple وGitHub دون الحاجة إلى إعدادات إضافية." learn_more: "معرفة المزيد" + regenerate_success: "تم إعادة إنشاء بيانات الاعتماد بنجاح." logo: title: "الشعار" header_description: "ضبط الشعارات والرموز المستخدمة في جميع أنحاء موقعك" @@ -6461,7 +6846,7 @@ ar: help_text: "الحجم الموصى به هو 600 × 80 بكسل." large_icon: title: "أيقونة مربعة" - description: "يُعرض إصدار مربع من صورة الشعار في الجزء العلوي من واجهة الإدارة، ويُستخدم أيضًا كشعار لتطبيق الهاتف على الشاشة الرئيسية." + description: "يُعرض إصدار مربع من صورة الشعار في الجزء العلوي من الموقع، ويُستخدم أيضًا كشعار لتطبيق الهاتف." help_text: "الحجم الموصى به هو 512 × 512 بكسل." square_icon_dark: required: "هل تريد استخدام أيقونة مربعة مختلفة للوضع الداكن؟" @@ -6537,26 +6922,61 @@ ar: modal_yes: "نعم" modal_no: "لا، يُطبَّق ذلك فقط على الاستخدامات المستقبلية" welcome_banner: + title: "بانر الترحيب" + header_description: "اضبط البانر التي يحتوي على شريط بحث ويعرض لزوار موقعك." + saved: "تم حفظ إعدادات بانر الترحيب بنجاح." form: + enabled_themes: + label: "مفعّل على السمات..." + description: "اختر السمات التي يجب أن تعرض البانر. يتم عرض السمات النشطة فقط." + select_label: "اختر السمات" + background_image: + label: "صورة الخلفية" + description: "ستُعرض هذه الصورة خلف نص البانر." text_color: label: "لون النص" + description: "عند تحميل \"صورة الخلفية\" أعلاه، استخدم هذا الإعداد لتغيير لون نص البانر لضمان وضوحه. إذا تُرك فارغًا أو لم يتم تحميل صورة خلفية، تتحكم السمة النشطة في اللون." page_visibility: + label: "رؤية الصفحة" + description: "اختر موقع عرض البانر" options: top_menu_pages: "الصفحات المدرجة في القائمة العلوية" + homepage: "الصفحة الرئيسية فقط" + discovery: "صفحات الاستكشاف" all_pages: "جميع الصفحات" location: label: "الموقع الجغرافي" + description: "اختر مكان ظهور البانر على الصفحة." options: above_topic_content: "فوق محتوى الموضوع" below_site_header: "أسفل رأس الموقع" text_section: + title: "نص قابل للتخصيص" locale_label: "اللغة" header_new_members: + label: "رأس الصفحة للأعضاء الجدد" + description: "المتغيرات المتاحة: %{site_name}, %{preferred_display_name}" placeholder: "مرحبًا بك، %{preferred_display_name}!" header_logged_in: + label: "رأس الصفحة للأعضاء المسجلين" + description: "المتغيرات المتاحة: %{site_name}, %{preferred_display_name}" placeholder: "مرحبًا بعودتك يا %{preferred_display_name}!" header_anonymous: + label: "رأس الصفحة للزوار المجهولين" + description: "المتغيرات المتاحة: %{site_name}" placeholder: "مرحبًا بك في %{site_name}!" + subheader_logged_in: + label: "العنوان الفرعي للأعضاء المسجلين" + description: "النص الثانوي المعروض أسفل الرأس للأعضاء المسجلين." + placeholder: "اكتشف كل جديد في المجتمع" + subheader_anonymous: + label: "العنوان الفرعي للزوار المجهولين" + description: "النص الثانوي المعروض أسفل الرأس للزوار المجهولين." + placeholder: "انضم إلى مجتمعنا للمشاركة في المناقشات" + search_placeholder: + label: "نص العنصر النائب للبحث" + description: "نص العنصر النائب لمربع البحث في بانر الترحيب." + placeholder: "موضوعات البحث..." navigation: title: "التنقل" header_description: "تكوين روابط التنقل وعناصر القائمة لموقعك. يتضمَّن ذلك الموقع وسلوك قائمة التنقل الرئيسية، والروابط السريعة في أعلى الصفحة الرئيسية، والشريط الجانبي للمسؤول" @@ -6618,7 +7038,7 @@ ar: header_description: "تُعَد التقارير أداةً قوية لمساعدتك على فيهم ما يحدث على موقعك. ويمكنها مساعدتك على تحديد الاتجاهات الرائجة، واكتشاف المشكلات، واتخاذ القرارات استنادًا إلى البيانات." sub_pages: settings: - title: "إعدادات لوحة المعلومات" + title: "الإعدادان" badges: title: "الشارات" header_description: "تكافئ الشارات المستخدمين على أنشطتهم ومساهماتهم وإنجازاتهم، بهدف الاعتراف بجهودهم وتقديرها وتشجيع السلوك الإيجابي وتعزيز التفاعل داخل المجتمع." @@ -6751,6 +7171,9 @@ ar: embedding: title: "التضمين" header_description: "يتمتع Discourse بالقدرة على تضمين التعليقات من أحد الموضوعات في موقع بعيد باستخدام واجهة برمجة تطبيقات Javascript التي تُنشئ IFRAME" + form_templates: + title: "قوالب النموذج" + header_description: "تتيح لك قوالب النماذج تطبيق نموذج منظم مع التحقق من صحة البيانات كجزء من عملية إنشاء الموضوع" theme_site_settings: setting: "الإعداد" overridden_by: "تم استبداله بواسطة" @@ -6759,6 +7182,8 @@ ar: select_setting: "اختر إعدادًا من الموقع لعرض القيم الحالية للسمة" add: "اذهب إلى إعدادات سمة الموقع" help: "السمة التي تستخدمها حاليًا هي %{currentTheme}. انتقل إلى صفحة إعدادات السمة لتعديل إعدادات موقع السمة، أو انقر على أي سمة مرتبطة في الجدول أدناه لتعديل إعداداته." + filter: "تصفية إعدادات موقع السمة حسب اسم الإعداد، أو الوصف، أو اسم السمة..." + filter_no_results: "لا توجد إعدادات لموقع السمة تتطابق مع عامل التصفية" site_setting_warning: 'تتم إدارة هذا الإعداد بواسطة القالب الافتراضي لموقعك (%{defaultThemeName}). يمكنك تعديله من صفحة تحرير القالب.' search: modal_title: "ابحث عن كل شيء في المسؤول" @@ -6773,42 +7198,6 @@ ar: few: '%{count} نتائج عن "%{filter}"' many: '%{count} نتيجة عن "%{filter}"' other: '%{count} نتيجة عن "%{filter}"' - result_types: - page: - zero: "صفحات" - one: "صفحة" - two: "صفحتان" - few: "صفحات" - many: "صفحات" - other: "صفحات" - report: - zero: "التقارير" - one: "التقرير" - two: "التقريران" - few: "التقارير" - many: "التقارير" - other: "التقارير" - setting: - zero: "الإعدادات" - one: "الإعداد" - two: "الإعدادان" - few: "الإعدادات" - many: "الإعدادات" - other: "الإعدادات" - theme: - zero: "السمات" - one: "السمة" - two: "السمتان" - few: "السمات" - many: "السمات" - other: "السمات" - component: - zero: "المكوِّنات" - one: "المكوِّن" - two: "المكوِّنان" - few: "المكوِّنات" - many: "المكوِّنات" - other: "المكوِّنات" new_features: title: "ما الجديد؟" check_for_updates: "تحقَّق من وجود تحديثات" @@ -6831,24 +7220,9 @@ ar: new_features: title: "ما الجديد؟" subtitle: "نحن نصدر ميزات وتحسينات جديدة طوال الوقت. تغطي هذه الصفحة أبرز النقاط، ولكن يمكنك النقر على \"معرفة المزيد\" للاطلاع على ملاحظات الإصدار الشاملة." + no_new_features_found: "لا توجد عناصر في الموجز أو أن عامل التصفية الذي اخترته لم يُظهر أي نتائج. يمكنك الاطلاع على الإعلانات السابقة للميزات الجديدة على مجتمع Discourse Meta." + no_new_features_error: "حدث خطأ أثناء تحميل الموجز. يمكنك الاطلاع على الإعلانات السابقة للميزات الجديدة في مجتمع Discourse Meta." learn_more: "معرفة المزيد..." - experimental: "تجريبي" - only_experiments: "عرض الميزات التجريبية فقط" - experiment_enabled: "لقد فعَّلت الميزة التجريبية." - experiment_disabled: "لقد أوقفت الميزة التجريبية." - feature_enabled: "تم تفعيل هذه الميزة بنجاح." - feature_disabled: "تم تعطيل هذه الميزة." - toggled_too_fast: "لقد بدلت الزر بسرعة كبيرة. يُرجى الانتظار بضع ثوانٍ قبل إعادة المحاولة." - experiment_tooltip: - title_disabled: "جرّب هذه الميزة التجريبية" - title_enabled: "إيقاف تشغيل الميزة التجريبية" - content_disabled: "جرّب أحدث ميزاتنا قيد التطوير! ما زالت في المرحلة التجريبية، لذلك قد نزيلها في أي وقت. يمكنك إيقافها متى شئت.

سيؤدي تغيير هذا الإعداد إلى تفعيل الميزة لجميع المستخدمين." - content_enabled: "سيؤدي تغيير هذا إلى الإعداد إلى إيقاف الميزة لجميع المستخدمين." - feature_tooltip: - title_disabled: "جرب هذه الميزة" - title_enabled: "إيقاف تشغيل الميزة" - content_disabled: "جرّب هذه الميزة الجديدة! يمكنك إلغاء الاشتراك متى شئت.

سيؤدي تغيير هذا إلى تفعيل الميزة لجميع المستخدمين." - content_enabled: "سيؤدي تغيير هذا إلى الإعداد إلى إيقاف الميزة لجميع المستخدمين." last_checked: "تاريخ آخر تحقُّق" refresh_problems: "تحديث" no_problems: "لم يتم العثور على مشكلات." @@ -6927,10 +7301,11 @@ ar: all: "الكل" view_table: "جدول" view_graph: "رسم بياني" - refresh_report: "تحديث التقرير " + refresh_report: "تحديث" daily: يوميًا monthly: شهريًا weekly: أسبوعيًا + value_so_far: "%{value} (حتى الآن)" dates: "التواريخ (بالتوقيت العالمي الموحَّد)" groups: "كل المجموعات" disabled: "هذا التقرير متوقف" @@ -6941,7 +7316,9 @@ ar: trending_search: more: 'سجلات البحث' disabled: 'تقرير عبارات البحث الرائجة متوقف. قم بتفعيل تسجيل استعلامات البحث لجمع البيانات.' + average_chart_label: عرض المتوسطات، وليس الإجمالي sort_button: "الترتيب حسب %{column}" + sort_button_current: "مرتب حسب %{column}، %{direction}" sort_ascending: "تصاعدي" sort_descending: "تنازلي" filters: @@ -7059,6 +7436,7 @@ ar: cancel: "إلغاء" continue: "متابعة" copy_key: "نسخ" + key_copied_to_clipboard: "تم نسخ مفتاح API إلى الحافظة" back: "العودة إلى مفاتيح API" revoke: "إلغاء" undo_revoke: "التراجع عن الإلغاء" @@ -7126,6 +7504,7 @@ ar: recover: استرداد موضوع read_lists: قراءة قوائم الموضوعات مثل الأكثر نشاطًا، والجديدة، والحديثة، وما إلى ذلك. يتم دعم RSS أيضًا. status: "تحديث حالة موضوع. الحالة: مغلق، مؤرشف، مرئي، مثبَّت. مفعَّل: true, false. حدِّد category_id هنا وفي حمولة الطلب للسماح بتغييرات الحالة في الموضوعات في تلك الفئة فقط." + change_owner: تغيير ملكية المنشورات في موضوع معين. posts: edit: تعديل أي منشور أو منشور معيَّن. delete: حذف منشور. @@ -7158,6 +7537,7 @@ ar: suspend: تعليق حسابات المستخدمين. delete: حذف حسابات المستخدمين list: الحصول على قائمة بالمستخدمين. + create: إنشاء مستخدم جديد. user_status: read: قراءة حالة المستخدم. update: تحديث حالة المستخدم. @@ -7261,6 +7641,7 @@ ar: user_destroyed: "تم حذف المستخدم" user_suspended: "تم تعليق المستخدم" user_unsuspended: "تم إلغاء تعليق المستخدم" + user_anonymized: "المستخدم مجهول" reviewable_event: group_name: "الأحداث القابلة للمراجعة" reviewable_created: "أصبح العنصر القابل للمراجعة جاهزًا" @@ -7505,8 +7886,10 @@ ar: install: "تثبيت" theme_site_settings: title: "إعدادات موقع السمات" + description: "إعدادات تتيح للسمات التحكم بشكل أكبر في تجربة الموقع بالكامل من خلال تجاوز مجموعة محددة من إعدادات الموقع الأساسية." themes: title: "السمات" + description: "السمات الشاملة للموقع التي تغيّر المظهر العام وتجربة استخدام الموقع لجميع المستخدمين." themes_intro: "ثبّت سِمة جديدة للبدء، أو أنشئ سِمتك الخاصة من الصفر باستخدام هذه الموارد." new_theme: "سمة جديدة" back: "الرجوع إلى قائمة السمات" @@ -7576,6 +7959,8 @@ ar: title: "خيارات اللون" toggle: "قابلة للاختيار من قِبل المستخدم" toggle_description: "يمكن تحديد لوحة الألوان من قِبل المستخدمين" + toggle_default_light_on_theme: "لوحة الألوان هي لوحة الألوان الفاتحة الافتراضية في السمة الافتراضية (%{themeName})" + toggle_default_dark_on_theme: "لوحة الألوان هي لوحة الألوان الداكنة الافتراضية في السمة الافتراضية (%{themeName})" colors: title: "الألوان" save_changes: "حفظ التغييرات" @@ -7666,6 +8051,7 @@ ar: confirm: "هل تريد بالتأكيد مسح هذه النسخة الاحتياطية؟" restore: is_disabled: "تم تعطيل الاستعادة حاليًا. لتفعيلها، انتقل إلى إعدادات الموقع." + is_disabled_title: "تم تعطيل عملية الاستعادة حاليًا. لتفعيلها، ابحث عن \"السماح بالاستعادة\" (allow restore) في إعدادات الموقع." label: "استعادة" title: "استعادة النسخة الاحتياطية" confirm: "هل تريد بالتأكيد استعادة هذه النسخة الاحتياطية؟" @@ -7708,6 +8094,8 @@ ar: delete: "حذف" delete_confirm: 'هل تريد بالتأكيد حذف السمة "%{theme_name}"؟' bulk_delete: "هل أنت متأكد؟" + bulk_themes_delete_confirm: "سيؤدي هذا إلى إلغاء تثبيت السمات التالية، ولن تكون قابلة للاستخدام من قِبل أي مستخدم على موقعك بعد الآن:" + bulk_components_delete_confirm: "سيؤدي هذا إلى إلغاء تثبيت المكوِّنات التالية، ولن تكون قابلة للاستخدام من قِبل أي مستخدم على موقعك بعد الآن:" color: "اللون" opacity: "الشفافية" copy: "تكرار" @@ -7719,10 +8107,14 @@ ar: title: "البريد الإلكتروني" subject: "الموضوع" multiple_subjects: "توجد موضوعات متعددة في نموذج البريد الإلكتروني هذا." + multiple_bodies: "يحتوي قالب البريد الإلكتروني على عدة نصوص محتوى." body: "النص الأساسي" revert: "التراجع عن التغييرات" revert_confirm: "هل تريد بالتأكيد التراجع عن التغييرات؟" + search_templates: "تصفية حسب اسم القالب..." + no_templates_found: "لا توجد قوالب تطابق عوامل التصفية" edit: "تعديل" + back: "العودة إلى القوالب" component: all_filter: "الكل" used_filter: "مُستخدَم" @@ -7757,6 +8149,8 @@ ar: create_name: "الاسم" save: "حفظ" long_title: "تعديل الألوان ومحتويات CSS وHTML لموقعك" + dark_mode: "%{themeName} الوضع الداكن" + light_mode: "%{themeName} الوضع الفاتح" edit: "تعديل" edit_confirm: "هذه سمة بعيدة، إذا أجريت تعديلات على CSS/HTML، فسيتم مسح تغييراتك عند تحديث السمة في المرة التالية." update_confirm: "سيؤدي التحديث إلى محو التغييرات المحلية. هل تريد بالتأكيد المتابعة؟" @@ -7783,7 +8177,8 @@ ar: dark_color_scheme: "لوحة ألوان داكنة" default_light_scheme: "فاتحة (افتراضي)" color_scheme_select: "تحديد الألوان التي ستستخدمها السمة." - edit_colors: "عدِّل الألوان" + dark_color_scheme_select: "اختر الألوان التي ستستخدمها السمة في الوضع الداكن." + edit_colors: "تعديل الألوان" custom_sections: "الأقسام المخصَّصة:" theme_components: "مكوِّنات السمة" add_all_themes: "إضافة جميع السمات" @@ -7795,11 +8190,12 @@ ar: convert_theme_alert_generic: "هل تريد بالتأكيد تحويل هذه السمة إلى مكوِّن؟" convert_theme_tooltip: "تحويل هذه السمة إلى مكوِّن" inactive_themes: "السمات غير النشطة:" - set_default_theme: "عيّن مبدئي" + set_default_theme: "تعيين افتراضي" default_theme: "السمة الافتراضية" set_default_success: "السمة الافتراضية مُعيَّنة على %{theme}" setting_was_saved: "حُفظت إعدادات السمة" install_success: "تم تثبيت السمة %{theme} بنجاح!" + delete_success: "تم حذف %{theme} بنجاح!" inactive_components: "المكوِّنات غير المستخدمة:" selected: zero: "المحدَّدة: %{count}" @@ -7849,7 +8245,6 @@ ar: import_web_tip: "المستودع الذي يحتوي السمة" direct_install_tip: "هل تريد بالتأكيد تثبيت %{name} من المستودع المُدرَج أدناه؟" import_web_advanced: "متقدمة…" - import_file_tip: "ملف .tar.gz, .zip, or .dcstyle.json الذي يحتوي على السمة" is_private: "السمة موجودة في مستودع Git خاص" finish_install: "إنهاء تثبيت السمة" last_attempt: "لم تنتهِ عملية التثبيت، آخر محاولة:" @@ -7886,6 +8281,15 @@ ar: update_success: "اكتمل تحديث السمة %{theme}" up_to_date: "السمة محدَّثة، تاريخ آخر تحقُّق:" has_overwritten_history: "لم يعُد إصدار السمة الحالي موجودًا لأن سجل Git قد تم استبداله إجباريًا." + change_source: + button: "غيّر المصدر" + title: "غيّر مصدر السمة" + repository_url: "رابط المستودع" + branch: "الفرع (اختياري)" + updating: "يحدث مصدر القالب…" + update: "تحديث المصدر" + generate_new_key: "ولّد مفتاح SSH جديد" + keep_existing_key: "احتفظ بمفتاح SSH الحالي" add: "إضافة" theme_settings: "إعدادات السمة المخصصة" theme_site_settings: "الإعدادات التي يمكن للسمة تجاوزها" @@ -8000,6 +8404,8 @@ ar: select_base: title: "تحديد لوحة الألوان الأساسية" description: "لوحة الألوان الأساسية:" + non_default_theme_warning: "تختلف تفضيلاتك الشخصية للسمة عن الإعدادات الافتراضية. قد لا تنطبق التغييرات التي تجريها هنا عليك، لكنها ستنطبق على جميع المستخدمين الذين يستخدمون السمة الافتراضية (%{themeName})." + custom_schemes_warning: "تختلف تفضيلاتك الشخصية للوحة الألوان %{colorModes} عن الإعدادات الافتراضية. قد لا تنطبق التغييرات التي تجريها على لوحة %{colorModes} عليك، لكنها ستنطبق على جميع المستخدمين الذين يستخدمون الإعداد الافتراضي." light: "فاتح" dark: "داكن" title: "الألوان" @@ -8007,6 +8413,7 @@ ar: view: "اعرض" set_default_light: "تعيينها كلوحة ألوان فاتحة للسمة الافتراضية (%{theme})" set_default_dark: "تعيينها كلوحة ألوان داكنة للسمة الافتراضية (%{theme})" + set_default_success: "تم تعيين %{schemeName} كلوحة ألوان افتراضية للسمة %{themeName}" saved_refreshing: "تم الحفظ! جاري تحديث الألوان..." from_theme: "من السمة: %{name}" filters: @@ -8016,7 +8423,7 @@ ar: from_theme: "من السمة" no_results: "لم يتم العثور على لوحات الألوان" default_light_badge: - text: "فاتح المبدئي" + text: "فاتح افتراضي" title: "لوحة الألوان الفاتحة الافتراضية" reset: "إعادة تعيين عوامل التصفية" default_dark_badge: @@ -8342,7 +8749,10 @@ ar: delete_associated_accounts: "حذف الحسابات المرتبطة" change_theme_site_setting: "تغيير إعدادات السمة على مستوى الموقع" stop_impersonating: "توقف عن انتحال الشخصية" + upcoming_change_toggled: "تم تبديل حالة التغيير القادم" + upcoming_change_available: "التغيير القادم متاح" change_site_setting_groups: "غيّر مجموعات إعدادات الموقع" + discourse_id_regenerate_credentials: "إعادة إنشاء بيانات اعتماد معرف Discourse" screened_emails: title: "عناوين البريد الإلكتروني الخاضعة للمراقبة" description: "عندما يحاول شخص ما إنشاء حساب جديد، سيتم التحقُّق من عناوين البريد الإلكتروني التالية وحظر التسجيل، أو اتخاذ إجراء آخر." @@ -8401,6 +8811,7 @@ ar: clear_all: مسح الكل clear_all_confirm: "هل تريد بالتأكيد مسح جميع الكلمات المُراقَبة للإجراء %{action}؟" invalid_regex: 'الكلمة المُراقَبة "%{word}" هي تعبير عادي غير صالح.' + invalid_regex_multiple: "تعابير نمطية غير صالحة:" regex_warning: 'الكلمات المُراقَبة هي تعبيرات عادية ولا تتضمَّن حدود الكلمات تلقائيًا. إذا كنت تريد أن يتطابق التعبير العادي مع الكلمات الكاملة، فضع \b في بداية التعبير العادي ونهايته.' actions: block: "حظر" @@ -8433,6 +8844,7 @@ ar: success: "تم بنجاح" exists: "موجودة بالفعل" upload: "الإضافة من ملف" + upload_successful: "تم التحميل بنجاح. ستتم معالجة الكلمات قريبًا." case_sensitivity_label: "حساس لحالة الأحرف" case_sensitivity_description: "الكلمات ذات حالة الأحرف المطابقة فقط" html_label: "HTML" @@ -8483,6 +8895,7 @@ ar: upload: "تحميل ملف" multiselect: "اختيارات متعددة" tagchooser: "محدد مجموعة الوسوم" + composer: "إجابة بتنسيق Markdown" validations_modal: button_title: "عمليات التحقق" modal_title: "خيارات التحقق" @@ -8524,7 +8937,10 @@ ar: second: "الخيار 2" third: "الخيار 3" edit_category: + toggle_freeform: "تم تعطيل قالب النموذج" + toggle_form_template: "تم تفعيل قالب النموذج" select_template: "التحديد من القوالب" + select_template_help: "إضافة/تعديل قوالب النماذج" errors: multiple_tags_not_allowed: 'لا يمكنك اختيار المزيد من الوسوم من "%{tag_name}". لتجنب المشكلات، استخدم قالب النموذج' impersonate: @@ -8532,7 +8948,7 @@ ar: help: "استخدم هذه الأداة لانتحال شخصية حساب مستخدم لأغراض تصحيح الأخطاء. عليك تسجيل الخروج بعد الانتهاء." not_found: "يتعذَّر العثور على هذا المستخدم." invalid: "عذرًا، لا يمكنك انتحال شخصية هذا المستخدم." - error: "عذراً، حدث خطأ غير متوقع." + error: "عذرًا، حدث خطأ غير متوقع." users: title: "المستخدمون" description: "عرض المستخدمين وإدراتهم." @@ -8657,6 +9073,16 @@ ar: penalty_post_actions: "ما الذي ترغب في فعله بالمنشور ذي الصلة؟" penalty_post_delete: "حذف المنشور" penalty_post_delete_replies: "حذف المنشور + أي ردود" + penalty_post_delete_all: "حذف جميع الموضوعات التي أنشأها المستخدم بالإضافة إلى أي ردود عليها" + penalty_post_delete_all_confirmation_MF: | + سيؤدي هذا إلى حذف { TOPICS, plural, + one {موضوع واحد} two {موضوعين} few {# موضوعات} many {# موضوعًا} + other {# موضوع} + } و + { REPLIES, plural, + one {رد واحد} two {ردين} few {# ردود} many {# ردًا} + other {# رد} + }. هذا الإجراء لا يمكن التراجع عنه! هل ترغب بالتأكيد في القيام بذلك؟ penalty_post_edit: "تعديل المنشور" penalty_post_none: "عدم اتخاذ أي إجراء" penalty_count: "عدد العقوبات" @@ -8714,6 +9140,11 @@ ar: approve_bulk_success: "تم بنجاح! لقد تمت الموافقة على جميع الأعضاء المحدَّدين وإرسال إشعارات إليهم." time_read: "وقت القراءة" post_edits_count: "تعديلات المنشور" + upcoming_changes: + title: "التغييرات القادمة للمستخدم" + description: "لتعديل المجموعات أو لتفعيل التغييرات القادمة أو تعطيلها، يرجى زيارة صفحة إعدادات التغييرات القادمة." + filter_placeholder: "تصفية التغييرات القادمة حسب الاسم أو الوصف" + filter_no_results: "لا توجد تغييرات قادمة" exports: title: عمليات تصدير المستخدم download: @@ -8742,6 +9173,13 @@ ar: button: "حذف كل المنشورات" progress: title: "تقدُّم حذف المنشورات" + description: + zero: "جارٍ حذف كل المنشورات من @%{username}..." + one: "جارٍ حذف منشور واحد من @%{username}..." + two: "جارٍ حذف منشورين من @%{username}..." + few: "جارٍ حذف %{count} منشورات من @%{username}..." + many: "جارٍ حذف %{count} منشورًا من @%{username}..." + other: "جارٍ حذف %{count} منشور من @%{username}..." confirmation: title: "حذف كل المنشورات من @%{username}" description: | @@ -8753,6 +9191,7 @@ ar: text: "حذف المنشورات من @%{username}" delete: "حذف المنشورات من @%{username}" cancel: "إلغاء" + all_enqueued: "تمت إضافة جميع منشورات @%{username}إلى قائمة الانتظار للحذف" merge: button: "دمج" prompt: @@ -8779,6 +9218,8 @@ ar: cancel: "إلغاء" merging_user: "جارٍ دمج المستخدم…" merge_failed: "حدث خطأ في أثناء دمج المستخدمين." + delete_forbidden_because_admin: "لا يمكن حذف المسؤولين." + delete_posts_forbidden_because_admin: "لا يمكن حذف جميع منشورات المسؤولين." delete_forbidden: zero: "لا يمكن حذف المستخدمين إذا كان لديهم منشورات. احذف كل المنشورات أولًا قبل محاولة حذف المستخدم. (لا يمكنك حذف المشاركات التي مضى عليها %{count} يوم.)" one: "لا يمكن حذف المستخدمين إذا كان لديهم منشورات. احذف كل المنشورات أولًا قبل محاولة حذف المستخدم. (لا يمكنك حذف المشاركات التي مضى عليها يوم واحد (%{count}))." @@ -8945,6 +9386,10 @@ ar: title: "العرض على بطاقة المستخدم" enabled: "معروض على بطاقة المستخدم" disabled: "غير معروض على بطاقة المستخدم" + show_on_signup: + title: "عرض في نموذج التسجيل" + enabled: "معروض في نموذج التسجيل" + disabled: "غير معروض في نموذج التسجيل" searchable: title: "قابل للبحث" enabled: "قابل للبحث" @@ -8952,6 +9397,7 @@ ar: field_types: text: "النص" textarea: "منطقة النص" + date: "التاريخ" confirm: "تأكيد" dropdown: "قائمة منسدلة" multiselect: "حقل اختيارات متعددة" @@ -8972,6 +9418,7 @@ ar: more_than_50_results: "هناك أكثر من 50 نتيجة. يُرجى تحسين البحث." no_results: "لم يتم العثور على نصوص مطابقة على الموقع" interpolation_keys: "مفاتيح الاستيفاء المتاحة:" + interpolation_key_used: "مستخدمة بالفعل" outdated: title: "هذه الترجمة قديمة" description: "لقد تغيَّرت الترجمة الافتراضية لهذا المفتاح منذ إنشاء هذا الاستبدال. يُرجى التحقق أدناه من مطابقة ترجمتك لأي تغييرات تم إجراؤها على الغرض الأصلي." @@ -9035,6 +9482,9 @@ ar: label: "تحميل" title: "تحميل الصور" download_file: "تنزيل" + upload_restrictions: + extensions: "مقبول: %{extensions}" + max_size: "الحد الأقصى: %{size}" selectable_avatars: title: "قائمة الصور الرمزية التي يمكن للمستخدمين الاختيار منها" table_column_heading: @@ -9073,6 +9523,7 @@ ar: experimental: "تجريبي" secret_list: invalid_input: "لا يمكن ترك حقول الإدخال فارغة أو أن تتضمَّن شريطًا عموديًا." + already_exists: "إدخال المفتاح %{key} موجود بالفعل." default_categories: modal_description: zero: "هل ترغب في تطبيق هذا التغيير بأثر رجعي؟ سيؤدي ذلك إلى تغيير التفضيلات لعدد %{count} مستخدم حالي." @@ -9101,13 +9552,20 @@ ar: prompt: "قد يؤدي تغيير هذا الإعداد إلى عواقب بعيدة المدى أو غير مقصودة على موقعك. هل تريد بالتأكيد المتابعة؟" confirm: "نعم، أنا متأكد" min_password_length: + prompt: "أنت على وشك تغيير سياسة كلمة المرور. سيؤثر هذا على جميع المستخدمين الذين سيغيرون كلمات مرورهم من الآن فصاعدًا. هل أنت متأكد أنك تريد المتابعة؟" confirm: "نعم، تحديث سياسة كلمة المرور" min_admin_password_length: + prompt: "أنت على وشك تغيير سياسة كلمة المرور. سيؤثر هذا على جميع المسؤولين الذين سيغيرون كلمات مرورهم من الآن فصاعدًا. هل أنت متأكد أنك تريد المتابعة؟" confirm: "نعم، تحديث سياسة كلمة المرور" - password_unique_charactes: + password_unique_characters: + prompt: "أنت على وشك تغيير سياسة كلمة المرور. سيؤثر هذا على جميع المستخدمين الذين سيغيرون كلمات مرورهم من الآن فصاعدًا. هل أنت متأكد أنك تريد المتابعة؟" confirm: "نعم، تحديث سياسة كلمة المرور" block_common_passwords: + prompt: "أنت على وشك تغيير سياسة كلمة المرور. سيؤثر هذا على جميع المستخدمين الذين سيغيرون كلمات مرورهم من الآن فصاعدًا. هل أنت متأكد أنك تريد المتابعة؟" confirm: "نعم، تحديث سياسة كلمة المرور" + clean_up_inactive_users_after_days: + prompt: "سيؤدي تعيين هذه القيمة إلى أي رقم غير 0 إلى حذف المستخدمين غير النشطين لمدة هذا العدد من الأيام نهائيًا. هل أنت متأكد أنك تريد المتابعة؟" + confirm: "نعم، أفهم أنه سيتم حذف المستخدمين غير النشطين نهائيًا ما لم تُعيّن هذه القيمة على 0" job_status: completed: "اكتمل التحديث" enqueued: "التحديث قيد التقدم" @@ -9144,10 +9602,12 @@ ar: no_user_badges: "لم يُمنح %{name} أيّ شارة." no_badges: لا توجد شارات يمكن منحها. none_selected: "تحديد شارة للبدء" + filter_placeholder: "تصفية الشارات..." + no_badges_found: "لم يتم العثور على شارات" sections: design: تصميم query: استعلام - settings: الإعدادان + settings: الإعدادات usage_heading: الاستخدام allow_title: السماح للمستخدمين باستخدام الشارة كعنوان multiple_grant: يمكن منحها عدة مرات @@ -9260,6 +9720,7 @@ ar: category: "النشر في الفئة" tags: "وسوم الموضوع" post_author: "مؤلف المنشور" + post_author_description: "المؤلف لجميع الموضوعات المضمنة من هذا المضيف، مع تجاوز وسوم التعريف الخاصة بصفحة المدونة. اترك هذا الحقل فارغًا لقراءة اسم المؤلف من وسوم أو الموجودة في الصفحة." post_author_with_default: "مؤلف المنشور (القيمة الافتراضية هي %{author})" add_host: "إضافة مضيف" posts_and_topics: "تكوين المنشورات والموضوعات" @@ -9278,6 +9739,8 @@ ar: crawler_settings_saved: "تم حفظ إعدادات متتبعات ارتباطات الويب" back: "العودة إلى التضمين" configuration_snippet: "مقتطف من التكوين" + full_app_mode: "وضع التطبيق الكامل" + full_app_mode_description: "حمّل تطبيق Discourse الكامل في إطار iframe المضمن، مما يسمح للمستخدمين بالرد والإعجاب والاقتباس والتفاعل مع المواضيع بشكل مباشر." host_form: add_header: "إضافة مضيف" edit_header: "تعديل المضيف" diff --git a/config/locales/client.be.yml b/config/locales/client.be.yml index a812a687aca8a..95d252f4f9561 100644 --- a/config/locales/client.be.yml +++ b/config/locales/client.be.yml @@ -6,6 +6,10 @@ be: js: + blocks: + ghost: + status: "Статус" + failed: "памылка" number: format: separator: "," @@ -18,7 +22,7 @@ be: one: байт few: байты many: байтаў - other: байтаў + other: байта gb: ГБ kb: КБ mb: МБ @@ -409,6 +413,9 @@ be: pill: "Звязаныя паведамленні" suggested_topics: pm_title: "Прапанаваныя паведамленні" + admin_onboarding_banner: + start_posting: + back: "Назад" about: edit: "Рэдагаваць гэту старонку" simple_title: "Пра сайт" @@ -518,8 +525,6 @@ be: other: "Створаны %{count} гадоў таму" bookmarked: title: "Закладка" - edit_bookmark: "Рэдагаваць закладку" - clear_bookmarks: "Ачысціць закладкі" help: bookmark: "Націсніце, каб дадаць гэтую тэму ў закладкі" edit_bookmark: "Націсніце, каб рэдагаваць закладку для допісу ў гэтай тэме" @@ -530,6 +535,7 @@ be: also_set_reminder: "Таксама задаць напамін?" bookmarked_success: "Дададзена ў закладкі!" not_bookmarked: "дадаць гэты допіс у закладкі" + topic_bookmark: "Тэма" save: "Захаваць" no_user_bookmarks: "У вас няма допісаў у закладках; закладкі дазваляюць хутка звяртацца да пэўных допісаў." search: "Пошук" @@ -849,7 +855,7 @@ be: everyone: "Усе" notifications: watching: - title: "Назіраюцца" + title: "Пад назіраннем" tracking: title: "Адсочваюцца" muted: @@ -876,7 +882,7 @@ be: remove_filter: "выдаліць фільтр" category: "Катэгорыя" reorder: - apply_all: "Ужыць" + apply_all: "Прымяніць" position: "Пазіцыя" posts: "Допісы" topics: "Тэмы" @@ -1203,6 +1209,7 @@ be: close: "закрыць" form_kit: reset: Скінуць + required: абавязкова errors: required: "Абавязковае" close: "Закрыць" @@ -1426,7 +1433,6 @@ be: new_messages_marker: "апошняе наведванне" bulk: select_all: "Выбраць усе" - delete: "Выдаліць тэмы" delete_topics_count: one: "Выдаліць тэму" few: "Выдаліць тэмы" @@ -1434,10 +1440,8 @@ be: other: "Выдаліць тэмы" dismiss_read: "Адхіліць усе непрачытаныя" dismiss_new: "Адхіліць новыя" - toggle: "пераключыць масавы выбар тэм" - actions: "Масавыя дзеянні" - close_topics: "Закрыць тэмы" - archive_topics: "Архіваваць тэмы" + toggle: "Пераключыць групавы выбар тэм" + actions: "Групавыя дзеянні" move_messages_to_inbox: "Перамясціць ва Уваходныя" error_topic_count: one: "%{count} тэма" @@ -1456,7 +1460,7 @@ be: close_topics: name: "Закрыць" archive_topics: - name: "У архіў" + name: "У Архіў" move_messages_to_inbox: name: "Ва Уваходныя" delete_topics: @@ -1492,479 +1496,491 @@ be: when: "Калі:" auto_close: title: "Аўтаматычна закрываць тэму" - error: "Калі ласка, увядзіце карэктнае значэнне." - auto_close_title: "Настройка аўтаматычнага закрыцця" + error: "Увядзіце карэктнае значэнне." + auto_close_title: "Налады аўтаматычнага закрыцця" timeline: back: "Назад" progress: - title: прасоўванне па тэме + title: прагрэс у тэме jump_prompt_or: "або" notifications: reasons: - "3_6": "Вы будзеце атрымліваць апавяшчэнні, таму што вы сочыце за гэтай катэгорыяй." - "3_5": "Вы будзеце атрымліваць апавяшчэнні, таму што вы аўтаматычна пачалі сачыць за гэтай тэмай." - "3_2": "Вы будзеце атрымліваць апавяшчэнні, таму што вы сочыце за гэтай тэмай." - "3_1": "Вы будзеце атрымліваць апавяшчэнні, таму што вы стварылі гэтую тэму." - "3": "Вы будзеце атрымліваць апавяшчэнні, таму што вы сочыце за гэтай тэмай." - "0_7": "Вы ігнаруеце ўсе паведамленні ў гэтай катэгорыі." - "0_2": "Вы ігнаруеце ўсе паведамлення па гэтай тэме." - "0": "Вы ігнаруеце ўсе паведамлення па гэтай тэме." + "3_6": "Вы будзеце атрымліваць апавяшчэнні, бо назіраеце за гэтай катэгорыяй." + "3_5": "Вы будзеце атрымліваць апавяшчэнні, бо аўтаматычна пачалі назіраць за гэтай тэмай." + "3_2": "Вы будзеце атрымліваць апавяшчэнні, бо назіраеце за гэтай тэмай." + "3_1": "Вы будзеце атрымліваць апавяшчэнні, бо вы стварылі гэту тэму." + "3": "Вы будзеце атрымліваць апавяшчэнні, бо назіраеце за гэтай тэмай." + "0_7": "Вы ігнаруеце ўсе апавяшчэнні ў гэтай катэгорыі." + "0_2": "Вы ігнаруеце ўсе апавяшчэнні ў гэтай тэме." + "0": "Вы ігнаруеце ўсе апавяшчэнні ў гэтай тэме." watching_pm: - title: "сачыць" + title: "Пад назіраннем" watching: - title: "сачыць" + title: "Пад назіраннем" tracking_pm: - title: "Сачыць" + title: "Адсочваецца" tracking: - title: "Сачыць" + title: "Адсочваецца" muted_pm: - title: "ігнараваць" + title: "Адключана" muted: - title: "ігнараваць" + title: "Адключана" actions: - title: "загалоўкі....................." - recover: "Адмяніць выдаленне тэмы" + title: "Дзеянні" + recover: "Адрабіць выдаленне тэмы" delete: "Выдаліць тэму" open: "Адкрыць тэму" close: "Закрыць тэму" - multi_select: "Абраць запісы ..." - pin: "Замацаваць тэму ..." - unpin: "Адмацаваць тэму ..." + multi_select: "Выбраць допісы…" + pin: "Замацаваць тэму…" + unpin: "Адмацаваць тэму…" unarchive: "Разархіваваць тэму" - archive: "Заархіваваць тэму" - reset_read: "Скінуць дадзеныя аб прочитанисть" + archive: "Архіваваць тэму" + reset_read: "Скінуць даныя аб прачытанні" make_private: "Стварыць асабістае паведамленне" - reset_bump_date: "Скінуць Dump дату" + reset_bump_date: "Скінуць дату павышэння" feature: pin: "Замацаваць тэму" unpin: "Адмацаваць тэму" reply: title: "Адказаць" - help: "пачаць складаць адказ на гэтую тэму" + help: "пачаць складаць адказ на гэту тэму" share: - help: "Распаўсюдзіць спасылку на гэтую тэму" + help: "абагуліць спасылку на гэту тэму" print: - title: "друк" + title: "Друк" flag_topic: - title: "Пазначыць" - success_message: "privately flag this topic for attention or send a private notification about it..." + title: "Паскардзіцца" + success_message: "Вы паспяхова паскардзіліся на гэту тэму." invite_private: group_name: "назва групы" invite_reply: - username_placeholder: "username" + username_placeholder: "імя карыстальніка" email_placeholder: "name@example.com" filters: n_posts: - one: "%{count} запіс" - few: "%{count}запісаў" - many: "%{count}запісаў" - other: "%{count}запісаў" - cancel: "прыбраць фільтр" + one: "%{count} допіс" + few: "%{count} допісы" + many: "%{count} допісаў" + other: "%{count} допісу" + cancel: "Выдаліць фільтр" split_topic: - title: "Перанос новай тэмы" - action: "перанесці ў новай тэмы" - radio_label: "пачаць новую тэму" - error: "Пры пераносе паведамленняў да новай тэмы адбылася памылка." + title: "Перамясціць у новую тэму" + action: "перамясціць ў новую тэму" + radio_label: "Новая тэма" + error: "Пры перамяшчэнні допісаў у новую тэму адбылася памылка." merge_topic: - title: "Перанос наяўнай тэмы" - action: "перанесці наяўнай тэмы" - error: "Пры пераносе паведамленняў да гэтай тэмы адбылася памылка." + title: "Перамясціць у існуючую тэму" + action: "перамясціць у існуючую тэму" + error: "Пры перамяшчэнні допісаў у гэту тэму адбылася памылка." move_to_new_message: - radio_label: "новае паведамленне" + radio_label: "Новае паведамленне" publish_page: - public: "грамадскага" + public: "Публічная" change_timestamp: - action: "змяніць метку часу" + action: "змяніць пазнаку часу" post_list: title: "Апошнія паведамленні" post: quote_edit: "Рэдагаваць" - quote_share: "Падзяліцца тэмай" - edit_reason: "прычына: " + quote_share: "Абагуліць" + edit_reason: "Прычына: " localizations: table: actions: "Дзеянні" edit: "Рэдагаваць" delete: "Выдаліць" errors: - upload_not_authorized: "Sorry, the file you are trying to upload is not authorized (authorized extensions: %{authorized_extensions})." + upload_not_authorized: "Файл, які вы спрабуеце загрузіць, не аўтарызаваны (аўтарызаваныя пашырэнні: %{authorized_extensions})." controls: like_action: "Падабайка" - like: "упадабаць гэты пост" + like: "упадабаць гэты допіс" edit_action: "Рэдагаваць" - flag_action: "Пазначыць" - share_action: "Падзяліцца" - more: "Болей" - admin_action: "адміністратар" + flag_action: "Паскардзіцца" + share_action: "Абагуліць" + more: "Яшчэ" + admin_action: "Адміністратар" delete_topic: "выдаліць тэму" actions: people: like: - one: "гэта спадабалася" - few: "гэта спадабалася" - many: "гэта спадабалася" - other: "гэта спадабалася" + one: "упадабаў(-ла)" + few: "упадабалі" + many: "упадабалі" + other: "упадабалі" by_you: notify_moderators: "Вы пазначылі гэта для мадэрацыі" revisions: controls: - first: "Першая рэвізія" - previous: "Папярэдняя рэвізія" - next: "Наступная рэвізія" - last: "Апошняя рэвізія" - hide: " Схаваць рэвізію" - show: "Паказаць рэвізію" + first: "Першая версія" + previous: "Папярэдняя версія" + next: "Наступная версія" + last: "Апошняя версія" + hide: "Схаваць версію" + show: "Паказаць версію" displays: inline: - title: "Адлюстраваць паведамленне з улучанымі дадаткамі і выдаленнямі." + title: "Паказаць атрыманы вынік з дададзенымі і выдаленымі элементамі ў радку" side_by_side_markdown: - title: "Паказаць непасрэдныя адрозненні побач" + title: "Паказаць адрозненні ў крыніцах побач" bookmarks: - name: "Імя" - options: "Налады" + name: "Назва" + options: "Параметры" category: - none: "(па-за катэгорыямі)" + none: "(без катэгорыі)" all: "Усе катэгорыі" - choose: "Абраць" + choose: "катэгорыя…" edit: "Рэдагаваць" - view: "Прагляд тэм па катэгорыям" + view: "Прагляд тэм у катэгорыі" general: "Агульныя" settings: "Налады" topic_template: "Шаблон" tags: "Тэгі" localization: - name: "імя" + name: "Назва" description: "Апісанне" - remove: "выдаліць" + remove: "Выдаліць" required_tag_group: delete: "Выдаліць" - create_long: "стварыць катэгорыю" - creation_error: Пры стварэнні катэгорыі адбылася памылка. - save_error: У выпадку захавання катэгорыі адбылася памылка. - description: "апісанне" - icon: "Абразка" - emoji: "Emoji" - background_color: "колер" + create_long: "Стварыць новую катэгорыю" + creation_error: Падчас стварэння катэгорыі адбылася памылка. + save_error: Падчас захавання катэгорыі адбылася памылка. + description: "Апісанне" + icon: "Значок" + emoji: "Эмодзі" + background_color: "Колер" color_validations: cant_be_empty: "не можа быць пустым" styles: - icon: "Абразка" - emoji: "Emoji" + icon: "Значок" + emoji: "Эмодзі" options: - icon: "Абразка" - emoji: "Emoji" + icon: "Значок" + emoji: "Эмодзі" color_placeholder: "Любы вэб-колер" - delete_confirm: "Вы ўпэўненыя, што жадаеце выдаліць гэтую катэгорыю?" + delete_confirm: "Вы ўпэўнены, што хочаце выдаліць гэту катэгорыю?" delete_error: "Пры выдаленні катэгорыі адбылася памылка." - already_used: "Гэты колер ўжо выкарыстоўваецца іншы катэгорыяй" + description_expand: "Паказаць больш" + description_collapse: "Паказаць менш" + already_used: "Гэты колер ужо выкарыстоўваецца іншай катэгорыяй" security: "Бяспека" permissions: group: "Група" - see: "бачыць" - reply: "Адказаць" - create: "Стварыць" - email_in: "Custom incoming email address:" - allow_badges_label: "Дазволіць ўзнагароджваць значкамі ў гэтай катэгорыі" + see: "Праглядаць" + reply: "Адказваць" + create: "Ствараць" + email_in: "Карыстальніцкі адрас уваходнай электроннай пошты:" + allow_badges_label: "Дазволіць узнагароды значкамі ў гэтай катэгорыі" review_group_name: "назва групы" - this_year: "гэтага года" + posting_review_modes: + everyone: "усе" + this_year: "гэты год" none_subcategory_text: "Няма" visibility: public: "Публічная" group_restricted: "Прыватная" notifications: watching: - title: "сачыць" + title: "Пад назіраннем" tracking: - title: "Сачыць" + title: "Адсочваецца" muted: - title: "ігнаруемай" + title: "Адключана" search_priority: options: - ignore: "ігнараваць" + ignore: "Ігнараваць" sort_options: - default: "тыпова" - likes: "перавагі" - views: "прагляды" - posts: "паведамленні" - activity: "актыўнасць" - category: "катэгорыя" - created: "створаны" + default: "прадвызначана" + likes: "Падабайкі" + views: "Прагляды" + posts: "Допісы" + activity: "Актыўнасць" + category: "Катэгорыя" + created: "Створана" settings_sections: general: "Агульныя" moderation: "Мадэрацыя" email: "Электронная пошта" flagging: - action: "Пазначыць запіс" + action: "Паскардзіцца на допіс" take_action_options: default: - title: "схаваць паведамленне" + title: "Схаваць допіс" suspend: - title: "прыпыніць карыстальніка" + title: "Прыпыніць карыстальніка" silence: - title: "Silence Карыстальнік" - notify_action: "паведамленне" - delete_spammer: "выдаліць спамера" + title: "Заглушыць карыстальніка" + notify_action: "Паведамленне" + delete_spammer: "Выдаліць спамера" yes_delete_spammer: "Так, выдаліць спамера" notify_moderators_textarea_label: "Паведамленне для мадэратараў" flagging_topic: - notify_action: "паведамленне" + notify_action: "Паведамленне" topic_map: - title: "Рэзюмэ запісу" - views: "прагляды" - read: счытванне + title: "Зводка тэмы" + views: "Прагляды" + read: прачытаныя topic_statuses: pinned: - title: "замацаваныя" - posts: "паведамленні" + title: "Замацаваныя" + posts: "Допісы" pending_posts: - label: "чакаецца" - original_post: "першы паведамленне" - views: "прагляды" - replies: "адказы" - activity: "актыўнасць" - likes: "перавагі" + label: "У чаканні" + original_post: "Арыгінальны допіс" + views: "Прагляды" + replies: "Адказы" + activity: "Актыўнасць" + likes: "Падабайкі" likes_lowercase: one: "падабайка" - few: "перавагі" - many: "перавагі" - other: "перавагі" + few: "падабайкі" + many: "падабаек" + other: "падабайкі" users: "Карыстальнікі" users_lowercase: one: "карыстальнік" few: "карыстальнікі" many: "карыстальнікі" - other: "карыстальнікі" + other: "карыстальніка" category_title: "Катэгорыя" categories_list: "Спіс катэгорый" filters: filter: button: - label: "Filter" + label: "Фільтр" latest: title: "Апошнія" - help: "тэмы са свежымі паведамленнямі" + help: "тэмы са свежымі допісамі" read: - title: "прачытаныя" - help: "тэмы, якія вы прачыталі ў парадку, у якім Вы іх чыталі ў апошні раз" + title: "Прачытаныя" + help: "тэмы, якія вы прачыталі, у парадку прачытання" categories: title: "Катэгорыі" title_in: "Катэгорыя - %{categoryName}" - help: "усе тэмы згрупаваныя па катэгорыях" + help: "усе тэмы, згрупаваныя па катэгорыях" unread: title: "Непрачытаныя" new: - lower_title: "новая" - title: "Новая" - all: "Усё" - topics: "тэмы" + lower_title: "новыя" + title: "Новыя" + all: "Усе" + topics: "Тэмы" replies: "Адказы" posted: - help: "тэмы, у якія Вы дапісвалі" + help: "тэмы, у якіх ёсць вашы допісы" bookmarks: - title: "закладкі" + title: "Закладкі" category: title: "%{CategoryName}" - help: "Апошнія тэмы ў катэгорыі %{categoryName}" + help: "апошнія тэмы ў катэгорыі %{categoryName}" top: - title: "Топ тэмаў" + title: "Топ тэм" all: title: "За ўвесь час" yearly: - title: "штогод" + title: "Штогод" quarterly: - title: "штоквартальна" + title: "Штоквартальна" monthly: - title: "штомесяц" + title: "Штомесяц" weekly: - title: "штотыдзень" + title: "Штотыдзень" daily: - title: "штодня" + title: "Штодня" all_time: "За ўвесь час" - this_year: "год" - this_quarter: "квартал" - this_month: "месяц" - this_week: "тыдзень" - today: "Today" + this_year: "Год" + this_quarter: "Квартал" + this_month: "Месяц" + this_week: "Тыдзень" + today: "Сёння" permission_types: - full: "ствараць" - create_post: "адказваць" - readonly: "бачыць" - preloader_text: "загрузка" + full: "Ствараць / Адказваць /Праглядаць" + create_post: "Адказваць / Праглядаць" + readonly: "Праглядаць" + preloader_text: "Загрузка" lightbox: - download: "спампаваць" + download: "Спампаваць" keyboard_shortcuts_help: title: "Спалучэнні клавіш" jump_to: - title: "на" + title: "Перайсці да" top: "%{shortcut} Топ" navigation: - title: "рух" - open: " o <" + title: "Навігацыя" + open: "%{shortcut} Адкрыць выбраную тэму" application: - title: "дадатак" - notifications: "%{shortcut}Адкрытыя абвесткі " - log_out: "%{shortcut}Выйсці" + title: "Праграма" + notifications: "%{shortcut} Адкрыць апавяшчэнні" + log_out: "%{shortcut} Выйсці" actions: - title: "дзеянні" - share_post: " s <" - reply_post: " r <" - quote_post: " q <" - like: " l <" - flag: "! <" - bookmark: " b <" - edit: " e <" - delete: " d <" - mark_muted: "%{shortcut}Прыглушыць тэму" - mark_tracking: "%{shortcut}Сачыць за тэмай" + title: "Дзеянні" + share_post: "%{shortcut} Абагуліць допіс" + reply_post: "%{shortcut} Адказаць на допіс" + quote_post: "%{shortcut} Працытаваць допіс" + like: "%{shortcut} Упадабаць допіс" + flag: "%{shortcut} Паскардзіцца на допіс" + bookmark: "%{shortcut} Дадаць допіс у закладкі" + edit: "%{shortcut} Рэдагаваць допіс" + delete: "%{shortcut} Выдаліць допіс" + mark_muted: "%{shortcut} Адключыць апавяшчэнні тэмы" + mark_tracking: "%{shortcut} Адсочваць тэму" admin: - title: "адміністратар" + title: "Адміністратар" badges: - title: значкі - select_badge_for_title: Выберыце значок, будзе вашым званнем + title: Значкі + select_badge_for_title: Выберыце значок, які будзе вашым тытулам badge_grouping: community: - name: супольнасць + name: Супольнасць trust_level: - name: ўзровень даверу + name: Узровень даверу other: - name: іншае + name: Іншае posting: - name: апублікаванне + name: Допісы download_calendar: - download: "спампаваць" + download: "Спампаваць" tagging: selector_tags: "тэгі" - selector_remove_filter: "прыбраць фільтр" - tags: "тэгі" + selector_remove_filter: "выдаліць фільтр" + tags: "Тэгі" choose_for_topic: "дадатковыя тэгі" - add_synonyms: "дадаць" + add_synonyms: "Дадаць" + description: "Апісанне" + settings: + title: "Налады" + general: "Агульныя" + back: "Назад" + name: "Назва" + localization: + name: "Назва" + description: "Апісанне" sort_by: "Сартаваць па:" - sort_by_count: "падлічваць" - sort_by_name: "Імя" - bulk_create_button: "стварыць" + sort_by_count: "колькасці" + sort_by_name: "назве" + bulk_create_button: "Стварыць" notifications: watching: - title: "Сачыць" + title: "Пад назіраннем" tracking: - title: "Сачыць" + title: "Адсочваюцца" muted: - title: "ігнараваць" + title: "Без апавяшчэнняў" groups: - name_placeholder: "Імя" + name_placeholder: "Назва" save: "Захаваць" - delete: "выдаліць" + delete: "Выдаліць" topics: none: unread: "У вас няма непрачытаных тэм." new: "У вас няма новых тэм." read: "Вы яшчэ не прачыталі ніводнай тэмы." posted: "Вы яшчэ не дапісвалі ў адну тэму." - bookmarks: "У вас пакуль няма тэмаў у закладках." - top: "There are no top topics." + bookmarks: "У вас пакуль няма тэм у закладках." + top: "Няма топ-тэм." footer_nav: back: "Назад" - share: "Падзяліцца" + share: "Абагуліць" trust_levels: names: newuser: "новы карыстальнік" basic: "асноўны карыстальнік" member: "член" regular: "рэгулярны" - leader: "лідэр" + leader: "лідар" sidebar: - more: "Больш" + more: "Яшчэ" all_categories: "Усе катэгорыі" edit_navigation_modal_form: filter_dropdown: all: "Усё" sections: custom: - save: "захаваць" - delete: "выдаляць" + save: "Захаваць" + delete: "Выдаліць" links: - add: "Дадаць іншую спасылку" + add: "Дадаць яшчэ адну спасылку" delete: "Выдаліць спасылку" icon: - label: "Абразка" + label: "Значок" name: - label: "імя" + label: "Назва" validation: - blank: "Імя не можа быць пустым" + blank: "Назва не можа быць пустой" value: label: "Спасылка" validation: blank: "Спасылка не можа быць пустой" title: validation: - blank: "Загаловак ня можа быць пустым" + blank: "Загаловак не можа быць пустым" about: - header_link_text: "Аб тэме" + header_link_text: "Пра сайт" messages: header_link_text: "Паведамленні" links: - inbox: "ўваходныя" - sent: "адпраўлена" - new: "Новая" + inbox: "Уваходныя" + sent: "Адпраўленыя" + new: "Новыя" unread: "Непрачытаныя" - archive: "архіў" + archive: "Архіў" tags: - header_link_text: "тэгі" + header_link_text: "Тэгі" categories: - header_link_text: "катэгорыі" + header_link_text: "Катэгорыі" community: edit_section: - header_dropdown: "Кастамізаваць" + header_dropdown: "Дапасаваць" links: about: - content: "Аб тэме" + content: "Пра сайт" admin: - content: "адміністратар" + content: "Адміністратар" badges: - content: "значкі" + content: "Значкі" filter: - content: "Filter" + content: "Фільтр" topics: - content: "тэмы" + content: "Тэмы" faq: - content: "Пытанні і адказы" + content: "Частыя пытанні" guidelines: - content: "інструкцыі" + content: "Рэкамендацыі" groups: content: "Групы" users: - content: "карыстальнікаў" + content: "Карыстальнікі" review: - content: "Патрабуе перагляду" + content: "Разгляд" search: "Пошук" footer: interface_color_selector: - light: "святло" - dark: "цёмна" + light: "Светлая" + dark: "Цёмная" form_templates: upload_field: upload: "Запампаваць" - uploading: "загрузка" + uploading: "Запампоўванне" errors: type_mismatch: - default: "Калі ласка, увядзіце карэктнае значэнне." - email: "Калі ласка, увядзіце верны email." + default: "Увядзіце правільнае значэнне." + email: "Увядзіце правільны адрас электроннай пошты." table_builder: edit: modal: - cancel: "адмена" - create: "захаваць" - reason: "чаму Вы рэдагуеце паведамленне?" + cancel: "скасаваць" + create: "Захаваць" + reason: "чаму вы рэдагуеце допіс?" spreadsheet: - about: "Аб тэме" + about: "Пра сайт" filter: description: - yesterday: "учора" + yesterday: "Учора" discovery: headings: categories: "Усе катэгорыі" admin_js: settings: "Налады" - reset_filter: "Скінуць" admin: moderator: "Мадэратар" tags: @@ -1973,59 +1989,62 @@ be: never: "ніколі" reports: sidebar_title: "Справаздачы" + group_traffic: "Трафік" + group_members: "Члены" + group_other: "Іншае" config_sections: account: - title: "Аккаўнт" + title: "Уліковы запіс" reports: title: "Справаздачы" community: - title: "супольнасць" + title: "Супольнасць" email: title: "Электронная пошта" security: title: "Бяспека" plugins: - title: "Плагіны" + title: "Убудовы" upcoming_changes: - name: "Імя" - preview: "Папярэдні прагляд" + name: "Назва" + preview: "Перадпрагляд" enabled_for_options: - everyone: "усе" + everyone: "Усе" impact_roles: - admins: "адміністратары" + admins: "Адміністратары" moderators: "Мадэратары" - staff: "персанал" + staff: "Персанал" filter: all: "Усе" disabled: "Адключана" impact_type_other: "Іншае" - impact_role_admins: "адміністратары" + impact_role_admins: "Адміністратары" impact_role_moderators: "Мадэратары" - impact_role_staff: "персанал" + impact_role_staff: "Персанал" config: developer: - title: "для распрацоўшчыкаў" + title: "Распрацоўшчык" emojis: - title: "Emoji" + title: "Эмодзі" flags: title: "Мадэрацыя" files: - title: "файлы" + title: "Файлы" legal: - title: "Legal" + title: "Юрыдычная інфармацыя" login: sub_pages: common_settings: title: "Налады" logo: form: - mobile: "Мабільны" + mobile: "Мабільная" email: "Электронная пошта" opengraph_image: - description: "Па змаўчанні адкрытага графіка малюнка выкарыстоўваецца, калі старонка не мае іншае падыходнае малюнка. Калі пакінуць пустым, то будзе выкарыстоўвацца вялікі значок." + description: "Прадвызначаны відарыс OpenGraph, які выкарыстоўваецца, калі на старонцы няма іншага адпаведнага відарыса. Калі пакінуць пустым, будзе выкарыстоўвацца large_icon." fonts: backfill_modal: - modal_yes: "ды" + modal_yes: "Так" welcome_banner: form: location: @@ -2033,11 +2052,11 @@ be: header_logged_in: placeholder: "З вяртаннем, %{preferred_display_name}!" header_anonymous: - placeholder: "Вітае на %{site_name}!" + placeholder: "Вітаем на %{site_name}!" navigation: - title: "рух" + title: "Навігацыя" notifications: - title: "Натыфікацыі" + title: "Апавяшчэнні" search_everything: title: "Пошук" security: @@ -2045,81 +2064,84 @@ be: spam: title: "Спам" dashboard: - title: "Галоўная панэль" + title: "Панэль кіравання" users: - title: "карыстальнікаў" + title: "Карыстальнікі" groups: - title: "групы" + title: "Групы" backups: - title: "Бэкапы" + title: "Рэзервовыя копіі" sub_pages: logs: - title: "Логі" + title: "Журналы" reports: title: "Справаздачы" + sub_pages: + settings: + title: "Налады" badges: - title: "значкі" + title: "Значкі" permalinks: - title: "Сталыя спасылкі" + title: "Пастаянныя спасылкі" emoji: - title: "Emoji" + title: "Эмодзі" email: sub_pages: templates: - title: "шаблоны" + title: "Шаблоны" email_logs: sub_pages: sent: - title: "Sent" + title: "Адпраўлена" skipped: - title: "Skipped" + title: "Прапушчана" received: title: "Атрымана" rejected: - title: "адхілена" + title: "Адхілена" staff_action_logs: sub_pages: screened_emails: - header_description: "Калі хто-то спрабуе стварыць новы ўліковы запіс, наступныя электронныя скрыні будуць правераны і рэгістрацыю заблакаваны, ці прынятыя нейкія іншых дзеянняў" + header_description: "Калі хтосьці паспрабуе стварыць новы ўліковы запіс, будуць правераны наступныя адрасы электроннай пошты, і рэгістрацыя будзе заблакіравана, або будуць выкананы іншыя дзеянні." screened_ips: - title: "Screened IPs" + title: "Правераныя IP-адрасы" screened_urls: - title: "Screened URLs" - header_description: "Пералічаныя тут вэб-адрасы выкарыстоўваліся ў паведамленнях карыстальнікаў, якія былі ідэнтыфікаваныя як спамераў" + title: "Правераныя URL-адрасы" + header_description: "Пералічаныя тут URL-адрасы выкарыстоўваліся ў паведамленнях карыстальнікамі, якія былі вызначаны як спамеры" embedding: - title: "узаемадзеянне" + title: "Убудоўванне" theme_site_settings: - default_value: "Default" + default_value: "Прадвызначаная" search: title: "Пошук" dashboard: - title: "Галоўная панэль" - last_updated: "Адноўлена:" - version: "версія" + title: "Панэль кіравання" + last_updated: "Панэль кіравання абноўлена:" + version: "Версія" up_to_date: "У вас апошняя версія!" - critical_available: "Даступнае крытычнае абнаўленне." - updates_available: "Даступных абнаўленняў." - no_check_performed: "Не выканана праверку на наяўнасць абнаўленняў. Праверце, працуе sidekiq." - stale_data: "У апошні час не ажыццяўлялася праверак на наяўнасць абнаўленняў. Праверце, працуе sidekiq." - installed_version: "устаноўленая" - latest_version: "апошняя" + critical_available: "Даступна крытычнае абнаўленне." + updates_available: "Даступны абнаўленні." + no_check_performed: "Праверка абнаўленняў не была выканана. Пераканайцеся, што Sidekiq працуе." + stale_data: "Праверка абнаўленняў не праводзілася апошнім часам. Пераканайцеся, што Sidekiq працуе." + installed_version: "Усталяваная" + latest_version: "Апошняя" new_features: - learn_more: "Даведацца больш ..." - last_checked: "апошняя праверка" - refresh_problems: "абнавіць" - no_problems: "Не выяўлена ніякіх праблем." - moderators: "мадэратары:" - admins: "адміністратары:" - silenced: "глушыцелем:" - suspended: "прыпыненыя:" - private_messages_short: "Пвдмл" + learn_more: "Даведацца больш..." + last_checked: "Апошняя праверка" + refresh_problems: "Абнавіць" + no_problems: "Праблем не выяўлена." + moderators: "Мадэратары:" + admins: "Адміністратары:" + silenced: "Заглушаныя:" + suspended: "Прыпыненыя:" + private_messages_short: "Павед." private_messages_title: "Паведамленні" mobile_title: "Мабільны" - uploads: "Загрузкі" - backups: "Бэкапы" - traffic_short: "трафік" - page_views: "прагледжваемыя" - page_views_short: "прагледжваемыя" + uploads: "Запампоўкі" + backups: "Рэзервовыя копіі" + traffic_short: "Трафік" + page_views: "Прагляды старонак" + page_views_short: "Прагляды" general_tab: "Агульныя" moderation_tab: "Мадэрацыя" security_tab: "Бяспека" @@ -2135,15 +2157,16 @@ be: 7_days_ago: "7 дзён таму" 30_days_ago: "30 дзён таму" all: "Усё" - daily: штодня - monthly: штомесяц - weekly: штотыдзень + refresh_report: "Абнавіць" + daily: Штодня + monthly: Штомесяц + weekly: Штотыдзень groups: "Усе групы" filters: group: label: Група category: - label: катэгорыя + label: Катэгорыя flags: title: "Мадэрацыя" description: "Апісанне" @@ -2154,12 +2177,12 @@ be: manage: interaction: email: Электронная пошта - incoming_email: "Custom incoming email address" + incoming_email: "Карыстальніцкі адрас уваходнай электроннай пошты" visibility_levels: public: "Усе" title: "Групы" edit: "Рэдагаваць групы" - refresh: "абнавіць" + refresh: "Абнавіць" about: "Edit your group membership and names here" group_members: "Удзельнікі групы" delete: "выдаліць" diff --git a/config/locales/client.bg.yml b/config/locales/client.bg.yml index 2862e542092dc..fab6487eabd32 100644 --- a/config/locales/client.bg.yml +++ b/config/locales/client.bg.yml @@ -6,6 +6,12 @@ bg: js: + blocks: + ghost: + status: "Статус" + in_location: "в" + hidden: "скрит" + failed: "провалени" number: format: separator: "." @@ -279,6 +285,9 @@ bg: pill: "Свързани съобщения" suggested_topics: pm_title: "Предложени съобщения" + admin_onboarding_banner: + start_posting: + back: "Назад" about: edit: "Редактирайте тази страница" simple_title: "Относно" @@ -304,8 +313,6 @@ bg: today: "днес" bookmarked: title: "Отметка" - edit_bookmark: "Редактиране на отметка" - clear_bookmarks: "Изчисти отметките" help: bookmark: "Кликнете, за да добавите тази тема в отметки" edit_bookmark: "Кликнете, за да редактирате отметката на публикация в тази тема" @@ -318,12 +325,12 @@ bg: create: "Създайте отметка" edit: "Редактиране на отметката" not_bookmarked: "добавете тази публикация в Отметки" + topic_bookmark: "Тема" remove_reminder_keep_bookmark: "Премахнете напомнянето и запазете отметката" created_with_reminder: "Отбелязахте тази публикация с напомняне %{date}. %{name}" created_with_reminder_generic: "Записахте това в отметките с напомняне %{date}. %{name}" delete: "Изтрийте отметката" confirm_delete: "Наистина ли искате да изтриете тази отметка? Напомнянето, свързано с нея, също ще бъде отменено." - confirm_clear: "Наистина ли искате да премахните всичките отметки от тази тема?" save: "Запази" no_timezone: 'Не може да получавате напомняния, защото не сте настроили своята часова зона. Може да го направите във Вашия профил.' invalid_custom_datetime: "Въведените дата и час не са валидни. Опитайте отново." @@ -424,7 +431,6 @@ bg: in_reply_to: "в отговор на" explain: why: "обясни защо този елемент се озова в опашката" - title: "Оценяване с възможност за преразглеждане" formula: "Формула" subtotal: "Междинна сума" total: "Общо" @@ -438,17 +444,14 @@ bg: title: "Потребителите, чиито сигнали исторически са били съгласувани, получават бонус." trust_level_bonus: name: "ниво на доверие" - title: "Елементите, които могат да се преглеждат, създадени от потребители с по-високо ниво на доверие, имат по-висок резултат." type_bonus: name: "тип бонус" - title: "Определени типове, подлежащи на преглед, могат да получат бонус от персонала, за да бъдат с по-висок приоритет." revise_and_reject_post: title: "Преразглеждане" reason: "Причина" send_pm: "Изпратете ЛС" feedback: "Обратна връзка" optional: "по избор" - stale_help: "Този преглед е разрешен от %{username}." claim_help: optional: "Можете да заявите този артикул, за да попречите на други да го преглеждат." required: "Трябва да заявите артикули, преди да можете да ги прегледате." @@ -1269,6 +1272,8 @@ bg: tags: "Етикети" interface: "Интерфейс" apps: "Апликации" + calendar_subscriptions: + copied: "Копирано!" change_password: success: "(имейлът е изпратен)" in_progress: "(изпраща се имейл)" @@ -1763,6 +1768,7 @@ bg: form_kit: reset: Нулиране optional: по избор + required: задължително errors: required: "Задъжителни" close: "Затвори" @@ -2354,8 +2360,6 @@ bg: bulk: select_all: "Селектирай всички" clear_all: "Изчисти всички" - unlist_topics: "Непоказани теми" - delete: "Изтрий темите" delete_topics_count: one: "Изтрий темата" other: "Изтрий темите" @@ -2367,17 +2371,9 @@ bg: dismiss_new: "Премахни новите " toggle: "Включв./Изкл. избор на няколко теми" actions: "Групови действия " - close_topics: "Затвори темите" - archive_topics: "Архивирай темите" move_messages_to_inbox: "Премести във входящи" choose_new_category: "Избери нова категория за тези теми:" - selected: - one: "Вие сте избрали %{count} тема." - other: "Вие сте избрали %{count} теми." - change_tags: "Замени етикетите" - append_tags: "Добави етикетите" choose_new_tags: "Избери нови етикети за тези теми:" - choose_append_tags: "Избери нови етикети, които да се добавят към тези теми:" changed_tags: "Етикетите на тези теми бяха сменени." error_topic_count: one: "%{count} тема" @@ -2401,8 +2397,6 @@ bg: name: "Архив" move_messages_to_inbox: name: "Премести във входящи" - append_tags: - name: "Добави етикетите" replace_tags: name: "Замени етикетите" delete_topics: @@ -2934,6 +2928,8 @@ bg: delete_confirm: "Сигурни ли сте, че искате да изтриете тази категория? " delete_error: "Възникна грешка по време на изтриването на категорията. " no_description: "Моля, добавете описание за тази категория. " + description_expand: "Покажи повече" + description_collapse: "Покажи по-малко" already_used: "Този цвят вече е използван за друга категория. " security: "Сигурност" permissions: @@ -2952,6 +2948,8 @@ bg: subcategory_list_style: "Стил на списъка с подкатегориите:" allow_badges_label: "Разрешете използването на значки в тази категория. " review_group_name: "име на групата" + posting_review_modes: + everyone: "Всички" this_year: "тази година " minimum_required_tags: "Минимален брой етикети на тема" none_subcategory_text: "Без" @@ -3248,6 +3246,16 @@ bg: choose_for_topic: "етикети по желание" add_synonyms: "Добави" delete_tag: "Изтрийте таг" + description: "Описание" + settings: + title: "Настройки" + general: "Основни" + back: "Назад" + name: "Име" + slug: "Slug" + localization: + name: "Име " + description: "Описание" sort_by: "Сортирай по:" sort_by_count: "брой" sort_by_name: "име" @@ -3413,7 +3421,6 @@ bg: categories: "Всички категории" admin_js: settings: "Настройки" - reset_filter: "Нулиране" admin: title: "Discourse Админ" moderator: "Модератор" @@ -3421,6 +3428,10 @@ bg: remove_muted_tags_from_latest: always: "винаги" never: "никога" + reports: + group_traffic: "Трафик" + group_members: "Членове" + group_other: "Други" config_sections: account: title: "Профил" @@ -3438,7 +3449,6 @@ bg: preview: "Преглед" enabled_for_options: everyone: "Всички" - staff: "Само за екипа" impact_roles: admins: "Админи" moderators: "Модератори" @@ -3502,6 +3512,10 @@ bg: sub_pages: logs: title: "Логове" + reports: + sub_pages: + settings: + title: "Настройки" badges: title: "Значки" permalinks: @@ -3579,7 +3593,7 @@ bg: 30_days_ago: "Преди 30 дни" all: "Всички" view_table: "таблица" - refresh_report: "Обнови доклада" + refresh_report: "Обнови" daily: Дневно monthly: Месечно weekly: Седмично @@ -4329,6 +4343,7 @@ bg: title: "Показване в потребителската карта" field_types: text: "Текст" + date: "Дата" confirm: "Потвърждение" dropdown: "Падащо" site_text: diff --git a/config/locales/client.bs_BA.yml b/config/locales/client.bs_BA.yml index 9f910a5075cf6..e8741febb0385 100644 --- a/config/locales/client.bs_BA.yml +++ b/config/locales/client.bs_BA.yml @@ -6,6 +6,11 @@ bs_BA: js: + blocks: + ghost: + status: "Status" + hidden: "hidden" + failed: "neuspješno" number: format: separator: "." @@ -264,6 +269,9 @@ bs_BA: pill: "Povezane Poruke" suggested_topics: pm_title: "Preporučene Poruke" + admin_onboarding_banner: + start_posting: + back: "Prethodno" about: edit: "Edit this page" simple_title: "O nama" @@ -289,7 +297,6 @@ bs_BA: today: "today" bookmarked: title: "Zabilješka" - clear_bookmarks: "Odstrani zabilješku" help: unbookmark: "Klikni za uklanjanje svih zabilješki sa ove teme" bookmarks: @@ -297,9 +304,9 @@ bs_BA: create: "Stvaranje zabilješke" edit: "Izmijeni zabilješku" not_bookmarked: "zabilježi objavu" + topic_bookmark: "Topic" delete: "Izbriši zabilješku" confirm_delete: "Jeste li sigurni da želite izbrisati ovu zabilješku? Podsjetnik će takođe biti izbrisan." - confirm_clear: "Jeste li sigurni da želite ukloniti sve vaše zabilješke iz ove teme?" save: "Sačuvaj" no_timezone: 'Još niste postavili vremensku zonu. Nećete moći postavljati podsjetnike. Postavi vremensku zonu u svom profilu.' invalid_custom_datetime: "Datum i vrijeme koje ste naveli nisu valjani. Pokušajte ponovo." @@ -385,7 +392,6 @@ bs_BA: in_reply_to: "odgovori na" explain: why: "objasnite zašto je ovaj objekat završio na listi za čekanje" - title: "Ocjenjiv Skor" formula: "Formula" subtotal: "Podsuma" total: "Suma" @@ -399,10 +405,8 @@ bs_BA: title: "Korisnicima čije su zastave prethodno bivale usaglašene dobivaju bonus." trust_level_bonus: name: "nivo povjerenja" - title: "Ocjenjivi objekti kreirani od strane korisnika sa višim nivoom povjerenja imaju viši skor." type_bonus: name: "bonus tip" - title: "Neki ocjenjivi tipovi mogu zaprimiti bonus od strane osoblja foruma kako bi tim tipovima podigli prioritet" revise_and_reject_post: reason: "Reason" optional: "opciono" @@ -1073,6 +1077,8 @@ bs_BA: tags: "Oznake" interface: "Sučelje" apps: "Aplikacije" + calendar_subscriptions: + copied: "Kopirano!" change_password: success: "(email poslat)" in_progress: "(šaljem email)" @@ -1461,6 +1467,7 @@ bs_BA: form_kit: reset: Resetovati optional: opciono + required: required errors: required: "Required" close: "Zatvori" @@ -1945,9 +1952,6 @@ bs_BA: bulk: select_all: "Označi sve" clear_all: "Očisti sve" - unlist_topics: "Skini teme sa liste" - relist_topics: "Listaj teme" - delete: "Obriši teme" delete_topics_count: one: "Obriši temu" few: "Obriši teme" @@ -1960,18 +1964,9 @@ bs_BA: dismiss_new: "Odpusti Nove" toggle: "preklopi masovno označavanje tema" actions: "Masovno odrađene akcije" - close_topics: "Zatvori teme" - archive_topics: "Arhiviraj teme" move_messages_to_inbox: "Idi u inbox" choose_new_category: "Izaberi novu kategoriju za temu:" - selected: - one: "Označili ste %{count} temu." - few: "Označili ste %{count} teme." - other: "Označili ste %{count} teme." - change_tags: "Zamijeni oznake" - append_tags: "Pripoji oznake" choose_new_tags: "Odaberi nove tagove za ove teme:" - choose_append_tags: "Odaberi nove oznake kako bi pripojili ovim temama:" changed_tags: "Tagovi ovih tema su izmijenjeni." error_topic_count: one: "%{count} tema" @@ -1995,8 +1990,6 @@ bs_BA: name: "Arhiva" move_messages_to_inbox: name: "Premjesti u Sanduče" - append_tags: - name: "Pripoji oznake" replace_tags: name: "Zamijeni oznake" delete_topics: @@ -2558,6 +2551,8 @@ bs_BA: review_group_name: "group name" require_topic_approval: "Potrebno je odobrenje moderatora za sve nove teme" require_reply_approval: "Potrebno je odobrenje moderatora za sve nove odgovore" + posting_review_modes: + everyone: "Svatko" this_year: "this year" position: "Pozicija na stranici kategorije:" minimum_required_tags: "Minimalni broj oznaka potrebnih za temu:" @@ -2954,6 +2949,16 @@ bs_BA: one: "Pripadajući sinonim će također biti obrisan." few: "Pripadajućih %{count} sinonima će također biti obrisano." other: "Pripadajućih %{count} sinonima će također biti obrisano." + description: "Opis" + settings: + title: "Postavke" + general: "General" + back: "Prethodno" + name: "Ime" + synonyms_subtitle: "U slučaju da se sljedeće oznake koriste, iste će biti zamijenjene sa %{name}" + localization: + name: "Ime" + description: "Opis" sort_by: "Sortiraj po:" sort_by_count: "brojenje" sort_by_name: "ime" @@ -3132,7 +3137,6 @@ bs_BA: categories: "Sve kategorije" admin_js: settings: "Postavke" - reset_filter: "Resetovati" admin: title: "Discourse Admin" moderator: "Moderator" @@ -3145,6 +3149,9 @@ bs_BA: reports: title: "Lista dostupnih izvještaja" sidebar_title: "Izvještaji" + group_traffic: "Promet" + group_members: "Članovi" + group_other: "Other" config_sections: account: title: "Račun" @@ -3166,7 +3173,6 @@ bs_BA: preview: "Pregled" enabled_for_options: everyone: "Svatko" - staff: "Samo za urednike i admine" impact_roles: admins: "Admins" moderators: "Moderators" @@ -3236,6 +3242,9 @@ bs_BA: title: "Logs" reports: title: "Izvještaji" + sub_pages: + settings: + title: "Postavke" badges: title: "Bedž" permalinks: @@ -3283,15 +3292,6 @@ bs_BA: default_value: "Uobičajen" search: title: "Pretraži" - result_types: - theme: - one: "Izgled" - few: "Teme" - other: "Teme" - component: - one: "Komponenta" - few: "Komponenti" - other: "Komponenti" dashboard: title: "Dashboard" last_updated: "Nadzorna ploča je ažurirana:" @@ -3359,7 +3359,7 @@ bs_BA: all: "All" view_table: "View as Table" view_graph: "graph" - refresh_report: "Refresh Report" + refresh_report: "Refresh" daily: Dnevno monthly: Mesečno weekly: Sedmično @@ -3791,7 +3791,6 @@ bs_BA: stay: "Ostani" delete_upload_confirm: "Izbrisati ovaj upload? (Tematski CSS može prestati raditi!)" import_web_tip: "Tema sa spremištem" - import_file_tip: ".tar.gz, .zip ili .dcstyle.json datoteka koja sadrži temu" is_private: "Tema je u privatnom git repozitoriju" remote_branch: "Naziv podružnice (opcionalno)" public_key: "Dajte sljedeći pristup javnom ključu repo:" @@ -4360,6 +4359,7 @@ bs_BA: title: "Prikaži na korisničkoj kartici" field_types: text: "Poruka" + date: "Datum" confirm: "Confirmation" dropdown: "Ispustiti" site_text: diff --git a/config/locales/client.ca.yml b/config/locales/client.ca.yml index 616be43059bdb..2db09110ca815 100644 --- a/config/locales/client.ca.yml +++ b/config/locales/client.ca.yml @@ -6,6 +6,11 @@ ca: js: + blocks: + ghost: + status: "Estat" + hidden: "amagat" + failed: "fallits" number: format: separator: "." @@ -292,6 +297,9 @@ ca: pill: "Missatges relacionats" suggested_topics: pm_title: "Missatges recomanats" + admin_onboarding_banner: + start_posting: + back: "Enrere" about: edit: "Edita aquesta pàgina" simple_title: "Quant a" @@ -342,8 +350,6 @@ ca: other: "Creat fa %{count} mesos" bookmarked: title: "Preferit" - edit_bookmark: "Edita el marcador" - clear_bookmarks: "Neteja preferits" help: edit_bookmark_for_topic: "Cliqueu per editar el marcador d'aquest tema" unbookmark: "Feu clic per a eliminar tots els preferits d'aquest tema" @@ -353,11 +359,11 @@ ca: create: "Crea un marcador" edit: "Edita el marcador" not_bookmarked: "marca aquesta publicació com a preferit" + topic_bookmark: "Tema" remove_reminder_keep_bookmark: "Elimina el recordatori i mantén el marcador" created_with_reminder: "Heu marcat aquesta publicació amb un recordatori de %{date}. %{name}" delete: "Suprimeix el marcador" confirm_delete: "Esteu segur que voleu suprimir aquest marcador? El recordatori també se suprimirà." - confirm_clear: "Esteu segur que voleu eliminar tots els preferits d'aquest tema?" save: "Desa" no_timezone: 'Encara no heu establert una zona horària. No podreu establir recordatoris. Configureu una al vostre perfil.' invalid_custom_datetime: "La data i l'hora que heu proporcionat no són vàlides, torneu-ho a provar." @@ -440,7 +446,6 @@ ca: in_reply_to: "en resposta a" explain: why: "expliqueu per què aquest element ha acabat a la cua" - title: "Puntuació revisable" formula: "Fórmula" subtotal: "Subtotal" total: "Total" @@ -454,10 +459,8 @@ ca: title: "Es dóna una bonificació als usuaris que hagin creat banderes amb les quals històricament s'hagi estat d'acord. " trust_level_bonus: name: "nivell de confiança" - title: "Els elements revisables creats per usuaris de nivell superior de confiança tenen una puntuació més alta." type_bonus: name: "bonificació tipus" - title: "El personal pot assignar una bonificació a certs tipus revisables perquè tinguin una prioritat més alta." revise_and_reject_post: reason: "Motiu" optional: "opcional" @@ -1097,6 +1100,8 @@ ca: tags: "Etiquetes" interface: "Interfície" apps: "Aplicacions" + calendar_subscriptions: + copied: "Copiat!" change_password: success: "(correu electrònic enviat)" in_progress: "(enviant correu electrònic)" @@ -1463,6 +1468,7 @@ ca: form_kit: reset: Restableix optional: opcional + required: necessari errors: required: "Necessari" close: "Tanca" @@ -1942,9 +1948,6 @@ ca: confirm: "Confirma" select_all: "Selecciona-ho tot" clear_all: "Neteja-ho tot" - unlist_topics: "Fes temes invisibles" - relist_topics: "Torna a llistar els temes" - delete: "Suprimeix temes" delete_topics_count: one: "Suprimeix tema" other: "Suprimeix temes" @@ -1956,17 +1959,9 @@ ca: dismiss_new: "Descarta'n els nous" toggle: "commuta la selecció massiva de temes" actions: "Accions massives" - close_topics: "Tanca temes" - archive_topics: "Arxiva temes" move_messages_to_inbox: "Mou a la safata d'entrada" choose_new_category: "Seleccioneu la categoria nova per als temes:" - selected: - one: "He seleccionat %{count} tema." - other: "Heu seleccionat %{count} temes." - change_tags: "Reemplaça etiquetes" - append_tags: "Annexa etiquetes" choose_new_tags: "Trieu noves etiquetes per a aquests temes:" - choose_append_tags: "Trieu noves etiquetes a afegir per a aquests temes:" changed_tags: "Les etiquetes d'aquests temes han estat canviades." error_topic_count: one: "%{count} tema" @@ -1989,8 +1984,6 @@ ca: name: "Arxiva" move_messages_to_inbox: name: "Mou a la safata d'entrada" - append_tags: - name: "Annexa etiquetes" replace_tags: name: "Reemplaça etiquetes" delete_topics: @@ -2484,6 +2477,7 @@ ca: allow_global_tags_label: "Permet també altres etiquetes" required_tag_group: delete: "Suprimeix" + tag_group: "Grup d'etiquetes" topic_featured_link_allowed: "Permet enllaços destacats dins aquesta categoria" create_long: "Crea una categoria nova" slug_placeholder: "(opcional) paraules amb guionets per a url" @@ -2528,6 +2522,8 @@ ca: review_group_name: "nom del grup" require_topic_approval: "Requereix aprovació del moderador en tots els temes nous" require_reply_approval: "Requereix aprovació del moderador en totes les respostes noves" + posting_review_modes: + everyone: "Tothom" this_year: "enguany" position: "Posició en la pàgina de categories:" minimum_required_tags: "Nombre mínim d'etiquetes necessari en un tema:" @@ -2865,6 +2861,15 @@ ca: one: "Esteu segur que voleu suprimir aquesta etiqueta i eliminar-la del tema %{count} al qual és assignada?" other: "Esteu segur que voleu suprimir aquesta etiqueta i eliminar-la dels %{count} temes als quals és assignada?" delete_confirm_no_topics: "Esteu segur que voleu suprimir aquesta etiqueta?" + description: "Descripció" + settings: + title: "Configuració" + general: "General" + back: "Enrere" + name: "Nom" + localization: + name: "Nom" + description: "Descripció" sort_by: "Ordena per:" sort_by_count: "comptabilitza" sort_by_name: "nom" @@ -3042,7 +3047,6 @@ ca: categories: "Totes les categories" admin_js: settings: "Configuració" - reset_filter: "Restableix" admin: title: "Administració de Discourse" moderator: "Moderador" @@ -3055,6 +3059,9 @@ ca: reports: title: "Llista de reports disponibles" sidebar_title: "Reports" + group_traffic: "Tràfic" + group_members: "Membres" + group_other: "Altres" config_sections: account: title: "Compte" @@ -3076,7 +3083,6 @@ ca: preview: "Previsualitza" enabled_for_options: everyone: "Tothom" - staff: "Només l'equip responsable" impact_roles: admins: "Administradors" moderators: "Moderadors" @@ -3148,6 +3154,9 @@ ca: title: "Registres" reports: title: "Reports" + sub_pages: + settings: + title: "Configuració" badges: title: "Insígnies" permalinks: @@ -3196,13 +3205,6 @@ ca: default_value: "Per defecte" search: title: "Cerca" - result_types: - theme: - one: "Aparença" - other: "Aparences" - component: - one: "Component" - other: "Components" dashboard: title: "Tauler de control" last_updated: "Tauler de control actualitzat:" @@ -3269,7 +3271,7 @@ ca: all: "Tot" view_table: "taula" view_graph: "gràfica" - refresh_report: "Actualitza el report" + refresh_report: "Actualitza" daily: Diàriament monthly: Mensualment weekly: Setmanalment @@ -3701,7 +3703,6 @@ ca: stay: "Roman" delete_upload_confirm: "Voleu suprimir aquesta càrrega? (L'aparença CSS pot deixar de funcionar!)" import_web_tip: "Repositori que conté l'aparença" - import_file_tip: "fitxer .tar.gz, .zip o .dcstyle.json que conté l'aparença" is_private: "L'aparença és en un repositori git privat" remote_branch: "Nom de branca (opcional)" public_key: "Atorga el següent accés de clau pública al repositori:" @@ -4284,6 +4285,7 @@ ca: title: "Mostra en la targeta d'usuari" field_types: text: "Text" + date: "Data" confirm: "Confirmació" dropdown: "Desplega" site_text: diff --git a/config/locales/client.cs.yml b/config/locales/client.cs.yml index 430d5f40cbb57..9e82ddbd6e276 100644 --- a/config/locales/client.cs.yml +++ b/config/locales/client.cs.yml @@ -6,6 +6,12 @@ cs: js: + blocks: + ghost: + status: "Stav" + in_location: "v" + hidden: "skrytý" + failed: "neúspěšný" carousel: go_to_slide: "Přejít na snímek č. %{index}" previous: "Předchozí snímek" @@ -482,6 +488,8 @@ cs: pm_title: "Doporučené zprávy" admin_onboarding_banner: launch_in_easy_steps: "Odstartujte v %{step_count} snadných krocích" + start_posting: + back: "Zpět" spread_the_word: action: "Kopírovat odkaz" copied_to_clipboard: "Odkaz zkopírován do schránky!" @@ -594,8 +602,6 @@ cs: other: "Založeno před %{count} lety" bookmarked: title: "Záložka" - edit_bookmark: "Upravit záložku" - clear_bookmarks: "Odstranit záložky" help: bookmark: "Kliknutím přidáte toto téma do záložek" edit_bookmark: "Kliknutím upravíte záložku pro toto téma" @@ -614,12 +620,12 @@ cs: clear_reminder: "Vymazat připomínku" edit: "Upravit záložku" not_bookmarked: "přidat záložku k příspěvku" + topic_bookmark: "Témata" remove_reminder_keep_bookmark: "Odebrat připomenutí a ponechat záložku" created_with_reminder: "Tento příspěvek jste označili záložkou s připomenutím %{date}. %{name}" created_with_reminder_generic: "Toto jste si přidali do záložek s připomenutím %{date}. %{name}" delete: "Smazat záložku" confirm_delete: "Opravdu chcete tuto záložku smazat? Připomenutí bude také smazáno." - confirm_clear: "Opravdu chcete odstranit všechny své záložky z tohoto tématu?" save: "Uložit" no_timezone: 'Zatím jste nenastavili časové pásmo. Nebudete moci nastavit připomenutí. Nastavte si ho ve svém profilu.' invalid_custom_datetime: "Zadané datum a čas jsou neplatné, zkuste to prosím znovu." @@ -774,21 +780,13 @@ cs: in_reply_to: "v odpovědi na" filtered_flagged_by: "Nahlásil" unknown: - title: - one: "Máte nevyřízené revize ze zakázaného pluginu:" - few: "Máte nevyřízené revize ze zakázaných pluginů:" - many: "Máte nevyřízené revize ze zakázaných pluginů:" - other: "Máte nevyřízené revize ze zakázaných pluginů:" instruction: "Nelze je správně zobrazit, dokud neaktivujete příslušný plugin. Povolte prosím plugin a obnovte stránku. Případně je můžete ignorovat. Další informace..." reviewable_unknown_source: "%{reviewableType} (neznámý plugin)" reviewable_known_source: "%{reviewableType} (z pluginu '%{pluginName}')" ignore_all: "Ignorovat vše" enable_plugins: "Povolit pluginy" - delete_confirm: "Opravdu chcete smazat všechny revize vytvořené zakázanými pluginy?" - ignore_success: "Všechny revize vytvořené zakázanými pluginy byly smazány." explain: why: "vysvětlete, proč tato položka skončila ve frontě" - title: "Hodnocení nahlášeného příspěvku" formula: "Vzorec" subtotal: "Mezisoučet" total: "Celkem" @@ -802,10 +800,8 @@ cs: title: "Uživatelé, jejichž nahlášení byla historicky odsouhlasena, dostávají bonus." trust_level_bonus: name: "úroveň důvěry" - title: "Kontrolovatelné položky vytvořené uživateli s vyšší úrovní důvěry mají vyšší skóre." type_bonus: name: "bonus za psaní" - title: "Některým revidovatelným typům mohou redaktoři přidělit bonus, aby měly vyšší prioritu." revise_and_reject_post: title: "Revidovat" reason: "Důvod" @@ -814,7 +810,6 @@ cs: custom_reason: "Uveďte jasný popis důvodu" other_reason: "Ostatní..." optional: "volitelné" - stale_help: "Tuto revizi vyřešil/a %{username}." claim_help: optional: "Tuto položku si můžete nárokovat, abyste zabránili ostatním v její kontrole." required: "Než budete moci položky revidovat, musíte si je nárokovat." @@ -1938,6 +1933,10 @@ cs: apps: "Aplikace" navigation_menu: "Navigační nabídka" upcoming_changes: "Nadcházející změny" + calendar_subscriptions: "Kalendář" + calendar_subscriptions: + copied: "Zkopírováno!" + add_to_google: "Kalendář Google" change_password: success: "(email odeslán)" in_progress: "(odesílám)" @@ -2582,6 +2581,7 @@ cs: form_kit: reset: obnovit výchozí optional: volitelné + required: required dirty_form: "Neodeslali jste změny! Opravdu chcete odejít?" errors: starts_with: "Musí začínat na %{prefix}" @@ -3023,6 +3023,8 @@ cs: medium_dark_tone: Hnědá pleť dark_tone: Černá pleť default: Vlastní emoji + filter_input: + clear: "Vymazat filtr" shared_drafts: title: "Sdílené koncepty" notice: "Toto téma je viditelné pouze pro ty, kteří mohou publikovat sdílené koncepty." @@ -3448,8 +3450,6 @@ cs: votes_released: "hlas byly uvolněn" new_features: "byly vydány nové funkce Discourse" admin_problems: "na administrační nástěnce vašeho webu jsou nová doporučení" - upcoming_change_available: "nová nadcházející změna '%{changeName}' je k dispozici" - upcoming_change_automatically_promoted: "nadcházející změna '%{changeName}' byla automaticky povolena" upload_selector: change: "Změnit" delete: "Smazat" @@ -3588,8 +3588,6 @@ cs: max_views: placeholder: maximum aria_label: filtrovat podle maximálního počtu zobrazení - additional_options: - label: "Filtrovat podle počtu příspěvků a zobrazení tématu" hamburger_menu: "Navigační nabídka" new_item: "nové" go_back: "jít zpět" @@ -3669,11 +3667,8 @@ cs: confirm: "Potvrdit" select_all: "Vybrat vše" clear_all: "Zrušit vše" - unlist_topics: "Skrýt témata" - relist_topics: "Zrušit skrytí témat" reset_bump_dates: "Resetovat data pošťouchnutí" defer: "Označit jako nepřečtené" - delete: "Smazat témata" delete_topics_count: one: "Odstranit téma" few: "Smazat témata" @@ -3728,19 +3723,10 @@ cs: other: "Skrýt %{count} nových" toggle: "hromadný výběr témat" actions: "Hromadné akce" - change_category: "Nastavit kategorii…" - close_topics: "Zavřít téma" - archive_topics: "Archivovat témata" move_messages_to_inbox: "Přesunout do doručených" archive_messages: "Přesunout do archivu" - notification_level: "Oznámení…" change_notification_level: "Změnit úroveň upozornění" choose_new_category: "Zvolte novou kategorii pro témata:" - selected: - one: "Vybrali jste %{count} téma." - few: "Vybrali jste %{count} témata." - many: "Vybrali jste %{count} témat." - other: "Vybrali jste %{count} témat." selected_sole_category: one: "Vybrali jste %{count} téma z kategorie:" few: "Vybrali jste %{count} témata z kategorie:" @@ -3751,12 +3737,8 @@ cs: few: "%{count} vybraná" many: "%{count} vybraných" other: "%{count} vybraných" - change_tags: "Zaměnit štítky" - append_tags: "Přidat štítky" choose_new_tags: "Zvolte nové štítky pro tato témata:" - choose_append_tags: "Zvolte nové štítky, které chcete přidat k těmto tématům:" changed_tags: "Štítky těchto témat byly změněny." - remove_tags: "Odebrat všechny štítky" confirm_remove_tags: one: "Všechny štítky budou z tohoto tématu odstraněny. Jsi si jisti?" few: "Všechny štítky budou z těchto %{count} témat odstraněny. Jste si jisti?" @@ -3767,7 +3749,7 @@ cs: few: "Průběh: %{count} témata" many: "Průběh: %{count} témat" other: "Průběh: %{count} témat" - notify: "Upozornit uživatele na tuto změnu." + notify: "Upozornit uživatele na tuto změnu" performing: "Provádíme hromadné operace, vyčkejte prosím…" completed: "Hromadné operace byly úspěšně dokončeny!" error_topic_count: @@ -3798,7 +3780,6 @@ cs: name: "Označit jako přečtené" close_topics: name: "Zavřít" - note: "Poznámka" optional: (volitelné) archive_topics: name: "Archivovat" @@ -3812,24 +3793,18 @@ cs: name: "Zrušit skrytí" remove_tags: name: "Odebrat štítky" - append_tags: - name: "Přidat štítky" replace_tags: name: "Zaměnit štítky" delete_topics: name: "Smazat" update_category: name: "Aktualizovat kategorii" - description: "Zvolte novou kategorii pro vybraná témata" reset_bump_dates: name: "Resetovat data pošťouchnutí" - description: "Resetujte datum pošťouchnutí tématu na datum posledního vytvořeného příspěvku, což ovlivní řazení v seznamu témat" defer: name: "Označit jako nepřečtené" - description: "Označit témata jako nepřečtená" update_notifications: name: "Aktualizovat upozornění" - description: "Změňte úroveň oznámení na Hlídané, Sledované, Normální nebo Ztišené" topic: filter_to: one: "%{count} příspěvek v tématu" @@ -4446,7 +4421,11 @@ cs: edit: "Upravit" delete: "Smazat" add: "Přidat nový překlad" - manage: "Správa překladů (%{count} existujících)" + manage: + one: "Správa překladů (%{count} existujících)" + few: "Správa překladů (%{count} existujících)" + many: "Správa překladů (%{count} existujících)" + other: "Správa překladů (%{count} existujících)" view: one: "Zobrazit %{count} překlad" few: "Zobrazit %{count} překlady" @@ -4722,7 +4701,10 @@ cs: delete: "Smazat kategorii" create: "Přidat kategorii" create_long: "Vytvořit novou kategorii" + type_settings_schema: + site_settings: "Nastavení webu" save: "Uložit kategorii" + unsaved_changes: "Máte neuložené změny" slug: "URL kategorie" parent: "Nadřazená kategorie" slug_placeholder: "(Nepovinné) slova s pomlčkou pro URL" @@ -4768,6 +4750,8 @@ cs: list: "Přehled kategorií" no_description: "Doplňte prosím popis této kategorie." change_in_category_topic: "Úprava popisu" + description_expand: "Zobrazit více" + description_collapse: "Zobrazit méně" already_used: "Tato barva je již použita jinou kategorií" color_palette: "Barevná paleta" security: "Zabezpečení" @@ -4807,6 +4791,9 @@ cs: review_group_name: "název skupiny" require_topic_approval: "Požadovat schválení moderátorů pro všechna nová témata" require_reply_approval: "Požadovat schválení moderátorů pro všechny nové odpovědi" + posting_review_modes: + no_one: "Nikdo" + everyone: "Všichni" this_year: "letos" position: "Pozice na stránce kategorií:" default_position: "Výchozí pozice" @@ -5426,7 +5413,20 @@ cs: other: "Jeho %{count} synonym bude také smazáno." edit_tag: "Upravit název a popis štítku" edit: "Upravit tento štítek" - description: "Popis (max. 1000 znaků)" + description: "Popis" + settings: + title: "Nastavení" + general: "Obecné" + localizations: "Lokalizace" + back: "Zpět" + name: "Jméno" + slug: "URL" + name_placeholder: "Název štítku" + synonyms_subtitle: "Pokud jsou použity následující štítky, budou nahrazeny %{name}" + localization: + locale: "Jazyk" + name: "Název" + description: "Popis" sort_by: "Seřadit dle:" sort_by_count: "počtu" sort_by_name: "názvu" @@ -5974,7 +5974,6 @@ cs: admin_js: type_to_filter: "Text pro filtrování..." settings: "Nastavení" - reset_filter: "obnovit výchozí" toggle_filters: "Přepnout rozbalovací filtry" admin: title: "Administrátor" @@ -5988,9 +5987,11 @@ cs: never: "nikdy" reports: title: "Seznam dostupných sestav" - meta_doc: "Sestavy jsou mocným nástrojem, který vám pomůže pochopit, co se děje na vašich stránkách. Mohou vám pomoci rozpoznat trendy, problémy a činit rozhodnutí na základě dat." sidebar_title: "Sestavy" back: "Zpět na všechny sestavy" + group_traffic: "Provoz" + group_members: "Členové" + group_other: "Ostatní" config_sections: account: title: "Účet" @@ -6033,7 +6034,6 @@ cs: enabled_for_options: no_one: "Nikdo" everyone: "Všichni" - staff: "Pouze redakce" specific_groups: "Specifické skupiny" specific_groups_with_group_names: one: "skupina %{groupNames}" @@ -6146,7 +6146,6 @@ cs: help_text: "Doporučená velikost je 600 x 80 pixelů." large_icon: title: "Čtvercová ikona" - description: "Čtvercová verze obrázku loga se zobrazuje v horní části administrace a je zároveň logem mobilní aplikace na domovské obrazovce." help_text: "Doporučená velikost je 512 x 512 pixelů." square_icon_dark: required: "Použít pro tmavý režim jinou čtvercovou ikonu?" @@ -6336,7 +6335,7 @@ cs: header_description: "Sestavy jsou mocným nástrojem, který vám pomůže pochopit, co se děje na vašich stránkách. Mohou vám pomoci rozpoznat trendy, problémy a činit rozhodnutí na základě dat." sub_pages: settings: - title: "Nastavení nástěnky" + title: "Nastavení" badges: title: "Odznaky" header_description: "Odznaky odměňují uživatele za jejich aktivity, příspěvky a úspěchy, aby uznaly, potvrdily a podpořily pozitivní chování a zapojení v rámci komunity" @@ -6491,32 +6490,6 @@ cs: few: '%{count} výsledky pro „%{filter}“' many: '%{count} výsledků pro „%{filter}“' other: '%{count} výsledků pro „%{filter}“' - result_types: - page: - one: "Stránka" - few: "Stránky" - many: "Stránek" - other: "Stránek" - report: - one: "Sestava" - few: "Sestavy" - many: "Sestav" - other: "Sestav" - setting: - one: "Nastavení" - few: "Nastavení" - many: "Nastavení" - other: "Nastavení" - theme: - one: "Téma" - few: "Motivy" - many: "Motivy" - other: "Motivy" - component: - one: "Komponenta" - few: "Komponenty" - many: "Komponenty" - other: "Komponenty" new_features: title: "Co je nového?" check_for_updates: "Aktualizovat" @@ -6541,23 +6514,6 @@ cs: subtitle: "Neustále vydáváme nové funkce a vylepšení. Tato stránka obsahuje hlavní body, ale kliknutím na „Další informace“ zobrazíte rozsáhlé poznámky k verzi." no_new_features_error: "Při načítání zdroje došlo k chybě. Předchozí oznámení o nových funkcích můžete vidět na komunitě Discourse Meta." learn_more: "Více informací..." - experimental: "Experimentální" - only_experiments: "Zobrazit pouze experimentální funkce" - experiment_enabled: "Povolili jste experimentální funkci." - experiment_disabled: "Vypnuli jste experimentální funkci." - feature_enabled: "Funkci jste povolili." - feature_disabled: "Funkci jste zakázali." - toggled_too_fast: "Přepínač jste přepnuli příliš rychle. Počkejte prosím několik vteřin před dalším pokusem." - experiment_tooltip: - title_disabled: "Vyzkoušejte tuto experimentální funkci" - title_enabled: "Vypněte experimentální funkci" - content_disabled: "Vyzkoušejte naši nejnovější funkci ve vývoji! Je stále v experimentální fázi, takže ji můžeme kdykoli odstranit. Můžete se odhlásit, kdykoli budete chtít.

Přepnutím ji povolíte pro všechny uživatele." - content_enabled: "Změna tohoto nastavení vypnete funkci pro všechny uživatele." - feature_tooltip: - title_disabled: "Vyzkoušejte tuto funkci" - title_enabled: "Vypnout funkci" - content_disabled: "Vyzkoušejte tuto novou funkci! Můžete ji vypnout, kdykoli budete chtít.

Přepnutím povolíte funkci povolí pro všechny uživatele." - content_enabled: "Změna tohoto nastavení vypnete funkci pro všechny uživatele." last_checked: "Naposledy zkontrolováno" refresh_problems: "Obnovit" no_problems: "Nenalezeny žádné problémy." @@ -6628,7 +6584,7 @@ cs: all: "Celkem" view_table: "tabulka" view_graph: "graf" - refresh_report: "Aktualizovat data" + refresh_report: "Aktualizovat" daily: Denně monthly: Měsíčně weekly: Týdně @@ -7551,7 +7507,6 @@ cs: import_web_tip: "Repozitář obsahující motiv" direct_install_tip: "Opravdu chcete nainstalovat %{name} z níže uvedeného repozitáře?" import_web_advanced: "Pokročilé…" - import_file_tip: "Soubor .tar.gz, .zip nebo .dcstyle.json obsahující motiv" is_private: "Motiv je v soukromém git úložišti" finish_install: "Dokončit instalaci motivu" last_attempt: "Proces instalace nebyl dokončen, poslední pokus:" @@ -8676,6 +8631,7 @@ cs: field_types: text: "Text" textarea: "Textová oblast" + date: "Datum" confirm: "Potvrzení" dropdown: "Rozbalovací nabídka" multiselect: "Více možností" @@ -8824,7 +8780,7 @@ cs: min_admin_password_length: prompt: "Chystáte se změnit zásady používání hesel. To se od nynějška dotkne všech správců, kteří si mění svá hesla. Jste si jisti, že chcete pokračovat?" confirm: "Ano, aktualizovat zásady hesel" - password_unique_charactes: + password_unique_characters: prompt: "Chystáte se změnit zásady používání hesel. To se od nynějška dotkne všech uživatelů, kteří si mění svá hesla. Jste si jisti, že chcete pokračovat?" confirm: "Ano, aktualizovat zásady hesel" block_common_passwords: diff --git a/config/locales/client.da.yml b/config/locales/client.da.yml index f69438cadb5fe..53c1ce07453d3 100644 --- a/config/locales/client.da.yml +++ b/config/locales/client.da.yml @@ -6,6 +6,12 @@ da: js: + blocks: + ghost: + status: "Status" + in_location: "i" + hidden: "skjult" + failed: "fejlet" number: format: separator: "." @@ -397,6 +403,8 @@ da: pill: "Foreslået" pm_title: "Foreslåede beskeder" admin_onboarding_banner: + start_posting: + back: "Tilbage" spread_the_word: action: "Kopiér link" about: @@ -458,8 +466,6 @@ da: other: "Oprettet %{count} år siden" bookmarked: title: "Bogmærke" - edit_bookmark: "Rediger Bogmærke" - clear_bookmarks: "Fjern bogmærker" help: bookmark: "Klik for at bogmærke dette emne" edit_bookmark_for_topic: "Klik for at redigere bogmærket for dette emne" @@ -475,12 +481,12 @@ da: clear_reminder: "Ryd påmindelse" edit: "Rediger bogmærke" not_bookmarked: "bogmærk dette indlæg" + topic_bookmark: "Emne" remove_reminder_keep_bookmark: "Fjern påmindelse og behold bogmærke" created_with_reminder: "Du har sat et bogmærke med en påmindelse for dette indlæg %{date}. %{name}" created_with_reminder_generic: "Du har bogmærket dette med en påmindelse %{date}. %{name}" delete: "Slet Bogmærke" confirm_delete: "Er du sikker på, at du vil slette dette bogmærke? Påmindelsen vil også blive slettet." - confirm_clear: "Er du sikker på, at du vil rydde alle dine bogmærker fra dette emne?" save: "Gem" no_timezone: 'Du har ikke indstillet en tidszone endnu. Du vil ikke være i stand til at indstille påmindelser. Konfigurer dette i din profil.' invalid_custom_datetime: "Dato og klokkeslæt du angav er ugyldigt, prøv venligst igen." @@ -589,19 +595,13 @@ da: in_reply_to: "som svar til" filtered_flagged_by: "Anmeldt af" unknown: - title: - one: "Du har afventende gennemgange fra deaktiveret plugin:" - other: "Du har afventende gennemgange fra deaktiveret plugins:" instruction: "De kan ikke vises korrekt, før du aktiverer det relevante plugin. Aktivér venligst plugin'et, og opdater siden. Alternativt kan du ignorere dem. Få mere at vide..." reviewable_unknown_source: "%{reviewableType} (ukendt plugin)" reviewable_known_source: "%{reviewableType} (fra '%{pluginName}' plugin)" ignore_all: "Ignorer alle" enable_plugins: "Aktivér plugins" - delete_confirm: "Er du sikker på, at du vil slette alle anmeldelser oprettet af deaktiverede plugins?" - ignore_success: "Alle anmeldelser oprettet af deaktiverede plugins er blevet slettet." explain: why: "forklar hvorfor dette punkt endte i køen" - title: "Scoring, der kan gennemgås" formula: "Formular" subtotal: "Mellemtotal" total: "Total" @@ -615,10 +615,8 @@ da: title: "Brugere, hvis markeringer historisk er blevet bekræftet/godkendt, får en bonus." trust_level_bonus: name: "tillidsniveau" - title: "Punkter til gennemgang, som er oprettet af brugere med højere tillidsniveau, har en højere score." type_bonus: name: "skriv bonus" - title: "Visse gennemgåelige typer kan tildeles en bonus af medarbejdere, for at give dem til en højere prioritet." revise_and_reject_post: title: "Revidere" reason: "Begrundelse" @@ -627,7 +625,6 @@ da: custom_reason: "Giv en klar beskrivelse af årsagen" other_reason: "Andet..." optional: "valgfri" - stale_help: "Denne gennemgang er blevet løst af %{username}." claim_help: optional: "Du kan gøre krav på dette punkt, for at forhindre andre i at gennemgå det." required: "Du skal kræve punkter, før du kan gennemgå dem." @@ -1489,6 +1486,9 @@ da: tags: "Tags" interface: "Grænseflade" apps: "Apps" + calendar_subscriptions: + copied: "Kopieret!" + add_to_google: "Google Kalender" change_password: success: "(e-mail sendt)" in_progress: "(sender e-mail)" @@ -2015,6 +2015,7 @@ da: form_kit: reset: Nulstil optional: valgfri + required: krævet errors: required: "Obligatoriske" invalid_url: "Skal være en gyldig URL" @@ -2319,6 +2320,8 @@ da: medium_dark_tone: Medium mørk hudfarve dark_tone: Mørk hudfarve default: Brugerdefineret humørikoner + filter_input: + clear: "Ryd filter" shared_drafts: title: "Delte kladder" notice: "Dette emne er kun synligt for dem, der kan udgive delte kladder." @@ -2743,11 +2746,8 @@ da: confirm: "Bekræft" select_all: "Vælg alle" clear_all: "Ryd alle" - unlist_topics: "Fjern emner fra liste" - relist_topics: "Genindlæs emner" reset_bump_dates: "Nulstil bump datoer" defer: "Markér som ulæst" - delete: "Slet emner" delete_topics_count: one: "Slet emne" other: "Slet emner" @@ -2759,29 +2759,20 @@ da: dismiss_new: "Afvis nye" toggle: "vælg flere emner af gangen" actions: "Handlinger på flere indlæg" - change_category: "Indstil kategori…" - close_topics: "Luk indlæg" - archive_topics: "Arkiver Emner" move_messages_to_inbox: "Flyt til indbakke" archive_messages: "Flyt til arkiv" - notification_level: "Notifikationer…" change_notification_level: "Skift Notifikationsniveau" choose_new_category: "Vælg den nye kategori for emnerne:" - selected: - one: "Du har valgt %{count} indlæg." - other: "Du har valgt %{count} indlæg." selected_sole_category: one: "Du har valgt %{count} emne fra kategorien:" other: "Du har valgt %{count} emner fra kategorien:" selected_count: one: "%{count} valgt" other: "%{count} valgt" - change_tags: "Erstat tags" - append_tags: "Tilføj tags" + append_tags: "Tilføj mærker" choose_new_tags: "Vælg nye tags for dette emne" - choose_append_tags: "Vælg nye tags til at tilføje emnet:" + choose_append_tags: "Tilføj mærker" changed_tags: "Tags for dette emne blev ændret" - remove_tags: "Fjern alle tags" confirm_remove_tags: one: "Alle mærker fjernes fra dette emne. Er du sikker?" other: "Alle tags fjernes fra %{count} emner. Er du sikker?" @@ -2807,7 +2798,6 @@ da: name: "Ignorer Alle" close_topics: name: "Luk" - note: "Note" optional: (valgfri) archive_topics: name: "Arkiv" @@ -2817,8 +2807,6 @@ da: name: "Flyt til indbakke" remove_tags: name: "Fjern tags" - append_tags: - name: "Tilføj tags" replace_tags: name: "Erstat tags" delete_topics: @@ -3477,6 +3465,7 @@ da: delete: "Slet" add: "Tilføj obligatorisk mærkegruppe" placeholder: "Vælg mærkegruppe…" + tag_group: "Mærkegruppe" topic_featured_link_allowed: "Tillad fremhævede links i denne kategori" create_long: "Opret en ny kategori" slug_placeholder: "(Valgfri) gennemstregede-ord for URL" @@ -3505,6 +3494,8 @@ da: delete_error: "Der opstod en fejl under sletningen af kategorien." no_description: "Der er ingen beskrivelse for denne kategori." change_in_category_topic: "Rediger beskrivelse" + description_expand: "Vis mere" + description_collapse: "Vis mindre" already_used: "Denne farve er blevet brugt af en anden kategori" security: "Sikkerhed" security_add_group: "Tilføj en gruppe" @@ -3534,6 +3525,9 @@ da: review_group_name: "gruppe navn" require_topic_approval: "Kræv moderator godkendelse af alle nye emner" require_reply_approval: "Kræv moderator godkendelse af alle nye svar" + posting_review_modes: + everyone: "Alle" + posting_review_groups_placeholder: "Vælg grupper ..." this_year: "dette år" position: "Placering på kategorisiden:" minimum_required_tags: "Minimum antal tags krævet i et emne:" @@ -3981,7 +3975,18 @@ da: one: "Dets synonym slettes også." other: "Dets %{count} synonymer slettes også." edit_tag: "Rediger mærke navn og beskrivelse" - description: "Beskrivelse (maks. 1000 tegn)" + description: "Beskrivelse" + settings: + title: "Indstillinger" + general: "Overordnet" + back: "Tilbage" + name: "Navn" + slug: "Alias (Slug)" + name_placeholder: "Mærke navn" + synonyms_subtitle: "Når følgende tags bruges, vil de blive erstattet med %{name}" + localization: + name: "Navn" + description: "Beskrivelse" sort_by: "Sortér efter:" sort_by_count: "antal" sort_by_name: "navn" @@ -4318,7 +4323,6 @@ da: admin_js: type_to_filter: "Skriv for at filtrere…" settings: "Indstillinger" - reset_filter: "Nulstil" admin: title: "Discourse Admin" moderator: "Moderator" @@ -4332,6 +4336,9 @@ da: title: "Liste over tilgængelige rapporter" sidebar_title: "Rapporter" back: "Tilbage til alle rapporter" + group_traffic: "Trafik" + group_members: "Brugere" + group_other: "Andre" config_sections: account: title: "Konto" @@ -4356,7 +4363,6 @@ da: preview: "Forhåndsvisning" enabled_for_options: everyone: "Alle" - staff: "Kun personale" statuses: experimental: "Eksperimentel" impact_roles: @@ -4481,6 +4487,9 @@ da: title: "Logs" reports: title: "Rapporter" + sub_pages: + settings: + title: "Indstillinger" badges: title: "Emblemer" content: @@ -4545,22 +4554,6 @@ da: result_count: one: '%{count} resultat for "%{filter}"' other: '%{count} resultater for "%{filter}"' - result_types: - page: - one: "Side" - other: "Sider" - report: - one: "Rapport" - other: "Rapporter" - setting: - one: "Indstilling" - other: "Indstillinger" - theme: - one: "Tema" - other: "Temaer" - component: - one: "Komponent" - other: "komponenter" new_features: title: "Hvad er nyt?" check_for_updates: "Se efter opdateringer" @@ -4583,7 +4576,6 @@ da: new_features: title: "Hvad er nyt?" learn_more: "Lær mere..." - experimental: "Eksperimentel" last_checked: "Sidst kontrolleret" refresh_problems: "Opdatér" no_problems: "Ingen problemer fundet." @@ -4635,7 +4627,7 @@ da: all: "Alle" view_table: "tabel" view_graph: "graf" - refresh_report: "Genopfrisk rapporten" + refresh_report: "Genindlæs" daily: Dagligt monthly: Månedligt weekly: Ugentligt @@ -5283,7 +5275,6 @@ da: import_web_tip: "Depot som har temaet" direct_install_tip: "Er du sikker på, at du vil installere %{name} fra lageret nedenfor?" import_web_advanced: "Avanceret…" - import_file_tip: ".tar.gz, .zip eller .dcstyle.json fil indeholdende tema" is_private: "Temaet er i et privat git-repository" remote_branch: "Filialnavn (valgfrit)" public_key: "Giv følgende offentlig nøgle adgang til repoen:" @@ -6073,6 +6064,7 @@ da: field_types: text: "Tekst" textarea: "Tekstområde" + date: "Dato" confirm: "Bekræft" dropdown: "Rulleboks" multiselect: "Multivælg" @@ -6180,7 +6172,7 @@ da: confirm: "Ja, opdater adgangskodepolitik" min_admin_password_length: confirm: "Ja, opdater adgangskodepolitik" - password_unique_charactes: + password_unique_characters: confirm: "Ja, opdater adgangskodepolitik" job_status: completed: "Opdatering fuldført" diff --git a/config/locales/client.de.yml b/config/locales/client.de.yml index 40e6e90f8356a..45ba1ad08439e 100644 --- a/config/locales/client.de.yml +++ b/config/locales/client.de.yml @@ -6,6 +6,22 @@ de: js: + blocks: + ghost: + status: "Status" + conditions: "Bedingungen" + arguments: "Argumente" + container_args: "Container-Argumente" + in_location: "in" + hidden: "ausgeblendet" + not_registered: "nicht registriert" + no_visible_children: "keine sichtbaren untergeordneten Elemente" + failed: "fehlgeschlagen" + ghost_reasons: + optional_missing_hint: "Dieser optionale Block wird nicht gerendert, da er nicht registriert ist." + no_visible_children_hint: "Dieser Containerblock wird nicht gerendert, da keines seiner untergeordneten Elemente sichtbar ist." + condition_failed_hint: "Dieser Block wird nicht gerendert, da seine Bedingungen nicht erfüllt sind." + head_hidden_tail_hint: "Dieser Block wird nicht gerendert, weil ein anderer Block im `head`-Container zuerst gerendert wurde." carousel: go_to_slide: "Gehe zu Folie %{index}" previous: "Vorherige Folie" @@ -297,6 +313,7 @@ de: skip_to_top: "Zum Seitenanfang springen" skip_user_nav: "Zum Profilinhalt springen" emails_are_disabled: "Die ausgehende E-Mail-Kommunikation wurde von einem Administrator global deaktiviert. Es werden keinerlei Benachrichtigungen per E-Mail verschickt." + emails_are_disabled_no_smtp: "Die ausgehende E-Mail-Kommunikation ist deaktiviert, weil kein SMTP-Server konfiguriert wurde. Es können keinerlei E-Mails verschickt werden." emails_are_disabled_non_staff: "Ausgehende E-Mails wurden für Benutzer, die nicht zum Team gehören, deaktiviert." software_update_prompt: message: "Wir haben diese Website aktualisiert. Bitte aktualisiere, damit alles reibungslos funktioniert." @@ -322,12 +339,27 @@ de: broken_page_change_alert: "Ein onPageChange-Handler hat einen Fehler ausgelöst. Überprüfe die Entwicklerwerkzeuge des Browsers für weitere Informationen." broken_plugin_alert: "Verursacht durch das Plug-in „%{name}“" broken_transformer_alert: "Es ist ein Fehler aufgetreten. Deine Website funktioniert möglicherweise nicht richtig." + broken_block_alert: "Es wurde ein Fehler in der Blockkonfiguration festgestellt. Überprüfe die Browserkonsole für Details." + broken_block_factory_alert: "Ein Block konnte nicht geladen werden. Einige UI-Elemente werden möglicherweise nicht richtig angezeigt." critical_deprecation: notice: "[Admin-Hinweis] %{source} enthält Code, der aktualisiert werden muss. (ID:%{id})" learn_more_link: "(mehr erfahren)" theme_source: "Theme '%{name}'" plugin_source: "Plug-in '%{name}'" unknown_source: "Eines deiner Themes oder Plug-ins" + dev_tools: + drag_to_move: "Ziehe zum Verschieben" + toggle_plugin_outlet_debug: "Debugging des Plug-in-Outlets umschalten" + toggle_block_debug: "Block-Debugging umschalten" + block_debug: + outlet_boundaries: "Outlet-Grenzen" + visual_overlay: "Visuelles Overlay" + ghost_blocks: "Geisterblöcke" + condition_debugging: "Debugging der Bedingungen" + toggle_safe_mode: "Abgesicherten Modus umschalten" + toggle_verbose_localization: "Erweiterte Lokalisierungshinweise umschalten" + toggle_mobile_view: "Mobile Ansicht umschalten" + disable_dev_tools: "Entwicklertools deaktivieren" s3: regions: ap_northeast_1: "Asien-Pazifik (Tokio)" @@ -417,20 +449,37 @@ de: pill: "Empfohlen" pm_title: "Vorgeschlagene Nachrichten" admin_onboarding_banner: + launch_in_easy_steps: "Starte in %{step_count} einfachen Schritten" + congrats_onboarding_complete: "Herzlichen Glückwunsch zum Abschluss des Onboarding-Prozesses!" + invite_collaborators: + title: "Mitwirkende einladen" + description: "Die ersten Mitglieder tragen dazu bei, deine Community zum Leben zu erwecken" + action: "Einladung erstellen" start_posting: + title: "Beginne mit dem Erstellen von Beiträgen" description: "Gib den Leuten etwas, worüber sie gemeinsam reden können" + action: "Ideen ansehen" + choose_option: "Wie möchtest du anfangen?" + predefined_topics: "Vorlagen für Fragen zum Einstieg" + predefined_topics_subtitle: "Gib neuen Mitgliedern etwas, worüber sie reden können. Wähle eine Vorlage zum Bearbeiten und gestalte sie nach deinen Vorstellungen." + predefined_topics_description: "Wähle aus einer Sammlung von Gesprächsanregungen, um Diskussionen in Gang zu bringen" + use_predefined: "Vorlagen ansehen" + back: "Zurück" icebreakers: fun_facts: title: "Was sind ein paar interessante Fakten über dich?" body: "Hallo zusammen! Ich freue mich, diese neue Community hier zu starten. Zum Auftakt lasst uns doch eine interessante Kleinigkeit über uns teilen. Ich mache den Anfang: Ich liebe es, zu wandern und neue Wege zu erkunden! Was ist eine interessante Kleinigkeit über dich?" coolest_thing_you_have_seen_today: title: "Was ist das Coolste, das du heute gesehen hast?" + body: "Was war das Coolste, das du heute gesehen oder erlebt hast? Das kann alles sein, von einem wunderschönen Sonnenuntergang bis hin zu einer netten Geste. Ich fange mal an: Ich habe einen Hund gesehen, der einer älteren Person beim Überqueren der Straße geholfen hat!" introduce_yourself: title: "Stell dich vor" + body: "Willkommen in der Community! Lasst uns einander kennenlernen. Bitte stelle dich vor und erzähle ein wenig über deine Interessen. Ich fange an: Ich habe eine Leidenschaft für Technik und liebe es, mein Wissen weiterzugeben!" what_is_your_favorite_food: title: "Was ist dein Lieblingsessen?" body: "Teile dein Lieblingsessen mit der Community! Ich fange an: Ich liebe Pizza, besonders mit extra viel Käse und Peperoni." spread_the_word: + title: "Mach deine Community bekannt!" description: "Teile einen Link mit deinem Netzwerk" action: "Link kopieren" copied_to_clipboard: "Link in die Zwischenablage kopiert!" @@ -515,8 +564,10 @@ de: other: "Vor %{count} Jahren erstellt" bookmarked: title: "Lesezeichen setzen" - edit_bookmark: "Lesezeichen bearbeiten" - clear_bookmarks: "Lesezeichen entfernen" + edit_bookmark: + one: "Lesezeichen bearbeiten" + other: "Lesezeichen bearbeiten" + delete_bookmarks: "Alle Lesezeichen löschen" help: bookmark: "Klicke, um dieses Thema mit einem Lesezeichen zu markieren" edit_bookmark: "Klicke, um das Lesezeichen für einen Beitrag in diesem Thema zu bearbeiten" @@ -535,6 +586,10 @@ de: clear_reminder: "Erinnerung löschen" edit: "Lesezeichen bearbeiten" not_bookmarked: "diesen Beitrag mit Lesezeichen versehen" + topic_bookmark: "Thema" + bookmark_topic: "Thema mit Lesezeichen versehen" + edit_topic_bookmark: "Lesezeichen am Thema bearbeiten" + delete_topic_bookmark: "Lesezeichen am Thema löschen" remove_reminder_keep_bookmark: "Erinnerung entfernen und Lesezeichen behalten" created_with_reminder: "Du wirst %{date} an dieses Lesezeichen erinnert. %{name}" created_with_reminder_generic: "Du wirst am %{date} an dieses Lesezeichen erinnert. %{name}" @@ -608,6 +663,11 @@ de: other_drafts: one: "+%{count} anderer Entwurf" other: "+%{count} andere Entwürfe" + embed_mode: + storage_access_prompt: "Hast du bereits ein Konto bei %{site_name}? Erlaube den Zugriff auf deine Sitzung, um als angemeldeter Benutzer zu kommentieren." + allow_access: "Zugriff erlauben" + continue_as_guest: "Als Gast fortfahren" + be_first_to_reply: "Schreib die erste Antwort!" topic_count_all: one: "Zeige %{count} neues Thema" other: "Zeige %{count} neue Themen" @@ -667,24 +727,25 @@ de: show_more: "Mehr anzeigen" show_less: "Weniger anzeigen" back_to_queue: "Zurück zur Warteschlange" + editing_post: "Beitrag wird bearbeitet …" order_by: "Sortieren nach" date_filter: "Gepostet zwischen" in_reply_to: "Antwort auf" filtered_flagged_by: "Gemeldet von" unknown: title: - one: "Du hast ausstehende Überprüfungen von einem deaktivierten Plug-in:" - other: "Du hast ausstehende Überprüfungen von deaktivierten Plug-ins:" + one: "Du hast ausstehende Elemente in der Warteschlange zur Überprüfung von einem deaktivierten Plug-in:" + other: "Du hast ausstehende Elemente in der Warteschlange zur Überprüfung von diesen deaktivierten Plug-ins:" instruction: "Sie können erst dann richtig angezeigt werden, wenn du das entsprechende Plug-in aktivierst. Bitte aktiviere das Plug-in und aktualisiere die Seite. Alternativ kannst du sie auch ignorieren. Mehr erfahren …" reviewable_unknown_source: "%{reviewableType} (unbekanntes Plug-in)" reviewable_known_source: "%{reviewableType} (von dem Plug-in '%{pluginName}')" ignore_all: "Alle ignorieren" enable_plugins: "Plug-ins aktivieren" - delete_confirm: "Bist du sicher, dass du alle Bewertungen löschen willst, die von deaktivierten Plug-ins erstellt wurden?" - ignore_success: "Alle Bewertungen, die von deaktivierten Plug-ins erstellt wurden, wurden gelöscht." + delete_confirm: "Bist du sicher, dass du alle Elemente aus der Warteschlange zur Überprüfung löschen willst, die von deaktivierten Plug-ins erstellt wurden?" + ignore_success: "Alle Elemente in der Warteschlange zur Überprüfung, die von deaktivierten Plug-ins erstellt wurden, wurden gelöscht." explain: why: "erkläre, warum dieses Element in der Warteschlange gelandet ist" - title: "Überprüfbares Scoring" + title: "Scoring für das zu überprüfende Element" formula: "Formel" subtotal: "Zwischensumme" total: "Gesamt" @@ -698,10 +759,10 @@ de: title: "Benutzer, deren Meldungen in der Vergangenheit zugestimmt wurde, erhalten einen Bonus." trust_level_bonus: name: "Vertrauensstufe" - title: "Überprüfbare Elemente, die von Benutzern höherer Vertrauensstufen angelegt wurden, haben einen höheren Score." + title: "Meldungen, die von Benutzern höherer Vertrauensstufen erstellt wurden, haben einen höheren Score." type_bonus: name: "Bonustyp" - title: "Bestimmte überprüfbare Typen können vom Team mit einem Bonus ausgestattet werden, damit sie höher priorisiert sind." + title: "Bestimmte Meldungs-Typen können vom Team mit einem Bonus ausgestattet werden, damit sie höher priorisiert sind." revise_and_reject_post: title: "Überarbeiten" reason: "Grund" @@ -710,7 +771,7 @@ de: custom_reason: "Gib eine klare Beschreibung des Grundes an" other_reason: "Sonstiges …" optional: "optional" - stale_help: "Diese Überprüfung wurde von %{username} gelöst." + stale_help: "Dieses Element wurde durch %{username} gelöst." claim_help: optional: "Du kannst dieses Element reservieren, damit andere es nicht überprüfen." required: "Du musst Elemente reservieren, bevor du sie überprüfen kannst." @@ -718,9 +779,9 @@ de: claimed_by_other: "Dieses Element kann nur von %{username} überprüft werden." automatically_claimed_by: "Dieses Element wird derzeit von %{username} überprüft." claim: - title: "Dieses Thema reservieren" + title: "Dieses Thema übernehmen" unclaim: - help: "Diese Reservierung entfernen" + help: "Diese Übernahme entfernen" awaiting_approval: "Wartet auf Genehmigung" delete: "Löschen" settings: @@ -733,7 +794,7 @@ de: view_all: "Alle anzeigen" grouped_by_topic: "Gruppiert nach Thema" none: "Es sind keine Elemente zur Überprüfung vorhanden." - view_pending: "zeige verbleibende" + view_pending: "zeige Ausstehende" topic_has_pending: one: "Dieses Thema hat %{count} Beitrag, der auf Genehmigung wartet." other: "Dieses Thema hat %{count} Beiträge, die auf Genehmigung warten." @@ -885,10 +946,10 @@ de: title: "Beitrag" noun: "Beitrag" reviewable_ai_chat_message: - title: "von KI gemeldete Chatnachricht" + title: "KI-gemeldete Chat-Nachricht" noun: "Chat-Nachricht" reviewable_ai_post: - title: "von KI gemeldeter Beitrag" + title: "KI-gemeldeter Beitrag" noun: "Beitrag" reviewable_post_voting_comment: title: "Gemeldeter Kommentar" @@ -911,12 +972,12 @@ de: flagged_as_by: "Gemeldet als %{flagReason} von %{username} · %{relativeDate}" claimed: "Übernommen" claimed_by: "Übernommen von %{username} · %{relativeDate}" - unclaimed_by: "Abgegeben von %{username} · %{relativeDate}" + unclaimed_by: "Übernahme entfernt von %{username} · %{relativeDate}" reviewed: "Überprüft" approved_by: "Genehmigt von %{username} · %{relativeDate}" rejected_by: "Abgelehnt von %{username} · %{relativeDate}" ignored_by: "Ignoriert von %{username} · %{relativeDate}" - view_conversation: "PM anzeigen" + view_conversation: "PN anzeigen" note_added: "Moderator-Notiz" note_added_by: "Moderator-Notiz von %{username} · %{relativeDate}" no_events: "Keine Zeitleistenereignisse zum Anzeigen" @@ -972,8 +1033,8 @@ de: title: "Beitrag muss genehmigt werden" description: "Wir haben deinen neuen Beitrag erhalten. Dieser muss jedoch von einem Moderator genehmigt werden, bevor er angezeigt wird. Bitte habe etwas Geduld." pending_posts: - one: "Du hast %{count} verbleibenden Beitrag." - other: "Du hast %{count} verbleibende Beiträge." + one: "Du hast %{count} ausstehenden Beitrag." + other: "Du hast %{count} ausstehende Beiträge." ok: "OK" example_username: "Benutzername" reject_reason: @@ -1086,6 +1147,7 @@ de: add_members: title: "Benutzer zu %{group_name} hinzufügen" description: "Gib eine Liste von Benutzern ein, die du in die Gruppe einladen möchtest, oder füge eine kommagetrennte Liste ein:" + description_usernames_only: "Gib eine Liste von Benutzernamen ein, die du zu der Gruppe hinzufügen möchtest, oder füge eine kommagetrennte Liste ein:" usernames_placeholder: "Benutzernamen" usernames_or_emails_placeholder: "Benutzernamen oder E-Mail-Adressen" notify_users: "Benutzer benachrichtigen" @@ -1557,6 +1619,7 @@ de: enable_smart_lists: "Aktiviere intelligente Listen beim Schreiben im Composer" enable_defer: "„Themen als ungelesen markieren“ aktivieren" enable_markdown_monospace_font: "Monospace-Schriftart im Markdown-Modus des Editors verwenden" + show_original_content: "Zeige den Originalinhalt anstelle der übersetzten Inhalte. Die Einstellung kann auch innerhalb von Themen verändert werden." experimental_sidebar: enable: "Seitenleiste aktivieren" options: "Optionen" @@ -1756,6 +1819,23 @@ de: apps: "Apps" navigation_menu: "Navigationsmenü" upcoming_changes: "Bevorstehende Änderungen" + calendar_subscriptions: "Kalender" + calendar_subscriptions: + description: "Generiere Abonnement-URLs für die Synchronisierung mit deiner bevorzugten Kalender-App (Google Calendar, Apple Calendar, Outlook, etc.). Bei diesen URLs handelt es sich um private Links zu Kalenderereignissen für dein Konto (Lesezeichen-Erinnerungen, Kalenderereignisse, etc.). Du kannst die generierten Abonnement-URLs jederzeit widerrufen oder erneuern." + generate: "Abonnement-URLs generieren" + regenerate: "URLs neu generieren" + regenerate_confirm: "Dadurch werden deine bestehenden Kalender-Abonnement-URLs ungültig. Alle Kalender-Apps, die die alten URLs verwenden, werden keine Updates mehr erhalten. Fortfahren?" + revoke: "Abonnement widerrufen" + revoke_confirm: "Dadurch werden deine Kalender-Abonnement-URLs widerrufen. Alle Kalender-Apps, die diese URLs verwenden, erhalten keine Updates mehr. Fortfahren?" + urls_warning: "Die Abonnement-URLs sind fertig! Klicke auf die Schaltflächen unten, um sie mit deiner Kalender-App zu verknüpfen. Hinweis: Diese URLs werden nur einmal angezeigt." + bookmarks: "Lesezeichen-Erinnerungen" + bookmarks_description: "Deine Lesezeichen mit Erinnerungsterminen" + copy: "URL kopieren" + copied: "Kopiert!" + add_to_google: "Google Kalender" + add_to_outlook: "Microsoft Outlook" + add_to_apple: "Apple-Kalender" + active_subscription: "Du hast ein aktives Kalender-Abonnement." change_password: success: "(E-Mail gesendet)" in_progress: "(E-Mail wird gesendet)" @@ -2035,7 +2115,7 @@ de: first_time_and_daily: "Für das erste „Gefällt mir“ sowie maximal täglich" first_time: "Nur für das erste „Gefällt mir“ eines Beitrags" never: "Nie" - notify_on_linked_posts: "Benachrichtige mich, wenn jemand einen Link zu einem meiner Beiträge teilt" + notify_on_linked_posts: "Mich benachrichtigen, wenn jemand einen Link zu einem meiner Beiträge teilt" email_previous_replies: title: "Füge vorherige Beiträge ans Ende von E-Mails an" unless_emailed: "sofern noch nicht gesendet" @@ -2095,7 +2175,7 @@ de: redeemed_tab_with_count: "Angenommen (%{count})" invited_via: "Einladung" invited_via_link: "Link %{key} (%{count}/%{max} angenommen)" - generating_link: "Link wird generiert..." + generating_link: "Link wird generiert …" groups: "Gruppen" topic: "Thema" sent: "Erstellt/Zuletzt gesendet" @@ -2366,6 +2446,7 @@ de: form_kit: reset: Zurücksetzen optional: optional + required: erforderlich errors_summary_title: one: "Behebe diesen Fehler, um fortzufahren" other: "Behebe diese Fehler, um fortzufahren" @@ -2713,7 +2794,7 @@ de: topic_count: one: "%{count} Thema in dieser Kategorie" other: "%{count} Themen in dieser Kategorie" - read_only: "nur Lesen" + read_only: "schreibgeschützt" read_only_description: "Du hast in dieser Kategorie nur Leserechte, daher kannst du sie nicht auswählen." timezone_input: ambiguous_ist: "IST ist zweideutig, bitte wähle eine bestimmte Zeitzone (z. B. Asien/Kolkata)" @@ -2739,6 +2820,10 @@ de: filter_for_more: Filtern nach mehr … categories_admin_dropdown: title: "Kategorien verwalten" + tag_category_admin_dropdown: + title: "Kategorie- und Schlagworteinstellungen" + edit_category: "Kategorie bearbeiten" + edit_tag: "Schlagwort bearbeiten" bulk_select_topics_dropdown: title: "Massenoperationen" bulk_select_bookmarks_dropdown: @@ -2769,6 +2854,10 @@ de: medium_dark_tone: Mittel-dunkle Hautfarbe dark_tone: Dunkle Hautfarbe default: Benutzerdefinierte Emojis + filter_input: + clear: "Filter löschen" + d_icon_grid_picker: + select_icon: "Symbol auswählen" shared_drafts: title: "Gemeinsame Entwürfe" notice: "Dieses Thema ist nur für diejenigen sichtbar, die gemeinsame Entwürfe veröffentlichen können." @@ -2803,8 +2892,8 @@ de: original_content: "Original-Beitrag" translation_preview: "Übersetzungsvorschau" original: "Original" - translation: "Übersetzen" - no_translation_yet: "Fang an zu tippen, um eine Vorschau der Übersetzung zu sehen..." + translation: "Übersetzung" + no_translation_yet: "Fang an zu tippen, um eine Vorschau der Übersetzung zu sehen …" placeholder: "Übersetzung für den Beitrag hier eingeben …" show_raw_markdown: "Rohversion anzeigen" group_mentioned_limit: @@ -2916,6 +3005,7 @@ de: upload_description: "gib hier eine Beschreibung des Uploads ein" olist_title: "Nummerierte Liste" ulist_title: "Liste mit Aufzählungszeichen" + list_title: "Listen" list_item: "Listenelement" toggle_direction: "Schreibrichtung wechseln" apply_wrap_title: "Wrap anwenden" @@ -2933,12 +3023,13 @@ de: collapse: "Editor minimieren" open: "Editor öffnen" abandon: "Editor schließen und Entwurf verwerfen" + edit_reason: "Füge den Bearbeitungsgrund hinzu" enter_fullscreen: "Vollbild-Editor öffnen" exit_fullscreen: "Vollbild-Editor verlassen" exit_fullscreen_prompt: "Drücke ESC, um den Vollbildmodus zu verlassen" show_toolbar: "Editor-Werkzeugleiste anzeigen" hide_toolbar: "Editor-Werkzeugleiste ausblenden" - peek_mode_toggle: "Editior-Position umschalten" + peek_mode_toggle: "Editor-Position umschalten" modal_ok: "OK" cant_send_pm: "Entschuldige, aber du kannst keine Nachricht an %{username} senden." create_message_error: "Entschuldige, es gab einen Fehler beim Erstellen der Nachricht. Bitte versuche es noch einmal." @@ -3087,9 +3178,13 @@ de: available: title: "Bevorstehende Änderungen" description: "'%{changeName}' ist zur Vorschau verfügbar" + description_two: "'%{changeName1}' und '%{changeName2}' sind zur Vorschau verfügbar" + description_many: "'%{changeName}' und %{otherChangeCount} weitere Änderungen sind zur Vorschau verfügbar" automatically_promoted: title: "Bevorstehende Änderungen" description: "'%{changeName}' wurde automatisch aktiviert" + description_two: "'%{changeName1}' und '%{changeName2}' wurden automatisch aktiviert" + description_many: "'%{changeName}' und %{otherChangeCount} weitere Änderungen wurden automatisch aktiviert" dismiss_confirmation: body: default: @@ -3148,8 +3243,8 @@ de: votes_released: "Abstimmung wurde freigegeben" new_features: "neue Discourse-Funktionen wurden veröffentlicht" admin_problems: "neue Ratschläge auf deinem Website-Dashboard" - upcoming_change_available: "neue bevorstehende Änderung '%{changeName}' ist verfügbar" - upcoming_change_automatically_promoted: "bevorstehende Änderung '%{changeName}' wurde automatisch aktiviert" + upcoming_change_available: "neue bevorstehende Änderungen sind verfügbar" + upcoming_change_automatically_promoted: "bevorstehende Änderungen wurden automatisch aktiviert" upload_selector: change: "Ändern" delete: "Löschen" @@ -3286,8 +3381,6 @@ de: max_views: placeholder: Maximum aria_label: nach maximaler Anzahl von Aufrufen filtern - additional_options: - label: "Nach Beitragsanzahl und Themenaufrufen filtern" hamburger_menu: "Navigationsmenü" new_item: "neu" go_back: "zurückgehen" @@ -3352,8 +3445,8 @@ de: confirm: "Bestätigen" select_all: "Alle auswählen" clear_all: "Auswahl aufheben" - unlist_topics: "Themen unsichtbar machen" - relist_topics: "Themen neu auflisten" + unlist_topics: "Themen aus der Liste entfernen" + relist_topics: "Themen wieder auflisten" reset_bump_dates: "„Nach oben verschieben“-Zeitangaben zurücksetzen" defer: "Als ungelesen markieren" delete: "Themen löschen" @@ -3395,17 +3488,14 @@ de: other: "Neue Themen ignorieren (%{count})" toggle: "Massenauswahl von Themen umschalten" actions: "Massenoperationen" - change_category: "Kategorie festlegen …" + change_category: "Kategorie aktualisieren" close_topics: "Themen schließen" archive_topics: "Themen archivieren" move_messages_to_inbox: "In Posteingang verschieben" archive_messages: "Ins Archiv verschieben" - notification_level: "Benachrichtigungen …" + notification_level: "Benachrichtigungsstufe aktualisieren" change_notification_level: "Benachrichtigungsstufe ändern" choose_new_category: "Neue Kategorie für die gewählten Themen:" - selected: - one: "Du hast %{count} Thema ausgewählt." - other: "Du hast %{count} Themen ausgewählt." selected_sole_category: one: "Du hast %{count} Thema aus der Kategorie ausgewählt:" other: "Du hast %{count} Themen aus der Kategorie ausgewählt:" @@ -3415,16 +3505,40 @@ de: change_tags: "Schlagwörter ersetzen" append_tags: "Schlagwörter hinzufügen" choose_new_tags: "Neue Schlagwörter für diese Themen wählen:" - choose_append_tags: "Wähle neue Schlagwörter, die diesen Themen hinzugefügt werden sollen:" + choose_append_tags: "Schlagwörter hinzufügen" changed_tags: "Die Schlagwörter dieser Themen wurden geändert." - remove_tags: "Alle Schlagwörter entfernen" + remove_tags: "Schlagwörter entfernen" confirm_remove_tags: one: "Alle Schlagwörter werden aus diesem Thema entfernt. Bist du sicher?" other: "Alle Schlagwörter werden aus %{count} Themen entfernt. Bist du sicher?" + confirm_update_topics: + one: "%{count} Thema aktualisieren" + other: "%{count} Themen aktualisieren" + confirm_close_topics: + one: "%{count} Thema schließen" + other: "%{count} Themen schließen" + confirm_archive_topics: + one: "%{count} Thema archivieren" + other: "%{count} Themen archivieren" + confirm_unlist_topics: + one: "%{count} Thema aus der Liste entfernen" + other: "%{count} Themen aus der Liste entfernen" + confirm_relist_topics: + one: "%{count} Thema erneut auflisten" + other: "%{count} Themen erneut auflisten" + confirm_archive_messages: + one: "%{count} Nachricht archivieren" + other: "%{count} Nachrichten archivieren" + confirm_move_to_inbox: + one: "%{count} Nachricht in den Posteingang verschieben" + other: "%{count} Nachrichten in den Posteingang verschieben" + confirm_delete_topics: + one: "%{count} Thema löschen" + other: "%{count} Themen löschen" progress: one: "Fortschritt: %{count} Thema" other: "Fortschritt: %{count} Themen" - notify: "Informiere die Benutzer über diese Änderung." + notify: "Informiere die Benutzer über diese Änderung" performing: "Massenoperationen werden durchgeführt, bitte warten …" completed: "Massenoperationen erfolgreich abgeschlossen!" completed_count: @@ -3456,13 +3570,14 @@ de: unread: "Nichts ungelesen … beeindruckend!" new_new: "Im Moment gibt es nichts Neues … Schau bald wieder vorbei!" new: "Im Moment gibt es nichts Neues … Schau bald wieder vorbei!" - generic: "Hier gibt es nichts zu sehen... Schau bald wieder vorbei!" + generic: "Hier gibt es nichts zu sehen … Schau bald wieder vorbei!" topic_bulk_actions: dismiss: name: "Verwerfen" close_topics: name: "Schließen" - note: "Hinweis" + description: "Geschlossene Themen verhindern neue Antworten. Mehr erfahren" + note: "Füge eine Nachricht zu diesen Themen hinzu" optional: (optional) archive_topics: name: "Archivieren" @@ -3472,34 +3587,38 @@ de: name: "In Posteingang verschieben" unlist_topics: name: "Unsichtbar machen" + description: "Nicht gelistete Themen sind in der Themenliste nicht sichtbar aber der Zugriff ist immer noch über einem direkten Link möglich. Mehr erfahren" relist_topics: name: "Wieder sichtbar machen" remove_tags: name: "Schlagwörter entfernen" + description: "Entferne alle Schlagwörter von den ausgewählten Themen." append_tags: name: "Schlagwörter hinzufügen" + description: "Füge die folgenden Schlagwörter zu den ausgewählten Themen hinzu:" replace_tags: name: "Schlagwörter ersetzen" + description: "Ersetze alle vorhandenen Schlagwörter der ausgewählten Themen durch die folgenden:" delete_topics: name: "Löschen" + description: "Lösche die ausgewählten Themen endgültig. Diese Aktion kann nicht rückgängig gemacht werden." update_category: name: "Kategorie aktualisieren" - description: "Wähle die neue Kategorie für die ausgewählten Themen" + description: "Verschiebe alle ausgewählten Themen in die folgende Kategorie:" reset_bump_dates: name: "„Nach oben verschieben“-Daten zurücksetzen" - description: "Setzt das „Nach oben verschieben“-Datum auf das vom zuletzt erstellten Beitrag zurück, was die Reihenfolge in der Themenliste beeinflusst" + description: "Möchtest du das „Nach oben verschieben“-Datum auf das vom zuletzt erstellten Beitrag setzen? Das kann die Reihenfolge in der Themenliste beeinflussen." defer: name: "Als ungelesen markieren" - description: "Themen als ungelesen markieren" update_notifications: name: "Benachrichtigungsstufe aktualisieren" - description: "Ändere die Benachrichtigungsstufe auf „Beobachten“, „Verfolgen“, „Normal“ oder „Stumm“" + description: "Ändere deine persönliche Benachrichtigungsstufe für die ausgewählten Themen auf:" topic: filter_to: one: "%{count} Beitrag im Thema" other: "%{count} Beiträge im Thema" create: "Neues Thema" - create_long: "Erstelle ein neues Thema" + create_long: "Neues Thema erstellen" create_group: "Neues Thema und Entwürfe" open_draft: "Entwurf öffnen" private_message: "Eine Unterhaltung beginnen" @@ -3669,6 +3788,9 @@ de: auto_close_immediate: one: "Der letzte Beitrag in diesem Thema ist bereits %{count} Stunde alt. Das Thema wird daher sofort geschlossen." other: "Der letzte Beitrag in diesem Thema ist bereits %{count} Stunden alt. Das Thema wird daher sofort geschlossen." + auto_delete_immediate: + one: "Der letzte Beitrag in diesem Thema ist bereits %{count} Stunde alt. Das Thema wird daher sofort gelöscht." + other: "Der letzte Beitrag in diesem Thema ist bereits %{count} Stunden alt. Das Thema wird daher sofort gelöscht." timeline: back: "Zurück" back_description: "Gehe zurück zum letzten ungelesenen Beitrag" @@ -3939,7 +4061,7 @@ de: deleted_by_author_simple: "(Thema vom Verfasser gelöscht)" localizations: title_edit_warning: - message: "Dies ist ein übersetzter Thementitel.

Willst du die ursprüngliche Kategorie, die Schlagwörter und den Titel in %{language} oder diese spezielle Übersetzung bearbeiten?" + message: "Dies ist ein übersetzter Thementitel.

Willst du die ursprüngliche Kategorie, die Schlagwörter und den Titel auf %{language} oder diese spezielle Übersetzung bearbeiten?" action_original: "Original bearbeiten" action_translation: "Übersetzten Thementitel bearbeiten" editing_translation: "Übersetzung nach %{language} bearbeiten" @@ -3984,8 +4106,8 @@ de: load_more_posts_below: "Darunter weitere Beiträge laden" sr_collapse_replies: "Eingebettete Antworten einklappen" sr_load_more_replies: "Weitere eingebettete Antworten laden" - loading_more_posts_above: "Weitere Beiträge werden darüber geladen..." - loading_more_posts_below: "Weitere Beiträge werden darunter geladen..." + loading_more_posts_above: "Weitere Beiträge werden darüber geladen …" + loading_more_posts_below: "Weitere Beiträge werden darunter geladen …" loading_complete: "Laden abgeschlossen" sr_date: "Beitragsdatum" sr_expand_replies: @@ -4041,7 +4163,9 @@ de: edit: "Bearbeiten" delete: "Löschen" add: "Neue Übersetzung hinzufügen" - manage: "Übersetzungen verwalten (%{count} vorhanden)" + manage: + one: "Übersetzungen verwalten (%{count} vorhanden)" + other: "Übersetzungen verwalten (%{count} vorhanden)" view: one: "%{count} übersetzte Sprachvariante anzeigen" other: "%{count} übersetzte Sprachvarianten anzeigen" @@ -4179,6 +4303,7 @@ de: one: "Möchtest du diese Beiträge wirklich zusammenführen?" other: "Möchtest du diese %{count} Beiträge wirklich zusammenführen?" revisions: + diff_too_complex: "Die Unterschiede sind zu komplex, um sie anzuzeigen. Bitte versuche einzelne, kleinere Änderungen anzusehen." locale: no_locale_set: "Keine Sprache eingestellt" locale_removed: "Sprache entfernt" @@ -4254,6 +4379,7 @@ de: instructions: "Link zu diesem Beitrag teilen:" original_language: "Dieser Beitrag wurde ursprünglich auf %{language} geschrieben" original_language_and_outdated: "Dieser Beitrag wurde ursprünglich auf %{language} geschrieben. Die Übersetzung ist möglicherweise veraltet" + ai_translation_disclaimer: "KI-generierte Übersetzungen können ungenau sein." category: none: "(keine Kategorie)" all: "Alle Kategorien" @@ -4268,9 +4394,13 @@ de: advanced: "Erweitert " show_advanced: "Erweiterte Einstellungen" topic_template: "Vorlage" + topic_title_placeholder: "Platzhaltertitel dieser Kategorie" + topic_title_placeholder_placeholder: "[optional] benutzerdefinierter Platzhalter für Thementitel in dieser Kategorie" tags: "Schlagwörter" localizations: "Lokalisierungen" localization: + language: "Sprache der Kategorie" + language_description: "Die Hauptsprache für den Namen und die Beschreibung dieser Kategorie." locale: "Sprachvariante" name: "Name" description: "Beschreibung" @@ -4291,11 +4421,24 @@ de: delete: "Löschen" add: "Erforderliche Schlagwortgruppe hinzufügen" placeholder: "Schlagwortgruppe auswählen …" + min_count: "Anzahl der Schlagwörter" + tag_group: "Schlagwortgruppe" topic_featured_link_allowed: "Erlaube hervorgehobene Links in dieser Kategorie" delete: "Kategorie löschen" create: "Neue Kategorie" + create_with_type: "Neue Kategorie des Typs „%{typeName}“" create_long: "Eine neue Kategorie erstellen" + settings_apply_to_all_of_type_warning: "Die nachfolgenden Änderungen gelten für alle Kategorien dieser Art" + type_settings_schema: + category_settings: "Kategorie-Einstellungen" + category_custom_fields: "Kategorie-Einstellungen" + site_settings: "Website-Einstellungen" + choose_type: + title: "Kategorietyp wählen" + requires_plugin: "Erfordert ein Plug-in" + create_category: "Kategorie erstellen" save: "Kategorie speichern" + unsaved_changes: "Du hast ungespeicherte Änderungen" slug: "Sprechender Name für URL der Kategorie" parent: "Übergeordnete Kategorie" slug_placeholder: "(Optional) durch Bindestrich getrennte Wörter für URL" @@ -4342,6 +4485,9 @@ de: list: "Kategorien auflisten" no_description: "Bitte füge eine Beschreibung für diese Kategorie hinzu." change_in_category_topic: "Beschreibung bearbeiten" + description_updated: "Beschreibung aktualisiert" + description_expand: "Mehr anzeigen" + description_collapse: "Weniger anzeigen" already_used: "Diese Farbe wird bereits für eine andere Kategorie verwendet." color_palette: "Farbpalette" security: "Sicherheit" @@ -4352,11 +4498,14 @@ de: reply: "Antworten" create: "Erstellen" no_groups_selected: "Es wurde keinen Gruppen Zugriff gewährt. Diese Kategorie ist nur für das Team sichtbar." + everyone_full_access: 'Diese Kategorie ist öffentlich, jeder kann Beiträge sehen, beantworten und erstellen. Entferne eine oder mehrere der Berechtigungen, die der Gruppe „%{everyone_group}“ erteilt wurden, um die Berechtigungen einzuschränken.' + everyone_reply_access: 'Diese Kategorie ist öffentlich, jeder kann Beiträge sehen und auf Themen antworten. Entferne die Gruppe „%{everyone_group}“, um die Berechtigungen einzuschränken.' + everyone_see_access: 'Diese Kategorie ist öffentlich, jeder kann die Beiträge sehen. Entferne die Gruppe „%{everyone_group}“, um die Berechtigungen einzuschränken.' specific_groups_have_access: "Diese Kategorie ist privat. Nur die ausgewählten Gruppen können Beiträge sehen, beantworten und erstellen." all_parent_groups_used: "Alle Gruppen aus der übergeordneten Kategorie sind hinzugefügt worden. Um weitere Gruppen hinzuzufügen, füge sie zuerst der übergeordneten Kategorie hinzu." toggle_reply: "Antwortberechtigung umschalten" toggle_full: "Erstellungsberechtigung umschalten" - inherited: 'Diese Berechtigung wird von %{everyone_group} geerbt' + inherited: 'Diese Berechtigung wird von „%{everyone_group}“ geerbt' special_warning: "Diese Kategorie wurde bei der Installation angelegt. Die Sicherheitseinstellungen können daher nicht verändert werden. Wenn du diese Kategorie nicht benötigst, dann solltest du sie löschen, anstatt sie für andere Zwecke zu verwenden." uncategorized_security_warning: "Diese Kategorie ist etwas Spezielles. Sie dient als Bereich für Themen, die keine Kategorie haben und besitzt keine Sicherheitseinstellungen." uncategorized_general_warning: 'Diese Kategorie ist etwas Spezielles. Sie wird als Standard-Kategorie für neue Themen genutzt, für die keine Kategorie ausgewählt wurde. Deaktiviere diese Einstellung, wenn dieses Verhalten verhindert und eine Kategoriewahl erzwungen werden soll. Der Name und die Beschreibung können unter Anpassen/Textinhalte geändert werden.' @@ -4384,13 +4533,17 @@ de: review_group_name: "Gruppenname" require_topic_approval: "Erfordere Moderator-Genehmigung für alle neuen Themen" require_reply_approval: "Erfordere Moderator-Genehmigung für alle neuen Antworten" + posting_review_modes: + no_one: "Keinen" + everyone: "Jeden" + posting_review_groups_placeholder: "Gruppen auswählen …" this_year: "dieses Jahr" position: "Position auf der Kategorien-Seite:" default_position: "Standardposition" position_disabled: "Die Kategorien werden in der Reihenfolge ihrer Aktivität angezeigt. Um die Reihenfolge der Kategorien in den Listen zu kontrollieren, aktiviere die Einstellung „fixed category positions“." minimum_required_tags: "Mindestanzahl an Schlagwörtern, die ein Thema erfordert" default_slow_mode: '„Langsamer Modus“ für neue Themen in dieser Kategorie aktivieren.' - subcategory_of: "Unterkategorie von..." + subcategory_of: "Unterkategorie von …" none_subcategory_text: "Keiner" subcategory_permissions_warning: "Eine Unterkategorie einer privaten Kategorie kann nicht öffentlich sein." visibility: @@ -4914,13 +5067,19 @@ de: category_restricted: "Dieses Schlagwort ist auf Kategorien beschränkt, für die du keine Zugriffsberechtigung hast." synonyms: "Synonyme" synonyms_description: "Wenn die folgenden Schlagwörter verwendet werden, werden sie durch %{base_tag_name} ersetzt." + synonyms_inline: "Diese Synonyme werden durch %{base_tag_name} ersetzt:" save: "Name und Beschreibung des Schlagwortes speichern" tag_groups_info: one: 'Dieses Schlagwort gehört zur Gruppe „%{tag_groups}“.' other: "Dieses Schlagwort gehört zu diesen Gruppen: %{tag_groups}" + tag_groups_info_prefix: + one: "Dieses Schlagwort gehört zur Gruppe: " + other: "Dieses Schlagwort gehört zu diesen Gruppen: " category_restrictions: one: "Es kann nur in dieser Kategorie verwendet werden:" other: "Es kann nur in folgenden Kategorien verwendet werden:" + restricted_to: "Beschränkt auf" + no_synonyms: "Dieses Schlagwort hat keine Synonyme." edit_synonyms: "Synonyme bearbeiten" add_synonyms_label: "Synonyme hinzufügen:" add_synonyms: "Hinzufügen" @@ -4940,7 +5099,34 @@ de: other: "Es werden %{count} weitere Synonyme ebenfalls gelöscht." edit_tag: "Name und Beschreibung des Schlagwortes bearbeiten" edit: "Dieses Schlagwort bearbeiten" - description: "Beschreibung (max. 1000 Zeichen)" + description: "Beschreibung" + settings: + title: "Einstellungen" + edit_title: "Schlagwort bearbeiten: %{name}" + edit_tag_prefix: "Schlagwort bearbeiten:" + select_tag: "Schlagwort zum Bearbeiten auswählen" + general: "Allgemein" + localizations: "Lokalisierungen" + back: "Zurück" + name: "Name" + slug: "Sprechender Name für URL" + name_placeholder: "Name des Schlagworts" + slug_placeholder: "Sprechender Name des Schlagwortes (optional, wird automatisch aus dem Namen generiert)" + saved: "Schlagwort-Einstellungen gespeichert" + no_synonyms: "Für dieses Schlagwort sind keine Synonyme definiert." + add_synonym_placeholder: "Suche nach Schlagwörtern, die als Synonyme hinzugefügt werden sollen …" + synonyms_subtitle: "Wenn die folgenden Schlagwörter verwendet werden, werden sie durch %{name} ersetzt" + save: "Schlagwort speichern" + delete: "Schlagwort löschen" + synonyms_hint: "Wenn diese Schlagwörter verwendet werden, werden sie durch %{baseTagName} ersetzt." + add_synonyms_confirm: "Jede Stelle, die aktuell %{synonymNames} verwendet, wird auf %{tagName} umgestellt. Bist du sicher, dass du diese Änderung vornehmen möchtest?" + localization: + hint: "Füge Übersetzungen hinzu, um Schlagwort-Namen für Benutzer in verschiedenen Sprachen anzuzeigen." + locale: "Gebietsschema" + name: "Name" + description: "Beschreibung" + add: "Übersetzung hinzufügen" + remove: "Übersetzung entfernen" sort_by: "Sortieren nach:" sort_by_count: "Anzahl" sort_by_name: "Name" @@ -5458,8 +5644,8 @@ de: admin_js: type_to_filter: "Zum Filtern hier eingeben …" settings: "Einstellungen" - reset_filter: "Zurücksetzen" - toggle_filters: "Dropdowns zum Filtern anzeigen/ ausblenden" + reset_filter: "Filter zurücksetzen" + toggle_filters: "Dropdowns zum Filtern anzeigen/ausblenden" admin: title: "Discourse-Administrator" moderator: "Moderator" @@ -5472,9 +5658,15 @@ de: never: "nie" reports: title: "Verfügbare Berichte" - meta_doc: "Berichte sind ein leistungsfähiges Instrument, das dir hilft zu verstehen, was auf deiner Website passiert. Sie können dir helfen, Trends zu erkennen, Probleme aufzudecken und Entscheidungen auf der Grundlage von Daten zu treffen." sidebar_title: "Berichte" back: "Zurück zu alle Berichte" + group_engagement: "Aktivität & Wachstum" + group_traffic: "Traffic" + group_members: "Mitglieder" + group_content: "Inhalte & Community-Status" + group_moderation_and_security: "Moderation & Sicherheit" + group_other: "Sonstiges" + legacy_warning: "Dies ist ein älterer Bericht. Er wird demnächst nicht mehr verfügbar sein. Wenn du Hilfe bei der Suche nach einem Ersatz benötigst, wenden dich bitte an den Support." config_sections: account: title: "Konto" @@ -5497,7 +5689,7 @@ de: plugin: "Plug-in" metadata: "Metadaten" enabled: "Aktiviert" - enabled_for: "Aktiviert für..." + enabled_for: "Aktiviert für …" show_image: "Bild anzeigen" edit_groups: "Gruppenweise Aktivierung bearbeiten" groups_updated: "Gruppen aktualisiert!" @@ -5506,7 +5698,8 @@ de: no_changes_to_save: "Keine Änderungen zu speichern" select_groups: "Gruppen auswählen …" opt_in_groups: "Gruppenweise Aktivierung" - opt_in_groups_instructions: "Die gruppenweise Aktivierung kann verwendet werden, um einer bestimmten Benutzergruppe zu ermöglichen, eine Änderung zu testen, bevor sie für alle veröffentlicht wird. Beachte, dass diese Gruppen irrelevant werden, sobald eine Änderung den Status „dauerhaft“ erreicht." + show_related_settings: "Verwandte Einstellungen anzeigen …" + opt_in_groups_instructions: "Die gruppenweise Aktivierung kann verwendet werden, um einer bestimmten Benutzergruppe zu ermöglichen, eine Änderung zu testen, bevor sie für alle veröffentlicht wird. Beachte, dass diese Gruppen irrelevant werden, sobald eine Änderung den Status „stabil“ erreicht." enabled_for_throttle: "Du hast zu schnell geändert, für wen diese Änderung aktiviert ist. Bitte warte ein paar Sekunden, bevor du es erneut versuchst." change_enabled_for_success: "Du hast diese Änderung für %{enabledFor} aktiviert." change_disabled: "Du hast diese Änderung deaktiviert" @@ -5518,7 +5711,7 @@ de: enabled_for_options: no_one: "Keinen" everyone: "Jeden" - staff: "Nur Team-Mitglieder" + staff: "Nur %{staffGroupName}" specific_groups: "Bestimmte Gruppe(n)" specific_groups_with_group_names: one: "die Gruppe %{groupNames}" @@ -5529,6 +5722,11 @@ de: beta: "Beta" stable: "Stabil" permanent: "Dauerhaft" + status_descriptions: + experimental: "Diese Funktion befindet sich in einer frühen Entwicklungsphase und kann noch erheblich verändert oder eingestellt werden. Möglicherweise ist sie nicht vollständig mit anderen Funktionen kompatibel." + alpha: "Dies wird aktiv weiterentwickelt und verfeinert. Die Funktionalität kann sich ändern und es ist vielleicht nicht vollständig ausgereift, aber es ist stabil genug, um es auszuprobieren." + beta: "Dies steht kurz vor der Fertigstellung und ist für eine frühzeitige Einführung verfügbar. Kleinere Änderungen sind noch möglich." + stable: "Dies ist vollständig und wird gut unterstützt. Es wird bald auf allen Discourse-Websites verfügbar sein." impact_roles: admins: "Administratoren" moderators: "Moderatoren" @@ -5541,7 +5739,7 @@ de: all: "Gesamt" enabled_all: "Alle Aktivierungszustände" enabled: "Aktiviert" - enabled_for_staff: "Für Team-Mitglieder aktiviert" + enabled_for_staff: "Für %{staffGroupName} aktiviert" enabled_for_specific_groups: "Für bestimmte Gruppen aktiviert" disabled: "Deaktiviert" impact_type_all: "Alle Änderungstypen" @@ -5613,7 +5811,7 @@ de: logins_30_days: "Anmeldungen (30 Tage)" regenerate_credentials: "Anmeldedaten neu generieren" regenerate_confirm: "Bist du sicher, dass du deine Discourse ID-Anmeldedaten neu generieren willst? Dadurch wird ein neues Client-Geheimnis generiert. Die Erneuerung der Anmeldedaten ist normalerweise nicht erforderlich, kann aber für mehr Sicherheit nützlich sein." - description: "Discourse ID ist einen Single-Sign-On-Dienst, der es Benutzern ermöglicht, sich mit einem einzigen Konto bei mehreren Discourse-Seiten anzumelden. Gängige Social-Login-Anbieter wie Google, Facebook, Apple und GitHub werden ohne zusätzliche Konfiguration unterstützt." + description: "Discourse ID ist ein Single-Sign-On-Dienst, der es Benutzern ermöglicht, sich mit einem einzigen Konto bei mehreren Discourse-Seiten anzumelden. Gängige Social-Login-Anbieter wie Google, Facebook, Apple und GitHub werden ohne zusätzliche Konfiguration unterstützt." learn_more: "Mehr erfahren" regenerate_success: "Die Anmeldedaten wurden erfolgreich neu generiert." logo: @@ -5631,7 +5829,7 @@ de: help_text: "Die empfohlene Größe ist 600 x 80 Pixel." large_icon: title: "Quadratisches Symbol" - description: "Eine quadratische Version des Logos erscheint oben in der Verwaltung und ist auch das Logo für den mobilen Startbildschirm der App." + description: "Eine quadratische Version des Logos erscheint oben auf der Seite und ist auch das Logo der mobilen App." help_text: "Die empfohlene Größe ist 512 x 512 Pixel." square_icon_dark: required: "Ein anderes quadratisches Symbol für den dunklen Modus verwenden?" @@ -5708,7 +5906,7 @@ de: saved: "Die Einstellungen für das Willkommensbanner wurden erfolgreich gespeichert." form: enabled_themes: - label: "In Themes aktiviert..." + label: "In Themes aktiviert …" description: "Wähle aus, welche Themes das Banner anzeigen sollen. Nur aktive Themes werden angezeigt." select_label: "Themes auswählen" background_image: @@ -5757,7 +5955,7 @@ de: search_placeholder: label: "Platzhalter für die Suche" description: "Platzhaltertext für das Suchfeld im Willkommensbanner." - placeholder: "Themen suchen..." + placeholder: "Themen suchen …" navigation: title: "Navigation" header_description: "Konfiguriere die Navigationslinks und Menüpunkte für deine Website. Dazu gehören die Position und das Verhalten des Hauptnavigationsmenüs, die Quicklinks oben auf der Homepage und die Administrator-Seitenleiste." @@ -5819,7 +6017,7 @@ de: header_description: "Berichte sind ein leistungsfähiges Instrument, das dir hilft zu verstehen, was auf deiner Website passiert. Sie können dir helfen, Trends zu erkennen, Probleme aufzudecken und Entscheidungen auf der Grundlage von Daten zu treffen." sub_pages: settings: - title: "Dashboard-Einstellungen" + title: "Einstellungen" badges: title: "Abzeichen" header_description: "Abzeichen belohnen Benutzer für ihre Aktivitäten, Beiträge und Leistungen, um positives Verhalten sowie Engagement in der Community anzuerkennen, zu bestätigen und zu fördern" @@ -5975,22 +6173,6 @@ de: result_count: one: '%{count} Ergebnis für „%{filter}“' other: '%{count} Ergebnisse für „%{filter}“' - result_types: - page: - one: "Seite" - other: "Seiten" - report: - one: "Bericht" - other: "Berichte" - setting: - one: "Einstellung" - other: "Einstellungen" - theme: - one: "Theme" - other: "Themes" - component: - one: "Komponente" - other: "Komponenten" new_features: title: "Was ist neu?" check_for_updates: "Nach Aktualisierungen suchen" @@ -6013,25 +6195,9 @@ de: new_features: title: "Was ist neu?" subtitle: "Wir veröffentlichen laufend neue Funktionen und Verbesserungen. Auf dieser Seite findest du die wichtigsten Neuerungen, aber du kannst auch auf „Mehr erfahren“ klicken, um ausführliche Versionshinweise zu lesen." + no_new_features_found: "Es gibt keine Einträge im Feed oder der ausgewählte Filter hat keine Ergebnisse zurückgegeben. Du kannst frühere Ankündigungen neuer Funktionen in der Discourse Meta Community sehen." no_new_features_error: "Es gab einen Fehler beim Laden des Feeds. Du kannst frühere Ankündigungen neuer Funktionen in der Discourse Meta Community sehen." learn_more: "Mehr erfahren …" - experimental: "Experimentell" - only_experiments: "Nur experimentelle Funktionen anzeigen" - experiment_enabled: "Du hast die experimentelle Funktion aktiviert." - experiment_disabled: "Du hast die experimentelle Funktion deaktiviert." - feature_enabled: "Du hast die Funktion aktiviert." - feature_disabled: "Du hast die Funktion deaktiviert." - toggled_too_fast: "Du hast den Umschalter zu schnell betätigt. Bitte warte ein paar Sekunden, bevor du es erneut versuchst." - experiment_tooltip: - title_disabled: "Probiere diese experimentelle Funktion aus" - title_enabled: "Experimentelle Funktion ausschalten" - content_disabled: "Teste unsere neueste Funktion, die sich gerade in der Entwicklung befindet! Sie ist noch im Experimentierstadium und kann daher wieder entfernt werden. Du kannst dich jederzeit abmelden, wenn du willst.

Wenn du dies änderst, wird die Funktion für alle Benutzer aktiv." - content_enabled: "Wenn du dies änderst, wird die Funktion für alle Benutzer deaktiviert." - feature_tooltip: - title_disabled: "Probiere diese Funktion aus" - title_enabled: "Deaktiviere diese Funktion" - content_disabled: "Teste diese neue Funktion! Du kannst sie jederzeit wieder deaktivieren, wenn du möchtest.

Wenn du dies änderst, wird die Funktion für alle Benutzer aktiviert." - content_enabled: "Wenn du dies änderst, wird die Funktion für alle Benutzer deaktiviert." last_checked: "Zuletzt geprüft" refresh_problems: "Aktualisieren" no_problems: "Es wurden keine Probleme gefunden." @@ -6094,10 +6260,11 @@ de: all: "Gesamt" view_table: "Tabelle" view_graph: "Diagramm" - refresh_report: "Bericht aktualisieren" + refresh_report: "Aktualisieren" daily: Täglich monthly: Monatlich weekly: Wöchentlich + chart_group_period: "Wähle einen Zeitraum" value_so_far: "%{value} (bis jetzt)" dates: "Datumsangaben (UTC)" groups: "Alle Gruppen" @@ -6217,6 +6384,7 @@ de: cancel: "Abbrechen" continue: "Weiter" copy_key: "Kopieren" + key_copied_to_clipboard: "API-Schlüssel in die Zwischenablage kopiert" back: "Zurück zu API-Schlüsseln" revoke: "Widerrufen" undo_revoke: "Widerruf rückgängig machen" @@ -6657,7 +6825,7 @@ de: description: "Einstellungen, die es Themes ermöglichen, mehr Kontrolle über das gesamte Website-Erlebnis zu haben, indem sie eine kleine Teilmenge der wichtigsten Website-Einstellungen überschreiben." themes: title: "Themes" - description: "Website-weite Themes, die das Gesamtbild deiner Website für alle Nutzer verändern." + description: "Website-weite Themes, die das Gesamtbild deiner Website für alle Benutzer verändern." themes_intro: "Installiere ein neues Theme, um loszulegen, oder erstelle dein eigenes von Grund auf mit diesen Ressourcen." new_theme: "Neues Theme" back: "Zurück zu Themes" @@ -6670,7 +6838,7 @@ de: back: "Zurück zu Komponenten" install: "Installieren" name: "Name" - used_on: "Verwendet bei" + used_on: "Verwendet von" enabled: "Aktiviert?" by_author: "Von %{name}" learn_more: "Mehr erfahren" @@ -6875,7 +7043,7 @@ de: body: "Nachrichtentext" revert: "Änderungen verwerfen" revert_confirm: "Möchtest du wirklich deine Änderungen verwerfen?" - search_templates: "Nach Vorlagennamen filtern ..." + search_templates: "Nach Vorlagennamen filtern …" no_templates_found: "Keine Vorlage entspricht deinen Filtern." edit: "Bearbeiten" back: "Zurück zu Vorlagen" @@ -6941,6 +7109,7 @@ de: dark_color_scheme: "Dunkle Farbpalette" default_light_scheme: "Hell (Standard)" color_scheme_select: "Wähle Farben für dieses Theme." + only_theme_color_schemes: "Dieses Theme schränkt die verwendbaren Farbpaletten ein." dark_color_scheme_select: "Wähle Farben im dunklen Modus für dieses Theme." edit_colors: "Farben bearbeiten" custom_sections: "Benutzerdefinierte Abschnitte:" @@ -7001,7 +7170,7 @@ de: import_web_tip: "Repository mit dem Theme" direct_install_tip: "Möchtest du wirklich %{name} aus dem unten aufgeführten Repository installieren?" import_web_advanced: "Erweitert …" - import_file_tip: ".tar.gz-, .zip- oder .dcstyle.json-Datei, die ein Theme enthält" + import_file_tip: ".tar.gz- oder .zip-Datei, die das Theme enthält" is_private: "Theme ist in einem privaten Git-Repository" finish_install: "Theme-Installation beenden" last_attempt: "Der Installationsvorgang wurde nicht abgeschlossen, letzter Versuch:" @@ -7038,6 +7207,10 @@ de: update_success: "Update von %{theme} abgeschlossen" up_to_date: "Theme ist aktuell, zuletzt geprüft:" has_overwritten_history: "Die aktuelle Version des Themes existiert nicht mehr, da die Git-Historie durch einen erzwungenen Push überschrieben wurde." + change_source: + button: "Quelle ändern" + title: "Theme-Quelle ändern" + repository_url: "Repository-URL" add: "Hinzufügen" theme_settings: "Theme-eigene Einstellungen" theme_site_settings: "Einstellungen, die das Theme überschreiben kann" @@ -7481,6 +7654,7 @@ de: upcoming_change_available: "bevorstehende Änderung verfügbar" change_site_setting_groups: "Website-Einstellungen für Gruppen geändert" discourse_id_regenerate_credentials: "Discourse-ID-Anmeldedaten neu generieren" + configure_category_type: "Kategorietyp konfigurieren" screened_emails: title: "Gefilterte E-Mails" description: "Wenn jemand ein Konto erstellt, werden die folgenden E-Mail-Adressen überprüft und es wird die Registrierung blockiert oder eine andere Aktion ausgeführt." @@ -7879,8 +8053,8 @@ de: progress: title: "Fortschritt beim Löschen von Beiträgen" description: - one: "Lösche %{count} Beitrag von @%{username}..." - other: "Lösche %{count} Beiträge von @%{username}..." + one: "Lösche %{count} Beitrag von @%{username} …" + other: "Lösche %{count} Beiträge von @%{username} …" confirmation: title: "Alle Beiträge von @%{username} löschen" description: | @@ -8078,6 +8252,7 @@ de: field_types: text: "Text" textarea: "Textbereich" + date: "Datum" confirm: "Bestätigung" dropdown: "Drop-down-Liste" multiselect: "Mehrfachauswahl" @@ -8098,6 +8273,9 @@ de: more_than_50_results: "Es gibt mehr als 50 Ergebnisse. Bitte grenze deine Suche weiter ein." no_results: "Keine passenden Website-Texte gefunden" interpolation_keys: "Verfügbare Variablennamen:" + interpolation_key_insert: "Zum Einfügen klicken" + interpolation_key_used: "Bereits verwendete Variablen" + interpolation_key_invalid: "Unbekannter Variablenname – wird nicht ersetzt" outdated: title: "Diese Übersetzung ist veraltet" description: "Die Standardübersetzung für diesen Schlüssel hat sich geändert, seit diese Überschreibung erstellt wurde. Bitte überprüfe unten, ob deine Übersetzung mit den Änderungen übereinstimmt, die an der ursprünglichen Aussage vorgenommen wurden." @@ -8216,7 +8394,7 @@ de: min_admin_password_length: prompt: "Du bist dabei, deine Passwortrichtlinie zu ändern. Dies wird von jetzt an alle Administratoren betreffen, die ihre Passwörter ändern. Bist du sicher, dass du fortfahren möchtest?" confirm: "Ja, Passwortrichtlinie aktualisieren" - password_unique_charactes: + password_unique_characters: prompt: "Du bist dabei, deine Passwortrichtlinie zu ändern. Dies wird von jetzt an alle Benutzer betreffen, die ihre Passwörter ändern. Bist du sicher, dass du fortfahren möchtest?" confirm: "Ja, Passwortrichtlinie aktualisieren" block_common_passwords: @@ -8261,7 +8439,7 @@ de: no_user_badges: "%{name} wurden keine Abzeichen verliehen." no_badges: Es gibt keine Abzeichen, die verliehen werden können. none_selected: "Wähle ein Abzeichen aus, um loszulegen" - filter_placeholder: "Abzeichen filtern..." + filter_placeholder: "Abzeichen filtern …" no_badges_found: "Keine Abzeichen gefunden" sections: design: Design diff --git a/config/locales/client.el.yml b/config/locales/client.el.yml index 73c201d788272..055573e3d31d3 100644 --- a/config/locales/client.el.yml +++ b/config/locales/client.el.yml @@ -6,6 +6,22 @@ el: js: + blocks: + ghost: + status: "Κατάσταση" + conditions: "Συνθήκες" + arguments: "Παράμετροι" + container_args: "Παράμετροι Κοντέινερ" + in_location: "σε" + hidden: "κρυφό" + not_registered: "μη εγγεγραμμένο" + no_visible_children: "κανένα ορατό παιδί" + failed: "απέτυχε" + ghost_reasons: + optional_missing_hint: "Αυτό το προαιρετικό μπλοκ δεν απεικονίζεται επειδή δεν έχει καταχωρηθεί." + no_visible_children_hint: "Αυτό το μπλοκ κοντέινερ δεν απεικονίζεται επειδή κανένα από τα παιδιά του δεν είναι ορατό." + condition_failed_hint: "Αυτό το μπλοκ δεν απεικονίζεται επειδή οι συνθήκες του απέτυχαν." + head_hidden_tail_hint: "Αυτό το μπλοκ δεν απεικονίζεται επειδή ένα άλλο μπλοκ απεικονίστηκε πρώτο στο κοντέινερ `head`." carousel: go_to_slide: "Μετάβαση στη διαφάνεια %{index}" previous: "Προηγούμενη διαφάνεια" @@ -301,6 +317,8 @@ el: software_update_prompt: message: "Ενημερώσαμε αυτόν τον ιστότοπο, παρακαλούμε κάντε ανανέωση για να συνεχιστεί η ομαλή λειτουργία." dismiss: "Παράβλεψη" + notifications_tracking: + tooltip: "Επίπεδο ειδοποίησης: %{level}" back_button: "Πίσω" welcome_banner: header: @@ -308,6 +326,9 @@ el: logged_in_members: "Καλώς ήρθες πίσω, %{preferred_display_name}!" anonymous_members: "Καλώς ήλθατε στην %{site_name}!" search_placeholder: "Αναζήτηση" + impersonation: + notice: "Παριστάνεις τον χρήστη %{username}" + stop: "Σταμάτα την πλαστοπροσωπία" themes: default_description: "Προεπιλογή" broken_theme_alert: "Ο ιστότοπός σας ενδέχεται να μην λειτουργεί επειδή ένα θέμα / στοιχείο έχει σφάλματα. Ελέγξτε την κονσόλα του προγράμματος περιήγησης για περισσότερες πληροφορίες." @@ -323,6 +344,17 @@ el: theme_source: "Θέμα '%{name}'" plugin_source: "Πρόσθετο '%{name}'" unknown_source: "Ένα από τα θέματα ή τα πρόσθετα σας" + dev_tools: + drag_to_move: "Σύρετε για μετακίνηση" + toggle_plugin_outlet_debug: "Εναλλαγή αποσφαλμάτωσης εξόδου πρόσθετου" + toggle_block_debug: "Εναλλαγή αποσφαλμάτωσης μπλοκ" + block_debug: + visual_overlay: "Οπτική επικάλυψη" + condition_debugging: "Αποσφαλμάτωση συνθήκης" + toggle_safe_mode: "Εναλλαγή ασφαλούς λειτουργίας" + toggle_verbose_localization: "Εναλλαγή λεπτομερούς τοπικοποίησης" + toggle_mobile_view: "Εναλλαγή προβολής για κινητά" + disable_dev_tools: "Απενεργοποίηση εργαλείων προγραμματιστών" s3: regions: ap_northeast_1: "Ασία Ειρηνικός (Τόκιο)" @@ -357,7 +389,7 @@ el: ok_value: "OK" cancel_value: "Ακύρωση" submit: "Υποβολή" - delete: "Σβήσιμο" + delete: "Διαγραφή" generic_error: "Λυπάμαι, προέκυψε κάποιο σφάλμα." generic_error_with_reason: "Προέκυψε ένα σφάλμα: %{error}" multiple_errors: "Εμφανίστηκαν πολλαπλά σφάλματα: %{errors}" @@ -412,7 +444,38 @@ el: pill: "Προτεινόμενα" pm_title: "Προτεινόμενα μηνύματα" admin_onboarding_banner: + launch_in_easy_steps: "Εκκίνηση σε %{step_count} εύκολα βήματα" + congrats_onboarding_complete: "Συγχαρητήρια για την ολοκλήρωση της διαδικασίας ενσωμάτωσης!" + invite_collaborators: + title: "Προσκαλέστε συνεργάτες" + description: "Τα πρώτα μέλη βοηθούν να ζωντανέψει η κοινότητά σας" + action: "Δημιουργία πρόσκλησης" + start_posting: + title: "Ξεκινήστε να αναρτάτε" + description: "Δώστε στον κόσμο κάτι για να συζητήσουν μαζί" + action: "Δείτε ιδέες" + choose_option: "Πώς θα θέλατε να ξεκινήσετε;" + predefined_topics: "Πρότυπα για το σπάσιμο του πάγου" + predefined_topics_subtitle: "Δώστε στα νέα μέλη κάτι για να συζητήσουν, επιλέξτε ένα πρότυπο για επεξεργασία και δημιουργήστε το δικό σας." + predefined_topics_description: "Διαλέξτε από μια συλλογή από αφορμές για συζήτηση για να ξεκινήσουν οι συζητήσεις" + use_predefined: "Περιήγηση προτύπων" + back: "Πίσω" + icebreakers: + fun_facts: + title: "Ποιές είναι μερικές ενδιαφέρουσες πληροφορίες για εσάς;" + body: "Γεια σε όλους! Είμαι ενθουσιασμένος που ξεκινάω αυτή τη νέα κοινότητα. Για να ξεκινήσουμε, ας μοιραστούμεμια ενδιαφέρουσα πληροφορία για τους εαυτούς μας. Θα ξεκινήσω πρώτος: Λατρεύω την πεζοπορία και την εξερεύνηση νέων μονοπατιών! Τι είναι κάτι ενδιαφέρον για εσάς;" + coolest_thing_you_have_seen_today: + title: "Ποιο είναι το πιο ωραίο πράγμα που είδατε σήμερα;" + body: "Ποιο είναι το πιο ωραίο πράγμα που είδατε ή βιώσατε σήμερα; Θα μπορούσε να είναι οτιδήποτε, από ένα όμορφο ηλιοβασίλεμα μέχρι μια τυχαία πράξη καλοσύνης. Θα ξεκινήσω: Είδα έναν σκύλο να βοηθάει έναν ηλικιωμένο να διασχίσει τον δρόμο!" + introduce_yourself: + title: "Συστηθείτε" + body: "Καλώς ορίσατε στην κοινότητα! Ας γνωριστούμε. Συστηθείτε μας και μοιραστείτε μαζί μας λίγα πράγματα για τα ενδιαφέροντά σας. Θα ξεκινήσω πρώτος: Είμαι παθιασμένος με την τεχνολογία και μου αρέσει να διδάσκω άλλους!" + what_is_your_favorite_food: + title: "Ποιο είναι το αγαπημένο σας φαγητό;" + body: "Μοιραστείτε το αγαπημένο σας φαγητό με την κοινότητα! Θα ξεκινήσω: Λατρεύω την πίτσα, ειδικά με έξτρα τυρί και πεπερόνι." spread_the_word: + title: "Διαδώστε τα νέα!" + description: "Μοιραστείτε έναν σύνδεσμο με όλους στο δίκτυό σας" action: "Αντιγραφή συνδέσμου" copied_to_clipboard: "Ο σύνδεσμος αντιγράφηκε στο πρόχειρο!" about: @@ -496,8 +559,6 @@ el: other: "Δημιουργήθηκε %{count} χρόνια πριν" bookmarked: title: "Σελιδοδείκτης" - edit_bookmark: "Επεξεργασία σελιδοδείκτη" - clear_bookmarks: "Καθαρισμός σελιδοδεικτών" help: bookmark: "Κάντε κλικ για να βάλετε σελιδοδείκτη σε αυτό το θέμα" edit_bookmark: "Πατήστε για να επεξεργαστείτε τον σελιδοδείκτη σε μια ανάρτηση σε αυτό το θέμα" @@ -516,16 +577,16 @@ el: clear_reminder: "Εκκαθάριση υπενθύμισης" edit: "Επεξεργασία σελιδοδείκτη" not_bookmarked: "πρόσθεσε σελιδοδείκτη σε αυτήν την ανάρτηση" + topic_bookmark: "Νήμα" remove_reminder_keep_bookmark: "Αφαίρεση υπενθύμισης και διατήρηση σελιδοδείκτη" created_with_reminder: "Έχετε προσθέσει σελιδοδείκτη σε αυτήν την ανάρτηση με υπενθύμιση %{date}. %{name}" created_with_reminder_generic: "Το έχετε βάλει σελιδοδείκτη με μια υπενθύμιση %{date}. %{name}" delete: "Διαγραφή σελιδοδείκτη" confirm_delete: "Σίγουρα θέλετε να διαγράψετε αυτόν τον σελιδοδείκτη; Η υπενθύμιση θα διαγραφεί επίσης." - confirm_clear: "Σίγουρα θέλετε να διαγράψετε όλους τους σελιδοδείκτες σας από αυτό το θέμα;" save: "Αποθήκευση" no_timezone: 'Δεν έχετε ορίσει ζώνη ώρας ακόμη. Δε θα μπορείτε να ορίσετε υπενθυμίσεις. Ρυθμίστε κάποια στο προφίλ σας.' invalid_custom_datetime: "Η ημερομηνία και η ώρα που δώσατε δεν είναι έγκυρη, παρακαλώ δοκιμάστε ξανά." - list_permission_denied: "Δεν έχετε άδεια για την προβολή των σελιδοδεικτών αυτού του χρήστη." + list_permission_denied: "Δεν έχετε δικαίωμα για την προβολή των σελιδοδεικτών αυτού του χρήστη." no_user_bookmarks: "Δεν έχετε σελιδοδείκτες. Οι σελιδοδείκτες σας επιτρέπουν να ανατρέξετε γρήγορα σε συγκεκριμένες αναρτήσεις." auto_delete_preference: label: "Αφού ειδοποιηθείτε" @@ -589,6 +650,11 @@ el: other_drafts: one: "+%{count} ακόμα προσχέδιο" other: "+%{count} ακόμα προσχέδια" + embed_mode: + storage_access_prompt: "Έχετε ήδη λογαριασμό στο %{site_name}; Επιτρέψτε την πρόσβαση στη συνεδρία σας για να σχολιάσετε ως εσείς." + allow_access: "Επιτρέψτε την πρόσβαση" + continue_as_guest: "Συνέχεια ως Επισκέπτης" + be_first_to_reply: "Γίνε ο πρώτος που θα απαντήσει!" topic_count_all: one: "Δείτε %{count} νέο θέμα" other: "Δείτε %{count} νέα θέματα" @@ -654,19 +720,13 @@ el: in_reply_to: "απαντώντας στο" filtered_flagged_by: "Αναφορά από" unknown: - title: - one: "Έχετε εκκρεμή προς αναθεώρηση στοιχεία από απενεργοποιημένο πρόσθετο:" - other: "Έχετε εκκρεμή προς αναθεώρηση στοιχεία από απενεργοποιημένα πρόσθετα:" instruction: "Δεν μπορούν να εμφανιστούν σωστά μέχρι να ενεργοποιήσετε το σχετικό πρόσθετο. Ενεργοποιήστε το πρόσθετο και ανανεώστε τη σελίδα. Εναλλακτικά, μπορείτε να τα αγνοήσετε. Μάθετε περισσότερα..." reviewable_unknown_source: "%{reviewableType} (άγνωστο πρόσθετο)" reviewable_known_source: "%{reviewableType} (από το πρόσθετο '%{pluginName}')" ignore_all: "Αγνόηση όλων" enable_plugins: "Ενεργοποίηση πρόσθετων" - delete_confirm: "Σίγουρα θέλετε να διαγράψετε όλες τις αναθεωρήσεις που δημιουργήθηκαν από απενεργοποιημένα πρόσθετα;" - ignore_success: "Όλες οι αναθεωρήσεις που δημιουργήθηκαν από απενεργοποιημένα πρόσθετα έχουν διαγραφεί." explain: why: "εξηγήστε γιατί αυτό το στοιχείο κατέληξε στην ουρά" - title: "Αναθεωρήσιμη βαθμολογία" formula: "Τύπος" subtotal: "Μερικό σύνολο" total: "Σύνολο" @@ -680,10 +740,8 @@ el: title: "Στους χρήστες των οποίων οι σημαίες έχουν συμφωνηθεί ιστορικά, δίνεται ένα μπόνους." trust_level_bonus: name: "επίπεδο εμπιστοσύνης" - title: "Τα αναθεωρήσιμα στοιχεία που δημιουργούνται από χρήστες υψηλότερου επιπέδου εμπιστοσύνης έχουν υψηλότερη βαθμολογία." type_bonus: name: "τύπος μπόνους" - title: "Ορισμένοι τύποι που μπορούν να αναθεωρηθούν μπορούν να λάβουν ένα μπόνους από το προσωπικό για να τους δώσουν υψηλότερη προτεραιότητα." revise_and_reject_post: title: "Αναθεώρηση" reason: "Αιτία" @@ -692,7 +750,7 @@ el: custom_reason: "Δώστε μια σαφή περιγραφή του λόγου" other_reason: "Άλλο..." optional: "προεραιτικό" - stale_help: "Αυτό το προς αναθεώρηση στοιχείο έχει επιλυθεί από %{username}." + stale_help: "Αυτό το στοιχείο έχει επιλυθεί από %{username}." claim_help: optional: "Μπορείτε να υποβάλετε αξίωση για αυτό το στοιχείο για να αποτρέψετε την αξιολόγηση από άλλους." required: "Πρέπει να διεκδικήσετε στοιχεία για να μπορέσετε να τα ελέγξετε." @@ -704,7 +762,7 @@ el: unclaim: help: "Αφαίρεση αυτής της διεκδίκησης" awaiting_approval: "Αναμονή έγκρισης" - delete: "Σβήσιμο" + delete: "Διαγραφή" settings: saved: "Αποθηκεύτηκε! " save_changes: "Αποθήκευση Αλλαγών" @@ -846,6 +904,7 @@ el: delimiter: "ή" something_else_wrong: "Υπάρχει κάποιο πρόβλημα με αυτό το %{reviewable_type};" approve_user: "Έγκριση αυτού του χρήστη;" + suspect_user: "Είναι αυτός ο χρήστης spam;" approve_post: "Έγκριση αυτής της ανάρτησης;" approve_topic: "Έγκριση αυτού του θέματος;" types: @@ -907,7 +966,7 @@ el: placeholder: "Γράψτε τη σημείωση σας εδώ..." chars_remaining: "%{count} χαρακτήρες απομένουν" delete_note: "Διαγραφή αυτής της σημείωσης" - delete: "Σβήσιμο" + delete: "Διαγραφή" topic_label: "Θέμα" queued_user: "Χρήστης σε ουρά" posted_in: "Δημοσιεύτηκε σε" @@ -1026,7 +1085,7 @@ el: filter_name: "φιλτράρισμα με βάση το όνομα χρήστη" title: "Χρήστες" likes_given: "Δόθηκαν" - likes_received: "Λήφθησαν" + likes_received: "Ελήφθησαν" topics_entered: "Προβλήθηκαν" topics_entered_long: "Προβεβλημένα Θέματα" time_read: "Χρόνος Ανάγνωσης" @@ -1188,7 +1247,7 @@ el: group_name: "Όνομα ομάδας" user_count: "Χρήστες" bio: "Σχετικά με την Ομάδα" - selector_placeholder: "εισαγωγή ονόματος χρήστη" + selector_placeholder: "εισάγετε όνομα χρήστη" owner: "ιδιοκτήτης" index: title: "Ομάδες" @@ -1222,7 +1281,10 @@ el: make_owner_description: "Κάνε τον/την %{username} κάτοχο αυτής της ομάδας" remove_owner: "Αφαίρεση ως κατόχου" remove_owner_description: "Αφαίρεση του/της %{username} ως κατόχου αυτής της ομάδας" + remove_member_self_lockout: "Αν αφαιρέσετε τον εαυτό σας αυτήν την ομάδα, θα ανακληθεί η πρόσβασή σας στη διαχείριση της. Σίγουρα θέλετε να συνεχίσετε;" + remove_owner_self_lockout: "Αν αφαιρέσετε τον εαυτό σας από κάτοχο, θα ανακληθεί η πρόσβασή σας στη διαχείριση αυτής της ομάδας. Σίγουρα θέλετε να συνεχίσετε;" remove_members: "Αφαίρεση Μελών" + remove_members_description: "Αφαιρέστε τους επιλεγμένους χρήστες από αυτήν την ομάδα" make_owners: "Κάνε ιδιοκτήτες" make_owners_description: "Ορίστε τους επιλεγμένους χρήστες ως κατόχους αυτής της ομάδας" remove_owners: "Αφαίρεση Κατόχων" @@ -1414,7 +1476,7 @@ el: mute_option: "Σε σίγαση" mute_option_title: "Δεν θα λαμβάνετε ειδοποιήσεις, προσωπικά μηνύματα ή άμεσα μηνύματα συνομιλίας από αυτόν τον χρήστη." normal_option: "Φυσιολογικό" - normal_option_title: "Θα ειδοποιηθείτε εάν αυτός ο χρήστης σας απαντήσει, σας παραθέσει ή σας αναφέρει." + normal_option_title: "Θα ειδοποιηθείτε εάν αυτός ο χρήστης σας απαντήσει, σας παραθέσει ή σας επισημάνει." notification_schedule: title: "Χρονοδιάγραμμα Ειδοποιήσεων" label: "Ενεργοποίηση προσαρμοσμένου χρονοδιαγράμματος ειδοποιήσεων" @@ -1474,7 +1536,7 @@ el: dismiss_notifications_tooltip: "Σήμανση όλων των αδιάβαστων ειδοποιήσεων ως διαβασμένων" dismiss_bookmarks_tooltip: "Σήμανση όλων των αδιάβαστων υπενθυμίσεων σελιδοδεικτών ως διαβασμένων" dismiss_messages_tooltip: "Σήμανση όλων των αδιάβαστων ειδοποιήσεων προσωπικών μηνυμάτων ως διαβασμένων" - no_likes_title: "Δεν έχετε λάβει ακόμη likes" + no_likes_title: "Δεν έχετε λάβει ακόμη \"Μου αρέσει\"" no_messages_title: "Δεν έχετε κανένα μήνυμα" no_messages_body: > Χρειάζεσαι μια άμεση προσωπική συνομιλία με κάποιον, εκτός της κανονικής ροής συνομιλίας; Στείλε τους μήνυμα επιλέγοντας το avatar τους και χρησιμοποιώντας το %{icon} κουμπί μηνύματος.

Εάν χρειάζεσαι βοήθεια, μπορείς να στείλεις μήνυμα σε ένα μέλος του προσωπικού. @@ -1487,7 +1549,7 @@ el: no_notifications_page_title: "Δεν έχετε ειδοποιήσεις ακόμη" dynamic_favicon: "Εμφάνιση μετρήσεων στο εικονίδιο του περιηγητή" skip_new_user_tips: - description: "Παράλειψη συμβουλών και σημάτων για την ενσωμάτωση νέου χρήστη" + description: "Παράλειψη συμβουλών και παρασήμων για την ενσωμάτωση νέου χρήστη" reset_seen_user_tips: "Εμφάνιση συμβουλών χρήστη ξανά" theme_default_on_all_devices: "Όρισε αυτό ως προεπιλεγμένο θέμα σε όλες τις συσκευές μου" color_scheme_default_on_all_devices: "Ορισμός προεπιλεγμένής παλέτας χρωμάτων και λειτουργίας σε όλες τις συσκευές μου" @@ -1589,6 +1651,9 @@ el: undo_revoke_access: "Απενεργοποίηση Ανάκλησης Πρόσβασης" api_approved: "Εγκεκριμένο:" api_last_used_at: "Τελευταία χρήση στις:" + api_show_permissions: + one: "Χορηγημένα δικαιώματα (%{count})" + other: "Χορηγημένα δικαιώματα (%{count})" theme: "Θέμα" save_to_change_theme: 'Το θέμα θα ενημερωθεί αφού κάνετε κλικ στο "%{save_text}"' home: "Προεπιλεγμένη Αρχική Σελίδα" @@ -1597,6 +1662,9 @@ el: flags_given: one: '%{count} χρήσιμη αναφορά' other: '%{count} χρήσιμες αναφορές' + flags: + one: '%{count} αναφορά' + other: '%{count} αναφορές' deleted_posts: one: '%{count} διαγραμμένη ανάρτηση' other: '%{count} διαγραμμένες αναρτήσεις' @@ -1706,6 +1774,19 @@ el: apps: "Εφαρμογές" navigation_menu: "Μενού πλοήγησης" upcoming_changes: "Επερχόμενες αλλαγές" + calendar_subscriptions: "Ημερολόγιο" + calendar_subscriptions: + generate: "Δημιουργία URL συνδρομής" + regenerate: "Επαναδημιουργία URLs" + revoke: "Ανάκληση συνδρομής" + bookmarks: "Υπενθυμίσεις σελιδοδεικτών" + bookmarks_description: "Οι σελιδοδείκτες σας με ημερομηνίες υπενθύμισης" + copy: "Αντιγραφή URL" + copied: "Αντιγράφηκε!" + add_to_google: "Ημερολόγιο Google" + add_to_outlook: "Microsoft Outlook" + add_to_apple: "Ημερολόγιο Apple" + active_subscription: "Έχετε μια ενεργή συνδρομή ημερολογίου." change_password: success: "(το email στάλθηκε)" in_progress: "(αποστολή email)" @@ -1751,6 +1832,7 @@ el: Σαρώστε αυτόν τον κωδικό QR σε μια υποστηριζόμενη εφαρμογή (Android - iOS) και εισαγάγετε τον κωδικό ελέγχου ταυτότητας. disable_description: "Παρακαλώ εισαγάγετε τον κωδικό ελέγχου ταυτότητας από την εφαρμογή σας" show_key_description: "Εισαγάγετε χειροκίνητα" + oauth_enabled_warning: "Λάβετε υπόψη ότι οι συνδέσεις κοινωνικών δικτύων θα απενεργοποιηθούν μόλις ενεργοποιηθεί ο έλεγχος ταυτότητας δύο παραγόντων στον λογαριασμό σας." use: "Χρησιμοποιήστε την εφαρμογή Authenticator" disable: "Απενεργοποίηση" delete: "Διαγραφή" @@ -2073,7 +2155,7 @@ el: title: "Σύνδεσμος πρόσκλησης" success: "Η δημιουργία του συνδέσμου πρόσκλησης έγινε επιτυχώς!" error: "Παρουσιάστηκε σφάλμα κατά τη δημιουργία συνδέσμου πρόσκλησης" - cannot_invite_to_forum: "Λυπούμαστε, δεν έχετε άδεια δημιουργίας προσκλήσεων. Επικοινωνήστε με έναν διαχειριστή για να σας παραχωρήσει άδεια πρόσκλησης." + cannot_invite_to_forum: "Λυπούμαστε, δεν έχετε δικαίωμα δημιουργίας προσκλήσεων. Επικοινωνήστε με έναν διαχειριστή για να σας παραχωρήσει δικαίωμα πρόσκλησης." invite: new_title: "Πρόσκληση μελών" edit_title: "Επεξεργασία πρόσκλησης" @@ -2293,6 +2375,10 @@ el: form_kit: reset: Επαναφορά optional: προεραιτικό + required: απαραίτητο + errors_summary_title: + one: "Διορθώστε αυτό το σφάλμα για να συνεχίσετε" + other: "Διορθώστε αυτά τα σφάλματα για να συνεχίσετε" dirty_form: "Δεν έχετε υποβάλει τις αλλαγές σας! Σίγουρα θέλετε να αποχωρήσετε;" errors: starts_with: "Πρέπει να ξεκινά με %{prefix}" @@ -2312,6 +2398,8 @@ el: too_short: one: "Πρέπει να είναι τουλάχιστον %{count} χαρακτήρας" other: "Πρέπει να είναι τουλάχιστον %{count} χαρακτήρες" + color: + already_used: "Χρησιμοποιείται ήδη" close: "Κλείσιμο" assets_changed_confirm: "Αυτός ο ιστότοπος μόλις έλαβε μια αναβάθμιση λογισμικού. Λήψη της πιο πρόσφατης έκδοσης τώρα;" logout: "Αποσυνδέθηκες." @@ -2356,6 +2444,7 @@ el: }. learn_more: "Μάθετε περισσότερα…" learn_more_with_link: "Μάθετε περισσότερα…" + feedback_with_link: "Ανατροφοδότηση…" mute: Σίγαση unmute: Άρση σίγασης last_post: Ανάρτησε @@ -2576,6 +2665,12 @@ el: password_reset: continue: "Συνεχίστε στην %{site_name}" emoji_set: + apple_international: "Apple/International (καταργήθηκε για το Twemoji)" + google: "Google (καταργήθηκε για το Noto Emoji)" + twitter: "Twitter (καταργήθηκε για το Twemoji)" + win10: "Win10 (καταργήθηκε για το Fluent Emoji)" + google_classic: "Google Classic (καταργήθηκε για το Noto Emoji)" + facebook_messenger: "Facebook Messenger (καταργήθηκε για το Τυπικό)" openmoji: OpenMoji standard: Τυπικό fluentui: Fluent Emoji @@ -2635,7 +2730,7 @@ el: results_count: one: "%{count} αποτέλεσμα" other: "%{count} αποτελέσματα" - filter_placeholder: Αναζήτηση… + filter_placeholder: Αναζήτησε… filter_placeholder_with_any: Αναζήτησε ή δημιούργησε… create: "Δημιουργήστε: '%{content}'" max_content_reached: @@ -2648,6 +2743,8 @@ el: filter_for_more: Φιλτράρετε για περισσότερα… categories_admin_dropdown: title: "Διαχείριση κατηγοριών" + tag_category_admin_dropdown: + edit_tag: "Επεξεργασία ετικέτας" bulk_select_topics_dropdown: title: "Μαζικές Ενέργειες" bulk_select_bookmarks_dropdown: @@ -2660,7 +2757,7 @@ el: size_too_large: "%{provided_file_size} είναι μεγαλύτερο από το μέγιστο επιτρεπόμενο %{max_file_size}" size_too_small: "%{provided_file_size} είναι μικρότερο από το ελάχιστο επιτρεπόμενο %{min_file_size}" emoji_picker: - filter_placeholder: Αναζήτηση για emoji + filter_placeholder: Αναζήτησε για emoji smileys_&_emotion: Χαμόγελα και συγκίνηση people_&_body: Άνθρωποι και Σώμα animals_&_nature: Ζώα και Φύση @@ -2678,6 +2775,8 @@ el: medium_dark_tone: Σκουρόχρωμη απόχρωση επιδερμίδας dark_tone: Σκούρη απόχρωση επιδερμίδας default: Προσαρμοσμένα emojis + filter_input: + clear: "Καθαρισμός φίλτρου" shared_drafts: title: "Κοινόχρηστα Προσχέδια" notice: "Αυτό το θέμα είναι ορατό μόνο σε όσους μπορούν να δημοσιεύσουν κοινόχρηστα προσχέδια." @@ -2715,6 +2814,7 @@ el: translation: "Μετάφραση" no_translation_yet: "Ξεκινήστε να πληκτρολογείτε για να δείτε την προεπισκόπηση της μετάφρασης..." placeholder: "Εισάγετε τη μετάφραση για την ανάρτηση εδώ..." + show_raw_markdown: "Εμφάνιση ακατέργαστου" group_mentioned_limit: one: "Προειδοποίηση! Επισήμανατε την ομάδα %{group}, ωστόσο αυτή έχει περισσότερα μέλη από το ορισμένο από διαχειριστή όριο επισήμανσης %{count} χρήστη. Κανείς δε θα ειδοποιηθεί." other: "Προειδοποίηση! Επισήμανατε την ομάδα %{group}, ωστόσο αυτή έχει περισσότερα μέλη από το ορισμένο από διαχειριστή όριο επισήμανσης %{count} χρηστών. Κανείς δε θα ειδοποιηθεί." @@ -2725,6 +2825,8 @@ el: one: "Η επισήμανση της ομάδας %{group} θα ειδοποιήσει %{count} άτομο. Είστε σίγουροι;" other: "Η επισήμανση της ομάδας %{group} θα ειδοποιήσει %{count} άτομα. Είστε σίγουροι;" cannot_see_mention: + category: "Επισήμανες τον χρήστη @%{username} αλλά δε θα λάβει ειδοποίηση, επειδή δεν έχει πρόσβαση σε αυτή την κατηγορία. Θα πρέπει να τον προσθέσεις σε μια ομάδα που έχει πρόσβαση σε αυτή την κατηγορία." + private: "Επισήμανες τον χρήστη @%{username} αλλά δεν θα λάβει ειδοποίηση, επειδή δεν μπορεί να δει αυτό το προσωπικό μήνυμα. Θα πρέπει να τον προσκαλέσεις σε αυτό το ΠΜ." muted_topic: "Επισημάνατε τον/την @%{username} αλλά δεν θα ειδοποιηθεί επειδή έχει σε σίγαση αυτό το θέμα." not_allowed: "Επισημάνατε τον/την @%{username} αλλά δεν θα ειδοποιηθεί επειδή δεν προσκλήθηκε σε αυτό το θέμα." cannot_see_group_mention: @@ -2769,7 +2871,7 @@ el: users_placeholder: "Προσθήκη χρηστών ή ομάδων" title_placeholder: "Τι αφορά αυτή η συζήτησης σε μία σύντομη πρόταση;" title_or_link_placeholder: "Πληκτρολόγησε τίτλο, ή κάνε επικόλληση ένα σύνδεσμο εδώ" - edit_reason_placeholder: "γιατί αναθεωρείς;" + edit_reason_placeholder: "γιατί κάνετε επεξεργασία;" topic_featured_link_placeholder: "Εισάγετε τον συνδέσμο που εμφανίζεται με τον τίτλο." remove_featured_link: "Αφαιρέστε σύνδεσμο από το θέμα." reply_placeholder: "Πληκτρολόγησε εδώ. Χρησιμοποίησε Markdown, BBCode, ή HTML για μορφοποίηση. Σύρε ή επικόλλησε εικόνες." @@ -2818,6 +2920,7 @@ el: upload_description: "δώσε μια περιγραφή για την μεταφόρτωση" olist_title: "Αριθμημένη λίστα" ulist_title: "Λίστα με κουκκίδες" + list_title: "Λίστες" list_item: "Στοιχείο Λίστας" toggle_direction: "Εναλλαγή κατεύθυνσης" wrap_modal: @@ -2839,6 +2942,9 @@ el: body: "Αυτή τη στιγμή το μήνυμα στέλνεται μόνο σε εσάς!" slow_mode: error: "Αυτό το θέμα είναι σε αργή λειτουργία. Έχετε ήδη δημοσιεύσει πρόσφατα. Μπορείτε να δημοσιεύσετε ξανά σε %{timeLeft}." + user_not_seen_in_a_while: + single: "Το άτομο στο οποίο στέλνετε μήνυμα, %{usernames}, δεν έχει εμφανιστεί εδώ και πολύ καιρό – %{time_ago}. Ενδέχεται να μην λάβει το μήνυμά σας. Ίσως θελήσετε να αναζητήσετε εναλλακτικές μεθόδους επικοινωνίας με τον/την %{usernames}." + multiple: "Τα ακόλουθα άτομα στα οποία στέλνετε μήνυμα: %{usernames}, δεν έχουν εμφανιστεί εδώ και πολύ καιρό – %{time_ago}. Ενδέχεται να μην λάβουν το μήνυμά σας. Ίσως θελήσετε να αναζητήσετε εναλλακτικές μεθόδους επικοινωνίας μαζί τους." admin_options_title: "Προαιρετικές ρυθμίσεις προσωπικού για αυτό το θέμα" composer_actions: reply: Απάντηση @@ -2973,9 +3079,13 @@ el: available: title: "Επερχόμενες αλλαγές" description: "Το '%{changeName}' είναι διαθέσιμο για προεπισκόπηση" + description_two: "'%{changeName1}' και '%{changeName2}' είναι διαθέσιμα για προεπισκόπηση" + description_many: "'%{changeName}' και %{otherChangeCount} ακόμα αλλαγές είναι διαθέσιμες για προεπισκόπηση" automatically_promoted: title: "Επερχόμενες αλλαγές" description: "Το '%{changeName}' έχει ενεργοποιηθεί αυτόματα" + description_two: "'%{changeName1}' και '%{changeName2}' ενεργοποιήθηκαν αυτόματα" + description_many: "'%{changeName}' και %{otherChangeCount} ακόμα αλλαγές ενεργοποιήθηκαν αυτόματα" dismiss_confirmation: body: default: @@ -3034,11 +3144,11 @@ el: votes_released: "η ψηφοφορία κυκλοφόρησε" new_features: "νέες λειτουργίες του Discourse έχουν κυκλοφορήσει" admin_problems: "νέα συμβουλή στον πίνακα ελέγχου του ιστότοπού σας" - upcoming_change_available: "νέα επερχόμενη αλλαγή '%{changeName}' είναι διαθέσιμη" - upcoming_change_automatically_promoted: "επερχόμενη αλλαγή '%{changeName}' έχει ενεργοποιηθεί αυτόματα" + upcoming_change_available: "νέες επερχόμενες αλλαγές είναι διαθέσιμες" + upcoming_change_automatically_promoted: "οι επερχόμενες αλλαγές ενεργοποιήθηκαν αυτόματα" upload_selector: change: "Αλλαγή" - delete: "Σβήσιμο" + delete: "Διαγραφή" uploading: "Ανεβαίνει" processing: "Επεξεργασία μεταφόρτωσης" select_file: "Πατήστε για να ανεβάσετε ή σύρετε και αποθέστε αρχείο" @@ -3172,8 +3282,6 @@ el: max_views: placeholder: μέγιστο aria_label: φιλτράρισμα με βάση τις μέγιστες προβολές - additional_options: - label: "Φιλτράρισμα κατά αριθμό αναρτήσεων και προβολές θέματος" hamburger_menu: "Μενού πλοήγησης" new_item: "καινούριο" go_back: "επιστροφή" @@ -3228,6 +3336,7 @@ el: deleted_post: "(διαγραμμένη ανάρτηση)" post_number_with_topic_title: "ανάρτηση #%{post_number} - %{title}" new_post_in_topic: "νέα δημοσίευση στο %{title}" + new_post_in_deleted_topic: "νέα ανάρτηση σε διαγραμμένο θέμα" user_requires_approval: "%{username} χρειάζεται έγκριση" default_item: "αναθεωρήσιμο στοιχείο #%{reviewable_id}" topics: @@ -3237,10 +3346,8 @@ el: confirm: "Επιβεβαίωση" select_all: "Επιλογή Όλων" clear_all: "Καθαρισμός Όλων" - unlist_topics: "Απόκρυψη Θεμάτων" - relist_topics: "Εμφάνιση Θεμάτων" defer: "Σήμανση ως αδιάβαστα" - delete: "Διαγραφή Θεμάτων" + delete: "Διαγραφή θεμάτων" delete_topics_count: one: "Διαγραφή Θέματος" other: "Διαγραφή Θεμάτων" @@ -3279,38 +3386,62 @@ el: other: "Παράβλεψε Νέα (%{count})" toggle: "εναλλαγή μαζικής επιλογής θεμάτων" actions: "Μαζικές Ενέργειες" - change_category: "Ορισμός κατηγορίας…" - close_topics: "Κλείσιμο Θεμάτων" - archive_topics: "Αρχειοθέτηση Θεμάτων" + change_category: "Ενημέρωση κατηγορίας" + close_topics: "Κλείσιμο θεμάτων" + archive_topics: "Αρχειοθέτηση θεμάτων" move_messages_to_inbox: "Μετακίνηση στα Εισερχόμενα" archive_messages: "Μετακίνηση στο Αρχείο" - notification_level: "Ειδοποιήσεις…" + notification_level: "Ενημέρωση ειδοποιήσεων" change_notification_level: "Αλλαγή επιπέδου ειδοποίησης" choose_new_category: "Επιλέξτε τη νέα κατηγορία για τα θέματα:" - selected: - one: "Έχεις διαλέξει %{count} θέμα." - other: "Έχετε επιλέξει %{count} θέματα." selected_sole_category: one: "Έχεις επιλέξει %{count} θέμα από την κατηγορία:" other: "Έχεις επιλέξει %{count} θέματα από την κατηγορία:" selected_count: one: "%{count} επιλεγμένα" other: "%{count} επιλεγμένα" - change_tags: "Αντικατάσταση Ετικετών " - append_tags: "Προσάρτηση Ετικετών " + change_tags: "Αντικατάσταση ετικετών" + append_tags: "Προσθήκη ετικετών" choose_new_tags: "Επιλέξτε νέες ετικέτες για αυτά τα θέματα:" - choose_append_tags: "Επιλογή νέων ετικετών για την προσάρτηση τους σε αυτά τα θέματα:" + choose_append_tags: "Προσθήκη ετικετών" changed_tags: "Οι ετικέτες αυτών των θεμάτων έχουν αλλάξει." - remove_tags: "Αφαίρεση Όλων των Ετικετών" + remove_tags: "Αφαίρεση ετικετών" confirm_remove_tags: one: "Όλες οι ετικέτες θα αφαιρεθούν από αυτό το θέμα. Είσαι σίγουρος;" other: "Όλες οι ετικέτες θα αφαιρεθούν από %{count} θέματα. Είσαι σίγουρος;" + confirm_update_topics: + one: "Ενημέρωση %{count} θέματος" + other: "Ενημέρωση %{count} θεμάτων" + confirm_close_topics: + one: "Κλείσιμο %{count} θέματος" + other: "Κλείσιμο %{count} θεμάτων" + confirm_archive_topics: + one: "Αρχειοθέτηση %{count} θέματος" + other: "Αρχειοθέτηση %{count} θεμάτων" + confirm_archive_messages: + one: "Αρχειοθέτηση %{count} μηνύματος" + other: "Αρχειοθέτηση %{count} μηνυμάτων" + confirm_move_to_inbox: + one: "Μετακίνηση %{count} μηνύματος στα εισερχόμενα" + other: "Μετακίνηση %{count} μηνυμάτων στα εισερχόμενα" + confirm_delete_topics: + one: "Διαγραφή %{count} θέματος" + other: "Διαγραφή %{count} θεμάτων" progress: one: "Πρόοδος: %{count} θέμα" other: "Πρόοδος: %{count} θέματα" - notify: "Ειδοποιήστε τους χρήστες για αυτήν την αλλαγή." + notify: "Ειδοποιήστε τους χρήστες για αυτήν την αλλαγή" performing: "Εκτελούνται μαζικές λειτουργίες, παρακαλώ περιμένετε…" completed: "Οι μαζικές λειτουργίες ολοκληρώθηκαν με επιτυχία!" + completed_count: + one: "%{count} θέμα ενημερώθηκε." + other: "%{count} θέματα ενημερώθηκαν." + not_completed: + one: "%{count} θέμα δεν μπόρεσε να ενημερωθεί:" + other: "%{count} θέματα δεν μπόρεσαν να ενημερωθούν:" + skipped_count: + one: "%{count} θέμα ήταν ήδη ενημερωμένο." + other: "%{count} θέματα ήταν ήδη ενημερωμένα." error_topic_count: one: "%{count} θέμα" other: "%{count} θέματα" @@ -3337,7 +3468,7 @@ el: name: "Παράβλεψη" close_topics: name: "Κλείσιμο" - note: "Σημείωση" + note: "Προσθέστε μια σημείωση σε αυτά τα θέματα" optional: (προεραιτικό) archive_topics: name: "Αρχείο" @@ -3347,27 +3478,31 @@ el: name: "Μετακίνηση στα Εισερχόμενα" remove_tags: name: "Αφαίρεση ετικετών" + description: "Αφαίρεση όλων των ετικετών από τα επιλεγμένα θέματα." append_tags: - name: "Προσάρτηση Ετικετών " + name: "Προσθήκη ετικετών" + description: "Προσθέστε τις ακόλουθες ετικέτες στα επιλεγμένα θέματα:" replace_tags: name: "Αντικατάσταση Ετικετών " + description: "Αντικαταστήστε όλες τις υπάρχουσες ετικέτες στα επιλεγμένα θέματα με τις ακόλουθες:" delete_topics: - name: "Σβήσιμο" + name: "Διαγραφή" + description: "Διαγράψτε μόνιμα τα επιλεγμένα θέματα. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί." update_category: name: "Ενημέρωση Κατηγορίας" - description: "Επιλέξτε τη νέα κατηγορία για τα επιλεγμένα θέματα" + description: "Μετακινήστε όλα τα επιλεγμένα θέματα στην ακόλουθη κατηγορία:" defer: name: "Σήμανση ως αδιάβαστα" - description: "Σημάνετε τα θέματα ως αδιάβαστα" update_notifications: name: "Ενημέρωση Ειδοποιήσεων" - description: "Αλλαγή επιπέδου ειδοποιήσεων σε Επιτηρείται, Παρακολουθείται, Φυσιολογικό ή Σε σίγαση" + description: "Ενημερώστε το προσωπικό σας επίπεδο ειδοποίησης για τα επιλεγμένα θέματα σε:" topic: filter_to: one: "%{count} ανάρτηση σε θέμα" other: "%{count} αναρτήσεις σε θέμα" create: "Νέο Θέμα" create_long: "Δημιουργία νέου θέματος" + create_group: "Νέο θέμα και προσχέδια" open_draft: "Άνοιγμα προσχεδίου" private_message: "Στείλε ένα προσωπικό μήνυμα" archive_message: @@ -3833,6 +3968,7 @@ el: edit_reason: "Αιτία:" post_number: "ανάρτηση %{number}" ignored: "Περιεχόμενο που αγνοείται" + wiki_last_edited_on: "τελευταία τροποποίηση wiki στις %{dateTime}" last_edited_on: "τελευταία τροποποίηση ανάρτησης στις %{dateTime}" edit_history: "ιστορικό επεξεργασίας ανάρτησης" reply_as_new_topic: "Απάντηση με διασυνδεδεμένο θέμα" @@ -3902,9 +4038,11 @@ el: table: actions: "Ενέργειες" edit: "Επεξεργασία" - delete: "Σβήσιμο" + delete: "Διαγραφή" add: "Προσθήκη νέας μετάφρασης" - manage: "Διαχείριση μεταφράσεων (%{count} υπάρχουσες)" + manage: + one: "Διαχείριση μεταφράσεων (%{count} υπάρχουσες)" + other: "Διαχείριση μεταφράσεων (%{count} υπάρχουσες)" modal: title: "Μεταφράσεις για ανάρτηση" confirm_delete: "Σίγουρα θέλετε να διαγράψετε τις μεταφράσεις για '%{languageCode}';" @@ -3953,7 +4091,7 @@ el: edit: "επεξεργασία ανάρτησης" edit_action: "Επεξεργασία" edit_anonymous: "Λυπούμαστε, αλλά για να επεξεργαστείς αυτή την ανάρτηση πρέπει πρώτα να συνδεθείς." - flag_action: "Επισήμανση" + flag_action: "Αναφορά" flag: "ανέφερε την ανάρτηση στους συντονιστές ή στείλε ένα προσωπικό μήνυμα σχετικά με αυτή" anonymous_flag: "στείλτε email στο προσωπικό για να αναφέρετε αυτήν την ανάρτηση" delete_action: "Διαγραφή ανάρτησης" @@ -3978,6 +4116,7 @@ el: admin: "ενέργειες διαχειριστή ανάρτησης" admin_action: "Διαχειριστής" permanently_delete: "Μόνιμη Διαγραφή" + permanently_delete_confirmation: "Σίγουρα θέλετε να διαγράψετε οριστικά αυτήν την ανάρτηση; Δεν θα μπορείτε να την ανακτήσετε." wiki: "Δημιουργία Βίκι" unwiki: "Αφαίρεση Βίκι" convert_to_moderator: "Πρόσθεσε Χρώμα Συνεργάτη" @@ -3991,8 +4130,8 @@ el: lock_post_description: "αποτρέψτε τον συντάκτη από την επεξεργασία αυτής της ανάρτησης" unlock_post: "Ξεκλείδωμα ανάρτησης" unlock_post_description: "επιτρέψτε στον συντάκτη να επεξεργαστεί αυτήν την ανάρτηση" - delete_topic_disallowed_modal: "Δεν έχετε άδεια διαγραφής αυτού του θέματος. Εάν θέλετε πραγματικά να διαγραφεί, υποβάλετε μια αναφορά για έλεγχο από συντονιστή μαζί με το σκεπτικό." - delete_topic_disallowed: "δεν έχετε άδεια να διαγράψετε αυτό το θέμα" + delete_topic_disallowed_modal: "Δεν έχετε δικαίωμα διαγραφής αυτού του θέματος. Εάν θέλετε πραγματικά να διαγραφεί, υποβάλετε μια αναφορά για έλεγχο από συντονιστή μαζί με το σκεπτικό." + delete_topic_disallowed: "δεν έχετε δικαίωμα διαγραφής αυτού του θέματος" delete_topic_confirm_modal: one: "Αυτό το θέμα έχει πάνω από %{count} προβολή και ίσως να είναι ένας δημοφιλής προορισμός αναζήτησης. Σίγουρα θέλετε να διαγράψετε αυτό το θέμα εντελώς, αντί να το επεξεργαστείτε για να το βελτιώσετε;" other: "Αυτό το θέμα έχει πάνω από %{count} προβολές και ίσως να είναι ένας δημοφιλής προορισμός αναζήτησης. Σίγουρα θέλετε να διαγράψετε αυτό το θέμα εντελώς, αντί να το επεξεργαστείτε για να το βελτιώσετε;" @@ -4124,7 +4263,10 @@ el: show_advanced: "Προηγμένες ρυθμίσεις" topic_template: "Πρότυπο" tags: "Ετικέτες" + localizations: "Τοπικοποιήσεις" localization: + language: "Γλώσσα κατηγορίας" + language_description: "Η κύρια γλώσσα του ονόματος και της περιγραφής αυτής της κατηγορίας." name: "Όνομα" description: "Περιγραφή" remove: "Αφαίρεση" @@ -4139,21 +4281,36 @@ el: allow_global_tags_label: "Επιτρέψτε επίσης άλλες ετικέτες" required_tag_group: description: "Να απαιτείται τα νέα θέματα να έχουν ετικέτες από ομάδες ετικετών:" - delete: "Σβήσιμο" + delete: "Διαγραφή" add: "Προσθήκη απαιτούμενης ομάδας ετικετών" placeholder: "Επιλέξτε ομάδα ετικετών…" + min_count: "Αριθμός ετικετών" + tag_group: "Ομάδα ετικετών" topic_featured_link_allowed: "Να επιτρέπονται αναδεδειγμένοι συνδέσμοι σε αυτήν την κατηγορία" delete: "Διαγραφή κατηγορίας" create: "Νέα κατηγορία" + create_with_type: "Νέα %{typeName} κατηγορία" create_long: "Δημιουργία νέας κατηγορίας" + settings_apply_to_all_of_type_warning: "Οι παρακάτω αλλαγές θα ισχύσουν για όλες τις κατηγορίες αυτού του τύπου" + type_settings_schema: + category_settings: "Ρυθμίσεις κατηγορίας" + category_custom_fields: "Ρυθμίσεις κατηγορίας" + site_settings: "Ρυθμίσεις ιστότοπου" + choose_type: + title: "Επιλέξτε τύπο κατηγορίας" + requires_plugin: "Απαιτεί πρόσθετο" + create_category: "Δημιουργία κατηγορίας" save: "Αποθήκευση κατηγορίας" + unsaved_changes: "Έχετε μη αποθηκευμένες αλλαγές" parent: "Γονική κατηγορία" slug_placeholder: "(Προαιρετικά) λέξεις ενωμένες με παύλα για το URL" creation_error: Παρουσιάστηκε κάποιο σφάλμα κατά την δημιουργία της κατηγορίας save_error: Παρουσιάστηκε κάποιο σφάλμα κατά την αποθήκευση της κατηγορίας. validations: + emoji_required: "Επιλέξτε ένα emoji." icon_required: "Επιλέξτε ένα εικονίδιο." name: "Όνομα κατηγορίας" + untitled: "Κατηγορία χωρίς τίτλο" description: "Περιγραφή" logo: "Εικόνα λογότυπου κατηγορίας" logo_dark: "Εικόνα λογότυπου κατηγορίας σκοτεινής λειτουργίας" @@ -4188,6 +4345,9 @@ el: list: "Λίστα κατηγοριών" no_description: "Παρακαλώ πρόσθεσε μια περιγραφή στην κατηγορία" change_in_category_topic: "Επεξεργασία περιγραφής" + description_updated: "Η περιγραφή ενημερώθηκε" + description_expand: "Δείτε περισσότερα" + description_collapse: "Δείξε λιγότερα" already_used: "Αυτό το χρώμα έχει χρησιμοποιηθεί σε άλλη κατηγορία" color_palette: "Παλέτα χρωμάτων" security: "Ασφάλεια" @@ -4198,7 +4358,11 @@ el: reply: "Απάντηση" create: "Δημιουργία" no_groups_selected: "Δεν έχει δοθεί πρόσβαση σε ομάδες. Αυτή η κατηγορία θα είναι ορατή μόνο στο προσωπικό." + everyone_full_access: 'Αυτή η κατηγορία είναι δημόσια, όλοι μπορούν να δουν, να απαντήσουν και να δημιουργήσουν αναρτήσεις. Για να περιορίσετε τα δικαιώματα, αφαιρέστε ένα ή περισσότερα από τα δικαιώματα που έχουν εκχωρηθεί στην ομάδα "%{everyone_group}".' specific_groups_have_access: "Αυτή η κατηγορία είναι ιδιωτική, μόνο οι επιλεγμένες ομάδες μπορούν να δουν, να απαντήσουν και να δημιουργήσουν αναρτήσεις." + toggle_reply: "Εναλλαγή δικαιώματος απάντησης" + toggle_full: "Εναλλαγή δικαιώματος δημιουργίας" + inherited: 'Αυτό το δικαίωμα κληρονομείται από "%{everyone_group}"' uncategorized_security_warning: "Αυτή η κατηγορία είναι ξεχωριστή. Προορίζεται ως περιοχή διατήρησης για θέματα που δεν έχουν κατηγορία. Δε μπορεί να έχει ρυθμίσεις ασφαλείας." uncategorized_general_warning: 'Αυτή η κατηγορία είναι ξεχωριστή. Χρησιμοποιείται ως προεπιλεγμένη κατηγορία για νέα θέματα που δεν έχουν επιλεγμένη κατηγορία. Αν θέλετε να αποτρέψετε αυτήν τη συμπεριφορά και να επιβάλετε επιλογή κατηγορίας, παρακαλώ απενεργοποιήστε τη ρύθμιση εδώ. Εάν θέλετε να αλλάξετε το όνομα ή την περιγραφή, μεταβείτε στο Προσαρμογή/Περιεχόμενο κειμένου.' pending_permission_change_alert: "Δεν έχετε προσθέσει %{group} σε αυτήν την κατηγορία· κάντε κλικ σε αυτό το κουμπί για να προσθέσετε." @@ -4213,14 +4377,23 @@ el: all_topics_wiki: "Κάντε τα νέα θέματα wikis από προεπιλογή" allow_unlimited_owner_edits_on_first_post: "Να επιτρέπονται απεριόριστες επεξεργασίες κατόχου στην πρώτη ανάρτηση" subcategory_list_style: "Μορφή Λίστας Υποκατηγορίων:" + sort_order: "Ταξινόμηση λίστας θεμάτων κατά:" + default_view: "Προεπιλεγμένη λίστα θεμάτων:" + default_top_period: "Προεπιλεγμένη κορυφαία περίοδος:" + default_list_filter: "Προεπιλεγμένο φίλτρο λίστας:" allow_badges_label: "Να επιτρέπεται η απονομή παράσημων σε αυτή την κατηγορία" edit_permissions: "Επεξεργασία δικαιωμάτων" reviewable_by_group: "Εκτός από το προσωπικό, το περιεχόμενο αυτής της κατηγορίας μπορεί επίσης να αναθεωρηθεί από:" review_group_name: "όνομα ομάδας" require_topic_approval: "Απαιτήστε έγκριση συντονιστή για όλα τα νέα θέματα" require_reply_approval: "Απαιτήστε έγκριση συντονιστή για όλες τις νέες απαντήσεις" + posting_review_modes: + no_one: "Κανέναν" + everyone: "Όλοι" this_year: "φέτος" position: "Θέση στη σελίδα κατηγοριών:" + default_position: "Προεπιλεγμένη θέση" + position_disabled: "Οι κατηγορίες θα εμφανίζονται κατά σειρά δραστηριότητας. Για να ελέγχετε τη σειρά των κατηγοριών στις λίστες, ενεργοποιήστε τη ρύθμιση 'fixed category positions'." minimum_required_tags: "Ελάχιστος αριθμός ετικετών που απαιτούνται σε ένα θέμα:" default_slow_mode: 'Ενεργοποιήστε την "Αργή λειτουργία" για νέα θέματα σε αυτήν την κατηγορία.' subcategory_of: "Υποκατηγορία του..." @@ -4233,10 +4406,13 @@ el: group_restricted: "Ιδιωτική" who_can_see: "Ποιος μπορεί να δει αυτή την κατηγορία" who_can_post: "Ποιος μπορεί να δημοσιεύσει σε αυτήν την κατηγορία" + which_groups_can_access: "Ποιες ομάδες μπορούν να δουν και να δημοσιεύσουν σε αυτήν την κατηγορία" more_options_hint: "Περισσότερα δικαιώματα διαθέσιμα στις προχωρημένες ρυθμίσεις." + inherited_from_parent: "Τα δικαιώματα κληρονομούνται από τη γονική κατηγορία. Για να βελτιώσετε, επισκεφθείτε τις προχωρημένες ρυθμίσεις." num_auto_bump_daily: "Αριθμός ανοιχτών θεμάτων για αυτόματη ώθηση καθημερινά:" navigate_to_first_post_after_read: "Μεταβείτε στην πρώτη ανάρτηση μετά την ανάγνωση των θεμάτων" notifications: + title: "αλλαγή επιπέδου ειδοποιήσεων για αυτήν την κατηγορία" watching: title: "Επιτηρείται" watching_first_post: @@ -4287,7 +4463,7 @@ el: title: "Αναφορά παράνομου περιεχομένου" description: "Για να αναφέρετε παράνομο περιεχόμενο, παρακαλούμε επικοινωνήστε στο %{email}" flagging: - title: "Σας ευχαριστούμε που κρατάτε την κοινότητα μας πολιτισμένη!" + title: "Σας ευχαριστούμε που κρατάτε την κοινότητά μας πολιτισμένη!" action: "Αναφορά Ανάρτησης" take_action_options: default: @@ -4317,6 +4493,8 @@ el: notify_user_textarea_label: "Μήνυμα για το χρήστη" custom_placeholder_notify_moderators: "Παρακαλούμε πες τι ακριβως είναι αυτό που σε ανησυχεί. Αν είναι δυνατό, παράπεμψε σε σχετικούς συνδέσμους και παραδείγματα." notify_moderators_textarea_label: "Μήνυμα για τους συντονιστές" + custom_placeholder_illegal: "Παρακαλούμε ενημερώστε μας συγκεκριμένα για ποιον λόγο πιστεύετε ότι το περιεχόμενο αυτό είναι παράνομο, και παρέχετε σχετικούς συνδέσμους και παραδείγματα όπου είναι δυνατόν." + confirmation_illegal: "Ό,τι έγραψα παραπάνω είναι ακριβές και πλήρες." custom_message: at_least: one: "βάλε τουλάχιστον %{count} χαρακτήρα" @@ -4328,6 +4506,7 @@ el: one: "%{count} απομένει" other: "%{count} απομένουν" flagging_topic: + title: "Σας ευχαριστούμε που κρατάτε την κοινότητά μας πολιτισμένη!" action: "Αναφορά Θέματος" notify_action: "Μήνυμα" topic_map: @@ -4375,6 +4554,8 @@ el: personal_message: title: "Αυτό το θέμα είναι ένα προσωπικό μήνυμα" help: "Αυτό το θέμα είναι ένα προσωπικό μήνυμα" + visibility_reasons: + bulk_action: "Η ορατότητα αυτού του θέματος άλλαξε λόγω μιας μαζικής ενέργειας που πραγματοποιήθηκε από έναν χρήστη" posts: "Αναρτήσεις" pending_posts: label: "Εκκρεμή" @@ -4506,9 +4687,9 @@ el: today: "Σήμερα" custom: "Προσαρμοσμένο" permission_types: - full: "Δημιούργησε / Απάντησε / Δες" - create_post: "Απάντησε / Δες" - readonly: "Δες" + full: "Δημιουργία / Απάντηση / Προβολή" + create_post: "Απάντηση / Προβολή" + readonly: "Προβολή" preloader_text: "Φόρτωση" lightbox: download: "Κατέβασμα" @@ -4542,6 +4723,7 @@ el: latest: "%{shortcut} Τελευταία" new: "%{shortcut} Νέα" unread: "%{shortcut} Αδιάβαστα" + unseen: "%{shortcut} Αδιάβαστες" categories: "%{shortcut} Κατηγορίες" top: "%{shortcut} Κορυφαία" bookmarks: "%{shortcut} Σελιδοδείκτες" @@ -4556,6 +4738,7 @@ el: back: "%{shortcut} Πίσω" up_down: "%{shortcut} Μετακίνηση επιλογής ↑ ↓" open: "%{shortcut} Άνοιγμα επιλεγμένου θέματος" + open_new_window: "%{shortcut} Άνοιγμα επιλεγμένου θέματος σε νέα καρτέλα/παράθυρο" next_prev: "%{shortcut} Επόμενη/Προηγούμενη ενότητα" go_to_unread_post: "%{shortcut} Μετάβαση στην πρώτη αδιάβαστη ανάρτηση" application: @@ -4704,16 +4887,21 @@ el: other: "επιλέξτε %{count} ετικέτες από '%{name}'…" info: "Εμφάνιση πληροφοριών ετικέτας" default_info: "Αυτή η ετικέτα δεν περιορίζεται σε καμία κατηγορία και δεν έχει συνώνυμα." - category_restricted: "Αυτή η ετικέτα περιορίζεται σε κατηγορίες στις οποίες δεν έχετε άδεια πρόσβασης." + category_restricted: "Αυτή η ετικέτα περιορίζεται σε κατηγορίες στις οποίες δεν έχετε δικαίωμα πρόσβασης." synonyms: "Συνώνυμα" synonyms_description: "Όταν χρησιμοποιούνται οι ακόλουθες ετικέτες, θα αντικατασταθούν με %{base_tag_name}." save: "Αποθήκευση ονόματος και περιγραφής της ετικέτας" tag_groups_info: one: 'Αυτή η ετικέτα ανήκει στην ομάδα "%{tag_groups}".' other: "Αυτή η ετικέτα ανήκει σε αυτές τις ομάδες: %{tag_groups}." + tag_groups_info_prefix: + one: "Αυτή η ετικέτα ανήκει στην ομάδα " + other: "Αυτή η ετικέτα ανήκει σε αυτές τις ομάδες: " category_restrictions: one: "Μπορεί να χρησιμοποιηθεί μόνο σε αυτήν την κατηγορία:" other: "Μπορεί να χρησιμοποιηθεί μόνο σε αυτές τις κατηγορίες:" + restricted_to: "Περιορίζεται σε" + no_synonyms: "Αυτή η ετικέτα δεν έχει συνώνυμα." edit_synonyms: "Επεξεργασία συνωνύμων" add_synonyms_label: "Προσθήκη συνωνύμων:" add_synonyms: "Προσθήκη" @@ -4733,7 +4921,30 @@ el: other: "Τα %{count} συνώνυμά του θα διαγραφούν επίσης." edit_tag: "Επεξεργασία ονόματος και περιγραφής ετικέτας" edit: "Επεξεργασία αυτής της ετικέτας" - description: "Περιγραφή (μέγιστο 1000 χαρακτήρες)" + description: "Περιγραφή" + settings: + title: "Ρυθμίσεις" + edit_title: "Επεξεργασία ετικέτας: %{name}" + edit_tag_prefix: "Επεξεργασία ετικέτας:" + select_tag: "Επιλέξτε μια ετικέτα για επεξεργασία" + general: "Γενικά" + localizations: "Τοπικοποιήσεις" + back: "Πίσω" + name: "Όνομα" + slug: "Slug" + name_placeholder: "Όνομα ετικέτας" + saved: "Οι ρυθμίσεις ετικέτας αποθηκεύτηκαν" + no_synonyms: "Δεν έχουν οριστεί συνώνυμα για αυτήν την ετικέτα." + add_synonym_placeholder: "Αναζήτησε ετικέτες για προσθήκη ως συνώνυμα..." + synonyms_subtitle: "Όταν χρησιμοποιούνται οι ακόλουθες ετικέτες, θα αντικατασταθούν με %{name}" + save: "Αποθήκευση ετικέτας" + delete: "Διαγραφή ετικέτας" + localization: + hint: "Προσθέστε τοπικοποιήσεις για να εμφανίζονται διαφορετικά ονόματα ετικετών για χρήστες σε διαφορετικές γλώσσες και διαλέκτους." + name: "Όνομα" + description: "Περιγραφή" + add: "Προσθήκη τοπικοποίησης" + remove: "Αφαίρεση τοπικοποίησης" sort_by: "Ταξινόμηση κατά:" sort_by_count: "πλήθος" sort_by_name: "όνομα" @@ -4829,7 +5040,7 @@ el: share: "Κοινοποίηση" dismiss: "Παράβλεψη" safe_mode: - enabled: "Η λειτουργία ασφαλείας είναι ενεργοποιημένη, για να εξέλθεις από τη λειτουργία ασφαλείας κλείσε το παράθυρο περιήγησης" + enabled: "Η ασφαλής λειτουργία είναι ενεργοποιημένη, για να εξέλθετε από την ασφαλή λειτουργία κλείστε αυτό το παράθυρο περίηγησης" image_removed: "(η εικόνα αφαιρέθηκε)" pause_notifications: title: "Παύση ειδοποιήσεων για…" @@ -4855,6 +5066,8 @@ el: no_replies_title_others: "%{username} δεν έχει απαντήσει σε κανένα θέμα ακόμη" no_drafts_title: "Δεν έχετε ξεκινήσει κανένα προσχέδιο" no_drafts_body: "Δεν είστε έτοιμοι να δημοσιεύσετε; Θα αποθηκεύσουμε αυτόματα ένα νέο προσχέδιο και θα το παραθέσουμε εδώ κάθε φορά που ξεκινάτε να συνθέτετε ένα θέμα, μια απάντηση ή ένα προσωπικό μήνυμα. Επιλέξτε το κουμπί ακύρωσης για απόρριψη ή αποθηκεύστε το προσχέδιο σας για να συνεχίσετε αργότερα." + no_likes_title: "Δεν έχετε κάνει \"Μου αρέσει\" σε κανένα θέμα ακόμη" + no_likes_title_others: "Ο χρήστης %{username} δεν έχει κάνει \"Μου αρέσει\" σε κανένα θέμα ακόμη" no_topics_title: "Δεν έχεις ξεκινήσει κανένα θέμα ακόμη" no_topics_title_others: "Ο χρήστης %{username} δεν έχει ξεκινήσει κανένα θέμα ακόμη" no_read_topics_title: "Δεν έχεις διαβάσει κανένα θέμα ακόμη" @@ -4904,7 +5117,7 @@ el: add: "Προσθήκη προσαρμοσμένης ενότητας" edit: "Επεξεργασία προσαρμοσμένης ενότητας" save: "Αποθήκευση" - delete: "Σβήσιμο" + delete: "Διαγραφή" delete_confirm: "Σίγουρα θέλετε να διαγράψετε αυτήν την ενότητα;" delete_public_confirm: "Αυτή η ενότητα είναι ορατή σε όλους, σίγουρα θέλετε να τη διαγράψετε;" update_public_confirm: "Οι αλλαγές θα είναι ορατές σε όλους σε αυτόν τον ιστότοπο. Είστε σίγουροι;" @@ -5074,6 +5287,18 @@ el: tel: "Παρακαλούμε εισάγετε έναν έγκυρο αριθμό τηλεφώνου." text: "Παρακαλούμε εισάγετε μια έγκυρη τιμή." url: "Παρακαλούμε εισάγετε ένα έγκυρο URL." + too_short: + one: "Η είσοδος πρέπει να είναι τουλάχιστον %{count} χαρακτήρας." + other: "Η είσοδος πρέπει να είναι τουλάχιστον %{count} χαρακτήρες." + too_long: + one: "Η είσοδος πρέπει να είναι μικρότερη από %{count} χαρακτήρα." + other: "Η είσοδος πρέπει να είναι μικρότερη από %{count} χαρακτήρες." + range_overflow: + one: "Η είσοδος πρέπει να είναι μικρότερη από %{count}." + other: "Η είσοδος πρέπει να είναι μικρότερη από %{count}." + range_underflow: + one: "Η είσοδος πρέπει να είναι μεγαλύτερη από %{count}." + other: "Η είσοδος πρέπει να είναι μεγαλύτερη από %{count}." pattern_mismatch: "Παρακαλούμε αντιστοιχίστε την απαιτούμενη μορφή." bad_input: "Παρακαλούμε εισάγετε μια έγκυρη είσοδο." table_builder: @@ -5088,6 +5313,7 @@ el: new_row: "στο τέλος μιας γραμμής για εισαγωγή μιας νέας γραμμής." new_col: "στο τέλος μιας στήλης για εισαγωγή μιας νέας στήλης." options: "Κάντε δεξί κλικ στα κελιά για πρόσβαση σε περισσότερες επιλογές από ένα αναπτυσσόμενο μενού." + confirm_close: "Σίγουρα θέλετε να κλείσετε το εργαλείο δημιουργίας πινάκων; Οποιεσδήποτε μη αποθηκευμένες αλλαγές θα χαθούν." edit: btn_edit: "Επεξεργασία Πίνακα" modal: @@ -5109,6 +5335,7 @@ el: about: "Σχετικά" prompts: delete_selected_rows: "Σίγουρα θέλετε να διαγράψετε τις επιλεγμένες γραμμές;" + delete_selected_cols: "Σίγουρα θέλετε να διαγράψετε τις επιλεγμένες στήλες;" conflicts_with_merged_cells: "Υπάρχει σύγκρουση με ένα άλλο συγχωνευμένο κελί" invalid_merge_props: "Μη έγκυρες συγχωνευμένες ιδιότητες" cells_already_merged: "Το κελί έχει ήδη συγχωνευθεί" @@ -5132,6 +5359,7 @@ el: powered_by_discourse: "Βασισμένο στο Discourse" safari_15_warning: "Το πρόγραμμα περιήγησής σας σύντομα δεν θα είναι συμβατό με αυτήν την κοινότητα. Για να συνεχίσετε να συμμετέχετε εδώ, παρακαλούμε αναβαθμίστε το πρόγραμμα περιήγησής σας ή μάθετε περισσότερα." filter: + placeholder: "Φιλτράρετε θέματα ανά κατηγορία, ετικέτα ή άλλα κριτήρια" description: yesterday: "Χτες" last_week: "Προηγούμενη εβδομάδα" @@ -5207,11 +5435,15 @@ el: toggle_localized: translated: "Η σελίδα είναι μεταφρασμένη από μηχανή. Κάντε κλικ για να δείτε το πρωτότυπο." not_translated: "Η σελίδα δεν έχει μεταφραστεί. Κάντε κλικ για μετάφραση." + translations_enabled: "Μεταφράσεις ενεργοποιημένες" + translations_disabled: "Μεταφράσεις απενεργοποιημένες" language_switcher: title: "Αλλαγή γλώσσας ιστότοπου" admin_js: + type_to_filter: "Πληκτρολογήστε για φιλτράρισμα…" settings: "Ρυθμίσεις" - reset_filter: "Επαναφορά" + reset_filter: "Επαναφορά φίλτρου" + toggle_filters: "Εναλλαγή αναπτυσσόμενων φίλτρων" admin: title: "Διαχειριστής" moderator: "Συντονιστής" @@ -5226,6 +5458,10 @@ el: title: "Λίστα διαθέσιμων αναφορών" sidebar_title: "Αναφορές" back: "Πίσω σε όλες τις αναφορές" + group_traffic: "Κίνηση" + group_members: "Μέλη" + group_content: "Περιεχόμενο & Υγεία" + group_other: "Άλλα" config_sections: account: title: "Λογαριασμός" @@ -5241,6 +5477,8 @@ el: title: "Ασφάλεια" plugins: title: "Πρόσθετα" + advanced: + title: "Προχωρημένα" upcoming_changes: name: "Όνομα" plugin: "Πρόσθετο" @@ -5250,17 +5488,21 @@ el: show_image: "Εμφάνιση εικόνας" groups_updated: "Οι ομάδες ενημερώθηκαν!" save_groups: "Αποθήκευση ομάδων" + add_groups_to_enable: "Προσθέστε ομάδες για να ενεργοποιήσετε αυτήν τη λειτουργία" no_changes_to_save: "Δεν υπάρχουν αλλαγές για αποθήκευση" select_groups: "Επιλέξτε ομάδες…" + show_related_settings: "Εμφάνιση σχετικών ρυθμίσεων..." + change_enabled_for_success: "Έχετε ενεργοποιήσει αυτήν την αλλαγή για %{enabledFor}" change_disabled: "Έχετε εξαιρεθεί από αυτήν την αλλαγή" permanent_notice: "Αυτή η αλλαγή είναι πλέον μόνιμη και σύντομα θα καταργηθεί. Δεν μπορείτε πλέον να εξαιρεθείτε." permanent_soon_notice: "Αυτή η αλλαγή θα γίνει σύντομα μόνιμη. Δεν θα μπορείτε πλέον να εξαιρεθείτε." + permanent_no_group_selection: "Κ/Α, οι μόνιμες αλλαγές ισχύουν για όλες τις ομάδες." no_changes: "Δεν υπάρχουν επερχόμενες αλλαγές αυτήν τη στιγμή." preview: "Προεπισκόπηση" enabled_for_options: no_one: "Κανέναν" everyone: "Όλοι" - staff: "Μόνο το προσωπικό" + staff: "%{staffGroupName} μόνο" specific_groups: "Συγκεκριμένη/ες ομάδα/ες" specific_groups_with_group_names: one: "η ομάδα %{groupNames}" @@ -5280,7 +5522,10 @@ el: no_results: "Καμία επερχόμενη αλλαγή δεν αντιστοιχεί με το φίλτρο σας" all: "Όλα" enabled: "Ενεργοποιημένα" + enabled_for_staff: "Ενεργοποιημένη για %{staffGroupName}" + enabled_for_specific_groups: "Ενεργοποιημένη για συγκεκριμένες ομάδες" disabled: "Απενεργοποιημένο" + impact_type_feature: "Λειτουργία" impact_type_other: "Άλλα" status_all: "Όλες οι καταστάσεις" status_experimental: "Πειραματικό" @@ -5305,11 +5550,15 @@ el: keywords: "αναφορά|έλεγχος|ανεπιθύμητο|παράνομο" files: title: "Αρχεία" + header_description: "Ρυθμίσεις που ελέγχουν τα όρια μεγέθους και τύπου αρχείων, τα μεγέθη και τις πηγές avatar, τον αποθηκευτικό χώρο αρχείων, την ποιότητα και συμπίεση εικόνας και πολλά άλλα" legal: title: "Νομικά" theme_site_settings: title: "Ρυθμίσεις θέματος ιστότοπου" header_description: "Εμφανίζει όλες τις ρυθμίσεις του θέματος του ιστότοπου και τα θέματα που τις παρακάμπτουν αυτήν τη στιγμή" + localization: + title: "Τοπικοποίηση" + header_description: "Διαμορφώστε τη γλώσσα διεπαφής της κοινότητάς σας και άλλες επιλογές τοπικοποίησης για τα μέλη σας" upcoming_changes: title: "Επερχόμενες αλλαγές" login: @@ -5320,6 +5569,8 @@ el: title: "Ρυθμίσεις" authenticators: title: "Συνδέσεις κοινωνικών δικτύων" + discourseconnect: + title: "Discourse Connect" discourse_id: title: "Discourse ID" discourse_id: @@ -5342,7 +5593,6 @@ el: help_text: "Το συνιστώμενο μέγεθος είναι 600 x 80 pixel." large_icon: title: "Τετράγωνο εικονίδιο" - description: "Μια τετράγωνη εκδοχή της εικόνας του λογότυπου εμφανίζεται στο επάνω μέρος της διαχείρισης και είναι επίσης το λογότυπο της εφαρμογής στην αρχική οθόνη του κινητού." help_text: "Το συνιστώμενο μέγεθος είναι 512 x 512 pixel." square_icon_dark: required: "Χρήση διαφορετικού τετράγωνου εικονιδίου για τη σκοτεινή λειτουργία;" @@ -5373,9 +5623,14 @@ el: manifest_icon: help_text: "Το συνιστώμενο μέγεθος είναι 512 x 512 pixel." apple_touch_icon: + title: "Εικονίδιο αφής Apple" + description: "Εικονίδιο που χρησιμοποιείται για συσκευές αφής Apple. Εάν αφεθεί κενό, θα χρησιμοποιηθεί το large_icon." help_text: "Το συνιστώμενο μέγεθος είναι 180 x 180 pixel. Δεν συνιστάται διαφανές φόντο." digest_logo: + description: "Η εναλλακτική εικόνα λογότυπου που χρησιμοποιείται στο επάνω μέρος της σύνοψης email του ιστότοπού σας. Εάν αφεθεί κενό, θα χρησιμοποιηθεί η εικόνα από τη ρύθμιση `logo`." help_text: "Χρησιμοποιήστε μια ευρεία ορθογώνια εικόνα. Μην χρησιμοποιείτε εικόνα SVG." + opengraph_image: + title: "Εικόνα OpenGraph" x_summary_large_image: help_text: "το συνιστώμενο μέγεθος είναι τουλάχιστον 280 x 150 pixel. Μην χρησιμοποιείτε εικόνα SVG." fonts: @@ -5391,10 +5646,17 @@ el: title: "Γραμματοσειρά επικεφαλίδας" default_text_size: title: "Προεπιλεγμένο μέγεθος κειμένου" + description: "Αυτό το μέγεθος μπορεί στη συνέχεια να προσαρμοστεί από κάθε χρήστη ανάλογα με τις προτιμήσεις του." backfill_modal: + title: "Εφαρμογή νέων προεπιλεγμένων ρυθμίσεων κειμένου;" + description: + one: "Έχετε ενημερώσει το προεπιλεγμένο μέγεθος κειμένου. Θέλετε να εφαρμόσετε αυτήν την αλλαγή στον %{count} υπάρχοντα χρήστη;" + other: "Έχετε ενημερώσει το προεπιλεγμένο μέγεθος κειμένου. Θέλετε να εφαρμόσετε αυτήν την αλλαγή στους %{count} υπάρχοντες χρήστες;" modal_yes: "Ναι" + modal_no: "Όχι, εφαρμογή μόνο από εδώ και στο εξής" welcome_banner: title: "Banner καλωσορίσματος" + saved: "Οι ρυθμίσεις του banner καλωσορίσματος αποθηκεύτηκαν με επιτυχία." form: enabled_themes: label: "Ενεργοποιημένο στα θέματα..." @@ -5402,10 +5664,12 @@ el: select_label: "Επιλογή θεμάτων" background_image: label: "Εικόνα φόντου" + description: "Αυτή η εικόνα θα εμφανίζεται πίσω από το κείμενο του banner." text_color: label: "Χρώμα κειμένου" page_visibility: label: "Ορατότητα σελίδας" + description: "Επιλέξτε πού θα πρέπει να εμφανίζεται το banner." options: top_menu_pages: "Σελίδες μενού κορυφής" homepage: "Αρχική σελίδα μόνο" @@ -5413,6 +5677,7 @@ el: all_pages: "Όλες οι σελίδες" location: label: "Τοποθεσία" + description: "Επιλέξτε πού θα πρέπει να εμφανίζεται το banner στη σελίδα." options: above_topic_content: "Πάνω από το περιεχόμενο του θέματος" below_site_header: "Κάτω από την κεφαλίδα του ιστότοπου" @@ -5424,13 +5689,21 @@ el: description: "Διαθέσιμες μεταβλητές: %{site_name}, %{preferred_display_name}" placeholder: "Καλώς ήρθες, %{preferred_display_name}!" header_logged_in: + label: "Επικεφαλίδα για συνδεδεμένα μέλη" + description: "Διαθέσιμες μεταβλητές: %{site_name}, %{preferred_display_name}" placeholder: "Καλώς ήρθες πίσω, %{preferred_display_name}!" header_anonymous: label: "Κεφαλίδα για ανώνυμους επισκέπτες" description: "Διαθέσιμη μεταβλητή: %{site_name}" placeholder: "Καλώς ήλθατε στην %{site_name}!" + subheader_logged_in: + label: "Υποκεφαλίδα για συνδεδεμένα μέλη" + description: "Δευτερεύον κείμενο που εμφανίζεται κάτω από την επικεφαλίδα για συνδεδεμένους χρήστες." + placeholder: "Δείτε τι νέο υπάρχει στην κοινότητα" subheader_anonymous: label: "Υποκεφαλίδα για ανώνυμους επισκέπτες" + description: "Δευτερεύον κείμενο που εμφανίζεται κάτω από την επικεφαλίδα για ανώνυμους επισκέπτες." + placeholder: "Γίνετε μέλος της κοινότητάς μας για να συμμετάσχετε σε συζητήσεις" search_placeholder: placeholder: "Αναζητήστε θέματα..." navigation: @@ -5478,7 +5751,7 @@ el: title: "Αναφορές" sub_pages: settings: - title: "Ρυθμίσεις πίνακα ελέγχου" + title: "Ρυθμίσεις" badges: title: "Παράσημα" analytics: @@ -5505,6 +5778,8 @@ el: header_description: "Ανακατευθύνσεις προς εφαρμογή σε διευθύνσεις URL που δεν είναι γνωστές στο forum" user_defaults: title: "Προεπιλογές χρήστη" + header_description: "Ορίστε προεπιλεγμένες τιμές για ρυθμίσεις που επηρεάζουν τους χρήστες σας, διαμορφώνοντας την εμπειρία ενσωμάτωσής τους" + keywords: "χρήστες|ενσωμάτωση|νέοι" user_fields: title: "Πεδία χρήστη" color_palettes: @@ -5573,16 +5848,21 @@ el: header_description: "Τα URL της λίστας χρησιμοποιήθηκαν σε αναρτήσεις από χρήστες που έχουν εντοπιστεί πως αναρτούν ανεπιθύμητα μηνύματα" search_logs: title: "Αναζήτηση καταγραφών" + header_description: "Προβολή ενός αρχείου καταγραφής αναζητήσεων που έχουν πραγματοποιηθεί" plugins: title: "Εγκατεστημένα πρόσθετα" header_description: "Τα πρόσθετα ενισχύουν την κοινότητά σας με πρόσθετες λειτουργίες. Τόσο τα προεγκατεστημένα όσο και τα προσαρμοσμένα πρόσθετα παρατίθενται παρακάτω." api_keys: title: "Κλειδιά API" + keywords: "διακριτικό|πεδίο εφαρμογής" webhooks: title: "Webhooks" keywords: "συμβάν|φορτίο|url" embedding: title: "Ενσωμάτωση" + form_templates: + title: "Πρότυπα φόρμας" + header_description: "Τα πρότυπα φόρμας σάς επιτρέπουν να επιβάλλετε μια δομημένη φόρμα με επικύρωση δεδομένων ως μέρος της ροής δημιουργίας θεμάτων" theme_site_settings: setting: "Ρύθμιση" overridden_by: "Παρακάμφθηκε από" @@ -5592,28 +5872,14 @@ el: add: "Μετάβαση στις ρυθμίσεις θέματος ιστότοπου" filter_no_results: "Καμία ρύθμιση θέματος ιστότοπου δεν αντιστοιχεί με το φίλτρο σας" search: + modal_title: "Αναζητήστε τα πάντα στη διαχείριση" title: "Αναζήτηση" + instructions: "Αναζητήστε τα πάντα στη διαχείριση..." full_page_link: "Εναλλαγή σε αναζήτηση πλήρους σελίδας" no_results: 'Δεν μπορέσαμε να βρούμε κάτι που να αντιστοιχεί με "%{filter}".' result_count: one: '%{count} αποτέλεσμα για "%{filter}"' other: '%{count} αποτελέσματα για "%{filter}"' - result_types: - page: - one: "Σελίδα" - other: "Σελίδες" - report: - one: "Αναφορά" - other: "Αναφορές" - setting: - one: "Ρύθμιση" - other: "Ρυθμίσεις" - theme: - one: "Θέμα" - other: "Θέματα" - component: - one: "Συστατικό" - other: "Συστατικά" new_features: title: "Τι νέο υπάρχει;" check_for_updates: "Ελέγξτε για ενημερώσεις" @@ -5626,8 +5892,8 @@ el: critical_available: "Μια κρίσιμη ενημέρωση είναι διαθέσιμη" updates_available: "Υπάρχουν διαθέσιμες ενημερώσεις" please_update: "Παρακαλούμε ενημερώστε!" - no_check_performed: "Δεν έγινε έλεγχος για ενημερώσεις. Βεβαιώσου πως το sidekiq τρέχει." - stale_data: "Δεν έγινε έλεγχος για ενημερώσεις εδώ και αρκετό καιρό. Βεβαιώσου πως το sidekiq τρέχει." + no_check_performed: "Δεν έγινε έλεγχος για ενημερώσεις. Βεβαιωθείτε ότι το Sidekiq εκτελείται." + stale_data: "Δεν έγινε έλεγχος για ενημερώσεις τον τελευταίο καιρό. Βεβαιωθείτε ότι το Sidekiq εκτελείται." version_check_pending: "Φαίνεται ότι ενημερώσατε πρόσφατα. Φανταστικά!" installed_version: "Εγκατεστημένα" latest_version: "Τελευταία" @@ -5636,13 +5902,6 @@ el: new_features: title: "Τι νέο υπάρχει;" learn_more: "Μάθε περισσότερα..." - experimental: "Πειραματικό" - experiment_tooltip: - content_disabled: "Δώστε μια ματιά στην υπό ανάπτυξη νεότερη λειτουργία μας! Είναι ακόμα στο πειραματικό στάδιο, οπότε μπορεί να το αφαιρέσουμε ανά πάσα στιγμή. Μπορείτε να εξαιρεθείτε όποτε θέλετε.

Αλλάζοντας αυτήν την επιλογή, θα ενεργοποιήσει τη λειτουργία για όλους τους χρήστες." - feature_tooltip: - title_disabled: "Δοκιμάστε αυτήν τη λειτουργία" - title_enabled: "Απενεργοποίηση λειτουργίας" - content_disabled: "Δοκιμάστε αυτήν τη νέα λειτουργία! Μπορείτε να εξαιρεθείτε όποτε θέλετε.

Αλλάζοντας αυτήν την επιλογή, η λειτουργία θα είναι διαθέσιμη σε όλους τους χρήστες." last_checked: "Τελευταίος έλεγχος" refresh_problems: "Ανανέωση" no_problems: "Δεν βρέθηκε κανένα πρόβλημα." @@ -5705,10 +5964,11 @@ el: all: "Όλα" view_table: "πίνακας" view_graph: "γράφημα" - refresh_report: "Ανανέωση αναφοράς" + refresh_report: "Ανανέωση" daily: Ημερήσιες monthly: Μηνιαίες weekly: Εβδομαδιαίες + chart_group_period: "Επιλέξτε μια περίοδο" value_so_far: "%{value} (μέχρι στιγμής)" dates: "Ημερομηνίες (UTC)" groups: "Όλες οι ομάδες" @@ -5819,6 +6079,7 @@ el: cancel: "Ακύρωση" continue: "Συνεχίστε" copy_key: "Αντιγραφή" + key_copied_to_clipboard: "Το κλειδί API αντιγράφηκε στο πρόχειρο" back: "Επιστροφή στα κλειδιά API" revoke: "Ανακάλεσε" undo_revoke: "Αναίρεση ανάκλησης" @@ -5895,9 +6156,13 @@ el: list: Λίστα ετικετών. tag_groups: list: Λήψη μιας λίστας των ομάδων ετικετών. + show: Λήψη μιας ομάδας ετικετών με βάση το id. create: Δημιουργία ομάδας ετικετών. categories: list: Λήψη μιας λίστας των κατηγοριών. + show: Λήψη μιας κατηγορίας με βάση το id. + uploads: + create: Μεταφορτώνει ένα νέο αρχείο ή ξεκινά άμεσες μεταφορτώσεις μεμονωμένων ή πολλαπλών τμημάτων σε εξωτερικό χώρο αποθήκευσης. users: bookmarks: Λίστα σελιδοδεικτών χρηστών. Επιστρέφει τις υπενθυμίσεις σελιδοδεικτών όταν χρησιμοποιείτε τη μορφή ICS. sync_sso: Συγχρονισμός χρήστη χρησιμοποιώντας το DiscourseConnect. @@ -5938,7 +6203,7 @@ el: edit: "Επεξεργασία" save: "Αποθήκευση" show: "Συμβάντα" - delete: "Σβήσιμο" + delete: "Διαγραφή" cancel: "Ακύρωση" description_label: "Εναύσματα συμβάντων" controls: "Έλεγχοι" @@ -6095,12 +6360,15 @@ el: emoji: "Emoji" navigation: "Πλοήγηση" themes_and_components: + title: "Θέματα και στοιχεία" keywords: "επέκταση" site_texts: "Κείμενα ιστότοπου" email_settings: title: "Ρυθμίσεις ηλεκτρονικού ταχυδρομείου" sidebar_link: appearance: "Εμφάνιση" + server_setup: + title: "Εγκατάσταση & αρχεία καταγραφής διακομιστή" security: title: "Ασφάλεια" sidebar_link: @@ -6146,12 +6414,18 @@ el: city_for_disputes_help: | Ορίστε την πόλη για την επίλυση νομικών διαφορών που σχετίζονται με αυτό το φόρουμ. extra_groups: + heading: "Κατάλογος ομάδων" + description: "Επιπλέον ομάδες που θα εμφανίζονται στη σελίδα Σχετικά." groups: "Ομάδες" order: "Σειρά ταξινόμησης" + show_description: "Συμπερίληψη περιγραφής" optional: "(προαιρετικό)" update: "Ενημέρωση" toasts: + general_settings_saved: "Οι γενικές ρυθμίσεις αποθηκεύτηκαν" + contact_information_saved: "Τα στοιχεία επικοινωνίας αποθηκεύτηκαν" your_organization_saved: "Ο οργανισμός σας αποθηκεύτηκε" + extra_groups_saved: "Ο κατάλογος ομάδων αποθηκεύτηκε" saved: "αποθηκεύτηκε!" flags: edit_header: "Επεξεργασία Αναφοράς" @@ -6160,7 +6434,7 @@ el: add: "Προσθήκη αναφοράς" edit: "Επεξεργασία" back: "Πίσω στις αναφορές" - delete: "Σβήσιμο" + delete: "Διαγραφή" delete_confirm: 'Σίγουρα θέλετε να διαγράψετε το «%{name}»;' flags_tab: "Σημάνσεις" settings: "Ρυθμίσεις αναφορών" @@ -6191,10 +6465,10 @@ el: move_down: "Μετακίνηση κάτω" permalinks: edit: "Επεξεργασία" - delete: "Σβήσιμο" + delete: "Διαγραφή" embeddable_host: edit: "Επεξεργασία" - delete: "Σβήσιμο" + delete: "Διαγραφή" more_options: title: "Περισσότερες επιλογές" themes_and_components: @@ -6230,12 +6504,13 @@ el: update_available: "Διαθέσιμη ενημέρωση!" export: "Εξαγωγή" convert: "Μετατρέψτε" - delete: "Σβήσιμο" + delete: "Διαγραφή" filter_by: "Φιλτράρισμα κατά" filter_by_all: "Όλα" filter_by_used: "Χρησιμοποιημένο" filter_by_unused: "Αχρησιμοποίητο" filter_by_updates_available: "Διαθέσιμες ενημερώσεις" + new_update_for_component: "Νέα ενημέρωση διαθέσιμη για %{name}!" component_up_to_date: 'Το "%{name}" είναι ενημερωμένο.' updated_successfully: 'Το "%{name}" ενημερώθηκε με επιτυχία.' delete_confirm: 'Σίγουρα θέλετε να διαγράψετε το «%{name}»;' @@ -6250,7 +6525,7 @@ el: title: "Περισσότερες επιλογές" move_up: "Μετακίνηση πάνω" move_down: "Μετακίνηση κάτω" - delete: "Σβήσιμο" + delete: "Διαγραφή" delete_successful: "Πεδίο χρήστη διαγράφηκε." save_successful: "Πεδίο χρήστη αποθηκεύτηκε." color_palettes: @@ -6259,7 +6534,7 @@ el: copied_to_clipboard: "Αντιγράφτηκε στο Clipboard" copy_to_clipboard_error: "Σφάλμα αντιγραφής δεδομένων στο Clipboard" duplicate: "Διπλότυπο" - delete: "Σβήσιμο" + delete: "Διαγραφή" color_options: title: "Επιλογές χρωμάτων" toggle: "Επιλέξιμο από τον χρήστη" @@ -6268,6 +6543,7 @@ el: title: "Χρώματα" save_changes: "Αποθήκευση αλλαγών" unsaved_changes: "Έχετε μη αποθηκευμένες αλλαγές" + copy_of: "Αντίγραφο του %{name}" copy_created: 'Δημιουργήθηκε ένα νέο αντίγραφο του "%{name}"' invalid_color_length: "Το χρώμα πρέπει να έχει τη μορφή #rrggbb ή #rgb" plugins: @@ -6295,11 +6571,15 @@ el: no_results: "Κανένα πρόσθετο δεν αντιστοιχεί με τα φίλτρα σας" navigation_menu: sidebar: "Πλαϊνή μπάρα" + header_dropdown: "Αναπτυσσόμενο μενού επικεφαλίδας" backups: title: "Αντίγραφα ασφαλείας" + files_title: "Αρχεία αντιγράφου ασφαλείας" menu: backups: "Αντίγραφα ασφαλείας" + backup_files: "Αρχεία αντιγράφου ασφαλείας" logs: "Αρχεία καταγραφής" + none: "Δεν υπάρχει διαθέσιμο αντίγραφο ασφαλείας" read_only: enable: title: "Ενεργοποίηση της λειτουργίας \"μόνο-ανάγνωση\"" @@ -6338,7 +6618,7 @@ el: title: "Αποστολή email με σύνδεσμο λήψης" alert: "Σας στάλθηκε με email ένας σύνδεσμος για να κάνετε λήψη αυτού του αντιγράφου ασφαλείας" destroy: - title: "Σβήσιμο" + title: "Διαγραφή" confirm: "Είσαι σίγουρος ότι θέλεις να σβήσεις αυτό το αντίγραφο ασφαλείας;" restore: label: "Επαναφορά" @@ -6377,7 +6657,7 @@ el: new: "Νέο" new_style: "Νέα Μορφή" install: "Εγκαταστήστε" - delete: "Σβήσιμο" + delete: "Διαγραφή" delete_confirm: 'Σίγουρα θέλετε να διαγράψετε το «%{theme_name}»;' bulk_delete: "Είστε σίγουροι;" color: "Χρώμα" @@ -6386,10 +6666,12 @@ el: copy_to_clipboard: "Αντιγραφή στο Clipboard" copied_to_clipboard: "Αντιγράφτηκε στο Clipboard" copy_to_clipboard_error: "Σφάλμα αντιγραφής δεδομένων στο Clipboard" + theme_owner: "Κάτοχος:" email_templates: title: "Διεύθυνση Email" subject: "Θέμα" multiple_subjects: "Αυτό το πρότυπο email έχει πολλά θέματα." + multiple_bodies: "Αυτό το πρότυπο email έχει πολλά σώματα." body: "Σώμα" revert: "Επαναφορά Αλλαγών" revert_confirm: "Είσαι βέβαιος πως θέλεις να επαναφέρεις τις αλλαγές;" @@ -6508,7 +6790,6 @@ el: add_all: "Προσθήκη όλων" import_web_tip: "Αποθηκευτικός χώρος που περιέχει το θέμα" direct_install_tip: "Σίγουρα θέλετε να εγκαταστήσετε το %{name} από το αποθετήριο που αναφέρεται παρακάτω;" - import_file_tip: ".tar.gz, .zip ή .dcstyle.json αρχείο που περιέχει θέμα" is_private: "Το θέμα βρίσκεται σε ένα ιδιωτικό αποθετήριο git" remote_branch: "Όνομα διακλάδωσης (προαιρετικό)" public_key: "Παραχωρήστε στο ακόλουθο δημόσιο κλειδί πρόσβαση στο αποθετήριο:" @@ -6539,6 +6820,9 @@ el: update_success: "%{theme} Η ενημέρωση ολοκληρώθηκε" up_to_date: "Το θέμα είναι ενημερωμένο, τελευταίος έλεγχος:" add: "Προσθήκη" + theme_settings: "Προσαρμοσμένες ρυθμίσεις θέματος" + theme_site_settings: "Ρυθμίσεις που το θέμα μπορεί να παρακάμψει" + edit_objects_theme_setting: "Επεξεργαστής ρυθμίσεων αντικειμένων" no_settings: "Αυτό το θέμα δεν έχει ρυθμίσεις." theme_translations: "Μεταφράσεις θέματος" empty: "Δεν υπάρχουν στοιχεία" @@ -6550,25 +6834,40 @@ el: imported_from_archive: "Αυτό το θέμα εισήχθη από ένα αρχείο .zip" scss: text: "CSS" + title: "Προσαρμοσμένοι κανόνες CSS με υποστήριξη για σύνταξη SCSS" + header: + text: "Πριν από την επικεφαλίδα" + title: "Βασική HTML που θα απεικονίζεται πάνω από την επικεφαλίδα Discourse" after_header: text: "Μετά το Header" + title: "Βασική HTML που θα απεικονίζεται κάτω από την επικεφαλίδα Discourse" footer: text: "Footer" + title: "Βασική HTML που θα απεικονίζεται στο κάτω μέρος της σελίδας" embedded_scss: text: "Embedded CSS" + title: "CSS που θα συμπεριλαμβάνεται όταν τα σχόλια του Discourse ενσωματώνονται σε άλλον ιστότοπο" + embedded_header: + text: "Ενσωματωμένη επικεφαλίδα" + title: "Βασική HTML που θα απεικονίζεται πάνω από τα σχόλια του Discourse όταν ενσωματώνονται σε άλλον ιστότοπο" color_definitions: text: "Ορισμοί χρωμάτων" title: "Εισαγωγή προσαρμοσμένων ορισμών χρωμάτων (μόνο για προχωρημένους χρήστες)" head_tag: text: "" + title: "HTML για εισαγωγή στο τέλος του , με υποστήριξη για ετικέτες script" body_tag: text: "" + title: "HTML για εισαγωγή στο τέλος του , με υποστήριξη για ετικέτες script" js: text: "JS" + title: "Αρχικοποιητής JavaScript με υποστήριξη για τη σύνταξη 'template tag' του Ember" all_filter: "Όλα" active_filter: "Ενεργοί" inactive_filter: "Ανενεργό" updates_available_filter: "Διαθέσιμες ενημερώσεις" + theme_setting_saved: "Ρύθμιση θέματος αποθηκεύτηκε!" + theme_site_setting_saved: "Ρύθμιση θέματος ιστότοπου αποθηκεύτηκε!" schema: title: "Επεξεργασία ρύθμισης %{name}" back_button: "Πίσω σε %{name}" @@ -6643,16 +6942,21 @@ el: name: "τέταρτο" header_background: name: "φόντο κεφαλίδας" + description: "Φόντο επικεφαλίδας" header_primary: name: "Κύρια περιοχή κεφαλίδας" + description: "Κείμενο και εικονίδια επικεφαλίδας" highlight: name: "τονισμός" danger: name: "κίνδυνος " + description: "Σφάλματα και ενέργειες διαγραφής" success: name: "επιτυχία" + description: "Επιτυχείς ενέργειες" love: name: "αγάπη" + description: "Κουμπί \"Μου αρέσει\"" selected: name: "επιλεγμένη" description: "Ενεργά ή επιλεγμένα στοιχεία" @@ -6665,6 +6969,7 @@ el: overridden: Το προεπιλεγμένο αρχείο robots.txt του ιστότοπού σας έχει παρακαμφθεί. email_style: title: "Στυλ email" + heading: "Προσαρμογή στυλ email" html: "HTML" css: "CSS" reset: "Επαναφορά στο προεπιλεγμένο" @@ -6675,11 +6980,16 @@ el: title: "Emails" settings: "Ρυθμίσεις" templates: "Πρότυπα" + templates_title: "Πρότυπα email" preview_digest: "Προεπισκόπηση σύνοψης" advanced_test: + title: "Προχωρημένη δοκιμή" desc: "Δείτε πώς το Discourse επεξεργάζεται τα emails. Για να μπορείτε να επεξεργαστείτε σωστά το email, παρακαλώ επικολλήστε παρακάτω ολόκληρο το αρχικό μήνυμα email." email: "Αρχικό μήνυμα" + run: "Εκτέλεση δοκιμής" text: "Σώμα επιλεγμένου κειμένου" + elided: "Παραλειπόμενο κείμενο" + sending_test: "Γίνεται αποστολή δοκιμαστικού email…" error: "ΣΦΑΛΜΑ - %{server_error}" test_error: "Υπήρξε πρόβλημα με την αποστολή του δοκιμαστικού μηνύματος email. Έλεγξε τις ρυθμίσεις email, βεβαιώσου πως ο πάροχός σου δεν μπλοκάρει τις συνδέσεις email και δοκίμασε πάλι." sent: "Στάλθηκε" @@ -6687,20 +6997,29 @@ el: bounced: "Επιστρεφόμενα μηνύματα" received: "Ελήφθη" rejected: "Απορρίφθηκε" + sent_at: "Στάλθηκε στις" time: "Ώρα" user: "Χρήστης" + email_type: "Τύπος email" + details_title: "Εμφάνιση λεπτομερειών email" + to_address: "Παραλήπτης" test_email_address: "διεύθυνση email για δοκιμή" + send_test: "Αποστολή δοκιμαστικού email" sent_test: "στάλθηκε!" delivery_method: "Τρόπος αποστολής" preview_digest_desc: "Προεπισκόπηση του περιεχομένου των συνοπτικών email που στάλθηκαν στους χρήστες που δεν ήταν ενεργοί." refresh: "Ανανέωση" send_digest_label: "Στείλε αυτό το αποτέλεσμα στον/στην:" send_digest: "Αποστολή" + sending_email: "Γίνεται αποστολή email…" format: "Μορφή" html: "html" text: "text" html_preview: "Προεπισκόπηση περιεχομένου email" + last_seen_user: "Εμφανίστηκε τελευταία:" no_result: "Δεν βρέθηκαν αποτελέσματα για περίληψη." + post_link_with_smtp: "Λεπτομέρειες αποστολής και SMTP" + skipped_reason: "Παράβλεψη λόγου" incoming_emails: from_address: "Από" to_addresses: "Προς" @@ -6709,14 +7028,17 @@ el: error: "Σφάλμα" none: "Δε βρέθηκε κανένα εισερχόμενο email." modal: + title: "Λεπτομέρειες εισερχόμενου email" error: "Σφάλμα" headers: "Headers" subject: "Θέμα" body: "Σώμα" + rejection_message: "Μήνυμα απόρριψης" filters: from_placeholder: "from@example.com" to_placeholder: "to@example.com" cc_placeholder: "cc@example.com" + subject_placeholder: "Θέμα…" error_placeholder: "Σφάλμα" logs: none: "Δεν βρέθηκαν αρχεία καταγραφής" @@ -6727,8 +7049,9 @@ el: reply_key_placeholder: "κλειδί απάντησης" email_addresses: see_more: "[Δείτε περισσότερα...]" + post_id: "(ID αποστολής: %{post_id})" moderation_history: - performed_by: "Εκτελεσμένο από" + performed_by: "Εκτελέστηκε από" no_results: "Δεν υπάρχει διαθέσιμο ιστορικό συντονισμού." actions: delete_user: "Ο χρήστης διαγράφηκε" @@ -6772,6 +7095,7 @@ el: deleted: "Δεν υπάρχει νέα τιμή. Η εγγραφή διεγράφη." filter_date_time: "Φιλτράρισμα ημερομηνίας και ώρας" actions: + permanently_delete_post_revisions: "μόνιμη διαγραφή αναθεωρήσεων ανάρτησης" delete_user: "διαγραφή χρήστη" change_trust_level: "αλλαγή επιπέδου εμπιστοσύνης" change_username: "αλλαγή ονόματος χρήστη" @@ -6805,6 +7129,7 @@ el: revoke_moderation: "ανάκληση συντονιστή" backup_create: "δημιουργία αντιγράφου" deleted_tag: "διεγραμμένη ετικέτα" + update_directory_columns: "ενημέρωση στηλών καταλόγου" deleted_unused_tags: "διαγραμμένες αχρησιμοποίητες ετικέτες" renamed_tag: "μετονομασμένη ετικέτα" revoke_email: "ανακάλεσε το email" @@ -6868,8 +7193,25 @@ el: create_flag: "δημιουργία αναφοράς" update_flag: "ενημέρωση αναφοράς" delete_flag: "διαγραφή αναφοράς" + topic_slow_mode_set: "ορισμός αργής λειτουργίας θέματος" + topic_slow_mode_removed: "αφαίρεση αργής λειτουργίας θέματος" + custom_emoji_create: "δημιουργία προσαρμοσμένου emoji" + custom_emoji_destroy: "διαγραφή προσαρμοσμένου emoji" + delete_post_permanently: "μόνιμη διαγραφή ανάρτησης" + delete_topic_permanently: "μόνιμη διαγραφή θέματος" + tag_group_create: "δημιουργία ομάδας ετικετών" + tag_group_destroy: "διαγραφή ομάδας ετικετών" + tag_group_change: "αλλαγή ομάδας ετικετών" + delete_associated_accounts: "διαγραφή συσχετισμένων λογαριασμών" + change_theme_site_setting: "αλλαγή ρύθμισης θέματος ιστότοπου" + stop_impersonating: "σταμάτα την πλαστοπροσωπία" + upcoming_change_toggled: "εναλλαγή επερχόμενης αλλαγής" + upcoming_change_available: "διαθέσιμη επερχόμενη αλλαγή" + discourse_id_regenerate_credentials: "επαναδημιουργία διαπιστευτηρίων Discourse ID" + configure_category_type: "διαμόρφωση τύπου κατηγορίας" screened_emails: - description: "Όταν κάποιος φτιάξει έναν λογαριασμό, οι παρακάτω διευθύνσεις email θα ελεγχθούν και η εγγραφή θα αποκλειστεί ή θα συμβεί κάποια άλλη ενέργεια." + description: "Όταν κάποιος προσπαθήσει να φτιάξει έναν νέο λογαριασμό, οι παρακάτω διευθύνσεις email θα ελεγχθούν και η εγγραφή θα αποκλειστεί ή θα συμβεί κάποια άλλη ενέργεια." + email: "Διεύθυνση email" actions: allow: "Επίτρεψε" screened_urls: @@ -6893,35 +7235,65 @@ el: text: "Σύνοψη" title: "Δημιουργεί νέες εγγραφές για τον αποκλεισμό υποδικτύων αν υπάρχουν τουλάχιστον 'min_ban_entries_for_roll_up' εγγραφές." search_logs: + title: "Αναζήτηση καταγραφών" term: "Όρος" searches: "Αναζητήσεις" click_through_rate: "CTR" types: all_search_types: "Όλοι οι τύποι αναζήτησης" header: "Header" + full_page: "Πλήρης σελίδα" click_through_only: "Όλα (μόνο για κλικ)" + header_search_results: "Αποτελέσματα αναζήτησης κεφαλίδας" + logster: + title: "Καταγραφές σφαλμάτων" watched_words: search: "αναζήτηση" clear_filter: "Καθαρισμός" + show_words: + one: "εμφάνισε %{count} λέξη" + other: "εμφάνισε %{count} λέξεις" + case_sensitive: "(διάκριση πεζών-κεφαλαίων)" html: "(html)" download: Κατέβασμα clear_all: Εκκαθάριση όλων + invalid_regex_multiple: "Μη έγκυρες κανονικές εκφράσεις:" actions: block: "Αποκλεισμός" censor: "Λογοκρισία" require_approval: "Απαιτεί Έγκριση" flag: "Αναφορά" replace: "Αντικατάσταση" + tag: "Ετικέτα" silence: "Σίγαση" link: "Σύνδεσμος" + action_descriptions: + block: "Θα εμφανιστεί ένα μήνυμα σφάλματος κατά την προσπάθεια δημιουργίας μιας ανάρτησης που περιέχει αυτές τις λέξεις." + require_approval: "Να απαιτείται η έγκριση του προσωπικού για αναρτήσεις που περιέχουν αυτές τις λέξεις, προτού αυτές γίνουν ορατές σε άλλους." + flag: "Να επιτρέπονται αναρτήσεις που περιέχουν αυτές τις λέξεις, αλλά να αναφέρονται ως ακατάλληλες για έλεγχο από τους συντονιστές." + replace: "Αντικατάσταση λέξεων σε αναρτήσεις με άλλες λέξεις." + tag: "Αυτόματη προσθήκη ετικετών σε θέματα εάν η πρώτη ανάρτηση περιέχει μια συγκεκριμένη λέξη." + silence: "Να γίνεται σίγαση νέων λογαριασμών εάν η πρώτη τους ανάρτηση περιέχει οποιαδήποτε από αυτές τις λέξεις. Η ανάρτηση θα αποκρύπτεται αυτόματα μέχρι να την εγκρίνει το προσωπικό." + link: "Αντικατάσταση λέξεων σε αναρτήσεις με συνδέσμους." form: + label: "Περιέχει λέξεις ή φράσεις" + placeholder: "λέξεις ή φράσεις (το * είναι μπαλαντέρ)" + placeholder_regexp: "κανονικές εκφράσεις" + replace_label: "Αντικατάσταση" + replace_placeholder: "παράδειγμα" + tag_label: "Ετικέτα" link_label: "Σύνδεσμος" link_placeholder: "https://example.com" add: "Προσθήκη" success: "Επιτυχία" exists: "Υπάρχει ήδη" upload: "Προσθήκη από αρχείο" + upload_successful: "Επιτυχές ανέβασμα. Οι λέξεις θα υποβληθούν σε επεξεργασία σύντομα." + case_sensitivity_label: "Έχει διάκριση πεζών-κεφαλαίων" + case_sensitivity_description: "Μόνο λέξεις με αντιστοίχιση πεζών και κεφαλαίων χαρακτήρων" html_label: "HTML" + html_description: "Εξάγει HTML στην αντικατάσταση" + words_or_phrases: "λέξεις ή φράσεις" test: button_label: "Δοκιμή" description: "Εισαγάγετε κείμενο παρακάτω για να ελέγξετε για αντιστοιχίες με τις παρακολουθούμενες λέξεις" @@ -6929,24 +7301,44 @@ el: no_matches: "Δεν βρέθηκαν αποτελέσματα" form_templates: nav_title: "Πρότυπα" + new_template: "Νέο πρότυπο" list_table: headings: name: "Όνομα" active_categories: "Ενεργές Κατηγορίες" actions: "Ενέργειες" + actions: + view: "Προβολή προτύπου" + edit: "Επεξεργασία προτύπου" + delete: "Διαγραφή προτύπου" view_template: close: "Κλείσιμο" edit: "Επεξεργασία" - delete: "Σβήσιμο" + delete: "Διαγραφή" toggle_preview: "Εναλλαγή Προεπισκόπησης" new_template_form: submit: "Αποθήκευση" cancel: "Ακύρωση" + name: + label: "Όνομα προτύπου" + placeholder: "Εισαγάγετε ένα όνομα για αυτό το πρότυπο…" + template: + label: "Πρότυπο" + placeholder: "Δημιουργήστε ένα πρότυπο YAML εδώ…" preview: "Προεπισκόπηση" + delete_confirm: "Σίγουρα θέλετε να διαγράψετε αυτό το πρότυπο;" quick_insert_fields: add_new_field: "Προσθήκη" + input: "Σύντομη απάντηση" + textarea: "Εκτενής απάντηση" dropdown: "Dropdown" + upload: "Ανεβάστε ένα αρχείο" + multiselect: "Πολλαπλή επιλογή" + tagchooser: "Επιλογέας ομάδας ετικετών" + composer: "Απάντηση Markdown" validations_modal: + button_title: "Επικυρώσεις" + modal_title: "Επιλογές επικύρωσης" table_headers: key: "Κλειδί" type: "Τύπος" @@ -6962,24 +7354,56 @@ el: key: "τύπος" preview_modal: title: "Προεπισκόπηση Προτύπου" + field_placeholders: + none_label: "Επιλέξτε ένα στοιχείο" + choices: + first: "Επιλογή 1" + second: "Επιλογή 2" + third: "Επιλογή 3" + edit_category: + toggle_freeform: "Πρότυπο φόρμας απενεργοποιημένο" + toggle_form_template: "Πρότυπο φόρμας ενεργοποιημένο" + select_template: "Επιλέξτε πρότυπα φόρμας" + select_template_help: "Προσθήκη/Επεξεργασία προτύπων φόρμας" impersonate: title: "Υποδυθείτε" help: "Χρησιμοποίησε αυτό το εργαλείο για να εντοπίσεις λάθη υποδυόμενος κάποιον άλλο χρήστη. Θα πρέπει να αποσυνδεθείς όταν τελειώσεις." not_found: "Ο χρήστης δεν μπορεί να βρεθεί" invalid: "Συγγνώμη, δεν μπορείς να υποδυθείς αυτό τον χρήστη" + error: "Ωχ. Παρουσιάστηκε ένα μη αναμενόμενο σφάλμα." users: title: "Χρήστες" + description: "Προβολή και διαχείριση χρηστών." create: "Προσθήκη Διαχειριστή" last_emailed: "Τελευταίο μήνυμα email" not_found: "Λυπούμαστε αλλά αυτό το όνομα χρήστη δεν υπάρχει στο σύστημα." id_not_found: "Λυπούμαστε αλλά αυτή η ταυτότητα χρήστη δεν υπάρχει στο σύστημα." active: "Ενεργοποιήθηκε" status: "Κατάσταση" + show_emails: "Εμφάνιση email" + hide_emails: "Απόκρυψη email" bulk_actions: + title: "Μαζικές ενέργειες" + admin_cant_be_deleted: "Αυτός ο χρήστης δεν μπορεί να διαγραφεί επειδή είναι διαχειριστής" + too_many_or_old_posts: "Αυτός ο χρήστης δεν μπορεί να διαγραφεί επειδή έχει πάρα πολλές αναρτήσεις ή μια πολύ παλιά ανάρτηση" + too_many_selected_users: + one: "Έχετε φτάσει το όριο %{count} χρήστη για μαζική διαγραφή" + other: "Έχετε φτάσει το όριο %{count} χρηστών για μαζική διαγραφή" delete: + label: "Διαγραφή χρηστών…" confirmation_modal: + prompt_text: + one: 'Πρόκειται να διαγράψετε οριστικά %{count} χρήστη. Πληκτρολογήστε "%{confirmation_phrase}" παρακάτω για να συνεχίσετε:' + other: 'Πρόκειται να διαγράψετε οριστικά %{count} χρήστες. Πληκτρολογήστε "%{confirmation_phrase}" παρακάτω για να συνεχίσετε:' + confirmation_phrase: + one: "διαγραφή %{count} χρήστη" + other: "διαγραφή %{count} χρηστών" close: "Κλείσιμο" - confirm: "Σβήσιμο" + confirm: "Διαγραφή" + title: + one: "Διαγραφή %{count} χρήστη" + other: "Διαγραφή %{count} χρηστών" + bulk_delete_starting: "Έναρξη μαζικής διαγραφής…" nav: new: "Νέα" active: "Ενεργοί" @@ -6990,6 +7414,7 @@ el: approved: "Εγκεκριμένο;" titles: active: "Ενεργοί χρήστες" + new: "Νέοι χρήστες" pending: "Χρήστες σε αναμονή για έλεγχο" newuser: "Χρήστες με Επίπεδο Εμπιστοσύνης 0 (Νέος χρήστης)" basic: "Χρήστες με Επίπεδο Εμπιστοσύνης 1 (Αρχάριος)" @@ -6997,13 +7422,19 @@ el: regular: "Χρήστες με Επίπεδο Εμπιστοσύνης 3 (Τακτικός)" leader: "Χρήστες με Επίπεδο Εμπιστοσύνης 4 (Αρχηγός)" staff: "Συνεργάτες" + admins: "Διαχειριστές" moderators: "Συντονιστές" + silenced: "Χρήστες σε σίγαση" + suspended: "Χρήστες σε αναστολή" not_verified: "Μη επαληθευμένος" check_email: title: "Εμφάνισε το email αυτού του χρήστη" text: "Εμφάνιση" check_sso: text: "Δείξε" + delete_associated_accounts: + title: "Διαγραφή όλων των συσχετισμένων λογαριασμών για αυτόν τον χρήστη" + text: "Διαγραφή συσχετισμένων λογαριασμών" user: suspend_failed: "Κάποιο λάθος εμφανίστηκε κατά την αποβολή αυτού του χρήστη %{error}" unsuspend_failed: "Κάτι πήγε στραβά κατά την αναίρεση της αποβολής αυτού του χρήστη %{error}" @@ -7013,6 +7444,11 @@ el: suspend_reason: "Αιτία" suspend_reason_title: "Αιτιολόγηση Αποβολής" suspend_reasons: + not_listening_to_staff: "Δεν άκουγε τα σχόλια του προσωπικού" + consuming_staff_time: "Κατανάλωσε δυσανάλογα μεγάλο μέρος του χρόνου του προσωπικού" + combative: "Πολύ επιθετικός" + in_wrong_place: "Σε λάθος μέρος" + no_constructive_purpose: "Δεν υπάρχει εποικοδομητικός σκοπός στις πράξεις τους πέρα από τη δημιουργία διαφωνίας εντός της κοινότητας" custom: "Προσαρμοσμένο…" suspend_message: "Μήνυμα Email" suspend_message_placeholder: "Προαιρετικά, δώστε περισσότερες πληροφορίες σχετικά με την αναστολή και αυτή θα αποσταλεί στον χρήστη μέσω email." @@ -7026,17 +7462,42 @@ el: silence_message: "Μήνυμα email" silence_message_placeholder: "(αφήστε κενό για να στείλετε το προκαθορισμένο μήνυμα)" suspended_until: "(έως %{until})" + suspend_forever: "Αναστολή για πάντα" cant_suspend: "Ο χρήστης αυτός δεν μπορεί να αποβληθεί." + cant_silence: "Δεν είναι δυνατή η σίγαση αυτού του χρήστη." delete_posts_failed: "Παρουσιάστηκε πρόβλημα κατά τη διαγραφή των αναρτήσεων." + post_edits: "Επεξεργασμένες Αναρτήσεις" + view_edits: "Προβολή Επεξεργασιών" penalty_post_actions: "Τι θα θέλατε να κάνετε με τη σχετική ανάρτηση;" penalty_post_delete: "Διαγραφή ανάρτησης" penalty_post_delete_replies: "Διαγραφή της ανάρτησης + τυχόν απαντήσεων" + penalty_post_delete_all: "Διαγραφή όλων των θεμάτων από τον χρήστη + οποιεσδήποτε απαντήσεις" + penalty_post_delete_all_confirmation_MF: | + Αυτό θα διαγράψει + { TOPICS, plural, + one {# θέμα} + other {# θέματα} + } και + { REPLIES, plural, + one {# απάντηση} + other {# απαντήσεις} + }. Αυτό δεν μπορεί να αναιρεθεί! Σίγουρα θέλετε να το κάνετε; penalty_post_edit: "Επεξεργασία ανάρτησης" penalty_post_none: "Μην κάνετε τίποτα" penalty_count: "Αριθμός ποινών" + penalty_history_MF: >- + Τους τελευταίους 6 μήνες αυτός ο χρήστης έχει γίνει αναστολή { SUSPENDED, plural, one {# φορά} other {# φορές} } και έχει γίνει σίγαση { SILENCED, plural, one {# φορά} other {# φορές} }. clear_penalty_history: title: "Καθαρισμός ιστορικού ποινών" description: "χρήστες με ποινές δε μπορούν να φτάσουν στο ΕΕ3" + delete_all_posts_confirm_MF: | + Πρόκειται να διαγράψετε { POSTS, plural, + one {# ανάρτηση} + other {# αναρτήσεις} + } και { TOPICS, plural, + one {# θέμα} + other {# θέματα} + }. Σίγουρα το θέλετε; silence: "Σίγαση" unsilence: "Αναίρεση Σίγασης" silenced: "Σε Σιγή;" @@ -7045,16 +7506,18 @@ el: suspended: "Αποβλημένος;" staged: "Στάδιο Μετάβασης;" show_admin_profile: "Διαχείριση" + manage_user: "Διαχείριση χρήστη" show_public_profile: "Εμφάνισε το Δημόσιο Προφίλ" action_logs: "Καταγραφές Ενεργειών" ip_lookup: "Αναζήτηση διεύθυνσης IP" log_out: "Αποσύνδεση" logged_out: "Ο χρήστης αποσυνδέθηκε από όλες τις συσκευές" revoke_admin: "Ανάκληση δικαιωμάτων διαχειριστή" - grant_admin: "Απόδοση δικαιωμάτων διαχειριστή" + grant_admin: "Χορήγηση δικαιωμάτων διαχειριστή" + grant_admin_success: "Νέος διαχειριστής επιβεβαιώθηκε." grant_admin_confirm: "Έχουμε στείλει ένα email για να επιβεβαιώσουμε τον νέο διαχειριστή. Παρακαλούμε ανοίξτε το και ακολουθήστε τις οδηγίες." revoke_moderation: "Ανάκληση δικαιωμάτων συντονιστή" - grant_moderation: "Απόδοση δικαιωμάτων συντονιστή" + grant_moderation: "Χορήγηση δικαιωμάτων συντονιστή" unsuspend: "Αναίρεση αποβολής" suspend: "Αποβολή" show_flags_received: "Εμφάνιση αναφορών που ελήφθησαν" @@ -7068,30 +7531,63 @@ el: private_topics_count: Προσωπικά μηνύματα posts_read_count: Διαβασμένες Αναρτήσεις post_count: Δημιουργημένες Αναρτήσεις + second_factor_enabled: Έλεγχος Ταυτότητας Δύο Παραγόντων Ενεργοποιημένος topics_entered: Προβεβλημένα Θέματα flags_given_count: Δοσμένες Σημάνσεις - flags_received_count: Ληφθείσες Σημάνσεις + flags_received_count: Ληφθείσες Αναφορές warnings_received_count: Ληφθείσες Προειδοποιήσεις warnings_list_warning: | Ως συντονιστής, ενδέχεται να μην μπορείτε να δείτε όλα αυτά τα θέματα. Εάν είναι απαραίτητο, ζητήστε από έναν διαχειριστή ή τον συντονιστή που το εξέδωσε να δώσει πρόσβαση στο μήνυμα στους @συντονιστές . - flags_given_received_count: "Δοσμένες / Ληφθείσες Σημάνσεις" + flags_given_received_count: "Δοσμένες / Ληφθείσες Αναφορές" approve: "Έγκριση" approved_by: "εγκρίθηκε από τον/την" approve_success: "Ο χρήστης εγκρίθηκε και του αποστάλθηκε ένα email με οδηγίες για την ενεργοποίηση του λογαριασμού του." approve_bulk_success: "Επιτυχία! Όλοι οι επιλεγμένοι χρήστες εγκρίθηκαν και ειδοποιήθηκαν." time_read: "Χρόνος Ανάγνωσης" + post_edits_count: "Επεξεργασμένες Αναρτήσεις" + upcoming_changes: + title: "Επερχόμενες αλλαγές χρήστη" + description: "Για να τροποποιήσετε ομάδες ή να ενεργοποιήσετε ή να απενεργοποιήσετε τις επερχόμενες αλλαγές, επισκεφθείτε τη σελίδα διαμόρφωσης επερχόμενων αλλαγών." + filter_placeholder: "Φιλτράρετε τις επερχόμενες αλλαγές με βάση το όνομα ή την περιγραφή" + filter_no_results: "Δεν βρέθηκαν επερχόμενες αλλαγές" exports: + title: Εξαγωγές χρηστών download: description: Λήψη της τελευταίας εξαγωγής + expires_in: + one: Λήγει σε %{count} ώρα + other: Λήγει σε %{count} ώρες + not_available: Δεν υπάρχει διαθέσιμη εξαγωγή button: Αίτημα λήψης αρχείου + confirm: Πραγματικά θέλετε να δημιουργήσετε ένα αρχείο με τη δραστηριότητα και τις προτιμήσεις αυτού του χρήστη; + started: Έχουμε ξεκινήσει τη συλλογή του αρχείου, ο σύνδεσμος λήψης θα ενημερωθεί όταν ολοκληρωθεί η διαδικασία. + success: Το αρχείο είναι έτοιμο για λήψη. + export_failed: Λυπούμαστε, αλλά η εξαγωγή απέτυχε. Παρακαλούμε ελέγξτε τις καταγραφές για περισσότερες πληροφορίες. anonymize: "Ανωνυμοποίηση Χρήστη" + anonymize_confirm: "Σίγουρα θέλετε να ανωνυμοποιήσετε αυτόν τον λογαριασμό; Αυτό θα αλλάξει το όνομα χρήστη και τη διεύθυνση email και θα επαναφέρει όλες τις πληροφορίες προφίλ." + delete_associated_accounts_confirm: "Σίγουρα θέλετε να διαγράψετε όλους τους συσχετισμένους λογαριασμούς από αυτόν τον λογαριασμό; Ο χρήστης ενδέχεται να μην μπορεί να συνδεθεί εάν το email του έχει αλλάξει." anonymize_yes: "Ναι, ανωνυμοποίησε αυτόν τον λογαριασμό" anonymize_failed: "Παρουσιάστηκε ένα σφάλμα κατά την ανωνυμοποίηση του λογαριασμού." delete: "Διαγραφή χρήστη" delete_posts: button: "Σβήσε όλες τις αναρτήσεις" + progress: + title: "Πρόοδος διαγραφής αναρτήσεων" + description: + one: "Γίνεται διαγραφή %{count} ανάρτησης από @%{username}..." + other: "Γίνεται διαγραφή %{count} αναρτήσεων από @%{username}..." confirmation: + title: "Διαγραφή όλων των αναρτήσεων από @%{username}" + description: | +

Σίγουρα θέλετε να διαγράψετε %{post_count} αναρτήσεις από @%{username}? + +

Αυτό δεν μπορεί να αναιρεθεί!

+ +

Για να συνεχίσετε, πληκτρολογήστε: %{text}

+ text: "διαγραφή αναρτήσεων από @%{username}" + delete: "Διαγραφή αναρτήσεων από @%{username}" cancel: "Άκυρο" + all_enqueued: "Όλες οι αναρτήσεις του χρήστη @%{username} έχουν μπει στην ουρά για διαγραφή" merge: button: "Συγχώνευση" prompt: @@ -7103,6 +7599,8 @@ el: target_username_placeholder: "Όνομα χρήστη του νέου ιδιοκτήτη" transfer_and_delete: "Μεταφορά & διαγραφή @%{username}" cancel: "Άκυρο" + progress: + title: "Πρόοδος συγχώνευσης" confirmation: title: "Μεταφορά & διαγραφή @%{username}" description: | @@ -7114,7 +7612,10 @@ el: text: "μεταφορά @%{username} σε @%{targetUsername}" transfer_and_delete: "Μεταφορά & διαγραφή @%{username}" cancel: "Άκυρο" + merging_user: "Γίνεται συγχώνευση χρήστη…" merge_failed: "Παρουσιάστηκε σφάλμα κατά τη συγχώνευση των χρηστών." + delete_forbidden_because_admin: "Δεν είναι δυνατή η διαγραφή των διαχειριστών." + delete_posts_forbidden_because_admin: "Δεν είναι δυνατή η διαγραφή όλων των αναρτήσεων των διαχειριστών." delete_forbidden: one: "Οι χρήστες δεν γίνεται να διαγραφούν εάν έχουν αναρτήσεις. Σβήσε όλες τις αναρτήσεις του πριν διαγράψεις το χρήστη. (Δεν γίνεται να σβηστούν αναρτήσεις που είναι παλαιότερες από %{count} ημέρα)" other: "Οι χρήστες δεν γίνεται να διαγραφούν εάν έχουν αναρτήσεις. Σβήσε όλες τις αναρτήσεις τους πριν τους διαγράψεις. (Δεν γίνεται να σβηστούν αναρτήσεις που είναι παλαιότερες από %{count} ημέρες)" @@ -7124,6 +7625,10 @@ el: cant_delete_all_too_many_posts: one: "Δεν γίνεται να σβήσεις όλες τις αναρτήσεις επειδή ο χρήστης έχει περισσότερες από %{count} αναρτήσεις. (Η ρύθμιση «delete_all_posts_max»)" other: "Δεν γίνεται να σβήσεις όλες τις αναρτήσεις επειδή ο χρήστης έχει περισσότερες από %{count} αναρτήσεις. (Η ρύθμιση «delete_all_posts_max»)" + delete_confirm_title: "Σίγουρα θέλετε να διαγράψετε αυτόν τον χρήστη; Αυτό είναι μόνιμο!" + delete_confirm: "Γενικά, είναι προτιμότερο να ανωνυμοποιείτε τους χρήστες παρά να τους διαγράφετε, για να αποφευχθεί η αφαίρεση περιεχομένου από υπάρχουσες συζητήσεις." + delete_dont_block: "Διαγραφή χρήστη" + deleting_user: "Γίνεται διαγραφή χρήστη…" deleted: "Ο χρήστης διαγράφτηκε." delete_failed: "Παρουσιάστηκε ένα σφάλμα κατά τη διαγραφή αυτού του χρήστη. Βεβαιώσου πρώτα πως έχουν σβηστεί όλες οι αναρτήσεις του." send_activation_email: "Αποστολή Email Ενεργοποίησης" @@ -7160,6 +7665,7 @@ el: unlock_trust_level: "Ξεκλείδωσε το επίπεδο εμπιστοσύνης" silenced_count: "Σιγήθηκαν" suspended_count: "Αποβλημένοι" + last_six_months: "Τελευταίοι 6 μήνες" other_matches_list: username: "Όνομα Χρήστη" trust_level: "Επίπεδο Εμπιστοσύνης" @@ -7172,6 +7678,7 @@ el: other: "Τις τελευταίες %{count} μέρες:" value_heading: "Τιμή" requirement_heading: "Προϋπόθεση" + posts_read_days: "Διαβασμένες Αναρτήσεις: μοναδικές μέρες" days: "ημέρες" topics_replied_to: "Θέματα που απάντησε" topics_viewed: "Θέματα που είδε" @@ -7180,10 +7687,10 @@ el: posts_read_all_time: "Αναρτήσεις που διαβάστηκαν (συνολικά)" flagged_posts: "Αναρτήσεις που αναφέρθηκαν" flagged_by_users: "Χρήστες που έκαναν αναφορά" - likes_given: "Μου αρέσει που αποδόθηκαν" - likes_received: "Μου αρέσει που λήφθησαν" - likes_received_days: "Μου αρέσει που ελήφθησαν: ξεχωριστές μέρες" - likes_received_users: "Μου αρέσει που ελήφθησαν: ξεχωριστοί χρήστες" + likes_given: "Μου αρέσει που δόθηκαν" + likes_received: "Ληφθέντα \"Μου αρέσει\"" + likes_received_days: "Ληφθέντα \"Μου αρέσει\": ξεχωριστές μέρες" + likes_received_users: "Ληφθέντα \"Μου αρέσει\": ξεχωριστοί χρήστες" suspended: "Σε αναστολή (τελευταίοι 6 μήνες)" silenced: "Σε σίγαση (τελευταίοι 6 μήνες)" qualifies: "Πληροί τις προϋποθέσεις για το επίπεδο εμπιστοσύνης 3." @@ -7194,13 +7701,20 @@ el: locked_will_not_be_promoted: "Το επίπεδο εμπιστοσύνης είναι κλειδωμένο. Δε θα προβιβαστεί ποτέ." locked_will_not_be_demoted: "Το επίπεδο εμπιστοσύνης είναι κλειδωμένο. Δεν θα υποβιβαστεί ποτέ. " discourse_connect: + title: "DiscourseConnect Single Sign On" external_id: "External ID" external_username: "Όνομα Χρήστη" external_name: "Όνομα" external_email: "Διεύθυνση Email" external_avatar_url: "URL Εικόνας Προφίλ" + delete_sso_record: "Διαγραφή εγγραφής SSO" user_fields: + title: "Πεδία χρήστη" no_user_fields: "Δεν έχετε κανένα προσαρμοσμένο πεδίο χρήστη ακόμη." + add: "Προσθήκη πεδίου χρήστη" + back: "Επιστροφή στα πεδία χρήστη" + edit_header: "Επεξεργασία πεδίου χρήστη" + new_header: "Προσθήκη πεδίου χρήστη" untitled: "Χωρίς τίτλο" name: "Όνομα πεδίου" type: "Τύπος πεδίου" @@ -7213,36 +7727,78 @@ el: delete_confirm: "Είσαι σίγουρος πως θέλεις να διαγράψεις αυτό το πεδίο χρήστη;" options: "Επιλογές" required: + title: "Να απαιτείται κατά την εγγραφή" enabled: "απαραίτητο" disabled: "δεν είναι απαραίτητο" requirement: + title: "Απαίτηση πεδίου" optional: title: "Προεραιτικό" + for_all_users: + title: "Για όλους τους χρήστες" + on_signup: + title: "Κατά την εγγραφή" + editable: + title: "Επεξεργάσιμο μετά την εγγραφή" + enabled: "Επεξεργάσιμο" + disabled: "Μη επεξεργάσιμο" + show_on_profile: + title: "Εμφάνιση στο δημόσιο προφίλ" + enabled: "Εμφανίζεται στο προφίλ" + disabled: "Δεν εμφανίζεται στο προφίλ" + show_on_user_card: + title: "Εμφάνιση στην κάρτα χρήστη" + enabled: "Εμφανίζεται στην κάρτα χρήστη" + disabled: "Δεν εμφανίζεται στην κάρτα χρήστη" + show_on_signup: + title: "Εμφάνιση στη φόρμα εγγραφής" + enabled: "Εμφανίζεται στη φόρμα εγγραφής" + disabled: "Δεν εμφανίζεται στη φόρμα εγγραφής" searchable: title: "Αναζητήσιμο" enabled: "Αναζητήσιμο" + disabled: "Μη αναζητήσιμο" field_types: text: "Κείμενο" + textarea: "Περιοχή κειμένου" + date: "Ημερομηνία" confirm: "Επιβεβαίωση" dropdown: "Dropdown" multiselect: "Πολλαπλή επιλογή" site_text: + description: "Μπορείτε να προσαρμόσετε οποιοδήποτε κείμενο στο φόρουμ σας." search: "Αναζήτησε το κείμενο που θα ήθελες να επεξεργαστείς" + title: "Κείμενα ιστότοπου" edit: "Επεξεργασία" revert: "Επαναφορά αλλαγών" revert_confirm: "Είσαι βέβαιος πως θέλεις να επαναφέρεις τις αλλαγές;" go_back: "Πίσω στην αναζήτηση" recommended: "Σου προτείνουμε να προσαρμόσεις το ακόλουθο κείμενο στις ανάγκες σου:" show_overriden: "Δείξε μόνο αυτά που άλλαξαν" + show_outdated: "Εμφάνιση μόνο ξεπερασμένων/μη έγκυρων" + show_untranslated: "Εμφάνιση μόνο αμετάφραστων" + only_show_selected_locale: "Εμφάνιση αποτελεσμάτων μόνο στην επιλεγμένη γλώσσα" + locale: "Γλώσσα:" more_than_50_results: "Υπάρχουν περισσότερα από 50 αποτελέσματα. Κάντε πιο συγκεκριμένη την αναζήτησή σας." + no_results: "Δεν βρέθηκαν αντίστοιχα κείμενα ιστότοπου" + interpolation_keys: "Διαθέσιμα κλειδιά παρεμβολής:" + interpolation_key_insert: "Κάντε κλικ για εισαγωγή" + interpolation_key_used: "Χρησιμοποιείται ήδη" outdated: + title: "Αυτή η μετάφραση είναι ξεπερασμένη" + description: "Η προεπιλεγμένη μετάφραση για αυτό το κλειδί έχει αλλάξει από τότε που δημιουργήθηκε αυτή η παράκαμψη. Ελέγξτε παρακάτω ότι η μετάφρασή σας ταιριάζει με τυχόν αλλαγές που έχουν γίνει στην αρχική πρόθεση." + old_default: "Παλιά προεπιλογή" + new_default: "Νέα προεπιλογή" dismiss: "Παράβλεψη" settings: show_overriden: "Δείξε μόνο αυτά που άλλαξαν" + history: "Προβολή ιστορικού αλλαγών" reset: "επαναφορά" none: "κανένα" save: "αποθήκευση" cancel: "ακύρωση" + unmask: "αποκάλυψη εισόδου" + not_found: "Δεν ήταν δυνατή η εύρεση των ρυθμίσεων" site_settings: title: "Ρυθμίσεις ιστότοπου" discard: @@ -7284,6 +7840,7 @@ el: basic: "Βασική εγκατάσταση" users: "Χρήστες" posting: "Αναρτήσεις" + content_localization: "Τοπικοποίηση περιεχομένου" email: "Email" files: "Αρχεία" trust: "Επίπεδα Εμπιστοσύνης" @@ -7310,7 +7867,11 @@ el: experimental: "Πειραματικό" secret_list: invalid_input: "Τα πεδία εισαγωγής δε μπορούν να είναι κενά ή να περιέχουν χαρακτήρα κάθετης γραμμής." + already_exists: "Η καταχώριση για %{key} υπάρχει ήδη." default_categories: + modal_description: + one: "Θα θέλατε να εφαρμόσετε αυτήν την αλλαγή αναδρομικά; Αυτό θα αλλάξει τις προτιμήσεις για %{count} υπάρχων χρήστη." + other: "Θα θέλατε να εφαρμόσετε αυτήν την αλλαγή αναδρομικά; Αυτό θα αλλάξει τις προτιμήσεις για %{count} υπάρχοντες χρήστες." modal_yes: "Ναι " modal_no: "Όχι, εφαρμόστε την αλλαγή μόνο προς τα εμπρός" simple_list: @@ -7326,6 +7887,17 @@ el: add_types_title: "Να επιτρέπονται επεκτάσεις %{types}" add_types_toast: "Προστέθηκαν τύποι αρχείων %{types}" mandatory_group: "Η ομάδα είναι υποχρεωτική" + requires_confirmation_messages: + default: + confirm: "Ναι, σίγουρα" + min_password_length: + confirm: "Ναι, ενημέρωση πολιτικής κωδικού πρόσβασης" + min_admin_password_length: + confirm: "Ναι, ενημέρωση πολιτικής κωδικού πρόσβασης" + password_unique_characters: + confirm: "Ναι, ενημέρωση πολιτικής κωδικού πρόσβασης" + block_common_passwords: + confirm: "Ναι, ενημέρωση πολιτικής κωδικού πρόσβασης" job_status: completed: "Η ενημέρωση ολοκληρώθηκε" enqueued: "Ενημέρωση σε εξέλιξη" @@ -7428,22 +8000,30 @@ el: emoji: title: "Emoji" no_emoji: "Δεν έχετε κανένα προσαρμοσμένο emoji ακόμη." - delete: "Σβήσιμο" + add: "Προσθήκη emoji" + delete: "Διαγραφή" + back: "Επιστροφή στα emoji" + choose_files: "Επιλογή αρχείων" uploading: "Μεταφορτώνεται…" name: "Όνομα" group: "Ομάδα" + created_by: "Δημιουργήθηκε από" image: "Εικόνα" alt: "προεπισκόπηση προσαρμοσμένου emoji" delete_confirm: "Είσαι σίγουρος ότι θέλεις να διαγράψεις το emoji :%{name}:;" settings: "Ρυθμίσεις" embedding: get_started: "Εάν θέλεις να ενσωματώσεις το Discourse σε μια άλλη ιστοσελίδα, ξεκίνα με το να προσθέσεις το host του." - delete: "Σβήσιμο" + delete: "Διαγραφή" confirm_delete: "Είσαι βέβαιος πως θέλεις να διαγράψεις το host;" title: "Ενσωμάτωση" + allowed_paths: "Λίστα επιτρεπόμενων διαδρομών" edit: "Επεξεργασία" + category: "Δημοσίευση στην κατηγορία" + tags: "Ετικέτες θέματος" post_author: "Συντάκτης ανάρτησης" post_author_with_default: "Συντάκτης ανάρτησης (προεπιλογή σε %{author})" + posts_and_topics: "Διαμόρφωση αναρτήσεων και θεμάτων" crawlers: "Διαμόρφωση ανιχνευτών" crawlers_description: "Όταν η ιστοσελίδα δημιουργεί θέματα για τις αναρτήσεις σου, αν δεν υπάρχει RSS/ATOM τροφοδότηση θα προσπαθήσει να αναλύσει το περιεχόμενο της HTML σου. Κάποιες φορές μπορεί να αποτελεί πρόκληση το να εξάγει το περιεχόμενο σου, έτσι σου παρέχουμε την ικανότητα να προσδιορίσεις τους κανόνες CSS για να κάνεις την εξαγωγή ευκολότερη." embed_by_username: "Όνομα χρήστη για δημιουργία θέματος" @@ -7455,11 +8035,15 @@ el: blocked_embed_selectors: "CSS selector για στοιχεία που έχουν αφαιρεθεί από τις ενσωματώσεις" allowed_embed_classnames: "Επιτρεπόμενα CSS class names" save: "Αποθήκευση" + posts_and_topics_settings_saved: "Οι ρυθμίσεις αναρτήσεων και θεμάτων αποθηκεύτηκαν" crawler_settings_saved: "Οι ρυθμίσεις ανιχνευτή αποθηκεύτηκαν" + back: "Επιστροφή στην ενσωμάτωση" + configuration_snippet: "Απόσπασμα διαμόρφωσης" host_form: save: "Αποθήκευση" nav: settings: "Ρυθμίσεις" + posts_and_topics: "Αναρτήσεις & θέματα" crawlers: "Ανιχνευτές" permalink: title: "Permalinks" @@ -7472,6 +8056,7 @@ el: category_id: "ID Κατηγορίας" category_title: "Κατηγορία" tag_name: "Όνομα ετικέτας" + tag_title: "Ετικέτα" external_url: "Εξωτερική ή σχετική διεύθυνση URL" user_title: "Χρήστης" username: "Όνομα Χρήστη" @@ -7479,6 +8064,7 @@ el: copy_to_clipboard: "Αντιγραφή permalink στο πρόχειρο" delete_confirm: Είσαι βέβαιος πως θέλεις να διαγράψεις αυτόν τον μόνιμο σύνδεσμο; no_permalinks: "Δεν έχετε κανέναν μόνιμο σύνδεσμο ακόμη." + more_options: "Περισσότερες επιλογές" nav: settings: "Ρυθμίσεις" permalinks: "Permalinks" @@ -7488,6 +8074,7 @@ el: save: "Αποθήκευση" reseed: action: + label: "Αντικατάσταση κειμένου…" title: "Αντικατάσταση κειμένου κατηγοριών και θεμάτων με μεταφράσεις" modal: title: "Αντικατάσταση κειμένου" @@ -7495,3 +8082,6 @@ el: categories: "Κατηγορίες" topics: "Θέματα" replace: "Αντικατάσταση" + wizard_js: + wizard: + jump_in: "Πάμε!" diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 94e83205b5304..112d3c184dcdb 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -1,5 +1,24 @@ en: js: + blocks: + ghost: + # Section titles + status: "Status" + conditions: "Conditions" + arguments: "Arguments" + container_args: "Container Args" + in_location: "in" + # Status text (used in badge, header, and status section) + hidden: "hidden" + not_registered: "not registered" + no_visible_children: "no visible children" + failed: "failed" + ghost_reasons: + # Longer hint messages shown at bottom of ghost tooltip + optional_missing_hint: "This optional block is not rendered because it's not registered." + no_visible_children_hint: "This container block is not rendered because none of its children are visible." + condition_failed_hint: "This block is not rendered because its conditions failed." + head_hidden_tail_hint: "This block is not rendered because another block was rendered first in the `head` container." carousel: go_to_slide: "Go to slide %{index}" previous: "Previous slide" @@ -318,6 +337,7 @@ en: skip_user_nav: "Skip to profile content" emails_are_disabled: "All outgoing email has been globally disabled by an administrator. No email notifications of any kind will be sent." + emails_are_disabled_no_smtp: "All outgoing email is disabled because no SMTP server has been configured. No emails of any kind can be sent." emails_are_disabled_non_staff: "Outgoing email has been disabled for non-staff users." software_update_prompt: @@ -354,6 +374,8 @@ en: broken_plugin_alert: "Caused by plugin '%{name}'" broken_transformer_alert: "There was an error. Your site may not work properly." + broken_block_alert: "A block configuration error was detected. Check browser console for details." + broken_block_factory_alert: "A block failed to load. Some UI elements may not display correctly." critical_deprecation: notice: "[Admin Notice] %{source} contains code which needs updating. (id:%{id})" @@ -362,6 +384,21 @@ en: plugin_source: "Plugin '%{name}'" unknown_source: "One of your themes or plugins" + dev_tools: + drag_to_move: "Drag to move" + toggle_plugin_outlet_debug: "Toggle plugin outlet debug" + toggle_block_debug: "Toggle block debug" + block_debug: + outlet_boundaries: "Outlet boundaries" + visual_overlay: "Visual overlay" + ghost_blocks: "Ghost blocks" + condition_debugging: "Condition debugging" + toggle_safe_mode: "Toggle safe mode" + toggle_verbose_localization: "Toggle verbose localization" + toggle_mobile_view: "Toggle mobile view" + disable_dev_tools: "Disable dev tools" + toggle_upcoming_changes_debug: "Toggle upcoming changes debug" + s3: regions: ap_northeast_1: "Asia Pacific (Tokyo)" @@ -456,7 +493,6 @@ en: admin_onboarding_banner: launch_in_easy_steps: "Launch in %{step_count} easy steps" - skipped: "The admin onboarding checklist has now been skipped. If you would like to re-enable it, look for `enable site owner onboarding` in the site settings." congrats_onboarding_complete: "Congratulations on completing the onboarding process!" invite_collaborators: title: "Invite Collaborators" @@ -465,7 +501,13 @@ en: start_posting: title: "Start Posting" description: "Give people something to talk about together" - action: "Icebreaker ideas" + action: "See ideas" + choose_option: "How would you like to start?" + predefined_topics: "Icebreaker templates" + predefined_topics_subtitle: "Give new members something to talk about, pick a template to edit and make your own." + predefined_topics_description: "Pick from a collection of conversation starters to get discussions going" + use_predefined: "Browse templates" + back: "Back" icebreakers: fun_facts: title: "What are some fun facts about you?" @@ -480,7 +522,6 @@ en: title: "What is your favorite food?" body: "Share your favorite food with the community! I'll start: I love pizza, especially with extra cheese and pepperoni." - spread_the_word: title: "Spread the Word!" description: "Share a link with everyone in your network" @@ -569,8 +610,10 @@ en: bookmarked: title: "Bookmark" - edit_bookmark: "Edit Bookmark" - clear_bookmarks: "Clear Bookmarks" + edit_bookmark: + one: "Edit bookmark" + other: "Edit bookmarks" + delete_bookmarks: "Delete all bookmarks" help: bookmark: "Click to bookmark this topic" edit_bookmark: "Click to edit the bookmark on a post in this topic" @@ -590,12 +633,18 @@ en: clear_reminder: "Clear reminder" edit: "Edit bookmark" not_bookmarked: "bookmark this post" + topic_bookmark: "Topic" + post_bookmark: "Post #%{post_number}" + jump_to_post: "Jump to #%{post_number}" + bookmark_topic: "Bookmark topic" + edit_topic_bookmark: "Edit topic bookmark" + delete_topic_bookmark: "Delete topic bookmark" remove_reminder_keep_bookmark: "Remove reminder and keep bookmark" created_with_reminder: "You've bookmarked this post with a reminder %{date}. %{name}" created_with_reminder_generic: "You've bookmarked this with a reminder %{date}. %{name}" delete: "Delete Bookmark" confirm_delete: "Are you sure you want to delete this bookmark? The reminder will also be deleted." - confirm_clear: "Are you sure you want to clear all your bookmarks from this topic?" + confirm_clear: "Are you sure you want to delete all your bookmarks from this topic?" save: "Save" no_timezone: 'You have not set a timezone yet. You will not be able to set reminders. Set one up in your profile.' invalid_custom_datetime: "The date and time you provided is invalid, please try again." @@ -671,6 +720,7 @@ en: storage_access_prompt: "Already have a %{site_name} account? Allow access to your session to comment as yourself." allow_access: "Allow Access" continue_as_guest: "Continue as Guest" + be_first_to_reply: "Be the first to reply!" topic_count_all: one: "See %{count} new topic" @@ -1186,6 +1236,7 @@ en: add_members: title: "Add Users to %{group_name}" description: "Enter a list of users you want to invite to the group or paste in a comma separated list:" + description_usernames_only: "Enter a list of usernames you want to add to the group or paste in a comma separated list:" usernames_placeholder: "usernames" usernames_or_emails_placeholder: "usernames or emails" notify_users: "Notify users" @@ -1670,6 +1721,7 @@ en: enable_smart_lists: "Enable smart lists when writing in the composer" enable_defer: "Enable mark topics as unread" enable_markdown_monospace_font: "Use monospace font in composer's Markdown mode" + show_original_content: "Show original content instead of translated content. Can also be toggled within topics." experimental_sidebar: enable: "Enable sidebar" options: "Options" @@ -1883,6 +1935,24 @@ en: apps: "Apps" navigation_menu: "Navigation menu" upcoming_changes: "Upcoming changes" + calendar_subscriptions: "Calendar" + + calendar_subscriptions: + description: "Generate subscription URLs to sync with your favorite calendar app (Google Calendar, Apple Calendar, Outlook, etc.). These URLs are private links to calendar events for your account (bookmark reminders, calendar events, etc). You can always revoke or renew the generated subscription URLs." + generate: "Generate Subscription URLs" + regenerate: "Regenerate URLs" + regenerate_confirm: "This will invalidate your existing calendar subscription URLs. Any calendar apps using the old URLs will stop receiving updates. Continue?" + revoke: "Revoke Subscription" + revoke_confirm: "This will revoke your calendar subscription URLs. Any calendar apps using them will stop receiving updates. Continue?" + urls_warning: "The subscription URLs are ready! Click the buttons below to link them to your calendar app. Note: these URLs are shown only once." + bookmarks: "Bookmark Reminders" + bookmarks_description: "Your bookmarks with reminder dates" + copy: "Copy URL" + copied: "Copied!" + add_to_google: "Google Calendar" + add_to_outlook: "Microsoft Outlook" + add_to_apple: "Apple Calendar" + active_subscription: "You have an active calendar subscription." change_password: success: "(email sent)" @@ -2550,6 +2620,7 @@ en: form_kit: reset: Reset optional: optional + required: required errors_summary_title: one: "Fix this error to continue" other: "Fix these errors to continue" @@ -2963,6 +3034,12 @@ en: filter_for_more: Filter for more… categories_admin_dropdown: title: "Manage categories" + tag_category_admin_dropdown: + title: "Category and tag settings" + edit_category: "Edit category" + edit_category_description: "Adjust settings for %{badge}" + edit_tag: "Edit tag" + edit_tag_description: "Adjust settings for %{badge}" bulk_select_topics_dropdown: title: "Bulk Actions" bulk_select_bookmarks_dropdown: @@ -2997,6 +3074,20 @@ en: dark_tone: Dark skin tone default: Custom emojis + filter_input: + clear: "Clear filter" + + d_icon_grid_picker: + select_icon: "Select icon" + search_placeholder: "Search icons..." + no_results: "No icons found" + results_count: + one: "%{count} icon found" + other: "%{count} icons found" + favorites: "Favorites" + selected_icon: "Selected icon: %{iconName}" + clear: "Clear icon" + shared_drafts: title: "Shared Drafts" notice: "This topic is only visible to those who can publish shared drafts." @@ -3153,6 +3244,7 @@ en: upload_description: "enter upload description here" olist_title: "Numbered list" ulist_title: "Bulleted list" + list_title: "Lists" list_item: "List item" toggle_direction: "Toggle direction" apply_wrap_title: "Apply wrap" @@ -3170,6 +3262,7 @@ en: collapse: "Minimize the composer panel" open: "Open the composer panel" abandon: "Close composer and discard draft" + edit_reason: "Add your reason for editing" enter_fullscreen: "Enter fullscreen composer" exit_fullscreen: "Exit fullscreen composer" exit_fullscreen_prompt: "Press ESC to exit full screen" @@ -3335,9 +3428,13 @@ en: available: title: "Upcoming changes" description: "'%{changeName}' is available for preview" + description_two: "'%{changeName1}' and '%{changeName2}' are available for preview" + description_many: "'%{changeName}' and %{otherChangeCount} more changes are available for preview" automatically_promoted: title: "Upcoming changes" description: "'%{changeName}' has been automatically enabled" + description_two: "'%{changeName1}' and '%{changeName2}' were automatically enabled" + description_many: "'%{changeName}' and %{otherChangeCount} more changes were automatically enabled" dismiss_confirmation: body: default: @@ -3399,8 +3496,8 @@ en: votes_released: "vote was released" new_features: "new discourse features have been released" admin_problems: "new advice on your site dashboard" - upcoming_change_available: "new upcoming change '%{changeName}' is available" - upcoming_change_automatically_promoted: "upcoming change '%{changeName}' has been automatically enabled" + upcoming_change_available: "new upcoming changes are available" + upcoming_change_automatically_promoted: "upcoming changes have been automatically enabled" upload_selector: change: "Change" @@ -3610,11 +3707,13 @@ en: confirm: "Confirm" select_all: "Select All" clear_all: "Clear All" - unlist_topics: "Unlist Topics" - relist_topics: "Relist Topics" + unlist_topics: "Unlist topics" + relist_topics: "Relist topics" + pin_topics: "Feature these topics" + unpin_topics: "Un-pin topics" reset_bump_dates: "Reset bump dates" defer: "Mark unread" - delete: "Delete Topics" + delete: "Delete topics" delete_topics_count: one: "Delete Topic" other: "Delete Topics" @@ -3653,36 +3752,60 @@ en: other: "Dismiss New (%{count})" toggle: "toggle bulk selection of topics" actions: "Bulk Actions" - change_category: "Set Category…" - close_topics: "Close Topics" - archive_topics: "Archive Topics" + change_category: "Update category" + close_topics: "Close topics" + archive_topics: "Archive topics" move_messages_to_inbox: "Move to Inbox" archive_messages: "Move to Archive" - notification_level: "Notifications…" + notification_level: "Update notifications" change_notification_level: "Change Notification Level" choose_new_category: "Choose the new category for the topics:" - selected: - one: "You have selected %{count} topic." - other: "You have selected %{count} topics." selected_sole_category: one: "You have selected %{count} topic from category:" other: "You have selected %{count} topics from category:" selected_count: one: "%{count} selected" other: "%{count} selected" - change_tags: "Replace Tags" - append_tags: "Append Tags" + change_tags: "Replace tags" + append_tags: "Add tags" choose_new_tags: "Choose new tags for these topics:" - choose_append_tags: "Choose new tags to append for these topics:" + choose_append_tags: "Add tags" changed_tags: "The tags of those topics were changed." - remove_tags: "Remove All Tags" + remove_tags: "Remove tags" confirm_remove_tags: one: "All tags will be removed from this topic. Are you sure?" other: "All tags will be removed from %{count} topics. Are you sure?" + confirm_unpin_topics: + one: "Un-pin %{count} topic" + other: "Un-pin %{count} topics" + confirm_update_topics: + one: "Update %{count} topic" + other: "Update %{count} topics" + confirm_close_topics: + one: "Close %{count} topic" + other: "Close %{count} topics" + confirm_archive_topics: + one: "Archive %{count} topic" + other: "Archive %{count} topics" + confirm_unlist_topics: + one: "Unlist %{count} topic" + other: "Unlist %{count} topics" + confirm_relist_topics: + one: "Relist %{count} topic" + other: "Relist %{count} topics" + confirm_archive_messages: + one: "Archive %{count} message" + other: "Archive %{count} messages" + confirm_move_to_inbox: + one: "Move %{count} message to inbox" + other: "Move %{count} messages to inbox" + confirm_delete_topics: + one: "Delete %{count} topic" + other: "Delete %{count} topics" progress: one: "Progress: %{count} topic" other: "Progress: %{count} topics" - notify: "Notify users of this change." + notify: "Notify users of this change" performing: "Performing bulk operations, please wait…" completed: "Bulk operations completed successfully!" completed_count: @@ -3722,38 +3845,49 @@ en: name: "Dismiss" close_topics: name: "Close" - note: "Note" + description: "Closed topics prevent new replies. Learn more" + note: "Add a note to these topics" optional: (optional) archive_topics: name: "Archive" + description: "Archived topics are hidden from search and the latest topic list. Learn more" archive_messages: name: "Move to Archive" move_messages_to_inbox: name: "Move to Inbox" unlist_topics: name: "Unlist" + description: "Unlisted topics are hidden from the topic list but can still be accessed via a direct link. Learn more" relist_topics: name: "Relist" remove_tags: name: "Remove Tags" + description: "Remove all tags from the selected topics." append_tags: - name: "Append Tags" + name: "Add Tags" + description: "Add the following tags to the selected topics:" replace_tags: name: "Replace Tags" + description: "Replace all existing tags on the selected topics with the following:" delete_topics: name: "Delete" + description: "Permanently delete the selected topics. This action cannot be undone." update_category: name: "Update Category" - description: "Choose the new category for the selected topics" + description: "Move all selected topics to the following category:" reset_bump_dates: name: "Reset Bump Dates" - description: "Reset the topic bump date to the last created post date, which affects ordering in the topic list" + description: "Do you want to update the bump dates to the last created post date? This may impact their ordering in the topic list." defer: name: "Mark Unread" - description: "Mark topics as unread" update_notifications: name: "Update Notifications" - description: "Change notification level to Watching, Tracking, Normal, or Muted" + description: "Update your personal notification level for the selected topics to:" + pin_topics: + name: "Pin" + unpin_topics: + name: "Un-pin" + description: "Un-pin all the selected topics that are pinned to a category or pinned globally" topic: filter_to: @@ -3898,6 +4032,7 @@ en: publish_to: "Publish To:" when: "When:" time_frame_required: "Please select a time frame" + category_required: "Please select a category" min_duration: "Duration must be greater than 0" max_duration: "Duration must be less than 20 years" duration: "Duration" @@ -3941,6 +4076,9 @@ en: auto_close_immediate: one: "The last post in the topic is already %{count} hour old, so the topic will be closed immediately." other: "The last post in the topic is already %{count} hours old, so the topic will be closed immediately." + auto_delete_immediate: + one: "The last post in the topic is already %{count} hour old, so the topic will be deleted immediately." + other: "The last post in the topic is already %{count} hours old, so the topic will be deleted immediately." timeline: back: "Back" back_description: "Go back to your last unread post" @@ -4088,6 +4226,13 @@ en: no_banner_exists: "There is no banner topic." banner_exists: "There is currently a banner topic." + bulk_feature_topic: + pin: "Make these topics appear at the top of the topic's category until" + pin_note: "Users can unpin topics individually for themselves." + pin_globally: "Make these topics appear at the top of all topic lists until" + pin_button: "Pin topics" + pin_globally_button: "Pin topics globally" + inviting: "Inviting…" automatically_add_to_groups: "This invite also includes access to these groups:" @@ -4501,6 +4646,7 @@ en: other: "Are you sure you want to merge these %{count} posts?" revisions: + diff_too_complex: "The diff is too complex to display. Please try viewing individual smaller edits." locale: no_locale_set: "No language set" locale_removed: "Language removed" @@ -4581,6 +4727,7 @@ en: original_language: "This post was originally written in %{language}" original_language_and_outdated: "This post was originally written in %{language}. Translation may be outdated" + ai_translation_disclaimer: "AI-generated translations may be inaccurate." category: none: "(no category)" @@ -4596,9 +4743,13 @@ en: advanced: "Advanced" show_advanced: "Advanced settings" topic_template: "Template" + topic_title_placeholder: "Category topic title placeholder" + topic_title_placeholder_placeholder: "[optional] custom topic title placeholder for this category" tags: "Tags" localizations: "Localizations" localization: + language: "Category language" + language_description: "The primary language of this category's name and description." locale: "Locale" name: "Name" description: "Description" @@ -4619,11 +4770,24 @@ en: delete: "Delete" add: "Add required tag group" placeholder: "Select tag group…" + min_count: "Tag count" + tag_group: "Tag group" topic_featured_link_allowed: "Allow featured links in this category" delete: "Delete category" create: "New category" + create_with_type: "New %{typeName} category" create_long: "Create a new category" + settings_apply_to_all_of_type_warning: "Changes below will apply to all categories of this type" + type_settings_schema: + category_settings: "Category settings" + category_custom_fields: "Category settings" + site_settings: "Site settings" + choose_type: + title: "Choose category type" + requires_plugin: "Requires plugin" + create_category: "Create category" save: "Save category" + unsaved_changes: "You have unsaved changes" slug: "Category slug" parent: "Parent category" slug_placeholder: "(Optional) dashed-words for url" @@ -4634,6 +4798,7 @@ en: validations: emoji_required: "Select an emoji." icon_required: "Select an icon." + groups_required: "Select at least one group for this approval mode." name: "Category name" untitled: "Untitled category" description: "Description" @@ -4646,6 +4811,7 @@ en: icon: "Icon" emoji: "Emoji" select_emoji: "Select emoji" + select_icon: "Select icon" background_color: "Color" foreground_color: "Text color" color_validations: @@ -4670,6 +4836,9 @@ en: list: "List categories" no_description: "Please add a description for this category." change_in_category_topic: "Edit description" + description_updated: "Description updated" + description_expand: "Show more" + description_collapse: "Show less" already_used: "This color has been used by another category" color_palette: "Color palette" security: "Security" @@ -4715,6 +4884,14 @@ en: review_group_name: "group name" require_topic_approval: "Require moderator approval of all new topics" require_reply_approval: "Require moderator approval of all new replies" + require_topic_approval_for: "Require moderator approval of new topics for..." + require_reply_approval_for: "Require moderator approval of new replies for..." + posting_review_modes: + no_one: "No one" + everyone: "Everyone" + everyone_except: "Everyone except selected groups" + no_one_except: "No one except selected groups" + posting_review_groups_placeholder: "Select groups..." this_year: "this year" position: "Position on the categories page:" default_position: "Default position" @@ -5886,7 +6063,7 @@ en: # This is a text input placeholder, keep the translation short type_to_filter: "Type to filter…" settings: "Settings" - reset_filter: "Reset" + reset_filter: "Reset filter" toggle_filters: "Toggle dropdown filters" admin: @@ -5909,8 +6086,7 @@ en: group_traffic: "Traffic" group_members: "Members" group_content: "Content & Health" - group_moderation: "Moderation" - group_security: "Security" + group_moderation_and_security: "Moderation & Security" group_other: "Other" legacy_warning: "This is a legacy report. It will be retired soon. If you need help finding the replacement, contact support." @@ -5956,10 +6132,12 @@ en: permanent_no_group_selection: "N/A, permanent changes apply to all groups." no_changes: "There are no upcoming changes at this time." preview: "Preview" + default_warning: "The default for this setting has changed from %{oldDefaultValue} to %{newDefaultValue} due to an upcoming change." + default_warning_short: "The default for this setting has changed, read more about this in the upcoming changes page." enabled_for_options: no_one: "No one" everyone: "Everyone" - staff: "Staff only" + staff: "%{staffGroupName} only" specific_groups: "Specific group(s)" specific_groups_with_group_names: one: "the group %{groupNames}" @@ -5970,6 +6148,11 @@ en: beta: "Beta" stable: "Stable" permanent: "Permanent" + status_descriptions: + experimental: "This is in early development and may change significantly or be discontinued. May not be fully compatible with other features." + alpha: "This is being actively developed and refined. Functionality may change, and it may not be fully polished but it's stable enough to try." + beta: "This is nearing completion and available for early adoption. Minor changes are still possible." + stable: "This is complete and well supported. It will soon be available on all Discourse sites." impact_roles: admins: "Admins" moderators: "Moderators" @@ -5982,12 +6165,13 @@ en: all: "All" enabled_all: "All enabled states" enabled: "Enabled" - enabled_for_staff: "Enabled for staff" + enabled_for_staff: "Enabled for %{staffGroupName}" enabled_for_specific_groups: "Enabled for specific groups" disabled: "Disabled" impact_type_all: "All impact types" impact_type_feature: "Feature" impact_type_other: "Other" + impact_type_site_setting_default: "Setting default" status_all: "All statuses" status_conceptual: "Conceptual" status_experimental: "Experimental" @@ -6447,23 +6631,6 @@ en: no_new_features_found: "There are no items in the feed or your selected filter returned no results. You can see previous new feature announcements on the Discourse Meta community." no_new_features_error: "There was an error loading the feed. You can see previous new feature announcements on the Discourse Meta community." learn_more: "Learn more..." - experimental: "Experimental" - only_experiments: "Only show experimental features" - experiment_enabled: "You have enabled the experimental feature." - experiment_disabled: "You have disabled the experimental feature." - feature_enabled: "You have enabled the feature." - feature_disabled: "You have disabled the feature." - toggled_too_fast: "You have switched the toggle too fast. Please wait a few seconds before trying again." - experiment_tooltip: - title_disabled: "Try this experimental feature" - title_enabled: "Turn off experimental feature" - content_disabled: "Give our newest feature in development a spin! It's still in the experimental stage, so we might remove it at any time. You can opt out whenever you like.

Changing this will enable the feature for all users." - content_enabled: "Changing this will disable the feature for all users." - feature_tooltip: - title_disabled: "Try this feature" - title_enabled: "Turn off feature" - content_disabled: "Give this new feature a spin! You can opt out whenever you like.

Changing this will enable the feature for all users." - content_enabled: "Changing this will disable the feature for all users." last_checked: "Last checked" refresh_problems: "Refresh" @@ -6528,10 +6695,11 @@ en: all: "All" view_table: "table" view_graph: "graph" - refresh_report: "Refresh Report" + refresh_report: "Refresh" daily: Daily monthly: Monthly weekly: Weekly + chart_group_period: "Select a period" value_so_far: "%{value} (so far)" dates: "Dates (UTC)" groups: "All groups" @@ -7392,6 +7560,7 @@ en: dark_color_scheme: "Dark Color Palette" default_light_scheme: "Light (default)" color_scheme_select: "Select colors to be used by theme." + only_theme_color_schemes: "This theme limits which color palettes can be used." dark_color_scheme_select: "Select colors to be used by theme in dark mode." edit_colors: "Edit colors" custom_sections: "Custom sections:" @@ -7452,7 +7621,7 @@ en: import_web_tip: "Repository containing theme" direct_install_tip: "Are you sure you want to install %{name} from the repository listed below?" import_web_advanced: "Advanced…" - import_file_tip: ".tar.gz, .zip, or .dcstyle.json file containing theme" + import_file_tip: ".tar.gz or .zip file containing theme" is_private: "Theme is in a private git repository" finish_install: "Finish Theme Installation" last_attempt: "Installation process did not finish, last attempted:" @@ -7489,6 +7658,16 @@ en: update_success: "%{theme} Update complete" up_to_date: "Theme is up-to-date, last checked:" has_overwritten_history: "Current theme version no longer exists because the Git history has been overwritten by a force push." + change_source: + button: "Change source" + title: "Change Theme Source" + repository_url: "Repository URL" + branch: "Branch (optional)" + updating: "Updating theme source…" + update: "Update Source" + has_existing_key: "This theme has an existing SSH key configured." + generate_new_key: "Generate new SSH key" + keep_existing_key: "Keep existing SSH key" add: "Add" theme_settings: "Custom theme settings" theme_site_settings: "Settings the theme can override" @@ -7936,6 +8115,7 @@ en: upcoming_change_available: "upcoming change available" change_site_setting_groups: "change site setting groups" discourse_id_regenerate_credentials: "regenerate Discourse ID credentials" + configure_category_type: "configure category type" screened_emails: title: "Screened emails" description: "When someone tries to create a new account, the following email addresses will be checked and the registration will be blocked, or some other action performed." @@ -8588,6 +8768,9 @@ en: more_than_50_results: "There are more than 50 results. Please refine your search." no_results: "No matching site texts found" interpolation_keys: "Available interpolation keys:" + interpolation_key_insert: "Click to insert" + interpolation_key_used: "Already used" + interpolation_key_invalid: "Unknown key — will not be interpolated" outdated: title: "This translation is outdated" description: "The default translation for this key has changed since this override was created. Please check below that your translation matches any changes that have been made to the original intent." @@ -8707,7 +8890,7 @@ en: min_admin_password_length: prompt: "You're about to change your password policy. This will affect all admins changing their passwords from now on. Are you sure you want to proceed?" confirm: "Yes, update password policy" - password_unique_charactes: + password_unique_characters: prompt: "You're about to change your password policy. This will affect all users changing their passwords from now on. Are you sure you want to proceed?" confirm: "Yes, update password policy" block_common_passwords: @@ -8880,6 +9063,8 @@ en: crawler_settings_saved: "Crawler settings saved" back: "Back to embedding" configuration_snippet: "Configuration snippet" + full_app_mode: "Full app mode" + full_app_mode_description: "Load the full Discourse application in the embed iframe, allowing users to reply, like, quote, and interact with topics directly" host_form: add_header: "Add host" edit_header: "Edit host" diff --git a/config/locales/client.en_GB.yml b/config/locales/client.en_GB.yml index 10c0e0106d856..8a1b5aa9dafbf 100644 --- a/config/locales/client.en_GB.yml +++ b/config/locales/client.en_GB.yml @@ -105,6 +105,9 @@ en_GB: navigation: title: "Navigation" tagging: + description: "Description" + localization: + description: "Description" manage_groups_description: "Define groups to organise tags" sidebar: sections: diff --git a/config/locales/client.es.yml b/config/locales/client.es.yml index 837078a83a22a..58f59ea7f1841 100644 --- a/config/locales/client.es.yml +++ b/config/locales/client.es.yml @@ -6,6 +6,14 @@ es: js: + blocks: + ghost: + status: "Estado" + conditions: "Condiciones" + arguments: "Parámetros" + in_location: "en" + hidden: "oculto" + failed: "falló" number: format: separator: "," @@ -294,6 +302,8 @@ es: software_update_prompt: message: "Hemos actualizado este sitio, vuelva a cargarlo para que todo funcione sin problemas." dismiss: "Descartar" + notifications_tracking: + tooltip: "Nivel de notificación: %{level}" back_button: "Volver" welcome_banner: header: @@ -406,6 +416,15 @@ es: pill: "Sugeridos" pm_title: "Mensajes sugeridos" admin_onboarding_banner: + launch_in_easy_steps: "Empieza en %{step_count} sencillos pasos" + invite_collaborators: + action: "Crear invitación" + start_posting: + title: "Empezar a publicar" + back: "Atrás" + icebreakers: + introduce_yourself: + title: "Preséntate" spread_the_word: action: "Copiar enlace" copied_to_clipboard: "Enlace copiado en el portapapeles!" @@ -490,8 +509,6 @@ es: other: "Creado hace %{count} años" bookmarked: title: "Marcador" - edit_bookmark: "Editar marcador" - clear_bookmarks: "Quitar marcadores" help: bookmark: "Haz clic para marcar este tema como favorito" edit_bookmark: "Haz clic para editar el marcador de una publicación de este tema" @@ -510,12 +527,12 @@ es: clear_reminder: "Quitar recordatorio" edit: "Editar marcador" not_bookmarked: "guarda esta publicación en marcadores" + topic_bookmark: "Tema" remove_reminder_keep_bookmark: "Eliminar recordatorio y mantener marcador" created_with_reminder: "Has marcado esta publicación con un recordatorio %{date}. %{name}" created_with_reminder_generic: "Has añadido esto a marcadores con un recordatorio %{date}. %{name}" delete: "Eliminar marcador" confirm_delete: "¿Quieres borrar este marcador? El recordatorio también se borrará." - confirm_clear: "¿Seguro que quieres eliminar todos tus marcadores en este tema?" save: "Guardar" no_timezone: 'No has establecido una zona horaria todavía. No podrás establecer recordatorios. Puedes elegir una en tu perfil.' invalid_custom_datetime: "La fecha y hora que has proporcionado no es válida. Inténtalo de nuevo." @@ -568,6 +585,10 @@ es: resume: "Reanudar" remove: "Eliminar" remove_confirmation: "¿Seguro que quieres eliminar este borrador?" + bulk_delete_confirmation: "Eliminar borradores" + bulk_delete_message: + one: "¿Seguro que quieres eliminar este borrador?" + other: "¿De verdad quieres eliminar estos %{count} borradores?" new_topic: "Nuevo borrador de tema" new_private_message: "Nuevo borrador de mensaje personal" edit_topic: "Editar borrador de tema" @@ -578,6 +599,10 @@ es: other_drafts: one: "+%{count} otro borrador" other: "+%{count} otros borradores" + embed_mode: + storage_access_prompt: "¿Ya tienes una cuenta en %{site_name}? Permite acceso a tu sesión para comentar con tu nombre." + allow_access: "Permitir acceso" + continue_as_guest: "Continuar sin iniciar sesión" topic_count_all: one: "Ver %{count} tema nuevo" other: "Ver %{count} temas nuevos" @@ -637,24 +662,19 @@ es: show_more: "Mostrar más" show_less: "Mostrar menos" back_to_queue: "Volver a la cola" + editing_post: "Editando publicación…" order_by: "Ordenar por" date_filter: "Publicado entre" in_reply_to: "en respuesta a" filtered_flagged_by: "Denunciado por" unknown: - title: - one: "Tienes revisiones pendientes del plugin deshabilitado:" - other: "Tienes revisiones pendientes de los plugins deshabilitados:" instruction: "No se mostrarán correctamente hasta que actives el plugin correspondiente. Activa el plugin y actualiza la página. También puedes ignorarlos. Más información..." reviewable_unknown_source: "%{reviewableType} (plugin desconocido)" reviewable_known_source: "%{reviewableType} (del plugin «%{pluginName}»)" ignore_all: "Ignorar todo" enable_plugins: "Activar plugins" - delete_confirm: "¿Seguro que quieres eliminar todas las revisiones creadas por plugins desactivados?" - ignore_success: "Se han eliminado todas las revisiones creadas por los plugins desactivados." explain: why: "explica por qué este elemento ha acabado en la cola" - title: "Puntuación revisable" formula: "Fórmula" subtotal: "Subtotal" total: "Total" @@ -668,10 +688,8 @@ es: title: "Los usuarios con los que se ha coincidido en denuncias anteriores reciben puntos extra." trust_level_bonus: name: "nivel de confianza" - title: "Los elementos revisables creados por usuarios con niveles de confianza elevados reciben una puntuación más alta." type_bonus: name: "tipo de bonificación" - title: "Algunos tipos revisables pueden recibir una bonificación por parte del personal para que tengan mayor prioridad." revise_and_reject_post: title: "Revisar" reason: "Motivo" @@ -680,7 +698,6 @@ es: custom_reason: "Describe claramente el motivo" other_reason: "Otro..." optional: "opcional" - stale_help: "Este revisable ha sido resuelto por %{username}." claim_help: optional: "Puedes reclamar este elemento para evitar que otros lo revisen." required: "Debes reclamar los elementos antes de poder revisarlos." @@ -833,6 +850,10 @@ es: is_this_post: "¿Es este/a %{reviewable_type} %{reviewable_human_score_types}?" delimiter: "o" something_else_wrong: "¿Hay algún problema con este/a %{reviewable_type}?" + approve_user: "¿Aprobar este usuario?" + suspect_user: "Este usuario, ¿es spam?" + approve_post: "¿Aprobar esta publicación?" + approve_topic: "¿Aprobar este tema?" types: reviewable_flagged_post: title: "Publicación denunciada" @@ -851,9 +872,14 @@ es: title: "Publicación" noun: "publicación" reviewable_ai_chat_message: + title: "Mensaje de chat denunciado por IA" noun: "mensaje de chat" reviewable_ai_post: + title: "Publicación denunciada por IA" noun: "publicación" + reviewable_post_voting_comment: + title: "Comentario denunciado" + noun: "comentario" flagged_as: "Marcado como" post_flagged_as: "Publicación denunciada: " chat_flagged_as: "Mensaje de chat denunciado: " @@ -867,6 +893,7 @@ es: target_created: "Publicación creada" target_created_by: "Publicación creada por %{username} · %{relativeDate}" target_deleted: "Publicación eliminada" + target_deleted_by: "Publicación eliminada por %{username} · %{relativeDate}" flagged: "Marcado" flagged_as_by: "Marcado como %{flagReason} por %{username} · %{relativeDate}" claimed: "Reclamado" @@ -1372,6 +1399,7 @@ es: title: "Próximos cambios" for_user: enabled: "¿Activado?" + why: "¿Por qué?" user_notifications: filters: filter_by: "Filtrar por" @@ -1693,6 +1721,10 @@ es: apps: "Aplicaciones" navigation_menu: "Menú de navegación" upcoming_changes: "Próximos cambios" + calendar_subscriptions: "Calendario" + calendar_subscriptions: + copied: "¡Copiado!" + add_to_google: "Calendario de Google" change_password: success: "(correo electrónico enviado)" in_progress: "(enviando correo electrónico)" @@ -2030,6 +2062,7 @@ es: redeemed_tab_with_count: "Canjeados (%{count})" invited_via: "Invitación" invited_via_link: "enlace %{key} (%{count} / %{max} canjeados)" + generating_link: "Generando enlace..." groups: "Grupos" topic: "Tema" sent: "Creado/Último enviado" @@ -2296,6 +2329,7 @@ es: form_kit: reset: Restablecer optional: opcional + required: obligatorio dirty_form: "¡No has enviado tus cambios! ¿Seguro que quieres salir?" errors: starts_with: "Debe comenzar con %{prefix}" @@ -2315,6 +2349,8 @@ es: too_short: one: "Debe tener al menos %{count} carácter" other: "Debe tener al menos %{count} caracteres" + color: + already_used: "Ya está en uso" close: "Cerrar" assets_changed_confirm: "Se ha recibido una actualización de software. ¿Obtener la última versión ahora?" logout: "Has cerrado sesión." @@ -2361,6 +2397,7 @@ es: }. learn_more: "Más información…" learn_more_with_link: "Más información…" + feedback_with_link: "Danos tu opinión…" mute: Silenciar unmute: No silenciar last_post: Fecha de publicación @@ -2689,6 +2726,8 @@ es: medium_dark_tone: Tono de piel medio oscuro dark_tone: Tono de piel oscuro default: Emojis personalizados + filter_input: + clear: "Limpiar filtro" shared_drafts: title: "Borradores compartidos" notice: "Este tema solo es visible para aquellos que pueden publicar borradores compartidos." @@ -2720,7 +2759,11 @@ es: title: "Traduciendo publicación" select: "Seleccionar traducción" save: "Guardar traducción" + original_content: "Publicación original" + translation_preview: "Vista previa de la traducción" + original: "Original" translation: "Traducción" + no_translation_yet: "Empieza a escribir para ver una vista previa de la traducción..." placeholder: "Introduce la traducción del post aquí..." group_mentioned_limit: one: "Aviso Has mencionado al grupo %{group}, pero tiene más miembros que los que los administradores permiten mencionar (%{count} usuario) de una vez. No se notificará a nadie." @@ -2776,7 +2819,9 @@ es: create_shared_draft: "Crear borrador compartido" edit_shared_draft: "Editar borrador compartido" title: "O pulsa %{modifier}Intro" + save_and_close: "Guardar y cerrar" discard: "Descartar" + draft_saved: "¡Borrador guardado!" users_placeholder: "Añadir usuarios o grupos" title_placeholder: "En una frase breve, ¿de qué trata este tema?" title_or_link_placeholder: "Escribe un título o pega un enlace aquí" @@ -2829,12 +2874,30 @@ es: upload_description: "introduce una descripción del archivo subido aquí" olist_title: "Lista numerada" ulist_title: "Lista con viñetas" + list_title: "Listas" list_item: "Lista de elementos" toggle_direction: "Mostrar/ocultar dirección" + apply_wrap_title: "Aplicar recubrimiento" wrap_modal: + title: "Editar recubrimiento" + name_label: "Nombre del recubrimiento" + attributes_label: "Atributos" + add_attribute: "Añadir atributo" + remove_attribute: "Eliminar atributo" apply: "Aplicar" + unwrap: "Eliminar recubrimiento" + no_attributes: "Todavía no hay atributos." + wrap_text: "Recubrir contenido" help: "Ayuda de edición con Markdown" + collapse: "Minimizar el editor" + open: "Abrir el editor" + abandon: "Cerrar el editor y descartar borrador" + enter_fullscreen: "Abrir editor en pantalla completa" + exit_fullscreen: "Salir del editor en pantalla completa" exit_fullscreen_prompt: "Pulsa ESC para salir del modo pantalla completa" + show_toolbar: "Mostrar barra de herramientas del editor" + hide_toolbar: "Ocultar barra de herramientas del editor" + peek_mode_toggle: "Activar/desactivar el modo vistazo" modal_ok: "Aceptar" cant_send_pm: "Lo sentimos, no puedes enviar un mensaje a %{username}." create_message_error: "Lo sentimos, se produjo un error al crear ese mensaje. Inténtalo de nuevo." @@ -2881,6 +2944,7 @@ es: desc: "Responder sin alterar la fecha de última respuesta" toggle_unlisted: label: Mostrar/ocultar no listados + desc: "Los temas que no están incluidos en la lista solo son accesibles a través de su enlace directo" reload: "Recargar" ignore: "Ignorar" image_alt_text: @@ -2891,7 +2955,11 @@ es: zoom_out: "Disminuir el tamaño de la imagen" zoom_in: "Aumentar el tamaño de la imagen" remove: "Eliminar imagen" + add_to_grid: "Añadir a la retícula" + move_outside_grid: "Sacar de la retícula" image: "imagen" + grid_label: "Se mostrará como una retícula" + grid_mode_grid: "Retícula" image_scale_button: "Escalar imagen a %{percent} %" delete_image_button: Eliminar imagen toggle_image_grid: Alternar cuadrícula de imágenes @@ -3122,6 +3190,7 @@ es: aria_label: Filtrar por etiqueta filters: label: Solo temas/publicaciones que… + all: Incluir mensajes title: Coincide solo en el título likes: me han gustado posted: he publicado en ellos @@ -3167,8 +3236,6 @@ es: max_views: placeholder: máximo aria_label: filtrar por número máximo de visitas - additional_options: - label: "Filtra por número de respuestas y visitas del tema" hamburger_menu: "Menú de navegación" new_item: "nuevo" go_back: "volver" @@ -3231,11 +3298,8 @@ es: confirm: "Confirmar" select_all: "Seleccionar todo" clear_all: "Limpiar todo" - unlist_topics: "Hacer invisibles" - relist_topics: "Hacer visibles de nuevo" reset_bump_dates: "Restablecer fechas de reflote" defer: "Marcar como no leído" - delete: "Eliminar temas" delete_topics_count: one: "Eliminar tema" other: "Eliminar temas" @@ -3268,36 +3332,27 @@ es: other: "Descartar nuevos (%{count})" toggle: "activar selección de temas en bloque" actions: "Acciones en bloque" - change_category: "Establecer categoría…" - close_topics: "Cerrar temas" - archive_topics: "Archivar temas" move_messages_to_inbox: "Mover a la bandeja de entrada" archive_messages: "Mover al archivo" - notification_level: "Notificaciones…" change_notification_level: "Cambiar nivel de notificación" choose_new_category: "Elige la nueva categoría de los temas:" - selected: - one: "Has seleccionado %{count} tema." - other: "Has seleccionado %{count} temas." selected_sole_category: one: "Has seleccionado %{count} tema de la categoría:" other: "Has seleccionado %{count} temas de la categoría:" selected_count: one: "%{count} seleccionado" other: "%{count} seleccionados" - change_tags: "Remplazar etiquetas" append_tags: "Añadir etiquetas" choose_new_tags: "Elige etiquetas nuevas para estos temas:" - choose_append_tags: "Elegir etiquetas nuevas para añadir a estos temas:" + choose_append_tags: "Añadir etiquetas" changed_tags: "Se han cambiado las etiquetas de esos temas." - remove_tags: "Eliminar todas las etiquetas" confirm_remove_tags: one: "Todas las etiquetas se eliminarán de este tema. ¿Estás seguro/a?" other: "Todas las etiquetas se eliminarán de %{count} temas. ¿Estás seguro/a?" progress: one: "Progreso: %{count} tema" other: "Progreso: %{count} temas" - notify: "Notificar a los usuarios afectados por el cambio." + notify: "Notificar a los usuarios afectados por el cambio" performing: "Realizando operaciones en bloque, espera…" completed: "¡Operaciones en bloque completadas con éxito!" error_topic_count: @@ -3320,12 +3375,12 @@ es: unread: "No tienes nada por leer... ¡Impresionante!" new_new: "No hay nada nuevo en este momento... ¡Vuelve pronto!" new: "No hay nada nuevo en este momento... ¡Vuelve pronto!" + generic: "No hay nada que ver aquí... ¡vuelve pronto!" topic_bulk_actions: dismiss: name: "Descartar" close_topics: name: "Cerrar" - note: "Nota" optional: (opcional) archive_topics: name: "Archivar" @@ -3339,24 +3394,18 @@ es: name: "Volver a publicar" remove_tags: name: "Eliminar etiquetas" - append_tags: - name: "Añadir etiquetas" replace_tags: name: "Remplazar etiquetas" delete_topics: name: "Eliminar" update_category: name: "Actualizar Categoría" - description: "Elige la nueva categoría para los temas seleccionados" reset_bump_dates: name: "Restablecer las fechas de reflote" - description: "Restablecer la fecha de reflote del tema a la fecha de la última publicación creada, lo que afecta a la ordenación en la lista de temas." defer: name: "Marcar como no leído" - description: "Marcar temas como no leídos" update_notifications: name: "Actualizar notificaciones" - description: "Cambia el nivel de notificación a Viendo, En seguimiento, Normal o Silenciado" topic: filter_to: one: "%{count} publicación en el tema" @@ -3478,6 +3527,8 @@ es: 12_hours: "12 Horas" 24_hours: "24 Horas" custom: "Otra duración" + slow_mode_notice: + duration: "Por favor, espera %{duration} entre tus publicaciones en este tema" topic_status_update: title: "Temporizador de temas" save: "Configurar temporizador" @@ -3507,6 +3558,8 @@ es: title: "Cerrar tema automáticamente después de cierto tiempo de la última publicación" auto_delete: title: "Eliminar tema automáticamente" + auto_delete_after_last_post: + title: "Eliminar tema automáticamente cuando pase un tiempo desde la última publicación" auto_bump: title: "Reflotar tema automáticamente" reminder: @@ -3518,6 +3571,7 @@ es: auto_close: "Este tema se cerrará automáticamente %{timeLeft}." auto_publish_to_category: "Este tema se publicará en #%{categoryName} %{timeLeft}." auto_close_after_last_post: "Este tema se cerrará %{duration} después de la última respuesta." + auto_delete_after_last_post: "Este tema será eliminado tras %{duration} desde la última publicación." auto_delete: "Este tema se eliminará automáticamente %{timeLeft}." auto_bump: "Este tema se reflotará automáticamente %{timeLeft}." auto_reminder: "Te recordaremos sobre este tema %{timeLeft}." @@ -3895,7 +3949,9 @@ es: edit: "Editar" delete: "Eliminar" add: "Añadir nueva traducción" - manage: "Gestionar traducciones (%{count} existente(s))" + manage: + one: "Gestionar traducciones (%{count} existente(s))" + other: "Gestionar traducciones (%{count} existente(s))" view: one: "Ver %{count} traducción a idioma local" other: "Ver %{count} traducciones a idiomas locales" @@ -3904,6 +3960,7 @@ es: confirm_delete: "¿Seguro que quieres eliminar las traducciones de «%{languageCode}»?" success: "Las traducciones se han actualizado correctamente" post_language_selector: + title: "Idioma de la publicación" none: "Ninguno" edit_warning: message: "Esta publicación ha sido traducida.

¿Quieres editar la original en %{language} o editar esta traducción específica?" @@ -4119,6 +4176,7 @@ es: general: "General" settings: "Ajustes" advanced: "Avanzado" + show_advanced: "Ajustes avanzados" topic_template: "Plantilla" tags: "Etiquetas" localizations: "Localizaciones" @@ -4143,11 +4201,19 @@ es: delete: "Eliminar" add: "Añadir grupo de etiquetas obligado" placeholder: "Selecciona un grupo de etiquetas…" + min_count: "Número de etiquetas" + tag_group: "Grupo de etiquetas" topic_featured_link_allowed: "Permitir enlaces destacados en esta categoría" delete: "Eliminar categoría" create: "Crear categoría" create_long: "Crear una nueva categoría" + type_settings_schema: + site_settings: "Ajustes del sitio" + choose_type: + requires_plugin: "Requiere plugin" + create_category: "Crear categoría" save: "Guardar categoría" + unsaved_changes: "Tienes cambios sin guardar" slug: "Identificador de URL de la categoría" parent: "Categoría padre" slug_placeholder: "(Opcional) palabras-separadas-por-guiones para URL" @@ -4156,6 +4222,7 @@ es: errors: self_lockout: "Estás a punto de cambiar los permisos de la categoría de una forma que perderías tu propio acceso. ¿De verdad quieres continuar?" validations: + emoji_required: "Selecciona un emoji." icon_required: "Selecciona un icono." name: "Nombre de la categoría" untitled: "Categoría sin nombre" @@ -4168,6 +4235,7 @@ es: style: "Estilo" icon: "Icono" emoji: "Emoji" + select_emoji: "Seleccionar emoji" background_color: "Color" foreground_color: "Color del texto" color_validations: @@ -4191,6 +4259,8 @@ es: list: "Lista de categorías" no_description: "Añade una descripción para esta categoría." change_in_category_topic: "Editar descripción" + description_expand: "Mostrar más" + description_collapse: "Mostrar menos" already_used: "Este color ya ha sido usado para otra categoría" color_palette: "Paleta de colores" security: "Seguridad" @@ -4229,18 +4299,26 @@ es: review_group_name: "nombre del grupo" require_topic_approval: "Requiere aprobación del moderador para todos los temas nuevos" require_reply_approval: "Requiere aprobación del moderador para todas las respuestas nuevas" + posting_review_modes: + no_one: "Nadie" + everyone: "Todos" + posting_review_groups_placeholder: "Seleccionar grupos..." this_year: "este año" position: "Posición en la página de categorías:" default_position: "Posición por defecto" position_disabled: "Las categorías se mostrarán por orden de actividad. Para controlar el orden de las categorías en las listas, activa el ajuste «posiciones fijas de las categorías»." minimum_required_tags: "Número mínimo de etiquetas requeridas en un tema:" default_slow_mode: 'Activar el "modo lento" en los nuevos temas de esta categoría.' + subcategory_of: "Subcategoría de..." none_subcategory_text: "Ninguna" + subcategory_permissions_warning: "Una subcategoría de una categoría privada no puede ser pública." visibility: title: "Visibilidad" public: "Público" all_members: "Todos los miembros" group_restricted: "Privado" + who_can_see: "Quién puede ver esta categoría" + who_can_post: "Quién puede publicar en esta categoría" num_auto_bump_daily: "Número de temas abiertos que se reflotarán diariamente de forma automática:" auto_bump_cooldown_days: "Mínimo de días antes de reactivar el mismo tema:" navigate_to_first_post_after_read: "Ir a la primera publicación después de haber leído los temas" @@ -4555,10 +4633,14 @@ es: lightbox: download: "Descargar" open: "Imagen original" + image_info: "Información de la imagen" + quote: "Citar imagen" previous: "Anterior (flecha izquierda)" next: "Siguiente (flecha derecha)" counter: "%curr% de %total%" close: "Cerrar (Esc)" + zoom: "Zoom (tecla Z)" + error: "No se puede cargar la imagen" content_load_error: 'El contenido no se pudo cargar.' image_load_error: 'La imagen no se pudo cargar.' cannot_render_video: Este vídeo no se puede mostrar porque tu navegador no es compatible con el códec. @@ -4724,6 +4806,7 @@ es: add_to_calendar: "Añadir al calendario" google: "Calendario de Google" ics: "ICS" + default_title: "Evento programado" tagging: all_tags: "Todas las etiquetas" other_tags: "Otras etiquetas" @@ -4738,6 +4821,7 @@ es: choose_for_topic_required_group: one: "selecciona %{count} etiqueta de «%{name}»…" other: "selecciona %{count} etiquetas de «%{name}»…" + info: "Mostrar info de la etiqueta" default_info: "Esta etiqueta no está restringida a ninguna categoría, y no tiene sinónimos." staff_info: "Para añadir restricciones, mete la etiqueta a un grupo de etiquetas." category_restricted: "Esta etiqueta está restringida para las categorías a las que no tienes permiso de acceso." @@ -4768,7 +4852,24 @@ es: one: "Su sinónimo también se eliminará" other: "Sus %{count} sinónimos también se eliminarán." edit_tag: "Editar el nombre y la descripción de la etiqueta" - description: "Descripción (máx. 1000 caracteres)" + edit: "Editar esta etiqueta" + description: "Descripción" + settings: + title: "Ajustes" + general: "General" + localizations: "Localizaciones" + back: "Atrás" + name: "Nombre" + slug: "Slug" + name_placeholder: "Nombre de la etiqueta" + synonyms_subtitle: "Cuando las siguientes etiquetas sean usadas, serán reemplazadas por %{name}" + save: "Guardar etiqueta" + localization: + locale: "Idioma local" + name: "Nombre" + description: "Descripción" + add: "Añadir traducción" + remove: "Quitar traducción" sort_by: "Ordenar por:" sort_by_count: "cantidad" sort_by_name: "nombre" @@ -4778,6 +4879,7 @@ es: upload_description: "Sube un archivo csv para crear etiquetas en masa" upload_instructions: "Una por línea, opcional con un grupo de etiquetas en el formato «tag_name,tag_group»." upload_successful: "Etiquetas subidas con éxito" + bulk_create_inline_placeholder: "Crear etiquetas (separadas por comas)" bulk_create_button: "Crear" delete_unused_confirmation: one: "%{count} etiqueta será eliminada: %{tags}" @@ -4812,13 +4914,18 @@ es: description: "No se te notificará sobre temas nuevos con esta etiqueta, ni aparecerán en tu pestaña de no leídos." groups: back_btn: "Volver a todas las etiquetas" + title: "Grupos de etiquetas" about_heading: "Selecciona un grupo de etiquetas, o crea uno nuevo" about_heading_empty: "Crea un nuevo grupo de etiquetas para empezar" about_description: "Los grupos de etiquetas te ayudan a gestionar los permisos de muchas etiquetas en un único sitio." + new: "Nuevo grupo" + new_title: "Crear nuevo grupo" + edit_title: "Editar grupo de etiquetas" tags_label: "Etiquetas en este grupo" parent_tag_label: "Etiqueta principal" parent_tag_description: "Las etiquetas de este grupo solo se podrán usar si la etiqueta principal está presente." one_per_topic_label: "Limitar las etiquetas de este grupo a utilizarse solo una vez por tema" + new_name: "Nuevo grupo de etiquetas" name_placeholder: "Nombre" save: "Guardar" delete: "Eliminar" @@ -5010,6 +5117,7 @@ es: header_link_text: "Categorías" header_action_title: "Editar las categorías de tu barra lateral" header_action_new: "Crear categoría" + header_action_edit_sidebar: "Editar categorías de la barra lateral" configure_defaults: "Configurar valores predeterminados" community: edit_section: @@ -5256,10 +5364,16 @@ es: bookmarks: "Temas en %{category} sin etiquetas que has añadido a marcadores" default: "%{filter} temas en %{category} sin etiquetas" categories: "Todas las categorías" + content_localization: + toggle_localized: + translations_enabled: "Traducciones activadas" + translations_disabled: "Traducciones desactivadas" + language_switcher: + title: "Cambiar idioma del sitio" admin_js: type_to_filter: "Escribe para filtrar…" settings: "Ajustes" - reset_filter: "Restablecer" + reset_filter: "Quitar filtro" admin: title: "Administrador de Discourse" moderator: "Moderador" @@ -5272,9 +5386,12 @@ es: never: "nunca" reports: title: "Lista de informes disponibles" - meta_doc: "Los informes son una poderosa herramienta para ayudarte a comprender lo que ocurre en tu sitio. Pueden ayudarte a identificar tendencias, detectar problemas y tomar decisiones basadas en datos." sidebar_title: "Informes" back: "Volver a todos los informes" + group_engagement: "Interacción" + group_traffic: "Tráfico" + group_members: "Miembros" + group_other: "Otros" config_sections: account: title: "Cuenta" @@ -5294,14 +5411,24 @@ es: title: "Avanzado" upcoming_changes: name: "Nombre" + plugin: "Plugin" + metadata: "Metadatos" enabled: "Activado" + enabled_for: "Activado para..." + show_image: "Ver imagen" + groups_updated: "Grupos actualizados" + save_groups: "Guardar grupos" select_groups: "Seleccionar grupos…" + show_related_settings: "Ver ajustes relacionados..." preview: "Vista previa" enabled_for_options: + no_one: "Nadie" everyone: "Todos" - staff: "Solo personal" statuses: experimental: "Experimental" + alpha: "Alfa" + beta: "Beta" + stable: "Estable" permanent: "Permanente" impact_roles: admins: "Administradores" @@ -5380,7 +5507,9 @@ es: signups_30_days: "Registros (30 días)" logins_30_days: "Inicios de sesión (30 días)" regenerate_credentials: "Regenerar credenciales" + description: "Discourse ID es un servicio de inicio de sesión único que permite a los usuarios iniciar sesión en varios sitios de Discourse usando una sola cuenta. Es compatible con los proveedores de inicio de sesión de redes sociales comunes como Google, Facebook, Apple y Github, sin ninguna configuración adicional." learn_more: "Más información" + regenerate_success: "Credenciales regeneradas correctamente." logo: title: "Logo" header_description: "Configura los logotipos e iconos utilizados en todo tu sitio" @@ -5396,7 +5525,6 @@ es: help_text: "El tamaño recomendado es 600 x 80 píxeles." large_icon: title: "Icono cuadrado" - description: "Una versión cuadrada de la imagen del logotipo aparece en la parte superior de la administración y también es el logotipo de la aplicación de la pantalla de inicio del dispositivo móvil." help_text: "El tamaño recomendado es 512 x 512 píxeles." square_icon_dark: required: "¿Usar un icono cuadrado diferente para el modo oscuro?" @@ -5496,6 +5624,7 @@ es: locale_label: "Idioma" header_new_members: label: "Cabecera para nuevos miembros" + placeholder: "¡Hola, %{preferred_display_name}!" header_logged_in: label: "Cabecera para miembros registrados" placeholder: "¡Te damos la bienvenida de nuevo, %{preferred_display_name}!" @@ -5508,6 +5637,7 @@ es: placeholder: "Únete a nuestra comunidad para participar" search_placeholder: label: "Texto a mostrar en la caja de búsqueda si está vacía" + placeholder: "Buscar temas..." navigation: title: "Navegación" header_description: "Configura los enlaces de navegación y los elementos de menú de tu sitio. Esto incluye la ubicación y el comportamiento del menú de navegación principal, los enlaces rápidos de la parte superior de la página de inicio, así como la barra lateral de administración." @@ -5569,7 +5699,7 @@ es: header_description: "Los informes son una poderosa herramienta para ayudarte a comprender lo que ocurre en tu sitio. Pueden ayudarte a identificar tendencias, detectar problemas y tomar decisiones basadas en datos." sub_pages: settings: - title: "Ajustes del panel de control" + title: "Ajustes" badges: title: "Medallas" header_description: "Las insignias recompensan a los usuarios por sus actividades, contribuciones y logros para reconocer, validar y fomentar el comportamiento positivo y el compromiso dentro de la comunidad" @@ -5702,6 +5832,9 @@ es: embedding: title: "Incrustado" header_description: "Discourse tiene la capacidad de incrustar los comentarios de un tema en un sitio remoto utilizando una API Javascript que crea un IFRAME" + form_templates: + title: "Plantillas de formulario" + header_description: "Las plantillas de formulario permiten forzar una estructura con validación de datos para los mensajes al crear nuevos temas" theme_site_settings: setting: "Ajuste" overridden_by: "Anulado por" @@ -5719,22 +5852,6 @@ es: result_count: one: '%{count} resultado para «%{filter}»' other: '%{count} resultados para «%{filter}»' - result_types: - page: - one: "Página" - other: "Páginas" - report: - one: "Informe" - other: "Informes" - setting: - one: "Ajuste" - other: "Ajustes" - theme: - one: "Tema" - other: "Temas" - component: - one: "Componente" - other: "Componentes" new_features: title: "Novedades" check_for_updates: "Buscar actualizaciones" @@ -5758,23 +5875,6 @@ es: title: "Novedades" subtitle: "Lanzamos nuevas funciones y mejoras continuamente. Esta página cubre los aspectos más destacados, pero puedes hacer clic en «Más información» para ver las notas de la versión completa." learn_more: "Más información..." - experimental: "Experimental" - only_experiments: "Mostrar solo características experimentales" - experiment_enabled: "Has activado la característica experimental." - experiment_disabled: "Has desactivado la característica experimental." - feature_enabled: "Has activado la característica." - feature_disabled: "Has desactivado la característica." - toggled_too_fast: "Has activado el interruptor demasiado rápido. Espera unos segundos antes de volver a intentarlo." - experiment_tooltip: - title_disabled: "Prueba esta característica experimental" - title_enabled: "Desactivar la característica experimental" - content_disabled: "¡Prueba nuestra nueva característica en desarrollo! Aún está en fase experimental, por lo que podríamos eliminarla en cualquier momento. Puedes excluirte cuando quieras.

Si cambias esto, se activará la característica para todos los usuarios." - content_enabled: "Si cambias esto, se desactivará la característica para todos los usuarios." - feature_tooltip: - title_disabled: "Probar esta característica" - title_enabled: "Desactivar características" - content_disabled: "¡Prueba esta característica! Puedes desactivarla cuando quieras.

Al cambiar esta opción, la característica estará disponible para todos los usuarios." - content_enabled: "Si cambias esto, se desactivará la característica para todos los usuarios." last_checked: "Ultima comprobación" refresh_problems: "Volver a cargar" no_problems: "No se ha encontrado ningún problema." @@ -5837,10 +5937,11 @@ es: all: "Todo" view_table: "tabla" view_graph: "gráfico" - refresh_report: "Actualizar informe" + refresh_report: "Volver a cargar" daily: Diariamente monthly: Mensualmente weekly: Semanalmente + value_so_far: "%{value} (hasta ahora)" dates: "Fechas (UTC)" groups: "Todos los grupos" disabled: "Este informe está desactivado" @@ -6055,6 +6156,7 @@ es: suspend: Suspender cuentas de usuario. delete: Eliminar cuentas de usuario. list: Obtener una lista de usuarios. + create: Crear un nuevo usuario. user_status: read: Lee el estado del usuario. update: Actualizar estado de usuario. @@ -6158,6 +6260,7 @@ es: user_destroyed: "Se ha eliminado el usuario" user_suspended: "El usuario está suspendido" user_unsuspended: "El usuario no está suspendido" + user_anonymized: "El usuario está anonimizado" reviewable_event: group_name: "Eventos revisables" reviewable_created: "El elemento revisable está listo" @@ -6595,6 +6698,7 @@ es: copy_to_clipboard: "Copiar al portapapeles" copied_to_clipboard: "Copiado al portapapeles" copy_to_clipboard_error: "Error al copiar datos al portapapeles" + theme_owner: "Propiedad de:" email_templates: title: "Correo electrónico" subject: "Asunto" @@ -6603,6 +6707,7 @@ es: revert: "Revertir los cambios" revert_confirm: "¿Seguro que quieres revertir los cambios?" edit: "Editar" + back: "Volver a plantillas" component: all_filter: "Todo" used_filter: "Usado" @@ -6637,6 +6742,8 @@ es: create_name: "Nombre" save: "Guardar" long_title: "Modificar los colores, CSS y contenidos HTML de su sitio" + dark_mode: "%{themeName} (modo oscuro)" + light_mode: "%{themeName} (modo claro)" edit: "Editar" edit_confirm: "Este es un tema remoto, si editas CSS/HTML, los cambios se eliminarán la próxima vez que actualices el tema." update_confirm: "Estos cambios locales se eliminarán por la actualización. ¿Seguro que quieres continuar?" @@ -6723,7 +6830,6 @@ es: import_web_tip: "Repositorio que contiene el tema" direct_install_tip: "¿Seguro que quieres instalar %{name} del repositorio listado abajo?" import_web_advanced: "Avanzado…" - import_file_tip: "archivo .tar.gz, .zip o .dcstyle.json que contiene un tema" is_private: "El tema está en un repositorio privado de git" finish_install: "Terminar la instalación del tema" last_attempt: "La instalación no ha terminado, último intento:" @@ -7197,6 +7303,7 @@ es: tag_group_change: "cambiar grupo de etiquetas" delete_associated_accounts: "eliminar cuentas asociadas" change_theme_site_setting: "cambiar ajustes del tema del sitio" + stop_impersonating: "deja de suplantar" screened_emails: title: "Correos bloqueados" description: "Cuando alguien trate de crear una cuenta nueva, los siguientes correos electrónicos se revisarán y el registro se bloqueará, o se realizará alguna otra acción." @@ -7333,6 +7440,7 @@ es: upload: "Subir un archivo" multiselect: "Múltiples opciones" tagchooser: "Selector de grupo de etiquetas" + composer: "Respuesta en Markdown" validations_modal: button_title: "Validaciones" modal_title: "Opciones de validación" @@ -7374,7 +7482,10 @@ es: second: "Opción 2" third: "Opción 3" edit_category: + toggle_freeform: "Plantilla de formulario desactivada" + toggle_form_template: "Plantilla de formulario habilitada" select_template: "Seleccionar plantillas de formularios" + select_template_help: "Añadir/editar plantillas de formularios" errors: multiple_tags_not_allowed: 'No puedes seleccionar más etiquetas de «%{tag_name}». Para evitar problemas, usa la plantilla de formulario.' impersonate: @@ -7382,6 +7493,7 @@ es: help: "Utiliza esta herramienta para suplantar una cuenta de usuario con fines de depuración. Tendrás que cerrar sesión al terminar." not_found: "No se pudo encontrar a ese usuario." invalid: "Lo sentimos, no puedes suplantar a ese usuario." + error: "Vaya, ha ocurrido un error inesperado." users: title: "Usuarios" description: "Ver y gestionar usuarios." @@ -7608,6 +7720,7 @@ es: cancel: "Cancelar" merging_user: "Fusionando usuario…" merge_failed: "Ha ocurrido un error al fusionar los usuarios." + delete_forbidden_because_admin: "Los administradores no pueden ser eliminados." delete_forbidden: one: "Los usuarios no se pueden borrar si han sido registrados hace más de %{count} día, o si tienen publicaciones. Borra todas publicaciones antes de tratar de borrar un usuario." other: "Los usuarios no se pueden eliminar si tienen publicaciones. Elimina todas las publicaciones antes de tratar de eliminar a un usuario. (No se pueden eliminar las publicaciones que se hayan creado hace más de %{count} días)" @@ -7754,6 +7867,10 @@ es: title: "Mostrar en las tarjetas de usuario" enabled: "Se muestra en la tarjeta de usuario" disabled: "No se muestra en la tarjeta de usuario" + show_on_signup: + title: "Mostrar en el formulario de registro" + enabled: "Se muestra en el formulario de registro" + disabled: "No se muestra en el formulario de registro" searchable: title: "Se puede buscar" enabled: "Se puede buscar" @@ -7761,6 +7878,7 @@ es: field_types: text: "Texto" textarea: "Área de texto" + date: "Fecha" confirm: "Confirmación" dropdown: "Desplegable" multiselect: "Selección múltiple" @@ -7781,6 +7899,8 @@ es: more_than_50_results: "Hay más de 50 resultados. Por favor, afina tu búsqueda." no_results: "No se han encontrado textos de sitios coincidentes" interpolation_keys: "Claves de interpolación disponibles:" + interpolation_key_insert: "Haz clic para insertar" + interpolation_key_used: "Ya está en uso" outdated: title: "Esta traducción está anticuada" description: "La traducción por defecto de esta clave ha cambiado desde que se creó esta anulación. Comprueba a continuación que tu traducción coincide con cualquier cambio que se haya hecho en la intención original." @@ -7828,6 +7948,9 @@ es: label: "Subir" title: "Subir imágenes" download_file: "Descargar" + upload_restrictions: + extensions: "Se aceptan: %{extensions}" + max_size: "Máximo: %{size}" selectable_avatars: title: "Lista de avatares que los usuarios pueden escoger" table_column_heading: @@ -7893,7 +8016,7 @@ es: confirm: "Sí, actualizar la política de contraseñas" min_admin_password_length: confirm: "Sí, actualizar la política de contraseñas" - password_unique_charactes: + password_unique_characters: confirm: "Sí, actualizar la política de contraseñas" block_common_passwords: confirm: "Sí, actualizar la política de contraseñas" @@ -7933,6 +8056,8 @@ es: no_user_badges: "%{name} no ha recibido ninguna medalla." no_badges: No hay medallas que se puedan conceder. none_selected: "Selecciona una medalla para empezar" + filter_placeholder: "Filtrar medallas..." + no_badges_found: "No se han encontrado medallas" sections: design: Diseño query: Consulta diff --git a/config/locales/client.et.yml b/config/locales/client.et.yml index 4e6fc875a512b..89690a17585d0 100644 --- a/config/locales/client.et.yml +++ b/config/locales/client.et.yml @@ -6,6 +6,11 @@ et: js: + blocks: + ghost: + status: "Staatus" + hidden: "peidetud" + failed: "ebaõnnestunud" number: format: separator: "." @@ -245,6 +250,9 @@ et: title: "Uued ja lugemata teemad" pill: "Soovitatud" pm_title: "Soovitatud sõnumid" + admin_onboarding_banner: + start_posting: + back: "Tagasi" about: edit: "Muuda seda lehekülge" simple_title: "Teave" @@ -277,17 +285,16 @@ et: all_time: "kogu aeg" bookmarked: title: "Järjehoidja" - clear_bookmarks: "Kustuta järjehoidjad" help: unbookmark: "Kliki selle teema kõigi järjehoidjate eemaldamiseks" bookmarks: created: "Oled selle postituse järjehoidjatesse lisanud. %{name}" edit: "Muuda järjehoidjat" not_bookmarked: "lisa sellele postitusele järjehoidja" + topic_bookmark: "Teema" created_with_reminder: "Olete selle postituse järjehoidjatesse lisanud meeldetuletusega %{date}. %{name}" delete: "Kustuta järjehoidja" confirm_delete: "Kas soovid selle järjehoidja kustutada? Kustutatakse ka meeldetuletus." - confirm_clear: "Kas soovid kindlasti sellest teemast kustutada kõik oma järjehoidjad?" save: "Salvesta" invalid_custom_datetime: "Sisestatud kuupäev ja kellaaeg on valed, palun proovi uuesti." list_permission_denied: "Sul pole õigusi selle kasutaja järjehoidjate vaatamiseks." @@ -965,6 +972,8 @@ et: tags: "Sildid" interface: "Kasutajaliides" apps: "Äpid" + calendar_subscriptions: + copied: "Kopeeritud!" change_password: success: "(meil saadetud)" in_progress: "(saadan meili)" @@ -1288,6 +1297,7 @@ et: form_kit: reset: Lähtesta optional: valikuline + required: nõutud errors: required: "Nõutud" close: "Sulge" @@ -1661,8 +1671,6 @@ et: bulk: select_all: "Vali kõik" clear_all: "Puhasta kõik" - unlist_topics: "Eemalda teemad loetelust" - delete: "Kustuta teemad" delete_topics_count: one: "Kustuta teema" other: "Kustuta teemad" @@ -1674,20 +1682,11 @@ et: dismiss_new: "Ignoreeri uusi" toggle: "lülita teemade massiline äramärkimine ümber" actions: "Masstoimingud" - close_topics: "Sulge teemad" - archive_topics: "Arhiveeri teemad" move_messages_to_inbox: "Liiguta sisendkausta" change_notification_level: "Muuda teavituste taset" choose_new_category: "Vali teemadele uus kategooria:" - selected: - one: "Märkisid ära %{count} teema." - other: "Märkisid ära %{count} teemat." - change_tags: "Asenda sildid" - append_tags: "Lisa sildid" choose_new_tags: "Vali teemadele uued sildid:" - choose_append_tags: "Vali uued sildid, mida nendele teemadele lisada:" changed_tags: "Nende teemade silte on muudetud." - remove_tags: "Eemalda kõik sildid" confirm_remove_tags: one: "Sellelt teemalt eemaldatakse kõik sildid. Kas oled kindel?" other: "%{count} teemalt eemaldatakse kõik sildid. Kas oled kindel?" @@ -1716,8 +1715,6 @@ et: name: "Arhiiv" move_messages_to_inbox: name: "Liiguta postkasti" - append_tags: - name: "Lisa sildid" replace_tags: name: "Asenda sildid" delete_topics: @@ -2243,6 +2240,8 @@ et: review_group_name: "rühma nimi" require_topic_approval: "Nõua moderaatori heakskiitu kõikidele uutele teemadele" require_reply_approval: "Nõua moderaatori heakskiitu kõikidele uutele vastustele" + posting_review_modes: + everyone: "Kõik" this_year: "sel aastal" position: "Asukoht kategooriate lehel:" minimum_required_tags: "Minimaalne nõutud siltide arv teemas:" @@ -2548,6 +2547,15 @@ et: choose_for_topic: "valikulised sildid" add_synonyms: "Lisa" delete_tag: "Kustuta silt" + description: "Kirjeldus" + settings: + title: "Seaded" + general: "Üldine" + back: "Tagasi" + name: "Nimi" + localization: + name: "Nimi" + description: "Kirjeldus" sort_by: "Järjesta:" sort_by_count: "üldarv" sort_by_name: "nimi" @@ -2709,7 +2717,6 @@ et: categories: "Kõik kategooriad" admin_js: settings: "Sätted" - reset_filter: "Nulli" admin: title: "Discourse'i adminn" moderator: "Moderaator" @@ -2717,6 +2724,10 @@ et: remove_muted_tags_from_latest: always: "alati" never: "mitte kunagi" + reports: + group_traffic: "Liiklus" + group_members: "Liikmed" + group_other: "Muu" config_sections: account: title: "Konto" @@ -2801,6 +2812,10 @@ et: sub_pages: logs: title: "Logid" + reports: + sub_pages: + settings: + title: "Seaded" badges: title: "Märgised" permalinks: @@ -2846,13 +2861,6 @@ et: default_value: "Vaikimisi" search: title: "Otsi" - result_types: - theme: - one: "Kujundusteema" - other: "Kujundused" - component: - one: "Komponent" - other: "Komponendid" dashboard: title: "Armatuurlaud" last_updated: "Töölauda on uuendatud:" @@ -2902,7 +2910,7 @@ et: all: "Kõik" view_table: "tabel" view_graph: "diagramm" - refresh_report: "Värskenda raportit" + refresh_report: "Värskenda" daily: Igapäevaselt monthly: Igakuiselt weekly: Iganädalaselt @@ -3722,6 +3730,7 @@ et: title: "Kuva kasutaja profiilil" field_types: text: "Tekst" + date: "Kuupäev" confirm: "Kinnitus" dropdown: "Rippmenüü" site_text: diff --git a/config/locales/client.fa_IR.yml b/config/locales/client.fa_IR.yml index 8513d057d8c5a..278920a8663e0 100644 --- a/config/locales/client.fa_IR.yml +++ b/config/locales/client.fa_IR.yml @@ -6,6 +6,12 @@ fa_IR: js: + blocks: + ghost: + status: "وضعیت" + in_location: "در" + hidden: "مخفی" + failed: "ناموفق" number: format: separator: "." @@ -340,6 +346,8 @@ fa_IR: pill: "پیشنهادی" pm_title: "پیام‌های پیشنهادی" admin_onboarding_banner: + start_posting: + back: "بازگشت" spread_the_word: action: "رونوشت پیوند" copied_to_clipboard: "پیوند در کلیپ بورد کپی شد!" @@ -417,8 +425,6 @@ fa_IR: other: "ایجاد شده در %{count} سال پیش" bookmarked: title: "نشانک" - edit_bookmark: "ویرایش نشانک" - clear_bookmarks: "پاک کردن نشانک‌ها" help: bookmark: "برای نشانک گذاری این موضوع کلیک کنید" edit_bookmark: "برای ویرایش نشانک یک پست در این موضوع کلیک کنید" @@ -436,12 +442,12 @@ fa_IR: clear_reminder: "پاک کردن یادآور" edit: "ویرایش نشانک" not_bookmarked: "این نوشته را نشانک بزنید" + topic_bookmark: "موضوع" remove_reminder_keep_bookmark: "حذف یادآوری و نگه داشتن نشانک" created_with_reminder: "شما این نوشته را با یادآوری %{date} نشانک کردید. %{name}" created_with_reminder_generic: "شما این را با نشانه‌گذاری کردید و یک یادآور در %{date}. %{name} برای آن تنظیم کردید." delete: "حذف نشانک" confirm_delete: "آیا مطمئن هستید که می‌خواهید این نشانک را حذف کنید؟ یادآوری هم حذف خواهد شد." - confirm_clear: "آیا مطمئنید می‌خواهید همه‌ی نشانک‌های خود را از این موضوع پاک کنید؟" save: "ذخیره" no_timezone: 'شما هنوز منطقه زمانی مشخص نکرده اید. شما قادر به تنظیم کردن یادآوری نیستید. یکی را در پروفایل تان تنظیم کنید.' invalid_custom_datetime: "تاریخ و ساعت ارائه شده معتبر نیست، لطفا دوباره امتحان کنید." @@ -567,19 +573,13 @@ fa_IR: in_reply_to: "در پاسخ به" filtered_flagged_by: "پرچم گذاری شده توسط" unknown: - title: - one: "از طرف افزونه غیرفعال شده، موارد قابل بازبینی معلق دارید:" - other: "از طرف افزونه‌های غیرفعال، موارد قابل بازبینی معلق دارید:" instruction: "تا زمانی که پلاگین مربوط را فعال نکنید، نمی توانند به درستی نمایش داده شوند. لطفا افزونه را فعال کنید و صفحه را تازه کنید. البته می توانید آنها را نادیده نیز بگیرید. بیشتر بدانید..." reviewable_unknown_source: "%{reviewableType} (افزونه ناشناخته)" reviewable_known_source: "%{reviewableType} (از افزونه '%{pluginName}')" ignore_all: "چشم‌پوشی از همه" enable_plugins: "فعال‌سازی افزونه" - delete_confirm: "آیا مطمئن هستید که می‌خواهید تمام بررسی‌های ایجاد شده توسط پلاگین‌های غیرفعال را حذف کنید؟" - ignore_success: "تمام بررسی‌های ایجاد شده توسط پلاگین‌های غیرفعال حذف شده‌اند." explain: why: "توضیح دهید که چرا این مورد در صف پایان یافت" - title: "امتیازدهی قابل تجدید نظر" formula: "فرمول" subtotal: "جمع جزء" total: "مجموع" @@ -593,10 +593,8 @@ fa_IR: title: "کاربرانی که پرچم آن ها به طور گروهی پذیرفته شده است، یک امتیاز دریافت می کنند." trust_level_bonus: name: "سطح اعتماد" - title: "موارد قابل بررسی که توسط کاربرانی با میزان اعتماد بیشتر ایجاد شده اند، اولویت بالاتری دارند." type_bonus: name: "امتیاز را وارد کنید" - title: "موارد قابل بررسی خاص می توانند کارمندان دارای امتیاز شوند تا اولویت آن ها را بیشتر کند." revise_and_reject_post: title: "تجدید نظر کردن" reason: "دلیل" @@ -605,7 +603,6 @@ fa_IR: custom_reason: "شرح واضحی از دلیل ارائه دهید" other_reason: "غیره…" optional: "اختیاری" - stale_help: "این موردِ قابل بررسی توسط %{username} حل شده است." claim_help: optional: "می‌توانید این مورد را درخواست کنید تا دیگران را از بازنگری آن بازنگه دارید." required: "قبل از بازنگری موارد باید آن‌ها را درخواست دهید." @@ -1529,6 +1526,10 @@ fa_IR: tags: "برچسب‌‌ها" interface: "رابط" apps: "برنامه‌ها" + calendar_subscriptions: "تقویم" + calendar_subscriptions: + copied: "کپی شد!" + add_to_google: "تقویم گوگل" change_password: success: "(ایمیل ارسال شد)" in_progress: "(فرستادن ایمیل)" @@ -2122,6 +2123,7 @@ fa_IR: form_kit: reset: بازنشانی optional: اختیاری + required: مورد نیاز dirty_form: "شما تغییرات خود را ارسال نکرده‌اید! آیا مطمئنید می‌خواهید بروید؟" errors: required: "مورد نیاز" @@ -2488,6 +2490,8 @@ fa_IR: medium_dark_tone: رنگ پوست روشن تیره dark_tone: رنگ پوست تیره default: ایموجی های مخصوص + filter_input: + clear: "حذف کردن فیلتر" shared_drafts: title: "پیش‌نویس‌های اشتراک‌گذاشته شده" notice: "این موضوع تنها برای کسانی قابل مشاهده است، که می‌توانند پیش‌نویس‌های اشتراک‌گذاشته شده را منتشر کنند." @@ -2914,8 +2918,6 @@ fa_IR: max_views: placeholder: حداکثر aria_label: فیلتر بر اساس حداکثر بازدید - additional_options: - label: "بر اساس تعداد پست‌ها و بازدیدهای موضوع فیلتر کنید" new_item: "تازه" go_back: "برگردید" not_logged_in_user: "صفحه کاربر با خلاصه ای از فعالیت های و تنظیمات" @@ -2977,11 +2979,8 @@ fa_IR: confirm: "تایید" select_all: "انتخاب همه" clear_all: "پاکسازی همه" - unlist_topics: "از فهرست خارج کردن مباحث" - relist_topics: "ایجاد فهرست مجدد از موضوعات" reset_bump_dates: "بازنشانی تاریخ بالا آوردن" defer: "علامت گذاری به عنوان خوانده نشده" - delete: "حذف موضوعات" delete_topics_count: one: "پاک کردن موضوع" other: "حذف موضوعات" @@ -3014,29 +3013,18 @@ fa_IR: other: "رد کردن (%{count}) موضوع جدید" toggle: "تغییر وضعیت انتخاب گروهی موضوعات" actions: "عملیات گروهی" - change_category: "تنظیم دسته‌بندی…" - close_topics: "بستن موضوعات" - archive_topics: "بایگانی موضوعات" move_messages_to_inbox: "انتقال به صندوق دریافت" archive_messages: "انتقال به بایگانی" - notification_level: "اعلان‌ها…" change_notification_level: "تغییر سطح آگاه‌سازی" choose_new_category: "یک دسته‌بندی جدید برای موضوع انتخاب نمایید" - selected: - one: "شما %{count} موضوع را انتخاب کرده اید." - other: "شما %{count} موضوع را انتخاب کرده اید." selected_sole_category: one: "شما %{count} موضوع را از دسته انتخاب کرده اید:" other: "شما %{count} موضوع را از دسته انتخاب کرده اید:" selected_count: one: "%{count} تا انتخاب شده است" other: "%{count} تا انتخاب شده است" - change_tags: "جایگزینی برچسب‌ها" - append_tags: "افزودن برچسب‌ها" choose_new_tags: "انتخاب برچسب‌های جدید برای این موضوعات:" - choose_append_tags: "انتخاب برچسب‌های جدید برای افزودن به این موضوعات:" changed_tags: "انتخاب برچسب برای موضوعاتی که عوض شدند" - remove_tags: "حذف همه‌ی برچسب‌ها" confirm_remove_tags: one: "همه برچسب ها از این موضوع حذف خواهند شد. آیا مطمئن هستید؟" other: "همه برچسب ها از %{count} موضوع حذف خواهند شد. آیا مطمئن هستید؟" @@ -3065,7 +3053,6 @@ fa_IR: name: "رد کردن" close_topics: name: "بستن" - note: "یادداشت" optional: (اختیاری) archive_topics: name: "بایگانی" @@ -3079,24 +3066,18 @@ fa_IR: name: "فهرست مجدد" remove_tags: name: "حذف برچسب‌ها" - append_tags: - name: "افزودن برچسب‌ها" replace_tags: name: "جایگزینی برچسب‌ها" delete_topics: name: "حذف" update_category: name: "به روز رسانی دسته" - description: "دسته بندی جدید را برای موضوعات انتخاب شده انتخاب کنید" reset_bump_dates: name: "بازنشانی تاریخ‌های بالا آوردن" - description: "تاریخ بالا آوردن موضوع را به تاریخ آخرین پست ایجاد شده در آن موضوع بازنشانی کنید، که روی ترتیب در لیست موضوع تأثیر می‌گذارد" defer: name: "علامت گذاری به عنوان خوانده نشده" - description: "علامت گذاری موضوعات به عنوان خوانده نشده" update_notifications: name: "به روز رسانی اعلان‌ها" - description: "سطح اعلان را به دنبال کردن، پیگیری کردن، عادی یا بی‌صدا تغییر دهید" topic: filter_to: one: "%{count} نوشته در این موضوع وجود دارد" @@ -3841,6 +3822,8 @@ fa_IR: delete: "حذف دسته‌بندی" create: "دسته‌بندی جدید" create_long: "ایجاد یک دسته‌بندی جدید" + type_settings_schema: + site_settings: "تنظیمات سایت" save: "ذخیره دسته‌بندی" slug_placeholder: "(اختیاری) کلمه با - جدا شده برای پیوند" creation_error: خطایی در ساخت این دسته بروز کرد. @@ -3869,6 +3852,8 @@ fa_IR: list: "فهرست دسته‌بندی‌ها" no_description: "لطفا برای این دسته بندی توضیحاتی اضافه نمایید." change_in_category_topic: "ویرایش توضیحات" + description_expand: "نمایش بیشتر" + description_collapse: "نمایش کمتر" already_used: "این رنگ توسط یک دسته بندی دیگر گزیده شده است" security: "امنیت" security_add_group: "افزودن گروه" @@ -3901,6 +3886,8 @@ fa_IR: review_group_name: "نام گروه" require_topic_approval: "نیازمند تاییدیه ناظر برای تمامی تاپیک‌های جدید" require_reply_approval: "نیازمند تاییدیه ناظر برای تمامی پاسخ‌های جدید" + posting_review_modes: + everyone: "همه" this_year: "امسال" position: "موقعیت در صفحه دسته‌بندی:" position_disabled: "دسته ها به ترتیب فعالیت نمایش داده می شوند. برای کنترل ترتیب دسته‌ها در فهرست‌ها، گزینه 'fixed category positions' را فعال کنید." @@ -4410,7 +4397,20 @@ fa_IR: one: "مترادف آن نیز حذف خواهد شد." other: "%{count} مترادف آن نیز حذف خواهند شد." edit_tag: "ویرایش نام و توضیحات برچسب" - description: "توضیحات (حداکثر ۱۰۰۰ نویسه)" + description: "توضیح" + settings: + title: "تنظیم" + general: "عمومی" + localizations: "محلی‌سازی‌ها" + back: "بازگشت" + name: "نام" + slug: "نشانک (slug)" + name_placeholder: "نام برچسب" + synonyms_subtitle: "هنگامی که از برچسب‌های زیر استفاده می‌شود، آنها با %{name}جایگزین می‌شوند" + localization: + locale: "زبان" + name: "نام" + description: "توضیح" sort_by: "مرتب سازی بر اساس:" sort_by_count: "تعداد" sort_by_name: "نام" @@ -4830,7 +4830,6 @@ fa_IR: admin_js: type_to_filter: "برای فیلتر کردن تایپ کنید..." settings: "تنظیمات" - reset_filter: "بازنشانی" admin: title: "مدیر ارشد دیسکورس" moderator: "ناظر" @@ -4842,9 +4841,11 @@ fa_IR: never: "هیچوقت" reports: title: "لیستی از گزارشات موجود" - meta_doc: "گزارش‌ها ابزار قدرتمندی هستند که به شما کمک می‌کنند بفهمید چه اتفاقی در سایت شما می‌افتد. آنها می توانند به شما در شناسایی روندها، شناسایی مشکلات و تصمیم گیری بر اساس داده ها کمک کنند." sidebar_title: "گزارشات" back: "بازگشت به همه گزارش‌ها" + group_traffic: "ترافیک" + group_members: "اعضاء" + group_other: "دیگر" config_sections: account: title: "حساب کاربری" @@ -4869,7 +4870,6 @@ fa_IR: preview: "پیش‌نمایش" enabled_for_options: everyone: "همه" - staff: "فقط به تیم مدیریت" statuses: experimental: "آزمایشی" impact_roles: @@ -4987,6 +4987,9 @@ fa_IR: reports: title: "گزارشات" header_description: "گزارش‌ها ابزار قدرتمندی هستند که به شما کمک می‌کنند بفهمید چه اتفاقی در سایت شما می‌افتد. آنها می توانند به شما در شناسایی روندها، شناسایی مشکلات و تصمیم گیری بر اساس داده ها کمک کنند." + sub_pages: + settings: + title: "تنظیم" badges: title: "نشان‌ها" content: @@ -5071,22 +5074,6 @@ fa_IR: default_value: "پیش‌فرض" search: title: "جستجو" - result_types: - page: - one: "صفحه" - other: "صفحه" - report: - one: "گزارش" - other: "گزارش" - setting: - one: "تنظیم" - other: "تنظیم" - theme: - one: "قالب" - other: "قالب‌ها" - component: - one: "کامپوننت " - other: "کامپوننت‌ها" new_features: title: "چه چیزی جدید شده؟" check_for_updates: "برررسی به‌روز‌رسانی‌ها" @@ -5110,14 +5097,6 @@ fa_IR: title: "چه چیزی جدید شده؟" subtitle: "ما همیشه در حال انتشار ویژگی ها و بهبودهای جدید هستیم. این صفحه نکات برجسته را پوشش می‌دهد، اما می‌توانید روی «بیشتر بدانید» کلیک کنید تا یادداشت‌های انتشار گسترده را ببینید." learn_more: "بیشتر بدانید..." - experimental: "آزمایشی" - experiment_enabled: "شما ویژگی آزمایشی را فعال کرده‌اید." - experiment_disabled: "شما ویژگی آزمایشی را غیرفعال کرده‌اید." - experiment_tooltip: - title_enabled: "ویژگی آزمایشی را خاموش کنید" - content_enabled: "با تغییر این تنظیم، این ویژگی برای همه کاربران غیرفعال می‌شود." - feature_tooltip: - content_enabled: "با تغییر این تنظیم، این ویژگی برای همه کاربران غیرفعال می‌شود." last_checked: " آخرین بررسی" refresh_problems: "تازه کردن" no_problems: "هیچ مشکلات پیدا نشد." @@ -5179,7 +5158,7 @@ fa_IR: all: "همه" view_table: "جدول" view_graph: "نمودار" - refresh_report: "تازه کردن گزارش" + refresh_report: "تازه‌سازی" daily: روزانه monthly: ماهیانه weekly: هفتگی @@ -5981,7 +5960,6 @@ fa_IR: import_web_tip: "مخزن شامل قالب است" direct_install_tip: "آیا مطمئن هستید که می خواهید %{name} را از مخزن ذکر شده در زیر نصب کنید؟" import_web_advanced: "پیشرفته…" - import_file_tip: "فایل .tar.gz، .zip یا .dcstyle.json حاوی پوسته" is_private: "تم در یک مخزن git خصوصی است" finish_install: "پایان نصب پوسته" last_attempt: "مراحل نصب تمام نشد، آخرین تلاش:" @@ -6887,6 +6865,7 @@ fa_IR: disabled: "قابل جستجو نیست" field_types: text: "متن" + date: "تاریخ" confirm: "تاییدیه" dropdown: "کرکره‌ای" multiselect: "انتخاب چندگانه" @@ -7003,7 +6982,7 @@ fa_IR: confirm: "بله، سیاست رمز عبور را به روز کنید" min_admin_password_length: confirm: "بله، سیاست رمز عبور را به روز کنید" - password_unique_charactes: + password_unique_characters: confirm: "بله، سیاست رمز عبور را به روز کنید" block_common_passwords: confirm: "بله، سیاست رمز عبور را به روز کنید" diff --git a/config/locales/client.fi.yml b/config/locales/client.fi.yml index 3519f8fceeb29..c1038532f7b6c 100644 --- a/config/locales/client.fi.yml +++ b/config/locales/client.fi.yml @@ -6,6 +6,12 @@ fi: js: + blocks: + ghost: + status: "Tila" + in_location: "kohteessa" + hidden: "piilotettu" + failed: "epäonnistui" number: format: separator: "," @@ -401,6 +407,8 @@ fi: pill: "Ehdotukset" pm_title: "Viestiehdotukset" admin_onboarding_banner: + start_posting: + back: "Takaisin" spread_the_word: action: "Kopioi linkki" copied_to_clipboard: "Linkki kopioitiin leikepöydälle!" @@ -485,8 +493,6 @@ fi: other: "Luotu %{count} vuotta sitten" bookmarked: title: "Kirjanmerkki" - edit_bookmark: "Muokkaa kirjanmerkkiä" - clear_bookmarks: "Tyhjennä kirjanmerkit" help: bookmark: "Lisää tämä ketju kirjanmerkkeihin klikkaamalla" edit_bookmark: "Muokkaa tämän ketjun viestin kirjanmerkkiä klikkaamalla" @@ -505,12 +511,12 @@ fi: clear_reminder: "Tyhjennä muistutus" edit: "Muokkaa kirjanmerkkiä" not_bookmarked: "lisää viesti kirjanmerkkeihin" + topic_bookmark: "Ketju" remove_reminder_keep_bookmark: "Poista muistutus ja säilytä kirjanmerkki" created_with_reminder: "Olet kirjanmerkinnyt tämän viestin muistutuksen kera %{date}. %{name}" created_with_reminder_generic: "Olet lisännyt tämän kirjanmerkkeihin muistutuksella %{date}. %{name}" delete: "Poista kirjanmerkki" confirm_delete: "Oletko varma, että haluat poistaa tämän kirjanmerkin? Muistutus poistetaan myös." - confirm_clear: "Haluatko varmasti poistaa kaikki kirjanmerkkisi tästä ketjusta?" save: "Tallenna" no_timezone: 'Et ole valinnut aikavyöhykettä, joten et voi asettaa muistutuksia. Aseta se profiilisivullasi.' invalid_custom_datetime: "Antamasi päivämäärä ja kellonaika ei kelpaa, yritä uudelleen." @@ -636,19 +642,13 @@ fi: in_reply_to: "vastauksena:" filtered_flagged_by: "Liputtanut" unknown: - title: - one: "Sinulla on odottavia tarkastuksia käytöstä poistetusta lisäosasta:" - other: "Sinulla on odottavia tarkastuksia käytöstä poistetuista lisäosista:" instruction: "Niitä ei voida näyttää oikein, ennen kuin otat kyseisen lisäosan käyttöön. Ota lisäosa käyttöön ja päivitä sivu. Vaihtoehtoisesti voit jättää ne huomiotta. Lue lisää..." reviewable_unknown_source: "%{reviewableType} (tuntematon lisäosa)" reviewable_known_source: "%{reviewableType} (lisäosasta %{pluginName})" ignore_all: "Ohita kaikki" enable_plugins: "Ota lisäosat käyttöön" - delete_confirm: "Oletko varma, että haluat poistaa kaikki arvostelut, jotka on luotu käytöstä poistetuilla lisäosilla?" - ignore_success: "Kaikki käytöstä poistettujen lisäosien luomat arvostelut on poistettu." explain: why: "selitä miksi tämä päätyi jonoon" - title: "Käsittelypisteytys" formula: "Kaava" subtotal: "Välisumma" total: "Yhteensä" @@ -662,10 +662,8 @@ fi: title: "Käyttäjät joiden aiemmista lipuista on oltu samaa mieltä saavat bonuspisteitä." trust_level_bonus: name: "luottamustaso" - title: "Korkeampien luottamustasojen käyttäjien luomat käsiteltävät kohteet saavat korkeammat pisteet." type_bonus: name: "tyyppibonus" - title: "Henkilökunta voi määrittää tietyille käsiteltävälle tyypeille bonuksen, jotta ne saavat korkeamman prioriteetin." revise_and_reject_post: title: "Korjaa" reason: "Syy" @@ -674,7 +672,6 @@ fi: custom_reason: "Kuvaile syy selkeästi" other_reason: "Muu..." optional: "valinnainen" - stale_help: "%{username} on ratkaissut tämän käsiteltävän kohteen." claim_help: optional: "Voit osoittaa tämän kohteen itsellesi, jolloin muut eivät voi käsitellä sitä." required: "Sinun täytyy osoittaa kohde itsellesi, ennen kuin voit käsitellä sen." @@ -1655,6 +1652,10 @@ fi: interface: "Käyttöliittymä" apps: "Sovellukset" navigation_menu: "Navigointivalikko" + calendar_subscriptions: "Kalenteri" + calendar_subscriptions: + copied: "Kopioitiin!" + add_to_google: "Google-kalenteri" change_password: success: "(sähköposti lähetetty)" in_progress: "(sähköpostia lähetetään)" @@ -2257,6 +2258,7 @@ fi: form_kit: reset: Palauta optional: valinnainen + required: pakollinen dirty_form: "Et lähettänyt muutoksiasi! Oletko varma, että haluat poistua?" errors: starts_with: "Täytyy alkaa %{prefix}" @@ -2650,6 +2652,8 @@ fi: medium_dark_tone: Tummanruskea ihonväri dark_tone: Tumma ihonväri default: Mukautetut emojit + filter_input: + clear: "Tyhjennä suodatin" shared_drafts: title: "Jaetut luonnokset" notice: "Tämä ketju näkyy vain niille, jotka voivat julkaista jaettuja luonnoksia." @@ -3123,8 +3127,6 @@ fi: max_views: placeholder: enintään aria_label: suodata enimmäiskatselukertojen mukaan - additional_options: - label: "Suodata viestien määrän ja ketjun katselukertojen mukaan" hamburger_menu: "Navigointivalikko" new_item: "uusi" go_back: "palaa takaisin" @@ -3187,11 +3189,8 @@ fi: confirm: "Vahvista" select_all: "Valitse kaikki" clear_all: "Tyhjennä kaikki" - unlist_topics: "Poista ketjuja listauksista" - relist_topics: "Palauta ketjuja listauksiin" reset_bump_dates: "Nollaa nostopäivät" defer: "Merkitse lukemattomaksi" - delete: "Poista ketjut" delete_topics_count: one: "Poista ketju" other: "Poista ketjut" @@ -3224,29 +3223,20 @@ fi: other: "Kuittaa uudet (%{count})" toggle: "Vaihda useamman ketjun valintaa" actions: "Joukkotoiminnot" - change_category: "Määritä alue…" - close_topics: "Sulje ketjut" - archive_topics: "Arkistoi ketjut" move_messages_to_inbox: "Siirrä saapuneisiin" archive_messages: "Siirrä arkistoon" - notification_level: "Ilmoitukset…" change_notification_level: "Muuta ilmoitustasoa" choose_new_category: "Valitse uusi alue ketjuille:" - selected: - one: "Olet valinnut %{count} ketjun." - other: "Olet valinnut %{count} ketjua." selected_sole_category: one: "Olet valinnut %{count} ketjun alueelta:" other: "Olet valinnut %{count} ketjua alueelta:" selected_count: one: "%{count} valittu" other: "%{count} valittu" - change_tags: "Korvaa tunnisteet" append_tags: "Lisää tunnisteita" choose_new_tags: "Valitse tunnisteet näille ketjuille:" - choose_append_tags: "Valitse ketjuille lisättävät uudet tunnisteet:" + choose_append_tags: "Lisää tunnisteita" changed_tags: "Ketjujen tunnisteet muutettiin." - remove_tags: "Poista kaikki tunnisteet" confirm_remove_tags: one: "Kaikki tunnisteet poistetaan tästä ketjusta. Oletko varma?" other: "Kaikki tunnisteet poistetaan %{count} ketjusta. Oletko varma?" @@ -3280,7 +3270,6 @@ fi: name: "Selvä" close_topics: name: "Sulje" - note: "Huomautus" optional: (valinnainen) archive_topics: name: "Arkistoi" @@ -3294,24 +3283,18 @@ fi: name: "Lisää luetteloon uudelleen" remove_tags: name: "Poista tunnisteita" - append_tags: - name: "Lisää tunnisteita" replace_tags: name: "Korvaa tunnisteet" delete_topics: name: "Poista" update_category: name: "Päivitä alue" - description: "Valitse uusi alue valituille ketjuille" reset_bump_dates: name: "Nollaa nostopäivät" - description: "Palauta ketjun nostopäiväksi viimeksi luodun viesti julkaisupäivä, mikä vaikuttaa järjestykseen ketjuluettelossa" defer: name: "Merkitse lukemattomaksi" - description: "Merkitse ketjut lukemattomiksi" update_notifications: name: "Päivitä ilmoitukset" - description: "Vaihda ilmoitustasoksi Tarkkailussa, Seurannassa, Normaali tai Vaimennettu." topic: filter_to: one: "%{count} viesti ketjussa" @@ -4075,8 +4058,12 @@ fi: delete: "Poista" add: "Lisää pakollinen tunnisteryhmä" placeholder: "Valitse tunnisteryhmä…" + tag_group: "Tunnisteryhmä" topic_featured_link_allowed: "Salli ketjulinkit tällä alueella" create_long: "Luo uusi alue" + type_settings_schema: + site_settings: "Sivustoasetukset" + unsaved_changes: "Sinulla on tallentamattomia muutoksia" slug_placeholder: "(Valinnainen) väliviivoilla erotettuja sanoja URL-osoitetta varten" creation_error: Alueen luonnissa tapahtui virhe. save_error: Alueen tallennuksessa tapahtui virhe. @@ -4108,6 +4095,8 @@ fi: list: "Listaa alueet" no_description: "Lisää alueelle kuvaus." change_in_category_topic: "Muokkaa kuvausta" + description_expand: "Näytä lisää" + description_collapse: "Näytä vähemmän" already_used: "Tämä väri on jo käytössä toisella alueella" color_palette: "Väripaletti" security: "Turvallisuus" @@ -4141,6 +4130,9 @@ fi: review_group_name: "ryhmän nimi" require_topic_approval: "Edellytä valvojan hyväksyntää kaikille uusille ketjuille" require_reply_approval: "Edellytä valvojan hyväksyntää kaikille uusille vastauksille" + posting_review_modes: + everyone: "Kaikki" + posting_review_groups_placeholder: "Valitse ryhmät ..." this_year: "tänä vuonna" position: "Sijoitus aluesivulla:" position_disabled: "Alueet näytetään aktiivisuusjärjestyksessä. Voit hallita alueiden järjestystä luetteloissa ottamalla käyttöön \"fixed category positions\" -asetuksen." @@ -4671,7 +4663,20 @@ fi: one: "Sen synonyymi poistetaan myös." other: "Sen %{count} synonyymiä poistetaan myös." edit_tag: "Muokkaa tunnisteen nimeä ja kuvausta" - description: "Kuvaus (enintään 1 000 merkkiä)" + description: "Kuvaus" + settings: + title: "Asetukset" + general: "Yleistä" + localizations: "Lokalisoinnit" + back: "Takaisin" + name: "Nimi" + slug: "Polkutunnus" + name_placeholder: "Tunnisteen nimi" + synonyms_subtitle: "Kun näitä tunnisteita käytetään, ne korvataan tunnisteella %{name}" + localization: + locale: "Kielialue" + name: "Nimi" + description: "Kuvaus" sort_by: "Järjestys:" sort_by_count: "lukumäärä" sort_by_name: "nimi" @@ -5161,7 +5166,6 @@ fi: admin_js: type_to_filter: "Kirjoita suodattaaksesi…" settings: "Asetukset" - reset_filter: "Palauta" admin: title: "Discoursen ylläpitäjä" moderator: "Valvoja" @@ -5174,9 +5178,11 @@ fi: never: "ei koskaan" reports: title: "Saatavilla olevat raportit" - meta_doc: "Raportit ovat tehokas työkalu, joka auttaa sinua ymmärtämään, mitä sivustollasi tapahtuu. Niiden avulla voit tunnistaa trendejä, havaita ongelmia ja tehdä päätöksiä tietojen perusteella." sidebar_title: "Raportit" back: "Takaisin kaikkiin raportteihin" + group_traffic: "Liikenne" + group_members: "Jäsenet" + group_other: "Muut" config_sections: account: title: "Tili" @@ -5201,7 +5207,6 @@ fi: preview: "Esikatselu" enabled_for_options: everyone: "Kaikki" - staff: "Vain henkilökunnalle" statuses: experimental: "Kokeellinen" impact_roles: @@ -5274,7 +5279,6 @@ fi: help_text: "Suositeltava koko on 600 x 80 pikseliä." large_icon: title: "Neliökuvake" - description: "Logon neliönmuotoinen versio näkyy hallintapaneelin yläosassa ja toimii myös mobiilisovelluksen aloitusnäytön logona." help_text: "Suositeltava koko on 512 x 512 pikseliä." square_icon_dark: required: "Käytetäänkö tummassa tilassa eri neliökuvaketta?" @@ -5425,7 +5429,7 @@ fi: header_description: "Raportit ovat tehokas työkalu, joka auttaa sinua ymmärtämään, mitä sivustollasi tapahtuu. Niiden avulla voit tunnistaa trendejä, havaita ongelmia ja tehdä päätöksiä tietojen perusteella." sub_pages: settings: - title: "Hallintapaneelin asetukset" + title: "Asetukset" badges: title: "Kunniamerkit" header_description: "Kunniamerkit palkitsevat käyttäjiä heidän toiminnastaan, panoksestaan ja saavutuksistaan. Tämä auttaa tunnustamaan, validoimaan ja kannustamaan positiivista käyttäytymistä ja aktiivisuutta yhteisössä" @@ -5575,22 +5579,6 @@ fi: result_count: one: '%{count} tulos haulla "%{filter}"' other: '%{count} tulosta haulla "%{filter}"' - result_types: - page: - one: "Sivu" - other: "Sivut" - report: - one: "Raportti" - other: "Raportit" - setting: - one: "Asetus" - other: "Asetukset" - theme: - one: "Teema" - other: "Teemat" - component: - one: "Komponentti" - other: "Komponentit" new_features: title: "Mitä uutta?" check_for_updates: "Tarkista päivitykset" @@ -5614,23 +5602,6 @@ fi: title: "Mitä uutta?" subtitle: "Julkaisemme jatkuvasti uusia ominaisuuksia ja parannuksia. Tämä sivu kattaa kohokohdat, mutta voit katsoa kattavat julkaisutiedot napsauttamalla Lisätietoja." learn_more: "Lisätietoja..." - experimental: "Kokeellinen" - only_experiments: "Näytä vain kokeelliset ominaisuudet" - experiment_enabled: "Olet ottanut kokeellisen ominaisuuden käyttöön." - experiment_disabled: "Olet poistanut kokeellisen ominaisuuden käytöstä." - feature_enabled: "Olet ottanut ominaisuuden käyttöön." - feature_disabled: "Olet poistanut ominaisuuden käytöstä." - toggled_too_fast: "Olet vaihtanut valitsinta liian nopeasti. Odota muutama sekunti ennen kuin yrität uudelleen." - experiment_tooltip: - title_disabled: "Kokeile tätä kokeellista ominaisuutta" - title_enabled: "Poista kokeellinen ominaisuus käytöstä" - content_disabled: "Kokeile uusinta kehitysvaiheessa olevaa ominaisuuttamme! Se on vielä kokeiluvaiheessa, joten voimme poistaa sen milloin tahansa. Voit poistaa sen käytöstä milloin tahansa.

Tämän muuttaminen ottaa ominaisuuden käyttöön kaikille käyttäjille." - content_enabled: "Tämän muuttaminen poistaa ominaisuuden käytöstä kaikilta käyttäjiltä." - feature_tooltip: - title_disabled: "Kokeile tätä ominaisuutta" - title_enabled: "Poista ominaisuus käytöstä" - content_disabled: "Kokeile tätä uutta ominaisuutta! Voit poistaa sen käytöstä milloin tahansa.

Tämän muuttaminen ottaa ominaisuuden käyttöön kaikille käyttäjille." - content_enabled: "Tämän muuttaminen poistaa ominaisuuden käytöstä kaikilta käyttäjiltä." last_checked: "Viimeksi tarkistettu" refresh_problems: "Päivitä" no_problems: "Ongelmia ei löytynyt." @@ -5693,7 +5664,7 @@ fi: all: "Kaikki" view_table: "taulukko" view_graph: "kaavio" - refresh_report: "Päivitä raportti" + refresh_report: "Päivitä" daily: Päivittäin monthly: Kuukausittain weekly: Viikoittain @@ -6579,7 +6550,6 @@ fi: import_web_tip: "Tietovarasto, jossa teema on" direct_install_tip: "Oletko varma, että haluat asentaa teeman %{name} alla olevasta tietovasrastosta?" import_web_advanced: "Lisäasetukset…" - import_file_tip: "Teeman sisältävä .tar.gz, .zip tai .dcstyle.json-tiedosto" is_private: "Teema on yksityisessä git-tietovarastossa" finish_install: "Viimeistele teeman asennus" last_attempt: "Asennusprosessi ei päättynyt, viimeisin yritys:" @@ -7614,6 +7584,7 @@ fi: field_types: text: "Teksti" textarea: "Tekstialue" + date: "Päivämäärä" confirm: "Vahvistus" dropdown: "Pudotusvalikko" multiselect: "Monivalinta" @@ -7746,7 +7717,7 @@ fi: confirm: "Kyllä, päivitä salasanakäytäntö" min_admin_password_length: confirm: "Kyllä, päivitä salasanakäytäntö" - password_unique_charactes: + password_unique_characters: confirm: "Kyllä, päivitä salasanakäytäntö" block_common_passwords: confirm: "Kyllä, päivitä salasanakäytäntö" diff --git a/config/locales/client.fr.yml b/config/locales/client.fr.yml index 107ae29bde96f..c4605f12970dd 100644 --- a/config/locales/client.fr.yml +++ b/config/locales/client.fr.yml @@ -6,6 +6,12 @@ fr: js: + blocks: + ghost: + status: "Statut" + in_location: "dans" + hidden: "masqué" + failed: "échec" number: format: separator: "," @@ -295,9 +301,13 @@ fr: back_button: "Retour" welcome_banner: header: + new_members: "Bienvenue, %{preferred_display_name}!" logged_in_members: "Bienvenue, %{preferred_display_name} !" anonymous_members: "Bienvenue sur %{site_name} !" search_placeholder: "Recherche" + impersonation: + notice: "Vous endossez l'identité de %{username}" + stop: "Cesser d'endosser l'identité" themes: default_description: "Par défaut" broken_theme_alert: "Il se peut que votre site ne fonctionne pas, car un thème ou un composant comporte des erreurs. Consultez la console du navigateur pour obtenir plus d'informations." @@ -402,6 +412,8 @@ fr: pill: "Suggérés" pm_title: "Messages suggérés" admin_onboarding_banner: + start_posting: + back: "Retour" spread_the_word: action: "Copier le lien" copied_to_clipboard: "Lien copié dans le presse-papiers!" @@ -486,8 +498,6 @@ fr: other: "Créé il y a %{count} ans" bookmarked: title: "Mettre un signet" - edit_bookmark: "Modifier le signet" - clear_bookmarks: "Retirer les signets" help: bookmark: "Cliquez pour mettre ce sujet en signet" edit_bookmark: "Cliquez pour modifier le signet d'une publication dans ce sujet." @@ -506,12 +516,12 @@ fr: clear_reminder: "Effacer le rappel" edit: "Modifier le signet" not_bookmarked: "mettre un signet à ce message" + topic_bookmark: "Sujet" remove_reminder_keep_bookmark: "Supprimer le rappel et conserver le signet" created_with_reminder: "Vous avez mis un signet à ce message avec un rappel pour le %{date}. %{name}" created_with_reminder_generic: "Vous avez mis ceci en signet avec un rappel pour le %{date}. %{name}" delete: "Supprimer le signet" confirm_delete: "Voulez-vous vraiment supprimer ce signet ? Le rappel sera également supprimé." - confirm_clear: "Voulez-vous vraiment retirer tous les signets de ce sujet ?" save: "Enregistrer" no_timezone: 'Vous n''avez pas encore défini un fuseau horaire. Vous ne pourrez pas définir de rappels. Configurez-en un dans votre profil.' invalid_custom_datetime: "La date et l'heure sont invalides, veuillez réessayer." @@ -640,19 +650,13 @@ fr: in_reply_to: "en réponse à" filtered_flagged_by: "Signalé par" unknown: - title: - one: "Vous avez des éléments en attente de révision provenant d'une extension désactivée :" - other: "Vous avez des éléments en attente de révision provenant d'extensions désactivées :" instruction: "Ils ne peuvent pas s'afficher correctement tant que vous n'avez pas activé l'extension correspondante. Veuillez l'activer et actualiser la page. Vous pouvez également les ignorer. En savoir plus..." reviewable_unknown_source: "%{reviewableType} (extension inconnue)" reviewable_known_source: "%{reviewableType} (de l'extension « %{pluginName} »)" ignore_all: "Ignorer tout" enable_plugins: "Activer les extensions" - delete_confirm: "Voulez-vous vraiment supprimer tous les avis créés par les extensions désactivées ?" - ignore_success: "Tous les avis créés par des extensions désactivées ont été supprimés." explain: why: "expliquer pourquoi cet élément s'est retrouvé dans la file d'attente" - title: "Notation de l'élément à examiner" formula: "Formule" subtotal: "Sous-total" total: "Total" @@ -666,10 +670,8 @@ fr: title: "Les utilisateurs dont les signalements ont généralement été approuvés obtiennent un bonus." trust_level_bonus: name: "niveau de confiance" - title: "Les éléments à examiner créés par des utilisateurs au niveau de confiance plus élevé ont un score plus élevé." type_bonus: name: "indiquer le bonus" - title: "Certains types d'éléments à examiner peuvent se voir attribuer un bonus par les responsables pour en élever la priorité." revise_and_reject_post: title: "Réviser" reason: "Raison" @@ -678,7 +680,6 @@ fr: custom_reason: "Donnez une description claire de la raison" other_reason: "Autre..." optional: "facultatif" - stale_help: "Cet élément a fait l'objet d'une décision prise par %{username}." claim_help: optional: "Vous pouvez vous réserver cet élément pour empêcher d'autres responsables de l'examiner." required: "Vous devez réserver un élément avant de l'examiner." @@ -1662,6 +1663,10 @@ fr: interface: "Interface" apps: "Applications" navigation_menu: "Menu de navigation" + calendar_subscriptions: "Calendrier" + calendar_subscriptions: + copied: "Copié !" + add_to_google: "Calendrier Google" change_password: success: "(e-mail envoyé)" in_progress: "(e-mail en cours d'envoi)" @@ -2268,6 +2273,7 @@ fr: form_kit: reset: Réinitialiser optional: facultatif + required: obligatoire dirty_form: "Vous n'avez pas soumis vos modifications ! Voulez-vous vraiment partir ?" errors: starts_with: "Doit commencer par %{prefix}" @@ -2661,6 +2667,8 @@ fr: medium_dark_tone: Teint légèrement foncé dark_tone: Teint foncé default: Émojis personnalisés + filter_input: + clear: "Effacer le filtre" shared_drafts: title: "Brouillons partagés" notice: "Ce sujet n'est visible que par ceux qui peuvent publier des brouillons partagés." @@ -3134,8 +3142,6 @@ fr: max_views: placeholder: maximum aria_label: filtrer par nombre de vues maximal - additional_options: - label: "Filtrer par nombre de messages et vues par sujet" hamburger_menu: "Menu de navigation" new_item: "nouveau" go_back: "retour" @@ -3198,11 +3204,8 @@ fr: confirm: "Confirmer" select_all: "Tout sélectionner" clear_all: "Tout désélectionner" - unlist_topics: "Rendre les sujets invisibles" - relist_topics: "Lister les sujets" reset_bump_dates: "Réinitialiser la date d'actualisation" defer: "Marquer comme non lu" - delete: "Supprimer les sujets" delete_topics_count: one: "Supprimer le sujet" other: "Supprimer les sujets" @@ -3235,29 +3238,20 @@ fr: other: "Marquer les nouveaux sujets comme lus (%{count})" toggle: "activer/désactiver la sélection multiple de sujets" actions: "Actions sur la sélection" - change_category: "Définir la catégorie…" - close_topics: "Fermer les sujets" - archive_topics: "Archiver les sujets" move_messages_to_inbox: "Déplacer dans la boîte de réception" archive_messages: "Déplacer vers les archives" - notification_level: "Notifications…" change_notification_level: "Modifier le niveau de notification" choose_new_category: "Choisissez la nouvelle catégorie pour ces sujets :" - selected: - one: "Vous avez sélectionné %{count} sujet." - other: "Vous avez sélectionné %{count} sujets." selected_sole_category: one: "Vous avez sélectionné %{count} sujet de la catégorie :" other: "Vous avez sélectionné %{count} sujets de la catégorie :" selected_count: one: "Sélection : %{count}" other: "Sélection : %{count}" - change_tags: "Remplacer des étiquettes" append_tags: "Ajouter des étiquettes" choose_new_tags: "Choisissez de nouvelles étiquettes pour ces sujets :" - choose_append_tags: "Choisissez de nouvelles étiquettes à ajouter à ces sujets :" + choose_append_tags: "Ajouter des étiquettes" changed_tags: "Les étiquettes de ces sujets ont été modifiées." - remove_tags: "Supprimer toutes les étiquettes" confirm_remove_tags: one: "Toutes les étiquettes seront supprimées de ce sujet. Voulez-vous continuer ?" other: "Toutes les étiquettes seront supprimées des %{count} sujets. Voulez-vous continuer ?" @@ -3291,7 +3285,6 @@ fr: name: "Rejeter" close_topics: name: "Fermer" - note: "Note" optional: (facultatif) archive_topics: name: "Archive" @@ -3305,24 +3298,18 @@ fr: name: "Remettre dans la liste" remove_tags: name: "Supprimer des étiquettes" - append_tags: - name: "Ajouter des étiquettes" replace_tags: name: "Remplacer des étiquettes" delete_topics: name: "Supprimer" update_category: name: "Mettre à jour la catégorie" - description: "Choisissez la nouvelle catégorie pour les sujets sélectionnés" reset_bump_dates: name: "Réinitialiser la date d'actualisation" - description: "Réinitialisez la date d'actualisation du sujet à la date de la dernière publication créée, ce qui affecte l'ordre dans la liste des sujets" defer: name: "Marquer comme non lu" - description: "Marquer les sujets comme non lus" update_notifications: name: "Mettre à jour les notifications" - description: "Réglez le niveau de notification en mode Surveillance, Suivi, Normal ou Désactivé" topic: filter_to: one: "%{count} message dans le sujet" @@ -4097,8 +4084,12 @@ fr: delete: "Supprimer" add: "Ajouter le groupe d'étiquettes requis" placeholder: "Sélectionner un groupe d'étiquettes…" + tag_group: "Groupe d'étiquettes " topic_featured_link_allowed: "Autoriser les liens à la une dans cette catégorie" create_long: "Créer une nouvelle catégorie" + type_settings_schema: + site_settings: "Paramètres du site" + unsaved_changes: "Vous avez des modifications non enregistrées" slug_placeholder: "(Facultatif) mots séparés par des tirets pour l'URL" creation_error: Une erreur s'est produite lors de la création de la catégorie. save_error: Une erreur s'est produite lors de l'enregistrement de la catégorie. @@ -4130,6 +4121,8 @@ fr: list: "Répertorier les catégories" no_description: "Veuillez ajouter une description pour cette catégorie." change_in_category_topic: "Modifier la description" + description_expand: "Afficher plus" + description_collapse: "Afficher moins" already_used: "Cette couleur est déjà utilisée par une autre catégorie" color_palette: "Palette de couleurs" security: "Sécurité" @@ -4163,6 +4156,9 @@ fr: review_group_name: "nom du groupe" require_topic_approval: "Nécessiter l'approbation pour chaque nouveau sujet" require_reply_approval: "Nécessiter l'approbation pour chaque nouvelle réponse" + posting_review_modes: + everyone: "Tout le monde" + posting_review_groups_placeholder: "Sélectionnez des groupes…" this_year: "cette année" position: "Position sur la page des catégories :" position_disabled: "Les catégories seront affichées par ordre d'activité. Pour contrôler l'ordre des catégories dans les listes, activez le paramètre « positions de catégorie fixes » ." @@ -4693,7 +4689,20 @@ fr: one: "Son synonyme sera aussi supprimé." other: "Ses %{count} synonymes seront aussi supprimés." edit_tag: "Modifier le nom et la description de l'étiquette" - description: "Description (maximum 1000 caractères)" + description: "Description" + settings: + title: "Paramètres" + general: "Général" + localizations: "Localisations" + back: "Retour" + name: "Nom" + slug: "Identifiant" + name_placeholder: "Nom de l'étiquette" + synonyms_subtitle: "Quand les étiquettes suivantes sont utilisées, elles seront remplacées par %{name}" + localization: + locale: "Paramètre régional" + name: "Nom" + description: "Description" sort_by: "Trier par :" sort_by_count: "nombre" sort_by_name: "nom" @@ -5183,7 +5192,6 @@ fr: admin_js: type_to_filter: "Commencez votre saisie pour filtrer…" settings: "Paramètres" - reset_filter: "Réinitialiser" admin: title: "Administrateur Discourse" moderator: "Modérateur" @@ -5196,9 +5204,11 @@ fr: never: "jamais" reports: title: "Liste des rapports disponibles" - meta_doc: "Les rapports sont un outil puissant qui vous permet de comprendre ce qui se passe sur votre site. Ils peuvent vous aider à identifier les tendances, à repérer les problèmes et à prendre des décisions sur la base de données." sidebar_title: "Rapports" back: "Retour à tous les rapports" + group_traffic: "Trafic" + group_members: "Membres" + group_other: "Autre" config_sections: account: title: "Compte" @@ -5223,7 +5233,6 @@ fr: preview: "Aperçu" enabled_for_options: everyone: "Tout le monde" - staff: "Responsables seulement" statuses: experimental: "Expérimental" impact_roles: @@ -5296,7 +5305,6 @@ fr: help_text: "La taille recommandée est de 600 x 80 pixels." large_icon: title: "Icône carrée" - description: "Une version carrée de l'image du logo apparaît en haut de l'interface d'administration et constitue également le logo de l'application sur l'écran d'accueil mobile." help_text: "La taille recommandée est de 512 x 512 pixels." square_icon_dark: required: "Utiliser une icône carrée différente pour le mode sombre ?" @@ -5447,7 +5455,7 @@ fr: header_description: "Les rapports sont un outil puissant qui vous permet de comprendre ce qui se passe sur votre site. Ils peuvent vous aider à identifier les tendances, à repérer les problèmes et à prendre des décisions sur la base de données." sub_pages: settings: - title: "Paramètres du tableau de bord" + title: "Paramètres" badges: title: "Badges" header_description: "Les badges récompensent les utilisateurs pour leurs activités, leurs contributions et leurs réalisations afin de reconnaître, de valider et d'encourager les comportements et les interactions positives au sein de la communauté" @@ -5597,22 +5605,6 @@ fr: result_count: one: '%{count} résultat pour « %{filter} »' other: '%{count} résultats pour « %{filter} »' - result_types: - page: - one: "Page" - other: "Pages" - report: - one: "Rapport" - other: "Rapports" - setting: - one: "Paramètre" - other: "Paramètres" - theme: - one: "Thème" - other: "Thèmes" - component: - one: "Composant" - other: "Composants" new_features: title: "Quoi de neuf ?" check_for_updates: "Vérifier les mises à jour" @@ -5636,15 +5628,6 @@ fr: title: "Quoi de neuf ?" subtitle: "Nous publions de nouvelles fonctionnalités et améliorations en permanence. Cette page présente les grandes lignes, mais vous pouvez cliquer sur « En savoir plus » pour accéder à des notes de mise à jour détaillées." learn_more: "En savoir plus…" - experimental: "Expérimental" - only_experiments: "Afficher uniquement les fonctionnalités expérimentales" - experiment_enabled: "Vous avez activé la fonctionnalité expérimentale." - experiment_disabled: "Vous avez désactivé la fonctionnalité expérimentale." - experiment_tooltip: - title_enabled: "Désactiver la fonctionnalité expérimentale" - content_enabled: "La modification de cette option désactivera la fonctionnalité pour tous les utilisateurs." - feature_tooltip: - content_enabled: "La modification de cette option désactivera la fonctionnalité pour tous les utilisateurs." last_checked: "Dernière vérification" refresh_problems: "Actualiser" no_problems: "Aucun problème n'a été trouvé." @@ -5707,7 +5690,7 @@ fr: all: "Tous" view_table: "tableau" view_graph: "graphique" - refresh_report: "Actualiser le rapport" + refresh_report: "Actualiser" daily: Quotidien monthly: Mensuel weekly: Hebdomadaire @@ -5765,8 +5748,8 @@ fr: title: "Qui peut voir ce groupe ?" public: "Tout le monde" logged_on_users: "Utilisateurs connectés" - members: "Propriétaires, membres et modérateurs de groupes" - staff: "Propriétaires et modérateurs de groupes" + members: "Propriétaires et membres du groupe, et modérateurs" + staff: "Propriétaires du groupe et modérateurs" owners: "Propriétaires du groupe" description: "Les administrateurs peuvent voir tous les groupes." members_visibility_levels: @@ -6275,7 +6258,7 @@ fr: back: "Retour aux composants" install: "Installer" name: "Nom" - used_on: "Utilisé le" + used_on: "Utilisé sur" enabled: "Activé ?" by_author: "Par %{name}" learn_more: "En savoir plus" @@ -6591,7 +6574,6 @@ fr: import_web_tip: "Dépôt contenant le thème" direct_install_tip: "Voulez-vous vraiment installer %{name} depuis le dépôt indiqué ci-dessous ?" import_web_advanced: "Avancé…" - import_file_tip: "Fichier .tar.gz, .zip ou .dcstyle.json contenant le thème" is_private: "Le thème est dans un dépôt Git privé" finish_install: "Terminer l'installation du thème" last_attempt: "Le processus d'installation ne s'est pas terminé, dernière tentative :" @@ -7621,6 +7603,7 @@ fr: field_types: text: "Texte" textarea: "Zone de texte" + date: "Date" confirm: "Confirmation" dropdown: "Menu déroulant" multiselect: "Sélection multiple" @@ -7753,7 +7736,7 @@ fr: confirm: "Oui, mettre à jour la politique relative aux mots de passe" min_admin_password_length: confirm: "Oui, mettre à jour la politique relative aux mots de passe" - password_unique_charactes: + password_unique_characters: confirm: "Oui, mettre à jour la politique relative aux mots de passe" block_common_passwords: confirm: "Oui, mettre à jour la politique relative aux mots de passe" diff --git a/config/locales/client.gl.yml b/config/locales/client.gl.yml index 57aa9cb034e10..7fb8b5928b53e 100644 --- a/config/locales/client.gl.yml +++ b/config/locales/client.gl.yml @@ -6,6 +6,11 @@ gl: js: + blocks: + ghost: + status: "Estado" + hidden: "agochado" + failed: "fallou" number: format: separator: "," @@ -243,6 +248,9 @@ gl: pill: "Mensaxes relacionadas" suggested_topics: pm_title: "Mensaxes suxeridas" + admin_onboarding_banner: + start_posting: + back: "Volver" about: edit: "Editar esta páxina" simple_title: "Verbo de" @@ -271,7 +279,6 @@ gl: today: "hoxe" bookmarked: title: "Marcador" - clear_bookmarks: "Limpar marcadores" help: unbookmark: "Prema para retirar todos os marcadores deste tema" bookmarks: @@ -279,10 +286,10 @@ gl: create: "Crear marcador" edit: "Editar marcador" not_bookmarked: "marcar esta publicación" + topic_bookmark: "Tema" created_with_reminder: "Fixou como marcador esta publicación cun recordatorio %{date}. %{name}" delete: "Eliminar marcador" confirm_delete: "Confirma a eliminación deste marcador? O recordatorio tamén se eliminará." - confirm_clear: "Confirma o borrado de todos os marcadores deste tema?" save: "Gardar" no_timezone: 'Aínda non configurous ningunha zona horaria. Non poderá estabelecer recordatorios. Configure un no teu perfil.' invalid_custom_datetime: "A data e hora que escribiu non é correcta, ténteo de novo." @@ -364,7 +371,6 @@ gl: in_reply_to: "en resposta a" explain: why: "explica por que este elemento acabou na fila de espera" - title: "Puntuación revisábel" formula: "Fórmula" subtotal: "Subtotal" total: "Total" @@ -378,10 +384,8 @@ gl: title: "Os usuarios con alertas que fosen repetidamente aceptadas reciben unha bonificación." trust_level_bonus: name: "nivel de confianza" - title: "Os elementos revisábeis creados por usuarios con maior nivel de confianza teñen unha puntuación superior." type_bonus: name: "tipo de bonificación" - title: "O equipo pode asignar unha bonificación a certos tipos revisábeis para facelos de maior prioridade." revise_and_reject_post: reason: "Motivo" optional: "opcional" @@ -1107,6 +1111,8 @@ gl: tags: "Etiquetas" interface: "Interface" apps: "Apps" + calendar_subscriptions: + copied: "Copiado!" change_password: success: "(correo enviado)" in_progress: "(enviando o correo)" @@ -1549,6 +1555,7 @@ gl: form_kit: reset: Restabelecer optional: opcional + required: obrigatorio errors: required: "Obrigatorio" close: "Pechar" @@ -2099,9 +2106,6 @@ gl: confirm: "Confirmar" select_all: "Seleccionar todo" clear_all: "Borrar todo" - unlist_topics: "Retirar temas da listaxe" - relist_topics: "Refacer a listaxe de temas" - delete: "Eliminar temas" delete_topics_count: one: "Eliminar tema" other: "Eliminar temas" @@ -2113,20 +2117,11 @@ gl: dismiss_new: "Desbotar novas" toggle: "cambiar a selección en bloque dos temas" actions: "Accións en bloque" - close_topics: "Pechar temas" - archive_topics: "Arquivar temas" move_messages_to_inbox: "Mover á caixa de entrada" change_notification_level: "Cambiar o nivel de notificacións" choose_new_category: "Seleccionar a nova categoría dos temas:" - selected: - one: "Seleccionou %{count} tema." - other: "Seleccionou %{count} temas." - change_tags: "Substituír etiquetas" - append_tags: "Anexar etiquetas" choose_new_tags: "Seleccione novas etiquetas para estes temas:" - choose_append_tags: "Seleccione novas etiquetas para anexar a estes temas:" changed_tags: "As etiquetas deses temas cambiaron." - remove_tags: "Retirar etiquetas" confirm_remove_tags: one: "Retiraranse todas as etiquetas deste tema. Está seguro?" other: "Retiraranse todas as etiquetas destes %{count} temas. Está seguro?" @@ -2157,8 +2152,6 @@ gl: name: "Mover á caixa de entrada" remove_tags: name: "Retirar etiquetas" - append_tags: - name: "Anexar etiquetas" replace_tags: name: "Substituír etiquetas" delete_topics: @@ -2754,6 +2747,7 @@ gl: allow_global_tags_label: "Permitir tamén outras etiquetas" required_tag_group: delete: "Eliminar" + tag_group: "Grupo de etiquetas" topic_featured_link_allowed: "Permitir ligazóns de actualidade nesta categoría" create_long: "Crear unha nova categoría" slug_placeholder: "Inserir guións entre palabras para o url (opcional)" @@ -2805,6 +2799,8 @@ gl: review_group_name: "nome do grupo" require_topic_approval: "Require a aprobación de todos os temas novos polo moderador" require_reply_approval: "Require a aprobación de todas as respostas novas polo moderador" + posting_review_modes: + everyone: "Todos" this_year: "este ano" position: "Posición na páxina de categorías:" minimum_required_tags: "Número mínimo de etiquetas requiridas nun tema:" @@ -3192,6 +3188,18 @@ gl: delete_confirm_synonyms: one: "Tamén se eliminará o seu sinónimo." other: "Tamén se eliminarán os seus %{count} sinónimos." + description: "Descrición" + settings: + title: "Configuración" + general: "Xeral" + back: "Volver" + name: "Nome" + slug: "Localizador abreviado" + name_placeholder: "Nome da etiqueta" + synonyms_subtitle: "Cando se usen as seguintes etiquetas, substituílas por %{name}" + localization: + name: "Nome" + description: "Descrición" sort_by: "Ordenar por:" sort_by_count: "número" sort_by_name: "nome" @@ -3386,7 +3394,6 @@ gl: categories: "Todas as categorías" admin_js: settings: "Configuración" - reset_filter: "Restabelecer" admin: title: "Administrador de Discourse" moderator: "Moderador" @@ -3399,6 +3406,9 @@ gl: reports: title: "Listaxe dos informes dispoñíbeis" sidebar_title: "Informes" + group_traffic: "Tráfico" + group_members: "Membros" + group_other: "Outro" config_sections: account: title: "Conta" @@ -3420,7 +3430,6 @@ gl: preview: "Visualizar" enabled_for_options: everyone: "Todos" - staff: "Soamente ao equipo" impact_roles: admins: "Administradores" moderators: "Moderadores" @@ -3500,6 +3509,9 @@ gl: title: "Rexistros" reports: title: "Informes" + sub_pages: + settings: + title: "Configuración" badges: title: "Insignias" permalinks: @@ -3549,13 +3561,6 @@ gl: default_value: "Predeterminado" search: title: "Buscar" - result_types: - theme: - one: "Tema" - other: "Temas" - component: - one: "Compoñente" - other: "Compoñentes" dashboard: title: "Panel" last_updated: "Actualización do panel:" @@ -3622,7 +3627,7 @@ gl: all: "Todo" view_table: "táboa" view_graph: "gráfica" - refresh_report: "Actualizar informe" + refresh_report: "Actualizar" daily: Diario monthly: Mensual weekly: Semanal @@ -4102,7 +4107,6 @@ gl: add_all: "Engadir todos" import_web_tip: "Repositorio que contén o tema" direct_install_tip: "Confirma que quere instalar %{name} desde o repositorio que se lista a seguir?" - import_file_tip: "Ficheiro .tar.gz, .zip ou .dcstyle.json que contén o tema" is_private: "O tema está nun repositorio privado de git" remote_branch: "Nome da ramificación (opcional)" public_key: "Conceder á seguinte clave pública acceso ao repositorio:" @@ -4782,6 +4786,7 @@ gl: title: "Amosar na tarxeta de usuario" field_types: text: "Texto" + date: "Data" confirm: "Confirmación" dropdown: "Despregábel" site_text: diff --git a/config/locales/client.he.yml b/config/locales/client.he.yml index 0ba4c2b55c433..7fc81612f1bdc 100644 --- a/config/locales/client.he.yml +++ b/config/locales/client.he.yml @@ -6,6 +6,12 @@ he: js: + blocks: + ghost: + status: "מצב" + in_location: "בתוך" + hidden: "מוסתר" + failed: "נכשל" carousel: go_to_slide: "מעבר לשקופית %{index}" previous: "השקופית הקודמת" @@ -479,6 +485,8 @@ he: pill: "מוצע" pm_title: "הודעות מוצעות" admin_onboarding_banner: + start_posting: + back: "חזרה" spread_the_word: action: "העתקת קישור" copied_to_clipboard: "קישור הועתק ללוח הגזירים!" @@ -591,8 +599,6 @@ he: other: "נוצר לפני %{count} שנים" bookmarked: title: "סימנייה" - edit_bookmark: "עריכת סימנייה" - clear_bookmarks: "מחיקת סימניות" help: bookmark: "יש ללחוץ כדי להוסיף סימנייה לנושא הזה" edit_bookmark: "יש ללחוץ כדי לערוך את הסימנייה לפוסט בנושא זה" @@ -611,12 +617,12 @@ he: clear_reminder: "פינוי התזכורת" edit: "עריכת סימנייה" not_bookmarked: "סימון פוסט זה בסימנייה" + topic_bookmark: "נושא" remove_reminder_keep_bookmark: "הסרת תזכורת ושמירת הסימנייה" created_with_reminder: "סימנת את הפוסט הזה עם תזכורת %{date}. %{name}" created_with_reminder_generic: "סימנת את זה עם תזכורת %{date}. %{name}" delete: "מחיקת סימנייה" confirm_delete: "למחוק את הסימנייה הזאת? גם התזכורת תימחק." - confirm_clear: "לנקות את כל הסימניות מנושא זה?" save: "שמירה" no_timezone: 'עדיין לא הגדרת אזור זמן. לא תהיה לך אפשרות להגדיר תזכורות. ניתן להגדיר אותו בפרופיל שלך.' invalid_custom_datetime: "התאריך והשעה שסיפקת שגויים, נא לנסות שוב." @@ -770,21 +776,13 @@ he: in_reply_to: "בתגובה ל" filtered_flagged_by: "סומן על ידי" unknown: - title: - one: "יש לך פריטים שממתינים לבדיקה מתוסף מושבת:" - two: "יש לך פריטים שממתינים לבדיקה מתוספים מושבתים:" - many: "יש לך פריטים שממתינים לבדיקה מתוספים מושבתים:" - other: "יש לך פריטים שממתינים לבדיקה מתוספים מושבתים:" instruction: "אי אפשר להציג אותם כראוי עד להפעלת התוסף המתאים. נא להפעיל את התוסף ולרענן את העמוד. לחלופין, אפשר להתעלם מהם. מידע נוסף…" reviewable_unknown_source: "%{reviewableType} (תוסף לא ידוע)" reviewable_known_source: "%{reviewableType} (מהתוסף ‚%{pluginName}’)" ignore_all: "התעלמות מהכול" enable_plugins: "הפעלת תוספים" - delete_confirm: "למחוק את כל הביקורות שנוצרו על ידי תוספים שהושבתו?" - ignore_success: "כל הביקורות שנוצרו על ידי תוספים שהושבתו תימחקנה." explain: why: "נא להסביר למה הפריט הזה הגיע לתור" - title: "ניקוד שניתן לסקירה" formula: "נוסחה" subtotal: "סכום ביניים" total: "סה״כ" @@ -798,10 +796,8 @@ he: title: "משתמשים שסימון הדגל שלהם היה מוצדק בעבר מקבלים בונוס." trust_level_bonus: name: "דרגת אמון" - title: "לפריטים לסקירה שנוצרו על ידי משתמשים בדרגות אמון גבוהות יותר יש ניקוד גבוה יותר." type_bonus: name: "בונוס סוג" - title: "לסוגים מסוימים של פריטים לסקירה ניתן להקצות בונוס על ידי הסגל כדי שהעדיפות שלהם תעלה." revise_and_reject_post: title: "עריכת שינויים" reason: "סיבה" @@ -810,7 +806,6 @@ he: custom_reason: "הוספת תיאור ברור של הסיבה" other_reason: "אחר…" optional: "רשות" - stale_help: "הפריט לסקירה נפתר על ידי %{username}." claim_help: optional: "אפשר לדרוש את הפריט כדי למנוע מאחרים לסקור אותו." required: "עליך לדרוש פריטים לפני שיתאפשר לך לסקור אותם." @@ -1914,6 +1909,10 @@ he: apps: "יישומים" navigation_menu: "תפריט ניווט" upcoming_changes: "שינויים צפויים" + calendar_subscriptions: "לוח שנה" + calendar_subscriptions: + copied: "הועתק!" + add_to_google: "לוח שנה של Google" change_password: success: "(דוא״ל נשלח)" in_progress: "(דוא״ל בשליחה)" @@ -2558,6 +2557,7 @@ he: form_kit: reset: איפוס optional: רשות + required: נדרש dirty_form: "לא הגשת את השינויים שלך! לצאת?" errors: starts_with: "חייב להיפתח בקידומת %{prefix}" @@ -2989,6 +2989,8 @@ he: medium_dark_tone: גוון עור כהה בינוני dark_tone: גוון עור כהה default: אמוג׳ים מותאמים + filter_input: + clear: "פינוי המסנן" shared_drafts: title: "טיוטות משותפות" notice: "הנושא הזה זמין לצפייה לאלו שיכולים לפרסם טיוטות שיתופיות." @@ -3539,8 +3541,6 @@ he: max_views: placeholder: מרבי aria_label: סינון לפי כמות הצפיות המרבית - additional_options: - label: "סינון לפי כמות פוסטים וצפיות בנושאים" hamburger_menu: "תפריט ניווט" new_item: "חדש" go_back: "חזור אחורה" @@ -3620,11 +3620,8 @@ he: confirm: "אישור" select_all: "בחירה בהכול" clear_all: "לפנות הכול" - unlist_topics: "הסרת נושאים" - relist_topics: "רשימה מחדש של נושאים" reset_bump_dates: "איפוס תאריכי ההקפצות" defer: "סימון כלא נקרא" - delete: "מחיקת נושאים" delete_topics_count: one: "מחק נושא" two: "מחיקת נושאים" @@ -3679,19 +3676,10 @@ he: other: "להתעלם מחדשים (%{count})" toggle: "החלף קבוצה מסומנת של נושאים" actions: "מקבץ פעולות" - change_category: "הגדרת קטגוריה…" - close_topics: "סגירת נושאים" - archive_topics: "העברת נושאים לארכיון" move_messages_to_inbox: "העברה לדואר נכנס" archive_messages: "העברה לארכיון" - notification_level: "התראות…" change_notification_level: "שינוי רמת ההתראות" choose_new_category: "נא לבחור קטגוריה לנושאים:" - selected: - one: "בחרת בנושא." - two: "בחרת בשני נושאים." - many: "בחרת ב־%{count} נושאים." - other: "בחרת ב־%{count} נושאים." selected_sole_category: one: "בחרת נושא %{count} מהקטגוריה:" two: "בחרת %{count} נושאים מהקטגוריה:" @@ -3702,12 +3690,10 @@ he: two: "%{count} נבחרו" many: "%{count} נבחרו" other: "%{count} נבחרו" - change_tags: "החלפת תגיות" append_tags: "הוספת תגיות" choose_new_tags: "בחירה בתגיות חדשות לנושאים אלו:" - choose_append_tags: "בחירה בתגיות חדשות שיתווספו לנושאים אלו:" + choose_append_tags: "הוספת תגיות" changed_tags: "התגיות של נושאים אלו השתנו." - remove_tags: "הסרת כל התגיות" confirm_remove_tags: one: "כל התגיות יוסרו מהנושא הזה. להמשיך?" two: "כל התגיות יוסרו מ־%{count} הנושאים האלה. להמשיך?" @@ -3718,7 +3704,7 @@ he: two: "התקדמות: %{count} נושאים" many: "התקדמות: %{count} נושאים" other: "התקדמות: %{count} נושאים" - notify: "להודיע למשתמשים על השינוי הזה." + notify: "להודיע למשתמשים על השינוי הזה" performing: "מתבצעות פעולות במרוכז, נא להמתין…" completed: "הפעולות במרוכזת הושלמו בהצלחה!" error_topic_count: @@ -3748,7 +3734,6 @@ he: name: "התעלמות" close_topics: name: "סגירה" - note: "הערה" optional: (רשות) archive_topics: name: "ארכב" @@ -3762,24 +3747,18 @@ he: name: "החזרה" remove_tags: name: "הסרת תגיות" - append_tags: - name: "הוספת תגיות" replace_tags: name: "החלפת תגיות" delete_topics: name: "מחיקה" update_category: name: "עדכון קטגוריה" - description: "נא לבחור קטגוריה חדשה לנושאים הנבחרים" reset_bump_dates: name: "איפוס תאריכי הקפצה" - description: "איפוס תאריכי הקפצת הנושאים לתאריך של הפוסט האחרון שנוצר, מה שמשפיע על הסדר ברשימת הנושאים" defer: name: "סימון כלא נקרא" - description: "סימון נושאים כנקראו" update_notifications: name: "עדכון התראות" - description: "שינוי רמת ההתראה לצפייה, מעקב, רגיל או מושתק" topic: filter_to: one: "פוסט אחד בנושא" @@ -4386,7 +4365,11 @@ he: edit: "עריכה" delete: "מחיקה" add: "הוספת תרגום חדש" - manage: "ניהול תרגומים (%{count} קיימים)" + manage: + one: "ניהול תרגומים (%{count} קיימים)" + two: "ניהול תרגומים (%{count} קיימים)" + many: "ניהול תרגומים (%{count} קיימים)" + other: "ניהול תרגומים (%{count} קיימים)" view: one: "הצגת שפה מתורגמת" two: "הצגת שתי שפות מתורגמות" @@ -4656,11 +4639,15 @@ he: delete: "הסרה" add: "הוספת קבוצת תגיות נדרשת" placeholder: "בחירת קבוצת תגיות…" + tag_group: "קבוצת תגיות" topic_featured_link_allowed: "אפשרו קישורים מומלצים בקטגוריה זו" delete: "מחיקת קטגוריה" create: "קטגוריה חדשה" create_long: "יצירת קטגוריה חדשה" + type_settings_schema: + site_settings: "הגדרות האתר" save: "שמירת קטגוריה" + unsaved_changes: "יש שינויים שלא נשמרו" slug: "כתובת ייצוגית לקטגוריה" parent: "קטגוריית הורה" slug_placeholder: "(רשות) מילים-מחוברות-במקפים-ככתובת" @@ -4702,6 +4689,8 @@ he: list: "הצגת קטגוריות" no_description: "אנא הוסיפו תיאור לקטגוריה זו." change_in_category_topic: "עריכת תיאור" + description_expand: "להציג יותר" + description_collapse: "להציג פחות" already_used: "הצבע הזה בשימוש על ידי קטגוריה אחרת" color_palette: "ערכת צבעים" security: "אבטחה" @@ -4740,6 +4729,10 @@ he: review_group_name: "שם הקבוצה" require_topic_approval: "לדרוש אישור מפקח לכל הנושאים החדשים" require_reply_approval: "לדרוש אישור מפקח לכל התגובות החדשות" + posting_review_modes: + no_one: "אף אחד" + everyone: "כולם" + posting_review_groups_placeholder: "בחירת קבוצות…" this_year: "השנה" position: "מיקום בעמוד הקטגוריות:" default_position: "מקום ברירת מחדל" @@ -5343,7 +5336,20 @@ he: other: "%{count} המילים הנרדפות שקשורות אליה תימחקנה גם כן." edit_tag: "עריכת שם התגית ותיאורה" edit: "עריכת התגית הזאת" - description: "תיאור (1000 תווים לכל היותר)" + description: "תיאור" + settings: + title: "הגדרות" + general: "כללי" + localizations: "תרגומים" + back: "חזרה" + name: "שם" + slug: "מזהה ייצוגי" + name_placeholder: "שם תגית" + synonyms_subtitle: "תגיות אלו תוחלפנה בתגית %{name}" + localization: + locale: "הגדרות מקומיות" + name: "שם" + description: "תיאור" sort_by: "סידור לפי:" sort_by_count: "ספירה" sort_by_name: "שם" @@ -5889,7 +5895,6 @@ he: admin_js: type_to_filter: "יש להקליד לסינון…" settings: "הגדרות" - reset_filter: "איפוס" admin: title: "ניהול Discourse" moderator: "מפקח" @@ -5902,9 +5907,11 @@ he: never: "אף פעם" reports: title: "רשימת דיווחים זמינים" - meta_doc: "דוחות הם כלי רב עוצמה שמאפשר לך להבין מה קורה באתר שלך. הם יכולים לסייע לך לזהות מגמות, לאתר בעיות ולהחליט על בסיס נתונים." sidebar_title: "דוחות" back: "חזרה לכל הדוחות" + group_traffic: "תנועה" + group_members: "חברים" + group_other: "אחר" config_sections: account: title: "חשבון" @@ -5945,7 +5952,6 @@ he: enabled_for_options: no_one: "אף אחד" everyone: "כולם" - staff: "סגל בלבד" specific_groups: "קבוצה או קבוצות מסוימות" specific_groups_with_group_names: one: "הקבוצה %{groupNames}" @@ -6051,7 +6057,6 @@ he: help_text: "הגודל המומלץ הוא ‎600 × 80 פיקסלים." large_icon: title: "סמל מרובע" - description: "גרסה מרובעת של תמונת הלוגו מופיעה בחלק העליון של הניהול והיא גם לוגו היישומון במסך הבית של המכשיר הנייד." help_text: "הגודל המומלץ הוא ‎512 × 512 פיקסלים." square_icon_dark: required: "האם להשתמש בסמל מרובע אחר עבור מצב כהה?" @@ -6237,7 +6242,7 @@ he: header_description: "דוחות הם כלי רב עוצמה שמאפשר לך להבין מה קורה באתר שלך. הם יכולים לסייע לך לזהות מגמות, לאתר בעיות ולהחליט על בסיס נתונים." sub_pages: settings: - title: "הגדרות לוח הבקרה" + title: "הגדרות" badges: title: "עיטורים" header_description: "עיטורים מתגמלים משתמשים על הפעילויות שלהם וההישגים כדי להוקיר, לתקף ולעודד התנהגות ומעורבות חיובית בתוך הקהילה" @@ -6387,32 +6392,6 @@ he: two: 'שתי תוצאות עבור „%{filter}”' many: '%{count} תוצאות עבור „%{filter}”' other: '%{count} תוצאות עבור „%{filter}”' - result_types: - page: - one: "עמוד" - two: "עמודים" - many: "עמודים" - other: "עמודים" - report: - one: "דוח" - two: "דוחות" - many: "דוחות" - other: "דוחות" - setting: - one: "הגדרה" - two: "הגדרות" - many: "הגדרות" - other: "הגדרות" - theme: - one: "תמה" - two: "תמות" - many: "תמות" - other: "תמות" - component: - one: "רכיב" - two: "רכיבים" - many: "רכיבים" - other: "רכיבים" new_features: title: "מה חדש?" check_for_updates: "חיפוש עדכונים" @@ -6437,23 +6416,6 @@ he: subtitle: "אנו מוציאים לאור יכולות ושיפורים חדשים כל הזמן. העמוד הזה מסקר את הנקודות החשובות אבל ניתן ללחוץ על ‚מידע נוסף’ כדי לצפות בהערות ההוצאה לאור המפורטות." no_new_features_error: "אירעה שגיאה בטעינת ערוץ העדכונים. ניתן לראות הכרזות קודמות על יכולות חדשות בקהילת Discourse Meta." learn_more: "מידע נוסף…" - experimental: "ניסיוני" - only_experiments: "להציג יכולות ניסיוניות בלבד" - experiment_enabled: "הפעלת את היכולת הניסיונית." - experiment_disabled: "השבתת את היכולת הניסיונית." - feature_enabled: "הפעלת את היכולת." - feature_disabled: "השבתת את היכולת." - toggled_too_fast: "החלפת את מצב המתג מהר מדי. נא לחכות כמה שניות בטרם החלפת המצב שוב." - experiment_tooltip: - title_disabled: "התנסות ביכולת הניסיונית הזאת" - title_enabled: "כיבוי יכולת ניסיונית" - content_disabled: "מזמינים אותך לעשות סיבוב על היכולת החדשה שאנו מפתחים! היא עדיין בשלבי ניסוי, לכן יכול להיות שנסיר אותה בכל רגע נתון. אפשר לכבות אותה בכל רגע נתון.

שינוי ההגדרה הזאת יפעיל את היכולת לכל המשתמשים." - content_enabled: "שינוי מצב ההגדרה הזאת ישבית את היכולת לכל המשתמשים." - feature_tooltip: - title_disabled: "התנסות ביכולת הזאת" - title_enabled: "כיבוי היכולת" - content_disabled: "כדאי להתנסות ביכולת החדשה! אפשר להפסיק את ההתנסות בכל רגע נתון.

שינוי ההגדרה הזאת יפעיל את היכולת לכל המשתמשים." - content_enabled: "שינוי מצב ההגדרה הזאת ישבית את היכולת לכל המשתמשים." last_checked: "נבדק לאחרונה" refresh_problems: "רענן" no_problems: "לא נמצאו בעיות." @@ -6524,7 +6486,7 @@ he: all: "הכול" view_table: "טבלה" view_graph: "גרף" - refresh_report: "ריענון דוח" + refresh_report: "רענון" daily: יומי monthly: חודשי weekly: שבועי @@ -7442,7 +7404,6 @@ he: import_web_tip: "מאגר שמכיל ערכת עיצוב" direct_install_tip: "להתקין את %{name} מהמאגר שמופיע להלן?" import_web_advanced: "מתקדם…" - import_file_tip: "קובץ ‎.tar.gz,‏ ‎.zip,‏ או ‎.dcstyle.json שמכיל ערכת עיצוב" is_private: "ערכת העיצוב נמצאת במאגר git פרטי" finish_install: "סיום התקנת ערכת עיצוב" last_attempt: "תהליך ההתקנה לא הסתיים, ניסיון אחרון:" @@ -8525,6 +8486,7 @@ he: field_types: text: "טקסט" textarea: "אזור טקסט" + date: "תאריך" confirm: "אישור" dropdown: "נגלל" multiselect: "מגוון בחירות" @@ -8670,7 +8632,7 @@ he: min_admin_password_length: prompt: "הפעולה הזאת תשנה את מדיניות הסיסמאות שלך. היא תשפיע על כל המנהלים שישנו את הסיסמה שלהם מעתה ואילך. להמשיך?" confirm: "כן, לעדכן את מדיניות הסיסמאות" - password_unique_charactes: + password_unique_characters: prompt: "הפעולה הזאת תשנה את מדיניות הסיסמאות שלך. היא תשפיע על כל המשתמשים שישנו את הסיסמה שלהם מעתה ואילך. להמשיך?" confirm: "כן, לעדכן את מדיניות הסיסמאות" block_common_passwords: diff --git a/config/locales/client.hr.yml b/config/locales/client.hr.yml index 894b4eebd2226..8e588c6574d53 100644 --- a/config/locales/client.hr.yml +++ b/config/locales/client.hr.yml @@ -6,6 +6,12 @@ hr: js: + blocks: + ghost: + status: "Statust" + in_location: "u" + hidden: "skriveno" + failed: "neuspješno" number: format: separator: "." @@ -436,6 +442,8 @@ hr: pill: "Predloženo" pm_title: "Predložene poruke" admin_onboarding_banner: + start_posting: + back: "Natrag" spread_the_word: action: "Kopirajte poveznicu" about: @@ -533,8 +541,6 @@ hr: other: "Kreirano prije %{count} godina/e." bookmarked: title: "Zabilješka" - edit_bookmark: "Uredi oznaku" - clear_bookmarks: "Očisti oznake" help: bookmark: "Kliknite za spremanje ove teme u oznake" edit_bookmark: "Kliknite za uređivanje knjižne oznake na objavi u ovoj temi" @@ -553,12 +559,12 @@ hr: clear_reminder: "Očisti podsjetnik" edit: "Uredi oznaku" not_bookmarked: "Sačuvaj objavu za kasnije" + topic_bookmark: "Tema" remove_reminder_keep_bookmark: "Ukloni podsjetnik i zadrži oznaku" created_with_reminder: "Označili ste ovu objavu s podsjetnikom %{date}. %{name}" created_with_reminder_generic: "Označili ste ovo s podsjetnikom %{date}. %{name}" delete: "Izbriši oznaku" confirm_delete: "Jeste li sigurni da želite izbrisati ovu oznaku? Podsjetnik će također biti izbrisan." - confirm_clear: "Jeste li sigurni da želite ukloniti sve vaše zabilježbe iz ove teme?" save: "Spremi" no_timezone: 'Još niste postavili vremensku zonu. Nećete moći postaviti podsjetnike. Postavi jedan u svom profilu.' invalid_custom_datetime: "Datum i vrijeme koje ste naveli nisu valjani. Pokušajte ponovo." @@ -695,20 +701,13 @@ hr: in_reply_to: "odgovor na" filtered_flagged_by: "Označio/la" unknown: - title: - one: "Imate na čekanju zahtjeve za reviziju iz onemogućenog plugin-a:" - few: "Imate na čekanju zahtjeve za reviziju iz onemogućenih plugin-a:" - other: "Imate na čekanju zahtjeve za reviziju iz onemogućenih plugin-a:" instruction: "Ne mogu se ispravno prikazati dok ne omogućite odgovarajući plugin. Molimo omogućite plugin i osvježite stranicu. Alternativno, možete ih zanemariti. Saznajte više..." reviewable_unknown_source: "%{reviewableType} (nepoznati plugin)" reviewable_known_source: "%{reviewableType} (iz '%{pluginName}' plugina)" ignore_all: "Zanemari sve" enable_plugins: "Omogući pluginove" - delete_confirm: "Jeste li sigurni da želite izbrisati sve recenzije koje su kreirali onemogućeni pluginovi?" - ignore_success: "Svi sadržaji za moderaciju koje su stvorili onemogućeni plugini su obrisani." explain: why: "objasnite zašto je ta stavka završila u redu čekanja" - title: "Moguće ocjenjivanje" formula: "Formula" subtotal: "Suma stavke" total: "Ukupno" @@ -722,10 +721,8 @@ hr: title: "Korisnici s čijim se zastavama povijesno dogovara dobivaju bonus." trust_level_bonus: name: "razina povjerenja" - title: "Stavke koje su stvorili korisnici s visokom razinom povjerenja imaju višu ocjenu." type_bonus: name: "upišite bonus" - title: "Određenim vrstama koje mogu pregledati osoblje može im dodijeliti bonus kako bi im postao veći prioritet." revise_and_reject_post: title: "Revidiraj" reason: "Razlog" @@ -734,7 +731,6 @@ hr: custom_reason: "Dajte jasan opis razloga" other_reason: "Ostalo..." optional: "neobvezno" - stale_help: "Ova revizija je riješena %{username}." claim_help: optional: "Možete prisvojiti ovu stavku kako drugi ne bi mogli dodavati osvrte." required: "Morate prisvojiti ovu stavku prije nego dodate osvrt na nju." @@ -1754,6 +1750,9 @@ hr: interface: "Sučelje" apps: "Aplikacije" navigation_menu: "Navigacijski izbornik" + calendar_subscriptions: + copied: "Kopirano!" + add_to_google: "Google kalendar" change_password: success: "(email je poslan)" in_progress: "(email se šalje)" @@ -2372,6 +2371,7 @@ hr: form_kit: reset: Resetirati optional: neobvezno + required: potrebno dirty_form: "Niste poslali promjene! Jeste li sigurni da želite otići?" errors: starts_with: "Mora početi sa %{prefix}" @@ -3289,8 +3289,6 @@ hr: max_views: placeholder: maksimum aria_label: filtrirajte prema maksimalnom broju pregleda - additional_options: - label: "Filtrirajte prema broju postova i pregledima teme" hamburger_menu: "Navigacijski izbornik" new_item: "novo" go_back: "idi natrag" @@ -3361,11 +3359,8 @@ hr: confirm: "Potvrdi" select_all: "Odaberi sve" clear_all: "Očistiti sve" - unlist_topics: "Poništite popis tema" - relist_topics: "Poništite popis tema" reset_bump_dates: "Resetiraj datum obnove" defer: "Označi kao nepročitano" - delete: "Obriši teme" delete_topics_count: one: "Obriši temu" few: "Obriši teme" @@ -3404,18 +3399,10 @@ hr: other: "Odbaci novo (%{count})" toggle: "uključi/isključi skupni odabir tema" actions: "Grupne aktivnosti" - change_category: "Postavi kategoriju…" - close_topics: "Zatvori teme" - archive_topics: "Arhiviraj teme" move_messages_to_inbox: "Premjesti u Inbox" archive_messages: "Premjestiti u arhivu" - notification_level: "Obavijesti…" change_notification_level: "Promijenite razinu obavijesti" choose_new_category: "Odaberite novu kategoriju za teme:" - selected: - one: "Odabrali ste %{count} temu." - few: "Odabrali ste %{count} tema." - other: "Odabrali ste %{count} tema." selected_sole_category: one: "Odabrali ste %{count} temu iz kategorije:" few: "Odabrali ste %{count} teme iz kategorije:" @@ -3424,12 +3411,10 @@ hr: one: "%{count} odabrano" few: "%{count} odabrano" other: "%{count} odabrano" - change_tags: "Zamijeni oznake" - append_tags: "Dodajte oznake" + append_tags: "Dodaj oznake" choose_new_tags: "Odaberite nove oznake za ove teme:" - choose_append_tags: "Odaberite nove oznake za dodavanje ovim temama:" + choose_append_tags: "Dodaj oznake" changed_tags: "Oznake tih tema su promijenjene." - remove_tags: "Ukloni sve oznake" confirm_remove_tags: one: "Sve oznake bit će uklonjene iz ove teme. Jesi li siguran?" few: "Sve oznake %{count} bit će uklonjene iz ove teme. Jeste li sigurni?" @@ -3466,7 +3451,6 @@ hr: name: "Skloni" close_topics: name: "Zatvori" - note: "Bilješka" optional: (opcionalno) archive_topics: name: "Arhiva" @@ -3480,24 +3464,18 @@ hr: name: "Ponovno objavite" remove_tags: name: "Ukloni oznake" - append_tags: - name: "Dodajte oznake" replace_tags: name: "Zamijeni oznake" delete_topics: name: "Pobriši" update_category: name: "Ažuriraj kategoriju" - description: "Odaberi novu kategoriju za odabrane teme" reset_bump_dates: name: "Poništite datume isticanja" - description: "Vratite datum isticanja teme na datum zadnje kreirane objave, što utječe na redoslijed na popisu tema" defer: name: "Označi kao nepročitano" - description: "Označi teme kao nepročitane" update_notifications: name: "Ažurirajte obavijesti" - description: "Promijenite razinu obavijesti na Gledanje, Praćenje, Uobičajeno ili Utišano" topic: filter_to: one: "%{count} objava u temi" @@ -4306,8 +4284,12 @@ hr: delete: "Pobriši" add: "Dodajte potrebnu grupu oznaka" placeholder: "Odaberite grupu oznaka" + tag_group: "Grupa oznaka" topic_featured_link_allowed: "Dopusti istaknute poveznice u ovoj kategoriji" create_long: "Stvorite novu kategoriju" + type_settings_schema: + site_settings: "Postavke web-mjesta" + unsaved_changes: "Imate nespremljene promjene" slug_placeholder: "(Neobavezno) spojene-riječi za url" creation_error: Dogodila se greška pri stvaranju kategorije. save_error: Dogodila se greška pri spremanju kategorije. @@ -4337,6 +4319,8 @@ hr: delete_confirm: "Jeste li sigurni da želite izbrisati ovu kategoriju?" delete_error: "Dogodila se greška pri brisanju kategrije." no_description: "Molimo dodajte opis ovoj kategoriji." + description_expand: "Prikaži više" + description_collapse: "Prikaži manje" already_used: "Ova boja se koristi u drugoj kategoriji." security: "Sigurnost" security_add_group: "Dodajte grupu" @@ -4369,6 +4353,9 @@ hr: review_group_name: "ime grupe" require_topic_approval: "Zahtijeva odobrenje moderatora za sve nove teme" require_reply_approval: "Zahtijeva odobrenje moderatora za sve nove odgovore" + posting_review_modes: + everyone: "Svi" + posting_review_groups_placeholder: "Odaberite grupe..." this_year: "ove godine" position: "Položaj na stranici kategorija:" position_disabled: "Kategorije će biti prikazane prema redoslijedu aktivnosti. Da biste kontrolirali redoslijed kategorija na popisima, omogućite postavku 'fiksnih pozicija kategorija'." @@ -4927,7 +4914,20 @@ hr: few: "Njegovi %{count} sinonima također će biti izbrisani." other: "Njegovi %{count} sinonimi također će biti izbrisani." edit_tag: "Uredite naziv i opis oznake" - description: "Opis (najviše1000 znakova)" + description: "Opis" + settings: + title: "Postavke" + general: "Općenito" + localizations: "Lokalizacije" + back: "Natrag" + name: "Ime" + slug: "Puž" + name_placeholder: "Naziv oznake" + synonyms_subtitle: "Kada se koriste sljedeće oznake, one će biti zamijenjene s %{name}" + localization: + locale: "Lokalizacija" + name: "Ime" + description: "Opis" sort_by: "Sortiraj po:" sort_by_count: "količina" sort_by_name: "ime" @@ -5434,7 +5434,6 @@ hr: admin_js: type_to_filter: "Upišite za filtriranje…" settings: "Postavke" - reset_filter: "Resetirati" admin: title: "Administrator" moderator: "Moderator" @@ -5447,9 +5446,11 @@ hr: never: "nikad" reports: title: "Popis dostupnih izvještaja" - meta_doc: "Izvješća su moćan alat koji vam pomaže da shvatite što se događa na vašoj stranici. Mogu vam pomoći u prepoznavanju trendova, uočavanju problema i donošenju odluka na temelju podataka." sidebar_title: "Izvještaji" back: "Povratak na sva izvješća" + group_traffic: "Promet" + group_members: "Članovi" + group_other: "Ostalo" config_sections: account: title: "Račun" @@ -5474,7 +5475,6 @@ hr: preview: "Pregled" enabled_for_options: everyone: "Svi" - staff: "Samo osoblje" statuses: experimental: "Eksperimentalno" impact_roles: @@ -5552,7 +5552,6 @@ hr: help_text: "Preporučena veličina je 600 x 80 piksela." large_icon: title: "Kvadratna ikona" - description: "Kvadratna verzija slike logotipa pojavljuje se na vrhu administracije, a ujedno je i logotip aplikacije početnog zaslona za mobilne uređaje." help_text: "Preporučena veličina je 512 x 512 piksela." square_icon_dark: required: "Koristiti drugu kvadratnu ikonu za tamni način rada?" @@ -5684,7 +5683,7 @@ hr: title: "Izvještaji" sub_pages: settings: - title: "Postavke nadzorne ploče" + title: "Postavke" badges: title: "Značke" header_description: "Značke nagrađuju korisnike za njihove aktivnosti, doprinose i postignuća kako bi se prepoznalo, potvrdilo i potaknulo pozitivno ponašanje i angažman unutar zajednice." @@ -5781,19 +5780,6 @@ hr: one: '%{count} rezultat za "%{filter}"' few: '%{count} rezultat za "%{filter}"' other: '%{count} rezultata za "%{filter}"' - result_types: - page: - one: "Stranica" - few: "Stranica" - other: "Stranice" - theme: - one: "Tema" - few: "Teme" - other: "Teme" - component: - one: "Komponenta" - few: "Komponente" - other: "Komponente" new_features: title: "Što je novo?" check_for_updates: "Provjeri ažuriranja" @@ -5816,23 +5802,6 @@ hr: title: "Što je novo?" subtitle: "Neprestano objavljujemo nove značajke i poboljšanja. Ova stranica pokriva najvažnije, ali možete kliknuti na 'Saznajte više' da biste vidjeli opsežne bilješke o izdanju." learn_more: "Saznajte više..." - experimental: "Eksperimentalno" - only_experiments: "Prikaži samo eksperimentalne značajke" - experiment_enabled: "Uspješno ste uključili eksperimentalnu značajku." - experiment_disabled: "Uspješno ste isključili eksperimentalnu značajku." - feature_enabled: "Omogućili ste značajku." - feature_disabled: "Onemogućili ste značajku." - toggled_too_fast: "Prebrzо ste promijenili postavku. Pričekajte nekoliko sekundi prije ponovnog pokušaja." - experiment_tooltip: - title_disabled: "Isprobajte ovu eksperimentalnu značajku" - title_enabled: "Isključite eksperimentalnu značajku" - content_disabled: "Isprobajte našu najnoviju značajku koja je u razvoju! Još je u eksperimentalnoj fazi, pa je možemo ukloniti u bilo kojem trenutku. Možete je isključiti bilo kada.

Promjena ove postavke omogućit će značajku za sve korisnike." - content_enabled: "Promjenom ove postavke onemogućit ćete značajku za sve korisnike." - feature_tooltip: - title_disabled: "Isprobajte ovu značajku" - title_enabled: "Isključite značajku" - content_disabled: "Isprobajte ovu novu značajku! Možete je isključiti bilo kada.

Promjena ove postavke omogućit će značajku za sve korisnike." - content_enabled: "Promjenom ove postavke onemogućit ćete značajku za sve korisnike." last_checked: "Zadnje provjereno" refresh_problems: "Osvježi" no_problems: "Nisu pronađeni problemi." @@ -5884,7 +5853,7 @@ hr: all: "Sve" view_table: "tablica" view_graph: "grafikon" - refresh_report: "Osvježi izvješće" + refresh_report: "Osvježi" daily: Dnevno monthly: Mjesečno weekly: Tjedno @@ -6551,7 +6520,6 @@ hr: add_all: "Dodaj Sve" import_web_tip: "Repozitorijum koji sadrži temu" direct_install_tip: "Jeste li sigurni da želite instalirati %{name} iz dolje navedenog spremišta?" - import_file_tip: ".tar.gz, .zip ili .dcstyle.json datoteka koja sadrži temu" is_private: "Tema je u privatnom git repozitoriju" finish_install: "Završite instalaciju teme" last_attempt: "Proces instalacije nije dovršen, posljednji pokušaj:" @@ -7352,6 +7320,7 @@ hr: field_types: text: "Tekst" textarea: "Tekstualno polje" + date: "Datum" confirm: "Potvrda" dropdown: "Padajući izbornik" multiselect: "Višestruki odabir" @@ -7444,7 +7413,7 @@ hr: requires_confirmation_messages: min_admin_password_length: confirm: "Da, ažuriraj pravila o lozinkama" - password_unique_charactes: + password_unique_characters: confirm: "Da, ažuriraj pravila o lozinkama" badges: status: Statust diff --git a/config/locales/client.hu.yml b/config/locales/client.hu.yml index adac8971ebac8..bcfb47c2966a8 100644 --- a/config/locales/client.hu.yml +++ b/config/locales/client.hu.yml @@ -6,6 +6,22 @@ hu: js: + blocks: + ghost: + status: "Állapot" + conditions: "Feltételek" + arguments: "Paraméterek" + container_args: "Konténer paraméterek" + in_location: "ebben:" + hidden: "rejtett" + not_registered: "nincs regisztrálva" + no_visible_children: "Nincsenek megjeleníthető alelemek" + failed: "sikertelen" + ghost_reasons: + optional_missing_hint: "Ez az opcionális blokk nem jelenik meg, mert nincs regisztrálva." + no_visible_children_hint: "Ez a konténerblokk nem jelenik meg, mert egyetlen aleleme sem látható." + condition_failed_hint: "Ez a blokk nem jelenik meg, mert a feltételei nem teljesültek." + head_hidden_tail_hint: "Ez a blokk nem jelenik meg, mert a head konténerben már egy másik blokk korábban megjelent." carousel: go_to_slide: "%{index} elemre ugrás" previous: "Előző elem" @@ -297,10 +313,13 @@ hu: skip_to_top: "Ugrás a tetejére" skip_user_nav: "Ugrás a profil tartalmára" emails_are_disabled: "Egy adminisztrátor letiltotta a kimenő e-maileket. Semmilyen értesítő e-mail nem lesz elküldve." + emails_are_disabled_no_smtp: "Minden kimenő e-mail le van tiltva, mivel nincs beállítva SMTP-szerver. Semmiféle e-mailt nem lehet kiküldeni." emails_are_disabled_non_staff: "A kimenő e-mailek le vannak tiltva a nem stábtagok számára." software_update_prompt: message: "Frissítettük ezt az oldalt, frissítse a zökkenőmentes működésért." dismiss: "Elvetés" + notifications_tracking: + tooltip: "Értesítési szint: %{level}" back_button: "Vissza" welcome_banner: header: @@ -320,12 +339,27 @@ hu: broken_page_change_alert: "Egy onPageChange kezelő hibát jelzett. További információért nézze meg a böngésző fejlesztői eszközeit." broken_plugin_alert: "A(z) „%{name}” bővítmény okozta." broken_transformer_alert: "Hiba történt. Előfordulhat, hogy webhelye nem működik megfelelően." + broken_block_alert: "Blokkkonfigurációs hibát észleltünk. A részletekért tekintse meg a böngésző konzolját." + broken_block_factory_alert: "Egy blokk betöltése sikertelen. Előfordulhat, hogy egyes felületi elemek nem jelennek meg megfelelően." critical_deprecation: notice: "[Admin közlemény] %{source} olyan kódot tartalmaz, ami frissítésre szorul. (id:%{id})" learn_more_link: "(további információ)" theme_source: "„%{name}” téma" plugin_source: "„%{name}” bővítmény" unknown_source: "Az egyik témája vagy bővítménye" + dev_tools: + drag_to_move: "Húzza a mozgatáshoz" + toggle_plugin_outlet_debug: "Bővítménykimenet hibakeresésének be-/kikapcsolása" + toggle_block_debug: "Blokk hibakeresésének ki-/bekapcsolása" + block_debug: + outlet_boundaries: "Kimeneti határfeltételek" + visual_overlay: "Vizuális átfedés" + ghost_blocks: "Szellemblokkok" + condition_debugging: "Feltétel hibakeresése" + toggle_safe_mode: "Biztonságos mód be-/kikapcsolása" + toggle_verbose_localization: "Részletes honosítási mód be-/kikapcsolása" + toggle_mobile_view: "Mobil nézet be-/kikapcsolása" + disable_dev_tools: "Fejlesztői eszközök letiltása" s3: regions: ap_northeast_1: "Csendes-óceáni térség (Tokió)" @@ -415,7 +449,37 @@ hu: pill: "Ajánlott" pm_title: "Ajánlott üzenetek" admin_onboarding_banner: + launch_in_easy_steps: "Indítás %{step_count} egyszerű lépésben" + congrats_onboarding_complete: "Gratulálunk a bevezetési folyamat elvégzéséhez!" + invite_collaborators: + title: "Együttműködők meghívása" + description: "Az első tagok segítenek életre kelteni a közösségedet." + action: "Meghívó létrehozása" + start_posting: + title: "Kezdj el posztolni!" + description: "Adj témát a közös beszélgetéshez!" + choose_option: "Hogyan szeretnél kezdeni?" + predefined_topics: "Jégtörő sablonok" + predefined_topics_subtitle: "Adj témát az új tagoknak a beszélgetéshez: válassz egy sablont, szerkeszd meg, és alakítsd a sajátodra!" + predefined_topics_description: "Válogass a beszélgetésindító ötletek közül, és indítsd be a társalgást!" + use_predefined: "Sablonok böngészése" + back: "Vissza" + icebreakers: + fun_facts: + title: "Milyen érdekességeket tudsz rólad mondani?" + body: "Sziasztok! Nagyon örülök, hogy elindíthatom ezt az új közösséget. Kezdésként osszunk meg magunkról egy-egy érdekességet! Kezdem is a sort: imádok túrázni és új ösvényeket felfedezni. Rólatok mit érdemes tudni? Mi az az érdekesség, amit megosztanátok velünk?" + coolest_thing_you_have_seen_today: + title: "Mi a legmenőbb dolog, amit ma láttál?" + body: "Mi a legmenőbb dolog, amit ma láttál vagy tapasztaltál? Bármi lehet, egy gyönyörű naplementétől kezdve egy véletlenszerű kedves gesztusig. Kezdem: Láttam egy kutyát, amint segített egy idős embernek átkelni az úton!" + introduce_yourself: + title: "Mutasd be magad" + body: "Üdv a közösségben! Ismerjük meg egymást. Kérlek mutatkozz be, és mesélj egy kicsit az érdeklődési körödről. Először én kezdem: szenvedélyesen rajongok a technológiáért, és szeretek másokat tanítani!" + what_is_your_favorite_food: + title: "Mi a kedvenc ételed?" + body: "Oszd meg kedvenc ételeidet a közösséggel! Kezdjük: Imádom a pizzát, főleg extra sajttal és pepperonival." spread_the_word: + title: "Terjeszd az igét!" + description: "Ossz meg egy linket mindenkivel a hálózatodban" action: "Hivatkozás másolása" copied_to_clipboard: "Hivatkozás vágólapra másolva!" about: @@ -499,8 +563,6 @@ hu: other: "Létrehozva %{count} éve" bookmarked: title: "Könyvjelző" - edit_bookmark: "Könyvjelző szerkesztése" - clear_bookmarks: "Könyvjelzők törlése" help: bookmark: "Kattintson a téma könyvjelzőzéséhez" edit_bookmark: "Kattintson a témában lévő hozzászólás könyvjelzőjének szerkesztéséhez." @@ -519,12 +581,12 @@ hu: clear_reminder: "Emlékeztető törlése" edit: "Könyvjelző szerkesztése" not_bookmarked: "bejegyzés könyvjelzőzése" + topic_bookmark: "Téma" remove_reminder_keep_bookmark: "Emlékeztető eltávolítása és könyvjelző megtartása" created_with_reminder: "Könyvjelzőzte ezt a bejegyzést, és emlékeztetőt állított be ekkorra: %{date}. %{name}" created_with_reminder_generic: "Könyvjelzőzte ezt, és emlékeztetőt állított be ekkorra: %{date}. %{name}" delete: "Könyvjelző törlése" confirm_delete: "Biztos, hogy törli ezt a könyvjelzőt? Az emlékeztető is törlődni fog." - confirm_clear: "Biztos, hogy törli az összes könyvjelzőjét ebből a témából?" save: "Mentés" no_timezone: 'Még nem állított be időzónát, így nem állíthat be emlékeztetőket. Állítsa be az időzónáját a a profiljában.' invalid_custom_datetime: "A megadott dátum és idő érvénytelen, próbálkozzon újra." @@ -592,6 +654,10 @@ hu: other_drafts: one: "+%{count} egyéb piszkozat" other: "+%{count} egyéb piszkozat" + embed_mode: + storage_access_prompt: "Már van %{site_name} fiókod? Engedélyezd a hozzáférést a munkamenetedhez, hogy saját nevedben hozzászólhass." + allow_access: "Hozzáférés engedélyezése" + continue_as_guest: "Folytatás vendégként" topic_count_all: one: "%{count} új téma megtekintése" other: "%{count} új téma megtekintése" @@ -658,18 +724,18 @@ hu: filtered_flagged_by: "Megjelölte" unknown: title: - one: "Függőben lévő felülvizsgálandó elemek vannak a letiltott bővítményből:" - other: "Függőben lévő felülvizsgálandó elemek vannak a letiltott bővítményekből:" + one: "Függőben lévő moderációs tételek egy letiltott bővítményből:" + other: "Függőben lévő moderációs tételek egy letiltott bővítményekből:" instruction: "Nem jeleníthetők meg megfelelően, amíg nem engedélyezi a megfelelő bővítményt. Engedélyezze a bővítményt, és frissítse az oldalt. Alternatív megoldásként figyelmen kívül hagyhatja őket. További információ…" reviewable_unknown_source: "%{reviewableType} (ismeretlen bővítmény)" reviewable_known_source: "%{reviewableType} (a(z) „%{pluginName}” bővítményből)" ignore_all: "Összes figyelmen kívül hagyása" enable_plugins: "Bővítmények engedélyezése" - delete_confirm: "Biztos benne, hogy törölni szeretné a letiltott bővítmények által létrehozott összes értékelést?" - ignore_success: "A letiltott bővítmények által létrehozott összes értékelés törölve lett." + delete_confirm: "Biztosan törölni szeretné a letiltott bővítmények által létrehozott összes moderációs tételt?" + ignore_success: "A letiltott bővítmények által létrehozott összes moderációs tétel törlésre került." explain: why: "magyarázza el, miért került ez a tétel a sorba" - title: "Ellenőrizhető pontozás" + title: "Moderációs tételek pontozása" formula: "Képlet" subtotal: "Részösszeg" total: "Összesen" @@ -683,10 +749,10 @@ hu: title: "Azok a felhasználók, akik előzőleg egyetértettek a jelzéssel, bónuszt kapnak." trust_level_bonus: name: "bizalmi szint" - title: "A magasabb bizalmi szintű felhasználók által létrehozott felülvizsgálandó elemek magasabb pontszámmal rendelkeznek." + title: "A magasabb bizalmi szintű felhasználók jelentései magasabb pontszámot kapnak." type_bonus: name: "típusbónusz" - title: "Bizonyos felülvizsgálandó típusokat a stáb bónuszban részesíthet, hogy magasabb prioritást kapjanak." + title: "A személyzet bizonyos jelentéstípusokhoz bónuszpontokat rendelhet, hogy azok magasabb prioritást élvezzenek." revise_and_reject_post: title: "Felülvizsgálat" reason: "Ok" @@ -695,7 +761,7 @@ hu: custom_reason: "Adjon egyértelmű leírást az okáról" other_reason: "Egyéb…" optional: "nem kötelező" - stale_help: "Ezt a felülvizsgálandó elemet %{username} oldotta meg." + stale_help: "Ezt a tételt %{username} megoldotta." claim_help: optional: "Zárolhatja ezt az elemet, hogy mások ne hagyhassák jóvá." required: "Zárolnia kell az elemeket, hogy jóvá tudja őket hagyni." @@ -1619,6 +1685,9 @@ hu: undo_revoke_access: "Hozzáférés visszaállítása" api_approved: "Jóváhagyva:" api_last_used_at: "Utoljára használva:" + api_show_permissions: + one: "%{count} engedély megadva" + other: "%{count} engedély megadva" theme: "Téma" save_to_change_theme: 'A téma a „%{save_text}” gombra kattintás után frissül' home: "Alapértelmezett főoldal" @@ -1627,6 +1696,9 @@ hu: flags_given: one: '%{count} hasznos jelentés' other: '%{count} hasznos jelentés' + flags: + one: '%{count} jelentés' + other: '%{count} jelentés' deleted_posts: one: '%{count} törölt bejegyzés' other: '%{count} törölt bejegyzés' @@ -1736,6 +1808,10 @@ hu: apps: "Alkalmazások" navigation_menu: "Navigációs menü" upcoming_changes: "Közelgő változások" + calendar_subscriptions: "Naptár" + calendar_subscriptions: + copied: "Másolva!" + add_to_google: "Google Naptár" change_password: success: "(az e-mail elküldve)" in_progress: "(az e-mail küldése folyamatban)" @@ -2346,6 +2422,7 @@ hu: form_kit: reset: Alaphelyzetbe állítás optional: nem kötelező + required: kötelező errors_summary_title: one: "Hiba javítása a folytatáshoz" other: "Hibák javítása a folytatáshoz" @@ -2368,6 +2445,10 @@ hu: too_short: one: "Legalább %{count} karakteresnek kell lennie" other: "Legalább %{count} karakteresnek kell lennie" + color: + available_presets: "Elérhető színösszeállítások" + already_used: "Használatban" + edit_presets: "Színösszeállítás szerkesztése" close: "Bezárás" assets_changed_confirm: "Ez az oldal most kapott egy szoftverfrissítést. Beszerzi most a legújabb verziót?" logout: "Kijelentkezett." @@ -2414,6 +2495,7 @@ hu: } korlát túllépve. learn_more: "További információ…" learn_more_with_link: "További információ…" + feedback_with_link: "Visszajelzés…" mute: Némítás unmute: Némítás feloldása last_post: Közzétett @@ -2714,6 +2796,8 @@ hu: filter_for_more: További szűrés... categories_admin_dropdown: title: "Kategóriák kezelése" + tag_category_admin_dropdown: + edit_tag: "Címke szerkesztése" bulk_select_topics_dropdown: title: "Csoportos műveletek" bulk_select_bookmarks_dropdown: @@ -2744,6 +2828,8 @@ hu: medium_dark_tone: Közepesen sötét bőrszín dark_tone: Sötét bőrszín default: Egyéni emodzsik + filter_input: + clear: "Szűrő kiürítése" shared_drafts: title: "Megosztott vázlatok" notice: "Ez a téma csak azok számára látható, akik megosztott vázlatokat tehetnek közzé." @@ -2891,6 +2977,7 @@ hu: upload_description: "adja meg itt a feltöltés leírását" olist_title: "Számozott lista" ulist_title: "Pontozott lista" + list_title: "Listák" list_item: "Listaelem" toggle_direction: "Irány be/ki" apply_wrap_title: "Körbefogás alkalmazása" @@ -3062,9 +3149,13 @@ hu: available: title: "Közelgő változások" description: "'%{changeName}' előnézete megtekinthető." + description_two: "'%{changeName1}' és '%{changeName2}' megtekinthető előnézetben." + description_many: "'%{changeName}' és további %{otherChangeCount} módosítás megtekinthető előnézetben." automatically_promoted: title: "Közelgő változások" description: "'%{changeName}' automatikusan engedélyezve lett" + description_two: "'%{changeName1}' és '%{changeName2}' automatikusan engedélyezve lett." + description_many: "'%{changeName}' és további %{otherChangeCount} módosítás automatikusan engedélyezve lett." dismiss_confirmation: body: default: @@ -3123,8 +3214,8 @@ hu: votes_released: "a szavazat feloldásra került" new_features: "új Discourse funkciók jelentek meg" admin_problems: "új tanácsok a webhely irányítópultján" - upcoming_change_available: "új, közelgő változás, '%{changeName}' elérhető" - upcoming_change_automatically_promoted: "A közelgő '%{changeName}' változás automatikusan engedélyezve lett" + upcoming_change_available: "Új közelgő változások érhetőek el" + upcoming_change_automatically_promoted: "a közelgő változások automatikusan engedélyezve lettek" upload_selector: change: "Módosítás" delete: "Törlés" @@ -3261,8 +3352,6 @@ hu: max_views: placeholder: legfeljebb aria_label: szűrés a megtekintések legnagyobb száma szerint - additional_options: - label: "Szűrés bejegyzésszám és témamegtekintések szerint" hamburger_menu: "Navigációs menü" new_item: "új" go_back: "visszalépés" @@ -3317,6 +3406,7 @@ hu: deleted_post: "(törölt bejegyzés)" post_number_with_topic_title: "%{post_number}. bejegyzés – %{title}" new_post_in_topic: "új bejegyzés itt: %{title}" + new_post_in_deleted_topic: "új bejegyzés egy törölt témában" user_requires_approval: "%{username} jóváhagyása szükséges" default_item: "felülvizsgálandó elem: #%{reviewable_id}" topics: @@ -3326,11 +3416,8 @@ hu: confirm: "Megerősítés" select_all: "Összes kiválasztása" clear_all: "Összes törlése" - unlist_topics: "Témák listázásnak megszüntetése" - relist_topics: "Újralistázott témák" reset_bump_dates: "Előrehozási dátumok alaphelyzetbe állítása" defer: "Megjelölés olvasatlanként" - delete: "Témák törlése" delete_topics_count: one: "Téma törlése" other: "Témák törlése" @@ -3369,38 +3456,38 @@ hu: other: "Újak elvetése (%{count})" toggle: "témák csoportos kiválasztása be/ki" actions: "Csoportos műveletek" - change_category: "Kategória beállítása…" - close_topics: "Témák lezárása" - archive_topics: "Témák archiválása" move_messages_to_inbox: "Áthelyezés a bejövő üzenetek közé" archive_messages: "Áthelyezés az archívumba" - notification_level: "Értesítések…" change_notification_level: "Értesítési szint módosítása" choose_new_category: "Válassza ki az új kategóriát a témákhoz:" - selected: - one: "Kiválasztott %{count} témát." - other: "Kiválasztott %{count} témát." selected_sole_category: one: "%{count} témát választott ki a következő kategóriából:" other: "%{count} témát választott ki a következő kategóriából:" selected_count: one: "%{count} kiválasztva" other: "%{count} kiválasztva" - change_tags: "Címkék cseréje" - append_tags: "Címkék hozzáfűzése" + append_tags: "Címkék hozzáadása" choose_new_tags: "Válasszon új címkéket ezekhez a témákhoz:" - choose_append_tags: "Válasszon új hozzáfűzendő címkéket ezekhez a témákhoz:" + choose_append_tags: "Címkék hozzáadása" changed_tags: "Azon témák címkéi megváltoztak." - remove_tags: "Összes címke eltávolítása" confirm_remove_tags: one: "Az összes címke eltávolításra kerül erről a témáról. Biztos benne?" other: "Az összes címke eltávolításra kerül %{count} témáról. Biztos benne?" progress: one: "Folyamat: %{count} téma" other: "Folyamat: %{count} téma" - notify: "Értesítse a felhasználókat erről a változásról." + notify: "Értesítse a felhasználókat erről a változásról" performing: "Tömeges művelet végrehajtása, kis türelmet…" completed: "A tömeges műveletek sikeresen befejeződtek!" + completed_count: + one: "%{count} téma frissítve." + other: "%{count} téma frissítve." + not_completed: + one: "%{count} A téma frissítése sikertelen:" + other: "%{count} téma frissítése sikertelen:" + skipped_count: + one: "%{count} téma már naprakész volt." + other: "%{count} A téma már naprakész volt." error_topic_count: one: "%{count} téma" other: "%{count} téma" @@ -3427,7 +3514,6 @@ hu: name: "Elvetés" close_topics: name: "Lezárás" - note: "Megjegyzés" optional: (nem kötelező) archive_topics: name: "Archiválás" @@ -3441,30 +3527,25 @@ hu: name: "Felvétel a listára" remove_tags: name: "Címkék eltávolítása" - append_tags: - name: "Címkék hozzáfűzése" replace_tags: name: "Címkék cseréje" delete_topics: name: "Törlés" update_category: name: "Kategória frissítése" - description: "Válassza ki az új kategóriát a kiválasztott témákhoz" reset_bump_dates: name: "Előrehozási dátum alaphelyzetbe állítása" - description: "A téma előrehozási dátumának visszaállítása az utolsó bejegyzés dátumára, ami befolyásolja a témalista sorrendjét" defer: name: "Megjelölés olvasatlanként" - description: "Témák megjelölése olvasatlanként" update_notifications: name: "Értesítések frissítése" - description: "Az értesítési szint módosítása Figyelés, Nyomon követés, Normál vagy Néma szintre." topic: filter_to: one: "%{count} bejegyzés a témában" other: "%{count} bejegyzés a témában" create: "Új téma" create_long: "Új téma létrehozása" + create_group: "Új téma és vázlatok" open_draft: "Vázlat megnyitása" private_message: "Üzenet indítása" archive_message: @@ -4005,7 +4086,9 @@ hu: edit: "Szerkesztés" delete: "Törlés" add: "Új fordítás hozzáadása" - manage: "Fordítások kezelése (%{count} meglévő)" + manage: + one: "Fordítások kezelése (%{count} meglévő)" + other: "Fordítások kezelése (%{count} meglévő)" view: one: "%{count} fordítás megtekintése" other: "%{count} fordítás megtekintése" @@ -4143,6 +4226,7 @@ hu: one: "Biztos, hogy egyesíti ezeket a bejegyzéseket?" other: "Biztos, hogy egyesíti ezt a(z) %{count} bejegyzést?" revisions: + diff_too_complex: "A különbségek túl összetettek a megjelenítéshez. Kérjük, próbálja meg az egyes kisebb szerkesztéseket külön-külön megtekinteni." locale: no_locale_set: "Nincs beállítva nyelv" locale_removed: "Nyelv eltávolítva" @@ -4255,11 +4339,24 @@ hu: delete: "Törlés" add: "Szükséges címkecsoport hozzáadása" placeholder: "Címkecsoport kiválasztása…" + min_count: "Címkék száma" + tag_group: "Címkecsoport" topic_featured_link_allowed: "Kiemelt hivatkozások engedélyezése ebben a kategóriában" delete: "Kategória törlése" create: "Új kategória" + create_with_type: "Új %{typeName} kategória" create_long: "Új kategória létrehozása" + settings_apply_to_all_of_type_warning: "Az alábbi módosítások ezen típus összes kategóriájára érvényesek lesznek" + type_settings_schema: + category_settings: "Kategória beállítások" + category_custom_fields: "Kategória beállítások" + site_settings: "Webhely beállítások" + choose_type: + title: "Válasszon kategóriatípust" + requires_plugin: "Szükséges bővítmény" + create_category: "Kategória létrehozása" save: "Kategória mentése" + unsaved_changes: "Nem mentett módosításai vannak" slug: "Kategória URL-végződés" parent: "Szülő kategória" slug_placeholder: "(Nem kötelező) kötőjeles-szavak a webcímhez" @@ -4306,6 +4403,8 @@ hu: list: "Kategóriák felsorolása" no_description: "Adjon leírást ehhez a kategóriához." change_in_category_topic: "Leírás szerkesztése" + description_expand: "Több megjelenítése" + description_collapse: "Kevesebb megjelenítése" already_used: "Ezt a színt már egy másik kategória is használja." color_palette: "Színpaletta" security: "Biztonság" @@ -4316,9 +4415,15 @@ hu: reply: "Válasz" create: "Létrehozás" no_groups_selected: "Egyetlen csoport sem kapott hozzáférést; ez a kategória csak a stáb számára lesz látható." + everyone_full_access: 'Ez a kategória nyilvános: bárki láthatja, válaszolhat rá és bejegyzéseket is létrehozhat. A jogosultságok korlátozásához távolítson el egyet vagy többet a(z) „%{everyone_group}” csoportnak megadott engedélyek közül.' + everyone_reply_access: 'Ez a kategória nyilvános: mindenki láthatja a témákat és válaszolhat is rájuk. A jogosultságok korlátozásához távolítsa el a(z) „%{everyone_group}” csoportot.' + everyone_see_access: 'Ez a kategória nyilvános: mindenki láthatja a bejegyzéseket. A jogosultságok korlátozásához távolítsa el a(z) „%{everyone_group}” csoportot.' specific_groups_have_access: "Ez a kategória privát, csak a kiválasztott csoportok tagjai láthatják, válaszolhatnak rá és hozhatnak létre bejegyzéseket." + all_parent_groups_used: "A szülőkategória összes csoportja hozzáadásra került. További csoportok hozzáadásához először adja hozzá azokat a szülőkategóriához." toggle_reply: "Válasz engedély bekapcsolása" toggle_full: "Készítés engedély bekapcsolása" + inherited: 'Ez a jogosultság a(z) %{everyone_group} csoporttól öröklődik.' + special_warning: "Ez egy előre létrehozott kategória, és a biztonsági beállításai nem szerkeszthetők. Ha nem szeretné használni ezt a kategóriát, törölje ahelyett, hogy más célra használná fel." uncategorized_security_warning: "Ez a kategória különleges. Célja, hogy olyan témákat tartson meg, amelyeknek nincs kategóriája; nem rendelkezhet biztonsági beállításokkal." uncategorized_general_warning: 'Ez a kategória különleges. Alapértelmezett kategóriaként használatos az új témákhoz, amelyeknél nincs kategória kiválasztva. Ha meg akarja akadályozni ezt a viselkedést, és ki akarja kényszeríteni a kategória kiválasztását, kapcsolja ki a beállítást itt. Ha meg szeretné változtatni a nevet vagy a leírást, menjen a Testreszabás / Szövegtartalom menüpontba.' pending_permission_change_alert: "Még nem adta hozzá a %{group} címet ehhez a kategóriához; katt ide a hozzáadáshoz." @@ -4345,6 +4450,10 @@ hu: review_group_name: "csoport neve" require_topic_approval: "Minden új téma moderátori jóváhagyása szükséges" require_reply_approval: "Minden új válasz moderátori jóváhagyása szükséges" + posting_review_modes: + no_one: "Senki" + everyone: "Mindenki" + posting_review_groups_placeholder: "Csoportok kiválasztása..." this_year: "ez az év" position: "Kategóriák oldalon elfoglalt pozíció:" default_position: "Alapértelmezett pozíció" @@ -4361,6 +4470,9 @@ hu: group_restricted: "Privát" who_can_see: "Ki láthatja ezt a kategóriát" who_can_post: "Kik posztolhatnak ebben a kategóriában" + which_groups_can_access: "Csoportok, amelyek láthatják ezt a kategóriát és bejegyzéseket küldhetnek bele." + more_options_hint: "További jogosultságok érhetők el a haladó beállításokban." + inherited_from_parent: "A jogosultságok a szülőkategóriától öröklődnek. A finomhangoláshoz keresse fel a haladó beállításokat." num_auto_bump_daily: "A naponta automatikusan előrehozandó nyitott témák száma:" auto_bump_cooldown_days: "Minimum napok száma, mielőtt újra feldobná ugyanazt a témát:" navigate_to_first_post_after_read: "A témák elolvasása után navigáljon az első hozzászóláshoz" @@ -4878,13 +4990,19 @@ hu: category_restricted: "Ez a címke olyan kategóriákra korlátozódik, amelyekhez nincs hozzáférési jogosultsága." synonyms: "Szinonimák" synonyms_description: "A következő címkék használatakor ezek helyére %{base_tag_name}kerül." + synonyms_inline: "Ezek a szinonimák a következőre lesznek lecserélve: %{base_tag_name}:" save: "Címke nevének és leírásának mentése" tag_groups_info: one: 'Ez a címke a "%{tag_groups}" csoportba tartozik.' other: "Ez a címke a következő csoportokhoz tartozik: %{tag_groups}." + tag_groups_info_prefix: + one: "Ez a címke a következő csoporthoz tartozik: " + other: "Ez a címke a következő csoportokhoz tartozik: " category_restrictions: one: "Csak ebben a kategóriában használható" other: "Csak ezekben a kategóriákban használható:" + restricted_to: "Korlátozva a következőre:" + no_synonyms: "Ennek a címkének nincsenek szinonimái." edit_synonyms: "Szinonimák szerkesztése" add_synonyms_label: "Szinonimák hozzáadása:" add_synonyms: "Hozzáadás" @@ -4904,7 +5022,34 @@ hu: other: "%{count} szinonimája is törlésre kerül." edit_tag: "Címke nevének és leírásának szerkesztése" edit: "Címke szerkesztése" - description: "Leírás (max. 1000 karakter)" + description: "Leírás" + settings: + title: "Beállítások" + edit_title: "Címke szerkesztése: %{name}" + edit_tag_prefix: "Címke szerkesztése:" + select_tag: "Válasszon ki egy címkét a szerkesztéshez" + general: "Általános" + localizations: "Lokalizációk" + back: "Vissza" + name: "Név" + slug: "URL slug" + name_placeholder: "Címke neve" + slug_placeholder: "Címke slug (opcionális, a névből automatikusan generálódik)" + saved: "Címkebeállítások mentve" + no_synonyms: "Ehhez a címkéhez nincsenek szinonimák megadva." + add_synonym_placeholder: "Címkék keresése szinonimaként való hozzáadáshoz..." + synonyms_subtitle: "A következő címkék használatakor ezek helyére %{name}kerül" + save: "Címke mentése" + delete: "Címke törlése" + synonyms_hint: "A fenti címkék használatakor le lesznek cserélve a következőre: %{baseTagName}." + add_synonyms_confirm: "Mindenhol, ahol jelenleg a(z) %{synonymNames} van használatban, a(z) %{tagName} lesz használva helyette. Biztosan végrehajtja ezt a módosítást?" + localization: + hint: "Lokalizációk hozzáadása, hogy a különböző nyelvű felhasználók számára eltérő címkenevek jelenjenek meg." + locale: "Nyelv" + name: "Név" + description: "Leírás" + add: "Lokalizáció hozzáadása" + remove: "Lokalizáció eltávolítása" sort_by: "Rendezés" sort_by_count: "besorol" sort_by_name: "név" @@ -5415,12 +5560,14 @@ hu: toggle_localized: translated: "Az oldal gépi fordítású. Kattintson az eredeti megtekintéséhez." not_translated: "Az oldal nincs lefordítva. Kattintson a fordításhoz." + translations_enabled: "Fordítások engedélyezve" + translations_disabled: "Fordítások letiltva" language_switcher: title: "Oldal nyelvének módosítása" admin_js: type_to_filter: "Írj ide a szűréshez.." settings: "Beállítások" - reset_filter: "Alaphelyzetbe állítás" + reset_filter: "Szűrő visszaállítása" toggle_filters: "Legördülő szűrők be- és kikapcsolása" admin: title: "Discourse Adminisztrátor" @@ -5434,9 +5581,14 @@ hu: never: "soha" reports: title: "Aktív bejelentések listája" - meta_doc: "A jelentések egy hatékony eszköz, amely segít megérteni, mi történik a webhelyén. Segítségükkel azonosíthatja a trendeket, felismerheti a problémákat, és adatok alapján hozhat döntéseket." sidebar_title: "Jelentések" back: "Vissza az összes jelentéshez" + group_engagement: "Elköteleződés" + group_traffic: "Forgalom" + group_members: "Tagok" + group_content: "Tartalom és egészség" + group_other: "Egyéb" + legacy_warning: "Ez egy korábbi jelentés. Hamarosan megszűnik. Ha segítségre van szüksége a helyettesítő megtalálásához, vegye fel a kapcsolatot az ügyfélszolgálattal." config_sections: account: title: "Fiók" @@ -5468,6 +5620,7 @@ hu: no_changes_to_save: "Nincsenek menthető módosítások" select_groups: "Csoportok kiválasztása…" opt_in_groups: "Feliratkozási csoportok" + show_related_settings: "Kapcsolódó beállítások megjelenítése..." opt_in_groups_instructions: "A feliratkozási csoportok segítségével lehetővé tehető, hogy egy adott felhasználói csoport tesztelje a módosítást, mielőtt az mindenki számára elérhetővé válna. Fontos megjegyezni, hogy ezek a csoportok elveszítik a relevanciájukat, miután a módosítás stabil állapotba kerül." enabled_for_throttle: "Túl gyorsan módosítottad, hogy kikre vonatkozik ez a módosítás. Kérjük, várj néhány másodpercet, mielőtt újra próbálkozol." change_enabled_for_success: "Engedélyezted ezt a módosítást a(z) %{enabledFor} számára" @@ -5480,7 +5633,7 @@ hu: enabled_for_options: no_one: "Senki" everyone: "Mindenki" - staff: "Csak a stáb" + staff: "csak %{staffGroupName}" specific_groups: "Meghatározott csoport(ok)" specific_groups_with_group_names: one: "a %{groupNames} csoport" @@ -5503,7 +5656,7 @@ hu: all: "Összes" enabled_all: "Minden engedélyezett állapot" enabled: "Bekapcsolva" - enabled_for_staff: "Engedélyezve a személyzet számára" + enabled_for_staff: "Engedélyezve a(z) %{staffGroupName} csoportnak" enabled_for_specific_groups: "Engedélyezve bizonyos csoportok számára" disabled: "Kikapcsolva" impact_type_all: "Minden ütközési típus" @@ -5554,6 +5707,7 @@ hu: keywords: "\nhely|területi beállítás|nyelv|időzóna|unicode|ltr" upcoming_changes: title: "Közelgő változások" + header_description: "A Gemini ezt mondta:\nA Discourse közelgő változásainak listája, amelyek érinthetik az oldalát, valamint kísérleti funkciók, amelyek használatára feliratkozhat. Szűrhet hatás, típus és állapot alapján.\n\nA feliratkozási csoportok lehetővé teszik, hogy a felhasználók egy bizonyos csoportja teszteljen egy változtatást, mielőtt az mindenki számára elérhetővé válna, bár ezek a csoportok irrelevánssá válnak, amint egy változtatás Állandó állapotba lép." login: title: "Bejelentkezés és hitelesítés" header_description: "Konfigurálja a felhasználók bejelentkezési és hitelesítési módját, a titkokat és kulcsokat, az OAuth2-szolgáltatókat stb" @@ -5592,7 +5746,7 @@ hu: help_text: "Az ajánlott méret 600×80 képpont." large_icon: title: "Négyzet alakú ikon" - description: "A logó képének négyzetes változata az adminisztráció tetején jelenik meg, és egyben a mobil kezdőképernyőjének logója is." + description: "A logókép négyzet alakú változata az oldal tetején jelenik meg, és egyben a mobilalkalmazás logója is." help_text: "Az ajánlott méret 512×512 képpont." square_icon_dark: required: "Másik négyzet ikon használata a sötét módhoz?" @@ -5780,7 +5934,7 @@ hu: header_description: "A jelentések egy hatékony eszköz, amely segít megérteni, mi történik a webhelyén. Segítségükkel azonosíthatja a trendeket, felismerheti a problémákat, és adatok alapján hozhat döntéseket." sub_pages: settings: - title: "Irányítópult beállításai" + title: "Beállítások" badges: title: "Jelvények" header_description: "A jelvények jutalmazzák a felhasználókat tevékenységeikért, hozzájárulásaikért és eredményeikért, amelyek célja a közösségen belüli pozitív magatartás és elkötelezettség elismerése, érvényesítése és ösztönzése" @@ -5913,6 +6067,9 @@ hu: embedding: title: "Beágyazás" header_description: "A Discourse képes beágyazni egy téma hozzászólásait egy távoli webhelyre egy Javascript API segítségével, amely létrehoz egy IFRAME-t." + form_templates: + title: "Űrlapsablonok" + header_description: "Az űrlapsablonok lehetővé teszik egy strukturált, adatellenőrzéssel ellátott űrlap megkövetelését a témalétrehozási folyamat részeként." theme_site_settings: setting: "Beállítás" overridden_by: "Felülírta" @@ -5933,22 +6090,6 @@ hu: result_count: one: '%{count} eredmény a(z) „%{filter}” kifejezésre' other: '%{count} találat a(z) „%{filter}” kifejezésre' - result_types: - page: - one: "Oldal" - other: "Oldalak" - report: - one: "Jelentés" - other: "Jelentések" - setting: - one: "Beállítás" - other: "Beállítások" - theme: - one: "Téma" - other: "Témák" - component: - one: "Összetevő" - other: "Összetevők" new_features: title: "Újdonságok" check_for_updates: "Frissítések keresése" @@ -5960,7 +6101,7 @@ hu: up_to_date: "A rendszer naprakész!" critical_available: "Egy fontos frissítés érhető el!" updates_available: "Frissítések érhetőek el!" - please_update: "Kérünk frissíts!" + please_update: "Kérjük, frissítsd!" no_check_performed: "A frissítések ellenőrzése nem történt meg. Győződjön meg arról, hogy a Sidekiq fut." stale_data: "Rég nem volt ellenőrizve hogy van-e új frissítés. Győződjön meg arról hogy a sidekiq fut." version_check_pending: "Úgy nézik nem rég frissítettél. Fantasztikus!" @@ -5971,25 +6112,9 @@ hu: new_features: title: "Újdonságok?" subtitle: "Folyamatosan új funkciókat és fejlesztéseket adunk ki. Ez az oldal a legfontosabbakat tartalmazza, de a 'Tudjon meg többet' gombra kattintva részletes kiadási jegyzeteket is megtekinthet." + no_new_features_found: "Nincsenek elemek a hírfolyamban, vagy a választott szűrő nem hozott eredményt. A korábbi új funkciókkal kapcsolatos bejelentéseket a Discourse Meta közösségében tekintheti meg." no_new_features_error: "Hiba történt a hírfolyam betöltésekor. A korábbi új funkciókkal kapcsolatos bejelentéseket a Discourse Meta közösségoldalán tekintheti meg." learn_more: "Tudjon meg többet..." - experimental: "Kísérleti" - only_experiments: "Csak kísérleti funkciók megjelenítése" - experiment_enabled: "Engedélyezte a kísérleti funkciót." - experiment_disabled: "Letiltotta a kísérleti funkciót." - feature_enabled: "Engedélyezted a funkciót." - feature_disabled: "Letiltottad a funkciót." - toggled_too_fast: "Túl gyorsan kapcsoltad a kapcsolót. Várj néhány másodpercet, mielőtt újra próbálkozol." - experiment_tooltip: - title_disabled: "Próbálja ki ezt a kísérleti funkciót" - title_enabled: "Kísérleti funkció kikapcsolása" - content_disabled: "Próbálja ki legújabb fejlesztés alatt álló funkciónkat! Még kísérleti stádiumban van, így bármikor eltávolíthatjuk. Bármikor leiratkozhat.

Ennek a módosítása minden felhasználó számára engedélyezi a funkciót." - content_enabled: "Ennek módosítása letiltja a funkciót minden felhasználó számára." - feature_tooltip: - title_disabled: "Próbálja ki ezt a funkciót" - title_enabled: "Kapcsolja ki a funkciót" - content_disabled: "Próbálja ki ezt az új funkciót! Bármikor leiratkozhat.

Megváltoztatása esetén a funkció minden felhasználó számára engedélyezve lesz." - content_enabled: "Ennek módosítása letiltja a funkciót minden felhasználó számára." last_checked: "Utoljára ellenőrizve" refresh_problems: "Újratöltés" no_problems: "Nem találtunk semmilyen problémát." @@ -6052,7 +6177,7 @@ hu: all: "Mind" view_table: "asztal" view_graph: "Grafikon" - refresh_report: "Jelentés frissítése" + refresh_report: "Újratöltés" daily: Napi monthly: Havi weekly: Heti @@ -6175,6 +6300,7 @@ hu: cancel: "Mégse" continue: "Folytatás" copy_key: "Másolás" + key_copied_to_clipboard: "API-kulcs a vágólapra másolva" back: "Vissza az API-kulcsokhoz" revoke: "Visszavonás" undo_revoke: "Visszavonás visszavonása" @@ -6816,6 +6942,8 @@ hu: delete: "Törlés" delete_confirm: 'Biztosan törli a "%{theme_name}" elemet?' bulk_delete: "Biztos benne?" + bulk_themes_delete_confirm: "Ezzel eltávolítja a következő témákat, így azokat az oldal egyetlen felhasználója sem használhatja többé:" + bulk_components_delete_confirm: "Ezzel eltávolítja a következő összetevőket, így azokat az oldal egyetlen felhasználója sem használhatja többé:" color: "Szín" opacity: "Áttetszőség" copy: "Megkettőz" @@ -6957,7 +7085,6 @@ hu: import_web_tip: "Témát tartalmazó tároló" direct_install_tip: "Biztos, hogy telepíteni akarja a %{name} témát az alább felsorolt tárolóból?" import_web_advanced: "Speciális…" - import_file_tip: ".tar.gz, .zip vagy .dcstyle.json fájl, amely témát tartalmaz" is_private: "A téma egy privát git tárolóban van" finish_install: "Téma telepítésének befejezése" last_attempt: "A telepítési folyamat nem fejeződött be, utolsó próbálkozás:" @@ -7437,6 +7564,7 @@ hu: upcoming_change_available: "közelgő változás elérhető" change_site_setting_groups: "webhelybeállítási csoportok módosítása" discourse_id_regenerate_credentials: "Discourse ID hitelesítő adatok újragenerálása" + configure_category_type: "kategóriatípus konfigurálása" screened_emails: title: "Szűrt e-mailek" description: "Amikor valaki új fiókot próbál létrehozni, a következő e-mail címeket ellenőrzi, és a regisztrációt blokkolja, vagy más műveletet hajt végre." @@ -8040,6 +8168,7 @@ hu: field_types: text: "Szöveg" textarea: "Szövegmező" + date: "Dátum" confirm: "Megerősítés" dropdown: "Legördülő menü" multiselect: "Többszörös kiválasztás" @@ -8060,6 +8189,9 @@ hu: more_than_50_results: "Több mint 50 találat van. Kérlek finomíts a keresésen." no_results: "Nem található egyező szöveg" interpolation_keys: "Elérhető interpolációs kulcsok:" + interpolation_key_insert: "Kattintson a beszúráshoz" + interpolation_key_used: "Használatban" + interpolation_key_invalid: "Ismeretlen kulcs — nem lesz interpolálva" outdated: title: "Ez a fordítás elavult" description: "A kulcs alapértelmezett fordítása megváltozott a felülbírálás létrehozása óta. Kérlek, ellenőrizd az alábbiakban, hogy a fordítás megfelel-e az eredeti szándékhoz képest végrehajtott változtatásoknak." @@ -8178,7 +8310,7 @@ hu: min_admin_password_length: prompt: "Arra készülsz, hogy módosítsd a jelszóirányelveidet. Ez mostantól minden adminisztrátort érinteni fog, aki megváltoztatja a jelszavát. Biztosan folytatod?" confirm: "Igen, frissítem a jelszószabályzatot" - password_unique_charactes: + password_unique_characters: prompt: "Arra készülsz, hogy módosítsd a jelszóirányelveidet. Ez mostantól minden olyan felhasználót érint, aki megváltoztatja a jelszavát. Biztosan folytatni szeretnéd?" confirm: "Igen, frissítem a jelszószabályzatot" block_common_passwords: @@ -8223,6 +8355,8 @@ hu: no_user_badges: "%{name} még nem kapott jelvényt." no_badges: Nincsenek adományozható jelvények. none_selected: "A kezdéshez válasszon egy jelvényt" + filter_placeholder: "Jelvények szűrése..." + no_badges_found: "Nincsenek jelvények" sections: design: Dizájn query: Lekérdezés diff --git a/config/locales/client.hy.yml b/config/locales/client.hy.yml index a39b10d2bb259..a316d9921c3f3 100644 --- a/config/locales/client.hy.yml +++ b/config/locales/client.hy.yml @@ -6,6 +6,11 @@ hy: js: + blocks: + ghost: + status: "Ստատուս" + hidden: "թաքցված" + failed: "ձախողված" number: format: separator: "." @@ -292,6 +297,8 @@ hy: pill: "Առաջարկվում է" pm_title: "Առաջարկվող Հաղորդագրություններ" admin_onboarding_banner: + start_posting: + back: "Ետ" spread_the_word: action: "Պատճենել հղումը" about: @@ -375,8 +382,6 @@ hy: other: "Ստեղծվել է %{count} տարի առաջ" bookmarked: title: "Էջանշել" - edit_bookmark: "Խմբագրել Էջանիշը" - clear_bookmarks: "Ջնջել Էջանշանները" help: bookmark: "Սեղմեք այս թեման էջանշելու համար" edit_bookmark: "Սեղմեք՝ այս թեմայի գրառման էջանիշը խմբագրելու համար" @@ -393,12 +398,12 @@ hy: create: "Ստեղծել էջանշան" edit: "Խմբագրել էջանշանը" not_bookmarked: "Էջանշել այս գրառումը" + topic_bookmark: "Թեմա" remove_reminder_keep_bookmark: "Հեռացնել հիշեցումը և պահել էջանիշը" created_with_reminder: "Դուք էջանշել եք այս գրառումը %{date} %{name} հիշեցմամբ" created_with_reminder_generic: "Դուք էջանշել եք սա %{date} %{name} հիշեցմամբ" delete: "Ջնջել Էջանշանը" confirm_delete: "Դուք համոզվա՞ծ եք, որ ցանկանում եք ջնջել այս էջանշանը: Բոլոր կապակցված հիշեցումները կջնջվեն: " - confirm_clear: "Դուք համոզվա՞ծ եք, որ ցանկանում եք հեռացնել այս թեմայի բոլոր էջանշանները:" save: "Պահպանել" no_timezone: 'Դուք դեռ չեք նշել ձեր ժամային գոտին: Դուք չեք կարողանա հիշեցումներ անել: Տեղադրեք ձեր պրոֆիլում:' invalid_custom_datetime: "Ամսաթիվը և ժամանակը ճիշտ չէ նշված, կրկին փորձեք:" @@ -516,7 +521,6 @@ hy: in_reply_to: "ի պատասխան" explain: why: "Բացատրել, թե ինչու՞ է այդ էլեմենտը հայտնվել հերթի մեջ: " - title: "Ամփոփիչ Գնահատական" formula: "Բանաձև" subtotal: "Միջանկյալ հանրագումար " total: "Ամբողջը" @@ -530,10 +534,8 @@ hy: title: "Օգտատերերը, ում գրավոր բողոքները համաձայնեցված են՝ կստանան բոնուս: " trust_level_bonus: name: "վստահության մակարդակ" - title: "Օգտատրիրոջ վստահության առավել մեծ մակարդակ ունենալու դեպքում, ստուգվող էլեմենտները ստանում են ավելի բարձր բալ: " type_bonus: name: "բոնուսի տեսակը" - title: "Որոշ ստուգվող տեսակների դեպքում, աշխատակիցներին կարող են բոնուս նշանակվել, որպեսզի նրանք գերակայության հասնեն: " revise_and_reject_post: title: "Վերանայել" reason: "Պատճառ" @@ -542,7 +544,6 @@ hy: custom_reason: "Տվեք պատճառի հստակ նկարագրությունը" other_reason: "Այլ..." optional: "ընտրովի" - stale_help: "Այս վերանայումը լուծվել է %{username}- ի կողմից:" claim_help: optional: "Դուք կարող եք պահանջել այդ էլեմենտը, որպեսզի ուրիշները չկարողանան այն դիտել: " required: "Դուք պետք է նախ՝ հայտ ներկայացնեք, որպեսզի կարողանաք այն դիտեք: " @@ -1439,6 +1440,8 @@ hy: tags: "Պիտակներ" interface: "Ինտերֆեյս" apps: "Հավելվածներ" + calendar_subscriptions: + copied: "Պատճենված է!" change_password: success: "(էլ. նամակն ուղարկված է)" in_progress: "(էլ. նամակն ուղարկվում է)" @@ -1968,6 +1971,7 @@ hy: form_kit: reset: Զրոյացնել optional: ընտրովի + required: պարտադիր է errors: required: "Պարտադիր" too_short: @@ -2519,8 +2523,6 @@ hy: max_views: placeholder: առավելագույնը aria_label: զտել ըստ առավելագույն դիտումների - additional_options: - label: "Զտել ըստ գրառումների քանակի և թեմայի դիտումների" new_item: "նոր" go_back: "ետ գնալ" not_logged_in_user: "օգտատիրոջ էջը՝ ընթացիկ ակտիվության և նախընտրությունների ամփոփումով" @@ -2538,9 +2540,6 @@ hy: confirm: "Հաստատել" select_all: "Ընտրել Բոլորը" clear_all: "Ջնջել Բոլորը" - unlist_topics: "Թեմաները Ցուցակից Հանել" - relist_topics: "Վերացանկավորել Թեմաները" - delete: "Ջնջել Թեմաները" delete_topics_count: one: "Ջնջել Թեման" other: "Ջնջել Թեմաները" @@ -2552,20 +2551,12 @@ hy: dismiss_new: "Չեղարկել Նորերը" toggle: "փոխանջատել թեմաների զանգվածային ընտրությունը" actions: "Զանգվածային Գործողությունները" - close_topics: "Փակել Թեմաները" - archive_topics: "Արխիվացնել Թեմաները" move_messages_to_inbox: "Տեղափոխել Մուտքային" choose_new_category: "Ընտրել նոր կատեգորիա թեմաների համար՝" - selected: - one: "Դուք ընտրել եք %{count} թեմա:" - other: "Դուք ընտրել եք %{count} թեմա:" selected_count: one: "%{count} ընտրված" other: "%{count} ընտրված" - change_tags: "Փոխարինել Պիտակները" - append_tags: "Ավելացնել Պիտակներ" choose_new_tags: "Ընտրել նոր պիտակներ այս թեմաների համար՝" - choose_append_tags: "Ընտրել նոր պիտակներ այս թեմաներին ավելացնելու համար՝" changed_tags: "Այդ թեմաների պիտակները փոփոխվել են:" error_topic_count: one: "%{count} թեմա" @@ -2592,8 +2583,6 @@ hy: name: "Տեղափոխել Մուտքային" unlist_topics: name: "Ցուցակից հանել" - append_tags: - name: "Ավելացնել Պիտակներ" replace_tags: name: "Փոխարինել Պիտակները" delete_topics: @@ -3164,6 +3153,8 @@ hy: delete_confirm: "Դուք համոզվա՞ծ եք, որ ցանկանում եք ջնջել այս կատեգորիան:" delete_error: "Այս կատեգորիան ջնջելիս սխալ է տեղի ունեցել:" no_description: "Խնդրում ենք այս կատեգորիայի համար ավելացնել նկարագրություն:" + description_expand: "Ցույց տալ ավելին" + description_collapse: "Ցույց տալ ավելի քիչ" already_used: "Այս գույնը օգտագործվել է մեկ այլ կատեգորիայի կողմից" security: "Անվտանգություն" permissions: @@ -3188,6 +3179,8 @@ hy: review_group_name: "խմբի անունը" require_topic_approval: "Բոլոր նոր թեմաների համար պահանջել մոդերատորի հաստատումը" require_reply_approval: "Բոլոր նոր պատասխանների համար պահանջել մոդերատորի հաստատումը " + posting_review_modes: + everyone: "Բոլորը" this_year: "այս տարի" position: "Դիրքը կատեգորիայի էջում." minimum_required_tags: "Թեմայում պահանջվող պիտակների նվազագույն քանակը՝" @@ -3579,6 +3572,15 @@ hy: one: "Դուք համոզվա՞ծ եք, որ ցանկանում եք ջնջել այս թեգը և հեռացնել այն %{count} թեմայից, որին այն վերագրված է:" other: "Իսկապե՞ս ուզում եք ջնջել այս պիտակը և հեռացնել այն %{count} թեմայից, որոնց այն վերագրված է:" delete_confirm_no_topics: "Դուք համոզվա՞ծ եք, որ ցանկանում եք ջնջել այս պիտակը:" + description: "Նկարագրություն" + settings: + title: "Կարգավորումներ" + general: "Ընդհանուր" + back: "Ետ" + name: "Անուն" + localization: + name: "Անուն" + description: "Նկարագրություն" sort_by: "Դասավորել ըստ՝ " sort_by_count: "քանակի" sort_by_name: "անվան" @@ -3787,7 +3789,6 @@ hy: categories: "Բոլոր կատեգորիաները" admin_js: settings: "Կարգավորումներ" - reset_filter: "Վերահաստատե;" admin: title: "Discourse Ադմին" moderator: "Մոդերատոր" @@ -3800,6 +3801,9 @@ hy: reports: title: "Հասանելի հաշվետվությունների ցանկը" sidebar_title: "Հաշվետվություններ" + group_traffic: "Այցելությունները" + group_members: "Անդամներ" + group_other: "Այլ" config_sections: account: title: "Հաշիվ" @@ -3886,6 +3890,9 @@ hy: title: "Գրառումներ" reports: title: "Հաշվետվություններ" + sub_pages: + settings: + title: "Կարգավորումներ" badges: title: "Կրծքանշաններ" permalinks: @@ -3928,13 +3935,6 @@ hy: default_value: "Լռելյայն" search: title: "Որոնում" - result_types: - theme: - one: "Թեմա" - other: "Թեմաներ" - component: - one: "Բաղադրիչ" - other: "Բաղադրիչներ" dashboard: title: "Կառավարման Հարթակ" last_updated: "Կառավարման Հարթակի վերջին թարմացումը՝" @@ -4001,7 +4001,7 @@ hy: all: "Ամբողջը" view_table: "աղյուսակ" view_graph: "գրաֆիկ" - refresh_report: "Թարմացնել Հաշվետվությունը" + refresh_report: "Թարմացնել" daily: Օրվա Ընթացքում monthly: Ամսվա Ընթացքում weekly: Շաբաթվա Ընթացքում @@ -4467,7 +4467,6 @@ hy: included_components: "Ներառված բաղադրիչներ" add_all: "Ավելացնել բոլորը " import_web_tip: "Թեմա պարունակող ռեպոզիտորիա" - import_file_tip: ".tar.gz, .zip, կամ .dcstyle.json ֆայլ, պարունակող թեման" is_private: "Թեման մասնավոր git ռեպոզիտորիայում է:" remote_branch: "Ճյուղի անունը (ըստ ցանկության)" public_key: "Շնորհել հետևյալ public key թույլտվություն ռեպոյին՝ " @@ -5086,6 +5085,7 @@ hy: title: "Ընտրովի" field_types: text: "Տեքստ" + date: "Ամսաթիվ" confirm: "Հաստատում" dropdown: "Բացվող Ցուցակ" site_text: diff --git a/config/locales/client.id.yml b/config/locales/client.id.yml index 458b55f7af7a5..cdd8081351196 100644 --- a/config/locales/client.id.yml +++ b/config/locales/client.id.yml @@ -6,6 +6,10 @@ id: js: + blocks: + ghost: + status: "Status" + failed: "gagal" number: format: separator: "," @@ -250,6 +254,8 @@ id: pill: "Disarankan" pm_title: "Pesan Yang Disarankan" admin_onboarding_banner: + start_posting: + back: "Kembali" spread_the_word: copied_to_clipboard: "Tautan disalin ke papan klip!" about: @@ -283,8 +289,6 @@ id: other: "%{formatted_number} Anggota" bookmarked: title: "Penandaan" - edit_bookmark: "Edit Bookmark" - clear_bookmarks: "Bersihkan Penandaan" help: bookmark: "Klik untuk bookmark topik ini" edit_bookmark: "Klik untuk mengedit bookmark pada post di topik ini" @@ -297,12 +301,12 @@ id: create: "Buat penanda" edit: "Sunting penanda" not_bookmarked: "tandai pos ini" + topic_bookmark: "Topik" remove_reminder_keep_bookmark: "Hapus pengingat dan simpan penanda" created_with_reminder: "Anda telah menandai kiriman ini dengan pengingat %{date}. %{name}" created_with_reminder_generic: "Anda telah menandai kiriman ini dengan pengingat %{date}. %{name}" delete: "Hapus Bookmark" confirm_delete: "Yakin ingin menghapus penanda ini? Pengingat juga akan dihapus." - confirm_clear: "Yakin ingin menghapus semua penandaan Anda dari topik ini?" save: "Simpan" no_timezone: 'Anda belum menetapkan zona waktu. Anda tidak akan dapat mengatur pengingat. Tetapkan satu di profil Anda .' invalid_custom_datetime: "Tanggal dan waktu yang Anda berikan tidak valid, silakan coba lagi." @@ -407,7 +411,6 @@ id: in_reply_to: "sebagai balasan" explain: why: "jelaskan mengapa butir ini berada dalam antrian" - title: "Penilaian yang Dapat Ditinjau" formula: "Rumus" subtotal: "Subtotal" total: "Total" @@ -421,10 +424,8 @@ id: title: "Pengguna yang sebelumnya telah disteujui untuk mendapatkan benderanya, diberikan bonus." trust_level_bonus: name: "tingkat kepercayaan" - title: "Butir yang dapat ditinjau dibuat oleh pengguna dengan tingkat kepercayaan yang lebih tinggi akan memiliki skor yang lebih tinggi." type_bonus: name: "jenis bonus" - title: "Jenis tertentu yang dapat ditinjau akan diberikan bonus oleh staf untuk menjadikannya prioritas yang lebih tinggi." revise_and_reject_post: title: "Merevisi" reason: "Alasan" @@ -432,7 +433,6 @@ id: feedback: "Umpan balik" other_reason: "Lainnya..." optional: "opsional" - stale_help: "Butir tinjauan ini telah diselesaikan oleh %{username}." claim_help: optional: "Anda dapat mengklaim item ini untuk mencegah orang lain meninjaunya." required: "Anda harus mengklaim hal ini sebelum dapat meninjaunya." @@ -1155,6 +1155,8 @@ id: tags: "Label" interface: "Antarmuka" apps: "Aplikasi" + calendar_subscriptions: + copied: "Disalin!" change_password: success: "(surel terkirim)" in_progress: "(mengirimkan surel)" @@ -1968,11 +1970,15 @@ id: description: "Deskripsi" color_validations: cant_be_empty: "tidak boleh kosong" + description_expand: "Tampilkan lebih banyak" + description_collapse: "Tampilkan lebih sedikit" permissions: reply: "Balas" create: "Buat" email_in_tooltip: "Anda dapat memisahkan beberapa alamat email dengan karakter |." review_group_name: "nama grup" + posting_review_modes: + everyone: "Semua orang" none_subcategory_text: "Tidak ada" visibility: public: "Umum" @@ -2135,7 +2141,15 @@ id: selector_remove_filter: "hapus filter" tags: "Label" add_synonyms: "Menambahkan" - description: "Deskripsi (maks 1000 karakter)" + description: "Deskripsi" + settings: + title: "Pengaturan" + general: "Umum" + back: "Kembali" + name: "Nama" + localization: + name: "Nama" + description: "Deskripsi" sort_by_count: "menghitung" sort_by_name: "nama" bulk_create_button: "Buat" @@ -2306,7 +2320,6 @@ id: categories: "Semua kategori" admin_js: settings: "Pengaturan" - reset_filter: "Reset" admin: title: "Admin Discourse" moderator: "Moderator" @@ -2315,6 +2328,9 @@ id: remove_muted_tags_from_latest: always: "selalu" never: "tidak pernah" + reports: + group_members: "Anggota" + group_other: "Lainnya" config_sections: account: title: "Akun" @@ -2325,7 +2341,6 @@ id: enabled: "Diaktifkan" enabled_for_options: everyone: "Semua orang" - staff: "Hanya staf" impact_roles: moderators: "Moderator" staff: "Staf" @@ -2371,6 +2386,10 @@ id: sub_pages: logs: title: "Log" + reports: + sub_pages: + settings: + title: "Pengaturan" email_logs: sub_pages: sent: @@ -2383,9 +2402,6 @@ id: default_value: "Asal" search: title: "Cari" - result_types: - setting: - other: "Pengaturan" dashboard: please_update: "Harap perbarui!" version_check_pending: "Sepertinya Anda baru saja melakukan pembaruan. Fantastis!" @@ -2408,6 +2424,7 @@ id: 7_days_ago: "7 Hari Lalu" 30_days_ago: "30 Hari Lalu" all: "Semua" + refresh_report: "Segarkan" trending_search: disabled: 'Laporan pencarian sedang tren dinonaktifkan. Aktifkan kueri penelusuran log untuk mengumpulkan data.' sort_button: "Urutkan berdasarkan %{column}" @@ -2846,6 +2863,8 @@ id: title: "Saat mendaftar" description: "Saat pengguna baru mendaftar, mereka harus mengisi kolom ini. Pengguna yang sudah ada tidak terpengaruh." confirmation: "Ini akan meminta pengguna yang ada untuk mengisi kolom ini dan tidak akan mengizinkan mereka melakukan hal lain di situs Anda hingga kolom tersebut terisi. Lanjutkan?" + field_types: + date: "Tanggal" site_text: edit: "Ubah" show_outdated: "Hanya tampilkan yang usang/tidak valid" diff --git a/config/locales/client.it.yml b/config/locales/client.it.yml index d0c8bd76f0323..5667f5e057f07 100644 --- a/config/locales/client.it.yml +++ b/config/locales/client.it.yml @@ -6,6 +6,12 @@ it: js: + blocks: + ghost: + status: "Stato" + in_location: "in" + hidden: "nascosto" + failed: "non riuscito" number: format: separator: "," @@ -401,6 +407,8 @@ it: pill: "Suggeriti" pm_title: "Messaggi Suggeriti" admin_onboarding_banner: + start_posting: + back: "Indietro" spread_the_word: action: "Copia link" copied_to_clipboard: "Link copiato negli appunti!" @@ -485,8 +493,6 @@ it: other: "Creato %{count} anni fa" bookmarked: title: "Segnalibro" - edit_bookmark: "Modifica Segnalibro" - clear_bookmarks: "Cancella Segnalibri" help: bookmark: "Clicca per mettere il segnalibro all'argomento" edit_bookmark: "Clicca per modificare il segnalibro di un messaggio in questo argomento" @@ -505,12 +511,12 @@ it: clear_reminder: "Cancella promemoria" edit: "Modifica segnalibro" not_bookmarked: "aggiungi messaggio ai segnalibri" + topic_bookmark: "Argomento" remove_reminder_keep_bookmark: "Rimuovi il promemoria e mantieni il segnalibro" created_with_reminder: "Hai aggiunto ai segnalibri questo messaggio con un promemoria %{date}. %{name}" created_with_reminder_generic: "L'hai aggiunto ai segnalibri con un promemoria per il %{date}. %{name}" delete: "Cancella Segnalibro" confirm_delete: "Vuoi eliminare questo segnalibro? Anche il promemoria verrà eliminato." - confirm_clear: "Vuoi rimuovere tutti i segnalibri da questo argomento?" save: "Salva" no_timezone: 'Non hai ancora impostato un fuso orario. Non sarai in grado di impostare promemoria. Creane uno nel tuo profilo .' invalid_custom_datetime: "La data e l'ora fornite non sono valide, riprova." @@ -636,19 +642,13 @@ it: in_reply_to: "in risposta a" filtered_flagged_by: "Contrassegnato da" unknown: - title: - one: "Hai un plugin disabilitato in attesa di revisione:" - other: "Hai plugin disabilitati in attesa di revisione:" instruction: "Non possono essere visualizzati correttamente finché non attivi il plugin appropriato. Abilita il plugin e aggiorna la pagina. In alternativa, puoi ignorarli. Scopri di più..." reviewable_unknown_source: "%{reviewableType} (plugin sconosciuto)" reviewable_known_source: "%{reviewableType} (dal plugin '%{pluginName}')" ignore_all: "Ignora tutto" enable_plugins: "Abilita i plugin" - delete_confirm: "Vuoi davvero eliminare tutte le recensioni create dai plugin disabilitati?" - ignore_success: "Tutte le recensioni create da plugin disabilitati sono state eliminate." explain: why: "spiega perché questo oggetto è stato aggiunto alla coda" - title: "Punteggio rivedibile" formula: "Formula" subtotal: "Totale parziale" total: "Totale" @@ -662,10 +662,8 @@ it: title: "Agli utenti le cui segnalazioni sono state storicamente accettate viene concesso un bonus." trust_level_bonus: name: "livello di attendibilità" - title: "Gli articoli revisionabili creati da utenti con un livello di attendibilità più elevato hanno un punteggio più alto." type_bonus: name: "tipo di bonus" - title: "Ad alcune tipologie revisionabili può essere assegnato un bonus dallo staff, per aumentare la loro priorità." revise_and_reject_post: title: "Revisione" reason: "Motivo" @@ -674,7 +672,6 @@ it: custom_reason: "Fornisci una descrizione chiara del motivo" other_reason: "Altro..." optional: "facoltativo" - stale_help: "La revisione di questo elemento è stata condotta da %{username}." claim_help: optional: "Puoi rivendicare questo elemento per evitare che altri lo revisionino." required: "Per poter revisionare gli elementi devi prima rivendicarli." @@ -1655,6 +1652,10 @@ it: interface: "Interfaccia" apps: "App" navigation_menu: "Menu di navigazione" + calendar_subscriptions: "Calendario" + calendar_subscriptions: + copied: "Copiato!" + add_to_google: "Google Calendar" change_password: success: "(email inviata)" in_progress: "(invio email in corso)" @@ -2257,6 +2258,7 @@ it: form_kit: reset: Annulla optional: facoltativo + required: obbligatorie dirty_form: "Non hai caricato le modifiche! Vuoi davvero uscire?" errors: starts_with: "Deve iniziare con %{prefix}" @@ -2650,6 +2652,8 @@ it: medium_dark_tone: Carnagione di tonalità medio-scura dark_tone: Carnagione di tonalità scura default: Emoji personalizzate + filter_input: + clear: "Cancella il filtro" shared_drafts: title: "Bozze condivise" notice: "Questo argomento è visibile solo a coloro che possono pubblicare bozze condivise." @@ -3120,8 +3124,6 @@ it: max_views: placeholder: massimo aria_label: filtra per visualizzazioni massime - additional_options: - label: "Filtra per numero di messaggi e visualizzazioni dell'argomento" hamburger_menu: "Menu di navigazione" new_item: "nuovo" go_back: "indietro" @@ -3184,11 +3186,8 @@ it: confirm: "Conferma" select_all: "Seleziona Tutto" clear_all: "Deseleziona Tutto" - unlist_topics: "Rendi argomenti invisibili" - relist_topics: "Ripubblica Argomenti" reset_bump_dates: "Reimposta la date di riproposizione" defer: "Contrassegna come non letto" - delete: "Elimina argomenti" delete_topics_count: one: "Cancella Argomento" other: "Elimina argomenti" @@ -3221,29 +3220,20 @@ it: other: "Ignora i nuovi (%{count})" toggle: "interruttore di selezione multipla degli argomenti" actions: "Azioni Multiple" - change_category: "Imposta categoria..." - close_topics: "Chiudi argomenti" - archive_topics: "Archivia argomenti" move_messages_to_inbox: "Sposta nella posta in arrivo" archive_messages: "Sposta in archivio" - notification_level: "Notifiche…" change_notification_level: "Modifica livello di notifica" choose_new_category: "Scegli la nuova categoria per gli argomenti:" - selected: - one: "Hai selezionato %{count} argomento." - other: "Hai selezionato %{count} argomenti." selected_sole_category: one: "Hai selezionato %{count} argomento dalla categoria:" other: "Hai selezionato %{count} argomenti dalla categoria:" selected_count: one: "%{count} selezionato" other: "%{count} selezionati" - change_tags: "Sostituisci Etichette" - append_tags: "Aggiungi Etichette" + append_tags: "Aggiungi etichette" choose_new_tags: "Scegli nuove etichette per i seguenti argomenti:" - choose_append_tags: "Scegli nuove etichette da aggiungere a questi argomenti:" + choose_append_tags: "Aggiungi etichette" changed_tags: "Le etichette per quegli argomenti sono state cambiate." - remove_tags: "Rimuovi tutte le etichette" confirm_remove_tags: one: "Tutti i tag verranno rimossi da questo argomento. Sei sicuro?" other: "Tutti i tag verranno rimossi da %{count} argomenti. Sei sicuro?" @@ -3277,7 +3267,6 @@ it: name: "Ignora" close_topics: name: "Chiudi" - note: "Nota" optional: (opzionale) archive_topics: name: "Archivia" @@ -3291,24 +3280,18 @@ it: name: "Ripubblica" remove_tags: name: "Rimuovi etichette" - append_tags: - name: "Aggiungi etichette" replace_tags: name: "Sostituisci etichette" delete_topics: name: "Elimina" update_category: name: "Aggiorna categoria" - description: "Scegli la nuova categoria per gli argomenti selezionati" reset_bump_dates: name: "Reimposta date di riproposizione" - description: "Reimposta la data di riproposizione dell'argomento alla data dell'ultimo messaggio creato. Questo modificherà l'ordine dell'elenco argomenti" defer: name: "Contrassegna come non letto" - description: "Contrassegna argomenti come non letti" update_notifications: name: "Aggiorna notifiche" - description: "Modifica livello di notifica a osservazione, seguito, normale o silenziato" topic: filter_to: one: "%{count} messaggio in questo argomento" @@ -4072,8 +4055,12 @@ it: delete: "Cancella" add: "Aggiungi il gruppo di etichette richiesto" placeholder: "Seleziona un gruppo di etichette…" + tag_group: "Gruppo di Etichette" topic_featured_link_allowed: "Consenti collegamenti in primo piano in questa categoria" create_long: "Crea una nuova categoria" + type_settings_schema: + site_settings: "Impostazioni del sito" + unsaved_changes: "Hai modifiche non salvate" slug_placeholder: "(Facoltativo) parole-sillabate per URL" creation_error: Si è verificato un errore nella creazione della categoria. save_error: Si è verificato un errore durante il salvataggio della categoria. @@ -4105,6 +4092,8 @@ it: list: "Elenca le categorie" no_description: "Aggiungi una descrizione alla categoria." change_in_category_topic: "Modifica descrizione" + description_expand: "Mostra altro" + description_collapse: "Mostra meno" already_used: "Questo colore è già stato usato in un'altra categoria." color_palette: "Schema di colori" security: "Sicurezza" @@ -4138,6 +4127,9 @@ it: review_group_name: "nome gruppo" require_topic_approval: "Richiedi l'approvazione di un moderatore per tutti i nuovi argomenti" require_reply_approval: "Richiedi l'approvazione di un moderatore per tutte le nuove risposte" + posting_review_modes: + everyone: "Chiunque" + posting_review_groups_placeholder: "Seleziona gruppi..." this_year: "quest'anno" position: "Posizione nella pagina delle Categorie:" position_disabled: "Le categorie verranno visualizzate in ordine di attività. Per controllare l'ordine delle categorie negli elenchi, abilita l'impostazione 'posizioni di categoria fisse'." @@ -4668,7 +4660,20 @@ it: one: "Anche il suo sinonimo verrà eliminato." other: "I suoi %{count} sinonimi verranno a loro volta eliminati." edit_tag: "Modifica il nome e la descrizione dell’etichetta" - description: "Descrizione (max 1000 caratteri)" + description: "Descrizione" + settings: + title: "Impostazioni" + general: "Generale" + localizations: "Localizzazioni" + back: "Indietro" + name: "Nome" + slug: "Abbreviazione" + name_placeholder: "Nome etichetta" + synonyms_subtitle: "Quando vengono utilizzate le seguenti etichette, verranno sostituite con %{name}" + localization: + locale: "Localizzazione" + name: "Nome" + description: "Descrizione" sort_by: "Ordina per:" sort_by_count: "conteggio" sort_by_name: "nome" @@ -5158,7 +5163,6 @@ it: admin_js: type_to_filter: "Digita per filtrare…" settings: "Impostazioni" - reset_filter: "Reimposta" admin: title: "Amministratore Discourse" moderator: "Moderatore" @@ -5171,9 +5175,11 @@ it: never: "mai" reports: title: "Elenco dei rapporti disponibili" - meta_doc: "I report sono uno strumento potente per aiutarti a capire cosa sta succedendo sul tuo sito. Possono aiutarti a identificare tendenze, individuare problemi e prendere decisioni basate sui dati." sidebar_title: "Report" back: "Torna a tutti i report" + group_traffic: "Traffico" + group_members: "Membri" + group_other: "Altri" config_sections: account: title: "Account" @@ -5198,7 +5204,6 @@ it: preview: "Anteprima" enabled_for_options: everyone: "Chiunque" - staff: "Solo staff" statuses: experimental: "Sperimentale" impact_roles: @@ -5271,7 +5276,6 @@ it: help_text: "La dimensione consigliata è 600 x 80 pixel." large_icon: title: "Icona quadrata" - description: "Una versione quadrata dell'immagine del logo appare nella parte superiore dell'amministrazione ed è anche il logo dell'app nella schermata iniziale del dispositivo mobile." help_text: "La dimensione consigliata è 512 x 512 pixel." square_icon_dark: required: "Utilizzare un'icona quadrata diversa per la modalità scura?" @@ -5422,7 +5426,7 @@ it: header_description: "I report sono uno strumento potente per aiutarti a capire cosa sta succedendo sul tuo sito. Possono aiutarti a identificare tendenze, individuare problemi e prendere decisioni basate sui dati." sub_pages: settings: - title: "Impostazioni della dashboard" + title: "Impostazioni" badges: title: "Distintivi" header_description: "I distintivi premiano gli utenti per le loro attività, i loro contributi e i loro risultati, per riconoscere, convalidare e incoraggiare comportamenti positivi e l'impegno all'interno della community" @@ -5572,22 +5576,6 @@ it: result_count: one: '%{count} risultato per "%{filter}"' other: '%{count} risultati per "%{filter}"' - result_types: - page: - one: "Pagina" - other: "Pagine" - report: - one: "Report" - other: "Report" - setting: - one: "Impostazione" - other: "Impostazioni" - theme: - one: "Tema" - other: "Temi" - component: - one: "Componente" - other: "Componenti" new_features: title: "Cosa c'è di nuovo?" check_for_updates: "Controlla gli aggiornamenti" @@ -5611,15 +5599,6 @@ it: title: "Cosa c'è di nuovo?" subtitle: "Stiamo rilasciando nuove funzionalità e miglioramenti in continuazione. Questa pagina mostra i punti salienti, ma puoi cliccare su \"Scopri di più\" per vedere le note di rilascio approfondite." learn_more: "Scopri di più..." - experimental: "Sperimentale" - only_experiments: "Mostra solo le funzionalità sperimentali" - experiment_enabled: "Hai attivato la funzionalità sperimentale." - experiment_disabled: "Hai disattivato la funzionalità sperimentale." - experiment_tooltip: - title_enabled: "Disattiva la funzionalità sperimentale" - content_enabled: "Modificando questa impostazione, la funzionalità verrà disabilitata per tutti gli utenti." - feature_tooltip: - content_enabled: "Modificando questa impostazione, la funzionalità verrà disabilitata per tutti gli utenti." last_checked: "Ultimo controllo" refresh_problems: "Aggiorna" no_problems: "Nessun problema rilevato." @@ -5682,7 +5661,7 @@ it: all: "Tutti" view_table: "tabella" view_graph: "grafico" - refresh_report: "Aggiorna Rapporto" + refresh_report: "Aggiorna" daily: Ogni giorno monthly: Mensile weekly: Settimanale @@ -6566,7 +6545,6 @@ it: import_web_tip: "Archivio contenente il tema" direct_install_tip: "Sei sicuro di voler installare %{name} dall'archivio elencato di seguito?" import_web_advanced: "Avanzato…" - import_file_tip: "File .tar.gz, .zip, o .dcstyle.json contenente il tema" is_private: "Il tema è in un archivio git privato" finish_install: "Completa l'installazione del tema" last_attempt: "Il processo di installazione non si è concluso, ultimo tentativo:" @@ -7596,6 +7574,7 @@ it: field_types: text: "Testo" textarea: "Area di testo" + date: "Data" confirm: "Conferma" dropdown: "A discesa" multiselect: "Selezione multipla" @@ -7728,7 +7707,7 @@ it: confirm: "Sì, aggiorna i criteri della password" min_admin_password_length: confirm: "Sì, aggiorna i criteri della password" - password_unique_charactes: + password_unique_characters: confirm: "Sì, aggiorna i criteri della password" block_common_passwords: confirm: "Sì, aggiorna i criteri della password" diff --git a/config/locales/client.ja.yml b/config/locales/client.ja.yml index 105129ee79c5b..b15fb82104f1e 100644 --- a/config/locales/client.ja.yml +++ b/config/locales/client.ja.yml @@ -6,6 +6,16 @@ ja: js: + blocks: + ghost: + status: "ステータス" + in_location: "場所:" + hidden: "非表示" + failed: "失敗しました" + carousel: + go_to_slide: "スライド %{index} に移動" + previous: "前のスライド" + next: "次のスライド" number: format: separator: "." @@ -257,6 +267,12 @@ ja: forwarded: "上記のメールを転送しました" topic_admin_menu: "トピックの操作" skip_to_main_content: "メインコンテンツにスキップ" + skip_links_label: "ナビゲーションリンクをスキップ" + skip_to_post: "投稿 %{post_number} までスキップ" + skip_to_where_you_left_off: "最後に中断した場所までスキップ (投稿 %{post_number})" + skip_to_where_you_left_off_last: "最後に中断した場所までスキップ (最後の返信、投稿 %{post_number})" + skip_to_last_reply: "最後の返信までスキップ" + skip_to_top: "トップへスキップ" skip_user_nav: "プロファイルのコンテンツにスキップ" emails_are_disabled: "メールの送信は管理者によって無効化されています。メール通知は一切送信されません。" emails_are_disabled_non_staff: "スタッフ以外のユーザーの送信メールは無効になっています。" @@ -266,9 +282,13 @@ ja: back_button: "戻る" welcome_banner: header: + new_members: "%{preferred_display_name}、ようこそ!" logged_in_members: "%{preferred_display_name}、おかえりなさい!" anonymous_members: "%{site_name} へようこそ!" search_placeholder: "検索" + impersonation: + notice: "%{username} の代理操作中です" + stop: "代理操作を終了" themes: default_description: "デフォルト" broken_theme_alert: "テーマ / コンポーネントにエラーがあるため、サイトが動作しない可能性があります。詳細はブラウザコンソールを確認してください。" @@ -369,6 +389,8 @@ ja: pill: "提案" pm_title: "推奨メッセージ" admin_onboarding_banner: + start_posting: + back: "戻る" spread_the_word: action: "リンクをコピー" copied_to_clipboard: "リンクをクリップボードにコピーしました!" @@ -439,8 +461,6 @@ ja: other: "%{count} 年前に作成" bookmarked: title: "ブックマーク" - edit_bookmark: "ブックマークを編集" - clear_bookmarks: "ブックマークをクリア" help: bookmark: "クリックしてこのトピックをブックマークします" edit_bookmark: "クリックしてこのトピックの投稿のブックマークを編集します" @@ -459,12 +479,12 @@ ja: clear_reminder: "リマインダーをクリアする" edit: "ブックマークを編集" not_bookmarked: "この投稿をブックマークする" + topic_bookmark: "トピック" remove_reminder_keep_bookmark: "リマインダーを削除してブックマークを保持" created_with_reminder: "%{date} のリマインダー付きでこの投稿をブックマークしました。%{name}" created_with_reminder_generic: "%{date} のリマインダー付きでこれをブックマークしました。%{name}" delete: "ブックマークを削除" confirm_delete: "このブックマークを削除してもよろしいですか?リマインダーも削除されます。" - confirm_clear: "このトピックのすべてのブックマークをクリアしてもよろしいですか?" save: "保存" no_timezone: 'まだタイムゾーンを設定していないためリマインダーを設定することはできません。プロファイルで設定してください。' invalid_custom_datetime: "入力された日時が無効です。もう一度お試しください。" @@ -514,6 +534,10 @@ ja: resume: "再開" remove: "削除" remove_confirmation: "この下書きを削除してもよろしいですか?" + bulk_delete: "選択項目を削除" + bulk_delete_confirmation: "下書きを削除" + bulk_delete_message: + other: "これら %{count} 件の下書きを削除してもよろしいですか?" new_topic: "新しいトピックの下書き" new_private_message: "新しい個人メッセージの下書き" edit_topic: "トピックの下書きを編集" @@ -575,23 +599,20 @@ ja: review: show_more: "もっと表示" show_less: "表示を減らす" + back_to_queue: "キューに戻る" + editing_post: "投稿を編集中…" order_by: "並べ替え順" date_filter: "投稿期間" in_reply_to: "返信" filtered_flagged_by: "通報者" unknown: - title: - other: "無効化されたプラグインに保留中のレビュー待ち項目があります:" instruction: "関連するプラグインが有効化されるまで、正しく表示されません。プラグインを有効化してページを更新してください。または、無視することもできます。詳細..." reviewable_unknown_source: "%{reviewableType} (不明なプラグイン)" reviewable_known_source: "%{reviewableType} (「%{pluginName}」プラグイン)" ignore_all: "すべて無視" enable_plugins: "プラグインを有効化" - delete_confirm: "無効化されたプラグインで作成されたすべてのレビューを削除してもよろしいですか?" - ignore_success: "無効化されたプラグインで作成されたすべてのレビューは削除されました。" explain: why: "この項目が、キューに追加された理由を説明してください" - title: "レビュー待ち項目スコア" formula: "式" subtotal: "小計" total: "合計" @@ -605,10 +626,8 @@ ja: title: "過去に同意を得た通報を報告したユーザーにはボーナスが与えられます。" trust_level_bonus: name: "信頼レベル" - title: "レビュー待ち項目を作成したユーザーの信頼レベルが高いほど、その項目のスコアが高くなります。" type_bonus: name: "タイプボーナス" - title: "特定のレビュー待ち項目タイプには、スタッフがボーナスを割り当てて優先順位を上げられます。" revise_and_reject_post: title: "要再校" reason: "理由" @@ -617,13 +636,16 @@ ja: custom_reason: "理由を明確に説明してください" other_reason: "その他..." optional: "オプション" - stale_help: "このレビュー待ち項目は %{username} によって解決されました。" claim_help: optional: "この項目を自分に割り当ててほかのユーザーがレビューしないようにできます。" required: "レビューする前に項目を自分に割り当てる必要があります。" claimed_by_you: "この項目を自分に割り当てたため、レビューできます。" claimed_by_other: "この項目は %{username} のみがレビューできます。" automatically_claimed_by: "この項目は現在、%{username} がレビューしています。" + claim: + title: "このトピックを自分に割り当てる" + unclaim: + help: "この割り当てを削除する" awaiting_approval: "承認待ち" delete: "削除" settings: @@ -644,6 +666,7 @@ ja: filtered_topic: "1 つのトピックのレビュー待ちコンテンツにフィルターを適用しました。" filtered_user: "通報されたユーザー" filtered_reviewed_by: "レビュー者:" + filtered_claimed_by: "通報担当者" show_all_topics: "すべてのトピックを表示" deleted_post: "(削除された投稿)" deleted_user: "(削除されたユーザー)" @@ -709,10 +732,13 @@ ja: created_at: "作成日" created_at_asc: "作成日 (昇順)" priority: + title: "最低優先度" any: "(すべて)" low: "低" medium: "普通" high: "高" + active_filters: "有効なフィルタ:" + clear_filter: "%{filter} を削除" conversation: view_full: "会話をすべて表示" scores: @@ -755,6 +781,10 @@ ja: is_this_post: "この%{reviewable_type}は%{reviewable_human_score_types}ですか?" delimiter: "または" something_else_wrong: "この%{reviewable_type}に何か問題がありますか?" + approve_user: "このユーザーを承認しますか?" + suspect_user: "これは迷惑ユーザーですか?" + approve_post: "この投稿を承認しますか?" + approve_topic: "このトピックを承認しますか?" types: reviewable_flagged_post: title: "通報された投稿" @@ -773,27 +803,43 @@ ja: title: "投稿" noun: "投稿" reviewable_ai_chat_message: + title: "AI が通報したチャットメッセージ" noun: "チャットメッセージ" reviewable_ai_post: + title: "AI が通報した投稿" noun: "投稿" + reviewable_post_voting_comment: + title: "通報されたコメント" + noun: "コメント" flagged_as: "通報:" + post_flagged_as: "投稿の通報:" + chat_flagged_as: "チャットの通報:" + queued_post_label: "対応待ちの投稿" + queued_topic_label: "対応待ちのトピック" user_label: "ユーザー" + assigned_to: "投稿の割り当て先:" moderator_actions: "モデレーターのアクション" timeline_and_notes: "タイムラインとメモ" timeline: target_created: "投稿を作成" target_created_by: "%{username} が投稿を作成 · %{relativeDate}" - target_deleted: "削除された投稿" + target_deleted: "投稿を削除" + target_deleted_by: "%{username} が投稿を削除 · %{relativeDate}" flagged: "通報" flagged_as_by: "%{username} が%{flagReason}として通報 · %{relativeDate}" claimed: "引き受け" claimed_by: "%{username} が引き受け · %{relativeDate}" + unclaimed_by: "%{username} が割り当てを解除 · %{relativeDate}" reviewed: "レビュー" + approved_by: "%{username} が承認 · %{relativeDate}" + rejected_by: "%{username} が拒否 · %{relativeDate}" + ignored_by: "%{username} が無視 · %{relativeDate}" view_conversation: "PM を見る" note_added: "モデレーターのメモ" note_added_by: "%{username} のモデレーターメモ · %{relativeDate}" no_events: "表示するタイムラインイベントはありません" notes: + add_note_description: "他のモデレーターに文脈を伝えるメモを追加してください。" add_note_button: "メモを追加" placeholder: "ここにメモを入力してください..." chars_remaining: "残り %{count} 文字" @@ -806,20 +852,34 @@ ja: review_user: "ユーザー" need_help: "ヘルプが必要ですか?" copy_link: "リンクをコピー" + copy_permalink_title: "このレビュー待ち項目へのリンクをクリップボードにコピー" + copy_link_feedback: "リンクがコピーされました" view_source: "ソースを表示" insights: title: "インサイト" flag_volume: "通報回数" flagged_by_users: other: "%{count} 人のユニークユーザーによる通報" + similar_posts: "過去の違反" + flagged_in_timeframe: + other: "%{count} 確認済みの通報" + user_activity: "ユーザー情報" activities: + joined_on: "参加日: %{joinDate}" trust_level: "信頼レベル: %{trustLevelName}" posts: other: "投稿 %{count} 件" + moderation_history: + label: "モデレーション履歴" + silenced: "投稿禁止: %{count}" + suspended: "凍結: %{count}" + rejected_posts: "拒否された投稿: %{count}" solution_marked: "解決策に指定" topic_has_solution: "このトピックには解決策があります" visibility: "表示状態" + topic_unlisted: "このトピックは非表示であり、ダイレクトリンクでのみアクセスできます。" help: + community_moderation_guide: "このコミュニティーのモデレーションガイド" moderation_guide: "Discourse モデレーションガイド" flag_priorities: "ユーザーの評判と通報の優先順位の管理" spam_detection: "迷惑行為の検出" @@ -961,6 +1021,7 @@ ja: title: 交流 posting: 投稿 notification: 通知 + self_lockout: "グループの表示状態を変更すると、自身のアクセス権が失われます。続行してもよろしいですか?" email: title: "メール" enable_smtp: "SMTP を有効化" @@ -973,6 +1034,7 @@ ja: smtp_title: "SMTP" smtp_instructions: "このグループで SMTP を有効化すると、グループの受信トレイから送信されるすべての送信メールは、フォーラムが送信するほかのメール用に構成されているメールサーバーではなく、ここで指定される SMTP 設定を介して送信されます。" additional_settings: "追加設定" + smtp_disable_confirm: "SMTP を無効にすると、すべての SMTP 設定がリセットされ、関連付けられている機能が無効になります。続行してもよろしいですか?" prefill: title: "次の設定で事前入力:" gmail: "Gmail" @@ -1090,6 +1152,8 @@ ja: make_owner_description: "%{username} をこのグループのオーナーにする" remove_owner: "オーナーから削除" remove_owner_description: "%{username} をこのグループのオーナーから削除する" + remove_member_self_lockout: "このグループから退会すると、グループを管理するアクセス権が取り消されます。続行してもよろしいですか?" + remove_owner_self_lockout: "オーナーとして自身を削除すると、このグループを管理するアクセス権が取り消されます。続行してもよろしいですか?" make_primary: "プライマリーにする" make_primary_description: "これを %{username} のプライマリーグループにします" remove_primary: "プライマリーとして削除" @@ -1209,12 +1273,15 @@ ja: n_more: other: "カテゴリ (その他 %{count} 個)…" ip_lookup: + title: IP アドレス hostname: ホスト名 location: 場所 location_not_found: (不明) organisation: 組織 phone: 電話 other_accounts: "同じ IP アドレスを持つほかのアカウント:" + other_accounts_with_ip: + other: "同じ IP アドレスを持つほか %{count} 件のアカウント" delete_other_accounts: other: "%{count} 件削除" username: "ユーザー名" @@ -1249,8 +1316,16 @@ ja: private_message: "メッセージ" private_messages: "メッセージ" upcoming_changes: + title: "次回の変更" for_user: + upcoming_change: "次回の変更" enabled: "有効ですか?" + why: "理由" + why_reasons: + not_in_specific_groups: "ユーザーはこの変更に必要な特定のグループに属しません" + in_specific_groups: "ユーザーはこの変更に必要な特定のグループに属します" + enabled_for_everyone: "この変更はすべてのメンバーに対して有効です" + enabled_for_no_one: "この変更はすべてのメンバーに対して無効です" user_notifications: filters: filter_by: "フィルタ基準:" @@ -1555,17 +1630,24 @@ ja: interface: "表示設定" apps: "アプリ連携" navigation_menu: "ナビゲーションメニュー" + upcoming_changes: "次回の変更" + calendar_subscriptions: "カレンダー" + calendar_subscriptions: + copied: "コピーしました!" + add_to_google: "Google カレンダー" change_password: success: "(メール送信済み)" in_progress: "(メール送信中)" error: "(エラー)" action: "パスワードのリセットメールを送信" + staged_user: "ステージングユーザーはパスワードリセットメールを受信できません。" set_password: "パスワードを設定" choose_new: "新しいパスワードを選択する" choose: "パスワードを選択する" verify_identity: "続行するには本人確認を行ってください。" title: "パスワードをリセット" remove: "パスワードを削除" + remove_disabled: "パスワードを削除する前に、アカウントのログイン方法が少なくとももう 1 つ必要です (パスキー、リンクされた外部アカウントなど)。" remove_detail: "パスワードをリセットしない限り、アカウントにアクセスできなくなります。" second_factor_backup: title: "二要素認証のバックアップコード" @@ -1829,6 +1911,7 @@ ja: first_time_and_daily: "投稿の最初の「いいね!」と毎日" first_time: "投稿の最初の「いいね!」" never: "通知しない" + notify_on_linked_posts: "自分の投稿へのリンクを誰かが共有したら通知する" email_previous_replies: title: "メールの下部に前の返信を含める" unless_emailed: "最初だけ" @@ -1888,6 +1971,7 @@ ja: redeemed_tab_with_count: "承諾済み (%{count})" invited_via: "招待" invited_via_link: "リンク %{key} (%{count}/%{max} 引き換え済み)" + generating_link: "リンクを生成中..." groups: "グループ" topic: "トピック" sent: "作成日/最終送信日" @@ -1951,6 +2035,7 @@ ja: other {# 日} }です。 edit_link_options: "リンクオプションを編集するかメールで送信します。" + edit_link_options_only: "リンクのオプションを編集する" show_advanced: "高度なオプションを表示" hide_advanced: "高度なオプションを非表示" description: "説明" @@ -2137,9 +2222,13 @@ ja: no_results: "結果がありません" search: "検索…" label: "オプションを選択" + d_otp: + screen_reader: + other: '%{count} 桁の数字を入力してください' form_kit: reset: リセット optional: オプション + required: 必須 dirty_form: "変更を送信しませんでした!終了してもよろしいですか?" errors: starts_with: "%{prefix} で始まる必要があります" @@ -2348,6 +2437,7 @@ ja: admin_not_allowed_from_ip_address: "その IP アドレスからは管理者としてログインできません。" resend_activation_email: "ここをクリックすると、再度アクティベーションメールを送信します。" omniauth_disallow_totp: "あなたのアカウントは二要素認証が有効になっています。ログインにはパスワードが必要です。" + works_with: "利用可能なログイン方法" activate_account: "アカウントを有効化" resend_title: "アクティベーションメールの再送" change_email: "メールアドレスを変更" @@ -2464,6 +2554,7 @@ ja: topic_count: other: "このカテゴリの %{count} 件のトピック" read_only: "読み取り専用" + read_only_description: "このカテゴリは読み取り専用であるため、このトピックでは選択できません" timezone_input: ambiguous_ist: "IST はあいまいです。特定のタイムゾーンを選択してください(「アジア/コルカタ」など)" select_kit: @@ -2515,6 +2606,8 @@ ja: medium_dark_tone: ミディアムダークスキントーン dark_tone: ダークスキントーン default: カスタム絵文字 + filter_input: + clear: "フィルタをクリア" shared_drafts: title: "共有の下書き" notice: "このトピックは、共有の下書きを公開できるユーザーのみに表示されます。" @@ -2546,8 +2639,13 @@ ja: title: "投稿の翻訳" select: "翻訳を選択" save: "翻訳を保存" + original_content: "元の投稿" + translation_preview: "翻訳のプレビュー" + original: "原文" translation: "翻訳" + no_translation_yet: "入力を開始すると翻訳のプレビューが表示されます..." placeholder: "ここに投稿の翻訳を入力します..." + show_raw_markdown: "コードを表示する" group_mentioned_limit: other: "警告! %{group} をメンションしましたが、このグループのメンバー数は、管理者がメンション数制限として設定した %{count} 人を超えています。そのため誰にも通知されません。" group_mentioned: @@ -2593,7 +2691,9 @@ ja: create_shared_draft: "共有の下書きを作成" edit_shared_draft: "共有の下書きを編集" title: "または %{modifier}Enter キーを押します" + save_and_close: "保存して閉じる" discard: "破棄" + draft_saved: "下書きが保存されました!" users_placeholder: "ユーザーまたはグループを追加" title_placeholder: "トピックのタイトルを入力してください" title_or_link_placeholder: "タイトルを入力するか、リンクを貼り付けてください" @@ -2648,10 +2748,27 @@ ja: ulist_title: "箇条書き" list_item: "リスト項目" toggle_direction: "方向の切り替え" + apply_wrap_title: "ラップの適用" wrap_modal: + title: "ラップの編集" + name_label: "ラップ名" + attributes_label: "属性" + add_attribute: "属性を追加する" + remove_attribute: "属性を削除する" apply: "適用" + unwrap: "ラップを解除する" + no_attributes: "属性はまだ追加されていません。" + wrap_text: "コンテンツをラップする" help: "Markdown 編集のヘルプ" + collapse: "作成ツールパネルを最小化する" + open: "作成ツールパネルを開く" + abandon: "作成ツールを閉じて下書きを破棄する" + enter_fullscreen: "作成ツールの全画面表示を開始する" + exit_fullscreen: "作成ツールの全画面表示を終了する" exit_fullscreen_prompt: "ESC を押して全画面表示を終了" + show_toolbar: "作成ツールのツールバーを表示する" + hide_toolbar: "作成ツールのツールバーを非表示にする" + peek_mode_toggle: "ピークモードを切り替える" modal_ok: "OK" cant_send_pm: "%{username} にメッセージを送ることはできません。" create_message_error: "メッセージを作成中にエラーが発生しました。もう一度お試しください。" @@ -2698,6 +2815,7 @@ ja: desc: "最新の返信日を変更せずに返信します" toggle_unlisted: label: 非表示の切り替え + desc: "非表示のトピックはダイレクトリンクのみでアクセスできます" reload: "再読み込み" ignore: "無視する" image_alt_text: @@ -2708,7 +2826,14 @@ ja: zoom_out: "画像を縮小" zoom_in: "画像を拡大" remove: "画像の削除" + add_to_grid: "グリッドに追加" + move_outside_grid: "グリッドの外に移動" image: "画像" + grid_label: "これはグリッドとして表示されます" + grid_mode_grid: "グリッド" + grid_mode_carousel: "カルーセル" + grid_mode_title: "画像ギャラリーのスタイルを %{mode} に設定" + remove_grid: "グリッドを削除する" image_scale_button: "画像の表示率を %{percent}% に変更" delete_image_button: 画像を削除 toggle_image_grid: 画像グリッドを切り替える @@ -2718,6 +2843,7 @@ ja: remove: "リンクの削除" visit: "外部タブでリンクを開く" link_copied: "リンクがコピーされました!" + unsupported_token: "リッチテキストエディターではこの投稿で使用されているすべての機能がサポートされていないため、Markdown エディターに切り替えます。" notifications: tooltip: regular: @@ -2777,6 +2903,13 @@ ja: votes_released: "%{description} - 完了" new_features: "新機能が公開されました!" admin_problems: "サイトダッシュボードに関する新しいアドバイス" + upcoming_changes: + available: + title: "次回の変更" + description: "'%{changeName}' をプレビューできます" + automatically_promoted: + title: "次回の変更" + description: "'%{changeName}' は自動的に有効になりました" dismiss_confirmation: body: default: @@ -2829,6 +2962,7 @@ ja: membership_request_consolidated: "新しいメンバーシップリクエスト" reaction: "新しいリアクション" votes_released: "投票がリリースされました" + new_features: "新しい Discourse 機能がリリースされました" admin_problems: "サイトダッシュボードに関する新しいアドバイス" upload_selector: change: "変更" @@ -2919,6 +3053,7 @@ ja: aria_label: タグを使ってフィルタ filters: label: トピック/投稿のみを返す… + all: メッセージを含める title: タイトルが一致するもの likes: '「いいね!」した項目' posted: 投稿したもの @@ -2964,8 +3099,6 @@ ja: max_views: placeholder: 最大 aria_label: 最大閲覧数でフィルタ - additional_options: - label: "投稿数とトピックの閲覧数でフィルタ" hamburger_menu: "ナビゲーションメニュー" new_item: "新規" go_back: "戻る" @@ -3017,16 +3150,18 @@ ja: topics: new_messages_marker: "最後の訪問" bulk: + select: "一括選択" confirm: "確認" select_all: "すべて選択" clear_all: "すべてクリア" - unlist_topics: "トピックを非表示" - relist_topics: "トピックを表示" reset_bump_dates: "バンプ日をリセットする" defer: "未読にする" - delete: "トピックを削除" delete_topics_count: other: "トピックを削除" + delete_posts_count: + other: "投稿を削除" + delete_posts_confirmation: + other: "%{count} 件の投稿を削除してもよろしいですか?" dismiss: "閉じる" dismiss_read: "未読をすべて閉じる" dismiss_read_with_selected: @@ -3051,26 +3186,18 @@ ja: other: "新規を閉じる (%{count})" toggle: "トピックの一括選択を切り替える" actions: "一括操作" - change_category: "カテゴリを設定…" - close_topics: "トピックをクローズ" - archive_topics: "トピックをアーカイブ" move_messages_to_inbox: "受信トレイに移動" archive_messages: "アーカイブに移動" - notification_level: "通知…" change_notification_level: "通知レベルを変更" choose_new_category: "このトピックの新しいカテゴリを選択:" - selected: - other: "%{count} 件のトピックを選択しました。" selected_sole_category: other: "カテゴリから %{count} 件のトピックを選択しました:" selected_count: other: "%{count} 個選択済み" - change_tags: "タグを置換" append_tags: "タグを追加" choose_new_tags: "これらのトピックに新しいタグを選択:" - choose_append_tags: "これらのトピックに追加する新しいタグを選択:" + choose_append_tags: "タグを追加" changed_tags: "トピックのタグが変更されました。" - remove_tags: "すべてのタグを削除" confirm_remove_tags: other: "%{count} 件のトピックからすべてのタグが削除されます。よろしいですか?" progress: @@ -3096,12 +3223,12 @@ ja: unread: "未読はありません... お見事!" new_new: "今のところ新着はありません... また後で確認してください!" new: "今のところ新着はありません... また後で確認してください!" + generic: "ここには何もありません... また後で確認してください!" topic_bulk_actions: dismiss: name: "閉じる" close_topics: name: "閉じる" - note: "注意" optional: (オプション) archive_topics: name: "アーカイブ" @@ -3115,24 +3242,18 @@ ja: name: "再掲載" remove_tags: name: "タグを削除" - append_tags: - name: "タグを追加" replace_tags: name: "タグを置換" delete_topics: name: "削除" update_category: name: "カテゴリを更新" - description: "選択したトピックの新しいカテゴリを選択します" reset_bump_dates: name: "バンプ日をリセット" - description: "トピックのバンプ日を投稿の最終作成日にリセットします。これにより、トピックリストの順序が変わります。" defer: name: "未読にする" - description: "トピックを未読としてマーク" update_notifications: name: "通知を更新" - description: "通知レベルをウォッチ中、追跡中、通常、またはミュートに変更します" topic: filter_to: other: "トピックの %{count} 件の投稿" @@ -3214,12 +3335,15 @@ ja: created_at: "作成日: %{date}" bumped_at: "最新: %{date}" browse_latest_topics: "最新のトピックを閲覧する" + browse_new_replies: "新しい返信を閲覧する" + browse_new_topics: "新しいトピックを閲覧する" suggest_create_topic: 新しい会話を開始しますか? jump_reply: "投稿の下の場所にジャンプする" jump_reply_aria: "元の場所にある @%{username} の投稿にジャンプする" jump_reply_button: "投稿にジャンプ" deleted: "トピックは削除されました" slow_mode_update: + title: "低速モード" select: "ユーザーはこのトピックに次の頻度でのみ投稿できます。" description: "流れの速いディスカッションや論争になりがちなディスカッションで建設的な対話を奨励するため、このトピックへの投稿はしばらく待ってから行う必要があります。" enable: "有効化" @@ -3241,6 +3365,8 @@ ja: 12_hours: "12 時間" 24_hours: "24 時間" custom: "カスタム期間" + slow_mode_notice: + duration: "このトピックでは次の投稿まで %{duration}お待ちください" topic_status_update: title: "トピックタイマー" save: "タイマーをセット" @@ -3270,6 +3396,8 @@ ja: title: "最後の投稿の後トピックを自動的にクローズ" auto_delete: title: "トピックを自動的に削除" + auto_delete_after_last_post: + title: "最後の投稿の後トピックを自動的に削除" auto_bump: title: "トピックの自動バンプ" reminder: @@ -3281,6 +3409,7 @@ ja: auto_close: "このトピックは後 %{timeLeft}で自動的にクローズします。" auto_publish_to_category: "このトピックは後 %{timeLeft}で #%{categoryName} に公開されます。" auto_close_after_last_post: "このトピックは最後の返信から%{duration}後にクローズされます。" + auto_delete_after_last_post: "このトピックは最後の返信から %{duration}後に削除されます。" auto_delete: "このトピックは後 %{timeLeft}で自動的に削除されます。" auto_bump: "このトピックは後 %{timeLeft}で自動的にバンプされます。" auto_reminder: "このトピックについて %{timeLeft}後にリマインダーを通知します。" @@ -3374,6 +3503,8 @@ ja: reply: title: "返信" help: "このトピックへの返信を作成する" + footer_buttons: + region_label: "トピックの操作" share: title: "トピックを共有" extended_title: "リンクの共有" @@ -3541,14 +3672,25 @@ ja: description: other: "%{count} 件の投稿を選択しました。" deleted_by_author_simple: "(作成者が削除したトピック)" + localizations: + title_edit_warning: + message: "これは翻訳されたトピックタイトルです。

の%{language}のカテゴリ、タグ、およびタイトルを編集しますか?またはこの特定の翻訳を編集しますか?" + action_original: "元の項目を編集する" + action_translation: "翻訳されたトピックタイトルを編集する" + editing_translation: "%{language} 翻訳を編集中" post_list: title: "最新の投稿" empty: "投稿はありません" aria_post_number: "%{title} - 投稿 #%{postNumber}" bulk: + selected: + other: "%{count} 件の投稿を選択済み" + select_all: "すべて選択" clear_all: "すべてクリア" actions: "一括操作" post: + accessible_heading: "%{username} の投稿 %{date}" + heading_anchor: "見出しのリンク" confirm_delete: "この投稿を削除してもよろしいですか?" quote_reply: "引用" quote_reply_shortcut: "引用 (または q を押す)" @@ -3572,8 +3714,13 @@ ja: deleted_by_author_simple: "(作成者が削除した投稿)" collapse: "折りたたむ" load_more_replies: "返信をさらに読み込む" + load_more_posts_above: "上にさらに投稿を読み込む" + load_more_posts_below: "下にさらに投稿を読み込む" sr_collapse_replies: "埋め込まれた返信を折りたたむ" sr_load_more_replies: "埋め込み返信をさらに読み込む" + loading_more_posts_above: "上にさらに投稿を読み込み中..." + loading_more_posts_below: "下にさらに投稿を読み込み中..." + loading_complete: "読み込み完了" sr_date: "投稿日" sr_expand_replies: other: "この投稿には %{count} 件の返信があります" @@ -3618,6 +3765,8 @@ ja: edit: "編集" delete: "削除" add: "新しい翻訳を追加" + manage: + other: "翻訳を管理する (既存 %{count} 件)" view: other: "%{count} 個の翻訳済みロケールを表示" modal: @@ -3625,8 +3774,10 @@ ja: confirm_delete: "'%{languageCode}' の翻訳を削除してもよろしいですか?" success: "翻訳は正しく更新されました" post_language_selector: + title: "投稿の言語" none: "なし" edit_warning: + message: "これは翻訳された投稿です。

元の%{language}の投稿を編集しますか?またはこの特定の翻訳を編集しますか?" action_original: "元の投稿を編集する" action_translation: "この翻訳を編集する" errors: @@ -3646,6 +3797,7 @@ ja: attachment_upload_not_allowed_for_new_user: "新規ユーザーはファイルを添付できません。" attachment_download_requires_login: "添付ファイルをダウンロードするには、ログインする必要があります。" cancel_composer: + confirm: "投稿を破棄しますか?" discard: "破棄" via_email: "これはメールで投稿されました" via_auto_generated_email: "この投稿は自動生成メール経由で届きました" @@ -3715,6 +3867,7 @@ ja: delete_post_notice: "公式通知を削除" remove_timer: "タイマーを削除" edit_timer: "タイマーを編集" + remove_yourself_from_pm: "このメッセージから自分自身を削除してもよろしいですか?このメッセージの閲覧または返信を行えなくなります。" actions: people: like: @@ -3827,6 +3980,7 @@ ja: general: "一般" settings: "設定" advanced: "高度" + show_advanced: "高度な設定" topic_template: "テンプレート" tags: "タグ" localizations: "ローカリゼーション" @@ -3851,22 +4005,42 @@ ja: delete: "削除" add: "必須タググループを追加する" placeholder: "タググループを選択…" + tag_group: "タググループ" topic_featured_link_allowed: "このカテゴリに注目のリンクを許可する" + delete: "カテゴリを削除する" + create: "新しいカテゴリ" create_long: "新しいカテゴリを作成する" + type_settings_schema: + site_settings: "サイトの設定" + save: "カテゴリを保存する" + unsaved_changes: "保存されていない変更があります" + slug: "カテゴリのスラッグ" + parent: "親カテゴリ" slug_placeholder: "(オプション) URL 用のダッシュ区切りの語" creation_error: カテゴリを作成中にエラーが発生しました。 save_error: カテゴリを保存中にエラーが発生しました。 + errors: + self_lockout: "カテゴリの権限を変更すると、自身のアクセスが失われます。続行してもよろしいですか?" validations: icon_required: "アイコンを選択する." + name: "カテゴリ名" + untitled: "無題のカテゴリ" description: "説明" + logo: "カテゴリのロゴ画像" + logo_dark: "カテゴリのダークモード用ロゴ画像" logo_description: "推奨アスペクト比は 1:1、最小サイズは 200px です。空白のままにすると、画像は表示されません。" + background_image: "カテゴリの背景画像" + background_image_dark: "カテゴリのダークモード用背景画像" style: "スタイル" icon: "アイコン" emoji: "絵文字" + select_emoji: "絵文字を選択する" background_color: "色" foreground_color: "テキストの色" color_validations: cant_be_empty: "空にできません" + incorrect_length: "#RRGGBB または #RGB の形式に一致する必要があります" + non_hexdecimal: "16 進文字 (0~9、A~F) のみを含む必要があります" styles: type: "スタイル" icon: "アイコン" @@ -3878,12 +4052,15 @@ ja: emoji: "絵文字" color_used: "使用中の色" predefined_colors: "既定の色オプション" + name_placeholder: "1 単語または 2 単語を推奨" color_placeholder: "すべてのウェブ色" delete_confirm: "このカテゴリを削除してもよろしいですか?" delete_error: "カテゴリを削除中にエラーが発生しました。" list: "カテゴリをリスト表示" no_description: "このカテゴリの説明を追加してください。" change_in_category_topic: "説明を編集する" + description_expand: "もっと表示" + description_collapse: "表示を減らす" already_used: "この色は他のカテゴリで使用されています。" color_palette: "色パレット" security: "セキュリティ" @@ -3894,6 +4071,7 @@ ja: reply: "返信" create: "作成" no_groups_selected: "アクセスを許可されたグループはありません。このカテゴリはスタッフにのみ表示されます。" + specific_groups_have_access: "このカテゴリは非公開であるため、選択されたグループのみが投稿を表示、返信、および作成できます。" toggle_reply: "返信権限の切り替え" toggle_full: "作成権限の切り替え" uncategorized_security_warning: "このカテゴリは特殊です。カテゴリのないトピックを保存するために用意されているため、セキュリティを設定できません。" @@ -3912,20 +4090,36 @@ ja: all_topics_wiki: "デフォルトで新しいトピックをウィキにする" allow_unlimited_owner_edits_on_first_post: "最初の投稿へのオーナーによる無制限の編集を許可する" subcategory_list_style: "サブカテゴリのリストのスタイル:" + sort_order: "トピックリストの並べ替え基準:" + default_view: "デフォルトのトピックリスト:" + default_top_period: "トップのデフォルトの期間:" + default_list_filter: "リストのデフォルトのフィルタ:" allow_badges_label: "このカテゴリでバッジの付与を許可する" + edit_permissions: "権限を編集する" reviewable_by_group: "このカテゴリのコンテンツはスタッフのほか、次のユーザーもレビューできます:" review_group_name: "グループ名" require_topic_approval: "すべての新しいトピックにモデレーターの承認を必要とする" require_reply_approval: "すべての新しい返信にモデレーターの承認を必要とする" + posting_review_modes: + no_one: "対象者なし" + everyone: "全員" + posting_review_groups_placeholder: "グループを選択..." this_year: "今年" position: "カテゴリページの位置:" + default_position: "デフォルトの位置" position_disabled: "カテゴリはアクティビティの順に表示されます。リスト内のカテゴリの順を制御するには、'カテゴリの位置の固定' 設定を有効にしてください。" minimum_required_tags: "トピックに必要なタグの最小数:" + default_slow_mode: 'このカテゴリの新しいトピックに「低速モード」を有効にします。' + subcategory_of: "親カテゴリ..." none_subcategory_text: "なし" + subcategory_permissions_warning: "非公開カテゴリのサブカテゴリは公開にできません。" visibility: title: "表示状態" public: "公開" + all_members: "すべてのメンバー" group_restricted: "非公開" + who_can_see: "このカテゴリを閲覧できるユーザー" + who_can_post: "このカテゴリに投稿できるユーザー" num_auto_bump_daily: "毎日自動的にバンプするオープントピックの数:" auto_bump_cooldown_days: "同じトピックをもう一度バンプするまでの最低日数:" navigate_to_first_post_after_read: "トピックが読まれた後最初の投稿に移動する" @@ -3947,14 +4141,18 @@ ja: title: "ミュート" description: "このカテゴリの新しいトピックについて何も通知されません。また最新にも表示されません。" search_priority: + label: "検索の優先度" options: normal: "通常" ignore: "無視" + very_low: "非常に低い" low: "低" high: "高" + very_high: "非常に高い" sort_options: default: "デフォルト" likes: "いいね!" + op_likes: "元の投稿の「いいね!」" views: "表示" posts: "投稿" activity: "アクティビティ" @@ -3975,6 +4173,7 @@ ja: email: "メール" list_filters: all: "すべてのトピック" + none: "サブカテゴリなし" colors_disabled: "category style が none であるため色を選択できません。" anonymous_flagging: title: "違法コンテンツの報告" @@ -4218,10 +4417,15 @@ ja: preloader_text: "読み込み中" lightbox: download: "ダウンロード" + open: "元の画像" + image_info: "画像の情報" + quote: "画像を引用" previous: "前へ (左矢印キー)" next: "次へ (右矢印キー)" counter: "%curr% / %total%" close: "閉じる (Esc)" + zoom: "拡大縮小 (Z キー)" + error: "画像を読み込めません" content_load_error: 'コンテンツを読み込めませんでした。' image_load_error: '画像を読み込めませんでした。' cannot_render_video: ブラウザがコーデックをサポートしていないため、この動画をレンダリングできません。 @@ -4243,6 +4447,7 @@ ja: latest: "%{shortcut} 最新" new: "%{shortcut} 新規" unread: "%{shortcut} 未読" + unseen: "%{shortcut} 未表示" categories: "%{shortcut} カテゴリ" top: "%{shortcut} トップへ" bookmarks: "%{shortcut} ブックマーク" @@ -4257,10 +4462,12 @@ ja: back: "%{shortcut} 戻る" up_down: "%{shortcut} 選択を移動 ↑ ↓" open: "%{shortcut} 選択したトピックを開く" + open_new_window: "%{shortcut} 選択したトピックを新しいタブ/ウィンドウで開く" next_prev: "%{shortcut} 次/前のセクション" go_to_unread_post: "%{shortcut} 最初の未読の投稿に移動" application: title: "アプリケーション" + create: "%{shortcut} 新しいトピックまたは個人メッセージを作成する" notifications: "%{shortcut} 通知を開く" hamburger_menu: "%{shortcut} ナビゲーションメニューを開く" user_profile_menu: "%{shortcut} ユーザーメニューを開く" @@ -4382,6 +4589,7 @@ ja: add_to_calendar: "カレンダーに追加" google: "Google カレンダー" ics: "ICS" + default_title: "スケジュール済みのイベント" tagging: all_tags: "すべてのタグ" other_tags: "他のタグ" @@ -4394,6 +4602,7 @@ ja: other: "少なくとも %{count} 個のタグを選択してください…" choose_for_topic_required_group: other: "'%{name}' から %{count} 個のタグを選択…" + info: "タグ情報を表示" default_info: "このタグはどのカテゴリにも制限されておらず、同義語もありません。" staff_info: "制限を追加するには、このタグをタググループに追加します。" category_restricted: "このタグは、アクセス権限のないカテゴリに制限されています。" @@ -4419,7 +4628,20 @@ ja: delete_confirm_synonyms: other: "その %{count} 個の同義語も削除されます。" edit_tag: "タグ名と説明を編集する" - description: "説明 (最大 1000 文字)" + edit: "このタグを編集" + description: "説明" + settings: + title: "設定" + general: "一般" + localizations: "ローカリゼーション" + back: "戻る" + name: "名前" + slug: "スラッグ" + name_placeholder: "タグ名" + localization: + locale: "ロケール" + name: "名前" + description: "説明" sort_by: "並べ替え:" sort_by_count: "件数" sort_by_name: "名前" @@ -4429,7 +4651,13 @@ ja: upload_description: "csv ファイルをアップロードしてタグを一括作成します" upload_instructions: "1 行に 1 つ、オプションで 'タグ名,タググループ' の形式でタググループを使用します。" upload_successful: "タグを正常にアップロードしました" + bulk_create_inline_placeholder: "タグを作成 (カンマ区切り)" bulk_create_button: "作成" + bulk_create_success: + other: "%{count} 個のタグを作成しました:" + bulk_create_already_exist: + other: "%{count} 個のタグがすでに存在します:" + bulk_create_some_failed: "一部のタグの作成に失敗しました:" delete_unused_confirmation: other: "%{count} 個のタグが削除されます: %{tags}" delete_unused_confirmation_more_tags: @@ -4461,13 +4689,18 @@ ja: description: "このタグのついた新しいトピックについては何も通知されず、未読タブにも表示されません。" groups: back_btn: "すべてのタグに戻る" + title: "タググループ" about_heading: "タググループの選択または新しいタググループの作成" about_heading_empty: "まず新しいタググループを作成します" about_description: "タググループでは、1 か所で複数のタグの権限を管理できます。" + new: "新しいグループ" + new_title: "グループの新規作成" + edit_title: "タググループの編集" tags_label: "このグループのタグ" parent_tag_label: "親タグ" parent_tag_description: "親タグがある場合、このグループのタグのみを使用できます。" one_per_topic_label: "トピック当たりこのグループから 1 つのタグに制限する" + new_name: "新しいタググループ" name_placeholder: "名前" save: "保存" delete: "削除" @@ -4509,6 +4742,7 @@ ja: safe_mode: enabled: "セーフモードが有効になっています。セーフモードを終了するには、このブラウザウィンドウを閉じてください。" theme_preview_notice: "現在、テーマをプレビューしています。通常のサイト構成に戻るには、このブラウザタブまたはウィンドウを閉じてください。" + theme_preview_failed: "テーマをプレビューできませんでした。テーマが存在しないか、テーマにアクセスする権限がありません。" image_removed: "(画像は削除されました)" pause_notifications: title: "通知を停止する…" @@ -4576,6 +4810,7 @@ ja: tags_form_modal: title: "タグナビゲーションを編集する" filter_placeholder: "タグをフィルタする" + no_tags: "現在のフィルタに一致するタグはありません。" subtitle: text: "このサイトの上位タグを自動的に表示します" edit_navigation_modal_form: @@ -4652,6 +4887,9 @@ ja: click_to_get_started: "ここをクリックして開始してください。" header_link_text: "カテゴリ" header_action_title: "サイドバーのカテゴリを編集" + header_action_new: "新しいカテゴリ" + header_action_edit_sidebar: "サイドバーのカテゴリを編集する" + header_action_edit_header_dropdown: "ナビゲーションのカテゴリを編集する" configure_defaults: "デフォルトの構成" community: edit_section: @@ -4721,6 +4959,8 @@ ja: light: "ライト" dark: "ダーク" auto: "自動" + title: "カラーモード" + aria_label: "カラーモード、現在 %{mode}" welcome_topic_banner: title: "ウェルカムトピックを作成しましょう" description: "ウェルカムトピックは、新しいメンバーが最初に読むものです。「エレベーターピッチ」や「ミッションステートメント」と考えると良いでしょう。このコミュニティーの対象者、ここで期待できること、最初にしてほしいことを伝えましょう。" @@ -4892,10 +5132,16 @@ ja: bookmarks: "ブックマークしたタグのない %{category} のトピック" default: "タグのない %{category} の%{filter}トピック" categories: "すべてのカテゴリ" + content_localization: + toggle_localized: + translated: "ページは機械翻訳されています。クリックすると元のページが表示されます。" + not_translated: "ページが翻訳されていません。クリックして翻訳してください。" + language_switcher: + title: "サイト言語の変更" admin_js: type_to_filter: "入力してフィルタ..." settings: "設定" - reset_filter: "リセット" + toggle_filters: "ドロップダウンのフィルタを切り替える" admin: title: "Discourse の管理者" moderator: "モデレーター" @@ -4908,9 +5154,11 @@ ja: never: "削除しない" reports: title: "使用可能なレポートのリスト" - meta_doc: "レポートは、サイトで起きていることを理解するのに役立つ強力なツールです。トレンドの特定、問題の発見、データに基づく決定に役立ちます。" sidebar_title: "レポート" back: "すべてのレポートに戻る" + group_traffic: "トラフィック" + group_members: "メンバー" + group_other: "その他" config_sections: account: title: "アカウント" @@ -4930,28 +5178,66 @@ ja: title: "高度" upcoming_changes: name: "名前" + plugin: "プラグイン" + metadata: "メタデータ" enabled: "有効" + enabled_for: "次を対象に有効化..." + show_image: "画像を表示" + edit_groups: "オプトイングループを編集" + groups_updated: "グループが更新されました!" + save_groups: "グループを保存" + add_groups_to_enable: "この機能を有効にするグループを追加する" + no_changes_to_save: "保存する変更はありません" select_groups: "グループを選択…" + opt_in_groups: "オプトイングループ" + opt_in_groups_instructions: "オプトイングループを使用すると、全ユーザーを対象に変更がリリースされる前に特定のユーザーグループがその変更をテストできるようになります。ただし、変更が安定ステータスに進むとこのグループは無効になります。" + enabled_for_throttle: "この変更を有効にする対象ユーザーの変更が早すぎます。数秒待ってからもう一度お試しください。" + change_enabled_for_success: "この変更を %{enabledFor} に対して有効にしました" + change_disabled: "この変更をオプトアウトしました" + permanent_notice: "この変更は正式版となったため、まもなく削除されます。今後オプトアウトすることはできません。" + permanent_no_group_selection: "利用できません。正式な変更がすべてのグループに適用されます。" + no_changes: "現在、次回の変更はありません。" preview: "プレビュー" enabled_for_options: + no_one: "対象者なし" everyone: "全員" - staff: "スタッフのみ" + specific_groups: "特定のグループ" + specific_groups_with_group_names: + other: "グループ %{groupNames}" statuses: experimental: "実験的" + alpha: "アルファ" + beta: "ベータ" + stable: "安定" + permanent: "正式" impact_roles: admins: "管理者" moderators: "モデレーター" staff: "スタッフ" + all_members: "すべてのメンバー" + developers: "開発者" filter: + search_placeholder: "名前、説明、またはプラグインでフィルタ..." + no_results: "フィルタに一致する次回の変更はありません" all: "すべて" enabled: "有効" disabled: "無効" + impact_type_all: "すべての影響タイプ" impact_type_feature: "機能" impact_type_other: "その他" + status_all: "すべてのステータス" + status_conceptual: "概念" status_experimental: "実験的" + status_alpha: "アルファ" + status_beta: "ベータ" + status_stable: "安定" + status_permanent: "正式" + impact_role_all: "すべての影響ロール" impact_role_admins: "管理者" impact_role_moderators: "モデレーター" impact_role_staff: "スタッフ" + impact_role_all_members: "すべてのメンバー" + impact_role_developers: "開発者" config: about: title: "サイトについて" @@ -4982,17 +5268,31 @@ ja: title: "ローカリゼーション" header_description: "コミュニティーのインターフェース言語とメンバー向けのその他のローカリゼーションオプションを構成します" keywords: "ロケール|言語|タイムゾーン|Unicode|ltr" + upcoming_changes: + title: "次回の変更" login: title: "ログインと認証" header_description: "ユーザーのログインと認証方法、シークレットと鍵、OAuth2 プロバイダーなどを構成します" sub_pages: common_settings: title: "設定" + authenticators: + title: "ソーシャルログイン" + discourseconnect: + title: "Discourse Connect" discourse_id: title: "Discourse ID" discourse_id: title: "Discourse ID" + stats: + total_users: "合計ユーザー数" + signups_30_days: "登録 (30 日間)" + logins_30_days: "ログイン (30 日間)" + regenerate_credentials: "認証情報を再作成する" + regenerate_confirm: "Discourse ID の認証情報を再作成してもよろしいですか?これにより、新しいクライアントシークレットが生成されます。通常、認証情報の再作成は必須ではありませんが、セキュリティの強化に役立ちます。" + description: "Discourse ID は、1 つのアカウントで複数の Discourse サイトにログインできるようにするシングルサインオンサービスです。Google、Facebook、Apple、GitHub などの一般的なソーシャルログインプロバイダーが追加構成なしでサポートされています。" learn_more: "もっと読む" + regenerate_success: "認証情報の再作成が完了しました。" logo: title: "ロゴ" header_description: "サイト全体で使用されるロゴとアイコンを構成します" @@ -5008,7 +5308,6 @@ ja: help_text: "推奨サイズは 600 x 80 ピクセルです。" large_icon: title: "正方形のアイコン" - description: "管理の上部に正方形バージョンのロゴの画像が表示されます。モバイル版ホーム画面のアプリロゴでもあります。" help_text: "推奨サイズは 512 x 512 ピクセルです。" square_icon_dark: required: "ダークモードでは別の正方形のアイコンを使用しますか?" @@ -5079,24 +5378,61 @@ ja: modal_yes: "はい" modal_no: "いいえ。今後適用する" welcome_banner: + title: "ウェルカムバナー" + header_description: "サイトの訪問者に表示される検索バー付きバナーを構成します。" + saved: "ウェルカムバナーの設定が保存されました。" form: + enabled_themes: + label: "テーマで有効化済み..." + description: "バナーを表示するテーマを選択します。アクティブなテーマのみが表示されます。" + select_label: "テーマを選択する" + background_image: + label: "背景画像" + description: "この画像はバナーテキストの背後に表示されます。" text_color: label: "テキストの色" + description: "上記の背景画像をアップロードした場合、この設定を使用してバナーを読み取りやすいテキストの色に変更してください。空白のままにするか、背景画像をアップロードしなかった場合は、アクティブなテーマによって色が設定されます。" page_visibility: + label: "ページの表示状態" + description: "バナーを表示する場所を選択します。" options: top_menu_pages: "トップメニューページ" + homepage: "ホームページのみ" + discovery: "発見ページ" all_pages: "すべてのページ" location: label: "場所" + description: "バナーを表示するページ内の場所を選択します。" options: above_topic_content: "トピックコンテンツの上" below_site_header: "サイトヘッダーの下" text_section: + title: "カスタマイズ可能なテキスト" locale_label: "言語" + header_new_members: + label: "新しいメンバー向けのヘッダー" + description: "利用可能な変数: %{site_name}%{preferred_display_name}" + placeholder: "%{preferred_display_name}、ようこそ!" header_logged_in: + label: "ログイン済みメンバー向けのヘッダー" + description: "利用可能な変数: %{site_name}%{preferred_display_name}" placeholder: "%{preferred_display_name}、おかえりなさい!" header_anonymous: + label: "匿名の訪問者向けのヘッダー" + description: "利用可能な変数: %{site_name}" placeholder: "%{site_name} へようこそ!" + subheader_logged_in: + label: "ログイン済みメンバー向けのサブヘッダー" + description: "ログイン済みユーザー向けのヘッダーの下に表示されるセカンダリテキスト。" + placeholder: "コミュニティーの新機能をご覧ください" + subheader_anonymous: + label: "匿名の訪問者向けのサブヘッダー" + description: "匿名の訪問者向けのヘッダーの下に表示されるセカンダリテキスト。" + placeholder: "コミュニティに参加してディスカッションに参加しましょう" + search_placeholder: + label: "検索プレースホルダー" + description: "ウェルカムバナーの検索ボックスのプレースホルダーテキスト。" + placeholder: "トピックを検索..." navigation: title: "ナビゲーション" header_description: "サイトのナビゲーションリンクとメニュー項目を構成します。これには、メインのナビゲーションメニュー、ホームページ上部のクイックリンク、および管理者サイドバーの場所と動作が含まれます。" @@ -5158,7 +5494,7 @@ ja: header_description: "レポートは、サイトで起きていることを理解するのに役立つ強力なツールです。トレンドの特定、問題の検出、データに基づく決定に役立ちます。" sub_pages: settings: - title: "ダッシュボードの設定" + title: "設定" badges: title: "バッジ" header_description: "コミュニティー内での前向きな行動と取り組みを認識、検証、奨励するために、バッジによってユーザーの活動、貢献、および実績を称えます" @@ -5299,6 +5635,9 @@ ja: select_setting: "サイトの設定を選択して現在のテーマの値を確認してください" add: "テーマサイト設定に移動" help: "現在使用しているテーマは %{currentTheme} です。テーマ構成ページに移動すると、テーマサイト設定を変更できます。または以下のテーブルでリンクされたテーマをクリックすると、その設定を編集できます。" + filter: "設定名、説明、またはテーマ名でテーマサイト設定をフィルタ..." + filter_no_results: "フィルタに一致するテーマサイト設定はありません" + site_setting_warning: 'この設定は、サイトのデフォルトのテーマ (%{defaultThemeName}) によって管理されています。テーマの編集ページで変更できます。' search: modal_title: "管理者のすべての項目を検索" title: "検索" @@ -5307,17 +5646,6 @@ ja: no_results: '「%{filter}」に一致するものは見つかりませんでした。' result_count: other: '「%{filter}」の %{count} 件の結果' - result_types: - page: - other: "ページ" - report: - other: "レポート" - setting: - other: "設定" - theme: - other: "テーマ" - component: - other: "コンポーネント" new_features: title: "新機能" check_for_updates: "アップデートを確認" @@ -5340,24 +5668,8 @@ ja: new_features: title: "新機能" subtitle: "新しい機能や改善機能は常にリリースされています。このページでは主な内容を説明していますが、'詳細' をクリックすると、さらに詳しく説明されたリリースノートをご覧いただけます。" + no_new_features_error: "フィードを読み込み中にエラーが発生しました。以前の新機能の発表は Discover Meta コミュニティーをご覧ください。" learn_more: "もっと詳しく..." - experimental: "実験的" - only_experiments: "実験的機能のみを表示" - experiment_enabled: "実験的機能を有効にしました。" - experiment_disabled: "実験的機能を無効にしました。" - feature_enabled: "機能を有効にしました。" - feature_disabled: "機能を無効にしました。" - toggled_too_fast: "切り替え操作が速すぎます。数秒待ってから、もう一度お試しください。" - experiment_tooltip: - title_disabled: "この実験的機能を試す" - title_enabled: "実験的機能をオフにする" - content_disabled: "開発中の最新の機能をぜひお試しください!実験段階であるため、いつか削除される可能性があります。いつでもオプトアウトできます。

これを変更すると、すべてのユーザーに対して機能が有効になります。" - content_enabled: "これを変更すると、すべてのユーザーに対して機能が無効になります。" - feature_tooltip: - title_disabled: "この機能を試す" - title_enabled: "機能をオフにする" - content_disabled: "この新機能をぜひお試しください!いつでもオプトアウトできます。

これを変更すると、すべてのユーザーに対して機能が有効になります。" - content_enabled: "これを変更すると、すべてのユーザーに対して機能が無効になります。" last_checked: "最終チェック" refresh_problems: "更新" no_problems: "問題は見つかりませんでした。" @@ -5416,10 +5728,11 @@ ja: all: "すべて" view_table: "テーブル" view_graph: "グラフ" - refresh_report: "レポートを更新" + refresh_report: "更新" daily: 日間 monthly: 月間 weekly: 週間 + value_so_far: "%{value} (現在まで)" dates: "日付 (UTC)" groups: "すべてのグループ" disabled: "このレポートは無効化されています" @@ -5430,7 +5743,9 @@ ja: trending_search: more: '検索ログ' disabled: 'トレンド検索レポートは無効です。データを収集するには、ログ検索クエリを有効にしてください。' + average_chart_label: 合計ではなく平均を表示中 sort_button: "%{column} で並べ替え" + sort_button_current: "%{column} の%{direction}で並べ替え済み" sort_ascending: "昇順" sort_descending: "降順" filters: @@ -5600,6 +5915,7 @@ ja: recover: トピックを復元します。 read_lists: 人気、新規、最新などのトピックリストを読み取ります。RSS もサポートされています。 status: "トピックのステータスを更新します。ステータス: 閉鎖、アーカイブ、表示、固定。有効: true、false。category_id をこことリクエストペイロードに指定すると、そのカテゴリのトピックのみのステータスを変更できます。" + change_owner: トピック内の投稿の所有権を変更します。 posts: edit: 任意の投稿または特定の投稿を編集します。 delete: 投稿を削除します。 @@ -5632,6 +5948,7 @@ ja: suspend: ユーザーアカウントを凍結します。 delete: ユーザーのアカウントを削除します。 list: ユーザーのリストを取得します。 + create: 新しいユーザーを作成します。 user_status: read: ユーザーステータスを読み取ります。 update: ユーザーステータスを更新します。 @@ -5735,6 +6052,7 @@ ja: user_destroyed: "ユーザーが削除された" user_suspended: "ユーザーが凍結された" user_unsuspended: "ユーザーが凍結解除された" + user_anonymized: "ユーザーは匿名です" reviewable_event: group_name: "レビュー待ち項目イベント" reviewable_created: "レビュー待ち項目がある" @@ -5964,8 +6282,10 @@ ja: install: "インストール" theme_site_settings: title: "テーマサイト設定" + description: "基本サイト設定の小さなサブセットをオーバーラドすることで、テーマがサイト全体のエクスペリエンスをより細かく制御できるようにする設定です。" themes: title: "テーマ" + description: "すべてのユーザーを対象にサイトの外観を変更するサイト全体のテーマです。" themes_intro: "新しいテーマをインストールするか、これらのリソースを使用して独自のテーマを新規作成します。" new_theme: "新しいテーマ" back: "テーマに戻る" @@ -6030,6 +6350,8 @@ ja: title: "色オプション" toggle: "ユーザー選択可能" toggle_description: "ユーザーが色パレットを選択できます" + toggle_default_light_on_theme: "色パレットはデフォルトテーマ (%{themeName}) のデフォルトのライトパレットです" + toggle_default_dark_on_theme: "色パレットはデフォルトテーマ (%{themeName}) のデフォルトのダークパレットです" colors: title: "色" save_changes: "変更を保存" @@ -6120,6 +6442,7 @@ ja: confirm: "このバックアップを削除してもよろしいですか?" restore: is_disabled: "復元は現在無効になっています。有効にするには、サイト設定にアクセスしてください。" + is_disabled_title: "復元は現在無効になっています。有効にするには、サイト設定の「復元を許可」を検索してください。" label: "復元" title: "バックアップの復元" confirm: "バックアップを復元してもよろしいですか?" @@ -6168,14 +6491,19 @@ ja: copy_to_clipboard: "クリップボードにコピー" copied_to_clipboard: "クリップボードにコピーしました" copy_to_clipboard_error: "データをクリップボードにコピーする際にエラーが発生しました" + theme_owner: "オーナー:" email_templates: title: "メール" subject: "件名" multiple_subjects: "このメールテンプレートには複数の件名があります。" + multiple_bodies: "このメールテンプレートには複数の本文があります。" body: "本文" revert: "変更を戻す" revert_confirm: "変更を戻してよろしいですか?" + search_templates: "テンプレート名でフィルタ..." + no_templates_found: "フィルタに一致するテンプレートはありません。" edit: "編集" + back: "テンプレートに戻る" component: all_filter: "すべて" used_filter: "使用中" @@ -6210,6 +6538,8 @@ ja: create_name: "名前" save: "保存" long_title: "サイトの色、CSS、HTML コンテンツの修正" + dark_mode: "%{themeName} ダークモード" + light_mode: "%{themeName} ライトモード" edit: "編集" edit_confirm: "これはリモートのテーマです。CSS/HTML を編集しても、その変更は次にテーマを更新する際に消去されます。" update_confirm: "これらのローカルの変更は更新によって消去されます。続行してもよろしいですか?" @@ -6254,6 +6584,7 @@ ja: set_default_success: "デフォルトのテーマは %{theme} に設定されました" setting_was_saved: "テーマ設定は保存されました" install_success: "%{theme} が正常にインストールされました!" + delete_success: "%{theme} は削除されました!" inactive_components: "未使用のコンポーネント:" selected: other: "%{count} 個選択済み" @@ -6293,7 +6624,6 @@ ja: import_web_tip: "テーマを含むリポジトリ" direct_install_tip: "下にリストされているリポジトリから %{name} をインストールしてもよろしいですか?" import_web_advanced: "高度…" - import_file_tip: "テーマを含む .tar.gz、.zip、または .dcstyle.json ファイル" is_private: "テーマはプライベート git リポジトリにあります" finish_install: "テーマのインストールを終了" last_attempt: "インストールプロセスが終了しませんでした。最終試行:" @@ -6419,10 +6749,13 @@ ja: select_base: title: "基本色パレットを選択してください" description: "基本パレット:" + non_default_theme_warning: "あなたが使用するテーマの個人設定はデフォルトとは異なるため、ここで行った変更はあなたには適用されない可能性がありますが、デフォルト (%{themeName}) を使用するすべてのユーザーに適用されます。" + custom_schemes_warning: "%{colorModes} 色パレットのあなたの個人設定はデフォルトと異なるため、%{colorModes} パレットへの変更はあなたには適用されない可能性がありますが、デフォルトを使用しているすべてのユーザーに適用されます。" light: "ライト" dark: "ダーク" title: "色" edit: "編集" + view: "表示" set_default_light: "デフォルトのテーマのライトパレットとして設定する (%{theme})" set_default_dark: "デフォルトのテーマのダークパレットとして設定する (%{theme})" set_default_success: "%{schemeName} を %{themeName} のデフォルトのパレットとして設定しました" @@ -6440,6 +6773,7 @@ ja: reset: "フィルタをリセット" default_dark_badge: text: "デフォルトのダーク" + title: "デフォルトのダークの色パレット" system_palette: "これは組み込みの色パレットであるため、編集または削除できません。" back_to_colors: "色パレットに戻る" long_title: "色パレット" @@ -6759,6 +7093,11 @@ ja: tag_group_change: "タググループの変更" delete_associated_accounts: "関連アカウントの削除" change_theme_site_setting: "テーマサイト設定を変更" + stop_impersonating: "代理操作を終了" + upcoming_change_toggled: "次回の変更が切り替えられました" + upcoming_change_available: "次回の変更を利用できます" + change_site_setting_groups: "サイト設定グループを変更する" + discourse_id_regenerate_credentials: "Discourse ID の認証情報を再作成する" screened_emails: title: "スクリーン対象メール" description: "誰かが新規アカウントを作成すると、次のメールアドレスがチェックされるか、登録がブロックされるか、ほかの操作が実行されます。" @@ -6812,6 +7151,7 @@ ja: clear_all: すべてクリア clear_all_confirm: "%{action}操作のすべてのウォッチ語をクリアしてもよろしいですか?" invalid_regex: 'ウォッチ語 "%{word}" は無効な正規表現です。' + invalid_regex_multiple: "無効な正規表現:" regex_warning: 'ウォッチ語は正規表現で、語の境界は自動的に含まれることはありません。全語に一致する正規表現が必要な場合は、正規表現の最初と最後に \b を含めます。' actions: block: "ブロック" @@ -6844,6 +7184,7 @@ ja: success: "成功" exists: "すでに存在します" upload: "ファイルから追加" + upload_successful: "アップロードが完了しました。語はまもなく処理されます。" case_sensitivity_label: "大文字と小文字を区別" case_sensitivity_description: "大文字と小文字が一致する語のみ" html_label: "HTML" @@ -6894,6 +7235,7 @@ ja: upload: "ファイルをアップロードする" multiselect: "複数選択" tagchooser: "タググループのセレクター" + composer: "Markdown回答" validations_modal: button_title: "検証" modal_title: "検証オプション" @@ -6935,7 +7277,10 @@ ja: second: "オプション 2" third: "オプション 3" edit_category: + toggle_freeform: "フォームテンプレートは無効です" + toggle_form_template: "フォームテンプレートは有効です" select_template: "フォームテンプレートを選択する" + select_template_help: "フォームテンプレートの追加/編集" errors: multiple_tags_not_allowed: '「%{tag_name}」からこれ以上のタグを選択できません。問題を回避するには、フォームテンプレートを使用してください' impersonate: @@ -6943,6 +7288,7 @@ ja: help: "このツールを使用して、デバッグ目的でユーザーアカウントを代理操作します。作業を終了したら、ログアウトしてください。" not_found: "ユーザーが見つかりません。" invalid: "このユーザーを代理して操作できません。" + error: "予期しないエラーが発生しました。" users: title: "ユーザー" description: "ユーザーの表示と管理を行います。" @@ -7047,6 +7393,14 @@ ja: penalty_post_actions: "関連する投稿についてどうしますか?" penalty_post_delete: "投稿を削除する" penalty_post_delete_replies: "投稿と返信を削除する" + penalty_post_delete_all: "ユーザーによるすべてのトピックと返信を削除する" + penalty_post_delete_all_confirmation_MF: | + これにより、{ TOPICS, plural, + other {# 件のトピック} + }と + { REPLIES, plural, + other {# 件の返信} + }が削除されます。この操作は元に戻せません!続行してもよろしいですか? penalty_post_edit: "投稿を編集する" penalty_post_none: "何もしない" penalty_count: "ペナルティ数" @@ -7104,6 +7458,11 @@ ja: approve_bulk_success: "成功!選択したすべてのユーザーは承認され、通知が送信されました。" time_read: "閲覧時間" post_edits_count: "投稿の編集" + upcoming_changes: + title: "ユーザー向けの次回の変更" + description: "グループを変更するか、次回の変更を有効化または無効化するには、次回の変更の構成ページにアクセスしてください。" + filter_placeholder: "名前または説明で次回の変更をフィルタ" + filter_no_results: "次回の変更は見つかりませんでした" exports: title: ユーザーのエクスポート download: @@ -7127,6 +7486,8 @@ ja: button: "すべての投稿を削除する" progress: title: "投稿の削除状況" + description: + other: "@%{username} の %{count} 件の投稿を削除中..." confirmation: title: "@%{username} のすべての投稿を削除" description: | @@ -7138,6 +7499,7 @@ ja: text: "@%{username} の投稿を削除する" delete: "@%{username} の投稿を削除する" cancel: "キャンセル" + all_enqueued: "@%{username} のすべての投稿は削除待ちです" merge: button: "マージ" prompt: @@ -7164,6 +7526,8 @@ ja: cancel: "キャンセル" merging_user: "ユーザーをマージ中…" merge_failed: "ユーザーをマージ中にエラーが発生しました。" + delete_forbidden_because_admin: "管理者は削除できません。" + delete_posts_forbidden_because_admin: "管理者の投稿をすべて削除することはできません。" delete_forbidden: other: "投稿が存在するユーザーを削除できません。ユーザーを削除する前にすべての投稿を削除してください。(%{count} 日以上経過した投稿は削除できません)" cant_delete_all_posts: @@ -7305,6 +7669,10 @@ ja: title: "ユーザーカードに表示" enabled: "ユーザーカードに表示" disabled: "ユーザーカードに表示しない" + show_on_signup: + title: "登録フォームに表示" + enabled: "登録フォームに表示" + disabled: "登録フォームに非表示" searchable: title: "検索可能" enabled: "検索可能" @@ -7312,6 +7680,7 @@ ja: field_types: text: "テキスト" textarea: "テキストエリア" + date: "日付" confirm: "確認" dropdown: "ドロップダウン" multiselect: "複数選択" @@ -7375,6 +7744,9 @@ ja: label: "アップロード" title: "画像のアップロード" download_file: "ダウンロード" + upload_restrictions: + extensions: "利用可能な形式: %{extensions}" + max_size: "最大サイズ: %{size}" selectable_avatars: title: "ユーザーが選択できるアバターのリスト" table_column_heading: @@ -7413,6 +7785,7 @@ ja: experimental: "実験的" secret_list: invalid_input: "入力フィールドを空にしたり、縦棒文字を含めることはできません。" + already_exists: "%{key} のエントリはすでに存在します。" default_categories: modal_description: other: "この変更を過去に適用しますか?これにより、既存の %{count} 人のユーザーの設定が変更されます。" @@ -7436,13 +7809,23 @@ ja: prompt: "この設定を変更すると、サイトに広範に適用されるか意図しない結果が生じる可能性があります。続行してもよろしいですか?" confirm: "はい" min_password_length: + prompt: "パスワードポリシーを変更しようとしています。これは、今後すべてのユーザーのパスワード変更に影響します。続行してもよろしいですか?" confirm: "はい。パスワードポリシーを更新します" min_admin_password_length: + prompt: "パスワードポリシーを変更しようとしています。これは、今後すべての管理者のパスワード変更に影響します。続行してもよろしいですか?" confirm: "はい。パスワードポリシーを更新します" - password_unique_charactes: + password_unique_characters: + prompt: "パスワードポリシーを変更しようとしています。これは、今後すべてのユーザーのパスワード変更に影響します。続行してもよろしいですか?" confirm: "はい。パスワードポリシーを更新します" block_common_passwords: + prompt: "パスワードポリシーを変更しようとしています。これは、今後すべてのユーザーのパスワード変更に影響します。続行してもよろしいですか?" confirm: "はい。パスワードポリシーを更新します" + clean_up_inactive_users_after_days: + prompt: "この値を 0 以外に設定すると、その日数以上アクティブでないユーザーが完全に削除されます。続行してもよろしいですか?" + confirm: "はい。この値を 0 に設定しない限り、非アクティブなユーザーが完全に削除されることを理解しています" + job_status: + completed: "更新完了" + enqueued: "更新中" badges: status: ステータス title: バッジ @@ -7477,6 +7860,7 @@ ja: no_badges: 付与できるバッジがありません。 none_selected: "開始するにはバッジを選択してください" sections: + design: デザイン query: クエリ settings: 設定 usage_heading: 使用方法 @@ -7576,6 +7960,7 @@ ja: category: "カテゴリへ投稿" tags: "トピックのタグ" post_author: "投稿者" + post_author_description: "このホストから埋め込まれたすべてのトピックの作成者。ブログページのメタタグをオーバーライドします。空白にすると、ページの または タグの作成者を読み取ります。" post_author_with_default: "投稿者 (デフォルトは %{author})" add_host: "ホストを追加" posts_and_topics: "投稿とトピックの構成" diff --git a/config/locales/client.ko.yml b/config/locales/client.ko.yml index b91cc6cc46d12..8d34b9a3ddbc3 100644 --- a/config/locales/client.ko.yml +++ b/config/locales/client.ko.yml @@ -6,6 +6,11 @@ ko: js: + blocks: + ghost: + status: "상태" + hidden: "숨김" + failed: "실패" number: format: separator: "." @@ -274,6 +279,8 @@ ko: pill: "추천" pm_title: "제안된 메시지" admin_onboarding_banner: + start_posting: + back: "뒤로" spread_the_word: action: "링크 복사" about: @@ -335,8 +342,6 @@ ko: other: "%{count}년 전에 생성됨" bookmarked: title: "북마크" - edit_bookmark: "북마크 편집" - clear_bookmarks: "북마크 지우기" help: bookmark: "이 글을 북마크하려면 클릭하세요" edit_bookmark: "이 글에 대한 북마크를 편집하려면 클릭하십시오." @@ -355,11 +360,11 @@ ko: clear_reminder: "미리 알림 지우기" edit: "북마크 편집" not_bookmarked: "이 게시물 북마크하기" + topic_bookmark: "글" remove_reminder_keep_bookmark: "미리 알림 제거 및 북마크 유지" created_with_reminder: "%{date} 미리 알림과 함께 이 게시물을 북마크했습니다. %{name}" delete: "북마크 삭제" confirm_delete: "이 북마크를 삭제할까요? 미리 알림도 삭제됩니다." - confirm_clear: "이 글의 모든 북마크를 지우시겠습니까?" save: "저장" no_timezone: '아직 시간대를 설정하지 않아 미리 알림을 설정할 수 없습니다. 프로필에서 설정하세요.' invalid_custom_datetime: "입력한 날짜와 시간이 유효하지 않습니다. 다시 시도하세요." @@ -472,7 +477,6 @@ ko: enable_plugins: "플러그인 사용" explain: why: "이 항목이 대기열에 있는 이유 설명" - title: "검토 가능 점수" formula: "공식" subtotal: "소계" total: "합계" @@ -486,10 +490,8 @@ ko: title: "신고가 수락된 경우 신고자에게 보너스가 주어집니다." trust_level_bonus: name: "회원 레벨" - title: "신뢰 레벨이 더 높은 사용자가 만든 검토 가능 항목은 더 높은 점수를 받습니다." type_bonus: name: "유형 보너스" - title: "특정한 검토 유형에는 관리자가 보너스를 할당하여 우선 순위를 높일 수 있습니다." revise_and_reject_post: title: "수정" reason: "이유" @@ -498,7 +500,6 @@ ko: custom_reason: "이유를 명확하게 설명해 주세요." other_reason: "기타..." optional: "선택 사항" - stale_help: "이 검토 가능 항목은 %{username} 님이 해결했습니다." claim_help: optional: "다른 사용자가 검토하지 못하도록 이 항목을 독점할 수 있습니다." required: "항목을 검토하려면 먼저 항목을 독점해야 합니다." @@ -1278,6 +1279,9 @@ ko: tags: "태그" interface: "인터페이스" apps: "앱" + calendar_subscriptions: + copied: "복사되었습니다!" + add_to_google: "구글 캘린더" change_password: success: "(이메일 전송됨)" in_progress: "(이메일 전송 중)" @@ -1769,6 +1773,7 @@ ko: form_kit: reset: 리셋 optional: 선택 사항 + required: 필수 errors: required: "필수" too_short: @@ -2363,8 +2368,6 @@ ko: max_views: placeholder: 최대 aria_label: 최대 조회수로 필터링 - additional_options: - label: "게시물 수 및 글 조회수로 필터링" new_item: "새로운" go_back: "뒤로 가기" not_logged_in_user: "현재 활동 및 환경설정에 대한 요약이 포함된 사용자 페이지" @@ -2400,10 +2403,7 @@ ko: confirm: "확인" select_all: "모두 선택" clear_all: "모두 지우기" - unlist_topics: "목록에서 글 숨기기" - relist_topics: "목록에서 글 다시 표시" reset_bump_dates: "끌어올림 날짜 초기화" - delete: "글 삭제" delete_topics_count: other: "글 삭제" dismiss: "무시" @@ -2420,19 +2420,13 @@ ko: other: "새글 읽음으로 표시 (%{count})" toggle: "글 일괄 선택 전환" actions: "일괄 작업" - close_topics: "글 닫기" - archive_topics: "글 보관" move_messages_to_inbox: "받은 편지함으로 이동" change_notification_level: "알림 수준 변경" choose_new_category: "글에 대한 새 카테고리 선택:" - selected: - other: "%{count}개의 글을 선택했습니다." - change_tags: "태그 대체" append_tags: "태그 추가" choose_new_tags: "다음 글에 대한 새 태그 선택:" - choose_append_tags: "다음 글에 추가할 새 태그 선택:" + choose_append_tags: "태그 추가" changed_tags: "해당 글의 태그가 변경되었습니다." - remove_tags: "모든 태그 제거" confirm_remove_tags: other: "%{count}개의 글에서 태그가 모두 제거됩니다. 계속할까요?" progress: @@ -2464,14 +2458,10 @@ ko: name: "받은 편지함으로 이동" remove_tags: name: "태그 제거" - append_tags: - name: "태그 추가" replace_tags: name: "태그 바꾸기" delete_topics: name: "삭제하기" - update_category: - description: "선택한 글에 맞는 새 카테고리를 선택하세요." update_notifications: name: "업데이트 알림" topic: @@ -3093,6 +3083,8 @@ ko: delete_error: "카테고리를 삭제하는 중에 오류가 발생했습니다." no_description: "이 카테고리에 대한 설명을 추가하세요." change_in_category_topic: "설명 수정" + description_expand: "더 보기" + description_collapse: "간략히 보기" already_used: "이 색은 다른 카테고리에서 사용 중입니다" security: "보안" security_add_group: "그룹 추가" @@ -3123,6 +3115,9 @@ ko: review_group_name: "그룹명" require_topic_approval: "모든 새 주제에 대해 운영자 승인 필요" require_reply_approval: "모든 새 댓글에 대해 운영자 승인 필요" + posting_review_modes: + everyone: "모두" + posting_review_groups_placeholder: "그룹 선택..." this_year: "올해" position: "카테고리 페이지에서의 위치:" minimum_required_tags: "주제에 필요한 최소 태그 수:" @@ -3525,6 +3520,18 @@ ko: delete_confirm_synonyms: other: "%{count}개의 동의어도 삭제됩니다." edit_tag: "태그 이름 및 설명 편집" + description: "내용" + settings: + title: "설정" + general: "일반" + back: "뒤로" + name: "그룹명" + slug: "강타" + name_placeholder: "태그명" + synonyms_subtitle: "다음 태그를 사용하면 %{name} 으로 대체됩니다" + localization: + name: "그룹명" + description: "내용" sort_by: "정렬 기준:" sort_by_count: "개수" sort_by_name: "이름" @@ -3768,7 +3775,6 @@ ko: admin_js: type_to_filter: "필터 입력..." settings: "설정" - reset_filter: "리셋" admin: title: "Discourse 관리자" moderator: "운영자" @@ -3781,6 +3787,9 @@ ko: reports: title: "사용 가능한 리포트 목록" sidebar_title: "보고서" + group_traffic: "트래픽" + group_members: "회원" + group_other: "기타" config_sections: account: title: "계정" @@ -3802,7 +3811,6 @@ ko: preview: "미리 보기" enabled_for_options: everyone: "모두" - staff: "직원 만" impact_roles: admins: "관리자" moderators: "관리자" @@ -3890,6 +3898,9 @@ ko: title: "로그" reports: title: "보고서" + sub_pages: + settings: + title: "설정" badges: title: "배지" permalinks: @@ -3938,17 +3949,6 @@ ko: default_value: "기본" search: title: "검색" - result_types: - page: - other: "페이지" - report: - other: "보고서" - setting: - other: "설정" - theme: - other: "테마" - component: - other: "구성 요소" dashboard: title: "대시보드" last_updated: "대시보드 업데이트됨:" @@ -4015,7 +4015,7 @@ ko: all: "전체" view_table: "표" view_graph: "그래프" - refresh_report: "리포트 새로고침" + refresh_report: "새로 고침" daily: 매일 monthly: 매달 weekly: 매주 @@ -4529,7 +4529,6 @@ ko: add_all: "모두 추가" import_web_tip: "테마가 있는 저장소" direct_install_tip: "아래의 저장소에서 %{name} 설치를 진행할까요?" - import_file_tip: "테마가 포함된 .tar.gz, .zip 또는 .dcstyle.json 파일" is_private: "테마는 비공개 Git 저장소에 있습니다" finish_install: "테마 설치 완료" remote_branch: "브랜치 이름(선택사항)" @@ -5246,6 +5245,7 @@ ko: disabled: "검색할 수 없음" field_types: text: "텍스트" + date: "날짜" confirm: "확인" dropdown: "드롭다운" multiselect: "다중 선택" diff --git a/config/locales/client.lt.yml b/config/locales/client.lt.yml index 513b06839602b..3b8925407e64c 100644 --- a/config/locales/client.lt.yml +++ b/config/locales/client.lt.yml @@ -6,6 +6,12 @@ lt: js: + blocks: + ghost: + status: "Statusas" + in_location: "į" + hidden: "paslėptas" + failed: "nepavyko" carousel: go_to_slide: "Eiti į skaidrę %{index}" previous: "Ankstesnė skaidrė" @@ -343,6 +349,8 @@ lt: pill: "Siūloma" pm_title: "Rekomenduojamos žinutės" admin_onboarding_banner: + start_posting: + back: "Atgal" spread_the_word: action: "Nukopijuoti nuorodą" copied_to_clipboard: "Nuoroda nukopijuota į iškarpinę!" @@ -455,8 +463,6 @@ lt: other: "Sukurta prieš %{count} metų" bookmarked: title: "Žymės" - edit_bookmark: "Redaguoti žymę" - clear_bookmarks: "Pašalinti žymes" help: bookmark: "Spustelėkite norėdami pažymėti šią temą" edit_bookmark: "Spustelėkite, jei norite redaguoti pažymėjimą šios įrašo šioje temoje" @@ -475,12 +481,12 @@ lt: clear_reminder: "Išvalyti priminimą." edit: "Redaguoti žymę" not_bookmarked: "pažymėkite šį įrašą" + topic_bookmark: "Tema" remove_reminder_keep_bookmark: "Pašalinkite priminimą ir išsaugokite žymę" created_with_reminder: "Jūs pažymėjote šį įrašą priminimu %{date}. %{name}" created_with_reminder_generic: "Jūs pažymėjote tai su priminimu %{date}. %{name}" delete: "Ištrinti žymę" confirm_delete: "Ar tikrai norite ištrinti šią žymę? Priminimas taip pat bus ištrintas." - confirm_clear: "Ar tikrai norite išvalyti visas savo žymes iš šios temos?" save: "Saugoti" no_timezone: 'Jūs dar nenustatėte laiko juostos. Negalėsite nustatyti priminimų. Nustatykite vieną iki savo profilyje.' invalid_custom_datetime: "Pateikta data ir laikas yra neteisingi, bandykite dar kartą." @@ -607,21 +613,13 @@ lt: in_reply_to: "atsakant į" filtered_flagged_by: "Pažymėjo" unknown: - title: - one: "Yra laukiančių peržiūrų dėl išjungto papildinio:" - few: "Yra laukiančių peržiūrų dėl išjungto papildinio:" - many: "Yra laukiančių peržiūrų dėl išjungto papildinio:" - other: "Yra laukiančių peržiūrų dėl išjungtų papildinių:" instruction: "Jie negalės būti tinkamai rodomi, kol neįgalinsite atitinkamo papildinio. Įjunkite papildinį ir atnaujinkite puslapį. Arba galite jų ignoruoti. Sužinokite daugiau..." reviewable_unknown_source: "%{reviewableType} (nežinomas įskiepis)" reviewable_known_source: "%{reviewableType} (iš „%{pluginName}“ įskiepio)" ignore_all: "Ignoruoti viską" enable_plugins: "Įjungti papildinius" - delete_confirm: "Ar tikrai norite ištrinti visas išjungtų papildinių sukurtas apžvalgas?" - ignore_success: "Visos išjungtų papildinių sukurtos apžvalgos buvo ištrintos." explain: why: "paaiškinkite, kodėl šis elementas atsidūrė eilėje" - title: "Peržiūrimas balas" formula: "Formulė" subtotal: "Tarpinė suma" total: "Viso" @@ -635,10 +633,8 @@ lt: title: "Naudotojams, kurių vėliavoms istoriškai pritarta, suteikiama premija." trust_level_bonus: name: "patikimumo lygis" - title: "Peržiūrimi elementai, sukurti aukštesnio pasitikėjimo lygio naudotojų, turi didesnį balą." type_bonus: name: "tipo premija" - title: "Tam tikriems peržiūrėtiems tipams darbuotojai gali priskirti premiją, kad jie taptų aukštesniu prioritetu." revise_and_reject_post: title: "Pataisyti" reason: "Priežastis" @@ -647,7 +643,6 @@ lt: custom_reason: "Pateikite aiškų priežasties aprašymą" other_reason: "Kiti..." optional: "pasirinktinai" - stale_help: "Ši peržiūra buvo išspręsta %{username}." claim_help: optional: "Galite pareikšti teises į šį elementą, kad kiti negalėtų jo peržiūrėti." required: "Turite pareikšti teises į elementus, kad galėtumėte juos peržiūrėti." @@ -1522,6 +1517,9 @@ lt: interface: "Sąsaja" apps: "Programėlės" upcoming_changes: "Būsimi pakeitimai" + calendar_subscriptions: + copied: "Nukopijuota!" + add_to_google: "„Google“ kalendorius" change_password: success: "(el. laiškas išsiųstas)" in_progress: "(siunčiamas el. laiškas)" @@ -2028,6 +2026,7 @@ lt: form_kit: reset: Atstatyti optional: pasirinktinai + required: privalomi errors: required: "Privalomi" date_before_or_equal: "Turi būti prieš arba lygu %{date}" @@ -2726,8 +2725,6 @@ lt: max_views: placeholder: maksimalus aria_label: filtruoti pagal daugiausia peržiūrų - additional_options: - label: "Filtruoti pagal įrašų skaičių ir temos peržiūras" new_item: "Nauja" go_back: "grįžti atgal" not_logged_in_user: "Vartotojo puslapis su veiksmų ir nustatymų aprašymu" @@ -2746,8 +2743,6 @@ lt: confirm: "Patvirtinti" select_all: "Pasirinkti viską" clear_all: "Išvalyti viską" - unlist_topics: "Atžymėti temas" - delete: "Ištrinti temas" delete_topics_count: one: "Ištrinti temą" few: "Ištrinti temas" @@ -2761,22 +2756,11 @@ lt: dismiss_new: "Praleisti Naujas" toggle: "perjungti temų pasirinkimus" actions: "Veiksmai" - close_topics: "Uždaryti temas" - archive_topics: "Archyvuoti temas" move_messages_to_inbox: "Perkelti į Pranešimų dėžutę" change_notification_level: "Keisti pranešimo lygį" choose_new_category: "Pasirinkti naują kategoriją temoms:" - selected: - one: "Jūs pasirinkote %{count} temą." - few: "Jūs pasirinkote %{count} temas." - many: "Jūs pasirinkote %{count} temų." - other: "Jūs pasirinkote %{count} temų." - change_tags: "Pakeisti žymas" - append_tags: "Pridėti žymas" choose_new_tags: "Pasirinkite naujas žymas šioms temoms:" - choose_append_tags: "Pasirinkite naujas žymas, kurias norite pridėti šioms temoms:" changed_tags: "Šių temų žymos buvo pakeistos." - remove_tags: "Pašalinti visas žymes" confirm_remove_tags: one: "Visos žymos bus pašalintos iš šios temos. Ar esate tikras?" few: "Visos žymės bus pašalintos iš %{count} temų. Ar esate tikras?" @@ -2806,8 +2790,6 @@ lt: name: "Archyvuoti" move_messages_to_inbox: name: "Perkelti į Pranešimų dėžutę" - append_tags: - name: "Pridėti žymas" replace_tags: name: "Pakeisti žymas" delete_topics: @@ -3411,6 +3393,7 @@ lt: allow_global_tags_label: "Taip pat leiskite kitas žymas" required_tag_group: delete: "Pašalinti" + tag_group: "Žymų grupė" topic_featured_link_allowed: "Leisti svarbiausias šios kategorijos nuorodas" create_long: "Sukurti naują kategoriją" slug_placeholder: "(Pasirinktinai) brūkšniniai žodžiai skirti URL" @@ -3434,6 +3417,8 @@ lt: delete_confirm: "Ar tikrai norite ištrinti šią kategoriją?" delete_error: "Įvyko klaida ištrinant kategoriją." no_description: "Prašome pridėti aprašymą šiai kategorijai." + description_expand: "Rodyti daugiau" + description_collapse: "Rodyti mažiau" already_used: "Ši spalva jau priskirta prie kitos kategorijos" security: "Saugumo" security_add_group: "Pridėti grupę" @@ -3461,6 +3446,9 @@ lt: review_group_name: "grupės pavadinimas" require_topic_approval: "Reikalauti, kad moderatorius patvirtintų visas naujas temas" require_reply_approval: "Reikalauti, kad moderatorius patvirtintų visus naujus atsakymus" + posting_review_modes: + everyone: "Visi" + posting_review_groups_placeholder: "Pasirinkite grupes..." this_year: "šiais metais" position: "Pozicija kategorijų puslapyje:" minimum_required_tags: "Minimalus temoje reikalingas žymų skaičius:" @@ -3884,6 +3872,16 @@ lt: delete_tag: "Ištrinti žymą" delete_confirm_no_topics: "Ar tikrai norite ištrinti šią žymą?" edit_tag: "Redaguoti žymos pavadinimą ir aprašymą" + description: "Aprašymas" + settings: + title: "Nustatymai" + general: "Bendrieji" + back: "Atgal" + name: "Vardas" + name_placeholder: "Žymos pavadinimas" + localization: + name: "Vardas" + description: "Aprašymas" sort_by: "Rūšiuoti pagal:" sort_by_count: "skaičių" sort_by_name: "vardą" @@ -4120,7 +4118,6 @@ lt: admin_js: type_to_filter: "Įveskite filtrą…" settings: "Nustatymai" - reset_filter: "Atstatyti" admin: title: "Forumo administratorius" moderator: "Moderatorius" @@ -4133,6 +4130,9 @@ lt: reports: title: "Galimų ataskaitų sąrašas" sidebar_title: "Pranešimai" + group_traffic: "Srautas" + group_members: "Nariai" + group_other: "Kiti" config_sections: account: title: "Paskyra" @@ -4154,7 +4154,6 @@ lt: preview: "Peržiūrėti" enabled_for_options: everyone: "Visi" - staff: "Tik personalui" impact_roles: admins: "Administratoriai" moderators: "Moderatoriai" @@ -4233,6 +4232,9 @@ lt: title: "Įrašai" reports: title: "Pranešimai" + sub_pages: + settings: + title: "Nustatymai" badges: title: "Trofėjai" permalinks: @@ -4275,17 +4277,6 @@ lt: default_value: "Numatytasis" search: title: "Paieška" - result_types: - theme: - one: "Tema" - few: "Temos" - many: "Temos" - other: "Temos" - component: - one: "Komponentas" - few: "Komponentai" - many: "Komponentai" - other: "Komponentai" dashboard: title: "Apžvalga" last_updated: "Informacijos suvestinė atnaujinta:" @@ -4349,7 +4340,7 @@ lt: all: "Visi" view_table: "table" view_graph: "grafikas" - refresh_report: "Refresh Report" + refresh_report: "Atnaujinti" daily: Kasdien monthly: Kas mėnesį weekly: Kas savaitę @@ -4823,7 +4814,6 @@ lt: add_all: "Pridėti visus" import_web_tip: "Saugykla, kurioje yra tema" direct_install_tip: "Ar tikrai norite įdiegti %{name} iš toliau nurodytos saugyklos?" - import_file_tip: ".tar.gz, .zip arba .dcstyle.json failas, kuriame yra tema" is_private: "Tema yra privačioje „git“ saugykloje" remote_branch: "Filialo pavadinimas (neprivaloma)" install: "diegti" @@ -5454,6 +5444,7 @@ lt: enabled: "Ieškoma" field_types: text: "Tekstas" + date: "Data" confirm: "Patvirtinimas" dropdown: "Išskleidimas" multiselect: "Daugialypis pasirinkimas" diff --git a/config/locales/client.lv.yml b/config/locales/client.lv.yml index 84aad53a97055..6e13ba9531563 100644 --- a/config/locales/client.lv.yml +++ b/config/locales/client.lv.yml @@ -6,6 +6,11 @@ lv: js: + blocks: + ghost: + status: "Statuss" + hidden: "paslēpts" + failed: "neizdevies" number: format: separator: "," @@ -254,6 +259,9 @@ lv: pill: "Saistītās ziņas" suggested_topics: pm_title: "Ieteiktās ziņas" + admin_onboarding_banner: + start_posting: + back: "Atpakaļ" about: simple_title: "Par" title: "Par %{title}" @@ -278,18 +286,16 @@ lv: today: "šodien" bookmarked: title: "Grāmatzīmes" - edit_bookmark: "Rediģēt grāmatzīmi" - clear_bookmarks: "Noņemt grāmatzīmi" help: unbookmark: "Uzklikšķiniet, lai noņemtu visas grāmatzīmes šai temā" unbookmark_with_reminder: "Noklikšķiniet, lai šajā tēmā noņemtu visas grāmatzīmes un atgādinājumus" bookmarks: created: "Jūs esat atzīmējis šo ziņu ar grāmatzīmi. %{name}" not_bookmarked: "atzīmējiet šo ziņu ar grāmatzīmi" + topic_bookmark: "Tēmas" created_with_reminder: "Jūs atzīmējāt šo ziņu ar grāmatzīmi, atgādinot %{date}. %{name}" delete: "Dzēst grāmatzīmi" confirm_delete: "Vai tiešām vēlaties dzēst šo grāmatzīmi? Atgādinājums arī tiks dzēsts." - confirm_clear: "Vai tiešām vēlaties notīrīt visas grāmatzīmes no šīs tēmas?" save: "Saglabāt" no_timezone: 'Jūs vēl neesat iestatījis laika joslu. Jūs nevarēsit iestatīt atgādinājumus. Uzstādīt vadībā savā profilā.' invalid_custom_datetime: "Norādītais datums un laiks nav derīgi. Lūdzu, mēģiniet vēlreiz." @@ -353,7 +359,6 @@ lv: in_reply_to: "atbildot uz" explain: why: "paskaidrojiet, kāpēc šis vienums netika apstrādāts" - title: "Pārskatāms vērtējums" formula: "Formula" subtotal: "Starpsumma" total: "Kopā" @@ -367,14 +372,11 @@ lv: title: "Lietotājiem, kuru karogi vēsturiski ir saskaņoti, tiek piešķirti bonusi." trust_level_bonus: name: "uzticības līmenis" - title: "Pārskatāmiem vienumiem, ko izveidojuši augstāka uzticamības līmeņa lietotāji, ir augstāks rādītājs." type_bonus: name: "tipa bonuss" - title: "Atsevišķiem pārskatāmiem veidiem darbinieki var piešķirt prēmiju, lai tie būtu augstāka prioritāte." revise_and_reject_post: reason: "Iemesls" optional: "pēc izvēles" - stale_help: "Šo pārskatāmo jautājumu ir atrisinājis %{username}." claim_help: optional: "Jūs varat pieprasīt šo vienumu, lai citi to nevarētu pārskatīt." required: "Jums ir jāpieprasa vienumi, pirms jūs varat tos pārskatīt." @@ -1072,6 +1074,8 @@ lv: tags: "Tagi" interface: "Saskarne" apps: "Lietotnes" + calendar_subscriptions: + copied: "Nokopēts!" change_password: success: "(e-pasts nosūtīts)" in_progress: "(sūta e-pastu)" @@ -1462,6 +1466,7 @@ lv: form_kit: reset: Atlikt optional: pēc izvēles + required: obligāts errors: required: "Nepieciešams" close: "Aizvērt" @@ -1865,9 +1870,6 @@ lv: bulk: select_all: "Izvēlēties visu" clear_all: "Noņemt visu" - unlist_topics: "Izņemt no sarakstiem tēmas" - relist_topics: "Atkal padarīt tēmas redzamas sarakstiem" - delete: "Dzēst tēmas" delete_topics_count: zero: "Dzēst tēmas" one: "Dzēst tēmu" @@ -1880,18 +1882,9 @@ lv: dismiss_new: "Nerādīt jaunus" toggle: "darbības ar vairākām tēmām" actions: "Darbības ar vairumu" - close_topics: "Slēgt tēmas" - archive_topics: "Arhivēt tēmas" move_messages_to_inbox: "Pārvietot uz iesūtni" choose_new_category: "Izvēlēties jaunu sadaļu šīm tēmām:" - selected: - zero: "Jūs izvēlējāties 0. tēmas." - one: "Jūs izvēlējāties %{count}. tēmu." - other: "Jūs izvēlējāties %{count} tēmas." - change_tags: "Aizvietot tagus" - append_tags: "Pievienot tagus" choose_new_tags: "Izvēlēties jaunus tagus šīm tēmām:" - choose_append_tags: "Izvēlēties jaunas birkas, ko pievienot šīm tēmām:" changed_tags: "Šo tēmu tagi tika mainīti." error_topic_count: zero: "%{count} tēmas" @@ -1915,8 +1908,6 @@ lv: name: "Arhīvs" move_messages_to_inbox: name: "Pārvietot uz iesūtni" - append_tags: - name: "Pievienot tagus" replace_tags: name: "Aizvietot tagus" delete_topics: @@ -2366,6 +2357,8 @@ lv: subcategory_list_style: "Apakšsadaļu saraksta stils:" allow_badges_label: "Atļaut apbalvot ar žetoniem šai sadaļā" review_group_name: "grupas nosaukums" + posting_review_modes: + everyone: "Ikviens" this_year: "šogad" none_subcategory_text: "Nav" visibility: @@ -2681,6 +2674,15 @@ lv: tags: "Tagi" add_synonyms: "Pievienot" delete_tag: "Dzēst tagu" + description: "Apraksts" + settings: + title: "Iestatījumi" + general: "Vispārīgi" + back: "Atpakaļ" + name: "Vārds" + localization: + name: "Vārds" + description: "Apraksts" sort_by: "Kārtot pēc:" sort_by_count: "skaita" sort_by_name: "vārda" @@ -2832,7 +2834,6 @@ lv: categories: "Visas sadaļas" admin_js: settings: "Iestatījumi" - reset_filter: "Atlikt" admin: title: "Discourse administrators" moderator: "Moderators" @@ -2840,6 +2841,10 @@ lv: remove_muted_tags_from_latest: always: "vienmēr" never: "nekad" + reports: + group_traffic: "Datu plūsma" + group_members: "Dalībnieki" + group_other: "Citi" config_sections: account: title: "Konts" @@ -2857,7 +2862,6 @@ lv: preview: "Priekšskatījums" enabled_for_options: everyone: "Ikviens" - staff: "Tikai darbiniekiem" impact_roles: admins: "Administratori" moderators: "Moderātori" @@ -2923,6 +2927,10 @@ lv: sub_pages: logs: title: "Žurnāls" + reports: + sub_pages: + settings: + title: "Iestatījumi" badges: title: "Žetoni" permalinks: @@ -2964,11 +2972,6 @@ lv: default_value: "Noklusējums" search: title: "Meklēt" - result_types: - theme: - zero: "Dizaini" - one: "Tēma" - other: "Dizaini" dashboard: title: "Administrācijas panelis" version: "Versija" @@ -3010,7 +3013,7 @@ lv: all: "Visi" view_table: "tabula" view_graph: "grafiks" - refresh_report: "Pārlādēt ziņojumu" + refresh_report: "Pārlādēt" daily: Dienas monthly: Mēneša weekly: Nedēļas @@ -3741,6 +3744,7 @@ lv: title: "Parādīt leitotāja kartē" field_types: text: "Teksts" + date: "Datums" confirm: "Apstiprinājums" dropdown: "Nolaižams izvēļu saraksts" site_text: diff --git a/config/locales/client.nb_NO.yml b/config/locales/client.nb_NO.yml index 724d0438bd115..41cab9d627f75 100644 --- a/config/locales/client.nb_NO.yml +++ b/config/locales/client.nb_NO.yml @@ -6,6 +6,12 @@ nb_NO: js: + blocks: + ghost: + status: "Status" + in_location: "i" + hidden: "skjult" + failed: "feilet" number: format: separator: "." @@ -291,6 +297,9 @@ nb_NO: title: "Nye og uleste emner" pill: "Foreslåtte" pm_title: "Anbefalte meldinger" + admin_onboarding_banner: + start_posting: + back: "Forrige" about: edit: "Endre denne siden" simple_title: "Om" @@ -353,8 +362,6 @@ nb_NO: other: "Opprettet %{count} år siden" bookmarked: title: "Bokmerke" - edit_bookmark: "Rediger bokmerke" - clear_bookmarks: "Fjern bokmerker" help: bookmark: "Klikk for å bokmerke dette emnet" edit_bookmark: "Klikk for å redigere bokmerket på et innlegg i dette emnet" @@ -372,12 +379,12 @@ nb_NO: clear_reminder: "Fjern påminnelse" edit: "Rediger bokmerke" not_bookmarked: "bokmerk dette innlegget" + topic_bookmark: "Emne" remove_reminder_keep_bookmark: "Fjern påminnelse og behold bokmerke" created_with_reminder: "Du har bokmerket dette innlegget med en påminnelse %{date} %{name}" created_with_reminder_generic: "Du har bokmerket dette med en påminnelse %{date} %{name}" delete: "Slett bokmerke" confirm_delete: "Er du sikker på at du vil slette denne bokmerket? Påminnelsen vil også bli slettet." - confirm_clear: "Er du sikker på at du vil fjerne alle favoritter fra dette emnet?" save: "Lagre" no_timezone: 'Du har ikke ennå satt tidssone. Du vil ikke kunne sette påminnelser. Sett tidssone i profilen din.' invalid_custom_datetime: "Dato og klokkeslett du oppga er ugyldig, prøv igjen." @@ -495,7 +502,6 @@ nb_NO: in_reply_to: "i svar til" explain: why: "forklar hvorfor dette elementet ble plassert i køen" - title: "Trust factor" formula: "Formel" subtotal: "Delsum" total: "Total" @@ -509,10 +515,8 @@ nb_NO: title: "Brukere som historisk gir gode flagg får bonus." trust_level_bonus: name: "tillitsnivå" - title: "Elementer opprettet av brukere med høyere tillitsrangering har høyere score" type_bonus: name: "type bonus" - title: "Visse typer som kan gjennomgås, kan tildeles en bonus av personalet for å gjøre dem til en høyere prioritet." revise_and_reject_post: title: "Revider" reason: "Begrunnelse" @@ -521,7 +525,6 @@ nb_NO: custom_reason: "Gi en tydelig beskrivelse av årsaken" other_reason: "Annet..." optional: "valgfritt" - stale_help: "Denne vurderingen har blitt løst av %{username}." claim_help: optional: "Du kan gjøre krav på dette elementet for å hindre andre i å gjennomgå det." required: "Du må gjøre krav på varer før du kan se gjennom dem." @@ -1424,6 +1427,8 @@ nb_NO: tags: "Stikkord" interface: "Grensesnitt" apps: "Programmer" + calendar_subscriptions: + copied: "Kopiert!" change_password: success: "(e-post sendt)" in_progress: "(sender e-post)" @@ -1975,6 +1980,7 @@ nb_NO: form_kit: reset: Tilbakestill optional: valgfritt + required: nødvendig dirty_form: "Du har ikke sendt inn endringene dine! Er du sikker på at du vil dra?" errors: required: "Påkrevd" @@ -2746,8 +2752,6 @@ nb_NO: max_views: placeholder: maksimum aria_label: filtrer etter maksimal antall visninger - additional_options: - label: "Filtrer etter antall innlegg og emnevisninger" new_item: "ny" go_back: "gå tilbake" not_logged_in_user: "brukerside med oppsummering av nåværende aktivtet og innstillinger" @@ -2809,11 +2813,8 @@ nb_NO: confirm: "Bekreft" select_all: "Velg alle" clear_all: "Fjern alle" - unlist_topics: "Fjern emner fra lister" - relist_topics: "Før opp igjen emner i lister" reset_bump_dates: "Tilbakestill støtdatoer" defer: "Merk ulest" - delete: "Slett emner" delete_topics_count: one: "Slett emne" other: "Slett emner" @@ -2846,29 +2847,18 @@ nb_NO: other: "Avvis nye (%{count})" toggle: "slå på/av massevelging av emner" actions: "Massehandlinger" - change_category: "Sett kategori…" - close_topics: "Lukk emner" - archive_topics: "Arkiver emner" move_messages_to_inbox: "Flytt til innboks" archive_messages: "Flytt til arkiv" - notification_level: "Varsler…" change_notification_level: "Endre varslingsnivå" choose_new_category: "Velg den nye kategorien for emnene:" - selected: - one: "Du har valgt %{count} emne." - other: "Du har valgt %{count} emner." selected_sole_category: one: "Du har valgt %{count} emne fra kategorien:" other: "Du har valgt %{count} emner fra kategorien:" selected_count: one: "%{count} valgt" other: "%{count} valgt" - change_tags: "Erstatt stikkord" - append_tags: "Legg til stikkord" choose_new_tags: "Velg nye stikkord for følgende emner:" - choose_append_tags: "Velg nye stikkord å legge til følgende emner:" changed_tags: "Stikkordene for de valgte emnene ble endret." - remove_tags: "Fjern alle stikkord" confirm_remove_tags: one: "Alle stikkord vil bli fjernet fra dette emnet. Er du sikker?" other: "Alle stikkord vil bli fjernet fra %{count} emner. Er du sikker?" @@ -2897,7 +2887,6 @@ nb_NO: name: "Avslå" close_topics: name: "Lukk" - note: "Merk" optional: (valgfritt) archive_topics: name: "Arkiver" @@ -2911,24 +2900,18 @@ nb_NO: name: "Liste på nytt" remove_tags: name: "Fjern stikkord" - append_tags: - name: "Legg til stikkord" replace_tags: name: "Erstatt stikkord" delete_topics: name: "Slett" update_category: name: "Oppdater kategori" - description: "Velg en ny kategori for de valgte emnene" reset_bump_dates: name: "Tilbakestill støtdatoer" - description: "Tilbakestill støtdatoen til siste opprettet innleggsdatoen, noe som påvirker rekkefølgen i emnelisten" defer: name: "Merk ulest" - description: "Merk emner som ulest" update_notifications: name: "Oppdater varsler" - description: "Endre varslingsnivå til følging, overvåking, normal, eller ignorert" topic: filter_to: one: "%{count} innlegg i emnet" @@ -3636,6 +3619,7 @@ nb_NO: delete: "Slett" add: "Legg til påkrevd stikkordgruppe" placeholder: "Velg stikkordgruppe…" + tag_group: "Stikkordgrupper" topic_featured_link_allowed: "Tillat fremhevede lenker i denne kategorien" create_long: "Opprett en ny kategori" slug_placeholder: "(Valgfritt) sammensatte ord for bruk i URL" @@ -3659,6 +3643,8 @@ nb_NO: delete_confirm: "Er du sikker på at du vil slette denne kategorien?" delete_error: "Det oppstod en feil ved å slette denne kategorien." no_description: "Legg til en beskrivelse for denne kategorien." + description_expand: "Vis mer" + description_collapse: "Vis mindre" already_used: "Denne fargen er i bruk av en annen kategori" security: "Sikkerhet" security_add_group: "Legg til gruppe" @@ -3691,6 +3677,9 @@ nb_NO: review_group_name: "gruppenavn" require_topic_approval: "Krev godkjennelse fra en moderator for alle nye emner" require_reply_approval: "Krev godkjennelse fra en moderator for alle nye svar" + posting_review_modes: + everyone: "Alle" + posting_review_groups_placeholder: "Velg grupper..." this_year: "dette året" position: "Posisjon på kategorisiden:" position_disabled: "Kategoriene vises i aktivitetsrekkefølge. Hvis du vil kontrollere rekkefølgen på kategoriene i lister, aktiverer du innstillingen 'faste kategoriposisjoner'." @@ -4111,6 +4100,17 @@ nb_NO: delete_confirm_synonyms: one: "Synonymen vil også bli slettet." other: "Dets %{count} synonymer vil også bli slettet." + description: "Beskrivelse" + settings: + title: "Innstillinger" + general: "Generelt" + back: "Forrige" + name: "Navn" + slug: "Navn i URL" + synonyms_subtitle: "Når følgende merkelapper brukes, vil de bli erstattet med %{name}" + localization: + name: "Navn" + description: "Beskrivelse" sort_by: "Sorter etter:" sort_by_count: "antall" sort_by_name: "navn" @@ -4316,7 +4316,6 @@ nb_NO: admin_js: type_to_filter: "Skriv for å filtrere…" settings: "Instillinger" - reset_filter: "Tilbakestill" admin: title: "Discourse-admin" moderator: "Moderator" @@ -4329,6 +4328,9 @@ nb_NO: reports: title: "Liste over tilgjengelige rapporter" sidebar_title: "Rapporter" + group_traffic: "Trafikk" + group_members: "Medlemmer" + group_other: "Annet" config_sections: account: title: "Konto" @@ -4350,7 +4352,6 @@ nb_NO: preview: "Forhåndsvis" enabled_for_options: everyone: "Alle" - staff: "Bare ansatte" impact_roles: admins: "Adminer" moderators: "Moderatorer" @@ -4420,6 +4421,9 @@ nb_NO: title: "Logger" reports: title: "Rapporter" + sub_pages: + settings: + title: "Innstillinger" badges: title: "Merker" permalinks: @@ -4468,13 +4472,6 @@ nb_NO: default_value: "Forvalg" search: title: "Søk" - result_types: - theme: - one: "Drakt" - other: "Drakter" - component: - one: "Komponent" - other: "Komponenter" dashboard: title: "Dashbord" last_updated: "Dashbord oppdatert:" @@ -4541,7 +4538,7 @@ nb_NO: all: "Alle" view_table: "tabell" view_graph: "graf" - refresh_report: "Refresh Rapport" + refresh_report: "Last inn siden på nytt" daily: Daglig monthly: Månedlig weekly: Ukentlig @@ -5557,6 +5554,7 @@ nb_NO: title: "Vis på brukerkort" field_types: text: "Tekst" + date: "Dato" confirm: "Bekreftelse" dropdown: "Nedtrekk" site_text: diff --git a/config/locales/client.nl.yml b/config/locales/client.nl.yml index 1ab779e7e15d2..fc191740abadb 100644 --- a/config/locales/client.nl.yml +++ b/config/locales/client.nl.yml @@ -6,6 +6,12 @@ nl: js: + blocks: + ghost: + status: "Status" + in_location: "in" + hidden: "verborgen" + failed: "mislukt" carousel: go_to_slide: "Ga naar dia %{index}" previous: "Vorige dia" @@ -417,7 +423,7 @@ nl: start_posting: title: "Begin met posten" description: "Geef mensen iets om samen over te praten" - action: "Ideeën voor ijsbrekers" + back: "Terug" icebreakers: fun_facts: title: "Wat zijn leuke weetjes over jou?" @@ -517,8 +523,6 @@ nl: other: "%{count} jaar geleden gemaakt" bookmarked: title: "Bladwijzer" - edit_bookmark: "Bladwijzer bewerken" - clear_bookmarks: "Bladwijzers wissen" help: bookmark: "Klik om een bladwijzer voor dit topic te maken" edit_bookmark: "Klik om de bladwijzer voor een bericht in dit topic te bewerken" @@ -537,12 +541,12 @@ nl: clear_reminder: "Herinnering wissen" edit: "Bladwijzer bewerken" not_bookmarked: "bladwijzer maken voor dit bericht" + topic_bookmark: "Topic" remove_reminder_keep_bookmark: "Herinnering verwijderen en bladwijzer behouden" created_with_reminder: "Je hebt een bladwijzer voor dit bericht gemaakt met een herinnering voor %{date}. %{name}" created_with_reminder_generic: "Je hebt een bladwijzer hiervoor gemaakt met een herinnering voor %{date}. %{name}" delete: "Bladwijzer verwijderen" confirm_delete: "Weet je zeker dat je deze bladwijzer wilt verwijderen? De herinnering wordt ook verwijderd." - confirm_clear: "Weet je zeker dat je alle bladwijzers van dit topic wilt verwijderen?" save: "Opslaan" no_timezone: 'Je hebt nog geen tijdzone ingesteld. Hierdoor kun je geen herinneringen instellen. Stel er een in in je profiel.' invalid_custom_datetime: "De datum en tijd die je hebt opgegeven zijn ongeldig, probeer het opnieuw." @@ -671,19 +675,13 @@ nl: in_reply_to: "in antwoord op" filtered_flagged_by: "Gemarkeerd door" unknown: - title: - one: "Je hebt wachtende beoordeelbare items van een uitgeschakelde plug-in:" - other: "Je hebt wachtende beoordeelbare items van uitgeschakelde plug-ins:" instruction: "Ze kunnen pas correct worden weergegeven nadat je de betreffende plug-in hebt ingeschakeld. Schakel de plug-in in en vernieuw de pagina. Je kunt ze ook negeren. Meer informatie..." reviewable_unknown_source: "%{reviewableType} (onbekende plug-in)" reviewable_known_source: "%{reviewableType} (van de plug-in '%{pluginName}' )" ignore_all: "Alles negeren" enable_plugins: "Plug-ins inschakelen" - delete_confirm: "Weet je zeker dat je alle beoordelingen wilt verwijderen die zijn gemaakt door uitgeschakelde plug-ins?" - ignore_success: "Alle beoordelingen gemaakt door uitgeschakelde plug-ins zijn verwijderd." explain: why: "leg uit waarom dit item in de wachtrij is beland" - title: "Beoordeelbare scores" formula: "Formule" subtotal: "Subtotaal" total: "Totaal" @@ -697,10 +695,8 @@ nl: title: "Gebruikers waarvan markeringen in het verleden zijn geaccordeerd ontvangen een bonus." trust_level_bonus: name: "vertrouwensniveau" - title: "Beoordeelbare items die door gebruikers met een hoger vertrouwensniveau zijn gemaakt hebben een hogere score." type_bonus: name: "typebonus" - title: "Aan bepaalde beoordeelbare typen kan door medewerkers een bonus worden toegekend om ze hogere prioriteit te geven." revise_and_reject_post: title: "Herzien" reason: "Reden" @@ -709,7 +705,6 @@ nl: custom_reason: "Geef een duidelijke beschrijving van de reden" other_reason: "Anders..." optional: "optioneel" - stale_help: "Dit beoordeelbare item is afgehandeld door %{username}." claim_help: optional: "Je kunt dit item claimen om te voorkomen dat anderen het beoordelen." required: "Je moet items claimen voordat je ze kunt beoordelen." @@ -1700,6 +1695,10 @@ nl: interface: "Interface" apps: "Apps" navigation_menu: "Navigatiemenu" + calendar_subscriptions: "Kalender" + calendar_subscriptions: + copied: "Gekopieerd!" + add_to_google: "Google-agenda" change_password: success: "(e-mail verzonden)" in_progress: "(e-mail verzenden)" @@ -1787,22 +1786,22 @@ nl: edit_description: "Naam fysieke beveiligingssleutel" name_required_error: "Je moet een naam voor je beveiligingssleutel opgeven." passkeys: - rename_passkey: "Passkey hernoemen" - add_passkey: "Passkey toevoegen" - confirm_delete_passkey: "Weet je zeker dat je deze passkey wilt verwijderen?" - passkey_successfully_created: "Gelukt! Je nieuwe passkey is gemaakt." - rename_passkey_instructions: "Kies een passkeynaam die je gemakkelijk kunt herkennen, bijvoorbeeld de naam van je wachtwoordmanager." + rename_passkey: "Toegangssleutel hernoemen" + add_passkey: "Toegangssleutel toevoegen" + confirm_delete_passkey: "Weet je zeker dat je deze toegangssleutel wilt verwijderen?" + passkey_successfully_created: "Gelukt! Je nieuwe toegangssleutel is gemaakt." + rename_passkey_instructions: "Kies een toegangssleutelnaam die je gemakkelijk kunt herkennen, bijvoorbeeld de naam van je wachtwoordmanager." name: - default: "Hoofdpasskey" + default: "Hoofdtoegangssleutel" save: "Opslaan" - title: "Passkeys" - short_description: "Passkeys zijn wachtwoordvervangers die je identiteit biometrisch valideren (bijv. touch, faceID) of via een apparaatpincode/-wachtwoord." + title: "Toegangssleutels" + short_description: "Toegangssleutels zijn wachtwoordvervangers die je identiteit biometrisch valideren (bijv. touch, faceID) of via een apparaatpincode/-wachtwoord." added_date: "%{date} toegevoegd" last_used_date: "Laatst gebruikt %{date}" never_used: "Nooit gebruikt" - not_allowed_error: "Er is een time-out opgetreden in het passkeyregistratieproces, het proces is geannuleerd of het is niet toegestaan." - already_added_error: "Je hebt deze passkey al geregistreerd. Je hoeft deze niet opnieuw te registreren." - confirm_button: "of een passkey gebruiken" + not_allowed_error: "Er is een time-out opgetreden in het toegangssleutelregistratieproces, het proces is geannuleerd of het is niet toegestaan." + already_added_error: "Je hebt deze toegangssleutel al geregistreerd. Je hoeft deze niet opnieuw te registreren." + confirm_button: "of een toegangssleutel gebruiken" change_about: title: "Over mij wijzigen" error: "Er is een fout opgetreden bij het wijzigen van deze waarde." @@ -2138,7 +2137,7 @@ nl: confirm_access: title: "Toegang bevestigen" incorrect_password: "Het ingevoerde wachtwoord is onjuist." - incorrect_passkey: "Die passkey is onjuist." + incorrect_passkey: "Die toegangssleutel is onjuist." logged_in_as: "Je bent aangemeld als: " forgot_password: "Wachtwoord vergeten?" password_reset_email_sent: "E-mail voor wachtwoordherstel verzonden." @@ -2305,6 +2304,7 @@ nl: form_kit: reset: Resetten optional: optioneel + required: vereist errors_summary_title: one: "Corrigeer deze fout om door te gaan" other: "Corrigeer deze fouten om door te gaan" @@ -2577,7 +2577,7 @@ nl: title: "Aanmelden met LinkedIn" sr_title: "Aanmelden met LinkedIn" passkey: - name: "Aanmelden met een passkey" + name: "Aanmelden met een toegangssleutel" second_factor_toggle: totp: "Authenticator-app gebruiken" backup_code: "Back-upcode gebruiken" @@ -2605,7 +2605,7 @@ nl: google_classic: "Google Classic (verouderd, verplaatst naar Noto Emoji)" facebook_messenger: "Facebook Messenger (verouderd, verplaatst naar Standard)" openmoji: OpenMoji - standard: Standard + standard: Standaard fluentui: Fluent Emoji noto: Noto Emoji twemoji: Twemoji @@ -2707,6 +2707,8 @@ nl: medium_dark_tone: Gemiddelde donkere huidskleur dark_tone: Donkere huidskleur default: Eigen emoji's + filter_input: + clear: "Filter wissen" shared_drafts: title: "Gedeelde concepten" notice: "Dit topic is alleen zichtbaar voor degenen die gedeelde concepten kunnen publiceren." @@ -3180,8 +3182,6 @@ nl: max_views: placeholder: maximum aria_label: filteren op maximumaantal weergaven - additional_options: - label: "Filteren op aantal berichten en topicweergaven" hamburger_menu: "Navigatiemenu" new_item: "nieuw" go_back: "terug" @@ -3245,11 +3245,8 @@ nl: confirm: "Bevestigen" select_all: "Alles selecteren" clear_all: "Alles wissen" - unlist_topics: "Topics onzichtbaar maken" - relist_topics: "Topics opnieuw weergeven" reset_bump_dates: "Omhoogplaatsingsdatums resetten" defer: "Markeren als ongelezen" - delete: "Topics verwijderen" delete_topics_count: one: "Topic verwijderen" other: "Topics verwijderen" @@ -3285,29 +3282,20 @@ nl: other: "Nieuwe negeren (%{count})" toggle: "bulkselectie van topics in-/uitschakelen" actions: "Bulkacties" - change_category: "Categorie instellen..." - close_topics: "Topics sluiten" - archive_topics: "Topics archiveren" move_messages_to_inbox: "Verplaatsen naar inbox" archive_messages: "Verplaatsen naar archief" - notification_level: "Meldingen…" change_notification_level: "Meldingsniveau wijzigen" choose_new_category: "Kies de nieuwe categorie voor de topics:" - selected: - one: "Je hebt %{count} topic geselecteerd." - other: "Je hebt %{count} topics geselecteerd." selected_sole_category: one: "Je hebt %{count} topic geselecteerd uit de categorie:" other: "Je hebt %{count} topics geselecteerd uit de categorie:" selected_count: one: "%{count} geselecteerd" other: "%{count} geselecteerd" - change_tags: "Tags vervangen" append_tags: "Tags toevoegen" choose_new_tags: "Kies nieuwe tags voor deze topics:" - choose_append_tags: "Kies nieuwe tags om toe te voegen voor deze topics:" + choose_append_tags: "Tags toevoegen" changed_tags: "De tags van deze topics zijn gewijzigd." - remove_tags: "Alle tags verwijderen" confirm_remove_tags: one: "Alle tags worden verwijderd van dit topic. Weet je het zeker?" other: "Alle tags worden verwijderd van %{count} topics. Weet je het zeker?" @@ -3342,7 +3330,6 @@ nl: name: "Sluiten" close_topics: name: "Sluiten" - note: "Opmerking" optional: (optioneel) archive_topics: name: "Archiveren" @@ -3356,24 +3343,18 @@ nl: name: "Opnieuw zichtbaar maken" remove_tags: name: "Tags verwijderen" - append_tags: - name: "Tags toevoegen" replace_tags: name: "Tags vervangen" delete_topics: name: "Verwijderen" update_category: name: "Categorie bijwerken" - description: "Kies de nieuwe categorie voor de geselecteerde topics" reset_bump_dates: name: "Omhoogplaatsingsdatums resetten" - description: "Reset de omhoogplaatsingsdatum van het topic naar de datum van het laatst gemaakte bericht, wat de volgorde in de topicslijst beïnvloedt" defer: name: "Markeren als ongelezen" - description: "Markeer topics als ongelezen" update_notifications: name: "Meldingen bijwerken" - description: "Wijzig het meldingsniveau naar Kijken, Volgen, Normaal of Gedempt" topic: filter_to: one: "%{count} bericht in topic" @@ -4140,8 +4121,12 @@ nl: delete: "Verwijderen" add: "Vereiste taggroep toevoegen" placeholder: "Selecteer taggroep…" + tag_group: "Tag-groep" topic_featured_link_allowed: "Uitgelichte links toestaan in deze categorie" create_long: "Nieuwe categorie maken" + type_settings_schema: + site_settings: "Site-instellingen" + unsaved_changes: "Je hebt niet-opgeslagen wijzigingen" slug_placeholder: "(Optioneel) met streepjes verbonden woorden voor URL" creation_error: Er is een fout opgetreden bij het maken van de categorie. save_error: Er is een fout opgetreden bij het opslaan van de categorie. @@ -4174,6 +4159,8 @@ nl: list: "Categorieën weergeven" no_description: "Voeg een beschrijving toe voor deze categorie." change_in_category_topic: "Beschrijving bewerken" + description_expand: "Meer weergeven" + description_collapse: "Minder weergeven" already_used: "Deze kleur is al in gebruik door een andere categorie" color_palette: "Kleurenpalet" security: "Beveiliging" @@ -4207,6 +4194,9 @@ nl: review_group_name: "groepsnaam" require_topic_approval: "Goedkeuring van moderator vereisen voor alle nieuwe topics" require_reply_approval: "Goedkeuring van moderator vereisen voor alle nieuwe antwoorden" + posting_review_modes: + everyone: "Iedereen" + posting_review_groups_placeholder: "Selecteer groepen..." this_year: "dit jaar" position: "Positie op de categoriepagina:" position_disabled: "Categorieën worden weergegeven op volgorde van activiteit. Schakel de instelling 'Vaste categorieposities' in om de volgorde van categorieën in lijsten te regelen." @@ -4737,7 +4727,20 @@ nl: one: "Het synoniem wordt ook verwijderd." other: "De %{count} synoniemen worden ook verwijderd." edit_tag: "Tagnaam en -beschrijving bewerken" - description: "Beschrijving (max. 1000 tekens)" + description: "Beschrijving" + settings: + title: "Instellingen" + general: "Algemeen" + localizations: "Lokalisaties" + back: "Terug" + name: "Naam" + slug: "Slug" + name_placeholder: "Tagnaam" + synonyms_subtitle: "Wanneer de volgende tags worden gebruikt, worden deze vervangen door %{name}" + localization: + locale: "Taal" + name: "Naam" + description: "Beschrijving" sort_by: "Sorteren op:" sort_by_count: "aantal" sort_by_name: "naam" @@ -5227,7 +5230,6 @@ nl: admin_js: type_to_filter: "Typ om te filteren…" settings: "Instellingen" - reset_filter: "Resetten" admin: title: "Discourse-beheerder" moderator: "Moderator" @@ -5240,9 +5242,11 @@ nl: never: "nooit" reports: title: "Lijst van beschikbare rapporten" - meta_doc: "Rapporten zijn een krachtig hulpmiddel om te begrijpen wat er op je site gebeurt. Ze kunnen je helpen trends te identificeren, problemen te signaleren en beslissingen te nemen op basis van gegevens." sidebar_title: "Rapporten" back: "Terug naar alle rapporten" + group_traffic: "Verkeer" + group_members: "Leden" + group_other: "Overig" config_sections: account: title: "Account" @@ -5267,7 +5271,6 @@ nl: preview: "Voorbeeld" enabled_for_options: everyone: "Iedereen" - staff: "Alleen medewerkers" statuses: experimental: "Experimenteel" impact_roles: @@ -5340,7 +5343,6 @@ nl: help_text: "De aanbevolen grootte is 600 x 80 pixels." large_icon: title: "Vierkant pictogram" - description: "Een vierkante versie van het logo wordt bovenaan het beheerscherm weergegeven en is ook het logo in het startscherm van de mobiele app." help_text: "De aanbevolen grootte is 512 x 512 pixels." square_icon_dark: required: "Ander vierkant pictogram gebruiken voor de donkere modus?" @@ -5491,7 +5493,7 @@ nl: header_description: "Rapporten zijn een krachtig hulpmiddel om te begrijpen wat er op je site gebeurt. Ze kunnen je helpen trends te identificeren, problemen te signaleren en beslissingen te nemen op basis van gegevens." sub_pages: settings: - title: "Dashboardinstellingen" + title: "Instellingen" badges: title: "Badges" header_description: "Badges belonen gebruikers voor hun activiteit, bijdragen en prestaties om positief gedrag en betrokkenheid binnen de community te erkennen, te valideren en aan te moedigen" @@ -5641,22 +5643,6 @@ nl: result_count: one: '%{count} resultaat voor "%{filter}"' other: '%{count} resultaten voor "%{filter}"' - result_types: - page: - one: "Pagina" - other: "Pagina's" - report: - one: "Rapport" - other: "Rapporten" - setting: - one: "Instelling" - other: "Instellingen" - theme: - one: "Thema" - other: "Thema's" - component: - one: "Onderdeel" - other: "Onderdelen" new_features: title: "Wat is er nieuw?" check_for_updates: "Controleren op updates" @@ -5680,15 +5666,6 @@ nl: title: "Wat is er nieuw?" subtitle: "We brengen voortdurend nieuwe functies en verbeteringen uit. Deze pagina behandelt de belangrijkste punten, maar je kunt op 'Meer informatie' klikken om uitgebreide releaseopmerkingen te bekijken." learn_more: "Meer informatie..." - experimental: "Experimenteel" - only_experiments: "Alleen experimentele functies weergeven" - experiment_enabled: "Je hebt de experimentele functie ingeschakeld." - experiment_disabled: "Je hebt de experimentele functie uitgeschakeld." - experiment_tooltip: - title_enabled: "Schakel de experimentele functie uit" - content_enabled: "Wijziging hiervan schakelt de functie uit voor alle gebruikers." - feature_tooltip: - content_enabled: "Wijziging hiervan schakelt de functie uit voor alle gebruikers." last_checked: "Laatst gecontroleerd" refresh_problems: "Vernieuwen" no_problems: "Er zijn geen problemen gevonden." @@ -5751,7 +5728,7 @@ nl: all: "Alles" view_table: "tabel" view_graph: "grafiek" - refresh_report: "Rapport vernieuwen" + refresh_report: "Vernieuwen" daily: Dagelijks monthly: Maandelijks weekly: Wekelijks @@ -6319,7 +6296,7 @@ nl: back: "Terug naar onderdelen" install: "Installeren" name: "Naam" - used_on: "Gebruikt op" + used_on: "Gebruikt in" enabled: "Ingeschakeld?" by_author: "Van %{name}" learn_more: "Meer informatie" @@ -6635,7 +6612,6 @@ nl: import_web_tip: "Repository die thema bevat" direct_install_tip: "Weet je zeker dat je %{name} uit de onderstaande repository wilt installeren?" import_web_advanced: "Geavanceerd…" - import_file_tip: ".tar.gz-, .zip- of .dcstyle.json-bestand dat thema bevat" is_private: "Thema bevindt zich in een privé-git-repository" finish_install: "Thema-installatie voltooien" last_attempt: "Installatieproces is niet voltooid, laatste poging:" @@ -7280,7 +7256,7 @@ nl: edit_category: select_template: "Selecteer formuliersjablonen" errors: - multiple_tags_not_allowed: 'Je kunt geen verdere tags selecteren uit de "%{tag_name}". Gebruik een formuliersjabloon om problemen te voorkomen.' + multiple_tags_not_allowed: 'Je kunt geen verdere tags selecteren uit de "%{tag_name}". Gebruik het formuliersjabloon om problemen te voorkomen.' impersonate: title: "Imiteren" help: "Gebruik deze tool om een gebruikersaccount te imiteren voor debugdoeleinden. Je moet je afmelden wanneer je klaar bent." @@ -7665,6 +7641,7 @@ nl: field_types: text: "Tekst" textarea: "Tekstgebied" + date: "Datum" confirm: "Bevestiging" dropdown: "Vervolgkeuzelijst" multiselect: "Meervoudige selectie" @@ -7685,6 +7662,7 @@ nl: more_than_50_results: "Er zijn meer dan 50 resultaten. Verfijn je zoekopdracht." no_results: "Geen overeenkomende siteteksten gevonden" interpolation_keys: "Beschikbare interpolatiesleutels:" + interpolation_key_used: "Al gebruikt" outdated: title: "Deze vertaling is verouderd" description: "De standaardvertaling voor deze sleutel is gewijzigd sinds deze overschrijving is gemaakt. Controleer hieronder of je vertaling overeenkomt met eventuele wijzigingen die zijn aangebracht in de oorspronkelijke betekenis." @@ -7797,7 +7775,7 @@ nl: confirm: "Ja, wachtwoordbeleid bijwerken" min_admin_password_length: confirm: "Ja, wachtwoordbeleid bijwerken" - password_unique_charactes: + password_unique_characters: confirm: "Ja, wachtwoordbeleid bijwerken" block_common_passwords: confirm: "Ja, wachtwoordbeleid bijwerken" diff --git a/config/locales/client.pl_PL.yml b/config/locales/client.pl_PL.yml index 5ef116dfbb0e1..ee91790cd4c36 100644 --- a/config/locales/client.pl_PL.yml +++ b/config/locales/client.pl_PL.yml @@ -6,6 +6,22 @@ pl_PL: js: + blocks: + ghost: + status: "Status" + conditions: "Warunki" + arguments: "Argumenty" + container_args: "Argumenty kontenera" + in_location: "w" + hidden: "ukryty" + not_registered: "niezarejestrowany" + no_visible_children: "brak widocznych podrzędnych" + failed: "nieudany" + ghost_reasons: + optional_missing_hint: "Ten opcjonalny blok nie jest renderowany, ponieważ nie jest zarejestrowany." + no_visible_children_hint: "Ten blok kontenera nie jest renderowany, ponieważ żaden z jego elementów podrzędnych nie jest widoczny." + condition_failed_hint: "Ten blok nie został wyrenderowany, ponieważ jego warunki nie zostały spełnione." + head_hidden_tail_hint: "Ten blok nie jest renderowany, ponieważ w kontenerze `head` najpierw został renderowany inny blok." carousel: go_to_slide: "Przejdź do slajdu %{index}" previous: "Poprzedni slajd" @@ -353,6 +369,7 @@ pl_PL: skip_to_top: "Przejdź do góry" skip_user_nav: "Przejdź do treści profilu" emails_are_disabled: "Wszystkie wychodzące wiadomości e-mail zostały globalnie wyłączone przez administratora. Żadne powiadomienia e-mail nie będą wysyłane." + emails_are_disabled_no_smtp: "Wszystkie wiadomości wychodzące są wyłączone, ponieważ nie skonfigurowano serwera SMTP. Nie można wysyłać żadnych wiadomości e-mail." emails_are_disabled_non_staff: "Poczta wychodząca została wyłączona dla użytkowników niebędących pracownikami." software_update_prompt: message: "Zaktualizowaliśmy tę witrynę, odśwież, aby wszystko działało sprawnie." @@ -378,12 +395,28 @@ pl_PL: broken_page_change_alert: "Procedura obsługi onPageChange zgłosiła błąd. Aby uzyskać więcej informacji, sprawdź narzędzia programistyczne przeglądarki." broken_plugin_alert: "Spowodowane przez wtyczkę '%{name}'" broken_transformer_alert: "Wystąpił błąd. Twoja witryna może nie działać prawidłowo." + broken_block_alert: "Wykryto błąd konfiguracji bloku. Szczegóły znajdziesz w konsoli przeglądarki." + broken_block_factory_alert: "Nie udało się załadować bloku. Niektóre elementy interfejsu użytkownika mogą nie wyświetlać się poprawnie." critical_deprecation: notice: "[Uwaga administratora] %{source} zawiera kod, który wymaga aktualizacji. (id:%{id})" learn_more_link: "(dowiedz się więcej)" theme_source: "Motyw '%{name}'" plugin_source: "Wtyczka „%{name}”" unknown_source: "Jeden z Twoich motywów lub wtyczek" + dev_tools: + drag_to_move: "Przeciągnij, aby przesunąć" + toggle_plugin_outlet_debug: "Przełącz debugowanie wyjścia wtyczki" + toggle_block_debug: "Przełącz debugowanie bloku" + block_debug: + outlet_boundaries: "Granice wyjścia" + visual_overlay: "Nakładka wizualna" + ghost_blocks: "Bloki duchów" + condition_debugging: "Debugowanie warunków" + toggle_safe_mode: "Przełącz tryb awaryjny" + toggle_verbose_localization: "Przełącz szczegółową lokalizację" + toggle_mobile_view: "Przełącz widok mobilny" + disable_dev_tools: "Wyłącz narzędzia programistyczne" + toggle_upcoming_changes_debug: "Przełącz debugowanie nadchodzących zmian" s3: regions: ap_northeast_1: "Azja i Pacyfik (Tokio)" @@ -482,7 +515,6 @@ pl_PL: pm_title: "Sugerowane wiadomości" admin_onboarding_banner: launch_in_easy_steps: "Uruchom w %{step_count} prostych krokach" - skipped: "Lista kontrolna dotycząca wdrażania administratora została pominięta. Jeśli chcesz ją ponownie włączyć, poszukaj opcji „włącz wdrażanie właściciela witryny” w ustawieniach witryny." congrats_onboarding_complete: "Gratulacje z okazji ukończenia procesu wdrażania!" invite_collaborators: title: "Zaproś współpracowników" @@ -491,7 +523,13 @@ pl_PL: start_posting: title: "Rozpocznij publikowanie" description: "Daj ludziom temat do wspólnej rozmowy" - action: "Pomysły na przełamanie lodów" + action: "Zobacz pomysły" + choose_option: "Jak chcesz zacząć?" + predefined_topics: "Szablony przełamujące lody" + predefined_topics_subtitle: "Daj nowym członkom temat do rozmów, wybierz szablon do edycji i stwórz swój własny." + predefined_topics_description: "Wybierz z kolekcji tematów do rozpoczęcia rozmowy, aby rozpocząć dyskusję" + use_predefined: "Przeglądaj szablony" + back: "Wstecz" icebreakers: fun_facts: title: "Jakie są ciekawostki na Twój temat?" @@ -615,8 +653,12 @@ pl_PL: other: "Utworzono %{count} lat temu" bookmarked: title: "Zakładka" - edit_bookmark: "Edytuj zakładkę" - clear_bookmarks: "Wyczyść zakładki" + edit_bookmark: + one: "Edytuj zakładkę" + few: "Edytuj zakładki" + many: "Edytuj zakładki" + other: "Edytuj zakładki" + delete_bookmarks: "Usuń wszystkie zakładki" help: bookmark: "Kliknij, aby dodać ten temat do zakładek" edit_bookmark: "Kliknij, aby edytować zakładkę we wpisie tego tematu" @@ -635,12 +677,18 @@ pl_PL: clear_reminder: "Wyczyść przypomnienie" edit: "Edytuj zakładkę" not_bookmarked: "dodaj do zakładek" + topic_bookmark: "Temat" + post_bookmark: "Wpis nr %{post_number}" + jump_to_post: "Przejdź do nr %{post_number}" + bookmark_topic: "Dodaj temat do zakładek" + edit_topic_bookmark: "Edytuj zakładkę tematu" + delete_topic_bookmark: "Usuń zakładkę tematu" remove_reminder_keep_bookmark: "Usuń przypomnienie i zachowaj zakładkę" created_with_reminder: "Dodano wpis do zakładek z przypomnieniem %{date}. %{name}" created_with_reminder_generic: "Dodałeś to do zakładek z przypomnieniem %{date}. %{name}" delete: "Usuń zakładkę" confirm_delete: "Czy na pewno chcesz usunąć tę zakładkę? Przypomnienie również zostanie usunięte." - confirm_clear: "Czy na pewno chcesz usunąć wszystkie swoje zakładki ustawione w tym temacie?" + confirm_clear: "Czy na pewno chcesz usunąć wszystkie zakładki z tego tematu?" save: "Zapisz" no_timezone: 'Nie ustawiłeś/łaś jeszcze strefy czasowej. Nie będziesz mógł/mogła ustawić przypomnień. Skonfiguruj jeden w swoim profilu .' invalid_custom_datetime: "Podana data i godzina są nieprawidłowe, spróbuj ponownie." @@ -718,6 +766,11 @@ pl_PL: few: "+%{count} inne szkice" many: "+%{count} innych szkiców" other: "+%{count} innych szkiców" + embed_mode: + storage_access_prompt: "Masz już konto %{site_name} ? Zezwól na dostęp do swojej sesji, aby móc komentować jako Ty." + allow_access: "Zezwól na dostęp" + continue_as_guest: "Kontynuuj jako gość" + be_first_to_reply: "Bądź pierwszą osobą, która odpowie!" topic_count_all: one: "Zobacz %{count} nowy temat" few: "Zobacz %{count} nowe tematy" @@ -796,20 +849,20 @@ pl_PL: filtered_flagged_by: "Oflagowany przez" unknown: title: - one: "Masz oczekujące recenzje z wyłączonej wtyczki:" - few: "Masz oczekujące recenzje z wyłączonych wtyczek:" - many: "Masz oczekujące recenzje z wyłączonych wtyczek:" - other: "Masz oczekujące recenzje z wyłączonych wtyczek:" + one: "Masz elementy oczekujące na sprawdzenie w kolejce z wyłączonej wtyczki:" + few: "Masz elementy oczekujące na sprawdzenie w kolejce z wyłączonych wtyczek:" + many: "Masz elementy oczekujące na sprawdzenie w kolejce z wyłączonych wtyczek:" + other: "Masz elementy oczekujące na sprawdzenie w kolejce z wyłączonych wtyczek:" instruction: "Nie można ich poprawnie wyświetlić, dopóki nie włączysz odpowiedniej wtyczki. Włącz wtyczkę i odśwież stronę. Alternatywnie możesz je zignorować. Dowiedz się więcej..." reviewable_unknown_source: "%{reviewableType} (nieznana wtyczka)" reviewable_known_source: "%{reviewableType} (z wtyczki '%{pluginName}')" ignore_all: "Ignoruj wszystko" enable_plugins: "Włącz wtyczki" - delete_confirm: "Czy na pewno chcesz usunąć wszystkie recenzje utworzone przez wyłączone wtyczki?" - ignore_success: "Wszystkie recenzje utworzone przez wyłączone wtyczki zostały usunięte." + delete_confirm: "Czy na pewno chcesz usunąć wszystkie elementy kolejki recenzji utworzone przez wyłączone wtyczki?" + ignore_success: "Wszystkie elementy kolejki recenzji utworzone przez wyłączone wtyczki zostały usunięte." explain: why: "wyjaśnij, dlaczego ten element znalazł się w kolejce" - title: "Przeglądalna ocena" + title: "Punktacja elementów kolejki recenzji" formula: "Formuła" subtotal: "Suma częściowa" total: "Łącznie" @@ -823,10 +876,10 @@ pl_PL: title: "Użytkownicy, których flagi były wcześniej uzgodnione, otrzymują bonus." trust_level_bonus: name: "Poziom zaufania" - title: "Przedmioty, które można przeglądać, tworzone przez użytkowników o wyższym poziomie zaufania, mają wyższy wynik." + title: "Flagi utworzone przez użytkowników o wyższym poziomie zaufania mają wyższy wynik." type_bonus: name: "bonus typu" - title: "Niektóre rodzaje przeglądalne mogą otrzymać premię od pracowników, aby nadać im wyższy priorytet." + title: "Niektórym typom flag personel może przypisać premię, aby nadać im wyższy priorytet." revise_and_reject_post: title: "Sprawdź" reason: "Powód" @@ -835,7 +888,7 @@ pl_PL: custom_reason: "Podaj jasny opis przyczyny" other_reason: "Inny..." optional: "opcjonalnie" - stale_help: "Wiadomość została już zweryfikowana przez %{username}." + stale_help: "Ten element został rozwiązany przez %{username}." claim_help: optional: "Możesz przejąć tę pozycję, aby uniemożliwić innym jego sprawdzenie." required: "Musisz przejąć tę pozycję, zanim będziesz mógł/mogła je przejrzeć." @@ -1245,6 +1298,7 @@ pl_PL: add_members: title: "Dodaj użytkowników do %{group_name}" description: "Wpisz listę użytkowników, których chcesz zaprosić do grupy, lub wklej listę oddzieloną przecinkami:" + description_usernames_only: "Wprowadź listę nazw użytkowników, których chcesz dodać do grupy, lub wklej listę rozdzieloną przecinkami:" usernames_placeholder: "nazwy użytkowników" usernames_or_emails_placeholder: "nazwy użytkowników lub e-maile" notify_users: "Powiadom użytkowników" @@ -1738,6 +1792,7 @@ pl_PL: enable_smart_lists: "Włącz inteligentne listy podczas pisania w kompozytorze" enable_defer: "Włącz opcję oznaczania tematów jako nieprzeczytanych" enable_markdown_monospace_font: "Użyj czcionki o stałej szerokości w trybie Markdown kompozytora" + show_original_content: "Pokaż oryginalną treść zamiast przetłumaczonej. Można to również przełączać w obrębie tematów." experimental_sidebar: enable: "Włącz pasek boczny" options: "Opcje" @@ -1972,6 +2027,23 @@ pl_PL: apps: "Aplikacje" navigation_menu: "Menu nawigacyjne" upcoming_changes: "Nadchodzące zmiany" + calendar_subscriptions: "Kalendarz" + calendar_subscriptions: + description: "Wygeneruj adresy URL subskrypcji, aby zsynchronizować je z ulubioną aplikacją kalendarza (Kalendarz Google, Kalendarz Apple, Outlook itp.). Te adresy URL to prywatne linki do wydarzeń w kalendarzu na Twoim koncie (przypomnienia o zakładkach, wydarzenia w kalendarzu itp.). Wygenerowane adresy URL subskrypcji możesz zawsze anulować lub odnowić." + generate: "Generuj adresy URL subskrypcji" + regenerate: "Wygeneruj ponownie adresy URL" + regenerate_confirm: "Spowoduje to unieważnienie istniejących adresów URL subskrypcji kalendarza. Wszystkie aplikacje kalendarza korzystające ze starych adresów URL przestaną otrzymywać aktualizacje. Kontynuować?" + revoke: "Cofnij subskrypcję" + revoke_confirm: "Spowoduje to anulowanie adresów URL subskrypcji kalendarza. Wszystkie aplikacje kalendarza, które z nich korzystają, przestaną otrzymywać aktualizacje. Kontynuować?" + urls_warning: "Adresy URL subskrypcji są gotowe! Kliknij poniższe przyciski, aby połączyć je z aplikacją kalendarza. Uwaga: te adresy URL są wyświetlane tylko raz." + bookmarks: "Przypomnienia zakładkowe" + bookmarks_description: "Twoje zakładki z datami przypomnień" + copy: "Kopiuj adres URL" + copied: "Skopiowane!" + add_to_google: "Kalendarz Google" + add_to_outlook: "Microsoft Outlook" + add_to_apple: "Kalendarz Apple" + active_subscription: "Masz aktywną subskrypcję kalendarza." change_password: success: "(e-mail wysłany)" in_progress: "(e-mail wysyłany)" @@ -2616,6 +2688,7 @@ pl_PL: form_kit: reset: Przywróć optional: opcjonalnie + required: wymagane errors_summary_title: one: "Napraw ten błąd, aby kontynuować" few: "Napraw te błędy, aby kontynuować" @@ -3027,6 +3100,12 @@ pl_PL: filter_for_more: Filtruj po więcej... categories_admin_dropdown: title: "Zarządzaj kategoriami" + tag_category_admin_dropdown: + title: "Ustawienia kategorii i tagów" + edit_category: "Edytuj kategorię" + edit_category_description: "Dostosuj ustawienia dla %{badge}" + edit_tag: "Edytuj tag" + edit_tag_description: "Dostosuj ustawienia dla %{badge}" bulk_select_topics_dropdown: title: "Operacje grupowe" bulk_select_bookmarks_dropdown: @@ -3057,6 +3136,20 @@ pl_PL: medium_dark_tone: Średnio ciemny kolor skóry dark_tone: Ciemny kolor skóry default: Spersonalizowane emoji + filter_input: + clear: "Wyczyść filtr" + d_icon_grid_picker: + select_icon: "Wybierz ikonę" + search_placeholder: "Szukaj ikon..." + no_results: "Nie znaleziono ikon" + results_count: + one: "Znaleziono %{count} ikonę" + few: "Znaleziono %{count} ikony" + many: "Znaleziono %{count} ikon" + other: "Znaleziono %{count} ikon" + favorites: "Ulubione" + selected_icon: "Wybrana ikona: %{iconName}" + clear: "Wyczyść ikonę" shared_drafts: title: "Udostępnione szkice" notice: "Ten temat jest widoczny tylko dla osób, które mogą publikować współdzielone szkice postów." @@ -3222,6 +3315,7 @@ pl_PL: upload_description: "tutaj wpisz opis przesłania" olist_title: "Lista numerowana" ulist_title: "Lista wypunktowana" + list_title: "Listy" list_item: "Element listy" toggle_direction: "Przełącz kierunek" apply_wrap_title: "Zastosuj zawijanie" @@ -3239,6 +3333,7 @@ pl_PL: collapse: "Zminimalizuj panel kompozytora" open: "Otwórz panel kompozytora" abandon: "Zamknij kompozytor i odrzuć szkic" + edit_reason: "Dodaj powód edycji" enter_fullscreen: "Przejdź do pełnoekranowego kompozytora" exit_fullscreen: "Wyjdź z trybu pełnoekranowego kompozytora" exit_fullscreen_prompt: "Naciśnij ESC, aby wyjść z pełnego ekranu" @@ -3413,9 +3508,13 @@ pl_PL: available: title: "Nadchodzące zmiany" description: "„%{changeName}” jest dostępny do podglądu" + description_two: "„%{changeName1}” i „%{changeName2}” są dostępne do podglądu" + description_many: "'%{changeName}' i %{otherChangeCount} więcej zmian jest dostępnych do podglądu" automatically_promoted: title: "Nadchodzące zmiany" description: "Opcja „%{changeName}” została automatycznie włączona" + description_two: "„%{changeName1}” i „%{changeName2}” zostały automatycznie włączone" + description_many: "'%{changeName}' i %{otherChangeCount} więcej zmian zostało automatycznie włączonych" dismiss_confirmation: body: default: @@ -3482,8 +3581,8 @@ pl_PL: votes_released: "głos został opublikowany" new_features: "wydano nowe funkcje discourse" admin_problems: "nowe porady w panelu administratora" - upcoming_change_available: "dostępna jest nowa nadchodząca zmiana '%{changeName}'" - upcoming_change_automatically_promoted: "nadchodząca zmiana '%{changeName}' została automatycznie włączona" + upcoming_change_available: "dostępne są nowe nadchodzące zmiany" + upcoming_change_automatically_promoted: "nadchodzące zmiany zostały automatycznie włączone" upload_selector: change: "Zmień" delete: "Usuń" @@ -3622,8 +3721,6 @@ pl_PL: max_views: placeholder: maksimum aria_label: filtrować według maksymalnych wyświetleń - additional_options: - label: "Filtruj według liczby wpisów i wyświetleń tematu" hamburger_menu: "Menu nawigacyjne" new_item: "nowy" go_back: "wróć" @@ -3704,10 +3801,10 @@ pl_PL: confirm: "Potwierdź" select_all: "Zaznacz wszystkie" clear_all: "Wyczyść wszystko" - unlist_topics: "Zastrzeż tematy" - relist_topics: "Odśwież listę tematów" - reset_bump_dates: "Zresetuj daty ważności" - defer: "Oznacz jako nieprzeczytane" + unlist_topics: "Usuń tematy z listy" + relist_topics: "Zamieść ponownie tematy" + reset_bump_dates: "Zresetuj datę podbicia" + defer: "Oznacz jako nieprzeczytany" delete: "Usuń tematy" delete_topics_count: one: "Usuń temat" @@ -3725,13 +3822,13 @@ pl_PL: many: "Czy na pewno chcesz usunąć %{count} wpisów?" other: "Czy na pewno chcesz usunąć %{count} wpisów?" dismiss: "Wyczyść" - dismiss_read: "Wyczyść nieprzeczytane" + dismiss_read: "Odrzuć wszystkie nieprzeczytane" dismiss_read_with_selected: - one: "Odrzuć %{count} nieprzeczytane" + one: "Odrzuć %{count} nieprzeczytany" few: "Odrzuć %{count} nieprzeczytane" many: "Odrzuć %{count} nieprzeczytanych" other: "Odrzuć %{count} nieprzeczytanych" - dismiss_button: "Wyczyść…" + dismiss_button: "Odrzuć…" dismiss_button_with_selected: one: "Odrzuć (%{count})…" few: "Odrzuć (%{count})…" @@ -3763,19 +3860,14 @@ pl_PL: other: "Oddalenie nowe (%{count})" toggle: "włącz grupowe zaznaczanie tematów" actions: "Operacje grupowe" - change_category: "Ustaw kategorię…" + change_category: "Aktualizuj kategorię" close_topics: "Zamknij tematy" archive_topics: "Zarchiwizuj tematy" move_messages_to_inbox: "Przenieś do skrzynki odbiorczej" archive_messages: "Przenieś do archiwum" - notification_level: "Powiadomienia…" + notification_level: "Aktualizuj powiadomienia" change_notification_level: "Zmień poziom powiadomień" choose_new_category: "Wybierz nową kategorię dla tematów:" - selected: - one: "Zaznaczono %{count} temat." - few: "Zaznaczono %{count} tematy." - many: "Zaznaczono %{count} tematów." - other: "Zaznaczono %{count} tematów." selected_sole_category: one: "Wybrano %{count} temat z kategorii:" few: "Wybrano %{count} tematy z kategorii:" @@ -3789,20 +3881,60 @@ pl_PL: change_tags: "Zmień tagi" append_tags: "Dodaj tagi" choose_new_tags: "Wybierz nowe tagi dla tych tematów:" - choose_append_tags: "Wybierz nowe tagi dla tych tematów:" + choose_append_tags: "Dodaj tagi" changed_tags: "Tagi tych tematów były zmieniane." - remove_tags: "Usuń wszystkie tagi" + remove_tags: "Usuń tagi" confirm_remove_tags: one: "Wszystkie tagi zostaną usunięte z tego tematu. Jesteś pewny?" few: "Wszystkie tagi zostaną usunięte z %{count} tematów. Jesteś pewny?" many: "Wszystkie tagi zostaną usunięte z %{count} tematów. Jesteś pewny?" other: "Wszystkie tagi zostaną usunięte z %{count} tematów. Jesteś pewny?" + confirm_update_topics: + one: "Zaktualizuj %{count} temat" + few: "Zaktualizuj %{count} tematy" + many: "Zaktualizuj %{count} tematów" + other: "Zaktualizuj %{count} tematów" + confirm_close_topics: + one: "Zamknij %{count} temat" + few: "Zamknij %{count} tematy" + many: "Zamknij %{count} tematów" + other: "Zamknij %{count} tematów" + confirm_archive_topics: + one: "Zarchiwizuj %{count} temat" + few: "Zarchiwizuj %{count} tematy" + many: "Zarchiwizuj %{count} tematów" + other: "Zarchiwizuj %{count} tematów" + confirm_unlist_topics: + one: "Usuń z listy %{count} temat" + few: "Usuń z listy %{count} tematy" + many: "Usuń z listy %{count} tematów" + other: "Usuń z listy %{count} tematów" + confirm_relist_topics: + one: "Zamieść ponownie %{count} temat" + few: "Zamieść ponownie %{count} tematy" + many: "Zamieść ponownie %{count} tematów" + other: "Zamieść ponownie %{count} tematów" + confirm_archive_messages: + one: "Zarchiwizuj %{count} wiadomość" + few: "Zarchiwizuj %{count} wiadomości" + many: "Zarchiwizuj %{count} wiadomości" + other: "Zarchiwizuj %{count} wiadomości" + confirm_move_to_inbox: + one: "Przenieś %{count} wiadomość do skrzynki odbiorczej" + few: "Przenieś %{count} wiadomości do skrzynki odbiorczej" + many: "Przenieś %{count} wiadomości do skrzynki odbiorczej" + other: "Przenieś %{count} wiadomości do skrzynki odbiorczej" + confirm_delete_topics: + one: "Usuń %{count} temat" + few: "Usuń %{count} tematy" + many: "Usuń %{count} tematów" + other: "Usuń %{count} tematów" progress: one: "Postęp: %{count} temat" few: "Postęp: %{count} tematy" many: "Postęp: %{count} tematów" other: "Postęp: %{count} tematów" - notify: "Powiadom użytkowników o tej zmianie." + notify: "Powiadom użytkowników o tej zmianie" performing: "Wykonywanie operacji zbiorczych, proszę czekać…" completed: "Operacje masowe zakończone pomyślnie!" completed_count: @@ -3848,38 +3980,44 @@ pl_PL: name: "Odrzuć" close_topics: name: "Zamknij" - note: "Uwaga" + description: "Zamknięte tematy uniemożliwiają nowe odpowiedzi. Dowiedz się więcej" + note: "Dodaj notatkę do tych tematów" optional: (opcjonalne) archive_topics: name: "Archiwum" + description: "Zarchiwizowane tematy są ukryte w wynikach wyszukiwania i na liście najnowszych tematów. Dowiedz się więcej" archive_messages: name: "Przenieś do archiwum" move_messages_to_inbox: name: "Przenieś do skrzynki odbiorczej" unlist_topics: name: "Zastrzeż" + description: "Tematy niewymienione na liście są ukryte, ale nadal można uzyskać do nich dostęp za pomocą bezpośredniego linku. Dowiedz się więcej" relist_topics: name: "Dodaj do listy" remove_tags: name: "Usuń tagi" + description: "Usuń wszystkie tagi z wybranych tematów." append_tags: name: "Dodaj tagi" + description: "Dodaj następujące tagi do wybranych tematów:" replace_tags: name: "Zmień tagi" + description: "Zastąp wszystkie istniejące tagi w wybranych tematach następującymi:" delete_topics: name: "Usuń" + description: "Trwale usuń wybrane tematy. Tej czynności nie można cofnąć." update_category: name: "Aktualizuj kategorię" - description: "Wybierz nową kategorię dla wybranych tematów" + description: "Przenieś wszystkie wybrane tematy do następującej kategorii:" reset_bump_dates: name: "Zresetuj datę odświeżenia" - description: "Ustaw datę odświeżenia tematu na datę utworzenia ostatniego posta. Wpływa to na kolejność tematów na liście." + description: "Czy chcesz zaktualizować daty publikacji postów do daty ostatniego utworzenia? Może to wpłynąć na ich kolejność na liście tematów." defer: name: "Oznacz jako nieprzeczytane" - description: "Oznacz tematy jako nieprzeczytane" update_notifications: name: "Aktualizuj powiadomienia" - description: "Zmień poziom powiadomień na obserwowanie, śledzone, normalne lub wyciszone" + description: "Zaktualizuj swój osobisty poziom powiadomień dla wybranych tematów, aby:" topic: filter_to: one: "%{count} post w temacie" @@ -4077,6 +4215,11 @@ pl_PL: few: "Ostatni wpis w tym temacie został zamieszczony %{count} godziny temu, więc zostanie on natychmiastowo zamknięty." many: "Ostatni wpis w tym temacie został zamieszczony %{count} godzin temu, więc zostanie on natychmiastowo zamknięty." other: "Ostatni wpis w tym temacie został zamieszczony %{count} godzin temu, więc zostanie on natychmiastowo zamknięty." + auto_delete_immediate: + one: "Ostatni wpis tematu jest już od %{count} godziny, więc temat zostanie natychmiast usunięty." + few: "Ostatni wpis tematu jest już od %{count} godzin, więc temat zostanie natychmiast usunięty." + many: "Ostatni wpis tematu jest już od %{count} godzin, więc temat zostanie natychmiast usunięty." + other: "Ostatni wpis tematu jest już od %{count} godzin, więc temat zostanie natychmiast usunięty." timeline: back: "Wstecz" back_description: "Wróć do ostatniego nieprzeczytanego wpisu" @@ -4497,7 +4640,11 @@ pl_PL: edit: "Edytuj" delete: "Usuń" add: "Dodaj nowe tłumaczenie" - manage: "Zarządzaj tłumaczeniami (istniejące: %{count})" + manage: + one: "Zarządzaj tłumaczeniami (istniejące: %{count})" + few: "Zarządzaj tłumaczeniami (istniejące: %{count})" + many: "Zarządzaj tłumaczeniami (istniejące: %{count})" + other: "Zarządzaj tłumaczeniami (istniejące: %{count})" view: one: "Wyświetl %{count} przetłumaczone ustawienia regionalne" few: "Wyświetl %{count} przetłumaczone ustawienia regionalne" @@ -4657,6 +4804,7 @@ pl_PL: many: "Czy na pewno chcesz połączyć te %{count} postów?" other: "Czy na pewno chcesz połączyć te %{count} postów?" revisions: + diff_too_complex: "Różnica jest zbyt złożona, aby ją wyświetlić. Spróbuj wyświetlić pojedyncze, mniejsze zmiany." locale: no_locale_set: "Nie ustawiono języka" locale_removed: "Język usunięty" @@ -4732,6 +4880,7 @@ pl_PL: instructions: "Udostępnij link do tego posta:" original_language: "Ten post został pierwotnie napisany w %{language}" original_language_and_outdated: "Ten post został pierwotnie napisany w %{language}. Tłumaczenie może być nieaktualne" + ai_translation_disclaimer: "Tłumaczenia wygenerowane przez AI mogą być niedokładne." category: none: "(brak kategorii)" all: "Wszystkie kategorie" @@ -4746,9 +4895,13 @@ pl_PL: advanced: "Zaawansowane" show_advanced: "Ustawienia zaawansowane" topic_template: "Szablon" + topic_title_placeholder: "Symbol zastępczy tytułu tematu kategorii" + topic_title_placeholder_placeholder: "[opcjonalnie] niestandardowy symbol zastępczy tytułu tematu dla tej kategorii" tags: "Tagi" localizations: "Języki" localization: + language: "Język kategorii" + language_description: "Podstawowy język nazwy i opisu tej kategorii." locale: "Ustawienia regionalne" name: "Nazwa" description: "Opis" @@ -4769,11 +4922,24 @@ pl_PL: delete: "Usuń" add: "Dodaj wymaganą grupę tagów" placeholder: "Wybierz grupę tagów…" + min_count: "Liczba tagów" + tag_group: "Grupa tagów" topic_featured_link_allowed: "Zezwól na wybrane linki w tej kategorii" delete: "Usuń kategorię" create: "Nowa kategoria" + create_with_type: "Nowa kategoria %{typeName}" create_long: "Utwórz nową kategorię" + settings_apply_to_all_of_type_warning: "Poniższe zmiany będą dotyczyć wszystkich kategorii tego typu" + type_settings_schema: + category_settings: "Ustawienia kategorii" + category_custom_fields: "Ustawienia kategorii" + site_settings: "Ustawienia witryny" + choose_type: + title: "Wybierz typ kategorii" + requires_plugin: "Wymaga wtyczki" + create_category: "Utwórz kategorię" save: "Zapisz kategorię" + unsaved_changes: "Masz niezapisane zmiany" slug: "Slug kategorii" parent: "Kategoria nadrzędna" slug_placeholder: "(opcjonalne) słowa-z-myślnikiem dla URLi" @@ -4784,6 +4950,7 @@ pl_PL: validations: emoji_required: "Wybierz emoji." icon_required: "Wybierz ikonę." + groups_required: "Wybierz co najmniej jedną grupę dla tego trybu zatwierdzania." name: "Nazwa kategorii" untitled: "Kategoria bez tytułu" description: "Opis" @@ -4796,6 +4963,7 @@ pl_PL: icon: "Ikona" emoji: "Emoji" select_emoji: "Wybierz emoji" + select_icon: "Wybierz ikonę" background_color: "Kolor" foreground_color: "Kolor tekstu" color_validations: @@ -4820,6 +4988,9 @@ pl_PL: list: "Wymień kategorie" no_description: "Proszę dodaj opis do tej kategorii." change_in_category_topic: "Edytuj opis" + description_updated: "Opis zaktualizowano" + description_expand: "Pokaż więcej" + description_collapse: "Pokaż mniej" already_used: "Ten kolor jest używany przez inną kategorię" color_palette: "Paleta kolorów" security: "Bezpieczeństwo" @@ -4865,6 +5036,14 @@ pl_PL: review_group_name: "nazwa grupy" require_topic_approval: "Wymagaj zatwierdzenia moderatora dla wszystkich nowych tematów" require_reply_approval: "Wymagaj zatwierdzenia moderatora dla wszystkich nowych odpowiedzi" + require_topic_approval_for: "Wymagaj zatwierdzenia nowych tematów przez moderatora..." + require_reply_approval_for: "Wymagaj zatwierdzenia nowych odpowiedzi przez moderatora..." + posting_review_modes: + no_one: "Nikt" + everyone: "Wszyscy" + everyone_except: "Wszyscy oprócz wybranych grup" + no_one_except: "Nikt oprócz wybranych grup" + posting_review_groups_placeholder: "Wybierz grupy..." this_year: "ten rok" position: "Pozycja na stronie kategorii:" default_position: "Domyślna pozycja" @@ -5439,17 +5618,25 @@ pl_PL: category_restricted: "Ten tag jest ograniczony do kategorii, do których nie masz uprawnień dostępu." synonyms: "Synonimy" synonyms_description: "W przypadku użycia następujących tagów zostaną one zastąpione przez %{base_tag_name}." + synonyms_inline: "Synonimy te zostaną zastąpione przez %{base_tag_name}:" save: "Zapisz nazwę i opis tagu" tag_groups_info: one: 'Ten tag należy do grupy "%{tag_groups}”.' few: "Ten tag należy do następujących grup: %{tag_groups}." many: "Ten tag należy do następujących grup: %{tag_groups}." other: "Ten tag należy do następujących grup: %{tag_groups}." + tag_groups_info_prefix: + one: "Ten tag należy do grupy " + few: "Te tagi należą do grupy: " + many: "Te tagi należą do grupy: " + other: "Te tagi należą do grupy: " category_restrictions: one: "Można go używać tylko w tej kategorii:" few: "Można go używać tylko w tych kategoriach:" many: "Można go używać tylko w tych kategoriach:" other: "Można go używać tylko w tych kategoriach:" + restricted_to: "Ograniczone do" + no_synonyms: "Ten tag nie ma synonimów." edit_synonyms: "Edytuj synonimy" add_synonyms_label: "Dodaj synonimy:" add_synonyms: "Dodaj" @@ -5475,7 +5662,34 @@ pl_PL: other: "Jego %{count} synonimów również zostanie usuniętych." edit_tag: "Edytuj nazwę tagu i opis" edit: "Edytuj ten tag" - description: "Opis (maks. 1000 znaków)" + description: "Opis" + settings: + title: "Ustawienia" + edit_title: "Edytuj tag: %{name}" + edit_tag_prefix: "Edytuj tag:" + select_tag: "Wybierz tag do edycji" + general: "Ogólne" + localizations: "Języki" + back: "Wstecz" + name: "Nazwa" + slug: "Identyfikator tekstowy" + name_placeholder: "Nazwa tagu" + slug_placeholder: "Identyfikator tekstowy tagu (opcjonalny, generowany automatycznie z nazwy)" + saved: "Zapisane ustawienia tagów" + no_synonyms: "Dla tego tagu nie zdefiniowano synonimów." + add_synonym_placeholder: "Wyszukaj tagi, które chcesz dodać jako synonimy..." + synonyms_subtitle: "W przypadku użycia następujących tagów zostaną one zastąpione przez %{name}" + save: "Zapisz tag" + delete: "Usuń tag" + synonyms_hint: "W przypadku użycia powyższych tagów zostaną one zastąpione przez %{baseTagName}." + add_synonyms_confirm: "Każde miejsce, w którym obecnie używany jest kod %{synonymNames} , zostanie zmienione na kod %{tagName} . Czy na pewno chcesz wprowadzić tę zmianę?" + localization: + hint: "Dodaj lokalizacje, aby wyświetlać różne nazwy tagów użytkownikom w różnych językach." + locale: "Ustawienia regionalne" + name: "Nazwa" + description: "Opis" + add: "Dodaj lokalizację" + remove: "Usuń lokalizację" sort_by: "Sortuj po:" sort_by_count: "Liczba" sort_by_name: "nazwa" @@ -6025,7 +6239,7 @@ pl_PL: admin_js: type_to_filter: "Pisz, aby filtrować…" settings: "Ustawienia" - reset_filter: "Przywróć" + reset_filter: "Zresetuj filtr" toggle_filters: "Przełącz filtry rozwijane" admin: title: "Administrator Discourse" @@ -6039,9 +6253,15 @@ pl_PL: never: "nigdy" reports: title: "Lista dostępnych zgłoszeń" - meta_doc: "Raporty to potężne narzędzie, które pomoże Ci zrozumieć, co dzieje się w Twojej witrynie. Mogą pomóc Ci zidentyfikować trendy, zauważyć problemy i podejmować decyzje w oparciu o dane." sidebar_title: "Zgłoszenia" back: "Powrót do wszystkich raportów" + group_engagement: "Zaangażowanie" + group_traffic: "Ruch" + group_members: "Członkowie" + group_content: "Treść i zdrowie" + group_moderation_and_security: "Moderacja i bezpieczeństwo" + group_other: "Inne" + legacy_warning: "To jest starszy raport. Wkrótce zostanie wycofany. Jeśli potrzebujesz pomocy w znalezieniu zamiennika, skontaktuj się z pomocą techniczną." config_sections: account: title: "Konto" @@ -6083,10 +6303,12 @@ pl_PL: permanent_no_group_selection: "Nie dotyczy, stałe zmiany dotyczą wszystkich grup." no_changes: "W tej chwili nie ma żadnych nadchodzących zmian." preview: "Podgląd" + default_warning: "Domyślna wartość tego ustawienia została zmieniona z %{oldDefaultValue} na %{newDefaultValue} z powodu nadchodzącej zmiany." + default_warning_short: "Domyślna wartość tego ustawienia uległa zmianie. Więcej informacji na ten temat znajdziesz na stronie nadchodzące zmiany." enabled_for_options: no_one: "Nikt" everyone: "Wszyscy" - staff: "Wyłącznie dla zespołu" + staff: "Tylko %{staffGroupName}" specific_groups: "Określone grupy" specific_groups_with_group_names: one: "grupa %{groupNames}" @@ -6099,6 +6321,11 @@ pl_PL: beta: "Beta" stable: "Stabilna" permanent: "Stała" + status_descriptions: + experimental: "Funkcja jest na wczesnym etapie rozwoju i może ulec znacznym zmianom lub zostać wycofana. Może nie być w pełni kompatybilna z innymi funkcjami." + alpha: "Jest on aktywnie rozwijany i udoskonalany. Funkcjonalność może ulec zmianie i może nie być w pełni dopracowany, ale jest wystarczająco stabilny, aby go wypróbować." + beta: "Rozwiązanie jest już prawie ukończone i dostępne do szybkiego wdrożenia. Możliwe są jednak drobne zmiany." + stable: "To jest kompletne i dobrze obsługiwane. Wkrótce będzie dostępne na wszystkich stronach Discourse." impact_roles: admins: "Administratorzy" moderators: "Moderatorzy" @@ -6111,12 +6338,13 @@ pl_PL: all: "Wszystkie" enabled_all: "Wszystkie włączone stany" enabled: "Włączona" - enabled_for_staff: "Włączone dla personelu" + enabled_for_staff: "Włączone dla %{staffGroupName}" enabled_for_specific_groups: "Włączone dla określonych grup" disabled: "Wyłączone" impact_type_all: "Wszystkie rodzaje uderzeń" impact_type_feature: "Funkcja" impact_type_other: "Inne" + impact_type_site_setting_default: "Ustawienie domyślne" status_all: "Wszystkie statusy" status_conceptual: "Konceptualny" status_experimental: "Eksperymentalne" @@ -6201,7 +6429,7 @@ pl_PL: help_text: "Zalecany rozmiar to 600 x 80 pikseli." large_icon: title: "Kwadratowa ikona" - description: "Kwadratowa wersja obrazu logo jest wyświetlana u góry panelu administracyjnego i stanowi również logo aplikacji na ekranie głównym urządzenia mobilnego." + description: "Kwadratowa wersja obrazu logo znajduje się u góry witryny i jest jednocześnie logo aplikacji mobilnej." help_text: "Zalecany rozmiar to 512 x 512 pikseli." square_icon_dark: required: "Użyć innej ikony kwadratowej dla trybu ciemnego?" @@ -6391,7 +6619,7 @@ pl_PL: header_description: "Raporty to potężne narzędzie, które pomoże Ci zrozumieć, co dzieje się w Twojej witrynie. Mogą pomóc Ci zidentyfikować trendy, zauważyć problemy i podejmować decyzje w oparciu o dane." sub_pages: settings: - title: "Ustawienia panelu" + title: "Ustawienia" badges: title: "Odznaki" header_description: "Odznaki nagradzają użytkowników za ich aktywność, wkład i osiągnięcia, aby rozpoznawać, potwierdzać i zachęcać do pozytywnych zachowań i zaangażowania w społeczności" @@ -6549,32 +6777,6 @@ pl_PL: few: '%{count} wyniki dla "%{filter}"' many: '%{count} wyników dla "%{filter}"' other: '%{count} wyników dla "%{filter}"' - result_types: - page: - one: "Strona" - few: "Strony" - many: "Stron" - other: "Stron" - report: - one: "Zgłoszenie" - few: "Zgłoszenia" - many: "Zgłoszeń" - other: "Zgłoszeń" - setting: - one: "Ustawienie" - few: "Ustawienia" - many: "Ustawień" - other: "Ustawień" - theme: - one: "Motyw" - few: "Motywy" - many: "Motywy" - other: "Motywy" - component: - one: "Komponent" - few: "Komponenty" - many: "Komponenty" - other: "Komponenty" new_features: title: "Co nowego?" check_for_updates: "Sprawdź aktualizacje" @@ -6598,25 +6800,8 @@ pl_PL: title: "Co nowego?" subtitle: "Cały czas udostępniamy nowe funkcje i ulepszenia. Ta strona obejmuje najważniejsze z nich, ale możesz kliknąć 'Dowiedz się więcej', aby zobaczyć obszerne informacje o wersji." no_new_features_found: "Brak elementów w kanale lub wybrany filtr nie zwrócił żadnych wyników. Poprzednie ogłoszenia o nowych funkcjach można zobaczyć w społeczności Discourse Meta." - no_new_features_error: "Wystąpił błąd podczas ładowania kanału. Poprzednie ogłoszenia o nowych funkcjach można zobaczyć w społeczności Discourse Meta ." + no_new_features_error: "Wystąpił błąd podczas ładowania kanału. Poprzednie ogłoszenia o nowych funkcjach można zobaczyć w społeczności Discourse Meta." learn_more: "Dowiedz się więcej..." - experimental: "Eksperymentalne" - only_experiments: "Pokaż tylko funkcje eksperymentalne" - experiment_enabled: "Włączono funkcję eksperymentalną." - experiment_disabled: "Wyłączono funkcję eksperymentalną." - feature_enabled: "Włączyłeś tę funkcję." - feature_disabled: "Wyłączyłeś tę funkcję." - toggled_too_fast: "Przełączyłeś przełącznik zbyt szybko. Odczekaj kilka sekund przed ponowną próbą." - experiment_tooltip: - title_disabled: "Wypróbuj tę eksperymentalną funkcję" - title_enabled: "Wyłącz funkcję eksperymentalną" - content_disabled: "Wypróbuj naszą najnowszą, rozwijaną funkcję! Jest jeszcze w fazie eksperymentalnej, więc możemy ją usunąć w dowolnym momencie. Możesz zrezygnować, kiedy tylko chcesz.

Zmiana tej opcji spowoduje włączenie tej funkcji dla wszystkich użytkowników." - content_enabled: "Zmiana tej opcji spowoduje wyłączenie funkcji dla wszystkich użytkowników." - feature_tooltip: - title_disabled: "Wypróbuj tę funkcję" - title_enabled: "Wyłącz funkcję" - content_disabled: "Wypróbuj tę nową funkcję! Możesz z niej zrezygnować, kiedy tylko chcesz.

Zmiana tej opcji spowoduje włączenie tej funkcji dla wszystkich użytkowników." - content_enabled: "Zmiana tej opcji spowoduje wyłączenie funkcji dla wszystkich użytkowników." last_checked: "Ostatnio sprawdzana" refresh_problems: "Odśwież" no_problems: "Nie znaleziono problemów." @@ -6687,10 +6872,11 @@ pl_PL: all: "Wszystkie" view_table: "tabela" view_graph: "wykres" - refresh_report: "Odśwież raport" + refresh_report: "Odśwież" daily: Dziennie monthly: Miesięcznie weekly: Tygodniowo + chart_group_period: "Wybierz okres" value_so_far: "%{value} (jak dotąd)" dates: "Daty (UTC)" groups: "Wszystkie grupy" @@ -7549,6 +7735,7 @@ pl_PL: dark_color_scheme: "Ciemna paleta kolorów" default_light_scheme: "Jasny (domyślnie)" color_scheme_select: "Wybierz kolory, które mają być użyte w zależności od motywu." + only_theme_color_schemes: "Ten motyw ogranicza palety kolorów, które mogą być używane." dark_color_scheme_select: "Wybierz kolory, które mają być używane w trybie ciemnym." edit_colors: "Edytuj kolory" custom_sections: "Spersonalizowane sekcje:" @@ -7613,7 +7800,7 @@ pl_PL: import_web_tip: "Repozytorium zawierające motyw" direct_install_tip: "Czy na pewno chcesz zainstalować %{name} z repozytorium wymienionego poniżej?" import_web_advanced: "Zaawansowane…" - import_file_tip: "plik .tar.gz, .zip, lub .dcstyle.json zawierający motyw" + import_file_tip: "Plik .tar.gz lub .zip zawierający motyw" is_private: "Motyw jest w prywatnym repozytorium git" finish_install: "Zakończ instalację motywu" last_attempt: "Proces instalacji nie został zakończony, ostatnia próba:" @@ -7650,6 +7837,16 @@ pl_PL: update_success: "Aktualizacja motywu %{theme} zakończona" up_to_date: "Motyw jest aktualny. Ostatnio sprawdzano:" has_overwritten_history: "Bieżąca wersja motywu już nie istnieje, ponieważ historia Git została nadpisana przez wymuszony push." + change_source: + button: "Zmień źródło" + title: "Zmień źródło motywu" + repository_url: "Adres URL repozytorium" + branch: "Gałąź (opcjonalnie)" + updating: "Aktualizowanie źródła motywu…" + update: "Aktualizuj źródło" + has_existing_key: "W tym motywie skonfigurowano istniejący klucz SSH." + generate_new_key: "Wygeneruj nowy klucz SSH" + keep_existing_key: "Zachowaj istniejący klucz SSH" add: "Dodaj" theme_settings: "Ustawienia motywu niestandardowego" theme_site_settings: "Ustawienia, które motyw może zastąpić" @@ -8103,6 +8300,7 @@ pl_PL: upcoming_change_available: "nadchodząca zmiana dostępna" change_site_setting_groups: "zmień grupy ustawień witryny" discourse_id_regenerate_credentials: "wygeneruj ponownie dane uwierzytelniające Discourse ID" + configure_category_type: "skonfiguruj typ kategorii" screened_emails: title: "Sprawdzone e-maile" description: "Kiedy ktoś próbuje założyć nowe konto, jego adres email zostaje sprawdzony i rejestracja zostaje zablokowana, lub inna akcja jest podejmowana." @@ -8728,6 +8926,7 @@ pl_PL: field_types: text: "Tekst" textarea: "Obszar tekstowy" + date: "Data" confirm: "Potwierdzenie" dropdown: "Lista rozwijana" multiselect: "Wielokrotny wybór" @@ -8748,6 +8947,9 @@ pl_PL: more_than_50_results: "Istnieje ponad 50 wyników. Zawęź wyszukiwanie." no_results: "Nie znaleziono pasujących tekstów witryny" interpolation_keys: "Dostępne klucze interpolacji:" + interpolation_key_insert: "Kliknij, aby wstawić" + interpolation_key_used: "Już używane" + interpolation_key_invalid: "Nieznany klucz — nie będzie interpolowany" outdated: title: "To tłumaczenie jest nieaktualne" description: "Domyślne tłumaczenie tego klucza zmieniło się od czasu utworzenia tego zastąpienia. Sprawdź poniżej, czy Twoje tłumaczenie odpowiada wszelkim zmianom wprowadzonym w pierwotnej intencji." @@ -8876,7 +9078,7 @@ pl_PL: min_admin_password_length: prompt: "Zamierzasz zmienić swoją politykę dotyczącą haseł. Od teraz będzie to dotyczyć wszystkich administratorów zmieniających hasła. Czy na pewno chcesz kontynuować?" confirm: "Tak, zaktualizuj politykę haseł" - password_unique_charactes: + password_unique_characters: prompt: "Zamierzasz zmienić swoją politykę dotyczącą haseł. Będzie to miało wpływ na wszystkich użytkowników, którzy od tej pory będą zmieniać swoje hasła. Czy na pewno chcesz kontynuować?" confirm: "Tak, zaktualizuj politykę haseł" block_common_passwords: @@ -9052,6 +9254,8 @@ pl_PL: crawler_settings_saved: "Ustawienia robota zostały zapisane" back: "Powrót do osadzania" configuration_snippet: "Fragment konfiguracji" + full_app_mode: "Pełny tryb aplikacji" + full_app_mode_description: "Załaduj pełną aplikację Discourse w osadzonej ramce iframe, umożliwiając użytkownikom odpowiadanie, polubienie, cytowanie i bezpośrednią interakcję z tematami" host_form: add_header: "Dodaj host" edit_header: "Edytuj hosta" diff --git a/config/locales/client.pt.yml b/config/locales/client.pt.yml index 457443cb7a5ca..29208035a3c65 100644 --- a/config/locales/client.pt.yml +++ b/config/locales/client.pt.yml @@ -6,6 +6,12 @@ pt: js: + blocks: + ghost: + status: "Estado" + in_location: "em" + hidden: "escondido" + failed: "falhado" number: format: separator: "." @@ -409,6 +415,8 @@ pt: pill: "Sugerido" pm_title: "Mensagens Sugeridas" admin_onboarding_banner: + start_posting: + back: "Anterior" spread_the_word: action: "Copiar hiperligação" about: @@ -492,8 +500,6 @@ pt: other: "Criado há %{count} anos atrás" bookmarked: title: "Adicionar Marcador" - edit_bookmark: "Editar Marcador" - clear_bookmarks: "Limpar Marcadores" help: bookmark: "Clique para adicionar este tópico aos marcadores" edit_bookmark: "Clique para editar o marcador de uma mensagem neste tópico" @@ -512,12 +518,12 @@ pt: clear_reminder: "Limpar lembrete" edit: "Editar marcador" not_bookmarked: "adicionar esta mensagem aos marcadores" + topic_bookmark: "Tópico" remove_reminder_keep_bookmark: "Remover lembrete e manter marcador" created_with_reminder: "Você marcou este post com um lembrete %{date}. %{name}" created_with_reminder_generic: "Marcou isto com um lembrete %{date}. %{name}" delete: "Eliminar Marcador" confirm_delete: "Tem a certeza que deseja eliminar este marcador? O lembrete também será eliminado." - confirm_clear: "Tem a certeza que deseja limpar todos os marcadores deste tópico?" save: "Guardar" no_timezone: 'Você ainda não definiu um fuso horário. Você não poderá definir lembretes. Configure um no seu perfil.' invalid_custom_datetime: "A data e a hora fornecidas são inválidas, tente novamente." @@ -649,19 +655,13 @@ pt: in_reply_to: "Em resposta a" filtered_flagged_by: "Sinalizado por" unknown: - title: - one: "Tem revisões pendentes de um plugin desativado:" - other: "Tem revisões pendentes de plugins desativados:" instruction: "Não podem ser exibidos corretamente até que ative o plugin relevante. Por favor, ative o plugin e atualize a página. Alternativamente, pode ignorá-los. Saiba mais..." reviewable_unknown_source: "%{reviewableType} (plugin desconhecido)" reviewable_known_source: "%{reviewableType} (do plugin '%{pluginName}')" ignore_all: "Ignora tudo" enable_plugins: "Ativar os plugins" - delete_confirm: "Tem a certeza de que pretende eliminar todas as avaliações criadas por plugins desativados?" - ignore_success: "Todas as avaliações criadas por plugins desativados foram eliminadas." explain: why: "explique por que este item acabou na fila" - title: "Pontuação passível de revisão" formula: "Fórmula" subtotal: "Subtotal" total: "Total" @@ -675,10 +675,8 @@ pt: title: "Os utilizadores com um histórico de sinalizações concordantes obtêm um bónus." trust_level_bonus: name: "nível de confiança" - title: "Os itens para revisão criados por utilizadores de nível de confiança superior têm uma pontuação mais elevada." type_bonus: name: "tipo de bónus" - title: "Determinado tipo de revisões podem receber um bónus por parte da equipa para terem uma prioridade mais elevada." revise_and_reject_post: title: "Rever" reason: "Motivo" @@ -687,7 +685,6 @@ pt: custom_reason: "Dê uma descrição clara do motivo" other_reason: "Outro..." optional: "opcional" - stale_help: "Esta revisão foi resolvida por %{username}." claim_help: optional: "Pode reivindicar este item para prevenir que outras pessoas o revejam." required: "Deve reivindicar items antes de as poder rever." @@ -1668,6 +1665,9 @@ pt: interface: "Interface" apps: "Aplicações" navigation_menu: "Menu de Navegação" + calendar_subscriptions: + copied: "Copiado!" + add_to_google: "Calendário Google" change_password: success: "(email enviado)" in_progress: "(a enviar email)" @@ -2274,6 +2274,7 @@ pt: form_kit: reset: Repor optional: opcional + required: obrigatório dirty_form: "Não submeteste as tuas alterações! Tens a certeza de que queres sair?" errors: starts_with: "Deve começar com %{prefix}" @@ -3128,9 +3129,6 @@ pt: bulk: select_all: "Selecionar Tudo" clear_all: "Remover Tudo" - unlist_topics: "Remover Tópicos da Lista" - relist_topics: "Voltar a Listar Tópicos" - delete: "Eliminar Tópicos" delete_topics_count: one: "Eliminar Tópico" other: "Eliminar Tópicos" @@ -3154,22 +3152,11 @@ pt: other: "Descartar Novos (%{count})" toggle: "ativar seleção em massa de tópicos" actions: "Ações em Massa" - change_category: "Definir Categoria..." - close_topics: "Fechar Tópicos" - archive_topics: "Arquivar tópicos" move_messages_to_inbox: "Mover para a Caixa de Entrada" - notification_level: "Notificações…" change_notification_level: "Alterar Nível de Notificação" choose_new_category: "Escolha a nova categoria para os tópicos:" - selected: - one: "Selecionou %{count} tópico." - other: "Selecionou %{count} tópicos." - change_tags: "Substituir Etiquetas" - append_tags: "Anexar Etiquetas" choose_new_tags: "Escolha novas etiquetas para estes tópicos:" - choose_append_tags: "Escolha novas etiquetas para acrescentar a estes tópicos:" changed_tags: "As etiquetas para esses tópicos foram mudadas." - remove_tags: "Remover Todas as Etiquetas" confirm_remove_tags: one: "Todas as etiquetas serão removidas deste tópico. Tem a certeza?" other: "Todas as etiquetas serão removidas de %{count} tópicos. Tem a certeza?" @@ -3199,15 +3186,12 @@ pt: name: "Arquivo" move_messages_to_inbox: name: "Mover para a Caixa de Entrada" - append_tags: - name: "Anexar Etiquetas" replace_tags: name: "Substituir Etiquetas" delete_topics: name: "Eliminar" defer: name: "Marcar como Não Lido" - description: "Marcar tópicos como não lido" update_notifications: name: "Notificações de Atualização" topic: @@ -3665,7 +3649,9 @@ pt: edit: "Editar" delete: "Eliminar" add: "Adicionar nova tradução" - manage: "Gerir traduções (existentes: %{count})" + manage: + one: "Gerir traduções (existentes: %{count})" + other: "Gerir traduções (existentes: %{count})" view: one: "Ver %{count} idioma traduzido" other: "Ver %{count} idiomas traduzidos" @@ -3867,6 +3853,7 @@ pt: allow_global_tags_label: "Permita também outras tags" required_tag_group: delete: "Eliminar" + tag_group: "Grupo de tags" topic_featured_link_allowed: "Permitir hiperligações em destaque nesta categoria" create_long: "Criar uma nova categoria" slug_placeholder: "(Opcional) palavras com travessão no URL" @@ -3896,6 +3883,8 @@ pt: delete_confirm: "Tem a certeza que deseja eliminar esta categoria?" delete_error: "Ocorreu um erro ao eliminar a categoria." no_description: "Por favor adicione uma descrição para esta categoria." + description_expand: "Mostrar mais" + description_collapse: "Mostrar menos" already_used: "Esta cor já foi usada para outra categoria" security: "Segurança" security_add_group: "Adicionar um grupo" @@ -3923,6 +3912,9 @@ pt: subcategory_list_style: "Estilo da Lista de Subcategorias:" allow_badges_label: "Permitir a atribuição de crachás nesta categoria" review_group_name: "nome do grupo" + posting_review_modes: + everyone: "Todos" + posting_review_groups_placeholder: "Selecionar grupos..." this_year: "este ano" none_subcategory_text: "Nenhuma" visibility: @@ -4306,6 +4298,19 @@ pt: delete_confirm_synonyms: one: "Seu sinônimo também será excluído." other: "Seus %{count} sinônimos também serão excluídos." + description: "Descrição" + settings: + title: "Configurações" + general: "Geral" + localizations: "Localizações" + back: "Anterior" + name: "Nome" + slug: "Slug" + synonyms_subtitle: "Quando as tags seguintes forem usadas, elas serão substituídas por %{name}" + localization: + locale: "Idioma" + name: "Nome" + description: "Descrição" sort_by: "Ordenar por:" sort_by_count: "contagem" sort_by_name: "nome" @@ -4507,7 +4512,6 @@ pt: admin_js: type_to_filter: "Digite para filtrar..." settings: "Configurações" - reset_filter: "Repor" admin: title: "Administração Discourse" moderator: "Moderador" @@ -4521,6 +4525,9 @@ pt: title: "Lista de relatórios disponíveis" sidebar_title: "Relatórios" back: "Voltar para todos os relatórios" + group_traffic: "Tráfego" + group_members: "Membros" + group_other: "Outro" config_sections: account: title: "Conta" @@ -4544,7 +4551,6 @@ pt: preview: "Pré-visualização" enabled_for_options: everyone: "Todos" - staff: "Apenas Pessoal" statuses: experimental: "Experimental" impact_roles: @@ -4664,6 +4670,9 @@ pt: title: "Logs" reports: title: "Relatórios" + sub_pages: + settings: + title: "Configurações" badges: title: "Crachás" permalinks: @@ -4712,13 +4721,6 @@ pt: site_setting_warning: 'Esta definição é gerida pelo tema predefinido para o seu site (%{defaultThemeName}). Pode modificá-la na página de edição do tema.' search: title: "Pesquisar" - result_types: - theme: - one: "Tema" - other: "Temas" - component: - one: "Componente" - other: "Componentes" new_features: title: "O que é novo?" check_for_updates: "Procurar por atualizações" @@ -4739,18 +4741,6 @@ pt: new_features: title: "O que é novo?" learn_more: "Saiba mais..." - experimental: "Experimental" - only_experiments: "Mostrar apenas as funcionalidades experimentais" - experiment_enabled: "Ativou a funcionalidade experimental." - experiment_disabled: "Desativou a funcionalidade experimental." - feature_enabled: "Ativou a funcionalidade." - feature_disabled: "Desativou a funcionalidade." - experiment_tooltip: - title_disabled: "Teste esta funcionalidade experimental" - title_enabled: "Desativar a funcionalidade experimental" - feature_tooltip: - title_disabled: "Teste esta funcionalidade" - title_enabled: "Desativar funcionalidade" last_checked: "Última verificação" refresh_problems: "Atualizar" no_problems: "Nenhum problema encontrado." @@ -4801,7 +4791,7 @@ pt: all: "Tudo" view_table: "tabela" view_graph: "grafo" - refresh_report: "Atualizar relatório" + refresh_report: "Atualizar" daily: Diário monthly: Mensal weekly: Semanal @@ -5797,6 +5787,7 @@ pt: disabled: "Não apresentado no formulário de registo" field_types: text: "Texto" + date: "Data" confirm: "Confirmação" dropdown: "Lista pendente" site_text: diff --git a/config/locales/client.pt_BR.yml b/config/locales/client.pt_BR.yml index 7579c5ab6b128..7530fdbcdc8fe 100644 --- a/config/locales/client.pt_BR.yml +++ b/config/locales/client.pt_BR.yml @@ -6,6 +6,26 @@ pt_BR: js: + blocks: + ghost: + status: "Status" + conditions: "Condições" + arguments: "Argumentos" + container_args: "Argumentos do container" + in_location: "em" + hidden: "oculto" + not_registered: "não registrado" + no_visible_children: "sem filhos visíveis" + failed: "falhou" + ghost_reasons: + optional_missing_hint: "Este bloco opcional não foi renderizado porque não está registrado." + no_visible_children_hint: "Este bloco de container não foi renderizado porque nenhum de seus filhos está visível." + condition_failed_hint: "Este bloco não foi renderizado porque suas condições falharam." + head_hidden_tail_hint: "Este bloco não foi renderizado porque outro bloco foi renderizado primeiro no container `head`." + carousel: + go_to_slide: "Ir para o slide %{index}" + previous: "Slide anterior" + next: "Próximo slide" number: format: separator: "," @@ -285,13 +305,21 @@ pt_BR: forwarded: "Encaminhou o e-mail acima" topic_admin_menu: "ações de tópico" skip_to_main_content: "Ir para o conteúdo principal" - skip_to_post: "Ir para o post %{post_number}" + skip_links_label: "Ignorar links de navegação" + skip_to_post: "Ir para a postagem %{post_number}" + skip_to_where_you_left_off: "Voltar ao ponto onde parou (postagem %{post_number})" + skip_to_where_you_left_off_last: "Voltar ao ponto onde parou (última resposta, postagem %{post_number})" + skip_to_last_reply: "Ir para a última resposta" + skip_to_top: "Pular para o topo" skip_user_nav: "Pular para o conteúdo do perfil" emails_are_disabled: "Todos os envios de e-mail foram desabilitados globalmente por um administrador. Nenhuma notificação por e-mail de qualquer tipo será enviada." + emails_are_disabled_no_smtp: "O envio de e-mails está desativado porque nenhum servidor SMTP foi configurado. Não é possível enviar nenhum tipo de e-mail." emails_are_disabled_non_staff: "O e-mail de saída foi desabilitado para usuários(as) que não são da equipe." software_update_prompt: message: "Este site foi atualizado, atualize a página para manter tudo funcionando." dismiss: "Descartar" + notifications_tracking: + tooltip: "Nível de notificação: %{level}" back_button: "Voltar" welcome_banner: header: @@ -299,6 +327,9 @@ pt_BR: logged_in_members: "Boas-vindas novamente, %{preferred_display_name}!" anonymous_members: "Boas-vindas ao %{site_name}!" search_placeholder: "Pesquisar" + impersonation: + notice: "Você está personificando %{username}" + stop: "Parar de personificar" themes: default_description: "Padrão" broken_theme_alert: "Seu site pode não funcionar por causa de um tema/componente com erro. Verifique o console do seu navegador para obter mais informações." @@ -308,12 +339,27 @@ pt_BR: broken_page_change_alert: "Houve um erro no identificador onPageChange. Confira as ferramentas de desenvolvedor do navegador para obter mais informações." broken_plugin_alert: "Causado(a) pelo plugin \"%{name}\"" broken_transformer_alert: "Ocorreu um erro. Seu site pode não funcionar corretamente." + broken_block_alert: "Foi detectado um erro na configuração do bloco. Verifique o console do navegador para mais informações." + broken_block_factory_alert: "Um bloco não carregou. Alguns elementos da interface do usuário podem não ser exibidos corretamente." critical_deprecation: notice: "[Aviso da administração] %{source} contém código que precisa de atualização (id:%{id})" learn_more_link: "(saiba mais)" theme_source: "Tema \"%{name}\"" plugin_source: "Plugin \"%{name}\"" unknown_source: "Um dos seus temas ou plugins" + dev_tools: + drag_to_move: "Arraste para mover" + toggle_plugin_outlet_debug: "Alternar depuração da saída do plugin" + toggle_block_debug: "Alternar depuração de bloco" + block_debug: + outlet_boundaries: "Limites da saída" + visual_overlay: "Sobreposição visual" + ghost_blocks: "Blocos fantasmas" + condition_debugging: "Depuração de condições" + toggle_safe_mode: "Alternar modo de segurança" + toggle_verbose_localization: "Alternar localização detalhada" + toggle_mobile_view: "Alternar visualização móvel" + disable_dev_tools: "Desativar ferramentas de desenvolvimento" s3: regions: ap_northeast_1: "Ásia Pacífico (Tóquio)" @@ -403,7 +449,37 @@ pt_BR: pill: "Sugestões" pm_title: "Mensagens sugeridas" admin_onboarding_banner: + launch_in_easy_steps: "Comece em %{step_count} passos fáceis" + congrats_onboarding_complete: "Parabéns por concluir o processo de integração!" + invite_collaborators: + title: "Convidar colaboradores" + description: "Os primeiros membros ajudam a dar vida à sua comunidade." + action: "Criar convite" + start_posting: + title: "Comece a postar" + description: "Dê às pessoas algo sobre o que conversar." + choose_option: "Como você gostaria de começar?" + predefined_topics: "Modelos para quebrar o gelo" + predefined_topics_subtitle: "Dê aos novos membros algo sobre o que conversar. Escolha um modelo para editar e crie o seu próprio." + predefined_topics_description: "Escolha dentre uma seleção de temas para iniciar conversas e dar início a um diálogo." + use_predefined: "Navegar pelos modelos" + back: "Voltar" + icebreakers: + fun_facts: + title: "Quais são algumas curiosidades interessantes sobre você?" + body: "Olá a todos! Estou animada para começar esta nova comunidade. Para começar, que tal cada um de nós compartilhar uma curiosidade sobre si? Eu começo: adoro caminhar na natureza e descobrir novas trilhas! E você? Conte algo interessante sobre você!" + coolest_thing_you_have_seen_today: + title: "Qual foi a coisa mais legal que você viu hoje?" + body: "Qual foi a coisa mais legal que você viu ou vivenciou hoje? Pode ser qualquer coisa, desde um lindo pôr do sol até um ato aleatório de bondade. Eu começo: vi um cachorro ajudando uma pessoa idosa a atravessar a rua!" + introduce_yourself: + title: "Apresente-se" + body: "Bem-vindo(a) à comunidade! Vamos nos conhecer. Por favor, apresente-se e compartilhe um pouco sobre seus interesses. Eu começo: sou apaixonado(a) por tecnologia e adoro ensinar!" + what_is_your_favorite_food: + title: "Qual é a sua comida favorita?" + body: "Compartilhe sua comida favorita com a comunidade! Eu começo: adoro pizza, principalmente com bastante queijo e pepperoni." spread_the_word: + title: "Divulgue!" + description: "Compartilhe um link com todos na sua rede." action: "Copiar link" copied_to_clipboard: "Link copiado para área de transferência!" about: @@ -487,8 +563,6 @@ pt_BR: other: "Criado(a) há menos de %{count} anos" bookmarked: title: "Favorito" - edit_bookmark: "Editar favorito" - clear_bookmarks: "Limpar favoritos" help: bookmark: "Clique para adicionar este tópico aos favoritos" edit_bookmark: "Clique para editar o favorito numa postagem deste tópico" @@ -507,12 +581,12 @@ pt_BR: clear_reminder: "Limpar lembrete" edit: "Editar favorito" not_bookmarked: "marcar postagem como favorita" + topic_bookmark: "Tópico" remove_reminder_keep_bookmark: "Remover lembrete e manter favorito" created_with_reminder: "Você marcou esta postagem com um lembrete em %{date}. %{name}" created_with_reminder_generic: "Você marcou isso como lembrete em %{date}. %{name}" delete: "Excluir favorito" confirm_delete: "Tem certeza de que deseja excluir este favorito? O lembrete também será excluído." - confirm_clear: "Você tem certeza de que deseja apagar todos os seus favoritos deste tópico?" save: "Salvar" no_timezone: 'Você ainda não definiu um fuso horário. Você não poderá definir lembretes. Configure um no seu perfil.' invalid_custom_datetime: "A data e a hora que você informou são inválidas, tente novamente." @@ -580,6 +654,10 @@ pt_BR: other_drafts: one: "+%{count} outro rascunho" other: "+%{count} outros rascunhos" + embed_mode: + storage_access_prompt: "Já tem uma conta %{site_name}? Permita o acesso à sua sessão para comentar como você mesmo." + allow_access: "Permitir acesso" + continue_as_guest: "Continuar como convidado" topic_count_all: one: "Veja %{count} novo tópico" other: "Veja %{count} novos tópicos" @@ -600,7 +678,7 @@ pt_BR: other: "Veja %{count} novos tópicos" preview: "pré-visualizar" cancel: "Cancelar" - done: "Concluído(a)" + done: "Feito" deleting: "Excluindo…" save: "Salvar alterações" saving: "Salvando…" @@ -638,24 +716,26 @@ pt_BR: review: show_more: "Exibir mais" show_less: "Exibir menos" + back_to_queue: "Voltar para a fila" + editing_post: "Editando postagem…" order_by: "Ordenar por" date_filter: "Postado entre" in_reply_to: "em resposta a" filtered_flagged_by: "Sinalizado(a) por" unknown: title: - one: "Você tem itens revisáveis pendentes do plugin desativado:" - other: "Você tem itens revisáveis pendentes de plugins desativados:" + one: "Você tem itens da fila de revisão pendentes de um plugin desativado:" + other: "Você tem itens da fila de revisão pendentes de plugins desativados:" instruction: "Eles não podem ser exibidos corretamente até que você ative o plugin relevante. Ative o plugin e atualize a página. Como alternativa, você pode ignorá-los. Saiba mais..." reviewable_unknown_source: "%{reviewableType} (plugin desconhecido)" reviewable_known_source: "%{reviewableType} (do plugin '%{pluginName}')" ignore_all: "Ignorar tudo" enable_plugins: "Ativar plugins" - delete_confirm: "Tem certeza de que deseja excluir todas as avaliações criadas por plugins desativados?" - ignore_success: "Todas as avaliações criadas por plugins desativados foram excluídas." + delete_confirm: "Tem certeza de que deseja excluir todos os itens da fila de revisão criados por plugins desativados?" + ignore_success: "Todos os itens da fila de revisão criados por plugins desativados foram excluídos." explain: why: "explique por que este item foi colocado na fila" - title: "Pontuação revisável" + title: "Pontuação de itens da fila de revisão" formula: "Fórmula" subtotal: "Subtotal" total: "Total" @@ -669,10 +749,10 @@ pt_BR: title: "Os(as) usuários(as) com sinalizadores historicamente acordados recebem um bônus." trust_level_bonus: name: "nível de confiança" - title: "Itens revisáveis criados por usuários(as) com nível de confiança mais alto têm uma pontuação maior." + title: "Sinalizações criadas por usuários(as) com nível de confiança mais alto têm uma pontuação maior." type_bonus: name: "bônus de tipo" - title: "Certos tipos revisáveis podem receber um bônus da equipe para aumentar sua prioridade." + title: "Certos tipos de sinalizações podem receber um bônus da equipe para que tenham maior prioridade." revise_and_reject_post: title: "Revisar" reason: "Motivo" @@ -681,7 +761,7 @@ pt_BR: custom_reason: "Forneça uma descrição clara do motivo" other_reason: "Outro..." optional: "opcional" - stale_help: "Este revisável foi encerrado por %{username}." + stale_help: "Este item foi resolvido por %{username}." claim_help: optional: "Você pode reivindicar este item para impedir que outras pessoas o revisem." required: "Você precisa reivindicar itens antes de poder revisá-los." @@ -835,6 +915,9 @@ pt_BR: delimiter: "ou" something_else_wrong: "Há algo errado em %{reviewable_type}?" approve_user: "Aprovar este usuário?" + suspect_user: "Este usuário é spam?" + approve_post: "Aprovar esta postagem?" + approve_topic: "Aprovar este tópico?" types: reviewable_flagged_post: title: "Postagem sinalizada" @@ -853,13 +936,19 @@ pt_BR: title: "Postagem" noun: "postagem" reviewable_ai_chat_message: + title: "Mensagem de chat sinalizada por IA" noun: "mensagem de chat" reviewable_ai_post: + title: "Postagem sinalizada por IA" noun: "postagem" + reviewable_post_voting_comment: + title: "Comentário sinalizado" + noun: "comentário" flagged_as: "Sinalizado como" post_flagged_as: "Resposta sinalizada como" - queued_post_label: "Resposta citada" - queued_topic_label: "Tópico citado" + chat_flagged_as: "Chat sinalizado como" + queued_post_label: "Postagem na fila" + queued_topic_label: "Tópico na fila" user_label: "Usuário(a)" assigned_to: "Postagem atribuída a" moderator_actions: "Ações da moderação" @@ -868,6 +957,7 @@ pt_BR: target_created: "Postagem criada" target_created_by: "Postagem criada por %{username} · %{relativeDate}" target_deleted: "Postagem excluída" + target_deleted_by: "Postagem excluída por %{username} · %{relativeDate}" flagged: "Sinalizado(a)" flagged_as_by: "Marcado(a) como %{flagReason} por %{username} - %{relativeDate}" claimed: "Reivindicado(a)" @@ -882,6 +972,7 @@ pt_BR: note_added_by: "Observação da moderação por %{username} - %{relativeDate}" no_events: "Não há eventos da linha do tempo para exibir" notes: + add_note_description: "Adicione uma observação para fornecer contexto a outros moderadores." add_note_button: "Adicionar observação" placeholder: "Escreva sua observação aqui..." chars_remaining: "%{count} caractere(s) restante(s)" @@ -894,6 +985,7 @@ pt_BR: review_user: "Usuário(a)" need_help: "Precisa de ajuda?" copy_link: "Copiar link" + copy_permalink_title: "copiar um link deste item revisável para a área de transferência" copy_link_feedback: "Link copiado" view_source: "Visualizar origem" insights: @@ -902,8 +994,13 @@ pt_BR: flagged_by_users: one: "Marcado por %{count} usuário(a)" other: "Marcado por %{count} usuários(as)" + similar_posts: "Violações passadas" + flagged_in_timeframe: + one: "%{count} sinalização confirmada" + other: "%{count} sinalizações confirmadas" + user_activity: "Informações do usuário" activities: - joined_on: "Ingressou: %{joinDate}" + joined_on: "ingressou: %{joinDate}" trust_level: "nível de confiança: %{trustLevelName}" posts: one: "%{count} postagem" @@ -918,6 +1015,7 @@ pt_BR: visibility: "Visibilidade" topic_unlisted: "Este tópico não está listado e só poderá ser acessado por link direto" help: + community_moderation_guide: "O guia de moderação desta comunidade" moderation_guide: "Guia de moderação do Discourse" flag_priorities: "Gerenciar a reputação do(a) usuário(a) e sinalizar prioridades" spam_detection: "Detecção de spam" @@ -1198,6 +1296,8 @@ pt_BR: make_owner_description: "Tornar %{username} proprietário(a) deste grupo" remove_owner: "Remover como proprietário(a)" remove_owner_description: "Remover %{username} como proprietário(a) deste grupo" + remove_member_self_lockout: "Ao remover sua participação neste grupo, você perderá o acesso para gerenciar este grupo. Tem certeza de que deseja prosseguir?" + remove_owner_self_lockout: "Ao remover sua função como proprietário, você perderá o acesso para gerenciar este grupo. Tem certeza de que deseja prosseguir?" make_primary: "Tornar primário" make_primary_description: "Tornar este grupo primário para %{username}" remove_primary: "Remover como primário" @@ -1370,8 +1470,16 @@ pt_BR: private_message: "Mensagem" private_messages: "Mensagens" upcoming_changes: + title: "Alterações previstas" for_user: + upcoming_change: "Alteração prevista" enabled: "Ativado(a)?" + why: "Por que?" + why_reasons: + not_in_specific_groups: "O(A) usuário(a) não pertence aos grupos específicos necessários para esta alteração." + in_specific_groups: "O(A) usuário(a) pertence aos grupos específicos necessários para esta alteração." + enabled_for_everyone: "Essa alteração está ativada para todos os membros." + enabled_for_no_one: "Essa alteração está desativada para todos os membros." user_notifications: filters: filter_by: "Filtrar por" @@ -1576,6 +1684,9 @@ pt_BR: undo_revoke_access: "Desfazer revogação de acesso" api_approved: "Aprovada:" api_last_used_at: "Usada pela última vez em:" + api_show_permissions: + one: "Permissões concedidas (%{count})" + other: "Permissões concedidas (%{count})" theme: "Tema" save_to_change_theme: 'O tema será atualizado quando você clicar em "%{save_text}"' home: "Página inicial padrão" @@ -1584,6 +1695,9 @@ pt_BR: flags_given: one: '%{count} etiqueta útil' other: '%{count} etiquetas úteis' + flags: + one: '%{count} sinalização' + other: '%{count} sinalizações' deleted_posts: one: '%{count} postagem excluída' other: '%{count} postagens excluídas' @@ -1692,17 +1806,24 @@ pt_BR: interface: "Interface" apps: "Aplicativos" navigation_menu: "Menu de navegação" + upcoming_changes: "Alterações previstas" + calendar_subscriptions: "Calendário" + calendar_subscriptions: + copied: "Copiou!" + add_to_google: "Google Calendar" change_password: success: "(e-mail enviado)" in_progress: "(enviando e-mail)" error: "(erro)" action: "Enviar e-mail de redefinição de senha" + staged_user: "Usuários(as) encenados(as) não podem receber e-mails de redefinição de senha." set_password: "Definir senha" choose_new: "Escolha uma nova senha" choose: "Escolha uma senha" verify_identity: "Para continuar, verifique sua identidade." title: "Redefinição de senha" remove: "Remover senha" + remove_disabled: "A conta precisa de pelo menos um outro método de login (por exemplo, uma chave de acesso ou uma conta externa vinculada) antes de remover a senha." remove_detail: "Sua conta não poderá mais ser acessada com senha a menos que você a redefina." second_factor_backup: title: "Códigos de backup de dois fatores" @@ -2029,6 +2150,7 @@ pt_BR: redeemed_tab_with_count: "Resgatados (%{count})" invited_via: "Convite" invited_via_link: "vincular %{key} (%{count}/%{max} resgatado(s))" + generating_link: "Gerando link..." groups: "Grupos" topic: "Tópico" sent: "Criado/enviado por último" @@ -2095,7 +2217,7 @@ pt_BR: other {# dias} }. edit_link_options: "Editar opções de link ou enviar por e-mail" - edit_link_options_only: "Edite as opções do link" + edit_link_options_only: "Editar as opções do link" show_advanced: "Exibir opções avançadas" hide_advanced: "Ocultar opções avançadas" description: "Descrição" @@ -2292,9 +2414,17 @@ pt_BR: no_results: "Nenhum resultado" search: "Pesquisar…" label: "Selecione as opções" + d_otp: + screen_reader: + one: Digite um número + other: Digite %{count} números form_kit: reset: Redefinir optional: opcional + required: necessário(a) + errors_summary_title: + one: "Corrija este erro para continuar." + other: "Corrija estes erros para continuar." dirty_form: "Você não enviou as alterações! Deseja mesmo sair?" errors: starts_with: "Deve começar com %{prefix}" @@ -2314,6 +2444,10 @@ pt_BR: too_short: one: "Deve ter no mínimo %{count} caractere" other: "Deve ter no mínimo %{count} caracteres" + color: + available_presets: "Predefinições disponíveis" + already_used: "Já utilizado" + edit_presets: "Editar predefinições de cores" close: "Fechar" assets_changed_confirm: "Este site acabou de receber uma atualização de software. Obter a versão mais recente agora?" logout: "Você foi desconectado(a)." @@ -2360,6 +2494,7 @@ pt_BR: }. learn_more: "Saiba mais…" learn_more_with_link: "Saiba mais…" + feedback_with_link: "Feedback…" mute: Silenciar unmute: Remover silêncio last_post: Postado @@ -2516,6 +2651,7 @@ pt_BR: admin_not_allowed_from_ip_address: "Você não pode entrar como administrador(a) com este endereço IP." resend_activation_email: "Clique aqui para enviar o e-mail de ativação novamente." omniauth_disallow_totp: "Sua conta tem autenticação dois fatores ativada. Entre com sua senha." + works_with: "Funciona com" activate_account: "Ativar conta" resend_title: "Enviar novamente e-mail de ativação" change_email: "Alterar endereço de e-mail" @@ -2634,6 +2770,7 @@ pt_BR: one: "%{count} tópico nesta categoria" other: "%{count} tópicos nesta categoria" read_only: "somente leitura" + read_only_description: "Esta categoria é somente leitura, portanto você não pode selecioná-la para este tópico." timezone_input: ambiguous_ist: "O IST é ambíguo. Selecione um fuso horário específico (por exemplo: Ásia/Kolkata)" select_kit: @@ -2658,6 +2795,8 @@ pt_BR: filter_for_more: Filtre para ver mais… categories_admin_dropdown: title: "Gerenciar categorias" + tag_category_admin_dropdown: + edit_tag: "Editar tag" bulk_select_topics_dropdown: title: "Ações em massa" bulk_select_bookmarks_dropdown: @@ -2688,6 +2827,8 @@ pt_BR: medium_dark_tone: Tom de pele médio-escuro dark_tone: Tom de pele escuro default: Emojis personalizados + filter_input: + clear: "Limpar filtro" shared_drafts: title: "Rascunhos compartilhados" notice: "Este tópico está visível apenas para quem puder publicar rascunhos compartilhados." @@ -2723,7 +2864,9 @@ pt_BR: translation_preview: "Prévia da tradução" original: "Original" translation: "Tradução" + no_translation_yet: "Comece a digitar para ver uma prévia da tradução..." placeholder: "Digite a tradução da postagem aqui..." + show_raw_markdown: "Mostrar texto bruto" group_mentioned_limit: one: "Aviso! Você menciou %{group}, mas este grupo tem mais membros do que o limite de menções configurado pelo(a) administrador(a) de %{count} usuário(a). Ninguém será notificado(a)." other: "Aviso! Você menciou %{group}, mas este grupo tem mais membros do que o limite de menções configurado pelo(a) administrador(a) de %{count} usuários(as). Ninguém será notificado(a)." @@ -2833,12 +2976,30 @@ pt_BR: upload_description: "digite aqui a descrição do arquivo enviado" olist_title: "Lista numerada" ulist_title: "Lista em tópicos" + list_title: "Listas" list_item: "Item da lista" toggle_direction: "Alternar direção" + apply_wrap_title: "Aplicar wrap" wrap_modal: + title: "Editar wrap" + name_label: "Aplicar wrap no nome" + attributes_label: "Atributos" + add_attribute: "Adicionar atributo" + remove_attribute: "Remover atributo" apply: "Aplicar" + unwrap: "Remover wrap" + no_attributes: "Nenhum atributo foi adicionado ainda." + wrap_text: "Aplicar wrap no conteúdo" help: "Ajuda de edição de redução" + collapse: "Minimizar o painel do compositor" + open: "Abrir o painel do compositor" + abandon: "Fechar compositor e ignorar rascunho" + enter_fullscreen: "Abrir o compositor em tela cheia" + exit_fullscreen: "Sair do compositor em tela cheia" exit_fullscreen_prompt: "Pressione ESC para sair da tela cheia" + show_toolbar: "Exibir barra de ferramentas do compositor" + hide_toolbar: "Ocultar barra de ferramentas do compositor" + peek_mode_toggle: "Ativar/desativar modo peek" modal_ok: "Ok" cant_send_pm: "Desculpe, você não pode enviar uma mensagem para %{username}." create_message_error: "Desculpe, houve um erro ao criar a mensagem. Tente outra vez." @@ -2885,6 +3046,7 @@ pt_BR: desc: "Responder sem alterar a data da última resposta" toggle_unlisted: label: Ativar como não listado + desc: "Tópicos não listados só são acessíveis por link direto" reload: "Recarregar" ignore: "Ignorar" image_alt_text: @@ -2895,7 +3057,14 @@ pt_BR: zoom_out: "Diminuir o tamanho da imagem" zoom_in: "Aumentar o tamanho da imagem" remove: "Remover imagem" + add_to_grid: "Adicionar à grade" + move_outside_grid: "Mover para fora da grade" image: "imagem" + grid_label: "Isto será exibido como uma grade." + grid_mode_grid: "Grade" + grid_mode_carousel: "Carrossel" + grid_mode_title: "Definir o estilo da galeria de imagens para %{mode}" + remove_grid: "Remover grade" image_scale_button: "Dimensionar imagem para %{percent}%" delete_image_button: Excluir Imagem toggle_image_grid: Alternar para grade de imagem @@ -2905,6 +3074,7 @@ pt_BR: remove: "Remover link" visit: "Abrir link em uma aba externa" link_copied: "Link copiado!" + unsupported_token: "O editor avançado não oferece suporte a todos os recursos usados nesta postagem; mudando para o editor de Markdown." notifications: tooltip: regular: @@ -2974,6 +3144,13 @@ pt_BR: votes_released: "%{description} - concluído(a)" new_features: "Novos recursos disponíveis!" admin_problems: "Nova recomendação no painel de controle do seu site" + upcoming_changes: + available: + title: "Alterações previstas" + description: "'%{changeName}' está disponível para prévia" + automatically_promoted: + title: "Alterações previstas" + description: "'%{changeName}' foi ativada automaticamente." dismiss_confirmation: body: default: @@ -3030,6 +3207,7 @@ pt_BR: membership_request_consolidated: "novos pedidos de associação" reaction: "nova reação" votes_released: "voto emitido" + new_features: "novos recursos do Discourse foram lançados" admin_problems: "nova recomendação no painel de controle do seu site" upload_selector: change: "Mudança" @@ -3121,6 +3299,7 @@ pt_BR: aria_label: Filtro usando etiquetas filters: label: Retornar somente tópicos/postagens… + all: Incluir mensagens title: Correspondência somente no título likes: Curti posted: Postei em @@ -3166,8 +3345,6 @@ pt_BR: max_views: placeholder: máximo aria_label: filtrar por visualizações máximas - additional_options: - label: "Filtrar por contagem de postagens e visualizações de tópico" hamburger_menu: "Menu de navegação" new_item: "novo" go_back: "voltar" @@ -3222,22 +3399,27 @@ pt_BR: deleted_post: "(postagem excluída)" post_number_with_topic_title: "postagem #%{post_number} - %{title}" new_post_in_topic: "nova postagem em %{title}" + new_post_in_deleted_topic: "nova postagem em um tópico excluído" user_requires_approval: "%{username} requer aprovação" default_item: "item revisável #%{reviewable_id}" topics: new_messages_marker: "último acesso" bulk: + select: "Seleção em massa" confirm: "Confirmar" select_all: "Selecionar tudo" clear_all: "Limpar tudo" - unlist_topics: "Remover tópicos da lista" - relist_topics: "Reinserir tópicos na lista" reset_bump_dates: "Redefinir datas de promoção" defer: "Marcar não lido" - delete: "Excluir tópicos" delete_topics_count: one: "Excluir tópico" other: "Excluir tópicos" + delete_posts_count: + one: "Excluir postagem" + other: "Excluir postagens" + delete_posts_confirmation: + one: "Tem certeza de que deseja excluir %{count} postagem?" + other: "Tem certeza de que deseja excluir %{count} postagens?" dismiss: "Descartar" dismiss_read: "Descartar todos os não lidos" dismiss_read_with_selected: @@ -3267,37 +3449,38 @@ pt_BR: other: "Descartar novos(as) (%{count})" toggle: "alternar seleção de tópicos em massa" actions: "Ações em massa" - change_category: "Definir categoria…" - close_topics: "Fechar tópicos" - archive_topics: "Arquivar tópicos" move_messages_to_inbox: "Mover para caixa de entrada" archive_messages: "Mover para o arquivo" - notification_level: "Notificações…" change_notification_level: "Alterar nível de notificação" choose_new_category: "Escolha a nova categoria para os tópicos:" - selected: - one: "Você selecionou %{count} tópico." - other: "Você selecionou %{count} tópicos." selected_sole_category: one: "Você selecionou %{count} tópico da categoria:" other: "Você selecionou %{count} tópicos da categoria:" selected_count: one: "Selecionou %{count}" other: "Selecionou %{count}" - change_tags: "Substituir etiquetas" append_tags: "Adicionar etiquetas" choose_new_tags: "Escolha novas etiquetas para estes tópicos:" - choose_append_tags: "Escolha novas etiquetas para adicionar a estes tópicos:" + choose_append_tags: "Adicionar etiquetas" changed_tags: "As etiquetas destes tópicos foram alteradas." - remove_tags: "Remover todas as etiquetas" confirm_remove_tags: one: "Todas as etiquetas serão removidas deste tópico. Deseja prosseguir?" other: "Todas as etiquetas serão removidas de %{count} tópicos. Deseja prosseguir?" progress: one: "Progresso: %{count} tópico" other: "Progresso: %{count} tópicos" + notify: "Notificar usuários sobre essa alteração" performing: "Realizando operações em massa, aguarde…" completed: "Operações em massa concluídas!" + completed_count: + one: "%{count} tópico foi atualizado." + other: "%{count} tópicos foram atualizados." + not_completed: + one: "%{count} tópico não pôde ser atualizado:" + other: "%{count} tópicos não puderam ser atualizados:" + skipped_count: + one: "%{count} tópico já estava atualizado." + other: "%{count} tópicos já estavam atualizados." error_topic_count: one: "%{count} tópico" other: "%{count} tópicos" @@ -3318,12 +3501,12 @@ pt_BR: unread: "Nada ficou sem ser lido... impressionante!" new_new: "Nada de novo no momento... volte em breve!" new: "Nada de novo no momento... volte em breve!" + generic: "Não há nada para ver aqui... volte em breve!" topic_bulk_actions: dismiss: name: "Descartar" close_topics: name: "Fechar" - note: "Observação" optional: (opcional) archive_topics: name: "Arquivo" @@ -3337,30 +3520,25 @@ pt_BR: name: "Listar novamente" remove_tags: name: "Remover tags" - append_tags: - name: "Adicionar etiquetas" replace_tags: name: "Substituir etiquetas" delete_topics: name: "Excluir" update_category: name: "Atualizar Categoria" - description: "Escolha a nova categoria para os tópicos selecionados" reset_bump_dates: name: "Redefinir datas de promoção" - description: "Redefinir data de promoção do tópico para a data de criação da postagem mais recente, o que afeta a ordem da lista de tópicos" defer: name: "Marcar não lido" - description: "Marcar tópicos como não lidos" update_notifications: name: "Atualizar notificações" - description: "Alterar nível de notificação para Acompanhando, Monitorando, Normal, Silenciado" topic: filter_to: one: "%{count} postagem no tópico" other: "%{count} postagens no tópico" create: "Novo tópico" create_long: "Criar um novo tópico" + create_group: "Novo tópico e rascunhos" open_draft: "Abrir rascunho" private_message: "Iniciar uma mensagem" archive_message: @@ -3446,12 +3624,15 @@ pt_BR: created_at: "Criação: %{date}" bumped_at: "Mais recentes: %{date}" browse_latest_topics: "Navegue pelos tópicos mais recentes" + browse_new_replies: "Ver novas respostas" + browse_new_topics: "Ver novos tópicos" suggest_create_topic: Tudo pronto para começar uma nova conversa? jump_reply: "Ir para o local da postagem original" jump_reply_aria: "Ir para a postagem de @%{username} em sua localização original" jump_reply_button: "Ir para postagem" deleted: "Este tópico foi excluído" slow_mode_update: + title: "Modo lento" select: "Os(as) usuários(as) podem postar neste tópico apenas a cada:" description: "Para promover um diálogo saudável em discussões dinâmicas e acirradas, os(as) usuários(as) devem aguardar antes de postar neste tópico outra vez." enable: "Ativar" @@ -3473,6 +3654,8 @@ pt_BR: 12_hours: "12 horas" 24_hours: "24 horas" custom: "Duração personalizada" + slow_mode_notice: + duration: "Aguarde %{duration} entre suas postagens neste tópico" topic_status_update: title: "Timer de tópico" save: "Definir timer" @@ -3502,6 +3685,8 @@ pt_BR: title: "Fechar tópico automaticamente após a última postagem" auto_delete: title: "Excluir tópico automaticamente" + auto_delete_after_last_post: + title: "Excluir tópico automaticamente após a última postagem" auto_bump: title: "Promover tópico automaticamente" reminder: @@ -3513,6 +3698,7 @@ pt_BR: auto_close: "Este tópico fechará automaticamente em %{timeLeft}." auto_publish_to_category: "Este tópico será publicado em #%{categoryName} %{timeLeft}." auto_close_after_last_post: "Este tópico fechará %{duration} após a última resposta." + auto_delete_after_last_post: "Este tópico será excluído %{duration} após a última resposta." auto_delete: "Este tópico será automaticamente excluído em %{timeLeft}." auto_bump: "Este tópico será automaticamente promovido em %{timeLeft}." auto_reminder: "Você será lembrado sobre este tópico em %{timeLeft}." @@ -3608,6 +3794,8 @@ pt_BR: reply: title: "Responder" help: "começar a escrever uma resposta para este tópico" + footer_buttons: + region_label: "Ações de tópico" share: title: "Compartilhar tópico" extended_title: "Compartilhar um link" @@ -3787,14 +3975,26 @@ pt_BR: one: %{count} resposta selecionada. other: "%{count} respostas selecionadas." deleted_by_author_simple: "(tópico excluído pelo(a) autor(a))" + localizations: + title_edit_warning: + message: "Este é um título de tópico traduzido.

Você deseja editar a categoria, as tags e o título originais em %{language} ou editar essa tradução específica?" + action_original: "Editar original" + action_translation: "Editar título do tópico traduzido" + editing_translation: "Editando a tradução em %{language}" post_list: title: "Últimas postagens" empty: "Não há postagens" aria_post_number: "%{title} - postagem #%{postNumber}" bulk: + selected: + one: "%{count} postagem selecionada" + other: "%{count} postagens selecionadas" + select_all: "Selecionar tudo" clear_all: "Limpar tudo" actions: "Ações em massa" post: + accessible_heading: "postagem por #%{username} em %{date}" + heading_anchor: "Link do cabeçalho" confirm_delete: "Tem certeza de que deseja excluir esta postagem?" quote_reply: "Citação" quote_reply_shortcut: "Citar (ou apertar e)" @@ -3818,8 +4018,13 @@ pt_BR: deleted_by_author_simple: "(postagem excluída pelo(a) autor(a))" collapse: "recolher" load_more_replies: "carregar mais respostas" + load_more_posts_above: "Carregar mais publicações acima" + load_more_posts_below: "Carregar mais publicações abaixo" sr_collapse_replies: "Recolher respostas incorporadas" sr_load_more_replies: "Carregar mais respostas incorporadas" + loading_more_posts_above: "Carregando mais postagens acima..." + loading_more_posts_below: "Carregando mais postagens abaixo..." + loading_complete: "Carregamento concluído" sr_date: "Data da postagem" sr_expand_replies: one: "Esta postagem tem %{count} resposta" @@ -3874,6 +4079,9 @@ pt_BR: edit: "Editar" delete: "Excluir" add: "Adicionar nova tradução" + manage: + one: "Gerenciar traduções (%{count} existente)" + other: "Gerenciar traduções (%{count} existentes)" view: one: "Visualizar %{count} local traduzido" other: "Visualizar %{count} locais traduzidos" @@ -3882,8 +4090,10 @@ pt_BR: confirm_delete: "Tem certeza de que deseja excluir as traduções para \"%{languageCode}\"?" success: "As traduções foram atualizadas" post_language_selector: + title: "Idioma da postagem" none: "Nenhum" edit_warning: + message: "Esta é uma postagem traduzida.

Você quer editar a postagem original em %{language} ou editar essa tradução específica?" action_original: "Editar a postagem original" action_translation: "Editar esta tradução" errors: @@ -3904,6 +4114,7 @@ pt_BR: attachment_upload_not_allowed_for_new_user: "Desculpe, usuários(as) novos(as) não podem enviar anexos." attachment_download_requires_login: "Desculpe, você precisa entrar para baixar arquivos anexos." cancel_composer: + confirm: "Você deseja excluir sua postagem?" discard: "Descartar" via_email: "postagem recebida via e-mail" via_auto_generated_email: "esta mensagem chegou por um e-mail gerado automaticamente" @@ -3976,6 +4187,7 @@ pt_BR: delete_post_notice: "Excluir aviso oficial" remove_timer: "remover timer" edit_timer: "editar timer" + remove_yourself_from_pm: "Tem certeza de que deseja remover seu nome desta mensagem? Você não poderá mais vê-la nem respondê-la." actions: people: like: @@ -4094,6 +4306,7 @@ pt_BR: general: "Geral" settings: "Configurações" advanced: "Avançado" + show_advanced: "Configurações avançadas" topic_template: "Modelo" tags: "Etiquetas" localizations: "Localizações" @@ -4118,22 +4331,43 @@ pt_BR: delete: "Excluir" add: "Adicionar grupo de tags necessário" placeholder: "Selecionar grupo de etiquetas…" + tag_group: "Grupo de etiquetas" topic_featured_link_allowed: "Permitir links em destaque nesta categoria" + delete: "Excluir categoria" + create: "Nova categoria" create_long: "Criar uma nova categoria" + type_settings_schema: + site_settings: "Configurações do site" + save: "Salvar categoria" + unsaved_changes: "Você tem alterações não salvas" + slug: "Slug da categoria" + parent: "Categoria pai" slug_placeholder: "(Opcional) palavras hifenizadas para url" creation_error: Houve um erro durante a criação da categoria. save_error: Houve um erro ao salvar a categoria. + errors: + self_lockout: "Você está prestes a alterar as permissões de categoria de uma forma que removerá o seu próprio acesso. Tem certeza de que deseja continuar?" validations: + emoji_required: "Selecione um emoji." icon_required: "Selecione um ícone." + name: "Nome da categoria" + untitled: "Categoria sem título" description: "Descrição" + logo: "Imagem do logotipo da categoria" + logo_dark: "Imagem do logotipo da categoria no modo escuro" logo_description: "Proporção de tela recomendada 1:1 com tamanho mínimo de 200px. Se deixada em branco, nenhuma imagem será exibida." + background_image: "Imagem de fundo da categoria" + background_image_dark: "Imagem de fundo da categoria no modo escuro" style: "Estilo" icon: "Ícone" emoji: "Emoji" + select_emoji: "Selecionar emoji" background_color: "Cor" foreground_color: "Cor do texto" color_validations: - cant_be_empty: "não pode estar vazio(a)" + cant_be_empty: "não pode estar vazio" + incorrect_length: "deve corresponder ao formato #RRGGBB ou #RGB" + non_hexdecimal: "deve conter apenas caracteres hexadecimais (0-9, AF)" styles: type: "Estilo" icon: "Ícone" @@ -4145,12 +4379,15 @@ pt_BR: emoji: "Emoji" color_used: "Cor em uso" predefined_colors: "Opções predefinidas de cor" + name_placeholder: "Uma ou duas palavras recomendadas" color_placeholder: "Qualquer cor da web" delete_confirm: "Tem certeza que quer excluir esta categoria?" delete_error: "Houve um erro ao excluir a categoria." list: "Listar categorias" no_description: "Adicione uma descrição para esta categoria." change_in_category_topic: "Editar descrição" + description_expand: "Exibir mais" + description_collapse: "Exibir menos" already_used: "Esta cor já foi usada para outra categoria" color_palette: "Paleta de cores" security: "Segurança" @@ -4161,8 +4398,15 @@ pt_BR: reply: "Responder" create: "Criar" no_groups_selected: "Nenhum grupo recebeu acesso, esta categoria será visível apenas para a equipe." + everyone_full_access: 'Esta categoria é pública, todos(as) podem ver, responder e criar postagens. Para restringir permissões, remova uma ou mais permissões concedidas para o grupo "%{everyone_group}".' + everyone_reply_access: 'Esta categoria é pública, todos podem ver e responder aos tópicos. Para restringir permissões, remova o grupo "%{everyone_group}".' + everyone_see_access: 'Esta categoria é pública, todos podem ver as postagens. Para restringir permissões, remova o grupo "%{everyone_group}".' + specific_groups_have_access: "Esta categoria é privada; apenas os grupos selecionados podem ver, responder e criar publicações." + all_parent_groups_used: "Todos os grupos da categoria pai foram adicionados. Para adicionar mais grupos, primeiro adicione-os à categoria pai." toggle_reply: "Alternar permissão de resposta" toggle_full: "Alternar criação de permissão" + inherited: 'Esta permissão foi herdada de "%{everyone_group}"' + special_warning: "Esta é uma categoria pré-propagada, e as configurações de segurança não podem ser editadas. Se você não quer usar esta categoria, exclua em vez de reaproveitar." uncategorized_security_warning: "Esta categoria é especial. É destinada para tópicos que não têm categoria e não pode ter configurações de segurança." uncategorized_general_warning: 'Esta categoria é especial. Ela é usada como a categoria padrão para novos tópicos que não têm uma categoria selecionada. Se quiser evitar este comportamento e forçar a seleção da categoria, desative a configuração aqui. Se você quiser alterar o nome ou a descrição, vá para Personalização/Conteúdo de texto.' pending_permission_change_alert: "Você não adicionou %{group} a esta categoria. Clique neste botão para adicionar." @@ -4179,20 +4423,39 @@ pt_BR: all_topics_wiki: "Criar novos tópicos wikis por padrão" allow_unlimited_owner_edits_on_first_post: "Permitir edições ilimitadas na primeira postagem" subcategory_list_style: "Estilo da lista de subcategorias" + sort_order: "Classificar lista de tópicos por:" + default_view: "Lista de tópicos padrão:" + default_top_period: "Período superior padrão:" + default_list_filter: "Filtro de lista padrão:" allow_badges_label: "Permitir a concessão de emblemas nesta categoria" + edit_permissions: "Editar permissões" reviewable_by_group: "Além da equipe, o conteúdo desta categoria também pode ser revisado por:" review_group_name: "nome do grupo" require_topic_approval: "Requer aprovação dos moderadores(as) de todos os novos tópicos" require_reply_approval: "Requer aprovação dos moderadores(as) de todas as novas respostas" + posting_review_modes: + no_one: "Ninguém" + everyone: "Todos(as)" + posting_review_groups_placeholder: "Selecionar grupos..." this_year: "este ano" position: "Posição na página de categorias:" + default_position: "Posição padrão" position_disabled: "As categorias serão exibidas em ordem de atividade. Para controlar a ordem das categorias nas listas, ative a configuração de \"posições de categorias fixas\"" minimum_required_tags: "Número mínimo de etiquetas exigidas em um tópico:" + default_slow_mode: 'Ative o "Modo lento" para obter novos tópicos nesta categoria.' + subcategory_of: "Subcategoria de..." none_subcategory_text: "Nenhum" + subcategory_permissions_warning: "Uma subcategoria de uma categoria privada não pode ser pública." visibility: title: "Visibilidade" - public: "Público" + public: "Pública" + all_members: "Todos os membros" group_restricted: "Privado" + who_can_see: "Quem pode ver esta categoria?" + who_can_post: "Quem pode postar nesta categoria" + which_groups_can_access: "Quais grupos podem ver e publicar nesta categoria?" + more_options_hint: "Mais permissões disponíveis em configurações avançadas." + inherited_from_parent: "As permissões são herdadas da categoria pai. Para refinar, acesse configurações avançadas." num_auto_bump_daily: "Número de tópicos em aberto para promover automaticamente:" auto_bump_cooldown_days: "Mínimo de dias antes de subir o mesmo tópico novamente:" navigate_to_first_post_after_read: "Navegue até a primeira postagem depois que os tópicos forem lidos" @@ -4214,14 +4477,18 @@ pt_BR: title: "Silenciados(as)" description: "Você nunca será notificado(a) sobre novos tópicos nesta categoria e eles não aparecerão nos mais recentes." search_priority: + label: "Prioridade de pesquisa" options: normal: "Normal" ignore: "Ignorar" + very_low: "Muito baixa" low: "Baixa" high: "Alta" + very_high: "Muito alta" sort_options: default: "padrão" likes: "Curtidas" + op_likes: "Curtidas da postagem original" views: "Visualizações" posts: "Postagens" activity: "Atividade" @@ -4242,6 +4509,7 @@ pt_BR: email: "E-mail" list_filters: all: "Todos os tópicos" + none: "Nenhuma subcategoria" colors_disabled: "Não é possível selecionar cores porque você tem um, ou não tem nenhum, estilo de categoria." anonymous_flagging: title: "Denunciar conteúdo ilegal" @@ -4500,11 +4768,16 @@ pt_BR: readonly: "Ver" preloader_text: "Carregando" lightbox: - download: "Download" + download: "Baixar" + open: "Imagem original" + image_info: "Informações sobre a imagem" + quote: "Citar imagem" previous: "Anterior (seta para a esquerda)" next: "Próximo (seta para a direita)" counter: "%curr% de %total%" close: "Fechar (Esc)" + zoom: "Zoom (tecla Z)" + error: "Não foi possível carregar a imagem" content_load_error: 'O conteúdo não pôde ser carregado.' image_load_error: 'A imagem não pôde ser carregada.' cannot_render_video: Este vídeo não pode ser renderizado porque o seu navegador não é compatível com o codec. @@ -4526,6 +4799,7 @@ pt_BR: latest: "%{shortcut} Mais recentes" new: "%{shortcut} Novos" unread: "%{shortcut} Não lidos" + unseen: "%{shortcut} Não vistos" categories: "%{shortcut} Categorias" top: "%{shortcut} Melhores" bookmarks: "%{shortcut} Favoritos" @@ -4540,10 +4814,12 @@ pt_BR: back: "%{shortcut} Voltar" up_down: "%{shortcut} Move seleção ↑ ↓" open: "%{shortcut} Abrir tópico selecionado" + open_new_window: "%{shortcut} Abrir tópico selecionado em nova aba/janela" next_prev: "%{shortcut} Pŕoxima seção/seção anterior" go_to_unread_post: "%{shortcut} Ir para a primeira postagem não lida" application: title: "Solicitação" + create: "%{shortcut} Criar um novo tópico ou mensagem pessoal" notifications: "%{shortcut} Abrir notificações" hamburger_menu: "%{shortcut} Abrir menu de navegação" user_profile_menu: "%{shortcut} Abrir menu do usuário" @@ -4670,6 +4946,7 @@ pt_BR: add_to_calendar: "Adicionar ao calendário" google: "Google Calendar" ics: "ICS" + default_title: "Evento agendado" tagging: all_tags: "Todas as etiquetas" other_tags: "Outras etiquetas" @@ -4684,18 +4961,25 @@ pt_BR: choose_for_topic_required_group: one: "selecione %{count} etiqueta de \"%{name}\"…" other: "selecione %{count} etiquetas de \"%{name}\"…" + info: "Mostrar informações da tag" default_info: "Esta etiqueta não está restrita a nenhuma categorias e não possui sinônimos." staff_info: "Para adicionar restrições, coloque esta etiqueta em um grupo de etiquetas." category_restricted: "Essa tag é restrita a categorias que você não tem permissão para acessar." synonyms: "Sinônimos" synonyms_description: "Quando as seguintes etiquetas forem usadas, serão substituídas por %{base_tag_name}." + synonyms_inline: "Estes sinônimos serão substituídos por %{base_tag_name}:" save: "Salvar nome e descrição da etiqueta" tag_groups_info: one: 'Esta etiqueta pertence ao grupo: %{tag_groups}.' other: "Esta etiqueta pertence aos grupos: %{tag_groups}." + tag_groups_info_prefix: + one: "Esta tag pertence ao grupo " + other: "Esta tag pertence a estes grupos: " category_restrictions: one: "Pode ser usada apenas nesta categoria:" other: "Pode ser usada apenas nestas categorias:" + restricted_to: "Restrito a" + no_synonyms: "Esta tag não possui sinônimos." edit_synonyms: "Editar sinônimos" add_synonyms_label: "Adicionar sinônimos:" add_synonyms: "Adicionar" @@ -4714,7 +4998,35 @@ pt_BR: one: "Seu sinônimo também será excluído." other: "Seus %{count} sinônimos também serão excluídos." edit_tag: "Edite o nome e descrição da etiqueta" - description: "Descrição (máximo de 1000 caracteres)" + edit: "Editar esta tag" + description: "Descrição" + settings: + title: "Definições" + edit_title: "Editar tag: %{name}" + edit_tag_prefix: "Editar tag:" + select_tag: "Selecione uma tag para editar" + general: "Geral" + localizations: "Localizações" + back: "Voltar" + name: "Nome" + slug: "Slug" + name_placeholder: "Nome da tag" + slug_placeholder: "Slug da tag (opcional, gerado automaticamente a partir do nome)" + saved: "Configurações de tag salvas" + no_synonyms: "Não há sinônimos definidos para esta tag." + add_synonym_placeholder: "Procurar por tags para adicionar como sinônimos..." + synonyms_subtitle: "Quando as seguintes tags forem usadas, serão substituídas por %{name}" + save: "Salvar tag" + delete: "Excluir tag" + synonyms_hint: "Quando as tags acima forem usadas, elas serão substituídas por %{baseTagName}." + add_synonyms_confirm: "Locais que usam %{synonymNames} serão alterados para usar %{tagName}. Tem certeza de que deseja fazer essa alteração?" + localization: + hint: "Adicione localizações para exibir nomes de tags diferentes para usuários em idiomas diferentes." + locale: "Idioma" + name: "Nome" + description: "Descrição" + add: "Adicionar localização" + remove: "Remover localização" sort_by: "Ordenar por" sort_by_count: "contagem" sort_by_name: "nome" @@ -4724,7 +5036,15 @@ pt_BR: upload_description: "Enviar um arquivo csv para criar etiquetas em massa" upload_instructions: "Uma por linha, opcionalmente com um grupo de etiquetas no formato \"nome_etiqueta,grupo_etiqueta\"." upload_successful: "Etiquetas enviadas com êxito" + bulk_create_inline_placeholder: "Criar tags (separadas por vírgulas)" bulk_create_button: "Criar" + bulk_create_success: + one: "%{count} tag criada:" + other: "%{count} tags criadas:" + bulk_create_already_exist: + one: "%{count} tag já existe:" + other: "%{count} tags já existem:" + bulk_create_some_failed: "Algumas tags não puderam ser criadas:" delete_unused_confirmation: one: "%{count} etiqueta será excluída: %{tags}" other: "%{count} etiquetas serão excluídas: %{tags}" @@ -4758,13 +5078,18 @@ pt_BR: description: "Você não receberá nenhuma notificação sobre novos tópicos com esta etiqueta, e eles não serão exibidos na aba de não lidos." groups: back_btn: "Voltar para todas as etiquetas" + title: "Grupos de tags" about_heading: "Selecione um grupo de etiquetas ou crie uma nova" about_heading_empty: "Crie um novo grupo de etiquetas para começar" about_description: "Grupos de etiquetas ajudam a gerenciar permissões de várias etiquetas em um lugar." + new: "Novo grupo" + new_title: "Criar novo grupo" + edit_title: "Editar grupo de tags" tags_label: "Etiquetas neste grupo" parent_tag_label: "Etiqueta pai" parent_tag_description: "As etiquetas deste grupo podem ser usadas apenas se a etiqueta pai estiver presente." one_per_topic_label: "Limite de uma etiqueta por tópico deste grupo" + new_name: "Novo grupo de tags" name_placeholder: "Nome" save: "Salvar" delete: "Excluir" @@ -4806,6 +5131,7 @@ pt_BR: safe_mode: enabled: "O modo seguro está ativado. Para sair do modo seguro, feche a janela do navegador" theme_preview_notice: "Atualmente, você está pré-visualizando um tema, feche esta aba ou janela do navegador para voltar para a configuração normal do site." + theme_preview_failed: "Não foi possível visualizar o tema porque ele não existe ou você não tem permissão para acessá-lo." image_removed: "(imagem removida)" pause_notifications: title: "Pausar notificações para…" @@ -4875,6 +5201,7 @@ pt_BR: tags_form_modal: title: "Editar navegação por etiquetas" filter_placeholder: "Filtrar etiquetas" + no_tags: "Não há tags que correspondam aos filtros fornecidos." subtitle: text: "e mostraremos automaticamente as principais etiquetas deste site" edit_navigation_modal_form: @@ -4955,6 +5282,9 @@ pt_BR: click_to_get_started: "Clique aqui para começar." header_link_text: "Categorias" header_action_title: "Editar suas categorias de barra lateral" + header_action_new: "Nova categoria" + header_action_edit_sidebar: "Editar categorias da barra lateral" + header_action_edit_header_dropdown: "Editar categorias de navegação" configure_defaults: "Configurar padrões" community: edit_section: @@ -5026,6 +5356,8 @@ pt_BR: light: "Claro" dark: "Escuro" auto: "Automático" + title: "Modo de cor" + aria_label: "Modo de cor, atualmente %{mode}" welcome_topic_banner: title: "Crie seu Tópico de Boas-Vindas" description: "Seu tópico de boas-vindas é a primeira coisa que os novos membros vão ler. Pense nisso como seu “argumento de elevador” ou “declaração de missão”. Informe a todos sobre quem é o público desta comunidade, o que eles podem esperar encontrar aqui e o que você gostaria que eles fizessem primeiro." @@ -5201,10 +5533,18 @@ pt_BR: bookmarks: "Tópicos em %{category} sem etiquetas que você adicionou aos favoritos" default: "Tópicos %{filter} em %{category} sem tags" categories: "Todas as categorias" + content_localization: + toggle_localized: + translated: "Esta página foi traduzida por máquina. Clique para ver o texto original." + not_translated: "Página não traduzida. Clique para traduzir." + translations_enabled: "Traduções ativadas" + translations_disabled: "Traduções desativadas" + language_switcher: + title: "Alterar o idioma do site" admin_js: type_to_filter: "Digite para filtrar..." settings: "Configurações" - reset_filter: "Redefinir" + toggle_filters: "Alternar filtros suspensos" admin: title: "Administrador(a) do Discourse" moderator: "Moderador(a)" @@ -5217,9 +5557,14 @@ pt_BR: never: "nunca" reports: title: "Lista de relatórios disponíveis" - meta_doc: "Relatórios são uma ferramenta poderosa para ajudar a entender o que acontece no seu site. Ajudam na identificação de tendências, relatam problemas e tomam decisões com base em dados." sidebar_title: "Relatórios" back: "Voltar para todos os relatórios" + group_engagement: "Engajamento" + group_traffic: "Tráfego" + group_members: "Membros" + group_content: "Conteúdo e saúde" + group_other: "Outras" + legacy_warning: "Este é um relatório legado. Ele será desativado em breve. Se precisar de ajuda para encontrar o substituto, entre em contato com o suporte." config_sections: account: title: "Conta" @@ -5239,26 +5584,73 @@ pt_BR: title: "Avançado" upcoming_changes: name: "Nome" - enabled: "Ativados(as)" + plugin: "Plugin" + metadata: "Metadados" + enabled: "Ativado" + enabled_for: "Ativado para..." + show_image: "Mostrar imagem" + edit_groups: "Editar grupos de adesão" + groups_updated: "Grupos atualizados!" + save_groups: "Salvar grupos" + add_groups_to_enable: "Adicione grupos para ativar este recurso." + no_changes_to_save: "Nenhuma alteração para salvar" select_groups: "Selecionar grupos…" + opt_in_groups: "Grupos de adesão voluntária" + show_related_settings: "Mostrar configurações relacionadas..." + opt_in_groups_instructions: "Os grupos de adesão voluntária podem ser usados para permitir que um determinado grupo de usuários teste uma alteração antes que ela seja liberada para todos. Observe que esses grupos se tornarão irrelevantes assim que a alteração atingir o status Estável." + enabled_for_throttle: "Você alterou a pessoa para quem essa alteração está ativada muito rapidamente. Aguarde alguns segundos antes de tentar novamente." + change_enabled_for_success: "Você ativou essa alteração para %{enabledFor}" + change_disabled: "Você optou por não participar desta alteração." + permanent_notice: "Essa alteração agora é permanente e será removida em breve. Você não poderá mais optar por não participar." + permanent_soon_notice: "Esta mudança se tornará permanente em breve. Você não poderá mais optar por não participar." + permanent_no_group_selection: "Não aplicável, alterações permanentes se aplicam a todos os grupos." + no_changes: "Não há alterações previstas neste momento." preview: "Pré-visualizar" enabled_for_options: + no_one: "Ninguém" everyone: "Todos(as)" - staff: "Somente equipe" + staff: "Apenas %{staffGroupName}" + specific_groups: "Grupo(s) específico(s)" + specific_groups_with_group_names: + one: "o grupo %{groupNames}" + other: "os grupos %{groupNames}" statuses: experimental: "Experimental" + alpha: "Alfa" + beta: "Beta" + stable: "Estável" + permanent: "Permanente" impact_roles: + admins: "Administradores(as):" moderators: "Moderadores(as)" staff: "Equipe" + all_members: "Todos os membros" + developers: "Desenvolvedores" filter: - all: "Todos(as)" - enabled: "Ativados(as)" - disabled: "Desativados(as)" + search_placeholder: "Filtrar por nome, descrição ou plugin..." + no_results: "Nenhuma alteração prevista corresponde ao seu filtro." + all: "Todos" + enabled_all: "Todos os estados ativados" + enabled: "Ativados" + enabled_for_staff: "Ativado para %{staffGroupName}" + enabled_for_specific_groups: "Ativado para grupos específicos" + disabled: "Desativados" + impact_type_all: "Todos os tipos de impacto" impact_type_feature: "Recurso" impact_type_other: "Outras" + status_all: "Todos os status" + status_conceptual: "Conceitual" status_experimental: "Experimental" + status_alpha: "Alfa" + status_beta: "Beta" + status_stable: "Estável" + status_permanent: "Permanente" + impact_role_all: "Todas as funções de impacto" + impact_role_admins: "Administradores(as):" impact_role_moderators: "Moderadores(as)" impact_role_staff: "Equipe" + impact_role_all_members: "Todos os membros" + impact_role_developers: "Desenvolvedores" config: about: title: "Sobre seu site" @@ -5289,17 +5681,32 @@ pt_BR: title: "Localização" header_description: "Configure o idioma da interface da sua comunidade e outras opções de localização para seus membros" keywords: "local|idioma|fuso_horário|unicode|ltr" + upcoming_changes: + title: "Alterações previstas" + header_description: "Uma lista de alterações previstas para o Discourse que podem afetar seu site e recursos experimentais nos quais você pode optar por participar. Você pode filtrar por impacto, tipo e status.\n\nGrupos de participação opcional podem ser usados para permitir que um determinado grupo de usuários teste uma alteração antes que ela seja disponibilizada para todos, embora esses grupos se tornem irrelevantes assim que uma alteração se tornar permanente." login: title: "Acesso e autenticação" header_description: "Configure o acesso e autenticação de usuários(as), chaves e segredos, provedores OAuth2 e muito mais" sub_pages: common_settings: - title: "Definições" + title: "Configurações" + authenticators: + title: "Logins sociais" + discourseconnect: + title: "Discourse Connect" discourse_id: title: "Discourse ID" discourse_id: title: "Discourse ID" + stats: + total_users: "Total de usuários" + signups_30_days: "Inscrições (30 dias)" + logins_30_days: "Acessos (30 dias)" + regenerate_credentials: "Regerar credenciais" + regenerate_confirm: "Tem certeza de que deseja regerar suas credenciais do Discourse ID? Isso gerará um novo segredo do cliente. A regeração de credenciais normalmente não é necessária, mas pode ser útil para aumentar a segurança." + description: "O Discourse ID é um serviço de cadastro único que permite aos(às) usuários(as) fazer login em mais de um site do Discourse com uma única conta. As empresas mais conhecidas que permitem login com sua conta, como Google, Facebook, Apple e GitHub são suportadas sem precisar de configurações adicionais." learn_more: "Saiba mais" + regenerate_success: "Credenciais regeradas com sucesso." logo: title: "Logotipo" header_description: "Configure os ícones e logotipos usados no seu site" @@ -5315,7 +5722,7 @@ pt_BR: help_text: "O tamanho recomendado é 600 x 80 pixels." large_icon: title: "Ícone quadrado" - description: "Uma versão quadrada da imagem do logotipo aparece na parte superior da administração e também é o logotipo do aplicativo na tela inicial do celular." + description: "Uma versão quadrada da imagem do logotipo aparece na parte superior do site e também é o logotipo do aplicativo no celular." help_text: "O tamanho recomendado é 512 x 512 pixels." square_icon_dark: required: "Usar um ícone quadrado diferente para o modo escuro?" @@ -5387,26 +5794,61 @@ pt_BR: modal_yes: "Sim" modal_no: "Não, apenas aplicar daqui para frente" welcome_banner: + title: "Banner de boas-vindas" + header_description: "Configure o banner contendo a barra de pesquisa que será exibido aos visitantes do seu site." + saved: "Configurações do banner de boas-vindas salvas com sucesso." form: + enabled_themes: + label: "Ativado em temas..." + description: "Selecione quais temas devem exibir o banner. Somente os temas ativos são mostrados." + select_label: "Selecionar temas" + background_image: + label: "Imagem de fundo" + description: "Esta imagem será exibida atrás do texto do banner." text_color: label: "Cor do texto" + description: "Após carregar a 'imagem de fundo' acima, use esta configuração para alterar a cor do texto do banner e garantir que ele permaneça legível. Se o campo estiver em branco ou sem uma imagem carregada, a cor será definida pelo tema ativo." page_visibility: + label: "Visibilidade da página" + description: "Escolha onde o banner deve aparecer na página." options: top_menu_pages: "Páginas do menu superior" + homepage: "Somente a página inicial" + discovery: "Páginas de descoberta" all_pages: "Todas as páginas" location: label: "Local" + description: "Escolha onde o banner deve aparecer na página." options: - above_topic_content: "Conteúdo acima do tópico" + above_topic_content: "Acima do conteúdo do tópico" below_site_header: "Abaixo do cabeçalho do site" text_section: + title: "Texto personalizável" locale_label: "Idioma" header_new_members: + label: "Cabeçalho para novos membros" + description: "Variáveis disponíveis: %{site_name}, %{preferred_display_name}" placeholder: "Bem-vindo(a), %{preferred_display_name}" header_logged_in: - placeholder: "Boas-vindas novamente, %{preferred_display_name}!" + label: "Cabeçalho para membros logados" + description: "Variáveis disponíveis: %{site_name}, %{preferred_display_name}" + placeholder: "Seja bem-vindo(a) de volta, %{preferred_display_name}!" header_anonymous: + label: "Cabeçalho para visitantes anônimos" + description: "Variável disponível: %{site_name}" placeholder: "Boas-vindas ao %{site_name}!" + subheader_logged_in: + label: "Subtítulo para membros logados" + description: "Texto secundário exibido abaixo do cabeçalho para usuários logados." + placeholder: "Confira as novidades da comunidade." + subheader_anonymous: + label: "Subtítulo para visitantes anônimos" + description: "Texto secundário exibido abaixo do cabeçalho para visitantes anônimos." + placeholder: "Junte-se à nossa comunidade para participar das discussões." + search_placeholder: + label: "Espaço reservado para pesquisa" + description: "Espaço reservado para a caixa de pesquisa no banner de boas-vindas." + placeholder: "Tópicos de pesquisa..." navigation: title: "Navegação" header_description: "Configure itens de menu e links de navegação para seu site, inclusive a localização e comportamento do menu de navegação principal, links rápidos no topo da página inicial e a barra lateral da administração" @@ -5468,7 +5910,7 @@ pt_BR: header_description: "Relatórios são uma ferramenta poderosa para ajudar a entender o que acontece no seu site. Ajudam na identificação de tendências, relatam problemas e tomam decisões com base em dados." sub_pages: settings: - title: "Configurações do painel de controle" + title: "Configurações" badges: title: "Emblemas" header_description: "Os(as) usuários(as) recebem emblemas como recompensa por suas atividades, contribuições e realizações. Isso é uma forma de reconhecer, validar e incentivar comportamentos positivos e o envolvimento na comunidade" @@ -5601,6 +6043,9 @@ pt_BR: embedding: title: "Incorporar" header_description: "Com o Discourse, você pode incorporar os componentes de um tópico em um site remoto por meio de uma API de java que cria um IFRAME" + form_templates: + title: "Modelos de formulário" + header_description: "Modelos de formulário permitem impor um formulário estruturado com validação de dados como parte do fluxo de criação de tópicos." theme_site_settings: setting: "Configuração" overridden_by: "Substituição por" @@ -5609,6 +6054,9 @@ pt_BR: select_setting: "Selecione um site para visualizar os valores dos temas atuais" add: "Ir para as configurações do site substituídas por tema" help: "O tema que você está usando atualmente é %{currentTheme}. Vá para a página de configuração do tema para alterar as configurações do tema do site, ou clique em um tema com link na tabela abaixo para editar as configurações dele." + filter: "Filtrar as configurações do site do tema definindo nome, descrição ou nome do tema..." + filter_no_results: "Nenhuma configuração de tema do site corresponde ao seu filtro." + site_setting_warning: 'Esta configuração é gerenciada pelo tema padrão do seu site (%{defaultThemeName}). Você pode modificá-la na página de edição do tema.' search: modal_title: "Pesquise tudo na administração" title: "Pesquisar" @@ -5618,22 +6066,6 @@ pt_BR: result_count: one: '%{count} resultado para "%{filter}"' other: '%{count} resultados para "%{filter}"' - result_types: - page: - one: "Página" - other: "Páginas" - report: - one: "Relatório" - other: "Relatórios" - setting: - one: "Configuração" - other: "Configurações" - theme: - one: "Tema" - other: "Temas" - component: - one: "Componente" - other: "Componentes" new_features: title: "Novidades?" check_for_updates: "Verificar atualizações" @@ -5656,16 +6088,9 @@ pt_BR: new_features: title: "Novidades?" subtitle: "Estamos lançando recursos e melhorias inéditas o tempo todo. Esta página contém os principais. Clique em \"Saiba mais\" se quiser ver as notas da versão completas." + no_new_features_found: "Não há itens no feed ou o filtro que você selecionou não retornou nenhum resultado. Você pode ver anúncios anteriores de novos recursos na comunidade Discourse Meta." + no_new_features_error: "Houve um erro ao carregar o feed. Você pode ver os anúncios anteriores de novos recursos na comunidade Discourse Meta." learn_more: "Saiba mais..." - experimental: "Experimental" - only_experiments: "Exibir apenas recursos experimentais" - experiment_enabled: "Você ativou o recurso experimental." - experiment_disabled: "Você desativou o recurso experimental." - experiment_tooltip: - title_enabled: "Desativar este recurso experimental" - content_enabled: "Altere esta opção para desativar este recurso para todos(as) os(as) usuários(as)." - feature_tooltip: - content_enabled: "Altere esta opção para desativar este recurso para todos(as) os(as) usuários(as)." last_checked: "Última verificação" refresh_problems: "Atualizar" no_problems: "Nenhum problema foi encontrado." @@ -5728,10 +6153,11 @@ pt_BR: all: "Tudo" view_table: "tabela" view_graph: "gráfico" - refresh_report: "Atualizar relatório" + refresh_report: "Atualizar" daily: A cada dia monthly: Todo mês weekly: A cada semana + value_so_far: "%{value} (até agora)" dates: "Datas (UTC)" groups: "Todos os grupos" disabled: "Este relatório está desativado" @@ -5742,7 +6168,9 @@ pt_BR: trending_search: more: 'Registros de pesquisa' disabled: 'O relatório de pesquisa de conteúdo em alta está desativado. Ative as consultas de pesquisa de registro para coletar dados.' + average_chart_label: Mostrando médias, não totais sort_button: "Classificar por %{column}" + sort_button_current: "Classificado por %{column}, %{direction}" sort_ascending: "ordem crescente" sort_descending: "ordem decrescente" filters: @@ -5848,6 +6276,7 @@ pt_BR: cancel: "Cancelar" continue: "Continuar" copy_key: "Copiar" + key_copied_to_clipboard: "Chave de API copiada para a área de transferência" back: "Voltar para chaves de API" revoke: "Revogar" undo_revoke: "Desfazer revogação" @@ -5915,6 +6344,7 @@ pt_BR: recover: Recupere um tópico. read_lists: Leia listas de tópico como melhores, novidades, mais recentes. RSS também é compatível. status: "Atualiza o status de um tópico. Status: fechado, arquivado, visível, fixado. Ativado: verdadeiro, falso. Especifique um category_id aqui e no conteúdo do pedido para permitir apenas mudanças de status em tópicos dessa categoria." + change_owner: Alterar a propriedade das postagens em um tópico. posts: edit: Edite qualquer postagem ou especifique uma. delete: Exclua uma postagem. @@ -5947,6 +6377,7 @@ pt_BR: suspend: Suspenda contas de usuário(a). delete: Excluir contas de usuário(as). list: Obtenha uma lista de usuários(as). + create: Criar um(a) novo(a) usuário(a). user_status: read: Ler status do usuário. update: Atualizar status do usuário. @@ -6050,6 +6481,7 @@ pt_BR: user_destroyed: "Usuário(a) excluído(a)" user_suspended: "Usuário(a) suspenso(a)" user_unsuspended: "Usuário(a) liberado(a)" + user_anonymized: "O(a) usuário(a) foi anonimizado(a)." reviewable_event: group_name: "Eventos revisáveis" reviewable_created: "Item revisável pronto" @@ -6282,8 +6714,10 @@ pt_BR: install: "Instalar" theme_site_settings: title: "Configurações do site substituídas por tema" + description: "Configurações que permitem que os temas tenham maior controle sobre a experiência geral do site, substituindo um pequeno subconjunto das configurações principais do site." themes: title: "Temas" + description: "Temas que alteram a aparência geral do seu site para todos os usuários." themes_intro: "Instale um novo tema para começar, ou crie um do zero usando estes recursos." new_theme: "Novo tema" back: "Voltar para os temas" @@ -6349,6 +6783,8 @@ pt_BR: title: "Opções de cores" toggle: "Selecionável por usuário(a)" toggle_description: "A paleta de cores pode ser selecionada pelos(as) usuários(as)" + toggle_default_light_on_theme: "A paleta de cores é a paleta clara padrão no tema padrão (%{themeName})" + toggle_default_dark_on_theme: "A paleta de cores é a paleta escura padrão no tema padrão (%{themeName})" colors: title: "Cores" save_changes: "Salvar alterações" @@ -6439,6 +6875,7 @@ pt_BR: confirm: "Tem certeza de que quer desfazer este backup?" restore: is_disabled: "Restauração desativada neste momento. Para ativar, acesse as configurações do site." + is_disabled_title: "A restauração está desativada no momento. Para ativá-la, procure por 'allow restore' nas configurações do site." label: "Restaurar" title: "Restaurar o backup" confirm: "Tem certeza de que deseja restaurar este backup?" @@ -6481,20 +6918,27 @@ pt_BR: delete: "Excluir" delete_confirm: 'Você tem certeza de que deseja excluir "%{theme_name}"?' bulk_delete: "Tem certeza?" + bulk_themes_delete_confirm: "Os temas a seguir serão desinstalados e não poderão mais ser usados pelos(as) usuários(as) no seu site:" + bulk_components_delete_confirm: "Os componentes a seguir serão desinstalados e não poderão mais ser usados pelos(as) usuários(as) no seu site:" color: "Cor" opacity: "Opacidade" copy: "Duplicado" copy_to_clipboard: "Copiar para área de transferência" copied_to_clipboard: "Copiou para área de transferência" copy_to_clipboard_error: "Erro ao copiar dados para a área de transferência" + theme_owner: "Propriedade de:" email_templates: title: "E-mail" subject: "Assunto" multiple_subjects: "Este modelo de e-mail tem vários assuntos." + multiple_bodies: "Este modelo de e-mail tem vários corpos." body: "Corpo" revert: "Reverter alterações" revert_confirm: "Tem certeza de que deseja reverter as alterações?" + search_templates: "Filtrar por nome do modelo..." + no_templates_found: "Nenhum modelo corresponde aos seus filtros." edit: "Editar" + back: "Voltar aos modelos" component: all_filter: "Tudo" used_filter: "Usado(a)" @@ -6529,6 +6973,8 @@ pt_BR: create_name: "Nome" save: "Salvar" long_title: "Alterar cores, CSS e conteúdo HTML do seu site" + dark_mode: "%{themeName} modo escuro" + light_mode: "%{themeName} modo claro" edit: "Editar" edit_confirm: "Este é um tema remoto, se você editar o CSS/HTML, suas alterações serão apagadas na próxima vez que você atualizar o tema." update_confirm: "As alterações locais serão apagadas pela atualização. Tem certeza de que quer continuar?" @@ -6556,6 +7002,7 @@ pt_BR: default_light_scheme: "Claro (padrão)" color_scheme_select: "Selecione as cores que serão usadas pelo tema." dark_color_scheme_select: "Selecionar cores a serem usadas pelo tema no modo escuro." + edit_colors: "Editar cores" custom_sections: "Seções personalizadas:" theme_components: "Componentes do tema" add_all_themes: "Adicionar todos os temas" @@ -6567,10 +7014,12 @@ pt_BR: convert_theme_alert_generic: "Tem certeza de que quer converter este tema em um componente?" convert_theme_tooltip: "Converter este tema em componente" inactive_themes: "Temas inativos:" + set_default_theme: "Definir como padrão" default_theme: "Tema padrão" set_default_success: "Tema padrão definido como %{theme}" setting_was_saved: "Configuração de tema salva" install_success: "Tema %{theme} instalado!" + delete_success: "%{theme} excluído com sucesso!" inactive_components: "Componentes não usados" selected: one: "Selecionou %{count}" @@ -6612,7 +7061,6 @@ pt_BR: import_web_tip: "Repositório contendo tema" direct_install_tip: "Tem certeza de que quer instalar %{name} do repositório listado abaixo?" import_web_advanced: "Avançado…" - import_file_tip: "Arquivo .tar.gz, .zip ou .dcstyle.json com o tema" is_private: "O tema está em um repositório git privado" finish_install: "Concluir a instalação do tema" last_attempt: "O processo de instalação não foi concluído, última tentativa:" @@ -6743,12 +7191,16 @@ pt_BR: select_base: title: "Selecionar paleta de cores básicas" description: "Paleta básica:" + non_default_theme_warning: "Suas preferências pessoais para o tema diferem do padrão. As alterações que você faz aqui podem não se aplicar a você, mas se aplicarão a todos que usam o padrão (%{themeName})." + custom_schemes_warning: "Suas preferências pessoais para a paleta de cores %{colorModes} são diferentes do padrão. Alterações na paleta %{colorModes} podem não se aplicar a você, mas se aplicarão a todos que usam o padrão." light: "claro" dark: "escuro" title: "Cores" edit: "Editar" + view: "Visualizar" set_default_light: "Definir paleta clara no tema padrão (%{theme})" set_default_dark: "Definir paleta escura no tema padrão (%{theme})" + set_default_success: "%{schemeName} definido como paleta ativa para %{themeName}" saved_refreshing: "Salvou! Atualizando cores..." from_theme: "Do tema: %{name}" filters: @@ -6758,7 +7210,12 @@ pt_BR: from_theme: "Do tema" no_results: "Nenhuma paleta de cores encontrada" default_light_badge: + text: "Claro padrão" + title: "Paleta de cores clara padrão" reset: "Redefinir filtros" + default_dark_badge: + text: "Escuro padrão" + title: "Paleta de cores escura padrão" system_palette: "Esta é uma paleta de cores integrada, não pode ser excluída nem editada." back_to_colors: "Voltar para paletas de cores" long_title: "Paletas de cores" @@ -7078,6 +7535,11 @@ pt_BR: tag_group_change: "alterar grupo de etiquetas" delete_associated_accounts: "excluir contas associadas" change_theme_site_setting: "Alterar configuração do site substituída por tema" + stop_impersonating: "parar de personificar" + upcoming_change_toggled: "alteração prevista alternada" + upcoming_change_available: "alteração prevista disponível" + change_site_setting_groups: "alterar grupos de configuração do site" + discourse_id_regenerate_credentials: "regerar credenciais do Discourse ID" screened_emails: title: "E-mails filtrados" description: "Quando alguém tentar criar uma conta nova, os seguintes endereços de e-mail serão verificados e o registro será bloqueado, ou outra ação será executada." @@ -7132,6 +7594,7 @@ pt_BR: clear_all: Limpar tudo clear_all_confirm: "Tem certeza de que deseja remover todas as palavras acompanhadas para a ação %{action}?" invalid_regex: 'A palavra companhada ''%{word}" é uma expressão regular inválida.' + invalid_regex_multiple: "Expressões regulares inválidas:" regex_warning: 'Palavras acompanhadas são expressões regulares e não incluem automaticamente limites de palavras. Se quiser usar expressões regulares para fazer correpondência a palavras inteiras, inclua \b no início e no fim da sua expressão regular.' actions: block: "Bloqueado(a)" @@ -7164,6 +7627,7 @@ pt_BR: success: "Sucesso" exists: "Já existe" upload: "Adicionar do arquivo" + upload_successful: "Upload concluído com sucesso. As palavras serão processadas em breve." case_sensitivity_label: "É sensível a maiúsculas" case_sensitivity_description: "Apenas palavras com maiúsculas e minúsculas de caracteres correspondentes" html_label: "HTML" @@ -7214,6 +7678,7 @@ pt_BR: upload: "Enviar um arquivo" multiselect: "Múltipla escolha" tagchooser: "Seletor de grupo de etiquetas" + composer: "Resposta em Markdown" validations_modal: button_title: "Validações" modal_title: "Opções de validação" @@ -7255,7 +7720,10 @@ pt_BR: second: "Opção 2" third: "Opção 3" edit_category: + toggle_freeform: "Modelo de formulário desativado" + toggle_form_template: "Modelo de formulário ativado" select_template: "Selecione modelos de formulário" + select_template_help: "Adicionar/Editar modelos de formulário" errors: multiple_tags_not_allowed: 'Não é possível selecionar mais etiquetas em "%{tag_name}". Para evitar problemas, use o modelo de formulários' impersonate: @@ -7263,6 +7731,7 @@ pt_BR: help: "Use esta ferramenta para representar uma conta de usuário(a) para efeitos de depuração. Você terá que sair dela assim que terminar." not_found: "Este(a) usuário(a) não pode ser encontrado." invalid: "Desculpe, não é possível representar este(a) usuário(a)." + error: "Ocorreu um erro inesperado." users: title: "Usuários(as)" description: "Visualize e gerencie usuários(as)." @@ -7371,6 +7840,17 @@ pt_BR: penalty_post_actions: "O que você gostaria de fazer com a postagem associada?" penalty_post_delete: "Excluir a postagem" penalty_post_delete_replies: "Excluir a postagem + respostas" + penalty_post_delete_all: "Excluir todos os tópicos do(a) usuário(a) + quaisquer respostas" + penalty_post_delete_all_confirmation_MF: | + Isso apagará + { TOPICS, plural, + one {# tópico} + other {# tópicos} + } e + { REPLIES, plural, + one {# resposta} + other {# respostas} + }. Esta ação não pode ser desfeita! Tem certeza de que deseja fazer isso? penalty_post_edit: "Editar a postagem" penalty_post_none: "Não fazer nada" penalty_count: "Contagem de penalidades" @@ -7428,6 +7908,11 @@ pt_BR: approve_bulk_success: "Sucesso! Todos os(as) usuários(as) selecionados(as) foram aprovados(as) e notificados(as)." time_read: "Tempo de leitura" post_edits_count: "Postar edições" + upcoming_changes: + title: "Alterações previstas do usuário" + description: "Para modificar grupos ou ativar ou desativar alterações previstas, visite a página de configuração de alterações previstas." + filter_placeholder: "Filtrar alterações previstas por nome ou descrição." + filter_no_results: "Nenhuma alteração prevista encontrada." exports: title: Exportações de usuário(a) download: @@ -7452,6 +7937,9 @@ pt_BR: button: "Excluir todas postagens" progress: title: "Progresso da exclusão de postagens" + description: + one: "Excluindo %{count} postagem de @%{username}..." + other: "Excluindo %{count} postagens de @%{username}..." confirmation: title: "Excluir todas as postagens de @%{username}" description: | @@ -7463,6 +7951,7 @@ pt_BR: text: "excluir postagens de @%{username}" delete: "Excluir postagens de @%{username}" cancel: "Cancelar" + all_enqueued: "Todas as postagens de @%{username} foram colocadas na fila para exclusão." merge: button: "Mesclar" prompt: @@ -7489,6 +7978,8 @@ pt_BR: cancel: "Cancelar" merging_user: "Mesclando usuário(a)…" merge_failed: "Ocorreu um erro ao mesclar os(as) usuários(as)." + delete_forbidden_because_admin: "Os administradores não podem ser excluídos." + delete_posts_forbidden_because_admin: "Não é possível excluir todas as postagens dos administradores." delete_forbidden: one: "Usuários(as) não podem ser excluídos(as) se tiverem postagens. Exclua todas as postagens antes de tentar excluir um(a) usuário(a). (Mensagens com mais de %{count} dia não podem ser excluídas.)" other: "Usuários(as) não podem ser excluídos(as) se tiverem postagens. Exclua todas as postagens antes de tentar excluir um(a) usuário(a). (Mensagens com mais de %{count} dias não podem ser excluídas.)" @@ -7635,6 +8126,10 @@ pt_BR: title: "Exibir no cartão de usuário(a)" enabled: "Exibir no cartão de usuário(a)" disabled: "Não exibido no cartão de usuário(a)" + show_on_signup: + title: "Mostrar no formulário de inscrição" + enabled: "Formulário de inscrição exibido" + disabled: "Não aparece no formulário de inscrição." searchable: title: "Pesquisável" enabled: "Pesquisável" @@ -7642,6 +8137,7 @@ pt_BR: field_types: text: "Texto" textarea: "Área de texto" + date: "Data" confirm: "Confirmação" dropdown: "Menu suspenso" multiselect: "Multisseleção" @@ -7662,6 +8158,7 @@ pt_BR: more_than_50_results: "Existem mais de 50 resultados. Refine sua pesquisa." no_results: "Nennhum texto de site correspondente encontrado" interpolation_keys: "Chaves de interpolação disponíveis:" + interpolation_key_used: "Já utilizado" outdated: title: "Esta tradução está desatualizada" description: "A tradução padrão para esta chave mudou desde que esta substituição foi criada. Verifique abaixo que a sua tradução corresponde a quaisquer alterações feitas na intenção original." @@ -7708,7 +8205,10 @@ pt_BR: upload: label: "Enviar" title: "Enviar imagens" - download_file: "Download" + download_file: "Baixar" + upload_restrictions: + extensions: "Aceito: %{extensions}" + max_size: "Máximo: %{size}" selectable_avatars: title: "Lista de avatares que os usuários podem escolher" table_column_heading: @@ -7747,6 +8247,7 @@ pt_BR: experimental: "Experimental" secret_list: invalid_input: "Os campos de entrada não podem estar vazios ou conter o caractere de barra vertical." + already_exists: "Um termo para %{key} já foi definido." default_categories: modal_description: one: "Você gostaria de aplicar esta alteração historicamente? Isso mudará as preferências de %{count} usuário(a) existente." @@ -7771,13 +8272,23 @@ pt_BR: prompt: "A alteração desta configuração pode ter consequências inesperadas em diversas áreas do seu site. Deseja mesmo prosseguir?" confirm: "Sim, claro" min_password_length: + prompt: "Você está prestes a mudar sua política de senha. Isso afetará todos(as) os(as) usuários(as) que mudarem de senha de agora em diante. Deseja mesmo prosseguir?" confirm: "Sim, atualizar política de senha" min_admin_password_length: + prompt: "Você está prestes a mudar sua política de senha. Isso afetará todos(as) os(as) administradores(as) que mudarem de senha de agora em diante. Deseja mesmo prosseguir?" confirm: "Sim, atualizar política de senha" - password_unique_charactes: + password_unique_characters: + prompt: "Você está prestes a mudar sua política de senha. Isso afetará todos(as) os(as) usuários(as) que mudarem de senha de agora em diante. Deseja mesmo prosseguir?" confirm: "Sim, atualizar política de senha" block_common_passwords: + prompt: "Você está prestes a mudar sua política de senha. Isso afetará todos(as) os(as) usuários(as) que mudarem de senha de agora em diante. Deseja mesmo prosseguir?" confirm: "Sim, atualizar política de senha" + clean_up_inactive_users_after_days: + prompt: "Definir este valor para qualquer número diferente de 0 fará com que os usuários que não estiverem ativos por esse número de dias sejam excluídos permanentemente. Tem certeza de que deseja prosseguir?" + confirm: "Sim, entendo que usuários inativos serão excluídos permanentemente, a menos que eu defina este valor como 0." + job_status: + completed: "Atualização concluída" + enqueued: "Atualização em andamento" badges: status: Status title: Emblemas @@ -7811,9 +8322,12 @@ pt_BR: no_user_badges: "%{name} não recebeu nenhum emblema." no_badges: Não há emblemas que possam ser concedidos. none_selected: "Selecione um emblema para começar" + filter_placeholder: "Filtrar emblemas..." + no_badges_found: "Nenhum emblema encontrado" sections: + design: Design query: Consulta - settings: Definições + settings: Configurações usage_heading: Uso allow_title: Permitir que o emblema seja usado como título multiple_grant: Pode ser concedido várias vezes @@ -7914,6 +8428,7 @@ pt_BR: category: "Postar em categoria" tags: "Etiquetas de tópico" post_author: "Autor(a) da postagem" + post_author_description: "Autor para todos os tópicos incorporados deste host, substituindo as meta tags da página do blog. Deixe em branco para ler o autor das tags ou da página." post_author_with_default: "Autor(a) da postagem (padrão para %{author})" add_host: "Adicionar host" posts_and_topics: "Configurações de tópicos e postagens" diff --git a/config/locales/client.ro.yml b/config/locales/client.ro.yml index 71f903e870ed6..3ad49d1fe71ef 100644 --- a/config/locales/client.ro.yml +++ b/config/locales/client.ro.yml @@ -6,6 +6,11 @@ ro: js: + blocks: + ghost: + status: "Stare" + hidden: "ascuns" + failed: "eșuată" number: format: separator: "." @@ -437,6 +442,8 @@ ro: pill: "Sugerate" pm_title: "Mesaje sugerate" admin_onboarding_banner: + start_posting: + back: "Înapoi" spread_the_word: action: "Copiază legătură" about: @@ -488,8 +495,6 @@ ro: today: "astăzi" bookmarked: title: "Semn de carte" - edit_bookmark: "Editează marcaj" - clear_bookmarks: "Șterge semnele de carte" help: bookmark: "Clic pentru a pune un semn de carte la acest subiect" edit_bookmark: "Clic pentru a edita semnul de carte pe un mesaj din acest subiect" @@ -507,12 +512,12 @@ ro: clear_reminder: "Șterge memento" edit: "Editează semn de carte" not_bookmarked: "pune semn de carte la acest articol" + topic_bookmark: "Subiect" remove_reminder_keep_bookmark: "Șterge mementoul și păstrează semnul de carte" created_with_reminder: "Ai marcat această postare cu un memento %{date}. %{name}" created_with_reminder_generic: "Ai marcat acest articol cu un memento %{date}. %{name}" delete: "Șterge semn de carte" confirm_delete: "Sigur vrei să ștergi acest semn de carte? Mementoul va fi de asemenea șters." - confirm_clear: "Sigur vrei să ștergi toate marcajele tale din acest subiect?" save: "Salvează" no_timezone: 'Nu ai setat încă un fus orar. Nu vei putea seta mementouri. Setează unul în profilul tău.' invalid_custom_datetime: "Data și ora pe care le-ai furnizat sunt nevalide, te rugăm să încerci din nou." @@ -635,11 +640,8 @@ ro: reviewable_known_source: "%{reviewableType} (din modulul „%{pluginName}”)" ignore_all: "Ignoră tot" enable_plugins: "Activează module" - delete_confirm: "Sigur vrei să ștergi toate revizuirile create de modulele dezactivate?" - ignore_success: "Toate revizuirile create de modulele dezactivate au fost șterse." explain: why: "explică de ce acest element a ajuns în coada de așteptare" - title: "Scor ce poate fi revizuit" formula: "Formulă" subtotal: "Subtotal" total: "Total" @@ -653,14 +655,11 @@ ro: title: "Utilizatorilor ale căror semnalări au fost agreate de-a lungul istoriei li se acordă un bonus." trust_level_bonus: name: "nivel de încredere" - title: "Elementele care pot fi revizuite create de utilizatorii cu nivel mai înalt de încredere au un scor mai mare." type_bonus: name: "introdu bonus" - title: "Anumite tipuri care pot fi revizuite pot primi un bonus de către echipă pentru a le face o prioritate mai mare." revise_and_reject_post: reason: "Motiv" optional: "opțional" - stale_help: "Această examinare a fost rezolvată de %{username}." claim_help: optional: "Poți revendica acest element pentru a împiedica alte persoane să-l revizuiască." required: "Trebuie să revendici elementele înainte de a le putea revizui." @@ -1508,6 +1507,8 @@ ro: interface: "Interfață" apps: "Aplicații" navigation_menu: "Meniu de navigare" + calendar_subscriptions: + copied: "Copiat!" change_password: success: "(e-mail trimis)" in_progress: "(se trimite e-mail)" @@ -1950,6 +1951,7 @@ ro: form_kit: reset: Resetare optional: opțional + required: necesar errors: starts_with: "Trebuie să înceapă cu %{prefix}" ends_with: "Trebuie să se termine cu %{suffix}" @@ -2180,6 +2182,8 @@ ro: flags: Semnalări recent: Folosite recent default: Emojii personalizate + filter_input: + clear: "Elimină filtrul" composer: emoji: "Emoji :)" options: "Opțiuni" @@ -2505,8 +2509,6 @@ ro: placeholder: minim max_views: placeholder: maxim - additional_options: - label: "Filtrează după numărul de mesaje postate și vizualizări de subiecte" hamburger_menu: "Meniu de navigare" new_item: "nou" go_back: "înapoi" @@ -2524,10 +2526,7 @@ ro: bulk: select_all: "Selectează tot" clear_all: "Deselectează tot" - unlist_topics: "Elimină subiecte din listă" - relist_topics: "Relistează subiecte" defer: "Marchează ca necitite" - delete: "Șterge subiecte" delete_topics_count: one: "Șterge subiect" few: "Șterge subiecte" @@ -2540,24 +2539,15 @@ ro: dismiss_new: "Anulează cele noi" toggle: "activează selecția multiplă a subiectelor" actions: "Acțiuni multiple" - close_topics: "Închide subiectele" - archive_topics: "Arhivează subiecte" move_messages_to_inbox: "Mută în „Primite”" choose_new_category: "Alege o nouă categorie pentru acest subiect" - selected: - one: "Ai selectat un subiect." - few: "Ai selectat %{count} subiecte." - other: "Ai selectat %{count} de subiecte." selected_sole_category: one: "Ai selectat %{count} subiect din categoria:" few: "Ai selectat %{count} subiecte din categoria:" other: "Ai selectat %{count} de subiecte din categoria:" - change_tags: "Înlocuiește etichete" - append_tags: "Adaugă etichete" choose_new_tags: "Alege etichete noi pentru aceste subiecte:" - choose_append_tags: "Alege etichete noi pentru aceste subiecte:" changed_tags: "Etichetele pentru aceste subiecte au fost schimbate." - notify: "Notifică utilizatorii despre această modificare." + notify: "Notifică utilizatorii despre această modificare" performing: "Se efectuează operațiuni în masă, te rugăm să aștepți…" completed: "Operațiunile în masă s-au finalizat cu succes!" error_topic_count: @@ -2582,7 +2572,6 @@ ro: name: "Respinge" close_topics: name: "Închide sondajul" - note: "Notă" optional: (opțional) archive_topics: name: "Arhivă" @@ -2590,15 +2579,12 @@ ro: name: "Mută în Primite" remove_tags: name: "Înlătură etichete" - append_tags: - name: "Adaugă etichete" replace_tags: name: "Înlocuiește etichete" delete_topics: name: "Șterge" defer: name: "Marchează ca necitite" - description: "Marchează subiecte ca necitite" update_notifications: name: "Actualizează notificări" topic: @@ -3159,6 +3145,9 @@ ro: delete: "Șterge" topic_featured_link_allowed: "Permite link-uri promovate în această categorie." create_long: "Creează o categorie nouă" + type_settings_schema: + site_settings: "Setări site" + unsaved_changes: "Ai modificări nesalvate" slug_placeholder: "(Opțional) cuvinte-punctate pentru url" creation_error: A apărut o eroare în timpul creării categoriei. save_error: A apărut o eroare in timpul salvării categoriei. @@ -3187,6 +3176,8 @@ ro: delete_confirm: "Sigur dorești să ștergi această categorie?" delete_error: "A apărut o eroare la ștergerea acestei categorii." no_description: "Adaugă o descriere acestei categorii." + description_expand: "Arată mai multe" + description_collapse: "Arată mai puține" already_used: "Această culoare este folosită la o altă categorie" color_palette: "Paletă de culori" security: "Securitate" @@ -3201,6 +3192,9 @@ ro: allow_badges_label: "Permite acordarea de ecusoane în această categorie" review_group_name: "numele grupului" require_topic_approval: "Cere obligatoriu aprobarea moderatorilor pentru toate discuțiile noi" + posting_review_modes: + no_one: "Nimeni" + everyone: "Toată lumea" this_year: "anul acesta" none_subcategory_text: "Nimic" visibility: @@ -3601,7 +3595,17 @@ ro: few: "Ești sigur că vrei să ștergi această etichetă și să o scoți din %{count} subiecte care o folosesc?" other: "Ești sigur că vrei să ștergi această etichetă și să o scoți din %{count} subiecte care o folosesc?" delete_confirm_no_topics: "Ești sigur că vrei să ștergi această etichetă?" - description: "Descriere (max. 1 000 de caractere)" + description: "Descriere" + settings: + title: "Setări" + general: "General" + localizations: "Localizări" + back: "Înapoi" + name: "Nume" + localization: + locale: "Locală" + name: "Nume" + description: "Descriere" sort_by: "Sortat după:" sort_by_count: "contor" sort_by_name: "nume" @@ -3873,7 +3877,6 @@ ro: admin_js: type_to_filter: "Tastează pentru a filtra…" settings: "Opțiuni" - reset_filter: "Resetare" admin: title: "Admin Discourse" moderator: "Moderator" @@ -3885,6 +3888,9 @@ ro: never: "niciodată" reports: sidebar_title: "Rapoarte" + group_traffic: "Trafic" + group_members: "Membri" + group_other: "Altele" config_sections: account: title: "Cont" @@ -3914,7 +3920,6 @@ ro: enabled_for_options: no_one: "Nimeni" everyone: "Toată lumea" - staff: "Doar pentru personal" specific_groups: "Grupuri specifice" specific_groups_with_group_names: one: "grupul %{groupNames}" @@ -4084,7 +4089,7 @@ ro: title: "Rapoarte" sub_pages: settings: - title: "Setări panou de control" + title: "Setări" badges: title: "Insigne" header_description: "Insignele recompensează utilizatorii pentru activitățile, contribuțiile și realizările lor pentru a recunoaște, valida și încuraja comportamentul pozitiv și implicarea în cadrul comunității" @@ -4189,6 +4194,7 @@ ro: header_description: "Funcția de chei API îți permite să integrezi în siguranță Discourse cu sisteme externe și să automatizezi acțiunile. Administratorii pot crea chei cu scopuri specifice pentru a controla accesul la resurse și la datele sensibile. Scopurile limitează funcționalitatea, asigurând securitate sporită." webhooks: title: "Cârlige web" + keywords: "eveniment|conținut|url" embedding: title: "Înglobare" theme_site_settings: @@ -4204,27 +4210,6 @@ ro: one: 'Un rezultat pentru „%{filter}”' few: '%{count} rezultate pentru „%{filter}”' other: '%{count} de rezultate pentru „%{filter}”' - result_types: - page: - one: "Pagină" - few: "Pagini" - other: "Pagini" - report: - one: "Raport" - few: "Rapoarte" - other: "Rapoarte" - setting: - one: "Setare" - few: "Opțiuni" - other: "Opțiuni" - theme: - one: "Temă" - few: "Teme" - other: "Teme" - component: - one: "Componentă" - few: "Componente" - other: "Componente" new_features: title: "Ce este nou?" check_for_updates: "Verifică actualizări" @@ -4243,15 +4228,6 @@ ro: title: "Ce este nou?" subtitle: "Lansăm noi funcții și îmbunătățiri tot timpul. Această pagină le acoperă pe cele mai importante, dar poți da clic pe „Află mai multe” pentru a vedea notele extinse de lansare." learn_more: "Află mai multe..." - experimental: "Experimental" - only_experiments: "Afișează doar caracteristici experimentale" - experiment_enabled: "Ai activat funcționalitatea experimentală." - experiment_disabled: "Ai dezactivat funcționalitatea experimentală." - experiment_tooltip: - title_enabled: "Dezactivează funcționalitatea experimentală" - content_enabled: "Modificând aceasta va dezactiva funcționalitatea pentru toți utilizatorii." - feature_tooltip: - content_enabled: "Modificând aceasta va dezactiva funcționalitatea pentru toți utilizatorii." last_checked: "Ultima verificare" refresh_problems: "Reîmprospătează" no_problems: "Nu a apărut nicio problemă." @@ -4297,7 +4273,7 @@ ro: all: "Toate" view_table: "tabel" view_graph: "grafic" - refresh_report: "Reactualizează raportul" + refresh_report: "Reîmprospătează" daily: Zilnic monthly: Lunar weekly: Săptămânal @@ -5464,6 +5440,7 @@ ro: field_types: text: "Text" textarea: "Zonă text" + date: "Dată" confirm: "Confirmare" dropdown: "Meniu derulant" site_text: diff --git a/config/locales/client.ru.yml b/config/locales/client.ru.yml index 361eaea4cd089..50b8b2a12210b 100644 --- a/config/locales/client.ru.yml +++ b/config/locales/client.ru.yml @@ -6,6 +6,26 @@ ru: js: + blocks: + ghost: + status: "Статус" + conditions: "Условия" + arguments: "Аргументы" + container_args: "Аргументы контейнера" + in_location: "в" + hidden: "скрыто" + not_registered: "не зарегистрирован" + no_visible_children: "нет видимых дочерних элементов" + failed: "не удалась" + ghost_reasons: + optional_missing_hint: "Этот необязательный блок не отображается, поскольку он не зарегистрирован." + no_visible_children_hint: "Этот контейнерный блок не отображается, потому что ни один из его дочерних элементов не виден." + condition_failed_hint: "Этот блок не отображается, поскольку условия его выполнения не выполнены." + head_hidden_tail_hint: "Этот блок не отображается, потому что в контейнере `head` сначала отобразился другой блок." + carousel: + go_to_slide: "Перейти к слайду %{index}" + previous: "Предыдущий слайд" + next: "Следующий слайд" number: format: separator: "," @@ -341,6 +361,7 @@ ru: forwarded: "Переадресовал(а) вышеуказанное письмо" topic_admin_menu: "действия администратора над темой" skip_to_main_content: "Перейти к основному контенту" + skip_links_label: "Пропустить навигационные ссылки" skip_to_post: "Перейти к сообщению %{post_number}" skip_to_where_you_left_off: "Перейти к тому месту, где вы остановились (сообщение %{post_number})" skip_to_where_you_left_off_last: "Перейти к тому месту, где вы остановились (последний ответ, сообщение %{post_number})" @@ -348,10 +369,13 @@ ru: skip_to_top: "Перейти к началу" skip_user_nav: "Перейти к контенту профиля" emails_are_disabled: "Все исходящие письма были глобально отключены администратором. Никакие уведомления по электронной почте отправляться не будут." + emails_are_disabled_no_smtp: "Отправка исходящих писем отключена, поскольку не настроен SMTP-сервер. Отправка любых писем невозможна." emails_are_disabled_non_staff: "Отправка писем отключена для пользователей, не являющихся сотрудниками." software_update_prompt: message: "Мы обновили этот сайт. Обновите страницу, чтобы все работало гладко." dismiss: "Закрыть" + notifications_tracking: + tooltip: "Уровень уведомлений: %{level}" back_button: "Назад" welcome_banner: header: @@ -371,12 +395,24 @@ ru: broken_page_change_alert: "В обработчике OnPageChange возникла ошибка. Дополнительные сведения см. в инструментах для разработчиков браузера." broken_plugin_alert: "Причина — плагин '%{name}'" broken_transformer_alert: "Произошла ошибка. Ваш сайт может работать некорректно." + broken_block_alert: "Обнаружена ошибка конфигурации блока. Подробности см. в консоли браузера." + broken_block_factory_alert: "Не удалось загрузить блок. Некоторые элементы пользовательского интерфейса могут отображаться некорректно." critical_deprecation: notice: "[Уведомление администратора] %{source} содержит код, который необходимо обновить. (id:%{id})" learn_more_link: "(узнать больше)" theme_source: "Тема '%{name}'" plugin_source: "Плагин '%{name}'" unknown_source: "Одна из ваших тем или один из плагинов" + dev_tools: + drag_to_move: "Перетащите для перемещения" + block_debug: + visual_overlay: "Визуальное наложение" + ghost_blocks: "Призрачные блоки" + toggle_safe_mode: "Переключить безопасный режим" + toggle_verbose_localization: "Включить/выключить подробный режим локализации" + toggle_mobile_view: "Переключить мобильный режим" + disable_dev_tools: "Отключить инструменты разработчика" + toggle_upcoming_changes_debug: "Включить/отключить отладку предстоящих изменений" s3: regions: ap_northeast_1: "Азиатско-Тихоокеанский регион (Токио)" @@ -474,7 +510,38 @@ ru: pill: "Похожие" pm_title: "Похожие сообщения" admin_onboarding_banner: + launch_in_easy_steps: "Запуск в %{step_count} простых шагах" + congrats_onboarding_complete: "Поздравляем с завершением процесса адаптации!" + invite_collaborators: + title: "Пригласить соавторов" + description: "Первые участники помогают оживить ваше сообщество." + action: "Создать приглашение" + start_posting: + title: "Начать публикацию" + description: "Дайте людям тему для совместного обсуждения." + action: "Посмотреть идеи" + choose_option: "С чего бы вы хотели начать?" + predefined_topics: "Шаблоны для начала разговора" + predefined_topics_subtitle: "Дайте новым участникам повод для обсуждения: выберите шаблон для редактирования и создайте свой собственный." + predefined_topics_description: "Выберите из подборки тем для начала разговора, чтобы завязать беседу." + use_predefined: "Просмотрите шаблоны" + back: "Назад" + icebreakers: + fun_facts: + title: "Какие интересные факты о вас известны?" + body: "Привет всем! Я очень рада начать создавать это новое сообщество. Для начала давайте поделимся интересным фактом о себе. Я начну первыи: я люблю походы и исследование новых маршрутов! А что интересного есть в вас?" + coolest_thing_you_have_seen_today: + title: "Что самое крутое ты сегодня видел?" + body: "Что самое крутое вы сегодня видели или пережили? Это может быть что угодно, от прекрасного заката до случайного проявления доброты. Я начну: я видел, как собака помогала пожилому человеку перейти улицу!" + introduce_yourself: + title: "Представьтесь" + body: "Добро пожаловать в сообщество! Давайте познакомимся. Пожалуйста, представьтесь и расскажите немного о своих интересах. Я начну: я увлечен технологиями и люблю обучать других!" + what_is_your_favorite_food: + title: "Какое ваше любимое блюдо?" + body: "Поделитесь своими любимыми блюдами с сообществом! Я начну: я обожаю пиццу, особенно с большим количеством сыра и пепперони." spread_the_word: + title: "Расскажите всем!" + description: "Поделитесь ссылкой со всеми в вашей сети." action: "Копировать ссылку" copied_to_clipboard: "Ссылка скопирована в буфер обмена!" about: @@ -586,8 +653,6 @@ ru: other: "Создано %{count} года назад" bookmarked: title: "Закладки" - edit_bookmark: "Изменить закладку" - clear_bookmarks: "Очистить закладки" help: bookmark: "Добавить тему в закладки" edit_bookmark: "Изменить закладку для сообщения в этой теме" @@ -606,12 +671,12 @@ ru: clear_reminder: "Удалить напоминание" edit: "Изменить закладку" not_bookmarked: "добавить сообщение в закладки" + topic_bookmark: "Тема" remove_reminder_keep_bookmark: "Удалить напоминание, но оставить закладку" created_with_reminder: "Вы добавили это сообщение в закладки с напоминанием %{date}: «%{name}»" created_with_reminder_generic: "Добавлено в закладки с напоминанием %{date}: «%{name}»" delete: "Удалить закладку" confirm_delete: "Действительно удалить эту закладку? Напоминание также будет удалено." - confirm_clear: "Действительно удалить все ваши закладки из этой темы?" save: "Сохранить" no_timezone: 'Чтобы активировать функцию напоминаний, укажите часовой пояс в профиле.' invalid_custom_datetime: "Неверно указаны дата и время, попробуйте ещё раз." @@ -684,6 +749,11 @@ ru: few: "+%{count} других черновика" many: "+%{count} других черновиков" other: "Другие черновики: +%{count}" + embed_mode: + storage_access_prompt: "У вас уже есть аккаунт %{site_name} ? Предоставьте доступ к вашей сессии, чтобы вы могли оставлять комментарии от своего имени." + allow_access: "Разрешить доступ" + continue_as_guest: "Продолжить как Гость" + be_first_to_reply: "Будь первым, кто ответит!" topic_count_all: one: "Посмотреть %{count} новую тему" few: "Посмотреть %{count} новые темы" @@ -754,26 +824,23 @@ ru: review: show_more: "Развернуть" show_less: "Свернуть" + back_to_queue: "Вернуться в очередь" + editing_post: "Редактирование поста…" order_by: "Сортировать по" date_filter: "Создано между" in_reply_to: "в ответ на" filtered_flagged_by: "Кто пожаловался" unknown: - title: - one: "У вас есть ожидающие проверки элементы из отключенного плагина:" - few: "У вас есть ожидающие проверки элементы из отключенных плагинов:" - many: "У вас есть ожидающие проверки элементы из отключенных плагинов:" - other: "У вас есть ожидающие проверки элементы из отключенных плагинов:" instruction: "Они не будут отображаться корректно, пока вы не включите соответствующий плагин. Включите плагин и обновите страницу. Вы также можете игнорировать их. Подробнее..." reviewable_unknown_source: "%{reviewableType} (неизвестный плагин)" reviewable_known_source: "%{reviewableType} (из плагина «%{pluginName}»)" ignore_all: "Игнорировать все" enable_plugins: "Включить плагины" - delete_confirm: "Действительно удалить все проверки, созданные отключенными плагинами?" - ignore_success: "Удалены все проверки, созданные отключенными плагинами." + delete_confirm: "Вы уверены, что хотите удалить все элементы очереди рецензирования, созданные отключенными плагинами?" + ignore_success: "Все элементы очереди проверки, созданные отключенными плагинами, были удалены." explain: why: "объяснить, почему этот элемент оказался в очереди на проверку" - title: "Оценка контента" + title: "Оценка элементов очереди просмотра" formula: "Формула" subtotal: "Промежуточный итог" total: "Всего" @@ -787,10 +854,10 @@ ru: title: "Пользователи, чьи жалобы были удовлетворены, получают бонус." trust_level_bonus: name: "уровень доверия" - title: "Элементы, проверяемые пользователями с более высоким уровнем доверия, имеют более высокий балл." + title: "Флаги, созданные пользователями с более высоким уровнем доверия, имеют более высокий балл." type_bonus: name: "тип бонуса" - title: "Некоторым проверяемым элементам сотрудник может назначить бонус, чтобы сделать их более приоритетными." + title: "Сотрудники могут присуждать бонусы за приоритетное выполнение определенных типов флагов." revise_and_reject_post: title: "Исправить" reason: "Причина" @@ -799,13 +866,15 @@ ru: custom_reason: "Дайте четкое описание причины" other_reason: "Прочее..." optional: "необязательно" - stale_help: "Проверка уже была выполнена пользователем %{username}." + stale_help: "Данная проблема решена пользователем %{username}." claim_help: optional: "Вы можете зарезервировать этот контент за собой, чтобы другие не могли заняться его модерацией." required: "Вы должны зарезервировать контент за собой, прежде чем заняться его модерацией." claimed_by_you: "Вы зарезервировали этот контент за собой и можете смело заняться его модерацией." claimed_by_other: "Этот контент может быть отмодерирован только пользователем %{username}." automatically_claimed_by: "Этот элемент сейчас проверяется пользователем %{username}." + claim: + title: "Заявить права на эту тему" awaiting_approval: "В ожидании подтверждения" delete: "Удалить" settings: @@ -915,6 +984,8 @@ ru: low: "Низкий" medium: "Средний" high: "Высокий" + active_filters: "Активные фильтры:" + clear_filter: "Убрать %{filter}" conversation: view_full: "просмотреть весь разговор" scores: @@ -957,6 +1028,10 @@ ru: is_this_post: "Эта %{reviewable_type} %{reviewable_human_score_types}?" delimiter: "или" something_else_wrong: "Что-то не так со следующим: %{reviewable_type}?" + approve_user: "Одобрить этого пользователя?" + suspect_user: "Это спам от пользователя?" + approve_post: "Одобрить этот пост?" + approve_topic: "Одобрить эту тему?" types: reviewable_flagged_post: title: "На это сообщение поступила жалоба" @@ -975,10 +1050,17 @@ ru: title: "Сообщение" noun: "публикация" reviewable_ai_chat_message: + title: "Сообщение в чате, помеченное ИИ" noun: "сообщение чата" reviewable_ai_post: + title: "Сообщение, помеченное ИИ" noun: "публикация" + reviewable_post_voting_comment: + title: "Помеченный комментарий" + noun: "комментарий" flagged_as: "Помечено как" + post_flagged_as: "Пост отмечен как" + chat_flagged_as: "Чат помечен как" user_label: "Пользователь" moderator_actions: "Действия модератора" timeline_and_notes: "Хронология и заметки" @@ -986,16 +1068,21 @@ ru: target_created: "Публикация создана" target_created_by: "Публикация создана пользователем %{username} · %{relativeDate}" target_deleted: "Публикация удалена" + target_deleted_by: "Сообщение удалено пользователем %{username} · %{relativeDate}" flagged: "Помечено" flagged_as_by: "Помечено как %{flagReason} пользователем %{username} · %{relativeDate}" claimed: "Зарезервировано" claimed_by: "Зарезервировано пользователем %{username} · %{relativeDate}" reviewed: "Проверено" + approved_by: "Одобрено %{username} · %{relativeDate}" + rejected_by: "Отклонено %{username} · %{relativeDate}" + ignored_by: "Игнорируется %{username} · %{relativeDate}" view_conversation: "просмотреть ЛС" note_added: "Примечание модератора" note_added_by: "Примечание модератора %{username} · %{relativeDate}" no_events: "Событий в хронологии нет" notes: + add_note_description: "Добавьте примечание, чтобы предоставить контекст другим модераторам." add_note_button: "Добавить примечание" placeholder: "Напишите примечание тут..." chars_remaining: "Осталось символов: %{count} ..." @@ -1008,6 +1095,7 @@ ru: review_user: "Пользователь" need_help: "Нужна помощь?" copy_link: "Копировать ссылку" + copy_permalink_title: "Скопировать ссылку на этот материал, подлежащий проверке, в буфер обмена" copy_link_feedback: "Ссылка скопирована" view_source: "Посмотреть источник" insights: @@ -1018,6 +1106,7 @@ ru: few: "Жалобу подали %{count} уникальных пользователя" many: "Жалобу подали %{count} уникальных пользователей" other: "Жалобу подали столько уникальных пользователей: %{count}" + similar_posts: "Предыдущие нарушения" user_activity: "Информация о пользователе" activities: joined_on: "присоединился: %{joinDate}" @@ -1029,10 +1118,15 @@ ru: other: "%{count} публикации" moderation_history: label: "История модерации" + silenced: "Заглушено: %{count}" + suspended: "Приостановлено: %{count}" + rejected_posts: "Сообщения отклонены: %{count}" solution_marked: "Отмечено как решение" topic_has_solution: "Тема содержит решение вопроса" visibility: "Видимость" + topic_unlisted: "Данная тема не указана в открытом доступе и доступна только по прямой ссылке." help: + community_moderation_guide: "Руководство по модерации этого сообщества" moderation_guide: "Руководство по модерации Discourse" flag_priorities: "Управление репутацией пользователей и приоритетами жалоб" spam_detection: "Обнаружение спама" @@ -1168,6 +1262,7 @@ ru: add_members: title: "Добавление пользователей в группу «%{group_name}»" description: "Введите список пользователей, которых вы хотите пригласить в группу, или вставьте список значений, разделенных запятыми:" + description_usernames_only: "Введите список имен пользователей, которых вы хотите добавить в группу, или вставьте список, разделенный запятыми:" usernames_placeholder: "имена пользователей" usernames_or_emails_placeholder: "имена пользователей или адреса электронной почты" notify_users: "Уведомить пользователей" @@ -1195,6 +1290,7 @@ ru: title: Взаимодействие posting: Сообщения notification: Уведомления + self_lockout: "Вы собираетесь изменить видимость группы таким образом, что это лишит вас доступа к ней. Вы уверены, что хотите продолжить?" email: title: "Эл. почта" enable_smtp: "Включить SMTP" @@ -1207,6 +1303,7 @@ ru: smtp_title: "SMTP" smtp_instructions: "Когда вы включаете SMTP для группы, все исходящие электронные письма, отправляемые из группового почтового ящика, будут отправляться согласно указанным здесь настройкам. Стандартные почтовые настройки, используемые при отправке других писем, в этом случае использоваться не будут." additional_settings: "Дополнительные настройки" + smtp_disable_confirm: "Если вы отключите SMTP, все настройки SMTP будут сброшены, и соответствующая функциональность будет отключена. Вы уверены, что хотите продолжить?" prefill: title: "Заполните предварительные настройки для:" gmail: "Gmail" @@ -1327,6 +1424,8 @@ ru: make_owner_description: "Сделать %{username} владельцем этой группы" remove_owner: "Удалить владельца" remove_owner_description: "Удалить %{username} как владельца этой группы" + remove_member_self_lockout: "Выход из этой группы лишит вас доступа к управлению ею. Вы уверены, что хотите продолжить?" + remove_owner_self_lockout: "Удаление себя из списка владельцев группы лишит вас доступа к управлению этой группой. Вы уверены, что хотите продолжить?" make_primary: "Сделать основной" make_primary_description: "Сделать основной группой для пользователя %{username}" remove_primary: "Удалить как основную" @@ -1514,8 +1613,16 @@ ru: private_message: "Сообщение" private_messages: "Сообщения" upcoming_changes: + title: "Предстоящие изменения" for_user: + upcoming_change: "Предстоящее изменение" enabled: "Включено?" + why: "Почему?" + why_reasons: + not_in_specific_groups: "Пользователь не входит в определенные группы, необходимые для этого изменения" + in_specific_groups: "Пользователь входит в определенные группы, необходимые для внесения этих изменений." + enabled_for_everyone: "Это изменение доступно для всех участников." + enabled_for_no_one: "Эта функция отключена для всех участников." user_notifications: filters: filter_by: "Фильтр" @@ -1720,6 +1827,11 @@ ru: undo_revoke_access: "Отменить лишение прав доступа" api_approved: "Подтверждено:" api_last_used_at: "Последнее использование:" + api_show_permissions: + one: "Разрешения предоставлены (%{count})" + few: "Разрешения предоставлены (%{count})" + many: "Разрешения предоставлены (%{count})" + other: "Разрешения предоставлены (%{count})" theme: "Тема" save_to_change_theme: 'Тема будет обновлена после нажатия на кнопку «%{save_text}».' home: "Домашняя страница" @@ -1868,6 +1980,24 @@ ru: interface: "Интерфейс" apps: "Приложения" navigation_menu: "Меню навигации" + upcoming_changes: "Предстоящие изменения" + calendar_subscriptions: "Календарь" + calendar_subscriptions: + description: "Сгенерируйте URL-адреса подписки для синхронизации с вашим любимым календарным приложением (Google Calendar, Apple Calendar, Outlook и т. д.). Эти URL-адреса представляют собой приватные ссылки на события календаря для вашей учетной записи (закладки-напоминания, события календаря и т. д.). Вы всегда можете отозвать или продлить сгенерированные URL-адреса подписки. " + generate: "Сгенерировать URL-адреса подписки" + regenerate: "Перегенерировать URL" + regenerate_confirm: "Это аннулирует существующие URL-адреса подписки на ваш календарь. Любые приложения календаря, использующие старые URL-адреса, перестанут получать обновления. Продолжить?" + revoke: "Отозвать подписку" + revoke_confirm: "Это аннулирует существующие URL-адреса подписки на ваш календарь. Любые приложения календаря, использующие старые URL-адреса, перестанут получать обновления. Продолжить?" + urls_warning: "Ссылки для подписки готовы! Нажмите на кнопки ниже, чтобы связать их с вашим календарным приложением. Примечание: эти ссылки отображаются только один раз." + bookmarks: "Напоминания о закладках" + bookmarks_description: "Ваши закладки с напоминаниями о датах" + copy: "Скопировать URL" + copied: "Скопировано!" + add_to_google: "Календарь Google" + add_to_outlook: "Microsoft Outlook" + add_to_apple: "Календарь Apple" + active_subscription: "У вас есть активная подписка на календарь." change_password: success: "(письмо отправлено)" in_progress: "(отправка письма)" @@ -1880,6 +2010,7 @@ ru: verify_identity: "Чтобы продолжить, подтвердите свою личность." title: "Сброс пароля" remove: "Сбросить пароль" + remove_disabled: "Для удаления пароля учетной записи необходимо использовать как минимум еще один способ входа (например, пароль или связанный внешний аккаунт)." remove_detail: "Ваш аккаунт больше не будет доступен по паролю, если вы его не сбросите." second_factor_backup: title: "Резервные коды двухфакторной аутентификации" @@ -2152,6 +2283,7 @@ ru: first_time_and_daily: "При первом лайке в сообщении, и далее не чаще раза в день" first_time: "Только при первом лайке" never: "Никогда" + notify_on_linked_posts: "Уведомлять о том, когда кто-то делится ссылкой на одну из моих публикаций." email_previous_replies: title: "Добавлять предыдущие ответы к концу электронных писем" unless_emailed: "только при первой отправке" @@ -2211,6 +2343,7 @@ ru: redeemed_tab_with_count: "Принятые (%{count})" invited_via: "Приглашение" invited_via_link: "ссылка %{key} (принято: %{count} из %{max})" + generating_link: "Создание ссылки..." groups: "Группы" topic: "Тема" sent: "Создано / последняя отправка" @@ -2283,6 +2416,7 @@ ru: other {# дня} }. edit_link_options: "Измените параметры ссылки или отправьте по электронной почте." + edit_link_options_only: "Редактировать параметры ссылки" show_advanced: "Показать дополнительные параметры" hide_advanced: "Скрыть дополнительные параметры" description: "Описание" @@ -2499,9 +2633,21 @@ ru: no_results: "Нет результатов" search: "Поиск…" label: "Выберите варианты" + d_otp: + screen_reader: + one: Введите число + few: Введите %{count} чисел + many: Введите %{count} чисел + other: Введите %{count} числа form_kit: reset: Сбросить optional: необязательно + required: Обязательное + errors_summary_title: + one: "Исправьте эту ошибку, чтобы продолжить." + few: "Исправьте эти ошибки, чтобы продолжить." + many: "Исправьте эти ошибки, чтобы продолжить." + other: "Исправьте эти ошибки, чтобы продолжить." dirty_form: "Вы не отправили изменения! Действительно выйти?" errors: starts_with: "Должно начинаться с %{prefix}" @@ -2525,6 +2671,10 @@ ru: few: "Требуется не менее %{count} символов" many: "Требуется не менее %{count} символов" other: "Требуется не менее %{count} символа" + color: + available_presets: "Доступные предустановки" + already_used: "Уже использовано" + edit_presets: "Редактировать цветовые палитры" close: "Закрыть" assets_changed_confirm: "Для этого сайта есть обновление программного обеспечения. Получить последнюю версию?" logout: "Необходимо заново войти в систему." @@ -2587,6 +2737,7 @@ ru: }. learn_more: "Подробнее…" learn_more_with_link: "Подробнее…" + feedback_with_link: "Обратная связь…" mute: Отключить unmute: Включить last_post: Последнее сообщение @@ -2749,6 +2900,7 @@ ru: admin_not_allowed_from_ip_address: "Вход с этого IP-адреса в качестве администратора запрещён." resend_activation_email: "Щёлкните здесь, чтобы повторно выслать письмо для активации." omniauth_disallow_totp: "В аккаунте включена двухфакторная аутентификация. Войдите под своим паролем." + works_with: "Работает с" activate_account: "Активировать аккаунт" resend_title: "Отправить повторно письмо для активации" change_email: "Изменить электронную почту" @@ -2902,6 +3054,8 @@ ru: filter_for_more: Фильтровать еще… categories_admin_dropdown: title: "Управление категориями" + tag_category_admin_dropdown: + edit_tag: "Редактировать тег" bulk_select_topics_dropdown: title: "Массовые действия" bulk_select_bookmarks_dropdown: @@ -2932,6 +3086,8 @@ ru: medium_dark_tone: Средне-тёмный цвет кожи dark_tone: Тёмный цвет кожи default: Пользовательские эмодзи + filter_input: + clear: "Очистить фильтр" shared_drafts: title: "Общие черновики" notice: "Эта тема видна только тем, кто может публиковать общие черновики." @@ -2963,7 +3119,11 @@ ru: title: "Перевод публикации" select: "Выбрать перевод" save: "Сохранить перевод" + original_content: "Оригинальный пост" + translation_preview: "Предварительный просмотр перевода" + original: "Оригинал" translation: "Перевод" + no_translation_yet: "Начните вводить текст, чтобы увидеть предварительный просмотр перевода..." placeholder: "Введите перевод публикации здесь..." group_mentioned_limit: one: "Внимание! Вы упомянули %{group}, в которой больше участников, чем установленный администратором лимит упоминаний на %{count} пользователя. Никто не получит уведомление." @@ -3092,14 +3252,20 @@ ru: upload_description: "впишите сюда описание файла" olist_title: "Нумерованный список" ulist_title: "Маркированный список" + list_title: "Списки" list_item: "Элемент списка" toggle_direction: "Переключить направление" wrap_modal: + attributes_label: "Атрибуты" + add_attribute: "Добавить атрибут" + remove_attribute: "Удалить атрибут" apply: "Применить" + no_attributes: "Атрибуты пока не добавлены." help: "Справка по форматированию (Markdown)" collapse: "Свернуть панель редактора" open: "Открыть панель редактора" abandon: "Закрыть редактор и удалить черновик" + edit_reason: "Укажите причину редактирования." enter_fullscreen: "Включить полноэкранный режим редактора" exit_fullscreen: "Выключить полноэкранный режима редактора" exit_fullscreen_prompt: "ESC — выход из полноэкранного режима" @@ -3162,8 +3328,14 @@ ru: zoom_out: "Уменьшить размер изображения" zoom_in: "Увеличить размер изображения" remove: "Удалить изображение" + add_to_grid: "Добавить в сетку" + move_outside_grid: "Выйти за пределы сетки" image: "изображение" grid_label: "Это будет отображаться в виде сетки." + grid_mode_grid: "Сетка" + grid_mode_carousel: "Карусель" + grid_mode_title: "Установите стиль галереи изображений на %{mode}" + remove_grid: "Удалить сетку" image_scale_button: "Масштабировать изображение до %{percent}%" delete_image_button: Удалить изображение toggle_image_grid: Сетка изображений @@ -3263,6 +3435,17 @@ ru: votes_released: "%{description} — завершено" new_features: "Появились новые функции!" admin_problems: "Новый совет в панели управления сайта" + upcoming_changes: + available: + title: "Предстоящие изменения" + description: "'%{changeName}' доступен для предварительного просмотра" + description_two: "'%{changeName1}' и '%{changeName2}' доступны для предварительного просмотра" + description_many: "'%{changeName}' и %{otherChangeCount} доступны для предварительного просмотра дополнительные изменения" + automatically_promoted: + title: "Предстоящие изменения" + description: "'%{changeName}' был автоматически включен" + description_two: "'%{changeName1}' и '%{changeName2}' были автоматически включены" + description_many: "'%{changeName}' и %{otherChangeCount} дополнительные изменения были автоматически включены" dismiss_confirmation: body: default: @@ -3328,6 +3511,8 @@ ru: reaction: "Новая реакция" votes_released: "голосование опубликовано" admin_problems: "новый совет в панели управления сайта" + upcoming_change_available: "Доступны новые предстоящие изменения." + upcoming_change_automatically_promoted: "Предстоящие изменения автоматически включены." upload_selector: change: "Изменить" delete: "Удалить" @@ -3420,6 +3605,7 @@ ru: aria_label: Фильтр по тегам filters: label: Ограничить поиск по темам/публикациям… + all: Включить сообщения title: С совпадениями в заголовке likes: Понравившиеся posted: В которых я отвечал(а) @@ -3465,8 +3651,6 @@ ru: max_views: placeholder: максимум aria_label: Фильтр по максимальному количеству просмотров - additional_options: - label: "Фильтр по количеству сообщений и просмотров тем" hamburger_menu: "Меню навигации" new_item: "новый" go_back: "вернуться" @@ -3545,8 +3729,6 @@ ru: confirm: "Подтвердить" select_all: "Выбрать всё" clear_all: "Отменить выбор" - unlist_topics: "Скрыть темы" - relist_topics: "Показать темы" reset_bump_dates: "Сбросить даты поднятия" defer: "Отметить как непрочитанное" delete: "Удалить темы" @@ -3594,19 +3776,14 @@ ru: other: "Отложить новые (%{count})" toggle: "выбор нескольких тем" actions: "Массовые действия" - change_category: "Задать категорию…" + change_category: "Обновить категорию" close_topics: "Закрыть темы" - archive_topics: "Архивировать темы" + archive_topics: "Архив тем" move_messages_to_inbox: "Переместить во входящие" archive_messages: "Переместить в архив" - notification_level: "Уведомления…" + notification_level: "Уведомления об обновлении" change_notification_level: "Изменить уровень уведомлений" choose_new_category: "Выберите новую категорию для этих тем:" - selected: - one: "Вы выбрали %{count} тему." - few: "Вы выбрали %{count} темы." - many: "Вы выбрали %{count} тем." - other: "Вы выбрали %{count} темы." selected_sole_category: one: "Вы выбрали %{count} тему из этой категории:" few: "Вы выбрали %{count} темы из этой категории:" @@ -3620,9 +3797,9 @@ ru: change_tags: "Заменить теги" append_tags: "Добавить теги" choose_new_tags: "Выберите новые теги для этих тем:" - choose_append_tags: "Выберите теги для добавления к этим темам:" + choose_append_tags: "Добавить теги" changed_tags: "Теги этих тем изменены." - remove_tags: "Удалить все теги" + remove_tags: "Удалить теги" confirm_remove_tags: one: "Все теги будут удалены из этой темы. Продолжить?" few: "Все теги будут удалены из этих %{count} тем. Продолжить?" @@ -3633,7 +3810,7 @@ ru: few: "Выполнено: %{count} темы" many: "Выполнено: %{count} тем" other: "Выполнено: %{count} темы" - notify: "Уведомить пользователей об этом изменении." + notify: "Уведомить пользователей об этом изменении" performing: "Выполняются массовые действия, подождите…" completed: "Массовые действия завершены!" error_topic_count: @@ -3658,43 +3835,50 @@ ru: unread: "Ничего не осталось непрочитанным... впечатляет!" new_new: "На данный момент ничего нового... заходите позже!" new: "На данный момент ничего нового... заходите позже!" + generic: "Здесь ничего интересного... загляните позже!" topic_bulk_actions: dismiss: name: "Закрыть" close_topics: name: "Завершить" - note: "Примечание" + description: "Закрытые темы не позволяют оставлять новые комментарии. Узнать больше" + note: "Добавьте примечание к этим темам." optional: (необязательно) archive_topics: name: "Архивировать" + description: "Архивированные темы скрыты из поиска и списка последних тем. Узнать больше" archive_messages: name: "Переместить в архив" move_messages_to_inbox: name: "Переместить во входящие" unlist_topics: name: "Скрыть" + description: "Темы, не указанные в списке, скрыты, но к ним по-прежнему можно получить доступ по прямой ссылке. Узнать больше" relist_topics: name: "Показать повторно" remove_tags: name: "Удалить теги" + description: "Удалите все теги из выбранных тем." append_tags: name: "Добавить теги" + description: "Добавьте следующие теги к выбранным темам:" replace_tags: name: "Заменить теги" + description: "Замените все существующие теги для выбранных тем следующими:" delete_topics: name: "Удалить" + description: "Удалить выбранные темы безвозвратно. Это действие необратимо." update_category: name: "Обновить категорию" - description: "Выбор новой категории для выбранных тем" + description: "Переместить все выбранные темы в следующую категорию:" reset_bump_dates: name: "Сбросить даты поднятия" - description: "Сбрасывает дату поднятия темы на дату последней созданной публикации, что влияет на упорядочивание в списке тем" + description: "Вы хотите обновить даты обновления до даты последнего созданного сообщения? Это может повлиять на их порядок в списке тем." defer: name: "Отметить как непрочитанное" - description: "Помечает темы как непрочитанные" update_notifications: name: "Обновить уведомления" - description: "Изменяет уровень уведомлений на «В наблюдаемых», «В отслеживаемых», «Уведомлять» или «Не уведомлять»" + description: "Измените свой персональный уровень уведомлений для выбранных тем следующим образом:" topic: filter_to: one: "%{count} сообщение в теме" @@ -3703,6 +3887,7 @@ ru: other: "%{count} сообщения в теме" create: "Создать тему" create_long: "Создать новую тему" + create_group: "Новая тема и черновики" open_draft: "Открыть черновик" private_message: "Новое сообщение" archive_message: @@ -3836,6 +4021,8 @@ ru: 12_hours: "12 часов" 24_hours: "24 часа" custom: "Настраиваемый интервал" + slow_mode_notice: + duration: "Пожалуйста, подождите %{duration} между вашими сообщениями в этой теме." topic_status_update: title: "Таймер темы" save: "Установить таймер" @@ -3865,6 +4052,8 @@ ru: title: "Автоматическое закрытие темы после последнего сообщения" auto_delete: title: "Автоматическое удаление темы" + auto_delete_after_last_post: + title: "Автоматическое удаление темы после последнего сообщения" auto_bump: title: "Автоматическое поднятие темы" reminder: @@ -3876,6 +4065,7 @@ ru: auto_close: "Тема автоматически закроется %{timeLeft}." auto_publish_to_category: "Тема будет опубликована в категории #%{categoryName} %{timeLeft}." auto_close_after_last_post: "Тема будет закрыта через %{duration} после последнего ответа." + auto_delete_after_last_post: "Эта тема будет удалена %{duration} после последнего ответа." auto_delete: "Тема будет автоматически удалена %{timeLeft}." auto_bump: "Тема будет автоматически поднята %{timeLeft}." auto_reminder: "Вам придёт напоминание об этой теме %{timeLeft}." @@ -3975,6 +4165,8 @@ ru: reply: title: "Ответить" help: "Начать составление ответа в этой теме" + footer_buttons: + region_label: "Действия темы" share: title: "Поделиться темой" extended_title: "Поделиться ссылкой" @@ -4178,14 +4370,22 @@ ru: many: "Вы выбрали %{count} сообщений." other: "Вы выбрали %{count} сообщения." deleted_by_author_simple: "(тема удалена автором)" + localizations: + title_edit_warning: + message: "Это переведённый заголовок темы.

Вы хотите отредактировать оригинальную категорию, теги и заголовок в %{language} или отредактировать этот конкретный перевод?" + action_original: "Редактировать оригинал" + action_translation: "Редактировать переведённое название темы" + editing_translation: "Редактирование %{language} перевода" post_list: title: "Последние публикации" empty: "Публикаций нет" aria_post_number: "%{title} — публикация №%{postNumber}" bulk: + select_all: "Выбрать все" clear_all: "Сбросить все" actions: "Массовые действия" post: + accessible_heading: "пост от %{username} %{date}" confirm_delete: "Действительно удалить сообщение?" quote_reply: "Ответить с цитированием" quote_reply_shortcut: "Цитировать (или нажмите q)" @@ -4209,8 +4409,13 @@ ru: deleted_by_author_simple: "(сообщение удалено автором)" collapse: "свернуть" load_more_replies: "загрузить еще ответы" + load_more_posts_above: "Загрузить больше сообщений выше" + load_more_posts_below: "Загрузить больше сообщений ниже" sr_collapse_replies: "Свернуть встроенные ответы" sr_load_more_replies: "Загрузить еще вложенные ответы" + loading_more_posts_above: "Загрузка дополнительных сообщений выше..." + loading_more_posts_below: "Загрузить больше сообщений ниже..." + loading_complete: "Загрузка завершена." sr_date: "Дата сообщения" sr_expand_replies: one: "На это сообщение есть %{count} ответ" @@ -4285,7 +4490,11 @@ ru: edit: "Изменить" delete: "Удалить" add: "Добавить новый перевод" - manage: "Управление переводами (%{count} уже существует)" + manage: + one: "Управление переводами (%{count} уже существует)" + few: "Управление переводами (%{count} уже существует)" + many: "Управление переводами (%{count} уже существует)" + other: "Управление переводами (%{count} уже существует)" view: one: "Посмотреть %{count} переведенную локаль" few: "Посмотреть %{count} переведенные локали" @@ -4296,8 +4505,10 @@ ru: confirm_delete: "Действительно удалить переводы для «%{languageCode}»?" success: "Переводы успешно обновлены" post_language_selector: + title: "Язык поста" none: "Нет" edit_warning: + message: "Это переведённый пост.

Вы хотите отредактировать оригинальный пост в %{language} или отредактировать этот конкретный перевод?" action_original: "Изменить исходную публикацию" action_translation: "Редактировать этот перевод" errors: @@ -4441,6 +4652,7 @@ ru: many: "Действительно объединить %{count} сообщений?" other: "Действительно объединить %{count} сообщения?" revisions: + diff_too_complex: "Различия слишком сложны для отображения. Пожалуйста, попробуйте просмотреть отдельные, более мелкие изменения." locale: no_locale_set: "Язык не установлен" locale_removed: "Язык удален" @@ -4516,6 +4728,7 @@ ru: instructions: "Поделиться ссылкой на сообщение:" original_language: "Исходный язык этой публикации — %{language}" original_language_and_outdated: "Исходный язык этой публикации — %{language}. Перевод может быть устаревшим." + ai_translation_disclaimer: "Переводы, сгенерированные искусственным интеллектом, могут быть неточными." category: none: "(разное)" all: "Все категории" @@ -4528,10 +4741,15 @@ ru: general: "Основная" settings: "Настройки" advanced: "Дополнительно" + show_advanced: "Расширенные настройки" topic_template: "Шаблон" + topic_title_placeholder: "Место для заголовка темы категории" + topic_title_placeholder_placeholder: "[необязательно] пользовательский заполнитель заголовка темы для этой категории" tags: "Теги" localizations: "Локализации" localization: + language: "Язык категории" + language_description: "Основной язык названия и описания данной категории." locale: "Локаль" name: "Название" description: "Описание" @@ -4552,22 +4770,51 @@ ru: delete: "Удалить" add: "Добавить необходимую группу тегов" placeholder: "Выберите группу тегов…" + min_count: "Количество тегов" + tag_group: "Группа тегов" topic_featured_link_allowed: "Разрешить избранные ссылки в этой категории" + delete: "Удаление категории" + create: "Создать категорию" + create_with_type: "Новая категория %{typeName}" create_long: "Создать новую категорию" + settings_apply_to_all_of_type_warning: "Изменения, указанные ниже, будут применяться ко всем категориям данного типа." + type_settings_schema: + category_settings: "Настройки категории" + category_custom_fields: "Настройки категории" + site_settings: "Настройки сайта" + choose_type: + title: "Выберите тип категории" + requires_plugin: "Требуется плагин" + create_category: "Создать категорию" + save: "Сохранить категорию" + unsaved_changes: "У вас есть несохраненные изменения" + parent: "Родительская категория" slug_placeholder: "(Необязат.) Слова для URL, разделённые дефисами" creation_error: При создании новой категории возникла ошибка. save_error: При сохранении категории возникла ошибка. + errors: + self_lockout: "Вы собираетесь изменить права доступа к категории таким образом, что это лишит вас доступа к ней. Вы уверены, что хотите продолжить?" validations: + emoji_required: "Выберите эмодзи." icon_required: "Выбрать значок." + name: "Название категории" + untitled: "Категория без названия" description: "Описание" + logo: "Изображение логотипа категории" + logo_dark: "Изображение логотипа категории в темном режиме" logo_description: "Рекомендуемое соотношение сторон 1:1 и минимальный размер 200 пикселей. Если оставить поле пустым, изображение отображаться не будет." + background_image: "Фоновое изображение категории" + background_image_dark: "Темное фоновое изображение категории" style: "Стиль" icon: "Значок" emoji: "Эмодзи" + select_emoji: "Выберите эмодзи" background_color: "Цвет" foreground_color: "Цвет текста" color_validations: cant_be_empty: "не может быть пустым" + incorrect_length: "формат должен соответствовать #RRGGBB или #RGB" + non_hexdecimal: "должны содержать только шестнадцатеричные символы (0-9, AF)." styles: type: "Стиль" icon: "Значок" @@ -4579,12 +4826,16 @@ ru: emoji: "Эмодзи" color_used: "Используемый цвет" predefined_colors: "Предустановленные варианты цветов" + name_placeholder: "Рекомендуется одно-два слова." color_placeholder: "Любой цвет из веб-палитры" delete_confirm: "Действительно удалить категорию?" delete_error: "При удалении категории произошла ошибка." list: "Вывод списка категорий" no_description: "Добавьте описание для этой категории." change_in_category_topic: "Изменить описание" + description_updated: "Описание обновлено" + description_expand: "Развернуть" + description_collapse: "Свернуть" already_used: "Цвет уже используется другой категорией" color_palette: "Цветовая палитра" security: "Безопасность" @@ -4595,8 +4846,15 @@ ru: reply: "Ответить" create: "Создать" no_groups_selected: "Доступ не предоставлен ни одной группе; эта категория будет видна только персоналу." + everyone_full_access: 'Эта категория является общедоступной, каждый может видеть, отвечать и создавать сообщения. Чтобы ограничить права доступа, удалите одно или несколько разрешений, предоставленных группе "%{everyone_group}".' + everyone_reply_access: 'Эта категория общедоступна, каждый может видеть темы и отвечать на них. Чтобы ограничить права доступа, удалите группу "%{everyone_group}.' + everyone_see_access: 'Эта категория общедоступна, все могут видеть публикации. Чтобы ограничить доступ, удалите группу "%{everyone_group}".' + specific_groups_have_access: "Эта категория является закрытой, только выбранные группы могут просматривать, отвечать на сообщения и создавать новые публикации." + all_parent_groups_used: "Все группы из родительской категории добавлены. Чтобы добавить больше групп, сначала добавьте их в родительскую категорию." toggle_reply: "Переключить разрешение «Ответ»" toggle_full: "Переключить разрешение «Создание»" + inherited: 'Это разрешение наследуется от "%{everyone_group}"' + special_warning: "Это предварительно созданная категория, и параметры безопасности нельзя изменить. Если вы не хотите использовать эту категорию, удалите её, а не используйте для других целей." uncategorized_security_warning: "Это особенная категория. В ней содержатся темы, для которых при создании не была указана категория; у нее не может быть настроек безопасности." uncategorized_general_warning: 'Это особенная категория. Она используется как категория по умолчанию для новых тем, не отнесенных к конкретной категории. Чтобы предотвратить такое поведение и обеспечить выбор категории, отключите соответствующую настройку. Изменить название или описание категории можно в разделе Оформление / Текст.' pending_permission_change_alert: "Вы не добавили %{group} в эту категорию; нажмите эту кнопку для добавления." @@ -4613,20 +4871,37 @@ ru: all_topics_wiki: "Создавать новые темы в виде вики-сообщений" allow_unlimited_owner_edits_on_first_post: "Разрешить автору первого сообщения вносить правки без ограничений" subcategory_list_style: "Стиль списка подкатегорий:" + sort_order: "Список тем, отсортированный по:" + default_view: "Список тем по умолчанию:" + default_list_filter: "Фильтр списка по умолчанию:" allow_badges_label: "Разрешить вручение наград в этой категории" + edit_permissions: "Изменить разрешения" reviewable_by_group: "Помимо сотрудников, содержимое этой категории также могут проверять:" review_group_name: "Название группы" require_topic_approval: "Требовать одобрения модератором всех новых тем" require_reply_approval: "Требовать одобрения модератором всех новых ответов" + posting_review_modes: + no_one: "Никто" + everyone: "Все" + posting_review_groups_placeholder: "Выберите группы…" this_year: "за год" position: "Позиция на странице категорий:" position_disabled: "Категории будут отображаться в порядке активности. Чтобы настроить их порядок в списках, включите настройку fixed category positions." minimum_required_tags: "Минимальное количество тегов, требуемых в теме:" + default_slow_mode: 'Включите «Медленный режим» для новых тем в этой категории.' + subcategory_of: "Подкатегория..." none_subcategory_text: "Нет" + subcategory_permissions_warning: "Подкатегория частной категории не может быть публичной." visibility: title: "Видимость" public: "Публичное" + all_members: "Все участники" group_restricted: "Закрытое сообщество" + who_can_see: "Кто может видеть эту группу" + who_can_post: "Кто может размещать сообщения в этой категории?" + which_groups_can_access: "Какие группы могут видеть сообщения в этой категории и публиковать их?" + more_options_hint: "Дополнительные права доступа доступны в расширенных настройках." + inherited_from_parent: "Права доступа наследуются от родительской категории. Для уточнения перейдите в раздел Расширенные настройки." num_auto_bump_daily: "Число открытых тем для автоматического ежедневного поднятия:" auto_bump_cooldown_days: "Минимум дней до повторного поднятия темы:" navigate_to_first_post_after_read: "Перейти к первому сообщению после прочтения тем" @@ -4648,11 +4923,14 @@ ru: title: "Без уведомлений" description: "Не уведомлять о новых темах в этой категории и не отображать их в разделе «Последние»." search_priority: + label: "Приоритет поиска" options: normal: "Обычный" ignore: "Игнорировать" + very_low: "Очень низкий" low: "Низкий" high: "Высокий" + very_high: "Очень высокий" sort_options: default: "по умолчанию" likes: "Количество лайков" @@ -4676,6 +4954,7 @@ ru: email: "Эл. почта" list_filters: all: "Все темы" + none: "Нет подкатегорий" colors_disabled: "Вы не можете выбирать цвета, поскольку не указан стиль категории (category style = none)." anonymous_flagging: title: "Сообщите о незаконном контенте" @@ -4967,10 +5246,15 @@ ru: preloader_text: "Загрузка…" lightbox: download: "Скачать" + open: "Оригинальное изображение" + image_info: "Информация об изображении" + quote: "Изображение цитаты" previous: "Назад (клавиша со стрелкой влево)" next: "Далее (клавиша со стрелкой вправо)" counter: "%curr% из %total%" close: "Закрыть (Esc)" + zoom: "Масштабирование (клавиша Z)" + error: "Изображение не может быть загружено." content_load_error: 'Контент не удалось загрузить.' image_load_error: 'Изображение не удалось загрузить.' cannot_render_video: 'Это видео невозможно отобразить: видеокодек не поддерживается браузером.' @@ -5006,10 +5290,12 @@ ru: back: "%{shortcut} Назад" up_down: "%{shortcut} Переместить выделение ↑ ↓" open: "%{shortcut} Открыть выделенную тему" + open_new_window: "%{shortcut} Открыть выбранную тему в новой вкладке/окне" next_prev: "%{shortcut} Следующий (предыдущий) раздел" go_to_unread_post: "%{shortcut} Перейти к первому непрочитанному сообщению" application: title: "Форум" + create: "%{shortcut} Создать новую тему или личное сообщение" notifications: "%{shortcut} Открыть уведомления" hamburger_menu: "%{shortcut} Открыть меню навигации" user_profile_menu: "%{shortcut} Открыть меню профиля" @@ -5171,6 +5457,7 @@ ru: category_restricted: "Этот тег используется в категориях, к которым у вас нет доступа." synonyms: "Синонимы" synonyms_description: "При использовании следующих тегов они будут заменены на %{base_tag_name}." + synonyms_inline: "Эти синонимы будут заменены на %{base_tag_name}:" save: "Сохранить имя и описание тега" tag_groups_info: one: 'Этот тег принадлежит к этим группам: %{tag_groups}.' @@ -5182,6 +5469,8 @@ ru: few: "Его можно использовать только в этих категориях:" many: "Его можно использовать только в этих категориях:" other: "Его можно использовать только в этих категориях:" + restricted_to: "Ограничено" + no_synonyms: "У этого тега нет синонимов." edit_synonyms: "Редактировать синонимы" add_synonyms_label: "Добавить синонимы:" add_synonyms: "Добавить" @@ -5207,7 +5496,30 @@ ru: other: "Его %{count} синонима также будут удалены." edit_tag: "Изменить имя и описание тега" edit: "Редактировать этот тег" - description: "Описание (максимум 1000 символов)" + description: "Описание" + settings: + title: "настроек" + edit_title: "Редактировать тег: %{name}" + edit_tag_prefix: "Редактировать тег:" + select_tag: "Выберите тег для редактирования." + general: "Основное" + localizations: "Локализации" + back: "Назад" + name: "Название" + slug: "Slug (текстовый идентификатор)" + name_placeholder: "Имя тега" + saved: "Настройки тегов сохранены" + no_synonyms: "Для этого тега не определены синонимы." + add_synonym_placeholder: "Поиск тегов для добавления в качестве синонимов..." + synonyms_subtitle: "При использовании следующих тегов они будут заменены на %{name}" + save: "Сохранить тег" + delete: "Удалить тег" + localization: + locale: "Локаль" + name: "Название" + description: "Описание" + add: "Добавить локализацию" + remove: "Удалить локализацию" sort_by: "Сортировка:" sort_by_count: "Количество" sort_by_name: "Название" @@ -5217,7 +5529,9 @@ ru: upload_description: "Загрузить csv-файл для массового создания тегов" upload_instructions: "По одному в строке, с необязательным указанием группы тега в формате «tag_name,tag_group»." upload_successful: "Теги загружены" + bulk_create_inline_placeholder: "Создать теги (разделенные запятыми)" bulk_create_button: "Создать" + bulk_create_some_failed: "Не удалось создать некоторые теги:" delete_unused_confirmation: one: "%{count} тег будет удалён: %{tags}" few: "%{count} тега будут удалены: %{tags}" @@ -5255,13 +5569,18 @@ ru: description: "Вы не будете получать уведомления о новых темах с этим тегом, и они не будут отображаться на вкладке «Непрочитанные»." groups: back_btn: "Назад ко всем тегам" + title: "Группы тегов" about_heading: "Выберите группу тегов или создайте новую" about_heading_empty: "Для начала создайте новую группу тегов" about_description: "Группы тегов повышают удобство управления большим количеством тегов." + new: "Новая группа" + new_title: "Создать новую группу" + edit_title: "Редактировать группу тегов" tags_label: "Теги в этой группе" parent_tag_label: "Родительский тег" parent_tag_description: "Теги из этой группы могут использоваться только при наличии родительского тега." one_per_topic_label: "Разрешить не более одного тега из этой группы в одной теме" + new_name: "Новая группа тегов" name_placeholder: "Название" save: "Сохранить" delete: "Удалить" @@ -5303,6 +5622,7 @@ ru: safe_mode: enabled: "Включён безопасный режим. Чтобы выйти из него, закройте это окно браузера." theme_preview_notice: "Сейчас вы просматриваете тему. Закройте эту вкладку или окно браузера, чтобы вернуться к обычной конфигурации сайта." + theme_preview_failed: "Не удалось просмотреть тему, поскольку она не существует или у вас нет прав доступа к ней." image_removed: "(изображение удалено)" pause_notifications: title: "Приостановить уведомления…" @@ -5376,6 +5696,7 @@ ru: tags_form_modal: title: "Измените навигацию по тегам" filter_placeholder: "Фильтрация тегов" + no_tags: "Теги, соответствующие тегу, отсутствуют." subtitle: text: "Мы автоматически покажем самые популярные теги сайта" edit_navigation_modal_form: @@ -5464,6 +5785,9 @@ ru: click_to_get_started: "Нажмите здесь, чтобы начать." header_link_text: "Категории" header_action_title: "Редактировать категории боковой панели" + header_action_new: "Новая категория" + header_action_edit_sidebar: "Редактировать категории боковой панели" + header_action_edit_header_dropdown: "Редактировать категории навигации" configure_defaults: "Настроить значения по умолчанию" community: edit_section: @@ -5539,6 +5863,8 @@ ru: light: "Светлая" dark: "Темная" auto: "Авто" + title: "Цветовой режим" + aria_label: "Цветовой режим, в данный момент %{mode}" welcome_topic_banner: title: "Создать приветственную тему" description: "Ваша приветственная тема — это первое, что прочитают новички. Постарайтесь максимально коротко и ярко выразить в ней наиболее важную информацию, которую вы хотите донести до новых пользователей форума." @@ -5726,10 +6052,14 @@ ru: toggle_localized: translated: "Страница переведена автоматически. Нажмите, чтобы увидеть оригинал." not_translated: "Страница не переведена. Нажмите, чтобы перевести." + translations_enabled: "Переводы включены" + translations_disabled: "Переводы отключены" + language_switcher: + title: "Изменить язык сайта" admin_js: type_to_filter: "Фильтрация настроек…" settings: "Настройки" - reset_filter: "Сбросить" + reset_filter: "Сбросить фильтры" admin: title: "Администратор Discourse" moderator: "Модератор" @@ -5742,9 +6072,13 @@ ru: never: "Никогда" reports: title: "Список доступных отчётов" - meta_doc: "Отчеты — это мощный инструмент, помогающий понять, что происходит на вашем сайте. Они помогут вам выявить тенденции, обнаружить проблемы и принять решения на основе данных." sidebar_title: "Отчеты" back: "Назад ко всем отчетам" + group_traffic: "Трафик" + group_members: "Участники" + group_moderation_and_security: "Модерация и безопасность" + group_other: "Разное" + legacy_warning: "Это устаревший отчет. Он скоро будет удален. Если вам нужна помощь в поиске замены, обратитесь в службу поддержки." config_sections: account: title: "Аккаунт" @@ -5769,27 +6103,61 @@ ru: enabled: "Включено" enabled_for: "Включено для..." show_image: "Показать изображение" + groups_updated: "Группы обновлены!" + save_groups: "Сохранить группы" + add_groups_to_enable: "Добавьте группы, чтобы включить эту функцию." + no_changes_to_save: "Изменений для сохранения нет." select_groups: "Выберите группы…" + show_related_settings: "Показать соответствующие настройки..." + opt_in_groups_instructions: "Группы с возможностью добровольного участия позволяют определенной группе пользователей протестировать изменение до его общего выпуска. Обратите внимание, что эти группы станут неактуальными после того, как изменение перейдет в стабильный статус." + enabled_for_throttle: "Вы слишком быстро изменили настройки, для которых это изменение включено. Подождите несколько секунд, прежде чем повторить попытку." + change_enabled_for_success: "Вы включили это изменение для %{enabledFor}" + change_disabled: "Вы отказались от этого изменения." + permanent_notice: "Это изменение теперь является постоянным и вскоре будет отменено. Отказаться от участия больше нельзя." + permanent_soon_notice: "Это изменение скоро станет постоянным. Вы больше не сможете отказаться от участия." + permanent_no_group_selection: "Неприменимо, постоянные изменения касаются всех групп." + no_changes: "В настоящее время никаких изменений в ближайшее время не планируется." preview: "Предпросмотр" enabled_for_options: + no_one: "Никто" everyone: "Все" - staff: "Только для персонала" + staff: "%{staffGroupName} только" + specific_groups: "Конкретная группа (группы)" statuses: experimental: "Экспериментальная функция" + stable: "Стабильный" + permanent: "Постоянный" + status_descriptions: + experimental: "Это находится на ранней стадии разработки и может существенно измениться или быть прекращено. Может быть не полностью совместимо с другими функциями." + alpha: "Проект активно разрабатывается и совершенствуется. Функциональность может измениться, и он может быть не доведен до совершенства, но он достаточно стабилен, чтобы его попробовать." + beta: "Работа над проектом близится к завершению, и он доступен для предварительного внедрения. Возможны незначительные изменения." + stable: "Это полноценная и хорошо поддерживаемая система. Вскоре она будет доступна на всех сайтах Discourse." impact_roles: admins: "Администраторы" moderators: "Модераторы" staff: "Персонал" + all_members: "Все участники" + developers: "Разработчики" filter: + search_placeholder: "Фильтрация по названию, описанию или плагину..." + no_results: "Нет предстоящих изменений, соответствующих вашему фильтру." all: "Все настройки" + enabled_all: "Все включенные состояния" enabled: "Включено" + enabled_for_staff: "Включено для %{staffGroupName}" + enabled_for_specific_groups: "Включено для определенных групп" disabled: "Отключен" impact_type_feature: "Функция" impact_type_other: "Разное" + status_conceptual: "Концептуальный" status_experimental: "Экспериментальная функция" + status_permanent: "Постоянный" + impact_role_all: "Все значимые роли" impact_role_admins: "Администраторы" impact_role_moderators: "Модераторы" impact_role_staff: "Персонал" + impact_role_all_members: "Все участники" + impact_role_developers: "Разработчики" config: about: title: "О вашем сайте" @@ -5820,6 +6188,9 @@ ru: title: "Локализация" header_description: "Настройте язык интерфейса вашего сообщества и другие параметры локализации для участников." keywords: "локаль|язык|часовой пояс|юникод|ltr" + upcoming_changes: + title: "Предстоящие изменения" + header_description: "Список предстоящих изменений в Discourse, которые могут повлиять на ваш сайт, а также экспериментальных функций, к которым вы можете подключиться по желанию. Вы можете фильтровать по степени влияния, типу и статусу.\n\nГруппы для участия могут использоваться для того, чтобы определенная группа пользователей могла протестировать изменение до его общего выпуска, хотя эти группы станут неактуальными после того, как изменение получит статус «Постоянное»." login: title: "Вход и аутентификация" header_description: "Настройте способ входа и аутентификации пользователей, идентификаторы ключей доступа и секретные ключи доступа, поставщиков OAuth2 и многое другое" @@ -5830,7 +6201,12 @@ ru: title: "Discourse ID" discourse_id: title: "Discourse ID" + stats: + total_users: "Всего пользователей" + regenerate_confirm: "Вы уверены, что хотите перегенерировать свои учетные данные Discourse ID? Это создаст новый секретный ключ клиента. Перегенерация учетных данных обычно не требуется, но может быть полезна для повышения безопасности." + description: "Discourse ID — это сервис единого входа, позволяющий пользователям входить на несколько сайтов Discourse, используя одну учетную запись. Поддерживаются распространенные социальные сети для авторизации, такие как Google, Facebook, Apple и Github, без дополнительной настройки." learn_more: "Подробнее" + regenerate_success: "Учетные данные успешно сгенерированы." logo: title: "Логотип" header_description: "Настройте логотипы и значки, используемые на вашем сайте." @@ -5846,7 +6222,7 @@ ru: help_text: "Рекомендуемый размер — 600 x 80 пикселей." large_icon: title: "Квадратный значок" - description: "Квадратная версия изображения логотипа отображается в верхней части панели управления и также является логотипом приложения на главном экране мобильного устройства." + description: "Квадратная версия логотипа размещена в верхней части сайта и также является логотипом мобильного приложения." help_text: "Рекомендуемый размер — 512 x 512 пикселей." square_icon_dark: required: "Использовать другой квадратный значок для темного режима?" @@ -5882,6 +6258,7 @@ ru: title: "Скриншоты манифеста" description: "Скриншоты, демонстрирующие особенности и функциональные возможности приложения, отображаемые на странице с запросом на установку. Все изображения должны быть загружены локально и иметь одинаковые размеры." apple_touch_icon: + description: "Значок, используемый для сенсорных устройств Apple. Если оставить поле пустым, будет использоваться значок large_icon." help_text: "Рекомендуемый размер — 180 x 180 пикселей. Прозрачный фон не рекомендуется." digest_logo: title: "Логотип дайджеста" @@ -5918,31 +6295,59 @@ ru: modal_yes: "Да" modal_no: "Нет, применить изменение только к будущим пользователям" welcome_banner: + title: "Приветственный баннер" + header_description: "Настройте баннер с поисковой строкой, отображаемый посетителям вашего сайта." + saved: "Настройки приветственного баннера успешно сохранены." form: + enabled_themes: + label: "Включено в темах..." + description: "Выберите, какие темы должны отображать баннер. Отображаются только активные темы." + select_label: "Выберите темы" + background_image: + label: "Фоновое изображение" + description: "Это изображение будет отображаться за баннерным текстом." text_color: label: "Цвет текста" + description: "Если поле «Фоновое изображение» загружено, используйте этот параметр для изменения цвета текста баннера, чтобы он оставался читаемым. Если поле оставить пустым или не загрузить фоновое изображение, цвет будет определяться активной темой." page_visibility: + label: "Видимость страницы" + description: "Выберите место, где должен отображаться баннер." options: top_menu_pages: "Страницы верхнего меню" + homepage: "Только главная страница" + discovery: "Страницы поиска" all_pages: "Все страницы" location: label: "Расположение" + description: "Выберите место на странице, где должен отображаться баннер." options: above_topic_content: "Над контентом темы" below_site_header: "Под заголовком сайта" text_section: + title: "Настраиваемый текст" locale_label: "Язык" header_new_members: + label: "Заголовок для новых участников" + description: "Доступные переменные: %{site_name}, %{preferred_display_name}" placeholder: "Добро пожаловать в %{preferred_display_name}!" header_logged_in: label: "Заголовок для авторизованных пользователей" + description: "Доступные переменные: %{site_name}, %{preferred_display_name}" placeholder: "С возвращением, %{preferred_display_name}!" header_anonymous: label: "Заголовок для анонимных посетителей" + description: "Доступные переменные: %{site_name}" placeholder: "Добро пожаловать на сайт %{site_name}!" subheader_logged_in: label: "Подзаголовок для авторизованных пользователей" description: "Вторичный текст, показанный ниже заголовка для вошедших пользователей." + placeholder: "Узнай, что нового в сообществе" + subheader_anonymous: + label: "Подзаголовок для анонимных посетителей" + description: "Для анонимных посетителей под заголовком отображается дополнительный текст." + placeholder: "Присоединяйтесь к нашему сообществу, чтобы участвовать в обсуждениях." + search_placeholder: + placeholder: "Поиск по темам..." navigation: title: "Навигация" header_description: "Настрой навигационные ссылки и пункты меню для своего сайта. Сюда входит расположение и поведение основного навигационного меню, быстрых ссылок в верхней части главной страницы, а также боковой панели администратора" @@ -6004,7 +6409,7 @@ ru: header_description: "Отчеты — это мощный инструмент, помогающий понять, что происходит на вашем сайте. Они помогут вам выявить тенденции, обнаружить проблемы и принять решения на основе данных." sub_pages: settings: - title: "Настройки панели управления" + title: "настроек" badges: title: "Награды" header_description: "Награды выдаются пользователям за их действия, вклад и достижения, чтобы признавать, подтверждать и поощрять хорошее поведение и участие в жизни сообщества" @@ -6133,6 +6538,9 @@ ru: embedding: title: "Встраивание" header_description: "Discourse имеет возможность встраивать комментарии из темы на удаленный сайт с помощью API Javascript, который создает IFRAME" + form_templates: + title: "Шаблоны форм" + header_description: "Шаблоны форм позволяют создавать структурированные формы с проверкой данных в рамках процесса создания темы." theme_site_settings: setting: "Настройка" overridden_by: "Переопределено:" @@ -6141,6 +6549,9 @@ ru: select_setting: "Выберите настройку сайта, чтобы увидеть текущие значения темы" add: "Перейти к настройкам сайта для темы" help: "Текущая тема: %{currentTheme}. Перейдите на страницу настроек темы , чтобы изменить настройки сайта для темы, или нажмите на связанную тему в таблице ниже, чтобы изменить ее настройки." + filter: "Фильтрация настроек темы сайта по названию, описанию или названию темы..." + filter_no_results: "Нет настроек темы сайта, соответствующих вашему фильтру" + site_setting_warning: 'Этот параметр управляется стандартной темой вашего сайта (%{defaultThemeName}). Вы можете изменить его на странице редактирования темы .' search: modal_title: "Искать всё в панели администратора" title: "Поиск" @@ -6152,32 +6563,6 @@ ru: few: '%{count} результата по запросу «%{filter}»' many: '%{count} результатов по запросу «%{filter}»' other: '%{count} результата по запросу «%{filter}»' - result_types: - page: - one: "страница" - few: "страницы" - many: "страниц" - other: "страницы" - report: - one: "отчет" - few: "отчета" - many: "отчетов" - other: "отчета" - setting: - one: "настройка" - few: "настройки" - many: "настроек" - other: "настройки" - theme: - one: "тема" - few: "темы" - many: "тем" - other: "темы" - component: - one: "компонент" - few: "компонента" - many: "компонентов" - other: "компонента" new_features: title: "Что нового?" check_for_updates: "Проверить обновления" @@ -6200,24 +6585,9 @@ ru: new_features: title: "Что нового?" subtitle: "Мы регулярно выпускаем обновления с новыми функциями и улучшениями. На этой странице перечислены ключевые моменты, а полный список доступен по ссылке «Подробнее»." + no_new_features_found: "В ленте нет элементов, или выбранный вами фильтр не дал результатов. Предыдущие анонсы новых функций можно посмотреть в сообществе Discourse Meta ." + no_new_features_error: "Произошла ошибка при загрузке ленты. Предыдущие объявления о новых функциях можно посмотреть в сообществе Discourse Meta ." learn_more: "Подробнее…" - experimental: "Экспериментальная функция" - only_experiments: "Показывать только экспериментальные функции" - experiment_enabled: "Вы включили экспериментальную функцию." - experiment_disabled: "Вы отключили экспериментальную функцию." - feature_enabled: "Вы включили эту функцию." - feature_disabled: "Вы отключили эту функцию." - toggled_too_fast: "Вы слишком быстро переключили экспериментальную функцию. Подождите несколько секунд, прежде чем повторить попытку." - experiment_tooltip: - title_disabled: "Попробуйте нашу экспериментальную функцию" - title_enabled: "Отключение экспериментальной функции" - content_disabled: "Оцените нашу новую функцию на стадии разработки! Пока она экспериментальная, поэтому мы можем удалить ее в любой момент. Вы можете отключить функцию, когда захотите.

Изменение этого параметра включит функцию для всех пользователей." - content_enabled: "Изменение этого параметра отключит функцию для всех пользователей." - feature_tooltip: - title_disabled: "Попробуйте эту функцию" - title_enabled: "Отключить функцию" - content_disabled: "Попробуйте эту новую функцию! Вы можете отказаться от неё в любой момент.

Изменение этого параметра включит функцию для всех пользователей." - content_enabled: "Изменение этого параметра отключит функцию для всех пользователей." last_checked: "Последняя проверка" refresh_problems: "Обновить" no_problems: "Проблем не обнаружено." @@ -6288,10 +6658,11 @@ ru: all: "Все" view_table: "Таблица" view_graph: "График" - refresh_report: "Обновить отчёт" + refresh_report: "Обновить" daily: За день monthly: За месяц weekly: За неделю + chart_group_period: "Выберите период" dates: "Даты (UTC)" groups: "Все группы" disabled: "Этот отчёт отключён" @@ -6302,7 +6673,9 @@ ru: trending_search: more: 'Журналы поиска' disabled: 'Отчёт о поисковых запросах отключён. Включить журнал поисковых запросов для сбора данных.' + average_chart_label: Показаны средние значения, а не итоговые суммы. sort_button: "Сортировка: %{column}" + sort_button_current: "Отсортировано по %{column}, %{direction}" sort_ascending: "по возрастанию" sort_descending: "по убыванию" filters: @@ -6414,6 +6787,7 @@ ru: cancel: "Отменить" continue: "Продолжить" copy_key: "Копировать" + key_copied_to_clipboard: "Ключ API скопирован в буфер обмена" back: "Назад к ключам API" revoke: "Отозвать" undo_revoke: "Отменить отзыв" @@ -6481,6 +6855,7 @@ ru: recover: Восстановление темы. read_lists: Чтение тем в разделах «Последние», «Новые», «Обсуждаемые» и т. д. RSS также поддерживается. status: "Обновление статуса темы. Статус: закрыта, архив, отображается, закреплена. Включено: истина, ложь. Чтобы разрешить изменение статуса только для тем в этой категории, укажите «category_id» здесь и в полезной нагрузке запроса." + change_owner: Изменить владельца сообщений в теме. posts: edit: Редактирование сообщения. delete: Удаление сообщения. @@ -6617,6 +6992,7 @@ ru: user_destroyed: "Пользователь удален" user_suspended: "Пользователь заблокирован" user_unsuspended: "Пользователь раблокирован" + user_anonymized: "Пользователь анонимизирован" reviewable_event: group_name: "Проверяемые события" reviewable_created: "Проверяемый элемент готов" @@ -6795,6 +7171,7 @@ ru: description: "Дополнительные группы, которые нужно показывать на странице «О нас»." groups: "Группы" order: "Порядок сортировки" + initial_members: "Расширенный состав участников" initial_members_description: "Количество участников группы, которое будет отображаться перед добавлением кнопки «Показать больше»." show_description: "Включить описание" optional: "(необязательно)" @@ -6828,6 +7205,8 @@ ru: post: "публикации" chat_message: "сообщения чата" enabled: "Включить пользовательскую метку после сохранения" + create_warning: "После использования пользовательского флага его можно только отключить или отредактировать, но не удалить." + edit_warning: "Изменение названия и описания флага может привести к потенциальным несоответствиям данных. После использования пользовательского флага его можно только отключить или отредактировать, но не удалить." edit_flag: "Изменение метки" non_editable: "Изменить метку нельзя: она системная или уже использовалась в системе проверки. Однако метку можно отключить." delete_flag: "Удаление метки" @@ -6852,8 +7231,10 @@ ru: install: "Установить" theme_site_settings: title: "Настройки сайта для темы" + description: "Настройки, позволяющие темам более эффективно управлять работой сайта в целом, переопределяя небольшой набор основных настроек сайта." themes: title: "Темы" + description: "Темы оформления, изменяющие общий внешний вид вашего сайта для всех пользователей." themes_intro: "Установите новую тему, чтобы начать, или создай свою с нуля, используя эти ресурсы." new_theme: "Новая тема" back: "Назад к темам" @@ -6916,6 +7297,8 @@ ru: title: "Варианты цвета" toggle: "Выбирается пользователем" toggle_description: "Пользователи могут выбирать цветовую палитру" + toggle_default_light_on_theme: "Цветовая палитра — это стандартная светлая палитра в стандартной теме (%{themeName})" + toggle_default_dark_on_theme: "Цветовая палитра — это стандартная темная палитра в теме по умолчанию (%{themeName})" colors: title: "Цвета" save_changes: "Сохранить изменения" @@ -7006,6 +7389,7 @@ ru: confirm: "Действительно удалить резервную копию?" restore: is_disabled: "Восстановление в данный момент отключено. Чтобы включить его, зайдите в настройки сайта." + is_disabled_title: "Функция восстановления в данный момент отключена. Чтобы включить её, найдите пункт «Разрешить восстановление» в настройках сайта." label: "Восстановить" title: "Восстановить резервную копию" confirm: "Действительно восстановить эту резервную копию?" @@ -7048,20 +7432,27 @@ ru: delete: "Удалить" delete_confirm: 'Действительно удалить тему «%{theme_name}»?' bulk_delete: "Точно?" + bulk_themes_delete_confirm: "В результате будут удалены следующие темы оформления, и они больше не будут доступны пользователям вашего сайта:" + bulk_components_delete_confirm: "В результате будут удалены следующие компоненты, и они больше не будут доступны пользователям вашего сайта:" color: "Цвет" opacity: "Прозрачность" copy: "Дублировать" copy_to_clipboard: "Скопировать в буфер" copied_to_clipboard: "Скопировано в буфер" copy_to_clipboard_error: "Ошибка при копировании данных в буфер обмена" + theme_owner: "Владелец:" email_templates: title: "Эл. почта" subject: "Тема" multiple_subjects: "Этот шаблон электронной почты имеет несколько тем." + multiple_bodies: "Этот шаблон электронного письма содержит несколько частей текста." body: "Текст сообщения" revert: "Отменить изменения" revert_confirm: "Действительно отменить внесённые изменения?" + search_templates: "Фильтрация по названию шаблона..." + no_templates_found: "Ни один шаблон не соответствует вашим фильтрам." edit: "Изменить" + back: "Вернуться к шаблонам" component: all_filter: "Все" used_filter: "Используется" @@ -7096,6 +7487,8 @@ ru: create_name: "Название" save: "Сохранить" long_title: "Стилизация сайта: цвета, CSS и HTML" + dark_mode: "%{themeName} темный режим" + light_mode: "%{themeName} светлый режим" edit: "Изменить" edit_confirm: "Это импортированная тема. Изменения CSS/HTML будут утеряны после очередного обновления." update_confirm: "Эти локальные изменения будут утеряны после обновления. Действительно продолжить?" @@ -7122,6 +7515,7 @@ ru: dark_color_scheme: "Палитра цветов в темном режиме" default_light_scheme: "Светлая (по умолчанию)" color_scheme_select: "Выберите цвета темы." + only_theme_color_schemes: "Данная тема ограничивает выбор цветовых палитр." dark_color_scheme_select: "Выберите цвета, которые будут использоваться темой в темном режиме." edit_colors: "Редактировать цвета" custom_sections: "Настройка разделов:" @@ -7186,7 +7580,7 @@ ru: import_web_tip: "Репозиторий темы" direct_install_tip: "Действительно установить %{name} из указанного ниже репозитория?" import_web_advanced: "Дополнительно…" - import_file_tip: "Файл с расширением .tar.gz, .zip, или .dcstyle.json, содержащий тему" + import_file_tip: ".tar.gz или .zip файл, содержащий тему" is_private: "Тема находится в приватном git-репозитории" finish_install: "Завершить установку темы" last_attempt: "Процесс установки не завершен, последняя попытка:" @@ -7223,6 +7617,16 @@ ru: update_success: "Обновление темы «%{theme}» завершено" up_to_date: "Установлена актуальная версия темы, последняя проверка:" has_overwritten_history: "Текущая версия темы больше не существует, поскольку история Git-репозитория была принудительно перезаписана." + change_source: + button: "Изменить источник" + title: "Изменить источник темы" + repository_url: "URL репозитория" + branch: "Ветка (необязательно)" + updating: "Обновление исходного кода темы…" + update: "Обновить источник" + has_existing_key: "В этой теме уже настроен SSH-ключ." + generate_new_key: "Сгенерировать новый SSH-ключ" + keep_existing_key: "Сохраните существующий SSH-ключ." add: "Добавить" theme_settings: "Пользовательские настройки темы" theme_site_settings: "Настройки, которые может переопределить тема" @@ -7327,6 +7731,8 @@ ru: select_base: title: "Выберите базовую цветовую палитру" description: "Базовая палитра:" + non_default_theme_warning: "Ваши личные настройки для темы отличаются от стандартных. Внесенные здесь изменения могут не относиться к вам, но будут применяться ко всем, кто использует значение по умолчанию (%{themeName})." + custom_schemes_warning: "Ваши личные настройки для %{colorModes} цветовой палитры отличаются от настроек по умолчанию. Изменения в %{colorModes} палитре могут не применяться к вам, но будут применяться ко всем, кто использует настройки по умолчанию." light: "светлая" dark: "темная" title: "Цвета" @@ -7334,6 +7740,7 @@ ru: view: "Вид" set_default_light: "Установить как светлую палитру в теме по умолчанию (%{theme})" set_default_dark: "Установить как темную палитру в теме по умолчанию (%{theme})" + set_default_success: "%{schemeName} установить в качестве палитры по умолчанию для %{themeName}" saved_refreshing: "Сохранено! Обновление цветов..." from_theme: "Из темы: %{name}" filters: @@ -7666,6 +8073,10 @@ ru: delete_associated_accounts: "удалить связанные аккаунты" change_theme_site_setting: "изменить настройки сайта для темы" stop_impersonating: "перестань выдавать себя за кого-то другого" + upcoming_change_toggled: "предстоящие изменения включены" + upcoming_change_available: "предстоящие изменения доступны" + change_site_setting_groups: "изменить группы настроек сайта" + configure_category_type: "настроить тип категории" screened_emails: title: "Проверяемые адреса эл. почты" description: "Когда кто-то создает новый аккаунт, указанный пользователем почтовый адрес проверяется на соответствие с указанным ниже списком, и в случае совпадения регистрация блокируется или производятся другие дополнительные действия." @@ -7722,6 +8133,7 @@ ru: clear_all: Сбросить все clear_all_confirm: "Действительно удалить все контролируемые слова, используемые на вкладке «%{action}»?" invalid_regex: 'Контролируемое слово «%{word}» не является допустимым регулярным выражением.' + invalid_regex_multiple: "Недопустимые регулярные выражения:" regex_warning: 'Контролируемые слова представляют собой регулярные выражения, не определяющие границы слов. Чтобы регулярное выражение соответствовало целым словам, добавьте \b в начало и конец регулярного выражения.' actions: block: "Блокировка" @@ -7754,6 +8166,7 @@ ru: success: "Слово добавлено" exists: "Уже существует" upload: "Добавить из файла" + upload_successful: "Загрузка прошла успешно. Текст будет обработан в ближайшее время." case_sensitivity_label: "С учётом регистра" case_sensitivity_description: "Только слова с соответствующим регистром символов" html_label: "HTML" @@ -7804,6 +8217,7 @@ ru: upload: "Загрузка файла" multiselect: "Множественный выбор" tagchooser: "Выбор группы тегов" + composer: "Ответ в формате Markdown" validations_modal: button_title: "Проверки" modal_title: "Параметры проверки" @@ -7845,7 +8259,10 @@ ru: second: "Вариант 2" third: "Вариант 3" edit_category: + toggle_freeform: "Шаблон формы отключен" + toggle_form_template: "Шаблон формы включен" select_template: "Выберите шаблоны форм" + select_template_help: "Добавить/редактировать шаблоны форм" errors: multiple_tags_not_allowed: 'Вы не можете выбрать больше тегов из «%{tag_name}». Чтобы избежать проблем, используйте шаблон формы.' impersonate: @@ -7970,6 +8387,21 @@ ru: penalty_post_actions: "Что сделать со связанным сообщением?" penalty_post_delete: "Удалить сообщение" penalty_post_delete_replies: "Удалить сообщение + все ответы" + penalty_post_delete_all: "Удалить все темы, созданные пользователем, а также все ответы на них." + penalty_post_delete_all_confirmation_MF: | + Это удалит + { TOPICS, plural, + one {# тема} + few {# темы} + many {# темы} + other {# темы} + } и + { REPLIES, plural, + one {# ответ} + few {# ответы} + many {# ответы} + other {# ответы} + }. Это нельзя отменить! Вы уверены, что хотите это сделать? penalty_post_edit: "Редактировать сообщение" penalty_post_none: "Ничего не делать" penalty_count: "Количество нарушений" @@ -8037,6 +8469,11 @@ ru: approve_bulk_success: "Готово! Все выбранные пользователи были одобрены и уведомлены." time_read: "Время чтения" post_edits_count: "Правки сообщений" + upcoming_changes: + title: "Предстоящие изменения для пользователей" + description: "Чтобы изменить группы или включить/отключить предстоящие изменения, посетите страницу настроек предстоящих изменений ." + filter_placeholder: "Фильтрация предстоящих изменений по названию или описанию." + filter_no_results: "Предстоящих изменений не обнаружено." exports: title: Экспорт пользователей download: @@ -8074,6 +8511,7 @@ ru: text: "удалить все сообщения от пользователя @%{username}" delete: "Удалить все сообщения от пользователя @%{username}" cancel: "Отменить" + all_enqueued: "Все публикации пользователя @%{username}поставлены в очередь на удаление." merge: button: "Объединить пользователей" prompt: @@ -8101,6 +8539,7 @@ ru: merging_user: "Объединение пользователей…" merge_failed: "В процессе объединения пользователей произошла ошибка." delete_forbidden_because_admin: "Администраторы не могут быть удалены." + delete_posts_forbidden_because_admin: "Невозможно удалить все сообщения администраторов." delete_forbidden: one: "Пользователи не могут быть удалены, если у них есть сообщения. Перед удалением пользователя удалите все его сообщения. (Сообщения старше %{count} дня не могут быть удалены.)" few: "Пользователи не могут быть удалены, если у них есть сообщения. Перед удалением пользователя удалите все его сообщения. (Сообщения старше %{count} дней не могут быть удалены.)" @@ -8268,6 +8707,7 @@ ru: field_types: text: "Текст" textarea: "Текстовая область" + date: "Дата" confirm: "Подтверждение" dropdown: "Выпадающий список" multiselect: "Множественный выбор" @@ -8288,6 +8728,9 @@ ru: more_than_50_results: "Найдено более 50 результатов. Уточните параметры поиска." no_results: "Подходящие тексты на сайте не найдены" interpolation_keys: "Доступные ключи интерполяции:" + interpolation_key_insert: "Нажмите, чтобы вставить" + interpolation_key_used: "Уже используется" + interpolation_key_invalid: "Неизвестный ключ — интерполяция невозможна" outdated: title: "Этот перевод устарел" description: "С момента создания этого переопределения перевод по умолчанию для ключа изменился. Проверьте перевод ниже на соответствие изменениям, которые были внесены в исходный текст." @@ -8343,6 +8786,9 @@ ru: label: "Загрузить" title: "Загрузка изображений" download_file: "Скачать слова" + upload_restrictions: + extensions: "Принято: %{extensions}" + max_size: "Максимум: %{size}" selectable_avatars: title: "Список доступных для выбора аватаров" table_column_heading: @@ -8381,6 +8827,7 @@ ru: experimental: "Экспериментально" secret_list: invalid_input: "Поля ввода не могут быть пустыми или содержать символ вертикальной черты." + already_exists: "Запись для %{key} уже существует." default_categories: modal_description: one: "Применить это изменение к уже существующим пользователям? Это изменит настройки для %{count} существующего пользователя." @@ -8407,13 +8854,20 @@ ru: prompt: "Изменение этой настройки может иметь далеко идущие или непредвиденные последствия для сайта. Действительно продолжить?" confirm: "Да, продолжить" min_password_length: + prompt: "Вы собираетесь изменить политику паролей. Это повлияет на всех пользователей, которые будут менять свои пароли с этого момента. Вы уверены, что хотите продолжить?" confirm: "Да, изменить политику паролей" min_admin_password_length: + prompt: "Вы собираетесь изменить политику паролей. Это повлияет на всех администраторов, меняющих свои пароли с этого момента. Вы уверены, что хотите продолжить?" confirm: "Да, изменить политику паролей" - password_unique_charactes: + password_unique_characters: + prompt: "Вы собираетесь изменить политику паролей. Это повлияет на всех пользователей, которые будут менять свои пароли с этого момента. Вы уверены, что хотите продолжить?" confirm: "Да, изменить политику паролей" block_common_passwords: + prompt: "Вы собираетесь изменить политику паролей. Это повлияет на всех пользователей, которые будут менять свои пароли с этого момента. Вы уверены, что хотите продолжить?" confirm: "Да, изменить политику паролей" + clean_up_inactive_users_after_days: + prompt: "Установка этого значения, отличного от 0, приведет к безвозвратному удалению пользователей, которые не были активны в течение указанного количества дней. Вы уверены, что хотите продолжить?" + confirm: "Да, я понимаю, что неактивные пользователи будут безвозвратно удалены, если я не установлю это значение равным 0." job_status: completed: "Обновление завершено" enqueued: "Выполняется обновление" @@ -8450,6 +8904,8 @@ ru: no_user_badges: "У %{name} нет ни одной награды." no_badges: Нет наград, которые можно было бы выдать. none_selected: "Выберите награду в списке слева" + filter_placeholder: "Фильтры для значков..." + no_badges_found: "Значки не найдены" sections: design: Дизайн query: Запрос @@ -8560,6 +9016,7 @@ ru: category: "Опубликовать в категории" tags: "Теги темы" post_author: "Автор публикации" + post_author_description: "Автор для всех встроенных тем с этого хоста, переопределяющий метатеги страницы блога. Оставьте поле пустым, чтобы прочитать имя автора из тегов или страницы." post_author_with_default: "Автор публикации (по умолчанию %{author})" add_host: "Добавить хост" posts_and_topics: "Конфигурация публикаций и тем" @@ -8578,6 +9035,7 @@ ru: crawler_settings_saved: "Настройки поискового робота сохранены" back: "Назад к встраиванию" configuration_snippet: "Фрагмент конфигурации" + full_app_mode_description: "Загрузите полное приложение Discourse во встраиваемый iframe, что позволит пользователям отвечать, ставить лайки, цитировать и взаимодействовать с темами напрямую." host_form: add_header: "Добавить хост" edit_header: "Редактировать хост" diff --git a/config/locales/client.sk.yml b/config/locales/client.sk.yml index d8f6d115b0d5a..c1478f0fba37c 100644 --- a/config/locales/client.sk.yml +++ b/config/locales/client.sk.yml @@ -6,6 +6,12 @@ sk: js: + blocks: + ghost: + status: "Stav" + in_location: "v" + hidden: "skryté" + failed: "nepodarilo sa" number: format: separator: "," @@ -365,6 +371,8 @@ sk: pill: "Odporúčané" pm_title: "Odporúčané správy" admin_onboarding_banner: + start_posting: + back: "Späť" spread_the_word: action: "Kopírovať odkaz" copied_to_clipboard: "Odkaz bol skopírovaný do schránky!" @@ -477,8 +485,6 @@ sk: other: "Vytvorené pred %{count} rokmi" bookmarked: title: "Záložka" - edit_bookmark: "Upraviť záložku" - clear_bookmarks: "Odstrániť záložku" help: bookmark: "Kliknutím uložíte túto tému medzi záložky" edit_bookmark: "Kliknutím upravíte záložku príspevku v tejto téme" @@ -497,12 +503,12 @@ sk: clear_reminder: "Vymazať pripomienku" edit: "Upraviť záložku" not_bookmarked: "Vytvor záložku na tento príspevok" + topic_bookmark: "Téma" remove_reminder_keep_bookmark: "Odstráňte pripomenutie a ponechajte záložku" created_with_reminder: "Tento príspevok ste si uložili ako záložku s pripomenutím %{date}. %{name}" created_with_reminder_generic: "Tento príspevok ste si uložili ako záložku s pripomenutím %{date}. %{name}" delete: "Odstrániť záložku" confirm_delete: "Naozaj chcete odstrániť túto záložku? Pripomienka bude tiež vymazaná." - confirm_clear: "Ste si istý, že chcete odstrániť všetky záložky z tejto témy?" save: "Uložiť" no_timezone: 'Zatiaľ ste nenastavili časové pásmo. Nebudete môcť nastaviť pripomenutia. Nastavte si ju na vo svojom profile.' invalid_custom_datetime: "Zadaný dátum a čas je neplatný, skúste to prosím znova." @@ -648,21 +654,13 @@ sk: in_reply_to: "v odpovedi na" filtered_flagged_by: "Označené používateľom" unknown: - title: - one: "Máte nespracované kontroly zo zakázaného doplnku:" - few: "Máte nespracované kontroly zo zakázaných doplnkov:" - many: "Máte nespracované kontroly zo zakázaných doplnkov:" - other: "Máte nespracované kontroly zo zakázaných doplnkov:" instruction: "Nie je možné ich správne zobraziť, kým nepovolíte príslušný zásuvný modul. Povoľte zásuvný modul a obnovte stránku. Prípadne ich môžete ignorovať. Ďalšie informácie..." reviewable_unknown_source: "%{reviewableType} (neznámy doplnok)" reviewable_known_source: "%{reviewableType} (z doplnku '%{pluginName}')" ignore_all: "Ignorovať všetko" enable_plugins: "Povoliť doplnky" - delete_confirm: "Ste si istí, že chcete odstrániť všetky recenzie vytvorené vypnutými zásuvnými modulmi?" - ignore_success: "Všetky recenzie vytvorené vypnutými zásuvnými modulmi boli odstránené." explain: why: "vysvetlite, prečo sa táto položka skončila vo fronte" - title: "Kontrolovateľné bodovanie" formula: "Vzorec" subtotal: "Medzisúčet" total: "Celkovo" @@ -676,10 +674,8 @@ sk: title: "Používatelia, ktorých vlajky boli historicky dohodnuté, dostanú bonus." trust_level_bonus: name: "stupne dôvery" - title: "Hodnotiteľné položky vytvorené používateľmi s vyššou úrovňou dôvery majú vyššie skóre." type_bonus: name: "typ bonusu" - title: "Určitým kontrolovateľným typom môže personál prideliť bonus, aby mali vyššiu prioritu." revise_and_reject_post: title: "Revízia" reason: "Dôvod" @@ -688,7 +684,6 @@ sk: custom_reason: "Jasne opíšte dôvod" other_reason: "Iné..." optional: "nepovinné" - stale_help: "Toto preskúmateľné bolo vyriešené %{username}." claim_help: optional: "Túto položku môžete uplatniť, aby ste zabránili ostatným v jej preskúmaní." required: "Predtým, ako ich budete môcť skontrolovať, musíte si uplatniť položky." @@ -1750,6 +1745,10 @@ sk: interface: "Rozhranie" apps: "Aplikácie" navigation_menu: "Navigačné menu" + calendar_subscriptions: "Kalendár" + calendar_subscriptions: + copied: "Skopírované!" + add_to_google: "Kalendár Google" change_password: success: "(email odoslaný)" in_progress: "(email sa odosiela)" @@ -2384,6 +2383,7 @@ sk: form_kit: reset: Resetovať optional: nepovinné + required: povinné dirty_form: "Neodoslali ste svoje zmeny! Naozaj chcete odísť?" errors: starts_with: "Musí začínať s %{prefix}" @@ -2813,6 +2813,8 @@ sk: medium_dark_tone: Stredne tmavý tón pleti dark_tone: Tmavý tón pleti default: Vlastné emotikony + filter_input: + clear: "Vymazať filter" shared_drafts: title: "Zdieľané návrhy" notice: "Táto téma je viditeľná len pre tých, ktorí môžu zverejňovať zdieľané návrhy." @@ -3326,8 +3328,6 @@ sk: max_views: placeholder: maximum aria_label: filtrovať podľa maximálneho počtu zobrazení - additional_options: - label: "Filtrovať podľa počtu príspevkov a zobrazení tém" hamburger_menu: "Navigačné menu" new_item: "nový" go_back: "späť" @@ -3406,11 +3406,8 @@ sk: confirm: "Potvrďte" select_all: "Vyber všetko" clear_all: "Zruš všetko" - unlist_topics: "Dôverné témy" - relist_topics: "Obnoviť zoznam tém" reset_bump_dates: "Obnoviť dátumy bump" defer: "Označiť ako neprečítané" - delete: "Zmazať témy" delete_topics_count: one: "Zmazať tému" few: "Zmazať témy" @@ -3455,19 +3452,10 @@ sk: other: "Zadmietnuť nové (%{count})" toggle: "prepnuť hromadne vybrané témy" actions: "Hromadné akcie" - change_category: "Nastavenie kategórie…" - close_topics: "Uzavrieť tému" - archive_topics: "Archivuj témy" move_messages_to_inbox: "Presuň do prijatej pošty" archive_messages: "Presunúť do archívu" - notification_level: "Upozornenia…" change_notification_level: "Zmena úrovne oznámení" choose_new_category: "Vyberte pre tému novú kategóriu:" - selected: - one: "Označíli ste %{count} tému." - few: "Označíli ste %{count} tém.y" - many: "Označíli ste %{count} tém." - other: "Označíli ste %{count} tém." selected_sole_category: one: "Vybrali ste %{count} tému z kategórie:" few: "Vybrali ste %{count} tém z kategórie:" @@ -3478,12 +3466,8 @@ sk: few: "%{count} vybrané" many: "%{count} vybrané" other: "%{count} vybrané" - change_tags: "Nahradiť značky" - append_tags: "Pridať značky" choose_new_tags: "Vyberte si nové značky pre tieto témy:" - choose_append_tags: "Vyberte nové značky, ktoré chcete pridať pre tieto témy:" changed_tags: "Značky týchto tém boli zmenené." - remove_tags: "Odstrániť všetky značky" confirm_remove_tags: one: "Všetky značky budú z tejto témy odstránené. Ste si istí?" few: "Všetky značky budú odstránené z %{count} tém. Ste si istý/á?" @@ -3523,7 +3507,6 @@ sk: name: "Zahodiť" close_topics: name: "Zavrieť" - note: "Poznámka" optional: (nepovinné) archive_topics: name: "Archivovať" @@ -3537,24 +3520,18 @@ sk: name: "Opätovné zaradenie do zoznamu" remove_tags: name: "Odstrániť značky" - append_tags: - name: "Pridať značky" replace_tags: name: "Nahradiť značky" delete_topics: name: "Odstrániť" update_category: name: "Aktualizovať kategóriu" - description: "Výber novej kategórie pre vybrané témy" reset_bump_dates: name: "Obnovenie dátumov zvýraznenia" - description: "Obnovenie dátumu nárazu témy na dátum posledného vytvoreného príspevku, čo ovplyvňuje poradie v zozname tém" defer: name: "Označiť ako neprečítané" - description: "Označiť témy ako neprečítané" update_notifications: name: "Aktualizovať upozornenia" - description: "Zmena úrovne upozornenia na Sledovanie, Sledovanie, Normálne alebo Stlmené" topic: filter_to: one: "%{count} príspevok k téme" @@ -4400,6 +4377,9 @@ sk: placeholder: "Vybrať skupinu značiek…" topic_featured_link_allowed: "Povoliť odporúčané odkazy v tejto kategórii" create_long: "Vytvoriť novú kategóriu" + type_settings_schema: + site_settings: "Nastavenia stránky" + unsaved_changes: "Máte neuložené zmeny" slug_placeholder: "(Voliteľné) pomlčkou-prerušované-slová pre url" creation_error: Nastala chyba počas vytvárania kategórie. save_error: Nastala chyba počas ukladania kategórie @@ -4431,6 +4411,8 @@ sk: list: "Zoznam kategórií" no_description: "Prosím, pridajte popis k tejto kategórii." change_in_category_topic: "Upraviť popis" + description_expand: "Zobraziť viac" + description_collapse: "Zobraziť menej" already_used: "Táto farba je už použitá inou kategóriou" color_palette: "Paleta farieb" security: "Bezpečnosť" @@ -4464,6 +4446,8 @@ sk: review_group_name: "názov skupiny" require_topic_approval: "Vyžadovať schválenie všetkých nových tém moderátorom" require_reply_approval: "Vyžadovať schválenie všetkých nových odpovedí moderátorom" + posting_review_modes: + everyone: "Každý" this_year: "tento rok" position: "Pozícia na stránke kategórií:" position_disabled: "Kategórie sa zobrazia v poradí podľa aktivity. Ak chcete kontrolovať poradie kategórií v zoznamoch, povoľte nastavenie \"pevné pozície kategórií \"." @@ -5053,7 +5037,20 @@ sk: many: "Jeho %{count} synoným bude tiež vymazaných." other: "Jeho %{count} synonymá budú tiež odstránené." edit_tag: "Úprava názvu a popisu značky" - description: "Popis (max. 1000 znakov)" + description: "Popis" + settings: + title: "Nastavení" + general: "Všeobecné" + localizations: "Lokalizácie" + back: "Späť" + name: "Meno" + slug: "Slug" + name_placeholder: "Názov značky" + synonyms_subtitle: "Ak sa použijú nasledujúce značky, nahradia sa týmito značkami %{name}" + localization: + locale: "Miestne nastavenie" + name: "Meno" + description: "Popis" sort_by: "Zoradiť podľa:" sort_by_count: "počtu" sort_by_name: "mena" @@ -5571,7 +5568,6 @@ sk: admin_js: type_to_filter: "Filtrovať..." settings: "Nastavenia" - reset_filter: "Resetovať" admin: title: "Administrátor Discourse" moderator: "Moderátor" @@ -5584,9 +5580,11 @@ sk: never: "nikdy" reports: title: "Zoznam dostupných prehľadov" - meta_doc: "Správy sú účinným nástrojom, ktorý vám pomôže pochopiť, čo sa deje na vašom webe. Pomôžu vám identifikovať trendy, odhaliť problémy a prijímať rozhodnutia na základe údajov." sidebar_title: "Hlásenia" back: "Späť na všetky správy" + group_traffic: "Vyťaženie" + group_members: "Členovia" + group_other: "Ostatné" config_sections: account: title: "Účet" @@ -5611,7 +5609,6 @@ sk: preview: "Náhľad" enabled_for_options: everyone: "Každý" - staff: "Len pre zamestnancov" statuses: experimental: "Experimentálne" impact_roles: @@ -5684,7 +5681,6 @@ sk: help_text: "Odporúčaná veľkosť je 600 x 80 pixelov." large_icon: title: "Štvorcová ikona" - description: "V hornej časti administrácie sa zobrazuje štvorcová verzia loga, ktorá je zároveň logom aplikácie na domovskej obrazovke mobilného telefónu." help_text: "Odporúčaná veľkosť je 512 x 512 pixelov." square_icon_dark: required: "Používanie inej štvorcovej ikony pre tmavý režim?" @@ -5833,7 +5829,7 @@ sk: header_description: "Správy sú účinným nástrojom, ktorý vám pomôže pochopiť, čo sa deje na vašom webe. Pomôžu vám identifikovať trendy, odhaliť problémy a prijímať rozhodnutia na základe údajov." sub_pages: settings: - title: "Nastavenia palubnej dosky" + title: "Nastavení" badges: title: "Odznaky" header_description: "Odznaky odmeňujú používateľov za ich aktivity, príspevky a úspechy s cieľom uznať, potvrdiť a podporiť pozitívne správanie a angažovanosť v rámci komunity" @@ -5985,32 +5981,6 @@ sk: few: '%{count} výsledokov pre "%{filter}"' many: '%{count} výsledokov pre "%{filter}"' other: '%{count} výsledky pre "%{filter}"' - result_types: - page: - one: "Stránka" - few: "Stránok" - many: "Stránok" - other: "Stránky" - report: - one: "Hlásenie" - few: "Hlásení" - many: "Hlásení" - other: "Hlásenia" - setting: - one: "Nastavenie" - few: "Nastavení" - many: "Nastavení" - other: "Nastavenia" - theme: - one: "Téma" - few: "Témy" - many: "Témy" - other: "Témy" - component: - one: "Komponent" - few: "Komponenty" - many: "Komponenty" - other: "Komponenty" new_features: title: "Čo je nové?" check_for_updates: "Kontrola aktualizácií" @@ -6034,15 +6004,6 @@ sk: title: "Čo je nové?" subtitle: "Neustále vydávame nové funkcie a vylepšenia. Táto stránka obsahuje najdôležitejšie informácie, ale kliknutím na \"Ďalšie informácie\" si môžete pozrieť rozsiahle poznámky k vydaniu." learn_more: "Zistiť viac..." - experimental: "Experimentálne" - only_experiments: "Zobraziť len experimentálne funkcie" - experiment_enabled: "Povolili ste experimentálnu funkciu." - experiment_disabled: "Experimentálnu funkciu ste zakázali." - experiment_tooltip: - title_enabled: "Vypnutie experimentálnej funkcie" - content_enabled: "Zmenou tejto funkcie zakážete túto funkciu pre všetkých používateľov." - feature_tooltip: - content_enabled: "Zmenou tejto funkcie zakážete túto funkciu pre všetkých používateľov." last_checked: "Naposledy overené" refresh_problems: "Obnoviť" no_problems: "Nenašli sa žiadne problémy." @@ -6113,7 +6074,7 @@ sk: all: "Všetky" view_table: "tabuľka" view_graph: "graf" - refresh_report: "Obnoviť report" + refresh_report: "Obnoviť" daily: Denne monthly: Mesačne weekly: Týždenne @@ -7010,7 +6971,6 @@ sk: import_web_tip: "Repozitár obsahujúci tému" direct_install_tip: "Naozaj chcete nainštalovať %{name} z úložiska uvedeného nižšie?" import_web_advanced: "Pokročilé…" - import_file_tip: ".tar.gz, .zip alebo .dcstyle.json súbor obsahujúci tému" is_private: "Téma je v súkromnom repozitári git" finish_install: "Dokončiť inštaláciu témy" last_attempt: "Proces inštalácie sa nedokončil, posledný pokus:" @@ -8073,6 +8033,7 @@ sk: disabled: "Nedá sa vyhľadať" field_types: text: "Text" + date: "Dátum" confirm: "Potvrdenie" dropdown: "Zoznam" multiselect: "Viacnásobný výber" @@ -8215,7 +8176,7 @@ sk: confirm: "Áno, aktualizujte zásady používania hesiel" min_admin_password_length: confirm: "Áno, aktualizujte zásady používania hesiel" - password_unique_charactes: + password_unique_characters: confirm: "Áno, aktualizujte zásady používania hesiel" block_common_passwords: confirm: "Áno, aktualizujte zásady používania hesiel" diff --git a/config/locales/client.sl.yml b/config/locales/client.sl.yml index e43e505c6d97c..9992b29e6ae8a 100644 --- a/config/locales/client.sl.yml +++ b/config/locales/client.sl.yml @@ -6,6 +6,11 @@ sl: js: + blocks: + ghost: + status: "Status" + hidden: "skrito" + failed: "spodletelo" number: format: separator: "," @@ -300,6 +305,8 @@ sl: title: "Nove in neprebrane teme" pm_title: "Predlagana sporočila" admin_onboarding_banner: + start_posting: + back: "Nazaj" spread_the_word: copied_to_clipboard: "Povezava je bila kopirana v odložišče!" about: @@ -342,8 +349,6 @@ sl: all_time: "ves čas" bookmarked: title: "Zaznamek" - edit_bookmark: "Uredi zaznamek" - clear_bookmarks: "Odstrani zaznamke" help: unbookmark: "odstrani vse zaznamke v tej temi" bookmarks: @@ -351,12 +356,12 @@ sl: create: "Ustvari zaznamek" edit: "Uredi zaznamek" not_bookmarked: "zaznamuj prispevek" + topic_bookmark: "Tema" remove_reminder_keep_bookmark: "Odstrani opomnik in ohrani zaznamek" created_with_reminder: "To objavo ste zaznamovali z opomnikom %{date}. %{name}" created_with_reminder_generic: "To ste dodali med zaznamke z opomnikom %{date}. %{name}" delete: "Odstrani zaznamek" confirm_delete: "Ali ste prepričani, da želite odstraniti ta zaznamek? Opomnik bo prav tako odstranjen." - confirm_clear: "Ste prepričani, da želite odstraniti vse svoje zaznamke iz te teme?" save: "Shrani" no_timezone: 'Časovnega pasu še niste izbrali. Opomnikov ne boste mogli nastavljati dokler ga ne določite v svojem profilu.' invalid_custom_datetime: "Datum in čas, ki ste ju navedli, sta neveljavna. Poskusite znova." @@ -1247,6 +1252,8 @@ sl: tags: "Oznake" interface: "Uporabniški vmesnik" apps: "Aplikacije" + calendar_subscriptions: + copied: "Kopirano!" change_password: success: "(e-sporočilo poslano)" in_progress: "(pošiljanje e-sporočila)" @@ -1706,6 +1713,7 @@ sl: form_kit: reset: Ponastavi optional: neobvezno + required: zahtevano errors: required: "Zahtevano" close: "Zapri" @@ -2306,9 +2314,6 @@ sl: confirm: "Potrdi" select_all: "Izberi vse" clear_all: "Počisti vse" - unlist_topics: "Izloči temo iz seznamov" - relist_topics: "Postavi temo nazaj na seznam" - delete: "Izbriši teme" delete_topics_count: one: "Izbriši temo" two: "Izbriši teme" @@ -2322,20 +2327,10 @@ sl: dismiss_new: "Opusti nove" toggle: "preklopi množično izbiro tem" actions: "Množična dejanja" - close_topics: "Zapri teme" - archive_topics: "Arhiviraj teme" move_messages_to_inbox: "Prestavi v Prejeto" change_notification_level: "Spremeni raven obveščanja" choose_new_category: "Izberi novo kategorijo za temo:" - selected: - one: "Izbrali ste %{count} temo." - two: "Izbrali ste %{count} temi." - few: "Izbrali ste %{count} teme." - other: "Izbrali ste %{count} tem." - change_tags: "Zamenjaj oznake" - append_tags: "Dodaj oznake" choose_new_tags: "Izberite nove oznake za te teme:" - choose_append_tags: "Izberite nove oznake da se dodajo na te teme:" changed_tags: "Oznake na teh temah so bile spremenjene." progress: one: "Napredek: %{count} tema" @@ -2368,8 +2363,6 @@ sl: name: "Prestavi v Prejeto" remove_tags: name: "Odstrani oznake" - append_tags: - name: "Dodaj oznake" replace_tags: name: "Zamenjaj oznake" delete_topics: @@ -3006,6 +2999,8 @@ sl: delete_confirm: "Ste prepričani da želite izbrisati kategorijo?" delete_error: "Prišlo je do napake pri brisanju kategorije." no_description: "Dodajte opis kategorije." + description_expand: "Več" + description_collapse: "Manj" already_used: "Ta barva je že uporabljena na drugi kategoriji." security: "Varnost" security_add_group: "Dodaj skupino" @@ -3033,6 +3028,8 @@ sl: review_group_name: "ime skupine" require_topic_approval: "Zahtevaj moderatorjevo potrditev vseh novih tem" require_reply_approval: "Zahteva odobritev moderatorja za vse nove odgovore" + posting_review_modes: + everyone: "Vsi" this_year: "to leto" position: "Položaj na strani kategorij:" minimum_required_tags: "Najmanjše število oznak zahtevanih na temi:" @@ -3470,7 +3467,16 @@ sl: two: "Izbrisani bosta tudi njeni %{count} sopomenki." few: "Izbrisane bodo tudi njene %{count} sopomenke." other: "Izbrisanih bo tudi njenih %{count} sopomenk." - description: "Opis (največ 1000 znakov)" + description: "Opis" + settings: + title: "Nastavitve" + general: "Splošno" + back: "Nazaj" + name: "Ime" + synonyms_subtitle: "Ko bodo uporabljene naslednje oznake, bodo nadomeščene z %{name}" + localization: + name: "Ime" + description: "Opis" sort_by: "Uredi po:" sort_by_count: "številu" sort_by_name: "imenu" @@ -3706,7 +3712,6 @@ sl: categories: "Vse kategorije" admin_js: settings: "Nastavitve" - reset_filter: "Ponastavi" admin: title: "Discourse Admin" moderator: "Moderator" @@ -3719,6 +3724,9 @@ sl: reports: title: "Seznam poročil" sidebar_title: "Poročila" + group_traffic: "Promet" + group_members: "Člani" + group_other: "Drugo" config_sections: account: title: "Račun" @@ -3741,7 +3749,6 @@ sl: preview: "Predogled" enabled_for_options: everyone: "Vsi" - staff: "Samo osebje" impact_roles: admins: "Administratorji" moderators: "Moderatorji" @@ -3813,6 +3820,9 @@ sl: title: "Dnevniki" reports: title: "Poročila" + sub_pages: + settings: + title: "Nastavitve" badges: title: "Značke" permalinks: @@ -3850,12 +3860,6 @@ sl: default_value: "Privzeto" search: title: "Išči" - result_types: - theme: - one: "Videz" - two: "Videzi" - few: "Videzi" - other: "Videzi" dashboard: title: "Nadzorna plošča" last_updated: "Nadzorna plošča posodobljena:" @@ -3924,7 +3928,7 @@ sl: all: "Vsi" view_table: "tabela" view_graph: "graf" - refresh_report: "Osveži poročilo" + refresh_report: "Osveži" daily: Dnevno monthly: Mesečno weekly: Tedensko @@ -4708,6 +4712,7 @@ sl: title: "Prikaži na uporabnikovi izkaznici" field_types: text: "Besedilo" + date: "Datum" confirm: "Potrditev" dropdown: "Spustni meni" site_text: diff --git a/config/locales/client.sq.yml b/config/locales/client.sq.yml index 85af8b17d361e..b9116a5262e2c 100644 --- a/config/locales/client.sq.yml +++ b/config/locales/client.sq.yml @@ -6,6 +6,12 @@ sq: js: + blocks: + ghost: + status: "Status" + in_location: "në" + hidden: "fshehur" + failed: "dështoi" number: format: separator: "." @@ -296,6 +302,8 @@ sq: pill: "Sugjeruar" pm_title: "Mesazhet e sugjeruara" admin_onboarding_banner: + start_posting: + back: "Kthehu mbrapa" spread_the_word: action: "Kopjoni lidhjen" copied_to_clipboard: "Linku u kopjua në memo!" @@ -380,8 +388,6 @@ sq: other: "Krijuar %{count} vite më parë" bookmarked: title: "Të preferuarat" - edit_bookmark: "Redakto Shënuesin" - clear_bookmarks: "Pastro të preferuarat" help: bookmark: "Klikoni për të ruajtur këtë temë" edit_bookmark: "Klikoni për të modifikuar faqeshënuesin në një postim në këtë temë" @@ -398,12 +404,12 @@ sq: create: "Krijo faqeshënues" edit: "Redakto faqeshënuesin" not_bookmarked: "shto postimin tek të preferuarat" + topic_bookmark: "Topic" remove_reminder_keep_bookmark: "Hiqni rikujtuesin dhe mbani faqeshënuesin" created_with_reminder: "Ju e keni shënuar këtë postim me një rikujtues %{date}. %{name}" created_with_reminder_generic: "Ju e keni shënuar këtë me një rikujtues %{date}. %{name}" delete: "Fshini faqeshënuesin" confirm_delete: "A jeni të sigurt që dëshironi të fshini këtë faqeshënues? Rikujtuesi gjithashtu do të fshihet." - confirm_clear: "A jeni të sigurt që dëshironi të hiqni të gjithë faqeshënuesit tuaj nga kjo temë?" save: "Ruaj" no_timezone: 'Nuk keni vendosur ende një zonë kohore. Nuk do të mund të vendosni rikujtues. Vendosni një në profilin tuaj.' invalid_custom_datetime: "Data dhe ora që keni dhënë është e pavlefshme, ju lutemi provoni përsëri." @@ -524,7 +530,6 @@ sq: filtered_flagged_by: "Shënuar nga" explain: why: "shpjegoni pse ky artikull përfundoi në radhë" - title: "Vlerësimi i rishikueshëm" formula: "Formula" subtotal: "Nëntotali" total: "Total" @@ -538,17 +543,14 @@ sq: title: "Përdoruesve me shënimet e të cilëve janë rënë dakord historikisht u jepet një bonus." trust_level_bonus: name: "niveli i besimit" - title: "Artikujt e rishikueshëm të krijuar nga përdoruesit e nivelit më të lartë të besimit kanë një rezultat më të lartë." type_bonus: name: "lloji i bonusit" - title: "Disa lloje të rishikueshme mund t'u caktohen një bonus nga stafi për t'i bërë ato një prioritet më të lartë." revise_and_reject_post: title: "Rishikoni" reason: "Arsye" send_pm: "Dërgo PM" feedback: "Reagime" optional: "opsionale" - stale_help: "Ky artikull i rishikueshëm është zgjidhur nga %{username}." claim_help: optional: "Ju mund ta përvetësoni këtë artikull për të parandaluar të tjerët ta shqyrtojnë atë." required: "Ju duhet të përvetësoni artikuj para se t'i rishikoni ato." @@ -1464,6 +1466,8 @@ sq: tags: "Etiketat" interface: "Ndërfaqja" apps: "Aplikimet" + calendar_subscriptions: + copied: "Kopjuar!" change_password: success: "(emaili u dërgua)" in_progress: "(duke dërguar emailin)" @@ -2052,6 +2056,7 @@ sq: form_kit: reset: Rivendosni optional: opsionale + required: i nevojshëm dirty_form: "Nuk i keni dorëzuar ndryshimet tuaja! Jeni të sigurt që dëshironi të largoheni?" errors: required: "E nevojshme" @@ -2829,8 +2834,6 @@ sq: max_views: placeholder: maksimale aria_label: Filtro sipas shikimeve maksimale - additional_options: - label: "Filtro sipas numrit të postimeve dhe shikimeve të temës" new_item: "e re" go_back: "kthehu mbrapa" not_logged_in_user: "faqja e përdoruesit me një përmbledhje të aktivitetit dhe preferencave" @@ -2892,11 +2895,8 @@ sq: confirm: "Konfirmo" select_all: "Zgjidh të gjitha" clear_all: "Pastro kriteret" - unlist_topics: "Hiq temat nga lista" - relist_topics: "Relistoni temat" reset_bump_dates: "Rivendos datat e përplasjes" defer: "Shëno si të palexuar" - delete: "Fshi temat" delete_topics_count: one: "Fshi temën" other: "Fshi temat" @@ -2929,29 +2929,18 @@ sq: other: "Hiq të Ri (%{count})" toggle: "toggle bulk selection of topics" actions: "Veprime në masë" - change_category: "Cakto kategorinë…" - close_topics: "Mbyll temat" - archive_topics: "Arkivo temat" move_messages_to_inbox: "Transfero në inbox" archive_messages: "Kaloni te Arkivi" - notification_level: "Njoftimet…" change_notification_level: "Ndrysho nivelin e njoftimit" choose_new_category: "Zgjidhni kategorinë e re për temat: " - selected: - one: "Keni zgjedhur %{count} temë." - other: "Keni zgjedhur %{count} tema." selected_sole_category: one: "Keni zgjedhur %{count} temë:" other: "Keni zgjedhur %{count} tema:" selected_count: one: "%{count} zgjedhur" other: "%{count} zgjedhur" - change_tags: "Zëvendësoni etiketat" - append_tags: "Shtoj Etiketa" choose_new_tags: "Zgjidh etiketa të reja për këto tema:" - choose_append_tags: "Zgjidhni etiketat e reja për të shtuar për këto tema:" changed_tags: "Etiketat e temave u ndryshuan. " - remove_tags: "Hiqni të gjitha etiketat" confirm_remove_tags: one: "Të gjitha etiketat do të hiqen nga kjo temë. A jeni të sigurt?" other: "Të gjitha etiketat do të hiqen nga temat %{count} . A jeni të sigurt?" @@ -2980,7 +2969,6 @@ sq: name: "Hiqe" close_topics: name: "Mbyll" - note: "Shënim" optional: (opsionale) archive_topics: name: "Arkivoni" @@ -2994,24 +2982,18 @@ sq: name: "Relistoni" remove_tags: name: "Hiqni etiketat" - append_tags: - name: "Shtoni etiketat" replace_tags: name: "Zëvendësoni etiketat" delete_topics: name: "Fshij" update_category: name: "Përditëso kategorinë" - description: "Zgjidhni kategorinë e re për temat e zgjedhura" reset_bump_dates: name: "Rivendos datat e përplasjes" - description: "Rivendosni datën e ngritjes së temës në datën e fundit të postimit të krijuar, gjë që ndikon në renditjen në listën e temave" defer: name: "Shënoni të palexuar" - description: "Shënoni temat si të palexuara" update_notifications: name: "Përditëso Njoftimet" - description: "Ndrysho nivelin e njoftimit në Në Shikim, Në Ndjekje, Normal ose Në Heshtje" topic: filter_to: one: "%{count} postim në temë" @@ -3504,6 +3486,8 @@ sq: delete_confirm: "Jeni i sigurtë që dëshironi ta fshini këtë kategori?" delete_error: "Pati një gabim gjatë fshirjes së kategorisë." no_description: "Shto një përshkrim për këtë kategori." + description_expand: "Shfaq më shumë" + description_collapse: "Shfaq më pak" already_used: "Kjo ngjyrë është përdorur nga një kategori tjetër" security: "Siguria" permissions: @@ -3514,6 +3498,8 @@ sq: email_in_allow_strangers: "Prano emaila nga anëtarë anonimë pa llogari në faqe" allow_badges_label: "Lejo të jepen stemat në këtë kategori" review_group_name: "emri i grupit" + posting_review_modes: + everyone: "Të gjithë" this_year: "këtë vit" none_subcategory_text: "Asnjë" visibility: @@ -3799,6 +3785,15 @@ sq: tags: "Etiketat" add_synonyms: "Shto" delete_tag: "Fshi etiketën" + description: "Përshkrimi" + settings: + title: "Rregullimet" + general: "Karakteristika të përgjithshme" + back: "Kthehu mbrapa" + name: "Emri" + localization: + name: "Emri" + description: "Përshkrimi" sort_by: "Rendit sipas:" sort_by_count: "numri" sort_by_name: "emër" @@ -3942,7 +3937,6 @@ sq: categories: "Të gjitha kategoritë" admin_js: settings: "Rregullimet" - reset_filter: "Rivendosni" admin: title: "Administrator" moderator: "Moderator" @@ -3950,6 +3944,10 @@ sq: remove_muted_tags_from_latest: always: "gjithmonë" never: "asnjëherë" + reports: + group_traffic: "Trafik" + group_members: "Anëtarë" + group_other: "Të tjerë" config_sections: account: title: "Llogaria" @@ -4034,6 +4032,10 @@ sq: sub_pages: logs: title: "Ditari" + reports: + sub_pages: + settings: + title: "Rregullimet" badges: title: "Stemat" permalinks: @@ -4111,7 +4113,7 @@ sq: all: "Të Gjithë" view_table: "tabelë" view_graph: "grafik" - refresh_report: "Rifresko raportin" + refresh_report: "Rifresko" daily: Ditore monthly: Mujore weekly: Javore diff --git a/config/locales/client.sr.yml b/config/locales/client.sr.yml index d3a033143c343..34cbf82254cc6 100644 --- a/config/locales/client.sr.yml +++ b/config/locales/client.sr.yml @@ -6,6 +6,12 @@ sr: js: + blocks: + ghost: + status: "Status" + in_location: "u" + hidden: "sakriveno" + failed: "neuspešno" number: format: separator: "," @@ -323,6 +329,9 @@ sr: title: "Novi i Nepročitane teme" pill: "Predloženo" pm_title: "Predložene poruke" + admin_onboarding_banner: + start_posting: + back: "Nazad" about: edit: "Izmeni ovu stranu" simple_title: "O nama" @@ -416,8 +425,6 @@ sr: other: "Napravljeno pre %{count} godina" bookmarked: title: "Markiraj" - edit_bookmark: "Uredi marker" - clear_bookmarks: "Očisti markere" help: bookmark: "Klikni da označite ovu temu" edit_bookmark: "Klikni da izmeniš oznaku na postu u ovoj temi" @@ -434,12 +441,12 @@ sr: create: "Označi" edit: "Izmeni oznaku" not_bookmarked: "obeleži ovu poruku" + topic_bookmark: "Tema" remove_reminder_keep_bookmark: "Uklonite podsetnik i sačuvajte obeleživač" created_with_reminder: "Obeležili ste ovu poruku sa podsetnikom %{date}. %{name}" created_with_reminder_generic: "Obeležili ste ovu poruku sa podsetnikom %{date}. %{name}" delete: "Ukloni obeleživač" confirm_delete: "Da li ste sigurni da želite da uklonite ovaj obeleživač? Podsetnik će takođe biti uklonjen." - confirm_clear: "Da li ste sigurni da želite da uklonite sve obeleživače sa ove teme?" save: "Sačuvaj" no_timezone: 'Još niste podesili vremensku zonu. Nećete moći postaviti podsetnike. Podesite sada na vašem profilu.' invalid_custom_datetime: "Uneti datum i vreme nisu važeći. Pokušajte ponovo." @@ -574,18 +581,11 @@ sr: in_reply_to: "odgovor na" filtered_flagged_by: "Markirano od" unknown: - title: - one: "Imate na čekanju stvari za pregled od isključenog dodatka:" - few: "Imate stvari na čekanju za pregled od isključenih dodataka:" - other: "Imate stvari na čekanju za pregled od isključenih dodataka:" instruction: "Ne mogu se pravilno prikazati dok se ne uključi relevantni dodatak. Molimo da uključite dodatak i osvežite stranu. Alternativno, možete ih ignorisati. Saznajte više..." ignore_all: "Ignoriši sve" enable_plugins: "Uključi dodatke" - delete_confirm: "Да ли сте сигурни да желите да избришете све рецензије направљене од стране онемогућених додатака?" - ignore_success: "Све рецензије направљене од стране isključenih додатака су избрисане." explain: why: "objasnite žašto je ova stavka završila u redu čekanja" - title: "Pregledno bodovanje" formula: "Formula" subtotal: "Međuzbir" total: "Ukupno" @@ -599,10 +599,8 @@ sr: title: "Korisnici čiji markeri su bili prihvatani ranije dobijaju bonus." trust_level_bonus: name: "nivo poverenja" - title: "Stakve koje su kreirali korisnici sa visokim nivoom poverenja imaju viši rezultat." type_bonus: name: "Bonus za tip" - title: "Određenim tipovima stvari koji se proveravaju može se dodati bonus od osoblja da bi imale veći prioritet." revise_and_reject_post: title: "Promeniti" reason: "Razlog" @@ -611,7 +609,6 @@ sr: custom_reason: "Dajte jasan opis razloga" other_reason: "Ostalo..." optional: "opciono" - stale_help: "Ovu proveru je uradio %{username}." claim_help: optional: "Možete tražiti prava da sprečite ostale da ga pregledaju" required: "Morate prihvatiti stavke pre nego što ih možete pregledati." @@ -1328,6 +1325,8 @@ sr: tracking: "Praćeno" categories: "Kategorije" users: "Korisnici" + calendar_subscriptions: + copied: "Kopirano!" change_password: success: "(email je poslat)" in_progress: "(email se šalje)" @@ -1597,6 +1596,7 @@ sr: search: "Pretraži" form_kit: optional: opciono + required: potrebno errors: required: "Potrebno" close: "Zatvori" @@ -1861,7 +1861,6 @@ sr: new_messages_marker: "poslednja poseta" bulk: select_all: "Izaberi sve" - delete: "Obriši Teme" delete_topics_count: one: "Obriši temu" few: "Obriši Teme" @@ -1870,13 +1869,7 @@ sr: dismiss_new: "Odbaci Novo" toggle: "uključi/isključi grupni odabir tema" actions: "Grupne aktivnosti" - close_topics: "Zatvori Teme" - archive_topics: "Arhiviraj teme" choose_new_category: "Izaberite novu kategoriju za vašu temu." - selected: - one: "Odabrali ste %{count} temu." - few: "Odabrali ste %{count} tema." - other: "Odabrali ste %{count} tema." error_topic_count: one: "%{count} tema" few: "%{count} tema" @@ -2189,6 +2182,8 @@ sr: delete_confirm: "Jeste li sigurni da želite izbrisati ovu kategoriju?" delete_error: "Dogodila se greška pri brisanju kategorije." no_description: "Molimo dodajte opis ovoj kategoriji." + description_expand: "Pokaži više" + description_collapse: "Pokaži manje" already_used: "Ova boja se koristi u drugoj kategoriji." security: "Sigurnost" permissions: @@ -2199,6 +2194,8 @@ sr: email_in_allow_strangers: "Prihvati emailove anonimnih korisnika bez naloga" allow_badges_label: "Dozvoli dodjeljivanje značaka u ovoj kategoriji." review_group_name: "ime grupe" + posting_review_modes: + everyone: "Svi" this_year: "ove godine" none_subcategory_text: "Ništa" visibility: @@ -2449,6 +2446,15 @@ sr: selector_remove_filter: "uklonite filter" choose_for_topic: "opcione oznake" add_synonyms: "Dodaj" + description: "Opis" + settings: + title: "Podešavanje" + general: "Opšti" + back: "Nazad" + name: "Ime foruma" + localization: + name: "Ime foruma" + description: "Opis" sort_by_count: "broj" sort_by_name: "ime foruma" upload_instructions: "Jedan po liniji, opciono sa oznakom grupe u formatu 'tag_name, tag_group'." @@ -2594,7 +2600,6 @@ sr: categories: "Sve kategorije" admin_js: settings: "Podešavanja" - reset_filter: "Reset" admin: title: "Administrator" moderator: "Moderator" @@ -2602,6 +2607,9 @@ sr: remove_muted_tags_from_latest: always: "uvek" never: "nikada" + reports: + group_members: "Članovi" + group_other: "Ostalo" config_sections: community: title: "Zajednica" @@ -2616,7 +2624,6 @@ sr: enabled: "Omogućeno" enabled_for_options: everyone: "Svi" - staff: "Samo članovi osoblja" impact_roles: admins: "Admini" moderators: "Moderatori" @@ -2679,6 +2686,10 @@ sr: sub_pages: logs: title: "Logovi" + reports: + sub_pages: + settings: + title: "Podešavanje" badges: title: "Značke" emoji: @@ -2741,7 +2752,7 @@ sr: 30_days_ago: "Pre 30 Dana" all: "Sve" view_table: "tablica" - refresh_report: "Osveži Prijave" + refresh_report: "Osveži" daily: Top dnevne monthly: Top mesečne weekly: Top nedeljne diff --git a/config/locales/client.sv.yml b/config/locales/client.sv.yml index ca588df08018d..03eab6b408d3a 100644 --- a/config/locales/client.sv.yml +++ b/config/locales/client.sv.yml @@ -6,6 +6,12 @@ sv: js: + blocks: + ghost: + status: "Status" + in_location: "i" + hidden: "dold" + failed: "misslyckad" number: format: separator: "." @@ -295,6 +301,8 @@ sv: pill: "Föreslagna" pm_title: "Föreslagna meddelanden" admin_onboarding_banner: + start_posting: + back: "Tillbaka" spread_the_word: copied_to_clipboard: "Länken har kopierats till urklipp!" about: @@ -335,8 +343,6 @@ sv: all_time: "alltid" bookmarked: title: "Bokmärke" - edit_bookmark: "Redigera bokmärke" - clear_bookmarks: "Töm bokmärken" help: bookmark: "Klicka för att bokmärka detta ämne" edit_bookmark: "Klicka för att redigera bokmärket på ett inlägg i detta ämne" @@ -352,12 +358,12 @@ sv: clear_reminder: "Rensa påminnelse" edit: "Redigera bokmärke" not_bookmarked: "bokmärk detta inlägg" + topic_bookmark: "Ämne" remove_reminder_keep_bookmark: "Ta bort påminnelsen och behåll bokmärket" created_with_reminder: "Du har bokmärkt detta inlägg med en påminnelse %{date}. %{name}" created_with_reminder_generic: "Du har bokmärkt detta med en påminnelse %{date}. %{name}" delete: "Radera bokmärke" confirm_delete: "Är du säker på att du vill radera det här bokmärket? Påminnelsen kommer också att raderas." - confirm_clear: "Är du säker på att du vill radera alla dina bokmärken från ämnet?" save: "Spara" no_timezone: 'Du har ännu inte valt tidszon, så du kommer inte att kunna spara påminnelser. Ange en i din profil.' invalid_custom_datetime: "Datumet och tiden du har angivit är ogiltig(t), försök igen." @@ -462,7 +468,6 @@ sv: in_reply_to: "som svar till" explain: why: "förklara varför detta föremål hamnade i kön" - title: "Granskningsvärdering" formula: "Formel" subtotal: "Delsumma" total: "Totalt" @@ -476,10 +481,8 @@ sv: title: "Användare vars flaggor historiskt har fått medhåll ges en bonus." trust_level_bonus: name: "förtroendenivå" - title: "Granskade objekt skapade av användare med högre förtroendenivå har en högre poäng." type_bonus: name: "typ bonus" - title: "Vissa granskningsärenden kan tilldelas en bonus av personal för att ge dem en högre prioritet." revise_and_reject_post: title: "Revidera" reason: "Anledning" @@ -488,7 +491,6 @@ sv: custom_reason: "Ge en tydlig beskrivning av orsaken" other_reason: "Annan..." optional: "valfritt" - stale_help: "Detta granskningsbara objekt har lösts av %{username}." claim_help: optional: "Du kan göra anspråk på detta för att förhindra andra från att granska det." required: "Du måste göra anspråk innan du kan granska dem." @@ -1325,6 +1327,10 @@ sv: tags: "Taggar" interface: "Gränssnitt" apps: "Appar" + calendar_subscriptions: "Kalender" + calendar_subscriptions: + copied: "Kopierad!" + add_to_google: "Google -kalender" change_password: success: "(e-post skickat)" in_progress: "(skickar e-post)" @@ -1869,6 +1875,7 @@ sv: form_kit: reset: Återställ optional: valfritt + required: krävs errors: required: "Krävs" invalid_url: "Måste vara en giltig URL" @@ -2578,8 +2585,6 @@ sv: max_views: placeholder: maximalt aria_label: filtrera efter största antal visningar - additional_options: - label: "Filtrera efter inläggsantal och ämnesvisningar" new_item: "ny" go_back: "gå tillbaka" not_logged_in_user: "användarsida med sammanställning av aktuell aktivitet och inställningar" @@ -2641,10 +2646,7 @@ sv: confirm: "Bekräfta" select_all: "Välj alla" clear_all: "Rensa alla" - unlist_topics: "Avlista ämnen" - relist_topics: "Lista om ämnen" reset_bump_dates: "Återställ knuffdatum" - delete: "Ta bort ämnen" delete_topics_count: one: "Radera ämne" other: "Ta bort ämnen" @@ -2677,25 +2679,16 @@ sv: other: "Avfärda nya (%{count})" toggle: "växla val av flertalet ämnen" actions: "Massändringar" - change_category: "Ange kategori…" - close_topics: "Stäng ämnen" - archive_topics: "Arkivera ämnen" move_messages_to_inbox: "Flytta till inkorgen" - notification_level: "Aviseringar…" change_notification_level: "Ändra aviseringsnivå" choose_new_category: "Välj den nya kategorin för ämnena:" - selected: - one: "Du har markerat %{count} ämne." - other: "Du har markerat %{count} ämnen." selected_count: one: "%{count} har valts" other: "%{count} har valts" - change_tags: "Ersätt taggar" append_tags: "Lägg till taggar" choose_new_tags: "Välj nya taggar för de här ämnena:" - choose_append_tags: "Välj nya taggar att lägga till för dessa ämnen:" + choose_append_tags: "Lägg till taggar" changed_tags: "Taggarna för de här ämnena ändrades." - remove_tags: "Ta bort alla taggar" confirm_remove_tags: one: "Alla taggar tas bort från det här ämnet. Är du säker?" other: "Alla taggar tas bort från %{count} ämnen. Är du säker?" @@ -2729,15 +2722,12 @@ sv: name: "Flytta till inkorgen" remove_tags: name: "Ta bort taggar" - append_tags: - name: "Lägg till taggar" replace_tags: name: "Ersätt taggar" delete_topics: name: "Radera" update_category: name: "Uppdatera kategori" - description: "Välj den nya kategorin för de valda ämnena" topic: filter_to: one: "%{count} inlägg i ämnet" @@ -3447,6 +3437,7 @@ sv: delete: "Radera" add: "Lägg till obligatorisk tagg-grupp" placeholder: "Välj tagg-grupp…" + tag_group: "Tagg-grupp" topic_featured_link_allowed: "Tillåt utvalda länkar i denna kategori" create_long: "Skapa en ny kategori" slug_placeholder: "(Valfritt) streckade ord för url" @@ -3470,6 +3461,8 @@ sv: delete_confirm: "Är du säker på att du vill radera den kategorin?" delete_error: "Ett fel inträffade vid borttagning av kategorin." no_description: "Lägg till en beskrivning för den här kategorin." + description_expand: "Visa mer" + description_collapse: "Visa mindre" already_used: "Den här färgen används redan av en annan kategori" security: "Säkerhet" security_add_group: "Lägg till en grupp" @@ -3502,6 +3495,9 @@ sv: review_group_name: "gruppnamn" require_topic_approval: "Kräv att en moderator godkänner alla nya ämnen" require_reply_approval: "Kräv att en moderator godkänner alla nya svar" + posting_review_modes: + everyone: "Alla" + posting_review_groups_placeholder: "Välj grupper..." this_year: "i år" position: "Position på kategorisidan:" position_disabled: "Kategorier kommer att visas i aktivitetsordning. För att styra ordningen på kategorier i listor, aktivera inställningen 'fasta kategoripositioner'." @@ -3960,7 +3956,18 @@ sv: one: "Dess synonym kommer också att raderas." other: "Dess %{count} synonymer kommer också att raderas." edit_tag: "Redigera taggnamn och beskrivning" - description: "Beskrivning (max. 1000 tecken)" + description: "Beskrivning" + settings: + title: "Inställningar" + general: "Allmänt" + back: "Tillbaka" + name: "Namn" + slug: "Slug" + name_placeholder: "Namn på tagg" + synonyms_subtitle: "När följande taggar används, kommer de att ersättas med %{name}" + localization: + name: "Namn" + description: "Beskrivning" sort_by: "Sortera efter:" sort_by_count: "summa" sort_by_name: "namn" @@ -4347,7 +4354,6 @@ sv: admin_js: type_to_filter: "Skriv för att filtrera…" settings: "Inställningar" - reset_filter: "Återställ" admin: title: "Discourse-administratör" moderator: "Moderator" @@ -4360,6 +4366,9 @@ sv: reports: title: "Lista över tillgängliga rapporter" sidebar_title: "Rapporter" + group_traffic: "Trafik" + group_members: "Medlemmar" + group_other: "Övrigt" config_sections: account: title: "Konto" @@ -4384,7 +4393,6 @@ sv: preview: "Förhandsgranska" enabled_for_options: everyone: "Alla" - staff: "Endast personal" impact_roles: admins: "Administratörer" moderators: "Moderatorer" @@ -4466,6 +4474,9 @@ sv: title: "Loggar" reports: title: "Rapporter" + sub_pages: + settings: + title: "Inställningar" badges: title: "Utmärkelser" permalinks: @@ -4515,13 +4526,6 @@ sv: default_value: "Standard" search: title: "Sök" - result_types: - theme: - one: "Tema" - other: "Teman" - component: - one: "Komponent" - other: "Komponenter" dashboard: title: "Översiktspanel" last_updated: "Översiktspanelen uppdaterad:" @@ -4589,7 +4593,7 @@ sv: all: "Alla" view_table: "tabell" view_graph: "graf" - refresh_report: "Uppdatera rapport" + refresh_report: "Uppdatera" daily: Dagligen monthly: Månadsvis weekly: Veckovis @@ -5250,7 +5254,6 @@ sv: import_web_tip: "Lagringsplats som innehåller tema" direct_install_tip: "Är du säker på att du vill installera %{name} från lagringsplatsen nedan?" import_web_advanced: "Avancerat…" - import_file_tip: ".tar.gz-, .zip- eller .dcstyle.json-fil innehåller tema" is_private: "Temat är i en privat git-lagringsplats" finish_install: "Slutför temainstallationen" last_attempt: "Installationsprocessen slutfördes inte, det senaste försöket:" @@ -6060,6 +6063,7 @@ sv: enabled: "Sökbart" field_types: text: "Text" + date: "Datum" confirm: "Bekräftelse" dropdown: "Rullgardinsmeny" multiselect: "Multival" diff --git a/config/locales/client.sw.yml b/config/locales/client.sw.yml index 0027d5ebaee03..87a4ff6b4be8a 100644 --- a/config/locales/client.sw.yml +++ b/config/locales/client.sw.yml @@ -6,6 +6,10 @@ sw: js: + blocks: + ghost: + hidden: "imefichwa" + failed: "kushindwa" number: format: separator: "." @@ -206,6 +210,9 @@ sw: other: "Herufi %{count}" suggested_topics: pm_title: "Ujumbe Uliopendekezwa" + admin_onboarding_banner: + start_posting: + back: "Iliyopita" about: edit: "Hariri ukurasa huu" simple_title: "Kuhusu " @@ -229,12 +236,11 @@ sw: today: "leo" bookmarked: title: "Alamisho" - clear_bookmarks: "Futa Maalamisho" help: unbookmark: "Bofya kuondoa mialamisho yote kwenye mada hii" bookmarks: not_bookmarked: "alamisha chapisho hili" - confirm_clear: "Una uhakika unataka kuondoa mialamisho ya mada hii?" + topic_bookmark: "Mada" save: "hifadhi" search: "Tafuta" bookmark: "Alamisha" @@ -1069,6 +1075,7 @@ sw: form_kit: reset: Anza Upya optional: sio muhimu + required: muhimu errors: required: "Muhimu na Inahitajika" close: "Funga" @@ -1474,9 +1481,6 @@ sw: bulk: select_all: "Chagua Zote" clear_all: "Ondoa Zote" - unlist_topics: "Ondoa Mada kwenye listi" - relist_topics: "Orodhesha Upya Mada" - delete: "Futa Mada" delete_topics_count: one: "Futa Mada" other: "Futa Mada" @@ -1488,17 +1492,9 @@ sw: dismiss_new: "Ondosha Mpya" toggle: "Badili kwa wingi chaguo la topiki" actions: "Vitendo za Jumla" - close_topics: "Funga Mada" - archive_topics: "Hifadhi Mada kwenye nyaraka" move_messages_to_inbox: "Hamishia kwenye kisanduku-pokezi" choose_new_category: "Chagua kategoria mpya kwa ajili ya mada:" - selected: - one: "Umechagua mada %{count}." - other: "Umechagua mada %{count}." - change_tags: "Badilisha Lebo" - append_tags: "Jumlisha Lebo" choose_new_tags: "Chagua lebo mpya kwa ajili ya hizi mada:" - choose_append_tags: "Chagua lebo mpya kuweka kwenye mada hizi:" changed_tags: "lebo za hizo mada zilibadilishwa." error_topic_count: one: "%{count} topiki" @@ -1521,8 +1517,6 @@ sw: name: "Nyaraka" move_messages_to_inbox: name: "Hamisha kwenda Kisanduku pokezi" - append_tags: - name: "Jumlisha Lebo" replace_tags: name: "Badilisha Lebo" delete_topics: @@ -1959,6 +1953,8 @@ sw: all_topics_wiki: "Hifadhi mada mpya kama chaguo msingi" allow_badges_label: "Ruhusu beji hizi zitolewe kwenye kategoria hii:" review_group_name: "jina la kikundi" + posting_review_modes: + everyone: "Kila Mtu" this_year: "mwaka huu" minimum_required_tags: "Kiwango cha chini cha lebo zinazohitajika kwenye mada:" none_subcategory_text: "Hakuna" @@ -2235,6 +2231,15 @@ sw: add_synonyms: "Ongeza" delete_tag: "futa lebo" delete_confirm_no_topics: "Una uhakika unataka kufuta lebo hii?" + description: "Maelezo" + settings: + title: "Mipangilio" + general: "Jumla" + back: "Iliyopita" + name: "Jina" + localization: + name: "Jina" + description: "Maelezo" sort_by: "Pangilia kwa:" sort_by_count: "hesabu" sort_by_name: "jina" @@ -2385,7 +2390,6 @@ sw: categories: "Kategoria Zote" admin_js: settings: "Mipangilio" - reset_filter: "Weka/Anzisha Upya" admin: title: "Kiongozi wa Discourse" moderator: "Msimamizi" @@ -2395,6 +2399,9 @@ sw: never: "kamwe" reports: title: "Orodha ya ripoti zilizopo" + group_traffic: "Utembeleaji" + group_members: "Wanachama" + group_other: "Nyingine" config_sections: account: title: "Akaunti" @@ -2477,6 +2484,10 @@ sw: sub_pages: logs: title: "Batli" + reports: + sub_pages: + settings: + title: "Mipangilio" badges: title: "Beji" permalinks: @@ -2516,10 +2527,6 @@ sw: default_value: "Halisi" search: title: "Tafuta" - result_types: - theme: - one: "Mandhari" - other: "Mandhari" dashboard: title: "Ubao" version: "Toleo" @@ -2568,7 +2575,7 @@ sw: all: "Zote" view_table: "jedwali" view_graph: "grafu" - refresh_report: "Rudisha tena Ripoti" + refresh_report: "Rudisha Tena" daily: Kila siku monthly: Klla mwezi weekly: Kila wiki @@ -3389,6 +3396,7 @@ sw: title: "Onyesha kwenye kadi ya mtumiaji" field_types: text: "Neno" + date: "Tarehe" confirm: "Uhakikisho" dropdown: "Shusha Chini" site_text: diff --git a/config/locales/client.te.yml b/config/locales/client.te.yml index 7b53384d7058c..a60e7b94986c0 100644 --- a/config/locales/client.te.yml +++ b/config/locales/client.te.yml @@ -6,6 +6,11 @@ te: js: + blocks: + ghost: + status: "స్థితి" + in_location: "లో" + failed: "విఫలం" number: format: separator: "." @@ -289,6 +294,9 @@ te: title: "కొత్త & చదవని విషయాలు" pill: "సూచించినవి" pm_title: "సూచించిన సందేశాలు" + admin_onboarding_banner: + start_posting: + back: "వెనుకకు" about: edit: "ఈ పేజీని సవరించండి" simple_title: "మా సంఘం గురించి" @@ -323,8 +331,6 @@ te: all_time: "ఎప్పటికీ" bookmarked: title: "బుక్‌మార్క్" - edit_bookmark: "బుక్‌మార్క్‌ని సవరించండి" - clear_bookmarks: "బుక్‌మార్క్‌లను క్లియర్ చేయండి" help: bookmark: "ఈ విషయాన్ని బుక్‌మార్క్ చేయడానికి క్లిక్ చేయండి" edit_bookmark: "ఈ విషయంలోని పోస్ట్‌పై బుక్‌మార్క్‌ని సవరించడానికి క్లిక్ చేయండి" @@ -338,12 +344,12 @@ te: clear_reminder: "రిమైండర్‌ను క్లియర్ చేయండి" edit: "బుక్‌మార్క్‌ని సవరించండి" not_bookmarked: "ఈ పోస్ట్‌ను బుక్‌మార్క్ చేయండి" + topic_bookmark: "విషయం" remove_reminder_keep_bookmark: "రిమైండర్‌ని తీసివేసి, బుక్‌మార్క్ ఉంచండి" created_with_reminder: "మీరు ఈ పోస్ట్‌ను రిమైండర్‌తో బుక్‌మార్క్ చేసారు %{date}. %{name}" created_with_reminder_generic: "మీరు దీన్ని రిమైండర్‌తో బుక్‌మార్క్ చేసారు %{date}. %{name}" delete: "బుక్‌మార్క్‌ను తొలగించండి" confirm_delete: "మీరు ఖచ్చితంగా ఈ బుక్‌మార్క్‌ని తొలగించాలనుకుంటున్నారా? రిమైండర్ కూడా తొలగించబడుతుంది." - confirm_clear: "మీరు ఈ విషయం నుండి మీ అన్ని బుక్‌మార్క్‌లను ఖచ్చితంగా తొలగించాలనుకుంటున్నారా?" save: "సేవ్ చేయండి" no_timezone: 'మీరు ఇంకా సమయ మండలిని సిద్ధం చేయలేదు. మీరు రిమైండర్‌లను సిద్ధం చేయలేరు. మీ ప్రొఫైల్లో సెటప్ చేయండి.' invalid_custom_datetime: "మీరు అందించిన తేదీ మరియు సమయం చెల్లదు, దయచేసి మళ్లీ ప్రయత్నించండి." @@ -448,7 +454,6 @@ te: in_reply_to: "సమాధానముగా" explain: why: "ఈ అంశం క్యూలో ఎందుకు నిలిచిందో వివరించండి" - title: "సమీక్షించదగిన స్కోరింగ్" formula: "ఫార్ములా" subtotal: "ఉపమొత్తం" total: "మొత్తం" @@ -462,10 +467,8 @@ te: title: "ఫిర్యాదులు చారిత్రాత్మకంగా అంగీకరించబడిన సభ్యులకు బోనస్ ఇవ్వబడుతుంది." trust_level_bonus: name: "విశ్వసనీయ స్థాయి" - title: "అధిక విశ్వసనీయ స్థాయి సభ్యులు సృష్టించిన సమీక్షించదగిన అంశాలు అధిక స్కోర్‌ను కలిగి ఉంటాయి." type_bonus: name: "టైప్ బోనస్" - title: "కొన్ని సమీక్షించదగిన రకాలను వారికి అధిక ప్రాధాన్యతనిచ్చేలా సిబ్బంది బోనస్ను కేటాయించవచ్చు." revise_and_reject_post: title: "సవరించండి" reason: "కారణం" @@ -474,7 +477,6 @@ te: custom_reason: "కారణం గురించి స్పష్టమైన వివరణ ఇవ్వండి" other_reason: "ఇతర..." optional: "ఐచ్ఛికం" - stale_help: "ఈ సమీక్షించదగినది %{username} ద్వారా పరిష్కరించబడింది." claim_help: optional: "ఇతరులు దీన్ని సమీక్షించకుండా నిరోధించడానికి మీరు ఈ అంశాన్ని దావా చేయవచ్చు." required: "మీరు అంశాలను సమీక్షించే ముందు వాటిని తప్పనిసరిగా దావా చేయాలి." @@ -1301,6 +1303,9 @@ te: tags: "ట్యాగులు" interface: "ప్రదర్శన" apps: "యాప్‌లు" + calendar_subscriptions: + copied: "కాపీ చేయబడింది!" + add_to_google: "గూగుల్ క్యాలెండర్" change_password: success: "(ఈమెయిల్ పంపిన)" in_progress: "(ఈమెయిల్ పంపుతోన్నాం)" @@ -1842,6 +1847,7 @@ te: form_kit: reset: రీసెట్ చేయండి optional: ఐచ్ఛికం + required: అవసరం errors: required: "అవసరం" invalid_url: "తప్పక చెల్లుబాటు అయ్యే URL అయి ఉండాలి" @@ -2140,6 +2146,8 @@ te: medium_dark_tone: మధ్యస్థ ముదురు చర్మపు రంగు dark_tone: ముదురు చర్మపు రంగు default: అనుకూల ఎమోజీలు + filter_input: + clear: "ఫిల్టర్‌ని క్లియర్ చేయండి" shared_drafts: title: "షేర్ చేసిన చిత్తుప్రతులు" notice: "షేర్ చేయబడిన చిత్తుప్రతులను ప్రచురించగల వారికి మాత్రమే ఈ విషయం కనిపిస్తుంది." @@ -2546,8 +2554,6 @@ te: max_views: placeholder: గరిష్ట aria_label: గరిష్ట వీక్షణల ద్వారా ఫిల్టర్ చేయండి - additional_options: - label: "పోస్ట్ కౌంట్ మరియు విషయం వీక్షణల వారీగా ఫిల్టర్ చేయండి" new_item: "కొత్త" go_back: "వెనక్కు మరలు" not_logged_in_user: "సభ్యుని ప్రస్తుత కలాపాల మరియు అభిరూపాల సారాంశ పుట" @@ -2609,10 +2615,7 @@ te: confirm: "నిర్ధారించండి" select_all: "అన్ని ఎంచుకోండి" clear_all: "అన్నీ క్లియర్ చేయండి" - unlist_topics: "విషయాలను జాబితా నుండి తీసివేయండి" - relist_topics: "విషయాలను మళ్లీ జాబితా చేయండి" reset_bump_dates: "బంప్ తేదీలను రీసెట్ చేయండి" - delete: "విషయాలను తొలగించండి" delete_topics_count: one: "విషయాన్ని తొలగించండి" other: "విషయాలను తొలగించండి" @@ -2645,25 +2648,14 @@ te: other: "కొత్త విషయాలను తీసివేయండి (%{count})" toggle: "విషయాల బహుళ ఎంపికలు అటుఇటుచేయి" actions: "బహుళ చర్యలు" - change_category: "వర్గాన్ని సెట్ చేయండి…" - close_topics: "విషయాలు మూయు" - archive_topics: "విషయాలు కట్టకట్టు" move_messages_to_inbox: "ఇన్‌బాక్స్‌కి తరలించండి" - notification_level: "నోటిఫికేషన్‌లు…" change_notification_level: "నోటిఫికేషన్ స్థాయిని మార్చండి" choose_new_category: "విషయం కొరకు కొత్త వర్గం ఎంచుకొండి:" - selected: - one: "మీరు %{count} విషయం ఎంచుకున్నారు." - other: " మీరు %{count} విషయాలు ఎంచుకున్నారు." selected_count: one: "%{count} ఎంచుకోబడింది" other: "%{count} ఎంచుకోబడింది" - change_tags: "ట్యాగ్‌లను భర్తీ చేయండి" - append_tags: "ట్యాగ్లను జోడించండి" choose_new_tags: "ఈ విషయాలకి కొత్త ట్యాగ్‌లను ఎంచుకోండి:" - choose_append_tags: "ఈ విషయాలకి జోడించడానికి కొత్త ట్యాగ్‌లను ఎంచుకోండి:" changed_tags: "ఆ విషయాల ట్యాగ్‌లు మార్చబడ్డాయి." - remove_tags: "అన్ని ట్యాగ్‌లను తీసివేయండి" confirm_remove_tags: one: "ఈ విషయం నుండి అన్ని ట్యాగ్‌లు తీసివేయబడతాయి. ఖచ్చితమనే?" other: "ఈ %{count} విషయాలు నుండి అన్ని ట్యాగ్‌లు తీసివేయబడతాయి. ఖచ్చితమనే?" @@ -2699,23 +2691,16 @@ te: name: "ఇన్‌బాక్స్‌కి తరలించండి" remove_tags: name: "ట్యాగ్‌లను తీసివేయండి" - append_tags: - name: "ట్యాగ్లను జోడించండి" replace_tags: name: "ట్యాగ్‌లను భర్తీ చేయండి" delete_topics: name: "తొలగించండి" update_category: name: "వర్గాన్ని నవీకరించండి" - description: "ఎంచుకున్న విషయాలకి కొత్త వర్గాన్ని ఎంచుకోండి" reset_bump_dates: name: "బంప్ తేదీలను రీసెట్ చేయండి" - description: "విషయం బంప్ తేదీని చివరిగా సృష్టించిన పోస్ట్ తేదీకి రీసెట్ చేయండి, ఇది విషయం జాబితాలో ఆర్డర్ చేయడంపై ప్రభావం చూపుతుంది" - defer: - description: "విషయాలను చదవనివిగా గుర్తించండి" update_notifications: name: "నోటిఫికేషన్‌లను నవీకరించండి" - description: "నోటిఫికేషన్ స్థాయిని అనుసరించడం, ట్రాకింగ్ చేయడం, సాధారణం లేదా మ్యూట్ చేయబడిన స్థితికి మార్చండి" topic: filter_to: one: "విషయంలో %{count} పోస్ట్" @@ -3443,6 +3428,8 @@ te: delete_confirm: "మీరు నిజంగా ఈ వర్గాన్ని తొలగించాలనుకుంటున్నారా?" delete_error: "ఈ వర్గం తొలగించేప్పుడు దొషం." no_description: "ఈ వర్గానికి వివరణ రాయండి" + description_expand: "మరిన్ని చూపించండి" + description_collapse: "తక్కువ చూపించండి" already_used: "ఈ రంగు వేరే వర్గం వాడింది" security: "సెక్యూరిటీ" security_add_group: "సమూహాన్ని జోడించండి" @@ -3475,6 +3462,8 @@ te: review_group_name: "సమూహం పేరు" require_topic_approval: "అన్ని కొత్త విషయాలకు మోడరేటర్ ఆమోదం అవసరం" require_reply_approval: "అన్ని కొత్త ప్రత్యుత్తరాలకు మోడరేటర్ ఆమోదం అవసరం" + posting_review_modes: + everyone: "అందరూ" this_year: "ఈ సంవత్సరం" position: "వర్గాల పేజీలో స్థానం:" position_disabled: "కార్యాచరణ క్రమంలో వర్గాలు ప్రదర్శించబడతాయి. జాబితాలలోని వర్గాల క్రమాన్ని నియంత్రించడానికి, 'స్థిర వర్గం స్థానాలు' సెట్టింగ్‌ని ప్రారంభించండి." @@ -3939,7 +3928,17 @@ te: one: "దీని పర్యాయపదం కూడా తొలగించబడుతుంది." other: "దీని %{count} పర్యాయపదాలు కూడా తొలగించబడతాయి." edit_tag: "ట్యాగ్ పేరు మరియు వివరణను సవరించండి" - description: "వివరణ (గరిష్టంగా 1000 అక్షరాలు)" + description: "వివరణ" + settings: + title: "అమరికలు" + general: "సాధారణ" + back: "వెనుకకు" + name: "పేరు" + slug: "స్లగ్" + name_placeholder: "ట్యాగ్ పేరు" + localization: + name: "పేరు" + description: "వివరణ" sort_by: "క్రమబద్ధీకరించండి:" sort_by_count: "గణన ద్వారా" sort_by_name: "పేరు" @@ -4326,7 +4325,6 @@ te: admin_js: type_to_filter: "ఫిల్టర్ చేయడానికి టైప్ చేయండి…" settings: "అమరికలు" - reset_filter: "రీసెట్ చేయండి" admin: title: "డిస్కోర్స్ అడ్మిన్" moderator: "నిర్వాహకుడు" @@ -4338,6 +4336,9 @@ te: reports: title: "అందుబాటులో ఉన్న నివేదికల జాబితా" sidebar_title: "నివేదికలు" + group_traffic: "ట్రాఫిక్" + group_members: "సభ్యులు" + group_other: "ఇతర" config_sections: account: title: "ఖాతా" @@ -4440,6 +4441,9 @@ te: title: "లాగులు" reports: title: "నివేదికలు" + sub_pages: + settings: + title: "అమరికలు" badges: title: "బ్యాడ్జీలు" permalinks: @@ -4482,13 +4486,6 @@ te: default_value: "అప్రమేయ" search: title: "వెతుకు" - result_types: - theme: - one: "థీమ్" - other: "థీమ్స్" - component: - one: "భాగం" - other: "భాగాలు" dashboard: title: "ప్రధాన పేజీ" last_updated: "డాష్‌బోర్డ్ నవీకరించబడింది:" @@ -4556,7 +4553,7 @@ te: all: "అన్ని" view_table: "పట్టిక" view_graph: "గ్రాఫ్" - refresh_report: "రిపోర్టు తాజాపరుచండి" + refresh_report: "రిఫ్రెష్ చేయండి" daily: రోజువారీ monthly: నెలవారీ weekly: వారానికోసారి @@ -5212,7 +5209,6 @@ te: import_web_tip: "థీమ్ కలిగి ఉన్న రిపోజిటరీ" direct_install_tip: "మీరు ఖచ్చితంగా దిగువ జాబితా చేయబడిన రిపోజిటరీ నుండి %{name} ని ఇన్‌స్టాల్ చేయాలనుకుంటున్నారా?" import_web_advanced: "అధునాతన…" - import_file_tip: "థీమ్‌ని కలిగి ఉన్న .tar.gz, .zip లేదా .dcstyle.json ఫైల్" is_private: "థీమ్ ప్రైవేట్ గిట్ రిపోజిటరీలో ఉంది" finish_install: "థీమ్ సంస్థాపనను ముగించండి" last_attempt: "ఇన్‌స్టాలేషన్ ప్రక్రియ పూర్తి కాలేదు, చివరి ప్రయత్నం:" @@ -6028,6 +6024,7 @@ te: enabled: "శోధించదగినది" field_types: text: "వచనం" + date: "తేదీ" confirm: "ఖాయము" dropdown: "డ్రాప్డౌన్" multiselect: "బహుళ ఎంపిక" diff --git a/config/locales/client.th.yml b/config/locales/client.th.yml index 5cbda6d5253a6..d1dd7ebd41b9a 100644 --- a/config/locales/client.th.yml +++ b/config/locales/client.th.yml @@ -6,6 +6,11 @@ th: js: + blocks: + ghost: + status: "สถานะ" + hidden: "ถูกซ่อน" + failed: "ล้มเหลว" number: format: separator: "." @@ -233,6 +238,9 @@ th: pill: "ข้อความที่เกี่ยวข้อง" suggested_topics: pm_title: "ข้อความแนะนำ" + admin_onboarding_banner: + start_posting: + back: "กลับ" about: simple_title: "เกี่ยวกับ" title: "เกี่ยวกับ %{title}" @@ -253,8 +261,6 @@ th: today: "วันนี้" bookmarked: title: "บุ๊กมาร์ก" - edit_bookmark: "แก้ไขบุ๊กมาร์ก" - clear_bookmarks: "ล้างบุ๊กมาร์ก" help: unbookmark: "คลิกเพื่อลบบุ๊กมาร์กทั้งหมดในกระทู้นี้" bookmarks: @@ -263,9 +269,9 @@ th: create: "สร้างบุ๊กมาร์ก" edit: "แก้ไขบุ๊กมาร์ก" not_bookmarked: "บุ๊กมาร์กโพสต์นี้" + topic_bookmark: "หัวข้อ" delete: "ลบบุ๊กมาร์ก" confirm_delete: "คุณแน่ใจหรือไม่ว่าต้องการลบบุ๊กมาร์กนี้ การเตือนความจำจะถูกลบออกด้วย" - confirm_clear: "คุณแน่ใจหรือว่าต้องการล้างบุ๊กมาร์กทั้งหมดจากกระทู้นี้" save: "บันทึก" invalid_custom_datetime: "วันและเวลาที่คุณกรอกไม่ถูกต้อง กรุณาลองอีกครั้ง" list_permission_denied: "คุณไม่ได้รับอนุญาตให้ดูบุ๊กมาร์กของผู้ใช้งานนี้" @@ -871,6 +877,8 @@ th: users: "ผู้ใช้" tags: "แท็ก" apps: "แอป" + calendar_subscriptions: + copied: "คัดลอกแล้ว!" change_password: success: "(อีเมลถูกส่งแล้ว)" in_progress: "(กำลังส่งอีเมล)" @@ -1191,6 +1199,7 @@ th: dismiss_error: "ละทิ้งข้อผิดพลาด" form_kit: optional: ทางเลือก + required: ต้องการ errors: required: "ต้องการ" close: "ปิด" @@ -1613,8 +1622,6 @@ th: bulk: select_all: "เลือกทั้งหมด" clear_all: "ล้างทั้งหมด" - unlist_topics: "กระทู้ที่ไม่ได้แสดง" - delete: "ลบกระทู้" delete_topics_count: other: "ลบกระทู้" dismiss: "ซ่อน" @@ -1625,13 +1632,8 @@ th: dismiss_new: "ซ่อนใหม่" toggle: "สลับการเลือกกระทู้จำนวนมาก" actions: "การดำเนินการจำนวนมาก" - close_topics: "ปิดกระทู้" - archive_topics: "คลังกระทู้" move_messages_to_inbox: "ย้ายไปกล่องขาเข้า" choose_new_category: "เลือกหมวดหมู่ใหม่ให้กระทู้" - selected: - other: "คุณได้เลือก %{count} กระทู้" - change_tags: "แทนที่แท็ก" choose_new_tags: "เลือกแท็กใหม่เพื่อกระทู้เหล่านี้:" changed_tags: "แท็กของกระทู้เหล่านี้ถูกเปลี่ยนแปลง" error_topic_count: @@ -2104,6 +2106,8 @@ th: review_group_name: "ชื่อกลุ่ม" require_topic_approval: "กระทู้ใหม่ทั้งหมดต้องผ่านการอนุมัติจากผู้ดูแลระบบ" require_reply_approval: "คำตอบใหม่ทั้งหมดต้องผ่านการอนุมัติจากผู้ดูแลระบบ" + posting_review_modes: + everyone: "ทุกคน" this_year: "ปีนี้" minimum_required_tags: "จำนวนแท็กขั้นต่ำในกระทู้:" none_subcategory_text: "ไม่มี" @@ -2388,6 +2392,16 @@ th: add_synonyms: "เพิ่ม" delete_tag: "ลบแท็ก" delete_confirm_no_topics: "คุณแน่ใจหรือว่าต้องการลบแท็กนี้" + description: "รายละเอียด" + settings: + title: "การตั้งค่า" + general: "ทั่วไป" + back: "กลับ" + name: "ชื่อ" + name_placeholder: "ชื่อแท็ก" + localization: + name: "ชื่อ" + description: "รายละเอียด" sort_by: "เรียงโดย:" sort_by_count: "นับ" sort_by_name: "ชื่อ" @@ -2542,6 +2556,10 @@ th: remove_muted_tags_from_latest: always: "เสมอ" never: "ไม่เลย" + reports: + group_traffic: "การจราจร" + group_members: "สมาชิก" + group_other: "อื่นๆ" config_sections: account: title: "บัญชี" @@ -2615,6 +2633,10 @@ th: title: "กลุ่ม" backups: title: "สำรอง" + reports: + sub_pages: + settings: + title: "การตั้งค่า" badges: title: "เหรียญ" permalinks: @@ -2643,11 +2665,6 @@ th: default_value: "ค่าเริ่มต้น" search: title: "ค้นหา" - result_types: - setting: - other: "การตั้งค่า" - theme: - other: "ธีม" dashboard: title: "แดชบอร์ด" version: "เวอร์ชัน" @@ -2689,7 +2706,7 @@ th: all: "ทั้งหมด" view_table: "ตาราง" view_graph: "กราฟ" - refresh_report: "โหลดรายงานใหม่" + refresh_report: "รีเฟรช" daily: รายวัน monthly: รายเดือน weekly: รายสัปดาห์ @@ -3300,6 +3317,7 @@ th: title: "แสดงในข้อมูลสาธารณะ" field_types: text: "ข้อความ" + date: "วันที่" confirm: "การยืนยัน" dropdown: "ดร็อปดาวน์" site_text: diff --git a/config/locales/client.tr_TR.yml b/config/locales/client.tr_TR.yml index bff0d4a75bc9d..f27426b5bd03c 100644 --- a/config/locales/client.tr_TR.yml +++ b/config/locales/client.tr_TR.yml @@ -6,6 +6,26 @@ tr_TR: js: + blocks: + ghost: + status: "Durum" + conditions: "Koşullar" + arguments: "Tartışmalar" + container_args: "Konteyner Argümanları" + in_location: "içinde" + hidden: "gizli" + not_registered: "kayıtlı değil" + no_visible_children: "görünürde çocuk yok" + failed: "başarısız" + ghost_reasons: + optional_missing_hint: "Bu isteğe bağlı blok, kayıtlı olmadığı için görüntülenmez." + no_visible_children_hint: "Bu konteyner bloğu, hiçbir alt öğesi görünür olmadığı için görüntülenmez." + condition_failed_hint: "Bu blok, koşulları karşılanmadığı için görüntülenmez." + head_hidden_tail_hint: "Bu blok, `head` konteynerinde başka bir blok önce işlendiği için işlenmez." + carousel: + go_to_slide: "%{index} numaralı slayta git" + previous: "Önceki slayt" + next: "Sonraki slayt" number: format: separator: "." @@ -285,18 +305,31 @@ tr_TR: forwarded: "Yukarıdaki e-postayı iletti" topic_admin_menu: "konu eylemleri" skip_to_main_content: "Ana içeriğe atla" + skip_links_label: "Navigasyon bağlantılarını atla" + skip_to_post: "%{post_number} numaralı gönderiye atla" + skip_to_where_you_left_off: "Bıraktığınız yerden devam edin (yazı %{post_number})" + skip_to_where_you_left_off_last: "Bıraktığınız yerden devam edin (son yanıt, gönderi %{post_number})" + skip_to_last_reply: "Son cevaba atla" + skip_to_top: "En üste atla" skip_user_nav: "Profil içeriğine atla" emails_are_disabled: "Giden tüm e-postalar bir yönetici tarafından devre dışı bırakıldı. Herhangi bir e-posta bildirimi gönderilmeyecek." + emails_are_disabled_no_smtp: "SMTP sunucusu yapılandırılmadığı için giden tüm e-postalar devre dışı bırakılmıştır. Hiçbir tür e-posta gönderilemez." emails_are_disabled_non_staff: "Giden e-posta, personel olmayan kullanıcılar için devre dışı bırakıldı." software_update_prompt: message: "Bu siteyi güncelledik, işlerin sorunsuz bir şekilde devam etmesi için lütfen yenileyin." dismiss: "Kapat" + notifications_tracking: + tooltip: "Bildirim seviyesi: %{level}" back_button: "Geri" welcome_banner: header: + new_members: "Hoş geldiniz, %{preferred_display_name}!" logged_in_members: "Tekrar hoş geldiniz %{preferred_display_name}!" anonymous_members: "%{site_name}'a hoş geldiniz!" search_placeholder: "Ara" + impersonation: + notice: "%{username} kimliğine bürünüyorsunuz." + stop: "Kişiyi taklit etmeyi bırak" themes: default_description: "Varsayılan" broken_theme_alert: "Bir tema/bileşende hata olması nedeniyle siteniz çalışmayabilir. Daha fazla bilgi için tarayıcı konsolunu kontrol edin." @@ -306,12 +339,28 @@ tr_TR: broken_page_change_alert: "Bir onPageChange işleyicisi hata verdi. Daha fazla bilgi için tarayıcı geliştirici araçlarını kontrol edin." broken_plugin_alert: "'%{name}' eklentisinden kaynaklanıyor" broken_transformer_alert: "Bir hata oluştu. Siteniz düzgün çalışmayabilir." + broken_block_alert: "Bir blok yapılandırma hatası algılandı. Ayrıntılar için tarayıcı konsolunu kontrol edin." + broken_block_factory_alert: "Bir blok yüklenemedi. Bazı kullanıcı arayüzü öğeleri doğru görüntülenmeyebilir." critical_deprecation: notice: "[Yönetici Duyurusu] %{source}, güncellenmesi gereken kod içeriyor. (kimlik:%{id})" learn_more_link: "(daha fazla bilgi edinin)" theme_source: "Tema '%{name}'" plugin_source: "Eklenti \"%{name}\"" unknown_source: "Tema veya eklentilerinizden biri" + dev_tools: + drag_to_move: "Sürükleyerek taşıyın" + toggle_plugin_outlet_debug: "Eklenti çıkış hata ayıklamasını aç/kapat" + toggle_block_debug: "Blok hata ayıklamayı aç/kapat" + block_debug: + outlet_boundaries: "Çıkış sınırları" + visual_overlay: "Görsel katman" + ghost_blocks: "Hayalet bloklar" + condition_debugging: "Durum hata ayıklama" + toggle_safe_mode: "Güvenli modu aç/kapat" + toggle_verbose_localization: "Ayrıntılı yerelleştirmeyi aç/kapat" + toggle_mobile_view: "Mobil görünümü aç/kapat" + disable_dev_tools: "Geliştirici araçlarını devre dışı bırak" + toggle_upcoming_changes_debug: "Yaklaşan değişikliklerin hata ayıklama modunu aç/kapat" s3: regions: ap_northeast_1: "Asya Pasifik (Tokyo)" @@ -401,7 +450,38 @@ tr_TR: pill: "Önerilen" pm_title: "Önerilen Mesajlar" admin_onboarding_banner: + launch_in_easy_steps: "%{step_count} kolay adımda başlatın" + congrats_onboarding_complete: "Onboarding sürecini tamamladığınız için tebrikler!" + invite_collaborators: + title: "İş Ortaklarını Davet Et" + description: "İlk üyeler, topluluğunuzu hayata geçirmeye yardımcı olur" + action: "Davet oluştur" + start_posting: + title: "Paylaşmaya Başla" + description: "İnsanlara birlikte konuşacakları bir konu verin" + action: "Fikirleri gör" + choose_option: "Nasıl başlamak istersiniz?" + predefined_topics: "Buz kırıcı şablonlar" + predefined_topics_subtitle: "Yeni üyelere konuşacak bir konu verin, düzenlemek için bir şablon seçin ve kendinize ait hale getirin." + predefined_topics_description: "Sohbet başlatıcılar koleksiyonundan seçim yapın ve tartışmaları başlatın" + use_predefined: "Şablonlara göz atın" + back: "Geri" + icebreakers: + fun_facts: + title: "Hakkında ilginç bilgiler nelerdir?" + body: "Herkese merhaba! Bu yeni topluluğu başlatmaktan dolayı çok heyecanlıyım. Başlangıç olarak, kendimizle ilgili eğlenceli bir bilgi paylaşalım. Ben başlayayım: Yürüyüş yapmayı ve yeni parkurları keşfetmeyi seviyorum! Sizinle ilgili ilginç bir şey nedir?" + coolest_thing_you_have_seen_today: + title: "Bugün gördüğün en havalı şey neydi?" + body: "Bugün gördüğün veya yaşadığın en havalı şey neydi? Güzel bir gün batımı ya da rastgele bir iyilik hareketi gibi herhangi bir şey olabilir. Ben başlayayım: Bir köpeğin yaşlı bir insana karşıdan karşıya geçmesine yardım ettiğini gördüm!" + introduce_yourself: + title: "Kendinizi tanıtın" + body: "Topluluğa hoş geldiniz! Birbirimizi tanıyalım. Lütfen kendinizi tanıtın ve ilgi alanlarınız hakkında biraz bilgi paylaşın. Ben başlayayım: Teknolojiye tutkuyla bağlıyım ve başkalarına öğretmeyi çok seviyorum!" + what_is_your_favorite_food: + title: "En sevdiğin yemek nedir?" + body: "En sevdiğiniz yiyecekleri toplulukla paylaşın! Ben başlayayım: Pizza severim, özellikle ekstra peynir ve sucuklu olanı." spread_the_word: + title: "Haberi yayalım!" + description: "Ağınızdaki herkesle bir bağlantı paylaşın" action: "Bağlantıyı kopyala" copied_to_clipboard: "Bağlantı panoya kopyalandı!" about: @@ -485,8 +565,10 @@ tr_TR: other: "%{count} yıl önce oluşturuldu" bookmarked: title: "Yer İmi" - edit_bookmark: "Yer İmini Düzenle" - clear_bookmarks: "Yer İmlerini Temizle" + edit_bookmark: + one: "Yer imini düzenle" + other: "Yer imlerini düzenle" + delete_bookmarks: "Tüm yer imlerini sil" help: bookmark: "Bu konuyu yer imlerine eklemek için tıklayın" edit_bookmark: "Bu konuda hakkında bir gönderi üzerine yer imini düzenlemek için tıklayın" @@ -505,12 +587,18 @@ tr_TR: clear_reminder: "Anımsatıcıyı temizle" edit: "Yer imini düzenle" not_bookmarked: "bu gönderiye yer imi ekle" + topic_bookmark: "Konu" + post_bookmark: "#%{post_number} numaralı gönderi" + jump_to_post: "#%{post_number} numaralı gönderiye git" + bookmark_topic: "Konuyu yer imlerine ekle" + edit_topic_bookmark: "Konu yer imini düzenle" + delete_topic_bookmark: "Konu yer imini sil" remove_reminder_keep_bookmark: "Anımsatıcıyı kaldır ve yer imini tut" created_with_reminder: "Bu gönderiyi %{date} tarihli bir anımsatıcı ile yer imlerine eklediniz. %{name}" created_with_reminder_generic: "Bunu %{date} tarihli bir anımsatıcıyla yer imlerine eklediniz. %{name}" delete: "Yer İmini Sil" confirm_delete: "Bu yer imini silmek istediğinizden emin misiniz? Anımsatıcı da silinir." - confirm_clear: "Bu konudaki tüm yer imlerinizi silmek istediğinize emin misiniz?" + confirm_clear: "Bu konudaki tüm yer imlerini silmek istediğinizden emin misiniz?" save: "Kaydet" no_timezone: 'Henüz saat dilimi belirlemediniz. Anımsatıcı ayarlayamazsınız. Profilinizde bir saat dilimi belirleyin.' invalid_custom_datetime: "Sağladığınız tarih ve saat geçersiz, lütfen tekrar deneyin." @@ -563,6 +651,11 @@ tr_TR: resume: "Sürdür" remove: "Kaldır" remove_confirmation: "Bu taslağı silmek istediğinize emin misiniz?" + bulk_delete: "Seçilenleri sil" + bulk_delete_confirmation: "Taslakları sil" + bulk_delete_message: + one: "Bu taslağı silmek istediğinize emin misiniz?" + other: "Bu %{count} taslağı silmek istediğinizden emin misiniz?" new_topic: "Yeni konu taslağı" new_private_message: "Yeni kişisel ileti taslağı" edit_topic: "Konu taslağını düzenle" @@ -573,6 +666,11 @@ tr_TR: other_drafts: one: "+%{count} taslak daha" other: "+%{count} taslak daha" + embed_mode: + storage_access_prompt: "Zaten %{site_name} hesabınız mı var? Oturumunuza erişim izni vererek kendi adınıza yorum yapabilirsiniz." + allow_access: "Erişime İzin Ver" + continue_as_guest: "Misafir olarak devam et" + be_first_to_reply: "İlk yanıtı siz verin!" topic_count_all: one: "%{count} yeni konuya bakın" other: "%{count} yeni konuya bakın" @@ -631,24 +729,26 @@ tr_TR: review: show_more: "Daha fazla göster" show_less: "Daha az göster" + back_to_queue: "Kuyruğa geri dön" + editing_post: "Gönderi düzenleniyor…" order_by: "Şuna göre sırala" date_filter: "Şu tarihler arasında gönderildi" in_reply_to: "şuna yanıt olarak" filtered_flagged_by: "Bayrak ekleyen kişi:" unknown: title: - one: "Devre dışı bırakılmış eklentiden bekleyen incelenebilir dosyalarınız var:" - other: "Devre dışı bırakılmış eklentilerden bekleyen incelenebilir dosyalarınız var:" + one: "Devre dışı bırakılmış eklentiden bekleyen inceleme kuyruğu öğeleriniz var:" + other: "Devre dışı bırakılmış eklentilerden bekleyen inceleme kuyruğu öğeleriniz var:" instruction: "İlgili eklentiyi etkinleştirmediğiniz sürece düzgün görüntülenemezler. Lütfen eklentiyi etkinleştirin ve sayfayı yenileyin. Alternatif olarak, bunları görmezden gelebilirsiniz. Daha fazlasını öğrenin..." reviewable_unknown_source: "%{reviewableType} (bilinmeyen eklenti)" reviewable_known_source: "%{reviewableType} (\"%{pluginName}\" eklentisinden)" ignore_all: "Tümünü yok say" enable_plugins: "Eklentileri etkinleştir" - delete_confirm: "Devre dışı bırakılan eklentiler tarafından oluşturulan tüm incelemeleri silmek istediğinizden emin misiniz?" - ignore_success: "Devre dışı bırakılan eklentiler tarafından oluşturulan tüm incelemeler silindi." + delete_confirm: "Devre dışı bırakılmış eklentiler tarafından oluşturulan tüm inceleme kuyruğu öğelerini silmek istediğinizden emin misiniz?" + ignore_success: "Devre dışı bırakılmış eklentiler tarafından oluşturulan tüm inceleme kuyruğu öğeleri silinmiştir." explain: why: "bu ögenin neden kuyruğa girdiğini açıklayın" - title: "İncelenebilir Puanlama" + title: "İnceleme Kuyruğu Öğesi Puanlaması" formula: "Formül" subtotal: "Ara toplam" total: "Toplam" @@ -662,10 +762,10 @@ tr_TR: title: "Bayrakları tarihsel olarak kabul edilen kullanıcılara bonus verilir." trust_level_bonus: name: "güven seviyesi" - title: "Güven seviyesi yüksek kullanıcılar tarafından oluşturulan, incelenebilir ögeler daha yüksek bir puana sahiptir." + title: "Daha yüksek güven düzeyine sahip kullanıcılar tarafından oluşturulan bayraklar daha yüksek puan alır." type_bonus: name: "tür bonusu" - title: "Bazı incelenebilir türlere daha yüksek öncelikli olmaları için personel tarafından bonus atanabilir." + title: "Belirli bayrak türlerine, personel tarafından daha yüksek öncelik verilmesi için bonus atanabilir." revise_and_reject_post: title: "Gözden geçir" reason: "Sebep" @@ -674,13 +774,17 @@ tr_TR: custom_reason: "Sebebi net bir şekilde açıklayın" other_reason: "Diğer..." optional: "i̇steğe bağlı" - stale_help: "Bu incelenebilir, %{username} tarafından çözüldü." + stale_help: "Bu sorun %{username} tarafından çözülmüştür." claim_help: optional: "Başkalarının incelemesini engellemek için bu ögeyi talep edebilirsiniz." required: "Ögeleri inceleyebilmek için önce talepte bulunmalısınız." claimed_by_you: "Bu ögeyi talep ettiniz ve inceleyebilirsiniz." claimed_by_other: "Bu öge yalnızca %{username} adlı kullanıcı tarafından incelenebilir." automatically_claimed_by: "Bu ürün şu anda %{username} tarafından inceleniyor." + claim: + title: "Bu konuyu talep et" + unclaim: + help: "Bu talebi kaldır" awaiting_approval: "Onay Bekleniyor" delete: "Sil" settings: @@ -702,6 +806,7 @@ tr_TR: filtered_topic: "Tek bir konu içerisinde incelenebilir içerikleri filtrelediniz." filtered_user: "Bayrak eklenen kullanıcı" filtered_reviewed_by: "İnceleyen:" + filtered_claimed_by: "Bayrak, tarafından sahiplenildi" show_all_topics: "bütün konuları göster" deleted_post: "(gönderi silindi)" deleted_user: "(kullanıcı silindi)" @@ -773,10 +878,13 @@ tr_TR: created_at: "Oluşturulma:" created_at_asc: "Oluşturulma (ters):" priority: + title: "Minimum öncelik" any: "(hiç)" low: "Düşük" medium: "Orta" high: "Yüksek" + active_filters: "Aktif filtreler:" + clear_filter: "%{filter} öğesini kaldır" conversation: view_full: "konuşmanın tamamını görüntüle" scores: @@ -819,6 +927,10 @@ tr_TR: is_this_post: "Bu %{reviewable_type} %{reviewable_human_score_types} özelliği taşıyor mu?" delimiter: "veya" something_else_wrong: "Bu %{reviewable_type} ile ilgili bir sorun mu var?" + approve_user: "Bu kullanıcıyı onaylıyor musunuz?" + suspect_user: "Bu kullanıcı spam mı?" + approve_post: "Bu gönderiyi onaylıyor musunuz?" + approve_topic: "Bu konuyu onaylıyor musunuz?" types: reviewable_flagged_post: title: "Bayrak Eklenen Gönderi" @@ -837,27 +949,43 @@ tr_TR: title: "Gönderi" noun: "gönderi" reviewable_ai_chat_message: + title: "AI tarafından işaretlenmiş sohbet mesajı" noun: "sohbet mesajı" reviewable_ai_post: + title: "AI tarafından işaretlenen gönderi" noun: "gönderi" + reviewable_post_voting_comment: + title: "Bildirilen yorum" + noun: "yorum" flagged_as: "Bayrak ekleme nedeni:" + post_flagged_as: "Şu şekilde işaretlenmiş gönderi:" + chat_flagged_as: "Sohbet şu şekilde işaretlendi:" + queued_post_label: "Sıraya alınmış gönderi" + queued_topic_label: "Sıraya alınmış konu" user_label: "Kullanıcı" + assigned_to: "Atanan gönderi" moderator_actions: "Moderatör eylemleri" timeline_and_notes: "Zaman çizelgesi ve notlar" timeline: target_created: "Gönderi oluşturuldu" target_created_by: "Gönderi %{username} tarafından oluşturuldu · %{relativeDate}" target_deleted: "Gönderi silindi" + target_deleted_by: "%{username} tarafından silinen gönderi · %{relativeDate}" flagged: "Bayrak eklendi" flagged_as_by: "%{username} tarafından %{flagReason} nedeniyle bayrak eklendi · %{relativeDate}" claimed: "Alındı" claimed_by: "%{username} tarafından alındı · %{relativeDate}" + unclaimed_by: "%{username} tarafından sahiplenilmemiştir · %{relativeDate}" reviewed: "İncelendi" + approved_by: "Onaylayan: %{username} · %{relativeDate}" + rejected_by: "%{username} tarafından reddedildi · %{relativeDate}" + ignored_by: "%{username} tarafından yok sayıldı · %{relativeDate}" view_conversation: "kişisel mesajı görüntüle" note_added: "Moderatör notu" note_added_by: "%{username} tarafından moderatör notu · %{relativeDate}" no_events: "Gösterilecek zaman çizelgesi etkinliği yok" notes: + add_note_description: "Diğer moderatörlere bağlam sağlamak için bir not ekleyin." add_note_button: "Not ekle" placeholder: "Notunuzu buraya yazın..." chars_remaining: "%{count} karakter kaldı" @@ -870,6 +998,7 @@ tr_TR: review_user: "Kullanıcı" need_help: "Yardıma mı ihtiyacınız var?" copy_link: "Bağlantıyı kopyala" + copy_permalink_title: "bu incelenebilir öğenin bağlantısını panoya kopyala" copy_link_feedback: "Bağlantı kopyalandı" view_source: "Kaynağı görüntüle" insights: @@ -878,15 +1007,28 @@ tr_TR: flagged_by_users: one: "%{count} benzersiz kullanıcı tarafından bayrak eklendi" other: "%{count} benzersiz kullanıcı tarafından bayrak eklendi" + similar_posts: "Geçmişteki ihlaller" + flagged_in_timeframe: + one: "%{count} onaylanmış bayrak" + other: "%{count} onaylanmış bayrak" + user_activity: "Kullanıcı bilgileri" activities: + joined_on: "katılım tarihi: %{joinDate}" trust_level: "güven seviyesi: %{trustLevelName}" posts: one: "%{count} gönderi" other: "%{count} gönderi" + moderation_history: + label: "Moderasyon geçmişi" + silenced: "Susturuldu: %{count}" + suspended: "Askıya alındı: %{count}" + rejected_posts: "Reddedilen gönderiler: %{count}" solution_marked: "Çözüm işaretlendi" topic_has_solution: "Bu konunun bir çözümü var" visibility: "Görünürlük" + topic_unlisted: "Bu konu listelenmemiştir ve yalnızca doğrudan bağlantı yoluyla erişilebilir." help: + community_moderation_guide: "Bu topluluğun moderasyon kılavuzu" moderation_guide: "Discourse moderasyon kılavuzu" flag_priorities: "Kullanıcı itibarını ve bayrak önceliklerini yönetme" spam_detection: "İstenmeyen içerik tespiti" @@ -1008,6 +1150,7 @@ tr_TR: add_members: title: "%{group_name} grubuna Kullanıcı ekleyin" description: "Gruba davet etmek istediğiniz kullanıcıları birer birer veya virgülle ayrılmış bir liste olarak yapıştırarak girin :" + description_usernames_only: "Gruba davet etmek istediğiniz kullanıcıları birer birer veya virgülle ayrılmış bir liste olarak yapıştırarak girin :" usernames_placeholder: "kullanıcı adları" usernames_or_emails_placeholder: "kullanıcı adı veya e-posta" notify_users: "Kullanıcıları bilgilendir" @@ -1035,6 +1178,7 @@ tr_TR: title: Etkileşim posting: Gönderiliyor notification: Bildirim + self_lockout: "Kendi erişiminizi kaldıracak şekilde grup görünürlüğünü değiştirmek üzeresiniz. Devam etmek istediğinizden emin misiniz?" email: title: "E-posta" enable_smtp: "SMTP'yi etkinleştir" @@ -1047,6 +1191,7 @@ tr_TR: smtp_title: "SMTP" smtp_instructions: "Grup için SMTP'yi etkinleştirdiğinizde, grubun gelen kutusundan gönderilen tüm e-postalar, forumunuz tarafından gönderilen diğer e-postalar için yapılandırılmış posta sunucusu yerine burada belirtilen SMTP ayarları gözetilerek gönderilir." additional_settings: "Ek Ayarlar" + smtp_disable_confirm: "SMTP'yi devre dışı bırakırsanız, tüm SMTP ayarları sıfırlanacak ve ilgili işlevler devre dışı bırakılacaktır. Devam etmek istediğinizden emin misiniz?" prefill: title: "Şu ayarlarla önceden doldurun:" gmail: "Gmail" @@ -1165,6 +1310,8 @@ tr_TR: make_owner_description: "%{username} adlı kullanıcıyı bu grubun sahibi yap" remove_owner: "Sahiplikten çıkar" remove_owner_description: "%{username} adlı kullanıcıyı grup sahipliğinden çıkar" + remove_member_self_lockout: "Bu gruptan ayrıldığınızda, grubu yönetme erişiminiz iptal edilecektir. Devam etmek istediğinizden emin misiniz?" + remove_owner_self_lockout: "Sahip olarak kendinizi kaldırmak, bu grubu yönetme erişiminizi iptal edecektir. Devam etmek istediğinizden emin misiniz?" make_primary: "Birincil yap" make_primary_description: "Bunu %{username} için birincil grup yap" remove_primary: "Birincillikten çıkar" @@ -1292,12 +1439,16 @@ tr_TR: one: "Kategoriler (%{count} tane daha)…" other: "Kategoriler (%{count} tane daha)…" ip_lookup: + title: IP adresi hostname: Sunucu Adı location: Konum location_not_found: (bilinmeyen) organisation: Organizasyon phone: Telefon other_accounts: "Bu IP adresine sahip diğer hesaplar:" + other_accounts_with_ip: + one: "Bu IP adresine sahip %{count} diğer hesap" + other: "Bu IP adresine sahip diğer %{count} hesap" delete_other_accounts: one: "%{count} tanesini sil" other: "%{count} tanesini sil" @@ -1333,8 +1484,16 @@ tr_TR: private_message: "Mesaj" private_messages: "Mesajlar" upcoming_changes: + title: "Yaklaşan değişiklikler" for_user: + upcoming_change: "Yaklaşan değişiklik" enabled: "Etkin mi?" + why: "Neden?" + why_reasons: + not_in_specific_groups: "Kullanıcı, bu değişiklik için gerekli olan belirli gruplarda yer almıyor." + in_specific_groups: "Kullanıcı, bu değişiklik için gerekli olan belirli gruplarda yer almaktadır." + enabled_for_everyone: "Bu değişiklik tüm üyeler için etkinleştirilmiştir." + enabled_for_no_one: "Bu değişiklik tüm üyeler için devre dışıdır." user_notifications: filters: filter_by: "Şuna göre filtrele" @@ -1463,6 +1622,7 @@ tr_TR: enable_smart_lists: "Bestecide yazarken akıllı listeleri etkinleştirin" enable_defer: "Konuları okunmadı olarak işaretlemeyi etkinleştir" enable_markdown_monospace_font: "Bestecinin Markdown modunda monospace yazı tipini kullanın" + show_original_content: "Çevrilmiş içerik yerine orijinal içeriği göster. Konu içinde de bu ayar değiştirilebilir." experimental_sidebar: enable: "Kenar çubuğunu etkinleştir" options: "Seçenekler" @@ -1539,6 +1699,9 @@ tr_TR: undo_revoke_access: "Erişim İptalini Geri Al" api_approved: "Onaylandı:" api_last_used_at: "Son kullanım zamanı:" + api_show_permissions: + one: "Verilen izinler (%{count})" + other: "Verilen izinler (%{count})" theme: "Tema" save_to_change_theme: 'Tema "%{save_text}" düğmesine tıklandıktan sonra güncellenir' home: "Varsayılan Ana Sayfa" @@ -1547,6 +1710,9 @@ tr_TR: flags_given: one: '%{count} faydalı bayrak' other: '%{count} faydalı bayrak' + flags: + one: '%{count} bayrak' + other: '%{count} bayrak' deleted_posts: one: '%{count} silinmiş gönderi' other: '%{count} silinmiş gönderi' @@ -1655,17 +1821,37 @@ tr_TR: interface: "Arayüz" apps: "Uygulamalar" navigation_menu: "Navigasyon menüsü" + upcoming_changes: "Yaklaşan değişiklikler" + calendar_subscriptions: "Takvim" + calendar_subscriptions: + description: "Favori takvim uygulamanızla (Google Takvim, Apple Takvim, Outlook vb.) senkronize etmek için abonelik URL'leri oluşturun. Bu URL'ler, hesabınızdaki takvim etkinliklerine (hatırlatıcılar, takvim etkinlikleri vb.) yönlendiren özel bağlantılardır. Oluşturulan abonelik URL'lerini istediğiniz zaman iptal edebilir veya yenileyebilirsiniz." + generate: "Abonelik URL'leri Oluştur" + regenerate: "URL'leri Yeniden Oluştur" + regenerate_confirm: "Bu işlem, mevcut takvim abonelik URL'lerinizi geçersiz kılacaktır. Eski URL'leri kullanan tüm takvim uygulamaları güncellemeleri almayı durduracaktır. Devam etmek istiyor musunuz?" + revoke: "Aboneliği İptal Et" + revoke_confirm: "Bu işlem, takvim abonelik URL'lerinizi iptal edecektir. Bu URL'leri kullanan tüm takvim uygulamaları güncellemeleri almayı durduracaktır. Devam etmek istiyor musunuz?" + urls_warning: "Abonelik URL'leri hazır! Takvim uygulamanıza eklemek için aşağıdaki düğmelere tıklayın. Not: Bu URL'ler yalnızca bir kez görüntülenir." + bookmarks: "Yer imi hatırlatıcıları" + bookmarks_description: "Hatırlatma tarihli yer imleriniz" + copy: "URL'yi kopyala" + copied: "Kopyalandı!" + add_to_google: "Google Takvim" + add_to_outlook: "Microsoft Outlook" + add_to_apple: "Apple Takvimi" + active_subscription: "Etkin bir takvim aboneliğiniz var." change_password: success: "(e-posta gönderildi)" in_progress: "(e-posta gönderiliyor)" error: "(hata)" action: "Şifre Sıfırlama E-postası Gönder" + staged_user: "Aşamalı kullanıcılar şifre sıfırlama e-postalarını alamazlar." set_password: "Şifre Belirle" choose_new: "Yeni bir şifre seç" choose: "Şifre seç" verify_identity: "Devam etmek için lütfen kimliğinizi doğrulayın." title: "Şifre Sıfırlama" remove: "Şifreyi Kaldır" + remove_disabled: "Şifreyi kaldırmadan önce, hesapta en az bir başka oturum açma yöntemi (örneğin, bir anahtar veya bağlantılı bir harici hesap) bulunmalıdır." remove_detail: "Hesap şifrenizi sıfırlamadığınız sürece artık hesabınıza erişilemeyecektir." second_factor_backup: title: "İki Adımlı Yedek Kodları" @@ -1932,6 +2118,7 @@ tr_TR: first_time_and_daily: "Bir gönderi ilk kez beğenildiğinde ve günlük" first_time: "Gönderi ilk kez beğenildiğinde" never: "Asla" + notify_on_linked_posts: "Birisi benim gönderilerimden birinin bağlantısını paylaştığında bildirim gönder" email_previous_replies: title: "Önceki yanıtları e-postaların sonuna ekle" unless_emailed: "daha önce gönderilmediyse" @@ -1991,6 +2178,7 @@ tr_TR: redeemed_tab_with_count: "Kullanıldı (%{count})" invited_via: "Davet" invited_via_link: "bağlantı %{key} (%{count} / %{max} kullanıldı)" + generating_link: "Bağlantı oluşturuluyor..." groups: "Gruplar" topic: "Konu" sent: "Oluşturulma/Son Gönderilme" @@ -2254,9 +2442,17 @@ tr_TR: no_results: "Sonuç yok" search: "Ara…" label: "Seçenekleri belirleyin" + d_otp: + screen_reader: + one: Bir sayı girin + other: '%{count} sayı girin' form_kit: reset: Sıfırla optional: i̇steğe bağlı + required: zorunlu + errors_summary_title: + one: "Devam etmek için bu hatayı düzeltin" + other: "Devam etmek için bu hataları düzeltin" dirty_form: "Değişikliklerinizi göndermediniz! Ayrılmak istediğinizden emin misiniz?" errors: starts_with: "%{prefix} ile başlamalı" @@ -2276,6 +2472,10 @@ tr_TR: too_short: one: "En az %{count} karakter olmalı" other: "En az %{count} karakter olmalı" + color: + available_presets: "Mevcut ön ayarlar" + already_used: "Zaten kullanılmış" + edit_presets: "Renk ön ayarlarını düzenle" close: "Kapat" assets_changed_confirm: "Bu site yakın zamanda bir yazılım güncellemesi aldı. Şimdi en son sürümünü edinmek ister misiniz?" logout: "Çıkış yaptınız." @@ -2322,6 +2522,7 @@ tr_TR: } site ayar limitini aştı. learn_more: "Daha fazla bilgi…" learn_more_with_link: "Daha fazla bilgi edinin…" + feedback_with_link: "Geri bildirim…" mute: Sessize al unmute: Sesi aç last_post: Gönderildi @@ -2478,6 +2679,7 @@ tr_TR: admin_not_allowed_from_ip_address: "Bu IP adresinden yönetici olarak giriş yapamazsınız." resend_activation_email: "Etkinleştirme e-postasını yeniden göndermek için buraya tıklayın." omniauth_disallow_totp: "Hesabınızda iki adımlı kimlik doğrulama etkin. Lütfen şifrenizle giriş yapın." + works_with: "Şunlarla çalışır" activate_account: "Hesabı aktive et" resend_title: "Etkinleştirme e-postasını yeniden gönder" change_email: "E-posta adresini değiştir" @@ -2548,7 +2750,7 @@ tr_TR: google_classic: "Google Klasik (Noto Emoji'ye geçildi)" facebook_messenger: "Facebook Messenger (Standard'a geçildi)" openmoji: OpenMoji - standard: Standard + standard: Standart fluentui: Fluent Emoji noto: Noto Emoji twemoji: Twemoji @@ -2596,6 +2798,7 @@ tr_TR: one: "bu kategorideki %{count} konu" other: "bu kategorideki %{count} konu" read_only: "salt okunur" + read_only_description: "Bu kategori salt okunur olduğundan, bu konu için seçemezsiniz." timezone_input: ambiguous_ist: "IST belirsiz, lütfen belirli bir saat dilimi seçin (ör.: Asya/Kalküta)" select_kit: @@ -2620,6 +2823,12 @@ tr_TR: filter_for_more: Daha fazlası için filtrele… categories_admin_dropdown: title: "Kategorileri yönetin" + tag_category_admin_dropdown: + title: "Kategori ve etiket ayarları" + edit_category: "Kategoriyi düzenle" + edit_category_description: "%{badge} ayarlarını düzenle" + edit_tag: "Etiketi düzenle" + edit_tag_description: "%{badge} ayarlarını düzenle" bulk_select_topics_dropdown: title: "Toplu Eylemler" bulk_select_bookmarks_dropdown: @@ -2650,6 +2859,18 @@ tr_TR: medium_dark_tone: Orta koyu cilt tonu dark_tone: Koyu cilt tonu default: Özel emoji'ler + filter_input: + clear: "Filtreyi temizle" + d_icon_grid_picker: + select_icon: "Simgeyi seç" + search_placeholder: "Arama simgeleri..." + no_results: "Simge bulunamadı" + results_count: + one: "%{count} simge bulundu" + other: "%{count} simge bulundu" + favorites: "Favoriler" + selected_icon: "Seçilen simge: %{iconName}" + clear: "Simgeyi temizle" shared_drafts: title: "Paylaşılan Taslaklar" notice: "Bu konuyu yalnızca paylaşılan taslaklar yayınlayabilenler görebilir." @@ -2681,8 +2902,13 @@ tr_TR: title: "Gönderi çevriliyor" select: "Çeviri seç" save: "Çeviriyi kaydet" + original_content: "Orijinal gönderi" + translation_preview: "Çeviri önizlemesi" + original: "Orijinal" translation: "Çeviri" + no_translation_yet: "Çevirinin önizlemesini görmek için yazmaya başlayın..." placeholder: "Gönderinin çevirisini buraya girin..." + show_raw_markdown: "Ham verileri göster" group_mentioned_limit: one: "Uyarı! %{group} grubundan bahsettiniz; ancak bu grubun yönetici tarafından yapılandırılan %{count} kullanıcılık bahsetme sınırından daha fazla üyesi var. Kimseye bildirim gönderilmeyecek." other: "Uyarı! %{group} grubundan bahsettiniz; ancak bu grubun yönetici tarafından yapılandırılan %{count} kullanıcılık bahsetme sınırından daha fazla üyesi var. Kimseye bildirim gönderilmeyecek." @@ -2737,7 +2963,9 @@ tr_TR: create_shared_draft: "Paylaşılmış Taslak oluştur" edit_shared_draft: "Paylaşılmış Taslağı Düzenle" title: "Veya %{modifier}Enter tuşuna basın" + save_and_close: "Kaydet ve kapat" discard: "Kapat" + draft_saved: "Taslak kaydedildi!" users_placeholder: "Kullanıcı veya grup ekleyin" title_placeholder: "Tek cümleyle açıklamak gerekirse bu tartışmanın konusu nedir?" title_or_link_placeholder: "Buraya başlık yazın veya bir bağlantı yapıştırın" @@ -2790,12 +3018,31 @@ tr_TR: upload_description: "yükleme açıklamasını buraya girin" olist_title: "Numaralandırılmış liste" ulist_title: "Madde işaretli liste" + list_title: "Listeler" list_item: "Liste ögesi" toggle_direction: "Yönü aç/kapat" + apply_wrap_title: "Sargı uygulayın" wrap_modal: + title: "Sargıyı Düzenle" + name_label: "Sargı Adı" + attributes_label: "Özellikler" + add_attribute: "Öznitelik ekle" + remove_attribute: "Özniteliği kaldır" apply: "Uygula" + unwrap: "Paketi aç" + no_attributes: "Henüz hiçbir öznitelik eklenmedi." + wrap_text: "İçeriği sarın" help: "Markdown Düzenleme Yardımı" + collapse: "Besteci panelini küçült" + open: "Besteci panelini aç" + abandon: "Besteciyi kapat ve taslağı sil" + edit_reason: "Düzenleme nedeninizi girin" + enter_fullscreen: "Tam ekran besteci moduna gir" + exit_fullscreen: "Tam ekran besteci modundan çık" exit_fullscreen_prompt: "Tam ekrandan çıkmak için ESC tuşuna basın" + show_toolbar: "Besteci araç çubuğunu göster" + hide_toolbar: "Besteci araç çubuğunu gizle" + peek_mode_toggle: "Göz atma modunu aç/kapat" modal_ok: "Tamam" cant_send_pm: "Üzgünüz, %{username} adlı kullanıcıya mesaj gönderemezsiniz." create_message_error: "Üzgünüz, bu mesaj oluşturulurken bir hata oluştu. Lütfen tekrar deneyin." @@ -2842,6 +3089,7 @@ tr_TR: desc: "En son yanıt tarihini değiştirmeden yanıtla" toggle_unlisted: label: Listeden kaldırılanı aç/kapat + desc: "Listelenmemiş konulara yalnızca doğrudan bağlantı ile erişilebilir." reload: "Yeniden Yükle" ignore: "Yok say" image_alt_text: @@ -2852,7 +3100,14 @@ tr_TR: zoom_out: "Görüntü boyutunu küçült" zoom_in: "Görüntü boyutunu artır" remove: "Görüntüyü kaldır" + add_to_grid: "Izgaraya ekle" + move_outside_grid: "Izgara dışına taşı" image: "resim" + grid_label: "Bu, bir grid olarak görüntülenecektir." + grid_mode_grid: "Izgara" + grid_mode_carousel: "Atlıkarınca" + grid_mode_title: "Resim galerisi stilini %{mode} olarak ayarla" + remove_grid: "Izgarayı kaldır" image_scale_button: "Görüntüyü %%{percent} oranına ölçeklendir" delete_image_button: Görüntüyü Sil toggle_image_grid: Resim ızgarasını aç/kapat @@ -2862,6 +3117,7 @@ tr_TR: remove: "Bağlantıyı kaldır" visit: "Bağlantıyı harici sekmede aç" link_copied: "Bağlantı kopyalandı!" + unsupported_token: "Zengin metin düzenleyici bu yazıda kullanılan tüm özellikleri desteklemiyor; sizi Markdown düzenleyicisine yönlendiriyor." notifications: tooltip: regular: @@ -2931,6 +3187,17 @@ tr_TR: votes_released: "%{description} - tamamlandı" new_features: "Yeni özellikler mevcut!" admin_problems: "Sitenizin kontrol panelinde yeni öneriler mevcut" + upcoming_changes: + available: + title: "Yaklaşan değişiklikler" + description: "'%{changeName}' önizleme için kullanılabilir" + description_two: "'%{changeName1}‘ ve ’%{changeName2}' önizleme için kullanılabilir." + description_many: "'%{changeName}' ve %{otherChangeCount} daha fazla değişiklik önizleme için mevcuttur." + automatically_promoted: + title: "Yaklaşan değişiklikler" + description: "'%{changeName}' otomatik olarak etkinleştirildi" + description_two: "'%{changeName1}‘ ve ’%{changeName2}' otomatik olarak etkinleştirildi" + description_many: "'%{changeName}' ve %{otherChangeCount} daha fazla değişiklik otomatik olarak etkinleştirildi" dismiss_confirmation: body: default: @@ -2987,7 +3254,10 @@ tr_TR: membership_request_consolidated: "yeni üyelik talepleri" reaction: "yeni tepki" votes_released: "oy verildi" + new_features: "yeni Discourse özellikleri yayınlandı" admin_problems: "sitenizin panonuzda yeni öneriler mevcut" + upcoming_change_available: "yeni değişiklikler yakında kullanıma sunulacak" + upcoming_change_automatically_promoted: "yaklaşan değişiklikler otomatik olarak etkinleştirildi" upload_selector: change: "Değiştir" delete: "Sil" @@ -3078,6 +3348,7 @@ tr_TR: aria_label: Etiketleri kullanarak filtrele filters: label: Yalnızca şu konulara/gönderilere dön… + all: Mesajları dahil et title: Yalnızca başlıkta eşleşen likes: Beğendiğim posted: Gönderi yaptığım @@ -3123,8 +3394,6 @@ tr_TR: max_views: placeholder: en fazla aria_label: en fazla görüntülemeye göre filtrele - additional_options: - label: "Gönderi sayısına ve konu görüntülemelerine göre filtrele" hamburger_menu: "Navigasyon menüsü" new_item: "yeni" go_back: "geri dön" @@ -3179,15 +3448,17 @@ tr_TR: deleted_post: "(silinmiş gönderi)" post_number_with_topic_title: "gönderi #%{post_number} - %{title}" new_post_in_topic: "%{title} başlığında yeni gönderi" + new_post_in_deleted_topic: "silinmiş bir konuda yeni gönderi" user_requires_approval: "%{username} onay bekliyor" default_item: "incelenebilir öge #%{reviewable_id}" topics: new_messages_marker: "son ziyaret" bulk: + select: "Toplu seçim" confirm: "Onayla" select_all: "Tümünü Seç" clear_all: "Tümünü Temizle" - unlist_topics: "Konuları listeden kaldır" + unlist_topics: "Konuları gizle" relist_topics: "Konuları yeniden listele" reset_bump_dates: "Üste sıçratma tarihlerini sıfırla" defer: "Okunmamış olarak işaretle" @@ -3195,6 +3466,12 @@ tr_TR: delete_topics_count: one: "Konuyu Sil" other: "Konuları sil" + delete_posts_count: + one: "Gönderiyi Sil" + other: "Gönderileri Sil" + delete_posts_confirmation: + one: "%{count} gönderiyi silmek istediğinizden emin misiniz?" + other: "%{count} gönderiyi silmek istediğinizden emin misiniz?" dismiss: "Kapat" dismiss_read: "Tüm okunmamışları kapat" dismiss_read_with_selected: @@ -3224,37 +3501,68 @@ tr_TR: other: "Yenileri (%{count}) kapat" toggle: "konuların toplu seçimini aç/kapat" actions: "Toplu Eylemler" - change_category: "Kategori belirle…" - close_topics: "Konuları Kapat" - archive_topics: "Konuları Arşivle" + change_category: "Kategoriyi güncelle" + close_topics: "Konuları kapat" + archive_topics: "Konuları arşivle" move_messages_to_inbox: "Gelen kutusuna taşı" archive_messages: "Arşive taşı" - notification_level: "Bildirimler…" + notification_level: "Bildirimleri güncelle" change_notification_level: "Bildirim Seviyesini Değiştir" choose_new_category: "Konular için yeni kategoriyi seç:" - selected: - one: "%{count} konu seçtiniz." - other: "%{count} konu seçtiniz." selected_sole_category: one: "Kategoriden %{count} konu seçtiniz:" other: "Kategoriden %{count} konu seçtiniz:" selected_count: one: "%{count} tane seçildi" other: "%{count} tane seçildi" - change_tags: "Etiketleri Değiştir" - append_tags: "Etiketleri Sonuna Ekle" + change_tags: "Etiketleri değiştir" + append_tags: "Etiket ekle" choose_new_tags: "Bu konular için yeni etiketler seçin:" - choose_append_tags: "Bu konular için sona eklenecek yeni etiketleri seçin:" + choose_append_tags: "Etiket ekle" changed_tags: "Bu konuların etiketleri değiştirildi." - remove_tags: "Tüm Etiketleri Kaldır" + remove_tags: "Etiketleri kaldır" confirm_remove_tags: one: "Bu konudan tüm etiketler kaldırılacak. Emin misiniz?" other: "%{count} konudan tüm etiketler kaldırılacak. Emin misiniz?" + confirm_update_topics: + one: "%{count} konuyu güncelle" + other: "%{count} konuyu güncelle" + confirm_close_topics: + one: "%{count} konuyu kapat" + other: "%{count} konuyu kapat" + confirm_archive_topics: + one: "%{count} konuyu arşivle" + other: "%{count} konuyu arşivle" + confirm_unlist_topics: + one: "%{count} konuyu listeden kaldır" + other: "%{count} konuyu listeden kaldır" + confirm_relist_topics: + one: "%{count} konuyu yeniden listele" + other: "%{count} konuyu yeniden listele" + confirm_archive_messages: + one: "%{count} mesajı arşivle" + other: "%{count} mesajı arşivle" + confirm_move_to_inbox: + one: "%{count} mesajı gelen kutusuna taşı" + other: "%{count} mesajı gelen kutusuna taşı" + confirm_delete_topics: + one: "%{count} konuyu sil" + other: "%{count} konuyu sil" progress: one: "İlerleme: %{count} konu" other: "İlerleme: %{count} konu" + notify: "Kullanıcılara bu değişikliği bildir" performing: "Toplu işlemler gerçekleştiriliyor, lütfen bekleyin…" completed: "Toplu işlemler başarıyla tamamlandı!" + completed_count: + one: "%{count} konu güncellendi." + other: "%{count} konu güncellendi." + not_completed: + one: "%{count} konu güncellenemedi:" + other: "%{count} konu güncellenemedi:" + skipped_count: + one: "%{count} konu zaten günceldi." + other: "%{count} konu zaten günceldi." error_topic_count: one: "%{count} konu" other: "%{count} konu" @@ -3275,49 +3583,57 @@ tr_TR: unread: "Okunmamış bir şey kalmadı... Etkileyici!" new_new: "Şu anda yeni bir şey yok... Kısa süre sonra tekrar kontrol edin!" new: "Şu anda yeni bir şey yok... Kısa süre sonra tekrar kontrol edin!" + generic: "Burada görecek bir şey yok... yakında tekrar kontrol edin!" topic_bulk_actions: dismiss: name: "Kapat" close_topics: name: "Kapat" - note: "Not" + description: "Kapatılan konular yeni yanıtların eklenmesini engeller. Daha fazla bilgi edinin" + note: "Bu konulara bir not ekleyin" optional: (isteğe bağlı) archive_topics: name: "Arşiv" + description: "Arşivlenen konular, arama sonuçlarında ve en son konular listesinde görünmez. Daha fazla bilgi edinin" archive_messages: name: "Arşive taşı" move_messages_to_inbox: name: "Gelen Kutusuna taşı" unlist_topics: name: "Listeden kaldır" + description: "Listelenmemiş konular konu listesinde görünmez, ancak doğrudan bağlantı yoluyla erişilebilir. Daha fazla bilgi edinin" relist_topics: name: "Yeniden listele" remove_tags: name: "Etiketleri kaldır" + description: "Seçili konulardaki tüm etiketleri kaldır." append_tags: - name: "Etiketleri sona ekle" + name: "Etiket ekle" + description: "Seçilen konulara aşağıdaki etiketleri ekleyin:" replace_tags: name: "Etiketleri Değiştir" + description: "Seçilen konulardaki mevcut tüm etiketleri aşağıdakilerle değiştirin:" delete_topics: name: "Sil" + description: "Seçilen konuları kalıcı olarak sil. Bu işlem geri alınamaz." update_category: name: "Kategoriyi Güncelle" - description: "Seçilen konular için yeni kategoriyi seçin" + description: "Seçili tüm konuları aşağıdaki kategoriye taşı:" reset_bump_dates: name: "Üste Sıçratma Tarihlerini sıfırla" - description: "Konunun öne çıkma tarihini son oluşturulan gönderi tarihine sıfırlayın; bu, konu listesindeki sıralamayı etkiler" + description: "Gönderilerin öne çıkarılma tarihlerini en son oluşturulma tarihine göre güncellemek ister misiniz? Bu, konu listesindeki sıralamalarını etkileyebilir." defer: name: "Okunmamış olarak işaretle" - description: "Konuları okunmamış olarak işaretle" update_notifications: name: "Bildirimleri güncelle" - description: "Bildirim seviyesini İzleniyor, Takip Ediliyor, Normal veya Ses Kapatıldı olarak değiştirin" + description: "Seçilen konular için kişisel bildirim düzeyinizi şu şekilde güncelleyin:" topic: filter_to: one: "Konuda %{count} gönderi" other: "Konuda %{count} gönderi" create: "Yeni Konu" create_long: "Yeni bir konu oluşturun" + create_group: "Yeni konu ve taslaklar" open_draft: "Taslağı aç" private_message: "Mesaj başlat" archive_message: @@ -3403,12 +3719,15 @@ tr_TR: created_at: "Oluşturulma: %{date}" bumped_at: "En Son: %{date}" browse_latest_topics: "En son konulara göz atın" + browse_new_replies: "Yeni yanıtları göz at" + browse_new_topics: "Yeni konular arasında gezinin" suggest_create_topic: Yeni bir konuşma başlatmaya hazır mısınız? jump_reply: "Gönderinin orijinal konumuna atla" jump_reply_aria: "@%{username} adlı kullanıcının gönderisine orijinal konumunda atla" jump_reply_button: "Gönderiye atla" deleted: "Konu silindi" slow_mode_update: + title: "Yavaş mod" select: "Kullanıcılar bu konuda yalnızca şu sıklıkta gönderi yapabilir:" description: "Hızlı hareket eden veya ateşli tartışmalarda, düşünceli tartışmayı teşvik etmek için kullanıcıların bu konuda tekrar gönderi yapmadan önce beklemesi gerekir." enable: "Etkinleştir" @@ -3430,6 +3749,8 @@ tr_TR: 12_hours: "12 Saat" 24_hours: "24 saat" custom: "Özel Süre" + slow_mode_notice: + duration: "Bu konuda gönderileriniz arasında %{duration} bekleyin lütfen." topic_status_update: title: "Konu Zamanlayıcısı" save: "Zamanlayıcıyı Ayarla" @@ -3459,6 +3780,8 @@ tr_TR: title: "Son Gönderiden Sonra Konuyu Otomatik Kapat" auto_delete: title: "Konuyu Otomatik Sil" + auto_delete_after_last_post: + title: "Son Gönderiden Sonra Konuyu Otomatik Olarak Sil" auto_bump: title: "Konuyu Otomatik Üste Sıçrat" reminder: @@ -3470,6 +3793,7 @@ tr_TR: auto_close: "Bu konu %{timeLeft} içinde otomatik olarak kapanacak." auto_publish_to_category: "Bu konu %{timeLeft} içinde #%{categoryName} kategorisinde yayınlanacak." auto_close_after_last_post: "Bu konu son yanıttan sonra %{duration} içinde kapanacak." + auto_delete_after_last_post: "Bu konu, son yanıtın ardından %{duration} sonra silinecektir." auto_delete: "Bu konu %{timeLeft} içinde otomatik olarak silinecek." auto_bump: "Bu konu %{timeLeft} içinde otomatik olarak üste sıçratılacak." auto_reminder: "%{timeLeft} içinde bu konu hakkında anımsatıcı alacaksınız." @@ -3478,6 +3802,9 @@ tr_TR: auto_close_immediate: one: "Konudaki son gönderi zaten %{count} saat öncesine ait, bu yüzden konu hemen kapatılacak." other: "Konudaki son gönderi zaten %{count} saat öncesine ait, bu yüzden konu hemen kapatılacak." + auto_delete_immediate: + one: "Konudaki son mesajın üzerinden %{count} saat geçti, bu nedenle konu hemen silinecek." + other: "Konudaki son mesajın üzerinden %{count} saat geçti, bu nedenle konu hemen silinecek." timeline: back: "Geri" back_description: "Son okunmamış gönderinize geri dönün" @@ -3565,6 +3892,8 @@ tr_TR: reply: title: "Yanıtla" help: "bu konuya bir yanıt oluşturmaya başlayın" + footer_buttons: + region_label: "Konu eylemleri" share: title: "Konuyu paylaş" extended_title: "Bağlantı paylaş" @@ -3744,14 +4073,26 @@ tr_TR: one: %{count} gönderi seçtiniz. other: "%{count} gönderi seçtiniz." deleted_by_author_simple: "(konu, yazar tarafından silindi)" + localizations: + title_edit_warning: + message: "Bu, çevrilmiş bir konu başlığıdır.

%{language} dilinde orijinal kategoriyi, etiketleri ve başlığı mı düzenlemek istiyorsunuz, yoksa bu özel çeviriyi mi düzenlemek istiyorsunuz?" + action_original: "Orijinali düzenle" + action_translation: "Çevrilmiş konu başlığını düzenle" + editing_translation: "%{language} çevirisini düzenleme" post_list: title: "En son gönderiler" empty: "Gönderi yok" aria_post_number: "%{title} - gönderi #%{postNumber}" bulk: + selected: + one: "%{count} gönderi seçildi" + other: "%{count} gönderi seçildi" + select_all: "Tümünü seç" clear_all: "Tümünü temizle" actions: "Toplu eylemler" post: + accessible_heading: "%{username} tarafından gönderildi %{date}" + heading_anchor: "Başlık bağlantısı" confirm_delete: "Bu gönderiyi silmek istediğinize emin misiniz?" quote_reply: "Alıntı" quote_reply_shortcut: "Alıntı yapın (veya q tuşuna basın)" @@ -3775,8 +4116,13 @@ tr_TR: deleted_by_author_simple: "(gönderi yazarı tarafından silindi)" collapse: "daralt" load_more_replies: "daha fazla yanıt yükle" + load_more_posts_above: "Yukarıda daha fazla gönderi yükle" + load_more_posts_below: "Aşağıda daha fazla gönderi yükle" sr_collapse_replies: "Gömülü yanıtları daralt" sr_load_more_replies: "Daha fazla gömülü yanıt yükle" + loading_more_posts_above: "Yukarıda daha fazla gönderi yükleniyor..." + loading_more_posts_below: "Aşağıda daha fazla gönderi yükleniyor..." + loading_complete: "Yükleme tamamlandı" sr_date: "Gönderi tarihi" sr_expand_replies: one: "Bu gönderinin %{count} yanıtı var" @@ -3831,6 +4177,9 @@ tr_TR: edit: "Düzenle" delete: "Sil" add: "Yeni çeviri ekle" + manage: + one: "Çevirileri yönet (%{count} tane mevcut)" + other: "Çevirileri yönet (%{count} tane mevcut)" view: one: "%{count} çevrilmiş yerel ayarı görüntüle" other: "%{count} çevrilmiş yerel ayarı görüntüle" @@ -3839,8 +4188,10 @@ tr_TR: confirm_delete: "\"%{languageCode}\" için çevirileri silmek istediğinizden emin misiniz?" success: "Çeviriler başarıyla güncellendi" post_language_selector: + title: "Gönderi Dili" none: "Yok" edit_warning: + message: "Bu, çevrilmiş bir gönderidir.

Orijinal gönderiyi %{language} dilinde mi düzenlemek istiyorsunuz, yoksa bu çeviriyi mi düzenlemek istiyorsunuz?" action_original: "Orijinal gönderiyi düzenle" action_translation: "Bu çeviriyi düzenle" errors: @@ -3861,6 +4212,7 @@ tr_TR: attachment_upload_not_allowed_for_new_user: "Üzgünüz, yeni kullanıcılar ek yükleyemez." attachment_download_requires_login: "Üzgünüz, ekleri indirebilmek için giriş yapmanız gerekiyor." cancel_composer: + confirm: "Gönderinizi silmek istiyor musunuz?" discard: "Kapat" via_email: "bu gönderi e-posta yoluyla geldi" via_auto_generated_email: "bu gönderi otomatik olarak oluşturulmuş bir e-posta yoluyla geldi" @@ -3933,6 +4285,7 @@ tr_TR: delete_post_notice: "Resmî Bildiriyi Sil" remove_timer: "zamanlayıcıyı kaldır" edit_timer: "zamanlayıcıyı düzenle" + remove_yourself_from_pm: "Bu mesajdan kendinizi kaldırmak istediğinizden emin misiniz? Artık bu mesajı göremez ve yanıtlayamazsınız." actions: people: like: @@ -3964,6 +4317,7 @@ tr_TR: one: "Bu gönderileri birleştirmek istediğinizden emin misiniz?" other: "Bu %{count} gönderiyi birleştirmek istediğinizden emin misiniz?" revisions: + diff_too_complex: "Fark görüntülenemeyecek kadar karmaşık. Lütfen daha küçük düzenlemeleri tek tek görüntülemeyi deneyin." locale: no_locale_set: "Dil ayarlanmadı" locale_removed: "Dil kaldırıldı" @@ -4039,6 +4393,7 @@ tr_TR: instructions: "Bu gönderiye bir bağlantı paylaşın:" original_language: "Bu gönderi orijinal olarak %{language} dilinde yazıldı" original_language_and_outdated: "Bu gönderi orijinal olarak %{language} dilinde yazıldı. Çeviri güncel olmayabilir" + ai_translation_disclaimer: "AI tarafından üretilen çeviriler yanlış olabilir." category: none: "(kategori yok)" all: "Tüm kategoriler" @@ -4051,10 +4406,15 @@ tr_TR: general: "Genel" settings: "Ayarlar" advanced: "Gelişmiş" + show_advanced: "Gelişmiş ayarlar" topic_template: "Şablon" + topic_title_placeholder: "Kategori konusu başlığı yer tutucusu" + topic_title_placeholder_placeholder: "[isteğe bağlı] bu kategori için özel konu başlığı yer tutucusu" tags: "Etiketler" localizations: "Yerelleştirmeler" localization: + language: "Kategori dili" + language_description: "Bu kategorinin adının ve açıklamasının ana dili." locale: "Yerel Ayar" name: "Ad" description: "Açıklama" @@ -4075,22 +4435,54 @@ tr_TR: delete: "Sil" add: "Gerekli etiket grubu ekleyin" placeholder: "Etiket grubu seç…" + min_count: "Etiket sayısı" + tag_group: "Etiket grubu" topic_featured_link_allowed: "Bu kategoride öne çıkan bağlantılara izin ver" + delete: "Kategoriyi sil" + create: "Yeni kategori" + create_with_type: "Yeni %{typeName} kategorisi" create_long: "Yeni bir kategori oluştur" + settings_apply_to_all_of_type_warning: "Aşağıdaki değişiklikler bu türdeki tüm kategoriler için geçerli olacaktır." + type_settings_schema: + category_settings: "Kategori ayarları" + category_custom_fields: "Kategori ayarları" + site_settings: "Site ayarları" + choose_type: + title: "Kategori türünü seçin" + requires_plugin: "Eklenti gerektirir" + create_category: "Kategori oluştur" + save: "Kategoriyi kaydet" + unsaved_changes: "Kaydedilmemiş değişiklikleriniz var" + slug: "Kategori Kısa Adı" + parent: "Ana kategori" slug_placeholder: "(İsteğe bağlı) url için çizgiyle ayrılmış kelimeler" creation_error: Kategori oluşturulurken bir hata oluştu. save_error: Kategori kaydedilirken bir hata oluştu. + errors: + self_lockout: "Kendi erişiminizi kaldıracak şekilde kategori izinlerini değiştirmek üzeresiniz. Devam etmek istediğinizden emin misiniz?" validations: + emoji_required: "Bir emoji seçin." icon_required: "Simge seçin." + groups_required: "Bu onay modu için en az bir grup seçin." + name: "Kategori adı" + untitled: "Başlıksız kategori" description: "Açıklama" + logo: "Kategori logosu görüntüsü" + logo_dark: "Karanlık mod kategori logosu görüntüsü" logo_description: "Önerilen 1:1 en boy oranı ve minimum 200 piksel boyut. Boş bırakılırsa hiçbir görüntü gösterilmez." + background_image: "Kategori arka plan resmi" + background_image_dark: "Koyu renkli kategori arka plan resmi" style: "Stil" icon: "Simge" emoji: "Emoji" + select_emoji: "Emoji seç" + select_icon: "Simgeyi seç" background_color: "Renk" foreground_color: "Metin rengi" color_validations: cant_be_empty: "boş olamaz" + incorrect_length: "#RRGGBB veya #RGB biçimiyle eşleşmelidir" + non_hexdecimal: "sadece onaltılık karakterler (0-9, A-F) içermelidir" styles: type: "Stil" icon: "Simge" @@ -4102,12 +4494,16 @@ tr_TR: emoji: "Emoji" color_used: "Kullanılan renk" predefined_colors: "Önceden tanımlanmış renk seçenekleri" + name_placeholder: "Bir veya iki kelime önerilir" color_placeholder: "Herhangi bir web rengi" delete_confirm: "Bu kategoriyi silmek istediğinizden emin misiniz?" delete_error: "Kategori silinirken bir hata oluştu." list: "Kategorileri listele" no_description: "Lütfen bu kategori için bir açıklama ekleyin." change_in_category_topic: "Açıklamayı düzenle" + description_updated: "Açıklama güncellendi" + description_expand: "Daha fazla göster" + description_collapse: "Daha az göster" already_used: "Bu renk başka bir kategori tarafından kullanılmış." color_palette: "Renk paleti" security: "Güvenlik" @@ -4118,8 +4514,15 @@ tr_TR: reply: "Yanıtla" create: "Oluştur" no_groups_selected: "Hiçbir gruba erişim izni verilmedi; bu kategori yalnızca personel tarafından görülebilir." + everyone_full_access: 'Bu kategori herkese açıktır, herkes görebilir, yanıtlayabilir ve gönderi oluşturabilir. İzinleri kısıtlamak için, “%{everyone_group}” grubuna verilen izinlerden birini veya birkaçını kaldırın.' + everyone_reply_access: 'Bu kategori herkese açıktır, herkes konuları görebilir ve yanıtlayabilir. İzinleri kısıtlamak için “%{everyone_group}” grubunu kaldırın.' + everyone_see_access: 'Bu kategori herkese açıktır, herkes gönderileri görebilir. İzinleri kısıtlamak için “%{everyone_group}” grubunu kaldırın.' + specific_groups_have_access: "Bu kategori özeldir, yalnızca seçilen gruplar görebilir, yanıtlayabilir ve gönderi oluşturabilir." + all_parent_groups_used: "Ana kategorideki tüm gruplar eklenmiştir. Daha fazla grup eklemek için, önce bunları ana kategoriye ekleyin." toggle_reply: "Yanıtlama iznini aç/kapat" toggle_full: "Oluşturma iznini aç/kapat" + inherited: 'Bu izin “%{everyone_group}” grubundan devralınmıştır.' + special_warning: "Bu önceden belirlenmiş bir kategoridir ve güvenlik ayarları düzenlenemez. Bu kategoriyi kullanmak istemiyorsanız, yeniden kullanmak yerine silin." uncategorized_security_warning: "Bu kategori özeldir. Kategorisi olmayan konular için tutma alanı olarak tasarlanmıştır; güvenlik ayarlarına sahip olamaz." uncategorized_general_warning: 'Bu kategori özeldir. Kategori seçilmeyen yeni konular için varsayılan kategori olarak kullanılır. Bu davranışı önlemek ve kategori seçimini zorlamak isterseniz lütfen buradaki ayarı devre dışı bırakın. Adı veya açıklamayı değiştirmek isterseniz Özelleştir / Metin İçeriği''ne gidin.' pending_permission_change_alert: "Bu kategoriye %{group} eklemediniz; eklemek için bu düğmeye tıklayın." @@ -4136,20 +4539,43 @@ tr_TR: all_topics_wiki: "Varsayılan olarak yeni konu wiki yapın" allow_unlimited_owner_edits_on_first_post: "İlk gönderide sınırsız sahibi düzenlemelerine izin ver" subcategory_list_style: "Alt Kategori Listesi Stili:" + sort_order: "Konu listesi sıralama ölçütü:" + default_view: "Varsayılan konu listesi:" + default_top_period: "Varsayılan en iyi dönem:" + default_list_filter: "Varsayılan liste filtresi:" allow_badges_label: "Bu kategoride rozet verilmesine izin verin" + edit_permissions: "Düzenleme izinleri" reviewable_by_group: "Personele ek olarak, bu kategorideki içerik şu kişiler tarafından da incelenebilir:" review_group_name: "grup adı" require_topic_approval: "Tüm yeni konular için moderatör onayı gerektir" require_reply_approval: "Tüm yeni yanıtlar için moderatör onayı gerektir" + require_topic_approval_for: "...için yeni başlıkların moderatör onayı gerektirir" + require_reply_approval_for: "Şu durumlarda yeni yanıtların moderatör onayı gerektirsin..." + posting_review_modes: + no_one: "Hiç kimse" + everyone: "Herkes" + everyone_except: "Belirli gruplar hariç herkes" + no_one_except: "Seçilmiş gruplar dışında kimse" + posting_review_groups_placeholder: "Grupları seçin..." this_year: "bu yıl" position: "Kategoriler sayfasındaki pozisyon:" + default_position: "Varsayılan Pozisyon" position_disabled: "Kategoriler aktivite sırasına göre görüntülenir. Listelerdeki kategorilerin sırasını kontrol etmek için \"sabit kategori pozisyonları\" ayarını etkinleştirin." minimum_required_tags: "Bir konuda gerekli minimum etiket sayısı:" + default_slow_mode: 'Bu kategorideki yeni konular için “Yavaş mod”u etkinleştirin.' + subcategory_of: "Alt kategorisi..." none_subcategory_text: "Hiçbiri" + subcategory_permissions_warning: "Özel bir kategorinin alt kategorisi genel olamaz." visibility: title: "Görünürlük" public: "Genel" + all_members: "Tüm üyeler" group_restricted: "Özel" + who_can_see: "Bu kategoriyi kimler görebilir?" + who_can_post: "Bu kategoride kimler yayın yapabilir?" + which_groups_can_access: "Bu kategoride hangi gruplar görüntüleme ve paylaşım yapabilir?" + more_options_hint: "gelişmiş ayarlar'da daha fazla izin mevcuttur." + inherited_from_parent: "İzinler üst kategoriden devralınır. Ayrıntıları belirlemek için gelişmiş ayarlar sayfasını ziyaret edin." num_auto_bump_daily: "Günlük olarak otomatik olarak üste çıkacak açık konu sayısı:" auto_bump_cooldown_days: "Aynı konuyu tekrar açmadan önce geçmesi gereken gün sayısı:" navigate_to_first_post_after_read: "Konular okunduktan sonra ilk gönderiye gidin" @@ -4171,14 +4597,18 @@ tr_TR: title: "Sessize alındı" description: "Bu kategorideki yeni konular hakkında hiçbir zaman bildirim almayacaksınız ve en son bölümünde görünmeyecekler." search_priority: + label: "Arama önceliği" options: normal: "Normal" ignore: "Yok say" + very_low: "Çok düşük" low: "Düşük" high: "Yüksek" + very_high: "Çok yüksek" sort_options: default: "varsayılan" likes: "Beğeniler" + op_likes: "Orijinal gönderi beğenileri" views: "Görüntülemeler" posts: "Gönderiler" activity: "Aktivite" @@ -4199,6 +4629,7 @@ tr_TR: email: "E-posta" list_filters: all: "Tüm konular" + none: "Alt kategori yok" colors_disabled: "Category style olarak none belirlenmiş olduğundan renk seçemezsiniz." anonymous_flagging: title: "Yasa dışı içeriği bildirin" @@ -4458,10 +4889,15 @@ tr_TR: preloader_text: "Yükleniyor" lightbox: download: "İndir" + open: "Orijinal görüntü" + image_info: "Görüntü bilgileri" + quote: "Resmi alıntıla" previous: "Önceki (Sol ok tuşu)" next: "Sonraki (Sağ ok tuşu)" counter: "%curr% / %total%" close: "Kapat (Esc)" + zoom: "Yakınlaştır (Z tuşu)" + error: "Görüntü yüklenemiyor" content_load_error: 'İçerik yüklenemedi.' image_load_error: 'Görüntü yüklenemedi.' cannot_render_video: Tarayıcınız codec'i desteklemediği için bu video işlenemiyor. @@ -4483,6 +4919,7 @@ tr_TR: latest: "%{shortcut} En Son" new: "%{shortcut} Yeni" unread: "%{shortcut} Okunmamış" + unseen: "%{shortcut} Görünmez" categories: "%{shortcut} Kategoriler" top: "%{shortcut} En Üst" bookmarks: "%{shortcut} Yer imleri" @@ -4497,10 +4934,12 @@ tr_TR: back: "%{shortcut} Geri" up_down: "%{shortcut} Seçileni taşı ↑ ↓" open: "%{shortcut} Seçili konuyu aç" + open_new_window: "%{shortcut} Seçilen konuyu yeni sekmede/pencerede aç" next_prev: "%{shortcut} Önceki/Sonraki bölüm" go_to_unread_post: "%{shortcut} Okunmamış ilk gönderiye git" application: title: "Uygulama" + create: "%{shortcut} Yeni bir konu veya kişisel mesaj oluşturun" notifications: "%{shortcut} Bildirimleri aç" hamburger_menu: "%{shortcut} Navigasyon menüsünü aç" user_profile_menu: "%{shortcut} Kullanıcı menüsünü aç" @@ -4627,6 +5066,7 @@ tr_TR: add_to_calendar: "Takvime ekle" google: "Google Takvim" ics: "ICS" + default_title: "Planlanmış Etkinlik" tagging: all_tags: "Tüm etiketler" other_tags: "Diğer Etiketler" @@ -4641,18 +5081,25 @@ tr_TR: choose_for_topic_required_group: one: "'%{name}' içinden %{count} etiket seç…" other: "'%{name}' içinden %{count} etiket seç…" + info: "Etiket bilgilerini göster" default_info: "Bu etiket hiçbir kategoriyle sınırlı değil ve eş anlamlısı yok." staff_info: "Kısıtlama eklemek için bu etiketi bir etiket grubuna koyun." category_restricted: "Bu etiket, erişim izninizin olmadığı kategorilerle sınırlı." synonyms: "Eş Anlamlılar" synonyms_description: "Aşağıdaki etiketler kullanıldığında %{base_tag_name}ile değiştirilir." + synonyms_inline: "Bu eşanlamlılar %{base_tag_name} ile değiştirilecektir:" save: "Etiketin adını ve açıklamasını kaydedin" tag_groups_info: one: 'Bu etiket %{tag_groups} grubuna ait.' other: "Bu etiket şu gruplara ait: %{tag_groups}." + tag_groups_info_prefix: + one: "Bu etiket gruba aittir " + other: "Bu etiket şu gruplara aittir: " category_restrictions: one: "Sadece şu kategoride kullanılabilir:" other: "Yalnızca şu kategorilerde kullanılabilir:" + restricted_to: "Sınırlı" + no_synonyms: "Bu etiketin eşanlamlısı yoktur." edit_synonyms: "Eş Anlamlıları Düzenle" add_synonyms_label: "Eş anlamlı ekleyin:" add_synonyms: "Ekle" @@ -4671,7 +5118,35 @@ tr_TR: one: "Eş anlamlısı da silinecek." other: "%{count} eş anlamlısı da silinecek." edit_tag: "Etiket adını ve açıklamasını düzenle" - description: "Açıklama (en fazla 1000 karakter)" + edit: "Bu etiketi düzenle" + description: "Açıklama" + settings: + title: "Ayarlar" + edit_title: "Etiketi düzenle: %{name}" + edit_tag_prefix: "Etiketi düzenle:" + select_tag: "Düzenlemek için bir etiket seçin" + general: "Genel" + localizations: "Yerelleştirmeler" + back: "Geri" + name: "Ad" + slug: "Kısa ad" + name_placeholder: "Etiket adı" + slug_placeholder: "Etiket kısa adı (isteğe bağlı, addan otomatik olarak oluşturulur)" + saved: "Etiket ayarları kaydedildi" + no_synonyms: "Bu etiket için tanımlanmış eşanlamlı yoktur." + add_synonym_placeholder: "Eşanlamlı olarak eklemek için etiketleri arayın..." + synonyms_subtitle: "Aşağıdaki etiketler kullanıldığında %{name}ile değiştirilir" + save: "Etiketi kaydet" + delete: "Etiketi sil" + synonyms_hint: "Yukarıdaki etiketler kullanıldığında, %{baseTagName} ile değiştirilecektir." + add_synonyms_confirm: "Şu anda %{synonymNames} kullanan tüm yerler %{tagName} kullanacak şekilde değiştirilecektir. Bu değişikliği yapmak istediğinizden emin misiniz?" + localization: + hint: "Farklı dillerdeki kullanıcılara farklı etiket adları göstermek için yerelleştirmeler ekleyin." + locale: "Yerel Ayar" + name: "Ad" + description: "Açıklama" + add: "Yerelleştirme Ekle" + remove: "Yerelleştirmeyi Kaldır" sort_by: "Sıralama ölçütü:" sort_by_count: "sayı" sort_by_name: "ad" @@ -4681,7 +5156,15 @@ tr_TR: upload_description: "Etiketleri toplu olarak oluşturmak için bir csv dosyası yükleyin" upload_instructions: "Satır başına bir tane, isteğe bağlı olarak \"tag_name,tag_group\" biçiminde bir etiket grubu ile." upload_successful: "Etiketler başarıyla yüklendi" + bulk_create_inline_placeholder: "Etiketler oluşturun (virgülle ayrılmış)" bulk_create_button: "Oluştur" + bulk_create_success: + one: "%{count} etiket oluşturuldu:" + other: "%{count} etiket oluşturuldu:" + bulk_create_already_exist: + one: "%{count} etiket zaten var:" + other: "%{count} etiket zaten var:" + bulk_create_some_failed: "Bazı etiketler oluşturulamadı:" delete_unused_confirmation: one: "%{count} etiket silinecek: %{tags}" other: "%{count} etiket silinecek: %{tags}" @@ -4715,13 +5198,18 @@ tr_TR: description: "Bu etikete sahip yeni konular hakkında bildirim almayacaksınız ve okunmamış sekmenizde görünmeyecekler." groups: back_btn: "Tüm etiketlere dön" + title: "Etiket grupları" about_heading: "Bir etiket grubu seçin veya yeni bir tane oluşturun" about_heading_empty: "Başlamak için yeni bir etiket grubu oluşturun" about_description: "Etiket grupları, birçok etiket için izinleri tek bir yerden yönetmenize yardımcı olur." + new: "Yeni grup" + new_title: "Yeni grup oluştur" + edit_title: "Etiket grubunu düzenle" tags_label: "Bu gruptaki etiketler" parent_tag_label: "Üst etiket" parent_tag_description: "Bu gruptaki etiketler yalnızca üst etiket mevcutsa kullanılabilir." one_per_topic_label: "Bu gruptan konu başına bir etiketle sınırlandırın" + new_name: "Yeni etiket grubu" name_placeholder: "Ad" save: "Kaydet" delete: "Sil" @@ -4763,6 +5251,7 @@ tr_TR: safe_mode: enabled: "Güvenli mod etkin, güvenli moddan çıkmak için bu tarayıcı penceresini kapatın" theme_preview_notice: "Şu anda bir temayı ön izliyorsunuz, normal site yapılandırmanıza dönmek için bu tarayıcı sekmesini veya penceresini kapatın." + theme_preview_failed: "Tema mevcut olmadığı veya erişim izniniz olmadığı için önizleme yapılamadı." image_removed: "(görüntü kaldırıldı)" pause_notifications: title: "Bildirimleri şu süreyle duraklat…" @@ -4832,6 +5321,7 @@ tr_TR: tags_form_modal: title: "Etiketlerde gezinmeyi düzenle" filter_placeholder: "Etiketleri filtrele" + no_tags: "Mevcut filtrelerle eşleşen etiket bulunamadı." subtitle: text: "ve bu sitenin en popüler etiketlerini otomatik olarak gösteririz" edit_navigation_modal_form: @@ -4912,6 +5402,9 @@ tr_TR: click_to_get_started: "Başlamak için buraya tıklayın." header_link_text: "Kategoriler" header_action_title: "Kenar çubuğu kategorilerinizi düzenleyin" + header_action_new: "Yeni kategori" + header_action_edit_sidebar: "Kenar çubuğu kategorilerini düzenle" + header_action_edit_header_dropdown: "Navigasyon kategorilerini düzenle" configure_defaults: "Varsayılanları yapılandır" community: edit_section: @@ -4983,6 +5476,8 @@ tr_TR: light: "Açık" dark: "Koyu" auto: "Otomatik" + title: "Renk modu" + aria_label: "Renk modu, şu anda %{mode}" welcome_topic_banner: title: "Karşılama Konunuzu oluşturun" description: "Karşılama konunuz, yeni üyelerin okuyacağı ilk şeydir. Bunu “asansör konuşmanız” veya “hedef tanımınız” olarak düşünün. Herkese bu topluluğun kimler için olduğunu, burada ne bulmayı bekleyebileceklerini ve önce ne yapmalarını istediğinizi açıklayın." @@ -5158,10 +5653,19 @@ tr_TR: bookmarks: "Yer imi eklediğiniz %{category} kategorisindeki etiketsiz konular" default: "%{category} kategorisindeki etiketsiz %{filter} konuları" categories: "Tüm kategoriler" + content_localization: + toggle_localized: + translated: "Sayfa makine tarafından çevrilmiştir. Orijinali görüntülemek için tıklayın." + not_translated: "Sayfa çevrilmedi. Çevirmek için tıklayın." + translations_enabled: "Çeviriler etkinleştirildi" + translations_disabled: "Çeviriler devre dışı bırakıldı" + language_switcher: + title: "Site dilini değiştir" admin_js: type_to_filter: "Filtrelemek için yazın…" settings: "Ayarlar" - reset_filter: "Sıfırla" + reset_filter: "Filtreyi sıfırla" + toggle_filters: "Açılır filtreleri değiştir" admin: title: "Discourse Yöneticisi" moderator: "Moderatör" @@ -5174,9 +5678,15 @@ tr_TR: never: "asla" reports: title: "Mevcut raporlar listesi" - meta_doc: "Raporlar, sitenizde neler olup bittiğini anlamanıza yardımcı olacak güçlü bir araçtır. Eğilimleri belirlemenize, sorunları tespit etmenize ve verilere dayalı kararlar almanıza yardımcı olabilirler." sidebar_title: "Raporlar" back: "Tüm raporlara geri dön" + group_engagement: "Taahhüt" + group_traffic: "Trafik" + group_members: "Üyeler" + group_content: "İçerik ve Sağlık" + group_moderation_and_security: "Moderasyon ve Güvenlik" + group_other: "Diğer" + legacy_warning: "Bu eski bir rapordur. Yakında kullanımdan kaldırılacaktır. Yenisini bulmak için yardıma ihtiyacınız varsa destek ekibiyle iletişime geçin." config_sections: account: title: "Hesap" @@ -5196,28 +5706,78 @@ tr_TR: title: "Gelişmiş" upcoming_changes: name: "Ad" + plugin: "Eklenti" + metadata: "Meta veri" enabled: "Etkin mi" + enabled_for: "Şunlar için etkinleştirildi..." + show_image: "Görüntüyü göster" + edit_groups: "Katılım gruplarını düzenle" + groups_updated: "Gruplar güncellendi!" + save_groups: "Grupları kaydet" + add_groups_to_enable: "Bu özelliği etkinleştirmek için gruplar ekleyin" + no_changes_to_save: "Kaydedilecek değişiklik yok" select_groups: "Grupları seç…" + opt_in_groups: "Katılımcı gruplar" + show_related_settings: "İlgili ayarları göster..." + opt_in_groups_instructions: "Opt-in grupları, belirli bir kullanıcı grubunun bir değişikliği herkese yayınlanmadan önce test etmesine izin vermek için kullanılabilir. Bir değişiklik Kararlı durumuna geçtiğinde bu grupların artık geçerli olmayacağını unutmayın." + enabled_for_throttle: "Bu değişikliğin kimler için etkinleştirileceğini çok hızlı bir şekilde değiştirdiniz. Lütfen birkaç saniye bekleyin ve tekrar deneyin." + change_enabled_for_success: "Bu değişikliği %{enabledFor} için etkinleştirdiniz." + change_disabled: "Bu değişikliği reddetmiş bulunuyorsunuz." + permanent_notice: "Bu değişiklik artık kalıcıdır ve yakında kaldırılacaktır. Artık bu seçeneği devre dışı bırakamazsınız." + permanent_soon_notice: "Bu değişiklik yakında kalıcı hale gelecektir. Artık bu seçeneği devre dışı bırakamayacaksınız." + permanent_no_group_selection: "Yok, kalıcı değişiklikler tüm gruplar için geçerlidir." + no_changes: "Şu anda yaklaşan bir değişiklik yoktur." preview: "Ön izle" enabled_for_options: + no_one: "Hiç kimse" everyone: "Herkes" - staff: "Sadece personel" + staff: "yalnızca %{staffGroupName}" + specific_groups: "Belirli grup(lar)" + specific_groups_with_group_names: + one: "%{groupNames} grubu" + other: "gruplar %{groupNames}" statuses: experimental: "Deneysel" + alpha: "Alfa" + beta: "Beta" + stable: "Stabil" + permanent: "Kalıcı" + status_descriptions: + experimental: "Bu özellik henüz geliştirme aşamasındadır ve önemli ölçüde değişebilir veya kaldırılabilir. Diğer özelliklerle tam olarak uyumlu olmayabilir." + alpha: "Bu özellik aktif olarak geliştirilmekte ve iyileştirilmektedir. İşlevsellikte değişiklikler olabilir ve henüz tam anlamıyla tamamlanmış olmayabilir, ancak denemek için yeterince kararlıdır." + beta: "Bu çalışma tamamlanmak üzere olup, erken aşamada kullanıma sunulmuştur. Küçük değişiklikler hala yapılabilir." + stable: "Bu özellik eksiksiz ve sağlam bir şekilde desteklenmektedir. Yakında tüm Discourse sitelerinde kullanıma sunulacaktır." impact_roles: admins: "Yöneticiler" moderators: "Moderatörler" staff: "Personel" + all_members: "Tüm Üyeler" + developers: "Geliştiriciler" filter: + search_placeholder: "Ad, açıklama veya eklentiye göre filtrele..." + no_results: "Yaklaşan değişiklikler filtrelerinize uymuyor" all: "Tümü" + enabled_all: "Tüm etkin durumlar" enabled: "Etkin mi" + enabled_for_staff: "%{staffGroupName} için etkinleştirildi" + enabled_for_specific_groups: "Belirli gruplar için etkinleştirildi" disabled: "Devre Dışı" + impact_type_all: "Tüm darbe türleri" impact_type_feature: "Özellik" impact_type_other: "Diğer" + status_all: "Tüm durumlar" + status_conceptual: "Kavramsal" status_experimental: "Deneysel" + status_alpha: "Alfa" + status_beta: "Beta" + status_stable: "Stabil" + status_permanent: "Kalıcı" + impact_role_all: "Tüm etki rolleri" impact_role_admins: "Yöneticiler" impact_role_moderators: "Moderatörler" impact_role_staff: "Personel" + impact_role_all_members: "Tüm üyeler" + impact_role_developers: "Geliştiriciler" config: about: title: "Siteniz hakkında" @@ -5248,17 +5808,32 @@ tr_TR: title: "Yerelleştirme" header_description: "Topluluğunuzun arayüz dilini ve üyeleriniz için diğer yerelleştirme seçeneklerini yapılandırın" keywords: "yerel|dil|zaman dilimi|unicode|ltr" + upcoming_changes: + title: "Yaklaşan değişiklikler" + header_description: "Sitenizi etkileyebilecek Discourse'da yapılacak değişikliklerin listesi ve katılabileceğiniz deneysel özellikler. Etki, tür ve duruma göre filtreleyebilirsiniz.\n\nKatılım grupları, belirli bir kullanıcı grubunun bir değişikliği herkese sunulmadan önce test etmesine olanak sağlamak için kullanılabilir, ancak bu gruplar değişiklik Kalıcı duruma geçtiğinde artık geçerli olmayacaktır." login: title: "Giriş ve kimlik doğrulama" header_description: "Kullanıcıların oturum açma ve kimlik doğrulama yöntemlerini, gizli dizileri ve anahtarları, OAuth2 sağlayıcılarını ve daha fazlasını yapılandırın" sub_pages: common_settings: title: "Ayarlar" + authenticators: + title: "Sosyal medya hesaplarıyla giriş" + discourseconnect: + title: "Discourse Connect" discourse_id: title: "Discourse kimliği" discourse_id: title: "Discourse kimliği" + stats: + total_users: "Toplam kullanıcı sayısı" + signups_30_days: "Kayıtlar (30 gün)" + logins_30_days: "Girişler (30 gün)" + regenerate_credentials: "Kimlik bilgilerini yeniden oluştur" + regenerate_confirm: "Discourse ID kimlik bilgilerinizi yeniden oluşturmak istediğinizden emin misiniz? Bu işlem yeni bir istemci gizli anahtarı oluşturacaktır. Kimlik bilgilerinin yeniden oluşturulması normalde gerekli değildir, ancak güvenliği artırmak için yararlı olabilir." + description: "Discourse ID, kullanıcıların tek bir hesapla birden fazla Discourse sitesine giriş yapabilmelerini sağlayan tek oturum açma hizmetidir. Google, Facebook, Apple ve Github gibi yaygın sosyal oturum açma sağlayıcıları ek yapılandırma gerektirmeden desteklenir." learn_more: "Daha fazla bilgi edin" + regenerate_success: "Kimlik bilgileri başarıyla yeniden oluşturuldu." logo: title: "Logo" header_description: "Sitenizde kullanılan logoları ve simgeleri yapılandırın" @@ -5274,7 +5849,7 @@ tr_TR: help_text: "Önerilen boyut 600 x 80 pikseldir." large_icon: title: "Kare simge" - description: "Logo görüntüsünün kare bir versiyonu, yönetimin üst kısmında görünür ve aynı zamanda mobil ana ekran uygulaması logosudur." + description: "Logo görüntüsünün kare versiyonu sitenin üst kısmında görünür ve aynı zamanda mobil uygulama logosu olarak da kullanılır." help_text: "Önerilen boyut 512 x 512 pikseldir." square_icon_dark: required: "Koyu mod için farklı bir kare simge kullanılsın mı?" @@ -5346,24 +5921,61 @@ tr_TR: modal_yes: "Evet" modal_no: "Hayır, sadece ileriye dönük olarak uygula" welcome_banner: + title: "Hoş geldiniz afişi" + header_description: "Sitenizi ziyaret eden kullanıcılara gösterilen arama çubuğu içeren banner'ı yapılandırın." + saved: "Hoş geldiniz afişi ayarları başarıyla kaydedildi." form: + enabled_themes: + label: "Temalarda etkinleştirildi..." + description: "Banner'ın hangi temalarda görüntüleneceğini seçin. Yalnızca etkin temalar gösterilir." + select_label: "Temaları seçin" + background_image: + label: "Arka plan görüntüsü" + description: "Bu resim, banner metninin arkasında görüntülenecektir." text_color: label: "Metin rengi" + description: "Yukarıdaki 'Arka plan resmi' yüklendiğinde, banner metin rengini okunabilirliğini korumak için bu ayarı kullanın. Boş bırakıldığında veya arka plan resmi yüklenmediğinde, aktif tema rengi kontrol eder." page_visibility: + label: "Sayfa görünürlüğü" + description: "Banner'ın nerede görüntüleneceğini seçin." options: top_menu_pages: "Üst menü sayfaları" + homepage: "Yalnızca ana sayfa" + discovery: "Keşif sayfaları" all_pages: "Tüm sayfalar" location: label: "Konum" + description: "Banner'ın sayfada nerede görüneceğini seçin." options: above_topic_content: "Yukarıdaki konu içeriği" below_site_header: "Aşağıdaki site başlığı" text_section: + title: "Özelleştirilebilir metin" locale_label: "Dil" + header_new_members: + label: "Yeni üyeler için başlık" + description: "Kullanılabilir değişkenler: %{site_name}, %{preferred_display_name}" + placeholder: "Hoş geldiniz, %{preferred_display_name}!" header_logged_in: + label: "Giriş yapmış üyeler için başlık" + description: "Kullanılabilir değişkenler: %{site_name}, %{preferred_display_name}" placeholder: "Tekrar hoş geldiniz %{preferred_display_name}!" header_anonymous: + label: "Anonim ziyaretçiler için başlık" + description: "Kullanılabilir değişken: %{site_name}" placeholder: "%{site_name}'a hoş geldiniz!" + subheader_logged_in: + label: "Giriş yapmış üyeler için alt başlık" + description: "Giriş yapmış kullanıcılar için başlığın altında gösterilen ikincil metin." + placeholder: "Topluluktaki yenilikleri inceleyin" + subheader_anonymous: + label: "Anonim ziyaretçiler için alt başlık" + description: "Anonim ziyaretçiler için başlığın altında gösterilen ikincil metin." + placeholder: "Tartışmalara katılmak için topluluğumuza katılın" + search_placeholder: + label: "Arama yer tutucusu" + description: "Hoş geldiniz bannerındaki arama kutusu için yer tutucu metin." + placeholder: "Konuları ara..." navigation: title: "Gezinme" header_description: "Siteniz için gezinme bağlantılarını ve menü ögelerini yapılandırın. Bu, birincil gezinme menüsünün konumunu ve davranışını, ana sayfanın üst kısmındaki hızlı bağlantıları ve yönetici kenar çubuğunu içerir" @@ -5425,7 +6037,7 @@ tr_TR: header_description: "Raporlar, sitenizde neler olup bittiğini anlamanıza yardımcı olacak güçlü bir araçtır. Eğilimleri belirlemenize, sorunları tespit etmenize ve verilere dayalı kararlar almanıza yardımcı olabilirler." sub_pages: settings: - title: "Pano ayarları" + title: "Ayarlar" badges: title: "Rozetler" header_description: "Rozetler, topluluk içindeki olumlu davranışları ve katılımı tanımak, doğrulamak ve teşvik etmek için kullanıcıları aktiviteleri, katkıları ve başarıları için ödüllendirir" @@ -5558,6 +6170,9 @@ tr_TR: embedding: title: "Gömme" header_description: "Discourse, IFRAME oluşturan bir Javascript API'si kullanarak bir konudaki yorumları uzak bir siteye yerleştirme yeteneğine sahiptir" + form_templates: + title: "Form şablonları" + header_description: "Form şablonları, konu oluşturma akışının bir parçası olarak veri doğrulamalı yapılandırılmış bir form uygulamanıza olanak tanır." theme_site_settings: setting: "Ayar" overridden_by: "Geçersiz kılan:" @@ -5566,6 +6181,9 @@ tr_TR: select_setting: "Güncel tema değerlerine bakmak için bir site ayarı seçin" add: "Tema sitesi ayarlarına git" help: "Şu anda kullandığınız tema: %{currentTheme}. Tema site ayarlarını değiştirmek için tema yapılandırma sayfasına gidin veya ayarlarını düzenlemek için aşağıdaki tabloda bağlantılı bir temaya tıklayın." + filter: "Filtre tema site ayarlarını ad, açıklama veya tema adı ile filtreleyin..." + filter_no_results: "Filtreye uyan tema sitesi ayarı bulunamadı" + site_setting_warning: 'Bu ayar, sitenizin varsayılan teması (%{defaultThemeName}) tarafından yönetilir. Bu ayarı temanın düzenleme sayfasından değiştirebilirsiniz.' search: modal_title: "Yöneticide her şeyi arayın" title: "Ara" @@ -5575,22 +6193,6 @@ tr_TR: result_count: one: '"%{filter}" için %{count} sonuç' other: '"%{filter}" için %{count} sonuç' - result_types: - page: - one: "Sayfa" - other: "Sayfa" - report: - one: "Rapor" - other: "Rapor" - setting: - one: "Ayar" - other: "Ayarlar" - theme: - one: "Tema" - other: "Temalar" - component: - one: "Bileşen" - other: "Bileşenler" new_features: title: "Yenilikler" check_for_updates: "Güncellemeleri kontrol et" @@ -5613,16 +6215,9 @@ tr_TR: new_features: title: "Yenilikler" subtitle: "Sürekli olarak yeni özellikler ve geliştirmeler yayınlıyoruz. Bu sayfa önemli noktaları kapsıyor, ancak kapsamlı sürüm notlarını görmek için \"Daha fazla bilgi edinin\" seçeneğine tıklayabilirsiniz." + no_new_features_found: "Feed'de hiçbir öğe bulunmuyor veya seçtiğiniz filtre hiçbir sonuç vermedi. Önceki yeni özellik duyurularını Discourse Meta topluluğunda görebilirsiniz." + no_new_features_error: "Feed yüklenirken bir hata oluştu. Önceki yeni özellik duyurularını Discourse Meta topluluğunda görebilirsiniz." learn_more: "Daha fazla bilgi edinin..." - experimental: "Deneysel" - only_experiments: "Yalnızca deneysel özellikleri göster" - experiment_enabled: "Deneysel özelliği etkinleştirdiniz." - experiment_disabled: "Deneysel özelliği devre dışı bıraktınız." - experiment_tooltip: - title_enabled: "Deneysel özelliği kapat" - content_enabled: "Bunu değiştirmek özelliği tüm kullanıcılar için devre dışı bırakır." - feature_tooltip: - content_enabled: "Bunu değiştirmek özelliği tüm kullanıcılar için devre dışı bırakır." last_checked: "Son kontrol" refresh_problems: "Yenile" no_problems: "Hiçbir sorun bulunamadı." @@ -5685,10 +6280,12 @@ tr_TR: all: "Tümü" view_table: "tablo" view_graph: "grafik" - refresh_report: "Raporu Yenile" + refresh_report: "Yenile" daily: Günlük monthly: Aylık weekly: Haftalık + chart_group_period: "Bir dönem seçin" + value_so_far: "%{value} (şimdiye kadar)" dates: "Tarihler (UTC)" groups: "Tüm gruplar" disabled: "Bu rapor devre dışı" @@ -5699,7 +6296,9 @@ tr_TR: trending_search: more: 'Arama günlükleri' disabled: 'Trend olan arama raporu devre dışı bırakıldı. Veri toplamak için günlük arama sorgularını etkinleştirin.' + average_chart_label: Toplamları değil, ortalamaları göster sort_button: "%{column} kriterine göre sırala" + sort_button_current: "%{column}, %{direction} ile sıralanmış" sort_ascending: "artan" sort_descending: "azalan" filters: @@ -5805,6 +6404,7 @@ tr_TR: cancel: "İptal et" continue: "Devam et" copy_key: "Kopyala" + key_copied_to_clipboard: "API anahtarı panoya kopyalandı" back: "API anahtarlarına geri dön" revoke: "Geri çek" undo_revoke: "İptal işlemini geri al" @@ -5872,6 +6472,7 @@ tr_TR: recover: Bir konuyu kurtarın. read_lists: En iyi, yeni, en son vb. gibi konu listelerini okuyun. RSS de desteklenir. status: "Bir konunun durumunu güncelleyin. Durum: kapalı, arşiv, görünür, sabitlenmiş. Etkin: true, false. Yalnızca o kategorideki konuların durum değişikliklerine izin vermek için burada ve request içeriğinde bir category_id belirtin." + change_owner: Bir konudaki gönderilerin sahipliğini değiştirin. posts: edit: Herhangi bir gönderiyi veya belirli bir gönderiyi düzenleyin. delete: Bir gönderi silin. @@ -5904,6 +6505,7 @@ tr_TR: suspend: Kullanıcı hesaplarını askıya alın. delete: Kullanıcı hesaplarını silin. list: Kullanıcıların bir listesini alın. + create: Yeni bir kullanıcı oluşturun. user_status: read: Kullanıcı durumunu okuyun. update: Kullanıcı durumunu güncelleyin. @@ -6007,6 +6609,7 @@ tr_TR: user_destroyed: "Kullanıcı silindi" user_suspended: "Kullanıcı askıya alındı" user_unsuspended: "Kullanıcı askıya alınma durumu kaldırıldı" + user_anonymized: "Kullanıcı anonimleştirildi" reviewable_event: group_name: "İncelenebilir Olaylar" reviewable_created: "İncelenebilir öge hazır" @@ -6239,8 +6842,10 @@ tr_TR: install: "Yükle" theme_site_settings: title: "Tema site ayarları" + description: "Temaların, temel site ayarlarının küçük bir alt kümesini geçersiz kılarak tüm site deneyimi üzerinde daha fazla kontrol sahibi olmasını sağlayan ayarlar." themes: title: "Temalar" + description: "Sitenizin genel görünümünü ve hissini tüm kullanıcılar için değiştiren site genelinde geçerli temalar." themes_intro: "Başlamak için yeni bir tema yükleyin veya bu kaynakları kullanarak sıfırdan kendi temanızı oluşturun." new_theme: "Yeni tema" back: "Temalara geri dön" @@ -6306,6 +6911,8 @@ tr_TR: title: "Renk seçenekleri" toggle: "Kullanıcı tarafından seçilebilir" toggle_description: "Renk paleti, kullanıcılar tarafından seçilebilir" + toggle_default_light_on_theme: "Renk paleti, varsayılan temadaki (%{themeName}) varsayılan açık renk paletidir." + toggle_default_dark_on_theme: "Renk paleti, varsayılan temadaki varsayılan koyu palettir (%{themeName})." colors: title: "Renkler" save_changes: "Değişiklikleri kaydet" @@ -6396,6 +7003,7 @@ tr_TR: confirm: "Bu yedeklemeyi yok etmek istediğinizden emin misiniz?" restore: is_disabled: "Geri yükleme şu anda devre dışı. Etkinleştirmek için site ayarlarını ziyaret edin." + is_disabled_title: "Geri yükleme şu anda devre dışıdır. Etkinleştirmek için site ayarlarında “geri yüklemeye izin ver” seçeneğini arayın." label: "Geri Yükle" title: "Yedeklemeyi geri yükle" confirm: "Bu yedeklemeyi geri yüklemek istediğinizden emin misiniz?" @@ -6438,20 +7046,27 @@ tr_TR: delete: "Sil" delete_confirm: '"%{theme_name}" adlı temayı silmek istediğinizden emin misiniz?' bulk_delete: "Emin misiniz?" + bulk_themes_delete_confirm: "Bu işlem aşağıdaki temaları kaldıracak ve sitenizdeki hiçbir kullanıcı tarafından artık kullanılamayacaklardır:" + bulk_components_delete_confirm: "Bu işlem aşağıdaki bileşenleri kaldıracak ve artık sitenizdeki hiçbir kullanıcı tarafından kullanılamayacaktır:" color: "Renk" opacity: "Opaklık" copy: "Eş Kopya" copy_to_clipboard: "Panoya kopyala" copied_to_clipboard: "Panoya Kopyalandı" copy_to_clipboard_error: "Veriler Panoya kopyalanırken hata oluştu" + theme_owner: "Sahibi:" email_templates: title: "E-posta" subject: "Konu" multiple_subjects: "Bu e-posta şablonunda birden fazla konu mevcut." + multiple_bodies: "Bu e-posta şablonu birden fazla gövdeye sahiptir." body: "Gövde" revert: "Değişiklikleri Geri Al" revert_confirm: "Değişikliklerinizi geri almak istediğinizden emin misiniz?" + search_templates: "Şablon adına göre filtrele..." + no_templates_found: "Filtrelerinize uyan şablon bulunamadı." edit: "Düzenle" + back: "Şablonlara geri dön" component: all_filter: "Tümü" used_filter: "Kullanılmış" @@ -6486,6 +7101,8 @@ tr_TR: create_name: "Ad" save: "Kaydet" long_title: "Sitenizin renklerini, CSS ve HTML içeriğini değiştirin" + dark_mode: "%{themeName} karanlık mod" + light_mode: "%{themeName} açık mod" edit: "Düzenle" edit_confirm: "Bu uzak bir temadır, CSS/HTML'yi düzenlerseniz temayı bir dahaki sefere güncellemeniz için değişiklikleriniz silinir." update_confirm: "Bu yerel değişiklikler güncelleme ile silinecek. Devam etmek istediğinizden emin misiniz?" @@ -6512,7 +7129,9 @@ tr_TR: dark_color_scheme: "Koyu Renk Paleti" default_light_scheme: "Açık (varsayılan)" color_scheme_select: "Tema tarafından kullanılacak renkleri seçin." + only_theme_color_schemes: "Bu tema, hangi renk paletlerinin kullanılabileceğini sınırlar." dark_color_scheme_select: "Koyu modda tema tarafından kullanılacak renkleri seçin." + edit_colors: "Renkleri düzenle" custom_sections: "Özel bölümler:" theme_components: "Tema Bileşenleri" add_all_themes: "Tüm temaları ekle" @@ -6524,10 +7143,12 @@ tr_TR: convert_theme_alert_generic: "Bu temayı bileşene dönüştürmek istediğinizden emin misiniz?" convert_theme_tooltip: "Bu temayı bileşene dönüştür" inactive_themes: "Etkin olmayan temalar:" + set_default_theme: "Varsayılan olarak ayarla" default_theme: "Varsayılan tema" set_default_success: "Varsayılan tema %{theme} olarak ayarlandı" setting_was_saved: "Tema ayarı kaydedildi" install_success: "%{theme} başarıyla yüklendi!" + delete_success: "%{theme} başarıyla silindi!" inactive_components: "Kullanılmayan bileşenler:" selected: one: "%{count} tane seçildi" @@ -6569,7 +7190,7 @@ tr_TR: import_web_tip: "Tema içeren depo" direct_install_tip: "Aşağıda listelenen depodan şunu yüklemek istediğinizden emin misiniz: %{name}?" import_web_advanced: "Gelişmiş…" - import_file_tip: "Tema içeren .tar.gz, .zip veya .dcstyle.json dosyası" + import_file_tip: "Temayı içeren .tar.gz veya .zip dosyası" is_private: "Tema özel bir git deposunda" finish_install: "Tema Yüklemesini Bitir" last_attempt: "Yükleme işlemi bitmedi, son deneme zamanı:" @@ -6606,6 +7227,16 @@ tr_TR: update_success: "%{theme} Güncelleme tamamlandı" up_to_date: "Tema güncel, son kontrol:" has_overwritten_history: "Geçerli tema sürümü artık mevcut değil çünkü Git geçmişi zorla gönderilerek üzerine yazıldı." + change_source: + button: "Kaynağı değiştir" + title: "Tema Kaynağını Değiştir" + repository_url: "Depo URL'si" + branch: "Dal (isteğe bağlı)" + updating: "Tema kaynağı güncelleniyor…" + update: "Kaynağı güncelle" + has_existing_key: "Bu temada önceden yapılandırılmış bir SSH anahtarı bulunmaktadır." + generate_new_key: "Yeni SSH anahtarı oluştur" + keep_existing_key: "Mevcut SSH anahtarını koru" add: "Ekle" theme_settings: "Özel tema ayarları" theme_site_settings: "Temanın geçersiz kılabileceği ayarlar" @@ -6700,12 +7331,16 @@ tr_TR: select_base: title: "Temel renk paletini seçin" description: "Temel palet:" + non_default_theme_warning: "Tema için kişisel tercihleriniz varsayılanlardan farklıdır. Burada yaptığınız değişiklikler size uygulanmayabilir, ancak varsayılanı (%{themeName}) kullanan herkese uygulanacaktır." + custom_schemes_warning: "%{colorModes} renk paleti için kişisel tercihleriniz varsayılan ayarlardan farklıdır. %{colorModes} paletinde yapılan değişiklikler sizin için geçerli olmayabilir, ancak varsayılan ayarları kullanan herkes için geçerli olacaktır." light: "açık" dark: "koyu" title: "Renkler" edit: "Düzenle" + view: "Görüntüle" set_default_light: "Varsayılan temada açık renk paleti olarak ayarla (%{theme})" set_default_dark: "Varsayılan temada koyu renk paleti olarak ayarla (%{theme})" + set_default_success: "%{schemeName} %{themeName} için varsayılan palet olarak ayarlandı" saved_refreshing: "Kaydedildi! Renkler yenileniyor..." from_theme: "Temadan: %{name}" filters: @@ -6715,7 +7350,12 @@ tr_TR: from_theme: "Temadan" no_results: "Renk paleti bulunamadı" default_light_badge: + text: "Varsayılan ışık" + title: "Varsayılan ışık renk paleti" reset: "Filtreleri sıfırla" + default_dark_badge: + text: "Varsayılan koyu renk" + title: "Varsayılan koyu renk paleti" system_palette: "Bu yerleşik bir renk paleti; düzenlenemez veya silinemez." back_to_colors: "Renk paletlerine geri dön" long_title: "Renk paletleri" @@ -7035,6 +7675,12 @@ tr_TR: tag_group_change: "etiket grubunu değiştir" delete_associated_accounts: "ilişkili hesapları sil" change_theme_site_setting: "tema site ayarını değiştirin" + stop_impersonating: "kişiyi taklit etmeyi bırak" + upcoming_change_toggled: "yaklaşan değişiklik etkinleştirildi" + upcoming_change_available: "yakında değişiklik mevcut" + change_site_setting_groups: "site ayar gruplarını değiştir" + discourse_id_regenerate_credentials: "Discourse ID kimlik bilgilerini yeniden oluştur" + configure_category_type: "kategori türünü yapılandır" screened_emails: title: "Taranan e-postalar" description: "Biri yeni bir hesap oluşturmaya çalıştığında, aşağıdaki e-posta adresleri kontrol edilir ve kayıt engellenir veya başka bir işlem gerçekleştirilir." @@ -7089,6 +7735,7 @@ tr_TR: clear_all: Tümünü temizle clear_all_confirm: "%{action} eylemi için izlenen tüm kelimeleri temizlemek istediğinizden emin misiniz?" invalid_regex: '"%{word}" izlenen kelimesi geçersiz bir normal ifade.' + invalid_regex_multiple: "Geçersiz Düzenli İfadeler:" regex_warning: 'İzlenen kelimeler düzenli ifadeler ve otomatik olarak kelime sınırlarını içermiyorlar. İfadenin tam kelimelerle eşleşmesini istiyorsanız ifadenizin başına ve sonuna \b ekleyin.' actions: block: "Engelle" @@ -7121,6 +7768,7 @@ tr_TR: success: "Başarılı" exists: "Zaten mevcut" upload: "Dosyadan ekle" + upload_successful: "Yükleme başarılı. Kelimeler kısa süre içinde işlenecektir." case_sensitivity_label: "büyük/küçük harfe duyarlı" case_sensitivity_description: "Sadece eşleşen karakter muhafazası olan kelimeler" html_label: "HTML" @@ -7171,6 +7819,7 @@ tr_TR: upload: "Dosya yükle" multiselect: "Çoktan seçmeli" tagchooser: "Etiket Grubu seçici" + composer: "Markdown yanıtı" validations_modal: button_title: "Doğrulamalar" modal_title: "Doğrulama Seçenekleri" @@ -7212,7 +7861,10 @@ tr_TR: second: "Seçenek 2" third: "Seçenek 3" edit_category: + toggle_freeform: "Form şablonu devre dışı bırakıldı" + toggle_form_template: "Form şablonu etkinleştirildi" select_template: "Form şablonları seçin" + select_template_help: "Form şablonları ekle/düzenle" errors: multiple_tags_not_allowed: '"%{tag_name}" etiketinden daha fazla etiket seçemezsiniz. Sorunları önlemek için Form Şablonu kullanın' impersonate: @@ -7220,6 +7872,7 @@ tr_TR: help: "Hata ayıklama amacıyla bir kullanıcı hesabının kimliğine bürünmek için bu aracı kullanın. Bittiğinde oturumu kapatmanız gerekecek." not_found: "Kullanıcı bulunamadı." invalid: "Üzgünüz, o kullanıcının kimliğine bürünemezsiniz." + error: "Oops. Beklenmedik bir hata oluştu." users: title: "Kullanıcılar" description: "Kullanıcıları görüntüleyin ve yönetin." @@ -7328,6 +7981,17 @@ tr_TR: penalty_post_actions: "İlişkili gönderiyle ne yapmak istiyorsunuz?" penalty_post_delete: "Gönderiyi sil" penalty_post_delete_replies: "Gönderiyi ve tüm yanıtları silin" + penalty_post_delete_all: "Kullanıcı tarafından oluşturulan tüm konuları + tüm yanıtları sil" + penalty_post_delete_all_confirmation_MF: | + Bu işlem + { TOPICS, plural, + one {# topic} + other {# topics} + } ve + { REPLIES, plural, + one {# reply} + other {# replies} + } öğelerini silecektir. Bu işlem geri alınamaz! Bunu yapmak istediğinizden emin misiniz? penalty_post_edit: "Gönderiyi düzenleyin" penalty_post_none: "Hiçbir şey yapma" penalty_count: "Ceza Sayısı" @@ -7385,6 +8049,11 @@ tr_TR: approve_bulk_success: "Başarılı! Seçilen tüm kullanıcılar onaylandı ve bilgilendirildi." time_read: "Okuma Zamanı" post_edits_count: "Gönderi Düzenlemeleri" + upcoming_changes: + title: "Kullanıcı yaklaşan değişiklikler" + description: "Grupları değiştirmek veya yaklaşan değişiklikleri etkinleştirmek veya devre dışı bırakmak için lütfen yaklaşan değişiklikler yapılandırma sayfası'nı ziyaret edin." + filter_placeholder: "Yaklaşan değişiklikleri ada veya açıklamaya göre filtrele" + filter_no_results: "Yakında yapılacak değişiklik bulunamadı" exports: title: Kullanıcı dışa aktarmaları download: @@ -7409,6 +8078,9 @@ tr_TR: button: "Tüm gönderileri sil" progress: title: "Gönderileri silme ilerleme durumu" + description: + one: "@%{username} tarafından yazılan %{count} gönderi siliniyor..." + other: "@%{username} tarafından yazılan %{count} gönderi siliniyor..." confirmation: title: "@%{username} tarafından gönderilen tüm gönderileri sil" description: | @@ -7420,6 +8092,7 @@ tr_TR: text: "@%{username} adlı kullanıcının gönderilerini sil" delete: "@%{username} adlı kullanıcının gönderilerini sil" cancel: "İptal et" + all_enqueued: "@%{username}'nın tüm gönderileri silinmek üzere sıraya alınmıştır." merge: button: "Birleştir" prompt: @@ -7446,6 +8119,8 @@ tr_TR: cancel: "İptal et" merging_user: "Kullanıcı birleştiriliyor…" merge_failed: "Kullanıcılar birleştirilirken bir hata oluştu." + delete_forbidden_because_admin: "Yöneticiler silinemez." + delete_posts_forbidden_because_admin: "Yöneticilerin tüm gönderilerini silinemiyor." delete_forbidden: one: "Gönderileri olan kullanıcılar silinemez. Bir kullanıcıyı silmeye çalışmadan önce tüm gönderileri silin. (%{count} günden eski gönderiler silinemez.)" other: "Gönderileri olan kullanıcılar silinemez. Bir kullanıcıyı silmeye çalışmadan önce tüm gönderileri silin. (%{count} günden eski gönderiler silinemez.)" @@ -7592,6 +8267,10 @@ tr_TR: title: "Kullanıcı kartında göster" enabled: "Kullanıcı kartında gösterilir" disabled: "Kullanıcı kartında gösterilmez" + show_on_signup: + title: "Kayıt formunda göster" + enabled: "Gösterilen kayıt formu" + disabled: "Kayıt formunda gösterilmiyor" searchable: title: "Aranabilir" enabled: "Aranabilir" @@ -7599,6 +8278,7 @@ tr_TR: field_types: text: "Metin" textarea: "Metin alanı" + date: "Tarih" confirm: "Onayla" dropdown: "Açılır Menü" multiselect: "Çoklu seçim" @@ -7619,6 +8299,9 @@ tr_TR: more_than_50_results: "50'den fazla sonuç var. Lütfen aramanızı daraltın." no_results: "Eşleşen site metni yok" interpolation_keys: "Mevcut enterpolasyon tuşları:" + interpolation_key_insert: "Eklemek için tıklayın" + interpolation_key_used: "Zaten kullanılmış" + interpolation_key_invalid: "Bilinmeyen anahtar — enterpolasyon yapılmayacaktır" outdated: title: "Bu çeviri güncel değil" description: "Bu anahtar için varsayılan çeviri, bu geçersiz kılma oluşturulduktan sonra değişti. Lütfen aşağıdan çevirinizin orijinal amaçta yapılan değişikliklerle eşleşip eşleşmediğini kontrol edin." @@ -7666,6 +8349,9 @@ tr_TR: label: "Yükle" title: "Görüntü yükle" download_file: "İndir" + upload_restrictions: + extensions: "Kabul Edilenler: %{extensions}" + max_size: "Maksimum: %{size}" selectable_avatars: title: "Kullanıcıların seçebileceği avatarların listesi" table_column_heading: @@ -7704,6 +8390,7 @@ tr_TR: experimental: "Deneysel" secret_list: invalid_input: "Girdi alanları boş olamaz veya dikey çubuk karakteri içeremez." + already_exists: "%{key} girişi zaten mevcut." default_categories: modal_description: one: "Bu değişikliği tarihsel olarak uygulamak ister misiniz? Bu, %{count} mevcut kullanıcının tercihlerini değiştirir." @@ -7728,13 +8415,23 @@ tr_TR: prompt: "Bu ayarı değiştirmenin siteniz için geniş kapsamlı veya istenmeyen sonuçları olabilir. Devam etmek istediğinizden emin misiniz?" confirm: "Evet, eminim" min_password_length: + prompt: "Şifre politikanızı değiştirmek üzeresiniz. Bu, bundan sonra şifrelerini değiştiren tüm kullanıcıları etkileyecektir. Devam etmek istediğinizden emin misiniz?" confirm: "Evet, şifre politikasını güncelle" min_admin_password_length: + prompt: "Şifre politikanızı değiştirmek üzeresiniz. Bu, bundan sonra şifrelerini değiştiren tüm yöneticileri etkileyecektir. Devam etmek istediğinizden emin misiniz?" confirm: "Evet, şifre politikasını güncelle" - password_unique_charactes: + password_unique_characters: + prompt: "Şifre politikanızı değiştirmek üzeresiniz. Bu, bundan sonra şifrelerini değiştiren tüm kullanıcıları etkileyecektir. Devam etmek istediğinizden emin misiniz?" confirm: "Evet, şifre politikasını güncelle" block_common_passwords: + prompt: "Şifre politikanızı değiştirmek üzeresiniz. Bu, bundan sonra şifrelerini değiştiren tüm kullanıcıları etkileyecektir. Devam etmek istediğinizden emin misiniz?" confirm: "Evet, şifre politikasını güncelle" + clean_up_inactive_users_after_days: + prompt: "Bu değeri 0 dışında bir değere ayarlamak, o kadar gün boyunca aktif olmayan kullanıcıların kalıcı olarak silinmesine neden olacaktır. Devam etmek istediğinizden emin misiniz?" + confirm: "Evet, bu değeri 0 olarak ayarlamadığım sürece, aktif olmayan kullanıcıların kalıcı olarak silineceğini anlıyorum." + job_status: + completed: "Güncelleme tamamlandı" + enqueued: "Güncelleme devam ediyor" badges: status: Durum title: Rozetler @@ -7768,7 +8465,10 @@ tr_TR: no_user_badges: "%{name} adlı kullanıcıya hiç rozet verilmedi." no_badges: Verilebilecek rozet yok. none_selected: "Başlamak için bir rozet seçin" + filter_placeholder: "Rozetleri filtrele..." + no_badges_found: "Rozet bulunamadı" sections: + design: Tasarım query: Sorgu settings: Ayarlar usage_heading: Kullanım @@ -7871,6 +8571,7 @@ tr_TR: category: "Kategoride yayınla" tags: "Konu etiketleri" post_author: "Gönderi yazarı" + post_author_description: "Bu ana bilgisayardaki tüm gömülü konuların yazarı, blog sayfası meta etiketlerini geçersiz kılar. Sayfanın veya etiketlerinden yazarı okumak için boş bırakın." post_author_with_default: "Gönderi yazarı (varsayılan olarak %{author})" add_host: "Sunucu ekle" posts_and_topics: "Gönderiler ve konu yapılandırması" @@ -7889,6 +8590,8 @@ tr_TR: crawler_settings_saved: "Gezgin ayarları kaydedildi" back: "Yerleştirmeye geri dön" configuration_snippet: "Yapılandırma parçacığı" + full_app_mode: "Tam uygulama modu" + full_app_mode_description: "Discourse uygulamasının tamamını gömülü iframe'e yükleyin; böylece kullanıcılar doğrudan yanıt verebilir, beğenebilir, alıntı yapabilir ve konularla etkileşime girebilir" host_form: add_header: "Sunucu ekle" edit_header: "Sunucuyu düzenle" diff --git a/config/locales/client.ug.yml b/config/locales/client.ug.yml index 7e97fd9bbb41a..d739a1b721d12 100644 --- a/config/locales/client.ug.yml +++ b/config/locales/client.ug.yml @@ -6,6 +6,17 @@ ug: js: + blocks: + ghost: + status: "ھالەت" + conditions: "شەرت" + arguments: "ئۆزگەرگۈچى" + container_args: "يۈكدان ئۆزگەرگۈچىسى" + in_location: "دا" + hidden: "يوشۇرۇن" + not_registered: "خەتلەتمىگەن" + no_visible_children: "كۆرۈنۈشچان تارماق تۈرى يوق" + failed: "مەغلۇب بولدى" carousel: go_to_slide: "%{index}-سىيرىلمىغا يۆتكەل" previous: "ئالدىنقى سىيرىلما" @@ -326,6 +337,8 @@ ug: theme_source: "ئۆرنەك '%{name}'" plugin_source: "قىستۇرما «%{name}»" unknown_source: "ئۆرنەك ياكى قىستۇرمىڭىزدىن بىرى" + dev_tools: + drag_to_move: "سۆرەپ يۆتكە" s3: regions: ap_northeast_1: "ئاسىيا تىنچ ئوكيان (توكيو)" @@ -415,6 +428,11 @@ ug: pill: "تەۋسىيە" pm_title: "تەۋسىيە ئۇچۇر" admin_onboarding_banner: + invite_collaborators: + action: "تەكلىپ قۇر" + start_posting: + title: "يوللاشنى باشلا" + back: "كەينى" spread_the_word: action: "ئۇلانما كۆچۈر" copied_to_clipboard: "ئۇلانما چاپلاش تاختىسىغا كۆچۈرۈلدى!" @@ -499,8 +517,6 @@ ug: other: "%{count} يىل ئىلگىرى قۇرۇلغان" bookmarked: title: "خەتكۈچ" - edit_bookmark: "خەتكۈچ تەھرىر" - clear_bookmarks: "خەتكۈچنى تازىلا" help: bookmark: "چېكىلسە بۇ تېمىنى خەتكۈچكە قوشىدۇ" edit_bookmark: "چېكىلسە بۇ تېمىدىكى يازمىنىڭ خەتكۈچىنى تەھرىرلەيدۇ" @@ -519,12 +535,12 @@ ug: clear_reminder: "ئەسكەرتىشنى تازىلا" edit: "خەتكۈچ تەھرىر" not_bookmarked: "بۇ يازمىنى خەتكۈچكە قوش" + topic_bookmark: "تېما" remove_reminder_keep_bookmark: "ئەسكەرتىشنى چىقىرىۋېتىپ، خەتكۈچنى ساقلاپ قالىدۇخەتكۈچ" created_with_reminder: "سىز بۇ يازمىنى ئەسكەرتىشى %{date} بىلەن قوشۇپ خەتكۈچكە قوشتىڭىز. %{name}" created_with_reminder_generic: "سىز بۇنى ئەسكەرتىشى %{date} بىلەن قوشۇپ خەتكۈچكە قوشتىڭىز. %{name}" delete: "خەتكۈچنى ئۆچۈر" confirm_delete: "بۇ خەتكۈچنى راستىنلا ئۆچۈرەمسىز؟ بۇ ئەسكەرتىشمۇ قوشۇپ ئۆچۈرۈلىدۇ." - confirm_clear: "بۇ تېمىدىن بارلىق خەتكۈچلىرىڭىزنى راستىنلا تازىلامسىز؟" save: "ساقلا" no_timezone: 'سىز تېخى ۋاقىت رايونىنى تەڭشىمىدىڭىز. ئەسكەرتىشنى تەڭشىيەلمايسىز. تەرجىمىھالىڭىزدا تەڭشەڭ.' invalid_custom_datetime: "سىز تەمىنلىگەن چېسلا ۋە ۋاقىت ئىناۋەتسىز، قايتا سىناڭ." @@ -657,19 +673,13 @@ ug: in_reply_to: "جاۋاب" filtered_flagged_by: "پاش قىلغۇچى" unknown: - title: - one: "چەكلىگەن قىستۇرمىنىڭ كېچىكتۈرۈلگەن تەكشۈرۈشچان ئىنكاسى بار:" - other: "چەكلىگەن قىستۇرمىنىڭ كېچىكتۈرۈلگەن تەكشۈرۈشچان ئىنكاسى بار:" instruction: "سىز مۇناسىپ قىستۇرمىنى قوزغاتمىغۇچە ئۇلار نورمال كۆرۈنمەيدۇ. قىستۇرمىنى قوزغىتىپ بەتنى يېڭىلاڭ. ياكى، ئۇلارغا پەرۋا قىلمىسىڭىزمۇ بولىدۇ. مول بىلىم…" reviewable_unknown_source: "%{reviewableType} (يوچۇن قىستۇرما)" reviewable_known_source: "%{reviewableType} («%{pluginName}» قىستۇرمىدىن)" ignore_all: "ھەممىگە پەرۋا قىلما" enable_plugins: "قىستۇرما قوزغات" - delete_confirm: "چەكلەنگەن قىستۇرما قۇرغان بارلىق باھالاشلارنىڭ ھەممىسىنى ئۆچۈرەمدۇ؟" - ignore_success: "چەكلەنگەن قىستۇرما قۇرغان بارلىق باھالاش ئۆچۈرۈلدى." explain: why: "بۇ تۈرنىڭ نېمە ئۈچۈن ئاخىرىدا ئۆچرەتكە كىرگەنلىكىنى چۈشەندۈرۈڭ" - title: "تەكشۈرگىلى بولىدىغان نومۇر" formula: "فورمۇلا" subtotal: "تارماق جەمئىي" total: "جەمئىي" @@ -683,10 +693,8 @@ ug: title: "پاش قىلىشى ئىلگىرى ماقۇللانغان ئىشلەتكۈچى تارتۇقلىنىدۇ." trust_level_bonus: name: "ئىشەنچ دەرىجىسى" - title: "ئىشەنچ دەرىجىسى يۇقىرى ئىشلەتكۈچى قۇرغان تەكشۈرۈشچان تۈرنىڭ نومۇرى تېخىمۇ يۇقىرى بولىدۇ." type_bonus: name: "تۈر مۇكاپاتى" - title: "باشقۇرغۇچى بەزى تەكشۈرۈشچان تۈرگە نومۇر قوشۇپ، ئۇنى تېخىمۇ ئالدىنلىققا ئىگە قىلالايدۇ." revise_and_reject_post: title: "تۈزىتىش" reason: "سەۋەبى" @@ -695,7 +703,6 @@ ug: custom_reason: "سەۋەبىنى ئېنىق چۈشەندۈرۈڭ" other_reason: "باشقا…" optional: "تاللاشچان" - stale_help: "بۇ تەكشۈرۈشچان تۈرنى %{username} ھەل قىلدى." claim_help: optional: "سىز باشقىلارنىڭ تەكشۈرۈشىنىڭ ئالدىنى ئېلىش ئۈچۈن بۇ تۈرنى تەلەپ قىلسىڭىز بولىدۇ." required: "ئاۋال تۈرنى تەلەپ قىلىپ ئاندىن ئۇلارنى تەكشۈرۈپ تەستىقلىيالايسىز." @@ -1727,6 +1734,10 @@ ug: apps: "ئەپ" navigation_menu: "يولباشچى تىزىملىك" upcoming_changes: "كەلگۈسى ئۆزگىرىش" + calendar_subscriptions: "يىلنامە" + calendar_subscriptions: + copied: "كۆچۈرۈلدى!" + add_to_google: "Google يىلنامە" change_password: success: "(ئېلخەت يوللاندى)" in_progress: "(ئېلخەت يوللاۋاتىدۇ…)" @@ -2337,6 +2348,7 @@ ug: form_kit: reset: ئەسلىگە قايتۇر optional: تاللاشچان + required: زۆرۈر dirty_form: "ئۆزگەرتىشلىرىڭىزنى تاپشۇرمىدىڭىز! راستتىنلا ئايرىلامسىز؟" errors: starts_with: "چوقۇم %{prefix} بىلەن باشلىنىدۇ" @@ -2356,6 +2368,9 @@ ug: too_short: one: "كەم دېگەندە %{count} ھەرپ بولۇشى كېرەك." other: "كەم دېگەندە %{count} ھەرپ بولۇشى كېرەك" + color: + already_used: "ئىشلىتىلگەن" + edit_presets: "رەڭ ئالدىن تەڭشىكىنى تەھرىرلەيدۇ" close: "تاقا" assets_changed_confirm: "بۇ تور بېكەت يۇمشاق دېتال يېڭىلاشنى تاپشۇرۇۋالدى. ھازىر ئەڭ يېڭى نەشرىگە ئېرىشسۇنمۇ؟" logout: "سىز تىزىمدىن چىققان." @@ -2402,6 +2417,7 @@ ug: } چېكىدىن ئېشىپ كەتتى. learn_more: "مول بىلىم…" learn_more_with_link: "مول بىلىم…" + feedback_with_link: "قايتۇرما ئىنكاس…" mute: ئۈنسىز unmute: ئۈنلۈك last_post: يوللانغان ۋاقىت @@ -2738,6 +2754,8 @@ ug: medium_dark_tone: ئوتتۇراھال قېنىق تېرە رەڭگى dark_tone: قېنىق تېرە رەڭگى default: ئىختىيارى چىراي ئىپادە + filter_input: + clear: "سۈزگۈچنى تازىلا" shared_drafts: title: "دەسلەپكى نۇسخا ھەمبەھىر" notice: "بۇ تېما پەتقەت ھەمبەھىر دەسلەپكى نۇسخا يوللىيالايدىغانلارغىلا كۆرۈنىدۇ." @@ -2885,6 +2903,7 @@ ug: upload_description: "بۇ جايغا يۈكلەش چۈشەندۈرۈشى كىرگۈزۈلىدۇ" olist_title: "نومۇرلۇق تىزىم" ulist_title: "بەلگە تىزىمى" + list_title: "تىزىم" list_item: "تىزىم تۈرى" toggle_direction: "يۆنىلىش ئالماشتۇر" apply_wrap_title: "ئوراشنى قوللان" @@ -2970,6 +2989,9 @@ ug: image: "سۈرەت" grid_label: "بۇ شادا سۈپىتىدە كۆرسىتىلىدۇ" grid_mode_grid: "شادا" + grid_mode_carousel: "نۆۋەتلىشىپ تارقىتىش" + grid_mode_title: "سۈرەتدان ئۇسلۇبىنى %{mode} غا تەڭشەيدۇ" + remove_grid: "شادىنى چىقىرىۋەت" image_scale_button: "سۈرەتنى %%{percent} كە تەڭشە" delete_image_button: سۈرەت ئۆچۈر toggle_image_grid: سۈرەت سېتكىسىنى ئالماشتۇر @@ -3246,8 +3268,6 @@ ug: max_views: placeholder: ئەڭ كۆپ aria_label: ئەڭ كۆپ كۆرۈلۈشى بويىچە سۈزىدۇ - additional_options: - label: "يازما سانى ۋە تېما كۆرۈلۈشى بويىچە سۈزىدۇ" hamburger_menu: "يولباشچى تىزىملىك" new_item: "يېڭى" go_back: "قايت" @@ -3311,11 +3331,8 @@ ug: confirm: "جەزملە" select_all: "ھەممىنى تاللا" clear_all: "ھەممىنى تازىلا" - unlist_topics: "تىزىلمىغان تېما" - relist_topics: "قايتا تىزىلغان تېما" reset_bump_dates: "چوققىلانغان چېسلانى ئەسلىگە قايتۇر" defer: "ئوقۇلمىغان بەلگىسى سال" - delete: "تېما ئۆچۈر" delete_topics_count: one: "تېما ئۆچۈر" other: "تېما ئۆچۈر" @@ -3354,36 +3371,25 @@ ug: other: "يېڭىغا پەرۋا قىلما (%{count})" toggle: "تېمىنى توپ تاللاشنى ئالماشتۇر" actions: "توپ مەشغۇلات" - change_category: "سەھىپە تەڭشەك…" - close_topics: "تېمىنى تاقا" - archive_topics: "تېما ئارخىپلاشتۇر" move_messages_to_inbox: "قوبۇللاش ساندۇقىغا يۆتكە" archive_messages: "ئارخىپقا يۆتكە" - notification_level: "ئۇقتۇرۇش…" change_notification_level: "ئۇقتۇرۇش دەرىجىسىنى ئۆزگەرت" choose_new_category: "تېمىغا يېڭى سەھىپە تاللىنىدۇ:" - selected: - one: "سىز %{count} تېما تاللىدىڭىز." - other: "سىز %{count} تېما تاللىدىڭىز." selected_sole_category: one: "سەھىپىدىنن %{count} تېما تاللىدىڭىز:" other: "سەھىپىدىنن %{count} تېما تاللىدىڭىز:" selected_count: one: "%{count} تاللاندى" other: "%{count} تاللاندى" - change_tags: "بەلگە ئالماشتۇر" - append_tags: "بەلگە قوش" choose_new_tags: "بۇ تېمىغا يېڭى بەلگە تاللىنىدۇ:" - choose_append_tags: "بۇ تېمىغا قوشىدىغان يېڭى خەتكۈچ تاللىنىدۇ:" changed_tags: "بۇ تېمىلارنىڭ بەلگىسى ئۆزگەرتىلگەن." - remove_tags: "ھەممە خەتكۈچنى چىقىرىۋەت" confirm_remove_tags: one: "ھەممە بەلگە بۇ تېمىدىن چىقىرىۋېتىلىدۇ. راستتىنلا شۇنداق قىلامسىز؟" other: "ھەممە بەلگە %{count} تېمىدىن چىقىرىۋېتىلىدۇ. راستتىنلا شۇنداق قىلامسىز؟" progress: one: "ئىلگىرىلىشى: %{count} تېما" other: "ئىلگىرىلىشى: %{count} تېما" - notify: "ئىشلەتكۈچىگە بۇ ئۆزگىرىشنى ئۇقتۇرىدۇ." + notify: "ئىشلەتكۈچىگە بۇ ئۆزگىرىشنى ئۇقتۇرىدۇ" performing: "توپ مەشغۇلات ئىجرا قىلىۋاتىدۇ، سەل كۈتۈڭ…" completed: "توپ مەشغۇلات مۇۋەپپەقىيەتلىك تاماملاندى!" error_topic_count: @@ -3411,7 +3417,6 @@ ug: name: "پەرۋا قىلما" close_topics: name: "تاقا" - note: "ئەسكەرتىش" optional: (تاللاشچان) archive_topics: name: "ئارخىپ" @@ -3425,24 +3430,18 @@ ug: name: "تىزىمغا قايتا قوش" remove_tags: name: "بەلگىنى چىقىرىۋەت" - append_tags: - name: "بەلگە قوش" replace_tags: name: "بەلگە ئالماشتۇر" delete_topics: name: "ئۆچۈر" update_category: name: "سەھىپىنى يېڭىلا" - description: "تاللىغان تېمىغا يېڭى سەھىپە تاللايدۇ" reset_bump_dates: name: "چوققىلىغان چېسلانى ئەسلىگە قايتۇر" - description: "چوققىلانغان ۋاقتىنى يازما يوللانغان ئاخىرقى ۋاقىتقا ئەسلىگە قايتۇرىدۇ، بۇ يازما تىزىمىنىڭ تەرتىپىگە تەسىر كۆرسىتىدۇ" defer: name: "ئوقۇلمىغان بەلگىسى سال" - description: "تېمىغا ئوقۇلمىدى بەلگىسى سالىدۇ" update_notifications: name: "ئوقتۇرۇش يېڭىلا" - description: "ئۇقتۇرۇش دەرىجىسىنى كۆزىتىش، ئىزلاش، ئادەتتىكى ياكى ئۈنسىز ھالەتكە ئۆزگەرتىدۇ" topic: filter_to: one: "تېمىدىكى %{count} يازما" @@ -3981,7 +3980,9 @@ ug: edit: "تەھرىر" delete: "ئۆچۈر" add: "يېڭى تەرجىمە قوش" - manage: "تەرجىمە باشقۇرۇش (%{count} مەۋجۇت)" + manage: + one: "تەرجىمە باشقۇرۇش (%{count} مەۋجۇت)" + other: "تەرجىمە باشقۇرۇش (%{count} مەۋجۇت)" view: one: "%{count} تەرجىمە قىلىنغان يەرلىك تىلنى كۆرسىتىدۇ" other: "%{count} تەرجىمە قىلىنغان يەرلىك تىلنى كۆرسىتىدۇ" @@ -4233,7 +4234,10 @@ ug: delete: "سەھىپە ئۆچۈر" create: "يېڭى سەھىپە" create_long: "يېڭى سەھىپە قۇرىدۇ" + type_settings_schema: + site_settings: "بېكەت تەڭشىكى" save: "سەھىپە ساقلا" + unsaved_changes: "ساقلانمىغان ئۆزگەرتىشلىرىڭىز بار" slug: "سەھىپە قىسقارتما" parent: "ئانا سەھىپە" slug_placeholder: "(تاللاشچان) تور ئادرېسىغا ئىشلىتىلىدىغان سىزىقلىق سۆز" @@ -4275,6 +4279,8 @@ ug: list: "سەھىپە تىزىمىنى كۆرسەت" no_description: "بۇ سەھىپىنىڭ چۈشەندۈرۈشىنى قوشۇڭ." change_in_category_topic: "چۈشەندۈرۈش تەھرىر" + description_expand: "تېخىمۇ كۆپ كۆرسەت" + description_collapse: "ئازراق كۆرسەت" already_used: "بۇ رەڭ باشقا بىر سەھىپىگە ئىشلىتىلگەن" color_palette: "رەڭ تاختا" security: "بىخەتەرلىك" @@ -4313,6 +4319,9 @@ ug: review_group_name: "گۇرۇپپا ئىسمى:" require_topic_approval: "ھەممە يېڭى تېمىنى رىياسەتچى تەستىقلىشى كېرەك" require_reply_approval: "ھەممە يېڭى جاۋابنى رىياسەتچى تەستىقلىشى كېرەك" + posting_review_modes: + no_one: "ھېچكىم" + everyone: "ھەممەيلەن" this_year: "بۇ يىل" position: "سەھىپە بېتىدىكى ئورنى:" default_position: "كۆڭۈلدىكى ئىجازەت" @@ -4866,7 +4875,20 @@ ug: other: "ئۇنىڭ %{count} مەنىداش سۆزىمۇ ئۆچۈرۈلىدۇ" edit_tag: "بەلگە ئىسمى ۋە چۈشەندۈرۈشىنى تەھرىرلەيدۇ" edit: "بۇ بەلگىنى تەھرىرلە" - description: "چۈشەندۈرۈش (ئەڭ كۆپ بولغاندا 1000 ھەرپ)" + description: "چۈشەندۈرۈش" + settings: + title: "تەڭشەك" + general: "ئادەتتىكى" + localizations: "يەرلىكلەشتۈرۈش" + back: "كەينى" + name: "ئىسمى" + slug: "قىسقارتما" + name_placeholder: "بەلگە ئىسمى" + synonyms_subtitle: "تۆۋەندىكى بەلگە ئىشلىتىلگەندە، ئۇلار %{name} غا ئالماشتۇرۇلىدۇ" + localization: + locale: "يەرلىك" + name: "ئىسمى" + description: "چۈشەندۈرۈش" sort_by: "تەرتىپى:" sort_by_count: "ساناق" sort_by_name: "ئىسمى" @@ -5369,7 +5391,6 @@ ug: admin_js: type_to_filter: "كىرگۈزۈلسە سۈزىدۇ…" settings: "تەڭشەكلەر" - reset_filter: "ئەسلىگە قايتۇر" toggle_filters: "تارتما سۈزگۈچنى ئالماشتۇرىدۇ" admin: title: "Discourse باشقۇرغۇچى" @@ -5383,9 +5404,11 @@ ug: never: "ھەرگىز" reports: title: "مەۋجۇت دوكلات تىزىمى" - meta_doc: "دوكلات تور بېكىتىڭىزدە نېمە ئىش يۈز بەرگەنلىكىنى بىلىشىڭىزگە ياردەم بېرىدىغان كۈچلۈك قورال. ئۇلار سىزنىڭ ۋەزىيەتنى بىلىش، مەسىلە بايقاش ۋە سانلىق مەلۇماتقا ئاساسەن قارار چىقىرىشىڭىزغا ياردەم بېرىدۇ." sidebar_title: "دوكلات" back: "ھەممە دوكلاتقا قايت" + group_traffic: "ئېقىم" + group_members: "ئەزا" + group_other: "باشقا" config_sections: account: title: "ھېسابات" @@ -5424,7 +5447,6 @@ ug: enabled_for_options: no_one: "ھېچكىم" everyone: "ھەممەيلەن" - staff: "خىزمەتچىلەرلا" specific_groups: "مۇئەييەن گۇرۇپپا" specific_groups_with_group_names: one: "گۇرۇپپا %{groupNames}" @@ -5524,7 +5546,6 @@ ug: help_text: "تەۋسىيە قىلىنغان چوڭلۇقى 600x80 پىكسېل." large_icon: title: "چاسا سىنبەلگە" - description: "تۇغنىڭ چاسا شەكلىدىكى سۈرىتى باشقۇرۇشنىڭ چوققىسىدا كۆرۈنىدۇ، شۇنداقلا كۆچمە باش ئېكراندىكى ئەپنىڭمۇ سىنبەلگىسى." help_text: "تەۋسىيە قىلىنغان چوڭلۇقى 512x512 پىكسېل." square_icon_dark: required: "قاراڭغۇ ھالەتتە پەرقلىق چاسا تۇغ ئىشلىتەمدۇ؟" @@ -5688,7 +5709,7 @@ ug: header_description: "دوكلات تور بېكىتىڭىزدە نېمە ئىش يۈز بەرگەنلىكىنى بىلىشىڭىزگە ياردەم بېرىدىغان كۈچلۈك قورال. ئۇلار سىزنىڭ ۋەزىيەتنى بىلىش، مەسىلە بايقاش ۋە سانلىق مەلۇماتقا ئاساسەن قارار چىقىرىشىڭىزغا ياردەم بېرىدۇ." sub_pages: settings: - title: "باشقۇرۇش تاختا تەڭشىكى" + title: "تەڭشەك" badges: title: "تارتۇق" header_description: "تارتۇق جامائەت ئىچىدىكى ئىشلەتكۈچىلەرنىڭ پائالىيىتى، تۆھبىسى ۋە نەتىجىلىرىنى مۇئەييەنلەشتۈرۈش، دەلىللەش ھەمدە ئاكتىپ مەشغۇلات ۋە ئىشقا ئاشۇرغان ۋەدىسى ئۈچۈن بېرىلىدۇ" @@ -5834,22 +5855,6 @@ ug: result_count: one: '«%{filter}» نىڭ %{count} نەتىجىسى' other: '«%{filter}» نىڭ %{count} نەتىجىسى' - result_types: - page: - one: "بەت" - other: "بەت" - report: - one: "دوكلات" - other: "دوكلات" - setting: - one: "تەڭشەك" - other: "تەڭشەك" - theme: - one: "ئۆرنەك" - other: "ئۆرنەك" - component: - one: "بۆلەك" - other: "بۆلەك" new_features: title: "يېڭىلىق?" check_for_updates: "يېڭىلانمىنى تەكشۈر" @@ -5873,19 +5878,6 @@ ug: title: "يېڭىلىق?" subtitle: "بىز ھەمىشە يېڭى ئىقتىدار ۋە ياخشىلاشنى تارقىتىمىز. بۇ بەتتە مۇھىم مەزمۇن يورۇتۇلغان ئەمما سىز «مول بىلىم» نى چېكىپ تەپسىلىي تارقىتىش چۈشەندۈرۈشىنى كۆرەلەيسىز." learn_more: "مول بىلىم…" - experimental: "تەجرىبە" - only_experiments: "پەقەت تەجرىبە ئىقتىدارلىرىنىلا كۆرسىتىدۇ" - experiment_enabled: "تەجرىبە ئىقتىدارىنى قوزغاتتىڭىز." - experiment_disabled: "تەجرىبە ئىقتىدارىنى چەكلىدىڭىز." - feature_enabled: "ئىقتىدارنى قوزغاتتىڭىز." - feature_disabled: "ئىقتىدارنى چەكلىدىڭىز." - experiment_tooltip: - title_enabled: "تەجرىبە ئىقتىدارىنى تاقايدۇ" - content_enabled: "بۇ ئۆزگەرتىلسە ھەممە ئىشلەتكۈچىنىڭ مەزكۇر ئىقتىدارى چەكلىنىدۇ." - feature_tooltip: - title_disabled: "بۇ ئىقتىدارنى سىناڭ" - title_enabled: "ئىقتىدارنى تاقايدۇ" - content_enabled: "بۇ ئۆزگەرتىلسە ھەممە ئىشلەتكۈچىنىڭ مەزكۇر ئىقتىدارى چەكلىنىدۇ." last_checked: "ئاخىرقى تەكشۈرۈلگەن ۋاقىت" refresh_problems: "يېڭىلا" no_problems: "ھېچقانداق مەسىلە بايقالمىدى." @@ -5948,7 +5940,7 @@ ug: all: "ھەممىسى" view_table: "جەدۋەل" view_graph: "گرافىك" - refresh_report: "دوكلاتنى يېڭىلا" + refresh_report: "يېڭىلا" daily: كۈندىلىك monthly: ئايلىق weekly: ھەپتىلىك @@ -6843,7 +6835,6 @@ ug: import_web_tip: "ئۆرنەك نەشر خەزىنەسىنى ئۆز ئىچىگە ئالىدۇ" direct_install_tip: "تۆۋەندە تىزىپ كۆرسىتىلگەن خەزىنەدىن %{name} نى راستتىنلا ئورنىتامسىز؟" import_web_advanced: "ئالىي…" - import_file_tip: "ئۆرنەكنىڭ .tar.gz، .zip ياكى .dcstyle.json ھۆججىتىنى ئۆز ئىچىگە ئالىدۇ" is_private: "ئۆرنەك شەخسى git خەزىنەسىدە" finish_install: "ئۆرنەك ئورنىتىش تامام" last_attempt: "ئورنىتىش جەريانى تاماملانمىدى، ئاخىرقى سىنىغىنى:" @@ -7893,6 +7884,7 @@ ug: field_types: text: "تېكىست" textarea: "تېكىست رايونى" + date: "چېسلا" confirm: "جەزملەش" dropdown: "تارتما تىزىملىك" multiselect: "كۆپ تاللاش" @@ -7913,6 +7905,7 @@ ug: more_than_50_results: "50 دىن ئارتۇق نەتىجە بار. ئىزدىشىڭىزنى ياخشىلاڭ." no_results: "ماس كېلىدىغان تور بېكەت تېكىستى تېپىلمىدى" interpolation_keys: "ئىشلىتىلىشچان قىستۇرما قىممەت ئاچقۇچى:" + interpolation_key_used: "ئىشلىتىلگەن" outdated: title: "بۇ تەرجىمىنىڭ ۋاقتى ئۆتتى" description: "بۇ قاپلاش قۇرۇلغىچە بۇ ئاچقۇچنىڭ كۆڭۈلدىكى تەرجىمىسى ئۆزگەردى. تەرجىمىڭىز ئەسلى مەقسەتكە ئېلىپ بېرىلغان ئۆزگەرتىشكە ماس كەلگەن كەلمىگەنلىكىنى تەكشۈرۈڭ." @@ -8026,7 +8019,7 @@ ug: confirm: "ھەئە، ئىم تۈزۈمىنى يېڭىلا" min_admin_password_length: confirm: "ھەئە، ئىم تۈزۈمىنى يېڭىلا" - password_unique_charactes: + password_unique_characters: confirm: "ھەئە، ئىم تۈزۈمىنى يېڭىلا" block_common_passwords: confirm: "ھەئە، ئىم تۈزۈمىنى يېڭىلا" diff --git a/config/locales/client.uk.yml b/config/locales/client.uk.yml index d5ea2ee7801f6..f174b3a0e46d0 100644 --- a/config/locales/client.uk.yml +++ b/config/locales/client.uk.yml @@ -6,6 +6,22 @@ uk: js: + blocks: + ghost: + status: "Статус" + conditions: "Умови" + arguments: "Аргументи" + container_args: "Аргументи контейнера" + in_location: "в" + hidden: "приховано" + not_registered: "не зареєстровано" + no_visible_children: "немає видимих потомків" + failed: "помилка" + ghost_reasons: + optional_missing_hint: "Цей необов'язковий блок не відображається, оскільки він не зареєстрований." + no_visible_children_hint: "Цей блок контейнера не рендериться, оскільки жоден з його дочірніх блоків не є видимим." + condition_failed_hint: "Цей блок не відтворюється, оскільки його умови не виконані." + head_hidden_tail_hint: "Цей блок не відтворюється, оскільки інший блок був відтворений спочатку в контейнері `head`." carousel: go_to_slide: "Перейти до слайда %{index}" previous: "Попередній слайд" @@ -353,6 +369,7 @@ uk: skip_to_top: "Перейти до початку" skip_user_nav: "Перейти до вмісту профілю" emails_are_disabled: "Надсилання повідомлень електронною поштою було глобально вимкнено адміністратором. Жодне сповіщення електронною поштою не буде надіслано." + emails_are_disabled_no_smtp: "Вся вихідна електронна пошта вимкнена, оскільки не налаштовано SMTP-сервер. Електронні листи будь-якого типу не можуть бути надіслані." emails_are_disabled_non_staff: "Надсилання листів електронною поштою було вимкнено для користувачів, які не є членами команди обслуговування." software_update_prompt: message: "Ми оновили сайт, , будь ласка, оновіть , щоб все працювало безперебійно." @@ -378,12 +395,28 @@ uk: broken_page_change_alert: "Обробник onPageChange викликав помилку. Зверніться до інструментів розробника браузера для отримання додаткової інформації." broken_plugin_alert: "Викликано плагіном '%{name}'" broken_transformer_alert: "Сталася помилка. Ваш сайт може працювати неправильно." + broken_block_alert: "Виявлено помилку конфігурації блоку. Перегляньте консоль браузера для отримання детальної інформації." + broken_block_factory_alert: "Не вдалося завантажити блок. Деякі елементи інтерфейсу можуть відображатися неправильно." critical_deprecation: notice: "[Повідомлення адміністратора] %{source} містить код, який потребує оновлення. (id:%{id})" learn_more_link: "(дізнатися більше)" theme_source: "Тема '%{name}'" plugin_source: "Плагін '%{name}'" unknown_source: "Одна з ваших тем або плагінів" + dev_tools: + drag_to_move: "Перетягніть, щоб перемістити" + toggle_plugin_outlet_debug: "Переключити налагодження розетки плагіна" + toggle_block_debug: "Переключити налагодження блоків" + block_debug: + outlet_boundaries: "Зовнішні межі" + visual_overlay: "Візуальне накладення" + ghost_blocks: "Блоки-привиди" + condition_debugging: "Налагодження умов" + toggle_safe_mode: "Увімкнути/вимкнути безпечний режим" + toggle_verbose_localization: "Увімкнути/вимкнути детальну локалізацію" + toggle_mobile_view: "Переключити мобільний перегляд" + disable_dev_tools: "Вимкнути інструменти для розробників" + toggle_upcoming_changes_debug: "Перемкнути налагодження майбутніх змін" s3: regions: ap_northeast_1: "Азія (Токіо)" @@ -482,7 +515,6 @@ uk: pm_title: "Схожі повідомлення" admin_onboarding_banner: launch_in_easy_steps: "Запуск за %{step_count} простих кроків" - skipped: "Контрольний список реєстрації адміністратора зараз пропущено. Якщо ви хочете увімкнути його знову, знайдіть \"увімкнути реєстрацію власника сайту\" в налаштуваннях сайту." congrats_onboarding_complete: "Вітаємо із завершенням процесу адаптації!" invite_collaborators: title: "Запросити співавторів" @@ -491,7 +523,13 @@ uk: start_posting: title: "Розпочати публікацію" description: "Дайте людям щось, про що можна поговорити разом" - action: "Ідеї-криголами" + action: "Переглянути ідеї" + choose_option: "З чого б ви хотіли почати?" + predefined_topics: "Шаблони криголамів" + predefined_topics_subtitle: "Дайте новим учасникам тему для обговорення, виберіть шаблон для редагування та створіть свій власний." + predefined_topics_description: "Виберіть з колекції тем для початку розмови, щоб розпочати обговорення" + use_predefined: "Переглянути шаблони" + back: "Назад" icebreakers: fun_facts: title: "Які цікаві факти про вас?" @@ -619,8 +657,12 @@ uk: other: "Створено %{count} років тому" bookmarked: title: "Закладки" - edit_bookmark: "Редагувати закладку" - clear_bookmarks: "Очистити закладки" + edit_bookmark: + one: "Редагувати закладку" + few: "Редагувати закладки" + many: "Редагувати закладки" + other: "Редагувати закладки" + delete_bookmarks: "Видалити всі закладки" help: bookmark: "Натисніть, щоб додати цю тему до закладок" edit_bookmark: "Натисніть, щоб змінити закладку на повідомлення в цій темі" @@ -639,12 +681,18 @@ uk: clear_reminder: "Очистити нагадування" edit: "Редагувати закладку" not_bookmarked: "Додати цей допис до закладок" + topic_bookmark: "Тема" + post_bookmark: "Повідомлення №%{post_number}" + jump_to_post: "Перейти до #%{post_number}" + bookmark_topic: "Додати тему в закладки" + edit_topic_bookmark: "Редагувати закладку теми" + delete_topic_bookmark: "Видалити закладку теми" remove_reminder_keep_bookmark: "Вилучити нагадування, але зберегти закладку" created_with_reminder: "Ви додали цей допис у закладку із нагадуванням %{date}. %{name}" created_with_reminder_generic: "Ви створили закладку із нагадуванням %{date}. %{name}" delete: "Видалити закладку" confirm_delete: "Ви впевнені, що хочете видалити цю закладку? Нагадування також буде видалено." - confirm_clear: "Ви впевнені, що хочете вилучити всі закладки з цієї теми?" + confirm_clear: "Ви впевнені, що хочете видалити всі свої закладки з цієї теми?" save: "Зберегти" no_timezone: 'Ви ще не встановили часовий пояс. Ви не зможете встановити нагадування. Налаштуйте його у своєму профілі.' invalid_custom_datetime: "Дата й час, які ви вказали, недійсні, спробуйте ще раз." @@ -722,6 +770,11 @@ uk: few: "+%{count} інші чернетки" many: "+%{count} інших чернеток" other: "+%{count} інших чернеток" + embed_mode: + storage_access_prompt: "Вже маєте обліковий запис %{site_name} ? Дозвольте доступ до своєї сесії, щоб коментувати від свого імені." + allow_access: "Дозволити доступ" + continue_as_guest: "Продовжити як гість" + be_first_to_reply: "Будьте першим, хто відповість!" topic_count_all: one: "Переглянути %{count} нову тему" few: "Переглянути %{count} нові теми" @@ -800,20 +853,20 @@ uk: filtered_flagged_by: "Позначено" unknown: title: - one: "У вас є запит, які очікують на розгляд через вимкнений плагін:" - few: "У вас є запити, які очікують на розгляд через вимкнений плагін:" - many: "У вас є запити, які очікують на розгляд через вимкнений плагін:" - other: "У вас є запити, які очікують на розгляд від вимкнених плагінів:" + one: "У вас є елементи в черзі на рецензування від вимкненого плагіна:" + few: "У вас є елементи в черзі на рецензування від вимкнених плагінів:" + many: "У вас є елементи в черзі на рецензування від вимкнених плагінів:" + other: "У вас є елементи в черзі на рецензування від вимкнених плагінів:" instruction: "Вони не можуть бути належним чином відображені, доки ви не ввімкнете відповідний плагін. Увімкніть плагін і оновіть сторінку. Крім того, ви можете ігнорувати їх. Дізнайтеся більше..." reviewable_unknown_source: "%{reviewableType} (невідомий плагін)" reviewable_known_source: "%{reviewableType} (з плагіна '%{pluginName}')" ignore_all: "Ігнорувати все" enable_plugins: "Увімкнути плагіни" - delete_confirm: "Ви дійсно бажаєте видалити всі відгуки, створені вимкненими плагінами?" - ignore_success: "Усі відгуки, створені вимкненими плагінами, видалено." + delete_confirm: "Ви впевнені, що хочете видалити всі елементи черги рецензій, створені вимкненими плагінами?" + ignore_success: "Усі елементи черги рецензування, створені вимкненими плагінами, було видалено." explain: why: "пояснити, чому цей елемент потрапив у чергу" - title: "Оцінка" + title: "Оцінювання елементів черги на перегляд" formula: "Формула" subtotal: "Проміжний підсумок" total: "Всього" @@ -827,10 +880,10 @@ uk: title: "Користувачі, чиї звернення були історично узгоджені, отримують бонус." trust_level_bonus: name: "рівень довіри" - title: "Елементи, які переглядаються, можуть оцінюватися вище, якщо вони створені користувачами з вищим рівнем довіри." + title: "Прапорці, створені користувачами з вищим рівнем довіри, мають вищий бал." type_bonus: name: "тип бонуса" - title: "Деяким типам повідомлень, які переглядаються, учасники команди обслуговування можуть призначити бонуси, щоб зробити їх більш пріоритетними." + title: "Певним типам прапорів співробітники можуть присвоювати бонуси, щоб зробити їх більш пріоритетними." revise_and_reject_post: title: "Переглянути" reason: "Причина" @@ -839,7 +892,7 @@ uk: custom_reason: "Дайте чіткий опис причини" other_reason: "Інше..." optional: "опціонально" - stale_help: "%{username} розглянув це." + stale_help: "Цей пункт вирішено користувачем %{username}." claim_help: optional: "Ви можете заявити права на цей елемент, щоб інші не могли його розглядати." required: "Ви повинні заявити права на елементи, перш ніж ви зможете розглядати їх." @@ -1249,6 +1302,7 @@ uk: add_members: title: "Додати учасників до %{group_name}" description: "Введіть список користувачів, яких потрібно запросити до групи, або вставте список, розділений комами:" + description_usernames_only: "Введіть список імен користувачів, яких ви хочете додати до групи, або вставте список через кому:" usernames_placeholder: "імена користувачів" usernames_or_emails_placeholder: "імʼя користувачів або адреси електронної пошти" notify_users: "Сповістити користувачів" @@ -1742,6 +1796,7 @@ uk: enable_smart_lists: "Увімкніть розумні списки під час запису в композитор" enable_defer: "Увімкнути позначення тем як непрочитані" enable_markdown_monospace_font: "Використовувати моноширинний шрифт у режимі Markdown редактора тексту" + show_original_content: "Показувати оригінальний контент замість перекладеного. Також можна вмикати/вимикати в межах тем." experimental_sidebar: enable: "Увімкнути бічну панель" options: "Параметри" @@ -1977,6 +2032,23 @@ uk: apps: "Застосунки" navigation_menu: "Меню навігації" upcoming_changes: "Майбутні зміни" + calendar_subscriptions: "Календар" + calendar_subscriptions: + description: "Створіть URL-адреси підписки для синхронізації з вашим улюбленим календарем (Google Calendar, Apple Calendar, Outlook тощо). Ці URL-адреси є приватними посиланнями на події календаря для вашого акаунта (нагадування про закладки, події календаря тощо). Ви завжди можете відкликати або поновити створені URL-адреси підписки." + generate: "Згенерувати URL-адреси підписки" + regenerate: "Згенерувати URL-адреси повторно" + regenerate_confirm: "Це зробить недійсними ваші існуючі URL-адреси підписки на календар. Будь-які програми календаря, що використовують старі URL-адреси, перестануть отримувати оновлення. Продовжити?" + revoke: "Скасувати підписку" + revoke_confirm: "Це скасує URL-адреси вашої підписки на календар. Будь-які програми календаря, які їх використовують, перестануть отримувати оновлення. Продовжити?" + urls_warning: "URL-адреси підписки готові! Натисніть кнопки нижче, щоб прив’язати їх до вашого календаря. Примітка: ці URL-адреси відображаються лише один раз." + bookmarks: "Нагадування про закладки" + bookmarks_description: "Ваші закладки з датами нагадування" + copy: "Копіювати URL-адресу" + copied: "Скопійовано!" + add_to_google: "Календар Google" + add_to_outlook: "Microsoft Outlook" + add_to_apple: "Календар Apple" + active_subscription: "У вас активна підписка на календар." change_password: success: "(лист надіслано)" in_progress: "(надсилання листа)" @@ -2621,6 +2693,7 @@ uk: form_kit: reset: Скинути optional: опціонально + required: Обов’язкове errors_summary_title: one: "Виправте цю помилку, щоб продовжити" few: "Виправте ці помилки, щоб продовжити" @@ -3032,6 +3105,12 @@ uk: filter_for_more: Шукати ще… categories_admin_dropdown: title: "Керування розділами" + tag_category_admin_dropdown: + title: "Налаштування категорій та тегів" + edit_category: "Редагувати категорію" + edit_category_description: "Налаштуйте параметри для %{badge}" + edit_tag: "Редагувати тег" + edit_tag_description: "Налаштуйте параметри для %{badge}" bulk_select_topics_dropdown: title: "Масові дії" bulk_select_bookmarks_dropdown: @@ -3062,6 +3141,20 @@ uk: medium_dark_tone: Помірно темний тон шкіри dark_tone: Темний тон шкіри default: Власні емодзі + filter_input: + clear: "Очистити фільтр" + d_icon_grid_picker: + select_icon: "Виберіть іконку" + search_placeholder: "Пошук значків..." + no_results: "Не знайдено піктограм" + results_count: + one: "%{count} іконку знайдено" + few: "%{count} іконки знайдено" + many: "%{count} іконок знайдено" + other: "%{count} іконок знайдено" + favorites: "Вибране" + selected_icon: "Обрана іконка: %{iconName}" + clear: "Очистити піктограму" shared_drafts: title: "Спільні чернетки" notice: "Цю тему бачать лише ті, хто може публікувати спільні чернетки." @@ -3227,6 +3320,7 @@ uk: upload_description: "введіть опис завантаження" olist_title: "Нумерований список" ulist_title: "Маркований список" + list_title: "Списки" list_item: "Елемент списку" toggle_direction: "Змінити напрямок" apply_wrap_title: "Застосувати загортання" @@ -3244,6 +3338,7 @@ uk: collapse: "Згорнути панель редактора" open: "Відкрити панель редактора" abandon: "Закрити панель редактора та видалити чернетку" + edit_reason: "Додайте причину редагування" enter_fullscreen: "Панель редактора на весь екран" exit_fullscreen: "Вийти з повноекранного режиму редактора" exit_fullscreen_prompt: "Натисніть ESC, щоб вийти з повноекранного режиму" @@ -3418,9 +3513,13 @@ uk: available: title: "Майбутні зміни" description: "'%{changeName}' доступний для попереднього перегляду" + description_two: "'%{changeName1}' та '%{changeName2}' доступні для попереднього перегляду" + description_many: "'%{changeName}' та %{otherChangeCount} інших змін доступні для попереднього перегляду" automatically_promoted: title: "Майбутні зміни" description: "'%{changeName}' було автоматично ввімкнено" + description_two: "'%{changeName1}' та '%{changeName2}' були автоматично ввімкнені" + description_many: "'%{changeName}' та %{otherChangeCount} інших змін було автоматично ввімкнено" dismiss_confirmation: body: default: @@ -3487,8 +3586,8 @@ uk: votes_released: "голосування опубліковано" new_features: "випущено нові функції дискурсу" admin_problems: "нова порада на інформаційній панелі вашого сайту" - upcoming_change_available: "доступна нова майбутня зміна '%{changeName}'" - upcoming_change_automatically_promoted: "майбутню зміну '%{changeName}' було автоматично ввімкнено" + upcoming_change_available: "доступні нові майбутні зміни" + upcoming_change_automatically_promoted: "майбутні зміни було автоматично ввімкнено" upload_selector: change: "Змінити" delete: "Видалити" @@ -3627,8 +3726,6 @@ uk: max_views: placeholder: максимум aria_label: фільтрувати за максимальною кількістю переглядів - additional_options: - label: "Фільтруйте за кількістю дописів і переглядами тем" hamburger_menu: "Меню навігації" new_item: "новий" go_back: "повернутися назад" @@ -3709,8 +3806,8 @@ uk: confirm: "Підтвердити" select_all: "Обрати все" clear_all: "Очистити все" - unlist_topics: "Виключити з усіх списків тем" - relist_topics: "Повторний Список тем" + unlist_topics: "Скасувати список тем" + relist_topics: "Перебудувати список тем" reset_bump_dates: "Скинути дату підняття" defer: "Позначити як непрочитане" delete: "Видалити теми" @@ -3768,19 +3865,14 @@ uk: other: "Відхилити (%{count}) нових…" toggle: "перемикання масового вибору тем" actions: "Масові дії" - change_category: "Обрати категорію" + change_category: "Оновити категорію" close_topics: "Закрити теми" archive_topics: "Архівувати теми" move_messages_to_inbox: "Перемістити у Вхідні" archive_messages: "Перемістити до архіву" - notification_level: "Сповіщення…" + notification_level: "Сповіщення про оновлення" change_notification_level: "Змінити рівень сповіщень" choose_new_category: "Виберіть новий розділ для цих тем:" - selected: - one: "Ви вибрали %{count} тему." - few: "Ви вибрали %{count} теми." - many: "Ви вибрали %{count} тем." - other: "Ви вибрали %{count} тем." selected_sole_category: one: "Ви вибрали %{count} тему з категорії:" few: "Ви вибрали %{count} теми з категорії:" @@ -3791,23 +3883,63 @@ uk: few: "%{count} вибрано" many: "%{count} вибрано" other: "%{count} вибрано" - change_tags: "Замінити теґи" + change_tags: "Замінити теги" append_tags: "Додати теґи" choose_new_tags: "Виберіть нові теґи для цих тем:" - choose_append_tags: "Виберіть нові теґи, щоб додати що цих тем:" + choose_append_tags: "Додати теґи" changed_tags: "Теґи цих тем було змінено." - remove_tags: "Видалити всі теґи" + remove_tags: "Видалити теги" confirm_remove_tags: one: "Усі теґи будуть видалені з цієї теми. Ви впевнені" few: "Усі теґи будуть видалені з %{count} тем. Ви впевнені?" many: "Усі теґи будуть видалені з %{count} тем. Ви впевнені?" other: "Усі теґи буде видалено з %{count} тем. Ви впевнені?" + confirm_update_topics: + one: "Оновити %{count} тему" + few: "Оновити %{count} теми" + many: "Оновити %{count} тем" + other: "Оновити %{count} тем" + confirm_close_topics: + one: "Закрити %{count} тему" + few: "Закрити %{count} теми" + many: "Закрити %{count} тем" + other: "Закрити %{count} тем" + confirm_archive_topics: + one: "Архівувати %{count} тему" + few: "Архівувати %{count} теми" + many: "Архівувати %{count} тем" + other: "Архівувати %{count} тем" + confirm_unlist_topics: + one: "Видалити %{count} тему" + few: "Видалити %{count} теми" + many: "Видалити %{count} тем" + other: "Видалити %{count} тем" + confirm_relist_topics: + one: "Перерахувати %{count} тему" + few: "Перерахувати %{count} теми" + many: "Перерахувати %{count} тем" + other: "Перерахувати %{count} тем" + confirm_archive_messages: + one: "Архівувати %{count} повідомлення" + few: "Архівувати %{count} повідомлення" + many: "Архівувати %{count} повідомлень" + other: "Архівувати %{count} повідомлень" + confirm_move_to_inbox: + one: "Перемістити %{count} повідомленнядо папки \"Вхідні\"" + few: "Перемістити %{count} повідомлення до папки \"Вхідні\"" + many: "Перемістити %{count} повідомлень до папки \"Вхідні\"" + other: "Перемістити %{count} повідомлень до папки \"Вхідні\"" + confirm_delete_topics: + one: "Видалити %{count} тему" + few: "Видалити %{count} теми" + many: "Видалити %{count} тем" + other: "Видалити %{count} тем" progress: one: "Обробка: %{count} тема" few: "Обробка: %{count} теми" many: "Обробка: %{count} тем" other: "Обробка: %{count} тем" - notify: "Повідомте користувачів про цю зміну." + notify: "Повідомте користувачів про цю зміну" performing: "Виконання масових операцій, зачекайте…" completed: "Масові операції успішно завершено!" completed_count: @@ -3853,38 +3985,44 @@ uk: name: "Відкласти" close_topics: name: "Закрити" - note: "Примітка" + description: "Закриті теми запобігають появі нових відповідей. Дізнатися більше" + note: "Додати примітку до цих тем" optional: (опціонально) archive_topics: name: "Архів" + description: "Архівні теми приховані від пошуку та списку останніх тем. Дізнатися більше" archive_messages: name: "Перемістити до архіву" move_messages_to_inbox: name: "Перемістити у Вхідні" unlist_topics: name: "Вилучити зі списку" + description: "Непублічні теми приховані у списку тем, але до них все ще можна отримати доступ за прямим посиланням. Дізнатися більше" relist_topics: name: "Вставити повторно" remove_tags: name: "Видалити теги" + description: "Видалити всі теги з вибраних тем." append_tags: - name: "Додати теґи" + name: "Додати теги" + description: "Додати наступні теги до вибраних тем:" replace_tags: name: "Замінити теґи" + description: "Замінити всі існуючі теги на вибрані теми наступним:" delete_topics: name: "Видалити" + description: "Видалити вибрані теми назавжди. Цю дію не можна скасувати." update_category: name: "Оновити категорію" - description: "Виберіть нову категорію для обраних тем" + description: "Перемістити всі вибрані теми до наступної категорії:" reset_bump_dates: name: "Скинути дату підняття" - description: "Скинути дату підняття теми до дати останнього створеного повідомлення, що впливає на порядок у списку тем" + description: "Ви хочете оновити дати оновлень до дати останнього створеного допису? Це може вплинути на їх порядок у списку тем." defer: name: "Позначити як непрочитане" - description: "Позначити теми як непрочитані" update_notifications: name: "Сповіщення про оновлення" - description: "Змініть рівень сповіщень на «Перегляд», «Стеження», «Звичайний» або «Вимкнено»." + description: "Оновіть свій особистий рівень сповіщень для вибраних тем до:" topic: filter_to: one: "%{count} допис в темі" @@ -4082,6 +4220,11 @@ uk: few: "Останній допис в цій темі зроблений %{count} години назад, а тому дана тема буде закрита негайно." many: "Останній допис в цій темі зроблений %{count} годин тому, а тому дана тема буде закрита негайно." other: "Останній допис в цій темі зроблений %{count} годин тому, а тому дана тема буде закрита негайно." + auto_delete_immediate: + one: "Останній допис у темі %{count} годину тому, тему буде негайно видалено." + few: "Останній допис у темі був %{count} години тому, тему буде негайно видалено." + many: "Останній допис у темі був %{count} годин тому, тему буде негайно видалено." + other: "Останній допис у темі був %{count} годин тому, тему буде негайно видалено." timeline: back: "Назад" back_description: "Повернутися до вашого останнього непрочитаного допису" @@ -4502,7 +4645,11 @@ uk: edit: "Редагувати" delete: "Видалити" add: "Додати новий переклад" - manage: "Керування перекладами (%{count} існуючих)" + manage: + one: "Керування перекладами (%{count} існуючих)" + few: "Керування перекладами (%{count} існуючих)" + many: "Керування перекладами (%{count} існуючих)" + other: "Керування перекладами (%{count} існуючих)" view: one: "Переглянути %{count} переклад" few: "Переглянути %{count} переклади" @@ -4662,6 +4809,7 @@ uk: many: "Ви впевнені, що хочете об’єднати ці %{count} дописів?" other: "Ви впевнені, що хочете об’єднати ці %{count} дописів?" revisions: + diff_too_complex: "Різниця занадто складна для відображення. Спробуйте переглянути окремі менші редагування." locale: no_locale_set: "Мова не встановлена" locale_removed: "Мову вилучено" @@ -4737,6 +4885,7 @@ uk: instructions: "Поширити посилання на цей допис:" original_language: "Цей пост був спочатку написаний мовою %{language}" original_language_and_outdated: "Цей пост був спочатку написаний мовою %{language}. Переклад може бути застарілим." + ai_translation_disclaimer: "Переклади, створені штучним інтелектом, можуть бути неточними." category: none: "(без розділу)" all: "Всі розділи" @@ -4751,9 +4900,13 @@ uk: advanced: "Розширений" show_advanced: "Розширені налаштування" topic_template: "Шаблон" + topic_title_placeholder: "Заповнювач назви теми категорії" + topic_title_placeholder_placeholder: "[необов'язково] тимчасова назва теми для цієї категорії" tags: "Теґи" localizations: "Локалізації" localization: + language: "Мова категорії" + language_description: "Основна мова назви та опису цієї категорії." locale: "Локаль" name: "Імʼя" description: "Опис" @@ -4774,11 +4927,24 @@ uk: delete: "Вилучити" add: "Додайте необхідну групу теґів" placeholder: "Вибрати групу тегів…" + min_count: "Кількість тегів" + tag_group: "Група тегів" topic_featured_link_allowed: "Дозволити популярні посилання в цьому розділі" delete: "Видалити категорію" create: "Нова категорія" + create_with_type: "Нова категорія %{typeName}" create_long: "Створити розділ" + settings_apply_to_all_of_type_warning: "Зміни будуть застосовані до всіх категорій цього типу" + type_settings_schema: + category_settings: "Налаштування категорії" + category_custom_fields: "Налаштування категорії" + site_settings: "Налаштування сайту" + choose_type: + title: "Виберіть тип категорії" + requires_plugin: "Потребує плагін" + create_category: "Створити категорію" save: "Зберегти категорію" + unsaved_changes: "Є незбережені зміни" slug: "Посилання на розділ" parent: "Батьківська категорія" slug_placeholder: "(Опція) дефіси в url" @@ -4789,6 +4955,7 @@ uk: validations: emoji_required: "Виберіть емодзі." icon_required: "Виберіть піктограму." + groups_required: "Виберіть принаймні одну групу для цього режиму затвердження." name: "Назва категорії" untitled: "Категорія без назви" description: "Опис" @@ -4801,6 +4968,7 @@ uk: icon: "Іконка" emoji: "Смайли" select_emoji: "Виберіть емодзі" + select_icon: "Виберіть іконку" background_color: "Колір" foreground_color: "Колір тексту" color_validations: @@ -4825,6 +4993,9 @@ uk: list: "Список категорій" no_description: "Будь ласка, додайте опис для цього розділу." change_in_category_topic: "Редагувати опис" + description_updated: "Опис оновлено" + description_expand: "Показати більше" + description_collapse: "Показати менше" already_used: "Цей колір вже використовується іншим розділом" color_palette: "Кольорова палітра" security: "Безпека" @@ -4870,6 +5041,14 @@ uk: review_group_name: "назва групи" require_topic_approval: "Вимагати схвалення модератором усіх нових тем" require_reply_approval: "Вимагати схвалення модератором усіх нових відповідей" + require_topic_approval_for: "Вимагати схвалення модератором нових тем для..." + require_reply_approval_for: "Вимагати схвалення модератора для нових відповідей..." + posting_review_modes: + no_one: "Ніхто" + everyone: "Усі" + everyone_except: "Усі, крім вибраних груп" + no_one_except: "Ніхто, окрім обраних груп" + posting_review_groups_placeholder: "Виберіть групи…" this_year: "цього року" position: "Позиція на сторінці розділів:" default_position: "Позиція за замовчуванням" @@ -5446,17 +5625,25 @@ uk: category_restricted: "Цей теґ обмежено розділами, до яких ви не маєте доступу." synonyms: "Синоніми" synonyms_description: "Коли будуть використані наступні теґи, вони будуть замінені на %{base_tag_name} ." + synonyms_inline: "Ці синоніми будуть замінені на %{base_tag_name}:" save: "Збережіть назву та опис теґа" tag_groups_info: one: 'Цей теґ належить до групи "%{tag_groups}".' few: "Цей теґ належить до цих груп: %{tag_groups}." many: "Цей теґ належить до цих груп: %{tag_groups}." other: "Цей теґ належить до цих груп: %{tag_groups}." + tag_groups_info_prefix: + one: "Цей тег належить до групи " + few: "Цей тег належить до груп " + many: "Цей тег належить до груп " + other: "Цей тег належить до груп " category_restrictions: one: "Його можна використовувати лише в цьому розділі:" few: "Його можна використовувати лише в таких розділах:" many: "Його можна використовувати лише в таких розділах:" other: "Його можна використовувати лише в таких розділах:" + restricted_to: "Обмежено для" + no_synonyms: "Цей тег не має синонімів." edit_synonyms: "Редагувати синоніми" add_synonyms_label: "Додайте синоніми:" add_synonyms: "Додати" @@ -5482,7 +5669,34 @@ uk: other: "Синоніми %{count} також будуть видалені." edit_tag: "Редагувати назву та опис теґу" edit: "Редагувати цей тег" - description: "Опис (максимум 1000 символів)" + description: "Опис" + settings: + title: "Налаштування" + edit_title: "Редагувати тег: %{name}" + edit_tag_prefix: "Редагувати тег:" + select_tag: "Виберіть тег для редагування" + general: "Основний" + localizations: "Локалізації" + back: "Назад" + name: "Імʼя" + slug: "Мітка" + name_placeholder: "Назва теґу" + slug_placeholder: "Тег slug (необов'язковий, автоматично генерується з назви)" + saved: "Налаштування тегу збережено" + no_synonyms: "Для цього тегу не визначено синонімів." + add_synonym_placeholder: "Пошук тегів для додавання в якості синонімів..." + synonyms_subtitle: "Коли використовуються наступні теги, вони будуть замінені на %{name}" + save: "Зберегти тег" + delete: "Видалити тег" + synonyms_hint: "Коли використовуються вищезазначені теги, вони будуть замінені на %{baseTagName}." + add_synonyms_confirm: "Будь-яке місце, де зараз використовується %{synonymNames} , буде змінено на %{tagName} . Ви впевнені, що хочете внести цю зміну?" + localization: + hint: "Додайте локалізації, щоб відображати різні назви тегів для користувачів різними мовами." + locale: "Локаль" + name: "Імʼя" + description: "Опис" + add: "Додати локалізацію" + remove: "Видалити локалізацію" sort_by: "Сортувати за:" sort_by_count: "Кількість" sort_by_name: "ім'я" @@ -6032,7 +6246,7 @@ uk: admin_js: type_to_filter: "Текст для пошуку…" settings: "Налаштування" - reset_filter: "Скинути" + reset_filter: "Скинути фільтр" toggle_filters: "Перемкнути випадаючі фільтри" admin: title: "Адміністратор Discourse" @@ -6046,9 +6260,15 @@ uk: never: "ніколи" reports: title: "Список доступних звітів" - meta_doc: "Звіти – це потужний інструмент, який допоможе вам зрозуміти, що відбувається на вашому сайті. Вони можуть допомогти вам визначити тенденції, виявити проблеми та прийняти рішення на основі даних." sidebar_title: "Звіти" back: "Назад до всіх звітів" + group_engagement: "Залучення" + group_traffic: "Трафік" + group_members: "Учасники" + group_content: "Контент і здоров'я" + group_moderation_and_security: "Модерація та безпека" + group_other: "Інше" + legacy_warning: "Це застарілий звіт. Незабаром його буде вилучено. Якщо вам потрібна допомога в пошуку заміни, зверніться до служби підтримки." config_sections: account: title: "Обліковий запис" @@ -6093,7 +6313,7 @@ uk: enabled_for_options: no_one: "Ніхто" everyone: "Усі" - staff: "Для команди обслуговування" + staff: "тільки %{staffGroupName}" specific_groups: "Конкретна(і) група(и)" specific_groups_with_group_names: one: "група %{groupNames}" @@ -6106,6 +6326,11 @@ uk: beta: "Бета" stable: "Стабільна" permanent: "Постійна" + status_descriptions: + experimental: "Це перебуває на ранній стадії розробки та може суттєво змінитися або бути припинено. Може бути не повністю сумісним з іншими функціями." + alpha: "Це активно розробляється та вдосконалюється. Функціональність може змінюватися, і воно може бути не повністю відшліфоване, але достатньо стабільне, щоб спробувати." + beta: "Це майже завершено, і це доступно для раннього впровадження. Незначні зміни все ще можливі." + stable: "Це завершено та добре підтримується. Незабаром буде доступно на всіх сайтах Discourse." impact_roles: admins: "Адміни" moderators: "Модератори" @@ -6118,7 +6343,7 @@ uk: all: "Всі" enabled_all: "Усі увімкнені стани" enabled: "Включено" - enabled_for_staff: "Увімкнено для персоналу" + enabled_for_staff: "Увімкнено для %{staffGroupName}" enabled_for_specific_groups: "Увімкнено для певних груп" disabled: "Вимкнено" impact_type_all: "Всі види впливу" @@ -6208,7 +6433,7 @@ uk: help_text: "Рекомендований розмір - 600 x 80 пікселів." large_icon: title: "Квадратна іконка" - description: "Квадратна версія логотипу з'являється у верхній частині адмінки, а також є логотипом мобільного додатку на головному екрані." + description: "Квадратна версія зображення логотипу відображається у верхній частині сайту та також є логотипом мобільного додатку." help_text: "Рекомендований розмір становить 512 х 512 пікселів." square_icon_dark: required: "Використовувати інший квадратний значок для темного режиму?" @@ -6398,7 +6623,7 @@ uk: header_description: "Звіти – це потужний інструмент, який допоможе вам зрозуміти, що відбувається на вашому сайті. Вони можуть допомогти вам визначити тенденції, виявити проблеми та прийняти рішення на основі даних." sub_pages: settings: - title: "Налаштування панелі" + title: "Налаштування" badges: title: "Нагороди" header_description: "Знаки винагороджують користувачів за свої діяльність, внески та досягнення для визнання, затвердження, а також заохочують позитивну поведінку та участь у громаді" @@ -6556,32 +6781,6 @@ uk: few: '%{count} результати для "%{filter}»' many: '%{count} результатів для "%{filter}»' other: '%{count} результатів для "%{filter} "' - result_types: - page: - one: "Сторінка" - few: "Сторінки" - many: "Сторінки" - other: "Сторінки" - report: - one: "Звіт" - few: "Звіти" - many: "Звіти" - other: "Звіти" - setting: - one: "Налаштування" - few: "Налаштування" - many: "Налаштування" - other: "Налаштування" - theme: - one: "Кольорова схема" - few: "Стилі" - many: "Стилі" - other: "Стилі" - component: - one: "Компонент" - few: "Компоненти" - many: "Компоненти" - other: "Компоненти" new_features: title: "Що нового?" check_for_updates: "Перевірте наявність оновлень" @@ -6607,23 +6806,6 @@ uk: no_new_features_found: "У стрічці немає елементів, або вибраний вами фільтр не повернув результатів. Ви можете переглянути попередні анонси нових функцій у спільноті Discourse Meta." no_new_features_error: "Сталася помилка під час завантаження стрічки. Ви можете переглянути попередні анонси нових функцій у спільноті Discourse Meta." learn_more: "Дізнатися більше…" - experimental: "Експериментальний" - only_experiments: "Показувати лише експериментальні функції" - experiment_enabled: "Ви увімкнули експериментальну функцію." - experiment_disabled: "Ви вимкнули експериментальну функцію." - feature_enabled: "Ви увімкнули функцію." - feature_disabled: "Ви вимкнули цю функцію." - toggled_too_fast: "Ви переключили перемикач занадто швидко. Будь ласка, зачекайте кілька секунд, перш ніж спробувати знову." - experiment_tooltip: - title_disabled: "Спробуйте цю експериментальну функцію" - title_enabled: "Вимкнути експериментальну функцію" - content_disabled: "Спробуйте нашу найновішу функцію, яка знаходиться в розробці! Вона все ще перебуває на стадії експериментального тестування, тому ми можемо видалити її будь-коли. Ви можете відмовитися від її використання будь-коли.

Зміна цього налаштування ввімкне функцію для всіх користувачів." - content_enabled: "Зміна цього відключить функцію для всіх користувачів." - feature_tooltip: - title_disabled: "Спробувати цю функцію" - title_enabled: "Вимкнути функцію" - content_disabled: "Спробуйте цю нову функцію! Ви можете відмовитися від неї будь-коли.

Зміна цього параметра ввімкне функцію для всіх користувачів." - content_enabled: "Зміна цього відключить функцію для всіх користувачів." last_checked: "Остання перевірка" refresh_problems: "Оновити" no_problems: "Не виявлено жодних проблем." @@ -6694,10 +6876,11 @@ uk: all: "Все" view_table: "Таблиця" view_graph: "Графік" - refresh_report: "Оновити звіт" + refresh_report: "Оновити" daily: За день monthly: Щомісяця weekly: Щотижня + chart_group_period: "Виберіть період" value_so_far: "%{value} (поки що)" dates: "Дати (UTC)" groups: "Усі групи" @@ -7556,6 +7739,7 @@ uk: dark_color_scheme: "Темна кольорова палітра" default_light_scheme: "Світла (за замовчуванням)" color_scheme_select: "Виберіть кольори для стилю." + only_theme_color_schemes: "Ця тема обмежує кількість кольорових палітр, які можна використовувати." dark_color_scheme_select: "Виберіть кольори, які використовуватимуться темою в темному режимі." edit_colors: "Редагувати кольори" custom_sections: "Налаштування секцій:" @@ -7620,7 +7804,7 @@ uk: import_web_tip: "Репозиторій стилю" direct_install_tip: "Ви дійсно хочете встановити %{name} зі сховища, наведеного нижче?" import_web_advanced: "Додатково" - import_file_tip: ".tar.gz, .zip, або .dcstyle .json файл, який містить тему" + import_file_tip: "Файл .tar.gz або .zip, що містить тему" is_private: "Тема знаходиться в приватному репозиторії git" finish_install: "Завершити встановлення теми" last_attempt: "Процес встановлення не завершено, остання спроба:" @@ -7657,6 +7841,16 @@ uk: update_success: "Оновлення %{theme} завершено" up_to_date: "Стиль поточної версії, остання перевірка:" has_overwritten_history: "Поточна версія теми вже не існує, оскільки історія Git була перезаписана примусово." + change_source: + button: "Змінити джерело" + title: "Змінити джерело теми" + repository_url: "URL репозиторія" + branch: "Гілка (необов'язково)" + updating: "Оновлення джерела теми…" + update: "Джерело оновлення" + has_existing_key: "Ця тема має налаштований SSH-ключ." + generate_new_key: "Згенерувати новий SSH-ключ" + keep_existing_key: "Зберегти існуючий SSH-ключ" add: "Додати" theme_settings: "Користувацькі налаштування теми" theme_site_settings: "Налаштування, які тема може перевизначити" @@ -8110,6 +8304,7 @@ uk: upcoming_change_available: "доступні майбутні зміни" change_site_setting_groups: "змінити групи налаштувань сайту" discourse_id_regenerate_credentials: "відновити облікові дані Discourse ID" + configure_category_type: "налаштування типу категорії" screened_emails: title: "Перевірені адреси електронної пошти" description: "Коли хтось намагатиметься створити новий обліковий запис, наступні електронні скриньки буде перевірено, і реєстрацію заблоковано, або вжито якихось інших дій." @@ -8735,6 +8930,7 @@ uk: field_types: text: "Текст" textarea: "Текстове поле" + date: "Дата" confirm: "Підтвердження" dropdown: "Випадаючий список" multiselect: "Множинний вибір" @@ -8755,6 +8951,9 @@ uk: more_than_50_results: "Знайдено понад 50 результатів. Будь ласка виправте параметри пошуку." no_results: "Відповідних текстів на сайті не знайдено" interpolation_keys: "Доступні ключі інтерполяції:" + interpolation_key_insert: "Click to insert" + interpolation_key_used: "Вже використано" + interpolation_key_invalid: "Невідомий ключ — інтерполяція не буде виконана" outdated: title: "Цей переклад застарів" description: "Переклад за замовчуванням для цього ключа змінився після створення цього перевизначення. Будь ласка, перевірте нижче, чи ваш переклад відповідає будь-яким змінам, які були внесені до оригіналу." @@ -8883,7 +9082,7 @@ uk: min_admin_password_length: prompt: "Ви збираєтеся змінити свою політику паролів. Це вплине на всіх адміністраторів, які змінюватимуть свої паролі відтепер. Ви впевнені, що хочете продовжити?" confirm: "Так, оновити політику паролів" - password_unique_charactes: + password_unique_characters: prompt: "Ви збираєтеся змінити свою політику паролів. Це вплине на всіх користувачів, які змінюватимуть свої паролі відтепер. Ви впевнені, що хочете продовжити?" confirm: "Так, оновити політику паролів" block_common_passwords: @@ -9059,6 +9258,8 @@ uk: crawler_settings_saved: "Налаштування сканера збережено" back: "Повернутися до вставки" configuration_snippet: "Налаштування фрагмента (сніпету)" + full_app_mode: "Повний режим програми" + full_app_mode_description: "Завантажте повний додаток Discourse у вбудований iframe, що дозволить користувачам відповідати, ставити лайки, цитувати та взаємодіяти з темами безпосередньо." host_form: add_header: "Додати хост" edit_header: "Редагувати хост" diff --git a/config/locales/client.ur.yml b/config/locales/client.ur.yml index 2bda37db36cf7..25e887ae84493 100644 --- a/config/locales/client.ur.yml +++ b/config/locales/client.ur.yml @@ -6,6 +6,12 @@ ur: js: + blocks: + ghost: + status: "سٹیٹس" + in_location: "میں" + hidden: "مخفی" + failed: "ناکامی" carousel: go_to_slide: "سلائیڈ %{index}پر جائیں" previous: "گزشتہ سلائیڈ" @@ -415,6 +421,8 @@ ur: pill: "تجویز کردہ" pm_title: "تجویز کردہ پیغامات" admin_onboarding_banner: + start_posting: + back: "واپس" spread_the_word: action: "رابطہ کاپی کریں" copied_to_clipboard: "رابطہ کلپ بورڈ پر کاپی ہوا!" @@ -499,8 +507,6 @@ ur: other: "%{count} سالوں پہلے تخلیق کیا گیا" bookmarked: title: "بُک مارک" - edit_bookmark: "بک مارک میں ترمیم کریں" - clear_bookmarks: "بک مارکس ختم کریں" help: bookmark: "اس موضوع کو بک مارک کرنے کے لیے کلک کریں" edit_bookmark: "اس موضوع میں کسی دھاگہ کے بک مارک میں ترمیم کرنے کے لیے کلک کریں" @@ -519,12 +525,12 @@ ur: clear_reminder: "یاد دہانی مٹائیں" edit: "بک مارک میں ترمیم کریں" not_bookmarked: "اس دھاگے کو بک مارک کریں" + topic_bookmark: "ٹاپک" remove_reminder_keep_bookmark: "یاد دہانی کو ہٹا دیں اور بک مارک کو بچا کر رکھیں" created_with_reminder: "آپ نے اس دھاگے کو ایک یاد دہانی %{date}, %{name} کے ساتھ بک مارک کیا ہے۔" created_with_reminder_generic: "آپ نے اسے ایک %{date} %{name} یاد دہانی کے ساتھ بک مارک کیا ہے" delete: "بک مارک حذف کریں" confirm_delete: "کیا آپ واقعی اس بک مارک کو حذف کرنا چاہتے ہیں؟ یاد دہانی بھی حذف کردی جائے گی۔" - confirm_clear: "کیا آپ کو یقین ہے کہ آپ اِس موضوع سے اپنے تمام بک مارکس ہٹانا چاہتے ہیں؟" save: "محفوظ کریں" no_timezone: 'آپ نے ابھی تک خطہ کے وقت کا تعین نہیں کیا۔ آپ یاد دہانیوں کا نظم نہیں کر پائیں گے۔ اپنے پروفائل میں ایک سیٹ اپ کریں۔' invalid_custom_datetime: "آپ کی فراہم کردہ تاریخ اور وقت غلط ہے ، براہ کرم دوبارہ کوشش کریں۔" @@ -657,19 +663,13 @@ ur: in_reply_to: "کے جواب میں" filtered_flagged_by: "نے فلَیگ کیا" unknown: - title: - one: "آپ کے پاس غیر فعال اضافی سہولتوں سے قابل جائزہ زیر التواء ہیں:" - other: "آپ کے پاس غیر فعال اضافی سہولتوں سے قابل جائزہ زیر التواء ہیں:" instruction: "جب تک آپ متعلقہ اضافی سہولت کو فعال نہیں کرتے ہیں تب تک وہ صحیح طریقے سے ظاہر نہیں ہو سکتی۔ براہ کرم اضافی سہولت کو فعال کریں اور صفحہ کو ریفریش کریں۔ متبادل کے طور پر، آپ ان کو نظر انداز کر سکتے ہیں۔ مزید جانیں..." reviewable_unknown_source: "%{reviewableType} (نامعلوم اضافی سہولت)" reviewable_known_source: "%{reviewableType} ('%{pluginName}' اضافی سہولت سے)" ignore_all: "سب کو نظر انداز کریں" enable_plugins: "اضافی سہولتوں کو فعال کریں" - delete_confirm: "کیا آپ واقعی غیر فعال اضافی سہولتوں کے ذریعے بنائے گئے تمام جائزوں کو حذف کرنا چاہتے ہیں؟" - ignore_success: "غیر فعال اضافی سہولتوں کے ذریعہ بنائے گئے تمام جائزے حذف کردیئے گئے۔" explain: why: "وضاحت کریں کہ یہ شے آخر میں قطار میں کیوں داخل ہو گئی" - title: "قابل تجدید اسکورنگ" formula: "فارمولا" subtotal: "جزوی میزان" total: "حاصل جمع" @@ -683,10 +683,8 @@ ur: title: "جن اراکین کے فلَیگز کے ساتھ تاریخی طور پر اتفاق کیا گیا ہو انہیں بَونَس دیا جاتا ہے۔" trust_level_bonus: name: "اعتماد کی سطح" - title: "اعلیٰ فعالیت کا درجہ رکھنے والے اراکین کے ذریعہ تخلیق کردہ قابلِ جائزہ متن کا اسکور زیادہ ہوتا ہے۔" type_bonus: name: "قِسم بَونَس" - title: "سٹاف کی طرف سے کچھ قابل تجدید اقسام کو بَونَس تفویض کیا جاسکتا ہے تاکہ ان کو اعلیٰ ترجیح بنایا جاسکے۔" revise_and_reject_post: title: "نظر ثانی" reason: "وجہ" @@ -695,7 +693,6 @@ ur: custom_reason: "وجہ واضح طور پر بیان کریں" other_reason: "دیگر..." optional: "اختیاری" - stale_help: "اس نظر ثانی کا حل %{username}نے کیا ہے۔" claim_help: optional: "آپ اس چیز کو کََلیم کرسکتے ہیں کہ دوسروں کو اِسکا جائزہ لینے سے روکا جا سکے۔" required: "اشیاء کا جائزہ لینے سے پہلے آپ کا اُن کو کََلیم کرنا ضروری ہے۔" @@ -1735,6 +1732,9 @@ ur: apps: "اَیپس" navigation_menu: "نیویگیشن مینو" upcoming_changes: "آنے والی تبدیلیاں" + calendar_subscriptions: + copied: "کاپی کر لیا!" + add_to_google: "گوگل کیلنڈر" change_password: success: "(ای میل بھیج دی گئی)" in_progress: "(ای میل بھیجی جا رہی ہے)" @@ -2345,6 +2345,7 @@ ur: form_kit: reset: رِی سَیٹ optional: اختیاری + required: درکار ہے dirty_form: "آپ نے اپنی تبدیلیاں جمع نہیں کروائیں! کیا آپ واقعی چھوڑنا چاہتے ہیں؟" errors: starts_with: "%{prefix}سے شروع ہونا چاہیے" @@ -3125,8 +3126,6 @@ ur: votes_released: "ووٹ جاری کر دیا گیا" new_features: "ڈسکورس کی نئی خصوصیات جاری کر دی گئی ہیں" admin_problems: "آپ کی سائٹ ڈَیش بورڈ پر نیا مشورہ" - upcoming_change_available: "نئی آنے والی تبدیلی '%{changeName}' دستیاب ہے" - upcoming_change_automatically_promoted: "آنے والی تبدیلی '%{changeName}' خود بخود فعال ہو گئی ہے" upload_selector: change: "تبدیل" delete: "مٹائیں" @@ -3263,8 +3262,6 @@ ur: max_views: placeholder: زیادہ سے زیادہ aria_label: زیادہ سے زیادہ آراء سے فلٹر - additional_options: - label: "دھاگے کی گنتی اور موضوع کے ملاحظات کے لحاظ سے فلٹر" hamburger_menu: "نیویگیشن مینو" new_item: "نیا" go_back: "واپس جائیں" @@ -3328,14 +3325,17 @@ ur: confirm: "تصدیق کریں" select_all: "تمام منتخب کریں" clear_all: "تمام کو حزف کریں" - unlist_topics: "بغیر فہرست موضوعات" - relist_topics: "موضوعات دوبارہ فہرست کریں" reset_bump_dates: "ٹکرانے کی تاریخوں کی دوبارہ ترتیب" defer: "بغیر پڑھے نشان زد" - delete: "موضوعات حذف کریں" delete_topics_count: one: "موضوع حذف کریں" other: "موضوعات حذف کریں" + delete_posts_count: + one: "پوسٹ حذف کریں" + other: "پوسٹس حذف کریں" + delete_posts_confirmation: + one: "کیا آپ واقعی %{count} پوسٹ حذف کرنا چاہتے ہیں؟" + other: "کیا آپ واقعی %{count} پوسٹس حذف کرنا چاہتے ہیں؟" dismiss: "بر خاست کریں" dismiss_read: "تمام بغیر پڑھے ہوئے بر خاست کریں" dismiss_read_with_selected: @@ -3365,36 +3365,24 @@ ur: other: "نیا (%{count}) برخاست" toggle: "موضوعات کے حجمی انتخاب کو ٹوگل کریں" actions: "حجمی عوامل" - change_category: "زمرہ سیٹ" - close_topics: "موضوع بند کریں" - archive_topics: "موضوع محفوظ" move_messages_to_inbox: "اِنباکس میں منتقل کریں" archive_messages: "آرکائیو میں منتقل" - notification_level: "اطلاعات۔۔۔" change_notification_level: "نوٹیفیکیشن لیول تبدیل کریں" choose_new_category: "موضوعات کیلئے نئے زمرہ کا انتخاب کریں:" - selected: - one: "آپ نے %{count} موضوع منتخب کیا۔" - other: "آپ نے %{count} موضوعات منتخب کیے۔" selected_sole_category: one: "آپ نے زمرہ سے %{count} موضوع منتخب کیا ہے:" other: "آپ نے زمرہ سے %{count} موضوعات کا انتخاب کیا ہے:" selected_count: one: "%{count} کا انتخاب" other: "%{count} کا انتخاب" - change_tags: "ٹیگز بدلیں" - append_tags: "ٹیگز میں اضافہ کریں" choose_new_tags: "ان موضوعات کیلئے نئے ٹیگز کا انتخاب کریں:" - choose_append_tags: "ان موضوعات پر اضافہ کرنے کیلئے نئے ٹیگز کا انتخاب کریں:" changed_tags: "ان موضوعات کے ٹیگز تبدیل کر دیے گئے تھے۔" - remove_tags: "تمام ٹیگز ہٹا دیں" confirm_remove_tags: one: "اس موضوع سے تمام دھجیاں ہٹا دی جائیں گی۔ کیا آپ کو یقین ہے؟" other: "تمام دھجیوں کو %{count} موضوعات سے ہٹا دیا جائے گا۔ کیا آپ کو یقین ہے؟" progress: one: "پیش رفت: %{count} موضوع" other: "پیش رفت: %{count} موضوعات" - notify: "اس تبدیلی کے بارے میں صارفین کو مطلع کریں۔" performing: "حجم آپریشنز ہو رہے ہیں، براہ کرم انتظار کریں۔۔۔" completed: "حجمی اختیارات کامیابی سے مکمل ہو گئے!" error_topic_count: @@ -3423,7 +3411,6 @@ ur: name: "بر خاست کریں" close_topics: name: "بند کریں" - note: "نوٹ" optional: (اختیاری) archive_topics: name: "محفوظ شدہ" @@ -3437,24 +3424,18 @@ ur: name: "دوبارہ لگانا" remove_tags: name: "دھجیاں ہٹائیں" - append_tags: - name: "ٹیگز میں اضافہ کریں" replace_tags: name: "ٹیگز بدلیں" delete_topics: name: "مٹائیں" update_category: name: "تازہ ترین زمرہ" - description: "منتخب کردہ موضوعات کے لیے نئے زمرے کا انتخاب" reset_bump_dates: name: "ٹکرانے کی تاریخیں دوبارہ ترتیب دیں" - description: "موضوع کی ٹکرانے کی تاریخ کو آخری تخلیق کردہ پوسٹ کی تاریخ پر دوبارہ ترتیب دیں، جو موضوع کی فہرست میں ترتیب کو متاثر کرتی ہے۔" defer: name: "غیر پڑھا ہوا نشان زد" - description: "موضوعات کو بغیر پڑھے کے بطور نشان زد" update_notifications: name: "اطلاعات کو اپ ڈیٹ" - description: "نوٹیفکیشن لیول کو دیکھنا، ٹریکنگ، نارمل، یا خاموش میں بدلنا" topic: filter_to: one: "موضوع میں %{count} پوسٹ" @@ -3576,6 +3557,8 @@ ur: 12_hours: "12 گھنٹے" 24_hours: "24 گھنٹے" custom: "اپنی مرضی کے مطابق مدت" + slow_mode_notice: + duration: "براہ کرم اس عنوان پر اپنی پوسٹس کے درمیان %{duration} کا انتظار کریں" topic_status_update: title: "موضوع ٹائمر" save: "ٹائمر مقرر کریں" @@ -3605,6 +3588,8 @@ ur: title: "آخری دھاگہ کے بعد موضوع از خود بند ہونے والا ہے" auto_delete: title: "موضوع خودبخود حذف کریں" + auto_delete_after_last_post: + title: "آخری دھاگہ کے بعد موضوع از خود حذف ہونے والا ہے" auto_bump: title: "خود کار طریقے سے موضوع دھکا لگائیں" reminder: @@ -3616,6 +3601,7 @@ ur: auto_close: "یہ موضوع خود کار طریقے سے بند کر دیا جائے گا %{timeLeft}۔" auto_publish_to_category: "یہ موضوع #%{categoryName} میں شائع کر دیا جائے گا %{timeLeft}۔" auto_close_after_last_post: "یہ موضوع آخری جواب کے %{duration} بعد بند ہو جائے گا۔" + auto_delete_after_last_post: "یہ موضوع آخری جواب کے %{duration} بعد حذف ہو جائے گا۔" auto_delete: "یہ موضوع خودبخود مٹادیا جائے گا %{timeLeft}۔" auto_bump: "اس موضوع کو خود کار طریقے سے دھکا لگایا جائے گا %{timeLeft}۔" auto_reminder: "آپ کو اس موضوع کے بارے میں یاد دہانی کرائی جائے گی %{timeLeft}۔" @@ -3711,6 +3697,8 @@ ur: reply: title: "جواب" help: "اس ٹاپک کا جواب لکھنا شروع کریں" + footer_buttons: + region_label: "موضوع کے ایکشنز" share: title: "موضوع کا اشتراک کریں" extended_title: "رابطہ شیئر کریں" @@ -3890,6 +3878,12 @@ ur: one: آپ نے %{count} دھاگہ منتخب کیا۔ other: "آپ نے %{count} دھاگے منتخب کیے۔" deleted_by_author_simple: "(موضوع مصنف نے مٹایا)" + localizations: + title_edit_warning: + message: "یہ ترجمہ شدہ موضوعاتی عنوان ہے۔

کیا آپ اس %{language} میں اصل زمرہ، ٹیگز، اور ٹائٹل کو حذف کرنا چاہتے ہیں یا خصوصی ترجمہمیں ترمیم کرنا چاہتے ہیں؟" + action_original: "اصل میں ترمیم کریں" + action_translation: "ترجمہ شدہ موضوعاتی عنوان میں ترمیم کریں" + editing_translation: "%{language} ترجمہ میں ترمیم کرتے ہوئے" post_list: title: "تازہ ترین پوسٹس" empty: "کوئی پوسٹس نہیں" @@ -3897,7 +3891,10 @@ ur: bulk: select_all: "سبھی منتخب کریں" clear_all: "سبھی ہٹا دیں" + actions: "حجمی عوامل" post: + accessible_heading: "پوسٹ منجانب %{username} %{date}" + heading_anchor: "ہیڈنگ لنک" confirm_delete: "کیا آپ واقعی اس پوسٹ کو حذف کرنا چاہتے ہیں؟" quote_reply: "اقتباس کریں" quote_reply_shortcut: "اقتباس (یا q دبائیں)" @@ -3977,7 +3974,9 @@ ur: edit: "ترمیم کریں" delete: "مٹائیں" add: "نیا ترجمہ شامل" - manage: "ترجمے کا انتظام کریں (%{count} موجودہ)" + manage: + one: "ترجمے کا انتظام کریں (%{count} موجودہ)" + other: "ترجمے کا انتظام کریں (%{count} موجودہ)" view: one: "ملاحظہ کریں %{count} مقامی ترجمہ شدہ" other: "ملاحظہ کریں %{count} مقامی ترجمہ شدہ" @@ -4222,8 +4221,10 @@ ur: delete: "مٹائیں" add: "مطلوبہ دہجی گروپ شامل کریں" placeholder: "دہجی گروپ کا انتخاب" + tag_group: "ٹیگ گروپ" topic_featured_link_allowed: "اس زمرہ میں نمایاں رابطوں کو اجازت دیں" create_long: "نیا زمرہ بنائیں" + unsaved_changes: "آپ کی تبدلیاں محفوظ نہیں ہوئیں" slug_placeholder: "(اختیاری) URL کے لئے ڈیش دار الفاظ" creation_error: زمرہ بنانے کے دوران ایک خرابی کا سامنا کرنا پڑا۔ save_error: زمرہ محفوظ کرنے میں ایک خرابی کا سامنا کرنا پڑا۔ @@ -4253,6 +4254,8 @@ ur: delete_confirm: "کیا آپ واقعی اِس زمرہ کو مٹانا چاہتے ہیں؟" delete_error: "اِس زمرہ کو مٹانے میں ایک خرابی کا سامنا کرنا پڑا۔" no_description: "براہ مہربانی اس زمرہ کی تفصیل شامل کریں۔" + description_expand: "مزید دکھائیں" + description_collapse: "کم دکھائیں" already_used: "یہ رنگ دوسرے زمرہ کیلیے استعمال ہو چکا ہے۔" security: "سیکورٹی" security_add_group: "ایک گروپ شامل کریں" @@ -4285,6 +4288,9 @@ ur: review_group_name: "گروپ نام" require_topic_approval: "تمام نئے موضوعات کیلئے نگرانوں کی منظوری لازمی کریں" require_reply_approval: "تمام نئے جوابات کیلئے نگرانوں کی منظوری لازمی کریں" + posting_review_modes: + everyone: "ہر کوئی" + posting_review_groups_placeholder: "گروپس منتخب کریں..." this_year: "اِس سال" position: "زمرہ جات کے صفحے پر پوزیشن:" position_disabled: "زمرہ جات کو سرگرمی کی ترتیب میں دکھایا جائے گا۔ فہرستوں میں زمرہ جات کی ترتیب کو کنٹرول کرنے کے لیے، 'نسب شدہ زمرہ ترتیب' سیٹنگ کو فعال کریں۔" @@ -4817,7 +4823,19 @@ ur: other: "اس کے %{count} مترادفات بھی مٹا دیے جائیں گے۔" edit_tag: "ٹیگ نام اور تفصیل میں ترمیم کریں" edit: "ٹیگ میں ترمیم کریں" - description: "تفصیل (زیادہ سے زیادہ 1000 حروف)" + description: "تفصیل" + settings: + title: "سیٹِنگ" + general: "عام" + localizations: "لوکلائزیشنز" + back: "واپس" + name: "نام" + slug: "سلگ" + name_placeholder: "ٹیگ کا نام" + localization: + locale: "لوکیل" + name: "نام" + description: "تفصیل" sort_by: "ترتیب بہ:" sort_by_count: "شمار" sort_by_name: "نام" @@ -5311,7 +5329,6 @@ ur: admin_js: type_to_filter: "کو فلٹر کرنے کے لیے ٹائپ کریں…" settings: "ترتیبات" - reset_filter: "رِی سَیٹ" admin: title: "ڈِسکورس منتظم" moderator: "نگران" @@ -5324,9 +5341,11 @@ ur: never: "کبھی نہیں" reports: title: "دستیاب رپورٹوں کی فہرست" - meta_doc: "رپورٹس ایک طاقتور ہتھیار ہیں جو آپ کو یہ سمجھنے میں مدد کرتی ہیں کہ آپ کی سائٹ پر کیا ہو رہا ہے۔ وہ آپ کو رجحانات، مسائل کی نشاندہی کرنے اور ڈیٹا کی بنیاد پر فیصلے کرنے میں مدد کر سکتی ہیں۔" sidebar_title: "رپورٹیں" back: "تمام رپورٹس پر واپس" + group_traffic: "ٹریفک" + group_members: "ممبران" + group_other: "دیگر" config_sections: account: title: "اکاؤنٹ" @@ -5351,7 +5370,6 @@ ur: preview: "جھلک دیکھیں" enabled_for_options: everyone: "ہر کوئی" - staff: "صرف سٹاف کیلئے" statuses: experimental: "تجرباتی" impact_roles: @@ -5423,7 +5441,6 @@ ur: help_text: "تجویز کردہ سائز 600 x 80 پکسلز ہے۔" large_icon: title: "مربع آئیکن" - description: "لوگو کی تصویر کا مربع ورژن انتظامیہ کے اوپر ظاہر ہوتا ہے اور یہ موبائل ہوم اسکرین ایپ کا لوگو بھی ہے۔" help_text: "تجویز کردہ سائز 512 x 512 پکسلز ہے۔" square_icon_dark: required: "ڈارک موڈ کے لیے ایک مختلف مربع آئیکن استعمال کریں؟" @@ -5576,7 +5593,7 @@ ur: header_description: "رپورٹس ایک طاقتور ٹول ہیں جو آپ کو یہ سمجھنے میں مدد کرتی ہیں کہ آپ کی سائٹ پر کیا ہو رہا ہے۔ وہ آپ کو رجحانات کی نشاندہی کرنے، مسائل کی نشاندہی کرنے اور ڈیٹا کی بنیاد پر فیصلے کرنے میں مدد کر سکتے ہیں۔" sub_pages: settings: - title: "ڈیش بورڈ کی ترتیبات" + title: "سیٹِنگ" badges: title: "تمغات" header_description: "تمغات اراکین کو ان کی سرگرمیوں، شراکتوں اور کامیابیوں کو پہچاننے، توثیق کرنے اور کمیونٹی کے اندر مثبت رویے اور مشغولیت کی حوصلہ افزائی کے لیے انعام دیتے ہیں۔" @@ -5729,22 +5746,6 @@ ur: result_count: one: '%{count} نتیجہ برائے "%{filter}"' other: '%{count} نتائج برائے "%{filter}"' - result_types: - page: - one: "صفحه" - other: "صفحات" - report: - one: "گزارش" - other: "گزارشات" - setting: - one: "ترتیب" - other: "ترتیبات" - theme: - one: "تھیم" - other: "تِھیمز" - component: - one: "جزو" - other: "اجزاء" new_features: title: "نیا کیا ہے؟" check_for_updates: "اپ ڈیٹس کے لیے چیک کریں۔" @@ -5768,23 +5769,6 @@ ur: title: "نیا کیا ہے؟" subtitle: "ہم وقتاً فوقتاً نئی خصوصیات اور بہتریاں جاری کر رہے ہیں۔ یہ صفحہ نمایاں نکات کا احاطہ کرتا ہے، لیکن آپ 'مزید جانیں' پر کلک کر کے اجرا کی تفصیلات دیکھ سکتے ہیں" learn_more: "مزید جانیں..." - experimental: "تجرباتی" - only_experiments: "صرف تجرباتی خصوصیات دکھائیں" - experiment_enabled: "آپ نے تجرباتی خصوصیت کو فعال کر دیا۔" - experiment_disabled: "آپ نے تجرباتی خصوصیت کو غیر فعال کر دیا۔" - feature_enabled: "آپ نے یہ خصوصیت فعال کر دی ہے" - feature_disabled: "آپ نے یہ خصوصیت غیر فعال کر دی ہے" - toggled_too_fast: "آپ نے سوئچ بہت تیزی سے تبدیل کیا ہے۔ براہِ کرم دوبارہ کوشش کرنے سے پہلے چند سیکنڈ انتظار کریں" - experiment_tooltip: - title_disabled: "اس تجرباتی خصوصیت کو آزمائیں" - title_enabled: "تجرباتی خصوصیت کو بند کریں" - content_disabled: "ہمارا نیا تیار کردہ فیچرآزمائیں! یہ ابھی تجرباتی مرحلے میں ہے، اس لیے ہم اسے کسی بھی وقت ہٹا سکتے ہیں۔ آپ جب چاہیں اس سے باہر نکل سکتے ہیں۔

اس کو تبدیل کرنے سے یہ فیچر تمام صارفین کے لیے فعال ہو جائے گا۔" - content_enabled: "اسے تبدیل کرنے سے یہ فیچر تمام صارفین کے لیے غیر فعال ہو جائے گا۔" - feature_tooltip: - title_disabled: "اس خصوصیت کو آزمائیں" - title_enabled: "خصوصیت کو بند کریں" - content_disabled: "اس نئی خصوصیت کو آزما کر دیکھیں! آپ جب چاہیں اسے غیر فعال کر سکتے ہیں۔

اس کو تبدیل کرنے سے یہ خصوصیت تمام صارفین کے لیے فعال ہو جائے گی" - content_enabled: "اس کو تبدیل کرنے سے یہ خصوصیت تمام صارفین کے لیے غیر فعال ہو جائے گی" last_checked: "آخری دفعہ چیک کیا گیا" refresh_problems: "رِیفریش" no_problems: "کوئی مسائل نہیں پائے گئے۔" @@ -5847,7 +5831,7 @@ ur: all: "تمام" view_table: "ٹیبل" view_graph: "گراف" - refresh_report: "رپورٹ رِیفریش کریں" + refresh_report: "تازہ کریں" daily: روزانہ monthly: ماہانہ weekly: ہفتہ وار @@ -6688,7 +6672,6 @@ ur: add_all: "سب شامل کریں" import_web_tip: "رِیپَوزِٹَری میں موجود تِھیم" direct_install_tip: "کیا آپ واقعی ذیل میں درج ریپوزٹری سے %{name} انسٹال کرنا چاہتے ہیں؟" - import_file_tip: ".tar.gz، .zip، یا .dcstyle.json فائل میں موجود تِھیم" is_private: "تھِیم ایک ذاتی گِٹ رِیپَوزِٹَری میں ہے" last_attempt: "انسٹال کرنے کا پراسیس ختم نہیں ہوا، آخری بار کوشش کی گئی:" remote_branch: "برانچ کا نام (اختیاری)" @@ -7445,6 +7428,7 @@ ur: title: "اختیاری" field_types: text: "ٹیکسٹ" + date: "تاریخ" confirm: "تصدیق" dropdown: "ڈراپ ڈاؤن" multiselect: "کثیر الانتخاب" diff --git a/config/locales/client.vi.yml b/config/locales/client.vi.yml index 815af740dbfc2..268ec7a7355b4 100644 --- a/config/locales/client.vi.yml +++ b/config/locales/client.vi.yml @@ -6,6 +6,12 @@ vi: js: + blocks: + ghost: + status: "Trạng thái" + in_location: "trong" + hidden: "ẩn" + failed: "thất bại" carousel: go_to_slide: "Đến slide %{index}" previous: "Slide trước" @@ -383,6 +389,8 @@ vi: pill: "Đề xuất" pm_title: "Tin nhắn gợi ý" admin_onboarding_banner: + start_posting: + back: "Quay lại" spread_the_word: action: "Sao chép link" about: @@ -452,8 +460,6 @@ vi: other: "Ra mắt %{count} năm trước" bookmarked: title: "Đánh dấu" - edit_bookmark: "Chỉnh sửa đánh dấu" - clear_bookmarks: "Xóa đánh dấu" help: bookmark: "Nhấn để đánh dấu chủ đề này" edit_bookmark: "Nhấn để chỉnh sửa đánh dấu trên một tút trong chủ đề này" @@ -472,12 +478,12 @@ vi: clear_reminder: "Xóa lời nhắc" edit: "Chỉnh sửa đánh dấu" not_bookmarked: "Đánh dấu tút này" + topic_bookmark: "Chủ đề" remove_reminder_keep_bookmark: "Xóa lời nhắc và giữ lại đánh dấu" created_with_reminder: "Bạn đã đánh dấu tút này với lời nhắc %{date}. %{name}" created_with_reminder_generic: "Bạn đã đánh dấu mục này với lời nhắc %{date}. %{name}" delete: "Xóa đánh dấu" confirm_delete: "Bạn có chắc muốn xóa đánh dấu này? Lời nhắc cũng sẽ bị xóa." - confirm_clear: "Bạn có chắc muốn xóa tất cả đánh dấu trong chủ đề này?" save: "Lưu" no_timezone: 'Bạn chưa đặt múi giờ. Bạn sẽ không thể đặt lời nhắc. Thiết lập một trong hồ sơ của bạn .' invalid_custom_datetime: "Ngày và giờ bạn cung cấp không hợp lệ, vui lòng thử lại." @@ -599,18 +605,13 @@ vi: in_reply_to: "trong trả lời tới" filtered_flagged_by: "Gắn cờ bởi" unknown: - title: - other: "Bạn có các yêu cầu cần xem xét từ các plugin đã bị vô hiệu hóa:" instruction: "Chúng sẽ không hiển thị đúng cách cho đến khi bạn kích hoạt plugin liên quan. Vui lòng kích hoạt plugin và làm mới trang. Hoặc bạn có thể bỏ qua chúng. Tìm hiểu thêm..." reviewable_unknown_source: "%{reviewableType} (plugin không xác định)" reviewable_known_source: "%{reviewableType} (từ plugin '%{pluginName}')" ignore_all: "Bỏ qua tất cả" enable_plugins: "Kích hoạt các plugin" - delete_confirm: "Bạn có chắc muốn xóa tất cả đánh giá được tạo bởi các plugin đã bị vô hiệu hóa?" - ignore_success: "Tất cả đánh giá được tạo bởi các plugin đã bị vô hiệu hóa đều đã bị xóa." explain: why: "giải thích lý do tại sao mặt hàng này kết thúc trong hàng đợi" - title: "Chấm điểm" formula: "Công thức" subtotal: "Tổng phụ" total: "Tổng số" @@ -624,10 +625,8 @@ vi: title: "Người dùng có cờ đã được đồng ý trong lịch sử được tặng tiền thưởng." trust_level_bonus: name: "độ tin cậy" - title: "Các mục có thể xem lại được tạo bởi người dùng có độ tin cậy cao hơn có điểm cao hơn." type_bonus: name: "loại tiền thưởng" - title: "Một số loại có thể xem lại có thể được nhân viên chỉ định một phần thưởng để làm cho chúng có mức độ ưu tiên cao hơn." revise_and_reject_post: title: "Xem lại" reason: "Lý do" @@ -636,7 +635,6 @@ vi: custom_reason: "Hãy giải thích rõ lý do" other_reason: "Khác…" optional: "tùy chọn" - stale_help: "Có thể bản xem lại này đã được giải quyết bởi %{username}." claim_help: optional: "Bạn có thể phàn nàn mục này để tránh những người khác đánh giá nó." required: "Bạn phải yêu cầu các mục trước khi bạn có thể xem xét chúng." @@ -1632,6 +1630,10 @@ vi: apps: "Ứng dụng" navigation_menu: "Menu điều hướng" upcoming_changes: "Các thay đổi sắp tới" + calendar_subscriptions: "Lịch" + calendar_subscriptions: + copied: "Đã sao chép!" + add_to_google: "Google Lịch" change_password: success: "(email đã gửi)" in_progress: "(đang gửi email)" @@ -2225,6 +2227,7 @@ vi: form_kit: reset: Cài lại optional: tùy chọn + required: bắt buộc dirty_form: "Bạn chưa gửi các thay đổi của mình! Bạn có chắc muốn thoát?" errors: starts_with: "Phải bắt đầu bằng %{prefix}" @@ -2606,6 +2609,8 @@ vi: medium_dark_tone: Màu da tối trung bình dark_tone: Màu da tối default: Biểu tượng cảm xúc tùy chỉnh + filter_input: + clear: "Xóa bộ lọc" shared_drafts: title: "Thư nháp được Chia sẻ" notice: "Chủ đề này chỉ hiển thị với những người có thể xuất bản các bản nháp được chia sẻ." @@ -2962,8 +2967,6 @@ vi: votes_released: "đã trả lượt bình chọn" new_features: "tính năng mới của Discourse đã ra mắt" admin_problems: "Lời khuyên mới trên bảng điều khiển" - upcoming_change_available: "thay đổi mới sắp tới '%{changeName}' hiện đã có sẵn" - upcoming_change_automatically_promoted: "thay đổi sắp tới '%{changeName}' đã được kích hoạt tự động" upload_selector: change: "Thay đổi" delete: "Xóa" @@ -3099,8 +3102,6 @@ vi: max_views: placeholder: Tối đa aria_label: lọc theo lượt xem tối đa - additional_options: - label: "Lọc số lượng tút và lượt xem chủ đề" hamburger_menu: "Menu điều hướng" new_item: "mới" go_back: "quay trở lại" @@ -3156,11 +3157,8 @@ vi: confirm: "Xác nhận" select_all: "Chọn hết" clear_all: "Xóa hết" - unlist_topics: "Không công khai chủ đề" - relist_topics: "Mở lại công khai chủ đề" reset_bump_dates: "Đặt lại ngày đẩy" defer: "Đánh dấu là chưa đọc" - delete: "Xóa chủ đề" delete_topics_count: other: "Xóa chủ đề" delete_posts_count: @@ -3191,31 +3189,21 @@ vi: other: "Loại bỏ Mới (%{count})" toggle: "Bật/tắt chọn nhiều chủ đề cùng lúc" actions: "Thao tác hàng loạt" - change_category: "Chọn chuyên mục…" - close_topics: "Đóng các chủ đề" - archive_topics: "Chủ đề Lưu trữ" move_messages_to_inbox: "Chuyển sang hộp thư" archive_messages: "Di chuyển đến Lưu trữ" - notification_level: "Thông báo…" change_notification_level: "Thay đổi mức thông báo" choose_new_category: "Chọn chuyên mục mới cho chủ đề này:" - selected: - other: "Bạn đã chọn %{count} chủ đề" selected_sole_category: other: "Bạn đã chọn %{count} chủ đề từ chuyên mục:" selected_count: other: "%{count} được chọn" - change_tags: "Thay thế thẻ" - append_tags: "Thêm thẻ" choose_new_tags: "Chọn thẻ mới cho các chuyên mục sau:" - choose_append_tags: "Chọn các thẻ mới để thêm vào cho các chủ đề này:" changed_tags: "Các thẻ của các chủ đề đó đã được thay đổi." - remove_tags: "Xóa tất cả các thẻ" confirm_remove_tags: other: "Tất cả các thẻ sẽ bị xóa khỏi %{count} chủ đề. Bạn có chắc không?" progress: other: "Tiến độ: %{count} chủ đề" - notify: "Thông báo cho người dùng về thay đổi này." + notify: "Thông báo cho người dùng về thay đổi này" performing: "Đang thực hiện các thao tác hàng loạt, vui lòng chờ…" completed: "Các thao tác xử lý hàng loạt đã hoàn tất!" error_topic_count: @@ -3243,7 +3231,6 @@ vi: name: "Bỏ qua" close_topics: name: "Đóng" - note: "Ghi chú" optional: (tùy chọn) archive_topics: name: "Lưu Trữ" @@ -3257,24 +3244,18 @@ vi: name: "Công khai lại" remove_tags: name: "Xóa thẻ" - append_tags: - name: "Thêm thẻ" replace_tags: name: "Thay thế thẻ" delete_topics: name: "Xóa" update_category: name: "Cập nhật chuyên mục" - description: "Chọn chuyên mục mới cho các chủ đề đã chọn này" reset_bump_dates: name: "Đặt lại ngày đẩy" - description: "Đặt lại ngày đẩy chủ đề thành ngày tạo tút cuối cùng, điều này ảnh hưởng đến thứ tự hiển thị trong danh sách chủ đề" defer: name: "Đánh dấu là Chưa đọc" - description: "Đánh dấu chủ đề là chưa đọc" update_notifications: name: "Cập nhật thông báo" - description: "Thay đổi mức độ thông báo thành Giám sát, Theo dõi, Bình thường hoặc Phớt lờ." topic: filter_to: other: "%{count} tút trong chủ đề" @@ -3786,7 +3767,8 @@ vi: edit: "Sửa" delete: "Xóa" add: "Thêm bản dịch mới" - manage: "Quản lý bản dịch (hiện có %{count})" + manage: + other: "Quản lý bản dịch (hiện có %{count})" view: other: "Xem %{count} ngôn ngữ đã dịch" modal: @@ -4025,11 +4007,15 @@ vi: delete: "Xóa" add: "Thêm nhóm thẻ bắt buộc" placeholder: "Chọn nhóm thẻ…" + tag_group: "Nhóm thẻ" topic_featured_link_allowed: "Cho phép các liên kết nổi bật trong chuyên mục này" delete: "Xóa chuyên mục" create: "Chuyên mục mới" create_long: "Tạo Chủ đề mới" + type_settings_schema: + site_settings: "Cài đặt trang web" save: "Lưu chuyên mục" + unsaved_changes: "Bạn có những thay đổi chưa được lưu" slug: "Đường dẫn chuyên mục" parent: "Chuyên mục chính" slug_placeholder: "(Tùy chọn) các từ sử dụng trong url" @@ -4075,6 +4061,8 @@ vi: list: "Danh sách chuyên mục" no_description: "Hãy thêm mô tả cho chuyên mục này" change_in_category_topic: "Sửa mô tả" + description_expand: "Hiện thêm" + description_collapse: "Thu gọn" already_used: "Màu này đã được dùng bởi chuyên mục khác" color_palette: "Bảng màu" security: "Bảo mật" @@ -4114,6 +4102,10 @@ vi: review_group_name: "Nhóm tên" require_topic_approval: "Yêu cầu người kiểm duyệt phê duyệt tất cả các chủ đề mới" require_reply_approval: "Yêu cầu người kiểm duyệt phê duyệt tất cả các câu trả lời mới" + posting_review_modes: + no_one: "Không ai" + everyone: "Mọi người" + posting_review_groups_placeholder: "Chọn nhóm..." this_year: "năm nay" position: "Vị trí trên trang chuyên mục:" default_position: "Vị trí mặc định" @@ -4643,7 +4635,20 @@ vi: other: "%{count} từ đồng nghĩa của nó cũng sẽ bị xóa." edit_tag: "Chỉnh sửa tên thẻ và mô tả" edit: "Sửa thẻ này" - description: "Mô tả (tối đa 1000 ký tự)" + description: "Mô tả" + settings: + title: "Cài đặt" + general: "Chung" + localizations: "Bản địa hóa" + back: "Quay lại" + name: "Tên" + slug: "tên đường dẫn" + name_placeholder: "Tên thẻ" + synonyms_subtitle: "Khi các thẻ sau được sử dụng, chúng sẽ được thay thế bằng %{name}" + localization: + locale: "Ngôn ngữ" + name: "Tên" + description: "Mô tả" sort_by: "Xếp theo:" sort_by_count: "Số lượng" sort_by_name: "Tên" @@ -5143,7 +5148,6 @@ vi: admin_js: type_to_filter: "Gõ vào bộ lọc…" settings: "Cài đặt" - reset_filter: "Cài lại" toggle_filters: "Bật/tắt bộ lọc thả xuống" admin: title: "Quản trị Diễn đàn" @@ -5157,9 +5161,11 @@ vi: never: "không bao giờ" reports: title: "Danh sách các báo cáo có sẵn" - meta_doc: "Báo cáo là công cụ mạnh mẽ giúp bạn hiểu rõ những gì đang diễn ra trên trang web của mình. Chúng có thể giúp bạn nhận diện xu hướng, phát hiện vấn đề và đưa ra quyết định dựa trên dữ liệu." sidebar_title: "Báo cáo" back: "Quay lại tất cả báo cáo" + group_traffic: "Băng thông" + group_members: "Thành viên kênh" + group_other: "Khác" config_sections: account: title: "Tài khoản" @@ -5203,7 +5209,6 @@ vi: enabled_for_options: no_one: "Không ai" everyone: "Mọi người" - staff: "Chỉ nhân viên" specific_groups: "Các nhóm cụ thể" specific_groups_with_group_names: other: "Các nhóm %{groupNames}" @@ -5225,7 +5230,6 @@ vi: all: "Tất cả" enabled_all: "Tất cả trạng thái được kích hoạt" enabled: "Đã bật" - enabled_for_staff: "Đã kích hoạt cho nhân viên" enabled_for_specific_groups: "Đã kích hoạt cho các nhóm cụ thể" disabled: "Vô hiệu hóa" impact_type_all: "Tất cả loại tác động" @@ -5314,7 +5318,6 @@ vi: help_text: "Kích thước đề xuất là 600x80 pixel." large_icon: title: "Biểu tượng hình vuông" - description: "Phiên bản hình vuông của logo xuất hiện ở đầu trang quản trị và cũng là logo ứng dụng trên màn hình chính của thiết bị di động." help_text: "Kích thước đề xuất là 512x512 pixel." square_icon_dark: required: "Sử dụng logo vuông khác cho chế độ tối?" @@ -5501,7 +5504,7 @@ vi: header_description: "Báo cáo là công cụ mạnh mẽ giúp bạn hiểu rõ những gì đang diễn ra trên trang web của mình. Chúng có thể giúp bạn nhận diện xu hướng, phát hiện vấn đề và đưa ra quyết định dựa trên dữ liệu." sub_pages: settings: - title: "Cài đặt bảng điều khiển" + title: "Cài đặt" badges: title: "Huy hiệu" header_description: "Huy hiệu là phần thưởng dành cho thành viên vì các hoạt động, đóng góp và thành tích của họ, nhằm ghi nhận, xác thực và khuyến khích hành vi tích cực và sự tham gia trong cộng đồng" @@ -5653,17 +5656,6 @@ vi: no_results: 'Chúng tôi không tìm thấy bất kỳ kết quả nào khớp với "%{filter}".' result_count: other: '%{count} kết quả cho "%{filter}"' - result_types: - page: - other: "Trang" - report: - other: "Báo cáo" - setting: - other: "Cài đặt" - theme: - other: "Themes" - component: - other: "Các thành phần" new_features: title: "Có gì mới?" check_for_updates: "Kiểm tra cập nhật" @@ -5688,23 +5680,6 @@ vi: subtitle: "Chúng tôi liên tục phát hành các tính năng và cải tiến mới. Trang này nêu bật những điểm chính, nhưng bạn có thể nhấn vào 'Tìm hiểu thêm' để xem ghi chú phát hành chi tiết." no_new_features_error: "Đã xảy ra lỗi khi tải nguồn cấp dữ liệu. Bạn có thể xem các thông báo tính năng mới trước đó trên cộng đồng Discourse Meta." learn_more: "Tìm hiểu thêm..." - experimental: "Thí nghiệm" - only_experiments: "Chỉ hiển thị các tính năng thử nghiệm" - experiment_enabled: "Bạn đã kích hoạt tính năng thử nghiệm." - experiment_disabled: "Bạn đã tắt tính năng thử nghiệm." - feature_enabled: "Bạn đã kích hoạt tính năng." - feature_disabled: "Bạn đã tắt tính năng." - toggled_too_fast: "Bạn đã chuyển đổi quá nhanh. Vui lòng đợi vài giây trước khi thử lại." - experiment_tooltip: - title_disabled: "Thử tính năng thử nghiệm này" - title_enabled: "Tắt tính năng thử nghiệm" - content_disabled: "Hãy dùng thử tính năng mới nhất mà chúng tôi đang phát triển! Tính năng này vẫn đang trong giai đoạn thử nghiệm, vì vậy chúng tôi có thể loại bỏ nó bất cứ lúc nào. Bạn có thể hủy kích hoạt bất cứ khi nào bạn muốn.

Thay đổi tùy chọn này sẽ kích hoạt tính năng cho tất cả thành viên." - content_enabled: "Việc thay đổi này sẽ vô hiệu hóa tính năng đối với tất cả thành viên." - feature_tooltip: - title_disabled: "Thử tính năng này" - title_enabled: "Tắt tính năng" - content_disabled: "Hãy thử tính năng mới này! Bạn có thể tắt bất cứ lúc nào bạn muốn.

Thay đổi tùy chọn này sẽ kích hoạt tính năng cho tất cả thành viên." - content_enabled: "Việc thay đổi này sẽ vô hiệu hóa tính năng đối với tất cả thành viên." last_checked: "Kiểm tra lần cuối" refresh_problems: "Làm mới" no_problems: "Không phát hiện vấn đề" @@ -5763,7 +5738,7 @@ vi: all: "Tất cả" view_table: "bảng" view_graph: "đồ thị" - refresh_report: "Làm mới báo cáo" + refresh_report: "Làm mới" daily: hằng ngày monthly: Hàng tháng weekly: Hàng tuần @@ -6659,7 +6634,6 @@ vi: import_web_tip: "Kho chứa chủ đề" direct_install_tip: "Bạn có chắc chắn muốn cài đặt %{name} từ kho lưu trữ được liệt kê bên dưới không?" import_web_advanced: "Nâng cao…" - import_file_tip: "Tệp .tar.gz, .zip hoặc .dcstyle.json chứa chủ đề" is_private: "Theme nằm trong kho git riêng" finish_install: "Hoàn tất cài đặt theme" last_attempt: "Quá trình cài đặt chưa hoàn tất, lần thử cuối cùng:" @@ -7721,6 +7695,7 @@ vi: field_types: text: "Văn bản" textarea: "Vùng nhập văn bản" + date: "Ngày" confirm: "Xác nhận" dropdown: "Xổ xuống" multiselect: "Chọn nhiều" @@ -7854,7 +7829,7 @@ vi: min_admin_password_length: prompt: "Bạn sắp thay đổi chính sách mật khẩu. Điều này sẽ ảnh hưởng đến tất cả quản trị viên khi họ thay đổi mật khẩu kể từ bây giờ. Bạn có chắc muốn tiếp tục?" confirm: "Có, cập nhật chính sách mật khẩu" - password_unique_charactes: + password_unique_characters: prompt: "Bạn sắp thay đổi chính sách mật khẩu của mình. Điều này sẽ ảnh hưởng đến tất cả thành viên khi thay đổi mật khẩu kể từ bây giờ. Bạn có chắc muốn tiếp tục?" confirm: "Có, cập nhật chính sách mật khẩu" block_common_passwords: diff --git a/config/locales/client.zh_CN.yml b/config/locales/client.zh_CN.yml index 8f8fc1a4dd74a..45a6546fc7b5c 100644 --- a/config/locales/client.zh_CN.yml +++ b/config/locales/client.zh_CN.yml @@ -6,6 +6,22 @@ zh_CN: js: + blocks: + ghost: + status: "状态" + conditions: "条件" + arguments: "参数" + container_args: "容器参数" + in_location: "位置:" + hidden: "已隐藏" + not_registered: "未注册" + no_visible_children: "没有可见子项" + failed: "失败" + ghost_reasons: + optional_missing_hint: "由于未注册,此可选代码块不会呈现。" + no_visible_children_hint: "由于所有子元素都不可见,此容器块不会呈现。" + condition_failed_hint: "由于条件不满足,此代码块不会呈现。" + head_hidden_tail_hint: "由于 `head` 容器中已先呈现了另一个代码块,此代码块不会呈现。" carousel: go_to_slide: "转到幻灯片 %{index}" previous: "上一张幻灯片" @@ -263,22 +279,23 @@ zh_CN: skip_to_main_content: "跳到主要内容" skip_links_label: "跳过导航链接" skip_to_post: "跳至帖子 %{post_number}" - skip_to_where_you_left_off: "跳转到您离开的地方 (post %{post_number})" - skip_to_where_you_left_off_last: "跳转到您离开的地方(最后一个回复,帖子 %{post_number})" + skip_to_where_you_left_off: "跳转到您离开的地方(帖子 %{post_number})" + skip_to_where_you_left_off_last: "跳转到您离开的地方(最后一条回复,帖子 %{post_number})" skip_to_last_reply: "跳转到最后一条回复" skip_to_top: "跳转到顶部" skip_user_nav: "跳到个人资料内容" emails_are_disabled: "所有外发电子邮件已被管理员全局禁用。任何类型的电子邮件通知都不会发出。" + emails_are_disabled_no_smtp: "由于未配置 SMTP 服务器,所有外发电子邮件均已禁用。无法发送任何类型的电子邮件。" emails_are_disabled_non_staff: "非管理员用户无法向外发送电子邮件。" software_update_prompt: message: "我们更新了网站,请刷新以保持网站顺利运行。" dismiss: "忽略" notifications_tracking: - tooltip: "通知级别: %{level}" + tooltip: "通知级别:%{level}" back_button: "返回" welcome_banner: header: - new_members: "欢迎, %{preferred_display_name}!" + new_members: "欢迎,%{preferred_display_name}!" logged_in_members: "欢迎回来,%{preferred_display_name}!" anonymous_members: "欢迎来到 %{site_name}!" search_placeholder: "搜索" @@ -294,12 +311,28 @@ zh_CN: broken_page_change_alert: "onPageChange 处理程序出错。请查看浏览器开发者工具了解更多信息。" broken_plugin_alert: "由插件 '%{name}' 引起" broken_transformer_alert: "出错了。您的网站可能无法正常运行。" + broken_block_alert: "检测到块配置错误。请查看浏览器控制台了解详情。" + broken_block_factory_alert: "块加载失败。某些 UI 元素可能无法正确显示。" critical_deprecation: notice: "[管理员通知] %{source} 包含需要更新的代码。(id:%{id})" learn_more_link: "(了解详情)" theme_source: "主题 '%{name}'" plugin_source: "插件 '%{name}'" unknown_source: "您的某个主题或插件" + dev_tools: + drag_to_move: "拖动以移动" + toggle_plugin_outlet_debug: "切换插件出口调试" + toggle_block_debug: "切换块调试" + block_debug: + outlet_boundaries: "出口边界" + visual_overlay: "视觉叠加" + ghost_blocks: "幽灵块" + condition_debugging: "条件调试" + toggle_safe_mode: "切换安全模式" + toggle_verbose_localization: "切换详细本地化" + toggle_mobile_view: "切换移动视图" + disable_dev_tools: "禁用开发者工具" + toggle_upcoming_changes_debug: "切换“即将推出的更改”调试模式" s3: regions: ap_northeast_1: "亚太地区(东京)" @@ -385,17 +418,22 @@ zh_CN: pill: "推荐" pm_title: "建议的消息" admin_onboarding_banner: - launch_in_easy_steps: "启动只需 %{step_count} 个简单步骤" - skipped: "管理员入职培训清单现已跳过。如果您想重新启用该清单,请在网站设置中查找 ``enable site owner onboarding` 选项。" - congrats_onboarding_complete: "恭喜您完成入职流程!" + launch_in_easy_steps: "只需 %{step_count} 个简单步骤启动" + congrats_onboarding_complete: "恭喜您完成入门流程!" invite_collaborators: - title: "邀请合作者" - description: "早期成员有助于让您的社区充满活力。" + title: "邀请协作者" + description: "早期成员有助于让您的社区充满活力" action: "创建邀请" start_posting: title: "开始发帖" description: "给人们一些共同谈论的话题" - action: "破冰创意" + action: "查看想法" + choose_option: "您想如何开始?" + predefined_topics: "破冰模板" + predefined_topics_subtitle: "给新成员一些话题,选择一个模板进行编辑,然后自行制作。" + predefined_topics_description: "从一系列对话开场白中挑选一些,开启讨论" + use_predefined: "浏览模板" + back: "返回" icebreakers: fun_facts: title: "关于你,有哪些有趣的小事?" @@ -408,12 +446,12 @@ zh_CN: body: "欢迎来到社区!让我们互相认识一下。请介绍一下自己,并谈谈你的兴趣爱好。我先来:我对技术充满热情,喜欢教别人!" what_is_your_favorite_food: title: "你最喜欢吃什么?" - body: "与社区分享您最喜爱的食物!我先说:我喜欢披萨,尤其是加了奶酪和意大利辣香肠的披萨。" + body: "与社区分享你最喜爱的食物!我先说:我喜欢披萨,尤其是加了奶酪和意大利辣香肠的披萨。" spread_the_word: title: "广而告之!" description: "将链接分享给你社交网络中的所有人" action: "复制链接" - copied_to_clipboard: "链接已复制到剪贴板!" + copied_to_clipboard: "链接已复制到剪贴板!" about: edit: "编辑此页面" simple_title: "关于" @@ -481,8 +519,9 @@ zh_CN: other: "%{count} 年前创建" bookmarked: title: "加入书签" - edit_bookmark: "编辑书签" - clear_bookmarks: "清除书签" + edit_bookmark: + other: "编辑书签" + delete_bookmarks: "删除所有书签" help: bookmark: "点击以将此话题加入书签" edit_bookmark: "点击以编辑有关此话题中帖子的书签" @@ -501,12 +540,14 @@ zh_CN: clear_reminder: "清除提醒" edit: "编辑书签" not_bookmarked: "将此帖子加入书签" + topic_bookmark: "话题" + post_bookmark: "帖子 #%{post_number}" + jump_to_post: "跳转到 %{post_number}" remove_reminder_keep_bookmark: "移除提醒并保留书签" created_with_reminder: "您已将此帖子加入书签,并于 %{date}设置了一个提醒。%{name}" created_with_reminder_generic: "您已将此加入书签并设置了一个提醒 %{date}。%{name}" delete: "删除书签" confirm_delete: "确定要删除此书签吗?提醒也将一并删除。" - confirm_clear: "确定要清除此话题中的所有书签吗?" save: "保存" no_timezone: '您尚未设置时区,将无法设置提醒,在您的个人资料中进行设置。' invalid_custom_datetime: "您提供的日期和时间无效,请重试。" @@ -556,10 +597,10 @@ zh_CN: resume: "恢复" remove: "移除" remove_confirmation: "确定要删除此草稿吗?" - bulk_delete: "删除选中内容" + bulk_delete: "删除所选" bulk_delete_confirmation: "删除草稿" bulk_delete_message: - other: "您确定要删除 %{count} 个草稿吗?" + other: "确定要删除 %{count} 个草稿吗?" new_topic: "新话题草稿" new_private_message: "新个人消息草稿" edit_topic: "编辑话题草稿" @@ -569,6 +610,11 @@ zh_CN: view_all: "查看所有草稿" other_drafts: other: "+其他 %{count} 个草稿" + embed_mode: + storage_access_prompt: "已有 %{site_name} 帐户?允许访问您的会话,以您的身份发表评论。" + allow_access: "允许访问" + continue_as_guest: "以访客身份继续" + be_first_to_reply: "成为第一个回复的人!" topic_count_all: other: "查看 %{count} 个新话题" topic_count_categories: @@ -629,17 +675,17 @@ zh_CN: filtered_flagged_by: "举报者" unknown: title: - other: "您有来自已禁用插件的待审核内容:" + other: "您有来自已禁用插件的待审核队列条目:" instruction: "除非您启用相关插件,否则它们无法正确显示。请启用插件并刷新页面。或者,您可以忽略它们。了解详情…" reviewable_unknown_source: "%{reviewableType}(未知插件)" reviewable_known_source: "%{reviewableType}(来自 '%{pluginName}' 插件)" ignore_all: "全部忽略" enable_plugins: "启用插件" - delete_confirm: "确定要删除所有由禁用插件创建的审核吗?" - ignore_success: "所有由禁用插件创建的审核已被删除。" + delete_confirm: "确定要删除所有由禁用插件创建的审核队列条目吗?" + ignore_success: "所有由禁用插件创建的审核队列条目均已被删除。" explain: why: "解释为什么此条目最终进入队列" - title: "可审核话题的评分" + title: "审核队列条目评分" formula: "公式" subtotal: "小计" total: "总计" @@ -653,10 +699,10 @@ zh_CN: title: "所提交的举报一直都获得同意的用户将获得加分。" trust_level_bonus: name: "信任级别" - title: "由较高信任级别的用户创建的可审核条目具有较高的分数。" + title: "由较高信任级别的用户创建的举报具有较高的分数。" type_bonus: name: "奖励加分" - title: "某些可审核类型可以由管理人员分配加分,以使其具有更高的优先级。" + title: "某些举报类型可由管理人员指定加分,以使其具有更高的优先级。" revise_and_reject_post: title: "修订" reason: "原因" @@ -665,7 +711,7 @@ zh_CN: custom_reason: "清楚地描述原因" other_reason: "其他…" optional: "可选" - stale_help: "此可审核条目已被 %{username} 解决。" + stale_help: "此条目已被 %{username} 解决。" claim_help: optional: "您可以认领此条目以避免被他人审核。" required: "您必须先认领条目才能进行审核。" @@ -673,9 +719,9 @@ zh_CN: claimed_by_other: "此条目仅可以由 %{username} 审核。" automatically_claimed_by: "此条目目前正在由 %{username}审核。" claim: - title: "认领该话题" + title: "认领此话题" unclaim: - help: "移除认领" + help: "移除此认领" awaiting_approval: "需要审批" delete: "删除" settings: @@ -696,7 +742,7 @@ zh_CN: filtered_topic: "您已筛选到一个话题下的可审核内容。" filtered_user: "被举报用户" filtered_reviewed_by: "审核人" - filtered_claimed_by: "举报被认领" + filtered_claimed_by: "举报申领人" show_all_topics: "显示所有话题" deleted_post: "(帖子已删除)" deleted_user: "(用户已删除)" @@ -767,7 +813,7 @@ zh_CN: low: "低" medium: "中" high: "高" - active_filters: "启用筛选器:" + active_filters: "有效筛选器:" clear_filter: "移除 %{filter}" conversation: view_full: "查看完整对话" @@ -811,10 +857,10 @@ zh_CN: is_this_post: "此%{reviewable_type}是否%{reviewable_human_score_types}?" delimiter: "或者" something_else_wrong: "此%{reviewable_type}有什么问题吗?" - approve_user: "批准该用户?" - suspect_user: "这个用户是垃圾用户吗?" - approve_post: "批准该帖子?" - approve_topic: "批准该话题?" + approve_user: "批准此用户?" + suspect_user: "此用户是垃圾用户吗?" + approve_post: "是否批准此帖子?" + approve_topic: "是否批准此话题?" types: reviewable_flagged_post: title: "被举报的帖子" @@ -833,18 +879,18 @@ zh_CN: title: "帖子" noun: "帖子" reviewable_ai_chat_message: - title: "被 AI 举报的聊天消息" + title: "AI 标记的聊天消息" noun: "聊天消息" reviewable_ai_post: - title: "被 AI 举报的帖子" + title: "AI 标记的帖子" noun: "帖子" reviewable_post_voting_comment: title: "被举报的评论" noun: "评论" flagged_as: "被标记为" post_flagged_as: "帖子被标记为" - chat_flagged_as: "对话被标记为" - queued_post_label: "队列中的帖子" + chat_flagged_as: "聊天被标记为" + queued_post_label: "已加入队列的帖子" queued_topic_label: "已加入队列的话题" user_label: "用户" assigned_to: "帖子被指定给" @@ -854,22 +900,22 @@ zh_CN: target_created: "帖子已创建" target_created_by: "帖子由 %{username} 创建 · %{relativeDate}" target_deleted: "帖子已删除" - target_deleted_by: "帖子已被 %{username} · %{relativeDate} 删除" + target_deleted_by: "帖子已被 %{username} 删除 · %{relativeDate}" flagged: "被举报" flagged_as_by: "被 %{username} 举报为%{flagReason} · %{relativeDate}" claimed: "已申领" claimed_by: "由 %{username} 申领 · %{relativeDate}" - unclaimed_by: "%{username} 已取消认领 · %{relativeDate}" + unclaimed_by: "已被 %{username} 取消认领 · %{relativeDate}" reviewed: "已审核" - approved_by: "由 %{username} · %{relativeDate} 审核" - rejected_by: "被 %{username} · %{relativeDate} 拒绝" - ignored_by: "被 %{username} · %{relativeDate} 忽略" + approved_by: "由 %{username} 批准 · %{relativeDate}" + rejected_by: "被 %{username} 拒绝 · %{relativeDate}" + ignored_by: "被 %{username} 忽略 · %{relativeDate}" view_conversation: "查看私信" note_added: "版主注释" note_added_by: "%{username} 的版主注释 · %{relativeDate}" no_events: "没有可显示的时间线事件" notes: - add_note_description: "添加一个注释以向其他版主提供背景信息。" + add_note_description: "添加注释以向其他版主提供背景信息。" add_note_button: "添加注释" placeholder: "在这里写下您的注释…" chars_remaining: "剩余 %{count} 个字符" @@ -882,7 +928,7 @@ zh_CN: review_user: "用户" need_help: "需要帮助?" copy_link: "复制链接" - copy_permalink_title: "将此可评论项目的链接复制到剪贴板" + copy_permalink_title: "将此可评论条目的链接复制到剪贴板" copy_link_feedback: "链接已复制" view_source: "查看来源" insights: @@ -890,26 +936,26 @@ zh_CN: flag_volume: "举报量" flagged_by_users: other: "由 %{count} 位唯一身份用户举报" - similar_posts: "过去的违规行为" + similar_posts: "过去的违规" flagged_in_timeframe: other: "%{count} 个已确认举报" user_activity: "用户信息" activities: - joined_on: "加入:%{joinDate}" + joined_on: "加入日期:%{joinDate}" trust_level: "信任级别:%{trustLevelName}" posts: other: "%{count} 个帖子" moderation_history: - label: "管理操作记录" + label: "审核历史记录" silenced: "被禁言:%{count} 次" suspended: "被封禁:%{count} 次" rejected_posts: "帖子被拒绝:%{count} 次" solution_marked: "被标记为解决方案" topic_has_solution: "此话题有解决方案" visibility: "公开范围" - topic_unlisted: "该话题未公开,只能通过直接链接访问。" + topic_unlisted: "此话题未公开,只能通过直接链接访问。" help: - community_moderation_guide: "本社区的版主指南" + community_moderation_guide: "本社区的审核指南" moderation_guide: "Discourse 审核指南" flag_priorities: "管理用户声誉和举报优先级" spam_detection: "垃圾信息检测" @@ -1024,6 +1070,7 @@ zh_CN: add_members: title: "将用户添加到 %{group_name}" description: "输入您要邀请加入群组中的用户列表或粘贴到逗号分隔的列表中:" + description_usernames_only: "请输入要添加到群组的用户名列表,或粘贴以逗号分隔的列表:" usernames_placeholder: "用户名" usernames_or_emails_placeholder: "用户名或电子邮件" notify_users: "通知用户" @@ -1051,7 +1098,7 @@ zh_CN: title: 互动 posting: 发帖 notification: 通知 - self_lockout: "如果改变此群组的公开范围,您将丢失自己的访问权限,确定要继续吗?" + self_lockout: "您即将更改群组公开范围,这将移除您自己的访问权限。确定要继续吗?" email: title: "电子邮件" enable_smtp: "启用 SMTP" @@ -1064,7 +1111,7 @@ zh_CN: smtp_title: "SMTP" smtp_instructions: "当您为群组启用 SMTP 时,从群组收件箱发送的所有出站电子邮件都将通过此处指定的 SMTP 设置,而不是为您的论坛发送的其他电子邮件配置的邮件服务器发送。" additional_settings: "附加设置" - smtp_disable_confirm: "如果禁用 SMTP,所有 SMTP 设置都将被重置,相关功能也将失效。您确定要继续吗?" + smtp_disable_confirm: "如果您禁用 SMTP,所有 SMTP 设置都将被重置,相关功能也将被禁用。确定要继续吗?" prefill: title: "使用设置预填充:" gmail: "Gmail" @@ -1182,8 +1229,8 @@ zh_CN: make_owner_description: "将 %{username} 设为此群组的所有者" remove_owner: "移除所有者身份" remove_owner_description: "将 %{username} 从此群组的所有者中移除" - remove_member_self_lockout: "将自己从该群组中移除将撤消您的管理权限。您确定要继续吗?" - remove_owner_self_lockout: "取消自己的所有者身份将撤消您管理该群组的权限。您确定要继续吗?" + remove_member_self_lockout: "将您自己从此群组中移除将撤销您的管理权限。确定要继续吗?" + remove_owner_self_lockout: "移除您自己的所有者身份将撤销您管理此群组的权限。确定要继续吗?" make_primary: "设为主要群组" make_primary_description: "将此群组设为 %{username} 的主要群组" remove_primary: "移除主要群组状态" @@ -1311,7 +1358,7 @@ zh_CN: phone: 电话 other_accounts: "使用此 IP 地址的其他帐户:" other_accounts_with_ip: - other: "%{count} 个使用此 IP 地址的其他账户" + other: "%{count} 个使用此 IP 地址的其他帐户" delete_other_accounts: other: "删除 %{count} 个" username: "用户名" @@ -1348,14 +1395,14 @@ zh_CN: upcoming_changes: title: "即将推出的更改" for_user: - upcoming_change: "即将推出的变化" + upcoming_change: "即将推出的更改" enabled: "已启用?" why: "为什么?" why_reasons: not_in_specific_groups: "该用户不属于此次更改所需的特定群组" in_specific_groups: "用户属于此更改所需的特定群组" enabled_for_everyone: "此更改已对所有成员启用" - enabled_for_no_one: "此更改对所有成员均未启用" + enabled_for_no_one: "此更改已对所有成员禁用" user_notifications: filters: filter_by: "筛选依据" @@ -1665,6 +1712,23 @@ zh_CN: apps: "应用" navigation_menu: "导航菜单" upcoming_changes: "即将推出的更改" + calendar_subscriptions: "日历" + calendar_subscriptions: + description: "生成订阅链接,以便与您常用的日历应用(例如 Google 日历、Apple 日历、Outlook 等)同步。这些链接是您帐户中日历事件(例如书签提醒、日历事件等)的私有链接。您可以随时撤销或续订生成的订阅链接。" + generate: "生成订阅 URL" + regenerate: "重新生成 URL" + regenerate_confirm: "这将使您现有的日历订阅 URL 失效。任何使用旧 URL 的日历应用都将无法收到更新。是否继续?" + revoke: "撤销订阅" + revoke_confirm: "这将撤销您现有的日历订阅 URL。任何使用这些 URL 的日历应用都将停止接收更新。是否继续?" + urls_warning: "订阅 URL 已准备就绪!点击下方按钮即可将其 URL 到您的日历应用。注意:这些 URL 仅显示一次。" + bookmarks: "书签提醒" + bookmarks_description: "您的书签及提醒日期" + copy: "复制 URL" + copied: "已复制!" + add_to_google: "Google 日历" + add_to_outlook: "微软 Outlook" + add_to_apple: "Apple 日历" + active_subscription: "您有一个活跃的日历订阅。" change_password: success: "(电子邮件已发送)" in_progress: "(正在发送电子邮件)" @@ -1677,7 +1741,7 @@ zh_CN: verify_identity: "要继续,请验证您的身份。" title: "密码重置" remove: "移除密码" - remove_disabled: "在删除密码之前,该账户至少需要一种其他登录方法(例如密钥或关联的外部账户)。" + remove_disabled: "在移除密码之前,该帐户至少需要一种其他登录方法(例如,通行密钥或关联的外部帐户)。" remove_detail: "除非您重置密码,否则您将无法再使用密码访问您的帐户。" second_factor_backup: title: "双重备份代码" @@ -1941,7 +2005,7 @@ zh_CN: first_time_and_daily: "每日帖子第一次被赞" first_time: "帖子第一次被赞" never: "从不" - notify_on_linked_posts: "当有人分享我的帖子链接时发出通知" + notify_on_linked_posts: "当有人分享我的帖子链接时通知我" email_previous_replies: title: "在电子邮件底部包含以前的回复" unless_emailed: "除非之前发送过" @@ -2001,7 +2065,7 @@ zh_CN: redeemed_tab_with_count: "已确认 (%{count})" invited_via: "邀请" invited_via_link: "链接 %{key}(已确认 %{count}/%{max})" - generating_link: "正在生成链接..." + generating_link: "正在生成链接…" groups: "群组" topic: "话题" sent: "创建/上次发送日期" @@ -2254,12 +2318,13 @@ zh_CN: label: "选择选项" d_otp: screen_reader: - other: 输入 %{count} 个数值 + other: 输入 %{count} 个数字 form_kit: reset: 重置 optional: 可选 + required: 必选 errors_summary_title: - other: "修复这些错误以继续" + other: "修复错误以继续" dirty_form: "您没有提交更改!确定要离开吗?" errors: starts_with: "必须以 %{prefix} 开头" @@ -2459,7 +2524,7 @@ zh_CN: admin_not_allowed_from_ip_address: "您无法从该 IP 地址以管理员身份登录。" resend_activation_email: "点击此处重新发送激活电子邮件。" omniauth_disallow_totp: "您的帐户已启用双重身份验证。请使用您的密码登录。" - works_with: "适用于" + works_with: "支持" activate_account: "激活帐户" resend_title: "重新发送激活电子邮件" change_email: "更改电子邮件地址" @@ -2530,7 +2595,7 @@ zh_CN: google_classic: "Google Classic(已弃用,改为 Noto Emoji)" facebook_messenger: "Facebook Messenger(已弃用,改为 Standard)" openmoji: OpenMoji - standard: Standard + standard: 标准 fluentui: Fluent Emoji noto: Noto Emoji twemoji: Twemoji @@ -2576,7 +2641,7 @@ zh_CN: topic_count: other: "此类别下有 %{count} 个话题" read_only: "只读" - read_only_description: "此类别是只读的,您无法为把话题发布到此类别" + read_only_description: "此类别为只读类别,因此您无法将其作为此话题的类别" timezone_input: ambiguous_ist: "IST 不明确,请选择特定时区(例如:亚洲/加尔各答)" select_kit: @@ -2598,6 +2663,8 @@ zh_CN: filter_for_more: 筛选更多… categories_admin_dropdown: title: "管理类别" + tag_category_admin_dropdown: + edit_category: "编辑类别" bulk_select_topics_dropdown: title: "批量操作" bulk_select_bookmarks_dropdown: @@ -2628,6 +2695,8 @@ zh_CN: medium_dark_tone: 中等深肤色 dark_tone: 深肤色 default: 自定义表情符号 + filter_input: + clear: "清除筛选器" shared_drafts: title: "共享草稿" notice: "此话题只对可以发布共享草稿的用户可见。" @@ -2661,9 +2730,9 @@ zh_CN: save: "保存翻译" original_content: "原帖" translation_preview: "预览翻译" - original: "翻译前" + original: "原文" translation: "翻译" - no_translation_yet: "输入翻译后即可预览…" + no_translation_yet: "开始输入以查看翻译预览…" placeholder: "在此处输入帖子的翻译…" show_raw_markdown: "以原格式显示" group_mentioned_limit: @@ -2766,29 +2835,31 @@ zh_CN: upload_description: "在此处输入上传描述" olist_title: "编号列表" ulist_title: "项目符号列表" + list_title: "列表" list_item: "列表条目" toggle_direction: "切换方向" - apply_wrap_title: "应用包装" + apply_wrap_title: "应用换行" wrap_modal: - title: "编辑包装" - name_label: "包装名称" + title: "编辑换行" + name_label: "将名称换行" attributes_label: "属性" add_attribute: "添加属性" remove_attribute: "移除属性" apply: "应用" - unwrap: "卸载包装" - no_attributes: "未添加任何属性。" - wrap_text: "包装内容" + unwrap: "取消换行" + no_attributes: "尚未添加任何属性。" + wrap_text: "将内容换行" help: "Markdown 编辑帮助" collapse: "最小化编辑器面板" open: "打开编辑器面板" abandon: "关闭编辑器并舍弃草稿" + edit_reason: "添加您的编辑理由" enter_fullscreen: "进入全屏编辑器" exit_fullscreen: "退出全屏编辑器" exit_fullscreen_prompt: "按 ESC 退出全屏" show_toolbar: "显示编辑器工具栏" hide_toolbar: "隐藏编辑器工具栏" - peek_mode_toggle: "切换预览模式" + peek_mode_toggle: "切换速览模式" modal_ok: "确定" cant_send_pm: "抱歉,您无法向 %{username} 发送消息。" create_message_error: "抱歉,创建该消息时出错。请重试。" @@ -2822,7 +2893,7 @@ zh_CN: label: 切换密语 desc: 密语仅对管理人员可见 create_topic: - label: "新话题" + label: "新建话题" desc: 创建新话题 create_personal_message: label: "新建消息" @@ -2835,7 +2906,7 @@ zh_CN: desc: "回复但不更改最新回复日期" toggle_unlisted: label: 切换取消公开 - desc: "未列出的主题只能通过直接链接访问" + desc: "不公开的话题只能通过直接链接访问" reload: "重新加载" ignore: "忽略" image_alt_text: @@ -2863,7 +2934,7 @@ zh_CN: remove: "移除链接" visit: "在外部标签页中打开链接" link_copied: "链接已复制!" - unsupported_token: "富文本编辑器不支持此帖子中使用的所有功能;将您切换到 Markdown 编辑器。" + unsupported_token: "富文本编辑器不支持此帖子中使用的所有功能;会将您切换到 Markdown 编辑器。" notifications: tooltip: regular: @@ -2927,9 +2998,13 @@ zh_CN: available: title: "即将推出的更改" description: "'%{changeName}' 可供预览" + description_two: "'%{changeName1}' 和 '%{changeName2}' 可供预览" + description_many: "'%{changeName}' 和 %{otherChangeCount} ' 更多更改可供预览" automatically_promoted: title: "即将推出的更改" description: "'%{changeName}' 已自动启用" + description_two: "'%{changeName1}' 和 '%{changeName2}' 已自动启用" + description_many: "'%{changeName}' 和 %{otherChangeCount} 的更多更改已自动启用" dismiss_confirmation: body: default: @@ -2982,10 +3057,10 @@ zh_CN: membership_request_consolidated: "新成员资格请求" reaction: "新回应" votes_released: "投票额度已释放" - new_features: "已发布新的 Discourse 功能!" + new_features: "新的 Discourse 功能已发布" admin_problems: "网站信息中心有新建议" - upcoming_change_available: "即将到来的新变化 '%{changeName}' 已可用" - upcoming_change_automatically_promoted: "即将到来的变化 '%{changeName}' 已自动启用" + upcoming_change_available: "即将推出的更改已发布" + upcoming_change_automatically_promoted: "即将推出的更改已自动启用" upload_selector: change: "更改" delete: "删除" @@ -3075,7 +3150,7 @@ zh_CN: aria_label: 使用标签筛选 filters: label: 仅回访话题/帖子… - all: 导入消息 + all: 包含消息 title: 仅在标题中匹配 likes: 我赞过 posted: 我发过帖 @@ -3121,8 +3196,6 @@ zh_CN: max_views: placeholder: 最大值 aria_label: 按最大浏览量筛选 - additional_options: - label: "按帖子数量和话题浏览量筛选" hamburger_menu: "导航菜单" new_item: "新" go_back: "返回" @@ -3169,7 +3242,7 @@ zh_CN: deleted_post: "(已删除的帖子)" post_number_with_topic_title: "帖子 #%{post_number} - %{title}" new_post_in_topic: "%{title} 中的新帖子" - new_post_in_deleted_topic: "在已删除的主题中发布新帖" + new_post_in_deleted_topic: "在已删除的话题中发布新帖" user_requires_approval: "%{username} 需要审批" default_item: "可审核条目 #%{reviewable_id}" topics: @@ -3214,31 +3287,45 @@ zh_CN: other: "忽略新话题(%{count} 个)…" toggle: "切换话题批量选择" actions: "批量操作" - change_category: "设置类别…" + change_category: "更新类别" close_topics: "关闭话题" archive_topics: "归档话题" move_messages_to_inbox: "移至收件箱" archive_messages: "移至归档" - notification_level: "通知…" + notification_level: "更新通知" change_notification_level: "更改通知级别" choose_new_category: "为话题选择新类别:" - selected: - other: "您已选择 %{count} 个话题。" selected_sole_category: other: "您已从以下类别中选择 %{count} 个话题。" selected_count: other: "已选择 %{count} 个" change_tags: "替换标签" - append_tags: "附加标签" + append_tags: "添加标签" choose_new_tags: "为这些话题选择新标签:" - choose_append_tags: "为这些话题选择要附加的新标签:" + choose_append_tags: "添加标签" changed_tags: "这些话题的标签已更改。" - remove_tags: "移除所有标签" + remove_tags: "移除标签" confirm_remove_tags: other: "所有标签将从 %{count} 个话题中移除。确定吗?" + confirm_update_topics: + other: "更新 %{count} 个话题" + confirm_close_topics: + other: "关闭 %{count} 个话题" + confirm_archive_topics: + other: "存档 %{count} 个话题" + confirm_unlist_topics: + other: "关闭 %{count} 个话题" + confirm_relist_topics: + other: "重新公开 %{count} 个主题" + confirm_archive_messages: + other: "存档 %{count} 个消息" + confirm_move_to_inbox: + other: "将 %{count} 个消息移至收件箱" + confirm_delete_topics: + other: "删除 %{count} 个话题" progress: other: "进度:%{count} 个话题" - notify: "将此更新通知用户" + notify: "通知用户此变更" performing: "正在执行批量操作,请稍候…" completed: "批量操作成功完成!" completed_count: @@ -3266,50 +3353,56 @@ zh_CN: unread: "没有未读内容… 太棒了!" new_new: "目前没有新内容… 稍后再查看!" new: "目前没有新内容… 稍后再查看!" - generic: "这没什么好看的......一会再回来看看!" + generic: "这里没什么可看的… 稍后回来看看!" topic_bulk_actions: dismiss: name: "忽略" close_topics: name: "关闭" - note: "备注" + description: "关闭的话题阻止新的回复。 了解更多" + note: "为这些话题添加注释" optional: '(可选)' archive_topics: name: "归档" + description: "已存档的话题列表在搜索和最新主题列表中被隐藏。 了解更多的" archive_messages: name: "移至归档" move_messages_to_inbox: name: "移至收件箱" unlist_topics: name: "取消公开" + description: "未公开的主题不会显示在话题列表中,但仍可通过直接链接访问。 了解更多" relist_topics: name: "重新公开" remove_tags: name: "移除标签" + description: "从所选话题中移除所有标签。" append_tags: - name: "附加标签" + name: "添加标签" + description: "为选定的话题添加以下标签:" replace_tags: name: "替换标签" + description: "将所选话题的所有现有标签替换为以下内容:" delete_topics: name: "删除" + description: "永久删除所选话题。此操作无法撤销。" update_category: name: "更新类别" - description: "为所选话题选择新类别" + description: "将所有选定的话题移至以下类别:" reset_bump_dates: name: "重置顶帖日期" - description: "将话题顶帖日期重置为最后创建的帖子的日期,这会影响话题列表中的排序" + description: "您是否想更新顶帖日期为帖子最后创建的日期?这可能会影响它们在话题列表列表中的排序。" defer: name: "标记为未读" - description: "将话题标记为未读" update_notifications: name: "更新通知" - description: "将通知级别更改为“正在关注”、“正在跟踪”、“常规”或“已设为免打扰”" + description: "将所选话题的个人通知级别更新为:" topic: filter_to: other: "话题中的 %{count} 个帖子" create: "新建话题" create_long: "创建新话题" - create_group: "新话题和草稿" + create_group: "新建话题和草稿" open_draft: "打开草稿" private_message: "开始消息" archive_message: @@ -3387,7 +3480,7 @@ zh_CN: bumped_at: "最新:%{date}" browse_latest_topics: "浏览最新话题" browse_new_replies: "浏览新回复" - browse_new_topics: "显示新话题" + browse_new_topics: "浏览新话题" suggest_create_topic: 准备好开始新对话了吗? jump_reply: "跳到帖子的原始位置" jump_reply_aria: "跳到 @%{username} 的帖子的原始位置" @@ -3417,7 +3510,7 @@ zh_CN: 24_hours: "24 小时" custom: "自定义持续时间" slow_mode_notice: - duration: "请在本话题的两次发帖之间等待 %{duration}" + duration: "请在此话题的两次发帖之间等待 %{duration}" topic_status_update: title: "话题计时器" save: "设置计时器" @@ -3448,7 +3541,7 @@ zh_CN: auto_delete: title: "自动删除话题" auto_delete_after_last_post: - title: "最后回复后自动删除主题" + title: "最后回复后自动删除话题" auto_bump: title: "自动顶帖话题" reminder: @@ -3460,7 +3553,7 @@ zh_CN: auto_close: "此话题将在 %{timeLeft}后自动关闭。" auto_publish_to_category: "此话题将在 %{timeLeft}后发布到#%{categoryName}。" auto_close_after_last_post: "此话题将在最后一个回复的%{duration}后关闭。" - auto_delete_after_last_post: "本主题将在最后一次回复后删除 %{duration}。" + auto_delete_after_last_post: "此话题将在最后回复后 %{duration}删除。" auto_delete: "此话题将在 %{timeLeft}后自动删除。" auto_bump: "此话题将在 %{timeLeft}后被自动顶帖。" auto_reminder: "您将在 %{timeLeft}后收到此话题的提醒。" @@ -3468,6 +3561,8 @@ zh_CN: auto_close_title: "自动关闭设置" auto_close_immediate: other: "该话题中的最后一个帖子已经存在 %{count} 小时,因此该话题将被立即关闭。" + auto_delete_immediate: + other: "该话题中的最后一篇帖子已经存在 %{count} 小时,因此该话题将被立即删除。" timeline: back: "返回" back_description: "返回上一个未读帖子" @@ -3555,7 +3650,7 @@ zh_CN: title: "回复" help: "开始撰写此话题的回复" footer_buttons: - region_label: "话题行动" + region_label: "话题操作" share: title: "分享话题" extended_title: "分享链接" @@ -3725,10 +3820,10 @@ zh_CN: deleted_by_author_simple: "(话题已被作者删除)" localizations: title_edit_warning: - message: "这是一个翻译后的主题标题。

您想编辑 原始 类别、标签和标题 %{language} ,还是编辑此特定 翻译?" + message: "这是一个翻译的话题标题。

您想编辑原始%{language}类别、标签和标题,还是编辑此特定翻译?" action_original: "编辑原文" - action_translation: "编辑翻译后的话题标题" - editing_translation: "编辑 %{language} 翻译" + action_translation: "编辑翻译的话题标题" + editing_translation: "编辑%{language}翻译" post_list: title: "最新帖子" empty: "没有帖子" @@ -3740,7 +3835,7 @@ zh_CN: clear_all: "全部清除" actions: "批量操作" post: - accessible_heading: "由 %{username} 发布于 %{date}" + accessible_heading: "由 %{username} 于 %{date} 发布" heading_anchor: "标题链接" confirm_delete: "确定要删除此帖子吗?" quote_reply: "引用" @@ -3765,12 +3860,12 @@ zh_CN: deleted_by_author_simple: "(帖子已被作者删除)" collapse: "收起" load_more_replies: "加载更多回复" - load_more_posts_above: "加载上方更多的帖子" - load_more_posts_below: "加载下方更多的帖子" + load_more_posts_above: "加载上方更多帖子" + load_more_posts_below: "加载下方更多帖子" sr_collapse_replies: "收起嵌入式回复" sr_load_more_replies: "加载更多嵌入式回复" - loading_more_posts_above: "正在加载上方更多的帖子……" - loading_more_posts_below: "正在加载下方更多的帖子……" + loading_more_posts_above: "正在加载上方更多帖子…" + loading_more_posts_below: "正在加载下方更多帖子…" loading_complete: "加载完成" sr_date: "发布日期" sr_expand_replies: @@ -3816,7 +3911,8 @@ zh_CN: edit: "编辑" delete: "删除" add: "添加新翻译" - manage: "管理翻译(现有 %{count} 种翻译)" + manage: + other: "管理翻译(现有 %{count} 种翻译)" view: other: "查看 %{count} 种已翻译的语言区域" modal: @@ -3827,7 +3923,7 @@ zh_CN: title: "帖子语言" none: "无" edit_warning: - message: "这是一篇翻译的帖子。

您想编辑 %{language} 原帖还是编辑此特定翻译?" + message: "这是一篇翻译的帖子。

您想编辑%{language}原帖,还是编辑此特定翻译?" action_original: "编辑原帖" action_translation: "编辑此翻译" errors: @@ -3847,7 +3943,7 @@ zh_CN: attachment_upload_not_allowed_for_new_user: "抱歉,新用户无法上传附件。" attachment_download_requires_login: "抱歉,您需要登录才能下载附件。" cancel_composer: - confirm: "你想放弃你的帖子吗?" + confirm: "是否要放弃您的帖子?" discard: "舍弃" via_email: "此帖子通过电子邮件送达" via_auto_generated_email: "此帖子通过自动生成的电子邮件送达" @@ -3917,7 +4013,7 @@ zh_CN: delete_post_notice: "删除官方通知" remove_timer: "移除计时器" edit_timer: "编辑计时器" - remove_yourself_from_pm: "您确定要从这条消息中删除自己吗?您将无法再看到或回复它。" + remove_yourself_from_pm: "确定要从此消息中移除自己吗?您将无法再看到或回复它。" actions: people: like: @@ -3943,6 +4039,7 @@ zh_CN: confirm: other: "确定要合并这 %{count} 个帖子吗?" revisions: + diff_too_complex: "差异过于复杂,无法显示。请尝试查看各个较小的修改。" locale: no_locale_set: "未设置语言" locale_removed: "语言已移除" @@ -4018,6 +4115,7 @@ zh_CN: instructions: "分享此帖子的链接:" original_language: "此帖子最初使用%{language}编写" original_language_and_outdated: "此帖子最初使用%{language}编写。译文可能已过时" + ai_translation_disclaimer: "AI 生成的翻译可能不准确。" category: none: "(无类别)" all: "所有类别" @@ -4032,9 +4130,13 @@ zh_CN: advanced: "高级" show_advanced: "高级设置" topic_template: "模板" + topic_title_placeholder: "类别话题标题占位符" + topic_title_placeholder_placeholder: "[可选] 此分类的自定义话题标题占位符" tags: "标签" localizations: "本地化" localization: + language: "类别语言" + language_description: "该类别名称和描述的主要语言。" locale: "语言区域" name: "名称" description: "描述" @@ -4055,21 +4157,34 @@ zh_CN: delete: "删除" add: "添加所需标签组" placeholder: "选择标签群组…" + min_count: "标签数" + tag_group: "标签组" topic_featured_link_allowed: "在此类别中允许精选链接" delete: "删除类别" create: "新建类别" + create_with_type: "新 %{typeName} 类别" create_long: "创建新类别" + settings_apply_to_all_of_type_warning: "以下更改将适用于此类型的所有类别" + type_settings_schema: + category_settings: "类别设置" + category_custom_fields: "类别设置" + site_settings: "网站设置" + choose_type: + title: "选择类别类型" + requires_plugin: "需要插件" + create_category: "创建类别" save: "保存类别" + unsaved_changes: "您有未保存的更改" slug: "类别缩略名" parent: "父类别" slug_placeholder: "(可选)用于 URL 以“-”分隔的字词" creation_error: 创建类别时出错。 save_error: 保存类别时出错。 errors: - self_lockout: "如果改变此类别权限,您将丢失自己的访问权限,确定要继续吗?" + self_lockout: "您即将更改类别权限,这将移除您自己的访问权限。确定要继续吗?" validations: emoji_required: "选择一个表情符号。" - icon_required: "选择一个图标." + icon_required: "选择一个图标。" name: "类别名称" untitled: "无标题类别" description: "描述" @@ -4081,12 +4196,12 @@ zh_CN: style: "样式" icon: "图标" emoji: "表情符号" - select_emoji: "选择 emoji" + select_emoji: "选择表情符号" background_color: "颜色" foreground_color: "文本颜色" color_validations: cant_be_empty: "不能为空" - incorrect_length: "必须匹配格式#RRGGBB 或#RGB" + incorrect_length: "必须匹配格式 #RRGGBB 或 #RGB" non_hexdecimal: "必须仅包含十六进制字符(0-9、AF)" styles: type: "样式" @@ -4106,6 +4221,9 @@ zh_CN: list: "列出类别" no_description: "请为此类别添加描述。" change_in_category_topic: "编辑描述" + description_updated: "描述已更新" + description_expand: "展开" + description_collapse: "收起" already_used: "此颜色已被其他类别使用" color_palette: "调色板" security: "安全性" @@ -4116,15 +4234,15 @@ zh_CN: reply: "回复" create: "创建" no_groups_selected: "没有群组被授予访问权限;此类别仅对管理人员可见。" - everyone_full_access: '此类别是公开的,任何人都可以查看、回复和创建帖子。要限制权限,请移除授予 "%{everyone_group}" 组的一个或多个权限。' - everyone_reply_access: '此分类为公开分类,所有人都可以查看和回复主题。如需限制权限,请移除 "%{everyone_group}" 组。' - everyone_see_access: '此分类为公开分类,所有人都可以查看帖子。如需限制权限,请移除 "%{everyone_group}" 分组。' - specific_groups_have_access: "此类别是私密的,只有选定的组才能看见、回复和创建帖子。" - all_parent_groups_used: "父类别下的所有分组已添加。要添加更多分组,请先将其添加到父类别。" + everyone_full_access: '此类别为公开类别,任何人都可以查看、回复和创建帖子。要限制权限,请移除授予“%{everyone_group}”群组的一个或多个权限。' + everyone_reply_access: '此类别为公开类别,所有人都可以查看和回复话题。要限制权限,请移除“%{everyone_group}”群组。' + everyone_see_access: '此类别为公开类别,所有人都可以查看帖子。要限制权限,请移除“%{everyone_group}”群组。' + specific_groups_have_access: "此类别为不公开类别,只有所选群组可以查看、回复和创建帖子。" + all_parent_groups_used: "父类别下的所有群组均已添加。要添加更多群组,请先将其添加到父类别。" toggle_reply: "切换回复权限" toggle_full: "切换创建权限" - inherited: '此权限继承自 "%{everyone_group}"' - special_warning: "这是一个预先设置好的分类,安全设置无法编辑。如果您不想使用此分类,请将其删除,而不是重新用于其他用途。" + inherited: '此权限继承自“%{everyone_group}”' + special_warning: "这是一个预先设置的类别,安全设置无法编辑。如果您不想使用此类别,请将其删除,而不是重新用于其他用途。" uncategorized_security_warning: "此类别比较特殊。它旨在作为没有类别的话题的存放区域;不能有安全性设置。" uncategorized_general_warning: '此类别比较特殊。它用作未选择类别的新话题的默认类别。如果您想要避免此行为并强制选择类别,请在此处禁用该设置。如果您想要更改其名称或描述,请转到自定义/文本内容。' pending_permission_change_alert: "您还没有将 %{group} 添加到此类别;点击此按钮添加它们。" @@ -4151,15 +4269,19 @@ zh_CN: review_group_name: "群组名称" require_topic_approval: "所有新话题都需要版主审批" require_reply_approval: "所有新回复都需要版主审批" + posting_review_modes: + no_one: "没有人" + everyone: "所有人" + posting_review_groups_placeholder: "选择组…" this_year: "今年" position: "类别页面上的位置:" default_position: "默认位置" position_disabled: "类别将按活动顺序显示。要控制列表中类别的顺序,请启用固定类别位置设置。" minimum_required_tags: "话题中所需的最少标签数:" default_slow_mode: '为此类别中的新话题启用“慢速模式”。' - subcategory_of: "是……的子类别" + subcategory_of: "所属类别…" none_subcategory_text: "无" - subcategory_permissions_warning: "私有类别的子类别不能公开。" + subcategory_permissions_warning: "不公开类别的子类别不能公开。" visibility: title: "公开范围" public: "公开" @@ -4167,9 +4289,9 @@ zh_CN: group_restricted: "不公开" who_can_see: "谁可以查看此类别" who_can_post: "谁可以在此类别中发帖" - which_groups_can_access: "哪些群组可以查看和发布此类别的内容" - more_options_hint: "更多权限可在 高级设置中找到。" - inherited_from_parent: "权限继承自父类别。要进行细化,请访问 高级设置。" + which_groups_can_access: "哪些群组可以查看此类别以及在此类别下发帖" + more_options_hint: "更多权限可在高级设置中找到。" + inherited_from_parent: "权限继承自父类别。要进行细化,请访问高级设置。" num_auto_bump_daily: "每天自动顶贴的开放话题的数量:" auto_bump_cooldown_days: "再次顶帖同一话题之前的最短天数。" navigate_to_first_post_after_read: "阅读话题后导航到第一个帖子" @@ -4475,7 +4597,7 @@ zh_CN: counter: "%curr%/%total%" close: "关闭 (Esc)" zoom: "缩放(Z 键)" - error: "图像无法加载" + error: "图片无法加载" content_load_error: '内容无法加载。' image_load_error: '图片无法加载。' cannot_render_video: 无法呈现此视频,因为您的浏览器不支持编解码器。 @@ -4517,7 +4639,7 @@ zh_CN: go_to_unread_post: "%{shortcut} 转到第一个未读帖子" application: title: "应用程序" - create: "%{shortcut} 创建新话题或私信" + create: "%{shortcut} 创建新话题或个人消息" notifications: "%{shortcut} 打开通知" hamburger_menu: "%{shortcut} 打开导航菜单" user_profile_menu: "%{shortcut} 打开用户菜单" @@ -4639,7 +4761,7 @@ zh_CN: add_to_calendar: "添加到日历" google: "Google 日历" ics: "ICS" - default_title: "预定活动" + default_title: "定时活动" tagging: all_tags: "所有标签" other_tags: "其他标签" @@ -4658,11 +4780,16 @@ zh_CN: category_restricted: "此标签仅限于您无权访问的类别。" synonyms: "同义词" synonyms_description: "使用以下标签时,它们将被替换为 %{base_tag_name}。" + synonyms_inline: "这些同义词将被替换为 %{base_tag_name}:" save: "保存标签的名称和描述" tag_groups_info: other: "此标签属于以下组:%{tag_groups}。" + tag_groups_info_prefix: + other: "此标签属于群组: " category_restrictions: other: "它只能用于以下类别:" + restricted_to: "限于" + no_synonyms: "此标签没有同义词。" edit_synonyms: "编辑同义词" add_synonyms_label: "添加同义词:" add_synonyms: "添加" @@ -4679,7 +4806,34 @@ zh_CN: other: "其 %{count} 个同义词也将被删除。" edit_tag: "编辑标签名称和描述" edit: "编辑此标签" - description: "描述(最多 1000 个字符)" + description: "描述" + settings: + title: "设置" + edit_title: "编辑标签:%{name}" + edit_tag_prefix: "编辑标签:" + select_tag: "选择要编辑的标签" + general: "常规" + localizations: "本地化" + back: "返回" + name: "名称" + slug: "缩略名" + name_placeholder: "标签名称" + slug_placeholder: "标签缩略名(可选,根据名称自动生成)" + saved: "标签设置已保存" + no_synonyms: "没有为此缩略名定义同义词。" + add_synonym_placeholder: "搜索可添加为同义词的标签…" + synonyms_subtitle: "使用以下标签时,它们将被替换为 %{name}。" + save: "保存标签" + delete: "删除标签" + synonyms_hint: "使用上述标签时,它们将被替换为 %{baseTagName}。" + add_synonyms_confirm: "当前使用 %{synonymNames} 的地方都将更改为使用 %{tagName}。确定要进行此更改吗?" + localization: + hint: "添加本地化,为不同语言的用户显示不同的标签名称。" + locale: "语言区域" + name: "名称" + description: "描述" + add: "添加本地化" + remove: "移除本地化" sort_by: "排序依据:" sort_by_count: "计数" sort_by_name: "名称" @@ -4727,18 +4881,18 @@ zh_CN: description: "您不会收到有关带有此标签的新话题的任何通知,它们也不会出现在您的未读标签页上。" groups: back_btn: "返回到所有标签" - title: "标签组" + title: "标签群组" about_heading: "选择一个标签组或创建一个新的标签组" about_heading_empty: "创建一个新的标签组以开始" about_description: "标签组可帮助您在一个地方管理多个标签的权限。" - new: "新标签组" - new_title: "创建标签组" - edit_title: "编辑标签组" + new: "新建标签群组" + new_title: "创建标签群组" + edit_title: "编辑标签群组" tags_label: "此组中的标签" parent_tag_label: "上级标签" parent_tag_description: "只有存在上级标签时,才能使用来自此组的标签。" one_per_topic_label: "此组中每个话题限制一个标签" - new_name: "新标签组" + new_name: "新建标签群组" name_placeholder: "名称" save: "保存" delete: "删除" @@ -4848,7 +5002,7 @@ zh_CN: tags_form_modal: title: "编辑标签导航" filter_placeholder: "筛选标签" - no_tags: "没有匹配当前过滤器的标签。" + no_tags: "没有与当前筛选条件匹配的标签。" subtitle: text: "我们将自动显示此网站的热门标签" edit_navigation_modal_form: @@ -4926,7 +5080,7 @@ zh_CN: header_link_text: "类别" header_action_title: "编辑边栏类别" header_action_new: "新建类别" - header_action_edit_sidebar: "编辑侧边栏类别" + header_action_edit_sidebar: "编辑边栏类别" header_action_edit_header_dropdown: "编辑导航类别" configure_defaults: "配置默认值" community: @@ -5177,11 +5331,11 @@ zh_CN: translations_enabled: "已启用翻译" translations_disabled: "已禁用翻译" language_switcher: - title: "改变站点语言" + title: "更改站点语言" admin_js: type_to_filter: "输入以筛选…" settings: "设置" - reset_filter: "重置" + reset_filter: "重置筛选器" toggle_filters: "切换下拉筛选器" admin: title: "Discourse 管理员" @@ -5195,14 +5349,20 @@ zh_CN: never: "从不" reports: title: "可用报告列表" - meta_doc: "报告是帮助您了解网站上所发生事情的有力工具。它们可以帮助您了解趋势、发现问题并根据数据做出决策。" sidebar_title: "报告" back: "返回到所有报告" + group_engagement: "参与度" + group_traffic: "流量" + group_members: "成员" + group_content: "内容与健康" + group_moderation_and_security: "审核与安全" + group_other: "其他" + legacy_warning: "这是一份旧版报告,即将停用。如果您需要帮助寻找替代报告,请联系支持团队。" config_sections: account: title: "帐户" reports: - title: "举报" + title: "报告" community: title: "社区" appearance: @@ -5220,29 +5380,31 @@ zh_CN: plugin: "插件" metadata: "元数据" enabled: "已启用" - enabled_for: "已启用……" + enabled_for: "已启用…" show_image: "显示图片" edit_groups: "编辑选择加入的群组" - groups_updated: "群组已更新" + groups_updated: "群组已更新!" save_groups: "保存群组" add_groups_to_enable: "添加群组以启用此功能" no_changes_to_save: "没有要保存的更改" select_groups: "选择群组…" opt_in_groups: "选择加入的群组" - show_related_settings: "显示相关设置..." - opt_in_groups_instructions: "“选择加入的群组”可以用于让特定用户在正式变更发布前进行测试。请注意,当变更进入稳定状态后,所有用户都会适用于变更。" - enabled_for_throttle: "您太频繁地修改该功能对哪些用户启用了,请等待几秒后重试。" + show_related_settings: "显示相关设置…" + opt_in_groups_instructions: "选择加入的群组可以用于让特定用户群组在向所有人发布更改前进行测试。请注意,当更改进入稳定状态后,这些群组将不再适用。" + enabled_for_throttle: "您修改此更改启用对象的速度过快。请稍等片刻后再试。" change_enabled_for_success: "您已为 %{enabledFor} 启用此更改" - change_disabled: "您已选择不加入此变更" - permanent_notice: "这项变更已永久生效,并将很快被移除。您不能选择退出。" - permanent_soon_notice: "这一变化将很快永久生效。您将无法再选择退出。" - permanent_no_group_selection: "不适用,永久性变更适用于所有群组。" - no_changes: "目前暂无变更计划" + change_disabled: "您已选择不加入此更改" + permanent_notice: "此更改现已永久生效,并将很快被移除。您无法再选择退出。" + permanent_soon_notice: "此更改将很快永久生效。您将无法再选择退出。" + permanent_no_group_selection: "不适用,永久更改适用于所有群组。" + no_changes: "目前暂无即将推出的更改" preview: "预览" + default_warning: "由于即将推出的更改,该设置的默认值已从 %{oldDefaultValue} 更改为 %{newDefaultValue}。" + default_warning_short: "此设置的默认值已更改,请在 即将推出的更改 页面中阅读更多相关信息。" enabled_for_options: no_one: "没有人" everyone: "所有人" - staff: "仅管理人员" + staff: "仅限 %{staffGroupName}" specific_groups: "特定群组" specific_groups_with_group_names: other: "群组 %{groupNames}" @@ -5252,6 +5414,11 @@ zh_CN: beta: "Beta" stable: "稳定" permanent: "永久" + status_descriptions: + experimental: "此功能尚处于早期开发阶段,可能会发生重大变化或被终止。可能与其他功能不完全兼容。" + alpha: "此功能正在积极开发和完善中。功能可能会有所更改,也可能尚未完全完善,但目前足够稳定,可以尝试使用。" + beta: "该项目已接近完成,可供提前体验。仍有可能进行一些细微的修改。" + stable: "这项功能已经完成并得到充分支持。不久后,它将在所有 Discourse 网站上推出。" impact_roles: admins: "管理员" moderators: "版主" @@ -5259,25 +5426,26 @@ zh_CN: all_members: "所有成员" developers: "开发者" filter: - search_placeholder: "按名称、描述或插件筛选……" - no_results: "没有符合您筛选条件的更改" + search_placeholder: "按名称、描述或插件筛选…" + no_results: "没有与您的筛选条件匹配的即将推出的更改" all: "所有" enabled_all: "所有已启用的状态" enabled: "已启用" - enabled_for_staff: "为管理人员启用" - enabled_for_specific_groups: "为特定群组启用" + enabled_for_staff: "已对 %{staffGroupName} 启用" + enabled_for_specific_groups: "已对特定群组启用" disabled: "已禁用" - impact_type_all: "影响类型" + impact_type_all: "所有影响类型" impact_type_feature: "功能" impact_type_other: "其他" + impact_type_site_setting_default: "设置默认值" status_all: "所有状态" - status_conceptual: "概念阶段" + status_conceptual: "概念性" status_experimental: "实验性" status_alpha: "Alpha" status_beta: "Beta" status_stable: "稳定" status_permanent: "永久" - impact_role_all: "所有影响的角色" + impact_role_all: "所有影响角色" impact_role_admins: "管理员" impact_role_moderators: "版主" impact_role_staff: "管理人员" @@ -5315,15 +5483,15 @@ zh_CN: keywords: "语言区域|语言|时区|unicode|ltr" upcoming_changes: title: "即将推出的更改" - header_description: "即将到来的 Discourse 更新列表,可能会影响您的站点,以及您可以选择加入的实验性功能。您可以按影响程度、更改类型和状态进行筛选。\n\n选择加入组可用于让特定用户组在更新发布给所有人之前进行测试,不过一旦更新进入稳定状态,这些组就不再相关。" + header_description: "即将推出的 Discourse 更改列表,可能会影响您的站点,以及您可以选择加入的实验性功能。您可以按影响、类型和状态进行筛选。\n\n选择加入的群组可以用于让特定用户群组在向所有人发布更改前进行测试,当更改进入永久状态后,这些群组将不再适用。" login: title: "登录与身份验证" - header_description: "配置用户登录和验证方式、机密和密钥、OAuth2 提供商等。" + header_description: "配置用户登录和验证身份的方式、机密与密钥、OAuth2 提供商等。" sub_pages: common_settings: title: "设置" authenticators: - title: "第三方登录" + title: "社交登录" discourseconnect: title: "Discourse Connect" discourse_id: @@ -5331,14 +5499,14 @@ zh_CN: discourse_id: title: "Discourse ID" stats: - total_users: "用户数量" - signups_30_days: "注册数量(30天内)" - logins_30_days: "登录数量(30天内)" + total_users: "用户总数" + signups_30_days: "注册数量(30 天)" + logins_30_days: "登录次数(30 天)" regenerate_credentials: "重新生成凭据" - regenerate_confirm: "您确定要重新生成您的 Discourse ID 凭据吗?这将生成新的客户端机密。 通常不需要重新生成凭据,但可能有助于增强安全性。" - description: "Discourse ID 是一种单点登录服务,允许用户使用一个账户登录多个 Discourse 网站。它支持常见的社交登录提供商,如 Google、Facebook、Apple 和 Github,无需额外配置。" + regenerate_confirm: "确定要重新生成您的 Discourse ID 凭据吗?这将生成新的客户端机密。通常不需要重新生成凭据,但这可能有助于增强安全性。" + description: "Discourse ID 是一种单点登录服务,允许用户使用一个帐户登录多个 Discourse 站点。无需额外配置即可支持 Google、Facebook、Apple 和 Github 等常见社交登录提供商。" learn_more: "了解详情" - regenerate_success: "凭证已成功重新生成。" + regenerate_success: "凭据已成功重新生成。" logo: title: "徽标" header_description: "配置整个站点使用的徽标和图标" @@ -5354,7 +5522,7 @@ zh_CN: help_text: "建议尺寸为 600 x 80 像素。" large_icon: title: "方形图标" - description: "徽标图片的方形版本出现在管理的顶部,也是移动主屏幕应用徽标。" + description: "方形版本的徽标图片会显示在站点顶部,也是移动应用徽标。" help_text: "建议尺寸为 512 x 512 像素。" square_icon_dark: required: "为深色模式使用不同的方形图标?" @@ -5426,30 +5594,30 @@ zh_CN: modal_no: "否,只适用于未来" welcome_banner: title: "欢迎横幅" - header_description: "配置向网站访客显示的包含搜索栏的横幅。" + header_description: "配置向站点访客显示的包含搜索栏的横幅。" saved: "欢迎横幅设置已成功保存。" form: enabled_themes: - label: "已在主题中启用……" - description: "选择显示在横幅的主题,此处仅显示已启用的主题。" + label: "已在主题中启用…" + description: "选择应显示在横幅的主题。仅显示有效主题。" select_label: "选择主题" background_image: label: "背景图片" - description: "该图像将显示在横幅文本后。" + description: "此图片将显示在横幅文本后。" text_color: label: "文本颜色" - description: "上传上方“背景图片”后,请使用此设置更改横幅文字颜色,以确保其清晰可读。如果留空或未上传背景图片,则颜色由当前主题控制。" + description: "上传上方“背景图片”后,请使用此设置更改横幅文本颜色,以确保其清晰可读。如果留空或未上传背景图片,有效主题将控制颜色。" page_visibility: - label: "页面可见性" - description: "选择横幅显示的位置" + label: "页面公开范围" + description: "选择显示横幅的位置" options: top_menu_pages: "顶部菜单页面" - homepage: "仅限主页" + homepage: "仅首页" discovery: "发现页" all_pages: "所有页面" location: - label: "地点" - description: "选择横幅在页面上显示的位置" + label: "位置" + description: "选择横幅在页面上显示的位置。" options: above_topic_content: "话题内容上方" below_site_header: "站点标题下方" @@ -5457,21 +5625,21 @@ zh_CN: title: "自定义文本" locale_label: "语言" header_new_members: - label: "新成员标题" - description: "可用变量: %{site_name}, %{preferred_display_name}" - placeholder: "欢迎, %{preferred_display_name}!" + label: "新成员的标题" + description: "可用变量:%{site_name}%{preferred_display_name}" + placeholder: "欢迎,%{preferred_display_name}!" header_logged_in: label: "已登录成员的标题" - description: "可用变量: %{site_name}, %{preferred_display_name}" + description: "可用变量:%{site_name}%{preferred_display_name}" placeholder: "欢迎回来,%{preferred_display_name}!" header_anonymous: - label: "匿名访客标题" - description: "可用变量: %{site_name}" + label: "匿名访客的标题" + description: "可用变量:%{site_name}" placeholder: "欢迎来到 %{site_name}!" subheader_logged_in: - label: "已登录成员的子标题" + label: "已登录成员的副标题" description: "显示在已登录用户标题下方的辅助文本。" - placeholder: "看看社区里有哪些新内容" + placeholder: "查看社区中的最新动态" subheader_anonymous: label: "匿名访客的副标题" description: "显示在匿名访问者标题下方的辅助文本。" @@ -5479,7 +5647,7 @@ zh_CN: search_placeholder: label: "搜索占位符" description: "欢迎横幅中搜索框的占位符文本。" - placeholder: "搜索主题……" + placeholder: "搜索话题…" navigation: title: "导航" header_description: "配置网站的导航链接与菜单项。这包括主导航菜单、首页顶部快速链接以及管理边栏的位置和行为" @@ -5537,11 +5705,11 @@ zh_CN: title: "日志" header_description: "查看和管理备份、恢复和上传内容" reports: - title: "举报" + title: "报告" header_description: "报告是帮助您了解站点上所发生事情的强大工具。它们可以帮助您了解趋势、发现问题并根据数据做出决策。" sub_pages: settings: - title: "信息中心设置" + title: "设置" badges: title: "徽章" header_description: "徽章奖励用户的活动、贡献和成就,以表彰、认可和鼓励用户在社区中的积极行为和参与。" @@ -5676,7 +5844,7 @@ zh_CN: header_description: "Discourse 能够使用创建 IFRAME 的 Javascript API 在远程网站中嵌入话题的评论" form_templates: title: "表单模板" - header_description: "表单模板允许您在主题创建流程中强制执行结构化表单和数据验证。" + header_description: "表单模板允许您在话题创建流程中强制执行结构化表单和数据验证。" theme_site_settings: setting: "设置" overridden_by: "覆盖者" @@ -5687,7 +5855,7 @@ zh_CN: help: "您当前使用的主题为 %{currentTheme}。请转到主题配置页面更改主题站点设置,或点击下表中链接的主题,编辑其设置。" filter: "按设置名称、描述或主题名称筛选主题站点设置…" filter_no_results: "没有符合您的筛选条件的主题站点设置" - site_setting_warning: '此设置由您网站的默认主题接管(%{defaultThemeName})。您可以在 主题编辑页面 进行修改。' + site_setting_warning: '此设置由您的站点的默认主题 (%{defaultThemeName}) 管理。您可以在主题编辑页面中进行修改。' search: modal_title: "在管理页面中搜索所有内容" title: "搜索" @@ -5696,17 +5864,6 @@ zh_CN: no_results: '我们找不到任何与“%{filter}”匹配的内容。' result_count: other: '“%{filter}”有 %{count} 个结果' - result_types: - page: - other: "页面" - report: - other: "报告" - setting: - other: "设置" - theme: - other: "主题" - component: - other: "组件" new_features: title: "最新变化" check_for_updates: "检查更新" @@ -5729,25 +5886,9 @@ zh_CN: new_features: title: "最新变化" subtitle: "我们一直在发布新功能和改进。本页涵盖了重点内容,但您也可以点击“了解详情”查看详细的版本说明。" - no_new_features_error: "加载最新功能列表时出现错误。您可以在Discourse Meta 社区查看以前的新功能公告。" + no_new_features_found: "Feed 中没有条目,或者您的所选筛选器没有返回结果。 您可以在 Discourse Meta 社区上看到以前的新功能公告。" + no_new_features_error: "加载 Feed 时出错。您可以在 Discourse Meta 社区上查看以前的新功能公告。" learn_more: "了解详情…" - experimental: "实验性" - only_experiments: "只显示实验性功能" - experiment_enabled: "您已启用实验性功能。" - experiment_disabled: "您已禁用实验性功能。" - feature_enabled: "您已启用该功能。" - feature_disabled: "您已禁用该功能。" - toggled_too_fast: "您切换开关的频率过快。请稍等几秒钟后再试。" - experiment_tooltip: - title_disabled: "试用这个实验性功能" - title_enabled: "关闭实验性功能" - content_disabled: "试试我们正在开发的最新功能吧!它仍处于试验阶段,因此我们可能随时将其移除。您可以随时选择退出。

更改此项将为所有用户启用该功能。" - content_enabled: "更改此项将为所有用户禁用该功能。" - feature_tooltip: - title_disabled: "试用此功能" - title_enabled: "关闭功能" - content_disabled: "试试这个新功能吧!您可以随时选择退出。

更改此项将为所有用户启用该功能。" - content_enabled: "更改此项将为所有用户禁用该功能。" last_checked: "上次检查" refresh_problems: "刷新" no_problems: "找不到问题。" @@ -5806,11 +5947,12 @@ zh_CN: all: "所有" view_table: "表格" view_graph: "图表" - refresh_report: "刷新报告" + refresh_report: "刷新" daily: 每天 monthly: 每月 weekly: 每周 - value_so_far: "%{value} (目前为止)" + chart_group_period: "选择一个时间段" + value_so_far: "%{value}(目前为止)" dates: "日期 (UTC)" groups: "所有群组" disabled: "此报告已禁用" @@ -5823,7 +5965,7 @@ zh_CN: disabled: '趋势搜索报告已禁用。启用记录搜索查询以收集数据。' average_chart_label: 显示平均数,而不是总数 sort_button: "按%{column}排序" - sort_button_current: "按 %{column}, %{direction} 排序" + sort_button_current: "按%{column}排序,%{direction}" sort_ascending: "升序" sort_descending: "降序" filters: @@ -5926,6 +6068,7 @@ zh_CN: cancel: "取消" continue: "继续" copy_key: "复制" + key_copied_to_clipboard: "API 密钥已复制到剪贴板" back: "返回到 API 密钥" revoke: "撤销" undo_revoke: "取消撤销" @@ -5993,7 +6136,7 @@ zh_CN: recover: 恢复一个话题。 read_lists: 阅读诸如热门、新、最新等话题列表。也支持 RSS。 status: "更新话题的状态。状态:已关闭、归档、可见已置顶。启用:true、false。在此处和请求负载中指定 category_id,以仅允许该类别中话题的状态更改。" - change_owner: 更改主题中帖子的所有权。 + change_owner: 更改话题中帖子的所有权。 posts: edit: 编辑任意帖子或特定帖子。 delete: 删除帖子。 @@ -6130,7 +6273,7 @@ zh_CN: user_destroyed: "用户被删除" user_suspended: "用户被封禁" user_unsuspended: "用户被解除封禁" - user_anonymized: "用户已被匿名化" + user_anonymized: "用户已进行匿名化处理" reviewable_event: group_name: "可审核的事件" reviewable_created: "可审核的条目已就绪" @@ -6428,8 +6571,8 @@ zh_CN: title: "颜色选项" toggle: "可由用户选择" toggle_description: "用户可以选择调色板" - toggle_default_light_on_theme: "调色板是默认主题上的默认浅色调色板(%{themeName})" - toggle_default_dark_on_theme: "调色板是默认主题上的默认深色调色板(%{themeName})" + toggle_default_light_on_theme: "调色板是默认主题 (%{themeName}) 上的默认浅色调色板" + toggle_default_dark_on_theme: "调色板是默认主题 (%{themeName}) 上的默认深色调色板" colors: title: "颜色" save_changes: "保存更改" @@ -6520,7 +6663,7 @@ zh_CN: confirm: "确定要删除此备份吗?" restore: is_disabled: "恢复功能目前已禁用。要启用此功能,请访问网站设置。" - is_disabled_title: "恢复功能已禁用。如需启用,请在站点设置中搜索“允许恢复”。" + is_disabled_title: "恢复功能已禁用。如需启用,请在站点设置中搜索 'allow restore'。" label: "恢复" title: "恢复该备份" confirm: "确定要恢复此备份吗?" @@ -6563,8 +6706,8 @@ zh_CN: delete: "删除" delete_confirm: '确定要删除“%{theme_name}”吗?' bulk_delete: "确定吗?" - bulk_themes_delete_confirm: "这将卸载以下主题,您网站上的任何用户将无法再使用它们:" - bulk_components_delete_confirm: "这将卸载以下主题组件,您网站上的任何用户将无法再使用它们:" + bulk_themes_delete_confirm: "这将卸载以下主题,您站点上的任何用户将无法再使用它们:" + bulk_components_delete_confirm: "这将卸载以下组件,您站点上的任何用户将无法再使用它们:" color: "颜色" opacity: "不透明度" copy: "复制" @@ -6580,8 +6723,8 @@ zh_CN: body: "正文" revert: "还原变更" revert_confirm: "确定要还原您的变更吗?" - search_templates: "按模板名称筛选..." - no_templates_found: "没有符合您筛选条件的模板。" + search_templates: "按模板名称筛选…" + no_templates_found: "没有与您的筛选条件匹配的模板。" edit: "编辑" back: "返回模板" component: @@ -6646,6 +6789,7 @@ zh_CN: dark_color_scheme: "深色调色板" default_light_scheme: "浅色(默认)" color_scheme_select: "选择主题使用的颜色。" + only_theme_color_schemes: "该主题限制了可使用的调色板。" dark_color_scheme_select: "选择主题在深色模式下使用的颜色。" edit_colors: "编辑颜色" custom_sections: "自定义部分:" @@ -6704,7 +6848,7 @@ zh_CN: import_web_tip: "包含主题的仓库" direct_install_tip: "确定要从下面列出的仓库中安装 %{name} 吗?" import_web_advanced: "高级…" - import_file_tip: "包含主题的 .tar.gz、.zip 或 .dcstyle.json 文件" + import_file_tip: "包含主题的 .tar.gz 或 .zip 文件" is_private: "主题位于私有 git 仓库中" finish_install: "完成主题安装" last_attempt: "安装过程未完成,最后一次尝试:" @@ -7175,10 +7319,11 @@ zh_CN: delete_associated_accounts: "删除关联帐户" change_theme_site_setting: "更改主题站点设置" stop_impersonating: "停止模拟" - upcoming_change_toggled: "切换即将到来的更新" + upcoming_change_toggled: "已切换即将推出的更改" upcoming_change_available: "即将推出的更改已可用" - change_site_setting_groups: "更改站点设置组" - discourse_id_regenerate_credentials: "重新生成 Discourse ID 凭证" + change_site_setting_groups: "更改站点设置群组" + discourse_id_regenerate_credentials: "重新生成 Discourse ID 凭据" + configure_category_type: "配置类别类型" screened_emails: title: "已屏蔽的电子邮件地址" description: "当有人尝试创建新帐户时,将检查以下电子邮件地址并禁止注册,或执行某些其他操作。" @@ -7369,7 +7514,7 @@ zh_CN: help: "使用此工具模拟用户帐户以进行调试。完成后,您必须退出。" not_found: "无法找到该用户。" invalid: "抱歉,您不能模拟该用户。" - error: "哎呀。发生意外错误。" + error: "糟糕。发生意外错误。" users: title: "用户" description: "查看和管理用户。" @@ -7475,16 +7620,7 @@ zh_CN: penalty_post_delete: "删除帖子" penalty_post_delete_replies: "删除帖子 + 任何回复" penalty_post_delete_all: "删除用户发布的所有话题和回复" - penalty_post_delete_all_confirmation_MF: | - 这将删除 - { TOPICS, plural, - one {# 个主题} - other {# 个主题} - } 和 - { REPLIES, plural, - one {# 个回复} - other {# 个回复} - }。该操作无法撤销!您确定要这样做吗? + penalty_post_delete_all_confirmation_MF: "这将删除 \n{ TOPICS, plural,\n other {# 个话题}\n}和 \n{ REPLIES, plural,\n other {# 条回复}\n}。此操作无法撤消!确定要执行此操作吗?\n" penalty_post_edit: "编辑帖子" penalty_post_none: "无操作" penalty_count: "处罚计数" @@ -7543,10 +7679,10 @@ zh_CN: time_read: "阅读时间" post_edits_count: "帖子编辑" upcoming_changes: - title: "用户即将推出的变化" - description: "要修改群组或启用或禁用即将推出的更改,请访问 即将推出的更改配置页面。" + title: "用户即将推出的更改" + description: "要修改群组或者启用或禁用即将推出的更改,请访问即将推出的更改配置页面。" filter_placeholder: "按名称或描述筛选即将推出的更改" - filter_no_results: "未发现即将推出的更改" + filter_no_results: "找不到即将推出的更改" exports: title: 用户导出 download: @@ -7571,7 +7707,7 @@ zh_CN: progress: title: "删除帖子的进度" description: - other: "正在删除 @%{username} 的 %{count} 个帖子" + other: "正在删除 @%{username} 的 %{count} 个帖子…" confirmation: title: "删除 @%{username} 发布的所有帖子" description: | @@ -7754,7 +7890,7 @@ zh_CN: enabled: "在用户卡片上显示" disabled: "不在用户卡片上显示" show_on_signup: - title: "显示到注册表单" + title: "在注册表单上显示" enabled: "在注册表单上显示" disabled: "在注册表单上隐藏" searchable: @@ -7764,6 +7900,7 @@ zh_CN: field_types: text: "文本" textarea: "文本区域" + date: "日期" confirm: "确认" dropdown: "下拉菜单" multiselect: "多选" @@ -7784,6 +7921,9 @@ zh_CN: more_than_50_results: "结果超过 50 个。请优化您的搜索。" no_results: "找不到匹配的网站文本" interpolation_keys: "可用的插值键:" + interpolation_key_insert: "点击插入" + interpolation_key_used: "已使用" + interpolation_key_invalid: "未知密钥——将不会进行插值" outdated: title: "此翻译已过时" description: "自此替换创建以来,此键的默认翻译已更改。请在下面检查您的翻译是否与对原始意图所做的任何更改相符。" @@ -7829,7 +7969,7 @@ zh_CN: download_file: "下载" upload_restrictions: extensions: "已接受:%{extensions}" - max_size: "最大: %{size}" + max_size: "最大:%{size}" selectable_avatars: title: "用户可以选择的头像列表" table_column_heading: @@ -7868,7 +8008,7 @@ zh_CN: experimental: "实验性" secret_list: invalid_input: "输入字段不能为空或包含竖线字符。" - already_exists: "条目 %{key} 已存在。" + already_exists: "%{key} 的条目已存在。" default_categories: modal_description: other: "要回溯应用此变更吗?这将更改 %{count} 位现有用户的偏好设置。" @@ -7897,14 +8037,14 @@ zh_CN: min_admin_password_length: prompt: "您即将修改密码策略。这将影响所有从现在起更改密码的管理员。确定要继续吗?" confirm: "是,更新密码策略" - password_unique_charactes: + password_unique_characters: prompt: "您即将修改密码策略。这将影响所有从现在起更改密码的用户。确定要继续吗?" confirm: "是,更新密码策略" block_common_passwords: prompt: "您即将修改密码策略。这将影响所有从现在起更改密码的用户。确定要继续吗?" confirm: "是,更新密码策略" clean_up_inactive_users_after_days: - prompt: "将此值设置为 0 以外的任何值,都会导致在该天数内不再活跃的用户被永久删除。您确定要继续吗?" + prompt: "将此值设置为 0 以外的任何值都会导致在该天数内不再活跃的用户被永久删除。确定要继续吗?" confirm: "是的,我明白除非我将此值设置为 0,否则不活跃用户将被永久删除。" job_status: completed: "更新完成" @@ -7942,8 +8082,8 @@ zh_CN: no_user_badges: "%{name} 尚未被授予任何徽章。" no_badges: 没有可供授予的徽章。 none_selected: "选择一个徽章以开始" - filter_placeholder: "筛选徽章……" - no_badges_found: "未找到徽章" + filter_placeholder: "筛选徽章…" + no_badges_found: "找不到徽章" sections: design: 设计 query: 查询 @@ -8045,7 +8185,7 @@ zh_CN: category: "发布到类别" tags: "话题标签" post_author: "帖子作者" - post_author_description: "为本主机所有嵌入主题设置的作者,覆盖博客页面元标签。留空则从页面的 标签读取作者信息。" + post_author_description: "为此主机所有嵌入主题设置的作者,覆盖博客页面元标签。留空则从页面的 标签读取作者信息。" post_author_with_default: "帖子作者(默认为 %{author})" add_host: "添加主机" posts_and_topics: "帖子和话题配置" @@ -8064,6 +8204,7 @@ zh_CN: crawler_settings_saved: "抓取工具设置已保存" back: "返回嵌入" configuration_snippet: "配置片段" + full_app_mode_description: "在嵌入的 iframe 中加载完整的 Discourse 应用,使用户能够直接回复、点赞、引用并与话题互动。" host_form: add_header: "添加主机" edit_header: "编辑主机" diff --git a/config/locales/client.zh_TW.yml b/config/locales/client.zh_TW.yml index 37a6250b67779..0807b58eacbed 100644 --- a/config/locales/client.zh_TW.yml +++ b/config/locales/client.zh_TW.yml @@ -6,6 +6,11 @@ zh_TW: js: + blocks: + ghost: + status: "狀態" + in_location: "在" + failed: "失敗" number: format: separator: "." @@ -367,6 +372,10 @@ zh_TW: pill: "建議" pm_title: "推薦訊息" admin_onboarding_banner: + invite_collaborators: + title: "邀請協作者" + start_posting: + back: "上一步" spread_the_word: action: "複製連結" about: @@ -438,8 +447,6 @@ zh_TW: other: "建立於 %{count} 年前" bookmarked: title: "書籤" - edit_bookmark: "編輯書籤" - clear_bookmarks: "清除書籤" help: bookmark: "點擊以將此主題加入書籤" edit_bookmark: "點擊以編輯此主題中文章的書籤" @@ -458,12 +465,12 @@ zh_TW: clear_reminder: "清除提醒" edit: "編輯書籤" not_bookmarked: "將此貼文加入書籤" + topic_bookmark: "話題" remove_reminder_keep_bookmark: "刪除提醒並保留書籤" created_with_reminder: "您已使用提醒 %{date}將此帖子添加為書籤。 %{name}" created_with_reminder_generic: "您已在 %{date} 將此內容加為書籤並設定提醒。%{name}" delete: "刪除書籤" confirm_delete: "您確定要刪除這個書籤嗎?提醒也會被刪除。" - confirm_clear: "確定要移除該話題上的所有書籤嗎?" save: "儲存" no_timezone: '您尚未設定時區。將無法設定提醒事項。在您的設定檔中設定一個 。' invalid_custom_datetime: "您提供的日期和時間無效,請再試一次。" @@ -579,18 +586,13 @@ zh_TW: in_reply_to: "回覆給" filtered_flagged_by: "檢舉者" unknown: - title: - other: "您有停用外掛程式的待審核項目:" instruction: "在您啟用相關外掛程式之前,它們無法正常顯示。請啟用外掛程式並刷新頁面。或者,您也可以忽略它們。瞭解更多..." reviewable_unknown_source: "%{reviewableType} (未知外掛程式)" reviewable_known_source: "%{reviewableType} (來自 '%{pluginName}' 外掛程式)" ignore_all: "忽略全部" enable_plugins: "啟用外掛程式" - delete_confirm: "您確定要刪除所有由禁用外掛程式建立的評論嗎?" - ignore_success: "所有由禁用外掛程式建立的評論已被刪除。" explain: why: "解釋為什麼這個項目結束在隊列" - title: "可審閱的評分" formula: "公式" subtotal: "小計" total: "總計" @@ -604,10 +606,8 @@ zh_TW: title: "紀錄上已經同意的標誌的用戶將獲得獎勵。" trust_level_bonus: name: "信任等級" - title: "由信任等級較高的使用者建立的可審閱項目的分數較高。" type_bonus: name: "類型獎金" - title: "某些可審查類型可由工作人員指定加分,使其具有較高的優先順序。" revise_and_reject_post: title: "修訂" reason: "原因" @@ -616,7 +616,6 @@ zh_TW: custom_reason: "清楚說明原因" other_reason: "其他..." optional: "選擇性" - stale_help: "此可審查問題已由 %{username}解決。" claim_help: optional: "您可以聲明此項目以防止其他人審核。" required: "您必須先審核項目才能查看它們。" @@ -656,6 +655,7 @@ zh_TW: scrubbed_reason: "原因" scrub_record: reason_placeholder: "原因..." + confirm_button: "確認移除" cancel_button: "取消" user_percentage: summary: @@ -703,6 +703,7 @@ zh_TW: low: "低" medium: "中間的" high: "高" + clear_filter: "移除 %{filter}" conversation: view_full: "查看完整對話" scores: @@ -1499,6 +1500,9 @@ zh_TW: tags: "標籤" interface: "界面" apps: "應用" + calendar_subscriptions: + copied: "已複製!" + add_to_google: "Google 行事曆" change_password: success: "( 寄出的郵件 )" in_progress: "( 正在傳送郵件 )" @@ -2071,6 +2075,7 @@ zh_TW: form_kit: reset: 重置 optional: 選擇性 + required: 必填 dirty_form: "您尚未提交您的更改!您確實要離開嗎?" errors: required: "必要設定" @@ -2415,6 +2420,8 @@ zh_TW: medium_dark_tone: 膚色深度:4 dark_tone: 膚色深度:5 default: 自訂表情符號 + filter_input: + clear: "清除篩選" shared_drafts: title: "共享草稿" notice: "此話題只對可以發布共享草稿的使用者可見。" @@ -2825,8 +2832,6 @@ zh_TW: max_views: placeholder: 最大值 aria_label: 按最大瀏覽量過濾 - additional_options: - label: "依發表次數和主題瀏覽次數篩選" new_item: "新增" go_back: "返回" not_logged_in_user: "使用者頁面(包含目前活動及喜好的摘要)" @@ -2880,11 +2885,8 @@ zh_TW: confirm: "確認" select_all: "選擇全部" clear_all: "清除全部" - unlist_topics: "未在列表中的話題" - relist_topics: "討論話題" reset_bump_dates: "重設上浮日期" defer: "標記未讀" - delete: "刪除話題" delete_topics_count: other: "刪除話題" dismiss: "忽略" @@ -2911,26 +2913,18 @@ zh_TW: other: "忽略(%{count} 個)" toggle: "批次切換選擇話題" actions: "批次操作" - change_category: "設定分類" - close_topics: "關閉話題" - archive_topics: "已封存的話題" move_messages_to_inbox: "移動到收件匣" archive_messages: "移至封存" - notification_level: "通知…" change_notification_level: "變更通知層級" choose_new_category: "為話題選擇新類別:" - selected: - other: "你已選擇了 %{count} 個話題。" selected_sole_category: other: "您已從以下類別中選擇 %{count} 個話題。" selected_count: other: "已選擇 %{count} 個" - change_tags: "取代標記" - append_tags: "向後追加標記" + append_tags: "新增標記" choose_new_tags: "為話題選擇新標籤" - choose_append_tags: "為話題選擇新標籤" + choose_append_tags: "新增標記" changed_tags: "話題的標籤已修改" - remove_tags: "移除所有標記" confirm_remove_tags: other: "所有標記將從 %{count} 個話題中移除。確定嗎?" progress: @@ -2956,7 +2950,6 @@ zh_TW: name: "忽略" close_topics: name: "關閉" - note: " 分類已經沒有其它話題了。" optional: (選擇性) archive_topics: name: "封存" @@ -2970,24 +2963,18 @@ zh_TW: name: "重新公開" remove_tags: name: "移除標記" - append_tags: - name: "向後追加標記" replace_tags: name: "取代標記" delete_topics: name: "刪除" update_category: name: "更新分類" - description: "為選取的主題選擇新類別" reset_bump_dates: name: "重設上浮日期" - description: "將主題更新日期重設為上次建立貼文的日期,這會影響主題清單中的排序" defer: name: "標註為未讀" - description: "將主題標記為未讀" update_notifications: name: "更新通知" - description: "將通知層級變更為「關注」、「追蹤」、「正常」或「靜音」" topic: filter_to: other: "本話題中的 %{count} 帖" @@ -3683,6 +3670,8 @@ zh_TW: placeholder: "選擇標記群組…" topic_featured_link_allowed: "允許在該分類中發布精選的連結標題" create_long: "建立新的分類" + type_settings_schema: + site_settings: "網站設定" slug_placeholder: "(選填) 在 url 加上虛線" creation_error: 建立分類時發生錯誤。 save_error: 儲存分類時發生錯誤。 @@ -3708,6 +3697,8 @@ zh_TW: delete_error: "刪除此分類時發生錯誤。" no_description: "請為此分類新增描述。" change_in_category_topic: "編輯描述" + description_expand: "顯示更多" + description_collapse: "顯示更少" already_used: "此顏色已經用於其它分類" security: "安全性" security_add_group: "新增群組" @@ -3740,6 +3731,9 @@ zh_TW: review_group_name: "群組名稱" require_topic_approval: "所有新話題皆需要通過管理員審核" require_reply_approval: "所有新回覆皆需要通過管理員審核" + posting_review_modes: + everyone: "所有使用者" + posting_review_groups_placeholder: "選取群組..." this_year: "今年" position: "在分類頁面上的位置:" position_disabled: "類別將按活動順序顯示。若要控制清單中類別的順序,請啟用 「固定類別位置」 設定。" @@ -4223,7 +4217,17 @@ zh_TW: delete_confirm_synonyms: other: "其 %{count} 同義詞也將被刪除。" edit_tag: "編輯標記名稱和描述" - description: "說明(最多 1000 個字元)" + description: "描述" + settings: + title: "設定" + general: "一般" + back: "上一步" + name: "名稱" + slug: "縮寫" + name_placeholder: "標記名稱" + localization: + name: "名稱" + description: "描述" sort_by: "排序方式:" sort_by_count: "總數" sort_by_name: "名稱" @@ -4500,6 +4504,9 @@ zh_TW: invite: content: "邀請" title: "邀請新成員" + my_messages: + content: "我的訊息" + title: "我的個人訊息" global_section: "全域區段,所有人都可以看到" panels: forum: @@ -4627,7 +4634,6 @@ zh_TW: admin_js: type_to_filter: "篩選類型…" settings: "設定" - reset_filter: "重置" admin: title: "論壇管理員" moderator: "板主" @@ -4639,9 +4645,11 @@ zh_TW: never: "永不" reports: title: "可見報告列表" - meta_doc: "報告是幫助您了解網站上所發生事情的有力工具。它們可以幫助您了解趨勢、發現問題並根據數據做出決策。" sidebar_title: "報告" back: "返回到所有報告" + group_traffic: "流量" + group_members: "成員" + group_other: "其他" config_sections: account: title: "帳號" @@ -4666,7 +4674,6 @@ zh_TW: preview: "預覽" enabled_for_options: everyone: "所有使用者" - staff: "只限工作人員" statuses: experimental: "實驗性" impact_roles: @@ -4729,7 +4736,6 @@ zh_TW: help_text: "建議尺寸為 600 x 80 像素。" large_icon: title: "方形圖示" - description: "方形版本的標誌圖片會出現在管理頂端,同時也是行動首頁應用程式的標誌。" help_text: "建議尺寸為 512 x 512 像素。" square_icon_dark: required: "暗黑模式下使用不同的方形圖示嗎?" @@ -4850,6 +4856,9 @@ zh_TW: reports: title: "報告" header_description: "報告是幫助您了解網站上所發生事情的有力工具。它們可以幫助您了解趨勢、發現問題並根據數據做出決策。" + sub_pages: + settings: + title: "設定" badges: title: "徽章" header_description: "徽章可獎勵使用者的活動、貢獻和成就,以表揚、確認和鼓勵社群內的正面行為和參與。" @@ -4946,17 +4955,6 @@ zh_TW: default_value: "預設" search: title: "搜索" - result_types: - page: - other: "頁面" - report: - other: "報告" - setting: - other: "設定" - theme: - other: "佈景主題" - component: - other: "元件" new_features: title: "有什麼最新消息?" check_for_updates: "檢查更新" @@ -4980,15 +4978,6 @@ zh_TW: title: "有什麼最新消息?" subtitle: "我們一直在發布新功能和改進。此頁面涵蓋了重點,但您可以單擊「了解更多」以查看詳細的版本說明。" learn_more: "了解更多..." - experimental: "實驗性" - only_experiments: "僅顯示實驗性功能" - experiment_enabled: "您已啟用實驗性功能。" - experiment_disabled: "您已停用實驗性功能。" - experiment_tooltip: - title_enabled: "關閉實驗性功能" - content_enabled: "更改此項將為所有使用者禁用該功能。" - feature_tooltip: - content_enabled: "更改此項將為所有使用者禁用該功能。" last_checked: "上次檢查的時間" refresh_problems: "重新整理" no_problems: "未發現任何問題。" @@ -5047,7 +5036,7 @@ zh_TW: all: "全部" view_table: "表格" view_graph: "圖表" - refresh_report: "重新整理報告" + refresh_report: "重新整理" daily: 日 monthly: 月 weekly: 周 @@ -5860,7 +5849,6 @@ zh_TW: import_web_tip: "含有佈景主題的版本庫" direct_install_tip: "您確定要從下面列出的存儲庫中安裝 %{name} 嗎?" import_web_advanced: "進階…" - import_file_tip: "包含主題的 .tar.gz、.zip 或 .dcstyle.json 檔案" is_private: "佈景主題在私人git版本庫中" finish_install: "完成佈景主題安裝" last_attempt: "安裝過程未完成,最後一次嘗試:" @@ -6827,6 +6815,7 @@ zh_TW: disabled: "不可搜尋" field_types: text: "文字" + date: "日期" confirm: "確認" dropdown: "下拉" multiselect: "多選" @@ -6947,7 +6936,7 @@ zh_TW: confirm: "是的,更新密碼原則" min_admin_password_length: confirm: "是的,更新密碼原則" - password_unique_charactes: + password_unique_characters: confirm: "是的,更新密碼原則" block_common_passwords: confirm: "是的,更新密碼原則" diff --git a/config/locales/server.ar.yml b/config/locales/server.ar.yml index b742cf68af3d3..a83059086585d 100644 --- a/config/locales/server.ar.yml +++ b/config/locales/server.ar.yml @@ -60,8 +60,8 @@ ar: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} بواسطة %{username}" - too_many_urls: "لا يمكن عرض لوحة معاينة لأكثر من 10 روابط في طلب واحد." - concurrency_not_allowed: "طلبات الإدراج المتزامنة (inline-oneboxing) غير مسموح بها. يُرجى إرسال طلب واحد فقط في كل مرة." + too_many_urls: "لا يمكن تحويل أكثر من 10 عناوين URL إلى مربعات مضمنة أحادية في طلب واحد." + concurrency_not_allowed: "لا يُسمح بإرسال طلبات متزامنة لتحويل عناوين URL إلى مربعات مضمنة أحادية. يُرجى إرسال طلب واحد في كل مرة." components: enabled_filter: "مفعَّلة" disabled_filter: "متوقفة" @@ -156,6 +156,8 @@ ar: invalid_type: "%{type} ليس نوعًا صالحًا" humanize_not_valid_string_value: "يجب أن تكون الخاصية في JSON Pointer '%{property_json_pointer}' سلسلة نصية." not_valid_string_value: "يجب أن تكون سلسلة نصية" + humanize_not_valid_datetime_value: "يجب أن تكون الخاصية الموجودة عند مؤشر JSON '%{property_json_pointer}' تاريخًا ووقتًا صالحًا." + not_valid_datetime_value: "يجب أن يكون تاريخًا ووقتًا صالحًا" humanize_not_valid_integer_value: "يجب أن تكون الخاصية في JSON Pointer '%{property_json_pointer}' عددًا صحيحًا." not_valid_integer_value: "يجب أن تكون عددًا صحيحًا" humanize_not_valid_float_value: "يجب أن تكون الخاصية في JSON Pointer '%{property_json_pointer}' عددًا عشريًا." @@ -338,6 +340,7 @@ ar: errors: &errors format: ! "%{attribute} %{message}" format_with_full_message: "%{attribute}: %{message}" + diff_too_complex: "الفرق معقد للغاية بحيث لا يمكن حسابه بأمان. يرجى تجربة تعديلات أصغر." messages: invalid_locale: "%{invalid_locale} ليست لغة صالحة" too_long_validation: @@ -361,6 +364,7 @@ ar: greater_than: يجب أن تكون أكبر من %{count} greater_than_or_equal_to: يجب أن تكون أكبر من أو تساوي %{count} has_already_been_used: "تم استخدامها بالفعل" + in: يجب أن يكون ضمن %{count} inclusion: غير متضمَّنة في القائمة invalid: غير صالحة is_invalid: "تبدو غير واضحة، هل هذه الجملة كاملة؟" @@ -452,7 +456,7 @@ ar: slow_down_crawler_user_agent_must_be_at_least_3_characters: "يجب ألا يقل طول وكلاء المستخدمين عن 3 أحرف لتجنُّب تقييد معدل المستخدمين القانونيين من غير قصد." slow_down_crawler_user_agent_cannot_be_popular_browsers: "لا يمكنك إضافة أيٍّ من القيم التالية إلى الإعداد: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "لا يمكنك إيقاف إزالة البيانات الوصفية للصورة إذا كان 'composer media optimization image enabled' مفعلًا. أوقف 'composer media optimization image enabled' قبل إيقاف إزالة البيانات الوصفية للصورة." - x_summary_large_image_no_svg: "لا يمكن أن تكون صور ملخص Twitter المُستخدَمة في البيانات الوصفية لـ twitter:image بتنسيق svg." + x_summary_large_image_no_svg: "لا يمكن أن تكون صور ملخص X المُستخدَمة في البيانات الوصفية لـ twitter:image بتنسيق svg." tl0_and_anonymous_flag: "يجب إدخال 'site contact email' أو 'email address to report illegal content' للمستخدمين المجهولين." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "يشترط هذا الإعداد تفعيل خيار \"السماح بوضع المستخدم المجهول\" مسبقًا." conflicting_google_user_id: 'تم تغيير معرِّف حساب Google لهذا الحساب؛ مطلوب تدخُّل فريق العمل لأسباب أمنية. يُرجى التواصل مع فريق العمل وتوجيهه إلى
https://meta.discourse.org/t/76575' @@ -510,6 +514,7 @@ ar: redemption_count_less_than_max: "ينبغي أن يكون أقل من %{max_redemptions_allowed}." email_xor_domain: "غير مسموح بحقول البريد الإلكتروني والنطاق في الوقت نفسه" existing_user_success: "تم استخدام الدعوة بنجاح" + email_invites_disabled: "إرسال رسائل الدعوة عبر البريد الإلكتروني معطَّل" bulk_invite: file_should_be_csv: "يجب أن يكون الملف الذي تم تحميله بتنسيق CSV." max_rows: "تم إرسال أول %{max_bulk_invites} دعوة. حاول تقسيم الملف إلى أجزاء أصغر." @@ -780,6 +785,7 @@ ar: other: "يمكن حساب %{count} نطاق بريد إلكتروني بحد أقصى في المرة الواحدة." no_invites_with_discourse_connect: "يمكنك دعوة المستخدمين المسجَّلين فقط عند تفعيل DiscourseConnect" no_invites_without_local_logins: "يمكنك دعوة المستخدمين المسجَّلين فقط عند إيقاف عمليات تسجيل الدخول المحلية" + update_existing_users_required: "يؤثر هذا التغيير على %{count} من أعضاء المجموعة الحاليين. يجب تحديد المعامل update_existing_users (بقيمة true أو false) لتحديد ما إذا كان سيتم تطبيق الإعدادات الافتراضية الجديدة للإشعارات على الأعضاء الحاليين." default_names: everyone: "الجميع" admins: "المسؤولون" @@ -990,6 +996,13 @@ ar: email_already_used_in_group: "'%{email}' مُستخدَم بالفعل بواسطة المجموعه '%{group_name}'." email_already_used_in_category: "'%{email}' مُستخدَم بالفعل بواسطة الفئة '%{category_name}'." description_incomplete: "يجب أن يتضمَّن منشور وصف الفئة فقرة واحدة على الأقل." + description_too_long: + zero: "الوصف طويل جدًا (الحد الأقصى هو %{count} حرف)." + one: "الوصف طويل جدًا (الحد الأقصى هو حرف واحد)." + two: "الوصف طويل جدًا (الحد الأقصى هو حرفين)." + few: "الوصف طويل جدًا (الحد الأقصى هو %{count} أحرف)." + many: "الوصف طويل جدًا (الحد الأقصى هو %{count} حرفًا)." + other: "الوصف طويل جدًا (الحد الأقصى هو %{count} حرف)." permission_conflict: "يجب أيضًا السماح لأي مجموعة مسموح لها بالوصول إلى فئة فرعية بالوصول إلى الفئة الرئيسية. المجموعات التالية لديها إذن بالوصول إلى إحدى الفئات الفرعية، ولكن ليس لديها إذن بالوصول إلى الفئة الرئيسية: %{group_names}." disallowed_topic_tags: "يتضمَّن هذا الموضوع وسومًا لا تسمح بها هذه الفئة: \"%{tags}\"" disallowed_tags_generic: "يتضمَّن الموضوع وسومًا غير مسموح بها." @@ -1333,6 +1346,7 @@ ar: too_many_drafts: title: "عدد كبير جدًا من المسودات" description: "لقد وصلت إلى الحد الأقصى لعدد المسودات المسموح به. يُرجى حذف بعض [مسوداتك](%{base_url}/my/activity/drafts) ثم إعادة المحاولة." + bulk_destroy_limit: "يمكنك حذف ما يصل إلى %{limit} مسودات في المرة الواحدة." draft_backup: pm_title: "المسودات الاحتياطية من الموضوعات الجارية" pm_body: "موضوع يحتوي على مسودات احتياطية" @@ -1431,11 +1445,16 @@ ar: every_month: "كل شهر" every_six_months: "كل ستة اشهر" user_api_key: + title: 'تفويض "%{application_name}"' authorize: "السماح" - deny: "ألغِ" + deny: "إلغاء" read: "قراءة" read_write: "قراءة/كتابة" + logged_in_as: "تم تسجيل الدخول باسم" + permissions_header: 'سيسمح هذا لـ "%{application_name}" بما يلي:' + redirect_warning: "سيؤدي التفويض إلى إعادة توجيهك إلى" instructions: 'لقد أنشأنا للتو مفتاح API جديد للمستخدم لتستخدمه مع "%{application_name}"، يُرجى لصق المفتاح التالي في تطبيقك:' + copied: "تم النسخ!" otp_description: 'هل ترغب في السماح للتطبيق "%{application_name}" بالوصول إلى هذا الموقع؟' otp_confirmation: confirm_title: المتابعة إلى %{site_name} @@ -1514,9 +1533,10 @@ ar: description: "قائمة بحالات البلاغات متضمنةً نوع البلاغ، وكاتب المنشور، ومقدِّم البلاغ، والوقت حتى التعامل معه." visits: title: "زيارات المستخدم" - xaxis: "اليوم" + xaxis: + desktop: "سطح المكتب" + mobile: "الجوَّال" yaxis: "عدد الزيارات" - description: "عدد زيارات المستخدمين المسجَّلين." signups: title: "الاشتراكات" xaxis: "اليوم" @@ -1559,6 +1579,8 @@ ar: yaxis: "اليوم" description: "طلبات API لمفاتيح API العادية ومفاتيح API للمستخدم." consolidated_page_views_browser_detection: + title: "المشاهدات المجمَّعة للصفحة مع اكتشاف المتصفح (موصى به)" + title_legacy: "المشاهدات المجمَّعة للصفحة مع اكتشاف المتصفح (موصى به)" xaxis: page_view_anon_browser: "متصفح مجهول" page_view_logged_in_browser: "متصفح مسجِّل الدخول" @@ -1578,10 +1600,8 @@ ar: description: "مشاهدات الصفحة للمستخدمين الذين سجَّلوا الدخول والمستخدمين المجهولين ومتتبعات ارتباطات الويب المعروفة وحركات الزيارات الأخرى." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "المستخدمون النشطون يوميًا/المستخدمون النشطون شهريًا" xaxis: "اليوم" yaxis: "المستخدمون النشطون يوميًا/المستخدمون النشطون شهريًا" - description: "عدد الأعضاء الذين سجَّلوا الدخول في اليوم الماضي مقسومًا على عدد الأعضاء الذين سجَّلوا الدخول في الشهر الماضي - يتم عرض نسبة مئوية تشير إلى \"الاستمرار في المتابعة\" للمجتمع. ننصحك بالبقاء فوق 20%." daily_engaged_users: title: "المستخدمون المتفاعلون يوميًا" xaxis: "اليوم" @@ -1866,11 +1886,15 @@ ar: labels: provider: مقدِّم خدمة تسجيل الدخول no_accounts: "لا توجد حسابات مرتبطة" + discourse_connect: "تسجيل الدخول الموحد (SSO) عبر Discourse Connect" + no_sso_accounts: "حسابات بدون سجل تسجيل دخول موحد (SSO)" + total_users: "إجمالي حسابات المستخدمين النشطة" description: "عرض عدد الحسابات المرتبطة مصنفة حسب مقدِّم خدمة تسجيل الدخول. ينطبق فقط عند تفعيل طرق تسجيل الدخول بحساب تواصل اجتماعي." dashboard: problem: twitter_login: 'يبدو أن تسجيل الدخول إلى Twitter لا يعمل في الوقت الحالي. تحقق من بيانات الاعتماد في إعدادات الموقع.' group_email_credentials: 'حدثت مشكلة في بيانات اعتماد البريد الإلكتروني للمجموعة %{group_full_name}. لن يتم إرسال أي رسائل بريد إلكتروني من صندوق الوارد للمجموعة حتى تتم معالجة هذه المشكلة. %{error}' + upcoming_change_stable_opted_out: 'لقد اختار موقعك عدم الانضمام إلى التغيير القادم "%{upcoming_change}". لقد وصل هذا التغيير الآن إلى حالة "المستقرة" وقد يتم إزالته قريبًا أو تثبيته بشكل دائم. تفضل بزيارة صفحة التغييرات القادمة لمراجعة التفاصيل المتعلقة بهذا التغيير.' rails_env: "الخادم يعمل في وضع %{env}." host_names: "يستخدم ملف config/database.yml اسم المضيف الافتراضي localhost. حدِّثه لاستخدام اسم مضيف موقعك." sidekiq: 'Sidekiq لا يعمل. يتم تنفيذ العديد من المهام، مثل إرسال رسائل البريد الإلكتروني، بشكلٍ غير متزامن بواسطة Sidekiq. يُرجى التأكَّدمن تشغيل عملية Sidekiq واحدة على الأقل. تعرف على Sidekiq هنا.' @@ -1895,6 +1919,7 @@ ar: many: "لقد تسبَّب استطلاع البريد الإلكتروني في حدوث %{count} خطأ في آخر 24 ساعة. راجع السجلات للمزيد من التفاصيل." other: "لقد تسبَّب استطلاع البريد الإلكتروني في حدوث %{count} خطأ في آخر 24 ساعة. راجع السجلات للمزيد من التفاصيل." missing_mailgun_api_key: "تم إعداد الخادم لإرسال الرسائل الإلكترونية عبر Mailgun، لكنك لم تقدِّم مفتاح API المُستخدَم للتحقُّق من رسائل خطاف الويب." + qq_mail_smtp: "من المعروف أن خادم SMTP الخاص بك (%{smtp_address}) يتسبب في تكرار رسائل البريد الإلكتروني مع Discourse. لا يقوم بريد QQ بإرجاع إقرارات مناسبة، مما يجعل Discourse يعيد محاولة عمليات الإرسال الناجحة. انظر البدائل الموصى بها." bad_favicon_url: "فشل تحميل رمز favicon. تحقَّق من إعداد الرمز المفضل في إعدادات الموقع." poll_pop3_timeout: "مهلة الاتصال بخادم POP3 على وشك الانتهاء. ولم يتم استرداد البريد الإلكتروني الوارد. يُرجى التحقق من إعدادات POP3 وموفر الخدمة." poll_pop3_auth_error: "الاتصال بخادم POP3 يفشل بسبب خطأ في المصادقة. يُرجى التحقق من إعدادات POP3." @@ -1906,6 +1931,7 @@ ar: category_style_deprecated: "يستخدم Discourse الخاص بك حاليًا نمط فئة قديم ستتم إزالته قبل الإصدار التجريبي النهائي من Discourse 3.2. يُرجى الرجوع إلى الانتقال إلى إعداد موقع نمط فئة واحدة للحصول على إرشادات حول كيفية الاحتفاظ بنمط الفئة المحدَّد." maxmind_db_configuration: 'تم إعداد الخادم لاستخدام قواعد بيانات MaxMind للبحث العكسي عن عناوين IP ولكن لم يتم إعداد معرِّف حساب MaxMind صالح مما قد يؤدي إلى فشل تنزيل قواعد بيانات MaxMind في المستقبل. راجع هذا الدليل لمعرفة المزيد.' admin_sidebar_deprecation: "تم إلغاء التخطيط القديم للمسؤول لصالح تخطيط الشريط الجانبي الجديد، وستتم إزالته في الإصدار التالي. يمكنك تكوين تخطيط الشريط الجانبي الجديد الآن للاشتراك قبل ذلك." + starttls_disabled: "تم تعطيل بروتوكول STARTTLS في إعدادات البريد الصادر. عادةً ما لا يكون هذا ضروريًا. يُنصح بإزالة
DISCOURSE_SMTP_ENABLE_START_TLS=false
من بيئة النظام لديك. لمزيد من التفاصيل، يرجى الرجوع إلى هذا الموضوع." back_from_logster_text: "العودة إلى الموقع" site_settings: allow_bulk_invite: "السماح بالدعوات الجماعية عن طريق تحميل ملف CSV" @@ -1950,6 +1976,7 @@ ar: allow_duplicate_topic_titles_category: "اسمح بالموضوعات ذات العناوين المتطابقة والمتكررة إذا كانت الفئة مختلفة. يجب أن تكون القيمة allow_duplicate_topic_titles مضبوطة على False." unique_posts_mins: "عدد الدقائق قبل أن يتمكن العضو من إنشاء منشور يتضمَّن المحتوى نفسه مجددًا" educate_until_posts: "إظهار اللوحة التعليمية المنبثقة للمستخدمين الجدُد عندما يبدأ العضو في كتابة منشوراته الأولى (n)" + title: "اسم هذا الموقع. يظهر لجميع الزوار، بما فيهم المستخدمون المجهولون. يُرجى العلم أن تغيير هذا الاسم قد يُرسل إشعارًا لمستخدمي تطبيق الويب التقدمي (PWA) يطلب منهم تحديث التطبيق أو إلغاء تثبيته." site_description: "صِف هذا الموقع بجملة واحدة. مرئي لجميع الزوار، بما في ذلك المستخدمون المجهولون." short_site_description: "وصف قصير من بضع كلمات. مرئي لجميع الزوار، بما في ذلك المستخدمون المجهولون." contact_email: "عنوان البريد الإلكتروني لجهة الاتصال الرئيسية المسؤولة عن هذا الموقع. يتم استخدامه للإشعارات المهمة ويتم عرضه أيضًا على صفحة /about. مرئي للمستخدمين المجهولين على المواقع العامة." @@ -1957,6 +1984,7 @@ ar: crawl_images: "استعادة الصور من عناوين URL البعيدة لإدراج الأبعاد الصحيحة للطول والعرض" download_remote_images_to_local: "يمكنك تحويل الصور البعيدة (المرتبطة برابط ساخن) عن طريق تنزيلها؛ يحفظ ذلك المحتوى حتى إذا تمت إزالة الصور من الموقع البعيد في المستقبل." download_remote_images_threshold: "الحد الأدنى من مساحة القرص اللازمة لتنزيل الصور البعيدة محليًا (بالنسبة المئوية)" + disabled_image_download_domains: "لن يتم تنزيل الصور البعيدة من هذه النطاقات أبدًا." block_hotlinked_media: "امنع المستخدمين من وضع وسائط بعيدة (مرتبطة برابط ساخن) في منشوراتهم. سيتم استبدال الوسائط البعيدة التي لا يتم تنزيلها عبر 'download_remote_images_to_local' برابط لعنصر نائب." block_hotlinked_media_exceptions: "قائمة بعناوين URL الأساسية المستثناة من إعداد block_hotlinked_media. قم بتضمين البروتوكول (مثل https://example.com)." editing_grace_period: "لن يؤدي التعديل إلى إنشاء نسخة جديدة في سجل المنشورات لمدة (n) ثانية بعد النشر." @@ -1992,9 +2020,12 @@ ar: max_oneboxes_per_post: "تعيين الحد الأقصى لعدد لوحات المعاينة التي يمكن تضمينها في منشور واحد. توفِّر لوحات المعاينة للمحتوى المرتبط داخل المنشور." facebook_app_access_token: "رمز يتم إنشاؤه من معرِّف تطبيق Facebook أو الرمز السري لديك. ويتم استخدامه لإنشاء لوحات معاينة لموقع Instagram." github_onebox_access_tokens: "تعيين مؤسسة أو مستخدم GitHub لرمز وصول GitHub المستخدم لإنشاء لوحات معاينة GitHub للمستودعات الخاصة، والإصدارات، وطلبات السحب، والمشكلات، ومحتويات الملفات. بدون هذا، سيتم عرض عناوين URL العامة لـ GitHub فقط في لوحة المعانية." + reddit_onebox_client_id: "مُعرّف عميل Reddit API OAuth المستخدَم لمصادقة صناديق Reddit الأحادية. أنشئ تطبيقًا من نوع \"البرنامج النصي\" على reddit.com/prefs/apps/apps للحصول على بيانات الاعتماد." + reddit_onebox_client_secret: "سر عميل Reddit API OAuth المستخدّم لمصادقة صناديق Reddit الأحادية. موجود ضمن تطبيق من نوع \"البرنامج النصي\" الذي تم إنشاؤه على reddit.com/prefs/apps." logo: "صورة الشعار في الجزء العلوي الأيمن من موقعك. استخدم صورة مستطيلة عريضة بارتفاع 120 ونسبة عرض إلى ارتفاع أكبر من 3:1. وإذا تركتها فارغة، فسيتم عرض نص عنوان الموقع." logo_small: "صورة الشعار الصغيرة في الجزء العلوي الأيمن من موقعك، وتظهر عند التمرير لأسفل. استخدم صورة مربعة بمقاس 120 × 120. وإذا تركتها فارغة، فسيتم عرض صورة رمزية لمنزل." digest_logo: "الشعار البديل المُستخدَم أعلى ملخص البريد الإلكتروني لموقعك. استخدم صورة مستطيلية عريضة. لا تستخدم صورة SVG. وإذا تركتها فارغة، فسيتم استخدام الصورة من إعداد `logo`." + mobile_logo: "الشعار المستخدم في النسخة المحمولة من موقعك. نوصي باستخدام أيقونة مربعة لتجنب ازدحام رأس الصفحة، لكن يمكنك استخدام صورة مستطيلة عريضة بارتفاع 120 بكسل ونسبة عرض إلى ارتفاع أكبر من 3:1. إذا تُرك هذا الحقل فارغًا، سيتم استخدام الصورة المحددة في إعداد الشعار." logo_dark: "بديل الألوان الداكنة لإعداد الموقع `logo`" logo_small_dark: "بديل الألوان الداكنة لإعداد الموقع `logo small`" mobile_logo_dark: "بديل الألوان الداكنة لإعداد الموقع `mobile logo`" @@ -2002,11 +2033,15 @@ ar: manifest_icon: "الصورة المُستخدَمة كشعار/صورة البداية على Android. سيتم تغيير حجمها تلقائيًا إلى 512 × 512. وإذا تركتها فارغة، فسيتم استخدام large_icon." manifest_screenshots: "لقطات شاشة تعرض ميزات المثيل ووظيفته على صفحة رسالة التثبيت الخاصة به. يجب أن تكون جميع الصور من تحميلات محلية وبالأبعاد نفسها." favicon: "الرمز المفضَّل لموقعك، راجع https://en.wikipedia.org/wiki/Favicon للعمل بشكلٍٍ صحيح على شبكة توصيل المحتوى، يجب أن تكون الصورة بتنسيق png. سيتم تغيير حجمها إلى 32 × 32. وإذا تركتها فارغة، فسيتم استخدام large_icon." + apple_touch_icon: "الشعار المُستخدَم على أجهزة Apple اللمسية. سيتم تغيير حجمها تلقائيًا إلى 180x180. وإذا تركتها فارغة، فسيتم استخدام large_icon." opengraph_image: "صورة opengraph افتراضية، يتم استخدامها عندما لا تحتوي الصفحة على صورة أخرى مناسبة. وإذا تركتها فارغة، فسيتم استخدام large_icon." x_summary_large_image: "بطاقة Twitter من نوع \"summary large image\" (يجب أن تكون على الأقل بعرض 280 بكسل وارتفاع 150 بكسل، ولا يمكن أن تكون بصيغة .svg). إذا تُرك هذا الحقل فارغًا، يتم إنشاء البيانات الوصفية التقليدية باستخدام opengraph_image بشرط ألا تكون أيضًا بصيغة .svg" notification_email: "عنوان البريد الإلكتروني المُستخدَم في حقل \"من:\" عند إرسال جميع رسائل النظام الأساسية. يجب تعيين سجلات SPF وDKIM وreverse PTR للنطاق المحدَّد هنا بشكلٍٍ صحيح لتصل الرسالة الإلكترونية." + email_custom_headers: "قائمة برؤوس البريد الإلكتروني المخصصة" email_subject: "صيغة الموضوع القابلة للتخصيص للبريد الإلكتروني القياسي. راجع https://meta.discourse.org/t/customizing-specific-system-email-templates/88323" detailed_404: "يوفِّر مزيدًا من التفاصيل للمستخدمين بشأن سبب عدم تمكُّنهم من الوصول إلى موضوع معيَّن. ملاحظة: هذا الإعداد أقل أمانًا لأن المستخدمين سيعرفون إذا كان عنوان URL مرتبطًا بموضوع صالح." + enforce_second_factor: "مطالبة المستخدمين بتفعيل المصادقة الثنائية (2FA) قبل أن يتمكنوا من الوصول إلى واجهة مستخدم Discourse. لا يؤثر هذا الإعداد على المصادقة عبر واجهة برمجة التطبيقات (API) أو مقدمي المصادقة من نوع \"DiscourseConnect\". إذا تم تفعيل الخيار enforce_second_factor_on_external_auth، فلن يتمكن المستخدمون من تسجيل الدخول باستخدام مقدمي المصادقة الخارجيين بعد إعداد المصادقة الثنائية." + enforce_second_factor_on_external_auth: "مطالبة المستخدمين باستخدام المصادقة الثنائية (2FA) في جميع الأوقات. عند تفعيل هذا الإعداد، سيتم منع المستخدمين من تسجيل الدخول عبر طرق المصادقة الخارجية مثل تسجيل الدخول بحساب تواصل اجتماعي إذا تم تفعيل المصادقة الثنائية لديهم. عند تعطيله، سيحتاج المستخدمون فقط لتأكيد المصادقة الثنائية عند تسجيل الدخول باستخدام اسم المستخدم وكلمة المرور. راجع أيضًا إعداد enforce_second_factor." force_https: "فرض استخدام HTTPS فقط على الموقع. تحذير: لا تقم بتفعيل هذا الإعداد إلا بعد التأكد من أن HTTPS مُعد بالكامل ويعمل فى جميع أنحاء الموقع! هل تحقَّقت من شبكة توصيل المحتوى (CDN)، وعمليات تسجيل الدخول على جميع شبكات التواصل الاجتماعى، وأي شعارات أو تبعيات خارجية للتأكد من أنها جميعًا متوافقه مع HTTPS؟" summary_score_threshold: "الحد الأدنى من النقاط المطلوبة لتضمين منشور في \"تلخيص هذا الموضوع\"" summary_posts_required: "الحد الأدنى من عدد المنشورات في الموضوع قبل تفعيل \"تلخيص هذا الموضوع\". سيتم تطبيق التغييرات على هذا الإعداد بأثر رجعي في غضون أسبوع." @@ -2064,7 +2099,10 @@ ar: ga_universal_domain_name: "اسم نطاق Google Universal Analytics، على سبيل المثال: eg: mysite.com؛ راجع https://google.com/analytics" ga_universal_auto_link_domains: "تفعيل تتبُّع Google Universal Analytics عبر النطاقات. ستتم إضافة معرِّف العميل إلى الروابط الصادرة إلى هذه النطاقات. راجع دليل التتبُّع عبر النطاقات من Google." gtm_container_id: "معرِّف حاوية Google Tag Manager. على سبيل المثال: GTM-ABCD12E.
ملاحظة: لاستخدام GTM عند تفعيل سياسة أمان المحتوى (CSP)، راجع الوثائق الموجودة على التعريف: استخدام الحروف غير المميَّزة في البرامج النصية في Google Tag Manager." + google_site_verification_token: رمز التحقق من Google Search Console. سيتم تضمينه كوسم تعريفي في رأس صفحة HTML. enable_escaped_fragments: "ارجع إلى واجهة برمجة تطبيقات Ajax-Crawling من Google إذا لم يتم اكتشاف زاحف ويب. راجع https://developers.google.com/webmasters/ajax-crawling/docs/learn-more" + moderators_manage_categories: "السماح للمشرفين بإنشاء الفئات وإدارتها" + moderators_manage_groups: "السماح للمشرفين بإنشاء المجموعات وإدارتها" moderators_change_post_ownership: "السماح للمشرفين بتغيير ملكية المنشور" cors_origins: "الأصول المسموح بها لطلبات الموارد متعددة المصادر (CORS). بجب أن يتضمَّن كل مصدر http:// أو https://. ويجب تعيين متغير البيئة للقيمة DISCOURSE_ENABLE_CORS على True لتفعيل CORS." use_admin_ip_allowlist: "لا يمكن للمسؤولين تسجيل الدخول إلا إذا كانوا على عنوان IP محدَّد في قائمة عناوين IP الخاضعة للمراقبة (المسؤول > السجلات > عناوين IP الخاضعة للمراقبة)." @@ -2076,9 +2114,9 @@ ar: blocked_crawler_user_agents: "الكلمة الفريدة غير حساسة لحالة الأحرف في سلسلة وكيل المستخدم والتي تحدِّد متتبعات ارتباطات الويب التي لا ينبغي السماح لها بالوصول إلى الموقع. لا تنطبق إذا تم تعريف قائمة السماح." slow_down_crawler_user_agents: 'وكلاء المستخدم لبرامج زحف الويب التي يجب أن يكون معدَّلها محدودًا كما تم إعداده في "slow down crawler rate". يجب أن تتكون كل قيمة من 3 أحرف على الأقل.' slow_down_crawler_rate: "إذا تم تحديد slow_down_crawler_user_agents، فسيتم تطبيق هذا المعدَّل على جميع متتبعات ارتباطات الويب (عدد ثواني التأخير بين الطلبات)" + llms_txt: "حمل ملفًا نصيًا ليتم تقديمه على المسار /llms.txt لزواحف النماذج اللغوية الكبيرة (LLM). لمزيد من المعلومات، راجع llmstxt.org." content_security_policy: "تفعيل سياسة أمان المحتوى (CSP). وهي طبقة أمان إضافية تساعد في منع أنواع معيَّنة من الهجمات، بما في ذلك البرمجة العابرة للمواقع (XSS) وحقن البيانات." content_security_policy_report_only: "تفعيل Content-Security-Policy-Report-Only (CSP)" - content_security_policy_collect_reports: "تفعيل جمع تقارير انتهاك سياسة أمان المحتوى في /csp_reports" content_security_policy_frame_ancestors: "تقييد من يمكنه تضمين هذا الموقع في iframes عبر سياسة أمان المحتوى. يمكن التحكُّم في المضيفات المسموح بها في التضمين" content_security_policy_script_src: "مصادر البرامج النصية المسموح بها الإضافية. يتم تضمين المضيف الحالي وCDN بشكلٍ افتراضي. راجع تخفيف هجمات XSS باستخدام سياسة أمان المحتوى. (CSP). يتم تجاهل مصادر المضيف الأخرى عند تفعيل strict-dynamic." invalidate_inactive_admin_email_after_days: "ستحتاج حسابات المسؤولين الذين لم يزوروا الموقع في هذا العدد من الأيام إلى إعادة التحقُّق من صحة عنوان بريدهم الإلكتروني قبل تسجيل الدخول. اضبط القيمة على 0 للإيقاف." @@ -2106,6 +2144,7 @@ ar: top_page_default_timeframe: "الفترة الزمنية الافتراضية للصفحة العليا للمستخدمين المجهولين (يتم ضبطها تلقائيًا للمستخدمين الذين سجَّلوا الدخول بناءً على زيارتهم الأخيرة)." moderators_view_emails: "السماح للمشرفين بعرض عناوين البريد الإلكتروني للمستخدمين." moderators_view_ips: "السماح للمشرفين بعرض عناوين IP للمستخدمين." + moderators_change_trust_levels: "السماح للمشرفين بتغيير مستويات الثقة للمستخدمين." prioritize_username_in_ux: "إظهار اسم المستخدم أولًا على صفحة المستخدم وبطاقة المستخدم والمنشورات (عند إظهار الاسم المتوقف أولًا)" enable_rich_text_paste: "تفعيل التحويل التلقائي من HTML إلى Markdown عند لصق نص في أداة الإنشاء" send_old_credential_reminder_days: "التذكير ببيانات الاعتماد القديمة بعد عدد الأيام" @@ -2116,6 +2155,8 @@ ar: whispers_allowed_groups: "السماح بالاتصالات الخاصة داخل الموضوعات لأعضاء المجموعات المحدَّدة." hidden_post_visible_groups: "السماح لأعضاء تلك المجموعات بعرض المنشورات المخفية. يمكن دائمًا للمستخدمين من فريق العمل عرض المنشورات المخفية." allow_index_in_robots_txt: "حدِّد في robots.txt أن هذا الموقع مسموح بفهرسته في محركات بحث الويب. يمكنك تجاوز robots.txt الخاص بك هنا. تحذير: يمكن أن تحول القواعد التي لم يتم تكوينها بشكلٍ صحيح دون تتبع ارتباطات موقعك كما هو متوقَّع." + blocked_email_domains: "قائمة بنطاقات البريد الإلكتروني التي لا يُسمح للمستخدمين بتسجيل حسابات باستخدامها. يتم التعامل تلقائيًا مع النطاقات الفرعية للنطاقات المحددة. لا يتم دعم رموز البدل * و?. مثال: mailinator.com" + allowed_email_domains: "قائمة بنطاقات البريد الإلكتروني التي يجب على المستخدمين تسجيل حساباتهم من خلالها. يتم التعامل تلقائيًا مع النطاقات الفرعية للنطاقات المحددة. لا يتم دعم رموز البدل * و?. تحذير: لن يُسمح للمستخدمين الذين يمتلكون نطاقات بريد إلكتروني غير المدرجة بالتسجيل!" normalize_emails: "تحقَّق مما إذا كان البريد الإلكتروني الذي تم تطبيعه فريدًا. يزيل البريد الإلكتروني الذي تم تطبيعه جميع النقاط من اسم المستخدم وكل شيء بين الرمزين + و@." auto_approve_email_domains: "ستتم الموافقة تلقائيًا على المستخدمين ذوي عناوين البريد الإلكتروني التابعة للنطاقات المُدرَجة في هذه القائمة. رمزا البدل * و؟ غير مدعومَين." hide_email_address_taken: "عدم إعلام المستخدمين بوجود حساب بعنوان بريد إلكتروني معيَّن في أثناء التسجيل أو في أثناء عملية \"نسيت كلمة المرور\". طلب البريد الإلكتروني الكامل لطلبات \"نسيت كلمة المرور\"." @@ -2149,6 +2190,7 @@ ar: auth_overrides_email: "يستبدل عنوان البريد الإلكتروني المحلي بعنوان بريد إلكتروني خارجي للموقع عند كل عملية تسجيل دخول، ويمنع التغييرات المحلية. ينطبق هذا الإعداد على جميع موفِّري المصادقة. (تحذير: يمكن أن تحدث تضاربات بسبب تطبيع عناوين البريد الإلكتروني المحلية)" auth_overrides_username: "يستبدل اسم المستخدم المحلي باسم مستخدم خارجي للموقع عند كل عملية تسجيل دخول، ويمنع التغييرات المحلية. ينطبق هذا الإعداد على جميع موفِّري المصادقة. (تحذير: يمكن أن تحدث تضاربات بسبب الاختلافات في طول/متطلبات اسم المستخدم)" auth_overrides_name: "يستبدل الاسم الكامل المحلي باسم كامل خارجي للموقع عند كل عملية تسجيل دخول، ويمنع التغييرات المحلية. ينطبق هذا الإعداد على جميع موفِّري المصادقة." + auth_overrides_avatar: "يستبدل الصورة الرمزية المحلية بالصورة الرمزية الخاصة بالموقع الخارجي عند كل تسجيل دخول، ويمنع أي تغييرات محلية. ينطبق هذا على جميع مقدمي المصادقة." discourse_connect_overrides_avatar: "يستبدل الصورة الرمزية للمستخدم بالصورة الرمزية للموقع الخارجي من حمولة DiscourseConnect. في حالة التفعيل، لن يتم السماح للمستخدمين بتحميل الصور الرمزية على Discourse." discourse_connect_overrides_location: "يستبدل موقع المستخدم بموقع خارجي من حمولة DiscourseConnect ويمنع التغييرات المحلية." discourse_connect_overrides_website: "يستبدل الموقع الإلكتروني للمستخدم بموقع خارجي من حمولة DiscourseConnect ويمنع التغييرات المحلية." @@ -2160,6 +2202,7 @@ ar: enable_local_logins_via_email: "السماح للمستخدمين بطلب رابط تسجيل الدخول بنقرة واحدة ليتم إرساله إليهم عبر البريد الإلكتروني" allow_new_registrations: "السماح بعمليات تسجيل جديدة من المستخدمين. يمكنك إلغاء تحديد هذا الإعداد لمنع أي شخص من إنشاء حساب جديد." enable_signup_cta: "إظهار إشعار للمستخدمين المجهولين العائدين تطالبهم بالاشتراك للحصول على حساب." + enable_discourse_id: "تفعيل المصادقة من خلال معرف Discourse، وهي خدمة تسجيل دخول موحد (SSO) تتيح للمستخدمين تسجيل الدخول إلى عدة مواقع Discourse باستخدام حساب واحد فقط. يتم دعم مقدمي خدمة تسجيل الدخول بحساب تواصل اجتماعي الشائعين مثل Google وFacebook وApple وGitHub دون الحاجة إلى أي إعداد إضافي. لمزيد من التفاصيل، تفضل بزيارة id.discourse.com." enable_google_oauth2_logins: "تفعيل مصادقة Google Oauth2. هذه هي طريقة المصادقة التي تدعمها Google حاليًا. وتتطلَّب مفتاحًا ورمزًا سريًا. راجع إعداد تسجيل الدخول عبر Google لمنصة Discourse." google_oauth2_client_id: "معرِّف العميل الفريد الذي يوفره تطبيق Google الخاص بك، والذي يُستخدم في عملية المصادقة." google_oauth2_client_secret: "الرمز السري للعميل لتطبيق Google" @@ -2228,6 +2271,7 @@ ar: invite_link_max_redemptions_limit_users: "لا يمكن أن يتجاوز الحد الأقصى لعمليات الاسترداد المسموح بها لروابط الدعوة التي تم إنشاؤها بواسطة مستخدمين منتظمين هذه القيمة." alert_admins_if_errors_per_minute: "عدد الأخطاء في الدقيقة لظهور تنبيه للمسؤول. تعطِّل القيمة \"0\" هذه الميزة. ملاحظة: تتطلَّب إعادة التشغيل." alert_admins_if_errors_per_hour: "عدد الأخطاء في الساعة لتشغيل تنبيه المسؤول. يؤدي تعيين القيمة على 0 إلى إيقاف هذه الميزة. ملاحظة: يتطلَّب إعادة التشغيل." + categories_topics: "عدد الموضوعات المراد عرضها في صفحة /categories. إذا تم ضبط القيمة على 0، فسيتم تعيين قيمة تلقائيًا للحفاظ على تماثل العمودين. ينطبق هذا فقط على أنماط صفحة الفئات \n\"الفئات وأحدث/أفضل الموضوعات\"." suggested_topics: "عدد الموضوعات المقترحة التي تظهر أسفل الموضوع" limit_suggested_to_category: "عرض الموضوعات من الفئة الحالية فقط في الموضوعات المقترحة" suggested_topics_max_days_old: "يجب ألا يزيد عمر الموضوعات المقترحة عن n من الأيام." @@ -2254,6 +2298,7 @@ ar: selectable_avatars_mode: "اسمح للمستخدمين بتحديد صورة رمزية من قائمة selectable_avatars وقصر عمليات تحميل الصور الرمزية المخصَّصة على مستوى الثقة المحدَّد." selectable_avatars: "تحديد مجموعة من الصور الرمزية التي يمكن للمستخدمين تحديد صورة ملفهم الشخصي منها. سيظهر الاختيار أثناء إنشاء ملف تعريف المستخدم أو عند تحديث صورة ملف التعريف." allow_all_attachments_for_group_messages: "السماح بجميع مرفقات البريد الإلكتروني لرسائل المجموعات" + image_quality: "حدد مستوى جودة الصور التي يتم تحميلها على موقعك. كلما كانت الجودة أقل، كانت أحجام الملفات أصغر." png_to_jpg_quality: "جودة ملف JPG المحوَّل (1 هي أقل جودة، و99 هي أفضل جودة، و100 للإيقاف)" recompress_original_jpg_quality: "جودة ملفات الصور المحمَّلة (1 هي أقل جودة، و99 هي أفضل جودة، و100 للإيقاف)" image_preview_jpg_quality: "جودة ملفات الصورة التي تم تغيير حجمها (1 هي أقل جودة، و99 هي أفضل جودة، و100 للإيقاف)" @@ -2267,6 +2312,7 @@ ar: video_conversion_enabled: "تفعيل ميزة تحويل مقاطع الفيديو للملفات المحملة. يُمكّن هذا من تحويل الفيديوهات إلى صيغ متوافقة مع متصفحات الويب." video_conversion_service: "خدمة تحويل الفيديو التي ستُستخدم لمعالجة مقاطع الفيديو المحملة." mediaconvert_role_arn: "ARN الخاص بدور IAM في AWS لخدمة MediaConvert. مطلوب عند استخدام AWS MediaConvert لتحويل مقاطع الفيديو." + mediaconvert_output_subdirectory: "الدليل الفرعي داخل حاوية S3 الذي يُكتب فيه مقاطع الفيديو المحوّلة مؤقتًا بواسطة MediaConvert قبل نقلها إلى الموقع النهائي للتحميل." min_ratio_to_crop: "النسبة المُستخدَمة لاقتصاص الصور الطويلة. أدخل نتيجة العرض/الارتفاع." simultaneous_uploads: "أقصى عدد من الملفات التي يمكن سحبها وإسقاطها في أداة الإنشاء" default_invitee_trust_level: "مستوى الثقة الافتراضي (0-4) للمستخدمين المدعوين" @@ -2379,9 +2425,12 @@ ar: num_flaggers_to_close_topic: "الحد الأدنى لعدد البلاغات المطلوب لإيقاف موضوع مؤقتًا للتدخل" num_hours_to_close_topic: "عدد الساعات المطلوبة لإيقاف موضوع مؤقتًا للتدخل" auto_respond_to_flag_actions: "تفعيل الرد التلقائي عند تجاهل بلاغ" + min_first_post_typing_time: "الحد الأدنى للمدة الزمنية التي يجب على المستخدم الكتابة خلالها، إذا لم يتم استيفاء الحد، فسيدخل المنشور تلقائيًا في قائمة انتظار الموافقة. قم بالتعيين إلى 0 للإيقاف (لا يوصى بذلك)" + fast_typing_threshold: "الحد الأدنى من الوقت الذي يجب أن يكتب فيه المستخدم منشوره الأول. إذا لم يتم استيفاء الحد الأدنى، فسيدخل المنشور تلقائيًا في قائمة المراجعة. الحد الأدنى هو ثانية واحدة، والقياسي هو 3 ثوانٍ، والأعلى هو 5 ثوانٍ." auto_silence_fast_typers_on_first_post: "كتم المستخدمين تلقائيًا عندما لا يستوفون `fast typing threshold`" auto_silence_fast_typers_max_trust_level: "الحد الأقصى لمستوى الثقة المطلوب لكتم أصحاب الطباعة السريعة تلقائيًا" auto_silence_first_post_regex: "التعبير العادي غير الحساس لحالة الأحرف الذي إذا تم تمريره سيؤدي إلى كتم أول منشور بواسطة المستخدم وإرساله إلى قائمة انتظار الموافقة. مثال: ستؤدي كتابة raging|a[bc]a إلى كتم جميع المنشورات التي تتضمَّن raging أو aba أو aca في البداية. ينطبق ذلك على أول منشور فقط. تم إيقافه: استخدم \"كتم الكلمات المُراقَبة\" بدلًا منه." + moderator_guide_topic: "الموضوع الذي يوضح طريقة إدارة مجتمعك. سيكون الرابط مرئيًا في قائمة انتظار المراجعة للمشرفين والمسؤولين." reviewable_claiming: "هل يجب المطالبة بالمحتوى القابل للمراجعة قبل اتخاذ إجراء بشأنه؟" reviewable_default_topics: "عرض المحتوى القابل للمراجعة مُجمَّعًا حسب الموضوع بشكلٍٍ افتراضي" reviewable_default_visibility: "عدم عرض العناصر القابلة للمراجعة ما لم تستوفي هذه الأولوية" @@ -2390,12 +2439,14 @@ ar: allow_all_users_to_flag_illegal_content: "سيشاهد المستخدمون المجهولون رسالة تفيد بضرورة إرسال بريد إلكتروني إلى المسؤولين للإبلاغ عن المحتوى غير القانوني. هذا الإعداد له الأولوية على خيار \"المجموعات المسموح لها بالإبلاغ عن المنشورات\"." email_address_to_report_illegal_content: "إذا تم ترك الحقل فارغًا، فسيتم استخدام البريد الإلكتروني الافتراضي لمسؤول الموقع." cooldown_hours_until_reflag: "الوقت الذي يجب على المستخدمين انتظاره قبل أن يتمكنوا من إعادة الإبلاغ عن منشور" + slow_mode_prevents_editing: "هل يمنع وضع \"الوضع البطيء\" التعديل بعد انتهاء \"فترة السماح بالتعديل\"؟" reply_by_email_enabled: "تنشيط الميزة التي تسمح للمستخدمين بالرد على الموضوعات عبر البريد الإلكتروني مباشرةً، بدلًا من مطالبتهم بتسجيل الدخول إلى الموقع. راجع الدليل على Meta للمزيد من المعلومات." reply_by_email_address: "نموذج لعنوان البريد الإلكتروني الوارد عند الرد عبر البريد الإلكتروني، مثلًا: %%{reply_key}@reply.example.com أو replies+%%{reply_key}@example.com" alternative_reply_by_email_addresses: "قائمة النماذج البديلة للرد عبر البريد الإلكتروني على عناوين البريد الإلكتروني الوارد. مثال: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "استخدام HTML بدلًا من النص للرسائل الإلكترونية الواردة" strip_incoming_email_lines: "إزالة المسافات السابقة واللاحقة من كل سطر من الرسائل الإلكترونية الواردة" - disable_emails: "منع Discourse من إرسال أي نوع من الرسائل الإلكترونية. حدِّد \"نعم\" لإيقاف الرسائل الإلكترونية إلى جميع المستخدمين. حدِّد \"غير فريق العمل\" لإيقاف الرسائل الإلكترونية للمستخدمين من غير فريق العمل فقط." + disable_emails: "منع Discourse من إرسال أي نوع من الرسائل الإلكترونية. حدِّد \"نعم\" لإيقاف الرسائل الإلكترونية الصادرة إلى جميع المستخدمين. حدِّد \"غير فريق العمل\" لإيقاف الرسائل الإلكترونية للمستخدمين من غير فريق العمل فقط." + allow_email_invites: "عند تعطيله، لن يتمكن المستخدمون من إرسال رسائل الدعوة عبر Discourse" strip_images_from_short_emails: "إزالة الصور من الرسائل الإلكترونية التي يقل حجمها عن 2800 بايت" short_email_length: "تحديد الحد الأقصى للطول، بالبايت، ليتم تصنيف البريد الإلكتروني على أنه \"قصير\" وإزالة الصور. إذا لم يتجاوز حجم الرسالة الإلكترونية هذا الإعداد، فستتم إزالة أي صور (مثل الصور الرمزية والرموز التعبيرية) ضمن الرسالة الإلكترونية." display_name_on_email_from: "عرض الأسماء الكاملة في حقول \"من:\" في الرسائل الإلكترونية" @@ -2413,6 +2464,7 @@ ar: mailgun_api_key: "مفتاح API السري لمحرك Mailgun والمُستخدَم في التحقُّق من رسائل خطاف الويب" sendgrid_verification_key: "مفتاح التحقق Sendgrid المُستخدَم للتحقق من رسائل خطاف الويب." mailjet_webhook_token: "الرمز المُستخدَم للتحقق من حمولة خطاف الويب. يجب تمريره في صورة معلمة الاستعلام 't' لخطاف الويب؛ على سبيل المثال: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "الرمز المُستخدَم للتحقق من حمولة خطاف الويب. يجب تمريره في صورة معلمة الاستعلام 't' لخطاف الويب؛ على سبيل المثال: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "مفتاح المصادقة Mandrill المُستخدَم للتحقق من رسائل خطاف الويب." postmark_webhook_token: "الرمز المُستخدَم للتحقق من حمولة خطاف الويب. يجب تمريره في صورة معلمة الاستعلام 't' لخطاف الويب؛ على سبيل المثال: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "الرمز المُستخدَم للتحقق من حمولة خطاف الويب. يجب تمريره في صورة معلمة الاستعلام 't' لخطاف الويب؛ على سبيل المثال: https://example.com/webhook/sparkpost?t=supersecret" @@ -2455,6 +2507,7 @@ ar: relative_date_duration: "عدد الأيام بعد النشر التي سيتم بعدها عرض تواريخ النشر بشكلٍٍ نسبي (7 أيام) بدلًا من عرضها بشكلٍٍ مطلق (20 فبراير)" delete_user_max_post_age: "عدم السماح بحذف المستخدمين الذين مضى على منشورهم الأول أكثر من (x) يوم" delete_all_posts_max: "الحد الأقصى لعدد المنشورات التي يمكن حذفها دفعة واحدة باستخدام الزر \"حذف جميع المنشورات\". إذا كان لدى المستخدم أكثر من هذا العدد من المنشورات، فلا يمكن حذف جميع المنشورات دفعة واحدة ولا يمكن حذف المستخدم." + delete_all_posts_background_threshold: "الحد الأقصى لعدد المنشورات التي يمكن حذفها دفعة واحدة باستخدام زر \"حذف جميع المنشورات\" قبل أن تتم معالجة الحذف في الخلفية." delete_user_self_max_post_count: "الحد الأقصى لعدد المنشورات التي يمكن للمستخدم إنشاؤها مع السماح بالحذف الذاتي للحساب. قم بالتعيين إلى -1 لإيقاف الحذف الذاتي للحساب." username_change_period: "الحد الأقصى لعدد الأيام بعد التسجيل التي يمكن للحسابات فيها تغيير اسم المستخدم (0 لعدم السماح بتغيير اسم المستخدم)" email_editable: "السماح للمستخدمين بتغيير عنوان بريدهم الإلكتروني بعد التسجيل" @@ -2483,14 +2536,17 @@ ar: enable_category_group_moderation: "السماح للمجموعات بالإشراف على المحتوى في فئات معيَّنة" group_in_subject: "لتعيين %%{optional_pm} في موضوع الرسالة الإلكترونية على اسم المجموعة الأولى في رسالة خاصة، راجع: تخصيص تنسيق الموضوع للرسائل الإلكترونية القياسية" allow_anonymous_mode: "يُفعّل هذا الخيار إمكانية انتقال الأعضاء إلى الوضع المجهول عند النشر. عند تفعيله، يمكن للمستخدمين اختيار إخفاء هويتهم عند إنشاء منشورات أو موضوعات في جميع أنحاء الموقع. انظر أيضًا `allow anonymous likes`." + allow_likes_in_anonymous_mode: "فعّل هذا الإعداد للسماح للمستخدمين الذين يتصفحون موقعك بشكل مجهول بالإعجاب بالمنشورات. عند التفعيل، يمكن للمستخدمين اختيار إخفاء هويتهم عند الإعجاب بالمنشورات أو الموضوعات في جميع أنحاء الموقع. يتطلب هذا الإعداد تفعيل خيار \"السماح بالوضع المجهول\" (allow anonymous mode)." + anonymous_posting_allowed_groups: "المجموعات المسموح لها بتفعيل خاصية النشر المجهول. يتطلب هذا الإعداد تفعيل خيار \"السماح بالوضع المجهول\"." anonymous_account_duration_minutes: "لحماية إخفاء الهوية، أنشئ حسابًا مجهولًا جديدًا كل N دقيقة لكل مستخدم. مثال: إذا تم التعيين إلى 600، سيتم إنشاء حساب مجهول جديد بمجرد مرور 600 دقيقة على آخر منشور وتحوُّل المستخدم إلى مجهول." - hide_user_profiles_from_public: "إيقاف بطاقات المستخدمين والملفات الشخصية لهم ودليل المستخدم للمستخدمين المجهولين" hide_new_user_profiles: "إخفاء الملفات الشخصية من مستوى الثقة 1 أو أقل عن العامة أو المستخدمين من مستوى الثقة 1 حتى ينشروا لأول مرة. يتم إيقاف هذه الميزة بشكلٍ غير مشروط على المواقع التي تتطلب موافقة المستخدمين (must_approve_users) والمواقع التي تتطلب دعوة فقط (invite_only)." allow_users_to_hide_profile: "السماح للمستخدمين بإخفاء ملفاتهم الشخصية ووجودهم" hide_user_activity_tab: "إخفاء علامة تبويب النشاط في ملفات تعريف المستخدم باستثناء المسؤول والذات." delete_associated_accounts_on_password_reset: "حذف الحساب المرتبط بالمستخدم عندما يغير المستخدم كلمة المرور." allow_featured_topic_on_user_profiles: "السماح للمستخدمين بعرض رابط لموضوع على بطاقة المستخدم والملف الشخصي" show_inactive_accounts: "السماح للمستخدمين الذين سجَّلوا الدخول باستعراض الملفات الشخصية للحسابات غير النشطة" + hide_silencing_reasons: "عدم عرض أسباب تقييد أو كتم المستخدم علنًا على صفحة ملفه الشخصي." + hide_suspension_reasons: "عدم عرض أسباب التعليق بشكلٍٍ عام في الملفات الشخصية للمستخدمين" log_personal_messages_views: "تسجيل مرات عرض الرسائل الشخصية بواسطة المسؤول للمستخدمين/المجموعات الأخرى" ignored_users_count_message_threshold: "إرسال إشعار إلى المشرفين إذا تم تجاهل مستخدم معيَّن بواسطة هذا العدد من المستخدمين الآخرين" ignored_users_message_gap_days: "وقت الانتظار قبل إرسال إشعار إلى المشرفين مرة أخرى بشأن مستخدم تم تجاهله بواسطة الكثيرين" @@ -2498,11 +2554,13 @@ ar: clean_up_unused_staged_users_after_days: "عدد الأيام قبل إزالة مستخدم مؤقت غير مُستخدَم (مستوى الثقة 0 بلا أي منشورات). اضبط القيمة على 0 لإيقاف التنظيف." user_selected_primary_groups: "السماح للمستخدمين بتعيين مجموعتهم الأساسية" max_notifications_per_user: "الحد الأقصى من الإشعارات لكل مستخدم، سيتم حذف الإشعارات القديمة إذا تم تجاوز هذا الرقم. يتم فرض هذا الإعداد أسبوعيًا. اضبط القيمة على 0 للإيقاف." + allowed_user_website_domains: "سيتم التحقُّق من الموقع الإلكتروني للمستخدم مقابل هذه النطاقات." allow_profile_backgrounds: "السماح للمستخدمين بتحميل خلفيات للملفات الشخصية" get_a_room_threshold: "عدد المنشورات التي يجب على المستخدم إنشاؤها للشخص نفسه في الموضوع نفسه قبل أن يتم تحذيره" dont_feed_the_trolls_threshold: "عدد البلاغات من المستخدمين الآخرين قبل تحذير المستخدم" enable_mobile_theme: "تستخدم الأجهزة الجوَّالة سمة متوافقة مع الجوَّال، مع إمكانية التبديل إلى الموقع الكامل. يمكنك إيقاف هذا إذا كنت تريد استخدام ورقة أنماط مخصَّصة تستجيب بشكلٍٍ كامل." dominating_topic_minimum_percent: "ما النسبة المئوية للمنشورات التي يجب على المستخدم إنشاؤها في الموضوع قبل أن يتم تذكيره بالسيطرة الزائدة على الموضوع." + pm_warn_user_last_seen_months_ago: "تحذير المستخدمين، عند إنشاء رسالة شخصية، عندما يكون المستلم المستهدف لم يظهر منذ أكثر من n من الأشهر." suppress_uncategorized_badge: "عدم إظهار الشارة للموضوعات غير المصنَّفة في قوائم الموضوعات" header_dropdown_category_count: "عدد الفئات التي يمكن عرضها في القائمة المنسدلة للرأس" permalink_normalizations: "تطبيق التعبير العادي التالي قبل مطابقة الروابط الثابتة، على سبيل المثال: سيؤدي استخدام /(topic.*)\\?.*/\\1 إلى إزالة سلاسل الاستعلام من مسارات الموضوع. التنسيق هو regex+string. استخدم \\1 وما إلى ذلك للوصول إلى الالتقاطات." @@ -2576,6 +2634,7 @@ ar: disable_watched_word_checking_in_user_fields: "إيقاف فحص الكلمات المراقبة في حقول المستخدم" watched_words_regular_expressions: "يسمح باستخدام التعبيرات العادية لتصفية الكلمات. إذا تم تفعيلها، فإن هذه الميزة تعمل على تجميع الكلمات الحساسة حسب حساسيتها لحالة الأحرف. ثم تقوم بتجميع جميع الكلمات المحددة في تعبير عادي واحد، وإضافة حدود الكلمات للكلمات المراقبة العادية. وبالتالي، تضيف طريقة التصفية القائمة على التعبيرات العادية طبقة إضافية من التحكم في تعديل المحتوى من خلال دعم أنماط الكلمات الأكثر تعقيدًا. يسمح الإعداد أيضًا باستبدال النص الأصلي بسهولة بالنص البديل الذي تختاره." enable_fast_edit: "يضيف زرًا إلى قائمة اختيار المنشور لتحرير اختيار صغير مضمنًا." + old_post_notice_days: "عدد الأيام التي ستختفي بعدها إشعارات المنشورات الخاصة بالمستخدمين الجدد والراجعين، بينما ستظل إشعارات المنشورات الرسمية مرئية دائمًا." new_user_notice_tl: "الحد الأدنى لمستوى الثقة المطلوب لرؤية الإشعارات بشأن منشور مستخدم جديد" returning_user_notice_tl: "الحد الأدنى من مستوى الثقة المطلوب لرؤية الإشعارات بشأن منشور مستخدم عائد" returning_users_days: "عدد الأيام التي يجب أن تمر قبل اعتبار المستخدم عائدًا" @@ -2657,6 +2716,7 @@ ar: force_lowercase_tags: "فرض استخدام الحروف الصغيرة فقط في جميع الوسوم الجديدة" create_post_for_category_and_tag_changes: "إنشاء منشور همس عندما تتغير فئة الموضوع أو وسومه، يتطلب تفعيل منشورات الهمس." automatically_clean_unused_tags: "حذف الوسوم تلقائيًا ما لم يتم استخدامها في أي موضوعات أو رسائل شخصية على أساس يومي." + default_watched_precedence_over_muted: "إشعار المستخدمين بالموضوعات الموجودة في الفئات أو الوسوم التي يتابعونها، والتي تنتمي أيضًا إلى فئة أو وسم قاموا بكتمه" company_name: "اسم شركتك أو مؤسستك. إذا تركته فارغًا، فلن يتم توفير شروط الخدمة أو إشعار الخصوصية النموذجي." governing_law: "تحديد الولاية القضائية التي تحكم الجوانب القانونية للموقع، بما في ذلك شروط الخدمة وسياسة الخصوصية. عادةً ما تكون هذه هي الدولة أو الولاية التي تم تسجيل الشركة التي تدير الموقع فيها أو تدير أعمالها." city_for_disputes: "تحديد المدينة التي سيتم استخدامها كولاية قضائية لحل أي نزاعات تتعلق باستخدام هذا المنتدى. عادةً ما يتم تضمين هذه المعلومات في المستندات القانونية مثل شروط خدمة المنتدى." @@ -2672,10 +2732,11 @@ ar: sitemap_page_size: "عدد عناوين URL المراد تضمينها في كل صفحة من خريطة الموقع. الحد الأقصى: 50.000" enable_user_status: "السماح للمستخدمين بتحديد رسالة حالة مخصَّصة (رمز تعبيري + وصف)" enable_user_tips: "تفعيل نصائح المستخدم الجديدة التي توضِّح الميزات الرئيسية للمستخدمين" + short_title: "سيُستخدم العنوان المختصر على الشاشة الرئيسية للمستخدم، أو في مشغّل التطبيقات، أو في أماكن أخرى قد تكون المساحة فيها محدودة. يجب أن يقتصر العنوان على 12 حرفًا. يرجى ملاحظة أن تغيير هذا العنوان قد يؤدي إلى ظهور رسالة لمستخدمي تطبيق الويب التقدمي (PWA) تطلب منهم تحديث التطبيق أو إلغاء تثبيته." dashboard_hidden_reports: "السماح بإخفاء التقارير المحدَّدة من لوحة المعلومات" dashboard_visible_tabs: "اختيار علامات التبويب المرئية في لوحة المعلومات" dashboard_general_tab_activity_metrics: "اختيار التقارير التي سيتم عرضها كمقاييس للنشاط في علامة التبويب \"عام\"" - gravatar_enabled: "تفعيل خدمة Gravatar لصور الحسابات الشخصية للمستخدمين. يمنع هذا الإجراء المستخدمين من تغيير صورهم إلى Gravatar، ولكنه لن يؤثر في من يستخدمها بالفعل." + gravatar_enabled: "تفعيل خدمة Gravatar لصور الحسابات الشخصية للمستخدمين. سيؤدي تعطيل هذا إلى منع المستخدمين من تغيير صورهم إلى Gravatar، ولكنه لن يؤثر في من يستخدمها بالفعل." gravatar_name: "تحديد اسم مقدِّم خدمة Gravatar. يُستخدَم هذا الاسم عادةً لتحديد المصدر الذي يوفر صور Gravatar الرمزية للموقع." gravatar_base_url: "تحديد عنوان URL للوصول إلى واجهة برمجة تطبيقات مقدِّم خدمة Gravatar. يُعد هذا الإعداد بالغ الأهمية لتحويل عناوين البريد الإلكتروني إلى عناوين URL لـ Gravatar حيث يتم تخزين صور الرمزية." gravatar_login_url: "عنوان URL نسبة إلى `gravatar_base_url`، والذي يوفر للمستخدم تسجيل الدخول إلى خدمة Gravatar." @@ -2688,18 +2749,24 @@ ar: suggest_weekends_in_date_pickers: "تضمين عطلات نهاية الأسبوع (السبت والأحد) في اقتراحات منتقي التاريخ (يمكنك إيقاف هذا الإعداد إذا كنت تستخدم Discouse في أيام الأسبوع فقط؛ أي من الاثنين إلى الجمعة)." show_bottom_topic_map: "يظهر خريطة الموضوع أسفل الموضوع عندما يحتوي على 10 ردود أو أكثر." show_topic_map_in_topics_without_replies: "يظهر خريطة الموضوع حتى إذا كان الموضوع لا يحتوي على ردود." + enable_site_owner_onboarding: "يعرض لوحةً على الصفحة الرئيسية للمسؤولين الجدد لمساعدتهم على البدء. أعد تفعيل هذا الإعداد لعرض خطوات الإعداد مرة أخرى." enable_welcome_banner: "عرض بانر في صفحات قائمة الموضوعات الرئيسية بهدف الترحيب بالأعضاء وتمكينهم من إجراء البحث ضمن محتوى الموقع." welcome_banner_image: "تحديد صورة لتُعرض في خلفية بانر الترحيب." welcome_banner_location: "يحدد مكان ظهور بانر الترحيب على الصفحة." welcome_banner_page_visibility: "يحدد الصفحات التي سيظهر فيها بانر الترحيب." + welcome_banner_text_color: "عند ضبط إعداد \"صورة بانر الترحيب\"، استخدم هذا الإعداد لتغيير لون نص البانر لضمان وضوح قراءته. إذا تُرك الحقل فارغًا أو لم يتم تحميل أي صورة، تتحكم السمة النشطة في تحديد اللون." splash_screen: "يعرض شاشة تحميل مؤقتة أثناء تحميل أصول الموقع" + splash_screen_image: "صورة SVG لعرضها على شاشة البداية أثناء تحميل الموقع. يجب أن تستخدم صور SVG المتحركة فقط تحويل CSS أو الرسوم المتحركة المعتمة. استخدم أسماء فريدة لفئات CSS والإطارات الرئيسية. يمكنك استخدام var(--الأساسي) و var(--الثانوي) و var(--الثالث) للإشارة إلى ألوان السمات." navigation_menu: "تحديد القائمة المنسدلة للشريط الجانبي أو الرأس كقائمة التنقل الرئيسية لموقعك. يوصى بالشريط الجانبي." default_navigation_menu_categories: "سيتم عرض الفئات المحدَّدة ضمن قسم فئات قائمة التنقل بشكلٍٍ افتراضي." default_navigation_menu_tags: "سيتم عرض الفئات المحدَّدة ضمن قسم وسوم قائمة التنقل بشكلٍٍ افتراضي." experimental_new_new_view_groups: 'تفعيل قائمة موضوعات جديدة تجمع بين الموضوعات الجديدة وغير المقروءة، ووضع رابط "الكل" في رابط الشريط الجانبي إليها' + enable_form_templates: "فعّل ميزة قوالب النماذج. وبتفعيلها، يمكنك تطبيق نموذج منظم مع التحقق من صحة البيانات كجزء من عملية إنشاء الموضوع." show_preview_for_form_templates: "تفعيل ميزة معاينة قوالب النماذج" lazy_load_categories_groups: "التحميل البطيء لمعلومات الفئة لمستخدمي هذه المجموعات فقط. يؤدي هذا إلى تحسين الأداء على المواقع ذات الفئات المتعددة." enable_auto_grid_images: "يُغلف النظام تلقائيًا الصور ضمن وسوم [grid] عند تحميل 3 صور أو أكثر في أداة الإنشاء." + impersonate_without_logout: "السماح للمسؤولين بانتحال شخصية مستخدم آخر دون الحاجة إلى تسجيل الخروج من حساب المسؤول." + experimental_impersonation_time_limit_minutes: "المدة الزمنية قبل إنهاء جلسة انتحال الشخصية تلقائيًا." page_loading_indicator: "إعداد مؤشر التحميل الذي يظهر في أثناء التنقل في الصفحة داخل Discourse. يكون 'Spinner' مؤشرًا لصفحة كاملة، بينما يعرض 'Slider' شريطًا ضيقًا أعلى الشاشة." show_user_menu_avatars: "إظهار الصور الرمزية للمستخدم في قائمة المستخدم" about_page_hidden_groups: "عدم إظهار أعضاء المجموعات المحدَّدة في صفحة /about" @@ -2712,14 +2779,31 @@ ar: rich_editor: "تفعيل المحرر المنسق في نافذة أداة الإنشاء، ليتمكن جميع المستخدمين من التبديل بين وضع Markdown الحالي ومحرر النصوص المنسقة الجديد، ما يتيح تجربة كتابة أكثر سهولة وملاءمة." default_composition_mode: "اضبط الوضع الافتراضي لأداة الإنشاء في مجتمعك. يوفر وضع النص المنسق تجربة كتابة حديثة ومألوفة لمعظم المستخدمين، بينما قد يكون وضع Markdown مناسبًا للمستخدمين ذوي الخلفية التقنية. يمكن للأعضاء التبديل بين الوضعين باستخدام زر التبديل في شريط أدوات الإنشاء." reviewable_ui_refresh: "المجموعات التي يمكنها استخدام واجهة المستخدم الجديدة التجريبية في قائمة انتظار المراجعة." + viewport_based_mobile_mode: "استخدام عرض نافذة العرض لتحديد أوضاع الهاتف المحمول أو سطح المكتب. سيتم إزالة هذا الإعداد قريبًا. إذا وجدت ضرورة لتعطيله، يرجى إعلامنا على Meta." content_localization_enabled: "يعرض المحتوى المترجم للمستخدمين بناءً على إعدادات لغة المتصفح أو تفضيلات اللغة الخاصة بهم. قد يشمل هذا المحتوى الفئات، والوسوم، والمنشورات، والموضوعات. اللغات المدعومة محددة في إعداد 'اللغات المدعومة لتوطين المحتوى'." + content_localization_supported_locales: "قائمة باللغات المدعومة التي يمكن ترجمة محتوى المستخدم إليها. يتم دائمًا تضمين اللغة الافتراضية للموقع. يتطلب هذا تفعيل خيار \"تمكين توطين المحتوى\"." content_localization_allowed_groups: "المجموعات المسموح لها بتحديث المحتوى المترجم. يتطلب تفعيل إعداد \"توطين المحتوى\"." + content_localization_language_switcher: "عرض أداة لتغيير اللغة في الرأس، ما يتيح للزوار التبديل بين النسخ المترجمة من Discourse والمحتوى المساهم به المستخدمون. يتم استخدام اللغات المعرفة في إعداد \"اللغات المدعومة لتوطين المحتوى\"." + content_localization_crawler_param: "تقديم المحتوى المترجم لزواحف الويب عند تفعيل خيار \"تمكين توطين المحتوى\" وخيار \"تعيين اللغة من المعامل\". يتم تحديد قائمة اللغات المدعومة في إعداد \"اللغات المدعومة لتوطين المحتوى\"." + content_localization_use_default_locale_when_unsupported: "تقديم المحتوى المترجم بلغة الموقع الافتراضية للمستخدمين الذين لا توجد لغتهم المفضلة ضمن \"اللغات المدعومة لتوطين المحتوى\"." + content_localization_allow_author_localization: "السماح للمؤلفين بتحديث الترجمات المحلية لموضوعاتهم ومنشوراتهم الخاصة عبر قائمة المنشور." + fake_upcoming_change: "هذا التغيير الوهمي مزيف ويُستخدم لأغراض الاختبار فقط. لا داعي لترجمة هذه العبارة." + floating_dismiss_topics_on_mobile: "يعرض زرًا عائمًا باسم \"رفض...\" في نسخة الهاتف المحمول لقائمة الموضوعات، ما يسهل الوصول إليه ويحرر مساحة في الجزء العلوي من قائمة الموضوعات." + rename_faq_to_guidelines: "يعيد هذا التغيير تسمية صفحة الأسئلة الشائعة إلى \"الإرشادات\". ستظل صفحة الأسئلة الشائعة متاحة على الرابط /faq. ويستمر إعداد \"رابط الأسئلة الشائعة\" في العمل كما هو." + enable_simplified_category_creation: "يُفعّل هذا الإعداد إنشاء الفئات بطريقة مبسطة مع تقليل عدد الخيارات وتوفير واجهة أكثر نظافة ووضوحًا." + enable_custom_splash_screen: "يتيح بتخصيص شاشة البداية للتحميل باستخدام صورة SVG الخاصة بك. قم بتحميل صورة عبر إعداد \"صورة شاشة البداية\". تحذير: قد يؤثر ذلك سلبًا على نتائج LCP وفهرسة Google." + modernize_foundation_theme: "يطرح هذا التغيير تعديلات تصميمية على سمة Foundation في Discourse." + reporting_improvements: "تحسينات على التنقل والتصميم وسهولة الاستخدام لتقارير مسؤول Discourse." errors: invalid_css_color: "لون غير صالح. أدخِل اسم لون أو قيمة سداسية عشرية." + invalid_datetime: "تنسيق التاريخ والوقت غير صالح. يرجى التأكد من إدخال تاريخ ووقت صحيحين." invalid_email: "عنوان البريد الإلكتروني غير صالح." invalid_username: "لا يوجد مستخدم باسم المستخدم هذا." valid_username: "يوجد مستخدم باسم المستخدم هذا." invalid_group: "لا توجد مجموعة بهذا الاسم." + invalid_svg: "صورة SVG غير صالحة. يجب أن تحتوي على عنصر SVG وألا تحتوي على نصوص برمجية أو معالجات أحداث." + invalid_upload: "التحميل غير صالح أو غير موجود." + invalid_topic: "لا يمكن العثور على أي موضوع مرتبط بهذا المعرف." invalid_integer_min_max: "يجب أن تكون القيمة بين %{min} و%{max}." invalid_integer_min: "يجب أن تكون القيمة %{min} أو أكبر." invalid_integer_max: "لا يمكن أن تكون القيمة أكبر من %{max}." @@ -2765,11 +2849,11 @@ ar: discourse_connect_url_is_empty: "يجب عليك تعيين `discourse connect url` قبل تفعيل هذا الإعداد." enable_local_logins_disabled: "يجب عليك تفعيل `enable local logins` أولًا قبل تفعيل هذا الإعداد." min_username_length_exists: "لا يمكنك تعيين الحد الأدنى لطول اسم المستخدم على قيمة أطول من أقصر اسم مستخدم (%{username})." - min_group_name_length_exists: "لا يمكنك تحديد الحد الأدنى لطول اسم المستخدم ليكون أكبر من أقصر اسم مجموعة (%{group_name})." - min_username_length_range: "لا يمكنك تعيين الحد الأدنى ليكون أكبر من الحد الأقصى." + min_group_name_length_exists: "لا يمكنك تعيين الحد الأدنى لطول اسم المجموعة على قيمة أطول من أقصر اسم مستخدم (%{group_name})." + min_username_length_range: "لا يمكنك تعيين الحد الأدنى لطول اسم المستخدم على قيمة أطول من الحد الأقصى لطول اسم مستخدم." max_username_length_exists: "لا يمكنك تعيين الحد الأقصى لطول اسم المستخدم على قيمة أقصر من أطول اسم مستخدم (%{username})." - max_group_name_length_exists: "لا يمكنك تحديد الحد الأقصى لطول اسم المستخدم ليكون أقل من أطول اسم مجموعة (%{group_name})." - max_username_length_range: "لا يمكنك تعيين الحد الأدنى ليكون أقل من الحد الأقصى." + max_group_name_length_exists: "لا يمكنك تعيين الحد الأقصى لطول اسم المستخدم على قيمة أقصر من أطول اسم مجموعة (%{group_name})." + max_username_length_range: "لا يمكنك تعيين الحد الأقصى لطول اسم المستخدم على قيمة أقل من الحد الأدنى لطول اسم مستخدم." invalid_hex_value: "يجب أن تكون قيم اللون عبارة عن رموز سداسية عشرية مكوَّنة من 6 أرقام." empty_selectable_avatars: "يجب عليك تحميل صورتَين رمزيَّتَين قابلتَين للتحديد على الأقل قبل تفعيل هذا الإعداد." category_search_priority: @@ -2788,6 +2872,7 @@ ar: other: "يجب أن تحتوي القائمة على %{count} قيمة بالضبط." markdown_linkify_tlds: "لا يمكنك تضمين قيمة '*'." google_oauth2_hd_groups: "يجب عليك تعيين جميع إعدادات 'google oauth2 hd' قبل تفعيل هذا الإعداد." + discourse_id_registration: "تعذر التسجيل تلقائيًا عبر معرف Discourse. قد يعود السبب إلى مشكلات في الاتصال بالشبكة، أو قيود جدار الحماية، أو تعذر الوصول إلى خدمة معرف Discourse. يُرجى الاطلاع على سجلات الخادم لمزيد من التفاصيل أو التواصل مع الدعم الفني." linkedin_oidc_credentials: "يتعيَّن عليك إعداد بيانات اعتماد LinkedIn OIDC ('linkedin_oidc_client_id' و'linkedin_oidc_client_secret') قبل تقعيل هذا الإعداد." search_tokenize_chinese_enabled: "يجب عليك إيقاف `email editable` قبل تفعيل هذا الإعداد." search_tokenize_japanese_enabled: "يجب عليك إيقاف 'search_tokenize_japanese' قبل تفعيل هذا الإعداد." @@ -2796,7 +2881,9 @@ ar: invalid_uncategorized_category_setting: 'لا يمكن تحديد الفئة "غير المصنَّفة" إذا لم يتم تفعيل ''allow uncategorized topics''.' invalid_search_ranking_weights: "القيمة غير صالحة لإعداد الموقع search_ranking_weights. مثال: '{0.1,0.2,0.3,1.0}'. لاحظ أن الحد الأقصى لقيمة كل وزن هو 1.0." content_localization_locale_limit: "لا يمكن أن يتجاوز عدد اللغات المحلية المدعومة %{max}." + content_localization_language_switcher_requirements: "يتطلب مفتاح تغيير اللغة تفعيل إعدادات الموقع \"تعيين اللغة من ملف تعريف الارتباط\" و\"السماح باختيار لغة المستخدم\"، كما يجب أن تحتوي قائمة \"اللغات المدعومة لتوطين المحتوى\" على لغة واحدة على الأقل." mediaconvert_role_arn_required: "مطلوب تحديد معرف الدور (ARN) في AWS IAM عند استخدام خدمة AWS MediaConvert لتحويل مقاطع الفيديو." + mediaconvert_output_subdirectory_required: "يُشترط تحديد الدليل الفرعي لمخرجات MediaConvert." s3_credentials_required_for_video_conversion: "تتطلب عملية تحويل الفيديو بيانات اعتماد S3. يرجى إعداد مفاتيح الوصول إلى S3 أو تفعيل ملف تعريف IAM." keywords: clean_up_inactive_users_after_days: "تم إلغاء تنشيطه|غير نشط|لم يتم تنشيطه" @@ -2820,6 +2907,7 @@ ar: filter: description: status: "تصفية الموضوعات حسب حالتها" + in: "تصفية الموضوعات في القوائم الشخصية" order: "فرز الموضوعات حسب مجال محدد" category: "عرض الموضوعات التابعة لفئة محددة" category_any: "عرض الموضوعات الموجودة في أي من الفئات المحددة (مفصولة بفواصل)" @@ -2832,13 +2920,15 @@ ar: exclude_tag: "استبعاد الموضوعات التي تحتوي على وسم محدد" exclude_tags_any: "استبعاد الموضوعات التي تحتوي على أي من الوسوم المحددة (مفصولة بفواصل)" exclude_tags_all: "استبعاد الموضوعات التي تحتوي على جميع الوسوم المحددة (مفصولة بعلامة الجمع)" - tags_alias: "اسم مستعار لمرشح 'الوسم:'" tag_group: "عرض الموضوعات التي تحمل وسومًا من مجموعة وسوم محددة" exclude_tag_group: "استبعاد الموضوعات التي تحمل وسومًا من مجموعة وسوم محددة" activity_before: "عرض الموضوعات التي وقع آخر نشاط فيها قبل تاريخ محدد (YYYY-MM-DD أو قبل أيام)" activity_after: "عرض الموضوعات التي وقع آخر نشاط فيها بعد تاريخ محدد (YYYY-MM-DD أو قبل أيام)" created_before: "عرض الموضوعات التي تم إنشاؤها قبل تاريخ محدد (YYYY-MM-DD أو قبل أيام)" created_after: "عرض الموضوعات التي تم إنشاؤها بعد تاريخ محدد (YYYY-MM-DD أو قبل أيام)" + created_by: "عرض الموضوعات التي أنشأها مستخدم أو مجموعة محددة" + created_by_user: "عرض الموضوعات التي أنشأها اسم المستخدم أو المجموعة (بدون استخدام @)" + created_by_multiple: "عرض الموضوعات التي أنشأها أي من المستخدمين أو المجموعات المحددة (مفصولة بفواصل)" latest_post_before: "عرض الموضوعات التي تحتوي على آخر منشور قبل تاريخ محدد (YYYY-MM-DD أو قبل أيام)" latest_post_after: "عرض الموضوعات التي تحتوي على آخر منشور بعد تاريخ محدد (YYYY-MM-DD أو قبل أيام)" likes_min: "عرض الموضوعات التي يبلغ عدد تسجيلات الإعجاب فيها هذا الحد الأدنى أو يزيد عنه" @@ -2868,6 +2958,7 @@ ar: in_new: "عرض الموضوعات الجديدة أو التي تحتوي على ردود جديدة" in_new_replies: "عرض الموضوعات التي عليها ردود جديدة" in_new_topics: "عرض الموضوعات الجديدة" + in_unseen: "عرض الموضوعات التي لم تشاهدها بعد" order_activity: "فرز حسب آخر نشاط (الأحدث أولًا)" order_activity_asc: "فرز حسب آخر نشاط (الأقدم أولًا)" order_category: "فرز حسب اسم الفئة (ترتيب أبجدي تنازلي)" @@ -2888,6 +2979,18 @@ ar: order_views_asc: "فرز حسب عدد المشاهدات (الأقل أولًا)" order_read: "فرز حسب آخر مرة قرأت فيها (الأحدث أولًا)" order_read_asc: "فرز حسب آخر مرة قرأت فيها (الأقدم أولًا)" + order_hot: "الفرز حسب مؤشر النشاط (الأعلى أولًا)" + order_hot_asc: "الفرز حسب مؤشر النشاط (الأدنى أولًا)" + users: "تصفية الموضوعات حسب المشاركين" + users_any: "عرض الموضوعات التي شارك فيها أي من المستخدمين المحددين (مفصولة بفواصل)" + users_all: "عرض الموضوعات التي يشارك فيها جميع المستخدمين المحددين (مفصولة بعلامة +)" + exclude_users: "استبعاد الموضوعات التي يشارك فيها مستخدمون محددون" + group: "تصفية الموضوعات حسب المجموعات" + groups_any: "عرض الموضوعات التي تضم أيًا من المجموعات المحددة (مفصولة بفواصل)" + groups_all: "عرض الموضوعات التي تضم جميع المجموعات المحددة (مفصولة بعلامة +)" + locale: "تصفية الموضوعات حسب اللغة الأصلية" + locale_any: "عرض الموضوعات المكتوبة أصلاً بأي من اللغات المحددة (مفصولة بفواصل)" + exclude_locale: "استبعاد الموضوعات المكتوبة أصلاً بلغة محددة" discourse_connect: login_error: "خطأ في تسجيل الدخول" not_found: "تعذَّر العثور على حسابك. يُرجى التواصل مع مسؤول الموقع." @@ -3093,6 +3196,7 @@ ar: csrf_detected: "عذرًا، لقد انتهت مدة صلاحية التفويض، أو تم التبديل بين المتصفحات. يُرجى إعادة المحاولة." request_error: "عذرًا، حدث خطأ عند بدء عملية التفويض. يُرجى إعادة المحاولة." invalid_iat: "عذرًا، لا يمكننا التحقق من رمز التفويض بسبب اختلاف توقيت الخادم. يُرجى إعادة المحاولة." + unauthorized: "عذرًا، لم يقم مزود خدمة تسجيل الدخول بالمصادقة على طلبك؛ يُرجى المحاولة مرةً أخرى أو التواصل مع المسؤول." omniauth_error_unknown: "حدث خطأ ما في أثناء عملية تسجيل الدخول، يُرجى إعادة المحاولة." omniauth_confirm_title: "تسجيل الدخول باستخدام %{provider}" omniauth_confirm_button: "متابعة" @@ -3146,6 +3250,7 @@ ar: updating_user_ids: "جارٍ تحديث معرِّفات المستخدمين…" deleting_source_user: "جارٍ حذف ‏‏المستخدم المصدر…" user: + anonymized: "[تمت إزالته بسبب إخفاء هوية المستخدم]" deactivated: "تم إلغاء التنشيط بسبب ارتداد عدد كبير جدًا من الرسائل الإلكترونية إلى \"%{email}\"." deactivated_by_staff: "تم إلغاء التنشيط بواسطة فريق العمل" deactivated_by_inactivity: @@ -3329,46 +3434,22 @@ ar: new_version_mailer: title: "رسالة الإصدار الجديد" subject_template: "[%{email_prefix}] إصدار جديد من Discourse، يتوفَّر تحديث" - text_body_template: | - مرحى، أصبح هناك إصدار جديد من‎ [Discourse](https://www.discourse.org) ‎متاحًا! - - إصدارك ‎:%{installed_version}‎ - إصدار جديد: **%{new_version}**‎ - - ‎- ‎ التحديث باستخدام **[تحديث المتصفح بنقرة واحدة]‎(%{base_url}/admin/update)**‎ - - ‎ - ‎راجع الجديد في [ملاحظات الإصدار]‎(https://meta.discourse.org/tag/release-notes) ‎أو راجع‎ [‎سجل التغييرات الأولي على GitHub](https://github.com/discourse/discourse/commits/main)‎ - - ‎- ‎ انتقل إلى ‎ [meta.discourse.org](https://meta.discourse.org) ‎ للحصول على الأخبار والمناقشة والدعم لمنصة ‎Discourse new_version_mailer_with_notes: title: "رسالة الإصدار الجديد مع الملاحظات" subject_template: "يتوفَّر تحديث [%{email_prefix}]" - text_body_template: | - مرحى، أصبح هناك إصدار جديد من ‎[Discourse](https://www.discourse.org) ‎متاحًا متوفر! - - إصدارك‎: %{installed_version}‎ - الإصدار الجديد‎: **%{new_version}**‎ - - ‎- التحديث باستخدام **[تحديث المتصفح بنقرة واحدة]‎(%{base_url}/admin/update)**‎ - - ‎- راجع الجديد في [ملاحظات الإصدار]‎(https://meta.discourse.org/tag/release-notes) ‎أو اعرض‎ [‎سجل التغييرات الأولي على GitHub](https://github.com/discourse/discourse/commits/main)‎ - - - انتقل إلى [meta.discourse.org](https://meta.discourse.org) للحصول على الأخبار والمناقشة والدعم لمنصة Discourse - - ‎### ملاحظات الإصدار - - %{notes} flag_reasons: off_topic: "تم الإبلاغ عن منشورك على أنه **خارج الموضوع**: يشعر المجتمع بأنه غير مناسب للموضوع، كما هو محدَّد حاليًا في العنوان وأول منشور." inappropriate: "تم الإبلاغ عن منشورك على أنه **غير لائق**: يشعر المجتمع بأنه هجومي أو مسيء أو يتضمَّن سلوكًا ينمُّ عن كراهية أو ينتهك [إرشادات مجتمعنا](%{base_path}/guidelines)." illegal: "تم وضع علامة على منشورك باعتباره **غير قانوني**: يعتقد المجتمع أنه قد يكون مخالفًا للقانون‎." spam: "تم الإبلاغ عن منشورك على أنه **غير مرغوب فيه**: يشعر المجتمع بأنه إعلان، أو ذو طبيعة ترويجية بشكلٍٍ زائد بدلًا من أن يكون مفيدًا أو ذا صلة بالموضوع كما هو متوقَّع." notify_moderators: "تم الإبلاغ عن منشورك على أنه **يستدعي انتباه المشرفين**: يشعر المجتمع بأن المنشور يتطلَّب تدخلًا يدويًا بواسطة أحد أعضاء فريق العمل." + needs_approval: "تم وضع علامة على منشورك **للموافقة عليه**: تمت إضافته تلقائيًا إلى قائمة الانتظار للمراجعة من قبل أحد أعضاء طاقم العمل للتأكد من أنه يفي [بإرشادات مجتمعنا] (%{base_path}/الإرشادات)." responder: off_topic: "تم الإبلاغ عن المنشور على أنه **خارج الموضوع**: يشعر المجتمع بأنه غير مناسب للموضوع، كما هو محدَّد حاليًا في العنوان وأول منشور." inappropriate: "تم الإبلاغ عن المنشور على أنه **غير لائق**: يشعر المجتمع بأنه هجومي أو مسيء أو يتضمَّن سلوكًا ينمُّ عن كراهية أو ينتهك [إرشادات مجتمعنا](%{base_path}/guidelines)." spam: "تم الإبلاغ عن المنشور على أنه **غير مرغوب فيه**: يشعر المجتمع بأنه إعلان، أو ذو طبيعة ترويجية بشكلٍٍ زائد بدلًا من أن يكون مفيدًا أو ذا صلة بالموضوع كما هو متوقَّع." notify_moderators: "تم الإبلاغ عن المنشور على أنه **يستدعي انتباه المشرفين**: يشعر المجتمع بأن المنشور يتطلَّب تدخلًا يدويًا بواسطة أحد أعضاء فريق العمل." + needs_approval: "تم وضع علامة على المنشور **للموافقة عليه**: تمت إضافته تلقائيًا إلى قائمة الانتظار للمراجعة من قبل أحد أعضاء طاقم العمل للتأكد من أنه يفي [بإرشادات مجتمعنا] (%{base_path}/الإرشادات)." flags_dispositions: agreed: "نشكرك على إعلامنا. نتفق على وجود مشكلة ونبحث في الأمر." agreed_and_deleted: "نشكرك على إعلامنا. نتفق على وجود مشكلة وقد أزلنا المنشور." @@ -3396,6 +3477,7 @@ ar: contents_hidden: "يُرجى زيارة هذا المنشور لرؤية محتوياته." post_hidden: title: "تم إخفاء المنشور" + preview: "تم إخفاء هذا المنشور نتيجة الإبلاغ عنه من قبل أعضاء المجتمع." subject_template: "تم إخفاء المنشور بسبب بلاغات المجتمع" text_body_template: | مرحبًا، @@ -3414,49 +3496,12 @@ ar: reviewable_queued_post_revise_and_reject: title: "الملاحظات على منشورك" subject_template: "الملاحظات على منشورك في %{topic_title}" - text_body_template: | - مرحبًا %{username}، - - لقد راجعنا منشورك في [%{topic_title}](%{topic_url}) ولدينا بعض الملاحظات لك. - - السبب: %{reason} - - الملاحظات: %{feedback} - - يمكنك تعديل منشورك الأصلي أدناه وإعادة إرساله لإجراء التغييرات المقترحة، أو الرد على هذه الرسالة إذا كانت لديك أي أسئلة. - - -------- - - %{original_post} - - -------- - - شكرًا، - مشرفو %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "الملاحظات على موضوعك" subject_template: 'الملاحظات على موضوع جديد بعنوان "%{topic_title}"' - text_body_template: | - مرحبًا %{username}، - - لقد راجعنا موضوعك الجديد بعنوان "%{topic_title}" ولدينا بعض الملاحظات لك. - - السبب: %{reason} - - الملاحظات: %{feedback} - - يمكنك تعديل المنشور الأصلي في موضوعك أدناه وإعادة إرساله لإجراء التغييرات المقترحة، أو الرد على هذه الرسالة إذا كانت لديك أي أسئلة. - - -------- - - %{original_post} - - -------- - - شكرًا، - مشرفو %{site_name} post_hidden_again: title: "تم إخفاء المنشور مرة أخرى" + preview: "تم إخفاء المنشور مرة أخرى بواسطة أعضاء المجتمع." subject_template: "تم إخفاء المنشور بسبب بلاغات المجتمع، وتم إرسال إشعار إلى فريق العمل" text_body_template: | مرحبًا، @@ -3932,6 +3977,7 @@ ar: للحصول على إرشادات إضافية، يُرجى الرجوع إلى [إرشادات المجتمع](%{base_url}/guidelines). too_many_spam_flags: title: "لقد تلقيت الكثير من بلاغات الرسائل غير المرغوب فيها" + preview: "تم إخفاء هذه المنشورات مؤقتًا نتيجة الإبلاغ عنها كرسائل عشوائية." subject_template: "تم تعليق الحساب الجديد" text_body_template: | مرحبًا، @@ -3954,6 +4000,7 @@ ar: للحصول على إرشادات إضافية، يُرجى الرجوع إلى [إرشادات المجتمع](%{base_url}/guidelines). silenced_by_staff: title: "تم كتمك بواسطة فريق العمل" + preview: "تم تعليق الحساب مؤقتًا." subject_template: "تم تعليق الحساب مؤقتًا" text_body_template: | مرحبًا، @@ -3966,9 +4013,27 @@ ar: user_automatically_silenced: title: "تم كتم المستخدم تلقائيًا" subject_template: "تم كتم المستخدم الجديد %{username} بسبب بلاغات المجتمع" + text_body_template: | + هذه رسالة تلقائية. + + تم كتم المستخدم الجديد [%{username}](%{user_url}) تلقائيًا. + + يُرجى [مراجعة البلاغات](%{base_url}/المراجعة). إذا تم كتم %{username} عن النشر بالخطأ، انقر على زر إلغاء الكتم في [صفحة المسؤول لهذا المستخدم](%{user_url}). + + يمكن تغيير هذا الحد من خلال إعدادات الموقع `silence_new_user`. user_automatically_silenced_with_reason: title: "تم كتم المستخدم تلقائيًا" subject_template: "تم كتم المستخدم الجديد %{username} بسبب بلاغات المجتمع" + text_body_template: | + هذه رسالة تلقائية. + + تم كتم المستخدم الجديد [%{username}](%{user_url}) تلقائيًا. + + السبب - %{reason} + + يُرجى [مراجعة البلاغات](%{base_url}/المراجعة). إذا تم كتم %{username} عن النشر بالخطأ، انقر على زر إلغاء الكتم في [صفحة المسؤول لهذا المستخدم](%{user_url}). + + يمكن تغيير هذا الحد من خلال إعدادات الموقع `silence_new_user`. spam_post_blocked: title: "تم حظر المنشور غير المرغوب فيه" subject_template: "تم حظر منشورات المستخدم الجديد %{username} بسبب الروابط المتكررة" @@ -4029,6 +4094,16 @@ ar: مرحبًا، تم تعليق المنشورات من المستخدمين الجُدد لتخضع للإشراف وهي في انتظار المراجعة حاليًا. [يمكنك الموافقة عليها أو رفضها من هنا](%{base_url}/review?type=ReviewableQueuedPost). + user_posts_deleted: + title: "تم حذف منشورات المستخدم" + subject_template: "تم حذف جميع منشورات %{user}" + text_body_template: + zero: "حذف @%{staff_user} منشور من @%{user}." + one: "حذف @%{staff_user} منشور من @%{user}." + two: "حذف @%{staff_user} منشورين من @%{user}." + few: "حذف @%{staff_user} %{count} منشورات من @%{user}." + many: "حذف @%{staff_user} %{count} منشورًا من @%{user}." + other: "حذف @%{staff_user} %{count} منشور من @%{user}." unsubscribe_link: | لإلغاء الاشتراك في هذه الرسائل الإلكترونية، [انقر هنا](%{unsubscribe_url}). unsubscribe_link_and_mail: | @@ -4150,6 +4225,7 @@ ar: %{respond_instructions} user_replied: title: "ردَّ مستخدم عليك" + preview: "لقد رد أحد المستخدمين على منشورك." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -4172,6 +4248,7 @@ ar: %{respond_instructions} user_quoted: title: "اقتبس مستخدم منك" + preview: "لقد اقتبس أحد المستخدمين كلامك في منشور." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -4183,6 +4260,7 @@ ar: %{respond_instructions} user_linked: title: "وضع مستخدم رابطًا إلى موضوعك" + preview: "تم ربط هذا المنشور بموضوع آخر." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -4194,6 +4272,7 @@ ar: %{respond_instructions} user_mentioned: title: "أشار مستخدم إليك" + preview: "لقد ذكرك أحد المستخدمين في منشور." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -4249,6 +4328,7 @@ ar: %{respond_instructions} user_posted: title: "نشر مستخدم في موضوعك" + preview: "لقد رد أحد المستخدمين على موضوع تتابعه." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -4282,6 +4362,7 @@ ar: %{respond_instructions} user_posted_pm: title: "نشر مستخدم موضوعك في رسالة خاصة" + preview: "لقد أرسل لك أحد المستخدمين رسالة خاصة." subject_template: "[%{email_prefix}] [PM] %{topic_title}" text_body_template: | %{header_instructions} @@ -4350,6 +4431,12 @@ ar: account_second_factor_disabled: title: "تم إيقاف المصادقة الثنائية" subject_template: "[%{email_prefix}] تم إيقاف المصادقة الثنائية" + text_body_template: | + تم تعطيل المصادقة الثنائية على حسابك في %{site_name}. يمكنك الآن تسجيل الدخول باستخدام كلمة مرورك فقط؛ لم يعُد رمز المصادقة الإضافي مطلوبًا. + + إذا لم تختر تعطيل المصادقة الثنائية (2FA)، فربما يكون هناك شخص ما قد اخترق حسابك. + + إذا كانت لديك أي أسئلة، [تواصل مع فريق العمل](%{base_url}/حول). digest: why: "ملخص موجز لـ‎ %{site_link} ‎منذ‎ %{since}" since_last_visit: "منذ زيارتك الأخيرة" @@ -4370,6 +4457,7 @@ ar: preheader: "ملخص موجز منذ‎ %{since}" forgot_password: title: "نسيت كلمة المرور" + preview: "إعادة تعيين كلمة المرور." subject_template: "[%{email_prefix}] إعادة تعيين كلمة المرور" text_body_template: | طلب شخص ما إعادة تعيين كلمة مرورك على [%{site_name}](%{base_url}). @@ -4391,6 +4479,7 @@ ar: %{base_url}/session/email-login/%{email_token} set_password: title: "تعيين كلمة المرور" + preview: "تعيين كلمة المرور الخاصة بالحساب" subject_template: "[%{email_prefix}] تعيين كلمة المرور" text_body_template: | طلب شخص ما إضافة كلمة مرور إلى حسابك على [%{site_name}](%{base_url}). بدلًا من ذلك، يمكنك تسجيل الدخول باستخدام أي خدمة مدعومة عبر الإنترنت (Google ،Facebook، إلى آخره) مرتبطة بعنوان البريد الإلكتروني الذي تم التحقُّق منه. @@ -4401,6 +4490,7 @@ ar: %{base_url}/u/password-reset/%{email_token} admin_login: title: "تسجيل دخول المسؤول" + preview: "تم تقديم طلب لتسجيل دخول المسؤول." subject_template: "[%{email_prefix}] تسجيل الدخول" text_body_template: | طلب شخص ما تسجيل الدخول إلى حسابك على [%{site_name}](%{base_url}). @@ -4411,6 +4501,7 @@ ar: %{base_url}/session/email-login/%{email_token} account_created: title: "تم إنشاء الحساب" + preview: "تم إنشاء حساب جديد لك." subject_template: "[%{email_prefix}] حسابك الجديد" text_body_template: | تم إنشاء حساب جديد لك على %{site_name} @@ -4452,6 +4543,7 @@ ar: %{base_url}/u/confirm-old-email/%{email_token} notify_old_email: title: "إرسال إشعار بشأن عنوان البريد الإلكتروني القديم" + preview: "تم تحديث عنوان البريد الإلكتروني." subject_template: "[%{email_prefix}] تم تغيير عنوان بريدك الإلكتروني" text_body_template: | هذه رسالة تلقائية لإعلامك بأنه قد تم تغيير عنوان بريدك الإلكتروني للموقع @@ -4474,6 +4566,7 @@ ar: %{new_email} signup_after_approval: title: "الاشتراك بعد الموافقة" + preview: "تمت الموافقة على الحساب الجديد." subject_template: "لقد تمت الموافقة عليك في %{site_name}!" text_body_template: | مرحبًا بك في %{site_name}! @@ -4499,6 +4592,7 @@ ar: %{reject_reason} signup: title: "الاشتراك" + preview: "يرجى تأكيد حسابك." subject_template: "[%{email_prefix}] تأكيد حسابك الجديد" text_body_template: | مرحبًا بك في %{site_name}! @@ -4521,6 +4615,7 @@ ar: إذا كان الرابط أعلاه غير قابل للنقر، فحاول نسخه ولصقه في شريط العنوان في متصفح الويب. suspicious_login: title: "تنبيه بعملية تسجيل دخول جديدة" + preview: "تحقق من جهازك." subject_template: "[%{site_name}] عملية تسجيل دخول جديدة من %{location}" text_body_template: "مرحبًا،\n\nلاحظنا عملية تسجيل دخول من جهاز أو موقع لا تستخدمه عادةً. هل كان هذا أنت؟\n\n - الموقع: %{location} (%{client_ip}) \n - المتصفح: %{browser}\n - الجهاز: %{device} - %{os}\n\nإذا كان هذا أنت، رائع! لا يوجد شيء آخر عليك القيام به.\n\nإذا لم يكن هذا أنت، يُرجى [مراجعة جلساتك الحالية](%{base_url}/my/preferences/security) والتفكير في تغيير كلمة مرورك.\n" post_approved: @@ -4536,8 +4631,14 @@ ar: page_not_found: page_title: "الصفحة غير موجودة" title: "عذرًا! هذه الصفحة غير موجودة أو خاصة." + subtitle: "بحثنا في كل مكان، لكن لم نتمكن من العثور على الصفحة التي تبحث عنها." + popular_topics: "الموضوعات الرائجة" + recent_topics: "الموضوعات الحديثة" see_more: "المزيد" + search_title: "لماذا لا تحاول البحث بدلاً من ذلك؟" search_button: "البحث" + home: "الانتقال إلى الصفحة الرئيسية" + placeholder: "البحث عن الموضوعات باستخدام العنوان أو الكلمات الرئيسية…" offline: title: "لا يمكن تحميل التطبيق" offline_page_message: "يبدو أنك غير متصل! يُرجى التحقُّق من اتصال الشبكة وإعادة المحاولة." @@ -4546,6 +4647,7 @@ ar: upload: edit_reason: "تم تنزيل نسخ محلية من الصور" unauthorized: "عذرًا، الملف الذي تحاول تحميله غير مسموح به (الامتدادات المسموح بها: %{authorized_extensions})." + images_only: "عذرًا، لا يمكن تحميل سوى الصور في هذا الإعداد." pasted_image_filename: "الصورة الملصقة" store_failure: "فشل تخزين التحميل #%{upload_id} للمستخدم #%{user_id}." file_missing: "عذرًا، يجب عليك تقديم ملف للتحميل." @@ -4633,6 +4735,8 @@ ar: latte_theme_name: "اللاتيه" summer_theme_name: "الصيف" dark_rose_theme_name: "الوردي الداكن" + errors: + cannot_edit_remote_copies: "لا يُسمح بإجراء تعديلات على النسخ البعيدة من لوحات الألوان." edit_this_page: "تعديل هذه الصفحة" csv_export: boolean_yes: "نعم" @@ -5089,12 +5193,18 @@ ar: nice_share: name: مشاركة لطيفة description: شارك منشورًا مع 25 زائرًا فريدًا + long_description: | + تُمنح هذه الشارة عند مشاركة رابط تم النقر عليه من قبل 25 زائرًا فريدًا من خارج المنتدى. نشكرك على المساهمة في نشر محتوى مناقشاتنا وتعزيز هذا المجتمع. good_share: name: مشاركة جيدة description: نشرت منشورًا مع 300 زائر فريد + long_description: | + تُمنح هذه الشارة عند مشاركة رابط تم النقر عليه من قبل 300 زائر فريد من خارج المنتدى. أحسنت! لقد أبرزت نقاشًا قيّمًا أمام جمهور جديد، وساعدت في دعم نمو هذا المجتمع. great_share: name: مشاركة رائعة description: نشرت منشورًا مع 1000 زائر فريد + long_description: | + تُمنح هذه الشارة عند مشاركة رابط تم النقر عليه من قبل 1000 زائر فريد من خارج المنتدى. إنجاز مميز! لقد أبرزت نقاشًا شيّقًا أمام شريحة كبيرة من المستخدمين الجدد، وساعدت بصورة ملحوظة في توسّع مجتمعنا. first_like: name: أول مرة إعجاب description: سجَّلت إعجابك بمشاركة @@ -5266,6 +5376,23 @@ ar: many: "يجب تحديد %{count} وسمًا على الأقل." other: "يجب تحديد %{count} وسم على الأقل." upload_row_too_long: "يجب أن يحتوي ملف CSV على وسم واحد في كل سطر. واختياريًا، يمكن اتباع الوسم بفاصلة، ثم اسم مجموعة الوسوم." + bulk_create: + invalid_params: "المعلمات غير صالحة. يرجى تقديم مصفوفة بأسماء الوسوم." + invalid_name: "اسم الوسم غير صالح." + tag_too_long: + zero: "الوسم طويل جدًا (الحد الأقصى %{count} حرف)." + one: "الوسم طويل جدًا (الحد الأقصى حرف واحد)." + two: "الوسم طويل جدًا (الحد الأقصى حرفان)." + few: "الوسم طويل جدًا (الحد الأقصى %{count} أحرف)." + many: "الوسم طويل جدًا (الحد الأقصى %{count} حرفًا)." + other: "الوسم طويل جدًا (الحد الأقصى %{count} حرف)." + too_many_tags: + zero: "عدد الوسوم كبير جدًا. يمكنك إنشاء ما يصل إلى %{count} وسم في المرة الواحدة. لاستيراد كميات أكبر، استخدم ميزة تحميل ملف CSV." + one: "عدد الوسوم كبير جدًا. يمكنك إنشاء وسم واحد في المرة الواحدة. لاستيراد كميات أكبر، استخدم ميزة تحميل ملف CSV." + two: "عدد الوسوم كبير جدًا. يمكنك إنشاء ما يصل إلى وسمين في المرة الواحدة. لاستيراد كميات أكبر، استخدم ميزة تحميل ملف CSV." + few: "عدد الوسوم كبير جدًا. يمكنك إنشاء ما يصل إلى %{count} وسوم في المرة الواحدة. لاستيراد كميات أكبر، استخدم ميزة تحميل ملف CSV." + many: "عدد الوسوم كبير جدًا. يمكنك إنشاء ما يصل إلى %{count} وسمًا في المرة الواحدة. لاستيراد كميات أكبر، استخدم ميزة تحميل ملف CSV." + other: "عدد الوسوم كبير جدًا. يمكنك إنشاء ما يصل إلى %{count} وسم في المرة الواحدة. لاستيراد كميات أكبر، استخدم ميزة تحميل ملف CSV." forbidden: invalid: zero: "لا يمكن استخدام أي من الوسوم التي حدَّدتها" @@ -5312,6 +5439,9 @@ ar: rss_by_tag: "الموضوعات التي تم وضع وسم عليها %{tag}" finish_installation: congratulations: "تهانينا، لقد ثبَّت Discourse!" + login_with_discourse_id: "تسجيل الدخول باستخدام معرّف Discourse" + discourse_id_help: "يرجى تسجيل الدخول باستخدام معرف Discourse عبر الزر أدناه.

تأكد من استخدام حساب Discourse ID يحتوي على بريد إلكتروني أساسي يطابق متغير البيئة `DISCOURSE_DEVELOPER_EMAILS`." + discourse_id_error_help: "لقد اخترتَ تخطي إعداد البريد الإلكتروني في الوقت الحالي. للأسف، نظرًا لرسالة الخطأ المذكورة أعلاه، لا يمكن متابعة عملية الإعداد. يُرجى الإبلاغ عن هذه المشكلة على meta.discourse.org." register: button: "التسجيل" title: "تسجيل حساب المسؤول" @@ -5323,6 +5453,10 @@ ar: resend_email: title: "إعادة إرسال الرسالة الإلكترونية للتفعيل" message: "

لقد أعدنا إرسال الرسالة الإلكترونية للتنشيط إلى %{email}" + discourse_id: + help: "جارٍ إعداد معرف Discourse لحسابك." + no_allowed_emails: "لا توجد عناوين بريد إلكتروني مسموح بها مُكوَّنة في DISCOURSE_DEVELOPER_EMAILS. لا يمكن متابعة إعداد الموقع." + global_notice: "لم يتم تسجيل دخول أي مسؤول بعد. يرجى تسجيل الدخول باستخدام حساب Discourse ID يحتوي على بريد إلكتروني يطابق متغير البيئة DISCOURSE_DEVELOPER_EMAILS لإكمال عملية التثبيت." safe_mode: title: "الدخول إلى الوضع الآمن" description: "يسمح لك الوضع الآمن باختبار موقعك دون تحميل السمات أو تخصيصات المكوِّنات الإضافية من جانب العميل. تظل تخصيصات المكوِّنات الإضافية من جانب الخادم مفعَّلة." @@ -5334,15 +5468,19 @@ ar: enter: "الدخول إلى الوضع الآمن" must_select: "يجب عليك تحديد خيار واحد على الأقل للدخول إلى الوضع الآمن." dev_mode: - enter: "مفتاح Enter" + title: "وضع المطور" + enable_rack_mini_profiler: "تفعيل Rack Mini Profiler بحيث يظل فعالًا عبر تغييرات الجلسة لمدة ساعة واحدة." + enter: "دخول وضع المطور" wizard: title: "إعداد Discourse" step: setup: title: "خطوات البدء" + description: "هيا نبدأ بإعداد العناصر الأساسية لمجتمعك. يمكنك تغيير هذه الإعدادات في أي وقت لاحقًا." fields: title: label: "اسم المجتمع" + placeholder: "ملتقى جين" default_locale: label: "اللغة" login_required: @@ -5390,9 +5528,20 @@ ar: review_by: "روجع من قِبل" pr_summary: "أدت %{commits} من عمليات التضمين إلى ‎تغيير ‎ %{changed_files}‎ من الملفات بإجراء %{additions} من الإضافات و%{deletions} من الحذوفات" no_description: "المساهمة في تطوير‎ %{repo} ‎من خلال إنشاء حساب على‎ GitHub." + pr_title: + default: "طلب سحب" + draft: "طلب سحب مسودة" + open: "طلب سحب مفتوح" + approved: "طلب سحب مُوافق عليه" + changes_requested: "التغييرات مطلوبة" + merged: "طلب سحب مُدمج" + closed: "طلب سحب مغلق" status_date: open: "مفتوحة" + draft: "تم إنشاؤه كمسودة" approved: "تمت الموافقة عليها" + changes_requested: "التغييرات مطلوبة" + merged: "تم دمجه" closed: "مغلقة" discourse_push_notifications: popup: @@ -5408,9 +5557,12 @@ ar: confirm_body: "تم بنجاح! تم تفعيل الإشعارات." custom: "إشعار من %{username} على %{site_title}" staff_action_logs: + redacted: "[المحتوى غير مرئي]" json_too_long: "القيم غير مسجَّلة لأنها تتجاوز حدود طول العمود" not_found: "غير موجود" unknown: "غير معروف" + site_setting: + update_existing_users: "هل تريد تحديث المستخدمين الحاليين؟ %{value}" user_merged: "تم دمج %{username} في هذا الحساب" user_delete_self: "تم الحذف بواسطتي من %{url}" webhook_deactivation_reason: "تم إلغاء تنشيط خطاف الويب الخاص بك تلقائيًا. لقد تلقينا عدة استجابات لفشل حالة HTTP \"%{status}\"." @@ -5439,9 +5591,14 @@ ar: auto_deleted_hidden_posts: "تمت إزالة المنشورات المخفية تلقائيًا" seed_data_topic_updated: "تم تحديث موضوع بيانات التهيئة الأولية" seed_data_topic_deleted: "تم حذف موضوع بيانات التهيئة الأولية" + upcoming_changes: + log_manually_toggled: "تم التبديل يدويًا بواسطة المستخدم" + log_promoted: > + وصل هذا التغيير القادم إلى حالة '%{change_status}'، لذلك تم تفعيله تلقائيًا على موقعك. راجع صفحة التغييرات القادمة لمزيد من التفاصيل. reviewables: already_handled: "شكرًا، لكننا راجعنا هذا المنشور بالفعل وقررنا أنه لا يلزم الإبلاغ عنه مرة أخرى." already_handled_and_user_not_exist: "شكرًا، لكن شخصًا ما راجعه بالفعل ولم يعُد هذا المستخدم موجودًا." + post_restored_by_author: "تم استعادة المنشور بواسطة المؤلف" priorities: low: "منخفضة" medium: "متوسطة" @@ -5511,14 +5668,19 @@ ar: description: "الموافقة على البلاغ وإخفاء هذا المنشور + إرسال رسالة إلى المستخدم تلقائيًا تحثه فيها على تعديله." complete: "تم إخفاء المنشور، وتم إشعار المستخدم." agree_and_edit: + title: "تعديل المنشور" description: "الموافقة مع البلاغ وفتح نافذة أداة الإنشاء لتعديل المنشور‎." complete: "تم التعرف على البلاغ، يمكنك الآن تعديل المنشور." delete: title: "حذف" complete: "تم حذف المنشور." delete_and_ignore: + title: "حذف المنشور وتجاهل البلاغ" + description: "احذف المنشور وتجاهل البلاغ عن طريق إزالته من قائمة الانتظار؛ وإذا كان هذا المنشور الأول، فاحذف الموضوع أيضًا. " complete: "تم حذف المنشور." delete_and_ignore_replies: + title: "حذف المنشور والردود، وتجاهل البلاغ" + description: "احذف المنشور وكافة الردود المرتبطة به، ثم تجاهل البلاغ عن طريق إزالته من قائمة الانتظار؛ وإذا كان هذا المنشور الأول، فاحذف الموضوع أيضًا" confirm: "هل تريد بالتأكيد حذف الردود على المنشور أيضًا؟" complete: "تم حذف المنشور وردوده." delete_and_agree: @@ -5532,19 +5694,23 @@ ar: complete: "تم حذف المنشور وردوده." disagree_and_restore: title: "استعادة المنشور" + description: "رفض البلاغ واستعادة المنشور" complete: "تم استعادة المنشور." disagree_bundle: title: "لا" disagree: title: "إبقاء المنشور" + description: "رفض البلاغ" complete: "تم تجاهل البلاغ." discard_post: title: "تجاهل المنشور" complete: "تم تجاهل المنشور." revise_and_reject_post: + title: "طلب مراجعة.." complete: "تم رفض المنشور في انتظار المراجعة." ignore: title: "تجاهل" + description: "إزالته من قائمة الانتظار دون اتخاذ أي إجراء." complete: "تم تجاهل البلاغ." ignore_and_do_nothing: title: "عدم اتخاذ أي إجراء" @@ -5572,6 +5738,7 @@ ar: title: "لا" delete: title: "حذف المستخدم" + description: "حذف المستخدم دون حظره" complete: "تم حذف المستخدم." block: title: "الحذف وحظر المستخدم" @@ -5581,6 +5748,7 @@ ar: title: "نعم" not_spam: title: "لا" + description: "ليس بريدًا عشوائيًا، وافق على المستخدم" reject: title: "رفض" bundle_title: "رفض…" @@ -5593,9 +5761,13 @@ ar: reject_and_delete: title: "الرفض وحذف المنشور" complete: "تم رفض المنشور وحذفه." + reject_and_delete_standalone: + title: "لا، احذف المنشور" reject_and_keep_deleted: title: "إبقاء المنشور محذوفًا" complete: "تم رفض المنشور والإبقاء على حذفه." + reject_and_keep_deleted_standalone: + title: "لا، احتفظ بالمنشور محذوفًا" scrub: title: تنقية السجل approve_and_restore: @@ -5604,31 +5776,52 @@ ar: approve_and_unhide: title: "نعم" complete: "تمت الموافقة على المنشور وإظهاره" - no_action_post: - title: "التي لم يتم اتخاذ إجراء بشأنها" + post_actions: + bundle_title: "ماذا تريد أن تفعل بالمنشور؟" delete_post: title: "حذف المنشور" + description: "حذف هذا المنشور" complete: "تم حذف المنشور" hide_post: title: "إخفاء المنشور" + description: "إخفاء هذا المنشور عن العامة" + complete: "تم إخفاء المنشور" + unhide_post: + title: "إظهار المنشور" + description: "اجعل هذا المنشور مرئيًا لجميع المستخدمين" + complete: "تم إظهار المنشور" restore_post: title: "استعادة المنشور" - complete: "تم استعادة المنشور" - no_action_user: - title: "التي لم يتم اتخاذ إجراء بشأنها" + description: "استعادة هذا المنشور المحذوف" + complete: "تمت استعادة المنشور" + edit_post: + title: "تعديل المنشور" + description: "تعديل محتوى هذا المنشور" + complete: "تم تعديل المنشور" + user_actions: + bundle_title: "ماذا تريد أن تفعل بهذا المستخدم؟" silence_user: title: "كتم المستخدم" + description: "منع المستخدم من النشر" complete: "تم كتم صوت المستخدم" + reason: "تم كتم المستخدم عبر قائمة انتظار المراجعة" suspend_user: title: "تعليق المستخدم" + description: "تعليق حساب المستخدم" complete: "تم تعليق المستخدم" + reason: "تم تعليق حساب المستخدم عبر قائمة انتظار المراجعة" delete_user: title: "حذف المستخدم" + description: "احذف هذا المستخدم من المنتدى" complete: "تم حذف المستخدم" reason: "تم الحذف من خلال قائمة انتظار المراجعة" delete_and_block_user: + title: "حذف وحظر" + description: "احذف المستخدم واحظر عنوان IP/ البريد الإلكتروني" complete: "تم حذف المستخدم وحظره" delete_user_block: + title: "حذف وحظر" + description: "احذف المستخدم واحظر عنوان IP/ البريد الإلكتروني" complete: "تم حذف المستخدم وحظره" email_style: html_missing_placeholder: "يجب أن يشتمل قالب html على %{placeholder}" @@ -5677,6 +5870,11 @@ ar: reserved_id: "يحتوي على كلمة مفتاحية محجوزة كمعرف: %{id}" unsafe_description: "يحتوي على وصف HTML غير آمن" invalid_tag_group: "مجموعة الوسوم غير صالحة: %{tag_group_name}" + discourse_id: + already_registered: "هذا الموقع مسجل بالفعل في معرّف Discourse" + errors: + not_configured: "لم يتم إعداد معرّف Discourse. يرجى تفعيل معرّف Discourse أولاً." + regenerate_failed: "فشل في إعادة إنشاء بيانات الاعتماد. يرجى المحاولة مرة أخرى لاحقًا." activemodel: errors: <<: *errors diff --git a/config/locales/server.be.yml b/config/locales/server.be.yml index 6da3b14919946..00c56237c0d63 100644 --- a/config/locales/server.be.yml +++ b/config/locales/server.be.yml @@ -607,7 +607,8 @@ be: description: "Спіс статусаў сцягоў у тым ліку тыпу сцяга, плаката, і Назіральнік YouTube часу рэзалюцыі." visits: title: "візіты карыстальнікаў" - xaxis: "дзень" + xaxis: + mobile: "Мабільны" yaxis: "колькасць наведванняў" signups: title: "Рэгістрацый" @@ -956,7 +957,6 @@ be: blocked_ip_blocks: "Спіс прыватных IP-блокаў, якія ніколі не павінны сканіравацца дыскурсе" allowed_internal_hosts: "Спіс ўнутраных хастоў, дыскурс можа бяспечна паўзці для oneboxing і іншых мэтаў" slow_down_crawler_rate: "Калі slow_down_crawler_user_agents паказаны гэтая стаўка будзе прымяняцца да ўсіх сканэра (колькасць секунд затрымкі паміж запытамі)" - content_security_policy_collect_reports: "Ўключыць CSP збор справаздач парушэнні ў" invalidate_inactive_admin_email_after_days: "Адміністратар рахункаў, якія не наведвалі сайт у гэтым колькасць дзён трэба будзе паўторна праверыць іх адрасы электроннай пошты перад уваходам у сістэму. Усталюйце 0, каб адключыць." share_links: "Вызначце, якія элементы адлюстроўваюцца ў дыялогу акцый, і ў якім парадку." site_contact_username: "Сапраўднае імя карыстальніка персанал для адпраўкі ўсіх аўтаматычных паведамленняў з. Калі пакінуць пустым, будзе выкарыстоўвацца па змаўчанні сістэмы уліковы запіс." @@ -1139,7 +1139,6 @@ be: enable_user_directory: "Пакажыце каталог карыстальнікаў для прагляду" enable_group_directory: "Забяспечыць каталог груп для прагляду" anonymous_account_duration_minutes: "Для таго, каб абараніць ананімнасць стварыць новы ўліковы запіс ананімнай кожныя N хвілін для кожнага карыстальніка. Прыклад: калі ўсталявана 600, як толькі 600 хвілін скончыцца апошняга паведамлення і карыстальнік перамыкаецца на Анон, новы ананімны рахунак створаны." - hide_user_profiles_from_public: "Адключыць прыстасаваныя карты, профілі карыстальнікаў і каталог карыстальніка для ананімных карыстальнікаў." show_inactive_accounts: "Дазволіць зарэгістраваным карыстальнікам праглядаць профілі неактыўных уліковых запісаў." log_personal_messages_views: "Увайсці асабістыя погляды паведамленні ад адміністратара для іншых карыстальнікаў" ignored_users_count_message_threshold: "Апавяшчаць мадэратараў, калі канкрэтны карыстальнік ігнаруе многіх іншых карыстальнікаў." @@ -1224,8 +1223,6 @@ be: staged_users_disabled: "Вы павінны спачатку ўключыць «паставілі карыстальнік» перад уключэннем гэтага параметру." reply_by_email_disabled: "Вы павінны спачатку ўключыць «адказ па электроннай пошце», перад тым як уключыць гэтую наладу." enable_local_logins_disabled: "Вы павінны спачатку ўключыць «каб мясцовыя лагіны» перад уключэннем гэтага параметру." - min_username_length_range: "Вы не можаце ўсталяваць мінімум вышэй максімуму." - max_username_length_range: "Вы не можаце ўсталяваць максімум ніжэй мінімуму." invalid_hex_value: "Значэння колеру павінны быць 6-значныя шаснаццаткавыя коды." allowed_unicode_usernames: leading_trailing_slash: "Рэгулярны выраз не павінна пачынацца і заканчвацца касой рысай." @@ -2333,10 +2330,6 @@ be: title: "Так" approve_and_unhide: title: "Так" - no_action_post: - title: "Ніякіх дзеянняў" - no_action_user: - title: "Ніякіх дзеянняў" delete_user: reason: "Выдаляецца з дапамогай чарзе на разгляд" fallback_username: "карыстальнік" diff --git a/config/locales/server.bg.yml b/config/locales/server.bg.yml index 94a23c9149487..aeac748123afd 100644 --- a/config/locales/server.bg.yml +++ b/config/locales/server.bg.yml @@ -484,6 +484,7 @@ bg: user_api_key: deny: "Отмени" read: "четене" + copied: "Копирано!" otp_confirmation: confirm_title: Продължете към %{site_name} logging_in_as: Влизане като %{username} @@ -511,7 +512,8 @@ bg: flag: Тип visits: title: "Потребителски посещения " - xaxis: "Ден" + xaxis: + mobile: "Мобилен" yaxis: "Брой на посещенията" signups: xaxis: "Ден" @@ -535,7 +537,6 @@ bg: yaxis: "Ден" dau_by_mau: xaxis: "Ден" - description: "Броят на членовете, които са влезли в системата през последния ден, разделен на броя на членовете, които са влезли в системата през последния месец - дава %, който показва \"привързаността\" на общността. Стремете се към >20%." daily_engaged_users: xaxis: "Ден" profile_views: @@ -865,6 +866,7 @@ bg: strip_images_from_short_emails: "Премахни от имейлите по-малките от 2800 байта изображения" sendgrid_verification_key: "Ключ за проверка на Sendgrid, използван за проверка на съобщенията на Webhook." mailjet_webhook_token: "Токен, използван за проверка на полезния товар на webhook. Той трябва да бъде предаден като параметър на заявката \"t\" на webhook, например: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Токен, използван за проверка на полезния товар на webhook. Той трябва да бъде предаден като параметър на заявката \"t\" на webhook, например: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Ключ за удостоверение Mandrill, който се използва за проверка на webhook съобщения" postmark_webhook_token: "Токен, използван за проверка на полезния товар на webhook. Той трябва да бъде предаден като параметър на заявката \"t\" на webhook, например: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Токен, използван за проверка на полезния товар на webhook. Той трябва да бъде предаден като параметър на заявката \"t\" на webhook, например: https://example.com/webhook/sparkpost?t=supersecret" @@ -1572,8 +1574,6 @@ bg: description: "Безопасният режим ви позволява да тествате сайта си, без да зареждате теми или персонализации на плъгини от страна на клиента. Персонализирането на плъгини от страна на сървъра остава активирано." no_unofficial_plugins: "Деактивирайте неофициалните персонализации на приставки от страна на клиента" no_plugins: "Деактивирайте всички персонализации на приставки от страна на клиента" - dev_mode: - enter: "Въведете" wizard: step: setup: diff --git a/config/locales/server.bs_BA.yml b/config/locales/server.bs_BA.yml index 285cb88e96c8e..d446dc3a27af9 100644 --- a/config/locales/server.bs_BA.yml +++ b/config/locales/server.bs_BA.yml @@ -386,6 +386,7 @@ bs_BA: user_api_key: deny: "Odustani" read: "čitaj" + copied: "Kopirano!" otp_confirmation: confirm_title: Nastavi ka %{site_name} logging_in_as: Prijavite se kao %{username} @@ -413,7 +414,9 @@ bs_BA: flag: Tip visits: title: "User Visits" - xaxis: "Day" + xaxis: + desktop: "Desktop" + mobile: "Mobilno" yaxis: "Number of visits" signups: xaxis: "Day" @@ -1006,8 +1009,6 @@ bs_BA: button: "Registriraj" resend_email: title: "Pošalji ponovo email aktivacije" - dev_mode: - enter: "Naprijed" wizard: step: setup: diff --git a/config/locales/server.ca.yml b/config/locales/server.ca.yml index d1006c64b1b9b..5203716b5ea24 100644 --- a/config/locales/server.ca.yml +++ b/config/locales/server.ca.yml @@ -717,6 +717,7 @@ ca: read: "llegeix" read_write: "llegeix/escriu" instructions: 'Hem generat una nova clau d''API d''usuari per a utilitzar amb "%{application_name}". Enganxeu la clau següent en la vostra aplicació:' + copied: "Copiat!" otp_description: 'Voleu permetre que "%{application_name}" accedeixi a aquest lloc web?' otp_confirmation: confirm_title: Continua a %{site_name} @@ -789,7 +790,9 @@ ca: description: "Llista dels estats de les banderes incloent-hi la classe de bandera, el publicador, el reportador i el temps de resolució." visits: title: "Visites de l'usuari" - xaxis: "Dia" + xaxis: + desktop: "Escriptori" + mobile: "Mòbil" yaxis: "Nombre de visites" signups: title: "Registres" @@ -826,10 +829,8 @@ ca: site_traffic: yaxis: "Dia" dau_by_mau: - title: "DAU/MAU" xaxis: "Dia" yaxis: "DAU/MAU" - description: "Nombre de membres que han iniciat sessió el darrer dia dividit pel nombre de membres que ha iniciat sessió el darrer mes. Dóna un % que indica l'_adhesivitat_ de la comunitat. Objectiu >20%." daily_engaged_users: title: "Usuaris diaris compromesos" xaxis: "Dia" @@ -1195,7 +1196,6 @@ ca: allowed_internal_hosts: "Llista d'amfitrions interns que Discourse pot rastrejar de manera segura per a onebox i altres finalitats." allowed_crawler_user_agents: "Agents d'usuari dels rastrejadors web als quals es permet accedir al lloc web. ATENCIÓ! ESTABLIR AIXÒ IMPEDIRÀ ACTUAR A TOTS ELS RASTREJADORS NO LLISTATS AQUÍ!" slow_down_crawler_rate: "Si s'especifica slow_down_crawler_user_agents, aquesta ràtio s'aplicarà a tots els rastrejadors (nombre de segons de retard entre les sol·licituds)." - content_security_policy_collect_reports: "Habilita la recol·lecció de reports de violació de CSP en /csp_reports" invalidate_inactive_admin_email_after_days: "Els comptes d'administrador que no hagin visitat el lloc web en aquest nombre de dies hauran de tornar a validar la seva adreça de correu abans d'iniciar la sessió. 0 per a desactivar-ho." share_links: "Determina quins elements apareixen en el diàleg de compartir i en qui ordre." site_contact_username: "Nom d'usuari vàlid de l'equip responsable des del qual s'envien tots els missatges automàtics. Si es deixa buit, es farà servir el compte per defecte del sistema." @@ -1371,7 +1371,6 @@ ca: alternative_reply_by_email_addresses: "Llista de plantilles alternatives per a les adreces de resposta per correu. Per exemple: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "Utilitza HTML en comptes de text per al correu electrònic entrant." strip_incoming_email_lines: "Elimina els espais en blanc al principi i al final de cada línia de correu electrònic entrant." - disable_emails: "Evita que Discourse enviï cap mena de correu electrònic. Seleccioneu \"sí\" per a inhabilitar els correus per a tots els usuaris. Seleccioneu \"no equip responsable\" per a inhabilitar els correus sols per a usuaris fora de l'equip responsable." strip_images_from_short_emails: "Elimina imatges de correus amb una mida inferior a 2800 bytes" display_name_on_email_from: "Mostra noms complets en els camps de remitent dels correus" unsubscribe_via_email: "Permet als usuaris cancel·lar la subscripció enviant un correu amb 'unsubscribe' en el tema o en el cos del missatge." @@ -1433,7 +1432,6 @@ ca: enable_group_directory: "Proporciona un directori de grups per a navegar-hi" group_in_subject: "Estableix %%{optional_pm} en l'assumpte del correu al nom del primer grup en MP. Vegeu: Personalitza el format de l'assumpte en correus estàndard." anonymous_account_duration_minutes: "Per a protegir l'anonimat, crea un compte anònim nou per a cada usuari cada N minuts. Per exemple: si és configurat a 600, tan bon punt passin 600 minuts des de la darrera publicació *i* l'usuari canviï a anònim, es crearà un nou compte anònim." - hide_user_profiles_from_public: "Inhabilita targetes d'usuari, perfils d'usuari i directori d'usuaris per a usuaris anònims." show_inactive_accounts: "Permet que els usuaris que han iniciat la sessió explorin els perfils dels comptes inactius." log_personal_messages_views: "Registra les visualitzacions dels missatges personals d'altres usuaris o grups fetes per administradors." ignored_users_count_message_threshold: "Notifica als moderadors si un usuari determinat és ignorat per molts altres usuaris." @@ -1542,10 +1540,6 @@ ca: staged_users_disabled: "Cal activar 'usuaris ficticis' abans d'activar aquest paràmetre." reply_by_email_disabled: "Cal habilitar primer 'resposta per correu' abans d'habilitar aquesta opció." enable_local_logins_disabled: "Primer cal habilitar \"habilita els inicis de sessió locals\" abans d'habilitar aquesta opció." - min_username_length_exists: "No podeu establir la longitud mínima del nom d'usuari per damunt del nom d'usuari més curt (%{username})." - min_username_length_range: "No podeu definir el mínim per damunt del màxim." - max_username_length_exists: "No podeu establir la longitud màxima del nom d'usuari per sota del nom d'usuari més llarg (%{username})." - max_username_length_range: "No podeu definir el màxim per sota del mínim." invalid_hex_value: "Els valors de color han de ser codis hexadecimals de 6 dígits." allowed_unicode_usernames: regex_invalid: "L'expressió regular no és vàlida: %{error}" @@ -2731,8 +2725,6 @@ ca: title: "Entra en mode segur" enter: "Entra en mode segur" must_select: "Cal seleccionar almenys una opció per a entrar en mode segur." - dev_mode: - enter: "Retorn" wizard: title: "Instal·lació de Discourse" step: @@ -2850,12 +2842,8 @@ ca: title: "Sí" approve_and_unhide: title: "Sí" - no_action_post: - title: "Cap acció" delete_post: complete: "Publicació suprimida" - no_action_user: - title: "Cap acció" delete_user: complete: "Usuari suprimit" reason: "Suprimit mitjançant cua de revisió" diff --git a/config/locales/server.cs.yml b/config/locales/server.cs.yml index df42c1f1a58fe..2f90ba0d5bffc 100644 --- a/config/locales/server.cs.yml +++ b/config/locales/server.cs.yml @@ -60,8 +60,6 @@ cs: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} od %{username}" - too_many_urls: "Do jednoho požadavku nelze vložit více než 10 adres URL." - concurrency_not_allowed: "Souběžné požadavky na inline-oneboxing nejsou povoleny. Odešlete prosím vždy jednu žádost." components: enabled_filter: "Zapnuto" disabled_filter: "Vypnuto" @@ -399,7 +397,6 @@ cs: slow_down_crawler_user_agent_must_be_at_least_3_characters: "'User agents' musí mít alespoň 3 znaky, aby nedošlo k náhodnému omezení rychlosti legitimních uživatelů." slow_down_crawler_user_agent_cannot_be_popular_browsers: "K nastavení nemůžete přidat žádnou z následujících hodnot: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Odstranění metadat odstranění obrázků nelze zakázat, pokud je povolena možnost 'composer media optimization image enabled'. Před vypnutím odstraňování metadat obrázků zakažte možnost 'composer media optimization image enabled'." - x_summary_large_image_no_svg: "Obrázky na Twitter shrnutí používané pro twitter:image metadata nemohou být obrázky .svg." tl0_and_anonymous_flag: "Pro anonymní uživatele musí být nastaven buď 'site contact email' nebo 'email address to report illegal content'." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Toto nastavení vyžaduje, aby bylo nejprve povoleno nastavení 'allow anonymous mode'." conflicting_google_user_id: 'ID účtu Google pro tento účet se změnilo; z bezpečnostních důvodů je nutný zásah redakce. Kontaktujte prosím redakci a odkažte je na
https://meta.discourse.org/t/76575' @@ -1296,6 +1293,7 @@ cs: permissions_header: 'Toto povolí přístup „%{application_name}“:' redirect_warning: "Ověření vás přesměruje na" instructions: 'Právě jsme pro vás vygenerovali nový uživatelský klíč API, který můžete použít s „%{application_name}“, do své aplikace vložte prosím následující klíč:' + copied: "Zkopírováno!" otp_description: 'Chcete povolit přístup k tomuto webu uživateli „%{application_name}“?' otp_confirmation: confirm_title: Pokračovat na %{site_name} @@ -1374,9 +1372,10 @@ cs: description: "Seznam stavů nahlášení včetně typu, přispěvatele, ohlašovatele a doby do odbavení." visits: title: "Návštěvy uživatelů" - xaxis: "Den" + xaxis: + desktop: "Desktop" + mobile: "Mobilní verze" yaxis: "Počet návštěv" - description: "Počet návštěv přihlášených uživatelů." signups: title: "Registrace" xaxis: "Den" @@ -1438,10 +1437,8 @@ cs: description: "Počty zobrazených stránek pro přihlášené uživatele, anonymní uživatele, známé prohledávače a další provoz." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" xaxis: "Den" yaxis: "DAU/MAU" - description: "Počet členů, kteří se přihlásili za poslední den, vydělený počtem členů, kteří se přihlásili za poslední měsíc – vrátí %, které označuje „přilnavost“ komunity. Zaměřte se na > 20 %." daily_engaged_users: title: "Denně zapojení uživatelé" xaxis: "Den" @@ -1944,7 +1941,6 @@ cs: slow_down_crawler_rate: "Pokud je zadána hodnota slow_down_crawler_user_agents,použije se tato hodnota na všechny crawlery (počet sekund prodlevy mezi požadavky)." content_security_policy: "Povolte zásady zabezpečení obsahu (CSP). CSP je další vrstva zabezpečení, která pomáhá předcházet určitým typům útoků, včetně Cross Site Scripting (XSS) a data injection." content_security_policy_report_only: "Povolit Content-Security-Policy-Report-Only (CSP)" - content_security_policy_collect_reports: "Povolit shromažďování zpráv o porušení CSP na /csp_reports" content_security_policy_frame_ancestors: "Omezit, kdo může zabudovat tento web do iframů přes CSP. Nastavte povolené hostitele v Zabudování" content_security_policy_script_src: "Další zdroje skriptů na seznamu povolených. Aktuální hostitel a CDN jsou zahrnuty ve výchozím nastavení. Viz Zmírnění útoků XSS pomocí zásad zabezpečení obsahu. (CSP). Ostatní zdroje hostitelů jsou ignorovány, protože je povoleno nastavení strict-dynamic." invalidate_inactive_admin_email_after_days: "Administrátorské účty, které web v tomto počtu dní nenavštívily, budou muset před přihlášením znovu ověřit svou e-mailovou adresu. Pro deaktivaci nastavte hodnotu 0." @@ -2030,7 +2026,6 @@ cs: enable_local_logins_via_email: "Umožnit uživatelům požádat o přihlášení odesláním odkazu pro přihlášení jedním kliknutím prostřednictvím e-mailu." allow_new_registrations: "Povolit registraci nových uživatelů. Zrušte zaškrtnutí této možnosti, pokud chcete zabránit komukoli ve vytváření nového účtu." enable_signup_cta: "Zobrazit vracejícím se anonymním uživatelům oznámení s výzvou k registraci účtu." - enable_discourse_id: "Povolit ověření pomocí Discourse ID, jednotné přihlašovací služby, která umožňuje uživatelům přihlásit se na více stránkách Discourse pomocí jediného účtu. Běžní poskytovatelé sociálních přihlášení jako Google, Facebook, Apple, Github jsou podporováni bez další konfigurace. Více informací naleznete na id.discourse.com." enable_google_oauth2_logins: "Povolit ověřování Google Oauth2. Toto je metoda ověřování, kterou Google aktuálně podporuje. Vyžaduje klíč a tajný kód. Viz Konfigurace přihlášení Google pro Discourse." google_oauth2_client_id: "Jedinečné ID klienta poskytnuté vaší aplikací Google, používané pro proces ověřování." google_oauth2_client_secret: "Client secret vaší Google aplikace." @@ -2275,7 +2270,6 @@ cs: group_in_subject: "Nastavit %%{optional_pm} v předmětu e-mailu podle názvu první skupiny v SZ, viz: Přizpůsobit formát předmětu pro standardní e-maily" allow_anonymous_mode: "Povolit uživatelům možnost přepnout se při odesílání příspěvků do anonymního režimu. Po aktivaci mohou uživatelé při vytváření příspěvků nebo témat na webu zvolit skrytí své identity. Viz také `allow anonymous likes`." anonymous_account_duration_minutes: "Pro ochranu anonymity vytvářet pro každého uživatele každých N minut nový anonymní účet. Příklad: pokud je nastaveno na 600, jakmile od posledního příspěvku uplyne 600 minut A ZÁROVEŇ se uživatel přepne na anonymního uživatele, vytvoří se nový anonymní účet." - hide_user_profiles_from_public: "Zakázat uživatelské karty, uživatelské profily a adresář uživatelů pro nepřihlášené uživatele." hide_new_user_profiles: "Skrýt profily uživatelů s úrovní důvěryhodnosti 1 nebo nižší před veřejností a uživatelům s úrovní důvěryhodnosti 1 důvěřovat, dokud poprvé nepřispějí. Tato funkce je bezpodmínečně zakázána na stránkách s nastavením 'must_approve_users' a 'invite_only'." allow_users_to_hide_profile: "Umožnit uživatelům skrýt svůj profil a přítomnost" hide_user_activity_tab: "Skrýt kartu Aktivita v uživatelském profilu pro jiné uživatele, než jsou správci a vlastníci profilu." @@ -2334,8 +2328,6 @@ cs: many: "Musí mít alespoň %{count} znaků." other: "Musí mít alespoň %{count} znaků." staged_users_disabled: "Než toto nastavení povolíte, musíte nejprve povolit „předběžně založené uživatele“." - min_username_length_range: "Nemůžete nastavit minimum nad maximum." - max_username_length_range: "Nemůžete nastavit maximum pod minimum." delete_rejected_email_after_days: "Toto nastavení nemůže být nižší než nastavení delete_email_logs_after_days nebo vyšší než %{max}." keywords: navigation_menu: "postranní panel|rozbalovací nabídka v záhlaví" @@ -2362,7 +2354,6 @@ cs: exclude_tag: "Vyloučit témata s konkrétním štítkem" exclude_tags_any: "Vyloučit témata s kterýmkoli ze zadaných štítků (oddělenými čárkou)" exclude_tags_all: "Vyloučit témata se všemi zadanými štítky (oddělenými plusem)" - tags_alias: "Alias pro filtr 'tag:'" tag_group: "Zobrazit témata se štítky z konkrétní skupiny štítků" exclude_tag_group: "Vyloučit témata se štítky z konkrétní skupiny štítků" activity_before: "Zobrazit témata s poslední činností před datem (RRRR-MM-DD nebo před x dny)" @@ -2799,35 +2790,9 @@ cs: new_version_mailer: title: "Nová verze" subject_template: "[%{email_prefix}] Nová verze Discourse, k dispozici jsou aktualizace" - text_body_template: | - Hurá, k dispozici je nová verze [Discourse](https://www.discourse.org)! - - Vaše verze: %{installed_version} - Nová verze: **%{new_version}** - - - Aktualizuzjte pomocí našeho snadného **[upgrade jedním kliknutím v prohlížeči](%{base_url}/admin/upgrade)** - - - Podívejte se, co je nového v [poznámkách k vydání](https://meta.discourse.org/tag/release-notes) nebo si prohlédněte [protokol změn na GitHubu](https://github.com/discourse/discourse/commits/main) - - - Navštivte [meta.discourse.org](https://meta.discourse.org) pro novinky, diskuze a podporu Discourse nebo [meta.discourse.cz](https://meta.discourse.cz) pro českou verzi. new_version_mailer_with_notes: title: "Nová verze s poznámkami" subject_template: "[%{email_prefix}] k dispozici je aktualizace" - text_body_template: | - Hurá, k dispozici je nová verze [Discourse](https://www.discourse.org)! - - Vaše verze: %{installed_version} - Nová verze: **%{new_version}** - - - Aktualizuzjte pomocí našeho snadného **[upgrade jedním kliknutím v prohlížeči](%{base_url}/admin/upgrade)** - - - Podívejte se, co je nového v [poznámkách k vydání](https://meta.discourse.org/tag/release-notes) nebo si prohlédněte [protokol změn na GitHubu](https://github.com/discourse/discourse/commits/main) - - - Navštivte [meta.discourse.org](https://meta.discourse.org) pro novinky, diskuze a podporu Discourse nebo [meta.discourse.cz](https://meta.discourse.cz) pro českou verzi. - - ### Poznámky k vydání - - %{notes} flag_reasons: off_topic: "Váš příspěvek byl označen jako **mimo téma**: komunita se domnívá, že se nehodí k tématu, jak je aktuálně definováno v názvu a prvním příspěvku." inappropriate: "Váš příspěvek byl označen jako **nevhodný**: komunita se domnívá, že je útočný, urážlivý, že se jedná o nenávistné chování nebo o porušení [našich komunitních zásad](%{base_path}/guidelines)." @@ -2873,47 +2838,9 @@ cs: reviewable_queued_post_revise_and_reject: title: "Zpětná vazba na váš příspěvek" subject_template: "Zpětná vazba na váš příspěvek v %{topic_title}" - text_body_template: | - Ahoj %{username}, - - Váš příspěvek v [%{topic_title}](%{topic_url}) jsme zkontrolovali a máme pro vás nějakou zpětnou vazbu. - - Důvod: %{reason} - - Zpětná vazba: %{feedback} - - Níže můžete upravit a znovu odeslat svůj původní příspěvek, abyste provedli navrhované změny. Pokud máte nějaké dotazy, odpovězte na tuto zprávu. - - -------- - - %{original_post} - - -------- - - Díky, - Moderátoři %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "Zpětná vazba na vaše téma" subject_template: 'Zpětná vazba k novému tématu s názvem "%{topic_title}"' - text_body_template: | - Ahoj %{username}, - - Zkontrolovali jsme vaše nové téma s názvem „%{topic_title}“ a máme pro vás zpětnou vazbu. - - Důvod: %{reason} - - Zpětná vazba: %{feedback} - - Níže můžete upravit a znovu odeslat původní příspěvek svého tématu, abyste provedli navrhované změny. Pokud máte nějaké dotazy, odpovězte na tuto zprávu. - - -------- - - %{original_post} - - -------- - - Díky, - %{site_name} Moderátoři post_hidden_again: title: "Příspěvek byl opět skryt" subject_template: "Příspěvek skryt nahlášeními komunity, redakce byla upozorněna" @@ -4441,8 +4368,6 @@ cs: deprecation_error_label: Umožnit, aby zastaralé Javascripty vyvolaly chybu enter: "Vstoupit do bezpečného režimu" must_select: "Chcete-li vstoupit do bezpečného režimu, musíte vybrat alespoň jednu možnost." - dev_mode: - enter: "Enter" wizard: title: "Nastavení Discourse" step: @@ -4677,10 +4602,6 @@ cs: complete: "Příspěvek schválen a zviditelněn" post_actions: bundle_title: "Co chcete s příspěvkem udělat?" - no_action_post: - title: "Bez akce" - description: "S příspěvkem nepodniknout žádnou akci" - complete: "S příspěvkem nebyla provedena žádná akce" delete_post: title: "Odstranit příspěvek" description: "Smazat příspěvek" @@ -4701,16 +4622,8 @@ cs: title: "Upravit příspěvek" description: "Upravit obsah tohoto příspěvku" complete: "Příspěvek upraven" - convert_to_pm: - title: "Převést na SZ" - description: "Převést tento příspěvek na soukromou zprávu" - complete: "Příspěvek převeden na soukromou zprávu" user_actions: bundle_title: "Co chcete udělat s tímto uživatelem?" - no_action_user: - title: "Bez akce" - description: "Proti tomuto uživateli nepodniknout žádná opatření" - complete: "Proti uživateli nebyla podniknuta žádná opatření" silence_user: title: "Ztišit uživatele" description: "Zabránit uživateli v publikování příspěvků" diff --git a/config/locales/server.da.yml b/config/locales/server.da.yml index b0a6a130212dc..8d60ab86257b5 100644 --- a/config/locales/server.da.yml +++ b/config/locales/server.da.yml @@ -856,6 +856,7 @@ da: read: "læst" read_write: "læse/skrive" instructions: 'Vi har netop genereret en ny bruger-API-nøgle, som du kan bruge med "%{application_name}", indsæt venligst følgende nøgle i din applikation:' + copied: "Kopieret!" otp_description: 'Vil du tillade at "%{application_name}" får adgang til dette websted?' otp_confirmation: confirm_title: Fortsæt til %{site_name} @@ -925,7 +926,9 @@ da: flagger: Indberetter visits: title: "Brugerbesøg" - xaxis: "Dag" + xaxis: + desktop: "Desktop" + mobile: "Mobil" yaxis: "Antal besøg" signups: title: "Tilmeldinger" @@ -979,7 +982,6 @@ da: yaxis: "Dag" description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" xaxis: "Dag" yaxis: "DAU/MAU" daily_engaged_users: @@ -1345,7 +1347,6 @@ da: allowed_crawler_user_agents: "Brugeragenter for webcrawlere, der skal have adgang til webstedet. ADVARSEL! INDSTILLES DETTE VIL ALLE CRAWLERE, DER IKKE ER ANGIVET HER BLIVE NÆGTET!" blocked_crawler_user_agents: "Entydigt store og små bogstaver i brugeragentstrengen, der identificerer webcrawlere, der ikke skal have adgang til webstedet. Gælder ikke, hvis tilladelsesliste er defineret." slow_down_crawler_rate: "Hvis der er angivet slow_down_crawler_user_agents, gælder denne sats for alle crawlere (antal sekunders forsinkelse mellem anmodninger)" - content_security_policy_collect_reports: "Aktivér CSP-overtrædelsesrapportindsamling på /csp_reports" invalidate_inactive_admin_email_after_days: "Administratorkonti, der ikke har besøgt webstedet i dette antal dage, skal validere deres e-mailadresse igen, før de logger ind. Indstil til til 0 for at deaktivere." share_links: "Angiv hvilke elementer der skal vises i “del“-dialogboksen og i hvilken rækkefølge." site_contact_username: "Et gyldigt personale-brugernavn, som alle automatiske meddelelser skal sendes fra. Hvis den er tom, bruges standard systemkontoen." @@ -1472,7 +1473,6 @@ da: cooldown_hours_until_reflag: "Hvor lang tid brugerne skal vente, indtil de kan genanmelde et indlæg" reply_by_email_address: "Skabelon for e-mail-adressen i formularen, for eksempel: %%{reply_key}@reply.myforum.com." incoming_email_prefer_html: "Brug HTML i stedet for tekst til indgående e-mail." - disable_emails: "Forhindre Discourse i at sende nogen form for e-mails. Vælg 'ja' for at deaktivere e-mails for alle brugere. Vælg 'ikke-personale' for at deaktivere e-mails for ikke-personale brugere." strip_images_from_short_emails: "Undlad at inkludere billeder fra emails som fylder mindre end 2800 Bytes" display_name_on_email_from: "Vis fulde navne på emails fra felter" unsubscribe_via_email: "Tillad brugere at afmelde sig fra emails ved at sende en email med \"unsubscribe\" i emne eller indholdsfeltet" @@ -1510,7 +1510,6 @@ da: staff_user_custom_fields: "En liste over brugertilpassede felter, der kan hentes for personale med API'en." enable_user_directory: "Gør det muligt at gennemse et indeks af brugere " enable_group_directory: "Tilbyd en oversigt over grupper til gennemsyn" - hide_user_profiles_from_public: "Deaktiver brugerkort, brugerprofiler og brugerkatalog for anonyme brugere." show_inactive_accounts: "Tillad brugere der er logget ind at gennemse profiler af inaktive konti." user_selected_primary_groups: "Tillad brugere at indstille deres egen primære gruppe" allow_profile_backgrounds: "Tillad brugere at uploade en profil baggrund." @@ -1582,8 +1581,6 @@ da: invalid_alternative_reply_by_email_addresses: "Alle værdier skal indeholde '%{reply_key}' og være forskellige fra notifikations e-mail." pop3_polling_authentication_failed: "POP3 godkendelse mislykkedes. Kontroller venligst dine pop3 legitimationsoplysninger." reply_by_email_address_is_empty: "Du skal angive en 'svar via email-adresse', før du aktiverer svar via e-mail." - min_username_length_range: "Du kan ikke sætte minimum til mere end maksimum." - max_username_length_range: "Du kan ikke sætte maksimum til mindre end minimum." invalid_hex_value: "Farveværdier skal være 6-cifrede hexadecimale koder." empty_selectable_avatars: "Du skal først overføre mindst to valgbare avatarer før du aktiverer denne indstilling." placeholder: @@ -3098,8 +3095,6 @@ da: title: "Gå ind i fejlsikret tilstand" enter: "Gå ind i fejlsikret tilstand" must_select: "Du skal vælge mindst én mulighed for at gå i fejlsikret tilstand." - dev_mode: - enter: "Enter" wizard: title: "Discourse Opsætning" step: @@ -3230,13 +3225,9 @@ da: title: "Ja" approve_and_unhide: title: "Ja" - no_action_post: - title: "Ingen handling" delete_post: title: "Slet indlæg" complete: "Indlæg slettet" - no_action_user: - title: "Ingen handling" delete_user: title: "Slet bruger" complete: "Bruger slettet" diff --git a/config/locales/server.de.yml b/config/locales/server.de.yml index b175e4779d4fd..3da664ceaa9fc 100644 --- a/config/locales/server.de.yml +++ b/config/locales/server.de.yml @@ -60,8 +60,8 @@ de: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} von %{username}" - too_many_urls: "Onebox kann nicht mehr als 10 URLs in einer einzigen Anfrage einbinden." - concurrency_not_allowed: "Gleichzeitige Inline-Oneboxing-Anfragen sind nicht erlaubt. Bitte sende nur eine Anfrage auf einmal." + too_many_urls: "Es können nicht mehr als 10 URLs in einer einzigen Anfrage in Inline-Oneboxen umgewandelt werden." + concurrency_not_allowed: "Gleichzeitige Anfragen zur Umwandlung von URLs in Inline-Oneboxen sind nicht erlaubt. Bitte sende nur eine Anfrage auf einmal." components: enabled_filter: "Aktiviert" disabled_filter: "Deaktiviert" @@ -260,6 +260,7 @@ de: errors: &errors format: ! "%{attribute} %{message}" format_with_full_message: "%{attribute}: %{message}" + diff_too_complex: "Die Unterschiede sind zu komplex, um sicher berechnet zu werden. Bitte versuche es mit kleineren Änderungen." messages: invalid_locale: "%{invalid_locale} ist keine gültige Sprachvariante" too_long_validation: @@ -279,7 +280,7 @@ de: greater_than: muss größer als %{count} sein greater_than_or_equal_to: muss größer oder gleich %{count} sein has_already_been_used: "wird bereits verwendet" - in: muss in %{count} sein + in: muss innerhalb von %{count} sein inclusion: ist nicht in der Liste enthalten invalid: ist ungültig is_invalid: "scheint unklar zu sein, ist das ein ganzer Satz?" @@ -347,7 +348,7 @@ de: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Browserkennungen müssen mindestens 3 Zeichen lang sein, um zu verhindern, dass legitime Benutzer versehentlich einer Durchsatzratenbegrenzung unterworfen werden." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Du kannst keinen der folgenden Werte zu der Einstellung hinzufügen: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Du kannst das Entfernen der Bild-Metadaten nicht deaktivieren, wenn „composer media optimization image enabled“ aktiviert ist. Deaktiviere „composer media optimization image enabled“, bevor du das Entfernen der Bild-Metadaten deaktivierst." - x_summary_large_image_no_svg: "Twitter-Zusammenfassungsbilder, die für twitter:image-Metadaten verwendet werden, können keine .svg-Bilder sein." + x_summary_large_image_no_svg: "X-Zusammenfassungsbilder, die für twitter:image-Metadaten verwendet werden, können keine .svg-Bilder sein." tl0_and_anonymous_flag: "Für anonyme Benutzer muss entweder „site contact email“ oder „email address to report illegal content“ angegeben werden." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Für diese Einstellung muss zuerst die Einstellung „allow anonymous mode“ aktiviert werden." conflicting_google_user_id: 'Die Google-Konto-ID für dieses Konto hat sich geändert; das Einschreiten des Teams ist aus Sicherheitsgründen erforderlich. Bitte kontaktiere das Team und verweise es auf
https://meta.discourse.org/t/76575' @@ -595,6 +596,7 @@ de: one: "Maximal %{count} Benutzer kann auf einmal hinzugefügt werden" other: "Maximal %{count} Benutzer können auf einmal hinzugefügt werden" usernames_or_emails_required: "Benutzernamen oder E-Mails müssen vorhanden sein" + cannot_add_emails: "Um Mitglieder zu dieser Gruppe hinzuzufügen, können nur Benutzernamen verwendet werden. Um per E-Mail einzuladen, verwende die Schaltfläche „Einladen“." counting_too_many_email_domains: one: "Maximal %{count} E-Mail-Domain kann auf einmal gezählt werden" other: "Maximal %{count} E-Mail-Domains können auf einmal gezählt werden" @@ -816,6 +818,12 @@ de: other: "Diese Kategorie kann nicht gelöscht werden, weil sie %{count} Themen enthält. Das älteste Thema ist %{topic_link}." topic_exists_no_oldest: "Diese Kategorie kann nicht gelöscht werden, da die Anzahl der Themen %{count} beträgt." uncategorized_description: "Themen, welche keine Kategorie benötigen oder in keine existierende Kategorie passen." + category_types: + not_available: "Der Kategorietyp '%{type_name}' ist nicht verfügbar." + discussion: + name: "Diskussion" + title: "Diskussion" + description: "Eine Standardkategorie mit allem, was man für eine Unterhaltung braucht." trust_levels: admin: "Administrator" staff: "Team" @@ -1055,6 +1063,8 @@ de: connection_error: "Es gab ein Problem beim Verbinden mit dem Server, überprüfe den Servernamen und den Port und versuche es erneut." timeout_error: "Zeitüberschreitung bei der Verbindung zum Server, überprüfe den Servernamen und den Port und versuche es erneut." unhandled_error: "Unbehandelter Fehler beim Testen der E-Mail-Einstellungen. %{message}" + invalid_host: "Der angegebene Host wird zu einer unzulässigen IP-Adresse aufgelöst." + host_resolve_failed: "Der angegebene Host konnte nicht aufgelöst werden." webauthn: validation: invalid_type_error: "Der angegebene webauthn-Typ war ungültig. Gültige Typen sind webauthn.get und webauthn.create." @@ -1139,6 +1149,8 @@ de: weekly: "wöchentlich" every_month: "jeden Monat" every_six_months: "alle sechs Monate" + calendar_subscriptions: + application_name: "Kalender-Abonnements" user_api_key: title: 'Autorisiere „%{application_name}“' authorize: "Genehmigen" @@ -1149,6 +1161,8 @@ de: permissions_header: 'Dies erlaubt „%{application_name}“:' redirect_warning: "Bei der Autorisierung wirst du weitergeleitet zu" instructions: 'Wir haben gerade einen neuen Benutzer-API-Schlüssel für dich generiert zur Verwendung mit „%{application_name}“, bitte füge den folgenden Schlüssel in deine Anwendung ein:' + copy_key: "Schlüssel kopieren" + copied: "Kopiert!" otp_description: 'Möchtest du „%{application_name}“ erlauben, auf diese Website zuzugreifen?' otp_confirmation: confirm_title: Weiter zu %{site_name} @@ -1227,9 +1241,11 @@ de: description: "Liste der Meldungszustände einschließlich Art der Meldung, Beitragsersteller, Meldungsersteller und Zeit bis zur Lösung." visits: title: "Benutzerbesuche" - xaxis: "Tag" + xaxis: + desktop: "Desktop" + mobile: "Mobil" yaxis: "Anzahl der Besuche" - description: "Anzahl der Besuche von angemeldeten Benutzern." + description: "Anzahl der Besuche von angemeldeten Benutzern nach Gerätetyp." signups: title: "Neue Benutzer" xaxis: "Tag" @@ -1293,10 +1309,10 @@ de: description: "Seitenaufrufe für angemeldete Benutzer, anonyme Benutzer, bekannte Crawler und anderen Traffic." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "TAB/MAB" + title: "TAB / MAB" xaxis: "Tag" yaxis: "TAB/MAB" - description: "Anzahl der Mitglieder, die sich innerhalb des letzten Tages angemeldet haben, geteilt durch die Anzahl der Mitglieder, die sich im letzten Monat angemeldet haben – liefert eine Prozentzahl, welche die „Bindung“ der Community angibt. Erstrebenswert sind 20 % oder mehr." + description: "Der Anteil der monatlich aktiven Mitglieder, die am Vortag zurückgekehrt sind. Dieser Prozentsatz zeigt, wie regelmäßig die Mitglieder wiederkommen; er wird auch als „Community-Bindung“ bezeichnet. Zielwert: > 20 %." daily_engaged_users: title: "Täglich engagierte Benutzer" xaxis: "Tag" @@ -1589,7 +1605,7 @@ de: problem: twitter_login: 'Die Anmeldung über Twitter scheint im Moment nicht zu funktionieren. Überprüfe die Anmeldedaten in den Website-Einstellungen.' group_email_credentials: 'Es gab ein Problem mit den E-Mail-Anmeldedaten für die Gruppe %{group_full_name}. Bis dieses Problem behoben ist, werden keine E-Mails aus dem Posteingang der Gruppe versendet. %{error}' - upcoming_change_stable_opted_out: 'Deine Website hat die bevorstehende Änderung "%{upcoming_change}" deaktiviert. Diese Änderung hat jetzt den Status „dauerhaft“ erreicht und wird bald entfernt. Besuche die Seite mit den bevorstehenden Änderungen, um mehr über diese Änderung zu erfahren.' + upcoming_change_stable_opted_out: 'Deine Website hat die bevorstehende Änderung „%{upcoming_change}“ deaktiviert. Diese Änderung hat jetzt den Status „stabil“ erreicht und wird bald entfernt. Besuche die Seite mit den bevorstehenden Änderungen, um mehr über diese Änderung zu erfahren.' rails_env: "Dein Server läuft im %{env}-Modus." host_names: "Deine config/database.yml-Datei verwendet den Standard-Hostnamen localhost. Trage hier den Hostnamen deiner Website ein." sidekiq: 'Sidekiq läuft nicht. Viele Aufgaben – wie zum Beispiel das Versenden von E-Mails – werden asynchron durch Sidekiq ausgeführt. Bitte stell sicher, dass mindestens ein Sidekiq-Prozess läuft. Mehr über Sidekiq erfährst du hier.' @@ -1638,7 +1654,7 @@ de: support_mixed_text_direction: "Unterstütze die Vermischung von rechtsläufigem und linksläufigem Text" min_post_length: "Minimal zulässige Beitragslänge in Zeichen (ohne persönliche Nachrichten)" min_first_post_length: "Zulässige Mindestlänge des ersten Beitrags (Thementext) (ohne persönliche Nachrichten)" - prevent_uploads_only_posts: "Markdown-Code von Uploads bei der Prüfung der Mindestlänge des Beitrags (festgelegt mit der \"min post lenght\" Einstellung) nicht berücksichtigen" + prevent_uploads_only_posts: "Markdown-Code von Uploads bei der Prüfung der Mindestlänge des Beitrags (festgelegt mit der Einstellung „min post length“) nicht berücksichtigen" min_personal_message_post_length: "Minimal zulässige Beitragslänge in Zeichen für Nachrichten (sowohl erster Beitrag als auch Antworten)" max_post_length: "Maximal zulässige Beitragslänge in Zeichen." topic_featured_link_enabled: "Ermöglicht es Benutzern, ihren Themen einen Feature-Link zuzuweisen. Wenn diese Funktion aktiviert ist, können Themen mit einem hervorgehobenen Link versehen werden, der öffentlich sichtbar ist und bearbeitet werden kann, wenn der Benutzer über ausreichende Berechtigungen verfügt. Der Feature-Link kann die Verständlichkeit eines Themas verbessern, indem er zusätzliche Inhalte bereitstellt." @@ -1711,10 +1727,12 @@ de: max_oneboxes_per_post: "Lege die maximale Anzahl von Oneboxes fest, die in einem Beitrag enthalten sein können. Oneboxes bieten eine Vorschau der verlinkten Inhalte im Beitrag." facebook_app_access_token: "Ein Token, das aus deiner Facebook-App-ID und deinem Geheimnis generiert wird. Wird verwendet, um Instagram-Oneboxes zu generieren." github_onebox_access_tokens: "Eine Zuordnung einer GitHub-Organisation oder eines GitHub-Benutzers zu einem GitHub-Zugriffs-Token, das verwendet wird, um GitHub-Oneboxes für private Repos, Commits, Pull Requests, Issues und Dateiinhalte zu erzeugen. Ohne dieses Token werden nur öffentliche GitHub-URLs in eine Onebox umgewandelt." + reddit_onebox_client_id: "Reddit-API-OAuth-Client-ID, die für authentifizierte Reddit-Oneboxes verwendet wird. Erstelle eine App vom Typ „script“ unter reddit.com/prefs/apps, um Anmeldedaten zu erhalten." + reddit_onebox_client_secret: "Reddit-API-OAuth-Client-Secret, das für authentifizierte Reddit-Oneboxes verwendet wird. Zu finden unter der App vom Typ „script“ die auf reddit.com/prefs/apps erstellt wurde." logo: "Das Logo oben links auf deiner Website. Verwende ein breites rechteckiges Bild mit einer Höhe von 120 Pixeln und einem Seitenverhältnis von mindestens 3:1. Wenn leer, wird die Website-Überschrift angezeigt." logo_small: "Kleine Logo-Grafik oben links auf der Website, die beim Herunterscrollen angezeigt wird. Verwende ein quadratisches Bild (120 × 120). Falls leer, wird ein „Home“-Zeichen angezeigt." digest_logo: "Das alternative Logo oben in den E-Mail-Zusammenfassungen deiner Website. Verwende ein breites rechteckiges Bild. Verwende kein SVG-Bild. Wenn leer, wird das Bild aus der `logo`-Einstellung verwendet." - mobile_logo: "Das Logo auf der mobilen Ausgabe deiner Website. Wir empehlen ein quartatisches Bild zu verwenden, damit die Kopfzeile nicht zu voll wird. Aber du kannst auch ein breites rechteckiges Bild mit einer Höhe von 120 Pixeln und einem Seitenverhältnis von mindestens 3:1 verwenden. Wenn leer, wird das Bild aus der `logo`-Einstellung verwendet." + mobile_logo: "Das Logo auf der mobilen Ausgabe deiner Website. Wir empfehlen ein quadratisches Bild zu verwenden, damit die Kopfzeile nicht zu voll wird. Aber du kannst auch ein breites rechteckiges Bild mit einer Höhe von 120 Pixeln und einem Seitenverhältnis von mindestens 3:1 verwenden. Wenn leer, wird das Bild aus der `logo`-Einstellung verwendet." logo_dark: "Alternative für dunkles Schema betreffend die Website-Einstellung „logo“." logo_small_dark: "Alternative für dunkles Schema betreffend die Website-Einstellung „logo small“." mobile_logo_dark: "Alternative für dunkles Schema betreffend die Website-Einstellung „mobile logo“." @@ -1793,6 +1811,7 @@ de: moderators_manage_categories: "Moderatoren erlauben, Kategorien zu erstellen und zu verwalten" moderators_manage_groups: "Moderatoren erlauben, Gruppen zu erstellen und zu verwalten" moderators_change_post_ownership: "Moderatoren erlauben, die Eigentümerschaft des Beitrags zu ändern" + change_post_ownership_allowed_groups: "Erlaube Benutzern in diesen Gruppen, den Eigentümer von Beiträgen zu ändern" cors_origins: "Erlaubte Adressen für Cross-Origin-Requests (CORS). Jede Adresse muss http:// oder https:// enthalten. Die Umgebungsvariable DISCOURSE_ENABLE_CORS muss gesetzt sein, um CORS zu aktivieren." use_admin_ip_allowlist: "Administratoren können sich nur anmelden, wenn sie eine IP-Adresse nutzen, die in der Liste der gefilterten IPs definiert ist (Administration > Protokolle > Gefilterte IPs)." blocked_ip_blocks: "Eine Liste von privaten IP-Blöcken, die nie von Discourse indiziert werden sollen" @@ -1806,7 +1825,6 @@ de: llms_txt: "Lade eine Textdatei hoch, die unter /llms.txt für LLM-Crawler bereitgestellt wird. Siehe llmstxt.org für weitere Informationen." content_security_policy: "Aktiviere die Content-Security-Policy (CSP). CSP ist eine zusätzliche Sicherheitsebene, die hilft, bestimmte Arten von Angriffen zu verhindern, z. B. Cross Site Scripting (XSS) und Data Injection." content_security_policy_report_only: "Content-Security-Policy-Report-Only (CSP) aktivieren" - content_security_policy_collect_reports: "Aktiviere die Sammlung von Berichten zu CSP-Verstößen unter /csp_reports" content_security_policy_frame_ancestors: "Schränke ein, wer diese Website in iframes über CSP einbetten kann. Kontrolliere erlaubte Hosts unter Einbettung" content_security_policy_script_src: "Zusätzliche Skript-Quellen auf der Erlaubnisliste. Der aktuelle Host und das CDN sind standardmäßig enthalten. Siehe Minderung von XSS-Angriffen mit Content Security Policy (CSP). Host-Quellen werden ignoriert, wenn content_security_policy_strict_dynamic aktiviert ist." invalidate_inactive_admin_email_after_days: "Administrator-Konten, die die Website in dieser Anzahl von Tagen nicht besucht haben, müssen ihre E-Mail-Adresse erneut bestätigen, bevor sie sich anmelden können. 0 zum Deaktivieren." @@ -1961,7 +1979,7 @@ de: invite_link_max_redemptions_limit_users: "Die maximal zulässigen Einlösungen für Einladungslinks, die von regulären Benutzern erstellt wurden, dürfen diesen Wert nicht überschreiten." alert_admins_if_errors_per_minute: "Anzahl der Fehler pro Minute, bei der ein Administrator benachrichtigt werden soll. Ein Wert von 0 deaktiviert diese Funktion. HINWEIS: Erfordert einen Neustart." alert_admins_if_errors_per_hour: "Anzahl der Fehler pro Stunde, bei der ein Administrator benachrichtigt werden soll. Ein Wert von 0 deaktiviert diese Funktion. HINWEIS: Erfordert einen Neustart." - categories_topics: 'Anzahl der Themen, die auf der Seite /categories angezeigt werden. Bei 0 wird automatisch ein Wert gewählt, um die beiden Spalten (Kategorien und Themen) symmetrisch zu halten. Nur relevant für „Kategorien und aktuelle/ angesagte Themen“ category page style Einstellungen.' + categories_topics: 'Anzahl der Themen, die auf der Seite /categories angezeigt werden. Bei 0 wird automatisch ein Wert gewählt, um die beiden Spalten (Kategorien und Themen) symmetrisch zu halten. Nur relevant für die Kategorien-Seitenstile „Kategorien und aktuelle/angesagte Themen“.' suggested_topics: "Anzahl der empfohlenen Themen am Ende eines Themas." limit_suggested_to_category: "Zeige nur Themen der aktuellen Kategorie in vorgeschlagenen Themen." suggested_topics_max_days_old: "Vorgeschlagene Themen sollten nicht älter als n Tage sein." @@ -2115,6 +2133,8 @@ de: num_flaggers_to_close_topic: "Mindestzahl unabhängiger Mitglieder, die ein Thema melden, damit es automatisch für eine Prüfung pausiert wird." num_hours_to_close_topic: "Anzahl der Stunden, um ein Thema für eine Intervention zu pausieren." auto_respond_to_flag_actions: "Automatische Antwort auf abgearbeitete Meldungen aktivieren." + min_first_post_typing_time: "Zeit, die ein Benutzer mindestens aufwenden muss, um seinen ersten Beitrag zu schreiben. Wenn diese Zeit unterschritten wird, wird der Beitrag automatisch in die Warteschlange für freizuschaltende Beiträge verschoben. Setze diesen Wert auf 0, um dieses Verhalten zu deaktivieren (nicht empfohlen)." + fast_typing_threshold: "Zeit, die ein Benutzer mindestens aufwenden muss, um seinen ersten Beitrag zu schreiben. Wenn diese Zeit unterschritten wird, wird der Beitrag automatisch in die Warteschlange für freizuschaltende Beiträge verschoben. „Low“ ist 1 Sekunde, „standard“ sind 3 Sekunden, „high“ sind 5 Sekunden." auto_silence_fast_typers_on_first_post: "Automatisches Stummschalten von Benutzern, die `fast typing threshold` nicht erreichen" auto_silence_fast_typers_max_trust_level: "Maximale Vertrauensstufe, um „Schnelltipper“ stummzuschalten." auto_silence_first_post_regex: "Regex ohne Berücksichtigung der Groß-/Kleinschreibung, die bei Erfolg dazu führt, dass der erste Beitrag des Benutzers stummgeschaltet und an die Genehmigungswarteschlange gesendet wird. Beispiel: wüten|a[bc]a wird dazu führen, dass alle Beiträge, die „wüten“ oder „aba“ oder „aca“ enthalten, stummgeschaltet werden. Gilt nur für den ersten Beitrag. VERALTET: Verwende stattdessen „Beobachtete Wörter stummschalten“." @@ -2133,7 +2153,7 @@ de: alternative_reply_by_email_addresses: "Liste der alternativen Vorlagen für die Beantwortung per E-Mail (eingehende E-Mail-Adressen). Beispiel: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "Verwende HTML statt Text für eingehende E-Mails." strip_incoming_email_lines: "Entferne führende und folgende Leerzeichen von jeder Zeile eingehender E-Mails." - disable_emails: "Discourse daran hindern, jegliche E-Mails zu versenden. Wähle „yes“, um E-Mails für alle Benutzer zu deaktivieren. Wähle „non-staff“, um E-Mails für alle Benutzer außer den Team-Mitgliedern zu deaktivieren." + disable_emails: "Discourse daran hindern, jegliche E-Mails zu versenden. Wähle „yes“, um ausgehende E-Mails für alle Benutzer zu deaktivieren. Wähle „non-staff“, um E-Mails für alle Benutzer außer den Team-Mitgliedern zu deaktivieren." allow_email_invites: "Wenn diese Funktion deaktiviert ist, können Benutzer keine Einladungs-E-Mails mehr über Discourse versenden." strip_images_from_short_emails: "Entferne Bilder aus E-Mails kleiner als 2800 Bytes." short_email_length: "Lege die maximale Länge einer E-Mail in Bytes fest, damit sie als „kurz“ in Bezug auf die Bildunterdrückung eingestuft wird. Wenn die Größe einer E-Mail diese Einstellung nicht überschreitet, werden alle Bilder (wie Avatare und Emojis) aus der E-Mail entfernt." @@ -2152,6 +2172,7 @@ de: mailgun_api_key: "Geheimer Mailgun-API-Schlüssel, um Webhook-Nachrichten zu überprüfen." sendgrid_verification_key: "Sendgrid-Verifizierungsschlüssel, der zur Verifizierung von Webhook-Nachrichten verwendet wird." mailjet_webhook_token: "Token, das zur Verifizierung der Webhook-Payload verwendet wird. Es muss als „t“-Abfrageparameter des Webhooks übergeben werden, zum Beispiel: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Token, das zur Verifizierung der Webhook-Payload verwendet wird. Es muss als „t“-Abfrageparameter des Webhooks übergeben werden, zum Beispiel: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Mandrill-Authentifizierungsschlüssel, der zur Verifizierung von Webhook-Nachrichten verwendet wird." postmark_webhook_token: "Token, das zur Verifizierung der Webhook-Payload verwendet wird. Es muss als „t“-Abfrageparameter des Webhooks übergeben werden, zum Beispiel: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Token, das zur Verifizierung der Webhook-Payload verwendet wird. Es muss als „t“-Abfrageparameter des Webhooks übergeben werden, zum Beispiel: https://example.com/webhook/sparkpost?t=supersecret" @@ -2226,7 +2247,7 @@ de: allow_likes_in_anonymous_mode: "Aktiviere diese Einstellung, um Benutzern im anonymen Modus das Markieren von Beiträgen mit „Gefällt mir“ zu ermöglichen. Wenn diese Einstellung aktiviert ist, können die Benutzer ihre Identität verbergen, wenn sie Beiträge oder Themen auf der Website mit „Gefällt mir“ versehen. Für diese Einstellung muss die Einstellung `allow anonymous mode` aktiviert sein." anonymous_posting_allowed_groups: "Gruppen, die den anonymen Modus nutzen dürfen. Für diese Einstellung muss die Einstellung „allow anonymous mode“ aktiviert sein." anonymous_account_duration_minutes: "Erzeuge alle N Minuten ein neues anonymes Konto je Benutzer, um die Anonymität zu gewährleisten. Beispiel: Ein Wert von 600 sorgt dafür, dass ein neues anonymes Konto erzeugt wird, wenn ein Benutzer in den anonymen Modus wechselt UND mindestens 600 Minuten seit dem letzten Beitrag dieses Benutzers vergangen sind." - hide_user_profiles_from_public: "Deaktiviert Benutzerkarten, Benutzerprofile und das Benutzerverzeichnis für anonyme Benutzer." + hide_user_profiles_from_public: "Deaktiviere Benutzerkarten und Benutzerprofile für anonyme Benutzer. Zusammengefasste Statistiken im Benutzerverzeichnis sind weiterhin zugänglich." hide_new_user_profiles: "Verstecke Benutzerprofile der Vertrauensstufe 1 oder niedriger vor der Öffentlichkeit und bei Benutzern der Vertrauensstufe 1, bis sie zum ersten Mal posten. Diese Funktion ist auf Websites mit must_approve_users und invite_only bedingungslos deaktiviert." allow_users_to_hide_profile: "Benutzern erlauben, ihr Profil und ihre Präsenz auszublenden" hide_user_activity_tab: "Blende die Registerkarte „Aktivität“ in Benutzerprofilen (außer für Administratoren und den Benutzer selbst) aus." @@ -2322,7 +2343,7 @@ de: disable_watched_word_checking_in_user_fields: "deaktiviere die Prüfung überwachter Wörter in Benutzerfeldern" watched_words_regular_expressions: "Erlaubt die Verwendung von regulären Ausdrücken zum Filtern von Wörtern. Wenn diese Funktion aktiviert ist, gruppiert sie sensible Wörter nach ihrer Groß- und Kleinschreibung. Anschließend werden alle ausgewählten Wörter in einem einzigen regulären Ausdruck zusammengefasst, wobei Wortgrenzen für regulär überwachte Wörter hinzugefügt werden. Diese Regex-basierte Filtermethode fügt also eine zusätzliche Kontrollebene für die Inhaltsmoderation hinzu, indem sie komplexere Wortmuster unterstützt. Die Einstellung ermöglicht es außerdem, den ursprünglichen Text einfach durch die Ersetzung deiner Wahl zu ersetzen." enable_fast_edit: "Fügt dem Beitragsauswahlmenü eine Schaltfläche hinzu, um eine kleine Auswahl inline zu bearbeiten." - old_post_notice_days: "Die Anzahl der Tage, nach denen die Benachrichtigungen über neue und wiederkehrende Benutzer ausgeblendet werden. Offizielle Mitteilungen bleibt immer sichtbar." + old_post_notice_days: "Die Anzahl der Tage, nach denen die Mitteilungen über neue und wiederkehrende Benutzer ausgeblendet werden. Offizielle Mitteilungen bleiben immer sichtbar." new_user_notice_tl: "Minimale Vertrauensstufe, die für das Sehen von Beitragsnotizen neuer Benutzer erforderlich ist." returning_user_notice_tl: "Minimale Vertrauensstufe, die für das Sehen von Beitragsnotizen wiederkehrender Benutzer erforderlich ist." returning_users_days: "Wie viele Tage vergehen sollten, bevor ein Benutzer als wiederkehrend betrachtet wird." @@ -2438,21 +2459,23 @@ de: show_bottom_topic_map: "Zeigt die Themenübersicht am Ende des Themas an, wenn es 10 Antworten oder mehr hat." show_topic_map_in_topics_without_replies: "Zeigt die Themenübersicht an, auch wenn es zum Thema keine Antworten gibt." enable_site_owner_onboarding: "Zeigt neuen Administratoren auf der Startseite ein Panel an, das ihnen den Einstieg erleichtert. Aktiviere diese Einstellung wieder, um die Einführungsschritte erneut zu sehen." + site_owner_onboarding_max_days: "Maximale Anzahl von Tagen nach der Erstellung der Website, an denen das Onboarding-Banner angezeigt wird." enable_welcome_banner: "Zeige auf den Hauptseiten mit Themenlisten ein Banner an, um Mitglieder willkommen zu heißen und ihnen die Suche nach Website-Inhalten zu ermöglichen" welcome_banner_image: "Lege ein Bild fest, das im Hintergrund des Willkommensbanners angezeigt werden soll." welcome_banner_location: "Legt fest, wo auf der Seite das Willkommensbanner erscheinen soll." welcome_banner_page_visibility: "Legt fest, auf welchen Seiten das Willkommensbanner erscheinen soll." - welcome_banner_text_color: "Wenn du die „Welcome banner image“ Einstellung konfiguriert hast, kannst du mit dieser Einstellung die Textfarbe des Banners ändern, um sicherzustellen, dass er lesbar bleibt. Wenn du keine Farbe wählst oder kein Hintergrundbild hochgeladen hast, wird die Farbe vom aktiven Theme bestimmt." + welcome_banner_text_color: "Wenn du die Einstellung „Welcome banner image“ konfiguriert hast, kannst du mit dieser Einstellung die Textfarbe des Banners ändern, um sicherzustellen, dass er lesbar bleibt. Wenn du keine Farbe wählst oder kein Hintergrundbild hochgeladen hast, wird die Farbe vom aktiven Theme bestimmt." splash_screen: "Zeigt einen temporären Ladebildschirm an, während Website-Assets geladen werden" - splash_screen_image: "Ein SVG-Bild, das auf dem Bildschirm angezeigt wird, während die Website geladen wird. Animierte SVGs sollten nur CSS-Transformations oder - Deckkraftanimationen verwenden. Verwende eindeutige Namen für die Css-Klassen und Keyframes. Du kannst var(--primary), var(--secondary) und var(--tertiary) verwenden, um auf die Farben des Themes zu verweisen." + splash_screen_image: "Ein SVG-Bild, das auf dem Bildschirm angezeigt wird, während die Website geladen wird. Animierte SVGs sollten nur CSS-Transformations oder -Deckkraftanimationen verwenden. Verwende eindeutige Namen für die CSS-Klassen und Keyframes. Du kannst var(--primary), var(--secondary) und var(--tertiary) verwenden, um auf die Farben des Themes zu verweisen." navigation_menu: "Lege die Seitenleiste oder das Kopfzeilen-Drop-down als Hauptnavigationsmenü für deine Website fest. Die Seitenleiste wird empfohlen." default_navigation_menu_categories: "Ausgewählte Kategorien werden standardmäßig im Abschnitt „Kategorien“ des Navigationsmenüs angezeigt." default_navigation_menu_tags: "Ausgewählte Schlagwörter werden standardmäßig im Abschnitt „Schlagwörter“ des Navigationsmenüs angezeigt." experimental_new_new_view_groups: 'Eine neue Themenliste aktivieren, die ungelesene und neue Themen kombiniert, und den Link „Alles“ in der Seitenleiste entsprechend verknüpfen.' - enable_form_templates: "Aktivieren die Formularvorlagen-Funktion. Damit kannst du ein strukturiertes Formular mit Datenvalidierung im Rahmen der Themenerstellung erzwingen." + enable_form_templates: "Aktiviere die Formularvorlagen-Funktion. Damit kannst du ein strukturiertes Formular mit Datenvalidierung im Rahmen der Themenerstellung erzwingen." show_preview_for_form_templates: "Aktiviere die Vorschau für Formularvorlagen" lazy_load_categories_groups: "Lazy Loading von Kategorieinformationen nur für Benutzer dieser Gruppen. Dies verbessert die Leistung auf Websites mit vielen Kategorien." - enable_auto_grid_images: "Wickelt Bilder automatisch in [grid]-Tags ein, wenn 3 oder mehr Bilder im Composer hochgeladen werden." + enable_auto_grid_images: "Schließt Bilder automatisch in [grid]-Tags ein, wenn 3 oder mehr Bilder im Editor hochgeladen werden." + enable_new_checkbox_style: "Aktiviere den neu gestalteten Kontrollkästchen-Stil für FormKit-Checkboxes." impersonate_without_logout: "Erlaube Administratoren in die Rolle eines anderen Benutzers zu schlüpfen, ohne sich von ihrem Administratorkonto abmelden zu müssen." experimental_impersonation_time_limit_minutes: "Nach welcher Zeitspanne das Schlüpfen in die Rolle eines Benutzers automatisch beendet wird." page_loading_indicator: "Die Ladeanzeige konfigurieren, die bei der Seitennavigation in Discourse erscheint. „Spinner“ ist ein ganzseitiger Indikator. „Slider“ zeigt einen schmalen Balken am oberen Rand des Bildschirms an." @@ -2475,13 +2498,13 @@ de: content_localization_crawler_param: "Liefert lokalisierte Inhalte an Webcrawler, wenn 'content localization enabled' und 'set locale from param' aktiviert sind. Die Liste der unterstützten Sprachumgebungen ist in 'content localization supported locales' definiert." content_localization_use_default_locale_when_unsupported: "Biete Benutzern, deren bevorzugte Sprache nicht in 'content localization supported locales' konfiguriert ist, lokalisierte Inhalte in der Standardsprache der Website an." content_localization_allow_author_localization: "Ermögliche es Autoren, die Lokalisierungen ihrer eigenen Themen und Beiträge über das Beitragsmenü zu aktualisieren." - enable_upcoming_changes: "Aktiviere bevorstehende Änderungen" fake_upcoming_change: "Dies ist keine echte bevorstehende Änderung. Sie dient zu Testzwecken und muss nicht übersetzt werden." - floating_dismiss_topics_on_mobile: "Zeigt auf dem Handy über der Themenliste eine schwebende \"Verwerfen...\"-Schaltfläche, um den Zugriff zu erleichtern und Platz im oberen Bereich der Themenliste freizugeben" + floating_dismiss_topics_on_mobile: "Zeigt auf dem Handy über der Themenliste eine schwebende „Verwerfen …“-Schaltfläche, um den Zugriff zu erleichtern und Platz im oberen Bereich der Themenliste freizugeben" rename_faq_to_guidelines: "Diese Änderung benennt die FAQ-Seite in „Richtlinien“ um. Die FAQ-Seite ist weiterhin unter /faq erreichbar. Die Einstellung „faq url“ funktioniert wie bisher." enable_simplified_category_creation: "Ermöglicht eine vereinfachte Kategorienerstellung mit weniger Optionen und einer übersichtlicheren Oberfläche." - enable_custom_splash_screen: "Ermöglicht die Anpassung des Ladebildschirms mit einem eigenen SVG-Bild. Lade ein Bild über die Einstellung \"Splash Screen Image\" hoch. Achtung! Dies kann sich negativ auf die LCP-Bewertung und die Google-Indexierung auswirken." + enable_custom_splash_screen: "Ermöglicht die Anpassung des Ladebildschirms mit einem eigenen SVG-Bild. Lade ein Bild über die Einstellung „Splash Screen Image“ hoch. Achtung! Dies kann sich negativ auf die LCP-Bewertung und die Google-Indexierung auswirken." modernize_foundation_theme: "Diese Änderung führt Design-Änderungen am Foundation-Theme in Discourse ein." + reporting_improvements: "Verbesserungen der Navigation, des Designs und der Benutzerfreundlichkeit für die Admin-Berichte in Discourse." errors: invalid_css_color: "Ungültige Farbe. Gib einen Farbnamen oder einen Hexadezimalwert ein." invalid_datetime: "Ungültiges Datums-/Uhrzeitformat. Bitte stelle sicher, dass du ein gültiges Datum und eine gültige Uhrzeit eingegeben hast." @@ -2489,6 +2512,8 @@ de: invalid_username: "Es gibt keinen Benutzer mit diesem Benutzernamen." valid_username: "Es gibt einen Benutzer mit diesem Benutzernamen." invalid_group: "Es gibt keine Gruppe mit diesem Namen." + invalid_svg: "Das SVG-Bild ist ungültig. Es muss ein SVG-Element enthalten und darf keine Skripte oder Event-Handler enthalten." + invalid_upload: "Der Upload ist ungültig oder existiert nicht." invalid_topic: "Es gibt kein Thema mit dieser ID." invalid_integer_min_max: "Der Wert muss zwischen %{min} und %{max} liegen." invalid_integer_min: "Der Wert muss %{min} oder größer sein." @@ -2526,12 +2551,12 @@ de: reply_by_email_disabled: "Du musst erst „reply by email“ aktivieren, bevor du diese Einstellung aktivierst." discourse_connect_url_is_empty: "Du musst eine „discourse connect url'“ festlegen, bevor du diese Einstellung aktivierst." enable_local_logins_disabled: "Du musst erst „enable local logins“ aktivieren, bevor du diese Einstellung aktivierst." - min_username_length_exists: "Du kannst die Mindestlänge von Benutzernamen nicht über den kürzesten Benutzernamen (%{username}) setzen." - min_group_name_length_exists: "Du kannst die minimale Länge von Benutzernamen nicht länger als den kürzesten Gruppennamen (%{group_name}) setzen." - min_username_length_range: "Du kannst das Minimum nicht über das Maximum setzen." - max_username_length_exists: "Du kannst die maximale Länge von Benutzernamen nicht unter den längsten Benutzernamen (%{username}) setzen." - max_group_name_length_exists: "Du kannst die maximale Länge von Benutzernamen nicht kürzer als längsten Gruppennamen (%{group_name}) setzen." - max_username_length_range: "Du kannst das Maximum nicht unter das Minimum setzen." + min_username_length_exists: "Du kannst die „min username length“ Einstellung nicht größer als den kürzesten Benutzernamen (%{username}) konfigurieren." + min_group_name_length_exists: "Du kannst die „min username length“ Einstellung nicht größer als den kürzesten Gruppennamen (%{group_name}) konfigurieren." + min_username_length_range: "Du kannst die „min username length“ Einstellung nicht größer als die „max username length“ Einstellung konfigurieren." + max_username_length_exists: "Du kannst die „max username length“ Einstellung nicht kleiner als den längsten Benutzernamen (%{username}) konfigurieren." + max_group_name_length_exists: "Du kannst die „max username length“ Einstellung nicht kleiner als den längsten Gruppennamen (%{group_name}) konfigurieren." + max_username_length_range: "Du kannst die „max username length“ Einstellung nicht kleiner als die „min username length“ Einstellung konfigurieren." invalid_hex_value: "Farbwerte müssen als 6-stellige Hexadezimalcodes angegeben werden." empty_selectable_avatars: "Du musst zunächst mindestens zwei auswählbare Avatare hochladen, bevor du diese Einstellung aktivieren kannst." category_search_priority: @@ -2594,18 +2619,19 @@ de: exclude_tag: "Themen mit einem bestimmten Schlagwort ausschließen" exclude_tags_any: "Themen mit einem der angegebenen Schlagwörter ausschließen (durch Kommas getrennt)" exclude_tags_all: "Themen mit allen angegebenen Schlagwörtern ausschließen (durch Kommas getrennt)" - tags_alias: "Alias für den Filter 'Schlagwort:'" tag_group: "Themen mit Schlagwörtern aus einer bestimmten Schlagwortgruppe anzeigen" exclude_tag_group: "Themen mit Schlagwörtern aus einer bestimmten Schlagwortgruppe ausschließen" - activity_before: "Themen mit letzter Aktivität vor einem Datum anzeigen (JJJJ-MM-TT oder vor Tagen)" - activity_after: "Themen mit letzter Aktivität nach einem Datum anzeigen (JJJJ-MM-TT oder vor Tagen)" + activity_before: "Themen mit letzter Aktivität vor einem Datum (JJJJ-MM-TT oder vor Tagen) anzeigen" + activity_after: "Themen mit letzter Aktivität nach einem Datum (JJJJ-MM-TT oder vor Tagen) anzeigen" + bookmarked_before: "Themen anzeigen, die vor einem Datum (JJJJ-MM-TT oder vor Tagen) mit Lesezeichen versehen wurden" + bookmarked_after: "Themen anzeigen, die nach einem Datum (JJJJ-MM-TT oder vor Tagen) mit Lesezeichen versehen wurden" created_before: "Themen anzeigen, die vor einem bestimmten Datum (JJJJ-MM-TT oder vor Tagen) erstellt wurden" - created_after: "Themen anzeigen, die nach einem Datum erstellt wurden (JJJJ-MM-TT oder vor Tagen)" + created_after: "Themen anzeigen, die nach einem Datum (JJJJ-MM-TT oder vor Tagen) erstellt wurden" created_by: "Themen anzeigen, die von einem bestimmten Benutzer oder Mitgliedern einer Gruppe erstellt wurden" created_by_user: "Themen anzeigen, die von 'Benutzername' oder einem Mitglied aus 'Gruppe' erstellt wurden (ohne @)" created_by_multiple: "Themen anzeigen, die von einem der angegebenen Benutzer oder Gruppen erstellt wurden (durch Kommas getrennt)" - latest_post_before: "Themen mit dem letzten Beitrag vor einem Datum anzeigen (JJJJ-MM-TT oder vor Tagen)" - latest_post_after: "Themen mit dem letzten Beitrag nach einem Datum anzeigen (JJJJ-MM-TT oder vor Tagen)" + latest_post_before: "Themen mit dem letzten Beitrag vor einem Datum (JJJJ-MM-TT oder vor Tagen) anzeigen" + latest_post_after: "Themen mit dem letzten Beitrag nach einem Datum (JJJJ-MM-TT oder vor Tagen) anzeigen" likes_min: "Themen mit mindestens so vielen „Gefällt mir“-Angaben anzeigen" likes_max: "Themen mit höchstens so vielen „Gefällt mir“-Angaben anzeigen" likes_op_min: "Themen anzeigen, deren erster Beitrag mindestens so viele „Gefällt mir“-Angaben hat" @@ -2632,7 +2658,7 @@ de: in_watching_first_post: "Themen anzeigen, bei denen du den ersten Beitrag beobachtest" in_new: "Themen anzeigen, die neu sind oder neue Antworten haben" in_new_replies: "Themen mit neuen Antworten anzeigen" - in_new_topics: "Zeige neue Themen" + in_new_topics: "Neue Themen anzeigen" in_unseen: "Themen anzeigen, die du noch nicht gesehen hast" order_activity: "Nach letzter Aktivität sortieren (die neuesten zuerst)" order_activity_asc: "Nach letzter Aktivität sortieren (die ältesten zuerst)" @@ -2795,6 +2821,7 @@ de: csrf_detected: "Die Autorisierung ist leider abgelaufen oder du hast den Browser gewechselt. Bitte versuche es erneut." request_error: "Beim Start der Autorisierung ist leider ein Fehler aufgetreten. Bitte versuche es erneut." invalid_iat: "Das Autorisierungstoken kann wegen unterschiedlicher Server-Uhrzeiten leider nicht geprüft werden. Bitte versuche es erneut." + unauthorized: "Leider wurde deine Anfrage vom Anmeldeanbieter nicht autorisiert. Bitte versuche es erneut oder kontaktiere einen Administrator." omniauth_error_unknown: "Bei der Verarbeitung deiner Anmeldung ist etwas schiefgelaufen, bitte versuche es noch einmal." omniauth_confirm_title: "Anmeldung per %{provider}" omniauth_confirm_button: "Weiter" @@ -3032,9 +3059,9 @@ de: Deine Version: %{installed_version} Neue Version: **%{new_version}** - - Aktualisierung mit dem einfachen **[Ein-Klick-Browser-Update](%{base_url}/admin/update)** durchführen + - Aktualisiere mit unserem einfachen **[Ein-Klick-Browser-Update](%{base_url}/admin/update)** - - Sieh dir die Neuerungen in den [Versionshinweisen](https://meta.discourse.org/tag/release-notes) an oder wirf einen Blick auf alle [Änderungen bei GitHub](https://github.com/discourse/discourse/commits/main) + - Sieh dir die Neuerungen in den [Versionshinweisen](https://releases.discourse.org/changelog/%{new_version}) an - Besuche [meta.discourse.org](https://meta.discourse.org) für Neuigkeiten, Diskussionen und Unterstützung rund um Discourse new_version_mailer_with_notes: @@ -3046,9 +3073,9 @@ de: Deine Version: %{installed_version} Neue Version: **%{new_version}** - - Aktualisierung mit dem einfachen **[Ein-Klick-Browser-Update](%{base_url}/admin/update)** durchführen + - Aktualisiere mit unserem einfachen **[Ein-Klick-Browser-Update](%{base_url}/admin/update)** - - Sieh dir die Neuerungen in den [Versionshinweisen](https://meta.discourse.org/tag/release-notes) an oder wirf einen Blick auf alle [Änderungen bei GitHub](https://github.com/discourse/discourse/commits/main) + - Sieh dir die Neuerungen in den [Versionshinweisen](https://releases.discourse.org/changelog/%{new_version}) an - Besuche [meta.discourse.org](https://meta.discourse.org) für Neuigkeiten, Diskussionen und Unterstützung rund um Discourse @@ -3106,47 +3133,9 @@ de: reviewable_queued_post_revise_and_reject: title: "Feedback zu deinem Beitrag" subject_template: "Feedback zu deinem Beitrag in %{topic_title}" - text_body_template: | - Hallo, %{username}! - - Wir haben uns deinen Beitrag in [%{topic_title}](%{topic_url}) angesehen und haben Feedback für dich. - - Grund: %{reason} - - Feedback: %{feedback} - - Du kannst deinen ursprünglichen Beitrag unten bearbeiten und erneut abschicken, um die vorgeschlagenen Änderungen vorzunehmen, oder auf diese Nachricht antworten, wenn du Fragen hast. - - -------- - - %{original_post} - - -------- - - Danke! - Die Moderatoren von %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "Feedback zu deinem Thema" subject_template: 'Feedback zum neuen Thema „%{topic_title}“' - text_body_template: | - Hallo, %{username}! - - Wir haben dein neues Thema mit dem Titel „%{topic_title}“ überprüft und haben Feedback für dich. - - Grund: %{reason} - - Feedback: %{feedback} - - Du kannst den Originalbeitrag deines Themas unten bearbeiten und erneut einreichen, um die vorgeschlagenen Änderungen vorzunehmen, oder auf diese Nachricht antworten, wenn du Fragen hast. - - -------- - - %{original_post} - - -------- - - Danke! - Die Moderatoren von %{site_name} post_hidden_again: title: "Beitrag wieder ausgeblendet" preview: "Beitrag von Community-Mitgliedern wieder ausgeblendet." @@ -4183,7 +4172,7 @@ de: %{base_url}/u/confirm-old-email/%{email_token} notify_old_email: title: "Benachrichtigung an alte E-Mail-Adresse" - preview: "E-Mail Adresse aktualisiert." + preview: "E-Mail-Adresse aktualisiert." subject_template: "[%{email_prefix}] Deine E-Mail-Adresse wurde geändert" text_body_template: | Dies ist eine automatisierte Nachricht, um eine Änderung deiner E-Mail-Adresse für %{site_name} mitzuteilen. Bitte kontaktiere einen Website-Administrator, wenn du von einem Fehler ausgehst. @@ -5051,7 +5040,7 @@ de: rss_by_tag: "Themen mit dem Schlagwort %{tag}" finish_installation: congratulations: "Glückwunsch, du hast Discourse installiert!" - login_with_discourse_id: "Mit Discourse-ID anmelden" + login_with_discourse_id: "Mit Discourse ID anmelden" discourse_id_help: "Bitte verwende den Button, um dich mit einem Discourse ID-Konto anzumelden.

Stelle sicher, dass du ein Discourse ID-Konto mit einer primären E-Mail-Adresse, die der Umgebungsvariablen `DISCOURSE_DEVELOPER_EMAILS` entspricht, verwendest." discourse_id_error_help: "Du hast dich entschieden, die Einrichtung der E-Mail vorerst zu überspringen. Leider kann die Einrichtung aufgrund der obigen Fehlermeldung nicht fortgesetzt werden. Bitte melde dieses Problem auf meta.discourse.org." register: @@ -5068,7 +5057,7 @@ de: discourse_id: help: "Wir richten jetzt Discourse ID für dich ein." no_allowed_emails: "In DISCOURSE_DEVELOPER_EMAILS sind keine zulässigen E-Mail-Adressen konfiguriert. Die Einrichtung der Website kann nicht fortgesetzt werden." - global_notice: "Es haben sich noch keine Administratoren angemeldet. Bitte melde dich mit einem Discourse ID-Konto und einer E-Mail an, die der Umgebungsvariablen `DISCOURSE_DEVELOPER_EMAILS` entspricht, um die Installation abzuschließen." + global_notice: "Es haben sich noch keine Administratoren angemeldet. Bitte melde dich mit einem Discourse ID-Konto und einer E-Mail-Adresse an, die der Umgebungsvariablen `DISCOURSE_DEVELOPER_EMAILS` entspricht, um die Installation abzuschließen." safe_mode: title: "Abgesicherten Modus betreten" description: "Im abgesicherten Modus kannst du deine Website testen, ohne Themes oder clientseitige Plug-in-Anpassungen zu laden. Server-seitige Plug-in-Anpassungen bleiben aktiviert." @@ -5082,7 +5071,7 @@ de: dev_mode: title: "Entwicklermodus" enable_rack_mini_profiler: "Rack Mini Profiler für 1 Stunde sitzungsunabhängig aktivieren" - enter: "Enter" + enter: "Entwicklermodus betreten" wizard: title: "Discourse einrichten" step: @@ -5146,14 +5135,14 @@ de: open: "Offener Pull Request" approved: "Genehmigter Pull Request" changes_requested: "Änderungen angefordert" - merged: "Gemergter Pull Request" + merged: "Zusammengeführter Pull Request" closed: "Geschlossener Pull Request" status_date: open: "offen" draft: "entworfen" approved: "genehmigt" changes_requested: "Änderungen angefordert" - merged: "Merged am" + merged: "Zusammengeführt am" closed: "geschlossen" discourse_push_notifications: popup: @@ -5306,7 +5295,7 @@ de: title: "Beitrag verwerfen" complete: "Beitrag verworfen." revise_and_reject_post: - title: "Überarbeitung anfordern..." + title: "Überarbeitung anfordern …" complete: "Beitrag wurde bis zur Überarbeitung abgelehnt." ignore: title: "Ignorieren" @@ -5378,10 +5367,6 @@ de: complete: "Beitrag genehmigt und wieder sichtbar gemacht" post_actions: bundle_title: "Was willst du mit dem Beitrag machen?" - no_action_post: - title: "Keine Aktion" - description: "Keine Maßnahmen bezüglich des Beitrags ergreifen" - complete: "Keine Aktion bezüglich des Beitrags ausgeführt" delete_post: title: "Beitrag löschen" description: "Diesen Beitrag löschen" @@ -5402,16 +5387,8 @@ de: title: "Beitrag bearbeiten" description: "Den Inhalt dieses Beitrags bearbeiten" complete: "Beitrag bearbeitet" - convert_to_pm: - title: "In PN umwandeln" - description: "Diesen Beitrag in eine persönliche Nachricht umwandeln" - complete: "Beitrag in persönliche Nachricht umgewandelt" user_actions: bundle_title: "Was willst du mit dem Benutzer machen?" - no_action_user: - title: "Keine Aktion" - description: "Keine Maßnahmen gegen den Benutzer ergreifen" - complete: "Keine Maßnahmen gegen den Benutzer ergriffen" silence_user: title: "Benutzer stummschalten" description: "Benutzer daran hindern Beiträge zu veröffentlichen" @@ -5429,11 +5406,11 @@ de: reason: "Gelöscht via Warteschlange zur Überprüfung" delete_and_block_user: title: "Löschen & Blockieren" - description: "Lösche den Benutzer und blockiere seine IP/E-Mail" + description: "Lösche den Benutzer und blockiere seine IP/E-Mail-Adresse" complete: "Benutzer gelöscht und gesperrt" delete_user_block: title: "Löschen & Blockieren" - description: "Lösche den Benutzer und blockiere seine IP/E-Mail" + description: "Lösche den Benutzer und blockiere seine IP/E-Mail-Adresse" complete: "Benutzer gelöscht und gesperrt" email_style: html_missing_placeholder: "Die HTML-Vorlage muss %{placeholder} beinhalten" diff --git a/config/locales/server.el.yml b/config/locales/server.el.yml index e8c2ddaee2959..aa0fb4ff4a302 100644 --- a/config/locales/server.el.yml +++ b/config/locales/server.el.yml @@ -94,6 +94,7 @@ el: not_valid_integer_value: "πρέπει να είναι ακέραιος αριθμός" not_valid_float_value: "πρέπει να είναι float" not_valid_boolean_value: "πρέπει να είναι boolean" + not_valid_enum_value: "πρέπει να είναι ένα από τα ακόλουθα: %{choices}" string_value_not_valid_max: one: "πρέπει να είναι το πολύ %{count} χαρακτήρα" other: "πρέπει να είναι το πολύ %{count} χαρακτήρες" @@ -192,6 +193,9 @@ el: site_settings: invalid_site_setting: "Δεν υπάρχει ρύθμιση με όνομα '%{name}'" invalid_category_id: "Καθορίσατε μια κατηγορία που δεν υπάρχει" + invalid_choice: + one: "'%{name}' δεν είναι έγκυρη επιλογή." + other: "'%{name}' δεν είναι έγκυρες επιλογές." default_categories_already_selected: "Δεν μπορείς να επιλέξεις μια κατηγορία που χρησιμοποιείται σε άλλη λίστα." default_tags_already_selected: "Δε μπορείτε να επιλέξετε μια ετικέτα που χρησιμοποιείται σε άλλη λίστα." s3_upload_bucket_is_required: "Δεν μπορείτε να ενεργοποιήσετε μεταφορτώσεις στο S3 εάν δεν παρέχετε το 's3_upload_bucket'." @@ -214,6 +218,7 @@ el:

Αυτή η πρόσκληση προς %{site_name} δεν μπορεί πλέον να εξαργυρωθεί. Παρακαλούμε ζητήστε από το άτομο που σας προσκάλεσε να σας στείλει μια νέα πρόσκληση.

existing_user_cannot_redeem: "Αυτή η πρόσκληση δεν μπορεί να εξαργυρωθεί. Παρακαλούμε ζητήστε από το άτομο που σας προσκάλεσε να σας στείλει μια νέα πρόσκληση." invite_exists: "Έχετε ήδη προσκαλέσει το %{email}." + invalid_email: "Το %{email} δεν είναι έγκυρη διεύθυνση email." confirm_email: "

Έχετε σχεδόν τελειώσει! Στείλαμε ένα email ενεργοποίησης στη διεύθυνση email σας. Παρακαλούμε ακολουθήστε τις οδηγίες στο μήνυμα για να ενεργοποιήσετε τον λογαριασμό σας.

Εάν δε φτάσει, ελέγξτε τον φάκελο ανεπιθύμητων μηνυμάτων.

" disabled_errors: invalid_access: "Δεν έχεις δικαίωμα να δεις τους πόρους που ζήτησες." @@ -257,6 +262,7 @@ el: delete_topic_failed: "Παρουσιάστηκε σφάλμα κατά τη διαγραφή αυτού του θέματος. Παρακαλώ επικοινωνήστε με τον διαχειριστή του ιστότοπου." reading_time: "Χρόνος ανάγνωσης" likes: "Μου Αρέσει" + action_already_performed: "Ωχ! Έχετε ήδη εκτελέσει αυτήν την ενέργεια. Μπορείτε να δοκιμάσετε να ανανεώσετε τη σελίδα;" too_many_replies: one: "Λυπούμαστε, αλλά οι νέοι χρήστες έχουν προσωρινό περιορισμό %{count} απάντησης ανά νήμα." other: "Λυπούμαστε, αλλά οι νέοι χρήστες περιορίζονται προσωρινά σε %{count} απαντήσεις στο ίδιο θέμα." @@ -308,6 +314,7 @@ el: topic_not_found: "Κάτι πήγε στραβά. Ίσως αυτό το θέμα έκλεισε ή διαγράφηκε ενώ το κοιτούσατε." not_accepting_pms: "Λυπούμαστε, ο/η %{username} δεν δέχεται μηνύματα αυτή τη στιγμή." max_pm_recipients: "Λυπούμαστε, μπορείτε να στείλετε μήνυμα το μέγιστο σε %{recipients_limit} παραλήπτες." + removed_direct_reply_full_quotes: "Αφαιρέθηκε αυτόματα η παράθεση ολόκληρης της προηγούμενης ανάρτησης." slow_mode_enabled: "Αυτό το θέμα είναι σε αργή λειτουργία." just_posted_that: "είναι παρόμοιο με αυτό που δημοσιεύσατε πρόσφατα" invalid_characters: "περιέχει μη έγκυρους χαρακτήρες" @@ -365,6 +372,7 @@ el: custom: "Προσαρμοσμένη ημερομηνία και ώρα" groups: errors: + grant_trust_level_not_valid: "Το '%{trust_level}' δεν είναι έγκυρο επίπεδο εμπιστοσύνης." can_not_modify_automatic: "Δεν μπορείς να τροποποιήσεις μια αυτόματη ομάδα" invalid_domain: "'%{domain}' δεν είναι έγκυρος τομέας." too_many_domains: "Πάρα πολλοί τομείς. Μέγιστο %{max}." @@ -473,6 +481,10 @@ el: attributes: word: too_many: "Πάρα πολλές λέξεις για την ενέργεια" + base: + invalid_url: "Το URL αντικατάστασης δεν είναι έγκυρο" + invalid_tag_list: "Η λίστα ετικετών αντικατάστασης δεν είναι έγκυρη" + invalid_html: "Η HTML μπορεί να χρησιμοποιηθεί μόνο για αντικατάσταση" sidebar_section_link: attributes: linkable_type: @@ -481,6 +493,7 @@ el: base: at_least_one_granular_scope: "πρέπει να επιλεγεί τουλάχιστον ένα" <<: *errors + uncategorized_category_name: "Χωρίς κατηγορία" general_category_name: "Γενικά" meta_category_name: "Σχολιασμός Ιστοσελίδας" meta_category_description: "Συζήτηση σχετικά με την ιστοσελίδα, την οργάνωσή της, τον τρόπο λειτουργίας της και πώς αυτή μπορεί να βελτιωθεί." @@ -489,6 +502,8 @@ el: discourse_welcome_topic: title: "Καλώς ήλθατε στο %{site_title}! :wave:" admin_quick_start_title: "Οδηγός Διαχειριστή: Ξεκινώντας" + topic_view_stats: + invalid_date: "Η ημερομηνία είναι σε μη έγκυρη μορφή, χρησιμοποιήστε ΕΕΕΕ-ΜΜ-ΗΗ" category: topic_prefix: "Σχετικά με την κατηγορία %{category} " post_template: "%{replace_paragraph}\n\nΧρησιμοποιήστε τις επόμενες παραγράφους για μια μεγαλύτερη περιγραφή ή για να ορίσεις οδηγίες και κανόνες για τις κατηγορίες:\n\n- Γιατί μπορεί να χρησιμοποιηθεί αυτή η κατηγορία; Ποιος είναι ο σκοπός της;\n\n- Αυτή η κατηγορία είναι διαφορετική από αυτές που έχουμε ήδη;\n\n- Τι πρέπει να περιέχουν τα θέματα αυτής της κατηγορίας γενικότερα;\n\n- Χρειαζόμαστε αυτή την κατηγορία; Μπορούμε να την ενώσουμε με άλλη κατηγορία ή υποκατηγορία;\n" @@ -519,10 +534,15 @@ el: media_placeholder: blocked_hotlinked_title: "Πολυμέσο που φιλοξενείται σε άλλον ιστότοπο. Κάντε κλικ για να ανοίξετε σε νέα καρτέλα." blocked_hotlinked: "Εξωτερικό Πολυμέσο" + hidden_bidi_character: "Οι χαρακτήρες αμφίδρομου ελέγχου μπορούν να αλλάξουν τη σειρά με την οποία απεικονίζεται το κείμενο. Αυτό θα μπορούσε να χρησιμοποιηθεί για την απόκρυψη κακόβουλου κώδικα." has_likes: one: "%{count} «Μου αρέσει»" other: "%{count} «Μου αρέσει»" rate_limiter: + slow_down: "Έχεις εκτελέσει αυτήν την ενέργεια πάρα πολλές φορές, δοκίμασε ξανά αργότερα." + too_many_requests: "Έχεις εκτελέσει αυτήν την ενέργεια πάρα πολλές φορές. Περίμενε %{time_left} πριν δοκιμάσεις ξανά." + by_type: + public_group_membership: "Συμμετέχετε/αποχωρείτε από ομάδες λίγο πολύ συχνά. Παρακαλούμε περιμένετε %{time_left} πριν προσπαθήσετε ξανά." hours: one: "%{count} ώρα" other: "%{count} ώρες" @@ -704,6 +724,12 @@ el: draft_backup: pm_title: "Αντίγραφα ασφαλείας προσχεδίων από τρέχοντα θέματα" pm_body: "Θέμα που περιέχει αντίγραφα ασφαλείας προσχεδίων" + user_activity: + no_log_search_queries: "Οι καταγραφές των ερωτημάτων αναζήτησης είναι αυτήν τη στιγμή απενεργοποιημένες (ένας διαχειριστής μπορεί να τις ενεργοποιήσει στις ρυθμίσεις του ιστότοπου)." + webauthn: + validation: + user_presence_error: "Απαιτείται η παρουσία του χρήστη." + user_verification_error: "Απαιτείται η επαλήθευση του χρήστη." topic_flag_types: spam: title: "Ανεπιθύμητα" @@ -747,10 +773,16 @@ el: mute_topic: "Σίγαση όλων των ειδοποιήσεων για αυτό το νήμα, %{link}" unwatch_category: "Διακοπή επιτήρησης όλων των θεμάτων της κατηγορίας %{category}" mailing_list_mode: "Απενεργοποιήστε τη λειτουργία της ταχυδρομικής λίστας" + all: "Να μην μου στέλνετε μηνύματα από %{sitename}" different_user_description: "Έχετε συνδεθεί ως διαφορετικός χρήστης από αυτόν που επικοινωνήσαμε μέσω email. Παρακαλούμε αποσυνδεθείτε ή χρησιμοποιήστε την ανώνυμη λειτουργία και δοκιμάστε ξανά." + not_found_description: "Λυπούμαστε, δεν μπορέσαμε να βρούμε αυτήν τη συνδρομή. Είναι πιθανό ο σύνδεσμος στο email σας να είναι πολύ παλιός και να έχει λήξει;" + user_not_found_description: "Λυπούμαστε, δεν μπορέσαμε να βρούμε χρήστη για αυτήν τη συνδρομή. Πιθανώς προσπαθείτε να απεγγραφείτε από έναν λογαριασμό που δεν υπάρχει πλέον." log_out: "Αποσύνδεση" submit: "Αποθήκευση προτιμήσεων" digest_frequency: + title: "Λαμβάνετε email σύνοψης %{frequency}" + never_title: "Δεν λαμβάνετε email σύνοψης" + select_title: "Ορίστε τη συχνότητα των email σύνοψης σε:" never: "ποτέ" every_30_minutes: "κάθε 30 λεπτά" every_hour: "ωριαία" @@ -768,6 +800,7 @@ el: permissions_header: 'Αυτό θα επιτρέπει στο "%{application_name}" να:' redirect_warning: "Η εξουσιοδότηση θα σας ανακατευθύνει σε" instructions: 'Μόλις δημιουργήσαμε ένα νέο κλειδί API χρήστη για να το χρησιμοποιήσετε με το "%{application_name}", παρακαλούμε επικολλήστε το ακόλουθο κλειδί στην εφαρμογή σας:' + copied: "Αντιγράφηκε!" otp_description: 'Θα θέλατε να επιτρέψετε στο "%{application_name}" να έχει πρόσβαση σε αυτόν τον ιστότοπο;' otp_confirmation: confirm_title: Συνέχεια σε %{site_name} @@ -828,7 +861,9 @@ el: description: "Λίστα καταστάσεων αναφορών, συμπεριλαμβανομένου του τύπου αναφοράς, του συντάκτη, του χρήστη που έκανε την αναφορά και του χρόνου έως την επίλυση." visits: title: "Επισκέψεις Χρήστη" - xaxis: "Ημέρα" + xaxis: + desktop: "Για υπολογιστές" + mobile: "Mobile" yaxis: "Αριθμός επισκέψεων" signups: title: "Εγγραφές" @@ -876,7 +911,10 @@ el: description: "Προβολές σελίδας για συνδεδεμένους χρήστες, ανώνυμους χρήστες, γνωστούς ανιχνευτές και άλλη επισκεψιμότητα." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: + title: "ΗΕΧ / ΜΕΧ" xaxis: "Ημέρα" + yaxis: "ΗΕΧ/ΜΕΧ" + description: "Το ποσοστό των μηνιαίων ενεργών μελών που επέστρεψαν την τελευταία ημέρα. Αυτό το ποσοστό δείχνει πόσο τακτικά επιστρέφουν οι άνθρωποι. Αυτό ονομάζεται επίσης «κολλότητα» της κοινότητας. Στόχος είναι > 20%." daily_engaged_users: xaxis: "Ημέρα" profile_views: @@ -895,6 +933,7 @@ el: title: "Αρέσει" xaxis: "Ημέρα" yaxis: "Αριθμός νέων 'Μου αρέσει'" + description: "Αριθμός νέων \"Μου αρέσει\"." flags: title: "Σημάνσεις" xaxis: "Ημέρα" @@ -1042,8 +1081,10 @@ el: xaxis: "Ημέρα" yaxis: "Σύνολο" mobile_visits: + title: "Επισκέψεις χρηστών (κινητά)" xaxis: "Ημέρα" yaxis: "Αριθμός επισκέψεων" + description: "Αριθμός μοναδικών συνδεδεμένων χρηστών που επισκέφθηκαν χρησιμοποιώντας κινητή συσκευή." web_crawlers: labels: page_views: "Προβολές σελίδας" @@ -1077,17 +1118,21 @@ el: filesize: Μέγεθος αρχείου description: "Λίστα όλων των μεταφορτώσεων κατά επέκταση, μέγεθος αρχείου και συντάκτη." top_users_by_likes_received: + title: "Κορυφαίοι χρήστες με βάση τα \"Μου αρέσει\" που έλαβαν" labels: user: Χρήστης - qtt_like: Μου αρέσει που λήφθησαν + qtt_like: Ληφθέντα "Μου αρέσει" + description: "Κορυφαίοι 10 χρήστες που έχουν λάβει \"Μου αρέσει\"." top_users_by_likes_received_from_inferior_trust_level: + title: "Κορυφαίοι χρήστες με βάση τα \"Μου αρέσει\" που έλαβαν από χρήστη με χαμηλότερο επίπεδο εμπιστοσύνης" labels: user: Χρήστης - qtt_like: Μου αρέσει που λήφθησαν + trust_level: Επίπεδο εμπιστοσύνης + qtt_like: Ληφθέντα "Μου αρέσει" top_users_by_likes_received_from_a_variety_of_people: labels: user: Χρήστης - qtt_like: Μου αρέσει που λήφθησαν + qtt_like: Ληφθέντα "Μου αρέσει" topic_view_stats: title: "Στατιστικά Προβολών Θέματος" labels: @@ -1095,6 +1140,11 @@ el: logged_in_views: Συνδεδεμένοι anon_views: Ανώνυμοι total_views: Σύνολο + associated_accounts_by_provider: + title: "Συσχετισμένοι λογαριασμοί ανά μέθοδο σύνδεσης" + labels: + provider: Πάροχος σύνδεσης + total_users: "Σύνολο ενεργών λογαριασμών χρηστών" dashboard: problem: upcoming_change_stable_opted_out: 'Ο ιστότοπός σας έχει εξαιρεθεί από την επερχόμενη αλλαγή "%{upcoming_change}". Αυτή η αλλαγή έχει πλέον φτάσει στην κατάσταση "Σταθερή" και ενδέχεται σύντομα να καταργηθεί ή να γίνει μόνιμη. Επισκεφθείτε τη σελίδα επερχόμενων αλλαγών για να δείτε λεπτομέρειες σχετικά με αυτήν την αλλαγή.' @@ -1126,8 +1176,9 @@ el: min_search_term_length: "Ελάχιστο έγκυρο μήκος όρου αναζήτησης σε χαρακτήρες" search_prefer_recent_posts: "Εάν η αναζήτηση στην ιστοσελίδα σας είναι αργή, αυτή η επιλογή δημιουργεί κατάλογο των πιο πρόσφατων αναρτήσεων πρώτα" search_recent_posts_size: "Πόσες πρόσφατες αναρτήσεις να κρατηθούν στο ευρετήριο " - log_search_queries: "Κατέγραψε τις αναζητήσεις που εκτελούνται από χρήστες" + log_search_queries: "Καταγραφή των ερωτημάτων αναζήτησης που εκτελούνται από χρήστες" search_query_log_max_size: "Μέγιστος αριθμός αναζητήσεων που θα τηρούνται" + search_query_log_max_retention_days: "Μέγιστος χρόνος διατήρησης των ερωτημάτων αναζήτησης, σε ημέρες." search_default_sort_order: "Προεπιλεγμένη σειρά ταξινόμησης για αναζήτηση πλήρους σελίδας" search_experience: "Η προεπιλεγμένη θέση και εμφάνιση της αναζήτησης σε υπολογιστές" allow_uncategorized_topics: "Επιτρέψτε σε νήματα να δημιουργούνται χωρίς κατηγοριοποίηση. ΠΡΟΣΟΧΗ: Εάν υπάρχουν μη κατηγοριοποιημένα νήματα, πρέπει να τα επανακατηγοριοποιήσετε πριν τα κλείσετε." @@ -1148,8 +1199,11 @@ el: show_pinned_excerpt_desktop: "Εμφάνιση αποσπάσματος σε καρφιτσωμένα νήματα στην προβολή για υπολογιστές." post_onebox_maxlength: "Μέγιστο μέγεθος μιας oneboxed ανάρτησης σε χαρακτήρες." allowed_inline_onebox_domains: "Μια λίστα από τομείς τα οποία θα γίνουν onebox σε σκίκρυνση αν αναφερθούν χωρίς τίτλο" + logo_small: "Η μικρή εικόνα λογότυπου επάνω αριστερά στον ιστότοπό σας, που φαίνεται κατά την κύλιση προς τα κάτω. Χρησιμοποιήστε μια εικόνα 120 × 120. Εάν αφεθεί κενό, θα εμφανιστεί ένα σύμβολο αρχικής σελίδας." notification_email: "Η από: διεύθυνση email που χρησιμοποιείται για την αποστολή όλων των απαραιτήτων μηνυμάτων του συστήματος. Ο τομέας που καθορίζεται εδώ πρέπει να έχει SPF, DKIM και reverse PTR αρχεία ρυθμισμένα σωστά για να φθάσει το μήνυμα." - force_https: "Αναγκάζει το site σας να χρησιμοποιεί μόνο HTTPS. ΠΡΟΣΟΧΗ: Μην το ενεργοποιήσετε, μέχρι να επαληθεύσετε ότι το HTTPS είναι πλήρως εγκατεστημένο και λειτουργεί απολύτως παντού! Ελέγξατε το CDN σας, όλες τις κοινωνικές συνδέσεις και τα εξωτερικά σας λογότυπα / εξαρτήσεις για να βεβαιωθείτε ότι είναι όλα συμβατά με HTTPS;" + email_subject: "Προσαρμόσιμη μορφή θέματος για τυπικά μηνύματα email. Δείτε το https://meta.discourse.org/t/customizing-specific-system-email-templates/88323" + enforce_second_factor_on_external_auth: "Να απαιτείται από τους χρήστες να χρησιμοποιούν πάντα τον έλεγχο ταυτότητας δύο παραγόντων (2FA). Όταν είναι ενεργοποιημένο, αυτό θα εμποδίζει τους χρήστες να συνδέονται με εξωτερικές μεθόδους ελέγχου ταυτότητας, όπως συνδέσεις κοινωνικών δικτύων, εάν έχουν ενεργοποιήσει τον έλεγχο ταυτότητας δύο παραγόντων. Όταν είναι απενεργοποιημένο, οι χρήστες θα χρειάζεται μόνο να επιβεβαιώσουν τον έλεγχο ταυτότητας δύο παραγόντων κατά τη σύνδεση με όνομα χρήστη και κωδικό πρόσβασης. Δείτε επίσης τη ρύθμιση `enforce_second_factor`." + force_https: "Αναγκάζει τον ιστότοπό σας να χρησιμοποιεί μόνο HTTPS. ΠΡΟΣΟΧΗ: Μην το ενεργοποιήσετε, μέχρι να επαληθεύσετε ότι το HTTPS είναι πλήρως εγκατεστημένο και λειτουργεί απολύτως παντού! Ελέγξατε το CDN σας, όλες τις συνδέσεις κοινωνικών δικτύων και τα εξωτερικά σας λογότυπα / εξαρτήσεις για να βεβαιωθείτε ότι είναι όλα συμβατά με HTTPS;" summary_score_threshold: "Η ελάχιστη βαθμολογία που απαιτείται από μια ανάρτηση για να συμπεριληφθεί στο «Συνοψίστε αυτό το θέμα»" summary_percent_filter: "Όταν ο χρήστης επιλέξει «Συνοψίστε αυτό το θέμα», δείξε το κορυφαίο % των αναρτήσεων" long_polling_base_url: "Base URL που χρησιμοποιείτε για μακρύ ψήφισμα (όταν ένα CDN εξυπηρετεί δυναμικό περιεχόμενο, βεβαιωθείτε ότι το ορίσατε σε έλξη προέλευσης ) π.χ.: http://origin.site.com" @@ -1213,11 +1267,12 @@ el: backup_time_of_day: "Ώρα σε ζώνη UTC που το αντίγραφο ασφαλείας πρέπει να πραγματοποιηθεί." backup_with_uploads: "Συμπεριέλαβε τις μεταφορτώσεις στα αντίγραφα ασφαλείας. Απενεργοποιώντας το θα δημιουργηθούν αντίγραφα ασφαλείας μόνο για τη βάση δεδομένων." active_user_rate_limit_secs: "Πόσο συχνά ενημερώνουμε το 'last_seen_at' πεδίο, σε δευτερόλεπτα" - verbose_localization: "Εμφάνιζε εκτεταμένες συμβουλές τοπικής προσαρμογής στην διεπαφή χρήστη. " + verbose_localization: "Εμφάνιση εκτεταμένων συμβουλών τοπικοποίησης στη διεπαφή χρήστη" previous_visit_timeout_hours: "Πόσο διαρκεί μια επίσκεψη προτού τη θεωρήσουμε \"προηγούμενη\" επίσκεψη, σε ώρες" top_topics_formula_log_views_multiplier: "value of log views multiplier (n) in top topics formula: `log(views_count) * (n) + op_likes_count * 0.5 + LEAST(likes_count / posts_count, 3) + 10 + log(posts_count)`" top_topics_formula_first_post_likes_multiplier: "value of first post likes multiplier (n) in top topics formula: `log(views_count) * 2 + op_likes_count * (n) + LEAST(likes_count / posts_count, 3) + 10 + log(posts_count)`" top_topics_formula_least_likes_per_post_multiplier: "value of least likes per post multiplier (n) in top topics formula: `log(views_count) * 2 + op_likes_count * 0.5 + LEAST(likes_count / posts_count, (n)) + 10 + log(posts_count)`" + enable_safe_mode: "Να επιτρέπεται στους χρήστες να εισέλθουν στην ασφαλή λειτουργία για αποσφαλμάτωση των πρόσθετων." rate_limit_create_topic: "Μετά τη δημιουργία θέματος, οι χρήστες πρέπει να περιμένουν (n) δευτερόλεπτα πριν τη δημιουργία άλλου θέματος." rate_limit_create_post: "Μετά την ανάρτηση, οι χρήστες πρέπει να περιμένουν (n) δευτερόλεπτα πριν τη δημιουργία άλλης ανάρτησης." rate_limit_new_user_create_post: "Μετά την ανάρτηση, οι νέοι χρήστες πρέπει να περιμένουν (n) δευτερόλεπτα πριν τη δημιουργία άλλης ανάρτησης." @@ -1270,7 +1325,7 @@ el: tl3_requires_max_flagged: "Ο χρήστης δεν θα πρέπει να είχε περισσότερες από x αναρτήσεις αναφερόμενες από x διαφορετικούς χρήστες τις τελευταίες (tl3 time period) ημέρες για να πληροί τις προϋποθέσεις για να προαχθεί σε επίπεδο εμπιστοσύνης 3, όπου x είναι η τιμή αυτής της ρύθμισης. (0 ή μεγαλύτερο)" tl3_promotion_min_duration: "Ο ελάχιστος αριθμός ημερών για τις οποίες διαρκεί μια προώθηση στο επίπεδο εμπιστοσύνης 3, προτού ένας χρήστης μπορεί να υποβιβαστεί στο επίπεδο εμπιστοσύνης 2. " tl3_requires_likes_given: "Ο ελάχιστος αριθμός των 'μου αρέσει' που πρέπει να έχουν δωθεί τις τελευταίες (tl3 time period) ημέρες, ώστε να πληρούνται οι προυποθέσεις για να προαχθεί στο επίπεδο εμπιστοσύνης 3. " - tl3_requires_likes_received: "Ο ελάχιστος αριθμός των 'μου αρέσει' που πρέπει να έχουν ληφθεί τις τελευταίες (tl3 time period) ημέρες, ώστε να πληρούνται οι προυποθέσεις για να προαχθεί στο επίπεδο εμπιστοσύνης 3. " + tl3_requires_likes_received: "Ο ελάχιστος αριθμός των \"Μου αρέσει\" που πρέπει να έχουν ληφθεί τις τελευταίες (tl3 time period) ημέρες, ώστε να πληρούνται οι προυποθέσεις για να προαχθεί στο επίπεδο εμπιστοσύνης 3." tl3_links_no_follow: "Μην αφαιρείτε rel=nofollow από συνδέσμους που αναρτήθηκαν από χρήστες επιπέδου εμπιστοσύνης 3." newuser_max_links: "Πόσους συνδέσμους μπορεί να προσθέσει ένας χρήστης σε μια ανάρτηση." newuser_max_attachments: "Πόσα συνημμένα μπορεί να προσθέσει ένας χρήστης σε μια ανάρτηση." @@ -1317,6 +1372,7 @@ el: num_flaggers_to_close_topic: "Ελάχιστος αριθμός ξεχωριστών αναφορών που απαιτείται για την αυτόματη παύση ενός θέματος για παρέμβαση" num_hours_to_close_topic: "Αριθμός ωρών παύσης ενός θέματος για παρέμβαση" auto_respond_to_flag_actions: "Ενεργοποίηση αυτόματης απάντησης όταν αφαιρείται μια αναφορά." + fast_typing_threshold: "Ελάχιστος χρόνος που πρέπει να πληκτρολογήσει ένας χρήστης για την πρώτη του ανάρτηση. Εάν δεν επιτευχθεί το όριο, η ανάρτηση θα εισέλθει αυτόματα στην ουρά ελέγχου. Το ελάχιστο είναι 1 δευτερόλεπτο, το τυπικό είναι 3 δευτερόλεπτα και το μέγιστο είναι 5 δευτερόλεπτα." auto_silence_fast_typers_max_trust_level: "Μέγιστο επίπεδο εμπιστοσύνης για την αυτόματη σίγηση σε περίπτωση γρήγορης πληκτρολόγησης" reply_by_email_address: "Πρότυπο για την απάντηση μέσω email της διεύθυνσης email εισερχομένων μηνυμάτων, για παράδειγμα: %%{reply_key}@reply.example.com or replies+%%{reply_key}@example.com" alternative_reply_by_email_addresses: "Λίστα εναλλακτικών προτύπων για την απάντηση μέσω email της διεύθυνσης email εισερχομένων μηνυμάτων, πχ: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" @@ -1344,7 +1400,7 @@ el: pop3_polling_password: "Ο κωδικός πρόσβασης του POP3 λογαριασμού για το email." email_prefix: "Το [label] που χρησιμοποιείται στο θέμα των μηνυμάτων email. Αυτό θα προκαθοριστεί σαν «τίτλος», αν δεν οριστεί." email_site_title: "Ο τίτλος της ιστοσελίδας που χρησιμοποιείται ως ο αποστολέας των email από την ιστοσελίδα. Η προκαθορισμένη ρύθμιση είναι 'τίτλος'. Εάν ο 'τίτλος' σας περιέχει χαρακτήρες οι οποίοι δεν επιτρέπονται στα email, χρησιμοποιήστε αυτή τη ρύθμιση. " - find_related_post_with_key: "Χρησιμοποίησε μόνο το 'reply key' για να βρεις την ανάρτηση replied-to. ΠΡΟΣΟΧΗ: αν απενεργοποιηθεί, επιτρέπει την πλαστοπροσωπία με βάση την διεύθυνση email." + find_related_post_with_key: "Χρησιμοποιήστε μόνο το 'reply key' για να βρείτε την ανάρτηση replied-to. ΠΡΟΣΟΧΗ: αν απενεργοποιηθεί, επιτρέπει την πλαστοπροσωπία με βάση την διεύθυνση email." minimum_topics_similar: "Πόσα νήματα χρειάζεται να υπάρχουν προτού παρουσιαστούν παρόμοια νήματα όταν δημιουργείς νέα νήματα." relative_date_duration: "Αριθμός ημερών μετά την ανάρτηση όταν οι ημερομηνίες ανάρτησης θα εμφανίζονται ως σχετικές (7ημ) αντί για απόλυτες (20 Φεβ). " delete_user_max_post_age: "Να μην επιτρέπεται η διαγραφή χρηστών των οποίων η πρώτη ανάρτηση είναι τουλάχιστον (Χ) ημερών. " @@ -1366,15 +1422,16 @@ el: enable_user_directory: "Παροχή καταλόγου χρηστών για περιήγηση" enable_group_directory: "Παροχή καταλόγου με ομάδες για περιήγηση" enable_category_group_moderation: "Να επιτρέπεται στις ομάδες να συντονίζουν περιεχόμενο σε συγκεκριμένες κατηγορίες" + group_in_subject: "Ορίστε το %%{optional_pm} στο θέμα του email στο όνομα της πρώτης ομάδας στο ΠΜ, δείτε: Προσαρμογή μορφής θέματος για τυπικά μηνύματα email (στα Αγγλικά)" allow_anonymous_mode: "Ενεργοποιήστε την επιλογή για τους χρήστες να μεταβαίνουν σε ανώνυμη λειτουργία για δημοσίευση. Όταν ενεργοποιηθεί, οι χρήστες μπορούν να επιλέξουν την απόκρυψη της ταυτότητάς τους κατά τη δημιουργία αναρτήσεων ή θεμάτων σε ολόκληρο τον ιστότοπο. Δείτε επίσης την επιλογή `allow anonymous likes`." allow_likes_in_anonymous_mode: "Ενεργοποιήστε αυτήν τη ρύθμιση για να επιτρέψετε στους χρήστες που περιηγούνται στον ιστότοπό σας ανώνυμα να κάνουν \"Μου αρέσει\" σε αναρτήσεις. Όταν ενεργοποιηθεί, οι χρήστες μπορούν να επιλέξουν να αποκρύπτεται η ταυτότητά τους όταν κάνουν \"Μου αρέσει\" σε αναρτήσεις ή θέματα σε ολόκληρο τον ιστότοπο. Αυτή η ρύθμιση απαιτεί την ενεργοποίηση της ρύθμισης `allow anonymous mode`." anonymous_account_duration_minutes: "Για να προστατευθεί η ανωνυμία δημιούργησε ένα νέο ανώνυμο λογαριασμό κάθε Ν λεπτά για κάθε χρήστη. Παράδειγμα: εάν τεθεί στο 600, μόλις περάσουν 600 λεπτά από την τελευταία ανάρτηση ΚΑΙ ο χρήστης αλλάξει σε ανώνυμος, ένας νέος ανώνυμος λογαριασμός δημιουργείται." - hide_user_profiles_from_public: "Απενεργοποιήσε τις κάρτες χρηστών, τα προφίλ χρηστών και τον κατάλογο χρηστών για ανώνυμους χρήστες. " allow_featured_topic_on_user_profiles: "Να επιτρέπεται στους χρήστες να αναδεικνύουν έναν σύνδεσμο για ένα θέμα στην κάρτα χρήστη και το προφίλ τους." allow_profile_backgrounds: "Επίτρεψε στους χρήστες να μεταφορτώνουν εικόνες φόντου στο προφίλ." get_a_room_threshold: "Ο αριθμός των αναρτήσεων που πρέπει να κάνει ένας χρήστης στον ίδιο άνθρωπο και στο ίδιο θέμα προτού να προειδοποιηθεί. " enable_mobile_theme: "Οι κινητές συσκευές χρησιμοποιούν θέματα φιλικά προς τα κινητά, με δυνατότητα αλλαγής στον ολοκληρωμένο ιστότοπο. Απενεργοποιήστε το εάν θέλετε να χρησιμοποιήσετε ένα fully responsive stylesheet." dominating_topic_minimum_percent: "To ποσοστό αναρτήσεων που πρέπει να κάνει ένας χρήστης σε ένα νήμα πριν ειδοποιηθεί για υπερβολική χρήση του θέματος." + pm_warn_user_last_seen_months_ago: "Κατά τη δημιουργία ενός νέου ΠΜ, να προειδοποιούνται οι χρήστες όταν ο παραλήπτης-στόχος δεν έχει εμφανιστεί για περισσότερους από n μήνες." suppress_uncategorized_badge: "Να μην εμφανίζεται το παράσημο για τα θέματα που δεν ανήκουν σε κατηγορίες στις λίστες θεμάτων." permalink_normalizations: "Εφαρμόστε την ακόλουθη regex πριν ταιριάξετε τα permalinks, για παράδειγμα: /(topic.*)\\?.*/\\1 θα αφαιρέσει τις συμβολοσειρά για ερώτηση από τις διαδρομές για τα νήματα. Η μορφή είναι regex+συμβολοσειρά χρησημοποιήστε \\ 1 κ.λπ., για να αποκτήσετε πρόσβαση στις συλλήψεις" global_notice: "Εμφανίστε μια ΕΠΕΙΓΟΥΣΑ, ΕΚΤΑΚΤΗ ΑΝΑΓΚΗ, μη παραβλέψιμη καθολική ειδοποίηση banner σε όλους τους επισκέπτες, αλλάξτε την σε κενό για να την αποκρύψετε (επιτρέπεται HTML)." @@ -1398,6 +1455,7 @@ el: approve_post_count: "Ο όγκος των αναρτήσεων ενός καινούριου ή βασικού χρήστη που θα πρέπει να εγκριθεί." auto_close_messages_post_count: "Ανώταρο όριο αναρτήσεων που επιτρέπονται σε ένα μήνυμα πριν αυτό κλείσει αυτομάτως (0 για απενεργοποιήση)" auto_close_topics_post_count: "Ανώτατο όριο αναρτήσεων που επιτρέπονται σε ένα νήμα πριν αυτό κλείσει αυτομάτως (0 για απενεργοποίηση)" + auto_close_topics_create_linked_topic: "Δημιουργήστε ένα νέο συνδεδεμένο θέμα όταν ένα θέμα κλείνει αυτόματα με βάση τη ρύθμιση 'auto close topics post count'" code_formatting_style: "Το κουμπί κώδικα στον συνθέτη θα έχει ως αποτέλεσμα αυτό το στυλ μορφοποίησης κώδικα " max_allowed_message_recipients: "Μέγιστος αριθμός παραληπτών που επιτρέπονται σε ένα μήνυμα" default_email_digest_frequency: "Πόσο συχνά οι χρήστες λαμβάνουν συνοπτικά email από προεπιλογή." @@ -1413,7 +1471,7 @@ el: default_other_enable_quoting: "Ενεργοποίηση απάντησης με παράθεση για επιλεγμένο κείμενο από προεπιλογή" default_other_enable_markdown_monospace_font: "Χρήση γραμματοσειράς monospace στη λειτουργία Markdown του συνθέτη από προεπιλογή." default_other_dynamic_favicon: "Δείχνε τον αριθμό νέων/ενημερωμένων θεμάτων στο εικονίδιο του προγράμματος περιήγησης από προεπιλογή. " - default_other_skip_new_user_tips: "Παράλειψη συμβουλών και σημάτων για την ενσωμάτωση νέου χρήστη." + default_other_skip_new_user_tips: "Παράλειψη συμβουλών και παρασήμων για την ενσωμάτωση νέου χρήστη." default_topics_automatic_unpin: "Αυτόματο ξεκαρφίτσωμα των θεμάτων, όταν ο χρήστης φτάνει στο κάτω μέρος από προεπιλογή." default_categories_watching: "Λίστα κατηγοριών που επιτηρούνται από προεπιλογή." default_categories_tracking: "Λίστα κατηγοριών που παρακολουθούνται από προεπιλογή." @@ -1436,6 +1494,9 @@ el: suppress_overlapping_tags_in_list: "Αν μία ετικέτα ταιριάζει ακριβώς με μία λέξη στον τίτλο ενός θέματος, τότε μην εμφανίσεις την ετικέτα. " shared_drafts_allowed_groups: "Να επιτρέπεται στους χρήστες σε αυτές τις ομάδες να βλέπουν και να επεξεργάζονται Κοινόχρηστα Προσχέδια." enable_desktop_push_notifications: "Ενεργοποιήστε τις ειδοποιήσεις push για τη διεπαφή στους υπολογιστές. Αυτή η λειτουργία επιτρέπει την αποστολή ειδοποιήσεων σε πραγματικό χρόνο από τον ιστότοπο απευθείας στον υπολογιστή σας, ενισχύοντας την αλληλεπίδραση και διασφαλίζοντας ότι οι χρήστες είναι πάντα ενημερωμένοι. Ωστόσο, η αποτελεσματικότητα αυτής της λειτουργίας εξαρτάται από την υποστήριξη του προγράμματος περιήγησης για ειδοποιήσεις push." + enable_site_owner_onboarding: "Εμφανίζει ένα πλαίσιο στην αρχική σελίδα στους νέους διαχειριστές για να τους βοηθήσει να ξεκινήσουν. Ενεργοποιήστε ξανά αυτήν τη ρύθμιση για να δείτε ξανά τα βήματα ενσωμάτωσης." + impersonate_without_logout: "Να επιτρέπεται στους διαχειριστές να προσποιούνται έναν χρήστη χωρίς να χρειάζεται να αποσυνδεθούν από τον λογαριασμό διαχειριστή τους." + experimental_impersonation_time_limit_minutes: "Πόσος χρόνος προτού τερματιστεί αυτόματα μια συνεδρία πλαστοπροσωπίας." viewport_based_mobile_mode: "Χρησιμοποιήστε το πλάτος του παραθύρου προβολής για να προσδιορίσετε τις λειτουργίες για κινητά/υπολογιστές. Αυτή η ρύθμιση θα καταργηθεί σύντομα. Εάν διαπιστώσετε ότι χρειάζεται να την απενεργοποιήσετε, ενημερώστε μας στο Meta." floating_dismiss_topics_on_mobile: "Εμφανίζει ένα αιωρούμενο κουμπί \"Παράβλεψη...\" στο κινητό για τη λίστα θεμάτων για ευκολότερη πρόσβαση και για να απελευθερωθεί χώρος στην κορυφή της λίστας θεμάτων" errors: @@ -1462,9 +1523,10 @@ el: email_editable_enabled: "Θα πρέπει να απενεγοποιηθεί το 'email editable' πριν ενεργοποιηθεί αυτή η ρύθμιση." staged_users_disabled: "Θα πρέπει να ενεργοποιήσετε τους σταδιακούς χρηστες πριν ενεργοποιήσετε αυτή τη ρύθμιση." reply_by_email_disabled: "Θα πρέπει να ενεργοποιήσετε την απάντηση μέσω email πριν ενεργοποιήσετε αυτή τη ρύθμιση." - min_username_length_range: "Δεν μπορείς να θέσεις το ελάχιστο πιο πάνω από το μέγιστο" - max_username_length_range: "Δεν μπορείς να θέσεις το μέγιστο πιο κάτω από το ελάχιστο." markdown_linkify_tlds: "Δεν μπορείτε να συμπεριλάβετε την τιμή '*'." + placeholder: + discourse_connect_provider_secrets: + key: "www.example.com" search: within_post: "#%{post_number} από %{username}" types: @@ -1474,10 +1536,14 @@ el: results_page: "Αποτελέσματα αναζήτησης για '%{term}'" filter: description: + status_deleted: "Εμφάνιση διαγραμμένων θεμάτων (αν έχετε δικαίωμα)" in_bookmarked: "Εμφάνιση θεμάτων που έχετε σελιδοδεικτήσει" in_unseen: "Εμφάνιση θεμάτων που δεν έχετε δει" order_latest_post: "Ταξινόμηση κατά ημερομηνία τελευταίας ανάρτησης (νεότερη πρώτη)" order_latest_post_asc: "Ταξινόμηση κατά ημερομηνία τελευταίας ανάρτησης (παλαιότερη πρώτη)" + locale: "Φιλτράρισμα θεμάτων ανά πρωτότυπη γλώσσα" + locale_any: "Εμφάνιση θεμάτων που γράφτηκαν αρχικά σε οποιαδήποτε από τις καθορισμένες γλώσσες (διαχωρισμένες με κόμμα)" + exclude_locale: "Εξαίρεση θεμάτων που γράφτηκαν αρχικά σε μια συγκεκριμένη γλώσσα" discourse_connect: login_error: "Σφάλμα Σύνδεσης" not_found: "Ο λογαριασμός σου δεν ήταν δυνατόν να βρεθεί. Παρακαλώ επικοινώνησε με το διαχειριστή της ιστοσελίδας." @@ -1489,6 +1555,7 @@ el: original_poster: "Αρχικός Αναρτητής" most_recent_poster: "Πιο Πρόσφατος Αναρτητής" frequent_poster: "Συχνός Αναρτητής" + poster_description_joiner: ", " redirected_to_top_reasons: new_user: "Καλώς ήλθες στην κοινότητά μας! Αυτά είναι τα πιο δημοφιλή πρόσφατα νήματα συζητήσεων." not_seen_in_a_month: "Καλώς ήλθες και πάλι! Δε σε έχουμε δει για αρκετό καιρό. Αυτά είναι τα πιο δημοφιλή νήματα συζητήσεων από την τελευταία σου επίσκεψη." @@ -1595,6 +1662,10 @@ el: second_factor_backup_description: "Παρακαλώ εισαγάγετε έναν από τους εφεδρικούς κωδικούς σας:" second_factor_toggle: backup_code: "Χρησιμοποιήστε αντ 'αυτού έναν εφεδρικό κωδικό" + second_factor_auth: + actions: + discourse_connect_provider: + description: "Το %{hostname} σας ζήτησε να επιβεβαιώσετε το 2FA σας. Θα ανακατευθυνθείτε πίσω στον ιστότοπο μόλις επιβεβαιώσετε το 2FA σας." admin: email: sent_test: "στάλθηκε!" @@ -1772,15 +1843,22 @@ el: title: "Καλωσόρισμα Χρήστη" preview: "Καλώς ήλθατε στην %{site_name}!" subject_template: "Καλώς ήλθατε στην %{site_name}!" - text_body_template: |2 - - Ευχαριστούμε για την εγγραφή σας στην %{site_name}, καλώς ορίσατε! + text_body_template: | + Ευχαριστούμε για την συμμετοχή σας στο %{site_name}, και καλώς ορίσατε! %{new_user_tips} - Πιστεύουμε και επικροτούμε την [πολιτισμένη επικοινωνία](%{base_url}/guidelines) στο διαδίκτυο. + Πιστεύουμε στην [πολιτισμένη συμπεριφορά της κοινότητας](%{base_url}/guidelines) ανά πάσα στιγμή. Να περάσετε καλά! + welcome_staff: + subject_template: "Συγχαρητήρια, σας έχει χορηγηθεί ιδιότητα %{role}!" + text_body_template: | + Σας έχει χορηγηθεί η ιδιότητα %{role} από ένα μέλος του προσωπικού. + + Ως %{role}, έχετε πλέον πρόσβαση στη διεπαφή διαχειριστή. + + Με μεγάλη δύναμη έρχεται και μεγάλη ευθύνη. Εάν είστε νέοι στη διαχείριση, ανατρέξτε στον [Οδηγό Συντονισμού](https://meta.discourse.org/t/discourse-moderation-guide/63116). welcome_invite: title: "Πρόσκληση Καλωσορίσματος" preview: "Καλώς ήλθατε στην %{site_name}!" @@ -2056,11 +2134,10 @@ el: new_user_of_the_month: title: "Έχεις επιλεχθεί ως Χρήστης του Μήνα!" subject_template: "Έχεις επιλεχθεί ως Χρήστης του Μήνα!" - text_body_template: |2 - - Συγχαρητήρια, κέρδισες το βραβείο **Χρήστης του Μήνα για %{month_year}**. :trophy: + text_body_template: | + Συγχαρητήρια, κέρδισες το βραβείο **Νέος Χρήστης του Μήνα για %{month_year}**. :trophy: - Αυτό το βραβείο επονέμεται σε δυο νέους χρήστες κάθε μήνα και θα είναι για πάντα ορατό στην [σελίδα χρήστη](%{url}). + Αυτό το βραβείο απονέμεται σε δυο νέους χρήστες κάθε μήνα και θα είναι για πάντα ορατό στη [σελίδα χρήστη](%{url}). Γίνατε γρήγορα ένα πολύτιμο μέλος της κοινότητάς μας. Σας ευχαριστούμε για την συμμετοχή σας και ελπίζουμε να συνεχίσετε έτσι και στο μέλλον! queued_posts_reminder: @@ -2088,9 +2165,19 @@ el: other: "Ενημέρωση: Στέλνουμε το μέγιστο %{count} emails καθημερινά. Ελέγξτε την ιστοσελίδα για να δείτε αυτά που πιθανώς έχουν κρατηθεί. ΥΓ ευχαριστούμε που είστε τόσο δημοφιλής!" in_reply_to: "Απάντηση Σε" reply_by_email: "[Επισκέψου το νήμα](%{base_url}%{url}) ή απάντησε σε αυτό το email για να αποκριθείς." + reply_by_email_pm: "[Επισκεφθείτε το μήνυμα](%{base_url}%{url}) ή απαντήστε σε αυτό το email για να απαντήσετε σε %{participants}." + reply_by_email_button_only: "[Επισκεφθείτε το θέμα](%{base_url}%{url})" + reply_by_email_pm_button_only: "[Επισκεφθείτε το μήνυμα](%{base_url}%{url})" only_reply_by_email: "Απαντήστε σε αυτό το email για να αποκριθείς." + only_reply_by_email_pm: "Απαντήστε σε αυτό το email για να απαντήσετε σε %{participants}." + only_reply_by_email_pm_button_only: "[Επισκεφθείτε το μήνυμα](%{base_url}%{url})" visit_link_to_respond: "[Επισκέψου το νήμα](%{base_url}%{url}) για να αποκριθείς." + visit_link_to_respond_pm: "[Επισκεφθείτε το μήνυμα](%{base_url}%{url}) για να απαντήσετε σε %{participants}." + visit_link_to_respond_button_only: "[Επισκεφθείτε το θέμα](%{base_url}%{url})" + visit_link_to_respond_pm_button_only: "[Επισκεφθείτε το μήνυμα](%{base_url}%{url})" + reply_above_line: "## Παρακαλούμε πληκτρολογήστε την απάντησή σας πάνω από αυτήν τη γραμμή. ##" posted_by: "Αναρτήθηκε από %{username} στις %{post_date}" + pm_participants: "Συμμετέχοντες: %{participants}" more_pm_participants: one: "%{participants} και %{count} ακόμα" other: "%{participants} και %{count} ακόμα" @@ -2351,6 +2438,9 @@ el: account_silenced_forever: title: "Λογαριασμός σε Σίγαση" subject_template: "[%{email_prefix}] Ο λογαριασμός σας είναι σε σίγαση" + account_deleted: + title: "Λογαριασμός διαγράφηκε" + subject_template: "[%{email_prefix}] Ο λογαριασμός σας έχει διαγραφεί" account_exists: title: "Ο λογαριασμός υπάρχει ήδη" subject_template: "[%{email_prefix}] Ο λογαριασμός υπάρχει ήδη" @@ -2363,7 +2453,11 @@ el: Αν δεν προσπαθήσατε να δημιουργήσετε έναν λογαριασμό για το %{email} ή να αλλάξετε την διεύθυνση email, μην ανησυχείτε – μπορείτε με ασφάλεια να αγνοήσετε αυτό το μήνυμα. Αν έχετε απορίες, [επικοινωνήστε με τους συνεργάτες μας](%{base_url}/about). + account_second_factor_disabled: + title: "Έλεγχος Ταυτότητας Δύο Παραγόντων Απενεργοποιημένος" + subject_template: "[%{email_prefix}] Ο έλεγχος ταυτότητας δύο παραγόντων απενεργοποιήθηκε" digest: + why: "Μια σύντομη περίληψη του %{site_link} από %{since}" since_last_visit: "Από την τελευταία σου επίσκεψη" new_topics: "Νέα θέματα" unread_notifications: "Αδιάβαστες Ειδοποιήσεις" @@ -2377,6 +2471,8 @@ el: unsubscribe: "Λάβατε αυτή την σύνοψη από την %{site_link} επειδή δεν σας είδαμε εδώ και μερικές μέρες. Αν δεν θέλετε να λαμβάνετε αυτή την σύνοψη, αλλάξτε τις %{email_preferences_link} ή %{unsubscribe_link} για διαγραφή από την λίστα." your_email_settings: "ρυθμίσεις email" click_here: "κάνε κλικ εδώ" + from: "%{site_name}" + preheader: "Μια σύντομη περίληψη από %{since}" forgot_password: title: "Ξέχασα τον κωδικό πρόσβασης" preview: "Επαναφέρετε τον κωδικό πρόσβασής σας." @@ -2391,7 +2487,9 @@ el: %{base_url}/u/password-reset/%{email_token} email_login: + title: "Συνδεθείτε μέσω συνδέσμου" preview: "Συνδεθείτε μέσω συνδέσμου." + subject_template: "[%{email_prefix}] Συνδεθείτε μέσω συνδέσμου" set_password: title: "Όρισε κωδικό πρόσβασης" preview: "Ορίστε τον κωδικό πρόσβασης λογαριασμού." @@ -2430,6 +2528,7 @@ el: title: "Επιβεβαίωση παλιάς διεύθυνσης email" subject_template: "[%{email_prefix}] Επικυρώστε την νέα σας διεύθυνση email" confirm_old_email_add: + title: "Επιβεβαίωση παλιού email (Προσθήκη)" subject_template: "[%{email_prefix}] Επικυρώστε την νέα σας διεύθυνση email" notify_old_email: title: "Ειδοποίηση παλιάς διεύθυνσης email" @@ -2446,6 +2545,9 @@ el: Η διεύθυνση email σου έχει αλλάξει σε: %{new_email} + notify_old_email_add: + title: "Ειδοποίηση παλαιού email (Προσθήκη)" + subject_template: "[%{email_prefix}] Προστέθηκε μια νέα διεύθυνση email" signup_after_approval: title: "Εγγραφή μετά από έγκριση " preview: "Νέος λογαριασμός εγκρίθηκε." @@ -2463,10 +2565,16 @@ el: %{base_url}/u/activate-account/%{email_token} Αν για κάποιο λόγο δεν μπορείτε να κάνετε κλικ στον παραπάνω σύνδεσμο, παρακαλούμε αντιγράψτε ολόκληρη την διεύθυνση και επικολλήστε την στην γραμμή διευθύνσεων του περιηγητή σας. + activation_reminder: + title: "Υπενθύμιση ενεργοποίησης" + subject_template: "[%{email_prefix}] Υπενθύμιση για επιβεβαίωση του λογαριασμού σας" suspicious_login: + title: "Ειδοποίηση νέας σύνδεσης" preview: "Επαληθεύστε τη συσκευή σας." + subject_template: "[%{site_name}] Νέα σύνδεση από %{location}" post_approved: title: "Η ανάρτησή σας εγκρίθηκε" + subject_template: "[%{site_name}] Η ανάρτησή σας εγκρίθηκε" page_not_found: page_title: "Η σελίδα δεν βρέθηκε" title: "Ουπς! Αυτή η σελίδα δεν υπάρχει ή είναι ιδιωτική." @@ -2495,6 +2603,7 @@ el: size_not_found: "Λυπούμαστε, αλλά δεν μπορούμε να καθορίσουμε το μέγεθος της εικόνας. Μήπως η εικόνα σας είναι χαλασμένη;" placeholders: too_large: "(εικόνα μεγαλύτερη από %{max_size_kb}KB)" + too_large_humanized: "(εικόνα μεγαλύτερη από %{max_size})" avatar: missing: "Λυπούμαστε, αλλά δεν μπορέσαμε να βρούμε κάποιο άβαταρ που να αντιστοιχίζεται με τη συγκεκριμένη διεύθυνση email. Μπορείτε να δοκιμάσετε να το ανεβάσετε ξανά;" flag_reason: @@ -2574,6 +2683,7 @@ el: Αυτό το παράσημο χορηγείται όταν φτάσετε στο επίπεδο εμπιστοσύνης 2. Σας ευχαριστούμε που συμμετέχετε για μια περίοδο εβδομάδων για να γίνετε πραγματικά μέλος της κοινότητάς μας. Μπορείτε πλέον να στέλνετε προσκλήσεις από τη σελίδα χρήστη σας ή από μεμονωμένα θέματα, να δημιουργείτε ομαδικά προσωπικά μηνύματα και να έχετε περισσότερα "Μου αρέσει" ανά ημέρα. regular: name: Τακτικός + description: Χορηγήθηκε ανακατηγοριοποίηση, μετονομασία, σύνδεσμοι που ακολουθούνται, wiki, περισσότερα "Μου αρέσει" leader: name: Ηγέτης description: Χορηγήθηκαν καθολική επεξεργασία, καρφίτσωμα, κλείσιμο, αρχειοθέτηση, διαχωρισμός και συγχώνευση, περισσότερα "Μου αρέσει" @@ -2599,13 +2709,13 @@ el: description: Έλαβε 50 "Μου αρέσει" σε μια απάντηση nice_topic: name: Καλο Νήμα - description: Έλαβε 10 "Μου αρέσει" σε ένα νήμα + description: Έλαβε 10 "Μου αρέσει" σε ένα θέμα good_topic: name: Πολύ Καλό Νήμα - description: Έλαβε 25 "Μου αρέσει" σε ένα νήμα + description: Έλαβε 25 "Μου αρέσει" σε ένα θέμα great_topic: name: Υπέροχο Νήμα - description: Έλαβε 50 "Μου αρέσει" σε ένα νήμα + description: Έλαβε 50 "Μου αρέσει" σε ένα θέμα nice_share: name: Καλή Κοινοποίηση description: Κοινοποίησε μια ανάρτηση με 25 μοναδικούς επισκέπτες @@ -2718,7 +2828,7 @@ el: name: Πρώτη Επισήμανση description: Επισήμανε έναν χρήστη σε μία ανάρτηση long_description: | - Αυτό το παράσημο απονέμεται την πρώτη φορά που επισημαίνεις το @όνομα χρήστη κάποιου στην ανάρτησή σου. Κάθε επισήμανση δημιουργεί μια ειδοποίηση προς αυτό το άτομο, ώστε να γνωρίζει για την ανάρτησή σου. Απλά ξεκίνα να πληκτρολογείς @ (σύμβολο παπάκι) για να επισημάνεις οποιονδήποτε χρήστη ή, αν επιτρέπεται, ομάδα – είναι ένας βολικός τρόπος να επιστήσεις την προσοχή του σε κάτι. + Αυτό το παράσημο χορηγείται την πρώτη φορά που επισημαίνεις το @όνομα χρήστη κάποιου στην ανάρτησή σου. Κάθε επισήμανση δημιουργεί μια ειδοποίηση προς αυτό το άτομο, ώστε να γνωρίζει για την ανάρτησή σου. Απλά ξεκίνα να πληκτρολογείς @ (σύμβολο παπάκι) για να επισημάνεις οποιονδήποτε χρήστη ή, αν επιτρέπεται, ομάδα – είναι ένας βολικός τρόπος να επιστήσεις την προσοχή του σε κάτι. first_onebox: name: Πρώτο Onebox description: Αναρτήθηκε σύνδεσμος ο οποίος είναι oneboxed @@ -2730,9 +2840,8 @@ el: new_user_of_the_month: name: "Νέος Χρήστης του Μήνα" description: Εξαιρετική συνεισφορά κατά τον πρώτο μήνα - long_description: |2 - - Αυτό το βραβείο απονέμεται σε δύο νέους χρήστες κάθε μήνα για την εξαιρετική συνεισφορά τους στην κοινότητα, όπως αυτή μετρήθηκε από το πόσο σύχνα άρεσαν οι αναρτήσεις τους και σε ποιους. + long_description: | + Αυτό το παράσημο χορηγείται σε δύο νέους χρήστες κάθε μήνα για την εξαιρετική συνεισφορά τους στην κοινότητα, όπως αυτή μετρήθηκε από το πόσο σύχνα άρεσαν οι αναρτήσεις τους και σε ποιους. enthusiast: name: Θιασώτης description: Επισκέφθηκε 10 συνεχόμενες ημέρες @@ -2753,7 +2862,7 @@ el: email_input: "Email Διαχειριστή" submit_button: "Αποστολή Email" performance_report: - initial_post_raw: Αυτό το θέμα περιλαμβάνει καθημερινές αναφορές απόδοσης για τη σελίδα σας. + initial_post_raw: Αυτό το θέμα περιλαμβάνει καθημερινές αναφορές απόδοσης για τον ιστότοπό σας. initial_topic_title: Εκθέσεις απόδοσης ιστοσελίδας tags: title: "Ετικέτες" @@ -2774,8 +2883,6 @@ el: title: "Έναρξη ασφαλούς λειτουργίας" enter: "Έναρξη Ασφαλούς Λειτουργίας" must_select: "Θα πρέπει να διαλέξτε τουλάχιστον μία επιλογή για να εισέλθετε σε ασφαλή λειτοθργία." - dev_mode: - enter: "Enter" wizard: title: "Εγκατάσταση Discourse" step: @@ -2789,8 +2896,13 @@ el: label: "Δημόσια" private: label: "Ιδιωτική" + search_logs: + graph_title: "Πλήθος αναζητήσεων" onebox: + gitlab: + show_original: "εμφάνιση πρωτότυπου" github: + show_original: "εμφάνιση πρωτότυπου" closed: "κλειστό" review_by: "Έλεγχος από" status_date: @@ -2864,7 +2976,7 @@ el: description: "Συμφωνώ με την αναφορά και άνοιγμα παραθύρου συνθέτη για την επεξεργασία της ανάρτησης." complete: "Έγινε γνώση της αναφοράς, μπορείτε πλέον να επεξεργαστείτε την ανάρτηση." delete: - title: "Σβήσιμο" + title: "Διαγραφή" complete: "Η ανάρτΗσΗ διαγράφΗκε." delete_and_ignore: title: "Διαγραφή ανάρτησης και αγνόηση αναφοράς" @@ -2959,8 +3071,6 @@ el: complete: "Η ανάρτηση εγκρίθηκε και επανεμφανίστηκε" post_actions: bundle_title: "Τι θέλετε να κάνετε με την ανάρτηση;" - no_action_post: - title: "Καμία ενέργεια" delete_post: title: "Διαγραφή ανάρτησης" description: "Διαγραφή ανάρτησης" @@ -2981,14 +3091,8 @@ el: title: "Επεξεργασία ανάρτησης" description: "Επεξεργασία του περιεχομένου αυτής της ανάρτησης" complete: "Η ανάρτηση τροποποιήθηκε" - convert_to_pm: - title: "Μετατροπή σε ΠΜ" - description: "Μετατρέψτε αυτήν την ανάρτηση σε προσωπικό μήνυμα" - complete: "Η ανάρτηση μετατράπηκε σε προσωπικό μήνυμα" user_actions: bundle_title: "Τι θέλετε να κάνετε με τον χρήστη;" - no_action_user: - title: "Καμία ενέργεια" silence_user: title: "Σίγαση χρήστη" description: "Αποτρέψτε τον χρήστη από το να δημοσιεύσει" @@ -3012,6 +3116,12 @@ el: title: "Διαγραφή & αποκλεισμός" description: "Διαγραφή του χρήστη και αποκλεισμός της IP/διεύθυνσης email του" complete: "Ο χρήστης διαγράφηκε και αποκλείστηκε" + create_linked_topic: + topic_title_with_sequence: + one: "%{topic_title} (Μέρος %{count})" + other: "%{topic_title} (Μέρος %{count})" + post_raw: "Συνέχεια της συζήτησης από %{parent_url}.\n\nΠροηγούμενες συζητήσεις:\n\n%{previous_topics}" + small_action_post_raw: "Συνεχίστε τη συζήτηση στο %{new_title}." fallback_username: "χρήστης" activemodel: errors: diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 15bf5e6c880c9..7eba7ed0b8c57 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -286,6 +286,7 @@ en: errors: &errors format: ! "%{attribute} %{message}" format_with_full_message: "%{attribute}: %{message}" + diff_too_complex: "The diff is too complex to compute safely. Please try smaller edits." messages: invalid_locale: "%{invalid_locale} is not a valid locale" too_long_validation: @@ -480,7 +481,13 @@ en: delete_topic_failed: "There was an error deleting that topic. Please contact the site's administrator." reading_time: "Reading time" + reading_time_minutes: + one: "%{count} min 🕑" + other: "%{count} mins 🕑" likes: "Likes" + likes_count: + one: "%{count} ❤" + other: "%{count} ❤" action_already_performed: "Oops! You already performed this action. Can you try refreshing the page?" @@ -650,6 +657,7 @@ en: one: "Maximum %{count} user can be added at once" other: "Maximum %{count} users can be added at once" usernames_or_emails_required: "Usernames or emails must be present" + cannot_add_emails: "Only usernames can be used to add members to this group. To invite by email, use the Invite button." counting_too_many_email_domains: one: "Maximum %{count} email domain can be counted at once" other: "Maximum %{count} email domains can be counted at once" @@ -874,6 +882,7 @@ en: invalid_email_in: "'%{email}' is not a valid email address." email_already_used_in_group: "'%{email}' is already used by the group '%{group_name}'." email_already_used_in_category: "'%{email}' is already used by the category '%{category_name}'." + groups_required_for_mode: "You must select at least one group for %{setting}." description_incomplete: "The category description post must have at least one paragraph." description_too_long: one: "Description is too long (maximum is %{count} character)." @@ -892,6 +901,14 @@ en: other: "Can't delete this category because it has %{count} topics. Oldest topic is %{topic_link}." topic_exists_no_oldest: "Can't delete this category because topic count is %{count}." uncategorized_description: "Topics that don't need a category, or don't fit into any other existing category." + + category_types: + not_available: "Category type '%{type_name}' is not available" + discussion: + name: "Discussion" + title: "discussion" + description: "A standard category with all the essentials for conversation." + trust_levels: admin: "Admin" staff: "Staff" @@ -1145,6 +1162,8 @@ en: connection_error: "There was an issue connecting with the server, check the server name and port and try again." timeout_error: "Connection to the server timed out, check the server name and port and try again." unhandled_error: "Unhandled error when testing email settings. %{message}" + invalid_host: "The provided host resolves to a disallowed IP address." + host_resolve_failed: "The provided host could not be resolved." webauthn: validation: invalid_type_error: "The webauthn type provided was invalid. Valid types are webauthn.get and webauthn.create." @@ -1238,6 +1257,10 @@ en: every_month: "every month" every_six_months: "every six months" + calendar_subscriptions: + application_name: "Calendar Subscriptions" + bookmarks_feed_name: "%{site_title} - Bookmark reminders" + user_api_key: title: 'Authorize "%{application_name}"' authorize: "Authorize" @@ -1248,6 +1271,8 @@ en: permissions_header: 'This will allow "%{application_name}" to:' redirect_warning: "Authorizing will redirect you to" instructions: 'We just generated a new user API key for you to use with "%{application_name}", please paste the following key into your application:' + copy_key: "Copy Key" + copied: "Copied!" otp_description: 'Would you like to allow "%{application_name}" to access this site?' otp_confirmation: confirm_title: Continue to %{site_name} @@ -1326,9 +1351,11 @@ en: description: "List of flags' statuses including type of flag, poster, flagger, and time to resolution." visits: title: "User Visits" - xaxis: "Day" + xaxis: + desktop: "Desktop" + mobile: "Mobile" yaxis: "Number of visits" - description: "Number of signed-in user visits." + description: "Number of signed-in user visits by device type." signups: title: "Signups" xaxis: "Day" @@ -1392,10 +1419,10 @@ en: description: "Pageviews for logged in users, anonymous users, known crawlers and other traffic." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" + title: "DAU / MAU" xaxis: "Day" yaxis: "DAU/MAU" - description: "Number of members that logged in in the last day divided by number of members that logged in in the last month – returns a % which indicates community 'stickiness'. Aim for >20%." + description: "The share of monthly active members who returned in the last day. This percentage shows how regularly people come back; also called the community 'stickiness'. Aim for > 20%." daily_engaged_users: title: "Daily Engaged Users" xaxis: "Day" @@ -1814,7 +1841,6 @@ en: max_oneboxes_per_post: "Set the maximum number of oneboxes that can be included in a single post. Oneboxes provide a preview of linked content within the post." facebook_app_access_token: "A token generated from your Facebook app ID and secret. Used to generate Instagram oneboxes." github_onebox_access_tokens: "A mapping of a GitHub organisation or user to a GitHub access token which is used to generate GitHub oneboxes for private repos, commits, pull requests, issues, and file contents. Without this, only public GitHub URLs will be oneboxed." - logo: "The logo image at the top left of your site. Use a wide rectangular image with a height of 120 and an aspect ratio greater than 3:1. If left blank, the site title text will be shown." logo_small: "The small logo image at the top left of your site, seen when scrolling down. Use a square 120 × 120 image. If left blank, a home glyph will be shown." digest_logo: "The alternate logo image used at the top of your site's email summary. Use a wide rectangle image. Don't use an SVG image. If left blank, the image from the `logo` setting will be used." @@ -1906,6 +1932,7 @@ en: moderators_manage_categories: "Allow moderators to create and manage categories" moderators_manage_groups: "Allow moderators to create and manage groups" moderators_change_post_ownership: "Allow moderators to change post ownership" + change_post_ownership_allowed_groups: "Allow users in these groups to change post ownership" cors_origins: "Allowed origins for cross-origin requests (CORS). Each origin must include http:// or https://. The DISCOURSE_ENABLE_CORS env variable must be set to true to enable CORS." use_admin_ip_allowlist: "Admins can only log in if they are at an IP address defined in the Screened IPs list (Admin > Logs > Screened Ips)." blocked_ip_blocks: "A list of private IP blocks that should never be crawled by Discourse" @@ -2224,6 +2251,7 @@ en: here_mention_allowed_groups: "Groups that are allowed to mention @here. Admins and moderators can always mention @here." create_thumbnails: "Create thumbnails and lightbox images that are too large to fit in a post." + animated_topic_thumbnails: "Use the original animated image as the topic thumbnail instead of generating a static thumbnail." email_time_window_mins: "Wait (n) minutes before sending any notification emails, to give users a chance to edit and finalize their posts." personal_email_time_window_seconds: "Wait (n) seconds before sending any personal message notification emails, to give users a chance to edit and finalize their messages." @@ -2340,6 +2368,7 @@ en: mailgun_api_key: "Mailgun Secret API key used to verify webhook messages." sendgrid_verification_key: "Sendgrid verification key used to verify webhook messages." mailjet_webhook_token: "Token used to verify webhook payload. It must be passed as the 't' query parameter of the webhook, for example: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Token used to verify webhook payload. It must be passed as the 't' query parameter of the webhook, for example: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Mandrill authentication key used to verify webhook messages." postmark_webhook_token: "Token used to verify webhook payload. It must be passed as the 't' query parameter of the webhook, for example: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Token used to verify webhook payload. It must be passed as the 't' query parameter of the webhook, for example: https://example.com/webhook/sparkpost?t=supersecret" @@ -2427,7 +2456,7 @@ en: anonymous_posting_allowed_groups: "Groups that are allowed to enable anonymous posting. This setting requires the `allow anonymous mode` setting to be enabled." anonymous_account_duration_minutes: "To protect anonymity create a new anonymous account every N minutes for each user. Example: if set to 600, as soon as 600 minutes elapse from last post AND user switches to anon, a new anonymous account is created." - hide_user_profiles_from_public: "Disable user cards, user profiles and user directory for anonymous users." + hide_user_profiles_from_public: "Disable user cards and user profiles for anonymous users. Aggregated stats will still be available in the user directory." hide_new_user_profiles: "Hide trust level 1 or lower user profiles from the public and trust level 1 users until they post for the first time. This feature is disabled unconditionally on must_approve_users and invite_only sites." allow_users_to_hide_profile: "Allow users to hide their profile and presence" hide_user_activity_tab: "Hide the activity tab on user profiles except for Admin and self." @@ -2532,6 +2561,7 @@ en: embed_support_markdown: "Support Markdown formatting for embedded posts." allowed_embed_selectors: "A comma separated list of CSS elements that are allowed in embeds." allowed_href_schemes: "Schemes allowed in links in addition to http and https." + embed_full_app: "Enable full app mode for embedded comments. When enabled, embedded comments will load the full Discourse application in an iframe, allowing users to interact with topics directly" embed_post_limit: "Maximum number of posts to embed." embed_username_required: "The username for topic creation is required." notify_about_reviewable_item_after: "If there are reviewable items that haven’t been handled after this many hours, send a personal message to moderators. Set to 0 to disable." @@ -2706,11 +2736,12 @@ en: allow_changing_staged_user_tracking: "Allow a staged user's category and tag notification preferences to be changed by an admin user." use_email_for_username_and_name_suggestions: "Use the first part of email addresses for username and name suggestions. Warning: This can make it easier for bad actors to discover the email address of your members (because many people use common email providers like `gmail.com`)." - use_name_for_username_suggestions: "Use a user's full name when suggesting usernames." + use_name_for_username_suggestions: "Use a user's full name when suggesting usernames during SSO and OAuth signup flows." suggest_weekends_in_date_pickers: "Include weekends (Saturday and Sunday) in date picker suggestions (disable this if you use Discourse only on weekdays, Monday through Friday)." show_bottom_topic_map: "Shows the topic map at the bottom of the topic when it has 10 replies or more." show_topic_map_in_topics_without_replies: "Shows the topic map even if the topic has no replies." enable_site_owner_onboarding: "Shows a panel on the homepage to new admins to help them get started. Re-enable this setting to see the onboarding steps again." + site_owner_onboarding_max_days: "Maximum number of days after site creation to show the onboarding banner." enable_welcome_banner: "Display a banner on your main topic list pages to welcome members and allow them to search site content" welcome_banner_image: "Set an image to display in the background of the welcome banner." welcome_banner_location: "Determines where on the page the welcome banner will appear." @@ -2727,6 +2758,7 @@ en: show_preview_for_form_templates: "Enable the preview for form templates feature" lazy_load_categories_groups: "Lazy load category information only for users of these groups. This improves performance on sites with many categories." enable_auto_grid_images: "Automatically wraps images in [grid] tags when 3 or more images are uploaded in the composer." + enable_new_checkbox_style: "Enable the redesigned checkbox style for FormKit checkboxes." impersonate_without_logout: "Allow admins to impersonate a user without having to log out of their admin account." experimental_impersonation_time_limit_minutes: "How long before an impersonation session is automatically ended." page_loading_indicator: "Configure the loading indicator which appears during page navigations within Discourse. 'Spinner' is a full page indicator. 'Slider' shows a narrow bar at the top of the screen." @@ -2749,11 +2781,9 @@ en: content_localization_crawler_param: "Serve localized content to web crawlers when 'content localization enabled' and 'set locale from param' is enabled. The list of supported locales is defined in 'content localization supported locales'." content_localization_use_default_locale_when_unsupported: "Serve localized content in the site's default locale to users whose preferred language is not listed in 'content localization supported locales'." content_localization_allow_author_localization: "Allow authors update localizations of their own topics and posts via the post menu." - enable_upcoming_changes: "Enable upcoming changes" fake_upcoming_change: "This is a fake upcoming change for testing purposes. No need to translate this string." floating_dismiss_topics_on_mobile: "Shows a floating 'Dismiss...' button on mobile for the topic list for easier access and to free up space in the top of the topic list" rename_faq_to_guidelines: "This change renames the FAQ page to Guidelines. The FAQ page will still be available at /faq. The 'faq url' setting works as before." - experimental_tag_settings_page: "Enable a dedicated settings page for tags at /tag/:slug/:id/edit." enable_simplified_category_creation: "Enables a simplified category creation flow with fewer options and a cleaner interface." enable_custom_splash_screen: "Allows customizing the loading splash screen with your own SVG image. Upload an image via the 'splash screen image' setting. Warning: This may negatively impact LCP scores and Google indexing." modernize_foundation_theme: "This change introduces design modifcations to the Foundation theme in Discourse." @@ -2881,6 +2911,8 @@ en: exclude_tag_group: "Exclude topics with tags from a specific tag group" activity_before: "Show topics with last activity before a date (YYYY-MM-DD or days ago)" activity_after: "Show topics with last activity after a date (YYYY-MM-DD or days ago)" + bookmarked_before: "Show topics bookmarked before a date (YYYY-MM-DD or days ago)" + bookmarked_after: "Show topics bookmarked after a date (YYYY-MM-DD or days ago)" created_before: "Show topics created before a date (YYYY-MM-DD or days ago)" created_after: "Show topics created after a date (YYYY-MM-DD or days ago)" created_by: "Show topics created by a specific user or group" @@ -3341,7 +3373,7 @@ en: - Update using our easy **[one-click browser update](%{base_url}/admin/update)** - - See what's new in the [release notes](https://meta.discourse.org/tag/release-notes) or view the [raw GitHub changelog](https://github.com/discourse/discourse/commits/main) + - See what's new in the [release notes](https://releases.discourse.org/changelog/%{new_version}) - Visit [meta.discourse.org](https://meta.discourse.org) for news, discussion, and support for Discourse @@ -3356,7 +3388,7 @@ en: - Update using our easy **[one-click browser update](%{base_url}/admin/update)** - - See what's new in the [release notes](https://meta.discourse.org/tag/release-notes) or view the [raw GitHub changelog](https://github.com/discourse/discourse/commits/main) + - See what's new in the [release notes](https://releases.discourse.org/changelog/%{new_version}) - Visit [meta.discourse.org](https://meta.discourse.org) for news, discussion, and support for Discourse @@ -3418,6 +3450,10 @@ en: For additional guidance, please refer to our [community guidelines](%{base_url}/guidelines). + reviewable_queued_post_revise_and_reject_edit_post: "You can edit your original post below and re-submit to make the suggested changes, or reply to this message if you have any questions." + reviewable_queued_post_revise_and_reject_edit_post_no_reply: "You can edit your original post below and re-submit to make the suggested changes." + reviewable_queued_post_revise_and_reject_edit_topic: "You can edit your topic's original post below and re-submit to make the suggested changes, or reply to this message if you have any questions." + reviewable_queued_post_revise_and_reject_edit_topic_no_reply: "You can edit your topic's original post below and re-submit to make the suggested changes." reviewable_queued_post_revise_and_reject: title: "Feedback on your post" subject_template: "Feedback on your post in %{topic_title}" @@ -3430,7 +3466,7 @@ en: Feedback: %{feedback} - You can edit your original post below and re-submit to make the suggested changes, or reply to this message if you have any questions. + %{edit_instructions} -------- @@ -3453,7 +3489,7 @@ en: Feedback: %{feedback} - You can edit your topic's original post below and re-submit to make the suggested changes, or reply to this message if you have any questions. + %{edit_instructions} -------- diff --git a/config/locales/server.es.yml b/config/locales/server.es.yml index 00e0f7f887c37..c397047011dfb 100644 --- a/config/locales/server.es.yml +++ b/config/locales/server.es.yml @@ -60,8 +60,6 @@ es: inline_oneboxer: topic_page_title_post_number: "nº %{post_number}" topic_page_title_post_number_by_user: "nº %{post_number} por %{username}" - too_many_urls: "No se pueden incluir más de 10 URL en una única solicitud de onebox." - concurrency_not_allowed: "No se permiten solicitudes simultáneas de inline-oneboxing. Envía una sola solicitud a la vez." components: enabled_filter: "Activado" disabled_filter: "Desactivado" @@ -344,7 +342,6 @@ es: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Los agentes de usuario deben tener al menos 3 caracteres para evitar limitar accidentalmente la velocidad de los usuarios legítimos." slow_down_crawler_user_agent_cannot_be_popular_browsers: "No puedes añadir ninguno de los siguientes valores a este ajuste: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "No es posible desactivar «strip image metadata» si el ajuste «composer media optimization image enabled» está activado. Desactiva «composer media optimization image enabled» antes de desactivar «strip image metadata»." - x_summary_large_image_no_svg: "Las imágenes de resumen de Twitter usadas para los metadatos de twitter:image no pueden ser .svg" tl0_and_anonymous_flag: "Debes proporcionar el «site contact email» (correo electrónico de contacto del sitio) o la «email address to report illegal content» (dirección de correo electrónico para denunciar contenido ilegal) para los usuarios anónimos." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Este ajuste requiere que primero se active el ajuste «allow anonymous mode»." conflicting_google_user_id: 'El ID de la cuenta Google para esta cuenta ha cambiado; el personal debe intervenir por razones de seguridad. Ponte en contacto con el personal y envía esta referencia
https://meta.discourse.org/t/76575' @@ -808,6 +805,10 @@ es: other: "No se puede eliminar esta categoría porque tiene %{count} temas. El tema más antiguo es %{topic_link}." topic_exists_no_oldest: "No se puede eliminar esta categoría porque el número de temas es %{count}." uncategorized_description: "Temas que no necesitan una categoría o no encajan en ninguna de las categorías existentes." + category_types: + discussion: + name: "Debate" + title: "debate" trust_levels: admin: "Administrador" staff: "Personal" @@ -1131,12 +1132,16 @@ es: every_month: "cada mes" every_six_months: "cada seis meses" user_api_key: + title: 'Autorizar a "%{application_name}"' authorize: "Autorizar" deny: "Cancelar" read: "leer" read_write: "lectura/escritura" logged_in_as: "Sesión iniciada como" + permissions_header: 'Esto permitirá a "%{application_name}" hacer lo siguiente:' + redirect_warning: "Si lo autorizas, se te redireccionará a" instructions: 'Acabamos de generar una nueva clave API de usuario para que uses con «%{application_name}». Pega la siguiente clave en tu aplicación:' + copied: "¡Copiado!" otp_description: '¿Te gustaría permitir a «%{application_name}» acceder a este sitio?' otp_confirmation: confirm_title: Continuar a %{site_name} @@ -1215,9 +1220,10 @@ es: description: "Lista de estados de denuncia que incluye el tipo de denuncia, el autor, el usuario que denuncia y el tiempo de resolución." visits: title: "Visitas de usuario" - xaxis: "Día" + xaxis: + desktop: "Escritorio" + mobile: "Móvil" yaxis: "Número de visitas" - description: "Número de visitas de usuarios registrados." signups: title: "Registros" xaxis: "Día" @@ -1279,10 +1285,8 @@ es: description: "Páginas vistas por usuarios registrados, usuarios anónimos, crawlers conocidos y otro tráfico." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "UAD/UAM" xaxis: "Día" yaxis: "UAD/UAM" - description: "Número de miembros que han iniciado sesión durante el último día dividido entre el número de miembros que han iniciado sesión durante el último mes – resulta en un % que indica el grado de «permanencia» de la comunidad. Apuntar a >20 %." daily_engaged_users: title: "Usuarios involucrados a diario" xaxis: "Día" @@ -1776,7 +1780,6 @@ es: slow_down_crawler_rate: "Si slow_down_crawler_user_agents es especificado, esta proporción aplicará para todos los crawlers (número de segundos de demora entre solicitudes)" content_security_policy: "Activa la Política de Seguridad de Contenidos (CSP). La CSP es una capa adicional de seguridad que ayuda a evitar ciertos tipos de ataques, como el Cross Site Scripting (XSS) y la inyección de datos." content_security_policy_report_only: "Activar la política de seguridad de contenido de solo denuncias (CSP)" - content_security_policy_collect_reports: "Activar la recolección de denuncias de violación de CSP en /csp_reports" content_security_policy_frame_ancestors: "Restringir quién puede incrustar este sitio en iframes a través de CSP. Controla los hosts permitidos en Insertado" content_security_policy_script_src: "Fuentes de scripts adicionales permitidas. El host actual y la CDN se incluyen por defecto. Ver Mitigar los ataques XSS con la Política de Seguridad de Contenidos. (CSP). Otras fuentes de host se ignoran, ya que está activada la dinámica estricta." invalidate_inactive_admin_email_after_days: "Las cuentas administrativas que no hayan visitado la página en este número de días deberán validar de nuevo su dirección de correo electrónico antes de iniciar sesión. Establecer a 0 para desactivar." @@ -2093,7 +2096,6 @@ es: alternative_reply_by_email_addresses: "Lista de plantillas alternativa para las direcciones de respuesta por correo electrónico. Ejemplo: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "Usar el HTML en vez del texto para los correos electrónicos entrantes." strip_incoming_email_lines: "Elimina los espacios en blanco iniciales y finales de cada línea de correos electrónicos entrantes." - disable_emails: "Evite que el Discourse envíe cualquier clase de correo electrónico. Seleccione «sí» para desactivar los correos electrónicos a todos los usuarios. Seleccione «no staff» para desactivar los correos electrónicos solo para usuarios que no formen parte del personal." strip_images_from_short_emails: "Quitar imágenes que tengan un tamaño menor a 2800 Bytes de los correos electrónicos" short_email_length: "Define la longitud máxima, en bytes, para que un correo electrónico se clasifique como «corto» para la supresión de imágenes. Si el tamaño de un correo electrónico no supera este valor, se eliminarán todas las imágenes (como avatares y emojis) que contenga." display_name_on_email_from: "Mostrar nombres completos en los campos de remitente de correos electrónicos" @@ -2182,7 +2184,6 @@ es: group_in_subject: "Configura %%{optional_pm} en el título del correo electrónico para nombrar el primer grupo en MP, consulta: Personalizar el formato del asunto para correos electrónicos estándar" allow_anonymous_mode: "Activa la opción de que los usuarios cambien al modo anónimo para publicar. Cuando está activada, los usuarios pueden optar por ocultar su identidad al crear publicaciones o temas en todo el sitio. Véase también «allow_anonymous_likes»." anonymous_account_duration_minutes: "Para proteger el anonimato, crear una nueva cuenta anónima cada N minutos para cada usuario. Ejemplo: si se establece en 600, tan pronto como pasen 600 minutos desde la última publicación Y el usuario cambie a anónimo, se creará una nueva cuenta anónima." - hide_user_profiles_from_public: "Desactiva las tarjetas de usuario, los perfiles y el directorio de usuarios para usuarios anónimos." hide_new_user_profiles: "Oculta los perfiles de usuarios de nivel de confianza 1 o inferior al público y a los usuarios de nivel de confianza 1 hasta que publiquen por primera vez. Esta característica está desactivada incondicionalmente en los sitios must_approve_users y invite_only." allow_users_to_hide_profile: "Permitir a los usuarios ocultar su perfil y presencia" hide_user_activity_tab: "Ocultar la pestaña de actividad en los perfiles de usuario, excepto para el Administrador y para mí." @@ -2373,7 +2374,6 @@ es: dashboard_hidden_reports: "Permitir ocultar los informes especificados del panel de control." dashboard_visible_tabs: "Elige qué pestañas del panel de control se mostrarán." dashboard_general_tab_activity_metrics: "Selecciona las denuncias que se muestran como medidas de actividad en la pestaña general." - gravatar_enabled: "Usa el servicio Gravatar para los avatares de usuario. Esto evitará que los usuarios cambien a Gravatar para sus avatares, pero no afectará a quienes ya lo usan." gravatar_name: "Especifica el nombre del proveedor del servicio Gravatar. Este nombre se utiliza normalmente para identificar la fuente que proporciona avatares Gravatar al sitio." gravatar_base_url: "Especifica la URL para acceder a la API del proveedor de Gravatar. Este ajuste es fundamental para convertir las direcciones de correo electrónico en URL de Gravatar, donde se almacenan las imágenes de avatar." gravatar_login_url: "URL relativa a «gravatar_base_url», que proporciona al usuario el acceso al servicio Gravatar." @@ -2454,12 +2454,6 @@ es: reply_by_email_disabled: "Primero debes activar «responder por correo electrónico» antes de activar esta configuración." discourse_connect_url_is_empty: "Debes rellenar «discourse connect url» antes de activar este ajuste." enable_local_logins_disabled: "Primero debes activar «activar inicio de sesión local» antes de activar esta configuración." - min_username_length_exists: "No puede establecer la longitud de usuario mínima por encima del nombre de usuario más corto (%{username})" - min_group_name_length_exists: "No puedes establecer la longitud de nombre de usuario mínima por encima del nombre de grupo más corto (%{group_name})" - min_username_length_range: "No puedes establecer el mínimo por encima del máximo." - max_username_length_exists: "No puedes establecer la longitud de usuario máxima por debajo del nombre de usuario más largo (%{username})." - max_group_name_length_exists: "No puedes establecer la longitud de nombre usuario máxima por debajo del nombre de grupo más largo (%{group_name})." - max_username_length_range: "No puedes establecer el máximo por debajo del mínimo." invalid_hex_value: "Los colores debe ser códigos hexadecimalesde 6 dígitos." empty_selectable_avatars: "Debes subir al menos dos avatares seleccionables antes de activar esta configuración." category_search_priority: @@ -2518,7 +2512,6 @@ es: exclude_tag: "Excluir temas con una etiqueta específica" exclude_tags_any: "Excluir temas con cualquiera de las etiquetas especificadas (separadas por comas)" exclude_tags_all: "Excluir temas con todas las etiquetas especificadas (separadas por comas)" - tags_alias: "Alias para el filtro «etiqueta:»" tag_group: "Mostrar temas con etiquetas de un grupo de etiquetas específico" exclude_tag_group: "Excluir temas con etiquetas de un grupo de etiquetas específico" activity_before: "Mostrar temas con última actividad antes de una fecha (AAAA-MM-DD o hace días)" @@ -2758,6 +2751,7 @@ es: updating_user_ids: "Actualizando identificadores de usuario…" deleting_source_user: "Eliminando usuario de origen…" user: + anonymized: "[eliminado debido a la anonimización del usuario]" deactivated: "Ha sido desactivado debido a muchos correod electrónicos rechazados a «%{email}»." deactivated_by_staff: "Desactivado por el personal" deactivated_by_inactivity: @@ -2934,35 +2928,9 @@ es: new_version_mailer: title: "Correo electrónico de nueva versión" subject_template: "[%{email_prefix}] Nueva versión de Discourse, actualización disponible" - text_body_template: | - ¡Bien! ¡Hay una nueva versión de [Discourse](https://www.discourse.org) disponible! - - Tu versión: %{installed_version} - Nueva versión: **%{new_version}** - - - Actualiza usando el **[actualizador en un clic en tu navegador](%{base_url}/admin/upgrade)** - - - Echa un vistazo a las novedades en las [notas de la versión](https://meta.discourse.org/tag/release-notes), o mira el [registro de cambios completo en GitHub](https://github.com/discourse/discourse/commits/main) - - - Visita [meta.discourse.org](https://meta.discourse.org) para noticias, debate y ayuda sobre Discourse new_version_mailer_with_notes: title: "Correo electrónico de nueva versión con notas" subject_template: "[%{email_prefix}] actualización disponible" - text_body_template: | - ¡Bien! ¡Hay una nueva versión de [Discourse](https://www.discourse.org) disponible! - - Tu versión: %{installed_version} - Nueva versión: **%{new_version}** - - - Actualiza usando el **[actualizador en un clic en tu navegador](%{base_url}/admin/upgrade)** - - - Echa un vistazo a las novedades en las [notas de la versión](https://meta.discourse.org/tag/release-notes), o mira el [registro de cambios completo en GitHub](https://github.com/discourse/discourse/commits/main) - - - Visita [meta.discourse.org](https://meta.discourse.org) para noticias, debate y ayuda sobre Discourse - - ### Notas de la versión - - %{notes} flag_reasons: off_topic: "Tu publicación fue denunciada como **sin relación con el tema**: la comunidad piensa que no se ajusta debidamente al tema, definido por el título o la primera publicación." inappropriate: "Tu publicación fue denunciada como **inapropiada**: la comunidad piensa que es ofensiva, abusiva, una conducta de odio o que vulnera alguna de las [directrices de la comunidad](%{base_path}/guidelines)." @@ -3011,47 +2979,9 @@ es: reviewable_queued_post_revise_and_reject: title: "Comentarios sobre tu publicación" subject_template: "Comentarios sobre tu publicación en %{topic_title}" - text_body_template: | - Hola %{username}: - - Hemos revisado tu publicación en [%{topic_title}](%{topic_url}) y tenemos algunos comentarios para ti. - - Motivo: %{reason} - - Opinión: %{feedback} - - Puedes editar tu publicación original a continuación y volver a enviarlo para realizar los cambios sugeridos, o responder a este mensaje si tienes alguna pregunta. - - -------- - - %{original_post} - - -------- - - Gracias, - Moderadores de %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "Comentarios sobre tu tema" subject_template: 'Comentarios sobre el nuevo tema titulado «%{topic_title}»' - text_body_template: | - Hola %{username}: - - Hemos revisado tu nuevo tema titulado «%{topic_title}» y tenemos algunos comentarios para ti. - - Motivo: %{reason} - - Comentarios: %{feedback} - - Puedes editar la publicación original de tu tema y volver a enviarlo para realizar los cambios sugeridos, o responder a este mensaje si tienes alguna pregunta. - - -------- - - %{original_post} - - -------- - - Gracias, - Moderadores de %{site_name} post_hidden_again: title: "Publicación ocultada de nuevo" subject_template: "Publicación ocultada debido a denuncias de la comunidad, se ha informado al personal" @@ -3742,6 +3672,7 @@ es: %{respond_instructions} user_replied: title: "Usuario respondió" + preview: "Alguien ha respondido a tu publicación." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3764,6 +3695,7 @@ es: %{respond_instructions} user_quoted: title: "Usuario citado" + preview: "Alguien ha citado tu publicación." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3775,6 +3707,7 @@ es: %{respond_instructions} user_linked: title: "Usuario enlazado" + preview: "Publicación enlazada desde otro tema." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3786,6 +3719,7 @@ es: %{respond_instructions} user_mentioned: title: "Usuario mencionado" + preview: "Alguien te ha mencionado en una publicación." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3874,6 +3808,7 @@ es: %{respond_instructions} user_posted_pm: title: "Usuario envió un MP" + preview: "Alguien te ha enviado un mensaje personal." subject_template: "[%{email_prefix}] [MP] %{topic_title}" text_body_template: | %{header_instructions} @@ -3962,6 +3897,7 @@ es: preheader: "Un breve resumen desde %{since}" forgot_password: title: "Olvidé la contraseña" + preview: "Restablece tu contraseña." subject_template: "[%{email_prefix}] restablecer contraseña" text_body_template: | Alguien ha pedido restablecer tu contraseña en [%{site_name}](%{base_url}). @@ -4050,6 +3986,7 @@ es: %{base_url}/u/confirm-old-email/%{email_token} notify_old_email: title: "Antiguo correo electrónico de notificaciones" + preview: "Dirección de correo electrónico actualizada." subject_template: "[%{email_prefix}] Tu dirección de correo electrónico ha sido cambiada" text_body_template: "Este es un mensaje automatizado para comunicarte que tu correo electrónico para \nel sitio %{site_name} ha sido modificado. Si esto fue un error, ponte en contacto con un \nadministrador del sitio.\n\nTu correo electrónico fue modificado por:\n\n%{new_email}\n" notify_old_email_add: @@ -4064,6 +4001,7 @@ es: %{new_email} signup_after_approval: title: "Entrar después de ser aprobado" + preview: "Nueva cuenta aprobada." subject_template: "¡Tu solicitud fue aprobada en %{site_name}!" text_body_template: | ¡Te damos la bienvenida a %{site_name}! @@ -4915,7 +4853,7 @@ es: enter: "Activar modo seguro" must_select: "Debes escoger al menos una opción para entrar en el modo seguro." dev_mode: - enter: "Intro" + title: "Modo de desarrollo" wizard: title: "Instalación de Discourse" step: @@ -4972,6 +4910,8 @@ es: pr_summary: "%{commits} commits cambiaron %{changed_files} archivos con %{additions} adiciones y %{deletions} eliminaciones" no_description: "Contribuye al desarrollo de %{repo} creando una cuenta en GitHub." pr_title: + default: "Pull request" + draft: "Borrador de pull request" closed: "Pull request cerrado" status_date: open: "abierto" @@ -4993,6 +4933,7 @@ es: confirm_body: "¡Bien! Se han activado las notificaciones." custom: "Notificación de %{username} en %{site_title}" staff_action_logs: + redacted: "[contenido no visible]" json_too_long: "Valores no registrados porque superan los límites de longitud de columna" not_found: "no encontrado" unknown: "desconocido" @@ -5171,9 +5112,13 @@ es: reject_and_delete: title: "Rechazar y eliminar la publicación" complete: "Publicación rechazada y eliminada." + reject_and_delete_standalone: + title: "No, eliminar publicación" reject_and_keep_deleted: title: "Mantener publicación eliminada" complete: "La publicación se ha rechazado y se ha mantenido eliminada." + reject_and_keep_deleted_standalone: + title: "No, mantener la publicación eliminada" scrub: title: Borrar registro approve_and_restore: @@ -5184,10 +5129,6 @@ es: complete: "Se ha aprobado la publicación y se ha dejado de ocultar" post_actions: bundle_title: "¿Qué quieres hacer con la publicación?" - no_action_post: - title: "Ninguna acción" - description: "No hacer nada" - complete: "No se ha tomado ninguna medida al respecto" delete_post: title: "Eliminar publicación" description: "Eliminar esta publicación" @@ -5208,16 +5149,8 @@ es: title: "Editar publicación" description: "Editar el contenido de esta publicación" complete: "Publicación editada" - convert_to_pm: - title: "Convertir en mensaje personal" - description: "Convertir esta publicación en un mensaje personal" - complete: "Publicación convertida en mensaje personal" user_actions: bundle_title: "¿Qué quieres hacer con el usuario?" - no_action_user: - title: "Ninguna acción" - description: "No hacer nada con el usuario" - complete: "No se ha tomado ninguna medida contra el usuario" silence_user: title: "Silenciar al usuario" description: "Evitar que el usuario siga publicando" @@ -5284,6 +5217,10 @@ es: reserved_id: "tiene una palabra clave reservada como id: %{id}" unsafe_description: "tiene una descripción HTML no segura" invalid_tag_group: "tiene un grupo de etiquetas no válido: %{tag_group_name}" + discourse_id: + already_registered: "Este sitio ya está registrado con Discourse ID" + errors: + regenerate_failed: "Error al regenerar las credenciales. Inténtalo de nuevo más tarde." activemodel: errors: <<: *errors diff --git a/config/locales/server.et.yml b/config/locales/server.et.yml index 3720668ba1f82..374604edc38c3 100644 --- a/config/locales/server.et.yml +++ b/config/locales/server.et.yml @@ -511,6 +511,7 @@ et: deny: "Loobu" read: "lugemine" read_write: "lugemine ja kirjutamine" + copied: "Kopeeritud!" otp_confirmation: confirm_title: Edasi saidile %{site_name} scopes: @@ -549,7 +550,9 @@ et: poster: Postitaja visits: title: "Kasutajakülastused" - xaxis: "Päev" + xaxis: + desktop: "Töölaud" + mobile: "Mobiil" yaxis: "Külastajate arv" signups: xaxis: "Päev" @@ -775,8 +778,6 @@ et: suppress_overlapping_tags_in_list: "Ära näita silti, kui see ühtib täpselt sõnaga teema päses" errors: invalid_integer: "Väärtuseks peab olema täisarv." - min_username_length_range: "Minimaalne ei tohi olla maksimaalsest suurem." - max_username_length_range: "Sa ei tohi maksimaalset seada minimaalsest väiksemaks." search: within_post: "postituse nr%{post_number} tegi %{username}" types: @@ -1100,12 +1101,8 @@ et: title: "Jah" approve_and_unhide: title: "Jah" - no_action_post: - title: "Tegevust pole" delete_post: complete: "Postitus kustutatud" - no_action_user: - title: "Tegevust pole" delete_user: complete: "Kasutaja kustutatud" fallback_username: "kasutaja" diff --git a/config/locales/server.fa_IR.yml b/config/locales/server.fa_IR.yml index 663e6fac9d329..7bfe297184254 100644 --- a/config/locales/server.fa_IR.yml +++ b/config/locales/server.fa_IR.yml @@ -58,8 +58,6 @@ fa_IR: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} توسط %{username}" - too_many_urls: "نمی توان بیش از ۱۰ نشانی وب را در یک درخواست به صورت inline در یک جعبه قرار داد." - concurrency_not_allowed: "درخواست‌های inline-oneboxing همزمان مجاز نیستند. لطفاً هر بار یک درخواست ارسال کنید." components: enabled_filter: "فعال شده" disabled_filter: "غیرفعال" @@ -335,7 +333,6 @@ fa_IR: cors_origins_should_not_have_trailing_slash: "شما نباید اسلش انتهایی (/) را به مبدا CORS اضافه کنید." slow_down_crawler_user_agent_must_be_at_least_3_characters: "یوزر ایجینت باید حداقل 3 کاراکتر داشته باشند تا از محدود شدن نرخ درخواست کاربران قانونی به صورت تصادفی جلوگیری شود." slow_down_crawler_user_agent_cannot_be_popular_browsers: "شما نمی توانید هیچ یک از مقادیر زیر را به تنظیمات اضافه کنید: %{values}." - x_summary_large_image_no_svg: "تصاویر خلاصه توییتر مورد استفاده برای ابرداده twitter:image نمی توانند یک تصویر .svg باشند." tl0_and_anonymous_flag: "برای کاربران ناشناس باید «ایمیل تماس با سایت» یا «آدرس ایمیل برای گزارش محتوای غیرقانونی» ارائه شود." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "این تنظیم نیاز دارد که ابتدا تنظیمات «فعال‌سازی حالت ناشناس» فعال باشد." conflicting_google_user_id: 'شناسه حساب Google برای این حساب تغییر کرده است. مداخله کارکنان به دلایل امنیتی لازم است. لطفاً با کارکنان تماس بگیرید و به آنها نشان دهید
https://meta.discourse.org/t/76575' @@ -1036,6 +1033,7 @@ fa_IR: read: "خواندن" read_write: "خواندن/نوشتن" instructions: 'ما به تازگی یک کلید API کاربر جدید برای استفاده شما با "%{application_name}" ایجاد کردیم. لطفاً کلید زیر را در برنامه خود جایگذاری کنید:' + copied: "کپی شد!" otp_description: 'آیا می خواهید به "%{application_name}" اجازه دسترسی به این سایت را بدهید؟' otp_confirmation: confirm_title: ورود به %{site_name} @@ -1108,9 +1106,10 @@ fa_IR: flagger: گزارش‌دهنده visits: title: "بازدید کاربران" - xaxis: "روز" + xaxis: + desktop: "کامپیوتر" + mobile: "موبایل" yaxis: "تعداد بازدید ها" - description: "تعداد بازدیدهای کاربران وارد شده" signups: title: "ثبت‌نام‌ها" xaxis: "روز" @@ -1167,10 +1166,8 @@ fa_IR: description: "بازدید از صفحه برای کاربران وارد شده، کاربران ناشناس، خزنده های شناخته شده و سایر ترافیک‌ها." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" xaxis: "روز" yaxis: "DAU/MAU" - description: "تعداد اعضایی که در روز گذشته وارد سیستم شده‌اند تقسیم بر تعداد اعضایی که در ماه گذشته وارد شده‌اند - درصدی را نشان می‌دهد که نشان‌دهنده «چسبندگی» انجمن است. بیش از ۲۰٪ را هدف بگیرید." daily_engaged_users: title: "کاربران فعال روزانه" xaxis: "روز" @@ -1712,7 +1709,6 @@ fa_IR: enable_group_directory: "یک فهرست راهنما برای گروه‌ها فراهم کنید" allow_anonymous_mode: "گزینه‌ای را فعال کنید که به کاربران اجازه دهد برای ارسال نوشته‌ها به حالت ناشناس تغییر کنند. با فعال‌سازی، کاربران می‌توانند هویت خود را هنگام ایجاد نوشته‌ها یا موضوعات در وبگاه پنهان کنند. همچنین به اجازه پسندیده ناشناس مراجعه کنید." anonymous_account_duration_minutes: "برای محافظت از ناشناس ماندن، هر N دقیقه برای هر کاربر یک حساب‌کاربری ناشناس بساز. برای مثال: اگر به ۶۰۰ تنظیم شود، به محض اینکه ۶۰۰ دقیقه از آخرین فرسته گذشت و کاربر به حالت ناشناس تغییر کرد، حساب کاربری جدید ناشناس ساخته می شود." - hide_user_profiles_from_public: "غیر‌فعال‌سازی کارت کاربری، پروفایل کاربر و فهرست راهنمای کاربر برای کاربران ناشناس." allow_profile_backgrounds: "به کاربر اجازه بده تا پس‌زمینه نمایه خود را بارگذاری کند." get_a_room_threshold: "تعداد نوشته‌هایی که کاربر باید در یک موضوع ایجاد کند تا به او اخطار داده شود." enable_mobile_theme: "دستگاه های موبایلی که از قالب مناسب موبایل استفاده می کنند٬‌ با قابلیت جابجایی به حالت نمایش کامل. اگر از استایلی استفاده می‌کنید که کاملا واکنشگرا است این قسمت را غیر‌فعال کنید." @@ -1782,8 +1778,6 @@ fa_IR: reply_by_email_address_is_empty: "باید یک 'آدرس پاسخ با ایمیل' قبل از فعالسازی پاسخ با ایمیل تنظیم کنید." user_locale_not_enabled: "قبل از فعالسازی این قسمت، ابتدا باید 'اجازه انتخاب زبان' را به کاربر بدهید." invalid_regex: "الگوی regex نامعتبر یا غیر‌مجاز است." - min_username_length_range: "شما نمیتوانید مقدار حداقل را بیشتر از حداکثر قرار دهید." - max_username_length_range: "شما نمی‌توانید حداکثر را کمتر از حداقل قرار دهید." markdown_linkify_tlds: "شما مقدار «*» را نمی‌توانید وارد کنید." content_localization_locale_limit: "تعداد زبان‌های پشتیبانی‌شده نمی‌تواند بیش از %{max} باشد." placeholder: @@ -2759,8 +2753,6 @@ fa_IR: title: "ورود به حالت امن" no_themes: "غیرفعال کردن پوسته‌ها و اجزای پوسته" enter: "فعال‌سازی حالت امن" - dev_mode: - enter: "وارد شدن " wizard: title: "راه اندازی Discourse" step: @@ -2869,15 +2861,11 @@ fa_IR: title: "بله" approve_and_unhide: title: "بله" - no_action_post: - title: "هیچ اقدامی" delete_post: title: "حذف نوشته" complete: "نوشته حذف شده" restore_post: title: "بازیابی نوشته" - no_action_user: - title: "هیچ اقدامی" suspend_user: title: "کاربر تعلیق شده" delete_user: diff --git a/config/locales/server.fi.yml b/config/locales/server.fi.yml index d75edee5d703a..f631aece9c960 100644 --- a/config/locales/server.fi.yml +++ b/config/locales/server.fi.yml @@ -60,8 +60,6 @@ fi: inline_oneboxer: topic_page_title_post_number: "%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} käyttäjältä %{username}" - too_many_urls: "Yhdessä pyynnössä ei voi olla yli 10:tä URL-osoitetta yhdessä tekstiin sidotussa oneboxissa." - concurrency_not_allowed: "Samanaikaisia tekstiin sidottuja oneboxing-pyyntöjä ei sallita. Lähetä yksi pyyntö kerrallaan." components: enabled_filter: "Käytössä" disabled_filter: "Pois käytöstä" @@ -344,7 +342,6 @@ fi: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Käyttäjäagenttien täytyy sisältää vähintään kolme merkkiä aitojen käyttäjien pyyntöjen virheellisen rajoittamisen välttämiseksi." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Et voi lisätä asetukseen mitään seuraavista arvoista: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Et voi poistaa kuvan metatietojen poistoa käytöstä, jos 'composer media optimization image enabled' on käytössä. Poista 'composer media optimization image enabled' käytöstä ennen kuvien metatietojen poiston poistamista käytöstä." - x_summary_large_image_no_svg: "Twitterin yhteenvetokuvat, joita käytetään twitter:image-metatiedoissa, eivät voi olla .svg-kuvia." tl0_and_anonymous_flag: "Joko \"site contact email\" tai \"email address to report illegal content\" täytyy antaa anonyymeille käyttäjille." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Tämä asetus edellyttää, että \"allow anonymous mode\" -asetus otetaan ensin käyttöön." conflicting_google_user_id: 'Tämän tilin Google-tilitunnus on muuttunut. Henkilökunnan toimenpiteet ovat tarpeen tietoturvasyistä. Ota yhteyttä henkilökuntaan ja ohjaa heidät osoitteeseen
https://meta.discourse.org/t/76575' @@ -1136,6 +1133,7 @@ fi: read: "luku" read_write: "luku/kirjoitus" instructions: 'Loimme juuri uuden käyttäjä-API-avaimen, jota voit käyttää sovelluksessa "%{application_name}". Liitä tämä avainkoodi sovellukseesi:' + copied: "Kopioitiin!" otp_description: 'Haluatko sallia sovellukselle "%{application_name}" pääsyn sivustolle?' otp_confirmation: confirm_title: Jatka sivustolle %{site_name} @@ -1214,9 +1212,10 @@ fi: description: "Luettelo lippujen statuksista sisältäen lippujen tyypit, kirjoittajat, liputtajat ja selvitysajat." visits: title: "Käyttäjien vierailut" - xaxis: "Päivä" + xaxis: + desktop: "Työpöytä" + mobile: "Mobiili" yaxis: "Vierailujen määrä" - description: "Kirjautuneiden käyttäjien vierailujen määrä." signups: title: "Rekisteröitymiset" xaxis: "Päivä" @@ -1278,10 +1277,8 @@ fi: description: "Kirjautuneiden käyttäjien, anonyymien käyttäjien, tunnettujen hakurobottien ja muun liikenteen sivunkatselut." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "PAK/KAK" xaxis: "Päivä" yaxis: "PAK/KAK" - description: "Käyttäjät, jotka kirjautuivat sisään viimeisen päivän aikana, jaettuna käyttäjillä, jotka kirjautuivat sisään viimeisen kuukauden aikana – tuottaa prosenttiarvon, joka ilmaisee yhteisön sitoutuneisuutta. Tähtää yli 20 prosenttiin." daily_engaged_users: title: "Sitoutuneet päivittäiskäyttäjät" xaxis: "Päivä" @@ -1774,7 +1771,6 @@ fi: slow_down_crawler_rate: "Jos slow_down_crawler_user_agents on määritelty, tämä nopeusrajoitus koskee kaikkia hakurobotteja (kuinka monta sekuntia pitää kulua pyyntöjen välillä)" content_security_policy: "Ota Content-Security-Policy (CSP) käyttöön. CSP on ylimääräinen suojaustaso, joka auttaa estämään tietyntyyppiset hyökkäykset, kuten Cross Site Scriptingin (XSS) ja tietojen lisäyksen." content_security_policy_report_only: "Käytä epäilyttävän sisällön raportointia (Content-Security-Policy-Report-Only)" - content_security_policy_collect_reports: "Ota käyttöön CSP-seulontojen kerääminen lokiin kohteessa /csp_reports" content_security_policy_frame_ancestors: "Rajoita sitä, ketkä voivat upottaa tämän sivuston iframe-kehyksiin CSP:n kautta. Hallitse sallittuja isäntiä Upottaminen-sivulla" content_security_policy_script_src: "Muut sallitut skriptilähteet. Nykyinen palvelin ja CDN sallitaan oletuksena. Katso Mitigate XSS Attacks with Content Security Policy. (CSP) Muut isäntälähteet ohitetaan, koska strict-dynamic on käytössä." invalidate_inactive_admin_email_after_days: "Ylläpitäjätilit, jotka eivät ole vierailleet sivustolla näin moneen päivään, joutuvat vahvistamaan sähköpostiosoitteensa uudelleen ennen sisäänkirjautumista. Aseta 0 poistaaksesi käytöstä." @@ -2091,7 +2087,6 @@ fi: alternative_reply_by_email_addresses: "Lista vaihtoehtoisista saapuvien sähköpostivastausten sähköpostiosoitekaavoista, esimerkiksi: %%{reply_key}@reply.esimerkki.fi tai replies+%%{reply_key}@esimerkki.fi" incoming_email_prefer_html: "Käytä HTML:ää tekstin sijaan saapuvissa sähköposteissa." strip_incoming_email_lines: "Poista saapuvien sähköpostien jokaisen rivin alusta ja lopusta tyhjät merkit." - disable_emails: "Estä Discoursea lähettämästä minkäänlaisia sähköposteja. Ota pois sähköpostit kaikilta käyttäjiltä valitsemalla \"yes\" . \"Non-staff\" poistaa sähköpostit vain muilta kuin henkilökunnalta." strip_images_from_short_emails: "Poista kuvat sähköposteista, joiden koko on alle 2 800 tavua" short_email_length: "Määritä enimmäispituus tavuina lyhyeksi luokitellulle sähköpostille kuvien rajoittamista varten. Jos sähköpostin koko ei ylitä tätä asetusta, kaikki sähköpostissa olevat kuvat (kuten avatarit ja emojit) poistetaan." display_name_on_email_from: "Näytä sähköpostien lähettäjinä käyttäjien koko nimet" @@ -2180,7 +2175,6 @@ fi: group_in_subject: "Aseta %%{optional_pm} sähköpostin aiheessa ensimmäisen ryhmän nimeksi yksityisviestissä, katso: Customize subject format for standard emails" allow_anonymous_mode: "Ota käyttöön valinta, jolla käyttäjät voivat vaihtaa anonyymiin tilaan viestin julkaisua varten. Kun tämä aktivoidaan, käyttäjät voivat halutessaan piilottaa henkilöllisyytensä luodessaan viestejä tai ketjuja sivustolla. Katso myös \"allow anonymous likes\"." anonymous_account_duration_minutes: "Suojellaksesi anonymiteettiä, luo käyttäjälle uusi anonyymi tili N minuutin välein. Esimerkki: jos arvoksi asetetaan 600, kun 600 minuuttia tulee kuluneeksi edellisestä viestistä JA käyttäjä vaihtaa anonyymiin tilaan, luodaan uusi anonyymi tili." - hide_user_profiles_from_public: "Älä näytä käyttäjäkortteja, käyttäjäprofiileita tai käyttäjähakemistoa anonyymeille käyttäjille." hide_new_user_profiles: "Piilota luottamustason 1 tai alempien tasojen käyttäjäprofiilit yleisöltä ja luottamustason 1 käyttäjiltä, kunnes he lähettävät ensimmäisen viestinsä. Tämä ominaisuus on poistettu käytöstä ehdoitta must_approve_users- ja invite_only-sivustoilla." allow_users_to_hide_profile: "Salli käyttäjien piilottaa profiilinsa ja läsnäolonsa" hide_user_activity_tab: "Piilota toimintavälilehti käyttäjäprofiileista, paitsi ylläpitäjältä ja itseltä." @@ -2370,7 +2364,6 @@ fi: dashboard_hidden_reports: "Salli tiettyjen raporttien piilottaminen hallintapaneelista." dashboard_visible_tabs: "Valitse mitkä hallintapaneelin välilehdet ovat näkyvillä." dashboard_general_tab_activity_metrics: "Valitse raportit, jotka näytetään aktiivisuusmittareina Yleistä-välilehdellä." - gravatar_enabled: "Käytä Gravatar-palvelua käyttäjien avatareille. Tämä estää käyttäjiä vaihtamasta Gravatariin avatareillaan, mutta ei vaikuta käyttäjiin, jotka jo käyttävät sitä." gravatar_name: "Määritä Gravatar-palveluntarjoajan nimi. Tätä nimeä käytetään yleensä Gravatar-avatareita sivustolle tarjoavan lähteen tunnistamiseen." gravatar_base_url: "Määritä Gravatar-palveluntarjoajan APIn URL-osoite. Tämä asetus on ehdottoman tärkeä muunnettaessa sähköpostiosoitteita Gravatarin URL-osoitteiksi, joihin avatar-kuvat on tallennettu." gravatar_login_url: "URL suhteessa gravatar_base_url-osoitteeseen, jolla käyttäjä kirjautuu Gravatar-palveluun." @@ -2451,12 +2444,6 @@ fi: reply_by_email_disabled: "Vastaus sähköpostilla täytyy ottaa käyttöön ennen tämän asetuksen käyttöönottoa." discourse_connect_url_is_empty: "Sinun täytyy määrittää \"discourse connect url'\" ennen kuin otat tämän asetuksen käyttöön." enable_local_logins_disabled: "Paikalliset kirjautumiset täytyy ottaa käyttöön ennen tämän asetuksen käyttöönottoa." - min_username_length_exists: "Käyttäjätunnuksen vähimmäispituus ei voi olla suurempi kuin lyhin käyttäjätunnus (%{username})." - min_group_name_length_exists: "Käyttäjätunnuksen vähimmäispituutta ei voi asettaa lyhintä ryhmän nimeä (%{group_name}) pidemmäksi." - min_username_length_range: "Vähimmäisarvo ei voi olla suurempi kuin enimmäisarvo." - max_username_length_exists: "Käyttäjätunnuksen enimmäispituus ei voi olla suurempi kuin pisin käyttäjätunnus (%{username})." - max_group_name_length_exists: "Käyttäjätunnuksen enimmäispituutta ei voi asettaa pisintä ryhmän nimeä (%{group_name}) lyhyemmäksi." - max_username_length_range: "Enimmäisarvo ei voi olla pienempi kuin vähimmäisarvo." invalid_hex_value: "Väriarvon täytyy olla kuusinumeroinen heksadesimaalikoodi." empty_selectable_avatars: "Sinun täytyy ladata ensin vähintään kaksi valittavaa avataria ennen kuin otat tämän asetuksen käyttöön." category_search_priority: @@ -2515,7 +2502,6 @@ fi: exclude_tag: "Jätä pois ketjut tietyllä tunnisteella" exclude_tags_any: "Jätä pois ketjut millä tahansa määritetyillä tunnisteilla (pilkuilla erotettuna)" exclude_tags_all: "Jätä pois ketjut kaikilla määritetyillä tunnisteilla (plus-merkillä erotettuna)" - tags_alias: "Alias \"tag:\"-suodattimelle" tag_group: "Näytä ketjut, joilla on tietyn tunnisteiryhmän tunnisteita" exclude_tag_group: "Jätä pois ketjut, joilla on tietyn tunnisteiryhmän tunnisteita" activity_before: "Näytä ketjut, joissa viimeisin toiminta on ennen tiettyä päivämäärää (VVVV-KK-PP tai päivää sitten)" @@ -2929,35 +2915,9 @@ fi: new_version_mailer: title: "Uusi versio" subject_template: "[%{email_prefix}] Uusi Discourse-versio, päivitys saatavilla" - text_body_template: | - Hurraa, uusi [Discourse-versio](https://www.discourse.org) on saatavilla! - - Sinun versiosi: %{installed_version} - Uusi versio: **%{new_version}** - - – Päivitä käyttäen helppoa **[yhden klikkauksen päivitystä selaimessa](%{base_url}/admin/update)** - - – Katso, mikä on uutta [julkaisutiedoista](https://meta.discourse.org/tag/release-notes) tai tutki [raakaa GitHubin muutoslokia](https://github.com/discourse/discourse/commits/main) - - – Käy osoitteessa [meta.discourse.org](https://meta.discourse.org) lukemassa uutisia ja keskustelua tai hae apua Discourseen liittyen new_version_mailer_with_notes: title: "Uusi versio julkaisumuistiolla" subject_template: "[%{email_prefix}] päivitys saatavilla" - text_body_template: | - Hurraa, uusi [Discourse-versio](https://www.discourse.org) on saatavilla! - - Sinun versiosi: %{installed_version} - Uusi versio: **%{new_version}** - - – Päivitä käyttäen helppoa **[yhden klikkauksen päivitystä selaimessa](%{base_url}/admin/update)** - - – Katso, mikä on uutta [julkaisutiedoista](https://meta.discourse.org/tag/release-notes) tai tutki [raakaa GitHubin muutoslokia](https://github.com/discourse/discourse/commits/main) - - – Käy osoitteessa [meta.discourse.org](https://meta.discourse.org) lukemassa uutisia ja keskustelua tai hae apua Discourseen liittyen - - ### Julkaisutiedot - - %{notes} flag_reasons: off_topic: "Viestisi merkittiin **eksyvän aiheesta**: koetaan, ettei se ei kuulu ketjun aiheeseen, jonka määrittelevät sen aloitusviesti ja otsikko." inappropriate: "Viestisi liputettiin **sopimattomaksi**: se koetaan loukkaavaksi, herjaavaksi, vihamieliseksi toiminnaksi tai [yhteisön sääntöjen](%{base_path}/guidelines) vastaiseksi." @@ -3006,47 +2966,9 @@ fi: reviewable_queued_post_revise_and_reject: title: "Palaute viestistäsi" subject_template: "Palaute viestiisi ketjussa %{topic_title}" - text_body_template: | - Hei %{username}, - - Olemme tarkastaneet viestisi ketjussa [%{topic_title}](%{topic_url}) ja meillä on siihen liittyvää palautetta. - - Syy: %{reason} - - Palaute: %{feedback} - - Voit muokata alkuperäistä viestiäsi alla ja lähettää sen uudelleen ehdotetuilla muutoksilla tai vastata tähän viestiin, jos sinulla on kysyttävää. - - -------- - - %{original_post} - - -------- - - Terveisin, - %{site_name} Ylläpito reviewable_queued_post_revise_and_reject_new_topic: title: "Palaute ketjustasi" subject_template: 'Palaute uudesta ketjusta "%{topic_title}"' - text_body_template: | - Hei %{username}, - - Olemme tarkastaneet uuden ketjusi "%{topic_title}" ja meillä on siihen liittyvää palautetta. - - Syy: %{reason} - - Palaute: %{feedback} - - Voit muokata ketjusi alkuperäistä viestiäsi alla ja lähettää sen uudelleen ehdotetuilla muutoksilla tai vastata tähän viestiin, jos sinulla on kysyttävää. - - -------- - - %{original_post} - - -------- - - Terveisin, - %{site_name} Ylläpito post_hidden_again: title: "Viesti piilotettiin jälleen" subject_template: "Yhteisön merkinnät piilottivat viestin, henkilökunnalle ilmoitettiin" @@ -4808,8 +4730,6 @@ fi: deprecation_error_label: Aseta Javascriptin vanhentumiset aiheuttamaan virhe enter: "Siirry vikasietotilaan" must_select: "Ainakin yksi on valittava, jotta voi siirtyä vikasietotilaan." - dev_mode: - enter: "Enter" wizard: title: "Discoursen asennus" step: @@ -5067,8 +4987,6 @@ fi: approve_and_unhide: title: "Kyllä" complete: "Viesti hyväksytty ja näkyvissä" - no_action_post: - title: "Ei toimintaa" delete_post: title: "Poista viesti" complete: "Viesti poistettu" @@ -5077,8 +4995,6 @@ fi: restore_post: title: "Palauta viesti" complete: "Viesti palautettu" - no_action_user: - title: "Ei toimintaa" silence_user: title: "Hiljennä käyttäjä" complete: "Käyttäjä hiljennetty" diff --git a/config/locales/server.fr.yml b/config/locales/server.fr.yml index 53804eb635bfe..e8efbc89333d0 100644 --- a/config/locales/server.fr.yml +++ b/config/locales/server.fr.yml @@ -60,8 +60,6 @@ fr: inline_oneboxer: topic_page_title_post_number: "numéro %{post_number}" topic_page_title_post_number_by_user: "#%{post_number} par %{username}" - too_many_urls: "Impossible d'intégrer plus de 10 URL dans une seule requête." - concurrency_not_allowed: "Les demandes simultanées de « inline-oneboxing » ne sont pas autorisées. Veuillez envoyer une demande à la fois." components: enabled_filter: "Activé" disabled_filter: "Désactivé" @@ -344,7 +342,6 @@ fr: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Les agents utilisateurs doivent comporter au moins 3 caractères pour éviter de limiter accidentellement le débit des utilisateurs légitimes." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Vous ne pouvez ajouter aucune des valeurs suivantes au paramètre : %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Vous ne pouvez pas désactiver la suppression des métadonnées d'image si l'option « Optimisation des images dans l'éditeur » est activée. Désactivez « Optimisation des images dans l'éditeur » avant de désactiver la suppression des métadonnées d'image." - x_summary_large_image_no_svg: "Les images de résumé X utilisées pour les métadonnées twitter:image ne peuvent pas être des images .svg." tl0_and_anonymous_flag: "Pour les utilisateurs anonymes, une « site contact email » ou une « email address to report illegal content » doit être fournie." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Ce paramètre nécessite que le paramètre « Autoriser le mode anonyme » soit activé au préalable." conflicting_google_user_id: 'Le Google Account ID a changé pour ce compte ; un responsable doit intervenir pour des raisons de sécurité. Merci de contacter les responsables et les renvoyer vers
https://meta.discourse.org/t/76575' @@ -1136,6 +1133,7 @@ fr: read: "lecture" read_write: "lecture/écriture" instructions: 'Nous venons de générer une nouvelle clé d''API utilisateur à utiliser avec « %{application_name} ». Veuillez coller cette clé dans votre application :' + copied: "Copié !" otp_description: 'Voulez-vous autoriser « %{application_name} » à accéder à ce site ?' otp_confirmation: confirm_title: Continuer vers %{site_name} @@ -1214,9 +1212,10 @@ fr: description: "Liste des statuts de signalement : type de signalement, auteur, signaleur et temps de résolution." visits: title: "Visites d'utilisateurs" - xaxis: "Jour" + xaxis: + desktop: "Bureau" + mobile: "Mobile" yaxis: "Nombre de visites" - description: "Nombre de visites d'utilisateurs connectés." signups: title: "Inscriptions" xaxis: "Jour" @@ -1278,10 +1277,8 @@ fr: description: "Pages vues par les utilisateurs connectés, les utilisateurs anonymes, les robots d'indexation connus et les autres trafics." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" xaxis: "Jour" yaxis: "DAU/MAU" - description: "Nombre d'utilisateurs qui se sont connectés au cours de la dernière journée, divisé par le nombre d'utilisateurs qui se sont connectés au cours du dernier mois. Valeur exprimée en % qui représente le taux d'adhésion de la communauté. Viser > 20 %." daily_engaged_users: title: "Utilisateurs impliqués au quotidien" xaxis: "Jour" @@ -1774,7 +1771,6 @@ fr: slow_down_crawler_rate: "Si slow_down_crawler_user_agents est défini, ce taux s'appliquera à tous les robots d'indexation (nombre de secondes d'attente entre requêtes)" content_security_policy: "Activez la politique de sécurité du contenu (CSP). La CSP est une couche de sécurité supplémentaire qui permet de prévenir certains types d'attaques, notamment le Cross Site Scripting (XSS) et l'injection de données." content_security_policy_report_only: "Activer Content-Security-Policy-Report-Only (CSP)" - content_security_policy_collect_reports: "Activer la collecte des rapports de violation CSP sur la page /csp_reports" content_security_policy_frame_ancestors: "Limiter les parties autorisées à intégrer ce site dans une iframe par le biais de l'attribut « csp ». Appliquer les restrictions d'hôtes définies dans la page Intégration externe." content_security_policy_script_src: "Sources de script supplémentaires autorisées. L'hôte actuel et le CDN sont inclus par défaut. Voir Empêcher les attaques XSS grâce à la politique de sécurité du contenu (CSP). Les autres sources hôtes sont ignorées car la dynamique stricte est activée." invalidate_inactive_admin_email_after_days: "Les comptes administrateurs qui n'ont pas visité le site depuis ce nombre de jours devront revalider leur adresse e-mail avant de se connecter. Mettre à 0 pour désactiver." @@ -2091,7 +2087,6 @@ fr: alternative_reply_by_email_addresses: "Liste des modèles alternatifs pour les adresses des e-mails entrants de la réponse par e-mail. Exemple : %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "Utilisez du HTML plutôt que du texte pour les e-mails entrants." strip_incoming_email_lines: "Supprimer les espaces en début et fin de chaque ligne d'e-mail entrants." - disable_emails: "Empêcher Discourse d'envoyer tout type d'e-mails. Sélectionnez « oui » pour désactiver les e-mails pour tous les utilisateurs. Sélectionnez « non responsables » pour désactiver les e-mails uniquement pour les utilisateurs qui ne sont pas des responsables." strip_images_from_short_emails: "Retirer les images des e-mails dont la taille est inférieure à 2 800 octets" short_email_length: "Définissez la longueur maximale, en octets, pour qu'un e-mail soit classé comme « court » pour la suppression de l'image. Si la taille d'un e-mail ne dépasse pas ce paramètre, toutes les images (telles que les avatars et les émojis) contenues dans l'e-mail seront supprimées." display_name_on_email_from: "Afficher les noms complets dans le champ « De » des e-mails" @@ -2109,6 +2104,7 @@ fr: mailgun_api_key: "Clé d'API secrète de Mailgun utilisée pour vérifier les messages du webhook." sendgrid_verification_key: "Clé de vérification Sendgrid utilisée pour vérifier les messages du webhook." mailjet_webhook_token: "Jeton utilisé pour vérifier la charge utile du webhook. Il doit être transmis en tant que paramètre de requête « t » du webhook, par exemple : https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Jeton utilisé pour vérifier la charge utile du webhook. Il doit être transmis en tant que paramètre de requête « t » du webhook, par exemple : https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Clé d'authentification Mandrill utilisée pour vérifier les messages du webhook." postmark_webhook_token: "Jeton utilisé pour vérifier la charge utile du webhook. Il doit être transmis en tant que paramètre de requête « t » du webhook, par exemple : https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Jeton utilisé pour vérifier la charge utile du webhook. Il doit être transmis en tant que paramètre de requête « t » du webhook, par exemple : https://example.com/webhook/sparkpost?t=supersecret" @@ -2180,7 +2176,6 @@ fr: group_in_subject: "Mettre %%{optional_pm} dans le sujet de l'e-mail au nom du premier groupe du message direct. Voir : personnaliser le format du sujet des e-mails ordinaires" allow_anonymous_mode: "Activez l'option permettant aux utilisateurs de passer en mode anonyme pour publier. Lorsque cette option est activée, les utilisateurs peuvent choisir de masquer leur identité lors de la création de publications ou de sujets sur le site. Voir aussi « allow_anonymous_likes »." anonymous_account_duration_minutes: "Pour protéger l'anonymat, créer un nouveau compte anonyme toutes les N minutes pour chaque utilisateur. Exemple : si la valeur 600 est choisie, lorsque 600 minutes seront passées après le dernier message ET que l'utilisateur passera en mode anonyme, un nouveau compte anonyme lui sera créé." - hide_user_profiles_from_public: "Désactiver les cartes, les profils et le répertoire d'utilisateurs pour les visiteurs." hide_new_user_profiles: "Masquez les profils d'utilisateurs de niveau de confiance 1 ou inférieur au public et les utilisateurs de niveau de confiance 1 jusqu'à ce qu'ils envoient une publication pour la première fois. Cette fonctionnalité est désactivée sans condition sur les sites must_approve_users et invite_only." allow_users_to_hide_profile: "Autoriser les utilisateurs à masquer leur profil et leur présence" hide_user_activity_tab: "Masquez l'onglet d'activité sur les profils d'utilisateur, à l'exception d'Admin et de Self." @@ -2371,7 +2366,6 @@ fr: dashboard_hidden_reports: "Permettre de masquer les rapports du tableau de bord." dashboard_visible_tabs: "Choisissez les onglets visibles sur le tableau de bord." dashboard_general_tab_activity_metrics: "Sélectionnez les rapports à afficher comme indicateurs d'activité dans l'onglet général." - gravatar_enabled: "Utilisez le service Gravatar pour les avatars des utilisateurs. Cela empêchera les utilisateurs de passer à Gravatar pour leurs avatars, mais cela n'affectera pas les utilisateurs qui l'utilisent déjà." gravatar_name: "Spécifiez le nom du fournisseur de services Gravatar. Ce nom est généralement utilisé pour identifier la source fournissant des avatars Gravatar au site." gravatar_base_url: "Spécifiez l'URL d'accès à l'API du fournisseur Gravatar. Ce paramètre est essentiel pour convertir les adresses e-mail en URL Gravatar dans lesquelles les images d'avatar sont stockées." gravatar_login_url: "URL relative à gravatar_base_url, qui fournit à l'utilisateur la connexion au service Gravatar." @@ -2452,12 +2446,6 @@ fr: reply_by_email_disabled: "Vous devez d'abord activer « reply by email » avant d'activer ce paramètre." discourse_connect_url_is_empty: "Avant d'activer ce paramètre, vous devez d'abord définir le paramètre « discourse connect url »." enable_local_logins_disabled: "Vous devez d'abord activer « enable local logins » avant d'activer ce paramètre." - min_username_length_exists: "Il n'est pas possible de définir une longueur minimale de nom d'utilisateur qui soit plus longue qu'un nom d'utilisateur qui existe déjà (%{username})." - min_group_name_length_exists: "Vous ne pouvez pas définir une longueur minimale de nom d'utilisateur supérieure au nom de groupe le plus court (%{group_name})." - min_username_length_range: "Il n'est pas possible de définir un minimum plus grand qu'un maximum." - max_username_length_exists: "Il n'est pas possible de définir une longueur maximale de nom d'utilisateur qui soit plus courte qu'un nom d'utilisateur qui existe déjà (%{username})." - max_group_name_length_exists: "Vous ne pouvez pas définir une longueur maximale de nom d'utilisateur inférieure au nom de groupe le plus long (%{group_name})." - max_username_length_range: "Il n'est pas possible de définir un maximum plus petit que le minimum." invalid_hex_value: "Les valeurs de couleurs doivent être au format hexadécimal à 6 chiffres." empty_selectable_avatars: "Vous devez d'abord envoyer au moins deux avatars sélectionnables avant d'activer ce paramètre." category_search_priority: @@ -2516,7 +2504,6 @@ fr: exclude_tag: "Exclure les sujets avec une étiquette spécifique" exclude_tags_any: "Exclure les sujets avec l'une des étiquettes spécifiées (séparés par des virgules)" exclude_tags_all: "Exclure les sujets comportant toutes les étiquettes spécifiées (séparées par des plus)" - tags_alias: "Alias pour le filtre « tag : »" tag_group: "Afficher les sujets dont les étiquettes appartiennent à un groupe de balises spécifique" exclude_tag_group: "Exclure les sujets comportant des balises d'un groupe de balises spécifique" activity_before: "Afficher les sujets dont la dernière activité est antérieure à une date (YYYY-MM-DD ou il y a quelques jours)" @@ -2940,35 +2927,9 @@ fr: new_version_mailer: title: "Nouvelle version" subject_template: "[%{email_prefix}] Nouvelle version de Discourse, mise à jour disponible" - text_body_template: | - Hourra ! Une nouvelle version de [Discourse](https://www.discourse.org) est disponible ! - - Votre version : %{installed_version} - Nouvelle version : **%{new_version}** - - - Effectuez facilement la mise à jour depuis votre navigateur en utilisant la **[mise à jour en 1 clic](%{base_url}/admin/update)** - - - Découvrez les nouveautés en consultant les [notes de version](https://meta.discourse.org/tag/release-notes) ou l'[historique GitHub](https://github.com/discourse/discourse/commits/main) - - - Rendez vous sur [meta.discourse.org](https://meta.discourse.org) pour consulter des actualités, des discussions et obtenir de l'aide concernant Discourse new_version_mailer_with_notes: title: "Nouvelle version avec notes de modifications" subject_template: "[%{email_prefix}] Mise à jour disponible" - text_body_template: | - Hourra ! Une nouvelle version de [Discourse](https://www.discourse.org) est disponible ! - - Votre version : %{installed_version} - Nouvelle version : **%{new_version}** - - - Effectuez facilement la mise à jour depuis votre navigateur en utilisant la **[mise à jour en 1 clic](%{base_url}/admin/update)** - - - Découvrez les nouveautés en consultant les [notes de version](https://meta.discourse.org/tag/release-notes) ou l'[historique GitHub](https://github.com/discourse/discourse/commits/main) - - - Rendez vous sur [meta.discourse.org](https://meta.discourse.org) pour consulter des actualités, des discussions et obtenir de l'aide concernant Discourse - - ### Notes de version - - %{notes} flag_reasons: off_topic: "Votre message a été signalé comme étant **hors sujet** : la communauté considère qu'il ne correspond pas au sujet en question qui est défini par son titre et son premier message." inappropriate: "Votre message a été signalé comme étant **inapproprié** : la communauté estime qu'il est offensant, abusif, qu'il s'agit d'un comportement haineux ou qu'il enfreint les [lignes directrices de notre communauté](%{base_path}/guidelines)." @@ -3017,47 +2978,9 @@ fr: reviewable_queued_post_revise_and_reject: title: "Commentaires sur votre message" subject_template: "Commentaires sur votre message dans %{topic_title}" - text_body_template: | - Bonjour %{username}, - - Nous avons examiné votre message dans [%{topic_title}] (%{topic_url}) et avons quelques commentaires à vous faire. - - Motif : %{reason} - - Commentaire : %{feedback} - - Vous pouvez modifier votre message d'origine ci-dessous et le soumettre à nouveau pour apporter les modifications suggérées, ou répondre à ce message si vous avez des questions. - - -------- - - %{original_post} - - -------- - - Merci, - Modérateurs %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "Commentaires sur votre sujet" subject_template: 'Commentaires sur le nouveau sujet intitulé « %{topic_title} »' - text_body_template: | - Bonjour %{username}, - - Nous avons examiné votre nouveau sujet intitulé « %{topic_title} » et avons quelques commentaires à vous faire. - - Motif : %{reason} - - Commentaires : %{feedback} - - Vous pouvez modifier le message original de votre sujet ci-dessous et le soumettre à nouveau pour apporter les modifications suggérées, ou répondre à ce message si vous avez des questions. - - -------- - - %{original_post} - - -------- - - Merci, - Modérateurs %{site_name} post_hidden_again: title: "Message masqué à nouveau" subject_template: "Message masqué suite à des signalements de la communauté, responsables avertis" @@ -4912,8 +4835,6 @@ fr: deprecation_error_label: Faire en sorte que les dépréciations de Javascript génèrent une erreur enter: "Activer le mode sans échec" must_select: "Vous devez sélectionner au moins une option pour activer le mode sans échec." - dev_mode: - enter: "Entrée" wizard: title: "Configuration de Discourse" step: @@ -5171,8 +5092,6 @@ fr: approve_and_unhide: title: "Oui" complete: "Publication approuvée et visible" - no_action_post: - title: "Aucune action" delete_post: title: "Supprimer la publication" complete: "Publication supprimée" @@ -5181,8 +5100,6 @@ fr: restore_post: title: "Rétablir le message" complete: "Publication restaurée" - no_action_user: - title: "Aucune action" silence_user: title: "Désactiver l'utilisateur" complete: "Utilisateur mis en sourdine" diff --git a/config/locales/server.gl.yml b/config/locales/server.gl.yml index ace86820691d4..c678ba5d3eeb3 100644 --- a/config/locales/server.gl.yml +++ b/config/locales/server.gl.yml @@ -804,6 +804,7 @@ gl: read: "lectura" read_write: "lectura/escritura" instructions: 'Acabamos de xerar unha nova chave API de usuario para que utilice con "%{application_name}"; pegue a seguinte chave na súa aplicación:' + copied: "Copiado!" otp_description: 'Gustaríalle darlle permiso a "%{application_name}" para acceder a este sitio?' otp_confirmation: confirm_title: Continuar a %{site_name} @@ -877,7 +878,9 @@ gl: description: "Listaxe do estado das alertas que inclúe o tipo de alerta, o usuario denunciado, o denunciante e o tempo de resolución." visits: title: "Visitas de usuarios" - xaxis: "Día" + xaxis: + desktop: "Escritorio" + mobile: "Móbil" yaxis: "Número de visitas" signups: title: "Rexistros" @@ -922,10 +925,8 @@ gl: yaxis: "Día" description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "UAD/UAM" xaxis: "Día" yaxis: "UAD/UAM" - description: "Número de membros que iniciaron sesión no último día entre o número de membros que iniciaron sesión no último mes - devolve a porcentaxe que indica o grao de permanencia da comunidade. Obxectivo: >20%." daily_engaged_users: title: "Usuarios comprometidos a diario" xaxis: "Día" @@ -1316,7 +1317,6 @@ gl: allowed_crawler_user_agents: "Axentes de usuario de rastreadores web aos que se lles debería permitir o acceso ao sitio. AVISO! AO CONFIGURAR ISTO, VETARÁ TODOS OS RASTREXADORES NON LISTADOS AQUÍ!" blocked_crawler_user_agents: "Palabra única insensíbel a maiúsculas e minúsculas na cadea de axente de usuario que identifica rastrexadores web que non deberían ter permitido o acceso ao sitio. Non se lle aplica se está definida a listaxe de permitidos." slow_down_crawler_rate: "Se slow_down_crawler_user_agents está especificado, este valor aplicarase a todos os rastrexadores (número de segundos de demora entre respostas)" - content_security_policy_collect_reports: "Activar a recolección de informes de violación de CSP en /csp_reports" content_security_policy_frame_ancestors: "Restrinxir quen pode incorporar este sitio en iframes mediante CSP. O control de servidores permitidos en Incorporación" invalidate_inactive_admin_email_after_days: "As contas administrativas que non visiten o sitio neste número de días terán que volver validar o seu enderezo electrónico antes de iniciar sesión. Estabelecer en 0 para desactivalo." share_links: "Determinar que elementos aparecen no cadro de compartir e en que orde." @@ -1529,7 +1529,6 @@ gl: alternative_reply_by_email_addresses: "Lista de modelos alternativos para responder a enderezos de correo electrónico entrantes. Exemplo: %%{reply_key}@reply.example.com|respostas+%%{reply_key}@example.com" incoming_email_prefer_html: "Utilizar HTML no canto de texto para o correo entrante." strip_incoming_email_lines: "Retirar os espazos en branco iniciais e finais de cada liña de correos electrónicos entrantes." - disable_emails: "Evita que Discourse envíe calquera clase de correo electrónico. Seleccione «si» para desactivar os correos electrónicos a todos os usuarios. Seleccione «non do equipo» para desactivar os correos electrónicos só para usuarios que non sexan do equipo." strip_images_from_short_emails: "Elimina as imaxes de correos electrónicos que teñan un tamaño inferior a 2800 bytes" display_name_on_email_from: "Amosar nomes completos nos campos de remitente do correo" unsubscribe_via_email: "Permitir aos usuarios darse de baixa dos correos electrónicos ao responder co texto «cancelar subscrición» no asunto ou no corpo da mensaxe" @@ -1597,7 +1596,6 @@ gl: enable_category_group_moderation: "Permitirlles aos grupos moderar contido en categorías específicas" group_in_subject: "Estabelece %%{optional_pm} no asunto do correo electrónico co nome do primeiro grupo en MP, véxase: Personaliza o formato do asunto para correos estándar" anonymous_account_duration_minutes: "Para protexer o anonimato, crear unha nova conta anónima cada N minutos para cada usuario. Exemplo: se se estabelece en 600, así que pasen 600 minutos desde a última publicación E o usuario cambie a anónimo, crearase unha nova conta anónima." - hide_user_profiles_from_public: "Desactivar tarxetas de usuario, perfís de usuario e directorio de usuarios para usuarios anónimos." allow_users_to_hide_profile: "Permitirlles aos usuarios agochar o seu perfil e presenza" allow_featured_topic_on_user_profiles: "Permitir aos usuarios salientar unha ligazón a un tema da súa tarxeta de usuario e perfil." show_inactive_accounts: "Permitir aos usuarios coa sesión iniciada ver os perfís de contas inactivas." @@ -1734,10 +1732,6 @@ gl: reply_by_email_disabled: "Primeiro debe activar «responder vía correo electrónico» antes de activar esta opción." discourse_connect_url_is_empty: "Debe estabelecer un «URL de discourse connect» antes de activar este axuste." enable_local_logins_disabled: "Debe activar primeiro «activar inicios de sesión locais» antes de activar esta opción." - min_username_length_exists: "Non pode estabelecer que a largura mínima do nome de usuario sexa maior có nome de usuario máis curto (%{username})." - min_username_length_range: "O mínimo non pode ser maior que o máximo." - max_username_length_exists: "Non pode estabelecer que a largura máxima do nome de usuario sexa menor que o nome de usuario máis longo (%{username})." - max_username_length_range: "Non pode estabelecer o máximo por debaixo do mínimo." invalid_hex_value: "Os valores das cores deben ser códigos de 6 díxitos hexadecimais." empty_selectable_avatars: "Debe subir polo menos dous avatares seleccionables antes de activar esta opción." category_search_priority: @@ -3399,8 +3393,6 @@ gl: title: "Entrar en modo seguro" enter: "Entrar en modo seguro" must_select: "Debe seleccionar polo menos unha opción para entrar no modo seguro." - dev_mode: - enter: "Intro" wizard: title: "Configuración de Discourse" step: @@ -3523,12 +3515,8 @@ gl: title: "Si" approve_and_unhide: title: "Si" - no_action_post: - title: "Sen acción" delete_post: complete: "Publicación eliminada" - no_action_user: - title: "Sen acción" delete_user: complete: "Usuario eliminado" reason: "Eliminado a través da cola de revisións" diff --git a/config/locales/server.he.yml b/config/locales/server.he.yml index 210e312fa0a09..17a31910d2a07 100644 --- a/config/locales/server.he.yml +++ b/config/locales/server.he.yml @@ -60,8 +60,6 @@ he: inline_oneboxer: topic_page_title_post_number: "מס׳ %{post_number}" topic_page_title_post_number_by_user: "מס׳ %{post_number} מאת %{username}" - too_many_urls: "אי אפשר להכניס יותר מ־10 קישורים לתיבה תוחמת בבקשה אחת." - concurrency_not_allowed: "אי אפשר לשלוח בקשות להטמעת תיבות תוחמות במקביל. נא לשלוח בקשה אחת כל פעם." components: enabled_filter: "פעיל" disabled_filter: "כבוי" @@ -398,7 +396,6 @@ he: slow_down_crawler_user_agent_must_be_at_least_3_characters: "סוכני משתמש חייבים להיות באורך של 3 תווים לפחות כדי למנוע הגבלה בשוגג של כמות פניות ממשתמשים תקפים." slow_down_crawler_user_agent_cannot_be_popular_browsers: "אי אפשר להוסיף אף אחת מהערכים הבאים להגדרה: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "אי אפשר להשבית הפשטת נתוני על מתמונה אם האפשרות ‚תמונת מיטוב מדיה בכתיבת הודעה פעילה’ פעילה. יש להשבית את האפשרות בטרם השבתת הפשטת נתוני על מתמונה." - x_summary_large_image_no_svg: "תמונות התקציר של טוויטר שמשמשות לנתוני העל של twitter:image לא יכולות להיות תמונת ‎.svg" tl0_and_anonymous_flag: "יש לספק ‚דוא״ל קשר עם האתר’ או ‚כתובת דוא״ל לדיווח על תוכן לא חוקי’ למשתמשים אלמוניים." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "ההגדרה הזאת דורשת את הפעלת ההגדרה ‚לאפשר מצב אלמוני’ תחילה." conflicting_google_user_id: 'מזהה חשבון ה־Google לחשבון זה השתנה, התערבות של חבר סגל נדרשת מטעמי אבטחה. נא ליצור קשר עם אחד מחברי הסגל ולהפנות אותו אל
https://meta.discourse.org/t/76575' @@ -1291,6 +1288,7 @@ he: permissions_header: 'ההרשאה הזאת תאפשר ל־„%{application_name}” לבצע:' redirect_warning: "האימות יפנה אותך אל" instructions: 'הרגע יצרנו מפתח משתמש API חדש עבורך לטובת שימוש עם „%{application_name}”, נא להדביק את המפתח הבא ליישום שלך:' + copied: "הועתק!" otp_description: 'לאפשר ל־„%{application_name}” לגשת לאתר הזה?' otp_confirmation: confirm_title: להמשיך אל %{site_name} @@ -1369,9 +1367,10 @@ he: description: "רשימת מצבי גבלים לרבות סוג הדגל, מפרסם, מסמן בדגל וזמן הפתרון." visits: title: "ביקורי משתמש" - xaxis: "יום" + xaxis: + desktop: "מחשב-שולחני" + mobile: "נייד" yaxis: "מספר ביקורים" - description: "מספר המשתמשים המבקרים שנכנסו למערכת." signups: title: "הרשמות" xaxis: "יום" @@ -1435,10 +1434,8 @@ he: description: "תצוגות דף עבור משתמשים מחוברים, משתמשים אלמוניים, וסורקים אוטומטיים (crawlers) ותעבורה מסוגים נוספים." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "יחס פעילות יומי/חודשי" xaxis: "יום" yaxis: "יחס פעילות יומי/חודשי" - description: "מספר החברים שנכנסו ביממה האחרונה לחלק במספר החברים שנכנסו בחודש האחרון – מחזירה אחוז שמציין את ‚דבקות’ הקהילה. עדיף לכוון לערך שעולה על 20%." daily_engaged_users: title: "משתמשים מעורבים יומית" xaxis: "יום" @@ -1944,7 +1941,6 @@ he: slow_down_crawler_rate: "אם הוגדר slow_down_crawler_user_agents (האטת סורקי אינטרנט) קצב זה יחול על כל סורקי האינטרנט (כמות ההמתנה בשניות בין בקשות)" content_security_policy: "אפשר מדיניות תוכן-אבטחה (CSP). CSP הוא שכבת אבטחה נוספת שעוזרת למנוע סוגים מסוימים של התקפות, כולל Cross Site Scripting (XSS) והזרקת נתונים." content_security_policy_report_only: "הפעלת Content-Security-Policy-Report-Only (מדיניות אבטחת תוכן בדיווח בלבד - CSP)" - content_security_policy_collect_reports: "הפעלת איסוף דוחות הפרה של CSP (מדיניות אבטחת תוכן) תחת ‎/csp_reports" content_security_policy_frame_ancestors: "להגביל מי יכול להטמיע את האתר הזה עם מסגרות iframes דרך CSP. ניתן לשלוח במארחים המורשים דרך הטמעה" content_security_policy_script_src: "מקורות סקריפט נוספים ברשימת ההיתרים. השרת המקומי וה-CDN כלולים כברירת מחדל. ראה הגבלת התקפות XSS עם מדיניות אבטחת תוכן. (CSP). מקורות שרת מקומי יתעלמו שכן strict-dynamic מופעל." invalidate_inactive_admin_email_after_days: "חשבונות מנהלים שלא ביקרו באתר מעל כמות כזו של ימים יאלצו לאמת מחדש את כתובת הדוא״ל שלהם כדי לשוב ולהיכנס. להגדיר כ־0 כדי להשבית." @@ -2030,7 +2026,6 @@ he: enable_local_logins_via_email: "לאפשר למשתמשים לבקש לשלוח אליהם קישור לכניסה בלחיצה אחת בדוא״ל." allow_new_registrations: "לאפשר הרשמות של משתמשים חדשים. יש לבטל סימון זה כדי למנוע יצירת חשבונות חדשים." enable_signup_cta: "להציג מודעה למשתמשים אלמוניים חוזרים שמציעה להם להירשם כדי לקבל חשבון." - enable_discourse_id: "הפעלת אימות דרך Discourse ID, שירות כניסה אחודה שמאפשר למשתמשים להיכנס למגוון אתרי Discourse עם חשבון אחד. ספקי כניסה נפוצים כגון Google,‏ Facebook,‏ Apple ו־GitHub נתמכים בלי הגדרות נוספות. בכתובת id.discourse.com אפשר למצוא פרטים נוספים." enable_google_oauth2_logins: "להפעיל אימות עם Oauth2 מול Google. זו שיטת האימות שכרגע נתמכת מול Google. דורשת מפתח וסוד. יש לעיין בהגדרת כניסה עם Google ל־Discourse." google_oauth2_client_id: "מזהה הלקוח הייחודי שסופק על ידי יישום ה־Google שלך, המשמש לתהליך האימות." google_oauth2_client_secret: "קוד סודי של לקוח (client secret) של אפליקציית Google." @@ -2269,7 +2264,6 @@ he: alternative_reply_by_email_addresses: "רשימה של כמה תבניות לתגובות בדוא״ל באמצעות כתובות דוא״ל נכנסות. למשל: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "להשתמש ב־HTML במקום בטקסט בהודעות דוא״ל נכנסות." strip_incoming_email_lines: "להסיר רווחים מובילים וסוגרים בכל שורה בהודעות דוא״ל נכנסות." - disable_emails: "למנוע מ־Discourse לשלוח כל סוג של הודעות דוא״ל. יש לבחור ב־‚כן’ כדי להשבית את כל הודעות הדוא״ל לכל המשתמשים. ניתן גם לבחור ב־‚ללא סגל’ כדי להשבית את ההודעות למשתמשים שאינם נמנים עם הסגל." strip_images_from_short_emails: "הסרת תמונות מהודעות דוא״ל שגודלן אינו עולה על 2800 בתים" short_email_length: "הגדרת האורך המרבי, בבתים, לסיווג הודעת דוא״ל כ‚קצרה’ כדי להדחיק תמונות. אם גודל של הודעת דוא״ל לא חורג מהערך הזה, תמונות כלשהן (כגון תמונות ייצוגיות ואמוג׳ים) בהודעות הדוא״ל תוסרנה." display_name_on_email_from: "להציג שמות מלאים בשדה „מאת” בדוא״ל" @@ -2287,6 +2281,7 @@ he: mailgun_api_key: "מפתח API סודי של Mailgun לאימות של הודעות webhook." sendgrid_verification_key: "מפתח התיקוף של Sendgrid משמש לתיקוף הודעות התליה." mailjet_webhook_token: "אסימון המשמש לתיקוף מטען של התליה. חובה להעביר אותו בתור המשתנה ‚t’ בשאילתה של ההתליה, למשל: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "אסימון המשמש לתיקוף מטען של התליה. חובה להעביר אותו בתור המשתנה ‚t’ בשאילתה של ההתליה, למשל: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "מפתח האימות של Mandrill משמש לאימות הודעות התליה." postmark_webhook_token: "אסימון המשמש לתיקוף מטען של התליה. חובה להעביר אותו בתור המשתנה ‚t’ בשאילתה של ההתליה, למשל: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "אסימון המשמש לתיקוף מטען של התליה. חובה להעביר אותו בתור המשתנה ‚t’ בשאילתה של ההתליה, למשל: https://example.com/webhook/sparkpost?t=supersecret" @@ -2360,7 +2355,6 @@ he: allow_likes_in_anonymous_mode: "הפעלת ההגדרה הזאת תאפשר למשתמשים שגולשים באתר שלך באלמוניות לסמן לייק על פוסטים. כשהאפשרות מופעלת, משתמשים יכולים להסוות את הזהות שלהם בסימון לייק לפוסטים או נושאים ברחבי האתר. ההגדרה הזאת דורשת שגם ההגדרה `allow anonymous mode` (לאפשר מצב אלמוני) תהיה פעילה." anonymous_posting_allowed_groups: "קבוצות שמורשות להפעיל פרסום אלמוני. ההגדרה הזאת דורשת שההגדרה `allow anonymous mode` (לאפשר מצב אלמוני) תהיה פעילה." anonymous_account_duration_minutes: "כדי להגן על האלמוניות יש ליצור חשבון אלמוני חדש כל N דקות עבור כל משתמש. למשל: אם ההגדרה היא 600, בחלוף 600 דקות מהפוסט האחרון וגם אם המשתמש עבר למצב אלמוני, ייווצר חשבון אלמוני חדש." - hide_user_profiles_from_public: "להשבית כרטיסי משתמשים, פרופילי משתמשים וספריית משתמשים עבור משתמשים אלמוניים." hide_new_user_profiles: "הסתרת דרגת אמון 1 ומטה לפרופילי משתמשים ממשתמשים ציבוריים ובדרגת אמון 1 עד שיפרסמו בפעם הראשונה. היכולת הזאת מושבתת ללא תנאים באתרי must_approve_users ו־invite_only (חובה לאשר משתמשים ובהזמנה בלבד בהתאמה)." allow_users_to_hide_profile: "לאפשר למשתמשים להחביא את הפרופיל והנוכחות שלהם" hide_user_activity_tab: "להסתיר את לשונית הפעילות בפרופילי משתמש למעט למנהלים ולעצמי." @@ -2555,7 +2549,6 @@ he: dashboard_hidden_reports: "לאפשר להסתיר את הדוחות המסוימים בלוח הבקרה." dashboard_visible_tabs: "נא לבחור אילו לשוניות תופענה בלוח הבקרה." dashboard_general_tab_activity_metrics: "נא לבחור דיווחים שיופיעו בתור מדדי פעילות בלשונית הכללית." - gravatar_enabled: "אפשר להשתמש בשירות Gravatar לתמונות ייצוגיות של משתמשים. ההגדרה הזאת תמנע ממשתמשים לעבור ל־Gravatar עבור התמונות ייצוגיות שלהם, אך לא תשפיע על משתמשים שכבר עשו זאת." gravatar_name: "נא לציין את שם ספק שירות Gravatar. השם הזה בדרך כלל ישמש לזיהוי ספק מקור תמונות ה־Gravatar הייצוגיות באתר." gravatar_base_url: "נא לציין את כתובת הגישה ל־API של ספק Gravatar. ההגדרה הזאת הכרחית להמרת כתובות דוא״ל לכתובות Gravatar בה מאוחסנות התמונות הייצוגיות." gravatar_login_url: "כתובת ביחס אל `gravatar_base_url` (כתובת הבסיס של Gravatar) שמספקת למשתמש גישה לשירות Gravatar." @@ -2595,7 +2588,6 @@ he: content_localization_enabled: "הצגת תוכן מתורגם/מקומי למשתמשים לפי הדפדפן או העדפות שפת המשתמש. תוכן שכזה יכול לכלול קטגוריות, תגיות, פוסטים ונושאים. השפות הנתמכות מוגדרות תחת ‚content localization supported locales’ (שפות נתמכות לתרגום תוכן)." content_localization_allowed_groups: "קבוצות שמורשות לעדכן תוכן שתורגם לשפה המקומית. נדרשת הפעלת ‚content localization enabled’ (תרגום תוכן פעיל)." content_localization_language_switcher: "הצגת בורר שפות בכותרת, הוא יאפשר למבקרים להחליף בין הגרסאות המתורגמות של Discourse ותוכן שנתרם על ידי המשתמשים. משתמש בשפה שהוגדרה ב‚שפות שנתמכות לתרגום תוכן’ (content localization supported locales)." - enable_upcoming_changes: "הפעלת שינויים עתידיים" fake_upcoming_change: "זה שינוי עתידי מזויף למטרות בדיקה. לא צריך לתרגם את המחרוזת הזאת." errors: invalid_css_color: "צבע שגוי. נא למלא את שם הצבע או ערך הקסדצימלי." @@ -2644,12 +2636,6 @@ he: reply_by_email_disabled: "עליך להפעיל את ‚תגובה בדוא״ל’ בטרם הפעלת הגדרה זו." discourse_connect_url_is_empty: "עליך להגדיר ‚כתובת discourse connect’ בטרם הפעלת הגדרה זו." enable_local_logins_disabled: "עליך תחילה להפעיל את ‚הפעלת כניסה מקומית’ בטרם הפעלת הגדרה זו." - min_username_length_exists: "לא ניתן להגדיר את האורך המזערי לשם המשתמש לפחות תווים מאשר שם המשתמש הקצר ביותר במערכת (%{username})." - min_group_name_length_exists: "לא ניתן להגדיר את האורך המזערי לשם המשתמש ליותר תווים מאשר שם הקבוצה הקצר ביותר (%{group_name})." - min_username_length_range: "לא ניתן לקבוע את המינימום מעל המקסימום." - max_username_length_exists: "לא ניתן להגדיר את האורך המרבי לשם המשתמש ליותר תווים מאשר שם המשתמש הארוך ביותר במערכת (%{username})." - max_group_name_length_exists: "לא ניתן להגדיר את האורך המרבי לשם המשתמש לפחות תווים מאשר שם הקבוצה הארוך ביותר (%{group_name})." - max_username_length_range: "לא ניתן לקבוע את המקסימום מתחת למינימום." invalid_hex_value: "ערכי הצבעים חייבים להיות קודים הקסדצימליים באורך 6 תווים." empty_selectable_avatars: "עליך להעלות שתי תמונות ייצוגיות לפחות כדי לבחור ביניהן לפני הפעלת האפשרות הזאת." category_search_priority: @@ -2709,7 +2695,6 @@ he: exclude_tag: "החרגת נושאים עם תגית מסוימת" exclude_tags_any: "החרגת נושאים עם לפחות אחת מבין התגיות שצוינו (מופרדות בפסיקים)" exclude_tags_all: "החרגת נושאים עם כל התגיות שצוינו (מופרדים בפלוס)" - tags_alias: "כינוי למסנן ‚tag:‎’" tag_group: "הצגת נושאים עם תגיות מקבוצת תגיות מסוימת" exclude_tag_group: "החרגת נושאים עם תגיות מקבוצת תגיות מסוימת" activity_before: "הצגת נושאים עם פעילות אחרונה לפני תאריך (YYYY-MM-DD או כמות ימים לפני)" @@ -3182,35 +3167,9 @@ he: new_version_mailer: title: "שולח-מיילים של גרסה חדשה" subject_template: "[%{email_prefix}] גרסת Discourse חדשה, עדכון זמין." - text_body_template: | - הידד, יצאה גרסה חדשה של [Discourse](https://www.discourse.org)! - - הגרסה שלך: %{installed_version} - הגרסה החדשה: **%{new_version}** - - - ניתן לעדכן בעזרת **[עדכון מהיר בלחיצה אחת דרך הדפדפן](%{base_url}/admin/update)** - - - מה שחדש בגרסה מופיע ב[הערות ההפצה](https://meta.discourse.org/tag/release-notes) או שניתן לצפות [ביומן השינויים הגולמי ב־GitHub](https://github.com/discourse/discourse/commits/main) - - - ממליצים לך לבקר ב־[meta.discourse.org](https://meta.discourse.org) לקבלת חדשות, דיונים ותמיכה ב־Discourse new_version_mailer_with_notes: title: "שולח-מיילים של גרסה חדשה עם הערות" subject_template: "[%{email_prefix}] עדכון זמין" - text_body_template: | - היאח, יצאה גרסה חדשה של [Discourse](https://www.discourse.org)! - - הגרסה שלך: %{installed_version} - הגרסה החדשה: **%{new_version}** - - - אפשר לעדכן בעזרת **[עדכון בלחיצה אחת דרך הדפדפן](%{base_url}/admin/update)** - - - צפייה ב[הערות המהדורה](https://meta.discourse.org/tag/release-notes) תציג בפניך את כל השינויים או צפייה ב[יומן השינויים הגולמי של GitHub](https://github.com/discourse/discourse/commits/main) - - - ניתן לבקר ב־[meta.discourse.org](https://meta.discourse.org) לחדשות, דיונים ותמיכה ב־Discourse - - ### הערות מהדורה - - %{notes} flag_reasons: off_topic: "הפוסט שלך סומן כ**חורג מהנושא**: הקהילה מרגישה שהוא לא מתאים לנושא, כפי שמוגדר על ידי הכותרת והפוסט הראשון." inappropriate: "הפוסט שלך סומן כ**בלתי הולם**: הקהילה מרגישה שהוא מעליב, פוגע, מלבה שנאה או מפר את [הנחיות הקהילה שלנו](%{base_path}/guidelines)" @@ -3263,47 +3222,9 @@ he: reviewable_queued_post_revise_and_reject: title: "משוב על הפוסט שלך" subject_template: "משוב על הפוסט שלך תחת %{topic_title}" - text_body_template: | - שלום %{username}, - - בדקנו את הפוסט שלך תחת [%{topic_title}](%{topic_url}) ויש לנו משוב בשבילך. - - סיבה: %{reason} - - משוב: %{feedback} - - אפשר לערוך את הפוסט המקורי שלך להלן ולהגיש אותו מחדש כדי לערוך את השינויים המוצעים או להגיב להודעה הזאת אם יש לך שאלות. - - -------- - - %{original_post} - - -------- - - תודה, - מפקחי %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "משוב על הנושא שלך" subject_template: 'משוב על נושא חדש שכותרתו „%{topic_title}”' - text_body_template: | - שלום %{username}, - - בדקנו את הנושא החדש שלך עם הכותרת „%{topic_title}’ ויש לנו משוב עבורך. - - סיבה: %{reason} - - משוב: %{feedback} - - אפשר לערוך את הפוסט המקורי של הנושא שלך להלן ולהגיש אותו מחדש כדי לערוך את השינויים המוצעים או להגיב להודעה זו אם יש לך שאלות. - - -------- - - %{original_post} - - -------- - - תודה, - מפקחי %{site_name} post_hidden_again: title: "הפוסט הוסתר שוב" subject_template: "הפוסט הוסתר עקב סימוני דגל מהקהילה, הסגל קיבל הודעה" @@ -5180,8 +5101,6 @@ he: deprecation_error_label: לגרום להשבתות נקודתיות של JavaScript לעורר שגיאה enter: "כנסו למצב בטוח" must_select: "עליך לבחור באפשרות אחת לפחות כדי להיכנס למצב בטוח." - dev_mode: - enter: "Enter" wizard: title: "הקמת Discourse" step: @@ -5458,10 +5377,6 @@ he: complete: "הפוסט אושר והוצג מחדש" post_actions: bundle_title: "מה לעשות עם הפוסט?" - no_action_post: - title: "אין פעולה" - description: "לא לנקוט בפעולה על הפוסט" - complete: "לא ננקטה פעולה על הפוסט" delete_post: title: "מחיקת פוסט" description: "למחוק את הפוסט הזה" @@ -5482,16 +5397,8 @@ he: title: "עריכת פוסט" description: "עריכת תוכן הפוסט הזה" complete: "פוסט נערך" - convert_to_pm: - title: "המרה להודעה פרטית" - description: "להמיר את הפוסט הזה להודעה פרטית" - complete: "הפוסט הומר להודעה פרטית" user_actions: bundle_title: "מה לעשות עם המשתמש/ת?" - no_action_user: - title: "אין פעולה" - description: "לא לנקוט בפעולות נגד המשתמש/ת" - complete: "לא לנקוט בפעולה נגד המשתמש/ת" silence_user: title: "השתקת משתמש" description: "למנוע מהמשתמש/ת לפרסם" diff --git a/config/locales/server.hr.yml b/config/locales/server.hr.yml index 246a504fb57b8..4c3cb10c3be23 100644 --- a/config/locales/server.hr.yml +++ b/config/locales/server.hr.yml @@ -836,6 +836,7 @@ hr: read: "pročitano" read_write: "čitati/pisati" instructions: 'Upravo smo generirali novi korisnički API ključ za korištenje s "%{application_name}", zalijepite sljedeći ključ u svoju aplikaciju:' + copied: "Kopirano!" otp_description: 'Želite li dopustiti "%{application_name}" pristup ovoj stranici?' otp_confirmation: confirm_title: Nastavite na %{site_name} @@ -905,7 +906,9 @@ hr: flag: Tip visits: title: "Posjete korisnika" - xaxis: "Dan" + xaxis: + desktop: "Desktop" + mobile: "Mobilni" yaxis: "Broj posjeta" signups: xaxis: "Dan" @@ -1791,47 +1794,9 @@ hr: reviewable_queued_post_revise_and_reject: title: "Povratne informacije o vašoj objavi" subject_template: "Povratne informacije o vašoj objavi u %{topic_title}" - text_body_template: | - Pozdrav %{username}, - - Pregledali smo vašu objavu u [%{topic_title}](%{topic_url}) i imamo povratne informacije za vas. - - Razlog: %{reason} - - Povratne informacije: %{feedback} - - Možete urediti svoju izvornu objavu u nastavku i ponovno je poslati kako biste unijeli predložene promjene ili odgovoriti na ovu poruku ako imate bilo kakvih pitanja. - - -------- - - %{original_post} - - -------- - - Hvala, - %{site_name} Moderatori reviewable_queued_post_revise_and_reject_new_topic: title: "Povratne informacije o vašoj temi" subject_template: 'Povratne informacije o novoj temi pod nazivom "%{topic_title}"' - text_body_template: | - Pozdrav %{username}, - - Pregledali smo vašu novu temu pod naslovom "%{topic_title}" i imamo povratne informacije za vas. - - Razlog: %{reason} - - Povratne informacije: %{feedback} - - Možete urediti izvornu objavu svoje teme u nastavku i ponovno je poslati kako biste unijeli predložene promjene ili odgovoriti na ovu poruku ako imate bilo kakvih pitanja. - - -------- - - %{original_post} - - -------- - - Hvala, - %{site_name} Moderatori post_hidden_again: title: "Objava je opet skrivena" subject_template: "Objava skrivena zbog prijava članova zajednice, osoblje obaviješteno" @@ -2750,8 +2715,6 @@ hr: help: "Za početak registrirajte novi korisnički račun." resend_email: title: "Ponovno pošaljite e-poštu za aktivaciju" - dev_mode: - enter: "Unesi" wizard: step: setup: @@ -2854,13 +2817,9 @@ hr: title: "Da" approve_and_unhide: title: "Da" - no_action_post: - title: "Nema akcije" delete_post: title: "Izbrišite objavu" complete: "Post izbrisan" - no_action_user: - title: "Nema akcije" delete_user: complete: "Korisnik izbrisan" fallback_username: "korisnik" diff --git a/config/locales/server.hu.yml b/config/locales/server.hu.yml index d066fb2a9fa10..b52f681e5f505 100644 --- a/config/locales/server.hu.yml +++ b/config/locales/server.hu.yml @@ -60,8 +60,8 @@ hu: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} általa: %{username}" - too_many_urls: "Egy kérelemben nem lehet 10-nél több URL-címet beilleszteni." - concurrency_not_allowed: "Egyidejű beágyazott egydobozos kérések nem engedélyezettek. Kérjük, egyszerre egy kérést küldjön." + too_many_urls: "Egyetlen kérésben legfeljebb 10 URL alakítható át soron belüli oneboxszá." + concurrency_not_allowed: "Az URL-ek soron belüli oneboxszá alakítására irányuló párhuzamos kérések nem engedélyezettek. Kérjük, egyszerre csak egy kérést küldjön." components: enabled_filter: "Engedélyezed" disabled_filter: "Kikapcsolt" @@ -260,6 +260,7 @@ hu: errors: &errors format: ! "%{attribute} %{message}" format_with_full_message: "%{attribute}: %{message}" + diff_too_complex: "A változtatások összehasonlítása túl összetett a biztonságos kiszámításhoz. Kérjük, próbálkozzon kisebb módosításokkal." messages: invalid_locale: "%{invalid_locale} nem érvényes nyelv" too_long_validation: @@ -347,7 +348,7 @@ hu: slow_down_crawler_user_agent_must_be_at_least_3_characters: "A felhasználói ügynököknek legalább 3 karakter hosszúaknak kell lenniük, hogy elkerüljék a jogos felhasználók véletlen sebességkorlátozását." slow_down_crawler_user_agent_cannot_be_popular_browsers: "A következő értékek egyikét sem adhatja hozzá a beállításhoz: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Nem lehet letiltani a szalagkép metaadatait, ha a composer médiaoptimalizáló kép engedélyezve van. Kapcsolja ki ezt az opciót, mielőtt letiltaná a szalagkép metaadatokat." - x_summary_large_image_no_svg: "A twitter:image metaadatokhoz használt Twitter összefoglaló képek nem lehetnek .svg képek." + x_summary_large_image_no_svg: "Az X összefoglaló képeihez használt twitter:image metaadat nem lehet .svg formátumú kép." tl0_and_anonymous_flag: "A névtelen felhasználók számára meg kell adni a „webhely kapcsolatfelvételi e-mail-címét” vagy „az illegális tartalom bejelentéséhez szükséges e-mail-címet”." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Ehhez a beállításhoz először engedélyezni kell az 'anonim mód engedélyezése' beállítást." conflicting_google_user_id: 'A fiók Google-fiók azonosítója megváltozott; biztonsági okokból a személyzet beavatkozása szükséges. Kérjük, lépjen kapcsolatba a személyzettel, és mutassa meg nekik a következő címet:
https://meta.discourse.org/t/76575' @@ -816,6 +817,10 @@ hu: other: "Ez a kategória nem törölhető, mert %{count} témája van. A legrégebbi téma a %{topic_link}." topic_exists_no_oldest: "A kategóriát nem lehet törölni, mert a benne lévő témák száma %{count}." uncategorized_description: "Témák, amelyeknek nincs szükségük kategóriára, vagy nem férnek bele semmilyen más létező kategóriába." + category_types: + discussion: + name: "Beszélgetés" + title: "beszélgetés" trust_levels: admin: "Adminisztrátor" staff: "Stáb" @@ -1149,6 +1154,7 @@ hu: permissions_header: 'Ez lehetővé teszi a(z) "%{application_name}" számára a következőket:' redirect_warning: "Az engedélyezés átirányít a következőre:" instructions: 'Létrehoztunk egy új felhasználói API-kulcsot, amelyet a "%{application_name} applikációhoz használhat, kérjük, illessze be a következő kulcsot az alkalmazásába:' + copied: "Másolva!" otp_description: 'Szeretné, hogy a(z) „%{application_name}” hozzáférjen ehhez az oldalhoz?' otp_confirmation: confirm_title: Tovább a(z) %{site_name} oldalra @@ -1227,9 +1233,10 @@ hu: description: "Megjelölések állapotának listája, beleértve azok típusát, a bejegyzés létrehozóját, a megjelölést beküldőjét és a határidőt." visits: title: "Felhasználói látogatások" - xaxis: "Nap" + xaxis: + desktop: "Asztali" + mobile: "Mobil" yaxis: "Látogatások száma" - description: "A bejelentkezett felhasználói látogatások száma." signups: title: "Feliratkozások" xaxis: "Nap" @@ -1293,10 +1300,8 @@ hu: description: "Oldalmegtekintések bejelentkezett felhasználók, névtelen felhasználók, ismert keresőrobotok és egyéb forgalom számára." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "NAF/HAF" xaxis: "Nap" yaxis: "NAF/HAF" - description: "Az utolsó napon bejelentkezett tagok száma osztva az elmúlt hónapban bejelentkezett tagok számával – %-ot ad vissza, ami a közösség „ragadósságát” jelzi. 20% feletti cél." daily_engaged_users: title: "Napi aktív felhasználók" xaxis: "Nap" @@ -1711,6 +1716,8 @@ hu: max_oneboxes_per_post: "Állítsa be az egyetlen bejegyzésben megjeleníthető oneboxok maximális számát. A oneboxok a bejegyzésen belül előnézetet biztosítanak a linkelt tartalomról." facebook_app_access_token: "Egy token, amelyet a Facebook alkalmazás azonosítójából és titkos kulcsából generáltak. Az Instagram oneboxok generálására használják." github_onebox_access_tokens: "Egy GitHub szervezet vagy felhasználó hozzárendelése egy GitHub hozzáférési tokenhez, amelyet privát repók, kommitok, pull requestek, issue-k és fájltartalmak GitHub oneboxainak generálására használnak. Enélkül csak nyilvános GitHub URL-ek lesznek oneboxolva." + reddit_onebox_client_id: "Reddit API OAuth ügyfél-azonosító (client ID) a hitelesített Reddit-oneboxok használatához. A hitelesítő adatok beszerzéséhez hozzon létre egy 'script' típusú alkalmazást a reddit.com/prefs/apps oldalon." + reddit_onebox_client_secret: "Reddit API OAuth ügyfél-titok a hitelesített Reddit-oneboxokhoz. Megtalálható a reddit.com/prefs/apps oldalon létrehozott 'script' típusú alkalmazás adatai között." logo: "A webhelye bal felső sarkában megjelenő logó kép. Használjon széles, téglalap alakú képet 120 pixel magassággal és 3:1-nél nagyobb képaránnyal. Ha üresen hagyja, a webhely címének szövege fog megjelenni." logo_small: "A webhelye bal felső sarkában megjelenő kis logó kép, amely görgetéskor látható. Használjon 120 × 120 pixeles négyzet alakú képet. Ha üresen hagyja, egy házikó ikon fog megjelenni." digest_logo: "A webhelye e-mailes összefoglalójának tetején használt alternatív logó kép. Használjon széles, téglalap alakú képet. Ne használjon SVG képet. Ha üresen hagyja, a logo beállításból származó kép lesz használva." @@ -1722,6 +1729,7 @@ hu: manifest_icon: "Androidon logóként/kezdőképernyő képként használt kép. Automatikusan át lesz méretezve 512 × 512 pixelre. Ha üresen hagyja, a large_icon lesz használva." manifest_screenshots: "Képernyőképek, amelyek bemutatják az Ön példányának jellemzőit és funkcionalitását a telepítés oldalon. Minden képnek helyi feltöltésűnek kell lennie és azonos méretűnek." favicon: "Egy favicon az Ön webhelyéhez, lásd https://en.wikipedia.org/wiki/Favicon. A CDN-en való helyes működéshez png formátumúnak kell lennie. 32x32 pixelre lesz átméretezve. Ha üresen hagyja, a large_icon lesz használva." + apple_touch_icon: "Az Apple érintőképernyős eszközeihez használt ikon. Az átlátszó háttér használata nem javasolt. A rendszer automatikusan 180x180-as méretűre méretezi át. Ha üresen marad, a large_icon beállítás kerül felhasználásra." opengraph_image: "Alapértelmezett opengraph kép, amely akkor használatos, amikor az oldalnak nincs más megfelelő képe. Ha üresen hagyja, a large_icon lesz használva." x_summary_large_image: "Twitter kártya 'summary large image' (legalább 280 pixel széles és legalább 150 pixel magas legyen, nem lehet .svg formátumú). Ha üresen hagyja, a normál kártya metaadatai az opengraph_image alapján lesznek generálva, amennyiben az sem .svg formátumú." notification_email: "A feladó e-mail címe, amelyet az összes lényeges rendszerüzenet küldésekor használ a rendszer. Az itt megadott domainhez helyesen beállított SPF, DKIM és fordított PTR rekordokkal kell rendelkeznie ahhoz, hogy az e-mailek megérkezzenek." @@ -1792,6 +1800,7 @@ hu: moderators_manage_categories: "Lehetővé teszi a moderátorok számára a kategóriák létrehozását és kezelését" moderators_manage_groups: "Lehetővé teszi a moderátorok számára a csoportok létrehozását és kezelését" moderators_change_post_ownership: "Engedélyezze a moderátoroknak a bejegyzések tulajdonjogának megváltoztatását" + change_post_ownership_allowed_groups: "Engedélyezze a bejegyzések tulajdonosának módosítását ezen csoportok tagjai számára." cors_origins: "Megengedett források a kereszteredetű kérelmek (CORS) számára. Minden eredetnek tartalmaznia kell a http:// vagy https:// címet. A CORS engedélyezéséhez a DISCOURSE_ENABLE_CORS env változót igaz értékre kell állítani." use_admin_ip_allowlist: "Az adminisztrátorok csak akkor tudnak bejelentkezni, ha a Szűrt IP-címek listában (Admin > Naplók > Szűrt IP-címek) meghatározott IP-címen tartózkodnak." blocked_ip_blocks: "Privát IP-címtartományok listája, amelyeket a Discourse soha nem indexelhet" @@ -1805,7 +1814,6 @@ hu: llms_txt: "Töltsön fel egy szöveges fájlt, amely az /llms.txt útvonalon lesz elérhető az LLM-robotok (crawlerek) számára. További információért látogasson el az llmstxt.org oldalra." content_security_policy: "Engedélyezze a Tartalombiztonsági Szabályzatot (Content-Security-Policy, CSP). A CSP egy további biztonsági réteg, amely segít megelőzni bizonyos típusú támadásokat, beleértve a keresztoldali szkriptelést (Cross Site Scripting, XSS) és az adatbefecskendezést." content_security_policy_report_only: "Engedélyezze a Tartalombiztonsági Szabályzat Csak Jelentés Módját (CSP)" - content_security_policy_collect_reports: "Engedélyezze a CSP-szabálysértési jelentések gyűjtését /csp_reports címen." content_security_policy_frame_ancestors: "Korlátozza, ki ágyazhatja be ezt a webhelyet iframe-ekbe a CSP segítségével. Az engedélyezett kiszolgálók szabályozása a Beágyazás oldalon történik" content_security_policy_script_src: "További engedélyezett szkriptforrások. Az aktuális kiszolgáló és CDN alapértelmezetten szerepel. Lásd XSS támadások mérséklése Tartalombiztonsági Szabályzattal. (CSP). Egyéb kiszolgálóforrások figyelmen kívül maradnak, mivel a strict-dynamic engedélyezve van." invalidate_inactive_admin_email_after_days: "Azok az adminisztrátori fiókok, amelyek ennyi napja nem látogatták meg a webhelyet, újra kell érvényesíteniük az e-mail címüket a bejelentkezés előtt. Állítsa 0-ra a kikapcsoláshoz." @@ -1891,7 +1899,7 @@ hu: enable_local_logins_via_email: "Engedélyezze a felhasználóknak, hogy egy kattintással bejelentkezési linket kérjenek, amelyet e-mailben kapnak meg." allow_new_registrations: "Új felhasználók regisztrációjának engedélyezése. Vegye ki a jelölést, hogy megakadályozza, hogy bárki új fiókot hozzon létre." enable_signup_cta: "Mutasson értesítést a visszatérő névtelen felhasználóknak, és ajánlja fel, hogy regisztráljanak egy fiókot." - enable_discourse_id: "Engedélyezze a Discourse ID-n keresztüli hitelesítést, amely egy egyszeri bejelentkezési szolgáltatás, amely lehetővé teszi a felhasználók számára, hogy egyetlen fiókkal több Discourse-oldalra is bejelentkezzenek. Az olyan gyakori közösségi bejelentkezési szolgáltatók, mint a Google, a Facebook, az Apple és a Github további konfiguráció nélkül támogatottak. További részletekért lásd: id.discourse.com." + enable_discourse_id: "Hitelesítés engedélyezése a Discourse ID segítségével. Ez egy egyszeri bejelentkezési (SSO) szolgáltatás, amely lehetővé teszi a felhasználók számára, hogy egyetlen fiókkal több különböző Discourse-oldalra is belépjenek. A népszerű közösségi szolgáltatók, mint a Google, a Facebook, az Apple és a GitHub további beállítások nélkül támogatottak. További részletekért látogasson el az id.discourse.com oldalra." enable_google_oauth2_logins: "Engedélyezze a Google Oauth2 hitelesítést. A Google jelenleg ezt a hitelesítési módszert támogatja. Kulcs és titkos kód szükséges. Lásd: A Google bejelentkezés konfigurálása a Discourseszámára." google_oauth2_client_id: "A Google-alkalmazás által megadott egyedi ügyfél-azonosító, amelyet a hitelesítési folyamathoz használnak." google_oauth2_client_secret: "A Google-alkalmazás titkos kliens kódja." @@ -2114,6 +2122,8 @@ hu: num_flaggers_to_close_topic: "A téma beavatkozás céljából történő automatikus szüneteltetéséhez szükséges egyedi megjelölők minimális száma" num_hours_to_close_topic: "Egy téma szüneteltetésének óraszáma beavatkozás céljából." auto_respond_to_flag_actions: "Automatikus válasz bekapcsolása a megjelölés elvetéséhez." + min_first_post_typing_time: "Az első hozzászólás gépelésével töltött minimális időtartam. Ha a felhasználó nem éri el ezt a küszöbértéket, a bejegyzés automatikusan a jóváhagyásra váró sorba kerül. A kikapcsoláshoz állítsa 0-ra (nem javasolt)." + fast_typing_threshold: "Az első hozzászólás gépelésére fordított minimális idő. Ha az időtartam nem éri el a küszöbértéket, a bejegyzés automatikusan a moderációs sorba kerül. Alacsony: 1 másodperc, normál: 3 másodperc, magas: 5 másodperc." auto_silence_fast_typers_on_first_post: "Automatikusan elnémítja azokat a felhasználókat, akik nem érik el a \"gyors gépelési küszöböt\"." auto_silence_fast_typers_max_trust_level: "Maximális bizalmi szint a gyors gépelők automatikus elnémításához" auto_silence_first_post_regex: "Kis- és nagybetűre nem érzékeny reguláris kifejezés, amely ha teljesül, az első felhasználói bejegyzést elnémítja és a jóváhagyási sorba küldi. Például: raging|a[bc]a , minden olyan bejegyzést elnémít, amely tartalmazza a raging vagy aba vagy aca kifejezést az első alkalommal. Csak az első bejegyzésre vonatkozik. ELAVULT: Használja helyette a Figyelt Szavak Elnémítása funkciót." @@ -2132,7 +2142,7 @@ hu: alternative_reply_by_email_addresses: "Alternatív sablonok listája a bejövő e-mail-címekre történő válaszadáshoz. Példa: %%{reply_key}@reply.example.com|válaszok+%%{reply_key}@example.com" incoming_email_prefer_html: "Szöveg helyett HTML-kódot használjon bejövő e-mailekhez." strip_incoming_email_lines: "Távolítsa el a kezdő és a záró szóközöket a bejövő e-mailek minden sorából." - disable_emails: "Megakadályozza, hogy a Discourse bármilyen típusú e-mailt küldjön. Válassza az „igen” lehetőséget az e-mailek letiltásához az összes felhasználó számára. Válassza a „nem személyzet” lehetőséget, ha csak a nem stábtagok számára szeretné letiltani az e-maileket." + disable_emails: "Megakadályozza, hogy a Discourse bármilyen e-mailt küldjön. Válassza az „igen” opciót a kimenő e-mailek letiltásához minden felhasználó számára. Válassza a „non-staff” (nem személyzet) opciót, ha csak a nem-staff felhasználók e-mailjeit szeretné letiltani." allow_email_invites: "Ha le van tiltva, a felhasználók nem tudnak meghívókat küldeni a Discourse-on keresztül." strip_images_from_short_emails: "Képek eltávolítása 2800 bájtnál kisebb méretű e-mailekből" short_email_length: "Határozza meg bájtban azt a maximális hosszt, amelyen egy e-mailt „rövid”-nek kell minősíteni a képelnyomás miatt. Ha egy e-mail mérete nem haladja meg ezt a beállítást, az e-mailben található képek (például avatarok és hangulatjelek) törlődnek." @@ -2151,6 +2161,7 @@ hu: mailgun_api_key: "Mailgun titkos API-kulcs a webhook-üzenetek ellenőrzésére." sendgrid_verification_key: "Sendgrid ellenőrző kulcs, amelyet a webhook üzenetek ellenőrzésére használnak." mailjet_webhook_token: "A webhook hasznos terhelésének ellenőrzésére használt token. Ezt a webhook 't' lekérdezési paramétereként kell átadni, például: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "A webhook hasznos terhelésének ellenőrzésére használt token. Ezt a webhook 't' lekérdezési paramétereként kell átadni, például: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Mandrill hitelesítési kulcs a webhook üzenetek ellenőrzésére." postmark_webhook_token: "A webhook hasznos terhelésének ellenőrzésére használt token. Ezt a webhook „t” lekérdezési paramétereként kell átadni, például: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "A webhook hasznos terhelésének ellenőrzésére használt token. Ezt a webhook 't' lekérdezési paramétereként kell átadni, például: https://example.com/webhook/sparkpost?t=supersecret" @@ -2225,13 +2236,15 @@ hu: allow_likes_in_anonymous_mode: "Engedélyezze ezt a beállítást, hogy a webhelyet névtelenül böngésző felhasználók lájkolhassák a bejegyzéseket. Aktiválás esetén a felhasználók választhatják, hogy identitásuk rejtve maradjon, amikor bejegyzéseket vagy témákat lájkolnak a webhelyen. Ehhez a beállításhoz engedélyezni kell az „névtelen mód engedélyezése” beállítást." anonymous_posting_allowed_groups: "Azok a csoportok, amelyek engedélyezik a névtelen hozzászólás lehetőségét. Ehhez a beállításhoz engedélyezni kell a `engedélyezzük a névtelen módot` beállítást." anonymous_account_duration_minutes: "Az anonimitás védelme érdekében N percenként új névtelen fiókot hoz létre minden felhasználó számára. Példa: ha 600-ra van állítva, amint 600 perc eltelik az utolsó bejegyzés óta ÉS a felhasználó névtelen módra vált, egy új névtelen fiók jön létre." - hide_user_profiles_from_public: "Felhasználói kártyák, felhasználói profilok és felhasználói címtár letiltása névtelen felhasználók számára." + hide_user_profiles_from_public: "A felhasználói kártyák és profilok letiltása a névtelen felhasználók számára. Az összesített statisztikák továbbra is elérhetőek maradnak a felhasználói névjegyzékben." hide_new_user_profiles: "Rejti az 1-es vagy alacsonyabb bizalmi szinttel rendelkező felhasználói profilokat a nyilvánosság és az 1-es szintű felhasználók elől, amíg azok nem posztolnak először. Ez a funkció feltétel nélkül le van tiltva azokon az oldalakon, ahol kötelező a felhasználók jóváhagyása vagy ahol csak meghívással lehet regisztrálni." allow_users_to_hide_profile: "Felhasználók számára engedélyezi a profiljuk és jelenlétük elrejtését" hide_user_activity_tab: "A tevékenység fül elrejtése a felhasználói profilokban, kivéve az Adminisztrátor és saját profil esetében." delete_associated_accounts_on_password_reset: "Törölje a felhasználóhoz tartozó fiókot, amikor a felhasználó megváltoztatja a jelszavát" allow_featured_topic_on_user_profiles: "Engedélyezze a felhasználók számára, hogy a felhasználói kártyájukon és a profiljukon megjelenítsenek egy témára mutató hivatkozást." show_inactive_accounts: "A bejelentkezett felhasználók böngészhetnek az inaktív fiókok profiljai között." + hide_silencing_reasons: "Ne jelenítse meg nyilvánosan a némítási okokat a felhasználói profilokon." + hide_suspension_reasons: "Ne jelenítse meg nyilvánosan a felfüggesztési okokat a felhasználói profilokon." log_personal_messages_views: "Naplózott személyes üzenet megtekinthetősége a rendszergazda által más felhasználók/csoportok számára." ignored_users_count_message_threshold: "Értesítse a moderátorokat, ha egy adott felhasználót ennyi másik felhasználó figyelmen kívül hagy." ignored_users_message_gap_days: "Mennyi ideig kell várni, mielőtt ismét értesítené a moderátorokat egy olyan felhasználóról, akit sokan figyelmen kívül hagytak." @@ -2245,6 +2258,7 @@ hu: dont_feed_the_trolls_threshold: "A többi felhasználótól kapott jelzések száma a figyelmeztetés előtt." enable_mobile_theme: "A mobileszközök mobilbarát témát használnak, és a teljes webhelyre válthatnak. Tiltsa le ezt, ha olyan egyéni stíluslapot szeretne használni, amely teljesen reszponzív." dominating_topic_minimum_percent: "Egy felhasználónak hány százaléknyi bejegyzést kell tennie egy témában, mielőtt figyelmeztetést kap a téma túlzott dominanciájáról." + pm_warn_user_last_seen_months_ago: "Új privát üzenet írásakor figyelmeztesse a felhasználót, ha a címzett több mint n hónapja nem volt aktív." suppress_uncategorized_badge: "Ne jelenítse meg a kategorizálatlan témák jelvényét a témalistákban." header_dropdown_category_count: "Hány kategória jeleníthető meg a fejléc legördülő menüjében." permalink_normalizations: "A következő reguláris kifejezés alkalmazása a permalinkek egyeztetése előtt, például: /(topic.*)\\?.*/\\1 eltávolítja a lekérdezési karakterláncokat a téma útvonalakból. A formátum regex+karakterlánc, használja a \\1 stb. kifejezéseket a csoportok eléréséhez." @@ -2418,7 +2432,7 @@ hu: dashboard_hidden_reports: "Engedélyezze a megadott jelentések elrejtését a vezérlőpulton." dashboard_visible_tabs: "Válassza ki, hogy a vezérlőpult mely lapjai legyenek láthatóak." dashboard_general_tab_activity_metrics: "Válassza ki azokat a jelentéseket, amelyek aktivitási mutatóként jelenjenek meg az általános fülön." - gravatar_enabled: "Használd a Gravatar szolgáltatást a felhasználói avatarokhoz. Ez megakadályozza, hogy a felhasználók a Gravatarra váltsanak avatarjaikhoz, de nem befolyásolja azokat a felhasználókat, akik már használják azt." + gravatar_enabled: "A Gravatar szolgáltatás használata a felhasználói avatarokhoz. Ennek letiltása megakadályozza, hogy a felhasználók Gravatarra váltsanak, de nem érinti azokat a felhasználókat, akik már jelenleg is azt használják." gravatar_name: "Adja meg a Gravatar szolgáltató nevét. Ezt a nevet általában a Gravatar avatarokat biztosító forrás azonosítására használják a webhelyen." gravatar_base_url: "Adja meg a Gravatar szolgáltató API-jának elérési URL-jét. Ez a beállítás kulcsfontosságú az e-mail címek Gravatar URL-é alakításához, ahol az avatar képek tárolva vannak." gravatar_login_url: "A `gravatar_base_url`-hez viszonyított URL, amely lehetővé teszi a felhasználónak, hogy bejelentkezzen a Gravatar szolgáltatásba." @@ -2431,19 +2445,23 @@ hu: suggest_weekends_in_date_pickers: "Tartalmazza a hétvégéket (szombat és vasárnap) a dátumválasztó javaslatai között (tiltsa le ezt, ha a Discourse-t csak hétköznap, hétfőtől péntekig használja)." show_bottom_topic_map: "Megjeleníti a téma térképét a téma alján, ha az legalább 10 választ tartalmaz." show_topic_map_in_topics_without_replies: "Megjeleníti a téma térképét akkor is, ha a témában nincsenek válaszok." + enable_site_owner_onboarding: "Egy panelt jelenít meg a kezdőlapon az új adminisztrátoroknak, segítve őket a kezdeti lépésekben. Engedélyezze újra ezt a beállítást, ha ismét látni szeretné a bevezetési lépéseket." enable_welcome_banner: "Egy banner megjelenítése a fő témalistás oldalakon, hogy üdvözölje a tagokat, és lehetővé tegye számukra a webhely tartalmának keresését." welcome_banner_image: "Állítson be egy képet, amely az üdvözlő banner hátterében jelenik meg." welcome_banner_location: "Meghatározza, hogy az oldalon hol jelenjen meg az üdvözlő banner." welcome_banner_page_visibility: "Meghatározza, hogy mely oldalakon jelenjen meg az üdvözlő banner." welcome_banner_text_color: "Ha az „Üdvözlő bannerkép” beállítás konfigurálva van, ezzel a beállítással módosíthatja a banner szövegének színét, hogy az olvasható maradjon. Ha üresen hagyja, vagy ha nincs feltöltve kép, az aktív sablon szabályozza a színt." splash_screen: "Ideiglenes betöltési képernyőt jelenít meg, amíg az oldal eszközei betöltődnek." + splash_screen_image: "Az indítóképernyőn megjelenő SVG kép, amely az oldal betöltése közben látható. Az animált SVG-k kizárólag CSS transform vagy opacity animációkat használhatnak. Használjon egyedi neveket a CSS osztályokhoz és a kulcskockákhoz. A téma színeire a var(--primary), var(--secondary) és var(--tertiary) változókkal hivatkozhat." navigation_menu: "Adja meg, hogy az oldalsáv vagy a fejléc legördülő menüje legyen az oldal fő navigációs menüje. Az oldalsáv ajánlott." default_navigation_menu_categories: "A kiválasztott kategóriák alapértelmezetten megjelennek a Navigációs Menü Kategóriák szekciójában." default_navigation_menu_tags: "A kiválasztott címkék alapértelmezetten megjelennek a Navigációs Menü Címkék szekciójában." experimental_new_new_view_groups: 'Engedélyezzen egy új témalistát, amely egyesíti az olvasatlan és új témákat, és az oldalsávon lévő "Minden" hivatkozást jelölje be.' + enable_form_templates: "Az űrlapsablonok funkció engedélyezése. Segítségével strukturált, adatellenőrzéssel ellátott űrlapok használatát írhatja elő a témalétrehozási folyamat részeként." show_preview_for_form_templates: "Az űrlapsablonok előnézetének engedélyezése" lazy_load_categories_groups: "Lusta betöltés alkalmazása a kategória információkra a kiválasztott csoportok felhasználói számára. Ez javítja a teljesítményt olyan webhelyeken, ahol sok kategória van." enable_auto_grid_images: "Automatikusan [grid] címkékbe csomagolja a képeket, ha 3 vagy több képet töltöttek fel a komponálóba." + impersonate_without_logout: "Lehetővé teszi az adminisztrátorok számára, hogy egy felhasználó nevében lépjenek be anélkül, hogy ki kellene jelentkezniük a saját adminisztrátori fiókjukból." experimental_impersonation_time_limit_minutes: "Mennyi idő múlva ér véget automatikusan a megszemélyesítési munkamenet." page_loading_indicator: "A Discourse-on belüli oldalnavigációk során megjelenő betöltési jelző konfigurálása. A 'Spinner' egy teljes oldalas jelző. A 'Slider' egy keskeny sávot jelenít meg a képernyő tetején." show_user_menu_avatars: "Felhasználói avatarok megjelenítése a felhasználói menüben" @@ -2465,11 +2483,13 @@ hu: content_localization_crawler_param: "Lokalizált tartalom kiszolgálása a keresőrobotok számára, ha a „tartalom-lokalizáció engedélyezése” (content localization enabled) és a „nyelv beállítása paraméter alapján” (set locale from param) funkció be van kapcsolva. A támogatott nyelvek listáját a „tartalom-lokalizáció által támogatott nyelvek” (content localization supported locales) beállítás határozza meg." content_localization_use_default_locale_when_unsupported: "A webhely alapértelmezett területi beállításainak megfelelően lokalizált tartalmat jelenítsen meg azoknak a felhasználóknak, akiknek az előnyben részesített nyelve nem szerepel a „tartalom lokalizációjában támogatott területek” listában." content_localization_allow_author_localization: "Lehetővé teheti a szerzők számára saját témáik és bejegyzéseik lokalizációjának frissítését a bejegyzések menüjén keresztül." - enable_upcoming_changes: "Közelgő változások engedélyezése" fake_upcoming_change: "Ez egy hamis, közelgő változás tesztelési célokra. Nem kell lefordítani ezt a karakterláncot." floating_dismiss_topics_on_mobile: "Megjelenít egy lebegő „Elvetés...” gombot mobilon a témalistához a könnyebb hozzáférés és a témalista tetején lévő hely felszabadítása érdekében." rename_faq_to_guidelines: "Ez a módosítás a GYIK-oldalt „Irányelvek” névre nevezi át. A GYIK-oldal továbbra is elérhető marad a /faq útvonalon, a „faq url” beállítás pedig a megszokott módon működik tovább." enable_simplified_category_creation: "Leegyszerűsített kategória-létrehozási folyamatot tesz lehetővé kevesebb opcióval és letisztultabb felülettel." + enable_custom_splash_screen: "Lehetővé teszi a betöltési kezdőképernyő testreszabását saját SVG-képpel. Töltsön fel egy képet a „kezdőképernyő képe” beállítással. Figyelmeztetés: Ez negatívan befolyásolhatja az LCP-pontszámokat és a Google indexelését." + modernize_foundation_theme: "Ez a módosítás dizájnbeli változtatásokat vezet be a Discourse Foundation témájába." + reporting_improvements: "Navigációs, megjelenésbeli és használhatósági fejlesztések a Discourse adminisztrátori jelentéseihez." errors: invalid_css_color: "Érvénytelen szín. Adjon meg egy színnevet vagy hexaértéket." invalid_datetime: "Érvénytelen dátum/idő formátum. Kérjük, győződjön meg arról, hogy érvényes dátumot és időpontot adott meg." @@ -2477,6 +2497,8 @@ hu: invalid_username: "Nincs ilyen nevű felhasználó." valid_username: "Van egy ilyen nevű felhasználó." invalid_group: "Nincs ilyen nevű csoport." + invalid_svg: "Az SVG kép érvénytelen. Tartalmaznia kell egy SVG elemet, továbbá nem tartalmazhat szkripteket vagy eseménykezelőket." + invalid_upload: "A feltöltés érvénytelen vagy nem létezik." invalid_topic: "Nincs ilyen azonosítóval rendelkező téma." invalid_integer_min_max: "Az értéknek %{min} és %{max} között kell lennie." invalid_integer_min: "Az érték nem lehet kisebb, mint %{min}." @@ -2514,12 +2536,12 @@ hu: reply_by_email_disabled: "A beállítás engedélyezése előtt először engedélyeznie kell a „válasz e-mailben” funkciót." discourse_connect_url_is_empty: "Először be kell állítania egy 'discourse connect url'-t, mielőtt engedélyezné ezt a beállítást." enable_local_logins_disabled: "Először engedélyeznie kell a 'helyi bejelentkezések engedélyezése' opciót, mielőtt ezt a beállítást engedélyezné." - min_username_length_exists: "Nem állíthatja a felhasználónév minimális hosszát a legrövidebb felhasználónév (%{username}) fölé." - min_group_name_length_exists: "A minimális felhasználónévhossz nem állítható a legrövidebb csoportnév (%{group_name}) fölé." - min_username_length_range: "Nem lehet a legnagyobb értéknél nagyobb legkisebb értéket beállítani." - max_username_length_exists: "Nem állíthatja a felhasználónév maximális hosszát a leghosszabb felhasználónév (%{username}) alá." - max_group_name_length_exists: "A felhasználónév maximális hossza nem állítható a leghosszabb csoportnév (%{group_name}) alá." - max_username_length_range: "Nem lehet a legkisebb értéknél kisebb legnagyobb értéket beállítani." + min_username_length_exists: "A 'felhasználónév minimális hossza' nem állítható magasabb értékre a legrövidebb felhasználónévnél (%{username})." + min_group_name_length_exists: "A 'felhasználónév minimális hossza' nem állítható magasabb értékre a legrövidebb csoportnévnél (%{group_name})." + min_username_length_range: "A 'felhasználónév minimális hossza' nem állítható magasabb értékre, mint a 'felhasználónév maximális hossza'." + max_username_length_exists: "A 'felhasználónév maximális hossza' nem állítható kisebb értékre a leghosszabb felhasználónévnél (%{username})." + max_group_name_length_exists: "A 'felhasználónév maximális hossza' nem állítható kisebb értékre a leghosszabb csoportnévnél (%{group_name})." + max_username_length_range: "A 'felhasználónév maximális hossza' nem állítható kisebb értékre, mint a 'felhasználónév minimális hossza'." invalid_hex_value: "A színértékeknek 6 számjegyű hexadecimális kódoknak kell lenniük." empty_selectable_avatars: "A beállítás engedélyezése előtt fel kell töltened legalább két választható avatart." category_search_priority: @@ -2582,7 +2604,6 @@ hu: exclude_tag: "Egy adott címkével rendelkező témák kizárása" exclude_tags_any: "Kizárja a megadott címkék bármelyikét tartalmazó témákat (vesszővel elválasztva)." exclude_tags_all: "Kizárja a megadott címkékkel rendelkező témákat (plusz-szeparált)" - tags_alias: "A „tag:” szűrő álneve" tag_group: "Témák megjelenítése egy adott címkecsoport címkéivel" exclude_tag_group: "Címkékkel ellátott témák kizárása egy adott címkecsoportból" activity_before: "Mutassa a témákat, amelyek utolsó aktivitása egy adott dátum előtt (ÉÉÉÉ-HH-NN vagy nappal ezelőtt) történt" @@ -2783,6 +2804,7 @@ hu: csrf_detected: "Sajnáljuk, az engedélyezés időtúllépést okozott, vagy böngészőt váltott. Kérjük, próbálja újra." request_error: "Sajnáljuk, hiba történt az engedélyezés megkezdésekor. Kérjük, próbálja újra." invalid_iat: "Sajnáljuk, a szerver órajelének eltérései miatt nem tudjuk ellenőrizni az engedélyezési tokent. Kérjük, próbálja újra." + unauthorized: "Sajnáljuk, a bejelentkezési szolgáltató nem engedélyezte a kérését. Kérjük, próbálja újra, vagy forduljon egy adminisztrátorhoz." omniauth_error_unknown: "Hiba történt a bejelentkezési adatok feldolgozásakor. Kérjük, próbálja újra." omniauth_confirm_title: "Jelentkezzen be a %{provider} használatával" omniauth_confirm_button: "Folytatás" @@ -3013,35 +3035,9 @@ hu: new_version_mailer: title: "Új levelező verzió" subject_template: "[%{email_prefix}] Új Discourse verzió, frissítés elérhető" - text_body_template: | - Hurrá, elérhető a [Discourse](https://www.discourse.org) új verziója! - - A te verziód: %{installed_version} - Új verzió: **%{new_version}** - - - Frissíts egyszerűen **[egykattintásos böngészőfrissítés](%{base_url}/admin/update)** - - - Nézd meg az újdonságokat a [kiadási jegyzetekben](https://meta.discourse.org/tag/release-notes) vagy tekintsd meg a [nyers GitHub changelog](https://github.com/discourse/discourse/commits/main) - - - Látogass el a [meta.discourse.org](https://meta.discourse.org) oldalra a Discourse híreiért, megvitatásáért és támogatásáért. new_version_mailer_with_notes: title: "Új verzió levelező megjegyzésekkel" subject_template: "[%{email_prefix}] frissítés elérhető" - text_body_template: | - Hurrá, elérhető a [Discourse](https://www.discourse.org) új verziója! - - A te verziód: %{installed_version} - Új verzió: **%{new_version}** - - - Frissíts egyszerűen **[egykattintásos böngészőfrissítés](%{base_url}/admin/update)** - - - Nézd meg az újdonságokat a [kiadási jegyzetekben](https://meta.discourse.org/tag/release-notes) vagy tekintsd meg a [nyers GitHub changelog](https://github.com/discourse/discourse/commits/main) - - - Látogass el a [meta.discourse.org](https://meta.discourse.org) oldalra a Discourse híreiért, megvitatásáért és támogatásáért. - - ### Kiadási jegyzet - - %{notes} flag_reasons: off_topic: "Bejegyzését **nem témába vágóként** jelentették: a közösség úgy érzi, hogy a cím és az első bejegyzés alapján nem felel meg a témának." inappropriate: "Bejegyzését **nem megfelelő**ként jelölték meg: a közösség sértőnek, sértőnek, gyűlöletkeltőnek vagy [közösségi irányelveinknek] (%{base_path}/guidelines) megsértésének érzi." @@ -3093,47 +3089,9 @@ hu: reviewable_queued_post_revise_and_reject: title: "Visszajelzés a bejegyzéséről" subject_template: "Visszajelzés a bejegyzéséről itt: %{topic_title}" - text_body_template: | - Üdv %{username}, - - Áttekintettük bejegyzését a [%{topic_title}] (%{topic_url}) oldalon, és van néhány visszajelzés az Ön számára. - - Ok: %{reason} - - Visszajelzés: %{feedback} - - Az alábbiakban szerkesztheti eredeti bejegyzését, és újra elküldheti a javasolt változtatások végrehajtásához, vagy válaszolhat erre az üzenetre, ha bármilyen kérdése van. - - -------- - - %{original_post} - - -------- - - Köszönöm, - %{site_name} Moderátorok reviewable_queued_post_revise_and_reject_new_topic: title: "Visszajelzés a témájáról" subject_template: 'Visszajelzés a "%{topic_title}" című új témához' - text_body_template: | - Üdv %{username}, - - Áttekintettük az új témáját: "%{topic_title}", és van néhány visszajelzésünk az Ön számára. - - Indoklás: %{reason} - - Visszajelzés: %{feedback} - - A téma eredeti hozzászólását alább szerkesztheti és küldheti el újra, hogy elvégezze a javasolt változtatásokat, vagy válaszoljon erre az üzenetre, ha bármilyen kérdése van. - - -------- - - %{original_post} - - -------- - - Köszönettel, - %{site_name} Moderátorok post_hidden_again: title: "Bejegyzés újra elrejtve" preview: "A bejegyzést ismét elrejtették a közösség tagjai." @@ -5011,7 +4969,7 @@ hu: dev_mode: title: "Fejlesztői mód" enable_rack_mini_profiler: "Engedélyezze a Rack Mini Profiler 1 órás megőrzését a munkamenet-változások között" - enter: "Belépés" + enter: "Belépés a Fejlesztői módba" wizard: title: "Discourse telepítő" step: @@ -5307,10 +5265,6 @@ hu: complete: "Bejegyzés jóváhagyva és felfedve" post_actions: bundle_title: "Mit akarsz csinálni a bejegyzéssel?" - no_action_post: - title: "Nincs művelet" - description: "Ne tegyen semmit a bejegyzéssel kapcsolatban" - complete: "Nem történt intézkedés a bejegyzéssel kapcsolatban" delete_post: title: "Bejegyzés törlése" description: "Bejegyzés törlése" @@ -5331,16 +5285,8 @@ hu: title: "Bejegyzés szerkesztése" description: "A bejegyzés tartalmának szerkesztése" complete: "Bejegyzés szerkesztve" - convert_to_pm: - title: "Átalakít PÜ-re" - description: "Alakítsa át ezt a bejegyzést személyes üzenetté" - complete: "Bejegyzés személyes üzenetté alakítva" user_actions: bundle_title: "Mit szeretnél csinálni a felhasználóval?" - no_action_user: - title: "Nincs művelet" - description: "Ne tegyen lépéseket a felhasználó ellen" - complete: "Nem történt intézkedés a felhasználó ellen" silence_user: title: "Felhasználó némítása" description: "Felhasználó letiltása a posztolásról" diff --git a/config/locales/server.hy.yml b/config/locales/server.hy.yml index 66be9fddc1eef..e28031dd71572 100644 --- a/config/locales/server.hy.yml +++ b/config/locales/server.hy.yml @@ -671,6 +671,7 @@ hy: read: "կարդացած" read_write: "կարդալ/գրել" instructions: 'Մենք հենց նոր գեներացրինք նոր օգտատիրոջ API key՝ "%{application_name}" -ի հետ պգտագործելու համար, խնդրում ենք տեղադրել հետևյալ key -ը Ձեր հավելվածում.' + copied: "Պատճենված է!" otp_confirmation: confirm_title: Շարունակել դեպի %{site_name} logging_in_as: Մուտք գործել որպես %{username} @@ -738,7 +739,9 @@ hy: description: "Դրոշակների կարգավիճակների ցանկը՝ ներառյալ դրոշակի տիպը, գրառողին, դրոշակավորողին և լուծման ժամանակը" visits: title: "Օգտատիրոջ Այցելություններ" - xaxis: "Օր" + xaxis: + desktop: "Համակարգչային" + mobile: "Հեռախոսային" yaxis: "Այցելությունների քանակ" signups: title: "Գրանցումներ" @@ -775,10 +778,8 @@ hy: site_traffic: yaxis: "Օր" dau_by_mau: - title: "DAU/MAU" xaxis: "Օր" yaxis: "DAU/MAU" - description: "Վերջին օրում մուտքագրված անդամների թիվը բաժանած վերջին ամսում մուտքագրված անդամների թվին - վերադարձնում է %, որը մատնանշում է համայնքի 'կպչունությունը': Նպատակն է՝ >20%:" daily_engaged_users: title: "Օրեկան Ներառված Օգտատերեր" xaxis: "Օր" @@ -1126,7 +1127,6 @@ hy: blocked_ip_blocks: "Մասնավոր IP արգելափակումների ցանկ, որոնք երբեք չպետք է ենթարկվեն տվյալների հավաքագրման Discourse-ի կողմից:" allowed_internal_hosts: "Ներքին հոսթերի ցանկ, որը discourse-ը կարող է ապահով հավաքագրել սմարթ-ներդիրի և այլ նպատակների համար" slow_down_crawler_rate: "Եթե slow_down_crawler_user_agents -ը որոշված է, այս գնահատականը կկիրառվի տվյալների բոլոր հավաքագրիչների նկատմամբ (հարցումների միջև դադարի վայրկյանների քանակը)" - content_security_policy_collect_reports: "Միացնել CSP խախտումների հաշվետվությունների հավաքածուն /csp_reports -ում" invalidate_inactive_admin_email_after_days: "Ադմինի հաշիվները, որոնք չեն այցելել կայք այսքան օրվա ընթացքում, պետք է վերա-վավերացնեն իրենց էլ. հասցեն մինչ մուտք գործելը: Սահմանեք 0 անջատելու համար:" share_links: "Որոշեք, թե որ տարրերն են հայտնվելու կիսման երկխոսության մեջ և ինչ հերթականությամբ:" site_contact_username: "Անձնակազմի որևէ վավեր օգտանուն, որից պետք է ուղարկվեն բոլոր ավտոմատ հաղորդագրությունները: Դատարկ թողնելու դեպքում կօգտագործվի Համակարգի լռելյայն հաշիվը:" @@ -1290,7 +1290,6 @@ hy: reply_by_email_address: "Էլ. փոստի միջոցով պատասխանի մուտքային էլ. հասցեների ձևանմուշ, օրինակ՝ %%{reply_key}@reply.example.com կամ replies+%%{reply_key}@example.com" alternative_reply_by_email_addresses: "Էլ. նամակի միջոցով պատասխանի համար մուտքային հասցեների այլընտրանքային ձևանմուշների ցանկ: Օրինակ՝ %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "Մուտքային նամակի համար տեսքտի փոխարեն օգտագործեք HTML:" - disable_emails: "Կանխարգելել Discourse-ը՝ ցանկացած տիպի նամակ ուղարկելուց: Ընտրեք 'այո' ՝ բոլոր օգտատերերի համար էլ. նամակներն անջատելու համար: Ընտրեք 'ոչ-անձնակազմ' ՝ միայն ոչ-անձնակազմի օգտատերերի համար էլ. նամակներն անջատելու համար:" strip_images_from_short_emails: "Էլ. նամակներից առանձնացնել 2800 Բայթից քիչ չափ ունեցող նկարները" display_name_on_email_from: "Դաշտերից ցուցադրել նամակում ամբողջական անունները" unsubscribe_via_email: "Թույլատրել օգտատերերին դուրս գալ էլ. նամակների բաժանորդագրումից՝ ուղարկելով էլ. նամակ, որը կպարունակի 'unsubscribe' թեմայում կամ տեքստի մեջ" @@ -1345,7 +1344,6 @@ hy: enable_group_directory: "Տրամադրել խմբերի դիրեկտորիա՝ ուսումնասիրման համար" group_in_subject: "Սահմանել %%{optional_pm} էլ. նամակի թեմայում՝ անձնական հաղորդագրության մեջ առաջին խմբի անվան համար, այցելեք՝ Անհատականացնել թեմայի ֆորմատը ստանդարտ էլ. հասցեների համար" anonymous_account_duration_minutes: "Անանունությունը պահպանելու համար ստեղծեք անանուն հաշիվ յուրաքանչյուր N րոպեն մեկ յուրաքանչյուր օգտատիրոջ համար: Օրինակ՝ եթե սահմանված է 600, հենց որ վերջին գրառումից անցնի 600 րոպե ԵՎ օգտատերը միացնի անանուն ռեժիմը, կստեղծվի նոր անանուն հաշիվ:" - hide_user_profiles_from_public: "Անջատել օգտատիրոջ քարտը, պրոֆիլները և դիրեկտորիան անանուն օգտագործողների համար:" show_inactive_accounts: "Թույլատրել մուտքագրված օգտատերերին դիտել ապակտիվ հաշիվների պրոֆիլները:" log_personal_messages_views: "Գրանցել անձնական նամակների դիտումները Ադմինի կողմից այլ օգտատերերի/խմբերի համար:" ignored_users_count_message_threshold: "Ծանուցել մոդերատորներին, եթե մասնավորապես որևէ օգտատեր անտեսվում է այսքան այլ օգտատերերի կողմից:" @@ -1438,10 +1436,6 @@ hy: staged_users_disabled: "Դուք պետք է սկզբում միացնեք 'staged users' ՝ մինչև այս կարգավորումը միացնելը" reply_by_email_disabled: "Դուք պետք է սկզբում միացնեք 'reply by email'' ՝ մինչև այս կարգավորումը միացնելը" enable_local_logins_disabled: "Դուք պետք է սկզբում միացնեք 'enable local logins' ՝ մինչև այս կարգավորումը միացնելը" - min_username_length_exists: "Դուք չեք կարող սահմանել օգտանվան նվազագույն երկարություն ամենակարճ օգտանունից բարձր (%{username})" - min_username_length_range: "Դուք չեք կարող սահմանել նվազագույնը առավելագույնից բարձր:" - max_username_length_exists: "Դուք չեք կարող սահմանել օգտանվան առավելագույն երկարություն ամենաերկար օգտանունից ցածր (%{username}):" - max_username_length_range: "Դուք չեք կարող սահմանել առավելագույնը նվազագույնից ցածր:" invalid_hex_value: "Գույների արժեքները պետք է լինեն 6-նիշանոց տասնվեցերորդական կոդեր:" placeholder: discourse_connect_provider_secrets: @@ -2734,8 +2728,6 @@ hy: title: "Մուտք գործել անվտանգ ռեժիմ" enter: "Մուտք գործել Ապահով Ռեժիմ" must_select: "Դուք պետք է ընտրեք առնվազն մեկ տարբերակ՝ անվտանգ ռեժիմ մուտք գործելու համար:" - dev_mode: - enter: "Մուտք" wizard: title: "Discourse Տեղադրում" step: @@ -2844,12 +2836,8 @@ hy: title: "Այո" approve_and_unhide: title: "Այո" - no_action_post: - title: "Առանց գործողության" delete_post: complete: "Գրառումը ջնջված է" - no_action_user: - title: "Առանց գործողության" delete_user: complete: "Օգտատերը ջնջված է" fallback_username: "օգտատեր" diff --git a/config/locales/server.id.yml b/config/locales/server.id.yml index 8fb90b336ac0c..4953011e50e78 100644 --- a/config/locales/server.id.yml +++ b/config/locales/server.id.yml @@ -209,7 +209,6 @@ id: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Agen pengguna harus memiliki panjang minimal 3 karakter untuk menghindari pengguna sah yang secara tidak sengaja dibatasi lajunya." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Anda tidak dapat menambahkan salah satu nilai berikut ke setelan: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Anda tidak dapat menonaktifkan metadata gambar strip jika 'composer media optimization image enabled' diaktifkan. Nonaktifkan 'composer media optimization image enabled' sebelum menonaktifkan metadata gambar strip." - x_summary_large_image_no_svg: "Gambar ringkasan Twitter yang digunakan untuk twitter:image metadata tidak boleh berupa gambar .svg." conflicting_google_user_id: 'ID Akun Google untuk akun ini telah berubah; intervensi staf diperlukan untuk alasan keamanan. Silakan hubungi staf dan arahkan mereka ke
https://meta.discourse.org/t/76575' onebox: invalid_address: "Maaf, kami tidak dapat membuat pratinjau untuk halaman web ini karena server '%{hostname}' tidak dapat ditemukan. Alih-alih pratinjau, hanya tautan yang akan muncul di post Anda. :cry:" @@ -852,6 +851,7 @@ id: read: "baca" read_write: "baca/tulis" instructions: 'Kami baru saja membuat kunci API pengguna baru untuk Anda gunakan dengan "%{application_name}", harap tempelkan kunci berikut ke dalam aplikasi Anda:' + copied: "Disalin!" otp_description: 'Apakah Anda ingin mengizinkan "%{application_name}" untuk mengakses situs ini?' otp_confirmation: confirm_title: Lanjut ke %{site_name} @@ -925,7 +925,6 @@ id: time_to_resolution: Waktu resolusi visits: title: "Kunjungan Pengguna" - xaxis: "Haru" yaxis: "Jumlah kunjungan" signups: xaxis: "Hari" @@ -966,10 +965,8 @@ id: yaxis: "Hari" description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" xaxis: "Hari" yaxis: "DAU/MAU" - description: "Jumlah anggota yang masuk pada hari terakhir dibagi dengan jumlah anggota yang masuk pada bulan lalu – menghasilkan % yang menunjukkan 'stickiness' komunitas. Bertujuan untuk >20%." daily_engaged_users: title: "Pengguna yang Terlibat Harian" xaxis: "Hari" @@ -1232,6 +1229,7 @@ id: dark_mode_none: "Tidak ada" sendgrid_verification_key: "Kunci verifikasi Sendgrid digunakan untuk memverifikasi pesan webhook." mailjet_webhook_token: "Token digunakan untuk memverifikasi payload webhook. Itu harus diteruskan sebagai parameter kueri 't' dari webhook, misalnya: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Token digunakan untuk memverifikasi payload webhook. Itu harus diteruskan sebagai parameter kueri 't' dari webhook, misalnya: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Kunci autentikasi Mandrill digunakan untuk memverifikasi pesan webhook." postmark_webhook_token: "Token digunakan untuk memverifikasi payload webhook. Itu harus diteruskan sebagai parameter kueri 't' dari webhook, misalnya: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Token digunakan untuk memverifikasi payload webhook. Itu harus diteruskan sebagai parameter kueri 't' dari webhook, misalnya: https://example.com/webhook/sparkpost?t=supersecret" @@ -1261,8 +1259,6 @@ id: invalid_email: "Alamat email tidak valid." invalid_csp_script_src: "Nilai harus berupa 'unsafe-eval' atau 'wasm-unsafe-eval', atau dalam bentuk '-' dengan algoritma hash yang didukung adalah sha256, sha384, atau sha512. Pastikan masukan Anda diapit tanda kutip tunggal." email_polling_disabled: "Anda harus mengaktifkan polling POP3 manual atau mengaktifkan poller email khusus sebelum mengaktifkan balasan melalui email." - min_username_length_range: "Anda tidak boleh menentukan minimum lebih dari maksimum." - max_username_length_range: "Anda tidak bisa menentukan jumlah maksimum dibawah jumlah minimum." invalid_uncategorized_category_setting: 'Kategori "Uncategorized" tidak dapat dipilih jika ''allow uncategorized topics'' tidak diaktifkan.' invalid_search_ranking_weights: "Nilai tidak valid untuk setelan situs search_ranking_weights. Contoh: '{0.1,0.2,0.3,1.0}'. Perhatikan bahwa nilai maksimum untuk setiap bobot adalah 1,0." search: @@ -1293,34 +1289,6 @@ id: blank: "tidak boleh kosong." not_allowed: "tidak diijinkan dari penyedia layanan email ini. Silahkan gunakan alamat email yang lain." blocked: "tidak diperbolehkan." - new_version_mailer: - text_body_template: | - Hore, versi baru dari [Discourse] (https://www.discourse.org) telah tersedia! - - Versi Anda: %{installed_version} - Versi baru: **%{new_version}** - - - Perbarui menggunakan **[pembaruan browser sekali klik] kami yang mudah (%{base_url}/admin/update) ** - - - Lihat apa yang baru di [catatan rilis](https://meta.discourse.org/tag/release-notes) atau lihat [catatan perubahan GitHub](https://github.com/discourse/discourse/commits/main) - - - Kunjungi [meta.discourse.org](https://meta.discourse.org) untuk berita, diskusi, dan dukungan untuk Discourse - new_version_mailer_with_notes: - text_body_template: | - Hore, versi baru [Discourse] (https://www.discourse.org) tersedia! - - Versi Anda: %{installed_version} - Versi baru: **%{new_version}** - - - Perbarui menggunakan ** [pembaruan browser satu-klik] kami yang mudah (%{base_url}/admin/update) ** - - - Lihat apa yang baru di [catatan rilis] (https://meta.discourse.org/tag/release-notes) atau lihat [perubahan GitHub mentah](https://github.com/discourse/discourse/commits/main) - - - Kunjungi [meta.discourse.org](https://meta.discourse.org) untuk berita, diskusi, dan dukungan untuk Discourse - - ### Catatan rilis - - %{notes} system_messages: queued_by_staff: title: "Pesan Membutuhkan Persetujuan" @@ -1758,8 +1726,6 @@ id: description: "Mode aman memungkinkan Anda menguji situs Anda tanpa memuat tema atau penyesuaian plugin client-side. Penyesuaian plugin server-side tetap diaktifkan." no_unofficial_plugins: "Nonaktifkan penyesuaian plugin client-side tidak resmi" no_plugins: "Nonaktifkan semua penyesuaian plugin client-side" - dev_mode: - enter: "Enter" wizard: step: setup: @@ -1874,8 +1840,6 @@ id: title: "Ya" approve_and_unhide: title: "Ya" - no_action_post: - title: "Tidak ada tindakan" delete_post: title: "Hapus postingan" complete: "Pos dihapus" @@ -1883,8 +1847,6 @@ id: title: "Sembunyikan pos" restore_post: title: "Pulihkan post" - no_action_user: - title: "Tidak ada tindakan" silence_user: title: "Senyapkan pengguna" suspend_user: diff --git a/config/locales/server.it.yml b/config/locales/server.it.yml index 6d26d9f6c682c..be156b876bdc1 100644 --- a/config/locales/server.it.yml +++ b/config/locales/server.it.yml @@ -60,8 +60,6 @@ it: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "n°%{post_number} da %{username}" - too_many_urls: "Non è possibile incorporare più di 10 URL in una singola richiesta." - concurrency_not_allowed: "Non sono consentite richieste simultanee di inline-oneboxing. Invia una richiesta alla volta." components: enabled_filter: "Abilitati" disabled_filter: "Disabilitati" @@ -344,7 +342,6 @@ it: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Gli user agent devono essere lunghi almeno 3 caratteri per evitare di limitare accidentalmente le richieste degli utenti legittimi." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Non puoi aggiungere nessuno dei seguenti valori all'impostazione: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Non è possibile disabilitare i metadati delle immagini eliminate se è abilitata l'opzione \"Ottimizzazione multimediale del compositore abilitata\". Disattiva questa opzione prima di disabilitare i metadati delle immagini eliminate." - x_summary_large_image_no_svg: "Le immagini di riepilogo di Twitter utilizzate per i metadati di twitter:image non possono essere immagini .svg." tl0_and_anonymous_flag: "Per gli utenti anonimi è necessario fornire 'site contact email' o 'email address to report illegal content'." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Per questa impostazione è necessario prima abilitare l'impostazione \"Consenti modalità anonima\"." conflicting_google_user_id: 'Il Google Account ID per questo account è stato modificato; per motivi di sicurezza è richiesto l''intervendo dello staff. Si prega di contattare lo staff e indirizzarli a
https://meta.discourse.org/t/76575' @@ -1136,6 +1133,7 @@ it: read: "lettura" read_write: "lettura/scrittura" instructions: 'Abbiamo appena generato una nuova chiave API utente da usare con "%{application_name}", incolla la seguente chiave nella tua applicazione:' + copied: "Copiato!" otp_description: 'Vuoi consentire a "%{application_name}" l''accesso al sito?' otp_confirmation: confirm_title: Procedi su %{site_name}. @@ -1214,9 +1212,10 @@ it: description: "Elenco degli stati delle segnalazioni inclusi tipo di segnalazione, autore, segnalante e tempo di risoluzione." visits: title: "Visite Utente" - xaxis: "Giorno" + xaxis: + desktop: "Desktop" + mobile: "Mobile" yaxis: "Numero di visite" - description: "Numero di visite di utenti autenticati." signups: title: "Iscrizioni" xaxis: "Giorno" @@ -1278,10 +1277,8 @@ it: description: "Visualizzazioni di pagina per utenti registrati, utenti anonimi, crawler noti e altro traffico." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" xaxis: "Giorno" yaxis: "DAU/MAU" - description: "Numero di utenti che hanno effettuato l'accesso nell'ultimo giorno diviso per il numero di utenti che hanno effettuato l'accesso nell'ultimo mese: restituisce una % che rappresenta 'l'attaccamento' alla comunità. Obiettivo > 20%." daily_engaged_users: title: "Utenti Impegnati Giornalmente" xaxis: "Giorno" @@ -1768,7 +1765,6 @@ it: slow_down_crawler_rate: "Se viene specificato slow_down_crawler_user_agents, tale frequenza verrà applicata a tutti i crawler (numero di secondi di ritardo tra le richieste)" content_security_policy: "Abilita Content-Security-Policy (CSP). CSP aggiunge un livello di sicurezza extra che contribuisce a prevenire determinati tipi di attacco informatico, tra cui Cross Site Scripting (XSS) e data injection." content_security_policy_report_only: "Abilita Content-Security-Policy-Report-Only (CSP)" - content_security_policy_collect_reports: "Abilita raccolta di report di violazioni CSP in /csp_reports" content_security_policy_frame_ancestors: "Limita chi può incorporare questo sito in iframes tramite CSP. Controlla gli host ammessi su Incorporamenti" content_security_policy_script_src: "Sorgenti di script aggiuntivi consentite. Il server e la rete CDN in uso sono inclusi per impostazione predefinita. Consulta la sezione Mitigare gli attacchi XSS con i criteri di sicurezza dei contenuti (CSP). Quando è abilitata strict-dynamic, le altre sorgenti host vengono ignorate." invalidate_inactive_admin_email_after_days: "Gli account amministratore che non hanno visitato il sito in questo numero di giorni dovranno riconvalidare il proprio indirizzo email prima di accedere. Impostare su 0 per disabilitare." @@ -2085,7 +2081,6 @@ it: alternative_reply_by_email_addresses: "Elenco dei modelli alternativi per generare gli indirizzi di risposta alle email in arrivo. Esempio: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "Usa HTML al posto del testo per le email in arrivo." strip_incoming_email_lines: "Rimuovi gli spazi bianchi iniziali e finali da ciascuna riga di email in arrivo." - disable_emails: "Impedisci a Discourse di inviare qualsiasi tipo di email. Seleziona 'Sì' per disabilitare le email per tutti gli utenti. Seleziona 'non-staff' per disabilitare le email solo per gli utenti non staff." strip_images_from_short_emails: "Elimina le immagini dalle email aventi dimensione inferiore a 2800 Byte." short_email_length: "Definisci in byte la lunghezza massima entro cui un'email viene classificata come \"breve\" per il blocco immagini. Se le dimensioni dell'email non superano il valore impostato, tutte le immagini (come avatar ed emoji) presenti nell'email verranno bloccate." display_name_on_email_from: "Mostra nomi completi per email dai campi" @@ -2103,6 +2098,7 @@ it: mailgun_api_key: "Chiave API Segreta di Mailgun usata per verificare i messaggi webhook. " sendgrid_verification_key: "Chiave di verifica Sendgrid utilizzata per verificare i messaggi webhook." mailjet_webhook_token: "Token utilizzato per verificare il payload del webhook. Deve essere passato come parametro di query 't' del webhook, ad esempio: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Token utilizzato per verificare il payload del webhook. Deve essere passato come parametro di query 't' del webhook, ad esempio: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Chiave di autenticazione Mandrill usata per verificare i messaggi webhook." postmark_webhook_token: "Token utilizzato per verificare il payload del webhook. Deve essere passato come parametro di query 't' del webhook, ad esempio: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Token utilizzato per verificare il payload del webhook. Deve essere passato come parametro di query 't' del webhook, ad esempio: https://example.com/webhook/sparkpost?t=supersecret" @@ -2174,7 +2170,6 @@ it: group_in_subject: "Imposta %%{optional_pm} nell'oggetto dell'email con il nome del primo gruppo in Messaggio Privato, vedi: Personalizza il formato oggetto per le e-mail standard" allow_anonymous_mode: "Abilita l'opzione che consente all'utente di passare alla modalità anonima per pubblicare. Se attiva, l'utente può scegliere di mantenere privata la propria identità quando pubblica messaggi o argomenti sul sito. Vedi anche `allow anonymous likes`." anonymous_account_duration_minutes: "Per proteggere l'anonimato creare un nuovo account anonimo ogni N minuti per ogni utente. Esempio: se impostato a 600, non appena passano 600 minuti dall'ultimo messaggio E l'utente passa in modalità anonima, viene creato un nuovo account anonimo." - hide_user_profiles_from_public: "Disabilita schede utenti, profili utenti e directory utenti per gli utenti anonimi." hide_new_user_profiles: "Nascondi i profili utente di livello di attendibilità 1 o inferiore al pubblico e considera attendibili gli utenti di livello 1 finché non pubblicano per la prima volta. Questa funzionalità è disabilitata incondizionatamente sui siti must_appprove_users e invite_only." allow_users_to_hide_profile: "Permetti agli utenti di nascondere il loro profilo e la loro presenza" hide_user_activity_tab: "Nasconde la scheda attività su tutti i profili utente eccetto il proprio e quelli dell'amministrazione." @@ -2365,7 +2360,6 @@ it: dashboard_hidden_reports: "Consenti di nascondere i report specificati dal dashboard." dashboard_visible_tabs: "Scegli quali schede del dashboard sono visibili." dashboard_general_tab_activity_metrics: "Scegli i report da visualizzare come metriche di attività nella scheda generale." - gravatar_enabled: "Utilizza il servizio Gravatar per gli avatar degli utenti. Questo impedirà agli utenti di passare a Gravatar per i propri avatar, ma non avrà alcun impatto sugli utenti che già lo utilizzano." gravatar_name: "Specifica il nome del fornitore di servizi Gravatar. Questo nome serve generalmente a identificare la sorgente che fornisce al sito gli avatar Gravatar." gravatar_base_url: "Definisci l'URL di accesso all'API del provider di Gravatar. Questa impostazione è necessaria per convertire gli indirizzi email negli URL di Gravatar presso cui verranno archiviate le immagini degli avatar." gravatar_login_url: "URL relativo a `gravatar_base_url`, che fornisce all'utente le credenziali di accesso al servizio Gravatar." @@ -2445,12 +2439,6 @@ it: reply_by_email_disabled: "Devi abilitare 'reply by email' prima di attivare questa impostazione ." discourse_connect_url_is_empty: "È necessario definire un 'discourse connect url' prima di abilitare questa impostazione." enable_local_logins_disabled: "Prima di abilitare questa impostazione è necessario abilitare 'enable local logins'." - min_username_length_exists: "Non è possibile impostare la lunghezza minima del nome utente a un valore maggiore di quella del nome utente più breve (%{username})." - min_group_name_length_exists: "Non è possibile impostare la lunghezza minima del nome utente al di sopra del nome del gruppo più corto (%{group_name})." - min_username_length_range: "Non puoi impostare il minimo più grande del massimo." - max_username_length_exists: "Non è possibile impostare la lunghezza massima del nome utente a un valore inferiore di quella del nome utente più lungo (%{username})." - max_group_name_length_exists: "Non è possibile impostare la lunghezza massima del nome utente al di sotto del nome del gruppo più lungo (%{group_name})." - max_username_length_range: "Non puoi impostare il massimo inferiore al minimo." invalid_hex_value: "I valori di colore devono essere codici esadecimali a 6 cifre." empty_selectable_avatars: "Devi caricare almeno due avatar selezionabili prima di abilitare questa impostazione." category_search_priority: @@ -2509,7 +2497,6 @@ it: exclude_tag: "Escludi argomenti con un'etichetta specifica" exclude_tags_any: "Escludi gli argomenti con una qualsiasi delle etichette specificate (separate da una virgola)" exclude_tags_all: "Escludi gli argomenti di tutte le etichette specificate (separate dal segno più)" - tags_alias: "Alias per il filtro 'etichetta:'" tag_group: "Mostra argomenti con etichetta da un gruppo di etichette specifico" exclude_tag_group: "Escludi argomenti con etichetta da un gruppo di etichette specifico" activity_before: "Mostra argomenti con ultima attività prima di una data (AAAA-MM-GG o giorni fa)" @@ -2909,35 +2896,9 @@ it: new_version_mailer: title: "Mailer Nuova Versione" subject_template: "[%{email_prefix}] Nuova versione di Discourse, aggiornamento disponibile" - text_body_template: | - Evviva, è uscita una nuova versione di [Discourse](https://www.discourse.org)! - - La tua versione: %{installed_version} - Nuova versione: **%{new_version}** - - - Passa subito all'ultima versione con l'intuitivo **[aggiornamento da browser in un solo clic](%{base_url}/admin/update)** - - - Scopri le novità nelle [note di rilascio](https://meta.discourse.org/tag/release-notes) o visualizza il [log originale delle modifiche GitHub](https://github.com/discourse/discourse/commits/main) - - - Visita [meta.discourse.org](https://meta.discourse.org): troverai novità, discussioni e supporto su Discourse new_version_mailer_with_notes: title: "Mailer Nuova Versione con Note" subject_template: "[%{email_prefix}] aggiornamento disponibile" - text_body_template: | - Evviva, è uscita una nuova versione di [Discourse](https://www.discourse.org)! - - La tua versione: %{installed_version} - Nuova versione: **%{new_version}** - - - Passa subito all'ultima versione con l'intuitivo **[aggiornamento da browser in un solo clic](%{base_url}/admin/update)** - - - Scopri le novità nelle [note di rilascio](https://meta.discourse.org/tag/release-notes) o visualizza il [log originale delle modifiche GitHub](https://github.com/discourse/discourse/commits/main) - - - Visita [meta.discourse.org](https://meta.discourse.org): troverai novità, discussioni e supporto su Discourse - - ### Note di rilascio - - %{notes} flag_reasons: off_topic: "Il tuo messaggio è stato segnalato come **fuori tema**: la comunità pensa che non riguardi l'argomento, come attualmente definito dal titolo e dal contenuto del primo messaggio." inappropriate: "Il tuo messaggio è stato segnalato come **inappropriato**: la community ritiene che sia offensivo, ingiurioso, oppure che inciti all'odio o rappresenti una violazione delle [nostre linee guida della community](%{base_path}/guidelines)." @@ -2986,47 +2947,9 @@ it: reviewable_queued_post_revise_and_reject: title: "Feedback sul tuo messaggio" subject_template: "Feedback sul tuo messaggio in %{topic_title}" - text_body_template: | - Ciao %{username}, - - Abbiamo esaminato il tuo messaggio in [%{topic_title}](%{topic_url}) e abbiamo un feedback per te. - - Motivo: %{reason} - - Feedback: %{feedback} - - Puoi modificare il tuo post originale qui sotto e inviarlo nuovamente con le modifiche suggerite, o puoi rispondere a questo messaggio se hai domande. - - -------- - - %{original_post} - - -------- - - Grazie, - I moderatori di %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "Feedback sul tuo argomento" subject_template: 'Feedback sul nuovo argomento intitolato "%{topic_title}"' - text_body_template: | - Ciao %{username}, - - Abbiamo esaminato il tuo messaggio in "%{topic_title}" e abbiamo un feedback per te. - - Motivo: %{reason} - - Feedback: %{feedback} - - Puoi modificare il tuo post originale qui sotto e inviarlo nuovamente con le modifiche suggerite, o puoi rispondere a questo messaggio se hai domande. - - -------- - - %{original_post} - - -------- - - Grazie, - I moderatori di %{site_name} post_hidden_again: title: "Messaggio nascosto nuovamente" subject_template: "Messaggio nascosto dalle segnalazioni della comunità. Lo staff è stato informato" @@ -4503,8 +4426,6 @@ it: deprecation_error_label: Fai in modo che le deprecazioni di Javascript generino un errore enter: "Avvia Modalità Sicura" must_select: "È necessario selezionare almeno un'opzione per accedere alla modalità sicura." - dev_mode: - enter: "Invio" wizard: title: "Configurazione Discourse" step: @@ -4762,8 +4683,6 @@ it: approve_and_unhide: title: "Sì" complete: "Messaggio approvato e reso visibile" - no_action_post: - title: "Nessuna azione" delete_post: title: "Elimina messaggio" complete: "Messaggio eliminato" @@ -4772,8 +4691,6 @@ it: restore_post: title: "Ripristina messaggio" complete: "Messaggio ripristinato" - no_action_user: - title: "Nessuna azione" silence_user: title: "Silenzia utente" complete: "Utente silenziato" diff --git a/config/locales/server.ja.yml b/config/locales/server.ja.yml index 6d051ae4d0f5e..f7c123b4be8a5 100644 --- a/config/locales/server.ja.yml +++ b/config/locales/server.ja.yml @@ -60,8 +60,6 @@ ja: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "%{username} の #%{post_number}" - too_many_urls: "1 つのリクエストで 10 個以上の URL をワンボックスにインライン化できません。" - concurrency_not_allowed: "インラインワンボックスリクエストを同時に送信できません。リクエストを 1 つずつ送信してください。" components: enabled_filter: "有効" disabled_filter: "無効" @@ -141,6 +139,8 @@ ja: invalid_type: "%{type} は有効な型ではありません" humanize_not_valid_string_value: "JSON ポインター '%{property_json_pointer}' のプロパティは文字列である必要があります。" not_valid_string_value: "は文字列である必要があります" + humanize_not_valid_datetime_value: "JSON ポインター '%{property_json_pointer}' のプロパティは有効な日時である必要があります。" + not_valid_datetime_value: "有効な日時である必要があります" humanize_not_valid_integer_value: "JSON ポインター '%{property_json_pointer}' のプロパティは整数である必要があります。" not_valid_integer_value: "は整数である必要があります" humanize_not_valid_float_value: "JSON ポインター '%{property_json_pointer}' のプロパティは浮動小数点である必要があります。" @@ -256,6 +256,7 @@ ja: greater_than: は %{count} より大きい値である必要があります greater_than_or_equal_to: は %{count} 以上である必要があります has_already_been_used: "はすでに使用されています" + in: '%{count} 内である必要があります' inclusion: はリストに含まれていません invalid: は無効です is_invalid: "は曖昧です。完全な文ですか?" @@ -317,7 +318,6 @@ ja: slow_down_crawler_user_agent_must_be_at_least_3_characters: "ユーザーエージェントは、正当なユーザーを誤ってレート制限しないように、3 文字以上である必要があります。" slow_down_crawler_user_agent_cannot_be_popular_browsers: "設定に次の値を追加することはできません: %{values}。" strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "'composer media optimization image enabled' が有効である場合、画像メタデータの削除を無効にすることはできません。画像メタデータの削除を無効にする前に、'composer media optimization image enabled' を無効にしてください。" - x_summary_large_image_no_svg: "twitter:image メタデータに使用される X の要約画像に .svg 画像を使用できません。" tl0_and_anonymous_flag: "匿名ユーザーの場合は、'site contact email' または 'email address to report illegal content' のいずれかが指定されている必要があります。" allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "この設定では、先に 'allow anonymous mode' 設定が有効になっている必要があります。" conflicting_google_user_id: 'このアカウントの Google アカウント ID が変更されました。セキュリティの理由により、スタッフによる介入が必要です。スタッフに連絡し、
https://meta.discourse.org/t/76575 を示してください。' @@ -365,6 +365,7 @@ ja: redemption_count_less_than_max: "は %{max_redemptions_allowed} より小さい値である必要があります。" email_xor_domain: "メールアドレスとドメインのフィールドを同時に使用できません" existing_user_success: "招待は正常に引き換えられました" + email_invites_disabled: "招待メールの送信は無効です" bulk_invite: file_should_be_csv: "アップロードファイルは csv 形式である必要があります。" max_rows: "最初の %{max_bulk_invites} 件の招待が送信されました。ファイルをより小さく分割してください。" @@ -550,6 +551,7 @@ ja: other: "一度に最大 %{count} 個のメールドメインをカウントできます。" no_invites_with_discourse_connect: "DiscourseConnect が有効である場合にのみ、登録済みユーザーを招待できます" no_invites_without_local_logins: "ローカルログインが無効である場合にのみ、登録済みユーザーを招待できます" + update_existing_users_required: "この変更は %{count} 人の既存のグループメンバーに影響します。'update_existing_users' パラメーター (ture または false) によって、新しい通知のデフォルトを既存のメンバーに適用するかどうかを指定する必要があります。" default_names: everyone: "全員" admins: "管理者" @@ -745,6 +747,8 @@ ja: email_already_used_in_group: "'%{email}' はすでに '%{group_name}' グループに使われています。" email_already_used_in_category: "'%{email}' はすでに '%{category_name}' カテゴリに使われています。" description_incomplete: "カテゴリの説明の投稿には少なくとも 1 段落必要です。" + description_too_long: + other: "説明が長すぎます (最大 %{count} 文字)。" permission_conflict: "サブカテゴリにアクセスできるグループは、その親カテゴリにもアクセスできます。次のグループは、サブカテゴリの 1 つにアクセスできますが、親カテゴリにはアクセスできません: %{group_names}" disallowed_topic_tags: "このトピックにはこのカテゴリで許可されていないタグがあります: '%{tags}'" disallowed_tags_generic: "このトピックはタグを許可していません。" @@ -958,6 +962,7 @@ ja: too_many_drafts: title: "下書きが多すぎます" description: "許可される下書きの最大数に達しました。一部の[下書き](%{base_url}/my/activity/drafts)を削除してからもう一度お試しください。" + bulk_destroy_limit: "一度に削除できる下書きは %{limit} 件までです。" draft_backup: pm_title: "進行中のトピックのバックアップ下書き" pm_body: "バックアップの下書きを含むトピック" @@ -1056,11 +1061,16 @@ ja: every_month: "毎月" every_six_months: "6 か月毎" user_api_key: + title: '「%{application_name}」の承認' authorize: "承認" deny: "キャンセル" read: "読み取り" read_write: "読み取り/書き込み" + logged_in_as: "ログイン中:" + permissions_header: 'これにより、「%{application_name}」で次を行えます:' + redirect_warning: "承認すると次の場所にリダイレクトされます:" instructions: '"%{application_name}" で使用できる新しいユーザー API キーを生成しました。次のキーをアプリケーションに貼り付けてください。' + copied: "コピーしました!" otp_description: '"%{application_name}" にこのサイトへのアクセスを許可しますか?' otp_confirmation: confirm_title: '%{site_name} に進む' @@ -1139,9 +1149,10 @@ ja: description: "通報の種類、投稿者、通報者、および解決までの時間など、通報のステータスのリスト。" visits: title: "ユーザーアクセス" - xaxis: "日" + xaxis: + desktop: "デスクトップ" + mobile: "モバイル" yaxis: "アクセス数" - description: "サインイン済みのユーザーの訪問数。" signups: title: "登録" xaxis: "日" @@ -1184,6 +1195,8 @@ ja: yaxis: "日" description: "通常の API キーとユーザー API キーの API リクエスト。" consolidated_page_views_browser_detection: + title: "ブラウザ検出による統合ページビュー (推奨)" + title_legacy: "ブラウザ検出による統合ページビュー (推奨)" xaxis: page_view_anon_browser: "匿名ブラウザ" page_view_logged_in_browser: "ログイン中のブラウザ" @@ -1203,10 +1216,8 @@ ja: description: "ログインユーザー、匿名ユーザー、既知のクローラー、およびその他のトラフィックのページビュー。" description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" xaxis: "日" yaxis: "DAU/MAU" - description: "前日にログインしたメンバーの数を先月にログインしたメンバーの数で割った数 - コミュニティーの「粘着性」を示す割合 % を返します。20% 以上を目指してください。" daily_engaged_users: title: "1 日のエンゲージユーザー" xaxis: "日" @@ -1491,11 +1502,15 @@ ja: labels: provider: ログインプロバイダー no_accounts: "関連アカウントはありません" + discourse_connect: "Discourse Connect による SSO" + no_sso_accounts: "SSO レコードのないアカウント" + total_users: "合計アクティブユーザーアカウント数" description: "ログインプロバイダーでグループ化された関連アカウントの数を表示します。ソーシャルログインが有効になっている場合にのみ適用有れます。" dashboard: problem: twitter_login: 'X ログインは現在動作していないようです。サイト設定で資格情報を確認してください。' group_email_credentials: 'グループ %{group_full_name} のメールの資格情報に問題がありました。この問題が解決されるまで、このグループの受信トレイからメールを送信できません。%{error}' + upcoming_change_stable_opted_out: 'あなたのサイトは「%{upcoming_change}」の次回の変更をオプトアウトしていますが、この変更は「安定」ステータスに達したため、まもなく削除されるか正式に公開されます。この変更の詳細については、次回の変更ページをご覧ください。' rails_env: "サーバーは %{env} モードで実行中です。" host_names: "現在 config/database.yml ファイルは、デフォルトの localhost をホスト名として使用しています。あなたのサイトのホスト名に更新してください。" sidekiq: 'Sidekiq が実行していません。メール送信などの多くのタスクは sidekiq により非同期に実行されます。少なくとも 1 つの sidekiq プロセスが実行していることを確認してください。Sidekiq についてはこちらをご覧ください。' @@ -1526,6 +1541,7 @@ ja: category_style_deprecated: "あなたの Discourse は現在、Discourse 3.2 の最終ベータリリース前に削除が予定されている非推奨のカテゴリスタイルを使用しています。選択したカテゴリスタイルを維持する方法については、単一カテゴリスタイルのサイト設定をご覧ください。" maxmind_db_configuration: 'サーバーは逆 IP ルックアップに MaxMind データベースを使用するように構成されていますが、有効な MaxMind アカウント ID が構成されていないため、今後、MaxMind データベースのダウンロードに失敗する可能性があります。詳しくは、こちらのガイドをご覧ください。' admin_sidebar_deprecation: "古い管理者レイアウトは使用できなくなり、新しいサイドバーレイアウトに代わります。古いレイアウトは次のリリースで削除されます。その前に新しいサイドバーレイアウトを使用し始める場合は、今すぐ構成してください。" + starttls_disabled: "送信メールの構成では STARTTLS が無効になっています。これはほとんど必要ありません。環境から
DISCOURSE_SMTP_ENABLE_START_TLS=false
を削除することを検討してください。詳細については、こちらのトピックをご覧ください。" back_from_logster_text: "サイトに戻る" site_settings: allow_bulk_invite: "CSV ファイルのアップロードによる一括招待を許可する" @@ -1570,6 +1586,7 @@ ja: allow_duplicate_topic_titles_category: "カテゴリが異なる場合、同一の重複したタイトルを持つトピックを許可する。allow_duplicate_topic_titles は無効にする必要があります。" unique_posts_mins: "同じコンテンツを投稿できるまでの時間 (分)" educate_until_posts: "最初の (n) 件の新規投稿を入力し始めたときに、新規ユーザーチュートリアルのパネルをポップアップ表示します。" + title: "このサイトの名前。匿名ユーザーを含むすべての訪問者に表示されます。このタイトルを変更すると、PWA のユーザーに、アプリの更新またはアンインストールを求めるプロンプトが送信される場合があります。" site_description: "このサイトを一文で説明してください。匿名ユーザーを含むすべての訪問者に表示されます。" short_site_description: "短い言葉で簡単に説明してください。匿名ユーザーを含むすべての訪問者に表示されます。" contact_email: "このサイトの責任者の主要連絡先のメールアドレス。重要な通知に使用され、サイト情報にも表示されます。公開サイトの匿名ユーザーにも表示されます。" @@ -1577,6 +1594,7 @@ ja: crawl_images: "リモート URL から画像を取得して、正しい幅と高さの寸法を挿入する。" download_remote_images_to_local: "リモート (ホットリンク) 画像をダウンロードしてローカル画像に変換します。これにより、サイトから画像が削除された場合でも、コンテンツが保持されます。" download_remote_images_threshold: "リモート画像をダウンロードするために必要なディスクの最低空き容量 (パーセント表示)" + disabled_image_download_domains: "これらのドメインのリモート画像をダウンロードしない。" block_hotlinked_media: "ユーザーがリモート (ホットリンク) メディアを投稿に導入できないようにします。'download_remote_images_to_local' でダウンロードされないリモートメディアは、プレースホルダーリンクに置き換えられます。" block_hotlinked_media_exceptions: "block_hotlinked_media 設定から除外されるベース URL のリストです。プロトコルを含めます (例: https://example.com)。" editing_grace_period: "投稿から (n) 秒間は、編集しても投稿履歴に新しいバージョンを作成しない。" @@ -1615,6 +1633,7 @@ ja: logo: "サイトの左上にあるロゴ画像です。高さ 120、縦横比 3:1を超える広幅の長方形の画像を使用してください。空白のままにすると、サイトタイトルのテキストが表示されます。" logo_small: "あなたのサイトの左上にある小さなロゴ画像です。下にスクロールしたときに見えます。 120×120 の正方形の画像を使用してください。空白のままにすると、ホームグリフが表示されます。" digest_logo: "サイトのメール要約の上部で使用されるロゴの代替画像です。広い長方形の画像を使用してください。SVG 画像を使わないでください。空白のままにすると、`logo` で設定した画像が使用されます。" + mobile_logo: "あなたのサイトのモバイル版で使用されるロゴ。ヘッダーが混雑しないように正方形のアイコンを使用することをお勧めしますが、高さ 120、アスペクト比 3:1 以上の幅広の長方形画像を使用できます。空白のままにする後、ロゴ設定の画像が使用されます。" logo_dark: "'logo' サイト設定の代替のダークスキーム。" logo_small_dark: "'logo small' サイト設定の代替のダークスキーム。" mobile_logo_dark: "'mobile logo' サイト設定の代替のダークスキーム。" @@ -1625,8 +1644,11 @@ ja: opengraph_image: "デフォルトの opengraph 画像。ページにほかの適切な画像がない場合に使用されます。空のままにすると、large_icon が使用されます" x_summary_large_image: "Twitter カードの 'summary large image' (幅 280 以上、高さ 150 以上である必要があり、.svg を使用できません)。空のままにすると、.svg でない限り opengraph_image を使って通常のカードメタデータが生成されます。" notification_email: "システムからの重要なメール送信に使用する from: メールアドレス。メールが届くように、ここに指定されたドメインは SPF、DKIM、逆引き PTR レコードが正しく設定されている必要があります。" + email_custom_headers: "カスタムメールヘッダーのリスト" email_subject: "標準メールのカスタマイズ可能な件名形式。https://meta.discourse.org/t/customizing-specific-system-email-templates/88323 をご覧ください" detailed_404: "特定のトピックにアクセスできない詳細な理由をユーザーに提供します。注意: URL が有効なトピックにリンクしているかどうかがユーザーにわかるため、安全性が低くなります。" + enforce_second_factor: "ユーザーに Discourse UI にアクセスする前に二要素認証 (2FA) を有効にするように要求します。この設定は API または 'DiscourseConnect プロバイダー' 認証に影響しません。enforce_second_factor_on_external_auth が有効である場合、ユーザーは 2FA をセットアップした後、外部認証プロバイダーを使用してログインできなくなります。" + enforce_second_factor_on_external_auth: "ユーザーに常に二要素認証 (2FA) を使用するように要求します。これを有効にすると、2FA が有効である場合に、ソーシャルログインなどの外部認証方法でログインできなくなります。無効にすると、ユーザー名とパスワードでログインする際に 2FA のみを確認する必要があります。`enforce_second_factor` 設定も参照してください。" force_https: "サイトが HTTPS のみを使用するように強制する。警告: HTTPS が完全にセットアップ済みであり、すべての場所で機能していることを確認するまで、これを有効にしないでください!CDN、すべてのソーシャルログイン、および外部ロゴ/依存関係がすべて HTTPS 対応であることを確認しましたか?" summary_score_threshold: "「このトピックを要約」に含まれるために必要な投稿の最低スコア" summary_posts_required: "'このトピックを要約' を有効にするために最低限必要なトピック内の投稿数。この設定を変更すると、1 週間以内で遡って適用されます。" @@ -1684,7 +1706,10 @@ ja: ga_universal_domain_name: "Google Universal Analytics ドメイン名。例: mysite.com。https://google.com/analytics をご覧ください" ga_universal_auto_link_domains: "Google Universal Analytics クロスドメイントラッキングを有効にする。これらのドメインへの発信リンクにはクライアント ID が追加されます。Google のクロスドメイントラッキングガイドをご覧ください。" gtm_container_id: "Google Tag Manager コンテナ ID。例: GTM-ABCD12E。
注意: コンテンツセキュリティポリシー (CSP) が有効な場合に GTM を使用するには、メタのドキュメントをご覧ください: Google Tag Manager スクリプトでノンスを使用する。" + google_site_verification_token: Google 検索コンソールの認証トークン。HTML の head にメタタグとして含まれます。 enable_escaped_fragments: "ウェブクローラーが検出されない場合、Google の Ajax-Crawling API にフォールバックする。https://developers.google.com/webmasters/ajax-crawling/docs/learn-more をご覧ください。" + moderators_manage_categories: "モデレーターによるカテゴリの作成と管理を許可する" + moderators_manage_groups: "モデレーターによるグループの作成と管理を許可する" moderators_change_post_ownership: "モデレーターによる投稿の所有権の変更を許可する" cors_origins: "CORS を許可。オリジンは http:// か https:// を含む必要があります。CORS を有効にするには、環境変数 DISCOURSE_ENABLE_CORS に true を設定する必要があります。" use_admin_ip_allowlist: "管理者はスクリーン対象 IP リスト (管理者 > ログ > スクリーン対象 IP) に定義されている IP アドレスからのみログインできる。" @@ -1696,9 +1721,9 @@ ja: blocked_crawler_user_agents: "サイトへのアクセスを許可してはいけないウェブクローラーを識別する、ユーザーエージェント文字列の大文字と小文字を区別しない一意の語。ホワイトリストが定義されている場合は適用されません。" slow_down_crawler_user_agents: '"slow down crawler rate" 設定の構成のとおりに速度の制限が必要なウェブクローラーのユーザーエージェント。各値の長さは 3 文字以上です。' slow_down_crawler_rate: "このレートに slow_down_crawler_user_agents が指定されている場合、このレートはすべてのクローラーに適用されます (リクエスト間の遅延秒数)" + llms_txt: "LLM クローラー向けに /llms.txt に配信するテキストファイルをアップロードする。詳細は llmstxt.org をご覧ください。" content_security_policy: "Content-Security-Policy (CSP) を有効にします。CSP は、クロスサイトスクリプティング (XSS) やデータインジェクションなどの特定の種類の攻撃を防ぐのに役立つ追加のセキュリティレイヤーです。" content_security_policy_report_only: "Content-Security-Policy-Report-Only (CSP) を有効にする" - content_security_policy_collect_reports: "/csp_reports で CSP 違反レポートの収集を有効にする" content_security_policy_frame_ancestors: "CSP を介してこのサイトを iframe に埋め込むことのできるユーザーを制限する。許可されるホストを 埋め込みで制御します。" content_security_policy_script_src: "追加のホワイトリストにあるスクリプトソース。現在のホストと CDN はデフォルトで含まれています。コンテンツセキュリティポリシー (CSP) で XSS 攻撃を緩和する をご覧ください。その他のホストソースは strict-dynamic が有効であるため無視されます。" invalidate_inactive_admin_email_after_days: "この日数以上サイトを訪問していない管理者アカウントは、ログインする前にメールアドレスを再確認する必要があります。0 に設定すると無効になります。" @@ -1726,6 +1751,7 @@ ja: top_page_default_timeframe: "匿名ユーザーのデフォルトのトップページ期間 (ログインユーザーの場合は最終アクセスに基づいて自動的に調整されます)。" moderators_view_emails: "モデレーターによるユーザーのメールアドレスの閲覧を許可します。" moderators_view_ips: "モデレーターによるユーザーの IP アドレスの閲覧を許可します。" + moderators_change_trust_levels: "モデレーターによるユーザーの信頼レベルの変更を許可する。" prioritize_username_in_ux: "ユーザーページ、ユーザーカード、および投稿の最初にユーザー名を表示する (無効にすると先に名前が表示されます)" enable_rich_text_paste: "テキストをコンポーザーに貼り付ける際に、HTML からマークダウンへの自動変換を有効にする。" send_old_credential_reminder_days: "日数後に古い資格情報についてリマインダーする" @@ -1736,6 +1762,8 @@ ja: whispers_allowed_groups: "特定のグループのメンバーに、トピック内での非公開コミュニケーションを許可します。" hidden_post_visible_groups: "これらのグループのメンバーが非表示の投稿を表示できるようにします。スタッフユーザーは常に非表示の投稿を表示できます。" allow_index_in_robots_txt: "このサイトはウェブ検索エンジンによるインデックス作成を許可されていることを robots.txt で指定します。robots.txt のオーバーライドはこちらで行えます。警告: 構成ルールを誤ると、期待どおりにサイトがクロールされない場合があります。" + blocked_email_domains: "ユーザーがアカウントの登録に使用できないメールドメインのリスト。サブドメインは自動的に指定されたドメインに対して処理されます。ワイルドカード記号の * と ? はサポートされていません。例: mailinator.com" + allowed_email_domains: "ユーザーがアカウントの登録に使用する必要のあるメールドメインのリスト。サブドメインは自動的に指定されたドメインに対して処理されます。ワイルドカード記号の * と ? はサポートされていません。警告: リストに含まれないメールドメインのユーザーは許可されません!" normalize_emails: "正規化されたメールアドレスが一意であるかをチェックします。正規化されたメールアドレスでは、ユーザー名のすべてのドットと、+ と @ 記号の間のすべてが削除されます。" auto_approve_email_domains: "このドメインリストにあるメールアドレスを持つユーザーは自動的に承認されます。サブドメインは自動的に指定されたドメインに対して処理されます。ワイルドカード記号の * と ? はサポートされていません。" hide_email_address_taken: "サインアップ中やパスワード忘れのフローの際に、指定したメールアドレスでアカウントが存在することをユーザーに知らせません。'パスワード忘れ' のリクエストでは、完全なメールアドレスが必要です。" @@ -1769,6 +1797,7 @@ ja: auth_overrides_email: "ログインするたびにローカルメールを外部サイトメールでオーバーライドし、ローカルでの変更を防止する。すべての認証プロバイダーに適用されます (警告: ローカルメールの正規化により、矛盾が生じる可能性があります)" auth_overrides_username: "ログインするたびにローカルユーザー名を外部サイトのユーザー名でオーバーライドし、ローカルでの変更を防止する。すべての認証プロバイダーに適用されます (警告: ユーザー名の長さ/要件の違いにより、矛盾が発生する可能性があります)。" auth_overrides_name: "ログインするたびにローカルのフルネームを外部サイトのフルネームでオーバーライドする。すべての認証プロバイダーに適用されます。" + auth_overrides_avatar: "ログインするたびにローカルのアバターを外部サイトのアバターでオーバーライドする。すべての認証プロバイダーに適用されます。" discourse_connect_overrides_avatar: "ユーザーのアバターを DiscourseConnect ペイロードの値でオーバーライドする。有効である場合、ユーザーは Discourse にアバターをアップロードできなくなります。" discourse_connect_overrides_location: "ユーザーの場所を DiscourseConnect ペイロードの値でオーバーライドし、ローカルの変更を防止する。" discourse_connect_overrides_website: "ユーザーのウェブサイトを DiscourseConnect ペイロードの値でオーバーライドし、ローカルの変更を防止する。" @@ -1848,6 +1877,7 @@ ja: invite_link_max_redemptions_limit_users: "通常のユーザーが生成した招待リンクに許可される最大引き換え数はこの値を超えることはできません。" alert_admins_if_errors_per_minute: "管理者アラートをトリガーするための 1 分あたりのエラー数。値 0 はこの機能を無効にします。注意: 再起動が必要です。" alert_admins_if_errors_per_hour: "管理者アラートをトリガーするための 1 時間あたりのエラー数。値 0 はこの機能を無効にします。注意: 再起動が必要です。" + categories_topics: '/categories ページに表示するトピックの数。0 に設定すると、2 つの列が対称になるように自動的に値が設定されます。「カテゴリと最新/トップトピック」カテゴリページスタイルのみに関係します。' suggested_topics: "トピックの下に表示される推奨トピックの数" limit_suggested_to_category: "推奨トピックには現在参照しているカテゴリのトピックのみを表示する。" suggested_topics_max_days_old: "投稿されて n 日経過したものを推奨トピックにしない。" @@ -1874,6 +1904,7 @@ ja: selectable_avatars_mode: "ユーザーが selectable_avatars リストからアバターを選択できるようにし、カスタムアバターのアップロードを選択した信頼レベルに制限できるようにします。" selectable_avatars: "ユーザーがプロファイル写真に選択できるアバターのコレクションを指定します。この選択肢はユーザープロファイルの作成時またはプロファイルアバターの更新時に表示されます。" allow_all_attachments_for_group_messages: "グループメッセージのメールの添付ファイルをすべて許可する。" + image_quality: "サイトにアップロードされる画像の品質レベルを設定します。品質が低いほどファイルサイズが小さくなります。" png_to_jpg_quality: "変換された JPG ファイルの品質 (1 は最低品質、99 は最高品質、100 は無効)。" recompress_original_jpg_quality: "アップロードされた画像ファイルの品質 (1 は最低品質、99 は最高品質、100 は無効)。" image_preview_jpg_quality: "サイズ変更された画像ファイルの品質 (1 は最低品質、99 は最高品質、100 は無効)。" @@ -1887,6 +1918,7 @@ ja: video_conversion_enabled: "アップロードした動画ファイルの動画変換を有効にします。これにより、動画をウェブ互換形式に変換できます。" video_conversion_service: "アップロードした動画の処理に使用する動画変換サービス。" mediaconvert_role_arn: "MediaConvert サービスの AWS IAM ロールの ARN。動画変換に AWS MediaConvert を使用する場合に必要です。" + mediaconvert_output_subdirectory: "MediaConvert が変換した動画を最終アップロード場所に移動する前に一時的に書き込む S3 バケットのサブディレクトリ。" min_ratio_to_crop: "高さのある画像のトリミングに使用される比率。幅 ÷ 高さの結果を入力します。" simultaneous_uploads: "コンポーザーにドラッグアンドドロップできるファイルの最大数" default_invitee_trust_level: "招待したユーザーのデフォルトの信頼レベル (0~4)。" @@ -2002,6 +2034,7 @@ ja: auto_silence_fast_typers_on_first_post: "`fast typing threshold` を満たさないユーザーを自動的に投稿禁止にする" auto_silence_fast_typers_max_trust_level: "高速タイパーを自動的に投稿禁止する最高信頼レベル" auto_silence_first_post_regex: "大文字と小文字を区別しない正規表現。合格すると、ユーザーの最初の投稿は投稿禁止になり、承認キューに送られます。例: aging|a[bc]a はまず、「raging」または「aba」または「aca」を含むすべての投稿を投稿禁止にします。最初の投稿のみに適用されます。使用廃止: 代わりに「ウォッチ語の投稿禁止」を使用してください" + moderator_guide_topic: "コミュニティーのモデレーション方法を説明するトピック。リンクはモデレーターと管理者のレビューキューに表示されます。" reviewable_claiming: "レビュー待ちコンテンツは、対応前に割り当てられる必要があるかどうか" reviewable_default_topics: "デフォルトでレビュー待ちコンテンツをトピック別にグループ化して表示する" reviewable_default_visibility: "レビュー待ち項目がこの優先度を満たさない場合、それを表示しない" @@ -2010,12 +2043,13 @@ ja: allow_all_users_to_flag_illegal_content: "匿名ユーザーには、違法コンテンツを管理者にメールで報告する必要があるという情報が表示されます。この設定は 'flag post allowed groups' より優先されます。" email_address_to_report_illegal_content: "空白のままにすると、デフォルトのサイト管理者のメールアドレスが使用されます。" cooldown_hours_until_reflag: "ユーザーが投稿をもう一度通報できるまでの時間" + slow_mode_prevents_editing: "「低速モード」では、'editing grace period' の後に編集できなくなりますか?" reply_by_email_enabled: "ユーザーがウェブサイトにログインせずに、直接メールでトピックに返信できるようにする機能を有効にします。詳細については、Meta のガイドをご覧ください。" reply_by_email_address: "メールによる返信の受信メールアドレスのテンプレート。例: %%{reply_key}@reply.example.com または replies+%%{reply_key}@example.com" alternative_reply_by_email_addresses: "メールによる返信の受信メールアドレスの代替テンプレートのリスト。例: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "受信メールにテキストの代わりに HTML を使用する。" strip_incoming_email_lines: "受信メールの各行から先頭と末尾の空白を削除する。" - disable_emails: "Discourse があらゆる種類のメールを送信しないようにする。'はい' を選択するとすべてのユーザーのメールが無効になります。'スタッフ以外' を選択すると、スタッフ以外のユーザーのみのメールを無効にします。" + allow_email_invites: "無効にすると、ユーザーは Discourse 経由で招待メールを送信できなくなります。" strip_images_from_short_emails: "2800 バイト未満のメールから画像を削除します。" short_email_length: "画像抑制の目的でメールが '短い' として分類される最大長をバイトで定義します。メールのサイズがこの設定を超過しない場合、メール内の画像 (アバターや絵文字など) はすべて削除されます。" display_name_on_email_from: "email from フィールドにフルネームを表示する" @@ -2033,6 +2067,7 @@ ja: mailgun_api_key: "Webhook メッセージを検証するために使用される Mailgun Secret API キー。" sendgrid_verification_key: "Webhook メッセージの検証に使用される Sendgrid 検証キー。" mailjet_webhook_token: "Webhook ペイロードの検証に使用されるトークン。webhook の 't' クエリパラメーターとして渡される必要があります。例: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Webhook ペイロードの検証に使用されるトークン。webhook の 't' クエリパラメーターとして渡される必要があります。例: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Webhook メッセージの検証に使用される Mandrill 認証キー。" postmark_webhook_token: "Webhook ペイロードの検証に使用されるトークン。webhook の 't' クエリパラメーターとして渡される必要があります。例: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Webhook ペイロードの検証に使用されるトークン。webhook の 't' クエリパラメーターとして渡される必要があります。例: https://example.com/webhook/sparkpost?t=supersecret" @@ -2075,6 +2110,7 @@ ja: relative_date_duration: "投稿後、投稿日が相対表示 (例: 7 日) から絶対表示 (2 月 20 日) に変わるまでの日数。" delete_user_max_post_age: "最初の投稿が (x) 日間以上前であるユーザーは削除しない" delete_all_posts_max: "[すべての投稿を削除] ボタンで一度に削除可能な最大投稿数。ユーザーがここで指定した以上の投稿を作成していた場合は、全投稿をまとめて削除することができません。またユーザーも削除されません。" + delete_all_posts_background_threshold: "バックグラウンドで削除が処理されるまでに、「すべての投稿を削除」ボタンで一度に削除できる投稿の最大件数。" delete_user_self_max_post_count: "セルフサービスのアカウント削除を許可しているときにユーザーが持つことのできる投稿の最大数。-1 を設定するとセルフサービスのアカウント削除が無効になります。" username_change_period: "アカウントがユーザー名を変更できる、登録後の最大日数 (0 に設定すると、ユーザー名の変更を禁止にします)。" email_editable: "登録後、ユーザーにメールアドレスの変更を許可します。" @@ -2103,8 +2139,9 @@ ja: enable_category_group_moderation: "グループが特定のカテゴリのコンテンツに介入することを許可する" group_in_subject: "メールの件名の %%{optional_pm} を PM の最初のグループの名前に設定する。「標準メールの件名のフォーマットをカスタマイズする」をご覧ください。" allow_anonymous_mode: "ユーザーが匿名モードに切り替えて投稿するオプションを有効にします。有効にすると、ユーザーはサイト全体で投稿またはトピックを作成する際に自分の ID を非表示することを選択できます。`allow anonymous likes` も参照してください。" + allow_likes_in_anonymous_mode: "サイトを匿名で閲覧しているユーザーが投稿に「いいね!」できるようにするには、この設定を有効にします。有効にすると、ユーザーはサイト全体で投稿またはトピックに「いいね!」する際に、自分の ID を非表示にすることを選択できます。この設定には `allow_anonymous_mode` 設定が有効になっている必要があります。" + anonymous_posting_allowed_groups: "匿名投稿を有効にできるグループ。この設定には `allow anonymous mode` 設定が有効になっている必要があります。" anonymous_account_duration_minutes: "匿名性を守るため、N 分毎に各ユーザーの匿名アカウントを作成しなおします。例 : 600 に設定すると、最終投稿から 600 分が経過し、さらにユーザーが匿名に切り替えると、新しい匿名アカウントが作成されます。" - hide_user_profiles_from_public: "匿名ユーザーのユーザーカード、ユーザープロファイル、およびユーザーディレクトリを無効にする。" hide_new_user_profiles: "信頼レベル 1 以下のユーザープロファイルは、そのユーザーが初めて投稿するまで一般ユーザーと信頼レベル 1 のユーザーに対して非表示になります。この機能は must_approve_users と invite_only サイトでは無条件に無効になります。" allow_users_to_hide_profile: "ユーザーがプロファイルとプレゼンスを非表示することを許可する" hide_user_activity_tab: "管理者と自分以外のユーザープロファイルでアクティビティタブを非表示にします。" @@ -2118,6 +2155,7 @@ ja: clean_up_unused_staged_users_after_days: "未使用のステージングユーザー (投稿なし) が削除されるまでの日数。クリーンアップを無効にするには、0 に設定します。" user_selected_primary_groups: "ユーザーが独自のプライマリーグループを設定することを許可する" max_notifications_per_user: "ユーザー当たりの通知の最大数。この数を超えると、古い通知は削除されます。毎週適用されます。0 に設定すると無効になります" + allowed_user_website_domains: "ユーザーのウェブサイトはこれらのドメインに対して検証されます。" allow_profile_backgrounds: "ユーザーにプロファイル背景のアップロードを許可します。" get_a_room_threshold: "警告を受けるまでに、ユーザーが同じトピックの同じ人物に行える投稿数。" dont_feed_the_trolls_threshold: "警告を受けるまでの他のユーザーからの通報数。" @@ -2196,6 +2234,7 @@ ja: disable_watched_word_checking_in_user_fields: "ユーザーフィールドでのウォッチ中の単語のチェックを無効にする" watched_words_regular_expressions: "単語をフィルタリングするための正規表現の使用を許可します。有効にすると、この機能は大文字と小文字を区別して、慎重な扱いを要する単語をグループ化します。そして選択されたすべての単語を 1 つの正規表現にコンパイルし、通常のウォッチ中の単語に単語境界を追加します。そのため、この正規表現を使用するフィルタリング手法では、より洗練された単語パターンをサポートすることで、コンテンツモデレーションに対する制御レイヤーがさらに追加されます。この設定は、元もテキストを任意の文字で置換したテキストに簡単に置き換えることも可能です。" enable_fast_edit: "投稿選択メニューにインラインで小さな選択範囲を編集できるボタンを追加します。" + old_post_notice_days: "新しいユーザーと復帰ユーザーの投稿の通知が非表示になるまでの日数。公式投稿の通知は常に表示されます。" new_user_notice_tl: "新しいユーザーの投稿通知を閲覧するために必要な最低信頼レベル。" returning_user_notice_tl: "リピートユーザーの投稿通知を閲覧するために必要な最低信頼レベル。" returning_users_days: "ユーザーがリピートとみなされる経過日数。" @@ -2277,6 +2316,7 @@ ja: force_lowercase_tags: "すべての新しいタグが完全に小文字になるように強制する。" create_post_for_category_and_tag_changes: "トピックのカテゴリまたはタグが変更されたときにささやき投稿を作成する。ささやき投稿を有効にする必要があります。" automatically_clean_unused_tags: "どのトピックや個人メッセージにも使用されていないタグを毎日自動的に削除します。" + default_watched_precedence_over_muted: "ミュートしているものも含み、ユーザーがウォッチ中のカテゴリまたはタグ内のトピックについてユーザーに通知する" company_name: "会社または組織の名前。空白のままにすると、定型の利用規約またはプライバシーに関する通知は提供されません。" governing_law: "利用規約やプライバシーポリシーなど、サイトの法的な側面を管理する管轄を指定します。これは通常、サイトを運営する会社が登録している国または州、または事業を行っている国または州です。" city_for_disputes: "このフォーラムの使用に関連する紛争を解決するための管轄として使用される都市を指定します。この情報は通常、フォーラムの利用規約などの法的文書に含まれます。" @@ -2292,10 +2332,10 @@ ja: sitemap_page_size: "各サイトマップページに含める URL の数。最大 50,000" enable_user_status: "ユーザーがカスタムステータスメッセージ (絵文字 + 説明) を設定できるようにする。" enable_user_tips: "重要な機能をユーザーに説明する新しいユーザーヒントを有効にする" + short_title: "短いタイトルはユーザーのホーム画面、ランチャー、またはスペースが限られている場所で使用されます。12 文字以内です。このタイトルを変更すると、PWA のユーザーに、アプリの更新またはアンインストールを求めるプロンプトが送信される場合があります。" dashboard_hidden_reports: "ダッシュボードから指定されたレポートを非表示にすることを許可する。" dashboard_visible_tabs: "表示するダッシュボードのタブを選択します。" dashboard_general_tab_activity_metrics: "アクティビティメトリクスとして一般タブに表示されるレポートを選択します。" - gravatar_enabled: "ユーザーアバターに Gravatar サービスを使用する。これにより、ユーザーはアバターを Gravatar に切り替えられなくなりますが、すでに使用しているユーザーには影響しません。" gravatar_name: "Gravatar サービスプロバイダーの名前を指定します。この名前は通常、Gravatar アバターをサイトに提供するソースを特定するために使用されます。" gravatar_base_url: "Gravatar プロバイダーの API にアクセスするための URL を指定します。この設定は、メールアドレスをアバター画像が保存されている Gravatar URL に変換するために重要です。" gravatar_login_url: "`gravatar_base_url` に相対する URL。ユーザーに Gravatar サービスへのログインを提供します。" @@ -2312,6 +2352,7 @@ ja: welcome_banner_image: "ウェルカムバナーの背景に表示する画像を設定します。" welcome_banner_location: "ウェルカムバナーが表示されるページ内の場所を決定します。" welcome_banner_page_visibility: "ウェルカムバナーが表示されるページを決定します。" + welcome_banner_text_color: "上記の「ウェルカムバナーの画像」設定を構成した場合、この設定を使用してバナーを読み取りやすいテキストの色に変更してください。空白のままにするか、画像をアップロードしなかった場合は、アクティブなテーマによって色が設定されます。" splash_screen: "サイトアセットの読み込み中に一時的なローディング画面を表示します" navigation_menu: "サイトのメインナビゲーションメニューとして、サイドバーかヘッダーのドロップダウンを指定します。推奨はサイドバーです。" default_navigation_menu_categories: "選択されたカテゴリは、デフォルトでナビゲーションメニューのカテゴリセクションに表示されます。" @@ -2320,6 +2361,7 @@ ja: show_preview_for_form_templates: "フォームテンプレート機能のプレビューを有効にする" lazy_load_categories_groups: "これらのグループのユーザーに対してのみ、カテゴリ情報を遅延読み込みする。これにより、カテゴリ数の多いサイトのパフォーマンスが改善されます。" enable_auto_grid_images: "作成ツールに 3 つ以上の画像がアップロードされると、画像を自動的に [grid] タグで囲みます。" + experimental_impersonation_time_limit_minutes: "代理操作セッションが自動的に終了するまでの時間。" page_loading_indicator: "Discourse 内のページナビゲーション中に表示される読み込みインジケーターを構成します。「スピナー」はページ全体のインジケーターです。「スライダー」は画面上部に細いバーを表示します。" show_user_menu_avatars: "ユーザーメニューにユーザーアバターを表示する" about_page_hidden_groups: "/about ページに特定のグループのメンバーを表示しない。" @@ -2332,14 +2374,26 @@ ja: rich_editor: "作成ツールでリッチエディターを有効にして、すべてのユーザーがより直感的で使いやすく作成できるように、現在の Markdown モードと新しいリッチテキストエディターを切り替えられるようにする。" default_composition_mode: "コミュニティーの作成ツールのデフォルトモードを設定する。リッチテキストモードでは、よりモダンでほとんどのユーザーが使い慣れた書き心地を得られます。Markdown モードはより技術的な知識を持つユーザーに適しています。メンバーは作成ツールのツールバーにあるトグルでモードを切り替えられます。" reviewable_ui_refresh: "レビューキューで実験的な新しい UI を使用できるグループ。" + viewport_based_mobile_mode: "ビューポートの幅を使用してモバイル/デスクトップモードを決定する。この設定はまもなく削除されます。オフにする必要がある場合は、Meta でお知らせください。" content_localization_enabled: "ユーザーのブラウザまたはユーザの言語設定に基づいて、ローカライズされたコンテンツを表示します。コンテンツには、カテゴリ、タグ、投稿、トピックが含まれる場合があります。サポートされているロケールは、'content localization supported locales' に設定されているロケールです。" + content_localization_supported_locales: "ユーザーコンテンツを翻訳できるサポートされたロケールのリスト。'content localization enabled' が必要です。" content_localization_allowed_groups: "ローカライズされたコンテンツの更新を許可されたグループ。'content localization enabled' が必要です。" + content_localization_language_switcher: "訪問者が Discourse の翻訳バージョンとユーザー貢献コンテンツを切り替えられる言語切り替え機能をヘッダーに表示します。'content localization supported locales' に定義された言語を使用します" + content_localization_crawler_param: "'content localization enabled' と 'set locale from param' が有効な場合にローカライズされたコンテンツをウェブクローラーに配信する。サポートされたロケールのリストは 'content localization supported locales' に定義されています。" + content_localization_use_default_locale_when_unsupported: "優先言語が 'content localization supported locales' に含まれていないユーザーに、サイトのデフォルトのロケールでローカライズされたコンテンツを配信する。" + content_localization_allow_author_localization: "作成者が投稿メニューから自分のトピックと投稿を更新することを許可する。" + fake_upcoming_change: "これは実際の次回の変更ではありません。テストを目的としているため、この文字列の翻訳は不要です。" + floating_dismiss_topics_on_mobile: "モバイル版では、アクセスの簡易性とトピックリストの上部のスペースを空けるために「閉じる...」フローティングボタンを表示する" + rename_faq_to_guidelines: "この変更によって FAQ ページの名前が「ガイドライン」に変更されます。FAQ ページは引き続き /faq で利用できます。'faq url' 設定はこれまで通り機能します。" + enable_simplified_category_creation: "より少ないオプションとクリーンなインターフェースによって、シンプルなカテゴリ作成フローを実現します。" errors: invalid_css_color: "無効な色です。色名または 16 進数値を入力してください。" + invalid_datetime: "日付形式は無効です。有効な日付と時刻を入力したことを確認してください。" invalid_email: "無効なメールアドレスです。" invalid_username: "そのユーザー名のユーザは存在しません。" valid_username: "そのユーザー名のユーザーが存在します。" invalid_group: "その名前のグループは存在しません。" + invalid_topic: "その ID のトピックは存在しません。" invalid_integer_min_max: "値は %{min} から %{max} の間である必要があります。" invalid_integer_min: "値は %{min} 以上である必要があります。" invalid_integer_max: "値は %{max} を超えることはできません。" @@ -2374,12 +2428,6 @@ ja: reply_by_email_disabled: "この設定を有効にする前に 'reply by email' を有効にする必要があります。" discourse_connect_url_is_empty: "この設定を有効にする前に 'discourse connect url' を設定する必要があります。" enable_local_logins_disabled: "この設定を有効にする前に 'enable local logins' を有効にする必要があります。" - min_username_length_exists: "最も短いユーザー名 (%{username}) を超える最小のユーザー名の長さを設定することはできません。" - min_group_name_length_exists: "ユーザー名の最低文字数は、最も短いグループ名 (%{group_name}) より多い文字数に設定できません。" - min_username_length_range: "最小値を最大値より上にすることはできません。" - max_username_length_exists: "最も長いユーザー名 (%{username}) を下回る最大のユーザー名の長さを設定することはできません。" - max_group_name_length_exists: "ユーザー名の最大文字数は、最も長いグループ名 (%{group_name}) より少ない文字数に設定できません。" - max_username_length_range: "最大値を最小値よりも小さくすることはできません。" invalid_hex_value: "色値は 6 桁の 16 進数コードである必要があります。" empty_selectable_avatars: "この設定を有効にする前に、少なくとも 2 つの選択可能なアバターをアップロードする必要があります。" category_search_priority: @@ -2393,6 +2441,7 @@ ja: other: "リストには正確に %{count} 個の値が含まれている必要があります。" markdown_linkify_tlds: "値 '*' を含めることはできません。" google_oauth2_hd_groups: "この設定を有効にする前に、すべての 'google oauth2 hd' 設定を構成する必要があります。" + discourse_id_registration: "Discourse ID での自動登録に失敗しました。これは、ネットワーク接続の問題、ファイアウォールの制限、または Discourse ID サービスにアクセスできないことが原因である可能性があります。詳細については、サーバーログを確認するか、サポートにお問い合わせください。" linkedin_oidc_credentials: "この設定を有効にする前に、LinkedIn OIDC 資格情報 ('linkedin_oidc_client_id' および 'linkedin_oidc_client_secret') を構成する必要があります。" search_tokenize_chinese_enabled: "この設定を有効にする前に 'search_tokenize_chinese' を無効にする必要があります。" search_tokenize_japanese_enabled: "この設定を有効にする前に 'search_tokenize_japanese' を無効にする必要があります。" @@ -2401,7 +2450,9 @@ ja: invalid_uncategorized_category_setting: '「未分類トピックを許可」が有効でない場合、「未分類」カテゴリを選択できません。' invalid_search_ranking_weights: "search_ranking_weights サイト設定の値が無効です。例: '{0.1,0.2,0.3,1.0}'。各重みの最大値は 1.0 であることに注意してください。" content_localization_locale_limit: "サポートされているロケールの数は %{max} 以下である必要があります。" + content_localization_language_switcher_requirements: "言語切り替え機能には、'set locale from cookie' と 'allow user locale' サイト設定が有効であり、'content localization supported locales' に少なくとも 1 つの言語が含まれている必要があります。" mediaconvert_role_arn_required: "AWS MediaConvert を使って動画変換を行う場合、AWS IAM ロールの ARN が必要です。" + mediaconvert_output_subdirectory_required: "MediaConvert 出力サブディレクトリが必要です。" s3_credentials_required_for_video_conversion: "動画変換には S3 資格情報が必要です。S3 アクセスキーを構成するか、IAM プロファイルを有効にしてください。" keywords: clean_up_inactive_users_after_days: "有効化解除|非アクティブ|未有効化" @@ -2425,6 +2476,7 @@ ja: filter: description: status: "ステータスでトピックを絞り込みます" + in: "個人リスト内でトピックを絞り込みます" order: "特定のフィールドでトピックを並べ替えます" category: "特定のカテゴリのトピックを表示します" category_any: "指定されたカテゴリのトピックを表示します (カンマ区切り)" @@ -2437,13 +2489,15 @@ ja: exclude_tag: "特定のタグが付いたトピックを除外します" exclude_tags_any: "指定されたタグのいずれかが付いたトピックを除外します (カンマ区切り)" exclude_tags_all: "指定されたすべてのタグが付いたトピックを除外します (プラス区切り)" - tags_alias: "'tag:' フィルタのエイリアス" tag_group: "特定のタググループのタグが付いたトピックを表示します" exclude_tag_group: "特定のタググループのタグが付いたトピックを除外します" activity_before: "日付より前に最終アクティビティがあるトピックを表示します (YYYY-MM-DD または数日前)" activity_after: "日付より後に最終アクティビティがあるトピックを表示します (YYYY-MM-DD または数日前)" created_before: "日付より前に作成されたトピックを表示します (YYYY-MM-DD または数日前)" created_after: "日付より後に作成されたトピックを表示します (YYYY-MM-DD または数日前)" + created_by: "特定のユーザーまたはグループが作成したトピックを表示します" + created_by_user: "ユーザー名またはグループが作成したトピックを表示します (@ を使用しない)" + created_by_multiple: "いずれかの特定のユーザーまたはグループが作成したトピックを表示します (カンマ区切り)" latest_post_before: "日付より前に最終投稿があるトピックを表示します (YYYY-MM-DD または数日前)" latest_post_after: "日付より後に最終投稿があるトピックを表示します (YYYY-MM-DD または数日前)" likes_min: "指定した数以上の「いいね!」があるトピックを表示します" @@ -2473,6 +2527,7 @@ ja: in_new: "新規または新しい返信のあるトピックを表示します" in_new_replies: "新しい返信のあるトピックを表示します" in_new_topics: "新規トピックを表示します" + in_unseen: "まだ閲覧していないトピックを表示します" order_activity: "最終アクティビティで並べ替えます (新しい順)" order_activity_asc: "最終アクティビティで並べ替えます (古い順)" order_category: "カテゴリ名で並べ替えます (Z~A)" @@ -2493,6 +2548,18 @@ ja: order_views_asc: "ビュー数で並べ替えます (少ない順)" order_read: "最後に読んだ順で並べ替えます (新しい順)" order_read_asc: "最後に読んだ順で並べ替えます (古い順)" + order_hot: "ホットスコアで並べ替えます (多い順)" + order_hot_asc: "ホットスコアで並べ替えます (少ない順)" + users: "参加者別にトピックを絞り込みます" + users_any: "指定されたユーザーのいずれかを含むトピックを表示します (カンマ区切り)" + users_all: "指定されたすべてのユーザーを含むトピックを表示します (プラス区切り)" + exclude_users: "指定されたユーザーを含むトピックを除外します" + group: "グループ別にトピックを絞り込みます" + groups_any: "指定されたグループのいずれかを含むトピックを表示します (カンマ区切り)" + groups_all: "指定されたすべてのグループを含むトピックを表示します (プラス区切り)" + locale: "元の言語でトピックを絞り込みます" + locale_any: "指定されたいずれかの言語で原文が記述されたトピックを表示します (カンマ区切り)" + exclude_locale: "指定された言語で原文が記述されたトピックを除外します" discourse_connect: login_error: "ログインエラー" not_found: "あなたのアカウントが見つかりませんでした。サイトの管理者にお問い合わせください。" @@ -2656,6 +2723,7 @@ ja: updating_user_ids: "ユーザー ID を更新中…" deleting_source_user: "ソースユーザーを削除中…" user: + anonymized: "[ユーザー匿名化により削除されました]" deactivated: "'%{email}' からのバウンスメールが多すぎるため無効化されました。" deactivated_by_staff: "スタッフによる無効化" deactivated_by_inactivity: @@ -2823,46 +2891,22 @@ ja: new_version_mailer: title: "新しいバージョンメーラー" subject_template: "[%{email_prefix}] 新しい Discourse バージョン、更新が利用可能になりました" - text_body_template: | - [Discourse](https://www.discourse.org) の新しいバージョンを使用できるようになりました! - - 現在のバージョン: %{installed_version} - 新しいバージョン: **%{new_version}** - - - *[ワンクリックによるブラウザ更新](%{base_url}/admin/update)**を使って簡単に更新できます - - - [リリースノート](https://meta.discourse.org/tag/release-notes)で新機能を確認するか、[生の GitHub 変更ログ](https://github.com/discourse/discourse/commits/main)をご覧ください - - - Discourse の最新情報、ディスカッション、およびサポートについては、[meta.discourse.org](https://meta.discourse.org) にアクセスしてください new_version_mailer_with_notes: title: "注意付きの新しいバージョンメーラー" subject_template: "[%{email_prefix}] 更新が利用可能になりました" - text_body_template: | - [Discourse](https://www.discourse.org) の新しいバージョンを使用できるようになりました! - - 現在のバージョン: %{installed_version} - 新しいバージョン: **%{new_version}** - - - *[ワンクリックによるブラウザ更新](%{base_url}/admin/update)**を使って簡単に更新できます - - - [リリースノート](https://meta.discourse.org/tag/release-notes)で新機能を確認するか、[生の GitHub 変更ログ](https://github.com/discourse/discourse/commits/main)をご覧ください - - - Discourse の最新情報、ディスカッション、およびサポートについては、[meta.discourse.org](https://meta.discourse.org) にアクセスしてください - - ### リリースノート - - %{notes} flag_reasons: off_topic: "あなたの投稿は「話題に関係ない」として通報されました。コミュニティーはあなたの投稿がタイトルと最初の投稿で定義されているトピックにふさわしくないと判断しました。" inappropriate: "あなたの投稿は**不適切**として通報されました。コミュニティーは投稿が攻撃的、虐待的、ヘイト行為、または[コミュニティーガイドライン](%{base_path}/guidelines)に違反すると感じています。" illegal: "あなたの投稿は**違法**として通報されました: コミュニティーは投稿が法律に違反している可能性があると考えています。" spam: "あなたの投稿は「迷惑」として通報されました。コミュニティーはあなたの投稿に営利目的、宣伝目的の性質があり、トピックに意図される有用性または関連性がないと判断しました。" notify_moderators: "あなたの投稿は「モデレーターの注意要」として通報されました。コミュニティーはあなたの投稿にスタッフメンバーによる手動介入が必要であると判断しました。" + needs_approval: "投稿は**要承認**として通報されました。投稿は[コミュニティーガイドライン](%{base_path}/guidelines)を満たすかどうかを確認するために、自動的にスタッフメンバーによるレビュー待ちとなっています。" responder: off_topic: "投稿は**話題に関係ない**として通報されました。コミュニティーはあなたの投稿がタイトルと最初の投稿で定義されているトピックにふさわしくないと判断しました。" inappropriate: "投稿は**不適切**として通報されました。コミュニティーは投稿が攻撃的、虐待的、ヘイト行為、または[コミュニティーガイドライン](%{base_path}/guidelines)に違反すると感じています。" spam: "投稿は**迷惑**として通報されました。コミュニティーはあなたの投稿に営利目的、宣伝目的の性質があり、トピックに意図される有用性または関連性がないと判断しました。" notify_moderators: "投稿は**モデレーターの注意要**として通報されました。コミュニティーはあなたの投稿にスタッフメンバーによる手動介入が必要であると判断しました。" + needs_approval: "投稿は**要承認**として通報されました。投稿は[コミュニティーガイドライン](%{base_path}/guidelines)を満たすかどうかを確認するために、自動的にスタッフメンバーによるレビュー待ちとなっています。" flags_dispositions: agreed: "ご連絡いただきありがとうございます。問題があることを認め、現在調査しています。" agreed_and_deleted: "ご連絡いただきありがとうございます。問題があることを認め、投稿を削除しました。" @@ -2880,6 +2924,7 @@ ja: contents_hidden: "コンテンツを見るには投稿にアクセスしてください。" post_hidden: title: "非表示の投稿" + preview: "コミュニティーメンバーによる通報により投稿は非表示になりました。" subject_template: "コミュニティー通報によって非表示にされた投稿" text_body_template: | こんにちは。 @@ -2898,49 +2943,12 @@ ja: reviewable_queued_post_revise_and_reject: title: "あなたの投稿に対するフィードバック" subject_template: "%{topic_title} のあなたの投稿に対するフィードバック" - text_body_template: | - %{username} さん、こんにちは。 - - [%{topic_title}](%{topic_url}) のあなたの投稿をレビューした結果、以下のフィードバックがあります。 - - 理由: %{reason} - - フィードバック: %{feedback} - - 提案された変更を適用するには、以下で元の投稿を編集して再送信するか、ご質問がある場合はこのメッセージに返信してください。 - - -------- - - %{original_post} - - -------- - - よろしくお願いします。 - %{site_name} モデレーター reviewable_queued_post_revise_and_reject_new_topic: title: "あなたのトピックに対するフィードバック" subject_template: '"%{topic_title}" という新しいトピックに対するフィードバック' - text_body_template: | - %{username} さん、こんにちは。 - - "%{topic_title}" という新しいトピックをレビューした結果、以下のフィードバックがあります。 - - 理由: %{reason} - - フィードバック: %{feedback} - - 提案された変更を適用するには、以下でトピックの元の投稿を編集するか、ご質問がある場合はこのメッセージに返信してください。 - - -------- - - %{original_post} - - -------- - - よろしくお願いします。 - %{site_name} モデレーター post_hidden_again: title: "再度非表示" + preview: "コミュニティーメンバーによって投稿は再度非表示になりました。" subject_template: "コミュニティー通報によって非表示にされた投稿、スタッフ通知済み" text_body_template: | こんにちは。 @@ -3425,6 +3433,7 @@ ja: その他のガイダンスについては、[コミュニティーガイドライン](%{base_url}/guidelines)をご覧ください。 too_many_spam_flags: title: "迷惑通報が多すぎます" + preview: "迷惑行為の通報により、投稿は一時的に非表示になっています。" subject_template: "新規アカウントは保留中です" text_body_template: | こんにちは。 @@ -3447,6 +3456,7 @@ ja: その他のガイダンスについては、[コミュニティーガイドライン](%{base_url}/guidelines)をご覧ください。 silenced_by_staff: title: "スタッフにより投稿禁止にされました" + preview: "アカウントは一時的に保留されています。" subject_template: "アカウントは一時的に保留中です" text_body_template: | こんにちは。 @@ -3459,9 +3469,27 @@ ja: user_automatically_silenced: title: "ユーザーは自動的に投稿禁止にされました" subject_template: "新規ユーザー %{username} はコミュニティー通報により投稿禁止になりました" + text_body_template: | + これは自動メッセージです。 + + 新規ユーザー [%{username}](%{user_url}) は自動的に投稿禁止になりました。 + + [通報をレビュー](%{base_url}/review)してください。%{username} が誤って投稿禁止になっている場合は、[このユーザーの管理者ページ](%{user_url})で投稿禁止を解除ボタンをクリックしてください。 + + このしきい値は、`silence_new_user` サイト設定で変更できます。 user_automatically_silenced_with_reason: title: "ユーザーは自動的に投稿禁止にされました" subject_template: "新規ユーザー %{username} はコミュニティー通報により投稿禁止になりました" + text_body_template: | + これは自動メッセージです。 + + 新規ユーザー [%{username}](%{user_url}) は自動的に投稿禁止になりました。 + + 理由 - %{reason} + + [通報をレビュー](%{base_url}/review)してください。%{username} が誤って投稿禁止になっている場合は、[このユーザーの管理者ページ](%{user_url})で投稿禁止を解除ボタンをクリックしてください。 + + このしきい値は、`silence_new_user` サイト設定で変更できます。 spam_post_blocked: title: "迷惑投稿はブロックされました" subject_template: "同一リンクの連続投稿により、新規ユーザー %{username} の投稿をブロック" @@ -3512,6 +3540,11 @@ ja: こんにちは。 新規ユーザーの投稿が介入を必要としており、現在レビュー待ちとなっています。[こちらから承認または拒否](%{base_url}/review?type=ReviewableQueuedPost)してください。 + user_posts_deleted: + title: "ユーザー投稿は削除されました" + subject_template: "%{user} の投稿はすべて削除されました" + text_body_template: + other: "@%{user} による %{count} 件の投稿が @%{staff_user} によって削除されました。" unsubscribe_link: | メールの購読を解除するには、[こちらをクリック](%{unsubscribe_url})してください。 unsubscribe_link_and_mail: | @@ -3623,6 +3656,7 @@ ja: %{respond_instructions} user_replied: title: "ユーザーが返信しました" + preview: "誰かがあなたの投稿に返信しました。" subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3645,6 +3679,7 @@ ja: %{respond_instructions} user_quoted: title: "ユーザーが引用しました" + preview: "誰かが投稿内であなたを引用しました。" subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3656,6 +3691,7 @@ ja: %{respond_instructions} user_linked: title: "ユーザーがリンクしました" + preview: "投稿が別のトピックにリンクされました。" subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3667,6 +3703,7 @@ ja: %{respond_instructions} user_mentioned: title: "ユーザーがメンションしました" + preview: "誰かが投稿であなたをメンションしました" subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3722,6 +3759,7 @@ ja: %{respond_instructions} user_posted: title: "ユーザーが投稿しました" + preview: "あなたがウォッチ中のトピックに誰かが返信しました。" subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3755,6 +3793,7 @@ ja: %{respond_instructions} user_posted_pm: title: "ユーザーが PM を投稿しました" + preview: "誰かがあなたに PM を送信しました。" subject_template: "[%{email_prefix}] [PM] %{topic_title}" text_body_template: | %{header_instructions} @@ -3823,6 +3862,12 @@ ja: account_second_factor_disabled: title: "二要素認証が無効です" subject_template: "[%{email_prefix}] 二要素認証が無効です" + text_body_template: | + %{site_name} のアカウントの二要素認証が無効になったため、パスワードのみでログインできるようになりました。今後、追加の認証コードは不要です。 + + 二要素認証 (2FA) を無効にしなかった場合、誰かがあなたのアカウントを侵害した可能性があります。 + + 不明な点がございましたら、[スタッフにお問い合わせください](%{base_url}/about)。 digest: why: "%{since} 以降の %{site_link} の簡単な要約" since_last_visit: "最終アクセス以降" @@ -3843,6 +3888,7 @@ ja: preheader: "%{since} 以降の簡単な要約" forgot_password: title: "パスワードを忘れました" + preview: "パスワードをリセットしてください。" subject_template: "[%{email_prefix}] パスワードのリセット" text_body_template: | 誰かが [%{site_name}](%{base_url}) のパスワードをリセットしようとしてます。 @@ -3864,6 +3910,7 @@ ja: %{base_url}/session/email-login/%{email_token} set_password: title: "パスワードを設定" + preview: "アカウントのパスワードを設定してください。" subject_template: "[%{email_prefix}] パスワードを設定してください" text_body_template: | 誰かが [%{site_name}](%{base_url}) のあなたのアカウントにパスワードを追加するよう依頼しました。または、この検証済みのメールアドレスに関連付けられている対応のオンラインサービス (Google、Facebook など) を使用してログインすることもできます。 @@ -3874,6 +3921,7 @@ ja: %{base_url}/u/password-reset/%{email_token} admin_login: title: "管理者ログイン" + preview: "管理者ログインがリクエストされました。" subject_template: "[%{email_prefix}] ログイン" text_body_template: | 誰かが [%{site_name}](%{base_url}) のアカウントにログインしようとしています。 @@ -3884,6 +3932,7 @@ ja: %{base_url}/session/email-login/%{email_token} account_created: title: "アカウントが作成されました" + preview: "あなたの新しいアカウントが作成されました。" subject_template: "[%{email_prefix}] 新しいアカウント" text_body_template: | あなたの新規アカウントが %{site_name} で作成されました @@ -3912,7 +3961,7 @@ ja: title: "古いメールを確認してください" subject_template: "[%{email_prefix}] 現在のメールアドレスを確認してください" text_body_template: | - メールアドレスを変更する前に、あなたが現在のメールアカウントを管理していることを確認する必要があります。このステップを完了したら、当たらhしいメールアドレスを確認してください。 + メールアドレスを変更する前に、あなたが現在のメールアカウントを管理していることを確認する必要があります。このステップを完了したら、新しいメールアドレスを確認してください。 次のリンクをクリックして、%{site_name} の現在のメールアドレスを確認してください。 @@ -3928,6 +3977,7 @@ ja: %{base_url}/u/confirm-old-email/%{email_token} notify_old_email: title: "古いメールに通知" + preview: "メールアドレスが更新されました。" subject_template: "[%{email_prefix}] あなたのメールアドレスは変更されました" text_body_template: | これは、%{site_name} のあなたのメールアドレスが変更されたことを @@ -3950,6 +4000,7 @@ ja: %{new_email} signup_after_approval: title: "登録 - 承認後" + preview: "新しいアカウントが承認されました。" subject_template: "%{site_name} での承認が完了しました!" text_body_template: "%{site_name} へようこそ!\n\nスタッフメンバーが %{site_name} のあなたのアカウントを承認しました。\n\nこれで、次の場所からログインすると、新しいアカウントにアクセスできるようになりました。\n%{base_url}\n\n上記のリンクをクリックできない場合は、それをコピーしてウェブブラウザのアドレスバーに貼り付けてください。\n\n%{new_user_tips}\n\nコミュニティーでは常に[礼節ある行動](%{base_url}/guidelines)を取ってもらえると信じています。 \n\nではお楽しみください!\n" signup_after_reject: @@ -3961,6 +4012,7 @@ ja: %{reject_reason} signup: title: "登録" + preview: "アカウントを確認してください。" subject_template: "[%{email_prefix}] 新しいアカウントを確認してください" text_body_template: | %{site_name} へようこそ! @@ -3983,6 +4035,7 @@ ja: このリンクがクリックできない場合は、リンクをコピーしてウェブブラウザのアドレスバーに貼り付けてください。 suspicious_login: title: "新しいログインのアラート" + preview: "デバイスを認証してください。" subject_template: "[%{site_name}] %{location} からの新しいログイン" text_body_template: | こんにちは @@ -4009,8 +4062,14 @@ ja: page_not_found: page_title: "ページが見つかりません" title: "おっとっと!ページが存在しないか非公開です。" + subtitle: "どこを探しても、お探しのページは見つかりませんでした。" + popular_topics: "人気のトピック" + recent_topics: "最近のトピック" see_more: "もっと" + search_title: "代わりに検索しますか?" search_button: "検索" + home: "ホームに移動" + placeholder: "タイトルまたはキーワードでトピックを検索..." offline: title: "アプリを読み込めません" offline_page_message: "オフラインになっているようです!ネットワーク接続を確認して、もう一度お試しください。" @@ -4019,6 +4078,7 @@ ja: upload: edit_reason: "ダウンロードされた画像のコピー" unauthorized: "アップロードしようとしているファイルは許可されていません (許可されている拡張子: %{authorized_extensions})。" + images_only: "この設定では画像のみをアップロードできます。" pasted_image_filename: "貼り付けた画像" store_failure: "ユーザー #%{user_id} のアップロード #%{upload_id} の保存に失敗しました。" file_missing: "アップロードするファイルを指定する必要があります。" @@ -4106,6 +4166,8 @@ ja: latte_theme_name: "ラテ" summer_theme_name: "夏" dark_rose_theme_name: "ダークローズ" + errors: + cannot_edit_remote_copies: "色パレットのリモートコピーの編集はできません。" edit_this_page: "このページを編集" csv_export: boolean_yes: "はい" @@ -4557,12 +4619,18 @@ ja: nice_share: name: ナイスな共有 description: 25 人の訪問者に投稿を共有 + long_description: | + このバッジは、共有したリンクを 25 人の異なる外部訪問者がクリックすると付与されます。ディスカッションとこのコミュニティーの存在を伝えてくれ、ありがとう! good_share: name: イカした共有 description: 300 人の訪問者に投稿を共有 + long_description: | + このバッジは、300 人の異なる外部訪問者がクリックしたリンクを共有したときに付与されます。よくできました!あなたはたくさんの新しい人々に素晴らしいディスカッションを披露し、このコミュニティーの成長を助けました。 great_share: name: グレートな共有 description: 1000 人の訪問者に投稿を共有 + long_description: | + このバッジは、1000 人の異なる外部訪問者がクリックしたリンクを共有したときに付与されます。わぉ!あなたは大勢の新しいオーディエンスに興味深いディスカッションを促進し、コミュニティーを大きく成長させることに役立ちました! first_like: name: 初めての「いいね!」 description: 投稿に「いいね!」した @@ -4729,6 +4797,13 @@ ja: minimum_required_tags: other: "少なくとも %{count} 個のタグを選択する必要があります。" upload_row_too_long: "CSV ファイルには 1 行につき 1 つのタグが必要です。オプションで、タグの後にカンマを付け、その後のグループ名を続けることができます。" + bulk_create: + invalid_params: "パラメーターが無効です。タグ名の配列を指定してください。" + invalid_name: "タグ名が無効です。" + tag_too_long: + other: "タグが長すぎます (最大 %{count} 文字)。" + too_many_tags: + other: "タグが長すぎます。一度に作成できるタグは %{count} 個までです。大量にインポートするには、CSV アップロード機能を使用してください。" forbidden: invalid: other: "選択したタブはどれも使用できません" @@ -4750,6 +4825,9 @@ ja: rss_by_tag: "%{tag} がタグ付けされたトピック" finish_installation: congratulations: "おめでとうございます。Discourse をインストールしました!" + login_with_discourse_id: "Discourse ID でログイン" + discourse_id_help: "下のボタンを使って Discourse ID でログインしてください。

Discourse ID アカウントで、`DISCOURSE_DEVELOPER_EMAILS` 環境変数に一致するプライマリメールアドレスが使用されていることを確認してください。" + discourse_id_error_help: "メールアドレスの設定をスキップすることを選択しました。残念ながら、上記のエラーメッセージにより、セットアップを続行できません。この問題を meta.discourse.org にご報告ください。" register: button: "登録" title: "管理者アカウントの登録" @@ -4761,6 +4839,10 @@ ja: resend_email: title: "アクティベーションメールの再送" message: "

%{email} にアクティベーションメールを再送信しました" + discourse_id: + help: "あなたの Discourse ID をセットアップ中です。" + no_allowed_emails: "DISCOURSE_DEVELOPER_EMAILS に許可されたメールアドレスが構成されていません。サイトのセットアップを続行できません。" + global_notice: "管理者はまだログインしていません。`DISCOURSE_DEVELOPER_EMAILS` 環境変数に一致するメールアドレスを使用する Discourse ID アカウントを使って、インストールを完了してください。" safe_mode: title: "セーフモードを開始" description: "セーフモードを使用すると、テーマまたはクライアント側プラグインのカスタマイズを読み込まずにサイトをテストできます。サーバー側プラグインのカスタマイズは有効のままになります。" @@ -4772,15 +4854,18 @@ ja: enter: "セーフモードを開始" must_select: "セーフモードを開始するには、少なくとも 1 つのオプションを選択する必要があります。" dev_mode: - enter: "Enter" + title: "開発者モード" + enable_rack_mini_profiler: "セッションを変更しても Rack Mini Profiler が 1 時間持続できるようにする" wizard: title: "Discourse のセットアップ" step: setup: title: "はじめに" + description: "まずはコミュニティーの基本設定をセットアップしましょう。この設定は後でいつでも変更できます。" fields: title: label: "コミュニティー名" + placeholder: "純子のたまり場" default_locale: label: "言語" login_required: @@ -4828,9 +4913,20 @@ ja: review_by: "レビュー担当者" pr_summary: "%{commits} 個のコミットにより %{changed_files} 個のファイルが変更されました。%{additions} 個が追加され、%{deletions} 個が削除されました。" no_description: "GitHub でアカウントを作成して %{repo} の開発に貢献してください。" + pr_title: + default: "プルリクエスト" + draft: "プルリクエストの下書きを作成する" + open: "プルリクエストを開く" + approved: "プルリクエストを承認する" + changes_requested: "変更がリクエストされました" + merged: "プルリクエストがマージされました" + closed: "プルリクエストがクローズされました" status_date: open: "オープン" + draft: "下書き作成済み" approved: "承認" + changes_requested: "変更リクエスト" + merged: "マージ" closed: "閉鎖" discourse_push_notifications: popup: @@ -4846,9 +4942,12 @@ ja: confirm_body: "成功!通知を有効にしました!" custom: "%{username} からの通知(%{site_title})" staff_action_logs: + redacted: "[コンテンツは表示されません]" json_too_long: "値は列の長さ制限を超えているため、ログに記録されません" not_found: "は見つかりません" unknown: "不明" + site_setting: + update_existing_users: "既存のユーザーを更新しますか?%{value}" user_merged: "%{username} がこのアカウントにマージされました" user_delete_self: "%{url} から自分で削除" webhook_deactivation_reason: "あなたの Webhook は自動的に無効化されています。複数の '%{status}' HTTP ステータス失敗応答を受信しました。" @@ -4867,9 +4966,14 @@ ja: auto_deleted_hidden_posts: "非表示の投稿は自動的に破棄されました" seed_data_topic_updated: "シードデータのトピックが更新されました" seed_data_topic_deleted: "シードデータのトピックが削除されました" + upcoming_changes: + log_manually_toggled: "ユーザーによる手動切り替え" + log_promoted: > + この次回の変更は '%{change_status}' ステータスに達したため、あなたのサイトで自動的に有効化されました。詳細は、次回の変更ページをご覧ください。 reviewables: already_handled: "その投稿をすでにレビューし、再通報の必要はないと判断しました。" already_handled_and_user_not_exist: "誰かがすでにレビュー済みで、そのユーザーはもう存在しません。" + post_restored_by_author: "投稿は作成者によって復元されました" priorities: low: "低" medium: "普通" @@ -4934,14 +5038,19 @@ ja: description: "通報に同意し、この投稿を非表示にします。さらに、ユーザーに編集を求めるメッセージを自動送信します。" complete: "投稿は非表示になり、ユーザーに通知されました。" agree_and_edit: + title: "投稿を編集する" description: "通報に同意し、コンポーザーウィンドウを開いて投稿を編集します。" complete: "通報が承認され、投稿を編集できるようになりました。" delete: title: "削除" complete: "投稿は削除されました。" delete_and_ignore: + title: "投稿を削除して通報を無視する" + description: "キューから削除すると、投稿を削除して通報を無視します。最初の投稿である場合、トピックも削除されます。 " complete: "投稿は削除されました。" delete_and_ignore_replies: + title: "投稿と返信を削除して通報を無視する" + description: "キューから削除すると、投稿とそのすべての返信を削除して通報を無視します。最初の投稿である場合、トピックも削除されます" confirm: "投稿への返信も削除してよろしいですか?" complete: "投稿と返信を削除しました。" delete_and_agree: @@ -4955,19 +5064,23 @@ ja: complete: "投稿と返信を削除しました。" disagree_and_restore: title: "投稿を復元する" + description: "通報を却下して投稿を復元します" complete: "投稿を復元しました。" disagree_bundle: title: "いいえ" disagree: title: "投稿を維持する" + description: "通報を却下する" complete: "通報は無視されました。" discard_post: title: "投稿を破棄" complete: "投稿を破棄しました。" revise_and_reject_post: + title: "修正をリクエストする..." complete: "投稿を修正待ちで拒否しました。" ignore: title: "無視" + description: "対応せずにキューから削除します。" complete: "通報は無視されました。" ignore_and_do_nothing: title: "何もしない" @@ -4995,6 +5108,7 @@ ja: title: "いいえ" delete: title: "ユーザーの削除" + description: "ブロックせずにユーザーを削除します" complete: "ユーザーは削除されました。" block: title: "ユーザーの削除とブロック" @@ -5004,6 +5118,7 @@ ja: title: "はい" not_spam: title: "いいえ" + description: "迷惑行為ではないためユーザーを承認します" reject: title: "却下" bundle_title: "拒否…" @@ -5016,9 +5131,13 @@ ja: reject_and_delete: title: "投稿の拒否と削除" complete: "投稿を拒否し、削除しました。" + reject_and_delete_standalone: + title: "いいえ。投稿を削除する" reject_and_keep_deleted: title: "投稿を削除されたままにする" complete: "投稿を拒否し、削除のままにしました。" + reject_and_keep_deleted_standalone: + title: "いいえ。投稿を削除されたままにする" scrub: title: レコードを削除 approve_and_restore: @@ -5027,25 +5146,53 @@ ja: approve_and_unhide: title: "はい" complete: "投稿を承認して非表示状態を解除しました" - no_action_post: - title: "未対応" + post_actions: + bundle_title: "投稿をどうしますか?" delete_post: title: "投稿を削除" + description: "この投稿を削除します" complete: "削除された投稿" hide_post: title: "投稿を非表示にする" + description: "この投稿を非公開にします" + complete: "投稿は非表示になりました" + unhide_post: + title: "投稿を表示する" + description: "この投稿をすべてのユーザーに公開します" + complete: "投稿を公開しました" restore_post: title: "投稿を復元する" - no_action_user: - title: "未対応" + description: "削除されたこの投稿を復元します" + complete: "投稿を復元しました" + edit_post: + title: "投稿を編集する" + description: "この投稿のコンテンツを編集します" + complete: "投稿を編集しました" + user_actions: + bundle_title: "ユーザーをどうしますか?" silence_user: title: "ユーザーを投稿禁止にする" + description: "ユーザーが投稿できないようにします" + complete: "ユーザーを投稿禁止にしました" + reason: "ユーザーはレビューキューを通じて投稿禁止にされました" suspend_user: title: "ユーザーを凍結する" + description: "ユーザーアカウントを凍結します" + complete: "ユーザーを凍結しました" + reason: "ユーザーはレビューキューを通じて凍結されました" delete_user: title: "ユーザーを削除" + description: "このユーザーをフォーラムから削除します" complete: "削除されたユーザー" reason: "レビューキューを介して削除されました" + delete_and_block_user: + title: "削除してブロックする" + description: "ユーザーを削除して、ユーザーの IP/メールアドレスをブロックします" + complete: "ユーザーを削除してブロックしました" + delete_user_block: + title: "削除してブロックする" + description: "ユーザーを削除して、ユーザーの IP/メールアドレスをブロックします" + complete: "ユーザーを削除してブロックしました" email_style: html_missing_placeholder: "html テンプレートには %{placeholder} が含まれている必要があります。" notification_level: @@ -5088,6 +5235,11 @@ ja: reserved_id: "には ID: %{id} として予約されたキーワードがあります" unsafe_description: "には安全でない HTML 記述が含まれます" invalid_tag_group: "には無効なタググループがあります: %{tag_group_name}" + discourse_id: + already_registered: "このサイトはすでに Discourse ID で登録されています" + errors: + not_configured: "Discourse ID が構成されていません。まず Discourse ID を有効にしてください。" + regenerate_failed: "認証情報の再作成に失敗しました。後でもう一度お試しください。" activemodel: errors: <<: *errors diff --git a/config/locales/server.ko.yml b/config/locales/server.ko.yml index b95bdfa7f1ebf..5e78a762802d2 100644 --- a/config/locales/server.ko.yml +++ b/config/locales/server.ko.yml @@ -817,6 +817,7 @@ ko: read: "읽기" read_write: "읽기/쓰기" instructions: '"%{application_name}" 애플리케이션과 함께 사용할 새 사용자 API 키를 생성했습니다. 다음 키를 애플리케이션에 붙여 넣으세요.' + copied: "복사되었습니다!" otp_description: '"%{application_name}"에서 이 사이트에 액세스하도록 허용할까요?' otp_confirmation: confirm_title: '%{site_name}에서 계속하기' @@ -890,7 +891,9 @@ ko: description: "신고 유형, 게시자, 신고자 및 해결 시간을 포함한 신고 상태 목록입니다." visits: title: "사용자 방문 횟수" - xaxis: "일" + xaxis: + desktop: "데스크톱" + mobile: "모바일" yaxis: "방문 횟수" signups: title: "가입" @@ -935,10 +938,8 @@ ko: yaxis: "일" description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU / MAU" xaxis: "일" yaxis: "DAU / MAU" - description: "마지막 날에 로그인 한 회원 수를 지난 달에 로그인 한 회원 수로 나눈 값 – 커뮤니티 '고착성'을 나타내는 %를 반환합니다. 20 % 이상을 목표로하십시오." daily_engaged_users: title: "일일 참여 사용자" xaxis: "일" @@ -1345,7 +1346,6 @@ ko: allowed_crawler_user_agents: "사이트 액세스를 허용해야 하는 웹 크롤러의 사용자 에이전트입니다. 경고! 이것을 설정하면 여기에 나열되지 않은 모든 크롤러가 비활성화됩니다!" blocked_crawler_user_agents: "사이트 액세스가 허용되지 않아야 하는 웹 크롤러를 식별하는 사용자 에이전트 스트링에서 대소문자를 구분하지 않는 고유한 단어입니다. 허용 목록이 정의된 경우 적용되지 않습니다." slow_down_crawler_rate: "slow_down_crawler_user_agents를 지정하면 이 비율이 모든 크롤러에 적용됩니다(요청 간 지연 시간(초))." - content_security_policy_collect_reports: "/csp_reports에서 CSP 위반 리포트 수집 활성화" content_security_policy_frame_ancestors: "CSP를 통해 iframe에 이 사이트를 임베드할 수 있는 사용자를 제한합니다. 임베딩에서 허용된 호스트를 제어합니다." invalidate_inactive_admin_email_after_days: "이 기간에 사이트를 방문하지 않은 관리자 계정은 로그인하기 전에 이메일 주소를 다시 확인해야 합니다. 비활성화하려면 0으로 설정하세요." share_links: "공유 대화창에 표시할 항목과 순서를 결정합니다." @@ -1568,7 +1568,6 @@ ko: alternative_reply_by_email_addresses: "수신 이메일 주소로 회신 이메일을 보내는 데 사용하는 대체 템플릿 목록입니다. 예: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "수신 이메일에 텍스트 대신 HTML을 사용합니다." strip_incoming_email_lines: "수신 이메일의 각 줄에서 앞뒤 공백을 제거합니다." - disable_emails: "Discourse에서 모든 유형의 이메일을 보내지 못하도록 합니다. 모든 사용자의 이메일을 비활성화하려면 '예'를 선택합니다. 운영진이 아닌 사용자에 대해서만 이메일을 비활성화하려면 '비운영진'을 선택하세요." strip_images_from_short_emails: "2800바이트, 즉 2.73KB 이내 크기를 가지도록 이메일에서 이미지 제거" display_name_on_email_from: "이메일 보내는 사람 필드에 전체 이름 표시" unsubscribe_via_email: "사용자가 이메일 제목이나 본문에 '구독 해제'를 포함하여 답장하면 이메일을 구독 해제하도록 허용" @@ -1637,7 +1636,6 @@ ko: enable_category_group_moderation: "그룹이 특정 카테고리의 콘텐츠를 관리하도록 허용" group_in_subject: "PM의 첫 번째 그룹 이름으로 이메일 제목에 %%{optional_pm} 을 설정합니다. 참조: 표준 이메일의 제목 형식 사용자 지정" anonymous_account_duration_minutes: "익명성을 보호하기 위해 각 사용자에 대해 N분마다 새 익명 계정을 만듭니다. 예: 600으로 설정하면 마지막 게시물로부터 600분이 경과하고 사용자가 익명으로 전환하는 즉시 새 익명 계정이 생성됩니다." - hide_user_profiles_from_public: "익명 사용자의 사용자 카드, 사용자 프로필 및 사용자 디렉터리를 비활성화합니다." allow_users_to_hide_profile: "사용자가 자신의 프로필과 현재 상태를 숨기도록 허용" allow_featured_topic_on_user_profiles: "사용자가 자신의 사용자 카드 및 프로필에 있는 주제로 연결되는 링크를 제공하도록 허용합니다." show_inactive_accounts: "로그인한 사용자가 비활성 계정의 프로필을 탐색할 수 있도록 허용합니다." @@ -1785,10 +1783,6 @@ ko: reply_by_email_disabled: "이 설정을 활성화하기 전에 먼저 '이메일로 회신'을 활성화해야 합니다." discourse_connect_url_is_empty: "이 설정을 활성화하기 전에 'discourse connect url'을 설정해야 합니다." enable_local_logins_disabled: "이 설정을 활성화하기 전에 먼저 '로컬 로그인 활성화'를 활성화해야 합니다." - min_username_length_exists: "최소 아이디 길이를 가장 짧은 아이디(%{username}) 이상으로 설정할 수 없습니다." - min_username_length_range: "최솟값은 최댓값보다 크게 설정할 수 없습니다." - max_username_length_exists: "최대 아이디 길이를 가장 긴 아이디(%{username}) 이하로 설정할 수 없습니다." - max_username_length_range: "최솟값은 최댓값보다 작게 설정할 수 없습니다." invalid_hex_value: "색상 값은 6자리 16진수 코드여야 합니다." empty_selectable_avatars: "이 설정을 활성화하기 전에 먼저 두 개 이상의 선택 가능한 아바타를 업로드해야 합니다." category_search_priority: @@ -3524,8 +3518,6 @@ ko: title: "안전 모드 시작" enter: "안전 모드 시작" must_select: "안전 모드를 시작하려면 옵션을 하나 이상 선택하세요." - dev_mode: - enter: "시작하다" wizard: title: "Discourse Setup" step: @@ -3670,12 +3662,8 @@ ko: title: "예" approve_and_unhide: title: "예" - no_action_post: - title: "조치 없음" delete_post: complete: "게시물 삭제됨" - no_action_user: - title: "조치 없음" delete_user: complete: "사용자 삭제됨" reason: "검토 대기열을 통해 삭제됨" diff --git a/config/locales/server.lt.yml b/config/locales/server.lt.yml index 63ee3deb89f00..bfa37f9deb3a6 100644 --- a/config/locales/server.lt.yml +++ b/config/locales/server.lt.yml @@ -815,6 +815,7 @@ lt: read: "skaityti" read_write: "skaityti/rašyti" instructions: 'Ką tik sukūrėme naują vartotojo API raktą, kurį galėsite naudoti su „%{application_name}“, įklijuokite šį raktą į savo programą:' + copied: "Nukopijuota!" otp_description: 'Ar norite leisti „%{application_name}“ pasiekti šią svetainę?' otp_confirmation: confirm_title: Tęsti į %{site_name} @@ -878,7 +879,9 @@ lt: flagger: Pranešėjas visits: title: "Nario aplankymai" - xaxis: "Diena" + xaxis: + desktop: "Darbalaukis" + mobile: "Mobilus" yaxis: "Apsilankymai" signups: title: "Registracijos" @@ -922,10 +925,8 @@ lt: yaxis: "Diena" description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" xaxis: "Diena" yaxis: "DAU/MAU" - description: "Paskutinę dieną prisijungusių narių skaičius, padalytas iš narių, prisijungusių per pastarąjį mėnesį, skaičiaus – pateikiamas %, kuris rodo bendruomenės „lipnumą“. Siekite >20 proc." daily_engaged_users: title: "Kasdien dalyvaujantys vartotojai" xaxis: "Diena" @@ -1391,8 +1392,6 @@ lt: invalid_string_min_max: "Turi būti tarp %{min} ir %{max} simbolių." invalid_json: "Netinkamas JSON." invalid_reply_by_email_address: "Reikšmę turi sudaryti „%{reply_key}“ ir ji turi skirtis nuo pranešimo el. pašto." - max_username_length_exists: "Negalite nustatyti maksimalaus vartotojo vardo ilgio žemiau ilgiausio vartotojo vardo (%{username})." - max_username_length_range: "Negalite nustatyti didžiausios vertės žemiau minimumo." invalid_hex_value: "Spalvų reikšmės turi būti 6 skaitmenų šešioliktainiai kodai." empty_selectable_avatars: "Prieš įgalindami šį nustatymą, pirmiausia turite įkelti bent du pasirinktus avatarus." allowed_unicode_usernames: @@ -2510,8 +2509,6 @@ lt: title: "Įeikite į saugųjį režimą" enter: "Įeikite į saugųjį režimą" must_select: "Norėdami įjungti saugųjį režimą, turite pasirinkti bent vieną parinktį." - dev_mode: - enter: "Įeiti" wizard: title: "Discourse sąranka" step: @@ -2641,12 +2638,8 @@ lt: title: "Taip" approve_and_unhide: title: "Taip" - no_action_post: - title: "Jokių veiksmų" delete_post: complete: "Įrašas ištrintas" - no_action_user: - title: "Jokių veiksmų" delete_user: complete: "Naudotojas ištrintas" create_linked_topic: diff --git a/config/locales/server.lv.yml b/config/locales/server.lv.yml index 579f89029d49f..725dc51ca74e4 100644 --- a/config/locales/server.lv.yml +++ b/config/locales/server.lv.yml @@ -231,6 +231,7 @@ lv: user_api_key: deny: "Atcelt" read: "izlasīts" + copied: "Nokopēts!" otp_confirmation: confirm_title: Turpināt %{site_name} logging_in_as: Piesakoties kā %{username} @@ -256,7 +257,9 @@ lv: labels: flag: Tips visits: - xaxis: "Diena" + xaxis: + desktop: "Personālais dators" + mobile: "Mobilais" signups: xaxis: "Diena" new_contributors: @@ -492,8 +495,6 @@ lv: button: "Reģistrēties" resend_email: title: "Atkārtoti nosūtīt aktivācijas e-pastu" - dev_mode: - enter: "Ievadīt" wizard: step: setup: diff --git a/config/locales/server.nb_NO.yml b/config/locales/server.nb_NO.yml index 54341be7afe6a..59e48d017068f 100644 --- a/config/locales/server.nb_NO.yml +++ b/config/locales/server.nb_NO.yml @@ -607,6 +607,7 @@ nb_NO: deny: "Avbryt" read: "les" read_write: "les/skriv" + copied: "Kopiert!" otp_confirmation: confirm_title: Fortsett til %{site_name} logging_in_as: Logger inn som %{username} @@ -660,7 +661,9 @@ nb_NO: time_to_resolution: Løsningstid visits: title: "Brukerbesøk" - xaxis: "Dag" + xaxis: + desktop: "Skrivebord" + mobile: "Mobil" yaxis: "Antall besøk" signups: title: "Nye brukere" @@ -689,7 +692,6 @@ nb_NO: site_traffic: yaxis: "Dag" dau_by_mau: - title: "DAB/MAB" xaxis: "Dag" yaxis: "DAB/MAB" daily_engaged_users: @@ -1005,8 +1007,6 @@ nb_NO: invalid_integer_min_max: "Verdien må være mellom %{min} og %{max}." invalid_integer: "Verdien må være et heltall." invalid_string: "Ugyldig verdi" - min_username_length_range: "Du kan ikke sette minimum høyere enn maksimum." - max_username_length_range: "Du kan ikke sette maksimum under minimum." search: within_post: "#%{post_number} av %{username}" types: @@ -1280,8 +1280,6 @@ nb_NO: message: "

Vi har sendt aktiverings-eposten på nytt til %{email}" safe_mode: title: "Start sikkerhetsmodus" - dev_mode: - enter: "Angi" wizard: title: "Discourse-oppsett" step: @@ -1374,12 +1372,8 @@ nb_NO: title: "Ja" approve_and_unhide: title: "Ja" - no_action_post: - title: "Ingen handling" delete_post: complete: "Post slettet" - no_action_user: - title: "Ingen handling" delete_user: complete: "Bruker slettet" fallback_username: "bruker" diff --git a/config/locales/server.nl.yml b/config/locales/server.nl.yml index 7289f49ad0e20..f9194485be7db 100644 --- a/config/locales/server.nl.yml +++ b/config/locales/server.nl.yml @@ -60,8 +60,6 @@ nl: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "%{post_number} van %{username}" - too_many_urls: "Er kunnen niet meer dan 10 URL's inlijn worden ge-oneboxt in één verzoek." - concurrency_not_allowed: "Gelijktijdige inline oneboxverzoeken zijn niet toegestaan. Stuur één verzoek tegelijk." components: enabled_filter: "Ingeschakeld" disabled_filter: "Uitgeschakeld" @@ -344,7 +342,6 @@ nl: slow_down_crawler_user_agent_must_be_at_least_3_characters: "User agents moeten minimaal 3 tekens lang zijn om te voorkomen dat de snelheid van legitieme gebruikers per ongeluk wordt beperkt." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Je kunt de volgende waarden niet toevoegen aan de instelling: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Je kunt megagegevens van afbeeldingen strippen niet uitschakelen als 'composer media optimization image enabled' is ingeschakeld. Schakel 'composer media optimization image enabled' uit voordat je megagegevens van afbeeldingen strippen uitschakelt." - x_summary_large_image_no_svg: "Twitter-samenvattingsafbeeldingen die worden gebruikt voor twitter:image-metadata mogen geen .svg-afbeelding zijn." tl0_and_anonymous_flag: "Voor anonieme gebruikers moet ofwel 'site contact email' of 'email address to report illegal content' worden opgegeven." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Voor deze instelling moet eerst de instelling 'allow anonymous mode' worden ingeschakeld." conflicting_google_user_id: 'De Google-account-ID voor deze account is gewijzigd; om beveiligingsredenen is medewerkerinterventie vereist. Neem contact op met een medewerker en wijs hem of haar op
https://meta.discourse.org/t/76575' @@ -1136,6 +1133,7 @@ nl: read: "lezen" read_write: "lezen/schrijven" instructions: 'We hebben zojuist een nieuwe API-gebruikerssleutel voor je gegenereerd voor gebruik met ''%{application_name}''. Plak de volgende link in je toepassing:' + copied: "Gekopieerd!" otp_description: 'Wil je ''%{application_name}'' toegang tot deze website geven?' otp_confirmation: confirm_title: Doorgaan naar %{site_name} @@ -1214,9 +1212,10 @@ nl: description: "Lijst van statussen van markeringen, waaronder het type markering, schrijver, melder, en tijd tot resolutie." visits: title: "Gebruikersbezoeken" - xaxis: "Dag" + xaxis: + desktop: "Desktop" + mobile: "Mobiel" yaxis: "Aantal bezoeken" - description: "Aantal bezoeken van aangemelde gebruikers." signups: title: "Registraties" xaxis: "Dag" @@ -1278,10 +1277,8 @@ nl: description: "Paginaweergaven voor aangemelde gebruikers, bekende crawlers en ander verkeer." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" xaxis: "Dag" yaxis: "DAU/MAU" - description: "Aantal leden dat zich de afgelopen dag heeft aangemeld, gedeeld door het aantal leden dat zich de afgelopen maand heeft aangemeld – geeft een % terug dat retentie van de community aangeeft. Het streven is > 20%." daily_engaged_users: title: "Dagelijkse actieve gebruikers" xaxis: "Dag" @@ -1768,7 +1765,6 @@ nl: slow_down_crawler_rate: "Als slow_down_crawler_user_agents is opgegeven, is deze beperking op alle crawlers van toepassing (aantal seconden vertraging tussen verzoeken)" content_security_policy: "Schakel Content-Security-Policy (CSP) in. CSP is een extra beveiligingslaag die bepaalde soorten aanvallen helpt voorkomen, waaronder cross-site scripting (XSS) en data-injectie." content_security_policy_report_only: "Content-Security-Policy-Report-Only (CSP) inschakelen" - content_security_policy_collect_reports: "Rapportverzameling voor CSP-schendingen inschakelen via /csp_reports" content_security_policy_frame_ancestors: "Beperken wie deze website kan insluiten in iframes via CSP. Beheer toegestane hosts op Insluiten" content_security_policy_script_src: "Aanvullende scriptbronnen op de toelatingslijst. De huidige host en CDN zijn standaard inbegrepen. Zie XSS-aanvallen beperken met Content Security Policy. (CSP). Andere hostbronnen worden genegeerd omdat strict-dynamic is ingeschakeld." invalidate_inactive_admin_email_after_days: "Beheerdersaccounts die de website dit aantal dagen niet hebben bezocht, dienen hun e-mailadres voor het aanmelden opnieuw te valideren. Stel dit in op 0 om uit te schakelen." @@ -2085,7 +2081,6 @@ nl: alternative_reply_by_email_addresses: "Lijst van alternatieve sjablonen voor adressen voor inkomende e-mail bij antwoorden per e-mail. Voorbeeld: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "HTML in plaats van tekst gebruiken voor inkomende e-mail." strip_incoming_email_lines: "Voorloop- en volgspaties uit elke regel van inkomende e-mails verwijderen." - disable_emails: "Voorkomen dat Discourse alle soorten e-mail verstuurt. Selecteer 'yes' om e-mails voor alle gebruikers uit te schakelen. Selecteer 'non-medewerkerf' om alleen e-mails voor medewerkers uit te schakelen." strip_images_from_short_emails: "Afbeeldingen met grootte van minder dan 2800 bytes uit e-mails verwijderen" short_email_length: "Bepaal de maximale lengte, in bytes, voor een e-mail om te worden geclassificeerd als 'kort' voor afbeeldingsonderdrukking. Als een e-mail niet groter is dan deze instelling, worden alle afbeeldingen (zoals avatars en emoji's) in de e-mail verwijderd." display_name_on_email_from: "Volledige namen in van-veld van e-mails weergeven" @@ -2103,6 +2098,7 @@ nl: mailgun_api_key: "Geheime API-sleutel van Mailgun voor het verifiëren van webhookberichten." sendgrid_verification_key: "SendGrid-verificatiesleutel die wordt gebruikt om webhookberichten te verifiëren." mailjet_webhook_token: "Token dat wordt gebruikt om webhookpayloads te verifiëren. Het moet worden doorgegeven als de queryparameter 't' van de webhook, bijvoorbeeld: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Token dat wordt gebruikt om webhookpayloads te verifiëren. Het moet worden doorgegeven als de queryparameter 't' van de webhook, bijvoorbeeld: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Mandrill-verificatiesleutel die wordt gebruikt om webhookberichten te verifiëren." postmark_webhook_token: "Token dat wordt gebruikt om webhookpayloads te verifiëren. Het moet worden doorgegeven als de queryparameter 't' van de webhook, bijvoorbeeld: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Token dat wordt gebruikt om webhookpayloads te verifiëren. Het moet worden doorgegeven als de queryparameter 't' van de webhook, bijvoorbeeld: https://example.com/webhook/sparkpost?t=supersecret" @@ -2174,7 +2170,6 @@ nl: group_in_subject: "Stel %%{optional_pm} in het e-mailonderwerp in op de naam van de eerste groep in PB; zie Onderwerpnotatie aanpassen voor standaard e-mails" allow_anonymous_mode: "Schakel deze instelling in om gebruikers toe te staan naar de anonieme modus te schakelen voor het plaatsen van berichten. Als dit is ingeschakeld, kunnen gebruikers ervoor kiezen om hun identiteit te verbergen wanneer ze berichten of topics maken op de site. Zie ook `allow anonymous likes`." anonymous_account_duration_minutes: "Om anonimiteit te beschermen, elke N minuten voor iedere gebruiker een nieuwe anoniem account maken. Voorbeeld: als dit is ingesteld op 600, wordt een nieuwe anonieme account gemaakt als er 600 minuten zijn verstreken na het laatste bericht EN de gebruiker naar anon overschakelt." - hide_user_profiles_from_public: "Gebruikerskaarten, gebruikersprofielen en gebruikerslijst voor anonieme gebruikers uitschakelen." hide_new_user_profiles: "Verberg gebruikersprofielen met vertrouwensniveau 1 of lager voor het publiek en gebruikers met vertrouwensniveau 1 totdat ze voor het eerst een bericht plaatsen. Deze functie is onvoorwaardelijk uitgeschakeld op sites met must_approve_users en invite_only." allow_users_to_hide_profile: "Gebruikers mogen hun profiel en aanwezigheid verbergen" hide_user_activity_tab: "Verberg het tabblad Activiteit in gebruikersprofielen, behalve voor beheerders en jezelf." @@ -2365,7 +2360,6 @@ nl: dashboard_hidden_reports: "Toestaan dat de opgegeven rapporten worden verborgen op het dashboard." dashboard_visible_tabs: "Kiezen welke dashboardtabbladen zichtbaar zijn." dashboard_general_tab_activity_metrics: "Kies rapporten die als activiteitsgegevens op het algemene tabblad worden weergegeven." - gravatar_enabled: "Gebruik de Gravatar-service voor gebruikersavatars. Dit voorkomt dat gebruikers overschakelen naar Gravatar voor hun avatars, maar heeft geen invloed op gebruikers die het al gebruiken." gravatar_name: "Geef de naam op van de Gravatar-provider. Deze naam wordt meestal gebruikt om de bron te identificeren die Gravatar-avatars aan de site levert." gravatar_base_url: "Geef de URL op voor toegang tot de API van de Gravatar-provider. Deze instelling is cruciaal voor het omzetten van e-mailadressen in Gravatar-URL's waar avatarafbeeldingen worden opgeslagen." gravatar_login_url: "URL relatief aan `gravatar_base_url`, waarmee de gebruiker zich kan aanmelden op de Gravatar-service." @@ -2446,12 +2440,6 @@ nl: reply_by_email_disabled: "Je moet eerst 'reply by email' inschakelen voordat je deze instelling inschakelt." discourse_connect_url_is_empty: "Je moet een 'DiscourseConnect-URL' instellen voordat je deze instelling inschakelt." enable_local_logins_disabled: "Je moet eerst 'enable local logins' inschakelen voordat je deze instelling inschakelt." - min_username_length_exists: "Je kunt de minimale gebruikersnaamlengte niet hoger instellen dan de kortste gebruikersnaam (%{username})." - min_group_name_length_exists: "Je kunt de minimale gebruikersnaamlengte niet hoger instellen dan de kortste groepsnaam (%{group_name})." - min_username_length_range: "Je kunt het minimum niet hoger instellen dan het maximum." - max_username_length_exists: "Je kunt de maximale gebruikersnaamlengte niet lager instellen dan de langste gebruikersnaam (%{username})." - max_group_name_length_exists: "Je kunt de maximale gebruikersnaamlengte niet lager instellen dan de langste groepsnaam (%{group_name})." - max_username_length_range: "Je kunt het maximum niet lager instellen dan het minimum." invalid_hex_value: "Kleurwaarden moeten 6-cijferige hexadecimale codes zijn." empty_selectable_avatars: "Je moet eerst minimaal twee selecteerbare avatars uploaden voordat je deze instelling inschakelt." category_search_priority: @@ -2510,7 +2498,6 @@ nl: exclude_tag: "Sluit topics met een specifieke tag uit" exclude_tags_any: "Sluit topics met een van de opgegeven tags uit (door komma's gescheiden)" exclude_tags_all: "Sluit topics met alle opgegeven tags uit (door plustekens gescheiden)" - tags_alias: "Alias voor 'tag:'-filter" tag_group: "Geef topics met tags van een specifieke taggroep weer" exclude_tag_group: "Sluit topics met tags van een specifieke taggroep uit" activity_before: "Geef topics weer met de laatste activiteit vóór een datum (JJJJ-MM-DD of aantal dagen geleden)" @@ -2675,7 +2662,7 @@ nl: not_approved: "Je account is nog niet goedgekeurd. Je ontvangt een melding via e-mail zodra je je kunt aanmelden." incorrect_username_email_or_password: "Onjuiste gebruikersnaam, e-mailadres of wachtwoord" incorrect_password: "Onjuist wachtwoord" - incorrect_password_or_passkey: "Onjuist wachtwoord of onjuiste passkey" + incorrect_password_or_passkey: "Onjuist wachtwoord of onjuiste toegangssleutel" wait_approval: "Bedankt voor het registreren. We laten het je weten wanneer je account is goedgekeurd." active: "Je account is geactiveerd en gereed voor gebruik." activate_email: "

Je bent er bijna! We hebben een activerings-e-mail naar %{email} gestuurd. Volg de instructies in de e-mail om je account te activeren.

Als deze niet aankomt, controleer dan je spammap.

" @@ -2796,7 +2783,7 @@ nl: one: "De gebruiker %{username} heeft %{count} bericht in een openbaar topic of persoonlijk bericht, dus deze kan niet worden verwijderd." other: "De gebruiker %{username} heeft %{count} berichten in openbare topics of persoonlijke berichten, dus deze kan niet worden verwijderd." cannot_bulk_delete: "Een of meerdere gebruikers kunnen niet worden verwijderd omdat ze beheerder zijn, te veel berichten hebben of een heel oud bericht hebben." - cannot_remove_all_auth: "Je moet minimaal één gekoppeld account, een passkey of een wachtwoord hebben ingesteld." + cannot_remove_all_auth: "Je moet minimaal één gekoppeld account, een toegangssleutel of een wachtwoord hebben ingesteld." unsubscribe_mailer: title: "Mailer Uitschrijven" subject_template: "Bevestig dat je geen e-mailupdates van %{site_title} meer wilt ontvangen" @@ -2924,35 +2911,9 @@ nl: new_version_mailer: title: "Nieuwe versie mailer" subject_template: "[%{email_prefix}] Nieuwe Discourse-versie, update beschikbaar" - text_body_template: | - Hoera, er is een nieuwe versie van [Discourse](https://www.discourse.org) beschikbaar! - - Jouw versie: %{installed_version} - Nieuwe versie: **%{new_version}** - - - Update via onze eenvoudige **[browserupdate in één klik](%{base_url}/admin/update)** - - - Lees wat er nieuw is in de [releaseopmerkingen](https://meta.discourse.org/tag/release-notes), of bekijk de [ruwe GitHub-veranderingslog](https://github.com/discourse/discourse/commits/main) - - - Ga naar [meta.discourse.org](https://meta.discourse.org) voor nieuws, discussie en ondersteuning voor Discourse new_version_mailer_with_notes: title: "Nieuwe versie Mailer met aantekeningen" subject_template: "[%{email_prefix}] update beschikbaar" - text_body_template: | - Hoera, er is een nieuwe versie van [Discourse](https://www.discourse.org) beschikbaar! - - Jouw versie: %{installed_version} - Nieuwe versie: **%{new_version}** - - - Update via onze eenvoudige **[browserupdate in één klik](%{base_url}/admin/update)** - - - Lees wat er nieuw is in de [release-opmerkingen](https://meta.discourse.org/tag/release-notes), of bekijk de [ruwe GitHub-veranderingslog](https://github.com/discourse/discourse/commits/main) - - - Bezoek [meta.discourse.org](https://meta.discourse.org) voor nieuws, discussie en ondersteuning voor Discourse - - ### Release-opmerkingen - - %{notes} flag_reasons: off_topic: "Je bericht is gemarkeerd als **off-topic**: de community vindt dat het niet goed bij het topic past, zoals momenteel bepaald door de titel en het eerste bericht." inappropriate: "Je bericht is gemarkeerd als **ongepast**: de community vindt het bericht beledigend, grof, hatelijk gedrag of een schending van [onze communityrichtlijnen](%{base_path}/guidelines)." @@ -3001,47 +2962,9 @@ nl: reviewable_queued_post_revise_and_reject: title: "Feedback op je bericht" subject_template: "Feedback op je bericht in %{topic_title}" - text_body_template: | - Hallo %{username}, - - We hebben je bericht in [%{topic_title}](%{topic_url}) beoordeeld en hebben wat feedback voor je. - - Reden: %{reason} - - Feedback: %{feedback} - - Je kunt je oorspronkelijke bericht hieronder bewerken en opnieuw indienen om de voorgestelde wijzigingen aan te brengen, of dit bericht beantwoorden als je nog vragen hebt. - - -------- - - %{original_post} - - - - Bedankt, - De moderators van %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "Feedback op je topic" subject_template: 'Feedback op nieuw topic met de titel "%{topic_title}"' - text_body_template: | - Hallo %{username}, - - We hebben je nieuwe topic met de titel "%{topic_title}" beoordeeld en hebben wat feedback voor je. - - Reden: %{reason} - - Feedback: %{feedback} - - Je kunt het oorspronkelijke bericht van je topic hieronder bewerken en opnieuw indienen om de voorgestelde wijzigingen aan te brengen, of dit bericht beantwoorden als je nog vragen hebt. - - -------- - - %{original_post} - - - - Bedankt, - De moderators van %{site_name} post_hidden_again: title: "Bericht opnieuw verborgen" subject_template: "Bericht verborgen door communitymarkeringen, medewerkers geïnformeerd" @@ -4902,8 +4825,6 @@ nl: deprecation_error_label: Laat Javascript-deprecaties een foutmelding geven enter: "Veilige modus starten" must_select: "Je moet ten minste één optie selecteren om naar de veilige modus te gaan." - dev_mode: - enter: "Enter" wizard: title: "Discourse instellen" step: @@ -5161,8 +5082,6 @@ nl: approve_and_unhide: title: "Ja" complete: "Bericht goedgekeurd en zichtbaar gemaakt" - no_action_post: - title: "Geen actie" delete_post: title: "Bericht verwijderen" complete: "Bericht verwijderd" @@ -5171,8 +5090,6 @@ nl: restore_post: title: "Bericht herstellen" complete: "Bericht hersteld" - no_action_user: - title: "Geen actie" silence_user: title: "Gebruiker dempen" complete: "Gebruiker gedempt" diff --git a/config/locales/server.pl_PL.yml b/config/locales/server.pl_PL.yml index eccfd76791607..c11b837468178 100644 --- a/config/locales/server.pl_PL.yml +++ b/config/locales/server.pl_PL.yml @@ -19,7 +19,7 @@ pl_PL: calendar_ics: "%Y%m%dT%H%M%SZ" date: month_names: - - null + - - Styczeń - Luty - Marzec @@ -60,8 +60,8 @@ pl_PL: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} przez %{username}" - too_many_urls: "Nie można umieścić więcej niż 10 adresów URL w jednym żądaniu." - concurrency_not_allowed: "Jednoczesne żądania inline-oneboxing nie są dozwolone. Prosimy o wysyłanie jednego żądania na raz." + too_many_urls: "Nie można przekonwertować więcej niż 10 adresów URL na wbudowane pola jednoskrzynkowe w jednym żądaniu." + concurrency_not_allowed: "Jednoczesne żądania konwersji adresów URL na wbudowane pola jednoskrzynkowe są niedozwolone. Prosimy o wysyłanie jednej prośby na raz." components: enabled_filter: "Włączona" disabled_filter: "Wyłączone" @@ -300,6 +300,7 @@ pl_PL: errors: &errors format: ! "%{attribute} %{message}" format_with_full_message: "%{attribute}:%{message}" + diff_too_complex: "Różnica jest zbyt złożona, aby obliczyć ją bezpiecznie. Spróbuj wprowadzić mniejsze zmiany." messages: invalid_locale: "%{invalid_locale} to nieprawidłowe ustawienia regionalne" too_long_validation: @@ -401,7 +402,7 @@ pl_PL: slow_down_crawler_user_agent_must_be_at_least_3_characters: "User-Agent musi mieć co najmniej 3 znaki, aby uniknąć przypadkowego ograniczania prawdziwych użytkowników." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Do ustawienia nie można dodać żadnej z następujących wartości: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Nie można wyłączyć usuwania metadanych obrazu, jeśli 'composer media optimization image enabled'. Wyłącz 'composer media optimization image enabled' przed wyłączeniem usuwania metadanych obrazu." - x_summary_large_image_no_svg: "Obrazy podsumowania Twittera używane w metadanych twitter:image nie mogą być obrazami .svg." + x_summary_large_image_no_svg: "Obrazy podsumowania X używane w metadanych twitter:image nie mogą być obrazami w formacie .svg." tl0_and_anonymous_flag: "W przypadku anonimowych użytkowników należy podać 'site contact email' lub 'email address to report illegal content'." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "To ustawienie wymaga, aby najpierw włączyć ustawienie 'allow anonymous mode'." conflicting_google_user_id: 'Identyfikator konta Google dla tego konta został zmieniony; interwencja personelu jest wymagana ze względów bezpieczeństwa. Skontaktuj się z personelem i wskaż go
https://meta.discourse.org/t/76575' @@ -685,6 +686,7 @@ pl_PL: many: "Jednocześnie można dodać maksymalnie %{count} użytkowników" other: "Jednocześnie można dodać maksymalnie %{count} użytkowników" usernames_or_emails_required: "Nazwy użytkowników lub adresy e-mail muszą być obecne" + cannot_add_emails: "Do dodawania członków do tej grupy można używać wyłącznie nazw użytkowników. Aby zaprosić e-mailem, użyj przycisku „Zaproś”." counting_too_many_email_domains: one: "Maksymalnie %{count} domena e-mail może być liczona jednocześnie" few: "Maksymalnie %{count} domeny e-mail mogą być liczone jednocześnie" @@ -896,6 +898,7 @@ pl_PL: invalid_email_in: "'%{email}' nie jest poprawnym adresem e-mail." email_already_used_in_group: "'%{email}' jest już używany przez grupę '%{group_name}'." email_already_used_in_category: "'%{email}' jest już używany przez kategorię '%{category_name}'." + groups_required_for_mode: "Musisz wybrać co najmniej jedną grupę dla %{setting}." description_incomplete: "Wpis opisujący kategorię musi mieć przynajmniej jeden paragraf." description_too_long: one: "Opis jest zbyt długi (maksymalnie %{count} znak)." @@ -918,6 +921,12 @@ pl_PL: other: "Nie można usunąć tej kategorii, bo zawiera %{count} tematów. Najstarszy temat to %{topic_link}." topic_exists_no_oldest: "Nie można usunąć tej kategorii z uwagi na liczbę tematów: %{count}." uncategorized_description: "Tematy które nie potrzebują kategorii, albo nie nadają się do żadnej innej." + category_types: + not_available: "Typ kategorii „%{type_name}” jest niedostępny" + discussion: + name: "Dyskusja" + title: "dyskusja" + description: "Standardowa kategoria zawierająca wszystko, co niezbędne do prowadzenia konwersacji." trust_levels: admin: "Administracja" staff: "Zespół" @@ -1207,6 +1216,8 @@ pl_PL: connection_error: "Wystąpił problem z połączeniem z serwerem, sprawdź nazwę i port serwera i spróbuj ponownie." timeout_error: "Przekroczono limit czasu połączenia z serwerem, sprawdź nazwę i port serwera i spróbuj ponownie." unhandled_error: "Nieobsługiwany błąd podczas testowania ustawień poczty e-mail. %{message}" + invalid_host: "Podany host wskazuje na niedozwolony adres IP." + host_resolve_failed: "Nie można rozwiązać podanego hosta." webauthn: validation: invalid_type_error: "Podany typ webauthn był nieprawidłowy. Prawidłowe typy to webauthn.get i webauthn.create." @@ -1291,6 +1302,8 @@ pl_PL: weekly: "co tydzień" every_month: "każdego miesiąca" every_six_months: "co 6 miesięcy" + calendar_subscriptions: + application_name: "Subskrypcje kalendarza" user_api_key: title: 'Autoryzuj "%{application_name}"' authorize: "Autoryzuj" @@ -1301,6 +1314,8 @@ pl_PL: permissions_header: 'Pozwoli to "%{application_name}" na:' redirect_warning: "Autoryzacja przekieruje Cię do" instructions: 'Wygenerowaliśmy nowy klucz API użytkownika do korzystania z "%{application_name}", skopiuj następujący klucz do swoje aplikacji:' + copy_key: "Skopiuj klucz" + copied: "Skopiowano!" otp_description: 'Czy zezwalasz "%{application_name}" na dostęp do tej strony?' otp_confirmation: confirm_title: Przejdź do %{site_name} @@ -1379,9 +1394,11 @@ pl_PL: description: "Lista statusów flag, w tym rodzaj flagi, plakat, flagger i czas do rozwiązania." visits: title: "Wizyty użytkowników" - xaxis: "Dzień" + xaxis: + desktop: "Komputer" + mobile: "Mobilnie" yaxis: "Liczba wizyt" - description: "Liczba wizyt zalogowanych użytkowników." + description: "Liczba wizyt zalogowanych użytkowników według typu urządzenia." signups: title: "Podpisy" xaxis: "Dzień" @@ -1448,7 +1465,7 @@ pl_PL: title: "DAU / MAU" xaxis: "Dzień" yaxis: "DAU / MAU" - description: "Liczba członków zalogowanych w ostatnim dniu podzielona przez liczbę członków zalogowanych w ostatnim miesiącu - zwraca % wskazujący 'lepkość' społeczności. Celuj na >20%." + description: "Odsetek aktywnych użytkowników miesięcznie, którzy wrócili w ciągu ostatniego dnia. Ten odsetek pokazuje, jak regularnie ludzie wracają; nazywany jest również „lepkością” społeczności. Celuj w > 20%." daily_engaged_users: title: "Zaangażowani użytkownicy dziennie" xaxis: "Dzień" @@ -1865,6 +1882,8 @@ pl_PL: max_oneboxes_per_post: "Ustaw maksymalną liczbę oneboxów, które można umieścić w jednym poście. Oneboxy zapewniają podgląd powiązanej treści bezpośrednio w poście." facebook_app_access_token: "Token wygenerowany z Twojego identyfikatora aplikacji Facebook i sekret. Używany do generowania osadzonych oneboxów z serwisu Instagram." github_onebox_access_tokens: "Mapowanie organizacji lub użytkownika GitHub na token dostępu GitHub, który jest używany do generowania oneboxów GitHub dla prywatnych repozytoriów, commitów, pull requestów, zgłoszeń i zawartości plików. Bez tego tylko publiczne adresy URL GitHub będą miały onebox." + reddit_onebox_client_id: "Identyfikator klienta OAuth API Reddit używany do uwierzytelniania skrzynek Reddit. Utwórz aplikację typu „skrypt” na stronie reddit.com/prefs/apps, aby uzyskać dane uwierzytelniające." + reddit_onebox_client_secret: "Klucz klienta OAuth API Reddit używany do uwierzytelniania skrzynek OneBox w Reddit. Znajduje się w aplikacji typu „skrypt” utworzonej na stronie reddit.com/prefs/apps." logo: "Obraz logo w lewym górnym rogu witryny. Użyj szerokiego prostokątnego obrazu o wysokości 120 i współczynniku kształtu większym niż 3: 1. Jeśli pole pozostanie puste, wyświetlony zostanie tekst tytułu witryny." logo_small: "Mały obraz logo w lewym górnym rogu witryny, widoczny podczas przewijania w dół. Użyj kwadratowego obrazu 120 × 120. Jeśli pole pozostanie puste, wyświetlony zostanie glif domowy." digest_logo: "Alternatywne logo użyte w górnej części podsumowania e-mail witryny. Użyj szerokiego obrazu prostokąta. Nie używaj obrazu SVG. Jeśli pole pozostanie puste, zostanie użyty obraz z ustawienia „logo”." @@ -1947,6 +1966,7 @@ pl_PL: moderators_manage_categories: "Zezwól moderatorom na tworzenie i zarządzanie kategoriami" moderators_manage_groups: "Zezwól moderatorom na tworzenie i zarządzanie grupami" moderators_change_post_ownership: "Zezwalaj moderatorom na zmianę właściciela posta" + change_post_ownership_allowed_groups: "Zezwalaj użytkownikom w tych grupach na zmianę własności wpisów" cors_origins: "Dozwolone źródła dla zapytać cross-origin (CORS). Każde źródło musi zawierać http:// lub https://. Zmienna środowiskowa DISCOURSE_ENABLE_CORS musi być ustawiona na true żeby włączyć CORS." use_admin_ip_allowlist: "Administratorzy mogą się zalogować tylko wtedy, gdy używają adresu IP zdefiniowanego na liście sprawdzonych adresów IP (Administrator > Logi > Sprawdzone adresy IP)." blocked_ip_blocks: "Lista prywatnych bloków IP, które nigdy nie powinny być indeksowane przez Discourse" @@ -1960,7 +1980,6 @@ pl_PL: llms_txt: "Prześlij plik tekstowy, który będzie udostępniany w katalogu /llms.txt robotom LLM. Więcej informacji znajdziesz na stronie llmstxt.org ." content_security_policy: "Włącz ochronę Content-Security-Policy (CSP). CSP to dodatkowa warstwa bezpieczeństwa, która pomaga zapobiegać niektórym rodzajom ataków, takim jak Cross Site Scripting (XSS) i wstrzykiwanie danych." content_security_policy_report_only: "Włącz Content-Security-Policy-Report-Only (CSP)." - content_security_policy_collect_reports: "Włącz zbieranie raportów o naruszeniach CSP na / csp_reports" content_security_policy_frame_ancestors: "Określ, kto może osadzić tę witrynę w ramkach iframe za pośrednictwem CSP. Kontroluj dozwolone hosty w ustawieniach osadzania" content_security_policy_script_src: "Dodatkowe dozwolone źródła skryptów. Bieżący host i CDN są domyślnie uwzględnione. Zobacz Ograniczanie ataków XSS za pomocą polityki bezpieczeństwa treści. (CSP). Inne źródła hosta są ignorowane, ponieważ włączona jest funkcja strict-dynamic." invalidate_inactive_admin_email_after_days: "Konta administracyjne, które nie odwiedzały witryny w tej liczbie dni, będą musiały ponownie zweryfikować swój adres e-mail przed zalogowaniem. Ustaw na 0, aby wyłączyć." @@ -2046,7 +2065,7 @@ pl_PL: enable_local_logins_via_email: "Zezwalaj użytkownikom na żądanie linku logowania do jednego kliknięcia, który zostanie im przesłany pocztą e-mail." allow_new_registrations: "Zezwól na rejestrację nowych użytkowników. Odznacz opcję żeby uniemożliwić rejestrację nowych kont." enable_signup_cta: "Pokazuj wiadomość dla powracających użytkowników anonimowych, zachęcającą ich do założenia konta." - enable_discourse_id: "Włącz uwierzytelnianie za pomocą Discourse ID – usługi logowania jednokrotnego, która umożliwia użytkownikom logowanie się do wielu witryn Discourse za pomocą jednego konta. Popularni dostawcy logowania społecznościowego, tacy jak Google, Facebook, Apple i Github, są obsługiwani bez dodatkowej konfiguracji. Więcej informacji znajdziesz na stronie id.discourse.com ." + enable_discourse_id: "Włącz uwierzytelnianie za pomocą Discourse ID – usługi logowania jednokrotnego, która umożliwia użytkownikom logowanie się do wielu witryn Discourse za pomocą jednego konta. Popularni dostawcy logowania społecznościowego, tacy jak Google, Facebook, Apple i GitHub, są obsługiwani bez dodatkowej konfiguracji. Więcej informacji znajdziesz na stronie id.discourse.com." enable_google_oauth2_logins: "Włącz uwierzytelnianie Google Oauth2. Jest to metoda uwierzytelniania obsługiwana obecnie przez Google. Wymaga podania klucza i sekretu. Zobacz Konfigurowanie logowania Google dla Discourse." google_oauth2_client_id: "Unikalny identyfikator klienta udostępniany przez Twoją aplikację Google, wykorzystywany do procesu uwierzytelnienia." google_oauth2_client_secret: "Client Secret twojej aplikacji w Google" @@ -2289,7 +2308,7 @@ pl_PL: alternative_reply_by_email_addresses: "Lista alternatywnych szablonów do odpowiedzi przez adres email. Przykład: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "Do przychodzących wiadomości e-mail używaj HTML zamiast tekstu." strip_incoming_email_lines: "Usuń wiodące i końcowe białe spacje z każdej linii przychodzących wiadomości e-mail." - disable_emails: "Zapobiegaj wysyłaniu przez Discourse jakichkolwiek wiadomości e-mail. Wybierz 'yes', aby wyłączyć e-maile dla wszystkich użytkowników. Wybierz opcję 'non-staff', aby wyłączyć wiadomości e-mail tylko dla użytkowników niebędących członkami personelu." + disable_emails: "Zapobiegaj wysyłaniu przez Discourse jakichkolwiek wiadomości e-mail. Wybierz 'yes', aby wyłączyć wychodzące wiadomości e-mail dla wszystkich użytkowników. Wybierz opcję 'non-staff', aby wyłączyć wiadomości e-mail tylko dla użytkowników niebędących członkami personelu." allow_email_invites: "Po wyłączeniu tej opcji użytkownicy nie będą mogli wysyłać zaproszeń e-mailem za pośrednictwem Discourse" strip_images_from_short_emails: "Pasek zdjęć z emaila o rozmiarze mniejszym niż 2800 bajtów" short_email_length: "Ustal maksymalną długość wiadomości e-mail w bajtach, aby uznać ją za 'krótką' w celu ukrycia obrazów. Jeżeli rozmiar wiadomości nie przekroczy tego ustawienia, wszelkie obrazy (takie jak awatary i emotikony) w wiadomości zostaną usunięte." @@ -2308,6 +2327,7 @@ pl_PL: mailgun_api_key: "Klucz Mailgun Secret API używany do weryfikacji wiadomości webhook." sendgrid_verification_key: "Klucz weryfikacyjny Sendgrid używany do weryfikacji wiadomości webhook." mailjet_webhook_token: "Token używany do weryfikacji zawartości webhooka. Musi być przekazany jako parametr zapytania 't' w webhooku, na przykład: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Token używany do weryfikacji zawartości webhooka. Musi być przekazany jako parametr zapytania 't' w webhooku, na przykład: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Klucz uwierzytelniania Mandrill używany do weryfikowania wiadomości webhook." postmark_webhook_token: "Token używany do weryfikacji zawartości webhooka. Musi być przekazany jako parametr zapytania 't' w webhooku, na przykład: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Token używany do weryfikacji zawartości webhooka. Musi być przekazany jako parametr zapytania 't' w webhooku, na przykład: https://example.com/webhook/sparkpost?t=supersecret" @@ -2382,7 +2402,7 @@ pl_PL: allow_likes_in_anonymous_mode: "Włącz to ustawienie, aby umożliwić użytkownikom anonimowo przeglądającym Twoją witrynę polubienie postów. Po aktywacji użytkownicy mogą ukryć swoją tożsamość podczas polubienia postów lub tematów w witrynie. To ustawienie wymaga włączenia opcji „Zezwól na tryb anonimowy”." anonymous_posting_allowed_groups: "Grupy, które mogą zezwalać na anonimowe publikowanie. To ustawienie wymaga włączenia opcji „Zezwól na tryb anonimowy”." anonymous_account_duration_minutes: "Aby chronić anonimowość twórz nowe anonimowe konto co N minut dla każdego użytkownika. Przykład: jeśli ustawione na 600, dopóki nie minie 600 minut od ostatniego wpisu i użytkownik przełącza się na anon, zostanie utworzone nowe anonimowe konto." - hide_user_profiles_from_public: "Wyłącz karty użytkownika, profile użytkowników i katalog użytkowników dla użytkowników anonimowych." + hide_user_profiles_from_public: "Wyłącz karty i profile użytkowników dla użytkowników anonimowych. Zagregowane statystyki będą nadal dostępne w katalogu użytkowników." hide_new_user_profiles: "Ukryj profile użytkowników poziomu zaufania 1 lub niższego przed innymi i użytkownikami poziomu zaufania 1, dopóki nie opublikują po raz pierwszy. Ta funkcja jest bezwarunkowo wyłączona w witrynach must_approve_users i invite_only." allow_users_to_hide_profile: "Zezwalaj użytkownikom na ukrywanie swojego profilu i statusu dostępności." hide_user_activity_tab: "Ukryj kartę aktywności na profilach użytkowników z wyjątkiem administratora i siebie." @@ -2448,6 +2468,7 @@ pl_PL: embed_support_markdown: "Obsługa formatowania Markdown dla osadzonych postów." allowed_embed_selectors: "Rozdzielana przecinkami lista elementów CSS, które są dozwolone w osadzaniu." allowed_href_schemes: "Projekty dozwolone w linkach jako dodatek do http i https." + embed_full_app: "Włącz tryb pełnej aplikacji dla osadzonych komentarzy. Po włączeniu, osadzone komentarze załadują pełną aplikację Discourse w ramce iframe, umożliwiając użytkownikom bezpośrednią interakcję z tematami." embed_post_limit: "Maksymalna liczba wpisów do osadzenia." embed_username_required: "W celu stworzenia tematu potrzebna jest nazwa użytkownika." notify_about_reviewable_item_after: "Jeśli po tylu godzinach są elementy do przejrzenia, które jeszcze nie zostały sprawdzone, wyślij wiadomość do moderatorów. Ustaw na 0, aby wyłączyć." @@ -2580,7 +2601,7 @@ pl_PL: dashboard_hidden_reports: "Zezwalaj na ukrycie określonych raportów z panelu administracyjnego." dashboard_visible_tabs: "Wybierz, które karty panelu administracyjnego są widoczne." dashboard_general_tab_activity_metrics: "Wybierz raporty, które mają być wyświetlane jako metryki aktywności na karcie ogólne." - gravatar_enabled: "Użyj usługi Gravatar dla awatarów użytkowników. Uniemożliwi to użytkownikom przełączanie się na usługę Gravatar dla swoich awatarów, ale nie wpłynie to na użytkowników, którzy już z niej korzystają." + gravatar_enabled: "Użyj usługi Gravatar dla awatarów użytkowników. Wyłączenie tej opcji uniemożliwi użytkownikom przełączanie się na Gravatar dla swoich awatarów, ale nie wpłynie to na użytkowników, którzy już z niej korzystają." gravatar_name: "Podaj nazwę dostawcy usługi Gravatar. Ta nazwa jest zwykle używana do identyfikacji źródła dostarczającego awatary Gravatar do witryny." gravatar_base_url: "Podaj adres URL umożliwiający dostęp do API serwisu Gravatar. To ustawienie jest niezbędne do konwersji adresów e-mail na adresy URL Gravatar, gdzie przechowywane są obrazy awatarów." gravatar_login_url: "Odnoszący się do `gravatar_base_url` adres URL, który umożliwia użytkownikowi zalogowanie się do usługi Gravatar." @@ -2594,6 +2615,7 @@ pl_PL: show_bottom_topic_map: "Wyświetla mapę tematu u dołu tematu, gdy ma on 10 lub więcej odpowiedzi." show_topic_map_in_topics_without_replies: "Wyświetla mapę tematu, nawet jeśli temat nie ma odpowiedzi." enable_site_owner_onboarding: "Pokazuje nowym administratorom panel na stronie głównej, który ułatwia im rozpoczęcie pracy. Włącz to ustawienie ponownie, aby ponownie zobaczyć kroki wdrażania." + site_owner_onboarding_max_days: "Maksymalna liczba dni po utworzeniu witryny, w ciągu których ma zostać wyświetlony baner powitalny." enable_welcome_banner: "Wyświetlaj baner na głównych stronach z listą tematów, aby powitać członków i umożliwić im przeszukiwanie zawartości witryny." welcome_banner_image: "Ustaw obraz, który będzie wyświetlany w tle baneru powitalnego." welcome_banner_location: "Określa, w którym miejscu strony pojawi się baner powitalny." @@ -2609,6 +2631,7 @@ pl_PL: show_preview_for_form_templates: "Włącz podgląd funkcji szablonów formularzy" lazy_load_categories_groups: "Leniwie ładuj informacje o kategoriach tylko dla użytkowników z tych grup. Poprawia to wydajność w witrynach z wieloma kategoriami." enable_auto_grid_images: "Automatycznie zawija obrazy w tagi [grid], gdy w kompozytorze zostanie przesłane 3 lub więcej obrazów." + enable_new_checkbox_style: "Włącz nowy styl pól wyboru dla pól wyboru FormKit." impersonate_without_logout: "Zezwól administratorom na podszywanie się pod innego użytkownika bez konieczności wylogowywania się z konta administratora." experimental_impersonation_time_limit_minutes: "Jak długo musi upłynąć, zanim sesja podszywania się zostanie automatycznie zakończona." page_loading_indicator: "Skonfiguruj wskaźnik ładowania, który pojawia się podczas nawigacji po stronie w Discourse. \"Spinner\" to wskaźnik na pełnym ekranie. \"Slider\" wyświetla wąski pasek u góry ekranu." @@ -2631,13 +2654,13 @@ pl_PL: content_localization_crawler_param: "Wyświetlaj zlokalizowaną treść robotom indeksującym sieć, gdy włączona jest opcja „lokalizacja treści” i „ustaw ustawienia regionalne z parametrów”. Lista obsługiwanych ustawień regionalnych jest zdefiniowana w sekcji „Obsługiwane ustawienia regionalne lokalizacji treści”." content_localization_use_default_locale_when_unsupported: "Wyświetlaj zlokalizowaną treść w domyślnych ustawieniach regionalnych witryny użytkownikom, których preferowany język nie znajduje się na liście „ustawień regionalnych obsługiwanych przez lokalizację treści”." content_localization_allow_author_localization: "Zezwól autorom na aktualizowanie lokalizacji własnych tematów i wpisów poprzez menu wpisów." - enable_upcoming_changes: "Włącz nadchodzące zmiany" fake_upcoming_change: "Jest to fałszywa nadchodząca zmiana do celów testowych. Nie musisz tłumaczyć tego ciągu znaków." floating_dismiss_topics_on_mobile: "Wyświetla na urządzeniu mobilnym pływający przycisk „Odrzuć...” dla listy tematów, aby ułatwić dostęp i zwolnić miejsce u góry listy tematów" rename_faq_to_guidelines: "Ta zmiana zmienia nazwę strony FAQ na Wytyczne. Strona FAQ będzie nadal dostępna pod adresem /faq. Ustawienie „faq url” działa jak poprzednio." enable_simplified_category_creation: "Umożliwia uproszczony proces tworzenia kategorii z mniejszą liczbą opcji i bardziej przejrzystym interfejsem." enable_custom_splash_screen: "Umożliwia dostosowanie ekranu powitalnego ładowania za pomocą własnego obrazu SVG. Prześlij obraz za pomocą ustawienia „obraz ekranu powitalnego”. Uwaga: może to negatywnie wpłynąć na wyniki LCP i indeksowanie Google." modernize_foundation_theme: "Zmiana ta wprowadza modyfikacje projektowe do motywu Foundation w Discourse." + reporting_improvements: "Ulepszenia nawigacji, projektu i użyteczności raportów administracyjnych Discourse." errors: invalid_css_color: "Nieprawidłowy kolor. Wpisz nazwę koloru lub wartość szesnastkową." invalid_datetime: "Nieprawidłowy format daty i godziny. Upewnij się, że wprowadzono prawidłową datę i godzinę." @@ -2688,12 +2711,12 @@ pl_PL: reply_by_email_disabled: "Przed włączeniem tego ustawienia musisz najpierw włączyć opcję 'reply by email'." discourse_connect_url_is_empty: "Musisz ustawić 'discourse connect url' przed włączeniem tego ustawienia." enable_local_logins_disabled: "Przed włączeniem tego ustawienia musisz najpierw włączyć opcję 'enable local logins'." - min_username_length_exists: "Nie możesz ustawić minimalnej długości nazwy użytkownika powyżej najkrótszej nazwy użytkownika (%{username})." - min_group_name_length_exists: "Nie możesz ustawić minimalnej długości nazwy użytkownika powyżej najkrótszej nazwy grupy (%{group_name})." - min_username_length_range: "Nie możesz ustawić minimum powyżej maksimum." - max_username_length_exists: "Nie możesz ustawić maksymalnej długości nazwy użytkownika poniżej najdłuższej nazwy użytkownika (%{username})." - max_group_name_length_exists: "Nie możesz ustawić maksymalnej długości nazwy użytkownika poniżej najdłuższej nazwy grupy (%{group_name})." - max_username_length_range: "Nie możesz ustawić maksimum poniżej minimum." + min_username_length_exists: "Nie można ustawić wartości „minimalnej długości nazwy użytkownika” wyższej niż najkrótsza nazwa użytkownika (%{username})." + min_group_name_length_exists: "Nie można ustawić wartości „minimalnej długości nazwy użytkownika” wyższej niż najkrótsza nazwa grupy (%{group_name})." + min_username_length_range: "Nie można ustawić wartości „minimalnej długości nazwy użytkownika” na poziomie wyższym niż „maksymalna długość nazwy użytkownika”." + max_username_length_exists: "Nie można ustawić maksymalnej długości nazwy użytkownika poniżej najdłuższej nazwy użytkownika (%{username})." + max_group_name_length_exists: "Nie można ustawić maksymalnej długości nazwy użytkownika poniżej najdłuższej nazwy grupy (%{group_name})." + max_username_length_range: "Nie można ustawić maksymalnej długości nazwy użytkownika poniżej minimalnej długości nazwy użytkownika." invalid_hex_value: "Wartości kolorów muszą być sześciocyfrowymi kodami szesnastkowymi." empty_selectable_avatars: "Przed włączeniem tego ustawienia należy najpierw przesłać co najmniej dwa wybrane awatary." category_search_priority: @@ -2758,11 +2781,12 @@ pl_PL: exclude_tag: "Wyklucz tematy z określonym tagiem" exclude_tags_any: "Wyklucz tematy zawierające dowolne ze wskazanych tagów (rozdzielone przecinkami)" exclude_tags_all: "Wyklucz tematy zawierające wszystkie określone tagi (rozdzielone znakiem plus)" - tags_alias: "Alias dla filtra „tag:”" tag_group: "Pokaż tematy z tagami z określonej grupy tagów" exclude_tag_group: "Wyklucz tematy z tagami z określonej grupy tagów" activity_before: "Pokaż tematy z ostatnią aktywnością przed datą (RRRR-MM-DD lub dni temu)" activity_after: "Pokaż tematy z ostatnią aktywnością po dacie (RRRR-MM-DD lub dni temu)" + bookmarked_before: "Pokaż tematy dodane do zakładek przed datą (RRRR-MM-DD lub dni temu)" + bookmarked_after: "Pokaż tematy dodane do zakładek po dacie (RRRR-MM-DD lub dni temu)" created_before: "Pokaż tematy utworzone przed datą (RRRR-MM-DD lub dni temu)" created_after: "Pokaż tematy utworzone po określonej dacie (RRRR-MM-DD lub dni temu)" created_by: "Pokaż tematy utworzone przez określonego użytkownika lub grupę" @@ -3245,25 +3269,26 @@ pl_PL: * Aktualizacja za pomocą naszego **[aktualizatora w przeglądarce](%{base_url}/admin/update)** - * Dowiedz się, co nowego w [informacjach o wydaniu](https://meta.discourse.org/tag/release-notes) lub przejrzyj [nieprzetworzony dziennik zmian GitHub](https://github.com/discourse/discourse/commits/main) + * Dowiedz się, co nowego w [informacjach o wydaniu](/tag/release-notes) lub przejrzyj [nieprzetworzony dziennik zmian GitHub](https://meta.discourse.org) * Odwiedź stronę [meta.discourse.org](https://meta.discourse.org), aby uzyskać informacje, omówienia i wsparcie dla Discourse new_version_mailer_with_notes: title: "Nowa wersja powiadomień z uwagami" subject_template: "[%{email_prefix}] dostępna aktualizacja" text_body_template: | - Hurra, dostępna jest nowa wersja [Discourse](https://www.discourse.org)! + Hurra, nowa wersja [Discourse](https://www.discourse.org) jest dostępna! Twoja wersja: %{installed_version} Nowa wersja: **%{new_version}** - * Aktualizacja za pomocą naszego **[aktualizatora w przeglądarce](%{base_url}/admin/update)** + - Zaktualizuj, korzystając z naszej łatwej **[aktualizacji przeglądarki jednym kliknięciem](%{base_url}/admin/update)** - * Dowiedz się, co nowego w [informacjach o wydaniu](https://meta.discourse.org/tag/release-notes) lub przejrzyj [nieprzetworzony dziennik zmian GitHub](https://github.com/discourse/discourse/commits/main) + - Zobacz, co nowego w [notatkach dotyczących wydania](https://releases.discourse.org/changelog/%{new_version}) - * Odwiedź stronę [meta.discourse.org](https://meta.discourse.org), aby uzyskać informacje, omówienia i wsparcie dla Discourse + - Odwiedź [meta.discourse.org](https://meta.discourse.org) w celu uzyskania wiadomości, dyskusji i wsparcia dla Discourse + + ### Notatki dotyczące wydania - ### Dziennik zmian %{notes} flag_reasons: off_topic: "Twój wpis został oznaczony jako **nie na temat**: społeczność uważa, że nie pasuje do tematu, w którym został dodany, biorąc pod uwagę jego tytuł i treść pierwszego wpisu." @@ -3317,19 +3342,23 @@ pl_PL: Jeśli jednak post zostanie ukryty przez społeczność po raz drugi, pozostanie ukryty, dopóki nie zostanie zaakceptowany przez personel. Aby uzyskać dodatkowe wskazówki, zapoznaj się z naszymi [wytycznymi dla społeczności](%{base_url}/guidelines). + reviewable_queued_post_revise_and_reject_edit_post: "Możesz edytować swój oryginalny wpis poniżej i przesłać go ponownie, aby wprowadzić sugerowane zmiany, lub odpowiedzieć na tę wiadomość, jeśli masz jakieś pytania." + reviewable_queued_post_revise_and_reject_edit_post_no_reply: "Możesz edytować swój oryginalny wpis poniżej i przesłać go ponownie, aby wprowadzić sugerowane zmiany." + reviewable_queued_post_revise_and_reject_edit_topic: "Możesz edytować oryginalny wpis dotyczący Twojego tematu poniżej i przesłać go ponownie, aby wprowadzić sugerowane zmiany, lub odpowiedzieć na tę wiadomość, jeśli masz jakieś pytania." + reviewable_queued_post_revise_and_reject_edit_topic_no_reply: "Możesz edytować oryginalny wpis dotyczący Twojego tematu poniżej i przesłać go ponownie, aby wprowadzić sugerowane zmiany." reviewable_queued_post_revise_and_reject: title: "Informacje zwrotne na temat Twojego postu" subject_template: "Informacje zwrotne na temat Twojego postu w %{topic_title}" text_body_template: | - Cześć %{username}, + Cześć, %{username}, - Przejrzeliśmy Twój post w [%{topic_title}](%{topic_url}) i mamy dla Ciebie pewne uwagi. + Przejrzeliśmy Twój wpis w [%{topic_title}](%{topic_url}) i mamy dla Ciebie pewne uwagi. Powód: %{reason} - Informacja zwrotna: %{feedback} + Opinia: %{feedback} - Możesz edytować swój oryginalny post poniżej i przesłać go ponownie, aby wprowadzić sugerowane zmiany, lub odpowiedzieć na tę wiadomość, jeśli masz jakiekolwiek pytania. + %{edit_instructions} -------- @@ -3338,20 +3367,20 @@ pl_PL: -------- Dziękujemy, - moderatorzy %{site_name} + Moderatorzy %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "Informacje zwrotne do Twojego tematu" subject_template: 'Opinia na temat nowego tematu zatytułowanego "%{topic_title}"' text_body_template: | - Cześć %{username}, + Cześć, %{username}, - Przejrzeliśmy Twój nowy temat zatytułowany "%{topic_title}" i mamy dla Ciebie pewne uwagi. + Przejrzeliśmy Twój nowy temat zatytułowany „%{topic_title}” i mamy dla Ciebie kilka uwag. Powód: %{reason} Opinia: %{feedback} - Możesz edytować oryginalny post dotyczący swojego tematu poniżej i przesłać go ponownie, aby wprowadzić sugerowane zmiany, lub odpowiedzieć na tę wiadomość, jeśli masz jakiekolwiek pytania. + %{edit_instructions} -------- @@ -5326,7 +5355,7 @@ pl_PL: dev_mode: title: "Tryb programisty" enable_rack_mini_profiler: "Włącz funkcję Rack Mini Profiler, aby zmiany w sesjach były zachowywane przez 1 godzinę" - enter: "Wejdź" + enter: "Przejdź do trybu programisty" wizard: title: "Instalacja Discourse" step: @@ -5628,10 +5657,6 @@ pl_PL: complete: "Post zatwierdzony i nieukryty" post_actions: bundle_title: "Co chcesz zrobić z tym wpisem?" - no_action_post: - title: "Brak akcji" - description: "Nie podejmuj żadnych działań w związku ze wpisem" - complete: "Nie podjęto żadnych działań w związku ze wpisem" delete_post: title: "Usuń wpis" description: "Usuń ten wpis" @@ -5652,16 +5677,8 @@ pl_PL: title: "Edytuj wpis" description: "Edytuj treść tego wpisu" complete: "Wpis edytowany" - convert_to_pm: - title: "Konwertuj na PW" - description: "Zmień ten post na prywatną wiadomość" - complete: "Wpis przekształcony w prywatną wiadomość" user_actions: bundle_title: "Co chcesz zrobić z użytkownikiem?" - no_action_user: - title: "Brak akcji" - description: "Nie podejmuj żadnych działań wobec użytkownika" - complete: "Nie podjęto żadnych działań wobec użytkownika" silence_user: title: "Wycisz użytkownika" description: "Zablokuj użytkownikowi możliwość tworzenia wpisów" diff --git a/config/locales/server.pt.yml b/config/locales/server.pt.yml index b88fbd32a8d3e..5740c9f8e4ad6 100644 --- a/config/locales/server.pt.yml +++ b/config/locales/server.pt.yml @@ -699,6 +699,7 @@ pt: deny: "Cancelar" read: "ler" read_write: "ler/escrever" + copied: "Copiado!" otp_confirmation: confirm_title: Continuar para %{site_name} logging_in_as: Fazendo login como %{username} @@ -742,7 +743,9 @@ pt: flag: Tipo visits: title: "Visitas do Utilizador" - xaxis: "Dia" + xaxis: + desktop: "Desktop" + mobile: "Móvel" yaxis: "Número de visitas" signups: xaxis: "Dia" @@ -1196,7 +1199,6 @@ pt: max_daily_gravatar_crawls: "Número máximo de vezes que o Discourse irá verificar o Gravatar para avatars personalizados, por dia" enable_user_directory: "Forneça uma diretoria de utilizadores para navegação" anonymous_account_duration_minutes: "Para proteger o anonimato crie uma nova conta anónima a cada N minutos para cada utilizador. Exemplo: se configurado para 600, assim que passarem 600 minutos desde a última mensagem E o utilizador altere para anónimo, uma nova conta anónima é criada." - hide_user_profiles_from_public: "Desativar cartões de utilizador, perfis de utilizador e diretoria de utilizadores para utilizadores anónimos." max_notifications_per_user: "O número máximo de notificações por utilizador, se este número for excedido as notificações antigas serão eliminadas. Reforçado semanalmente. Defina como 0 para desativar" allowed_user_website_domains: "O ''site'' da Web do utilizador será verificado em relação a estes domínios." allow_profile_backgrounds: "Permitir que os utilizadores carreguem fundos de perfil." @@ -1270,8 +1272,6 @@ pt: reply_by_email_address_is_empty: "É necessário definir um email para 'resposta por endereço de email' antes de ligar a resposta por email." user_locale_not_enabled: "Tem de ligar 'permitir definições regionais do utilizador' antes de ligar esta configuração." invalid_regex: "A expressão regular não é válida ou permitida." - min_username_length_range: "Não pode definir o mínimo acima do máximo." - max_username_length_range: "Não pode definir o máximo abaixo do mínimo." search: within_post: "#%{post_number} por %{username}" types: @@ -2036,8 +2036,6 @@ pt: safe_mode: title: "Entrar em modo de segurança" enter: "Entrar em Modo de Segurança" - dev_mode: - enter: "Entrar" wizard: title: "Configuração do Discourse" step: diff --git a/config/locales/server.pt_BR.yml b/config/locales/server.pt_BR.yml index eb0ec9b62d1b9..278df1b8cc1e3 100644 --- a/config/locales/server.pt_BR.yml +++ b/config/locales/server.pt_BR.yml @@ -60,8 +60,8 @@ pt_BR: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} de %{username}" - too_many_urls: "Não é possível incorporar com onebox mais de dez URLs numa única solicitação." - concurrency_not_allowed: "Solicitações simultâneas de incorporação com onebox não são permitidas. Envie uma solicitação por vez." + too_many_urls: "Não é possível converter mais de 10 URLs em oneboxes inline numa única solicitação." + concurrency_not_allowed: "Não são permitidas solicitações simultâneas para converter URLs em oneboxes inline. Envie uma solicitação por vez." components: enabled_filter: "Ativado(a)" disabled_filter: "Desativado(a)" @@ -144,6 +144,8 @@ pt_BR: invalid_type: "%{type} não é um tipo válido" humanize_not_valid_string_value: "A propriedade no Ponteiro JSON \"%{property_json_pointer}\" deve ser uma string." not_valid_string_value: "deve ser uma string" + humanize_not_valid_datetime_value: "A propriedade no ponteiro JSON \"%{property_json_pointer}\" deve conter uma data e hora válidas." + not_valid_datetime_value: "deve ser conter uma data e hora válidas" humanize_not_valid_integer_value: "A propriedade no Ponteiro JSON \"%{property_json_pointer}\" deve ser um inteiro." not_valid_integer_value: "deve ser um inteiro" humanize_not_valid_float_value: "A propriedade no Ponteiro JSON \"%{property_json_pointer}\" deve ser do tipo flutuante." @@ -258,6 +260,7 @@ pt_BR: errors: &errors format: ! "%{attribute} %{message}" format_with_full_message: "%{attribute}: %{message}" + diff_too_complex: "O diff é muito complexo para ser computado com segurança. Por favor, tente fazer edições menores." messages: invalid_locale: "%{invalid_locale} não é uma localização válida" too_long_validation: @@ -277,6 +280,7 @@ pt_BR: greater_than: precisar ser maior que %{count} greater_than_or_equal_to: precisa ser maior ou igual a %{count} has_already_been_used: "já está sendo usado(a)" + in: deve estar em %{count} inclusion: não está incluso(a) na lista invalid: é inválido(a) is_invalid: "não faz muito sentido. É uma frase completa?" @@ -344,7 +348,7 @@ pt_BR: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Agentes de usuário(a) devem ter pelo menos três caracteres para evitar limitação de taxa de usuários(as) legítimos(as) sem querer." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Não é possível adicionar nenhum dos valores a seguir à configuração: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Você não pode desativar a remoção de metadados de imagem se 'a imagem de otimização de mídia do compositor habilitada' estiver ativada. Desative a 'imagem de otimização de mídia do compositor ativada' antes de desativar a remoção dos metadados da imagem." - x_summary_large_image_no_svg: "Imagens de resumo do Twitter usadas para metadados twitter:image não podem ser uma imagem .svg." + x_summary_large_image_no_svg: "Imagens de resumo do X usadas para metadados twitter:image não podem ser uma imagem .svg." tl0_and_anonymous_flag: "É preciso informar o \"site contact email\" ou \"email address to report illegal content\" para usuários(as) anônimos(as)." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Para usar esta configuração, ative a definição \"allow anonymous mode\" primeiro." conflicting_google_user_id: 'A ID da conta Google para esta conta foi alterada. A intervenção da equipe é necessária por razões de segurança. Entre em contato com a equipe e direcione para
https://meta.discourse.org/t/76575' @@ -394,6 +398,7 @@ pt_BR: redemption_count_less_than_max: "deve ser menor que %{max_redemptions_allowed}." email_xor_domain: "Campos de e-mail e domínio não são permitidos ao mesmo tempo" existing_user_success: "Link do convite resgatado com sucesso" + email_invites_disabled: "O envio de e-mails de convite foi desativado." bulk_invite: file_should_be_csv: "O arquivo atualizado deve ter o formato csv." max_rows: "Os primeiros %{max_bulk_invites} convites foram enviados. Tente dividir o arquivo em partes menores." @@ -596,6 +601,7 @@ pt_BR: other: "É possível contar no máximo %{count} domínios de e-mail por vez" no_invites_with_discourse_connect: "É possível convidar apenas usuários(as) registrados(as) quando o DiscourseConnect estiver ativado" no_invites_without_local_logins: "É possível convidar apenas usuários(as) registrados(as) quando entradas de conta em modo local estiver destivado" + update_existing_users_required: "Esta alteração afeta %{count} membros existentes do grupo. Você deve especificar o parâmetro 'update_existing_users' (true ou false) para indicar se as novas configurações padrão de notificação devem ser aplicadas aos membros existentes." default_names: everyone: "todos(as)" admins: "administração" @@ -794,6 +800,9 @@ pt_BR: email_already_used_in_group: "\"%{email}\" já é utilizado pelo grupo \"%{group_name}\"." email_already_used_in_category: "\"%{email}\" já é utilizado pela categoria \"%{category_name}\"." description_incomplete: "A postagem da descrição da categoria deve ter pelo menos um parágrafo." + description_too_long: + one: "A descrição é longa demais (deve ter no máximo %{count} caractere)." + other: "A descrição é longa demais (deve ter no máximo %{count} caracteres)." permission_conflict: "Qualquer grupo que tenha permissão para acessar uma subcategoria também deve ter permissão para acessar a categoria pai. Os grupos a seguir têm acesso a uma das subcategorias, mas não têm acesso à categoria pai: %{group_names}." disallowed_topic_tags: "Este tópico tem etiquetas não permitidas por esta categoria: \"%{tags}\"" disallowed_tags_generic: "Este tópico tem etiquetas não permitidas." @@ -1033,6 +1042,7 @@ pt_BR: too_many_drafts: title: "Excesso de rascunhos." description: "Você atingiu a quantidade máxima de rascunhos permitida. Exclua alguns [rascunhos](%{base_url}/my/activity/drafts) e tente novamente." + bulk_destroy_limit: "Você só pode excluir até %{limit} rascunhos por vez." draft_backup: pm_title: "Rascunhos de backup de tópicos em andamento" pm_body: "Tópico contendo rascunhos salvos" @@ -1136,7 +1146,11 @@ pt_BR: deny: "Cancelar" read: "ler" read_write: "ler/escrever" + logged_in_as: "Logado(a) como" + permissions_header: 'Isso permitirá que "%{application_name}":' + redirect_warning: "A autorização redirecionará você para" instructions: 'Acabamos de gerar uma nova chave de API de usuário(a) para você usar com "%{application_name}", cole a seguinte chave em seu aplicativo:' + copied: "Copiou!" otp_description: 'Você gostaria de permitir que "%{application_name}" acesse este site?' otp_confirmation: confirm_title: Continuar para %{site_name} @@ -1215,9 +1229,10 @@ pt_BR: description: "Lista de status dos sinalizadores, incluindo o tipo de sinalizador, autor(a) da postagem, criador(a) do sinalizador e hora da resolução." visits: title: "Acessos do(a) usuário(a)" - xaxis: "Dia" + xaxis: + desktop: "Desktop" + mobile: "Dispositivos móveis" yaxis: "Quantidade de acessos" - description: "Quantidade de acessos de usuários(as) que entraram com a conta" signups: title: "Cadastros" xaxis: "Dia" @@ -1260,6 +1275,8 @@ pt_BR: yaxis: "Dia" description: "Pedidos de API para chaves de API regulares e chaves de API do usuário." consolidated_page_views_browser_detection: + title: "Visualizações de página consolidadas com detecção de navegador (recomendado)" + title_legacy: "Visualizações de página consolidadas com detecção de navegador (recomendado)" xaxis: page_view_anon_browser: "Navegador anônimo" page_view_logged_in_browser: "Navegador de acesso" @@ -1279,10 +1296,8 @@ pt_BR: description: "Visualizações de página para usuários(as) que entraram com a conta, rastreadores conhecidos e outras formas de tráfego." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" xaxis: "Dia" yaxis: "DAU/MAU" - description: "Quantidade de membros que entraram com a conta no último dia dividida pela quantidade de membros que entraram com a conta no último mês. Retorna uma % que indica a \"adesão\" à comunidade. Tente alcançar >20%." daily_engaged_users: title: "Usuários(as) envolvidos(as) diariamente" xaxis: "Dia" @@ -1562,10 +1577,20 @@ pt_BR: anon_views: Anônimo(a) total_views: Total description: "Os 100 tópicos mais visualizados em um intervalo de datas, combinados com visualizações anônimas e com acesso pela conta. É possível filtrar por categoria." + associated_accounts_by_provider: + title: "Contas associadas pelo método de login" + labels: + provider: Provedor de login + no_accounts: "Nenhuma conta associada" + discourse_connect: "SSO via Discourse Connect" + no_sso_accounts: "Contas sem um registro de SSO" + total_users: "Total de contas de usuários ativos" + description: "Mostra o número de contas associadas, agrupadas por provedor de login. Aplicável apenas quando os métodos de login social estiverem ativados." dashboard: problem: twitter_login: 'Parece que não é possível fazer login pelo X no momento. Confira seus dados nas configurações do site.' group_email_credentials: 'Houve um problema nas credenciais do e-mail do grupo %{group_full_name}. Nenhum e-mail será enviado a partir da caixa de entrada do grupo até este problema ser resolvido. %{error}' + upcoming_change_stable_opted_out: 'Seu site optou por não participar da próxima alteração "%{upcoming_change}". Essa alteração agora atingiu o status "Estável" e em breve será removida ou tornada permanente. Visite a página de próximas alterações para conhecer os detalhes sobre essa alteração.' rails_env: "Seu servidor está rodando no modo %{env}." host_names: "O arquivo config/database.yml está usando hostname do localhost padrão. Modifique para usar o hostname do seu site." sidekiq: 'O Sidekiq não está em execução. Muitas tarefas, como envio de e-mails, são executadas de forma assíncrona pelo Sidekiq. Verifique se pelo menos um processo sidekiq está em execução. Aprenda sobre Sidekiq aqui.' @@ -1586,6 +1611,7 @@ pt_BR: one: "A sondagem do e-mail gerou um erro nas últimas 24 horas. Consulte os registros para obter mais detalhes." other: "A sondagem do e-mail gerou %{count} erros nas últimas 24 horas. Consulte os registros para obter mais detalhes." missing_mailgun_api_key: "O servidor está configurado para enviar e-mails pelo Mailgun, mas você não informou a chave de API usada para verificar as mensagens do webhook." + qq_mail_smtp: "Seu servidor SMTP (%{smtp_address}) é conhecido por enviar e-mails duplicados com o Discourse. O QQ Mail não retorna confirmações adequadas, fazendo com que o Discourse tente reenviar mensagens que já foram entregues com sucesso. Veja alternativas recomendadas." bad_favicon_url: "O favicon está falhando ao carregar. Verifique sua configuração de favicon nas configurações do site ." poll_pop3_timeout: "A conexão com o servidor POP3 está atingindo o tempo limite. Verifique suas configurações de POP3 e selecione um provedor de serviço." poll_pop3_auth_error: "A conexão com o servidor POP3 está falhando com um erro de autenticação. Verifique suas configurações de POP3." @@ -1597,6 +1623,7 @@ pt_BR: category_style_deprecated: "Atualmente seu Discourse está usando um estilo de categoria obsoleto que será removido antes da versão beta final do Discourse 3.2. Consulte Movendo para uma configuraçao de site de estilo de categoria único para obter instruções de como manter o estilo de categoria selecionado." maxmind_db_configuration: 'O servidor foi configurado para usar os bancos de dados MaxMind para consultas reversas de IP. Entretanto, não foi configurado um ID de conta MaxMind, o que pode causar falhas no download dos bancos de dados MaxMind futuramente. Leia este guia para saber mais.' admin_sidebar_deprecation: "O layout antigo da administração foi preterido em benefício do novo layout de barra de ferramentas e será removido na próxima versão. Você pode configurar o layout da nova barra lateral antes disso." + starttls_disabled: "A configuração de e-mail de saída está com a opção STARTTLS desativada. Isso quase nunca é necessário. Considere remover a opção
DISCOURSE_SMTP_ENABLE_START_TLS=false
do seu ambiente. Consulte este tópico para mais informações." back_from_logster_text: "Voltar para o site" site_settings: allow_bulk_invite: "Permitir convites em massa com o uso de um arquivo CSV" @@ -1641,6 +1668,7 @@ pt_BR: allow_duplicate_topic_titles_category: "Permita tópicos com títulos duplicados e idênticos se a categoria for diferente. É preciso desativar allow_duplicate_topic_titles." unique_posts_mins: "Com quantos minutos de antecedência um(a) usuário(a) pode criar uma postagem com o mesmo conteúdo outra vez" educate_until_posts: "Quando o(a) usuário(a) começa a digitar suas primeiras (n) postagens novas, exiba o pop-up com o painel instrutivo do novo(a) usuário(a) no compositor." + title: "O nome deste site. Visível para todos os visitantes, inclusive usuários anônimos. Observe que a alteração deste título poderá enviar uma notificação aos usuários do PWA solicitando que atualizem ou desinstalem o aplicativo." site_description: "Descreva este site em uma frase. Visível para todos os visitantes, incluindo usuários anônimos." short_site_description: "Breve descrição em poucas palavras. Visível para todos os visitantes, incluindo usuários anônimos." contact_email: "Endereço de e-mail do contato principal responsável por este site. É usado para notificações críticas e também na página /about para assuntos urgentes. Visível para usuários anônimos em sites públicos." @@ -1648,6 +1676,7 @@ pt_BR: crawl_images: "Recupere imagens de URLs remotas para inserir as dimensões corretas de largura e altura." download_remote_images_to_local: "Converta imagens remotas (hotlinked) em locais baixando-as. Isso preserva o conteúdo mesmo que estas sejam removidas do site remoto no futuro." download_remote_images_threshold: "Espaço mínimo necessário em disco para baixar em modo local imagens remotas (em %)" + disabled_image_download_domains: "Imagens remotas hospedadas nestes domínios nunca serão baixadas." block_hotlinked_media: "Impedir que os usuários introduzam mídia remota (hotlinked) em suas publicações. A mídia remota que não for baixada via 'download_remote_images_to_local' será substituída por um link de espaço reservado." block_hotlinked_media_exceptions: "Uma lista de URLs de base, isentos da configuração block_hotlinked_media. Inclua o protocolo (por exemplo, https://example.com)." editing_grace_period: "Durante (n) segundos após a postagem, as edições não criarão uma nova versão no histórico da postagem." @@ -1683,9 +1712,12 @@ pt_BR: max_oneboxes_per_post: "Defina a quantidade máxima de Oneboxes que podem ser inclusos em uma única postagem. Oneboxes oferecem uma pré-visualização do conteúdo vinculado nela." facebook_app_access_token: "Um token gerado do seu segredo e ID do app Facebook. Usado para gerar Oneboxes do Instagram." github_onebox_access_tokens: "Mapeamento de uma organização do GitHub ou usuário(a) para um token de acesso do GitHub usado na geração de Oneboxes do GitHub para reposições privadas, confirmações, solicitações de pull, problemas e conteúdo de arquivos. Sem isso, apenas URLs públicas do GitHub URLs serão adicionadas ao Onebox." + reddit_onebox_client_id: "ID do cliente OAuth da API do Reddit usado para autenticação de contas Reddit OneBox. Crie um aplicativo do tipo \"script\" em reddit.com/prefs/apps para obter as credenciais." + reddit_onebox_client_secret: "Segredo do cliente OAuth da API do Reddit usado para autenticação de contas unidirecionais do Reddit. Encontrado no aplicativo do tipo 'script' criado em reddit.com/prefs/apps." logo: "A imagem do logotipo no canto superior à esquerda do seu site. Use uma imagem retangular larga com 120 de altura e proporção maior que 3:1. Se for deixada em branco, o texto do título do site será exibido." logo_small: "A pequena imagem do logotipo no canto superior à esquerda do site, exibida ao rolar para baixo. Use uma imagem quadrada de 120×120. Se for deixada em branco, um glifo de página inicial será exibido." digest_logo: "A imagem do logotipo alternativo usada na parte superior do resumo de e-mail do seu site. Use uma imagem retangular larga. Não use uma imagem SVG. Se for deixada em branco, a imagem da configuração \"logotipo\" será usada." + mobile_logo: "O logotipo usado na versão móvel do seu site. Recomendamos um ícone quadrado para evitar sobrecarregar o cabeçalho, mas você pode usar uma imagem retangular larga com altura de 120 pixels e proporção maior que 3:1. Se este campo for deixado em branco, será usada a imagem de configuração do logotipo." logo_dark: "Esquema escuro alternativo para a configuração do site \"logotipo\"." logo_small_dark: "Esquema escuro alternativo para a configuração do site \"logotipo pequeno\"." mobile_logo_dark: "Esquema escuro alternativo para a configuração do site \"logotipo para dispositivo móvel\"." @@ -1693,11 +1725,15 @@ pt_BR: manifest_icon: "Imagem usada como logotipo/splash no Android. Será redimensionada automaticamente para 512×512. Se for deixada em branco, large_icon será usado." manifest_screenshots: "Capturas de tela que mostram os recursos e funcionalidades da sua instância na sua página de alerta de instalação. Todas as imagens devem ser envios locais e devem ter as mesmas dimensões." favicon: "Um favicon para o seu site, consulte https://en.wikipedia.org/wiki/Favicon. Para funcionar corretamente em um CDN, precisa ser um png, que será redimensionado para 32x32. Se for deixado em branco, large_icon será usado." + apple_touch_icon: "Ícone usado para dispositivos Apple touch. Não é recomendado usar um fundo transparente. Será automaticamente redimensionado para 180x180. Se for deixado em branco, large_icon será usado." opengraph_image: "Imagem opengraph padrão, usada quando a página não tiver outra imagem adequada. Se for deixada em branco, large_icon será usado." x_summary_large_image: "Cartão do Twitter \"resumo de imagem grande\" (deve ter pelo menos 280 de largura e pelo menos 150 de altura, não pode ser .svg). Se for deixado em branco, os metadados comuns do cartão são gerados usando o opengraph_image, desde que também não sejam um .svg." notification_email: "O endereço de e-mail utilizado ao enviar e-mails do sistema. O domínio especificado deve ter registros SPF, DKIM e PTR devidamente configurados para que os e-mails funcionem corretamente." + email_custom_headers: "Uma lista de cabeçalhos de e-mail personalizados" email_subject: "Formato de assunto personalizável para e-mails padrão. Acesse https://meta.discourse.org/t/customizing-specific-system-email-templates/88323" detailed_404: "Fornece mais detalhes aos(às) usuários(as) sobre o motivo de não poderem acessar um tópico específico. Observação: isso não é tão seguro porque os(as) usuários(as) saberão se uma URL estiver vinculada a um tópico válido." + enforce_second_factor: "Exija que os(as) usuários(as) ativem autenticação de dois fatores (2FA) antes de acessarem a IU do Discourse. Esta configuração não afeta a autenticação por API ou 'DiscourseConnect provider'. Se `enforce_second_factor_on_external_auth` estiver ativado, os(as) usuários(as) não poderão fazer login com provedores de autenticação externos após a configuração da 2FA." + enforce_second_factor_on_external_auth: "Exija que os(as) usuários(as) ativem autenticação de dois fatores (2FA) todas as vezes. Quando ativada, esta funcionalidade impede o acesso com métodos de autenticação externos, como plugins de redes sociais, se houver 2FA ativada. Quando desativada, os(as) usuários(as) precisam apenas confirmar a 2FA ao acessarem com nome de usuário(a) e senha. Confira também a configuração `enforce_second_factor`." force_https: "Obrigue seu site a usar apenas HTTPS. AVISO: NÃO ative até ter verificado se o HTTPS está totalmente configurado e funcionando em todos os lugares! Você verificou se seu CDN, todas as entradas com conta de rede social e logotipos e dependências externas também são compatíveis com HTTPS?" summary_score_threshold: "A pontuação mínima requerida para uma postagem ser incluída em \"Resumir este tópico\" " summary_posts_required: "Quantidade mínima de postagens em um tópico antes de ativar \"Resumir este tópico\". As alterações desta configuração serão aplicadas de forma retroativa dentro de uma semana." @@ -1755,7 +1791,10 @@ pt_BR: ga_universal_domain_name: "O nome de domínio do Google Universal Analytics, por exemplo: mysite.com; consulte https://google.com/analytics" ga_universal_auto_link_domains: "Ative o monitoramento de domínio cruzado do Google Universal Analytics. Os links de saída para estes domínios conterão a ID de cliente. Consulte Guia de acompanhamento de vários domínios do Google." gtm_container_id: "A id de contêiner do Google Tag Manager, ex.: GTM-ABCD12E.
Observação: para usar o GTM quando a Política de Segurança de Conteúdo (CSP) estiver ativada, consulte a documentação na Meta: Use nonces em scripts do Google Tag Manager." + google_site_verification_token: Token de verificação do Google Search Console. Será incluído como uma meta tag no cabeçalho HTML. enable_escaped_fragments: "Voltar para a API do Google Ajax-Crawling se um webcrawler não for encontrado. Consulte https://developers.google.com/webmasters/ajax-crawling/docs/learn-more" + moderators_manage_categories: "Permitir que moderadores criem e gerenciem categorias" + moderators_manage_groups: "Permitir que moderadores criem e gerenciem grupos." moderators_change_post_ownership: "Permitirem que moderadores(as) alterem a propriedade da postagem" cors_origins: "Origens permitidas para pedidos de origem cruzada (CORS). Cada origem deve incluir http:// ou https://. A variável de ambiente DISCOURSE_ENABLE_CORS deve ser definida como verdadeira para ativar CORS." use_admin_ip_allowlist: "Administradores(as) só podem entrar com a conta se estiverem na lista de IPs filtrados (Administração > Registros > IPs filtrados)." @@ -1767,9 +1806,9 @@ pt_BR: blocked_crawler_user_agents: "Palavra sem diferenciação de maiúsculas e minúsculas na linha do agente do(a) usuário(a) que identifica os rastreadores da web que não devem ter permissão para acessar o site. Não se aplica se a lista de permissões estiver definida." slow_down_crawler_user_agents: 'Agentes de usuário(a) de rastreadores da web que devem ter a taxa limitada conforme a configuração "reduzir taxa de rastreador". Cada valor dever ter pelo menos três caracteres.' slow_down_crawler_rate: "Se slow_down_crawler_user_agents for especificado, essa taxa será aplicada a todos os rastreadores (quantidade de segundos de atraso entre os pedidos)" + llms_txt: "Faça o upload de um arquivo de texto para ser disponibilizado em /llms.txt para os crawlers de LLM. Veja llmstxt.org para mais informações." content_security_policy: "Ative Política de Segurança de Conteúdo (CSP). A CSP é uma camada adicional de segurança que ajuda a impedir certos tipos de ataque, incluindo Cross Site Scripting (XSS) e injeção de dados." content_security_policy_report_only: "Ativar Content-Security-Policy-Report-Only (CSP)" - content_security_policy_collect_reports: "Ativar a coleta de relatórios de violação de CSP em /csp_reports" content_security_policy_frame_ancestors: "Restrinja quem incorpora este site em iframes via CSP. Controle os hosts permitidos em Incorporação" content_security_policy_script_src: "Fontes de scripts adicionais na lista de permissões. O host e CDN atual estão inclusos por padrão. Consulte Mitigue ataques XSS com a política de segurança de conteúdo. (CSP). Outras fontes de hosts são ignoradas, pois a dinâmica estrita está ativada." invalidate_inactive_admin_email_after_days: "As contas de administrador(a) que não acessaram o site nesta quantidade de dias precisarão validar novamente seu endereço de e-mail antes de entrarem com a conta. Defina como 0 para desativar." @@ -1797,6 +1836,7 @@ pt_BR: top_page_default_timeframe: "O período padrão da página superior para usuários(as) anônimos(as) (ajustado automaticamente para usuários(as) que entraram com sua conta com base no último acesso)." moderators_view_emails: "Permitir que moderadores(as) visualizem endereços de e-mail." moderators_view_ips: "Permitir que a moderação visualize endereços de IP do(a) usuário(a)" + moderators_change_trust_levels: "Permitir que os moderadores alterem os níveis de confiança dos usuários." prioritize_username_in_ux: "Mostrar primeiro o nome de usuário(a) na página do(a) usuário(a), cartão de usuário(a) e postagens (ao desativar, o nome será mostrado primeiro)" enable_rich_text_paste: "Ative a conversão automática de HTML para Markdown ao colar texto no compositor." send_old_credential_reminder_days: "Lembrar credenciais antigas após dias" @@ -1807,6 +1847,8 @@ pt_BR: whispers_allowed_groups: "Permitir comunicação privada dentro de tópicos para membros de grupos especificados." hidden_post_visible_groups: "Permita que membros destes grupos visualizem postagens ocultas. Usuários(as) da equipe sempre podem ser postagens ocultas." allow_index_in_robots_txt: "Especifique no robots.txt que este site tem permissão para ser indexado por mecanismos de pesquisa da web. Você pode substituir seu robots.txt aqui. WARNING: regras configuradas incorretamente poderão impedir que seu site seja rastreado como o esperado." + blocked_email_domains: "Uma lista de domínios de e-mail onde os usuários não têm permissão para registrar contas. Subdomínios são automaticamente processados para os domínios especificados. Os símbolos-curinga `*` e `?` não são suportados. Exemplo: mailinator.com" + allowed_email_domains: "Uma lista de domínios de e-mail onde os usuários DEVEM registrar contas. Os subdomínios são tratados para os domínios específicos. Símbolos-curinga `*` e `?` não são permitidos. AVISO: usuários(as) com domínios de e-mail que não sejam os listados aqui não terão permissão de acesso!" normalize_emails: "Verifique se o e-mail normalizado é único. E-mails normalizados removem todos os pontos do nome do(a) usuário(a) e tudo entre os símbolos + e @." auto_approve_email_domains: "Usuários(as) com endereços de e-mail desta lista de domínios serão aprovados automaticamente. Subdomínios são tratados automaticamente para os domínios específicos. Os símbolos-curinga * e ? não são compatíveis." hide_email_address_taken: "Não informe ao(as) usuários(as) que uma conta existe com um determinado endereço de e-mail durante o cadastro ou processo de recuperação de senha. Exija o e-mail completo para solicitações de \"senha esquecida\"." @@ -1840,6 +1882,7 @@ pt_BR: auth_overrides_email: "Substitui o e-mail local pelo e-mail de algum site externo a cada vez que entrar com a conta, além de impedir alterações locais. Isso se aplica a todos os provedores de autenticação (AVISO: podem ocorrer diferenças devido à normalização de e-mails locais)" auth_overrides_username: "Substitui o nome do(a) usuário(a) local pelo nome do(a) usuário(a) de algum site externo a cada vez que entrar com a conta, além de impedir alterações locais. Isso se aplica a todos os provedores de autenticação (AVISO: podem ocorrer diferenças devido ao tamanho/requisitos do nome do(a) usuário(a))" auth_overrides_name: "Substitui o nome completo local pelo nome completo de algum site externo a cada vez que entrar com a conta, além de impedir alterações locais. Isso se aplica a todos os provedores de autenticação." + auth_overrides_avatar: "Substitui o avatar local pelo avatar do site externo a cada login e impede alterações locais. Aplica-se a todos os provedores de autenticação." discourse_connect_overrides_avatar: "Substitui o avatar do(a) usuário(a) pelo valor do conteúdo do DiscourseConnect. Se for ativado, os(as) usuários(as) não terão permissão para enviar avatares no Discourse." discourse_connect_overrides_location: "Substitui a localização do(a) usuário(a) pelo valor do conteúdo do DiscourseConnect e impede alterações locais." discourse_connect_overrides_website: "Substitui o site do(a) usuário(a) pelo valor do conteúdo do DiscourseConnect e impede alterações locais." @@ -1851,6 +1894,7 @@ pt_BR: enable_local_logins_via_email: "Permita que os(as) usuários(as) solicitem um link para entrar com um clique para ser enviado por e-mail." allow_new_registrations: "Permita cadastro de novos(as) usuários(as). Desmarque isso para evitar que qualquer pessoa crie uma nova conta." enable_signup_cta: "Exiba um aviso aos(as) usuários(as) anônimos(as) que voltaram ao solicitar que criem uma conta." + enable_discourse_id: "Ativar a autenticação pelo Discourse ID, um serviço de cadastro único que permite aos(às) usuários(as) fazer login em mais de um site do Discourse com uma única conta. As empresas mais conhecidas que permitem login com sua conta, como Google, Facebook, Apple e GitHub são suportadas sem precisar de configurações adicionais. Consulte a id.discourse.com para obter mais detalhes." enable_google_oauth2_logins: "Ative a autenticação do Google Oauth2. Este é o método de autenticação que atualmente é compatível com o Google. Requer chave e segredo. Consulte Configuração para entrar com a conta Google no Discourse." google_oauth2_client_id: "O ID de cliente único fornecido pelo seu aplicativo do Google, usado para o processo de autenticação." google_oauth2_client_secret: "Segredo de cliente do seu app Google." @@ -1919,6 +1963,7 @@ pt_BR: invite_link_max_redemptions_limit_users: "A quantidade máxima de resgates de links de convite gerados por usuário(a) não pode exceder este valor." alert_admins_if_errors_per_minute: "Quantidade de erros por minuto para acionar um alerta à administração. Um valor igual a 0 desativa esse recurso. OBSERVAÇÃO: requer reinicialização." alert_admins_if_errors_per_hour: "Quantidade de erros por hora para acionar um alerta à administração. Um valor igual a 0 desativa esse recurso. OBSERVAÇÃO: requer reinicialização." + categories_topics: 'Número de tópicos a serem exibidos na página `/categories`. Se zero, um valor será automaticamente definido para manter as duas colunas simétricas. Relevante apenas para "categorias e tópicos mais recentes ou principais" estilos de página de categoria.' suggested_topics: "Quantidade de tópicos sugeridos exibidos no final de um tópico." limit_suggested_to_category: "Exiba apenas tópicos da categoria atual nos tópicos sugeridos." suggested_topics_max_days_old: "Tópicos sugeridos não devem ter mais de n dia(s)." @@ -1945,6 +1990,7 @@ pt_BR: selectable_avatars_mode: "Permitir que os usuários selecionem um avatar da lista selectable_avatars e limitem os envios de avatares personalizados ao nível de confiança selecionado." selectable_avatars: "Especifique uma coleção de avatares na qual os(as) usuários(as) podem selecionar a imagem do perfil. A imagem escolhida será exibida durante a criação do perfil do(a) usuário(a) ou ao atualizar o avatar do perfil." allow_all_attachments_for_group_messages: "Permitir todos os anexos de e-mail para mensagens de grupo." + image_quality: "Definir o nível de qualidade para as imagens carregadas no seu site. Uma qualidade inferior resultará em arquivos menores." png_to_jpg_quality: "Qualidade do arquivo JPG convertido (1 é a qualidade mais baixa, 99 é a melhor qualidade, 100 para desativar)." recompress_original_jpg_quality: "Qualidade dos arquivos de imagem carregados (1 é a qualidade mais baixa, 99 é a melhor, 100 desativa)." image_preview_jpg_quality: "Qualidade dos arquivos de imagem redimensionados (1 é a qualidade mais baixa, 99 é a melhor, 100 desativa)." @@ -1958,6 +2004,7 @@ pt_BR: video_conversion_enabled: "Ative a conversão de vídeo para arquivos de vídeo enviados. Assim os vídeos poderão ser convertidos em formatos compatíveis com a web." video_conversion_service: "O serviço de conversão de vídeo a ser usado para processamento de vídeos enviados." mediaconvert_role_arn: "Função ARN da AWS IAM para o serviço do MediaConvert. Obrigatório ao usar o AWS MediaConvert para conversão de vídeo." + mediaconvert_output_subdirectory: "Subdiretório no bucket S3 onde o MediaConvert gravará temporariamente os vídeos convertidos antes de serem movidos para o local de upload final." min_ratio_to_crop: "Taxa usada para cortar imagens altas. Digite o resultado da largura/altura." simultaneous_uploads: "Quantidade máxima de arquivos que podem ser arrastados e soltos no compositor" default_invitee_trust_level: "Nível de confiança (0-4) padrão para usuários(as) convidados(as)." @@ -2070,9 +2117,12 @@ pt_BR: num_flaggers_to_close_topic: "Quantidade mínima de usuários(as) sinalizadores únicos(as) exigidos para que um tópico seja automaticamente pausado por intervenção" num_hours_to_close_topic: "Quantidade de horas para pausar um tópico para intervenção." auto_respond_to_flag_actions: "Ative resposta automática ao remover sinalizador." + min_first_post_typing_time: "Quantidade mínima de tempo que o(a) usuário(a) deve passar digitando durante a primeira postagem. Se o limite não for atingido, a postagem entrará automaticamente na fila de aprovação necessária. Defina como 0 para desativar (não recomendado)" + fast_typing_threshold: "Tempo mínimo que o(a) usuário(a) tem para escrever sua primeira postagem. Se o limite não for cumprido, a postagem entrará automaticamente na fila de revisão. Baixo é 1 segundo, o padrão são 3 segundos e alto são 5 segundos." auto_silence_fast_typers_on_first_post: "Silenciar automaticamente usuários(as) que não atenderem ao \"limite de digitação rápida\"" auto_silence_fast_typers_max_trust_level: "Nível máximo de confiança para silenciar automaticamente usuários(as) que digitam rápido" auto_silence_first_post_regex: "Regex sem diferenciação de maiúsculas ou minúsculas que, caso em caso de aprovação, farão que a primeira postagem de um(a) usuário(a) seja silenciada e enviada para a fila de aprovação. Por exemplo: raging|a[bc]a silenciará todas as postagens contendo raging ou aba, ou aca, imediatamente. Isso se aplica apenas à primeira postagem. PRETERIDO: use Silenciar palavras acompanhadas." + moderator_guide_topic: "O tópico que descreve como você modera sua comunidade. O link ficará visível na fila de revisão para moderadores e administradores." reviewable_claiming: "O conteúdo revisável precisa ser reivindicado antes que possa ser aplicado?" reviewable_default_topics: "Mostrar conteúdo revisável agrupado por tópico por padrão" reviewable_default_visibility: "Não mostrar itens revisáveis, a menos que atendam a esta prioridade" @@ -2081,12 +2131,14 @@ pt_BR: allow_all_users_to_flag_illegal_content: "Usuários(as) anônimos(as) verão informações que eles precisam enviar por e-mail à administração para denunciar conteúdo ilegal. Esta configuração tem precedência sobre \"flag post allowed groups\"." email_address_to_report_illegal_content: "Se ficar em branco, será usado o e-mail padrão da administração do site." cooldown_hours_until_reflag: "Quantidade de tempo que os(as) usuários(as) terão que aguardar até poderem sinalizar postagem outra vez" + slow_mode_prevents_editing: "O 'Modo Lento' impede a edição após o 'editing grace period'?" reply_by_email_enabled: "Ative o recurso que permite aos(às) usuários(as) responderem a tópicos direto por e-mail, em vez de exigir que acessem o site com a conta. Confira o guia no Meta para obter mais informações." reply_by_email_address: "Modelo de resposta por e-mail, por exemplo: %%{reply_key}@reply.example.com or replies+%%{reply_key}@example.com" alternative_reply_by_email_addresses: "Lista de modelos alternativos para responder por e-mail a endereços de e-mail recebidos. Por exemplo:%%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "Use HTML em vez de texto para e-mail recebido." strip_incoming_email_lines: "Remova os espaços em branco iniciais e finais de cada linha de e-mails recebidos." - disable_emails: "Evite que o Discourse envie qualquer tipo de e-mail. Selecione \"sim\" para desativar os e-mails de todos(as) os(as) usuários(as). Selecione \"não pertence à equipe\" para desativar os e-mails apenas para usuários(as) que não fizerem parte da equipe." + disable_emails: "Evita que o Discourse envie qualquer tipo de e-mail. Selecione 'yes' para desativar os e-mails de saída de todos(as) os(as) usuários(as). Selecione 'non-staff' para desativar os e-mails apenas para usuários(as) que não fizerem parte da equipe." + allow_email_invites: "Quando desativada, essa opção impedirá que os usuários enviem e-mails de convite pelo Discourse." strip_images_from_short_emails: "Tirar imagens de e-mails cujo tamanho seja menor que 2.800 bytes" short_email_length: "Defina o tamanho máximo, em bytes, para que um e-mail seja classificado como \"curto\" para compactação de imagem. Se o tamanho do e-mail não exceder esta configuração, as imagens no e-mail (como avatar e emojis) serão removidas." display_name_on_email_from: "Exibir nomes completos no e-mail dos campos" @@ -2104,6 +2156,7 @@ pt_BR: mailgun_api_key: "A chave da API secreta do Mailgun é usada para verificar as mensagens do webhook." sendgrid_verification_key: "Chave de verificação Sendgrid usada para verificar mensagens de webhook." mailjet_webhook_token: "Token usado para verificar o payload do webhook. Deve ser passado como parâmetro de consulta 't' do webhook, por exemplo: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Token usado para verificar o payload do webhook. Deve ser passado como parâmetro de consulta 't' do webhook, por exemplo: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Chave de autenticação Mandrill usada para verificar mensagens de webhook." postmark_webhook_token: "Token usado para verificar o payload do webhook. Deve ser passado como parâmetro de consulta 't' do webhook, por exemplo: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Token usado para verificar o payload do webhook. Deve ser passado como parâmetro de consulta 't' do webhook, por exemplo: https://example.com/webhook/sparkpost?t=supersecret" @@ -2146,6 +2199,7 @@ pt_BR: relative_date_duration: "Quantidade de dias após postar em que as datas de postagem serão exibidas como relativas (7 d) em vez de absolutas (20 de fev.)." delete_user_max_post_age: "Não permitir a exclusão de usuários(as) cuja primeira postagem seja mais antiga do que (x) dias." delete_all_posts_max: "Quantidade máxima de postagens que podem ser excluídas de uma vez com o botão Remover todas as postages. Se um(a) usuário(a) tiver mais postagens do que essa quantidade, elas não poderão ser excluídas(as) de uma vez e o(a) usuário(a) não poderá ser excluído(a)." + delete_all_posts_background_threshold: "O número máximo de postagens que podem ser excluídas de uma só vez com o botão \"Excluir todas as postagens\" antes que a exclusão seja processada em segundo plano." delete_user_self_max_post_count: "A quantidade máxima de postagens que um(a) usuário(a) pode ter ao permitir a exclusão da conta de autoatendimento. Defina como 1 para desativar a exclusão da conta do serviço." username_change_period: "A quantidade máxima de dias após o registro em que as contas podem alterar seu nome do(a) usuário(a) (0 para não permitir a mudança de nome do(a) usuário(a))." email_editable: "Permita que os(as) usuários(as) alterem o seu endereço de e-mail após o cadastro." @@ -2174,14 +2228,17 @@ pt_BR: enable_category_group_moderation: "Permitir que grupos moderem conteúdo em categorias específicas" group_in_subject: "Definir %%{optional_pm} no assunto do e-mail como o nome do primeiro grupo em PM, consulte: Personalizar formato de assunto para e-mails padrão" allow_anonymous_mode: "Ative esta opção para os(as) usuários(as) trocarem para o modo anônimo para postagem. Após a ativação, eles(as) podem escolher ocultar suas identidades ao criar postagens ou tópicos através do site. Consulte também \"allow anonymous likes\"." + allow_likes_in_anonymous_mode: "Ative esta configuração para permitir que os(as) usuários(as) que estiverem navegando no seu site de forma anônima curtam as postagens. Após a ativação, os(as) usuários(as) podem escolher ocultar suas identidades ao curtir postagens ou tópicos através do site. Esta configuração requer que a opção `allow anonymous mode` esteja ativada." + anonymous_posting_allowed_groups: "Grupos que podem ativar postagens anônimas. Essa configuração requer que a opção `allow anonymous mode` esteja ativada." anonymous_account_duration_minutes: "Para proteger o anonimato, crie uma conta anônima a cada N minutos para cada usuário(a). Exemplo: se for configurado para 600, assim que passar 600 minutos a partir da última postagen E o(a) usuário(a) trocar para anônimo(a), uma nova conta anônima será criada." - hide_user_profiles_from_public: "Desative cartões de usuário(a), perfis de usuário(a) e diretório do(a) usuário(a) para usuários(as) anônimos(as)." hide_new_user_profiles: "Ocultar perfis de usuário(a) de nível de confiança 1 ou menor e confiar em usuários(as) de nível 1 até postarem pela primeira vez. Este recurso é desabilitado obrigatoriamente em caso de must_approve_users e invite_only sites." allow_users_to_hide_profile: "Permitir que usuários ocultem seu perfil e presença" hide_user_activity_tab: "Oculte a aba de atividades nos perfis de usuários(as), exceto para o(a) Administrador(a) e você mesmo(a)." delete_associated_accounts_on_password_reset: "Exclua a conta associada ao(à) usuário(a) quando este(a) alterar a senha." allow_featured_topic_on_user_profiles: "Permitir que usuários apresentem o link de um tópico em seu cartão de usuário(a) e perfil." show_inactive_accounts: "Permitir que usuários(as) conectados(as) naveguem em perfis de contas inativas." + hide_silencing_reasons: "Não exibir razões de silenciamento publicamente nos perfis de usuário." + hide_suspension_reasons: "Não exibir razões de suspensão publicamente nos perfis de usuário." log_personal_messages_views: "Registre visualizações de mensagens pessoais do(a) administrador(a) para outros(as) usuários(as)/grupos." ignored_users_count_message_threshold: "Notifique moderadores(as) se um(a) usuário(a) específico(a) for ignorado(a) por muitos(as) outros(as) usuários(as)." ignored_users_message_gap_days: "Quanto tempo esperar antes de notificar novamente moderadores(as) sobre um(a) usuário(a) que foi ignorado(a) por muitos(as) outros(as)." @@ -2189,11 +2246,13 @@ pt_BR: clean_up_unused_staged_users_after_days: "Quantidade de dias antes de um(a) usuário(a) encenado(a) não usado(a) (sem nenhuma postagem) ser removido(a). Para desativar a limpeza, defina para 0." user_selected_primary_groups: "Permitir que os(as) usuários(as) definam seu próprio grupo primário" max_notifications_per_user: "Quantidade máxima de notificações por usuário(a). Se esse número for excedido, as notificações antigas serão excluídas. Aplicado semanalmente." + allowed_user_website_domains: "O site do(a) usuário(a) será verificado em comparação a estes domínios." allow_profile_backgrounds: "Permita que os(as) usuários(as) enviem planos de fundo do perfil." get_a_room_threshold: "Quantidade de postagens que um(a) usuário(a) precisa fazer para a mesma pessoa no mesmo tópico antes de ser avisado(a)." dont_feed_the_trolls_threshold: "Número de sinalizadores de outros(as) usuários(as) antes de serem avisados(as)." enable_mobile_theme: "Os dispositivos móveis usam um tema compatível com dispositivos móveis, com a possibilidade de mudar para o site completo. Desative isso se quiser usar um estilo personalizado totalmente responsivo." dominating_topic_minimum_percent: "Percentual de postagens que um(a) usuário(a) precisa fazer em um tópico antes de ser relembrado(a) de ser excessivamente dominante em um tópico." + pm_warn_user_last_seen_months_ago: "Ao criar uma nova mensagem privada, avise aos usuários quando o destinatário de destino não foi visto há mais de n meses." suppress_uncategorized_badge: "Não exiba o emblema para assuntos não categorizados em listas de tópicos." header_dropdown_category_count: "Quantidade de categorias que podem ser exibidas no menu suspenso do cabeçalho." permalink_normalizations: "Aplique o seguinte regex antes de combinar permalinks, por exemplo: /(topic.*)\\?.*/\\1 irá retirar as linhas de consulta das rotas de tópicos. O formato é regex + string use \\ 1 etc. para acessar capturas" @@ -2267,6 +2326,7 @@ pt_BR: disable_watched_word_checking_in_user_fields: "desabilitar verificação de palavras monitoradas nos campos de usuário(a)" watched_words_regular_expressions: "Permite o uso de expressões regulares para filtrar palavras. Após a ativação, este recurso agrupa palavras sensíveis com distinção entre maiúsculas e minúsculas. Em seguida, compila todas as palavras selecionadas e forma uma única expressão regular, adicionando limites de palavra para as palavras monitoradas mais comuns. Consequentemente, este método de filtragem baseado em expressões regulares adiciona uma camada extra de controle sobre a moderação do conteúdo através da compatibilidade com padrões de palavras mais sofisticados. Com esta configuração, também é possível substituir facilmente o texto original pela opção escolhida." enable_fast_edit: "Adiciona um botão ao menu de seleção de postagem para editar um pequeno conteúdo embutido de seleção." + old_post_notice_days: "O número de dias após os quais os avisos de usuários novos e recorrentes serão ocultados. O aviso oficial da postagem permanecerá sempre visível." new_user_notice_tl: "Nível de confiança mínimo necessário para ver novos avisos de postagem do(a) usuário(a)." returning_user_notice_tl: "Nível de confiança mínimo necessário para ver os avisos de postagem do(a) usuário(a) retornando." returning_users_days: "Quantos dias devem passar antes que um(a) usuário(a) seja considerado(a) retornando." @@ -2348,6 +2408,7 @@ pt_BR: force_lowercase_tags: "Obrigar todas as novas etiquetas a ficar totalmente em minúsculas." create_post_for_category_and_tag_changes: "Criar postagem de sussurro quando a categoria ou etiquetas do tópico for alterada. É preciso ativar as publicações de sussurros." automatically_clean_unused_tags: "Exclua automaticamente etiquetas que não estão sendo utilizadas em tópicos ou mensagens pessoais todos os dias." + default_watched_precedence_over_muted: "Notificar os usuários sobre tópicos em categorias ou tags que eles estão acompanhando e que também pertencem a um tópico que eles silenciaram" company_name: "O nome da sua empresa ou organização. Se ficar vazio, não serão fornecidos Termos de Serviço nem Aviso de Privacidade clichês." governing_law: "Especifique a jurisdição que rege os aspectos legais do site, inclusive os Termos de Serviço e a Política de Privacidade. Geralmente é o país onde a empresa que opera o site está registrada ou faz negócios" city_for_disputes: "Especifique a cidade que será usada como jurisdição para a resolução de disputas relacionadas ao uso deste fórum. Geralmente essa informação está inclusa nos documentos legais, como os Termos de Serviço do fórum." @@ -2363,10 +2424,11 @@ pt_BR: sitemap_page_size: "Número de URLs a serem incluídas em cada página de mapa do site. Máx: 50.000" enable_user_status: "Permita que usuários(as) definam uma mensagem de status personalizada (emoji + descrição)." enable_user_tips: "Ativar novas dicas de usuário que descrevem os principais recursos para os(as) usuários(as)" + short_title: "O título curto será usado na tela inicial do usuário, no iniciador de aplicativos ou em outros locais onde o espaço seja limitado. Ele deve ter no máximo 12 caracteres. Observe que alterar este título pode enviar uma mensagem aos usuários do PWA solicitando que atualizem ou desinstalem o aplicativo." dashboard_hidden_reports: "Permita que relatórios específicos sejam ocultos no painel de controle." dashboard_visible_tabs: "Escolha quais abas do painel de controle estão visíveis." dashboard_general_tab_activity_metrics: "Escolha relatórios para serem exibidos como métricas de atividade na aba geral." - gravatar_enabled: "Use o serviço Gravatar para os avatares dos(as) usuários(as). Impede que os(as) usuários(as) troquem para o Gravatar para obter seus avatares, mas não afeta os(as) usuários(as) que já o usam." + gravatar_enabled: "Usar o serviço Gravatar para os avatares dos(as) usuários(as). Desativar impede que os(as) usuários(as) troquem para o Gravatar para obter seus avatares, mas não afeta os(as) usuários(as) que já o usam." gravatar_name: "Especifique o nome do provedor de serviço do Gravatar. Geralmente, o nome é usado para identificar a origem dos avatares do Gravatar no site." gravatar_base_url: "Especifique a URL para acessar a API do provedor do Gravatar. Esta configuração é fundamental para converter endereços de e-mail em URLs do Gravatar onde as imagens de avatares estão armazenadas." gravatar_login_url: "URL relacionada a \"gravatar_base_url\", que permite ao(à) usuário(a) entrar com a conta no serviço Gravatar." @@ -2379,18 +2441,24 @@ pt_BR: suggest_weekends_in_date_pickers: "Inclua fins de semana (sábado e domingo) nas sugestões do seletor de datas (desative isso se você usar o Discourse apenas durante a semana, de segunda a sexta)." show_bottom_topic_map: "Mostra o mapa de tópico na parte inferior do tópico quando tiver pelo menos dez respostas." show_topic_map_in_topics_without_replies: "Mostra o mapa de tópico mesmo se o tópico não tiver nenhuma resposta." + enable_site_owner_onboarding: "Mostra um painel na página inicial para novos administradores, ajudando-os a começar. Reative essa configuração para visualizar novamente as etapas de integração." enable_welcome_banner: "Exiba um banner nas páginas da sua lista de tópicos principais para receber os membros e permitir que eles pesquisem conteúdo no site" welcome_banner_image: "Defina uma imagem para exibir no plano de fundo do banner de boas-vindas." welcome_banner_location: "Determina em que local da página o banner de boas-vindas será exibido." welcome_banner_page_visibility: "Determina em quais páginas o banner de boas-vindas será exibido." + welcome_banner_text_color: "Após configurar a opção 'Welcome banner image', utilize esta configuração para alterar a cor do texto do banner e garantir que ele permaneça legível. Se o campo estiver em branco ou se nenhuma imagem tiver sido carregada, a cor será definida pelo tema ativo." splash_screen: "Exibe uma tela de carregamento temporária enquanto os ativos do site são carregados" + splash_screen_image: "Uma imagem SVG para exibir na tela inicial enquanto o site carrega. SVGs animados devem usar apenas animações criadas com transformações CSS ou opacidade. Use nomes exclusivos para classes CSS e keyframes. Você pode usar var(--primary), var(--secondary) e var(--tertiary) para referenciar cores do tema." navigation_menu: "Especifique a barra lateral ou menu suspenso do cabeçalho como o menu principal de navegação do seu site. É recomendável a barra lateral." default_navigation_menu_categories: "As categorias selecionadas serão exibidas abaixo da seção de Categorias do Menu de Navegação por padrão." default_navigation_menu_tags: "As etiquetas selecionadas serão exibidas na seção Etiquetas do Menu de Navegação por padrão." experimental_new_new_view_groups: 'Ative uma nova lista de tópicos que combina tópicos novos e não lidos e faz o link "Tudo", localizado na barra lateral, apontar para ela.' + enable_form_templates: "Ativar o recurso de modelos de formulário. Com ele, você pode impor um formulário estruturado com validação de dados como parte do fluxo de criação de tópicos." show_preview_for_form_templates: "Ativar a pré-visualização para o recurso de modelos de formulário" lazy_load_categories_groups: "Carregue informações de forma ociosa apenas para os(as) usuários(as) destes grupos. Melhora o desempenho em sites com várias categorias." enable_auto_grid_images: "Envolve automaticamente as imagens em tags [grid] quando três ou mais imagens são carregadas no compositor." + impersonate_without_logout: "Permitir que administradores possam personificar um usuário sem precisar sair de sua conta de administrador." + experimental_impersonation_time_limit_minutes: "Quanto tempo leva para uma sessão de personificação ser encerrada automaticamente?" page_loading_indicator: "Configure o indicador de carregamento mostrado durante as navegações da página no Discourse. O \"Controle giratório\" é um indicador de página completo. O \"Controle deslizante\" mostra uma barra estreita no topo da tela." show_user_menu_avatars: "Mostrar avatadores de usuário(a) no menu do(a) usuário(a)" about_page_hidden_groups: "Não mostre membros de grupos específicos na página /about." @@ -2403,14 +2471,31 @@ pt_BR: rich_editor: "Ative o editor de rich text para o compositor, assim todos(as) usuários(as) poderão alternar entre o modo Markdown atual e o novo editor de rich text para tornar a composição mais intuitiva e amigável." default_composition_mode: "Defina o modo padrão para o compositor da sua comunidade. O modo rich text proporciona uma experiência de escrita mais moderna e familiar para a maioria dos(as) usuários(as), já o modo Markdown pode ser apropriado para públicos mais avançados. Os membros poderão usar um botão de alternância na barra de ferramentas do compositor para alternar entre os modos." reviewable_ui_refresh: "Grupos que podem usar a nova IU experimental na fila de revisão." + viewport_based_mobile_mode: "Usar a largura da viewport para determinar os modos mobile/desktop. Essa configuração será removida em breve. Se você precisar desativá-la, avise-nos no Meta." content_localization_enabled: "Exibe o conteúdo localizado para os(as) usuários(as) com base no navegador ou nas preferências de idioma deles(as). Esse conteúdo pode incluir categorias, etiquetas, postagens e tópicos. Os locais compatíveis estão definidos em \"locais compatíveis com localização de conteúdo\"." + content_localization_supported_locales: "Lista de idiomas compatíveis para os quais o conteúdo do(a) usuário(a) pode ser traduzido. O idioma padrão do site está sempre incluído. Requer 'content localization enabled'." content_localization_allowed_groups: "Grupos com permissão para enviar conteúdo localizado. Requer \"content localization enabled\"." + content_localization_language_switcher: "Mostrar um seletor de idioma no cabeçalho para que os visitantes possam alternar entre as versões traduzidas do Discourse e do conteúdo fornecido pelo(a) usuário(a). Usa idiomas definidos em \"content localization supported locales\"." + content_localization_crawler_param: "Servir conteúdo traduzido para web crawlers quando os parâmetros 'content localization enabled' e 'set locale from param' estiverem habilitados. A lista de idiomas compatíveis está definida em 'content localization supported locales'." + content_localization_use_default_locale_when_unsupported: "Servir conteúdo traduzido no idioma padrão do site para usuários cujo idioma preferido não esteja listado em 'content localization supported locales'." + content_localization_allow_author_localization: "Permitir que os autores atualizem a localização de seus próprios tópicos e postagens por meio do menu da postagem." + fake_upcoming_change: "Esta é uma alteração prevista fictícia para fins de teste. Não é necessário traduzir esta string." + floating_dismiss_topics_on_mobile: "Exibe um botão flutuante \"Fechar...\" na lista de tópicos em dispositivos móveis para facilitar o acesso e liberar espaço na parte superior da lista." + rename_faq_to_guidelines: "Esta alteração renomeia a página de perguntas frequentes para \"Diretrizes\". A página de perguntas frequentes continuará disponível em `/faq`. A configuração \"URL da FAQ\" funciona como antes." + enable_simplified_category_creation: "Ativa um fluxo de criação de categorias simplificado, com menos opções e uma interface mais limpa." + enable_custom_splash_screen: "Permite personalizar a tela de carregamento com sua própria imagem SVG. Faça o upload de uma imagem através da configuração 'splash screen image'. Aviso: Isso pode afetar negativamente as pontuações do LCP e a indexação do Google." + modernize_foundation_theme: "Essa alteração introduz modificações de design ao tema Foundation no Discourse." + reporting_improvements: "Melhorias na navegação, design e usabilidade dos relatórios administrativos do Discourse." errors: invalid_css_color: "Cor inválida. Digite o nome da cor ou valor hexadecimal." + invalid_datetime: "Formato de data e hora inválido. Certifique-se de ter inserido uma data e hora válidas." invalid_email: "Endereço de e-mail inválido" invalid_username: "Não há nenhum(a) usuário(a) com este nome de usuário(a)." valid_username: "Há um(a) usuário(a) com este nome de usuário(a)." invalid_group: "Não há nenhum grupo com este nome." + invalid_svg: "A imagem SVG é inválida. Ela deve conter um elemento SVG e nenhum script ou manipulador de eventos." + invalid_upload: "O arquivo carregado é inválido ou não existe." + invalid_topic: "Não há nenhum tópico com este ID." invalid_integer_min_max: "O valor deve estar entre %{min} e %{max}." invalid_integer_min: "O valor deve ser %{min} ou maior." invalid_integer_max: "O valor não pode ser maior que %{max}." @@ -2447,12 +2532,12 @@ pt_BR: reply_by_email_disabled: "Você deve ativar \"responder por e-mail\" antes de ativar esta configuração primeiro." discourse_connect_url_is_empty: "É preciso definir uma \"url de conexão do Discourse\" antes de ativar esta configuração." enable_local_logins_disabled: "Você deve ativar \"ativar entradas com e-mail em modo local\" antes de ativar esta configuração." - min_username_length_exists: "Você não pode definir o tamanho mínimo do nome do(a) usuário(a) acima do nome do(a) usuário(a) mais curto (%{username})." - min_group_name_length_exists: "Você não pode definir o tamanho mínimo do nome de usuário(a) acima do nome de grupo mais curto (%{group_name})." - min_username_length_range: "Você não pode definir o mínimo acima do máximo." - max_username_length_exists: "Você não pode definir o tamanho máximo do nome do(a) usuário(a) abaixo do nome do(a) usuário(a) mais longo (%{username})." - max_group_name_length_exists: "Você não pode definir o tamanho máximo do nome de usuário(a) abaixo do nome de grupo mais longo (%{group_name})." - max_username_length_range: "Você não pode definir o máximo abaixo do mínimo." + min_username_length_exists: "Não é possível definir 'min username length' com um número maior que o comprimento do nome do(a) usuário(a) mais curto (%{username})." + min_group_name_length_exists: "Não é possível definir 'min username length' com um número maior que o comprimento do nome do grupo mais longo (%{group_name})." + min_username_length_range: "Não é possível definir 'max username length' com um valor menor que definido em 'min username length'." + max_username_length_exists: "Não é possível definir 'max username length' com um número menor que o comprimento do nome do(a) usuário(a) mais longo (%{username})." + max_group_name_length_exists: "Não é possível definir 'max username length' com um número menor que o comprimento do nome do grupo mais longo (%{group_name})." + max_username_length_range: "Não é possível definir 'max username length' menor que 'min username length'." invalid_hex_value: "Os valores de cor precisam ser códigos hexadecimais de seis dígitos." empty_selectable_avatars: "É preciso enviar pelo menos dois avatares selecionáveis antes de ativar esta configuração." category_search_priority: @@ -2467,6 +2552,7 @@ pt_BR: other: "A lista deve conter exatamente %{count} valores." markdown_linkify_tlds: "Você não pode incluir um valor de '*'." google_oauth2_hd_groups: "Você deve configurar \"google oauth2 hd\" antes de ativar esta configuração." + discourse_id_registration: "Não foi possível registrar-se automaticamente com o ID do Discourse. Isso pode ser devido a problemas de conectividade de rede, restrições de firewall ou, porque o serviço de Discourse ID está inaccessível. Verifique os logs do servidor para mais informações ou entre em contato com o suporte." linkedin_oidc_credentials: "Você deve configurar as credenciais do LinkedIn OIDC ('linkedin_oidc_client_id' and 'linkedin_oidc_client_secret') antes de habilitar esta configuração." search_tokenize_chinese_enabled: "Você deve desativar o 'search_tokenize_chinese' antes de ativar esta configuração." search_tokenize_japanese_enabled: "Você deve desativar o 'search_tokenize_japanese' antes de ativar esta configuração." @@ -2475,7 +2561,9 @@ pt_BR: invalid_uncategorized_category_setting: 'A categoria "Não categorizado" não pode ser selecionada se "permitir tópicos não categorizados" não estiver ativado.' invalid_search_ranking_weights: "O valor é inválido para a configuração do site search_ranking_weights. Exemplo: '{0.1,0.2,0.3,1.0}'. Observe que o valor máximo para cada peso é 1,0." content_localization_locale_limit: "A quantidade de locais compatíveis não pode exceder %{max}." + content_localization_language_switcher_requirements: "O seletor de idiomas requer que as configurações do site 'set locale from cookie' e 'allow user locale' estejam ativadas e que 'content localization supported locales' inclua pelo menos um idioma." mediaconvert_role_arn_required: "A função ARN da AWS IAM é obrigatória ao usar o AWS MediaConvert para a conversão de vídeo." + mediaconvert_output_subdirectory_required: "O MediaConvert output subdirectory é obrigatório." s3_credentials_required_for_video_conversion: "As credenciais S3 são obrigatórias para a conversão de vídeo. Configure as chaves de acesso S3 ou ative o perfil IAM." keywords: clean_up_inactive_users_after_days: "desativados(as)|inativos(as)|não ativados(as)" @@ -2499,6 +2587,7 @@ pt_BR: filter: description: status: "Filtrar tópicos por status" + in: "Filtrar tópicos em listas pessoais" order: "Classificar tópicos por campo específico" category: "Exibir tópicos em uma categoria específica" category_any: "Exibir tópicos em qualquer uma das categorias especificadas (separadas por vírgula)" @@ -2511,13 +2600,15 @@ pt_BR: exclude_tag: "Excluir tópicos com uma etiqueta especificada" exclude_tags_any: "Excluir tópicos com qualquer uma das etiquetas especificadas (separadas por vírgula)" exclude_tags_all: "Excluir tópicos com todas as etiquetas especificadas (separadas por vírgula)" - tags_alias: "Alias para \"etiqueta\": filtro" tag_group: "Exibir tópicos com etiquetas de um grupo de etiquetas específico" exclude_tag_group: "Excluir tópicos com tags de um grupo de etiquetas específico" activity_before: "Exibir tópicos com atividade mais recente antes de uma data (DD-MM-AAAA ou dias atrás)" activity_after: "Exibir tópicos com atividade mais recente depois de uma data (DD-MM-AAAA ou dias atrás)" created_before: "Exibir tópicos criados antes de uma data (DD-MM-AAAA ou dias atrás)" created_after: "Exibir tópicos criados após uma data (DD-MM-AAAA ou dias atrás)" + created_by: "Exibir tópicos criados por usuário(a) ou grupo específico" + created_by_user: "Exibir tópicos criados por nome de usuário ou grupo (sem @)" + created_by_multiple: "Exibir tópicos criados por qualquer um(a) dos(as) usuários(as) ou grupos especificados(as) (separados por vírgula)" latest_post_before: "Exibir tópicos com postagem mais recente antes de uma data (DD-MM-AAAA ou dias atrás)" latest_post_after: "Exibir tópicos com a postagem mais recente após a data (DD-MM-AAAA ou dias atrás)" likes_min: "Exibir tópicos com pelo menos esta quantidade de curtidas" @@ -2547,6 +2638,7 @@ pt_BR: in_new: "Mostrar tópicos que são novos ou têm respostas novas" in_new_replies: "Mostrar tópicos com respostas novas" in_new_topics: "Mostrar tópicos novos" + in_unseen: "Mostrar tópicos que você ainda não viu." order_activity: "Classificar pela última atividade (mais recente primeiro)" order_activity_asc: "Classificar pela última atividade (mais antiga primeiro)" order_category: "Classificar por nome de categoria (Z-A)" @@ -2567,6 +2659,18 @@ pt_BR: order_views_asc: "Classificar por contagem de visualizações (de menor para maior)" order_read: "Classificar por momento da última leitura (mais recente primeiro)" order_read_asc: "Classificar por momento da última leitura (mais antiga primeiro)" + order_hot: "Classificar por hot score (ordem descendente)" + order_hot_asc: "Classificar por hot score (ordem ascendente)" + users: "Filtrar tópicos por participantes" + users_any: "Exibir tópicos com qualquer um dos usuários especificados (separados por vírgula)" + users_all: "Exibir tópicos com todos os usuários especificados (separados por sinal de mais)" + exclude_users: "Excluir tópicos com determinados(as) usuários(as)." + group: "Filtrar tópicos por grupos" + groups_any: "Exibir tópicos com qualquer uma das tags especificadas (separadas por vírgula)" + groups_all: "Exibir tópicos com todos os grupos especificados (separados por sinal de mais)" + locale: "Filtrar tópicos por idioma original" + locale_any: "Exibir tópicos originalmente escritos em qualquer um dos idiomas especificados (separados por vírgulas)" + exclude_locale: "Excluir tópicos originalmente escritos em um idioma específico." discourse_connect: login_error: "Erro ao entrar com conta" not_found: "Sua conta não pôde ser encontrada. Entre em contato com o(a) administrador(a) do site." @@ -2696,6 +2800,7 @@ pt_BR: csrf_detected: "Desculpe, o tempo para autorização esgotou ou você trocou de navegador. Tente novamente." request_error: "Desculpe, ocorreu um erro ao iniciar a autorização. Tente novamente." invalid_iat: "Desculpe, não foi possível verificar o token de autorização devido à diferença de horário do servidor. Tente novamente." + unauthorized: "Desculpe, o provedor de login não autorizou sua solicitação. Tente novamente ou entre em contato com um administrador." omniauth_error_unknown: "Algo deu errado ao processar seu login, por favor tente novamente." omniauth_confirm_title: "Entrar com a conta usando %{provider}" omniauth_confirm_button: "Continuar" @@ -2749,6 +2854,7 @@ pt_BR: updating_user_ids: "Atualizando ids de usuário(a)…" deleting_source_user: "Excluindo usuário de origem…" user: + anonymized: "[removido devido à anonimização do(a) usuário(a)]" deactivated: "Desativado(a) por causa de muitos e-mails devolvidos para \"%{email}\"." deactivated_by_staff: "Desativado pela equipe" deactivated_by_inactivity: @@ -2925,46 +3031,22 @@ pt_BR: new_version_mailer: title: "Nova versão do mensageiro" subject_template: "[%{email_prefix}] Nova versão do Discourse, atualização disponível" - text_body_template: | - Viva! Uma nova versão do [Discourse](https://www.discourse.org) está disponível! - - Seu versão: %{installed_version} - Nova versão: **%{new_version}** - - - Atualize com facilidade usando a nossa **[atualização no navegador em um clique](%{base_url}/admin/update)** - - - Confira as novidades nas [notas da versão](https://meta.discourse.org/tag/release-notes) ou veja o [registro de alterações não processados GitHub](https://github.com/discourse/discourse/commits/main) - - - Acesse [meta.discourse.org](https://meta.discourse.org) para obter novidades, discussões e suporte para o Discourse new_version_mailer_with_notes: title: "Nova versão do mensageiro com notas" subject_template: "[%{email_prefix}] atualização disponível" - text_body_template: | - Viva! Uma nova versão do [Discourse](https://www.discourse.org) está disponível! - - Seu versão: %{installed_version} - Nova versão: **%{new_version}** - - - Atualize com facilidade usando a nossa **[atualização no navegador em um clique](%{base_url}/admin/update)** - - - Confira as novidades nas [notas da versão](https://meta.discourse.org/tag/release-notes) ou veja o [registro de alterações não processados GitHub](https://github.com/discourse/discourse/commits/main) - - - Acesse [meta.discourse.org](https://meta.discourse.org) para obter novidades, discussões e suporte para o Discourse - - ### Notas da versão - - %{notes} flag_reasons: off_topic: "Sua postagem foi sinalizada como **desvio de tópico**. A comunidade acha que não é compatível com o tópico conforme definida no título e na primeira postagem." inappropriate: "Sua postagem foi sinalizada como **não apropriada**: A comunidade acha que é ofensiva, abusiva, conduta odiosa ou uma violação das [nossas diretrizes da comunidade](%{base_path}/guidelines)." illegal: "Sua postagem foi sinalizada como **ilegal**: a comunidade acha que talvez ela viole a lei." spam: "Sua postagem foi sinalizada como **spam**. A comunidade acha que é um anúncio, algo que de natureza excessivamente promocional em vez de ser útil ou relevante ao tópico como esperado." notify_moderators: "Sua postagem foi sinalizada como **para a atenção do(a) moderador(a)**. A comunidade acha quea algo na postagem exige intervenção manual por um membro da equipe." + needs_approval: "Sua postagem foi marcada **para aprovação**: ela foi automaticamente colocada na fila de revisão por um membro da equipe para garantir que ela atenda às [nossas diretrizes da comunidade](%{base_path}/guidelines)." responder: off_topic: "A postagem foi sinalizada como **desvio de tópico**. A comunidade acha que não é compatível com o tópico conforme definida no título e na primeira postagem." inappropriate: "A postagem foi sinalizada como **não apropriada**: A comunidade acha que é ofensiva, abusiva, conduta odiosa ou uma violação das [nossas diretrizes da comunidade](%{base_path}/guidelines)." spam: "A postagem foi sinalizada como **spam**. A comunidade acha que é um anúncio, algo de natureza excessivamente promocional em vez de ser útil ou relevante ao tópico como esperado." notify_moderators: "A postagem foi sinalizada como **para a atenção do(a) moderador(a)**. A comunidade acha que algo na postagem exige intervenção manual por um membro da equipe." + needs_approval: "A postagem foi marcada **para aprovação**: ela foi automaticamente colocada na fila de revisão por um membro da equipe para garantir que ela atenda às [nossas diretrizes da comunidade](%{base_path}/guidelines)." flags_dispositions: agreed: "Obrigado por nos avisar. Concordamos que há um problema, estamos analisando." agreed_and_deleted: "Obrigado por nos avisar. Concordamos que há um problema, e removemos a postagem." @@ -2984,6 +3066,7 @@ pt_BR: contents_hidden: "Acesse a postagem para ver o seu conteúdo." post_hidden: title: "Postagem oculta" + preview: "Postagem ocultada devido a denúncias de membros da comunidade." subject_template: "Post oculto pelos sinalizadores da comunidade" text_body_template: | Olá, esta é uma mensagem automática de %{site_name} para informar que sua postagem foi oculta. @@ -3000,49 +3083,12 @@ pt_BR: reviewable_queued_post_revise_and_reject: title: "Comentários sobre sua postagem" subject_template: "Comentários sobre sua postagem em %{topic_title}" - text_body_template: | - Olá, %{username}, - - Revisamos sua postagem em [%{topic_title}](%{topic_url}) e temos um comentário para você. - - Motivo: %{reason} - - Comentário: %{feedback} - - Você pode editar sua postagem original abaixo e enviá-la novamente para fazer as alterações sugeridas, ou responder a esta mensagem se tiver alguma dúvida. - - -------- - - %{original_post} - - -------- - - Atenciosamente, - Moderadores do %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "Comentários sobre seu tópico" subject_template: 'Comentário sobre o novo tópico chamado "%{topic_title}"' - text_body_template: | - Olá, %{username}, - - Revisamos seu novo tópico chamado "%{topic_title}" e temos um comentário para você. - - Motivo: %{reason} - - Comentário: %{feedback} - - Você pode editar a postagem original do seu tópico abaixo e enviá-la novamente para fazer as alterações sugeridas, ou responder a esta mensagem se tiver alguma dúvida. - - -------- - - %{original_post} - - -------- - - Atenciosamente, - Moderadores do %{site_name} post_hidden_again: title: "Postagem oculta novamente" + preview: "Postagem ocultada novamente pelos membros da comunidade." subject_template: "Postagem oculta por sinalizadores da comunidade, a equipe foi notificada" text_body_template: | Olá, esta é uma mensagem automática de %{site_name} para informar que sua postagem foi oculta outra vez. @@ -3526,6 +3572,7 @@ pt_BR: Para obter mais orientações, consulte nossas [diretrizes da comunidade](%{base_url}/guidelines). too_many_spam_flags: title: "Muitas sinalizadores de spam" + preview: "Postagens temporariamente ocultas devido a denúncias de spam." subject_template: "Nova conta em espera" text_body_template: | Olá, @@ -3548,6 +3595,7 @@ pt_BR: Para obter mais orientações, consulte nossas [diretrizes da comunidade](%{base_url}/diretrizes). silenced_by_staff: title: "Silenciado(a) pela equipe" + preview: "Conta colocada temporariamente em espera." subject_template: "Conta temporariamente em espera" text_body_template: | Olá, @@ -3560,9 +3608,27 @@ pt_BR: user_automatically_silenced: title: "Usuário(a) silenciado(a) automaticamente" subject_template: "O(a) novo(a) usuário(a) %{username} silenciado(a) devido aos sinalizadores da comunidade" + text_body_template: | + Esta é uma mensagem automática. + + O(a) novo(a) usuário(a) [%{username}](%{user_url}) foi silenciado(a) automaticamente. + + [Revise as denúncias](%{base_url}/admin/flags). Se o(a) usuário(a) %{username} tiver sido silenciado(a) para não postar, clique no botão de ativar som do(a) usuário(a) na [página de administração do(a) usuário(a)](%{user_url}). + + Este limite pode ser alterado nas configurações do site "silence_new_user". user_automatically_silenced_with_reason: title: "Usuário(a) silenciado(a) automaticamente" - subject_template: "O(a) novo(a) usuário(a) %{username} silenciado(a) devido aos sinalizadores da comunidade" + subject_template: "O(a) novo(a) usuário(a) %{username} silenciado(a) devido a denúncias da comunidade" + text_body_template: | + Esta é uma mensagem automática. + + O(a) novo(a) usuário(a) [%{username}](%{user_url}) foi silenciado(a) automaticamente. + + Razão: %{reason}. + + [Revise as denúncias](%{base_url}/admin/flags). Se o(a) usuário(a) %{username} tiver sido silenciado(a) para não postar, clique no botão de ativar som do(a) usuário(a) na [página de administração do(a) usuário(a)](%{user_url}). + + Este limite pode ser alterado nas configurações do site "silence_new_user". spam_post_blocked: title: "Postagem de spam bloqueada" subject_template: "Postagens de novo(a) usuário(a )%{username} bloqueadas devido a links repetidos" @@ -3615,6 +3681,12 @@ pt_BR: Olá, Algumas postagens de novos(as) usuários(as) foram removidas pela moderação e estão aguardando revisão. [Aprove-as ou rejeite-as aqui](%{base_url}/review?type=ReviewableQueuedPost). + user_posts_deleted: + title: "Postagens do(a) usuário(a) excluídas" + subject_template: "Todas as postagens de %{user} foram excluídas" + text_body_template: + one: "%{count} postagem de @%{user} foi excluída por @%{staff_user}." + other: "%{count} postagens de @%{user} foram excluídas por @%{staff_user}." unsubscribe_link: | Para cancelar a subscrição destes e-mails, [clique aqui](%{unsubscribe_url}). unsubscribe_link_and_mail: | @@ -3728,6 +3800,7 @@ pt_BR: %{respond_instructions} user_replied: title: "Respondido(a) pelo usuário(a)" + preview: "Alguém respondeu à sua postagem." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3750,6 +3823,7 @@ pt_BR: %{respond_instructions} user_quoted: title: "Citações do(a) usuário(a)" + preview: "Alguém citou você em uma postagem." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3761,6 +3835,7 @@ pt_BR: %{respond_instructions} user_linked: title: "Usuário(a) vinculado(a)" + preview: "Postagem vinculada em outro tópico." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3772,6 +3847,7 @@ pt_BR: %{respond_instructions} user_mentioned: title: "Usuário(a) mencionado(a)" + preview: "Alguém mencionou você em uma postagem." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3827,6 +3903,7 @@ pt_BR: %{respond_instructions} user_posted: title: "Postado(a) pelo(a) usuário(a)" + preview: "Alguém respondeu a um tópico que você está acompanhando." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3860,6 +3937,7 @@ pt_BR: %{respond_instructions} user_posted_pm: title: "MP postada pelo(a) usuário(a)" + preview: "Alguém enviou uma mensagem privada para você." subject_template: "[%{email_prefix}] [MP] %{topic_title}" text_body_template: | %{header_instructions} @@ -3928,6 +4006,12 @@ pt_BR: account_second_factor_disabled: title: "Autenticação de dois fatores desativada" subject_template: "[%{email_prefix}] Autenticação de dois fatores desativada" + text_body_template: | + A autenticação de dois fatores foi desativada na sua conta em %{site_name}. Agora você pode entrar com a conta somente usando a senha. Não é mais necessário um código de autenticação adicional. + + Se você não tiver optado por desativar a autenticação de dois fatores (2FA), alguém pode ter comprometido sua conta. + + Se você tiver alguma dúvida, [entre em contato com nossa equipe prestativa](%{base_url}/sobre). digest: why: "Um breve resumo de %{site_link} desde %{since}" since_last_visit: "Desde a sua última visita" @@ -3948,6 +4032,7 @@ pt_BR: preheader: "Um breve resumo desde %{since}" forgot_password: title: "Esqueci a senha" + preview: "Redefinir sua senha." subject_template: "[%{email_prefix}] Redefinição de senha" text_body_template: | Alguém pediu para redefinir sua senha [%{site_name}](%{base_url}). @@ -3969,6 +4054,7 @@ pt_BR: %{base_url}/session/email-login/%{email_token} set_password: title: "Definir senha" + preview: "Definir a senha da conta." subject_template: "[%{email_prefix}] Configurar senha" text_body_template: | Alguém pediu para adicionar uma senha à sua conta em [%{site_name}](%{base_url}). Como alternativa, você pode entrar com a conta qualquer serviço on-line compatível (Google, Facebook, etc.) associado a esse endereço de e-mail validado. @@ -3979,6 +4065,7 @@ pt_BR: %{base_url}/u/password-reset/%{email_token} admin_login: title: "Entrar com conta de administrador(a)" + preview: "Login de administrador solicitado." subject_template: "[%{email_prefix}] Entrar com conta" text_body_template: | Alguém pediu para entrar com a sua conta em [%{site_name}](%{base_url}). @@ -3989,6 +4076,7 @@ pt_BR: %{base_url}/session/email-login/%{email_token} account_created: title: "Conta criada" + preview: "Nova conta criada para você." subject_template: "[%{email_prefix}] Sua nova conta" text_body_template: | Uma nova conta foi criada para você em%{site_name} @@ -4025,6 +4113,7 @@ pt_BR: text_body_template: "Antes de podermos adicionar um novo endereço de e-mail, precisamos confirmar que você \ncontrola a conta de e-mail atual. Depois de concluir esta etapa, solicitaremos que você \nconfirme o novo endereço de e-mail.\n\nConfirme seu endereço de e-mail atual para %{site_name} clicando no seguinte link: \n\n%{base_url}/u/confirm-old-email/%{email_token}\n" notify_old_email: title: "Notificar e-mail antigo" + preview: "Endereço de e-mail atualizado." subject_template: "[%{email_prefix}] Seu endereço de e-mail foi alterado" text_body_template: | Esta é uma mensagem automática para avisar que seu endereço de e-mail para @@ -4047,6 +4136,7 @@ pt_BR: %{new_email} signup_after_approval: title: "Inscrição após aprovação" + preview: "Nova conta aprovada." subject_template: "Você foi aprovado(a) no %{site_name}!" text_body_template: | Boas-vindas ao %{site_name}! @@ -4072,6 +4162,7 @@ pt_BR: %{reject_reason} signup: title: "Criar conta" + preview: "Confirme sua conta" subject_template: "[%{email_prefix}] Confirme sua nova conta" text_body_template: | Boas-vindas ao %{site_name}! @@ -4094,6 +4185,7 @@ pt_BR: Se não for possível clicar no link acima, tente copiar e colar na barra de endereço do seu navegador. suspicious_login: title: "Alerta de nova entrada com conta" + preview: "Verifique seu dispositivo." subject_template: "[%{site_name}] Nova entrada com conta em %{location}" text_body_template: | Olá, @@ -4119,8 +4211,14 @@ pt_BR: page_not_found: page_title: "Página não encontrada" title: "Oops! Essa página não existe ou é privada." + subtitle: "Procuramos em todos os lugares, mas não conseguimos encontrar a página que você estava procurando." + popular_topics: "Tópicos populares" + recent_topics: "Tópicos recentes" see_more: "Mais" + search_title: "Que tal tentar pesquisar?" search_button: "Pesquisar" + home: "Voltar para o início" + placeholder: "Procurar tópicos por título ou palavras-chave…" offline: title: "Não é possível carregar o aplicativo" offline_page_message: "Parece que você está off-line! Verifique sua conexão de rede e tente novamente." @@ -4129,6 +4227,7 @@ pt_BR: upload: edit_reason: "cópias locais de imagens baixadas" unauthorized: "Desculpe, o arquivo que você está tentando enviar não é autorizado (extensões autorizadas: %{authorized_extensions})." + images_only: "Desculpe, você só pode fazer upload de imagens para esta configuração." pasted_image_filename: "Imagem colada" store_failure: "Falha ao arquivar o envio #%{upload_id} do(a) usuário(a) #%{user_id}." file_missing: "Desculpe, você deve fornecer um arquivo para upload." @@ -4216,6 +4315,8 @@ pt_BR: latte_theme_name: "Latte" summer_theme_name: "Verão" dark_rose_theme_name: "Rosa-escuro" + errors: + cannot_edit_remote_copies: "Não é permitido editar cópias remotas de paletas de cores." edit_this_page: "Editar esta página" csv_export: boolean_yes: "Sim" @@ -4847,6 +4948,15 @@ pt_BR: one: "Você precisa selecionar pelo menos %{count} etiqueta." other: "Você precisa selecionar pelo menos %{count} etiquetas." upload_row_too_long: "O arquivo CSV deve ter uma etiqueta por linha. Opcionalmente, a etiqueta pode ser seguida por uma vírgula e, em seguida, pelo nome do grupo de etiquetas." + bulk_create: + invalid_params: "Parâmetros inválidos. Forneça um array com os nomes das tags." + invalid_name: "Nome de tag inválido." + tag_too_long: + one: "A tag é longa demais (máx. %{count} caractere)." + other: "A tag é longa demais (máx. %{count} caracteres)." + too_many_tags: + one: "Tags demais. Você pode criar até %{count} tag por vez. Para importações maiores, use o recurso de upload de CSV." + other: "Tags demais. Você pode criar até %{count} tags por vez. Para importações maiores, use o recurso de upload de CSV." forbidden: invalid: one: "A etiqueta que você selecionou não pode ser usada" @@ -4873,6 +4983,9 @@ pt_BR: rss_by_tag: "Tópicos etiquetados com %{tag}" finish_installation: congratulations: "Parabéns, você instalou o Discourse!" + login_with_discourse_id: "Entrar com o Discourse ID." + discourse_id_help: "Faça login com o Discourse ID usando o botão abaixo.

Certifique-se de usar uma conta Discourse ID com um e-mail principal que corresponda à variável de ambiente `DISCOURSE_DEVELOPER_EMAILS`." + discourse_id_error_help: "Você optou por pular a configuração de e-mail por enquanto. Infelizmente, devido à mensagem de erro acima, a configuração não poderá prosseguir. Por favor, relate este problema em meta.discourse.org." register: button: "Cadastrar" title: "Cadastrar conta de administrador(a)" @@ -4884,6 +4997,10 @@ pt_BR: resend_email: title: "Enviar novamente e-mail de ativação" message: "

Reenviamos o e-mail de confirmação para %{email}" + discourse_id: + help: "Estamos configurando seu Discourse ID." + no_allowed_emails: "Não há endereços de e-mail permitidos configurados em DISCOURSE_DEVELOPER_EMAILS. Não é possível continuar com a configuração do site." + global_notice: "Nenhum administrador fez login ainda. Faça login usando uma conta Discourse ID com um e-mail que corresponda à variável de ambiente `DISCOURSE_DEVELOPER_EMAILS` para concluir a instalação." safe_mode: title: "Entrar no modo de segurança" description: "O modo de sergurança permite testar seu site sem carregar temas ou personalizações de plugin do cliente. As personalizações de plugin do servidor permanecem ativadas." @@ -4895,15 +5012,19 @@ pt_BR: enter: "Entrar no modo de segurança" must_select: "Você deve selecionar pelo menos uma opção para entrar no modo de segurança." dev_mode: - enter: "Enter" + title: "Modo de desenvolvedor" + enable_rack_mini_profiler: "Ative o Rack Mini Profiler para que ele persista entre as mudanças de sessão por 1 hora." + enter: "Entrar no modo de desenvolvedor" wizard: title: "Configuração do Discourse" step: setup: title: "Primeiros passos" + description: "Vamos configurar sua comunidade com o básico. Você sempre poderá alterar essas configurações mais tarde." fields: title: label: "Nome da comunidade" + placeholder: "Hangout de Jane" default_locale: label: "Idioma" login_required: @@ -4911,15 +5032,15 @@ pt_BR: description: "Sua comunidade é pública ou privada?" choices: public: - label: "Público(a)" + label: "Pública" private: - label: "Privado(a)" + label: "Privada" invite_only: label: "Cadastro" description: "Como os membros podem participar desta comunidade?" choices: sign_up: - label: "Cadastrar-se" + label: "Cadastrando-se" invite_only: label: "Apenas convites" must_approve_users: @@ -4951,9 +5072,20 @@ pt_BR: review_by: "Revisão por" pr_summary: "%{commits} confirma %{changed_files} arquivos alterados com %{additions} adições e %{deletions} exclusões" no_description: "Contribua para o desenvolvimento do %{repo} ao criar uma conta no GitHub." + pr_title: + default: "Pull request" + draft: "Rascunho de pull request" + open: "Abrir pull request" + approved: "Pull request aprovado" + changes_requested: "Alterações solicitadas" + merged: "Pull request mesclado (merged)" + closed: "Pull request fechado" status_date: open: "abertos" + draft: "rascunhos" approved: "aprovada" + changes_requested: "alterações solicitadas" + merged: "mesclado" closed: "fechados" discourse_push_notifications: popup: @@ -4969,9 +5101,12 @@ pt_BR: confirm_body: "Tudo pronto! As notificações foram ativadas." custom: "Notificação de %{username} em %{site_title}" staff_action_logs: + redacted: "[conteúdo não visível]" json_too_long: "Valores não registrados, os limites de tamanho da coluna foram excedidos" not_found: "não encontrado(a)" unknown: "desconhecido(a)" + site_setting: + update_existing_users: "atualizar usuários(as) existentes? %{value}" user_merged: "%{username} foi mesclado(a) nesta conta" user_delete_self: "Autoexcluído(a) de %{url}" webhook_deactivation_reason: "Seu webhook foi desativado automaticamente. Recebemos várias respostas de falha de status HTTP \"%{status}\"." @@ -4992,9 +5127,14 @@ pt_BR: auto_deleted_hidden_posts: "Postagens ocultas destruídas automaticamente" seed_data_topic_updated: "Tópico de dados de semente atualizado" seed_data_topic_deleted: "Tópico de dados de semente excluído" + upcoming_changes: + log_manually_toggled: "Ativado manualmente pelo usuário" + log_promoted: > + Essa alteração prevista alcançou o status '%{change_status}' e por isso foi ativada automaticamente no seu site. Consulte a página sobre as próximas alterações para saber mais. reviewables: already_handled: "Obrigado, mas já analisamos esta postagem e determinamos que não precisa ser sinalizada novamente." already_handled_and_user_not_exist: "Obrigado, mas alguém já revisou e esse(a) usuário(a) não existe mais." + post_restored_by_author: "A postagem foi restaurada pelo(a) autor(a)." priorities: low: "Baixo(a)" medium: "Médio(a)" @@ -5060,14 +5200,19 @@ pt_BR: description: "Aceite a sinalização, oculte esta publicação e envie automaticamente ao(à) usuário(a) uma mensagem solicitando edição." complete: "Postagem oculta, o(a) usuário(a) recebeu uma notificação." agree_and_edit: + title: "Editar postagem" description: "Concorde com o sinalizador e abra uma janela do compositor para editar a postagem." complete: "Sinalizador reconhecido, você pode editar a postagem." delete: title: "Excluir" complete: "Postagem excluída." delete_and_ignore: + title: "Excluir postagem e ignorar sinalização" + description: "Excluir a postagem e ignorar a denúncia removendo-a da fila; se for a primeira postagem, exclua também o tópico. " complete: "Postagem excluída." delete_and_ignore_replies: + title: "Excluir a postagem e as respostas, ignorar denúncia" + description: "Excluir a postagem e todas as suas respostas e ignorar a denúncia removendo-a da fila; se for a primeira postagem, excluir também o tópico." confirm: "Você tem certeza de que deseja excluir as respostas desta postagem também?" complete: "Postagem e respostas excluídas." delete_and_agree: @@ -5081,16 +5226,19 @@ pt_BR: complete: "Postagem e respostas excluídas." disagree_and_restore: title: "Restaurar postagem" + description: "Discordar da denúncia e restaurar a publicação." complete: "Postagem restaurada." disagree_bundle: title: "Não" disagree: title: "Manter postagem" + description: "Discordar da denúncia" complete: "Sinalizador ignorado." discard_post: title: "Descartar postagem" complete: "Postagem descartada." revise_and_reject_post: + title: "Solicitar revisão..." complete: "Postagem recusada aguardando revisão." ignore: title: "Ignorar" @@ -5122,6 +5270,7 @@ pt_BR: title: "Não" delete: title: "Excluir usuário(a)" + description: "Excluir usuário sem bloquear" complete: "Usuário(a) excluído(a)." block: title: "Excluir e bloquear usuário(a)" @@ -5131,6 +5280,7 @@ pt_BR: title: "Sim" not_spam: title: "Não" + description: "Não é spam, aprove o usuário." reject: title: "Rejeitar" bundle_title: "Rejeitar…" @@ -5143,36 +5293,68 @@ pt_BR: reject_and_delete: title: "Rejeitar e excluir a postagem" complete: "Postagem recusada e excluída." + reject_and_delete_standalone: + title: "Não, exclua a postagem" reject_and_keep_deleted: title: "Manter a postagem excluída" complete: "Postagem recusada e mantida excluída." + reject_and_keep_deleted_standalone: + title: "Não, mantenha a postagem excluída" scrub: - title: Registro removido + title: Remover registro approve_and_restore: title: "Sim" complete: "Postagem aprovada e restaurada." approve_and_unhide: title: "Sim" complete: "Postagem aprovada e revelada" - no_action_post: - title: "Sem ação" + post_actions: + bundle_title: "O que você deseja fazer com a postagem?" delete_post: title: "Excluir postagem" + description: "Excluir esta postagem" complete: "Postagem excluída" hide_post: title: "Ocultar postagem" + description: "Ocultar esta postagem da visualização pública" + complete: "Postagem oculta" + unhide_post: + title: "Reexibir postagem" + description: "Tornar esta postagem visível para todos os usuários." + complete: "Postagem não mais oculta" restore_post: title: "Restaurar postagem" + description: "Restaurar esta postagem excluída" complete: "Postagem restaurada" - no_action_user: - title: "Sem ação" + edit_post: + title: "Editar postagem" + description: "Editar o conteúdo desta postagem" + complete: "Postagem editada" + user_actions: + bundle_title: "O que você deseja fazer com o(a) usuário(a)?" silence_user: title: "Silenciar usuário(a)" + description: "Impedir que o(a) usuário(a) faça postagens" + complete: "Usuário(a) silenciado(a)" + reason: "Usuário(a) silenciado(a) via fila de revisão" suspend_user: title: "Suspender usuário(a)" + description: "Suspender a conta do usuário" + complete: "Usuário(a) suspenso(a)." + reason: "Usuário(a) suspenso(a) via fila de revisão" delete_user: title: "Excluir usuário(a)" + description: "Excluir este(a) usuário(a) do fórum." + complete: "Usuário(a) excluído(a)." reason: "Excluído(a) via fila de revisão" + delete_and_block_user: + title: "Excluir e bloquear" + description: "Excluir o(a) usuário(a) e bloquear seu IP/e-mail." + complete: "Usuário(a) excluído(a) e bloqueado(a)" + delete_user_block: + title: "Excluir e bloquear" + description: "Excluir o(a) usuário(a) e bloquear seu IP/e-mail." + complete: "Usuário(a) excluído(a) e bloqueado(a)" email_style: html_missing_placeholder: "O modelo HTML deve incluir %{placeholder}" notification_level: @@ -5216,6 +5398,11 @@ pt_BR: reserved_id: "tem chave reservada como id: %{id}" unsafe_description: "tem uma descrição HTML não segura" invalid_tag_group: "tem grupo de etiquetas inválido: %{tag_group_name}" + discourse_id: + already_registered: "Este site já está registrado com o Discourse ID." + errors: + not_configured: "O Discourse ID não está configurado. Por favor, ative o Discourse ID primeiro." + regenerate_failed: "Não foi possível regerar as credenciais. Tente novamente mais tarde." activemodel: errors: <<: *errors diff --git a/config/locales/server.ro.yml b/config/locales/server.ro.yml index 9e7bba019dd35..45abe38b77950 100644 --- a/config/locales/server.ro.yml +++ b/config/locales/server.ro.yml @@ -429,6 +429,9 @@ ro: has_subcategories: "Nu putem șterge această categorie pentru că are subcategorii." topic_exists_no_oldest: "Nu poți șterge categoria fiindcă numărul subiectelor este de %{count}." uncategorized_description: "Subiecte care nu au nevoie de o categorie, sau care nu se potrivesc în nicio categorie deja existentă." + category_types: + discussion: + title: "discuție" trust_levels: admin: "Admin" staff: "Membrii echipei" @@ -644,6 +647,7 @@ ro: deny: "Anulează" read: "citire" read_write: "citire/scriere" + copied: "Copiat!" otp_confirmation: confirm_title: Continuă la %{site_name} logging_in_as: Autentificare ca %{username} @@ -681,9 +685,10 @@ ro: flag: Tip visits: title: "Vizite ale utilizatorilor" - xaxis: "Zi" + xaxis: + desktop: "Desktop" + mobile: "Mobil" yaxis: "Număr de vizite" - description: "Numărul de vizite ale utilizatorilor conectați." signups: xaxis: "Zi" new_contributors: @@ -1037,7 +1042,6 @@ ro: auth_overrides_avatar: "Suprascrie avatarul local cu avatarul site-ului extern la fiecare conectare și previne modificările locale. Se aplică tuturor furnizorilor de autentificare." allow_new_registrations: "Permite înregistrarea noilor utilizatori. Debifați pentru a restricționa pe oricine să creeze un cont nou." enable_signup_cta: "Arată o notificare către utilizatorii anonimi care revin prin care să le ceri să se înregistreze pentru a avea un cont pe site." - enable_discourse_id: "Activează autentificarea prin Discourse ID, un serviciu de conectare unică ce permite utilizatorilor să se conecteze la mai multe site-uri Discourse folosind un singur cont. Furnizorii comuni de conectare socială, cum ar fi Google, Facebook, Apple și GitHub, sunt acceptați fără configurare suplimentară. Consultă id.discourse.com pentru mai multe detalii." google_oauth2_client_secret: "Secret client al aplicației tale Google." google_oauth2_hd_groups: "Preia grupurile Google ale utilizatorilor pe domeniul găzduit la autentificare. Grupurile Google preluate pot fi utilizate pentru a acorda automat calitatea de membru al grupului Discourse (consultă setările grupului). Pentru mai multe informații, vezi https://meta.discourse.org/t/226850" google_oauth2_verbose_logging: "Înregistrează diagnostice verbale legate de Google OAuth2 în /logs" @@ -1205,7 +1209,6 @@ ro: enable_user_directory: "Furnizează un „carte de telefon” cu utilizatorii" allow_anonymous_mode: "Activează opțiunea pentru ca utilizatorii să treacă la modul anonim pentru postare. Când este activată, utilizatorii pot opta ca identitățile lor să fie ascunse atunci când creează postări sau subiecte pe tot site-ul. Vezi și „permite aprecieri anonime”." anonymous_account_duration_minutes: "Pentru protejarea anonimității, creează un nou cont anonim la fiecare N minute pentru fiecare utilizator. Exemplu: dacă e setat la 600, imediat ce au trecut 600 de minute de la ultima postare șI utilizatorul a comutat pe anonim, va fi creat un nou cont anonim." - hide_user_profiles_from_public: "Dezactivează cardurile, profilurile și „cartea de telefon” pentru utilizatorii anonimi." allow_users_to_hide_profile: "Permite utilizatorilor să-şi ascundă profilul şi prezenţa" allow_profile_backgrounds: "Permite utilizatorilor să încarce fundaluri de profil." get_a_room_threshold: "Numărul de postări pe care un utilizator poate să le facă la adresa aceleiași persoane înainte de a primi un avertisment." @@ -1318,8 +1321,6 @@ ro: reply_by_email_address_is_empty: "Trebuie să setezi o adresă pentru „răspunde prin email” înainte să poți activa răspunsul prin email." user_locale_not_enabled: "Trebuie să activezi întâi „permite locale utilizator” înainte de activa această setare." invalid_regex: "Regex invalid sau nepermis." - min_username_length_range: "Nu poți seta minimum cu o valoare mai mare decât a maximului." - max_username_length_range: "Nu poți seta maximum cu o valoare mai mică decât a minimului." content_localization_locale_limit: "Numărul de locale acceptate nu poate depăși %{max}." content_localization_language_switcher_requirements: "Comutatorul de limbă necesită ca „setarea localei din cookie” și „permite locala utilizatorului” din setările site-ului să fie activate, și „locale acceptate din localizarea de conținut” să aibă cel puțin o limbă." mediaconvert_role_arn_required: "Rolul AWS IAM ARN este necesar atunci când utilizezi AWS MediaConvert pentru conversia video." @@ -1353,7 +1354,6 @@ ro: exclude_tag: "Exclude subiectele cu o anumită etichetă" exclude_tags_any: "Exclude subiectele cu oricare dintre etichetele specificate (separate prin virgulă)" exclude_tags_all: "Exclude subiectele cu toate etichetele specificate (separate prin virgulă)" - tags_alias: "Alias pentru filtrul „etichetă:”" tag_group: "Arată subiectele cu etichete dintr-un anumit grup de etichete" exclude_tag_group: "Exclude subiectele cu etichete dintr-un anumit grup de etichete" activity_before: "Arată subiectele cu ultima activitate înainte de o dată (AAAA-LL-ZZ sau acum câteva zile)" @@ -2226,8 +2226,6 @@ ro: deprecation_error_description: "Pentru a verifica compatibilitatea cu viitoarele actualizări Discourse, poți face ca deprecierile Javascript să ridice o eroare:" deprecation_error_label: Fă ca deprecierile Javascript să ridice o eroare enter: "Activează modul sigur" - dev_mode: - enter: "Enter" wizard: title: "Configurare Discourse" step: @@ -2367,18 +2365,12 @@ ro: approve_and_unhide: title: "Da" complete: "Postare aprobată și afișată" - no_action_post: - title: "Nicio acțiune" delete_post: complete: "Postarea a fost ștearsă" restore_post: complete: "Postarea a fost restaurată" user_actions: bundle_title: "Ce vrei să faci cu utilizatorul?" - no_action_user: - title: "Nicio acțiune" - description: "Nu lua nicio măsură împotriva utilizatorului" - complete: "Nicio măsură luată împotriva utilizatorului" silence_user: title: "Redu la tăcere utilizatorul" description: "Împiedică utilizatorul să posteze" diff --git a/config/locales/server.ru.yml b/config/locales/server.ru.yml index b42f705ddc811..4efd2b2a04358 100644 --- a/config/locales/server.ru.yml +++ b/config/locales/server.ru.yml @@ -60,8 +60,8 @@ ru: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} от пользователя %{username}" - too_many_urls: "Невозможно встроить как OneBox более 10 URL-адресов в один запрос." - concurrency_not_allowed: "Нельзя делать несколько запросов OneBox одновременно. Отправляйте их по одному за раз." + too_many_urls: "Невозможно преобразовать более 10 URL-адресов в однострочные блоки в одном запросе." + concurrency_not_allowed: "Одновременные запросы на преобразование URL-адресов в однострочные блоки не допускаются. Пожалуйста, отправляйте только один запрос за раз." components: enabled_filter: "Включено" disabled_filter: "Отключено" @@ -149,6 +149,8 @@ ru: invalid_type: "Тип «%{type}» не является допустимым" humanize_not_valid_string_value: "Свойство JSON Pointer '%{property_json_pointer}' должно быть строкой." not_valid_string_value: "должно быть строкой" + humanize_not_valid_datetime_value: "Свойство в JSON-указателе '%{property_json_pointer}' должно представлять собой допустимую дату и время." + not_valid_datetime_value: "должна быть действительная дата и время" humanize_not_valid_integer_value: "Свойство JSON Pointer '%{property_json_pointer}' должно быть целым числом." not_valid_integer_value: "должно быть целым" humanize_not_valid_float_value: "Свойство JSON Pointer '%{property_json_pointer}' должно быть числом с плавающей запятой." @@ -297,7 +299,9 @@ ru: errors: &errors format: ! "%{attribute} %{message}" format_with_full_message: "%{attribute}: %{message}" + diff_too_complex: "Разница в значениях слишком сложна для безопасного вычисления. Пожалуйста, попробуйте внести более мелкие изменения." messages: + invalid_locale: "%{invalid_locale} не является допустимой локалью" too_long_validation: one: "не может быть длиннее %{count} символа, а введено %{length}." few: "не может быть длиннее %{count} симв., а введено %{length}." @@ -317,6 +321,7 @@ ru: greater_than: должно быть больше чем %{count} greater_than_or_equal_to: должно быть больше или равно %{count} has_already_been_used: "уже было использовано" + in: должно быть в %{count} inclusion: не включено в список invalid: неверное is_invalid: "выглядит странно, это предложение закончено?" @@ -396,7 +401,7 @@ ru: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Значение User agent должно содержать не менее 3 символов, чтобы избежать случайного ограничения скорости для полномочных пользователей." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Не допускается использование следующих значений: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "В не можете отключить удаление метаданных из изображения, пока включена оптимизация загружаемых файлов изображений на стороне клиента. Отключите параметр «composer media optimization image enabled» перед отключением параметра «strip image metadata»." - x_summary_large_image_no_svg: "Изображения сводной карточки Twitter, используемые для метаданных twitter:image, не могут быть в формате «.svg»." + x_summary_large_image_no_svg: "Изображения, используемые для метаданных twitter:image, не могут быть в формате .svg." tl0_and_anonymous_flag: "Для анонимных пользователей необходимо указать 'site contact email' или 'email address to report illegal content'." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Для этой настройки сначала нужно включить параметр 'allow anonymous mode'." conflicting_google_user_id: 'Идентификатор аккаунта Google для этого аккаунта изменился. По соображениям безопасности требуется вмешательство персонала. Свяжитесь с персоналом и укажите
https://meta.discourse.org/t/76575' @@ -450,6 +455,7 @@ ru: redemption_count_less_than_max: "должно быть меньше %{max_redemptions_allowed}." email_xor_domain: "Одновременное указание домена и адреса электронной почты не допускается" existing_user_success: "Приглашение использовано" + email_invites_disabled: "Отправка пригласительных писем отключена." bulk_invite: file_should_be_csv: "Загружаемый файл должен быть в формате CSV." max_rows: "Первые приглашения (%{max_bulk_invites}) отправлены. Попробуйте разделить файл на более мелкие части." @@ -679,6 +685,7 @@ ru: many: "Одновременно можно добавить не более %{count} пользователей" other: "Одновременно можно добавить не более %{count} пользователя" usernames_or_emails_required: "Необходимо указать имена пользователей или адреса электронной почты" + cannot_add_emails: "Для добавления участников в эту группу можно использовать только имена пользователей. Чтобы пригласить по электронной почте, воспользуйтесь кнопкой «Пригласить»." counting_too_many_email_domains: one: "Максимальное количество доменов электронной почты, которые можно учесть одновременно, — %{count}" few: "Максимальное количество доменов электронной почты, которые можно учесть одновременно, — %{count}" @@ -686,6 +693,7 @@ ru: other: "Максимальное количество доменов электронной почты, которые можно учесть одновременно, — %{count}" no_invites_with_discourse_connect: "При включении DiscourseConnect вы можете приглашать только зарегистрированных пользователей" no_invites_without_local_logins: "При отключении локальных логинов вы можете приглашать только зарегистрированных пользователей" + update_existing_users_required: "Это изменение затрагивает %{count} существующих участников группы. Необходимо указать параметр 'update_existing_users' (true или false), чтобы определить, следует ли применять новые настройки уведомлений по умолчанию к существующим участникам." default_names: everyone: "все" admins: "администраторы" @@ -906,6 +914,12 @@ ru: other: "Категорию удалить нельзя: в ней содержатся %{count} темы. Самая старая тема: %{topic_link}." topic_exists_no_oldest: "Категорию удалить нельзя: количество тем в ней равно %{count}." uncategorized_description: "Темы, которым не нужна категория, или которые не соответствуют ни одной из существующих категорий." + category_types: + not_available: "Категория типа '%{type_name}' недоступна" + discussion: + name: "Обсуждение" + title: "обсуждение" + description: "Стандартный раздел со всем необходимым для общения." trust_levels: admin: "Администратор" staff: "Персонал" @@ -1181,6 +1195,7 @@ ru: too_many_drafts: title: "Слишком много черновиков" description: "Вы достигли максимального количества разрешенных черновиков. Удалите некоторые из [черновиков] (%{base_url}/my/activity/drafts) и попробуйте снова." + bulk_destroy_limit: "Одновременно можно удалить не более %{limit} черновиков." draft_backup: pm_title: "Резервные копии черновиков из текущих тем" pm_body: "Тема, содержащая резервные копии черновиков" @@ -1194,6 +1209,8 @@ ru: connection_error: "При подключении к серверу возникла проблема, проверьте имя сервера, порт и повторите попытку." timeout_error: "Время подключения к серверу истекло, проверьте имя сервера, порт и повторите попытку." unhandled_error: "Необработанная ошибка при тестировании настроек электронной почты. %{message}" + invalid_host: "Указанный хост преобразуется в запрещенный IP-адрес." + host_resolve_failed: "Указанный хост не удалось разрешить." webauthn: validation: invalid_type_error: "Указанный тип webauthn недействителен. Допустимые типы: webauthn.get и webauthn.create." @@ -1278,12 +1295,19 @@ ru: weekly: "еженедельно" every_month: "каждый месяц" every_six_months: "каждые шесть месяцев" + calendar_subscriptions: + application_name: "Подписки на календарь" user_api_key: authorize: "Разрешить" deny: "Нет" read: "чтение" read_write: "чтение и запись" + logged_in_as: "Вы вошли как" + permissions_header: 'Это позволит "%{application_name}:' + redirect_warning: "При авторизации вы будете перенаправлены на" instructions: 'Мы сгенерировали новый API-ключ пользователя для приложения «%{application_name}». Вставьте этот ключ в приложение:' + copy_key: "Копировать ключ" + copied: "Скопировано!" otp_description: 'Разрешить приложению «%{application_name}» доступ к этому сайту?' otp_confirmation: confirm_title: Перейти на сайт %{site_name} @@ -1362,9 +1386,11 @@ ru: description: "Список статусов жалоб, включая тип жалобы, автора сообщения и жалобы и время, потраченное на разрешение жалоб." visits: title: "Визиты пользователей" - xaxis: "Дата" + xaxis: + desktop: "Настольная" + mobile: "Мобильная" yaxis: "Количество визитов" - description: "Количество визитов авторизованных пользователей." + description: "Количество посещений сайта авторизованными пользователями по типу устройства." signups: title: "Регистрации" xaxis: "Дата" @@ -1407,6 +1433,8 @@ ru: yaxis: "Дата" description: "Запросы к API для обычных и пользовательских API-ключей." consolidated_page_views_browser_detection: + title: "Объединение просмотров страниц с определением браузера (рекомендуется)" + title_legacy: "Объединение просмотров страниц с определением браузера (рекомендуется)" xaxis: page_view_anon_browser: "Анонимный браузер" page_view_logged_in_browser: "Авторизованный браузер" @@ -1429,7 +1457,7 @@ ru: title: "DAU/MAU" xaxis: "Дата" yaxis: "DAU/MAU" - description: "Количество участников, вошедших за последний день, поделённое на количество участников, вошедших за прошедший месяц. Возвращает %, который указывает «удержание» сообщества. Стремитесь к значению > 20%." + description: "Доля ежемесячно активных пользователей, вернувшихся в течение последнего дня. Этот процент показывает, как часто люди возвращаются; это также называется «привязанностью» сообщества. Цель – > 20%." daily_engaged_users: title: "Ежедневно вовлечённые пользователи" xaxis: "Дата" @@ -1719,6 +1747,7 @@ ru: problem: twitter_login: 'Похоже, вход в Твиттер/X сейчас не работает. Проверьте учетные данные в в настройках сайта.' group_email_credentials: 'Возникла проблема с учетными данными электронной почты для группы %{group_full_name}. Электронная почта не будет отправляться из почтового ящика группы, пока эта проблема не будет решена. %{error}' + upcoming_change_stable_opted_out: 'Ваш сайт отказался от предстоящего изменения "%{upcoming_change}". Это изменение теперь имеет статус "Стабильное" и вскоре может быть удалено или сделано постоянным. Посетите страницу предстоящих изменений , чтобы ознакомиться с подробной информацией об этом изменении.' rails_env: "Сервер работает в режиме %{env}." host_names: "Файл config/database.yml использует имя хоста localhost по умолчанию. Измените его на имя хоста сайта." sidekiq: 'Планировщик заданий Sidekiq не запущен. Многие задачи, в том числе отправка писем, должны выполняться им асинхронно. Должен быть запущен хотя бы один процесс sidekiq. Подробнее о Sidekiq — здесь.' @@ -1741,6 +1770,7 @@ ru: many: "Опрос электронной почты вызвал %{count} ошибок за последние 24 часа. Подробности смотрите в журналах." other: "Опрос электронной почты вызвал %{count} ошибки за последние 24 часа. Подробности смотрите в журналах." missing_mailgun_api_key: "Сервер настроен на отправку писем через Mailgun, но вы не предоставили ключ API, используемый для проверки сообщений вебхука." + qq_mail_smtp: "Известно, что ваш SMTP-сервер (%{smtp_address}) вызывает дублирование писем в Discourse. QQ Mail не возвращает корректные подтверждения, из-за чего Discourse повторяет отправку уже успешно завершенных писем. См. рекомендуемые альтернативы." bad_favicon_url: "Значок сайта не загружается. Проверьте его параметры в настройках сайта." poll_pop3_timeout: "Время подключения к серверу POP3 истекло. Не удалось получить входящую почту. Проверьте настройки POP3 и поставщика услуг." poll_pop3_auth_error: "Не удается подключиться к серверу POP3 из-за ошибки аутентификации. Проверьте настройки POP3." @@ -1752,6 +1782,7 @@ ru: category_style_deprecated: "Сейчас в вашем Discourse используется устаревший стиль категорий, который будет удален до выхода финальной бета-версии Discourse 3.2. Инструкции о том, как сохранить выбранный стиль категории, см. в статье «Переход к настройке сайта с единым стилем категорий»." maxmind_db_configuration: 'Сервер сконфигурирован на использование баз данных MaxMind для обратного поиска IP-адресов, но действительный идентификатор аккаунта MaxMind не настроен, что может привести к невозможности загрузки баз данных MaxMind в будущем. Чтобы узнать больше, прочтите это руководство.' admin_sidebar_deprecation: "Макет панели администратора устарел и будет удален в следующей версии. Вместо него будет использоваться новый макет боковой панели. Вы можете настроить новый макет боковой панели сейчас, чтобы включить его заранее." + starttls_disabled: "В настройках исходящей почты параметр STARTTLS отключен. Это практически никогда не требуется. Рекомендуется удалить

DISCOURSE_SMTP_ENABLE_START_TLS=false
из вашей среды. Для получения более подробной информации обратитесь к этой теме." back_from_logster_text: "Вернуться на сайт" site_settings: allow_bulk_invite: "Разрешить массовые приглашения путём загрузки CSV-файла" @@ -1763,6 +1794,7 @@ ru: allow_user_locale: "Разрешить пользователям выбирать язык интерфейса" set_locale_from_accept_language_header: "Устанавливать язык интерфейса для анонимных пользователей по заголовкам языка их браузера" set_locale_from_cookie: "Позволяет задать локаль анонимного пользователя с помощью cookie-файла браузера 'locale'" + set_locale_from_param: "Позволяет задать локаль анонимного пользователя через URL-параметр 'lang', например, ?lang=es" support_mixed_text_direction: "Поддерживать смешанные направления текста слева направо и справа налево" min_post_length: "Минимально допустимая длина публикации в символах (без учета личных сообщений)" min_first_post_length: "Минимально допустимая длина первой публикации (основного текста темы) (без учета личных сообщений)" @@ -1795,6 +1827,7 @@ ru: allow_duplicate_topic_titles_category: "Разрешить создание тем с одинаковыми названиями, если они создаются в разных категориях. (Параметр «allow_duplicate_topic_titles» должен быть отключён)." unique_posts_mins: "Минимальное количество минут между созданием сообщений с одинаковым контентом" educate_until_posts: "Количество первых сообщений новых пользователей, при создании которых необходимо показывать всплывающую подсказку с советами для новичков." + title: "Название этого сайта. Видно всем посетителям, включая анонимных пользователей. Обратите внимание, что изменение этого названия может отправить пользователям PWA запрос на обновление или удаление приложения." site_description: "Опишите сайт одним предложением. Показывается всем посетителям, включая анонимных." short_site_description: "Краткое описание в нескольких словах. Показывается всем посетителям, включая анонимных." contact_email: "Адрес электронной почты ключевого контактного лица, ответственного за этот сайт. Используется для критических уведомлений и отображается на странице /about. На публичных сайтах отображается и для анонимных пользователей." @@ -1841,6 +1874,7 @@ ru: logo: "Логотип в левом верхнем углу сайта. Используйте широкое прямоугольное изображение с высотой 120 и соотношением сторон более чем 3:1. Если оставить поле пустым, будет показан текст заголовка сайта." logo_small: "Уменьшенный логотип в левом верхнем углу сайта, отображаемый при прокрутке вниз. Используйте квадратное изображение 120 × 120. Если оставить поле пустым, будет отображаться значок главной страницы." digest_logo: "Альтернативный логотип, используемый в верхней части страницы, отображающей письма со сводками. Используйте широкое прямоугольное изображение. Не используйте изображение в формате SVG. Если оставить поле пустым, будет использоваться логотип из настройки `logo`." + mobile_logo: "Логотип, используемый в мобильной версии вашего сайта. Мы рекомендуем квадратную иконку, чтобы избежать перегрузки заголовка, но вы можете использовать широкое прямоугольное изображение высотой 120 пикселей и соотношением сторон более 3:1. Если поле оставить пустым, будет использоваться изображение из настроек логотипа." logo_dark: "Альтернативное значение настройки сайта «logo» для тёмной схемы." logo_small_dark: "Альтернативное значение настройки сайта «logo small» для тёмной схемы." mobile_logo_dark: "Альтернативное значение настройки сайта «mobile logo» для тёмной схемы." @@ -1848,12 +1882,15 @@ ru: manifest_icon: "Изображение, используемое в качестве логотипа на Android-устройствах. Размер будет автоматически изменён до 512 × 512. Если оставить поле пустым, будет использоваться «large_icon»." manifest_screenshots: "Скриншоты, демонстрирующие особенности и функциональные возможности приложения, отображаемые на странице с запросом на установку. Все изображения должны быть загружены локально и иметь одинаковые размеры." favicon: "Значок сайта, см. https://ru.wikipedia.org/wiki/Favicon. Для корректного отображения должен быть в формате PNG. Размер будет автоматически изменён до 32x32. Если оставить поле пустым, будет использоваться «large_icon»." + apple_touch_icon: "Значок, предназначенный для сенсорных устройств Apple. Использование прозрачного фона не рекомендуется. Размер значка будет автоматически изменен до 180x180. Если оставить поле пустым, будет использоваться значок large_icon." opengraph_image: "Стандартное изображение opengraph, используемое, если на странице нет другого подходящего изображения. Если оставить поле пустым, будет использоваться «large_icon»." x_summary_large_image: "Сводная карточка Twitter с большим изображением (должна быть не менее 280 пикселей в ширину, не менее 150 пикселей в высоту и не может быть в формате «.svg»). Если оставить поле пустым, обычные метаданные карточки генерируются с использованием «opengraph_image» (если исходное изображение также не в формате «.svg»)." notification_email: "Отправитель: эл. почта, используемая при отправке всех системных писем. Для успешной отправки писем указанный здесь домен должен иметь правильно настроенные SPF, DKIM и reverse PTR." email_custom_headers: "Список пользовательских заголовков электронной почты" email_subject: "Настраиваемый формат темы для стандартных писем. См. тему https://meta.discourse.org/t/customizing-specific-system-email-templates/88323." detailed_404: "Предоставление пользователям более подробной информации о том, почему они не могут получить доступ к определённой теме. Примечание: это менее безопасно, поскольку пользователи будут знать, ссылается ли URL-адрес на допустимую тему." + enforce_second_factor: "Для доступа к пользовательскому интерфейсу Discourse необходимо включить двухфакторную аутентификацию (2FA). Этот параметр не влияет на аутентификацию через API или провайдера «DiscourseConnect». Если параметр enforce_second_factor_on_external_auth включен, пользователи не смогут войти в систему с помощью внешних провайдеров аутентификации после настройки 2FA." + enforce_second_factor_on_external_auth: "Требуйте от пользователей постоянного использования двухфакторной аутентификации (2FA). При включении этой функции пользователи не смогут войти в систему с помощью внешних методов аутентификации, таких как вход через социальные сети, если у них включена 2FA. При отключении пользователям потребуется подтверждать 2FA только при входе в систему с помощью имени пользователя и пароля. Также см. параметр `enforce_second_factor`." force_https: "Принудительное использование протокола HTTPS. ВНИМАНИЕ: НЕ ВКЛЮЧАЙТЕ этот параметр, пока не убедитесь, что HTTPS полностью настроен и работает абсолютно везде! Настройки CDN, вход через соцсети, внешние логотипы и зависимости должны корректно работать через HTTPS." summary_score_threshold: "Минимальная оценка сообщения, необходимая для включения его в сводку по теме" summary_posts_required: "Минимальное количество сообщений, необходимое для получения сводки по теме. Изменения этого параметра будут применены к темам за прошедшую неделю." @@ -1911,8 +1948,12 @@ ru: ga_universal_domain_name: "Доменное имя для Google Universal Analytics, например: mysite.com; см. https://google.com/analytics" ga_universal_auto_link_domains: "Включить междоменное отслеживание Google Universal Analytics. К исходящим ссылкам на эти домены будет добавлен идентификатор клиента. См. Как настроить междоменное отслеживание." gtm_container_id: "Идентификатор контейнера Google Tag Manager, например: GTM-ABCD12E.
Примечание. Чтобы использовать GTM при включенной политике безопасности контента (CSP), смотрите документацию на Meta: «Использование переменных nonce в скриптах Google Tag Manager»." + google_site_verification_token: Токен подтверждения Google Search Console. Будет добавлен в качестве метатега в раздел head HTML-кода. enable_escaped_fragments: "Если поисковый робот не обнаружен, переключаться на Google Ajax-Crawling API. См. https://developers.google.com/webmasters/ajax-crawling/docs/learn-more." + moderators_manage_categories: "Разрешите модераторам создавать и управлять категориями." + moderators_manage_groups: "Разрешите модераторам создавать группы и управлять ими." moderators_change_post_ownership: "Разрешать модераторам менять владельца сообщения" + change_post_ownership_allowed_groups: "Разрешить пользователям этих групп менять владельца поста" cors_origins: "Разрешённые источники для междоменных запросов (CORS). Каждый источник должен содержать http:// или https://. Для включения CORS переменная окружения DISCOURSE_ENABLE_CORS должна быть установлена в значение «true»." use_admin_ip_allowlist: "Администраторы могут войти в систему только в том случае, если их IP-адрес в белом списке (Администрирование > Журналы > IP-адреса)." blocked_ip_blocks: "Список локальных диапазонов IP-адресов, которые никогда не должны сканироваться Discourse" @@ -1923,9 +1964,9 @@ ru: blocked_crawler_user_agents: "Уникальное нечувствительное к регистру слово в строке User-Agent, идентифицирующее поисковых роботов, которым запрещён доступ к сайту. Не применяется, если определён белый список." slow_down_crawler_user_agents: 'Значения User Agent, для которых скорость работы должна быть ограничена в соответствии с настройкой «slow down crawler rate». Каждое значение должно состоять не менее чем из трех символов.' slow_down_crawler_rate: "Если указано значение «slow_down_crawler_user_agents» (количество секунд между запросами), то это значение будет применяться ко всем поисковым роботам" + llms_txt: "Загрузите текстовый файл, который будет доступен по адресу /llms.txt для обходчиков LLM. Дополнительную информацию см. на сайте llmstxt.org." content_security_policy: "Включить Content-Security-Policy (CSP). CSP — это дополнительный уровень защиты, который помогает предотвратить определенные типы атак, включая межсайтовый скриптинг (XSS) и внедрение данных." content_security_policy_report_only: "Включить Content-Security-Policy-Report-Only (CSP)" - content_security_policy_collect_reports: "Включить отчёты о нарушениях CSP в /csp_reports" content_security_policy_frame_ancestors: "Ограничить через CSP число тех, кто может встроить этот сайт в iframes. Перечень разрешённых хостов настраивается на закладке Встраивание." content_security_policy_script_src: "Дополнительные источники сценариев в белом списке. Текущий хост и CDN включены по умолчанию. См. «Смягчение атак XSS с помощью политики безопасности контента (CSP)». Другие хост-источники игнорируются, так как включена директива strict-dynamic." invalidate_inactive_admin_email_after_days: "Аккаунты администраторов, которые не посещали сайт в течение указанного здесь количества дней, должны будут повторно подтвердить свой адрес электронной почты перед входом в систему. Для отключения параметра установите это значение в 0." @@ -1953,6 +1994,7 @@ ru: top_page_default_timeframe: "Период времени на верхней странице по умолчанию для анонимных пользователей (автоматически настраивается для вошедших в систему пользователей на основе их последнего посещения)." moderators_view_emails: "Разрешать модераторам просматривать адреса электронной почты пользователей." moderators_view_ips: "Разрешить модераторам просматривать IP-адреса пользователей." + moderators_change_trust_levels: "Разрешите модераторам изменять уровни доверия пользователей." prioritize_username_in_ux: "Показывать имя пользователя первым на странице пользователя, карточке пользователя и сообщениях (когда отключённое имя показывается первым)" enable_rich_text_paste: "Включить автоматическое преобразование HTML в Markdown при вставке текста в редактор." send_old_credential_reminder_days: "Напомнить о старых учётных данных через указанное количество дней" @@ -2010,6 +2052,7 @@ ru: enable_local_logins_via_email: "Разрешать пользователям запрашивать получение ссылки для входа в систему по электронной почте." allow_new_registrations: "Разрешать регистрацию новых пользователей. Отключите этот параметр, если вы хотите запретить создавать новые аккаунты." enable_signup_cta: "Показывать уведомление возвращающимся на форум анонимным пользователям, предложив им зарегистрировать аккаунт." + enable_discourse_id: "Включите аутентификацию через Discourse ID — сервис единого входа, позволяющий пользователям входить на несколько сайтов Discourse, используя одну учетную запись. Поддерживаются распространенные социальные сети для авторизации, такие как Google, Facebook, Apple и GitHub, без дополнительной настройки. См. id.discourse.com для получения более подробной информации." enable_google_oauth2_logins: "Включить аутентификацию Google Oauth2. Это метод аутентификации, который в настоящее время поддерживает Google. Требуется ключ и секрет. См. тему Configuring Google login for Discourse." google_oauth2_client_id: "Уникальный идентификатор клиента, предоставленный вашим приложением Google и используемый для аутентификации." google_oauth2_client_secret: "Секрет клиента для приложения Google" @@ -2078,6 +2121,7 @@ ru: invite_link_max_redemptions_limit_users: "Максимальное допустимое количество использований пригласительных ссылок, созданных пользователями." alert_admins_if_errors_per_minute: "Количество ошибок в минуту, необходимое для предупреждения администратора. Для отключения этого параметра установите значение в 0. ВНИМАНИЕ: требуется перезапуск." alert_admins_if_errors_per_hour: "Количество ошибок в час, необходимое для предупреждения администратора. Для отключения этого параметра установите значение в 0. ВНИМАНИЕ: требуется перезапуск." + categories_topics: 'Количество тем для отображения на странице /categories. Если установлено значение 0, значение будет автоматически задано для обеспечения симметрии двух столбцов. Актуально только для стилей страниц категорий "категории и последние/самые популярные темы" .' suggested_topics: "Количество похожих тем, отображаемых под текущей темой." limit_suggested_to_category: "В списке похожих тем показывать темы только из текущей категории." suggested_topics_max_days_old: "Похожие темы не должны быть старше указанного здесь количества дней." @@ -2104,6 +2148,7 @@ ru: selectable_avatars_mode: "Разрешить пользователям выбирать аватар из списка «selectable_avatars» и ограничивать загрузку своих аватаров выбранным уровнем доверия." selectable_avatars: "Укажите коллекцию аватаров, из которых пользователи могут выбирать изображение профиля. Этот выбор появляется при создании профиля пользователя и при обновлении аватара профиля." allow_all_attachments_for_group_messages: "Разрешать все типы почтовых вложений для групповых сообщений." + image_quality: "Установите уровень качества для изображений, загружаемых на ваш сайт. Более низкое качество приведет к уменьшению размера файлов." png_to_jpg_quality: "Качество преобразованного файла JPG (1 — низкое, 99 — лучшее, 100 — отключить параметр)." recompress_original_jpg_quality: "Качество загружаемых файлов JPG (1 — низкое, 99 — лучшее, 100 — отключить параметр)." image_preview_jpg_quality: "Качество файлов JPG при изменении их размера (1 — низкое, 99 — лучшее, 100 — отключить параметр)." @@ -2228,9 +2273,12 @@ ru: num_flaggers_to_close_topic: "Минимальное количество человек, жалующихся на тему, которое требуется для автоматической блокировки и отправки темы на проверку" num_hours_to_close_topic: "Тема блокируется на указанное здесь количество часов, необходимых для её проверки." auto_respond_to_flag_actions: "Включить автоматический ответ при отклонении жалобы." + min_first_post_typing_time: "Минимальное время, которое пользователь должен потратить на ввод текста при первом сообщении. Если этот порог не будет достигнут, сообщение автоматически попадет в очередь на утверждение. Установите значение 0, чтобы отключить эту функцию (не рекомендуется)." + fast_typing_threshold: "Минимальное время в миллисекундах, которое пользователь должен потратить на ввод первой публикации. Если публикация набрана быстрее указанного порога, она автоматически отправится в очередь проверки. Низкий порог — 1 секунда, стандартный — 3 секунды, высокий — 5 секунд." auto_silence_fast_typers_on_first_post: "Автоматически замораживать пользователей, которые не соответствуют параметру `fast typing threshold`" auto_silence_fast_typers_max_trust_level: "Максимальный уровень доверия для автоматической заморозки пользователей, если зафиксирован быстрый набор текста" auto_silence_first_post_regex: "Регулярное выражение (без учета регистра), которое отправит первое сообщение пользователя на проверку и заморозит автора, если в тексте будет найдено совпадение. Пример: выражение `raging|a[bc]a` заморозит сообщения, содержащие «raging», «aba» или «aca». Правило применяется только к первому сообщению пользователя. ЭТА НАСТРОЙКА ЯВЛЯЕТСЯ УСТАРЕВШЕЙ — используйте функцию «Контролируемые слова»." + moderator_guide_topic: "Тема, описывающая порядок модерации вашего сообщества. Ссылка будет видна в очереди на проверку модераторам и администраторам." reviewable_claiming: "Нужно ли резервировать проверяемый контент за конкретным сотрудником, прежде чем отправить контент на проверку?" reviewable_default_topics: "Показывать проверяемый контент, сгруппированный по темам" reviewable_default_visibility: "Не показывать проверяемый контент, если он не соответствует этому приоритету" @@ -2239,12 +2287,14 @@ ru: allow_all_users_to_flag_illegal_content: "Анонимным пользователям будет показано сообщение о том, что для жалобы на нелегальный контент нужно отправить письмо администраторам. Эта настройка имеет приоритет над параметром 'flag post allowed groups'." email_address_to_report_illegal_content: "Если оставить это поле пустым, будет использован адрес электронной почты администратора сайта по умолчанию." cooldown_hours_until_reflag: "Количество часов, в течение которых пользователи не смогут повторно пожаловаться на сообщение" + slow_mode_prevents_editing: "Предотвращает ли «медленный режим» редактирование после истечения «льготного периода редактирования»?" reply_by_email_enabled: "Позволяет пользователям отвечать на темы напрямую по электронной почте, не входя на веб-сайт. Подробнее — в руководстве на Meta." reply_by_email_address: "Шаблон для ответа по электронной почте в формате: %%{reply_key}@reply.example.com или replies+%%{reply_key}@example.com" alternative_reply_by_email_addresses: "Список альтернативных шаблонов для ответа, применяемый на основе входящих адресов электронной почты. Пример: %%{reply_key}@reply.example.com|replies+1%%{reply_key}@example.com" incoming_email_prefer_html: "Использовать HTML вместо обычного текста для входящих писем." strip_incoming_email_lines: "Удалять начальные и конечные пробелы из каждой строки входящих писем." - disable_emails: "Запретить отправлять электронные письма. Выберите «yes», чтобы отключить электронную почту для всех пользователей. Выберите «non-staff», чтобы отключить электронную почту для пользователей, не являющихся персоналом." + disable_emails: "Запретить Discourse отправлять любые электронные письма. Выберите «да», чтобы отключить отправку исходящих писем для всех пользователей. Выберите «не для сотрудников», чтобы отключить отправку писем только для пользователей, не являющихся сотрудниками." + allow_email_invites: "При отключении этой функции пользователи не смогут отправлять пригласительные письма через Discourse." strip_images_from_short_emails: "Удалять картинки из коротких писем — размером менее 2800 байт" short_email_length: "Максимальная длина в байтах, при которой электронное письмо будет определено как «короткое». Если размер письма не превышает это значение, изображения в нем (например, аватары и эмодзи) будут удалены." display_name_on_email_from: "Отображать в поле «От» полные имена отправителей электронных писем" @@ -2262,6 +2312,7 @@ ru: mailgun_api_key: "Секретный ключ API Mailgun, используемый для проверки сообщений вебхука." sendgrid_verification_key: "Ключ верификации Sendgrid, используемый для проверки сообщений вебхука." mailjet_webhook_token: "Токен для проверки полезной нагрузки вебхука. Передается как параметр «t» запроса в вебхуке, например: https://example.com/webhook/mailjet?t=supersecret." + mailpace_webhook_token: "Токен для проверки полезной нагрузки вебхука. Передается как параметр «t» запроса в вебхуке, например: https://example.com/webhook/mailpace?t=supersecret." mandrill_authentication_key: "Ключ аутентификации Mandrill, используемый для проверки сообщений вебхука." postmark_webhook_token: "Токен для проверки полезной нагрузки вебхука. Передается как параметр «t» запроса в вебхуке, например: https://example.com/webhook/postmark?t=supersecret." sparkpost_webhook_token: "Токен для проверки полезной нагрузки вебхука. Передается как параметр «t» запроса в вебхуке, например: https://example.com/webhook/sparkpost?t=supersecret." @@ -2304,6 +2355,7 @@ ru: relative_date_duration: "Количество дней после создания сообщения, в течение которых дата будет отображаться в относительном виде (7 дней), а не в абсолютном (20 февраля)." delete_user_max_post_age: "Запретить удаление пользователей, чье первое сообщение старше указанного здесь количества дней." delete_all_posts_max: "Максимальное количество сообщений, которое может быть удалено за один раз через кнопку «Удалить все сообщения». Если у пользователя сообщений больше этого числа, сообщения не могут быть удалены за одно нажатие и в этом случае пользователь не может быть удален." + delete_all_posts_background_threshold: "Максимальное количество записей, которые можно удалить одновременно с помощью кнопки «Удалить все записи», прежде чем удаление будет обработано в фоновом режиме." delete_user_self_max_post_count: "Максимальное количество сообщений, которое пользователь может иметь при удалении собственного аккаунта. Установите это значение в -1, если необходимо отключить возможность удаления собственного аккаунта." username_change_period: "Максимальное количество дней после регистрации, в течение которых можно менять свое имя пользователя (установите это значение в 0, если необходимо запретить изменение имени пользователя)." email_editable: "Разрешить пользователям изменять адрес электронной почты после регистрации." @@ -2335,13 +2387,14 @@ ru: allow_likes_in_anonymous_mode: "Включите этот параметр, чтобы разрешить пользователям, просматривающим ваш сайт анонимно, ставить отметки «Нравится» публикациям. При активации этого параметра пользователи могут скрывать свою личность при установке отметок «Нравится» публикациям или темам на сайте. Для этого параметра необходимо включить параметр «Разрешить анонимный режим»." anonymous_posting_allowed_groups: "Группы, которым разрешено анонимное размещение сообщений. Для этого необходимо включить параметр «Разрешить анонимный режим»." anonymous_account_duration_minutes: "Защита от слишком частого создания новых аккаунтов. Пример: если значение установлено в 600, это означает, что должно пройти не менее 600 минут с момента последнего сообщения пользователя и его выхода из системы, после чего он сможет создать новый аккаунт." - hide_user_profiles_from_public: "Отключить отображение карточек пользователей, профилей и списка участников форума для анонимных пользователей." + hide_user_profiles_from_public: "Отключите карточки пользователей и профили пользователей для анонимных пользователей. Сводная статистика по-прежнему будет доступна в каталоге пользователей." hide_new_user_profiles: "Скрывать профили пользователей с уровнем доверия 1 и ниже от публичного просмотра и от пользователей с уровнем доверия 1 до первой публикации. Эта функция всегда отключена на сайтах с настройками must_approve_users и invite_only." allow_users_to_hide_profile: "Разрешить пользователям скрывать свой профиль и присутствие на форуме" hide_user_activity_tab: "Скрыть вкладку действий в профилях пользователей (за исключением своего профиля и администратора)." delete_associated_accounts_on_password_reset: "Удалять аккаунт, связанный с пользователем, когда пользователь меняет пароль." allow_featured_topic_on_user_profiles: "Разрешать пользователям размещать ссылку на избранную тему в карточке пользователя и в профиле." show_inactive_accounts: "Разрешать авторизованным пользователям просматривать профили неактивных аккаунтов." + hide_suspension_reasons: "Не указывайте причины блокировки в профилях пользователей." log_personal_messages_views: "Регистрировать просмотры личных сообщений администратором для других пользователей (групп)." ignored_users_count_message_threshold: "Уведомлять модераторов, если определённого пользователя игнорируют указанное здесь количество пользователей." ignored_users_message_gap_days: "Количество дней ожидания, прежде чем модераторы будут снова уведомлены о пользователе, которого игнорировали многие другие пользователи." @@ -2355,6 +2408,7 @@ ru: dont_feed_the_trolls_threshold: "Количество жалоб от других пользователей до получения предупреждения." enable_mobile_theme: "Мобильные устройства используют специальную тему с возможностью переключения в обычный вид. Отключите данную настройку, если вы хотите использовать специально адаптированный стиль для мобильных устройств." dominating_topic_minimum_percent: "Какой процент сообщений в одной теме могут составлять сообщения одного пользователя, прежде чем ему будет показано предупреждение о слишком большой активности в теме." + pm_warn_user_last_seen_months_ago: "При создании нового личного сообщения предупреждайте пользователей, если целевой получатель не был замечен более n месяцев назад." suppress_uncategorized_badge: "Не показывать награду в списках тем для тех тем, которые находятся в разделе «Без категории»." header_dropdown_category_count: "Максимальное количество категорий, отображаемых в выпадающем меню заголовка." permalink_normalizations: "Применять указанное регулярное выражение перед поиском соответствий в постоянных ссылках, например, выражение: /(topic.*)\\?.*/\\1 удалит подстроку запроса из ссылок. Использование: регулярное выражение + строка. Используйте \\1 и т. д. для доступа к захватам." @@ -2398,6 +2452,7 @@ ru: embed_support_markdown: "Поддержка форматирования Markdown для встроенных сообщений." allowed_embed_selectors: "Разделённый запятыми перечень элементов CSS, которые разрешены для встраивания." allowed_href_schemes: "Схемы, разрешённые в ссылках помимо http и https." + embed_full_app: "Включите полнофункциональный режим приложения для встроенных комментариев. При включении встроенные комментарии будут загружать полное приложение Discourse во фрейме, позволяя пользователям напрямую взаимодействовать с темами." embed_post_limit: "Максимальное количество встроенных сообщений." embed_username_required: "Для создания темы требуется имя пользователя." notify_about_reviewable_item_after: "Отправлять личное сообщение модератору, если есть элементы на проверку, не обработанные в течение указанного количества часов. 0 — отключить параметр." @@ -2428,6 +2483,7 @@ ru: disable_watched_word_checking_in_user_fields: "отключить проверку контролируемых слов в полях пользователей" watched_words_regular_expressions: "Разрешает использовать регулярные выражения для фильтрации слов. Если этот параметр включен, чувствительные слова группируются с учетом их регистра. Затем все выбранные слова компилируются в одно регулярное выражение с добавлением границ слов для регулярных выражений контролируемых слов. Следовательно, этот метод фильтрации на основе регулярных выражений добавляет дополнительный уровень контроля над модерацией контента, поддерживая более сложные шаблоны слов. Параметр также позволяет легко заменить исходный текст на выбранный вариант." enable_fast_edit: "Добавляет в меню выбора публикаций кнопку для быстрого редактирования небольшого выделения в строке." + old_post_notice_days: "Количество дней, по истечении которых уведомления о новых и повторных публикациях будут скрыты. Официальное уведомление о публикации всегда будет оставаться видимым." new_user_notice_tl: "Минимальный уровень доверия, необходимый для просмотра уведомлений о сообщениях новых пользователей." returning_user_notice_tl: "Минимальный уровень доверия, необходимый для просмотра уведомлений о сообщениях вернувшихся пользователей." returning_users_days: "Количество дней, после которого пользователь будет считаться вернувшимся на форум." @@ -2509,6 +2565,7 @@ ru: force_lowercase_tags: "Вводить все новые теги только строчными буквами." create_post_for_category_and_tag_changes: "Создавать скрытую публикацию при изменении категории или тегов темы. Для это должны быть включены скрытые публикации." automatically_clean_unused_tags: "Автоматически удаляет теги, которые не используются в каких-либо темах или личных сообщениях ежедневно." + default_watched_precedence_over_muted: "Уведомлять пользователей о темах в категориях или тегах, которые они отслеживают, но которые также относятся к категории, для которой они отключили уведомления." company_name: "Название вашей компании или организации. Если оставить это поле пустым, то никаких шаблонных Пользовательских соглашений или Уведомлений о конфиденциальности предоставляться не будет." governing_law: "Укажите юрисдикцию, которая регулирует юридические аспекты сайта, включая Условия использования и Политику конфиденциальности. Обычно это страна или штат, где зарегистрирована или ведет деятельность компания, управляющая сайтом." city_for_disputes: "Укажите город, который будет рассматриваться в качестве юрисдикции для разрешения любых споров, связанных с использованием данного форума. Эта информация обычно указана в юридических документах, таких как Условия использования форума." @@ -2524,10 +2581,11 @@ ru: sitemap_page_size: "Количество URL-адресов для включения в каждую страницу карты сайта, максимум 50 000" enable_user_status: "Разрешить пользователям устанавливать собственное сообщение о статусе (эмодзи + описание)." enable_user_tips: "Отображать советы для новичков, описывающие ключевые функции форума" + short_title: "Краткое название будет использоваться на главном экране пользователя, в лаунчере или в других местах, где может быть ограничено пространство. Оно должно быть ограничено 12 символами. Обратите внимание, что изменение этого названия может отправить пользователям PWA запрос на обновление или удаление приложения." dashboard_hidden_reports: "Разрешать скрывать отдельные отчёты в панели управления." dashboard_visible_tabs: "Закладки, которые будут отображаться в панели управления." dashboard_general_tab_activity_metrics: "Отчёты, отображаемые в метриках активности на основной вкладке панели управления." - gravatar_enabled: "Использовать сервис Gravatar для аватаров пользователей. Эта настройка отключает у пользователей возможность вручную переключаться на Gravatar, но не затрагивает тех, кто его уже использует." + gravatar_enabled: "Используйте сервис Gravatar для создания аватаров пользователей. Отключение этого сервиса не позволит пользователям переключаться на Gravatar для создания своих аватаров, но не повлияет на пользователей, которые уже используют этот сервис." gravatar_name: "Укажите имя поставщика услуг Gravatar. Это имя обычно используется для идентификации источника, предоставляющего сайту аватары Gravatar." gravatar_base_url: "Укажите URL-адрес для доступа к API поставщика Gravatar. Этот параметр имеет решающее значение для преобразования адресов электронной почты в URL-адреса Gravatar, где хранятся изображения аватаров." gravatar_login_url: "URL-адрес, связанный с `gravatar_base_url`, который обеспечивает вход пользователя в сервис Gravatar." @@ -2540,18 +2598,25 @@ ru: suggest_weekends_in_date_pickers: "Отображать выходные (субботу и воскресенье) при выборе даты (отключите этот параметр, если вы используете Discourse только в будние дни, с понедельника по пятницу)." show_bottom_topic_map: "Показывать карту темы в нижней части темы, если на нее получено 10 или более ответов." show_topic_map_in_topics_without_replies: "Показывать карту тем, даже если в теме нет ответов." + enable_site_owner_onboarding: "Эта функция отображает на главной странице панель, помогающую новым администраторам начать работу. Включите эту настройку повторно, чтобы снова увидеть этапы адаптации." + site_owner_onboarding_max_days: "Максимальное количество дней после создания сайта, в течение которых отображается приветственный баннер." enable_welcome_banner: "Показывать баннер на главных страницах списка тем, чтобы приветствовать участников и предоставить им возможность поиска по контенту сайта" welcome_banner_image: "Установите изображение, которое будет отображаться в качестве фона приветственного баннера." welcome_banner_location: "Определяет, где на странице будет отображаться приветственный баннер." welcome_banner_page_visibility: "Определяет, на каких страницах будет отображаться приветственный баннер." + welcome_banner_text_color: "Если параметр «Изображение приветственного баннера» настроен, используйте его для изменения цвета текста баннера, чтобы он оставался читаемым. Если поле оставить пустым или изображение не загружено, цвет будет определяться активной темой." splash_screen: "Отображать временный экран загрузки во время загрузки ресурсов сайта" + splash_screen_image: "SVG-изображение для отображения на заставке во время загрузки сайта. Анимированные SVG-изображения должны использовать только CSS-преобразования или анимации прозрачности. Используйте уникальные имена для CSS-классов и ключевых кадров. Вы можете использовать var(--primary), var(--secondary) и var(--tertiary) для указания цветов темы." navigation_menu: "Укажите боковую панель или раскрывающийся список заголовка в качестве главного меню навигации вашего сайта. Рекомендуется использовать боковую панель." default_navigation_menu_categories: "Выбранные категории по умолчанию будут отображаться в соответствующем разделе меню навигации." default_navigation_menu_tags: "Выбранные теги по умолчанию будут отображаться в соответствующем разделе меню навигации." experimental_new_new_view_groups: 'Включить новый список тем, который объединяет непрочитанные и новые темы, и сделать на него ссылку «Все» на боковой панели.' + enable_form_templates: "Включите функцию шаблонов форм. С её помощью вы сможете настроить структурированную форму с проверкой данных в рамках процесса создания темы." show_preview_for_form_templates: "Включить функцию предпросмотра шаблонов форм" lazy_load_categories_groups: "Ленивая загрузка информации о категориях только для пользователей указанных групп. Повышает производительность на сайтах со множеством категорий." enable_auto_grid_images: "Автоматически оборачивать изображения в теги [grid], если в редактор загружено 3 и более изображения." + enable_new_checkbox_style: "Включите обновленный стиль флажков для флажков FormKit." + impersonate_without_logout: "Разрешите администраторам выдавать себя за другого пользователя, не выходя из своей учетной записи администратора." experimental_impersonation_time_limit_minutes: "Через какое время сеанс маскировки будет автоматически завершен." page_loading_indicator: "Выбор индикатора загрузки, который появляется во время перехода по страницам в Discourse. «Спиннер» — индикатор на всю страницу. «Слайдер» — узкая полоса вверху экрана." show_user_menu_avatars: "Показать аватары пользователей в пользовательском меню" @@ -2565,15 +2630,30 @@ ru: rich_editor: "Включает режим визуального редактора, чтобы все пользователи могли переключаться между текущим режимом Markdown и новым визуальным текстовым редактором, для более удобного и наглядного написания сообщений." default_composition_mode: "Установите режим по умолчанию для редактора вашего сообщества. Режим визуального текстового редактора обеспечивает более современный и привычный интерфейс для большинства пользователей, а режим Markdown может быть удобен для более технически подкованной аудитории. Участники могут переключаться между режимами с помощью переключателя на панели инструментов редактора." reviewable_ui_refresh: "Группы, которые могут использовать экспериментальный новый интерфейс очереди проверки." + viewport_based_mobile_mode: "Используйте ширину области просмотра для определения режимов для мобильных/настольных устройств. Эта настройка будет удалена в ближайшее время. Если вам потребуется её отключить, пожалуйста, сообщите нам об этом на Meta." content_localization_enabled: "Отображает локализованный контент для пользователей на основе языка их браузера или языковых настроек. Такой контент может включать категории, теги, публикации и темы. Поддерживаемые локали задаются в параметре 'content localization supported locales'." + content_localization_supported_locales: "Список поддерживаемых языковых стандартов, на которые может быть переведен пользовательский контент. Всегда включается языковой стандарт сайта. Требуется включить локализацию контента." content_localization_allowed_groups: "Группам разрешено обновлять локализованный контент. Для работы необходимо активировать параметр 'content localization enabled'." content_localization_language_switcher: "Отобразить переключатель языков в заголовке, позволяющий посетителям переключаться между переведёнными версиями Discourse и контентом, добавленным пользователями. Используются языки, определённые в разделе «Поддерживаемые локализации контента»." + content_localization_crawler_param: "При включении параметров «Локализация контента включена» и «Установить локаль из параметра» веб-краулерам предоставляется локализованный контент. Список поддерживаемых локалей определяется в разделе «Поддерживаемые локали локализации контента»." + content_localization_use_default_locale_when_unsupported: "Предоставлять локализованный контент на языке по умолчанию пользователям, чей предпочтительный язык не указан в списке «поддерживаемые языки локализации контента»." + content_localization_allow_author_localization: "Разрешите авторам обновлять локализации своих тем и сообщений через меню записей." + floating_dismiss_topics_on_mobile: "На мобильных устройствах отображается плавающая кнопка «Закрыть...» для списка тем, что облегчает доступ и освобождает место в верхней части списка." + rename_faq_to_guidelines: "Это изменение переименовывает страницу часто задаваемых вопросов в «Рекомендации». Страница часто задаваемых вопросов по-прежнему будет доступна по адресу /faq. Настройка «адрес часто задаваемых вопросов» работает как и раньше." + enable_simplified_category_creation: "Обеспечивает упрощенный процесс создания категорий с меньшим количеством опций и более понятным интерфейсом." + enable_custom_splash_screen: "Позволяет настроить заставку загрузки, используя собственное SVG-изображение. Загрузите изображение через настройку «изображение заставки». Внимание: это может негативно повлиять на показатели LCP и индексацию Google." + modernize_foundation_theme: "Это изменение вносит изменения в оформление темы Foundation в Discourse." + reporting_improvements: "Улучшены навигация, дизайн и удобство использования административных отчетов Discourse." errors: invalid_css_color: "Недопустимый цвет. Введите название цвета или шестнадцатеричное значение." + invalid_datetime: "Неверный формат даты и времени. Пожалуйста, убедитесь, что вы ввели действительную дату и время." invalid_email: "Неправильный адрес электронной почты." invalid_username: "Такое имя пользователя не обнаружено." valid_username: "Такое имя пользователя уже существует." invalid_group: "Нет группы с таким названием." + invalid_svg: "Изображение в формате SVG недопустимо. Оно должно содержать элемент SVG и не содержать скриптов или обработчиков событий." + invalid_upload: "Загруженный файл недействителен или отсутствует." + invalid_topic: "Нет темы с таким ID." invalid_integer_min_max: "Значение должно быть от %{min} до %{max}." invalid_integer_min: "Значение не должно быть меньше %{min}." invalid_integer_max: "Значение не должно превышать %{max}." @@ -2614,12 +2694,12 @@ ru: reply_by_email_disabled: "Перед включением этого параметра необходимо включить параметр «Ответить по электронной почте»." discourse_connect_url_is_empty: "Перед включением этого параметра необходимо настроить параметр «discourse connect url»." enable_local_logins_disabled: "Перед включением этого параметра необходимо включить параметр «Включить локальные аккаунты»." - min_username_length_exists: "Вы не можете установить минимальную длину имени пользователя более самого короткого (%{username})." - min_group_name_length_exists: "Минимальная длина имени пользователя не может превышать длину самого короткого названия группы (%{group_name})." - min_username_length_range: "Нельзя установить минимум больше максимума." - max_username_length_exists: "Вы не можете установить максимальную длину имени пользователя менее самого длинного (%{username})." - max_group_name_length_exists: "Максимальная длина имени пользователя не может быть меньше длины самого длинного названия группы (%{group_name})." - max_username_length_range: "Нельзя установить максимум ниже минимума." + min_username_length_exists: "Нельзя установить минимальную длину имени пользователя выше самого короткого имени пользователя (%{username})." + min_group_name_length_exists: "Нельзя установить минимальную длину имени пользователя выше самого короткого имени группы (%{group_name})." + min_username_length_range: "Нельзя установить значение параметра 'min username length' выше значения параметра 'max username length'." + max_username_length_exists: "Вы не можете установить \"максимальную длину имени пользователя\" меньше самой длинной длины имени пользователя (%{username})." + max_group_name_length_exists: "Вы не можете установить \"максимальную длину имени пользователя\" ниже самого длинного имени группы (%{group_name})." + max_username_length_range: "Вы не можете установить значение «максимальная длина имени пользователя» ниже значения «минимальная длина имени пользователя»." invalid_hex_value: "Значения цвета — шесть цифр в шестнадцатеричной системе исчисления." empty_selectable_avatars: "Для включения этого параметра необходимо загрузить не менее двух аватаров, из которых можно будет сделать выбор." category_search_priority: @@ -2636,6 +2716,7 @@ ru: other: "Значений в списке должно быть ровно %{count}." markdown_linkify_tlds: "Нельзя использовать значение «*»." google_oauth2_hd_groups: "Перед включением этого параметра необходимо задать все настройки «google oauth2 hd»." + discourse_id_registration: "Не удалось автоматически зарегистрироваться в Discourse ID. Это может быть связано с проблемами сетевого подключения, ограничениями брандмауэра или недоступностью службы Discourse ID. Для получения более подробной информации проверьте журналы сервера или обратитесь в службу поддержки." linkedin_oidc_credentials: "Прежде чем включать этот параметр, необходимо настроить учетные данные LinkedIn OIDC ('linkedin_oidc_client_id' and 'linkedin_oidc_client_secret')." search_tokenize_chinese_enabled: "Перед включением этого параметра нужно отключить «search_tokenize_chinese»." search_tokenize_japanese_enabled: "Перед включением этого параметра нужно отключить «search_tokenize_japanese»." @@ -2666,6 +2747,7 @@ ru: filter: description: status: "Фильтровать темы по статусу" + in: "Фильтрация тем в личных списках" order: "Сортировать темы по определенному полю" category: "Показывать темы в определенной категории" category_any: "Показывать темы в любой из указанных категорий (через запятую)" @@ -2678,13 +2760,17 @@ ru: exclude_tag: "Исключать темы с определенным тегом" exclude_tags_any: "Исключать темы с любым из указанных тегов (через запятую)" exclude_tags_all: "Исключать темы со всеми указанными тегами (через «+»)" - tags_alias: "Псевдоним для фильтра 'tag:'" tag_group: "Показывать темы с тегами из определенной группы тегов" exclude_tag_group: "Исключать темы с тегами из определенной группы тегов" activity_before: "Показывать темы с последней активностью до указанной даты (YYYY-MM-DD или количество дней назад)" activity_after: "Показывать темы с последней активностью после указанной даты (YYYY-MM-DD или количество дней назад)" + bookmarked_before: "Показать темы, добавленные в закладки до определенной даты (ГГГГ-ММ-ДД или дней назад)." + bookmarked_after: "Показать темы, добавленные в закладки после даты (ГГГГ-ММ-ДД или дней назад)" created_before: "Показывать темы, созданные до указанной даты (YYYY-MM-DD или количество дней назад)" created_after: "Показывать темы, созданные после указанной даты (YYYY-MM-DD или количество дней назад)" + created_by: "Отображение тем, созданных конкретным пользователем или группой." + created_by_user: "Отображать темы, созданные пользователем по имени или группе (без символа «@»)." + created_by_multiple: "Отобразить темы, созданные любым из указанных пользователей или групп (разделенных запятыми)." latest_post_before: "Показывать темы с последней публикацией до указанной даты (YYYY-MM-DD или количество дней назад)" latest_post_after: "Показывать темы с последней публикацией после указанной даты (YYYY-MM-DD или количество дней назад)" likes_min: "Показывать темы, набравшие как минимум указанное количество лайков" @@ -2735,6 +2821,8 @@ ru: order_views_asc: "Сортировать по количеству просмотров (от меньшего к большему)" order_read: "Сортировать по дате вашего последнего прочтения (сначала недавние)" order_read_asc: "Сортировать по дате вашего последнего прочтения (сначала старые)" + order_hot: "Сортировать по популярности (сверху вниз)" + order_hot_asc: "Сортировка по популярности (наименьшая — первая)" users: "Фильтровать темы по участникам" users_any: "Показывать темы с любым из указанных пользователей (через запятую)" users_all: "Показывать темы со всеми указанными пользователями (разделенными знаком плюса)" @@ -2742,6 +2830,9 @@ ru: group: "Фильтровать темы по группам" groups_any: "Показывать темы с любой из указанных групп (через запятую)" groups_all: "Показывать темы со всеми указанными пользователями (разделенными знаком плюса)" + locale: "Фильтрация тем по языку оригинала" + locale_any: "Показать темы, изначально написанные на любом из указанных языков (разделенные запятыми)." + exclude_locale: "Исключить темы, изначально написанные на конкретном языке." discourse_connect: login_error: "Ошибка входа" not_found: "Мы не можем найти ваш аккаунт. Свяжитесь с администратором сайта." @@ -2909,6 +3000,7 @@ ru: csrf_detected: "Извините, время авторизации истекло, или вы использовали другой браузер для входа в систему. Попробуйте еще раз." request_error: "Извините, при запуске авторизации произошла ошибка. Попробуйте еще раз." invalid_iat: "Извините, не удалось проверить токен авторизации из-за расхождения времени на сервере. Попробуйте еще раз." + unauthorized: "Извините, ваш запрос на авторизацию не был одобрен. Пожалуйста, попробуйте еще раз или свяжитесь с администратором." omniauth_error_unknown: "В процессе входа на сайт произошла ошибка. Повторите попытку." omniauth_confirm_title: "Вход с помощью %{provider}" omniauth_confirm_button: "Продолжить" @@ -2962,6 +3054,7 @@ ru: updating_user_ids: "Обновление идентификаторов пользователя…" deleting_source_user: "Удаление исходного пользователя…" user: + anonymized: "[удалено в связи с анонимизацией пользователя]" deactivated: "Была выключена из-за слишком большого количества возвращённых писем на адрес «%{email}»." deactivated_by_staff: "Выключено персоналом" deactivated_by_inactivity: @@ -3148,32 +3241,32 @@ ru: title: "Выход новой версии" subject_template: "[%{email_prefix}] Вышла новая версия Discourse" text_body_template: | - Ура! Вышла свежая версия [Discourse](https://www.discourse.org)! + Ура! Вышла новая версия [Discourse](https://www.discourse.org)! - Установленная версия: %{installed_version} + Ваша версия: %{installed_version} Новая версия: **%{new_version}** - - Обновитесь, используя наш способ онлайн-обновления **[в один клик](%{base_url}/admin/update)**. + - Обновите с помощью нашего простого **[обновления в один клик в браузере](%{base_url}/admin/update)** - - Посмотрите, что появилось в последней версии: либо на [нашем сайте](https://meta.discourse.org/tag/release-notes), либо на сайте [GitHub](https://github.com/discourse/discourse/commits/main). + - Ознакомьтесь с новинками в [примечаниях к выпуску](https://releases.discourse.org/changelog/%{new_version}) - - На форуме [meta.discourse.org](https://meta.discourse.org) вы найдете актуальные новости, обсуждения и оперативную техническую поддержку по Discourse. + - Посетите [meta.discourse.org](https://meta.discourse.org) для новостей, обсуждений и поддержки Discourse new_version_mailer_with_notes: title: "Выход новой версии (с описанием)" subject_template: "[%{email_prefix}] Вышло обновление" text_body_template: | - Ура! Вышла свежая версия [Discourse](https://www.discourse.org)! + Ура, вышла новая версия [Discourse](https://www.discourse.org)! - Установленная версия: %{installed_version} + Твоя версия: %{installed_version} Новая версия: **%{new_version}** - - Обновитесь, используя наш способ онлайн-обновления **[в один клик](%{base_url}/admin/update)**. + - Обновись, используя наше простое **[обновление браузера одним кликом](%{base_url}/admin/update)** - - Посмотрите, что появилось в последней версии: либо на [нашем сайте](https://meta.discourse.org/tag/release-notes), либо на сайте [GitHub](https://github.com/discourse/discourse/commits/main). + - Узнай, что нового в [заметках о выпуске](https://releases.discourse.org/changelog/%{new_version}) - - На форуме [meta.discourse.org](https://meta.discourse.org) вы найдете актуальные новости, обсуждения и оперативную техническую поддержку по Discourse. + - Посети [meta.discourse.org](https://meta.discourse.org) для новостей, обсуждений и поддержки Discourse - ### Что нового + ### Заметки о выпуске %{notes} flag_reasons: @@ -3182,11 +3275,13 @@ ru: illegal: "Публикация помечена как **незаконный контент**: сообщество считает, что она может нарушать закон." spam: "Ваше сообщение расценено как **спам**. Сообщество считает, что ваше сообщение не имеет отношения к теме, не является актуальным и носит рекламный характер." notify_moderators: "Ваше сообщение расценено как **требующее внимания модератора**. Сообщество считает, что сообщение требует отдельного внимания персонала." + needs_approval: "Ваш пост был помечен **для утверждения**: он автоматически поставлен в очередь на проверку сотрудником, чтобы убедиться, что он соответствует [нашим правилам сообщества](%{base_path}/guidelines)." responder: off_topic: "Сообщение расценено как **офтопик**. Сообщество считает, что сообщение **не относится к теме**, учитывая заголовок темы и содержание первого сообщения." inappropriate: "Сообщество считает сообщение **неприемлемым**, т. е. оскорбительным, непристойным, разжигающим ненависть или нарушающим [рекомендации для сообщества](%{base_path}/guidelines)." spam: "Сообщение расценено как **спам**. Сообщество считает, что сообщение не имеет отношения к теме, не является актуальным и носит рекламный характер." notify_moderators: "Сообщение расценено как **требующее внимания модератора**. Сообщество считает, что сообщение требует отдельного внимания персонала." + needs_approval: "Сообщение было помечено **для утверждения**: оно автоматически поставлено в очередь на проверку сотрудником, чтобы убедиться, что оно соответствует [нашим правилам сообщества](%{base_path}/guidelines)." flags_dispositions: agreed: "Спасибо за информацию. Мы согласны, что это проблема, и уже рассматриваем её." agreed_and_deleted: "Спасибо за информацию. Мы согласны с вами и уже удалили сообщение." @@ -3210,6 +3305,7 @@ ru: contents_hidden: "Откройте сообщение, чтобы увидеть его содержимое." post_hidden: title: "Сообщение скрыто" + preview: "Сообщение скрыто из-за жалоб пользователей." subject_template: "Сообщение скрыто из-за жалоб от сообщества" text_body_template: | Здравствуйте! @@ -3225,19 +3321,23 @@ ru: Однако если сообщение будет скрыто снова, оно не появится на форуме до тех пор, пока не будет обработано персоналом. Подробнее смотрите в [рекомендациях для сообщества](%{base_url}/guidelines). + reviewable_queued_post_revise_and_reject_edit_post: "Вы можете отредактировать свой исходный пост ниже и отправить его повторно, внеся предложенные изменения, или ответить на это сообщение, если у вас есть какие-либо вопросы." + reviewable_queued_post_revise_and_reject_edit_post_no_reply: "Вы можете отредактировать свой исходный пост ниже и отправить его повторно, внеся предложенные изменения." + reviewable_queued_post_revise_and_reject_edit_topic: "Вы можете отредактировать исходное сообщение по вашей теме ниже и отправить его повторно, чтобы внести предложенные изменения, или ответить на это сообщение, если у вас есть какие-либо вопросы." + reviewable_queued_post_revise_and_reject_edit_topic_no_reply: "Вы можете отредактировать исходное сообщение по вашей теме ниже и отправить его повторно, чтобы внести предложенные изменения." reviewable_queued_post_revise_and_reject: title: "Отзыв на вашу публикацию" subject_template: "Отзыв на вашу публикацию по теме «%{topic_title}»" text_body_template: | - Здравствуйте, %{username}! + Привет, %{username}, - Мы просмотрели вашу публикацию в теме [%{topic_title}](%{topic_url}) и хотим оставить вам отзыв. + ! Мы рассмотрели ваш пост в [%{topic_title}](%{topic_url}) и подготовили для вас отзыв. Причина: %{reason} Отзыв: %{feedback} - Вы можете отредактировать исходную публикацию ниже и повторно отправить ее, чтобы внести предлагаемые изменения, или ответить на это сообщение, если у вас есть вопросы. + %{edit_instructions} -------- @@ -3246,20 +3346,20 @@ ru: -------- Спасибо, - Модераторы %{site_name} + %{site_name} Модераторы reviewable_queued_post_revise_and_reject_new_topic: title: "Отзыв на вашу тему" subject_template: 'Отзыв по новой теме под названием «%{topic_title}»' text_body_template: | - Здравствуйте, %{username}! + Привет, %{username}, - Мы проверили вашу новую тему под названием «%{topic_title}» и хотим оставить вам отзыв. + ! Мы рассмотрели вашу новую тему под названием "%{topic_title}" и хотим поделиться с вами некоторыми замечаниями. Причина: %{reason} Отзыв: %{feedback} - Вы можете отредактировать исходную публикацию своей темы ниже и повторно отправить ее, чтобы внести предлагаемые изменения, или ответить на это сообщение, если у вас есть вопросы. + %{edit_instructions} -------- @@ -3268,9 +3368,10 @@ ru: -------- Спасибо, - Модераторы %{site_name} + %{site_name} Модераторы post_hidden_again: title: "Сообщение снова скрыто" + preview: "Сообщение снова скрыто участниками сообщества." subject_template: "Сообщение скрыто из-за жалоб от сообщества, персонал уведомлен" text_body_template: | Здравствуйте! @@ -3755,6 +3856,7 @@ ru: Подробнее смотрите в [рекомендациях для сообщества](%{base_url}/guidelines). too_many_spam_flags: title: "Слишком много жалоб на спам от пользователя" + preview: "Сообщения временно скрыты из-за пометки как спам." subject_template: "Новый аккаунт временно заблокирован" text_body_template: | Здравствуйте! @@ -3777,6 +3879,7 @@ ru: Подробнее смотрите в [рекомендациях для сообщества](%{base_url}/guidelines). silenced_by_staff: title: "Заморозка персоналом" + preview: "Учетная запись временно заблокирована." subject_template: "Аккаунт временно заблокирован" text_body_template: | Здравствуйте! @@ -3789,9 +3892,27 @@ ru: user_automatically_silenced: title: "Автоматическая заморозка пользователя" subject_template: "Новый пользователь %{username} заморожен из-за жалоб сообщества" + text_body_template: | + Это автоматическое сообщение. + + Новый пользователь [%{username}](%{user_url}) был автоматически заблокирован. + + Пожалуйста, [просмотрите флаги](%{base_url}/review). Если %{username} был ошибочно заблокирован от публикации, нажмите кнопку «Разблокировать» на [странице администратора для этого пользователя](%{user_url}). + + Этот порог можно изменить в настройках сайта `silence_new_user`. user_automatically_silenced_with_reason: title: "Автоматическая заморозка пользователя" subject_template: "Новый пользователь %{username} заморожен из-за жалоб сообщества" + text_body_template: | + Это автоматическое сообщение. + + Новый пользователь [%{username}](%{user_url}) был автоматически заблокирован. + + Причина - %{reason} + + Пожалуйста, [просмотрите флаги](%{base_url}/review). Если %{username} был ошибочно заблокирован от публикации, нажмите кнопку «Разблокировать» на [странице администратора для этого пользователя](%{user_url}). + + Этот порог можно изменить в настройках сайта `silence_new_user`. spam_post_blocked: title: "Спам заблокирован" subject_template: "Сообщения нового пользователя %{username} заблокированы из-за повторяющихся ссылок" @@ -3848,6 +3969,9 @@ ru: Здравствуйте! Сообщения от новых пользователей были переданы на проверку и ожидают рассмотрения. [Утвердите или отклоните их](%{base_url}/review?type=ReviewableQueuedPost). + user_posts_deleted: + title: "Сообщения пользователя удалены" + subject_template: "Все сообщения пользователя %{user}были удалены." unsubscribe_link: | [Нажмите сюда](%{unsubscribe_url}), чтобы отписаться от таких писем. unsubscribe_link_and_mail: | @@ -3965,6 +4089,7 @@ ru: %{respond_instructions} user_replied: title: "Пользователь ответил" + preview: "Кто-то ответил на ваш пост." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3987,6 +4112,7 @@ ru: %{respond_instructions} user_quoted: title: "Пользователь процитирован" + preview: "Кто-то процитировал вас в своём посте." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3998,6 +4124,7 @@ ru: %{respond_instructions} user_linked: title: "Ссылка на сообщение пользователя" + preview: "Ссылка на этот пост есть в другой теме." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -4009,6 +4136,7 @@ ru: %{respond_instructions} user_mentioned: title: "Пользователь упомянут" + preview: "Кто-то упомянул вас в посте." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -4064,6 +4192,7 @@ ru: %{respond_instructions} user_posted: title: "Публикация пользователем сообщения" + preview: "Кто-то ответил на тему, за которой вы следите." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -4097,6 +4226,7 @@ ru: %{respond_instructions} user_posted_pm: title: "Отправка пользователем личного сообщения" + preview: "Вам кто-то отправил личное сообщение." subject_template: "[%{email_prefix}] [PM] %{topic_title}" text_body_template: | %{header_instructions} @@ -4165,6 +4295,12 @@ ru: account_second_factor_disabled: title: "Двухфакторная аутентификация отключена" subject_template: "[%{email_prefix}] Двухфакторная аутентификация отключена" + text_body_template: | + Двухфакторная аутентификация отключена в вашей учетной записи по адресу %{site_name}. Теперь вы можете войти в систему, используя только свой пароль; дополнительный код аутентификации больше не требуется. + + Если вы не отключили двухфакторную аутентификацию (2FA), возможно, кто-то взломал вашу учетную запись. + + Если у вас возникнут вопросы, [свяжитесь с нашими дружелюбными сотрудниками](%{base_url}/about). digest: why: "Краткая сводка по %{site_link} с %{since}" since_last_visit: "Что нового появилось за время вашего отсутствия:" @@ -4185,6 +4321,7 @@ ru: preheader: "Краткая сводка с %{since}" forgot_password: title: "Восстановление забытого пароля" + preview: "Сбросить пароль." subject_template: "[%{email_prefix}] Восстановление пароля" text_body_template: | Кто-то попросил сбросить пароль на сайте [%{site_name}](%{base_url}). @@ -4206,6 +4343,7 @@ ru: %{base_url}/session/email-login/%{email_token} set_password: title: "Установка пароля" + preview: "Установить пароль для учетной записи." subject_template: "[%{email_prefix}] Установка пароля" text_body_template: | Кто-то попросил добавить пароль к вашему аккаунту на сайте [%{site_name}](%{base_url}). Сейчас вы можете входить в систему с помощью поддерживаемого онлайн-сервиса (Google, Facebook и т. д.), связанного с этим подтверждённым адресом электронной почты. @@ -4216,6 +4354,7 @@ ru: %{base_url}/u/password-reset/%{email_token} admin_login: title: "Вход администратора" + preview: "Запрошен вход в систему администратора." subject_template: "[%{email_prefix}] Вход" text_body_template: | Кто-то попросил войти под вашим аккаунтом на сайт [%{site_name}](%{base_url}). @@ -4226,6 +4365,7 @@ ru: %{base_url}/session/email-login/%{email_token} account_created: title: "Аккаунт создан" + preview: "Для вас создан новый аккаунт." subject_template: "[%{email_prefix}] Ваш новый аккаунт" text_body_template: | Для вас был создан новый аккаунт на сайте %{site_name}. @@ -4274,6 +4414,7 @@ ru: %{base_url}/u/confirm-old-email/%{email_token} notify_old_email: title: "Уведомление на старый адрес электронной почты" + preview: "Адрес электронной почты обновлен." subject_template: "[%{email_prefix}] Ваш адрес электронной почты был изменён" text_body_template: | Это автоматическое сообщение о том, что ваш адрес электронной почты для сайта @@ -4296,6 +4437,7 @@ ru: %{new_email} signup_after_approval: title: "Оповещение после одобрения аккаунта" + preview: "Новый аккаунт одобрен." subject_template: "Ваш аккаунт на сайте %{site_name} одобрен!" text_body_template: | Добро пожаловать на сайт %{site_name}! @@ -4321,6 +4463,7 @@ ru: %{reject_reason} signup: title: "Регистрация" + preview: "Подтвердите свою учетную запись." subject_template: "[%{email_prefix}] Подтверждение нового аккаунта" text_body_template: | Добро пожаловать на сайт %{site_name}! @@ -4343,6 +4486,7 @@ ru: Если ссылка выше не активна, попробуйте скопировать и вставить её в адресную строку браузера. suspicious_login: title: "Оповещение о новом входе" + preview: "Проверьте ваше устройство." subject_template: "[%{site_name}] Новый вход на сайт (место: %{location})" text_body_template: | Здравствуйте! @@ -4373,7 +4517,10 @@ ru: popular_topics: "Популярные темы" recent_topics: "Недавние темы" see_more: "Ещё" + search_title: "Попробуйте воспользоваться поиском?" search_button: "Искать" + home: "Вернуть меня домой" + placeholder: "Поиск тем по названию или ключевым словам…" offline: title: "Не удаётся загрузить приложение" offline_page_message: "Вы не в сети. Проверьте сетевое подключение и попробуйте снова." @@ -4382,6 +4529,7 @@ ru: upload: edit_reason: "изображения скачаны и сохранены локально" unauthorized: "Вы не можете загрузить файл данного типа (разрешённые типы файлов: %{authorized_extensions})." + images_only: "К сожалению, в этом режиме можно загружать только изображения." pasted_image_filename: "Имя файла изображения" store_failure: "Ошибка при загрузке #%{upload_id} для пользователя #%{user_id}." file_missing: "Необходимо указать файл для загрузки." @@ -4469,6 +4617,8 @@ ru: latte_theme_name: "Латте" summer_theme_name: "Летняя" dark_rose_theme_name: "Тёмная роза" + errors: + cannot_edit_remote_copies: "Внесение изменений в удаленные копии цветовых палитр запрещено." edit_this_page: "Отредактировать эту страницу" csv_export: boolean_yes: "Да" @@ -4924,12 +5074,18 @@ ru: nice_share: name: Славный пиар description: Поделился сообщением с 25 уникальными посетителями + long_description: | + Этот значок присваивается за распространение ссылки, по которой перешли 25 уникальных сторонних посетителей. Спасибо за распространение информации о наших обсуждениях и этом сообществе. good_share: name: Хороший пиар description: Поделился сообщением с 300 уникальными посетителями + long_description: | + Этот значок вручается за ссылку, по которой перешли 300 уникальных сторонних посетителей. Отличная работа! Вы представили интересную дискуссию множеству новых людей и помогли этому сообществу расти. great_share: name: Отличный пиар description: Поделился сообщением с 1000 уникальных посетителей + long_description: | + Этот значок вручается за распространение ссылки, по которой перешли 1000 уникальных сторонних посетителей. Вау! Вы привлекли к интересной дискуссии огромную новую аудиторию и помогли нам значительно расширить наше сообщество! first_like: name: Первый лайк description: Понравилось сообщение @@ -5099,6 +5255,9 @@ ru: many: "Нужно выбрать как минимум %{count} тегов." other: "Нужно выбрать как минимум %{count} тега." upload_row_too_long: "CSV-файл должен содержать один тег на строку. При необходимости за тегом может следовать запятая, а затем название группы тегов." + bulk_create: + invalid_params: "Неверные параметры. Пожалуйста, укажите массив названий тегов." + invalid_name: "Недопустимое имя тега." forbidden: invalid: one: "Выбранный тег не может быть использован" @@ -5135,6 +5294,9 @@ ru: rss_by_tag: "Темы, отмеченные тегом %{tag}" finish_installation: congratulations: "Поздравляем, вы установили Discourse!" + login_with_discourse_id: "Войти с помощью Discourse ID" + discourse_id_help: "Пожалуйста, войдите в систему, используя свой Discourse ID, нажав кнопку ниже.

Убедитесь, что вы используете учетную запись Discourse ID с основным адресом электронной почты, соответствующим переменной среды `DISCOURSE_DEVELOPER_EMAILS`." + discourse_id_error_help: "Вы решили пропустить настройку электронной почты на данный момент. К сожалению, из-за указанного выше сообщения об ошибке настройка не может быть продолжена. Пожалуйста, сообщите об этой проблеме на meta.discourse.org." register: button: "Зарегистрироваться" title: "Регистрация аккаунта администратора" @@ -5146,6 +5308,10 @@ ru: resend_email: title: "Отправить повторно письмо для активации" message: "

Мы повторно отправили письмо для активации на адрес %{email}" + discourse_id: + help: "В данный момент мы настраиваем для вас Discourse ID." + no_allowed_emails: "В файле DISCOURSE_DEVELOPER_EMAILS не указаны разрешенные адреса электронной почты. Невозможно продолжить настройку сайта." + global_notice: "Пока ни один администратор не вошел в систему. Пожалуйста, войдите в систему, используя учетную запись Discourse ID с адресом электронной почты, соответствующим переменной среды `DISCOURSE_DEVELOPER_EMAILS`, чтобы завершить установку." safe_mode: title: "Войти в безопасный режим" description: "Безопасный режим дает возможность проверить работу сайта без загрузки тем и плагинов на стороне клиента. Плагины на стороне сервера остаются включенными." @@ -5157,12 +5323,15 @@ ru: enter: "Войти в безопасный режим" must_select: "Для перехода в безопасный режим необходимо выбрать хотя бы один параметр." dev_mode: - enter: "Enter" + title: "Режим разработчика" + enable_rack_mini_profiler: "Включите функцию сохранения настроек Rack Mini Profiler при смене сессии на 1 час." + enter: "Войти в режим разработчика" wizard: title: "Настройка Discourse" step: setup: title: "Начало работы" + description: "Давайте настроим ваше сообщество, добавив основные параметры. Вы всегда сможете изменить их позже." fields: title: label: "Название сообщества" @@ -5215,6 +5384,7 @@ ru: no_description: "Внесите свой вклад в развитие %{repo}, создав аккаунт на GitHub." status_date: open: "открытые" + draft: "черновик" approved: "подтверждено" closed: "закрытые" discourse_push_notifications: @@ -5231,9 +5401,12 @@ ru: confirm_body: "Готово! Уведомления включены." custom: "Уведомление от пользователя %{username} на сайте %{site_title}" staff_action_logs: + redacted: "[Содержимое не отображается]" json_too_long: "Значения не регистрируются, поскольку они превышают ограничения на длину столбца" not_found: "не найдено" unknown: "неизвестно" + site_setting: + update_existing_users: "Обновить существующих пользователей? %{value}" user_merged: "Пользователь %{username} был объединён с этим аккаунтом" user_delete_self: "Пользователь удалил свой аккаунт на сайте %{url}" webhook_deactivation_reason: "Вебхук был автоматически выключен. Мы получили несколько ответов «%{status}» с ошибкой HTTP." @@ -5257,9 +5430,14 @@ ru: user_associated_posts_deleted: "Пользователь удален" auto_deleted_hidden_posts: "Автоматическое удаление скрытых публикаций" seed_data_topic_updated: "Обновлена предустановленная тема" + upcoming_changes: + log_manually_toggled: "Включается вручную пользователем" + log_promoted: > + Это предстоящее изменение достигло статуса '%{change_status}', поэтому оно было автоматически включено на вашем сайте. Подробнее см. страницу предстоящих изменений . reviewables: already_handled: "Спасибо, но мы уже просмотрели это сообщение и решили, что на него не нужно снова отправлять жалобу." already_handled_and_user_not_exist: "Спасибо, но кто-то уже просмотрел это сообщение, и указанный пользователь более не существует." + post_restored_by_author: "Пост был восстановлен автором." priorities: low: "Низкий" medium: "Средний" @@ -5327,6 +5505,7 @@ ru: description: "Согласиться с жалобой и скрыть сообщение, а также автоматически отправить пользователю уведомление с просьбой его отредактировать." complete: "Публикация скрыта, пользователь уведомлен." agree_and_edit: + title: "Редактировать пост" description: "Согласиться с жалобой и открыть окно редактора, чтобы изменить публикацию." complete: "Жалоба принята, теперь вы можете отредактировать публикацию." delete: @@ -5358,6 +5537,7 @@ ru: title: "Удалить публикацию" complete: "Публикация отменена." revise_and_reject_post: + title: "Запрос на внесение изменений..." complete: "Публикация отклонена до внесения правок." ignore: title: "Игнорировать" @@ -5388,6 +5568,7 @@ ru: title: "Нет" delete: title: "Удалить пользователя" + description: "Удалить пользователя без блокировки" complete: "Пользователь удален." block: title: "Удалить и заблокировать пользователя" @@ -5409,9 +5590,13 @@ ru: reject_and_delete: title: "Отклонить и удалить сообщение" complete: "Публикация отклонена и удалена." + reject_and_delete_standalone: + title: "Нет, удалите сообщение." reject_and_keep_deleted: title: "Оставить сообщение удаленным" complete: "Публикация отклонена и останется удаленной." + reject_and_keep_deleted_standalone: + title: "Нет, оставьте сообщение удаленным." approve_and_restore: title: "Да" complete: "Публикация одобрена и восстановлена." @@ -5420,10 +5605,6 @@ ru: complete: "Публикация одобрена и показана" post_actions: bundle_title: "Что вы хотите сделать с этим постом?" - no_action_post: - title: "Нет действий" - description: "Не предпринимать никаких действий по сообщению" - complete: "Никаких действий по сообщению не предпринято." delete_post: title: "Удалить публикацию" description: "Удалить этот пост" @@ -5440,12 +5621,12 @@ ru: title: "Восстановить сообщение" description: "Восстановить этот удаленный пост" complete: "Публикация восстановлена" + edit_post: + title: "Редактировать сообщение" + description: "Отредактировать содержимое этой записи" + complete: "Сообщение отредактировано" user_actions: bundle_title: "Что вы хотите сделать с пользователем?" - no_action_user: - title: "Нет действий" - description: "Не предпринимать никаких действий против пользователя" - complete: "Никаких действий против пользователя не предпринято." silence_user: title: "Заморозка пользователя" description: "Запретить пользователю публиковать сообщения" @@ -5514,6 +5695,8 @@ ru: invalid_tag_group: "имеет недопустимую группу тегов: %{tag_group_name}" discourse_id: already_registered: "Этот сайт уже зарегистрирован с Discourse ID" + errors: + regenerate_failed: "Не удалось восстановить учетные данные. Пожалуйста, попробуйте позже." activemodel: errors: <<: *errors diff --git a/config/locales/server.sk.yml b/config/locales/server.sk.yml index 7f18865ebf8e3..7acecab484970 100644 --- a/config/locales/server.sk.yml +++ b/config/locales/server.sk.yml @@ -60,8 +60,6 @@ sk: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} podľa %{username}" - too_many_urls: "V jednej požiadavke nie je možné vložiť do jedného poľa viac ako 10 adries URL." - concurrency_not_allowed: "Súbežné požiadavky na inline-oneboxing nie sú povolené. Prosím, pošlite vždy len jednu žiadosť." components: enabled_filter: "Povolené" disabled_filter: "Vypnuté" @@ -398,7 +396,6 @@ sk: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Používateľské agendy musia mať dĺžku aspoň 3 znaky, aby nedošlo k náhodnému obmedzeniu rýchlosti legitímnych používateľov." slow_down_crawler_user_agent_cannot_be_popular_browsers: "K nastaveniu nemôžete pridať žiadnu z nasledujúcich hodnôt: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Ak je povolená možnosť „optimalizácia obrazu pre kompozitor“, nemôžete zakázať metadáta obrázka pásu. Pred zakázaním metadát obrázkov pásu zakážte možnosť „optimalizácia obrazu kompozitora je povolená“." - x_summary_large_image_no_svg: "Súhrnné obrázky Twitteru používané pre metadáta twitter:image nemôžu byť obrázky .svg." tl0_and_anonymous_flag: "V prípade anonymných používateľov sa musí uviesť buď \"kontaktný e-mail stránky\", alebo \"e-mailová adresa na nahlásenie nezákonného obsahu\"." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Toto nastavenie vyžaduje, aby bolo najprv povolené nastavenie \"povoliť anonymný režim\"." conflicting_google_user_id: 'ID účtu Google pre toto konto sa zmenilo; z bezpečnostných dôvodov je potrebný zásah personálu. Obráťte sa na personál a odkážte ich na
https://meta.discourse.org/t/76575.' @@ -1286,6 +1283,7 @@ sk: read: "čítať" read_write: "čítať/zapisovať" instructions: 'Práve sme pre vás vygenerovali nový kľúč API používateľa, ktorý môžete použiť s „%{application_name}“, vložte do svojej aplikácie nasledujúci kľúč:' + copied: "Skopírované!" otp_description: 'Chcete povoliť prístup na túto stránku "%{application_name}"?' otp_confirmation: confirm_title: Pokračujte na %{site_name} @@ -1364,9 +1362,10 @@ sk: description: "Zoznam stavov vlajok vrátane typu vlajky, plagátu, vlajky a času na vyriešenie." visits: title: "Používateľské návštevy" - xaxis: "Deň" + xaxis: + desktop: "Desktop" + mobile: "Mobil" yaxis: "Počet návštev" - description: "Počet návštev prihlásených používateľov." signups: title: "Registrácie" xaxis: "Deň" @@ -1428,10 +1427,8 @@ sk: description: "Zobrazenia stránok prihlásených používateľov, anonymných používateľov, známych prehľadávačov a inej návštevnosti." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" xaxis: "Deň" yaxis: "DAU/MAU" - description: "Počet členov, ktorí sa prihlásili za posledný deň, vydelený počtom členov, ktorí sa prihlásili za posledný mesiac - vráti %, ktoré udáva \"priľnavosť\" komunity. Snažte sa dosiahnuť > 20 %." daily_engaged_users: title: "Denne zapojení používatelia" xaxis: "Deň" @@ -1919,7 +1916,6 @@ sk: slow_down_crawler_rate: "Ak je zadaný parameter slow_down_crawler_user_agents, táto rýchlosť sa uplatní na všetky crawlery (počet sekúnd oneskorenia medzi požiadavkami)" content_security_policy: "Povoľte Content-Security-Policy (CSP). CSP je ďalšia vrstva zabezpečenia, ktorá pomáha predchádzať určitým typom útokov vrátane Cross Site Scripting (XSS) a injekcie dát." content_security_policy_report_only: "Povoliť Content-Security-Policy-Report-Only (CSP)" - content_security_policy_collect_reports: "Povolenie zberu správ o porušeniach CSP na adrese /csp_reports" content_security_policy_frame_ancestors: "Obmedziť, kto môže túto stránku vložiť do iframe prostredníctvom CSP. Kontrola povolených hostiteľov pri vkladaní" content_security_policy_script_src: "Ďalšie zdroje skriptov uvedené v zozname povolených zdrojov. Aktuálny hostiteľ a CDN sú predvolene zahrnuté. Pozrite si časť Zmiernenie útokov XSS pomocou zásad zabezpečenia obsahu. (CSP). Ostatné zdroje hostiteľa sú ignorované, pretože je povolená funkcia strict-dynamic." invalidate_inactive_admin_email_after_days: "Účty administrátorov, ktorí nenavštívili stránku počas tohto počtu dní, budú musieť pred prihlásením znovu overiť svoju e-mailovú adresu. Nastavte na 0, aby ste to zakázali." @@ -2234,7 +2230,6 @@ sk: alternative_reply_by_email_addresses: "Zoznam alternatívnych šablón pre odpoveď e-mailom na prichádzajúce e-mailové adresy. Príklad: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "Používajte HTML namiesto textu pre prichádzajúce e-maily." strip_incoming_email_lines: "Odstráňte úvodné a koncové biele znaky z každého riadku prichádzajúcich e-mailov." - disable_emails: "Zabráňte aplikácii Discourse odosielať akékoľvek e-maily. Výberom možnosti \"áno\" zakážete odosielanie e-mailov všetkým používateľom. Výberom možnosti \"non-staff\" zakážete e-maily len pre používateľov, ktorí nie sú členmi personálu." strip_images_from_short_emails: "Odobrať obrázky z e-mailov s veľkosťou menšou ako 2800 bajtov" short_email_length: "Definujte maximálnu dĺžku e-mailu v bajtoch, aby bol klasifikovaný ako \"krátky\" na potlačenie obrázkov. Ak veľkosť e-mailu neprekročí toto nastavenie, všetky obrázky (napríklad avatary a emotikony) v e-maile budú odstránené." display_name_on_email_from: "V emailovom poli Od zobraziť plné mená" @@ -2252,6 +2247,7 @@ sk: mailgun_api_key: "Mailgun Secret API kľúč používaný na overenie správ webhooku." sendgrid_verification_key: "Overovací kľúč Sendgrid používaný na overovanie správ webhook." mailjet_webhook_token: "Token používaný na overenie payload webového háku. Musí byť odovzdaný ako parameter dotazu 't' webového háku, napríklad: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Token používaný na overenie payload webového háku. Musí byť odovzdaný ako parameter dotazu 't' webového háku, napríklad: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Autentizačný kľúč Mandrill používaný na overovanie správ webhook." postmark_webhook_token: "Token používaný na overenie užitočného zaťaženia webhooku. Musí sa odovzdať ako parameter dopytu \"t\" webhooku, napríklad: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Token používaný na overenie obsahu webhooku. Musí sa odovzdať ako parameter dopytu „t“ webhooku, napríklad: https://example.com/webhook/sparkpost?t=supersecret" @@ -2323,7 +2319,6 @@ sk: group_in_subject: "Nastavenie %%{optional_pm} v predmete e-mailu na názov prvej skupiny v PM, pozri: Prispôsobenie formátu predmetu pre štandardné e-maily" allow_anonymous_mode: "Povoľte používateľom možnosť prepnúť na anonymný režim odosielania príspevkov. Keď je táto možnosť aktivovaná, používatelia sa môžu rozhodnúť, že ich identita bude pri vytváraní príspevkov alebo tém na celom webe skrytá. Pozrite si tiež časť `povoliť anonymné lajky`." anonymous_account_duration_minutes: "Každých N minút vytvor nový anonymný účet na ochranu používateľskej anonymity. Príklad: Ak je nastavené na 600, akonáhle uplynie 600 minút od posledného príspevku A používateľ prepne do anonymného režimu, vytvorí sa nový anonymný účet." - hide_user_profiles_from_public: "Vypnúť používateľské karty, profily a adresár pre anonymných používateľov." hide_new_user_profiles: "Skryť používateľské profily úrovne 1 alebo nižšej pred verejnými používateľmi a používateľmi úrovne 1 dôveryhodnosti, kým nepridajú prvý príspevok. Táto funkcia je bezpodmienečne zakázaná na stránkach must_approve_users a iba na pozvaných stránkach." allow_users_to_hide_profile: "Umožniť používateľom skryť svoj profil a prítomnosť" hide_user_activity_tab: "Skryť kartu aktivity v používateľských profiloch okrem profilov administrátora a seba." @@ -2512,7 +2507,6 @@ sk: dashboard_hidden_reports: "Povoliť skrytie zadaných správ z hlavného panela." dashboard_visible_tabs: "Vyberte, ktoré karty hlavného panela budú viditeľné." dashboard_general_tab_activity_metrics: "Na karte Všeobecné vyberte správy, ktoré sa majú zobrazovať ako metriky aktivity." - gravatar_enabled: "Používajte službu Gravatar pre avatary používateľov. Zabráni to používateľom prejsť na službu Gravatar pre ich avatary, ale nebude to mať vplyv na používateľov, ktorí ju už používajú." gravatar_name: "Zadajte názov poskytovateľa služby Gravatar. Tento názov sa zvyčajne používa na identifikáciu zdroja, ktorý poskytuje avatary Gravatar na lokalitu." gravatar_base_url: "Zadajte adresu URL na prístup k rozhraniu API poskytovateľa Gravatar. Toto nastavenie je rozhodujúce pre konverziu e-mailových adries na adresy URL Gravataru, v ktorých sú uložené obrázky avataru." gravatar_login_url: "URL relatívna k `gravatar_base_url`, ktorá poskytuje používateľovi prihlásenie do služby Gravatar." @@ -2595,12 +2589,6 @@ sk: reply_by_email_disabled: "Pred povolením tohto nastavenia musíte najprv povoliť funkciu \"odpovedať e-mailom\"." discourse_connect_url_is_empty: "Pred povolením tohto nastavenia musíte nastaviť \"url adresu discourse connect\"." enable_local_logins_disabled: "Pred povolením tohto nastavenia musíte najskôr povoliť „povoliť miestne prihlásenie“." - min_username_length_exists: "Minimálnu dĺžku používateľského mena nemôžete nastaviť nad najkratšie používateľské meno (%{username})." - min_group_name_length_exists: "Minimálnu dĺžku používateľského mena nemôžete nastaviť nad najkratší názov skupiny (%{group_name})." - min_username_length_range: "Nemôžete nastaviť minimum viac ako maximum." - max_username_length_exists: "Maximálnu dĺžku používateľského mena nemôžete nastaviť pod najdlhšie používateľské meno (%{username})." - max_group_name_length_exists: "Maximálnu dĺžku používateľského mena nemôžete nastaviť pod najdlhší názov skupiny (%{group_name})." - max_username_length_range: "Nemôžete nastaviť maximum menšie ako minimum." invalid_hex_value: "Hodnoty farieb musia byť 6-miestne hexadecimálne kódy." empty_selectable_avatars: "Pred povolením tohto nastavenia musíte najprv nahrať aspoň dva vyberateľné avatary." category_search_priority: @@ -2661,7 +2649,6 @@ sk: exclude_tag: "Vylúčenie tém s konkrétnou značkou" exclude_tags_any: "Vylúčiť témy s niektorou zo zadaných značiek (oddelených čiarkami)" exclude_tags_all: "Vylúčiť témy so všetkými zadanými značkami (oddelenými plusom)" - tags_alias: "Alias pre filter 'tag:'" tag_group: "Zobrazenie tém so značkami z konkrétnej skupiny značiek" exclude_tag_group: "Vylúčenie tém so značkami z určitej skupiny značiek" activity_before: "Zobraziť témy s poslednou aktivitou pred dátumom (RRRR-MM-DD alebo pred niekoľkými dňami)" @@ -3118,35 +3105,9 @@ sk: new_version_mailer: title: "Nová verzia Mailer" subject_template: "[%{email_prefix}] Nová verzia Discourse, k dispozícii je aktualizácia" - text_body_template: | - Hurá, nová verzia [Discourse](https://www.discourse.org) je k dispozícii! - - Vaša verzia: %{installed_version} - Nová verzia: **%{new_version}** - - - Aktualizujte pomocou nášho jednoduchého **[jednoklikového aktualizátora v prehliadači](%{base_url}/admin/update)** - - - Zistite, čo je nové v [poznámkach k vydaniu](https://meta.discourse.org/tag/release-notes) alebo si pozrite [surový GitHub changelog](https://github.com/discourse/discourse/commits/main) - - - Navštívte [meta.discourse.org](https://meta.discourse.org) pre novinky, diskusiu a podporu pre Discourse new_version_mailer_with_notes: title: "Nová verzia Mailer s poznámkami" subject_template: "[%{email_prefix}] k dispozícii je aktualizácia" - text_body_template: | - Hurá, nová verzia [Discourse](https://www.discourse.org) je k dispozícii! - - Vaša verzia: %{installed_version} - Nová verzia: **%{new_version}** - - - Aktualizujte pomocou nášho jednoduchého **[jednoklikového aktualizátora v prehliadači](%{base_url}/admin/update)** - - - Zistite, čo je nové v [poznámkach k vydaniu](https://meta.discourse.org/tag/release-notes) alebo si pozrite [surový GitHub changelog](https://github.com/discourse/discourse/commits/main) - - - Navštívte [meta.discourse.org](https://meta.discourse.org) pre novinky, diskusiu a podporu pre Discourse - - ### Poznámky k vydaniu - - %{notes} flag_reasons: off_topic: "Váš príspevok bol označený ako \"mimo-témy\": komunita cíti, že nie je vhodný do témy tak, ako je definovaná nadpisom a prvým príspevkom" inappropriate: "Váš príspevok bol označený ako **nevhodný**: komunita ho považuje za urážlivý, hanlivý, nenávistný alebo za porušenie [našich pravidiel komunity](%{base_path}/pravidlá)." @@ -3201,49 +3162,9 @@ sk: reviewable_queued_post_revise_and_reject: title: "Spätná väzba na váš príspevok" subject_template: "Spätná väzba na váš príspevok v %{topic_title}" - text_body_template: | - ### Preklad - - **Ahoj %{username},** - - Preskúmali sme váš príspevok v [%{topic_title}](%{topic_url}) a máme pre vás niekoľko pripomienok. - - Dôvod: %{reason} - - Spätná väzba: %{feedback} - - Môžete upraviť svoj pôvodný príspevok nižšie a znovu ho odoslať so zmenami, alebo odpovedzte na túto správu, ak máte nejaké otázky. - - -------- - - %{original_post} - - -------- - - Ďakujeme, - Moderátori %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "Spätná väzba k vašej téme" subject_template: 'Spätná väzba k novej téme s názvom "%{topic_title}"' - text_body_template: | - Ahoj %{username}, - - Preskúmali sme tvoju novú tému s názvom "%{topic_title}" a máme pre teba niekoľko pripomienok. - - Dôvod: %{reason} - - Spätná väzba: %{feedback} - - Môžeš upraviť pôvodný príspevok svojej témy nižšie a znovu ho odoslať so zmenami, ktoré navrhujeme, alebo odpovedať na túto správu, ak máš nejaké otázky. - - -------- - - %{original_post} - - -------- - - Ďakujeme, - Moderátori %{site_name} post_hidden_again: title: "Príspevok je opäť skrytý" subject_template: "Príspevok skrytý kvôli označeniam komunity, personál bol informovaný" @@ -5131,8 +5052,6 @@ sk: deprecation_error_label: Zabezpečte, aby deprekácie Javascriptu vyvolali chybu enter: "Vstup do núdzového režimu" must_select: "Ak chcete vstúpiť do núdzového režimu, musíte vybrať aspoň jednu možnosť." - dev_mode: - enter: "Zadajte" wizard: title: "Nastavenie Discourse" step: @@ -5396,8 +5315,6 @@ sk: approve_and_unhide: title: "Áno" complete: "Príspevok schválený a odkrytý" - no_action_post: - title: "Žiadna akcia" delete_post: title: "Odstrániť príspevok" complete: "Príspevok zmazaný" @@ -5406,8 +5323,6 @@ sk: restore_post: title: "Obnoviť príspevok" complete: "Príspevok bol obnovený" - no_action_user: - title: "Žiadna akcia" silence_user: title: "Umlčať používateľa" complete: "Používateľ umlčaný" diff --git a/config/locales/server.sl.yml b/config/locales/server.sl.yml index 4eb8af75a23bc..d9fabbf0eec66 100644 --- a/config/locales/server.sl.yml +++ b/config/locales/server.sl.yml @@ -106,7 +106,6 @@ sl: other: ! "%{count} napak preprečuje tej %{model} da se shrani" site_settings: second_factor_cannot_be_enforced_with_discourse_connect_enabled: "2FA ne morete nastaviti kot zahtevano, če je omogočena možnost DiscourseConnect." - x_summary_large_image_no_svg: "Slike povzetka Twitterja, ki se uporabljajo za metapodatke twitter:image, ne morejo biti slike tipa .svg." invite: confirm_email: "

Ste skoraj na koncu! Poslali smo vam aktivacijsko e-sporočilo na vaš e-naslov. Sledite navodilom v e-sporočilu za aktivacijo računa.

Če e-sporočila ne prejmete, preverite predal z vsiljeno pošto.

" disabled_errors: @@ -558,6 +557,7 @@ sl: user_api_key: deny: "Prekliči" read: "prebrano" + copied: "Kopirano!" otp_description: 'Hočete dovoliti "%{application_name}" da dostopa do te strani?' otp_confirmation: confirm_title: Nadaljujte na %{site_name} @@ -592,6 +592,10 @@ sl: labels: flag: Tip poster: Odgovarja + visits: + xaxis: + desktop: "Namizno" + mobile: "Mobilno" consolidated_page_views: labels: post: Prispevek @@ -1905,8 +1909,6 @@ sl: resend_email: title: "Ponovno pošlji aktivacijsko e-sporočilo" message: "

Ponovno smo poslali aktivacijsko e-sporočilo na%{email}" - dev_mode: - enter: "Enter" wizard: title: "Postavitev Discourse" step: diff --git a/config/locales/server.sq.yml b/config/locales/server.sq.yml index 1e669364e309f..7baba11c68638 100644 --- a/config/locales/server.sq.yml +++ b/config/locales/server.sq.yml @@ -416,6 +416,7 @@ sq: authorize: "Autorizo" deny: "Anulo" read: "lexuar" + copied: "Kopjuar!" otp_confirmation: confirm_title: Vazhdo tek %{site_name} scopes: @@ -442,7 +443,8 @@ sq: flag: Lloji visits: title: "Vizitat e përdoruesit" - xaxis: "Ditë" + xaxis: + mobile: "Mobile" yaxis: "Numri i vizitave" signups: xaxis: "Ditë" @@ -1375,8 +1377,6 @@ sq: title: "Konfirmoni emailin tuaj" resend_email: title: "Dërgo përsëri emailin e aktivizimit" - dev_mode: - enter: "Hyni" wizard: step: setup: diff --git a/config/locales/server.sr.yml b/config/locales/server.sr.yml index df5e2e3cfad11..d479131a3ae1b 100644 --- a/config/locales/server.sr.yml +++ b/config/locales/server.sr.yml @@ -278,6 +278,7 @@ sr: user_api_key: deny: "Odustani" read: "pročitano" + copied: "Kopirano!" reports: default: labels: @@ -406,7 +407,6 @@ sr: digest_other_topics: "Maksimalan broj tema za prikazivanje u sekciji \"Novo u temama i kategorijama koje pratite\" rezimea email poruke." digest_min_excerpt_length: "Minimalna dužina isečka poruke u email rezimeu, u karakterima." email_link_color: "Boja linkova u HTML email porukama. Unesite ime boje ('blue') ili heksadecimalnu vrednost ('#0000FF'). " - hide_user_profiles_from_public: "Onemogući korisničke kartice, profile i direktorijume za anonimne korisnike." read_time_word_count: "Broj reči po minutu za računanje procenjenog vremena čitanja" display_name_on_posts: "Prikaži puno ime korisnika na njihovim porukama kao dodatak na @korisnicko_ime" show_time_gap_days: "Ako su dve poruke poslate sa ovoliko dana razmaka, prikaži vremensku razliku u temi." diff --git a/config/locales/server.sv.yml b/config/locales/server.sv.yml index f1b90eae8c60a..341eb8977536e 100644 --- a/config/locales/server.sv.yml +++ b/config/locales/server.sv.yml @@ -241,7 +241,6 @@ sv: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Användaragenter måste vara minst 3 tecken långa för att undvika oavsiktligt hastighetsbegränsande legitima användare." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Du kan inte lägga till något av följande värden till inställningen: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Du kan inte inaktivera Radera metadata för bild om 'composer media optimization image enabled' är aktiverat. Inaktivera 'composer media optimization image enabled' innan du inaktiverar Radera metadata för bild." - x_summary_large_image_no_svg: "Twitter, sammanfattningsbilder som används för twitter: bildens metadata kan inte vara .svg" conflicting_google_user_id: 'Google-konto-ID:et för det här kontot har ändrats och av säkerhetsskäl krävs personalens ingripande. Kontakta personalen och hänvisa dem till
https://meta.discourse.org/t/76575' onebox: invalid_address: "Tyvärr kunde vi inte generera en förhandsvisning av den här webbsidan eftersom servern '%{hostname}' inte kunde hittas. I stället för en förhandsvisning visas enbart en länk i ditt inlägg. :cry:" @@ -966,6 +965,7 @@ sv: read: "läs" read_write: "läs/skriv" instructions: 'Vi genererade precis en ny API-nyckel som du kan använda med "%{application_name}". Klistra in följande nyckel i din applikation:' + copied: "Kopierad!" otp_description: 'Vill du tillåta att "%{application_name}" får tillträde till din sida?' otp_confirmation: confirm_title: Fortsätt till %{site_name} @@ -1040,7 +1040,9 @@ sv: description: "Lista över flaggornas status, med typ av flagga, skribent, flaggare och tid för lösning." visits: title: "Användarbesök" - xaxis: "Dag" + xaxis: + desktop: "Skrivbord" + mobile: "Mobil" yaxis: "Antal besök" signups: title: "Registreringar" @@ -1087,10 +1089,8 @@ sv: yaxis: "Dag" description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAA/MAA" xaxis: "Dag" yaxis: "DAA/MAA" - description: "Antal medlemmar som loggade in den senaste dagen dividerat med antalet medlemmar som loggade in den senaste månaden - returnerar ett procenttal som indikerar forumets 'dragningskraft'. Sikta på > 20 %." daily_engaged_users: title: "Dagligen engagerade användare" xaxis: "Dag" @@ -1534,7 +1534,6 @@ sv: slow_down_crawler_user_agents: 'Användaragenter för sökrobotar som ska vara hastighetsbegränsade vilket konfigurerats i inställningen "sakta ned sökrobots hastighet". Varje värde måste vara minst 3 tecken långt.' slow_down_crawler_rate: "Om slow_down_crawler_user_agents anges kommer denna hastighet att gälla för alla sökrobotar (fördröjning mellan förfrågningarna uttryckt i sekunder)" content_security_policy_report_only: "Aktivera enbart rapport över säkerhetspolicy för innehåll (CSP)" - content_security_policy_collect_reports: "Aktivera insamling av CSP-överträdelserapporter på /csp_reports" content_security_policy_frame_ancestors: "Begränsa vem som kan bädda in denna webbplats i iframes via CSP. Kontrollera tillåtna värdar på Inbäddning" invalidate_inactive_admin_email_after_days: "Administratörskonton som inte har besökt webbplatsen under detta antal dagar kommer att behöva validera sin e-postadress innan de loggar in. Ställ in till 0 för att inaktivera." include_secure_categories_in_tag_counts: "När detta är aktiverat kommer antalet ämnen för en tagg att omfatta ämnen som finns i läsbegränsade kategorier för alla användare. När detta är inaktiverat visas normala användare endast ett antal ämnen för en tagg där alla ämnen är i offentliga kategorier." @@ -1797,7 +1796,6 @@ sv: alternative_reply_by_email_addresses: "Lista på alternativa mallar för svar genom inkommen e-post. Exempelvis: %%{reply_key}@svar.exempel.se|replies+%% {reply_key}@exempel.se" incoming_email_prefer_html: "Använd HTML istället för text för inkommande e-post." strip_incoming_email_lines: "Ta bort ledande och efterföljande blanksteg från varje rad för inkommande e-post." - disable_emails: "Förhindra att Discourse skickar några e-postmeddelanden alls. Välj 'ja' för att inaktivera e-postmeddelanden för alla användare. Välj 'icke-personliga' för att inaktivera e-postmeddelanden endast för användare som inte är personal." strip_images_from_short_emails: "Rensa bilder från e-post som har mindre storlek än 2 800 bytes." display_name_on_email_from: "Visa fullständiga namn på e-postmeddelandens Från-fält." unsubscribe_via_email: "Tillåt att användare avprenumererar från e-post genom att skicka ett e-postmeddelande med 'unsubscribe' i ämnesrubriken eller innehållet." @@ -1814,6 +1812,7 @@ sv: mailgun_api_key: "Mailgun Secret API-nyckel att använda för att verifiera webhook-meddelanden." sendgrid_verification_key: "Verifieringsnyckel för Sendgrid som används för att verifiera webhook-meddelanden." mailjet_webhook_token: "Token som används för att verifiera webhook-nyttolasten. Den måste skickas som frågeparametern \"t\" för webhook, till exempel: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Token som används för att verifiera webhook-nyttolasten. Den måste skickas som frågeparametern \"t\" för webhook, till exempel: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Mandrill-autentiseringsnyckel som används för att verifiera webhook-meddelanden." postmark_webhook_token: "Token som används för att verifiera webhook-nyttolasten. Den måste skickas som frågeparametern \"t\" för webhook, till exempel: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Token som används för att verifiera webhook-nyttolasten. Den måste skickas som frågeparametern \"t\" för webhook, till exempel: https://example.com/webhook/sparkpost?t=supersecret" @@ -1876,7 +1875,6 @@ sv: enable_category_group_moderation: "Tillåt att grupper modererar innehåll i specifika kategorier" group_in_subject: "Ställ in %%{optional_pm} i e-postämnet till namnet på den första gruppen i PM, se: Anpassa ämnesformat för standardmeddelanden" anonymous_account_duration_minutes: "Skapa ett nytt anonymt konto var N:e minut för varje användare för att skydda anonymiteten. Exempel: om detta ställs in till 600, så skapas ett nytt anonymt konto så snart som 600 minuter har gått sedan senaste inlägget OCH användaren väljer anon." - hide_user_profiles_from_public: "Inaktivera användarkort, användarprofiler och användarkataloger för anonyma användare." allow_users_to_hide_profile: "Tillåt att användare döljer sin profil och närvaro" hide_user_activity_tab: "Dölj aktivitetsfliken på användarprofiler utom för administratörer och användaren själv." allow_featured_topic_on_user_profiles: "Tillåt att användarna visar en länk till ett ämne från sitt användarkort och profil." @@ -2062,10 +2060,6 @@ sv: reply_by_email_disabled: "Du måste först aktivera 'svara med e-post' innan du aktiverar denna inställning." discourse_connect_url_is_empty: "Du måste ange en 'discourse connect url' innan du aktiverar denna inställning." enable_local_logins_disabled: "Du måste först 'aktivera lokala inloggningar' innan du aktiverar denna inställning." - min_username_length_exists: "Du kan inte ställa in kortast tillåtna längd på användarnamn till att vara längre än det kortaste användarnamnet (%{username})." - min_username_length_range: "Du kan inte ställa in minimum till att vara högre än maximum" - max_username_length_exists: "Du kan inte ställa in högsta tillåtna längd på användarnamn till att vara kortare än det längsta användarnamnet (%{username})." - max_username_length_range: "Du kan inte ställa in maximum till att vara mindre än minimum." invalid_hex_value: "Färgvärden måste vara sexsiffriga hexadecimala koder." empty_selectable_avatars: "Du måste först ladda upp åtminstone två valbara avatarer innan du aktiverar denna inställning." category_search_priority: @@ -2472,47 +2466,9 @@ sv: reviewable_queued_post_revise_and_reject: title: "Feedback om ditt inlägg" subject_template: "Feedback på ditt inlägg i %{topic_title}" - text_body_template: | - Hej %{username}, - - Vi har granskat ditt inlägg i [%{topic_title}](%{topic_url}) och har lite feedback till dig. - - Anledning: %{reason} - - Feedback: %{feedback} - - Du kan redigera ditt ursprungliga inlägg nedan och skicka in det igen för att göra de föreslagna ändringarna, eller svara på det här meddelandet om du har några frågor. - - -------- - - %{original_post} - - -------- - - Tack, - %{site_name} Moderatorer reviewable_queued_post_revise_and_reject_new_topic: title: "Feedback om ditt ämne" subject_template: 'Feedback om nytt ämne med titeln "%{topic_title}"' - text_body_template: | - Hej %{username}, - - Vi har granskat ditt nya ämne med titeln "%{topic_title}" och har lite feedback till dig. - - Anledning: %{reason} - - Feedback: %{feedback} - - Du kan redigera ditt ämnes ursprungliga inlägg nedan och skicka in igen för att göra de föreslagna ändringarna, eller svara på det här meddelandet om du har några frågor. - - -------- - - %{original_post} - - -------- - - Tack, - %{site_name} Moderatorer post_hidden_again: title: "Inlägget dolt igen" subject_template: "Inlägget döljdes på grund av att det flaggats av forumets medlemmar, personal har aviserats" @@ -4058,8 +4014,6 @@ sv: deprecation_error_label: Se till att Javascript-utfasningar ger upphov till ett fel enter: "Starta felsäkert läge" must_select: "Du måste välja minst ett alternativ för att aktivera felsäkert läge." - dev_mode: - enter: "Retur" wizard: title: "Discourse-inställningar" step: @@ -4265,8 +4219,6 @@ sv: title: "Ja" approve_and_unhide: title: "Ja" - no_action_post: - title: "Ingen åtgärd" delete_post: title: "Radera inlägg" complete: "Inlägg raderat" @@ -4274,8 +4226,6 @@ sv: title: "Dölj inlägg" restore_post: title: "Återställ inlägg" - no_action_user: - title: "Ingen åtgärd" silence_user: title: "Tysta användare" suspend_user: diff --git a/config/locales/server.sw.yml b/config/locales/server.sw.yml index 9899d96a04c34..d0bfaad249b75 100644 --- a/config/locales/server.sw.yml +++ b/config/locales/server.sw.yml @@ -530,7 +530,9 @@ sw: assigned: Imekabidhiwa visits: title: "Mtumiaji Ametembelea" - xaxis: "Siku" + xaxis: + desktop: "Eneo kazi la Kompyuta" + mobile: "Kifaa cha kiganjani" yaxis: "Idadi ya utembeleaji" signups: xaxis: "Siku" @@ -911,8 +913,6 @@ sw: staged_users_disabled: "Kwanza ruhusu 'watumiaji walio staged' kabla ya kuruhusu mpangilio huu." reply_by_email_disabled: "Kwanza ruhusu 'jibu kupitia barua pepe' kabla ya kuruhusu mpangilio huu." enable_local_logins_disabled: "Kwanza ruhusu 'ruhusu programu-jalizi ' kabla ya kuruhusu mpangilio huu." - min_username_length_range: "Hauwezi ukaseti kiwango cha chini kiwe zaidi ya kiwango cha juu." - max_username_length_range: "Hauwezi ukaweka kiwango cha juu kiwe kidogo ya kiwango cha chini." search: within_post: "#%{post_number} za %{username}" types: diff --git a/config/locales/server.te.yml b/config/locales/server.te.yml index 3f0ffa8a8588a..cbf0d80e2d231 100644 --- a/config/locales/server.te.yml +++ b/config/locales/server.te.yml @@ -171,7 +171,6 @@ te: slow_down_crawler_user_agent_must_be_at_least_3_characters: "చట్టబద్ధమైన వినియోగదారులను ప్రమాదవశాత్తూ రేట్-పరిమితం చేయడాన్ని నివారించడానికి వినియోగదారు ఏజెంట్‌లు తప్పనిసరిగా కనీసం 3 అక్షరాల పొడవు ఉండాలి." slow_down_crawler_user_agent_cannot_be_popular_browsers: "మీరు సెట్టింగ్‌కు కింది విలువల్లో దేనినీ జోడించలేరు: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "'కంపోజర్ మీడియా ఆప్టిమైజేషన్ ఇమేజ్ ఎనేబుల్' ప్రారంభించబడితే మీరు స్ట్రిప్ ఇమేజ్ మెటాడేటాను డిజేబుల్ చేయలేరు. స్ట్రిప్ ఇమేజ్ మెటాడేటాను డిసేబుల్ చేయడానికి ముందు 'కంపోజర్ మీడియా ఆప్టిమైజేషన్ ఇమేజ్ ఎనేబుల్ చేయబడింది' అని డిజేబుల్ చేయండి." - x_summary_large_image_no_svg: "Twitter కోసం ఉపయోగించే Twitter సారాంశం చిత్రాలు:ఇమేజ్ మెటాడేటా .svg చిత్రం కాకూడదు." word_connector: comma: ", " invite: @@ -629,6 +628,7 @@ te: deny: "రద్దుచేయండి" read: "చదివిన" read_write: "చదవండి/వ్రాయండి" + copied: "కాపీ చేయబడింది!" otp_confirmation: confirm_title: '%{site_name} కు కొనసాగండి' logging_in_as: '%{username} గా లాగిన్ అవుతోంది' @@ -690,7 +690,9 @@ te: time_to_resolution: రిజల్యూషన్ సమయం visits: title: "సభ్యుని గణాంకాలు" - xaxis: "రోజు" + xaxis: + desktop: "డెస్క్‌టాప్" + mobile: "మొబైల్" yaxis: "దర్శనాల సంఖ్య" signups: title: "సైన్అప్‌లు" @@ -733,7 +735,6 @@ te: site_traffic: yaxis: "రోజు" dau_by_mau: - title: "డిఏయూ/ఎంఏయూ" xaxis: "రోజు" yaxis: "డిఏయూ/ఎంఏయూ" daily_engaged_users: @@ -1120,7 +1121,6 @@ te: slow_down_crawler_user_agents: '"స్లో డౌన్ క్రాలర్ రేట్" సెట్టింగ్‌లో కాన్ఫిగర్ చేయబడినట్లుగా రేట్ పరిమితం చేయబడే వెబ్ క్రాలర్‌ల వినియోగదారు ఏజెంట్‌లు. ప్రతి విలువ తప్పనిసరిగా కనీసం 3 అక్షరాల పొడవు ఉండాలి.' slow_down_crawler_rate: "slow_down_crawler_user_agents పేర్కొనబడితే, ఈ రేటు అన్ని క్రాలర్‌లకు వర్తిస్తుంది (అభ్యర్థనల మధ్య సెకన్ల ఆలస్యం సంఖ్య)" content_security_policy_report_only: "కంటెంట్-సెక్యూరిటీ-పాలసీ-రిపోర్ట్-మాత్రమే (CSP)ని ప్రారంభించండి" - content_security_policy_collect_reports: "/csp_reports వద్ద CSP ఉల్లంఘన నివేదిక సేకరణను ప్రారంభించండి" content_security_policy_frame_ancestors: "CSP ద్వారా iframesలో ఈ సైట్‌ను ఎవరు పొందుపరచవచ్చో నియంత్రించండి. ఎంబెడ్డింగ్లో అనుమతించబడిన హోస్ట్‌లను నియంత్రించండి" invalidate_inactive_admin_email_after_days: "ఇన్ని రోజులలో సైట్‌ను సందర్శించని అడ్మిన్ ఖాతాలు లాగిన్ చేయడానికి ముందు వారి ఇమెయిల్ చిరునామాను మళ్లీ ధృవీకరించాలి. నిలిపివేయడానికి 0కి సెట్ చేయండి." include_secure_categories_in_tag_counts: "ప్రారంభించబడినప్పుడు, ట్యాగ్ కోసం టాపిక్‌ల గణన వినియోగదారులందరికీ చదవడానికి పరిమితం చేయబడిన వర్గాల్లోని అంశాలను కలిగి ఉంటుంది. నిలిపివేయబడినప్పుడు, సాధారణ వినియోగదారులకు ట్యాగ్ కోసం అంశాల గణన మాత్రమే చూపబడుతుంది, ఇక్కడ అన్ని అంశాలు పబ్లిక్ కేటగిరీలలో ఉంటాయి." @@ -1382,7 +1382,6 @@ te: alternative_reply_by_email_addresses: "ఇమెయిల్ ఇన్‌కమింగ్ ఇమెయిల్ చిరునామాల ద్వారా ప్రత్యుత్తరం కోసం ప్రత్యామ్నాయ టెంప్లేట్‌ల జాబితా. ఉదాహరణ: %%{reply_key}@reply.example.com|ప్రత్యుత్తరాలు+%%{reply_key}@example.com" incoming_email_prefer_html: "ఇన్‌కమింగ్ ఇమెయిల్ కోసం టెక్స్ట్‌కు బదులుగా HTMLని ఉపయోగించండి." strip_incoming_email_lines: "ఇన్‌కమింగ్ ఇమెయిల్‌ల ప్రతి లైన్ నుండి లీడింగ్ మరియు ట్రైలింగ్ వైట్‌స్పేస్‌లను తీసివేయండి." - disable_emails: "ఎలాంటి ఇమెయిల్‌లను పంపకుండా ఉపన్యాసం నిరోధించండి. వినియోగదారులందరికీ ఇమెయిల్‌లను నిలిపివేయడానికి 'అవును' ఎంచుకోండి. సిబ్బందియేతర వినియోగదారుల కోసం మాత్రమే ఇమెయిల్‌లను నిలిపివేయడానికి 'నాన్-స్టాఫ్'ని ఎంచుకోండి." strip_images_from_short_emails: "2800 బైట్‌ల కంటే తక్కువ పరిమాణం ఉన్న ఇమెయిల్‌ల నుండి చిత్రాలను తీసివేయండి" display_name_on_email_from: "ఫీల్డ్‌ల నుండి ఇమెయిల్‌లో పూర్తి పేర్లను ప్రదర్శించండి" unsubscribe_via_email: "సబ్జెక్ట్ లేదా బాడీలో 'అన్‌సబ్‌స్క్రయిబ్'తో ఇమెయిల్ పంపడం ద్వారా ఇమెయిల్‌ల నుండి అన్‌సబ్‌స్క్రైబ్ చేయడానికి వినియోగదారులను అనుమతించండి" @@ -1399,6 +1398,7 @@ te: mailgun_api_key: "వెబ్‌హుక్ సందేశాలను ధృవీకరించడానికి Mailgun సీక్రెట్ API కీ ఉపయోగించబడుతుంది." sendgrid_verification_key: "webhook సందేశాలను ధృవీకరించడానికి Sendgrid ధృవీకరణ కీ ఉపయోగించబడుతుంది." mailjet_webhook_token: "వెబ్‌హుక్ పేలోడ్‌ని ధృవీకరించడానికి టోకెన్ ఉపయోగించబడింది. ఇది తప్పనిసరిగా webhook యొక్క 't' ప్రశ్న పరామితి వలె పాస్ చేయబడాలి, ఉదాహరణకు: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "వెబ్‌హుక్ పేలోడ్‌ని ధృవీకరించడానికి టోకెన్ ఉపయోగించబడింది. ఇది తప్పనిసరిగా webhook యొక్క 't' ప్రశ్న పరామితి వలె పాస్ చేయబడాలి, ఉదాహరణకు: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "వెబ్‌హుక్ సందేశాలను ధృవీకరించడానికి మాండ్రిల్ ప్రమాణీకరణ కీ ఉపయోగించబడుతుంది." postmark_webhook_token: "వెబ్‌హుక్ పేలోడ్‌ని ధృవీకరించడానికి టోకెన్ ఉపయోగించబడింది. ఇది తప్పనిసరిగా webhook యొక్క 't' ప్రశ్న పరామితి వలె పాస్ చేయబడాలి, ఉదాహరణకు: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "వెబ్‌హుక్ పేలోడ్‌ని ధృవీకరించడానికి టోకెన్ ఉపయోగించబడింది. ఇది తప్పనిసరిగా webhook యొక్క 't' ప్రశ్న పరామితి వలె పాస్ చేయబడాలి, ఉదాహరణకు: https://example.com/webhook/sparkpost?t=supersecret" @@ -1461,7 +1461,6 @@ te: enable_category_group_moderation: "నిర్దిష్ట వర్గాలలోని కంటెంట్‌ను మోడరేట్ చేయడానికి సమూహాలను అనుమతించండి" group_in_subject: "PMలో మొదటి సమూహం పేరుకు లోబడి ఇమెయిల్‌లో %%{optional_pm} ని సెట్ చేయండి, చూడండి: ప్రామాణిక ఇమెయిల్‌ల కోసం సబ్జెక్ట్ ఆకృతిని అనుకూలీకరించండి" anonymous_account_duration_minutes: "అనామకతను రక్షించడానికి ప్రతి వినియోగదారు కోసం ప్రతి N నిమిషాలకు కొత్త అనామక ఖాతాను సృష్టించండి. ఉదాహరణ: 600కి సెట్ చేస్తే, చివరి పోస్ట్ నుండి 600 నిమిషాలు గడిచిన వెంటనే మరియు వినియోగదారు anonకి మారిన వెంటనే, కొత్త అనామక ఖాతా సృష్టించబడుతుంది." - hide_user_profiles_from_public: "అనామక వినియోగదారుల కోసం వినియోగదారు కార్డ్‌లు, వినియోగదారు ప్రొఫైల్‌లు మరియు వినియోగదారు డైరెక్టరీని నిలిపివేయండి." allow_users_to_hide_profile: "వారి ప్రొఫైల్ మరియు ఉనికిని దాచడానికి సభ్యులను అనుమతించండి" hide_user_activity_tab: "అడ్మిన్ మరియు స్వీయ మినహా వినియోగదారు ప్రొఫైల్‌లలో కార్యాచరణ ట్యాబ్‌ను దాచండి." allow_featured_topic_on_user_profiles: "వినియోగదారులు వారి వినియోగదారు కార్డ్ మరియు ప్రొఫైల్‌లో ఒక అంశానికి లింక్‌ను ఫీచర్ చేయడానికి అనుమతించండి." @@ -1647,10 +1646,6 @@ te: reply_by_email_disabled: "ఈ సెట్టింగ్‌ని ఎనేబుల్ చేసే ముందు మీరు ముందుగా 'ఇమెయిల్ ద్వారా ప్రత్యుత్తరం' ఎనేబుల్ చేయాలి." discourse_connect_url_is_empty: "మీరు ఈ సెట్టింగ్‌ని ప్రారంభించే ముందు తప్పనిసరిగా 'డిస్కోర్స్ కనెక్ట్ url'ని సెట్ చేయాలి." enable_local_logins_disabled: "ఈ సెట్టింగ్‌ని ప్రారంభించే ముందు మీరు ముందుగా 'స్థానిక లాగిన్‌లను ప్రారంభించు'ని తప్పనిసరిగా ప్రారంభించాలి." - min_username_length_exists: "మీరు చిన్న వినియోగదారు పేరు (%{username}) కంటే కనీస వినియోగదారు పేరు పొడవును సెట్ చేయలేరు." - min_username_length_range: "మీరు కనిష్టాన్ని గరిష్టం కంటే ఎక్కువగా సెట్ చేయలేరు." - max_username_length_exists: "మీరు పొడవైన వినియోగదారు పేరు (%{username}) క్రింద గరిష్ట వినియోగదారు పేరు పొడవును సెట్ చేయలేరు." - max_username_length_range: "మీరు గరిష్టాన్ని కనిష్ట స్థాయికి దిగువన సెట్ చేయలేరు." invalid_hex_value: "రంగు విలువలు 6-అంకెల హెక్సాడెసిమల్ కోడ్‌లుగా ఉండాలి." empty_selectable_avatars: "ఈ సెట్టింగ్‌ని ప్రారంభించే ముందు మీరు తప్పనిసరిగా కనీసం రెండు ఎంచుకోదగిన అవతార్‌లను అప్‌లోడ్ చేయాలి." category_search_priority: @@ -2414,8 +2409,6 @@ te: safe_mode: title: "సురక్షిత మోడ్‌ను నమోదు చేయండి" enter: "సేఫ్ మోడ్‌ని నమోదు చేయండి" - dev_mode: - enter: "Enter" wizard: title: "డిస్కర్స్ సెటప్" step: @@ -2558,16 +2551,12 @@ te: title: "అవును" approve_and_unhide: title: "అవును" - no_action_post: - title: "చర్య తీసుకోలేదు" delete_post: title: "పోస్ట్ తొలగించండి" hide_post: title: "పోస్ట్ను దాచండి" restore_post: title: "పోస్ట్‌ని పునరుద్ధరించండి" - no_action_user: - title: "చర్య తీసుకోలేదు" silence_user: title: "సభ్యుని నిశ్శబ్దం చేయండి" suspend_user: diff --git a/config/locales/server.th.yml b/config/locales/server.th.yml index da91b4f26bb95..12bb32c70027e 100644 --- a/config/locales/server.th.yml +++ b/config/locales/server.th.yml @@ -195,6 +195,7 @@ th: user_api_key: deny: "ยกเลิก" read: "อ่าน" + copied: "คัดลอกแล้ว!" otp_confirmation: confirm_title: ดำเนินการต่อไปยัง %{site_name} logging_in_as: กำลังเข้าสู่ระบบด้วย %{username} @@ -215,6 +216,9 @@ th: flags_status: labels: flag: ชนิด + visits: + xaxis: + mobile: "โทรศัพท์" consolidated_page_views: labels: post: โพส @@ -491,8 +495,6 @@ th: button: "ลงทะเบียน" resend_email: title: "ส่งอีเมลยืนยันตัวตนอีกครั้ง" - dev_mode: - enter: "เอ็นเทอร์" wizard: step: setup: diff --git a/config/locales/server.tr_TR.yml b/config/locales/server.tr_TR.yml index 86d84a2443c3f..0add3aa88b1b7 100644 --- a/config/locales/server.tr_TR.yml +++ b/config/locales/server.tr_TR.yml @@ -60,8 +60,8 @@ tr_TR: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "%{username} tarafından #%{post_number}" - too_many_urls: "Tek bir talepte 10’dan fazla URL’yi satır içinde onebox olarak ekleyemezsiniz." - concurrency_not_allowed: "Eş zamanlı satır içi onebox yapma taleplerine izin verilmez. Lütfen her seferinde bir talep gönderin." + too_many_urls: "Tek bir istekte 10'dan fazla URL'yi satır içi tek kutulara dönüştüremezsiniz." + concurrency_not_allowed: "URL'leri satır içi tek kutulara dönüştürmek için eşzamanlı istekler kabul edilmez. Lütfen her seferinde tek bir istek gönderin." components: enabled_filter: "Etkin" disabled_filter: "Devre Dışı" @@ -144,6 +144,8 @@ tr_TR: invalid_type: "%{type} geçerli bir tür değil" humanize_not_valid_string_value: "JSON İşaretçisindeki \"%{property_json_pointer}\" özelliği bir dize olmalıdır." not_valid_string_value: "bir dize olmalıdır" + humanize_not_valid_datetime_value: "JSON Pointer '%{property_json_pointer}' konumundaki özellik geçerli bir tarih ve saat olmalıdır." + not_valid_datetime_value: "geçerli bir tarih ve saat olmalıdır" humanize_not_valid_integer_value: "JSON İşaretçisindeki \"%{property_json_pointer}\" özelliği bir tam sayı olmalıdır." not_valid_integer_value: "bir tam sayı olmalıdır" humanize_not_valid_float_value: "JSON İşaretçisindeki \"%{property_json_pointer}\" özelliği kayan noktalı sayı olmalıdır." @@ -258,6 +260,7 @@ tr_TR: errors: &errors format: ! "%{attribute} %{message}" format_with_full_message: "%{attribute}: %{message}" + diff_too_complex: "Fark çok karmaşık olduğundan güvenli bir şekilde hesaplanamıyor. Lütfen daha küçük düzenlemeler yapmayı deneyin." messages: invalid_locale: "%{invalid_locale} geçerli bir yerel ayar değil" too_long_validation: @@ -277,6 +280,7 @@ tr_TR: greater_than: '%{count} değerinden büyük olmalı' greater_than_or_equal_to: '%{count} değerine eşit veya bu değerden büyük olmalı' has_already_been_used: "zaten kullanılmış" + in: '%{count} içinde olmalıdır' inclusion: listeye dahil edilmemiş invalid: geçersiz is_invalid: "belirsiz görünüyor, bu tam bir cümle mi?" @@ -344,7 +348,7 @@ tr_TR: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Kullanıcı aracıları, geçerli kullanıcıların yanlışlıkla sınırlandırılmasını önlemek için en az 3 karakter uzunluğunda olmalıdır." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Ayara şu değerlerden herhangi birini ekleyemezsiniz: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "\"Besteci medya optimizasyonu görüntüsü etkin\" etkinleştirilmişse şerit görüntü meta verilerini devre dışı bırakamazsınız. Şerit görüntü meta verilerini devre dışı bırakmadan önce \"besteci medya optimizasyonu görüntüsü etkin\" seçeneğini devre dışı bırakın." - x_summary_large_image_no_svg: "twitter:image meta verileri için kullanılan Twitter özet görüntüleri .svg görüntüsü olamaz." + x_summary_large_image_no_svg: "Twitter için kullanılan X özet görüntüsü: görüntü meta verisi .svg görüntüsü olamaz." tl0_and_anonymous_flag: "Anonim kullanıcılar için ya \"site contact email\" ya da \"email address to report illegal content\" sağlanmalıdır." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Bu ayar öncelikle \"anonim moduna izin ver\" ayarının etkinleştirilmesini gerektiriyor." conflicting_google_user_id: 'Bu hesabın Google Hesap Kimliği değişti; güvenlik nedeniyle personelin müdahalesi gerekiyor. Lütfen personelle iletişime geçin ve onları
https://meta.discourse.org/t/76575adresine yönlendirin.' @@ -394,6 +398,7 @@ tr_TR: redemption_count_less_than_max: "%{max_redemptions_allowed} değerinden küçük olmalı." email_xor_domain: "E-posta ve alan adı alanlarına aynı anda izin verilmez" existing_user_success: "Davet başarıyla kullanıldı" + email_invites_disabled: "Davet e-postaları gönderme özelliği devre dışıdır" bulk_invite: file_should_be_csv: "Yüklenen dosya csv formatında olmalı." max_rows: "İlk %{max_bulk_invites} davet gönderildi. Dosyayı daha küçük parçalara bölmeyi deneyin." @@ -591,11 +596,13 @@ tr_TR: one: "Tek seferde en fazla %{count} kullanıcı eklenebilir" other: "Tek seferde en fazla %{count} kullanıcı eklenebilir" usernames_or_emails_required: "Kullanıcı adları veya e-postalar mevcut olmalıdır" + cannot_add_emails: "Bu gruba üye eklemek için yalnızca kullanıcı adları kullanılabilir. Eposta ile davet etmek için Davet et düğmesini kullanın." counting_too_many_email_domains: one: "Aynı anda en fazla %{count} e-posta alan adı sayılabilir" other: "Aynı anda en fazla %{count} e-posta alan adı sayılabilir" no_invites_with_discourse_connect: "DiscourseConnect etkinleştirildiğinde yalnızca kayıtlı kullanıcıları davet edebilirsiniz" no_invites_without_local_logins: "Yerel girişler devre dışı bırakıldığında yalnızca kayıtlı kullanıcıları davet edebilirsiniz" + update_existing_users_required: "Bu değişiklik %{count} mevcut grup üyesini etkiler. Yeni bildirim varsayılanlarını mevcut üyelere uygulayıp uygulamayacağınızı belirtmek için 'update_existing_users' parametresini (true veya false) belirtmeniz gerekir." default_names: everyone: "herkes" admins: "yöneticiler" @@ -793,7 +800,11 @@ tr_TR: invalid_email_in: "\"%{email}\" geçerli bir e-posta adresi değil." email_already_used_in_group: "\"%{email}\" zaten \"%{group_name}\" grubu tarafından kullanılıyor." email_already_used_in_category: "\"%{email}\" zaten \"%{category_name}\" kategorisi tarafından kullanılıyor." + groups_required_for_mode: "%{setting} için en az bir grup seçmelisiniz." description_incomplete: "Kategori açıklama yazısında en az bir paragraf bulunmalıdır." + description_too_long: + one: "Açıklama çok uzun (maksimum %{count} karakter)." + other: "Açıklama çok uzun (maksimum %{count} karakter)." permission_conflict: "Bir alt kategoriye erişmesine izin verilen herhangi bir grubun üst kategoriye erişmesine de izin verilmelidir. Aşağıdaki grupların alt kategorilerden birine erişimi bulunur, ancak üst kategoriye erişimi yoktur: %{group_names}." disallowed_topic_tags: "Bu konu, bu kategori tarafından izin verilmeyen etiketlere sahip: \"%{tags}\"" disallowed_tags_generic: "Bu konu izin verilmeyen etiketlere sahip." @@ -808,6 +819,12 @@ tr_TR: other: "Bu kategori silinemiyor çünkü %{count} konusu var. En eski konu: %{topic_link}." topic_exists_no_oldest: "Konu sayısı %{count} olduğu için bu kategori silinemiyor." uncategorized_description: "Kategoriye ihtiyaç duymayan veya mevcut başka bir kategoriye uymayan konular." + category_types: + not_available: "'%{type_name}' kategori türü mevcut değil" + discussion: + name: "Tartışma" + title: "tartışma" + description: "Konuşma için gerekli tüm unsurları içeren standart bir kategori." trust_levels: admin: "Yönetici" staff: "Personel" @@ -1033,6 +1050,7 @@ tr_TR: too_many_drafts: title: "Çok fazla taslak" description: "İzin verilen maksimum taslak sayısına ulaştınız. Lütfen [taslaklarınızdan] (%{base_url}/my/activity/drafts) bazılarını silin ve tekrar deneyin." + bulk_destroy_limit: "Bir seferde en fazla %{limit} taslak silebilirsiniz." draft_backup: pm_title: "Açık konulardaki Taslakları yedekle" pm_body: "Yedek taslak içeren konu" @@ -1046,6 +1064,8 @@ tr_TR: connection_error: "Sunucuya bağlanırken bir sorun oluştu, sunucu adını ve bağlantı noktasını kontrol edip tekrar deneyin." timeout_error: "Sunucuya bağlantı zaman aşımına uğradı, sunucu adını ve bağlantı noktasını kontrol edin ve tekrar deneyin." unhandled_error: "E-posta ayarları test edilirken işlenmemiş hata. %{message}" + invalid_host: "Belirtilen sunucu, izin verilmeyen bir IP adresine yönlendiriliyor." + host_resolve_failed: "Belirtilen sunucu çözümlenemedi." webauthn: validation: invalid_type_error: "Sağlanan webauthn türü geçersizdi. Geçerli türler webauthn.get ve webauthn.create'tir." @@ -1130,12 +1150,20 @@ tr_TR: weekly: "haftalık" every_month: "her ay" every_six_months: "altı ayda bir" + calendar_subscriptions: + application_name: "Takvim Abonelikleri" user_api_key: + title: '"%{application_name}" için yetkilendirme' authorize: "Yetkilendir" deny: "İptal et" read: "oku" read_write: "oku/yaz" + logged_in_as: "olarak oturum açıldı" + permissions_header: 'Bu, "%{application_name}"in şunları yapmasına olanak tanıyacaktır:' + redirect_warning: "Yetkilendirme sizi şu adrese yönlendirecektir:" instructions: '"%{application_name}" ile kullanmanız için yeni bir kullanıcı API anahtarı oluşturduk, lütfen aşağıdaki anahtarı uygulamanıza yapıştırın:' + copy_key: "Anahtarı Kopyala" + copied: "Kopyalandı!" otp_description: '"%{application_name}" uygulamasının bu siteye erişmesine izin vermek ister misiniz?' otp_confirmation: confirm_title: '%{site_name} adresine devam edin' @@ -1214,9 +1242,11 @@ tr_TR: description: "Bayrak türü, gönderi sahibi, bayrak ekleyen kişi ve çözüme kadar geçen süre dahil olmak üzere bayrakların durumlarının listesi." visits: title: "Kullanıcı Ziyaretleri" - xaxis: "Gün" + xaxis: + desktop: "Masaüstü" + mobile: "Mobil" yaxis: "Ziyaret sayısı" - description: "Oturum açmış kullanıcı ziyaretlerinin sayısı." + description: "Cihaz türüne göre oturum açmış kullanıcı ziyaret sayısı." signups: title: "Kayıtlar" xaxis: "Gün" @@ -1259,6 +1289,8 @@ tr_TR: yaxis: "Gün" description: "Normal API anahtarları ve kullanıcı API anahtarları için API istekleri." consolidated_page_views_browser_detection: + title: "Tarayıcı Algılama ile Birleştirilmiş Sayfa Görüntülemeleri (Önerilen)" + title_legacy: "Tarayıcı Algılama ile Birleştirilmiş Sayfa Görüntülemeleri (Önerilen)" xaxis: page_view_anon_browser: "Anonim Tarayıcı" page_view_logged_in_browser: "Giriş Yapılmış Tarayıcı" @@ -1281,7 +1313,7 @@ tr_TR: title: "Günlük Aktif Kullanıcı/Aylık Aktif Kullanıcı" xaxis: "Gün" yaxis: "Günlük Aktif Kullanıcı/Aylık Aktif Kullanıcı" - description: "Son gün giriş yapan üye sayısı, son ay giriş yapan üye sayısına bölündüğünde topluluk \"yapışkanlığını\" gösteren bir % elde edilir. Hedefiniz >%20 olsun." + description: "Son gün geri dönen aylık aktif üyelerin oranı. Bu yüzde, kullanıcıların ne kadar düzenli olarak geri döndüklerini gösterir; topluluğun \"bağlılığı\" olarak da adlandırılır. Hedef > %20 olmalıdır." daily_engaged_users: title: "Günlük Etkileşimli Kullanıcılar" xaxis: "Gün" @@ -1566,11 +1598,15 @@ tr_TR: labels: provider: Giriş sağlayıcısı no_accounts: "İlişkili hesap yok" + discourse_connect: "Discourse Connect üzerinden SSO" + no_sso_accounts: "SSO kaydı olmayan hesaplar" + total_users: "Toplam aktif kullanıcı hesabı" description: "Giriş sağlayıcısına göre gruplandırılmış ilişkili hesap sayısını gösterin. Yalnızca sosyal giriş yöntemleri etkinleştirildiğinde geçerlidir." dashboard: problem: twitter_login: 'Twitter ile giriş şu anda çalışmıyor gibi görünüyor. Site Ayarları bölümünden giriş bilgilerini kontrol edin.' group_email_credentials: '%{group_full_name}grubu için e-posta giriş bilgileriyle ilgili bir sorun vardı. Bu sorun giderilene kadar grup gelen kutusundan hiçbir e-posta gönderilmeyecek. %{error}' + upcoming_change_stable_opted_out: 'Siteniz "%{upcoming_change}" yaklaşan değişiklikten vazgeçmiştir. Bu değişiklik artık "Kararlı" durumuna ulaşmıştır ve yakında kaldırılabilir veya kalıcı hale getirilebilir. Bu değişiklikle ilgili ayrıntıları incelemek için yaklaşan değişiklikler sayfasını ziyaret edin.' rails_env: "Sunucunuz %{env} modunda çalışıyor." host_names: "config/database.yml dosyanız varsayılan localhost sunucu adını kullanıyor. Sitenizin sunucu adını kullanmak için bunu güncelleyin." sidekiq: 'Sidekiq çalışmıyor. E-posta göndermek gibi birçok görev Sidekiq tarafından eş zamansız olarak yürütülür. Lütfen en az bir Sidekiq işleminin çalıştığından emin olun. Sidekiq hakkında buradan bilgi edinin.' @@ -1591,6 +1627,7 @@ tr_TR: one: "E-posta yoklaması son 24 saat içinde bir hata oluşturdu. Daha fazla ayrıntı için günlüklere bakın." other: "E-posta yoklaması son 24 saat içinde %{count} hata oluşturdu. Daha fazla ayrıntı için günlüklere bakın." missing_mailgun_api_key: "Sunucu Mailgun aracılığıyla e-posta gönderecek şekilde yapılandırılmış ancak web kancası mesajlarını doğrulamak için kullanılan bir API anahtarı sağlamadınız." + qq_mail_smtp: "SMTP sunucunuz (%{smtp_address}) Discourse ile yinelenen e-postalara neden olduğu bilinmektedir. QQ Mail doğru onayları geri göndermediğinden, Discourse zaten başarılı olan gönderimleri yeniden dener. Önerilen alternatiflere bakın." bad_favicon_url: "Favicon yüklenemiyor. Site Ayarları bölümünden favicon ayarınızı kontrol edin." poll_pop3_timeout: "POP3 sunucusuna bağlantı zaman aşımına uğruyor. Gelen e-posta alınamadı. Lütfen POP3 ayarlarınızı ve hizmet sağlayıcınızı kontrol edin." poll_pop3_auth_error: "POP3 sunucusuna bağlantı bir kimlik doğrulama hatasıyla başarısız oluyor. Lütfen POP3 ayarlarınızı kontrol edin." @@ -1602,6 +1639,7 @@ tr_TR: category_style_deprecated: "Discourse'unuz şu anda Discourse 3.2'nin son beta sürümünden önce kaldırılacak olan kullanımdan kaldırılmış bir kategori stili kullanıyor. Seçtiğiniz kategori stilini nasıl koruyacağınıza ilişkin talimatlar için lütfen Tek Kategori Stili Site Ayarına Geçme bölümüne bakın." maxmind_db_configuration: 'Sunucu, ters IP aramaları için MaxMind veri tabanlarını kullanacak şekilde yapılandırıldı ancak geçerli bir MaxMind hesap kimliği yapılandırılmadı, bu da MaxMind veri tabanlarının gelecekte indirilememesine neden olabilir. Daha fazla bilgi için bu kılavuza bakın.' admin_sidebar_deprecation: "Eski yönetici düzeni, yeni kenar çubuğu düzeni lehine kullanımdan kaldırıldı ve bir sonraki sürümde kaldırılacak. Bundan önce katılmak için şimdi yeni kenar çubuğu düzenini yapılandırabilirsiniz." + starttls_disabled: "Giden e-posta yapılandırmasında STARTTLS devre dışı bırakılmıştır. Bu neredeyse hiçbir zaman gerekli değildir. Ortamınızdan

DISCOURSE_SMTP_ENABLE_START_TLS=false
öğesini kaldırmayı düşünün. Daha fazla ayrıntı için lütfen bu konuya bakın." back_from_logster_text: "Siteye geri dön" site_settings: allow_bulk_invite: "Bir CSV dosyası yükleyerek toplu davetlere izin verin" @@ -1646,6 +1684,7 @@ tr_TR: allow_duplicate_topic_titles_category: "Kategori farklıysa aynı, yinelenen başlıklara sahip konulara izin verin. allow_duplicate_topic_titles devre dışı bırakılmalıdır." unique_posts_mins: "Bir kullanıcının aynı içeriğe sahip bir gönderiyi tekrar yapabilmesi için kaç dakika geçmesi gerektiği" educate_until_posts: "Kullanıcı ilk (n) yeni gönderisini yazmaya başladığında, oluşturucuda açılır yeni kullanıcı eğitim panelini gösterin." + title: "Bu sitenin adı. Anonim kullanıcılar dahil tüm ziyaretçiler tarafından görülebilir. Bu başlığı değiştirdiğinizde, PWA kullanıcılarına uygulamayı güncellemeleri veya kaldırmaları istenen bir uyarı gönderilebileceğini unutmayın." site_description: "Bu siteyi bir cümleyle tanımlayın. Anonim kullanıcılar dahil tüm ziyaretçiler tarafından görülebilir." short_site_description: "Birkaç kelimelik kısa açıklama. Anonim kullanıcılar dahil tüm ziyaretçiler tarafından görülebilir." contact_email: "Bu siteden sorumlu kilit kişinin e-posta adresi. Kritik bildirimler için kullanılır ve ayrıca acil konular için /about adresinde gösterilir. Herkese açık sitelerdeki anonim kullanıcılara görünür." @@ -1653,6 +1692,7 @@ tr_TR: crawl_images: "Doğru genişlik ve yükseklik boyutlarını eklemek için uzak URL'lerden görüntüleri alın." download_remote_images_to_local: "Uzak (hotlink'li) görüntüleri indirerek yerel görüntülere dönüştürün; Bu işlem, görüntüler gelecekte uzak siteden kaldırılsa bile içeriği korur." download_remote_images_threshold: "Uzak görüntüleri yerel olarak indirmek için gereken minimum disk alanı (yüzde olarak)" + disabled_image_download_domains: "Bu alan adlarından uzaktaki görüntüler asla indirilmeyecektir." block_hotlinked_media: "Kullanıcıların gönderilerine uzak (hotlink'li) medya eklemesini engelleyin. \"download_remote_images_to_local\" aracılığıyla indirilmeyen uzak medya, bir yer tutucu bağlantıyla değiştirilir." block_hotlinked_media_exceptions: "block_hotlinked_media ayarından muaf olan temel URL'lerin bir listesi. Protokolü dahil edin (örn. https://example.com)." editing_grace_period: "Gönderdikten sonra (n) saniye boyunca düzenleme, gönderi geçmişinde yeni bir sürüm oluşturmaz." @@ -1688,9 +1728,12 @@ tr_TR: max_oneboxes_per_post: "Tek bir gönderiye dâhil edilebilecek maksimum onebox sayısını ayarlayın. Onebox'lar gönderi içindeki bağlantılı içeriğin ön izlemesini sağlar." facebook_app_access_token: "Facebook uygulama kimliğinizden ve gizli dizinizden oluşturulan bir belirteç. Instagram onebox'ları oluşturmak için kullanılır." github_onebox_access_tokens: "Bir GitHub kuruluşunun veya kullanıcısının, özel depolar, taahhütler, çekme istekleri, sorunlar ve dosya içerikleri için GitHub onebox'ları oluşturma amacıyla kullanılan bir GitHub erişim belirteciyle eşleştirilmesi. Bu olmadan, yalnızca genel GitHub URL'leri onebox'lanır." + reddit_onebox_client_id: "Kimlik doğrulaması yapılmış Reddit onebox'lar için kullanılan Reddit API OAuth istemci kimliği. Kimlik bilgilerini almak için reddit.com/prefs/apps adresinde 'script' türünde bir uygulama oluşturun." + reddit_onebox_client_secret: "Reddit API OAuth istemci gizli anahtarı, kimliği doğrulanmış Reddit onebox'lar için kullanılır. reddit.com/prefs/apps adresinde oluşturulan 'script' türü uygulama altında bulunur." logo: "Sitenizin sol üst köşesindeki logo görüntüsü. Yüksekliği 120 ve en boy oranı 3:1'den büyük olan geniş dikdörtgen bir görüntü kullanın. Boş bırakılırsa site başlığı metni gösterilecektir." logo_small: "Sitenizin sol üst köşesinde, aşağı kaydırırken görülen küçük logo görüntüsü. 120 × 120 boyutlarında kare bir görüntü kullanın. Boş bırakılırsa bir ana sayfa glifi gösterilecektir." digest_logo: "Sitenizin e-posta özetinin üst kısmında kullanılan alternatif logo görüntüsü. Geniş bir dikdörtgen görüntü kullanın. SVG görüntüsü kullanmayın. Boş bırakılırsa \"logo\" ayarındaki görüntü kullanılır." + mobile_logo: "Sitenizin mobil sürümünde kullanılan logo. Başlığı kalabalıklaştırmamak için kare bir simge kullanmanızı öneririz, ancak yüksekliği 120 ve en boy oranı 3:1'den büyük olan geniş bir dikdörtgen resim de kullanabilirsiniz. Boş bırakılırsa, logo ayarındaki resim kullanılır." logo_dark: "\"Logo\" site ayarı için koyu şema alternatifi." logo_small_dark: "\"Küçük logo\" site ayarı için koyu şema alternatifi." mobile_logo_dark: "\"Mobil logo\" site ayarı için koyu şema alternatifi." @@ -1698,11 +1741,15 @@ tr_TR: manifest_icon: "Android'de logo/splash görüntüsü olarak kullanılan görüntü. Otomatik olarak 512 × 512 olarak yeniden boyutlandırılır. Boş bırakılırsa large_icon kullanılır." manifest_screenshots: "Kurulum istemi sayfasında örneğinizin özelliklerini ve işlevselliğini gösteren ekran görüntüleri. Tüm görüntüler yerel yüklemeler olmalı ve aynı boyutlarda olmalıdır." favicon: "Siteniz için bir favicon, bkz. https://en.wikipedia.org/wiki/Favicon. CDN üzerinden düzgün çalışması için png olmalıdır. 32x32 olarak yeniden boyutlandırılır. Boş bırakılırsa large_icon kullanılır." + apple_touch_icon: "Apple dokunmatik cihazlar için kullanılan simge. Şeffaf arka plan kullanılması önerilmez. Otomatik olarak 180x180 boyutuna yeniden boyutlandırılır. Boş bırakılırsa, large_icon kullanılır." opengraph_image: "Varsayılan opengraph görüntüsü, sayfada başka uygun görüntü olmadığında kullanılır. Boş bırakılırsa large_icon kullanılır" x_summary_large_image: "Twitter kartı \"özet büyük görüntü\" (en az 280 genişliğinde ve en az 150 yüksekliğinde olmalıdır, .svg olamaz). Boş bırakılırsa .svg olmadığı sürece opengraph_image kullanılarak normal kart meta verileri oluşturulur" notification_email: "Tüm temel sistem e-postalarını gönderirken kullanılan kimden: e-posta adresi. Burada belirtilen alan adının, e-postanın ulaşması için SPF, DKIM ve ters PTR kayıtlarının doğru şekilde ayarlanmış olması gerekir." + email_custom_headers: "Özel e-posta başlıklarının listesi" email_subject: "Standart e-postalar için özelleştirilebilir konu formatı. Bkz. https://meta.discourse.org/t/customizing-specific-system-email-templates/88323" detailed_404: "Kullanıcılara belirli bir konuya neden erişemedikleri hakkında daha fazla ayrıntı sağlar. Not: Bu daha az güvenlidir çünkü kullanıcılar bir URL'nin geçerli bir konuya bağlanıp bağlanmadığını bilir." + enforce_second_factor: "Kullanıcıların Discourse kullanıcı arayüzüne erişmeden önce iki faktörlü kimlik doğrulamayı (2FA) etkinleştirmelerini zorunlu kılın. Bu ayar, API veya 'DiscourseConnect sağlayıcı' kimlik doğrulamasını etkilemez. enforce_second_factor_on_external_auth etkinleştirilirse, kullanıcılar 2FA'yı kurduktan sonra harici kimlik doğrulama sağlayıcılarıyla oturum açamazlar." + enforce_second_factor_on_external_auth: "Kullanıcıların her zaman iki faktörlü kimlik doğrulama (2FA) kullanmasını zorunlu kılın. Etkinleştirildiğinde, bu özellik, 2FA'yı etkinleştirmiş olan kullanıcıların sosyal medya hesapları gibi harici kimlik doğrulama yöntemleriyle oturum açmasını engeller. Devre dışı bırakıldığında, kullanıcılar yalnızca kullanıcı adı ve şifre ile oturum açarken 2FA'yı onaylamaları gerekir. Ayrıca `enforce_second_factor` ayarına da bakın." force_https: "Sitenizi yalnızca HTTPS kullanmaya zorlayın. UYARI: HTTPS'nin tamamen kurulduğunu ve kesinlikle her yerde çalıştığını doğrulayana kadar bunu etkinleştirmeyin! CDN'nizi, tüm sosyal girişlerinizi ve tüm harici logoları / bağımlılıkları da HTTPS uyumlu olduklarından emin olmak için kontrol ettiniz mi?" summary_score_threshold: "Bir gönderinin \"Bu Konuyu Özetleyin\" bölümüne dahil edilmesi için gereken minimum puan" summary_posts_required: "\"Bu Konuyu Özetle\" etkinleştirilmeden önce bir konudaki minimum gönderi sayısı. Bu ayarda yapılan değişiklikler bir hafta içinde geriye dönük olarak uygulanır." @@ -1760,8 +1807,12 @@ tr_TR: ga_universal_domain_name: "Google Universal Analytics alan adı, ör.: mysite.com; bkz. https://google.com/analytics" ga_universal_auto_link_domains: "Google Universal Analytics çapraz alan izleme özelliğini etkinleştirin. Bu alan adlarına giden bağlantılara müşteri kimliği eklenecektir. Bkz. Google'ın Alan Adları Arası İzleme kılavuzu." gtm_container_id: "Google Etiket Yöneticisi kapsayıcı kimliği. ör: GTM-ABCD12E.
Not: İçerik Güvenliği Politikası (CSP) etkinleştirildiğinde GTM'yi kullanmak için meta ile ilgili belgelere bakın: Google Etiket Yöneticisi komut dosyalarında nonces kullanın." + google_site_verification_token: Google arama konsolu doğrulama jetonu. HTML başlığında meta etiketi olarak dahil edilecektir. enable_escaped_fragments: "Herhangi bir web veri gezgini algılanmazsa Google'ın Ajax Veri Gezgini API'sine geri dönün. Bkz. https://developers.google.com/webmasters/ajax-crawling/docs/learn-more" + moderators_manage_categories: "Moderatörlerin kategori oluşturmasına ve yönetmesine izin ver" + moderators_manage_groups: "Moderatörlerin gruplar oluşturmasına ve yönetmesine izin ver" moderators_change_post_ownership: "Moderatörlerin gönderi sahipliğini değiştirmesine izin verin" + change_post_ownership_allowed_groups: "Bu gruplardaki kullanıcıların gönderi sahipliğini değiştirmesine izin ver" cors_origins: "Kökenler arası talepler (CORS) için izin verilen kökenler. Her köken http:// veya https:// içermelidir. CORS'u etkinleştirmek için DISCOURSE_ENABLE_CORS env değişkeni true olarak ayarlanmalıdır." use_admin_ip_allowlist: "Yöneticiler yalnızca Taranan IP'ler listesinde tanımlanan bir IP adresindelerse oturum açabilirler (Yönetici > Günlükler > Taranan IP'ler)." blocked_ip_blocks: "Discourse tarafından asla taranmaması gereken özel IP bloklarının bir listesi" @@ -1772,9 +1823,9 @@ tr_TR: blocked_crawler_user_agents: "Siteye erişmesine izin verilmemesi gereken web veri gezginlerini tanımlayan kullanıcı aracısı dizesinde büyük/küçük harfe duyarlı olmayan benzersiz kelime. İzin verilenler listesi tanımlanmışsa geçerli değildir." slow_down_crawler_user_agents: '"Tarayıcı hızını yavaşlat" ayarında yapılandırıldığı gibi hız sınırlandırılması gereken web veri gezginlerinin kullanıcı aracıları. Her değer en az 3 karakter uzunluğunda olmalıdır.' slow_down_crawler_rate: "slow_down_crawler_user_agents belirtilirse bu oran tüm veri gezginleri için geçerli olur (istekler arasındaki saniye gecikme sayısı)" + llms_txt: "LLM tarayıcıları için /llms.txt adresinde sunulacak bir metin dosyası yükleyin. Daha fazla bilgi için llmstxt.org adresini ziyaret edin." content_security_policy: "İçerik Güvenliği Politikasını (CSP) etkinleştirin. CSP, Siteler Arası Komut Dosyası Çalıştırma (XSS) ve veri enjeksiyonu da dâhil olmak üzere belirli saldırı türlerini önlemeye yardımcı olan ek bir güvenlik katmanıdır." content_security_policy_report_only: "Sadece-Raporla-İçerik-Güvenlik-Politikasını (CSP) Etkinleştir" - content_security_policy_collect_reports: "CSP ihlal raporu toplamayı /csp_reports adresinde etkinleştir" content_security_policy_frame_ancestors: "CSP aracılığıyla bu siteyi iframe'lere kimlerin yerleştirebileceğini kısıtlayın. Gömme bölümünde izin verilen sunucuları kontrol edin" content_security_policy_script_src: "İzin verilen ek komut dosyası kaynakları. Geçerli sunucu ve İTA varsayılan olarak dâhil edilir. İçerik Güvenliği İlkesi ile XSS Saldırılarını Azaltma. (CSP). Diğer sunucu kaynakları, strict-dynamic etkinleştirildiği için yok sayılır." invalidate_inactive_admin_email_after_days: "Bu kadar gün içinde siteyi ziyaret etmemiş olan yönetici hesaplarının oturum açmadan önce e-posta adreslerini yeniden doğrulamaları gerekir. Devre dışı bırakmak için 0 olarak ayarlayın." @@ -1802,6 +1853,7 @@ tr_TR: top_page_default_timeframe: "Anonim kullanıcılar için varsayılan üst sayfa zaman aralığı (oturum açmış kullanıcılar için son ziyaretlerine göre otomatik olarak ayarlanır)." moderators_view_emails: "Moderatörlerin kullanıcı e-posta adreslerini görüntülemelerine izin verin." moderators_view_ips: "Moderatörlerin kullanıcı IP adreslerini görüntülemelerine izin verin." + moderators_change_trust_levels: "Moderatörlerin kullanıcı güven düzeylerini değiştirmesine izin ver." prioritize_username_in_ux: "Kullanıcı sayfasında, kullanıcı kartında ve gönderilerde önce kullanıcı adını göster (devre dışı bırakıldığında önce ad gösterilir)" enable_rich_text_paste: "Besteciye metin yapıştırırken otomatik HTML'den Markdown'a dönüştürmeyi etkinleştirin." send_old_credential_reminder_days: "Günler sonra eski giriş bilgilerini hatırlatın" @@ -1812,6 +1864,8 @@ tr_TR: whispers_allowed_groups: "Belirli grupların üyeleri için konular dahilinde özel iletişime izin verin." hidden_post_visible_groups: "Bu grupların üyelerinin gizli gönderileri görmesine izin verin. Personel olan kullanıcılar, gizli gönderileri her zaman görüntüleyebilir." allow_index_in_robots_txt: "Robots.txt dosyasında bu sitenin web arama motorları tarafından dizine eklenmesine izin verildiğini belirtin. Robots.txt dosyanızı buradan geçersiz kılabilirsiniz. UYARI: Yanlış yapılandırılmış kurallar sitenizde beklendiği gibi gezinilmesini engelleyebilir." + blocked_email_domains: "Kullanıcıların hesap açmasına izin verilmeyen e-posta alan adlarının listesi. Alt alan adları, belirtilen alan adları için otomatik olarak işlenir. Joker karakterler * ve ? desteklenmez. Örnek: mailinator.com" + allowed_email_domains: "Kullanıcıların hesaplarını KAYDETMESİ GEREKEN e-posta alan adlarının listesi. Alt alan adları, belirtilen alan adları için otomatik olarak işlenir. Joker karakterler * ve ? desteklenmez. UYARI: Listede yer almayan e-posta alan adlarına sahip kullanıcılar kabul edilmeyecektir!" normalize_emails: "Normalleştirilmiş e-postanın benzersiz olup olmadığını kontrol edin. Normalleştirilmiş e-posta, kullanıcı adındaki tüm noktaları ve + ve @ sembolleri arasındaki her şeyi kaldırır." auto_approve_email_domains: "Bu alan adları listesinden e-posta adresleri olan kullanıcılar otomatik olarak onaylanır. Belirtilen alan adları için alt alan adları otomatik olarak işlenir. Joker karakter sembolleri olan * ve ? desteklenmez." hide_email_address_taken: "Kayıt sırasında veya şifremi unuttum akışı sırasında kullanıcıları belirli bir e-posta adresiyle bir hesabın var olduğu konusunda bilgilendirmeyin. \"Şifremi unuttum\" talepleri için tam e-postayı gerekli kılın." @@ -1845,6 +1899,7 @@ tr_TR: auth_overrides_email: "Her girişte yerel e-postayı harici site e-postasıyla geçersiz kılar ve yerel değişiklikleri önler. Tüm kimlik doğrulama sağlayıcıları için geçerlidir. (UYARI: yerel e-postaların normalleştirilmesi nedeniyle tutarsızlıklar oluşabilir)" auth_overrides_username: "Her girişte yerel kullanıcı adını harici site kullanıcı adıyla geçersiz kılar ve yerel değişiklikleri önler. Tüm kimlik doğrulama sağlayıcıları için geçerlidir. (UYARI: kullanıcı adı uzunluğu/gerekliliklerindeki farklılıklar nedeniyle tutarsızlıklar oluşabilir)" auth_overrides_name: "Her girişte yerel tam adı harici site tam adıyla geçersiz kılar ve yerel değişiklikleri önler. Tüm kimlik doğrulama sağlayıcıları için geçerlidir." + auth_overrides_avatar: "Her oturum açılışında yerel avatarı harici site avatarıyla geçersiz kılar ve yerel değişiklikleri engeller. Tüm kimlik doğrulama sağlayıcıları için geçerlidir." discourse_connect_overrides_avatar: "DiscourseConnect yükünden gelen değerle kullanıcı avatarını geçersiz kılar. Etkinleştirilirse kullanıcıların Discourse'a avatar yüklemelerine izin verilmez." discourse_connect_overrides_location: "Kullanıcı konumunu DiscourseConnect yükünden gelen değerle geçersiz kılar ve yerel değişiklikleri önler." discourse_connect_overrides_website: "DiscourseConnect yükünden gelen değer ile kullanıcı web sitesini geçersiz kılar ve yerel değişiklikleri önler." @@ -1856,6 +1911,7 @@ tr_TR: enable_local_logins_via_email: "Kullanıcıların kendilerine e-posta yoluyla gönderilecek tek tıklamayla giriş bağlantısını talep etmelerine izin verin." allow_new_registrations: "Yeni kullanıcı kayıtlarına izin verin. Herhangi birinin yeni bir hesap oluşturmasını önlemek için bunun işaretini kaldırın." enable_signup_cta: "Geri dönen anonim kullanıcılara bir hesap için kaydolmalarını isteyen bir bildirim gösterin." + enable_discourse_id: "Kullanıcıların tek bir hesapla birden fazla Discourse sitesine giriş yapabilmelerini sağlayan tek oturum açma hizmeti olan Discourse ID aracılığıyla kimlik doğrulamayı etkinleştirin. Google, Facebook, Apple ve GitHub gibi yaygın sosyal oturum açma sağlayıcıları ek yapılandırma gerektirmeden desteklenir. Daha fazla bilgi için id.discourse.com adresini ziyaret edin." enable_google_oauth2_logins: "Google Oauth2 kimlik doğrulamasını etkinleştirin. Bu, Google'ın şu anda desteklediği kimlik doğrulama yöntemidir. Anahtar ve gizli dizi gerektirir. Bkz. Discourse için Google girişini yapılandırma." google_oauth2_client_id: "Google uygulamanız tarafından sağlanan ve kimlik doğrulama işlemi için kullanılan benzersiz istemci kimliği." google_oauth2_client_secret: "Google uygulamanızın istemci gizli dizisi." @@ -1924,6 +1980,7 @@ tr_TR: invite_link_max_redemptions_limit_users: "Normal kullanıcılar tarafından oluşturulan davet bağlantıları için izin verilen maksimum kullanım sayısı bu değerden fazla olamaz." alert_admins_if_errors_per_minute: "Bir yönetici uyarısını tetiklemek için dakika başına hata sayısı. 0 değeri bu özelliği devre dışı bırakır. NOT: Yeniden başlatma gerektirir." alert_admins_if_errors_per_hour: "Bir yönetici uyarısını tetiklemek için saat başına hata sayısı. 0 değeri bu özelliği devre dışı bırakır. NOT: Yeniden başlatma gerektirir." + categories_topics: '/categories sayfasında gösterilecek konu sayısı. 0 olarak ayarlanırsa, iki sütunu simetrik tutmak için otomatik olarak bir değer ayarlanır. Yalnızca “kategoriler ve en son/en popüler konular” kategori sayfası stilleri için geçerlidir.' suggested_topics: "Bir konunun altında gösterilen önerilen konu sayısı." limit_suggested_to_category: "Önerilen konularda yalnızca geçerli kategorideki konuları gösterin." suggested_topics_max_days_old: "Önerilen konular n günden daha eski olmamalıdır." @@ -1950,6 +2007,7 @@ tr_TR: selectable_avatars_mode: "Kullanıcıların selectable_avatars listesinden bir avatar seçmesine izin verin ve özel avatar yüklemelerini seçilen güven seviyesiyle sınırlayın." selectable_avatars: "Kullanıcıların profil resimlerini seçebilecekleri bir avatar koleksiyonu belirtin. Seçim, kullanıcı profili oluşturma sırasında veya profil avatarı güncellenirken görünür." allow_all_attachments_for_group_messages: "Grup mesajları için tüm e-posta eklerine izin verin." + image_quality: "Sitenize yüklenen görüntülerin kalite düzeyini ayarlayın. Daha düşük kalite, daha küçük dosya boyutları ile sonuçlanır." png_to_jpg_quality: "Dönüştürülen JPG dosyasının kalitesi (1 en düşük kalite, 99 en iyi kalite, devre dışı bırakmak için 100)." recompress_original_jpg_quality: "Yüklenen görüntü dosyalarının kalitesi (1 en düşük kalite, 99 en iyi kalite, devre dışı bırakmak için 100)." image_preview_jpg_quality: "Yeniden boyutlandırılan görüntü dosyalarının kalitesi (1 en düşük kalite, 99 en iyi kalite, devre dışı bırakmak için 100)." @@ -1963,6 +2021,7 @@ tr_TR: video_conversion_enabled: "Yüklenen video dosyaları için video dönüştürmeyi etkinleştirin. Bu, videoların web uyumlu formatlara dönüştürülmesini sağlar." video_conversion_service: "Yüklenen videoların işlenmesi için kullanılacak video dönüştürme hizmeti." mediaconvert_role_arn: "AWS IAM rolü MediaConvert hizmeti için ARN. Video dönüştürme için AWS MediaConvert kullanıldığında gereklidir." + mediaconvert_output_subdirectory: "MediaConvert'in dönüştürülen videoları nihai yükleme konumuna taşınmadan önce geçici olarak yazacağı S3 kovasındaki alt dizin." min_ratio_to_crop: "Uzun görüntüleri kırpmak için kullanılan oran. Genişlik / yükseklik sonucunu girin." simultaneous_uploads: "Besteciye sürüklenip bırakılabilecek maksimum dosya sayısı" default_invitee_trust_level: "Davet edilen kullanıcılar için varsayılan güven seviyesi (0-4)." @@ -2075,9 +2134,12 @@ tr_TR: num_flaggers_to_close_topic: "Bir konuyu müdahale için otomatik olarak duraklatmak üzere gereken minimum benzersiz bayrak ekleyen kişi sayısı" num_hours_to_close_topic: "Müdahale amacıyla bir konuyu duraklatmak için saat sayısı." auto_respond_to_flag_actions: "Bir bayrağı kaldırırken otomatik yanıtı etkinleştirin." + min_first_post_typing_time: "Kullanıcının ilk gönderide yazması gereken minimum süre. Eşik değeri karşılanmazsa, gönderi otomatik olarak onay bekleyen kuyruğa girer. Devre dışı bırakmak için 0 olarak ayarlayın (önerilmez)." + fast_typing_threshold: "Bir kullanıcının ilk gönderisi için yazması gereken minimum süre. Eşik değeri karşılanmazsa, gönderi otomatik olarak inceleme kuyruğuna girer. Düşük değer 1 saniye, standart değer 3 saniye, yüksek değer 5 saniyedir." auto_silence_fast_typers_on_first_post: "`fast typing threshold`u karşılamayan kullanıcıları otomatik olarak susturun" auto_silence_fast_typers_max_trust_level: "Hızlı yazanları otomatik olarak susturmak için maksimum güven seviyesi" auto_silence_first_post_regex: "Büyük/küçük harfe duyarlı olmayan regex, geçilirse kullanıcının ilk gönderisinin susturulmasına ve onay kuyruğuna gönderilmesine neden olur. Örnek: raging|a[bc]a , raging veya aba veya aca içeren tüm gönderilerin ilk önce susturulmasına neden olur. Sadece ilk gönderi için geçerlidir. DEVRE DIŞI BIRAKILDI: Bunun yerine İzlenen Kelimeleri Sessize Al'ı kullanın." + moderator_guide_topic: "Topluluğunuzu nasıl yönettiğinizi özetleyen konu. Bağlantı, moderatörler ve yöneticiler için inceleme kuyruğunda görünecektir." reviewable_claiming: "İncelenebilir içeriğin üzerinde işlem yapılabilmesi için talep edilmesi gerekir mi?" reviewable_default_topics: "İncelenebilir içeriği varsayılan olarak konuya göre gruplandırılmış şekilde gösterin" reviewable_default_visibility: "Bu önceliği karşılamadıkları sürece incelenebilir ögeleri göstermeyin" @@ -2086,12 +2148,14 @@ tr_TR: allow_all_users_to_flag_illegal_content: "Anonim kullanıcılar, yasa dışı içeriği bildirmek için yöneticilere e-posta göndermeleri gerektiğini belirten bilgileri görürler. Bu ayar, \"Gönderi yayınlamaya izin verilen grupları işaretle\" ayarından önceliklidir." email_address_to_report_illegal_content: "Boş bırakılırsa varsayılan site yöneticisi e-postası kullanılır." cooldown_hours_until_reflag: "Kullanıcıların bir gönderiye yeniden bayrak ekleyebilmeleri için ne kadar süre beklemeleri gerektiği" + slow_mode_prevents_editing: "“Yavaş mod”, “düzenleme süresi”nden sonra düzenlemeyi engeller mi?" reply_by_email_enabled: "Kullanıcıların web sitesine giriş yapmalarını gerektirmek yerine konulara doğrudan e-posta yoluyla yanıt vermelerini sağlayan özelliği etkinleştirin. Daha fazla bilgi için Meta kılavuzu bölümüne bakın." reply_by_email_address: "E-posta ile yanıt için şablon gelen e-posta adresi, örneğin: %%{reply_key}@reply.example.com veya replies+%%{reply_key}@example.com" alternative_reply_by_email_addresses: "Gelen e-posta adreslerini e-posta ile yanıtlamak için alternatif şablonların listesi. Örnek: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "Gelen e-postalar için metin yerine HTML kullanın." strip_incoming_email_lines: "Gelen e-postaların her satırından baştaki ve sondaki boşlukları kaldırın." - disable_emails: "Discourse'un her türlü e-posta göndermesini engelleyin. Tüm kullanıcılar için e-postaları devre dışı bırakmak için \"evet\"i seçin. Yalnızca personel olmayan kullanıcılar için e-postaları devre dışı bırakmak amacıyla \"personel olmayan\" seçeneğini belirleyin." + disable_emails: "Discourse'un herhangi bir tür e-posta göndermesini engelleyin. Tüm kullanıcılar için giden e-postaları devre dışı bırakmak için “evet”i seçin. Yalnızca personel dışı kullanıcılar için e-postaları devre dışı bırakmak için “personel dışı”yı seçin." + allow_email_invites: "Devre dışı bırakıldığında, kullanıcılar Discourse üzerinden davet e-postaları gönderemeyecekler." strip_images_from_short_emails: "Boyutu 2800 Bayt'tan küçük olan e-postalardaki görüntüleri soyun" short_email_length: "Bir e-postanın görüntü bastırma için \"kısa\" olarak sınıflandırılacağı maksimum uzunluğu bayt cinsinden tanımlayın. Bir e-postanın boyutu bu ayarı aşmazsa e-postadaki tüm görüntüler (avatarlar ve emoji'ler gibi) çıkarılır." display_name_on_email_from: "Alanlardan gelen e-postalarda tam adları gösterin" @@ -2109,6 +2173,7 @@ tr_TR: mailgun_api_key: "Web kancası mesajlarını doğrulamak için kullanılan Mailgun Gizli API anahtarı." sendgrid_verification_key: "Web kancası mesajlarını doğrulamak için kullanılan Sendgrid doğrulama anahtarı." mailjet_webhook_token: "Web kancası yükünü doğrulamak için kullanılan token. Web kancasının \"t\" sorgu parametresi olarak geçirilmelidir, örneğin: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Web kancası yükünü doğrulamak için kullanılan token. Web kancasının \"t\" sorgu parametresi olarak geçirilmelidir, örneğin: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Web kancası mesajlarını doğrulamak için kullanılan Mandrill kimlik doğrulama anahtarı." postmark_webhook_token: "Web kancası yükünü doğrulamak için kullanılan token. Web kancasının \"t\" sorgu parametresi olarak geçirilmelidir, örneğin: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Web kancası yükünü doğrulamak için kullanılan token. Web kancasının \"t\" sorgu parametresi olarak geçirilmelidir, örneğin: https://example.com/webhook/sparkpost?t=supersecret" @@ -2151,6 +2216,7 @@ tr_TR: relative_date_duration: "Gönderi tarihlerinin mutlak (20 Şubat) yerine göreli (7 g) olarak gösterileceği gönderiden sonraki gün sayısı." delete_user_max_post_age: "İlk gönderisi (x) günden daha eski olan kullanıcıların silinmesine izin vermeyin." delete_all_posts_max: "Tüm Gönderileri Sil düğmesi ile tek seferde silinebilecek maksimum gönderi sayısı. Bir kullanıcının bu sayıdan fazla gönderisi varsa gönderilerin tümü aynı anda silinemez ve kullanıcı silinemez." + delete_all_posts_background_threshold: "Arka planda silme işlemi gerçekleştirilmeden önce Tüm Gönderileri Sil düğmesi ile bir seferde silinebilecek maksimum gönderi sayısı." delete_user_self_max_post_count: "Bir kullanıcının self servis hesap silme işlemine izin verirken sahip olabileceği maksimum gönderi sayısı. Self servis hesap silmeyi devre dışı bırakmak için -1 olarak ayarlayın." username_change_period: "Kayıttan sonra hesapların kullanıcı adlarını değiştirebilecekleri maksimum gün sayısı (kullanıcı adı değişikliğine izin vermemek için 0)." email_editable: "Kullanıcıların kayıt olduktan sonra e-posta adreslerini değiştirmelerine izin verin." @@ -2179,14 +2245,18 @@ tr_TR: enable_category_group_moderation: "Grupların belirli kategorilerdeki içeriği denetlemesine izin verin" group_in_subject: "Kişisel mesajdaki ilk grubun adına e-posta konusunda %%{optional_pm} olarak ayarlayın, bkz.: Standart e-postalar için konu formatını özelleştirme" allow_anonymous_mode: "Kullanıcıların gönderi paylaşmak için anonim moda geçme seçeneğini etkinleştirin. Etkinleştirildiğinde, kullanıcılar site genelinde gönderi veya konu oluştururken kimliklerinin gizlenmesini tercih edebilirler. Ayrıca \"anonim beğenilere izin ver\" bölümüne bakın." + allow_likes_in_anonymous_mode: "Sitenizi anonim olarak gezen kullanıcıların gönderileri beğenmesine izin vermek için bu ayarı etkinleştirin. Etkinleştirildiğinde, kullanıcılar site genelinde gönderileri veya konuları beğenirken kimliklerinin gizli kalmasını seçebilirler. Bu ayar, `anonim moduna izin ver` ayarının etkinleştirilmesini gerektirir." + anonymous_posting_allowed_groups: "Anonim gönderim yapmasına izin verilen gruplar. Bu ayar, `anonim moduna izin ver` ayarının etkinleştirilmesini gerektirir." anonymous_account_duration_minutes: "Anonimliği korumak için her kullanıcı için her N dakikada bir yeni bir anonim hesap oluşturun. Örnek: 600 olarak ayarlanırsa son gönderiden itibaren 600 dakika geçer geçmez VE kullanıcı anonime geçerse yeni bir anonim hesap oluşturulur." - hide_user_profiles_from_public: "Anonim kullanıcılar için kullanıcı kartlarını, kullanıcı profillerini ve kullanıcı dizinini devre dışı bırakın." + hide_user_profiles_from_public: "Anonim kullanıcılar için kullanıcı kartlarını ve kullanıcı profillerini devre dışı bırakın. Toplu istatistikler kullanıcı dizininde hala kullanılabilir olacaktır." hide_new_user_profiles: "Güven seviyesi 1 veya daha düşük kullanıcı profillerini herkesten gizleyin ve güven seviyesi 1 olan kullanıcıları ilk kez gönderi yapana kadar koruyun. Bu özellik must_approve_users ve invite_only sitelerinde koşulsuz olarak devre dışıdır." allow_users_to_hide_profile: "Kullanıcıların profillerini ve varlıklarını gizlemelerine izin verin" hide_user_activity_tab: "Yönetici ve kişisel profiller dışındaki kullanıcı profillerindeki aktivite sekmesini gizleyin." delete_associated_accounts_on_password_reset: "Kullanıcı şifreyi değiştirdiğinde kullanıcı ilişkili hesabı silin." allow_featured_topic_on_user_profiles: "Kullanıcıların, kullanıcı kartlarında ve profillerinde bir konuya bağlantı vermelerine izin verin." show_inactive_accounts: "Giriş yapan kullanıcıların etkin olmayan hesapların profillerine göz atmasına izin verin." + hide_silencing_reasons: "Kullanıcı profillerinde susturma nedenlerini herkese açık olarak göstermeyin." + hide_suspension_reasons: "Kullanıcı profillerinde askıya alma nedenlerini kamuya açık olarak göstermeyin." log_personal_messages_views: "Yönetici tarafından diğer kullanıcılar/gruplar için kişisel mesaj görüntülemelerini günlüğe kaydedin." ignored_users_count_message_threshold: "Belirli bir kullanıcı şu kadar diğer kullanıcı tarafından göz ardı edilirse moderatörleri bilgilendirin." ignored_users_message_gap_days: "Diğerleri tarafından görmezden gelinen bir kullanıcı hakkında moderatörleri tekrar bilgilendirmeden önce ne kadar bekleneceği." @@ -2194,11 +2264,13 @@ tr_TR: clean_up_unused_staged_users_after_days: "Kullanılmayan bir aşamalı kullanıcı (herhangi bir gönderisi olmayan) kaldırılmadan önceki gün sayısı. Temizlemeyi devre dışı bırakmak için 0 olarak ayarlayın." user_selected_primary_groups: "Kullanıcıların kendi birincil gruplarını belirlemelerine izin verin" max_notifications_per_user: "Kullanıcı başına maksimum bildirim miktarı, bu sayı aşılırsa eski bildirimler silinir. Haftalık olarak uygulanır. Devre dışı bırakmak için 0 olarak ayarlayın" + allowed_user_website_domains: "Kullanıcı web sitesi bu alan adlarına göre doğrulanacaktır." allow_profile_backgrounds: "Kullanıcıların profil arka planları yüklemesine izin verin." get_a_room_threshold: "Bir kullanıcının uyarılmadan önce aynı konuda aynı kişiye yapması gereken gönderi sayısı." dont_feed_the_trolls_threshold: "Uyarılmadan önce diğer kullanıcılardan gelen bayrak sayısı." enable_mobile_theme: "Mobil cihazlar, sitenin tamamına geçebilme özelliğine sahip mobil uyumlu bir tema kullanır. Tamamen duyarlı özel bir stil sayfası kullanmak istiyorsanız bunu devre dışı bırakın." dominating_topic_minimum_percent: "Bir kullanıcının bir konuda aşırı baskınlık kurduğu hatırlatılmadan önce bir konuda yüzde kaç gönderi yapması gerektiği." + pm_warn_user_last_seen_months_ago: "Yeni bir PM oluştururken, hedef alıcı n aydan fazla süredir görülmemişse kullanıcıları uyarın." suppress_uncategorized_badge: "Konu listelerinde kategorize edilmemiş konular için rozet göstermeyin." header_dropdown_category_count: "Başlık açılır menüsünde kaç kategori görüntülenebileceği." permalink_normalizations: "Kalıcı bağlantıları eşleştirmeden önce aşağıdaki regex'i uygulayın, örneğin: /(topic.*)\\?.*/\\1 sorgu dizelerini konu rotalarından söker. Format, regex+string ve yakalamalara erişmek için \\1 vb. kullanın" @@ -2242,6 +2314,7 @@ tr_TR: embed_support_markdown: "Yerleştirilmiş gönderiler için Markdown biçimlendirmesini destekleyin." allowed_embed_selectors: "Yerleştirmelerde izin verilen CSS ögelerinin virgülle ayrılmış bir listesi." allowed_href_schemes: "Bağlantılarda http ve https'ye ek olarak izin verilen şemalar." + embed_full_app: "Gömülü yorumlar için tam uygulama modunu etkinleştirin. Bu özellik etkinleştirildiğinde, gömülü yorumlar Discourse uygulamasının tamamını bir iframe içinde yükler ve kullanıcıların konularla doğrudan etkileşime girmesine olanak tanır" embed_post_limit: "Yerleştirilecek maksimum gönderi sayısı." embed_username_required: "Konu oluşturmak için kullanıcı adı gereklidir." notify_about_reviewable_item_after: "Bu kadar saat geçmesine rağmen hâlâ incelenmemiş öge varsa moderatörlere mesaj gönderin. Devre dışı bırakmak için 0 olarak ayarlayın." @@ -2272,6 +2345,7 @@ tr_TR: disable_watched_word_checking_in_user_fields: "kullanıcı alanlarında izlenen kelime kontrolünü devre dışı bırak" watched_words_regular_expressions: "Kelimeleri filtrelemek için düzenli ifadelerin kullanılmasına izin verir. Etkinleştirilirse bu özellik hassas sözcükleri büyük/küçük harf duyarlılıklarına göre gruplar. Ardından, seçilen tüm kelimeleri tek bir düzenli ifadede derler ve düzenli olarak izlenen kelimeler için kelime sınırları ekler. Sonuç olarak, bu regex tabanlı filtreleme yöntemi, daha karmaşık kelime kalıplarını destekleyerek içerik denetimi üzerinde ekstra bir kontrol katmanı ekler. Bu ayar aynı zamanda orijinal metnin yerine tercih edilen metnin kolayca yerleştirilmesine de olanak tanır." enable_fast_edit: "Satır içi küçük bir seçimi düzenlemek için yazı seçimi menüsüne bir düğme ekler." + old_post_notice_days: "Yeni kullanıcı ve geri dönen kullanıcıların gönderdiği bildirimlerin gizleneceği gün sayısı. Resmi gönderim bildirimi her zaman görünür kalacaktır." new_user_notice_tl: "Yeni kullanıcı gönderi bildirimlerini görmek için gereken minimum güven seviyesi." returning_user_notice_tl: "Geri dönen kullanıcı gönderisi bildirimlerini görmek için gereken minimum güven seviyesi." returning_users_days: "Bir kullanıcının geri döndüğünün kabul edilmesi için kaç gün geçmesi gerektiği." @@ -2353,6 +2427,7 @@ tr_TR: force_lowercase_tags: "Tüm yeni etiketleri tamamen küçük harf olmaya zorlayın." create_post_for_category_and_tag_changes: "Bir konunun kategorisi veya etiketleri değiştiğinde bir fısıltı gönderisi oluşturun, fısıltı gönderilerinin etkinleştirilmesini gerektirir." automatically_clean_unused_tags: "Herhangi bir konuda veya kişisel mesajda kullanılmayan etiketleri günlük olarak otomatik olarak silin." + default_watched_precedence_over_muted: "Kullanıcılara, izledikleri kategoriler veya etiketlerdeki, sessize aldıkları kategorilere de ait olan konular hakkında bildirimde bulunun." company_name: "Şirketinizin veya kuruluşunuzun adı. Boş bırakılırsa Hizmet Şartları veya Gizlilik Bildirimine ilişkin ortak metin sağlanmaz." governing_law: "Hizmet Koşulları ve Gizlilik Politikası da dâhil olmak üzere sitenin hukuki yönlerini düzenleyen yargı bölgesini belirtin. Bu genellikle siteyi işleten şirketin kayıtlı olduğu veya faaliyet gösterdiği ülke veya eyalettir." city_for_disputes: "Bu forumun kullanımıyla ilgili herhangi bir anlaşmazlığın çözümünde yargı yetkisi olarak kullanılacak şehri belirtin. Bu bilgi genellikle forumun Hizmet Koşulları gibi yasal belgelerde yer alır." @@ -2368,10 +2443,11 @@ tr_TR: sitemap_page_size: "Her site haritası sayfasına eklenecek URL sayısı. Maksimum 50.000" enable_user_status: "Kullanıcıların özel durum mesajı (emoji + açıklama) ayarlamalarına izin verin." enable_user_tips: "Kullanıcılara temel özellikleri açıklayan yeni kullanıcı ipuçlarını etkinleştirin" + short_title: "Kısa başlık, kullanıcının ana ekranında, başlatıcıda veya alanın sınırlı olabileceği diğer yerlerde kullanılacaktır. 12 karakterle sınırlı olmalıdır. Bu başlığı değiştirmek, PWA kullanıcılarına uygulamayı güncellemeleri veya kaldırmaları için bir uyarı gönderebilir." dashboard_hidden_reports: "Belirtilen raporların panodan gizlenmesine izin verin." dashboard_visible_tabs: "Hangi pano sekmelerinin görünür olacağını seçin." dashboard_general_tab_activity_metrics: "Genel sekmesinde aktivite metrikleri olarak görüntülenecek raporları seçin." - gravatar_enabled: "Kullanıcı avatarları için Gravatar hizmetini kullanın. Bu, kullanıcıların avatarları için Gravatar'a geçmesini engeller ancak halihazırda Gravatar kullanan kullanıcıları etkilemez." + gravatar_enabled: "Kullanıcı avatarları için Gravatar hizmetini kullanın. Bu özelliği devre dışı bırakmak, kullanıcıların avatarları için Gravatar'a geçmelerini engeller, ancak halihazırda bu hizmeti kullanan kullanıcıları etkilemez." gravatar_name: "Gravatar hizmet sağlayıcısının adını belirtin. Bu ad genellikle siteye Gravatar avatarları sağlayan kaynağı tanımlamak için kullanılır." gravatar_base_url: "Gravatar sağlayıcısının API'sine erişmek için URL'yi belirtin. Bu ayar, e-posta adreslerini avatar görüntülerinin depolandığı Gravatar URL'lerine dönüştürmek için kritik öneme sahiptir." gravatar_login_url: "Kullanıcıya Gravatar hizmetine giriş yapmasını sağlayan `gravatar_base_url` ögesine göre URL." @@ -2384,18 +2460,26 @@ tr_TR: suggest_weekends_in_date_pickers: "Tarih seçici önerilerine hafta sonlarını (cumartesi ve pazar) dahil edin (Discourse'u yalnızca hafta içi, pazartesiden cumaya kadar kullanıyorsanız bunu devre dışı bırakın)." show_bottom_topic_map: "Konuya 10 veya daha fazla yanıt geldiğinde konu haritasını konunun altında gösterir." show_topic_map_in_topics_without_replies: "Konuya yanıt gelmese bile konu haritasını gösterir." + enable_site_owner_onboarding: "Yeni yöneticilere başlangıçta yardımcı olmak için ana sayfada bir panel gösterir. Bu ayarı yeniden etkinleştirerek başlangıç adımlarını tekrar görebilirsiniz." + site_owner_onboarding_max_days: "Site oluşturulduktan sonra karşılama banner'ının gösterilebileceği maksimum gün sayısı." enable_welcome_banner: "Üyeleri karşılamak ve site içeriğinde arama yapmalarına olanak sağlamak için ana konu listenizin sayfalarında bir başlık gösterin" welcome_banner_image: "Hoş geldiniz banner'ının arka planında gösterilecek bir görüntü ayarlayın." welcome_banner_location: "Hoş geldiniz banner'ının sayfada nerede görüneceğini belirler." welcome_banner_page_visibility: "Hoş geldiniz banner'ının hangi sayfalarda görüneceğini belirler." + welcome_banner_text_color: "'Hoş geldiniz banner görüntüsü' ayarı yapılandırıldığında, banner metin rengini okunabilir olmasını sağlamak için bu ayarı kullanın. Boş bırakıldığında veya görüntü yüklenmediğinde, aktif tema rengi kontrol eder." splash_screen: "Site varlıkları yüklenirken geçici bir yükleme ekranı gösterir" + splash_screen_image: "Site yüklenirken açılış ekranında görüntülenecek bir SVG görüntüsü. Animasyonlu SVG'ler yalnızca CSS dönüşümü veya opaklık animasyonları kullanmalıdır. CSS sınıfları ve anahtar kareler için benzersiz adlar kullanın. Tema renklerini belirtmek için var(--primary), var(--secondary) ve var(--tertiary) kullanabilirsiniz." navigation_menu: "Siteniz için ana gezinme menüsü olarak kenar çubuğunu veya başlık açılır menüsünü belirleyin. Kenar çubuğu önerilir." default_navigation_menu_categories: "Seçilen kategoriler, varsayılan olarak Navigasyon Menüsü'nün Kategoriler bölümünde gösterilir." default_navigation_menu_tags: "Seçilen etiketler, varsayılan olarak Navigasyon Menüsü'nün Etiketler bölümünde gösterilir." experimental_new_new_view_groups: 'Okunmamış ve yeni konuları birleştiren bir yeni konular listesi etkinleştirin ve kenar çubuğundaki "Her şey" bağlantısını buna bağlayın.' + enable_form_templates: "Form şablonları özelliğini etkinleştirin. Bu özellik sayesinde, konu oluşturma akışının bir parçası olarak veri doğrulamalı yapılandırılmış bir form uygulayabilirsiniz." show_preview_for_form_templates: "Form şablonları özelliği için ön izlemeyi etkinleştirin" lazy_load_categories_groups: "Kategori bilgilerini yalnızca bu gruplardaki kullanıcılar için tembel olarak yükleyin. Bu, çok sayıda kategoriye sahip sitelerde performansı artırır." enable_auto_grid_images: "Bestecide 3 veya daha fazla görüntü yüklendiğinde görüntüleri otomatik olarak [grid] etiketlerine sarar." + enable_new_checkbox_style: "FormKit onay kutuları için yeniden tasarlanan onay kutusu stilini etkinleştirin." + impersonate_without_logout: "Yöneticilerin, yönetici hesaplarından çıkış yapmadan bir kullanıcıyı taklit etmelerine izin verin." + experimental_impersonation_time_limit_minutes: "Taklit oturumu otomatik olarak sonlandırılmadan önce geçen süre." page_loading_indicator: "Discourse içinde sayfa geçişleri sırasında görünen yükleme göstergesini yapılandırın. \"Spinner\" bir tam sayfa göstergesidir. \"Slider\" ekranın üst kısmındaki dar bir çubuğu gösterir." show_user_menu_avatars: "Kullanıcı menüsünde kullanıcı avatarlarını göster" about_page_hidden_groups: "Belirli grupların üyelerini /about (hakkında) sayfasında göstermeyin." @@ -2408,14 +2492,31 @@ tr_TR: rich_editor: "Besteci için zengin düzenleyiciyi etkinleştirin, böylece tüm kullanıcılar mevcut Markdown modu ile daha sezgisel ve kullanıcı dostu kompozisyonlar için yeni zengin metin düzenleyicisi arasında geçiş yapabilirler." default_composition_mode: "Topluluğunuzun bestecisi için varsayılan modu ayarlayın. Zengin metin modu çoğu kullanıcı için daha modern ve tanıdık bir yazma deneyimi sağlarken, Markdown modu daha teknik kitleler için uygun olabilir. Üyeler, besteci araç çubuğundaki geçiş düğmesini kullanarak modlar arasında geçiş yapabilirler." reviewable_ui_refresh: "İnceleme kuyruğunda deneysel yeni kullanıcı arayüzünü kullanabilen gruplar." + viewport_based_mobile_mode: "Mobil/masaüstü modlarını belirlemek için görüntü alanı genişliğini kullanın. Bu ayar yakında kaldırılacaktır. Kapatmanız gerektiğini düşünüyorsanız, lütfen Meta'da bize bildirin." content_localization_enabled: "Kullanıcılara tarayıcı veya kullanıcı dil tercihlerine göre yerelleştirilmiş içerik görüntüler. Bu içerik kategoriler, etiketler, gönderiler ve konular içerebilir. Desteklenen yerel ayarlar, \"İçerik yerelleştirmesi tarafından desteklenen yerel ayarlar\" bölümünde belirtilmiştir." + content_localization_supported_locales: "Kullanıcı içeriğinin çevrilebileceği desteklenen yerel ayarların listesi. Sitenin varsayılan yerel ayarı her zaman dahil edilir. ‘İçerik yerelleştirme etkin’ seçeneği gerekir." content_localization_allowed_groups: "Grupların yerelleştirilmiş içeriği güncellemesine izin verildi. \"İçerik yerelleştirmesinin etkinleştirilmesini\" gerektirir." + content_localization_language_switcher: "Başlıkta bir dil değiştirici göstererek, ziyaretçilerin Discourse'un çevrilmiş sürümleri ile kullanıcıların katkıda bulunduğu içerikler arasında geçiş yapabilmelerini sağlar. 'İçerik yerelleştirme destekli yerel ayarlar'da tanımlanan dilleri kullanır." + content_localization_crawler_param: "'İçerik yerelleştirme etkin' ve ‘parametreden yerel ayarları belirle’ seçenekleri etkinleştirildiğinde, web tarayıcılarına yerelleştirilmiş içerik sunun. Desteklenen yerel ayarların listesi ‘içerik yerelleştirme desteklenen yerel ayarlar’ bölümünde tanımlanmıştır." + content_localization_use_default_locale_when_unsupported: "Tercih edilen dili “içerik yerelleştirme desteklenen yerel ayarlar” listesinde bulunmayan kullanıcılara, sitenin varsayılan yerel ayarlarında yerelleştirilmiş içerik sunun." + content_localization_allow_author_localization: "Yazarların, yazı menüsü aracılığıyla kendi konularının ve yazılarının yerelleştirmelerini güncellemesine izin verin." + fake_upcoming_change: "Bu, test amaçlı sahte bir değişikliktir. Bu dizeyi çevirmenize gerek yoktur." + floating_dismiss_topics_on_mobile: "Daha kolay erişim ve konu listesinin üst kısmında yer açmak için mobil cihazlarda konu listesi üzerinde yüzen bir “Kapat...” düğmesi gösterir." + rename_faq_to_guidelines: "Bu değişiklikle SSS sayfası, Kılavuzlar olarak yeniden adlandırılmıştır. SSS sayfası hala /faq adresinde erişilebilir olacaktır. ‘faq url’ ayarı eskisi gibi çalışmaya devam edecektir." + enable_simplified_category_creation: "Daha az seçenek ve daha temiz bir arayüz ile basitleştirilmiş kategori oluşturma akışını etkinleştirir." + enable_custom_splash_screen: "Yükleme açılış ekranını kendi SVG görüntünüzle özelleştirmenize olanak tanır. ‘Açılış ekranı görüntüsü’ ayarı üzerinden bir görüntü yükleyin. Uyarı: Bu, LCP puanlarını ve Google indekslemesini olumsuz etkileyebilir." + modernize_foundation_theme: "Bu değişiklik, Discourse'daki Foundation temasına tasarım değişiklikleri getiriyor." + reporting_improvements: "Discourse'un yönetici raporlarının gezinme, tasarım ve kullanılabilirlik özelliklerinde iyileştirmeler." errors: invalid_css_color: "Geçersiz renk. Bir renk adı veya hex değeri girin." + invalid_datetime: "Geçersiz tarih ve saat biçimi. Lütfen geçerli bir tarih ve saat girdiğinizden emin olun." invalid_email: "Geçersiz e-posta adresi." invalid_username: "Bu kullanıcı adına sahip bir kullanıcı yok." valid_username: "Bu kullanıcı adına sahip bir kullanıcı var." invalid_group: "Bu ada sahip bir grup yok." + invalid_svg: "SVG görüntüsü geçersiz. SVG öğesi içermeli ve komut dosyası veya olay işleyicisi içermemelidir." + invalid_upload: "Yükleme geçersiz veya mevcut değil." + invalid_topic: "Bu kimlik numarasıyla ilgili konu yok." invalid_integer_min_max: "Değer %{min} ila %{max} arasında olmalıdır." invalid_integer_min: "Değer %{min} veya üstünde olmalıdır." invalid_integer_max: "Değer en fazla %{max} olabilir." @@ -2452,12 +2553,12 @@ tr_TR: reply_by_email_disabled: "Bu ayarı etkinleştirmeden önce \"e-posta ile yanıtla\" özelliğini etkinleştirmeniz gerekiyor." discourse_connect_url_is_empty: "Bu ayarı etkinleştirmeden önce bir \"discourse bağlantı URL'si\" ayarlamanız gerekiyor." enable_local_logins_disabled: "Bu ayarı etkinleştirmeden önce \"yerel girişleri etkinleştir\" seçeneğini etkinleştirmeniz gerekiyor." - min_username_length_exists: "Minimum kullanıcı adı uzunluğunu en kısa kullanıcı adının üzerinde ayarlayamazsınız (%{username})." - min_group_name_length_exists: "En kısa grup adının (%{group_name}) üstünde minimum kullanıcı adı uzunluğunu ayarlayamazsınız." - min_username_length_range: "Minimum değeri maksimum değerin üzerinde ayarlayamazsınız." - max_username_length_exists: "Maksimum kullanıcı adı uzunluğunu en uzun kullanıcı adının (%{username}) altında ayarlayamazsınız." - max_group_name_length_exists: "Kullanıcı adı uzunluğunu en uzun grup adının (%{group_name}) altına ayarlayamazsınız." - max_username_length_range: "Maksimum değeri minimum değerin altında ayarlayamazsınız." + min_username_length_exists: "En kısa kullanıcı adı (%{username}) üzerinde ‘minimum kullanıcı adı uzunluğu’ ayarı yapamazsınız." + min_group_name_length_exists: "En kısa grup adı (%{group_name}) üzerinde 'minimum kullanıcı adı uzunluğu' ayarı yapamazsınız." + min_username_length_range: "'Minimum kullanıcı adı uzunluğu'nu 'maksimum kullanıcı adı uzunluğu'nun üzerine ayarlayamazsınız." + max_username_length_exists: "En uzun kullanıcı adı (%{username}) değerinden daha kısa bir 'maksimum kullanıcı adı uzunluğu' ayarlayamazsınız." + max_group_name_length_exists: "En uzun grup adı (%{group_name}) değerinden daha kısa bir 'maksimum kullanıcı adı uzunluğu' ayarlayamazsınız." + max_username_length_range: "'Maksimum kullanıcı adı uzunluğu'nu 'minimum kullanıcı adı uzunluğu'nun altına ayarlayamazsınız." invalid_hex_value: "Renk değerleri 6 haneli onaltılık kodlar olmalıdır." empty_selectable_avatars: "Bu ayarı etkinleştirmeden önce en az iki seçilebilir avatar yüklemeniz gerekiyor." category_search_priority: @@ -2472,6 +2573,7 @@ tr_TR: other: "Liste tam olarak %{count} değer içermelidir." markdown_linkify_tlds: "\"*\" değerini dahil edemezsiniz." google_oauth2_hd_groups: "Bu ayarı etkinleştirmeden önce tüm \"google oauth2 hd\" ayarlarını yapılandırmanız gerekiyor." + discourse_id_registration: "Discourse ID ile otomatik olarak kayıt yapılamadı. Bunun nedeni ağ bağlantısı sorunları, güvenlik duvarı kısıtlamaları veya Discourse ID hizmetine erişilememesi olabilir. Daha fazla bilgi için lütfen sunucu günlüklerini kontrol edin veya destek ekibiyle iletişime geçin." linkedin_oidc_credentials: "Bu ayarı etkinleştirmeden önce LinkedIn OIDC giriş bilgilerini ('linkedin_oidc_client_id' ve 'linkedin_oidc_client_secret') yapılandırmanız gerekiyor." search_tokenize_chinese_enabled: "Bu ayarı etkinleştirmeden önce \"search_tokenize_chinese\" özelliğini devre dışı bırakmalısınız." search_tokenize_japanese_enabled: "Bu ayarı etkinleştirmeden önce \"search_tokenize_japanese\" özelliğini devre dışı bırakmalısınız." @@ -2480,7 +2582,9 @@ tr_TR: invalid_uncategorized_category_setting: '"Kategorize edilmemiş konulara izin ver" etkinleştirilmemişse "Kategorize edilmemiş" kategorisi seçilemez.' invalid_search_ranking_weights: "Değer, search_ranking_weights site ayarı için geçersiz. Örnek: \"{0.1,0.2,0.3,1.0}\". Her ağırlık için maksimum değerin 1,0 olduğunu unutmayın." content_localization_locale_limit: "Desteklenen yerel ayar sayısı en fazla %{max} olabilir." + content_localization_language_switcher_requirements: "Dil değiştirici, 'çerezden yerel ayarları belirle' ve 'kullanıcı yerel ayarlarına izin ver' site ayarlarının etkinleştirilmesini ve 'içerik yerelleştirme desteklenen yerel ayarlar'ın en az bir dil içermesini gerektirir." mediaconvert_role_arn_required: "Video dönüştürme için AWS MediaConvert kullanıldığında AWS IAM rolü ARN'si gereklidir." + mediaconvert_output_subdirectory_required: "MediaConvert çıktı alt dizini gereklidir." s3_credentials_required_for_video_conversion: "Video dönüştürme için S3 giriş bilgileri gereklidir. Lütfen S3 erişim anahtarlarını yapılandırın veya IAM profilini etkinleştirin." keywords: clean_up_inactive_users_after_days: "devre dışı|etkin değil|etkinliği kaldırıldı" @@ -2504,6 +2608,7 @@ tr_TR: filter: description: status: "Konuları durumlarına göre filtreleyin" + in: "Kişisel listelerdeki konuları filtrele" order: "Konuları belirli bir alana göre sıralayın" category: "Belirli bir kategorideki konuları gösterin" category_any: "Belirtilen kategorilerden herhangi birindeki konuları gösterin (virgülle ayrılmış)" @@ -2516,13 +2621,17 @@ tr_TR: exclude_tag: "Belirli bir etikete sahip konuları hariç tutun" exclude_tags_any: "Belirtilen etiketlerden herhangi birine sahip konuları hariç tutun (virgülle ayrılmış)" exclude_tags_all: "Belirtilen etiketlerin tümüne sahip konuları hariç tutun (artı ile ayrılmış)" - tags_alias: "\"tag:\" filtresi için takma ad" tag_group: "Belirli bir etiket grubundan etiketlere sahip konuları gösterin" exclude_tag_group: "Belirli bir etiket grubundan etiketli konuları hariç tutun" activity_before: "Belirli bir tarihten önceki son aktiviteye sahip konuları gösterin (YYYY-AA-GG veya günler önce)" activity_after: "Belirli bir tarihten sonra (YYYY-AA-GG veya günler önce) son aktiviteye sahip konuları gösterin" + bookmarked_before: "Belirli bir tarihten önce (YYYY-AA-GG veya gün önce) yer imlerine eklenen konuları göster" + bookmarked_after: "Belirli bir tarihten sonra (YYYY-AA-GG veya gün önce) yer imlerine eklenen konuları göster" created_before: "Belirli bir tarihten önce (YYYY-AA-GG veya günler önce) oluşturulan konuları gösterin" created_after: "Belirli bir tarihten sonra (YYYY-AA-GG veya günler önce) oluşturulan konuları gösterin" + created_by: "Belirli bir kullanıcı veya grup tarafından oluşturulan konuları göster" + created_by_user: "Kullanıcı adı veya grup tarafından oluşturulan konuları göster (@ işareti olmadan)" + created_by_multiple: "Belirtilen kullanıcılar veya gruplar (virgülle ayrılmış) tarafından oluşturulan konuları göster" latest_post_before: "Son gönderisi belirli bir tarihten önce (YYYY-AA-GG veya günler önce) olan konuları gösterin" latest_post_after: "Son gönderisi belirli bir tarihten sonra (YYYY-AA-GG veya günler önce) olan konuları gösterin" likes_min: "En az bu kadar beğeniye sahip konuları gösterin" @@ -2552,6 +2661,7 @@ tr_TR: in_new: "Yeni veya yeni yanıtları olan konuları göster" in_new_replies: "Yeni yanıtları olan konuları göster" in_new_topics: "Yeni konuları göster" + in_unseen: "Henüz görmediğiniz konuları göster" order_activity: "Son aktiviteye göre sırala (ilk başta en yeni)" order_activity_asc: "Son aktiviteye göre sırala (ilk başta en eski)" order_category: "Kategori adına göre sırala (Z-A)" @@ -2572,6 +2682,18 @@ tr_TR: order_views_asc: "Görüntüleme sayısına göre sırala (en az önce)" order_read: "En son ne zaman okuduğunuza göre sırala (en yenisi önce)" order_read_asc: "En son ne zaman okuduğunuza göre sırala (en eskisi önce)" + order_hot: "Popülerliğe göre sıralama (en popülerden başla)" + order_hot_asc: "Popülerliğe göre sıralama (en azdan başla)" + users: "Katılımcılara göre konuları filtrele" + users_any: "Belirtilen kullanıcılardan herhangi biriyle ilgili konuları göster (virgülle ayrılmış)" + users_all: "Belirtilen tüm kullanıcıları içeren konuları göster (artı işaretiyle ayrılmış)" + exclude_users: "Belirli kullanıcıların konularını hariç tut" + group: "Konuları gruplara göre filtrele" + groups_any: "Belirtilen gruplardan herhangi birine ait konuları göster (virgülle ayrılmış)" + groups_all: "Belirtilen tüm grupları içeren konuları göster (artı işaretiyle ayrılmış)" + locale: "Konuları orijinal dile göre filtrele" + locale_any: "Belirtilen dillerden herhangi birinde yazılmış konuları göster (virgülle ayrılmış)" + exclude_locale: "Belirli bir dilde yazılmış konuları hariç tutun" discourse_connect: login_error: "Giriş Hatası" not_found: "Hesabınız bulunamadı. Lütfen site yöneticisi ile iletişime geçin." @@ -2701,6 +2823,7 @@ tr_TR: csrf_detected: "Üzgünüz, yetkilendirme süresi doldu veya tarayıcınızı değiştirdiniz. Lütfen tekrar deneyin." request_error: "Üzgünüz, yetkilendirme başlatılırken bir hata oluştu. Lütfen tekrar deneyin." invalid_iat: "Üzgünüz, sunucu saati farklılıkları nedeniyle yetkilendirme token'ını doğrulayamıyoruz. Lütfen tekrar deneyin." + unauthorized: "Üzgünüz, oturum açma sağlayıcısı isteğinizi onaylamadı. Lütfen tekrar deneyin veya bir yöneticiyle iletişime geçin." omniauth_error_unknown: "Girişiniz işlenirken bir sorun oluştu, lütfen tekrar deneyin." omniauth_confirm_title: "%{provider} kullanarak giriş yapın" omniauth_confirm_button: "Devam et" @@ -2754,6 +2877,7 @@ tr_TR: updating_user_ids: "Kullanıcı kimlikleri güncelleniyor…" deleting_source_user: "Kaynak kullanıcı siliniyor…" user: + anonymized: "[kullanıcı anonimleştirme nedeniyle kaldırıldı]" deactivated: "\"%{email}\" adresine çok fazla geri dönen e-posta nedeniyle devre dışı bırakıldı." deactivated_by_staff: "Personel tarafından devre dışı bırakıldı" deactivated_by_inactivity: @@ -2918,30 +3042,30 @@ tr_TR: title: "Yeni Sürüm Posta Göndericisi" subject_template: "[%{email_prefix}] Yeni Discourse sürümü, güncelleme mevcut" text_body_template: | - Yaşasın, [Discourse]'un (https://www.discourse.org) yeni bir sürümü çıktı! + Yaşasın, [Discourse](https://www.discourse.org) için yeni bir sürüm çıktı! - Sizin sürümünüz: %{installed_version} + Mevcut sürümünüz: %{installed_version} Yeni sürüm: **%{new_version}** - - Kolay **[tek tıklamayla tarayıcı güncellemesi](%{base_url}/admin/update)** kullanarak güncelleyin + - Kolay **[tek tıklamayla tarayıcı güncellemesi](%{base_url}/admin/update)** özelliğimizi kullanarak güncelleyin - - [Sürüm notlarından] (https://meta.discourse.org/tag/release-notes) yeniliklere bakın veya [ham GitHub değişiklik günlüğünü](https://github.com/discourse/discourse/commits/main) görüntüleyin + - [Sürüm notlarında](https://releases.discourse.org/changelog/%{new_version}) yenilikleri inceleyin - - Discourse ile ilgili haberler, tartışmalar ve Discourse'a destek için [meta.discourse.org] (https://meta.discourse.org) adresini ziyaret edin + - Discourse ile ilgili haberler, tartışmalar ve destek için [meta.discourse.org](https://meta.discourse.org) adresini ziyaret edin new_version_mailer_with_notes: title: "Notlarla Yeni Sürüm Posta Göndericisi" subject_template: "[%{email_prefix}] güncelleme mevcut" text_body_template: | - Yaşasın, [Discourse]'un (https://www.discourse.org) yeni sürümü çıktı! + Yaşasın, [Discourse](https://www.discourse.org) için yeni bir sürüm çıktı! - Sizin sürümünüz: %{installed_version} + Mevcut sürümünüz: %{installed_version} Yeni sürüm: **%{new_version}** - - Kolay **[tek tıklamayla tarayıcı güncellemesini](%{base_url}/admin/update)** kullanarak güncelleyin + - Kolay **[tek tıklamayla tarayıcı güncellemesi](%{base_url}/admin/update)** özelliğimizi kullanarak güncelleyin - - [Sürüm notlarından] (https://meta.discourse.org/tag/release-notes) yenilikleri görün veya [ham GitHub değişiklik günlüğünü](https://github.com/discourse/discourse/commits/main) görüntüleyin + - [Sürüm notlarında](https://releases.discourse.org/changelog/%{new_version}) yenilikleri inceleyin - - Discourse ile ilgili haberler, tartışmalar ve destek için [meta.discourse.org] (https://meta.discourse.org) adresini ziyaret edin + - Discourse ile ilgili haberler, tartışmalar ve destek için [meta.discourse.org](https://meta.discourse.org) adresini ziyaret edin ### Sürüm notları @@ -2952,11 +3076,13 @@ tr_TR: illegal: "Gönderiniz **yasa dışı** olarak işaretlendi: Topluluk bunun yasayı ihlal ediyor olabileceğini düşünüyor." spam: "Gönderinize **istenmeyen içerik** bayrağı eklendi: Topluluk, bunun bir reklam olduğunu düşünüyor, beklendiği gibi yararlı veya konuyla ilgili olmak yerine doğası gereği aşırı tanıtım amaçlı." notify_moderators: "Gönderinize **moderatörün dikkatine** bayrağı eklendi: Topluluk, gönderi hakkında bir personelin manuel müdahalesini gerektiren bir şey olduğunu düşünüyor." + needs_approval: "Gönderiniz **onay için** işaretlendi: [topluluk kurallarımıza](%{base_path}/guidelines) uygunluğunu sağlamak için bir personel tarafından incelenmek üzere otomatik olarak sıraya alındı." responder: off_topic: "Gönderiye **konu dışı** bayrağı eklendi: Topluluk, şu anda başlık ve ilk gönderi tarafından tanımlandığı şekliyle bunun konuya uygun olmadığını düşünüyor." inappropriate: "Gönderiye **uygunsuz** bayrağı eklendi: Topluluk, bunun saldırganca, taciz içerikli, nefret söylemli olduğunu veya [topluluk kılavuzumuzu] (%{base_path}/guidelines) ihlal ettiğini düşünüyor." spam: "Gönderiye **istenmeyen içerik** bayrağı eklendi: Topluluk, bunun bir reklam olduğunu düşünüyor, beklendiği gibi yararlı veya konuyla ilgili olmak yerine doğası gereği aşırı tanıtım amaçlı." notify_moderators: "Gönderiye **moderatörün dikkatine** bayrağı eklendi: Topluluk, gönderi hakkında bir personelin manuel müdahalesini gerektiren bir şey olduğunu düşünüyor." + needs_approval: "Gönderi **onay için** işaretlendi: [topluluk kurallarımıza](%{base_path}/guidelines) uygunluğunu sağlamak için bir personel tarafından incelenmek üzere otomatik olarak sıraya alındı." flags_dispositions: agreed: "Bize bildirdiğiniz için teşekkür ederiz. Bir sorun olduğuna katılıyoruz ve sorunu araştırıyoruz." agreed_and_deleted: "Bize bildirdiğiniz için teşekkür ederiz. Bir sorun olduğuna katılıyoruz ve gönderiyi kaldırdık." @@ -2976,6 +3102,7 @@ tr_TR: contents_hidden: "İçeriğini görmek için lütfen gönderiyi ziyaret edin." post_hidden: title: "Gönderi Gizlendi" + preview: "Topluluk üyeleri tarafından bildirildiği için gizlenmiş gönderi." subject_template: "Gönderi topluluk bayrakları tarafından gizlendi" text_body_template: | Merhaba, @@ -2991,19 +3118,23 @@ tr_TR: Ancak, gönderi topluluk tarafından ikinci kez gizlenirse personel tarafından ele alınana kadar gizli kalır. Daha fazla bilgi için lütfen [topluluk kılavuzumuzu](%{base_url}/guidelines) inceleyin. + reviewable_queued_post_revise_and_reject_edit_post: "Önerilen değişiklikleri yapmak için aşağıdaki orijinal gönderinizi düzenleyip yeniden gönderebilir veya sorularınız varsa bu mesaja yanıt verebilirsiniz." + reviewable_queued_post_revise_and_reject_edit_post_no_reply: "Aşağıda ilk gönderinizi düzenleyebilir ve önerilen değişiklikleri yaparak yeniden gönderebilirsiniz." + reviewable_queued_post_revise_and_reject_edit_topic: "Aşağıda konunuzun ilk mesajını düzenleyip önerilen değişiklikleri yaparak yeniden gönderebilir veya sorularınız varsa bu mesaja yanıt verebilirsiniz." + reviewable_queued_post_revise_and_reject_edit_topic_no_reply: "Aşağıda konunuzun ilk gönderisini düzenleyebilir ve önerilen değişiklikleri yaparak yeniden gönderebilirsiniz." reviewable_queued_post_revise_and_reject: title: "Gönderinizle ilgili geri bildirim" subject_template: "%{topic_title} başlığındaki gönderinizle ilgili geri bildirim" text_body_template: | Merhaba %{username}, - [%{topic_title}](%{topic_url}) başlığındaki gönderinizi inceledik ve sizin için bazı geri bildirimlerimiz olacak. + [%{topic_title}](%{topic_url}) başlıklı gönderinizi inceledik ve size bazı geri bildirimlerimiz var. - Sebep: %{reason} + Neden: %{reason} Geri bildirim: %{feedback} - Aşağıdaki orijinal gönderinizi düzenleyebilir ve önerilen değişikliklerle yeniden gönderebilirsiniz veya herhangi bir sorunuz varsa bu mesajı yanıtlayabilirsiniz. + %{edit_instructions} -------- @@ -3019,13 +3150,13 @@ tr_TR: text_body_template: | Merhaba %{username}, - "%{topic_title}" başlıklı yeni konunuzu inceledik ve sizin için bazı geri bildirimlerimiz olacak. + "%{topic_title}" başlıklı yeni konunuzu inceledik ve size bazı geri bildirimlerimiz var. - Sebep: %{reason} + Neden: %{reason} Geri bildirim: %{feedback} - Aşağıdan orijinal gönderinizi düzenleyebilir ve önerilen değişikliklerle yeniden gönderebilirsiniz veya herhangi bir sorunuz varsa bu mesajı yanıtlayabilirsiniz. + %{edit_instructions} -------- @@ -3037,6 +3168,7 @@ tr_TR: %{site_name} Moderatörleri post_hidden_again: title: "Gönderi Tekrar Gizlendi" + preview: "Topluluk üyeleri tarafından tekrar gizlendi." subject_template: "Gönderi topluluk bayrakları tarafından gizlendi, personel bilgilendirildi" text_body_template: | Merhaba, @@ -3521,6 +3653,7 @@ tr_TR: Daha fazla bilgi için lütfen [topluluk kılavuzumuzu](%{base_url}/guidelines) inceleyin. too_many_spam_flags: title: "Çok Fazla İstenmeyen İçerik Bayrağı" + preview: "Spam işaretleri nedeniyle geçici olarak gizlenen gönderiler." subject_template: "Yeni hesap askıda" text_body_template: | Merhaba, @@ -3543,6 +3676,7 @@ tr_TR: Daha fazla bilgi için lütfen [topluluk kılavuzumuzu](%{base_url}/guidelines) inceleyin. silenced_by_staff: title: "Personel Tarafından Susturuldu" + preview: "Hesap geçici olarak askıya alındı." subject_template: "Hesap geçici olarak beklemede" text_body_template: | Merhaba, @@ -3555,9 +3689,27 @@ tr_TR: user_automatically_silenced: title: "Kullanıcı Otomatik Olarak Susturuldu" subject_template: "Yeni kullanıcı %{username} topluluk bayraklarıyla susturuldu" + text_body_template: | + Bu otomatik bir mesajdır. + + Yeni kullanıcı [%{username}](%{user_url}) otomatik olarak susturulmuştur. + + Lütfen [bayrakları inceleyin](%{base_url}/review). %{username} yanlışlıkla susturulmuşsa, [bu kullanıcının yönetici sayfasında](%{user_url}) susturmayı kaldır düğmesine tıklayın. + + Bu eşik, `silence_new_user` site ayarları aracılığıyla değiştirilebilir. user_automatically_silenced_with_reason: title: "Kullanıcı Otomatik Olarak Susturuldu" subject_template: "Yeni kullanıcı %{username} topluluk bayraklarıyla susturuldu" + text_body_template: | + Bu otomatik bir mesajdır. + + Yeni kullanıcı [%{username}](%{user_url}) otomatik olarak susturuldu. + + Nedeni - %{reason} + + Lütfen [bayrakları inceleyin](%{base_url}/review). %{username} yanlışlıkla sessizleştirilmişse, [bu kullanıcının yönetici sayfasında](%{user_url}) sessizleştirmeyi kaldır düğmesine tıklayın. + + Bu eşik, `silence_new_user` site ayarları üzerinden değiştirilebilir. spam_post_blocked: title: "İstenmeyen Gönderi Engellendi" subject_template: "%{username} adlı yeni kullanıcının gönderileri tekrarlanan bağlantılar nedeniyle engellendi" @@ -3610,6 +3762,12 @@ tr_TR: Merhaba, Yeni kullanıcılardan gelen gönderiler moderasyon için bekletildi ve şu anda incelenmeyi bekliyor. [Onları buradan onaylayın veya reddedin](%{base_url}/review?type=ReviewableQueuedPost). + user_posts_deleted: + title: "Kullanıcı Gönderileri Silindi" + subject_template: "%{user}'ın tüm gönderileri silinmiştir." + text_body_template: + one: "@%{user} tarafından gönderilen %{count} gönderi @%{staff_user} tarafından silinmiştir." + other: "@%{user} tarafından gönderilen %{count} gönderi @%{staff_user} tarafından silinmiştir." unsubscribe_link: | Bu e-posta aboneliğinden çıkmak için [buraya tıklayın](%{unsubscribe_url}). unsubscribe_link_and_mail: | @@ -3723,6 +3881,7 @@ tr_TR: %{respond_instructions} user_replied: title: "Kullanıcı Yanıtladı" + preview: "Birisi gönderinize yanıt verdi." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3745,6 +3904,7 @@ tr_TR: %{respond_instructions} user_quoted: title: "Kullanıcı Alıntı yaptı" + preview: "Birisi bir gönderide sizi alıntıladı." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3756,6 +3916,7 @@ tr_TR: %{respond_instructions} user_linked: title: "Kullanıcı Bağlantı Verdi" + preview: "Başka bir konuda bağlantısı paylaşılmış gönderi." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3767,6 +3928,7 @@ tr_TR: %{respond_instructions} user_mentioned: title: "Kullanıcı Bahsetti" + preview: "Birisi bir gönderide senden bahsetmiş." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3822,6 +3984,7 @@ tr_TR: %{respond_instructions} user_posted: title: "Kullanıcı Gönderi Yaptı" + preview: "Birisi izlediğiniz bir konuya yanıt verdi." subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3855,6 +4018,7 @@ tr_TR: %{respond_instructions} user_posted_pm: title: "Kullanıcı Kişisel Mesaj Gönderdi" + preview: "Birisi size özel mesaj gönderdi." subject_template: "[%{email_prefix}] [Kişisel Mesaj] %{topic_title}" text_body_template: | %{header_instructions} @@ -3923,6 +4087,12 @@ tr_TR: account_second_factor_disabled: title: "İki Adımlı Kimlik Doğrulama devre dışı" subject_template: "[%{email_prefix}] İki Adımlı Kimlik Doğrulama devre dışı" + text_body_template: | + %{site_name} adresindeki hesabınızda iki faktörlü kimlik doğrulama devre dışı bırakılmıştır. Artık yalnızca şifrenizle oturum açabilirsiniz; ek kimlik doğrulama kodu artık gerekli değildir. + + İki faktörlü kimlik doğrulamayı (2FA) devre dışı bırakmayı seçmediyseniz, hesabınız birisi tarafından ele geçirilmiş olabilir. + + Herhangi bir sorunuz varsa, [güler yüzlü personelimizle iletişime geçin](%{base_url}/about). digest: why: "%{since} tarihinden bu yana %{site_link} adresinin kısa bir özeti" since_last_visit: "Son ziyaretinizden bu yana" @@ -3943,6 +4113,7 @@ tr_TR: preheader: "%{since} tarihinden bu yana kısa bir özet" forgot_password: title: "Şifremi Unuttum" + preview: "Şifrenizi sıfırlayın." subject_template: "[%{email_prefix}] Şifre sıfırlama" text_body_template: | Biri [%{site_name}](%{base_url}) şifrenizi sıfırlamak istedi. @@ -3964,6 +4135,7 @@ tr_TR: %{base_url}/session/email-login/%{email_token} set_password: title: "Şifre Belirle" + preview: "Hesap şifresini ayarlayın." subject_template: "[%{email_prefix}] Şifre Belirle" text_body_template: | Biri [%{site_name}](%{base_url}) hesabınıza şifre eklemek istedi. Alternatif olarak, bu doğrulanmış e-posta adresiyle ilişkili desteklenen herhangi bir çevrimiçi hizmeti (Google, Facebook, vb.) kullanarak giriş yapabilirsiniz. @@ -3974,6 +4146,7 @@ tr_TR: %{base_url}/u/password-reset/%{email_token} admin_login: title: "Yönetici Girişi" + preview: "Yönetici girişi isteniyor." subject_template: "[%{email_prefix}] Giriş" text_body_template: | Biri [%{site_name}](%{base_url}) hesabınıza giriş yapmak istedi. @@ -3984,6 +4157,7 @@ tr_TR: %{base_url}/session/email-login/%{email_token} account_created: title: "Hesap Oluşturuldu" + preview: "Sizin için yeni bir hesap oluşturuldu." subject_template: "[%{email_prefix}] Yeni Hesabınız" text_body_template: | Sizin için %{site_name}'ta yeni bir hesap oluşturuldu @@ -4023,6 +4197,7 @@ tr_TR: text_body_template: "Yeni bir e-posta adresi ekleyebilmemiz için mevcut e-posta hesabını kontrol ettiğinizi onaylamanız gerekiyor. Bu adımı tamamladıktan sonra yeni e-posta adresini onaylamanızı isteyeceğiz. \n\nAşağıdaki bağlantıya tıklayarak %{site_name} için mevcut e-posta adresinizi onaylayın: \n\n%{base_url}/u/confirm-old-email/%{email_token}\n" notify_old_email: title: "Eski E-postaya Bildirim Gönder" + preview: "E-posta adresi güncellendi." subject_template: "[%{email_prefix}] E-posta adresiniz değiştirildi" text_body_template: | Bu, %{site_name} için e-posta adresinizin değiştirildiğini bildiren otomatik bir mesajdır. Bu işlem yanlışlıkla yapıldıysa lütfen @@ -4042,6 +4217,7 @@ tr_TR: %{new_email} signup_after_approval: title: "Onaydan Sonra Kayıt" + preview: "Yeni hesap onaylandı." subject_template: "%{site_name}'ta onaylandınız!" text_body_template: "%{site_name}'a hoş geldiniz!\n\nBir personel, %{site_name}'daki hesabınızı onayladı.\n\nArtık yeni hesabınıza %{base_url} adresinden giriş yaparak erişebilirsiniz\n\nYukarıdaki bağlantı tıklanabilir değilse kopyalayıp web tarayıcınızın adres çubuğuna yapıştırmayı deneyin. \n\n%{new_user_tips} \n\nHer zaman [medeni topluluk davranışına](%{base_url}/guidelines) inanıyoruz. \n\nKeyfini çıkarın!\n" signup_after_reject: @@ -4053,6 +4229,7 @@ tr_TR: %{reject_reason} signup: title: "Kaydol" + preview: "Hesabınızı onaylayın." subject_template: "[%{email_prefix}] Yeni hesabınızı onaylayın" text_body_template: "%{site_name}'a hoş geldiniz! \n\nYeni hesabınızı onaylamak ve etkinleştirmek için aşağıdaki bağlantıya tıklayın: \n%{base_url}/u/activate-account/%{email_token}\n\nYukarıdaki bağlantı tıklanabilir değilse kopyalayıp web tarayıcınızın adres çubuğuna yapıştırmayı deneyin.\n" activation_reminder: @@ -4069,6 +4246,7 @@ tr_TR: Yukarıdaki bağlantı tıklanabilir değilse kopyalayıp web tarayıcınızın adres çubuğuna yapıştırmayı deneyin. suspicious_login: title: "Yeni Giriş Uyarısı" + preview: "Cihazınızı doğrulayın." subject_template: "[%{site_name}] %{location} Konumundan Yeni Giriş" text_body_template: | Merhaba, @@ -4095,8 +4273,14 @@ tr_TR: page_not_found: page_title: "Sayfa Bulunamadı" title: "Hay aksi! Bu sayfa mevcut değil ya da gizli." + subtitle: "Her yere baktık ama aradığınız sayfayı bulamadık." + popular_topics: "Popüler konular" + recent_topics: "Son konular" see_more: "Daha fazla" + search_title: "Bunun yerine arama yapmayı denemek ister misiniz?" search_button: "Ara" + home: "Beni eve götür" + placeholder: "Başlığa veya anahtar kelimelere göre konu ara…" offline: title: "Uygulama yüklenemiyor" offline_page_message: "Görünüşe göre çevrimdışısınız! Lütfen ağ bağlantınızı kontrol edip tekrar deneyin." @@ -4105,6 +4289,7 @@ tr_TR: upload: edit_reason: "görüntülerin yerel kopyaları indirildi" unauthorized: "Üzgünüz, yüklemeye çalıştığınız dosyaya izin verilmiyor (izin verilen uzantılar: %{authorized_extensions})." + images_only: "Üzgünüz, bu ayar için yalnızca resim yükleyebilirsiniz." pasted_image_filename: "Yapıştırılan görüntü" store_failure: "#%{user_id} adlı kullanıcı için yükleme #%{upload_id} depolanamadı." file_missing: "Üzgünüz, yüklenecek bir dosya sağlamalısınız." @@ -4192,6 +4377,8 @@ tr_TR: latte_theme_name: "Latte" summer_theme_name: "Yaz" dark_rose_theme_name: "Kara Gül" + errors: + cannot_edit_remote_copies: "Renk paletlerinin uzak kopyalarında düzenleme yapılamaz." edit_this_page: "Bu sayfayı düzenle" csv_export: boolean_yes: "Evet" @@ -4644,12 +4831,18 @@ tr_TR: nice_share: name: Hoş Paylaşım description: 25 benzersiz ziyaretçili bir gönderi paylaştı + long_description: | + Bu rozet, 25 farklı dış ziyaretçi tarafından tıklanan bir bağlantıyı paylaştığınız için verilir. Tartışmalarımızı ve bu topluluğu duyurduğunuz için teşekkür ederiz. good_share: name: İyi Paylaşım description: 300 benzersiz ziyaretçili bir gönderi paylaştı + long_description: | + Bu rozet, 300 farklı dış ziyaretçi tarafından tıklanan bir bağlantıyı paylaştığınız için verilir. Aferin! Bir grup yeni insana harika bir tartışma sergilediniz ve bu topluluğun büyümesine katkıda bulundunuz. great_share: name: Harika Paylaşım description: 1000 benzersiz ziyaretçili bir gönderi paylaştı + long_description: | + Bu rozet, 1000 farklı dış ziyaretçi tarafından tıklanan bir bağlantıyı paylaştığınız için verilir. Vay canına! İlginç bir tartışmayı büyük bir yeni kitleye tanıttınız ve topluluğumuzun büyük ölçüde büyümesine yardımcı oldunuz! first_like: name: İlk Beğeni description: Bir gönderiyi beğendi @@ -4817,6 +5010,15 @@ tr_TR: one: "En az %{count} etiket seçmelisiniz." other: "En az %{count} etiket seçmelisiniz." upload_row_too_long: "CSV dosyasında her satırda bir etiket bulunmalıdır. İsteğe bağlı olarak etiketten sonra bir virgül ve ardından etiket grubu adı gelebilir." + bulk_create: + invalid_params: "Geçersiz parametreler. Lütfen bir dizi etiket adı girin." + invalid_name: "Geçersiz etiket adı." + tag_too_long: + one: "Etiket çok uzun (maksimum %{count} karakter)." + other: "Etiket çok uzun (maksimum %{count} karakter)." + too_many_tags: + one: "Çok fazla etiket var. Bir seferde en fazla %{count} etiket oluşturabilirsiniz. Daha büyük içe aktarmalar için CSV yükleme özelliğini kullanın." + other: "Çok fazla etiket var. Bir seferde en fazla %{count} etiket oluşturabilirsiniz. Daha büyük içe aktarmalar için CSV yükleme özelliğini kullanın." forbidden: invalid: one: "Seçtiğiniz etiket kullanılamaz" @@ -4843,6 +5045,9 @@ tr_TR: rss_by_tag: "%{tag} etiketli konular" finish_installation: congratulations: "Tebrikler, Discourse'u yüklediniz!" + login_with_discourse_id: "Discourse ID ile giriş yapın" + discourse_id_help: "Lütfen aşağıdaki düğmeyi kullanarak Discourse ID ile giriş yapın.

`DISCOURSE_DEVELOPER_EMAILS` ortam değişkeniyle eşleşen birincil e-posta adresine sahip bir Discourse ID hesabı kullandığınızdan emin olun." + discourse_id_error_help: "Şu anda e-posta kurulumunu atlamayı seçtiniz. Ne yazık ki, yukarıdaki hata mesajı nedeniyle kurulum devam edemiyor. Lütfen bu sorunu meta.discourse.org adresinde bildirin." register: button: "Kayıt Ol" title: "Yönetici Hesabı Aç" @@ -4854,6 +5059,10 @@ tr_TR: resend_email: title: "Etkinleştirme E-postasını Yeniden Gönder" message: "

%{email} adresine etkinleştirme e-postasını yeniden gönderdik" + discourse_id: + help: "Şu anda sizin için Discourse ID'yi kuruyoruz." + no_allowed_emails: "DISCOURSE_DEVELOPER_EMAILS'de izin verilen e-posta adresi yapılandırılmamış. Site kurulumu devam ettirilemiyor." + global_notice: "Henüz hiçbir yönetici oturum açmadı. Kurulumu tamamlamak için, `DISCOURSE_DEVELOPER_EMAILS` ortam değişkeniyle eşleşen bir e-posta adresiyle Discourse ID hesabını kullanarak oturum açın." safe_mode: title: "Güvenli moda gir" description: "Güvenli mod, temaları veya istemci tarafı eklenti özelleştirmelerini yüklemeden sitenizi test etmenize olanak tanır. Sunucu tarafı eklenti özelleştirmeleri etkin durumda kalır." @@ -4865,15 +5074,19 @@ tr_TR: enter: "Güvenli Moda Gir" must_select: "Güvenli moda girmek için en az bir seçenek belirlemelisiniz." dev_mode: - enter: "Enter" + title: "Geliştirici Modu" + enable_rack_mini_profiler: "Rack Mini Profiler'ın oturum değişiklikleri arasında 1 saat boyunca kalıcı olmasını etkinleştirin" + enter: "Geliştirici Moduna Gir" wizard: title: "Discourse Kurulumu" step: setup: title: "Başlarken" + description: "Topluluğunuzu temel özelliklerle kurmaya başlayalım. Bunları daha sonra istediğiniz zaman değiştirebilirsiniz." fields: title: label: "Topluluk adı" + placeholder: "Jane'in Takılma Yeri" default_locale: label: "Dil" login_required: @@ -4921,9 +5134,20 @@ tr_TR: review_by: "İnceleyen:" pr_summary: "%{commits} işlem %{changed_files} dosyalarını %{additions} eklemeler ve %{deletions} silmelerle değiştirdi" no_description: "GitHub'da bir hesap oluşturarak %{repo} geliştirmesine katkıda bulunun." + pr_title: + default: "Çekme İsteği" + draft: "Taslak Çekme İsteği" + open: "Çekme isteği aç" + approved: "Onaylanmış Çekme İsteği" + changes_requested: "Değişiklik talep edildi" + merged: "Birleştirilmiş Çekme İsteği" + closed: "Kapalı Çekme İsteği" status_date: open: "açıldı" + draft: "taslağı hazırlanmış" approved: "onaylanmış mı" + changes_requested: "değişiklikler talep edildi" + merged: "birleştirildi" closed: "kapatıldı" discourse_push_notifications: popup: @@ -4939,9 +5163,12 @@ tr_TR: confirm_body: "Başarılı! Bildirimler etkinleştirildi." custom: "%{site_title}'da %{username} adlı kullanıcıdan bildirim" staff_action_logs: + redacted: "[içerik görünmüyor]" json_too_long: "Sütun uzunluğu sınırlarını aştığından değerler günlüğe kaydedilmiyor" not_found: "bulunamadı" unknown: "bilinmeyen" + site_setting: + update_existing_users: "mevcut kullanıcıları güncelle? %{value}" user_merged: "%{username} bu hesapla birleştirildi" user_delete_self: "%{url} adresinden kendisi tarafından silindi" webhook_deactivation_reason: "Web kancanız otomatik olarak devre dışı bırakıldı. Birden fazla \"%{status}\" HTTP durum hatası yanıtı aldık." @@ -4962,9 +5189,14 @@ tr_TR: auto_deleted_hidden_posts: "Gizli gönderiler otomatik olarak yok edildi" seed_data_topic_updated: "Tohum veri konusu güncellendi" seed_data_topic_deleted: "Tohum veri konusu silindi" + upcoming_changes: + log_manually_toggled: "Kullanıcı tarafından manuel olarak açılıp kapatılır." + log_promoted: > + Bu yaklaşan değişiklik ‘%{change_status}’ durumuna ulaştı, bu nedenle sitenizde otomatik olarak etkinleştirildi. Daha fazla ayrıntı için yaklaşan değişiklikler sayfasına bakın. reviewables: already_handled: "Teşekkürler, ancak bu gönderiyi zaten inceledik ve tekrar bayrak eklenmesine gerek olmadığına karar verdik." already_handled_and_user_not_exist: "Teşekkürler, ancak biri zaten incelemiş ve o kullanıcı artık mevcut değil." + post_restored_by_author: "Gönderi yazar tarafından geri yüklendi" priorities: low: "Düşük" medium: "Orta" @@ -5030,14 +5262,19 @@ tr_TR: description: "Bayrağı kabul edin ve bu gönderiyi gizleyin + otomatik olarak kullanıcıya bu gönderiyi düzenlemesini isteyen bir mesaj gönderin" complete: "Gönderi gizlendi, kullanıcı bilgilendirildi." agree_and_edit: + title: "Yazıyı düzenle" description: "Bayrağı kabul edin ve gönderiyi düzenlemek için bir besteci penceresi açın." complete: "Bayrak onaylandı, artık gönderiyi düzenleyebilirsiniz." delete: title: "Sil" complete: "Gönderi silindi." delete_and_ignore: + title: "Gönderiyi sil ve bayrağı yok say" + description: "Gönderiyi silin ve kuyruktan kaldırarak bildirimi yok sayın; ilk gönderiyse, konuyu da silin. " complete: "Gönderi silindi." delete_and_ignore_replies: + title: "Gönderiyi ve yanıtları sil, bayrağı yok say" + description: "Gönderiyi ve tüm yanıtlarını silin, ardından kuyruktan kaldırarak bildirimi yok sayın; ilk gönderi ise konuyu da silin." confirm: "Gönderiye verilen yanıtları da silmek istediğinizden emin misiniz?" complete: "Gönderi ve yanıtlar silindi." delete_and_agree: @@ -5051,19 +5288,23 @@ tr_TR: complete: "Gönderi ve yanıtlar silindi." disagree_and_restore: title: "Gönderiyi geri yükle" + description: "Bayrağa onay verme ve gönderiyi geri yükle" complete: "Gönderi geri yüklendi." disagree_bundle: title: "Hayır" disagree: title: "Gönderiyi tut" + description: "Bayrağa katılmıyorum" complete: "Bayrak yok sayıldı." discard_post: title: "Gönderiyi sil" complete: "Gönderi silindi." revise_and_reject_post: + title: "Revizyon isteği..." complete: "Gönderi reddedildi ve revizyon bekleniyor." ignore: title: "Yok say" + description: "Herhangi bir işlem yapmadan kuyruktan kaldırın." complete: "Bayrak yok sayıldı." ignore_and_do_nothing: title: "Hiçbir şey yapma" @@ -5091,6 +5332,7 @@ tr_TR: title: "Hayır" delete: title: "Kullanıcıyı Sil" + description: "Engellemeden kullanıcıyı sil" complete: "Kullanıcı silindi." block: title: "Kullanıcıyı Sil ve Engelle" @@ -5100,6 +5342,7 @@ tr_TR: title: "Evet" not_spam: title: "Hayır" + description: "Spam değil, kullanıcıyı onayla" reject: title: "Reddet" bundle_title: "Reddet…" @@ -5112,9 +5355,13 @@ tr_TR: reject_and_delete: title: "Reddet ve Gönderiyi Sil" complete: "Gönderi reddedildi ve silindi." + reject_and_delete_standalone: + title: "Hayır, gönderiyi sil" reject_and_keep_deleted: title: "Gönderiyi silinmiş olarak tut" complete: "Gönderi reddedildi ve silinmiş olarak kaldı." + reject_and_keep_deleted_standalone: + title: "Hayır, silinen gönderiyi sakla" scrub: title: Temizleme kaydı approve_and_restore: @@ -5123,31 +5370,52 @@ tr_TR: approve_and_unhide: title: "Evet" complete: "Gönderi onaylandı ve gizlemesi kaldırıldı" - no_action_post: - title: "Eylem yok" + post_actions: + bundle_title: "Bu gönderiyle ne yapmak istiyorsunuz?" delete_post: title: "Gönderiyi sil" + description: "Bu gönderiyi sil" complete: "Gönderi silindi" hide_post: title: "Gönderiyi gizle" + description: "Bu gönderiyi herkesten gizle" + complete: "Gizli gönderi" + unhide_post: + title: "Gönderiyi göster" + description: "Bu gönderiyi tüm kullanıcılar için görünür hale getir" + complete: "Gönderi gizlilikten çıkarıldı" restore_post: title: "Gönderiyi geri yükle" + description: "Silinen bu gönderiyi geri yükle" complete: "Gönderi geri yüklendi" - no_action_user: - title: "Eylem yok" + edit_post: + title: "Yazıyı düzenle" + description: "Bu gönderinin içeriğini düzenle" + complete: "Gönderi düzenlendi" + user_actions: + bundle_title: "Kullanıcıyla ne yapmak istiyorsunuz?" silence_user: title: "Kullanıcıyı sustur" + description: "Kullanıcının gönderi yapmasını engelle" complete: "Kullanıcı susturuldu" + reason: "Kullanıcı inceleme kuyruğu aracılığıyla susturuldu" suspend_user: title: "Kullanıcıyı askıya al" + description: "Kullanıcı hesabını askıya al" complete: "Kullanıcı askıya alındı" + reason: "İnceleme kuyruğu aracılığıyla askıya alınan kullanıcı" delete_user: title: "Kullanıcı sil" + description: "Bu kullanıcıyı forumdan sil" complete: "Kullanıcı silindi" reason: "İnceleme kuyruğu aracılığıyla silindi" delete_and_block_user: + title: "Sil ve engelle" + description: "Kullanıcıyı silin ve IP adresini/e-posta adresini engelleyin." complete: "Kullanıcı silindi ve engellendi" delete_user_block: + title: "Sil ve engelle" + description: "Kullanıcıyı silin ve IP adresini/e-posta adresini engelleyin." complete: "Kullanıcı silindi ve engellendi" email_style: html_missing_placeholder: "Html şablonu %{placeholder} içermeli" @@ -5192,6 +5460,11 @@ tr_TR: reserved_id: "kimlik olarak ayrılmış bir anahtar kelimeye sahip: %{id}" unsafe_description: "güvenli olmayan bir HTML açıklaması var" invalid_tag_group: "geçersiz etiket grubuna sahip: %{tag_group_name}" + discourse_id: + already_registered: "Bu site Discourse ID'ye zaten kayıtlıdır." + errors: + not_configured: "Discourse ID yapılandırılmamıştır. Lütfen önce Discourse ID'yi etkinleştirin." + regenerate_failed: "Kimlik bilgilerini yeniden oluşturulamadı. Lütfen daha sonra tekrar deneyin." activemodel: errors: <<: *errors diff --git a/config/locales/server.ug.yml b/config/locales/server.ug.yml index afcb0d7a51572..e557a27e956f6 100644 --- a/config/locales/server.ug.yml +++ b/config/locales/server.ug.yml @@ -60,8 +60,6 @@ ug: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} / %{username}" - too_many_urls: "بىر ئىلتىماستا 10 دىن ئارتۇق تور ئادرېسىنى كۆرۈنۈش قۇتىسىنىڭ بىر قۇرىغا سىغدۇرغىلى بولمايدۇ." - concurrency_not_allowed: "بىرلا ۋاقىتتا بىر قانچە ئىچكى onebox ئىلتىماس قىلىشقا يول قويۇلمايدۇ. بىر قېتىمدا بىر ئىلتىماس يوللاڭ." components: enabled_filter: "قوزغىتىلدى" disabled_filter: "چەكلەندى" @@ -344,7 +342,6 @@ ug: slow_down_crawler_user_agent_must_be_at_least_3_characters: "تاسادىپىي قانۇنلۇق ئىشلەتكۈچىنى سۈرئىتىنى چەكلەشنىڭ ئالدىنى ئېلىش ئۈچۈن ئىشلەتكۈچى ۋاكالەتچىنىڭ ئۇزۇنلۇقى كەم دېگەندە 3 ھەرپ بولۇشى كېرەك." slow_down_crawler_user_agent_cannot_be_popular_browsers: "تۆۋەندىكى ھەر قانداق قىممەتنى تەڭشەككە قوشالمايسىز: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "ئەگەر «كومپوزىتور ۋاسىتە ئەلالاشتۇرۇش سۈرىتى قوزغىتىلغان» نى قوزغاتقان بولسا، بەلگە سۈرەت مېتا سانلىق مەلۇماتىنى چەكلىيەلمەيسىز. بەلگە سۈرەت مېتا سانلىق مەلۇماتىنى چەكلەشتىن بۇرۇن «كومپوزىتور ۋاسىتە ئەلالاشتۇرۇش سۈرىتى قوزغىتىلغان» نى چەكلەڭ." - x_summary_large_image_no_svg: "twitter:image مېتا سانلىق مەلۇماتىغا ئىشلىتىلىدىغان Twitter خۇلاسە سۈرەت .sage سۈرەت بولسا بولمايدۇ." tl0_and_anonymous_flag: "چوقۇم «تور بېكەت ئالاقە ئېلخېتى» ياكى «قانۇنسىز مەزمۇننى پاش قىلىدىغان ئېلخەت ئادرېسى» نى نامسىز ئىشلەتكۈچىلەرگە تەمىنلەش كېرەك." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "بۇ تەڭشەك ئالدى بىلەن «نامسىز ھالەتكە يول قوي» تەڭشىكىنى قوزغىتىشنى تەلەپ قىلىدۇ." conflicting_google_user_id: 'بۇ ھېساباتنىڭ Google ھېسابات كىملىكى ئۆزگەردى؛ بىخەتەرلىك سەۋەبىدىن باشقۇرغۇچى خادىملار مۇداخىلە قىلىشى كېرەك. باشقۇرغۇچى خادىملار بىلەن ئالاقىلىشىپ، ئۇلارنى
https://meta.discourse.org/t/76575 نىشانلاڭ.' @@ -1134,6 +1131,7 @@ ug: read: "ئوقۇ" read_write: "ئوقۇ/ياز" instructions: 'بىز «%{application_name}» بىلەن ماسلاشتۇرۇپ ئىشلىتىش ئۈچۈن سىزگە يېڭى ئىشلەتكۈچى API شىفىرلىق ئاچقۇچى ھاسىللىدۇق، تۆۋەندىكى شىفىرلىق ئاچقۇچنى پىروگراممىڭىزغا كۆچۈرۈڭ:' + copied: "كۆچۈرۈلدى!" otp_description: '«%{application_name}» نىڭ بۇ تور بېكەتنى زىيارەت قىلىشىغا يول قويامسىز؟' otp_confirmation: confirm_title: '%{site_name} زىيارىتىنى داۋاملاشتۇرىدۇ' @@ -1212,9 +1210,10 @@ ug: description: "پاش قىلىشنىڭ تىپى، يوللىغۇچى، پاش قىلغۇچى ۋە ھەل قىلىش ۋاقتىنى ئۆز ئىچىگە ئالغان پاش قىلىش ھالىتى تىزىمى." visits: title: "ئىشلەتكۈچى زىيارەت" - xaxis: "كۈن" + xaxis: + desktop: "ئۈستەل يۈزى" + mobile: "كۆچمە" yaxis: "زىيارەت قېتىم سانى" - description: "تىزىمغا كىرگەن ئىشلەتكۈچىنىڭ زىيارەت سانى." signups: title: "تىزىملىتىش" xaxis: "كۈن" @@ -1276,10 +1275,8 @@ ug: description: "تىزىمغا كىرگەن ئىشلەتكۈچى، نامسىز ئىشلەتكۈچى ۋە تونۇش ئۆمىلىگۈچى ۋە باشقا ئېقىمنىڭ بەت كۆرۈلۈشى." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "كۈندىلىك ئاكتىپ ئىشلەتكۈچى/ئايلىق ئاكتىپ ئىشلەتكۈچى" xaxis: "كۈن" yaxis: "كۈندىلىك ئاكتىپ ئىشلەتكۈچى/ئايلىق ئاكتىپ ئىشلەتكۈچى" - description: "ئۆتكەن بىر كۈندە تىزىمغا كىرگەن ئەزا سانىنى ئۆتكەن بىر ئايدا تىزىمغا كىرگەن ئىشلەتكۈچىگە بۆلگەندىكى سان - قايتۇرغان قىممىتى جامائەتنىڭ يېپىشقاقلىقىنى ئەكس ئەتتۈرىدۇ، نىشان >%20" daily_engaged_users: title: "كۈندىلىك قاتناشقۇچىلار" xaxis: "كۈن" @@ -1774,7 +1771,6 @@ ug: slow_down_crawler_rate: "ئەگەر slow_down_crawler_user_agents بەلگىلەنگەن بولسا، بۇ نىسبەت بارلىق ئۆمىلىگۈچ (ئىككى قېتىملىق ئىلتىماس ئارىسىدىكى كۈتىدىغان سېكۇنت سانى) لەرگە قوللىنىلىدۇ" content_security_policy: "مەزمۇن بىخەتەرلىك تۈزۈمى(CSP) قوزغىتىلسا، CSP بىر قوشۇمچە بىخەتەرلىك قەۋىتى بولۇپ، بەزى خىلدىكى يەنى بېكەت ھالقىغان قوليازما (XSS) ۋە سانلىق مەلۇمات ئوكۇلىغا ئوخشاش سانلىق مەلۇمات ھۇجۇملىرىنىڭ ئالدىنى ئالىدۇ." content_security_policy_report_only: "مەزمۇن بىخەتەرلىك تۈزۈمى (CSP) دوكلاتىنىلا قوزغات" - content_security_policy_collect_reports: "/ Csp_reports دىكى CSP بەلگىلىمىگە خىلاپلىق قىلىش دوكلاتى توپلاشنى قوزغىتىدۇ" content_security_policy_frame_ancestors: "كىمنىڭ بۇ تور بېكەتنى CSP ئارقىلىق iframe گە سىڭدۈرەلەيدىغانلىقىنى چەكلەيدۇ. سىڭدۈرۈشتە يول قويۇلىدىغان مۇلازىمېتىرنى تېزگىنلەيدۇ." content_security_policy_script_src: "يول قويۇش تىزىمىغا قوشۇلغان باشقا قوليازما مەنبەسى. كۆڭۈلدىكى ئەھۋالدا نۆۋەتتىكى مۇلازىمېتىر ۋە CDN نى ئۆز ئىچىگە ئالىدۇ. مەزمۇن بىخەتەرلىك تۈزۈمى (CSP) نى ئىشلىتىش ئارقىلىق XSS ھۇجۇمىنى ئازايتىدۇ ئەگەر strict-dynamic قوزغىتىلغاندا، باشقا مۇلازىمېتىر مەنبەسىگە پەرۋا قىلمايدۇ." invalidate_inactive_admin_email_after_days: "مۇشۇ كۈن ئىچىدە تور بېكەتنى زىيارەت قىلمىغان باشقۇرغۇچى ھېساباتى تىزىمغا كىرىشتىن ئىلگىرى ئېلخەت ئادرېسىنى قايتا دەلىللىشى كېرەك. 0 گە تەڭشەلسە چەكلىنىدۇ." @@ -2088,7 +2084,6 @@ ug: alternative_reply_by_email_addresses: "كەلگەن ئېلخەت ئادرېسى ئارقىلىق جاۋاب قايتۇرىدىغان زاپاس قېلىپ تىزىمى، مەسىلەن: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "كەلگەن ئېلخەتتە تېكىستنىڭ ئورنىغا HTML ئىشلىتىلىدۇ." strip_incoming_email_lines: "كەلگەن ئېلخەتنىڭ ھەر بىر قۇر بېشى ۋە ئاخىرىدىكى بوشلۇقنى چىقىرىۋېتىدۇ." - disable_emails: "Discourse نىڭ ھەر قانداق ئېلخەت يوللىشىنىڭ ئالدىنى ئالىدۇ. «ھەئە» تاللانسا بارلىق ئىشلەتكۈچىلەرگە ئېلخەتنى چەكلەيدۇ. «باشقۇرغۇچى بولمىغانلار» تالانسا پەقەت باشقۇرغۇچى بولمىغان ئىشلەتكۈچىلەرگىلا ئېلخەتنى چەكلەيدۇ." strip_images_from_short_emails: "سىغىمى 2800 بايتتىن تۆۋەن بولغان ئېلخەتتىكى سۈرەتنى چىقىرىۋېتىدۇ" short_email_length: "ئېلخەتنى «قىسقا» دەپ تۈرگە ئايرىپ بايت بىلەن ئىپادىلىنىدىغان ئەڭ چوڭ سۈرەت چوڭلۇقىنى چەكلەشنى بەلگىلەيدۇ. ئەگەر ئېلخەتنىڭ چوڭلۇقى بۇ تەڭشەكتىكى قىممەتتىن ئېشىپ كەتمىسە، ئېلخەتتىكى ھېچقانداق سۈرەت (سىما ۋە چىراي ئىپادىگە ئوخشاش) نىڭ ھەممىسى چىقىرىۋېتىلىدۇ." display_name_on_email_from: "ئېلخەت يوللىغۇچى بۆلىكىدە تولۇق ئىسمىنى كۆرسىتىدۇ" @@ -2106,6 +2101,7 @@ ug: mailgun_api_key: "تور ئىلمىكى ئۇچۇرىنى دەلىللەشكە ئىشلىتىدىغان Mailgun بىخەتەرلىك API ئاچقۇچى." sendgrid_verification_key: "تور ئىلمىكى ئۇچۇرىنى دەلىللەشكە ئىشلىتىدىغان Sendgrid دەلىللەش ئاچقۇچى." mailjet_webhook_token: "تور ئىلمىكىنىڭ يۈكىنى دەلىللەشكە ئىشلىتىدىغان پەرمان تاختىسى. ئۇ چوقۇم تور ئىلمىكىنىڭ «t» سۈرۈشتۈرۈشىنىڭ پارامېتىرى بولۇپ يوللىنىدۇ، مەسىلەن: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "تور ئىلمىكىنىڭ يۈكىنى دەلىللەشكە ئىشلىتىدىغان پەرمان تاختىسى. ئۇ چوقۇم تور ئىلمىكىنىڭ «t» سۈرۈشتۈرۈشىنىڭ پارامېتىرى بولۇپ يوللىنىدۇ، مەسىلەن: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "تور ئىلمىكى ئۇچۇرىنى دەلىللەشكە ئىشلىتىدىغان Sendgrid سالاھىيەت دەلىللەش ئاچقۇچى." postmark_webhook_token: "تور ئىلمىكىنىڭ يۈكىنى دەلىللەشكە ئىشلىتىدىغان پەرمان تاختىسى. ئۇ چوقۇم تور ئىلمىكىنىڭ «t» سۈرۈشتۈرۈشىنىڭ پارامېتىرى بولۇپ يوللىنىدۇ، مەسىلەن: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "تور ئىلمىكىنىڭ يۈكىنى دەلىللەشكە ئىشلىتىدىغان پەرمان تاختىسى. ئۇ چوقۇم تور ئىلمىكىنىڭ «t» سۈرۈشتۈرۈشىنىڭ پارامېتىرى بولۇپ يوللىنىدۇ، مەسىلەن: https://example.com/webhook/sparkpost?t=supersecret" @@ -2177,7 +2173,6 @@ ug: group_in_subject: "ئېلخەت ماۋزۇسىدا %%{optional_pm} نى شەخسىي ئۇچۇردىكى تۇنجى گۇرۇپپا ئىسمىغا تەڭشەيدۇ، ئۆلچەملىك ئېلخەتنىڭ ماۋزۇ پىچىمىنى خاسلاشتۇرۇشتىن كۆرۈڭ" allow_anonymous_mode: "ئىشلەتكۈچىنىڭ نامسىز ھالەتكە ئالمىشىپ يازما يوللاش تاللانمىسىنى قوزغىتىدۇ. ئاكتىپلانغاندىن كېيىن، ئىشلەتكۈچى تور بېكەتتە يازما ياكى تېما قۇرسا سالاھىيىتىنى يوشۇرالايدۇ. ئۇنىڭدىن باشقا «نامسىز ياقتۇرۇشقا يول قويىدۇ» نى كۆرۈڭ." anonymous_account_duration_minutes: "نامسىز ئىشلەتكۈچىنى قوغداش ئۈچۈن، ھەر N مىنۇتتا ھەر بىر ئىشلەتكۈچى ئۈچۈن بىر يېڭى نامسىز ھېسابات قۇرىدۇ. مىسال: ئەگەر 600 گە تەڭشەلسە، ئالدىنقى قېتىم يازما يوللىغانغا 600 مىنۇت بولۇپ نامسىز ئىشلەتكۈچى ھالىتىگە ئالماشقاندا، يېڭى بىر نامسىز ئىشلەتكۈچى قۇرىدۇ." - hide_user_profiles_from_public: "نامسىز ئىشلەتكۈچىنىڭ ئىشلەتكۈچى كارتىسى، ئىشلەتكۈچى تەرجىمىھالى ۋە ئىشلەتكۈچى مۇندەرىجىسىنى چەكلەيدۇ." hide_new_user_profiles: "ئىشەنچ دەرىجىسى 1 ياكى ئۇنىڭدىن تۆۋەن ئىشلەتكۈچىلەرنىڭ تەرجىمىھالىنى ئاممىغا يوشۇرىدۇ ھەمدە ئىشەنچ دەرىجىسى 1 بولغان ئىشلەتكۈچى تۇنجى يازمىسىنى يوللىمىغۇچە ئۇنى يوشۇرىدۇ. بۇ ئىقتىدار must_approve_users ۋە invite_only sites تور بېكىتىدە شەرتسىز چەكلىنىدۇ." allow_users_to_hide_profile: "ئىشلەتكۈچىنىڭ تەرجىمىھالى ۋە ھالىتىنى يوشۇرۇشقا يول قويىدۇ" hide_user_activity_tab: "ئىشلەتكۈچى تەرجىمىھالىدىكى پائالىيەت بەتكۈچىنى يوشۇرىدۇ، باشقۇرغۇچى ۋە ئۆزى بۇنىڭ سىرتىدا." @@ -2441,12 +2436,6 @@ ug: reply_by_email_disabled: "بۇ تەڭشەكنى قوزغىتىشتىن ئىلگىرى ئالدى بىلەن «ئېلخەتتە جاۋاب قايتۇر» نى قوزغىتىشىڭىز كېرەك." discourse_connect_url_is_empty: "بۇ تەڭشەكنى قوزغىتىشتىن ئىلگىرى «discourse ئۇلىنىش تور ئادرېسى» نى تەڭشىشىڭىز كېرەك." enable_local_logins_disabled: "بۇ تەڭشەكنى قوزغىتىشتىن ئىلگىرى ئالدى بىلەن «يەرلىكتە تىزىمغا كىرىشنى قوزغات» نى قوزغىتىشىڭىز كېرەك." - min_username_length_exists: "ئەڭ قىسقا ئىشلەتكۈچى ئاتى ئۇزۇنلۇقىنى قىسقا ئىشلەتكۈچى ئاتى (%{username}) دىنمۇ قىسقا قىلىپ تەڭشىيەلمەيسىز." - min_group_name_length_exists: "ئەڭ قىسقا ئىشلەتكۈچى ئاتى ئۇزۇنلۇقىنى قىسقا گۇرۇپپا ئاتى (%{group_name}) دىنمۇ قىسقا قىلىپ تەڭشىيەلمەيسىز." - min_username_length_range: "ئەڭ كىچىك قىممەتنى ئەڭ چوڭ قىممەتتىن چوڭ قىلىپ تەڭشىيەلمەيسىز." - max_username_length_exists: "ئەڭ ئۇزۇن ئىشلەتكۈچى ئاتى ئۇزۇنلۇقىنى ئەڭ ئۇزۇن ئىشلەتكۈچى ئاتى (%{username}) دىن قىسقا قىلىپ تەڭشىيەلمەيسىز." - max_group_name_length_exists: "ئەڭ ئۇزۇن ئىشلەتكۈچى ئاتى ئۇزۇنلۇقىنى ئەڭ ئۇزۇن گۇرۇپپا ئاتى (%{group_name}) دىن قىسقا قىلىپ تەڭشىيەلمەيسىز." - max_username_length_range: "ئەڭ چوڭ قىممەتنى ئەڭ كىچىك قىممەتتىن كىچىك قىلىپ تەڭشىيەلمەيسىز." invalid_hex_value: "رەڭ قىممىتى ئون ئالتىلىك سىستېمىدىكى 6 خانىلىق كود بولۇشى كېرەك." empty_selectable_avatars: "بۇ تەڭشەكنى قوزغىتىشتىن ئىلگىرى ئالدى بىلەن كەم دېگەندە تاللاشچان سىمادىن ئىككىنى يۈكلىشىڭىز كېرەك." category_search_priority: @@ -2498,7 +2487,6 @@ ug: exclude_tag: "مۇئەييەن بەلگە بار تېمىنى ئۆز ئىچىگە ئالمايدۇ" exclude_tags_any: "بەلگىلەنگەن خالىغان بەلگە (پەش بىلەن ئايرىلغان) بار تېمىنى ئۆز ئىچىگە ئالمايدۇ" exclude_tags_all: "بەلگىلەنگەن ھەممە بەلگە (قوشۇش بەلگىسى بىلەن ئايرىلغان) بار تېمىنى ئۆز ئىچىگە ئالمايدۇ" - tags_alias: "«بەلگە:» سۈزگۈچنىڭ باشقا ئىسمى" tag_group: "بەلگىلەنگەن بەلگە گۇرۇپپىسىدىن بەلگىسى بار تېمىنى كۆرسىتىدۇ" exclude_tag_group: "بەلگىلەنگەن بەلگە گۇرۇپپىسىدىن بەلگىسى بار تېمىنى چىقىرىۋېتىدۇ" status_open: "ئوچۇق تېمىنى كۆرسەت (تاقالمىغان ياكى ئارخىپلانمىغان)" @@ -2906,35 +2894,9 @@ ug: new_version_mailer: title: "يېڭى نەشرىدىكى خەت" subject_template: "[%{email_prefix}] يېڭى Discourse نەشرى، يېڭىلانما بار" - text_body_template: | - ھۇررا، يېڭى نەشرىدىكى [Discourse](https://www.discourse.org) ئېلان قىلىندى! - - نەشرىڭىز: %{installed_version} - يېڭى نەشرى: **%{new_version}** - - - يېڭىلاشتا بىزنىڭ **[بىر چېكىپلا توركۆرگۈدە يېڭىلاش](%{base_url}/admin/update) نى ئىشلىتىڭ** - - - [تارقىتىش ئۇقتۇرۇشى](https://meta.discourse.org/tag/release-notes) دىكى يېڭىلىق ياكى [ئەسلى GitHub ئۆزگىرىش خاتىرىسى] (https://github.com/discourse/discourse/commits/main) نى كۆرۈشتە - - - Discourse ھەققىدىكى خەۋەر، سۆھبەت ۋە قوللاش ئۇچۇرىنى كۆرۈشتە [meta.discourse.org](https://meta.discourse.org) نى زىيارەت قىلىڭ new_version_mailer_with_notes: title: "نەشر ئىزاھاتى بار يېڭى نەشرىدىكى خەت" subject_template: "[%{email_prefix}] يېڭىلانما بار" - text_body_template: | - ھۇررا، يېڭى نەشرىدىكى [Discourse](https://www.discourse.org) ئېلان قىلىندى! - - نەشرىڭىز: %{installed_version} - يېڭى نەشرى: **%{new_version}** - - - يېڭىلاشتا بىزنىڭ **[بىر چېكىپلا توركۆرگۈدە يېڭىلاش](%{base_url}/admin/update) نى ئىشلىتىڭ** - - - [تارقىتىش ئۇقتۇرۇشى](https://meta.discourse.org/tag/release-notes) دىكى يېڭىلىق ياكى [ئەسلى GitHub ئۆزگىرىش خاتىرىسى] (https://github.com/discourse/discourse/commits/main) نى كۆرۈشتە - - - Discourse ھەققىدىكى خەۋەر، سۆھبەت ۋە قوللاش ئۇچۇرىنى كۆرۈشتە [meta.discourse.org](https://meta.discourse.org) نى زىيارەت قىلىڭ - - ###تارقىتىش ئىزاھاتى - - %{notes} flag_reasons: off_topic: "يازمىڭىز **تېمىدىن چەتنىگەن** دەپ پاش قىلىنغان: تېمىنىڭ ماۋزۇسى ۋە تۇنجى يازمىغا ئاساسەن جامائەت بۇ تېمىغا ماس كەلمەيدۇ دەپ قارايدۇ." inappropriate: "يازمىڭىز **مۇۋاپىق بولمىغان** دەپ پاش قىلىنغان: جامائەت ئۇنى كىشىنى بىزار قىلىدىغان، ھاقارەتلەيدىغان، ئۆچمەنلىككە تەۋە قىلمىش ياكى [جامائەت مىزانىمىز](%{base_path}/guidelines) غا خىلاپ دەپ قارايدۇ." @@ -2983,47 +2945,9 @@ ug: reviewable_queued_post_revise_and_reject: title: "يازمىڭىزدىكى قايتۇرما ئىنكاس" subject_template: "%{topic_title} دىكى يازمىڭىزدىكى قايتۇرما ئىنكاس" - text_body_template: | - سالام %{username}، - - بىز[%{topic_title}](%{topic_url}) دىكى يازمىڭىزنى تەكشۈردۇق ھەمدە سىزگە ئازراق ئىنكاسىمىز بار. - - سەۋەب: %{reason} - - قايتۇرما ئىنكاس: %{feedback} - - سىز تۆۋەندە ئەسلى يازمىنى تەھرىرلەپ، تەۋسىيە ئۆزگەرتىشلەرنى ئېلىپ بېرىپ، ئاندىن ئۇنى قايتا يوللىيالايسىز، ياكى ئەگەر قانداق مەسىلە بولسا مەزكۇر ئۇچۇرغا ئىنكاس يازسىڭىز بولىدۇ. - - -------- - - %{original_post} - - -------- - - كۆپ رەھمەت، - %{site_name} رىياسەتچىسى reviewable_queued_post_revise_and_reject_new_topic: title: "تېمىڭىزدىكى قايتۇرما ئىنكاس" subject_template: '«%{topic_title}» ماۋزۇلۇق يېڭى تېمىدىكى قايتۇرما ئىنكاس' - text_body_template: | - سالام %{username}، - - بىز«%{topic_title}» دىكى يازمىڭىزنى تەكشۈردۇق ھەمدە سىزگە ئازراق ئىنكاسىمىز بار. - - سەۋەب: %{reason} - - قايتۇرما ئىنكاس: %{feedback} - - سىز تۆۋەندە تېمىڭىزنىڭ ئەسلى يازمىسىنى تەھرىرلەپ، تەۋسىيە ئۆزگەرتىشلەرنى ئېلىپ بېرىپ، ئاندىن ئۇنى قايتا يوللىيالايسىز، ياكى ئەگەر قانداق سوئالىڭىز بولسا مەزكۇر ئۇچۇرغا ئىنكاس يازسىڭىز بولىدۇ. - - -------- - - %{original_post} - - -------- - - كۆپ رەھمەت، - %{site_name} رىياسەتچىسى post_hidden_again: title: "يازما قايتا يوشۇرۇلدى" subject_template: "جامائەت پاش قىلغانلىقتىن يازما يوشۇرۇلدى، باشقۇرغۇچى خادىمغا ئۇقتۇرۇش قىلىندى" @@ -4675,8 +4599,6 @@ ug: deprecation_error_label: Javascript ئىشلەتمەسلىك خاتالىقى كەلتۈرۈپ چىقىرىدۇ enter: "بىخەتەر ھالەتكە كىرىدۇ" must_select: "بىخەتەر ھالەتكە كىرىشتە كەم دېگەندە تاللاشتىن بىرى تاللىنىدۇ." - dev_mode: - enter: "Enter" wizard: title: "Discourse تەڭشەك" step: @@ -4938,9 +4860,6 @@ ug: complete: "يازما تەستىقلاندى ۋە ئاشكارىلاندى" post_actions: bundle_title: "يازمىغا نېمە ئىش قىلماقچى؟" - no_action_post: - title: "تەدبىر قوللانمىغان" - complete: "يازمىغا ھېچنېمە قىلمايدۇ" delete_post: title: "يازما ئۆچۈر" description: "بۇ يازمىنى ئۆچۈرىدۇ" @@ -4961,11 +4880,6 @@ ug: title: "يازما تەھرىر" description: "بۇ يازمىنىڭ مەزمۇنىنى تەھرىرلەيدۇ" complete: "يازما تەھرىرلەندى" - convert_to_pm: - title: "شەخسىي ئۇچۇرغا ئۆزگەرت" - description: "بۇ يازمىنى شەخسىي ئۇچۇرغا ئايلاندۇرىدۇ" - no_action_user: - title: "تەدبىر قوللانمىغان" silence_user: title: "ئىشلەتكۈچىنى ئۈنسىزلە" complete: "ئىشلەتكۈچى ئۈنسىزلەندى" diff --git a/config/locales/server.uk.yml b/config/locales/server.uk.yml index 064a13e03fef9..90ca5ac349827 100644 --- a/config/locales/server.uk.yml +++ b/config/locales/server.uk.yml @@ -19,7 +19,7 @@ uk: calendar_ics: "%Y%m%dT%H%M%SZ" date: month_names: - - null + - - Січень - Лютий - Березень @@ -60,8 +60,8 @@ uk: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number} від %{username}" - too_many_urls: "Неможливо вставити більше 10 URL-адрес в один запит." - concurrency_not_allowed: "Одночасні запити inline-oneboxing заборонені. Будь ласка, надсилайте по одному запиту." + too_many_urls: "Неможливо конвертувати більше 10 URL-адрес у вбудовані OneBox за один запит." + concurrency_not_allowed: "Одночасні запити на перетворення URL-адрес у вбудовані OneBox не дозволені. Надсилайте по одному запиту за раз." components: enabled_filter: "Включено" disabled_filter: "Вимкнено" @@ -300,6 +300,7 @@ uk: errors: &errors format: ! "%{attribute} %{message}" format_with_full_message: "%{attribute}: %{message}" + diff_too_complex: "Різниця занадто складна для безпечного обчислення. Будь ласка, спробуйте менші зміни." messages: invalid_locale: "%{invalid_locale} не є дійсною локаллю" too_long_validation: @@ -401,7 +402,7 @@ uk: slow_down_crawler_user_agent_must_be_at_least_3_characters: "Значення «User agent» мають містити щонайменше 3 символи, щоб уникнути обмеження швидкості сканування." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Ви не можете додати жодного з наведених нижче значень до параметра: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Ви не можете вимкнути видалення метаданих зображення, якщо ввімкнено оптимізацію зображення для редактора на боці клієнта. Вимкніть 'composer media optimization image enabled', перш ніж вимикати метадані зображення." - x_summary_large_image_no_svg: "Зображення для Twitter, що використовуються для twitter:image metadata не може бути у форматі .svg." + x_summary_large_image_no_svg: "Зображення зведення X, що використовуються для метаданих twitter:image, не можуть бути зображеннями .svg." tl0_and_anonymous_flag: "Для анонімних користувачів необхідно вказати або «контактну електронну адресу сайту», або «електронну адресу для повідомлення про незаконний вміст»." allow_likes_in_anonymous_mode_without_anonymous_mode_enabled: "Для цього параметра потрібно спочатку увімкнути параметр «дозволити анонімний режим»." conflicting_google_user_id: 'Ідентифікатор облікового запису Google для цього облікового запису змінився; потрібне втручання команди обслуговування через міркування безпеки. Будь ласка, звʼяжіться з командою обслуговування і вкажіть на
https://meta.discourse.org/t/76575' @@ -685,6 +686,7 @@ uk: many: "Одночасно можна додати не більше %{count} користувачів" other: "Одночасно можна додати не більше %{count} користувачів" usernames_or_emails_required: "Потрібно вказати імʼя користувачів або адреси електронної пошти." + cannot_add_emails: "До цієї групи можна додавати лише імена користувачів. Щоб запросити електронною поштою, скористайтеся кнопкою Запросити." counting_too_many_email_domains: one: "Максимальна кількість %{count} домен електронної пошти може бути одночасно" few: "Максимальна кількість %{count} домени електронної пошти може бути одночасно" @@ -896,6 +898,7 @@ uk: invalid_email_in: "'%{email}' не є вірною адресою електронної пошти" email_already_used_in_group: "'%{email}' вже використовується групою '%{group_name}'." email_already_used_in_category: "'%{email}' вже використовується розділом '%{category_name}'." + groups_required_for_mode: "Ви повинні вибрати принаймні одну групу для %{setting}." description_incomplete: "Опис розділу повинен мати принаймні один абзац." description_too_long: one: "Опис занадто довгий (максимум %{count} символ)." @@ -918,6 +921,12 @@ uk: other: "Неможливо видалити цей розділ, тому що в ньому міститься %{count} тем. Найстаріша тема %{topic_link}." topic_exists_no_oldest: "Неможливо видалити цей розділ, тому що кількість тем у ньому дорівнює %{count}." uncategorized_description: "Теми, які не потребують розділів або не підходять до жодного іншого наявного розділу." + category_types: + not_available: "Тип категорії '%{type_name}' недоступний" + discussion: + name: "Обговорення" + title: "обговорення" + description: "Стандартна категорія з усіма аспектами розмови." trust_levels: admin: "Адміністратор" staff: "Команда обслуговування" @@ -1207,6 +1216,8 @@ uk: connection_error: "Виникла проблема зʼєднання з сервером, перевірте імʼя сервера і порт та спробуйте знову." timeout_error: "Час очікування зʼєднання з сервером вичерпано, перевірте імʼя сервера і порт та спробуйте знов." unhandled_error: "Невідома помилка під час перевірки параметрів електронної пошти. %{message}" + invalid_host: "Наданий хост відповідає забороненій IP-адресі." + host_resolve_failed: "Не вдалося розпізнати наданий хост." webauthn: validation: invalid_type_error: "Наданий тип webauthn був недійсним. Дійсні типи є webauthn.get та webauthn.create." @@ -1291,6 +1302,8 @@ uk: weekly: "щотижня" every_month: "щомісяця" every_six_months: "кожні півроку" + calendar_subscriptions: + application_name: "Підписки на календар" user_api_key: title: 'Авторизувати "%{application_name}"' authorize: "Авторизувати" @@ -1301,6 +1314,8 @@ uk: permissions_header: 'Це дозволить "%{application_name}" до:' redirect_warning: "Авторизація перенаправить вас на" instructions: 'Ми щойно створили новий ключ API користувача для використання з «%{application_name}», додайте наступний ключ у свою програму:' + copy_key: "Копіювати ключ" + copied: "Скопійовано!" otp_description: 'Чи бажаєте ви дозволити "%{application_name}" доступ до цього сайту?' otp_confirmation: confirm_title: Продовжити у %{site_name} @@ -1379,9 +1394,11 @@ uk: description: "Список статусів скарг, включаючи тип скарги, дописувачі, доповідачі та час розвʼязання." visits: title: "Візити користувачів" - xaxis: "День" + xaxis: + desktop: "Десктоп" + mobile: "Мобільний" yaxis: "Кількість візитів" - description: "Кількість відвідувань зареєстрованих користувачів." + description: "Кількість відвідувань користувачів, що пройшли авторизацію за типом пристрою." signups: title: "Реєстрації" xaxis: "Дата" @@ -1445,10 +1462,10 @@ uk: description: "Перегляди сторінок для зареєстрованих користувачів, анонімних користувачів, відомих сканерів та іншого трафіку." description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" + title: "DAU / MAU" xaxis: "День" yaxis: "DAU/MAU" - description: "Кількість учасників, які увійшли в систему в останній день, поділене на кількість учасників, які увійшли в систему минулого місяця, повертає %, який вказує на 'привабливість' спільноти. Мета >20%." + description: "Частка активних учасників щомісяця, які повернулися за останній день. Цей відсоток показує, як регулярно люди повертаються; також називається «прив’язаністю» спільноти. Прагніть до > 20%." daily_engaged_users: title: "Щоденно Залучені Користувачі" xaxis: "День" @@ -1865,6 +1882,8 @@ uk: max_oneboxes_per_post: "Встановіть максимальну кількість ящиків, які можна включити в одну публікацію. Oneboxes забезпечує попередній перегляд пов’язаного вмісту в публікації." facebook_app_access_token: "Токен, згенерований з ідентифікатора додатка Facebook і секрету. Використовується для генерації розумних вставок Instagram." github_onebox_access_tokens: "Зіставлення організації GitHub або користувача з токеном доступу до GitHub, який використовується для створення GitHub однобоксів для приватного репозиторію, коміти, запити, задачі та вміст файлу. Без цього будуть лише публічні GitHub URL-адреси." + reddit_onebox_client_id: "Ідентифікатор клієнта OAuth API Reddit, який використовується для автентифікованих OneBox на Reddit. Створіть програму типу «скрипт» на сайті reddit.com/prefs/apps, щоб отримати облікові дані." + reddit_onebox_client_secret: "Секретний ключ клієнта Reddit API OAuth, який використовується для автентифікованих OneBox на Reddit. Знаходиться в додатку типу «скрипт», створеному на reddit.com/prefs/apps." logo: "Зображення логотипа в лівому верхньому кутку вашого сайту. Використовуйте широке прямокутне зображення висотою 120 і співвідношенням сторін більше 3:1. Якщо залишити поле порожнім, буде показаний текст заголовка сайту." logo_small: "Невелике зображення логотипа в лівому верхньому кутку вашого сайту, видно при прокручуванні вниз. Використовуйте квадратне зображення 120×120. Якщо залишити порожнім, буде показаний домашній гліф." digest_logo: "Альтернативне зображення логотипа, що використовується у верхній частині e-mail пошти вашого сайту. Використовуйте зображення широкого прямокутника. Не використовуйте SVG-зображення. Якщо залишити порожнім, буде використовуватися зображення з налаштування `logo `." @@ -1947,6 +1966,7 @@ uk: moderators_manage_categories: "Дозволити модераторам створювати категорії та керувати ними" moderators_manage_groups: "Дозволити модераторам створювати групи та керувати ними" moderators_change_post_ownership: "Дозволити модераторам змінювати власника допису" + change_post_ownership_allowed_groups: "Дозволити користувачам у цих групах змінювати власника публікацій" cors_origins: "Дозволити origins для запитів CORS. Кожне origin повинне містити http:// або https://. Змінна DISCOURSE_ENABLE_CORS env повинна бути true, щоб увімкнути CORS." use_admin_ip_allowlist: "Адміністратори можуть увійти в систему тільки в тому випадку, якщо їх IP-адреса вказана в білому списку (Адміністратор > Журнали > IP-адреси)." blocked_ip_blocks: "Список приватних діапазонів IP-адрес, які ніколи не повинні скануватися Discurse" @@ -1960,7 +1980,6 @@ uk: llms_txt: "Завантажте текстовий файл, який буде відображатися за адресою /llms.txt для сканерів LLM. Див. llmstxt.org для отримання додаткової інформації." content_security_policy: "Увімкнути політику безпеки вмісту (CSP). CSP - це додатковий шар безпеки, який допомагає запобігти деяким типам атак, в тому числі Cross Site Scripting (XSS) та під час введення даних." content_security_policy_report_only: "Увімкнути політику безпеки вмісту, лише звіт (CSP)" - content_security_policy_collect_reports: "Увімкнути збір звітів про порушення CSP на /csp_reports" content_security_policy_frame_ancestors: "Обмежити за допомогою CSP, хто може вбудувати цей сайт в iframes. Керування дозволеними хостами у Вбудовування" content_security_policy_script_src: "Додаткові дозволені джерела скриптів. Поточний хост і CDN включено за замовчуванням. Див. статтю Запобігання XSS-атакам за допомогою політики безпеки вмісту. (CSP). Джерела інших хостів ігноруються, оскільки увімкнено строгий динамічний режим." invalidate_inactive_admin_email_after_days: "Облікові записи адміністраторів, які не відвідували сайт протягом цієї кількості днів, потрібно буде повторно підтвердити свою електронну адресу пошти перед входом у систему. Встановіть 0, щоб вимкнути." @@ -2046,7 +2065,7 @@ uk: enable_local_logins_via_email: "Дозвольте користувачам запитувати посилання для входу в один клік, яке буде надіслано їм електронною поштою." allow_new_registrations: "Дозволити реєстрацію нових користувачів. Зніміть цей прапорець, щоб ніхто не міг створити новий обліковий запис." enable_signup_cta: "Показувати сповіщення анонімним користувачам, що повертаються, із проханням зареєструвати обліковий запис." - enable_discourse_id: "Увімкніть автентифікацію за допомогою Discourse ID, служби єдиного входу, яка дозволяє користувачам входити на кілька сайтів Discourse за допомогою одного облікового запису. Поширені постачальники соціальних мереж для входу, такі як Google, Facebook, Apple та Github, підтримуються без додаткового налаштування. Див. id.discourse.com для отримання додаткової інформації." + enable_discourse_id: "Увімкніть автентифікацію за допомогою Discourse ID, служби єдиного входу, яка дозволяє користувачам входити на кілька сайтів Discourse за допомогою одного облікового запису. Поширені постачальники соціальних мереж для входу, такі як Google, Facebook, Apple та GitHub, підтримуються без додаткового налаштування. Див. id.discourse.com для отримання додаткової інформації." enable_google_oauth2_logins: "Увімкніть автентифікацію Google Oauth2. Це метод автентифікації, який зараз підтримує Google. Потрібен ключ і секрет. Див. Налаштування входу Google для Discourse." google_oauth2_client_id: "Унікальний ідентифікатор клієнта, наданий вашою програмою Google, який використовується для процесу автентифікації." google_oauth2_client_secret: "Клієнтський секрет вашого застосунку Google." @@ -2289,7 +2308,7 @@ uk: alternative_reply_by_email_addresses: "Список альтернативних шаблонів для відповіді, який застосовується на основі вхідних адрес електронної пошти. Наприклад: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "Використовуйте HTML замість звичайного тексту для вхідної електронної пошти." strip_incoming_email_lines: "Видаляти проміжні пробіли та пробіли з кожного рядка вхідних електронних листів." - disable_emails: "Заборонити Discourse надсилати будь-які електронні листи. Виберіть «так», щоб вимкнути надсилання електронних листів для всіх користувачів. Виберіть «не команда обслуговування», щоб вимкнути електронні листи лише для звичайних користувачів." + disable_emails: "Заборонити Discourse надсилати будь-які електронні листи. Виберіть «так», щоб вимкнути вихідні електронні листи для всіх користувачів. Виберіть «не для співробітників», щоб вимкнути електронні листи лише для користувачів, які не є співробітниками." allow_email_invites: "Якщо вимкнено, користувачі не зможуть надсилати електронні листи із запрошеннями через Discourse." strip_images_from_short_emails: "Видаляти зображення з електронних листів розміром менше 2800 байт" short_email_length: "Визначте максимальну довжину листа в байтах, який буде класифіковано як \"короткий\" для придушення зображень. Якщо розмір листа не перевищує цей параметр, будь-які зображення (наприклад, аватарки та емодзі) в ньому будуть вилучені." @@ -2308,6 +2327,7 @@ uk: mailgun_api_key: "Ключ API Mailgun Secret, який використовується для перевірки повідомлень webhook." sendgrid_verification_key: "Ключ перевірки Sendgrid, який використовується для перевірки повідомлень webhook." mailjet_webhook_token: "Маркер, який використовується для перевірки корисного навантаження вебхуку. Його потрібно передати як параметр запиту «t» вебхука, наприклад: https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "Маркер, який використовується для перевірки корисного навантаження вебхуку. Його потрібно передати як параметр запиту «t» вебхуку, наприклад: https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "Ключ автентифікації Mandrill, який використовується для перевірки повідомлень webhook." postmark_webhook_token: "Маркер, який використовується для перевірки корисного навантаження вебхуку. Його потрібно передати як параметр запиту «t» вебхуку, наприклад: https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "Маркер, який використовується для перевірки корисного навантаження вебхуку. Його потрібно передати як параметр запиту «t» вебхуку, наприклад: https://example.com/webhook/sparkpost?t=supersecret" @@ -2382,7 +2402,7 @@ uk: allow_likes_in_anonymous_mode: "Увімкніть цей параметр, щоб дозволити користувачам, які анонімно переглядають ваш сайт, ставити лайки публікаціям. Після активації користувачі можуть приховувати свої ідентифікаційні дані під час позначення лайками публікацій чи тем на сайті. Для цього параметра потрібно ввімкнути параметр «дозволити анонімний режим»." anonymous_posting_allowed_groups: "Групи, яким дозволено анонімні публікації. Для цього параметра потрібно увімкнути параметр «дозволити анонімний режим»." anonymous_account_duration_minutes: "Щоб захистити анонімність, створюйте новий анонімний обліковий запис кожні N хвилин для кожного користувача. Приклад: якщо встановлено значення 600, щойно мине 600 хвилин після останньої публікації ТА користувач перейде в anon, буде створено новий анонімний обліковий запис." - hide_user_profiles_from_public: "Вимкнути картки, профілі та розділ користувачів для анонімних користувачів." + hide_user_profiles_from_public: "Вимкнути картки користувачів та профілі користувачів для анонімних користувачів. Зведена статистика все ще буде доступна в каталозі користувачів." hide_new_user_profiles: "Приховати профілі користувачів рівня довіри 1 або нижчого рівня та користувачів рівня довіри 1 від публіки, доки вони не опублікують перше повідомлення. Ця функція безумовно вимкнена на сайтах, де must_approve_users і invite_only." allow_users_to_hide_profile: "Дозволити користувачам приховувати свій профіль та присутність на форумі" hide_user_activity_tab: "Приховати вкладку активності у профілях користувачів, окрім Адміна та себе." @@ -2448,6 +2468,7 @@ uk: embed_support_markdown: "Підтримка Markdown форматування для вбудованих дописів." allowed_embed_selectors: "Список розділених комами елементів CSS, дозволених до вбудовування." allowed_href_schemes: "Схеми, дозволені у посиланнях, крім http та https." + embed_full_app: "Увімкнути повний режим програми для вбудованих коментарів. Якщо цю функцію ввімкнено, вбудовані коментарі завантажуватимуть повну версію програми Discourse у фреймі iframe, що дозволить користувачам безпосередньо взаємодіяти з темами." embed_post_limit: "Максимальна кількість дописів для вставки." embed_username_required: "Для створення теми потрібне ім’я користувача." notify_about_reviewable_item_after: "Якщо є питання, які не були розглянуті через стільки годин, буде надіслано особисте повідомлення модераторам. Встановіть 0, щоб вимкнути." @@ -2580,7 +2601,7 @@ uk: dashboard_hidden_reports: "Дозволити приховати вказані звіти з панелі інструментів." dashboard_visible_tabs: "Виберіть, які вкладки інформаційної панелі будуть видимі." dashboard_general_tab_activity_metrics: "Виберіть звіти, які показуватимуться як показники активності на загальній вкладці." - gravatar_enabled: "Використовувати сервіс Gravatar для аватарок користувачів. Це не дозволить користувачам переключитися на Gravatar для своїх аватарок, але не вплине на користувачів, які вже використовують його." + gravatar_enabled: "Використовуйте сервіс Gravatar для аватарів користувачів. Вимкнення цього сервісу не дозволить користувачам переходити на Gravatar для своїх аватарів, але це не вплине на користувачів, які вже його використовують." gravatar_name: "Вкажіть назву постачальника послуг Gravatar. Ця назва зазвичай використовується для ідентифікації джерела, яке надає аватари Gravatar на сайт." gravatar_base_url: "Вкажіть URL-адресу для доступу до API постачальника Gravatar. Цей параметр є критичним для перетворення адрес електронної пошти на URL-адреси Gravatar, де зберігаються зображення аватарів." gravatar_login_url: "URL-адреса відносно `gravatar_base_url`, яка надає користувачеві можливість входу до служби Gravatar." @@ -2594,6 +2615,7 @@ uk: show_bottom_topic_map: "Показує карту теми внизу теми, якщо вона має 10 або більше відповідей." show_topic_map_in_topics_without_replies: "Показує карту теми, навіть якщо в темі немає відповідей." enable_site_owner_onboarding: "Показує панель на головній сторінці новим адміністраторам, щоб допомогти їм розпочати роботу. Повторно увімкніть цей параметр, щоб знову побачити кроки приєднання до системи." + site_owner_onboarding_max_days: "Максимальна кількість днів після створення сайту для відображення банера реєстрації." enable_welcome_banner: "Відображати банер на головних сторінках списку тем, щоб привітати користувачів і дозволити їм шукати вміст сайту" welcome_banner_image: "Встановіть зображення, яке відображатиметься на фоні вітального банера." welcome_banner_location: "Визначає, де на сторінці з’явиться вітальний банер." @@ -2609,6 +2631,7 @@ uk: show_preview_for_form_templates: "Увімкнути функцію попереднього перегляду для шаблонів форм" lazy_load_categories_groups: "Ліниве завантаження інформації про категорію тільки для користувачів цих груп. Це підвищує продуктивність на сайтах з багатьма категоріями." enable_auto_grid_images: "Автоматично обгортає зображення у теги [grid], коли 3 або більше зображень завантажено в композитор." + enable_new_checkbox_style: "Увімкнути перероблений стиль прапорців для прапорців FormKit." impersonate_without_logout: "Дозволити адміністраторам видавати себе за користувача, не виходячи з облікового запису адміністратора." experimental_impersonation_time_limit_minutes: "Через який час сеанс імітації автоматично завершується." page_loading_indicator: "Вибір індикатора завантаження, який з’являється під час навігації сторінкою в Discourse. «Спіннер» – це індикатор на всю сторінку. «Слайдер» — вузька смужка у верхній частині екрана." @@ -2631,13 +2654,13 @@ uk: content_localization_crawler_param: "Надавати локалізований контент веб-сканерам, коли ввімкнено опцію «локалізація контенту ввімкнена» та «встановити локалізацію з параметра». Список підтримуваних локалізацій визначено в розділі «підтримувані локалізації контенту»." content_localization_use_default_locale_when_unsupported: "Надавати локалізований контент у стандартній локалізації сайту користувачам, чия бажана мова не вказана у списку «локалізацій, що підтримуються локалізацією контенту»." content_localization_allow_author_localization: "Дозволити авторам оновлювати локалізації власних тем і публікацій через меню публікацій." - enable_upcoming_changes: "Увімкнути майбутні зміни" fake_upcoming_change: "Це фальшива майбутня зміна для тестових цілей. Немає потреби перекладати цей рядок." floating_dismiss_topics_on_mobile: "Відображає плаваючу кнопку «Закрити...» на мобільному пристрої для списку тем для легшого доступу та звільнення місця у верхній частині списку тем." rename_faq_to_guidelines: "Ця зміна перейменовує сторінку поширених запитань на «Правила». Сторінка поширених запитань все ще буде доступна за адресою /faq. Налаштування «faq url» працює як і раніше." enable_simplified_category_creation: "Забезпечує спрощений процес створення категорій з меншою кількістю опцій та зрозумілішим інтерфейсом." enable_custom_splash_screen: "Дозволяє налаштувати заставку завантаження за допомогою власного зображення SVG. Завантажте зображення за допомогою налаштування «зображення заставки». Попередження: це може негативно вплинути на оцінки LCP та індексацію Google." modernize_foundation_theme: "Ця зміна запроваджує проектні перетворення на тему Foundation на Discourse." + reporting_improvements: "Покращення навігації, дизайну та зручності використання адміністративних звітів Discourse." errors: invalid_css_color: "Недійсний колір. Введіть назву кольору або шістнадцяткове значення." invalid_datetime: "Неправильний формат дати і часу. Будь ласка, переконайтеся, що ви ввели правильну дату та час." @@ -2688,12 +2711,12 @@ uk: reply_by_email_disabled: "Перш ніж активувати це налаштування, потрібно спочатку увімкнути 'відповідь електронною поштою'." discourse_connect_url_is_empty: "Ви повинні встановити 'discourse connect url' перед увімкненням цього параметра." enable_local_logins_disabled: "Перш ніж активувати цей параметр, спочатку потрібно ввімкнути функцію 'enable local logins'." - min_username_length_exists: "Ви не можете встановити мінімальну довжину імені користувача менше найкоротшого імені користувача (%{username})." - min_group_name_length_exists: "Ви не можете встановити мінімальну довжину імені користувача більшою найкоротшого імені групи (%{group_name})." - min_username_length_range: "Ви не можете встановити мінімум вище максимуму." - max_username_length_exists: "Ви не можете встановити максимальну довжину імені користувача нижче найдовшого імені користувача (%{username})." - max_group_name_length_exists: "Ви не можете встановити максимальну довжину імені користувача менше найдовшої назви групи (%{group_name})." - max_username_length_range: "Ви не можете встановити максимум нижче мінімуму." + min_username_length_exists: "Ви не можете встановити 'min length of username' вище найкоротшого імені користувача (%{username})." + min_group_name_length_exists: "Ви не можете встановити 'min length of username' вище найкоротшої назви групи (%{group_name})." + min_username_length_range: "Ви не можете встановити «мінімальну довжину імені користувача» вище «максимальної довжини імені користувача»." + max_username_length_exists: "Ви не можете встановити \"максимальну довжину імені користувача\" нижче найдовшого імені користувача (%{username})." + max_group_name_length_exists: "Ви не можете встановити «максимальну довжину імені користувача» меншою за найдовшу назву групи (%{group_name})." + max_username_length_range: "Ви не можете встановити «максимальну довжину імені користувача» нижче за «мінімальну довжину імені користувача»." invalid_hex_value: "Значення кольорів мають бути шестизначними шістнадцятковими hex кодами." empty_selectable_avatars: "Ви повинні спочатку завантажити принаймні два доступні для вибору аватари, перш ніж увімкнути цей параметр." category_search_priority: @@ -2758,11 +2781,12 @@ uk: exclude_tag: "Виключити теми з певним тегом" exclude_tags_any: "Виключити теми з будь-яким із зазначених тегів (розділені комами)" exclude_tags_all: "Виключити теми з усіма вказаними тегами (розділені символом плюс)" - tags_alias: "Псевдонім для фільтра 'tag:'" tag_group: "Показати теми з тегами вибраної групи тегів" exclude_tag_group: "Виключити теми з тегами зі певної групи тегів" activity_before: "Показати теми з останньою активністю до дати (YYYY-MM-DD або днів тому)" activity_after: "Показати теми з останньою активністю після дати (YYYY-MM-DD або днів тому)" + bookmarked_before: "Показувати теми, додані в закладки до дати (YYYY-MM-DD або днів тому)" + bookmarked_after: "Показати теми, додані в закладки після дати (YYYY-MM-DD або днів тому)" created_before: "Показати теми, створені до певної дати (YYYY-MM-DD або днів тому)" created_after: "Показати теми, створені після дати (YYYY-MM-DD або днів тому)" created_by: "Показати теми, створені певним користувачем або групою" @@ -3223,32 +3247,32 @@ uk: title: "Нова версія Mailer" subject_template: "[%{email_prefix}] Нова версія Discourse, доступно оновлення" text_body_template: | - Ура, доступна нова версія [Discourse](https://www.discourse.org)! + Ура, нова версія [Discourse](https://www.discourse.org) доступна! Ваша версія: %{installed_version} Нова версія: **%{new_version}** - - Оновіть за допомогою нашого легкого **[оновлення в оглядачі в один клік](%{base_url}/admin/upgrade)** + - Оновіть за допомогою нашого простого **[оновлення браузера одним кліком](%{base_url}/admin/update)** - - Подивіться, що нового в [примітках до випуску](https://meta.discourse.org/tag/release-notes) або перегляньте [журнал змін GitHub](https://github.com/discourse/discourse/commits/main) + - Перегляньте новинки у [нотатках до випуску](https://releases.discourse.org/changelog/%{new_version}) - - Відвідайте [meta.discourse.org](https:// meta.discourse.org) для новин, обговорень і підтримки для Discourse + - Відвідайте [meta.discourse.org](https://meta.discourse.org) для новин, обговорень та підтримки Discourse new_version_mailer_with_notes: title: "Нова версія Mailer з примітками" subject_template: "[%{email_prefix}] доступне оновлення" text_body_template: | - Ура, доступна нова версія [Discourse](https://www.discourse.org)! + Ура, нова версія [Discourse](https://www.discourse.org) доступна! Ваша версія: %{installed_version} Нова версія: **%{new_version}** - - Оновіть за допомогою нашого легкого **[оновлення в оглядачі в один клік](%{base_url}/admin/upgrade)** + - Оновіть систему за допомогою нашого простого **[оновлення браузера одним кліком](%{base_url}/admin/update)** - - Подивіться, що нового в [примітках до випуску](https://meta.discourse.org/tag/release-notes) або перегляньте [журнал змін GitHub](https://github.com/discourse/discourse/commits/main) + - Перегляньте новинки у [нотатках до випуску](https://releases.discourse.org/changelog/%{new_version}) - - Відвідайте [meta.discourse.org](https:// meta.discourse.org) для новин, обговорень і підтримки для Discourse + - Відвідайте [meta.discourse.org](https://meta.discourse.org) для новин, обговорення та підтримки Discourse - ### Примітки до випуску + ### Нотатки до випуску %{notes} flag_reasons: @@ -3303,19 +3327,23 @@ uk: Однак, якщо допис буде прихований спільнотою вдруге, він залишатиметься прихованим, доки його не перевірить хтось з команди обслуговування. Щоб отримати додаткові вказівки, зверніться до наших [настанов спільноті](%{base_url}/guidelines). + reviewable_queued_post_revise_and_reject_edit_post: "Ви можете відредагувати свою оригінальну публікацію нижче та повторно надіслати її, щоб внести запропоновані зміни, або відповісти на це повідомлення, якщо у вас є якісь запитання." + reviewable_queued_post_revise_and_reject_edit_post_no_reply: "Ви можете відредагувати свою оригінальну публікацію нижче та повторно надіслати її, щоб внести запропоновані зміни." + reviewable_queued_post_revise_and_reject_edit_topic: "Ви можете відредагувати свою оригінальну публікацію нижче та повторно надіслати її, щоб внести запропоновані зміни, або відповісти на це повідомлення, якщо у вас є якісь запитання." + reviewable_queued_post_revise_and_reject_edit_topic_no_reply: "Ви можете відредагувати оригінальне повідомлення вашої теми нижче та повторно надіслати його, щоб внести запропоновані зміни." reviewable_queued_post_revise_and_reject: title: "Відгук на вашу публікацію" subject_template: "Відгук на вашу публікацію на %{topic_title}" text_body_template: | Привіт %{username}, - Ми переглянули вашу публікацію в [%{topic_title}] (%{topic_url}) і маємо для вас кілька коментарів. + Ми переглянули ваш допис у [%{topic_title}](%{topic_url}) і маємо для вас відгук. Причина: %{reason} - Зворотній зв'язок: %{feedback} + Відгук: %{feedback} - Ви можете відредагувати своє початкове повідомлення нижче і надіслати його повторно, щоб внести запропоновані зміни, або відповісти на це повідомлення, якщо у вас виникли запитання. + %{edit_instructions} -------- @@ -3323,21 +3351,21 @@ uk: -------- - Дякую, - %{site_name} Модератори + Дякуємо, + Модератори сайту %{site_name} reviewable_queued_post_revise_and_reject_new_topic: title: "Відгук у вашій темі" subject_template: 'Відгук про нову тему під назвою "%{topic_title}"' text_body_template: | - Привіт, %{username}, + Привіт %{username}, - Ми переглянули вашу нову тему під назвою "%{topic_title}" і маємо для вас кілька відгуків. + Ми переглянули вашу нову тему під назвою "%{topic_title}" і маємо для вас відгук. Причина: %{reason} Відгук: %{feedback} - Ви можете відредагувати вихідну публікацію вашої теми нижче та повторно надіслати, щоб внести запропоновані зміни, або відповісти на це повідомлення, якщо у вас виникнуть запитання. + %{edit_instructions} -------- @@ -3345,8 +3373,8 @@ uk: -------- - Дякую, - %{site_name} Модератори + Дякуємо, + Модератори сайту %{site_name} post_hidden_again: title: "Допис знову приховано" preview: "Публікацію знову приховано учасниками спільноти." @@ -5279,7 +5307,7 @@ uk: dev_mode: title: "Режим розробника" enable_rack_mini_profiler: "Дозволити Rack Mini Profiler зберігати зміни сеансу протягом 1 години" - enter: "Enter" + enter: "Увійти в режим розробника" wizard: title: "Налаштування Discourse" step: @@ -5581,10 +5609,6 @@ uk: complete: "Публікація схвалена та розблокована" post_actions: bundle_title: "Що ви хочете зробити з публікацією?" - no_action_post: - title: "Немає дій" - description: "Не вживати жодних дій щодо публікації" - complete: "Жодних дій щодо публікації не вжито" delete_post: title: "Видалити повідомлення" description: "Видалити цей допис" @@ -5605,16 +5629,8 @@ uk: title: "Редагувати публікацію" description: "Редагувати вміст цієї публікації" complete: "Допис відредаговано" - convert_to_pm: - title: "Перетворити на ПП" - description: "Перетворити цей пост у особисте повідомлення" - complete: "Публікацію перетворено на особисте повідомлення" user_actions: bundle_title: "Що ви хочете зробити з користувачем?" - no_action_user: - title: "Немає дій" - description: "Не вживати жодних заходів проти користувача" - complete: "Жодних заходів щодо користувача не вжито" silence_user: title: "Заблокувати користувача" description: "Заборонити користувачеві публікувати повідомлення" diff --git a/config/locales/server.ur.yml b/config/locales/server.ur.yml index 3a42137502ab3..8f3d73ddd5bd8 100644 --- a/config/locales/server.ur.yml +++ b/config/locales/server.ur.yml @@ -57,8 +57,6 @@ ur: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "%{username} کی طرف سے #%{post_number}" - too_many_urls: "ایک درخواست میں 10 سے زیادہ یو آر ایل ون باکس کو ان لائن نہیں کر سکتے۔" - concurrency_not_allowed: "ایک ساتھ ان لائن ون باکسنگ کی درخواستوں کی اجازت نہیں ہے۔ براہ کرم ایک وقت میں ایک درخواست بھیجیں۔" components: enabled_filter: "فعال" disabled_filter: "غیر فعال" @@ -925,6 +923,7 @@ ur: read: "رِیڈ" read_write: "رِیڈ/رائیٹ" instructions: '"%{application_name}" کے ساتھ استعمال کیلئے ہم نے آپ کیلئے ایک نئی صارف API کِی بنائی ہے، براہ مہربانی اپنی ایپلیکیشن میں مندرجہ ذیل کِی پیسٹ کریں:' + copied: "کاپی کر لیا!" otp_description: 'کیا آپ "%{application_name}" کو اِس سائٹ تک رسائی دینا پسند کریں گے؟' otp_confirmation: confirm_title: '%{site_name} پر جاری رکھیں' @@ -998,7 +997,9 @@ ur: description: "فلَیگز سٹیٹس کی فہرست بشمول فلَیگ کی قسم، پوسٹ کرنے والا، فلَیگ کرنے والا، اور نمٹائے جانے تک کا وقت۔" visits: title: "صارف وِزِٹس" - xaxis: "دن" + xaxis: + desktop: "ڈیسک ٹاپ" + mobile: "موبائل" yaxis: "وِزِٹس کی تعداد" signups: title: "سائن اَپ" @@ -1042,10 +1043,8 @@ ur: site_traffic: yaxis: "دن" dau_by_mau: - title: "DAU/MAU" xaxis: "دن" yaxis: "DAU/MAU" - description: "گزشتہ دن لاگ ان ہونے والے اراکین کی تعداد گزشتہ ماہ میں لاگ ان ہونے والے اراکین کی تعداد سے تقسیم کرنا – ایک ٪ کا حساب لگاتا ہے جس سے کمیونٹی سے 'جوڈے رہنے' کا اندازہ لگتا ہے۔ کوشش کریں >20٪ کیلئے۔" daily_engaged_users: title: "روزانہ کے مشغول صارفین" xaxis: "دن" @@ -1457,7 +1456,6 @@ ur: allowed_internal_hosts: "اندرونی ہَوسٹس کی فہرست جو ڈِسکَورس محفوظ طریقے سے وَن باکس اور دیگر مقاصد کیلئے کرال کر سکتا ہے" allowed_crawler_user_agents: "وَیب کرالرز کے صارف ایجنٹوں جن کو سائٹ تک رسائی کی اجازت دی جانی چاہیئے۔ انتباہ! اِس ترتیب کو فعال کرنے سے وہ تمام کرالرز جو یہاں فہرست کردہ نہیں ہیں رد کر دہے جائیں گے!" slow_down_crawler_rate: "اگر slow_down_crawler_user_agents کی وضاحت کی گئی ہے تو یہ شرح تمام کرالرز پر لاگو ہوگی (درخواستوں کے درمیان سیکنڈوں کی تاخیر)" - content_security_policy_collect_reports: "سی ایس پی کی خلاف ورزی کی رپورٹ کو /csp_reports پر جمع کرنے کو فعال کریں" invalidate_inactive_admin_email_after_days: "ایڈمن اکاؤنٹس جنہوں نے دنوں کی اتنی تعداد میں سائٹ کا دورہ نہیں کیا، اُن کو لاگ اِن کرنے سے پہلے اپنے ایمیل ایڈریس کی دوبارہ توثیق کرنے کی ضرورت ہوگی۔ غیر فعال کرنے کیلئے 0 پر سَیٹ کریں۔" top_menu: "اس بات کا تعین کریں کہ ہوم پیج نیویگیشن میں کون سے اشیاء، اور کس ترتیب میں نظر آئیں۔" share_links: "اِس بات کا تعین کریں کہ شیئر ڈائیلاگ پر کونسی، اور کس ترتیب کے ساتھ اشیاء ظاہر ہوں۔" @@ -1692,7 +1690,6 @@ ur: alternative_reply_by_email_addresses: "جواب بذریعہ ای میل کے آنے والا ای میل ایڈریس کیلئے متبادل ٹیمپلیٹس، مثال: %%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "آنے والے ای میل کیلئے ٹیکسٹ کے بجائے HTML کا استعمال کریں۔" strip_incoming_email_lines: "آنے والی ای میلز کی ہر سطر سے آگے اور پیچھے آنی والی خالی جگہیں ہٹا دیں۔" - disable_emails: "ڈِسکورس کو کسی بھی قسم کے ای میل بھیجنے سے روکیں۔ تمام صارفین کیلئے ای میلز غیر فعال کرنے کیلئے 'ہاں' منتخب کریں۔ صرف غیر سٹاف صارفین کیلئے ای میلز غیر فعال کرنے کیلئے 'غیر سٹاف' کا انتخاب کریں۔" strip_images_from_short_emails: "2800 بائٹس سے کم سائز والے ای میلز سے تصاویر ہٹا دیں" display_name_on_email_from: "ای میل کی \"سے\" فیلڈ پر مکمل نام دکھائیں" unsubscribe_via_email: "صارفین کو ای میل کے موضوع یا متن میں 'غیر سَبسکرائب' کا لِنک بھیج کر ای میلز سے غیر سَبسکرائب ہو جانے کی اجازت دیں" @@ -1754,7 +1751,6 @@ ur: enable_group_directory: "براؤزِنگ کیلئے گروپوں کی ایک ڈائرِکٹری فراہم کریں" group_in_subject: "ایمیل کے موضوع میں %%{optional_pm} کو ذاتی پیغام میں پہلے گروپ کے نام پر سَیٹ کریں، دیکھیے: سٹینڈرڈ ایمیلز کیلئے موضوع فارمَیٹ کو حسب ضرورت تبدیل کریں" anonymous_account_duration_minutes: "صارف کی گمنامی کی حفاظت کیلئے ہر صارف کیلئے ہر ن منٹ بعد ایک نیا گمنام اکاؤنٹ بنائیں۔ مثال: اگر 600 پر سَیٹ کیا جائے، تو جیسے ہی آخری پوسٹ سے 600 منٹ گزر چکے ہوں گے اور صارف گمنام مَوڈ پر تبدیل ہو گا، تو ایک نیا گمنام اکاؤنٹ پیدا کر دیا جائے گا۔" - hide_user_profiles_from_public: "گمنام صارفین کیلئے صارف کارڈ، صارف پروفائلز اور صارف ڈائرِکٹری غیر فعال کریں۔" show_inactive_accounts: "لاگ اِن ہوے صارفین کو غیر فعال اکاؤنٹس کی پروفائلز کو براؤز کرنے کی اجازت دیں۔" log_personal_messages_views: "دیگر صارفین/گروپوں کیلئے ایڈمن کی طرف سے ذاتی پیغام وِیوز کو لاگ کریں۔" ignored_users_count_message_threshold: "اتنے اراکین کی طرف سے کسی خاص رکن کو نظر انداز کیے جانے پر نگرانوں کو مطلع کریں۔" @@ -1884,10 +1880,6 @@ ur: staged_users_disabled: "اس ترتیب کو فعال کرنے سے پہلے آپ کا 'عارضی اراکین' فعال کرنا ضروری ہے۔" reply_by_email_disabled: "اِس ترتیب کو فعال کرنے سے پہلے آپ کا 'جواب بذریعہ ای میل' فعال کرنا ضروری ہے۔" enable_local_logins_disabled: "اِس ترتیب کو فعال کرنے سے پہلے آپ کا 'مقامی لاگ اِن' فعال کرنا ضروری ہے۔" - min_username_length_exists: "آپ اسمِ صارف کی کم از کم لمبائی، سب سے مختصر صارف نام کی لمبائی سے کم مقرر نہیں کرسکتے (%{username})۔" - min_username_length_range: "آپ کم از کم، زیادہ سے زیادہ سے اوپر مقرر نہیں کرسکتے۔" - max_username_length_exists: "آپ اسمِ صارف کی زیادہ سے زیادہ لمبائی، سب سے طویل صارف نام کی لمبائی سے کم مقرر نہیں کرسکتے (%{username})۔" - max_username_length_range: "آپ زیادہ سے زیادہ، کم از کم سے نیچے مقرر نہیں کرسکتے۔" invalid_hex_value: "رنگ اقدار کا 6-عددی ہیکسا ڈَیسیمل کوڈ ہونا ضروری ہے۔" allowed_unicode_usernames: regex_invalid: "رَیگولر اَیکسپرَیشَ غلط ہے: %{error}" @@ -2189,35 +2181,9 @@ ur: new_version_mailer: title: "نیا ورژن مَیلر" subject_template: "[%{email_prefix}] نیا ڈِسکورس ورژن، اَپ ڈیٹ دستیاب ہے" - text_body_template: | - واہ، [ڈسکورس] (https://www.discourse.org) کا ایک نیا ورژن دستیاب ہے! - - آپ کا ورژن: %{installed_version} - نیا ورژن: **%{new_version}** - - - ہمارے آسان ** [ایک کلک براؤزر اپ ڈیٹ] کا استعمال کرتے ہوئے اپ ڈیٹ کریں (%{base_url}/admin/update) ** - - - دیکھیں [ریلیز نوٹس] میں کیا نیا ہے (https://meta.discourse.org/tag/release-notes) یا [خام GitHub چینج لاگ] دیکھیں (https://github.com/discourse/discourse/commits/main) - - - خبروں، بحث، اور گفتگو کے لئے معاونت کے لئے [meta.discourse.org] (https://meta.discourse.org) ملاحظہ کریں new_version_mailer_with_notes: title: "نوٹس کے ساتھ نیا ورژن مَیلر" subject_template: "[%{email_prefix}] اَپ ڈیٹ دستیاب ہے" - text_body_template: | - واہ، [ڈسکورس] (https://www.discourse.org) کا ایک نیا ورژن دستیاب ہے! - - آپ کا ورژن: %{installed_version} - نیا ورژن: **%{new_version}** - - - ہمارے آسان ** [ایک کلک براؤزر اپ ڈیٹ] کا استعمال کرتے ہوئے اپ ڈیٹ کریں (%{base_url}/admin/update) ** - - - دیکھیں [ریلیز نوٹس] میں کیا نیا ہے (https://meta.discourse.org/tag/release-notes) یا [خام GitHub چینج لاگ] دیکھیں (https://github.com/discourse/discourse/commits/main) - - - خبروں، بحث، اور گفتگو کے لیے حمایت کے لیے [meta.discourse.org] (https://meta.discourse.org) ملاحظہ کریں - - ### ریلیز نوٹ - - %{notes} flag_reasons: off_topic: "آپ کی پوسٹ کو **موضوع سے ہٹ کر** کے طور پر فلَیگ کیا گیا تھا: کمیونٹی سمجھتی ہے کہ یہ ٹاپک کیلئے اچھی فِٹ نہیں ہے، جیسا کہ عنوان اور پہلی پوسٹ کی طرف سے فی الحال بیان کیا گیا ہے۔" spam: "آپ کی پوسٹ کو **سپَیم** کے طور پر فلَیگ کیا گیا تھا: کمیونٹی سمجھتی ہے کہ یہ ایک اشتہار ہے، ایسی چیز جو کہ بجائے توقع کے مطابق مفید یا موضوع سے متعلقہ ہونے، کے فطرت میں زیادہ تر پرَومَوشنل ہے۔" @@ -2253,46 +2219,6 @@ ur: تاہم، اگر پوسٹ ایک دوسری دفعہ کمیونٹی کی طرف سے چھپا دی جائے، تو سٹاف کی طرف سے اِس سے نمٹنے تک اِس کی پوشیدگی برقرار رہے گی۔ اضافی رہنمائی کیلئے، براہ کرم ہماری [کمیونٹی کی رہنما ہدایات](%{base_url}/guidelines) دیکھیے۔ - reviewable_queued_post_revise_and_reject: - text_body_template: | - آداب %{username}, - - ہم نے [%{topic_title}](%{topic_url}) میں آپ کی لڑی کا جائزہ لیا ہے اور آپ کے لیے کچھ تاثرات ہیں۔ - - وجہ: %{reason} - - تاثرات: %{feedback} - - آپ ذیل میں اپنی اصل لڑی میں ترمیم کر کے تجویز کردہ تبدیلیاں کرنے کے لیے دوبارہ جمع کر سکتے ہیں، یا اگر آپ کے کوئی سوالات ہیں تو اس پیغام کا جواب دیں۔ - - -------- - - %{original_post} - - -------- - - شکریہ، - %{site_name} نگران - reviewable_queued_post_revise_and_reject_new_topic: - text_body_template: | - آداب %{username}, - - ہم نے "%{topic_title}" موضوع کے عنوان سے آپ کے نئے موضوع کا جائزہ لیا ہے اور آپ کے لیے کچھ رائے چاہتے ہیں۔ - - وجہ: %{reason} - - تاثرات: %{feedback} - - آپ ذیل میں اپنے موضوع کی اصل لڑی میں ترمیم کر کے تجویز کردہ تبدیلیاں کرنے کے لیے دوبارہ جمع کر سکتے ہیں، یا اگر آپ کے کوئی سوالات ہیں تو اس پیغام کا جواب دیں۔ - - -------- - - %{original_post} - - -------- - - شکریہ، - %{site_name} نگران post_hidden_again: title: "پوسٹ دوبارہ چھاپی دی گئی" subject_template: "کمیونٹی فلَیگز کی وجہ سے پوسٹ چھپا دی گئی، سٹاف کو مطلاع کر دیا گیا" @@ -3559,8 +3485,6 @@ ur: deprecation_error_description: "آنے والے ڈسکورس اپ ڈیٹس کے ساتھ مطابقت کی جانچ کرنے کے لیے، آپ جاوا اسکرپٹ کی فرسودگی کو ایک خرابی پیدا کر سکتے ہیں:" enter: "سَیف مَوڈ میں داخل ہوں" must_select: "سَیف مَوڈ میں داخل ہونے کیلئے آپ کا کم از کم ایک آپشن منتخب کرنا ضروری ہے۔" - dev_mode: - enter: "اَینٹر" wizard: title: "ڈِسکورس سَیٹ اَپ" step: @@ -3699,13 +3623,9 @@ ur: title: "جی ہاں" approve_and_unhide: title: "جی ہاں" - no_action_post: - title: "کوئی کارروائی نہیں" delete_post: title: "پوسٹ کو حذف" complete: "دھاگہ مٹا دیا" - no_action_user: - title: "کوئی کارروائی نہیں" delete_user: complete: "صارف مٹادیا گیا" reason: "بذریعہ نظر ثانی قطار کے حذف کر دیا گیا" diff --git a/config/locales/server.vi.yml b/config/locales/server.vi.yml index 923e8f523dd33..3b05dccee79cc 100644 --- a/config/locales/server.vi.yml +++ b/config/locales/server.vi.yml @@ -189,7 +189,6 @@ vi: cors_origins_should_not_have_trailing_slash: "Bạn không nên thêm dấu gạch chéo (/) vào nguồn gốc CORS." slow_down_crawler_user_agent_cannot_be_popular_browsers: "Bạn không thể thêm bất kỳ giá trị nào sau đây vào cài đặt: %{values}." strip_image_metadata_cannot_be_disabled_if_composer_media_optimization_image_enabled: "Bạn không thể tắt siêu dữ liệu hình ảnh dải nếu bật 'hình ảnh tối ưu hóa phương tiện tổng hợp' được bật. Tắt 'đã bật hình ảnh tối ưu hóa phương tiện tổng hợp' trước khi tắt siêu dữ liệu hình ảnh dải." - x_summary_large_image_no_svg: "Hình ảnh tóm tắt trên Twitter được sử dụng cho twitter: siêu dữ liệu hình ảnh không được là hình ảnh .svg." conflicting_google_user_id: 'ID Tài khoản Google cho tài khoản này đã thay đổi; cần có sự can thiệp của nhân viên vì lý do an ninh. Vui lòng liên hệ với nhân viên và chỉ họ đến
https://meta.discourse.org/t/76575' onebox: invalid_address: "Xin lỗi, chúng tôi không thể tạo bản xem trước cho trang web này vì không thể tìm thấy máy chủ %{hostname}. Thay vì xem trước, chỉ một liên kết sẽ xuất hiện trong tút của bạn :cry:" @@ -712,6 +711,7 @@ vi: user_api_key: deny: "Hủy" read: "đã đọc" + copied: "Đã sao chép!" otp_confirmation: confirm_title: Tiếp tục tới %{site_name} logging_in_as: Đăng nhập bằng %{username} @@ -768,7 +768,9 @@ vi: description: "Danh sách các trạng thái của cờ bao gồm loại cờ, người đăng, người gắn cờ và thời gian giải quyết." visits: title: "Các thành viên truy cập" - xaxis: "Ngày" + xaxis: + desktop: "Máy tính để bàn" + mobile: "Điện thoại" yaxis: "Số lần truy cập" signups: xaxis: "Ngày" @@ -1271,7 +1273,6 @@ vi: max_daily_gravatar_crawls: "Giới hạn số lần Discourse sẽ kiểm tra Gravatar mới trong một ngày" enable_user_directory: "Cung cấp một chỉ mục thành viên để duyệt xem" anonymous_account_duration_minutes: "Để bảo vệ danh tính tạo ra một tài khoản ẩn danh mới mỗi N phút cho mỗi người dùng. Ví dụ: nếu đặt là 600, ngay sau khi 600 phút trôi qua kể từ bài viết cuối cùng VÀ lập tức tạo ra một tài khoản ẩn danh mới cho thành viên." - hide_user_profiles_from_public: "Vô hiệu hóa thẻ thành viên, hồ sơ và chỉ mục người dùng với các thành viên ẩn danh." log_personal_messages_views: "Ghi nhật ký lượt xem tin nhắn cá nhân của Admin cho người dùng / nhóm khác." ignored_users_count_message_threshold: "Thông báo cho người kiểm duyệt nếu một người dùng cụ thể bị bỏ qua bởi nhiều người dùng khác này." ignored_users_message_gap_days: "Phải đợi bao lâu trước khi thông báo lại cho người kiểm duyệt về một người dùng đã bị nhiều người khác bỏ qua." @@ -1354,8 +1355,6 @@ vi: pop3_polling_authentication_failed: "Chứng thực POP3 thất bại, xin hãy kiểm tra lại thông tin." reply_by_email_address_is_empty: "Bạn phải thiết lập 'reply by email address' trước khi kích hoạt trả lời bằng email." user_locale_not_enabled: "Bạn phải bật 'allow user locale' trước khi kích hoạt thiết lập này." - min_username_length_range: "Bạn không thiết lập giá trị nhỏ nhất lớn hơn giá trị lớn nhất" - max_username_length_range: "Bạn không thể thiết lập số tối đa nhỏ hơn số tối thiểu" search: within_post: "#%{post_number} bởi %{username}" types: @@ -1379,7 +1378,6 @@ vi: exclude_tag: "Loại trừ chủ đề chứa thẻ cụ thể" exclude_tags_any: "Loại trừ chủ đề chứa bất kỳ thẻ cụ thể (phân cách bằng dấu phẩy)" exclude_tags_all: "Loại trừ chủ đề có chứa tất cả thẻ cụ thể (phân cách bằng dấu cộng)" - tags_alias: "Tên gọi khác cho bộ lọc 'tag:'" tag_group: "Hiển thị chủ đề chứa thẻ từ một nhóm thẻ cụ thể" exclude_tag_group: "Loại trừ chủ đề chứa thẻ từ một nhóm thẻ cụ thể" activity_before: "Hiển thị chủ đề có hoạt động cuối cùng trước một ngày cụ thể (YYYY-MM-DD hoặc số ngày trước)" @@ -2377,8 +2375,6 @@ vi: button: "Đăng ký" resend_email: title: "Gửi lại email kích hoạt" - dev_mode: - enter: "Nhập" wizard: step: setup: @@ -2488,12 +2484,8 @@ vi: title: "Đồng ý" approve_and_unhide: title: "Đồng ý" - no_action_post: - title: "Không có hành động" delete_post: complete: "Tút đã bị xóa" - no_action_user: - title: "Không có hành động" delete_user: complete: "Người dùng đã bị xóa" discord: diff --git a/config/locales/server.zh_CN.yml b/config/locales/server.zh_CN.yml index 31456beee3c18..d6e1b036f663c 100644 --- a/config/locales/server.zh_CN.yml +++ b/config/locales/server.zh_CN.yml @@ -60,8 +60,8 @@ zh_CN: inline_oneboxer: topic_page_title_post_number: "#%{post_number}" topic_page_title_post_number_by_user: "#%{post_number},来自 %{username}" - too_many_urls: "无法在单个请求中内联超过 10 个 URL。" - concurrency_not_allowed: "不允许并发内嵌请求。请一次发送一个请求。" + too_many_urls: "单次请求中无法将超过 10 个 URL 转换为行内 Onebox。" + concurrency_not_allowed: "不允许将 URL 转换为行内 Onebox 的并发请求。每次请只发送一个请求。" components: enabled_filter: "已启用" disabled_filter: "已禁用" @@ -141,8 +141,8 @@ zh_CN: invalid_type: "%{type}不是有效类型" humanize_not_valid_string_value: "JSON 指针 '%{property_json_pointer}' 处的属性必须是字符串。" not_valid_string_value: "必须是字符串" - humanize_not_valid_datetime_value: "JSON 指针 “%{property_json_pointer}” 处的属性必须是有效的日期时间。" - not_valid_datetime_value: "必须是有效的日期时间" + humanize_not_valid_datetime_value: "JSON 指针 “%{property_json_pointer}” 处的属性必须为有效的日期时间。" + not_valid_datetime_value: "必须为有效的日期时间" humanize_not_valid_integer_value: "JSON 指针 '%{property_json_pointer}' 处的属性必须是整数。" not_valid_integer_value: "必须是整数" humanize_not_valid_float_value: "JSON 指针 '%{property_json_pointer}' 处的属性必须是浮点数。" @@ -240,6 +240,7 @@ zh_CN: errors: &errors format: ! "%{attribute} %{message}" format_with_full_message: "%{attribute}:%{message}" + diff_too_complex: "差异过于复杂,无法安全计算。请尝试进行较小的编辑。" messages: invalid_locale: "%{invalid_locale} 不是一个有效的语言区域" too_long_validation: @@ -258,7 +259,7 @@ zh_CN: greater_than: 必须大于 %{count} greater_than_or_equal_to: 必须大于或等于 %{count} has_already_been_used: "已被使用" - in: 必须在 %{count} 以内 + in: 必须在 %{count} 内 inclusion: 不包括在列表中 invalid: 无效 is_invalid: "似乎不清楚,这是一个完整的句子?" @@ -550,11 +551,12 @@ zh_CN: adding_too_many_users: other: "一次最多可以添加 %{count} 个用户" usernames_or_emails_required: "必须存在用户名或电子邮件" + cannot_add_emails: "只有用户名才能添加成员到此群组。如需通过电子邮件邀请,请使用“邀请”按钮。" counting_too_many_email_domains: other: "一次最多可以统计 %{count} 个电子邮件域" no_invites_with_discourse_connect: "如果已启用 DiscourseConnect,您只能邀请注册用户" no_invites_without_local_logins: "如果已启用社交登录,您只能邀请注册用户" - update_existing_users_required: "此更改影响 %{count} 现有群组成员。必须指定 “update_existing_users” 参数(真或假),以指明是否将新通知默认应用于现有成员。" + update_existing_users_required: "此更改影响 %{count} 个现有群组成员。您必须指定 'update_existing_users' 参数(true 或 false),以指明是否将新通知默认设置应用于现有成员。" default_names: everyone: "所有人" admins: "管理员" @@ -751,7 +753,7 @@ zh_CN: email_already_used_in_category: "'%{email}' 已被类别 '%{category_name}' 使用。" description_incomplete: "类别描述帖子至少要有一段。" description_too_long: - other: "描述太长(最多 %{count} 个字符)。" + other: "描述过长(最多 %{count} 个字符)。" permission_conflict: "任何被允许访问子类别的组也必须被允许访问父类别。以下群组可以访问子类别之一,但无法访问父类别:%{group_names}。" disallowed_topic_tags: "此话题包含此类别不允许的标签:%{tags}" disallowed_tags_generic: "此话题包含禁止的标签。" @@ -765,6 +767,12 @@ zh_CN: other: "无法删除此类别,因为它有 %{count} 个话题。时间最久的话题是 %{topic_link}。" topic_exists_no_oldest: "无法删除此类别,因为话题数量为 %{count}。" uncategorized_description: "不需要类别或不适合任何其他现有类别的话题。" + category_types: + not_available: "类别类型 '%{type_name}' 不可用" + discussion: + name: "讨论" + title: "讨论" + description: "一个包含所有对话元素的标准类别。" trust_levels: admin: "管理员" staff: "管理人员" @@ -979,6 +987,8 @@ zh_CN: connection_error: "与服务器连接时出现问题,请检查服务器名称和端口并重试。" timeout_error: "连接服务器时超时,请检查服务器名称和端口后并重试。" unhandled_error: "测试电子邮件设置时出现未处理的错误。%{message}" + invalid_host: "提供的主机解析到了一个被禁止的 IP 地址。" + host_resolve_failed: "无法解析提供的主机。" webauthn: validation: invalid_type_error: "提供的 webauthn 类型无效。有效类型为 webauthn.get 和 webauthn.create。" @@ -1063,16 +1073,20 @@ zh_CN: weekly: "每周" every_month: "每月" every_six_months: "每六个月" + calendar_subscriptions: + application_name: "日历订阅" user_api_key: title: '授权“%{application_name}”' authorize: "授权" deny: "取消" read: "读取" read_write: "读/写" - logged_in_as: "登录为" - permissions_header: '这将允许 “%{application_name}”:' + logged_in_as: "登录身份" + permissions_header: '这将允许“%{application_name}”:' redirect_warning: "授权会将您重定向到" instructions: '我们刚刚生成了一个新的用户 API 密钥供您与“%{application_name}”搭配使用,请将以下密钥粘贴到您的应用程序中:' + copy_key: "复制密钥" + copied: "已复制!" otp_description: '要允许“%{application_name}”访问此网站吗?' otp_confirmation: confirm_title: 继续访问 %{site_name} @@ -1151,9 +1165,11 @@ zh_CN: description: "举报状态列表,包括举报类型、发帖人、举报人和解决时间。" visits: title: "用户访问" - xaxis: "天" + xaxis: + desktop: "桌面" + mobile: "移动" yaxis: "访问次数" - description: "登录用户访问的次数。" + description: "按设备类型登录的用户访问次数。" signups: title: "注册" xaxis: "天" @@ -1217,10 +1233,10 @@ zh_CN: description: "登录用户、匿名用户、已知抓取工具和其他流量的页面浏览量。" description_link: "https://meta.discourse.org/t/understanding-pageviews-and-the-site-traffic-report/324062" dau_by_mau: - title: "DAU/MAU" + title: "DAU / MAU" xaxis: "天" yaxis: "DAU/MAU" - description: "在过去一天内登录的成员数除以过去一个月内登录的成员数 – 返回表示社区“粘性”的 %。目标为 >20%。" + description: "最后一天返回的月活跃会员比例。该百分比反映了用户回归的频率,也称为社区“粘性”。目标是高于 20%。" daily_engaged_users: title: "每日参与用户" xaxis: "天" @@ -1507,13 +1523,13 @@ zh_CN: no_accounts: "无关联帐户" discourse_connect: "通过 Discourse Connect 的 SSO" no_sso_accounts: "没有 SSO 记录的帐户" - total_users: "活动用户帐户总数" + total_users: "活跃用户帐户总数" description: "显示按登录提供商分组的关联帐户数量。仅在启用社交登录方法时适用。" dashboard: problem: twitter_login: 'X 登录目前似乎无法使用。请在 网站设置中检查凭据。' group_email_credentials: '群组“%{group_full_name}”的电子邮件凭据存在问题。在解决此问题之前,不会从群组收件箱发送任何电子邮件。%{error}' - upcoming_change_stable_opted_out: '您的网站已选择退出 "%{upcoming_change}" 即将到来的变更。该变更现已进入 "稳定 "状态,可能很快就会被移除或永久化。请访问"即将发生的更改 "页面,查看有关此更改的详细信息。' + upcoming_change_stable_opted_out: '您的网站已选择退出即将推出的更改“%{upcoming_change}”。此更改现已进入“稳定”状态,可能很快就会被移除或设为永久。请访问"即将推出的更改页面,查看有关此更改的详细信息。' rails_env: "您的服务器正在以%{env}模式运行。" host_names: "您的 config/database.yml 文件使用的是默认的 localhost 主机名。请将其更新为您的网站的主机名。" sidekiq: 'Sidekiq 未运行。许多任务(例如发送电子邮件)都是由 Sidekiq 异步执行的。请确保至少一个 Sidekiq 进程正在运行。在此处了解 Sidekiq。' @@ -1533,7 +1549,7 @@ zh_CN: email_polling_errored_recently: other: "电子邮件轮询在过去 24 小时内产生了 %{count} 个错误。查看日志了解更多详细信息。" missing_mailgun_api_key: "服务器被配置为通过 Mailgun 发送电子邮件,但是您尚未提供用于验证网络钩子消息的 API 密钥。" - qq_mail_smtp: "您的 SMTP 服务器 (%{smtp_address}) 已知会导致 Discourse 发送重复邮件。QQ 邮件无法返回正确的确认信息,导致 Discourse 重试已成功发送的邮件。 请参阅推荐的替代方案。" + qq_mail_smtp: "您的 SMTP 服务器 (%{smtp_address}) 已知会导致 Discourse 发送重复电子邮件。QQ 邮件无法返回正确的确认信息,导致 Discourse 重试已成功发送的邮件。 请参阅推荐的替代方案。" bad_favicon_url: "网站图标无法加载。检查网站设置中的网站图标设置。" poll_pop3_timeout: "连接到 POP3 服务器超时。无法检索收到的电子邮件。请检查您的 POP3 设置和服务提供商。" poll_pop3_auth_error: "连接到 POP3 服务器失败,出现身份验证错误。请检查您的 POP3 设置。" @@ -1545,7 +1561,7 @@ zh_CN: category_style_deprecated: "您的 Discourse 目前使用的是过时的类别样式,该样式将在 Discourse 3.2 最终测试版发布前移除。请参阅迁移至单一类别样式网站设置,了解如何保留所选类别样式。" maxmind_db_configuration: '服务器已被配置为使用 MaxMind 数据库进行反向 IP 查找,但尚未配置有效的 MaxMind 帐户 ID,这可能导致 MaxMind 数据库将来无法下载。请参阅本指南了解更多详情。' admin_sidebar_deprecation: "旧的管理布局已被替换为新的边栏布局,旧布局将在下一个版本中移除。您现在可以选择配置新的边栏布局。" - starttls_disabled: "外发电子邮件配置已禁用 STARTTLS。这几乎没有必要。请考虑从您的环境中移除

DISCOURSE_SMTP_ENABLE_START_TLS=false
。有关详细信息,请参阅此主题。" + starttls_disabled: "外发电子邮件配置已禁用 STARTTLS。这几乎没有必要。考虑从您的环境中移除
DISCOURSE_SMTP_ENABLE_START_TLS=false
。有关详情,请参阅此话题。" back_from_logster_text: "返回网站" site_settings: allow_bulk_invite: "允许通过上传 CSV 文件批量邀请" @@ -1590,7 +1606,7 @@ zh_CN: allow_duplicate_topic_titles_category: "如果类别不同,允许有相同或重复标题的话题。必须禁用 allow_duplicate_topic_titles。" unique_posts_mins: "用户可以再次发布相同内容的帖子前需要等待的分钟数" educate_until_posts: "当用户开始输入他们的前几 (n) 个新帖子时,在编辑器中显示弹出式新用户教育面板。" - title: "此站点的名称。所有访客(包括匿名用户)均可见。请注意,更改此标题可能会向 PWA 用户发送提示,要求他们更新或卸载该应用。" + title: "此站点的名称。对所有访客(包括匿名用户)可见。请注意,更改此标题可能会向 PWA 用户发送提示,询问他们是更新还是卸载应用。" site_description: "用一句话描述此网站。对包括匿名用户在内的所有访客可见。" short_site_description: "几个字的简短描述。对包括匿名用户在内的所有访客可见。" contact_email: "负责此网站的主要联系人的电子邮件地址,用于重要通知,也会显示在 /about 上。对公共网站上的匿名用户可见。" @@ -1598,7 +1614,7 @@ zh_CN: crawl_images: "从远程 URL 检索图片以插入正确的宽度和高度尺寸。" download_remote_images_to_local: "通过下载将远程(热链接)图片转换为本地图片;即使图片将来从远程网站移除,这也会保留内容。" download_remote_images_threshold: "将远程图片下载到本地所需的最小磁盘空间(百分比)" - disabled_image_download_domains: "永远不会从这些网域下载远程图片。" + disabled_image_download_domains: "永远不会从这些域下载远程图片。" block_hotlinked_media: "阻止用户在他们的帖子中引入远程(热链接)媒体。未通过 'download_remote_images_to_local' 下载的远程媒体将被替换为占位符链接。" block_hotlinked_media_exceptions: "不受 block_hotlinked_media 设置影响的基础 URL 列表。包括协议(例如,https://example.com)。" editing_grace_period: "发帖后 (n) 秒内,编辑不会在帖子历史记录中创建新版本。" @@ -1634,10 +1650,12 @@ zh_CN: max_oneboxes_per_post: "设置单个帖子中可以包含的最大 onebox 数量。onebox 提供了帖子中链接内容的预览。" facebook_app_access_token: "从您的 Facebook 应用 ID 和密钥生成的令牌。用于生成 Instagram Onebox。" github_onebox_access_tokens: "GitHub 组织或用户与 GitHub 访问令牌之间的映射,用于为私有仓库、提交、拉取请求、议题和文件内容生成 GitHub onebox。如果没有此映射,将只为公开 GitHub URL 创建 onebox。" + reddit_onebox_client_id: "Reddit API OAuth 客户端 ID,用于已通过身份验证的 Reddit Onebox。在 reddit.com/prefs/apps 上创建 'script' 类型的应用,以获取凭据。" + reddit_onebox_client_secret: "用于已通过身份验证的 Reddit OneBox 的 Reddit API OAuth 客户端密钥。可在 reddit.com/prefs/apps 创建的 'script' 类型应用下找到。" logo: "您的网站左上角的徽标图片。使用高度为 120 且宽高比大于 3:1 的宽矩形图片。如果留空,将显示网站标题文本。" logo_small: "您的网站左上角的小徽标图片,向下滚动后可见。使用 120×120 的方形图片。如果留空,将显示首页标志符号。" digest_logo: "在您网站的电子邮件总结顶部使用的备用徽标图片。使用宽矩形图片。不要使用 SVG 图片。如果留空,则使用 `logo` 设置中的图片。" - mobile_logo: "您网站的移动版本上使用的徽标。我们建议使用方形图标以避免标题拥挤,但您可以使用高度为 120 且宽高比大于 3:1 的宽矩形图像。如果留空,将使用徽标设置中的图像。" + mobile_logo: "您的站点的移动版本上使用的徽标。我们建议使用方形图标以避免标题拥挤,但您可以使用高度为 120 且宽高比大于 3:1 的宽矩形图片。如果留空,将使用徽标设置中的图片。" logo_dark: "'logo' 网站设置的深色方案替代选择。" logo_small_dark: "'logo small' 网站设置的深色方案替代选择。" mobile_logo_dark: "'mobile logo' 网站设置的深色方案替代选择。" @@ -1645,15 +1663,15 @@ zh_CN: manifest_icon: "在 Android 上用作徽标/初始屏幕图片的图片。将自动调整为 512 × 512。如果留空,将使用 large_icon。" manifest_screenshots: "在安装提示页面上展示您的实例特色和功能的屏幕截图。所有图片均应为本地上传且尺寸相同。" favicon: "您的网站的网站图标,请参阅 https://zh.wikipedia.org/wiki/Favicon。如果要正确地通过 CDN 分发,它必须是 png 图片。将调整为 32x32。如果留空,将使用 large_icon。" - apple_touch_icon: "用于 Apple 触摸设备的图标。不推荐透明背景。将自动调整为 180x180。如果留空,将使用 large_icon。" + apple_touch_icon: "用于 Apple 触控设备的图标。不推荐透明背景。将自动调整为 180x180。如果留空,将使用 large_icon。" opengraph_image: "默认 OpenGraph 图片,当页面没有其他合适的图片时使用。如果留空,将使用 large_icon。" x_summary_large_image: "Twitter 卡片 'summary large image'(宽度至少应为 280,高度至少为 150,不能为 .svg)。如果留空,则使用 opengraph_image(前提是也不能为 .svg)生成常规卡片元数据。" notification_email: "发送所有重要系统电子邮件时使用的 from: 电子邮件地址。此处指定的网域必须正确设置 SPF、DKIM 和反向 PTR 记录才能收到电子邮件。" email_custom_headers: "自定义邮件头列表" email_subject: "标准电子邮件的可自定义主题格式。请参阅 https://meta.discourse.org/t/customizing-specific-system-email-templates/88323" detailed_404: "向用户提供有关他们无法访问特定话题的更多详细信息。注意:这不太安全,因为用户会知道 URL 是否链接到有效话题。" - enforce_second_factor: "要求用户启用双重身份验证 (2FA),然后才能访问 Discourse 用户界面。此设置不影响 API 或 “DiscourseConnect 提供商” 身份验证。如果启用了 enforce_second_factor_on_external_auth,则用户在设置 2FA 后将无法使用外部身份验证提供商登录。" - enforce_second_factor_on_external_auth: "要求用户始终使用双重身份验证 (2FA)。启用后,如果用户已启用双重身份验证 (2FA),则将阻止他们使用外部身份验证方法(例如社交登录)登录。禁用后,用户只需在使用用户名和密码登录时确认双重身份验证 (2FA)。另请参阅“enforce_second_factor”设置。" + enforce_second_factor: "要求用户启用双重身份验证 (2FA),然后才能访问 Discourse 用户界面。此设置不影响 API 或 'DiscourseConnect provider' 身份验证。如果启用了 enforce_second_factor_on_external_auth,则用户在设置 2FA 后将无法使用外部身份验证提供商登录。" + enforce_second_factor_on_external_auth: "要求用户始终使用双重身份验证 (2FA)。启用后,如果用户已启用双重身份验证 (2FA),将阻止他们使用外部身份验证方法(例如社交登录)登录。禁用后,用户只需要在使用用户名和密码登录时确认双重身份验证 (2FA)。另请参阅 `enforce_second_factor` 设置。" force_https: "强制您的网站仅使用 HTTPS。警告:在您验证 HTTPS 已完全设置并在任何地方都可以正常工作之前,请勿启用此功能!您是否检查过您的 CDN、所有社交登录以及任何外部徽标/依赖项,以确保它们都与 HTTPS 兼容?" summary_score_threshold: "将帖子包含在“总结此话题”中所需的最低分数" summary_posts_required: "启用“总结此话题”之前话题中的最少帖子数。对此设置的更改将在一周内追溯应用。" @@ -1716,6 +1734,7 @@ zh_CN: moderators_manage_categories: "允许版主创建和管理类别" moderators_manage_groups: "允许版主创建和管理群组" moderators_change_post_ownership: "允许版主更改帖子所有权" + change_post_ownership_allowed_groups: "允许这些群组中的用户更改帖子所有权" cors_origins: "允许跨源请求(CORS)。每个来源必须包括 http:// 或 https://。环境变量 DISCOURSE_ENABLE_CORS 必须设置为 true 才能启用 CORS。" use_admin_ip_allowlist: "只有使用“屏蔽的 IP 列表”(管理 > 日志 > 屏蔽的 IP)中的 IP 地址时,管理员才能登录。" blocked_ip_blocks: "Discourse 不应抓取的私有 IP 地址段列表" @@ -1726,10 +1745,9 @@ zh_CN: blocked_crawler_user_agents: "用户代理字符串中不区分大小写的唯一字词,用于标识不应被允许访问网站的网抓取工具。如果定义了许可名单,则不适用。" slow_down_crawler_user_agents: '网络爬虫的用户代理应该按照“减慢爬虫速率”设置中的配置进行速率限制。每个值的长度必须至少为 3 个字符。' slow_down_crawler_rate: "如果指定了 slow_down_crawler_user_agents,则此速率将应用于所有抓取工具(请求之间的延迟秒数)" - llms_txt: "上传一个文本文件,该文件将通过 /llms.txt 提供给 LLM 爬虫。更多信息请访问 llmstxt.org 。" + llms_txt: "上传一个文本文件,该文件将通过 /llms.txt 提供给 LLM 爬虫。有关详情,请参阅 llmstxt.org。" content_security_policy: "启用内容安全策略 (CSP)。CSP 是一个附加安全层,有助于防止某些类型的攻击,包括跨站脚本 (XSS) 和数据注入。" content_security_policy_report_only: "启用仅限内容安全策略报告 (CSP)" - content_security_policy_collect_reports: "在 /csp_reports 启用 CSP 违规报告收集" content_security_policy_frame_ancestors: "限制谁可以通过 CSP 将此网站嵌入 iframe 中。在嵌入上控制允许的主机。" content_security_policy_script_src: "额外的允许脚本源。默认包括当前主机和 CDN。请参阅使用内容安全策略 (CSP) 缓解 XSS 攻击。启用 strict-dynamic 后,其他主机源将被忽略。" invalidate_inactive_admin_email_after_days: "在此天数内未访问网站的管理员帐户将需要在登录前重新验证其电子邮件地址。设置为 0 将禁用。" @@ -1768,8 +1786,8 @@ zh_CN: whispers_allowed_groups: "允许指定群组的成员在话题内进行不公开交流。" hidden_post_visible_groups: "允许这些群组的成员查看隐藏的帖子。管理人员始终可以查看隐藏的帖子。" allow_index_in_robots_txt: "在 robots.txt 中指定允许网络搜索引擎索引本网站。您可以在此处覆盖 robots.txt。警告:错误配置的规则可能导致网站无法按预期被抓取。" - blocked_email_domains: "用户不允许注册帐户的电子邮件域列表。 子域自动处理指定域名。不支持通配符 * 和 ? 。例如:mailinator.com" - allowed_email_domains: "用户必须注册帐户的电子邮件域列表。子域将自动处理指定域名。 Wildcard 符号 * 和 ? 不支持。警告: 电子邮件域名以外的用户将不被允许!" + blocked_email_domains: "用户不可以用于注册帐户的电子邮件域列表。将针对指定域自动处理子域。不支持通配符 * 和 ? 。例如:mailinator.com" + allowed_email_domains: "用户必须用于注册帐户的电子邮件域列表。将针对指定域自动处理子域。不支持通配符 * 和 ?。警告:使用不在列出的电子邮件域的用户将不被允许!" normalize_emails: "检查规范化电子邮件是否唯一。规范化电子邮件移除了用户名中的所有点以及 + 和 @ 符号之间的所有内容。" auto_approve_email_domains: "使用来自此域列表的电子邮件地址的用户将被自动批准。系统会自动处理指定域的子域。不支持通配符 * 和 ?。" hide_email_address_taken: "在注册或忘记密码的过程中,不要告知用户存在一个使用给定电子邮件地址的帐户。对于“忘记密码”请求,需要完整的电子邮件。" @@ -1815,7 +1833,7 @@ zh_CN: enable_local_logins_via_email: "允许用户请求通过电子邮件向他们发送一键登录链接。" allow_new_registrations: "允许新用户注册。取消选中此项以防止任何人创建新帐户。" enable_signup_cta: "向回访匿名用户显示通知,提示他们注册帐户。" - enable_discourse_id: "通过 Discourse ID 启用身份验证,这是一种单点登录服务,允许用户使用一个帐户登录多个 Discourse 站点。无需额外配置即可支持 Google、Facebook 和 Twitter 等常见社交登录提供商。如需了解详情,请参阅 id.discourse.com。" + enable_discourse_id: "通过 Discourse ID 启用身份验证,这是一种单点登录服务,允许用户使用一个帐户登录多个 Discourse 站点。无需额外配置即可支持 Google、Facebook、Apple 和 GitHub 等常见社交登录提供商。如需了解详情,请参阅 id.discourse.com。" enable_google_oauth2_logins: "启用 Google Oauth2 身份验证。这是 Google 当前支持的身份验证方法。要求密钥和密钥代码。请参阅为 Discourse 配置 Google 登录。" google_oauth2_client_id: "由 Google 应用程序提供的唯一客户端 ID,用于身份验证流程。" google_oauth2_client_secret: "您的 Google 应用的客户端密钥。" @@ -1884,7 +1902,7 @@ zh_CN: invite_link_max_redemptions_limit_users: "普通用户生成的邀请链接允许的最大确认次数不能超过此值。" alert_admins_if_errors_per_minute: "激活管理员警告的每分钟错误数量。值为 0 会禁用此功能。注意:需要重启。" alert_admins_if_errors_per_hour: "激活管理员警告的每小时错误数量。值为 0 会禁用此功能。注意:需要重启。" - categories_topics: '在 /categories 页面上显示的主题数量。如果设置为 0,则会自动设置一个值以保持两列对称。该设置仅适用于“分类和最新/热门主题” 分类页面样式。' + categories_topics: '在 /categories 页面上显示的话题数量。如果设置为 0,则会自动设置一个值以保持两列对称。该设置仅适用于“类别和最新/热门话题” 类别页面样式。' suggested_topics: "在话题底部显示的推荐话题的数量。" limit_suggested_to_category: "仅在推荐话题中显示当前类别中的话题" suggested_topics_max_days_old: "推荐话题的存在时间不应超过 n 天。" @@ -1911,7 +1929,7 @@ zh_CN: selectable_avatars_mode: "允许用户从 selectable_avatars 列表中选择头像,并将自定义头像上传限制在所选信任级别。" selectable_avatars: "指定一组头像,用户可以从中选择自己的个人资料照片。该选择将在用户个人资料创建期间或更新个人资料头像时出现。" allow_all_attachments_for_group_messages: "允许群组消息的所有电子邮件附件。" - image_quality: "设置上传到您站点图像的质量等级。较低的质量等级将减少文件尺寸。" + image_quality: "设置上传到您的站点的图片的质量等级。较低的质量等级将缩减文件大小。" png_to_jpg_quality: "转换后的 JPG 文件的质量(1 为最低质量,99 为最佳质量,100 为禁用)。" recompress_original_jpg_quality: "上传的图片文件的质量(1 为最低质量,99 为最佳质量,100 为禁用)。" image_preview_jpg_quality: "调整大小的图片文件的质量(1 为最低质量,99 为最佳质量,100 为禁用)。" @@ -1925,7 +1943,7 @@ zh_CN: video_conversion_enabled: "为上传的视频文件启用视频转换。这可以将视频转换为与网页兼容的格式。" video_conversion_service: "用于处理所上传视频的视频转换服务。" mediaconvert_role_arn: "用于 MediaConvert 服务的 AWS IAM 角色 ARN。使用 AWS MediaConvert 进行视频转换时需要此角色。" - mediaconvert_output_subdirectory: "S3 存储桶中的子目录。MediaConvert 会将转码后的视频临时写入此目录,之后再移动到最终的上传位置。" + mediaconvert_output_subdirectory: "S3 存储桶中的子目录,MediaConvert 会将转换后的视频临时写入此目录,之后再移动到最终的上传位置。" min_ratio_to_crop: "用于裁剪高图片的比率。输入宽度/高度的结果。" simultaneous_uploads: "可以在编辑器中拖放的最大文件数" default_invitee_trust_level: "受邀用户的默认信任级别 (0-4)。" @@ -2038,8 +2056,8 @@ zh_CN: num_flaggers_to_close_topic: "自动暂停话题以进行干预所需的最小唯一举报次数" num_hours_to_close_topic: "暂停话题以进行干预的小时数。" auto_respond_to_flag_actions: "处理举报时启用自动回复。" - min_first_post_typing_time: "用户在第一次发帖时必须输入的最短时间,如果未达到阈值,发布将自动进入需求审批队列。设置为 0 将禁用(不推荐)" - fast_typing_threshold: "发布第一个帖子时,用户必须输入的最短时间。如果未达到该阈值,帖子将自动进入审核队列。最短时间为 1 秒,标准时间为 3 秒,最长时间为 5 秒。" + min_first_post_typing_time: "用户在第一次发帖时必须输入的最短时间,如果未达到阈值,帖子将自动进入需求审批队列。设置为 0 将禁用(不推荐)" + fast_typing_threshold: "用户在第一次发帖时必须输入的最短时间。如果未达到阈值,帖子将自动进入审核队列。最短时间为 1 秒,标准时间为 3 秒,最长时间为 5 秒。" auto_silence_fast_typers_on_first_post: "自动禁言未达到 `fast typing threshold` 的用户" auto_silence_fast_typers_max_trust_level: "自动禁言输入过快的用户的最高信任级别" auto_silence_first_post_regex: "检查用户第一个帖子的大小写不相关的正则表达式。如匹配,用户将被禁言并送至审核队列。示例:raging|a[bc]a 将匹配包含 raging、aba 或者 aca 的所有帖子,因此该用户将被禁言。只对第一个帖子有效。已弃用:改用“禁言关注词”。" @@ -2052,14 +2070,14 @@ zh_CN: allow_all_users_to_flag_illegal_content: "匿名用户将看到需要通过电子邮件向管理员举报非法内容的信息。此设置优先于“允许举报帖子的群组”。" email_address_to_report_illegal_content: "如果留空,将使用默认的网站管理员电子邮件地址。" cooldown_hours_until_reflag: "用户需要等待多长时间才能重新举报帖子" - slow_mode_prevents_editing: "在 \"编辑宽限期 \"之后,\"慢速模式 \"是否会阻止编辑?" + slow_mode_prevents_editing: "在 'editing grace period' 之后,Slow mode' 是否会阻止编辑?" reply_by_email_enabled: "激活允许用户直接通过电子邮件回复话题的功能,无需他们登录网站。有关详情,请参阅 Meta 上的指南 。" reply_by_email_address: "通过传入电子邮件地址回复的模板。示例:%%{reply_key}@reply.example.com 或 replies+%%{reply_key}@example.com" alternative_reply_by_email_addresses: "通过传入电子邮件地址回复的备用模板列表。示例:%%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "对传入电子邮件使用 HTML 而不是文本。" strip_incoming_email_lines: "从传入电子邮件的每一行中移除前导和尾随空格。" - disable_emails: "禁止 Discourse 发送任何类型的电子邮件。选择“是”将对所有用户禁用电子邮件。选择“非管理人员”将仅对非管理人员用户禁用电子邮件。" - allow_email_invites: "禁用此功能后,用户将无法通过 Discourse 发送邀请邮件。" + disable_emails: "阻止 Discourse 发送任何类型的电子邮件。选择 'yes' 将对所有用户禁用外发电子邮件。选择 'non-staff' 将仅对非管理人员用户禁用电子邮件。" + allow_email_invites: "禁用后,用户将无法通过 Discourse 发送邀请电子邮件。" strip_images_from_short_emails: "从大小小于 2800 字节的电子邮件中去除图片" short_email_length: "定义电子邮件被归类为“短”以禁止图片的最大长度(以字节为单位)。如果电子邮件的大小未超过此设置,则电子邮件中的任何图片(例如头像和表情符号)都将被删除。" display_name_on_email_from: "在电子邮件发件人字段上显示全名" @@ -2077,6 +2095,7 @@ zh_CN: mailgun_api_key: "用于验证网络钩子消息的 Mailgun Secret API 密钥。" sendgrid_verification_key: "用于验证网络钩子消息的 Sendgrid 验证密钥。" mailjet_webhook_token: "用于验证网络钩子负载的令牌。它必须作为网络钩子的 't' 查询参数传递,例如:https://example.com/webhook/mailjet?t=supersecret" + mailpace_webhook_token: "用于验证网络钩子有效负载的令牌。它必须作为网络钩子的 't' 查询参数传递,例如:https://example.com/webhook/mailpace?t=supersecret" mandrill_authentication_key: "用于验证网络钩子消息的 Mandrill 身份验证密钥。" postmark_webhook_token: "用于验证网络钩子负载的令牌。它必须作为网络钩子的 't' 查询参数传递,例如:https://example.com/webhook/postmark?t=supersecret" sparkpost_webhook_token: "用于验证网络钩子负载的令牌。它必须作为网络钩子的 't' 查询参数传递,例如:https://example.com/webhook/sparkpost?t=supersecret" @@ -2148,10 +2167,10 @@ zh_CN: enable_category_group_moderation: "允许群组审核特定类别的内容" group_in_subject: "在电子邮件主题中将 %%{optional_pm} 设置为私信中第一个群组的名称,请参阅:自定义标准电子邮件的主题格式" allow_anonymous_mode: "启用可供用户切换到匿名发帖模式的选项。激活后,用户在网站上创建帖子或话题时可以选择隐藏身份。另请参阅 `allow anonymous likes`。" - allow_likes_in_anonymous_mode: "启用此设置,允许匿名浏览网站的用户点赞帖子。 激活后,用户在为帖子或话题点赞时,可以选择隐藏其身份。 此设置需要先启用 `允许匿名模式`。" - anonymous_posting_allowed_groups: "允许匿名发帖的群组。此设置需要启用“允许匿名模式”设置。" + allow_likes_in_anonymous_mode: "启用此设置,允许匿名浏览您的站点的用户为帖子点赞。激活后,用户在为帖子或话题点赞时可以选择隐藏其身份。此设置需要先启用 `allow anonymous mode`。" + anonymous_posting_allowed_groups: "可以启用匿名发帖的群组。此设置需要启用 `allow anonymous mode` 设置。" anonymous_account_duration_minutes: "为了保护匿名性,每 N 分钟为每个用户创建一个新的匿名帐户。示例:如果设置为 600,则在距离上次发帖 600 分钟且用户切换到匿名时,将创建一个新的匿名帐户。" - hide_user_profiles_from_public: "禁用匿名用户的用户卡片、用户个人资料和用户目录。" + hide_user_profiles_from_public: "禁用匿名用户的用户卡和用户配置文件。用户目录中仍将提供汇总的统计数据。" hide_new_user_profiles: "向公众隐藏信任级别 1 或更低的用户个人资料,并隐藏信任级别 1 的用户,直到他们首次发帖。此功能在 must_approve_users 和 invite_only 网站上无条件禁用。" allow_users_to_hide_profile: "允许用户隐藏他们的个人资料和状态" hide_user_activity_tab: "隐藏用户个人资料中的活动标签页,管理员和自己除外。" @@ -2167,13 +2186,13 @@ zh_CN: clean_up_unused_staged_users_after_days: "未使用的暂存用户(没有任何帖子)被移除前的等待天数。设为 0 将禁用清理。" user_selected_primary_groups: "允许用户设置自己的主要群组" max_notifications_per_user: "每个用户的最大通知数量,如果超过此数值,旧通知将被删除。每周强制执行。设置为 0 将禁用" - allowed_user_website_domains: "用户网站将根据这些域名进行验证。" + allowed_user_website_domains: "用户网站将根据这些域进行验证。" allow_profile_backgrounds: "允许用户上传个人资料背景。" get_a_room_threshold: "在被警告之前,用户必须在同一话题中向同一个人发布的帖子数。" dont_feed_the_trolls_threshold: "被警告前来自其他用户的举报数量。" enable_mobile_theme: "移动设备使用适合移动设备的主题,并且可以切换到完整网站。如果您想使用完全自适应的自定义样式表,请禁用此选项。" dominating_topic_minimum_percent: "在被提醒过度主导某个话题之前,用户必须在某个话题中发布的帖子所占的百分比。" - pm_warn_user_last_seen_months_ago: "在创建新的私信时,如果目标接收者已经超过 n 个月前无活动,则警告用户。" + pm_warn_user_last_seen_months_ago: "创建新私信时,如果目标接收者自超过 n 个月前无活动,则警告用户。" suppress_uncategorized_badge: "不在话题列表中显示未分类话题的徽章。" header_dropdown_category_count: "标题下拉菜单中可以显示的类别数量。" permalink_normalizations: "在匹配永久链接之前应用以下正则表达式,例如:/(topic.*)\\?.*/\\1 将从话题路由中去除查询字符串。格式为正则表达式+字符串。使用 \\1 等访问捕获" @@ -2247,7 +2266,7 @@ zh_CN: disable_watched_word_checking_in_user_fields: "在用户字段中禁用关注词检查" watched_words_regular_expressions: "允许使用正则表达式筛选字词。如果启用,它会根据字词的大小写将敏感词分组。然后,它将所有选定字词编译成一个单一的正则表达式,并为常规关注词添加字词边界。因此,这种基于正则表达式的筛选方法通过支持更复杂的字词模式,对内容审核增加了额外一层控制。该设置还允许轻松地使用选择的替换文本替换原始文本。" enable_fast_edit: "在帖子选择菜单中添加一个按钮以内联编辑小部分内容。" - old_post_notice_days: "新用户和回访用户发布通知后隐藏的天数。官方发布的通知将始终可见。" + old_post_notice_days: "新用户和回访用户发布通知后隐藏的天数。官方帖子通知将始终可见。" new_user_notice_tl: "查看新用户帖子通知所需的最低信任级别。" returning_user_notice_tl: "查看回访用户帖子通知所需的最低信任级别。" returning_users_days: "在用户被视为回访之前应经过的天数。" @@ -2329,7 +2348,7 @@ zh_CN: force_lowercase_tags: "强制所有新标签完全小写。" create_post_for_category_and_tag_changes: "当一个话题的类别或标签发生更改时,创建密语帖子,需要启用密语帖子。" automatically_clean_unused_tags: "每天自动删除未在任何话题或个人消息中使用的标签。" - default_watched_precedence_over_muted: "如果我正在关注的类别或标签中有我已设为免打扰的话题,请通知我。" + default_watched_precedence_over_muted: "如果用户正在关注的类别或标签中有他们已设为免打扰的类别或标签,则通知他们" company_name: "您的公司或组织的名称。如果留空,将不会提供样板《服务条款》或《隐私声明》。" governing_law: "指定管辖网站法律方面(包括《服务条款》和《隐私政策》)的司法管辖区。这通常是运营网站的公司注册或开展业务的国家/地区或州。" city_for_disputes: "指定将用作解决与使用此论坛相关的任何争议的管辖城市。此信息通常包含在法律文件(例如论坛的《服务条款》)中。" @@ -2345,11 +2364,11 @@ zh_CN: sitemap_page_size: "每个网站地图页面中包含的 URL 数量。最大 50.000" enable_user_status: "允许用户设置自定义状态消息(表情符号 + 描述)。" enable_user_tips: "启用向用户描述关键功能的新用户提示" - short_title: "简短标题将显示在用户的主屏幕、启动器或其他空间有限的地方。标题长度应限制在 12 个字符以内。请注意,更改此标题可能会向 PWA 用户发送提示,询问他们是否需要更新或卸载该应用。" + short_title: "简短标题将显示在用户的主屏幕、启动器或其他空间有限的地方。标题长度应限制在 12 个字符以内。请注意,更改此标题可能会向 PWA 用户发送提示,询问他们是更新还是卸载应用。" dashboard_hidden_reports: "允许从信息中心隐藏指定报告。" dashboard_visible_tabs: "选择可见的信息中心标签页。" dashboard_general_tab_activity_metrics: "选择要在“常规”标签页上显示为活动指标的报告。" - gravatar_enabled: "使用 Gravatar 服务制作用户头像。这将阻止用户改用 Gravatar 制作头像,但不会影响已使用 Gravatar 的用户。" + gravatar_enabled: "使用 Gravatar 服务制作用户头像。禁用将阻止用户改用 Gravatar 制作头像,但不会影响已使用 Gravatar 的用户。" gravatar_name: "指定 Gravatar 服务提供商的名称。此名称通常用于标识向网站提供 Gravatar 头像的来源。" gravatar_base_url: "指定用于访问 Gravatar 提供商的 API 的 URL。此设置对于将电子邮件地址转换为存储头像图片的 Gravatar URL 至关重要。" gravatar_login_url: "相对于 `gravatar_base_url` 的 URL,它为用户提供了登录 Gravatar 服务的途径。" @@ -2362,23 +2381,25 @@ zh_CN: suggest_weekends_in_date_pickers: "在日期选择器建议中包括周末(周六和周日)(如果您仅在工作日(周一至周五)使用 Discourse,请禁用此选项)。" show_bottom_topic_map: "当话题有 10 条或更多回复时,在话题底部显示话题地图。" show_topic_map_in_topics_without_replies: "即使话题没有回复也显示话题地图。" - enable_site_owner_onboarding: "在主页上向新管理员显示面板以帮助他们开始。重新启用此设置以再次查看登临步骤。" + enable_site_owner_onboarding: "在首页上向新管理员显示面板以帮助他们开始。重新启用此设置以再次查看入门步骤。" + site_owner_onboarding_max_days: "网站创建后显示入门横幅的最大天数。" enable_welcome_banner: "在主要话题列表页面上显示横幅,以欢迎成员并允许他们搜索站点内容" welcome_banner_image: "设置在欢迎横幅背景中显示的图片。" welcome_banner_location: "确定欢迎横幅在页面上的显示位置。" welcome_banner_page_visibility: "确定哪些页面会显示欢迎横幅。" - welcome_banner_text_color: "配置 “欢迎横幅图片” 设置后,使用此设置更改横幅文字颜色,以确保其可读性。当留空或未上传任何图像时,则颜色由当前主题控制。" + welcome_banner_text_color: "配置 'Welcome banner image' 设置后,使用此设置更改横幅文本颜色,以确保其清晰可读。如果留空或未上传任何图片,有效主题将控制颜色。" splash_screen: "在加载网站资源时显示临时加载屏幕" - splash_screen_image: "网站加载时在启动画面上显示的 SVG 图像。动画 SVG 只能使用 CSS 变换或不透明动画。为 CSS 类和关键帧使用唯一的名称。你可以使用 var (--primary)、var (--secondary) 和 var (--terriary) 来引用主题颜色。" + splash_screen_image: "站点加载时在启动画面上显示的 SVG 图片。动画 SVG 只应使用 CSS 变换或不透明动画。为 CSS 类和关键帧使用独一无二的名称。您可以使用 var (--primary)、var (--secondary) 和 var (--terriary) 引用主题颜色。" navigation_menu: "指定边栏或标题下拉菜单作为网站的主导航菜单。推荐使用边栏。" default_navigation_menu_categories: "所选类别默认将显示在导航菜单的“类别”版块下。" default_navigation_menu_tags: "所选标签默认将显示在导航菜单的“标签”版块下。" experimental_new_new_view_groups: '启用新的话题列表,将未读话题与新话题合并,并使边栏中的“一切”链接指向该列表。' - enable_form_templates: "表单模板允许您在主题创建流程中强制执行结构化表单和数据验证。" + enable_form_templates: "启用表单模板功能。借助此功能,您可以在话题创建流程中强制执行结构化表单和数据验证。" show_preview_for_form_templates: "启用表单模板预览功能" lazy_load_categories_groups: "只为这些群组的用户延迟加载类别信息。这可以提升有许多类别的网站的性能。" - enable_auto_grid_images: "在编辑器中上传 3 张或更多图片后,自动将图像包装在 [grid] 标记中。" - impersonate_without_logout: "无需注销管理员帐户即可模拟用户。" + enable_auto_grid_images: "在编辑器中上传 3 张或更多图片后,自动将图片包装在 [grid] 标记中。" + enable_new_checkbox_style: "为 FormKit 复选框启用重新设计的复选框样式。" + impersonate_without_logout: "允许管理员在不退出其管理员帐户的情况下模拟用户。" experimental_impersonation_time_limit_minutes: "模拟会话需要多长时间才能自动结束。" page_loading_indicator: "配置在 Discourse 中进行页面导航时出现的加载指示器。“旋转的图标”是整页指示器。“滑块”会在屏幕顶部显示一个窄条。" show_user_menu_avatars: "在用户菜单中显示用户头像" @@ -2392,28 +2413,30 @@ zh_CN: rich_editor: "为输入框启用富文本编辑器,以便所有用户都可以在当前 Markdown 模式和新的富文本编辑器之间切换,从而实现更直观、更人性化的写作体验。" default_composition_mode: "设置社区编辑器的默认模式。富文本模式为大多数用户提供了更现代、更熟悉的写作体验,而 Markdown 模式可能更适合技术能力更高的用户。成员可以使用编辑器工具栏中的切换按钮在不同模式之间切换。" reviewable_ui_refresh: "可以在审核队列中使用实验性新 UI 的群组。" - viewport_based_mobile_mode: "使用视口宽度来确定移动/桌面模式。此设置即将移除。如果您需要将其关闭,请在 Meta 中告知我们 。" + viewport_based_mobile_mode: "使用视口宽度来确定移动/桌面模式。此设置即将移除。如果您需要将其关闭,请在 Meta 上告诉我们。" content_localization_enabled: "根据用户的浏览器或语言偏好设置,显示本地化内容。此类内容可能包括类别、标签、帖子和话题。支持的语言环境在 'content localization supported locales' 中设置。" - content_localization_supported_locales: "用户内容可翻译成的支持语言列表。网站默认语言始终包含在内。需要启用 'content localization enabled'。" + content_localization_supported_locales: "用户内容可以翻译成的支持语言区域列表。站点的默认语言区域始终包含在内。需要启用 'content localization enabled'。" content_localization_allowed_groups: "允许更新本地化内容的群组。需要 'content localization enabled'。" - content_localization_language_switcher: "在页眉中显示语言切换器,允许访问者在翻译版本的 Discourse 和用户贡献的内容之间切换。使用 \"内容本地化支持的本地语言 \"中定义的语言" - content_localization_crawler_param: "启用 \"内容本地化 \"和 \"从参数设置本地化 \"后,向网络爬虫提供本地化内容。支持的本地化语言列表在 \"内容本地化支持的本地化语言 \"中定义。" - content_localization_use_default_locale_when_unsupported: "向首选语言未列在 \"内容本地化支持的语言 \"中的用户提供网站默认语言的本地化内容。" - content_localization_allow_author_localization: "允许作者通过帖子菜单更新自己主题和帖子的本地化内容。" - enable_upcoming_changes: "启用即将到来的更改" - fake_upcoming_change: "这是为测试目的即将进行的虚假更改。无需翻译此字符串。" - floating_dismiss_topics_on_mobile: "在移动设备上为话题列表显示一个浮动的 \"忽略... \"按钮,以方便用户访问,并腾出话题列表顶部的空间" - rename_faq_to_guidelines: "此更改将常见问题页面重命名为指南。常见问题页面仍可通过 /faq 访问。 'faq url' 的设置与以前一样有效。" - enable_simplified_category_creation: "使用更少的选项和更简洁的界面来简化类别创建流程。" - enable_custom_splash_screen: "允许您使用自己的 SVG 图片自定义加载启动画面。通过“启动画面图片”设置上传图片。警告:这可能会对 LCP 分数和 Google 索引产生负面影响。" - modernize_foundation_theme: "此次更改对 Discourse 中的 Foundation 主题进行了设计修改。" + content_localization_language_switcher: "在页眉中显示语言切换器,允许访客在翻译版本的 Discourse 和用户贡献的内容之间切换。使用 'content localization supported locales' 中定义的语言" + content_localization_crawler_param: "启用 'content localization enabled' 和 'set locale from param' 后,向网络爬虫提供本地化内容。支持的语言区域列表在 'content localization supported locales' 中定义。" + content_localization_use_default_locale_when_unsupported: "向首选语言未列在 'content localization supported locales' 中的用户提供站点的默认语言区域的本地化内容。" + content_localization_allow_author_localization: "允许作者通过帖子菜单更新自己话题和帖子的本地化。" + fake_upcoming_change: "这是用于测试目的虚假即将推出的更改。无需翻译此字符串。" + floating_dismiss_topics_on_mobile: "在移动设备上为话题列表显示一个浮动式 'Dismiss...' 按钮,以方便用户访问,并腾出话题列表顶部的空间" + rename_faq_to_guidelines: "此次更改将常见问题解答页面重命名为准则。常见问题解答页面仍可通过 /faq 访问。'faq url' 设置与以前一样有效。" + enable_simplified_category_creation: "使用更少的选项和更简洁的界面简化类别创建流程。" + enable_custom_splash_screen: "允许您使用自己的 SVG 图片自定义加载启动画面。通过 'splash screen image' 设置上传图片。警告:这可能会对 LCP 分数和 Google 索引产生负面影响。" + modernize_foundation_theme: "此次更改对 Discourse 中的 Foundation 主题引入了设计修改。" + reporting_improvements: "改进了 Discourse 管理员报告的导航、设计和实用性。" errors: invalid_css_color: "颜色无效。输入颜色名称或十六进制值。" - invalid_datetime: "日期时间格式无效。请确保您输入的日期和时间有效。" + invalid_datetime: "日期时间格式无效。请确保输入有效的日期和时间。" invalid_email: "无效的电子邮件地址。" invalid_username: "没有使用该用户名的用户。" valid_username: "存在一个使用该用户名的用户。" invalid_group: "没有使用该名称的群组。" + invalid_svg: "SVG 图片无效。它必须包含 SVG 元素,且不能包含任何脚本或事件处理程序。" + invalid_upload: "上传内容无效或不存在。" invalid_topic: "没有与该 ID 匹配的话题。" invalid_integer_min_max: "值必须介于 %{min} 和 %{max}之间。" invalid_integer_min: "值必须为 %{min} 或更大。" @@ -2449,12 +2472,12 @@ zh_CN: reply_by_email_disabled: "在启用此设置之前,您必须先启用 'reply by email'。" discourse_connect_url_is_empty: "在启用此设置之前,您必须先设置 'discourse connect url'。" enable_local_logins_disabled: "在启用此设置之前,您必须先启用 'enable local logins'。" - min_username_length_exists: "您不能将最小用户名长度设置为高于最短用户名 (%{username})。" - min_group_name_length_exists: "您不能将最小用户名长度设置为大于最短群组名称 (%{group_name})。" - min_username_length_range: "您不能将最小值设置为高于最大值。" - max_username_length_exists: "您不能将最大用户名长度设置为低于最长用户名 (%{username})。" - max_group_name_length_exists: "您不能将最大用户名长度设置为小于最长群组名称 (%{group_name})。" - max_username_length_range: "您不能将最大值设置为低于最小值。" + min_username_length_exists: "'min username length' 不能大于最短用户名 (%{username})。" + min_group_name_length_exists: "'min username length' 不能大于最短群组名称 (%{group_name})。" + min_username_length_range: "'min username length' 不能大于 'max username length'。" + max_username_length_exists: "'max username length' 不能小于最长用户名 (%{username})。" + max_group_name_length_exists: "'max username length' 不能小于最长群组名称 (%{group_name})。" + max_username_length_range: "'max username length' 不能小于 'min username length'。" invalid_hex_value: "颜色值必须是 6 位十六进制代码。" empty_selectable_avatars: "在启用此设置之前,您必须先上传至少两个可选择的头像。" category_search_priority: @@ -2468,7 +2491,7 @@ zh_CN: other: "该列表必须恰好包含 %{count} 个值。" markdown_linkify_tlds: "您不能包含 '*' 的值。" google_oauth2_hd_groups: "在启用此设置之前,您必须配置所有 'google oauth2 hd' 设置。" - discourse_id_registration: "使用 Discourse ID 自动注册失败。这可能是由于网络连接问题、防火墙限制或 Discourse ID 服务无法访问造成的。请查看服务器日志了解更多详情或联系技术支持。" + discourse_id_registration: "无法使用 Discourse ID 自动注册。这可能是由于网络连接问题、防火墙限制或 Discourse ID 服务无法访问。请查看服务器日志了解更多详情或联系支持团队。" linkedin_oidc_credentials: "启用此设置前,必须先配置 LinkedIn OIDC 凭据 ('linkedin_oidc_client_id' 和 'linkedin_oidc_client_secret')。" search_tokenize_chinese_enabled: "在启用此设置之前,您必须禁用 'search_tokenize_chinese'。" search_tokenize_japanese_enabled: "在启用此设置之前,您必须禁用 'search_tokenize_japanese'。" @@ -2477,9 +2500,9 @@ zh_CN: invalid_uncategorized_category_setting: '如果“允许未分类话题”设置未启用,则无法选择“未分类”类别。' invalid_search_ranking_weights: "该值对于 search_ranking_weights 网站设置无效。示例:'{0.1,0.2,0.3,1.0}'。注意,每个权重的最大值为 1.0。" content_localization_locale_limit: "支持的语言环境数量不能超过 %{max} 个。" - content_localization_language_switcher_requirements: "语言切换器要求启用 \"从 cookie 设置本地化 \"和 \"允许用户本地化 \"网站设置,并且 \"内容本地化支持的本地化 \"至少有一种语言。" + content_localization_language_switcher_requirements: "语言切换器要求启用 'set locale from cookie' 和 'allow user locale' 站点设置,并且 'content localization supported locales' 至少有一种语言。" mediaconvert_role_arn_required: "使用 AWS MediaConvert 进行视频转换时需要具有 AWS IAM 角色 ARN。" - mediaconvert_output_subdirectory_required: "MediaConvert 输出子目录是必填的。" + mediaconvert_output_subdirectory_required: "MediaConvert 输出子目录为必选项。" s3_credentials_required_for_video_conversion: "需要具有 S3 凭据才能进行视频转换。请配置 S3 访问密钥或启用 IAM 配置文件。" keywords: clean_up_inactive_users_after_days: "已停用|闲置|未激活" @@ -2503,7 +2526,7 @@ zh_CN: filter: description: status: "按状态筛选话题" - in: "筛选个人列表中的主题" + in: "筛选个人列表中的话题" order: "按特定字段排列话题" category: "显示特定类别中的话题" category_any: "显示任意指定类别(以逗号分隔)中的话题" @@ -2516,16 +2539,17 @@ zh_CN: exclude_tag: "排除带有特定标签的话题" exclude_tags_any: "排除带有任意指定标签(以逗号分隔)的话题" exclude_tags_all: "排除带有所有指定标签(以加号分隔)的话题" - tags_alias: "“标签:”筛选器的别名" tag_group: "显示带有特定标签组的标签的话题" exclude_tag_group: "排除带有特定标签组的标签的话题" activity_before: "显示最新活动在某个日期之前(YYYY-MM-DD 或几天前)的话题" activity_after: "显示最新活动在某个日期之后(YYYY-MM-DD 或几天前)的话题" + bookmarked_before: "显示指定日期(YYYY-MM-DD 或天数前)之前收藏的主题" + bookmarked_after: "显示按日期(YYYY-MM-DD 或天数)后收藏的主题" created_before: "显示在某个日期之前(YYYY-MM-DD 或几天前)创建的话题" created_after: "显示在某个日期之后(YYYY-MM-DD 或几天前)创建的话题" created_by: "显示特定用户或群组创建的话题" - created_by_user: "显示由用户名或群组创建的主题(不带@符号)" - created_by_multiple: "显示任何指定用户或群组创建的主题(以逗号分隔)" + created_by_user: "显示由用户名或群组创建的话题(不带 @)" + created_by_multiple: "显示任何指定用户或群组创建的话题(以逗号分隔)" latest_post_before: "显示最新帖子在某个日期之前(YYYY-MM-DD 或几天前)的话题" latest_post_after: "显示最新帖子在某个日期之后(YYYY-MM-DD 或几天前)的话题" likes_min: "显示至少有这些赞的话题" @@ -2578,15 +2602,15 @@ zh_CN: order_read_asc: "按最后阅读时间排序(时间最早的优先)" order_hot: "按热门程度排序(最高优先)" order_hot_asc: "按热门程度排序(最低优先)" - users: "按参与者筛选主题" - users_any: "显示任何指定用户的主题(以逗号分隔)" - users_all: "显示所有指定用户参与的主题(以加号分隔)" + users: "按参与者筛选话题" + users_any: "显示包含任意指定用户的话题(以逗号分隔)" + users_all: "显示包含所有指定用户的话题(以加号分隔)" exclude_users: "排除特定用户的话题" - group: "按群组筛选主题" - groups_any: "显示任意指定群组的主题(以逗号分隔)" - groups_all: "显示包含所有指定群组的主题(加号分隔)" - locale: "按原始语言过滤话题" - locale_any: "显示以任何指定语言撰写的原始话题(以逗号分隔)" + group: "按群组筛选话题" + groups_any: "显示包含任意指定群组的话题(以逗号分隔)" + groups_all: "显示包含所有指定群组的话题(以加号分隔)" + locale: "按原始语言筛选话题" + locale_any: "显示以任意指定语言撰写的原始话题(以逗号分隔)" exclude_locale: "排除最初以特定语言撰写的话题" discourse_connect: login_error: "登录错误" @@ -2698,7 +2722,7 @@ zh_CN: csrf_detected: "抱歉,授权超时,或者您已切换浏览器。请重试。" request_error: "抱歉,启动授权时发生错误。请重试。" invalid_iat: "抱歉,由于服务器时钟差异,无法验证授权令牌。请重试。" - unauthorized: "抱歉,登录提供商未批准您的请求。请重试或联系管理员。" + unauthorized: "抱歉,登录提供商未授权您的请求。请重试或联系管理员。" omniauth_error_unknown: "处理您的登录时出错,请重试。" omniauth_confirm_title: "使用 %{provider} 登录" omniauth_confirm_button: "继续" @@ -2752,7 +2776,7 @@ zh_CN: updating_user_ids: "正在更新用户 ID…" deleting_source_user: "正在删除源用户…" user: - anonymized: "[因用户匿名化已移除]" + anonymized: "[已因用户匿名化移除]" deactivated: "由于 '%{email}' 的退回电子邮件过多,已被停用。" deactivated_by_staff: "被管理人员停用" deactivated_by_inactivity: @@ -2924,32 +2948,32 @@ zh_CN: title: "新版本邮件" subject_template: "[%{email_prefix}] 新 Discourse 版本,有可用更新" text_body_template: | - 太好了,新版本的 [Discourse](https://www.discourse.org) 现已发布! + 太好了![Discourse](https://www.discourse.org) 新版本已发布! - 您的版本:%{installed_version} + 您的版本: %{installed_version} 新版本:**%{new_version}** - - 使用我们的**[一键式浏览器更新](%{base_url}/admin/update)**进行更新 + - 使用我们便捷的 **一键浏览器更新](%{base_url}/admin/update)** 进行更新 - - 查看[版本说明](https://meta.discourse.org/tag/release-notes)中的最新变化,或查看[原始 GitHub 更改日志](https://github.com/discourse/discourse/commits/main) + - 查看[发行说明](https://releases.discourse.org/changelog/%{new_version})了解新增功能 - - 访问 [meta.discourse.org](https://meta.discourse.org) 了解 Discourse 的新闻、讨论和支持。 + - 访问[meta.discourse.org](https://meta.discourse.org)获取Discourse的新闻、讨论和支持 new_version_mailer_with_notes: title: "带版本说明的新版本邮件" subject_template: "[%{email_prefix}] 有可用更新" text_body_template: | - 太好了,新版本的 [Discourse](https://www.discourse.org) 现已发布! + 太好了![Discourse](https://www.discourse.org) 新版本上线啦! - 您的版本:%{installed_version} + 您的版本: %{installed_version} 新版本:**%{new_version}** - - 使用我们简单的**[一键式浏览器更新](%{base_url}/admin/update)**进行更新 + - 使用我们便捷的 **[一键浏览器更新](%{base_url}/admin/update)** 进行更新 - - 查看[版本说明](https://meta.discourse.org/tag/release-notes)中的最新变化,或查看[原始 GitHub 更改日志](https://github.com/discourse/discourse/commits/main) + - 查看[发行说明](https://releases.discourse.org/changelog/%{new_version})中的新增功能 - - 访问 [meta.discourse.org](https://meta.discourse.org) 了解 Discourse 的新闻、讨论和支持 + - 访问[meta.discourse.org](https://meta.discourse.org) 获取 Discourse 的新闻、讨论和支持 - ### 版本说明 + ### 发行说明 %{notes} flag_reasons: @@ -2958,13 +2982,13 @@ zh_CN: illegal: "您的帖子被举报为**非法**:社区认为这可能触犯了法律。" spam: "您的帖子被举报为**垃圾信息**:社区认为它是广告,像是在过度地推广着什么,而不是预期中与话题有关的内容。" notify_moderators: "您的帖子被举报为**需要版主注意**:社区认为帖子需要管理人员手动干预。" - needs_approval: "您的帖子被标记为**需要批准**:它已加入审核队列,管理人员将审核它是否满足[我们的社区准则](%{base_path}/guidelines)。" + needs_approval: "您的帖子被标记为**需要审批**:它已自动加入审核队列,管理人员将确保它满足[我们的社区准则](%{base_path}/guidelines)。" responder: off_topic: "该帖子被举报为**偏离话题**:鉴于话题标题和第一个帖子,社区认为它不适合该话题。" inappropriate: "这个帖子被举报为**不当言论**:社区认为它具有冒犯性、侮辱性、属于仇恨行为或违反了[我们的社区准则](%{base_path}/guidelines)。" spam: "该帖子被举报为**垃圾信息**:社区认为这是一个广告,本质上是过度宣传的东西,而不是像预期的那样有用或与话题相关。" notify_moderators: "该帖子被举报为**需要版主注意**:社区认为帖子需要管理人员手动干预。" - needs_approval: "该帖子被标记为**需要批准**:它已加入审核队列,管理人员将审核它是否满足[我们的社区准则](%{base_path}/guidelines)。" + needs_approval: "该帖子被标记为**需要审批**:它已自动加入审核队列,管理人员将确保它满足[我们的社区准则](%{base_path}/guidelines)。" flags_dispositions: agreed: "感谢通知我们。我们认为这是个问题,正在进行调查。" agreed_and_deleted: "感谢通知我们。我们认为这是个问题,并且已将该帖子移除。" @@ -3001,47 +3025,9 @@ zh_CN: reviewable_queued_post_revise_and_reject: title: "对您的帖子的反馈" subject_template: "对您在 %{topic_title} 下发表的帖子的反馈" - text_body_template: | - %{username},您好! - - 我们审核了您在 [%{topic_title}](%{topic_url}) 下发表的帖子,并有一些反馈供您查阅。 - - 原因:%{reason} - - 反馈:%{feedback} - - 您可以在下方编辑原帖,然后重新提交,进行建议的修改。如果您有任何问题,也可以回复此消息。 - - -------- - - %{original_post} - - -------- - - 谢谢! - %{site_name} 版主 reviewable_queued_post_revise_and_reject_new_topic: title: "对您的话题的反馈" subject_template: '对标题为“%{topic_title}”的新话题的反馈' - text_body_template: | - %{username},您好! - - 我们审核了您标题为“%{topic_title}”的新话题,并有一些反馈供您查阅。 - - 原因:%{reason} - - 反馈:%{feedback} - - 您可以在下方编辑话题的原帖,然后重新提交,进行建议的修改。如果您有任何问题,也可以回复此消息。 - - -------- - - %{original_post} - - -------- - - 谢谢! - %{site_name} 版主 post_hidden_again: title: "帖子被再次隐藏" preview: "由于社区成员的再次举报,帖子已被隐藏。" @@ -3566,24 +3552,26 @@ zh_CN: title: "用户被自动禁言" subject_template: "新用户 %{username} 因社区举报被禁言" text_body_template: | - 新用户[%{username}](%{user_url})已被系统自动禁言。 + 这是一条由系统发送的消息。 - 请[审核举报内容](%{base_url}/review)。如果%{username}被错误地禁言,请点击[此用户管理页面](%{user_url})中的解除禁言按钮。 + 新用户 [%{username}](%{user_url}) 已被自动禁言。 - 自动禁言阈值可以通过站点设置中的`silence_new_user`调整。 + 请[审核举报内容](%{base_url}/review)。如果 %{username} 被错误地禁言,请点击[此用户管理页面](%{user_url})中的解除禁言按钮。 + + 此阈值可以通过 `silence_new_user` 站点设置进行更改。 user_automatically_silenced_with_reason: title: "用户被自动禁言" subject_template: "新用户 %{username} 因社区举报被禁言" text_body_template: | 这是一条由系统发送的消息。 - 新用户[%{username}](%{user_url})已被系统自动禁言。 + 新用户 [%{username}](%{user_url}) 已被自动禁言。 - 原因:%{reason} + 原因 - %{reason} - 请[审核举报内容](%{base_url}/review)。如果%{username}被错误地禁言,请点击[此用户管理页面](%{user_url})中的解除禁言按钮。 + 请[审核举报内容](%{base_url}/review)。如果 %{username} 被错误地禁言,请点击[此用户管理页面](%{user_url})中的解除禁言按钮。 - 自动禁言阈值可以通过站点设置中的`silence_new_user`调整。 + 此阈值可以通过 `silence_new_user` 站点设置进行更改。 spam_post_blocked: title: "垃圾信息帖子被屏蔽" subject_template: "新用户 %{username} 的帖子因重复链接被屏蔽" @@ -3597,7 +3585,7 @@ zh_CN: 可以通过 `newuser_spam_host_threshold` 和 `allowed_spam_host_domains` 网站设置对此进行修改。如果他们应该被豁免,请考虑将 %{domains} 添加到许可名单中。 unsilenced: title: "已被取消禁言" - preview: "帐户不再处于暂停状态." + preview: "帐户不再处于暂停状态。" subject_template: "帐户不再处于暂停状态" text_body_template: | 您好, @@ -3635,10 +3623,10 @@ zh_CN: 新用户的帖子目前正在等待审核。[在此处批准或拒绝他们](%{base_url}/review?type=ReviewableQueuedPost)。 user_posts_deleted: - title: "用户的帖子已被删除" + title: "用户帖子已被删除" subject_template: "%{user} 的所有帖子已被删除" text_body_template: - other: "@%{user} 的%{count}个帖子已被 @%{staff_user} 删除。" + other: "@%{user} 的 %{count} 个帖子已被 @%{staff_user} 删除。" unsubscribe_link: | 要退订这些电子邮件,请[点击此处](%{unsubscribe_url})。 unsubscribe_link_and_mail: | @@ -3750,7 +3738,7 @@ zh_CN: %{respond_instructions} user_replied: title: "用户回复" - preview: "有用户回复了你的帖子。" + preview: "有人回复了您的帖子。" subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3773,7 +3761,7 @@ zh_CN: %{respond_instructions} user_quoted: title: "用户引用" - preview: "有用户在帖子内引用了你的内容。" + preview: "有人在帖子中引用了您的内容。" subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3785,7 +3773,7 @@ zh_CN: %{respond_instructions} user_linked: title: "用户链接" - preview: "你的帖子与另一个话题相关联。" + preview: "帖子链接到另一个话题。" subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3797,7 +3785,7 @@ zh_CN: %{respond_instructions} user_mentioned: title: "用户提及" - preview: "有用户在帖子中@了你。" + preview: "有人在帖子中提到了您。" subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3853,7 +3841,7 @@ zh_CN: %{respond_instructions} user_posted: title: "用户发帖" - preview: "有用户回复了你关注的帖子。" + preview: "有人回复了您关注的话题。" subject_template: "[%{email_prefix}] %{topic_title}" text_body_template: | %{header_instructions} @@ -3887,7 +3875,7 @@ zh_CN: %{respond_instructions} user_posted_pm: title: "用户发布私信" - preview: "有用户向你发送了私信。" + preview: "有人向您发送了一条 PM。" subject_template: "[%{email_prefix}] [私信] %{topic_title}" text_body_template: | %{header_instructions} @@ -3957,11 +3945,11 @@ zh_CN: title: "双重身份验证已禁用" subject_template: "[%{email_prefix}] 双重身份验证已禁用" text_body_template: | - 您在 %{site_name} 上的账户的双重身份验证已被停用,现在你可以通过密码登录账户,而无需额外的身份验证码。 + 您在 %{site_name} 上的帐户的双重身份验证已被禁用。您现在可以仅使用您的密码登录;不再需要额外的身份验证代码。 - 如果您未曾选择禁用双重身份验证,那么您的帐户可能已被他人盗用。 + 如果您没有选择禁用双重身份验证 (2FA),则可能有人盗用了您的帐户。 - 如果您对此有任何疑问,请[联系网站管理](%{base_url}/about)。 + 如果您有任何问题,请[联系我们友好的管理人员](%{base_url}/about)。 digest: why: "自 %{since} 以来 %{site_link} 的简要摘要" since_last_visit: "自从您上次访问以来" @@ -3993,7 +3981,7 @@ zh_CN: %{base_url}/u/password-reset/%{email_token} email_login: title: "通过链接登录" - preview: "通过链接登录." + preview: "通过链接登录。" subject_template: "[%{email_prefix}] 通过链接登录" text_body_template: | 这是您用于登录 [%{site_name}](%{base_url}) 的链接 @@ -4170,9 +4158,9 @@ zh_CN: popular_topics: "热门话题" recent_topics: "近期话题" see_more: "更多" - search_title: "尝试搜索感兴趣的话题" + search_title: "尝试改为搜索?" search_button: "搜索" - home: "返回主页" + home: "返回首页" placeholder: "通过标题或关键字搜索话题…" offline: title: "无法加载应用" @@ -4724,17 +4712,17 @@ zh_CN: name: 不错的分享 description: 与 25 个唯一身份访客分享帖子 long_description: | - 当您分享的链接被 25 位独立外部访客点击时,将授予此徽章。感谢您宣传我们的讨论和社区。 + 当您分享的链接被 25 个唯一身份外部访客点击时,将授予此徽章。感谢您宣传我们的讨论和社区。 good_share: name: 很棒的分享 description: 与 300 个唯一身份访客分享帖子 long_description: | - 当您分享的链接被 300 个独立外部访客点击时,将授予此徽章。干得漂亮!您向一群新人展示了一场精彩的讨论,并帮助这个社区成长。 + 当您分享的链接被 300 个唯一身份外部访客点击时,将授予此徽章。干得漂亮!您向一群新人展示了一场精彩的讨论,并帮助这个社区成长。 great_share: name: 精彩的分享 description: 与 1000 个唯一身份访客分享帖子 long_description: | - 当您分享的链接被 1000 个独立外部访客点击时,将授予此徽章。哇!您将一个有趣的讨论介绍给大量新受众,并帮助社区前进了一大步! + 当您分享的链接被 1000 个唯一身份外部访客点击时,将授予此徽章。哇!您将一个有趣的讨论介绍给大量新受众,并帮助社区前进了一大步! first_like: name: 第一个赞 description: 赞了一个帖子 @@ -4903,11 +4891,11 @@ zh_CN: upload_row_too_long: "CSV 文件的每行应该有一个标签。或者,标签后面可以跟一个逗号,然后是标签组名称。" bulk_create: invalid_params: "参数无效。请提供标签名称数组。" - invalid_name: "无效的标签名称。" + invalid_name: "标签名称无效。" tag_too_long: other: "标签过长(最多 %{count} 个字符)。" too_many_tags: - other: "标签太多了。您一次最多可以创建 %{count} 标签。对于较大的导入,请使用 CSV 上传功能。" + other: "标签过多。您一次最多可以创建 %{count} 个标签。对于较大的导入,请使用 CSV 上传功能。" forbidden: invalid: other: "您选择的标签均无法使用" @@ -4930,8 +4918,8 @@ zh_CN: finish_installation: congratulations: "恭喜,您已安装 Discourse!" login_with_discourse_id: "使用 Discourse ID 登录" - discourse_id_help: "请使用 Discourse ID 登录。

请确保您使用的 Discourse ID 账户的主电子邮件与 `DISCOURSE_DEVELOPER_EMAILS` 环境变量相匹配。" - discourse_id_error_help: "您选择暂时跳过设置电子邮件。不幸的是,由于上述错误信息,设置无法继续。请在meta.discourse.org 上报告此问题。" + discourse_id_help: "请通过以下按钮使用 Discourse ID 登录。

请确保您使用的 Discourse ID 帐户的主电子邮件地址与 `DISCOURSE_DEVELOPER_EMAILS` 环境变量相匹配。" + discourse_id_error_help: "您选择暂时跳过设置电子邮件地址。很抱歉,由于上述错误消息,设置无法继续。请在 meta.discourse.org 上报告此问题。" register: button: "注册" title: "注册管理员帐户" @@ -4945,8 +4933,8 @@ zh_CN: message: "

我们已将激活电子邮件重新发送至 %{email}" discourse_id: help: "我们正在为您设置 Discourse ID。" - no_allowed_emails: "DISCOURSE_DEVELOPER_EMAILS 中未配置允许的电子邮件。无法继续站点设置。" - global_notice: "目前还没有管理员登录。请使用与 `DISCOURSE_DEVELOPER_EMAILS` 环境变量中邮箱地址匹配的 Discourse ID 帐户登录,以完成安装。" + no_allowed_emails: "DISCOURSE_DEVELOPER_EMAILS 中未配置允许的电子邮件地址。无法继续站点设置。" + global_notice: "目前还没有管理员登录。请通过与 `DISCOURSE_DEVELOPER_EMAILS` 环境变量匹配的电子邮件地址使用 Discourse ID 帐户登录,以完成安装。" safe_mode: title: "进入安全模式" description: "安全模式允许您在不加载主题或客户端插件自定义的情况下测试您的网站。服务器端插件自定义保持启用状态。" @@ -4960,17 +4948,17 @@ zh_CN: dev_mode: title: "开发者模式" enable_rack_mini_profiler: "启用 Rack Mini Profiler,使其在会话切换后保持 1 小时。" - enter: "Enter" + enter: "进入开发者模式" wizard: title: "Discourse 设置" step: setup: title: "使用入门" - description: "我们将使用基本设置完成您社区的设置流程,您可以在后续修改这些设置。" + description: "我们将使用基本设置完成您社区的设置,您可以在后续修改这些设置。" fields: title: label: "社区名称" - placeholder: "Jane's Hangout" + placeholder: "朱桦的环聊" default_locale: label: "语言" login_required: @@ -4990,7 +4978,7 @@ zh_CN: invite_only: label: "仅限邀请" must_approve_users: - description: "要手动批准成员帐户吗?" + description: "是否要批准成员帐户?" choices: "no": label: "否,新成员可以立即加入" @@ -5023,14 +5011,14 @@ zh_CN: draft: "草稿拉取请求" open: "打开拉取请求" approved: "已批准的拉取请求" - changes_requested: "请求更改" - merged: "合并拉取请求" + changes_requested: "已请求更改" + merged: "已合并的拉取请求" closed: "已关闭的拉取请求" status_date: open: "已打开" draft: "草稿" approved: "已批准" - changes_requested: "请求更改" + changes_requested: "已请求更改" merged: "已合并" closed: "已关闭" discourse_push_notifications: @@ -5052,7 +5040,7 @@ zh_CN: not_found: "找不到" unknown: "未知" site_setting: - update_existing_users: "更新现有用户? %{value}" + update_existing_users: "更新现有用户?%{value}" user_merged: "%{username} 已被合并到此帐户" user_delete_self: "被自己从 %{url} 删除" webhook_deactivation_reason: "您的网络钩子已自动停用。我们收到了多个 '%{status}' HTTP 状态失败响应。" @@ -5074,7 +5062,7 @@ zh_CN: upcoming_changes: log_manually_toggled: "用户手动切换" log_promoted: > - 这项即将进行的更改达到了 '%{change_status}' 状态,因此它已在您的网站上自动启用。有关更多详细信息,请参阅 即将进行的更改页面 。 + 这项即将推出的更改达到了 '%{change_status}' 状态,因此它已在您的站点上自动启用。有关更多详细信息,请参阅即将推出的更改页面 。 reviewables: already_handled: "谢谢,但我们已经审核该帖子并确定不需要再次举报它。" already_handled_and_user_not_exist: "谢谢,但有人已经审核过了,该用户已不存在。" @@ -5151,11 +5139,11 @@ zh_CN: complete: "帖子已被删除。" delete_and_ignore: title: "删除帖子并忽略举报" - description: "删除帖子并忽略举报,将其从队列中移除;如果是第一篇帖子,则同时删除话题。 " + description: "删除帖子并忽略举报,将其从队列中移除;如果是第一个帖子,同时删除话题。 " complete: "帖子已被删除。" delete_and_ignore_replies: - title: "删除帖子及与之关联的回复,并忽略该举报" - description: "删除帖子及与之关联的回复,忽略该举报,并将其从审核队列中移除;如果这是首帖,则同时删除该话题" + title: "删除帖子与回复,并忽略举报" + description: "删除帖子及其所有回复,忽略举报,并将其从队列中移除;如果是第一个帖子,同时删除话题" confirm: "确定要同时删除对帖子的回复吗?" complete: "帖子和回复已被删除。" delete_and_agree: @@ -5169,23 +5157,23 @@ zh_CN: complete: "帖子和回复已被删除。" disagree_and_restore: title: "恢复帖子" - description: "拒绝该举报,恢复帖子" + description: "不同意举报,并恢复帖子" complete: "帖子已恢复。" disagree_bundle: title: "否" disagree: title: "保留帖子" - description: "拒绝该举报" + description: "不同意举报" complete: "举报已被忽略。" discard_post: title: "舍弃帖子" complete: "帖子已被舍弃。" revise_and_reject_post: - title: "打回帖子" + title: "请求修订…" complete: "帖子被拒绝,等待修订。" ignore: title: "忽略" - description: "将其从审核队列中移除,不采取任何措施" + description: "将其从队列中移除,不采取任何措施。" complete: "举报已被忽略。" ignore_and_do_nothing: title: "不进行操作" @@ -5213,7 +5201,7 @@ zh_CN: title: "否" delete: title: "删除用户" - description: "删除用户,而不封禁其IP/Email" + description: "删除用户,而不封禁" complete: "用户已被删除。" block: title: "删除并阻止用户" @@ -5223,7 +5211,7 @@ zh_CN: title: "是" not_spam: title: "否" - description: "不是,批准该用户" + description: "非垃圾信息,批准用户" reject: title: "拒绝" bundle_title: "拒绝…" @@ -5237,12 +5225,12 @@ zh_CN: title: "拒绝并删除帖子" complete: "帖子被拒绝并被删除。" reject_and_delete_standalone: - title: "不是,删除帖子" + title: "否,删除帖子" reject_and_keep_deleted: title: "保持帖子删除" complete: "帖子被拒绝,保持删除状态。" reject_and_keep_deleted_standalone: - title: "不是,保持帖子删除状态" + title: "否,保持帖子删除状态" scrub: title: 清除记录 approve_and_restore: @@ -5252,11 +5240,7 @@ zh_CN: title: "是" complete: "帖子已获批准并取消隐藏" post_actions: - bundle_title: "您想对这篇帖子做什么?" - no_action_post: - title: "无行动" - description: "不对帖子采取任何行动" - complete: "未对帖子采取任何行动" + bundle_title: "您想如何处理该帖子?" delete_post: title: "删除帖子" description: "删除此帖子" @@ -5267,48 +5251,40 @@ zh_CN: complete: "帖子已隐藏" unhide_post: title: "取消隐藏帖子" - description: "让所有用户都可以看到此帖子" - complete: "帖子取消隐藏" + description: "将此帖子设为对所有用户可见" + complete: "帖子已取消隐藏" restore_post: title: "恢复帖子" description: "恢复已删除的帖子" complete: "帖子已恢复" edit_post: title: "编辑帖子" - description: "编辑此帖内容" + description: "编辑此帖子内容" complete: "帖子已编辑" - convert_to_pm: - title: "转换为 PM" - description: "将此帖子转换为个人消息" - complete: "帖子已转换为私人消息" user_actions: - bundle_title: "您想对这位用户做什么?" - no_action_user: - title: "无行动" - description: "不执行任何操作" - complete: "不执行任何操作" + bundle_title: "您想如何处理该用户?" silence_user: - title: "禁言用户" + title: "将用户禁言" description: "禁止该用户发帖" - complete: "用户被禁言" + complete: "用户已被禁言" reason: "用户通过审核队列被禁言" suspend_user: title: "封禁用户" - description: "封禁用户" - complete: "用户被封禁" + description: "封禁用户帐户" + complete: "用户已被封禁" reason: "用户通过审核队列被封禁" delete_user: title: "删除用户" - description: "删除用户" - complete: "用户被删除" + description: "从论坛中删除此用户" + complete: "用户已被删除" reason: "已通过审核队列删除" delete_and_block_user: - title: "删除并禁止用户" - description: "删除用户,并禁止 IP/email" - complete: "用户被删除且被禁止" + title: "删除并屏蔽" + description: "删除该用户并屏蔽其 IP /电子邮件地址" + complete: "用户已被删除并屏蔽" delete_user_block: title: "删除并屏蔽" - description: "删除该用户并屏蔽其 IP 地址/邮箱。" + description: "删除该用户并屏蔽其 IP /电子邮件地址" complete: "用户已被删除并屏蔽" email_style: html_missing_placeholder: "HTML 模板必须包含 %{placeholder}" @@ -5353,10 +5329,10 @@ zh_CN: unsafe_description: "有不安全的 HTML 描述" invalid_tag_group: "具有无效的标签组:%{tag_group_name}" discourse_id: - already_registered: "该站点已经使用 Discourse ID 注册" + already_registered: "此站点已经使用 Discourse ID 注册" errors: not_configured: "Discourse ID 尚未配置,请先启用 Discourse ID 。" - regenerate_failed: "重新生成凭据失败,请稍后重试。" + regenerate_failed: "无法重新生成凭据。请稍后再试。" activemodel: errors: <<: *errors diff --git a/config/locales/server.zh_TW.yml b/config/locales/server.zh_TW.yml index 5de717c843e7a..28c9ffb09fa52 100644 --- a/config/locales/server.zh_TW.yml +++ b/config/locales/server.zh_TW.yml @@ -654,6 +654,7 @@ zh_TW: read: "閲讀" read_write: "讀/寫" instructions: '系統熱騰騰產生了新的使用者API鑰匙給您使用,請將以下API鑰匙貼到您的應用程式裡。' + copied: "已複製!" otp_description: '你要允許進入%{application_name}這個網站嗎?' otp_confirmation: confirm_title: 繼續連接至 %{site_name} @@ -724,7 +725,9 @@ zh_TW: description: "標記狀態清單,包括標記類型、張貼者、標記者與解决時間。" visits: title: "使用者瀏覽量" - xaxis: "天" + xaxis: + desktop: "電腦" + mobile: "行動裝置" yaxis: "瀏覽量" signups: title: "註冊" @@ -766,10 +769,8 @@ zh_TW: site_traffic: yaxis: "天" dau_by_mau: - title: "DAU/MAU" xaxis: "天" yaxis: "\\bDAU/MAU" - description: "在最後一天登入的會員數除以上個月登入會員數,返回的%數表示社群黏著度。目標為>20%。" daily_engaged_users: title: "每日活躍的使用者" xaxis: "天" @@ -1125,7 +1126,6 @@ zh_TW: allowed_internal_hosts: "Discourse 可以安全抓取以用於 Onebox 與其他用途的內部主機列表" allowed_crawler_user_agents: "使用者代理(User Agents)的網路爬蟲(Web Crawlers)將允許存取網站。警告!設置此將取消未列出的所有網路爬蟲者(Web Crawlers)" slow_down_crawler_rate: "如果指定了slow_down_crawler_user_agents,則此速率將適用於所有抓取工具(請求之間的延遲秒數)" - content_security_policy_collect_reports: "在 /csp_reports 啟用CSP違規報告蒐集" invalidate_inactive_admin_email_after_days: "在這幾天沒有訪問網站的管理員帳戶,在登入前需要重新驗證該管理員帳戶的電子郵件。設定為0禁用。" share_links: "決定在分享對話方塊裡顯示哪些項目、以什麼順序顯示。" site_contact_username: "以一個有效的工作成員帳號來發送所有自動化消息。如果保留空白,則會使用預設的系統帳號。" @@ -1296,7 +1296,6 @@ zh_TW: alternative_reply_by_email_addresses: "通過郵件回覆的回覆地址模板,例如:%%{reply_key}@reply.example.com|replies+%%{reply_key}@example.com" incoming_email_prefer_html: "電子郵件格式使用HTML而不是純文字(text)檔" strip_incoming_email_lines: "從每行傳入電子郵件中刪除前導、尾隨空格。" - disable_emails: "防止Discourse發送任何類型的電子郵件。 選擇“是”以禁用所有使用者的電子郵件。選擇“非工作人員”僅為非管理權限帳戶禁用電子郵件。" strip_images_from_short_emails: "郵件小於 2800 位元組時去除圖片" display_name_on_email_from: "在郵件的來自欄顯示暱稱" unsubscribe_via_email: "允許使用者在發送的郵件「退訂」來退訂郵件訂閲,「退訂」可在主題或正文中。" @@ -1352,7 +1351,6 @@ zh_TW: enable_group_directory: "提供可供瀏覽的群組目錄" group_in_subject: "在電子郵件中設定%%{optional_pm} ,取決於私訊中第一個群組的名稱,請參閱:客製化標準電子郵件的格式" anonymous_account_duration_minutes: "為了匿名性,為每個使用者每 N 分鐘創建一個匿名帳號。例如:如果設置為 600,只要發帖後 600 分鐘到了,並且使用者切換至了匿名模式,就會創建一個新的匿名帳號。" - hide_user_profiles_from_public: "不對來訪使用者顯示使用者信息卡、使用者資料和使用者目錄。" show_inactive_accounts: "允許登入使用者瀏覽未啟用帳戶的使用者個人檔案。" log_personal_messages_views: "管理員記錄其他使用者或群組的個人資訊畫面" ignored_users_count_message_threshold: "如果特定使用者被這麽多的其他使用者忽略,則通知版主。" @@ -1456,10 +1454,6 @@ zh_TW: staged_users_disabled: "您必須先啟用「暫存使用者(staged users)」,才能啟用此設定" reply_by_email_disabled: "在啟用此設定之前,您必須先啟用「通過電子郵件回覆」設定" enable_local_logins_disabled: "在啟用此設定之前,必須先啟用「啟用本地登入(local logins)」設定。" - min_username_length_exists: "你不能設比現有使用者名稱短的「最小使用者名稱長度」。" - min_username_length_range: "您不能將下限設定的高於上限。" - max_username_length_exists: "您不能設置比現有使用者名稱短的「最大使用者名稱長度」。" - max_username_length_range: "您不能將上限設定的低於下限。" invalid_hex_value: "顏色值必須是6位十六進制代碼(hex codes),例如:紅色,FF0000。" allowed_unicode_usernames: regex_invalid: "正則表達式無效:%{error}" @@ -2765,8 +2759,6 @@ zh_TW: title: "進入安全模式" enter: "進入安全模式" must_select: "您必須至少選擇一個選項才能進入安全模式。" - dev_mode: - enter: "Enter" wizard: title: "Discourse 安裝" step: @@ -2891,12 +2883,8 @@ zh_TW: title: "是" approve_and_unhide: title: "是" - no_action_post: - title: "沒有動作" delete_post: title: "刪除貼文" - no_action_user: - title: "沒有動作" silence_user: title: "使用者靜音" delete_user: diff --git a/config/nginx.sample.conf b/config/nginx.sample.conf index a5a4c6d604e01..4eb5ee3c4f1b8 100644 --- a/config/nginx.sample.conf +++ b/config/nginx.sample.conf @@ -145,6 +145,7 @@ server { brotli_static on; gzip_static on; add_header Cache-Control public,immutable; + add_header Access-Control-Allow-Origin *; # HOOK in asset location (used for extensibility) # TODO I don't think this break is needed, it just breaks out of rewrite break; diff --git a/config/pitchfork.conf.rb b/config/pitchfork.conf.rb index 8583deff9af36..c8a5bc48ab441 100644 --- a/config/pitchfork.conf.rb +++ b/config/pitchfork.conf.rb @@ -2,14 +2,14 @@ discourse_path = File.expand_path(File.expand_path(File.dirname(__FILE__)) + "/../") enable_logstash_logger = ENV["ENABLE_LOGSTASH_LOGGER"] == "1" -unicorn_stderr_path = "#{discourse_path}/log/unicorn.stderr.log" +stderr_log_path = "#{discourse_path}/log/unicorn.stderr.log" if enable_logstash_logger require_relative "../lib/discourse_logstash_logger" require_relative "../lib/pitchfork_logstash_patch" - FileUtils.touch(unicorn_stderr_path) if !File.exist?(unicorn_stderr_path) + FileUtils.touch(stderr_log_path) if !File.exist?(stderr_log_path) logger DiscourseLogstashLogger.logger( - logdev: unicorn_stderr_path, + logdev: stderr_log_path, type: :unicorn, customize_event: lambda { |event| event["@timestamp"] = ::Time.now.utc }, ) @@ -73,10 +73,21 @@ Discourse.before_fork end +oob_gc_enabled = ENV["DISCOURSE_DISABLE_MAJOR_GC_DURING_REQUESTS"] && RUBY_VERSION >= "3.4" + after_worker_fork do |server, worker| DiscourseEvent.trigger(:web_fork_started) + Discourse.apply_worker_db_variables_overrides Discourse.after_fork SignalTrapLogger.instance.after_fork + + GC.config(rgengc_allow_full_mark: false) if oob_gc_enabled +end + +if oob_gc_enabled + after_request_complete do |_server, _worker, _rack_env| + GC.start if GC.latest_gc_info(:need_major_by) + end end before_service_worker_ready do |server, service_worker| @@ -91,34 +102,31 @@ if Discourse.enable_sidekiq_logging? # Trap USR1, so we can re-issue to sidekiq workers - # but chain the default unicorn implementation as well + # but chain the default pitchfork implementation as well old_handler = Signal.trap("USR1") do old_handler.call # We have seen Sidekiq processes getting stuck in production sporadically when log rotation happens. - # The cause is currently unknown but we suspect that it is related to the Unicorn master process and - # Sidekiq demon processes reopening logs at the same time as we noticed that Unicorn worker processes only - # reopen logs after the Unicorn master process is done. To workaround the problem, we are adding an arbitrary - # delay of 1 second to Sidekiq's log reopeing procedure. The 1 second delay should be - # more than enough for the Unicorn master process to finish reopening logs. + # The cause is currently unknown but we suspect that it is related to the master process and + # Sidekiq demon processes reopening logs at the same time as we noticed that worker processes only + # reopen logs after the master process is done. To workaround the problem, we are adding an arbitrary + # delay of 1 second to Sidekiq's log reopening procedure. The 1 second delay should be + # more than enough for the master process to finish reopening logs. Demon::Sidekiq.kill("USR2") end end end - enable_email_sync_demon = ENV["DISCOURSE_ENABLE_EMAIL_SYNC_DEMON"] == "true" - - if enable_email_sync_demon - server.logger.info "starting up EmailSync demon" - Demon::EmailSync.start(1, logger: server.logger) - end - DiscoursePluginRegistry.demon_processes.each do |demon_class| server.logger.info "starting #{demon_class.prefix} demon" demon_class.start(1, logger: server.logger) end + if Rails.env.development? && ENV["ROLLUP_PLUGIN_COMPILER"] != "0" + Demon::PluginJsWatcher.start(verbose: true) + end + Thread.new do while true begin @@ -130,11 +138,6 @@ Demon::Sidekiq.rss_memory_check end - if enable_email_sync_demon - Demon::EmailSync.ensure_running - Demon::EmailSync.check_email_sync_heartbeat - end - DiscoursePluginRegistry.demon_processes.each { |demon_class| demon_class.ensure_running } rescue => e Rails.logger.warn( diff --git a/config/puma.rb b/config/puma.rb deleted file mode 100644 index c349148f57bd7..0000000000000 --- a/config/puma.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -if ENV["RAILS_ENV"] == "production" - # First, you need to change these below to your situation. - APP_ROOT = ENV["APP_ROOT"] || "/home/discourse/discourse" - num_workers = ENV["NUM_WEBS"].to_i > 0 ? ENV["NUM_WEBS"].to_i : 4 - - # Second, you can choose how many threads that you are going to run at same time. - workers "#{num_workers}" - threads 8, 32 - - # Unless you know what you are changing, do not change them. - bind "unix://#{APP_ROOT}/tmp/sockets/puma.sock" - stdout_redirect "#{APP_ROOT}/log/puma.log", "#{APP_ROOT}/log/puma.err.log" - pidfile "#{APP_ROOT}/tmp/pids/puma.pid" - state_path "#{APP_ROOT}/tmp/pids/puma.state" - preload_app! -end diff --git a/config/routes.rb b/config/routes.rb index 71229606060a4..f516cd2e3ca9e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -256,6 +256,7 @@ def patch(*) get "translations/:locale" => "themes#get_translations" put "setting" => "themes#update_single_setting" put "site-setting" => "themes#update_theme_site_setting" + put "source" => "themes#update_source" get "objects_setting_metadata/:setting_name" => "themes#objects_setting_metadata" end @@ -342,7 +343,7 @@ def patch(*) post "/toggle-feature" => "dashboard#toggle_feature" resources :dashboard, only: [:index] do - collection { get "problems" } + collection { post "problems" } end resources :api, only: [:index], constraints: AdminConstraint.new do @@ -827,6 +828,10 @@ def patch(*) :constraints => { username: RouteFormat.username, } + get "#{root_path}/:username/preferences/calendar-subscriptions" => "users#preferences", + :constraints => { + username: RouteFormat.username, + } post "#{root_path}/:username/preferences/email" => "users_email#create", :constraints => { username: RouteFormat.username, @@ -1078,6 +1083,7 @@ def patch(*) get "color-scheme-stylesheet/:id(/:theme_id)" => "stylesheets#color_scheme", :constraints => { format: :json, + theme_id: /-?\d+/, } get "theme-javascripts/:digest" => "theme_javascripts#show", :constraints => { @@ -1331,6 +1337,7 @@ def patch(*) resources :categories, only: %i[index create update destroy] post "categories/reorder" => "categories#reorder" + get "categories/types" => "categories#types" get "categories/find" => "categories#find" post "categories/search" => "categories#search" get "categories/hierarchical_search" => "categories#hierarchical_search" @@ -1357,6 +1364,8 @@ def patch(*) format: "html", } get "/new-category" => "categories#show", :constraints => { format: "html" } + get "/new-category/setup" => "categories#show", :constraints => { format: "html" } + get "/new-category/:tab" => "categories#show", :constraints => { format: "html" } get "c/*category_slug_path_with_id.rss" => "list#category_feed", :format => :rss scope path: "c/*category_slug_path_with_id" do @@ -1856,6 +1865,10 @@ def patch(*) get "/user-api-key-client" => "user_api_key_clients#show" post "/user-api-key-client" => "user_api_key_clients#create" + get "/calendar-subscriptions" => "calendar_subscriptions#show" + post "/calendar-subscriptions" => "calendar_subscriptions#create" + delete "/calendar-subscriptions" => "calendar_subscriptions#destroy" + get "/safe-mode" => "safe_mode#index" post "/safe-mode" => "safe_mode#enter", :as => "safe_mode_enter" diff --git a/config/site_settings.yml b/config/site_settings.yml index 25f0ac0594e8d..9908b211723f6 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -24,9 +24,12 @@ # is changed. # themeable - Set to true if themes can override this site setting. Generally, only client side affecting settings # that change the UI should be themeable, and try limit to simple setting types like bool, list, integer, enum. +# upcoming_change_default_override - Allow an upcoming change to control the new default value of this setting. +# - upcoming_change: The site setting of the upcoming change to control this +# - new_default: The new default value when the upcoming change is enabled # upcoming_change - Additional metadata with the following options to show in the /admin/config/upcoming-changes page: # - status: experimental | alpha | beta | stable -# - impact: two parts separated by comma - feature|other , staff|admins|moderators|all_members|developers +# - impact: two parts separated by comma - feature|other|site_setting_default , staff|admins|moderators|all_members|developers # - learn_more_url: a url for more information # - disallow_enabled_for_groups: true (optional) - restricts "Enabled for" # to only "Everyone" and "No One", removing group-based options. @@ -70,6 +73,7 @@ # type: emoji_list - A list of emoji names (e.g. joy, cold_hands) # type: tag_group_list - A list of tag group names. # type: file_size_restriction - A file size restriction in bytes. +# type: icon - A single fontawesome icon name from the Discourse icon set (e.g. heart, star) # required: title: @@ -1029,11 +1033,6 @@ users: client: true default: true area: "users" - prioritize_full_name_in_ux: - client: true - default: false - hidden: true - area: "users" email_token_valid_hours: default: 48 min: 1 @@ -2010,6 +2009,9 @@ email: mailjet_webhook_token: default: "" secret: true + mailpace_webhook_token: + default: "" + secret: true mandrill_authentication_key: default: "" secret: true @@ -2186,6 +2188,8 @@ files: type: list regex: '\A((https?:\/\/.+)(\|https?:\/\/.+[|$])*)?\z' create_thumbnails: true + animated_topic_thumbnails: + default: false clean_up_uploads: true clean_orphan_uploads_grace_period_hours: default: 48 @@ -2677,6 +2681,10 @@ security: moderators_change_post_ownership: client: true default: false + change_post_ownership_allowed_groups: + type: group_list + list_type: compact + default: "" moderators_view_emails: client: true default: false @@ -2702,7 +2710,7 @@ security: list_type: compact crawler_check_bypass_agents: hidden: true - default: "cubot" + default: "cubot|MetaIAB" cors_origins: default: "" type: list @@ -2801,6 +2809,9 @@ security: refresh: true hidden: true area: "group_permissions" + cache_control_bfcache_compatibility: + default: false + hidden: true onebox: post_onebox_maxlength: @@ -3175,7 +3186,8 @@ navigation: embedding: embed_full_app: default: false - hidden: true + client: true + area: "embedding" embed_by_username: default: "" type: username @@ -3760,7 +3772,7 @@ uncategorized: hidden: true area: "interface" upcoming_change: - status: "experimental" + status: "beta" impact: "feature,all_members" learn_more_url: "https://meta.discourse.org/t/-/395100" @@ -3792,7 +3804,9 @@ uncategorized: client: true default: false hidden: true - area: "site_admin" + site_owner_onboarding_max_days: + default: 5 + hidden: true enable_welcome_banner: client: true @@ -4214,42 +4228,46 @@ experimental: status: "experimental" impact: "feature,staff" learn_more_url: "https://meta.discourse.org/t/-/395768" + disallow_enabled_for_groups: true enable_auto_grid_images: default: false client: true + hidden: true area: "experimental" upcoming_change: - status: "experimental" + status: "stable" impact: "feature,all_members" learn_more_url: "https://meta.discourse.org/t/-/394784" - rename_faq_to_guidelines: + enable_new_checkbox_style: default: false - hidden: true client: true + hidden: true area: "experimental" upcoming_change: - impact: "feature,all_members" status: "experimental" - learn_more_url: "https://meta.discourse.org/t/-/395099" - experimental_tag_settings_page: + impact: "feature,all_members" + rename_faq_to_guidelines: default: false + hidden: true client: true - area: "experimental" + upcoming_change: + impact: "feature,all_members" + status: "stable" + learn_more_url: "https://meta.discourse.org/t/-/395099" enable_form_templates: client: true default: false hidden: true - area: "experimental" upcoming_change: - status: "experimental" + status: "stable" impact: "feature,all_members" learn_more_url: "https://meta.discourse.org/t/-/278631" impersonate_without_logout: default: false + client: true hidden: true - area: "experimental" upcoming_change: - status: "experimental" + status: "stable" impact: "feature,staff" learn_more_url: "https://meta.discourse.org/t/-/119683" experimental_impersonation_time_limit_minutes: @@ -4278,10 +4296,6 @@ experimental: default: true hidden: true client: true - enable_upcoming_changes: - default: false - hidden: true - client: true floating_dismiss_topics_on_mobile: default: false hidden: true @@ -4295,6 +4309,9 @@ experimental: hidden: true client: true upcoming_change: - status: "experimental" + status: "beta" impact: "feature,staff" learn_more_url: "https://meta.discourse.org/t/-/394971" + experimental_topic_category_change_notification: + default: false + hidden: true diff --git a/config/unicorn.conf.rb b/config/unicorn.conf.rb deleted file mode 100644 index d3fc43c373729..0000000000000 --- a/config/unicorn.conf.rb +++ /dev/null @@ -1,209 +0,0 @@ -# frozen_string_literal: true - -# See http://unicorn.bogomips.org/Unicorn/Configurator.html -discourse_path = File.expand_path(File.expand_path(File.dirname(__FILE__)) + "/../") - -enable_logstash_logger = ENV["ENABLE_LOGSTASH_LOGGER"] == "1" -unicorn_stderr_path = "#{discourse_path}/log/unicorn.stderr.log" -unicorn_stdout_path = "#{discourse_path}/log/unicorn.stdout.log" - -if enable_logstash_logger - require_relative "../lib/discourse_logstash_logger" - require_relative "../lib/unicorn_logstash_patch" - FileUtils.touch(unicorn_stderr_path) if !File.exist?(unicorn_stderr_path) - logger DiscourseLogstashLogger.logger( - logdev: unicorn_stderr_path, - type: :unicorn, - customize_event: lambda { |event| event["@timestamp"] = ::Time.now.utc }, - ) -else - logger Logger.new(STDOUT) -end - -# tune down if not enough ram -worker_processes (ENV["UNICORN_WORKERS"] || 3).to_i - -working_directory discourse_path - -# listen "#{discourse_path}/tmp/sockets/unicorn.sock" - -# stree-ignore -listen ENV["UNICORN_LISTENER"] || "#{(ENV["UNICORN_BIND_ALL"] ? "" : "127.0.0.1:")}#{(ENV["UNICORN_PORT"] || 3000).to_i}" - -FileUtils.mkdir_p("#{discourse_path}/tmp/pids") if !File.exist?("#{discourse_path}/tmp/pids") - -# feel free to point this anywhere accessible on the filesystem -pid(ENV["UNICORN_PID_PATH"] || "#{discourse_path}/tmp/pids/unicorn.pid") - -if ENV["RAILS_ENV"] == "production" - # By default, the Unicorn logger will write to stderr. - # Additionally, some applications/frameworks log to stderr or stdout, - # so prevent them from going to /dev/null when daemonized here: - stderr_path unicorn_stderr_path - stdout_path unicorn_stdout_path - - # nuke workers after 30 seconds instead of 60 seconds (the default) - timeout 30 -else - # we want a longer timeout in dev cause first request can be really slow - timeout(ENV["UNICORN_TIMEOUT"] && ENV["UNICORN_TIMEOUT"].to_i || 60) -end - -# important for Ruby 2.0 -preload_app true - -# Enable this flag to have unicorn test client connections by writing the -# beginning of the HTTP headers before calling the application. This -# prevents calling the application for connections that have disconnected -# while queued. This is only guaranteed to detect clients on the same -# host unicorn runs on, and unlikely to detect disconnects even on a -# fast LAN. -check_client_connection false - -initialized = false -before_fork do |server, worker| - unless initialized - Discourse.preload_rails! - Discourse.before_fork - - initialized = true - - supervisor = ENV["UNICORN_SUPERVISOR_PID"].to_i - - if supervisor > 0 - Thread.new do - while true - unless File.exist?("/proc/#{supervisor}") - server.logger.error "Kill self supervisor is gone" - Process.kill "TERM", Process.pid - end - sleep 2 - end - end - end - - sidekiqs = ENV["UNICORN_SIDEKIQS"].to_i - - if sidekiqs > 0 - server.logger.info "starting #{sidekiqs} supervised sidekiqs" - - require "demon/sidekiq" - Demon::Sidekiq.after_fork { DiscourseEvent.trigger(:sidekiq_fork_started) } - Demon::Sidekiq.start(sidekiqs, logger: server.logger) - - if Discourse.enable_sidekiq_logging? - # Trap USR1, so we can re-issue to sidekiq workers - # but chain the default unicorn implementation as well - old_handler = - Signal.trap("USR1") do - old_handler.call - - # We have seen Sidekiq processes getting stuck in production sporadically when log rotation happens. - # The cause is currently unknown but we suspect that it is related to the Unicorn master process and - # Sidekiq demon processes reopening logs at the same time as we noticed that Unicorn worker processes only - # reopen logs after the Unicorn master process is done. To workaround the problem, we are adding an arbitrary - # delay of 1 second to Sidekiq's log reopeing procedure. The 1 second delay should be - # more than enough for the Unicorn master process to finish reopening logs. - Demon::Sidekiq.kill("USR2") - end - end - end - - enable_email_sync_demon = ENV["DISCOURSE_ENABLE_EMAIL_SYNC_DEMON"] == "true" - - if enable_email_sync_demon - server.logger.info "starting up EmailSync demon" - Demon::EmailSync.start(1, logger: server.logger) - end - - DiscoursePluginRegistry.demon_processes.each do |demon_class| - server.logger.info "starting #{demon_class.prefix} demon" - demon_class.start(1, logger: server.logger) - end - - Thread.new do - while true - begin - sleep 60 - - if sidekiqs > 0 - Demon::Sidekiq.ensure_running - Demon::Sidekiq.heartbeat_check - Demon::Sidekiq.rss_memory_check - end - - if enable_email_sync_demon - Demon::EmailSync.ensure_running - Demon::EmailSync.check_email_sync_heartbeat - end - - DiscoursePluginRegistry.demon_processes.each { |demon_class| demon_class.ensure_running } - rescue => e - Rails.logger.warn( - "Error in demon processes heartbeat check: #{e}\n#{e.backtrace.join("\n")}", - ) - end - end - end - - class ::Unicorn::HttpServer - # Original source: https://github.com/defunkt/unicorn/blob/6c9c442fb6aa12fd871237bc2bb5aec56c5b3538/lib/unicorn/http_server.rb#L477-L496 - def murder_lazy_workers - next_sleep = @timeout - 1 - now = time_now.to_i - @workers.dup.each_pair do |wpid, worker| - tick = worker.tick - 0 == tick and next # skip workers that haven't processed any clients - diff = now - tick - tmp = @timeout - diff - - # START MONKEY PATCH - if tmp < 2 && !worker.instance_variable_get(:@timing_out_logged) - logger.error do - "worker=#{worker.nr} PID:#{wpid} running too long (#{diff}s), sending USR2 to dump thread backtraces" - end - - worker.instance_variable_set(:@timing_out_logged, true) - kill_worker(:USR2, wpid) - end - # END MONKEY PATCH - - if tmp >= 0 - next_sleep > tmp and next_sleep = tmp - next - end - next_sleep = 0 - logger.error "worker=#{worker.nr} PID:#{wpid} timeout " \ - "(#{diff}s > #{@timeout}s), killing" - - kill_worker(:KILL, wpid) # take no prisoners for timeout violations - end - next_sleep <= 0 ? 1 : next_sleep - end - end - end - - Discourse.redis.close - - # Throttle the master from forking too quickly by sleeping. Due - # to the implementation of standard Unix signal handlers, this - # helps (but does not completely) prevent identical, repeated signals - # from being lost when the receiving process is busy. - sleep 1 if !Rails.env.development? -end - -after_fork do |server, worker| - DiscourseEvent.trigger(:web_fork_started) - Discourse.after_unicorn_worker_fork - Discourse.after_fork - SignalTrapLogger.instance.after_fork - - Signal.trap("USR2") do - message = <<~MSG - Unicorn worker received USR2 signal indicating it is about to timeout, dumping backtrace for main thread - #{Thread.current.backtrace&.join("\n")} - MSG - - SignalTrapLogger.instance.log(Rails.logger, message, level: :warn) - end -end diff --git a/db/fixtures/007_web_hook_event_types.rb b/db/fixtures/007_web_hook_event_types.rb index d2959d556245a..fd9d14b8c58b5 100644 --- a/db/fixtures/007_web_hook_event_types.rb +++ b/db/fixtures/007_web_hook_event_types.rb @@ -235,3 +235,18 @@ b.name = "chat_message_restored" b.group = WebHookEventType.groups[:chat] end +WebHookEventType.seed do |b| + b.id = WebHookEventType::TYPES[:calendar_event_created] + b.name = "calendar_event_created" + b.group = WebHookEventType.groups[:calendar] +end +WebHookEventType.seed do |b| + b.id = WebHookEventType::TYPES[:calendar_event_updated] + b.name = "calendar_event_updated" + b.group = WebHookEventType.groups[:calendar] +end +WebHookEventType.seed do |b| + b.id = WebHookEventType::TYPES[:calendar_event_destroyed] + b.name = "calendar_event_destroyed" + b.group = WebHookEventType.groups[:calendar] +end diff --git a/db/fixtures/600_themes.rb b/db/fixtures/600_themes.rb index 335bdb822758f..8670b40852a59 100644 --- a/db/fixtures/600_themes.rb +++ b/db/fixtures/600_themes.rb @@ -6,7 +6,7 @@ # we can not guess what to do if customization already started, so skip it if !theme_exists - STDERR.puts "> Seeding theme and color schemes" + $stdout.puts "Seeding theme and color schemes" color_schemes = [ { name: I18n.t("color_schemes.dark"), base_scheme_name: "Dark" }, diff --git a/db/post_migrate/20250304074934_backfill_api_key_scope_modes.rb b/db/migrate/20250304074934_backfill_api_key_scope_modes.rb similarity index 100% rename from db/post_migrate/20250304074934_backfill_api_key_scope_modes.rb rename to db/migrate/20250304074934_backfill_api_key_scope_modes.rb diff --git a/db/post_migrate/20250305233449_populate_type_source_in_reviewable.rb b/db/migrate/20250305233449_populate_type_source_in_reviewable.rb similarity index 100% rename from db/post_migrate/20250305233449_populate_type_source_in_reviewable.rb rename to db/migrate/20250305233449_populate_type_source_in_reviewable.rb diff --git a/db/post_migrate/20250513161753_rename_by_id_group.rb b/db/migrate/20250513161753_rename_by_id_group.rb similarity index 100% rename from db/post_migrate/20250513161753_rename_by_id_group.rb rename to db/migrate/20250513161753_rename_by_id_group.rb diff --git a/db/post_migrate/20250526063633_copy_add_groups_to_about_component_settings.rb b/db/migrate/20250526063633_copy_add_groups_to_about_component_settings.rb similarity index 100% rename from db/post_migrate/20250526063633_copy_add_groups_to_about_component_settings.rb rename to db/migrate/20250526063633_copy_add_groups_to_about_component_settings.rb diff --git a/db/post_migrate/20250702082232_deprecate_external_system_avatars_enabled.rb b/db/migrate/20250702082232_deprecate_external_system_avatars_enabled.rb similarity index 100% rename from db/post_migrate/20250702082232_deprecate_external_system_avatars_enabled.rb rename to db/migrate/20250702082232_deprecate_external_system_avatars_enabled.rb diff --git a/db/post_migrate/20250708031631_remove_flush_timings_secs_setting.rb b/db/migrate/20250708031631_remove_flush_timings_secs_setting.rb similarity index 100% rename from db/post_migrate/20250708031631_remove_flush_timings_secs_setting.rb rename to db/migrate/20250708031631_remove_flush_timings_secs_setting.rb diff --git a/db/post_migrate/20250709051949_disable_gravatar_enabled_if_unconfigured.rb b/db/migrate/20250709051949_disable_gravatar_enabled_if_unconfigured.rb similarity index 100% rename from db/post_migrate/20250709051949_disable_gravatar_enabled_if_unconfigured.rb rename to db/migrate/20250709051949_disable_gravatar_enabled_if_unconfigured.rb diff --git a/db/post_migrate/20250710074447_clear_backup_frequency_if_disabled.rb b/db/migrate/20250710074447_clear_backup_frequency_if_disabled.rb similarity index 100% rename from db/post_migrate/20250710074447_clear_backup_frequency_if_disabled.rb rename to db/migrate/20250710074447_clear_backup_frequency_if_disabled.rb diff --git a/db/post_migrate/20250804021210_drop_enable_experimental_sidebar_user_option.rb b/db/migrate/20250804021210_drop_enable_experimental_sidebar_user_option.rb similarity index 100% rename from db/post_migrate/20250804021210_drop_enable_experimental_sidebar_user_option.rb rename to db/migrate/20250804021210_drop_enable_experimental_sidebar_user_option.rb diff --git a/db/post_migrate/20250812033430_replace_null_with_zero_in_backup_frequency.rb b/db/migrate/20250812033430_replace_null_with_zero_in_backup_frequency.rb similarity index 100% rename from db/post_migrate/20250812033430_replace_null_with_zero_in_backup_frequency.rb rename to db/migrate/20250812033430_replace_null_with_zero_in_backup_frequency.rb diff --git a/db/post_migrate/20250821150220_remove_use_overhauled_theme_color_palette_setting.rb b/db/migrate/20250821150220_remove_use_overhauled_theme_color_palette_setting.rb similarity index 100% rename from db/post_migrate/20250821150220_remove_use_overhauled_theme_color_palette_setting.rb rename to db/migrate/20250821150220_remove_use_overhauled_theme_color_palette_setting.rb diff --git a/db/post_migrate/20250821155127_drop_dark_hex_from_color_scheme_color.rb b/db/migrate/20250821155127_drop_dark_hex_from_color_scheme_color.rb similarity index 100% rename from db/post_migrate/20250821155127_drop_dark_hex_from_color_scheme_color.rb rename to db/migrate/20250821155127_drop_dark_hex_from_color_scheme_color.rb diff --git a/db/post_migrate/20250821155615_drop_theme_color_scheme.rb b/db/migrate/20250821155615_drop_theme_color_scheme.rb similarity index 100% rename from db/post_migrate/20250821155615_drop_theme_color_scheme.rb rename to db/migrate/20250821155615_drop_theme_color_scheme.rb diff --git a/db/post_migrate/20251029072625_delete_old_watched_precedence_setting.rb b/db/migrate/20251029072625_delete_old_watched_precedence_setting.rb similarity index 100% rename from db/post_migrate/20251029072625_delete_old_watched_precedence_setting.rb rename to db/migrate/20251029072625_delete_old_watched_precedence_setting.rb diff --git a/db/post_migrate/20251127001422_remove_orphaned_reviewable_claimed_topics.rb b/db/migrate/20251127001422_remove_orphaned_reviewable_claimed_topics.rb similarity index 100% rename from db/post_migrate/20251127001422_remove_orphaned_reviewable_claimed_topics.rb rename to db/migrate/20251127001422_remove_orphaned_reviewable_claimed_topics.rb diff --git a/db/post_migrate/20260108044513_drop_imap_sync_logs.rb b/db/migrate/20260108044513_drop_imap_sync_logs.rb similarity index 100% rename from db/post_migrate/20260108044513_drop_imap_sync_logs.rb rename to db/migrate/20260108044513_drop_imap_sync_logs.rb diff --git a/db/migrate/20260306183220_add_topic_title_placeholder_to_categories.rb b/db/migrate/20260306183220_add_topic_title_placeholder_to_categories.rb new file mode 100644 index 0000000000000..d45d2835f698c --- /dev/null +++ b/db/migrate/20260306183220_add_topic_title_placeholder_to_categories.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddTopicTitlePlaceholderToCategories < ActiveRecord::Migration[8.0] + def change + add_column :categories, :topic_title_placeholder, :string, null: true + end +end diff --git a/db/migrate/20260309032553_remove_enable_upcoming_changes_site_setting.rb b/db/migrate/20260309032553_remove_enable_upcoming_changes_site_setting.rb new file mode 100644 index 0000000000000..00d45c2edc18a --- /dev/null +++ b/db/migrate/20260309032553_remove_enable_upcoming_changes_site_setting.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class RemoveEnableUpcomingChangesSiteSetting < ActiveRecord::Migration[8.0] + def up + execute "DELETE FROM site_settings WHERE name = 'enable_upcoming_changes'" + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/migrate/20260310001245_remove_enable_category_type_setup_site_setting.rb b/db/migrate/20260310001245_remove_enable_category_type_setup_site_setting.rb new file mode 100644 index 0000000000000..9a994084cfe60 --- /dev/null +++ b/db/migrate/20260310001245_remove_enable_category_type_setup_site_setting.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class RemoveEnableCategoryTypeSetupSiteSetting < ActiveRecord::Migration[8.0] + def up + execute "DELETE FROM site_settings WHERE name = 'enable_category_type_setup'" + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/migrate/20260310072550_mark_category_approval_booleans_readonly.rb b/db/migrate/20260310072550_mark_category_approval_booleans_readonly.rb new file mode 100644 index 0000000000000..49bb0a0c2f4ec --- /dev/null +++ b/db/migrate/20260310072550_mark_category_approval_booleans_readonly.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class MarkCategoryApprovalBooleansReadonly < ActiveRecord::Migration[8.0] + def up + change_column_default :category_settings, :require_topic_approval, nil + change_column_default :category_settings, :require_reply_approval, nil + + Migration::ColumnDropper.mark_readonly(:category_settings, :require_topic_approval) + Migration::ColumnDropper.mark_readonly(:category_settings, :require_reply_approval) + end + + def down + Migration::ColumnDropper.drop_readonly(:category_settings, :require_topic_approval) + Migration::ColumnDropper.drop_readonly(:category_settings, :require_reply_approval) + end +end diff --git a/db/migrate/20260310072759_create_category_approval_groups.rb b/db/migrate/20260310072759_create_category_approval_groups.rb new file mode 100644 index 0000000000000..dcdc78856fafb --- /dev/null +++ b/db/migrate/20260310072759_create_category_approval_groups.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +class CreateCategoryApprovalGroups < ActiveRecord::Migration[8.0] + def up + create_table :category_posting_review_groups do |t| + t.integer :post_type, null: false + t.integer :permission, null: false + t.integer :category_id, null: false + t.integer :group_id, null: false + t.timestamps null: false + end + + add_index :category_posting_review_groups, + %i[category_id group_id post_type], + unique: true, + name: "idx_category_posting_review_groups_unique" + + # Backfill: for each category with require_topic_approval = true, + # insert a "required" row for the everyone group (id 0) with post_type topic (0). + execute(<<~SQL) + INSERT INTO category_posting_review_groups (post_type, permission, category_id, group_id, created_at, updated_at) + SELECT 0, 1, cs.category_id, 0, NOW(), NOW() + FROM category_settings cs + WHERE cs.require_topic_approval = true + SQL + + # Same for reply approval: post_type reply (1). + execute(<<~SQL) + INSERT INTO category_posting_review_groups (post_type, permission, category_id, group_id, created_at, updated_at) + SELECT 1, 1, cs.category_id, 0, NOW(), NOW() + FROM category_settings cs + WHERE cs.require_reply_approval = true + SQL + end + + def down + drop_table :category_posting_review_groups + end +end diff --git a/db/migrate/20260319054026_add_posting_review_modes_to_category_settings.rb b/db/migrate/20260319054026_add_posting_review_modes_to_category_settings.rb new file mode 100644 index 0000000000000..81d40111893fc --- /dev/null +++ b/db/migrate/20260319054026_add_posting_review_modes_to_category_settings.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require "migration/column_dropper" + +class AddPostingReviewModesToCategorySettings < ActiveRecord::Migration[8.0] + def up + add_column :category_settings, :topic_posting_review_mode, :integer, default: 0, null: false + add_column :category_settings, :reply_posting_review_mode, :integer, default: 0, null: false + + change_column_null :category_posting_review_groups, :permission, true + Migration::ColumnDropper.mark_readonly(:category_posting_review_groups, :permission) + + # Backfill: for categories that had everyone-group (id 0) rows with + # permission = required (1), set the posting review mode to everyone (1). + + # Topics (post_type = 0) + execute(<<~SQL) + UPDATE category_settings + SET topic_posting_review_mode = 1 + WHERE category_id IN ( + SELECT category_id FROM category_posting_review_groups + WHERE group_id = 0 AND permission = 1 AND post_type = 0 + ) + SQL + + # Replies (post_type = 1) + execute(<<~SQL) + UPDATE category_settings + SET reply_posting_review_mode = 1 + WHERE category_id IN ( + SELECT category_id FROM category_posting_review_groups + WHERE group_id = 0 AND permission = 1 AND post_type = 1 + ) + SQL + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/migrate/20260323145627_add_limit_color_schemes_to_theme_modifier.rb b/db/migrate/20260323145627_add_limit_color_schemes_to_theme_modifier.rb new file mode 100644 index 0000000000000..9d1db2448f5ec --- /dev/null +++ b/db/migrate/20260323145627_add_limit_color_schemes_to_theme_modifier.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true +class AddLimitColorSchemesToThemeModifier < ActiveRecord::Migration[8.0] + def change + add_column :theme_modifier_sets, :only_theme_color_schemes, :boolean, null: true + end +end diff --git a/db/migrate/20260407093145_add_show_original_content_to_user_options.rb b/db/migrate/20260407093145_add_show_original_content_to_user_options.rb new file mode 100644 index 0000000000000..6630e1d0d69db --- /dev/null +++ b/db/migrate/20260407093145_add_show_original_content_to_user_options.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddShowOriginalContentToUserOptions < ActiveRecord::Migration[7.2] + def change + add_column :user_options, :show_original_content, :boolean, default: false, null: false + end +end diff --git a/db/post_migrate/20260311064518_clean_existing_tag_localization_names.rb b/db/post_migrate/20260311064518_clean_existing_tag_localization_names.rb new file mode 100644 index 0000000000000..b511acd9a71ff --- /dev/null +++ b/db/post_migrate/20260311064518_clean_existing_tag_localization_names.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +class CleanExistingTagLocalizationNames < ActiveRecord::Migration[7.2] + # matches DiscourseTagging::TAGS_FILTER_REGEXP plus whitespace and consecutive dashes + VIOLATING_PATTERN = %q{[/:?#\[\]@!$&'()*+,;=.%\\`^\s|{}"<>]|--} + + def up + conditions = ["name ~ :pattern OR name != TRIM(name)"] + params = { pattern: VIOLATING_PATTERN } + + conditions << "name != LOWER(name)" if SiteSetting.force_lowercase_tags + + max_length = SiteSetting.max_tag_length + conditions << "LENGTH(name) > :max_length" + params[:max_length] = max_length + + query = <<~SQL + SELECT id, name FROM tag_localizations + WHERE #{conditions.join(" OR ")} + SQL + + DB + .query(query, **params) + .each do |row| + cleaned = DiscourseTagging.clean_tag(row.name) + next if cleaned == row.name + next if cleaned.blank? + + DB.exec( + "UPDATE tag_localizations SET name = :name WHERE id = :id", + name: cleaned, + id: row.id, + ) + end + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/post_migrate/20260319054730_delete_redundant_everyone_posting_review_groups.rb b/db/post_migrate/20260319054730_delete_redundant_everyone_posting_review_groups.rb new file mode 100644 index 0000000000000..55a67a49dd15d --- /dev/null +++ b/db/post_migrate/20260319054730_delete_redundant_everyone_posting_review_groups.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class DeleteRedundantEveryonePostingReviewGroups < ActiveRecord::Migration[8.0] + def up + execute(<<~SQL) + DELETE FROM category_posting_review_groups + WHERE group_id = 0 AND permission = 1 + SQL + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/post_migrate/20260319054731_drop_permission_from_category_posting_review_groups.rb b/db/post_migrate/20260319054731_drop_permission_from_category_posting_review_groups.rb new file mode 100644 index 0000000000000..2700ffdf69fdb --- /dev/null +++ b/db/post_migrate/20260319054731_drop_permission_from_category_posting_review_groups.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require "migration/column_dropper" + +class DropPermissionFromCategoryPostingReviewGroups < ActiveRecord::Migration[8.0] + DROPPED_COLUMNS = { category_posting_review_groups: %i[permission] } + + def up + DROPPED_COLUMNS.each { |table, columns| Migration::ColumnDropper.execute_drop(table, columns) } + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/docs/INSTALL-email.md b/docs/INSTALL-email.md index 8e6cab7fffaca..b2abfbd3e2840 100644 --- a/docs/INSTALL-email.md +++ b/docs/INSTALL-email.md @@ -13,8 +13,8 @@ Enter these values when prompted by `./discourse-setup` per the [install guide]( #### [Brevo, previously SendInBlue, GDPR][sb] — 300 email per day free SMTP server address? smtp-relay.brevo.com - SMTP user name? [SMTP credentials for your domain under [SMTP-Key tab](https://app.brevo.com/settings/keys/smtp)] - SMTP password? [SMTP credentials for your domain under [SMTP-Key tab](https://app.brevo.com/settings/keys/smtp)] + SMTP user name? [SMTP credentials in [SMTP & API page](https://app.brevo.com/settings/keys/smtp)] + SMTP password? [SMTP credentials in [SMTP & API page](https://app.brevo.com/settings/keys/smtp)] Port: 587 #### [Mailgun][gun] — 50k emails/month on a 30 day trial OR 10k emails/month with no trial diff --git a/docs/developer-guides/.prettierrc.cjs b/docs/developer-guides/.prettierrc.cjs new file mode 100644 index 0000000000000..57f647bc84c84 --- /dev/null +++ b/docs/developer-guides/.prettierrc.cjs @@ -0,0 +1 @@ +module.exports = require("@discourse/lint-configs/prettier"); diff --git a/docs/developer-guides/.prettierrc.mjs b/docs/developer-guides/.prettierrc.mjs deleted file mode 100644 index 2056370c4c5ad..0000000000000 --- a/docs/developer-guides/.prettierrc.mjs +++ /dev/null @@ -1,6 +0,0 @@ -export default { - tabWidth: 2, - useTabs: false, - trailingComma: "es5", - plugins: ["prettier-plugin-ember-template-tag"], -}; diff --git a/docs/developer-guides/Gemfile.lock b/docs/developer-guides/Gemfile.lock index 1c3b5d5799965..6379bb3665889 100644 --- a/docs/developer-guides/Gemfile.lock +++ b/docs/developer-guides/Gemfile.lock @@ -1,28 +1,30 @@ GEM remote: https://rubygems.org/ specs: - faraday (2.10.1) - faraday-net_http (>= 2.0, < 3.2) + faraday (2.14.1) + faraday-net_http (>= 2.0, < 3.5) + json logger faraday-multipart (1.0.4) multipart-post (~> 2) - faraday-net_http (3.1.1) - net-http + faraday-net_http (3.4.2) + net-http (~> 0.5) faraday-retry (2.2.1) faraday (~> 2.0) ffi (1.17.0) ffi (1.17.0-arm64-darwin) + json (2.19.2) listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - logger (1.6.0) + logger (1.7.0) multipart-post (2.4.1) - net-http (0.4.1) - uri + net-http (0.9.1) + uri (>= 0.11.1) rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - uri (0.13.0) + uri (1.1.1) PLATFORMS arm64-darwin-23 diff --git a/docs/developer-guides/README.md b/docs/developer-guides/README.md index f92ed9fa1550d..cbeba8c13720a 100644 --- a/docs/developer-guides/README.md +++ b/docs/developer-guides/README.md @@ -77,7 +77,6 @@ Avoid hotlinking images from other sources. If you do, Discourse may download th When working on substantial changes, you may like to set up a staging environment to preview your changes. 1. Prepare a Discourse instance (could be a local development environment, or a production site) - 1. Create a category for the docs 2. Install [discourse-doc-categories](https://github.com/discourse/discourse-doc-categories), and configure fully by adding the category & assigning an index topic 3. Enable [DiscoTOC](https://meta.discourse.org/t/111143) for the category diff --git a/docs/developer-guides/docs/02-development-environments/03-docker-setup.md b/docs/developer-guides/docs/02-development-environments/03-docker-setup.md index bfc040644acea..b189affaf3626 100644 --- a/docs/developer-guides/docs/02-development-environments/03-docker-setup.md +++ b/docs/developer-guides/docs/02-development-environments/03-docker-setup.md @@ -128,7 +128,7 @@ d/shutdown_dev; d/boot_dev ```sh d/boot_dev -p ``` -- The Dockerfile comes from [discourse/discourse_docker on GitHub](https://github.com/discourse/discourse_docker), in particular [image/discourse_dev](https://github.com/discourse/discourse_docker/tree/master/image/discourse_dev). +- The Dockerfile comes from [discourse/discourse_docker on GitHub](https://github.com/discourse/discourse_docker), in particular [image/discourse_dev](https://github.com/discourse/discourse_docker/tree/main/image/discourse_dev). ## Running Tests diff --git a/docs/developer-guides/docs/02-development-environments/04-macos-setup.md b/docs/developer-guides/docs/02-development-environments/04-macos-setup.md index c770535e2ff8c..ae4a87c39c284 100644 --- a/docs/developer-guides/docs/02-development-environments/04-macos-setup.md +++ b/docs/developer-guides/docs/02-development-environments/04-macos-setup.md @@ -92,7 +92,7 @@ bin/ember-cli **Option 2**: using only one Terminal tab/window: ```sh -bin/ember-cli -u # will run the Unicorn server in the background +bin/ember-cli -u # will run the Pitchfork server in the background ``` :tada: You should now be able to navigate to [http://localhost:4200](http://localhost:4200) to see your local Discourse installation. (Note that the first load can take up to a minute as the server is warmed up.) diff --git a/docs/developer-guides/docs/02-development-environments/08-local-setup.md b/docs/developer-guides/docs/02-development-environments/08-local-setup.md index 8b01683596149..32c3e429b8206 100644 --- a/docs/developer-guides/docs/02-development-environments/08-local-setup.md +++ b/docs/developer-guides/docs/02-development-environments/08-local-setup.md @@ -8,7 +8,7 @@ So you want to set up Discourse locally to hack on and develop with? This root guide links all the #dev-install guides for the various systems to setup Discourse locally on. If you want to add a guide to this list, be sure to tag it `dev-install` before editing this post to include it here. -_(If you want to install Discourse for production use, see [our install guide](https://github.com/discourse/discourse/blob/master/docs/INSTALL.md))_ +_(If you want to install Discourse for production use, see [our install guide](https://github.com/discourse/discourse/blob/main/docs/INSTALL.md))_ In no particular order, here are the install guides for setting Discourse up on your local environment: diff --git a/docs/developer-guides/docs/02-development-environments/10-fedora-setup.md b/docs/developer-guides/docs/02-development-environments/10-fedora-setup.md index 7275deb3e4109..4324f7e8c2df1 100644 --- a/docs/developer-guides/docs/02-development-environments/10-fedora-setup.md +++ b/docs/developer-guides/docs/02-development-environments/10-fedora-setup.md @@ -6,7 +6,7 @@ id: fedora-setup This guide has been tested against a fresh install of Fedora 31 and 33, but may work on older versions that also use dnf as the package management tool. This is not an official guide but may be useful for other developers using Fedora. This is largely based on the [Ubuntu development guide](https://meta.discourse.org/t/beginners-guide-to-install-discourse-on-ubuntu-for-development/14727), with changes for the different packages for dnf. The assumption is that you do not have any of the packages installed already, although most will be skipped by the tooling if it is already installed. -If you're looking to install Discourse for a **production environment**, prefer the [docker install instructions on github](https://github.com/discourse/discourse/blob/master/docs/INSTALL.md). +If you're looking to install Discourse for a **production environment**, prefer the [docker install instructions on github](https://github.com/discourse/discourse/blob/main/docs/INSTALL.md). **Install required system and development packages** diff --git a/docs/developer-guides/docs/03-code-internals/02-lint-and-format.md b/docs/developer-guides/docs/03-code-internals/02-lint-and-format.md index 70a8878ff85f7..581e91e3010a5 100644 --- a/docs/developer-guides/docs/03-code-internals/02-lint-and-format.md +++ b/docs/developer-guides/docs/03-code-internals/02-lint-and-format.md @@ -4,11 +4,172 @@ short_title: Lint and format id: lint-and-format --- -The discourse repository includes configuration for [lefthook](https://github.com/Arkweid/lefthook). This will automatically check any code before it's committed to git, and alert about any issues. To get set up, simply enter your discourse development directory and run +Discourse uses [lefthook](https://github.com/evilmartians/lefthook) for git hooks, and `bin/lint` as the main CLI entry point for running the same checks manually. + +If you are working in a local clone, install the hooks once: ```sh pnpm install -pnpm run lefthook install +pnpm lefthook install +``` + +After that, staged files will be checked automatically on `git commit`. + +## The main command: `bin/lint` + +Use `bin/lint` when you want to run the repo's configured linters yourself instead of waiting for the pre-commit hook. + +Common examples: + +```sh +bin/lint +bin/lint path/to/file.rb path/to/file.gjs +bin/lint --recent +bin/lint --staged +bin/lint --unstaged +bin/lint --wip +bin/lint --fix path/to/file.rb +bin/lint --fix --recent +bin/lint --fix ``` -Files will now be automatically checked before committing. If there are any issues, the commit will be cancelled, and you will be shown a list of errors. +### What each mode does + +- `bin/lint`: lint all supported files in the repository +- `bin/lint path/to/file ...`: lint only the given files +- `bin/lint --recent`: lint files changed in the last 50 commits, plus untracked files +- `bin/lint --staged`: lint only staged files +- `bin/lint --unstaged`: lint only unstaged files +- `bin/lint --wip`: lint staged files, unstaged files, and files changed since `main` +- `bin/lint --fix ...`: run the auto-fixers for the selected files +- `bin/lint --fix`: run all available auto-fixers across the repository +- `bin/lint --verbose`: print the underlying lefthook commands + +When you pass explicit files, `bin/lint` filters them to supported lintable file types before invoking lefthook. + +> :information_source: Markdown documentation files are not currently part of `bin/lint`, so running `bin/lint path/to/doc.md` will report that there are no matching files to lint. + +## What gets linted + +The exact configuration lives in [`lefthook.yml`](https://github.com/discourse/discourse/blob/main/lefthook.yml). At the time of writing, `bin/lint` covers: + +### Ruby + +- `**/*.{rb,rake,thor}` +- Ruby scripts under `bin/**/*` +- `Gemfile` + +Checks: + +- `rubocop` +- `syntax_tree` (`stree check`) + +### JavaScript, GJS, CSS, and SCSS formatting + +- `app/assets/stylesheets/**/*.{css,scss}` +- `frontend/**/*.{js,gjs,scss,css,cjs,mjs}` +- matching plugin and theme asset files + +Checks: + +- `prettier`/`pprettier` + +### JavaScript and GJS linting + +- `frontend/**/*.{js,gjs}` +- matching plugin and theme JS files + +Checks: + +- `eslint` + +### GJS template linting + +- `frontend/**/*.gjs` +- matching plugin and theme `.gjs` files + +Checks: + +- `ember-template-lint` + +### SCSS linting + +- `app/assets/stylesheets/**/*.scss` +- matching plugin and theme SCSS files + +Checks: + +- `stylelint` + +### YAML and locale checks + +- `**/*.{yaml,yml}` except `config/database.yml` +- `**/{client,server}.en.yml` + +Checks: + +- `yaml-lint` +- `script/i18n_lint.rb` + +### Type checking + +When you run `bin/lint` with no file arguments, the full-repo lint also runs: + +- `pnpm lint:types` + +This is the Glint/TypeScript-style check for Discourse's JavaScript type information. + +> :information_source: `bin/lint path/to/file` and the pre-commit hook do **not** run the full type check. Use plain `bin/lint` when you want the complete repo-wide lint pass. + +## What can be auto-fixed + +`bin/lint --fix` can automatically fix a lot of issues, but not all of them. + +Auto-fix is configured for: + +- `prettier --write` +- `eslint --fix` +- `ember-template-lint --fix` +- `stylelint --fix` +- `rubocop -A` +- `syntax_tree` (`stree write`) + +In practice, that means `--fix` can reformat and rewrite: + +- Ruby +- JavaScript / GJS +- CSS / SCSS + +These checks are **not** auto-fixed by `bin/lint --fix`: + +- YAML syntax validation +- i18n linting for `client.en.yml` / `server.en.yml` +- Glint/type checking + +## Relationship to git hooks + +The pre-commit hook uses the same lefthook configuration as `bin/lint`, but it runs only against staged files. + +That means: + +- a commit can fail because staged files do not pass linting +- `bin/lint --staged` is the closest manual equivalent to the pre-commit hook +- `bin/lint --fix --staged` is a good way to repair exactly what you are about to commit + +## Practical workflow + +For day-to-day development, these are the most useful commands: + +```sh +# Before committing a couple of changed files +bin/lint --fix path/to/file1.rb path/to/file2.gjs + +# Check exactly what the pre-commit hook will check +bin/lint --staged + +# Clean up all current in-progress work +bin/lint --fix --wip + +# Run the full repo lint suite, including type checks +bin/lint +``` diff --git a/docs/developer-guides/docs/03-code-internals/06-ember-object-ownership.md b/docs/developer-guides/docs/03-code-internals/06-ember-object-ownership.md index 1637debfd6b01..afc11614da5ae 100644 --- a/docs/developer-guides/docs/03-code-internals/06-ember-object-ownership.md +++ b/docs/developer-guides/docs/03-code-internals/06-ember-object-ownership.md @@ -29,7 +29,7 @@ To access e.g. services there a couple of methods at your disposal. - In API initializers you have the access to `api.container` ```js - apiInitializer("1.0", (api) => { + apiInitializer((api) => { const router = api.container.lookup("service:router"); ``` diff --git a/docs/developer-guides/docs/03-code-internals/09-markdown-extensions.md b/docs/developer-guides/docs/03-code-internals/09-markdown-extensions.md index 35b47e6063022..1761c840cf9bf 100644 --- a/docs/developer-guides/docs/03-code-internals/09-markdown-extensions.md +++ b/docs/developer-guides/docs/03-code-internals/09-markdown-extensions.md @@ -103,9 +103,9 @@ Block level rules apply to multiple lines of text like: `md.block.bbcode.ruler` holds a list of block level rules -There are many examples for inline rules at: [bbcode-inline.js](https://github.com/discourse/discourse/blob/master/app/assets/javascripts/pretty-text/engines/discourse-markdown/bbcode-inline.js) +There are many examples for inline rules at: [bbcode-inline.js](https://github.com/discourse/discourse/blob/main/frontend/discourse-markdown-it/src/features/bbcode-inline.js) -[Quotes](https://github.com/discourse/discourse/blob/master/app/assets/javascripts/pretty-text/engines/discourse-markdown/quotes.js) and polls are good examples of bbcode block rules. +[Quotes](https://github.com/discourse/discourse/blob/main/frontend/discourse-markdown-it/src/features/quotes.js) and polls are good examples of bbcode block rules. #### Inline BBCode rules diff --git a/docs/developer-guides/docs/03-code-internals/11-dmodal-api.md b/docs/developer-guides/docs/03-code-internals/11-dmodal-api.md index 95d98ef324a85..aea21884d5e77 100644 --- a/docs/developer-guides/docs/03-code-internals/11-dmodal-api.md +++ b/docs/developer-guides/docs/03-code-internals/11-dmodal-api.md @@ -105,4 +105,4 @@ const result = await this.modal.show(MyModal); ## More customizability! -`` has a number of named blocks and arguments. Check out [the interactive styleguide](https://meta.discourse.org/styleguide/organisms/modal) for arguments, and [the d-modal template implementation](https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/components/d-modal.hbs) for named blocks. +`` has a number of named blocks and arguments. Check out [the interactive styleguide](https://meta.discourse.org/styleguide/organisms/modal) for arguments, and [the d-modal template implementation](https://github.com/discourse/discourse/blob/main/frontend/discourse/app/components/d-modal.gjs) for named blocks. diff --git a/docs/developer-guides/docs/03-code-internals/14-modifyclass.md b/docs/developer-guides/docs/03-code-internals/14-modifyclass.md index 5bb27751c20a4..225343e755629 100644 --- a/docs/developer-guides/docs/03-code-internals/14-modifyclass.md +++ b/docs/developer-guides/docs/03-code-internals/14-modifyclass.md @@ -122,7 +122,7 @@ In theme/plugin development, there are two ways this error is normally introduce ```js // Lookup service in initializer, then use it at runtime (bad!) - export default apiInitializer("0.8", (api) => { + export default apiInitializer((api) => { const composerService = api.container.lookup("service:composer"); api.composerBeforeSave(async () => { composerService.doSomething(); @@ -134,7 +134,7 @@ In theme/plugin development, there are two ways this error is normally introduce ```js // 'Just in time' lookup of service (good!) - export default apiInitializer("0.8", (api) => { + export default apiInitializer((api) => { api.composerBeforeSave(async () => { const composerService = api.container.lookup("service:composer"); composerService.doSomething(); diff --git a/docs/developer-guides/docs/03-code-internals/16-authentication-method.md b/docs/developer-guides/docs/03-code-internals/16-authentication-method.md index 0b28aa20c2f85..73518497a4fd9 100644 --- a/docs/developer-guides/docs/03-code-internals/16-authentication-method.md +++ b/docs/developer-guides/docs/03-code-internals/16-authentication-method.md @@ -12,9 +12,9 @@ This post isn't designed to be a step-by-step instruction manual for adding a ne ## Implementing an authenticator -Each authenticator **must** implement a subclass of [Auth::Authenticator](https://github.com/discourse/discourse/blob/master/lib/auth/authenticator.rb). To use the new shared logic, the authenticator **can** instead extend [Auth::ManagedAuthenticator](https://github.com/discourse/discourse/blob/master/lib/auth/managed_authenticator.rb). An example of a bare-bones implementation can be found in the core Facebook authenticator: +Each authenticator **must** implement a subclass of [Auth::Authenticator](https://github.com/discourse/discourse/blob/main/lib/auth/authenticator.rb). To use the new shared logic, the authenticator **can** instead extend [Auth::ManagedAuthenticator](https://github.com/discourse/discourse/blob/main/lib/auth/managed_authenticator.rb). An example of a bare-bones implementation can be found in the core Facebook authenticator: -https://github.com/discourse/discourse/blob/master/lib/auth/facebook_authenticator.rb +https://github.com/discourse/discourse/blob/main/lib/auth/facebook_authenticator.rb `name`, `enabled?` and `register_middleware` must be overridden by implementing classes. @@ -34,7 +34,7 @@ Once an `Authenticator` class has been defined, it needs to be registered. This auth_provider authenticator: OpenIDConnectAuthenticator.new() ``` -In core, registration takes place in [`discourse.rb`](https://github.com/discourse/discourse/blob/b46b6e72d1906ca31e29855bda71f3498c8e203f/lib/discourse.rb#L215-L222). A full list of possible `AuthProvider` options can be found [here](https://github.com/discourse/discourse/blob/master/lib/auth/auth_provider.rb#L8-L12). Text content **can** be defined using these options, but it is better to provide localisable strings in `client.en.yml` following the standard keys. For example: +In core, registration takes place in [`discourse.rb`](https://github.com/discourse/discourse/blob/b46b6e72d1906ca31e29855bda71f3498c8e203f/lib/discourse.rb#L215-L222). A full list of possible `AuthProvider` options can be found [here](https://github.com/discourse/discourse/blob/b46b6e72d1906ca31e29855bda71f3498c8e203f/lib/auth/auth_provider.rb#L8-L12). Text content **can** be defined using these options, but it is better to provide localisable strings in `client.en.yml` following the standard keys. For example: https://github.com/discourse/discourse-openid-connect/blob/88fdf7b5ab624aba7c207e403665e0393334794a/config/locales/client.en.yml#L1-L7 @@ -88,6 +88,6 @@ The user is a fresh instance will be populated by session data which is prepared To provide a seamless switch to the new system, data should be migrated from the old storage location. For core authentication providers, this may be dedicated tables. For plugins, this may be `plugin_store_rows`, or `oauth2_user_infos`. The minimum data required in a `user_associated_accounts` row is `provider_name`, `provider_uid` and `user_id`. For an example migration see: -https://github.com/discourse/discourse/blob/master/db/migrate/20181207141900_migrate_twitter_user_info.rb +https://github.com/discourse/discourse/blob/main/db/migrate/20181207141900_migrate_twitter_user_info.rb Once the `ManagedAuthenticator` system has been released to the stable branch with v2.2.0, we will begin migrating official authentication **plugins**. At this point, a `plugin_store_row` migration example will be added here. diff --git a/docs/developer-guides/docs/03-code-internals/18-overriding-templates.md b/docs/developer-guides/docs/03-code-internals/18-overriding-templates.md index 0edd28cd56424..9fac1e2d630cc 100644 --- a/docs/developer-guides/docs/03-code-internals/18-overriding-templates.md +++ b/docs/developer-guides/docs/03-code-internals/18-overriding-templates.md @@ -20,7 +20,7 @@ If you've exhausted all other options, you may need to resort to template overri ## Overriding Component Templates -To override an Ember Component template (i.e. anything under [`components/*`](https://github.com/discourse/discourse/tree/main/app/assets/javascripts/discourse/app/components) in Discourse core), you should create an identically-named `.hbs` in your theme/plugin. For example, to override the template for the `badge-button` component in Discourse core, you would create a template file in your theme/plugin at this location: +To override an Ember Component template (i.e. anything under [`components/*`](https://github.com/discourse/discourse/tree/main/frontend/discourse/app/components) in Discourse core), you should create an identically-named `.hbs` in your theme/plugin. For example, to override the template for the `badge-button` component in Discourse core, you would create a template file in your theme/plugin at this location: :art: `{theme}/javascripts/discourse/templates/components/badge-button.hbs` @@ -30,7 +30,7 @@ The override must always be nested inside the `/templates` directory, even if th ## Overriding Route Templates -Overriding route templates (i.e. all the non-component templates under [`templates/*`](https://github.com/discourse/discourse/tree/main/app/assets/javascripts/discourse/app/templates)) works in the same way as components. Create an identically named template in your theme/plugin. For example, to override `discovery.hbs` in core, you would create a file like +Overriding route templates (i.e. all the non-component templates under [`templates/*`](https://github.com/discourse/discourse/tree/main/frontend/discourse/app/templates)) works in the same way as components. Create an identically named template in your theme/plugin. For example, to override `discovery.hbs` in core, you would create a file like :art: `{theme}/javascripts/discourse/templates/discovery.hbs` diff --git a/docs/developer-guides/docs/03-code-internals/19-service-objects.md b/docs/developer-guides/docs/03-code-internals/19-service-objects.md index d4e71df1ae8c5..948ecce8762e0 100644 --- a/docs/developer-guides/docs/03-code-internals/19-service-objects.md +++ b/docs/developer-guides/docs/03-code-internals/19-service-objects.md @@ -148,6 +148,14 @@ This step is another special one, as it’s similar to a contract (without the v This step will only run the steps defined in its block if the provided condition is true. That’s another step that can’t fail by itself. +### `each` + +This step iterates over a collection from the context and runs the steps defined in its block for each item. The item is provided under its singularized name (e.g., `each :users` provides `user:`) along with `index:`. If any nested step fails, iteration stops immediately and the service fails with the failing item and index available in context. + +An empty collection is silently skipped. + +A `persist:` option allows values to accumulate across iterations and survive the loop’s variable isolation. This is useful for collecting results during bulk operations. + ### Steps arguments Each step is called with the service context. To access a value in it, just provide its key as a keyword argument. @@ -412,6 +420,41 @@ This step wraps other steps. If the condition is not met (meaning the related me That step is very useful when you have several steps depending on the same condition to be run, as it allows to keep all the error handling provided by steps like `model`, `policy`, etc. +### `each(collection_name, as: nil, persist: nil, &block)` + +**Arguments** + +- _collection_name_: the name of the context key holding the collection to iterate over. +- _as_: override the singularized item name. For example, `each :users, as: :member` provides `member:` instead of `user:`. +- _persist_: keys that should accumulate across iterations and survive the loop's variable isolation. Accepts a hash where values are lambdas or method symbols used to initialize the key, or an array of symbols for keys without initialization. +- _block_: a block containing other steps. + +This step iterates over a collection and runs the steps defined in its block for each item. Each iteration receives the singularized item name (e.g., `user:` for `each :users`) and `index:` as keyword arguments. + +By default, variables set inside the loop are isolated: they don't leak to the outer context. The `persist:` option allows specific keys to survive the isolation. This is particularly useful for accumulating results during bulk operations. + +If any nested step fails (a policy returns falsy, a model is not found, or `fail!` is called), iteration stops immediately and the service fails. The failing item and index remain available in context for error reporting, and existing matchers (`on_failed_policy`, `on_model_not_found`, etc.) work as expected. + +An empty collection is silently skipped. + +```rb +# Fail-fast iteration +each :users do + policy :can_delete + step :destroy +end + +# Accumulating results across iterations +each :tag_names, persist: { results: -> { { created: [], failed: [] } } } do + step :create_tag +end + +# Custom item name +each :users, as: :target_user do + step :process +end +``` + ### `step(name)` **Arguments** diff --git a/docs/developer-guides/docs/03-code-internals/21-form-kit.md b/docs/developer-guides/docs/03-code-internals/21-form-kit.md index 40c8e7f21a63d..4264773bb008b 100644 --- a/docs/developer-guides/docs/03-code-internals/21-form-kit.md +++ b/docs/developer-guides/docs/03-code-internals/21-form-kit.md @@ -10,7 +10,7 @@ id: form-kit FormKit exposes a single component as its public API: `
`. All other elements are yielded as contextual components, modifiers, or plain data. -Every form is composed of one or multiple fields, representing the value, validation, and metadata of a control. Each field encapsulates a control, which is the form element the user interacts with to enter data, such as an input or select. Other utilities, like submit or alert, are also provided. +Every form is composed of one or multiple fields, representing the value, validation, and metadata of a control. Each field encapsulates a control, which is the form element the user interacts with to enter data, such as an input or select. The control type is specified via `@type` on the field. Other utilities, like submit or alert, are also provided. Here is the most basic example of a form: @@ -31,13 +31,14 @@ export default class MyForm extends Component { @name="username" @title="Username" @validation="required" + @type="input" as |field| > - + - - + + @@ -52,7 +53,14 @@ export default class MyForm extends Component { ### form -The `Form` component yields a `form` object containing components and helpers. +The `Form` component yields a `form` object containing contextual components and helper functions. + +Common members include: + +- `Field`, `Object`, `Collection`, `Fieldset`, `Row`, `Section`, `Container` +- `Submit`, `Reset`, `Button`, `Alert`, `Actions` +- `CheckboxGroup`, `InputGroup`, `ConditionalContent` +- `set(name, value)`, `setProperties(object)`, `addItemToCollection(name, value)` **Example** @@ -66,7 +74,7 @@ The `Form` component yields a `form` object containing components and helpers. ### transientData -`transientData` represents the state of the data at a given time as it's represented in the form, and not yet propagated to `@data`. +`transientData` is the form's current draft state. It starts as a clone of `@data`, updates as the user edits fields, and does not mutate the original `@data` object. > :information_source: This is useful if you want to have conditionals in your form based on other fields. @@ -74,29 +82,31 @@ The `Form` component yields a `form` object containing components and helpers. ```hbs - - + + {{#if (gt transientData.amount 200)}} - - I know what I'm doing + + I know what I'm doing {{/if}} ``` -## Properties +## Arguments ### @data -Initial state of the data you give to the form. +Initial state of the form data. -**The keys matching the `@name`s of the form's fields will be prepopulated.** +**FormKit expects a plain JavaScript object (POJO).** Internally it clones that object into draft state, tracks patches, and only mutates its own internal copy. -> :information_source: `@data` is treated as an immutable object, following Ember's DDAU pattern. This means when the user enters new data for any of the fields, it will not cause a mutation of `@data`! You can mutate your initial object using `@onSet`. +Keys matching field `@name`s are prepopulated automatically, including nested object and collection paths. -When working with an object object we recommend to setup your form data object like this: +> :information_source: `@data` is treated as immutable. Edits do not mutate the original object you pass in. If you need to keep some external state in sync while editing, do that explicitly in `@onSet`. + +When deriving a form object from a model, prefer a cached getter: ```js @cached @@ -113,34 +123,40 @@ get formData() { ```hbs
- + - + ``` ### @onRegisterApi -Callback called when the form is inserted. It allows the developer to interact with the form through JavaScript. +Callback called when the form instance is created. It allows the developer to interact with the form through JavaScript. **Parameters** - `callback` (Object): The object containing callback functions. - - `callback.submit` (Function): Function to submit the form. - - `callback.reset` (Function): Function to reset the form. - - `callback.set` (Function): Function to set a key/value on the form data object. - - `callback.setProperties` (Function): Function to set an object on the form data object. - - `callback.isDirty` (boolean): Tracked property return the state of the form. It will be true once changes have been done on the form. Resetting the changes will bring it back to false. +- `callback.get` (Function): Returns the current value for a field name. +- `callback.submit` (Function): Function to submit the form. +- `callback.reset` (Function): Function to reset the form. +- `callback.set` (Function): Function to set a key/value on the form data object. +- `callback.setProperties` (Function): Function to set an object on the form data object. +- `callback.addError` (Function): Function to add an error programmatically. +- `callback.removeError` (Function): Function to remove a single field error. +- `callback.removeErrors` (Function): Function to clear all errors. +- `callback.isDirty` (boolean): Tracked property exposing the dirty state of the form. It becomes `true` after changes are made and returns to `false` after reset. **Example** ```js -registerAPI({ submit, reset, set }) { +registerAPI({ get, submit, reset, set, addError }) { // Interact with the form API + get("foo"); submit(); reset(); set("foo", 1); + addError("foo", { title: "Foo", message: "Something went wrong" }); } ``` @@ -154,7 +170,7 @@ Callback called when the form is submitted **and valid**. **Parameters** -- `data` (Object): The object containing the form data. +- `data` (Object): The current draft data for the form. **Example** @@ -166,19 +182,45 @@ handleSubmit({ username, age }) { ```hbs
- - + + - - + + ``` +### @onReset + +Callback called after FormKit rolls the draft data back to its initial state and clears errors. + +**Parameters** + +- `data` (Object): The rolled-back draft data. + +**Example** + +```js +handleReset(data) { + console.log("reset to", data); +} +``` + +```hbs +
+ + + + + + +``` + ### @validate -A custom validation callback added directly to the form. +A custom validation callback added directly to the form. This runs once per validation pass, after field-level validation. **Example** @@ -211,16 +253,53 @@ async myValidation(data, { addError }) { } ``` +### @validateOn + +Controls when FormKit should validate. + +- Accepted values: `submit` (default), `change`, `focusout`, and `input`. + +**Example** + +```hbs +
+``` + +### @onDirtyCheck + +Callback used during route transitions when the form is dirty. Return a truthy value to show the built-in "dirty form" confirmation dialog, or a falsy value to skip it. + +**Parameters** + +- `transition` (Transition): The Ember route transition being processed. + +**Example** + +```js +@action +onDirtyCheck(transition) { + return transition.to?.name !== "wizard.step"; +} +``` + +```hbs + +``` + # Field ## @name -A field must have a unique name. This name is used to set the value on the data object and is also used for validation. +A field must have a unique name. This name is used to read/write the value on the form data object and is also used for validation. + +Names cannot contain `.` or `-`. Dots are reserved for nested paths such as `profile.location.city`. **Example** ```hbs - + + + ``` ## @title @@ -230,7 +309,24 @@ A field must have a title. It will be displayed above the control and is also us **Example** ```hbs - + + + +``` + +## @type + +A field must have a type. This determines which control component is rendered. The available types are: + +- **Input types**: `input` (defaults to text), `input-text`, `input-number`, `input-email`, `input-password`, `input-url`, `input-tel`, `input-date`, `input-time`, `input-datetime-local`, `input-color`, `input-month`, `input-week`, `input-range`, `input-search`, `input-hidden` +- **Other controls**: `checkbox`, `code`, `calendar`, `color`, `composer`, `custom`, `emoji`, `icon`, `image`, `menu`, `password`, `question`, `radio-group`, `select`, `tag-chooser`, `textarea`, `toggle` + +**Example** + +```hbs + + + ``` ## @description @@ -240,7 +336,15 @@ The description is optional and will be shown under the title when set. **Example** ```hbs - + + + ``` ## @helpText @@ -250,7 +354,9 @@ The help text is optional and will be shown under the field when set. **Example** ```hbs - + + + ``` ## @showTitle @@ -260,7 +366,15 @@ By default, the title will be shown on top of the control. You can choose not to **Example** ```hbs - + + + ``` ## @disabled @@ -270,20 +384,34 @@ A field can be disabled to prevent any changes to it. **Example** ```hbs - + + + ``` ## @tooltip -Allows to display a tooltip next to the field’s title. Won't display if title is not shown. +Allows to display a tooltip next to the field's title. Won't display if title is not shown. You can pass a string or a `` component. **Example** ```hbs - - + + ``` @@ -293,10 +421,11 @@ You can pass a string or a `` component. - + ``` @@ -317,19 +446,32 @@ By default, when changing the value of a field, this value will be set on the fo ```js @action -handleFooChange(value, { set }) { +handleFooChange(value, { set, name, parentName, index }) { set("foo", value + "-bar"); } ``` ```hbs - - + + ``` > :information_source: You can use `@onSet` to also mutate the initial data object if you need more reactivity for a specific case. +The second argument passed to `@onSet` contains: + +- `set(name, value)`: update form draft state +- `name`: the field's full name +- `parentName`: the parent path for nested fields +- `index`: the current collection index when inside a collection + **Example** ```js @@ -342,15 +484,50 @@ handleFooChange(value, { set }) { ```hbs
- - + + ``` +## Yielded Parameters + +The field yields a single field object. The control component determined by `@type` is available as `field.Control`. + +```hbs + + + +``` + +### field.Control + +`field.Control` is the control component determined by `@type`. You can pass control-specific attributes directly to it (e.g., `@height`, `@lang`, `placeholder`). + +> :information_source: `field.Control` is the supported API. Older yielded names such as `field.Input` are deprecated. + +### field + +The yielded `field` object provides access to the field's data and helpers: + +| Name | Description | +| --------- | --------------------------------------------------- | +| `Control` | Contextual component for the control set by `@type` | +| `id` | ID to be used on the control for accessibility | +| `errorId` | ID of the field error container | +| `name` | Full field name, including nested path prefixes | +| `value` | Current value from draft data | +| `set` | Function to set the field's value | + # Controls -Controls, as we use the term here, refer to the UI widgets that allow a user to enter data. In its most basic form, this would be an input. +Controls, as we use the term here, refer to the UI widgets that allow a user to enter data. In its most basic form, this would be an input. The control type is specified via `@type` on the field. > :information_source: You can pass down HTML attributes to the underlying control. @@ -361,10 +538,11 @@ Controls, as we use the term here, refer to the UI widgets that allow a user to - + ``` @@ -399,68 +577,94 @@ Allows to override `@format` for the description. See `@format` for details. Renders an `` element. > :information_source: When to use a single checkbox -> There are only 2 options: yes/no. It feels like agreeing to something. Checking the box doesn’t save; there is a submit button further down. +> There are only 2 options: yes/no. It feels like agreeing to something. Checking the box doesn't save; there is a submit button further down. **Example** ```hbs
- - + + ``` -## Code +## Calendar -Renders an `` component. +Renders a datepicker and a time input. On mobile the datepicker will be replaced by a date input. -### @height +### @includeTime + +Displays the time input or not. Defaults to true. -Sets the height of the editor. +**Example** -### @lang +```hbs +
+ + + + +``` -Sets the language of the editor. +### @expandedDatePickerOnDesktop + +Displays date picker expanded on desktop. Defaults to true. **Example** ```hbs
- - + + ``` -## Calendar +## Code -Renders a datepicker and a time input. On mobile the datepicker will be replaced by a date input. +Renders an `` component. -### @includeTime +### @height -Displays the time input or not. Defaults to true. +Sets the height of the editor in pixels. + +### @lang + +Sets the editor mode. **Example** ```hbs
- - + + ``` -### @expandedDatePickerOnDesktop +## Color -Displays date picker expanded on desktop. Defaults to true. +Renders a color input with optional preset swatches. + +Common control arguments: + +- `@colors`: array of preset colors +- `@usedColors`: array of already-used colors +- `@collapseSwatches`: collapse swatches into a menu +- `@collapseSwatchesLabel`: label for the collapsed swatches button +- `@allowNamedColors`: allow named colors instead of only hex values +- `@fallbackValue`: value to restore on blur when left blank **Example** ```hbs
- - + + ``` @@ -477,8 +681,8 @@ Sets the height of the composer. ```hbs
- - + + ``` @@ -491,8 +695,46 @@ Controls the display the composer preview. Defaults to `false`. ```hbs
- - + + + + +``` + +## Custom + +Renders a wrapper for custom content. This is the right choice when you want to provide your own control markup but still use FormKit field metadata and state. + +**Example** + +```hbs +
+ + + + + + +``` + +## Emoji + +Renders an `` component. + +### @context + +Passes the picker context through to ``. + +**Example** + +```hbs +
+ + ``` @@ -505,8 +747,8 @@ Renders an `` component. ```hbs
- - + + ``` @@ -515,6 +757,11 @@ Renders an `` component. Renders an `` component. +Common control arguments: + +- `@type`: uploader context passed to `` +- `@placeholderUrl`: optional placeholder image + ### Upload Handling By default, the component will set an upload object. It's common to only want the URL and the ID of the upload. To achieve this, you can use the `@onSet` property on the field: @@ -532,10 +779,11 @@ handleUpload(upload, { set }) { - + ``` @@ -544,8 +792,8 @@ handleUpload(upload, { set }) { ```hbs
- - + + ``` @@ -556,41 +804,42 @@ Renders an `` element. ### @type -Optional property which will default to `text`. Maps to `` types. +The input variant is specified as part of the field's `@type` using the `input-` prefix. For example, `@type="input"`, `@type="input-number"`, or `@type="input-email"`. `@type="input"` defaults to text. ### Allowed Types -- `color` -- `date` -- `datetime-local` -- `email` -- `hidden` -- `month` -- `number` -- `password` -- `range` -- `search` -- `tel` -- `text` -- `time` -- `url` -- `week` +- `input` (defaults to text) +- `input-color` +- `input-date` +- `input-datetime-local` +- `input-email` +- `input-hidden` +- `input-month` +- `input-number` +- `input-password` +- `input-range` +- `input-search` +- `input-tel` +- `input-text` +- `input-time` +- `input-url` +- `input-week` ### Special Cases -- `file` is supported only for images through image -- checkbox +- `checkbox` and `radio` have dedicated controls +- file uploads should use `@type="image"` **Examples** ```hbs
- - + + - - + + ``` @@ -603,8 +852,8 @@ Renders text before the input ```hbs
- - + + ``` @@ -617,15 +866,15 @@ Renders text after the input ```hbs
- - + + ``` ## Menu -Renders a component. +Renders a `` trigger with yielded menu content. ### @selection @@ -655,29 +904,31 @@ Renders a div which will have for content the yielded content. ```hbs
- - + + Edit Bar Something - +
``` ## Password -Renders an `` of type password. This control also includes a button which will allow to toggle the visibility of the text. When toggle the type of the input will be switched to text. +Renders a password input with a visibility toggle. + +> :information_source: This is different from `@type="input-password"`. The dedicated `password` control adds the show/hide button. **Example** ```hbs
- - + + ``` @@ -698,8 +949,8 @@ Allows to customize the negative label. ```hbs
- - + + ``` @@ -712,12 +963,12 @@ Renders a list of radio buttons sharing a common name. ```hbs
- - + + One Two Three - + ``` @@ -732,12 +983,12 @@ Allows to render a title. ```hbs
- - + + One title - + ``` @@ -750,35 +1001,63 @@ Allows to render a description. ```hbs
- - + + One description - + ``` ## Select -Renders a ` + + + + {{/if}} + + {{/if}} + + + + <:footer> + + + +
+ +} diff --git a/frontend/discourse/admin/components/modal/delete-posts-confirmation.gjs b/frontend/discourse/admin/components/modal/delete-posts-confirmation.gjs index e5ceb034e1019..6bedc226b76ec 100644 --- a/frontend/discourse/admin/components/modal/delete-posts-confirmation.gjs +++ b/frontend/discourse/admin/components/modal/delete-posts-confirmation.gjs @@ -1,7 +1,7 @@ import Component from "@glimmer/component"; import { tracked } from "@glimmer/tracking"; import { Input } from "@ember/component"; -import { htmlSafe } from "@ember/template"; +import { trustHTML } from "@ember/template"; import DButton from "discourse/components/d-button"; import DModal from "discourse/components/d-modal"; import { i18n } from "discourse-i18n"; @@ -22,7 +22,7 @@ export default class DeletePostsConfirmation extends Component {

- <%=raw(t 'user_notifications.digest.unsubscribe', - site_link: html_site_link, - email_preferences_link: link_to(t('user_notifications.digest.your_email_settings'), Discourse.base_url + '/my/preferences/emails'), - unsubscribe_link: link_to(t('user_notifications.digest.click_here'), "#{Discourse.base_url}/email/unsubscribe/#{@unsubscribe_key}")) %> + <% if @unsubscribe_key %> + <%=raw(t 'user_notifications.digest.unsubscribe', + site_link: html_site_link, + email_preferences_link: link_to(t('user_notifications.digest.your_email_settings'), Discourse.base_url + '/my/preferences/emails'), + unsubscribe_link: link_to(t('user_notifications.digest.click_here'), "#{Discourse.base_url}/email/unsubscribe/#{@unsubscribe_key}")) %> + <% end %>