mirror of
https://github.com/opf/openproject.git
synced 2026-06-14 03:30:14 +00:00
Merge branch 'dev' into more-visible-scopes
This commit is contained in:
@@ -41,5 +41,7 @@ frontend/node_modules
|
||||
node_modules
|
||||
# travis
|
||||
vendor/bundle
|
||||
# Local checkout; all-in-one copies hocuspocus from its dedicated image.
|
||||
vendor/hocuspocus
|
||||
/public/assets
|
||||
/config/frontend_assets.manifest.json
|
||||
|
||||
@@ -16,7 +16,6 @@ jobs:
|
||||
outputs:
|
||||
tag: ${{ steps.compute.outputs.tag }}
|
||||
branch: ${{ steps.compute.outputs.branch }}
|
||||
version: ${{ steps.compute.outputs.version }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
@@ -42,25 +41,11 @@ jobs:
|
||||
BRANCH_REF="dev"
|
||||
fi
|
||||
|
||||
# version strips the v prefix (v17.1.0 => 17.1.0) for hocuspocus docker tags
|
||||
VERSION="${TAG_REF#v}"
|
||||
|
||||
echo "branch=$BRANCH_REF" | tee -a "$GITHUB_OUTPUT"
|
||||
echo "tag=$TAG_REF" | tee -a "$GITHUB_OUTPUT"
|
||||
echo "version=$VERSION" | tee -a "$GITHUB_OUTPUT"
|
||||
|
||||
build-hocuspocus:
|
||||
needs: compute-inputs
|
||||
uses: opf/op-blocknote-hocuspocus/.github/workflows/docker-build.yml@dev
|
||||
with:
|
||||
ref: refs/tags/${{ needs.compute-inputs.outputs.tag }}
|
||||
tags: |
|
||||
openproject/hocuspocus:latest
|
||||
openproject/hocuspocus:${{ needs.compute-inputs.outputs.version }}
|
||||
secrets: inherit
|
||||
|
||||
build:
|
||||
needs: [compute-inputs, build-hocuspocus]
|
||||
needs: compute-inputs
|
||||
uses: ./.github/workflows/docker.yml
|
||||
with:
|
||||
branch: ${{ needs.compute-inputs.outputs.branch }}
|
||||
|
||||
@@ -255,23 +255,12 @@ jobs:
|
||||
if [ -d vendor/bundle.bak ]; then
|
||||
mv vendor/bundle.bak vendor/bundle
|
||||
fi
|
||||
- name: Test
|
||||
# We only test the native container. If that fails the builds for the others
|
||||
# will be cancelled as well.
|
||||
if: matrix.platform == 'linux/amd64' && matrix.target == 'all-in-one'
|
||||
- name: Validate image
|
||||
run: |
|
||||
docker run \
|
||||
--name openproject \
|
||||
-d -p 8080:80 --platform ${{ matrix.platform }} \
|
||||
-e SUPERVISORD_LOG_LEVEL=debug \
|
||||
-e OPENPROJECT_LOGIN__REQUIRED=false \
|
||||
-e OPENPROJECT_HTTPS=false \
|
||||
${{ steps.build.outputs.imageid }}
|
||||
|
||||
sleep 60
|
||||
|
||||
docker logs openproject --tail 300
|
||||
wget -O- --retry-on-http-error=503,502 --retry-connrefused http://localhost:8080/api/v3
|
||||
./script/ci/docker_validate_image.sh \
|
||||
--image "${{ steps.build.outputs.imageid }}" \
|
||||
--target "${{ matrix.target }}" \
|
||||
--platform "${{ matrix.platform }}"
|
||||
- name: Push image
|
||||
id: push
|
||||
uses: docker/build-push-action@v6
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
name: Test seeding in all locales
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 2 * * 0' # Weekly on Sunday at 2 AM UTC
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
ref:
|
||||
description: 'Git ref to test (branch, tag, or SHA). Defaults to latest release branch.'
|
||||
required: false
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
prepare:
|
||||
if: github.repository == 'opf/openproject'
|
||||
name: Prepare
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
locales: ${{ steps.list.outputs.locales }}
|
||||
ref: ${{ steps.use_input_or_find_latest_release.outputs.ref }}
|
||||
steps:
|
||||
- name: Determine git ref to test seeding in
|
||||
id: use_input_or_find_latest_release
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
INPUT_REF: ${{ inputs.ref }}
|
||||
run: |
|
||||
if [ -n "$INPUT_REF" ]; then
|
||||
echo "ref=$INPUT_REF" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
BRANCH=$(gh api repos/opf/openproject/branches --paginate --jq '.[].name' | grep '^release/' | sort --version-sort | tail -1)
|
||||
if [ -z "$BRANCH" ]; then
|
||||
echo "Error: no release branch found"
|
||||
exit 1
|
||||
fi
|
||||
echo "Found latest release branch: $BRANCH"
|
||||
echo "ref=$BRANCH" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Print ref to summary
|
||||
run: echo "Testing seeding on **${{ steps.use_input_or_find_latest_release.outputs.ref }}**" >> "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ steps.use_input_or_find_latest_release.outputs.ref }}
|
||||
|
||||
- name: List available locales
|
||||
id: list
|
||||
run: |
|
||||
locales=$(ruby script/i18n/test_seed_all_locales --list)
|
||||
echo "locales=$locales" >> "$GITHUB_OUTPUT"
|
||||
|
||||
seed:
|
||||
needs: prepare
|
||||
if: github.repository == 'opf/openproject'
|
||||
name: Seed in ${{ matrix.locale }} for ${{ matrix.edition }} edition
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
locale: ${{ fromJson(needs.prepare.outputs.locales) }}
|
||||
edition: [standard, bim]
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
ports:
|
||||
- 5432:5432
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/openproject_seed_test
|
||||
RAILS_ENV: development
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ needs.prepare.outputs.ref }}
|
||||
|
||||
- name: Install system dependencies
|
||||
run: sudo apt-get update && sudo apt-get install -y libpq-dev
|
||||
|
||||
- name: Setup Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Configure database
|
||||
run: |
|
||||
cat > config/database.yml <<'EOF'
|
||||
development:
|
||||
url: <%= ENV["DATABASE_URL"] %>
|
||||
EOF
|
||||
|
||||
- name: Seed in locale ${{ matrix.locale }} for ${{ matrix.edition }} edition
|
||||
env:
|
||||
SILENCE_SQL_LOGS: 1
|
||||
OPENPROJECT_EDITION: ${{ matrix.edition }}
|
||||
run: ruby script/i18n/test_seed_all_locales ${{ matrix.locale }}
|
||||
@@ -198,6 +198,11 @@ Rails/I18nLocaleAssignment:
|
||||
Exclude:
|
||||
- "spec/**/*.rb"
|
||||
|
||||
Rails/I18nLocaleTexts:
|
||||
Enabled: true
|
||||
Exclude:
|
||||
- "spec/**/*.rb"
|
||||
|
||||
# We have config.active_record.belongs_to_required_by_default = false ,
|
||||
# which means, we do have to declare presence validators on belongs_to relations.
|
||||
Rails/RedundantPresenceValidationOnBelongsTo:
|
||||
|
||||
@@ -41,7 +41,7 @@ gem "activemodel-serializers-xml", "~> 1.0.1"
|
||||
gem "activerecord-import", "~> 2.2.0"
|
||||
gem "activerecord-session_store", "~> 2.2.0"
|
||||
gem "ox"
|
||||
gem "rails", "~> 8.0.4"
|
||||
gem "rails", "~> 8.1.2"
|
||||
gem "responders", "~> 3.2"
|
||||
|
||||
gem "ffi", "~> 1.15"
|
||||
@@ -163,7 +163,7 @@ gem "matrix", "~> 0.4.3"
|
||||
|
||||
gem "mcp", "~> 0.4.0"
|
||||
|
||||
gem "meta-tags", "~> 2.22.2"
|
||||
gem "meta-tags", "~> 2.22.3"
|
||||
|
||||
gem "paper_trail", "~> 17.0.0"
|
||||
|
||||
|
||||
+84
-80
@@ -223,29 +223,31 @@ GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
Ascii85 (2.0.1)
|
||||
actioncable (8.0.4)
|
||||
actionpack (= 8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
action_text-trix (2.1.16)
|
||||
railties
|
||||
actioncable (8.1.2)
|
||||
actionpack (= 8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (>= 0.6.1)
|
||||
zeitwerk (~> 2.6)
|
||||
actionmailbox (8.0.4)
|
||||
actionpack (= 8.0.4)
|
||||
activejob (= 8.0.4)
|
||||
activerecord (= 8.0.4)
|
||||
activestorage (= 8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
actionmailbox (8.1.2)
|
||||
actionpack (= 8.1.2)
|
||||
activejob (= 8.1.2)
|
||||
activerecord (= 8.1.2)
|
||||
activestorage (= 8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
mail (>= 2.8.0)
|
||||
actionmailer (8.0.4)
|
||||
actionpack (= 8.0.4)
|
||||
actionview (= 8.0.4)
|
||||
activejob (= 8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
actionmailer (8.1.2)
|
||||
actionpack (= 8.1.2)
|
||||
actionview (= 8.1.2)
|
||||
activejob (= 8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
mail (>= 2.8.0)
|
||||
rails-dom-testing (~> 2.2)
|
||||
actionpack (8.0.4)
|
||||
actionview (= 8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
actionpack (8.1.2)
|
||||
actionview (= 8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
nokogiri (>= 1.8.5)
|
||||
rack (>= 2.2.4)
|
||||
rack-session (>= 1.0.1)
|
||||
@@ -256,33 +258,34 @@ GEM
|
||||
actionpack-xml_parser (2.0.1)
|
||||
actionpack (>= 5.0)
|
||||
railties (>= 5.0)
|
||||
actiontext (8.0.4)
|
||||
actionpack (= 8.0.4)
|
||||
activerecord (= 8.0.4)
|
||||
activestorage (= 8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
actiontext (8.1.2)
|
||||
action_text-trix (~> 2.1.15)
|
||||
actionpack (= 8.1.2)
|
||||
activerecord (= 8.1.2)
|
||||
activestorage (= 8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
globalid (>= 0.6.0)
|
||||
nokogiri (>= 1.8.5)
|
||||
actionview (8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
actionview (8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.11)
|
||||
rails-dom-testing (~> 2.2)
|
||||
rails-html-sanitizer (~> 1.6)
|
||||
active_record_doctor (2.0.1)
|
||||
activerecord (>= 7.0.0)
|
||||
activejob (8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
activejob (8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
globalid (>= 0.3.6)
|
||||
activemodel (8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
activemodel (8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
activemodel-serializers-xml (1.0.3)
|
||||
activemodel (>= 5.0.0.a)
|
||||
activesupport (>= 5.0.0.a)
|
||||
builder (~> 3.1)
|
||||
activerecord (8.0.4)
|
||||
activemodel (= 8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
activerecord (8.1.2)
|
||||
activemodel (= 8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
timeout (>= 0.4.0)
|
||||
activerecord-import (2.2.0)
|
||||
activerecord (>= 4.2)
|
||||
@@ -294,20 +297,20 @@ GEM
|
||||
cgi (>= 0.3.6)
|
||||
rack (>= 2.0.8, < 4)
|
||||
railties (>= 7.0)
|
||||
activestorage (8.0.4)
|
||||
actionpack (= 8.0.4)
|
||||
activejob (= 8.0.4)
|
||||
activerecord (= 8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
activestorage (8.1.2)
|
||||
actionpack (= 8.1.2)
|
||||
activejob (= 8.1.2)
|
||||
activerecord (= 8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
marcel (~> 1.0)
|
||||
activesupport (8.0.4)
|
||||
activesupport (8.1.2)
|
||||
base64
|
||||
benchmark (>= 0.3)
|
||||
bigdecimal
|
||||
concurrent-ruby (~> 1.0, >= 1.3.1)
|
||||
connection_pool (>= 2.2.5)
|
||||
drb
|
||||
i18n (>= 1.6, < 2)
|
||||
json
|
||||
logger (>= 1.4.2)
|
||||
minitest (>= 5.1)
|
||||
securerandom (>= 0.3)
|
||||
@@ -556,7 +559,7 @@ GEM
|
||||
factory_bot_rails (6.5.1)
|
||||
factory_bot (~> 6.5)
|
||||
railties (>= 6.1.0)
|
||||
faraday (2.14.0)
|
||||
faraday (2.14.1)
|
||||
faraday-net_http (>= 2.0, < 3.5)
|
||||
json
|
||||
logger
|
||||
@@ -724,7 +727,7 @@ GEM
|
||||
reline (>= 0.4.2)
|
||||
iso8601 (0.13.0)
|
||||
jmespath (1.6.2)
|
||||
json (2.18.0)
|
||||
json (2.18.1)
|
||||
json-jwt (1.17.0)
|
||||
activesupport (>= 4.2)
|
||||
aes_key_wrap
|
||||
@@ -803,8 +806,8 @@ GEM
|
||||
json_rpc_handler (~> 0.1)
|
||||
messagebird-rest (5.0.0)
|
||||
jwt (< 4)
|
||||
meta-tags (2.22.2)
|
||||
actionpack (>= 6.0.0, < 8.2)
|
||||
meta-tags (2.22.3)
|
||||
actionpack (>= 6.0.0)
|
||||
method_source (1.1.0)
|
||||
mime-types (3.7.0)
|
||||
logger
|
||||
@@ -1106,7 +1109,7 @@ GEM
|
||||
prawn-table (0.2.2)
|
||||
prawn (>= 1.3.0, < 3.0.0)
|
||||
prettyprint (0.2.0)
|
||||
prism (1.8.0)
|
||||
prism (1.9.0)
|
||||
prometheus-client-mmap (1.5.0)
|
||||
base64
|
||||
bigdecimal
|
||||
@@ -1199,20 +1202,20 @@ GEM
|
||||
rackup (1.0.1)
|
||||
rack (< 3)
|
||||
webrick
|
||||
rails (8.0.4)
|
||||
actioncable (= 8.0.4)
|
||||
actionmailbox (= 8.0.4)
|
||||
actionmailer (= 8.0.4)
|
||||
actionpack (= 8.0.4)
|
||||
actiontext (= 8.0.4)
|
||||
actionview (= 8.0.4)
|
||||
activejob (= 8.0.4)
|
||||
activemodel (= 8.0.4)
|
||||
activerecord (= 8.0.4)
|
||||
activestorage (= 8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
rails (8.1.2)
|
||||
actioncable (= 8.1.2)
|
||||
actionmailbox (= 8.1.2)
|
||||
actionmailer (= 8.1.2)
|
||||
actionpack (= 8.1.2)
|
||||
actiontext (= 8.1.2)
|
||||
actionview (= 8.1.2)
|
||||
activejob (= 8.1.2)
|
||||
activemodel (= 8.1.2)
|
||||
activerecord (= 8.1.2)
|
||||
activestorage (= 8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
bundler (>= 1.15.0)
|
||||
railties (= 8.0.4)
|
||||
railties (= 8.1.2)
|
||||
rails-controller-testing (1.0.5)
|
||||
actionpack (>= 5.0.1.rc1)
|
||||
actionview (>= 5.0.1.rc1)
|
||||
@@ -1227,9 +1230,9 @@ GEM
|
||||
rails-i18n (8.1.0)
|
||||
i18n (>= 0.7, < 2)
|
||||
railties (>= 8.0.0, < 9)
|
||||
railties (8.0.4)
|
||||
actionpack (= 8.0.4)
|
||||
activesupport (= 8.0.4)
|
||||
railties (8.1.2)
|
||||
actionpack (= 8.1.2)
|
||||
activesupport (= 8.1.2)
|
||||
irb (~> 1.13)
|
||||
rackup (>= 1.0.0)
|
||||
rake (>= 12.2)
|
||||
@@ -1423,7 +1426,7 @@ GEM
|
||||
unicode-display_width (>= 1.1.1, < 4)
|
||||
test-prof (1.4.4)
|
||||
text-hyphen (1.5.0)
|
||||
thor (1.4.0)
|
||||
thor (1.5.0)
|
||||
thread_safe (0.3.6)
|
||||
timecop (0.9.10)
|
||||
timeout (0.6.0)
|
||||
@@ -1623,7 +1626,7 @@ DEPENDENCIES
|
||||
matrix (~> 0.4.3)
|
||||
mcp (~> 0.4.0)
|
||||
md_to_pdf!
|
||||
meta-tags (~> 2.22.2)
|
||||
meta-tags (~> 2.22.3)
|
||||
mini_magick (~> 5.3.0)
|
||||
multi_json (~> 1.19.0)
|
||||
my_page!
|
||||
@@ -1686,7 +1689,7 @@ DEPENDENCIES
|
||||
rack-test (~> 2.2.0)
|
||||
rack-timeout (~> 0.7.0)
|
||||
rack_session_access
|
||||
rails (~> 8.0.4)
|
||||
rails (~> 8.1.2)
|
||||
rails-controller-testing (~> 1.0.2)
|
||||
rails-i18n (~> 8.1.0)
|
||||
rbtrace
|
||||
@@ -1756,23 +1759,24 @@ DEPENDENCIES
|
||||
|
||||
CHECKSUMS
|
||||
Ascii85 (2.0.1) sha256=15cb5d941808543cbb9e7e6aea3c8ec3877f154c3461e8b3673e97f7ecedbe5a
|
||||
actioncable (8.0.4) sha256=aadb2bf2977b666cfeaa7dee66fd50e147559f78a8d55f6169e913502475e09f
|
||||
actionmailbox (8.0.4) sha256=ed0b634a502fb63d1ba01ae025772e9d0261b7ba12e66389c736fcf4635cd80f
|
||||
actionmailer (8.0.4) sha256=3b9270d8e19f0afb534b11c52f439937dc30028adcbbae2b244f3383ce75de4b
|
||||
actionpack (8.0.4) sha256=0364c7582f32c8f404725fa30d3f6853f834c5f4964afd4a072b848c8a23cddb
|
||||
action_text-trix (2.1.16) sha256=f645a2c21821b8449fd1d6770708f4031c91a2eedf9ef476e9be93c64e703a8a
|
||||
actioncable (8.1.2) sha256=dc31efc34cca9cdefc5c691ddb8b4b214c0ea5cd1372108cbc1377767fb91969
|
||||
actionmailbox (8.1.2) sha256=058b2fb1980e5d5a894f675475fcfa45c62631103d5a2596d9610ec81581889b
|
||||
actionmailer (8.1.2) sha256=f4c1d2060f653bfe908aa7fdc5a61c0e5279670de992146582f2e36f8b9175e9
|
||||
actionpack (8.1.2) sha256=ced74147a1f0daafaa4bab7f677513fd4d3add574c7839958f7b4f1de44f8423
|
||||
actionpack-xml_parser (2.0.1) sha256=40cb461ee99445314ab580a783fb7413580deb8b28113c9e70ecd7c1b334d5e6
|
||||
actiontext (8.0.4) sha256=40b3970268ac29b865685456b2586df5052d068fd0cb04acb2291e737cea2340
|
||||
actionview (8.0.4) sha256=5bd3c41ee7a59e14cf062bb5e4ee53c9a253d12fc13c8754cae368012e1a1648
|
||||
actiontext (8.1.2) sha256=0bf57da22a9c19d970779c3ce24a56be31b51c7640f2763ec64aa72e358d2d2d
|
||||
actionview (8.1.2) sha256=80455b2588911c9b72cec22d240edacb7c150e800ef2234821269b2b2c3e2e5b
|
||||
active_record_doctor (2.0.1) sha256=7af0ac02195385c8f2f67d0e4ebe72b1fc79d65eaaf329e0db07f4d12a84069a
|
||||
activejob (8.0.4) sha256=cbc8a85d0e168cb90a5629c8a36fe2d08ba840103d3aed3eee0c7beb784fccce
|
||||
activemodel (8.0.4) sha256=8f4e4fac3cd104b1bf30419c3745206f6f724c0e2902a939b4113f4c90730dfd
|
||||
activejob (8.1.2) sha256=908dab3713b101859536375819f4156b07bdf4c232cc645e7538adb9e302f825
|
||||
activemodel (8.1.2) sha256=e21358c11ce68aed3f9838b7e464977bc007b4446c6e4059781e1d5c03bcf33e
|
||||
activemodel-serializers-xml (1.0.3) sha256=fa1b16305e7254cc58a59c68833e3c0a593a59c8ab95d3be5aaea7cd9416c397
|
||||
activerecord (8.0.4) sha256=bda32c171799e5ca5460447d3b7272ed14447244e2497abf2107f87fc44cbf32
|
||||
activerecord (8.1.2) sha256=acfbe0cadfcc50fa208011fe6f4eb01cae682ebae0ef57145ba45380c74bcc44
|
||||
activerecord-import (2.2.0) sha256=f8ca99b196e50775723d1f1d192c379f656378dc9f5628240992a0d78807fa4b
|
||||
activerecord-nulldb-adapter (1.2.2) sha256=01e0b2e49af11ad56a92e274a3d8c9fb3c50a12a5460218c4c4b45355d9ef968
|
||||
activerecord-session_store (2.2.0) sha256=65918054573683bf4f87af89e765e1fece14c9d71cfac1f11abe4687c96e2743
|
||||
activestorage (8.0.4) sha256=47f312962fc898c1669f20cf7448d19668a5547f4a5f64e59a837d9d3f64a043
|
||||
activesupport (8.0.4) sha256=894a3a6c7733b5fae5a7df3acd76c4b563f38687df8a04fa3cbd25360f3fe95a
|
||||
activestorage (8.1.2) sha256=8a63a48c3999caeee26a59441f813f94681fc35cc41aba7ce1f836add04fba76
|
||||
activesupport (8.1.2) sha256=88842578ccd0d40f658289b0e8c842acfe9af751afee2e0744a7873f50b6fdae
|
||||
acts_as_list (1.2.6) sha256=8345380900b7bee620c07ad00991ccee59af3d8c9e8574f426e321da2865fdc8
|
||||
acts_as_tree (2.9.1) sha256=b869eb10a8de38616b64ffcf9e882d3d99c8e06909c4057078a76c3b89a9a2f3
|
||||
addressable (2.8.8) sha256=7c13b8f9536cf6364c03b9d417c19986019e28f7c00ac8132da4eb0fe393b057
|
||||
@@ -1881,7 +1885,7 @@ CHECKSUMS
|
||||
excon (1.3.2) sha256=a089babe98638e58042a7d542b2bbd183304527e33d612b6dde22fa491a544a5
|
||||
factory_bot (6.5.6) sha256=12beb373214dccc086a7a63763d6718c49769d5606f0501e0a4442676917e077
|
||||
factory_bot_rails (6.5.1) sha256=d3cc4851eae4dea8a665ec4a4516895045e710554d2b5ac9e68b94d351bc6d68
|
||||
faraday (2.14.0) sha256=8699cfe5d97e55268f2596f9a9d5a43736808a943714e3d9a53e6110593941cd
|
||||
faraday (2.14.1) sha256=a43cceedc1e39d188f4d2cdd360a8aaa6a11da0c407052e426ba8d3fb42ef61c
|
||||
faraday-follow_redirects (0.5.0) sha256=5cde93c894b30943a5d2b93c2fe9284216a6b756f7af406a1e55f211d97d10ad
|
||||
faraday-net_http (3.4.2) sha256=f147758260d3526939bf57ecf911682f94926a3666502e24c69992765875906c
|
||||
fastimage (2.4.0) sha256=5fce375e27d3bdbb46c18dbca6ba9af29d3304801ae1eb995771c4796c5ac7e8
|
||||
@@ -1948,7 +1952,7 @@ CHECKSUMS
|
||||
irb (1.16.0) sha256=2abe56c9ac947cdcb2f150572904ba798c1e93c890c256f8429981a7675b0806
|
||||
iso8601 (0.13.0) sha256=298c2b15b7be5fa95a1372813d36a2257656cd8e906dfbc1f5cb409851425aa2
|
||||
jmespath (1.6.2) sha256=238d774a58723d6c090494c8879b5e9918c19485f7e840f2c1c7532cf84ebcb1
|
||||
json (2.18.0) sha256=b10506aee4183f5cf49e0efc48073d7b75843ce3782c68dbeb763351c08fd505
|
||||
json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986
|
||||
json-jwt (1.17.0) sha256=6ff99026b4c54281a9431179f76ceb81faa14772d710ef6169785199caadc4cc
|
||||
json-schema (4.3.1) sha256=d5e68dc32b94408d0b06ad04f9382ccbb6fe5a44910e066f8547f56c471a7825
|
||||
json_rpc_handler (0.1.1) sha256=ea248c8cb4d5490dde320db316ac5e3caf8137a20b5ff9035a4bfc1d19438d90
|
||||
@@ -1975,7 +1979,7 @@ CHECKSUMS
|
||||
mcp (0.4.0) sha256=4d1dd2b99fbd81a5fdc808d258c38a4f57dd69751ee1e5f62b3ab40e31625a36
|
||||
md_to_pdf (0.2.5)
|
||||
messagebird-rest (5.0.0) sha256=da4cc1efba3d5e4aa021fad07426c2cb6b326ce5670da5104bb8f6056a39d59c
|
||||
meta-tags (2.22.2) sha256=7fe78af4a92be12091f473cb84a21f6bddbd37f24c4413172df76cd14fff9e83
|
||||
meta-tags (2.22.3) sha256=41ead5437140869717cbdd659cc6f1caa3e498b3e74b03ed63503b5b38ed504f
|
||||
method_source (1.1.0) sha256=181301c9c45b731b4769bc81e8860e72f9161ad7d66dd99103c9ab84f560f5c5
|
||||
mime-types (3.7.0) sha256=dcebf61c246f08e15a4de34e386ebe8233791e868564a470c3fe77c00eed5e56
|
||||
mime-types-data (3.2025.0924) sha256=f276bca15e59f35767cbcf2bc10e023e9200b30bd6a572c1daf7f4cc24994728
|
||||
@@ -2119,7 +2123,7 @@ CHECKSUMS
|
||||
prawn (2.4.0) sha256=82062744f7126c2d77501da253a154271790254dfa8c309b8e52e79bc5de2abd
|
||||
prawn-table (0.2.2) sha256=336d46e39e003f77bf973337a958af6a68300b941c85cb22288872dc2b36addb
|
||||
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
|
||||
prism (1.8.0) sha256=84453a16ef5530ea62c5f03ec16b52a459575ad4e7b9c2b360fd8ce2c39c1254
|
||||
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
|
||||
prometheus-client-mmap (1.5.0) sha256=361eb98d6c19ae0f44ae5e02f9e6750436fd92d1c501d1c69843609c1daf0117
|
||||
prometheus-client-mmap (1.5.0-aarch64-linux-gnu) sha256=e7fe1a630dda83a237efb0eb4a29ee3da37922722fc89ecac6057a1187372c5d
|
||||
prometheus-client-mmap (1.5.0-aarch64-linux-musl) sha256=897fa5d82150ddcb3bc30dfa7af0deb85930655500e71bd8879daa86b5e690ff
|
||||
@@ -2149,12 +2153,12 @@ CHECKSUMS
|
||||
rack-timeout (0.7.0) sha256=757337e9793cca999bb73a61fe2a7d4280aa9eefbaf787ce3b98d860749c87d9
|
||||
rack_session_access (0.2.0) sha256=03eb98f2027429ccbbeb18556006dfb6d928b0557ad3770783b8e2f368198d6b
|
||||
rackup (1.0.1) sha256=ba86604a28989fe1043bff20d819b360944ca08156406812dca6742b24b3c249
|
||||
rails (8.0.4) sha256=364494a32d2dc3f9d5c135d036ce47e7776684bc6add73f1037ac2b1007962db
|
||||
rails (8.1.2) sha256=5069061b23dfa8706b9f0159ae8b9d35727359103178a26962b868a680ba7d95
|
||||
rails-controller-testing (1.0.5) sha256=741448db59366073e86fc965ba403f881c636b79a2c39a48d0486f2607182e94
|
||||
rails-dom-testing (2.3.0) sha256=8acc7953a7b911ca44588bf08737bc16719f431a1cc3091a292bca7317925c1d
|
||||
rails-html-sanitizer (1.6.2) sha256=35fce2ca8242da8775c83b6ba9c1bcaad6751d9eb73c1abaa8403475ab89a560
|
||||
rails-i18n (8.1.0) sha256=52d5fd6c0abef28d84223cc05647f6ae0fd552637a1ede92deee9545755b6cf3
|
||||
railties (8.0.4) sha256=8203d853dcffab4abcdd05c193f101676a92068075464694790f6d8f72d5cb47
|
||||
railties (8.1.2) sha256=1289ece76b4f7668fc46d07e55cc992b5b8751f2ad85548b7da351b8c59f8055
|
||||
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
|
||||
rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
|
||||
rake-compiler-dock (1.11.0) sha256=eab51f2cd533eb35cea6b624a75281f047123e70a64c58b607471bb49428f8c2
|
||||
@@ -2237,7 +2241,7 @@ CHECKSUMS
|
||||
terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2
|
||||
test-prof (1.4.4) sha256=1a59513ed9d33a1f5ca17c0b89da4e70f60a91c83ec62e9a873dbb99141353ef
|
||||
text-hyphen (1.5.0) sha256=c44a4533b8a554e7ff7c955e131bcccc78a0b4c56ce1d73f2c8c11f43b075a06
|
||||
thor (1.4.0) sha256=8763e822ccb0f1d7bee88cde131b19a65606657b847cc7b7b4b82e772bcd8a3d
|
||||
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
|
||||
thread_safe (0.3.6) sha256=9ed7072821b51c57e8d6b7011a8e282e25aeea3a4065eab326e43f66f063b05a
|
||||
timecop (0.9.10) sha256=12ba45ce57cdcf6b1043cb6cdffa6381fd89ce10d369c28a7f6f04dc1b0cd8eb
|
||||
timeout (0.6.0) sha256=6d722ad619f96ee383a0c557ec6eb8c4ecb08af3af62098a0be5057bf00de1af
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
@import "open_project/common/attribute_help_text_component"
|
||||
@import "open_project/common/attribute_help_text_caption_component"
|
||||
@import "open_project/common/attribute_label_component"
|
||||
@import "open_project/common/inplace_edit_fields/index"
|
||||
@import "open_project/common/submenu_component"
|
||||
@import "open_project/common/main_menu_toggle_component"
|
||||
@import "portfolios/details_component"
|
||||
|
||||
@@ -37,11 +37,11 @@ module OpenProject
|
||||
:description,
|
||||
:lines,
|
||||
:background_reference_id,
|
||||
:formatted
|
||||
:format
|
||||
|
||||
PARAGRAPH_CSS_CLASS = "op-uc-p"
|
||||
|
||||
def initialize(id, name, description, lines: 1, background_reference_id: "content", formatted: false, **args)
|
||||
def initialize(id, name, description, lines: 1, background_reference_id: "content", format: true, **args)
|
||||
super()
|
||||
@id = id
|
||||
@name = name
|
||||
@@ -49,7 +49,7 @@ module OpenProject
|
||||
@system_arguments = args
|
||||
@lines = lines
|
||||
@background_reference_id = background_reference_id
|
||||
@formatted = formatted
|
||||
@format = format
|
||||
end
|
||||
|
||||
def short_text
|
||||
@@ -61,7 +61,7 @@ module OpenProject
|
||||
end
|
||||
|
||||
def full_text
|
||||
@full_text ||= formatted ? description : helpers.format_text(description)
|
||||
@full_text ||= format ? helpers.format_text(description) : description
|
||||
end
|
||||
|
||||
def display_expand_button_value
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<%= component_wrapper(tag: :div, class: "op-inplace-edit", data: { test_selector: wrapper_test_selector }) do %>
|
||||
<% if display_field_component.present? && !enforce_edit_mode %>
|
||||
<%= render display_field_component %>
|
||||
<% else %>
|
||||
<%= primer_form_with(
|
||||
model:,
|
||||
url: inplace_edit_field_update_path(model: model.class.name, id: model.id, attribute:),
|
||||
method: :patch,
|
||||
data: { turbo_stream: true }
|
||||
) do |form|
|
||||
render_field_component = ->(f) { render edit_field_component(f) } # The render_inline_form method looses context and thus does not know about the `field_component` method
|
||||
system_arguments = @system_arguments
|
||||
|
||||
render_inline_form(form) do |f|
|
||||
f.hidden name: "system_arguments_json", value: system_arguments.to_json
|
||||
render_field_component.call(f)
|
||||
end
|
||||
end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -0,0 +1,98 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
#-- copyright
|
||||
# OpenProject is an open source project management software.
|
||||
# Copyright (C) the OpenProject GmbH
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License version 3.
|
||||
#
|
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# See COPYRIGHT and LICENSE files for more details.
|
||||
#++
|
||||
|
||||
module OpenProject
|
||||
module Common
|
||||
class InplaceEditFieldComponent < ViewComponent::Base
|
||||
include OpTurbo::Streamable
|
||||
|
||||
attr_reader :model, :attribute, :enforce_edit_mode
|
||||
|
||||
def initialize(model:, attribute:, enforce_edit_mode: false, **system_arguments)
|
||||
super()
|
||||
@model = model
|
||||
@attribute = attribute
|
||||
@enforce_edit_mode = enforce_edit_mode
|
||||
@system_arguments = system_arguments
|
||||
@system_arguments[:id] = system_arguments[:id] || SecureRandom.uuid
|
||||
end
|
||||
|
||||
def field_class
|
||||
OpenProject::InplaceEdit::FieldRegistry.fetch(attribute)
|
||||
end
|
||||
|
||||
def edit_field_component(form)
|
||||
field_class.new(
|
||||
form:,
|
||||
attribute:,
|
||||
model:,
|
||||
**@system_arguments
|
||||
)
|
||||
end
|
||||
|
||||
def display_field_class
|
||||
if field_class.respond_to?(:display_class)
|
||||
field_class.display_class
|
||||
else
|
||||
InplaceEditFields::DisplayFields::DisplayFieldComponent
|
||||
end
|
||||
end
|
||||
|
||||
def display_field_component
|
||||
return nil if display_field_class.nil?
|
||||
|
||||
display_field_class.new(model:, attribute:, writable: writable?, **@system_arguments)
|
||||
end
|
||||
|
||||
def wrapper_key
|
||||
model_class = @model.class.name.parameterize(separator: "_")
|
||||
"op-inplace-edit-field--#{model_class}-#{model.id}--#{attribute.name}--#{@system_arguments[:id]}"
|
||||
end
|
||||
|
||||
def wrapper_test_selector
|
||||
"op-inplace-edit-field"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def writable?
|
||||
return @writable if defined?(@writable)
|
||||
|
||||
contract_class = OpenProject::InplaceEdit::UpdateRegistry.fetch_contract(model)
|
||||
@writable =
|
||||
if contract_class.present?
|
||||
contract_class.new(model, User.current).writable?(attribute)
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
#-- copyright
|
||||
# OpenProject is an open source project management software.
|
||||
# Copyright (C) the OpenProject GmbH
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License version 3.
|
||||
#
|
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# See COPYRIGHT and LICENSE files for more details.
|
||||
#++
|
||||
|
||||
module OpenProject
|
||||
module Common
|
||||
module InplaceEditFields
|
||||
module DisplayFields
|
||||
class DisplayFieldComponent < ViewComponent::Base
|
||||
include OpenProject::TextFormatting
|
||||
|
||||
attr_reader :model, :attribute, :writable
|
||||
|
||||
def initialize(model:, attribute:, writable:, **system_arguments)
|
||||
super()
|
||||
@model = model
|
||||
@attribute = attribute
|
||||
@writable = writable
|
||||
@system_arguments = system_arguments
|
||||
end
|
||||
|
||||
def render_display_value
|
||||
value = model.public_send(attribute)
|
||||
|
||||
if value.present?
|
||||
format_text(value)
|
||||
else
|
||||
"–"
|
||||
end
|
||||
end
|
||||
|
||||
def display_field_arguments
|
||||
@display_field_arguments ||= {
|
||||
classes: "op-inplace-edit--display-field #{'op-inplace-edit--display-field_editable' if writable}",
|
||||
data: {
|
||||
controller: "inplace-edit",
|
||||
inplace_edit_url_value: edit_url,
|
||||
action: writable ? "click->inplace-edit#request" : ""
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def call
|
||||
render(Primer::BaseComponent.new(tag: :div, **display_field_arguments)) do
|
||||
render_display_value
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def edit_url
|
||||
inplace_edit_field_edit_path(
|
||||
model: model.class.name,
|
||||
id: model.id,
|
||||
attribute:,
|
||||
system_arguments_json: @system_arguments.to_json
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
.op-inplace-edit
|
||||
&--display-field
|
||||
&_editable
|
||||
margin-left: -9px !important // cancel out 8px padding + 1px border
|
||||
margin-right: -9px !important // cancel out 8px padding + 1px border
|
||||
padding: var(--base-size-8)
|
||||
width: calc(100% + 18px) !important
|
||||
border: 1px solid transparent
|
||||
border-radius: var(--borderRadius-medium)
|
||||
|
||||
&:hover, &:focus
|
||||
border-color: var(--borderColor-default)
|
||||
box-shadow: var(--shadow-inset)
|
||||
|
||||
&:not(&_editable)
|
||||
cursor: not-allowed
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
#-- copyright
|
||||
# OpenProject is an open source project management software.
|
||||
# Copyright (C) the OpenProject GmbH
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License version 3.
|
||||
#
|
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# See COPYRIGHT and LICENSE files for more details.
|
||||
#++
|
||||
|
||||
module OpenProject
|
||||
module Common
|
||||
module InplaceEditFields
|
||||
module DisplayFields
|
||||
class RichTextAreaComponent < DisplayFieldComponent
|
||||
attr_reader :model, :attribute, :writable
|
||||
|
||||
def call
|
||||
render(Primer::BaseComponent.new(tag: :div, **display_field_arguments)) do
|
||||
render(Primer::BaseComponent.new(tag: :div,
|
||||
classes: "op-uc-container op-uc-container_reduced-headings -multiline")) do
|
||||
render_display_value
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1 @@
|
||||
@import "display_fields/display_fields_component"
|
||||
@@ -0,0 +1,77 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
#-- copyright
|
||||
# OpenProject is an open source project management software.
|
||||
# Copyright (C) the OpenProject GmbH
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License version 3.
|
||||
#
|
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# See COPYRIGHT and LICENSE files for more details.
|
||||
#++
|
||||
|
||||
module OpenProject
|
||||
module Common
|
||||
module InplaceEditFields
|
||||
class RichTextAreaComponent < ViewComponent::Base
|
||||
attr_reader :form, :attribute, :model
|
||||
|
||||
def self.display_class
|
||||
DisplayFields::RichTextAreaComponent
|
||||
end
|
||||
|
||||
def initialize(form:, attribute:, model:, **system_arguments)
|
||||
super()
|
||||
@form = form
|
||||
@attribute = attribute
|
||||
@model = model
|
||||
@system_arguments = system_arguments
|
||||
@system_arguments[:classes] = class_names(
|
||||
@system_arguments[:classes],
|
||||
"op-inplace-edit-field--text-area"
|
||||
)
|
||||
@system_arguments[:label] ||= model.class.human_attribute_name(attribute)
|
||||
|
||||
@system_arguments[:rich_text_options] ||= {}
|
||||
@system_arguments[:rich_text_options][:primerized] = true
|
||||
end
|
||||
|
||||
def call
|
||||
form.rich_text_area(name: attribute, **@system_arguments)
|
||||
|
||||
form.group(layout: :horizontal, justify_content: :flex_end) do |button_group|
|
||||
button_group.submit(name: :reset,
|
||||
type: :submit,
|
||||
label: I18n.t(:button_cancel),
|
||||
scheme: :default,
|
||||
formaction: inplace_edit_field_reset_path(model: model.class.name, id: model.id, attribute:),
|
||||
formmethod: :get,
|
||||
test_selector: "op-inplace-edit-field--textarea-cancel")
|
||||
button_group.submit(name: :submit,
|
||||
label: I18n.t(:button_save),
|
||||
scheme: :primary,
|
||||
test_selector: "op-inplace-edit-field--textarea-save")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,71 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
#-- copyright
|
||||
# OpenProject is an open source project management software.
|
||||
# Copyright (C) the OpenProject GmbH
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License version 3.
|
||||
#
|
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# See COPYRIGHT and LICENSE files for more details.
|
||||
#++
|
||||
|
||||
module OpenProject
|
||||
module Common
|
||||
module InplaceEditFields
|
||||
class TextInputComponent < ViewComponent::Base
|
||||
attr_reader :form, :attribute, :model
|
||||
|
||||
def self.display_class
|
||||
DisplayFields::DisplayFieldComponent
|
||||
end
|
||||
|
||||
def initialize(form:, attribute:, model:, **system_arguments)
|
||||
super()
|
||||
@form = form
|
||||
@attribute = attribute
|
||||
@model = model
|
||||
@system_arguments = system_arguments
|
||||
@system_arguments[:label] ||= model.class.human_attribute_name(attribute)
|
||||
end
|
||||
|
||||
def call
|
||||
form.text_field name: attribute,
|
||||
data: { controller: "inplace-edit",
|
||||
inplace_edit_url_value: reset_url,
|
||||
action: "keydown.esc->inplace-edit#request" },
|
||||
**@system_arguments
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def reset_url
|
||||
inplace_edit_field_reset_path(
|
||||
model: model.class.name,
|
||||
id: model.id,
|
||||
attribute:,
|
||||
system_arguments_json: @system_arguments.to_json
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -83,7 +83,7 @@ module Projects
|
||||
end
|
||||
|
||||
def custom_field_column(column) # rubocop:disable Metrics/AbcSize
|
||||
return nil unless user_can_view_project?
|
||||
return nil unless user_can_view_project_attributes?
|
||||
|
||||
cf = column.custom_field
|
||||
custom_value = project.formatted_custom_value_for(cf)
|
||||
@@ -93,7 +93,7 @@ module Projects
|
||||
"dialog-#{project.id}-cf-#{cf.id}",
|
||||
cf.name,
|
||||
custom_value,
|
||||
formatted: true
|
||||
format: false # already formatted
|
||||
)
|
||||
elsif custom_value.is_a?(Array)
|
||||
safe_join(Array(custom_value).compact_blank, ", ")
|
||||
@@ -196,7 +196,7 @@ module Projects
|
||||
end
|
||||
|
||||
def project_status
|
||||
return nil unless user_can_view_project?
|
||||
return nil unless user_can_view_project_attributes?
|
||||
|
||||
content = "".html_safe
|
||||
|
||||
@@ -212,7 +212,7 @@ module Projects
|
||||
end
|
||||
|
||||
def status_explanation
|
||||
return nil unless user_can_view_project?
|
||||
return nil unless user_can_view_project_attributes?
|
||||
|
||||
if project.status_explanation.present? && project.status_explanation
|
||||
render OpenProject::Common::AttributeComponent.new("dialog-#{project.id}-status-explanation",
|
||||
@@ -222,7 +222,7 @@ module Projects
|
||||
end
|
||||
|
||||
def description
|
||||
return nil unless user_can_view_project?
|
||||
return nil unless user_can_view_project_attributes?
|
||||
|
||||
if project.description.present?
|
||||
render OpenProject::Common::AttributeComponent.new("dialog-#{project.id}-description",
|
||||
@@ -436,7 +436,7 @@ module Projects
|
||||
end
|
||||
end
|
||||
|
||||
def user_can_view_project?
|
||||
def user_can_view_project_attributes?
|
||||
User.current.allowed_in_project?(:view_project_attributes, project)
|
||||
end
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
height: 100%
|
||||
min-height: 0
|
||||
grid-template-areas: "sidebar main help"
|
||||
grid-template-columns: 300px 1fr 350px
|
||||
grid-template-columns: 300px 1fr 330px
|
||||
overflow: hidden
|
||||
|
||||
&--main
|
||||
|
||||
@@ -69,9 +69,9 @@ module Projects
|
||||
end
|
||||
|
||||
def validate_assignee_custom_field
|
||||
if project_assignee_custom_field_not_configured?
|
||||
add_error :project_creation_wizard_assignee_custom_field_id, :blank
|
||||
elsif not_allowed_to_read_assignee_custom_field_value?
|
||||
return if project_assignee_custom_field_not_configured?
|
||||
|
||||
if not_allowed_to_read_assignee_custom_field_value?
|
||||
add_error assignee_custom_field.attribute_name, :unauthorized
|
||||
elsif missing_assignee_custom_field_value?
|
||||
add_error assignee_custom_field.attribute_name, :blank
|
||||
|
||||
@@ -52,7 +52,6 @@ module Projects
|
||||
validate_work_package_type
|
||||
validate_status_when_submitted
|
||||
validate_assignee_custom_field
|
||||
validate_work_package_comment
|
||||
validate_notification_text
|
||||
end
|
||||
|
||||
@@ -78,21 +77,13 @@ module Projects
|
||||
end
|
||||
|
||||
def validate_assignee_custom_field
|
||||
if model.project_creation_wizard_assignee_custom_field_id.blank?
|
||||
errors.add :project_creation_wizard_assignee_custom_field_id, :blank
|
||||
else
|
||||
valid_custom_field = model.available_custom_fields
|
||||
.where(field_format: "user", multi_value: false)
|
||||
.exists?(id: model.project_creation_wizard_assignee_custom_field_id)
|
||||
unless valid_custom_field
|
||||
errors.add :project_creation_wizard_assignee_custom_field_id, :inclusion
|
||||
end
|
||||
end
|
||||
end
|
||||
return if model.project_creation_wizard_assignee_custom_field_id.blank?
|
||||
|
||||
def validate_work_package_comment
|
||||
if model.project_creation_wizard_work_package_comment.blank?
|
||||
errors.add :project_creation_wizard_work_package_comment, :blank
|
||||
valid_custom_field = model.available_custom_fields
|
||||
.where(field_format: "user", multi_value: false)
|
||||
.exists?(id: model.project_creation_wizard_assignee_custom_field_id)
|
||||
unless valid_custom_field
|
||||
errors.add :project_creation_wizard_assignee_custom_field_id, :inclusion
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -31,14 +31,14 @@
|
||||
module Projects
|
||||
class UpdateContract < BaseContract
|
||||
def writable_attributes
|
||||
if allow_project_attributes_only
|
||||
if allow_project_attributes_only?
|
||||
with_available_custom_fields_only(super)
|
||||
elsif allow_edit_attributes_only
|
||||
elsif allow_edit_attributes_only?
|
||||
without_custom_fields(super)
|
||||
elsif allow_all_attributes
|
||||
elsif allow_all_attributes?
|
||||
# When all attributes are updated (API-only case), allow writing to all available custom
|
||||
# fields (including disabled ones) to maintain backward compatibility with the API.
|
||||
with_all_available_custom_fields_only(super)
|
||||
with_all_available_custom_fields(super)
|
||||
else
|
||||
[]
|
||||
end
|
||||
@@ -46,28 +46,31 @@ module Projects
|
||||
|
||||
private
|
||||
|
||||
def project_attributes_only = options[:project_attributes_only].present?
|
||||
def project_attributes_only? = options[:project_attributes_only].present?
|
||||
|
||||
def edit_project = user.allowed_in_project?(:edit_project, model)
|
||||
def allow_edit_project? = user.allowed_in_project?(:edit_project, model)
|
||||
|
||||
def edit_project_attributes = user.allowed_in_project?(:edit_project_attributes, model)
|
||||
def allow_edit_project_attributes? = user.allowed_in_project?(:edit_project_attributes, model)
|
||||
|
||||
def allow_edit_attributes_only = edit_project && !project_attributes_only && !edit_project_attributes
|
||||
|
||||
def allow_project_attributes_only
|
||||
edit_project_attributes && (project_attributes_only || !edit_project)
|
||||
def allow_edit_attributes_only?
|
||||
allow_edit_project? && !project_attributes_only? && !allow_edit_project_attributes?
|
||||
end
|
||||
|
||||
def allow_all_attributes
|
||||
(edit_project && edit_project_attributes && !project_attributes_only) ||
|
||||
(changed_by_user == ["active"]) # Allow archiving, permission checked in manage_permission
|
||||
def allow_project_attributes_only?
|
||||
allow_edit_project_attributes? && (project_attributes_only? || !allow_edit_project?)
|
||||
end
|
||||
|
||||
def allow_all_attributes?
|
||||
return true if allow_edit_project? && allow_edit_project_attributes? && !project_attributes_only?
|
||||
|
||||
changed_by_user == ["active"] # Allow archiving, permission checked in manage_permission
|
||||
end
|
||||
|
||||
def without_custom_fields(changes) = changes.grep_v(/^custom_field_/)
|
||||
|
||||
def with_available_custom_fields_only(changes) = changes & available_custom_fields.map(&:attribute_name)
|
||||
|
||||
def with_all_available_custom_fields_only(changes)
|
||||
def with_all_available_custom_fields(changes)
|
||||
allowed_attributes = changes.grep_v(/^custom_field_/)
|
||||
allowed_attributes += changes & all_available_custom_fields.map(&:attribute_name)
|
||||
allowed_attributes
|
||||
@@ -76,7 +79,7 @@ module Projects
|
||||
def manage_permission
|
||||
if changed_by_user == ["active"]
|
||||
:archive_project
|
||||
elsif project_attributes_only
|
||||
elsif project_attributes_only?
|
||||
:edit_project_attributes
|
||||
else
|
||||
# if "active" is changed, :archive_project permission will also be
|
||||
|
||||
@@ -136,6 +136,9 @@ module WorkPackages
|
||||
unless: -> { model.type&.replacement_pattern_defined_for?(:subject) }
|
||||
validates :subject, length: { maximum: 255 }
|
||||
|
||||
# TODO: add validation, check permission (#71253)
|
||||
attribute :sprint_id
|
||||
|
||||
validates :due_date,
|
||||
date: { after_or_equal_to: :start_date,
|
||||
message: :greater_than_or_equal_to_start_date,
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
#-- copyright
|
||||
# OpenProject is an open source project management software.
|
||||
# Copyright (C) the OpenProject GmbH
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License version 3.
|
||||
#
|
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# See COPYRIGHT and LICENSE files for more details.
|
||||
#++
|
||||
|
||||
class InplaceEditFieldsController < ApplicationController
|
||||
include OpTurbo::ComponentStream
|
||||
|
||||
before_action :find_model
|
||||
before_action :set_attribute
|
||||
no_authorization_required! :edit, :update, :reset
|
||||
|
||||
def edit
|
||||
replace_via_turbo_stream(
|
||||
component: component(enforce_edit_mode: true),
|
||||
status: :ok
|
||||
)
|
||||
|
||||
respond_with_turbo_streams
|
||||
end
|
||||
|
||||
def update
|
||||
handler = OpenProject::InplaceEdit::UpdateRegistry.fetch_handler(@model)
|
||||
|
||||
if handler.present?
|
||||
success = handler.call(
|
||||
model: @model,
|
||||
params: permitted_params,
|
||||
user: current_user
|
||||
)
|
||||
else
|
||||
raise ArgumentError, "Missing update handler for #{@model}"
|
||||
end
|
||||
|
||||
if success
|
||||
render_success_flash_message_via_turbo_stream(
|
||||
message: I18n.t(:notice_successful_update)
|
||||
)
|
||||
end
|
||||
|
||||
replace_via_turbo_stream(
|
||||
component: component(enforce_edit_mode: !success),
|
||||
status: success ? :ok : :unprocessable_entity
|
||||
)
|
||||
|
||||
respond_with_turbo_streams
|
||||
rescue ArgumentError
|
||||
head :not_found
|
||||
end
|
||||
|
||||
def reset
|
||||
replace_via_turbo_stream(component:)
|
||||
respond_with_turbo_streams
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_model
|
||||
model_class = resolve_model_class(params[:model])
|
||||
@model = model_class.visible.find(params[:id])
|
||||
rescue ActiveRecord::RecordNotFound, ArgumentError
|
||||
head :not_found
|
||||
end
|
||||
|
||||
def resolve_model_class(model_param)
|
||||
return nil if model_param.blank?
|
||||
|
||||
model_class =
|
||||
OpenProject::InplaceEdit::UpdateRegistry.resolve_model_class(model_param)
|
||||
|
||||
unless model_class &&
|
||||
model_class < ApplicationRecord &&
|
||||
model_class.respond_to?(:visible)
|
||||
raise ArgumentError, "Unsupported model for inplace edit"
|
||||
end
|
||||
|
||||
model_class
|
||||
end
|
||||
|
||||
def set_attribute
|
||||
@attribute = params[:attribute].to_sym
|
||||
end
|
||||
|
||||
def permitted_params
|
||||
params
|
||||
.expect(@model.model_name.param_key => [@attribute])
|
||||
end
|
||||
|
||||
def component(enforce_edit_mode: false)
|
||||
OpenProject::Common::InplaceEditFieldComponent.new(
|
||||
model: @model,
|
||||
attribute: @attribute,
|
||||
enforce_edit_mode:,
|
||||
**system_arguments.to_h.symbolize_keys
|
||||
)
|
||||
end
|
||||
|
||||
def system_arguments
|
||||
arguments = params[:system_arguments_json].presence || params.to_unsafe_h
|
||||
.values
|
||||
.filter_map { |v| v["system_arguments_json"] }
|
||||
.first
|
||||
|
||||
arguments.nil? ? {} : JSON.parse(arguments)
|
||||
end
|
||||
end
|
||||
@@ -34,6 +34,7 @@ class Projects::Settings::CreationWizardController < Projects::SettingsControlle
|
||||
menu_item :settings_creation_wizard
|
||||
|
||||
before_action :check_enterprise_plan, only: :toggle
|
||||
before_action :check_activation_conditions, only: :toggle
|
||||
|
||||
def show; end
|
||||
|
||||
@@ -101,6 +102,23 @@ class Projects::Settings::CreationWizardController < Projects::SettingsControlle
|
||||
end
|
||||
end
|
||||
|
||||
def check_activation_conditions
|
||||
# Allow disabling even without activation conditions met
|
||||
return if @project.project_creation_wizard_enabled
|
||||
|
||||
error = if @project.project_creation_wizard_default_work_package_type.nil?
|
||||
I18n.t("projects.settings.creation_wizard.errors.no_work_package_type")
|
||||
elsif @project.project_creation_wizard_default_status_when_submitted.nil?
|
||||
type = @project.project_creation_wizard_default_work_package_type.name
|
||||
I18n.t("projects.settings.creation_wizard.errors.no_status_when_submitted", type:)
|
||||
end
|
||||
|
||||
if error
|
||||
flash[:error] = error
|
||||
redirect_to project_settings_creation_wizard_path(@project, tab: params[:tab]), status: :see_other
|
||||
end
|
||||
end
|
||||
|
||||
def update_section_mappings(value)
|
||||
section_id = permitted_params.project_custom_field_project_mapping[:custom_field_section_id]
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ class CustomFields::Inputs::Base::Autocomplete::MultiValueInput < CustomFields::
|
||||
end
|
||||
|
||||
def custom_values
|
||||
@custom_values ||= @object.custom_values_for_custom_field(id: @custom_field.id)
|
||||
@custom_values ||= @object.custom_values_for_custom_field(@custom_field)
|
||||
end
|
||||
|
||||
def invalid?
|
||||
|
||||
@@ -60,7 +60,7 @@ module Projects
|
||||
input_width: :large
|
||||
) do |list|
|
||||
# Statuses of the selected WP type
|
||||
type_id = model.project_creation_wizard_work_package_type_id || model.types.first&.id
|
||||
type_id = model.project_creation_wizard_work_package_type_id
|
||||
|
||||
if type_id.present?
|
||||
type = Type.find_by(id: type_id)
|
||||
@@ -78,7 +78,7 @@ module Projects
|
||||
name: :project_creation_wizard_assignee_custom_field_id,
|
||||
label: I18n.t("settings.project_initiation_request.submission.assignee"),
|
||||
caption: I18n.t("settings.project_initiation_request.submission.assignee_caption_html").html_safe,
|
||||
required: true,
|
||||
required: false,
|
||||
input_width: :large,
|
||||
autocomplete_options: {
|
||||
component: "opce-autocompleter",
|
||||
@@ -99,10 +99,7 @@ module Projects
|
||||
name: :project_creation_wizard_work_package_comment,
|
||||
label: I18n.t("settings.project_initiation_request.submission.work_package_comment"),
|
||||
caption: I18n.t("settings.project_initiation_request.submission.work_package_comment_caption"),
|
||||
required: true,
|
||||
value: model.project_creation_wizard_work_package_comment.presence || I18n.t(
|
||||
"settings.project_initiation_request.submission.work_package_comment_default", project_name: model.name
|
||||
),
|
||||
required: false,
|
||||
rich_text_options: {
|
||||
showAttachments: false,
|
||||
editorType: "constrained"
|
||||
|
||||
@@ -72,7 +72,7 @@ module CustomFieldsHelper
|
||||
end
|
||||
|
||||
def custom_field_tag_for_bulk_edit(name, custom_field, project = nil) # rubocop:disable Metrics/AbcSize
|
||||
field_name = "#{name}[custom_field_values][#{custom_field.id}]"
|
||||
field_name = name.present? ? "#{name}[custom_field_values][#{custom_field.id}]" : "custom_field_values[#{custom_field.id}]"
|
||||
field_id = "#{name}_custom_field_values_#{custom_field.id}"
|
||||
field_format = OpenProject::CustomFieldFormat.find_by(name: custom_field.field_format)
|
||||
|
||||
|
||||
@@ -258,7 +258,7 @@ class CustomField < ApplicationRecord
|
||||
name =~ /\A(.+)CustomField\z/
|
||||
begin
|
||||
$1.constantize
|
||||
rescue StandardError
|
||||
rescue NameError
|
||||
nil
|
||||
end
|
||||
end
|
||||
@@ -369,7 +369,7 @@ class CustomField < ApplicationRecord
|
||||
|
||||
# Use a ruby finder to avoid hitting the database with N+1 queries on the project list page,
|
||||
# the errors are eager loaded via the Queries::Projects::CustomFieldContext.
|
||||
calculated_value_errors.find { it.customized_id == customized.id }
|
||||
calculated_value_errors.find { it.customized == customized }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -39,7 +39,7 @@ module Exports
|
||||
# Takes a WorkPackage or Project and an attribute and returns the value to be exported.
|
||||
def retrieve_value(object)
|
||||
custom_field = find_custom_field(object)
|
||||
return "" if custom_field.nil?
|
||||
return nil if custom_field.nil?
|
||||
|
||||
format_for_export(object, custom_field)
|
||||
end
|
||||
@@ -68,8 +68,8 @@ module Exports
|
||||
##
|
||||
# Finds a custom field from the attribute identifier
|
||||
def find_custom_field(object)
|
||||
id = attribute.to_s.sub("cf_", "").to_i
|
||||
object.available_custom_fields.detect { |cf| cf.id == id }
|
||||
id = attribute.to_s.delete_prefix("cf_").to_i
|
||||
object.available_custom_fields.find { it.id == id }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -101,7 +101,7 @@ class Journable::HistoricActiveRecordRelation < ActiveRecord::Relation
|
||||
#
|
||||
# SELECT * from work_packages
|
||||
|
||||
def build_arel(connection, aliases = nil)
|
||||
def build_arel(aliases = nil)
|
||||
substitute_join_tables_in_where_clause(self)
|
||||
|
||||
# Based on the previous modifications, build the algebra object and prepend
|
||||
|
||||
@@ -174,9 +174,9 @@ class Project < ApplicationRecord
|
||||
register_journal_formatted_fields "status_code", formatter_key: :project_status_code
|
||||
register_journal_formatted_fields "public", formatter_key: :visibility
|
||||
register_journal_formatted_fields "parent_id", formatter_key: :subproject_named_association
|
||||
register_journal_formatted_fields /custom_fields_\d+/, formatter_key: :custom_field
|
||||
register_journal_formatted_fields /^project_phase_\d+_active$/, formatter_key: :project_phase_active
|
||||
register_journal_formatted_fields /^project_phase_\d+_date_range$/, formatter_key: :project_phase_dates
|
||||
register_journal_formatted_fields /\Acustom_fields_\d+\z/, formatter_key: :custom_field
|
||||
register_journal_formatted_fields /\Aproject_phase_\d+_active\z/, formatter_key: :project_phase_active
|
||||
register_journal_formatted_fields /\Aproject_phase_\d+_date_range\z/, formatter_key: :project_phase_dates
|
||||
|
||||
has_paper_trail
|
||||
|
||||
|
||||
@@ -103,6 +103,7 @@ project:
|
||||
size: 8
|
||||
styles: [ "bold" ]
|
||||
padding_top: 4
|
||||
padding_bottom: 4
|
||||
header_1:
|
||||
size: 10
|
||||
header_2:
|
||||
@@ -111,6 +112,7 @@ project:
|
||||
size: 9
|
||||
paragraph:
|
||||
align: "left"
|
||||
padding_bottom: 6
|
||||
unordered_list:
|
||||
spacing: 1
|
||||
padding_top: 6
|
||||
@@ -163,8 +165,7 @@ project:
|
||||
border_width: 1
|
||||
padding: 4
|
||||
padding_left: 6
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 6
|
||||
no_border_left: false
|
||||
no_border_right: true
|
||||
no_border_bottom: true
|
||||
@@ -179,14 +180,15 @@ project:
|
||||
background_color: "F5F5F5"
|
||||
color: "880000"
|
||||
padding: 10
|
||||
padding_top: 6
|
||||
size: 8
|
||||
margin_top: 10
|
||||
margin_top: 2
|
||||
margin_bottom: 10
|
||||
font: "SpaceMono"
|
||||
table:
|
||||
auto_width: true
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 10
|
||||
header:
|
||||
size: 9
|
||||
styles: [ "bold" ]
|
||||
@@ -198,7 +200,7 @@ project:
|
||||
html_table:
|
||||
auto_width: true
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 10
|
||||
header:
|
||||
size: 9
|
||||
styles: [ "bold" ]
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
module Projects::CreationWizard
|
||||
ARTIFACT_NAME_OPTIONS = %w[project_creation_wizard project_initiation_request project_mandate].freeze
|
||||
DEFAULT_ARTIFACT_NAME_OPTION = "project_creation_wizard"
|
||||
DEFAULT_ARTIFACT_EXPORT_TYPE = "attachment"
|
||||
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
@@ -44,7 +45,7 @@ module Projects::CreationWizard
|
||||
store_attribute :settings, :project_creation_wizard_notification_text, :string
|
||||
store_attribute :settings, :project_creation_wizard_work_package_comment, :string
|
||||
store_attribute :settings, :project_creation_wizard_artifact_work_package_id, :integer
|
||||
store_attribute :settings, :project_creation_wizard_artifact_export_type, :string, default: "attachment"
|
||||
store_attribute :settings, :project_creation_wizard_artifact_export_type, :string
|
||||
store_attribute :settings, :project_creation_wizard_artifact_export_storage, :string
|
||||
|
||||
# The store_attribute default cannot be used here, because the default is not returned
|
||||
@@ -52,5 +53,33 @@ module Projects::CreationWizard
|
||||
def project_creation_wizard_artifact_name
|
||||
super.presence || DEFAULT_ARTIFACT_NAME_OPTION
|
||||
end
|
||||
|
||||
def project_creation_wizard_work_package_type_id
|
||||
super.presence || project_creation_wizard_default_work_package_type&.id
|
||||
end
|
||||
|
||||
def project_creation_wizard_artifact_export_type
|
||||
super.presence || DEFAULT_ARTIFACT_EXPORT_TYPE
|
||||
end
|
||||
|
||||
def project_creation_wizard_status_when_submitted_id
|
||||
super.presence || project_creation_wizard_default_status_when_submitted&.id
|
||||
end
|
||||
|
||||
def project_creation_wizard_work_package_comment
|
||||
super.presence ||
|
||||
I18n.t(
|
||||
"settings.project_initiation_request.submission.work_package_comment_default",
|
||||
project_name: name
|
||||
)
|
||||
end
|
||||
|
||||
def project_creation_wizard_default_work_package_type
|
||||
types.first
|
||||
end
|
||||
|
||||
def project_creation_wizard_default_status_when_submitted
|
||||
project_creation_wizard_default_work_package_type&.statuses&.first
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -121,6 +121,7 @@ project:
|
||||
size: 8
|
||||
styles: [ "bold" ]
|
||||
padding_top: 4
|
||||
padding_bottom: 4
|
||||
header_1:
|
||||
size: 10
|
||||
header_2:
|
||||
@@ -129,12 +130,19 @@ project:
|
||||
size: 9
|
||||
paragraph:
|
||||
align: "left"
|
||||
padding_bottom: 6
|
||||
unordered_list:
|
||||
spacing: 1
|
||||
padding_left: 10
|
||||
padding_right: 10
|
||||
padding_bottom: 6
|
||||
unordered_list_point:
|
||||
spacing: 4
|
||||
ordered_list:
|
||||
spacing: 1
|
||||
padding_left: 10
|
||||
padding_right: 10
|
||||
padding_bottom: 6
|
||||
ordered_list_point:
|
||||
spacing: 4
|
||||
spanning: true
|
||||
@@ -149,6 +157,9 @@ project:
|
||||
list_style_type: upper-roman
|
||||
task_list:
|
||||
spacing: 1
|
||||
padding_left: 10
|
||||
padding_right: 10
|
||||
padding_bottom: 6
|
||||
task_list_point:
|
||||
spacing: 4
|
||||
checked: "☑"
|
||||
@@ -169,8 +180,7 @@ project:
|
||||
border_width: 1
|
||||
padding: 4
|
||||
padding_left: 6
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 6
|
||||
no_border_left: false
|
||||
no_border_right: true
|
||||
no_border_bottom: true
|
||||
@@ -185,14 +195,15 @@ project:
|
||||
background_color: "F5F5F5"
|
||||
color: "880000"
|
||||
padding: 10
|
||||
padding_top: 6
|
||||
size: 8
|
||||
margin_top: 10
|
||||
margin_top: 2
|
||||
margin_bottom: 10
|
||||
font: "SpaceMono"
|
||||
table:
|
||||
auto_width: true
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 10
|
||||
header:
|
||||
size: 9
|
||||
styles: [ "bold" ]
|
||||
@@ -204,7 +215,7 @@ project:
|
||||
html_table:
|
||||
auto_width: true
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 10
|
||||
header:
|
||||
size: 9
|
||||
styles: [ "bold" ]
|
||||
|
||||
+1
-65
@@ -31,6 +31,7 @@
|
||||
class Setting < ApplicationRecord
|
||||
class NotWritableError < StandardError; end
|
||||
|
||||
extend Accessors
|
||||
extend Aliases
|
||||
extend MailSettings
|
||||
|
||||
@@ -74,71 +75,6 @@ class Setting < ApplicationRecord
|
||||
Big5-HKSCS
|
||||
TIS-620).freeze
|
||||
|
||||
class << self
|
||||
def create_setting(name, value = {})
|
||||
::Settings::Definition.add(name, **value.symbolize_keys)
|
||||
end
|
||||
|
||||
def create_setting_accessors(name)
|
||||
# Defines getter and setter for each setting
|
||||
# Then setting values can be read using: Setting.some_setting_name
|
||||
# or set using Setting.some_setting_name = "some value"
|
||||
src = <<-END_SRC
|
||||
def self.#{name}
|
||||
# when running too early, there is no settings table. do nothing
|
||||
self[:#{name}] if settings_table_exists_yet?
|
||||
end
|
||||
|
||||
def self.#{name}?
|
||||
# when running too early, there is no settings table. do nothing
|
||||
return unless settings_table_exists_yet?
|
||||
definition = Settings::Definition[:#{name}]
|
||||
|
||||
if definition.format != :boolean
|
||||
ActiveSupport::Deprecation.new.warn "Calling #{self}.#{name}? is deprecated since it is not a boolean", caller_locations
|
||||
end
|
||||
|
||||
value = self[:#{name}]
|
||||
ActiveRecord::Type::Boolean.new.cast(value) || false
|
||||
end
|
||||
|
||||
def self.#{name}=(value)
|
||||
if settings_table_exists_yet?
|
||||
self[:#{name}] = value
|
||||
else
|
||||
logger.warn "Trying to save a setting named '#{name}' while there is no 'setting' table yet. This setting will not be saved!"
|
||||
nil # when running too early, there is no settings table. do nothing
|
||||
end
|
||||
end
|
||||
|
||||
def self.#{name}_writable?
|
||||
Settings::Definition[:#{name}].writable?
|
||||
end
|
||||
END_SRC
|
||||
class_eval src, __FILE__, __LINE__
|
||||
end
|
||||
|
||||
def method_missing(method, *, &)
|
||||
if exists?(accessor_base_name(method))
|
||||
create_setting_accessors(accessor_base_name(method))
|
||||
|
||||
send(method, *)
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
def respond_to_missing?(method_name, include_private = false)
|
||||
exists?(accessor_base_name(method_name)) || super
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def accessor_base_name(name)
|
||||
name.to_s.sub(/(_writable\?)|(\?)|=\z/, "")
|
||||
end
|
||||
end
|
||||
|
||||
validates :name,
|
||||
uniqueness: true,
|
||||
inclusion: {
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
#-- copyright
|
||||
# OpenProject is an open source project management software.
|
||||
# Copyright (C) the OpenProject GmbH
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License version 3.
|
||||
#
|
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# See COPYRIGHT and LICENSE files for more details.
|
||||
#++
|
||||
|
||||
class Setting
|
||||
# Dynamically defines getter, setter, boolean, and writable? class methods
|
||||
# for each setting. Methods are lazily created via method_missing when a
|
||||
# setting is first accessed.
|
||||
#
|
||||
# After creation, setting values can be read using: Setting.some_setting_name
|
||||
# or set using: Setting.some_setting_name = "some value"
|
||||
module Accessors
|
||||
def create_setting(name, value = {})
|
||||
::Settings::Definition.add(name, **value.symbolize_keys)
|
||||
end
|
||||
|
||||
def create_setting_accessors(name)
|
||||
define_setting_getter(name)
|
||||
define_setting_boolean_getter(name)
|
||||
define_setting_setter(name)
|
||||
define_setting_writable_check(name)
|
||||
end
|
||||
|
||||
def method_missing(method, *, &)
|
||||
if exists?(accessor_base_name(method))
|
||||
create_setting_accessors(accessor_base_name(method))
|
||||
|
||||
send(method, *)
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
def respond_to_missing?(method_name, include_private = false)
|
||||
exists?(accessor_base_name(method_name)) || super
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def define_setting_getter(name)
|
||||
define_singleton_method(name) do
|
||||
# when running too early, there is no settings table. do nothing
|
||||
self[name] if settings_table_exists_yet?
|
||||
end
|
||||
end
|
||||
|
||||
def define_setting_boolean_getter(name)
|
||||
define_singleton_method(:"#{name}?") do
|
||||
definition = Settings::Definition[name]
|
||||
|
||||
if definition.format != :boolean
|
||||
ActiveSupport::Deprecation.new.warn "Calling #{self}.#{name}? is deprecated since it is not a boolean", caller_locations
|
||||
end
|
||||
|
||||
# Use accessor to go through same table check
|
||||
value = public_send(name)
|
||||
ActiveRecord::Type::Boolean.new.cast(value) || false
|
||||
end
|
||||
end
|
||||
|
||||
def define_setting_setter(name)
|
||||
define_singleton_method(:"#{name}=") do |value|
|
||||
if settings_table_exists_yet?
|
||||
self[name] = value
|
||||
else
|
||||
logger.warn "Trying to save a setting named '#{name}' while there is no 'setting' table yet. " \
|
||||
"This setting will not be saved!"
|
||||
nil # when running too early, there is no settings table. do nothing
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def define_setting_writable_check(name)
|
||||
define_singleton_method(:"#{name}_writable?") do
|
||||
Settings::Definition[name].writable?
|
||||
end
|
||||
end
|
||||
|
||||
def accessor_base_name(name)
|
||||
name.to_s.sub(/(_writable\?)|(\?)|=\z/, "")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -96,11 +96,11 @@ module WorkPackage::Journalized
|
||||
register_journal_formatted_fields "done_ratio", "derived_done_ratio", formatter_key: :percentage
|
||||
register_journal_formatted_fields "description", formatter_key: :diff
|
||||
register_journal_formatted_fields "schedule_manually", formatter_key: :schedule_manually
|
||||
register_journal_formatted_fields /attachments_?\d+/, formatter_key: :attachment
|
||||
register_journal_formatted_fields /custom_fields_\d+/, formatter_key: :custom_field
|
||||
register_journal_formatted_fields /\Aattachments_?\d+\z/, formatter_key: :attachment
|
||||
register_journal_formatted_fields /\Acustom_fields_\d+\z/, formatter_key: :custom_field
|
||||
register_journal_formatted_fields "ignore_non_working_days", formatter_key: :ignore_non_working_days
|
||||
register_journal_formatted_fields "cause", formatter_key: :cause
|
||||
register_journal_formatted_fields /file_links_?\d+/, formatter_key: :file_link
|
||||
register_journal_formatted_fields /\Afile_links_?\d+\z/, formatter_key: :file_link
|
||||
register_journal_formatted_fields "project_phase_definition_id", formatter_key: :project_phase_definition
|
||||
|
||||
# Joined
|
||||
@@ -110,6 +110,7 @@ module WorkPackage::Journalized
|
||||
:assigned_to_id, :priority_id,
|
||||
:category_id, :version_id,
|
||||
:author_id, :responsible_id,
|
||||
:sprint_id,
|
||||
formatter_key: :named_association
|
||||
register_journal_formatted_fields :start_date, :due_date, formatter_key: :datetime
|
||||
register_journal_formatted_fields :subject, formatter_key: :plaintext
|
||||
|
||||
@@ -121,6 +121,7 @@ work_package:
|
||||
margin_top: 0
|
||||
margin_bottom: 4
|
||||
markdown_margin:
|
||||
margin_top: 4
|
||||
margin_bottom: 16
|
||||
markdown:
|
||||
font:
|
||||
@@ -130,6 +131,7 @@ work_package:
|
||||
size: 8
|
||||
styles: [ "bold" ]
|
||||
padding_top: 4
|
||||
padding_bottom: 4
|
||||
header_1:
|
||||
size: 10
|
||||
header_2:
|
||||
@@ -138,12 +140,19 @@ work_package:
|
||||
size: 9
|
||||
paragraph:
|
||||
align: "left"
|
||||
padding_bottom: 6
|
||||
unordered_list:
|
||||
spacing: 1
|
||||
padding_left: 10
|
||||
padding_right: 10
|
||||
padding_bottom: 6
|
||||
unordered_list_point:
|
||||
spacing: 4
|
||||
ordered_list:
|
||||
spacing: 1
|
||||
padding_left: 10
|
||||
padding_right: 10
|
||||
padding_bottom: 6
|
||||
ordered_list_point:
|
||||
spacing: 4
|
||||
spanning: true
|
||||
@@ -158,6 +167,9 @@ work_package:
|
||||
list_style_type: upper-roman
|
||||
task_list:
|
||||
spacing: 1
|
||||
padding_left: 10
|
||||
padding_right: 10
|
||||
padding_bottom: 6
|
||||
task_list_point:
|
||||
spacing: 4
|
||||
checked: "☑"
|
||||
@@ -178,8 +190,7 @@ work_package:
|
||||
border_width: 1
|
||||
padding: 4
|
||||
padding_left: 6
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 6
|
||||
no_border_left: false
|
||||
no_border_right: true
|
||||
no_border_bottom: true
|
||||
@@ -194,14 +205,15 @@ work_package:
|
||||
background_color: "F5F5F5"
|
||||
color: "880000"
|
||||
padding: 10
|
||||
padding_top: 6
|
||||
size: 8
|
||||
margin_top: 10
|
||||
margin_top: 2
|
||||
margin_bottom: 10
|
||||
font: "SpaceMono"
|
||||
table:
|
||||
auto_width: true
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 10
|
||||
header:
|
||||
size: 9
|
||||
styles: [ "bold" ]
|
||||
@@ -213,7 +225,7 @@ work_package:
|
||||
html_table:
|
||||
auto_width: true
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 10
|
||||
header:
|
||||
size: 9
|
||||
styles: [ "bold" ]
|
||||
|
||||
@@ -106,6 +106,7 @@ work_package:
|
||||
margin_top: 0
|
||||
margin_bottom: 4
|
||||
markdown_margin:
|
||||
margin_top: 4
|
||||
margin_bottom: 16
|
||||
markdown:
|
||||
font:
|
||||
@@ -115,6 +116,7 @@ work_package:
|
||||
size: 8
|
||||
styles: [ "bold" ]
|
||||
padding_top: 4
|
||||
padding_bottom: 4
|
||||
header_1:
|
||||
size: 10
|
||||
header_2:
|
||||
@@ -123,12 +125,19 @@ work_package:
|
||||
size: 9
|
||||
paragraph:
|
||||
align: "left"
|
||||
padding_bottom: 6
|
||||
unordered_list:
|
||||
spacing: 1
|
||||
padding_left: 10
|
||||
padding_right: 10
|
||||
padding_bottom: 6
|
||||
unordered_list_point:
|
||||
spacing: 4
|
||||
ordered_list:
|
||||
spacing: 1
|
||||
padding_left: 10
|
||||
padding_right: 10
|
||||
padding_bottom: 6
|
||||
ordered_list_point:
|
||||
spacing: 4
|
||||
spanning: true
|
||||
@@ -143,6 +152,9 @@ work_package:
|
||||
list_style_type: upper-roman
|
||||
task_list:
|
||||
spacing: 1
|
||||
padding_left: 10
|
||||
padding_right: 10
|
||||
padding_bottom: 6
|
||||
task_list_point:
|
||||
spacing: 4
|
||||
checked: "☑"
|
||||
@@ -163,8 +175,7 @@ work_package:
|
||||
border_width: 1
|
||||
padding: 4
|
||||
padding_left: 6
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 6
|
||||
no_border_left: false
|
||||
no_border_right: true
|
||||
no_border_bottom: true
|
||||
@@ -179,14 +190,15 @@ work_package:
|
||||
background_color: "F5F5F5"
|
||||
color: "880000"
|
||||
padding: 10
|
||||
padding_top: 6
|
||||
size: 8
|
||||
margin_top: 10
|
||||
margin_top: 2
|
||||
margin_bottom: 10
|
||||
font: "SpaceMono"
|
||||
table:
|
||||
auto_width: true
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 10
|
||||
header:
|
||||
size: 9
|
||||
styles: [ "bold" ]
|
||||
@@ -198,7 +210,7 @@ work_package:
|
||||
html_table:
|
||||
auto_width: true
|
||||
margin_top: 4
|
||||
margin_bottom: 4
|
||||
margin_bottom: 10
|
||||
header:
|
||||
size: 9
|
||||
styles: [ "bold" ]
|
||||
|
||||
@@ -52,6 +52,9 @@ module BasicData
|
||||
model_class
|
||||
.create!(model_attributes(model_data))
|
||||
.tap { |model| seed_data.store_reference(model_data["reference"], model) }
|
||||
rescue ActiveRecord::RecordInvalid => e
|
||||
Rails.logger.error { "Failed to create #{model_class} seed_data: %e" }
|
||||
raise e
|
||||
end
|
||||
|
||||
def mapped_models_data
|
||||
|
||||
@@ -58,6 +58,7 @@ class Journals::CreateService
|
||||
FROM custom_values
|
||||
WHERE
|
||||
#{only_if_created_sql}
|
||||
AND #{availability_condition}
|
||||
AND custom_values.customized_id = :journable_id
|
||||
AND custom_values.customized_type = :journable_class_name
|
||||
AND custom_values.value IS NOT NULL
|
||||
@@ -72,16 +73,17 @@ class Journals::CreateService
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
custom_field_id,
|
||||
ARRAY_AGG(#{normalize_newlines_sql('custom_values.value')} ORDER BY value) AS value
|
||||
custom_values.custom_field_id,
|
||||
ARRAY_AGG(#{normalize_newlines_sql('custom_values.value')} ORDER BY value) AS value
|
||||
FROM
|
||||
custom_values
|
||||
custom_values
|
||||
WHERE
|
||||
custom_values.customized_id = :journable_id
|
||||
#{availability_condition}
|
||||
AND custom_values.customized_id = :journable_id
|
||||
AND custom_values.customized_type = :customized_type
|
||||
AND custom_values.value != ''
|
||||
GROUP BY
|
||||
custom_field_id
|
||||
custom_values.custom_field_id
|
||||
) current_values
|
||||
FULL JOIN
|
||||
(
|
||||
@@ -100,5 +102,23 @@ class Journals::CreateService
|
||||
current_values.value IS DISTINCT FROM journal_values.value
|
||||
SQL
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def availability_condition
|
||||
return "1 = 1" unless journable.is_a?(Project)
|
||||
|
||||
<<~SQL # rubocop:disable Rails/SquishedSQLHeredocs
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM custom_fields
|
||||
LEFT JOIN project_custom_field_project_mappings
|
||||
ON project_custom_field_project_mappings.custom_field_id = custom_fields.id
|
||||
AND project_custom_field_project_mappings.project_id = :journable_id
|
||||
WHERE custom_fields.id = custom_values.custom_field_id
|
||||
AND (custom_fields.is_for_all = TRUE OR project_custom_field_project_mappings.project_id IS NOT NULL)
|
||||
)
|
||||
SQL
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -35,6 +35,8 @@ module McpTools
|
||||
McpTools::CurrentUser,
|
||||
McpTools::ListStatuses,
|
||||
McpTools::ListTypes,
|
||||
McpTools::SearchPortfolios,
|
||||
McpTools::SearchPrograms,
|
||||
McpTools::SearchProjects,
|
||||
McpTools::SearchUsers,
|
||||
McpTools::SearchWorkPackages
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
#-- copyright
|
||||
# OpenProject is an open source project management software.
|
||||
# Copyright (C) the OpenProject GmbH
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License version 3.
|
||||
#
|
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# See COPYRIGHT and LICENSE files for more details.
|
||||
#++
|
||||
|
||||
module McpTools
|
||||
class SearchPortfolios < Base
|
||||
default_title "Search portfolios"
|
||||
default_description "Search portfolios matching all of the passed input parameters. " \
|
||||
"Parameters not passed are ignored. Results are limited to a maximum " \
|
||||
"of #{page_size} portfolios. To get the rest of the results, call the tool again with a" \
|
||||
"page number of 2 or higher."
|
||||
|
||||
name "search_portfolios"
|
||||
annotations read_only: true, idempotent: true, destructive: false
|
||||
enable_pagination
|
||||
|
||||
filter :name, filter_class: Queries::Projects::Filters::NameFilter, operator: "~"
|
||||
filter :identifier
|
||||
filter :status_code
|
||||
|
||||
input_schema(
|
||||
type: :object,
|
||||
properties: {
|
||||
name: { type: "string", description: "Name of the portfolio. Accepts partial names, not case-sensitive." },
|
||||
identifier: { type: "string", description: "Portfolio identifier. Case-sensitive, matching exactly." },
|
||||
status_code: { type: "string", enum: Project.status_codes.keys, description: "The portfolio status." }
|
||||
}
|
||||
)
|
||||
|
||||
output_schema(
|
||||
type: :object,
|
||||
required: ["items"],
|
||||
properties: {
|
||||
items: {
|
||||
type: :array,
|
||||
items: JsonSchemaLoader.new.load("portfolio_model")
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
def call(page: nil, **filters)
|
||||
filtered = apply_filters(Project.portfolio.visible, filters)
|
||||
portfolios = apply_pagination(filtered, page)
|
||||
|
||||
{
|
||||
items: portfolios.map { |p| API::V3::Projects::ProjectRepresenter.create(p, current_user:) }
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,76 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
#-- copyright
|
||||
# OpenProject is an open source project management software.
|
||||
# Copyright (C) the OpenProject GmbH
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License version 3.
|
||||
#
|
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# See COPYRIGHT and LICENSE files for more details.
|
||||
#++
|
||||
|
||||
module McpTools
|
||||
class SearchPrograms < Base
|
||||
default_title "Search programs"
|
||||
default_description "Search programs matching all of the passed input parameters. " \
|
||||
"Parameters not passed are ignored. Results are limited to a maximum " \
|
||||
"of #{page_size} programs. To get the rest of the results, call the tool again with a" \
|
||||
"page number of 2 or higher."
|
||||
|
||||
name "search_programs"
|
||||
annotations read_only: true, idempotent: true, destructive: false
|
||||
enable_pagination
|
||||
|
||||
filter :name, filter_class: Queries::Projects::Filters::NameFilter, operator: "~"
|
||||
filter :identifier
|
||||
filter :status_code
|
||||
|
||||
input_schema(
|
||||
type: :object,
|
||||
properties: {
|
||||
name: { type: "string", description: "Name of the program. Accepts partial names, not case-sensitive." },
|
||||
identifier: { type: "string", description: "Program identifier. Case-sensitive, matching exactly." },
|
||||
status_code: { type: "string", enum: Project.status_codes.keys, description: "The program status." }
|
||||
}
|
||||
)
|
||||
|
||||
output_schema(
|
||||
type: :object,
|
||||
required: ["items"],
|
||||
properties: {
|
||||
items: {
|
||||
type: :array,
|
||||
items: JsonSchemaLoader.new.load("program_model")
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
def call(page: nil, **filters)
|
||||
filtered = apply_filters(Project.program.visible, filters)
|
||||
programs = apply_pagination(filtered, page)
|
||||
|
||||
{
|
||||
items: programs.map { |p| API::V3::Projects::ProjectRepresenter.create(p, current_user:) }
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -48,7 +48,7 @@ module McpTools
|
||||
type: :object,
|
||||
properties: {
|
||||
name: { type: "string", description: "Name of the project. Accepts partial project names, not case-sensitive." },
|
||||
identifier: { type: "string", description: "Project indentifier. Case-sensitive, matching exactly." },
|
||||
identifier: { type: "string", description: "Project identifier. Case-sensitive, matching exactly." },
|
||||
status_code: { type: "string", enum: Project.status_codes.keys, description: "The project status." }
|
||||
}
|
||||
)
|
||||
@@ -65,7 +65,7 @@ module McpTools
|
||||
)
|
||||
|
||||
def call(page: nil, **filters)
|
||||
filtered = apply_filters(Project.visible, filters)
|
||||
filtered = apply_filters(Project.project.visible, filters)
|
||||
projects = apply_pagination(filtered, page)
|
||||
|
||||
{
|
||||
|
||||
@@ -155,7 +155,7 @@ module Projects::CreationWizard
|
||||
end
|
||||
|
||||
def assigned_to_id
|
||||
project.custom_value_for(assignee_custom_field).value
|
||||
project.custom_value_for(assignee_custom_field).value if assignee_custom_field
|
||||
end
|
||||
|
||||
def assignee_custom_field
|
||||
|
||||
@@ -32,7 +32,7 @@ module WorkPackages
|
||||
class WorkflowJob < ApplicationJob
|
||||
def perform(journal, changes)
|
||||
work_package = journal.journable
|
||||
process_artifact_changes(work_package, changes)
|
||||
process_artifact_changes(work_package, changes) unless journal.initial?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
require "rubygems"
|
||||
require "bundler/setup"
|
||||
|
||||
# explicit rubocop config increases performance slightly while avoiding config confusion.
|
||||
# Explicit RuboCop config increases performance slightly while avoiding config confusion.
|
||||
ARGV.unshift("--config", File.expand_path("../.rubocop.yml", __dir__))
|
||||
|
||||
load Gem.bin_path("rubocop", "rubocop")
|
||||
|
||||
@@ -49,9 +49,6 @@ OpenProject::FeatureDecisions.add :calculated_value_project_attribute,
|
||||
description: "Allows the use of calculated values as a project attribute.",
|
||||
force_active: true
|
||||
|
||||
OpenProject::FeatureDecisions.add :beta_widgets,
|
||||
description: "Enables BETA versions of widgets."
|
||||
|
||||
OpenProject::FeatureDecisions.add :mcp_server,
|
||||
description: "Enables the experimental MCP API."
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
#-- copyright
|
||||
# OpenProject is an open source project management software.
|
||||
# Copyright (C) the OpenProject GmbH
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License version 3.
|
||||
#
|
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# See COPYRIGHT and LICENSE files for more details.
|
||||
#++
|
||||
|
||||
Rails.application.config.to_prepare do
|
||||
# Register the edit fields per attribute
|
||||
OpenProject::InplaceEdit::FieldRegistry.register(:description, OpenProject::Common::InplaceEditFields::RichTextAreaComponent)
|
||||
OpenProject::InplaceEdit::FieldRegistry.register(:status_explanation, OpenProject::Common::InplaceEditFields::RichTextAreaComponent)
|
||||
|
||||
# Register the update handler per model
|
||||
OpenProject::InplaceEdit::UpdateRegistry.register(Project,
|
||||
handler: OpenProject::InplaceEdit::Handlers::ProjectUpdate,
|
||||
contract: Projects::UpdateContract)
|
||||
end
|
||||
@@ -0,0 +1,79 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# Be sure to restart your server when you modify this file.
|
||||
#
|
||||
# This file eases your Rails 8.1 framework defaults upgrade.
|
||||
#
|
||||
# Uncomment each configuration one by one to switch to the new default.
|
||||
# Once your application is ready to run with all new defaults, you can remove
|
||||
# this file and set the `config.load_defaults` to `8.1`.
|
||||
#
|
||||
# Read the Guide for Upgrading Ruby on Rails for more info on each option.
|
||||
# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
|
||||
|
||||
###
|
||||
# Skips escaping HTML entities and line separators. When set to `false`, the
|
||||
# JSON renderer no longer escapes these to improve performance.
|
||||
#
|
||||
# Example:
|
||||
# class PostsController < ApplicationController
|
||||
# def index
|
||||
# render json: { key: "\u2028\u2029<>&" }
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# Renders `{"key":"\u2028\u2029\u003c\u003e\u0026"}` with the previous default, but `{"key":"
<>&"}` with the config
|
||||
# set to `false`.
|
||||
#
|
||||
# Applications that want to keep the escaping behavior can set the config to `true`.
|
||||
#++
|
||||
# OpenProject should not be affected by this change. At least the vast majority of JSON responses
|
||||
# are rendered in the APIv3 which do not use the JSON renderer of ActionController.
|
||||
# But keeping it set to true does not cost anything.
|
||||
Rails.configuration.action_controller.escape_json_responses = true
|
||||
|
||||
###
|
||||
# Skips escaping LINE SEPARATOR (U+2028) and PARAGRAPH SEPARATOR (U+2029) in JSON.
|
||||
#
|
||||
# Historically these characters were not valid inside JavaScript literal strings but that changed in ECMAScript 2019.
|
||||
# As such it's no longer a concern in modern browsers: https://caniuse.com/mdn-javascript_builtins_json_json_superset.
|
||||
#++
|
||||
Rails.configuration.active_support.escape_js_separators_in_json = false
|
||||
|
||||
###
|
||||
# Raises an error when order dependent finder methods (e.g. `#first`, `#second`) are called without `order` values
|
||||
# on the relation, and the model does not have any order columns (`implicit_order_column`, `query_constraints`, or
|
||||
# `primary_key`) to fall back on.
|
||||
#
|
||||
# The current behavior of not raising an error has been deprecated, and this configuration option will be removed in
|
||||
# Rails 8.2.
|
||||
#++
|
||||
Rails.configuration.active_record.raise_on_missing_required_finder_order_columns = true
|
||||
|
||||
###
|
||||
# Controls how Rails handles path relative URL redirects.
|
||||
# When set to `:raise`, Rails will raise an `ActionController::Redirecting::UnsafeRedirectError`
|
||||
# for relative URLs without a leading slash, which can help prevent open redirect vulnerabilities.
|
||||
#
|
||||
# Example:
|
||||
# redirect_to "example.com" # Raises UnsafeRedirectError
|
||||
# redirect_to "@attacker.com" # Raises UnsafeRedirectError
|
||||
# redirect_to "/safe/path" # Works correctly
|
||||
#
|
||||
# Applications that want to allow these redirects can set the config to `:log` (previous default)
|
||||
# to only log warnings, or `:notify` to send ActiveSupport notifications.
|
||||
#++
|
||||
Rails.configuration.action_controller.action_on_path_relative_redirect = :raise
|
||||
|
||||
###
|
||||
# Use a Ruby parser to track dependencies between Action View templates
|
||||
#++
|
||||
Rails.configuration.action_view.render_tracker = :ruby
|
||||
|
||||
###
|
||||
# When enabled, hidden inputs generated by `form_tag`, `token_tag`, `method_tag`, and the hidden parameter fields
|
||||
# included in `button_to` forms will omit the `autocomplete="off"` attribute.
|
||||
#
|
||||
# Applications that want to keep generating the `autocomplete` attribute for those tags can set it to `false`.
|
||||
#++
|
||||
Rails.configuration.action_view.remove_hidden_field_autocomplete = true
|
||||
@@ -623,6 +623,9 @@ af:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ af:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ af:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Vertoon tot"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ af:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2096,6 +2102,7 @@ af:
|
||||
role: "Rol"
|
||||
roles: "Rolle"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "Begindatum"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ af:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplikate"
|
||||
label_edit: "Redigeer"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Wissel multikies"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4134,6 +4140,7 @@ af:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -627,6 +627,9 @@ ar:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1072,7 +1075,6 @@ ar:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1197,6 +1199,9 @@ ar:
|
||||
dependencies: "الاعتماديات"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "أظهِر حتّى"
|
||||
attachment:
|
||||
@@ -1571,6 +1576,7 @@ ar:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2208,6 +2214,7 @@ ar:
|
||||
role: "الدور"
|
||||
roles: "دور"
|
||||
search: "البحث"
|
||||
sprint: "Sprint"
|
||||
start_date: "تاريخ البدء"
|
||||
status: "الحالة"
|
||||
state: "State"
|
||||
@@ -3413,7 +3420,6 @@ ar:
|
||||
label_duplicate: "مكرر"
|
||||
label_duplicates: "التكرارات"
|
||||
label_edit: "تعديل"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "تبديل متعدد الخيارات"
|
||||
label_enabled_project_custom_fields: "تمكين الحقول المخصصة"
|
||||
@@ -4338,6 +4344,7 @@ ar:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ az:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ az:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ az:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ az:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2096,6 +2102,7 @@ az:
|
||||
role: "Role"
|
||||
roles: "Roles"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "Start date"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ az:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "Düzəliş et"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4134,6 +4140,7 @@ az:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -625,6 +625,9 @@ be:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1054,7 +1057,6 @@ be:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1179,6 +1181,9 @@ be:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1553,6 +1558,7 @@ be:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2152,6 +2158,7 @@ be:
|
||||
role: "Role"
|
||||
roles: "Roles"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "Start date"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3315,7 +3322,6 @@ be:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "Рэдагаваць"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4236,6 +4242,7 @@ be:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ bg:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ bg:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ bg:
|
||||
dependencies: "Зависимости"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Показване до"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ bg:
|
||||
not_available: "не е наличен поради системна конфигурация."
|
||||
not_deletable: "не може да бъде изтрито."
|
||||
not_current_user: "не е текущият потребител."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "е невалидна дата"
|
||||
not_a_datetime: "не е валидна дата и час."
|
||||
@@ -2096,6 +2102,7 @@ bg:
|
||||
role: "Роля"
|
||||
roles: "Роли"
|
||||
search: "Търсене"
|
||||
sprint: "Sprint"
|
||||
start_date: "Начална дата"
|
||||
status: "Състояние"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ bg:
|
||||
label_duplicate: "дубликат"
|
||||
label_duplicates: "дублирания"
|
||||
label_edit: "Редактиране"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Редактиране: %{x}"
|
||||
label_enable_multi_select: "Превключване към множествен избор"
|
||||
label_enabled_project_custom_fields: "Разрешени потребителски полета"
|
||||
@@ -4134,6 +4140,7 @@ bg:
|
||||
permission_edit_project_query: "Редактиране на заявката за проект"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -620,6 +620,9 @@ ca:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1033,7 +1036,6 @@ ca:
|
||||
title: "Falta un flux de treball per compartir paquets de treball"
|
||||
message: "No s'ha configurat cap flux de treball per a la funció \"Editor de paquets de treball\". Sense un flux de treball, el que es comparteix amb l'usuari no pot alterar l'estat del paquet de treball. Els fluxos de treball es poden copiar. Seleccioneu un tipus d'origen (p. ex., \"Tasca\") i una funció d'origen (p. ex., \"Membre\"). A continuació, seleccioneu els tipus d'objectius. Per començar, podeu seleccionar tots els tipus com a objectius. Finalment, seleccioneu la funció \"Editor de paquets de treball\" com a objectiu i premeu \"Copia\". Després d'haver creat els valors predeterminats, ajusteu els fluxos de treball com ho feu per a qualsevol altra funció."
|
||||
link_message: "Configura els fluxos de treball a l'administració."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1158,6 +1160,9 @@ ca:
|
||||
dependencies: "Dependències"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Mostrar fins"
|
||||
attachment:
|
||||
@@ -1532,6 +1537,7 @@ ca:
|
||||
not_available: "no és disponible degut a la configuració del sistema."
|
||||
not_deletable: "no es pot eliminar."
|
||||
not_current_user: "no és l'usuari actual."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "no és una data vàlida."
|
||||
not_a_datetime: "no és una data-i-hora vàlida."
|
||||
@@ -2093,6 +2099,7 @@ ca:
|
||||
role: "Rol"
|
||||
roles: "Rols"
|
||||
search: "Cercar"
|
||||
sprint: "Sprint"
|
||||
start_date: "Data d'inici"
|
||||
status: "Estat"
|
||||
state: "State"
|
||||
@@ -3214,7 +3221,6 @@ ca:
|
||||
label_duplicate: "duplicats"
|
||||
label_duplicates: "duplicats"
|
||||
label_edit: "Editar"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edita: %{x}"
|
||||
label_enable_multi_select: "Activa/desactiva selecció múltiple"
|
||||
label_enabled_project_custom_fields: "Habilita camps personalitzats"
|
||||
@@ -4127,6 +4133,7 @@ ca:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ ckb-IR:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ ckb-IR:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ ckb-IR:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ ckb-IR:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2096,6 +2102,7 @@ ckb-IR:
|
||||
role: "Role"
|
||||
roles: "Roles"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "Start date"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ ckb-IR:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "Edit"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4134,6 +4140,7 @@ ckb-IR:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -625,6 +625,9 @@ cs:
|
||||
work_package_priorities:
|
||||
new_label: "nová priorita"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1054,7 +1057,6 @@ cs:
|
||||
title: "Pro sdílení pracovního balíčku chybí pracovní postup"
|
||||
message: "Pro roli 'Pracovní balíček' není nastaven žádný pracovní postup. Bez pracovního postupu nemůže sdílení s uživatelem změnit stav pracovního balíčku. Pracovní toky mohou být zkopírovány. Vyberte typ zdroje (např. 'Úkol') a zdrojovou roli (např. 'Člen'). Pak vyberte cílové typy. Na začátku můžete vybrat všechny typy jako cíle. Nakonec vyberte roli 'Editor pracovních balíčků' jako cíl a stiskněte 'Kopírovat'. Poté, co jste tak vytvořili výchozí nastavení, vyladit pracovní postupy, jak to děláte pro každou jinou roli."
|
||||
link_message: "Konfigurace pracovních postupů v administraci."
|
||||
templated_subject_hint: Automaticky generováno pomocí typu %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1179,6 +1181,9 @@ cs:
|
||||
dependencies: "Závislosti"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Zobrazit do"
|
||||
attachment:
|
||||
@@ -1553,6 +1558,7 @@ cs:
|
||||
not_available: "není k dispozici kvůli konfiguraci systému."
|
||||
not_deletable: "nelze odstranit"
|
||||
not_current_user: "není aktuální uživatel."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "nenalezeno."
|
||||
not_a_date: "není platné datum."
|
||||
not_a_datetime: "není platný čas."
|
||||
@@ -2152,6 +2158,7 @@ cs:
|
||||
role: "Role"
|
||||
roles: "Role"
|
||||
search: "Vyhledávání"
|
||||
sprint: "Sprint"
|
||||
start_date: "Datum zahájení"
|
||||
status: "Stav"
|
||||
state: "Stav"
|
||||
@@ -3315,7 +3322,6 @@ cs:
|
||||
label_duplicate: "duplikovat"
|
||||
label_duplicates: "duplikovaů"
|
||||
label_edit: "Upravit"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Přepnout multiselect"
|
||||
label_enabled_project_custom_fields: "Povoleno volitelné pole"
|
||||
@@ -4235,6 +4241,7 @@ cs:
|
||||
permission_edit_project_query: "Upravit dotaz projektu"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -621,6 +621,9 @@ da:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1034,7 +1037,6 @@ da:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1159,6 +1161,9 @@ da:
|
||||
dependencies: "Aflæggere"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1533,6 +1538,7 @@ da:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "Kan ikke slettes"
|
||||
not_current_user: "er ikke den aktuelle bruger."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2094,6 +2100,7 @@ da:
|
||||
role: "Rolle"
|
||||
roles: "Rollee"
|
||||
search: "Søg"
|
||||
sprint: "Sprint"
|
||||
start_date: "Start dato"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3215,7 +3222,6 @@ da:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "dubletter"
|
||||
label_edit: "Redigér"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Vælg multivalg"
|
||||
label_enabled_project_custom_fields: "Aktiverede brugerdefinerede felter"
|
||||
@@ -4132,6 +4138,7 @@ da:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -113,7 +113,7 @@ de:
|
||||
index:
|
||||
description: "Das Model Context Protocol ermöglicht es KI-Agenten, ihren Nutzern Tools und Ressourcen bereitzustellen, die diese OpenProject-Instanz zur Verfügung stellt."
|
||||
resources_heading: "Ressourcen"
|
||||
resources_description: "OpenProject implements the following resources. Each can be enabled, renamed and described as you want. For more information, please refer to the [documentation on MCP resources](docs_url)."
|
||||
resources_description: "OpenProject stellt die folgenden Ressourcen bereit. Jede Ressource kann nach Wunsch aktiviert, umbenannt und beschrieben werden. Weitere Informationen finden sich in der [Dokumentation zu MCP-Ressourcen](docs_url)."
|
||||
resources_submit: "Ressourcen aktualisieren"
|
||||
tools_heading: "Tools"
|
||||
tools_description: "OpenProject stellt die folgenden Tools bereit. Jedes Tool kann nach Wunsch aktiviert, umbenannt und beschrieben werden. Weitere Informationen finden sich in der [Dokumentation zu MCP-Ressourcen](docs_url)."
|
||||
@@ -122,7 +122,7 @@ de:
|
||||
success: "MCP-Konfigurationen wurden erfolgreich aktualisiert."
|
||||
server_form:
|
||||
description_caption: "Wie der MCP-Server gegenüber anderen Anwendungen beschrieben wird, die sich damit verbinden."
|
||||
title_caption: "A short title shown to applications that connect to the MCP server."
|
||||
title_caption: "Ein kurzer Titel, der Anwendungen angezeigt wird, die sich mit dem MCP-Server verbinden."
|
||||
update:
|
||||
failure: "Die MCP-Konfiguration konnte nicht aktualisiert werden."
|
||||
success: "Die MCP-Konfiguration wurde erfolgreich aktualisiert."
|
||||
@@ -605,7 +605,7 @@ de:
|
||||
is_for_all_blank_slate:
|
||||
heading: Für alle Projekte
|
||||
description: Dieses Projekt-Attribut ist in allen Projekten aktiviert, da die Option "Für alle Projekte" aktiviert ist. Es kann nicht für einzelne Projekte deaktiviert werden.
|
||||
enabled_via_assignee_when_submitted_html: This project attribute cannot be disabled since it is set as <a href=%{pir_submission_url} target="_blank">assignee when submitted</a> for project initiation requests.
|
||||
enabled_via_assignee_when_submitted_html: Dieses Projektattribut kann nicht deaktiviert werden, da es bei Projektinitiierungsanträgen als <a href=%{pir_submission_url} target="_blank">Zuweisung bei Einreichung</a> verwendet wird.
|
||||
types:
|
||||
no_results_title_text: Derzeit stehen keine Typen zur Verfügung.
|
||||
form:
|
||||
@@ -620,6 +620,9 @@ de:
|
||||
work_package_priorities:
|
||||
new_label: "Neue Priorität"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Die Anfrage zur Projektinitiierung konnte nicht aktiviert werden, da dafür mindestens ein aktiver Arbeitspaket-Typ erforderlich ist und dieses Projekt keinen hat. Bitte fügen Sie diesem Projekt mindestens einen Arbeitspaket-Typ hinzu."
|
||||
no_status_when_submitted: "Der Antrag auf Projektinitiierung konnte nicht aktiviert werden, da für den Arbeitspaket-Typ %{type} mindestens ein Status erforderlich ist, der mit ihm verknüpft ist. Bitte aktivieren Sie mindestens einen Status-Workflow für diesen Arbeitspaket-Typ."
|
||||
export:
|
||||
description_attachment_export: "Das erzeugte Artefakt wird als PDF-Anhang zum erstellten Arbeitspaket gespeichert."
|
||||
description_file_link_export: "Das erstellte Arbeitspaket enthält einen Dateilink zu einer PDF-Datei, die in einem externen Dateispeicher gespeichert ist. Erfordert einen aktiven Dateispeicher mit automatisch verwalteten Projektordnern. Im Moment werden nur Nextcloud-Dateispeicher unterstützt."
|
||||
@@ -633,7 +636,7 @@ de:
|
||||
label_request_submission: "Einreichung des Antrags"
|
||||
project_attributes_description: >
|
||||
Wählen Sie aus, welche Attribute in den Projektinitiierungsantrag aufgenommen werden sollen. Diese Liste zeigt nur [Projektattribute](project_attributes_url), die für dieses Projekt aktiviert sind.
|
||||
enabled_because_required_html: This project attribute cannot be disabled for this project initiation request since it is defined as required. This can be changed in the <a href=%{admin_settings_url} target="_blank">administration settings</a> by the administrator of the instance.
|
||||
enabled_because_required_html: Dieses Projektattribut kann für diesen Projektinitiierungsantrag nicht deaktiviert werden, da es als erforderlich definiert ist. Dies kann in den <a href=%{admin_settings_url} target="_blank">Administrationseinstellungen</a> vom Administrator der Instanz geändert werden.
|
||||
status:
|
||||
button_edit: Status bearbeiten
|
||||
wizard:
|
||||
@@ -1029,7 +1032,6 @@ de:
|
||||
title: "Der Workflow für das Teilen von Arbeitspaketen fehlt"
|
||||
message: "Es ist kein Workflow für die Rolle ‚Work package editor‘ konfiguriert. Nur mit einem solchen Workflow können Benutzer, mit denen ein Arbeitspaket geteilt wurde, den Status des Arbeitspakets ändern. Workflows lassen sich einfach kopieren. Wählen Sie dazu einen Quell-Typ (z. B. ‚Task‘) und eine Quell-Rolle (z. B. 'Member') aus. Wählen Sie dann die Ziel-Typen aus. Als ersten Schritt können Sie alle Typen als Ziel-Typen auswählen. Danach wählen Sie die Ziel-Rolle ‚Work package editor‘ aus und drücken Sie auf den Knopf ‚Kopieren‘. Nachdem Sie hiermit eine Grundlage geschaffen haben, können Sie danach diese Workflows weiter anpassen, ganz genau wie Sie es für jede andere Rolle bereits getan haben."
|
||||
link_message: "Konfigurieren Sie die Workflows in der Administration."
|
||||
templated_subject_hint: Automatisch durch den Typ %{type} erzeugt
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1153,6 +1155,9 @@ de:
|
||||
dependencies: "Abhängigkeiten"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Anzeigen bis"
|
||||
attachment:
|
||||
@@ -1248,9 +1253,9 @@ de:
|
||||
port: "Port"
|
||||
tls_certificate_string: "LDAP-Server SSL-Zertifikat"
|
||||
mcp_configuration:
|
||||
enabled: Enabled
|
||||
title: Title
|
||||
description: Description
|
||||
enabled: Aktiviert
|
||||
title: Titel
|
||||
description: Beschreibung
|
||||
member:
|
||||
roles: "Rollen"
|
||||
notification:
|
||||
@@ -1527,6 +1532,7 @@ de:
|
||||
not_available: "ist aufgrund einer Systemkonfiguration nicht verfügbar."
|
||||
not_deletable: "kann nicht entfernt werden."
|
||||
not_current_user: "ist nicht der aktuelle Benutzer."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "nicht gefunden."
|
||||
not_a_date: "ist kein gültiges Datum."
|
||||
not_a_datetime: "ist kein gültiges Datum."
|
||||
@@ -2088,6 +2094,7 @@ de:
|
||||
role: "Rollen"
|
||||
roles: "Rollen"
|
||||
search: "Suche"
|
||||
sprint: "Sprint"
|
||||
start_date: "Anfangstermin"
|
||||
status: "Status"
|
||||
state: "Status"
|
||||
@@ -2458,12 +2465,12 @@ de:
|
||||
edit_attribute_groups: Attributgruppen bearbeiten
|
||||
gantt_pdf_export: Gantt PDF Export
|
||||
ldap_groups: LDAP-Benutzer- und Gruppensynchronisation
|
||||
mcp_server: MCP Server
|
||||
mcp_server: MCP-Server
|
||||
nextcloud_sso: Single Sign-On für Nextcloud-Speicher
|
||||
one_drive_sharepoint_file_storage: OneDrive/SharePoint-Datei-Speicher
|
||||
placeholder_users: Platzhalter-Benutzer
|
||||
portfolio_management: Portfolioverwaltung
|
||||
project_creation_wizard: Project initiation request
|
||||
project_creation_wizard: Projektinitiierungsantrag
|
||||
project_list_sharing: Projektlistenfreigabe
|
||||
readonly_work_packages: Schreibgeschützte Arbeitspakete
|
||||
scim_api: SCIM-Server-API
|
||||
@@ -2536,7 +2543,7 @@ de:
|
||||
title: "Benutzerdefinierte Aktionen"
|
||||
description: "Selbstdefinierte Aktionen sind Verknüpfungen zu einer Reihe von vordefinierten Aktionen, die Sie für bestimmte Arbeitspakete je nach Status, Rolle, Typ oder Projekt mit nur einem Klick auf einen Button auslösen."
|
||||
mcp_server:
|
||||
description: "Integrate AI agents with your OpenProject instance through MCP."
|
||||
description: "Integrieren Sie KI-Agenten mit Ihrer OpenProject-Instanz über MCP."
|
||||
nextcloud_sso:
|
||||
title: "Single Sign-On für Nextcloud-Speicher"
|
||||
description: "Aktivieren Sie nahtlose und sichere Authentifizierung für Ihren Nextcloud-Speicher mit Single Sign-On. Vereinfachen Sie das Zugriffsmanagement und erhöhen Sie den Benutzerkomfort."
|
||||
@@ -2549,7 +2556,7 @@ de:
|
||||
virus_scanning:
|
||||
description: "Stellen Sie sicher, dass hochgeladene Dateien in OpenProject auf Viren gescannt werden, bevor sie für andere Benutzer zugänglich sind."
|
||||
project_creation_wizard:
|
||||
description: "Generate a step-by-step wizard to help project managers fill out a project initiation request."
|
||||
description: "Generieren Sie einen Schritt-für-Schritt-Assistenten, um Projektmanagern dabei zu helfen, einen Projektinitiierungsantrag auszufüllen."
|
||||
placeholder_users:
|
||||
title: Platzhalter-Konten
|
||||
description: >
|
||||
@@ -2853,7 +2860,7 @@ de:
|
||||
new_features_list:
|
||||
line_0: Automatisierte Projektinitiierung (Enterprise Add-on).
|
||||
line_1: "Besprechungen: Fügen Sie neue oder bestehende Arbeitspakete als Ergebnisse hinzu."
|
||||
line_2: "Meetings: show iCal responses in OpenProject."
|
||||
line_2: "Besprechungen: iCal-Antworten in OpenProject anzeigen."
|
||||
line_3: "Wiederkehrende Besprechungen: Kopieren Sie Tagesordnungspunkte zur nächsten Besprechung."
|
||||
line_4: "Freigabe für die Community-Edition: Hervorhebung von Attributen."
|
||||
line_5: Warnung vor dem Öffnen externer Links in von Benutzern erstellten Texten (Enterprise Add-on).
|
||||
@@ -2925,7 +2932,7 @@ de:
|
||||
instructions_after_error: "Sie können versuchen sich erneut anzumelden indem Sie auf %{signin} klicken. Wenn der Fehler weiterhin auftritt, fragen Sie Ihren Administrator um Hilfe."
|
||||
menus:
|
||||
admin:
|
||||
ai: "Artificial Intelligence (AI)"
|
||||
ai: "Künstliche Intelligenz (AI)"
|
||||
aggregation: "Zusammenfassungen"
|
||||
api_and_webhooks: "API und Webhooks"
|
||||
mail_notification: "Mailbenachrichtigung"
|
||||
@@ -2958,7 +2965,7 @@ de:
|
||||
text_hint: "API-Token erlauben es Drittanbieter-Anwendungen, mit dieser OpenProject-Instanz über REST-APIs zu kommunizieren."
|
||||
static_token_name: "API-Token"
|
||||
disabled_text: "API-Token sind vom Administrator nicht aktiviert. Bitte kontaktieren Sie Ihren Administrator, um diese Funktion zu nutzen."
|
||||
add_button: "API token"
|
||||
add_button: "API-Token"
|
||||
ical:
|
||||
blank_description: "Um einen iCalendar-Token hinzuzufügen, abonnieren Sie einen neuen oder bestehenden Kalender innerhalb des Kalender-Moduls eines Projekts. Sie müssen über die erforderlichen Berechtigungen verfügen."
|
||||
blank_title: "Kein iCalendar-Token"
|
||||
@@ -2986,7 +2993,7 @@ de:
|
||||
removed: "OAuth-Client-Token erfolgreich entfernt"
|
||||
unknown_integration: "Unbekannt"
|
||||
token/rss:
|
||||
add_button: "RSS token"
|
||||
add_button: "RSS-Token"
|
||||
blank_description: "Es gibt noch kein RSS-Token. Sie können eines erstellen, indem Sie auf die Schaltfläche unten klicken."
|
||||
blank_title: "Kein RSS-Token"
|
||||
title: "RSS"
|
||||
@@ -3056,7 +3063,7 @@ de:
|
||||
label_always_visible: "Immer angezeigt"
|
||||
label_announcement: "Ankündigung"
|
||||
label_angular: "AngularJS"
|
||||
label_app_modules: "%{app_title} modules"
|
||||
label_app_modules: "%{app_title} Module"
|
||||
label_api_access_key: "API-Zugriffsschlüssel"
|
||||
label_api_access_key_created_on: "Der API-Zugriffsschlüssel wurde vor %{value} erstellt"
|
||||
label_api_access_key_type: "Schnittstelle (API)"
|
||||
@@ -3209,7 +3216,6 @@ de:
|
||||
label_duplicate: "Duplikat"
|
||||
label_duplicates: "Duplikat von"
|
||||
label_edit: "Bearbeiten"
|
||||
label_edit_attribute: "Attribut bearbeiten"
|
||||
label_edit_x: "Bearbeiten: %{x}"
|
||||
label_enable_multi_select: "Mehrfachauswahl umschalten"
|
||||
label_enabled_project_custom_fields: "Aktivierte benutzerdefinierte Felder"
|
||||
@@ -3964,7 +3970,7 @@ de:
|
||||
notice_successful_delete: "Erfolgreich gelöscht."
|
||||
notice_successful_cancel: "Erfolgreiche Absage."
|
||||
notice_successful_update: "Erfolgreich aktualisiert."
|
||||
notice_successful_move: "Successful move from %{from} to %{to}."
|
||||
notice_successful_move: "Erfolgreich von %{from} nach %{to} verschoben."
|
||||
notice_unsuccessful_create: "Erstellung fehlgeschlagen."
|
||||
notice_unsuccessful_create_with_reason: "Erstellung fehlgeschlagen: %{reason}"
|
||||
notice_unsuccessful_update: "Aktualisierung fehlgeschlagen."
|
||||
@@ -4126,6 +4132,7 @@ de:
|
||||
permission_edit_project_query: "Projektabfrage bearbeiten"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "Keine Portfolios"
|
||||
@@ -4310,9 +4317,9 @@ de:
|
||||
setting_capture_external_links: "Externe Links abfangen"
|
||||
setting_capture_external_links_text: >
|
||||
Wenn diese Funktion aktiviert ist, werden alle externen Links in formatiertem Text auf eine vor dem Link warnende Seite in der Applikation umgeleitet, bevor sie die Anwendung verlassen. Dies hilft, Benutzer vor potenziell bösartigen externen Websites zu schützen.
|
||||
setting_capture_external_links_require_login: "Require users to be logged in"
|
||||
setting_capture_external_links_require_login: "Benutzer müssen angemeldet sein"
|
||||
setting_capture_external_links_require_login_text: >
|
||||
When enabled, users wanting to click on external links need to be logged in before being able to continue.
|
||||
Wenn aktiviert, müssen Benutzer angemeldet sein, um externe Links anklicken und fortfahren zu können.
|
||||
setting_after_first_login_redirect_url: "Weiterleitung nach erster Anmeldung"
|
||||
setting_after_first_login_redirect_url_text_html: >
|
||||
Legen Sie einen Pfad fest, an den Nutzer:innen nach der ersten Anmeldung weitergeleitet werden. Wenn leer, führt er auf die Startseite des Onboarding-Tours. <br/> Beispiel: <code>/meine/seite</code>
|
||||
|
||||
@@ -619,6 +619,9 @@ el:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1032,7 +1035,6 @@ el:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1157,6 +1159,9 @@ el:
|
||||
dependencies: "Εξαρτήσεις"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Εμφάνιση μέχρι"
|
||||
attachment:
|
||||
@@ -1531,6 +1536,7 @@ el:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "δεν μπορεί να διαγραφεί."
|
||||
not_current_user: "δεν είναι ο τρέχων χρήστης."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "δεν είναι έγκυρη ημερομηνία."
|
||||
not_a_datetime: "δεν είναι έγκυρη ημερομηνία και ώρα."
|
||||
@@ -2092,6 +2098,7 @@ el:
|
||||
role: "Ρόλος"
|
||||
roles: "Ρόλοι"
|
||||
search: "Αναζήτηση"
|
||||
sprint: "Sprint"
|
||||
start_date: "Ημερομηνία έναρξης"
|
||||
status: "Κατάσταση"
|
||||
state: "State"
|
||||
@@ -3213,7 +3220,6 @@ el:
|
||||
label_duplicate: "αντιγραφή"
|
||||
label_duplicates: "αντίγραφα"
|
||||
label_edit: "Επεξεργασία"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Επεξεργασία: %{x}"
|
||||
label_enable_multi_select: "Ενεργοποίηση πολλαπλής επιλογής"
|
||||
label_enabled_project_custom_fields: "Ενεργοποίηση προσαρμοσμένων πεδίων"
|
||||
@@ -4129,6 +4135,7 @@ el:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ eo:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ eo:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ eo:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Montri ĝis"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ eo:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "ne estas la nuna uzanto."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "Ĝi ne estas valida dato."
|
||||
not_a_datetime: "Ĝi ne estas valida dato/horo."
|
||||
@@ -2096,6 +2102,7 @@ eo:
|
||||
role: "Rolo"
|
||||
roles: "Roloj"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "Komencdato"
|
||||
status: "Stato"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ eo:
|
||||
label_duplicate: "duobligi"
|
||||
label_duplicates: "duobligoj"
|
||||
label_edit: "Redakti"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Baskuligi plurelekton"
|
||||
label_enabled_project_custom_fields: "Ŝalti proprajn kampojn"
|
||||
@@ -4134,6 +4140,7 @@ eo:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -621,6 +621,9 @@ es:
|
||||
work_package_priorities:
|
||||
new_label: "Nueva prioridad"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "El artefacto generado se guardará como PDF adjunto al paquete de trabajo del artefacto."
|
||||
description_file_link_export: "El paquete de trabajo de artefactos tendrá un enlace de archivo a un PDF almacenado en un almacenamiento de archivos externo. Requiere un almacenamiento de archivos de trabajo con carpetas de proyecto gestionadas automáticamente para este proyecto. Por el momento sólo son compatibles los almacenamientos de archivos Nextcloud."
|
||||
@@ -1034,7 +1037,6 @@ es:
|
||||
title: "Falta el flujo de trabajo para compartir paquetes de trabajo"
|
||||
message: "Ningún flujo de trabajo está configurado para el rol 'Editor de paquetes de trabajo'. Sin un flujo de trabajo, el usuario compartido no puede alterar el estado del paquete de trabajo. Los flujos de trabajo pueden ser copiados. Seleccione un tipo de base (por ejemplo, 'Tarea') y el rol de base (por ejemplo, 'Miembro'). Luego seleccione los tipos de destino. Para empezar, puede seleccionar todos los tipos como objetivos. Por último, seleccione el papel de \"Editor de paquetes de trabajo\" como objetivo y presione \"Copiar\". Después de haber creado así los valores predeterminados, ajuste los flujos de trabajo como lo hace para cualquier otro rol."
|
||||
link_message: "Configure un flujo de trabajo en la administración."
|
||||
templated_subject_hint: Generado automáticamente a través del tipo %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1158,6 +1160,9 @@ es:
|
||||
dependencies: "Dependencias"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Mostrar hasta"
|
||||
attachment:
|
||||
@@ -1532,6 +1537,7 @@ es:
|
||||
not_available: "no está disponible debido a una configuración del sistema."
|
||||
not_deletable: "no se puede eliminar."
|
||||
not_current_user: "no es el usuario actual."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "no encontrado."
|
||||
not_a_date: "no es una fecha válida."
|
||||
not_a_datetime: "no es una fecha/hora válida."
|
||||
@@ -2093,6 +2099,7 @@ es:
|
||||
role: "Perfil"
|
||||
roles: "Roles"
|
||||
search: "Buscar"
|
||||
sprint: "Sprint"
|
||||
start_date: "Fecha de inicio"
|
||||
status: "Estado"
|
||||
state: "Estado"
|
||||
@@ -3214,7 +3221,6 @@ es:
|
||||
label_duplicate: "duplicar"
|
||||
label_duplicates: "duplicados"
|
||||
label_edit: "Editar"
|
||||
label_edit_attribute: "Editar atributo"
|
||||
label_edit_x: "Editar: %{x}"
|
||||
label_enable_multi_select: "Selección multiple"
|
||||
label_enabled_project_custom_fields: "Habilitar campos personalizados"
|
||||
@@ -4130,6 +4136,7 @@ es:
|
||||
permission_edit_project_query: "Editar vistas de proyecto"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 carteras"
|
||||
|
||||
@@ -623,6 +623,9 @@ et:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ et:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ et:
|
||||
dependencies: "Sõltuvused"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ et:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "ei leitud."
|
||||
not_a_date: "pole korrektne kuupäev."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2096,6 +2102,7 @@ et:
|
||||
role: "Roll"
|
||||
roles: "Rollid"
|
||||
search: "Otsi"
|
||||
sprint: "Sprint"
|
||||
start_date: "Alguskuupäev"
|
||||
status: "Olek"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ et:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplikaadid"
|
||||
label_edit: "Muuda"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Võimalda mitmene valik"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4134,6 +4140,7 @@ et:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ eu:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ eu:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ eu:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ eu:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2096,6 +2102,7 @@ eu:
|
||||
role: "Role"
|
||||
roles: "Roles"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "Hasiera data"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ eu:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "Edit"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4134,6 +4140,7 @@ eu:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ fa:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ fa:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ fa:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ fa:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2096,6 +2102,7 @@ fa:
|
||||
role: "Role"
|
||||
roles: "نقشها"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "تاریخ شروع"
|
||||
status: "وضعیت"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ fa:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "ویرایش"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4134,6 +4140,7 @@ fa:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ fi:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ fi:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ fi:
|
||||
dependencies: "Riippuvuudet"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Näytä tähän päivään asti"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ fi:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "ei ole kelvollinen päivämäärä."
|
||||
not_a_datetime: "ei ole kelvollinen aika."
|
||||
@@ -2096,6 +2102,7 @@ fi:
|
||||
role: "Rooli"
|
||||
roles: "Roolit"
|
||||
search: "Haku"
|
||||
sprint: "Sprint"
|
||||
start_date: "Aloituspäivä"
|
||||
status: "Tila"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ fi:
|
||||
label_duplicate: "kaksoiskappale"
|
||||
label_duplicates: "kaksoiskappaleet"
|
||||
label_edit: "Muokkaa"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Vaihda monivalinta"
|
||||
label_enabled_project_custom_fields: "Käytössä olevat mukautetut kentät"
|
||||
@@ -4134,6 +4140,7 @@ fi:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ fil:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ fil:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ fil:
|
||||
dependencies: "Dependencia"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "I-displey hanggang"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ fil:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "ay hindi balido ang petsa."
|
||||
not_a_datetime: "ay hindi balido ang petsa ng oras."
|
||||
@@ -2096,6 +2102,7 @@ fil:
|
||||
role: "Tungkulin"
|
||||
roles: "Ang mga tungkulin"
|
||||
search: "Hanapin"
|
||||
sprint: "Sprint"
|
||||
start_date: "Petsa ng pagsimula"
|
||||
status: "Estado"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ fil:
|
||||
label_duplicate: "gayahin"
|
||||
label_duplicates: "mga ginaya"
|
||||
label_edit: "I-edit"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multi select"
|
||||
label_enabled_project_custom_fields: "Pinagana ang mga custom na patlang"
|
||||
@@ -4134,6 +4140,7 @@ fil:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ fr:
|
||||
work_package_priorities:
|
||||
new_label: "Nouvelle priorité"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "L'artefact généré sera enregistré en tant que pièce jointe au format PDF dans le lot de travaux de l'artefact."
|
||||
description_file_link_export: "Le lot de travaux de l'artefact contient un lien vers un fichier PDF stocké dans un espace de stockage de fichiers externe. Nécessite un stockage de fichiers de travail avec des dossiers de projet gérés automatiquement pour ce projet. Pour le moment, seuls les espaces de stockage de fichiers Nextcloud sont pris en charge."
|
||||
@@ -1034,7 +1037,6 @@ fr:
|
||||
title: "Flux de travail manquant pour le partage de lots de travaux"
|
||||
message: "Aucun flux de travail n'est configuré pour le rôle 'Éditeur de lots de travaux'. Sans flux de travail, le partage avec l'utilisateur ne permet pas de modifier l'état du lot de travaux. Les flux de travail peuvent être copiés. Sélectionnez un type de source (par exemple 'Tâche') et un rôle de source (par exemple 'Membre'). Sélectionnez ensuite les types cibles. Pour commencer, vous pouvez sélectionner tous les types comme cibles. Enfin, sélectionnez le rôle 'Éditeur de lot de travaux' comme cible et cliquez sur 'Copier'. Après avoir ainsi créé les valeurs par défaut, affinez les flux de travail comme vous le faites pour tous les autres rôles."
|
||||
link_message: "Configurez les flux de travail dans l'administration."
|
||||
templated_subject_hint: Généré automatiquement par le type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1159,6 +1161,9 @@ fr:
|
||||
dependencies: "Dépendances"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Afficher jusqu'à"
|
||||
attachment:
|
||||
@@ -1533,6 +1538,7 @@ fr:
|
||||
not_available: "n'est pas disponible en raison d'une configuration système."
|
||||
not_deletable: "ne peut pas être supprimé"
|
||||
not_current_user: "n'est pas l'utilisateur actuel."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "introuvable."
|
||||
not_a_date: "n'est pas une date valide."
|
||||
not_a_datetime: "n'est pas une heure valide."
|
||||
@@ -2094,6 +2100,7 @@ fr:
|
||||
role: "Rôle"
|
||||
roles: "Rôles"
|
||||
search: "Recherche"
|
||||
sprint: "Sprint"
|
||||
start_date: "Date de début"
|
||||
status: "Statut"
|
||||
state: "État"
|
||||
@@ -3215,7 +3222,6 @@ fr:
|
||||
label_duplicate: "dupliquer"
|
||||
label_duplicates: "Doublons"
|
||||
label_edit: "Éditer"
|
||||
label_edit_attribute: "Modifier l'attribut"
|
||||
label_edit_x: "Modifier : %{x}"
|
||||
label_enable_multi_select: "Basculer multisélection"
|
||||
label_enabled_project_custom_fields: "Champs personnalisés activés"
|
||||
@@ -4132,6 +4138,7 @@ fr:
|
||||
permission_edit_project_query: "Modifier la requête du projet"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portefeuille"
|
||||
|
||||
@@ -625,6 +625,9 @@ he:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1054,7 +1057,6 @@ he:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1179,6 +1181,9 @@ he:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1553,6 +1558,7 @@ he:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "זה לא המשתמש הנכון."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2152,6 +2158,7 @@ he:
|
||||
role: "תפקיד"
|
||||
roles: "תפקידים"
|
||||
search: "חיפוש"
|
||||
sprint: "Sprint"
|
||||
start_date: "תאריך התחלה"
|
||||
status: "מצב"
|
||||
state: "State"
|
||||
@@ -3315,7 +3322,6 @@ he:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "פריטים כפולים"
|
||||
label_edit: "עריכה"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "בטל בחירה מרובה"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4236,6 +4242,7 @@ he:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ hi:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1034,7 +1037,6 @@ hi:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1159,6 +1161,9 @@ hi:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1533,6 +1538,7 @@ hi:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2094,6 +2100,7 @@ hi:
|
||||
role: "भूमिका"
|
||||
roles: "भूमिकाएं"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "प्रारंभ दिनांक"
|
||||
status: "अवस्था"
|
||||
state: "State"
|
||||
@@ -3215,7 +3222,6 @@ hi:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "संपादित करें"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4132,6 +4138,7 @@ hi:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -624,6 +624,9 @@ hr:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1045,7 +1048,6 @@ hr:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1170,6 +1172,9 @@ hr:
|
||||
dependencies: "Ovisnosti"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Prikaži do"
|
||||
attachment:
|
||||
@@ -1544,6 +1549,7 @@ hr:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2124,6 +2130,7 @@ hr:
|
||||
role: "Role"
|
||||
roles: "Role"
|
||||
search: "Pretraživanje"
|
||||
sprint: "Sprint"
|
||||
start_date: "Datum Početka"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3266,7 +3273,6 @@ hr:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplikati"
|
||||
label_edit: "Uredi"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Aktiviraj/deaktiviraj selekciju"
|
||||
label_enabled_project_custom_fields: "Omogućena prilagođena polja"
|
||||
@@ -4185,6 +4191,7 @@ hr:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -622,6 +622,9 @@ hu:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1035,7 +1038,6 @@ hu:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1160,6 +1162,9 @@ hu:
|
||||
dependencies: "Szükséges összetevők"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Megjelenít eddig"
|
||||
attachment:
|
||||
@@ -1534,6 +1539,7 @@ hu:
|
||||
not_available: "nem érhető el a rendszer konfigurációja miatt.\n"
|
||||
not_deletable: "nem törölhető"
|
||||
not_current_user: "nem az aktuális felhasználó"
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "nem érvényes dátum."
|
||||
not_a_datetime: "ez nem érvényes dátum."
|
||||
@@ -2095,6 +2101,7 @@ hu:
|
||||
role: "Szerepkör"
|
||||
roles: "Szerepkörök"
|
||||
search: "Keresés"
|
||||
sprint: "Sprint"
|
||||
start_date: "Indulási dátum"
|
||||
status: "Állapot"
|
||||
state: "State"
|
||||
@@ -3216,7 +3223,6 @@ hu:
|
||||
label_duplicate: "duplikált"
|
||||
label_duplicates: "Ismétlődések"
|
||||
label_edit: "Szerkesztés"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Szerkesztés: %{x}"
|
||||
label_enable_multi_select: "Multiselect ki-/ bekapcsolása"
|
||||
label_enabled_project_custom_fields: "Egyéni mezők engedélyezve"
|
||||
@@ -4132,6 +4138,7 @@ hu:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -618,6 +618,9 @@ id:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1023,7 +1026,6 @@ id:
|
||||
title: "Alur kerja yang hilang untuk berbagi paket kerja"
|
||||
message: "Tidak ada alur kerja yang dikonfigurasikan untuk peran 'Editor paket kerja'. Tanpa alur kerja, pengguna yang dibagikan tidak dapat mengubah status paket kerja. Alur kerja dapat disalin. Pilih jenis sumber (misalnya 'Tugas') dan peran sumber (misalnya 'Anggota'). Kemudian pilih jenis target. Sebagai permulaan, Anda dapat memilih semua jenis sebagai target. Terakhir, pilih peran 'Editor paket kerja' sebagai target dan tekan 'Salin'. Setelah membuat default, sesuaikan alur kerja seperti yang Anda lakukan untuk setiap peran lainnya."
|
||||
link_message: "Mengonfigurasi alur kerja dalam administrasi."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1148,6 +1150,9 @@ id:
|
||||
dependencies: "Dependensi"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1522,6 +1527,7 @@ id:
|
||||
not_available: "tidak tersedia karena konfigurasi sistem."
|
||||
not_deletable: "tidak dapat dihapus."
|
||||
not_current_user: "bukan pengguna saat ini."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "bukan tanggal yang valid."
|
||||
not_a_datetime: "bukan tanggal waktu yang valid."
|
||||
@@ -2064,6 +2070,7 @@ id:
|
||||
role: "Role"
|
||||
roles: "Roles"
|
||||
search: "Cari"
|
||||
sprint: "Sprint"
|
||||
start_date: "Tanggal start"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3164,7 +3171,6 @@ id:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplikat"
|
||||
label_edit: "Edit"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Beralih ke multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4078,6 +4084,7 @@ id:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "Hapus nilai"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -621,6 +621,9 @@ it:
|
||||
work_package_priorities:
|
||||
new_label: "Nuova priorità"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "L'artefatto generato verrà salvato come allegato PDF alla macro-attività dell'artefatto."
|
||||
description_file_link_export: "La macro-attività dell'artefatto includerà un collegamento a un file PDF archiviato in uno spazio di archiviazione esterno. Richiede uno spazio di archiviazione file funzionante con cartelle di progetto gestite automaticamente per questo progetto. Al momento sono supportati solo archivi file Nextcloud."
|
||||
@@ -1033,7 +1036,6 @@ it:
|
||||
title: "Flusso di lavoro mancante per la condivisione di macro-attività"
|
||||
message: "Nessun flusso di lavoro è configurato per il ruolo \"Editor di macro-attività\". Senza un flusso di lavoro, la condivisione con l'utente non può alterare lo stato della macro-attività. I flussi di lavoro possono essere copiati. Seleziona un tipo di origine (ad esempio \"Attività\") e un ruolo di origine (ad esempio \"Membro\"). Quindi seleziona i tipi obiettivo. Per cominciare, potresti selezionare tutti i tipi come obiettivi. Infine, seleziona il ruolo \"Editor di macro-attività\" come destinazione e premi \"Copia\". Dopo aver creato le impostazioni predefinite, perfeziona i flussi di lavoro come fai per ogni altro ruolo."
|
||||
link_message: "Configura i flussi di lavoro nell'amministrazione."
|
||||
templated_subject_hint: Generato automaticamente attraverso il tipo %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1158,6 +1160,9 @@ it:
|
||||
dependencies: "Dipendenze"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Visualizza fino a"
|
||||
attachment:
|
||||
@@ -1532,6 +1537,7 @@ it:
|
||||
not_available: "non è disponibile a causa di una configurazione di sistema."
|
||||
not_deletable: "non può essere eliminato."
|
||||
not_current_user: "non è l'utente attuale."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "non trovato."
|
||||
not_a_date: "non è una data valida."
|
||||
not_a_datetime: "non è un'orario valido."
|
||||
@@ -2093,6 +2099,7 @@ it:
|
||||
role: "Ruolo"
|
||||
roles: "Ruoli"
|
||||
search: "Cerca"
|
||||
sprint: "Sprint"
|
||||
start_date: "Data di inizio"
|
||||
status: "Stato"
|
||||
state: "Stato"
|
||||
@@ -3214,7 +3221,6 @@ it:
|
||||
label_duplicate: "duplica"
|
||||
label_duplicates: "duplica"
|
||||
label_edit: "Modifica"
|
||||
label_edit_attribute: "Modifica attributo"
|
||||
label_edit_x: "Modifica: %{x}"
|
||||
label_enable_multi_select: "Attiva/disattiva multiselezione"
|
||||
label_enabled_project_custom_fields: "Campi personalizzati abilitati"
|
||||
@@ -4131,6 +4137,7 @@ it:
|
||||
permission_edit_project_query: "Modifica elenco di progetti"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolio"
|
||||
|
||||
@@ -620,6 +620,9 @@ ja:
|
||||
work_package_priorities:
|
||||
new_label: "新しい優先度"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1026,7 +1029,6 @@ ja:
|
||||
title: "ワークパッケージの共有のためのワークフローがありません"
|
||||
message: "「ワークパッケージエディタ」ロールに対してワークフローが設定されていません。ワークフローがなければ、ユーザーと共有されたワークパッケージのステータスは変更できません。 ワークフローをコピーすることができます。ソースタイプ(例:「タスク」)とソースロール(例:「メンバー」)を選択します。 次に、ターゲットタイプを選択します。最初に、すべてのタイプをターゲットとして選択できます。 最後に、「ワークパッケージの編集」ロールをターゲットとして選択し、「コピー」を押します。 このようにしてデフォルトを作成した後、他のすべてのロールに対して行うようにワークフローを微調整します。"
|
||||
link_message: "管理画面でワークフローを構成します。"
|
||||
templated_subject_hint: '%{type}タイプで自動生成されます'
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1151,6 +1153,9 @@ ja:
|
||||
dependencies: "依存関係"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "までを表示"
|
||||
attachment:
|
||||
@@ -1525,6 +1530,7 @@ ja:
|
||||
not_available: "はシステム構成のため使用できません。"
|
||||
not_deletable: "削除できません。"
|
||||
not_current_user: "現在のユーザーではありません。"
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "見つかりません。"
|
||||
not_a_date: "は有効な日付ではありません。"
|
||||
not_a_datetime: "は有効な日時ではありません。"
|
||||
@@ -2067,6 +2073,7 @@ ja:
|
||||
role: "ロール"
|
||||
roles: "ロール"
|
||||
search: "検索"
|
||||
sprint: "Sprint"
|
||||
start_date: "開始日"
|
||||
status: "ステータス"
|
||||
state: "状態"
|
||||
@@ -3167,7 +3174,6 @@ ja:
|
||||
label_duplicate: "重複"
|
||||
label_duplicates: "次と重複"
|
||||
label_edit: "編集"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "編集: %{x}"
|
||||
label_enable_multi_select: "複数選択の切り替え"
|
||||
label_enabled_project_custom_fields: "有効なカスタム フィールド"
|
||||
@@ -4082,6 +4088,7 @@ ja:
|
||||
permission_edit_project_query: "プロジェクトのクエリを編集"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ ka:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ ka:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ ka:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "ჩვენება სადამდე"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ ka:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2096,6 +2102,7 @@ ka:
|
||||
role: "როლი"
|
||||
roles: "როლები"
|
||||
search: "ძებნა"
|
||||
sprint: "Sprint"
|
||||
start_date: "დაწყების თარიღი"
|
||||
status: "სტატუსი"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ ka:
|
||||
label_duplicate: "დუბლირება"
|
||||
label_duplicates: "დუბლიკატები"
|
||||
label_edit: "ჩასწორება"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "ჩასწორება: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4134,6 +4140,7 @@ ka:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ kk:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ kk:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ kk:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ kk:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2096,6 +2102,7 @@ kk:
|
||||
role: "Role"
|
||||
roles: "Roles"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "Start date"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ kk:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "Edit"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4134,6 +4140,7 @@ kk:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -622,6 +622,9 @@ ko:
|
||||
work_package_priorities:
|
||||
new_label: "새로운 우선 순위"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "생성된 아티팩트는 아티팩트 작업 패키지에 PDF 첨부 파일로 저장됩니다."
|
||||
description_file_link_export: "아티팩트 작업 패키지에는 외부 파일 저장소에 저장된 PDF에 대한 파일 링크가 있습니다. 이 프로젝트에 대해 자동으로 관리되는 프로젝트 폴더가 있는 작업 파일 저장소가 필요합니다. 현재는 Nextcloud 파일 저장소만 지원됩니다."
|
||||
@@ -1027,7 +1030,6 @@ ko:
|
||||
title: "작업 패키지 공유에 대한 워크플로 누락"
|
||||
message: "'작업 패키지 편집자' 역할에 대해 구성된 워크플로가 없습니다. 워크플로가 없으면 사용자와 공유된 워크플로는 작업 패키지의 상태를 변경할 수 없습니다. 워크플로를 복사할 수는 있습니다. 소스 유형(예: '작업')과 소스 역할(예: '멤버')을 선택하세요. 그런 다음 대상 유형을 선택하세요. 시작하기 위해 모든 유형을 대상으로 선택할 수 있습니다. 마지막으로 '작업 패키지 편집자' 역할을 대상으로 선택하고 '복사'를 누르세요. 기본값을 생성한 후 다른 모든 역할에 대해 수행하는 것처럼 워크플로를 미세 조정하세요."
|
||||
link_message: "관리에서 워크플로를 구성하세요."
|
||||
templated_subject_hint: '%{type} 유형을 통해 자동으로 생성됨'
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1152,6 +1154,9 @@ ko:
|
||||
dependencies: "종속성"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "표시 기한"
|
||||
attachment:
|
||||
@@ -1526,6 +1531,7 @@ ko:
|
||||
not_available: "- 시스템 구성으로 인해 사용 가능하지 않습니다."
|
||||
not_deletable: "- 삭제할 수 없습니다."
|
||||
not_current_user: "은(는) 현재 유효한 사용자가 아닙니다."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "- 찾을 수 없습니다."
|
||||
not_a_date: "은(는) 유효한 날짜가 아닙니다."
|
||||
not_a_datetime: "은(는) 유효한 날짜가 아닙니다."
|
||||
@@ -2068,6 +2074,7 @@ ko:
|
||||
role: "역할"
|
||||
roles: "역할"
|
||||
search: "검색"
|
||||
sprint: "Sprint"
|
||||
start_date: "시작 날짜"
|
||||
status: "상태"
|
||||
state: "상태"
|
||||
@@ -3168,7 +3175,6 @@ ko:
|
||||
label_duplicate: "중복"
|
||||
label_duplicates: "복제"
|
||||
label_edit: "편집"
|
||||
label_edit_attribute: "특성 편집"
|
||||
label_edit_x: "편집: %{x}"
|
||||
label_enable_multi_select: "다중 선택 토글"
|
||||
label_enabled_project_custom_fields: "사용자 정의 필드 사용"
|
||||
@@ -4082,6 +4088,7 @@ ko:
|
||||
permission_edit_project_query: "프로젝트 쿼리 편집"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0개 포트폴리오"
|
||||
|
||||
@@ -622,6 +622,9 @@ lt:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1051,7 +1054,6 @@ lt:
|
||||
title: "Darbo paketo dalinimuisi trūksta darbo proceso"
|
||||
message: "Vaidmeniui „Darbo paketo redaktorius“ nesukonfigūruotas procesas. Be proceso naudotojas negali pakeisti darbo paketo būsenos. Procesą galima nukopijuoti. Parinkite šaltinio tipą („pvz. „Užduotis“) ir šaltinio vaidmenį (pvz. „Narys“). Tada parinkite paskirties tipus. Pradžiai galėtumėte kaip paskirtį parinkti visus tipus. Galų gale parinkite vaidmenį „Darbo paketų redaktorius“ kaip paskirtį ir spauskite „Kopijuoti“. Taip sukūrę numatytąjį variantą, patikslinkite procesus kaip tai darote su kitais vaidmenimis."
|
||||
link_message: "Konfigūruokite procesus administravime."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1176,6 +1178,9 @@ lt:
|
||||
dependencies: "Priklausomybės"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Rodyti iki"
|
||||
attachment:
|
||||
@@ -1550,6 +1555,7 @@ lt:
|
||||
not_available: "yra nepasiekiamas dėl sistemos konfigūracijos"
|
||||
not_deletable: "negali būti pašalintas."
|
||||
not_current_user: "nėra dabartinis naudotojas"
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "nėra tinkama data."
|
||||
not_a_datetime: "nėra tinkama data ir laikas."
|
||||
@@ -2149,6 +2155,7 @@ lt:
|
||||
role: "Vaidmuo"
|
||||
roles: "Vaidmenys"
|
||||
search: "Paieška"
|
||||
sprint: "Sprint"
|
||||
start_date: "Pradžios data"
|
||||
status: "Būsena"
|
||||
state: "State"
|
||||
@@ -3312,7 +3319,6 @@ lt:
|
||||
label_duplicate: "dubliuoti"
|
||||
label_duplicates: "dubliuojasi"
|
||||
label_edit: "Redaguoti"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Redaguoti: %{x}"
|
||||
label_enable_multi_select: "Perjungti daugybinį pažymėjimą"
|
||||
label_enabled_project_custom_fields: "Įgalinti papildomi laukai"
|
||||
@@ -4232,6 +4238,7 @@ lt:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -624,6 +624,9 @@ lv:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1045,7 +1048,6 @@ lv:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1170,6 +1172,9 @@ lv:
|
||||
dependencies: "Saistītie projekti"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1544,6 +1549,7 @@ lv:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2124,6 +2130,7 @@ lv:
|
||||
role: "Loma"
|
||||
roles: "Lomas"
|
||||
search: "Meklēšana"
|
||||
sprint: "Sprint"
|
||||
start_date: "Sākuma datums"
|
||||
status: "Statuss"
|
||||
state: "State"
|
||||
@@ -3266,7 +3273,6 @@ lv:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "Labot"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Iespējotie pielāgotie lauki"
|
||||
@@ -4185,6 +4191,7 @@ lv:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ mn:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ mn:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ mn:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ mn:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2096,6 +2102,7 @@ mn:
|
||||
role: "Role"
|
||||
roles: "Roles"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "Start date"
|
||||
status: "Төлөв"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ mn:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "Edit"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4134,6 +4140,7 @@ mn:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -621,6 +621,9 @@ ms:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1025,7 +1028,6 @@ ms:
|
||||
title: "Aliran kerja hilang untuk perkongsian pakej kerja"
|
||||
message: "Tiada aliran kerja yang dikonfigurasi untuk peranan 'Pengedit Pakej Kerja'. Tanpa aliran kerja, perkongsian dengan pengguna tidak boleh mengubah status pakej kerja tersebut. Aliran kerja boleh disalin. Pilih jenis sumber (cth. 'Tugasan') dan peranan sumber (cth. 'Ahli'). Kemudian pilih jenis sasaran. Sebagai permulaan, anda boleh pilih semua jenis sebagai sasaran. Akhirnya, pilih peranan 'Pengedit Pakej Kerja' sebagai sasaran dan tekan 'Salin'. Setelah mencipta default ini, selaraskan semula aliran kerja sebagaimana yang anda lakukan untuk setiap peranan yang lain."
|
||||
link_message: "Konfigurasi aliran kerja dalam pentadbiran."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1150,6 +1152,9 @@ ms:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Paparkan sehingga"
|
||||
attachment:
|
||||
@@ -1524,6 +1529,7 @@ ms:
|
||||
not_available: "adalah tidak tersedia kerana konfigurasi sistem."
|
||||
not_deletable: "tidak dapat dipadamkan."
|
||||
not_current_user: "adalah bukan pengguna semasa."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "tidak dijumpai."
|
||||
not_a_date: "bukan tarikh yang sah."
|
||||
not_a_datetime: "bukan tarikh masa yang sah."
|
||||
@@ -2066,6 +2072,7 @@ ms:
|
||||
role: "Peranan"
|
||||
roles: "Peranan\n"
|
||||
search: "Cari"
|
||||
sprint: "Sprint"
|
||||
start_date: "Tarikh mula"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3166,7 +3173,6 @@ ms:
|
||||
label_duplicate: "duplikasi"
|
||||
label_duplicates: "pendua"
|
||||
label_edit: "Edit"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Tukar pilihan berganda"
|
||||
label_enabled_project_custom_fields: "Ruang tersuai yang diaktifkan"
|
||||
@@ -4080,6 +4086,7 @@ ms:
|
||||
permission_edit_project_query: "Edit pertanyaan projek"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ ne:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ ne:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ ne:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ ne:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2096,6 +2102,7 @@ ne:
|
||||
role: "Role"
|
||||
roles: "भूमिकाहरु"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "Start date"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ ne:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "Edit"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4134,6 +4140,7 @@ ne:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -620,6 +620,9 @@ nl:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1032,7 +1035,6 @@ nl:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configureer de workflows in de administratie."
|
||||
templated_subject_hint: Automatisch gegenereerd via type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1157,6 +1159,9 @@ nl:
|
||||
dependencies: "Afhankelijkheden"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Toon tot"
|
||||
attachment:
|
||||
@@ -1531,6 +1536,7 @@ nl:
|
||||
not_available: "is niet beschikbaar vanwege een systeemconfiguratie."
|
||||
not_deletable: "kan niet worden verwijderd."
|
||||
not_current_user: "is niet de huidige gebruiker."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "niet gevonden."
|
||||
not_a_date: "is geen geldige datum."
|
||||
not_a_datetime: "is geen geldige datum tijd."
|
||||
@@ -2092,6 +2098,7 @@ nl:
|
||||
role: "Rol"
|
||||
roles: "Rollen"
|
||||
search: "Zoeken"
|
||||
sprint: "Sprint"
|
||||
start_date: "Startdatum"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3213,7 +3220,6 @@ nl:
|
||||
label_duplicate: "dupliceren"
|
||||
label_duplicates: "duplicaten"
|
||||
label_edit: "Wijzig"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Bewerken: %{x}"
|
||||
label_enable_multi_select: "Omschakelen multiselect"
|
||||
label_enabled_project_custom_fields: "Ingeschakelde aangepaste velden"
|
||||
@@ -4129,6 +4135,7 @@ nl:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@
|
||||
work_package_priorities:
|
||||
new_label: "Ny prioritet"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1035,7 +1038,6 @@
|
||||
title: "Arbeidsflyt mangler for deling av arbeidspakker"
|
||||
message: "Ingen arbeidsflyt er konfigurert for rollen 'Arbeidspakke redaktør'. Uten en arbeidsflyt kan ikke brukeren endre status på arbeidspakken. Arbeidsflyt kan kopieres. Velg en kildetype (f.eks. 'oppgave') og en kilderolle (f.eks. 'medlem'). Velg så måltyper. Til å begynne med, kan du velge alle typene som mål. Til slutt velger du \"Redigeringsprogrammet for arbeidspakke\" som mål og press \"Copy\". Etter å ha opprettet standardinnstillingene, kan du finjustere arbeidsflytene som du gjør for hver annen rolle."
|
||||
link_message: "Konfigurer arbeidsmetodene i administrasjonen."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1160,6 +1162,9 @@
|
||||
dependencies: "Avhengigheter"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Vise til"
|
||||
attachment:
|
||||
@@ -1534,6 +1539,7 @@
|
||||
not_available: "er ikke tilgjengelig på grunn av en systemkonfigurasjon."
|
||||
not_deletable: "kan ikke slettes."
|
||||
not_current_user: "er ikke gjeldende bruker."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "er ikke en gyldig dato."
|
||||
not_a_datetime: "er ikke et gyldig tidspunkt for datoen."
|
||||
@@ -2095,6 +2101,7 @@
|
||||
role: "Rolle"
|
||||
roles: "Rolle"
|
||||
search: "Søk"
|
||||
sprint: "Sprint"
|
||||
start_date: "Startdato"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3216,7 +3223,6 @@
|
||||
label_duplicate: "duplikat"
|
||||
label_duplicates: "duplikater"
|
||||
label_edit: "Rediger"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Rediger: %{x}"
|
||||
label_enable_multi_select: "Veksle multivalg"
|
||||
label_enabled_project_custom_fields: "Aktiverte egendefinerte felt"
|
||||
@@ -4133,6 +4139,7 @@
|
||||
permission_edit_project_query: "Rediger prosjektspørring"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -622,6 +622,9 @@ pl:
|
||||
work_package_priorities:
|
||||
new_label: "Nowy priorytet"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "Wygenerowany artefakt zostanie zapisany jako załącznik PDF do pakietu roboczego artefaktu."
|
||||
description_file_link_export: "Pakiet roboczy artefaktu będzie zawierał link do pliku PDF przechowywanego w zewnętrznym magazynie plików. Wymaga działającego magazynu plików z automatycznie zarządzanymi folderami tego projektu. Obecnie obsługiwane są tylko magazyny plików Nextcloud."
|
||||
@@ -1051,7 +1054,6 @@ pl:
|
||||
title: "Brak przepływu pracy udostępniania pakietu roboczego"
|
||||
message: "Dla roli „Edytor pakietów roboczych” nie skonfigurowano przepływu pracy. Bez przepływu pracy użytkownik, któremu ją udostępniono nie może zmienić statusu pakietu roboczego. Przepływy pracy można kopiować. Wybierz typ źródłowy (np. „Zadanie”) i rolę źródłową (np. „Członek”). Następnie wybierz typy docelowe. Na początek możesz wybrać wszystkie typy jako docelowe. Na koniec wybierz rolę „Edytor pakietów roboczych” jako cel i naciśnij przycisk „Kopiuj”. Po utworzeniu ustawień domyślnych dostosuj przepływy pracy tak, jak w przypadku każdej innej roli."
|
||||
link_message: "Skonfiguruj przepływy pracy w administracji."
|
||||
templated_subject_hint: Automatycznie wygenerowany przez typ %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1175,6 +1177,9 @@ pl:
|
||||
dependencies: "Zależności"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Wyświetlaj do"
|
||||
attachment:
|
||||
@@ -1549,6 +1554,7 @@ pl:
|
||||
not_available: "jest niedostępne z powodu konfiguracji systemu."
|
||||
not_deletable: "— nie można usunąć."
|
||||
not_current_user: "nie jest bieżącym użytkownikiem."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "nie znaleziono."
|
||||
not_a_date: "nie jest poprawną datą."
|
||||
not_a_datetime: "nie jest poprawną datą i czasem."
|
||||
@@ -2148,6 +2154,7 @@ pl:
|
||||
role: "Rola"
|
||||
roles: "Role"
|
||||
search: "Wyszukaj"
|
||||
sprint: "Sprint"
|
||||
start_date: "Data rozpoczęcia"
|
||||
status: "Status"
|
||||
state: "Stan"
|
||||
@@ -3311,7 +3318,6 @@ pl:
|
||||
label_duplicate: "duplikat"
|
||||
label_duplicates: "Duplikaty"
|
||||
label_edit: "Edytuj"
|
||||
label_edit_attribute: "Edytuj atrybut"
|
||||
label_edit_x: "Edytuj: %{x}"
|
||||
label_enable_multi_select: "Włącz wybór wielokrotny"
|
||||
label_enabled_project_custom_fields: "Aktywne pola niestandardowe"
|
||||
@@ -4231,6 +4237,7 @@ pl:
|
||||
permission_edit_project_query: "Edytuj zapytanie dotyczące projektu"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfoliów"
|
||||
|
||||
@@ -622,6 +622,9 @@ pt-BR:
|
||||
work_package_priorities:
|
||||
new_label: "Nova prioridade"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "O artefato gerado será salvo como um anexo PDF no pacote de trabalho do artefato."
|
||||
description_file_link_export: "O pacote de trabalho do artefato incluirá um link para um PDF armazenado em um armazenamento de arquivos externo. É necessário que o armazenamento ofereça gerenciamento automático de pastas por projeto. Atualmente, apenas armazenamentos Nextcloud são compatíveis."
|
||||
@@ -1033,7 +1036,6 @@ pt-BR:
|
||||
title: "Fluxo de trabalho ausente para compartilhamento de pacotes de trabalho"
|
||||
message: "Nenhum fluxo de trabalho está configurado para a função \"Editor de pacote de trabalho\". Sem um fluxo de trabalho, o usuário compartilhado não pode alterar o status do pacote de trabalho. Os fluxos de trabalho podem ser copiados. Selecione um tipo de origem (ex.: \"Tarefa\") e uma função de origem (ex.: \"Membro\"). Em seguida, selecione os tipos de destino. Para começar, você pode selecionar todos os tipos como alvos. Por fim, selecione a função \"Editor de pacote de trabalho\" como o destino e pressione \"Copiar\". Depois de criar os padrões, ajuste os fluxos de trabalho da mesma forma que faz para todas as outras funções."
|
||||
link_message: "Configure os fluxos de trabalho na administração."
|
||||
templated_subject_hint: Gerado automaticamente através do tipo %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1158,6 +1160,9 @@ pt-BR:
|
||||
dependencies: "Dependências"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Exibir até"
|
||||
attachment:
|
||||
@@ -1532,6 +1537,7 @@ pt-BR:
|
||||
not_available: "não está disponível devido a uma configuração do sistema."
|
||||
not_deletable: "não pode ser excluído."
|
||||
not_current_user: "não é o usuário atual."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "não encontrado."
|
||||
not_a_date: "não é uma data válida."
|
||||
not_a_datetime: "não é uma data/hora válida."
|
||||
@@ -2093,6 +2099,7 @@ pt-BR:
|
||||
role: "Função"
|
||||
roles: "Papéis"
|
||||
search: "Pesquisar"
|
||||
sprint: "Sprint"
|
||||
start_date: "Data de início"
|
||||
status: "Status"
|
||||
state: "Estado"
|
||||
@@ -3214,7 +3221,6 @@ pt-BR:
|
||||
label_duplicate: "duplicado"
|
||||
label_duplicates: "Duplicados"
|
||||
label_edit: "Editar"
|
||||
label_edit_attribute: "Editar atributo"
|
||||
label_edit_x: "Editar: %{x}"
|
||||
label_enable_multi_select: "Alterna para seleção múltipla"
|
||||
label_enabled_project_custom_fields: "Campos personalizados habilitados"
|
||||
@@ -4130,6 +4136,7 @@ pt-BR:
|
||||
permission_edit_project_query: "Editar consulta do projeto"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfólios"
|
||||
|
||||
@@ -621,6 +621,9 @@ pt-PT:
|
||||
work_package_priorities:
|
||||
new_label: "Nova prioridade"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "O artefacto gerado será guardado como anexo PDF no pacote de trabalho do artefacto."
|
||||
description_file_link_export: "O pacote de trabalho do artefacto terá uma ligação de ficheiro a um PDF armazenado num arquivo externo. Requer um armazenamento de ficheiros funcional com pastas de projeto geridas automaticamente para este projeto. De momento, só são suportados os armazenamentos de ficheiros Nextcloud."
|
||||
@@ -1033,7 +1036,6 @@ pt-PT:
|
||||
title: "Falta um fluxo de trabalho para a partilha de pacotes de trabalho"
|
||||
message: "Nenhum fluxo de trabalho está configurado para a função \"Editor do pacote de trabalho\". Sem um fluxo de trabalho, o utilizador não pode alterar o estado do pacote de trabalho. Os fluxos de trabalho podem ser copiados. Selecione um tipo de fonte (por exemplo, \"Tarefa\") e uma função da fonte (por exemplo, \"Membro\"). Em seguida, selecione os tipos de destino. Para começar, pode selecionar todos os tipos como alvos. Por fim, selecione a função \"Editor do pacote de trabalho\" como destino e prima \"Copiar\". Depois de ter criado as predefinições, ajuste os fluxos de trabalho como faz para todas as outras funções."
|
||||
link_message: "Configure os fluxos de trabalho na administração."
|
||||
templated_subject_hint: Gerado automaticamente através do tipo %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1158,6 +1160,9 @@ pt-PT:
|
||||
dependencies: "Dependências"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Exibir até"
|
||||
attachment:
|
||||
@@ -1532,6 +1537,7 @@ pt-PT:
|
||||
not_available: "não está disponível devido a uma configuração do sistema."
|
||||
not_deletable: "não pode ser eliminado"
|
||||
not_current_user: "não é o utilizador atual."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "não encontrado."
|
||||
not_a_date: "não é uma data válida."
|
||||
not_a_datetime: "não é uma data/hora válida."
|
||||
@@ -2093,6 +2099,7 @@ pt-PT:
|
||||
role: "Função"
|
||||
roles: "Papel"
|
||||
search: "Pesquisar"
|
||||
sprint: "Sprint"
|
||||
start_date: "Data de início"
|
||||
status: "Situação"
|
||||
state: "Estado"
|
||||
@@ -3214,7 +3221,6 @@ pt-PT:
|
||||
label_duplicate: "duplicado"
|
||||
label_duplicates: "duplicados"
|
||||
label_edit: "Editar"
|
||||
label_edit_attribute: "Editar atributo"
|
||||
label_edit_x: "Editar: %{x}"
|
||||
label_enable_multi_select: "Alternar para selecção múltipla"
|
||||
label_enabled_project_custom_fields: "Campos personalizados activados"
|
||||
@@ -4130,6 +4136,7 @@ pt-PT:
|
||||
permission_edit_project_query: "Editar consulta de projeto"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 carteiras"
|
||||
|
||||
@@ -624,6 +624,9 @@ ro:
|
||||
work_package_priorities:
|
||||
new_label: "Prioritate nouă"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1045,7 +1048,6 @@ ro:
|
||||
title: "Lipsește fluxul pentru partajarea pachetului de lucru"
|
||||
message: "Niciun flux de lucru nu este configurat pentru rolul 'Editor pachete de lucru'. Fără un flux de lucru, utilizatorul nu poate modifica statusul pachetului de lucru. Fluxurile de lucru pot fi copiate. Selectează un tip sursă (de ex. 'Task') şi rolul sursă (de ex. 'Membru'). Apoi selectează tipurile țintă. Pentru a începe, ai putea selecta toate tipurile ca ținte. După aceea, selectează rolul de „editor pachete de lucru” ca țintă și apăsă „Copiază”. După ce ai creat cele implicite, reglează fluxurile de lucru așa cum faci pentru orice alt rol."
|
||||
link_message: "Configurează fluxurile de lucru din administrare."
|
||||
templated_subject_hint: Generat automat prin tipul %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1170,6 +1172,9 @@ ro:
|
||||
dependencies: "Dependenţe"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Afişare până la"
|
||||
attachment:
|
||||
@@ -1544,6 +1549,7 @@ ro:
|
||||
not_available: "nu este disponibil din cauza unei configurații a sistemului."
|
||||
not_deletable: "%s nu poate fi șters."
|
||||
not_current_user: "nu este utilizatorul curent."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "nu a fost găsit."
|
||||
not_a_date: "Acest câmp trebuie să conțină o dată validă."
|
||||
not_a_datetime: "nu este o dată-ora validă."
|
||||
@@ -2124,6 +2130,7 @@ ro:
|
||||
role: "Rol"
|
||||
roles: "Roluri"
|
||||
search: "Caută"
|
||||
sprint: "Sprint"
|
||||
start_date: "Dată început"
|
||||
status: "Stare"
|
||||
state: "State"
|
||||
@@ -3266,7 +3273,6 @@ ro:
|
||||
label_duplicate: "duplicat"
|
||||
label_duplicates: "dublează"
|
||||
label_edit: "Editare"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Editare: %{x}"
|
||||
label_enable_multi_select: "Comutare selecție multiplă"
|
||||
label_enabled_project_custom_fields: "Câmpuri personalizate activate"
|
||||
@@ -4184,6 +4190,7 @@ ro:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -624,6 +624,9 @@ ru:
|
||||
work_package_priorities:
|
||||
new_label: "Новый приоритет"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "Созданный артефакт будет сохранен в виде PDF-вложения к пакету работ."
|
||||
description_file_link_export: "Пакет работ будет содержать ссылку на файл PDF, хранящийся во внешнем файловом хранилище. Требуется рабочее файловое хранилище с автоматически управляемыми папками для данного проекта. На данный момент поддерживаются только файловые хранилища Nextcloud."
|
||||
@@ -1052,7 +1055,6 @@ ru:
|
||||
title: "Отсутствует рабочий процесс для совместного использования пакета работ"
|
||||
message: "Рабочий процесс не настроен для роли 'Редактора пакетов работ'. Без рабочего процесса, общий с пользователем не может изменить статус рабочего пакета. Рабочие процессы могут быть скопированы. Выберите исходный тип (например, «Задача») и исходную роль (например, «Участник»). Затем выберите нужные типы. Чтобы начать, можно выбрать все типы в качестве целей. Наконец, выберите роль 'Редактор пакетов работ' в качестве цели и нажмите 'Копировать'. После создания таким образом по умолчанию, тонкая настройка рабочих процессов как вы делаете для каждой другой роли."
|
||||
link_message: "Настройка рабочих процессов в администрации."
|
||||
templated_subject_hint: Автоматически сгенерировано по типу %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1177,6 +1179,9 @@ ru:
|
||||
dependencies: "Связи"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Отобразить до"
|
||||
attachment:
|
||||
@@ -1551,6 +1556,7 @@ ru:
|
||||
not_available: "недоступно из-за конфигурации системы."
|
||||
not_deletable: "не может быть удален."
|
||||
not_current_user: "не является текущим пользователем."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "не найдено."
|
||||
not_a_date: "не является допустимой датой."
|
||||
not_a_datetime: "дата и время не являются допустимыми."
|
||||
@@ -2150,6 +2156,7 @@ ru:
|
||||
role: "Роль"
|
||||
roles: "Роли"
|
||||
search: "Поиск"
|
||||
sprint: "Sprint"
|
||||
start_date: "Дата начала"
|
||||
status: "Статус"
|
||||
state: "Область"
|
||||
@@ -3313,7 +3320,6 @@ ru:
|
||||
label_duplicate: "дублировать"
|
||||
label_duplicates: "Дублирует"
|
||||
label_edit: "Правка"
|
||||
label_edit_attribute: "Изменить атрибут"
|
||||
label_edit_x: "Правка: %{x}"
|
||||
label_enable_multi_select: "Разрешен множественный выбор"
|
||||
label_enabled_project_custom_fields: "Доступные настраиваемые поля"
|
||||
@@ -4233,6 +4239,7 @@ ru:
|
||||
permission_edit_project_query: "Редактирование запроса проекта"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 портфолио"
|
||||
|
||||
@@ -623,6 +623,9 @@ rw:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ rw:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ rw:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ rw:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2096,6 +2102,7 @@ rw:
|
||||
role: "Role"
|
||||
roles: "Roles"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "Start date"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ rw:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "Edit"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4134,6 +4140,7 @@ rw:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ si:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ si:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ si:
|
||||
dependencies: "පරායත්තතා"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "ප්රදර්ශනය වන තුරු"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ si:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "වලංගු දිනයක් නොවේ."
|
||||
not_a_datetime: "වලංගු දිනය කාලය නොවේ."
|
||||
@@ -2096,6 +2102,7 @@ si:
|
||||
role: "කාර්යභාරය"
|
||||
roles: "භූමිකාවන්"
|
||||
search: "සොයන්න"
|
||||
sprint: "Sprint"
|
||||
start_date: "ආරම්භක දිනය"
|
||||
status: "තත්වය"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ si:
|
||||
label_duplicate: "අනුපිටපත්"
|
||||
label_duplicates: "අනුපිටපත්"
|
||||
label_edit: "සංස්කරණය කරන්න"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "බහු ටොගල් කරන්න"
|
||||
label_enabled_project_custom_fields: "සක්රීය අභිරුචි ක්ෂේත්ර"
|
||||
@@ -4134,6 +4140,7 @@ si:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -625,6 +625,9 @@ sk:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1054,7 +1057,6 @@ sk:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1179,6 +1181,9 @@ sk:
|
||||
dependencies: "Závislosti"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Zobrazovať, až kým"
|
||||
attachment:
|
||||
@@ -1553,6 +1558,7 @@ sk:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "nie je platný dátum."
|
||||
not_a_datetime: "nie je platný dátum a čas."
|
||||
@@ -2152,6 +2158,7 @@ sk:
|
||||
role: "Rola"
|
||||
roles: "Roly"
|
||||
search: "Vyhľadávanie"
|
||||
sprint: "Sprint"
|
||||
start_date: "Dátum začiatku"
|
||||
status: "Stav"
|
||||
state: "State"
|
||||
@@ -3315,7 +3322,6 @@ sk:
|
||||
label_duplicate: "skopírovať"
|
||||
label_duplicates: "duplikáty"
|
||||
label_edit: "Upraviť"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Prepnúť multiselect"
|
||||
label_enabled_project_custom_fields: "Povolené vlastné polia"
|
||||
@@ -4235,6 +4241,7 @@ sk:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -624,6 +624,9 @@ sl:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1053,7 +1056,6 @@ sl:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1178,6 +1180,9 @@ sl:
|
||||
dependencies: "Odvisnosti"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Prikaži do"
|
||||
attachment:
|
||||
@@ -1552,6 +1557,7 @@ sl:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "se ne da izbrisati."
|
||||
not_current_user: "ni trenutni uporabnik."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "ni veljaven datum"
|
||||
not_a_datetime: "ni veljaven datum."
|
||||
@@ -2151,6 +2157,7 @@ sl:
|
||||
role: "Vloga"
|
||||
roles: "Vloge"
|
||||
search: "Išči"
|
||||
sprint: "Sprint"
|
||||
start_date: "Datum začetka"
|
||||
status: "Stanje"
|
||||
state: "State"
|
||||
@@ -3314,7 +3321,6 @@ sl:
|
||||
label_duplicate: "Podvoji"
|
||||
label_duplicates: "dvojniki"
|
||||
label_edit: "Uredi"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Uredi: %{x}"
|
||||
label_enable_multi_select: "Preklopite na več selekcijo"
|
||||
label_enabled_project_custom_fields: "Omogočena polja po meri"
|
||||
@@ -4235,6 +4241,7 @@ sl:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -624,6 +624,9 @@ sr:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1045,7 +1048,6 @@ sr:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1170,6 +1172,9 @@ sr:
|
||||
dependencies: "Dependencies"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1544,6 +1549,7 @@ sr:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2124,6 +2130,7 @@ sr:
|
||||
role: "Role"
|
||||
roles: "Roles"
|
||||
search: "Search"
|
||||
sprint: "Sprint"
|
||||
start_date: "Start date"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3266,7 +3273,6 @@ sr:
|
||||
label_duplicate: "duplicate"
|
||||
label_duplicates: "duplicates"
|
||||
label_edit: "Edit"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "Toggle multiselect"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4185,6 +4191,7 @@ sr:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -623,6 +623,9 @@ sv:
|
||||
work_package_priorities:
|
||||
new_label: "Ny prioritet"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1036,7 +1039,6 @@ sv:
|
||||
title: "Arbetsflöde saknas för delning av arbetspaket"
|
||||
message: "Inget arbetsflöde är konfigurerat för 'Work package editor'-rollen. Utan ett arbetsflöde kan den delade användaren inte ändra arbetspaketets status. Arbetsflöden kan kopieras. Välj en källtyp (t.ex. 'Task') och källroll (t.ex. 'Medlem'). Välj sedan måltyper. Till att börja med kan du välja alla typer som mål. Slutligen väljer du rollen \"Arbetspaket editor\" som mål och trycker på \"Kopiera\". Efter att ha skapat standardinställningarna, finjustera arbetsflödena som du gör för varje annan roll."
|
||||
link_message: "Konfigurera arbetsflödena i administrationen."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1161,6 +1163,9 @@ sv:
|
||||
dependencies: "Beroenden"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Visa fram till"
|
||||
attachment:
|
||||
@@ -1535,6 +1540,7 @@ sv:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "kan inte raderas."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "hittades inte."
|
||||
not_a_date: "är inte är ett giltigt datum."
|
||||
not_a_datetime: "är inte en giltig datumtid."
|
||||
@@ -2096,6 +2102,7 @@ sv:
|
||||
role: "Roll"
|
||||
roles: "Roll"
|
||||
search: "Sök"
|
||||
sprint: "Sprint"
|
||||
start_date: "Startdatum"
|
||||
status: "Status"
|
||||
state: "State"
|
||||
@@ -3217,7 +3224,6 @@ sv:
|
||||
label_duplicate: "dublett"
|
||||
label_duplicates: "dubblett av"
|
||||
label_edit: "Redigera"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Redigera: %{x}"
|
||||
label_enable_multi_select: "Växla multival"
|
||||
label_enabled_project_custom_fields: "Aktiverade anpassade fält"
|
||||
@@ -4134,6 +4140,7 @@ sv:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
@@ -622,6 +622,9 @@ th:
|
||||
work_package_priorities:
|
||||
new_label: "New priority"
|
||||
creation_wizard:
|
||||
errors:
|
||||
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
|
||||
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
|
||||
export:
|
||||
description_attachment_export: "The generated artifact will be saved as a PDF attachment to the artifact work package."
|
||||
description_file_link_export: "The artifact work package will have a file link to a PDF stored in an external file storage. Requires a working file storage with automatically-managed project folders for this project. At the moment only Nextcloud file storages are supported."
|
||||
@@ -1027,7 +1030,6 @@ th:
|
||||
title: "Workflow missing for work package sharing"
|
||||
message: "No workflow is configured for the 'Work package editor' role. Without a workflow, the shared with user cannot alter the status of the work package. Workflows can be copied. Select a source type (e.g. 'Task') and source role (e.g. 'Member'). Then select the target types. To start with, you could select all the types as targets. Finally, select the 'Work package editor' role as the target and press 'Copy'. After having thus created the defaults, fine tune the workflows as you do for every other role."
|
||||
link_message: "Configure the workflows in the administration."
|
||||
templated_subject_hint: Automatically generated through type %{type}
|
||||
summary:
|
||||
reports:
|
||||
category:
|
||||
@@ -1152,6 +1154,9 @@ th:
|
||||
dependencies: "ส่วนที่อ้างอิง"
|
||||
activerecord:
|
||||
attributes:
|
||||
agile/sprint:
|
||||
sharing: "Sharing"
|
||||
finish_date: "End date"
|
||||
announcements:
|
||||
show_until: "Display until"
|
||||
attachment:
|
||||
@@ -1526,6 +1531,7 @@ th:
|
||||
not_available: "is not available due to a system configuration."
|
||||
not_deletable: "cannot be deleted."
|
||||
not_current_user: "is not the current user."
|
||||
only_one_active_sprint_allowed: "only one active sprint is allowed per project."
|
||||
not_found: "not found."
|
||||
not_a_date: "is not a valid date."
|
||||
not_a_datetime: "is not a valid date time."
|
||||
@@ -2068,6 +2074,7 @@ th:
|
||||
role: "บทบาท"
|
||||
roles: "บทบาท"
|
||||
search: "ค้นหา"
|
||||
sprint: "Sprint"
|
||||
start_date: "วันเริ่มต้น"
|
||||
status: "สถานะ"
|
||||
state: "State"
|
||||
@@ -3168,7 +3175,6 @@ th:
|
||||
label_duplicate: "ทำซ้ำ"
|
||||
label_duplicates: "ซ้ำ"
|
||||
label_edit: "แก้ไข"
|
||||
label_edit_attribute: "Edit attribute"
|
||||
label_edit_x: "Edit: %{x}"
|
||||
label_enable_multi_select: "สลับไปเลือกหลายค่า"
|
||||
label_enabled_project_custom_fields: "Enabled custom fields"
|
||||
@@ -4083,6 +4089,7 @@ th:
|
||||
permission_edit_project_query: "Edit project query"
|
||||
placeholders:
|
||||
default: "-"
|
||||
templated_hint: Automatically generated through type %{type}
|
||||
portfolio:
|
||||
count:
|
||||
zero: "0 portfolios"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user