From acfff51010c567427c68813a0a36a46365199180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Wed, 13 Nov 2024 11:24:19 +0100 Subject: [PATCH 01/23] Bumped version to 15.0.2 [ci skip] --- lib/open_project/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/open_project/version.rb b/lib/open_project/version.rb index f132f737401d..da66b8a60013 100644 --- a/lib/open_project/version.rb +++ b/lib/open_project/version.rb @@ -33,7 +33,7 @@ module OpenProject module VERSION # :nodoc: MAJOR = 15 MINOR = 0 - PATCH = 1 + PATCH = 2 class << self # Used by semver to define the special version (if any). From 35ad749a75ffb81f28ce978d6c64a2d4ea645c5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Wed, 13 Nov 2024 11:26:07 +0100 Subject: [PATCH 02/23] Update README.md --- docs/release-notes/15-0-1/README.md | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/docs/release-notes/15-0-1/README.md b/docs/release-notes/15-0-1/README.md index 84540a817e2c..a0e79aa2b8c6 100644 --- a/docs/release-notes/15-0-1/README.md +++ b/docs/release-notes/15-0-1/README.md @@ -11,19 +11,11 @@ release_date: 2024-11-13 Release date: 2024-11-13 We released OpenProject [OpenProject 15.0.1](https://community.openproject.org/versions/2157). -The release contains several bug fixes and we recommend updating to the newest version. -In these Release Notes, we will give an overview of important feature changes. -At the end, you will find a complete list of all changes and bug fixes. +This release contains an important fix for OpenID Connect providers using Microsoft Entra. +The tenant of the Azure environment was not correctly communicated to the provider, resulting in failing logins. -## Important feature changes +This has been fixed. If you are affected by this issue, please update to 15.0.1 and logins should be restored. - - -## Important updates and breaking changes - - - - ## Bug fixes and changes From c6b2e94b4fac9788cdeadd3c278a929880dfeb4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Wed, 13 Nov 2024 11:27:21 +0100 Subject: [PATCH 03/23] Update README.md --- docs/release-notes/15-0-1/README.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/docs/release-notes/15-0-1/README.md b/docs/release-notes/15-0-1/README.md index a0e79aa2b8c6..4802f363f2e4 100644 --- a/docs/release-notes/15-0-1/README.md +++ b/docs/release-notes/15-0-1/README.md @@ -26,14 +26,3 @@ This has been fixed. If you are affected by this issue, please update to 15.0.1 - -## Contributions -A very special thank you goes to our sponsors for this release. -Also a big thanks to our Community members for reporting bugs and helping us identify and provide fixes. -Special thanks for reporting and finding bugs go to Javier Valero Celada. - -Last but not least, we are very grateful for our very engaged translation contributors on Crowdin, who translated quite a few OpenProject strings! -Would you like to help out with translations yourself? -Then take a look at our translation guide and find out exactly how you can contribute. -It is very much appreciated! - From 93100d4c3f97f16bf22daeb3debc1c5105db2239 Mon Sep 17 00:00:00 2001 From: as-op Date: Wed, 13 Nov 2024 11:39:54 +0100 Subject: [PATCH 04/23] fix typos and unify spelling --- docs/release-notes/14-5-0/README.md | 16 ++++++++-------- docs/release-notes/14-6-0/README.md | 6 +++--- docs/release-notes/15-0-0/README.md | 12 ++++++------ .../authentication/openid-providers/README.md | 4 ++-- docs/system-admin-guide/design/README.md | 6 +++--- .../integrations/nextcloud/README.md | 2 +- docs/user-guide/notifications/README.md | 2 +- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/docs/release-notes/14-5-0/README.md b/docs/release-notes/14-5-0/README.md index ef89c4690755..cb0b018c7fce 100644 --- a/docs/release-notes/14-5-0/README.md +++ b/docs/release-notes/14-5-0/README.md @@ -78,11 +78,11 @@ See our user guide to learn more about [project lists and how to filter them](.. ### PDF export of meeting agenda and meeting -When pressing the key combination for printing – e.g. **cmd + P** for mac users or **STRG + P** for Windows users – you can create your meeting as PDF, download and print it. This has been improved with OpenProject 14.5, so that, for example, meeting buttons like **+ Add** are not displayed in the PDF. +When pressing the key combination for printing – e.g. **cmd + P** for mac users or **CTRL + P** for Windows users – you can create your meeting as PDF, download and print it. This has been improved with OpenProject 14.5, so that, for example, meeting buttons like **+ Add** are not displayed in the PDF. ### Meetings: Disable by default "Send out invitation emails upon creation" -When creating a new meeting in OpenProject, you can choose wheather you want to send out invitation emails or not. Up until now, this has been enabled by default. Due to user feedback, this option is now disabled per default. +When creating a new meeting in OpenProject, you can choose whether you want to send out invitation emails or not. Up until now, this has been enabled by default. Due to user feedback, this option is now disabled per default. ### Rename actions in work package dropdown menu @@ -131,7 +131,7 @@ In this release, the dynamic bootstrapping of Angular components has been remove - Bugfix: \[API doc\] GET /projects missing params and incorrect response \[[#40642](https://community.openproject.org/wp/40642)\] - Bugfix: OpenAPI Specs wrong for creating work package relations \[[#40942](https://community.openproject.org/wp/40942)\] - Bugfix: API Description and OpenAPI Spec not consistent \[[#40945](https://community.openproject.org/wp/40945)\] -- Bugfix: Truncaded custom fields in work package table (Browser: Edge) \[[#52890](https://community.openproject.org/wp/52890)\] +- Bugfix: Truncated custom fields in work package table (Browser: Edge) \[[#52890](https://community.openproject.org/wp/52890)\] - Bugfix: GitLab integration pipeline status not updated \[[#54122](https://community.openproject.org/wp/54122)\] - Bugfix: Wrong date format in notification email \[[#54136](https://community.openproject.org/wp/54136)\] - Bugfix: Sort order of wiki pages in side-menu wrong / inconsistent \[[#54450](https://community.openproject.org/wp/54450)\] @@ -147,8 +147,8 @@ In this release, the dynamic bootstrapping of Angular components has been remove - Bugfix: Internal error when trying to change 2FA settings that are enforced through ENV \[[#56821](https://community.openproject.org/wp/56821)\] - Bugfix: FixDeletedDataJournals migration can fail sometimes \[[#56846](https://community.openproject.org/wp/56846)\] - Bugfix: Backlogs and GitHub have unnecessarily nested menu nodes \[[#56920](https://community.openproject.org/wp/56920)\] -- Bugfix: Wording of error message for Nextcloud host in storage form is missleading \[[#56992](https://community.openproject.org/wp/56992)\] -- Bugfix: OpenProject Dark Mode: selection colour of table rows \[[#57003](https://community.openproject.org/wp/57003)\] +- Bugfix: Wording of error message for Nextcloud host in storage form is misleading \[[#56992](https://community.openproject.org/wp/56992)\] +- Bugfix: OpenProject Dark Mode: selection color of table rows \[[#57003](https://community.openproject.org/wp/57003)\] - Bugfix: Work package toolbar has double outline on left \[[#57004](https://community.openproject.org/wp/57004)\] - Bugfix: Firefox cuts PDF export after the first page \[[#57027](https://community.openproject.org/wp/57027)\] - Bugfix: Some status indicators are missing a border \[[#57031](https://community.openproject.org/wp/57031)\] @@ -158,16 +158,16 @@ In this release, the dynamic bootstrapping of Angular components has been remove - Bugfix: Nextcloud "recheck connection" checks for GroupFolderApp though AMPF is deactivated \[[#57068](https://community.openproject.org/wp/57068)\] - Bugfix: In the calendar widget on the My Page page, meetings are displayed with the wrong time \[[#57078](https://community.openproject.org/wp/57078)\] - Bugfix: Default user avatar is too big for work package table rendering (safari) \[[#57093](https://community.openproject.org/wp/57093)\] -- Bugfix: OpenProject Dark Mode: CKEditor using too light colours e.g. for pressed buttons \[[#57103](https://community.openproject.org/wp/57103)\] +- Bugfix: OpenProject Dark Mode: CKEditor using too light colors e.g. for pressed buttons \[[#57103](https://community.openproject.org/wp/57103)\] - Bugfix: Cannot download 2FA backup codes \[[#57146](https://community.openproject.org/wp/57146)\] - Bugfix: OpenProject Dark Mode: diff view for description (and large text fields) not matching \[[#57151](https://community.openproject.org/wp/57151)\] - Bugfix: Project filter in notification center is not correctly highlighted \[[#57154](https://community.openproject.org/wp/57154)\] - Bugfix: Time and cost report : text of unit cost activity is displayed with html tag '<i>' \[[#57198](https://community.openproject.org/wp/57198)\] - Bugfix: Meeting selection in work packages highly confusing \[[#57205](https://community.openproject.org/wp/57205)\] - Bugfix: Attachment headlines are semi-transparent and overlapped by content \[[#57209](https://community.openproject.org/wp/57209)\] -- Bugfix: Webhook doesn't log all errors \[[#57277](https://community.openproject.org/wp/57277)\] +- Bugfix: Webhook doesn't log all errors \[[#57277](https://community.openproject.org/wp/57277)\] - Bugfix: Notifications for date alerts show name of a person \[[#57279](https://community.openproject.org/wp/57279)\] -- Bugfix: OpenProject Dark Mode: reiterate hover/active button colour \[[#57282](https://community.openproject.org/wp/57282)\] +- Bugfix: OpenProject Dark Mode: reiterate hover/active button color \[[#57282](https://community.openproject.org/wp/57282)\] - Bugfix: Robots follow action links unnecessarily \[[#57316](https://community.openproject.org/wp/57316)\] - Bugfix: Some previews in the Lookbook do not work \[[#57322](https://community.openproject.org/wp/57322)\] - Bugfix: Number of meeting participants does not add up \[[#57392](https://community.openproject.org/wp/57392)\] diff --git a/docs/release-notes/14-6-0/README.md b/docs/release-notes/14-6-0/README.md index 96fa924c27e2..1e7eb256be9e 100644 --- a/docs/release-notes/14-6-0/README.md +++ b/docs/release-notes/14-6-0/README.md @@ -83,7 +83,7 @@ On the Meetings tab in the split screen view, the number next to the “Meetings - Bugfix: Authorization::UnknownPermissionError happened in GET::API::V3::Root#/ \[[#56064](https://community.openproject.org/wp/56064)\] - Bugfix: Some Gantt charts get migrated to the work package module \[[#56769](https://community.openproject.org/wp/56769)\] - Bugfix: \[API doc\] color attribute of status missing \[[#57016](https://community.openproject.org/wp/57016)\] -- Bugfix: Menu Transparent for existings user afer db upgrade to 14.3.0 from 9.x \[[#57037](https://community.openproject.org/wp/57037)\] +- Bugfix: Menu Transparent for existing user after db upgrade to 14.3.0 from 9.x \[[#57037](https://community.openproject.org/wp/57037)\] - Bugfix: Right side of the instance upper banner looks misaligned \[[#57092](https://community.openproject.org/wp/57092)\] - Bugfix: Primer: Action menu is sometimes incorrectly positioned on mobile \[[#57143](https://community.openproject.org/wp/57143)\] - Bugfix: Icons and spacing is off on Work package table configuration view \[[#57345](https://community.openproject.org/wp/57345)\] @@ -103,7 +103,7 @@ On the Meetings tab in the split screen view, the number next to the “Meetings - Bugfix: www-authenticate header lacks comma \[[#58009](https://community.openproject.org/wp/58009)\] - Bugfix: Nextcloud connection validation fails on disabled AMPF configuration \[[#58018](https://community.openproject.org/wp/58018)\] - Bugfix: White space wrong in text diff \[[#58092](https://community.openproject.org/wp/58092)\] -- Bugfix: Primary button with a different custom colour remains green on click/pressed \[[#58130](https://community.openproject.org/wp/58130)\] +- Bugfix: Primary button with a different custom color remains green on click/pressed \[[#58130](https://community.openproject.org/wp/58130)\] - Bugfix: 'dd' is showing when reloading notification center \[[#58134](https://community.openproject.org/wp/58134)\] - Bugfix: Update storage banners to render with rounded borders \[[#58142](https://community.openproject.org/wp/58142)\] - Bugfix: Update the post storage creation message: admins don't need to activate individual modules per project anymore \[[#58150](https://community.openproject.org/wp/58150)\] @@ -123,7 +123,7 @@ On the Meetings tab in the split screen view, the number next to the “Meetings - Feature: Add to connection validation that managed directory is empty for Nextcloud storages \[[#57347](https://community.openproject.org/wp/57347)\] - Feature: Turn project list into favorite without reloading the page \[[#57505](https://community.openproject.org/wp/57505)\] - Feature: Remove menu entry "Projects" from "System settings" submenu in the Administration \[[#57536](https://community.openproject.org/wp/57536)\] -- Feature: Replace "Add assignee" button in Team Pleanner with "+ Assignee" \[[#57648](https://community.openproject.org/wp/57648)\] +- Feature: Replace "Add assignee" button in Team Planner with "+ Assignee" \[[#57648](https://community.openproject.org/wp/57648)\] - Feature: Update all clickable elements inside the box elements with the link color \[[#57649](https://community.openproject.org/wp/57649)\] - Feature: Keep scroll position when reloading a meeting through the update flash \[[#57904](https://community.openproject.org/wp/57904)\] - Feature: Improvements to the Participants side panel (phrasing and spacing) \[[#57911](https://community.openproject.org/wp/57911)\] diff --git a/docs/release-notes/15-0-0/README.md b/docs/release-notes/15-0-0/README.md index 5ec88aa01e2b..ea189a056f50 100644 --- a/docs/release-notes/15-0-0/README.md +++ b/docs/release-notes/15-0-0/README.md @@ -169,7 +169,7 @@ For more information, please see our updated guides on these topics: - Feature: Move primary action to subheader \[[#58636](https://community.openproject.org/wp/58636)\] - Bugfix: Work package date picker: wrong spacing \[[#47777](https://community.openproject.org/wp/47777)\] - Bugfix: User is not taken to the secondary input field after selecting a filter \[[#53767](https://community.openproject.org/wp/53767)\] -- Bugfix: Creating project from template doesn't take over version filter correctly \[[#53978](https://community.openproject.org/wp/53978)\] +- Bugfix: Creating project from template doesn't take over version filter correctly \[[#53978](https://community.openproject.org/wp/53978)\] - Bugfix: \[mobile\] Scrolling within a modal scrolls the content underneath \[[#54109](https://community.openproject.org/wp/54109)\] - Bugfix: Missing "cause" in WP journal when closing duplicates \[[#54372](https://community.openproject.org/wp/54372)\] - Bugfix: The Assignee drop down list in the work packages list can't show long name perfectly. \[[#55870](https://community.openproject.org/wp/55870)\] @@ -188,13 +188,13 @@ For more information, please see our updated guides on these topics: - Bugfix: Insufficient spacing on Captcha modal \[[#57804](https://community.openproject.org/wp/57804)\] - Bugfix: Broken link to the documentation in open storage modal after timeout. \[[#57896](https://community.openproject.org/wp/57896)\] - Bugfix: Topbar search input text color is too dark when unfocused \[[#57950](https://community.openproject.org/wp/57950)\] -- Bugfix: Gantt chart PDF export ignores manuall sorting \[[#57960](https://community.openproject.org/wp/57960)\] +- Bugfix: Gantt chart PDF export ignores manually sorting \[[#57960](https://community.openproject.org/wp/57960)\] - Bugfix: The Activity entry for creation is lacking the info that it is a "Creation". \[[#57968](https://community.openproject.org/wp/57968)\] - Bugfix: Number of listed Work Packages limited to 20 only w/o button of page number for switching \[[#57977](https://community.openproject.org/wp/57977)\] -- Bugfix: Fix AMPF "Health status" error messages capitalisation \[[#58016](https://community.openproject.org/wp/58016)\] +- Bugfix: Fix AMPF "Health status" error messages capitalization \[[#58016](https://community.openproject.org/wp/58016)\] - Bugfix: User tab headers overlap when header text is long \[[#58106](https://community.openproject.org/wp/58106)\] - Bugfix: Dark mode: "Custom text" widget - table cell editing UI has wrong colors \[[#58108](https://community.openproject.org/wp/58108)\] -- Bugfix: Self notification doesn't trigger a notifcation and mail \[[#58151](https://community.openproject.org/wp/58151)\] +- Bugfix: Self notification doesn't trigger a notification and mail \[[#58151](https://community.openproject.org/wp/58151)\] - Bugfix: Unnecessary space to the right on certain view width \[[#58237](https://community.openproject.org/wp/58237)\] - Bugfix: Access token refresh results in error message in files tab \[[#58271](https://community.openproject.org/wp/58271)\] - Bugfix: Improve sidebar item alignment \[[#58280](https://community.openproject.org/wp/58280)\] @@ -204,7 +204,7 @@ For more information, please see our updated guides on these topics: - Bugfix: My page is empty if user has no permissions \[[#58341](https://community.openproject.org/wp/58341)\] - Bugfix: Update-Warning is not readable in dark mode \[[#58359](https://community.openproject.org/wp/58359)\] - Bugfix: Sorting custom actions by "sort" header produces 500 \[[#58361](https://community.openproject.org/wp/58361)\] -- Bugfix: Creating project from template doesn't take over version column correctly \[[#58388](https://community.openproject.org/wp/58388)\] +- Bugfix: Creating project from template doesn't take over version column correctly \[[#58388](https://community.openproject.org/wp/58388)\] - Bugfix: Meetings modules is not showing the sidebar selection in the PageHeader \[[#58393](https://community.openproject.org/wp/58393)\] - Bugfix: Enterprise banners have excessive top-margin \[[#58404](https://community.openproject.org/wp/58404)\] - Bugfix: Enterprise banner is not shown on "new board" page \[[#58411](https://community.openproject.org/wp/58411)\] @@ -237,4 +237,4 @@ Last but not least, we are very grateful for our very engaged translation contri - [william](https://crowdin.com/profile/WilliamFromTW), for a great number of translations into Chinese Simplified and Chinese Traditional. - [Alin Marcu](https://crowdin.com/profile/deconfcom), for a great number of translations into Romanian. -Would you like to help out with translations yourself? Then take a look at our [translation guide](../../development/translate-openproject/) and find out exactly how you can contribute. It is very much appreciated! \ No newline at end of file +Would you like to help out with translations yourself? Then take a look at our [translation guide](../../development/translate-openproject/) and find out exactly how you can contribute. It is very much appreciated! diff --git a/docs/system-admin-guide/authentication/openid-providers/README.md b/docs/system-admin-guide/authentication/openid-providers/README.md index 0c226cb635e5..3fd3091b1d98 100644 --- a/docs/system-admin-guide/authentication/openid-providers/README.md +++ b/docs/system-admin-guide/authentication/openid-providers/README.md @@ -89,7 +89,7 @@ After pressing **CREATE** you will see a following pop-up window. - On the next section, set **Client ID** and **Client Secret** (from step 2) - Enable **Limit self registration** option if you want users that create accounts with this provider to bypass the configured limit for self-registration. -![Add a new OpenID Gogole provider in OpenProject administration](openproject_system-admin-guide_authentication_openid_provider_new_google.png) +![Add a new OpenID Google provider in OpenProject administration](openproject_system-admin-guide_authentication_openid_provider_new_google.png) Press **Finish setup** to save the client and complete. If you go back to the index page of OpenID connect providers, the new provider should be visible. @@ -278,7 +278,7 @@ The option takes a space-separated list of ACR values. This is functionally the After entering Claims information, click **Finish setup** to complete the provider creation form. -![Bildschirmfoto 2024-11-06 um 18.34.28](./custom-provider-claims.png) +![Custom provider claims](./custom-provider-claims.png) diff --git a/docs/system-admin-guide/design/README.md b/docs/system-admin-guide/design/README.md index dea2a33f2c21..bfda59f151d0 100644 --- a/docs/system-admin-guide/design/README.md +++ b/docs/system-admin-guide/design/README.md @@ -13,9 +13,9 @@ Navigate to *Administration* -> *Design* in order to customize your OpenProject The design page provides several options to customize your OpenProject Enterprise edition, grouped under three tabs, **Interface, Branding, PDF export styles**. You can [choose a color theme](#choose-a-color-theme) under any of these tabs. -Under **Interface** you can also choose [custom colors](#interface-colors) for elements of the interface such as the primary button colour, accent colour, the background of the top navigation header and the main menu. +Under **Interface** you can also choose [custom colors](#interface-colors) for elements of the interface such as the primary button color, accent color, the background of the top navigation header and the main menu. -![Design interface settings in OpenProject adminstration](openproject_system_guide_design_interface.png) +![Design interface settings in OpenProject administration](openproject_system_guide_design_interface.png) Under the **Branding** tab you can also [upload a custom logo](#upload-a-custom-logo) to replace the default OpenProject logo, [set a custom favicon](#set-a-custom-favicon), which is shown as an icon in your browser window/tab, and [upload a custom touch icon](#set-a-custom-touch-icon), which is shown on your smartphone or tablet when you bookmark OpenProject on your home screen. @@ -47,7 +47,7 @@ Click the *Upload* button to confirm and upload your logo. -![Custom logo updated in OpenProject admistration](openproject_system_guide_design_custom_logo_uploaded.png) +![Custom logo updated in OpenProject administration](openproject_system_guide_design_custom_logo_uploaded.png) ## Set a custom favicon diff --git a/docs/system-admin-guide/integrations/nextcloud/README.md b/docs/system-admin-guide/integrations/nextcloud/README.md index 6d000a6af482..ce03a0575deb 100644 --- a/docs/system-admin-guide/integrations/nextcloud/README.md +++ b/docs/system-admin-guide/integrations/nextcloud/README.md @@ -180,7 +180,7 @@ To add a Nextcloud to a specific project on a project level, navigate to any exi To add a Nextcloud storage to one or multiple projects on an instance level, click on a file storage under *Administration -> Files -> External file storages* and select **Enabled in projects** tab. If the file storage setup was not completed properly, you will see a respective message. -![Storage setup incomplete message in OprnProject file storages administration](openproject_system_guide_nextcloud_integration_setup_incomplete_message.png) +![Storage setup incomplete message in OpenProject file storages administration](openproject_system_guide_nextcloud_integration_setup_incomplete_message.png) If the storage was set up correctly, you will be able activate the file storage for one or multiple projects. To do that click the **+Add projects** button. diff --git a/docs/user-guide/notifications/README.md b/docs/user-guide/notifications/README.md index 6d7fda907ef0..eed7300dad35 100644 --- a/docs/user-guide/notifications/README.md +++ b/docs/user-guide/notifications/README.md @@ -73,7 +73,7 @@ In addition to the in-app notifications, you will also get a once-a-day summary Click on the **Mark as read** button represented by the envelope icon on the right side of the notification row. This will mark all the notifications for that work package (indicated by the number on the blue badge) as read. You can also use the **Mark as Read** button at the bottom of the split-screen view of a work package to achieve the same result. -![Mark notifications as read in OpenProject noticification center](openproject_user_guide_notification_center_mark_read_envelope.png) +![Mark notifications as read in OpenProject notifications center](openproject_user_guide_notification_center_mark_read_envelope.png) Additionally, you can mark notifications as read in the work package full screen view by clicking on the envelope icon in the upper right corner of the details view. From 24182605601cdcddc4c3d30c637f5cc565fe97ed Mon Sep 17 00:00:00 2001 From: as-op Date: Wed, 13 Nov 2024 11:46:30 +0100 Subject: [PATCH 05/23] fix typos and unify spelling --- docs/release-notes/15-0-0/README.md | 2 +- docs/user-guide/activity/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/release-notes/15-0-0/README.md b/docs/release-notes/15-0-0/README.md index d578e1133711..7af154f24e35 100644 --- a/docs/release-notes/15-0-0/README.md +++ b/docs/release-notes/15-0-0/README.md @@ -212,7 +212,7 @@ For more information, please see our updated guides on these topics: - Bugfix: Improve error handling when two users edit the same work package in parallel (conflict) \[[#58634](https://community.openproject.org/wp/58634)\] - Bugfix: Slow project template selector on new project page \[[#58657](https://community.openproject.org/wp/58657)\] - Bugfix: Admin info "bug" icon is misleading \[[#58671](https://community.openproject.org/wp/58671)\] -- Bugfix: Emoji bar doesn't stay anchored \[[#58706](https://community.openproject.org/wp/58706)\] +- Bugfix: Emoji bar doesn't stay anchored \[[#58706](https://community.openproject.org/wp/58706)\] - Bugfix: Replace the + icon next to the work package creation item with a regular icon \[[#58735](https://community.openproject.org/wp/58735)\] - Bugfix: SAML UI migration fails if expired certificate present in current configuration \[[#58851](https://community.openproject.org/wp/58851)\] - Bugfix: OpenID connect provider does not show Redirect URI \[[#59057](https://community.openproject.org/wp/59057)\] diff --git a/docs/user-guide/activity/README.md b/docs/user-guide/activity/README.md index eb8225311e3c..7ceffd6c3dcf 100644 --- a/docs/user-guide/activity/README.md +++ b/docs/user-guide/activity/README.md @@ -16,7 +16,7 @@ The Activity tab within a work package maintains a history of all updates and ch ![The work package Activity tab split screen](Activity-tab.png) -When you first access this tab, you will see the comments and list of changes in a timeline. This timeline can be sorted in either chronological (the newest comments at the bottom) or antichronological order (the newest comments on top): +When you first access this tab, you will see the comments and list of changes in a timeline. This timeline can be sorted in either chronological (the newest comments at the bottom) or anti-chronological order (the newest comments on top): ![You can order the activities to show newest on top or at the bottom](Activity-sortOrder.png) From 048ef4220580591c391f1c7acef0eb3a1d135c12 Mon Sep 17 00:00:00 2001 From: Parimal Satyal <88370597+psatyal@users.noreply.github.com> Date: Wed, 13 Nov 2024 18:03:13 +0100 Subject: [PATCH 06/23] Updated SAFe case study to include project lists --- docs/use-cases/safe-framework/README.md | 10 ++++++---- .../project_list_-_solution_train.png | Bin 0 -> 294856 bytes 2 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 docs/use-cases/safe-framework/project_list_-_solution_train.png diff --git a/docs/use-cases/safe-framework/README.md b/docs/use-cases/safe-framework/README.md index 5216fc294fb1..77a0e48afe16 100644 --- a/docs/use-cases/safe-framework/README.md +++ b/docs/use-cases/safe-framework/README.md @@ -77,11 +77,13 @@ You can also use [project templates](../../user-guide/projects/project-templates Project portfolios allow you to view, organize, sort and filter through all projects and their hierarchies. Since individual projects represent Agile Release trains, project portfolios can be used to access information at a **Solution train**-level. -![All Features and User Stories across all teams](all_features_across_all_teams.png) +OpenProject offers a new **Project list** view that lets you create and save custom lists of Projects using your own set of filter criteria. These lists can also display custom project attributes. Individual projects can also be favourited for easier access. Project lists allow you to be build very precise and useful dashboards at a solution-train level. -> In a near future release, OpenProject will have dedicated project portfolio features. [View mockups.](https://www.figma.com/file/YCCMdJWkrtP9YSmf49Od0i/Project-lists?type=design&node-id=470%3A13037&mode=design&t=g1EZesuy0Jj0VZFD-1) -> -> For the moment, [global modules](../../user-guide/home/global-modules/) give you an overview of content from all projects, including the ability to view and filter though a **project list**, and view, sort and filter **work packages at a global level**. +![You can create custom project lists](project_list_-_solution_train.png) + +Alternatively, one can also create a meta-project that contains multiple sub-projects (representing ARTs and teams) and create a consolidated custom view. This **work package table** view can be filtered and customised to show particular attributes and custom fields as columns, grouped and sorted. They can also be configured to display epics, features and user stories not just from sub-projects, but from entirely different projects. + +![All Features and User Stories across all teams](all_features_across_all_teams.png) > **Demo:** [Solution train (project list)](https://safe.openproject.com/projects) > diff --git a/docs/use-cases/safe-framework/project_list_-_solution_train.png b/docs/use-cases/safe-framework/project_list_-_solution_train.png new file mode 100644 index 0000000000000000000000000000000000000000..b8a8dcac5c803b2fc025a6de46c6b79bfacae239 GIT binary patch literal 294856 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

