Compare commits

...

40 Commits

Author SHA1 Message Date
LinkinStars 968f23db7f Release/1.2.5 (#761)
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
Signed-off-by: Adam Vollrath <adam.d.vollrath@gmail.com>
Co-authored-by: shuai <lishuailing@sifou.com>
Co-authored-by: kelvinkuo <kelvinkuo224@gmail.com>
Co-authored-by: hgaol <dhangao@hotmail.com>
Co-authored-by: sy-records <52o@qq52o.cn>
Co-authored-by: Adam Vollrath <adam.d.vollrath@gmail.com>
Co-authored-by: kumfo <kumfo@sifou.com>
Co-authored-by: Yang Wong <yang wang>
Co-authored-by: hbsciw <hbsciw@gmail.com>
2024-01-29 19:14:13 +08:00
Fen abecc1c9b6 New Crowdin updates (#19) (#760)
* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (German)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (German)

* New translations en_us.yaml (French)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Czech)

* New translations en_us.yaml (Danish)

* New translations en_us.yaml (Italian)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Korean)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Portuguese)

* New translations en_us.yaml (Slovak)

* New translations en_us.yaml (Turkish)

* New translations en_us.yaml (Ukrainian)

* New translations en_us.yaml (Chinese Traditional)

* New translations en_us.yaml (Vietnamese)

* New translations en_us.yaml (Indonesian)

* New translations en_us.yaml (Persian)

* New translations en_us.yaml (Welsh)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (German)

* New translations en_us.yaml (French)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Czech)

* New translations en_us.yaml (Danish)

* New translations en_us.yaml (Italian)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Korean)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Portuguese)

* New translations en_us.yaml (Slovak)

* New translations en_us.yaml (Turkish)

* New translations en_us.yaml (Ukrainian)

* New translations en_us.yaml (Chinese Traditional)

* New translations en_us.yaml (Vietnamese)

* New translations en_us.yaml (Indonesian)

* New translations en_us.yaml (Persian)

* New translations en_us.yaml (Welsh)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (Swedish)

* New translations en_us.yaml (Swedish)

* New translations en_us.yaml (French)

* New translations en_us.yaml (French)

* New translations en_us.yaml (Romanian)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Swedish)

* New translations en_us.yaml (Romanian)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Swedish)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (Swedish)

* New translations en_us.yaml (Romanian)

* New translations en_us.yaml (French)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Czech)

* New translations en_us.yaml (Danish)

* New translations en_us.yaml (German)

* New translations en_us.yaml (Italian)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Korean)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Portuguese)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (Slovak)

* New translations en_us.yaml (Swedish)

* New translations en_us.yaml (Turkish)

* New translations en_us.yaml (Ukrainian)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Chinese Traditional)

* New translations en_us.yaml (Vietnamese)

* New translations en_us.yaml (Indonesian)

* New translations en_us.yaml (Persian)

* New translations en_us.yaml (Welsh)
2024-01-29 17:53:07 +08:00
LinkinStars 937de43978 Release/1.2.5 (#759)
Signed-off-by: Adam Vollrath <adam.d.vollrath@gmail.com>
Co-authored-by: shuai <lishuailing@sifou.com>
Co-authored-by: kelvinkuo <kelvinkuo224@gmail.com>
Co-authored-by: hgaol <dhangao@hotmail.com>
Co-authored-by: sy-records <52o@qq52o.cn>
Co-authored-by: Adam Vollrath <adam.d.vollrath@gmail.com>
Co-authored-by: kumfo <kumfo@sifou.com>
Co-authored-by: Yang Wong <yang wang>
Co-authored-by: hbsciw <hbsciw@gmail.com>
2024-01-29 17:19:41 +08:00
Akhil 52e0a4c59b removed unused config 2024-01-26 11:37:46 +08:00
Haoran Yu 720936b74a Update NOTICE 2024-01-23 12:34:05 +08:00
zhoushilin 261b143679 fix: cache reload once 2024-01-19 14:25:00 +08:00
zhoushilin 6d93b7d2f3 fix: plugin cache reload 2024-01-19 14:25:00 +08:00
Fen d8c55779f8 update: github issue template (#714)
* update: github issue template
2024-01-09 13:51:25 +08:00
LinkinStars bdc498ce39 fix(dashboard): set default smtp status 2024-01-08 16:21:25 +08:00
tison 1c5297abf1 Update Makefile 2024-01-03 17:17:42 +08:00
tison c8c3d7c1a2 build: tolerate build without git repo
Signed-off-by: tison <wander4096@gmail.com>
2024-01-03 17:17:42 +08:00
Fen da490d4006 fix: unit typo 2023-12-28 12:38:05 +08:00
LinkinStars 615e439fd3 ci(goreleaser): rename release src package name 2023-12-27 23:40:22 +08:00
Lu Fei 41a73cf9df fix: i18n text (#693)
close #692 

There are several languages that require specialized translators. 😅
2023-12-25 10:10:04 +08:00
Adam Vollrath 3b00da932b Sanitize input from contributor fork workflows.
Signed-off-by: Adam Vollrath <adam.d.vollrath@gmail.com>
2023-12-21 17:29:05 +08:00
sy-records 152934c740 ci: build image only if repository_owner is apache 2023-12-18 11:00:59 +08:00
YL1028K 68f5af01d9 fix: log prints incorrect method(#684) 2023-12-15 17:07:35 +08:00
Fen 2df8d5657e New Crowdin updates (#14)
* New translations en_us.yaml (German)

* New translations en_us.yaml (French)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Czech)

* New translations en_us.yaml (Danish)

* New translations en_us.yaml (Italian)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Korean)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Portuguese)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (Slovak)

* New translations en_us.yaml (Turkish)

* New translations en_us.yaml (Ukrainian)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Chinese Traditional)

* New translations en_us.yaml (Vietnamese)

* New translations en_us.yaml (Indonesian)

* New translations en_us.yaml (Persian)

* New translations en_us.yaml (Welsh)
2023-12-14 18:13:33 +08:00
Fen 7e4fe9a0f8 New Crowdin updates (#3)
* New translations en_us.yaml (French)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Czech)

* New translations en_us.yaml (Danish)

* New translations en_us.yaml (German)

* New translations en_us.yaml (Italian)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Korean)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Portuguese)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (Slovak)

* New translations en_us.yaml (Turkish)

* New translations en_us.yaml (Ukrainian)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Chinese Traditional)

* New translations en_us.yaml (Vietnamese)

* New translations en_us.yaml (Indonesian)

* New translations en_us.yaml (Persian)

* New translations en_us.yaml (Welsh)

* New translations en_us.yaml (French)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Czech)

* New translations en_us.yaml (Danish)

* New translations en_us.yaml (German)

* New translations en_us.yaml (Italian)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Korean)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Portuguese)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (Slovak)

* New translations en_us.yaml (Turkish)

* New translations en_us.yaml (Ukrainian)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Chinese Traditional)

* New translations en_us.yaml (Vietnamese)

* New translations en_us.yaml (Indonesian)

* New translations en_us.yaml (Persian)

* New translations en_us.yaml (Welsh)

* New translations en_us.yaml (French)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Czech)

* New translations en_us.yaml (Danish)

* New translations en_us.yaml (German)

* New translations en_us.yaml (Italian)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Korean)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Portuguese)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (Slovak)

* New translations en_us.yaml (Turkish)

* New translations en_us.yaml (Ukrainian)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Chinese Traditional)

* New translations en_us.yaml (Vietnamese)

* New translations en_us.yaml (Indonesian)

* New translations en_us.yaml (Persian)

* New translations en_us.yaml (Welsh)

* New translations en_us.yaml (German)

* New translations en_us.yaml (French)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Czech)

* New translations en_us.yaml (Danish)

* New translations en_us.yaml (German)

* New translations en_us.yaml (Italian)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Korean)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Portuguese)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (Slovak)

* New translations en_us.yaml (Turkish)

* New translations en_us.yaml (Ukrainian)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Chinese Traditional)

* New translations en_us.yaml (Vietnamese)

* New translations en_us.yaml (Indonesian)

* New translations en_us.yaml (Persian)

* New translations en_us.yaml (Welsh)

* New translations en_us.yaml (French)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Czech)

* New translations en_us.yaml (Danish)

* New translations en_us.yaml (German)

* New translations en_us.yaml (Italian)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Korean)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Portuguese)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (Slovak)

* New translations en_us.yaml (Turkish)

* New translations en_us.yaml (Ukrainian)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Chinese Traditional)

* New translations en_us.yaml (Vietnamese)

* New translations en_us.yaml (Indonesian)

* New translations en_us.yaml (Persian)

* New translations en_us.yaml (Welsh)

* New translations en_us.yaml (French)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Czech)

* New translations en_us.yaml (Danish)

* New translations en_us.yaml (German)

* New translations en_us.yaml (Italian)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Korean)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Portuguese)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (Slovak)

* New translations en_us.yaml (Turkish)

* New translations en_us.yaml (Ukrainian)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Chinese Traditional)

* New translations en_us.yaml (Vietnamese)

* New translations en_us.yaml (Indonesian)

* New translations en_us.yaml (Persian)

* New translations en_us.yaml (Welsh)

* New translations en_us.yaml (German)

* New translations en_us.yaml (German)

* New translations en_us.yaml (French)

* New translations en_us.yaml (Spanish)

* New translations en_us.yaml (Czech)

* New translations en_us.yaml (Danish)

* New translations en_us.yaml (Italian)

* New translations en_us.yaml (Japanese)

* New translations en_us.yaml (Korean)

* New translations en_us.yaml (Polish)

* New translations en_us.yaml (Portuguese)

* New translations en_us.yaml (Russian)

* New translations en_us.yaml (Slovak)

* New translations en_us.yaml (Turkish)

* New translations en_us.yaml (Ukrainian)

* New translations en_us.yaml (Chinese Simplified)

* New translations en_us.yaml (Chinese Traditional)

* New translations en_us.yaml (Vietnamese)

* New translations en_us.yaml (Indonesian)

* New translations en_us.yaml (Persian)

