Compare commits

...

418 Commits

Author SHA1 Message Date
LinkinStars 65f0060888 Merge remote-tracking branch 'origin/fix/2.0.3/user' into test
Lint / Lint (ubuntu-latest) (push) Has been cancelled
Build Docker Image For Test / Build and Push (push) Has been cancelled
2026-08-17 14:25:19 +08:00
Duansg 2c0ced322d fix: use TagStatusDeleted instead of QuestionStatusDeleted in tag permission
Lint / Lint (ubuntu-latest) (push) Has been cancelled
2026-08-17 12:23:24 +08:00
LinkinStars a203e7f608 chore: satisfy static checks 2026-08-17 11:32:39 +08:00
LinkinStars 63a67542f4 fix: constrain MCP content access 2026-08-17 10:49:54 +08:00
LinkinStars 2e2c3019a2 fix: enforce question access controls 2026-08-17 10:28:49 +08:00
LinkinStars e8ded23a4a fix: strengthen request safeguards 2026-08-14 19:17:10 +08:00
LinkinStars 21e0714a08 fix: align question operation permissions 2026-08-14 17:03:23 +08:00
Nikita Ermilov 413bbd0c7f i18n: complete Russian (ru_RU) translation 2026-08-14 17:00:03 +08:00
LinkinStars 32b451ce87 fix: normalize imported content 2026-08-14 16:48:53 +08:00
LinkinStars b80ad0a892 fix: avoid sensitive auth logging 2026-08-14 16:34:33 +08:00
LinkinStars 1ccb4b7adc fix: add ASF header to tag search test
Signed-off-by: LinkinStars <linkinstar@foxmail.com>
2026-08-11 19:50:54 +08:00
ferhat elmas da622a4927 test(converter): pin renderLinkIsUrl behavior
Add a table-driven test covering the markdown link destination check
before replacing the govalidator dependency with stdlib logic.

Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2026-08-11 19:34:58 +08:00
Max Engine 4488ccc689 fix: tag search never matches on slug name
The search term was formatted into LOWER(%s) and passed as the *value* of the
LIKE, so the function name ended up inside the pattern:

    slug_name LIKE '%LOWER(coco)%'

That can never match. Only the display_name clause did any work, and LIKE is
case-sensitive on Postgres, so searching a tag by the name it is written in
returns nothing:

    slug_name=Coco  -> matches
    slug_name=coco  -> no match

Tags are lower case by convention, so lower case is what users type, and the
filter appears to report that no such tag exists.

Lower both sides instead. The term normalisation is extracted so it can be
covered by a test without a database.
2026-08-11 19:31:39 +08:00
ferhat elmas 98329f3b05 fix: advanced site settings setup from migration 30
Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2026-07-29 19:09:48 +08:00
LinkinStars ecef4f11dc Merge remote-tracking branch 'origin/main' into dev
# Conflicts:
#	docs/release/LICENSE
#	internal/service/notification/new_question_notification_test.go
2026-07-29 17:19:20 +08:00
Luffy 3b9f137061 fix: edit question fails when short links enabled (#1554)
CI / Check and lint (push) Has been cancelled
Build Latest Docker Image For Release / build (push) Has been cancelled
Lint / Lint (ubuntu-latest) (push) Has been cancelled
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
Close #1553
2026-07-17 22:38:41 +08:00
Luffy 897fc8c4d4 fix: add missing license entry for mozillazg-go-unidecode (#1552)
Lint / Lint (ubuntu-latest) (push) Has been cancelled
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
2026-07-14 16:03:24 +08:00
LinkinStars 2758e23381 fix: update version to 2.0.2 in Makefile and README
Lint / Lint (ubuntu-latest) (push) Has been cancelled
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
2026-07-10 10:19:39 +08:00
LinkinStars 9d9f5d06a8 fix: enhance user admin service to manage API keys and filter answer visibility 2026-07-10 10:19:39 +08:00
LinkinStars c589b59dd5 fix: enhance answer visibility checks for user permissions 2026-07-10 10:19:39 +08:00
LinkinStars dc84431768 fix(build): update Docker build process to use buildx and streamline image tagging 2026-07-10 10:19:39 +08:00
LinkinStars 0705ea6bae fix(tests): add mock methods for cache OAuth state in new question notification tests 2026-07-10 10:19:39 +08:00
LinkinStars c52e2eeb1f fix(build): update Go version in Dockerfile to 1.25-alpine 2026-07-10 10:19:39 +08:00
LinkinStars 58dbe2c027 fix(build): streamline Docker image build process in CI configuration 2026-07-10 10:19:39 +08:00
LinkinStars 88c288fdda fix(tests): update goroutine handling in new question email worker tests 2026-07-10 10:19:39 +08:00
LinkinStars f5e25dcb8d fix(notification): remove buffer size parameter from new question email worker for test 2026-07-10 10:19:39 +08:00
Artur Iusupov e06311a514 fix(notification): make new question email queue configurable 2026-07-10 10:19:39 +08:00
Artur Iusupov cb97394211 fix(notification): move new question email throttling to worker 2026-07-10 10:19:39 +08:00
Artur Iusupov dda51232b9 feat(notification): add interval for new question emails 2026-07-10 10:19:39 +08:00
LinkinStars a00cb2d38c fix: update goroutine handling and context imports for consistency 2026-07-10 10:19:39 +08:00
LinkinStars f92a0fe140 Harden Accept-Language parsing 2026-07-10 10:19:39 +08:00
LinkinStars b575fe893b Harden avatar cleanup ownership checks 2026-07-10 10:19:39 +08:00
LinkinStars 54b1b35df5 Align revision audit permission checks 2026-07-10 10:19:39 +08:00
LinkinStars 06a0f742f2 fix external login account binding 2026-07-10 10:19:39 +08:00
Artur Iusupov 3a5a15fe77 fix(site): require explicit email verification setting
Replace OptionalBool with an explicit require_email_verification value for the login settings save request while keeping legacy read defaults intact.

Use positive RequireEmailVerification naming through the registration flow and inline the site setting mapping.

Add validation, save-path, and registration coverage for the explicit email verification setting.
2026-07-10 10:19:39 +08:00
Artur Iusupov 7123326515 feat(site): allow disabling email verification 2026-07-10 10:19:39 +08:00
hgaol 4aa52a6b52 fix: accept answer fails when short links enabled (#1541)
The ownership check added to AcceptAnswer compared the answer's QuestionID
against the request's QuestionID directly. When short links are enabled,
answerRepo.GetByID re-encodes QuestionID to its short form while the
controller de-shorts req.QuestionID to its long form, so the two encodings
of the same question never matched and every accept returned "Answer do not
found". Normalize both ids via uid.DeShortID before comparing, preserving the
privilege-escalation guard for answers that truly belong to another question.
2026-07-10 10:19:39 +08:00
hhc7 9234d80246 fix: scope JSON 500 to API routes, skip rewriting already-flushed responses 2026-07-10 10:19:39 +08:00
hhc7 10be96814e feat: add recovery middleware to handle panic gracefully 2026-07-10 10:19:39 +08:00
Ahmed Qasid a6d867e4cc fix: avoid topic fallback for non-Latin titles via pragmatic ASCII transliteration (#1526)
# fix: avoid `topic` fallback for non-Latin titles via pragmatic ASCII
transliteration

> **Scope update (in response to review):** this PR is intentionally
broader than its original "Arabic-only" framing. The implementation
changes URL slug generation for **every non-Latin, non-CJK script** that
`slugify` previously stripped — see *Scope* below for the explicit list.
The goal is *not* linguistically correct romanization; it is "avoid
collapsing to `/topic` by producing a usable ASCII slug."

## What this PR is (and isn't)

**Goal:** when a question title contains characters outside Basic Latin
/ Latin Extended / CJK Han, generate a URL slug that is a deterministic
ASCII approximation instead of letting `slugify` strip everything and
falling back to the literal `"topic"`.

**Non-goal:** this is *not* a linguistically correct multi-language
romanizer. The output is a machine-acceptable ASCII slug, not what a
native speaker would choose. For example, `こんにちは` → `konnichiha` (not
the more natural `kon'nichiwa`), `ไทย` → `aithy` (not `thai`). Treat the
slug as an opaque, stable, indexable identifier — the
path-after-`/questions/<id>/` is for SEO and shareability, the canonical
reference is always the ID.

## The bug

Pure non-Latin titles previously got stripped by `slugify.Slugify`, hit
the empty-result fallback in `htmltext.UrlTitle`, and collapsed to the
literal slug `"topic"`. On a live multilingual site, every Arabic / Thai
/ Japanese-hiragana / Korean / Hebrew / Cyrillic question ended up at
`/questions/<id>/topic`.

## The fix

`UrlTitle()` gets a `convertNonLatin` pre-step that mirrors the existing
`convertChinese` pre-step pattern, using
`github.com/mozillazg/go-unidecode` (same author as `go-pinyin` already
in the repo, to minimise new-dep friction).

```
UrlTitle(title)
  → convertChinese(title)        // pre-existing: Han-block → pinyin
  → convertNonLatin(title)       // NEW: detect non-Latin letters → unidecode to ASCII
  → clearEmoji / slugify / url.QueryEscape / cutLongTitle (unchanged)
```

The non-Latin detector skips ASCII, Latin-1 Supplement, Latin
Extended-A/B, and CJK Han. Inputs that hit none of those non-Latin
letter categories short-circuit and return unchanged, so Latin-only and
Chinese-only inputs remain byte-identical (pinned by tests).

## Scope — what scripts are affected

This PR changes behavior for **any** title containing letters in scripts
that `slugify` doesn't handle. Confirmed by tests in
`pkg/htmltext/htmltext_test.go`:

| Script | Example title | Before | After |
| --- | --- | --- | --- |
| Arabic | `كيف حالك` | `topic` | `kyf-hlk` |
| Mixed Latin + Arabic | `مرحبا hello` | `hello` | `mrhb-hello` |
| Thai | `ไทย ไทย` | `topic` | `aithy-aithy` |
| Japanese hiragana | `こんにちは` | `topic` | `konnichiha` |
| Korean | `안녕하세요` | `topic` | `annyeonghaseyo` |
| Hebrew | `שלום עולם` | `topic` | `shlvm-vlm` |
| Cyrillic | `Привет мир` | `topic` | `privet-mir` |

**Unchanged:**

| Case | Behavior |
| --- | --- |
| Pure Latin (`hello world`) | unchanged → `hello-world` |
| Pure Chinese (`这是一个,标题,title`) | unchanged → `zhe-shi-yi-ge-biao-ti`
(pinyin path) |
| Japanese with Han-block kanji (`日本`) | unchanged → `ri-ben` (caught by
pre-existing pinyin path; treated as Chinese reading, not Japanese — a
pre-existing limitation, **not** introduced by this PR) |
| Emoji only (`😂😂😂`) | unchanged → `topic` |
| Empty / whitespace | unchanged → `topic` |

## Transliteration quality — explicit acknowledgement

`go-unidecode` is a generic Unicode → ASCII approximation. It is **not**
a per-language romanization library. Specifically:

- It will pick *one* approximation per codepoint regardless of language
context. `ใ` → `ai` (Thai romanization is `i` or `ai` depending on
standard), `한` → `han`, `語` → `Yu` (Chinese pinyin reading even when
used in Japanese), etc.
- The result is *good enough* to be a stable, URL-safe,
human-recognizable handle, but speakers of the source language will not
consider it "correct."
- It is deterministic, so the same title always produces the same slug —
important since `url_title` is recomputed on every request.

If maintainers prefer to scope this PR more narrowly (e.g. Arabic only,
and reject Thai/Hebrew/Cyrillic/etc.), the detector in
`containsNonLatin` can be tightened to specific Unicode blocks — but
that means the other scripts continue to collapse to `topic`, which is
the bug we're trying to fix. I'd argue the broader fix is preferable to
a piecemeal one, but happy to narrow if you want.

## Live deployment / real-world verification

This patch has been running in production on
**[ask.namasoft.com](https://ask.namasoft.com)** (an Apache Answer
instance we operate) since deployment, built directly from this branch
via `docker compose build`. The site hosts Arabic-language questions, so
the fix exercises the affected code path on every page load.

Sample question URL on the deployed instance:

> `https://ask.namasoft.com/questions/10010000000000115`

The slug in the URL is the transliterated Arabic title rather than
`topic`. No data migration was needed since `url_title` is computed on
every request from `Title` and never persisted (see *Why this is safe to
ship* below).

## Admin-configurable

The transliteration is gated by a package-level `atomic.Bool` (default
**on**, since the current behavior is objectively broken for affected
users):

- `htmltext.SetTransliterateNonLatin(enabled bool)`
- `htmltext.IsTransliterateNonLatinEnabled() bool`

This is deliberately the minimum surface needed to satisfy "the setting
must be readable from `UrlTitle()`". A follow-up PR can add an admin UI
section that calls `SetTransliterateNonLatin` on save and on startup,
without having to re-plumb every `htmltext.UrlTitle` call site through
`context.Context`.

**Default choice — please confirm:** I picked **default-on** because the
existing `topic` behavior is a bug for affected users. If you'd prefer
default-off for strict backward compat on existing installs, flip the
`init()` in `pkg/htmltext/htmltext.go` to `Store(false)` and surface the
toggle as opt-in.

## Why this is safe to ship

- `url_title` is **not** a persisted column. It's not on the `Question`
entity in `internal/entity/question_entity.go`, no migration has ever
added/dropped it, and every call site (`question_service.go`,
`revision_service.go`, `vote_service.go`,
search/report/review/rank/comment services, controllers, repos)
recomputes it from `Title` at response-build time via
`htmltext.UrlTitle(...)`.
- That means the fix is read-only: existing rows light up with correct
slugs on the next request, with no migration and no data rewrite.
- Rollback is just redeploying the prior image; nothing on disk changes.

## Test coverage

`pkg/htmltext/htmltext_test.go`:

- **`TestUrlTitleTable`** — table-driven, one case per affected script
(the full matrix above), plus:
  - `empty` → `topic`
  - `pure latin unchanged` → byte-identical to pre-fix
- `pure chinese unchanged` → byte-identical to pre-fix (pins existing
pinyin behavior)
- `japanese kanji goes through pinyin path unchanged` → documents the
pre-existing Han-block limitation
  - `emoji only falls back to topic` → unchanged
- `long arabic truncates at cutLongTitle boundary` → exercises the
150-byte cap and UTF-8 boundary safety
- **`TestUrlTitleTransliterationToggle`** — with the toggle off,
non-Latin titles collapse to `topic` (pre-fix behavior); with it on,
they transliterate.
- Existing `TestUrlTitle` left untouched.

Test plan for reviewers:

- [ ] `go test ./pkg/htmltext/...` — all pass
- [ ] Visit the live sample URL above and confirm slug is
transliterated, not `topic`
- [ ] Verify Chinese / Latin / emoji-only / empty behavior is
byte-identical to `main` (covered by table tests)

## Out of scope (intentionally)

- No admin UI / site setting plumbing in this PR — see
*Admin-configurable* above. Happy to do the React `Non-Latin Languages
Handling` admin page + `SiteType` + service / controller / migration in
a follow-up if maintainers want it.
- No change to the `"topic"` empty-result fallback.
- No plugin interface for slug generation — mirrored the existing
`convertChinese` pre-step pattern instead.
- No per-language romanization library — this is an explicit non-goal;
see *Transliteration quality* above.

## Issues / discussion

I didn't find an existing upstream issue covering this — happy to be
pointed at one if there is.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: LinkinStars <linkinstar@foxmail.com>
2026-07-10 10:19:39 +08:00
Luffy 4b8de1897b fix: update license entries 2026-07-10 10:19:39 +08:00
Luke Gao 09eaa5b7e3 feat: add reasoning content to AI conversation records and update related components (#1530)
Fix #1524 

Root cause

DeepSeek's reasoning models stream reasoning_content alongside content.
Answer ignored it, so follow-up requests failed with 400: The
reasoning_content in the thinking mode must be passed back to the API,
and the thinking text was never shown or saved.

Fix

- Capture reasoning_content from the stream and pass it back to theAPI
on subsequent rounds.
 - Persist it with the conversation (new DB column via migrationv2.0.2).
- Render it in the chat UI as a collapsible "Thinking…/Thoughts"panel
above the answer.

Compatibility

Nullable column, omitempty field, UI hides the panel when empty — old
conversations and non-reasoning models behave exactly as before.

Demo



https://github.com/user-attachments/assets/49b1a2a1-9133-4ac2-bbeb-860215a50285
2026-07-10 10:19:39 +08:00
LinkinStars 9df5853942 fix(tests): update goroutine handling in new question email worker tests 2026-07-07 19:32:24 +08:00
LinkinStars c17e0c94c8 fix(notification): remove buffer size parameter from new question email worker for test 2026-07-07 19:03:27 +08:00
Artur Iusupov b70dda997a fix(notification): make new question email queue configurable 2026-07-06 22:31:16 +08:00
Artur Iusupov d10e6aad70 fix(notification): move new question email throttling to worker 2026-07-06 22:31:16 +08:00
Artur Iusupov e1d58ab635 feat(notification): add interval for new question emails 2026-07-06 22:31:16 +08:00
Artur Iusupov 3b6f981b81 fix(site): require explicit email verification setting
Replace OptionalBool with an explicit require_email_verification value for the login settings save request while keeping legacy read defaults intact.

Use positive RequireEmailVerification naming through the registration flow and inline the site setting mapping.

Add validation, save-path, and registration coverage for the explicit email verification setting.
2026-06-15 14:44:34 +08:00
Artur Iusupov d93e31e92a feat(site): allow disabling email verification 2026-06-15 14:44:34 +08:00
hgaol 43a91313d8 fix: accept answer fails when short links enabled (#1541)
The ownership check added to AcceptAnswer compared the answer's QuestionID
against the request's QuestionID directly. When short links are enabled,
answerRepo.GetByID re-encodes QuestionID to its short form while the
controller de-shorts req.QuestionID to its long form, so the two encodings
of the same question never matched and every accept returned "Answer do not
found". Normalize both ids via uid.DeShortID before comparing, preserving the
privilege-escalation guard for answers that truly belong to another question.
2026-06-12 16:10:22 +08:00
hhc7 682811f769 fix: scope JSON 500 to API routes, skip rewriting already-flushed responses 2026-06-05 11:26:55 +08:00
hhc7 cece87f9dc feat: add recovery middleware to handle panic gracefully 2026-06-05 11:26:55 +08:00
Ahmed Qasid e884bb61cb fix: avoid topic fallback for non-Latin titles via pragmatic ASCII transliteration (#1526)
# fix: avoid `topic` fallback for non-Latin titles via pragmatic ASCII
transliteration

> **Scope update (in response to review):** this PR is intentionally
broader than its original "Arabic-only" framing. The implementation
changes URL slug generation for **every non-Latin, non-CJK script** that
`slugify` previously stripped — see *Scope* below for the explicit list.
The goal is *not* linguistically correct romanization; it is "avoid
collapsing to `/topic` by producing a usable ASCII slug."

## What this PR is (and isn't)

**Goal:** when a question title contains characters outside Basic Latin
/ Latin Extended / CJK Han, generate a URL slug that is a deterministic
ASCII approximation instead of letting `slugify` strip everything and
falling back to the literal `"topic"`.

**Non-goal:** this is *not* a linguistically correct multi-language
romanizer. The output is a machine-acceptable ASCII slug, not what a
native speaker would choose. For example, `こんにちは` → `konnichiha` (not
the more natural `kon'nichiwa`), `ไทย` → `aithy` (not `thai`). Treat the
slug as an opaque, stable, indexable identifier — the
path-after-`/questions/<id>/` is for SEO and shareability, the canonical
reference is always the ID.

## The bug

Pure non-Latin titles previously got stripped by `slugify.Slugify`, hit
the empty-result fallback in `htmltext.UrlTitle`, and collapsed to the
literal slug `"topic"`. On a live multilingual site, every Arabic / Thai
/ Japanese-hiragana / Korean / Hebrew / Cyrillic question ended up at
`/questions/<id>/topic`.

## The fix

`UrlTitle()` gets a `convertNonLatin` pre-step that mirrors the existing
`convertChinese` pre-step pattern, using
`github.com/mozillazg/go-unidecode` (same author as `go-pinyin` already
in the repo, to minimise new-dep friction).

```
UrlTitle(title)
  → convertChinese(title)        // pre-existing: Han-block → pinyin
  → convertNonLatin(title)       // NEW: detect non-Latin letters → unidecode to ASCII
  → clearEmoji / slugify / url.QueryEscape / cutLongTitle (unchanged)
```

The non-Latin detector skips ASCII, Latin-1 Supplement, Latin
Extended-A/B, and CJK Han. Inputs that hit none of those non-Latin
letter categories short-circuit and return unchanged, so Latin-only and
Chinese-only inputs remain byte-identical (pinned by tests).

## Scope — what scripts are affected

This PR changes behavior for **any** title containing letters in scripts
that `slugify` doesn't handle. Confirmed by tests in
`pkg/htmltext/htmltext_test.go`:

| Script | Example title | Before | After |
| --- | --- | --- | --- |
| Arabic | `كيف حالك` | `topic` | `kyf-hlk` |
| Mixed Latin + Arabic | `مرحبا hello` | `hello` | `mrhb-hello` |
| Thai | `ไทย ไทย` | `topic` | `aithy-aithy` |
| Japanese hiragana | `こんにちは` | `topic` | `konnichiha` |
| Korean | `안녕하세요` | `topic` | `annyeonghaseyo` |
| Hebrew | `שלום עולם` | `topic` | `shlvm-vlm` |
| Cyrillic | `Привет мир` | `topic` | `privet-mir` |

**Unchanged:**

| Case | Behavior |
| --- | --- |
| Pure Latin (`hello world`) | unchanged → `hello-world` |
| Pure Chinese (`这是一个,标题,title`) | unchanged → `zhe-shi-yi-ge-biao-ti`
(pinyin path) |
| Japanese with Han-block kanji (`日本`) | unchanged → `ri-ben` (caught by
pre-existing pinyin path; treated as Chinese reading, not Japanese — a
pre-existing limitation, **not** introduced by this PR) |
| Emoji only (`😂😂😂`) | unchanged → `topic` |
| Empty / whitespace | unchanged → `topic` |

## Transliteration quality — explicit acknowledgement

`go-unidecode` is a generic Unicode → ASCII approximation. It is **not**
a per-language romanization library. Specifically:

- It will pick *one* approximation per codepoint regardless of language
context. `ใ` → `ai` (Thai romanization is `i` or `ai` depending on
standard), `한` → `han`, `語` → `Yu` (Chinese pinyin reading even when
used in Japanese), etc.
- The result is *good enough* to be a stable, URL-safe,
human-recognizable handle, but speakers of the source language will not
consider it "correct."
- It is deterministic, so the same title always produces the same slug —
important since `url_title` is recomputed on every request.

If maintainers prefer to scope this PR more narrowly (e.g. Arabic only,
and reject Thai/Hebrew/Cyrillic/etc.), the detector in
`containsNonLatin` can be tightened to specific Unicode blocks — but
that means the other scripts continue to collapse to `topic`, which is
the bug we're trying to fix. I'd argue the broader fix is preferable to
a piecemeal one, but happy to narrow if you want.

## Live deployment / real-world verification

This patch has been running in production on
**[ask.namasoft.com](https://ask.namasoft.com)** (an Apache Answer
instance we operate) since deployment, built directly from this branch
via `docker compose build`. The site hosts Arabic-language questions, so
the fix exercises the affected code path on every page load.

Sample question URL on the deployed instance:

> `https://ask.namasoft.com/questions/10010000000000115`

The slug in the URL is the transliterated Arabic title rather than
`topic`. No data migration was needed since `url_title` is computed on
every request from `Title` and never persisted (see *Why this is safe to
ship* below).

## Admin-configurable

The transliteration is gated by a package-level `atomic.Bool` (default
**on**, since the current behavior is objectively broken for affected
users):

- `htmltext.SetTransliterateNonLatin(enabled bool)`
- `htmltext.IsTransliterateNonLatinEnabled() bool`

This is deliberately the minimum surface needed to satisfy "the setting
must be readable from `UrlTitle()`". A follow-up PR can add an admin UI
section that calls `SetTransliterateNonLatin` on save and on startup,
without having to re-plumb every `htmltext.UrlTitle` call site through
`context.Context`.

**Default choice — please confirm:** I picked **default-on** because the
existing `topic` behavior is a bug for affected users. If you'd prefer
default-off for strict backward compat on existing installs, flip the
`init()` in `pkg/htmltext/htmltext.go` to `Store(false)` and surface the
toggle as opt-in.

## Why this is safe to ship

- `url_title` is **not** a persisted column. It's not on the `Question`
entity in `internal/entity/question_entity.go`, no migration has ever
added/dropped it, and every call site (`question_service.go`,
`revision_service.go`, `vote_service.go`,
search/report/review/rank/comment services, controllers, repos)
recomputes it from `Title` at response-build time via
`htmltext.UrlTitle(...)`.
- That means the fix is read-only: existing rows light up with correct
slugs on the next request, with no migration and no data rewrite.
- Rollback is just redeploying the prior image; nothing on disk changes.

## Test coverage

`pkg/htmltext/htmltext_test.go`:

- **`TestUrlTitleTable`** — table-driven, one case per affected script
(the full matrix above), plus:
  - `empty` → `topic`
  - `pure latin unchanged` → byte-identical to pre-fix
- `pure chinese unchanged` → byte-identical to pre-fix (pins existing
pinyin behavior)
- `japanese kanji goes through pinyin path unchanged` → documents the
pre-existing Han-block limitation
  - `emoji only falls back to topic` → unchanged
- `long arabic truncates at cutLongTitle boundary` → exercises the
150-byte cap and UTF-8 boundary safety
- **`TestUrlTitleTransliterationToggle`** — with the toggle off,
non-Latin titles collapse to `topic` (pre-fix behavior); with it on,
they transliterate.
- Existing `TestUrlTitle` left untouched.

Test plan for reviewers:

- [ ] `go test ./pkg/htmltext/...` — all pass
- [ ] Visit the live sample URL above and confirm slug is
transliterated, not `topic`
- [ ] Verify Chinese / Latin / emoji-only / empty behavior is
byte-identical to `main` (covered by table tests)

## Out of scope (intentionally)

- No admin UI / site setting plumbing in this PR — see
*Admin-configurable* above. Happy to do the React `Non-Latin Languages
Handling` admin page + `SiteType` + service / controller / migration in
a follow-up if maintainers want it.
- No change to the `"topic"` empty-result fallback.
- No plugin interface for slug generation — mirrored the existing
`convertChinese` pre-step pattern instead.
- No per-language romanization library — this is an explicit non-goal;
see *Transliteration quality* above.

## Issues / discussion

I didn't find an existing upstream issue covering this — happy to be
pointed at one if there is.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: LinkinStars <linkinstar@foxmail.com>
2026-06-03 22:06:26 +08:00
Luffy 68085ab742 fix: update license entries 2026-06-03 22:03:58 +08:00
Luke Gao 7c210a4855 feat: add reasoning content to AI conversation records and update related components (#1530)
Fix #1524 

Root cause

DeepSeek's reasoning models stream reasoning_content alongside content.
Answer ignored it, so follow-up requests failed with 400: The
reasoning_content in the thinking mode must be passed back to the API,
and the thinking text was never shown or saved.

Fix

- Capture reasoning_content from the stream and pass it back to theAPI
on subsequent rounds.
 - Persist it with the conversation (new DB column via migrationv2.0.2).
- Render it in the chat UI as a collapsible "Thinking…/Thoughts"panel
above the answer.

Compatibility

Nullable column, omitempty field, UI hides the panel when empty — old
conversations and non-reasoning models behave exactly as before.

Demo



https://github.com/user-attachments/assets/49b1a2a1-9133-4ac2-bbeb-860215a50285
2026-05-30 15:33:54 +08:00
robin 2746bf5b45 fix: update copyright year to 2026
Build Latest Docker Image For Release / build (push) Has been cancelled
Lint / Lint (ubuntu-latest) (push) Has been cancelled
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-25 10:46:54 +08:00
Luffy f9941827b1 fix: missing uuid license 2026-05-25 10:38:59 +08:00
LinkinStars 48b4622aca chore: update Docker actions to specific versions for consistency
Lint / Lint (ubuntu-latest) (push) Has been cancelled
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
2026-05-20 14:27:00 +08:00
LinkinStars 2a442d333c chore: update Docker actions to latest versions for improved stability 2026-05-20 14:27:00 +08:00
LinkinStars 84204a718a chore: update GitHub Actions to use latest versions of setup actions 2026-05-20 14:27:00 +08:00
LinkinStars 5be5c84a26 chore: update version to 2.0.1 2026-05-20 11:29:14 +08:00
LinkinStars a218924ba0 Merge remote-tracking branch 'origin/dev' into test 2026-05-20 11:20:08 +08:00
robin 316417961a fix: attachment upload broken after v2.0.0 upgrade (#1525)
- base.ts: add replaceRange method to CodeMirror adapter
- file.tsx: use replaceSelection to insert loading text (fixes RangeError)
- file.tsx: use useState/useEffect for stable editorState reference in async callbacks

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-19 10:15:36 +08:00
LinkinStars b1da65fbe4 Merge remote-tracking branch 'origin/fix/2.0.1/chat' into test 2026-05-11 12:16:58 +08:00
LinkinStars 0aca063077 Merge remote-tracking branch 'origin/dev' into test 2026-05-11 12:16:49 +08:00
LinkinStars 11091244f6 fix(user): enhance avatar validation by adding checks for custom avatars and file ownership 2026-05-11 12:05:18 +08:00
LinkinStars d1a4092c61 fix(email): enhance email templates by escaping HTML characters in dynamic content 2026-05-09 16:07:09 +08:00
LinkinStars 11c80384f1 fix(chat): enhance visibility checks by adding admin moderator support in answer and comment services 2026-05-09 15:13:50 +08:00
Herrtian ab236f2d6a fix(helm): keep install port aligned with service port
Signed-off-by: Tian Teng <tian.teng@emerson.com>
2026-05-08 20:09:04 +08:00
LinkinStars 97924574c4 Merge remote-tracking branch 'origin/dev' into test 2026-05-08 19:58:22 +08:00
hgaol e3831b6f52 refactor: streamline plugin initialization by removing redundant search syncer registration 2026-05-08 19:57:19 +08:00
hgaol c93f3bc5c3 refactor: simplify SaveSiteAI method by removing unnecessary error handling 2026-05-08 19:57:19 +08:00
hgaol 278fdfd8c3 refactor: rename UpdateSearch to updateSearch for consistency 2026-05-08 19:57:19 +08:00
hgaol 2836d0ea81 chore: add Apache License header to multiple files 2026-05-08 19:57:19 +08:00
hgaol ac7bdda074 fix lint 2026-05-08 19:57:19 +08:00
hgaol 057679a2bf refactor: remove unused build-local-vector-plugins target and delete VECTOR_SEARCH_DESIGN.md 2026-05-08 19:57:19 +08:00
hgaol 5d923f8ca3 feat: add vector sync service and integrate with answer and question services 2026-05-08 19:57:19 +08:00
hgaol 7d0714dd1a fix lint 2026-05-08 19:57:19 +08:00
hgaol 8dd55af6cd fix lint 2026-05-08 19:57:19 +08:00
hgaol 22c2a5c276 feat: implement vector search plugin and syncer for question/answer embeddings
- Added a new vector search syncer to aggregate questions and answers with comments for vector embedding.
- Introduced a new VectorSearch interface and related structures for managing vector storage and similarity search.
- Refactored embedding service to delegate semantic search to the new vector search plugin.
- Removed embedding-related fields from SiteAIProvider and UI forms as part of the transition to the new vector search architecture.
- Updated plugin registration to include vector search capabilities.
- Cleaned up embedding service methods and removed unused dependencies.
2026-05-08 19:57:19 +08:00
hgaol f346bcc8fa update init tables 2026-05-08 19:57:19 +08:00
hgaol dc71f4a292 fix lint issue 2026-05-08 19:57:19 +08:00
hgaol dea18f997c feat: support semantic search in AI chat and embedding ability 2026-05-08 19:57:19 +08:00
hgaol 71d11b6205 fix: resolve local plugin paths to absolute and enhance module replacement logic 2026-04-15 19:43:57 +08:00
LinkinStars 9da00a807d fix(build): enhance module replacement handling for v2+ versions and implement local cloning 2026-04-15 16:15:13 +08:00
LinkinStars cfc3e54f30 fix(image): enhance image decoding by implementing format-specific checks for JPEG, PNG, and GIF 2026-03-25 19:31:31 +08:00
LinkinStars 2dbe594da2 fix(short_id): enhance GetEnableShortID to support gin context for short ID flag retrieval 2026-03-04 12:04:52 +08:00
LinkinStars 36b548140e Merge remote-tracking branch 'origin/dev' into test 2026-03-03 12:17:41 +08:00
LinkinStars 3c5c47b91b Merge remote-tracking branch 'origin/fix/2.0.1/chat' into test 2026-03-03 12:17:36 +08:00
LinkinStars 6fc25c69f4 fix(auth): add API key scope checks to enhance authorization security 2026-03-03 12:17:20 +08:00
maishivamhoo123 ff997cb014 fix: update migration version to v2.0.1 and remove default value for TEXT column 2026-03-02 17:37:43 +08:00
maishivamhoo123 09599e4c20 style: apply gofmt formatting 2026-03-02 17:37:43 +08:00
maishivamhoo123 844c73cd7f fix: change avatar column type to TEXT to support long URLs 2026-03-02 17:37:43 +08:00
MakiWinster d6cb1b119f fix: update bubble user background color for dark mode 2026-03-02 16:14:07 +08:00
MakiWinster 52880f9d5a fix: update bubble user background color for dark mode 2026-03-02 16:14:07 +08:00
LinkinStars 659d1f6ad9 Merge remote-tracking branch 'origin/fix/2.0.1/chat' into test 2026-02-09 23:36:02 +08:00
LinkinStars 7952075ce5 fix: normalize ObjectID and CommentID in comment requests 2026-02-09 23:35:17 +08:00
LinkinStars 52d057ef18 fix: add ID validation and normalization functions for comment handling 2026-02-09 20:27:37 +08:00
LinkinStars 869b040e92 fix(auth): enhance admin user cache management and add status checks for email verification and suspension 2026-02-06 20:31:54 +08:00
LinkinStars 0db88d63e3 fix(chat): implement HTML rendering for display content 2026-02-06 18:07:52 +08:00
LinkinStars 92994b4997 fix: add IsAdminModerator field to request structs and implement visibility checks for timeline objects 2026-02-06 15:32:45 +08:00
LinkinStars 638fb082c5 fix: enhance bracket handling in formatting and add concurrency test for internationalization 2026-02-05 16:17:32 +08:00
kumfo fca80abbaf fix: correct variable name in JSON unmarshal for site general information 2026-02-03 11:07:48 +08:00
LinkinStars a6bfd402b6 fix: update AI provider configuration ID in default settings
Build Latest Docker Image For Release / build (push) Has been cancelled
Lint / Lint (ubuntu-latest) (push) Has been cancelled
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
2026-01-29 17:02:43 +08:00
LinkinStars a55b4c65d2 fix: update Russian translation for unlist post title 2026-01-29 17:02:43 +08:00
LinkinStars 5ec9d8b623 fix: add AI provider configuration to initialization data 2026-01-29 17:02:43 +08:00
shuai ff6b5736c3 fix: admin users-setting page title should be users 2026-01-29 17:02:15 +08:00
LinkinStars d47d7cc452 fix: update Indonesian and Russian translations for tag creation and appreciation 2026-01-29 16:50:25 +08:00
LinkinStars 90022ce039 fix: integrate API key authentication into existing services and routes 2026-01-29 16:50:25 +08:00
shuai 50a96809d8 fix: Installation of the fourth part of form validation error 2026-01-29 16:50:25 +08:00
LinkinStars a08c124748 fix: update translations for Czech, Indonesian, and Russian languages
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
Lint / Lint (ubuntu-latest) (push) Has been cancelled
2026-01-29 12:28:40 +08:00
LinkinStars b522a168e3 feat: add GetConfigByKeyFromDB method to retrieve config directly 2026-01-29 11:15:38 +08:00
LinkinStars e5cb38bd74 chore: add license files and update Go version to 1.24.0 2026-01-28 17:30:31 +08:00
LinkinStars 7dfb8b320e New translations (#1486)
Co-authored-by: Sunny <1147886+sunshineg@users.noreply.github.com>
2026-01-28 16:24:27 +08:00
LinkinStars 34c1e8a38a docs(Makefile): upgrade version to 2.0.0
Lint / Lint (ubuntu-latest) (push) Has been cancelled
2026-01-28 15:45:39 +08:00
LinkinStars 4fd96675f3 fix: improve Brotli compression handling and validate user input in vote status 2026-01-28 12:11:28 +08:00
LinkinStars a5edc4fc01 feat: add advanced site settings and related API endpoints 2026-01-28 11:15:40 +08:00
LinkinStars 2a99d234ea Merge remote-tracking branch 'origin/feat/1.8.0/new-cp-fe' into test
# Conflicts:
#	docs/docs.go
#	docs/swagger.json
#	docs/swagger.yaml
#	internal/base/constant/site_type.go
#	internal/controller/ai_controller.go
#	internal/controller/siteinfo_controller.go
#	internal/migrations/migrations.go
#	internal/schema/siteinfo_schema.go
#	internal/service/mock/siteinfo_repo_mock.go
2026-01-28 11:13:44 +08:00
LinkinStars 8b61cad014 fix(lint): resolve the lint issue 2026-01-27 17:49:29 +08:00
LinkinStars bdd1949a96 Merge remote-tracking branch 'origin/dev' into test
# Conflicts:
#	go.mod
#	internal/base/translator/provider.go
2026-01-27 17:39:45 +08:00
LinkinStars 9ea13af860 feat(revision): enhance revision management with object status handling 2026-01-27 17:38:47 +08:00
ferhat elmas b83d0214c7 feat(ci): add lint action
related to #1432

Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2026-01-27 16:08:00 +08:00
shuai ef54781b77 fix: mcp menu moved to ai assistant 2026-01-26 14:29:20 +08:00
shuai cc1567ac4b fix: Fix incorrect default value when the input type is number in SchemeForm. 2026-01-26 14:25:25 +08:00
LinkinStars f403eadb2c feat: add AI conversation management endpoints and update related schemas 2026-01-23 17:28:19 +08:00
LinkinStars 94c030829d fix: correct loop iteration in AI conversation rounds 2026-01-23 17:25:46 +08:00
LinkinStars ce5aadf30d feat: add AI configuration support with related controllers and services 2026-01-23 17:25:42 +08:00
LinkinStars 9fbf9e4ff4 fix: correct loop iteration in AI conversation rounds 2026-01-23 17:22:13 +08:00
dashuai dc7f752128 Support AI Assistant and MCP functions (#1477)
1. Add AI assistant-related business. 
2. Add Mcp related configuration in the management background
2026-01-23 17:12:26 +08:00
LinkinStars c1549d2909 feat: add AI configuration support with related controllers and services 2026-01-23 17:09:05 +08:00
kumfo c509723f29 feat(docs): add layout property with enum options to schema definitions 2026-01-22 15:14:01 +08:00
shuai 06e9d437e0 fix: Changes in the editor content will reset the values of other form fields. 2026-01-22 15:13:23 +08:00
shuai 2d02452e17 fix: Changes in the editor content will reset the values of other form fields. 2026-01-22 14:50:53 +08:00
dashuai 630ac20a38 Management Backend Menu and Function Adjustments (#1474)
…ent, regardless of functional split or reorganization
2026-01-22 14:07:30 +08:00
kumfo f3dddfeb0e Merge remote-tracking branch 'origin/feat/1.8.0/menu' into feat/1.8.0/menu 2026-01-22 12:28:35 +08:00
kumfo 86c2d64dbf feat(docs): add Apache License 2.0 header to docs.go and swagger.yaml 2026-01-22 12:25:37 +08:00
kumfo 73cfbace70 feat(menu): deprecate default_avatar and gravatar_base_url in SiteInterfaceReq schema 2026-01-22 12:25:37 +08:00
kumfo 18b76f3e23 feat(siteinfo): add site_security to response structure and update related schemas 2026-01-22 12:25:37 +08:00
kumfo 6369056914 feat(siteinfo): fix GetSiteTag method to correctly assign response from siteInfoCommonService 2026-01-22 12:25:37 +08:00
kumfo 128c44f5a3 feat(menu): update schema to remove deprecated min_tags and add MinimumTags to SiteQuestionsReq 2026-01-22 12:25:37 +08:00
kumfo 3264fdd1d9 feat(siteinfo): refactor site legal and security settings to use new policies and security endpoints 2026-01-22 12:25:37 +08:00
kumfo c2a0bee7dc feat(siteinfo): add users settings endpoint and update interface settings structure 2026-01-22 12:25:37 +08:00
kumfo 9efa9471bd feat(menu): update admin menu settings to include questions, tags, and advanced options 2026-01-22 12:25:37 +08:00
kumfo f05f1eb80d feat(menu): update admin menu settings to include questions, tags, and advanced options 2026-01-22 12:25:32 +08:00
kumfo d65e257f92 feat(docs): add Apache License 2.0 header to wire_gen.go 2026-01-22 12:21:02 +08:00
kumfo 8b8550e9ca feat(docs): add Apache License 2.0 header to docs.go and swagger.yaml 2026-01-22 12:18:57 +08:00
kumfo 81511e386a feat(menu): deprecate default_avatar and gravatar_base_url in SiteInterfaceReq schema 2026-01-22 11:49:50 +08:00
kumfo 60f8cd1803 feat(siteinfo): add site_security to response structure and update related schemas 2026-01-22 10:59:28 +08:00
kumfo 0bb33e7ea4 feat(siteinfo): fix GetSiteTag method to correctly assign response from siteInfoCommonService 2026-01-21 17:21:28 +08:00
kumfo 94de21361e feat(menu): update schema to remove deprecated min_tags and add MinimumTags to SiteQuestionsReq 2026-01-21 16:29:08 +08:00
kumfo f0636d4369 feat(siteinfo): refactor site legal and security settings to use new policies and security endpoints 2026-01-21 16:06:17 +08:00
kumfo 0d7979e901 feat(siteinfo): add users settings endpoint and update interface settings structure 2026-01-21 09:39:37 +08:00
kumfo 3cd3e4a888 feat(menu): update admin menu settings to include questions, tags, and advanced options 2026-01-20 15:32:45 +08:00
kumfo 29ec29bde7 feat(menu): update admin menu settings to include questions, tags, and advanced options 2026-01-20 14:54:52 +08:00
LinkinStars 6b834c745a Merge remote-tracking branch 'origin/dev' into test 2026-01-14 11:31:17 +08:00
LinkinStars 5be6ec9e71 docs(lic): add MIT license file and clean up init function in install_main.go 2026-01-14 11:30:50 +08:00
maishivamhoo123 3d5465334c fix: added the init fuction in install_main.go 2026-01-14 11:26:00 +08:00
maishivamhoo123 f6d30a5b57 chore: revert documentation changes in README 2026-01-14 11:26:00 +08:00
maishivamhoo123 d773b86906 fix: remove unrelated generated files 2026-01-14 11:26:00 +08:00
maishivamhoo123 1fbb802e8f feat: load optional .env file and add .env.example 2026-01-14 11:26:00 +08:00
ferhat elmas 5ff6106d37 fix: address comments and add a test
Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2026-01-14 11:22:53 +08:00
ferhat elmas 26d868b123 refactor(queue): improve queues
* fix race condition for registering handler
* add close method
* use generics to reduce duplication
* rename packages to drop underscore for go convention
* rename interface to drop stutter with package name

Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2026-01-14 11:22:53 +08:00
shuai d7d692bb37 fix: Fixed-layout navigation aligns with the width of the main content. 2025-12-31 15:37:38 +08:00
LinkinStars d5c07f18ad Merge remote-tracking branch 'origin/dev' into test 2025-12-29 14:45:52 +08:00
Yusuke Tanaka a1f0b0963b fix: update migration version from v1.7.1 to v1.7.2 2025-12-29 10:28:27 +08:00
Yusuke Tanaka 57f31ec7eb fix: expand avatar column length from 1024 to 2048
The avatar column was too short to store long URLs from external OAuth
providers. When users log in via connector-google plugin, the Google
profile picture URL can exceed 1024 characters, causing a database error:

  Error 1406 (22001): Data too long for column 'avatar' at row 1

This change expands the avatar column from VARCHAR(1024) to VARCHAR(2048).

Note: While URLs can technically exceed 2048 characters per specification,
2048 is the practical limit supported by most browsers and services.
URLs longer than 2048 characters are extremely rare in real-world usage.
2025-12-29 10:28:27 +08:00
Douglas Cortez c8908b7b34 fix(review): notifications from the specific external system will take precedence 2025-12-29 10:27:00 +08:00
Douglas Cortez 42f8947e7c fix(notification): use SSO provider for external_id lookup in notifications 2025-12-29 10:27:00 +08:00
liqiang46 61d9bf34d3 修复最佳评论越权问题
在AcceptAnswer方法中添加了安全检查,确保要设置为最佳答案的回答确实属于该问题。
这可以防止攻击者将其他问题的回答设置为当前问题的最佳答案。

安全问题:越权设置最佳评论
修复方法:验证acceptedAnswerInfo.QuestionID == req.QuestionID
2025-12-29 10:24:01 +08:00
LinkinStars 9e236f65a3 Merge remote-tracking branch 'origin/feat/1.7.2/ui' into test 2025-12-25 12:03:42 +08:00
robin 762e8a739d fix(gitignore): correct node_modules entry and remove specific plugin exceptions 2025-12-25 11:51:14 +08:00
robin 78714e83cf feat(editor): implement image upload functionality with validation and hooks 2025-12-25 11:50:55 +08:00
robin aa7e19b896 Remove TipTap editor utility files including commands, constants, error handling, events, position conversion, and table extension to streamline the editor's functionality and reduce code complexity. 2025-12-22 18:25:42 +08:00
shuai cf7f601cb0 Merge branch 'test' of github.com:apache/answer into test 2025-12-22 17:29:31 +08:00
shuai c8881889c8 fix: admin.themes layout initial value 2025-12-22 17:29:17 +08:00
LinkinStars 462931a309 Merge remote-tracking branch 'origin/feat/1.7.2/layout' into test 2025-12-22 15:30:07 +08:00
shuai f92d3a3481 fix: update zh_CN.ymal content 2025-12-19 15:45:19 +08:00
shuai 92d853ce3c fix: add i18n 2025-12-19 14:14:37 +08:00
shuai 2ae309abc3 fix: delete log 2025-12-19 14:11:42 +08:00
shuai b5ae2d0351 fix: admin/themes add layout config 2025-12-19 14:09:38 +08:00
LinkinStars d3a29e7ad9 feat(theme): add layout options for site theme configuration 2025-12-19 12:23:55 +08:00
robin 0bad2c7249 chore(dependencies): update TipTap packages to version 3.13.0
- Upgraded all TipTap related dependencies in package.json and pnpm-lock.yaml to version 3.13.0 for improved functionality and compatibility.
- Ensured consistent versioning across all TipTap extensions and core packages.
2025-12-18 10:46:36 +08:00
robin 1c2c733190 feat(editor): enhance plugin system and improve command methods
- Introduced PluginSlot component for better plugin insertion in the editor.
- Updated MDEditor to default to 'markdown' mode for improved user experience.
- Refactored command methods in TipTap to use chaining for better selection handling.
- Enhanced PluginRender to load plugins asynchronously and prevent duplicate registrations.
2025-12-18 10:43:59 +08:00
robin ffa8dc2bb8 feat(editor): update TipTap dependencies and enhance table functionality
- Added @tiptap/core version 3.13.0 to package.json and updated related dependencies in pnpm-lock.yaml.
- Refactored RichEditor to utilize new table extension with responsive wrapper and improved styling.
- Adjusted editor mode initialization in MDEditor to default to 'rich' for enhanced user experience.
- Removed redundant styles from index.scss to streamline the editor's appearance.
2025-12-17 14:20:09 +08:00
robin 7a4b57d1ff refactor(editor): improve editor component functionality and code clarity
- Updated ToolItem component to ensure consistent return type for command functions.
- Modified heading toolbar to allow optional label parameter in handleClick function.
- Enhanced image component comments for clarity on editor state updates and event listener management.
- Cleaned up utility functions in htmlRender to remove unnecessary comments and improve readability.
2025-12-17 10:50:36 +08:00
robin d87726bd6e refactor(editor): enhance editor components with base props and initialization logic
- Introduced BaseEditorProps interface to standardize props across MarkdownEditor and RichEditor components.
- Improved initialization logic in RichEditor and MarkdownEditor to handle editor state more effectively.
- Updated useEditor hook to support initial values and prevent unnecessary updates during prop changes.
- Refactored command methods to utilize dispatch for state changes in CodeMirror editor.
2025-12-17 10:38:31 +08:00
robin 498c142198 feat(editor): rename WYSIWYG editor to Rich editor and implement new RichEditor component
- Updated the editor mode from WYSIWYG to Rich in the MDEditor component.
- Introduced a new RichEditor component utilizing TipTap for enhanced editing capabilities.
- Adjusted styles and references in the editor components to reflect the new naming convention.
2025-12-16 15:07:29 +08:00
robin 3d43700556 refactor(editor): streamline editor component structure and enhance command methods
- Removed unnecessary conditional rendering in the MDEditor component for the PluginRender.
- Simplified the MarkdownEditor component's useEffect hooks for better clarity.
- Refactored command methods to utilize self-referencing for improved maintainability.
2025-12-16 14:50:29 +08:00
robin 762773cedb chore: clean up pnpm-lock.yaml by removing unused dependencies and updating existing ones 2025-12-16 14:50:19 +08:00
Gregorius Bima Kharisma Wicaksana c2a62804b0 fix: add feedback after successfully adding a user in admin panel (#1462)
## Summary
- Show success toast notification after user is added
- Refresh user list and navigate to 'normal' filter on page 1 to display
the newly added user

## Problem
When adding a user in Admin -> Users, the page had no feedback after
submission (as reported in #1457).

**Root cause:** The code only refreshed the user list if the current
filter was "all" or "staff", but the default filter is "normal".
Additionally, there was no success toast notification.

## Solution
1. Added toast notification to confirm successful user creation
2. After adding user, navigate to "normal" filter page 1 and refresh the
list so the new user is visible

## Test plan
1. Go to Admin -> Users
2. Click "Add User"
3. Submit user information
4.  Success toast should appear
5.  Page should navigate to "normal" filter
6.  Newly added user should be visible in the list

Fixes #1457

---------

Co-authored-by: LinkinStars <linkinstar@foxmail.com>
2025-12-16 14:43:21 +08:00
robin 9ef55ca07c feat(editor): integrate TipTap WYSIWYG editor with Markdown support and enhance editor functionalities
- Added TipTap extensions for image, placeholder, table, and markdown support.
- Implemented WYSIWYG and Markdown editor components.
- Refactored editor context and tool items to utilize the new editor interface.
- Updated styles for the WYSIWYG editor.
- Removed deprecated utility functions and integrated new command methods for better editor interaction.
2025-12-16 11:08:48 +08:00
LinkinStars 3000e3aec0 Fix/translation (#1460)
Build Latest Docker Image For Release / build (push) Has been cancelled
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
2025-12-15 15:48:45 +08:00
LinkinStars 59408774fb fix(lang): correct translations in Polish and Turkish language files 2025-12-15 15:10:10 +08:00
LinkinStars e35b955159 fix(lang): enhance language retrieval from gin context 2025-12-15 12:34:42 +08:00
LinkinStars 3ddec99837 Merge remote-tracking branch 'origin/main' into dev
# Conflicts:
#	i18n/pl_PL.yaml
#	i18n/tr_TR.yaml
2025-12-11 15:12:43 +08:00
LinkinStars fbb877ab11 fix(translator): enhance error reporting for invalid translator YAML files 2025-12-11 14:23:17 +08:00
LinkinStars 216786a6de New translations (#1456)
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
Co-authored-by: Sunny <1147886+sunshineg@users.noreply.github.com>
2025-12-11 14:14:06 +08:00
LinkinStars dd836497e3 style(sideNav): update ASF header 2025-12-11 11:47:53 +08:00
LinkinStars 8412ccdc12 docs(Makefile): upgrade version to 1.7.1 2025-12-11 11:47:53 +08:00
liruohrh 8f5c164e38 feat: add env for glob load template files by gin debug render 2025-12-11 11:47:53 +08:00
Burak Tekin c82f0a4fdd chore: turkish translation improved (#1454)
turkish translations improved

Co-authored-by: dashuai <lishuailing@sifou.com>
2025-12-11 11:47:53 +08:00
joaoback f5600865e0 Update pt_BR.yaml
Translations of items that had not yet been translated. Adjustments to translations already made.
2025-12-11 11:47:53 +08:00
kinjelom 82a1127c64 Polish translation 2025-12-11 11:47:53 +08:00
liruohrh 0065e355aa fix: get right lang 2025-12-11 11:47:53 +08:00
Krypt0n123 bf2127dbd0 fix: add missing revision data for default content (fixes #1436) 2025-12-11 11:47:53 +08:00
shuai 5fa638a3e1 fix: The page tag selector exceeds the page height, causing the page to scroll. 2025-12-11 11:47:53 +08:00
ferhat elmas e1255373cb refactor(lint): add new linters and fix their issues
* gocritic
* misspell
* modernize (aside, bumping go would be nice)
* testifylint
* unconvert
* unparam
* whitespace

related to #1432

Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-12-11 11:47:53 +08:00
LinkinStars 4950009248 refactor(lint): improve error handling and code consistency across multiple files 2025-12-11 11:47:53 +08:00
LinkinStars 62e765f70a refactor(goimports): add goimports to golangci-lint configuration #1432 2025-12-11 11:47:53 +08:00
ferhat elmas 74654f2703 feat: add golangci-lint into lint target
* replace empty interface with any
* run fmt via golangci-lint

related to #1432

Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-12-11 11:47:53 +08:00
shuai 92de2ef16f fix: When the input box's type is set to number, the result is forcibly converted to the number type. #1425 2025-12-11 11:47:53 +08:00
shuai bb60dca5eb fix: footer layout adjustment 2025-12-11 11:47:53 +08:00
shuai 480474d7be fix: footer layout adjustment 2025-12-11 11:47:53 +08:00
LinkinStars d15d55abe3 fix(answer): update QuestionID handling in answer update process 2025-12-11 11:47:53 +08:00
ferhat elmas 2b64983464 chore(deps): bump mockgen to 0.6.0 for go1.25 support
Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-12-11 11:47:53 +08:00
ferhat elmas c0a9f3155a fix(ui): null pointer access if get branding fails
Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-12-11 11:47:53 +08:00
ferhat elmas f86e98167f fix: multi byte run boundary for cut long title
Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-12-11 11:47:53 +08:00
ferhat elmas 9b64d7d64d refactor(internal): compile regex once while clearing text
Regex and Replacer can be reused.
No need to recreate for each invocation.

Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-12-11 11:47:53 +08:00
LinkinStars 4609e200ae fix(comment): decode CommentID using DeShortID for consistency 2025-12-11 11:47:53 +08:00
LinkinStars 8b739c5a59 fix(service): set default language to "en_US" if invalid language is provided 2025-12-11 11:47:53 +08:00
Dinesht04 27cd77358c fix(ui): refactor number input props (min,max) 2025-12-11 11:47:53 +08:00
Dinesht04 1418745b00 feat(ui): add types, logic and defaults for min, max value of input component of form 2025-12-11 11:47:53 +08:00
Dinesht04 9bb87bf8d6 feat(ui): add min values for inputs and context-based keyboards for inputs 2025-12-11 11:47:53 +08:00
shuai 59df184bab fix: Optimization of request parameters 2025-12-11 11:47:53 +08:00
shuai 7a1c96d2cb fix: fix the issue where the comment_id parameter is forcibly converted to a string, causing a 500 error in the PostgreSQL database interface. #1426 2025-12-11 11:47:53 +08:00
liruohrh d468e2ba8d feat: add env for glob load template files by gin debug render 2025-12-11 10:49:32 +08:00
Burak Tekin 57ba299543 chore: turkish translation improved (#1454)
turkish translations improved

Co-authored-by: dashuai <lishuailing@sifou.com>
2025-12-11 09:42:21 +08:00
joaoback 48b1de8314 Update pt_BR.yaml
Translations of items that had not yet been translated. Adjustments to translations already made.
2025-12-10 11:58:27 +08:00
kinjelom 8e395d421e Polish translation 2025-12-10 11:52:42 +08:00
liruohrh 740ac61bb2 fix: get right lang 2025-12-08 20:06:18 +08:00
Krypt0n123 6660cdf6e2 fix: add missing revision data for default content (fixes #1436) 2025-12-08 20:04:53 +08:00
ferhat elmas 670aa32325 refactor(lint): add new linters and fix their issues
* gocritic
* misspell
* modernize (aside, bumping go would be nice)
* testifylint
* unconvert
* unparam
* whitespace

related to #1432

Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-12-05 10:45:55 +08:00
LinkinStars 5e705a124b refactor(lint): improve error handling and code consistency across multiple files 2025-12-01 12:27:25 +08:00
LinkinStars 9540ef6005 refactor(goimports): add goimports to golangci-lint configuration #1432 2025-12-01 11:32:12 +08:00
ferhat elmas f723d120d9 feat: add golangci-lint into lint target
* replace empty interface with any
* run fmt via golangci-lint

related to #1432

Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-12-01 11:14:38 +08:00
LinkinStars fc2a1d8afe fix(answer): update QuestionID handling in answer update process 2025-11-28 17:01:12 +08:00
ferhat elmas bc629db132 chore(deps): bump mockgen to 0.6.0 for go1.25 support
Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-11-28 17:00:25 +08:00
ferhat elmas 0777291e80 fix(ui): null pointer access if get branding fails
Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-11-26 15:51:01 +08:00
ferhat elmas ce053ccfa6 fix: multi byte run boundary for cut long title
Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-11-25 17:58:11 +08:00
ferhat elmas a15dd41550 refactor(internal): compile regex once while clearing text
Regex and Replacer can be reused.
No need to recreate for each invocation.

Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
2025-11-24 10:32:47 +08:00
LinkinStars 09b6b34b05 fix(comment): decode CommentID using DeShortID for consistency 2025-11-20 17:50:57 +08:00
LinkinStars 9a7eb0f450 fix(service): set default language to "en_US" if invalid language is provided 2025-11-20 17:42:35 +08:00
Dinesht04 54e602c5e6 fix(ui): refactor number input props (min,max) 2025-11-20 10:51:46 +08:00
Dinesht04 157dbfd08a feat(ui): add types, logic and defaults for min, max value of input component of form 2025-11-20 10:51:46 +08:00
Dinesht04 666ab706a6 feat(ui): add min values for inputs and context-based keyboards for inputs 2025-11-20 10:51:46 +08:00
LinkinStars 20cd4d7c44 fix(deps): update protoc-gen-validate dependency to a new version
Build Latest Docker Image For Release / build (push) Has been cancelled
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
2025-10-30 10:47:10 +08:00
LinkinStars 4cbdd43738 i18n (#1416)
Co-authored-by: Sunny <1147886+sunshineg@users.noreply.github.com>
2025-10-28 16:48:41 +08:00
LinkinStars 833ea4fcb2 fix(i18n): update hints for question body input in en_US.yaml 2025-10-28 16:31:42 +08:00
LinkinStars eb1b20ab96 chore(ci): Add ASF header 2025-10-28 15:27:11 +08:00
LinkinStars 439e786294 Merge remote-tracking branch 'origin/release/1.7.0' 2025-10-28 15:25:07 +08:00
LinkinStars b79fb38300 docs(Makefile): upgrade version to 1.7.0 2025-10-28 15:23:17 +08:00
Sonui 93e183be62 feat: Add resetPassword cli tool 2025-10-28 14:52:53 +08:00
Sonui b33e9fc93e fix: Add time parameter when updating user status 2025-10-28 14:52:53 +08:00
Dinesht04 63e2fb9005 fix(internal):add gte,lte bounds for min_content and min_tags 2025-10-28 14:52:53 +08:00
LinkinStars 4fca0c4271 feat(plugins): add quick-links plugin and ensure captcha-basic is included 2025-10-27 10:56:44 +08:00
shuai e1ff07318e fix: conflict 2025-10-23 18:13:31 +08:00
shuai e3151c1da9 fix: conflict 2025-10-23 18:12:50 +08:00
Dinesht04 2d2451f78d fix(ui,internal): correct i18n implementation for variables and add min=0 to minimumContent in siteInfo schema 2025-10-22 18:43:54 +08:00
Dinesht04 9154b9ba5b feat(ui,internal): add optional question body 2025-10-22 18:43:54 +08:00
Dinesht04 f238aa5051 feat(ui,internal): add min_content property in site info 2025-10-22 18:43:54 +08:00
shuai 52e1b8bd86 fix: merge dev 2025-10-21 18:13:37 +08:00
shuai 433b8d5d1b fix: i18n parameter passing optimization 2025-10-21 10:09:37 +08:00
shuai 4fa1d0f494 fix: Fix the layout confusion caused by too long code #1404 2025-10-20 17:20:17 +08:00
Dinesht04 403dec5e39 feat(internal,ui): add minimum tags error and label while editing 2025-10-16 09:46:08 +08:00
Dinesht04 9b65fed9f0 refactor(tags): remove redundant param from GetMinimumTags and apply minimum tag check in ObjectChangeTag 2025-10-16 09:46:08 +08:00
Dinesht04 a678946032 fix(ui): Adjust tag input label for quantity 2025-10-16 09:46:08 +08:00
Dinesht04 c78cadb159 add migration for min_tags 2025-10-16 09:46:08 +08:00
Dinesht04 3ae38a14f0 feat(UI): Add error for minimum_tag count and translation for Min tag form input 2025-10-16 09:46:08 +08:00
Dinesht04 a63fe5b26c feat(internal,ui): add minimum tags property 2025-10-16 09:46:08 +08:00
Dinesht04 dc47e1a511 fix(ui): change background color for code block to (--an-pre) 2025-10-11 09:54:11 +08:00
Dinesht04 aa75f4455d feat(ui):hide related questions card when there is no content 2025-10-10 10:22:48 +08:00
Luffy f93ab41140 fix(i18n): sync username character 2025-10-10 10:01:12 +08:00
shuai 78df776449 fix: Details page editing time value adjustment 2025-09-30 15:34:37 +08:00
shuai bca8273fb5 fix: edit_time display condition optimization 2025-09-30 14:10:25 +08:00
shuai 4c2564e276 update: update html templates 2025-09-30 10:47:43 +08:00
Luffy bec3e355a9 feat: Add user comment moderation 2025-09-23 14:57:07 +08:00
shuai 5ad97801b0 fix: Optimize the export method of internal components 2025-09-23 10:50:40 +08:00
shuai aeb7b08371 update: timeline page need logged 2025-09-22 11:32:04 +08:00
shuai e071f3e7b6 fix: Filter out parameters of linked list unanswered 2025-09-10 15:57:04 +08:00
shuai 6a0f9f15e5 fix: rename linked page route 2025-09-10 15:01:13 +08:00
shuai 44beb6d15c fix: Optimize list type judgment logic 2025-09-10 14:17:26 +08:00
shuai d738ec2121 feat: add /tags/:tagName/questions route 2025-09-09 10:22:50 +08:00
shuai f709968463 fix: fixed the incorrect link of the user who was replied in the comment 2025-09-09 10:11:41 +08:00
shuai 7f9af84093 fix: Fix username verification prompt 2025-09-08 11:38:52 +08:00
Fen fc4959c3bb Refactor section headers in bug_report.md
Updated section headers in bug report template for consistency.
2025-09-02 18:13:41 +08:00
shuai 235c69e9b9 fix: update search type 2025-09-02 17:00:12 +08:00
Neko 7a8afbb353 add new question notification trigger user 2025-09-01 11:43:43 +08:00
shuai 413c39184d fix: delete comments 2025-08-28 17:02:34 +08:00
shuai f73641eff9 fix: optimization askRedirect function 2025-08-28 16:56:58 +08:00
Neko 81837c9fe0 update new question message tag
fix new question message tag to get all question tags
2025-08-28 16:53:53 +08:00
shuai df3b1a1a39 fix: the route of the question page is adjusted to /questions/add, and redirect /questions/ask to /questions/add 2025-08-28 14:45:05 +08:00
shuai 1b97952601 fix: update add_user modal's class 2025-08-21 15:15:57 +08:00
shuai e9ea91d260 fix: add data-bs-theme attribute for dropdown component 2025-08-20 17:10:53 +08:00
shuai 6d2dd57df8 fix: delete page-main-wrap class 2025-08-19 16:23:13 +08:00
shuai 7ffd86e14a fix: add page-main-wrap class 2025-08-19 14:38:03 +08:00
shuai 0376a00d73 fix: responsive layout adjustment 2025-08-19 11:20:55 +08:00
shuai 6389c3b34e Merge branch 'feat/1.7.0/quicklinks' into test 2025-08-15 14:23:59 +08:00
shuai 1aeea01c6f style: ui optimization 2025-08-15 14:22:54 +08:00
shuai c2c7ea84d5 feat: support quick-links plugin 2025-08-14 10:24:31 +08:00
kumfo a6d95ae8f9 feat: add sidebar plugin 2025-08-13 14:44:25 +08:00
shuai dc582eec54 style: question details page UI optimization 2025-08-12 10:10:56 +08:00
shuai bfa48a8ca9 fix: footer remove background color 2025-08-08 10:24:24 +08:00
shuai 19aed9f9c8 feat: schemeForm support tagSelector component 2025-08-08 10:24:24 +08:00
hgaol af80380f23 fix: failed to build plugins in windows 2025-08-08 10:24:24 +08:00
hgaol fbd5a55c5d fix: failed to build plugins in windows 2025-08-06 10:29:30 +08:00
shuai 7e4edb18d4 fix: remove question detail page pinned icon 2025-08-04 11:23:53 +08:00
LinkinStars 2e646af56a Translation (#1367)
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Latest Docker Image For Release / build (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
Co-authored-by: Sunny <1147886+sunshineg@users.noreply.github.com>
2025-07-17 16:30:17 +08:00
LinkinStars 23d2a915dc Merge remote-tracking branch 'origin/release/1.6.0' 2025-07-17 16:06:16 +08:00
LinkinStars fa7ff6a9c6 docs(Makefile): upgrade version to 1.6.0 2025-07-17 15:54:28 +08:00
LinkinStars fda869f1dc docs: remove description for suspended_until field 2025-07-17 15:52:25 +08:00
shuai 1871e2e580 fix: optimize the copy 2025-07-03 11:13:59 +08:00
shuai 9897d92e53 fix: adjustment of the position of plug-in inserting the editor toolbar 2025-07-02 17:01:33 +08:00
shuai 1ef67972df Merge branch 'feat/1.6.1/md' into test 2025-07-02 11:35:23 +08:00
shuai e90be519a7 fix: list time to remove verb modification 2025-07-02 11:30:24 +08:00
shuai d04d18dff2 fix: Navigation dropdown menu theme color should follow the theme color of the application #1355 2025-06-26 17:02:58 +08:00
shuai 05fab1c999 feat: Blocked users can choose the duration of the block #1361 2025-06-26 17:02:58 +08:00
shuai 8560c89e06 fix: move the settings -> users section in admin to Interface #1360 2025-06-26 17:02:58 +08:00
shuai d2768b1f11 fix: hr tag's margin use 1.5rem 2025-06-26 17:02:58 +08:00
shuai 60f87fd294 fix: optimization hr's style 2025-06-26 17:02:58 +08:00
shuai 736d07a30b fix: optimization hr's style 2025-06-26 17:02:58 +08:00
shuai 2bc3167dbd fix: Navigation dropdown menu theme color should follow the theme color of the application #1355 2025-06-26 17:01:14 +08:00
shuai 17e1b30175 feat: Blocked users can choose the duration of the block #1361 2025-06-26 16:44:42 +08:00
LinkinStars b78be61ee8 refactor(user): simplify suspended until logic 2025-06-26 16:42:24 +08:00
LinkinStars 3b8b5871a6 feat(user): add user status messages and support localization 2025-06-26 16:10:09 +08:00
shuai 19eca49d2a fix: move the settings -> users section in admin to Interface #1360 2025-06-26 14:55:35 +08:00
LinkinStars 6d02706d4d feat(user): add user suspension functionality 2025-06-26 14:42:08 +08:00
LinkinStars 550a92684e feat(migrations): move user config to interface 2025-06-26 11:20:23 +08:00
Xing Ji e6f94c924d chore: Keep the api_url in configs/config.yaml 2025-06-24 14:19:20 +08:00
Xing Ji b863ad6b78 chore(configs/config.yaml): Change api_url to api_base_url 2025-06-24 14:19:20 +08:00
fen 157291c2d5 fix: screenshot 2025-06-24 14:19:20 +08:00
shuai 246f307980 feat: update .asf.yaml content 2025-06-24 14:19:20 +08:00
LinkinStars 67b9c0b462 refactor(api): update API documentation for Accept Answer endpoint 2025-06-24 11:19:53 +08:00
LinkinStars d82c75d7cc refactor(api): rename methods and update documentation for clarity 2025-06-24 11:19:33 +08:00
LinkinStars 03ec0ddfbb chore(deps): update Go version to 1.23 in configuration files 2025-06-24 11:16:29 +08:00
LinkinStars d02d09bb9a refactor(api): improve API documentation for Answer endpoints 2025-06-24 11:06:14 +08:00
LinkinStars dc98f61d69 refactor(api): update API documentation and method names for clarity 2025-06-24 11:05:11 +08:00
LinkinStars a62c975c7e chore(deps): update Go version and dependencies to v1.23.0 and latest compatible versions 2025-06-24 10:42:32 +08:00
LinkinStars ee6e67243d test(internal): add mock for IsBrandingFileUsed method 2025-06-13 16:02:11 +08:00
LinkinStars ef8c1ebb88 fix(notification): handle potential nil pointer dereference #1356 2025-06-13 16:01:05 +08:00
Luffy b6a23d69d6 feat: add loading state for counts display in search results 2025-06-09 10:49:07 +08:00
fen 530812f810 Merge branch 'main' of github.com:apache/answer
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
2025-06-06 18:34:37 +08:00
fen fd361d47ed fix: screenshot 2025-06-06 18:34:08 +08:00
shuai 401c8a7637 feat: update .asf.yaml content 2025-06-04 10:39:49 +08:00
shuai a963f5a881 fix: hr tag's margin use 1.5rem 2025-05-30 11:22:00 +08:00
shuai 07217e25ab fix: optimization hr's style 2025-05-30 11:08:58 +08:00
shuai 3ce9dfb10f fix: optimization hr's style 2025-05-30 10:57:15 +08:00
shuai eddedfdf1b fix: optimization login btn style
Build Latest Docker Image For Release / build (push) Has been cancelled
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
2025-05-28 12:46:12 +08:00
shuai 1f07d8eb15 fix: Compatibility default value is colored or light before v1.5.1 2025-05-28 11:35:00 +08:00
LinkinStars f4368f54c5 New translations (#1348) 2025-05-28 10:50:14 +08:00
LinkinStars bd032dff36 upgrade(docs): upgrade to 1.5.1 2025-05-28 10:16:27 +08:00
LinkinStars e859e47d1b Merge remote-tracking branch 'origin/dev' into test 2025-05-28 10:14:15 +08:00
Sonui 4175b06039 perf(tests): replace panic with os.Exit in TestMain for graceful test termination 2025-05-28 10:13:32 +08:00
Sonui 6df436c718 feat(tests): add comprehensive tests for KV storage plugin 2025-05-28 10:13:32 +08:00
shuai b20f3a8762 fix: dropdown header use h6 2025-05-27 18:27:44 +08:00
shuai 503e1cf7d4 fix: dropdown header use h6 2025-05-27 18:26:46 +08:00
LinkinStars 5fc25ab8f6 Merge remote-tracking branch 'origin/dev' into test 2025-05-26 10:54:07 +08:00
Giorgio Bonvicini 6381a2192e fix: update the visit cookie if it does not match the visit token
Previous behavior was to keep any existing visit cookies, which caused problems like #1334
2025-05-26 10:42:54 +08:00
LinkinStars b691e143a2 Merge remote-tracking branch 'origin/dev' into test
# Conflicts:
#	internal/migrations/init_data.go
2025-05-23 15:11:03 +08:00
Luffy afdf6ce778 fix: Unified display name and username length checks 2025-05-23 15:09:34 +08:00
DanielAuerX def0559a55 Fix file record and delete files (branding and avatar) (#1335)
- [x] create file_record table
- [x] avatar and branding files are added to file_record
- [x] branding files are being deleted
- [x] avatar files are being deleted
- [x] reload latest avatar (frontend) after backend state is being
updated

problems addressed in the pr:
- clean up job fails, because it cannot access file_record table
- avatar and branding files are not added to the file_record table
- avatar and branding files are never deleted
- after an avatar is being updated/deleted, the old file is still being
requested due to browser caching. This is causing error logs ("no such
file or directory") in the backend.

cf. conversation in [pr
1326](https://github.com/apache/answer/pull/1326)

---------

Co-authored-by: broccoli <lekker.broccoli@gmail.com>
Co-authored-by: LinkinStars <linkinstar@foxmail.com>
2025-05-23 15:07:14 +08:00
shuai 84cc97dc78 fix: pre tag background color adjustment, remove the background color of the quoted content 2025-05-23 15:05:15 +08:00
shuai 89df65c884 fix: Copy content avoids multiple consecutive newlines 2025-05-20 15:33:46 +08:00
shuai 9331690b0d fix: When copying text and images, can the images only appear at the end of the article 2025-05-20 15:10:40 +08:00
Shaobiao Lin c6189e5020 docs(command): unify style of usage statements
close #1330
2025-05-20 15:10:40 +08:00
Shaobiao Lin 54f7682e1a docs(command): remove redundant comments
The codes are self-documenting enough.
2025-05-20 15:10:40 +08:00
Sonui 1baa3f0fb6 chore(migrations): update migration version 2025-05-20 15:10:40 +08:00
Sonui ed543e8825 fix(plugin): set params.Value in Get method to ensure correct value retrieval 2025-05-20 15:10:40 +08:00
Sonui aa0493e4f0 feat(migrations): Add v26 migration file to support plugin KV storage 2025-05-20 15:10:40 +08:00
Sonui c7646bd600 docs(plugin): Add comments to KVOperator methods to improve code readability 2025-05-20 15:10:40 +08:00
Sonui 9ea153b402 refactor(plugin): improve KV storage with better caching and param handling 2025-05-20 15:10:40 +08:00
Sonui d90810afd7 fix(plugin): rename 'close' to avoid builtin collision 2025-05-20 15:10:40 +08:00
Sonui d12ac86d66 perf(plugin): remove unnecessary KV storage checks 2025-05-20 15:10:40 +08:00
Sonui 8579bde607 refactor(plugin): improved initialization of the KV storage plugin 2025-05-20 15:10:40 +08:00
Sonui c7ab8534f1 feat(plugin): add key-value storage support for plugins 2025-05-20 15:10:40 +08:00
shuai cde3ef9689 fix: admin gravatar base URL is empty should use placehoder for default value 2025-05-20 14:33:33 +08:00
shuai 17b88b6a4f fix: reanme css/html page title and fix some zh_cn translations 2025-05-20 11:58:08 +08:00
shuai 95f5de544d fix: customize renamed to apperance and move branding below apprance 2025-05-20 09:40:22 +08:00
shuai 4ae8d8ac8c fix: reset navbar_style default color 2025-05-19 16:46:30 +08:00
shuai 50bed824f6 feat: Supports separate setting of navigation background color 2025-05-19 16:46:30 +08:00
shuai 9368da2c04 fix: code snippet caused the layout to break #1329 2025-05-19 16:46:30 +08:00
Shaobiao Lin 4182d9f506 docs(command): unify style of usage statements
close #1330
2025-05-10 10:59:00 +08:00
Shaobiao Lin 757e89467a docs(command): remove redundant comments
The codes are self-documenting enough.
2025-05-10 10:59:00 +08:00
Sonui aac1532b7e chore(migrations): update migration version 2025-05-09 11:50:27 +08:00
Sonui d866ca71e1 fix(plugin): set params.Value in Get method to ensure correct value retrieval 2025-05-09 11:50:27 +08:00
Sonui 15ef81533f feat(migrations): Add v26 migration file to support plugin KV storage 2025-05-09 11:50:27 +08:00
Sonui beac023875 docs(plugin): Add comments to KVOperator methods to improve code readability 2025-05-09 11:50:27 +08:00
Sonui 56f36ec5e6 refactor(plugin): improve KV storage with better caching and param handling 2025-05-09 11:50:27 +08:00
Sonui 42d6ad6111 fix(plugin): rename 'close' to avoid builtin collision 2025-05-09 11:50:27 +08:00
Sonui 9f8cab5626 perf(plugin): remove unnecessary KV storage checks 2025-05-09 11:50:27 +08:00
Sonui 42cc06886a refactor(plugin): improved initialization of the KV storage plugin 2025-05-09 11:50:27 +08:00
Sonui 20d7e4bc10 feat(plugin): add key-value storage support for plugins 2025-05-09 11:50:27 +08:00
Sunny 3f1ed50f67 New translations en_us.yaml (Chinese Simplified)
Build Latest Docker Image For Release / build (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
Build Binary For Release / build-goreleaser (push) Has been cancelled
2025-04-29 15:41:58 +08:00
Sunny 68bedd1c60 New translations en_us.yaml (Chinese Simplified) 2025-04-29 15:41:58 +08:00
Sunny 335defc9bf New translations en_us.yaml (Malayalam) 2025-04-29 15:41:58 +08:00
Sunny a0c9edd43c New translations en_us.yaml (Welsh) 2025-04-29 15:41:58 +08:00
Sunny 214189883e New translations en_us.yaml (Telugu) 2025-04-29 15:41:58 +08:00
Sunny 34d8af3e2c New translations en_us.yaml (Hindi) 2025-04-29 15:41:58 +08:00
Sunny f415855612 New translations en_us.yaml (Persian) 2025-04-29 15:41:58 +08:00
Sunny b68dedc1b8 New translations en_us.yaml (Indonesian) 2025-04-29 15:41:58 +08:00
Sunny c14cec048b New translations en_us.yaml (Vietnamese) 2025-04-29 15:41:58 +08:00
Sunny ecb0933c17 New translations en_us.yaml (Chinese Traditional) 2025-04-29 15:41:58 +08:00
Sunny 138afb26c4 New translations en_us.yaml (Chinese Simplified) 2025-04-29 15:41:58 +08:00
Sunny 3d56224bb6 New translations en_us.yaml (Ukrainian) 2025-04-29 15:41:58 +08:00
Sunny 025a7de060 New translations en_us.yaml (Turkish) 2025-04-29 15:41:58 +08:00
Sunny f0da7146eb New translations en_us.yaml (Swedish) 2025-04-29 15:41:58 +08:00
Sunny 2a4e486a6e New translations en_us.yaml (Slovak) 2025-04-29 15:41:58 +08:00
Sunny 5b2f950d40 New translations en_us.yaml (Russian) 2025-04-29 15:41:58 +08:00
Sunny 71c30a952c New translations en_us.yaml (Portuguese) 2025-04-29 15:41:58 +08:00
Sunny e0bc0bc714 New translations en_us.yaml (Polish) 2025-04-29 15:41:58 +08:00
Sunny 4682ba010f New translations en_us.yaml (Korean) 2025-04-29 15:41:58 +08:00
Sunny 96f6c86d74 New translations en_us.yaml (Japanese) 2025-04-29 15:41:58 +08:00
Sunny f79409e534 New translations en_us.yaml (Italian) 2025-04-29 15:41:58 +08:00
Sunny 70034113b4 New translations en_us.yaml (German) 2025-04-29 15:41:58 +08:00
Sunny eff54adcc1 New translations en_us.yaml (Danish) 2025-04-29 15:41:58 +08:00
Sunny 0671f8b758 New translations en_us.yaml (Czech) 2025-04-29 15:41:58 +08:00
Sunny 5c57c5d3e4 New translations en_us.yaml (Spanish) 2025-04-29 15:41:58 +08:00
Sunny 9e28763bef New translations en_us.yaml (French) 2025-04-29 15:41:58 +08:00
Sunny 3653a5d803 New translations en_us.yaml (Romanian) 2025-04-29 15:41:58 +08:00
554 changed files with 36366 additions and 9127 deletions
+3 -3
View File
@@ -43,6 +43,6 @@ github:
notifications:
commits: commits@answer.apache.org
issues: commits@answer.apache.org
pullrequests: commits@answer.apache.org
discussions: commits@answer.apache.org
issues: issues@answer.apache.org
pullrequests: issues@answer.apache.org
discussions: issues@answer.apache.org
+36
View File
@@ -0,0 +1,36 @@
# Installation
INSTALL_PORT=80
AUTO_INSTALL=false
# Database
DB_TYPE=
DB_USERNAME=
DB_PASSWORD=
DB_HOST=
DB_NAME=
DB_FILE=
# Site
LANGUAGE=en-US
SITE_NAME=Apache Answer
SITE_URL=
CONTACT_EMAIL=
# Admin
ADMIN_NAME=
ADMIN_PASSWORD=
ADMIN_EMAIL=
# Content
EXTERNAL_CONTENT_DISPLAY=ask_before_display
# Swagger
SWAGGER_HOST=
SWAGGER_ADDRESS_PORT=
# Server
SITE_ADDR=0.0.0.0:3000
# Logging
LOG_LEVEL=INFO
LOG_PATH=
+4 -4
View File
@@ -12,7 +12,7 @@ assignees: ''
A clear and concise description of what the bug is.
### To Reproduce
## To Reproduce
Steps to reproduce the behavior:
@@ -21,15 +21,15 @@ Steps to reproduce the behavior:
3. Scroll down to '....'
4. See error
### Expected behavior
## Expected behavior
A clear and concise description of what you expected to happen.
### Screenshots
## Screenshots
If applicable, add screenshots or video to help explain your problem.
### Platform
## Platform
- Device: [e.g. Desktop, Mobile]
- OS: [e.g. macOS]
@@ -34,7 +34,7 @@ jobs:
uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: 20.18.1
@@ -42,15 +42,16 @@ jobs:
run: make install-ui-packages ui
- name: Setup Go
uses: actions/setup-go@v3
uses: actions/setup-go@v5
with:
go-version: 1.22
go-version: 1.23
- name: Install GoReleaser
run: go install github.com/goreleaser/goreleaser/v2@latest
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v4
with:
distribution: goreleaser
version: latest
args: release --clean --skip=validate
run: |
"$(go env GOPATH)/bin/goreleaser" release --clean --skip=validate
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/upload-artifact@v4
@@ -35,34 +35,29 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: apache/answer
tags: |
type=raw,value=latest
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
run: |
sudo apt-get update
sudo apt-get install -y qemu-user-static
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
run: |
docker buildx create --name answer-builder --driver docker-container --use
docker buildx inspect --bootstrap
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login --username "${{ secrets.DOCKERHUB_USER }}" --password-stdin
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
file: ./Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
run: |
BUILD_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
docker buildx build \
--file ./Dockerfile \
--platform linux/amd64,linux/arm64 \
--push \
--tag apache/answer:latest \
--label org.opencontainers.image.created="${BUILD_DATE}" \
--label org.opencontainers.image.revision="${GITHUB_SHA}" \
--label org.opencontainers.image.source="https://github.com/${GITHUB_REPOSITORY}" \
--label org.opencontainers.image.version="${GITHUB_REF_NAME#v}" \
.
+19 -23
View File
@@ -33,33 +33,29 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: apache/answer
tags: |
type=ref,enable=true,priority=600,prefix=,suffix=,event=branch
type=semver,pattern={{version}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
run: |
sudo apt-get update
sudo apt-get install -y qemu-user-static
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
run: |
docker buildx create --name answer-builder --driver docker-container --use
docker buildx inspect --bootstrap
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login --username "${{ secrets.DOCKERHUB_USER }}" --password-stdin
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
file: ./Dockerfile
tags: apache/answer:${{ inputs.tag_name }}
labels: ${{ steps.meta.outputs.labels }}
run: |
BUILD_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
docker buildx build \
--file ./Dockerfile \
--platform linux/amd64,linux/arm64 \
--push \
--tag "apache/answer:${{ inputs.tag_name }}" \
--label org.opencontainers.image.created="${BUILD_DATE}" \
--label org.opencontainers.image.revision="${GITHUB_SHA}" \
--label org.opencontainers.image.source="https://github.com/${GITHUB_REPOSITORY}" \
--label org.opencontainers.image.version="${{ inputs.tag_name }}" \
.
+21 -25
View File
@@ -34,35 +34,31 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: apache/answer
tags: |
type=ref,enable=true,priority=600,prefix=,suffix=,event=branch
type=semver,pattern={{version}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
run: |
sudo apt-get update
sudo apt-get install -y qemu-user-static
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
run: |
docker buildx create --name answer-builder --driver docker-container --use
docker buildx inspect --bootstrap
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login --username "${{ secrets.DOCKERHUB_USER }}" --password-stdin
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
file: ./Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
env:
IMAGE_TAG: ${{ github.ref_name }}
run: |
BUILD_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
docker buildx build \
--file ./Dockerfile \
--platform linux/amd64,linux/arm64 \
--push \
--tag "apache/answer:${IMAGE_TAG#v}" \
--label org.opencontainers.image.created="${BUILD_DATE}" \
--label org.opencontainers.image.revision="${GITHUB_SHA}" \
--label org.opencontainers.image.source="https://github.com/${GITHUB_REPOSITORY}" \
--label org.opencontainers.image.version="${IMAGE_TAG#v}" \
.
+16 -25
View File
@@ -30,32 +30,23 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: apache/answer
tags: |
type=raw,value=test
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Login to DockerHub
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login --username "${{ secrets.DOCKERHUB_USER }}" --password-stdin
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
run: |
docker buildx create --name answer-builder --driver docker-container --use
docker buildx inspect --bootstrap
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile
platforms: linux/amd64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
run: |
BUILD_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
docker buildx build \
--file ./Dockerfile \
--platform linux/amd64 \
--push \
--tag apache/answer:test \
--label org.opencontainers.image.created="${BUILD_DATE}" \
--label org.opencontainers.image.revision="${GITHUB_SHA}" \
--label org.opencontainers.image.source="https://github.com/${GITHUB_REPOSITORY}" \
.
+62
View File
@@ -0,0 +1,62 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
name: Lint
on:
push:
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.number || github.run_id }}
cancel-in-progress: true
jobs:
lint:
name: Lint (${{ matrix.os }})
runs-on: ${{ matrix.os }}
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: "1.23"
cache: true
- name: Run go mod tidy
run: go mod tidy
- name: Run golangci-lint
run: make lint
- name: Check for uncommitted changes
shell: bash
run: |
if [ -n "$(git status --porcelain)" ]; then
echo "::error::Uncommitted changes detected"
git status
git diff
exit 1
fi
+4 -1
View File
@@ -28,8 +28,11 @@ vendor/
/answer-data/
/answer
/new_answer
build/tools/
dist/
# Lint setup generated file
.husky/
# Environment variables
.env
+49
View File
@@ -0,0 +1,49 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
version: "2"
linters:
exclusions:
paths:
- answer-data
- ui
- i18n
enable:
- asasalint # checks for pass []any as any in variadic func(...any)
- asciicheck # checks that your code does not contain non-ASCII identifiers
- bidichk # checks for dangerous unicode character sequences
- bodyclose # checks whether HTTP response body is closed successfully
- canonicalheader # checks whether net/http.Header uses canonical header
- copyloopvar # detects places where loop variables are copied (Go 1.22+)
- gocritic # provides diagnostics that check for bugs, performance and style issues
- misspell # finds commonly misspelled English words in comments and strings
- modernize # detects code that can be modernized to use newer Go features
- testifylint # checks usage of github.com/stretchr/testify
- unconvert # removes unnecessary type conversions
- unparam # reports unused function parameters
- whitespace # detects leading and trailing whitespace
formatters:
enable:
- gofmt
- goimports
settings:
gofmt:
simplify: true
rewrite-rules:
- pattern: 'interface{}'
replacement: 'any'
+1 -1
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
FROM golang:1.22-alpine AS golang-builder
FROM golang:1.25-alpine AS golang-builder
LABEL maintainer="linkinstar@apache.org"
ARG GOPROXY
+18 -5
View File
@@ -1,6 +1,6 @@
.PHONY: build clean ui
VERSION=1.5.0
VERSION=2.0.2
BIN=answer
DIR_SRC=./cmd/answer
DOCKER_CMD=docker
@@ -10,6 +10,15 @@ Revision=$(shell git rev-parse --short HEAD 2>/dev/null || echo "")
GO_FLAGS=-ldflags="-X github.com/apache/answer/cmd.Version=$(VERSION) -X 'github.com/apache/answer/cmd.Revision=$(Revision)' -X 'github.com/apache/answer/cmd.Time=`date +%s`' -extldflags -static"
GO=$(GO_ENV) "$(shell which go)"
GOLANGCI_VERSION ?= v2.6.2
TOOLS_BIN := $(shell mkdir -p build/tools && realpath build/tools)
GOLANGCI = $(TOOLS_BIN)/golangci-lint-$(GOLANGCI_VERSION)
$(GOLANGCI):
rm -f $(TOOLS_BIN)/golangci-lint*
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/$(GOLANGCI_VERSION)/install.sh | sh -s -- -b $(TOOLS_BIN) $(GOLANGCI_VERSION)
mv $(TOOLS_BIN)/golangci-lint $(TOOLS_BIN)/golangci-lint-$(GOLANGCI_VERSION)
build: generate
@$(GO) build $(GO_FLAGS) -o $(BIN) $(DIR_SRC)
@@ -23,10 +32,10 @@ universal: generate
generate:
@$(GO) get github.com/swaggo/swag/cmd/swag@v1.16.3
@$(GO) get github.com/google/wire/cmd/wire@v0.5.0
@$(GO) get go.uber.org/mock/mockgen@v0.5.0
@$(GO) get go.uber.org/mock/mockgen@v0.6.0
@$(GO) install github.com/swaggo/swag/cmd/swag@v1.16.3
@$(GO) install github.com/google/wire/cmd/wire@v0.5.0
@$(GO) install go.uber.org/mock/mockgen@v0.5.0
@$(GO) install go.uber.org/mock/mockgen@v0.6.0
@$(GO) generate ./...
@$(GO) mod tidy
@@ -50,8 +59,12 @@ install-ui-packages:
ui:
@cd ui && pnpm pre-install && pnpm build && cd -
lint: generate
lint: generate $(GOLANGCI)
@bash ./script/check-asf-header.sh
@gofmt -w -l .
$(GOLANGCI) run
lint-fix: generate $(GOLANGCI)
@bash ./script/check-asf-header.sh
$(GOLANGCI) run --fix
all: clean build
+1 -1
View File
@@ -1,5 +1,5 @@
Apache Answer
Copyright 2023-2025 The Apache Software Foundation
Copyright 2023-2026 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (https://www.apache.org/).
+3 -3
View File
@@ -23,7 +23,7 @@ To learn more about the project, visit [answer.apache.org](https://answer.apache
### Running with docker
```bash
docker run -d -p 9080:80 -v answer-data:/data --name answer apache/answer:1.5.0
docker run -d -p 9080:80 -v answer-data:/data --name answer apache/answer:2.0.2
```
For more information, see [Installation](https://answer.apache.org/docs/installation).
@@ -40,10 +40,10 @@ You can also check out the [plugins here](https://answer.apache.org/plugins).
### Prerequisites
- Golang >= 1.22
- Golang >= 1.23
- Node.js >= 20
- pnpm >= 9
- [mockgen](https://github.com/uber-go/mock?tab=readme-ov-file#installation) >= 1.6.0
- [mockgen](https://github.com/uber-go/mock?tab=readme-ov-file#installation) >= 0.6.0
- [wire](https://github.com/google/wire/) >= 0.5.0
### Build
+17 -3
View File
@@ -64,8 +64,23 @@ spec:
port: http
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- if .Values.env }}
{{- $envNames := list }}
{{- range .Values.env }}
{{- $envNames = append $envNames .name }}
{{- end }}
env:
{{- if not (has "INSTALL_PORT" $envNames) }}
- name: INSTALL_PORT
value: {{ .Values.service.port | quote }}
{{- end }}
{{- if not (has "SITE_ADDR" $envNames) }}
- name: SITE_ADDR
value: {{ printf "0.0.0.0:%v" .Values.service.port | quote }}
{{- end }}
{{- if not (has "SWAGGER_ADDRESS_PORT" $envNames) }}
- name: SWAGGER_ADDRESS_PORT
value: {{ printf ":%v" .Values.service.port | quote }}
{{- end }}
{{- range .Values.env }}
- name: {{ .name }}
{{- if .value | quote }}
@@ -76,7 +91,6 @@ spec:
{{- toYaml .valueFrom | nindent 16 }}
{{- end }}
{{- end }}
{{- end }}
volumeMounts:
- name: data
mountPath: "/data"
@@ -102,4 +116,4 @@ spec:
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- end }}
+65 -40
View File
@@ -20,11 +20,13 @@
package answercmd
import (
"context"
"fmt"
"os"
"strings"
"github.com/apache/answer/internal/base/conf"
"github.com/apache/answer/internal/base/path"
"github.com/apache/answer/internal/cli"
"github.com/apache/answer/internal/install"
"github.com/apache/answer/internal/migrations"
@@ -53,6 +55,10 @@ var (
i18nSourcePath string
// i18nTargetPath i18n to path
i18nTargetPath string
// resetPasswordEmail user email for password reset
resetPasswordEmail string
// resetPasswordPassword new password for password reset
resetPasswordPassword string
)
func init() {
@@ -76,13 +82,15 @@ func init() {
i18nCmd.Flags().StringVarP(&i18nTargetPath, "target", "t", "", "i18n target path, eg: -t ./i18n/target")
for _, cmd := range []*cobra.Command{initCmd, checkCmd, runCmd, dumpCmd, upgradeCmd, buildCmd, pluginCmd, configCmd, i18nCmd} {
resetPasswordCmd.Flags().StringVarP(&resetPasswordEmail, "email", "e", "", "user email address")
resetPasswordCmd.Flags().StringVarP(&resetPasswordPassword, "password", "p", "", "new password (not recommended, will be recorded in shell history)")
for _, cmd := range []*cobra.Command{initCmd, checkCmd, runCmd, dumpCmd, upgradeCmd, buildCmd, pluginCmd, configCmd, i18nCmd, resetPasswordCmd} {
rootCmd.AddCommand(cmd)
}
}
var (
// rootCmd represents the base command when called without any subcommands
rootCmd = &cobra.Command{
Use: "answer",
Short: "Answer is a minimalist open source Q&A community.",
@@ -92,32 +100,30 @@ To run answer, use:
- 'answer run' to launch application.`,
}
// runCmd represents the run command
runCmd = &cobra.Command{
Use: "run",
Short: "Run the application",
Long: `Run the application`,
Short: "Run Answer",
Long: `Start running Answer`,
Run: func(_ *cobra.Command, _ []string) {
cli.FormatAllPath(dataDirPath)
fmt.Println("config file path: ", cli.GetConfigFilePath())
path.FormatAllPath(dataDirPath)
fmt.Println("config file path: ", path.GetConfigFilePath())
fmt.Println("Answer is starting..........................")
runApp()
},
}
// initCmd represents the init command
initCmd = &cobra.Command{
Use: "init",
Short: "init answer application",
Long: `init answer application`,
Short: "Initialize Answer",
Long: `Initialize Answer with specified configuration`,
Run: func(_ *cobra.Command, _ []string) {
// check config file and database. if config file exists and database is already created, init done
cli.InstallAllInitialEnvironment(dataDirPath)
configFileExist := cli.CheckConfigFile(cli.GetConfigFilePath())
configFileExist := cli.CheckConfigFile(path.GetConfigFilePath())
if configFileExist {
fmt.Println("config file exists, try to read the config...")
c, err := conf.ReadConfig(cli.GetConfigFilePath())
c, err := conf.ReadConfig(path.GetConfigFilePath())
if err != nil {
fmt.Println("read config failed: ", err.Error())
return
@@ -131,20 +137,19 @@ To run answer, use:
}
// start installation server to install
install.Run(cli.GetConfigFilePath())
install.Run(path.GetConfigFilePath())
},
}
// upgradeCmd represents the upgrade command
upgradeCmd = &cobra.Command{
Use: "upgrade",
Short: "upgrade Answer version",
Long: `upgrade Answer version`,
Short: "Upgrade Answer",
Long: `Upgrade Answer to the latest version`,
Run: func(_ *cobra.Command, _ []string) {
log.SetLogger(log.NewStdLogger(os.Stdout))
cli.FormatAllPath(dataDirPath)
path.FormatAllPath(dataDirPath)
cli.InstallI18nBundle(true)
c, err := conf.ReadConfig(cli.GetConfigFilePath())
c, err := conf.ReadConfig(path.GetConfigFilePath())
if err != nil {
fmt.Println("read config failed: ", err.Error())
return
@@ -157,15 +162,14 @@ To run answer, use:
},
}
// dumpCmd represents the dump command
dumpCmd = &cobra.Command{
Use: "dump",
Short: "back up data",
Long: `back up data`,
Short: "Back up data",
Long: `Back up database into an SQL file`,
Run: func(_ *cobra.Command, _ []string) {
fmt.Println("Answer is backing up data")
cli.FormatAllPath(dataDirPath)
c, err := conf.ReadConfig(cli.GetConfigFilePath())
path.FormatAllPath(dataDirPath)
c, err := conf.ReadConfig(path.GetConfigFilePath())
if err != nil {
fmt.Println("read config failed: ", err.Error())
return
@@ -179,15 +183,14 @@ To run answer, use:
},
}
// checkCmd represents the check command
checkCmd = &cobra.Command{
Use: "check",
Short: "checking the required environment",
Short: "Check the required environment",
Long: `Check if the current environment meets the startup requirements`,
Run: func(_ *cobra.Command, _ []string) {
cli.FormatAllPath(dataDirPath)
path.FormatAllPath(dataDirPath)
fmt.Println("Start checking the required environment...")
if cli.CheckConfigFile(cli.GetConfigFilePath()) {
if cli.CheckConfigFile(path.GetConfigFilePath()) {
fmt.Println("config file exists [✔]")
} else {
fmt.Println("config file not exists [x]")
@@ -199,7 +202,7 @@ To run answer, use:
fmt.Println("upload directory not exists [x]")
}
c, err := conf.ReadConfig(cli.GetConfigFilePath())
c, err := conf.ReadConfig(path.GetConfigFilePath())
if err != nil {
fmt.Println("read config failed: ", err.Error())
return
@@ -214,10 +217,9 @@ To run answer, use:
},
}
// buildCmd used to build another answer with plugins
buildCmd = &cobra.Command{
Use: "build",
Short: "used to build answer with plugins",
Short: "Build Answer with plugins",
Long: `Build a new Answer with plugins that you need`,
Run: func(_ *cobra.Command, _ []string) {
fmt.Printf("try to build a new answer with plugins:\n%s\n", strings.Join(buildWithPlugins, "\n"))
@@ -235,11 +237,10 @@ To run answer, use:
},
}
// pluginCmd prints all plugins packed in the binary
pluginCmd = &cobra.Command{
Use: "plugin",
Short: "prints all plugins packed in the binary",
Long: `prints all plugins packed in the binary`,
Short: "Print all plugins packed in the binary",
Long: `Print all plugins packed in the binary`,
Run: func(_ *cobra.Command, _ []string) {
_ = plugin.CallBase(func(base plugin.Base) error {
info := base.Info()
@@ -249,15 +250,14 @@ To run answer, use:
},
}
// configCmd set some config to default value
configCmd = &cobra.Command{
Use: "config",
Short: "set some config to default value",
Long: `set some config to default value`,
Short: "Set some config to default value",
Long: `Set some config to default value`,
Run: func(_ *cobra.Command, _ []string) {
cli.FormatAllPath(dataDirPath)
path.FormatAllPath(dataDirPath)
c, err := conf.ReadConfig(cli.GetConfigFilePath())
c, err := conf.ReadConfig(path.GetConfigFilePath())
if err != nil {
fmt.Println("read config failed: ", err.Error())
return
@@ -286,10 +286,9 @@ To run answer, use:
},
}
// i18nCmd used to merge i18n files
i18nCmd = &cobra.Command{
Use: "i18n",
Short: "overwrite i18n files",
Short: "Overwrite i18n files",
Long: `Merge i18n files from plugins to original i18n files. It will overwrite the original i18n files`,
Run: func(_ *cobra.Command, _ []string) {
if err := cli.ReplaceI18nFilesLocal(i18nTargetPath); err != nil {
@@ -307,6 +306,32 @@ To run answer, use:
}
},
}
resetPasswordCmd = &cobra.Command{
Use: "passwd",
Aliases: []string{"password", "reset-password"},
Short: "Reset user password",
Long: "Reset user password by email address.",
Example: ` # Interactive mode (recommended, safest)
answer passwd -C ./answer-data
# Specify email only (will prompt for password securely)
answer passwd -C ./answer-data --email user@example.com
answer passwd -C ./answer-data -e user@example.com
# Specify email and password (NOT recommended, will be recorded in shell history)
answer passwd -C ./answer-data -e user@example.com -p newpassword123`,
Run: func(cmd *cobra.Command, args []string) {
opts := &cli.ResetPasswordOptions{
Email: resetPasswordEmail,
Password: resetPasswordPassword,
}
if err := cli.ResetPassword(context.Background(), dataDirPath, opts); err != nil {
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
os.Exit(1)
}
},
}
)
// Execute adds all child commands to the root command and sets flags appropriately.
+9 -3
View File
@@ -28,15 +28,21 @@ import (
"github.com/apache/answer/internal/base/conf"
"github.com/apache/answer/internal/base/constant"
"github.com/apache/answer/internal/base/cron"
"github.com/apache/answer/internal/cli"
"github.com/apache/answer/internal/base/path"
"github.com/apache/answer/internal/schema"
"github.com/gin-gonic/gin"
"github.com/joho/godotenv"
"github.com/segmentfault/pacman"
"github.com/segmentfault/pacman/contrib/log/zap"
"github.com/segmentfault/pacman/contrib/server/http"
"github.com/segmentfault/pacman/log"
)
func init() {
// Load .env if present, ignore error to keep backward compatibility
_ = godotenv.Load()
}
// go build -ldflags "-X github.com/apache/answer/cmd.Version=x.y.z"
var (
// Name is the name of the project
@@ -49,7 +55,7 @@ var (
// Time is the build time of the project
Time = ""
// GoVersion is the go version of the project
GoVersion = "1.22"
GoVersion = "1.23"
// log level
logLevel = os.Getenv("LOG_LEVEL")
// log path
@@ -67,7 +73,7 @@ func Main() {
}
func runApp() {
c, err := conf.ReadConfig(cli.GetConfigFilePath())
c, err := conf.ReadConfig(path.GetConfigFilePath())
if err != nil {
panic(err)
}
+1 -2
View File
@@ -1,5 +1,4 @@
//go:build wireinject
// +build wireinject
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -32,7 +31,7 @@ import (
"github.com/apache/answer/internal/base/server"
"github.com/apache/answer/internal/base/translator"
"github.com/apache/answer/internal/controller"
"github.com/apache/answer/internal/controller/template_render"
templaterender "github.com/apache/answer/internal/controller/template_render"
"github.com/apache/answer/internal/controller_admin"
"github.com/apache/answer/internal/repo"
"github.com/apache/answer/internal/router"
+56 -36
View File
@@ -38,7 +38,9 @@ import (
"github.com/apache/answer/internal/controller_admin"
"github.com/apache/answer/internal/repo/activity"
"github.com/apache/answer/internal/repo/activity_common"
"github.com/apache/answer/internal/repo/ai_conversation"
"github.com/apache/answer/internal/repo/answer"
"github.com/apache/answer/internal/repo/api_key"
"github.com/apache/answer/internal/repo/auth"
"github.com/apache/answer/internal/repo/badge"
"github.com/apache/answer/internal/repo/badge_award"
@@ -72,8 +74,10 @@ import (
"github.com/apache/answer/internal/service/action"
activity2 "github.com/apache/answer/internal/service/activity"
activity_common2 "github.com/apache/answer/internal/service/activity_common"
"github.com/apache/answer/internal/service/activity_queue"
"github.com/apache/answer/internal/service/activityqueue"
ai_conversation2 "github.com/apache/answer/internal/service/ai_conversation"
"github.com/apache/answer/internal/service/answer_common"
"github.com/apache/answer/internal/service/apikey"
auth2 "github.com/apache/answer/internal/service/auth"
badge2 "github.com/apache/answer/internal/service/badge"
collection2 "github.com/apache/answer/internal/service/collection"
@@ -83,14 +87,16 @@ import (
config2 "github.com/apache/answer/internal/service/config"
"github.com/apache/answer/internal/service/content"
"github.com/apache/answer/internal/service/dashboard"
"github.com/apache/answer/internal/service/event_queue"
"github.com/apache/answer/internal/service/embedding"
"github.com/apache/answer/internal/service/eventqueue"
export2 "github.com/apache/answer/internal/service/export"
"github.com/apache/answer/internal/service/feature_toggle"
file_record2 "github.com/apache/answer/internal/service/file_record"
"github.com/apache/answer/internal/service/follow"
"github.com/apache/answer/internal/service/importer"
meta2 "github.com/apache/answer/internal/service/meta"
"github.com/apache/answer/internal/service/meta_common"
"github.com/apache/answer/internal/service/notice_queue"
"github.com/apache/answer/internal/service/noticequeue"
"github.com/apache/answer/internal/service/notification"
"github.com/apache/answer/internal/service/notification_common"
"github.com/apache/answer/internal/service/object_info"
@@ -114,6 +120,7 @@ import (
"github.com/apache/answer/internal/service/user_common"
user_external_login2 "github.com/apache/answer/internal/service/user_external_login"
user_notification_config2 "github.com/apache/answer/internal/service/user_notification_config"
"github.com/apache/answer/internal/service/vector_sync"
"github.com/segmentfault/pacman"
"github.com/segmentfault/pacman/log"
)
@@ -144,7 +151,8 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
siteInfoCommonService := siteinfo_common.NewSiteInfoCommonService(siteInfoRepo)
langController := controller.NewLangController(i18nTranslator, siteInfoCommonService)
authRepo := auth.NewAuthRepo(dataData)
authService := auth2.NewAuthService(authRepo)
apiKeyRepo := api_key.NewAPIKeyRepo(dataData)
authService := auth2.NewAuthService(authRepo, apiKeyRepo)
userRepo := user.NewUserRepo(dataData)
uniqueIDRepo := unique.NewUniqueIDRepo(dataData)
configRepo := config.NewConfigRepo(dataData)
@@ -172,25 +180,30 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
tagRepo := tag.NewTagRepo(dataData, uniqueIDRepo)
revisionRepo := revision.NewRevisionRepo(dataData, uniqueIDRepo)
revisionService := revision_common.NewRevisionService(revisionRepo, userRepo)
activityQueueService := activity_queue.NewActivityQueueService()
tagCommonService := tag_common2.NewTagCommonService(tagCommonRepo, tagRelRepo, tagRepo, revisionService, siteInfoCommonService, activityQueueService)
service := activityqueue.NewService()
tagCommonService := tag_common2.NewTagCommonService(tagCommonRepo, tagRelRepo, tagRepo, revisionService, siteInfoCommonService, service)
collectionRepo := collection.NewCollectionRepo(dataData, uniqueIDRepo)
collectionCommon := collectioncommon.NewCollectionCommon(collectionRepo)
answerCommon := answercommon.NewAnswerCommon(answerRepo)
metaRepo := meta.NewMetaRepo(dataData)
metaCommonService := metacommon.NewMetaCommonService(metaRepo)
questionCommon := questioncommon.NewQuestionCommon(questionRepo, answerRepo, voteRepo, followRepo, tagCommonService, userCommon, collectionCommon, answerCommon, metaCommonService, configService, activityQueueService, revisionRepo, siteInfoCommonService, dataData)
eventQueueService := event_queue.NewEventQueueService()
userService := content.NewUserService(userRepo, userActiveActivityRepo, activityRepo, emailService, authService, siteInfoCommonService, userRoleRelService, userCommon, userExternalLoginService, userNotificationConfigRepo, userNotificationConfigService, questionCommon, eventQueueService)
questionCommon := questioncommon.NewQuestionCommon(questionRepo, answerRepo, voteRepo, followRepo, tagCommonService, userCommon, collectionCommon, answerCommon, metaCommonService, configService, service, revisionRepo, siteInfoCommonService, dataData)
eventqueueService := eventqueue.NewService()
fileRecordRepo := file_record.NewFileRecordRepo(dataData)
fileRecordService := file_record2.NewFileRecordService(fileRecordRepo, revisionRepo, serviceConf, siteInfoCommonService, userCommon)
userService := content.NewUserService(userRepo, userActiveActivityRepo, activityRepo, emailService, authService, siteInfoCommonService, userRoleRelService, userCommon, userExternalLoginService, userNotificationConfigRepo, userNotificationConfigService, questionCommon, eventqueueService, fileRecordService)
captchaRepo := captcha.NewCaptchaRepo(dataData)
captchaService := action.NewCaptchaService(captchaRepo)
userController := controller.NewUserController(authService, userService, captchaService, emailService, siteInfoCommonService, userNotificationConfigService)
commentRepo := comment.NewCommentRepo(dataData, uniqueIDRepo)
commentCommonRepo := comment.NewCommentCommonRepo(dataData, uniqueIDRepo)
objService := object_info.NewObjService(answerRepo, questionRepo, commentCommonRepo, tagCommonRepo, tagCommonService)
notificationQueueService := notice_queue.NewNotificationQueueService()
externalNotificationQueueService := notice_queue.NewNewQuestionNotificationQueueService()
commentService := comment2.NewCommentService(commentRepo, commentCommonRepo, userCommon, objService, voteRepo, emailService, userRepo, notificationQueueService, externalNotificationQueueService, activityQueueService, eventQueueService)
noticequeueService := noticequeue.NewService()
externalService := noticequeue.NewExternalService()
reviewRepo := review.NewReviewRepo(dataData)
vector_syncService := vector_sync.NewService(dataData)
reviewService := review2.NewReviewService(reviewRepo, objService, userCommon, userRepo, questionRepo, answerRepo, userRoleRelService, externalService, tagCommonService, questionCommon, noticequeueService, siteInfoCommonService, commentCommonRepo, vector_syncService)
commentService := comment2.NewCommentService(commentRepo, commentCommonRepo, userCommon, objService, voteRepo, emailService, userRepo, noticequeueService, externalService, service, eventqueueService, reviewService, vector_syncService)
rolePowerRelRepo := role.NewRolePowerRelRepo(dataData)
rolePowerRelService := role2.NewRolePowerRelService(rolePowerRelRepo, userRoleRelService)
rankService := rank2.NewRankService(userCommon, userRankRepo, objService, userRoleRelService, rolePowerRelService, configService)
@@ -198,19 +211,17 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
rateLimitMiddleware := middleware.NewRateLimitMiddleware(limitRepo)
commentController := controller.NewCommentController(commentService, rankService, captchaService, rateLimitMiddleware)
reportRepo := report.NewReportRepo(dataData, uniqueIDRepo)
tagService := tag2.NewTagService(tagRepo, tagCommonService, revisionService, followRepo, siteInfoCommonService, activityQueueService)
answerActivityRepo := activity.NewAnswerActivityRepo(dataData, activityRepo, userRankRepo, notificationQueueService)
tagService := tag2.NewTagService(tagRepo, tagCommonService, revisionService, followRepo, siteInfoCommonService, service)
answerActivityRepo := activity.NewAnswerActivityRepo(dataData, activityRepo, userRankRepo, noticequeueService)
answerActivityService := activity2.NewAnswerActivityService(answerActivityRepo, configService)
externalNotificationService := notification.NewExternalNotificationService(dataData, userNotificationConfigRepo, followRepo, emailService, userRepo, externalNotificationQueueService, userExternalLoginRepo, siteInfoCommonService)
reviewRepo := review.NewReviewRepo(dataData)
reviewService := review2.NewReviewService(reviewRepo, objService, userCommon, userRepo, questionRepo, answerRepo, userRoleRelService, externalNotificationQueueService, tagCommonService, questionCommon, notificationQueueService, siteInfoCommonService)
questionService := content.NewQuestionService(activityRepo, questionRepo, answerRepo, tagCommonService, tagService, questionCommon, userCommon, userRepo, userRoleRelService, revisionService, metaCommonService, collectionCommon, answerActivityService, emailService, notificationQueueService, externalNotificationQueueService, activityQueueService, siteInfoCommonService, externalNotificationService, reviewService, configService, eventQueueService, reviewRepo)
answerService := content.NewAnswerService(answerRepo, questionRepo, questionCommon, userCommon, collectionCommon, userRepo, revisionService, answerActivityService, answerCommon, voteRepo, emailService, userRoleRelService, notificationQueueService, externalNotificationQueueService, activityQueueService, reviewService, eventQueueService)
externalNotificationService := notification.NewExternalNotificationService(dataData, userNotificationConfigRepo, followRepo, emailService, userRepo, externalService, userExternalLoginRepo, siteInfoCommonService)
questionService := content.NewQuestionService(activityRepo, questionRepo, answerRepo, tagCommonService, tagService, questionCommon, userCommon, userRepo, userRoleRelService, revisionService, metaCommonService, collectionCommon, answerActivityService, emailService, noticequeueService, externalService, service, siteInfoCommonService, externalNotificationService, reviewService, configService, eventqueueService, reviewRepo, vector_syncService)
answerService := content.NewAnswerService(answerRepo, questionRepo, questionCommon, userCommon, collectionCommon, userRepo, revisionService, answerActivityService, answerCommon, voteRepo, emailService, userRoleRelService, noticequeueService, externalService, service, reviewService, eventqueueService, vector_syncService)
reportHandle := report_handle.NewReportHandle(questionService, answerService, commentService)
reportService := report2.NewReportService(reportRepo, objService, userCommon, answerRepo, questionRepo, commentCommonRepo, reportHandle, configService, eventQueueService)
reportService := report2.NewReportService(reportRepo, objService, userCommon, answerRepo, questionRepo, commentCommonRepo, reportHandle, configService, eventqueueService)
reportController := controller.NewReportController(reportService, rankService, captchaService)
contentVoteRepo := activity.NewVoteRepo(dataData, activityRepo, userRankRepo, notificationQueueService)
voteService := content.NewVoteService(contentVoteRepo, configService, questionRepo, answerRepo, commentCommonRepo, objService, eventQueueService)
contentVoteRepo := activity.NewVoteRepo(dataData, activityRepo, userRankRepo, noticequeueService)
voteService := content.NewVoteService(contentVoteRepo, configService, questionRepo, answerRepo, commentCommonRepo, objService, eventqueueService)
voteController := controller.NewVoteController(voteService, rankService, captchaService)
tagController := controller.NewTagController(tagService, tagCommonService, rankService)
followFollowRepo := activity.NewFollowRepo(dataData, uniqueIDRepo, activityRepo)
@@ -226,34 +237,32 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
searchService := content.NewSearchService(searchParser, searchRepo)
searchController := controller.NewSearchController(searchService, captchaService)
reviewActivityRepo := activity.NewReviewActivityRepo(dataData, activityRepo, userRankRepo, configService)
contentRevisionService := content.NewRevisionService(revisionRepo, userCommon, questionCommon, answerService, objService, questionRepo, answerRepo, tagRepo, tagCommonService, notificationQueueService, activityQueueService, reportRepo, reviewService, reviewActivityRepo)
contentRevisionService := content.NewRevisionService(revisionRepo, userCommon, questionCommon, answerService, objService, questionRepo, answerRepo, tagRepo, tagCommonService, noticequeueService, service, reportRepo, reviewService, reviewActivityRepo)
revisionController := controller.NewRevisionController(contentRevisionService, rankService)
rankController := controller.NewRankController(rankService)
userAdminRepo := user.NewUserAdminRepo(dataData, authRepo)
notificationRepo := notification2.NewNotificationRepo(dataData)
pluginUserConfigRepo := plugin_config.NewPluginUserConfigRepo(dataData)
badgeAwardRepo := badge_award.NewBadgeAwardRepo(dataData, uniqueIDRepo)
userAdminService := user_admin.NewUserAdminService(userAdminRepo, userRoleRelService, authService, userCommon, userActiveActivityRepo, siteInfoCommonService, emailService, questionRepo, answerRepo, commentCommonRepo, userExternalLoginRepo, notificationRepo, pluginUserConfigRepo, badgeAwardRepo)
userAdminService := user_admin.NewUserAdminService(userAdminRepo, userRoleRelService, authService, userCommon, userActiveActivityRepo, siteInfoCommonService, emailService, questionRepo, answerRepo, commentCommonRepo, userExternalLoginRepo, notificationRepo, pluginUserConfigRepo, badgeAwardRepo, apiKeyRepo)
userAdminController := controller_admin.NewUserAdminController(userAdminService)
reasonRepo := reason.NewReasonRepo(configService)
reasonService := reason2.NewReasonService(reasonRepo)
reasonController := controller.NewReasonController(reasonService)
themeController := controller_admin.NewThemeController()
siteInfoService := siteinfo.NewSiteInfoService(siteInfoRepo, siteInfoCommonService, emailService, tagCommonService, configService, questionCommon)
siteInfoService := siteinfo.NewSiteInfoService(siteInfoRepo, siteInfoCommonService, emailService, tagCommonService, configService, questionCommon, fileRecordService)
siteInfoController := controller_admin.NewSiteInfoController(siteInfoService)
controllerSiteInfoController := controller.NewSiteInfoController(siteInfoCommonService)
notificationCommon := notificationcommon.NewNotificationCommon(dataData, notificationRepo, userCommon, activityRepo, followRepo, objService, notificationQueueService, userExternalLoginRepo, siteInfoCommonService)
notificationCommon := notificationcommon.NewNotificationCommon(dataData, notificationRepo, userCommon, activityRepo, followRepo, objService, noticequeueService, userExternalLoginRepo, siteInfoCommonService)
badgeRepo := badge.NewBadgeRepo(dataData, uniqueIDRepo)
notificationService := notification.NewNotificationService(dataData, notificationRepo, notificationCommon, revisionService, userRepo, reportRepo, reviewService, badgeRepo)
notificationController := controller.NewNotificationController(notificationService, rankService)
dashboardService := dashboard.NewDashboardService(questionRepo, answerRepo, commentCommonRepo, voteRepo, userRepo, reportRepo, configService, siteInfoCommonService, serviceConf, reviewService, revisionRepo, dataData)
dashboardController := controller.NewDashboardController(dashboardService)
fileRecordRepo := file_record.NewFileRecordRepo(dataData)
fileRecordService := file_record2.NewFileRecordService(fileRecordRepo, revisionRepo, serviceConf, siteInfoCommonService)
uploaderService := uploader.NewUploaderService(serviceConf, siteInfoCommonService, fileRecordService)
uploadController := controller.NewUploadController(uploaderService)
activityActivityRepo := activity.NewActivityRepo(dataData, configService)
activityCommon := activity_common2.NewActivityCommon(activityRepo, activityQueueService)
activityCommon := activity_common2.NewActivityCommon(activityRepo, service)
commentCommonService := comment_common.NewCommentCommonService(commentCommonRepo)
activityService := activity2.NewActivityService(activityActivityRepo, userCommon, activityCommon, tagCommonService, objService, commentCommonService, revisionService, metaCommonService, configService)
activityController := controller.NewActivityController(activityService)
@@ -265,23 +274,33 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
permissionController := controller.NewPermissionController(rankService)
userPluginController := controller.NewUserPluginController(pluginCommonService)
reviewController := controller.NewReviewController(reviewService, rankService, captchaService)
metaService := meta2.NewMetaService(metaCommonService, userCommon, answerRepo, questionRepo, eventQueueService)
metaService := meta2.NewMetaService(metaCommonService, userCommon, answerRepo, questionRepo, eventqueueService)
metaController := controller.NewMetaController(metaService)
badgeGroupRepo := badge_group.NewBadgeGroupRepo(dataData, uniqueIDRepo)
eventRuleRepo := badge.NewEventRuleRepo(dataData)
badgeAwardService := badge2.NewBadgeAwardService(badgeAwardRepo, badgeRepo, userCommon, objService, notificationQueueService)
badgeEventService := badge2.NewBadgeEventService(dataData, eventQueueService, badgeRepo, eventRuleRepo, badgeAwardService)
badgeAwardService := badge2.NewBadgeAwardService(badgeAwardRepo, badgeRepo, userCommon, objService, noticequeueService)
badgeEventService := badge2.NewBadgeEventService(dataData, eventqueueService, badgeRepo, eventRuleRepo, badgeAwardService)
badgeService := badge2.NewBadgeService(badgeRepo, badgeGroupRepo, badgeAwardRepo, badgeEventService, siteInfoCommonService)
badgeController := controller.NewBadgeController(badgeService, badgeAwardService)
controller_adminBadgeController := controller_admin.NewBadgeController(badgeService)
answerAPIRouter := router.NewAnswerAPIRouter(langController, userController, commentController, reportController, voteController, tagController, followController, collectionController, questionController, answerController, searchController, revisionController, rankController, userAdminController, reasonController, themeController, siteInfoController, controllerSiteInfoController, notificationController, dashboardController, uploadController, activityController, roleController, pluginController, permissionController, userPluginController, reviewController, metaController, badgeController, controller_adminBadgeController)
apiKeyService := apikey.NewAPIKeyService(apiKeyRepo)
adminAPIKeyController := controller_admin.NewAdminAPIKeyController(apiKeyService)
featureToggleService := feature_toggle.NewFeatureToggleService(siteInfoRepo)
embeddingService := embedding.NewEmbeddingService()
mcpController := controller.NewMCPController(searchService, siteInfoCommonService, tagCommonService, questionCommon, commentRepo, userCommon, answerRepo, featureToggleService, embeddingService)
aiConversationRepo := ai_conversation.NewAIConversationRepo(dataData)
aiConversationService := ai_conversation2.NewAIConversationService(aiConversationRepo, userCommon)
aiController := controller.NewAIController(searchService, siteInfoCommonService, tagCommonService, questionCommon, commentRepo, userCommon, answerRepo, mcpController, aiConversationService, featureToggleService)
aiConversationController := controller.NewAIConversationController(aiConversationService, featureToggleService)
aiConversationAdminController := controller_admin.NewAIConversationAdminController(aiConversationService, featureToggleService)
answerAPIRouter := router.NewAnswerAPIRouter(langController, userController, commentController, reportController, voteController, tagController, followController, collectionController, questionController, answerController, searchController, revisionController, rankController, userAdminController, reasonController, themeController, siteInfoController, controllerSiteInfoController, notificationController, dashboardController, uploadController, activityController, roleController, pluginController, permissionController, userPluginController, reviewController, metaController, badgeController, controller_adminBadgeController, adminAPIKeyController, aiController, aiConversationController, aiConversationAdminController, mcpController)
swaggerRouter := router.NewSwaggerRouter(swaggerConf)
uiRouter := router.NewUIRouter(controllerSiteInfoController, siteInfoCommonService)
authUserMiddleware := middleware.NewAuthUserMiddleware(authService, siteInfoCommonService)
avatarMiddleware := middleware.NewAvatarMiddleware(serviceConf, uploaderService)
shortIDMiddleware := middleware.NewShortIDMiddleware(siteInfoCommonService)
templateRenderController := templaterender.NewTemplateRenderController(questionService, userService, tagService, answerService, commentService, siteInfoCommonService, questionRepo)
templateController := controller.NewTemplateController(templateRenderController, siteInfoCommonService, eventQueueService, userService, questionService)
templateController := controller.NewTemplateController(templateRenderController, siteInfoCommonService, eventqueueService, userService, questionService)
templateRouter := router.NewTemplateRouter(templateController, templateRenderController, siteInfoController, authUserMiddleware)
connectorController := controller.NewConnectorController(siteInfoCommonService, emailService, userExternalLoginService)
userCenterLoginService := user_external_login2.NewUserCenterLoginService(userRepo, userCommon, userExternalLoginRepo, userActiveActivityRepo, siteInfoCommonService)
@@ -289,9 +308,10 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
captchaController := controller.NewCaptchaController()
embedController := controller.NewEmbedController()
renderController := controller.NewRenderController()
pluginAPIRouter := router.NewPluginAPIRouter(connectorController, userCenterController, captchaController, embedController, renderController)
sidebarController := controller.NewSidebarController()
pluginAPIRouter := router.NewPluginAPIRouter(connectorController, userCenterController, captchaController, embedController, renderController, sidebarController)
ginEngine := server.NewHTTPServer(debug, staticRouter, answerAPIRouter, swaggerRouter, uiRouter, authUserMiddleware, avatarMiddleware, shortIDMiddleware, templateRouter, pluginAPIRouter, uiConf)
scheduledTaskManager := cron.NewScheduledTaskManager(siteInfoCommonService, questionService, fileRecordService, serviceConf)
scheduledTaskManager := cron.NewScheduledTaskManager(siteInfoCommonService, questionService, fileRecordService, userAdminService, serviceConf)
application := newApplication(serverConf, ginEngine, scheduledTaskManager)
return application, func() {
cleanup2()
+1
View File
@@ -40,4 +40,5 @@ ui:
public_url: '/'
api_url: '/'
base_url: ''
api_base_url: ''
+1941 -257
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 96 KiB

+38 -32
View File
@@ -214,11 +214,12 @@ Apache 2.0 licenses
The following components are provided under the Apache 2.0 License.
(Apache License, Version 2.0) react-helmet-async (https://github.com/staylor/react-helmet-async) [link](./licenses/LICENSE-staylor-react-helmet-async.txt)
(Apache License, Version 2.0) golang-mock (https://github.com/golang/mock) [link](./licenses/LICENSE-golang-mock.txt)
(Apache License, Version 2.0) gomock (https://github.com/uber-go/mock) [link](./licenses/LICENSE-uber-go-mock.txt)
(Apache License, Version 2.0) google-wire (https://github.com/google/wire) [link](./licenses/LICENSE-google-wire.txt)
(Apache License, Version 2.0) mojocn-base64Captcha (https://github.com/mojocn/base64Captcha) [link](./licenses/LICENSE-mojocn-base64Captcha.txt)
(Apache License, Version 2.0) ory-dockertest (https://github.com/ory/dockertest) [link](./licenses/LICENSE-ory-dockertest.txt)
(Apache License, Version 2.0) react-helmet-async (https://github.com/staylor/react-helmet-async) [link](./licenses/LICENSE-staylor-react-helmet-async.txt)
(Apache License, Version 2.0) sashabaranov-go-openai (https://github.com/sashabaranov/go-openai) [link](./licenses/LICENSE-sashabaranov-go-openai.txt)
(Apache License, Version 2.0) spf13-cobra (https://github.com/spf13/cobra) [link](./licenses/LICENSE-spf13-cobra.txt)
========================================================================
@@ -227,57 +228,62 @@ MIT licenses
The following components are provided under the MIT License. See project link for details.
(MIT License) axios (https://github.com/axios/axios) [link](./licenses/LICENSE-axios-axios.txt)
(MIT License) bootstrap (https://github.com/twbs/bootstrap) [link](./licenses/LICENSE-twbs-bootstrap.txt)
(MIT License) icons (https://github.com/twbs/icons) [link](./licenses/LICENSE-twbs-icons.txt)
(MIT License) classnames (https://github.com/JedWatson/classnames) [link](./LICENSE-JedWatson-classnames.txt)
(MIT License) codemirror (https://github.com/codemirror/basic-setup) [link](./licenses/LICENSE-codemirror-basic-setup.txt)
(MIT License) @codemirror/lang-markdown (https://github.com/codemirror/lang-markdown) [link](./licenses/LICENSE-codemirror-lang-markdown.txt)
(MIT License) @codemirror/language-data (https://github.com/codemirror/language-data) [link](./licenses/LICENSE-codemirror-language-data.txt)
(MIT License) @codemirror/state (https://github.com/codemirror/state) [link](./licenses/LICENSE-codemirror-state.txt)
(MIT License) @codemirror/view (https://github.com/codemirror/view) [link](./licenses/LICENSE-codemirror-view.txt)
(MIT License) anargu-gin-brotli (https://github.com/anargu/gin-brotli) [link](./licenses/LICENSE-anargu-gin-brotli.txt)
(MIT License) asaskevich-govalidator (https://github.com/asaskevich/govalidator) [link](./licenses/LICENSE-asaskevich-govalidator.txt)
(MIT License) axios (https://github.com/axios/axios) [link](./licenses/LICENSE-axios-axios.txt)
(MIT License) bootstrap (https://github.com/twbs/bootstrap) [link](./licenses/LICENSE-twbs-bootstrap.txt)
(MIT License) classnames (https://github.com/JedWatson/classnames) [link](./LICENSE-JedWatson-classnames.txt)
(MIT License) codemirror (https://github.com/codemirror/basic-setup) [link](./licenses/LICENSE-codemirror-basic-setup.txt)
(MIT License) color (https://github.com/Qix-/color) [link](./licenses/LICENSE-Qix--color.txt)
(MIT License) copy-to-clipboard (https://github.com/sudodoki/copy-to-clipboard) [link](./licenses/LICENSE-sudodoki-copy-to-clipboard.txt)
(MIT License) dayjs (https://github.com/iamkun/dayjs) [link](./licenses/LICENSE-iamkun-dayjs.txt)
(MIT License) disintegration-imaging (https://github.com/disintegration/imaging) [link](./licenses/LICENSE-disintegration-imaging.txt)
(MIT License) front-matter (https://github.com/jxson/front-matter) [link](./licenses/LICENSE-jxson-front-matter.txt)
(MIT License) gin-gonic-gin (https://github.com/gin-gonic/gin) [link](./licenses/LICENSE-gin-gonic-gin.txt)
(MIT License) go-gomail-gomail (https://gopkg.in/gomail.v2) [link](./licenses/LICENSE-go-gomail-gomail.txt)
(MIT License) go-playground-locales (https://github.com/go-playground/locales) [link](./licenses/LICENSE-go-playground-locales.txt)
(MIT License) go-playground-universal-translator (https://github.com/go-playground/universal-translator) [link](./licenses/LICENSE-go-playground-universal-translator.txt)
(MIT License) go-playground-validator (https://github.com/go-playground/validator) [link](./licenses/LICENSE-go-playground-validator.txt)
(MIT License) go-resty-resty (https://github.com/go-resty/resty) [link](./licenses/LICENSE-go-resty-resty.txt)
(MIT License) goccy-go-json (https://github.com/goccy/go-json) [link](./licenses/LICENSE-goccy-go-json.txt)
(MIT License) i18next (https://github.com/i18next/i18next) [link](./licenses/LICENSE-i18next-i18next.txt)
(MIT License) icons (https://github.com/twbs/icons) [link](./licenses/LICENSE-twbs-icons.txt)
(MIT License) jinzhu-copier (https://github.com/jinzhu/copier) [link](./licenses/LICENSE-jinzhu-copier.txt)
(MIT License) jinzhu-now (https://github.com/jinzhu/now) [link](./licenses/LICENSE-jinzhu-now.txt)
(MIT License) joho-godotenv (https://github.com/joho/godotenv) [link](./licenses/LICENSE-joho-godotenv.txt)
(MIT License) jordan-wright-email (https://github.com/jordan-wright/email) [link](./licenses/LICENSE-jordan-wright-email.txt)
(MIT License) js-sha256 (https://github.com/emn178/js-sha256) [link](./licenses/LICENSE-emn178-js-sha256.txt)
(MIT License) lib-pq (https://github.com/lib/pq) [link](./licenses/LICENSE-lib-pq.txt)
(MIT License) lodash (https://github.com/lodash/lodash) [link](./licenses/LICENSE-lodash-lodash.txt)
(MIT License) Machiel-slugify (https://github.com/Machiel/slugify) [link](./licenses/LICENSE-Machiel-slugify.txt)
(MIT License) mark3labs-mcp-go (https://github.com/mark3labs/mcp-go) [link](./licenses/LICENSE-mark3labs-mcp-go.txt)
(MIT License) marked (https://github.com/markedjs/marked) [link](./licenses/LICENSE-markedjs-marked.txt)
(MIT License) Masterminds-semver (https://github.com/Masterminds/semver) [link](./licenses/LICENSE-Masterminds-semver.txt)
(MIT License) mattn-go-sqlite3 (https://github.com/mattn/go-sqlite3) [link](./licenses/LICENSE-mattn-go-sqlite3.txt)
(MIT License) mozillazg-go-pinyin (https://github.com/mozillazg/go-pinyin) [link](./licenses/LICENSE-mozillazg-go-pinyin.txt)
(MIT License) mozillazg-go-unidecode (https://github.com/mozillazg/go-unidecode) [link](./licenses/LICENSE-mozillazg-go-unidecode.txt)
(MIT License) next-share (https://github.com/Bunlong/next-share) [link](./licenses/LIcENSE-Bunlong-next-share.txt)
(MIT License) node-qrcode (https://github.com/soldair/node-qrcode) [link](./licenses/LICENSE-soldair-qrcode.txt)
(MIT License) react (https://github.com/facebook/react) [link](./licenses/LICENSE-facebook-react.txt)
(MIT License) react-bootstrap (https://github.com/react-bootstrap/react-bootstrap) [link](./licenses/LICENSE-react-bootstrap-react-bootstrap.txt)
(MIT License) react-i18next (https://github.com/i18next/react-i18next) [link](./licenses/LICENSE-i18next-react-i18next.txt)
(MIT License) react-router (https://github.com/remix-run/react-router) [link](./licenses/LICENSE-remix-run-react-router.txt)
(MIT License) swr (https://github.com/vercel/swr) [link](./licenses/LICENSE-vercel-swr.txt)
(MIT License) zustand (https://github.com/pmndrs/zustand) [link](./licenses/LICENSE-pmndrs-zustand.txt)
(MIT License) mozillazg-go-pinyin (https://github.com/mozillazg/go-pinyin) [link](./licenses/LICENSE-mozillazg-go-pinyin.txt)
(MIT License) Machiel-slugify (https://github.com/Machiel/slugify) [link](./licenses/LICENSE-Machiel-slugify.txt)
(MIT License) Masterminds-semver (https://github.com/Masterminds/semver) [link](./licenses/LICENSE-Masterminds-semver.txt)
(MIT License) anargu-gin-brotli (https://github.com/anargu/gin-brotli) [link](./licenses/LICENSE-anargu-gin-brotli.txt)
(MIT License) asaskevich-govalidator (https://github.com/asaskevich/govalidator) [link](./licenses/LICENSE-asaskevich-govalidator.txt)
(MIT License) disintegration-imaging (https://github.com/disintegration/imaging) [link](./licenses/LICENSE-disintegration-imaging.txt)
(MIT License) gin-gonic-gin (https://github.com/gin-gonic/gin) [link](./licenses/LICENSE-gin-gonic-gin.txt)
(MIT License) go-playground-locales (https://github.com/go-playground/locales) [link](./licenses/LICENSE-go-playground-locales.txt)
(MIT License) go-playground-universal-translator (https://github.com/go-playground/universal-translator) [link](./licenses/LICENSE-go-playground-universal-translator.txt)
(MIT License) go-playground-validator (https://github.com/go-playground/validator) [link](./licenses/LICENSE-go-playground-validator.txt)
(MIT License) goccy-go-json (https://github.com/goccy/go-json) [link](./licenses/LICENSE-goccy-go-json.txt)
(MIT License) jinzhu-copier (https://github.com/jinzhu/copier) [link](./licenses/LICENSE-jinzhu-copier.txt)
(MIT License) jinzhu-now (https://github.com/jinzhu/now) [link](./licenses/LICENSE-jinzhu-now.txt)
(MIT License) jordan-wright-email (https://github.com/jordan-wright/email) [link](./licenses/LICENSE-jordan-wright-email.txt)
(MIT License) lib-pq (https://github.com/lib/pq) [link](./licenses/LICENSE-lib-pq.txt)
(MIT License) mattn-go-sqlite3 (https://github.com/mattn/go-sqlite3) [link](./licenses/LICENSE-mattn-go-sqlite3.txt)
(MIT License) segmentfault-pacman (https://github.com/segmentfault/pacman) [link](./licenses/LICENSE-segmentfault-pacman.txt)
(MIT License) robfig-cron (https://github.com/robfig/cron) [link](./licenses/LICENSE-robfig-cron.txt)
(MIT License) scottleedavis-go-exif-remove (https://github.com/scottleedavis/go-exif-remove) [link](./licenses/LICENSE-scottleedavis-go-exif-remove.txt)
(MIT License) segmentfault-pacman (https://github.com/segmentfault/pacman) [link](./licenses/LICENSE-segmentfault-pacman.txt)
(MIT License) stretchr-testify (https://github.com/stretchr/testify) [link](./licenses/LICENSE-stretchr-testify.txt)
(MIT License) swaggo-files (https://github.com/swaggo/files) [link](./licenses/LICENSE-swaggo-files.txt)
(MIT License) swaggo-gin-swagger (https://github.com/swaggo/gin-swagger) [link](./licenses/LICENSE-swaggo-gin-swagger.txt)
(MIT License) swaggo-swag (https://github.com/swaggo/swag) [link](./licenses/LICENSE-swaggo-swag.txt)
(MIT License) swr (https://github.com/vercel/swr) [link](./licenses/LICENSE-vercel-swr.txt)
(MIT License) tidwall-gjson (https://github.com/tidwall/gjson) [link](./licenses/LICENSE-tidwall-gjson.txt)
(MIT License) uuidjs-uuid (https://github.com/uuidjs/uuid) [link](./licenses/LICENSE-uuidjs-uuid.txt)
(MIT License) yuin-goldmark (https://github.com/yuin/goldmark) [link](./licenses/LICENSE-yuin-goldmark.txt)
(MIT License) go-gomail-gomail (https://gopkg.in/gomail.v2) [link](./licenses/LICENSE-go-gomail-gomail.txt)
(MIT License) front-matter (https://github.com/jxson/front-matter) [link](./licenses/LICENSE-jxson-front-matter.txt)
(MIT License) js-sha256 (https://github.com/emn178/js-sha256) [link](./licenses/LICENSE-emn178-js-sha256.txt)
(MIT License) zustand (https://github.com/pmndrs/zustand) [link](./licenses/LICENSE-pmndrs-zustand.txt)
========================================================================
BSD licenses
@@ -286,13 +292,13 @@ BSD licenses
The following components are provided under a BSD license. See project link for details.
(BSD 2-Clause) bwmarrin-snowflake (https://github.com/bwmarrin/snowflake) [link](./licenses/LICENSE-bwmarrin-snowflake.txt)
(BSD 2-Clause) xorm (https://xorm.io/xorm) [link](./licenses/LICENSE-xorm.txt)
(BSD 3-Clause) cznic-sqlite (https://modernc.org/sqlite) [link](./licenses/LICENSE-cznic-sqlite.txt)
(BSD 3-Clause) google-uuid (https://github.com/google/uuid) [link](./licenses/LICENSE-google-uuid.txt)
(BSD 3-Clause) grokify-html-strip-tags-go (https://github.com/grokify/html-strip-tags-go) [link](./licenses/LICENSE-grokify-html-strip-tags-go.txt)
(BSD 3-Clause) microcosm-cc-bluemonday (https://github.com/microcosm-cc/bluemonday) [link](./licenses/LICENSE-microcosm-cc-bluemonday.txt)
(BSD 3-Clause) cznic-sqlite (https://modernc.org/sqlite) [link](./licenses/LICENSE-cznic-sqlite.txt)
(BSD 3-Clause) jsdiff (https://github.com/kpdecker/jsdiff) [link](./licenses/LICENSE-kpdecker-jsdiff.txt)
(BSD 3-Clause) microcosm-cc-bluemonday (https://github.com/microcosm-cc/bluemonday) [link](./licenses/LICENSE-microcosm-cc-bluemonday.txt)
(BSD 3-Clause) qs (https://github.com/ljharb/qs) [link](./licenses/LICENSE-ljharb-qs.txt)
(BSD 2-Clause) xorm (https://xorm.io/xorm) [link](./licenses/LICENSE-xorm.txt)
========================================================================
ISC licenses
+1 -1
View File
@@ -1,5 +1,5 @@
Apache Answer
Copyright 2025 The Apache Software Foundation
Copyright 2023-2026 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (https://www.apache.org/).
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2015-present Jeevanandam M., https://myjeeva.com <jeeva@myjeeva.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,22 @@
Copyright (c) 2013 John Barton
MIT License
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Anthropic, PBC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 mozillazg
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
@@ -0,0 +1,9 @@
The MIT License (MIT)
Copyright (c) 2010-2020 Robert Kieffer and other contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+1941 -257
View File
File diff suppressed because it is too large Load Diff
+1222 -181
View File
File diff suppressed because it is too large Load Diff
+21 -8
View File
@@ -17,7 +17,7 @@
module github.com/apache/answer
go 1.22.0
go 1.25.0
require (
github.com/Machiel/slugify v1.0.1
@@ -30,6 +30,7 @@ require (
github.com/go-playground/locales v0.14.1
github.com/go-playground/universal-translator v0.18.1
github.com/go-playground/validator/v10 v10.22.1
github.com/go-resty/resty/v2 v2.17.1
github.com/go-sql-driver/mysql v1.8.1
github.com/goccy/go-json v0.10.3
github.com/google/uuid v1.6.0
@@ -37,11 +38,15 @@ require (
github.com/grokify/html-strip-tags-go v0.1.0
github.com/jinzhu/copier v0.4.0
github.com/jinzhu/now v1.1.5
github.com/joho/godotenv v1.5.1
github.com/lib/pq v1.10.9
github.com/mark3labs/mcp-go v0.43.2
github.com/microcosm-cc/bluemonday v1.0.27
github.com/mozillazg/go-pinyin v0.20.0
github.com/mozillazg/go-unidecode v0.2.0
github.com/ory/dockertest/v3 v3.11.0
github.com/robfig/cron/v3 v3.0.1
github.com/sashabaranov/go-openai v1.41.2
github.com/scottleedavis/go-exif-remove v0.0.0-20230314195146-7e059d593405
github.com/segmentfault/pacman v1.0.5-0.20230822083413-c0075a2d401f
github.com/segmentfault/pacman/contrib/cache/memory v0.0.0-20230822083413-c0075a2d401f
@@ -56,11 +61,11 @@ require (
github.com/swaggo/swag v1.16.3
github.com/tidwall/gjson v1.17.3
github.com/yuin/goldmark v1.7.4
go.uber.org/mock v0.5.0
golang.org/x/crypto v0.27.0
go.uber.org/mock v0.6.0
golang.org/x/crypto v0.53.0
golang.org/x/image v0.20.0
golang.org/x/net v0.29.0
golang.org/x/text v0.18.0
golang.org/x/term v0.44.0
golang.org/x/text v0.39.0
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
gopkg.in/yaml.v3 v3.0.1
modernc.org/sqlite v1.33.0
@@ -78,6 +83,8 @@ require (
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect
github.com/andybalholm/brotli v1.1.0 // indirect
github.com/aymerick/douceur v0.2.0 // indirect
github.com/bahlo/generic-list-go v0.2.0 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
github.com/bytedance/sonic v1.12.2 // indirect
github.com/bytedance/sonic/loader v0.2.0 // indirect
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
@@ -116,6 +123,7 @@ require (
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/invopop/jsonschema v0.13.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
@@ -144,7 +152,7 @@ require (
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.11.0 // indirect
github.com/spf13/cast v1.7.0 // indirect
github.com/spf13/cast v1.7.1 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.19.0 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
@@ -153,15 +161,18 @@ require (
github.com/tidwall/pretty v1.2.1 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/arch v0.10.0 // indirect
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
golang.org/x/sys v0.25.0 // indirect
golang.org/x/tools v0.25.0 // indirect
golang.org/x/net v0.56.0 // indirect
golang.org/x/sys v0.46.0 // indirect
golang.org/x/tools v0.47.0 // indirect
google.golang.org/protobuf v1.34.2 // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
@@ -177,3 +188,5 @@ require (
replace lukechampine.com/uint128 v1.1.1 => github.com/aichy126/uint128 v1.1.1
replace modernc.org/cc/v3 v3.40.0 => gitlab.com/cznic/cc/v3 v3.40.0
replace github.com/lyft/protoc-gen-validate v0.0.13 => github.com/LinkinStars/protoc-gen-validate v0.0.0-20251030022322-3fddbbe5a0e6
+43 -19
View File
@@ -17,6 +17,7 @@ github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
github.com/LinkinStars/go-i18n/v2 v2.2.2 h1:ZfjpzbW13dv6btv3RALKZkpN9A+7K1JA//2QcNeWaxU=
github.com/LinkinStars/go-i18n/v2 v2.2.2/go.mod h1:hLglSJ4/3M0Y7ZVcoEJI+OwqkglHCA32DdjuJJR2LbM=
github.com/LinkinStars/protoc-gen-validate v0.0.0-20251030022322-3fddbbe5a0e6/go.mod h1:Lu7LbM9PBAPmasRqVew2kylj56Z1vH/UUM2REVkLh7k=
github.com/Machiel/slugify v1.0.1 h1:EfWSlRWstMadsgzmiV7d0yVd2IFlagWH68Q+DcYCm4E=
github.com/Machiel/slugify v1.0.1/go.mod h1:fTFGn5uWEynW4CUMG7sWkYXOf1UgDxyTM3DbR6Qfg3k=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
@@ -53,10 +54,14 @@ github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/bytedance/sonic v1.12.2 h1:oaMFuRTpMHYLpCntGca65YWt5ny+wAceDERTkT2L9lg=
@@ -196,6 +201,8 @@ github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA=
github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
github.com/go-resty/resty/v2 v2.17.1 h1:x3aMpHK1YM9e4va/TMDRlusDDoZiQ+ViDu/WpA6xTM4=
github.com/go-resty/resty/v2 v2.17.1/go.mod h1:kCKZ3wWmwJaNc7S29BRtUhJwy7iqmn+2mLtQrOyQlVA=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
@@ -300,6 +307,8 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E=
github.com/invopop/jsonschema v0.13.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
@@ -353,6 +362,8 @@ github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg=
github.com/jonboulle/clockwork v0.3.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
@@ -403,11 +414,12 @@ github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mark3labs/mcp-go v0.43.2 h1:21PUSlWWiSbUPQwXIJ5WKlETixpFpq+WBpbMGDSVy/I=
github.com/mark3labs/mcp-go v0.43.2/go.mod h1:YnJfOL382MIWDx1kMY+2zsRHU/q78dBg9aFb8W6Thdw=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
@@ -450,6 +462,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mozillazg/go-pinyin v0.20.0 h1:BtR3DsxpApHfKReaPO1fCqF4pThRwH9uwvXzm+GnMFQ=
github.com/mozillazg/go-pinyin v0.20.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc=
github.com/mozillazg/go-unidecode v0.2.0 h1:vFGEzAH9KSwyWmXCOblazEWDh7fOkpmy/Z4ArmamSUc=
github.com/mozillazg/go-unidecode v0.2.0/go.mod h1:zB48+/Z5toiRolOZy9ksLryJ976VIwmDmpQ2quyt1aA=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
@@ -541,6 +555,8 @@ github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/sashabaranov/go-openai v1.41.2 h1:vfPRBZNMpnqu8ELsclWcAvF19lDNgh1t6TVfFFOPiSM=
github.com/sashabaranov/go-openai v1.41.2/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/scottleedavis/go-exif-remove v0.0.0-20230314195146-7e059d593405 h1:2ieGkj4z/YPXVyQ2ayZUg3GwE1pYWd5f1RB6DzAOXKM=
github.com/scottleedavis/go-exif-remove v0.0.0-20230314195146-7e059d593405/go.mod h1:rIxVzVLKlBwLxO+lC+k/I4HJfRQcemg/f/76Xmmzsec=
@@ -574,8 +590,8 @@ github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9yS
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
@@ -628,6 +644,8 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
@@ -636,6 +654,8 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:
github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
@@ -654,8 +674,8 @@ go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU=
go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM=
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
@@ -685,8 +705,8 @@ golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWP
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto=
golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
@@ -703,8 +723,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ=
golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -731,8 +751,8 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo=
golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o=
golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -743,8 +763,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM=
golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -779,12 +799,14 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc=
golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -793,10 +815,12 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224=
golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
golang.org/x/text v0.39.0 h1:UbZz4pLOvn600D6Oh6GGEI6VAmndrEBLv8/6BEXzyus=
golang.org/x/text v0.39.0/go.mod h1:3UwRclnC2g0TU9x8PZiyfOajCd1zaUNHF9cvqcQZ+ZM=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -818,8 +842,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q=
golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA=
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+3 -3
View File
@@ -678,13 +678,13 @@ ui:
display_name:
label: Display Name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+3 -3
View File
@@ -678,13 +678,13 @@ ui:
display_name:
label: Display Name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+1 -1
View File
@@ -677,7 +677,7 @@ ui:
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters
character: 'Must use the character set "a-z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+1 -1
View File
@@ -677,7 +677,7 @@ ui:
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters
character: 'Must use the character set "a-z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+1 -1
View File
@@ -677,7 +677,7 @@ ui:
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters
character: 'Must use the character set "a-z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+1 -1
View File
@@ -677,7 +677,7 @@ ui:
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters
character: 'Must use the character set "a-z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+1 -1
View File
@@ -677,7 +677,7 @@ ui:
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters
character: 'Must use the character set "a-z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+3 -3
View File
@@ -678,13 +678,13 @@ ui:
display_name:
label: Display Name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+169 -26
View File
@@ -57,6 +57,8 @@ backend:
other: Upravit
undelete:
other: Obnovit
merge:
other: Sloučit
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: Nemáte oprávnění pro aktualizaci.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Hodnost reputace nesplňuje podmínku.
@@ -261,6 +265,8 @@ backend:
other: Nemůžete odstranit štítek, který se používá.
cannot_set_synonym_as_itself:
other: Aktuální štítek nelze jako synonymum stejného štítku.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: Jméno odesílatele nemůže být emailová adresa.
@@ -304,6 +310,14 @@ backend:
other: "Chyba formátu pole {{.Field}} poblíž '{{.Content}}' na řádku {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "Počet uživatelů, které přidáte najednou, by měl být v rozsahu 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Načtení konfigurace selhalo
@@ -564,7 +578,7 @@ backend:
name:
other: První odkaz
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: First Reaction
@@ -807,7 +821,7 @@ ui:
tag_wiki: tag wiki
create_tag: Create Tag
edit_tag: Edit Tag
ask_a_question: Add Question
ask_a_question: Create Question
edit_question: Edit Question
edit_answer: Edit Answer
search: Search
@@ -831,6 +845,17 @@ ui:
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Notifications
inbox: Inbox
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: Are you sure you wish to delete?
close: Close
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Edit Tag
default_reason: Edit tag
@@ -1045,6 +1079,9 @@ ui:
day: day
hours: hours
days: days
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1100,10 +1137,10 @@ ui:
more: More
wiki: Wiki
ask:
title: Add Question
title: Create Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
default_first_reason: Create question
similar_questions: Similar questions
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Revision
title:
label: Title
placeholder: Be specific and imagine you're asking a question to another person
placeholder: What's your topic? Be specific.
msg:
empty: Title cannot be empty.
range: Title up to 150 characters
@@ -1119,6 +1156,9 @@ ui:
label: Body
msg:
empty: Body cannot be empty.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Tags
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Add tag
create_btn: Create new tag
search_tag: Search tag
hint: "Describe what your question is about, at least one tag is required."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: No tags matched
tag_required_text: Required tag (at least one)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Search
footer:
build_on: >-
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Change
loading: loading...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Name cannot be empty.
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Email
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Display name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile image
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Your revision will show after review.
sent_success: Sent successfully
related_question:
title: Related Questions
title: Related
answers: answers
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Pozvěte další uživatele
desc: Pozvěte lidi, o kterých si myslíte, že mohou odpovědět.
@@ -1359,9 +1400,11 @@ ui:
search: Search people
question_detail:
action: Action
created: Created
Asked: Asked
asked: asked
update: Modified
Edited: Edited
edit: edited
commented: commented
Views: Viewed
@@ -1441,7 +1484,7 @@ ui:
signup: Sign up
logout: Log out
verify: Verify
add_question: Add question
create: Create
approve: Approve
reject: Reject
skip: Skip
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Search Results
keywords: Keywords
@@ -1489,6 +1533,7 @@ ui:
follow: Follow
following: Following
counts: "{{count}} Results"
counts_loading: "... Results"
more: More
sort_btns:
relevance: Relevance
@@ -1540,6 +1585,7 @@ ui:
all_questions: All Questions
x_questions: "{{ count }} Questions"
x_answers: "{{ count }} answers"
x_posts: "{{ count }} Posts"
questions: Questions
answers: Answers
newest: Newest
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Name
msg: Name cannot be empty.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Password
@@ -1731,16 +1777,29 @@ ui:
branding: Branding
legal: Legal
write: Write
terms: Terms
tos: Terms of Service
privacy: Privacy
seo: SEO
customize: Customize
themes: Themes
css_html: CSS/HTML
login: Login
privileges: Privileges
plugins: Plugins
installed_plugins: Installed Plugins
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Welcome to {{site_name}}
user_center:
login: Login
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Invalid Email Address.
@@ -1875,9 +1934,10 @@ ui:
name: Name
email: Email
reputation: Reputation
created_at: Created Time
delete_at: Deleted Time
suspend_at: Suspended Time
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Status
role: Role
action: Action
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspend this user
content: A suspended user can't log in.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Questions
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: Timezone
msg: Timezone cannot be empty.
text: Choose a city in the same timezone as you.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Write
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Každý uživatel může napsat pouze jednu odpověď na stejný dotaz
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Color scheme
navbar_style:
label: Navbar style
label: Navbar background style
primary_color:
label: Primary color
text: Modify the colors used by your themes
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS and HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Show logs
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (optional)
empty: cannot be empty
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+169 -26
View File
@@ -57,6 +57,8 @@ backend:
other: Edit
undelete:
other: Undelete
merge:
other: Merge
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: Dim caniatâd i ddiweddaru.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Reputation rank fail to meet the condition.
@@ -261,6 +265,8 @@ backend:
other: You cannot delete a tag that is in use.
cannot_set_synonym_as_itself:
other: Ni allwch osod cyfystyr y tag cyfredol fel ei hun.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: The from name cannot be a email address.
@@ -304,6 +310,14 @@ backend:
other: "Error {{.Field}} format near '{{.Content}}' at line {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "The number of users you add at once should be in the range of 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Wedi methu darllen y ffurfwedd
@@ -564,7 +578,7 @@ backend:
name:
other: First Link
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: First Reaction
@@ -807,7 +821,7 @@ ui:
tag_wiki: tag wiki
create_tag: Creu Tag
edit_tag: Golygu Tag
ask_a_question: Ychwanegu Cwestiwn
ask_a_question: Create Question
edit_question: Golygu Cwestiwn
edit_answer: Golygu Ateb
search: Chwiliwch
@@ -831,6 +845,17 @@ ui:
http_50X: Gwall HTTP 500
http_403: Gwall HTTP 403
logout: Log Out
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Hysbysiadau
inbox: Mewnflwch
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: Are you sure you wish to delete?
close: Close
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Edit Tag
default_reason: Edit tag
@@ -1045,6 +1079,9 @@ ui:
day: day
hours: hours
days: days
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1100,10 +1137,10 @@ ui:
more: Mwy
wiki: Wiki
ask:
title: Ychwanegu Cwestiwn
title: Create Question
edit_title: Golygu Cwestiwn
default_reason: Golygu Cwestiwn
default_first_reason: Add question
default_first_reason: Create question
similar_questions: Cwestiynau tebyg
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Diwygiad
title:
label: Teitl
placeholder: Byddwch yn benodol a dychmygwch eich bod yn gofyn cwestiwn i berson arall
placeholder: What's your topic? Be specific.
msg:
empty: Ni all teitl fod yn wag.
range: Teitl hyd at 20 nod
@@ -1119,6 +1156,9 @@ ui:
label: Corff
msg:
empty: Ni all corff fod yn wag.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Tagiau
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Ychwanegu tag
create_btn: Creu tag newydd
search_tag: Chwilio tag
hint: "Disgrifiwch beth yw eich cwestiwn, mae angen o leiaf un tag."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: No tags matched
tag_required_text: Required tag (at least one)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Search
footer:
build_on: >-
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Change
loading: loading...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Name cannot be empty.
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Email
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Display name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile image
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Your revision will show after review.
sent_success: Sent successfully
related_question:
title: Related Questions
title: Related
answers: answers
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: People Asked
desc: Select people who you think might know the answer.
@@ -1359,9 +1400,11 @@ ui:
search: Search people
question_detail:
action: Action
created: Created
Asked: Asked
asked: asked
update: Modified
Edited: Edited
edit: edited
commented: commented
Views: Viewed
@@ -1441,7 +1484,7 @@ ui:
signup: Sign up
logout: Log out
verify: Verify
add_question: Add question
create: Create
approve: Approve
reject: Reject
skip: Skip
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Search Results
keywords: Keywords
@@ -1489,6 +1533,7 @@ ui:
follow: Follow
following: Following
counts: "{{count}} Results"
counts_loading: "... Results"
more: More
sort_btns:
relevance: Relevance
@@ -1540,6 +1585,7 @@ ui:
all_questions: All Questions
x_questions: "{{ count }} Questions"
x_answers: "{{ count }} answers"
x_posts: "{{ count }} Posts"
questions: Questions
answers: Answers
newest: Newest
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Name
msg: Name cannot be empty.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Password
@@ -1731,16 +1777,29 @@ ui:
branding: Branding
legal: Legal
write: Write
terms: Terms
tos: Terms of Service
privacy: Privacy
seo: SEO
customize: Customize
themes: Themes
css_html: CSS/HTML
login: Login
privileges: Privileges
plugins: Plugins
installed_plugins: Installed Plugins
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Welcome to {{site_name}}
user_center:
login: Login
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Invalid Email Address.
@@ -1875,9 +1934,10 @@ ui:
name: Name
email: Email
reputation: Reputation
created_at: Created Time
delete_at: Deleted Time
suspend_at: Suspended Time
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Status
role: Role
action: Action
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspend this user
content: A suspended user can't log in.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Questions
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: Timezone
msg: Timezone cannot be empty.
text: Choose a city in the same timezone as you.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Write
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Each user can only write one answer for each question
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Color scheme
navbar_style:
label: Navbar style
label: Navbar background style
primary_color:
label: Primary color
text: Modify the colors used by your themes
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS and HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Show logs
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (optional)
empty: cannot be empty
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+447 -304
View File
File diff suppressed because it is too large Load Diff
+220 -77
View File
@@ -57,6 +57,8 @@ backend:
other: Bearbeiten
undelete:
other: Wiederherstellen
merge:
other: Zusammenführen
role:
name:
user:
@@ -138,7 +140,7 @@ backend:
pass:
other: Passwort
old_pass:
other: Current password
other: Aktuelles Passwort
original_text:
other: Dieser Beitrag
email_or_password_wrong_error:
@@ -171,7 +173,7 @@ backend:
question_closed_cannot_add:
other: Fragen sind geschlossen und können nicht hinzugefügt werden.
content_cannot_empty:
other: Answer content cannot be empty.
other: Die Antwort darf nicht leer sein.
comment:
edit_without_permission:
other: Kommentar kann nicht bearbeitet werden.
@@ -180,7 +182,7 @@ backend:
cannot_edit_after_deadline:
other: Die Kommentarzeit war zu lang, um sie zu ändern.
content_cannot_empty:
other: Comment content cannot be empty.
other: Der Kommentar darf nicht leer sein.
email:
duplicate:
other: E-Mail existiert bereits.
@@ -231,7 +233,9 @@ backend:
cannot_update:
other: Keine Berechtigung zum Aktualisieren.
content_cannot_empty:
other: Content cannot be empty.
other: Der Inhalt darf nicht leer sein.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Ansehenssrang erfüllt die Bedingung nicht.
@@ -261,6 +265,8 @@ backend:
other: Du kannst keinen Tag löschen, der in Gebrauch ist.
cannot_set_synonym_as_itself:
other: Du kannst das Synonym des aktuellen Tags nicht als sich selbst festlegen.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: Der Absendername kann keine E-Mail-Adresse sein.
@@ -304,6 +310,14 @@ backend:
other: "Fehler {{.Field}}-Format in der Nähe von '{{.Content}}' in Zeile {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "Die Anzahl der Benutzer, die du auf einmal hinzufügst, sollte im Bereich von 1-{{.MaxAmount}} liegen."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Lesekonfiguration fehlgeschlagen
@@ -334,7 +348,7 @@ backend:
name:
other: unhöflich oder beleidigend
desc:
other: "Eine vernünftige Person würde diesen Inhalt für respektvoll diskutierten Diskurs für unangemessen halten."
other: "Eine vernünftige Person würde diesen Inhalt im respektvoll diskutierten Diskurs für unangemessen halten."
a_duplicate:
name:
other: ein Duplikat
@@ -346,7 +360,7 @@ backend:
name:
other: keine Antwort
desc:
other: "Das wurde als Antwort gepostet, aber es versucht nicht, die Frage zu beantworten. Sie sollte entweder bearbeitet, kommentiert, als weitere Frage gestellt oder ganz gelöscht werden."
other: "Die Antwort versucht nicht, die Frage zu beantworten. Sie sollte entweder bearbeitet, kommentiert, als weitere Frage gestellt oder ganz gelöscht werden."
no_longer_needed:
name:
other: nicht mehr benötigt
@@ -477,7 +491,7 @@ backend:
title:
other: "[{{.SiteName}}] {{.DisplayName}} hat deine Frage beantwortet"
body:
other: "<a href='{{.AnswerUrl}}'>{{.QuestionTitle}}</a><br><br>\n\n{{.DisplayName}}:<br>\n<blockquote>{{.AnswerSummary}}</blockquote><br>\n\n<a href='{{.AnswerUrl}}'>Auf {{.SiteName}} anschauen</a><br><br>\n\n--<br>\nHinweis: Dies ist eine automatische System-E-Mail, Bitte antworten Sie nicht auf diese Nachricht, da Ihre Antwort nicht angezeigt wird.<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>Abmelden</a></small>"
other: "<a href='{{.AnswerUrl}}'>{{.QuestionTitle}}</a><br><br>\n\n{{.DisplayName}}:<br>\n<blockquote>{{.AnswerSummary}}</blockquote><br>\n\n<a href='{{.AnswerUrl}}'>Auf {{.SiteName}} anschauen</a><br><br>\n\n--<br>\nHinweis: Dies ist eine automatische System-E-Mail, bitte antworten Sie nicht auf diese Nachricht, da Ihre Antwort nicht angezeigt wird.<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>Abmelden</a></small>"
invited_you_to_answer:
title:
other: "[{{.SiteName}}] {{.DisplayName}} hat dich eingeladen zu antworten"
@@ -492,7 +506,7 @@ backend:
title:
other: "[{{.SiteName}}] Neue Frage: {{.QuestionTitle}}"
body:
other: "<a href='{{.QuestionUrl}}'>{{.QuestionTitle}}</a><br>\n<small>{{.Tags}}</small><br><br>\n\n--<br>\nNote: This is an automatic system email, please do not reply to this message as your response will not be seen.<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>Unsubscribe</a></small>"
other: "<a href='{{.QuestionUrl}}'>{{.QuestionTitle}}</a><br>\n<small>{{.Tags}}</small><br><br>\n\n--<br>\nHinweis: Dies ist eine automatische Systemnachricht, bitte antworten Sie nicht darauf. Antworten werden nicht gelesen oder bearbeitet.<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>Benachrichtigung abbestellen</a></small>"
pass_reset:
title:
other: "[{{.SiteName }}] Passwort zurücksetzen"
@@ -557,7 +571,7 @@ backend:
other: Erste Meldung eines Beitrags.
first_upvote:
name:
other: Erste Abstimmung
other: Erster Upvote
desc:
other: Erste Like eines Beitrags.
first_link:
@@ -612,7 +626,7 @@ backend:
other: Hat einen Beitrag mit 25 einzigartigen Besuchern freigegeben.
good_share:
name:
other: Gute Teile
other: Gut geteilt
desc:
other: Hat einen Beitrag mit 300 einzigartigen Besuchern freigegeben.
great_share:
@@ -632,7 +646,7 @@ backend:
other: Hat an einem Tag 50 Upvotes 5 Mal verwendet.
crazy_in_love:
name:
other: Verrückt in Liebe
other: Im siebten Himmel
desc:
other: Hat an einem Tag 50 Upvotes 20 Mal verwendet.
promoter:
@@ -642,7 +656,7 @@ backend:
other: Hat einen Benutzer eingeladen.
campaigner:
name:
other: Kampagner
other: Kampagnenleiter
desc:
other: Lade 3 einfache Benutzer ein.
champion:
@@ -679,7 +693,7 @@ backend:
name:
other: Anhänger
desc:
other: Besucht 365 aufeinander folgende Tage.
other: 365 aufeinander folgende Tage besucht.
anniversary:
name:
other: Jahrestag
@@ -687,7 +701,7 @@ backend:
other: Aktives Mitglied für ein Jahr, mindestens einmal veröffentlicht.
appreciated:
name:
other: Wertschätzt
other: Gewertschätzt
desc:
other: Erhalten 1 up vote für 20 posts.
respected:
@@ -699,7 +713,7 @@ backend:
name:
other: Bewundert
desc:
other: Erhalten 5 up vote für 300 posts.
other: 5 upvotes für 300 posts erhalten.
solved:
name:
other: Gelöst
@@ -717,7 +731,7 @@ backend:
other: 50 Antworten wurden akzeptiert.
solution_institution:
name:
other: Solution Institution
other: Lösungsfinder
desc:
other: 150 Antworten wurden akzeptiert.
nice_answer:
@@ -732,7 +746,7 @@ backend:
other: Die Antwortpunktzahl beträgt mehr als 25 Punkte.
great_answer:
name:
other: Großartiges Antwort
other: Großartige Antwort
desc:
other: Die Antwortpunktzahl beträgt mehr als 50 Punkte.
nice_question:
@@ -744,12 +758,12 @@ backend:
name:
other: Gute Frage
desc:
other: Fragenpunktzahl von 25 oder mehr.
other: Fragen mit 25 oder mehr Punkten.
great_question:
name:
other: Große Frage
desc:
other: Fragenpunktzahl von 50 oder mehr.
other: Frage mit 50 oder mehr Punkten.
popular_question:
name:
other: Populäre Frage
@@ -759,17 +773,17 @@ backend:
name:
other: Bemerkenswerte Frage
desc:
other: Frage mit 1,000 Ansichten.
other: Frage mit 1.000 Ansichten.
famous_question:
name:
other: Erstklassige Frage
desc:
other: Frage mit 5,000 Ansichten.
other: Frage mit 5.000 Ansichten.
popular_link:
name:
other: Populärer Link
desc:
other: Geschrieben einen externen Link mit 50 Klicks.
other: Hat einen externen Link mit 50 Klicks gepostet.
hot_link:
name:
other: Heißer Link
@@ -807,7 +821,7 @@ ui:
tag_wiki: tag Wiki
create_tag: Tag erstellen
edit_tag: Tag bearbeiten
ask_a_question: Frage hinzufügen
ask_a_question: Create Question
edit_question: Frage bearbeiten
edit_answer: Antwort bearbeiten
search: Suchen
@@ -831,6 +845,17 @@ ui:
http_50X: HTTP-Fehler 500
http_403: HTTP Fehler 403
logout: Ausloggen
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Benachrichtigungen
inbox: Posteingang
@@ -1027,6 +1052,15 @@ ui:
<p>Wir erlauben nicht <strong>Tags mit Synonymen</strong>zu löschen.</p> <p>Bitte entfernen Sie zuerst die Synonyme von diesem Schlagwort.</p>
tip: Bist du sicher, dass du löschen möchtest?
close: Schließen
merge:
title: Tags zusammenführen
source_tag_title: Quell-Tag
source_tag_description: Das Quell-Tag und seine zugehörigen Daten werden dem Ziel-Tag zugeordnet.
target_tag_title: Ziel-Tag
target_tag_description: Ein Synonym zwischen diesen beiden Tags wird nach dem Zusammenführen erstellt.
no_results: Keine zusammenpassenden Tags gefunden
btn_submit: Absenden
btn_close: Schließen
edit_tag:
title: Tag bearbeiten
default_reason: Tag bearbeiten
@@ -1045,6 +1079,9 @@ ui:
day: tag
hours: Stunden
days: Tage
month: month
months: months
year: year
reaction:
heart: Herz
smile: Lächeln
@@ -1052,7 +1089,7 @@ ui:
btn_label: Reaktionen hinzufügen oder entfernen
undo_emoji: '{{ emoji }} Reaktion rückgängig machen'
react_emoji: mit {{ emoji }} reagieren
unreact_emoji: mit {{ emoji }} unreagieren
unreact_emoji: '{{ emoji }} Reaktion entfernen'
comment:
btn_add_comment: Einen Kommentar hinzufügen
reply_to: Antwort an
@@ -1100,10 +1137,10 @@ ui:
more: Mehr
wiki: Wiki
ask:
title: Frage stellen
title: Create Question
edit_title: Frage bearbeiten
default_reason: Frage bearbeiten
default_first_reason: Frage stellen
default_first_reason: Create question
similar_questions: Ähnliche Fragen
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Version
title:
label: Titel
placeholder: Sei spezifisch und stelle dir vor, du stelle eine Frage an eine andere Person
placeholder: What's your topic? Be specific.
msg:
empty: Der Titel darf nicht leer sein.
range: Titel bis zu 150 Zeichen
@@ -1119,6 +1156,9 @@ ui:
label: Körper
msg:
empty: Körper darf nicht leer sein.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Stichworte
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Schlagwort hinzufügen
create_btn: Neuen Tag erstellen
search_tag: Tag suchen
hint: "Beschreibe, worum es in deiner Frage geht, mindestens ein Tag ist erforderlich."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: Keine Tags gefunden
tag_required_text: Benötigter Tag (mindestens eins)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Suchen
footer:
build_on: >-
Betrieben von <1> Apache Answer </1>- die Open-Source-Software, die Q&A-Communities betreibt.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Ändern
loading: wird geladen...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Der Name darf nicht leer sein.
range: Der Name muss zwischen 2 und 30 Zeichen lang sein.
character: 'Muss den Zeichensatz "a-z", "A-Z", "0-9", " - . _" verwenden'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: E-Mail
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Anzeigename
msg: Anzeigename darf nicht leer sein.
msg_range: Anzeigename bis zu 30 Zeichen.
msg_range: Der Anzeigename muss zwischen 2 und 30 Zeichen lang sein.
username:
label: Nutzername
caption: Leute können dich als "@Benutzername" erwähnen.
msg: Benutzername darf nicht leer sein.
msg_range: Benutzername bis zu 30 Zeichen.
character: 'Muss den Zeichensatz "a-z", "0-9", " - . _" verwenden'
msg_range: Der Benutzername muss zwischen 2 und 30 Zeichen lang sein.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profilbild
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Deine Überarbeitung wird nach der Überprüfung angezeigt.
sent_success: Erfolgreich gesendet
related_question:
title: Verwandte Fragen
title: Related
answers: antworten
linked_question:
title: Verwandte Fragen
description: Fragen verbunden mit
no_linked_question: Keine Fragen aus dieser Frage verbunden.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Frage jemanden
desc: Lade Leute ein, von denen du glaubst, dass sie die Antwort wissen könnten.
@@ -1359,9 +1400,11 @@ ui:
search: Personen suchen
question_detail:
action: Aktion
created: Created
Asked: Gefragt
asked: gefragt
update: Geändert
Edited: Edited
edit: bearbeitet
commented: kommentiert
Views: Gesehen
@@ -1441,7 +1484,7 @@ ui:
signup: Registrieren
logout: Ausloggen
verify: Überprüfen
add_question: Frage stellen
create: Erstellen
approve: Genehmigen
reject: Ablehnen
skip: Überspringen
@@ -1473,15 +1516,16 @@ ui:
normal: Normal
closed: Geschlossen
deleted: Gelöscht
deleted_permanently: Deleted permanently
deleted_permanently: Dauerhaft gelöscht
pending: Ausstehend
more: Mehr
view: View
card: Card
compact: Compact
display_below: Display below
always_display: Always display
or: or
view: Betrachten
card: Karte
compact: Kompakt
display_below: Unten anzeigen
always_display: Immer anzeigen
or: oder
back_sites: Zurück zur Website
search:
title: Suchergebnisse
keywords: Schlüsselwörter
@@ -1489,6 +1533,7 @@ ui:
follow: Folgen
following: Folgend
counts: "{{count}} Ergebnisse"
counts_loading: "... Results"
more: Mehr
sort_btns:
relevance: Relevanz
@@ -1516,8 +1561,8 @@ ui:
modal_confirm:
title: Fehler...
delete_permanently:
title: Delete permanently
content: Are you sure you want to delete permanently?
title: Endgültig löschen
content: Sind Sie sicher, dass Sie den Inhalt endgültig löschen möchten?
account_result:
success: Dein neues Konto ist bestätigt; du wirst zur Startseite weitergeleitet.
link: Weiter zur Startseite
@@ -1540,6 +1585,7 @@ ui:
all_questions: Alle Fragen
x_questions: "{{ count }} Fragen"
x_answers: "{{ count }} Antworten"
x_posts: "{{ count }} Posts"
questions: Fragen
answers: Antworten
newest: Neueste
@@ -1622,22 +1668,22 @@ ui:
placeholder: /data/answer.Weder noch
msg: Datenbankdatei kann nicht leer sein.
ssl_enabled:
label: Enable SSL
label: SSL aktivieren
ssl_enabled_on:
label: On
ssl_enabled_off:
label: Off
ssl_mode:
label: SSL Mode
label: SSL-Modus
ssl_root_cert:
placeholder: sslrootcert file path
msg: Path to sslrootcert file cannot be empty
placeholder: SSL-Root-Zertifikat Pfad
msg: Pfad zum Ssl-Root-Zertifikat darf nicht leer sein
ssl_cert:
placeholder: sslcert file path
msg: Path to sslcert file cannot be empty
placeholder: SSL-Zertifikat Pfad
msg: Pfad zum SSL-Zertifikat darf nicht leer sein
ssl_key:
placeholder: sslkey file path
msg: Path to sslkey file cannot be empty
placeholder: SSL-Key Pfad
msg: Der Pfad zum SSL-Key darf nicht leer sein
config_yaml:
title: config.yaml erstellen
label: Die erstellte config.yaml-Datei.
@@ -1670,8 +1716,8 @@ ui:
admin_name:
label: Name
msg: Der Name darf nicht leer sein.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Der Name muss zwischen 2 und 30 Zeichen lang sein.
admin_password:
label: Passwort
text: >-
@@ -1680,9 +1726,9 @@ ui:
msg_min_length: Passwort muss mindestens 8 Zeichen lang sein.
msg_max_length: Das Passwort darf maximal 32 Zeichen lang sein.
admin_confirm_password:
label: "Confirm Password"
text: "Please re-enter your password to confirm."
msg: "Confirm password does not match."
label: "Passwort bestätigen"
text: "Bitte geben Sie Ihr Passwort erneut ein, um es zu bestätigen."
msg: "Passwortbestätigung stimmt nicht überein!"
admin_email:
label: E-Mail
text: Du brauchst diese E-Mail, um dich einzuloggen.
@@ -1731,16 +1777,29 @@ ui:
branding: Branding
legal: Rechtliches
write: Schreiben
terms: Terms
tos: Nutzungsbedingungen
privacy: Privatsphäre
seo: SEO
customize: Anpassen
themes: Themen
css_html: CSS/HTML
login: Anmeldung
privileges: Berechtigungen
plugins: Erweiterungen (Plugins)
installed_plugins: Installierte Plugins
apperance: Erscheinungsbild
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Willkommen auf {{site_name}}
user_center:
login: Anmelden
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Anzeigename
msg_range: Anzeigename bis zu 30 Zeichen.
msg_range: Der Anzeigename muss zwischen 2 und 30 Zeichen lang sein.
username:
label: Nutzername
msg_range: Nutzername bis zu 30 Zeichen.
msg_range: Der Benutzername muss 2-30 Zeichen lang sein.
email:
label: E-Mail
msg_invalid: Ungültige E-Mail-Adresse.
@@ -1875,9 +1934,10 @@ ui:
name: Name
email: E-Mail
reputation: Ansehen
created_at: Erstellt
created_at: Angelegt am
delete_at: Löschzeit
suspend_at: Sperrzeit
suspend_until: Suspend until
status: Status
role: Rolle
action: Aktion
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Diesen Benutzer sperren
content: Ein gesperrter Benutzer kann sich nicht einloggen.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Fragen
unlisted: Nicht gelistet
@@ -1972,6 +2034,12 @@ ui:
label: Zeitzone
msg: Die Zeitzone darf nicht leer sein.
text: Wähle eine Stadt in der gleichen Zeitzone wie du.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2038,16 +2106,22 @@ ui:
label: Datenschutzbestimmungen
text: "Du kannst hier Inhalte zur Datenschutzerklärung hinzufügen. Wenn du bereits ein Dokument hast, das anderswo gehostet wird, gib hier die vollständige URL an."
external_content_display:
label: External content
text: "Content includes images, videos, and media embedded from external websites."
always_display: Always display external content
ask_before_display: Ask before displaying external content
label: Externer Inhalt
text: "Inhalte umfassen Bilder, Videos und Medien, die von externen Websites eingebettet sind."
always_display: Externen Inhalt immer anzeigen
ask_before_display: Vor der Anzeige externer Inhalte fragen
write:
page_title: Schreiben
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Antwort bearbeiten
label: Jeder Benutzer kann für jede Frage nur eine Antwort schreiben
text: "Schalten Sie aus, um es Benutzern zu ermöglichen, mehrere Antworten auf dieselbe Frage zu schreiben, was dazu führen kann, dass Antworten nicht im Fokus stehen."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Empfohlene Tags
text: "Empfohlene Tags werden standardmäßig in der Dropdown-Liste angezeigt."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Farbschema
navbar_style:
label: Stil der Navigationsleiste
label: Hintergrundstil der Navigationsleiste
primary_color:
label: Primäre Farbe
text: Ändere die Farben, die von deinen Themes verwendet werden
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS und HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Protokolle anzeigen
status: Status
title: Abzeichen
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (optional)
empty: kann nicht leer sein
@@ -2295,13 +2437,14 @@ ui:
user_normal: Dieser Benutzer ist bereits normal.
user_suspended: Dieser Nutzer wurde gesperrt.
user_deleted: Benutzer wurde gelöscht.
user_added: User has been added successfully.
badge_activated: Dieses Abzeichen wurde aktiviert.
badge_inactivated: Dieses Abzeichen wurde deaktiviert.
users_deleted: These users have been deleted.
posts_deleted: These questions have been deleted.
answers_deleted: These answers have been deleted.
copy: Copy to clipboard
copied: Copied
external_content_warning: External images/media are not displayed.
users_deleted: Der Benutzer wurde gelöscht.
posts_deleted: Deine Frage wurde gelöscht.
answers_deleted: Deine Antwort wurde gelöscht.
copy: In die Zwischenablage kopieren
copied: Kopiert
external_content_warning: Externe Bilder/Medien werden nicht angezeigt.
+3 -3
View File
@@ -678,13 +678,13 @@ ui:
display_name:
label: Display Name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+161 -27
View File
@@ -235,6 +235,8 @@ backend:
other: No permission to update.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Reputation rank fail to meet the condition.
@@ -264,6 +266,8 @@ backend:
other: You cannot delete a tag that is in use.
cannot_set_synonym_as_itself:
other: You cannot set the synonym of the current tag as itself.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: The from name cannot be a email address.
@@ -307,6 +311,14 @@ backend:
other: "Error {{.Field}} format near '{{.Content}}' at line {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "The number of users you add at once should be in the range of 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Read config failed
@@ -820,7 +832,7 @@ ui:
tag_wiki: tag wiki
create_tag: Create Tag
edit_tag: Edit Tag
ask_a_question: Add Question
ask_a_question: Create Question
edit_question: Edit Question
edit_answer: Edit Answer
search: Search
@@ -844,6 +856,19 @@ ui:
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
thinking: Thinking…
thoughts: Thoughts
notifications:
title: Notifications
inbox: Inbox
@@ -1070,6 +1095,9 @@ ui:
day: day
hours: hours
days: days
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1128,10 +1156,10 @@ ui:
more: More
wiki: Wiki
ask:
title: Add Question
title: Create Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
default_first_reason: Create question
similar_questions: Similar questions
form:
fields:
@@ -1139,7 +1167,7 @@ ui:
label: Revision
title:
label: Title
placeholder: Be specific and imagine you're asking a question to another person
placeholder: What's your topic? Be specific.
msg:
empty: Title cannot be empty.
range: Title up to 150 characters
@@ -1147,6 +1175,9 @@ ui:
label: Body
msg:
empty: Body cannot be empty.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Tags
msg:
@@ -1168,7 +1199,9 @@ ui:
add_btn: Add tag
create_btn: Create new tag
search_tag: Search tag
hint: "Describe what your question is about, at least one tag is required."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: No tags matched
tag_required_text: Required tag (at least one)
header:
@@ -1187,9 +1220,7 @@ ui:
search:
placeholder: Search
footer:
build_on: >-
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A
communities.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Change
loading: loading...
@@ -1224,7 +1255,7 @@ ui:
msg:
empty: Name cannot be empty.
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Email
msg:
@@ -1300,13 +1331,13 @@ ui:
display_name:
label: Display name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile image
gravatar: Gravatar
@@ -1382,12 +1413,12 @@ ui:
review: Your revision will show after review.
sent_success: Sent successfully
related_question:
title: Related Questions
title: Related
answers: answers
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Invite People
desc: Invite people you think can answer.
@@ -1396,9 +1427,11 @@ ui:
search: Search people
question_detail:
action: Action
created: Created
Asked: Asked
asked: asked
update: Modified
Edited: Edited
edit: edited
commented: commented
Views: Viewed
@@ -1534,6 +1567,7 @@ ui:
follow: Follow
following: Following
counts: "{{count}} Results"
counts_loading: "... Results"
more: More
sort_btns:
relevance: Relevance
@@ -1586,6 +1620,7 @@ ui:
all_questions: All Questions
x_questions: "{{ count }} Questions"
x_answers: "{{ count }} answers"
x_posts: "{{ count }} Posts"
questions: Questions
answers: Answers
newest: Newest
@@ -1717,7 +1752,7 @@ ui:
admin_name:
label: Name
msg: Name cannot be empty.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Password
@@ -1782,16 +1817,29 @@ ui:
branding: Branding
legal: Legal
write: Write
terms: Terms
tos: Terms of Service
privacy: Privacy
seo: SEO
customize: Customize
themes: Themes
css_html: CSS/HTML
login: Login
privileges: Privileges
plugins: Plugins
installed_plugins: Installed Plugins
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Welcome to {{site_name}}
user_center:
login: Login
@@ -1892,10 +1940,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Invalid Email Address.
@@ -1927,9 +1975,10 @@ ui:
name: Name
email: Email
reputation: Reputation
created_at: Created Time
delete_at: Deleted Time
suspend_at: Suspended Time
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Status
role: Role
action: Action
@@ -1964,6 +2013,8 @@ ui:
suspend_user:
title: Suspend this user
content: A suspended user can't log in.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Questions
unlisted: Unlisted
@@ -2024,6 +2075,12 @@ ui:
label: Timezone
msg: Timezone cannot be empty.
text: Choose a city in the same timezone as you.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2095,11 +2152,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Write
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Each user can only write one answer for the same question
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
@@ -2143,10 +2206,14 @@ ui:
color_scheme:
label: Color scheme
navbar_style:
label: Navbar style
label: Navbar background style
primary_color:
label: Primary color
text: Modify the colors used by your themes
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS and HTML
custom_css:
@@ -2174,6 +2241,10 @@ ui:
title: Email registration
label: Allow email registration
text: Turn off to prevent anyone creating new account through email.
email_verification:
title: Email verification
label: Require email verification
text: When enabled, users must verify their email address before using the site.
allowed_email_domains:
title: Allowed email domains
text: Email domains that users must register accounts with. One domain per line. Ignored when empty.
@@ -2248,6 +2319,70 @@ ui:
show_logs: Show logs
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (optional)
empty: cannot be empty
@@ -2255,7 +2390,6 @@ ui:
btn_submit: Save
not_found_props: "Required property {{ key }} not found."
select: Select
page_review:
review: Review
proposed: proposed
@@ -2345,6 +2479,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
@@ -2354,4 +2489,3 @@ ui:
copied: Copied
external_content_warning: External images/media are not displayed.
+170 -27
View File
@@ -57,6 +57,8 @@ backend:
other: Editar
undelete:
other: Recuperar
merge:
other: Merge
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: Sin permiso para actualizar.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: El rango de reputación no cumple la condición.
@@ -261,6 +265,8 @@ backend:
other: No puedes eliminar una etiqueta que está en uso.
cannot_set_synonym_as_itself:
other: No se puede establecer como sinónimo de una etiqueta la propia etiqueta.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: El nombre no puede ser una dirección de correo electrónico.
@@ -304,6 +310,14 @@ backend:
other: "Error {{.Field}} formato cerca de '{{.Content}}' en la línea {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "El número de usuarios que añadas a la vez debe estar en el rango de 1 a {{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Lectura de configuración fallida
@@ -564,7 +578,7 @@ backend:
name:
other: Primer Enlace
desc:
other: Primero dirst añadió un enlace a otro post.
other: First added a link to another post.
first_reaction:
name:
other: Primera reacción
@@ -807,7 +821,7 @@ ui:
tag_wiki: wiki de Etiquetas
create_tag: Crear etiqueta
edit_tag: Editar etiqueta
ask_a_question: Añadir Pregunta
ask_a_question: Create Question
edit_question: Editar Pregunta
edit_answer: Editar respuesta
search: Buscar
@@ -831,6 +845,17 @@ ui:
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Cerrar sesión
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Notificaciones
inbox: Buzón de entrada
@@ -1027,6 +1052,15 @@ ui:
<p>No permitimos <strong>eliminar etiqueta con sinónimos</strong>.</p> <p>Primero elimine los sinónimos de esta etiqueta.</p>
tip: '¿Estás seguro de que deseas borrarlo?'
close: Cerrar
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Editar etiqueta
default_reason: Editar etiqueta
@@ -1045,6 +1079,9 @@ ui:
day: día
hours: horas
days: días
month: month
months: months
year: year
reaction:
heart: corazón
smile: sonrisa
@@ -1100,10 +1137,10 @@ ui:
more: Mas
wiki: Wiki
ask:
title: Agregar una pregunta
title: Create Question
edit_title: Editar pregunta
default_reason: Editar pregunta
default_first_reason: Añadir pregunta
default_first_reason: Create question
similar_questions: Preguntas similares
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Revisión
title:
label: Título
placeholder: Sé preciso e imagina que le estás preguntando esto a una persona
placeholder: What's your topic? Be specific.
msg:
empty: El título no puede estar vacío.
range: Título hasta 150 caracteres
@@ -1119,6 +1156,9 @@ ui:
label: Cuerpo
msg:
empty: Cuerpo no puede estar vacío.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Etiquetas
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Añadir etiqueta
create_btn: Crear nueva etiqueta
search_tag: Buscar etiqueta
hint: "Describe de qué trata tu pregunta, se requiere al menos una etiqueta."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: Ninguna etiqueta coincide
tag_required_text: Etiqueta requerida (al menos una)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Buscar
footer:
build_on: >-
Sitio creado por <1> Apache Answer </1>- el software libre que impulsa comunidades de Q&A.<br />Hecho con amor © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Cambiar
loading: cargando...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: El nombre no puede estar vacío.
range: El nombre debe tener entre 2 y 30 caracteres de largo.
character: 'Debe usar el juego de caracteres "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Correo electrónico
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Nombre público
msg: El nombre a mostrar no puede estar vacío.
msg_range: Mostrar nombre de hasta 30 caracteres.
msg_range: Display name must be 2-30 characters in length.
username:
label: Nombre de usuario
caption: La gente puede mencionarte con "@nombredeusuario".
msg: El nombre de usuario no puede estar vacío.
msg_range: Nombre de usuario de hasta 30 caracteres.
character: 'Debe usar el conjunto de caracteres "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Imagen de perfil
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Tu revisión será visible luego de ser aprobada.
sent_success: Enviado con éxito
related_question:
title: Preguntas relacionadas
title: Related
answers: respuestas
linked_question:
title: Preguntas relacionadas
description: Pregunta relacionada con
no_linked_question: No hay preguntas enlazadas a esta pregunta.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Personas Preguntadas
desc: Selecciona personas que creas que sepan la respuesta.
@@ -1359,9 +1400,11 @@ ui:
search: Buscar personas
question_detail:
action: Acción
created: Created
Asked: Preguntada
asked: preguntada
update: Modificada
Edited: Edited
edit: editada
commented: comentado
Views: Visto
@@ -1441,7 +1484,7 @@ ui:
signup: Registrarse
logout: Cerrar sesión
verify: Verificar
add_question: Añadir pregunta
create: Create
approve: Aprobar
reject: Rechazar
skip: Omitir
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Resultados de la búsqueda
keywords: Palabras claves
@@ -1489,6 +1533,7 @@ ui:
follow: Seguir
following: Siguiendo
counts: "{{count}} Resultados"
counts_loading: "... Results"
more: Más
sort_btns:
relevance: Relevancia
@@ -1511,7 +1556,7 @@ ui:
via: Compartir vía...
copied: Copiado
facebook: Compartir en Facebook
twitter: Compartir en X
twitter: Share to X
cannot_vote_for_self: No puedes votar tu propia publicación.
modal_confirm:
title: Error...
@@ -1540,6 +1585,7 @@ ui:
all_questions: Todas las preguntas
x_questions: "{{ count }} Preguntas"
x_answers: "{{ count }} respuestas"
x_posts: "{{ count }} Posts"
questions: Preguntas
answers: Respuestas
newest: Más reciente
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Nombre
msg: El nombre no puede estar vacío.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Contraseña
@@ -1731,16 +1777,29 @@ ui:
branding: Marca
legal: Legal
write: Escribir
terms: Terms
tos: Términos de servicio
privacy: Privacidad
seo: ESTE
customize: Personalizar
themes: Temas
css_html: CSS/HTML
login: Iniciar sesión
privileges: Privilegios
plugins: Extensiones
installed_plugins: Extensiones Instaladas
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Bienvenido a {{site_name}}
user_center:
login: Iniciar sesión
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Nombre para mostrar
msg_range: Mostrar nombre de hasta 30 caracteres.
msg_range: Display name must be 2-30 characters in length.
username:
label: Nombre de usuario
msg_range: Nombre de usuario hasta 30 caracteres.
msg_range: Username must be 2-30 characters in length.
email:
label: Correo electrónico
msg_invalid: Dirección de correo inválida.
@@ -1875,9 +1934,10 @@ ui:
name: Nombre
email: Correo electrónico
reputation: Reputación
created_at: Creado Tiempo
delete_at: Hora eliminada
suspend_at: Tiempo suspendido
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Estado
role: Rol
action: Acción
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspender a este usuario
content: Un usuario suspendido no puede iniciar sesión.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Preguntas
unlisted: No listado
@@ -1972,6 +2034,12 @@ ui:
label: Zona horaria
msg: El huso horario no puede estar vacío.
text: Elija una ciudad en la misma zona horaria que usted.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Escribir
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Escribir respuesta
label: Cada usuario solo puede escribir una respuesta por pregunta
text: "Desactivar para permitir a los usuarios escribir múltiples respuestas a la misma pregunta, lo que puede causar que las respuestas no estén enfocadas."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Etiquetas recomendadas
text: "Las etiquetas recomendadas se mostrarán en la lista desplegable por defecto."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Esquema de color
navbar_style:
label: Estilo de barra de navegación
label: Navbar background style
primary_color:
label: Color primario
text: Modifica los colores usados por tus temas
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS y HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Mostrar logs
status: Status
title: Insignias
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (opcional)
empty: no puede estar en blanco
@@ -2295,6 +2437,7 @@ ui:
user_normal: Este usuario ya es normal.
user_suspended: Este usuario ha sido suspendido.
user_deleted: Este usuario ha sido eliminado.
user_added: User has been added successfully.
badge_activated: Esta insignia ha sido activada.
badge_inactivated: Esta insignia ha sido desactivada.
users_deleted: These users have been deleted.
+171 -28
View File
@@ -57,6 +57,8 @@ backend:
other: ویرایش
undelete:
other: بازگردانی حذف
merge:
other: Merge
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: اجازه بروزرسانی ندارید.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: شهرت ناکافی.
@@ -261,6 +265,8 @@ backend:
other: نمی توانید تگی که در حال استفاده است را حذف کنید.
cannot_set_synonym_as_itself:
other: شما نمی توانید مترادفی برای برچسب فعلی به عوان خودش تنظیم کنین.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: '"از طرفه" نمی تواند آدرس ایمیل باشد.'
@@ -304,6 +310,14 @@ backend:
other: "مشکل پیش آمده در فرمت {{.Field}} در کنار {{.Content}} در خط {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "تعداد کاربرانی که اضافه می کنید باید رنج بین ۱-{{.MaxAmount}} باشند."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: خواندن کافیگ با مشکل مواجه شد
@@ -346,7 +360,7 @@ backend:
name:
other: این یک پاسخ نیست
desc:
other: "This was posted as an answer, but it does not attempt to answer the question. It should possibly be an edit, a comment, another question,or deleted altogether."
other: "."
no_longer_needed:
name:
other: دیگر نیازی نیست
@@ -564,7 +578,7 @@ backend:
name:
other: First Link
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: First Reaction
@@ -807,7 +821,7 @@ ui:
tag_wiki: ویکی تگ
create_tag: ایجاد برچسب
edit_tag: ویرایش برچسب
ask_a_question: اضافه کردن سوال
ask_a_question: Create Question
edit_question: ویرایش سوال
edit_answer: ویرایش پاسخ
search: جستجو
@@ -831,6 +845,17 @@ ui:
http_50X: خطای 500 HTTP
http_403: خطای 403 HTTP
logout: خروج
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: اعلانات
inbox: پیغام‌های دریافتی
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: مطمئنید که میخواهید حذف شود?
close: بستن
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: ویرایش تگ‌
default_reason: ویرایش تگ‌
@@ -1045,6 +1079,9 @@ ui:
day: روز
hours: ساعات
days: روزها
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1100,10 +1137,10 @@ ui:
more: بیشتر
wiki: Wiki
ask:
title: سوالی اضافه کنید
title: Create Question
edit_title: سوال را ویرایش کنید
default_reason: سوال را ویرایش کنید
default_first_reason: سوال اضافه کنید
default_first_reason: Create question
similar_questions: سؤال های مشابه
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: تجدید نظر
title:
label: عنوان
placeholder: به طور خاص فرض کنید که شما یک سؤال از یک شخص دیگری می پرسید
placeholder: What's your topic? Be specific.
msg:
empty: عنوان نمی تواند خالی باشد.
range: عنوان میتواند تا ۳۰ حرف باشد
@@ -1119,6 +1156,9 @@ ui:
label: بدنه
msg:
empty: بدنه نمی تواند خالی باشد.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: برچسب ها
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: اضافه کردن برچسب
create_btn: ایجاد یک برچسب جدید
search_tag: جست‌وجوی برچسب‌
hint: "درمورد سوال خود توضیحی دهید، حداقل یک برچسب نیاز است."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: هیچ تگی مطابقت ندارد
tag_required_text: تگ نیاز هست (حداقل یک مورد)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: جستجو
footer:
build_on: >-
پشتیبانی شده توسط <1> Apache Answer </1> - نرم‌افزار منبع باز که باهمستان های پرسش و پاسخ را تقویت می کند.<br />ساخته شده با عشق © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: تغییر
loading: درحال بارگذاری...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: نام نمی‌تواند خالی باشد.
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: ایمیل
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: نام
msg: نام نمی تواند خالی باشد.
msg_range: نام میتواند تا ۳۰ حرف باشد.
msg_range: Display name must be 2-30 characters in length.
username:
label: نام‌کاربری
caption: دیگران میتوانند به شما به بصورت "@username" اشاره کنند.
msg: نام کاربری نمی تواند خالی باشد.
msg_range: نام کاربری میتواند تا ۳۰ حرف باشد.
character: 'باید از حروف "a-z", "0-9", " - . _" استفاده شود'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: عکس پروفایل
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: بازبینی شما پس از بررسی نشان داده خواهد شد.
sent_success: با موفقيت ارسال شد
related_question:
title: سوالات مرتبط
title: Related
answers: جواب ها
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: مردم پرسیدند
desc: افرادی را دعوت کنید که فکر می کنید ممکن است پاسخ را بدانند.
@@ -1359,9 +1400,11 @@ ui:
search: جستجوی افراد
question_detail:
action: عملیات
created: Created
Asked: پرسیده شده
asked: پرسیده شده
update: تغییر یافته
Edited: Edited
edit: ویرایش شده
commented: commented
Views: مشاهده شده
@@ -1441,7 +1484,7 @@ ui:
signup: عضويت
logout: خروج
verify: تایید
add_question: اضافه کردن سوال
create: Create
approve: تایید
reject: رد کردن
skip: بعدی
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: نتایج جستجو
keywords: کلیدواژه ها
@@ -1489,6 +1533,7 @@ ui:
follow: دنبال کردن
following: دنبال میکنید
counts: "{{count}} نتیجه"
counts_loading: "... Results"
more: بیشتر
sort_btns:
relevance: مرتبط
@@ -1511,7 +1556,7 @@ ui:
via: اشتراک گذاری پست با...
copied: کپی انجام شد
facebook: اشتراک گذاری در فیس بوک
twitter: اشتراک گذاری در X
twitter: Share to X
cannot_vote_for_self: شما نمی توانید به پست خودتان رای دهید.
modal_confirm:
title: خطا...
@@ -1540,6 +1585,7 @@ ui:
all_questions: تمام سوالات
x_questions: "{{ count }} سوال"
x_answers: "{{ count }} جواب"
x_posts: "{{ count }} Posts"
questions: سوالات
answers: پاسخ ها
newest: جدیدترین
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: نام
msg: نام نمی‌تواند خالی باشد.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: رمز عبور
@@ -1731,16 +1777,29 @@ ui:
branding: نام تجاری
legal: قانونی
write: نوشتن
terms: Terms
tos: قوانین
privacy: حریم خصوصی
seo: سئو
customize: شخصی‌سازی
themes: پوسته ها
css_html: CSS/HTML
login: ورود
privileges: مجوزها
plugins: افزونه‌ها
installed_plugins: پلاگین های نصب شده
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: به {{site_name}} خوش آمدید
user_center:
login: ورود
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Invalid Email Address.
@@ -1875,9 +1934,10 @@ ui:
name: نام
email: ایمیل
reputation: محبوبیت
created_at: زمان ایجاد
delete_at: زمان حذف
suspend_at: زمان معلق
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: وضعیت
role: نقش
action: عمل
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: تعلیق این کاربر
content: کاربر تعلیق شده نمی‌تواند وارد شود.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: سوالات
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: منطقه زمانی
msg: منطقه زمانی نمی تواند خالی باشد.
text: شهری را در همان منطقه زمانی خود انتخاب کنید.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: نوشتن
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Each user can only write one answer for each question
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Color scheme
navbar_style:
label: Navbar style
label: Navbar background style
primary_color:
label: Primary color
text: Modify the colors used by your themes
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS and HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Show logs
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (optional)
empty: cannot be empty
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+3 -3
View File
@@ -678,13 +678,13 @@ ui:
display_name:
label: Display Name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+206 -63
View File
@@ -57,6 +57,8 @@ backend:
other: Modifier
undelete:
other: Annuler la suppression
merge:
other: Fusionner
role:
name:
user:
@@ -138,7 +140,7 @@ backend:
pass:
other: Mot de passe
old_pass:
other: Current password
other: Mot de passe actuel
original_text:
other: Ce post
email_or_password_wrong_error:
@@ -171,7 +173,7 @@ backend:
question_closed_cannot_add:
other: Les questions sont fermées et ne peuvent pas être ajoutées.
content_cannot_empty:
other: Answer content cannot be empty.
other: La réponse ne peut être vide.
comment:
edit_without_permission:
other: Les commentaires ne sont pas autorisés à être modifiés.
@@ -180,7 +182,7 @@ backend:
cannot_edit_after_deadline:
other: Le commentaire a été posté il y a trop longtemps pour être modifié.
content_cannot_empty:
other: Comment content cannot be empty.
other: Le commentaire ne peut être vide.
email:
duplicate:
other: L'adresse e-mail existe déjà.
@@ -231,7 +233,9 @@ backend:
cannot_update:
other: Pas de permission pour mettre à jour.
content_cannot_empty:
other: Content cannot be empty.
other: Le contenu ne peut pas être vide.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Le rang de réputation ne remplit pas la condition.
@@ -261,6 +265,8 @@ backend:
other: Vous ne pouvez pas supprimer un tag utilisé.
cannot_set_synonym_as_itself:
other: Vous ne pouvez pas définir le synonyme de la balise actuelle comme elle-même.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: Le nom d'expéditeur ne peut pas être une adresse e-mail.
@@ -304,6 +310,14 @@ backend:
other: "Erreur format {{.Field}} près de '{{.Content}}' à la ligne {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "Le nombre d'utilisateurs que vous ajoutez simultanément doit être compris entre 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: La lecture de la configuration a échoué
@@ -492,7 +506,7 @@ backend:
title:
other: "[{{.SiteName}}] Nouvelle question : {{.QuestionTitle}}"
body:
other: "<a href='{{.QuestionUrl}}'>{{.QuestionTitle}}</a><br>\n<small>{{.Tags}}</small><br><br>\n\n--<br>\nNote: This is an automatic system email, please do not reply to this message as your response will not be seen.<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>Unsubscribe</a></small>"
other: "<a href='{{.QuestionUrl}}'>{{.QuestionTitle}}</a><br>\n<small>{{.Tags}}</small><br><br>\n\n--<br>\nNote : Il s'agit d'un e-mail automatique, merci de ne pas répondre à ce message, votre réponse ne pourra être considérée.<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>Se désabonner</a></small>"
pass_reset:
title:
other: "[{{.SiteName }}] Réinitialisation du mot de passe"
@@ -564,7 +578,7 @@ backend:
name:
other: Premier lien
desc:
other: La première saleté a ajouté un lien vers un autre post.
other: A ajouté un lien vers un autre message.
first_reaction:
name:
other: Première réaction
@@ -807,7 +821,7 @@ ui:
tag_wiki: tag wiki
create_tag: Créer un tag
edit_tag: Modifier l'étiquette
ask_a_question: Ajouter une question
ask_a_question: Create Question
edit_question: Modifier la question
edit_answer: Modifier la réponse
search: Rechercher
@@ -831,6 +845,17 @@ ui:
http_50X: Erreur HTTP 500
http_403: Erreur HTTP 403
logout: Se déconnecter
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Notifications
inbox: Boîte de réception
@@ -1027,6 +1052,15 @@ ui:
<p>Nous ne permettons pas de <strong>supprimer un tag avec des synonymes</strong>.</p> <p>Veuillez d'abord supprimer les synonymes de ce tag.</p>
tip: Êtes-vous sûr de vouloir supprimer ?
close: Fermer
merge:
title: Étiquette de fusion
source_tag_title: Étiquette de source
source_tag_description: Cette étiquette de source et ses données associées seront réorganisées vers l'étiquette cible.
target_tag_title: Étiquette cible
target_tag_description: Un synonyme entre ces deux étiquettes sera créé après la fusion.
no_results: Aucune étiquette correspondante
btn_submit: Valider
btn_close: Fermer
edit_tag:
title: Editer le tag
default_reason: Éditer le tag
@@ -1045,6 +1079,9 @@ ui:
day: jour
hours: heures
days: jours
month: month
months: months
year: year
reaction:
heart: cœur
smile: sourire
@@ -1100,10 +1137,10 @@ ui:
more: Plus
wiki: Wiki
ask:
title: Ajouter une question
title: Create Question
edit_title: Modifier la question
default_reason: Modifier la question
default_first_reason: Ajouter une question
default_first_reason: Create question
similar_questions: Questions similaires
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Modification
title:
label: Titre
placeholder: Soyez précis et imaginez que vous posez une question à une autre personne
placeholder: What's your topic? Be specific.
msg:
empty: Le titre ne peut pas être vide.
range: Titre de 150 caractères maximum
@@ -1119,6 +1156,9 @@ ui:
label: Corps
msg:
empty: Le corps ne peut pas être vide.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Étiquettes
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Ajouter une étiquette
create_btn: Créer une nouvelle étiquette
search_tag: Rechercher une étiquette
hint: "Décrivez en quoi consiste votre question, au moins une étiquette est requise."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: Aucune étiquette correspondante
tag_required_text: Étiquette requise (au moins une)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Rechercher
footer:
build_on: >-
Propulsé par <1> Apache Answer </1>- le logiciel open-source qui alimente les communautés de Q&A.<br />Fait avec amour ©️ {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Remplacer
loading: chargement en cours...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Le nom ne peut pas être vide.
range: Le nom doit contenir entre 2 et 30 caractères.
character: 'Doit utiliser le jeu de caractères "a-z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Email
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Nom affiché
msg: Le nom ne peut être vide.
msg_range: Le nom doit contenir moins de 30 caractères.
msg_range: Le nom d'affichage doit contenir entre 2 et 30 caractères.
username:
label: Nom d'utilisateur
caption: Les gens peuvent vous mentionner avec "@username".
msg: Le nom d'utilisateur ne peut pas être vide.
msg_range: Le nom d'utilisateur doit contenir moins de 30 caractères.
character: 'Doit utiliser seulement les caractères "a-z", "0-9", " - . _"'
msg_range: Le nom d'utilisateur doit contenir entre 2 et 30 caractères.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Photo de profil
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Votre révision s'affichera après vérification.
sent_success: Envoyé avec succès
related_question:
title: Questions liées
title: Related
answers: réponses
linked_question:
title: Questions connexes
description: Questions liées à
no_linked_question: Aucune question liée à cette question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Personnes interrogées
desc: Invite people who you think might know the answer.
@@ -1359,9 +1400,11 @@ ui:
search: Rechercher des personnes
question_detail:
action: Action
created: Created
Asked: Demandé
asked: demandé
update: Modifié
Edited: Edited
edit: modifié
commented: commenté
Views: Consultée
@@ -1441,7 +1484,7 @@ ui:
signup: S'inscrire
logout: Se déconnecter
verify: Vérifier
add_question: Ajouter une question
create: Créer
approve: Approuver
reject: Rejeter
skip: Ignorer
@@ -1473,15 +1516,16 @@ ui:
normal: Normal
closed: Fermé
deleted: Supprimé
deleted_permanently: Deleted permanently
deleted_permanently: Supprimé définitivement
pending: En attente de traitement
more: Plus
view: View
card: Card
view: Vue
card: Carte
compact: Compact
display_below: Display below
always_display: Always display
or: or
display_below: Afficher dessous
always_display: Toujours afficher
or: ou
back_sites: Retour aux sites
search:
title: Résultats de la recherche
keywords: Mots-clés
@@ -1489,6 +1533,7 @@ ui:
follow: Suivre
following: Abonnements
counts: "{{count}} Résultats"
counts_loading: "... Results"
more: Plus
sort_btns:
relevance: Pertinence
@@ -1516,8 +1561,8 @@ ui:
modal_confirm:
title: Erreur...
delete_permanently:
title: Delete permanently
content: Are you sure you want to delete permanently?
title: Supprimer définitivement
content: Êtes-vous sûr de vouloir supprimer définitivement ?
account_result:
success: Votre nouveau compte est confirmé; vous serez redirigé vers la page d'accueil.
link: Continuer vers la page d'accueil
@@ -1540,6 +1585,7 @@ ui:
all_questions: Toutes les questions
x_questions: "{{ count }} questions"
x_answers: "{{ count }} réponses"
x_posts: "{{ count }} Posts"
questions: Questions
answers: Réponses
newest: Les plus récents
@@ -1622,22 +1668,22 @@ ui:
placeholder: /data/answer.db
msg: Le fichier de base de données ne doit pas être vide.
ssl_enabled:
label: Enable SSL
label: Activer SSL
ssl_enabled_on:
label: On
ssl_enabled_off:
label: Off
ssl_mode:
label: SSL Mode
label: Mode SSL
ssl_root_cert:
placeholder: sslrootcert file path
msg: Path to sslrootcert file cannot be empty
placeholder: Chemin du fichier sslrootcert
msg: Le chemin vers le fichier sslrootcert ne peut pas être vide
ssl_cert:
placeholder: sslcert file path
msg: Path to sslcert file cannot be empty
placeholder: Chemin du fichier sslcert
msg: Le chemin vers le fichier sslcert ne peut pas être vide
ssl_key:
placeholder: sslkey file path
msg: Path to sslkey file cannot be empty
placeholder: Chemin du fichier sslkey
msg: Le chemin vers le fichier sslkey ne peut pas être vide
config_yaml:
title: Créer config.yaml
label: Le fichier config.yaml a été créé.
@@ -1670,8 +1716,8 @@ ui:
admin_name:
label: Nom
msg: Le nom ne peut pas être vide.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: La longueur du nom doit être comprise entre 2 et 30 caractères.
admin_password:
label: Mot de passe
text: >-
@@ -1680,9 +1726,9 @@ ui:
msg_min_length: Le mot de passe doit comporter au moins 8 caractères.
msg_max_length: Le mot de passe doit comporter au maximum 32 caractères.
admin_confirm_password:
label: "Confirm Password"
text: "Please re-enter your password to confirm."
msg: "Confirm password does not match."
label: "Répétez le mot de passe"
text: "Veuillez saisir à nouveau votre mot de passe pour confirmer."
msg: "Les mots de passe ne correspondent pas."
admin_email:
label: Email
text: Vous aurez besoin de cet email pour vous connecter.
@@ -1731,16 +1777,29 @@ ui:
branding: Marque
legal: Légal
write: Écrire
terms: Terms
tos: Conditions d'utilisation
privacy: Confidentialité
seo: SEO
customize: Personnaliser
themes: Thèmes
css_html: CSS/HTML
login: Se connecter
privileges: Privilèges
plugins: Extensions
installed_plugins: Extensions installées
apperance: Apparence
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Bienvenue sur {{site_name}}
user_center:
login: Connexion
@@ -1767,15 +1826,15 @@ ui:
site_statistics: Statistiques du site
questions: "Questions :"
resolved: "Résolu :"
unanswered: "Sans réponse:"
unanswered: "Sans réponse :"
answers: "Réponses :"
comments: "Commentaires:"
votes: "Votes :"
users: "Utilisateurs :"
flags: "Signalements:"
reviews: "Revoir:"
reviews: "Revoir :"
site_health: Etat du site
version: "Version:"
version: "Version :"
https: "HTTPS :"
upload_folder: "Dossier de téléversement :"
run_mode: "Mode de fonctionnement :"
@@ -1786,7 +1845,7 @@ ui:
system_info: Informations système
go_version: "Version de Go :"
database: "Base de donnée :"
database_size: "Taille de la base de données:"
database_size: "Taille de la base de données :"
storage_used: "Stockage utilisé :"
uptime: "Uptime :"
links: Liens
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Nom affiché
msg_range: Afficher le nom jusqu'à 30 caractères.
msg_range: Le nom d'affichage doit contenir entre 2 et 30 caractères.
username:
label: Nom d'utilisateur
msg_range: Nom d'utilisateur jusqu'à 30 caractères.
msg_range: Le nom d'utilisateur doit contenir entre 2 et 30 caractères.
email:
label: Email
msg_invalid: Adresse e-mail non valide.
@@ -1877,7 +1936,8 @@ ui:
reputation: Réputation
created_at: Date de création
delete_at: Date de suppression
suspend_at: Temps de suspension
suspend_at: Date de suspension
suspend_until: Suspend until
status: Statut
role: Rôle
action: Action
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspendre cet utilisateur
content: Un utilisateur suspendu ne peut pas se connecter.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Questions
unlisted: Non listé
@@ -1972,6 +2034,12 @@ ui:
label: Fuseau Horaire
msg: Le fuseau horaire ne peut pas être vide.
text: Choisissez une ville dans le même fuseau horaire que vous.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2038,16 +2106,22 @@ ui:
label: Protection des données
text: "Vous pouvez ajouter le contenu des conditions de service ici. Si vous avez déjà un document hébergé ailleurs, veuillez fournir l'URL complète ici."
external_content_display:
label: External content
text: "Content includes images, videos, and media embedded from external websites."
always_display: Always display external content
ask_before_display: Ask before displaying external content
label: Contenu externe
text: "Le contenu comprend des images, des vidéos et des médias intégrés à partir de sites web externes."
always_display: Toujours afficher le contenu externe
ask_before_display: Demander avant d'afficher le contenu externe
write:
page_title: Écrire
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Écriture de la réponse
label: Chaque utilisateur ne peut écrire qu'une seule réponse pour chaque question
text: "Désactivez pour permettre aux utilisateurs d'écrire plusieurs réponses à la même question, ce qui peut causer une perte de concentration des réponses."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Tags recommandés
text: "Les balises recommandées apparaîtront par défaut dans la liste déroulante."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Jeu de couleurs
navbar_style:
label: Style de la Navbar
label: Style d'arrière-plan de la barre de navigation
primary_color:
label: Couleur primaire
text: Modifier les couleurs utilisées par vos thèmes
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS et HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Voir les logs
status: Statut
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (optionnel)
empty: ne peut pas être vide
@@ -2295,13 +2437,14 @@ ui:
user_normal: Cet utilisateur est déjà normal.
user_suspended: Cet utilisateur a été suspendu.
user_deleted: Cet utilisateur a été supprimé.
user_added: User has been added successfully.
badge_activated: Ce badge a été activé.
badge_inactivated: Ce badge a été désactivé.
users_deleted: These users have been deleted.
posts_deleted: These questions have been deleted.
answers_deleted: These answers have been deleted.
copy: Copy to clipboard
copied: Copied
external_content_warning: External images/media are not displayed.
users_deleted: Ces utilisateurs ont été supprimés.
posts_deleted: Ces questions ont été supprimées.
answers_deleted: Ces réponses ont été supprimées.
copy: Copier dans le presse-papier
copied: Copié
external_content_warning: Les images/médias externes ne sont pas affichés.
+3 -3
View File
@@ -678,13 +678,13 @@ ui:
display_name:
label: Display Name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+169 -26
View File
@@ -57,6 +57,8 @@ backend:
other: Edit
undelete:
other: Undelete
merge:
other: Merge
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: No permission to update.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Reputation rank fail to meet the condition.
@@ -261,6 +265,8 @@ backend:
other: You cannot delete a tag that is in use.
cannot_set_synonym_as_itself:
other: You cannot set the synonym of the current tag as itself.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: The from name cannot be a email address.
@@ -304,6 +310,14 @@ backend:
other: "Error {{.Field}} format near '{{.Content}}' at line {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "The number of users you add at once should be in the range of 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Read config failed
@@ -564,7 +578,7 @@ backend:
name:
other: First Link
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: First Reaction
@@ -807,7 +821,7 @@ ui:
tag_wiki: tag wiki
create_tag: Create Tag
edit_tag: Edit Tag
ask_a_question: Add Question
ask_a_question: Create Question
edit_question: Edit Question
edit_answer: Edit Answer
search: Search
@@ -831,6 +845,17 @@ ui:
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Notifications
inbox: Inbox
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: Are you sure you wish to delete?
close: Close
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Edit Tag
default_reason: Edit tag
@@ -1045,6 +1079,9 @@ ui:
day: day
hours: hours
days: days
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1100,10 +1137,10 @@ ui:
more: More
wiki: Wiki
ask:
title: Add Question
title: Create Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
default_first_reason: Create question
similar_questions: Similar questions
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Revision
title:
label: Title
placeholder: Be specific and imagine you're asking a question to another person
placeholder: What's your topic? Be specific.
msg:
empty: Title cannot be empty.
range: Title up to 150 characters
@@ -1119,6 +1156,9 @@ ui:
label: Body
msg:
empty: Body cannot be empty.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Tags
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Add tag
create_btn: Create new tag
search_tag: Search tag
hint: "Describe what your question is about, at least one tag is required."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: No tags matched
tag_required_text: Required tag (at least one)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Search
footer:
build_on: >-
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Change
loading: loading...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Name cannot be empty.
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Email
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Display name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile image
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Your revision will show after review.
sent_success: Sent successfully
related_question:
title: Related Questions
title: Related
answers: answers
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: People Asked
desc: Select people who you think might know the answer.
@@ -1359,9 +1400,11 @@ ui:
search: Search people
question_detail:
action: Action
created: Created
Asked: Asked
asked: asked
update: Modified
Edited: Edited
edit: edited
commented: commented
Views: Viewed
@@ -1441,7 +1484,7 @@ ui:
signup: Sign up
logout: Log out
verify: Verify
add_question: Add question
create: Create
approve: Approve
reject: Reject
skip: Skip
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Search Results
keywords: Keywords
@@ -1489,6 +1533,7 @@ ui:
follow: Follow
following: Following
counts: "{{count}} Results"
counts_loading: "... Results"
more: More
sort_btns:
relevance: Relevance
@@ -1540,6 +1585,7 @@ ui:
all_questions: All Questions
x_questions: "{{ count }} Questions"
x_answers: "{{ count }} answers"
x_posts: "{{ count }} Posts"
questions: Questions
answers: Answers
newest: Newest
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Name
msg: Name cannot be empty.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Password
@@ -1731,16 +1777,29 @@ ui:
branding: Branding
legal: Legal
write: Write
terms: Terms
tos: Terms of Service
privacy: Privacy
seo: SEO
customize: Customize
themes: Themes
css_html: CSS/HTML
login: Login
privileges: Privileges
plugins: Plugins
installed_plugins: Installed Plugins
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Welcome to {{site_name}}
user_center:
login: Login
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Invalid Email Address.
@@ -1875,9 +1934,10 @@ ui:
name: Name
email: Email
reputation: Reputation
created_at: Created Time
delete_at: Deleted Time
suspend_at: Suspended Time
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Status
role: Role
action: Action
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspend this user
content: A suspended user can't log in.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Questions
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: Timezone
msg: Timezone cannot be empty.
text: Choose a city in the same timezone as you.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Write
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Each user can only write one answer for each question
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Color scheme
navbar_style:
label: Navbar style
label: Navbar background style
primary_color:
label: Primary color
text: Modify the colors used by your themes
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS and HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Show logs
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (optional)
empty: cannot be empty
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+3 -3
View File
@@ -678,13 +678,13 @@ ui:
display_name:
label: Display Name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+1 -1
View File
@@ -677,7 +677,7 @@ ui:
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters
character: 'Must use the character set "a-z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+1 -1
View File
@@ -43,7 +43,7 @@ language_options:
progress: 96
- label: "Русский"
value: "ru_RU"
progress: 80
progress: 100
- label: "简体中文"
value: "zh_CN"
progress: 100
+171 -28
View File
@@ -57,6 +57,8 @@ backend:
other: Undang seseorang untuk menjawab
undelete:
other: Undelete
merge:
other: Merge
role:
name:
user:
@@ -108,7 +110,7 @@ backend:
rank_invite_someone_to_answer_label:
other: Undang seseorang untuk menjawab
rank_tag_add_label:
other:
other: Buat tag baru
rank_tag_edit_label:
other: Edit tag description (need to review)
rank_question_edit_label:
@@ -130,7 +132,7 @@ backend:
rank_tag_synonym_label:
other: Manage tag synonyms
email:
other:
other: Email
e_mail:
other: Email
password:
@@ -232,6 +234,8 @@ backend:
other: Tidak diizinkan untuk memperbarui.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Reputation rank fail to meet the condition.
@@ -261,6 +265,8 @@ backend:
other: You cannot delete a tag that is in use.
cannot_set_synonym_as_itself:
other: Anda tidak bisa menetapkan sinonim dari tag saat ini dengan tag yang sama.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: The from name cannot be a email address.
@@ -304,6 +310,14 @@ backend:
other: "Error {{.Field}} format near '{{.Content}}' at line {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "The number of users you add at once should be in the range of 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Gagal membaca konfigurasi
@@ -564,7 +578,7 @@ backend:
name:
other: First Link
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: First Reaction
@@ -807,7 +821,7 @@ ui:
tag_wiki: tag wiki
create_tag: Create Tag
edit_tag: Ubah Tag
ask_a_question: Tambahkan Pertanyaan
ask_a_question: Create Question
edit_question: Sunting Pertanyaan
edit_answer: Sunting jawaban
search: Cari
@@ -831,6 +845,17 @@ ui:
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Pemberitahuan
inbox: Kotak Masuk
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: Are you sure you wish to delete?
close: Tutup
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Ubah Tag
default_reason: Sunting tag
@@ -1045,6 +1079,9 @@ ui:
day: hari
hours: hours
days: days
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1100,10 +1137,10 @@ ui:
more: More
wiki: Wiki
ask:
title: Add Question
title: Create Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
default_first_reason: Create question
similar_questions: Similar questions
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Revision
title:
label: Title
placeholder: Be specific and imagine you're asking a question to another person
placeholder: What's your topic? Be specific.
msg:
empty: Title cannot be empty.
range: Title up to 150 characters
@@ -1119,6 +1156,9 @@ ui:
label: Body
msg:
empty: Body cannot be empty.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Tags
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Add tag
create_btn: Create new tag
search_tag: Search tag
hint: "Describe what your question is about, at least one tag is required."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: No tags matched
tag_required_text: Required tag (at least one)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Cari
footer:
build_on: >-
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Ubah
loading: sedang memuat...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Nama tidak boleh kosong.
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Email
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Display name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile image
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Revisi Anda akan ditampilkan setelah ditinjau.
sent_success: Sent successfully
related_question:
title: Pertanyaan Terkait
title: Related
answers: jawaban
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: People Asked
desc: Select people who you think might know the answer.
@@ -1359,9 +1400,11 @@ ui:
search: Search people
question_detail:
action: Action
created: Created
Asked: Ditanyakan
asked: ditanyakan
update: Diubah
Edited: Edited
edit: disunting
commented: commented
Views: Dilihat
@@ -1441,7 +1484,7 @@ ui:
signup: Daftar
logout: Keluar
verify: Verifikasi
add_question: Tambahkan pertanyaan
create: Create
approve: Approve
reject: Reject
skip: Skip
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Search Results
keywords: Keywords
@@ -1489,6 +1533,7 @@ ui:
follow: Follow
following: Following
counts: "{{count}} Results"
counts_loading: "... Results"
more: More
sort_btns:
relevance: Relevance
@@ -1540,6 +1585,7 @@ ui:
all_questions: All Questions
x_questions: "{{ count }} Questions"
x_answers: "{{ count }} answers"
x_posts: "{{ count }} Posts"
questions: Questions
answers: Jawaban
newest: Terbaru
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Name
msg: Name cannot be empty.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Password
@@ -1731,16 +1777,29 @@ ui:
branding: Branding
legal: Legal
write: Write
terms: Terms
tos: Terms of Service
privacy: Privasi
seo: SEO
customize: Kostumisasi
themes: Tema
css_html: CSS/HTML
login: Masuk
privileges: Privileges
plugins: Plugins
installed_plugins: Installed Plugins
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Welcome to {{site_name}}
user_center:
login: Login
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Invalid Email Address.
@@ -1875,9 +1934,10 @@ ui:
name: Name
email: Email
reputation: Reputation
created_at: Waktu Pembuatan
delete_at: Waktu Penghapusan
suspend_at: Waktu penundaan
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Status
role: Role
action: Action
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspend this user
content: A suspended user can't log in.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Pertanyaan
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: Timezone
msg: Timezone cannot be empty.
text: Choose a city in the same timezone as you.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Write
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Each user can only write one answer for each question
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Color scheme
navbar_style:
label: Navbar style
label: Navbar background style
primary_color:
label: Primary color
text: Modify the colors used by your themes
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS and HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Show logs
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (optional)
empty: cannot be empty
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+176 -33
View File
@@ -57,6 +57,8 @@ backend:
other: Modifica
undelete:
other: Ripristina
merge:
other: Unisci
role:
name:
user:
@@ -138,7 +140,7 @@ backend:
pass:
other: Password
old_pass:
other: Current password
other: Password attuale
original_text:
other: Questo post
email_or_password_wrong_error:
@@ -171,7 +173,7 @@ backend:
question_closed_cannot_add:
other: Le domande sono chiuse e non possono essere aggiunte.
content_cannot_empty:
other: Answer content cannot be empty.
other: Il contenuto della risposta non può essere vuoto.
comment:
edit_without_permission:
other: Non si hanno di privilegi sufficienti per modificare il commento.
@@ -180,7 +182,7 @@ backend:
cannot_edit_after_deadline:
other: Il tempo per editare è scaduto.
content_cannot_empty:
other: Comment content cannot be empty.
other: Il commento non può essere vuoto.
email:
duplicate:
other: Email già esistente.
@@ -231,7 +233,9 @@ backend:
cannot_update:
other: Nessun permesso per l'aggiornamento.
content_cannot_empty:
other: Content cannot be empty.
other: Il contenuto non può essere vuoto.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Il rango di reputazione non soddisfa le condizioni.
@@ -261,6 +265,8 @@ backend:
other: Non è possibile eliminare un tag in uso.
cannot_set_synonym_as_itself:
other: Non puoi impostare il sinonimo del tag corrente come se stesso.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: Il mittente non può essere un indirizzo email.
@@ -304,6 +310,14 @@ backend:
other: "Errore {{.Field}} formato vicino a '{{.Content}}' alla riga {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "Il numero di utenti che aggiungi contemporaneamente dovrebbe essere compreso tra 1 e {{.MaxAmount}}."
status_suspended_forever:
other: "<strong>Questo utente è stato sospeso per sempre.</strong> Questo utente non soddisfa le linee guida della comunità."
status_suspended_until:
other: "<strong>Questo utente è stato sospeso fino a {{.SuspendedUntil}}.</strong> Questo utente non soddisfa le linee guida della comunità."
status_deleted:
other: "Utente eliminato."
status_inactive:
other: "L'utente è inattivo."
config:
read_config_failed:
other: Configurazione lettura fallita
@@ -492,7 +506,7 @@ backend:
title:
other: "[{{.SiteName}}] Nuova domanda: {{.QuestionTitle}}"
body:
other: "<a href='{{.QuestionUrl}}'>{{.QuestionTitle}}</a><br>\n<small>{{.Tags}}</small><br><br>\n\n--<br>\nNote: This is an automatic system email, please do not reply to this message as your response will not be seen.<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>Unsubscribe</a></small>"
other: "<a href='{{.QuestionUrl}}'>{{.QuestionTitle}}</a><br>\n<small>{{.Tags}}</small><br><br>\n\n--<br>\nNota: Si tratta di un'email di sistema automatica, non rispondere a questo messaggio perché la tua risposta non sarà visualizzata.<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>Cancellati</a></small>"
pass_reset:
title:
other: "[{{.SiteName }}] Reimpostazione della password"
@@ -507,7 +521,7 @@ backend:
title:
other: "[{{.SiteName}}] Email di prova"
body:
other: "This is a test email.\n<br><br>\n\n--<br>\nNote: This is an automatic system email, please do not reply to this message as your response will not be seen.\n<br><br>\n\n--<br>\nNota: Questa è un'email di sistema automatica, non rispondere a questo messaggio perché la tua risposta non verrà visualizzata."
other: "Questa è una email di prova.\n<br><br>\n\n--<br>\nNota: Questa è un'email di sistema automatica, non rispondere a questo messaggio perché la tua risposta non verrà visualizzata."
action_activity_type:
upvote:
other: voto a favore
@@ -564,7 +578,7 @@ backend:
name:
other: Primo Link
desc:
other: Aggiunto un link a un altro post per la prima volta
other: Per prima cosa è stato aggiunto un link ad un altro post.
first_reaction:
name:
other: Prima Reazione
@@ -807,7 +821,7 @@ ui:
tag_wiki: tag wiki
create_tag: Crea tag
edit_tag: Modifica Tag
ask_a_question: Aggiungi una domanda
ask_a_question: Crea domanda
edit_question: Modifica Domanda
edit_answer: Modifica risposta
search: Cerca
@@ -831,6 +845,17 @@ ui:
http_50X: Errore HTTP 500
http_403: Errore HTTP 403
logout: Disconnetti
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Notifiche
inbox: Posta in arrivo
@@ -1027,6 +1052,15 @@ ui:
<p>Non è consentita <strong>l'eliminazione di tag con sinonimi</strong>.</p> <p>Per favore, rimuovi prima i sinonimi da questo tag.</p>
tip: Sei sicuro di voler cancellare?
close: Chiudi
merge:
title: Unisci tag
source_tag_title: Cerca tag
source_tag_description: Il tag sorgente e i dati associati verranno rimappati al tag di destinazione.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Modifica Tag
default_reason: Modifica tag
@@ -1045,6 +1079,9 @@ ui:
day: giorno
hours: ore
days: giorni
month: month
months: months
year: year
reaction:
heart: cuore
smile: sorriso
@@ -1100,10 +1137,10 @@ ui:
more: Altro
wiki: Wiki
ask:
title: Aggiungi una domanda
title: Create Question
edit_title: Modifica Domanda
default_reason: Modifica domanda
default_first_reason: Aggiungi una domanda
default_first_reason: Create question
similar_questions: Domande simili
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Revisione
title:
label: Titolo
placeholder: Sii specifico e immagina tu stia facendo una domanda ad un'altra persona
placeholder: What's your topic? Be specific.
msg:
empty: Il titolo non può essere vuoto.
range: Il titolo non può superare i 150 caratteri
@@ -1119,6 +1156,9 @@ ui:
label: Contenuto
msg:
empty: Il corpo del testo non può essere vuoto.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Tags
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Aggiungi tag
create_btn: Crea un nuovo tag
search_tag: Cerca tag
hint: "Descrivi qual è la tua domanda, è richiesto almeno un tag."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: Nessun tag corrispondente
tag_required_text: Tag richiesto (almeno uno)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Cerca
footer:
build_on: >-
Basato su <1> Apache Answer </1>, il software open source che alimenta le comunità di domande e risposte.<br />Fatto con amore © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Modifica
loading: caricamento in corso...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Il nome non può essere vuoto.
range: Il nome deve essere di lunghezza compresa tra 2 e 30 caratteri.
character: 'È necessario utilizzare il set di caratteri "a-z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: E-mail
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Visualizza nome
msg: Il nome utente non può essere vuoto.
msg_range: Il nome utente non può superare i 30 caratteri.
msg_range: Display name must be 2-30 characters in length.
username:
label: Nome utente
caption: Gli altri utenti possono menzionarti con @{{username}}.
msg: Il nome utente non può essere vuoto.
msg_range: Nome utente fino a 30 caratteri.
character: 'È necessario utilizzare il set di caratteri "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Immagine del profilo
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Le tue modifiche verranno visualizzata dopo la revisione.
sent_success: Inviato correttamente
related_question:
title: Domande correlate
title: Related
answers: risposte
linked_question:
title: Domande correlate
description: Domande connesse a
no_linked_question: Nessuna domanda legata a questa domanda.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Persone Interpellate
desc: Seleziona le persone che pensi potrebbero conoscere la risposta.
@@ -1359,9 +1400,11 @@ ui:
search: Cerca persone
question_detail:
action: Azione
created: Created
Asked: Chiesto
asked: chiesto
update: Modificato
Edited: Edited
edit: modificato
commented: commentato
Views: Visualizzati
@@ -1441,7 +1484,7 @@ ui:
signup: Registrati
logout: Disconnetti
verify: Verifica
add_question: Aggiungi una domanda
create: Create
approve: Approva
reject: Rifiuta
skip: Salta
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Risultati della ricerca
keywords: Parole chiave
@@ -1489,6 +1533,7 @@ ui:
follow: Segui
following: Segui già
counts: "{{count}} Risultati"
counts_loading: "... Results"
more: Altro
sort_btns:
relevance: Rilevanza
@@ -1511,7 +1556,7 @@ ui:
via: Condividi il post via...
copied: Copiato
facebook: Condividi su Facebook
twitter: Condividi su X
twitter: Share to X
cannot_vote_for_self: Non puoi votare un tuo post!
modal_confirm:
title: Errore...
@@ -1540,6 +1585,7 @@ ui:
all_questions: Tutte le domande
x_questions: "{{ count }} Domande"
x_answers: "{{count}} risposte"
x_posts: "{{ count }} Posts"
questions: Domande
answers: Risposte
newest: Più recenti
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Nome
msg: Il nome non può essere vuoto.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Password
@@ -1731,16 +1777,29 @@ ui:
branding: Marchio
legal: Legale
write: Scrivi
terms: Terms
tos: Termini del servizio
privacy: Privacy
seo: SEO
customize: Personalizza
themes: Temi
css_html: CSS/HTML
login: Accedi
privileges: Privilegi
plugins: Plugin
installed_plugins: Plugin installati
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Benvenuto/a su {{site_name}}!
user_center:
login: Accedi
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Visualizza nome
msg_range: Il nome utente non può superare i 30 caratteri.
msg_range: Il nome visualizzato deve essere di 2-30 caratteri di lunghezza.
username:
label: Nome utente
msg_range: Nome utente fino a 30 caratteri.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Indirizzo e-mail non valido.
@@ -1875,9 +1934,10 @@ ui:
name: Nome
email: E-mail
reputation: Reputazione
created_at: Data di creazione
delete_at: Data di cancellazione
suspend_at: Data di sospensione
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Sospendi fino al
status: Stato
role: Ruolo
action: Azione
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Sospendi questo utente
content: Un utente sospeso non può accedere.
label: Per quanto tempo vuoi sospendere l'utente?
forever: Per sempre
questions:
page_title: Domande
unlisted: Rimosso dall'elenco
@@ -1972,6 +2034,12 @@ ui:
label: Fuso orario
msg: Il fuso orario non può essere vuoto.
text: Scegli una città con il tuo stesso fuso orario.
avatar:
label: Avatar Predefinito
text: Per gli utenti senza un proprio avatar personalizzato.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: Protocollo di Trasferimento Posta Semplice
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Scrivi
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Risposta a scrivere
label: Ogni utente può scrivere una sola risposta per ogni domanda
text: "Disattiva per consentire agli utenti di scrivere risposte multiple alla stessa domanda, il che potrebbe causare una risposta sfocata."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Raccomanda tag
text: "I tag consigliati verranno mostrati nell'elenco a discesa per impostazione predefinita."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Schema colore
navbar_style:
label: Stile della barra di navigazione
label: Navbar background style
primary_color:
label: Colore primario
text: Modifica i colori utilizzati dai tuoi temi
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS e HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Visualizza i log
status: Stato
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (opzionale)
empty: non può essere vuoto
@@ -2295,6 +2437,7 @@ ui:
user_normal: Questo utente è già normale.
user_suspended: Questo utente è stato sospeso.
user_deleted: Questo utente è stato eliminato.
user_added: User has been added successfully.
badge_activated: Questo badge è stato attivato.
badge_inactivated: Questo badge è stato disattivato.
users_deleted: These users have been deleted.
+217 -75
View File
@@ -57,6 +57,8 @@ backend:
other: 編集
undelete:
other: 復元する
merge:
other: マージ
role:
name:
user:
@@ -138,7 +140,7 @@ backend:
pass:
other: パスワード
old_pass:
other: Current password
other: 現在のパスワード
original_text:
other: 投稿
email_or_password_wrong_error:
@@ -171,7 +173,7 @@ backend:
question_closed_cannot_add:
other: 質問はクローズされて、追加できません。
content_cannot_empty:
other: Answer content cannot be empty.
other: 回答を入力してください。
comment:
edit_without_permission:
other: コメントを編集することはできません。
@@ -180,7 +182,7 @@ backend:
cannot_edit_after_deadline:
other: コメント時間が長すぎて変更できません。
content_cannot_empty:
other: Comment content cannot be empty.
other: コメントを入力してください。
email:
duplicate:
other: メールアドレスは既に存在しています。
@@ -231,7 +233,9 @@ backend:
cannot_update:
other: 更新する権限がありません。
content_cannot_empty:
other: Content cannot be empty.
other: 内容を入力してください。
content_less_than_minimum:
other: 入力された内容の文字数が足りません。
rank:
fail_to_meet_the_condition:
other: 評判ランクが条件を満たしていません
@@ -261,6 +265,8 @@ backend:
other: 使用中のタグは削除できません。
cannot_set_synonym_as_itself:
other: 現在のタグの同義語をそのものとして設定することはできません。
minimum_count:
other: タグが不足しています。
smtp:
config_from_name_cannot_be_email:
other: Fromの名前はメールアドレスにできません。
@@ -304,6 +310,14 @@ backend:
other: "Error {{.Field}} format near '{{.Content}}' at line {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "一度に追加するユーザーの数は、1 -{{.MaxAmount}} の範囲にする必要があります。"
status_suspended_forever:
other: "<strong>このユーザーは永久に停止されました。</strong> このユーザーはコミュニティガイドラインに準拠していません。"
status_suspended_until:
other: "<strong>このユーザーは {{.SuspendedUntil}} まで利用停止となりました。</strong> このユーザーはコミュニティ ガイドラインに準拠していません。"
status_deleted:
other: "このユーザーは削除されました。"
status_inactive:
other: "このユーザーは非アクティブです。"
config:
read_config_failed:
other: configの読み込みに失敗しました
@@ -482,17 +496,17 @@ backend:
title:
other: "[{{.SiteName}}] {{.DisplayName}} があなたを回答に招待しました"
body:
other: "<a href='{{.InviteUrl}}'>{{.QuestionTitle}}</a><br><br>\n\n{{.DisplayName}}:<br>\n<blockquote>あなたなら答えを知っているかもしれません。</blockquote><br>\n<a href='{{.InviteUrl}}'>{{.SiteName}}で確認</a><br><br>\n\n--<br>\nNote: This is an automatic system email, please do not reply to this message as your response will not be seen.<br><br>\n\n注: これはシステムからの自動メールです。このメッセージに返信しないでください。<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>配信停止</a></small>\n"
other: "<a href='{{.InviteUrl}}'>{{.QuestionTitle}}</a><br><br>\n\n{{.DisplayName}}:<br>\n<blockquote>あなたなら答えを知っているかもしれません。</blockquote><br>\n<a href='{{.InviteUrl}}'>{{.SiteName}}で確認</a><br><br>\n\n--<br>\n注: これはシステムからの自動メールです。このメッセージに返信しないでください。<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>配信停止</a></small>\n"
new_comment:
title:
other: "[{{.SiteName}}] {{.DisplayName}} があなたの投稿にコメントしました"
body:
other: "<a href='{{.CommentUrl}}'>{{.QuestionTitle}}</a><br><br>\n\n{{.DisplayName}}:<br>\n<blockquote>{{.CommentSummary}}</blockquote><br>\n<a href='{{.CommentUrl}}'>で確認{{.SiteName}}</a><br><br>\n\n--<br>\nNote: This is an automatic system email, please do not reply to this message as your response will not be seen.<br><br>\n\n注: これはシステムからの自動メールです。このメッセージに返信しないでください。<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>配信停止</a></small>"
other: "<a href='{{.CommentUrl}}'>{{.QuestionTitle}}</a><br><br>\n\n{{.DisplayName}}:<br>\n<blockquote>{{.CommentSummary}}</blockquote><br>\n<a href='{{.CommentUrl}}'>で確認{{.SiteName}}</a><br><br>\n\n--<br>\n注: これはシステムからの自動メールです。このメッセージに返信しないでください。<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>配信停止</a></small>"
new_question:
title:
other: "[{{.SiteName}}] 新しい質問: {{.QuestionTitle}}"
body:
other: "<a href='{{.QuestionUrl}}'>{{.QuestionTitle}}</a><br>\n<small>{{.Tags}}</small><br><br>\n\n--<br>\nNote: This is an automatic system email, please do not reply to this message as your response will not be seen.<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>Unsubscribe</a></small>"
other: "<a href='{{.QuestionUrl}}'>{{.QuestionTitle}}</a><br>\n<small>{{.Tags}}</small><br><br>\n\n--<br>\n注: これはシステムから送信される自動メールです。ご返信いただいても返信は表示されませんので、ご返信はご遠慮ください。<br><br>\n\n<small><a href='{{.UnsubscribeUrl}}'>購読解除</a></small>"
pass_reset:
title:
other: "[{{.SiteName }}] パスワードリセット"
@@ -564,7 +578,7 @@ backend:
name:
other: はじめてのリンク
desc:
other: 初めて別の記事へのリンクを追加した。
other: 初めて別の投稿へのリンクを追加した。
first_reaction:
name:
other: 初めてのリアクション
@@ -584,17 +598,17 @@ backend:
name:
other: コメントマン
desc:
other: 5つコメントをした
other: 5つコメントをした
new_user_of_the_month:
name:
other: 今月の新しいユーザー
desc:
other: 最初の月に優れた貢献
other: 最初の1ヶ月で優れた貢献をした
read_guidelines:
name:
other: ガイドラインを読んだ
desc:
other: '「コミュニティガイドライン」をご覧ください。'
other: '「コミュニティガイドライン」を読んだ'
reader:
name:
other: リーダー
@@ -734,7 +748,7 @@ backend:
name:
other: 素晴らしい回答
desc:
other: 回答スコアは50以上!!!!1
other: 回答スコアは50以上!!!!
nice_question:
name:
other: ナイスな質問
@@ -794,8 +808,7 @@ backend:
ui:
how_to_format:
title: 書式設定
desc: >-
<ul class="mb-0"><li><p class="mb-2">mention a post: <code>#post_id</code></p></li> <li><p class="mb-2">to make links</p><pre class="mb-2"><code>&lt;https://url.com&gt;<br/><br/>[Title](https://url.com)</code></pre></li><li><p class="mb-2">put returns between paragraphs</p></li><li><p class="mb-2"><em>_italic_</em> or **<strong>bold</strong>**</p></li><li><p class="mb-2">indent code by 4 spaces</p></li><li><p class="mb-2">quote by placing <code>&gt;</code> at start of line</p></li><li><p class="mb-2">backtick escapes <code>`like _this_`</code></p></li><li><p class="mb-2">create code fences with backticks <code>`</code></p><pre class="mb-0"><code>```<br/>code here<br/>```</code></pre></li></ul>
desc: \n
pagination:
prev: 前へ
next: 次へ
@@ -807,7 +820,7 @@ ui:
tag_wiki: タグ wiki
create_tag: タグを作成
edit_tag: タグを編集
ask_a_question: 質問を追加
ask_a_question: 質問を作成
edit_question: 質問を編集
edit_answer: 回答を編集
search: 検索
@@ -831,6 +844,17 @@ ui:
http_50X: HTTP エラー 500
http_403: HTTP エラー 403
logout: ログアウト
posts: 投稿
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: 通知
inbox: 受信トレイ
@@ -951,7 +975,7 @@ ui:
unordered_list:
text: 箇条書きリスト
table:
text: 'テーブル'
text: ' テーブル'
heading: 見出し
cell: セル
file:
@@ -1027,6 +1051,15 @@ ui:
<p> <strong>同義語</strong>でタグを削除することはできません。</p> <p>最初にこのタグから同義語を削除してください。</p>
tip: 本当に削除してもよろしいですか?
close: クローズ
merge:
title: タグをマージ
source_tag_title: ソース タグ
source_tag_description: ソースタグとそれに関連付けられたデータは、ターゲットタグに再マップされます。
target_tag_title: ターゲットタグ
target_tag_description: マージ後、これら2つのタグの同義語が作成されます。
no_results: 一致するタグはありません
btn_submit: 送信
btn_close: 閉じる
edit_tag:
title: タグを編集
default_reason: タグを編集
@@ -1045,6 +1078,9 @@ ui:
day:
hours:
days:
month:
months: ヶ月
year:
reaction:
heart: ハート
smile: 笑顔
@@ -1100,10 +1136,10 @@ ui:
more: もっと見る
wiki: Wiki
ask:
title: 質問を追加
title: 質問を作成
edit_title: 質問を編集
default_reason: 質問を編集
default_first_reason: 質問を追加
default_first_reason: 質問を作成
similar_questions: 類似の質問
form:
fields:
@@ -1111,7 +1147,7 @@ ui:
label: 修正
title:
label: タイトル
placeholder: 具体的にして、あなたが他の人に質問していると想像してください
placeholder: どのようなトピックですか?具体的に教えてください
msg:
empty: タイトルを空にすることはできません。
range: タイトルは最大150文字までです
@@ -1119,6 +1155,9 @@ ui:
label: 本文
msg:
empty: 本文を空にすることはできません。
hint:
optional_body: 質問を記載してください。
minimum_characters: "質問を記載してください。{{min_content_length}} 文字以上の記載が必要です。"
tags:
label: タグ
msg:
@@ -1139,7 +1178,9 @@ ui:
add_btn: タグを追加
create_btn: 新しタグを作成
search_tag: タグを検索
hint: "質問について説明してください。少なくとも1つのタグが必要です。"
hint: 内容を記載してください。1つ以上のタグが必要です。
hint_zero_tags: 内容を記載してください。
hint_more_than_one_tag: "内容を記載してください。{{min_content_length}} 文字以上の記載が必要です。"
no_result: 一致するタグはありません
tag_required_text: 必須タグ (少なくとも 1 つ)
header:
@@ -1158,8 +1199,7 @@ ui:
search:
placeholder: 検索
footer:
build_on: >-
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: 変更
loading: 読み込み中…
@@ -1192,7 +1232,7 @@ ui:
msg:
empty: 名前を空にすることはできません。
range: 230文字の名前を設定してください。
character: '文字セット "a-z", "A-Z", "0-9", " - " を使用する必要があります。'
character: '使用可能な文字は、英小字「a-z」、数字「0-9」、記号「- . _ 」のみです'
email:
label: メールアドレス
msg:
@@ -1264,13 +1304,13 @@ ui:
display_name:
label: 表示名
msg: 表示名は必須です。
msg_range: 表示名は最大 30 文字までです
msg_range: 表示名は 2 ~ 30 文字で入力してください
username:
label: ユーザー名
caption: ユーザーは "@username" としてあなたをメンションできます。
msg: ユーザー名は空にできません。
msg_range: 表示名は最大 30 文字までです
character: '文字セット "a-z", "0-9", " - . _" を使用してください。'
msg_range: ユーザー名は2 ~ 30文字で入力してください
character: '使用可能な文字は、英小字「a-z」、数字「0-9」、記号「- . _ 」のみです'
avatar:
label: プロフィール画像
gravatar: Gravatar
@@ -1324,7 +1364,7 @@ ui:
new_pass:
label: 新しいパスワード
pass_confirm:
label: 新しいパスワードの確認
label: 新しいパスワードの確認
interface:
heading: 外観
lang:
@@ -1345,23 +1385,25 @@ ui:
review: レビュー後にあなたのリビジョンが表示されます。
sent_success: 正常に送信されました。
related_question:
title: 係のある質問
title:
answers: 回答
linked_question:
title: リンクされた質問
description: リンクされている質問
no_linked_question: この質問からリンクされた質問はありません。
title: リンク
description: リンクされた投稿
no_linked_question: このコンテンツからリンクされたコンテンツはありません。
invite_to_answer:
title: People Asked
desc: Select people who you think might know the answer.
title: 回答をリクエスト
desc: 答えられそうな人を招待します。
invite: 回答に招待する
add: ユーザーを追加
search: ユーザーを検索
question_detail:
action: 動作
created: 作成済
Asked: 質問済み
asked: 質問済み
update: 修正済み
Edited: 編集済
edit: 編集済み
commented: コメントしました
Views: 閲覧回数
@@ -1443,7 +1485,7 @@ ui:
signup: 新規登録
logout: ログアウト
verify: 認証
add_question: 質問を追加
create: 作成
approve: 承認
reject: 却下
skip: スキップする
@@ -1475,15 +1517,16 @@ ui:
normal: 通常
closed: クローズ済み
deleted: 削除済み
deleted_permanently: Deleted permanently
deleted_permanently: 完全に削除する
pending: 処理待ち
more: もっと見る
view: View
card: Card
compact: Compact
display_below: Display below
always_display: Always display
or: or
view: 表示方法
card: カード
compact: コンパクト
display_below: 以下に表示
always_display: 常に表示
or: または
back_sites: サイトに戻る
search:
title: 検索結果
keywords: キーワード
@@ -1491,6 +1534,7 @@ ui:
follow: フォロー
following: フォロー中
counts: "結果:{{count}}"
counts_loading: "... 結果"
more: もっと見る
sort_btns:
relevance: 関連性
@@ -1513,13 +1557,13 @@ ui:
via: 投稿を共有...
copied: コピーしました
facebook: Facebookで共有
twitter: Share to X
twitter: Xでシェア
cannot_vote_for_self: 自分の投稿には投票できません。
modal_confirm:
title: エラー...
delete_permanently:
title: Delete permanently
content: Are you sure you want to delete permanently?
title: 完全に削除する
content: 完全に削除しても良いですか?
account_result:
success: 新しいアカウントが確認されました。ホームページにリダイレクトされます。
link: ホームページへ
@@ -1542,12 +1586,13 @@ ui:
all_questions: すべての質問
x_questions: "{{ count }} の質問"
x_answers: "{{ count }} の回答"
x_posts: "{{ count }} の回答"
questions: 質問
answers: 回答
newest: 最新
active: 有効
hot: 人気
frequent: Frequent
frequent: 関心順
recommend: おすすめ
score: スコア
unanswered: 未回答
@@ -1624,22 +1669,22 @@ ui:
placeholder: /data/answer.db
msg: データベースファイルは空にできません。
ssl_enabled:
label: Enable SSL
label: SSLを有効化
ssl_enabled_on:
label: On
ssl_enabled_off:
label: Off
ssl_mode:
label: SSL Mode
label: SSL モード
ssl_root_cert:
placeholder: sslrootcert file path
msg: Path to sslrootcert file cannot be empty
placeholder: sslrootcert ファイルパス
msg: sslrootcert ファイルパスは空にできません
ssl_cert:
placeholder: sslcert file path
msg: Path to sslcert file cannot be empty
placeholder: sslcert ファイルパス
msg: sslcert ファイルパスは空にできません
ssl_key:
placeholder: sslkey file path
msg: Path to sslkey file cannot be empty
placeholder: sslkey ファイルパス
msg: sslkey ファイルパスは空にできません
config_yaml:
title: config.yamlを作成
label: config.yaml ファイルが作成されました。
@@ -1672,8 +1717,8 @@ ui:
admin_name:
label: 名前
msg: 名前を空にすることはできません。
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
character: '使用可能な文字は、英小字「a-z」、数字「0-9」、記号「- . _ 」のみです'
msg_max_length: 名前は2 ~ 30文字で入力してください。
admin_password:
label: パスワード
text: >-
@@ -1682,9 +1727,9 @@ ui:
msg_min_length: パスワードは8文字以上でなければなりません。
msg_max_length: パスワードは最大 32 文字でなければなりません。
admin_confirm_password:
label: "Confirm Password"
text: "Please re-enter your password to confirm."
msg: "Confirm password does not match."
label: "パスワードの確認"
text: "確認のため、パスワードを再入力してください。"
msg: "確認用パスワードが一致しません"
admin_email:
label: メールアドレス
text: ログインするにはこのメールアドレスが必要です。
@@ -1732,17 +1777,30 @@ ui:
smtp: SMTP
branding: ブランディング
legal: 法的事項
write: 書き
write: 編集
terms: 規約
tos: 利用規約
privacy: プライバシー
seo: SEO
customize: カスタマイズ
themes: テーマ
css_html: CSS/HTML
login: ログイン
privileges: 特典
plugins: プラグイン
installed_plugins: 使用中のプラグイン
apperance: 外観
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: '{{site_name}} へようこそ'
user_center:
login: ログイン
@@ -1842,10 +1900,10 @@ ui:
fields:
display_name:
label: 表示名
msg_range: 表示名は最大 30 文字までです
msg_range: 表示名は 2 ~ 30 文字で入力してください
username:
label: ユーザー名
msg_range: ユーザー名は30文字までです
msg_range: ユーザー名は 2 ~ 30 文字で入力してください
email:
label: メールアドレス
msg_invalid: 無効なメールアドレス
@@ -1879,7 +1937,8 @@ ui:
reputation: 評価
created_at: 作成日時
delete_at: 削除日時
suspend_at: サスペンド時間
suspend_at: 凍結時間
suspend_until: まで凍結
status: ステータス
role: ロール
action: 操作
@@ -1914,6 +1973,8 @@ ui:
suspend_user:
title: ユーザーをサスペンドにする
content: 一時停止中のユーザーはログインできません。
label: いつまで凍結しますか?
forever: 無期限
questions:
page_title: 質問
unlisted: 限定公開済み
@@ -1974,6 +2035,12 @@ ui:
label: タイムゾーン
msg: タイムゾーンを空にすることはできません。
text: あなたのタイムゾーンを選択してください。
avatar:
label: デフォルトのアバター
text: 独自のカスタムアバターを持たないユーザー向け。
gravatar_base_url:
label: GravatarのベースURL
text: GravatarプロバイダーのAPIベースのURL。空の場合は無視されます。
smtp:
page_title: SMTP
from_email:
@@ -2040,16 +2107,22 @@ ui:
label: プライバシーポリシー
text: "ここにプライバシーポリシーの内容を追加できます。すでに他の場所でホストされているドキュメントを持っている場合は、こちらにフルURLを入力してください。"
external_content_display:
label: External content
text: "Content includes images, videos, and media embedded from external websites."
always_display: Always display external content
ask_before_display: Ask before displaying external content
label: 外部コンテンツ
text: "コンテンツには、外部ウェブサイトから埋め込まれた画像、ビデオ、およびメディアが含まれます"
always_display: 常に外部コンテンツを表示する
ask_before_display: 外部コンテンツを表示する前に確認する
write:
page_title: 編集
page_title: Files
min_content:
label: 質問に必要な文字数
text: 質問の投稿に必要な本文の文字数です。
restrict_answer:
title: 回答を書く
label: 各ユーザーは同じ質問に対して1つの回答しか書けません
text: "ユーザが同じ質問に複数の回答を書き込めるようにするにはオフにします。これにより回答がフォーカスされていない可能性があります。"
min_tags:
label: "質問に必要なタグ数"
text: "質問の投稿に必要なタグの数です。"
recommend_tags:
label: おすすめタグ
text: "デフォルトでドロップダウンリストに推奨タグが表示されます。"
@@ -2093,10 +2166,14 @@ ui:
color_scheme:
label: 配色
navbar_style:
label: ナビゲーションバーのスタイル
label: ナビゲーションバーの背景スタイル
primary_color:
label: メインカラー
text: テーマで使用される色を変更する
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS と HTML
custom_css:
@@ -2201,6 +2278,70 @@ ui:
show_logs: ログを表示
status: ステータス
title: バッジ
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (任意)
empty: 空にすることはできません
@@ -2297,13 +2438,14 @@ ui:
user_normal: このユーザーは既に有効です。
user_suspended: このユーザーは凍結されています。
user_deleted: このユーザーは削除されました。
user_added: User has been added successfully.
badge_activated: このバッジは有効化されました。
badge_inactivated: このバッジは無効化されています。
users_deleted: These users have been deleted.
posts_deleted: These questions have been deleted.
answers_deleted: These answers have been deleted.
copy: Copy to clipboard
copied: Copied
external_content_warning: External images/media are not displayed.
users_deleted: このユーザーは削除されました。
posts_deleted: この質問は削除されています。
answers_deleted: この回答は削除されています。
copy: クリップボードにコピー
copied: コピーしました
external_content_warning: 外部の画像/メディアは表示されません。
+413 -270
View File
File diff suppressed because it is too large Load Diff
+169 -26
View File
@@ -57,6 +57,8 @@ backend:
other: Edit
undelete:
other: Undelete
merge:
other: Merge
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: No permission to update.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Reputation rank fail to meet the condition.
@@ -261,6 +265,8 @@ backend:
other: You cannot delete a tag that is in use.
cannot_set_synonym_as_itself:
other: You cannot set the synonym of the current tag as itself.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: The from name cannot be a email address.
@@ -304,6 +310,14 @@ backend:
other: "Error {{.Field}} format near '{{.Content}}' at line {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "The number of users you add at once should be in the range of 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Read config failed
@@ -564,7 +578,7 @@ backend:
name:
other: First Link
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: First Reaction
@@ -807,7 +821,7 @@ ui:
tag_wiki: tag wiki
create_tag: Create Tag
edit_tag: Edit Tag
ask_a_question: Add Question
ask_a_question: Create Question
edit_question: Edit Question
edit_answer: Edit Answer
search: Search
@@ -831,6 +845,17 @@ ui:
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Notifications
inbox: Inbox
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: Are you sure you wish to delete?
close: Close
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Edit Tag
default_reason: Edit tag
@@ -1045,6 +1079,9 @@ ui:
day: day
hours: hours
days: days
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1100,10 +1137,10 @@ ui:
more: More
wiki: Wiki
ask:
title: Add Question
title: Create Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
default_first_reason: Create question
similar_questions: Similar questions
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Revision
title:
label: Title
placeholder: Be specific and imagine you're asking a question to another person
placeholder: What's your topic? Be specific.
msg:
empty: Title cannot be empty.
range: Title up to 150 characters
@@ -1119,6 +1156,9 @@ ui:
label: Body
msg:
empty: Body cannot be empty.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Tags
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Add tag
create_btn: Create new tag
search_tag: Search tag
hint: "Describe what your question is about, at least one tag is required."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: No tags matched
tag_required_text: Required tag (at least one)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Search
footer:
build_on: >-
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Change
loading: loading...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Name cannot be empty.
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Email
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Display name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile image
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Your revision will show after review.
sent_success: Sent successfully
related_question:
title: Related Questions
title: Related
answers: answers
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Invite People
desc: Invite people you think can answer.
@@ -1359,9 +1400,11 @@ ui:
search: Search people
question_detail:
action: Action
created: Created
Asked: Asked
asked: asked
update: Modified
Edited: Edited
edit: edited
commented: commented
Views: Viewed
@@ -1441,7 +1484,7 @@ ui:
signup: Sign up
logout: Log out
verify: Verify
add_question: Add question
create: Create
approve: Approve
reject: Reject
skip: Skip
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Search Results
keywords: Keywords
@@ -1489,6 +1533,7 @@ ui:
follow: Follow
following: Following
counts: "{{count}} Results"
counts_loading: "... Results"
more: More
sort_btns:
relevance: Relevance
@@ -1540,6 +1585,7 @@ ui:
all_questions: All Questions
x_questions: "{{ count }} Questions"
x_answers: "{{ count }} answers"
x_posts: "{{ count }} Posts"
questions: Questions
answers: Answers
newest: Newest
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Name
msg: Name cannot be empty.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Password
@@ -1731,16 +1777,29 @@ ui:
branding: Branding
legal: Legal
write: Write
terms: Terms
tos: Terms of Service
privacy: Privacy
seo: SEO
customize: Customize
themes: Themes
css_html: CSS/HTML
login: Login
privileges: Privileges
plugins: Plugins
installed_plugins: Installed Plugins
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Welcome to {{site_name}}
user_center:
login: Login
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Invalid Email Address.
@@ -1875,9 +1934,10 @@ ui:
name: Name
email: Email
reputation: Reputation
created_at: Created Time
delete_at: Deleted Time
suspend_at: Suspended Time
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Status
role: Role
action: Action
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspend this user
content: A suspended user can't log in.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Questions
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: Timezone
msg: Timezone cannot be empty.
text: Choose a city in the same timezone as you.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Write
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Each user can only write one answer for the same question
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Color scheme
navbar_style:
label: Navbar style
label: Navbar background style
primary_color:
label: Primary color
text: Modify the colors used by your themes
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS and HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Show logs
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (optional)
empty: cannot be empty
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+3 -3
View File
@@ -678,13 +678,13 @@ ui:
display_name:
label: Display Name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+3 -3
View File
@@ -678,13 +678,13 @@ ui:
display_name:
label: Display Name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+169 -26
View File
@@ -57,6 +57,8 @@ backend:
other: Edytuj
undelete:
other: Przywróć
merge:
other: Merge
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: Brak uprawnień do edycji.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Ranga nie spełnia warunku.
@@ -261,6 +265,8 @@ backend:
other: Nie możesz usunąć tagu, który jest w użyciu.
cannot_set_synonym_as_itself:
other: Nie można ustawić synonimu aktualnego tagu jako takiego.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: Nazwą nadawcy nie może być adresem e-mail.
@@ -304,6 +310,14 @@ backend:
other: "Błąd {{.Field}} w pobliżu '{{.Content}}' w linii {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "Liczba użytkowników, których dodasz na raz, powinna mieścić się w przedziale 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Nie udało się odczytać pliku konfiguracyjnego.
@@ -564,7 +578,7 @@ backend:
name:
other: Pierwszy odnośnik
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: Pierwsza Reakcja
@@ -807,7 +821,7 @@ ui:
tag_wiki: wiki tagu
create_tag: Utwórz tag
edit_tag: Edytuj tag
ask_a_question: Zadaj pytanie
ask_a_question: Create Question
edit_question: Edytuj pytanie
edit_answer: Edytuj odpowiedź
search: Szukaj
@@ -831,6 +845,17 @@ ui:
http_50X: Błąd HTTP 500
http_403: Błąd HTTP 403
logout: Wyloguj się
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Powiadomienia
inbox: Skrzynka odbiorcza
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: Czy na pewno chcesz usunąć?
close: Zamknij
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Edytuj tag
default_reason: Edytuj tag
@@ -1045,6 +1079,9 @@ ui:
day: dzień
hours: godziny
days: dni
month: month
months: months
year: year
reaction:
heart: serce
smile: uśmiech
@@ -1100,10 +1137,10 @@ ui:
more: Więcej
wiki: Wiki
ask:
title: Dodaj pytanie
title: Create Question
edit_title: Edytuj pytanie
default_reason: Edytuj pytanie
default_first_reason: Dodaj pytanie
default_first_reason: Create question
similar_questions: Podobne pytania
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Rewizja
title:
label: Tytuł
placeholder: Bądź konkretny i wyobraź sobie, że zadajesz pytanie innej osobie
placeholder: What's your topic? Be specific.
msg:
empty: Tytuł nie może być pusty.
range: Tytuł do 150 znaków
@@ -1119,6 +1156,9 @@ ui:
label: Treść
msg:
empty: Treść nie może być pusta.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Tagi
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Dodaj tag
create_btn: Utwórz nowy tag
search_tag: Wyszukaj tag
hint: "Opisz, o czym jest Twoje pytanie, wymagany jest co najmniej jeden tag."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: Nie znaleziono pasujących tagów
tag_required_text: Wymagany tag (co najmniej jeden)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Szukaj
footer:
build_on: >-
Zbudowane na platformie <1> Apache Answer </1> - oprogramowanie open-source, które napędza społeczności pytań i odpowiedzi.<br />Stworzone z miłością © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Zmień
loading: Wczytywanie...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Imię nie może być puste.
range: Name must be between 2 to 30 characters in length.
character: 'Możesz użyć dozwolone znaki "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Adres e-mail
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Nazwa wyświetlana
msg: Wyświetlana nazwa nie może być pusta.
msg_range: Wyświetlana nazwa do 30 znaków.
msg_range: Display name must be 2-30 characters in length.
username:
label: Nazwa użytkownika
caption: Ludzie mogą oznaczać Cię jako "@nazwa_użytkownika".
msg: Nazwa użytkownika nie może być pusta.
msg_range: Nazwa użytkownika do 30 znaków.
character: 'Należy używać zestawu znaków "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Zdjęcie profilowe
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Twoja poprawka zostanie wyświetlona po zatwierdzeniu.
sent_success: Wysyłanie zakończone powodzeniem
related_question:
title: Powiązane pytania
title: Related
answers: odpowiedzi
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Ludzie pytali
desc: Wybierz osoby, które mogą znać odpowiedź.
@@ -1359,9 +1400,11 @@ ui:
search: Wyszukaj osoby
question_detail:
action: Akcja
created: Created
Asked: Zadane
asked: zadał(a)
update: Zmodyfikowane
Edited: Edited
edit: edytowany
commented: skomentowano
Views: Wyświetlone
@@ -1441,7 +1484,7 @@ ui:
signup: Zarejestruj się
logout: Wyloguj się
verify: Zweryfikuj
add_question: Dodaj pytanie
create: Create
approve: Zatwierdź
reject: Odrzuć
skip: Pominięcie
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Wyniki wyszukiwania
keywords: Słowa kluczowe
@@ -1489,6 +1533,7 @@ ui:
follow: Obserwuj
following: Obserwuje
counts: "Liczba wyników: {{count}}"
counts_loading: "... Results"
more: Więcej
sort_btns:
relevance: Relewantność
@@ -1540,6 +1585,7 @@ ui:
all_questions: Wszystkie pytania
x_questions: "{{ count }} pytań"
x_answers: "{{ count }} odpowiedzi"
x_posts: "{{ count }} Posts"
questions: Pytania
answers: Odpowiedzi
newest: Najnowsze
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Imię
msg: Imię nie może być puste.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Hasło
@@ -1731,16 +1777,29 @@ ui:
branding: Marka
legal: Prawne
write: Pisanie
terms: Terms
tos: Warunki korzystania z usługi
privacy: Prywatność
seo: SEO
customize: Dostosowywanie
themes: Motywy
css_html: CSS/HTML
login: Logowanie
privileges: Uprawnienia
plugins: Wtyczki
installed_plugins: Zainstalowane wtyczki
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Witamy w serwisie {{site_name}}
user_center:
login: Zaloguj się
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Wyświetlana nazwa użytkownika maksymalnie 30 znaków.
msg_range: Display name must be 2-30 characters in length.
username:
label: Nazwa
msg_range: Nazwa użytkownika maksymalnie 30 znaków.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Błędny adresy email.
@@ -1875,9 +1934,10 @@ ui:
name: Imię
email: E-mail
reputation: Reputacja
created_at: Czas utworzenia
delete_at: Czas usunięcia
suspend_at: Czas zawieszenia
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Status
role: Rola
action: Akcja
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Zawieś tego użytkownika
content: Zawieszony użytkownik nie może się logować.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Pytania
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: Strefa czasowa
msg: Strefa czasowa nie może być pusta.
text: Wybierz miasto w tej samej strefie czasowej, co Ty.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Pisanie
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Każdy użytkownik może napisać tylko jedną odpowiedź na każde pytanie
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Rekomendowane tagi
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Schemat kolorów
navbar_style:
label: Styl paska nawigacyjnego
label: Navbar background style
primary_color:
label: Kolor podstawowy
text: Zmodyfikuj kolory używane przez Twoje motywy.
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS i HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Wyświetl dzienniki
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (opcjonalne)
empty: nie może być puste
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+125 -125
View File
@@ -288,7 +288,7 @@ ui:
change_email: Modificar e-mail
install: Instalação do Resposta
upgrade: Atualização do Resposta
maintenance: Manutençã do Website
maintenance: Manutenção do Website
users: Usuários
notifications:
title: Notificações
@@ -327,7 +327,7 @@ ui:
empty: Código não pode ser vazio.
language:
label: Idioma (opcional)
placeholder: Tetecção automática
placeholder: Detecção automática
btn_cancel: Cancelar
btn_confirm: Adicionar
formula:
@@ -351,7 +351,7 @@ ui:
image:
text: Imagem
add_image: Adicionar imagem
tab_image: Enviar image,
tab_image: Enviar imagem
form_image:
fields:
file:
@@ -380,7 +380,7 @@ ui:
outdent:
text: Não identado
italic:
text: Emphase
text: Ênfase
link:
text: Superlink (Hyperlink)
add_link: Adicionar superlink (hyperlink)
@@ -537,7 +537,7 @@ ui:
title: Adicionar Pergunta
edit_title: Editar Pergunta
default_reason: Editar pergunta
similar_questions: Similar perguntas
similar_questions: Perguntas similares
form:
fields:
revision:
@@ -564,10 +564,10 @@ ui:
label: Resumo da edição
placeholder: >-
Explique resumidamente suas alterações (ortografia corrigida, gramática corrigida, formatação aprimorada)
btn_post_question: Publicação a sua pergunta
btn_post_question: Publicar a sua pergunta
btn_save_edits: Salvar edições
answer_question: Responda a sua própria pergunta
post_question&answer: Publicação a sua pergunta e resposta
post_question&answer: Publicar a sua pergunta e resposta
tag_selector:
add_btn: Adicionar marcador
create_btn: Criar novo marcador
@@ -589,7 +589,7 @@ ui:
placeholder: Procurar
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Desenvolvido com base no <1> Answer </1> — o software de código aberto que alimenta comunidades de perguntas e respostas.<br />Feito com amor © {{cc}}.
upload_img:
name: Mudar
loading: carregando...
@@ -604,13 +604,13 @@ ui:
info: "Se não chegar, verifique sua pasta de spam."
another: >-
Enviamos outro e-mail de ativação para você em <bold>{{mail}}</bold>. Pode levar alguns minutos para chegar; certifique-se de verificar sua pasta de spam.
btn_name: Resend activation email
btn_name: Reenviar e-mail de ativação
change_btn_name: Mudar email
msg:
empty: Não pode ser vazio.
login:
page_title: Bem vindo ao {{site_name}}
login_to_continue: Entre para continue
login_to_continue: Entre para continuar
info_sign: Não possui uma conta? <1>Cadastrar-se</1>
info_login: Já possui uma conta? <1>Entre</1>
agreements: Ao se registrar, você concorda com as <1>políticas de privacidades</1> e os <3>termos de serviços</3>.
@@ -683,7 +683,7 @@ ui:
caption: As pessoas poderão mensionar você com "@usuário".
msg: Nome de usuário não pode ser vazio.
msg_range: Nome de usuário até 30 caracteres.
character: 'Deve usar o conjunto de caracteres "a-z", "0-9", " - . _"'
character: 'Deve usar o conjunto de caracteres "a-z", "0-9", "- . _"'
avatar:
label: Perfil Imagem
gravatar: Gravatar
@@ -776,9 +776,9 @@ ui:
delete:
title: Excluir esta postagem
question: >-
Nós não recomendamos <strong>excluindo perguntas com respostas</strong> porque isso priva os futuros leitores desse conhecimento.</p><p>Repeated deletion of answered questions can result in a sua account being blocked from asking. Você tem certeza que deseja deletar?
Nós não recomendamos <strong> excluir perguntas com respostas</strong> porque isso priva os futuros leitores desse conhecimento.</p><p>A exclusão repetida de perguntas respondidas pode resultar no bloqueio de perguntas de sua conta. Você tem certeza que deseja excluir?
answer_accepted: >-
<p>Nós não recomendamos <strong>deleting accepted answer</strong> porque isso priva os futuros leitores desse conhecimento. </p> Repeated deletion of accepted answers can result in a sua account being blocked from answering. Você tem certeza que deseja deletar?
<p>Não recomendamos <strong>excluir resposta aceita</strong> porque isso priva os futuros leitores desse conhecimento. </p> A exclusão repetida de respostas aceitas pode resultar no bloqueio de respostas de uma conta sua. Você tem certeza que deseja excluir?
other: Você tem certeza que deseja deletar?
tip_question_deleted: Esta postagem foi deletada
tip_answer_deleted: Esta resposta foi deletada
@@ -834,7 +834,7 @@ ui:
link: Continuar para a página inicial.
invalid: >-
Desculpe, este link de confirmação não é mais válido. Talvez a sua já está ativa.
confirm_new_email: Your email has been updated.
confirm_new_email: Seu e-mail foi atualizado.
confirm_new_email_invalid: >-
Desculpe, este link de confirmação não é mais válido. Talvez o seu e-mail já tenha sido alterado.
unsubscribe:
@@ -846,7 +846,7 @@ ui:
following_tags: Seguindo Marcadores
edit: Editar
save: Salvar
follow_tag_tip: Seguir tags to curate a sua lista de perguntas.
follow_tag_tip: Siga as tags para selecionar sua lista de perguntas.
hot_questions: Perguntas quentes
all_questions: Todas Perguntas
x_questions: "{{ count }} perguntas"
@@ -878,7 +878,7 @@ ui:
score: Pontuação
edit_profile: Editar Perfil
visited_x_days: "Visitado {{ count }} dias"
viewed: Viewed
viewed: Visualizado
joined: Ingressou
last_login: Visto
about_me: Sobre mim
@@ -900,13 +900,13 @@ ui:
x_questions: perguntas
install:
title: Instalação
next: Proximo
next: Próximo
done: Completo
config_yaml_error: Não é possível criar o arquivo config.yaml.
lang:
label: Por favor Escolha um Idioma
db_type:
label: Database Engine
label: Mecanismo de banco de dados
db_username:
label: Nome de usuário
placeholder: root
@@ -916,68 +916,68 @@ ui:
placeholder: root
msg: Senha não pode ser vazio.
db_host:
label: Database Host
label: Host do banco de dados
placeholder: "db:3306"
msg: Database Host não pode ser vazio.
msg: Host de banco de dados não pode ficar vazio.
db_name:
label: Database Nome
label: Nome do banco de dados
placeholder: answer
msg: Database Nome não pode ser vazio.
msg: O nome do banco de dados não pode ficar vazio.
db_file:
label: Database File
label: Arquivo de banco de dados
placeholder: /data/answer.db
msg: Database File não pode ser vazio.
msg: O arquivo de banco de dados não pode ficar vazio.
config_yaml:
title: Create config.yaml
label: The config.yaml file created.
title: Criar config.yaml
label: O arquivo config.yaml foi criado.
desc: >-
You can create the <1>config.yaml</1> file manually in the <1>/var/wwww/xxx/</1> directory and paste the following text into it.
info: After you've done that, click "Next" button.
site_information: Site Information
Você pode criar o arquivo <1>config.yaml</1> manualmente no diretório <1>/var/www/xxx/</1> e colar o seguinte texto nele.
info: Depois de fazer isso, clique no botão "Avançar".
site_information: Informações do site
admin_account: Administrador Conta
site_name:
label: Site Nome
msg: Site Nome não pode ser vazio.
site_url:
label: Site URL
text: The address of a sua site.
text: O endereço do seu site.
msg:
empty: Site URL não pode ser vazio.
incorrect: Site URL incorrect format.
incorrect: Formato incorreto da URL do site.
contact_email:
label: E-mail par contato
text: Email address of key contact responsible for this site.
label: E-mail para contato
text: Endereço de e-mail do contato principal responsável por este site.
msg:
empty: E-mail par contato não pode ser vazio.
incorrect: E-mail par contato incorrect format.
empty: E-mail para contato não pode ser vazio.
incorrect: E-mail para contato em formato incorreto.
admin_name:
label: Nome
msg: Nome não pode ser vazio.
admin_password:
label: Senha
text: >-
You will need this password to log in. Por favor store it in a secure location.
msg: Senha não pode ser vazio.
Você precisará dessa senha para efetuar login. Por favor, guarde-a em um local seguro.
msg: Senha não pode ser vazia.
admin_email:
label: Email
text: You will need this email to log in.
text: Você precisará deste e-mail para fazer login.
msg:
empty: Email não pode ser vazio.
incorrect: Email incorrect format.
ready_title: Your Resposta is Ready!
incorrect: Formato de e-mail incorreto.
ready_title: Sua resposta está pronta!
ready_desc: >-
If you ever feel like changing more settings, visit <1>admin section</1>; find it in the site menu.
good_luck: "Have fun, and good luck!"
warn_title: Warning
Se você quiser alterar mais configurações, visite a <1>seção de administração</1>; encontre-a no menu do site.
good_luck: "Divirta-se e boa sorte!"
warn_title: Aviso
warn_desc: >-
The file <1>config.yaml</1> already exists. If you need to reset any of the configuration items in this file, please delete it first.
install_now: You may try <1>installing now</1>.
installed: Already installed
O arquivo <1>config.yaml</1> existe. Se precisar redefinir algum item de configuração neste arquivo, exclua-o primeiro.
install_now: Você pode tentar <1>instalar agora</1>.
installed: instalado
installed_desc: >-
You appear to have already installed. To reinstall please clear a sua old database tables first.
db_failed: Database connection failed
Parece que você já instalou. Para reinstalar, limpe primeiro as tabelas antigas do seu banco de dados.
db_failed: Falha na conexão do banco de dados
db_failed_desc: >-
This either means that the database information in a sua <1>config.yaml</1> file is incorrect or that contact with the database server could not be established. This could mean a sua host's database server is down.
Isso significa que as informações do banco de dados em um arquivo <1>config.yaml</1> do SUA estão incorretas ou que o contato com o servidor do banco de dados não pôde ser estabelecido. Isso pode significar que o servidor de banco de dados de um host SUA está inativo.
counts:
views: visualizações
Votos: votos
@@ -987,7 +987,7 @@ ui:
desc: "Infelizmente, esta postagem não existe mais."
back_home: Voltar para a página inicial
page_50X:
desc: O servidor encontrou um erro e não pôde concluir uma solicitação sua.
desc: O servidor encontrou um erro e não pôde concluir sua solicitação.
back_home: Voltar para a página inicial
page_maintenance:
desc: "Estamos em manutenção, voltaremos em breve."
@@ -1037,7 +1037,7 @@ ui:
answer_links: Links das Respostas
documents: Documentos
feedback: Opinião
support: Supporte
support: Suporte
review: Revisar
config: Configurações
update_to: Atualizar ao
@@ -1233,7 +1233,7 @@ ui:
smtp_port:
label: SMTP Port
msg: SMTP port must be number 1 ~ 65535.
text: The port to a sua mail server.
text: A porta para seu servidor de e-mail.
smtp_username:
label: SMTP Nome de usuário
msg: SMTP username não pode ser vazio.
@@ -1241,9 +1241,9 @@ ui:
label: SMTP Senha
msg: SMTP password não pode ser vazio.
test_email_recipient:
label: Test Email Recipients
text: Provide email address that will receive test sends.
msg: Test email recipients is invalid
label: Destinatários de e-mail de teste
text: Forneça o endereço de e-mail que receberá os envios de testes.
msg: Os destinatários do e-mail de teste são inválidos
smtp_authentication:
label: Enable authentication
title: SMTP Authentication
@@ -1255,127 +1255,127 @@ ui:
logo:
label: Logo (opcional)
msg: Logo não pode ser vazio.
text: The logo image at the top left of a sua site. Use a wide rectangular image with a height of 56 and an aspect ratio greater than 3:1. If left blank, the site title text will be shown.
text: A imagem do logotipo no canto superior esquerdo do seu site. Use uma imagem retangular larga com altura de 56 e proporção maior que 3:1. Se deixada em branco, o texto do título do site será exibido.
mobile_logo:
label: Mobile Logo (opcional)
text: The logo used on mobile version of a sua site. Use a wide rectangular image with a height of 56. If left blank, the image from the "logo" setting will be used.
text: O logotipo usado na versão mobile do seu site. Use uma imagem retangular larga com altura de 56. Se deixado em branco, a imagem da configuração "logotipo" será usada.
square_icon:
label: Square Icon (opcional)
msg: Square icon não pode ser vazio.
text: Imagem used as the base for metadata icons. Should ideally be larger than 512x512.
text: Imagem usada como base para ícones de metadados. Idealmente, deve ser maior que 512x512.
favicon:
label: Favicon (opcional)
text: A favicon for a sua site. To work correctly over a CDN it must be a png. Will be resized to 32x32. If left blank, "square icon" will be used.
text: Um favicon para o seu site. Para funcionar corretamente em uma CDN, ele deve ser um png. Será redimensionado para 32x32. Se deixado em branco, o "ícone quadrado" será usado.
legal:
page_title: Legal
terms_of_service:
label: Terms of Service
text: "You can add terms of service content here. If you already have a document hosted elsewhere, provide the full URL here."
label: Termos de Serviço
text: "Você pode adicionar conteúdo dos termos de serviço aqui. Se você já possui um documento hospedado em outro lugar, informe o URL completo aqui."
privacy_policy:
label: Privacy Policy
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
label: Política de Privacidade
text: "Você pode adicionar o conteúdo da política de privacidade aqui. Se você já possui um documento hospedado em outro lugar, informe o URL completo aqui."
write:
page_title: Write
page_title: Escrever
recommend_tags:
label: Recommend Marcadores
text: "Por favor input tag slug above, one tag per line."
label: Recomendar Marcadores
text: "Por favor, insira o slug da tag acima, uma tag por linha."
required_tag:
title: Required Tag
label: Set recommend tag as requirido
text: "Every new question must have ao menos one recommend tag."
title: Tag necessária
label: Definir tag recomendada como necessária
text: "Cada nova pergunta deve ter pelo menos uma tag de recomendação."
reserved_tags:
label: Reserved Marcadores
text: "Reserved tags can only be added to a post by moderator."
label: Marcadores Reservados
text: "Tags reservadas só podem ser adicionadas a uma postagem pelo moderador."
seo:
page_title: SEO
permalink:
label: Permalink
text: Custom URL structures can improve the usability, and forward-compatibility of a sua links.
text: Estruturas de URL personalizadas podem melhorar a usabilidade e a compatibilidade futura de seus links.
robots:
label: robots.txt
text: This will permanently override any related site settings.
text: Isso substituirá permanentemente todas as configurações relacionadas do site.
Temas:
page_title: Temas
Temas:
label: Temas
text: Select an existing Tema.
text: Selecione um tema existente.
navbar_style:
label: Navbar Style
text: Select an existing Tema.
label: Estilo da barra de navegação
text: Selecione um tema existente.
primary_color:
label: Primary Color
text: Modify the colors used by a sua Temas
label: Cor primária
text: Modifique as cores usadas por seus Temas
css_and_html:
page_title: CSS and HTML
page_title: CSS e HTML
custom_css:
label: Custom CSS
text: This will insert as <link>
text: Isto será inserido como <link>
head:
label: Head
text: This will insert before </head>
text: Isto será inserido antes de </head>
header:
label: Header
text: This will insert after <body>
text: Isto será inserido após <body>
footer:
label: Footer
text: This will insert before </html>.
text: Isso será inserido antes de </html>.
login:
page_title: Login
membership:
title: Membership
label: Allow new registrations
text: Turn off to prevent anyone from creating a new account.
title: Associação
label: Permitir novos registros
text: Desative para impedir que alguém crie uma nova conta.
private:
title: Private
title: Privado
label: Login requirido
text: Only logged in users can access this community.
text: Somente usuários logados podem acessar esta comunidade.
form:
empty: não pode ser vazio
invalid: is invalid
invalid: é inválido
btn_submit: Salvar
not_found_props: "Required property {{ key }} not found."
not_found_props: "Propriedade necessária {{ key }} não encontrada."
page_review:
review: Revisar
proposed: proposed
question_edit: Pergunta edit
answer_edit: Resposta edit
tag_edit: Tag edit
edit_summary: Editar summary
edit_question: Editar question
edit_answer: Editar answer
proposed: proposta
question_edit: Editar Pergunta
answer_edit: Editar Resposta
tag_edit: Editar Tag
edit_summary: Editar resumo
edit_question: Editar pergunta
edit_answer: Editar resposta
edit_tag: Editar tag
empty: No review tasks left.
empty: Não há mais tarefas de revisão.
timeline:
undeleted: undeleted
deleted: deleted
downvote: downvote
upvote: upvote
accept: accept
cancelled: cancelled
commented: commented
undeleted: não excluído
deleted: apagado
downvote: voto negativo
upvote: voto positivo
accept: aceitar
cancelled: cancelado
commented: comentado
rollback: rollback
edited: edited
answered: answered
asked: asked
closed: closed
reopened: reopened
created: created
title: "Histórico for"
tag_title: "Timeline for"
show_Votos: "Show Votos"
edited: editado
answered: respondido
asked: perguntado
closed: fechado
reopened: reaberto
created: criado
title: "Histórico para"
tag_title: "Linha do tempo para"
show_Votos: "Mostrar votos"
n_or_a: N/A
title_for_question: "Timeline for"
title_for_answer: "Timeline for answer to {{ title }} by {{ author }}"
title_for_tag: "Timeline for tag"
title_for_question: "Linha do tempo para"
title_for_answer: "Linha do tempo para resposta a {{ title }} por {{ author }}"
title_for_tag: "Linha do tempo para tag"
datetime: Datetime
type: Type
by: By
comment: Comment
no_data: "We couldn't find anything."
type: Tipo
by: Por
comment: Comentário
no_data: "Não conseguimos encontrar nada."
users:
title: Usuários
users_with_the_most_reputation: Usuários with the highest reputation scores
users_with_the_most_vote: Usuários who voted the most
staffs: Our community staff
reputation: reputation
users_with_the_most_reputation: Usuários com as maiores pontuações de reputação
users_with_the_most_vote: Usuários que mais votaram
staffs: Nossa equipe comunitária
reputation: reputação
Votos: Votos
+169 -26
View File
@@ -57,6 +57,8 @@ backend:
other: Editar
undelete:
other: Desfazer
merge:
other: Merge
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: Sem permissão para atualizar.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: A classificação não atende à condição.
@@ -261,6 +265,8 @@ backend:
other: Não é possível excluir um marcador em uso.
cannot_set_synonym_as_itself:
other: Você não pode definir o sinônimo do marcador atual como a si mesmo.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: O De Nome não pode ser um endereço de e-mail.
@@ -304,6 +310,14 @@ backend:
other: "Erro no formato {{.Field}} próximo '{{.Content}}' na linha {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "O número de usuários que você adicionou de uma vez deve estar no intervalo de 1 -{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Falha ao ler configuração
@@ -564,7 +578,7 @@ backend:
name:
other: Primeiro link
desc:
other: Primeiro a adicionar um link a outra postagem.
other: First added a link to another post.
first_reaction:
name:
other: Primeira Reação
@@ -807,7 +821,7 @@ ui:
tag_wiki: marcador wiki
create_tag: Criar Marcador
edit_tag: Editar Marcador
ask_a_question: Adicionar Pergunta
ask_a_question: Create Question
edit_question: Editar Pergunta
edit_answer: Editar Resposta
search: Busca
@@ -831,6 +845,17 @@ ui:
http_50X: HTTP Erro 500
http_403: HTTP Erro 403
logout: Encerrar Sessão
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Notificações
inbox: Caixa de entrada
@@ -1027,6 +1052,15 @@ ui:
<p>Nós não permitimos <strong>remover marcadores com postagens</strong>.</p> <p>Por favor, remova este marcador a partir da postagem.</p>
tip: Você tem certeza que deseja remover?
close: Fechar
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Editar marcador
default_reason: Editar marcador
@@ -1045,6 +1079,9 @@ ui:
day: dia
hours: horas
days: dias
month: month
months: months
year: year
reaction:
heart: coração
smile: sorrir
@@ -1100,10 +1137,10 @@ ui:
more: Mais
wiki: Wiki
ask:
title: Adicionar Pergunta
title: Create Question
edit_title: Editar Pergunta
default_reason: Editar pergunta
default_first_reason: Adicionar questão
default_first_reason: Create question
similar_questions: Similar perguntas
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Revisão
title:
label: Título
placeholder: Seja específico e tenha em mente que está fazendo uma pergunta a outra pessoa
placeholder: What's your topic? Be specific.
msg:
empty: Título não pode ser vazio.
range: Título até 150 caracteres
@@ -1119,6 +1156,9 @@ ui:
label: Corpo
msg:
empty: Corpo da mensagem não pode ser vazio.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Marcadores
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Adicionar marcador
create_btn: Criar novo marcador
search_tag: Procurar marcador
hint: "Descreva do quê se trata a sua pergunta, ao menos um marcador é requirido."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: Nenhum marcador correspondente
tag_required_text: Marcador obrigatório (ao menos um)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Procurar
footer:
build_on: >-
Construído com <1> Apache answer </1> o software de código aberto que ajuda comunidades de Q&A.<br />Feito com amor © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Mudar
loading: carregando...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Nome não pode ser vazio.
range: O nome deve ter entre 2 e 30 caracteres.
character: 'Deve usar o conjunto de caracteres "a-z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: E-mail
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Nome de exibição
msg: Nome de exibição não pode ser vazio.
msg_range: Nome de exibição tem que ter até 30 caracteres.
msg_range: Display name must be 2-30 characters in length.
username:
label: Nome de usuário
caption: As pessoas poderão mensionar você com "@usuário".
msg: Nome de usuário não pode ser vazio.
msg_range: Nome de usuário até 30 caracteres.
character: 'Deve usar o conjunto de caracteres "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Perfil Imagem
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: A sua resposta irá aparecer após a revisão.
sent_success: Enviado com sucesso
related_question:
title: Perguntas relacionadas
title: Related
answers: respostas
linked_question:
title: Perguntas relacionadas
description: Questões ligadas a
no_linked_question: Nenhuma pergunta relacionada a esta questão.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Pessoas Perguntaram
desc: Select people who you think might know the answer.
@@ -1359,9 +1400,11 @@ ui:
search: Procurar pessoas
question_detail:
action: Acção
created: Created
Asked: Perguntado
asked: perguntado
update: Modificado
Edited: Edited
edit: modificado
commented: comentado
Views: Visualizado
@@ -1441,7 +1484,7 @@ ui:
signup: Cadastrar-se
logout: Sair
verify: Verificar
add_question: Adicionar pergunta
create: Create
approve: Aprovar
reject: Rejetar
skip: Pular
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Procurar Resultados
keywords: Palavras-chave
@@ -1489,6 +1533,7 @@ ui:
follow: Seguir
following: Seguindo
counts: "{{count}} Resultados"
counts_loading: "... Results"
more: Mais
sort_btns:
relevance: Relevância
@@ -1540,6 +1585,7 @@ ui:
all_questions: Todas Perguntas
x_questions: "{{ count }} perguntas"
x_answers: "{{ count }} respostas"
x_posts: "{{ count }} Posts"
questions: Perguntas
answers: Respostas
newest: Mais recente
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Nome
msg: Nome não pode ser vazio.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Senha
@@ -1731,16 +1777,29 @@ ui:
branding: Marca
legal: Informação legal
write: Escrever
terms: Terms
tos: Termos de Serviços
privacy: Privacidade
seo: SEO
customize: Personalização
themes: Temas
css_html: CSS/HTML
login: Entrar
privileges: Privilégios
plugins: Extensões
installed_plugins: Plugins instalados
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Bem vindo(a) ao {{site_name}}
user_center:
login: Entrar
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Nome no display
msg_range: Nome no display pode conter até 30 caracteres.
msg_range: Display name must be 2-30 characters in length.
username:
label: Nome do usuário
msg_range: Nome do usuário pode conter até 30 caracteres.
msg_range: Username must be 2-30 characters in length.
email:
label: Correio eletrônico
msg_invalid: Correio eletrônico invalido.
@@ -1875,9 +1934,10 @@ ui:
name: Nome
email: E-mail
reputation: Reputação
created_at: Hora de criação
delete_at: Hora da remoção
suspend_at: Hora da suspensão
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Estado
role: Função
action: Ação
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspender este usuário
content: Um usuário suspenso não pode fazer login.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Perguntas
unlisted: Não-listado
@@ -1972,6 +2034,12 @@ ui:
label: Fuso horário
msg: Fuso horário não pode ser vazio.
text: Escolha a cidade no mesmo fuso horário que você.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Escrever
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Escrever resposta
label: Each user can only write one answer for each question
text: "Desative para permitir que os usuários escrevam várias respostas para a mesma pergunta, o que pode fazer com que as respostas fiquem menos focadas."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend Marcadores
text: "Os marcadores recomendados serão exibidos na lista dropdown por padrão."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Esquema de cores
navbar_style:
label: Estilo da barra de navegação
label: Navbar background style
primary_color:
label: Cor primária
text: Modifica as cores usadas por seus temas
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS e HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Mostrar registros
status: Status
title: Emblemas
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (opcional)
empty: não pode ser vazio
@@ -2295,6 +2437,7 @@ ui:
user_normal: Este usuário já está normal.
user_suspended: Este usuário foi suspenso.
user_deleted: Este usuário foi removido.
user_added: User has been added successfully.
badge_activated: Este emblema foi ativado.
badge_inactivated: Este emblema foi desativado.
users_deleted: These users have been deleted.
+182 -39
View File
@@ -57,6 +57,8 @@ backend:
other: Editează
undelete:
other: Restabilește
merge:
other: Îmbinare
role:
name:
user:
@@ -138,17 +140,17 @@ backend:
pass:
other: Parolă
old_pass:
other: Current password
other: Parolă actuală
original_text:
other: This post
other: Acest articol
email_or_password_wrong_error:
other: E-mailul și parola nu se potrivesc.
error:
common:
invalid_url:
other: Invalid URL.
other: URL invalid.
status_invalid:
other: Invalid status.
other: Stare nevalidă.
password:
space_invalid:
other: Parola nu poate conține spații.
@@ -156,7 +158,7 @@ backend:
cannot_update_their_password:
other: Nu vă puteți modifica parola.
cannot_edit_their_profile:
other: You cannot modify your profile.
other: Nu vă puteți modifica profilul.
cannot_modify_self_status:
other: Nu vă puteți modifica starea.
email_or_password_wrong:
@@ -171,7 +173,7 @@ backend:
question_closed_cannot_add:
other: Întrebările sunt închise şi nu pot fi adăugate.
content_cannot_empty:
other: Answer content cannot be empty.
other: Conținutul răspunsului nu poate fi gol.
comment:
edit_without_permission:
other: Comentariul nu poate fi editat.
@@ -180,7 +182,7 @@ backend:
cannot_edit_after_deadline:
other: Comentariul a durat prea mult pentru a fi modificat.
content_cannot_empty:
other: Comment content cannot be empty.
other: Conținutul comentariului nu poate fi gol.
email:
duplicate:
other: Email-ul există deja.
@@ -213,15 +215,15 @@ backend:
new_password_same_as_previous_setting:
other: Noua parolă este identică cu cea anterioară.
already_deleted:
other: This post has been deleted.
other: Acest articol a fost șters.
meta:
object_not_found:
other: Meta object not found
other: Nu s-a găsit obiectul Meta
question:
already_deleted:
other: Această postare a fost ștearsă.
under_review:
other: Your post is awaiting review. It will be visible after it has been approved.
other: Articolul tău este în așteptare. Acesta va fi vizibil după ce a fost aprobat.
not_found:
other: Întrebarea nu a fost găsită.
cannot_deleted:
@@ -231,7 +233,9 @@ backend:
cannot_update:
other: Nu aveți permisiunea de a actualiza.
content_cannot_empty:
other: Content cannot be empty.
other: Conținutul nu poate fi gol.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Rangul de reputaţie nu îndeplineşte condiţia.
@@ -261,6 +265,8 @@ backend:
other: Nu puteți șterge o etichetă care este în uz.
cannot_set_synonym_as_itself:
other: Nu se poate seta sinonimul etichetei curente ca atare.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: Numele nu poate fi o adresă de e-mail.
@@ -304,6 +310,14 @@ backend:
other: "{{.Field}} format lângă '{{.Content}}' la linia {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "Numărul de utilizatori pe care îi adăugați odată trebuie să fie în intervalul 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Citirea configurației a eșuat
@@ -323,7 +337,7 @@ backend:
other: Configurarea site-ului nu a fost găsită.
badge:
object_not_found:
other: Badge object not found
other: Nu s-a găsit obiectul Insignă
reason:
spam:
name:
@@ -334,7 +348,7 @@ backend:
name:
other: nepoliticos sau abuziv
desc:
other: "A reasonable person would find this content inappropriate for respectful discourse."
other: "O persoană rezonabilă ar considera acest conținut nepotrivit pentru un discurs respectuos."
a_duplicate:
name:
other: un duplicat
@@ -564,7 +578,7 @@ backend:
name:
other: First Link
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: First Reaction
@@ -807,7 +821,7 @@ ui:
tag_wiki: etichetă wiki
create_tag: Creați etichetă
edit_tag: Modificați eticheta
ask_a_question: Adăugați întrebarea
ask_a_question: Create Question
edit_question: Editați întrebarea
edit_answer: Editaţi răspunsul
search: Caută
@@ -831,6 +845,17 @@ ui:
http_50X: Eroare HTTP 500
http_403: Eroare HTTP 403
logout: Deconectare
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Notificări
inbox: Mesaje primite
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: Sunteţi sigur că doriţi să ştergeţi?
close: Închide
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Editează eticheta
default_reason: Editare etichetă
@@ -1045,6 +1079,9 @@ ui:
day: zi
hours: ore
days: zile
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1100,10 +1137,10 @@ ui:
more: Mai multe
wiki: Wiki
ask:
title: Adăugați întrebarea
title: Create Question
edit_title: Editați întrebarea
default_reason: Editați întrebarea
default_first_reason: Adaugă o întrebare
default_first_reason: Create question
similar_questions: Întrebări similare
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Revizuire
title:
label: Titlu
placeholder: Fii specific și imaginează-ți că pui o întrebare unei alte persoane
placeholder: What's your topic? Be specific.
msg:
empty: Titlul nu poate fi gol.
range: Titlu de până la 150 de caractere
@@ -1119,6 +1156,9 @@ ui:
label: Corp
msg:
empty: Corpul mesajului trebuie să conțină text.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Etichete
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Adaugă etichetă
create_btn: Creează o etichetă nouă
search_tag: Căutare etichetă
hint: "Descrie despre ce este intrebarea ta, este necesar cel putin o eticheta."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: Nicio etichetă potrivită
tag_required_text: Etichetă necesară (cel puțin una)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Caută
footer:
build_on: >-
Susținut de <1> Apache Răspuns </1>- software-ul open-source care asigură Q&A comunități.<br />Făcut cu dragoste ©️ {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Schimbare
loading: încarcare...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Câmpul Nume trebuie completat.
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: E-mail
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Nume afișat
msg: Numele afișat nu poate fi gol.
msg_range: Nume afișat până la 30 de caractere.
msg_range: Display name must be 2-30 characters in length.
username:
label: Nume de utilizator
caption: Oamenii te pot menționa ca "@utilizator".
msg: Numele de utilizator nu poate fi gol.
msg_range: Nume utilizator de până la 30 de caractere.
character: 'Trebuie să utilizați setul de caractere "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Imaginea de profil
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Revizuirea ta va arăta după recenzie.
sent_success: Trimis cu succes
related_question:
title: Întrebări conexe
title: Related
answers: răspunsuri
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Persoane întrebate
desc: Invită persoane care crezi că știu răspunsul.
@@ -1359,9 +1400,11 @@ ui:
search: Caută persoane
question_detail:
action: Acţiune
created: Created
Asked: Întrebat
asked: întrebat
update: Modificat
Edited: Edited
edit: editat
commented: commented
Views: Văzute
@@ -1441,7 +1484,7 @@ ui:
signup: Înscrieți-vă
logout: Deconectaţi-vă
verify: Verificare
add_question: Adaugă o întrebare
create: Create
approve: Aprobă
reject: Respins
skip: Treci peste
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Rezultatele căutării
keywords: Cuvinte cheie
@@ -1489,6 +1533,7 @@ ui:
follow: Urmărește
following: Urmăriți
counts: "{{count}} rezultatele"
counts_loading: "... Results"
more: Mai mult
sort_btns:
relevance: Relevanță
@@ -1540,6 +1585,7 @@ ui:
all_questions: Toate întrebările
x_questions: "{{ count }} Întrebări"
x_answers: "{{ count }} răspunsuri"
x_posts: "{{ count }} Posts"
questions: Întrebări
answers: Răspunsuri
newest: Cele mai noi
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Nume
msg: Câmpul Nume trebuie completat.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Parolă
@@ -1731,16 +1777,29 @@ ui:
branding: Marcă
legal: Juridic
write: Scrie
terms: Terms
tos: Condiții de utilizare
privacy: Confidențialitate
seo: SEO
customize: Personalizează
themes: Teme
css_html: CSS/HTML
login: Autentifică-te
privileges: Privilegii
plugins: Extensii
installed_plugins: Extensii instalate
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Bun venit la {{site_name}}
user_center:
login: Autentifică-te
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Invalid Email Address.
@@ -1875,9 +1934,10 @@ ui:
name: Nume
email: E-mail
reputation: Reputație
created_at: Ora crearii
delete_at: Oră ștergerii
suspend_at: Ora suspendării
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Stare
role: Rol
action: Acţiune
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspendă acest utilizator
content: Un utilizator suspendat nu se poate autentifica.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Întrebări
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: Fusul orar
msg: Fusul orar nu poate fi gol.
text: Alege un oraș în același fus orar cu tine.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Scrie
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Fiecare utilizator poate scrie doar câte un răspuns pentru fiecare întrebare
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Etichete recomandate
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Paletă de culori
navbar_style:
label: Navbar style
label: Navbar background style
primary_color:
label: Culoare primară
text: Modifică culorile folosite de temele tale
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS și HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Show logs
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (opțional)
empty: nu poate fi lăsat necompletat
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+435 -289
View File
File diff suppressed because it is too large Load Diff
+169 -26
View File
@@ -57,6 +57,8 @@ backend:
other: Edit
undelete:
other: Undelete
merge:
other: Merge
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: Žiadne povolenie na aktualizáciu.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Reputation rank fail to meet the condition.
@@ -261,6 +265,8 @@ backend:
other: You cannot delete a tag that is in use.
cannot_set_synonym_as_itself:
other: Synonymum aktuálnej značky nemôžete nastaviť ako samotnú.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: The from name cannot be a email address.
@@ -304,6 +310,14 @@ backend:
other: "Error {{.Field}} format near '{{.Content}}' at line {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "The number of users you add at once should be in the range of 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Read Config zlyhal
@@ -564,7 +578,7 @@ backend:
name:
other: First Link
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: First Reaction
@@ -807,7 +821,7 @@ ui:
tag_wiki: značka wiki
create_tag: Vytvoriť štítok
edit_tag: Upraviť značku
ask_a_question: Pridať otázku
ask_a_question: Create Question
edit_question: Úpraviť otázku
edit_answer: Úpraviť odpoveť
search: Vyhľadávanie
@@ -831,6 +845,17 @@ ui:
http_50X: HTTP chyba 403
http_403: HTTP Error 403
logout: Log Out
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Oznámenia
inbox: Doručená pošta
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: Naozaj chcete odstrániť?
close: Zavrieť
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Upraviť značku
default_reason: Upraviť značku
@@ -1045,6 +1079,9 @@ ui:
day: deň
hours: hours
days: days
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1100,10 +1137,10 @@ ui:
more: Viac
wiki: Wiki
ask:
title: Pridať otázku
title: Create Question
edit_title: Upraviť otázku
default_reason: Upraviť otázku
default_first_reason: Add question
default_first_reason: Create question
similar_questions: Podobné otázky
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Revízia
title:
label: Názov
placeholder: Buďte konkrétni a predstavte si, že kladiete otázku inej osobe
placeholder: What's your topic? Be specific.
msg:
empty: Názov nemôže byť prázdny.
range: Názov do 150 znakov
@@ -1119,6 +1156,9 @@ ui:
label: Telo
msg:
empty: Telo nemôže byť prázdne.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Značky --
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Pridať značku
create_btn: Vytvoriť novú značku
search_tag: Vyhľadať značku --
hint: "Popíšte, čoho sa vaša otázka týka, vyžaduje sa aspoň jedna značka."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: Nezodpovedajú žiadne značky
tag_required_text: Povinný štítok (aspoň jeden)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Vyhľadávanie
footer:
build_on: >-
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Zmena
loading: načítavanie...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Prihlasovacie meno nemôže byť prázdne.
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: E-mail
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Display name
msg: Zobrazované meno nemôže byť prázdne.
msg_range: Zobrazované meno nesmie mať viac ako 30 znakov.
msg_range: Display name must be 2-30 characters in length.
username:
label: Užívateľské meno
caption: Ľudia vás môžu spomenúť ako „@používateľské meno“.
msg: Užívateľské meno nemôže byť prázdne.
msg_range: Používateľské meno nesmie mať viac ako 30 znakov.
character: 'Musíte použiť znakovú sadu "a-z", "0-9", "- . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile image
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Vaša revízia sa zobrazí po preskúmaní.
sent_success: Sent successfully
related_question:
title: Súvisiace otázky
title: Related
answers: odpovede
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: People Asked
desc: Select people who you think might know the answer.
@@ -1359,9 +1400,11 @@ ui:
search: Search people
question_detail:
action: Action
created: Created
Asked: Opýtané
asked: opýtané
update: Aktualizované
Edited: Edited
edit: upravené
commented: commented
Views: Videné
@@ -1441,7 +1484,7 @@ ui:
signup: Registrovať sa
logout: Odhlásiť sa
verify: Preveriť
add_question: Pridať otázku
create: Create
approve: Schváliť
reject: Odmietnuť
skip: Preskočiť
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Výsledky vyhľadávania
keywords: Kľúčové slová
@@ -1489,6 +1533,7 @@ ui:
follow: Sledovať
following: Sledované
counts: "{{count}} výsledky"
counts_loading: "... Results"
more: Viac
sort_btns:
relevance: Relevantnosť
@@ -1540,6 +1585,7 @@ ui:
all_questions: Všetky otázky
x_questions: "{{ count }} otázky/otázok"
x_answers: "{{ count }} odpovede/odpovedí"
x_posts: "{{ count }} Posts"
questions: Otázky
answers: Odpovede
newest: Najnovšie
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Meno
msg: Meno nemôže byť prázdne.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Heslo
@@ -1731,16 +1777,29 @@ ui:
branding: Budovanie značky
legal: legálne
write: písať
terms: Terms
tos: Podmienky služby
privacy: Súkromie
seo: SEO
customize: Prispôsobiť
themes: Témy
css_html: CSS/HTML
login: Prihlásiť sa
privileges: Privileges
plugins: Plugins
installed_plugins: Installed Plugins
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Welcome to {{site_name}}
user_center:
login: Login
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Invalid Email Address.
@@ -1875,9 +1934,10 @@ ui:
name: Meno
email: E-mail
reputation: Reputácia
created_at: Čas vytvorenia
delete_at: Čas vymazania
suspend_at: Čas pozastavenia
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Stav
role: Rola
action: Akcia
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspend this user
content: A suspended user can't log in.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Otázky
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: Časové pásmo
msg: Časové pásmo nemôže byť prázdne.
text: Vyberte si mesto v rovnakom časovom pásme ako vy.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Písať
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Each user can only write one answer for each question
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Color scheme
navbar_style:
label: Navbar style
label: Navbar background style
primary_color:
label: Primary color
text: Upraviť farby používané vašími motívmi
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS a HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Show logs
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (voliteľné)
empty: nemôže byť prázdne
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+1 -1
View File
@@ -677,7 +677,7 @@ ui:
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters
character: 'Must use the character set "a-z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+3 -3
View File
@@ -678,13 +678,13 @@ ui:
display_name:
label: Display Name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile Image
gravatar: Gravatar
+240 -97
View File
@@ -19,13 +19,13 @@
backend:
base:
success:
other: Success.
other: Åtgärden lyckades
unknown:
other: Okänt fel.
request_format_error:
other: Request format is not valid.
unauthorized_error:
other: Unauthorized.
other: Access saknas
database_error:
other: Data server error.
forbidden_error:
@@ -34,7 +34,7 @@ backend:
other: Dubblett inlämning.
action:
report:
other: Flag
other: Flagga
edit:
other: Redigera
delete:
@@ -48,101 +48,103 @@ backend:
pin:
other: Fäst
hide:
other: Unlist
other: Göm
unpin:
other: Unpin
other: Lossa
show:
other: Lista
invite_someone_to_answer:
other: Redigera
undelete:
other: Undelete
other: Återskapa
merge:
other: Sammanfoga
role:
name:
user:
other: Användare
admin:
other: Admin
other: Administratör
moderator:
other: Moderator
description:
user:
other: Default with no special access.
other: Normal tillgång
admin:
other: Have the full power to access the site.
other: Full kontroll över webbplatsen
moderator:
other: Has access to all posts except admin settings.
other: Tillgång till allt utom administratörsinställningar
privilege:
level_1:
description:
other: Level 1 (less reputation required for private team, group)
other: Nivå 1
level_2:
description:
other: Level 2 (low reputation required for startup community)
other: Nivå 2
level_3:
description:
other: Level 3 (high reputation required for mature community)
other: Nivå 3
level_custom:
description:
other: Custom Level
other: Anpassad nivå
rank_question_add_label:
other: Ask question
other: Ställ en fråga
rank_answer_add_label:
other: Write answer
other: Skriv ett svar
rank_comment_add_label:
other: Write comment
other: Skriv en kommentar
rank_report_add_label:
other: Flag
other: Flagga
rank_comment_vote_up_label:
other: Upvote comment
other: Bra kommentar
rank_link_url_limit_label:
other: Post more than 2 links at a time
other: Mer än 2 länkar samtidigt
rank_question_vote_up_label:
other: Upvote question
other: Bra fråga
rank_answer_vote_up_label:
other: Upvote answer
other: Bra svar
rank_question_vote_down_label:
other: Downvote question
other: Dålig fråga
rank_answer_vote_down_label:
other: Downvote answer
other: Dåligt svar
rank_invite_someone_to_answer_label:
other: Invite someone to answer
other: Bjud in någon att svara
rank_tag_add_label:
other: Skapa ny tagg
rank_tag_edit_label:
other: Edit tag description (need to review)
other: Beskriv etiketten (behöver granskas)
rank_question_edit_label:
other: Edit other's question (need to review)
other: Editera annans fråga (behöver granskas)
rank_answer_edit_label:
other: Edit other's answer (need to review)
other: Editera annans svar (behöver granskas)
rank_question_edit_without_review_label:
other: Edit other's question without review
other: Editera annans fråga utan granskning
rank_answer_edit_without_review_label:
other: Edit other's answer without review
other: Editera annans svar utan granskning
rank_question_audit_label:
other: Review question edits
other: Granska ändringar av fråga
rank_answer_audit_label:
other: Review answer edits
other: Granska ändringar av svar
rank_tag_audit_label:
other: Review tag edits
other: Granska ändringar av etikett
rank_tag_edit_without_review_label:
other: Edit tag description without review
other: Ändra etikett-beskrivningen utan granskning
rank_tag_synonym_label:
other: Manage tag synonyms
other: Hantera etikett-synonymer
email:
other: Email
other: E-post
e_mail:
other: Email
other: E-post
password:
other: Lösenord
pass:
other: Lösenord
old_pass:
other: Current password
other: Nuvarande lösenord
original_text:
other: This post
other: Detta inlägg
email_or_password_wrong_error:
other: Email and password do not match.
other: Fel e-post eller lösenord
error:
common:
invalid_url:
@@ -151,21 +153,21 @@ backend:
other: Ogiltig status.
password:
space_invalid:
other: Password cannot contain spaces.
other: Lösenordet får inte innehålla mellanslag.
admin:
cannot_update_their_password:
other: You cannot modify your password.
other: Du får inte ändra ditt lösenord.
cannot_edit_their_profile:
other: You cannot modify your profile.
other: Du får inte ändra din profil.
cannot_modify_self_status:
other: You cannot modify your status.
other: Du får inte ändra din status.
email_or_password_wrong:
other: Email and password do not match.
other: Fel e-post eller lösenord.
answer:
not_found:
other: Answer do not found.
other: Svar hittades inte.
cannot_deleted:
other: No permission to delete.
other: Radering tillåts inte.
cannot_update:
other: No permission to update.
question_closed_cannot_add:
@@ -180,50 +182,50 @@ backend:
cannot_edit_after_deadline:
other: The comment time has been too long to modify.
content_cannot_empty:
other: Comment content cannot be empty.
other: Kommentarsfältet får inte vara tomt.
email:
duplicate:
other: Email already exists.
other: E-postadressen finns redan.
need_to_be_verified:
other: Email should be verified.
other: E-postadressen ska vara verifierad.
verify_url_expired:
other: Email verified URL has expired, please resend the email.
other: Länken för att verifiera e-postadressen har gått ut. Vänligen skicka igen.
illegal_email_domain_error:
other: Email is not allowed from that email domain. Please use another one.
other: E-post från den domänen tillåts inte. Vänligen använt en annan.
lang:
not_found:
other: Language file not found.
other: Språkfilen hittas inte.
object:
captcha_verification_failed:
other: Captcha wrong.
other: Fel Captcha.
disallow_follow:
other: You are not allowed to follow.
other: Du tillåts inte följa.
disallow_vote:
other: You are not allowed to vote.
other: Du tillåts inte rösta.
disallow_vote_your_self:
other: You can't vote for your own post.
other: Du får inte rösta på ditt eget inlägg.
not_found:
other: Object not found.
other: Objektet hittas inte.
verification_failed:
other: Verification failed.
other: Verifiering misslyckades.
email_or_password_incorrect:
other: Email and password do not match.
other: Fel e-postadress eller lösenord.
old_password_verification_failed:
other: The old password verification failed
other: Den gamla verifieringen av lösenordet misslyckades.
new_password_same_as_previous_setting:
other: The new password is the same as the previous one.
other: Det nya lösenordet är samma som det förra.
already_deleted:
other: This post has been deleted.
other: Det här inlägget har raderats.
meta:
object_not_found:
other: Meta object not found
other: Meta-objekt hittas inte.
question:
already_deleted:
other: This post has been deleted.
other: Det här inlägget har raderats.
under_review:
other: Your post is awaiting review. It will be visible after it has been approved.
other: Ditt inlägg väntar på granskning. Det kommer att publiceras så snart det har blivit godkänt.
not_found:
other: Question not found.
other: .
cannot_deleted:
other: No permission to delete.
cannot_close:
@@ -232,6 +234,8 @@ backend:
other: No permission to update.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Reputation rank fail to meet the condition.
@@ -261,6 +265,8 @@ backend:
other: You cannot delete a tag that is in use.
cannot_set_synonym_as_itself:
other: You cannot set the synonym of the current tag as itself.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: The from name cannot be a email address.
@@ -304,6 +310,14 @@ backend:
other: "Error {{.Field}} format near '{{.Content}}' at line {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "The number of users you add at once should be in the range of 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Read config failed
@@ -311,16 +325,16 @@ backend:
connection_failed:
other: Database connection failed
create_table_failed:
other: Create table failed
other: Tabellen kunde inte skapas.
install:
create_config_failed:
other: Can't create the config.yaml file.
other: Filen config.yaml kan inte skapas.
upload:
unsupported_file_format:
other: Unsupported file format.
other: Filformatet tillåts inte.
site_info:
config_not_found:
other: Site config not found.
other: Webbplats inställningarna hittar inte.
badge:
object_not_found:
other: Badge object not found
@@ -564,7 +578,7 @@ backend:
name:
other: First Link
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: First Reaction
@@ -807,7 +821,7 @@ ui:
tag_wiki: tag wiki
create_tag: Create Tag
edit_tag: Edit Tag
ask_a_question: Add Question
ask_a_question: Create Question
edit_question: Redigera fråga
edit_answer: Redigera svar
search: Sök
@@ -831,6 +845,17 @@ ui:
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Logga ut
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Notifications
inbox: Inkorg
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: Are you sure you wish to delete?
close: Stäng
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Edit Tag
default_reason: Edit tag
@@ -1045,6 +1079,9 @@ ui:
day: dag
hours: timmar
days: dagar
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1100,10 +1137,10 @@ ui:
more: More
wiki: Wiki
ask:
title: Add Question
title: Create Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
default_first_reason: Create question
similar_questions: Similar questions
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Revision
title:
label: Title
placeholder: Be specific and imagine you're asking a question to another person
placeholder: What's your topic? Be specific.
msg:
empty: Title cannot be empty.
range: Title up to 150 characters
@@ -1119,6 +1156,9 @@ ui:
label: Body
msg:
empty: Body cannot be empty.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Tags
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Add tag
create_btn: Create new tag
search_tag: Search tag
hint: "Describe what your question is about, at least one tag is required."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: No tags matched
tag_required_text: Required tag (at least one)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Sök
footer:
build_on: >-
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Ändra
loading: loading...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Name cannot be empty.
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: E-postadress
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Visningsnamn
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Användarnamn
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profilbild
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Your revision will show after review.
sent_success: Sent successfully
related_question:
title: Related Questions
title: Related
answers: answers
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: People Asked
desc: Bjud in personer som du tror kan svara.
@@ -1359,9 +1400,11 @@ ui:
search: Search people
question_detail:
action: Action
created: Created
Asked: Asked
asked: asked
update: Modified
Edited: Edited
edit: edited
commented: commented
Views: Viewed
@@ -1441,7 +1484,7 @@ ui:
signup: Registrera dig
logout: Logga ut
verify: Verify
add_question: Add question
create: Create
approve: Approve
reject: Reject
skip: Hoppa över
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Sökresultat
keywords: Keywords
@@ -1489,6 +1533,7 @@ ui:
follow: Follow
following: Following
counts: "{{count}} resultat"
counts_loading: "... Results"
more: More
sort_btns:
relevance: Relevance
@@ -1540,6 +1585,7 @@ ui:
all_questions: All Questions
x_questions: "{{ count }} frågor"
x_answers: "{{ count }} svar"
x_posts: "{{ count }} Posts"
questions: Questions
answers: Answers
newest: Newest
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Namn
msg: Name cannot be empty.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Lösenord
@@ -1731,16 +1777,29 @@ ui:
branding: Branding
legal: Legal
write: Write
terms: Terms
tos: Användarvillkor
privacy: Privacy
seo: SEO
customize: Anpassa
themes: Teman
css_html: CSS/HTML
login: Logga in
privileges: Privileges
plugins: Plugins
installed_plugins: Installed Plugins
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Välkommen till {{site_name}}
user_center:
login: Login
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Visningsnamn
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Användarnamn
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Ogiltig e-postadress.
@@ -1875,9 +1934,10 @@ ui:
name: Namn
email: Email
reputation: Reputation
created_at: Created Time
delete_at: Deleted Time
suspend_at: Suspended Time
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Status
role: Roll
action: Action
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspend this user
content: A suspended user can't log in.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Questions
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: Tidszon
msg: Timezone cannot be empty.
text: Choose a city in the same timezone as you.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Write
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Each user can only write one answer for each question
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Färgschema
navbar_style:
label: Navbar style
label: Navbar background style
primary_color:
label: Primary color
text: Modify the colors used by your themes
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS och HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Visa loggar
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (optional)
empty: cannot be empty
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+169 -26
View File
@@ -57,6 +57,8 @@ backend:
other: Edit
undelete:
other: Undelete
merge:
other: Merge
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: No permission to update.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Reputation rank fail to meet the condition.
@@ -261,6 +265,8 @@ backend:
other: You cannot delete a tag that is in use.
cannot_set_synonym_as_itself:
other: You cannot set the synonym of the current tag as itself.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: The from name cannot be a email address.
@@ -304,6 +310,14 @@ backend:
other: "Error {{.Field}} format near '{{.Content}}' at line {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "The number of users you add at once should be in the range of 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Read config failed
@@ -564,7 +578,7 @@ backend:
name:
other: First Link
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: First Reaction
@@ -807,7 +821,7 @@ ui:
tag_wiki: tag wiki
create_tag: ట్యాగ్‌ని సృష్టించండి
edit_tag: ట్యాగ్‌ని సవరించండి
ask_a_question: Add Question
ask_a_question: Create Question
edit_question: ప్రశ్నను సవరించండి
edit_answer: సమాధానాన్ని సవరించండి
search: Search
@@ -831,6 +845,17 @@ ui:
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: నోటిఫికేషన్లు
inbox: ఇన్‌బాక్స్
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: Are you sure you wish to delete?
close: Close
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Edit Tag
default_reason: Edit tag
@@ -1045,6 +1079,9 @@ ui:
day: day
hours: hours
days: days
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1100,10 +1137,10 @@ ui:
more: More
wiki: Wiki
ask:
title: Add Question
title: Create Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
default_first_reason: Create question
similar_questions: Similar questions
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Revision
title:
label: Title
placeholder: Be specific and imagine you're asking a question to another person
placeholder: What's your topic? Be specific.
msg:
empty: Title cannot be empty.
range: Title up to 150 characters
@@ -1119,6 +1156,9 @@ ui:
label: Body
msg:
empty: Body cannot be empty.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Tags
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Add tag
create_btn: Create new tag
search_tag: Search tag
hint: "Describe what your question is about, at least one tag is required."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: No tags matched
tag_required_text: Required tag (at least one)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Search
footer:
build_on: >-
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Change
loading: loading...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Name cannot be empty.
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Email
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Display name
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
caption: People can mention you as "@username".
msg: Username cannot be empty.
msg_range: Username up to 30 characters.
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile image
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Your revision will show after review.
sent_success: Sent successfully
related_question:
title: Related Questions
title: Related
answers: answers
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: People Asked
desc: Select people who you think might know the answer.
@@ -1359,9 +1400,11 @@ ui:
search: Search people
question_detail:
action: Action
created: Created
Asked: Asked
asked: asked
update: Modified
Edited: Edited
edit: edited
commented: commented
Views: Viewed
@@ -1441,7 +1484,7 @@ ui:
signup: Sign up
logout: Log out
verify: Verify
add_question: Add question
create: Create
approve: Approve
reject: Reject
skip: Skip
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Search Results
keywords: Keywords
@@ -1489,6 +1533,7 @@ ui:
follow: Follow
following: Following
counts: "{{count}} Results"
counts_loading: "... Results"
more: More
sort_btns:
relevance: Relevance
@@ -1540,6 +1585,7 @@ ui:
all_questions: All Questions
x_questions: "{{ count }} Questions"
x_answers: "{{ count }} answers"
x_posts: "{{ count }} Posts"
questions: Questions
answers: Answers
newest: Newest
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Name
msg: Name cannot be empty.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Password
@@ -1731,16 +1777,29 @@ ui:
branding: Branding
legal: Legal
write: Write
terms: Terms
tos: Terms of Service
privacy: Privacy
seo: SEO
customize: Customize
themes: Themes
css_html: CSS/HTML
login: Login
privileges: Privileges
plugins: Plugins
installed_plugins: Installed Plugins
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Welcome to {{site_name}}
user_center:
login: Login
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Invalid Email Address.
@@ -1875,9 +1934,10 @@ ui:
name: Name
email: Email
reputation: Reputation
created_at: Created Time
delete_at: Deleted Time
suspend_at: Suspended Time
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Status
role: Role
action: Action
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspend this user
content: A suspended user can't log in.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Questions
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: Timezone
msg: Timezone cannot be empty.
text: Choose a city in the same timezone as you.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Write
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Each user can only write one answer for each question
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Color scheme
navbar_style:
label: Navbar style
label: Navbar background style
primary_color:
label: Primary color
text: Modify the colors used by your themes
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS and HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Show logs
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (optional)
empty: cannot be empty
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+1576 -1433
View File
File diff suppressed because it is too large Load Diff
+169 -26
View File
@@ -57,6 +57,8 @@ backend:
other: Редагувати
undelete:
other: Скасувати видалення
merge:
other: Merge
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: Немає дозволу на оновлення.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Ранг репутації не відповідає умові.
@@ -261,6 +265,8 @@ backend:
other: Ви не можете видалити теґ, який використовується.
cannot_set_synonym_as_itself:
other: Ви не можете встановити синонім поточного тегу як сам тег.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: Ім’я відправника не може бути електронною адресою.
@@ -304,6 +310,14 @@ backend:
other: "Помилка формату {{.Field}} біля '{{.Content}}' у рядку {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "Кількість користувачів, яких ви додаєте одночасно, має бути в діапазоні 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Не вдалося прочитати конфігурацію
@@ -564,7 +578,7 @@ backend:
name:
other: Перше посилання
desc:
other: Перший дирст додав посилання на інший допис.
other: First added a link to another post.
first_reaction:
name:
other: Перша реакція
@@ -807,7 +821,7 @@ ui:
tag_wiki: тег вікі
create_tag: Створити теґ
edit_tag: Редагувати теґ
ask_a_question: Додати запитання
ask_a_question: Create Question
edit_question: Редагувати запитання
edit_answer: Редагувати відповідь
search: Пошук
@@ -831,6 +845,17 @@ ui:
http_50X: Помилка HTTP 500
http_403: Помилка HTTP 403
logout: Вийти
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Сповіщення
inbox: Вхідні
@@ -1027,6 +1052,15 @@ ui:
<p>Ми не дозволяємо <strong>видаляти тег із синонімами</strong>.</p> <p>Передусім, будь ласка, вилучіть синоніми з цього тега.</p>
tip: Ви впевнені, що хочете видалити?
close: Закрити
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Редагувати теґ
default_reason: Редагувати теґ
@@ -1045,6 +1079,9 @@ ui:
day: день
hours: годин
days: дні
month: month
months: months
year: year
reaction:
heart: серце
smile: посмішка
@@ -1100,10 +1137,10 @@ ui:
more: Більше
wiki: Вікі
ask:
title: Додати питання
title: Create Question
edit_title: Редагувати питання
default_reason: Редагувати питання
default_first_reason: Додати питання
default_first_reason: Create question
similar_questions: Подібні питання
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Редакція
title:
label: Назва
placeholder: Будьте конкретними та уявіть, що ви ставите запитання іншій людині
placeholder: What's your topic? Be specific.
msg:
empty: Назва не може бути порожньою.
range: Назва до 150 символів
@@ -1119,6 +1156,9 @@ ui:
label: Тіло
msg:
empty: Тіло не може бути порожнім.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Теґи
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Додати теґ
create_btn: Створити новий теґ
search_tag: Шукати теґ
hint: "Опишіть, про що ваше запитання, принаймні один тег є обов'язковим."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: Не знайдено тегів
tag_required_text: Обов'язковий тег (принаймні один)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Пошук
footer:
build_on: >-
Працює на основі <1> Apache Answer </1> - програмного забезпечення з відкритим вихідним кодом, яке забезпечує роботу спільнот запитань та відповідей.<br />Зроблено з любов'ю © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Змінити
loading: завантаження...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Ім'я не може бути порожнім.
range: Ім'я повинно мати довжину від 2 до 30 символів.
character: 'Необхідно використовувати набір символів "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Електронна пошта
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Ім'я для відображення
msg: Ім'я для відображення не може бути порожнім.
msg_range: Ім'я для відображення до 30 символів.
msg_range: Display name must be 2-30 characters in length.
username:
label: Ім'я користувача
caption: Користувачі можуть згадувати вас як "@username".
msg: Ім’я користувача не може бути порожнім.
msg_range: Ім'я користувача до 30 символів.
character: 'Необхідно використовувати набір символів "a-z", "0-9", "-. _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Зображення профілю
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Ваша версія з'явиться після перевірки.
sent_success: Успішно відправлено
related_question:
title: Пов'язані запитання
title: Related
answers: відповіді
linked_question:
title: Пов'язані питання
description: Питання, пов'язані з
no_linked_question: Немає питань, пов'язаних з цього питання.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Люди запитували
desc: Виберіть людей, які, на вашу думку, можуть знати відповідь.
@@ -1359,9 +1400,11 @@ ui:
search: Шукати людей
question_detail:
action: Дія
created: Created
Asked: Запитали
asked: запитали
update: Змінено
Edited: Edited
edit: відредаговано
commented: прокоментовано
Views: Переглянуто
@@ -1441,7 +1484,7 @@ ui:
signup: Зареєструватися
logout: Вийти
verify: Підтвердити
add_question: Додати питання
create: Create
approve: Затвердити
reject: Відхилити
skip: Пропустити
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Результати пошуку
keywords: Ключові слова
@@ -1489,6 +1533,7 @@ ui:
follow: Підписатися
following: Підписані
counts: "{{count}} Результатів"
counts_loading: "... Results"
more: Більше
sort_btns:
relevance: Релевантність
@@ -1540,6 +1585,7 @@ ui:
all_questions: Всі питання
x_questions: "{{ count }} Питань"
x_answers: "{{ count }} відповідей"
x_posts: "{{ count }} Posts"
questions: Запитання
answers: Відповіді
newest: Найновіші
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Ім’я
msg: Ім'я не може бути порожнім.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Пароль
@@ -1731,16 +1777,29 @@ ui:
branding: Брендинг
legal: Правила та умови
write: Написати
terms: Terms
tos: Умови використання
privacy: Приватність
seo: SEO
customize: Персоналізувати
themes: Теми
css_html: CSS/HTML
login: Вхід
privileges: Привілеї
plugins: Плагіни
installed_plugins: Встановлені плагіни
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Ласкаво просимо до {{site_name}}
user_center:
login: Вхід
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Зображуване ім'я
msg_range: Зображуване ім'я до 30 символів.
msg_range: Display name must be 2-30 characters in length.
username:
label: Ім'я користувача
msg_range: Ім'я користувача до 30 символів.
msg_range: Username must be 2-30 characters in length.
email:
label: Електронна пошта
msg_invalid: Невірна адреса електронної пошти.
@@ -1875,9 +1934,10 @@ ui:
name: Ім’я
email: Електронна пошта
reputation: Репутація
created_at: Створений час
delete_at: Видалений час
suspend_at: Час призупинення
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Статус
role: Роль
action: Дія
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Призупинити цього користувача
content: Призупинений користувач не може увійти в систему.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Запитання
unlisted: Вилучене зі списку
@@ -1972,6 +2034,12 @@ ui:
label: Часовий пояс
msg: Часовий пояс не може бути пустим.
text: Виберіть місто в тому ж часовому поясі, що й ви.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Написати
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Відповідь на запис
label: Кожен користувач може написати лише одну відповідь на кожне запитання
text: "Вимкнути, щоб дозволити користувачам писати кілька відповідей на одне і те ж питання, що може призвести до розфокусування відповідей."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Рекомендовані теги
text: "За замовчуванням рекомендовані теги будуть показані у спадному списку."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Схема кольорів
navbar_style:
label: Стиль панелі навігації
label: Navbar background style
primary_color:
label: Основний колір
text: Змінюйте кольори, що використовуються у ваших темах
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS та HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Показати записи журналу
status: Статус
title: Значки
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (необов'язково)
empty: не може бути порожнім
@@ -2295,6 +2437,7 @@ ui:
user_normal: Цей користувач вже нормальний.
user_suspended: Цього користувача було відсторонено.
user_deleted: Цього користувача було видалено.
user_added: User has been added successfully.
badge_activated: Цей бейдж було активовано.
badge_inactivated: Цей бейдж було деактивовано.
users_deleted: These users have been deleted.
+169 -26
View File
@@ -57,6 +57,8 @@ backend:
other: Chỉnh sửa
undelete:
other: Khôi phục
merge:
other: Merge
role:
name:
user:
@@ -232,6 +234,8 @@ backend:
other: Không có quyền cập nhật.
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Xếp hạng danh tiếng không đạt được điều kiện.
@@ -261,6 +265,8 @@ backend:
other: Bạn không thể xóa thẻ đang được sử dụng.
cannot_set_synonym_as_itself:
other: Bạn không thể đặt từ đồng nghĩa của thẻ hiện tại là chính nó.
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: Tên người gửi không thể là địa chỉ email.
@@ -304,6 +310,14 @@ backend:
other: "Lỗi định dạng {{.Field}} gần '{{.Content}}' tại dòng {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "Số lượng người dùng bạn thêm cùng một lúc nên nằm trong khoảng từ 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: Đọc cấu hình thất bại
@@ -564,7 +578,7 @@ backend:
name:
other: Liên kết đầu tiên
desc:
other: Đầu tiên, Dirst đã thêm một liên kết đến một bài viết khác.
other: First added a link to another post.
first_reaction:
name:
other: Phản ứng đầu tiên
@@ -807,7 +821,7 @@ ui:
tag_wiki: wiki thẻ
create_tag: Tạo thẻ
edit_tag: Chỉnh sửa thẻ
ask_a_question: Thêm câu hỏi
ask_a_question: Create Question
edit_question: Chỉnh sửa câu hỏi
edit_answer: Chỉnh sửa câu
search: Tìm kiếm
@@ -831,6 +845,17 @@ ui:
http_50X: Lỗi HTTP 500
http_403: Lỗi HTTP 403
logout: Đăng xuất
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: Các thông báo
inbox: Hộp thư đến
@@ -1027,6 +1052,15 @@ ui:
<p>Chúng tôi không cho phép <strong>xóa thẻ có từ đồng nghĩa</strong>.</p> <p>Vui lòng xóa các từ đồng nghĩa khỏi thẻ này trước.</p>
tip: Bạn có chắc chắn muốn xóa không?
close: Đóng
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: Submit
btn_close: Close
edit_tag:
title: Chỉnh sửa Thẻ
default_reason: Chỉnh sửa thẻ
@@ -1045,6 +1079,9 @@ ui:
day: ngày
hours: giờ
days: ngày
month: month
months: months
year: year
reaction:
heart: trái tim
smile: nụ cười
@@ -1100,10 +1137,10 @@ ui:
more: Thêm
wiki: Wiki
ask:
title: Thêm Câu hỏi
title: Create Question
edit_title: Chỉnh sửa Câu hỏi
default_reason: Chỉnh sửa câu hỏi
default_first_reason: Thêm câu hỏi
default_first_reason: Create question
similar_questions: Câu hỏi tương tự
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: Sửa đổi
title:
label: Tiêu đề
placeholder: Hãy cụ thể và tưởng tượng rằng bạn đang hỏi một người khác
placeholder: What's your topic? Be specific.
msg:
empty: Tiêu đề không thể trống.
range: Tiêu đề tối đa 150 ký tự
@@ -1119,6 +1156,9 @@ ui:
label: Nội dung
msg:
empty: Nội dung không thể trống.
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: Thẻ
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: Thêm thẻ
create_btn: Tạo thẻ mới
search_tag: Tìm kiếm thẻ
hint: "Mô tả câu hỏi của bạn, ít nhất một thẻ là bắt buộc."
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: Không có thẻ phù hợp
tag_required_text: Thẻ bắt buộc (ít nhất một)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: Tìm kiếm
footer:
build_on: >-
Được hỗ trợ bởi <1> Apache Answer </1>- phần mềm mã nguồn mở dành cho cộng đồng hỏi đáp.<br />Được tạo với tình yêu © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: Thay đổi
loading: đang tải...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: Tên không thể trống.
range: Tên phải có độ dài từ 2 đến 30 ký tự.
character: 'Chỉ sử dụng bộ ký tự "a-z", "0-9", , "A-Z", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: Email
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Tên hiển thị
msg: Tên hiển thị không thể trống.
msg_range: Tên hiển thị tối đa 30 ký tự.
msg_range: Display name must be 2-30 characters in length.
username:
label: Tên người dùng
caption: Mọi người có thể nhắc đến bạn với "@username".
msg: Tên người dùng không thể trống.
msg_range: Tên người dùng tối đa 30 ký tự.
character: 'Chỉ sử dụng bộ ký tự "a-z", "0-9", " - . _"'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Hình ảnh hồ sơ
gravatar: Gravatar
@@ -1345,12 +1386,12 @@ ui:
review: Sửa đổi của bạn sẽ được hiển thị sau khi được xem xét.
sent_success: Đã gửi thành công
related_question:
title: Các câu hỏi liên quan
title: Related
answers: câu trả lời
linked_question:
title: Câu hỏi được liên kết
description: Câu hỏi liên quan đến
no_linked_question: Không có câu hỏi nào được liên kết từ câu hỏi này.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: Mời mọi người
desc: Mời những người bạn nghĩ có thể trả lời.
@@ -1359,9 +1400,11 @@ ui:
search: Tìm kiếm người
question_detail:
action: Hành động
created: Created
Asked: Đã hỏi
asked: đã hỏi
update: Đã chỉnh sửa
Edited: Edited
edit: đã chỉnh sửa
commented: đã bình luận
Views: Lượt xem
@@ -1441,7 +1484,7 @@ ui:
signup: Đăng ký
logout: Đăng xuất
verify: Xác minh
add_question: Thêm câu hỏi
create: Create
approve: Phê duyệt
reject: Từ chối
skip: Bỏ qua
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: Kết quả tìm kiếm
keywords: Từ khóa
@@ -1489,6 +1533,7 @@ ui:
follow: Theo dõi
following: Đang theo dõi
counts: "{{count}} Kết quả"
counts_loading: "... Results"
more: Thêm
sort_btns:
relevance: Liên quan
@@ -1540,6 +1585,7 @@ ui:
all_questions: Tất cả câu hỏi
x_questions: "{{ count }} Câu hỏi"
x_answers: "{{ count }} câu trả lời"
x_posts: "{{ count }} Posts"
questions: Câu hỏi
answers: Câu trả lời
newest: Mới nhất
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: Tên
msg: Tên không thể trống.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: Mật khẩu
@@ -1731,16 +1777,29 @@ ui:
branding: Thương hiệu
legal: Pháp lý
write: Viết
terms: Terms
tos: Điều khoản dịch vụ
privacy: Quyền riêng tư
seo: SEO
customize: Tùy chỉnh
themes: Chủ đề
css_html: CSS/HTML
login: Đăng nhập
privileges: Đặc quyền
plugins: Plugins
installed_plugins: Plugin đã cài đặt
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Chào mừng bạn đến với {{site_name}}
user_center:
login: Đăng nhập
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Tên hiển thị
msg_range: Tên hiển thị tối đa 30 ký tự.
msg_range: Display name must be 2-30 characters in length.
username:
label: Tên người dùng
msg_range: Tên người dùng tối đa 30 ký tự.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Địa chỉ email không hợp lệ.
@@ -1875,9 +1934,10 @@ ui:
name: Tên
email: Email
reputation: Danh tiếng
created_at: Thời gian tạo
delete_at: Thời gian xóa
suspend_at: Thời gian đình chỉ
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: Trạng thái
role: Vai trò
action: Hành động
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Đình chỉ người dùng này
content: Người dùng bị đình chỉ không thể đăng nhập.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: Câu hỏi
unlisted: Không được liệt kê
@@ -1972,6 +2034,12 @@ ui:
label: Múi giờ
msg: Múi giờ không thể trống.
text: Chọn một thành phố cùng múi giờ với bạn.
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: Viết
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Câu trả lời chỉnh sửa
label: Each user can only write one answer for each question
text: "Tắt để cho phép người dùng viết nhiều câu trả lời cho cùng một câu hỏi, điều này có thể khiến các câu trả lời bị mất trọng tâm."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Thẻ được đề xuất
text: "Các thẻ gợi ý sẽ hiển thị trong danh sách thả xuống theo mặc định."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Sơ đồ màu
navbar_style:
label: Kiểu thanh điều hướng
label: Navbar background style
primary_color:
label: Màu chính
text: Thay đổi các màu sắc được sử dụng bởi chủ đề của bạn
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS và HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Hiển thị nhật ký
status: Trạng thái
title: Danh hiệu
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (tùy chọn)
empty: không thể trống
@@ -2295,6 +2437,7 @@ ui:
user_normal: Người dùng này đã bình thường.
user_suspended: Người dùng này đã bị đình chỉ.
user_deleted: Người dùng này đã bị xóa.
user_added: User has been added successfully.
badge_activated: Huy hiệu này đã được kích hoạt.
badge_inactivated: Huy hiệu này đã bị vô hiệu hóa.
users_deleted: These users have been deleted.
+180 -47
View File
@@ -234,6 +234,8 @@ backend:
other: 没有更新权限。
content_cannot_empty:
other: 内容不能为空。
content_less_than_minimum:
other: 输入的内容不足。
rank:
fail_to_meet_the_condition:
other: 声望值未达到要求。
@@ -263,6 +265,8 @@ backend:
other: 你不能删除这个正在使用的标签。
cannot_set_synonym_as_itself:
other: 你不能将当前标签设为自己的同义词。
minimum_count:
other: 没有输入足够的标签。
smtp:
config_from_name_cannot_be_email:
other: 发件人名称不能是邮箱地址。
@@ -306,6 +310,14 @@ backend:
other: "发生错误,{{.Field}} 格式错误,在 '{{.Content}}' 行数 {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "一次性添加的用户数量应在 1-{{.MaxAmount}} 之间。"
status_suspended_forever:
other: "<strong>该用户已被永久封禁。</strong>该用户不符合社区准则。"
status_suspended_until:
other: "<strong>该用户已被封禁至 {{.SuspendedUntil}}。</strong>该用户不符合社区准则。"
status_deleted:
other: "该用户已被删除。"
status_inactive:
other: "该用户未激活。"
config:
read_config_failed:
other: 读取配置失败
@@ -551,7 +563,7 @@ backend:
name:
other: 编辑者
desc:
other: 首次编辑帖子。
other: 首次帖子编辑
first_flag:
name:
other: 第一次举报
@@ -581,7 +593,7 @@ backend:
name:
other: 学者
desc:
other: 问了一个问题并接受了一个答案。
other: 问了一个问题并接受了一个答案。
commentator:
name:
other: 评论员
@@ -601,7 +613,7 @@ backend:
name:
other: 读者
desc:
other: 阅读超过 10 个回答的主题中的每个回答
other: 用10个以上的答案在主题中阅读每个答案
welcome:
name:
other: 欢迎
@@ -624,7 +636,7 @@ backend:
other: 分享了一个拥有1000个唯一访客的帖子。
out_of_love:
name:
other: 出于爱
other: 失去爱好
desc:
other: 一天内使用了 50 个赞。
higher_love:
@@ -661,12 +673,12 @@ backend:
name:
other: 返回
desc:
other: 100 个赞成票的帖子,并投了 100 个赞成票。
other: 有100个投票赞成的职位并放弃了100个投票。
empathetic:
name:
other: 情随境迁
desc:
other: 500 个赞成票的帖子,并投了 1000 个赞成票。
other: 有500个投票赞成的职位并放弃了1000个投票。
enthusiast:
name:
other: 狂热
@@ -711,12 +723,12 @@ backend:
name:
other: 指导顾问
desc:
other: 有10个答案被接受。
other: 接受答案
know_it_all:
name:
other: 万事通
desc:
other: 50个答案被接受
other: 接受50个答案。
solution_institution:
name:
other: 解决方案机构
@@ -761,7 +773,7 @@ backend:
name:
other: 值得关注问题
desc:
other: 问题有1,000 个浏览量。
other: 问题有 1,000 个浏览量。
famous_question:
name:
other: 著名的问题
@@ -797,7 +809,7 @@ ui:
how_to_format:
title: 如何排版
desc: >-
<ul class="mb-0"><li><p class="mb-2">引用问题或答案: <code>#post_id</code></p></li><li><p class="mb-2">添加链接</p><pre class="mb-2"><code>&lt;https://url.com&gt;<br/><br/>[标题](https://url.com)</code></pre></li><li><p class="mb-2">段落之间使用空行分隔</p></li><li><p class="mb-2"><em>_斜体_</em> 或者 **<strong>粗体</strong>**</p></li><li><p class="mb-2">使用 个空格缩进代码</p></li><li><p class="mb-2">在行首添加 <code>&gt;</code> 表示引用</p></li><li><p class="mb-2">反引号进行转义 <code>`像 _这样_`</code></p></li><li><p class="mb-2">使用 <code>```</code> 创建代码块</p><pre class="mb-0"><code>```<br/>这是代码块<br/>```</code></pre></li></ul>
<ul class="mb-0"><li><p class="mb-2">引用问题或答案: <code>#4</code></p></li><li><p class="mb-2">添加链接</p><pre class="mb-2"><code>&lt;https://url.com&gt;<br/><br/>[标题](https://url.com)</code></pre></li><li><p class="mb-2">段落之间使用空行分隔</p></li><li><p class="mb-2"><em>_斜体_</em> 或者 **<strong>粗体</strong>**</p></li><li><p class="mb-2">使用 个空格缩进代码</p></li><li><p class="mb-2">在行首添加 <code>&gt;</code> 表示引用</p></li><li><p class="mb-2">反引号进行转义 <code>`像 _这样_`</code></p></li><li><p class="mb-2">使用 <code>```</code> 创建代码块</p><pre class="mb-0"><code>```<br/>这是代码块<br/>```</code></pre></li></ul>
pagination:
prev: 上一页
next: 下一页
@@ -809,7 +821,7 @@ ui:
tag_wiki: 标签维基
create_tag: 创建标签
edit_tag: 编辑标签
ask_a_question: 问题
ask_a_question: 创建问题
edit_question: 编辑问题
edit_answer: 编辑回答
search: 搜索
@@ -833,6 +845,17 @@ ui:
http_50X: HTTP 错误 500
http_403: HTTP 错误 403
logout: 退出
posts: 帖子
ai_assistant: AI 助手
ai_assistant:
description: 有问题?问它并获得答案、观点和建议。
recent_conversations: 新对话
show_more: 显示更多
new: 新聊天
ai_generate: 来自帖子的 AI,可能不准确。
copy: 复制
ask_a_follow_up: 提出后续问题
ask_placeholder: 提问
notifications:
title: 通知
inbox: 收件箱
@@ -1036,6 +1059,8 @@ ui:
target_tag_title: 目标标签
target_tag_description: 合并后将在这两个标签之间将创建一个同义词。
no_results: 没有匹配的标签
btn_submit: 提交
btn_close: 关闭
edit_tag:
title: 编辑标签
default_reason: 编辑标签
@@ -1054,6 +1079,9 @@ ui:
day:
hours: 小时
days:
month:
months:
year:
reaction:
heart: 爱心
smile: 微笑
@@ -1109,10 +1137,10 @@ ui:
more: 更多
wiki: 维基
ask:
title: 新增问题
title: 创建问题
edit_title: 编辑问题
default_reason: 编辑问题
default_first_reason: 新增问题
default_first_reason: 创建问题
similar_questions: 相似问题
form:
fields:
@@ -1120,7 +1148,7 @@ ui:
label: 修订版本
title:
label: 标题
placeholder: 请详细描述你的问题,想象你在问一个人
placeholder: 你的主题是什么?请具体说明。
msg:
empty: 标题不能为空。
range: 标题最多 150 个字符
@@ -1128,6 +1156,9 @@ ui:
label: 内容
msg:
empty: 内容不能为空。
hint:
optional_body: 描述这个问题是什么。
minimum_characters: "详细描述这个问题,至少需要 {{min_content_length}} 字符。"
tags:
label: 标签
msg:
@@ -1148,7 +1179,9 @@ ui:
add_btn: 添加标签
create_btn: 创建新标签
search_tag: 搜索标签
hint: "描述您的问题是关于什么,至少需要一个标签。"
hint: 描述您的内容是关于什么,至少需要一个标签。
hint_zero_tags: 描述您的内容与什么有关。
hint_more_than_one_tag: "描述您的内容是关于什么,至少需要{{min_tags_number}}个标签。"
no_result: 没有匹配的标签
tag_required_text: 必选标签(至少一个)
header:
@@ -1167,8 +1200,7 @@ ui:
search:
placeholder: 搜索
footer:
build_on: >-
由 <1>Apache Answer</1> 提供动力 - 驱动问答社区的开源软件。<br />用爱制造 © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: 更改
loading: 加载中...
@@ -1201,7 +1233,7 @@ ui:
msg:
empty: 名字不能为空
range: 名称长度必须在 2 至 30 个字符之间。
character: '只能由 "a-z"、"A-Z"、"0-9"" - . _" 组成'
character: '只能由 "a-z", "0-9", " - . _" 组成'
email:
label: 邮箱
msg:
@@ -1273,13 +1305,13 @@ ui:
display_name:
label: 显示名称
msg: 昵称不能为空。
msg_range: 显示名称不能超过 30 个字符。
msg_range: 显示名称长度必须为 2-30 个字符。
username:
label: 用户名
caption: 用户可以通过 "@用户名" 来提及你。
msg: 用户名不能为空
msg_range: 用户名不能超过 30 个字符。
character: '只能由 "a-z"、"A-Z"、"0-9"" - . _" 组成'
msg_range: 显示名称长度必须为 2-30 个字符。
character: '只能由 "a-z", "0-9", " - . _" 组成'
avatar:
label: 头像
gravatar: Gravatar
@@ -1354,12 +1386,12 @@ ui:
review: 您的修订将在审阅通过后显示。
sent_success: 发送成功
related_question:
title: 关问题
title:
answers: 个回答
linked_question:
title: 关联的问题
description: 问题关联到
no_linked_question: 这个问题没有相关联的问题
title: 关联
description: 帖子关联到
no_linked_question: 没有与之关联的贴子
invite_to_answer:
title: 受邀人
desc: 邀请你认为可能知道答案的人。
@@ -1368,9 +1400,11 @@ ui:
search: 搜索人员
question_detail:
action: 操作
created: 创建于
Asked: 提问于
asked: 提问于
update: 修改于
Edited: 编辑于
edit: 编辑于
commented: 评论
Views: 阅读次数
@@ -1485,11 +1519,11 @@ ui:
deleted_permanently: 永久删除
pending: 等待处理
more: 更多
view: 视图
card: 卡片模式
compact: 简洁模式
display_below: 展示当前
always_display: 一直展
view: 浏览量
card: 卡片
compact: 紧凑
display_below: 在下方显示
always_display: 总是显
or: 或者
back_sites: 返回网站
search:
@@ -1499,6 +1533,7 @@ ui:
follow: 关注
following: 已关注
counts: "{{count}} 个结果"
counts_loading: "... 个结果"
more: 更多
sort_btns:
relevance: 相关性
@@ -1550,6 +1585,7 @@ ui:
all_questions: 全部问题
x_questions: "{{ count }} 个问题"
x_answers: "{{ count }} 个回答"
x_posts: "{{ count }} 个帖子"
questions: 问题
answers: 回答
newest: 最新
@@ -1632,22 +1668,22 @@ ui:
placeholder: /data/answer.db
msg: 数据库文件不能为空。
ssl_enabled:
label: 使能够 SSL
label: 启用 SSL
ssl_enabled_on:
label:
label: On
ssl_enabled_off:
label:
label: Off
ssl_mode:
label: SSL 模式
ssl_root_cert:
placeholder: sslrootcert 文件路径
msg: 文件路径不能为空
placeholder: sslrootcert文件路径
msg: sslrootcert 文件路径不能为空
ssl_cert:
placeholder: sslcert 文件路径
msg: 文件路径不能为空
placeholder: sslcert文件路径
msg: sslcert 文件路径不能为空
ssl_key:
placeholder: sslkey 文件路径
msg: 文件路径不能为空
msg: sslcert 文件路径不能为空
config_yaml:
title: 创建 config.yaml
label: 已创建 config.yaml 文件。
@@ -1680,7 +1716,7 @@ ui:
admin_name:
label: 名字
msg: 名字不能为空。
character: '只能由 "a-z"、"A-Z"、"0-9"" - . _" 组成'
character: '只能由 "a-z", "0-9", " - . _" 组成'
msg_max_length: 名称长度必须在 2 至 30 个字符之间。
admin_password:
label: 密码
@@ -1741,16 +1777,29 @@ ui:
branding: 品牌
legal: 法律条款
write: 撰写
terms: 服务条款
tos: 服务条款
privacy: 隐私政策
seo: SEO
customize: 自定义
themes: 主题
css_html: CSS/HTML
login: 登录
privileges: 特权
plugins: 插件
installed_plugins: 已安装插件
apperance: 外观
community: 社区
advanced: 高级选项
tags: 标签
rules: 规则
policies: 政策
security: 安全
files: 文件
apikeys: API 密钥
intelligence: 智力
ai_assistant: AI 助手
ai_settings: AI 设置
mcp: MCP
website_welcome: 欢迎来到 {{site_name}}
user_center:
login: 登录
@@ -1850,10 +1899,10 @@ ui:
fields:
display_name:
label: 显示名称
msg_range: 显示名称不能超过 30 个字符。
msg_range: 显示名称长度必须为 2-30 个字符。
username:
label: 用户名
msg_range: 用户名不能超过 30 个字符。
msg_range: 用户名长度必须为 2-30 个字符。
email:
label: 电子邮件地址
msg_invalid: 无效的邮箱地址
@@ -1888,6 +1937,7 @@ ui:
created_at: 创建时间
delete_at: 删除时间
suspend_at: 封禁时间
suspend_until: 封禁到期
status: 状态
role: 角色
action: 操作
@@ -1922,6 +1972,8 @@ ui:
suspend_user:
title: 挂起此用户
content: 被封禁的用户将无法登录。
label: 用户将被封禁多长时间?
forever: 永久
questions:
page_title: 问题
unlisted: 已隐藏
@@ -1982,6 +2034,12 @@ ui:
label: 时区
msg: 时区不能为空。
text: 选择一个与您相同时区的城市。
avatar:
label: 默认头像
text: 没有自定义头像的用户。
gravatar_base_url:
label: Gravatar 根路径 URL
text: Gravatar 提供商的 API 基础的 URL。当为空时忽略。
smtp:
page_title: SMTP
from_email:
@@ -2049,15 +2107,21 @@ ui:
text: "您可以在此添加隐私政策内容。如果您已经在别处托管了文档,请在这里提供完整的URL。"
external_content_display:
label: 外部内容
text: "内容包括外部网站嵌入的图、视频和媒体。"
always_display: 始终显示外部内容
ask_before_display: 在显示外部内容前进行询问
text: "内容包括外部网站嵌入的图、视频和媒体。"
always_display: 总是显示外部内容
ask_before_display: 在显示外部内容前询问
write:
page_title: 编辑
page_title: 文件
min_content:
label: 最小问题长度
text: 最小允许的问题内容长度(字符)。
restrict_answer:
title: 回答编辑
label: 每个用户对于每个问题只能有一个回答
text: "用户可以使用编辑按钮优化已有的回答"
min_tags:
label: "问题的最少标签数"
text: "一个问题所需标签的最小数量。"
recommend_tags:
label: 推荐标签
text: "推荐标签将默认显示在下拉列表中。"
@@ -2101,10 +2165,14 @@ ui:
color_scheme:
label: 配色方案
navbar_style:
label: 导航栏样式
label: 导航栏背景样式
primary_color:
label: 主色调
text: 修改您主题使用的颜色
layout:
label: 布局
full_width: 全宽度
fixed_width: 固定宽度
css_and_html:
page_title: CSS 与 HTML
custom_css:
@@ -2209,6 +2277,70 @@ ui:
show_logs: 显示日志
status: 状态
title: 徽章
apikeys:
title: API 密钥
add_api_key: 添加 API 密钥
desc: 描述
scope: 范围
key: 密钥
created: 创建于
last_used: 最后使用
add_or_edit_modal:
add_title: 添加 API 密钥
edit_title: 编辑 API 密钥
description: 描述
description_required: 请输入描述。
scope: 范围
global: 全局
read-only: 只读
created_modal:
title: 已创建API密钥
api_key: API 密钥
description: 此密钥将不会再次显示。请确保您在继续之前拿到一份副本。
delete_modal:
title: 删除API密钥
content: 任何使用此密钥的应用程序或脚本都将无法访问API。这是永久性的!
ai_settings:
enabled:
label: AI 已启用
check: 启用AI功能
text: AI 模型必须正确配置才能使用。
provider:
label: 提供商
api_host:
label: API 主机
msg: API 主机是必需的
api_key:
label: API 密钥
check: 检查
check_success: "连接成功。"
msg: API 密钥是必填项
model:
label: 模型
msg: 模型是必需的
add_success: AI 设置更新成功。
conversations:
topic: 主题
helpful: 有帮助
unhelpful: 没有帮助
created: 创建于
action: 操作
empty: 没有找到会话
delete_modal:
title: 删除对话
content: 您确定要删除此对话吗?这是永久性的!
delete_success: 对话删除成功。
mcp:
mcp_server:
label: MCP服务器
switch: 已启用
type:
label: 类型
url:
label: 链接
http_header:
label: HTTP Header
text: 请将 {key} 替换为 API 密钥。
form:
optional: (选填)
empty: 不能为空
@@ -2305,6 +2437,7 @@ ui:
user_normal: 此用户已经是正常的。
user_suspended: 此用户已被封禁。
user_deleted: 此用户已被删除
user_added: 用户添加成功。
badge_activated: 此徽章已被激活。
badge_inactivated: 此徽章已被禁用。
users_deleted: 这些用户已被删除。
+233 -90
View File
@@ -23,18 +23,18 @@ backend:
unknown:
other: 未知的錯誤。
request_format_error:
other: 求格式錯誤。
other: 求格式錯誤。
unauthorized_error:
other: 未授權。
database_error:
other: 資料錯誤。
other: 資料伺服器錯誤。
forbidden_error:
other: 訪問被拒絕
other: 已拒絕存取
duplicate_request_error:
other: 提交重複。
other: 重複送出
action:
report:
other:
other:
edit:
other: 編輯
delete:
@@ -44,7 +44,7 @@ backend:
reopen:
other: 再次開啟。
forbidden_error:
other: 訪問被拒絕
other: 已拒絕存取
pin:
other: 置頂
hide:
@@ -57,6 +57,8 @@ backend:
other: 編輯
undelete:
other: 還原
merge:
other: 合併
role:
name:
user:
@@ -69,9 +71,9 @@ backend:
user:
other: 預設沒有特別閱讀權限。
admin:
other: 擁有訪問該網站的全部權限。
other: 擁有存取此網站的全部權限。
moderator:
other: 可以訪問除了管理員設定以外的所有貼文。
other: 可以存取除了管理員設定以外的所有貼文。
privilege:
level_1:
description:
@@ -90,7 +92,7 @@ backend:
rank_answer_add_label:
other: Write answer
rank_comment_add_label:
other: Write comment
other: 寫留言
rank_report_add_label:
other: Flag
rank_comment_vote_up_label:
@@ -132,29 +134,29 @@ backend:
email:
other: 電子郵件
e_mail:
other: Email
other: 電子郵件
password:
other: 密碼
pass:
other: Password
other: 密碼
old_pass:
other: Current password
other: 目前密碼
original_text:
other: This post
other: 此貼文
email_or_password_wrong_error:
other: 電郵和密碼不匹配。
error:
common:
invalid_url:
other: Invalid URL.
other: URL 無效。
status_invalid:
other: Invalid status.
other: 無效狀態。
password:
space_invalid:
other: Password cannot contain spaces.
other: 密碼不能包含空白字元。
admin:
cannot_update_their_password:
other: 不能修改自己的密码。
other: 不能修改自己的密码。
cannot_edit_their_profile:
other: You cannot modify your profile.
cannot_modify_self_status:
@@ -174,25 +176,25 @@ backend:
other: Answer content cannot be empty.
comment:
edit_without_permission:
other: 不允許編輯評論
other: 不允許編輯留言
not_found:
other: 未發現評論
other: 未發現留言
cannot_edit_after_deadline:
other: 該則評論時間過久,無法修改。
other: 這則留言時間過久,無法修改。
content_cannot_empty:
other: Comment content cannot be empty.
email:
duplicate:
other: 電子郵件已被使用。
other: 這個電子郵件地址已被使用。
need_to_be_verified:
other: 需驗證電子郵件
other: 需驗證電子郵件地址。
verify_url_expired:
other: 電子郵件驗證網址已過期,請重電子郵件。
other: 電子郵件地址驗證網址已過期,請重電子郵件。
illegal_email_domain_error:
other: Email is not allowed from that email domain. Please use another one.
lang:
not_found:
other: 未找到语言文件
other: 未找到語言檔
object:
captcha_verification_failed:
other: 驗證碼錯誤。
@@ -207,13 +209,13 @@ backend:
verification_failed:
other: 驗證失敗。
email_or_password_incorrect:
other: 和密碼不匹配。
other: 子郵件地址和密碼不匹配。
old_password_verification_failed:
other: 舊密碼驗證失敗
new_password_same_as_previous_setting:
other: 新密碼與先前的一樣。
already_deleted:
other: This post has been deleted.
other: 這則貼文已被刪除。
meta:
object_not_found:
other: Meta object not found
@@ -232,6 +234,8 @@ backend:
other: 無更新權限。
content_cannot_empty:
other: Content cannot be empty.
content_less_than_minimum:
other: Not enough content entered.
rank:
fail_to_meet_the_condition:
other: Reputation rank fail to meet the condition.
@@ -260,7 +264,9 @@ backend:
is_used_cannot_delete:
other: You cannot delete a tag that is in use.
cannot_set_synonym_as_itself:
other: 你不能將前標籤的同義詞設為本身。
other: 你不能將前標籤的同義詞設為本身。
minimum_count:
other: Not enough tags were entered.
smtp:
config_from_name_cannot_be_email:
other: The from name cannot be a email address.
@@ -287,9 +293,9 @@ backend:
username_invalid:
other: 使用者名稱無效。
username_duplicate:
other: 用戶名已被使用
other: 使用者名稱已被使用
set_avatar:
other: 頭像設置錯誤。
other: 大頭照設定錯誤。
cannot_update_your_role:
other: 您不能修改自己的角色。
not_allowed_registration:
@@ -304,12 +310,20 @@ backend:
other: "Error {{.Field}} format near '{{.Content}}' at line {{.Line}}. {{.ExtraMessage}}"
add_bulk_users_amount_error:
other: "The number of users you add at once should be in the range of 1-{{.MaxAmount}}."
status_suspended_forever:
other: "<strong>This user was suspended forever.</strong> This user doesn't meet a community guideline."
status_suspended_until:
other: "<strong>This user was suspended until {{.SuspendedUntil}}.</strong> This user doesn't meet a community guideline."
status_deleted:
other: "This user was deleted."
status_inactive:
other: "This user is inactive."
config:
read_config_failed:
other: 讀取配置失敗
other: 讀取組態失敗
database:
connection_failed:
other: 資料庫連失敗
other: 資料庫連失敗
create_table_failed:
other: 表建立失敗
install:
@@ -327,7 +341,7 @@ backend:
reason:
spam:
name:
other: spam
other: 垃圾訊息
desc:
other: This post is an advertisement, or vandalism. It is not useful or relevant to the current topic.
rude_or_abusive:
@@ -381,7 +395,7 @@ backend:
other: Improve and correct problems with this post yourself.
needs_close:
name:
other: needs close
other: 需關閉
desc:
other: A closed question can't answer, but still can edit, vote and comment.
needs_delete:
@@ -393,7 +407,7 @@ backend:
close:
duplicate:
name:
other: 垃圾
other: 垃圾
desc:
other: 此問題以前就有人問過,而且已經有了答案。
guideline:
@@ -438,9 +452,9 @@ backend:
accept_answer:
other: 已接受的回答
comment_question:
other: 評論了問題
other: 留言了問題
comment_answer:
other: 評論了答案
other: 留言了答案
reply_to_you:
other: 回覆了你
mention_you:
@@ -452,7 +466,7 @@ backend:
your_answer_was_deleted:
other: 你的答案已被刪除
your_comment_was_deleted:
other: 你的評論已被刪除
other: 你的留言已被刪除
up_voted_question:
other: upvoted question
down_voted_question:
@@ -518,11 +532,11 @@ backend:
downvoted:
other: downvoted
accept:
other: accept
other: 採納
accepted:
other: accepted
other: 已採納
edit:
other: edit
other: 編輯
review:
queued_post:
other: Queued post
@@ -547,7 +561,7 @@ backend:
other: Completed our new user tutorial.
editor:
name:
other: Editor
other: 編輯者
desc:
other: First post edit.
first_flag:
@@ -562,9 +576,9 @@ backend:
other: First up voted a post.
first_link:
name:
other: First Link
other: 首個連結
desc:
other: First dirst added a link to another post.
other: First added a link to another post.
first_reaction:
name:
other: First Reaction
@@ -597,12 +611,12 @@ backend:
other: Read the [community guidelines].
reader:
name:
other: Reader
other: 閱讀者
desc:
other: Read every answers in a topic with more than 10 answers.
welcome:
name:
other: Welcome
other: 歡迎
desc:
other: Received a up vote.
nice_share:
@@ -652,7 +666,7 @@ backend:
other: Invited 5 members.
thank_you:
name:
other: Thank You
other: 感謝
desc:
other: Has 20 up voted posts and gave 10 up votes.
gives_back:
@@ -793,7 +807,7 @@ backend:
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: 如何設定文格式
title: 如何設定文格式
desc: >-
<ul class="mb-0"><li><p class="mb-2">mention a post: <code>#post_id</code></p></li> <li><p class="mb-2">to make links</p><pre class="mb-2"><code>&lt;https://url.com&gt;<br/><br/>[Title](https://url.com)</code></pre></li><li><p class="mb-2">put returns between paragraphs</p></li><li><p class="mb-2"><em>_italic_</em> or **<strong>bold</strong>**</p></li><li><p class="mb-2">indent code by 4 spaces</p></li><li><p class="mb-2">quote by placing <code>&gt;</code> at start of line</p></li><li><p class="mb-2">backtick escapes <code>`like _this_`</code></p></li><li><p class="mb-2">create code fences with backticks <code>`</code></p><pre class="mb-0"><code>```<br/>code here<br/>```</code></pre></li></ul>
pagination:
@@ -807,11 +821,11 @@ ui:
tag_wiki: 標籤 wiki
create_tag: Create Tag
edit_tag: 編輯標籤
ask_a_question: 提問題
ask_a_question: Create Question
edit_question: 編輯問題
edit_answer: 編輯回答
search: 搜尋
posts_containing: 包含的帖子
posts_containing: 包含的貼文
settings: 設定
notifications: 通知
login: 登入
@@ -819,18 +833,29 @@ ui:
account_recovery: 帳號恢復
account_activation: 帳號啟用
confirm_email: 確認電子郵件
account_suspended: 帳號已封禁
account_suspended: 帳號已被停權
admin: 後台管理
change_email: 修改電子郵件
install: Answer 安裝
upgrade: Answer 升級
maintenance: 網站維護
users: 用戶
users: 使用者
oauth_callback: Processing
http_404: HTTP 錯誤 404
http_50X: HTTP 錯誤 500
http_403: HTTP 錯誤 403
logout: Log Out
logout: 登出
posts: Posts
ai_assistant: AI Assistant
ai_assistant:
description: Got a question? Ask it and get answers, perspectives, and recommendations.
recent_conversations: Recent Conversations
show_more: Show more
new: New chat
ai_generate: AI-generated from posts and may not be accurate.
copy: Copy
ask_a_follow_up: Ask a follow-up
ask_placeholder: Ask a question
notifications:
title: 通知
inbox: 收件夾
@@ -840,7 +865,7 @@ ui:
show_more: 顯示更多
someone: Someone
inbox_type:
all: All
all: 所有
posts: Posts
invites: Invites
votes: Votes
@@ -907,7 +932,7 @@ ui:
form_image:
fields:
file:
label: Image file
label: 圖檔
btn: 選擇圖片
msg:
empty: 文件不能為空。
@@ -1027,6 +1052,15 @@ ui:
<p>We do not allow <strong>deleting tag with synonyms</strong>.</p> <p>Please remove the synonyms from this tag first.</p>
tip: 你確定要刪除嗎?
close: 關閉
merge:
title: Merge tag
source_tag_title: Source tag
source_tag_description: The source tag and its associated data will be remapped to the target tag.
target_tag_title: Target tag
target_tag_description: A synonym between these two tags will be created after merging.
no_results: No tags matched
btn_submit: 送出
btn_close: 關閉
edit_tag:
title: 編輯標籤
default_reason: 編輯標籤
@@ -1045,6 +1079,9 @@ ui:
day:
hours: hours
days: days
month: month
months: months
year: year
reaction:
heart: heart
smile: smile
@@ -1100,10 +1137,10 @@ ui:
more: 更多
wiki: Wiki
ask:
title: 發問
title: Create Question
edit_title: 編輯問題
default_reason: 編輯問題
default_first_reason: Add question
default_first_reason: Create question
similar_questions: 相似的問題
form:
fields:
@@ -1111,7 +1148,7 @@ ui:
label: 編輯歷史
title:
label: 標題
placeholder: 具體一點,想像你是在向另一個人提出問題
placeholder: What's your topic? Be specific.
msg:
empty: 標題不能為空
range: 標題最多 150 個字元
@@ -1119,6 +1156,9 @@ ui:
label: 正文
msg:
empty: 正文不能爲空。
hint:
optional_body: Describe what the question is about.
minimum_characters: "Describe what the question is about, at least {{min_content_length}} characters are required."
tags:
label: 標籤
msg:
@@ -1139,7 +1179,9 @@ ui:
add_btn: 建立標籤
create_btn: 建立新標籤
search_tag: 搜尋標籤
hint: "请描述您的問題,至少需要一個標籤。"
hint: Describe what your content is about, at least one tag is required.
hint_zero_tags: Describe what your content is about.
hint_more_than_one_tag: "Describe what your content is about, at least {{min_tags_number}} tags are required."
no_result: 沒有匹配的標籤
tag_required_text: 必填標籤 (至少一個)
header:
@@ -1158,8 +1200,7 @@ ui:
search:
placeholder: 搜尋
footer:
build_on: >-
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
build_on: Powered by <1> Apache Answer </1>
upload_img:
name: 更改
loading: 讀取中...
@@ -1192,7 +1233,7 @@ ui:
msg:
empty: 名稱不能為空
range: Name must be between 2 to 30 characters in length.
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
email:
label: 郵箱
msg:
@@ -1264,13 +1305,13 @@ ui:
display_name:
label: Display name
msg: 顯示名稱不能為空。
msg_range: 顯示名稱最長 30 個字元。
msg_range: Display name must be 2-30 characters in length.
username:
label: 用戶名
caption: 用戶之間可以通過 "@用戶名" 進行交互。
msg: 用戶名不能為空
msg_range: 使用者名稱最長 30 個字元。
character: '必須由 "a-z", "0-9", " - . _" 組成'
msg_range: Username must be 2-30 characters in length.
character: 'Must use the character set "a-z", "0-9", "- . _"'
avatar:
label: Profile image
gravatar: 頭像
@@ -1307,12 +1348,12 @@ ui:
change_email_info: >-
我們已經寄出一封郵件至此電子郵件地址,請遵照說明進行確認。
email:
label: Email
label: 電子郵件地址
new_email:
label: New email
msg: New email cannot be empty.
label: 新電子郵件地址
msg: 新電子郵件地址不能為空白。
pass:
label: Current password
label: 目前密碼
msg: Password cannot be empty.
password_title: 密碼
current_pass:
@@ -1324,16 +1365,16 @@ ui:
new_pass:
label: New password
pass_confirm:
label: Confirm new password
label: 確認新密碼
interface:
heading: 介面
lang:
label: Interface language
label: 介面語言
text: 設定使用者介面語言,在重新整裡頁面後生效。
my_logins:
title: My logins
label: Log in or sign up on this site using these accounts.
modal_title: Remove login
title: 我的登入
label: 使用這些帳號登入或註冊此網站。
modal_title: 移除登入
modal_content: Are you sure you want to remove this login from your account?
modal_confirm_btn: Remove
remove_success: Removed successfully
@@ -1345,12 +1386,12 @@ ui:
review: 您的修訂將在審核通過後顯示。
sent_success: Sent successfully
related_question:
title: 相關問題
title: Related
answers: 個回答
linked_question:
title: Linked Questions
description: Questions linked to
no_linked_question: No questions linked from this question.
title: Linked
description: Posts linked to
no_linked_question: No contents linked from this content.
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
@@ -1359,9 +1400,11 @@ ui:
search: Search people
question_detail:
action: Action
created: Created
Asked: 提問於
asked: 提問於
update: 修改於
Edited: Edited
edit: 最後編輯於
commented: commented
Views: 閱讀次數
@@ -1430,18 +1473,18 @@ ui:
btns:
confirm: 確認
cancel: 取消
edit: Edit
edit: 編輯
save: 儲存
delete: 刪除
undelete: Undelete
list: List
undelete: 還原
list: 清單
unlist: Unlist
unlisted: Unlisted
login: 登入
signup: 註冊
logout: 登出
verify: 驗證
add_question: 發問
create: 建立
approve: 核准
reject: 拒絕
skip: 略過
@@ -1482,6 +1525,7 @@ ui:
display_below: Display below
always_display: Always display
or: or
back_sites: Back to sites
search:
title: 搜尋結果
keywords: 關鍵詞
@@ -1489,6 +1533,7 @@ ui:
follow: 追蹤
following: 已關注
counts: "{{count}} 個結果"
counts_loading: "... Results"
more: 更多
sort_btns:
relevance: 相關性
@@ -1540,6 +1585,7 @@ ui:
all_questions: 全部問題
x_questions: "{{ count }} 個問題"
x_answers: "{{ count }} 個回答"
x_posts: "{{ count }} Posts"
questions: 個問題
answers: 回答
newest: 最新的
@@ -1670,7 +1716,7 @@ ui:
admin_name:
label: 暱稱
msg: 暱稱不能為空。
character: 'Must use the character set "a-z", "A-Z", "0-9", " - . _"'
character: 'Must use the character set "a-z", "0-9", " - . _"'
msg_max_length: Name must be between 2 to 30 characters in length.
admin_password:
label: 密碼
@@ -1731,16 +1777,29 @@ ui:
branding: 品牌
legal: 法律條款
write: 撰寫
terms: Terms
tos: 服務條款
privacy: 隱私政策
seo: SEO
customize: 自定義
themes: 主題
css_html: CSS/HTML
login: 登入
privileges: Privileges
plugins: Plugins
installed_plugins: Installed Plugins
apperance: Appearance
community: Community
advanced: Advanced
tags: Tags
rules: Rules
policies: Policies
security: Security
files: Files
apikeys: API Keys
intelligence: Intelligence
ai_assistant: AI Assistant
ai_settings: AI Settings
mcp: MCP
website_welcome: Welcome to {{site_name}}
user_center:
login: Login
@@ -1840,10 +1899,10 @@ ui:
fields:
display_name:
label: Display name
msg_range: Display name up to 30 characters.
msg_range: Display name must be 2-30 characters in length.
username:
label: Username
msg_range: Username up to 30 characters.
msg_range: Username must be 2-30 characters in length.
email:
label: Email
msg_invalid: Invalid Email Address.
@@ -1875,9 +1934,10 @@ ui:
name: 名稱
email: 郵箱
reputation: 聲望
created_at: 創建時間
delete_at: 刪除時間
suspend_at: 停權時間
created_at: Created time
delete_at: Deleted time
suspend_at: Suspended time
suspend_until: Suspend until
status: 狀態
role: 角色
action: 操作
@@ -1912,6 +1972,8 @@ ui:
suspend_user:
title: Suspend this user
content: A suspended user can't log in.
label: How long will the user be suspended for?
forever: Forever
questions:
page_title: 問題
unlisted: Unlisted
@@ -1972,6 +2034,12 @@ ui:
label: 時區
msg: 時區不能為空。
text: 選擇一個與您相同時區的城市。
avatar:
label: Default avatar
text: For users without a custom avatar of their own.
gravatar_base_url:
label: Gravatar base URL
text: URL of the Gravatar provider's API base. Ignored when empty.
smtp:
page_title: SMTP
from_email:
@@ -2043,11 +2111,17 @@ ui:
always_display: Always display external content
ask_before_display: Ask before displaying external content
write:
page_title: 編輯
page_title: Files
min_content:
label: Minimum question body length
text: Minimum allowed question body length in characters.
restrict_answer:
title: Answer write
label: Each user can only write one answer for each question
text: "Turn off to allow users to write multiple answers to the same question, which may cause answers to be unfocused."
min_tags:
label: "Minimum tags per question"
text: "Minimum number of tags required in a question."
recommend_tags:
label: Recommend tags
text: "Recommend tags will show in the dropdown list by default."
@@ -2091,10 +2165,14 @@ ui:
color_scheme:
label: Color scheme
navbar_style:
label: 導航欄樣式
label: Navbar background style
primary_color:
label: 主色調
text: 修改您主題使用的顏色
layout:
label: Layout
full_width: Full-width
fixed_width: Fixed-width
css_and_html:
page_title: CSS 與 HTML
custom_css:
@@ -2199,6 +2277,70 @@ ui:
show_logs: Show logs
status: Status
title: Badges
apikeys:
title: API Keys
add_api_key: Add API Key
desc: Description
scope: Scope
key: Key
created: Created
last_used: Last used
add_or_edit_modal:
add_title: Add API Key
edit_title: Edit API Key
description: Description
description_required: Description is required.
scope: Scope
global: Global
read-only: Read-only
created_modal:
title: API key created
api_key: API key
description: This key will not be displayed again. Make sure you take a copy before continuing.
delete_modal:
title: Delete API Key
content: Any applications or scripts using this key will no longer be able to access the API. This is permanent!
ai_settings:
enabled:
label: AI enabled
check: Enable AI features
text: The AI model must be configured correctly before it can be used.
provider:
label: Provider
api_host:
label: API host
msg: API host is required
api_key:
label: API key
check: Check
check_success: "Connection successful."
msg: API key is required
model:
label: Model
msg: Model is required
add_success: AI settings updated successfully.
conversations:
topic: Topic
helpful: Helpful
unhelpful: Unhelpful
created: Created
action: Action
empty: No conversations found.
delete_modal:
title: Delete conversation
content: Are you sure you want to delete this conversation? This is permanent!
delete_success: Conversation deleted successfully.
mcp:
mcp_server:
label: MCP server
switch: Enabled
type:
label: Type
url:
label: URL
http_header:
label: HTTP header
text: Please replace {key} with the API Key.
form:
optional: (選填)
empty: 不能為空
@@ -2295,6 +2437,7 @@ ui:
user_normal: This user is already normal.
user_suspended: This user has been suspended.
user_deleted: This user has been deleted.
user_added: User has been added successfully.
badge_activated: This badge has been activated.
badge_inactivated: This badge has been inactivated.
users_deleted: These users have been deleted.
+5 -3
View File
@@ -25,9 +25,9 @@ import (
"path/filepath"
"github.com/apache/answer/internal/base/data"
"github.com/apache/answer/internal/base/path"
"github.com/apache/answer/internal/base/server"
"github.com/apache/answer/internal/base/translator"
"github.com/apache/answer/internal/cli"
"github.com/apache/answer/internal/router"
"github.com/apache/answer/internal/service/service_config"
"github.com/apache/answer/pkg/writer"
@@ -98,7 +98,7 @@ func (c *AllConfig) SetEnvironmentOverrides() {
// ReadConfig read config
func ReadConfig(configFilePath string) (c *AllConfig, err error) {
if len(configFilePath) == 0 {
configFilePath = filepath.Join(cli.ConfigFileDir, cli.DefaultConfigFileName)
configFilePath = filepath.Join(path.ConfigFileDir, path.DefaultConfigFileName)
}
c = &AllConfig{}
config, err := viper.NewWithPath(configFilePath)
@@ -117,7 +117,9 @@ func ReadConfig(configFilePath string) (c *AllConfig, err error) {
func RewriteConfig(configFilePath string, allConfig *AllConfig) error {
buf := bytes.Buffer{}
enc := yaml.NewEncoder(&buf)
defer enc.Close()
defer func() {
_ = enc.Close()
}()
enc.SetIndent(2)
if err := enc.Encode(allConfig); err != nil {
return err
+51
View File
@@ -0,0 +1,51 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package constant
const (
AIConfigProvider = "ai_config.provider"
)
const (
DefaultAIPromptConfigZhCN = `你是一个智能助手可以帮助用户查询系统中的信息用户问题%s
你可以使用以下工具来查询系统信息
- get_questions: 搜索系统中已存在的问题使用这个工具可以获取问题列表后注意需要使用 get_answers_by_question_id 获取问题的答案
- get_answers_by_question_id: 根据问题ID获取该问题的所有答案
- get_comments: 搜索评论信息
- get_tags: 搜索标签信息
- get_tag_detail: 获取特定标签的详细信息
- get_user: 搜索用户信息
- semantic_search: 通过语义相似度搜索问题和答案当用户的问题与现有内容概念相关但可能不匹配确切关键词时使用此工具 get_questions 关键词搜索返回较差结果时请使用 semantic_search
请根据用户的问题智能地使用这些工具来提供准确的答案如果需要查询系统信息请先使用相应的工具获取数据`
DefaultAIPromptConfigEnUS = `You are an intelligent assistant that can help users query information in the system. User question: %s
You can use the following tools to query system information:
- get_questions: Search for existing questions in the system. After using this tool to get the question list, you need to use get_answers_by_question_id to get the answers to the questions
- get_answers_by_question_id: Get all answers for a question based on question ID
- get_comments: Search for comment information
- get_tags: Search for tag information
- get_tag_detail: Get detailed information about a specific tag
- get_user: Search for user information
- semantic_search: Search questions and answers by semantic meaning. Use this when the user's question relates conceptually to existing content but may not match exact keywords. When get_questions keyword search returns poor results, use semantic_search instead.
Please intelligently use these tools based on the user's question to provide accurate answers. If you need to query system information, please use the appropriate tools to get the data first.`
)
+3
View File
@@ -42,6 +42,9 @@ const (
ConfigCacheTime = 1 * time.Hour
ConnectorUserExternalInfoCacheKey = "answer:connector:"
ConnectorUserExternalInfoCacheTime = 10 * time.Minute
ConnectorOAuthStateCacheKey = "answer:connector:oauth-state:"
ConnectorOAuthStateCacheTime = 10 * time.Minute
ConnectorOAuthBindStateCacheTime = 5 * time.Minute
SiteMapQuestionCacheKeyPrefix = "answer:sitemap:question:%d"
SiteMapQuestionCacheTime = time.Hour
SitemapMaxSize = 50000
+7
View File
@@ -23,3 +23,10 @@ const (
AcceptLanguageFlag = "Accept-Language"
ShortIDFlag = "Short-ID-Enabled"
)
type ContextKey string
const (
AcceptLanguageContextKey ContextKey = ContextKey(AcceptLanguageFlag)
ShortIDContextKey ContextKey = ContextKey(ShortIDFlag)
)
+3
View File
@@ -43,6 +43,9 @@ const (
ColorSchemeLight = "light"
ColorSchemeDark = "dark"
ColorSchemeSystem = "system"
ThemeLayoutFullWidth = "Full-width"
ThemeLayoutFixedWidth = "Fixed-width"
)
const (
+18 -3
View File
@@ -20,15 +20,30 @@
package constant
const (
// SiteTypeLegal\SiteTypeLegal\SiteTypeWrite The following items will no longer be used.
SiteTypeLegal = "legal"
SiteTypeInterface = "interface"
SiteTypeWrite = "write"
SiteTypeGeneral = "general"
SiteTypeInterface = "interface"
SiteTypeBranding = "branding"
SiteTypeWrite = "write"
SiteTypeLegal = "legal"
SiteTypeSeo = "seo"
SiteTypeLogin = "login"
SiteTypeCustomCssHTML = "css-html"
SiteTypeTheme = "theme"
SiteTypePrivileges = "privileges"
SiteTypeUsers = "users"
SiteTypeAdvanced = "advanced"
SiteTypeQuestions = "questions"
SiteTypeTags = "tags"
SiteTypeUsersSettings = "users_settings"
SiteTypeInterfaceSettings = "interface_settings"
SiteTypePolicies = "policies"
SiteTypeSecurity = "security"
SiteTypeAI = "ai"
SiteTypeFeatureToggle = "feature-toggle"
SiteTypeMCP = "mcp"
)
+17
View File
@@ -27,6 +27,7 @@ import (
"github.com/apache/answer/internal/service/file_record"
"github.com/apache/answer/internal/service/service_config"
"github.com/apache/answer/internal/service/siteinfo_common"
"github.com/apache/answer/internal/service/user_admin"
"github.com/robfig/cron/v3"
"github.com/segmentfault/pacman/log"
)
@@ -36,6 +37,7 @@ type ScheduledTaskManager struct {
siteInfoService siteinfo_common.SiteInfoCommonService
questionService *content.QuestionService
fileRecordService *file_record.FileRecordService
userAdminService *user_admin.UserAdminService
serviceConfig *service_config.ServiceConfig
}
@@ -44,12 +46,14 @@ func NewScheduledTaskManager(
siteInfoService siteinfo_common.SiteInfoCommonService,
questionService *content.QuestionService,
fileRecordService *file_record.FileRecordService,
userAdminService *user_admin.UserAdminService,
serviceConfig *service_config.ServiceConfig,
) *ScheduledTaskManager {
manager := &ScheduledTaskManager{
siteInfoService: siteInfoService,
questionService: questionService,
fileRecordService: fileRecordService,
userAdminService: userAdminService,
serviceConfig: serviceConfig,
}
return manager
@@ -78,6 +82,19 @@ func (s *ScheduledTaskManager) Run() {
log.Error(err)
}
// Check for expired user suspensions every 10 minutes
_, err = c.AddFunc("*/10 * * * *", func() {
ctx := context.Background()
log.Infof("checking expired user suspensions")
err := s.userAdminService.CheckAndUnsuspendExpiredUsers(ctx)
if err != nil {
log.Errorf("failed to check expired user suspensions: %v", err)
}
})
if err != nil {
log.Error(err)
}
if s.serviceConfig.CleanUpUploads {
log.Infof("clean up uploads cron enabled")
+1 -1
View File
@@ -47,7 +47,7 @@ type Data struct {
func NewData(db *xorm.Engine, cache cache.Cache) (*Data, func(), error) {
cleanup := func() {
log.Info("closing the data resources")
db.Close()
_ = db.Close()
}
return &Data{DB: db, Cache: cache}, cleanup, nil
}
+8 -9
View File
@@ -21,18 +21,18 @@ package handler
import (
"errors"
"github.com/apache/answer/internal/base/constant"
"net/http"
"github.com/apache/answer/internal/base/reason"
"github.com/apache/answer/internal/base/validator"
"github.com/gin-gonic/gin"
myErrors "github.com/segmentfault/pacman/errors"
"github.com/segmentfault/pacman/log"
"net/http"
)
// HandleResponse Handle response body
func HandleResponse(ctx *gin.Context, err error, data interface{}) {
lang := GetLang(ctx)
func HandleResponse(ctx *gin.Context, err error, data any) {
lang := GetLangByCtx(ctx)
// no error
if err == nil {
ctx.JSON(http.StatusOK, NewRespBodyData(http.StatusOK, reason.Success, data).TrMsg(lang))
@@ -61,9 +61,8 @@ func HandleResponse(ctx *gin.Context, err error, data interface{}) {
}
// BindAndCheck bind request and check
func BindAndCheck(ctx *gin.Context, data interface{}) bool {
lang := GetLang(ctx)
ctx.Set(constant.AcceptLanguageFlag, lang)
func BindAndCheck(ctx *gin.Context, data any) bool {
lang := GetLangByCtx(ctx)
if err := ctx.ShouldBind(data); err != nil {
log.Errorf("http_handle BindAndCheck fail, %s", err.Error())
HandleResponse(ctx, myErrors.New(http.StatusBadRequest, reason.RequestFormatError), nil)
@@ -79,8 +78,8 @@ func BindAndCheck(ctx *gin.Context, data interface{}) bool {
}
// BindAndCheckReturnErr bind request and check
func BindAndCheckReturnErr(ctx *gin.Context, data interface{}) (errFields []*validator.FormErrorField) {
lang := GetLang(ctx)
func BindAndCheckReturnErr(ctx *gin.Context, data any) (errFields []*validator.FormErrorField) {
lang := GetLangByCtx(ctx)
if err := ctx.ShouldBind(data); err != nil {
log.Errorf("http_handle BindAndCheck fail, %s", err.Error())
HandleResponse(ctx, myErrors.New(http.StatusBadRequest, reason.RequestFormatError), nil)
+11 -10
View File
@@ -27,18 +27,19 @@ import (
"github.com/segmentfault/pacman/i18n"
)
// GetLang get language from header
func GetLang(ctx *gin.Context) i18n.Language {
acceptLanguage := ctx.GetHeader(constant.AcceptLanguageFlag)
if len(acceptLanguage) == 0 {
return i18n.DefaultLanguage
}
return i18n.Language(acceptLanguage)
}
// GetLangByCtx get language from header
func GetLangByCtx(ctx context.Context) i18n.Language {
acceptLanguage, ok := ctx.Value(constant.AcceptLanguageFlag).(i18n.Language)
if ginCtx, ok := ctx.(*gin.Context); ok {
acceptLanguage, ok := ginCtx.Get(constant.AcceptLanguageFlag)
if ok {
if acceptLanguage, ok := acceptLanguage.(i18n.Language); ok {
return acceptLanguage
}
return i18n.DefaultLanguage
}
}
acceptLanguage, ok := ctx.Value(constant.AcceptLanguageContextKey).(i18n.Language)
if ok {
return acceptLanguage
}
+2 -2
View File
@@ -34,7 +34,7 @@ type RespBody struct {
// response message
Message string `json:"msg"`
// response data
Data interface{} `json:"data"`
Data any `json:"data"`
}
// TrMsg translate the reason cause as a message
@@ -63,7 +63,7 @@ func NewRespBodyFromError(e *errors.Error) *RespBody {
}
// NewRespBodyData new response body with data
func NewRespBodyData(code int, reason string, data interface{}) *RespBody {
func NewRespBodyData(code int, reason string, data any) *RespBody {
return &RespBody{
Code: code,
Reason: reason,
+14 -2
View File
@@ -23,11 +23,23 @@ import (
"context"
"github.com/apache/answer/internal/base/constant"
"github.com/gin-gonic/gin"
)
// GetEnableShortID get language from header
// GetEnableShortID get short id flag from context
func GetEnableShortID(ctx context.Context) bool {
flag, ok := ctx.Value(constant.ShortIDFlag).(bool)
// Check gin context first (set by ShortIDMiddleware via ctx.Set)
if ginCtx, ok := ctx.(*gin.Context); ok {
flag, ok := ginCtx.Get(constant.ShortIDFlag)
if ok {
if flag, ok := flag.(bool); ok {
return flag
}
return false
}
}
// Fallback for non-gin contexts (e.g., SitemapCron uses context.WithValue)
flag, ok := ctx.Value(constant.ShortIDContextKey).(bool)
if ok {
return flag
}
+10 -4
View File
@@ -20,20 +20,26 @@
package middleware
import (
"strings"
"github.com/apache/answer/internal/base/constant"
"github.com/apache/answer/internal/base/handler"
"github.com/apache/answer/internal/base/translator"
"github.com/gin-gonic/gin"
"github.com/segmentfault/pacman/i18n"
"golang.org/x/text/language"
"strings"
)
const maxAcceptLanguageLength = 256
// ExtractAndSetAcceptLanguage extract accept language from header and set to context
func ExtractAndSetAcceptLanguage(ctx *gin.Context) {
// The language of our front-end configuration, like en_US
lang := handler.GetLang(ctx)
tag, _, err := language.ParseAcceptLanguage(string(lang))
acceptLanguage := ctx.GetHeader(constant.AcceptLanguageFlag)
if len(acceptLanguage) > maxAcceptLanguageLength {
ctx.Set(constant.AcceptLanguageFlag, i18n.LanguageEnglish)
return
}
tag, _, err := language.ParseAcceptLanguage(acceptLanguage)
if err != nil || len(tag) == 0 {
ctx.Set(constant.AcceptLanguageFlag, i18n.LanguageEnglish)
return
+51
View File
@@ -0,0 +1,51 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package middleware
import (
"github.com/apache/answer/internal/base/handler"
"github.com/apache/answer/internal/base/reason"
"github.com/gin-gonic/gin"
"github.com/segmentfault/pacman/errors"
)
// AuthAPIKey middleware to authenticate API key
func (am *AuthUserMiddleware) AuthAPIKey() gin.HandlerFunc {
return func(ctx *gin.Context) {
token := ExtractToken(ctx)
if len(token) == 0 {
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
ctx.Abort()
return
}
pass, err := am.authService.AuthAPIKey(ctx, ctx.Request.Method == "GET", token)
if err != nil {
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
ctx.Abort()
return
}
if !pass {
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
ctx.Abort()
return
}
ctx.Next()
}
}
+45 -2
View File
@@ -80,7 +80,7 @@ func (am *AuthUserMiddleware) Auth() gin.HandlerFunc {
func (am *AuthUserMiddleware) EjectUserBySiteInfo() gin.HandlerFunc {
return func(ctx *gin.Context) {
mustLogin := false
siteInfo, _ := am.siteInfoCommonService.GetSiteLogin(ctx)
siteInfo, _ := am.siteInfoCommonService.GetSiteSecurity(ctx)
if siteInfo != nil {
mustLogin = siteInfo.LoginRequired
}
@@ -116,6 +116,10 @@ func (am *AuthUserMiddleware) MustAuthWithoutAccountAvailable() gin.HandlerFunc
ctx.Abort()
return
}
// Check API key scope
if am.AuthAPIKeyScope(ctx, token) {
return
}
userInfo, err := am.authService.GetUserCacheInfo(ctx, token)
if err != nil || userInfo == nil {
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
@@ -141,6 +145,10 @@ func (am *AuthUserMiddleware) MustAuthAndAccountAvailable() gin.HandlerFunc {
ctx.Abort()
return
}
// Check API key scope
if am.AuthAPIKeyScope(ctx, token) {
return
}
userInfo, err := am.authService.GetUserCacheInfo(ctx, token)
if err != nil || userInfo == nil {
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
@@ -184,7 +192,22 @@ func (am *AuthUserMiddleware) AdminAuth() gin.HandlerFunc {
return
}
if userInfo != nil {
if userInfo.EmailStatus == entity.EmailStatusToBeVerified {
_ = am.authService.RemoveAdminUserCacheInfo(ctx, token)
handler.HandleResponse(ctx, errors.Forbidden(reason.EmailNeedToBeVerified),
&schema.ForbiddenResp{Type: schema.ForbiddenReasonTypeInactive})
ctx.Abort()
return
}
if userInfo.UserStatus == entity.UserStatusSuspended {
_ = am.authService.RemoveAdminUserCacheInfo(ctx, token)
handler.HandleResponse(ctx, errors.Forbidden(reason.UserSuspended),
&schema.ForbiddenResp{Type: schema.ForbiddenReasonTypeUserSuspended})
ctx.Abort()
return
}
if userInfo.UserStatus == entity.UserStatusDeleted {
_ = am.authService.RemoveAdminUserCacheInfo(ctx, token)
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
ctx.Abort()
return
@@ -197,7 +220,7 @@ func (am *AuthUserMiddleware) AdminAuth() gin.HandlerFunc {
func (am *AuthUserMiddleware) CheckPrivateMode() gin.HandlerFunc {
return func(ctx *gin.Context) {
resp, err := am.siteInfoCommonService.GetSiteLogin(ctx)
resp, err := am.siteInfoCommonService.GetSiteSecurity(ctx)
if err != nil {
ShowIndexPage(ctx)
ctx.Abort()
@@ -211,6 +234,26 @@ func (am *AuthUserMiddleware) CheckPrivateMode() gin.HandlerFunc {
ctx.Next()
}
}
func (am *AuthUserMiddleware) AuthAPIKeyScope(ctx *gin.Context, accessToken string) (apiHaveNoScope bool) {
if !strings.HasPrefix(accessToken, "sk_") {
return false
}
var err error
pass, err := am.authService.AuthAPIKey(ctx, ctx.Request.Method == "GET", accessToken)
if err != nil {
handler.HandleResponse(ctx, errors.Forbidden(reason.ForbiddenError), nil)
ctx.Abort()
return true
}
if !pass {
handler.HandleResponse(ctx, errors.Forbidden(reason.ForbiddenError), nil)
ctx.Abort()
return true
}
return false
}
func ShowIndexPage(ctx *gin.Context) {
ctx.Header("content-type", "text/html;charset=utf-8")
ctx.Header("X-Frame-Options", "DENY")
+3 -2
View File
@@ -21,6 +21,7 @@ package middleware
import (
"fmt"
"net/http"
"net/url"
"os"
"path"
@@ -62,7 +63,8 @@ func (am *AvatarMiddleware) AvatarThumb() gin.HandlerFunc {
filePath, err = am.uploaderService.AvatarThumbFile(ctx, filename, size)
if err != nil {
log.Error(err)
ctx.Abort()
ctx.AbortWithStatus(http.StatusNotFound)
return
}
}
avatarFile, err := os.ReadFile(filePath)
@@ -78,7 +80,6 @@ func (am *AvatarMiddleware) AvatarThumb() gin.HandlerFunc {
}
ctx.Abort()
return
} else {
urlInfo, err := url.Parse(uri)
if err != nil {
+4
View File
@@ -25,8 +25,12 @@ import (
"github.com/gin-gonic/gin"
)
const contentSecurityPolicy = "default-src 'self'; base-uri 'self'; frame-ancestors 'none'; form-action 'self'; object-src 'none'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: http: https:; font-src 'self' data:; connect-src 'self'"
func HeadersByRequestURI() gin.HandlerFunc {
return func(c *gin.Context) {
c.Header("Content-Security-Policy", contentSecurityPolicy)
c.Header("X-Content-Type-Options", "nosniff")
if strings.HasPrefix(c.Request.RequestURI, "/static/") {
c.Header("cache-control", "public, max-age=31536000")
}
+45
View File
@@ -0,0 +1,45 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package middleware
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/gin-gonic/gin"
)
func TestHeadersByRequestURI(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
router.Use(HeadersByRequestURI())
router.GET("/", func(ctx *gin.Context) { ctx.Status(http.StatusNoContent) })
response := httptest.NewRecorder()
router.ServeHTTP(response, httptest.NewRequest(http.MethodGet, "/", nil))
if got := response.Header().Get("X-Content-Type-Options"); got != "nosniff" {
t.Fatalf("X-Content-Type-Options = %q, want nosniff", got)
}
if got := response.Header().Get("Content-Security-Policy"); got != contentSecurityPolicy {
t.Fatalf("Content-Security-Policy = %q, want %q", got, contentSecurityPolicy)
}
}
+47
View File
@@ -0,0 +1,47 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package middleware
import (
"github.com/apache/answer/internal/base/handler"
"github.com/apache/answer/internal/base/reason"
"github.com/gin-gonic/gin"
"github.com/segmentfault/pacman/errors"
"github.com/segmentfault/pacman/log"
)
// AuthMcpEnable check mcp is enabled
func (am *AuthUserMiddleware) AuthMcpEnable() gin.HandlerFunc {
return func(ctx *gin.Context) {
mcpConfig, err := am.siteInfoCommonService.GetSiteMCP(ctx)
if err != nil {
handler.HandleResponse(ctx, errors.InternalServer(reason.UnknownError), nil)
ctx.Abort()
return
}
if mcpConfig != nil && mcpConfig.Enabled {
ctx.Next()
return
}
handler.HandleResponse(ctx, errors.Forbidden(reason.ForbiddenError), nil)
ctx.Abort()
log.Error("abort mcp auth middleware, get mcp config error: ", err)
}
}
+1
View File
@@ -22,6 +22,7 @@ package middleware
import (
"encoding/json"
"fmt"
"github.com/apache/answer/internal/base/handler"
"github.com/apache/answer/internal/base/reason"
"github.com/apache/answer/internal/repo/limit"

Some files were not shown because too many files have changed in this diff Show More