-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�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 Date: Thu, 14 Nov 2024 03:15:33 +0000 Subject: [PATCH 07/23] update locales from crowdin [ci skip] --- config/locales/crowdin/js-ko.yml | 2 +- config/locales/crowdin/js-ro.yml | 64 ++--- config/locales/crowdin/js-ru.yml | 2 +- config/locales/crowdin/ko.yml | 84 +++--- config/locales/crowdin/pt-BR.seeders.yml | 40 +-- config/locales/crowdin/ro.yml | 58 ++-- config/locales/crowdin/ru.yml | 8 +- config/locales/crowdin/tr.yml | 267 +++++++++--------- config/locales/crowdin/uk.yml | 6 +- .../boards/config/locales/crowdin/js-ro.yml | 2 +- .../config/locales/crowdin/ko.yml | 76 ++--- .../config/locales/crowdin/pt-BR.yml | 6 +- .../config/locales/crowdin/pt-PT.yml | 4 +- .../config/locales/crowdin/ru.yml | 10 +- .../config/locales/crowdin/tr.yml | 74 ++--- .../config/locales/crowdin/zh-CN.yml | 4 +- .../config/locales/crowdin/zh-TW.yml | 4 +- .../storages/config/locales/crowdin/ko.yml | 2 +- .../config/locales/crowdin/ro.yml | 2 +- 19 files changed, 357 insertions(+), 358 deletions(-) diff --git a/config/locales/crowdin/js-ko.yml b/config/locales/crowdin/js-ko.yml index 8cf7ed3b9857..ebedc5034d53 100644 --- a/config/locales/crowdin/js-ko.yml +++ b/config/locales/crowdin/js-ko.yml @@ -359,7 +359,7 @@ ko: "15_0": standard: new_features_html: > - The release brings various features and improvements for you, e.g.
  • Boost your communication with a better structured Activity tab, real-time loading messages and notifications, emoji reactions, and more.
  • Benefit from easy Single Sign-On authentication settings with SAML and OIDC in your Enterprise Cloud administration.
  • Use the new 'Standard global role' and enable permissions to view email addresses.
  • Enjoy easier navigation in project lists with quick action table headers.
  • Experience simplified design settings with fewer sidebar design variables needed.
  • Reduce manual cleanup when adding a custom field to a type – no more auto-applying to all projects.
  • Benefit from improved navigation clarity – 'My account' is renamed to 'Account settings'.
+ 이 릴리즈는 다음과 같은 다양한 기능과 개선 사항을 제공합니다.
  • 더욱 체계화된 활동 탭, 실시간 로딩 메시지 및 알림, 이모티콘 반응 등으로 커뮤니케이션을 강화합니다.
  • Enterprise Cloud 관리에서 SAML 및 OIDC로 간편한 Single Sign-On 인증 설정의 장점을 누립니다.
  • 새로운 '표준 글로벌 역할'을 사용하고 이메일 주소를 볼 수 있는 권한을 활성화합니다.
  • 빠른 작업 테이블 헤더로 프로젝트 목록에서 더욱 쉽게 탐색합니다.
  • 필요한 사이드바 디자인 변수가 더 적은 간소화된 디자인 설정을 이용합니다.
  • 유형에 사용자 지정 필드를 추가할 때 수동 정리가 줄어듭니다. 더 이상 모든 프로젝트에 자동 적용되지 않습니다.
  • 탐색의 명확성이 개선되었습니다. '내 계정'이 '계정 설정'으로 이름이 변경되었습니다.
ical_sharing_modal: title: "캘린더 구독" inital_setup_error_message: "데이터를 가져오는 중에 오류가 발생했습니다." diff --git a/config/locales/crowdin/js-ro.yml b/config/locales/crowdin/js-ro.yml index 525ab07045aa..3046243e3ffb 100644 --- a/config/locales/crowdin/js-ro.yml +++ b/config/locales/crowdin/js-ro.yml @@ -351,14 +351,14 @@ ro: homescreen: blocks: new_features: - text_new_features: "Citiți despre noile caracteristici și actualizări de produse." + text_new_features: "Citește despre noile caracteristici și actualizări de produse." learn_about: "Aflați mai multe despre noile caracteristici" #Include the version to invalidate outdated translations in other locales. #Otherwise, e.g. chinese might still have the translations for 10.0 in the 12.0 release. "15_0": standard: new_features_html: > - The release brings various features and improvements for you, e.g.
  • Boost your communication with a better structured Activity tab, real-time loading messages and notifications, emoji reactions, and more.
  • Benefit from easy Single Sign-On authentication settings with SAML and OIDC in your Enterprise Cloud administration.
  • Use the new 'Standard global role' and enable permissions to view email addresses.
  • Enjoy easier navigation in project lists with quick action table headers.
  • Experience simplified design settings with fewer sidebar design variables needed.
  • Reduce manual cleanup when adding a custom field to a type – no more auto-applying to all projects.
  • Benefit from improved navigation clarity – 'My account' is renamed to 'Account settings'.
+ Versiunea aduce diverse caracteristici și îmbunătățiri pentru tine, de exemplu:
  • Îmbunătățește-ți comunicarea cu o filă de activitate structurată mai bună, mesaje de încărcare și notificări în timp real, reacții emoji și multe altele.
  • Beneficiază de setările de autentificare unice ușor cu SAML și OIDC în administrarea Enterprise Cloud (cloud).
  • Utilizează noul 'rol global standard' și activează permisiunile pentru a vizualiza adresele de e-mail.
  • Bucură-te de o navigare mai ușoară în listele de proiecte cu anteturi de masă cu acțiune rapidă.
  • Experiență simplificată setările de design cu mai puține variabile de proiectare laterale.
  • Redu curățarea manuală la adăugarea unui câmp personalizat la un tip – nu mai există auto-aplicare la toate proiectele.
  • Beneficiază de o mai bună claritate a navigării – 'Contul meu' este redenumit în 'Setări cont'.
ical_sharing_modal: title: "Subscribe to calendar" inital_setup_error_message: "An error occured while fetching data." @@ -372,14 +372,14 @@ ro: success_message: 'The URL "%{name}" was successfully copied to your clipboard. Paste it in your calendar client to complete the subscription.' label_activate: "Activare" label_assignee: "Executant" - label_add_column_after: "Adauga o coloana dupa" - label_add_column_before: "Adauga o coloana inainte" - label_add_columns: "Adaugați coloane" + label_add_column_after: "Adaugă coloană după" + label_add_column_before: "Adaugă coloană înainte" + label_add_columns: "Adaugă coloane" label_add_comment: "Adăugare comentariu" label_add_comment_title: "Comentează și tastează @ pentru a notifica alte persoane" label_add_row_after: "Adauga un rand dupa" label_add_row_before: "Adauga un rand inainte" - label_add_selected_columns: "Adăugați coloanele selectate" + label_add_selected_columns: "Adaugă coloanele selectate" label_added_by: "adăugat de" label_added_time_by: 'Adăugat de
%{author} acum %{age}' label_ago: "zile în urmă" @@ -425,7 +425,7 @@ ro: label_expanded: "extins" label_expand_all: "Extindere totală" label_expand_project_menu: "Deschideți meniul proiectului" - label_export: "Exportare" + label_export: "Exportă" label_export_preparing: "Exportul este în curs de pregătire și va fi descărcat în curând." label_favorites: "Favorite" label_filename: "Fișier" @@ -486,8 +486,8 @@ ro: label_recent: "Recente" label_reset: "Resetare" label_remove: "Eliminare" - label_remove_column: "Elimina colana" - label_remove_columns: "Eliminare coloane selectate" + label_remove_column: "Elimină coloana" + label_remove_columns: "Elimină coloane selectate" label_remove_row: "Elimina rand" label_report: "Raportare" label_repository_plural: "Repo-uri" @@ -516,7 +516,7 @@ ro: label_time_entry_plural: "Timp consumat" label_up: "Sus" label_user_plural: "Utilizatori" - label_activity_show_only_comments: "Afișați doar activitățile ce conțin comentarii" + label_activity_show_only_comments: "Arată doar activitățile cu comentarii" label_activity_show_all: "Afișează toate activitățile" label_total_progress: "%{percent} % Progres total" label_total_amount: "Total: %{amount}" @@ -544,8 +544,8 @@ ro: label_attachments: Atașamente label_drop_files: "Aruncați fișierele aici pentru a atașa fișiere." label_drop_or_click_files: "Trage fișierele aici sau clic aici pentru a atașa." - label_drop_folders_hint: Nu puteți încărca dosare ca atașament. Vă rugăm să selectați fișiere individuale. - label_add_attachments: "Atașare fișiere" + label_drop_folders_hint: Nu poți încărca dosare ca atașament. Te rog selectează fișiere individuale. + label_add_attachments: "Atașează fișiere" label_formattable_attachment_hint: "Atașați și legați fișiere prin plasarea în acest câmp sau prin lipirea din clipboard." label_remove_file: "Ştergere %{fileName}" label_remove_watcher: "Eliminare observator %{name}" @@ -637,14 +637,14 @@ ro: few: "și %{count} alții" other: "și %{count} alții" no_results: - at_all: "Aici vor apărea notificări noi atunci când există o activitate care vă interesează." + at_all: "Aici vor apărea notificări noi atunci când există o activitate care te interesează." with_current_filter: "Nu există notificări în această vizualizare în acest moment" mark_all_read: "Marchează toate ca și citite" mark_as_read: "Marchează ca Citit" text_update_date_by: "%{date} de" total_count_warning: "Se afișează %{newest_count} cele mai recente notificări. %{more_count} în plus nu sunt afișate." empty_state: - no_notification: "Se pare că v-ați pus la punct." + no_notification: "Se pare că ești cu toate la zi." no_notification_with_current_project_filter: "Se pare că v-ați pus la punct cu proiectul selectat." no_notification_with_current_filter: "Se pare că ești la zi cu filtrul %{filter}." no_notification_for_filter: "Looks like you are all caught up for this filter." @@ -653,7 +653,7 @@ ro: message: "Există notificări noi." link_text: "Click here to load them." settings: - change_notification_settings: 'Puteți modifica setările de notificare pentru a vă asigura că nu pierdeți niciodată o actualizare importantă.' + change_notification_settings: 'Poți modifica setările de notificare pentru a te asigura că nu pierzi niciodată o actualizare importantă.' title: "Setări notificare" notify_me: "Anunta-ma" reminders: @@ -710,7 +710,7 @@ ro: placeholders: default: "-" subject: "Introduceţi subiectul aici" - selection: "Vă rugăm să selectaţi" + selection: "Te rog selectează" description: "Descriere: Clic pentru a edita..." relation_description: "Clic pentru a adăuga o descriere pentru această relație" project: @@ -854,12 +854,12 @@ ro: scheduling: manual: "Programarea manuală" sort: - sorted_asc: "Sortare ascendentă aplicată " - sorted_dsc: "Sortare descendentă aplicată " + sorted_asc: "Ordonare ascendentă aplicată, " + sorted_dsc: "Ordonare descendentă aplicată, " sorted_no: "Nu a fost selectată nicio sortare " sorting_disabled: "sortarea este dezactivată" - activate_asc: "activați pentru a sorta ascendent" - activate_dsc: "activați pentru a sorta descendent" + activate_asc: "activează pentru a ordona ascendent" + activate_dsc: "activează pentru a ordona descendent" activate_no: "activați pentru a înlătura sortarea" text_work_packages_destroy_confirmation: "Sunteți sigur că doriți ștergerea pachetelor de lucru selectate?" text_query_destroy_confirmation: "Sunteți sigur că doriți să ștergeți vizualizarea selectată?" @@ -1054,13 +1054,13 @@ ro: configure_button: "Configurarea tabelului pachetului de lucru" summary: "Tabel cu pachete de lucru pe rânduri şi câmpurile pachetelor pe coloane." text_inline_edit: "Majoritatea celulelor din acest tabel sunt butoane care activează editarea \"inline\" a câmpului respectiv." - text_sort_hint: "Cu link-urile din capul de tabel puteți sorta, grupa, reordona, elimina și adăuga coloane la tabel." + text_sort_hint: "Cu link-urile din capul de tabel poți sorta, grupa, reordona, elimina și adăuga coloane la tabel." text_select_hint: "Casetele de selectare ar trebui să fie deschise cu 'ALT' si tastele săgeată." table_configuration: button: "Configurați acest tabel al pachetului de lucru" choose_display_mode: "Afișare pachete de lucru din subproiecte pe pagina proiectului principal" modal_title: "Configurația tabelului pachetului de lucru" - embedded_tab_disabled: "Această filă de configurare nu este disponibilă pentru vizualizarea încorporată pe care o editați." + embedded_tab_disabled: "Această filă de configurare nu este disponibilă pentru vizualizarea încorporată pe care o editezi." default: "implicit" display_settings: "Setări afișare" default_mode: "Listă" @@ -1083,7 +1083,7 @@ ro: automatic: "Automat" manually: "Manual" warning: "La activarea modului de sortare automată, veți pierde sortarea anterioară." - columns_help_text: "Utilizați datele de mai sus pentru a adăuga sau elimina coloane în vizualizarea tabelului. Puteți glisa și plasa coloanele pentru a le reordona." + columns_help_text: "Utilizează datele de mai sus pentru a adăuga sau elimina coloane în vizualizarea tabelului. Poți glisa și plasa coloanele pentru a le reordona." upsale: attribute_highlighting: "Aveți nevoie ca anumite pachete de lucru să iasă în evidență?" relation_columns: "Aveți nevoie să vedeți relațiile din lista pachetelor de lucru?" @@ -1102,7 +1102,7 @@ ro: months: "luni" toolbar: settings: - configure_view: "Configurați vizualizarea" + configure_view: "Configurează vizualizarea" columns: "Coloane" sort_by: "Sortare după" group_by: "Grupare după" @@ -1112,7 +1112,7 @@ ro: hide_sums: "Ascundere totaluri" save: "Salvează" save_as: "Salvează ca" - export: "Exportare" + export: "Exportă" visibility_settings: "Setări vizibilitate" share_calendar: "Subscribe to calendar" page_settings: "Redenumire" @@ -1222,14 +1222,14 @@ ro: invite_principal_to_project: "Invitați %{principal} la %{project}" project: label: "Proiect" - required: "Te rog să selectezi un proiect" - lacking_permission: "Te rog să selectezi un alt proiect, deoarece nu ai permisiuni pentru a atribui utilizatori la cel selectat în prezent." + required: "Te rog selectează un proiect" + lacking_permission: "Te rog selectează un alt proiect, deoarece nu ai permisiuni pentru a atribui utilizatori la cel selectat în prezent." lacking_permission_info: "Nu aveți permisiunea de a atribui utilizatori la proiectul în care vă aflați în prezent. Trebuie să selectați un alt proiect." next_button: "Înainte" no_results: "Nu au fost găsite proiecte" no_invite_rights: "Nu aveți voie să invitați membri în acest proiect" type: - required: "Te rog să selectezi tipul de invitat" + required: "Te rog selectează tipul de invitat" user: title: "Utilizator" description: "Permisiuni bazate pe rolul atribuit în proiectul selectat" @@ -1253,15 +1253,15 @@ ro: no_results_group: "Nu au fost găsite grupuri" next_button: "Înainte" required: - user: "Te rog să selectezi un utilizator" - placeholder: "Te rog să selectezi un substituent" - group: "Te rog să selectezi un grup" + user: "Te rog selectează un utilizator" + placeholder: "Te rog selectează un substituent" + group: "Te rog selectează un grup" role: label: "Rolul în %{project}" no_roles_found: "Nu au fost găsite roluri" description: >- This is the role that the user will receive when they join your project. Rolul definește acțiunile pe care utilizatorul are voie să le întreprindă și informațiile pe care le poate vedea. Aflați mai multe despre roluri și permisiuni. - required: "Te rog să selectezi un rol" + required: "Te rog selectează un rol" next_button: "Înainte" message: label: "Mesaj invitație" diff --git a/config/locales/crowdin/js-ru.yml b/config/locales/crowdin/js-ru.yml index b9cfe6bb1823..fd686bbcc08f 100644 --- a/config/locales/crowdin/js-ru.yml +++ b/config/locales/crowdin/js-ru.yml @@ -358,7 +358,7 @@ ru: "15_0": standard: new_features_html: > - The release brings various features and improvements for you, e.g.
  • Boost your communication with a better structured Activity tab, real-time loading messages and notifications, emoji reactions, and more.
  • Benefit from easy Single Sign-On authentication settings with SAML and OIDC in your Enterprise Cloud administration.
  • Use the new 'Standard global role' and enable permissions to view email addresses.
  • Enjoy easier navigation in project lists with quick action table headers.
  • Experience simplified design settings with fewer sidebar design variables needed.
  • Reduce manual cleanup when adding a custom field to a type – no more auto-applying to all projects.
  • Benefit from improved navigation clarity – 'My account' is renamed to 'Account settings'.
+ Релиз содержит новые возможности и различные улучшения, такие как,
.
  • Повысьте эффективность общения благодаря более структурированной вкладке "Активность", загрузке сообщений и уведомлений в режиме реального времени, реакциям emoji и многому другому.
  • Воспользуйтесь простыми настройками аутентификации Single Sign-On с помощью SAML и OIDC при администрировании Enterprise Cloud.
  • Используйте новую "Стандартную глобальную роль" и включите разрешения на просмотр адресов электронной почты.
  • Наслаждайтесь более удобной навигацией в списках проектов с помощью быстрых действий заголовков таблиц.
  • Упрощенные настройки оформления боковой панели с меньшим количеством необходимых переменных.
  • Сократите ручную очистку при добавлении пользовательского поля к типу - больше не нужно автоматически применять его ко всем проектам.
  • Воспользуйтесь улучшенной ясностью навигации - "Мой аккаунт" переименован в "Настройки аккаунта".