* New translations en_us.yaml (Welsh)
2023-12-14 17:43:36 +08:00
LinkinStars 3f696b63d6 docs(README): upgrade 1.2.1 2023-12-14 15:10:19 +08:00
LinkinStars 82fdfc7763 Release/1.2.1 (#678)
Build Binary For Release / build-goreleaser (push) Has been cancelled
Build Docker Image For Release / build (push) Has been cancelled
Co-authored-by: shuai <lishuailing@sifou.com>
Co-authored-by: kelvinkuo <kelvinkuo224@gmail.com>
Co-authored-by: hgaol <dhangao@hotmail.com>
Co-authored-by: sy-records <52o@qq52o.cn>
2023-12-14 15:07:58 +08:00
Han Gao a00f660411 fix: can't show tag description in tag edit page (#664)
fix #637 .
2023-11-30 14:42:09 +08:00
LinkinStars 03b5950d71 docs(image): rename all docker image name to apache/answer 2023-11-29 17:21:19 +08:00
lufei 7aa16f245b optimize code 2023-11-29 16:44:08 +08:00
sy-records 9dc0d566cc fix by code review 2023-11-29 16:44:08 +08:00
sy-records 3e76a0368f fix: permalink error on some pages 2023-11-29 16:44:08 +08:00
LinkinStars 1a76d0aa67 ci(github): add docker image github action 2023-11-29 15:14:18 +08:00
Fen b01717c49e docs: update link 2023-11-28 15:42:04 +08:00
shuai 3eeb289aa0 fix: google snapshots error #649 2023-11-27 15:24:05 +08:00
sy-records 0267f4bd69 fix: canonical link error 2023-11-22 16:26:44 +08:00
Lu Fei 2cf77adbb5 fix: license header breaks helm chart (#591)
This fixes #590.
2023-11-22 15:44:23 +08:00
Lu Fei 13b6fa2157 fix(sitemap): move asf header after xmlheader (#633)
This fixes #631.
2023-11-22 15:14:20 +08:00
LinkinStars c1cd2bbadd ci(github): remove GOPROXY for github action 2023-11-17 20:02:11 +08:00
LinkinStars e11aa93c14 ci(github): rename the secret name 2023-11-17 18:53:55 +08:00
LinkinStars 58dadefc99 ci(github): update docker login action version and config username 2023-11-17 16:42:59 +08:00
LinkinStars 84ef7d0e55 ci(asf): change the check-asf-header script to docker command via hawkeye-native 2023-11-17 15:54:27 +08:00
LinkinStars 274eaf29cf ci(github): update docker user and token secrets 2023-11-17 15:54:27 +08:00
LinkinStars fd6808b7ea ci(lic): add excludes for some files 2023-11-17 15:54:27 +08:00
LinkinStars 47b1366b13 docs(README): add build from source description 2023-11-17 10:58:44 +08:00
LinkinStars ff82298416 docs(README): update the call of this project Apache Answer instead of Answer #630 2023-11-17 10:58:44 +08:00
260 changed files with 12604 additions and 6322 deletions
+1 -1
View File
@@ -17,7 +17,7 @@
# NOTE: All configurations could be found here: https://cwiki.apache.org/confluence/display/INFRA/Git+-+.asf.yaml+features
github:
description: "A Q&A platform software for teams at any scales. Whether it's a community forum, help center, or knowledge management platform, you can always count on Answer."
description: "A Q&A platform software for teams at any scales. Whether it's a community forum, help center, or knowledge management platform, you can always count on Apache Answer."
homepage: https://answer.apache.org
labels:
- react
+17 -11
View File
@@ -1,30 +1,36 @@
---
name: Bug report
about: Create a report to help us improve
about: Report an issue to help the project improve.
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
## Describe the bug
A clear and concise description of what the bug is.
**To Reproduce**
### To Reproduce
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
### Expected behavior
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
### Screenshots
**Platform (please complete the following information):**
- Device: [e.g. Desktop, Mobile]
- OS: [e.g. macOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
If applicable, add screenshots or video to help explain your problem.
### Platform
- Device: [e.g. Desktop, Mobile]
- OS: [e.g. macOS]
- Browser and version: [e.g. Chrome, Safari]
- Version: [e.g. v1.2.0]
+22
View File
@@ -0,0 +1,22 @@
# 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.
blank_issues_enabled: true
contact_links:
- name: Support
url: https://answer.apache.org/community
about: Contact us if you have any questions while using.
@@ -0,0 +1,20 @@
---
name: Enhancement request
about: Suggest an enhancement for this project. Improve an existing feature.
title: ''
labels: enhancement
assignees: ''
---
## Is your enhancement request related to a problem? Please describe
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
## Describe the solution you'd like
A clear and concise description of what you want to happen.
## Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
+8 -5
View File
@@ -1,17 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
about: Suggest an idea or possible new feature for this project.
title: ''
labels: enhancement
labels: feature
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
## Is your feature request related to a problem? Please describe
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
## Describe the solution you'd like
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
## Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
@@ -26,6 +26,7 @@ permissions:
jobs:
build-goreleaser:
if: ${{ github.repository_owner == 'apache' }}
runs-on: ubuntu-latest
steps:
@@ -0,0 +1,65 @@
# 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: Manual Build Docker Image For Release
on:
workflow_dispatch:
inputs:
tag_name:
type: string
required: true
description: 'DockerHub img tag name'
jobs:
build:
if: ${{ github.repository_owner == 'apache' }}
runs-on: ubuntu-latest
steps:
- 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
- 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 }}
- 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 }}
@@ -29,6 +29,7 @@ on:
jobs:
build:
if: ${{ github.repository_owner == 'apache' }}
runs-on: ubuntu-latest
steps:
- name: Checkout
@@ -51,10 +52,10 @@ jobs:
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v4
+4 -3
View File
@@ -23,6 +23,7 @@ on:
jobs:
build:
if: ${{ github.repository_owner == 'apache' }}
name: Build and Push
runs-on: ubuntu-latest
steps:
@@ -44,10 +45,10 @@ jobs:
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v4
-115
View File
@@ -1,115 +0,0 @@
# 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: Build PR Image
on:
pull_request:
types: [opened, synchronize, reopened, closed]
jobs:
build-answer:
name: Build and push `Answer`
runs-on: ubuntu-latest
outputs:
tags: ${{ steps.meta.outputs.tags }}
if: ${{ github.event.action != 'closed' }}
steps:
- name: Checkout git repo
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Generate UUID image name
id: uuid
run: echo "UUID_WORKER=$(uuidgen)" >> $GITHUB_ENV
- name: Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: registry.uffizzi.com/${{ env.UUID_WORKER }}
tags: |
type=raw,value=60d
- name: Build and Push Image to registry.uffizzi.com - Uffizzi's ephemeral Registry
uses: docker/build-push-action@v3
with:
context: .
file: ./Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
push: true
cache-from: type=gha
cache-to: type=gha, mode=max
render-compose-file:
name: Render Docker Compose File
# Pass output of this workflow to another triggered by `workflow_run` event.
runs-on: ubuntu-latest
needs:
- build-answer
outputs:
compose-file-cache-key: ${{ steps.hash.outputs.hash }}
steps:
- name: Checkout git repo
uses: actions/checkout@v4
- name: Render Compose File
run: |
ANSWER_IMAGE=${{ needs.build-answer.outputs.tags }}
export ANSWER_IMAGE
export UFFIZZI_URL=\$UFFIZZI_URL
# Render simple template from environment variables.
envsubst < docker-compose.uffizzi.yml > docker-compose.rendered.yml
cat docker-compose.rendered.yml
- name: Upload Rendered Compose File as Artifact
uses: actions/upload-artifact@v3
with:
name: preview-spec
path: docker-compose.rendered.yml
retention-days: 2
- name: Serialize PR Event to File
run: |
cat << EOF > event.json
${{ toJSON(github.event) }}
EOF
- name: Upload PR Event as Artifact
uses: actions/upload-artifact@v3
with:
name: preview-spec
path: event.json
retention-days: 2
delete-preview:
name: Call for Preview Deletion
runs-on: ubuntu-latest
if: ${{ github.event.action == 'closed' }}
steps:
# If this PR is closing, we will not render a compose file nor pass it to the next workflow.
- name: Serialize PR Event to File
run: |
cat << EOF > event.json
${{ toJSON(github.event) }}
EOF
- name: Upload PR Event as Artifact
uses: actions/upload-artifact@v3
with:
name: preview-spec
path: event.json
retention-days: 2
-105
View File
@@ -1,105 +0,0 @@
# 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: Deploy Uffizzi Preview
on:
workflow_run:
workflows:
- "Build PR Image"
types:
- completed
jobs:
cache-compose-file:
name: Cache Compose File
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
outputs:
compose-file-cache-key: ${{ env.HASH }}
pr-number: ${{ env.PR_NUMBER }}
steps:
- name: 'Download artifacts'
# Fetch output (zip archive) from the workflow run that triggered this workflow.
uses: actions/github-script@v6
with:
script: |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: context.payload.workflow_run.id,
});
let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
return artifact.name == "preview-spec"
})[0];
let download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifact.id,
archive_format: 'zip',
});
let fs = require('fs');
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/preview-spec.zip`, Buffer.from(download.data));
- name: 'Unzip artifact'
run: unzip preview-spec.zip
- name: Read Event into ENV
run: |
echo 'EVENT_JSON<<EOF' >> $GITHUB_ENV
cat event.json >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- name: Hash Rendered Compose File
id: hash
# If the previous workflow was triggered by a PR close event, we will not have a compose file artifact.
if: ${{ fromJSON(env.EVENT_JSON).action != 'closed' }}
run: echo "HASH=$(md5sum docker-compose.rendered.yml | awk '{ print $1 }')" >> $GITHUB_ENV
- name: Cache Rendered Compose File
if: ${{ fromJSON(env.EVENT_JSON).action != 'closed' }}
uses: actions/cache@v3
with:
path: docker-compose.rendered.yml
key: ${{ env.HASH }}
- name: Read PR Number From Event Object
id: pr
run: echo "PR_NUMBER=${{ fromJSON(env.EVENT_JSON).number }}" >> $GITHUB_ENV
- name: DEBUG - Print Job Outputs
if: ${{ runner.debug }}
run: |
echo "PR number: ${{ env.PR_NUMBER }}"
echo "Compose file hash: ${{ env.HASH }}"
cat event.json
deploy-uffizzi-preview:
name: Use Remote Workflow to Preview on Uffizzi
needs:
- cache-compose-file
if: ${{ github.event.workflow_run.conclusion == 'success' }}
uses: UffizziCloud/preview-action/.github/workflows/reusable.yaml@v2
with:
# If this workflow was triggered by a PR close event, cache-key will be an empty string
# and this reusable workflow will delete the preview deployment.
compose-file-cache-key: ${{ needs.cache-compose-file.outputs.compose-file-cache-key }}
compose-file-cache-path: docker-compose.rendered.yml
server: https://app.uffizzi.com
pr-number: ${{ needs.cache-compose-file.outputs.pr-number }}
permissions:
contents: read
pull-requests: write
id-token: write
+8 -4
View File
@@ -32,7 +32,7 @@ builds:
- id: build
main: ./cmd/answer/.
binary: answer
ldflags: -s -w -X github.com/apache/incubator-answer/cmd.Version={{.Version}} -X github.com/apache/incubator-answer/cmd.Revision={{.ShortCommit}} -X github.com/apache/incubator-answer/cmd.Time={{.Date}} -X github.com/apache/incubator-answer/cmd.BuildUser=goreleaser
ldflags: -s -w -X github.com/apache/incubator-answer/cmd.Version={{.RawVersion}} -X github.com/apache/incubator-answer/cmd.Revision={{.ShortCommit}} -X github.com/apache/incubator-answer/cmd.Time={{.Date}} -X github.com/apache/incubator-answer/cmd.BuildUser=goreleaser
flags: -v
goos:
- linux
@@ -43,7 +43,7 @@ builds:
- id: build-windows
main: ./cmd/answer/.
binary: answer
ldflags: -s -w -X github.com/apache/incubator-answer/cmd.Version={{.Version}} -X github.com/apache/incubator-answer/cmd.Revision={{.ShortCommit}} -X github.com/apache/incubator-answer/cmd.Time={{.Date}} -X github.com/apache/incubator-answer/cmd.BuildUser=goreleaser
ldflags: -s -w -X github.com/apache/incubator-answer/cmd.Version={{.RawVersion}} -X github.com/apache/incubator-answer/cmd.Revision={{.ShortCommit}} -X github.com/apache/incubator-answer/cmd.Time={{.Date}} -X github.com/apache/incubator-answer/cmd.BuildUser=goreleaser
flags: -v
goos:
- windows
@@ -55,7 +55,7 @@ builds:
archives:
- name_template: >-
apache-answer-{{ .Version }}-incubating-{{ .Os }}-{{ .Arch }}
apache-answer-{{ .RawVersion }}-incubating-bin-{{ .Os }}-{{ .Arch }}
files:
- src: "docs/release/LICENSE"
dst: LICENSE
@@ -76,5 +76,9 @@ changelog:
- '^docs:'
- '^test:'
# goreleaser release --snapshot --rm-dist
source:
enabled: true
name_template: apache-answer-{{ .RawVersion }}-incubating-src
# goreleaser release --skip-validate --skip-publish --clean
+7 -3
View File
@@ -20,7 +20,7 @@ LABEL maintainer="aichy@sf.com"
ARG GOPROXY
# ENV GOPROXY ${GOPROXY:-direct}
ENV GOPROXY=https://proxy.golang.com.cn,direct
# ENV GOPROXY=https://proxy.golang.com.cn,direct
ENV GOPATH /go
ENV GOROOT /usr/local/go
@@ -47,7 +47,9 @@ RUN mkdir -p /data/uploads && chmod 777 /data/uploads \
FROM alpine
LABEL maintainer="linkinstar@apache.org"
ENV TZ "Asia/Shanghai"
ARG TIMEZONE
ENV TIMEZONE=${TIMEZONE:-"Asia/Shanghai"}
RUN apk update \
&& apk --no-cache add \
bash \
@@ -58,7 +60,9 @@ RUN apk update \
openssh \
sqlite \
gnupg \
&& echo "Asia/Shanghai" > /etc/timezone
tzdata \
&& ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
&& echo "${TIMEZONE}" > /etc/timezone
COPY --from=golang-builder /usr/bin/answer /usr/bin/answer
COPY --from=golang-builder /data /data
+6 -2
View File
@@ -1,12 +1,12 @@
.PHONY: build clean ui
VERSION=1.2.0
VERSION=1.2.5
BIN=answer
DIR_SRC=./cmd/answer
DOCKER_CMD=docker
GO_ENV=CGO_ENABLED=0 GO111MODULE=on
Revision=$(shell git rev-parse --short HEAD)
Revision=$(shell git rev-parse --short HEAD 2>/dev/null || echo "")
GO_FLAGS=-ldflags="-X github.com/apache/incubator-answer/cmd.Version=$(VERSION) -X 'github.com/apache/incubator-answer/cmd.Revision=$(Revision)' -X 'github.com/apache/incubator-answer/cmd.Time=`date +%s`' -extldflags -static"
GO=$(GO_ENV) $(shell which go)
@@ -43,4 +43,8 @@ install-ui-packages:
ui:
@cd ui && pnpm pre-install && pnpm build && cd -
lint: generate
@bash ./script/check-asf-header.sh
@gofmt -w -l .
all: clean build
+1 -1
View File
@@ -1,5 +1,5 @@
Apache Answer (incubating)
Copyright 2023 The Apache Software Foundation
Copyright 2023-2024 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (https://www.apache.org/).
+27 -6
View File
@@ -2,7 +2,7 @@
<img alt="logo" src="docs/img/logo.svg" height="99px">
</a>
# Answer - Build Q&A platform
# Apache Answer - Build Q&A platform
A Q&A platform software for teams at any scales. Whether its a community forum, help center, or knowledge management platform, you can always count on Answer.
@@ -23,24 +23,45 @@ 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 answerdev/answer:latest
docker run -d -p 9080:80 -v answer-data:/data --name answer apache/answer:1.2.5
```
For more information, see [Installation](https://answer.apache.org/docs/installation)
For more information, see [Installation](https://answer.apache.org/docs/installation).
### Plugins
Answer provides a plugin system for developers to create custom plugins and expand Answers features. You can find the [plugin documentation here](https://answer.apache.org/docs/development/extending/).
Answer provides a plugin system for developers to create custom plugins and expand Answers features. You can find the [plugin documentation here](https://answer.apache.org/community/plugins).
We value your feedback and suggestions to improve our documentation. If you have any comments or questions, please feel free to contact us. Were excited to see what you can create using our plugin system!
You can also check out the [plugins here](https://github.com/apache/incubator-answer-plugins).
You can also check out the [plugins here](https://answer.apache.org/plugins).
## Building from Source
### Prerequisites
- Golang >= 1.18
- Node.js >= 16.17
- pnpm >= 8
- mockgen >= 1.6.0
- wire >= 0.5.0
### Build
```bash
# install wire and mockgen for building
$ make generate
# install frontend dependencies and build
$ make ui
# install backend dependencies and build
$ make build
```
## Contributing
Contributions are always welcome!
See [CONTRIBUTING](https://answer.apache.org/docs/development/contributing/) for ways to get started.
See [CONTRIBUTING](https://answer.apache.org/community/contributing) for ways to get started.
## License
-39
View File
@@ -1,39 +0,0 @@
<a href="https://answer.apache.org">
<img alt="logo" src="docs/img/logo.svg" height="99px">
</a>
# Answer - 构建问答社区
一款问答形式的知识社区开源软件,你可以使用它快速建立你的问答社区,用于产品技术支持、客户支持、用户交流等。
了解更多关于该项目的内容,请访问 [answer.apache.org](https://answer.apache.org).
[![LICENSE](https://img.shields.io/github/license/apache/incubator-answer)](https://github.com/apache/incubator-answer/blob/main/LICENSE)
[![Language](https://img.shields.io/badge/language-go-blue.svg)](https://golang.org/)
[![Language](https://img.shields.io/badge/language-react-blue.svg)](https://reactjs.org/)
[![Go Report Card](https://goreportcard.com/badge/github.com/apache/incubator-answer)](https://goreportcard.com/report/github.com/apache/incubator-answer)
[![Discord](https://img.shields.io/badge/discord-chat-5865f2?logo=discord&logoColor=f5f5f5)](https://discord.gg/Jm7Y4cbUej)
## 截图
![screenshot](docs/img/screenshot.png)
## 快速开始
### 使用 docker 快速搭建
```bash
docker run -d -p 9080:80 -v answer-data:/data --name answer answerdev/answer:latest
```
其他安装配置细节请参考 [Installation](https://answer.apache.org/docs/installation)
## 贡献
我们随时欢迎你的贡献!
参考 [CONTRIBUTING](https://answer.apache.org/docs/development/contributing/) 开始贡献。
## License
[Apache License 2.0](https://github.com/apache/incubator-answer/blob/main/LICENSE)
+3 -3
View File
@@ -11,7 +11,7 @@ The following table lists the configurable parameters of the answer chart and th
| Parameter | Description | Default |
| --------- | ----------- | ------- |
| `replicaCount` | Number of answer replicas | `1` |
| `image.repository` | Image repository | `answerdev/answer` |
| `image.repository` | Image repository | `apache/answer` |
| `image.pullPolicy` | Image pull policy | `Always` |
| `image.tag` | Image tag | `latest` |
| `env` | Optional environment variables for answer | `LOG_LEVEL: INFO` |
@@ -69,7 +69,7 @@ Publish the chart to Artifacthub and add proper installation instructions. E.G.
> **NOTE**: This is not currently a valid installation option.
```console
$ helm repo add answerdev https://charts.answer.apache.org/
$ helm repo add apache https://charts.answer.apache.org/
$ helm repo update
$ helm install answerdev/answer -n mynamespace
$ helm install apache/answer -n mynamespace
```
+1 -1
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
{{- if .Values.autoscaling.enabled }}
{{ if .Values.autoscaling.enabled -}}
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
+1 -1
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
{{- if .Values.ingress.enabled -}}
{{ if .Values.ingress.enabled -}}
{{- $fullName := include "answer.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
+1 -1
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
{{- if .Values.persistence.enabled }}
{{ if .Values.persistence.enabled -}}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
+1 -1
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
{{- if .Values.serviceAccount.create -}}
{{ if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
+1 -1
View File
@@ -22,7 +22,7 @@
replicaCount: 1
image:
repository: answerdev/answer
repository: apache/answer
pullPolicy: Always
# Overrides the image tag whose default is the chart appVersion.
tag: "latest"
+37 -1
View File
@@ -45,6 +45,8 @@ var (
// This config is used to upgrade the database from a specific version manually.
// If you want to upgrade the database to version 1.1.0, you can use `answer upgrade -f v1.1.0`.
upgradeVersion string
// The fields that need to be set to the default value
configFields []string
)
func init() {
@@ -60,7 +62,9 @@ func init() {
upgradeCmd.Flags().StringVarP(&upgradeVersion, "from", "f", "", "upgrade from specific version, eg: -f v1.1.0")
for _, cmd := range []*cobra.Command{initCmd, checkCmd, runCmd, dumpCmd, upgradeCmd, buildCmd, pluginCmd} {
configCmd.Flags().StringSliceVarP(&configFields, "with", "w", []string{}, "the fields that need to be set to the default value, eg: -w allow_password_login")
for _, cmd := range []*cobra.Command{initCmd, checkCmd, runCmd, dumpCmd, upgradeCmd, buildCmd, pluginCmd, configCmd} {
rootCmd.AddCommand(cmd)
}
}
@@ -231,6 +235,38 @@ 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`,
Run: func(_ *cobra.Command, _ []string) {
cli.FormatAllPath(dataDirPath)
c, err := conf.ReadConfig(cli.GetConfigFilePath())
if err != nil {
fmt.Println("read config failed: ", err.Error())
return
}
field := &cli.ConfigField{}
for _, f := range configFields {
switch f {
case "allow_password_login":
field.AllowPasswordLogin = true
default:
fmt.Printf("field %s not support\n", f)
}
}
err = cli.SetDefaultConfig(c.Data.Database, c.Data.Cache, field)
if err != nil {
fmt.Println("set default config failed: ", err.Error())
} else {
fmt.Println("set default config successfully")
}
},
}
)
// Execute adds all child commands to the root command and sets flags appropriately.
+6 -2
View File
@@ -44,9 +44,12 @@ var (
// Version is the version of the project
Version = "0.0.0"
// Revision is the git short commit revision number
Revision = "-"
// If built without a Git repository, this field will be empty.
Revision = ""
// Time is the build time of the project
Time = "-"
Time = ""
// GoVersion is the go version of the project
GoVersion = "1.19"
// log level
logLevel = os.Getenv("LOG_LEVEL")
// log path
@@ -75,6 +78,7 @@ func runApp() {
}
constant.Version = Version
constant.Revision = Revision
constant.GoVersion = GoVersion
schema.AppStartTime = time.Now()
fmt.Println("answer Version:", constant.Version, " Revision:", constant.Revision)
+9 -7
View File
@@ -149,9 +149,9 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
userRoleRelService := role2.NewUserRoleRelService(userRoleRelRepo, roleService)
userCommon := usercommon.NewUserCommon(userRepo, userRoleRelService, authService, siteInfoCommonService)
userExternalLoginRepo := user_external_login.NewUserExternalLoginRepo(dataData)
userExternalLoginService := user_external_login2.NewUserExternalLoginService(userRepo, userCommon, userExternalLoginRepo, emailService, siteInfoCommonService, userActiveActivityRepo)
userNotificationConfigRepo := user_notification_config.NewUserNotificationConfigRepo(dataData)
userNotificationConfigService := user_notification_config2.NewUserNotificationConfigService(userRepo, userNotificationConfigRepo)
userExternalLoginService := user_external_login2.NewUserExternalLoginService(userRepo, userCommon, userExternalLoginRepo, emailService, siteInfoCommonService, userActiveActivityRepo, userNotificationConfigService)
userService := service.NewUserService(userRepo, userActiveActivityRepo, activityRepo, emailService, authService, siteInfoCommonService, userRoleRelService, userCommon, userExternalLoginService, userNotificationConfigRepo, userNotificationConfigService)
captchaRepo := captcha.NewCaptchaRepo(dataData)
captchaService := action.NewCaptchaService(captchaRepo)
@@ -201,11 +201,11 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
collectionController := controller.NewCollectionController(collectionService)
answerActivityRepo := activity.NewAnswerActivityRepo(dataData, activityRepo, userRankRepo, notificationQueueService)
answerActivityService := activity2.NewAnswerActivityService(answerActivityRepo, configService)
externalNotificationService := notification.NewExternalNotificationService(dataData, userNotificationConfigRepo, followRepo, emailService, userRepo, externalNotificationQueueService)
questionService := service.NewQuestionService(questionRepo, tagCommonService, questionCommon, userCommon, userRepo, revisionService, metaService, collectionCommon, answerActivityService, emailService, notificationQueueService, externalNotificationQueueService, activityQueueService, siteInfoCommonService, externalNotificationService)
externalNotificationService := notification.NewExternalNotificationService(dataData, userNotificationConfigRepo, followRepo, emailService, userRepo, externalNotificationQueueService, userExternalLoginRepo, siteInfoCommonService)
questionService := service.NewQuestionService(questionRepo, tagCommonService, questionCommon, userCommon, userRepo, userRoleRelService, revisionService, metaService, collectionCommon, answerActivityService, emailService, notificationQueueService, externalNotificationQueueService, activityQueueService, siteInfoCommonService, externalNotificationService)
answerService := service.NewAnswerService(answerRepo, questionRepo, questionCommon, userCommon, collectionCommon, userRepo, revisionService, answerActivityService, answerCommon, voteRepo, emailService, userRoleRelService, notificationQueueService, externalNotificationQueueService, activityQueueService)
questionController := controller.NewQuestionController(questionService, answerService, rankService, siteInfoCommonService, captchaService, rateLimitMiddleware)
answerController := controller.NewAnswerController(answerService, rankService, captchaService, rateLimitMiddleware)
answerController := controller.NewAnswerController(answerService, rankService, captchaService, siteInfoCommonService, rateLimitMiddleware)
searchParser := search_parser.NewSearchParser(tagCommonService, userCommon)
searchRepo := search_common.NewSearchRepo(dataData, uniqueIDRepo, userCommon, tagCommonService)
searchService := service.NewSearchService(searchParser, searchRepo)
@@ -227,7 +227,7 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
siteInfoController := controller_admin.NewSiteInfoController(siteInfoService)
controllerSiteInfoController := controller.NewSiteInfoController(siteInfoCommonService)
notificationRepo := notification2.NewNotificationRepo(dataData)
notificationCommon := notificationcommon.NewNotificationCommon(dataData, notificationRepo, userCommon, activityRepo, followRepo, objService, notificationQueueService)
notificationCommon := notificationcommon.NewNotificationCommon(dataData, notificationRepo, userCommon, activityRepo, followRepo, objService, notificationQueueService, userExternalLoginRepo, siteInfoCommonService)
notificationService := notification.NewNotificationService(dataData, notificationRepo, notificationCommon, revisionService, userRepo)
notificationController := controller.NewNotificationController(notificationService, rankService)
dashboardService := dashboard.NewDashboardService(questionRepo, answerRepo, commentCommonRepo, voteRepo, userRepo, reportRepo, configService, siteInfoCommonService, serviceConf, dataData)
@@ -241,10 +241,12 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database,
activityController := controller.NewActivityController(activityService)
roleController := controller_admin.NewRoleController(roleService)
pluginConfigRepo := plugin_config.NewPluginConfigRepo(dataData)
pluginCommonService := plugin_common.NewPluginCommonService(pluginConfigRepo, configService, dataData)
pluginUserConfigRepo := plugin_config.NewPluginUserConfigRepo(dataData)
pluginCommonService := plugin_common.NewPluginCommonService(pluginConfigRepo, pluginUserConfigRepo, configService, dataData)
pluginController := controller_admin.NewPluginController(pluginCommonService)
permissionController := controller.NewPermissionController(rankService)
answerAPIRouter := router.NewAnswerAPIRouter(langController, userController, commentController, reportController, voteController, tagController, followController, collectionController, questionController, answerController, searchController, revisionController, rankController, controller_adminReportController, userAdminController, reasonController, themeController, siteInfoController, controllerSiteInfoController, notificationController, dashboardController, uploadController, activityController, roleController, pluginController, permissionController)
userPluginController := controller.NewUserPluginController(pluginCommonService)
answerAPIRouter := router.NewAnswerAPIRouter(langController, userController, commentController, reportController, voteController, tagController, followController, collectionController, questionController, answerController, searchController, revisionController, rankController, controller_adminReportController, userAdminController, reasonController, themeController, siteInfoController, controllerSiteInfoController, notificationController, dashboardController, uploadController, activityController, roleController, pluginController, permissionController, userPluginController)
swaggerRouter := router.NewSwaggerRouter(swaggerConf)
uiRouter := router.NewUIRouter(controllerSiteInfoController, siteInfoCommonService)
authUserMiddleware := middleware.NewAuthUserMiddleware(authService, siteInfoCommonService)
-2
View File
@@ -32,6 +32,4 @@ swaggerui:
host: 127.0.0.1
address: ':80'
service_config:
secret_key: "answer"
web_host: "http://127.0.0.1:9080"
upload_path: "/data/uploads"
-77
View File
@@ -1,77 +0,0 @@
# 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: "3.9"
# uffizzi integration
x-uffizzi:
ingress:
service: answer
port: 80
services:
answer:
image: "${ANSWER_IMAGE}"
environment:
- AUTO_INSTALL=true
- DB_TYPE=mysql
- DB_USERNAME=root
- DB_PASSWORD=password
- DB_HOST=127.0.0.1:3306
- DB_NAME=answer
- LANGUAGE=en_US
- SITE_NAME=answer-test
- SITE_URL=http://localhost
- CONTACT_EMAIL=test@answer.com
- ADMIN_NAME=admin123
- ADMIN_PASSWORD=admin123
- ADMIN_EMAIL=admin123@admin.com
volumes:
- answer-data:/data
depends_on:
mysql:
condition: service_healthy
links:
- db
deploy:
resources:
limits:
memory: 4000M
mysql:
image: mysql:latest
environment:
- MYSQL_DATABASE=answer
- MYSQL_ROOT_PASSWORD=password
- MYSQL_USER=mysql
- MYSQL_PASSWORD=mysql
healthcheck:
test: [ "CMD", "mysqladmin" ,"ping", "-uroot", "-ppassword" ]
timeout: 20s
retries: 10
command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--skip-character-set-client-handshake']
volumes:
- sql_data:/var/lib/mysql
deploy:
resources:
limits:
memory: 500M
volumes:
answer-data:
sql_data:
+1 -1
View File
@@ -18,7 +18,7 @@
version: "3"
services:
answer:
image: answerdev/answer
image: apache/answer
ports:
- '9080:80'
restart: on-failure
+235 -46
View File
@@ -3685,6 +3685,49 @@ const docTemplate = `{
}
}
},
"/answer/api/v1/plugin/status": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "get all plugins status",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Plugin"
],
"summary": "get all plugins status",
"responses": {
"200": {
"description": "OK",
"schema": {
"allOf": [
{
"$ref": "#/definitions/handler.RespBody"
},
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.GetPluginListResp"
}
}
}
}
]
}
}
}
}
},
"/answer/api/v1/post/render": {
"post": {
"security": [
@@ -5852,6 +5895,132 @@ const docTemplate = `{
}
}
},
"/answer/api/v1/user/plugin/config": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "get user plugin config",
"produces": [
"application/json"
],
"tags": [
"UserPlugin"
],
"summary": "get user plugin config",
"parameters": [
{
"type": "string",
"description": "plugin_slug_name",
"name": "plugin_slug_name",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"allOf": [
{
"$ref": "#/definitions/handler.RespBody"
},
{
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/schema.GetPluginConfigResp"
}
}
}
]
}
}
}
},
"put": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "update user plugin config",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"UserPlugin"
],
"summary": "update user plugin config",
"parameters": [
{
"description": "UpdatePluginConfigReq",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/schema.UpdateUserPluginConfigReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/handler.RespBody"
}
}
}
}
},
"/answer/api/v1/user/plugin/configs": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "get plugin list that used for user.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"UserPlugin"
],
"summary": "get plugin list that used for user.",
"responses": {
"200": {
"description": "OK",
"schema": {
"allOf": [
{
"$ref": "#/definitions/handler.RespBody"
},
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.GetUserPluginListResp"
}
}
}
}
]
}
}
}
}
},
"/answer/api/v1/user/ranking": {
"get": {
"security": [
@@ -6859,12 +7028,13 @@ const docTemplate = `{
"object_id"
],
"properties": {
"bookmark": {
"type": "boolean"
},
"group_id": {
"description": "user collection group TagID",
"type": "string"
},
"object_id": {
"description": "object TagID",
"type": "string"
}
}
@@ -6873,13 +7043,7 @@ const docTemplate = `{
"type": "object",
"properties": {
"object_collection_count": {
"type": "string"
},
"object_id": {
"type": "string"
},
"switch": {
"type": "boolean"
"type": "integer"
}
}
},
@@ -7278,6 +7442,10 @@ const docTemplate = `{
"description": "username",
"type": "string"
},
"visit_token": {
"description": "visit token",
"type": "string"
},
"website": {
"description": "website",
"type": "string"
@@ -7679,27 +7847,21 @@ const docTemplate = `{
"type": "object",
"properties": {
"created_at": {
"description": "created time",
"type": "integer"
},
"description": {
"description": "description text",
"type": "string"
},
"display_name": {
"description": "display name",
"type": "string"
},
"excerpt": {
"description": "excerpt",
"type": "string"
},
"follow_count": {
"description": "follower amount",
"type": "integer"
},
"is_follower": {
"description": "is follower",
"type": "boolean"
},
"main_tag_slug_name": {
@@ -7707,22 +7869,18 @@ const docTemplate = `{
"type": "string"
},
"member_actions": {
"description": "MemberActions",
"type": "array",
"items": {
"$ref": "#/definitions/schema.PermissionMemberAction"
}
},
"original_text": {
"description": "original text",
"type": "string"
},
"parsed_text": {
"description": "parsed text",
"type": "string"
},
"question_count": {
"description": "question amount",
"type": "integer"
},
"recommend": {
@@ -7732,15 +7890,15 @@ const docTemplate = `{
"type": "boolean"
},
"slug_name": {
"description": "slug name",
"type": "string"
},
"status": {
"type": "string"
},
"tag_id": {
"description": "tag id",
"type": "string"
},
"updated_at": {
"description": "updated time",
"type": "integer"
}
}
@@ -7790,22 +7948,13 @@ const docTemplate = `{
"type": "object",
"properties": {
"all_new_question": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
},
"all_new_question_for_following_tags": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
},
"inbox": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
}
},
@@ -7862,6 +8011,17 @@ const docTemplate = `{
}
}
},
"schema.GetUserPluginListResp": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"slug_name": {
"type": "string"
}
}
},
"schema.GetVoteWithPageResp": {
"type": "object",
"properties": {
@@ -8491,6 +8651,9 @@ const docTemplate = `{
"title": {
"type": "string"
},
"url_title": {
"type": "string"
},
"user_info": {
"description": "user info",
"allOf": [
@@ -8746,6 +8909,9 @@ const docTemplate = `{
"site_users": {
"$ref": "#/definitions/schema.SiteUsersResp"
},
"site_write": {
"$ref": "#/definitions/schema.SiteWriteResp"
},
"theme": {
"$ref": "#/definitions/schema.SiteThemeResp"
},
@@ -8837,6 +9003,9 @@ const docTemplate = `{
"allow_new_registrations": {
"type": "boolean"
},
"allow_password_login": {
"type": "boolean"
},
"login_required": {
"type": "boolean"
}
@@ -8857,6 +9026,9 @@ const docTemplate = `{
"allow_new_registrations": {
"type": "boolean"
},
"allow_password_login": {
"type": "boolean"
},
"login_required": {
"type": "boolean"
}
@@ -9019,6 +9191,9 @@ const docTemplate = `{
"items": {
"type": "string"
}
},
"restrict_answer": {
"type": "boolean"
}
}
},
@@ -9039,6 +9214,9 @@ const docTemplate = `{
"items": {
"type": "string"
}
},
"restrict_answer": {
"type": "boolean"
}
}
},
@@ -9378,22 +9556,13 @@ const docTemplate = `{
"type": "object",
"properties": {
"all_new_question": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
},
"all_new_question_for_following_tags": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
},
"inbox": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
}
},
@@ -9414,6 +9583,22 @@ const docTemplate = `{
}
}
},
"schema.UpdateUserPluginConfigReq": {
"type": "object",
"required": [
"plugin_slug_name"
],
"properties": {
"config_fields": {
"type": "object",
"additionalProperties": {}
},
"plugin_slug_name": {
"type": "string",
"maxLength": 100
}
}
},
"schema.UpdateUserRoleReq": {
"type": "object",
"required": [
@@ -9640,6 +9825,10 @@ const docTemplate = `{
"description": "username",
"type": "string"
},
"visit_token": {
"description": "visit token",
"type": "string"
},
"website": {
"description": "website",
"type": "string"
+18
View File
@@ -1,3 +1,21 @@
<!--
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.
-->
<svg width="126" height="44" viewBox="0 0 126 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="125.49" height="44" rx="6" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 14.4C8 12.1598 8 11.0397 8.43597 10.184C8.81947 9.43139 9.43139 8.81947 10.184 8.43597C11.0397 8 12.1598 8 14.4 8H29.6C31.8402 8 32.9603 8 33.816 8.43597C34.5686 8.81947 35.1805 9.43139 35.564 10.184C36 11.0397 36 12.1598 36 14.4V24.0892C36 26.9608 36 28.3967 35.5628 29.6643C35.1761 30.7853 34.5451 31.8063 33.7153 32.6535C32.7771 33.6115 31.4928 34.2536 28.9244 35.5378L28 36V32H14.4C12.1598 32 11.0397 32 10.184 31.564C9.43139 31.1805 8.81947 30.5686 8.43597 29.816C8 28.9603 8 27.8402 8 25.6V14.4ZM28 20C28 23.3137 25.3137 26 22 26C18.6954 26 16.0148 23.3285 16.0001 20.0274V20H28Z" fill="#0033FF"/>

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

+235 -46
View File
@@ -3654,6 +3654,49 @@
}
}
},
"/answer/api/v1/plugin/status": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "get all plugins status",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Plugin"
],
"summary": "get all plugins status",
"responses": {
"200": {
"description": "OK",
"schema": {
"allOf": [
{
"$ref": "#/definitions/handler.RespBody"
},
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.GetPluginListResp"
}
}
}
}
]
}
}
}
}
},
"/answer/api/v1/post/render": {
"post": {
"security": [
@@ -5821,6 +5864,132 @@
}
}
},
"/answer/api/v1/user/plugin/config": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "get user plugin config",
"produces": [
"application/json"
],
"tags": [
"UserPlugin"
],
"summary": "get user plugin config",
"parameters": [
{
"type": "string",
"description": "plugin_slug_name",
"name": "plugin_slug_name",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"allOf": [
{
"$ref": "#/definitions/handler.RespBody"
},
{
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/schema.GetPluginConfigResp"
}
}
}
]
}
}
}
},
"put": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "update user plugin config",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"UserPlugin"
],
"summary": "update user plugin config",
"parameters": [
{
"description": "UpdatePluginConfigReq",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/schema.UpdateUserPluginConfigReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/handler.RespBody"
}
}
}
}
},
"/answer/api/v1/user/plugin/configs": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "get plugin list that used for user.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"UserPlugin"
],
"summary": "get plugin list that used for user.",
"responses": {
"200": {
"description": "OK",
"schema": {
"allOf": [
{
"$ref": "#/definitions/handler.RespBody"
},
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.GetUserPluginListResp"
}
}
}
}
]
}
}
}
}
},
"/answer/api/v1/user/ranking": {
"get": {
"security": [
@@ -6828,12 +6997,13 @@
"object_id"
],
"properties": {
"bookmark": {
"type": "boolean"
},
"group_id": {
"description": "user collection group TagID",
"type": "string"
},
"object_id": {
"description": "object TagID",
"type": "string"
}
}
@@ -6842,13 +7012,7 @@
"type": "object",
"properties": {
"object_collection_count": {
"type": "string"
},
"object_id": {
"type": "string"
},
"switch": {
"type": "boolean"
"type": "integer"
}
}
},
@@ -7247,6 +7411,10 @@
"description": "username",
"type": "string"
},
"visit_token": {
"description": "visit token",
"type": "string"
},
"website": {
"description": "website",
"type": "string"
@@ -7648,27 +7816,21 @@
"type": "object",
"properties": {
"created_at": {
"description": "created time",
"type": "integer"
},
"description": {
"description": "description text",
"type": "string"
},
"display_name": {
"description": "display name",
"type": "string"
},
"excerpt": {
"description": "excerpt",
"type": "string"
},
"follow_count": {
"description": "follower amount",
"type": "integer"
},
"is_follower": {
"description": "is follower",
"type": "boolean"
},
"main_tag_slug_name": {
@@ -7676,22 +7838,18 @@
"type": "string"
},
"member_actions": {
"description": "MemberActions",
"type": "array",
"items": {
"$ref": "#/definitions/schema.PermissionMemberAction"
}
},
"original_text": {
"description": "original text",
"type": "string"
},
"parsed_text": {
"description": "parsed text",
"type": "string"
},
"question_count": {
"description": "question amount",
"type": "integer"
},
"recommend": {
@@ -7701,15 +7859,15 @@
"type": "boolean"
},
"slug_name": {
"description": "slug name",
"type": "string"
},
"status": {
"type": "string"
},
"tag_id": {
"description": "tag id",
"type": "string"
},
"updated_at": {
"description": "updated time",
"type": "integer"
}
}
@@ -7759,22 +7917,13 @@
"type": "object",
"properties": {
"all_new_question": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
},
"all_new_question_for_following_tags": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
},
"inbox": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
}
},
@@ -7831,6 +7980,17 @@
}
}
},
"schema.GetUserPluginListResp": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"slug_name": {
"type": "string"
}
}
},
"schema.GetVoteWithPageResp": {
"type": "object",
"properties": {
@@ -8460,6 +8620,9 @@
"title": {
"type": "string"
},
"url_title": {
"type": "string"
},
"user_info": {
"description": "user info",
"allOf": [
@@ -8715,6 +8878,9 @@
"site_users": {
"$ref": "#/definitions/schema.SiteUsersResp"
},
"site_write": {
"$ref": "#/definitions/schema.SiteWriteResp"
},
"theme": {
"$ref": "#/definitions/schema.SiteThemeResp"
},
@@ -8806,6 +8972,9 @@
"allow_new_registrations": {
"type": "boolean"
},
"allow_password_login": {
"type": "boolean"
},
"login_required": {
"type": "boolean"
}
@@ -8826,6 +8995,9 @@
"allow_new_registrations": {
"type": "boolean"
},
"allow_password_login": {
"type": "boolean"
},
"login_required": {
"type": "boolean"
}
@@ -8988,6 +9160,9 @@
"items": {
"type": "string"
}
},
"restrict_answer": {
"type": "boolean"
}
}
},
@@ -9008,6 +9183,9 @@
"items": {
"type": "string"
}
},
"restrict_answer": {
"type": "boolean"
}
}
},
@@ -9347,22 +9525,13 @@
"type": "object",
"properties": {
"all_new_question": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
},
"all_new_question_for_following_tags": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
},
"inbox": {
"type": "array",
"items": {
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
"$ref": "#/definitions/schema.NotificationChannelConfig"
}
}
},
@@ -9383,6 +9552,22 @@
}
}
},
"schema.UpdateUserPluginConfigReq": {
"type": "object",
"required": [
"plugin_slug_name"
],
"properties": {
"config_fields": {
"type": "object",
"additionalProperties": {}
},
"plugin_slug_name": {
"type": "string",
"maxLength": 100
}
}
},
"schema.UpdateUserRoleReq": {
"type": "object",
"required": [
@@ -9609,6 +9794,10 @@
"description": "username",
"type": "string"
},
"visit_token": {
"description": "visit token",
"type": "string"
},
"website": {
"description": "website",
"type": "string"
+144 -38
View File
@@ -357,11 +357,11 @@ definitions:
type: object
schema.CollectionSwitchReq:
properties:
bookmark:
type: boolean
group_id:
description: user collection group TagID
type: string
object_id:
description: object TagID
type: string
required:
- group_id
@@ -370,11 +370,7 @@ definitions:
schema.CollectionSwitchResp:
properties:
object_collection_count:
type: string
object_id:
type: string
switch:
type: boolean
type: integer
type: object
schema.ConfigField:
properties:
@@ -658,6 +654,9 @@ definitions:
username:
description: username
type: string
visit_token:
description: visit token
type: string
website:
description: website
type: string
@@ -941,53 +940,42 @@ definitions:
schema.GetTagResp:
properties:
created_at:
description: created time
type: integer
description:
description: description text
type: string
display_name:
description: display name
type: string
excerpt:
description: excerpt
type: string
follow_count:
description: follower amount
type: integer
is_follower:
description: is follower
type: boolean
main_tag_slug_name:
description: if main tag slug name is not empty, this tag is synonymous with
the main tag
type: string
member_actions:
description: MemberActions
items:
$ref: '#/definitions/schema.PermissionMemberAction'
type: array
original_text:
description: original text
type: string
parsed_text:
description: parsed text
type: string
question_count:
description: question amount
type: integer
recommend:
type: boolean
reserved:
type: boolean
slug_name:
description: slug name
type: string
status:
type: string
tag_id:
description: tag id
type: string
updated_at:
description: updated time
type: integer
type: object
schema.GetTagSynonymsResp:
@@ -1020,17 +1008,11 @@ definitions:
schema.GetUserNotificationConfigResp:
properties:
all_new_question:
items:
$ref: '#/definitions/schema.NotificationChannelConfig'
type: array
$ref: '#/definitions/schema.NotificationChannelConfig'
all_new_question_for_following_tags:
items:
$ref: '#/definitions/schema.NotificationChannelConfig'
type: array
$ref: '#/definitions/schema.NotificationChannelConfig'
inbox:
items:
$ref: '#/definitions/schema.NotificationChannelConfig'
type: array
$ref: '#/definitions/schema.NotificationChannelConfig'
type: object
schema.GetUserPageResp:
properties:
@@ -1071,6 +1053,13 @@ definitions:
description: username
type: string
type: object
schema.GetUserPluginListResp:
properties:
name:
type: string
slug_name:
type: string
type: object
schema.GetVoteWithPageResp:
properties:
answer_id:
@@ -1508,6 +1497,8 @@ definitions:
type: array
title:
type: string
url_title:
type: string
user_info:
allOf:
- $ref: '#/definitions/schema.SearchObjectUser'
@@ -1683,6 +1674,8 @@ definitions:
$ref: '#/definitions/schema.SiteSeoResp'
site_users:
$ref: '#/definitions/schema.SiteUsersResp'
site_write:
$ref: '#/definitions/schema.SiteWriteResp'
theme:
$ref: '#/definitions/schema.SiteThemeResp'
version:
@@ -1744,6 +1737,8 @@ definitions:
type: boolean
allow_new_registrations:
type: boolean
allow_password_login:
type: boolean
login_required:
type: boolean
type: object
@@ -1757,6 +1752,8 @@ definitions:
type: boolean
allow_new_registrations:
type: boolean
allow_password_login:
type: boolean
login_required:
type: boolean
type: object
@@ -1867,6 +1864,8 @@ definitions:
items:
type: string
type: array
restrict_answer:
type: boolean
type: object
schema.SiteWriteResp:
properties:
@@ -1880,6 +1879,8 @@ definitions:
items:
type: string
type: array
restrict_answer:
type: boolean
type: object
schema.TagItem:
properties:
@@ -2116,17 +2117,11 @@ definitions:
schema.UpdateUserNotificationConfigReq:
properties:
all_new_question:
items:
$ref: '#/definitions/schema.NotificationChannelConfig'
type: array
$ref: '#/definitions/schema.NotificationChannelConfig'
all_new_question_for_following_tags:
items:
$ref: '#/definitions/schema.NotificationChannelConfig'
type: array
$ref: '#/definitions/schema.NotificationChannelConfig'
inbox:
items:
$ref: '#/definitions/schema.NotificationChannelConfig'
type: array
$ref: '#/definitions/schema.NotificationChannelConfig'
type: object
schema.UpdateUserPasswordReq:
properties:
@@ -2140,6 +2135,17 @@ definitions:
- password
- user_id
type: object
schema.UpdateUserPluginConfigReq:
properties:
config_fields:
additionalProperties: {}
type: object
plugin_slug_name:
maxLength: 100
type: string
required:
- plugin_slug_name
type: object
schema.UpdateUserRoleReq:
properties:
role_id:
@@ -2302,6 +2308,9 @@ definitions:
username:
description: username
type: string
visit_token:
description: visit token
type: string
website:
description: website
type: string
@@ -4659,6 +4668,30 @@ paths:
summary: get user personal votes
tags:
- Activity
/answer/api/v1/plugin/status:
get:
consumes:
- application/json
description: get all plugins status
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/handler.RespBody'
- properties:
data:
items:
$ref: '#/definitions/schema.GetPluginListResp'
type: array
type: object
security:
- ApiKeyAuth: []
summary: get all plugins status
tags:
- Plugin
/answer/api/v1/post/render:
post:
consumes:
@@ -5983,6 +6016,79 @@ paths:
summary: RetrievePassWord
tags:
- User
/answer/api/v1/user/plugin/config:
get:
description: get user plugin config
parameters:
- description: plugin_slug_name
in: query
name: plugin_slug_name
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/handler.RespBody'
- properties:
data:
$ref: '#/definitions/schema.GetPluginConfigResp'
type: object
security:
- ApiKeyAuth: []
summary: get user plugin config
tags:
- UserPlugin
put:
consumes:
- application/json
description: update user plugin config
parameters:
- description: UpdatePluginConfigReq
in: body
name: data
required: true
schema:
$ref: '#/definitions/schema.UpdateUserPluginConfigReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handler.RespBody'
security:
- ApiKeyAuth: []
summary: update user plugin config
tags:
- UserPlugin
/answer/api/v1/user/plugin/configs:
get:
consumes:
- application/json
description: get plugin list that used for user.
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/handler.RespBody'
- properties:
data:
items:
$ref: '#/definitions/schema.GetUserPluginListResp'
type: array
type: object
security:
- ApiKeyAuth: []
summary: get plugin list that used for user.
tags:
- UserPlugin
/answer/api/v1/user/ranking:
get:
consumes:
+17 -1
View File
@@ -1,3 +1,20 @@
// 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.
module github.com/apache/incubator-answer
go 1.18
@@ -86,7 +103,6 @@ require (
github.com/golang/geo v0.0.0-20190812012225-f41920e961ce // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
github.com/google/subcommands v1.0.1 // indirect
github.com/gorilla/css v1.0.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/imdario/mergo v0.3.16 // indirect
-1
View File
@@ -316,7 +316,6 @@ github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbu
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
github.com/google/subcommands v1.0.1 h1:/eqq+otEXm5vhfBrbREPCSVQbvofip6kIz+mX5TUH7k=
github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+3 -3
View File
@@ -360,7 +360,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -433,7 +433,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -471,7 +471,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+3 -3
View File
@@ -360,7 +360,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -433,7 +433,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -471,7 +471,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+3 -3
View File
@@ -355,7 +355,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -428,7 +428,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -466,7 +466,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+3 -3
View File
@@ -355,7 +355,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -428,7 +428,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -466,7 +466,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+3 -3
View File
@@ -355,7 +355,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -428,7 +428,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -466,7 +466,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+3 -3
View File
@@ -355,7 +355,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -428,7 +428,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -466,7 +466,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+3 -3
View File
@@ -355,7 +355,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -428,7 +428,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -466,7 +466,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+3 -3
View File
@@ -360,7 +360,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -433,7 +433,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -471,7 +471,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+62 -33
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: You cannot modify your role.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: How to Format
@@ -520,6 +525,7 @@ ui:
http_404: HTTP Error 404
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
notifications:
title: Notifications
inbox: Inbox
@@ -598,7 +604,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description
tab_url: Image URL
@@ -678,6 +684,12 @@ ui:
character: URL slug contains unallowed character set.
desc:
label: Description
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: Cancel
btn_submit: Submit
btn_post: Post new tag
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: Edit Tag
default_reason: Edit tag
form:
fields:
revision:
label: Revision
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc:
label: Description
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
default_first_reason: Add tag
btn_save_edits: Save edits
btn_cancel: Cancel
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}}h ago"
hour: hour
day: day
hours: hours
days: days
comment:
btn_add_comment: Add comment
reply_to: Reply to
@@ -740,7 +740,7 @@ ui:
btn_flag: Flag
btn_save_edits: Save edits
btn_cancel: Cancel
show_more: Show more comments
show_more: "{{count}} more comments"
tip_question: >-
Use comments to ask for more information or suggest improvements. Avoid answering questions in comments.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: Edit Answer
default_reason: Edit answer
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Add Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
similar_questions: Similar questions
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: Search
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Change
loading: loading...
@@ -963,10 +965,10 @@ ui:
label: Location
placeholder: "City, Country"
notification:
heading: Notifications
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1021,7 +1023,7 @@ ui:
answers: answers
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Accepted
write_answer:
title: Your Answer
edit_answer: Edit my existing answer
btn_name: Post your answer
add_another_answer: Add another answer
confirm_title: Continue to answer
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Search Results
keywords: Keywords
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Dashboard
welcome: Welcome to Answer Admin!
site_statistics: Site Statistics
site_statistics: Site statistics
questions: "Questions:"
answers: "Answers:"
comments: "Comments:"
votes: "Votes:"
active_users: "Active users:"
users: "Users:"
flags: "Flags:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Version:"
https: "HTTPS:"
uploading_files: "Uploading files:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Timezone:"
system_info: System Info
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Storage used:"
uptime: "Uptime:"
answer_links: Answer Links
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Documents
feedback: Feedback
support: Support
@@ -1384,6 +1402,8 @@ ui:
allowed: Allowed
enabled: Enabled
disabled: Disabled
writable: Writable
not_writable: Not writable
flags:
title: Flags
pending: Pending
@@ -1594,6 +1614,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: Write
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+62 -33
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: Ni allwch addasu eich rôl.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: Sut i Fformatio
@@ -520,6 +525,7 @@ ui:
http_404: Gwall HTTP 404
http_50X: Gwall HTTP 500
http_403: Gwall HTTP 403
logout: Log Out
notifications:
title: Hysbysiadau
inbox: Mewnflwch
@@ -598,7 +604,7 @@ ui:
msg:
empty: Ni all ffeil fod yn wag.
only_image: Dim ond ffeiliau delwedd a ganiateir.
max_size: Ni all maint y ffeil fod yn fwy na 4MB.
max_size: Ni all maint y ffeil fod yn fwy na 4 MB.
desc:
label: Disgrifiad
tab_url: URL delwedd
@@ -678,6 +684,12 @@ ui:
character: Mae slug URL yn cynnwys set nodau na caniateir.
desc:
label: Disgrifiad
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: Canslo
btn_submit: Cyflwyno
btn_post: Post tag newydd
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: Edit Tag
default_reason: Edit tag
form:
fields:
revision:
label: Revision
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc:
label: Description
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
default_first_reason: Add tag
btn_save_edits: Save edits
btn_cancel: Cancel
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}}h ago"
hour: hour
day: day
hours: hours
days: days
comment:
btn_add_comment: Add comment
reply_to: Reply to
@@ -740,7 +740,7 @@ ui:
btn_flag: Flag
btn_save_edits: Save edits
btn_cancel: Cancel
show_more: Show more comments
show_more: "{{count}} more comments"
tip_question: >-
Use comments to ask for more information or suggest improvements. Avoid answering questions in comments.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: Edit Answer
default_reason: Edit answer
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Ychwanegu Cwestiwn
edit_title: Golygu Cwestiwn
default_reason: Golygu Cwestiwn
default_first_reason: Add question
similar_questions: Cwestiynau tebyg
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: Search
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Change
loading: loading...
@@ -963,10 +965,10 @@ ui:
label: Location
placeholder: "City, Country"
notification:
heading: Notifications
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1021,7 +1023,7 @@ ui:
answers: answers
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Accepted
write_answer:
title: Your Answer
edit_answer: Edit my existing answer
btn_name: Post your answer
add_another_answer: Add another answer
confirm_title: Continue to answer
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Search Results
keywords: Keywords
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Dashboard
welcome: Welcome to Answer Admin!
site_statistics: Site Statistics
site_statistics: Site statistics
questions: "Questions:"
answers: "Answers:"
comments: "Comments:"
votes: "Votes:"
active_users: "Active users:"
users: "Users:"
flags: "Flags:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Version:"
https: "HTTPS:"
uploading_files: "Uploading files:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Timezone:"
system_info: System Info
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Storage used:"
uptime: "Uptime:"
answer_links: Answer Links
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Documents
feedback: Feedback
support: Support
@@ -1384,6 +1402,8 @@ ui:
allowed: Allowed
enabled: Enabled
disabled: Disabled
writable: Writable
not_writable: Not writable
flags:
title: Flags
pending: Pending
@@ -1594,6 +1614,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: Write
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+62 -33
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: You cannot modify your role.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: How to Format
@@ -520,6 +525,7 @@ ui:
http_404: HTTP Error 404
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
notifications:
title: Notifications
inbox: Inbox
@@ -598,7 +604,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description
tab_url: Image URL
@@ -678,6 +684,12 @@ ui:
character: URL slug contains unallowed character set.
desc:
label: Description
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: Cancel
btn_submit: Submit
btn_post: Post new tag
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: Edit Tag
default_reason: Edit tag
form:
fields:
revision:
label: Revision
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc:
label: Description
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
default_first_reason: Add tag
btn_save_edits: Save edits
btn_cancel: Cancel
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}}h ago"
hour: hour
day: day
hours: hours
days: days
comment:
btn_add_comment: Add comment
reply_to: Reply to
@@ -740,7 +740,7 @@ ui:
btn_flag: Flag
btn_save_edits: Save edits
btn_cancel: Cancel
show_more: Show more comments
show_more: "{{count}} more comments"
tip_question: >-
Use comments to ask for more information or suggest improvements. Avoid answering questions in comments.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: Edit Answer
default_reason: Edit answer
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Add Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
similar_questions: Similar questions
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: Search
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Change
loading: loading...
@@ -963,10 +965,10 @@ ui:
label: Location
placeholder: "City, Country"
notification:
heading: Notifications
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1021,7 +1023,7 @@ ui:
answers: answers
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Accepted
write_answer:
title: Your Answer
edit_answer: Edit my existing answer
btn_name: Post your answer
add_another_answer: Add another answer
confirm_title: Continue to answer
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Search Results
keywords: Keywords
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Dashboard
welcome: Welcome to Answer Admin!
site_statistics: Site Statistics
site_statistics: Site statistics
questions: "Questions:"
answers: "Answers:"
comments: "Comments:"
votes: "Votes:"
active_users: "Active users:"
users: "Users:"
flags: "Flags:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Version:"
https: "HTTPS:"
uploading_files: "Uploading files:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Timezone:"
system_info: System Info
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Storage used:"
uptime: "Uptime:"
answer_links: Answer Links
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Documents
feedback: Feedback
support: Support
@@ -1384,6 +1402,8 @@ ui:
allowed: Allowed
enabled: Enabled
disabled: Disabled
writable: Writable
not_writable: Not writable
flags:
title: Flags
pending: Pending
@@ -1594,6 +1614,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: Write
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+111 -82
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -31,7 +31,7 @@ backend:
forbidden_error:
other: Verboten.
duplicate_request_error:
other: Duplicate submission.
other: Doppelte Einreichung.
action:
report:
other: Melden
@@ -56,7 +56,7 @@ backend:
invite_someone_to_answer:
other: Bearbeiten
undelete:
other: Undelete
other: Wiederherstellen
role:
name:
user:
@@ -75,13 +75,16 @@ backend:
privilege:
level_1:
description:
other: Stufe 1 (weniger Ansehen erforderlich für privates Team, Gruppe)
other: Level 1 (less reputation required for private team, group)
level_2:
description:
other: Stufe 2 (geringes Ansehen für Startup-Community erforderlich)
other: Level 2 (low reputation required for startup community)
level_3:
description:
other: Stufe 3 (hohes Ansehen für reife Gemeinschaft erforderlich)
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Fragen stellen
rank_answer_add_label:
@@ -179,9 +182,9 @@ backend:
captcha_verification_failed:
other: Captcha ist falsch.
disallow_follow:
other: Es ist dir nicht erlaubt, zu folgen.
other: Es ist dir nicht erlaubt zu folgen.
disallow_vote:
other: Du darfst nicht abstimmen.
other: Es ist dir nicht erlaubt abzustimmen.
disallow_vote_your_self:
other: Du kannst nicht für deinen eigenen Beitrag stimmen.
not_found:
@@ -202,7 +205,7 @@ backend:
cannot_deleted:
other: Keine Berechtigung zum Löschen.
cannot_close:
other: Keine Erlaubnis zum Schließen.
other: Keine Berechtigung zum Schließen.
cannot_update:
other: Keine Berechtigung zum Aktualisieren.
rank:
@@ -214,9 +217,9 @@ backend:
other: Dafür brauchst du mindestens {{.Rank}} Ansehen.
report:
handle_failed:
other: Berichtshandle fehlgeschlagen.
other: Bearbeiten der Meldung fehlgeschlagen.
not_found:
other: Report nicht gefunden.
other: Meldung nicht gefunden.
tag:
already_exist:
other: Tag existiert bereits.
@@ -242,7 +245,7 @@ backend:
other: Design nicht gefunden.
revision:
review_underway:
other: Kann momentan nicht bearbeiten, es gibt eine Version in der Warteschlange.
other: Kann derzeit nicht bearbeitet werden, es existiert eine Version in der Überprüfungswarteschlange.
no_permission:
other: Keine Berechtigung zum Überarbeiten.
user:
@@ -267,6 +270,8 @@ backend:
other: Du kannst deine Rolle nicht ändern.
not_allowed_registration:
other: Derzeit ist die Seite nicht für die Anmeldung geöffnet.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Zugriff verweigert
page_access_denied:
@@ -300,68 +305,68 @@ backend:
other: Dieser Beitrag ist eine Werbung oder Vandalismus. Er ist nicht nützlich oder relevant für das aktuelle Thema.
rude_or_abusive:
name:
other: rude or abusive
other: unhöflich oder beleidigend
desc:
other: Eine vernünftige Person würde diesen Inhalt als unangemessen für einen respektvollen Diskurs empfinden.
a_duplicate:
name:
other: a duplicate
other: ein Duplikat
desc:
other: Diese Frage wurde schon einmal gestellt und hat bereits eine Antwort.
placeholder:
other: Gib den Link zur bestehenden Frage ein
not_a_answer:
name:
other: not an answer
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.
no_longer_needed:
name:
other: no longer needed
other: nicht mehr benötigt
desc:
other: Dieser Kommentar ist veraltet oder nicht relevant für diesen Beitrag.
something:
name:
other: something else
other: anderer Grund
desc:
other: Dieser Posten erfordert die Aufmerksamkeit des Personals aus einem anderen, oben nicht genannten Grund.
other: Dieser Beitrag erfordert die Aufmerksamkeit der Temmitglieder aus einem anderen, oben nicht genannten Grund.
placeholder:
other: Lass uns wissen, worüber du dir Sorgen machst
community_specific:
name:
other: a community-specific reason
other: ein Community-spezifischer Grund
desc:
other: Diese Frage entspricht nicht den Gemeinschaftsrichtlinien.
not_clarity:
name:
other: needs details or clarity
other: benötigt Details oder Klarheit
desc:
other: Diese Frage enthält derzeit mehrere Fragen in einer. Sie sollte sich auf ein einziges Problem konzentrieren.
looks_ok:
name:
other: looks OK
other: sieht OK aus
desc:
other: Dieser Beitrag ist gut so wie er ist und nicht von schlechter Qualität.
needs_edit:
name:
other: needs edit, and I did it
other: muss bearbeitet werden, und ich habe es getan
desc:
other: Verbessere und korrigiere Probleme mit diesem Beitrag selbst.
needs_close:
name:
other: needs close
other: muss geschlossen werden
desc:
other: Eine geschlossene Frage kann nicht beantwortet werden, aber du kannst sie trotzdem bearbeiten, abstimmen und kommentieren.
needs_delete:
name:
other: needs delete
other: muss gelöscht werden
desc:
other: Dieser Beitrag wird gelöscht.
question:
close:
duplicate:
name:
other: spam
other: Spam
desc:
other: Diese Frage ist bereits gestellt worden und hat bereits eine Antwort.
guideline:
@@ -405,7 +410,7 @@ backend:
reply_to_you:
other: hat Ihnen geantwortet
mention_you:
other: mentioned you
other: hat dich erwähnt
your_question_is_closed:
other: Deine Frage wurde geschlossen
your_question_was_deleted:
@@ -415,23 +420,23 @@ backend:
your_comment_was_deleted:
other: Dein Kommentar wurde gelöscht
up_voted_question:
other: upvoted question
other: positiv bewertete Frage
down_voted_question:
other: downvoted question
other: negativ bewertete Frage
up_voted_answer:
other: upvoted answer
other: positiv bewertete Antwort
down_voted_answer:
other: downvoted answer
other: negativ bewertete Antwort
up_voted_comment:
other: upvoted comment
other: positiv bewerteter Kommentar
invited_you_to_answer:
other: invited you to answer
other: hat dich eingeladen, zu antworten
email_tpl:
change_email:
title:
other: "[{{.SiteName}}] Bestätige deine neue E-Mail-Adresse"
body:
other: "Bestätige deine neue E-Mail-Adresse für {{.SiteName}}, indem du auf den folgenden Link klickst:<br> <a href='{{.ChangeEmailUrl}}' target='_blank'>{{.ChangeEmailUrl}} </a><br><br>\n\nWenn du diese Änderung nicht beantragt hast, ignoriere bitte diese E-Mail."
other: "Bestätige deine neue E-Mail-Adresse für {{.SiteName}}, indem du auf den folgenden Link klickst:<br>\n<a href='{{.ChangeEmailUrl}}' target='_blank'>{{.ChangeEmailUrl}}</a><br><br>\n\nWenn du diese Änderung nicht beantragt hast, ignoriere bitte diese E-Mail."
new_answer:
title:
other: "[{{.SiteName}}] {{.DisplayName}} hat deine Frage beantwortet"
@@ -446,7 +451,7 @@ backend:
title:
other: "[{{.SiteName}}] {{.DisplayName}} hat deinen Beitrag kommentiert"
body:
other: "<a href='{{.CommentUrl}}'>{{.QuestionTitle}}</a><br><br>\n\n{{.DisplayName}}:<br>\n<blockquote>{{.CommentSummary}}</blockquote><br>\n<a href='{{.CommentUrl}}'>Auf {{.SiteName}} ansehen</a><br><br>\n\n--<br>\n<small><a href='{{.UnsubscribeUrl}}'>Abbstellen</a></small>"
other: "<a href='{{.CommentUrl}}'>{{.QuestionTitle}}</a><br><br>\n\n{{.DisplayName}}:<br>\n<blockquote>{{.CommentSummary}}</blockquote><br>\n<a href='{{.CommentUrl}}'>Auf {{.SiteName}} ansehen</a><br><br>\n\n--<br>\n<small><a href='{{.UnsubscribeUrl}}'>Abbestellen</a></small>"
new_question:
title:
other: "[{{.SiteName}}] Neue Frage: {{.QuestionTitle}}"
@@ -469,23 +474,23 @@ backend:
other: "Dies ist eine Test-Email."
action_activity_type:
upvote:
other: upvote
other: positiv bewerten
upvoted:
other: upvoted
other: positiv bewertet
downvote:
other: downvote
other: negativ bewerten
downvoted:
other: downvoted
other: negativ bewertet
accept:
other: accept
other: akzeptieren
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
other: akzeptiert
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: Wie man formatiert
desc: >-
<ul class="mb-0"><li><p class="mb-2">um Links zu erstellen</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 gibt zurück zwischen Absätzen</p></li><li><p class="mb-2"><em>_italic_</em> oder **<strong>fett</strong>**</p></li><li><p class="mb-2">Code um 4 Leerzeichen einrücken</p></li><li><p class="mb-2">Zitat durch Platzieren von <code>&gt;</code> am Zeilenanfang</p></li><li><p class="mb-2">Backtick-Escapes <code>`like _this_`</code></p></li><li><p class="mb-2">erzeuge Codezäune mit Backticks <code>`</code></p><pre class="mb-0"><code>```<br/>code hier<br/>```</code></pre></li></ul>
<ul class="mb-0"><li><p class="mb-2">um Links</p><pre class="mb-2"><code>&lt;https://url.com&gt;<br/><br/>[Titel](https://url.com)</code></pre></li><li><p class="mb-2">Zwischen den Absätzen Zeilenumbrüche einfügen</p></li><li><p class="mb-2"><em>_italic_</em> oder **<strong>fett</strong>**</p></li><li><p class="mb-2">Code um 4 Leerzeichen einrücken</p></li><li><p class="mb-2">Zitat durch Setzen von <code>&gt; </code> am Anfang der Zeile</p></li><li><p class="mb-2">Backtick-Escapes <code>`wie _this_`</code></p></li><li><p class="mb-2">Codeumrandungen mit Backticks <code>`</code></p><pre class="mb-0"><code>`<br/>Code hier<br/>``</code></pre></li></ul>
pagination:
prev: Zurück
next: Weiter
@@ -514,19 +519,20 @@ ui:
change_email: E-Mails ändern
install: Installation beantworten
upgrade: Antwort-Upgrade
maintenance: Website-Pflege
maintenance: Website-Wartung
users: Benutzer
oauth_callback: In Bearbeitung
http_404: HTTP-Fehler 404
http_50X: HTTP-Fehler 500
http_403: HTTP Fehler 403
logout: Log Out
notifications:
title: Benachrichtigungen
inbox: Posteingang
achievement: Erfolge
new_alerts: Neue Benachrichtigungen
all_read: Alle als gelesen markieren
show_more: Mehr Anzeigen
show_more: Mehr anzeigen
someone: Jemand
inbox_type:
all: Alle
@@ -550,7 +556,7 @@ ui:
sequence_diagram: Sequenzdiagramm
class_diagram: Klassen Diagramm
state_diagram: Zustandsdiagramm
entity_relationship_diagram: Entity-Relationship-Diagramm
entity_relationship_diagram: Entitätsbeziehungsdiagramm
user_defined_diagram: Benutzerdefiniertes Diagramm
gantt_chart: Gantt-Diagramm
pie_chart: Kuchendiagramm
@@ -598,7 +604,7 @@ ui:
msg:
empty: Datei darf nicht leer sein.
only_image: Nur Bilddateien sind erlaubt.
max_size: Die Dateigröße darf 4MB nicht überschreiten.
max_size: File size cannot exceed 4 MB.
desc:
label: Beschreibung
tab_url: Bild URL
@@ -678,6 +684,12 @@ ui:
character: URL-Slug enthält nicht erlaubten Zeichensatz.
desc:
label: Beschreibung
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: Abbrechen
btn_submit: Senden
btn_post: Neuen Tag erstellen
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: Tag bearbeiten
default_reason: Tag bearbeiten
form:
fields:
revision:
label: Revision
display_name:
label: Anzeigename
slug_name:
label: URL-Slug
info: 'Muss den Zeichensatz "a-z", "0-9", "+ # - ." verwenden'
desc:
label: Beschreibung
edit_summary:
label: Zusammenfassung bearbeiten
placeholder: >-
Erkläre kurz deine Änderungen (korrigierte Rechtschreibung, korrigierte Grammatik, verbesserte Formatierung)
default_first_reason: Schlagwort hinzufügen
btn_save_edits: Änderungen speichern
btn_cancel: Stornieren
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "vor {{count}}h"
hour: stunde
day: tag
hours: hours
days: days
comment:
btn_add_comment: Einen Kommentar hinzufügen
reply_to: Antwort an
@@ -740,15 +740,16 @@ ui:
btn_flag: Flagge
btn_save_edits: Änderungen speichern
btn_cancel: Stornieren
show_more: Weitere Kommentare anzeigen
show_more: "{{count}} more comments"
tip_question: >-
Verwende Kommentare, um nach weiteren Informationen zu fragen oder Verbesserungen vorzuschlagen. Vermeide es, Fragen in Kommentaren zu beantworten.
tip_answer: >-
Verwende Stellungsnahmen, um anderen Nutzern zu antworten oder sie über Änderungen zu informieren. Wenn du neue Informationen hinzufügst, bearbeite deinen Beitrag, anstatt zu kommentieren.
tip_vote: It adds something useful to the post
tip_vote: Es fügt dem Beitrag etwas Nützliches hinzu
edit_answer:
title: Antwort bearbeiten
default_reason: Antwort bearbeiten
default_first_reason: Antwort hinzufügen
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Frage hinzufügen
edit_title: Frage bearbeiten
default_reason: Frage bearbeiten
default_first_reason: Frage hinzufügen
similar_questions: Ähnliche Fragen
form:
fields:
@@ -808,7 +810,7 @@ ui:
Erkläre kurz deine Änderungen (korrigierte Rechtschreibung, korrigierte Grammatik, verbesserte Formatierung)
btn_post_question: Poste deine Frage
btn_save_edits: Änderungen speichern
answer_question: Answer your own question
answer_question: Eigene Frage beantworten
post_question&answer: Poste deine Frage und Antwort
tag_selector:
add_btn: Schlagwort hinzufügen
@@ -833,7 +835,7 @@ ui:
placeholder: Suchen
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Ändern
loading: wird geladen...
@@ -868,14 +870,14 @@ ui:
range: Name mit bis zu 30 Zeichen.
character: 'Muss den Zeichensatz "a-z", "0-9", " - . _" verwenden'
email:
label: Email
label: E-Mail
msg:
empty: E-Mail-Feld darf nicht leer sein.
password:
label: Passwort
msg:
empty: Passwort-Feld darf nicht leer sein.
different: The passwords entered on both sides are inconsistent
different: Die beiden eingegebenen Passwörter stimmen nicht überein
account_forgot:
page_title: Dein Passwort vergessen
btn_name: Schicke mir eine E-Mail zur Wiederherstellung
@@ -963,10 +965,10 @@ ui:
label: Standort
placeholder: "Stadt, Land"
notification:
heading: Benachrichtigungen
email: E-Mail
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email-Benachrichtigungen
label: Inbox notifications
description: Antworten auf deine Fragen, Kommentare, Einladungen und mehr.
all_new_question:
label: Alle neuen Fragen
@@ -1010,7 +1012,7 @@ ui:
modal_confirm_btn: Entfernen
remove_success: Erfolgreich entfernt
toast:
update: update success
update: Aktualisierung erfolgreich
update_password: Das Kennwort wurde erfolgreich geändert.
flag_success: Danke fürs Markieren.
forbidden_operate_self: Verboten, an sich selbst zu operieren
@@ -1021,7 +1023,7 @@ ui:
answers: antworten
invite_to_answer:
title: Menschen gefragt
desc: Lade Leute ein, von denen du denkst, dass sie die Antwort wissen könnten.
desc: Select people who you think might know the answer.
invite: Zur Antwort einladen
add: Personen hinzufügen
search: Personen suchen
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Akzeptiert
write_answer:
title: Deine Antwort
edit_answer: Edit my existing answer
btn_name: Poste deine Antwort
add_another_answer: Weitere Antwort hinzufügen
confirm_title: Antworten fortsetzen
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Suchergebnisse
keywords: Schlüsselwörter
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Dashboard
welcome: Willkommen beim Answer-Admin!
site_statistics: Site-Statistiken
site_statistics: Site statistics
questions: "Fragen:"
answers: "Antworten:"
comments: "Kommentare:"
votes: "Stimmen:"
active_users: "Aktive Benutzer:"
users: "Users:"
flags: "Meldungen:"
site_health_status: Website-Gesundheitsstatus
site_health_status: Site health status
version: "Version:"
https: "HTTPS:"
uploading_files: "Dateien hochladen:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Zeitzone:"
system_info: Systeminformationen
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Verwendeter Speicher:"
uptime: "Betriebszeit:"
answer_links: Antwortlinks
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Dokumentation
feedback: Rückmeldung
support: Unterstützung
@@ -1384,6 +1402,8 @@ ui:
allowed: Erlaubt
enabled: Ermöglicht
disabled: Behinderte
writable: Writable
not_writable: Not writable
flags:
title: Meldungen
pending: Ausstehend
@@ -1467,7 +1487,7 @@ ui:
text: Dont check this if you wish to only delete the users account.
suspend_user:
title: Suspend this user
content: A suspended user can't log in.
content: Ein gesperrter Benutzer kann sich nicht einloggen.
questions:
page_title: Fragen
normal: Normal
@@ -1594,6 +1614,10 @@ ui:
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."
write:
page_title: Schreiben
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Empfohlene Tags
text: "Bitte gib den Tag-Slug oben ein, ein Tag pro Zeile."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themen
text: Wähle ein bestehendes Thema aus.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar-Stil
text: Wähle ein bestehendes Thema aus.
label: Navbar style
primary_color:
label: Primärfarbe
label: Primary color
text: Ändere die Farben, die von deinen Themes verwendet werden
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Privatgelände
label: Anmeldung erforderlich
text: Nur angemeldete Benutzer können auf diese Community zugreifen.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installierte Plugins
plugin_link: Plugins erweitern und ergänzen die Funktionalität von Answer. Du kannst Plugins im <1>Answer Plugin Repository</1> finden.
+3 -3
View File
@@ -360,7 +360,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -433,7 +433,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -471,7 +471,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+58 -32
View File
@@ -83,6 +83,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
rank_answer_add_label:
@@ -268,6 +271,8 @@ backend:
other: You cannot modify your role.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
page_access_denied:
@@ -534,6 +539,7 @@ ui:
http_404: HTTP Error 404
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
notifications:
title: Notifications
inbox: Inbox
@@ -612,7 +618,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description
tab_url: Image URL
@@ -692,6 +698,13 @@ ui:
character: URL slug contains unallowed character set.
desc:
label: Description
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar,
improved formatting)
btn_cancel: Cancel
btn_submit: Submit
btn_post: Post new tag
@@ -721,22 +734,6 @@ ui:
title: Edit Tag
default_reason: Edit tag
default_first_reason: Add tag
form:
fields:
revision:
label: Revision
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc:
label: Description
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar,
improved formatting)
btn_save_edits: Save edits
btn_cancel: Cancel
dates:
@@ -749,6 +746,8 @@ ui:
x_hours_ago: "{{count}}h ago"
hour: hour
day: day
hours: hours
days: days
comment:
btn_add_comment: Add comment
reply_to: Reply to
@@ -758,7 +757,7 @@ ui:
btn_flag: Flag
btn_save_edits: Save edits
btn_cancel: Cancel
show_more: Show more comments
show_more: "{{count}} more comments"
tip_question: >-
Use comments to ask for more information or suggest improvements. Avoid
answering questions in comments.
@@ -857,7 +856,7 @@ ui:
placeholder: Search
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A
communities.<br />Made with love © {{cc}}.
upload_img:
name: Change
@@ -994,10 +993,10 @@ ui:
label: Location
placeholder: "City, Country"
notification:
heading: Notifications
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1053,7 +1052,7 @@ ui:
answers: answers
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1084,6 +1083,7 @@ ui:
btn_accepted: Accepted
write_answer:
title: Your Answer
edit_answer: Edit my existing answer
btn_name: Post your answer
add_another_answer: Add another answer
confirm_title: Continue to answer
@@ -1153,6 +1153,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Search Results
keywords: Keywords
@@ -1401,23 +1406,33 @@ ui:
dashboard:
title: Dashboard
welcome: Welcome to Answer Admin!
site_statistics: Site Statistics
site_statistics: Site statistics
questions: "Questions:"
answers: "Answers:"
comments: "Comments:"
votes: "Votes:"
active_users: "Active users:"
users: "Users:"
flags: "Flags:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Version:"
https: "HTTPS:"
uploading_files: "Uploading files:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Timezone:"
system_info: System Info
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Storage used:"
uptime: "Uptime:"
answer_links: Answer Links
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Documents
feedback: Feedback
support: Support
@@ -1432,6 +1447,8 @@ ui:
allowed: Allowed
enabled: Enabled
disabled: Disabled
writable: Writable
not_writable: Not writable
flags:
title: Flags
pending: Pending
@@ -1642,6 +1659,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: Write
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1665,11 +1686,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1705,6 +1727,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+424 -420
View File
File diff suppressed because it is too large Load Diff
+62 -33
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: سطح ۳ (شهرت بالایی برای نیاز هست برای انجمن های تکمیل)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: سوال بپرس
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: شما نمی توانید وظیفه خود را تغییر دهید.
not_allowed_registration:
other: درحال حاضر سایت برای ثبت نام باز نیست.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: دسترسی مجاز نیست
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: پذیرفتن
accepted:
other: پذیرفته شده
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: نحوه فرمت کردن
@@ -520,6 +525,7 @@ ui:
http_404: خطای 404 HTTP
http_50X: خطای 500 HTTP
http_403: خطای 403 HTTP
logout: Log Out
notifications:
title: اعلانات
inbox: پیغام‌های دریافتی
@@ -598,7 +604,7 @@ ui:
msg:
empty: فایل نمی تواند خالی باشد.
only_image: فقط فایل های تصویری مجاز هستند.
max_size: حجم فایل نمی تواند بیشتر از ۴ مگابایت باشد.
max_size: File size cannot exceed 4 MB.
desc:
label: توضیحات
tab_url: لینک عکس
@@ -678,6 +684,12 @@ ui:
character: نامک آدرس شامل کلمات غیر مجاز می باشد.
desc:
label: توضیحات
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: لغو
btn_submit: ثبت
btn_post: پست کردن تگ جدید
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: ویرایش تگ‌
default_reason: ویرایش تگ‌
form:
fields:
revision:
label: بازنگری
display_name:
label: نام
slug_name:
label: نامک نشانی اینترنتی
info: 'باید از حروف "a-z", "0-9", "+ # -" استفاده شود'
desc:
label: توضیحات
edit_summary:
label: ویرایش خلاصه
placeholder: >-
بطور خلاصه تغییرات را توضیح دهید (اصلاح املایی، اصلاح دستورزبان،‌ بهبود فرمت دهی)
default_first_reason: Add tag
btn_save_edits: ذخیره ویرایشها
btn_cancel: لغو
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}}ساعت پیش"
hour: ساعت
day: روز
hours: hours
days: days
comment:
btn_add_comment: افزودن نظر
reply_to: پاسخ به
@@ -740,7 +740,7 @@ ui:
btn_flag: نشان
btn_save_edits: ذخیره ویرایشها
btn_cancel: لغو
show_more: نمایش نظرات بیشتر
show_more: "{{count}} more comments"
tip_question: >-
از نظرات برای درخواست اطلاعات بیشتر یا پیشنهاد بهبود استفاده کنید. از پاسخ دادن به سوالات در نظرات خودداری کنید.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: ویرایش جواب
default_reason: ویرایش جواب
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: سوالی اضافه کنید
edit_title: سوال را ویرایش کنید
default_reason: سوال را ویرایش کنید
default_first_reason: Add question
similar_questions: سؤال های مشابه
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: جستجو
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: تغییر
loading: درحال بارگذاری...
@@ -963,10 +965,10 @@ ui:
label: موقعیت
placeholder: "شهر، کشور"
notification:
heading: اعلانات
email: ایمیل
heading: Email Notifications
turn_on: Turn on
inbox:
label: اعلانات ایمیل
label: Inbox notifications
description: پاسخ به سوالات خود،‌ نظرات،‌ دعوت ها،‌و بیشتر.
all_new_question:
label: تمامی سوالات جدید
@@ -1021,7 +1023,7 @@ ui:
answers: جواب ها
invite_to_answer:
title: مردم پرسیدند
desc: افرادی را دعوت کنید که فکر می کنید ممکن است پاسخ را بدانند.
desc: Select people who you think might know the answer.
invite: دعوت به پاسخ
add: افزودن افراد
search: جستجوی افراد
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: پذیرفته شده
write_answer:
title: پاسخ شما
edit_answer: Edit my existing answer
btn_name: پاسخ خود را ارسال کنید
add_another_answer: پاسخ دیگری اضافه کنید
confirm_title: به پاسخ دادن ادامه دهید
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: نتایج جستجو
keywords: کلیدواژه ها
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: داشبرد
welcome: به پاسخ مدیر خوش آمدید!
site_statistics: آمار سایت
site_statistics: Site statistics
questions: "سوالات:"
answers: "جواب ها:"
comments: "نظرات:"
votes: "آرا:"
active_users: "کاربران فعال:"
users: "Users:"
flags: "علامت‌ها:"
site_health_status: وضعیت سلامت سایت
site_health_status: Site health status
version: "نسخه:"
https: "HTTPS:"
uploading_files: "فایل های در حال آپلود:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "منطقه زمانی:"
system_info: اطلاعات سیستم
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "فضای استفاده شده:"
uptime: "پایداری:"
answer_links: لینک های Answer
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: اسناد
feedback: ﺑﺎﺯﺧﻮﺭﺩ
support: پشتیبانی
@@ -1384,6 +1402,8 @@ ui:
allowed: مجاز
enabled: فعال
disabled: غیرفعال
writable: Writable
not_writable: Not writable
flags:
title: علامت‌ها
pending: در حالت انتظار
@@ -1594,6 +1614,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: نوشتن
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+3 -3
View File
@@ -360,7 +360,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -433,7 +433,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -471,7 +471,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+281 -252
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -360,7 +360,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -433,7 +433,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -471,7 +471,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+3 -3
View File
@@ -360,7 +360,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -433,7 +433,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -471,7 +471,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+3 -3
View File
@@ -355,7 +355,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -428,7 +428,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -466,7 +466,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+62 -33
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: Anda tidak dapat memodifikasi role anda sendiri.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: Cara memformat
@@ -520,6 +525,7 @@ ui:
http_404: HTTP Error 404
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
notifications:
title: Pemberitahuan
inbox: Kotak Masuk
@@ -598,7 +604,7 @@ ui:
msg:
empty: File tidak boleh kosong.
only_image: Hanya file Gambar yang diperbolehkan.
max_size: Ukuran file tidak boleh melebihi 4MB.
max_size: Ukuran file tidak boleh melebihi 4 MB.
desc:
label: Description
tab_url: URL gambar
@@ -678,6 +684,12 @@ ui:
character: URL slug contains unallowed character set.
desc:
label: Description
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: Cancel
btn_submit: Submit
btn_post: Post new tag
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: Ubah Tag
default_reason: Sunting tag
form:
fields:
revision:
label: Revisi
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Harus menggunakan set karakter "a-z", "0-9", "+ # - ."'
desc:
label: Deskripsi
edit_summary:
label: Edit summary
placeholder: >-
Jelaskan secara singkat perubahan yang Anda lakukan (ejaan yang diperbaiki, tata bahasa yang diperbaiki, pemformatan yang ditingkatkan)
default_first_reason: Add tag
btn_save_edits: Simpan suntingan
btn_cancel: Batal
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}}h ago"
hour: jam
day: hari
hours: hours
days: days
comment:
btn_add_comment: Tambahkan Komentar
reply_to: Balas ke
@@ -740,7 +740,7 @@ ui:
btn_flag: Flag
btn_save_edits: Simpan suntingan
btn_cancel: Batal
show_more: Show more comments
show_more: "{{count}} more comments"
tip_question: >-
Gunakan komentar untuk meminta informasi lebih lanjut atau menyarankan perbaikan. Hindari menjawab pertanyaan di komentar.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: Sunting jawaban
default_reason: Edit jawaban
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Add Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
similar_questions: Similar questions
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: Cari
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Ubah
loading: sedang memuat...
@@ -963,10 +965,10 @@ ui:
label: Location
placeholder: "City, Country"
notification:
heading: Notifications
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1021,7 +1023,7 @@ ui:
answers: jawaban
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Diterima
write_answer:
title: Jawaban Anda
edit_answer: Edit my existing answer
btn_name: Kirimkan jawaban Anda
add_another_answer: Tambahkan jawaban lain
confirm_title: Lanjutkan menjawab
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Search Results
keywords: Keywords
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Dasbor
welcome: Selamat datang di Answer Admin!
site_statistics: Site Statistics
site_statistics: Site statistics
questions: "Pertanyaan:"
answers: "Jawaban:"
comments: "Komentar:"
votes: "Vote:"
active_users: "Pengguna aktif:"
users: "Users:"
flags: "Flags:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Versi:"
https: "HTTPS:"
uploading_files: "Mengunggah berkas:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Zona Waktu:"
system_info: Informasi Sistem
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Penyimpanan yang terpakai:"
uptime: "Uptime:"
answer_links: Tautan Answer
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Dokumen
feedback: Masukan
support: Dukungan
@@ -1384,6 +1402,8 @@ ui:
allowed: Allowed
enabled: Enabled
disabled: Disabled
writable: Writable
not_writable: Not writable
flags:
title: Flags
pending: Pending
@@ -1594,6 +1614,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: Write
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+62 -33
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: Non puoi modificare il tuo ruolo.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: Come formattare
@@ -520,6 +525,7 @@ ui:
http_404: HTTP Error 404
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
notifications:
title: Notifications
inbox: Inbox
@@ -598,7 +604,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description
tab_url: Image URL
@@ -678,6 +684,12 @@ ui:
character: URL slug contains unallowed character set.
desc:
label: Description
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: Cancel
btn_submit: Submit
btn_post: Post new tag
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: Edit Tag
default_reason: Edit tag
form:
fields:
revision:
label: Revision
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc:
label: Description
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
default_first_reason: Add tag
btn_save_edits: Save edits
btn_cancel: Cancel
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}}h ago"
hour: hour
day: day
hours: hours
days: days
comment:
btn_add_comment: Add comment
reply_to: Reply to
@@ -740,7 +740,7 @@ ui:
btn_flag: Flag
btn_save_edits: Save edits
btn_cancel: Cancel
show_more: Show more comments
show_more: "{{count}} more comments"
tip_question: >-
Use comments to ask for more information or suggest improvements. Avoid answering questions in comments.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: Edit Answer
default_reason: Edit answer
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Add Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
similar_questions: Similar questions
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: Search
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Change
loading: loading...
@@ -963,10 +965,10 @@ ui:
label: Location
placeholder: "City, Country"
notification:
heading: Notifications
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1021,7 +1023,7 @@ ui:
answers: answers
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Accepted
write_answer:
title: Your Answer
edit_answer: Edit my existing answer
btn_name: Post your answer
add_another_answer: Add another answer
confirm_title: Continue to answer
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Search Results
keywords: Keywords
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Dashboard
welcome: Welcome to Answer Admin!
site_statistics: Site Statistics
site_statistics: Site statistics
questions: "Questions:"
answers: "Answers:"
comments: "Comments:"
votes: "Votes:"
active_users: "Active users:"
users: "Users:"
flags: "Flags:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Version:"
https: "HTTPS:"
uploading_files: "Uploading files:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Timezone:"
system_info: System Info
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Storage used:"
uptime: "Uptime:"
answer_links: Answer Links
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Documents
feedback: Feedback
support: Support
@@ -1384,6 +1402,8 @@ ui:
allowed: Allowed
enabled: Enabled
disabled: Disabled
writable: Writable
not_writable: Not writable
flags:
title: Flags
pending: Pending
@@ -1594,6 +1614,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: Write
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+114 -85
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -52,9 +52,9 @@ backend:
unpin:
other: Unpin
show:
other: List
other: リスト
invite_someone_to_answer:
other: Edit
other: 編集
undelete:
other: Undelete
role:
@@ -82,14 +82,17 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
other: 質問する
rank_answer_add_label:
other: Write answer
other: 回答を書く
rank_comment_add_label:
other: Write comment
other: コメントを書く
rank_report_add_label:
other: Flag
other: フラグ
rank_comment_vote_up_label:
other: Upvote comment
rank_link_url_limit_label:
@@ -105,7 +108,7 @@ backend:
rank_invite_someone_to_answer_label:
other: Invite someone to answer
rank_tag_add_label:
other: Create new tag
other: 新しいタグを作成
rank_tag_edit_label:
other: Edit tag description (need to review)
rank_question_edit_label:
@@ -133,7 +136,7 @@ backend:
password:
other: パスワード
pass:
other: Password
other: パスワード
email_or_password_wrong_error:
other: メールアドレスとパスワードが一致しません。
error:
@@ -267,8 +270,10 @@ backend:
other: You cannot modify your role.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
other: アクセスが拒否されました
page_access_denied:
other: You do not have access to this page.
add_bulk_users_format_error:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: How to Format
@@ -520,6 +525,7 @@ ui:
http_404: HTTP エラー 404
http_50X: HTTP エラー 500
http_403: HTTP エラー 403
logout: Log Out
notifications:
title: 通知
inbox: 受信トレイ
@@ -529,16 +535,16 @@ ui:
show_more: もっと見る
someone: Someone
inbox_type:
all: All
posts: Posts
invites: Invites
votes: Votes
all: すべて
posts: 投稿
invites: 招待
votes: 投票
suspended:
title: あなたのアカウントは停止されています。
until_time: "あなたのアカウントは {{ time }} まで停止されました。"
forever: このユーザーは永久に停止されました。
end: You don't meet a community guideline.
contact_us: Contact us
contact_us: お問い合わせ
editor:
blockquote:
text: 引用
@@ -598,7 +604,7 @@ ui:
msg:
empty: ファイルは空にできません。
only_image: 画像ファイルのみが許可されています。
max_size: ファイルサイズは4MBを超えることはできません。
max_size: File size cannot exceed 4 MB.
desc:
label: 説明
tab_url: 画像URL
@@ -670,7 +676,7 @@ ui:
empty: 表示名を入力してください。
range: 表示名は最大 35 文字までです。
slug_name:
label: URL slug
label: URLスラッグ
desc: '文字セット「a-z」、「0-9」、「+ # -」を使用する必要があります。'
msg:
empty: URL スラッグを空にすることはできません。
@@ -678,6 +684,12 @@ ui:
character: URL slug contains unallowed character set.
desc:
label: 説明
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: キャンセル
btn_submit: 送信
btn_post: 新しいタグを投稿
@@ -704,23 +716,9 @@ ui:
edit_tag:
title: タグを編集
default_reason: タグを編集
form:
fields:
revision:
label: Revision
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc:
label: Description
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
default_first_reason: Add tag
btn_save_edits: Save edits
btn_cancel: Cancel
btn_cancel: キャンセル
dates:
long_date: MMM D
long_date_with_year: "MMM D, YYYY"
@@ -729,26 +727,29 @@ ui:
x_seconds_ago: "{{count}}s ago"
x_minutes_ago: "{{count}}m ago"
x_hours_ago: "{{count}}h ago"
hour: hour
day: day
hour:
day:
hours:
days:
comment:
btn_add_comment: Add comment
btn_add_comment: コメントを追加
reply_to: Reply to
btn_reply: Reply
btn_edit: Edit
btn_delete: Delete
btn_flag: Flag
btn_save_edits: Save edits
btn_cancel: Cancel
show_more: Show more comments
btn_reply: 返信
btn_edit: 編集
btn_delete: 削除
btn_flag: フラグ
btn_save_edits: 編集内容を保存
btn_cancel: キャンセル
show_more: "{{count}} more comments"
tip_question: >-
Use comments to ask for more information or suggest improvements. Avoid answering questions in comments.
tip_answer: >-
Use comments to reply to other users or notify them of changes. If you are adding new information, edit your post instead of commenting.
tip_vote: It adds something useful to the post
edit_answer:
title: Edit Answer
default_reason: Edit answer
title: 回答を編集 
default_reason: 回答を編集 
default_first_reason: 回答を追加
form:
fields:
revision:
@@ -762,24 +763,25 @@ ui:
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_save_edits: Save edits
btn_cancel: Cancel
btn_cancel: キャンセル
tags:
title: Tags
title: タグ
sort_buttons:
popular: Popular
name: Name
newest: Newest
button_follow: Follow
button_following: Following
tag_label: questions
search_placeholder: Filter by tag name
popular: 人気
name: 名前
newest: 最新
button_follow: フォロー
button_following: フォロー中
tag_label: 質問
search_placeholder: タグ名でフィルタ
no_desc: The tag has no description.
more: More
ask:
title: Add Question
edit_title: Edit Question
default_reason: Edit question
similar_questions: Similar questions
title: 質問を追加
edit_title: 質問を編集
default_reason: 質問を編集
default_first_reason: 質問を追加
similar_questions: 類似の質問
form:
fields:
revision:
@@ -825,18 +827,18 @@ ui:
profile: Profile
setting: Settings
logout: Log out
admin: Admin
review: Review
bookmark: Bookmarks
admin: 管理者
review: レビュー
bookmark: ブックマーク
moderation: Moderation
search:
placeholder: Search
placeholder: 検索
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Change
loading: loading...
name: 変更
loading: 読み込み中…
pic_auth_code:
title: Captcha
placeholder: Type the text above
@@ -925,7 +927,7 @@ ui:
password_confirm:
label: Confirm new password
settings:
page_title: Settings
page_title: 設定
goto_modify: Go to modify
nav:
profile: Profile
@@ -940,18 +942,18 @@ ui:
msg: Display name cannot be empty.
msg_range: Display name up to 30 characters.
username:
label: Username
label: ユーザー名
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", " - . _"'
avatar:
label: Profile image
label: プロフィール画像
gravatar: Gravatar
gravatar_text: You can change image on
custom: Custom
custom_text: You can upload your image.
default: System
default: システム
msg: Please upload an avatar
bio:
label: About me
@@ -963,10 +965,10 @@ ui:
label: Location
placeholder: "City, Country"
notification:
heading: Notifications
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1021,7 +1023,7 @@ ui:
answers: answers
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Accepted
write_answer:
title: Your Answer
edit_answer: Edit my existing answer
btn_name: Post your answer
add_another_answer: Add another answer
confirm_title: Continue to answer
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Search Results
keywords: Keywords
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: ダッシュボード
welcome: Welcome to Answer Admin!
site_statistics: サイト統計
site_statistics: Site statistics
questions: "質問:"
answers: "回答:"
comments: "評論:"
votes: "投票:"
active_users: "Active users:"
users: "Users:"
flags: "Flags:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Version:"
https: "HTTPS:"
uploading_files: "Uploading files:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Timezone:"
system_info: System Info
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Storage used:"
uptime: "Uptime:"
answer_links: Answer Links
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Documents
feedback: フィードバック
support: サポート
@@ -1384,6 +1402,8 @@ ui:
allowed: Allowed
enabled: Enabled
disabled: Disabled
writable: Writable
not_writable: Not writable
flags:
title: Flags
pending: Pending
@@ -1594,6 +1614,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: Write
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
@@ -1671,7 +1700,7 @@ ui:
plugins:
label: Plugins
text: Select an existing plugin.
name: Name
name: 名前
version: Version
status: Status
action: Action
@@ -1755,7 +1784,7 @@ ui:
comment: Comment
no_data: "We couldn't find anything."
users:
title: Users
title: ユーザー
users_with_the_most_reputation: Users with the highest reputation scores this week
users_with_the_most_vote: Users who voted the most this week
staffs: Our community staff
+63 -34
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: You cannot modify your role.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: How to Format
@@ -520,6 +525,7 @@ ui:
http_404: HTTP Error 404
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
notifications:
title: Notifications
inbox: Inbox
@@ -598,7 +604,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description
tab_url: Image URL
@@ -671,13 +677,19 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
character: URL slug contains unallowed character set.
desc:
label: Description
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: Cancel
btn_submit: Submit
btn_post: Post new tag
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: Edit Tag
default_reason: Edit tag
form:
fields:
revision:
label: Revision
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc:
label: Description
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
default_first_reason: Add tag
btn_save_edits: Save edits
btn_cancel: Cancel
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}}h ago"
hour: hour
day: day
hours: hours
days: days
comment:
btn_add_comment: Add comment
reply_to: Reply to
@@ -740,7 +740,7 @@ ui:
btn_flag: Flag
btn_save_edits: Save edits
btn_cancel: Cancel
show_more: Show more comments
show_more: "{{count}} more comments"
tip_question: >-
Use comments to ask for more information or suggest improvements. Avoid answering questions in comments.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: Edit Answer
default_reason: Edit answer
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Add Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
similar_questions: Similar questions
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: Search
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Change
loading: loading...
@@ -963,10 +965,10 @@ ui:
label: Location
placeholder: "City, Country"
notification:
heading: Notifications
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1021,7 +1023,7 @@ ui:
answers: answers
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Accepted
write_answer:
title: Your Answer
edit_answer: Edit my existing answer
btn_name: Post your answer
add_another_answer: Add another answer
confirm_title: Continue to answer
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Search Results
keywords: Keywords
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Dashboard
welcome: Welcome to Answer Admin!
site_statistics: Site Statistics
site_statistics: Site statistics
questions: "Questions:"
answers: "Answers:"
comments: "Comments:"
votes: "Votes:"
active_users: "Active users:"
users: "Users:"
flags: "Flags:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Version:"
https: "HTTPS:"
uploading_files: "Uploading files:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Timezone:"
system_info: System Info
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Storage used:"
uptime: "Uptime:"
answer_links: Answer Links
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Documents
feedback: Feedback
support: Support
@@ -1384,6 +1402,8 @@ ui:
allowed: Allowed
enabled: Enabled
disabled: Disabled
writable: Writable
not_writable: Not writable
flags:
title: Flags
pending: Pending
@@ -1594,6 +1614,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: Write
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+3 -3
View File
@@ -360,7 +360,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -433,7 +433,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -471,7 +471,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+3 -3
View File
@@ -360,7 +360,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -433,7 +433,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -471,7 +471,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+242 -213
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -360,7 +360,7 @@ ui:
msg:
empty: Arquivo não pode ser vazio.
only_image: Somente um arquivo de imagem é permitido.
max_size: O tamanho do arquivo não pode exceder 4MB.
max_size: O tamanho do arquivo não pode exceder 4 MB.
desc:
label: Descrição (opcional)
tab_url: URL da imagem
+63 -34
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Nível 3 (Alta reputação necessária para a comunidade adulta)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Perguntar
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: Você não pode modificar a sua função.
not_allowed_registration:
other: Atualmente o site não está aberto para cadastro
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Acesso negado
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: aceito
accepted:
other: aceito
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: Como formatar
@@ -520,6 +525,7 @@ ui:
http_404: HTTP Erro 404
http_50X: HTTP Erro 500
http_403: HTTP Erro 403
logout: Log Out
notifications:
title: Notificações
inbox: Caixa de entrada
@@ -598,7 +604,7 @@ ui:
msg:
empty: Arquivo não pode ser vazio.
only_image: Somente um arquivo de imagem é permitido.
max_size: O tamanho do arquivo não pode exceder 4MB.
max_size: O tamanho do arquivo não pode exceder 4 MB.
desc:
label: Descrição (opcional)
tab_url: URL da imagem
@@ -678,6 +684,12 @@ ui:
character: URL slug contém conjunto de caracteres não permitido.
desc:
label: Descrição (opcional)
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: Cancelar
btn_submit: Enviar
btn_post: Postar novo marcador
@@ -704,25 +716,11 @@ ui:
edit_tag:
title: Editar marcador
default_reason: Editar marcador
form:
fields:
revision:
label: Revisão
display_name:
label: Nome de exibição
slug_name:
label: Slug de URL
info: 'Deve usar o conjunto de caracteres "a-z", "0-9", "+ # - ."'
desc:
label: Descrição
edit_summary:
label: Resumo da edição
placeholder: >-
Explique resumidamente suas alterações (ortografia corrigida, gramática corrigida, formatação aprimorada)
default_first_reason: Add tag
btn_save_edits: Salvar edições
btn_cancel: Cancelar
dates:
long_date: D MMM
long_date: D MMM
long_date_with_year: "D MMM, YYYY"
long_date_with_time: "D MMM, YYYY [at] HH:mm"
now: agora
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}}h atrás"
hour: hora
day: dia
hours: hours
days: days
comment:
btn_add_comment: Adicionar comentário
reply_to: Responder a
@@ -740,7 +740,7 @@ ui:
btn_flag: Marcador
btn_save_edits: Salvar edições
btn_cancel: Cancelar
show_more: Mostrar mais comentários
show_more: "{{count}} more comments"
tip_question: >-
Use os comentários para pedir mais informações ou sugerir melhorias. Evite responder perguntas nos comentários.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: Editar Resposta
default_reason: Editar Resposta
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Adicionar Pergunta
edit_title: Editar Pergunta
default_reason: Editar pergunta
default_first_reason: Add question
similar_questions: Similar perguntas
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: Procurar
footer:
build_on: >-
Construído com <1> Answer </1>- o software de código aberto que empodera comunidades de Q&A.<br />Feito com amor © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Mudar
loading: carregando...
@@ -963,10 +965,10 @@ ui:
label: Localização (opcional)
placeholder: "Cidade, País"
notification:
heading: Notificações
email: E-mail
heading: Email Notifications
turn_on: Turn on
inbox:
label: Notificações de email
label: Inbox notifications
description: Responda suas próprias perguntas, comentários, convites e muito mais.
all_new_question:
label: Todas as perguntas novas
@@ -1021,7 +1023,7 @@ ui:
answers: respostas
invite_to_answer:
title: Pessoas Perguntaram
desc: Convidar pessoas que você acha que deve saber a resposta.
desc: Select people who you think might know the answer.
invite: Convidar para responder
add: Adicionar pessoas
search: Procurar pessoas
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Aceito
write_answer:
title: A sua Resposta
edit_answer: Edit my existing answer
btn_name: Publicação a sua resposta
add_another_answer: Adicionar outra resposta
confirm_title: Continuar a responder
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Procurar Resultados
keywords: Palavras-chave
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Painel
welcome: Bem vindo ao Answer Administrador!
site_statistics: Estatísticas do Site
site_statistics: Site statistics
questions: "Perguntas:"
answers: "Respostas:"
comments: "Comentários:"
votes: "Votos:"
active_users: "Usuários ativos:"
users: "Users:"
flags: "Marcadores:"
site_health_status: Estatísticas da saúde do site
site_health_status: Site health status
version: "Versão:"
https: "HTTPS:"
uploading_files: "Enviando arquivos:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Fuso horário:"
system_info: Informações do Sistema
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Armazenamento usado:"
uptime: "Tempo de atividade:"
answer_links: Links das Respostas
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Documentos
feedback: Opinião
support: Supporte
@@ -1384,6 +1402,8 @@ ui:
allowed: Permitido
enabled: Ativo
disabled: Disponível
writable: Writable
not_writable: Not writable
flags:
title: Marcadores
pending: Pendente
@@ -1594,6 +1614,10 @@ ui:
text: "Você pode adicionar termos de conteúdo de serviço aqui. Se você já tem um documento hospedado em outro lugar, forneça a URL completa aqui."
write:
page_title: Escrever
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend Marcadores
text: "Por favor input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Temas
text: Selecionar um tema existente.
color_scheme:
label: Color scheme
navbar_style:
label: Estilo da barra de navegação
text: Selecionar um tema existente.
label: Navbar style
primary_color:
label: Cor Primária
label: Primary color
text: Modifica as cores usadas por seus temas
css_and_html:
page_title: CSS e HTML
@@ -1660,6 +1685,10 @@ ui:
title: Privado
label: Login requirido
text: Somente usuários conectados podem acessar esta comunidade.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Extensões instaladas
plugin_link: Extensões estendem e expandem a funcionalidade da Resposta. Você pode encontrar extensões no <1>Repositório de extensões do Answer</1>.
+1367 -946
View File
File diff suppressed because it is too large Load Diff
+684 -655
View File
File diff suppressed because it is too large Load Diff
+62 -33
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: Svoju rolu nemôžete zmeniť.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: Ako formátovať
@@ -520,6 +525,7 @@ ui:
http_404: HTTP chyba 404
http_50X: HTTP chyba 403
http_403: HTTP Error 403
logout: Log Out
notifications:
title: Oznámenia
inbox: Doručená pošta
@@ -598,7 +604,7 @@ ui:
msg:
empty: Názov súboru nemôže byť prázdny.
only_image: Povolené sú iba obrázkové súbory.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Popis
tab_url: URL obrázka
@@ -678,6 +684,12 @@ ui:
character: URL slug obsahuje nepovolenú znakovú sadu.
desc:
label: Opis
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: Zrušiť
btn_submit: Potvrdiť
btn_post: Post new tag
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: Upraviť značku
default_reason: Upraviť značku
form:
fields:
revision:
label: Revízia
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Musíte použiť znakovú sadu "a-z", "0-9", "+ # - ."'
desc:
label: Opis
edit_summary:
label: Edit summary
placeholder: >-
Stručne vysvetlite svoje zmeny (opravený pravopis, opravená gramatika, vylepšené formátovanie)
default_first_reason: Add tag
btn_save_edits: Uložiť úpravy
btn_cancel: Zrušiť
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "pred {{count}}h"
hour: hodina
day: deň
hours: hours
days: days
comment:
btn_add_comment: Pridať komentár
reply_to: Odpovedať
@@ -740,7 +740,7 @@ ui:
btn_flag: Vlajka
btn_save_edits: Uložiť zmeny
btn_cancel: Zrušiť
show_more: Zobraziť viac komentárov
show_more: "{{count}} more comments"
tip_question: >-
Use comments to ask for more information or suggest improvements. Avoid answering questions in comments.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: Uprav odpoveď
default_reason: Uprav odpoveď
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Pridať otázku
edit_title: Upraviť otázku
default_reason: Upraviť otázku
default_first_reason: Add question
similar_questions: Podobné otázky
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: Vyhľadávanie
footer:
build_on: >-
Postavené na <1> Answer </1> softvéri s otvoreným zdrojom, ktorý poháňa komunity otázok a odpovedí.<br />Vyrobené s láskou © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Zmena
loading: načítavanie...
@@ -963,10 +965,10 @@ ui:
label: Poloha
placeholder: "Mesto, Krajina"
notification:
heading: Oznámenia
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1021,7 +1023,7 @@ ui:
answers: odpovede
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Prijaté
write_answer:
title: Vaša odpoveď
edit_answer: Edit my existing answer
btn_name: Pošlite svoju odpoveď
add_another_answer: Pridajte ďalšiu odpoveď
confirm_title: Pokračovať v odpovedi
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Výsledky vyhľadávania
keywords: Kľúčové slová
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Nástenka
welcome: Vitajte v Administrátorovi odpovedí!
site_statistics: Štatistiky stránky
site_statistics: Site statistics
questions: "Otázky:"
answers: "Odpovede:"
comments: "Komentáre:"
votes: "Hlasy:"
active_users: "Aktívni používatelia:"
users: "Users:"
flags: "Vlajky:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Verzia:"
https: "HTTPS:"
uploading_files: "Nahrávanie súborov:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Časové pásmo:"
system_info: Systémové informácie
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Použité úložisko:"
uptime: "Doba prevádzky:"
answer_links: Odkazy na odpovede
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Dokumenty
feedback: Spätná väzba
support: Podpora
@@ -1384,6 +1402,8 @@ ui:
allowed: Povolené
enabled: Povolené
disabled: Zablokované
writable: Writable
not_writable: Not writable
flags:
title: Vlajky
pending: Prebiehajúce
@@ -1594,6 +1614,10 @@ ui:
text: "Tu môžete pridať obsah zásad ochrany osobných údajov. Ak už máte dokument umiestnený inde, uveďte tu celú URL adresu."
write:
page_title: Písať
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Vyššie zadajte tag slug, jednu značku na riadok."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Témy
text: Vyberte existujúcu tému.
color_scheme:
label: Color scheme
navbar_style:
label: Štýl navigačnej lišty
text: Vyberte existujúcu tému.
label: Navbar style
primary_color:
label: Primárna farba
label: Primary color
text: Upraviť farby používané vašími motívmi
css_and_html:
page_title: CSS a HTML
@@ -1660,6 +1685,10 @@ ui:
title: Súkromné
label: Vyžaduje sa prihlásenie
text: Do tejto komunity majú prístup iba prihlásení používatelia
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+3 -3
View File
@@ -355,7 +355,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -428,7 +428,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -466,7 +466,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+3 -3
View File
@@ -360,7 +360,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description (optional)
tab_url: Image URL
@@ -433,7 +433,7 @@ ui:
range: Display name up to 35 characters.
slug_name:
label: URL Slug
desc: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc: URL slug up to 35 characters.
msg:
empty: URL slug cannot be empty.
range: URL slug up to 35 characters.
@@ -471,7 +471,7 @@ ui:
label: Display Name
slug_name:
label: URL Slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
info: URL slug up to 35 characters.
desc:
label: Description
edit_summary:
+776 -355
View File
File diff suppressed because it is too large Load Diff
+62 -33
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: Kendi rolünüzü değiştiremezsiniz.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: How to Format
@@ -520,6 +525,7 @@ ui:
http_404: HTTP Error 404
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
notifications:
title: Bildirimler
inbox: Gelen Kutusu
@@ -598,7 +604,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description
tab_url: Image URL
@@ -678,6 +684,12 @@ ui:
character: URL slug contains unallowed character set.
desc:
label: Description
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: İptal Et
btn_submit: Gönder
btn_post: Post new tag
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: Etiketi Düzenle
default_reason: Etiketi düzenle
form:
fields:
revision:
label: Revizyon
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc:
label: Açıklama
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
default_first_reason: Add tag
btn_save_edits: Düzenlemeleri kaydet
btn_cancel: Cancel
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}}h ago"
hour: hour
day: day
hours: hours
days: days
comment:
btn_add_comment: Add comment
reply_to: Reply to
@@ -740,7 +740,7 @@ ui:
btn_flag: Flag
btn_save_edits: Save edits
btn_cancel: Cancel
show_more: Show more comments
show_more: "{{count}} more comments"
tip_question: >-
Use comments to ask for more information or suggest improvements. Avoid answering questions in comments.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: Edit Answer
default_reason: Edit answer
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Add Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
similar_questions: Similar questions
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: Search
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Change
loading: loading...
@@ -963,10 +965,10 @@ ui:
label: Location
placeholder: "City, Country"
notification:
heading: Notifications
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1021,7 +1023,7 @@ ui:
answers: answers
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Accepted
write_answer:
title: Your Answer
edit_answer: Edit my existing answer
btn_name: Post your answer
add_another_answer: Add another answer
confirm_title: Continue to answer
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Search Results
keywords: Keywords
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Dashboard
welcome: Welcome to Answer Admin!
site_statistics: Site Statistics
site_statistics: Site statistics
questions: "Questions:"
answers: "Answers:"
comments: "Comments:"
votes: "Votes:"
active_users: "Active users:"
users: "Users:"
flags: "Flags:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Version:"
https: "HTTPS:"
uploading_files: "Uploading files:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Timezone:"
system_info: System Info
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Storage used:"
uptime: "Uptime:"
answer_links: Answer Links
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Documents
feedback: Feedback
support: Support
@@ -1384,6 +1402,8 @@ ui:
allowed: Allowed
enabled: Enabled
disabled: Disabled
writable: Writable
not_writable: Not writable
flags:
title: Flags
pending: Pending
@@ -1594,6 +1614,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: Write
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+62 -33
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: You cannot modify your role.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: How to Format
@@ -520,6 +525,7 @@ ui:
http_404: HTTP Error 404
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
notifications:
title: Notifications
inbox: Inbox
@@ -598,7 +604,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description
tab_url: Image URL
@@ -678,6 +684,12 @@ ui:
character: URL slug contains unallowed character set.
desc:
label: Description
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: Cancel
btn_submit: Submit
btn_post: Post new tag
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: Edit Tag
default_reason: Edit tag
form:
fields:
revision:
label: Revision
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc:
label: Description
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
default_first_reason: Add tag
btn_save_edits: Save edits
btn_cancel: Cancel
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}}h ago"
hour: hour
day: day
hours: hours
days: days
comment:
btn_add_comment: Add comment
reply_to: Reply to
@@ -740,7 +740,7 @@ ui:
btn_flag: Flag
btn_save_edits: Save edits
btn_cancel: Cancel
show_more: Show more comments
show_more: "{{count}} more comments"
tip_question: >-
Use comments to ask for more information or suggest improvements. Avoid answering questions in comments.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: Edit Answer
default_reason: Edit answer
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Add Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
similar_questions: Similar questions
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: Search
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Change
loading: loading...
@@ -963,10 +965,10 @@ ui:
label: Location
placeholder: "City, Country"
notification:
heading: Notifications
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1021,7 +1023,7 @@ ui:
answers: answers
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Accepted
write_answer:
title: Your Answer
edit_answer: Edit my existing answer
btn_name: Post your answer
add_another_answer: Add another answer
confirm_title: Continue to answer
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Search Results
keywords: Keywords
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Dashboard
welcome: Welcome to Answer Admin!
site_statistics: Site Statistics
site_statistics: Site statistics
questions: "Questions:"
answers: "Answers:"
comments: "Comments:"
votes: "Votes:"
active_users: "Active users:"
users: "Users:"
flags: "Flags:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Version:"
https: "HTTPS:"
uploading_files: "Uploading files:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Timezone:"
system_info: System Info
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Storage used:"
uptime: "Uptime:"
answer_links: Answer Links
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Documents
feedback: Feedback
support: Support
@@ -1384,6 +1402,8 @@ ui:
allowed: Allowed
enabled: Enabled
disabled: Disabled
writable: Writable
not_writable: Not writable
flags:
title: Flags
pending: Pending
@@ -1594,6 +1614,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: Write
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+62 -33
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Đặt câu hỏi
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: You cannot modify your role.
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Truy cập bị từ chối
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: How to Format
@@ -520,6 +525,7 @@ ui:
http_404: HTTP Error 404
http_50X: HTTP Error 500
http_403: HTTP Error 403
logout: Log Out
notifications:
title: Notifications
inbox: Inbox
@@ -598,7 +604,7 @@ ui:
msg:
empty: File cannot be empty.
only_image: Only image files are allowed.
max_size: File size cannot exceed 4MB.
max_size: File size cannot exceed 4 MB.
desc:
label: Description
tab_url: Image URL
@@ -678,6 +684,12 @@ ui:
character: URL slug contains unallowed character set.
desc:
label: Description
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: Cancel
btn_submit: Submit
btn_post: Post new tag
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: Edit Tag
default_reason: Edit tag
form:
fields:
revision:
label: Revision
display_name:
label: Display name
slug_name:
label: URL slug
info: 'Must use the character set "a-z", "0-9", "+ # - ."'
desc:
label: Description
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
default_first_reason: Add tag
btn_save_edits: Save edits
btn_cancel: Cancel
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}}h ago"
hour: hour
day: day
hours: hours
days: days
comment:
btn_add_comment: Add comment
reply_to: Reply to
@@ -740,7 +740,7 @@ ui:
btn_flag: Flag
btn_save_edits: Save edits
btn_cancel: Cancel
show_more: Show more comments
show_more: "{{count}} more comments"
tip_question: >-
Use comments to ask for more information or suggest improvements. Avoid answering questions in comments.
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: Edit Answer
default_reason: Edit answer
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: Add Question
edit_title: Edit Question
default_reason: Edit question
default_first_reason: Add question
similar_questions: Similar questions
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: Search
footer:
build_on: >-
Built on <1> Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: Change
loading: loading...
@@ -963,10 +965,10 @@ ui:
label: Location
placeholder: "City, Country"
notification:
heading: Notifications
email: Email
heading: Email Notifications
turn_on: Turn on
inbox:
label: Email notifications
label: Inbox notifications
description: Answers to your questions, comments, invites, and more.
all_new_question:
label: All new questions
@@ -1021,7 +1023,7 @@ ui:
answers: answers
invite_to_answer:
title: People Asked
desc: Invite people who you think might know the answer.
desc: Select people who you think might know the answer.
invite: Invite to answer
add: Add people
search: Search people
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: Accepted
write_answer:
title: Your Answer
edit_answer: Edit my existing answer
btn_name: Post your answer
add_another_answer: Add another answer
confirm_title: Continue to answer
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: Search Results
keywords: Keywords
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: Dashboard
welcome: Welcome to Answer Admin!
site_statistics: Site Statistics
site_statistics: Site statistics
questions: "Questions:"
answers: "Answers:"
comments: "Comments:"
votes: "Votes:"
active_users: "Active users:"
users: "Users:"
flags: "Flags:"
site_health_status: Site Health Status
site_health_status: Site health status
version: "Version:"
https: "HTTPS:"
uploading_files: "Uploading files:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "Timezone:"
system_info: System Info
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "Storage used:"
uptime: "Uptime:"
answer_links: Answer Links
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: Documents
feedback: Feedback
support: Support
@@ -1384,6 +1402,8 @@ ui:
allowed: Allowed
enabled: Enabled
disabled: Disabled
writable: Writable
not_writable: Not writable
flags:
title: Flags
pending: Pending
@@ -1594,6 +1614,10 @@ ui:
text: "You can add privacy policy content here. If you already have a document hosted elsewhere, provide the full URL here."
write:
page_title: Write
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "Please input tag slug above, one tag per line."
@@ -1617,11 +1641,12 @@ ui:
themes:
label: Themes
text: Select an existing theme.
color_scheme:
label: Color scheme
navbar_style:
label: Navbar Style
text: Select an existing theme.
label: Navbar style
primary_color:
label: Primary Color
label: Primary color
text: Modify the colors used by your themes
css_and_html:
page_title: CSS and HTML
@@ -1660,6 +1685,10 @@ ui:
title: Private
label: Login required
text: Only logged in users can access this community.
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+213 -184
View File
File diff suppressed because it is too large Load Diff
+56 -27
View File
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
#The following fields are used for back-end
# The following fields are used for back-end
backend:
base:
success:
@@ -82,6 +82,9 @@ backend:
level_3:
description:
other: Level 3 (high reputation required for mature community)
level_custom:
description:
other: Custom Level
rank_question_add_label:
other: Ask question
rank_answer_add_label:
@@ -267,6 +270,8 @@ backend:
other: 您不能修改自己的角色。
not_allowed_registration:
other: Currently the site is not open for registration.
not_allowed_login_via_password:
other: Currently the site is not allowed to login via password.
access_denied:
other: Access denied
page_access_denied:
@@ -480,7 +485,7 @@ backend:
other: accept
accepted:
other: accepted
#The following fields are used for interface presentation(Front-end)
# The following fields are used for interface presentation(Front-end)
ui:
how_to_format:
title: 如何設定文本格式
@@ -520,6 +525,7 @@ ui:
http_404: HTTP 錯誤 404
http_50X: HTTP 錯誤 500
http_403: HTTP 錯誤 403
logout: Log Out
notifications:
title: 通知
inbox: 收件夾
@@ -678,6 +684,12 @@ ui:
character: URL 固定連結包含非法字元。
desc:
label: 描述
revision:
label: Revision
edit_summary:
label: Edit summary
placeholder: >-
Briefly explain your changes (corrected spelling, fixed grammar, improved formatting)
btn_cancel: 取消
btn_submit: 提交
btn_post: Post new tag
@@ -704,21 +716,7 @@ ui:
edit_tag:
title: 編輯標籤
default_reason: 編輯標籤
form:
fields:
revision:
label: 編輯歷史
display_name:
label: Display name
slug_name:
label: URL slug
info: '必須由 "a-z", "0-9", "+ # - ." 組成'
desc:
label: 描述
edit_summary:
label: Edit summary
placeholder: >-
簡單描述更改原因 (錯別字、文字表達、格式等等)
default_first_reason: Add tag
btn_save_edits: 儲存更改
btn_cancel: 取消
dates:
@@ -731,6 +729,8 @@ ui:
x_hours_ago: "{{count}} 小時前"
hour: 小時
day:
hours: hours
days: days
comment:
btn_add_comment: 添加評論
reply_to: 回復
@@ -740,7 +740,7 @@ ui:
btn_flag: 舉報
btn_save_edits: 保存
btn_cancel: 取消
show_more: 顯示更多評論
show_more: "{{count}}條剩餘評論"
tip_question: >-
通过評論询问更多问题或提出改進建議。避免在評論中回答問題。
tip_answer: >-
@@ -749,6 +749,7 @@ ui:
edit_answer:
title: 編輯回答
default_reason: 編輯回答
default_first_reason: Add answer
form:
fields:
revision:
@@ -779,6 +780,7 @@ ui:
title: 發問
edit_title: 編輯問題
default_reason: 編輯問題
default_first_reason: Add question
similar_questions: 相似的問題
form:
fields:
@@ -833,7 +835,7 @@ ui:
placeholder: 搜尋
footer:
build_on: >-
基於<1>Answer</1>--為問答社群提供動力的開源軟體。<br />Made with love © {{cc}}.
Powered by <1> Apache Answer </1>- the open-source software that powers Q&A communities.<br />Made with love © {{cc}}.
upload_img:
name: 更改
loading: 讀取中...
@@ -964,7 +966,7 @@ ui:
placeholder: "城市, 國家"
notification:
heading: 通知
email: Email
turn_on: Turn on
inbox:
label: Email notifications
description: Answers to your questions, comments, invites, and more.
@@ -1052,6 +1054,7 @@ ui:
btn_accepted: 已被採納
write_answer:
title: 你的回答
edit_answer: Edit my existing answer
btn_name: 提交你的回答
add_another_answer: 添加另一個答案
confirm_title: 繼續回答
@@ -1114,6 +1117,11 @@ ui:
close: Close
reopen: Reopen
ok: OK
light: Light
dark: Dark
system_setting: System setting
default: Default
reset: Reset
search:
title: 搜尋結果
keywords: 關鍵詞
@@ -1353,23 +1361,33 @@ ui:
dashboard:
title: 後台管理
welcome: 歡迎來到 Answer 後台管理!
site_statistics: 站點統計
site_statistics: Site statistics
questions: "問題:"
answers: "回答:"
comments: "評論:"
votes: "投票:"
active_users: "活躍用戶:"
users: "Users:"
flags: "檢舉:"
site_health_status: '健康狀態:'
site_health_status: Site health status
version: "版本"
https: "HTTPS:"
uploading_files: "上傳文件:"
upload_folder: "Upload folder:"
run_mode: "Running mode:"
private: Private
public: Public
smtp: "SMTP:"
timezone: "時區:"
system_info: 系統資訊
system_info: System info
go_version: "Go version:"
database: "Database:"
database_size: "Database size:"
storage_used: "已用儲存空間:"
uptime: "運行時間:"
answer_links: 回答連結
answer_links: Answer links
plugins: Plugins
github: GitHub
blog: Blog
contact: Contact
documents: 文件
feedback: 用戶反饋
support: 支持
@@ -1384,6 +1402,8 @@ ui:
allowed: 允許
enabled: 已啟用
disabled: 停用
writable: Writable
not_writable: Not writable
flags:
title: 檢舉
pending: 等待處理
@@ -1594,6 +1614,10 @@ ui:
text: "您可以在此加入隱私政策內容。如果您已經在別處托管了文檔,請在這裡提供完整的URL。"
write:
page_title: 編輯
restrict_answer:
title: Restrict answer
label: Each user can only write one answer for each question
text: "They can use the edit link to refine and improve their existing answer, instead."
recommend_tags:
label: Recommend tags
text: "請在上方輸入標籤固定連結,每行一個標籤。"
@@ -1617,9 +1641,10 @@ ui:
themes:
label: 主題
text: 選擇一個現有主題。
color_scheme:
label: Color scheme
navbar_style:
label: 導航欄樣式
text: 選擇一個現有主題。
primary_color:
label: 主色調
text: 修改您主題使用的顏色
@@ -1660,6 +1685,10 @@ ui:
title: 非公開的
label: 需要登入
text: 只有登入使用者才能訪問這個社群。
password_login:
title: Password login
label: Allow email and password login
text: "WARNING: If turn off, you may be unable to log in if you have not previously configured other login method."
installed_plugins:
title: Installed Plugins
plugin_link: Plugins extend and expand the functionality of Answer. You may find plugins in the <1>Answer Plugin Repository</1>.
+3 -2
View File
@@ -25,6 +25,7 @@ const (
)
var (
Version string = ""
Revision string = ""
Version = ""
Revision = ""
GoVersion = ""
)
+1 -1
View File
@@ -24,7 +24,7 @@ import "github.com/apache/incubator-answer/internal/base/reason"
type Privilege struct {
Key string `json:"key"`
Label string `json:"label"`
Value int `json:"value"`
Value int `validate:"gte=1" json:"value"`
}
const (
+7
View File
@@ -37,3 +37,10 @@ const (
// PermalinkQuestionIDByShortID /questions/11
PermalinkQuestionIDByShortID
)
const (
ColorSchemeDefault = "default"
ColorSchemeLight = "light"
ColorSchemeDark = "dark"
ColorSchemeSystem = "system"
)
+37 -4
View File
@@ -89,18 +89,51 @@ func (am *AuthUserMiddleware) EjectUserBySiteInfo() gin.HandlerFunc {
return
}
_, isLogin := ctx.Get(ctxUUIDKey)
if !isLogin {
// If site in private mode, user must login.
userInfo := GetUserInfoFromContext(ctx)
if userInfo == nil {
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
ctx.Abort()
return
}
// If user is not active, eject user.
if userInfo.EmailStatus != entity.EmailStatusAvailable {
handler.HandleResponse(ctx, errors.Forbidden(reason.EmailNeedToBeVerified),
&schema.ForbiddenResp{Type: schema.ForbiddenReasonTypeInactive})
ctx.Abort()
return
}
ctx.Next()
}
}
// MustAuth auth user info. If the user does not log in, an unauthenticated error is displayed
func (am *AuthUserMiddleware) MustAuth() gin.HandlerFunc {
// MustAuthWithoutAccountAvailable auth user info, any login user can access though user is not active.
func (am *AuthUserMiddleware) MustAuthWithoutAccountAvailable() 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
}
userInfo, err := am.authService.GetUserCacheInfo(ctx, token)
if err != nil || userInfo == nil {
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
ctx.Abort()
return
}
if userInfo.UserStatus == entity.UserStatusDeleted {
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
ctx.Abort()
return
}
ctx.Set(ctxUUIDKey, userInfo)
ctx.Next()
}
}
// MustAuthAndAccountAvailable auth user info and check user status, only allow active user access.
func (am *AuthUserMiddleware) MustAuthAndAccountAvailable() gin.HandlerFunc {
return func(ctx *gin.Context) {
token := ExtractToken(ctx)
if len(token) == 0 {
+4 -3
View File
@@ -20,9 +20,10 @@
package reason
const (
PrivilegeLevel1Desc = "privilege.level_1.description"
PrivilegeLevel2Desc = "privilege.level_2.description"
PrivilegeLevel3Desc = "privilege.level_3.description"
PrivilegeLevel1Desc = "privilege.level_1.description"
PrivilegeLevel2Desc = "privilege.level_2.description"
PrivilegeLevel3Desc = "privilege.level_3.description"
PrivilegeLevelCustomDesc = "privilege.level_custom.description"
RankQuestionAddLabel = "privilege.rank_question_add_label"
RankAnswerAddLabel = "privilege.rank_answer_add_label"
+2
View File
@@ -49,6 +49,7 @@ const (
AnswerCannotDeleted = "error.answer.cannot_deleted"
AnswerCannotUpdate = "error.answer.cannot_update"
AnswerCannotAddByClosedQuestion = "error.answer.question_closed_cannot_add"
AnswerRestrictAnswer = "error.answer.restrict_answer"
CommentEditWithoutPermission = "error.comment.edit_without_permission"
DisallowVote = "error.object.disallow_vote"
DisallowFollow = "error.object.disallow_follow"
@@ -92,6 +93,7 @@ const (
UserCannotUpdateYourRole = "error.user.cannot_update_your_role"
TagCannotSetSynonymAsItself = "error.tag.cannot_set_synonym_as_itself"
NotAllowedRegistration = "error.user.not_allowed_registration"
NotAllowedLoginViaPassword = "error.user.not_allowed_login_via_password"
SMTPConfigFromNameCannotBeEmail = "error.smtp.config_from_name_cannot_be_email"
AdminCannotUpdateTheirPassword = "error.admin.cannot_update_their_password"
AdminCannotModifySelfStatus = "error.admin.cannot_modify_self_status"
+6 -1
View File
@@ -74,9 +74,14 @@ func NewHTTPServer(debug bool,
unAuthV1.Use(authUserMiddleware.Auth(), authUserMiddleware.EjectUserBySiteInfo())
answerRouter.RegisterUnAuthAnswerAPIRouter(unAuthV1)
// register api that must be authenticated but no need to check account status
authWithoutStatusV1 := r.Group("/answer/api/v1")
authWithoutStatusV1.Use(authUserMiddleware.MustAuthWithoutAccountAvailable())
answerRouter.RegisterAuthUserWithAnyStatusAnswerAPIRouter(authWithoutStatusV1)
// register api that must be authenticated
authV1 := r.Group("/answer/api/v1")
authV1.Use(authUserMiddleware.MustAuth())
authV1.Use(authUserMiddleware.MustAuthAndAccountAvailable())
answerRouter.RegisterAnswerAPIRouter(authV1)
adminauthV1 := r.Group("/answer/admin/api")
+84
View File
@@ -0,0 +1,84 @@
/*
* 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 cli
import (
"context"
"encoding/json"
"fmt"
"github.com/apache/incubator-answer/internal/base/constant"
"github.com/apache/incubator-answer/internal/base/data"
"github.com/apache/incubator-answer/internal/entity"
"xorm.io/xorm"
)
type ConfigField struct {
AllowPasswordLogin bool `json:"allow_password_login"`
}
// SetDefaultConfig set default config
func SetDefaultConfig(dbConf *data.Database, cacheConf *data.CacheConf, field *ConfigField) error {
db, err := data.NewDB(false, dbConf)
if err != nil {
return err
}
defer db.Close()
cache, cacheCleanup, err := data.NewCache(cacheConf)
if err != nil {
fmt.Println("new cache failed")
}
defer func() {
if cache != nil {
cache.Flush(context.Background())
cacheCleanup()
}
}()
if field.AllowPasswordLogin {
return defaultLoginConfig(db)
}
return nil
}
func defaultLoginConfig(x *xorm.Engine) (err error) {
fmt.Println("set default login config")
loginSiteInfo := &entity.SiteInfo{
Type: constant.SiteTypeLogin,
}
exist, err := x.Get(loginSiteInfo)
if err != nil {
return fmt.Errorf("get config failed: %w", err)
}
if exist {
var content map[string]any
_ = json.Unmarshal([]byte(loginSiteInfo.Content), &content)
content["allow_password_login"] = true
dataByte, _ := json.Marshal(content)
loginSiteInfo.Content = string(dataByte)
_, err = x.ID(loginSiteInfo.ID).Cols("content").Update(loginSiteInfo)
if err != nil {
return fmt.Errorf("update site info failed: %w", err)
}
}
return nil
}
+30 -8
View File
@@ -34,6 +34,7 @@ import (
"github.com/apache/incubator-answer/internal/service/action"
"github.com/apache/incubator-answer/internal/service/permission"
"github.com/apache/incubator-answer/internal/service/rank"
"github.com/apache/incubator-answer/internal/service/siteinfo_common"
"github.com/apache/incubator-answer/pkg/uid"
"github.com/gin-gonic/gin"
"github.com/segmentfault/pacman/errors"
@@ -41,10 +42,11 @@ import (
// AnswerController answer controller
type AnswerController struct {
answerService *service.AnswerService
rankService *rank.RankService
actionService *action.CaptchaService
rateLimitMiddleware *middleware.RateLimitMiddleware
answerService *service.AnswerService
rankService *rank.RankService
actionService *action.CaptchaService
siteInfoCommonService siteinfo_common.SiteInfoCommonService
rateLimitMiddleware *middleware.RateLimitMiddleware
}
// NewAnswerController new controller
@@ -52,13 +54,15 @@ func NewAnswerController(
answerService *service.AnswerService,
rankService *rank.RankService,
actionService *action.CaptchaService,
siteInfoCommonService siteinfo_common.SiteInfoCommonService,
rateLimitMiddleware *middleware.RateLimitMiddleware,
) *AnswerController {
return &AnswerController{
answerService: answerService,
rankService: rankService,
actionService: actionService,
rateLimitMiddleware: rateLimitMiddleware,
answerService: answerService,
rankService: rankService,
actionService: actionService,
siteInfoCommonService: siteInfoCommonService,
rateLimitMiddleware: rateLimitMiddleware,
}
}
@@ -238,6 +242,24 @@ func (ac *AnswerController) Add(ctx *gin.Context) {
return
}
write, err := ac.siteInfoCommonService.GetSiteWrite(ctx)
if err != nil {
handler.HandleResponse(ctx, err, nil)
return
}
if write.RestrictAnswer {
// check if there's already an answer by this user
ids, err := ac.answerService.GetCountByUserIDQuestionID(ctx, req.UserID, req.QuestionID)
if err != nil {
handler.HandleResponse(ctx, err, nil)
return
}
if len(ids) >= 1 {
handler.HandleResponse(ctx, errors.Forbidden(reason.AnswerRestrictAnswer), nil)
return
}
}
answerID, err := ac.answerService.Insert(ctx, req)
if err != nil {
handler.HandleResponse(ctx, err, nil)
+3 -18
View File
@@ -22,14 +22,10 @@ package controller
import (
"github.com/apache/incubator-answer/internal/base/handler"
"github.com/apache/incubator-answer/internal/base/middleware"
"github.com/apache/incubator-answer/internal/base/reason"
"github.com/apache/incubator-answer/internal/schema"
"github.com/apache/incubator-answer/internal/service"
"github.com/apache/incubator-answer/pkg/converter"
"github.com/apache/incubator-answer/pkg/uid"
"github.com/gin-gonic/gin"
"github.com/jinzhu/copier"
"github.com/segmentfault/pacman/errors"
)
// CollectionController collection controller
@@ -57,21 +53,10 @@ func (cc *CollectionController) CollectionSwitch(ctx *gin.Context) {
if handler.BindAndCheck(ctx, req) {
return
}
req.ObjectID = uid.DeShortID(req.ObjectID)
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
dto := &schema.CollectionSwitchDTO{}
_ = copier.Copy(dto, req)
dto.UserID = middleware.GetLoginUserIDFromContext(ctx)
if converter.StringToInt64(req.ObjectID) < 1 {
return
}
if converter.StringToInt64(dto.UserID) < 1 {
handler.HandleResponse(ctx, errors.Unauthorized(reason.UnauthorizedError), nil)
return
}
resp, err := cc.collectionService.CollectionSwitch(ctx, dto)
resp, err := cc.collectionService.CollectionSwitch(ctx, req)
handler.HandleResponse(ctx, err, resp)
}
+1
View File
@@ -46,4 +46,5 @@ var ProviderSetController = wire.NewSet(
NewConnectorController,
NewUserCenterController,
NewPermissionController,
NewUserPluginController,
)
+6 -1
View File
@@ -656,10 +656,15 @@ func (qc *QuestionController) UpdateQuestion(ctx *gin.Context) {
handler.HandleResponse(ctx, err, resp)
return
}
respInfo, ok := resp.(*schema.QuestionInfo)
if !ok {
handler.HandleResponse(ctx, err, resp)
return
}
if !isAdmin || !linkUrlLimitUser {
qc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionEdit, req.UserID)
}
handler.HandleResponse(ctx, nil, &schema.UpdateQuestionResp{WaitForReview: !req.NoNeedReview})
handler.HandleResponse(ctx, nil, &schema.UpdateQuestionResp{UrlTitle: respInfo.UrlTitle, WaitForReview: !req.NoNeedReview})
}
// QuestionRecover recover deleted question
@@ -87,6 +87,10 @@ func (sc *SiteInfoController) GetSiteInfo(ctx *gin.Context) {
if err != nil {
log.Error(err)
}
resp.Write, err = sc.siteInfoService.GetSiteWrite(ctx)
if err != nil {
log.Error(err)
}
handler.HandleResponse(ctx, nil, resp)
}
+3 -1
View File
@@ -22,6 +22,7 @@ package controller
import (
"encoding/json"
"fmt"
"github.com/apache/incubator-answer/internal/entity"
"html/template"
"net/http"
"regexp"
@@ -318,7 +319,7 @@ func (tc *TemplateController) QuestionInfo(ctx *gin.Context) {
return
}
siteInfo.Canonical = fmt.Sprintf("%s/questions/%s/%s", siteInfo.General.SiteUrl, id, encodeTitle)
if siteInfo.SiteSeo.Permalink == constant.PermalinkQuestionID {
if siteInfo.SiteSeo.Permalink == constant.PermalinkQuestionID || siteInfo.SiteSeo.Permalink == constant.PermalinkQuestionIDByShortID {
siteInfo.Canonical = fmt.Sprintf("%s/questions/%s", siteInfo.General.SiteUrl, id)
}
jsonLD := &schema.QAPageJsonLD{}
@@ -376,6 +377,7 @@ func (tc *TemplateController) QuestionInfo(ctx *gin.Context) {
"detail": detail,
"answers": answers,
"comments": comments,
"noindex": detail.Show == entity.QuestionHide,
})
}
+3 -3
View File
@@ -384,7 +384,7 @@ func (uc *UserController) UserModifyPassWord(ctx *gin.Context) {
req.AccessToken = middleware.ExtractToken(ctx)
isAdmin := middleware.GetUserIsAdminModerator(ctx)
if !isAdmin {
captchaPass := uc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionPassword, req.UserID,
captchaPass := uc.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionEditUserinfo, req.UserID,
req.CaptchaID, req.CaptchaCode)
if !captchaPass {
errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{
@@ -394,7 +394,7 @@ func (uc *UserController) UserModifyPassWord(ctx *gin.Context) {
handler.HandleResponse(ctx, errors.BadRequest(reason.CaptchaVerificationFailed), errFields)
return
}
_, err := uc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionPassword, req.UserID)
_, err := uc.actionService.ActionRecordAdd(ctx, entity.CaptchaActionEditUserinfo, req.UserID)
if err != nil {
log.Error(err)
}
@@ -424,7 +424,7 @@ func (uc *UserController) UserModifyPassWord(ctx *gin.Context) {
}
err = uc.userService.UserModifyPassword(ctx, req)
if err == nil {
uc.actionService.ActionRecordDel(ctx, entity.CaptchaActionPassword, req.UserID)
uc.actionService.ActionRecordDel(ctx, entity.CaptchaActionEditUserinfo, req.UserID)
}
handler.HandleResponse(ctx, err, nil)
}
@@ -0,0 +1,153 @@
/*
* 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 controller
import (
"encoding/json"
"github.com/apache/incubator-answer/internal/base/middleware"
"github.com/apache/incubator-answer/internal/base/reason"
"github.com/segmentfault/pacman/errors"
"net/http"
"github.com/apache/incubator-answer/internal/base/handler"
"github.com/apache/incubator-answer/internal/schema"
"github.com/apache/incubator-answer/internal/service/plugin_common"
"github.com/apache/incubator-answer/plugin"
"github.com/gin-gonic/gin"
)
// UserPluginController role controller
type UserPluginController struct {
pluginCommonService *plugin_common.PluginCommonService
}
// NewUserPluginController new controller
func NewUserPluginController(pluginCommonService *plugin_common.PluginCommonService) *UserPluginController {
return &UserPluginController{pluginCommonService: pluginCommonService}
}
// GetUserPluginList get plugin list that used for user.
// @Summary get plugin list that used for user.
// @Description get plugin list that used for user.
// @Tags UserPlugin
// @Security ApiKeyAuth
// @Accept json
// @Produce json
// @Success 200 {object} handler.RespBody{data=[]schema.GetUserPluginListResp}
// @Router /answer/api/v1/user/plugin/configs [get]
func (pc *UserPluginController) GetUserPluginList(ctx *gin.Context) {
resp := make([]*schema.GetUserPluginListResp, 0)
_ = plugin.CallUserConfig(func(base plugin.UserConfig) error {
info := base.Info()
if plugin.StatusManager.IsEnabled(info.SlugName) {
resp = append(resp, &schema.GetUserPluginListResp{
Name: info.Name.Translate(ctx),
SlugName: info.SlugName,
})
}
return nil
})
handler.HandleResponse(ctx, nil, resp)
}
// GetUserPluginConfig get user plugin config
// @Summary get user plugin config
// @Description get user plugin config
// @Tags UserPlugin
// @Security ApiKeyAuth
// @Produce json
// @Param plugin_slug_name query string true "plugin_slug_name"
// @Success 200 {object} handler.RespBody{data=schema.GetPluginConfigResp}
// @Router /answer/api/v1/user/plugin/config [get]
func (pc *UserPluginController) GetUserPluginConfig(ctx *gin.Context) {
req := &schema.GetUserPluginConfigReq{}
if handler.BindAndCheck(ctx, req) {
return
}
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
resp := &schema.GetUserPluginConfigResp{}
_ = plugin.CallUserConfig(func(fn plugin.UserConfig) error {
if fn.Info().SlugName != req.PluginSlugName {
return nil
}
info := fn.Info()
resp.Name = info.Name.Translate(ctx)
resp.SlugName = info.SlugName
resp.SetConfigFields(ctx, fn.UserConfigFields())
return nil
})
configValue, err := pc.pluginCommonService.GetUserPluginConfig(ctx, req)
if err != nil {
handler.HandleResponse(ctx, err, nil)
return
}
if len(configValue) > 0 {
configValueMapping := make(map[string]any)
_ = json.Unmarshal([]byte(configValue), &configValueMapping)
for _, field := range resp.ConfigFields {
if value, ok := configValueMapping[field.Name]; ok {
field.Value = value
}
}
}
handler.HandleResponse(ctx, err, resp)
}
// UpdatePluginUserConfig update user plugin config
// @Summary update user plugin config
// @Description update user plugin config
// @Tags UserPlugin
// @Accept json
// @Produce json
// @Security ApiKeyAuth
// @Param data body schema.UpdateUserPluginConfigReq true "UpdatePluginConfigReq"
// @Success 200 {object} handler.RespBody
// @Router /answer/api/v1/user/plugin/config [put]
func (pc *UserPluginController) UpdatePluginUserConfig(ctx *gin.Context) {
req := &schema.UpdateUserPluginConfigReq{}
if handler.BindAndCheck(ctx, req) {
return
}
if !plugin.StatusManager.IsEnabled(req.PluginSlugName) {
handler.HandleResponse(ctx, errors.New(http.StatusBadRequest, reason.RequestFormatError), nil)
return
}
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
configFields, _ := json.Marshal(req.ConfigFields)
err := plugin.CallUserConfig(func(fn plugin.UserConfig) error {
if fn.Info().SlugName == req.PluginSlugName {
return fn.UserConfigReceiver(req.UserID, configFields)
}
return nil
})
if err != nil {
handler.HandleResponse(ctx, err, nil)
return
}
err = pc.pluginCommonService.UpdatePluginUserConfig(ctx, req)
handler.HandleResponse(ctx, err, nil)
}
@@ -31,12 +31,12 @@ import (
// PluginController role controller
type PluginController struct {
PluginCommonService *plugin_common.PluginCommonService
pluginCommonService *plugin_common.PluginCommonService
}
// NewPluginController new controller
func NewPluginController(PluginCommonService *plugin_common.PluginCommonService) *PluginController {
return &PluginController{PluginCommonService: PluginCommonService}
func NewPluginController(pluginCommonService *plugin_common.PluginCommonService) *PluginController {
return &PluginController{pluginCommonService: pluginCommonService}
}
// GetAllPluginStatus get all plugins status
@@ -150,7 +150,7 @@ func (pc *PluginController) UpdatePluginStatus(ctx *gin.Context) {
}
plugin.StatusManager.Enable(req.PluginSlugName, req.Enabled)
err := pc.PluginCommonService.UpdatePluginStatus(ctx)
err := pc.pluginCommonService.UpdatePluginStatus(ctx)
handler.HandleResponse(ctx, err, nil)
}
@@ -220,6 +220,6 @@ func (pc *PluginController) UpdatePluginConfig(ctx *gin.Context) {
return
}
err = pc.PluginCommonService.UpdatePluginConfig(ctx, req)
err = pc.pluginCommonService.UpdatePluginConfig(ctx, req)
handler.HandleResponse(ctx, err, nil)
}
@@ -0,0 +1,33 @@
/*
* 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 entity
// PluginUserConfig plugin config
type PluginUserConfig struct {
ID int `xorm:"not null pk autoincr INT(11) id"`
UserID string `xorm:"not null default 0 BIGINT(20) UNIQUE(uk_up) user_id"`
PluginSlugName string `xorm:"VARCHAR(128) UNIQUE(uk_up) plugin_slug_name"`
Value string `xorm:"TEXT value"`
}
// TableName config table name
func (PluginUserConfig) TableName() string {
return "plugin_user_config"
}
+2 -1
View File
@@ -56,7 +56,7 @@ type User struct {
Status int `xorm:"not null default 1 INT(11) status"`
AuthorityGroup int `xorm:"not null default 1 INT(11) authority_group"`
DisplayName string `xorm:"not null default '' VARCHAR(30) display_name"`
Avatar string `xorm:"not null default '' VARCHAR(255) avatar"`
Avatar string `xorm:"not null default '' VARCHAR(1024) avatar"`
Mobile string `xorm:"not null VARCHAR(20) mobile"`
Bio string `xorm:"not null TEXT bio"`
BioHTML string `xorm:"not null TEXT bio_html"`
@@ -65,6 +65,7 @@ type User struct {
IPInfo string `xorm:"not null default '' VARCHAR(255) ip_info"`
IsAdmin bool `xorm:"not null default false BOOL is_admin"`
Language string `xorm:"not null default '' VARCHAR(100) language"`
ColorScheme string `xorm:"not null default '' VARCHAR(100) color_scheme"`
}
// TableName user table name
+14
View File
@@ -72,6 +72,7 @@ func (m *Mentor) InitDB() error {
m.do("init site info seo config", m.initSiteInfoSEOConfig)
m.do("init site info user config", m.initSiteInfoUsersConfig)
m.do("init site info privilege rank", m.initSiteInfoPrivilegeRank)
m.do("init site info write", m.initSiteInfoWrite)
return m.err
}
@@ -179,6 +180,7 @@ func (m *Mentor) initSiteInfoLoginConfig() {
loginConfig := map[string]bool{
"allow_new_registrations": true,
"allow_email_registrations": true,
"allow_password_login": true,
"login_required": m.userData.LoginRequired,
}
loginConfigDataBytes, _ := json.Marshal(loginConfig)
@@ -241,3 +243,15 @@ func (m *Mentor) initSiteInfoPrivilegeRank() {
Status: 1,
})
}
func (m *Mentor) initSiteInfoWrite() {
writeData := map[string]interface{}{
"restrict_answer": true,
}
writeDataBytes, _ := json.Marshal(writeData)
_, m.err = m.engine.Context(m.ctx).Insert(&entity.SiteInfo{
Type: "write",
Content: string(writeDataBytes),
Status: 1,
})
}
+1
View File
@@ -67,6 +67,7 @@ var (
&entity.PluginConfig{},
&entity.UserExternalLogin{},
&entity.UserNotificationConfig{},
&entity.PluginUserConfig{},
}
roles = []*entity.Role{
+3 -1
View File
@@ -93,6 +93,8 @@ var migrations = []Migration{
NewMigration("v1.1.2", "add notification config", addNoticeConfig, true),
NewMigration("v1.1.3", "set default user notification config", setDefaultUserNotificationConfig, false),
NewMigration("v1.2.0", "add recover answer permission", addRecoverPermission, true),
NewMigration("v1.2.1", "add password login control", addPasswordLoginControl, true),
NewMigration("v1.2.5", "add notification plugin and theme config", addNotificationPluginAndThemeConfig, true),
}
func GetMigrations() []Migration {
@@ -129,7 +131,7 @@ func ExpectedVersion() int64 {
func Migrate(debug bool, dbConf *data.Database, cacheConf *data.CacheConf, upgradeToSpecificVersion string) error {
cache, cacheCleanup, err := data.NewCache(cacheConf)
if err != nil {
fmt.Println("new check failed:", err.Error())
fmt.Println("new cache failed:", err.Error())
}
engine, err := data.NewDB(debug, dbConf)
if err != nil {
+75
View File
@@ -0,0 +1,75 @@
/*
* 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 migrations
import (
"context"
"encoding/json"
"fmt"
"github.com/apache/incubator-answer/internal/base/constant"
"github.com/apache/incubator-answer/internal/entity"
"github.com/apache/incubator-answer/internal/schema"
"xorm.io/xorm"
)
func addPasswordLoginControl(ctx context.Context, x *xorm.Engine) error {
loginSiteInfo := &entity.SiteInfo{
Type: constant.SiteTypeLogin,
}
exist, err := x.Context(ctx).Get(loginSiteInfo)
if err != nil {
return fmt.Errorf("get config failed: %w", err)
}
if exist {
content := &schema.SiteLoginReq{}
_ = json.Unmarshal([]byte(loginSiteInfo.Content), content)
content.AllowPasswordLogin = true
data, _ := json.Marshal(content)
loginSiteInfo.Content = string(data)
_, err = x.Context(ctx).ID(loginSiteInfo.ID).Cols("content").Update(loginSiteInfo)
if err != nil {
return fmt.Errorf("update site info failed: %w", err)
}
}
writeSiteInfo := &entity.SiteInfo{
Type: constant.SiteTypeWrite,
}
exist, err = x.Context(ctx).Get(writeSiteInfo)
if err != nil {
return fmt.Errorf("get config failed: %w", err)
}
if exist {
content := &schema.SiteWriteReq{}
_ = json.Unmarshal([]byte(writeSiteInfo.Content), content)
content.RestrictAnswer = true
data, _ := json.Marshal(content)
writeSiteInfo.Content = string(data)
_, err = x.Context(ctx).ID(writeSiteInfo.ID).Cols("content").Update(writeSiteInfo)
if err != nil {
return fmt.Errorf("update site info failed: %w", err)
}
}
type User struct {
Avatar string `xorm:"not null default '' VARCHAR(1024) avatar"`
}
return x.Context(ctx).Sync(new(User))
}
+34
View File
@@ -0,0 +1,34 @@
/*
* 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 migrations
import (
"context"
"github.com/apache/incubator-answer/internal/entity"
"xorm.io/xorm"
)
func addNotificationPluginAndThemeConfig(ctx context.Context, x *xorm.Engine) error {
type User struct {
ID string `xorm:"not null pk autoincr BIGINT(20) id"`
ColorScheme string `xorm:"not null default '' VARCHAR(100) color_scheme"`
}
return x.Context(ctx).Sync(new(entity.PluginUserConfig), new(User))
}

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