Merge branch 'dev' into more-visible-scopes

This commit is contained in:
Klaus Zanders
2026-02-12 11:19:23 +01:00
committed by GitHub
388 changed files with 6507 additions and 1983 deletions
+2
View File
@@ -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
+1 -16
View File
@@ -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 }}
+5 -16
View File
@@ -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
+109
View File
@@ -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 }}
+5
View File
@@ -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:
+2 -2
View File
@@ -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
View File
@@ -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
+1
View File
@@ -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
@@ -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
@@ -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
@@ -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
+6 -6
View File
@@ -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
+6 -15
View File
@@ -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
+19 -16
View File
@@ -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"
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -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
+3 -3
View File
@@ -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" ]
+30 -1
View File
@@ -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
View File
@@ -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: {
+109
View File
@@ -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
+4 -3
View File
@@ -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" ]
+3
View File
@@ -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
+2
View File
@@ -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
+76
View File
@@ -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
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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")
-3
View File
@@ -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
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+28 -21
View File
@@ -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>
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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개 포트폴리오"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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 портфолио"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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"
+9 -2
View File
@@ -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