ical_sharing_modal: title: "Подписаться на календарь" inital_setup_error_message: "Произошла ошибка при получении данных." diff --git a/config/locales/crowdin/ko.yml b/config/locales/crowdin/ko.yml index d39efd439be4..04aea9ec3a55 100644 --- a/config/locales/crowdin/ko.yml +++ b/config/locales/crowdin/ko.yml @@ -26,20 +26,20 @@ ko: no_results_title_text: 이 시간 프레임 내에서 프로젝트에 대한 활동이 없습니다. work_packages: activity_tab: - no_results_title_text: No activity to display - no_results_description_text: "Choose \"Show everything\" to show all activity and comments" - label_activity_show_all: "Show everything" - label_activity_show_only_comments: "Show comments only" - label_activity_show_only_changes: "Show changes only" - label_sort_asc: "Newest at the bottom" - label_sort_desc: "Newest on top" - label_type_to_comment: "Type here to comment" - label_submit_comment: "Submit comment" - changed_on: "changed on" - created_on: "created this on" - changed: "changed" - created: "created" - commented: "commented" + no_results_title_text: 표시할 활동 없음 + no_results_description_text: "모든 활동과 코멘트를 표시하려면 '모두 표시'를 선택합니다" + label_activity_show_all: "모두 표시" + label_activity_show_only_comments: "코멘트만 표시" + label_activity_show_only_changes: "변경 사항만 표시" + label_sort_asc: "오래된 순" + label_sort_desc: "최신 순" + label_type_to_comment: "코멘트를 작성하려면 여기에 입력하세요" + label_submit_comment: "코멘트 제출" + changed_on: "- 변경함:" + created_on: "- 이 패키지를 생성함:" + changed: "- 변경함" + created: "- 생성함" + commented: "- 코멘트 작성함" admin: plugins: no_results_title_text: 현재 설치된 플러그인이 없습니다. @@ -221,20 +221,20 @@ ko: heading: 모든 프로젝트용 description: '"모든 프로젝트용" 옵션이 선택되었으므로 모든 프로젝트에서 이 사용자 지정 필드가 활성화되었습니다. 개별 프로젝트에 대해 비활성화할 수 없습니다.' items: - actions: "Item actions" + actions: "항목 작업" blankslate: title: "항목 목록이 비어 있습니다" description: "먼저 유형 계층의 사용자 지정 필드에 항목을 추가하여 시작하세요. 각 항목을 사용하여 그 아래에 계층을 만들 수 있습니다. 계층 내에서 하위 항목을 탐색하고 만들려면 생성된 항목을 클릭하세요." placeholder: - label: "Item label" - short: "Short name" + label: "항목 레이블" + short: "짧은 이름" notice: remember_items_and_projects: "이 사용자 지정 필드의 각 탭에서 항목과 프로젝트를 설정해야 합니다." hierarchy: subitems: - zero: no sub-items - one: 1 sub-item - other: "%{count} sub-items" + zero: 하위 항목 없음 + one: 하위 항목 1개 + other: "하위 항목 %{count}개" text_add_new_custom_field: > 프로젝트에 새 사용자 지정 필드를 추가하려면 먼저 해당 필드를 만들어야 합니다. 그래야 이 프로젝트에 해당 필드를 추가할 수 있습니다. is_enabled_globally: "는 세계적으로 사용 가능합니다." @@ -247,7 +247,7 @@ ko: is_required: "사용자 지정 필드를 필수로 표시합니다. 이렇게 하면 새 리소스를 생성하거나 기존 리소스를 업데이트할 때 이 필드를 반드시 입력해야 합니다." is_required_for_project: "이 특성을 활성화하려면 선택하고 모든 프로젝트에서 필수로 지정하세요. 개별 프로젝트에 대해 비활성화할 수는 없습니다." is_for_all: "모든 기존 프로젝트와 새 프로젝트에서 사용자 지정 필드를 사용 가능으로 표시합니다." - multi_select: "Allows the user to assign multiple values to this custom field." + multi_select: "사용자가 이 사용자 지정 필드에 여러 값을 할당할 수 있도록 허용합니다." searchable: "글로벌 검색 기능을 사용할 때 필드 값을 포함합니다." searchable_for_project: "프로젝트 목록에서 이 특성을 필터로 사용 가능하게 설정하려면 선택하세요." editable: "사용자가 필드를 편집할 수 있도록 허용합니다." @@ -263,8 +263,8 @@ ko: errors: rules: label: - filled?: "must be filled" - not_unique: "must be unique within the same hierarchy level" + filled?: "- 입력해야 합니다" + not_unique: "- 동일한 계층 수준 내에서 고유해야 합니다" rules: label: "레이블" global_search: @@ -495,13 +495,13 @@ ko: 이 우선 순위 색상을 할당하거나 변경하려면 클릭하세요. 테이블의 작업 패키지를 강조 표시하는 데 사용할 수 있습니다. reactions: - action_title: "React" - add_reaction: "Add reaction" - react_with: "React with %{reaction}" - and_user: "and %{user}" + action_title: "반응" + add_reaction: "반응 추가" + react_with: "%{reaction}(으)로 반응" + and_user: "및 %{user}" and_others: - other: and %{count} others - reaction_by: "%{reaction} by" + other: 외 %{count}건 + reaction_by: "%{reaction} -" reportings: index: no_results_title_text: 상태 보고가 없습니다. @@ -512,14 +512,14 @@ ko: 이 상태 색상을 할당하거나 변경하려면 클릭하세요. 상태 버튼에 표시되고 테이블의 작업 패키지를 강조 표시하는 데 사용할 수 있습니다. status_default_text: |- - New work packages are by default set to this type. They cannot be read-only. + 새 작업 패키지는 기본적으로 이 유형으로 설정됩니다. 읽기 전용으로 설정할 수 없습니다. status_excluded_from_totals_text: |- 계층의 총 작업, 남은 작업 및 완료 %에서 이 상태의 작업 패키지를 제외하려면 이 옵션을 선택하세요. status_percent_complete_text: |- - In status-based progress calculation mode, the % Complete of a work - package is automatically set to this value when this status is selected. - Ignored in work-based mode. + 상태 기반 진행률 계산 모드에서, 이 상태를 선택하면 작업 + 패키지의 완료 %가 자동으로 이 값으로 설정됩니다. + 작업 기반 모드에서는 무시됩니다. status_readonly_html: | 이 상태를 읽기 전용으로 작업 패키지에 표시하려면 이 옵션을 선택합니다. 상태를 제외하고 특성은 변경할 수 없습니다.
@@ -883,12 +883,12 @@ ko: not_available: "- 시스템 구성으로 인해 사용 가능하지 않습니다." not_deletable: "- 삭제할 수 없습니다." not_current_user: "은(는) 현재 유효한 사용자가 아닙니다." - not_found: "not found." + not_found: "- 찾을 수 없습니다." not_a_date: "은(는) 유효한 날짜가 아닙니다." not_a_datetime: "은(는) 유효한 날짜가 아닙니다." not_a_number: "은(는) 숫자가 아닙니다." not_allowed: "- 사용 권한이 없어 유효하지 않습니다." - not_json: "is not a valid JSON object." + not_json: "- 유효한 JSON 개체가 아닙니다." not_an_integer: "은(는) 정수가 아닙니다." not_an_iso_date: "은(는) 유효한 날짜가 아닙니다. 필요한 형식: YYYY-MM-DD." not_same_project: "은(는) 동일한 프로젝트에 속하지 않습니다." @@ -2391,7 +2391,7 @@ ko: label_relation_new: "새 관계" label_release_notes: "릴리스 노트" label_remaining_work: "남은 작업" - label_remove_column: "Remove column" + label_remove_column: "열 제거" label_remove_columns: "선택된 열 제거" label_renamed: "이름 변경됨" label_reply_plural: "회신" @@ -2432,10 +2432,10 @@ ko: label_show_completed_versions: "완료된 버전 표시" label_columns: "열" label_sort: "분류" - label_sort_ascending: "Sort ascending" + label_sort_ascending: "오름차순 정렬" label_sort_by: "%{value}(으)로 정렬" label_sorted_by: "%{value}(으)로 정렬됨" - label_sort_descending: "Sort descending" + label_sort_descending: "내림차순 정렬" label_sort_higher: "위로 이동" label_sort_highest: "맨 위로 이동" label_sort_lower: "아래로 이동" @@ -2784,9 +2784,9 @@ ko: notice_locking_conflict: "그 사이에 정보가 한 명 이상의 다른 사용자에 의해 업데이트되었습니다." notice_locking_conflict_additional_information: "%{users}의 업데이트입니다." notice_locking_conflict_reload_page: "페이지를 다시 로드하고, 변경 사항을 검토하고, 업데이트를 다시 적용하세요." - notice_locking_conflict_warning: "This page has been updated by someone else. To not lose your edits, copy them locally and reload to view the updated version." - notice_locking_conflict_danger: "Could not save your changes because of conflicting modifications. To not lose your edits, copy them locally and reload to view the updated version." - notice_locking_conflict_action_button: "Discard changes and reload" + notice_locking_conflict_warning: "이 페이지는 다른 사용자에 의해 업데이트되었습니다. 편집 사항을 손실하지 않으려면 로컬로 복사한 후 다시 로드하여 업데이트된 버전을 보세요." + notice_locking_conflict_danger: "수정 사항이 충돌하므로 변경 사항을 저장할 수 없습니다. 편집 사항이 손실되지 않게 하려면 로컬로 복사한 후 다시 로드하여 업데이트된 버전을 보세요." + notice_locking_conflict_action_button: "변경 사항 취소 및 다시 로드" notice_member_added: '%{name} 이(가) 프로젝트에 추가 됨' notice_members_added: '%{number}명의 사용자가 프로젝트에 추가되었습니다.' notice_member_removed: "프로젝트에서 %{user} 사용자가 제거됨." @@ -3253,7 +3253,7 @@ ko: authentication: single_sign_on: "Single Sign-On" omniauth_direct_login_hint_html: > - If this option is active, login requests will redirect to the configured omniauth provider. The login dropdown and sign-in page will be disabled.
Note: Unless you also disable password logins, with this option enabled, users can still log in internally by visiting the %{internal_path} login page. + 이 옵션이 활성화된 경우, 로그인 요청은 구성된 omniauth 공급자로 리디렉션됩니다. 로그인 드롭다운 및 로그인 페이지가 비활성화됩니다.
참고: 또한 암호 로그인을 비활성화하지 않는 경우에는 이 옵션이 활성화된 상태에서 사용자가 %{internal_path} 로그인 페이지를 방문하여 내부에서 계속 로그인할 수 있습니다. attachments: whitelist_text_html: > 업로드된 파일의 유효한 파일 확장명 및/또는 MIME 형식 목록을 정의합니다.
파일 확장명(예: %{ext_example}) 또는 MIME 형식(예: %{mime_example})을 입력합니다.
모든 파일 형식을 업로드할 수 있도록 허용하려면 비워 둡니다. 여러 값이 허용됩니다(각 값에 대해 한 줄). diff --git a/config/locales/crowdin/pt-BR.seeders.yml b/config/locales/crowdin/pt-BR.seeders.yml index a6c34b79ba19..027152e8b1bd 100644 --- a/config/locales/crowdin/pt-BR.seeders.yml +++ b/config/locales/crowdin/pt-BR.seeders.yml @@ -109,7 +109,7 @@ pt-BR: name: Painel básico lists: item_0: - name: Lista de Desejo + name: Lista de desejos item_1: name: Lista curta item_2: @@ -122,26 +122,26 @@ pt-BR: widgets: item_0: options: - name: Bem-vindo + name: Boas-vindas item_1: options: - name: Primeiros passos + name: Guia de introdução text: | - Estamos felizes por você ter se juntado a nós! Sugerimos que você experimente algumas coisas para começar a usar o OpenProject. + Estamos felizes que você tenha se juntado a nós! Aqui estão algumas sugestões para começar a usar o OpenProject. - Descubra os recursos mais importantes com nosso [Guided Tour] ({{opSetting:base_url}}/projects/demo-project/work_packages/?start_onboarding_tour=true). + Descubra os principais recursos com o nosso [Tour Guiado]({{opSetting:base_url}}/projects/demo-project/work_packages/?start_onboarding_tour=true). - _Tente as seguintes etapas:_ + Tente as seguintes etapas: - 1. *Convide novos membros para seu projeto*: → Vá para [Members]({{opSetting:base_url}}/projects/demo-project/members) na navegação do projeto. - 2. *Ver o trabalho em seu projeto*: → Vá para [Work packages]({{opSetting:base_url}}/projects/demo-project/work_packages) na navegação do projeto. - 3. *Crie um novo pacote de trabalho*: → Vá para [Work packages → Create]({{opSetting:base_url}}/projects/demo-project/work_packages/new). - 4. *Crie e atualize um plano de projeto*: → Vá para [Plano de projeto]({{opSetting:base_url}}/projects/demo-project/work_packages?query_id=##query.id:demo_project__query__project_plan) na navegação do projeto. - 5. *Ativar outros módulos*: → Vá para [Project settings → Modules]({{opSetting:base_url}}}/projects/demo-project/settings/modules). - 6. *Conclua suas tarefas no projeto*: → Vá para [Work packages → Tasks]({{opSetting:base_url}}/projects/demo-project/work_packages/details/##wp.id:set_date_and_location_of_conference/overview?query_id=##query.id:demo_project__query__tasks). + 1. *Convide novos membros para o seu projeto*: → Vá para [Membros]({{opSetting:base_url}}/projects/demo-project/members) na navegação do projeto. + 2. *Veja as tarefas do seu projeto*: → Vá para [Pacotes de trabalho]({{opSetting:base_url}}/projects/demo-project/work_packages) na navegação do projeto. + 3. *Crie um novo pacote de trabalho*: → Vá para [Pacotes de trabalho → Criar]({{opSetting:base_url}}/projects/demo-project/work_packages/new). + 4. *Crie e atualize o plano do projeto*: → Vá para [Plano de projeto]({{opSetting:base_url}}/projects/demo-project/work_packages?query_id=##query.id:demo_project__query__project_plan) na navegação do projeto. + 5. *Ative módulos adicionais*: → Vá para [Configurações do projeto → Módulos]({{opSetting:base_url}}/projects/demo-project/settings/modules). + 6. *Conclua suas tarefas no projeto*: → Vá para [Pacotes de trabalho → Tarefas]({{opSetting:base_url}}/projects/demo-project/work_packages/details/##wp.id:set_date_and_location_of_conference/overview?query_id=##query.id:demo_project__query__tasks). - Aqui você encontrará nossos [User Guides] (https://www.openproject.org/docs/user-guide/). - Entre em contato conosco se tiver alguma dúvida ou precisar de suporte. Entre em contato conosco: [support[at]openproject.com](mailto:support@openproject.com). + Aqui você encontra nossos Guias do usuário. + Se tiver alguma dúvida ou precisar de ajuda, entre em contato conosco: [support[at]openproject.com](mailto:support@openproject.com). item_5: options: name: Pacotes de trabalho @@ -170,7 +170,7 @@ pt-BR: item_2: subject: Conferência item_3: - subject: Acompanhamento das tarefas + subject: Tarefas de acompanhamento children: item_0: subject: Fazer upload de apresentações para o site @@ -200,14 +200,14 @@ pt-BR: Mais informações: [https://www.openproject.org/docs/user-guide/wiki/](https://www.openproject.org/docs/user-guide/wiki/) scrum-project: name: Projeto Scrum - status_explanation: Todas as tarefas estão dentro do cronograma. As pessoas envolvidas conhecem suas tarefas. O sistema está completamente configurado. - description: Este é um breve resumo dos objetivos deste projeto de demonstração do Scrum. + status_explanation: Todas as tarefas estão dentro do cronograma, e os envolvidos conhecem suas atribuições. O sistema está completamente configurado. + description: Este é um resumo dos objetivos deste projeto Scrum de demonstração. news: item_0: - title: Bem-vindo ao seu projeto de demonstração do Scrum + title: Boas-vindas ao seu projeto de demonstração do Scrum summary: | - Estamos felizes por você ter se juntado a nós. - Neste módulo, você pode comunicar as novidades do projeto aos membros da sua equipe. + Estamos felizes que você tenha se juntado a nós. + Neste módulo, você pode compartilhar as atualizações do projeto com os membros da sua equipe. versions: item_0: name: Registro de erros e pendências diff --git a/config/locales/crowdin/ro.yml b/config/locales/crowdin/ro.yml index 05e02f2aef4e..be3bc92af433 100644 --- a/config/locales/crowdin/ro.yml +++ b/config/locales/crowdin/ro.yml @@ -26,17 +26,17 @@ ro: no_results_title_text: Nu s-a înregistrat nicio activitate pentru acest proiect în această perioadă de timp. work_packages: activity_tab: - no_results_title_text: No activity to display - no_results_description_text: "Choose \"Show everything\" to show all activity and comments" - label_activity_show_all: "Show everything" - label_activity_show_only_comments: "Show comments only" - label_activity_show_only_changes: "Show changes only" - label_sort_asc: "Newest at the bottom" - label_sort_desc: "Newest on top" - label_type_to_comment: "Type here to comment" + no_results_title_text: Nicio activitate de afișat + no_results_description_text: "Alege \"Arată tot\" pentru a afișa toată activitatea și comentariile" + label_activity_show_all: "Afișează tot" + label_activity_show_only_comments: "Arată doar comentariile" + label_activity_show_only_changes: "Arată doar modificările" + label_sort_asc: "Cele mai noi jos" + label_sort_desc: "Cele mai noi sus" + label_type_to_comment: "Tastează aici pentru a comenta" label_submit_comment: "Submit comment" changed_on: "changed on" - created_on: "created this on" + created_on: "a creat-o pe" changed: "changed" created: "created" commented: "commented" @@ -303,12 +303,12 @@ ro: completed_text: "Cererea de ștergere a proiectului \"%{name}\" a fost finalizată." completed_text_children: "Additionally, the following subprojects have been deleted:" index: - open_as_gantt: "Deschideți ca vizualizare Gantt" + open_as_gantt: "Deschide ca vizualizare Gantt" no_results_title_text: În acest moment nu există proiecte no_results_content_text: Creează proiect nou search: label: Project name filter - placeholder: Search by project name + placeholder: Caută după numele proiectului lists: active: "Proiecte active" my: "Proiectele mele" @@ -356,7 +356,7 @@ ro: no_results_title_text: În acest moment nu există versiuni pentru acest proiect. no_results_content_text: Creează versiune nouă storage: - no_results_title_text: Acest proiect nu consumă spațiu suplimentar pe disc înregistrat. + no_results_title_text: Acest proiect nu consumă spațiu suplimentar pe disc. lists: create: success: "The modified list has been saved as a new list" @@ -1767,7 +1767,7 @@ ro: xls: label: "XLS" columns: - input_label_report: "Add columns to attribute table" + input_label_report: "Adaugă coloane la tabelul de atribute" input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it." input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports." pdf: @@ -2044,7 +2044,7 @@ ro: label_ical_access_key_generation_hint: "Automatically generated when subscribing to a calendar." label_ical_access_key_latest: "latest" label_ical_access_key_revoke: "Revocă" - label_add_column: "Add column" + label_add_column: "Adaugă coloană" label_applied_status: "Stare aplicată" label_archive_project: "Proiect de arhivă" label_ascending: "Crescător" @@ -2340,10 +2340,10 @@ ro: label_months_from: "luni de la" label_more: "Mai mult" label_more_than_ago: "acum mai mult de zile" - label_move_column_left: "Move column left" - label_move_column_right: "Move column right" + label_move_column_left: "Mută coloana la stânga" + label_move_column_right: "Mută coloana la dreapta" label_move_work_package: "Mutare pachet de lucru" - label_my_account: "Account settings" + label_my_account: "Setări cont" label_my_activity: "Activitatea mea" label_my_account_data: "Datele din contul meu" label_my_avatar: "My avatar" @@ -2443,7 +2443,7 @@ ro: label_project_attributes_settings: "Project attributes settings" label_project_storage_plural: "File Storages" label_project_storage_project_folder: "File Storages: Project folders" - label_projects_disk_usage_information: "%{count} projects using %{used_disk_space} disk space" + label_projects_disk_usage_information: "%{count} proiecte care utilizează %{used_disk_space} spațiu pe disc" label_project_view_all: "Vizualizează toate proiectele" label_project_show_details: "Arată detaliile proietului" label_project_hide_details: "Ascunde detaliile proiectului" @@ -2464,8 +2464,8 @@ ro: label_relation_new: "Relație nouă" label_release_notes: "Note privind lansarea noii versiuni" label_remaining_work: "Muncă rămasă" - label_remove_column: "Remove column" - label_remove_columns: "Eliminare coloane selectate" + label_remove_column: "Elimină coloana" + label_remove_columns: "Elimină coloane selectate" label_renamed: "redenumit" label_reply_plural: "Răspunsuri" label_report: "Raportare" @@ -2505,10 +2505,10 @@ ro: label_show_completed_versions: "Afișare versiuni complete" label_columns: "Coloane" label_sort: "Sortare" - label_sort_ascending: "Sort ascending" + label_sort_ascending: "Ordonează ascendent" label_sort_by: "Sortare după %{value}" label_sorted_by: "sortate după %{value}" - label_sort_descending: "Sort descending" + label_sort_descending: "Ordonează descendent" label_sort_higher: "Mută în sus" label_sort_highest: "Mută sus" label_sort_lower: "Mută în jos" @@ -2518,8 +2518,8 @@ ro: label_start_to_start: "început la început" label_statistics: "Statistici" label_status: "Stare" - label_storage_free_space: "Spațiu pe disc rămas" - label_storage_used_space: "Spațiu pe disc folosit" + label_storage_free_space: "Spațiu disc rămas" + label_storage_used_space: "Spațiu disc folosit" label_storage_group: "Sistem de fișiere pentru stocare %{identifier}" label_storage_for: "Conține stocarea pentru" label_string: "Text" @@ -2888,7 +2888,7 @@ ro: notice_automatic_set_of_standard_type: "Setare automată a tipului standard." notice_logged_out: "Ați fost deconectat." notice_wont_delete_auth_source: The LDAP connection cannot be deleted as long as there are still users using it. - notice_project_cannot_update_custom_fields: "Nu puteți actualiza câmpurile particularizate disponibile ale proiectului. Proiectul este invalid: %{errors}" + notice_project_cannot_update_custom_fields: "Nu poți actualiza câmpurile particularizate disponibile ale proiectului. Proiectul este invalid: %{errors}" notice_attachment_migration_wiki_page: > Această pagină a fost generată automat în timpul actualizării OpenProject. Aceasta conține toate atașamentele asociate anterior cu %{container_type} "%{container_name}". #Default format for numbers @@ -2916,7 +2916,7 @@ ro: heading_getting_started: "Urmărește prezentarea generală" text_getting_started_description: "Obțineți o imagine de ansamblu rapidă a gestionării proiectelor și a colaborării în echipă cu OpenProject. Puteți reporni acest videoclip din meniul de ajutor." welcome: "Bun venit la %{app_title}" - select_language: "Vă rugăm să selectați limba dvs" + select_language: "Te rog selectează limba" permission_add_work_package_notes: "Adăugare note" permission_add_work_packages: "Adăugare pachete de lucru" permission_add_messages: "Publicare mesaje" @@ -3146,7 +3146,7 @@ ro: managed: "Creează repo nou în OpenProject" storage: not_available: "Consumul de spațiu de stocare nu este disponibil pentru acest repo." - update_timeout: "Păstraţi informaţia referitoare la spaţiul de stocare necesar pentru un repo timp de N minute. \nDeoarece măsurarea spațiului necesar pentru un repo poate fi costisitoare, creșteți această valoare pentru a reduce impactul în performanță." + update_timeout: "Păstrează ultimele informații privind spațiul necesar pe disc pentru un depozit timp de N minute.\nDeoarece numărarea spațiului necesar pe disc al unui depozit poate fi costisitoare, crește această valoare pentru a reduce impactul asupra performanței." oauth_application_details: "Valoarea secretă a clientului nu va mai fi accesibilă după ce închideți această fereastră. Vă rugăm să copiați aceste valori în setările Nextcloud OpenProject Integration:" oauth_application_details_link_text: "Mergi la pagina setări" setup_documentation_details: "Dacă aveți nevoie de ajutor pentru configurarea unui nou depozit de fișiere, consultați documentația: " @@ -3509,7 +3509,7 @@ ro: text_no_notes: "Nu sunt comentarii disponibile pentru acest pachet de lucru." text_notice_too_many_values_are_inperformant: "Atenție: Afişarea unui număr mai mare de 100 de articole pe pagină poate creşte durata de încărcare." text_notice_security_badge_displayed_html: > - Notă: dacă este activată, aceasta va afișa o insignă cu starea instalării în fereastra %{information_panel_label} panoul de administrare și pe pagina principală. Aceasta este afișată numai pentru administratori.
Insigna va verifica versiunea curentă a OpenProject în raport cu baza de date oficială a versiunilor OpenProject pentru a vă alerta cu privire la orice actualizări sau vulnerabilități cunoscute. Pentru mai multe informații despre ce oferă verificarea, ce date sunt necesare pentru a furniza actualizările disponibile și cum să dezactivați această verificare, vă rugăm să vizitați documentația de configurare. + Notă: dacă este activată, aceasta va afișa o insignă cu starea instalării în fereastra %{information_panel_label} panoul de administrare și pe pagina principală. Aceasta este afișată numai pentru administratori.
Insigna va verifica versiunea curentă a OpenProject în raport cu baza de date oficială a versiunilor OpenProject pentru a alerta cu privire la orice actualizări sau vulnerabilități cunoscute. Pentru mai multe informații despre ce oferă verificarea, ce date sunt necesare pentru a furniza actualizările disponibile și cum să dezactivezi această verificare, te rog să vizitezi documentația de configurare. text_own_membership_delete_confirmation: "Sunteţi cale de a elimina unele sau toate permisiunile şi e posibil să nu mai puteți edita acest proiect după aceea. \nSunteţi sigur că doriţi să continuaţi?" text_plugin_assets_writable: "Se poate scrie în directorul de resurse pentru module" text_powered_by: "Propulsat de %{link}" @@ -3569,7 +3569,7 @@ ro: queries: apply_filter: Aplicare filtru preconfigurat configure_view: - heading: Configurați vizualizarea + heading: Configurează vizualizarea columns: input_label: "Adaugă coloane" input_placeholder: "Select a column" diff --git a/config/locales/crowdin/ru.yml b/config/locales/crowdin/ru.yml index 1ab7b95ed26d..e535898d2111 100644 --- a/config/locales/crowdin/ru.yml +++ b/config/locales/crowdin/ru.yml @@ -2894,9 +2894,9 @@ ru: notice_locking_conflict: "Информация была обновлена одновременно с вами по крайней мере одним пользователем." notice_locking_conflict_additional_information: "Обновление(-ия) пришли от %{users}." notice_locking_conflict_reload_page: "Пожалуйста перезагрузите страницу, пересмотрите изменения и повторно примените Ваши обновления." - notice_locking_conflict_warning: "This page has been updated by someone else. To not lose your edits, copy them locally and reload to view the updated version." - notice_locking_conflict_danger: "Could not save your changes because of conflicting modifications. To not lose your edits, copy them locally and reload to view the updated version." - notice_locking_conflict_action_button: "Discard changes and reload" + notice_locking_conflict_warning: "Эта страница была обновлена кем-то еще. Чтобы не потерять ваши изменения, скопируйте их локально и перезагрузите страницу, чтобы просмотреть обновленную версию." + notice_locking_conflict_danger: "Не удалось сохранить ваши изменения из-за конфликтующих изменений. Чтобы не потерять ваши изменения, скопируйте их локально и перезагрузите страницу для просмотра обновления." + notice_locking_conflict_action_button: "Отменить изменения и перезагрузить" notice_member_added: '%{name} добавлено в проект.' notice_members_added: В проект добавлено %{number} пользователей. notice_member_removed: "Пользователь %{user} удален из проекта." @@ -3367,7 +3367,7 @@ ru: authentication: single_sign_on: "Единый вход" omniauth_direct_login_hint_html: > - If this option is active, login requests will redirect to the configured omniauth provider. The login dropdown and sign-in page will be disabled.
Note: Unless you also disable password logins, with this option enabled, users can still log in internally by visiting the %{internal_path} login page. + Если эта опция включена, запросы на вход в систему будут перенаправлены на настроенный провайдер omniauth. Выпадающий список входа и страница входа будут отключены.
Примечание: Если вы также не отключите вход по паролю, то пользователи все еще могут войти внутри системы, посетив страницу входа %{internal_path}. attachments: whitelist_text_html: > Определите список допустимых расширений файлов и/или mime типов для загруженных файлов.
Введите расширения файлов (например, %{ext_example}) или mime типы (e. ., %{mime_example}).
Оставьте пустым, чтобы разрешить загрузку любого типа файла. Допустимы несколько значений (одна строка для каждого значения). diff --git a/config/locales/crowdin/tr.yml b/config/locales/crowdin/tr.yml index f6dc4038c473..68fb3c2f0dab 100644 --- a/config/locales/crowdin/tr.yml +++ b/config/locales/crowdin/tr.yml @@ -64,8 +64,8 @@ tr: enterprise_more_info: "Not: Kullanılan logo herkese açık olacaktır." manage_colors: "Renk seçim seçeneklerini düzenle" instructions: - primary-button-color: "Strong accent color, used for the most important button on a screen." - accent-color: "Color for links and other decently highlighted elements." + primary-button-color: "Güçlü vurgu rengi, genellikle ekrandaki en önemli düğme için kullanılır." + accent-color: "Bağlantılar ve diğer uygun biçimde vurgulanmış öğeler için renk." header-item-bg-hover-color: "Tıklanabilir başlık bileşenleri nin üzerine gelindiğinde kullanılacak arka plan rengi." header-item-font-color: "Tıklanabilir başlık bileşenleri için yazı rengi." header-item-font-hover-color: "Tıklanabilir başlık bileşenleri nin üzerine gelindiğinde kullanılacak yazı rengi." @@ -89,9 +89,9 @@ tr: buttons: upgrade: "Hemen Yükselt" contact: "Demo için bizimle iletişime geçin" - enterprise_info_html: "is an Enterprise add-on." + enterprise_info_html: "bir Kurumsal eklentisidir." upgrade_info: "Etkinleştirmek ve ekibinizde kullanmaya başlamak için lütfen ücretli bir plana yükseltin." - jemalloc_allocator: Jemalloc memory allocator + jemalloc_allocator: Jemalloc bellek ayırıcı journal_aggregation: explanation: text: "Bir kullanıcının bireysel eylemleri (örneğin, bir iş paketini iki kez güncelleme), yaş farkı belirtilen zaman aralığından azsa tek bir eylemde toplanır. Uygulama içinde tek bir eylem olarak görüntülenecektir. Bu aynı zamanda gönderilen e-posta sayısını azaltarak bildirimleri aynı süre kadar geciktirecek ve ayrıca %{webhook_link} gecikmesini etkileyecektir." @@ -101,16 +101,16 @@ tr: is_active: şu an görüntüleniyor is_inactive: şu an görüntülenmiyor antivirus_scan: - not_processed_yet_message: "Downloading is blocked, as file was not scanned for viruses yet. Please try again later." - quarantined_message: "A virus was detected in file '%{filename}'. It has been quarantined and is not available for download." - deleted_message: "A virus was detected in file '%{filename}'. The file has been deleted." - deleted_by_admin: "The quarantined file '%{filename}' has been deleted by an administrator." - overridden_by_admin: "The quarantine for file '%{filename}' has been removed by %{user}. The file can now be acccessed." + not_processed_yet_message: "Dosya henüz virüs taramasından geçirilmediği için indirme işlemi engellendi. Lütfen daha sonra tekrar deneyin." + quarantined_message: "'%{filename}' dosyasında bir virüs tespit edildi. Dosya karantinaya alındı ve indirilemez." + deleted_message: "'%{filename}' dosyasında bir virüs tespit edildi. Dosya silinmiştir." + deleted_by_admin: "Karantinaya alınan '%{filename}' dosyası bir yönetici tarafından silindi." + overridden_by_admin: "'%{filename}' dosyası için karantina %{user} tarafından kaldırıldı. Dosyaya artık erişilebilir." quarantined_attachments: - container: "Container" - delete: "Delete the quarantined file" - title: "Quarantined attachments" - error_cannot_act_self: "Cannot perform actions on your own uploaded files." + container: "Depo" + delete: "Karantinaya alınan dosyayı sil" + title: "Karantinaya alınan ekler" + error_cannot_act_self: "Kendi yüklediğiniz dosyalar üzerinde işlem yapamazsınız." attribute_help_texts: note_public: "Bu alana eklediğiniz herhangi bir metin ve resim, oturum açmış tüm kullanıcılar tarafından herkes tarafından görülebilir!" text_overview: "Bu görünümde, öznitelikleri görünüm için özel yardım metinler oluşturabilirsiniz. Tanımladığınızda, bu metinler, aidiyet öznitelik yanındaki Yardım simgesini tıklayarak gösterilebilir." @@ -125,8 +125,8 @@ tr: ldap_auth_sources: ldap_error: "LDAP-Hatası: %{error_message}" ldap_auth_failed: "LDAP sunucusunda kimlik doğrulaması yapılamadı." - sync_failed: "Failed to synchronize from LDAP: %{message}." - back_to_index: "Click here to go back to the list of connection." + sync_failed: "LDAP'den senkronizasyon başarısız oldu: %{message}." + back_to_index: "Bağlantı listesine geri dönmek için buraya tıklayın." technical_warning_html: | Bu LDAP formu, LDAP / Active Directory kurulumunuz hakkında teknik bilgi gerektirir.
@@ -218,23 +218,23 @@ tr: admin: custom_field_projects: is_for_all_blank_slate: - heading: For all projects - description: This custom field is enabled in all projects since the "For all projects" option is checked. It cannot be deactivated for individual projects. + heading: Tüm projeler için + description: '"Tüm projeler için" seçeneği işaretli olduğu için bu proje niteliği tüm projelerde etkindir. Projeler için bağımsız olarak devre dışı bırakılamaz.' items: - actions: "Item actions" + actions: "Öğe eylemleri" blankslate: title: "Öğeler listeniz boş" description: "Start by adding items to the custom field of type hierarchy. Each item can be used to create a hierarchy bellow it. To navigate and create sub-items inside a hierarchy click on the created item." placeholder: - label: "Item label" - short: "Short name" + label: "Öğe etiketi" + short: "Kısa adı" notice: - remember_items_and_projects: "Remember to set items and projects in the respective tabs for this custom field." + remember_items_and_projects: "Bu özel alan için ilgili sekmelerde öğeleri ve projeleri ayarlamayı unutmayın." hierarchy: subitems: - zero: no sub-items - one: 1 sub-item - other: "%{count} sub-items" + zero: alt öğe yok + one: 1 alt öğe + other: "%{count} alt öğe" text_add_new_custom_field: > Bir projeye yeni özel alanlar eklemeden önce onları oluşturmalısınız. is_enabled_globally: "Genel için etkinleştirildi" @@ -245,13 +245,13 @@ tr: reorder_confirmation: "Uyarı: Mevcut değerlerin sırası kaybolacak. Devam et?" instructions: is_required: "Mark the custom field as required. This will make it mandatory to fill in the field when creating new or updating existing resources." - is_required_for_project: "Check to enable this attribute and make it required in all projects. It cannot be deactived for individual projects." + is_required_for_project: "Bu özelliği etkinleştirmek ve tüm projelerde gerekli kılmak için işaretleyin. Tek tek projeler için devre dışı bırakılamaz." is_for_all: "Mark the custom field as available in all existing and new projects." - multi_select: "Allows the user to assign multiple values to this custom field." + multi_select: "Kullanıcının bu özel alana birden fazla değer atamasına izin verir." searchable: "Include the field values when using the global search functionality." - searchable_for_project: "Check to make this attribute available as a filter in project lists." + searchable_for_project: "Bu niteliği proje listelerinde filtre olarak kullanmak için işaretleyin." editable: "Allow the field to be editable by users themselves." - admin_only: "Check to make this attribute only visible to administrators. Users without admin rights will not be able to view or edit it." + admin_only: "Bu niteliğin yalnızca yöneticilere görünür kılmak için işaretleyin. Yönetici hakları olmayan kullanıcılar bunu görüntüleyemez veya düzenleyemez." is_filter: > Allow the custom field to be used in a filter in work package views. Note that only with 'For all projects' selected, the custom field will show up in global views. tab: @@ -264,11 +264,11 @@ tr: rules: label: filled?: "must be filled" - not_unique: "must be unique within the same hierarchy level" + not_unique: "aynı hiyerarşi seviyesi içinde benzersiz olmalıdır" rules: - label: "Label" + label: "Etiket" global_search: - placeholder: "Search in %{app_title}" + placeholder: "%{app_title} içinde ara" overwritten_tabs: wiki_pages: "Viki" messages: "Forum" @@ -293,7 +293,7 @@ tr: work_package_attachments: "İş paketleri: ekler" work_package_categories: "İş paketleri: kategoriler" work_package_file_links: "Çalışma paketleri: dosya bağlantıları" - work_package_shares: "Work packages: shares" + work_package_shares: "İş paketleri: paylaşımlar" delete: scheduled: "Silme planlandı ve arka planda gerçekleştirilir. Sonuçtan haberdar edileceksiniz." schedule_failed: "Proje silinemiyor: %{errors}" @@ -307,8 +307,8 @@ tr: no_results_title_text: Şu anda hiç proje bulunmamakta no_results_content_text: Yeni bir proje oluşturun search: - label: Project name filter - placeholder: Search by project name + label: Proje adı filtresi + placeholder: Proje adına göre ara lists: active: "Aktif projeler" my: "Projelerim" @@ -469,11 +469,11 @@ tr: browser: "Tarayıcı" device: "Cihaz / İşletim Sistemi" unknown_browser: "bilinmeyen tarayıcı" - unknown_os: "unknown operating system" - current: "Current session" - title: "Session management" - instructions: "This is a list of devices that have logged into your account. Revoke any sessions that you do not recognize or you have no longer access to." - may_not_delete_current: "You cannot delete your current session." + unknown_os: "bilinmeyen işletim sistemi" + current: "Şuanki oturum" + title: "Oturum yönetimi" + instructions: "Bu, hesabınıza giriş yapmış olan cihazların bir listesidir. Tanımadığınız veya artık erişiminizin olmadığı oturumları iptal edin." + may_not_delete_current: "Şuanki oturumunuzu silemezsiniz." groups: member_in_these_groups: "Bu kullanıcı şu anda aşağıdaki grupların bir üyesidir:" no_results_title_text: Bu kullanıcı şu anda hiçbir gruba üye değil. @@ -501,14 +501,14 @@ tr: Bu önceliğin rengini atamak veya değiştirmek için tıklayın. Tablodaki iş paketlerini vurgulamak için kullanılabilir. reactions: - action_title: "React" - add_reaction: "Add reaction" - react_with: "React with %{reaction}" - and_user: "and %{user}" + action_title: "Tepki" + add_reaction: "Tepki ekle" + react_with: "%{reaction} ile tepki ver" + and_user: "ve %{user} ile" and_others: - one: and 1 other - other: and %{count} others - reaction_by: "%{reaction} by" + one: ve 1 diğeri + other: ve %{count} tane daha + reaction_by: "tarafından %{reaction}" reportings: index: no_results_title_text: Halen durum bildirimleri yok. @@ -519,14 +519,13 @@ tr: Bu durumun rengini atamak veya değiştirmek için tıklayın. Durum düğmesinde gösterilir ve tablodaki iş paketlerini vurgulamak için kullanılabilir. status_default_text: |- - New work packages are by default set to this type. They cannot be read-only. + Yeni iş paketleri varsayılan olarak bu türe ayarlanmıştır. Salt okunur olamazlar. status_excluded_from_totals_text: |- - Check this option to exclude work packages with this status from totals of Work, - Remaining work, and % Complete in a hierarchy. + Bir hiyerarşide bu duruma sahip iş paketlerini İş, + Kalan iş ve % Tamamlandı toplamlarından hariç tutmak için bu seçeneği işaretleyin. status_percent_complete_text: |- - In status-based progress calculation mode, the % Complete of a work - package is automatically set to this value when this status is selected. - Ignored in work-based mode. + Durum bazlı ilerleme hesaplama modunda, bu durum seçildiğinde bir işin % Tamamlandı durumu otomatik olarak bu değere ayarlanır. + İş bazlı modda yok sayılır. status_readonly_html: | Bu durumdaki iş paketlereni salt okunur olarak işaretlemek için bu seçeneği işaretleyin. Durum haricindeki başka özellikler değiştirilemez. @@ -539,11 +538,11 @@ tr: is_default: "Varsayılan" is_closed: "Kapalı" is_readonly: "Salt okunur" - excluded_from_totals: "Excluded from totals" + excluded_from_totals: "Toplamlardan hariç tutulanlar" themes: - dark: "Dark" - light: "Light" - light_high_contrast: "Light high contrast" + dark: "Koyu" + light: "Açık" + light_high_contrast: "Yüksek kontrastlı açık" types: index: no_results_title_text: Şu anda hiç tip yok. @@ -562,7 +561,7 @@ tr: Seçilen renk, Gantt şemalarında veya iş paketleri tablolarında farklı türleri ayırt eder. Bu nedenle güçlü bir renk kullanılması önerilir. versions: overview: - work_packages_in_archived_projects: "The version is shared with archived projects which still have work packages assigned to this version. These are counted, but will not appear in the linked views." + work_packages_in_archived_projects: "Sürüm, hala bu sürüme atanmış iş paketleri olan arşivlenmiş projelerle paylaşılmakta. Bunlar sayılır, ancak bağlantılı görünümlerde gösterilmez." no_results_title_text: Bu sürüme atadığım iş paketi bulunmuyor. wiki: page_not_editable_index: İstenen sayfa mevcut değil (henüz). Tüm wiki sayfalarının dizinine yönlendirildiniz. @@ -578,20 +577,20 @@ tr: one: "Bir soydan iş paketi" other: "%{count} Bir soydan iş paketi" bulk: - copy_failed: "The work packages could not be copied." - move_failed: "The work packages could not be moved." + copy_failed: "İş paketleri kopyalanamadı." + move_failed: "İş paketleri taşınamadı." could_not_be_saved: "Aşağıdaki iş paketleri kaydedilemedi:" none_could_be_saved: "%{total} iş paketlerinin hiçbiri güncellenemedi." x_out_of_y_could_be_saved: "%{total} iş paketinden %{failing} tanesi güncellenemezken %{success} güncellenebildi." - selected_because_descendants: "While %{selected} work packages were selected, in total %{total} work packages are affected which includes descendants." + selected_because_descendants: "Seçilen %{selected} iş paketleri seçiliyken, toplamda alt iş paketlerini de içeren %{total} iş paketi etkilenmekte." descendant: "seçilmiş nesil" move: no_common_statuses_exists: "Seçilen tüm iş paketleri için uygun bir durum yoktur. Durumları değiştirilemez." unsupported_for_multiple_projects: "Birden çok projeden iş paketi için toplu taşıma / kopyalama desteklenmiyor" current_type_not_available_in_target_project: > - The current type of the work package is not enabled in the target project. Please enable the type in the target project if you'd like it to remain unchanged. Otherwise, select an available type in the target project from the list. + İş paketinin mevcut türü hedef projede etkinleştirilmemiştir. Değişmeden kalmasını istiyorsanız lütfen hedef projede bu türü etkinleştirin. Aksi takdirde, listeden hedef projede kullanılabilir bir tür seçin. bulk_current_type_not_available_in_target_project: > - The current types of the work packages aren't enabled in the target project. Please enable the types in the target project if you'd like them to remain unchanged. Otherwise, select an available type in the target project from the list. + İş paketinin mevcut türleri hedef projede etkinleştirilmemiştir. Değişmeden kalmasını istiyorsanız lütfen hedef projede bu türleri etkinleştirin. Aksi takdirde, listeden hedef projede kullanılabilir bir tür seçin. sharing: missing_workflow_warning: title: "Workflow missing for work package sharing" @@ -639,7 +638,7 @@ tr: error_self_registration_disabled: > Bu sistemde kullanıcı kaydı yapılması devre dışı bırakılmıştır. Lütfen bir yöneticiden sizin için bir hesap oluşturmasını isteyin. error_self_registration_limited_provider: > - User registration is limited for the Single sign-on provider '%{name}'. Please ask an administrator to activate the account for you or change the self registration limit for this provider. + Tek noktadan oturum açma sağlayıcısı '%{name}' için kullanıcı kaydı sınırlıdır. Lütfen yöneticiden hesabınızı sizin için etkinleştirmesini veya bu sağlayıcı için kendi kendine kayıt sınırını değiştirmesini isteyin. login_with_auth_provider: "veya varolan hesabınızı kullanarak oturum açın" signup_with_auth_provider: "veya kullanarak kaydolun" auth_source_login: Hesabınızı aktifleştirmek için lütfen %{login} olarak giriş yapın. @@ -668,12 +667,12 @@ tr: custom_action: actions: "Eylemler" custom_field: - allow_non_open_versions: "Allow non-open versions" + allow_non_open_versions: "Açık olmayan sürümlere izin ver" default_value: "Varsayılan değer" editable: "Düzenlenebilir" field_format: "Biçim" is_filter: "Filtre olarak kullanılan" - is_for_all: "For all projects" + is_for_all: "Tüm projeler için" is_required: "Gerekli" max_length: "Maksimum uzunluk" min_length: "Minimum uzunluk" @@ -681,15 +680,15 @@ tr: possible_values: "Olası değerler" regexp: "Düzenli ifade" searchable: "Aranabilir" - admin_only: "Admin-only" + admin_only: "Yalnızca yönetici" custom_value: value: "Değer" doorkeeper/application: uid: "Müşteri Kimliği" secret: "Müşteri gizliliği" owner: "Ürün Sahibi" - builtin: "Builtin" - enabled: "Active" + builtin: "Dahili" + enabled: "Aktif" redirect_uri: "Yönlendirme URI'si" client_credentials_user_id: "Müşteri Kimlik Bilgileri ve Kullanıcı Kimliği gereklidir" scopes: "Kapsamlar" @@ -737,7 +736,7 @@ tr: queries: "Sorgular" status_code: "Proje Durumu" description: "Açıklama" - status_explanation: "Project status description" + status_explanation: "Proje durumunun tanımı" status_codes: not_started: "Başlatılmadı" on_track: "Takipte" @@ -753,8 +752,8 @@ tr: versions: "Sürümler" work_packages: "İş Paketleri" project_custom_field: - is_required: "Required for all projects" - custom_field_section: Section + is_required: "Tüm projelerde zorunludur" + custom_field_section: Bölüm query: column_names: "Sütunlar" relations_to_type_column: "%{type} ile ilişkileri" @@ -763,7 +762,7 @@ tr: filters: "Filtreler" timeline_labels: "Zaman çizelgesi etiketleri" relation: - lag: "Lag" + lag: "Gecikme" from: "İş paketi" to: "İlgili iş paketi" repository: @@ -773,14 +772,14 @@ tr: status: is_closed: "İş paketi kapalı" is_readonly: "İş paketi salt okunur" - excluded_from_totals: "Exclude from calculation of totals in hierarchy" - default_done_ratio: "% Complete" + excluded_from_totals: "Hiyerarşideki toplamların hesaplanmasından hariç tut" + default_done_ratio: "% Tamamlandı" time_entry: activity: "Etkinlik" hours: "Saat" spent_on: "Tarih" type: "Tür" - ongoing: "Ongoing" + ongoing: "Devam eden" type: description: "Açıklama için varsayılan metin" attribute_groups: "" @@ -792,7 +791,7 @@ tr: admin: "Yönetici" auth_source: "Authentication source" ldap_auth_source: "LDAP bağlantısı" - identity_url: "Identity URL" + identity_url: "Kimlik URL'si" current_password: "Mevcut parola" force_password_change: "Sonraki oturum açma işleminde parola değişikliğine zorla" language: "Dil" @@ -806,8 +805,8 @@ tr: time_zone: "Zaman dilimi" auto_hide_popups: "Başarılı bildirimleri otomatik olarak gizle" warn_on_leaving_unsaved: "İş paketlerinden ayrılırken kaydedilmemiş değişiklik olduğunda beni uyar" - theme: "Mode" - mode_guideline: "Some modes will overwrite custom theme colours for accessibility and legibility. For the full custom theme, please select Light mode." + theme: "Mod" + mode_guideline: "Bazı modlar, erişilebilirlik ve okunabilirlik için özel tema renklerini değiştirecektir. Özel temada tüm özellikleri kullanmak için lütfen Açık modu seçin." version: effective_date: "Bitiş tarihi" sharing: "Paylaşım" @@ -823,7 +822,7 @@ tr: derived_done_ratio: "Toplam tamamlanma %" derived_remaining_hours: "Toplam kalan iş" derived_remaining_time: "Toplam kalan iş" - done_ratio: "% Complete" + done_ratio: "% Tamamlandı" duration: "Süre" end_insertion: "Ekleme işlemi bitti" end_deletion: "Silme işlemi bitti" @@ -832,16 +831,16 @@ tr: title: "İş Günleri" false: "Sadece iş günleri" true: "çalışılmayan günleri dahil et" - notify: "Notify" #used in custom actions + notify: "Bildirim" #used in custom actions parent: "Üst" parent_issue: "Üst" parent_work_package: "Üst" priority: "Öncelik" - progress: "% Complete" + progress: "% Tamamlandı" readonly: "Salt okunur" remaining_hours: "Kalan çalışma" remaining_time: "Kalan çalışma" - shared_with_users: "Shared with" + shared_with_users: "Şununla paylaşıldı" schedule_manually: "Manuel zamanlamayı etkinleştir" spent_hours: "Harcanan zaman" spent_time: "Harcanan zaman" @@ -859,8 +858,8 @@ tr: before_or_equal_to: "%{date}} tarihinden önce veya ona eşit olmalıdır." blank: "boş bırakılamaz." blank_nested: "'%{property}' özelliğinin ayarlanmış olması gerekir." - cannot_delete_mapping: "is required. Cannot be deleted." - is_for_all_cannot_modify: "is for all projects and can therefore not be modified." + cannot_delete_mapping: "zorunlu. Silinemez." + is_for_all_cannot_modify: "tüm projeler içindir ve bu nedenle değiştirilemez." cant_link_a_work_package_with_a_descendant: "İş paketi alt görevlerinden birine bağlanamaz." circular_dependency: "Bu ilişki döngüsel bağımlılık oluşturacak." confirmation: "%{attribute} eşleşmiyor." @@ -891,17 +890,17 @@ tr: not_available: "Sistem yapılandırması nedeniyle kullanılamaz.\n" not_deletable: "kaldırılamadı." not_current_user: "mevcut kullanıcı değil." - not_found: "not found." + not_found: "bulunamadı." not_a_date: "geçerli bir tarih değil." not_a_datetime: "geçerli bir zaman değil." not_a_number: "bir sayı değil." not_allowed: "Eksik izinler nedeniyle geçersiz." - not_json: "is not a valid JSON object." + not_json: "geçerli bir JSON nesnesi değildir." not_an_integer: "bir tamsayı değil." not_an_iso_date: "geçerli bir tarih değil. Gerekli biçim:: YYYY-AA-GG." not_same_project: "aynı projeye ait değil." odd: "tek sayı olmalı." - regex_match_failed: "does not match the regular expression %{expression}." + regex_match_failed: "%{expression} düzenli ifadesiyle eşleşmiyor." regex_invalid: "atanmış düzenli ifadeler ile doğrulanamadı." smaller_than_or_equal_to_max_length: "en fazla uzunluğa eşit veya daha küçük olmalıdır." taken: "zaten alınmıştır." @@ -939,7 +938,7 @@ tr: custom_fields_project: attributes: project_ids: - blank: "Please select a project." + blank: "Lütfen bir proje seçin." custom_actions: only_one_allowed: "(%{name}) yalnızca bir değer verilir." empty: "(%{name}) değeri boş olamaz." @@ -1397,7 +1396,7 @@ tr: button_continue: "Devam et" button_copy: "Kopyala" button_copy_to_clipboard: "Panoya kopyala" - button_copy_link_to_clipboard: "Copy link to clipboard" + button_copy_link_to_clipboard: "Bağlantıyı panoya kopyala" button_copy_and_follow: "Kopyala ve takip et" button_create: "Oluştur" button_create_and_continue: "Oluştur ve devam et" @@ -1411,7 +1410,7 @@ tr: button_expand_all: "Tümünü genişlet" button_favorite: "Favorilere Ekle" button_filter: "Filtre" - button_finish_setup: "Finish setup" + button_finish_setup: "Kurulumu bitir" button_generate: "Üretmek" button_list: "Liste" button_lock: "Kilitle" @@ -1449,23 +1448,23 @@ tr: button_add_menu_entry: "Menü öğesi ekle" button_configure_menu_entry: "Menü öğesini düzenle" button_delete_menu_entry: "Menü öğesini sil" - button_view_shared_work_packages: "View shared work packages" - button_manage_roles: "Manage roles" - button_remove_member: "Remove member" - button_remove_member_and_shares: "Remove member and shares" - button_revoke_work_package_shares: "Revoke work package shares" - button_revoke_access: "Revoke access" - button_revoke_all: "Revoke all" - button_revoke_only: "Revoke only %{shared_role_name}" - button_publish: "Make public" - button_unpublish: "Make private" + button_view_shared_work_packages: "Baylaşılan iş paketlerinin göster" + button_manage_roles: "Görevleri yönet" + button_remove_member: "Üyeyi çıkart" + button_remove_member_and_shares: "Üye ve paylaşımlarını kaldır" + button_revoke_work_package_shares: "İş paketi paylaşımlarını iptal edin" + button_revoke_access: "Erişimi iptal et" + button_revoke_all: "Tümünü iptal et" + button_revoke_only: "Yalnızca %{shared_role_name} iptal et" + button_publish: "Herkese aç" + button_unpublish: "Özel hale getir" consent: checkbox_label: Yukarıdakilere dikkat ettim ve onay verdim. failure_message: Rıza alımı başarısız oldu, işlenemedi. title: Kullanıcı Rızası decline_warning_message: Onay vermeyi reddettiniz ve çıkış yaptınız. - user_has_consented: The user gave their consent to your [configured consent information text](consent_settings). - not_yet_consented: The user has not yet given their consent to your [configured consent information text](consent_settings). They will be reminded the next time they log in. + user_has_consented: Kullanıcı [yapılandırılmış rıza bilgisi metninize] (consent_settings) onay verdi. + not_yet_consented: Kullanıcı henüz [yapılandırılmış rıza bilgisi metninize] (consent_settings) onay vermedi. Bir sonraki girişlerinde kendisine hatırlatılacak. contact_mail_instructions: Veri değişikliği veya kaldırma isteklerini gerçekleştirmek için kullanıcıların bir veri denetleyicisine erişebilecekleri posta adresini tanımlayın. contact_your_administrator: Hesabınızın silinmesini istiyorsanız, lütfen yöneticinize başvurun. contact_this_mail_address: Hesabınızın silinmesini istiyorsanız, lütfen %{mail_address} ile iletişime geçin. @@ -1576,23 +1575,23 @@ tr: one: "1 dakika" other: "%{count} dakika" x_minutes_abbreviated: - one: "1 min" - other: "%{count} mins" + one: "1 dak" + other: "%{count} dak" x_hours: one: "1 saat" other: "%{count} saat" x_hours_abbreviated: - one: "1 hr" - other: "%{count} hrs" + one: "1 sa" + other: "%{count} sa" x_weeks: - one: "1 week" - other: "%{count} weeks" + one: "1 hafta" + other: "%{count} hafta" x_months: one: "1 ay" other: "%{count} ay" x_years: one: "1 yıl" - other: "%{count} years" + other: "%{count} yıl" x_seconds: one: "1 saniye" other: "%{count} saniye" @@ -1649,8 +1648,8 @@ tr: error_can_not_archive_project: "Bu proje arşivlenemiyor: %{errors}" error_can_not_delete_entry: "Girdi silinemiyor" error_can_not_delete_custom_field: "Özel alan silinemiyor" - error_can_not_delete_in_use_archived_undisclosed: "There are also work packages in archived projects. You need to ask an administrator to perform the deletion to see which projects are affected." - error_can_not_delete_in_use_archived_work_packages: "There are also work packages in archived projects. You need to reactivate the following projects first, before you can change the attribute of the respective work packages: %{archived_projects_urls}" + error_can_not_delete_in_use_archived_undisclosed: "Arşivlenmiş projelerde de iş paketleri var. Hangi projelerin etkilendiğini görmek için bir yöneticiden silme işlemini gerçekleştirmesini istemeniz gerekir." + error_can_not_delete_in_use_archived_work_packages: "Arşivlenen projelerde de iş paketleri var. İlgili iş paketlerinin niteliğini değiştirebilmeniz için önce aşağıdaki projeleri yeniden etkinleştirmeniz gerekir: %{archived_projects_urls}" error_can_not_delete_type: explanation: 'Bu tür iş paketleri içerir ve silinemez. Etkilenen tüm iş paketlerini bu görünümde görebilirsiniz.' error_can_not_delete_standard_type: "Standart türler silinemez." @@ -1675,7 +1674,7 @@ tr: error_pdf_failed_to_export: "PDF çıktısı kaydedilemedi: %{error}" error_token_authenticity: "Siteler Arası İstek Sahteciliği belirteci doğrulanamadı. Birden fazla tarayıcı veya sekme hakkında veri göndermeyi denediniz mi? Lütfen tüm sekmeleri kapatın ve tekrar deneyin" error_work_package_not_found_in_project: "Iş paketi bulunamadı veya bu projeye ait değil" - error_work_package_id_not_found: "The work package was not found." + error_work_package_id_not_found: "İş paketi bulunamadı." error_must_be_project_member: "projesi üyesi olmalıdır" error_migrations_are_pending: "OpenProject kurulumunuzda bekleyen veritabanı geçişleri var. Son yükseltme işleminizde geçiş işlemlerini gerçekleştirme ihtimalinizi büyük olasılıkla kaçırdınız. Lütfen kurulumunuzu uygun şekilde yükseltmek için yükseltme kılavuzunu kontrol edin." error_migrations_visit_upgrade_guides: "Lütfen yükseltme kılavuzu belgelerimizi ziyaret edin" @@ -1698,7 +1697,7 @@ tr: error_menu_item_not_saved: Menü öğesi kaydedilemez error_wiki_root_menu_item_conflict: > Var olan menü üyesi "%{existing_caption}" (%{existing_identifier}) ile çakıştığından, "%{old_name}" adı "%{new_name}" olarak değiştirilemiyor. - error_external_authentication_failed_message: "An error occurred during external authentication: %{message}" + error_external_authentication_failed_message: "Harici kimlik doğrulama sırasında bir hata oluştu: %{message}" error_attribute_not_highlightable: "Nitelikler vurgulanmıyor: %{attributes}" events: changeset: "Değişiklikler düzenlendi" @@ -1715,13 +1714,13 @@ tr: work_package_note: "İk Paketi notu eklendi" title: project: "Proje: %{name}" - subproject: "Subproject: %{name}" + subproject: "Alt-proje: %{name}" export: dialog: - title: "Export" - submit: "Export" + title: "Dışarı aktar" + submit: "Dışarı aktar" format: - label: "File format" + label: "Dosya biçimi" options: csv: label: "CSV" @@ -1730,32 +1729,32 @@ tr: xls: label: "XLS" columns: - input_label_report: "Add columns to attribute table" - input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it." - input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports." + input_label_report: "Nitelik tablosuna sütun ekle" + input_caption_report: "Varsayılan olarak, iş paketi listesine sütun olarak eklenen tüm nitelikler seçilir. Uzun metin alanları nitelik tablosunda mevcut değildir, ancak altında görüntülenebilir." + input_caption_table: "Varsayılan olarak, iş paketi listesine sütun olarak eklenen tüm nitelikler seçilir. Uzun metin alanları tablo olarak dışarı aktarımda mevcut değildir." pdf: export_type: - label: "PDF export type" + label: "PDF dışa aktarma türü" options: table: - label: "Table" - caption: "Export the work packages list in a table with the desired columns." + label: "Tablo" + caption: "İş paketleri listesini istediğiniz sütunlarla bir tablo halinde dışa aktarın." report: - label: "Report" - caption: "Export the work package on a detailed report of all work packages in the list." + label: "Rapor" + caption: "Listedeki tüm iş paketlerini içeren ayrıntılı bir rapor olarak iş paketini dışa aktarın." gantt: - label: "Gantt chart" - caption: "Export the work packages list in a Gantt diagram view." + label: "Gantt grafiği" + caption: "İş paketleri listesini bir Gantt diyagramı görünümünde dışa aktarın." include_images: - label: "Include images" - caption: "Exclude images to reduce the size of the PDF export." + label: "Görüntüleri dahil et" + caption: "PDF boyutunu küçültmek için görüntüleri hariç tutun." gantt_zoom_levels: - label: "Zoom levels" - caption: "Select what is the zoom level for dates displayed in the chart." + label: "Yakınlaştırma düzeyi" + caption: "Grafikte görüntülenen tarihler için yakınlaştırma düzeyinin ne olduğunu seçin." options: - days: "Days" - weeks: "Weeks" - months: "Months" + days: "Gün" + weeks: "Hafta" + months: "Ay" quarters: "Quarters" column_width: label: "Table column width" diff --git a/config/locales/crowdin/uk.yml b/config/locales/crowdin/uk.yml index dc3084533ad4..4449e9dc088a 100644 --- a/config/locales/crowdin/uk.yml +++ b/config/locales/crowdin/uk.yml @@ -37,9 +37,9 @@ uk: label_submit_comment: "Надіслати коментар" changed_on: "змінено" created_on: "створив(-ла)" - changed: "змінено" - created: "створено" - commented: "прокоментовано" + changed: "змінив(-ла)" + created: "створив(-ла)" + commented: "прокоментував(-ла)" admin: plugins: no_results_title_text: Зараз немає встановлених плагінів. diff --git a/modules/boards/config/locales/crowdin/js-ro.yml b/modules/boards/config/locales/crowdin/js-ro.yml index 1d9dbc15c521..bcc598a1e862 100644 --- a/modules/boards/config/locales/crowdin/js-ro.yml +++ b/modules/boards/config/locales/crowdin/js-ro.yml @@ -28,7 +28,7 @@ ro: error_attribute_not_writable: "Nu se poate muta pachetul de lucru, %{attribute} nu este inscriptibil." error_loading_the_list: "Eroare la încărcarea listei: %{error_message}" error_permission_missing: "Lipsește permisiunea de a crea interogări publice" - error_cannot_move_into_self: "Nu puteți muta un pachet de lucru în coloana sa proprie." + error_cannot_move_into_self: "Nu p0ți muta un pachet de lucru în coloana sa proprie." text_hidden_list_warning: "Nu toate listele sunt afișate deoarece nu aveți permisiunea. Contactați administratorul pentru mai multe informații." click_to_remove_list: "Clic pentru a elimina această listă" board_type: diff --git a/modules/openid_connect/config/locales/crowdin/ko.yml b/modules/openid_connect/config/locales/crowdin/ko.yml index e6f9ab5da0d7..0f42284c0f54 100644 --- a/modules/openid_connect/config/locales/crowdin/ko.yml +++ b/modules/openid_connect/config/locales/crowdin/ko.yml @@ -37,52 +37,52 @@ ko: format: "검색 엔드포인트 URL %{message}" response_is_not_successful: " - 응답 상태는 %{status}입니다." response_is_not_json: " - JSON 본문을 반환하지 않습니다." - response_misses_required_attributes: " does not return required attributes. Missing attributes are: %{missing_attributes}." + response_misses_required_attributes: " - 필수 특성을 반환하지 않습니다. 누락된 특성: %{missing_attributes}." provider: delete_warning: - input_delete_confirmation: Enter the provider name %{name} to confirm deletion. - irreversible_notice: Deleting an SSO provider is an irreversible action. - provider: 'Are you sure you want to delete the SSO provider %{name}? To confirm this action please enter the name of the provider in the field below, this will:' - delete_result_1: Remove the provider from the list of available providers. + input_delete_confirmation: 삭제를 확인하려면 공급자 이름 %{name}(을)를 입력하세요. + irreversible_notice: SSO 공급자를 삭제하면 되돌릴 수 없습니다. + provider: 'SSO 공급자 %{name}을(를) 삭제하시겠습니까? 이 작업을 확인하려면 아래 필드에 공급자 이름을 입력하세요. 이렇게 하면 다음과 같이 됩니다.' + delete_result_1: 사용 가능한 공급자 목록에서 공급자를 제거합니다. delete_result_user_count: - zero: No users are currently using this provider. No further action is required. - one: "One user is currently still using this provider. They will need to be re-invited or logging in with another provider." - other: "%{count} users are currently still using this provider. They will need to be re-invited or logging in with another provider." + zero: 현재 이 공급자를 사용하는 사용자가 없습니다. 추가 조치가 필요하지 않습니다. + one: "1명의 사용자가 이 공급자를 계속 사용하고 있습니다. 해당 사용자를 다시 초대하거나 다른 공급자로 로그인해야 합니다." + other: "%{count}명의 사용자가 이 공급자를 계속 사용하고 있습니다. 해당 사용자를 다시 초대하거나 다른 공급자로 로그인해야 합니다." delete_result_direct: 이 공급자는 직접 로그인 공급자로 표시됩니다. 이 설정은 제거되며 사용자는 더 이상 로그인을 위해 해당 공급자로 리디렉션되지 않습니다. openid_connect: menu_title: OpenID 공급자 delete_title: "OpenID Connect 공급자 삭제" instructions: redirect_url: 로그인 성공 후 OpenID Connect 공급자가 OpenProject로 다시 리디렉션할 때 사용해야 하는 리디렉션 URL입니다. - endpoint_url: OpenID Connect 공급자가 사용자에게 제공한 엔드포인트 URL + endpoint_url: OpenID Connect 공급자가 귀하에게 제공한 엔드포인트 URL metadata_none: 이 정보가 없습니다 metadata_url: 검색 엔드포인트 URL이 있습니다 - client_id: This is the client ID given to you by your OpenID Connect provider - client_secret: This is the client secret given to you by your OpenID Connect provider - limit_self_registration: If enabled, users can only register using this provider if configuration on the provider's end allows it. - display_name: The name of the provider. This will be displayed as the login button and in the list of providers. - tenant: 'Please replace the default tenant with your own if applicable. See this.' - post_logout_redirect_uri: The URL the OpenID Connect provider should redirect to after a logout request. + client_id: OpenID Connect 공급자가 귀하에게 제공한 클라이언트 ID입니다 + client_secret: OpenID Connect 공급자가 귀하에게 제공한 클라이언트 비밀번호입니다 + limit_self_registration: 활성화된 경우, 사용자는 공급자 측의 구성에서 허용하는 경우에만 이 공급자를 사용하여 등록할 수 있습니다. + display_name: 공급자 이름입니다. 로그인 버튼으로 표시되며 공급자 목록에 표시됩니다. + tenant: '해당되는 경우 기본 테넌트를 고유한 테넌트로 교체하세요. 여기를 참조하세요.' + post_logout_redirect_uri: 로그아웃 요청 후 OpenID Connect 공급자가 리디렉션해야 하는 URL입니다. claims: > - You can request additional claims for the userinfo and id token endpoints. Please see [our OpenID connect documentation](docs_url) for more information. + 사용자 정보 및 ID 토큰 엔드포인트에 대한 추가 클레임을 요청할 수 있습니다. 자세한 내용은 [OpenID Connect 문서](docs_url)를 참조하세요. acr_values: > - Request non-essential claims in an easier format. See [our documentation on acr_values](docs_url) for more information. + 필수적이지 않은 클레임은 더 간편한 형식으로 요청하세요. 자세한 내용은 [acr_values에 대한 문서](docs_url)를 참조하세요. mapping_login: > - Provide a custom mapping in the userinfo response to be used for the login attribute. + 로그인 특성에 사용할 사용자 정보 응답에 사용자 지정 매핑을 제공합니다. mapping_email: > - Provide a custom mapping in the userinfo response to be used for the email attribute. + 이메일 특성에 사용할 사용자 정보 응답에 사용자 지정 매핑을 제공합니다. mapping_first_name: > - Provide a custom mapping in the userinfo response to be used for the first name. + 이름에 사용할 사용자 정보 응답에 사용자 지정 매핑을 제공합니다. mapping_last_name: > - Provide a custom mapping in the userinfo response to be used for the last name. + 성에 사용할 사용자 정보 응답에 사용자 지정 매핑을 제공합니다. mapping_admin: > - Provide a custom mapping in the userinfo response to be used for the admin status. It expects a boolean attribute to be returned. + 관리자 상태에 사용할 사용자 정보 응답에 사용자 지정 매핑을 제공합니다. 부울 특성이 반환될 것으로 예상됩니다. settings: - metadata_none: I don't have this information - metadata_url: I have a discovery endpoint URL - endpoint_url: Endpoint URL + metadata_none: 이 정보가 없습니다 + metadata_url: 검색 엔드포인트 URL이 있습니다 + endpoint_url: 엔드포인트 URL providers: - seeded_from_env: "This provider was seeded from the environment configuration. It cannot be edited." + seeded_from_env: "이 공급자는 환경 구성에서 시드되었으며, 편집할 수 없습니다." google: name: Google microsoft_entra: @@ -96,26 +96,26 @@ ko: label_empty_title: 아직 구성된 OpenID 공급자가 없습니다. label_empty_description: 여기에서 보려면 공급자를 추가합니다. label_metadata: OpenID Connect 검색 엔드포인트 - label_automatic_configuration: Automatic configuration - label_optional_configuration: Optional configuration + label_automatic_configuration: 자동 구성 + label_optional_configuration: 옵션 구성 label_advanced_configuration: 고급 구성 label_configuration_details: 메타데이터 label_client_details: 클라이언트 세부 정보 label_attribute_mapping: 특성 매핑 - client_details_description: Configuration details of OpenProject as an OIDC client + client_details_description: OIDC 클라이언트인 OpenProject의 구성 세부 정보 no_results_table: 아직 정의된 공급자가 없습니다. plural: OpenID 공급자 singular: OpenID 공급자 section_texts: - metadata: Pre-fill configuration using an OpenID Connect discovery endpoint URL - metadata_form_banner: Editing the discovery endpoint may override existing pre-filled metadata values. - metadata_form_title: OpenID Connect Discovery endpoint - metadata_form_description: If your identity provider has a discovery endpoint URL. Use it below to pre-fill configuration. - configuration_metadata: The information has been pre-filled using the supplied discovery endpoint. In most cases, they do not require editing. - configuration: Configuration details of the OpenID Connect provider - display_name: The display name visible to users. - attribute_mapping: Configure the mapping of attributes between OpenProject and the OpenID Connect provider. - claims: Request additional claims for the ID token or userinfo response. + metadata: OpenID Connect 검색 엔드포인트 URL을 사용하여 구성 미리 채우기 + metadata_form_banner: 검색 엔드포인트를 편집하면 미리 채워진 기존 메타데이터 값이 재정의될 수 있습니다. + metadata_form_title: OpenID Connect 검색 엔드포인트 + metadata_form_description: ID 공급자에게 검색 엔드포인트 URL이 있는 경우. 구성을 미리 채우려면 아래 항목을 사용하세요. + configuration_metadata: 이 정보는 제공된 검색 엔드포인트를 사용하여 미리 채워졌습니다. 대부분의 경우 편집할 필요가 없습니다. + configuration: OpenID Connect 공급자의 구성 세부 정보 + display_name: 사용자에게 표시되는 표시 이름입니다. + attribute_mapping: OpenProject와 OpenID Connect 공급자 간의 특성 매핑을 구성합니다. + claims: ID 토큰 또는 사용자 정보 응답에 대한 추가 클레임을 요청합니다. setting_instructions: limit_self_registration: > 활성화되면, 사용자는 자체 등록 설정에서 허용하는 경우에만 이 공급자를 사용하여 등록할 수 있습니다. diff --git a/modules/openid_connect/config/locales/crowdin/pt-BR.yml b/modules/openid_connect/config/locales/crowdin/pt-BR.yml index 0bfe16eb0fee..7de2cdbc14c1 100644 --- a/modules/openid_connect/config/locales/crowdin/pt-BR.yml +++ b/modules/openid_connect/config/locales/crowdin/pt-BR.yml @@ -47,7 +47,7 @@ pt-BR: delete_result_user_count: zero: Nenhum usuário está utilizando este provedor no momento. Não é necessária nenhuma ação adicional. one: "Há um usuário utilizando este provedor. Ele precisará ser re-convidado ou fazer login com outro provedor." - other: "Atualmente, %{count} usuários ainda estão usando este provedor. Eles precisarão ser re-convidados ou fazer login com outro provedor." + other: "Há %{count} usuários utilizando este provedor. Eles precisarão ser re-convidados ou fazer login com outro provedor." delete_result_direct: Este provedor está configurado como provedor de login direto. A configuração será removida e os usuários não serão mais redirecionados para ele para realizar o login. openid_connect: menu_title: Provedores OpenID @@ -59,8 +59,8 @@ pt-BR: metadata_url: Tenho um URL de endpoint de descoberta client_id: Este é o ID do cliente fornecido pelo seu provedor OpenID Connect client_secret: Este é o segredo do cliente fornecido pelo seu provedor OpenID Connect - limit_self_registration: If enabled, users can only register using this provider if configuration on the provider's end allows it. - display_name: The name of the provider. This will be displayed as the login button and in the list of providers. + limit_self_registration: Se ativado, os usuários só poderão se registrar usando este provedor se a configuração no lado do provedor permitir. + display_name: Nome do provedor. Ele será exibido como o botão de login e na lista de provedores. tenant: 'Substitua o locatário padrão pelo seu, se necessário. Consulte aqui.' post_logout_redirect_uri: O URL para a qual o provedor OpenID Connect deve redirecionar após a solicitação de logout. claims: > diff --git a/modules/openid_connect/config/locales/crowdin/pt-PT.yml b/modules/openid_connect/config/locales/crowdin/pt-PT.yml index fd58ecd669cb..017d308da3e9 100644 --- a/modules/openid_connect/config/locales/crowdin/pt-PT.yml +++ b/modules/openid_connect/config/locales/crowdin/pt-PT.yml @@ -59,8 +59,8 @@ pt-PT: metadata_url: Tenho um URL de endpoint de descoberta client_id: Este é o ID de cliente que lhe foi atribuído pelo seu fornecedor OpenID Connect client_secret: Este é o segredo do cliente que lhe foi atribuído pelo seu fornecedor OpenID Connect - limit_self_registration: If enabled, users can only register using this provider if configuration on the provider's end allows it. - display_name: The name of the provider. This will be displayed as the login button and in the list of providers. + limit_self_registration: Se estiver ativado, os utilizadores só podem registar-se utilizando este fornecedor se a configuração do fornecedor o permitir. + display_name: O nome do fornecedor. Este nome será apresentado no botão de início de sessão e na lista de fornecedores. tenant: 'Substitua o inquilino predefinido pelo seu próprio inquilino, se aplicável. Consulte este artigo.' post_logout_redirect_uri: O URL para o qual o fornecedor do OpenID Connect deve redirecionar após um pedido de encerramento de sessão. claims: > diff --git a/modules/openid_connect/config/locales/crowdin/ru.yml b/modules/openid_connect/config/locales/crowdin/ru.yml index 465287eda176..dfd051f42c4b 100644 --- a/modules/openid_connect/config/locales/crowdin/ru.yml +++ b/modules/openid_connect/config/locales/crowdin/ru.yml @@ -8,7 +8,7 @@ ru: attributes: openid_connect/provider: name: Имя - slug: Unique identifier + slug: Уникальный идентификатор display_name: Отображаемое имя client_id: ID клиента client_secret: Закрытый ключ клиента @@ -27,7 +27,7 @@ ru: icon: Пользовательская иконка claims: Претензии acr_values: Значения ACR - redirect_url: Redirect URL + redirect_url: URL переадресации activerecord: errors: models: @@ -53,14 +53,14 @@ ru: menu_title: Провайдеры OpenID delete_title: "Удалить провайдера OpenID Connect" instructions: - redirect_url: This is the redirect URL that the OpenID Connect provider should use to redirect back to OpenProject after a successful login. + redirect_url: Это URL, который провайдер OpenID Connect должен использовать для перенаправления обратно на OpenProject после успешного входа в систему. endpoint_url: URL-адрес конечной точки, указанный поставщиком OpenID Connect metadata_none: У меня нет этой информации metadata_url: У меня есть URL конечной точки обнаружения client_id: Это идентификатор клиента, присвоенный вам провайдером OpenID Connect client_secret: Это ключ клиента, предоставленный вам провайдером OpenID Connect - limit_self_registration: If enabled, users can only register using this provider if configuration on the provider's end allows it. - display_name: The name of the provider. This will be displayed as the login button and in the list of providers. + limit_self_registration: Если эта опция включена, пользователи смогут регистрироваться у этого провайдера только в том случае, если конфигурация провайдера позволяет это делать. + display_name: Это имя провайдера. Оно будет отображаться как кнопка входа и в списке провайдеров. tenant: 'Пожалуйста, замените владельца по умолчанию на своего собственного, если это применимо. См. это.' post_logout_redirect_uri: URL-адрес, на который провайдер OpenID Connect должен перенаправить Вас после запроса на выход из системы. claims: > diff --git a/modules/openid_connect/config/locales/crowdin/tr.yml b/modules/openid_connect/config/locales/crowdin/tr.yml index aa48fbb1ee1f..0c0aa0a3b6f7 100644 --- a/modules/openid_connect/config/locales/crowdin/tr.yml +++ b/modules/openid_connect/config/locales/crowdin/tr.yml @@ -1,7 +1,7 @@ tr: plugin_openproject_openid_connect: name: "OpenProject OpenID Connect" - description: "Adds OmniAuth OpenID Connect strategy providers to OpenProject." + description: "OmniAuth OpenID Bağlantı strateji sağlayıcılarını OpenProject'e ekler." logout_warning: > Çıkış yaptınız. Gönderdiğiniz herhangi bir formun içeriği kaybolabilir. Lütfen giriş yapın]. activemodel: @@ -10,23 +10,23 @@ tr: name: İsim slug: Unique identifier display_name: Ekran adı - client_id: Client ID - client_secret: Client secret + client_id: İstemci ID + client_secret: İstemci gizliliği secret: Gizli scope: kapsam limit_self_registration: Limit self registration - authorization_endpoint: Authorization endpoint - userinfo_endpoint: User information endpoint - token_endpoint: Token endpoint - end_session_endpoint: End session endpoint - post_logout_redirect_uri: Post logout redirect URI + authorization_endpoint: Yetkilendirme bitiş noktası + userinfo_endpoint: Kullanıcı bilgisi bitiş noktası + token_endpoint: Gösterge bitiş noktası + end_session_endpoint: Oturum bitiş noktasını sonlandır + post_logout_redirect_uri: Oturum kapatma sonrası yönlendirme URI'si jwks_uri: JWKS URI - issuer: Issuer - tenant: Tenant - metadata_url: Metadata URL - icon: Custom icon - claims: Claims - acr_values: ACR values + issuer: Sağlayıcı + tenant: Müşteri + metadata_url: Metaveri URL'si + icon: Özel simge + claims: Bilgiler + acr_values: ACR değerleri redirect_url: Redirect URL activerecord: errors: @@ -34,41 +34,41 @@ tr: openid_connect/provider: attributes: metadata_url: - format: "Discovery endpoint URL %{message}" - response_is_not_successful: " responds with %{status}." - response_is_not_json: " does not return JSON body." - response_misses_required_attributes: " does not return required attributes. Missing attributes are: %{missing_attributes}." + format: "Keşif uç noktası URL'si %{message}" + response_is_not_successful: " %{status} ile yanıt verir." + response_is_not_json: " JSON gövdesini cevap olarak vermez." + response_misses_required_attributes: " gerekli öznitelikleri döndürmez. Eksik öznitelikler: %{missing_attributes}." provider: delete_warning: - input_delete_confirmation: Enter the provider name %{name} to confirm deletion. - irreversible_notice: Deleting an SSO provider is an irreversible action. - provider: 'Are you sure you want to delete the SSO provider %{name}? To confirm this action please enter the name of the provider in the field below, this will:' - delete_result_1: Remove the provider from the list of available providers. + input_delete_confirmation: Silme işlemini onaylamak için sağlayıcı %{name} ismini girin. + irreversible_notice: SSO sağlayıcısını silme geri alınamaz bir işlemdir. + provider: 'SSO sağlayıcısı %{name} silmek istediğinize emin misiniz? İşlemi onaylamak için lütfen sağlayıcının adını aşağıdaki alana giriniz:' + delete_result_1: Sağlayıcının adını mevcut sağlayıcılardan kaldır. delete_result_user_count: - zero: No users are currently using this provider. No further action is required. - one: "One user is currently still using this provider. They will need to be re-invited or logging in with another provider." - other: "%{count} users are currently still using this provider. They will need to be re-invited or logging in with another provider." - delete_result_direct: This provider is marked as a direct login provider. The setting will be removed and users will no longer be redirected to the provider for login. + zero: Bu sağlayıcıyı hiçbir kullanıcı kullanmıyor. Ek bir işleme gerek yok. + one: "Bir kullanıcı bu sağlayıcıyı kullanıyor. Tekrar davet edilmesi ya da başka bir kullanıcı ile giriş yapması gerekecek." + other: "%{count} kullanıcı bu sağlayıcıyı kullanıyor. Tekrar davet edilmeleri ya da başka bir kullanıcı ile giriş yapmaları gerekecek." + delete_result_direct: Bu sağlayıcı doğrudan oturum açma sağlayıcısı olarak işaretlenmiştir. Ayar kaldırılacak ve kullanıcılar artık oturum açmak için sağlayıcıya yönlendirilmeyecektir. openid_connect: menu_title: OpenID sağlayıcıları - delete_title: "Delete OpenID Connect provider" + delete_title: "OpenID Connect sağlayıcısını sil" instructions: redirect_url: This is the redirect URL that the OpenID Connect provider should use to redirect back to OpenProject after a successful login. - endpoint_url: The endpoint URL given to you by the OpenID Connect provider - metadata_none: I don't have this information - metadata_url: I have a discovery endpoint URL - client_id: This is the client ID given to you by your OpenID Connect provider - client_secret: This is the client secret given to you by your OpenID Connect provider + endpoint_url: OpenID Connect sağlayıcısı tarafından size verilen uç nokta URL'si + metadata_none: Bu bilgiye sahip değilim + metadata_url: Bir keşif uç noktası URL'im var + client_id: OpenID Connect sağlayıcısı tarafından size verilen istemci URL'si + client_secret: OpenID Connect sağlayıcısı tarafından size verilen gizlilik URL'si limit_self_registration: If enabled, users can only register using this provider if configuration on the provider's end allows it. display_name: The name of the provider. This will be displayed as the login button and in the list of providers. - tenant: 'Please replace the default tenant with your own if applicable. See this.' - post_logout_redirect_uri: The URL the OpenID Connect provider should redirect to after a logout request. + tenant: 'Lütfen öntanımlı müşteriyi kendinizinkiyle değiştirin, mümkünse. Bu belgeye bakın.' + post_logout_redirect_uri: OpenID Connect sağlayıcısının bir oturum kapatma isteğinden sonra yeniden yönlendirmesi gereken URL. claims: > - You can request additional claims for the userinfo and id token endpoints. Please see [our OpenID connect documentation](docs_url) for more information. + Kullanıcı bilgisi ve id göstergesi uç noktaları için ek bilgi talebinde bulunabilirsiniz. Daha fazla bilgi için lütfen [OpenID bağlantı belgelerimize] (docs_url) bakın. acr_values: > - Request non-essential claims in an easier format. See [our documentation on acr_values](docs_url) for more information. + Zorunlu olmayan bilgileri daha kolay bir biçimde talep edin. Daha fazla bilgi için [acr_values hakkındaki belgelerimize] (docs_url) bakın. mapping_login: > - Provide a custom mapping in the userinfo response to be used for the login attribute. + Oturum açma özniteliği için kullanılmak üzere userinfo yanıtında özel bir eşleme sağlayın. mapping_email: > Provide a custom mapping in the userinfo response to be used for the email attribute. mapping_first_name: > diff --git a/modules/openid_connect/config/locales/crowdin/zh-CN.yml b/modules/openid_connect/config/locales/crowdin/zh-CN.yml index 4cd989caa0f0..34c042816cd9 100644 --- a/modules/openid_connect/config/locales/crowdin/zh-CN.yml +++ b/modules/openid_connect/config/locales/crowdin/zh-CN.yml @@ -59,8 +59,8 @@ zh-CN: metadata_url: 我有一个发现端点网址 client_id: 这是您的 OpenID Connect 提供商给您的客户端 ID client_secret: 这是您的 OpenID Connect 提供商给您的客户端密钥 - limit_self_registration: If enabled, users can only register using this provider if configuration on the provider's end allows it. - display_name: The name of the provider. This will be displayed as the login button and in the list of providers. + limit_self_registration: 如果启用,用户只能在OpenID Connect提供商端的配置允许的情况下可使用此提供商注册。 + display_name: OpenID Connect 提供商的名称。这将作为登录按钮和供应商列表的显示。 tenant: '如果适用,请将默认租户替换为您自己的租户。请参阅此处。' post_logout_redirect_uri: OpenID Connect 提供商在注销请求后应重定向到的 URL。 claims: > diff --git a/modules/openid_connect/config/locales/crowdin/zh-TW.yml b/modules/openid_connect/config/locales/crowdin/zh-TW.yml index 82fd5373a980..3723a79c703c 100644 --- a/modules/openid_connect/config/locales/crowdin/zh-TW.yml +++ b/modules/openid_connect/config/locales/crowdin/zh-TW.yml @@ -59,8 +59,8 @@ zh-TW: metadata_url: 我有一個發現端點 URL client_id: 這是 OpenID Connect 提供者給予您的用戶端 ID client_secret: 這是 OpenID Connect 提供者給予您的用戶端密鑰 - limit_self_registration: If enabled, users can only register using this provider if configuration on the provider's end allows it. - display_name: The name of the provider. This will be displayed as the login button and in the list of providers. + limit_self_registration: 如果啟用,只有在提供商端的設定允許的情況下,使用者才能使用此提供商註冊。 + display_name: 提供商的名稱。這將會顯示在登入按鈕及提供商清單中。 tenant: '如果適用,請用您自己的租戶取代預設租戶。請參閱此內容。' post_logout_redirect_uri: OpenID Connect 提供者應在登出請求後重定向至的 URL。 claims: > diff --git a/modules/storages/config/locales/crowdin/ko.yml b/modules/storages/config/locales/crowdin/ko.yml index 05fbc46a7436..0f905157a220 100644 --- a/modules/storages/config/locales/crowdin/ko.yml +++ b/modules/storages/config/locales/crowdin/ko.yml @@ -115,7 +115,7 @@ ko: permission_not_set: '- %{path}에 대한 권한을 설정할 수 없습니다.' remote_folders: not_allowed: '%{username}에게는 %{group_folder} 폴더에 대한 액세스 권한이 없습니다. Nextcloud의 폴더 권한을 확인하세요.' - not_found: "%{group_folder} folder wasn't found. Please check your Nextcloud setup." + not_found: "%{group_folder} 폴더를 찾을 수 없습니다. Nextcloud 설정을 확인하세요." remove_user_from_group: conflict: '다음과 같은 이유로 %{user} 사용자를 %{group} 그룹에서 제거할 수 없습니다: %{reason}' failed_to_remove: '다음과 같은 이유로 %{user} 사용자를 %{group} 그룹에서 제거할 수 없습니다: %{reason}' diff --git a/modules/two_factor_authentication/config/locales/crowdin/ro.yml b/modules/two_factor_authentication/config/locales/crowdin/ro.yml index cbe0b0ab98b8..e103b606d4ff 100644 --- a/modules/two_factor_authentication/config/locales/crowdin/ro.yml +++ b/modules/two_factor_authentication/config/locales/crowdin/ro.yml @@ -58,7 +58,7 @@ ro: label_enforced: "Aplicați 2FA" label_remember: "Rețineți autentificarea 2FA" text_configuration: | - Notă: Aceste valori reprezintă configurația curentă la nivelul întregii aplicații. Nu puteți dezactiva setările impuse de configurație sau modifica strategiile active curente, deoarece acestea necesită o repornire a serverului. + Notă: Aceste valori reprezintă configurația curentă la nivelul întregii aplicații. Nu poți dezactiva setările impuse de configurație sau modifica strategiile active curente, deoarece acestea necesită o repornire a serverului. text_configuration_guide: Pentru mai multe informații, consultați ghidul de configurare. text_enforced: "Activează această setare pentru a forța toți utilizatorii să înregistreze un dispozitiv 2FA la următoarea autentificare. Poate fi dezactivată numai atunci când nu este impusă prin configurare." text_remember: | From 72032317908e9af286e5cd9fd6e33ed3aae5a5b5 Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Fri, 15 Nov 2024 03:17:04 +0000 Subject: [PATCH 08/23] update locales from crowdin [ci skip] --- config/locales/crowdin/de.yml | 6 +++--- modules/openid_connect/config/locales/crowdin/de.yml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/locales/crowdin/de.yml b/config/locales/crowdin/de.yml index 2ebedfaf51da..7f6bc565d25e 100644 --- a/config/locales/crowdin/de.yml +++ b/config/locales/crowdin/de.yml @@ -2815,9 +2815,9 @@ de: notice_locking_conflict: "Die Informationen wurde zwischenzeitlich von einem anderen Benutzer geändert." notice_locking_conflict_additional_information: "Die Änderung(en) wurde(n) durchgeführt von %{users}." notice_locking_conflict_reload_page: "Bitte laden Sie die Seite neu, prüfen Sie die Anpassungen und geben Sie Ihre Änderungen noch einmal ein." - notice_locking_conflict_warning: "This page has been updated by someone else. To not lose your edits, copy them locally and reload to view the updated version." - notice_locking_conflict_danger: "Could not save your changes because of conflicting modifications. To not lose your edits, copy them locally and reload to view the updated version." - notice_locking_conflict_action_button: "Discard changes and reload" + notice_locking_conflict_warning: "Diese Seite wurde von jemand anderem aktualisiert. Um Ihre Änderungen nicht zu verlieren, kopieren Sie sie lokal und laden Sie sie erneut, um die aktualisierte Version anzuzeigen." + notice_locking_conflict_danger: "Ihre Änderungen konnten wegen in Konflikt stehender Änderungen nicht gespeichert werden. Um Ihre Änderungen nicht zu verlieren, kopieren Sie sie lokal und laden Sie sie erneut, um die aktualisierte Version anzuzeigen." + notice_locking_conflict_action_button: "Änderungen verwerfen und neu laden" notice_member_added: '%{name} zum Projekt hinzugefügt.' notice_members_added: '%{number} Benutzer zum Projekt hinzugefügt.' notice_member_removed: "%{user} aus dem Projekt entfernt." diff --git a/modules/openid_connect/config/locales/crowdin/de.yml b/modules/openid_connect/config/locales/crowdin/de.yml index ab6de0c139bf..b6e1d5b2bfe9 100644 --- a/modules/openid_connect/config/locales/crowdin/de.yml +++ b/modules/openid_connect/config/locales/crowdin/de.yml @@ -59,8 +59,8 @@ de: metadata_url: Ich habe eine Discovery-Endpunkt-URL client_id: Dies ist die Client-ID, die Sie von Ihrem OpenID Connect-Anbieter erhalten haben client_secret: Dies ist das Client-Secret, die Sie von Ihrem OpenID Connect-Anbieter erhalten haben - limit_self_registration: If enabled, users can only register using this provider if configuration on the provider's end allows it. - display_name: The name of the provider. This will be displayed as the login button and in the list of providers. + limit_self_registration: Wenn diese Option aktiviert ist, können sich Benutzer nur dann über diesen Anbieter registrieren, wenn die Konfiguration aufseiten des Anbieters dies zulässt. + display_name: Der Name des Anbieters. Dieser wird als Anmeldeschaltfläche und in der Liste der Anbieter angezeigt. tenant: 'Bitte ersetzen Sie den vorgegebenen Mandanten durch Ihren eigenen, falls zutreffend. Siehe diese Dokumentation von Microsoft Entra.' post_logout_redirect_uri: Die URL, an die der OpenID Connect-Anbieter nach einer erfolgreichen Abmeldung weiterleiten soll. claims: > From b4169b8709d045ae34a0d879f126eae54fd63c27 Mon Sep 17 00:00:00 2001 From: Jonas Jabari Date: Fri, 15 Nov 2024 09:08:45 +0100 Subject: [PATCH 09/23] [#58738] Work package creation event not displayed if aggregation includes a comment https://community.openproject.org/work_packages/58738 From de1059e947a5544beb6c474dd0819507a88f4806 Mon Sep 17 00:00:00 2001 From: Jonas Jabari Date: Fri, 15 Nov 2024 09:15:14 +0100 Subject: [PATCH 10/23] added missing creation label for initial comments --- .../activities_tab/journals/item_component.html.erb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/components/work_packages/activities_tab/journals/item_component.html.erb b/app/components/work_packages/activities_tab/journals/item_component.html.erb index 46e88201e3c8..7ea180f1a7ae 100644 --- a/app/components/work_packages/activities_tab/journals/item_component.html.erb +++ b/app/components/work_packages/activities_tab/journals/item_component.html.erb @@ -30,6 +30,16 @@ classes: "work-packages-activities-tab-journals-item-component--user-name ellipsis hidden-for-mobile") do truncated_user_name(journal.user) end + if journal.initial? + header_start_container.with_column( + mr: 1, + classes: "work-packages-activities-tab-journals-item-component-details--journal-type hidden-for-mobile" + ) do + render(Primer::Beta::Text.new(font_size: :small, color: :subtle, mt: 1)) do + I18n.t("activities.work_packages.activity_tab.created_on") + end + end + end header_start_container.with_column(mr: 1, classes: "hidden-for-mobile") do render(Primer::Beta::Text.new(font_size: :small, color: :subtle, mt: 1)) { format_time(journal.updated_at) } end From f42fbc735a2985324acb0375f463355cf6bbf422 Mon Sep 17 00:00:00 2001 From: Markus Kahl Date: Fri, 15 Nov 2024 14:42:49 +0000 Subject: [PATCH 11/23] make sure limit_self_registration is included in saml provider hash --- .../auth_saml/app/contracts/saml/providers/base_contract.rb | 2 ++ modules/auth_saml/app/models/saml/provider/hash_builder.rb | 1 + modules/auth_saml/spec/factories/saml_provider_factory.rb | 2 ++ modules/auth_saml/spec/lib/open_project/auth_saml_spec.rb | 1 + modules/auth_saml/spec/requests/saml_provider_callback_spec.rb | 3 ++- 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/auth_saml/app/contracts/saml/providers/base_contract.rb b/modules/auth_saml/app/contracts/saml/providers/base_contract.rb index 3e2a24ac82fe..2375f66cfb1c 100644 --- a/modules/auth_saml/app/contracts/saml/providers/base_contract.rb +++ b/modules/auth_saml/app/contracts/saml/providers/base_contract.rb @@ -64,6 +64,8 @@ def self.model attribute :authn_requests_signed validate :valid_certificate_key_pair + attribute :limit_self_registration + %i[mapping_mail mapping_login mapping_firstname mapping_lastname].each do |attr| attribute attr validates_presence_of attr, if: -> { model.public_send(:"#{attr}_changed?") } diff --git a/modules/auth_saml/app/models/saml/provider/hash_builder.rb b/modules/auth_saml/app/models/saml/provider/hash_builder.rb index d6bfc89f6b5c..5cbf13df8d5a 100644 --- a/modules/auth_saml/app/models/saml/provider/hash_builder.rb +++ b/modules/auth_saml/app/models/saml/provider/hash_builder.rb @@ -72,6 +72,7 @@ def to_h # rubocop:disable Metrics/AbcSize name_identifier_format:, certificate:, private_key:, + limit_self_registration:, attribute_statements: formatted_attribute_statements, request_attributes: formatted_request_attributes, uid_attribute: mapping_uid.presence diff --git a/modules/auth_saml/spec/factories/saml_provider_factory.rb b/modules/auth_saml/spec/factories/saml_provider_factory.rb index a53c2c6857c6..1862fd4adca5 100644 --- a/modules/auth_saml/spec/factories/saml_provider_factory.rb +++ b/modules/auth_saml/spec/factories/saml_provider_factory.rb @@ -43,6 +43,8 @@ idp_sso_service_url { "https://example.com/sso" } idp_slo_service_url { "https://example.com/slo" } + limit_self_registration { true } + mapping_login { Saml::Defaults::MAIL_MAPPING } mapping_mail { Saml::Defaults::MAIL_MAPPING } mapping_firstname { Saml::Defaults::FIRSTNAME_MAPPING } diff --git a/modules/auth_saml/spec/lib/open_project/auth_saml_spec.rb b/modules/auth_saml/spec/lib/open_project/auth_saml_spec.rb index 263cd698e03d..baf4378b02ef 100644 --- a/modules/auth_saml/spec/lib/open_project/auth_saml_spec.rb +++ b/modules/auth_saml/spec/lib/open_project/auth_saml_spec.rb @@ -15,6 +15,7 @@ expect(subject[:assertion_consumer_service_url]).to eq "http://#{Setting.host_name}/auth/my-saml/callback" expect(subject[:idp_sso_service_url]).to eq "https://example.com/sso" expect(subject[:idp_slo_service_url]).to eq "https://example.com/slo" + expect(subject[:limit_self_registration]).to be true attributes = subject[:attribute_statements] expect(attributes[:email]).to eq Saml::Defaults::MAIL_MAPPING.split("\n") diff --git a/modules/auth_saml/spec/requests/saml_provider_callback_spec.rb b/modules/auth_saml/spec/requests/saml_provider_callback_spec.rb index 4069e63b8226..eabbb252d350 100644 --- a/modules/auth_saml/spec/requests/saml_provider_callback_spec.rb +++ b/modules/auth_saml/spec/requests/saml_provider_callback_spec.rb @@ -42,7 +42,8 @@ digest_method: "http://www.w3.org/2001/04/xmlenc#sha256", sp_entity_id: "https://foobar.org", idp_cert:, - idp_cert_fingerprint:) + idp_cert_fingerprint:, + limit_self_registration: false) end let(:idp_cert) { nil } From 1d8023fb62368b99f82b385169c3d02ec354e85e Mon Sep 17 00:00:00 2001 From: Markus Kahl Date: Fri, 15 Nov 2024 15:04:45 +0000 Subject: [PATCH 12/23] test that false is correct in output as well --- .../auth_saml/spec/lib/open_project/auth_saml_spec.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/auth_saml/spec/lib/open_project/auth_saml_spec.rb b/modules/auth_saml/spec/lib/open_project/auth_saml_spec.rb index baf4378b02ef..89b3bdaa3bcd 100644 --- a/modules/auth_saml/spec/lib/open_project/auth_saml_spec.rb +++ b/modules/auth_saml/spec/lib/open_project/auth_saml_spec.rb @@ -31,5 +31,15 @@ expect(security[:want_assertions_signed]).to be false expect(security[:want_assertions_encrypted]).to be false end + + context "with limit_self_registration: false" do + let!(:provider) do + create(:saml_provider, slug: "my-saml", limit_self_registration: false) + end + + it "includes the false value in the auth hash" do + expect(subject[:limit_self_registration]).to be false + end + end end end From 57d6a52e7193dbe138125e49254197c85e1f983f Mon Sep 17 00:00:00 2001 From: Eric Schubert Date: Fri, 15 Nov 2024 16:10:19 +0100 Subject: [PATCH 13/23] [#59344] fix copy folder query to fetch correct id - https://community.openproject.org/wp/59344 - remove trailing slashes before getting id from result (hacky) - need OP#57850 to make this more robust --- .../nextcloud/copy_template_folder_command.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/copy_template_folder_command.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/copy_template_folder_command.rb index c69ef2e6d210..7b673626cf10 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/copy_template_folder_command.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/copy_template_folder_command.rb @@ -137,10 +137,14 @@ def handle_response(response) # rubocop:enable Metrics/AbcSize def get_folder_id(auth_strategy, destination_path) + # file_path_to_id_map query returns keys without trailing slashes + # TODO: Harden this with https://community.openproject.org/wp/57850 + sanitized_path = destination_path.chomp("/") + Registry .resolve("nextcloud.queries.file_path_to_id_map") - .call(storage: @storage, auth_strategy:, folder: ParentFolder.new(destination_path), depth: 0) - .map { |result| @data.with(id: result[destination_path].id) } + .call(storage: @storage, auth_strategy:, folder: ParentFolder.new(sanitized_path), depth: 0) + .map { |result| @data.with(id: result[sanitized_path].id) } end def source = self.class From 7aa0bafd6abc2236086de602e88c1ab77a64918a Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Sat, 16 Nov 2024 03:15:15 +0000 Subject: [PATCH 14/23] update locales from crowdin [ci skip] --- config/locales/crowdin/js-zh-TW.yml | 4 +-- config/locales/crowdin/ru.seeders.yml | 26 ++++++++++--------- config/locales/crowdin/zh-TW.yml | 2 +- .../meeting/config/locales/crowdin/zh-TW.yml | 2 +- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/config/locales/crowdin/js-zh-TW.yml b/config/locales/crowdin/js-zh-TW.yml index 07ca88c02664..2c7b05c2ec32 100644 --- a/config/locales/crowdin/js-zh-TW.yml +++ b/config/locales/crowdin/js-zh-TW.yml @@ -387,7 +387,7 @@ zh-TW: label_all_work_packages: "所有工作項目" label_and: "和" label_ascending: "昇冪" - label_author: "作者: %{user}" + label_author: "工作項目發起者: %{user}" label_avatar: "大頭貼" label_between: "介於" label_board: "面板" @@ -967,7 +967,7 @@ zh-TW: other: "其他" properties: assignee: "執行者" - author: "作者" + author: "工作項目發起者" createdAt: "建立於" description: "敘述" date: "日期" diff --git a/config/locales/crowdin/ru.seeders.yml b/config/locales/crowdin/ru.seeders.yml index 51ed2546b41a..b1b3dcb88223 100644 --- a/config/locales/crowdin/ru.seeders.yml +++ b/config/locales/crowdin/ru.seeders.yml @@ -299,18 +299,20 @@ ru: options: name: Приступая к работе text: | - Мы рады, что вы присоединились! Мы рекомендуем попробовать несколько вещей, чтобы начать работу в OpenProject. - - _Попробуйте следующие шаги:_[Backlogs]. *Пригласите новых участников к вашему проекту*: → Перейдите к [Members]({{opSetting:base_url}}/projects/your-scrum-project/members) в навигации по проекту. - 2. *Просмотр бэклога продукта и бэклогов Sprint *: → Перейти к [Backlogs]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) в навигации по проекту. - *Просмотр вашей панели задач*: → Перейдите на [Backlogs] ({{opSetting:base_url}}/projects/your-scrum-project/backlogs) → Нажмите на правую стрелку на Sprint → Выберите [Целевую панель](##sprint:scrum_project__version__sprint_1). - 4. *Создать новый пакет работ*: → Перейдите к [Пакеты работ → Create]({{opSetting:base_url}}/projects/your-scrum-project/work_packages/new). - 5. *Создать и обновить план проекта*: → Перейдите к [плану проекта](##query:scrum_project__query__project_plan) в навигации по проекту. - 6. *Создайте вики спринта*: → Перейдите в [Backlogs]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) и откройте вики спринта из правого выпадающего меню в спринте. Вы можете редактировать [шаблон вики]({{opSetting:base_url}}/projects/your-scrum-project/wiki/) на основе ваших потребностей. - 7. *Активировать дальнейшие модули*: → Перейдите к [настройкам проекта → Модулей]({{opSetting:base_url}}/projects/your-scrum-project/settings/modules). - - Здесь вы найдете наши [руководства пользователя](https://www. penproject.org/docs/user-guide/). - Пожалуйста, сообщите нам, если у вас есть какие-либо вопросы или нужна поддержка. Свяжитесь с нами: [support[at]openproject.com](mailto:support@openproject.com). + Мы рады, что Вы присоединились! Мы предлагаем попробовать несколько вещей, чтобы начать работу с OpenProject. + + _Попробуйте выполнить следующие шаги:_ + + 1. *Пригласите новых участников в свой проект*: → Перейдите к [Участники]({{opSetting:base_url}}/projects/your-scrum-project/members) в меню проекта. + 2. *Просмотрите бэклог Вашего продукта и бэклог спринта*: → Перейдите к [Бэклог]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) в меню проекта. + 3. *Просмотрите Вашу доску задач*: → Перейдите к [Бэклоги]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) → Нажмите стрелку вправо на Этапы → Выберите [Панель задач](##sprint:scrum_project__version__sprint_1). + 4. *Создайте новый рабочий пакет*: → Перейдите в раздел [Рабочие пакеты → Создать]({{opSetting:base_url}}/projects/your-scrum-project/work_packages/new). + 5. *Создайте и обновите план проекта*: → Перейдите к разделу [План проекта](##query:scrum_project__query__project_plan) в меню проекта. + 6. *Создайте вики спринта*: → Перейдите в раздел [Бэклоги]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) и откройте вики спринта из правого выпадающего меню в спринте. Вы можете отредактировать шаблон [wiki]({{opSetting:base_url}}/projects/your-scrum-project/wiki/) в соответствии со своими потребностями. + 7. *Активируйте дополнительные модули*: → Перейдите в раздел [Настройки проекта → Модули]({{opSetting:base_url}}/projects/your-scrum-project/settings/modules). + + Здесь Вы найдете наши [руководства пользователя](https://www.openproject.org/docs/user-guide/). + Пожалуйста, сообщите нам, если у Вас возникнут вопросы или Вам понадобится поддержка. Свяжитесь с нами: [support[at]openproject.com](mailto:support@openproject.com). item_5: options: name: Пакеты работ diff --git a/config/locales/crowdin/zh-TW.yml b/config/locales/crowdin/zh-TW.yml index bf7b2d41e20f..4c4d5fb90d5b 100644 --- a/config/locales/crowdin/zh-TW.yml +++ b/config/locales/crowdin/zh-TW.yml @@ -1273,7 +1273,7 @@ zh-TW: assigned_to: "執行者" assignee: "執行者" attachments: "附加檔" - author: "作者" + author: "工作項目發起者" base: "一般錯誤:" blocks_ids: "已被限制的工作項目 IDs" category: "類別" diff --git a/modules/meeting/config/locales/crowdin/zh-TW.yml b/modules/meeting/config/locales/crowdin/zh-TW.yml index 6b20d71eb236..d2eabd4a0c1c 100644 --- a/modules/meeting/config/locales/crowdin/zh-TW.yml +++ b/modules/meeting/config/locales/crowdin/zh-TW.yml @@ -43,7 +43,7 @@ zh-TW: start_time_hour: "開始時間" meeting_agenda_item: title: "標題" - author: "作者" + author: "會議發起者" duration_in_minutes: "分鐘" description: "備註" presenter: "簡報者" From c7a2851ebf04517e560659ad27511437aea0776d Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Mon, 18 Nov 2024 03:19:38 +0000 Subject: [PATCH 15/23] update locales from crowdin [ci skip] --- config/locales/crowdin/js-ro.yml | 18 ++++----- config/locales/crowdin/pt-BR.seeders.yml | 4 +- config/locales/crowdin/ro.yml | 38 +++++++++---------- config/locales/crowdin/sv.yml | 2 +- .../calendar/config/locales/crowdin/js-ro.yml | 2 +- .../calendar/config/locales/crowdin/ro.yml | 2 +- modules/meeting/config/locales/crowdin/ro.yml | 2 +- .../config/locales/crowdin/js-ro.yml | 8 ++-- .../config/locales/crowdin/ro.yml | 6 +-- .../config/locales/crowdin/ro.yml | 2 +- 10 files changed, 42 insertions(+), 42 deletions(-) diff --git a/config/locales/crowdin/js-ro.yml b/config/locales/crowdin/js-ro.yml index 3046243e3ffb..ea8bf5f859a3 100644 --- a/config/locales/crowdin/js-ro.yml +++ b/config/locales/crowdin/js-ro.yml @@ -97,7 +97,7 @@ ro: button_show_table: "Afișați vizualizarea tabelului" button_show_gantt: "Arată vizualizarea Gantt" button_show_fullscreen: "Arată vizualizarea pe tot ecranul" - button_more_actions: "Mai multe actiuni" + button_more_actions: "Mai multe acțiuni" button_quote: "Citat" button_save: "Salvează" button_settings: "Setări" @@ -239,7 +239,7 @@ ro: upsale: become_hero: "Deveniți un erou!" enterprise_info_html: "%{feature_title} is an Enterprise add-on." - upgrade_info: "Vă rugăm să treceți la un plan plătit pentru a-l activa și a începe să îl utilizați în echipa dumneavoastră." + upgrade_info: "Te rog să treci la un plan plătit pentru a-l activa și a începe să îl utilizezi în echipa ta." benefits: description: "Care sunt avantajele ediției Enterprise on-premise?" high_security: "Caracteristici de securitate" @@ -252,7 +252,7 @@ ro: professional_support_text: "Beneficiați de asistență fiabilă, de înaltă calitate, din partea unor ingineri de asistență seniori cu cunoștințe de specialitate în ceea ce privește utilizarea OpenProject în medii critice pentru afaceri." button_start_trial: "Începeți o încercare gratuită" button_upgrade: "Actualizează acum" - button_contact_us: "Contactați-ne pentru o demonstrație" + button_contact_us: "Contactează-ne pentru o demonstrație" button_book_now: "Rezervă acum" confidence: > Oferim încrederea unui software de gestionare a proiectelor de clasă enterprise testat și susținut - cu Open Source și o minte deschisă. @@ -444,7 +444,7 @@ ro: label_in_more_than: "în mai mult de" label_incoming_emails: "E-mailuri primite" label_information_plural: "Informații" - label_invalid: "Nevalid" + label_invalid: "Invalid" label_import: "Importă" label_latest_activity: "Activitate recentă" label_last_updated_on: "Ultima actualizare la data de" @@ -655,14 +655,14 @@ ro: settings: change_notification_settings: 'Poți modifica setările de notificare pentru a te asigura că nu pierzi niciodată o actualizare importantă.' title: "Setări notificare" - notify_me: "Anunta-ma" + notify_me: "Notifică-mă" reminders: no_notification: Nicio notificare timeframes: normal: PT0S: în aceeași zi - P1D: Cu 1 zi înainte - P3D: Cu 3 zile înainte + P1D: cu 1 zi înainte + P3D: cu 3 zile înainte P7D: ' cu o săptămână înainte ' overdue: P1D: zilnic @@ -671,7 +671,7 @@ ro: reasons: mentioned: title: "Menţionat" - description: "Primește o notificare de fiecare dată când cineva mă menționează oriunde" + description: "Primesc o notificare de fiecare dată când cineva mă menționează oriunde" assignee: "Executant" responsible: "Responsabil" shared: "Partajat" @@ -679,7 +679,7 @@ ro: work_package_commented: "Toate comentariile noi" work_package_created: "Pachete de lucru noi" work_package_processed: "Toate modificările de stare" - work_package_prioritized: "Toate modificările prioritare" + work_package_prioritized: "Toate modificările de prioritate" work_package_scheduled: "Toate modificările dății" global: immediately: diff --git a/config/locales/crowdin/pt-BR.seeders.yml b/config/locales/crowdin/pt-BR.seeders.yml index 027152e8b1bd..517fde5c705f 100644 --- a/config/locales/crowdin/pt-BR.seeders.yml +++ b/config/locales/crowdin/pt-BR.seeders.yml @@ -210,9 +210,9 @@ pt-BR: Neste módulo, você pode compartilhar as atualizações do projeto com os membros da sua equipe. versions: item_0: - name: Registro de erros e pendências + name: Backlog de Bugs item_1: - name: Erros e Pendências do Produto + name: Backlog de produtos item_2: name: Sprint 1 wiki: diff --git a/config/locales/crowdin/ro.yml b/config/locales/crowdin/ro.yml index be3bc92af433..a353e62f37b9 100644 --- a/config/locales/crowdin/ro.yml +++ b/config/locales/crowdin/ro.yml @@ -88,7 +88,7 @@ ro: get_quote: "Obțineți o ofertă" buttons: upgrade: "Actualizează acum" - contact: "Contactați-ne pentru o demonstrație" + contact: "Contactați-ne pentru un demo" enterprise_info_html: "is an Enterprise add-on." upgrade_info: "Vă rugăm să treceți la un plan plătit pentru a-l activa și a începe să îl utilizați în echipa dumneavoastră." jemalloc_allocator: Jemalloc memory allocator @@ -498,7 +498,7 @@ ro: irreversible: "Această acțiune este ireversibilă" confirmation: "Introduceți numele de utilizator de tip placeholder %{name} pentru a confirma ștergerea." upsale: - title: Utilizatori de tip Placeholder + title: Utilizatori Placeholder description: > Utilizatorii de tip substituție sunt o modalitate de a atribui pachete de lucru utilizatorilor care nu fac parte din proiectul tău. Acesta poate fi utilă într-o serie de scenarii; de exemplu, dacă trebuie să urmărești sarcinile pentru o resursă care nu este încă numită sau disponibilă, sau dacă nu vrei să acorzi acestei persoane acces la OpenProject dar totuși vrei să urmărești sarcinile care le-au fost atribuite. prioritiies: @@ -587,11 +587,11 @@ ro: few: "%{count} descendenți ai pachetului de lucru" other: "%{count} pachete de lucru descendente" bulk: - copy_failed: "Pachetele de lucru nu au putut fi copiate." - move_failed: "Pachetele de lucru nu au putut fi mutate." + copy_failed: "Pachetele de lucru nu pot fi copiate." + move_failed: "Pachetele de lucru nu pot fi mutate." could_not_be_saved: "Următoarele pachete de lucru nu au putut fi salvate:" - none_could_be_saved: "Niciunul dintre pachetele de lucru %{total} nu a putut fi actualizat." - x_out_of_y_could_be_saved: "%{failing} din %{total} pachete de lucru nu au putut fi actualizate în timp ce %{success} ar putea fi actualizat." + none_could_be_saved: "Niciunul dintre pachetele de lucru %{total} nu poate fi actualizat." + x_out_of_y_could_be_saved: "%{failing} din %{total} pachete de lucru nu pot fi actualizate în timp ce %{success} poate fi actualizat." selected_because_descendants: "While %{selected} work packages were selected, in total %{total} work packages are affected which includes descendants." descendant: "descendent de selectat" move: @@ -626,7 +626,7 @@ ro: account: delete: "Ştergere cont" delete_confirmation: "Sunteţi sigur că doriţi să ştergeţi contul?" - deletion_pending: "Contul a fost blocat și a fost programat pentru ștergere. Rețineți că acest proces are loc în fundal. Poate dura câteva momente până când utilizatorul este complet șters." + deletion_pending: "Contul a fost blocat și a fost programat pentru ștergere. Reține că acest proces are loc în fundal. Poate dura câteva momente până când utilizatorul este complet șters." deletion_info: data_consequences: other: 'Vor fi șterse cât mai multe din datele create de utilizator (e.g. email, preferințe, pachete de lucru, contribuții wiki). De reținut, totuși, că date precum pachete de lucru și contribuții wiki nu pot fi șterse fără a afecta activitatea altor utilizatori. Prin urmare, astfel de date sunt realocate la un cont numit "Utilizator șters". Deoarece datele fiecărui cont șters sunt realocate acestui cont, nu va mai fi posibil să se facă distincția între datele create de utilizator și datele altui cont șters.' @@ -1008,7 +1008,7 @@ ro: foreign_wps_reference_version: "Pachetele de lucru din proiectele care nu sunt descendente fac trimitere la versiuni ale proiectului sau la descendenți ai acestuia." attributes: base: - archive_permission_missing_on_subprojects: "Nu aveţi permisiunile necesare pentru a arhiva toate sub-proiectele. Vă rugăm să contactaţi un administrator." + archive_permission_missing_on_subprojects: "Nu ai permisiunile necesare pentru a arhiva toate sub-proiectele. Te rog să contactezi un administrator." types: in_use_by_work_packages: "încă în uz în pachetele de lucru: %{types}" enabled_modules: @@ -2532,7 +2532,7 @@ ro: label_system_storage: "Informații privind stocarea" label_table_of_contents: "Cuprins" label_tag: "Etichetă" - label_team_planner: "Team Planner" + label_team_planner: "Planificare echipă" label_text: "Text lung" label_this_month: "luna curentă" label_this_week: "săptămâna curentă" @@ -2772,10 +2772,10 @@ ro: mail_body_register_header_title: "E-mail de invitație pentru membrii proiectului" mail_body_register_user: "Dragă %{name}," mail_body_register_links_html: | - Vă rugăm să nu ezitați să navigați pe canalul nostru de youtube (%{youtube_link}) unde oferim un webinar (%{webinar_link}) + Nu ezita să navighezi pe canalul nostru de youtube (%{youtube_link}) unde oferim un webinar (%{webinar_link}) și videoclipuri cu “Începe” (%{get_started_link}) pentru a face primii pași în OpenProject cât mai ușor posibil.
- Dacă aveți orice întrebări suplimentare, consultați documentația noastră (%{documentation_link}) sau contactați administratorul. + Dacă ai orice întrebări suplimentare, consultă documentația noastră (%{documentation_link}) sau contactează administratorul. mail_body_register_closing: "Echipa dumneavoastră OpenProject" mail_body_register_ending: "Rămâneți conectați! Vă salutăm cu drag," mail_body_reminder: "%{count} pachete de lucru care vă sunt atribuite au scadență în următoarele %{days} zile:" @@ -3335,7 +3335,7 @@ ro: If this option is active, login requests will redirect to the configured omniauth provider. The login dropdown and sign-in page will be disabled.
Note: Unless you also disable password logins, with this option enabled, users can still log in internally by visiting the %{internal_path} login page. attachments: whitelist_text_html: > - Definește o listă validă de extensii de fișiere și/sau tipuri mime pentru fișierele încărcate.
Introduceți extensii de fișiere (de ex. %{ext_example}) sau tipuri mime (e. ., %{mime_example}).
Lăsați gol pentru a permite oricărui tip de fișier să fie încărcat. Valori multiple permise (o linie pentru fiecare valoare). + Definește o listă validă de extensii de fișiere și/sau tipuri mime pentru fișierele încărcate.
Introdu extensii de fișiere (de ex. %{ext_example}) sau tipuri mime (e. ., %{mime_example}).
Lasă gol pentru a permite oricărui tip de fișier să fie încărcat. Valori multiple permise (o linie pentru fiecare valoare). show_work_package_attachments: > Deactivating this option will hide the attachments list on the work packages files tab for new projects. The files attached in the description of a work package will still be uploaded in the internal attachments storage. antivirus: @@ -3429,7 +3429,7 @@ ro: text_access_token_hint: "Tichetele de acces permit aplicaţiilor externe accesul la resurse din OpenProject." text_analyze: "Continuare analiză: %{subject}" text_are_you_sure: "Sunteți sigur?" - text_are_you_sure_continue: "Sigur doriţi să continuați?" + text_are_you_sure_continue: "Sigur dorești să continui?" text_are_you_sure_with_children: "Doriți ștergerea pachetului de lucru și a tuturor pachetelor fii?" text_are_you_sure_with_project_custom_fields: "Deleting this attribute will also delete its values in all projects. Are you sure you want to do this?" text_assign_to_project: "Alocare la proiect" @@ -3791,7 +3791,7 @@ ro: work_package: "Pachetul de lucru pe care îl căutați nu poate fi găsit sau a fost șters." expected: date: "AAAA-MM-ZZ (doar formate ISO 8601)" - datetime: "AAAA-LL-ZZZZH:mm:ss[.lll][+h:mm] (orice date compatibile ISO 8601 datetime)" + datetime: "AAAA-LL-ZZZZH:mm:ss[.lll][+h:mm] (orice dăți compatibile ISO 8601 dată-oră)" duration: "Durată ISO 8601" invalid_content_type: "CONTENT-TYPE așteptat '%{content_type}', dar am primit '%{actual}'." invalid_format: "Format invalid pentru proprietatea '%{property}': format așteptat '%{expected_format}', dar am primit '%{actual}'." @@ -3836,7 +3836,7 @@ ro: #Common error messages invalid_request: unknown: "În cerere lipsește un parametru obligatoriu, include o valoare de parametru neacceptată sau este deformată în alt mod." - missing_param: "Lipseste parametrul necesar: %{value}." + missing_param: "Lipsește parametrul obligatoriu: %{value}." request_not_authorized: "Solicitarea trebuie să fie autorizată. Parametrul necesar pentru solicitarea de autorizare lipsește sau este invalid." invalid_redirect_uri: "URL-ul de redirecționare solicitat este deformat sau nu se potrivește cu URL-ul de redirecționare al clientului." unauthorized_client: "Clientul nu este autorizat să efectueze această cerere folosind această metodă." @@ -3930,12 +3930,12 @@ ro: urn_connection_status: connected: "Conectat" error: "Eroare" - failed_authorization: "Autorizarea nu a reuşit" + failed_authorization: "Autorizare nereușită" labels: label_oauth_integration: "Integrare OAuth2" - label_redirect_uri: "Redirecționați URI" - label_request_token: "Token de cerere" - label_refresh_token: "Reîmprospătare token" + label_redirect_uri: "URI redirecționare" + label_request_token: "Token cerere" + label_refresh_token: "Token reîmprospătare" errors: oauth_authorization_code_grant_had_errors: "OAuth2 Authorization grant unsuccessful" oauth_reported: "Furnizor OAuth2 raportat" diff --git a/config/locales/crowdin/sv.yml b/config/locales/crowdin/sv.yml index d3c3c2aa1985..dc6c99dcbdee 100644 --- a/config/locales/crowdin/sv.yml +++ b/config/locales/crowdin/sv.yml @@ -266,7 +266,7 @@ sv: filled?: "must be filled" not_unique: "must be unique within the same hierarchy level" rules: - label: "Label" + label: "Etikett" global_search: placeholder: "Search in %{app_title}" overwritten_tabs: diff --git a/modules/calendar/config/locales/crowdin/js-ro.yml b/modules/calendar/config/locales/crowdin/js-ro.yml index ced4dcf1b8f6..c970dc3245a2 100644 --- a/modules/calendar/config/locales/crowdin/js-ro.yml +++ b/modules/calendar/config/locales/crowdin/js-ro.yml @@ -2,7 +2,7 @@ ro: js: calendar: - create_new: 'Creați un calendar nou' + create_new: 'Creează un calendar nou' title: 'Calendar' too_many: 'Există %{count} pachete de lucru în total, dar numai %{max} poate fi afișat.' unsaved_title: 'Calendar fără nume' diff --git a/modules/calendar/config/locales/crowdin/ro.yml b/modules/calendar/config/locales/crowdin/ro.yml index e17a56839dc5..bb0848980691 100644 --- a/modules/calendar/config/locales/crowdin/ro.yml +++ b/modules/calendar/config/locales/crowdin/ro.yml @@ -7,6 +7,6 @@ ro: label_calendar_plural: "Calendare" label_new_calendar: "New calendar" permission_view_calendar: "Vezi calendarele" - permission_manage_calendars: "Gestionare calendare" + permission_manage_calendars: "Gestionează calendare" permission_share_calendars: "Subscribe to iCalendars" project_module_calendar_view: "Calendare" diff --git a/modules/meeting/config/locales/crowdin/ro.yml b/modules/meeting/config/locales/crowdin/ro.yml index afe45f003ad8..d696519184c1 100644 --- a/modules/meeting/config/locales/crowdin/ro.yml +++ b/modules/meeting/config/locales/crowdin/ro.yml @@ -62,7 +62,7 @@ ro: meeting_section: "Section" activity: filter: - meeting: "Reuniuni" + meeting: "Întâlniri" item: meeting_agenda_item: duration: diff --git a/modules/team_planner/config/locales/crowdin/js-ro.yml b/modules/team_planner/config/locales/crowdin/js-ro.yml index a8960cd99bc8..2a4b159aaecf 100644 --- a/modules/team_planner/config/locales/crowdin/js-ro.yml +++ b/modules/team_planner/config/locales/crowdin/js-ro.yml @@ -5,10 +5,10 @@ ro: add_existing: 'Adaugă existent' add_existing_title: 'Adăugarea pachetelor de lucru existente' create_label: 'Planificator echipă' - create_title: 'Creați un nou planificator de echipă' + create_title: 'Creează planificare echipă nouă' unsaved_title: 'Planificator de echipă nenumit' no_data: 'Adăugați persoane desemnate pentru a vă configura planificatorul echipei.' - add_assignee: 'Assignee' + add_assignee: 'Executant' remove_assignee: 'Înlătură responsabil' two_weeks: '2-săptămână' one_week: '1-săptămână' @@ -18,9 +18,9 @@ ro: today: 'Azi' drag_here_to_remove: 'Trageți aici pentru a elimina responsabilul și a începe și a termina datele.' cannot_drag_here: 'Nu se poate elimina pachetul de lucru din cauza permisiunilor sau restricțiilor de editare.' - cannot_drag_to_non_working_day: 'Acest pachet de lucru nu poate începe/încheia o zi nelucrătoare.' + cannot_drag_to_non_working_day: 'Acest pachet de lucru nu poate să înceapă/se încheie într-o zi nelucrătoare.' quick_add: - empty_state: 'Utilizați câmpul de căutare pentru a găsi pachete de lucru și trageți-le la planificator pentru a-l atribui cuiva și defini datele de început și de sfârșit.' + empty_state: 'Utilizează câmpul de căutare pentru a găsi pachete de lucru și trage-le în planificare pentru a-l atribui cuiva și defini datele de început și de sfârșit.' search_placeholder: 'Caută...' modify: errors: diff --git a/modules/team_planner/config/locales/crowdin/ro.yml b/modules/team_planner/config/locales/crowdin/ro.yml index 7bd738200e06..1b3c3660aa0e 100644 --- a/modules/team_planner/config/locales/crowdin/ro.yml +++ b/modules/team_planner/config/locales/crowdin/ro.yml @@ -1,16 +1,16 @@ #English strings go here ro: plugin_openproject_team_planner: - name: "OpenProject Team Planner" + name: "Planificare echipă OpenProject" description: "Provides team planner views." permission_view_team_planner: "Vezi planificatorul echipei" permission_manage_team_planner: "Gestionează planificatorul de echipe" - project_module_team_planner_view: "Planificatori echipă" + project_module_team_planner_view: "Planificare echipă" team_planner: label_team_planner: "Planificator echipă" label_new_team_planner: "Planificator echipă nou" label_create_new_team_planner: "Creează planificator echipă nou" - label_team_planner_plural: "Planificatori echipe" + label_team_planner_plural: "Planificare echipă" label_assignees: "Responsabili" upsale: title: "Planificator echipă" diff --git a/modules/two_factor_authentication/config/locales/crowdin/ro.yml b/modules/two_factor_authentication/config/locales/crowdin/ro.yml index e103b606d4ff..e6ca7a61979a 100644 --- a/modules/two_factor_authentication/config/locales/crowdin/ro.yml +++ b/modules/two_factor_authentication/config/locales/crowdin/ro.yml @@ -79,7 +79,7 @@ ro: text_2fa_disabled: "The user did not set up a 2FA device through their 'My account page'" only_sms_allowed: "Only SMS delivery can be set up for other users." upsale: - title: "Autentificare cu doi factori" + title: "Autentificare doi factori" description: "Consolidarea securității instanței OpenProject prin oferirea (sau impunerea) autentificării cu doi factori pentru toți membrii proiectului." backup_codes: none_found: Nu există coduri de rezervă pentru acest cont. From e498f67203ce58fdcbf6958276c25c5bb37d50ee Mon Sep 17 00:00:00 2001 From: jjabari-op <122434454+jjabari-op@users.noreply.github.com> Date: Mon, 18 Nov 2024 09:21:21 +0100 Subject: [PATCH 16/23] Bug/59281 split screen activity tab does not scroll to the right position from list view (#17210) https://community.openproject.org/work_packages/59281 --- .../work-packages/activities-tab/index.controller.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts b/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts index cf2cc74fa9b4..c3a7cd3a307b 100644 --- a/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts @@ -398,7 +398,7 @@ export default class IndexController extends Controller { } private getScrollableContainer():HTMLElement | null { - if (this.isWithinNotificationCenter()) { + if (this.isWithinNotificationCenter() || this.isWithinSplitScreen()) { // valid for both mobile and desktop return document.querySelector('.work-package-details-tab') as HTMLElement; } @@ -419,6 +419,10 @@ export default class IndexController extends Controller { return window.location.pathname.includes(this.notificationCenterPathNameValue); } + private isWithinSplitScreen():boolean { + return window.location.pathname.includes('work_packages/details'); + } + private addEventListenersToCkEditorInstance() { this.onSubmitBound = () => { void this.onSubmit(); }; this.adjustMarginBound = () => { void this.adjustJournalContainerMargin(); }; From 79fe6f772a734484ce958128e1a37c26fd1e881c Mon Sep 17 00:00:00 2001 From: jjabari-op <122434454+jjabari-op@users.noreply.github.com> Date: Mon, 18 Nov 2024 09:30:10 +0100 Subject: [PATCH 17/23] Bug/59279 the comment box remains open and does not blur on submitting comment (#17209) https://community.openproject.org/work_packages/59279 --- .../activities-tab/index.controller.ts | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts b/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts index c3a7cd3a307b..8f8a7d36015a 100644 --- a/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts @@ -647,8 +647,8 @@ export default class IndexController extends Controller { if (!this.journalsContainerTarget) return; this.clearEditor(); - this.handleEditorVisibility(); - this.adjustJournalsContainer(); + this.hideEditor(); + this.resetJournalsContainerMargins(); setTimeout(() => { if (this.isMobile() && !this.isWithinNotificationCenter()) { @@ -667,19 +667,11 @@ export default class IndexController extends Controller { this.saveInProgress = false; } - private handleEditorVisibility():void { - if (this.isMobile()) { - this.hideEditorIfEmpty(); - } else { - this.focusEditor(); - } - } - - private adjustJournalsContainer():void { + private resetJournalsContainerMargins():void { if (!this.journalsContainerTarget) return; this.journalsContainerTarget.style.marginBottom = ''; - this.journalsContainerTarget.classList.add('work-packages-activities-tab-index-component--journals-container_with-input-compensation'); + this.journalsContainerTarget.classList.add('work-packages-activities-tab-index-component--journals-container_with-initial-input-compensation'); } private setLastServerTimestampViaHeaders(headers:Headers) { From 3d0401e8b22c484734cad96a57fe9738df5e3f0c Mon Sep 17 00:00:00 2001 From: jjabari-op <122434454+jjabari-op@users.noreply.github.com> Date: Mon, 18 Nov 2024 09:50:02 +0100 Subject: [PATCH 18/23] Bug/59065 error toast giving a 500 error without relevant details (#17207) https://community.openproject.org/work_packages/59065 --- .../activities_tab_controller.rb | 71 +++++------ .../app/core/turbo/turbo-requests.service.ts | 15 ++- .../activities-tab/index.controller.ts | 2 +- .../work_package/activities_spec.rb | 110 ++++++++++++++++++ .../components/work_packages/activities.rb | 10 +- 5 files changed, 165 insertions(+), 43 deletions(-) diff --git a/app/controllers/work_packages/activities_tab_controller.rb b/app/controllers/work_packages/activities_tab_controller.rb index cfe19ecc31c8..93ac7ba6cde9 100644 --- a/app/controllers/work_packages/activities_tab_controller.rb +++ b/app/controllers/work_packages/activities_tab_controller.rb @@ -106,28 +106,33 @@ def cancel_edit end def create - call = create_journal_service_call + begin + call = create_journal_service_call - if call.success? && call.result - set_last_server_timestamp_to_headers - handle_successful_create_call(call) - else - handle_failed_create_call(call) # errors should be rendered in the form - @turbo_status = :bad_request + if call.success? && call.result + set_last_server_timestamp_to_headers + handle_successful_create_call(call) + else + handle_failed_create_or_update_call(call) + end + rescue StandardError => e + handle_internal_server_error(e) end respond_with_turbo_streams end def update - call = Journals::UpdateService.new(model: @journal, user: User.current).call( - notes: journal_params[:notes] - ) + begin + call = update_journal_service_call - if call.success? && call.result - update_item_show_component(journal: call.result, grouped_emoji_reactions: grouped_emoji_reactions_for_journal) - else - handle_failed_update_call(call) + if call.success? && call.result + update_item_show_component(journal: call.result, grouped_emoji_reactions: grouped_emoji_reactions_for_journal) + else + handle_failed_create_or_update_call(call) + end + rescue StandardError => e + handle_internal_server_error(e) end respond_with_turbo_streams @@ -182,19 +187,11 @@ def respond_with_error(error_message) # turbo_stream requests (tab is already rendered and an error occured in subsequent requests) are handled below format.turbo_stream do @turbo_status = :not_found - render_error_banner_via_turbo_stream(error_message) + render_error_flash_message_via_turbo_stream(message: error_message) end end end - def render_error_banner_via_turbo_stream(error_message) - update_via_turbo_stream( - component: WorkPackages::ActivitiesTab::ErrorStreamComponent.new( - error_message: - ) - ) - end - def find_work_package @work_package = WorkPackage.find(params[:work_package_id]) rescue ActiveRecord::RecordNotFound @@ -259,22 +256,22 @@ def perform_update_streams_from_last_update_timestamp end end - def handle_failed_create_call(call) - update_via_turbo_stream( - component: WorkPackages::ActivitiesTab::Journals::NewComponent.new( - work_package: @work_package, - journal: call.result, - form_hidden_initially: false - ) - ) - end - - def handle_failed_update_call(call) + def handle_failed_create_or_update_call(call) @turbo_status = if call.errors&.first&.type == :error_unauthorized :forbidden else :bad_request end + render_error_flash_message_via_turbo_stream( + message: call.errors&.full_messages&.join(", ") + ) + end + + def handle_internal_server_error(error) + @turbo_status = :internal_server_error + render_error_flash_message_via_turbo_stream( + message: error.message + ) end def replace_whole_tab @@ -306,6 +303,12 @@ def create_journal_service_call ### end + def update_journal_service_call + Journals::UpdateService.new(model: @journal, user: User.current).call( + notes: journal_params[:notes] + ) + end + def generate_time_based_update_streams(last_update_timestamp) journals = @work_package .journals diff --git a/frontend/src/app/core/turbo/turbo-requests.service.ts b/frontend/src/app/core/turbo/turbo-requests.service.ts index da2ecacc0747..fdef90241755 100644 --- a/frontend/src/app/core/turbo/turbo-requests.service.ts +++ b/frontend/src/app/core/turbo/turbo-requests.service.ts @@ -13,19 +13,26 @@ export class TurboRequestsService { public request(url:string, init:RequestInit = {}, suppressErrorToast = false):Promise<{ html:string, headers:Headers }> { return fetch(url, init) .then((response) => { - if (!response.ok) { - throw new Error(`HTTP ${response.status}: ${response.statusText}`); - } return response.text().then((html) => ({ html, headers: response.headers, + response, })); }) .then((result) => { + // the result may contain a primer error banner if any server side error appeared + // thus we need to render the html even for non-ok responses renderStreamMessage(result.html); - return result; + // after rendering the html, check if the response and throw an error if it's not ok + if (!result.response.ok) { + throw new Error(result.response.statusText); + } else { + // enable further processing of the html and headers in the calling function + return { html: result.html, headers: result.headers }; + } }) .catch((error) => { + // this should only catch errors happening in the client side parsing in the above .then() calls if (!suppressErrorToast) { this.toast.addError(error as string); } else { diff --git a/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts b/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts index 8f8a7d36015a..ef02a67e404a 100644 --- a/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/work-packages/activities-tab/index.controller.ts @@ -637,7 +637,7 @@ export default class IndexController extends Controller { headers: { 'X-CSRF-Token': (document.querySelector('meta[name="csrf-token"]') as HTMLMetaElement).content, }, - }); + }, true); } private handleSuccessfulSubmission(html:string, headers:Headers) { diff --git a/spec/features/activities/work_package/activities_spec.rb b/spec/features/activities/work_package/activities_spec.rb index 5428863f8fde..9bf18426720a 100644 --- a/spec/features/activities/work_package/activities_spec.rb +++ b/spec/features/activities/work_package/activities_spec.rb @@ -27,8 +27,11 @@ #++ require "spec_helper" +require "support/flash/expectations" RSpec.describe "Work package activity", :js, :with_cuprite, with_flag: { primerized_work_package_activities: true } do + include Flash::Expectations + let(:project) { create(:project) } let(:admin) { create(:admin) } let(:member_role) do @@ -1244,4 +1247,111 @@ end end end + + describe "error handling" do + let(:work_package) { create(:work_package, project:, author: admin) } + + current_user { admin } + + before do + wp_page.visit! + wp_page.wait_for_activity_tab + end + + context "when adding a comment" do + context "when the creation call raises an unknown server error" do + before do + allow_any_instance_of(WorkPackages::ActivitiesTabController) # rubocop:disable RSpec/AnyInstance + .to receive(:create_journal_service_call) + .and_raise(StandardError.new("Test error")) + end + + it "shows an error banner when the server returns an error" do + activity_tab.add_comment(text: "First comment by admin", save: false) + + page.find_test_selector("op-submit-work-package-journal-form").click + + expect_flash(message: "Test error", type: :error) + + # expect the editor content not to be lost + within_test_selector("op-work-package-journal-form-element") do + editor = FormFields::Primerized::EditorFormField.new("notes", selector: "#work-package-journal-form-element") + editor.expect_value("First comment by admin") + end + end + end + + context "when the creation call fails with a validation error" do + before do + allow_any_instance_of(AddWorkPackageNoteService) # rubocop:disable RSpec/AnyInstance + .to receive(:call) + .and_return( + ServiceResult.failure(errors: ActiveModel::Errors.new(Journal.new).tap do |e| + e.add(:notes, "Validation error") + end) + ) + end + + it "shows a validation error banner" do + activity_tab.add_comment(text: "First comment by admin", save: false) + + page.find_test_selector("op-submit-work-package-journal-form").click + + expect_flash(message: "Validation error", type: :error) + + # expect the editor content not to be lost + within_test_selector("op-work-package-journal-form-element") do + editor = FormFields::Primerized::EditorFormField.new("notes", selector: "#work-package-journal-form-element") + editor.expect_value("First comment by admin") + end + end + end + end + + context "when editing a comment" do + let!(:first_comment_by_admin) do + create(:work_package_journal, user: admin, notes: "First comment by admin", journable: work_package, version: 2) + end + + context "when the update call raises an unknown server error" do + before do + allow_any_instance_of(WorkPackages::ActivitiesTabController) # rubocop:disable RSpec/AnyInstance + .to receive(:update_journal_service_call) + .and_raise(StandardError.new("Test error")) + end + + it "shows an error banner" do + activity_tab.edit_comment(first_comment_by_admin, text: "First comment by admin edited", save: false) + + page.within_test_selector("op-work-package-journal-form-element") do + page.find_test_selector("op-submit-work-package-journal-form").click + end + + expect_flash(message: "Test error", type: :error) + end + end + + context "when the update call fails with a validation error" do + before do + allow_any_instance_of(Journals::UpdateService) # rubocop:disable RSpec/AnyInstance + .to receive(:call) + .and_return( + ServiceResult.failure(errors: ActiveModel::Errors.new(Journal.new).tap do |e| + e.add(:notes, "Validation error") + end) + ) + end + + it "shows a validation error banner" do + activity_tab.edit_comment(first_comment_by_admin, text: "First comment by admin edited", save: false) + + page.within_test_selector("op-work-package-journal-form-element") do + page.find_test_selector("op-submit-work-package-journal-form").click + end + + expect_flash(message: "Validation error", type: :error) + end + end + end + end end diff --git a/spec/support/components/work_packages/activities.rb b/spec/support/components/work_packages/activities.rb index 822808fea401..7bc79b6a1238 100644 --- a/spec/support/components/work_packages/activities.rb +++ b/spec/support/components/work_packages/activities.rb @@ -175,18 +175,20 @@ def add_comment(text: nil, save: true) end end - def edit_comment(journal, text: nil) + def edit_comment(journal, text: nil, save: true) within_journal_entry(journal) do page.find_test_selector("op-wp-journal-#{journal.id}-action-menu").click page.find_test_selector("op-wp-journal-#{journal.id}-edit").click page.within_test_selector("op-work-package-journal-form-element") do FormFields::Primerized::EditorFormField.new("notes", selector: "#work-package-journal-form-element").set_value(text) - page.find_test_selector("op-submit-work-package-journal-form").click + page.find_test_selector("op-submit-work-package-journal-form").click if save end - # wait for the comment to be loaded - wait_for { page }.to have_test_selector("op-journal-notes-body", text:) + if save + # wait for the comment to be loaded + wait_for { page }.to have_test_selector("op-journal-notes-body", text:) + end end end From ff04f1e6911bff2704e6bc96b61ba80dcd1155c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Mon, 18 Nov 2024 14:55:37 +0100 Subject: [PATCH 19/23] Respect self-registration in saml --- .../sections/show_component.html.erb | 1 + .../controllers/saml/providers_controller.rb | 4 +-- .../app/services/saml/configuration_mapper.rb | 3 +- .../features/administration/saml_crud_spec.rb | 25 +++++++++++++---- .../saml/configuration_mapper_spec.rb | 28 +++++++++++++++++++ 5 files changed, 53 insertions(+), 8 deletions(-) diff --git a/modules/auth_saml/app/components/saml/providers/sections/show_component.html.erb b/modules/auth_saml/app/components/saml/providers/sections/show_component.html.erb index f2777b1de598..a747fa58d42f 100644 --- a/modules/auth_saml/app/components/saml/providers/sections/show_component.html.erb +++ b/modules/auth_saml/app/components/saml/providers/sections/show_component.html.erb @@ -33,6 +33,7 @@ tag: :a, scheme: :invisible, href: edit_saml_provider_path(provider, edit_state: @target_state), + test_selector: "saml_provider_#{@target_state}_edit", data: { turbo: true, turbo_stream: true }, aria: { label: I18n.t(disabled ? :label_show : :label_edit) } ) diff --git a/modules/auth_saml/app/controllers/saml/providers_controller.rb b/modules/auth_saml/app/controllers/saml/providers_controller.rb index 641206537bcf..f79e37580642 100644 --- a/modules/auth_saml/app/controllers/saml/providers_controller.rb +++ b/modules/auth_saml/app/controllers/saml/providers_controller.rb @@ -92,7 +92,7 @@ def update successful_save_response else @provider = call.result - render action: :edit + render action: :edit, status: :unprocessable_entity end end @@ -178,7 +178,7 @@ def create_params def update_params params .require(:saml_provider) - .permit(:display_name, *Saml::Provider.stored_attributes[:options]) + .permit(:display_name, :limit_self_registration, *Saml::Provider.stored_attributes[:options]) end def find_provider diff --git a/modules/auth_saml/app/services/saml/configuration_mapper.rb b/modules/auth_saml/app/services/saml/configuration_mapper.rb index 748745546989..79edb7ce8a0b 100644 --- a/modules/auth_saml/app/services/saml/configuration_mapper.rb +++ b/modules/auth_saml/app/services/saml/configuration_mapper.rb @@ -39,8 +39,9 @@ def call! { "options" => options, "slug" => options.delete("name"), + "limit_self_registration" => ActiveModel::Type::Boolean.new.cast(options.delete("limit_self_registration")), "display_name" => options.delete("display_name") || "SAML" - } + }.compact end private diff --git a/modules/auth_saml/spec/features/administration/saml_crud_spec.rb b/modules/auth_saml/spec/features/administration/saml_crud_spec.rb index 0efcc2763a04..1fead778ffbe 100644 --- a/modules/auth_saml/spec/features/administration/saml_crud_spec.rb +++ b/modules/auth_saml/spec/features/administration/saml_crud_spec.rb @@ -57,6 +57,7 @@ fill_in "Identity provider login endpoint", with: "https://example.com/sso" fill_in "Identity provider logout endpoint", with: "https://example.com/slo" fill_in "Public certificate of identity provider", with: CertificateHelper.valid_certificate.to_pem + check "Limit self registration" click_link_or_button "Continue" @@ -68,11 +69,11 @@ click_link_or_button "Continue" # Mapping form - fill_in "Mapping for: Username", with: "login\nmail", fill_options: { clear: :backspace } - fill_in "Mapping for: Email", with: "mail", fill_options: { clear: :backspace } - fill_in "Mapping for: First name", with: "myName", fill_options: { clear: :backspace } - fill_in "Mapping for: Last name", with: "myLastName", fill_options: { clear: :backspace } - fill_in "Mapping for: Internal user id", with: "uid", fill_options: { clear: :backspace } + fill_in "Mapping for: Username", with: "login\nmail" + fill_in "Mapping for: Email", with: "mail" + fill_in "Mapping for: First name", with: "myName" + fill_in "Mapping for: Last name", with: "myLastName" + fill_in "Mapping for: Internal user id", with: "uid" click_link_or_button "Continue" @@ -105,6 +106,7 @@ expect(provider.mapping_lastname).to eq "myLastName" expect(provider.mapping_uid).to eq "uid" expect(provider.authn_requests_signed).to be true + expect(provider.limit_self_registration).to be true click_link_or_button "Delete" # Confirm the deletion @@ -175,6 +177,19 @@ expect(page).to have_text "Display name has already been taken." end + + it "can toggle limit_self_registration (Regression #59370)" do + visit "/admin/saml/providers" + click_link_or_button "My provider" + + page.find_test_selector("saml_provider_configuration_edit").click + check "Limit self registration" + click_link_or_button "Update" + wait_for_network_idle + + provider.reload + expect(provider.limit_self_registration).to be true + end end end diff --git a/modules/auth_saml/spec/services/saml/configuration_mapper_spec.rb b/modules/auth_saml/spec/services/saml/configuration_mapper_spec.rb index 6cf93f4af3fb..149c734e8429 100644 --- a/modules/auth_saml/spec/services/saml/configuration_mapper_spec.rb +++ b/modules/auth_saml/spec/services/saml/configuration_mapper_spec.rb @@ -50,6 +50,34 @@ end end + describe "limit_self_registration" do + subject { result["limit_self_registration"] } + + context "when provided as string" do + let(:configuration) { { limit_self_registration: "1" } } + + it { is_expected.to be(true) } + end + + context "when provided as false boolean" do + let(:configuration) { { limit_self_registration: false } } + + it { is_expected.to be(false) } + end + + context "when provided as true boolean" do + let(:configuration) { { limit_self_registration: true } } + + it { is_expected.to be(true) } + end + + context "when not provided" do + let(:configuration) { {} } + + it { is_expected.to be_nil } + end + end + describe "slug" do subject { result["slug"] } From 9662d717498767e95cc76e44124f0c24abf42118 Mon Sep 17 00:00:00 2001 From: Jonas Jabari Date: Mon, 18 Nov 2024 17:26:35 +0100 Subject: [PATCH 20/23] fix flaky spec through longer waiting expectation approach --- spec/features/activities/work_package/activities_spec.rb | 4 ++-- spec/support/components/work_packages/activities.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/features/activities/work_package/activities_spec.rb b/spec/features/activities/work_package/activities_spec.rb index 5428863f8fde..8c3527b0e681 100644 --- a/spec/features/activities/work_package/activities_spec.rb +++ b/spec/features/activities/work_package/activities_spec.rb @@ -372,7 +372,7 @@ version: 2) # the comment is shown without browser reload - wait_for { page }.to have_test_selector("op-journal-notes-body", text: "First comment by member") + activity_tab.expect_journal_notes(text: "First comment by member") # simulate comments made within the polling interval create(:work_package_journal, user: member, notes: "Second comment by member", journable: work_package, version: 3) @@ -390,7 +390,7 @@ first_journal.update!(notes: "First comment by member updated") # properly updates the comment when the comment is updated - wait(delay: 0.5).for { page }.to have_test_selector("op-journal-notes-body", text: "First comment by member updated") + activity_tab.expect_journal_notes(text: "First comment by member updated") end end diff --git a/spec/support/components/work_packages/activities.rb b/spec/support/components/work_packages/activities.rb index 822808fea401..8927d4a69e95 100644 --- a/spec/support/components/work_packages/activities.rb +++ b/spec/support/components/work_packages/activities.rb @@ -98,7 +98,7 @@ def expect_no_journal_notes_header(text: nil) end def expect_journal_notes(text: nil) - expect(page).to have_test_selector("op-journal-notes-body", text:) + expect(page).to have_test_selector("op-journal-notes-body", text:, wait: 10) end def expect_notification_bubble From 90971516345f85110156ce90c1e59a8b700c4d2a Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Tue, 19 Nov 2024 03:17:18 +0000 Subject: [PATCH 21/23] update locales from crowdin [ci skip] --- config/locales/crowdin/js-pt-BR.yml | 6 +- config/locales/crowdin/js-tr.yml | 6 +- config/locales/crowdin/pt-BR.seeders.yml | 112 +++++++++--------- config/locales/crowdin/tr.yml | 2 +- .../backlogs/config/locales/crowdin/pt-BR.yml | 20 ++-- .../config/locales/crowdin/pt-BR.seeders.yml | 2 +- .../config/locales/crowdin/zh-CN.yml | 4 +- .../config/locales/crowdin/tr.yml | 2 +- 8 files changed, 76 insertions(+), 78 deletions(-) diff --git a/config/locales/crowdin/js-pt-BR.yml b/config/locales/crowdin/js-pt-BR.yml index 9b4463d68952..1c0098f23b32 100644 --- a/config/locales/crowdin/js-pt-BR.yml +++ b/config/locales/crowdin/js-pt-BR.yml @@ -578,10 +578,10 @@ pt-BR: wiki: "Na wiki, você pode documentar e compartilhar conhecimento junto com sua equipe. " backlogs: overview: "Gerencie seu trabalho na visão de backlogs." - sprints: "À direita você encontra o backlog do produto e de erros, à esquerda você encontra os respectivos sprints. Aqui você pode criar épicos, histórias de usuário e bugs, priorizar através de arrastar e soltar e adicioná-los a um sprint." - task_board_arrow: "Para ver o seu quadro de tarefas, abra o menu suspenso de sprint ... " + sprints: "À direita, você tem o backlog de produto e o backlog de erro, à esquerda, você tem as respectivas sprints. Aqui você pode criar épicos, user stories e erros, priorizar via arrastar e soltar e adicioná-los a uma sprint." + task_board_arrow: "Para ver o seu quadro de tarefas, abra o menu suspenso da sprint..." task_board_select: "... e selecione a entrada do quadro de tarefas. " - task_board: "O painel de tarefas visualiza o progresso deste sprint. Clique no ícone mais (+) ao lado de uma história de usuário para adicionar novas tarefas ou impedimentos.
A situação pode ser atualizada arrastando e soltando." + task_board: "O quadro de tarefas visualiza o progresso desta sprint. Clique no ícone de mais (+) ao lado de uma user story para adicionar novas tarefas ou impedimentos.
O status pode ser atualizado por arrastar e soltar." boards: overview: "Selecione quadros para mudar a visão e gerenciar seu projeto usando a exibição de quadros ágeis." lists_kanban: "Aqui você pode criar várias listas (colunas) dentro do seu painel. Este recurso permite que você crie um Quadro Kanban, por exemplo." diff --git a/config/locales/crowdin/js-tr.yml b/config/locales/crowdin/js-tr.yml index e30c0e9362fc..a906f935490a 100644 --- a/config/locales/crowdin/js-tr.yml +++ b/config/locales/crowdin/js-tr.yml @@ -728,7 +728,7 @@ tr: settings: daily: add_time: "Süre ekle" - enable: "Günlük email hatırlatıcılarını etkinleştir" + enable: "Günlük e-posta hatırlatıcılarını etkinleştir" explanation: "Bu hatırlatıcıları yalnızca okunmamış bildirimler için ve yalnızca sizin belirlediğiniz saatlerde alacaksınız. %{no_time_zone}" no_time_zone: "Hesabınız için bir saat dilimi yapılandırana kadar, saatler UTC olarak yorumlanacaktır." time_label: "Zaman %{counter}:" @@ -750,9 +750,9 @@ tr: wiki_page_updated: "Viki sayfası güncellendi" membership_added: "Üyelik eklendi" membership_updated: "Üyelik güncellendi" - title: "Email hatırlatıcıları" + title: "E-posta hatırlatıcıları" pause: - label: "Email hatırlatıcılarını geçici olarak durdur" + label: "E-posta hatırlatıcılarını geçici olarak durdur" first_day: "İlk gün" last_day: "Son gün" text_are_you_sure: "Emin misiniz?" diff --git a/config/locales/crowdin/pt-BR.seeders.yml b/config/locales/crowdin/pt-BR.seeders.yml index 517fde5c705f..facd6129f279 100644 --- a/config/locales/crowdin/pt-BR.seeders.yml +++ b/config/locales/crowdin/pt-BR.seeders.yml @@ -218,58 +218,56 @@ pt-BR: wiki: title: Sprint 1 content: | - ### A reunião de planejamento do Sprint + Reunião de Planejamento da Sprint - _Por favor, documente aqui tópicos para a reunião de planejamento do Sprint_ + _Documente aqui os tópicos para a reunião de planejamento da Sprint - * Caixa de Tempo (8 h) - * Entrada: Backlog do Produto - * Saída: Rendimento da Sprint + * Tempo limitado (8 h) + * Entrada: Backlog do produto + * Saída: Backlog da Sprint - * Divida em duas caixas de tempo adicionais de 4 h: + * Dividido em dois blocos de tempo adicionais de 4 h: - * O proprietário do produto apresenta o [Backlog]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) e as prioridades da equipe e explica a meta do Sprint, com o qual a equipa deve concordar. Juntos, eles priorizam os tópicos do Backlog do produto que a equipe cuidará no próximo sprint. A equipe se compromete com a entrega discutida. - * A equipe planeja autonomamente (sem o Proprietário do Produto) em detalhes e divide as tarefas dos requisitos discutidos para consolidar um [Backlog do Sprint]({{opSetting:base_url}}/projects/your-scrum-project/backlogs). + * O proprietário do produto apresenta o [Backlog do produto]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) e as prioridades para a equipe, explicando o Objetivo da Sprint, ao qual a equipe deve concordar. Juntos, priorizam os tópicos do Backlog do produto que a equipe irá cuidar na próxima sprint. A equipe se compromete com a entrega discutida. + * A equipe planeja de forma autônoma (sem o proprietário do produto) em detalhes e divide as tarefas dos requisitos discutidos para consolidar um [Backlog da sprint]({{opSetting:base_url}}/projects/your-scrum-project/backlogs). + Reunião do Daily Scrum - ### Reunião diária do Scrum + _Documente aqui os tópicos para a reunião diária de Scrum - _Por favor, documente aqui tópicos para a reunião do Scrum Diário_ + * Reunião curta de status diário da equipe. + * Tempo limitado (máx. 15 min). + * Reunião diária para discutir os seguintes tópicos do [Quadro de tarefas](##sprint:scrum_project__version__sprint_1). + *O que planejo fazer até o próximo Daily Scrum? + *O que bloqueou meu trabalho (Impedimentos)? + * O Scrum Master modera e anota os [Impedimentos da Sprint](##sprint:scrum_project__version__sprint_1). + * O proprietário do produto pode participar para se manter informado. - * Reunião de status curta e diária da equipe. - * Tempo em caixa de tempo (máx. 15 min). - * Realização para discutir os seguintes tópicos do [Quadro de tarefas](##sprint:scrum_project__version__sprint_1). - * O que pretendo fazer até o próximo Scrone Diário? - * O que bloqueou o meu trabalho (pedimentos)? - * Moderados e notas do Scrum Master [Impedimentos](##sprint:scrum_project__version__sprint_1). - * O Proprietário do Produto pode participar a fim de se manter informado. + Reunião de Revisão da Sprint - ### Reunião de Revisão do Sprint + _Documente aqui os tópicos para a reunião de revisão da Sprint - _Por favor, dê aqui tópicos para a reunião de Revisão do Sprint_ + * Tempo limitado (4 h). + * Máximo de uma hora de preparação por pessoa. + * A equipe mostra ao proprietário do produto e a outras partes interessadas o que foi alcançado nesta sprint. + * Importante: nada de protótipos e PowerPoint! Apenas a funcionalidade do produto finalizada (Incrementos) deve ser demonstrada. + * Feedback do proprietário do produto, partes interessadas e outros é desejado e será incluído no trabalho futuro. + * Com base nas funcionalidades demonstradas, o proprietário do produto decide se o incremento será colocado em produção ou se será desenvolvido mais. Esta possibilidade permite um ROI antecipado. - * Tempo embalado (4 h). - * O máximo de uma hora de preparação por pessoa. - * A equipe mostra ao proprietário do produto e às pessoas interessadas o que foi alcançado nesta sprint. - * Importante: sem dummies e nenhum PowerPoint! Funcionalidade de produto finalizado (Incrementos) deve ser demonstrada. - * Feedback do Proprietário do Produto, partes interessadas e outros é desejado e será incluído no trabalho futuro. - * Com base nas funcionalidades demonstradas, o proprietário do produto decide viver com esse incremento ou desenvolvê-lo ainda mais. Esta possibilidade permite uma ROI precoce. + Retrospectiva da Sprint + _Documente aqui os tópicos para a reunião de retrospectiva da Sprint - ### Retrospectiva de Sprint - - _Por favor, coloque aqui tópicos para a reunião Retrospectiva do Sprint_ - - * Caixa de Tempo (3 h). - * Após o Sprint Review, será moderado pelo Scrum Master. - * A equipe discute o sprint: o que correu bem, o que precisa de ser melhorado para ser mais produtivo para a próxima corrida, ou até mesmo mais divertido. + * Tempo limitado (3 h). + * Após a Revisão da Sprint, será moderada pelo Scrum Master. + * A equipe discute a sprint: o que deu certo, o que precisa ser melhorado para ser mais produtivo na próxima sprint ou até mesmo para se divertir mais. item_3: name: Sprint 2 categories: item_0: Categoria 1 (a ser alterada nas configurações do projeto) queries: item_0: - name: 'Plano do Projeto:' + name: Plano do projeto item_1: name: Backlog do produto item_2: @@ -278,12 +276,12 @@ pt-BR: name: Tarefas boards: kanban: - name: Painel Kanban + name: Quadro Kanban basic: name: Quadro de tarefas lists: item_0: - name: Lista de Desejo + name: Lista de desejos item_1: name: Lista curta item_2: @@ -294,7 +292,7 @@ pt-BR: widgets: item_0: options: - name: Bem-vindo + name: Boas-vindas item_1: options: name: Guia de introdução @@ -304,11 +302,11 @@ pt-BR: _Tente as seguintes etapas:_ 1. *Convide novos membros para o seu projeto*: → Vá para [Membros]({{opSetting:base_url}}/projects/your-scrum-project/members) na navegação do projeto. - 2. *Veja seu backlog de Produto e backlogs do Sprint*: → Vá para [Backlogs]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) na navegação do projeto. + 2. *Veja seu backlog de Produto e backlogs da Sprint*: → Vá para [Backlogs]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) na navegação do projeto. 3. *Veja seu quadro de tarefas*: → Vá para [Backlogs]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) → Clique na seta para a direita em Sprint → Selecione [Quadro de tarefas](##sprint:scrum_project__version__sprint_1). 4. *Crie um novo pacote de trabalho*: → Vá para [Pacotes de trabalho → Criar]({{opSetting:base_url}}/projects/your-scrum-project/work_packages/new). 5. *Crie e atualize um plano de projeto*: → Vá para [Plano de projeto](##query:scrum_project__query__project_plan) na navegação do projeto. - 6. *Crie um wiki de Sprint*: → Vá para [Backlogs]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) e abra o wiki de sprint no menu suspenso direito em um sprint. Você pode editar o [modelo wiki]({{opSetting:base_url}}/projects/your-scrum-project/wiki/) com base em suas necessidades. + 6. *Crie um wiki da Sprint*: → Vá para [Backlogs]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) e abra o wiki da sprint no menu suspenso direito em uma sprint. Você pode editar o [modelo wiki]({{opSetting:base_url}}/projects/your-scrum-project/wiki/) com base em suas necessidades. 7. *Ative mais módulos*: → Vá para [Configurações do projeto → Módulos]({{opSetting:base_url}}/projects/your-scrum-project/settings/modules). Aqui você encontrará nossos [Guias do Usuário] (https://www.openproject.org/docs/user-guide/). @@ -319,7 +317,7 @@ pt-BR: name: Pacotes de trabalho item_6: options: - name: 'Plano do Projeto:' + name: Plano do projeto work_packages: item_0: subject: Nova tela de login @@ -372,18 +370,18 @@ pt-BR: item_16: subject: Versão v2.0 wiki: | - ### Reunião de planejamento do sprint + ### Reunião de planejamento da sprint - _Documente aqui os tópicos para a reunião de planejamento do Sprint_ + _Documente aqui os tópicos para a reunião de planejamento da Sprint_ * Intervalo de tempo fixo (8 h) * Entrada: Backlog de produto - * Saída: Backlog de sprint + * Saída: Backlog da sprint * Dividido em dois intervalos de tempo fixos adicionais de 4 h: - * O proprietário do produto apresenta o [Backlog do produto]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) e as prioridades para a equipe e explica o Sprint objetivo, com o qual a equipe deve concordar. Juntos, eles priorizam os tópicos do Backlog de produto que a equipe cuidará no próximo sprint. A equipe se compromete com a entrega discutida. - * A equipe planeja de forma autônoma (sem o proprietário do produto) em detalhes e divide as tarefas dos requisitos discutidos para consolidar um [Backlog de sprint]({{opSetting:base_url}}/projects/your-scrum-project/backlogs). + * O proprietário do produto apresenta o [Backlog do produto]({{opSetting:base_url}}/projects/your-scrum-project/backlogs) e as prioridades para a equipe e explica a Sprint objetivo, com o qual a equipe deve concordar. Juntos, eles priorizam os tópicos do Backlog de produto que a equipe cuidará no próxima sprint. A equipe se compromete com a entrega discutida. + * A equipe planeja de forma autônoma (sem o proprietário do produto) em detalhes e divide as tarefas dos requisitos discutidos para consolidar um [Backlog da sprint]({{opSetting:base_url}}/projects/your-scrum-project/backlogs). ### Reunião diária do Scrum @@ -392,31 +390,31 @@ pt-BR: * Reunião curta e diária de status da equipe. * Intervalo de tempo fixo (máx. 15 min). - * Reunião stand-up para discutir os seguintes tópicos do quadro de tarefas. + * Reunião diária para discutir os seguintes tópicos do quadro de tarefas. * O que pretendo fazer até o próximo Scrum diário? * O que tem bloqueado meu trabalho (impedimentos)? - * O Scrum Master modera e anota os Impedimentos do Sprint. + * O Scrum Master modera e anota os Impedimentos da Sprint. * O proprietário do produto pode participar para se manter informado. - ### Reunião de revisão do Sprint + ### Reunião de revisão da Sprint - _Documente aqui os tópicos para a reunião de Revisão do Sprint_ + _Documente aqui os tópicos para a reunião de Revisão da Sprint_ * Intervalo de tempo fixo (4h). * Máximo de uma hora de preparo por pessoa. - * A equipe mostra ao proprietário do produto e outras pessoas interessadas o que foi alcançado neste sprint. + * A equipe mostra ao proprietário do produto e outras pessoas interessadas o que foi alcançado nesta sprint. * Importante: sem manequins e sem PowerPoint! A funcionalidade do produto recém-acabado (incrementos) deve ser demonstrada. * Comentários do proprietário do produto, partes interessadas e outros são desejados e serão incluídos em trabalhos futuros. * Com base nas funcionalidades demonstradas, o proprietário do produto decide ativar esse incremento ou desenvolvê-lo ainda mais. Esta possibilidade permite um ROI antecipado. - ### Retrospectiva do Sprint + ### Retrospectiva da Sprint - _Documente aqui os tópicos para a reunião de Retrospectiva do Sprint_ + _Documente aqui os tópicos para a reunião de Retrospectiva da Sprint_ * Intervalo de tempo fixo (3h). - * Após a revisão do Sprint, será moderado pelo Scrum Master. - * A equipe discute o sprint: o que deu certo, o que precisa ser melhorado para ser mais produtivo para o próximo sprint ou até mesmo se divertir mais. + * Após a revisão da Sprint, será moderado pelo Scrum Master. + * A equipe discute a sprint: o que deu certo, o que precisa ser melhorado para ser mais produtivo para a próxima sprint ou até mesmo se divertir mais. statuses: item_0: name: Novo @@ -439,7 +437,7 @@ pt-BR: item_9: name: Testado item_10: - name: Falha no teste + name: O teste falhou item_11: name: Fechado item_12: @@ -467,15 +465,15 @@ pt-BR: item_2: name: Fase item_3: - name: Funcionalidade + name: Recurso item_4: name: Épico item_5: - name: História de usuário + name: Histórico de usuário item_6: name: Bug welcome: - title: Bem-vindo ao OpenProject! + title: Boas-vindas ao OpenProject! text: | O OpenProject é o principal software de gestão de projetos de código aberto. Ele dá suporte à gestão de projetos clássica, ágil e híbrida e dá a você o controlo total sobre os seus dados. diff --git a/config/locales/crowdin/tr.yml b/config/locales/crowdin/tr.yml index 68fb3c2f0dab..893b50a085f5 100644 --- a/config/locales/crowdin/tr.yml +++ b/config/locales/crowdin/tr.yml @@ -3571,7 +3571,7 @@ tr: status_user_and_brute_force: "%{user} ve %{brute_force}" status_change: "Durum değişikliği" text_change_disabled_for_provider_login: "Ad, giriş sağlayıcınız tarafından belirlenir ve bu nedenle değiştirilemez." - text_change_disabled_for_ldap_login: "The name and email is set by LDAP and can thus not be changed." + text_change_disabled_for_ldap_login: "İsim ve e-posta LDAP tarafından belirlenir ve bu nedenle değiştirilemez." unlock: "Kilidi kaldır" unlock_and_reset_failed_logins: "Başarısız oturum açma işlemlerinin kilidini aç ve sıfırla" version_status_closed: "kapalı" diff --git a/modules/backlogs/config/locales/crowdin/pt-BR.yml b/modules/backlogs/config/locales/crowdin/pt-BR.yml index adca5b204645..c6181178c06c 100644 --- a/modules/backlogs/config/locales/crowdin/pt-BR.yml +++ b/modules/backlogs/config/locales/crowdin/pt-BR.yml @@ -34,12 +34,12 @@ pt-BR: work_package: attributes: blocks_ids: - can_only_contain_work_packages_of_current_sprint: "pode conter somente os IDs dos pacotes de trabalho no sprint atual." + can_only_contain_work_packages_of_current_sprint: "pode conter apenas IDs de pacotes de trabalho na sprint atual." must_block_at_least_one_work_package: "deve conter o ID de pelo menos um tíquete." version_id: task_version_must_be_the_same_as_story_version: "deve ser igual à versão da história dos pais." sprint: - cannot_end_before_it_starts: "Sprint não pode terminar antes de começar." + cannot_end_before_it_starts: "A sprint não pode terminar antes de começar." backlogs: add_new_story: "Nova história" any: "qualquer" @@ -57,7 +57,7 @@ pt-BR: label_versions_default_fold_state: "Mostrar versões em modo fechado" work_package_is_closed: "Pacote de trabalho está pronto, quando" label_is_done_status: "Situação %{status_name} significa pronto" - no_burndown_data: "Não há dados de burndown disponíveis. É necessário ter o conjunto de datas de início e fim de sprint." + no_burndown_data: "Nenhum dado de burndown disponível. É necessário definir as datas de início e fim da sprint." points: "Pontos" positions_could_not_be_rebuilt: "Posições não poderiam ser reconstruídas." positions_rebuilt_successfully: "Posições reconstruídas com sucesso." @@ -82,17 +82,17 @@ pt-BR: backlogs_product_backlog_is_empty: "Backlog do produto está vazio" backlogs_product_backlog_unsized: "O topo do backlog de produto tem histórias não dimensionadas" backlogs_sizing_inconsistent: "Tamanhos das histórias contrastam com suas estimativas" - backlogs_sprint_notes_missing: "Sprints fechados sem notas de revisão/retrospectiva" - backlogs_sprint_unestimated: "Sprints ativos ou fechados com histórias não estimadas" - backlogs_sprint_unsized: "Projeto tem histórias em sprints ativos ou recentemente fechados que não tem tamanho" + backlogs_sprint_notes_missing: "Sprints encerradas sem notas de retrospectiva/revisão" + backlogs_sprint_unestimated: "Sprints encerradas ou ativas com histórias não estimadas" + backlogs_sprint_unsized: "O projeto tem histórias em sprints ativas ou recentemente encerradas que não foram dimensionadas" backlogs_sprints: "Sprints" backlogs_story: "História" backlogs_story_type: "Tipos de história" backlogs_task: "Tarefa" backlogs_task_type: "Tipo de tarefa" backlogs_velocity_missing: "Nenhuma velocidade foi calculada para este projeto" - backlogs_velocity_varies: "Velocidade varia significativamente ao longo de sprints" - backlogs_wiki_template: "Modelo para a página de wiki da sprint" + backlogs_velocity_varies: "A velocidade varia significativamente entre as sprints" + backlogs_wiki_template: "Modelo para página wiki da sprint" backlogs_empty_title: "Não há versões definidas para serem usadas nos backlogs" backlogs_empty_action_text: "Para iniciar com backlogs, crie uma nova versão e atribua a uma coluna de backlogs." button_edit_wiki: "Editar página wiki" @@ -120,9 +120,9 @@ pt-BR: label_points_burn_up: "Acima" label_product_backlog: "Backlog do produto" label_select_all: "Selecionar tudo" - label_sprint_backlog: "Backlog do sprint" + label_sprint_backlog: "backlog da sprint" label_sprint_cards: "Exportar cartões" - label_sprint_impediments: "Impedimentos do Sprint" + label_sprint_impediments: "Impedimentos da Sprint" label_sprint_name: "Sprint \"%{name}\"" label_sprint_velocity: "Velocidade %{velocity}, baseado em %{sprints} sprints, com uma média de %{days} dias" label_stories: "Histórias" diff --git a/modules/bim/config/locales/crowdin/pt-BR.seeders.yml b/modules/bim/config/locales/crowdin/pt-BR.seeders.yml index 0d82162c385c..f6babbe76fde 100644 --- a/modules/bim/config/locales/crowdin/pt-BR.seeders.yml +++ b/modules/bim/config/locales/crowdin/pt-BR.seeders.yml @@ -459,7 +459,7 @@ pt-BR: name: Pacotes de trabalho item_6: options: - name: Etapas + name: Marcos work_packages: item_0: subject: Kick off do projeto criando modelo BIM diff --git a/modules/openid_connect/config/locales/crowdin/zh-CN.yml b/modules/openid_connect/config/locales/crowdin/zh-CN.yml index 34c042816cd9..527ff30b4d0b 100644 --- a/modules/openid_connect/config/locales/crowdin/zh-CN.yml +++ b/modules/openid_connect/config/locales/crowdin/zh-CN.yml @@ -59,8 +59,8 @@ zh-CN: metadata_url: 我有一个发现端点网址 client_id: 这是您的 OpenID Connect 提供商给您的客户端 ID client_secret: 这是您的 OpenID Connect 提供商给您的客户端密钥 - limit_self_registration: 如果启用,用户只能在OpenID Connect提供商端的配置允许的情况下可使用此提供商注册。 - display_name: OpenID Connect 提供商的名称。这将作为登录按钮和供应商列表的显示。 + limit_self_registration: 如果启用,用户只能在提供商的配置允许的情况下使用该提供商进行注册。 + display_name: 提供商的名称。这将显示为登录按钮以及提供商列表中的名称。 tenant: '如果适用,请将默认租户替换为您自己的租户。请参阅此处。' post_logout_redirect_uri: OpenID Connect 提供商在注销请求后应重定向到的 URL。 claims: > diff --git a/modules/two_factor_authentication/config/locales/crowdin/tr.yml b/modules/two_factor_authentication/config/locales/crowdin/tr.yml index 3afe9edc685d..a6a5acf7cfcb 100644 --- a/modules/two_factor_authentication/config/locales/crowdin/tr.yml +++ b/modules/two_factor_authentication/config/locales/crowdin/tr.yml @@ -79,7 +79,7 @@ tr: text_2fa_disabled: "The user did not set up a 2FA device through their 'My account page'" only_sms_allowed: "Only SMS delivery can be set up for other users." upsale: - title: "İki faktörlü kimlik doğrulama" + title: "İki aşamalı kimlik doğrulama" description: "Tüm proje üyelerine iki faktörlü kimlik doğrulama sunarak (veya zorunlu kılarak) OpenProject bulut sunucunuzun güvenliğini güçlendirin." backup_codes: none_found: Bu hesap için yedek kod yok. From 6f5e8e57861ef54a7e3b0aad7f16290e395229be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Tue, 19 Nov 2024 10:40:55 +0100 Subject: [PATCH 22/23] Add custom scopes to OpenID Connect https://community.openproject.org/work_packages/59430 --- .../providers/client_details_form.rb | 16 ++++++++++++++ .../app/models/openid_connect/provider.rb | 1 + .../openid_connect/provider/hash_builder.rb | 1 + .../openid_connect/configuration_mapper.rb | 12 ++++++++++ modules/openid_connect/config/locales/en.yml | 1 + .../administration/oidc_custom_crud_spec.rb | 3 +++ ...migrate_oidc_settings_to_providers_spec.rb | 2 ++ .../configuration_mapper_spec.rb | 22 +++++++++++++++++++ 8 files changed, 58 insertions(+) diff --git a/modules/openid_connect/app/components/openid_connect/providers/client_details_form.rb b/modules/openid_connect/app/components/openid_connect/providers/client_details_form.rb index 8c945ac679aa..609c3304381f 100644 --- a/modules/openid_connect/app/components/openid_connect/providers/client_details_form.rb +++ b/modules/openid_connect/app/components/openid_connect/providers/client_details_form.rb @@ -29,6 +29,8 @@ module OpenIDConnect module Providers class ClientDetailsForm < BaseForm + include Redmine::I18n + form do |f| %i[client_id client_secret].each do |attr| f.text_field( @@ -48,6 +50,20 @@ class ClientDetailsForm < BaseForm required: false, input_width: :large ) + f.text_field( + name: :scope, + label: I18n.t("activemodel.attributes.openid_connect/provider.scope"), + placeholder: "openid email profile", + caption: link_translate( + "openid_connect.instructions.scope", + links: { + docs_url: "https://openid.net/specs/openid-connect-basic-1_0.html#Scopes" + } + ), + disabled: provider.seeded_from_env?, + required: false, + input_width: :large + ) f.check_box( name: :limit_self_registration, label: I18n.t("activemodel.attributes.openid_connect/provider.limit_self_registration"), diff --git a/modules/openid_connect/app/models/openid_connect/provider.rb b/modules/openid_connect/app/models/openid_connect/provider.rb index 18fa645b5150..c61e5b04589a 100644 --- a/modules/openid_connect/app/models/openid_connect/provider.rb +++ b/modules/openid_connect/app/models/openid_connect/provider.rb @@ -31,6 +31,7 @@ class Provider < AuthProvider store_attribute :options, :scheme, :string store_attribute :options, :port, :string + store_attribute :options, :scope, :string store_attribute :options, :claims, :string store_attribute :options, :acr_values, :string diff --git a/modules/openid_connect/app/models/openid_connect/provider/hash_builder.rb b/modules/openid_connect/app/models/openid_connect/provider/hash_builder.rb index 601867a80d1c..0beea596b22e 100644 --- a/modules/openid_connect/app/models/openid_connect/provider/hash_builder.rb +++ b/modules/openid_connect/app/models/openid_connect/provider/hash_builder.rb @@ -19,6 +19,7 @@ def to_h # rubocop:disable Metrics/AbcSize authorization_endpoint:, jwks_uri:, issuer:, + scope:, identifier: client_id, secret: client_secret, token_endpoint:, diff --git a/modules/openid_connect/app/services/openid_connect/configuration_mapper.rb b/modules/openid_connect/app/services/openid_connect/configuration_mapper.rb index 5ee45847c192..bd9f5247febe 100644 --- a/modules/openid_connect/app/services/openid_connect/configuration_mapper.rb +++ b/modules/openid_connect/app/services/openid_connect/configuration_mapper.rb @@ -53,6 +53,7 @@ def call! # rubocop:disable Metrics/AbcSize "limit_self_registration" => options["limit_self_registration"], "use_graph_api" => options["use_graph_api"], "acr_values" => options["acr_values"], + "scope" => extract_scope(options["scope"]), "authorization_endpoint" => extract_url(options, "authorization_endpoint"), "token_endpoint" => extract_url(options, "token_endpoint"), "userinfo_endpoint" => extract_url(options, "userinfo_endpoint"), @@ -68,6 +69,17 @@ def call! # rubocop:disable Metrics/AbcSize private + def extract_scope(value) + return if value.blank? + + case value + when Array + value.join(" ") + else + value + end + end + def oidc_provider(options) case options["name"] when /azure/ diff --git a/modules/openid_connect/config/locales/en.yml b/modules/openid_connect/config/locales/en.yml index ed720f91b4bb..03d0ab584753 100644 --- a/modules/openid_connect/config/locales/en.yml +++ b/modules/openid_connect/config/locales/en.yml @@ -66,6 +66,7 @@ en: limit_self_registration: If enabled, users can only register using this provider if configuration on the provider's end allows it. display_name: The name of the provider. This will be displayed as the login button and in the list of providers. tenant: Please replace the default tenant with your own if applicable. See this. + scope: If you want to request custom scopes, you can add one or multiple scope values separated by spaces here. For more information, see the [OpenID Connect documentation](docs_url). post_logout_redirect_uri: The URL the OpenID Connect provider should redirect to after a logout request. claims: > You can request additional claims for the userinfo and id token endpoints. Please see [our OpenID connect documentation](docs_url) for more information. diff --git a/modules/openid_connect/spec/features/administration/oidc_custom_crud_spec.rb b/modules/openid_connect/spec/features/administration/oidc_custom_crud_spec.rb index 714723041076..ab1f0cd42cac 100644 --- a/modules/openid_connect/spec/features/administration/oidc_custom_crud_spec.rb +++ b/modules/openid_connect/spec/features/administration/oidc_custom_crud_spec.rb @@ -64,6 +64,9 @@ fill_in "Client ID", with: "client_id" fill_in "Client secret", with: "client secret" + # Scope + fill_in "Scope", with: "custom_scope another_scope" + click_link_or_button "Continue" # Mapping form diff --git a/modules/openid_connect/spec/migration/migrate_oidc_settings_to_providers_spec.rb b/modules/openid_connect/spec/migration/migrate_oidc_settings_to_providers_spec.rb index 045779278060..2938dbb23c3c 100644 --- a/modules/openid_connect/spec/migration/migrate_oidc_settings_to_providers_spec.rb +++ b/modules/openid_connect/spec/migration/migrate_oidc_settings_to_providers_spec.rb @@ -107,6 +107,7 @@ class TestOpenIDConnectProvider < OpenIDConnect::Provider host: "localhost", port: "8080", scheme: "http", + scope: ["foo", "bar"], identifier: "http://localhost:3000", secret: "IVl6GxxujAQ3mt6thAXKxyYYvmyRr8jw", issuer: "http://localhost:8080/realms/test", @@ -129,6 +130,7 @@ class TestOpenIDConnectProvider < OpenIDConnect::Provider expect(provider.host).to eq "localhost" expect(provider.port).to eq "8080" expect(provider.scheme).to eq "http" + expect(provider.scope).to eq "foo bar" expect(provider.client_id).to eq "http://localhost:3000" expect(provider.client_secret).to eq "IVl6GxxujAQ3mt6thAXKxyYYvmyRr8jw" expect(provider.issuer).to eq "http://localhost:8080/realms/test" diff --git a/modules/openid_connect/spec/services/openid_connect/configuration_mapper_spec.rb b/modules/openid_connect/spec/services/openid_connect/configuration_mapper_spec.rb index e5dd3128f681..e8daef6db17e 100644 --- a/modules/openid_connect/spec/services/openid_connect/configuration_mapper_spec.rb +++ b/modules/openid_connect/spec/services/openid_connect/configuration_mapper_spec.rb @@ -98,6 +98,28 @@ end end + describe "scope" do + subject { result } + + context "when provided" do + let(:configuration) { { scope: "custom" } } + + it { is_expected.to include("scope" => "custom") } + end + + context "when provided as array" do + let(:configuration) { { scope: ["foo", "bar"] } } + + it { is_expected.to include("scope" => "foo bar") } + end + + context "when not provided" do + let(:configuration) { { foo: "bar" } } + + it { is_expected.not_to have_key("scope") } + end + end + describe "issuer" do subject { result } From 16e6a9ae34699122028e2cbb14d7cdd14c24f2b5 Mon Sep 17 00:00:00 2001 From: Markus Kahl Date: Wed, 20 Nov 2024 13:44:15 +0000 Subject: [PATCH 23/23] Add release-notes file --- docs/release-notes/15-0-2/README.md | 36 +++++++++++++++++++++++++++++ docs/release-notes/README.md | 7 ++++++ 2 files changed, 43 insertions(+) create mode 100644 docs/release-notes/15-0-2/README.md diff --git a/docs/release-notes/15-0-2/README.md b/docs/release-notes/15-0-2/README.md new file mode 100644 index 000000000000..87f50df7b795 --- /dev/null +++ b/docs/release-notes/15-0-2/README.md @@ -0,0 +1,36 @@ +--- +title: OpenProject 15.0.2 +sidebar_navigation: + title: 15.0.2 +release_version: 15.0.2 +release_date: 2024-11-20 +--- + +# OpenProject 15.0.2 + +Release date: 2024-11-20 + +We released OpenProject [OpenProject 15.0.2](https://community.openproject.org/versions/2158). +The release contains several bug fixes and we recommend updating to the newest version. +In these Release Notes, we will give an overview of important feature changes. +At the end, you will find a complete list of all changes and bug fixes. + + + +## Bug fixes and changes + + + + +- Bugfix: Work package creation event not displayed if aggregation includes a comment \[[#58738](https://community.openproject.org/wp/58738)\] +- Bugfix: Error toast giving a 500 error without relevant details \[[#59065](https://community.openproject.org/wp/59065)\] +- Bugfix: The comment box remains open and does not blur on submitting comment \[[#59279](https://community.openproject.org/wp/59279)\] +- Bugfix: Split screen activity tab does not scroll to the right position from list view \[[#59281](https://community.openproject.org/wp/59281)\] +- Bugfix: Storage in copied project does not have the correct Project Folder setting \[[#59344](https://community.openproject.org/wp/59344)\] +- Bugfix: Cannot change limit\_self\_registration for SAML auth providers \[[#59370](https://community.openproject.org/wp/59370)\] +- Bugfix: Option to limit\_self\_registration in SAML provider not respected \[[#59375](https://community.openproject.org/wp/59375)\] +- Bugfix: Migration of SAML auth providers doesn't retain limit\_self\_registration \[[#59403](https://community.openproject.org/wp/59403)\] +- Bugfix: OpenID connect does not allow setting custom scopes \[[#59430](https://community.openproject.org/wp/59430)\] + + + diff --git a/docs/release-notes/README.md b/docs/release-notes/README.md index 495306a14982..0aa676ccdc3e 100644 --- a/docs/release-notes/README.md +++ b/docs/release-notes/README.md @@ -13,6 +13,13 @@ Stay up to date and get an overview of the new features included in the releases +## 15.0.2 + +Release date: 2024-11-20 + +[Release Notes](15-0-2/) + + ## 15.0.1 Release date: 2024-11-13