From 25340ab38e0cd4d7d2fdb48b4e198634c8606f71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Sat, 11 Mar 2017 03:42:52 +0100 Subject: [PATCH 01/33] Remove unneeded inject --- .../suggest-add-members/suggest-add-members.directive.coffee | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee b/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee index 56ff278f..0bd4f661 100644 --- a/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee +++ b/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee @@ -18,8 +18,6 @@ ### SuggestAddMembersDirective = (lightboxService) -> - @.inject = ['lightboxService'] - return { scope: {}, templateUrl:"invite-members/suggest-add-members/suggest-add-members.html", From 02e8b46c30bf5af0e8500571509d3644cb76e72b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Sun, 12 Mar 2017 18:47:08 +0100 Subject: [PATCH 02/33] Fix broken links of tasks in user story detail page --- app/coffee/modules/related-tasks.coffee | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/coffee/modules/related-tasks.coffee b/app/coffee/modules/related-tasks.coffee index 9d42ae32..6faeb43a 100644 --- a/app/coffee/modules/related-tasks.coffee +++ b/app/coffee/modules/related-tasks.coffee @@ -77,16 +77,12 @@ RelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $tem renderView($model.$modelValue) renderView = (task) -> - @childScope.$destroy() - @childScope = $scope.$new() - $el.off() - perms = { modify_task: $scope.project.my_permissions.indexOf("modify_task") != -1 delete_task: $scope.project.my_permissions.indexOf("delete_task") != -1 } - $el.html($compile(templateView({task: task, perms: perms}))(childScope)) + $el.html($compile(templateView({task: task, perms: perms}))($scope)) $el.on "click", ".edit-task", -> renderEdit($model.$modelValue) From 4c6ef36206f7a9fcc4f633503932dc02bfccbebc Mon Sep 17 00:00:00 2001 From: xaviju Date: Mon, 13 Mar 2017 08:26:43 +0100 Subject: [PATCH 03/33] Update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b5e83639..f77bd0b9 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ scss-lint.log e2e/screenshots/ e2e/reports/ app/modules/compile-modules/ +yarn.lock From 4de88959767bee2d53b3ef97e269f49dd0fe1e1f Mon Sep 17 00:00:00 2001 From: xaviju Date: Mon, 13 Mar 2017 08:27:24 +0100 Subject: [PATCH 04/33] Limits contact display on adding members --- .../suggest-add-members/suggest-add-members.jade | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/modules/invite-members/suggest-add-members/suggest-add-members.jade b/app/modules/invite-members/suggest-add-members/suggest-add-members.jade index af229f1c..130e5425 100644 --- a/app/modules/invite-members/suggest-add-members/suggest-add-members.jade +++ b/app/modules/invite-members/suggest-add-members/suggest-add-members.jade @@ -21,11 +21,11 @@ ul.add-member-suggest-list li.add-member-suggest-single.e2e-add-member-suggest-single( - tg-repeat="contact in vm.filteredContacts" + ng-repeat="contact in vm.filteredContacts | toMutable | limitTo: 12 | orderBy:'full_name_display'" ng-click="vm.setInvited(contact)" ) img.add-member-suggest-avatar( tg-avatar="contact" - alt="{{contact.get('full_name_display')}}" + alt="{{contact.full_name_display}}" ) - span.add-member-suggest-name {{contact.get('full_name_display')}} + span.add-member-suggest-name {{contact.full_name_display}} From 65a9d1866fb35aa8480e82eced6ad0c9f7a78ae4 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 13 Mar 2017 15:24:33 +0100 Subject: [PATCH 05/33] fix issue #5005 - persist upload images in text editor --- .../components/wysiwyg/wysiwyg.directive.coffee | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index ad7f4ddb..3b39a05b 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -60,14 +60,14 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad pre = document.createElement('pre') code = document.createElement('code') - console.log range.startContainer.parentNode.nextSibling - if !range.startContainer.parentNode.nextSibling $('
').insertAfter(range.startContainer.parentNode) - start = range.startContainer.parentNode.nextSibling + start = range.endContainer.parentNode.nextSibling - code.appendChild(range.extractContents()) + extract = range.extractContents() + + code.appendChild(extract) pre.appendChild(code) @@ -78,7 +78,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad refreshCodeBlocks = (mediumInstance) -> # clean empty

content editable adds it when range.extractContents has been execute it for mainChildren in mediumInstance.elements[0].children - if mainChildren && mainChildren.tagName.toLowerCase() == 'p' && !mainChildren.innerText.length + if mainChildren && mainChildren.tagName.toLowerCase() == 'p' && !mainChildren.innerHTML.trim().length mainChildren.parentNode.removeChild(mainChildren) preList = mediumInstance.elements[0].querySelectorAll('pre') From 6748215cf3229e5fc92b32810b4f3a848d6679a2 Mon Sep 17 00:00:00 2001 From: xaviju Date: Mon, 13 Mar 2017 17:23:47 +0100 Subject: [PATCH 06/33] Broken add new members --- app/modules/invite-members/lightbox-add-members.jade | 1 + .../suggest-add-members.controller.coffee | 2 +- .../suggest-add-members.directive.coffee | 3 ++- .../suggest-add-members/suggest-add-members.jade | 6 +++--- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/modules/invite-members/lightbox-add-members.jade b/app/modules/invite-members/lightbox-add-members.jade index c88bebdb..329c1d4e 100644 --- a/app/modules/invite-members/lightbox-add-members.jade +++ b/app/modules/invite-members/lightbox-add-members.jade @@ -4,6 +4,7 @@ tg-lightbox-close tg-suggest-add-members( ng-show="!vm.displayContactList" contacts="vm.contacts" + filtered-contacts="vm.contacts.slice(0,12)" on-invite-suggested="vm.inviteSuggested(contact)" on-invite-email="vm.inviteEmail(email)" ) diff --git a/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.coffee b/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.coffee index 03bde373..5c070780 100644 --- a/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.coffee +++ b/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.coffee @@ -31,7 +31,7 @@ class SuggestAddMembersController filterContacts: () -> @.filteredContacts = @.contacts.filter( (contact) => contact.get('full_name_display').toLowerCase().includes(@.contactQuery.toLowerCase()) || contact.get('username').toLowerCase().includes(@.contactQuery.toLowerCase()); - ) + ).slice(0,12) setInvited: (contact) -> @.onInviteSuggested({'contact': contact}) diff --git a/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee b/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee index 0bd4f661..f7f27201 100644 --- a/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee +++ b/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee @@ -18,6 +18,7 @@ ### SuggestAddMembersDirective = (lightboxService) -> + return { scope: {}, templateUrl:"invite-members/suggest-add-members/suggest-add-members.html", @@ -25,7 +26,7 @@ SuggestAddMembersDirective = (lightboxService) -> controllerAs: "vm", bindToController: { contacts: '=', - filteredContacts: ' Date: Mon, 13 Mar 2017 17:56:30 +0100 Subject: [PATCH 07/33] Fix add-member lightbox form --- app/modules/invite-members/lightbox-add-members.jade | 1 - .../suggest-add-members.directive.coffee | 8 ++++++-- .../suggest-add-members/suggest-add-members.scss | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/modules/invite-members/lightbox-add-members.jade b/app/modules/invite-members/lightbox-add-members.jade index 329c1d4e..c88bebdb 100644 --- a/app/modules/invite-members/lightbox-add-members.jade +++ b/app/modules/invite-members/lightbox-add-members.jade @@ -4,7 +4,6 @@ tg-lightbox-close tg-suggest-add-members( ng-show="!vm.displayContactList" contacts="vm.contacts" - filtered-contacts="vm.contacts.slice(0,12)" on-invite-suggested="vm.inviteSuggested(contact)" on-invite-email="vm.inviteEmail(email)" ) diff --git a/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee b/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee index f7f27201..adc67abd 100644 --- a/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee +++ b/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee @@ -18,6 +18,10 @@ ### SuggestAddMembersDirective = (lightboxService) -> + link = (scope, el, attrs, ctrl) -> + scope.$watch "vm.contacts", (contacts) => + if contacts + ctrl.filterContacts() return { scope: {}, @@ -26,10 +30,10 @@ SuggestAddMembersDirective = (lightboxService) -> controllerAs: "vm", bindToController: { contacts: '=', - filteredContacts: '<', onInviteSuggested: '&', onInviteEmail: '&' - } + }, + link: link } angular.module("taigaAdmin").directive("tgSuggestAddMembers", ["lightboxService", SuggestAddMembersDirective]) diff --git a/app/modules/invite-members/suggest-add-members/suggest-add-members.scss b/app/modules/invite-members/suggest-add-members/suggest-add-members.scss index 40c03fe3..618e12c1 100644 --- a/app/modules/invite-members/suggest-add-members/suggest-add-members.scss +++ b/app/modules/invite-members/suggest-add-members/suggest-add-members.scss @@ -67,6 +67,8 @@ } .add-member-suggest-avatar { + flex-grow: 0; + flex-shrink: 0; height: 5rem; margin: .5rem; width: 5rem; From c3d97f4763cca07254b301d6602f29498b91c0e0 Mon Sep 17 00:00:00 2001 From: xaviju Date: Tue, 14 Mar 2017 08:54:15 +0100 Subject: [PATCH 08/33] Remove squared background from track buttons --- app/styles/components/track-btn.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/styles/components/track-btn.scss b/app/styles/components/track-btn.scss index 8fdab2bd..b6d5d708 100644 --- a/app/styles/components/track-btn.scss +++ b/app/styles/components/track-btn.scss @@ -6,6 +6,7 @@ .track-button { align-items: stretch; + border-radius: 4px; display: flex; margin: 0; padding: 0; From 5bc63997b6abc9367646e955d773ee272af0719e Mon Sep 17 00:00:00 2001 From: xaviju Date: Tue, 14 Mar 2017 08:59:53 +0100 Subject: [PATCH 09/33] Add button bulk padding --- app/styles/components/buttons.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/styles/components/buttons.scss b/app/styles/components/buttons.scss index 388bd258..09b81f80 100755 --- a/app/styles/components/buttons.scss +++ b/app/styles/components/buttons.scss @@ -123,7 +123,7 @@ a.button-gray { .button-bulk { @extend %button; background: $primary; - padding: .35rem .5rem; + padding: .55rem .75rem; .icon { fill: currentColor; margin-right: 0; From 9ec206fd18cf411cf44195a6c0f40f678ac121c6 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 14 Mar 2017 07:48:59 +0100 Subject: [PATCH 10/33] fix issue 5014 - show html after save in markdown --- app/partials/common/components/wysiwyg-toolbar.jade | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/app/partials/common/components/wysiwyg-toolbar.jade b/app/partials/common/components/wysiwyg-toolbar.jade index 502839d5..24dbe439 100644 --- a/app/partials/common/components/wysiwyg-toolbar.jade +++ b/app/partials/common/components/wysiwyg-toolbar.jade @@ -4,7 +4,7 @@ .medium.wysiwyg( type="text", - ng-show="mode == 'html'" + ng-show="mode == 'html' || !editMode" ) textarea.markdown.e2e-markdown-textarea( @@ -14,14 +14,6 @@ ng-show="mode == 'markdown' && editMode" ) - .markdown( - ng-class="{empty: !markdown.length}" - ng-click="editMode = true" - ng-show="mode == 'markdown' && !editMode" - ) - p(ng-if="markdown.length") {{markdown}} - p.markdown-editor-placeholder.wysiwyg(ng-if="!markdown.length") {{placeholder}} - .mode-editor(ng-if="editMode") span.e2e-markdown-mode( ng-if="mode=='html'" From cd0c1a63a912e9ffc833679f4712bf67c00e138d Mon Sep 17 00:00:00 2001 From: xaviju Date: Tue, 14 Mar 2017 10:33:15 +0100 Subject: [PATCH 11/33] Fix kanban table width in empty projects --- app/styles/modules/kanban/kanban-table.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/styles/modules/kanban/kanban-table.scss b/app/styles/modules/kanban/kanban-table.scss index edee7517..24d2496b 100644 --- a/app/styles/modules/kanban/kanban-table.scss +++ b/app/styles/modules/kanban/kanban-table.scss @@ -63,11 +63,11 @@ $column-padding: .5rem 1rem; flex-basis: 2.4rem; min-height: 2.4rem; position: relative; - width: 100%; .kanban-table-inner { display: flex; overflow: hidden; position: absolute; + width: 100%; } .options { display: flex; From ab78563f94e178a87213dbcb73901601846df257 Mon Sep 17 00:00:00 2001 From: xaviju Date: Tue, 14 Mar 2017 10:36:18 +0100 Subject: [PATCH 12/33] Adds padding to filter input --- app/modules/components/filter/filter.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/modules/components/filter/filter.scss b/app/modules/components/filter/filter.scss index 109b78cf..a32d5152 100644 --- a/app/modules/components/filter/filter.scss +++ b/app/modules/components/filter/filter.scss @@ -29,6 +29,7 @@ tg-filter { input { background: $grayer; color: $white; + padding-right: 2rem; @include placeholder { color: $gray-light; } From f2388582d60acd4efebbdd34ac2b2399c2f64760 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 14 Mar 2017 15:28:07 +0100 Subject: [PATCH 13/33] fix several wysiwyg issues --- app/coffee/app.coffee | 9 ++ app/coffee/modules/base.coffee | 1 + app/coffee/modules/base/repository.coffee | 1 + app/coffee/modules/detail.coffee | 79 +++++++++++ app/js/markdown-it-lazy-headers.js | 132 ++++++++++++++++++ app/js/medium-mention.js | 2 +- .../wysiwyg/wysiwyg.directive.coffee | 3 + app/modules/components/wysiwyg/wysiwyg.scss | 10 ++ .../components/wysiwyg/wysiwyg.service.coffee | 50 ++++++- ...ort-project-members.controller.spec.coffee | 2 +- .../common/components/wysiwyg-toolbar.jade | 2 +- gulpfile.js | 4 +- package.json | 1 + 13 files changed, 288 insertions(+), 8 deletions(-) create mode 100644 app/coffee/modules/detail.coffee create mode 100644 app/js/markdown-it-lazy-headers.js diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 3ee64100..4b3af7ed 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -185,6 +185,15 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven } ) + # Project ref detail + $routeProvider.when("/project/:pslug/t/:ref", + { + loader: true, + controller: "DetailController", + template: "" + } + ) + $routeProvider.when("/project/:pslug/search", { templateUrl: "search/search.html", diff --git a/app/coffee/modules/base.coffee b/app/coffee/modules/base.coffee index ba8a3d40..ce0ecdca 100644 --- a/app/coffee/modules/base.coffee +++ b/app/coffee/modules/base.coffee @@ -74,6 +74,7 @@ urls = { "blocked-project": "/blocked-project/:project" "project": "/project/:project" + "project-detail-ref": "/project/:project/t/:ref" "project-backlog": "/project/:project/backlog" "project-taskboard": "/project/:project/taskboard/:sprint" "project-kanban": "/project/:project/kanban" diff --git a/app/coffee/modules/base/repository.coffee b/app/coffee/modules/base/repository.coffee index 31c81152..3fbba37f 100644 --- a/app/coffee/modules/base/repository.coffee +++ b/app/coffee/modules/base/repository.coffee @@ -230,6 +230,7 @@ class RepositoryService extends taiga.Service params.issue = options.issueref if options.issueref? params.milestone = options.sslug if options.sslug? params.wikipage = options.wikipage if options.wikipage? + params.ref = options.ref if options.ref? cache = not (options.wikipage or options.sslug) return @.queryOneRaw("resolver", null, params, {cache: cache}) diff --git a/app/coffee/modules/detail.coffee b/app/coffee/modules/detail.coffee new file mode 100644 index 00000000..0385b2d7 --- /dev/null +++ b/app/coffee/modules/detail.coffee @@ -0,0 +1,79 @@ +### +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/detail.coffee +### + +taiga = @.taiga + +mixOf = @.taiga.mixOf +toString = @.taiga.toString +joinStr = @.taiga.joinStr +groupBy = @.taiga.groupBy +bindOnce = @.taiga.bindOnce +bindMethods = @.taiga.bindMethods + +module = angular.module("taigaCommon") + +class DetailController + @.$inject = [ + '$routeParams', + '$tgRepo', + "tgProjectService", + "$tgNavUrls", + "$location" + ] + + constructor: (@params, @repo, @projectService, @navurls, @location) -> + @repo.resolve({ + pslug: @params.pslug, + ref: @params.ref + }) + .then (result) => + if result.issue + url = @navurls.resolve('project-issues-detail', { + project: @projectService.project.get('slug'), + ref: @params.ref + }) + else if result.task + url = @navurls.resolve('project-tasks-detail', { + project: @projectService.project.get('slug'), + ref: @params.ref + }) + else if result.us + url = @navurls.resolve('project-userstories-detail', { + project: @projectService.project.get('slug'), + ref: @params.ref + }) + else if result.epic + url = @navurls.resolve('project-epics-detail', { + project: @projectService.project.get('slug'), + ref: @params.ref + }) + else if result.wikipage + url = @navurls.resolve('project-wiki-page', { + project: @projectService.project.get('slug'), + slug: @params.ref + }) + + @location.path(url) + +module.controller("DetailController", DetailController) diff --git a/app/js/markdown-it-lazy-headers.js b/app/js/markdown-it-lazy-headers.js new file mode 100644 index 00000000..d45ade6c --- /dev/null +++ b/app/js/markdown-it-lazy-headers.js @@ -0,0 +1,132 @@ +// https://github.com/Galadirith/markdown-it-lazy-headers +// Copyright (c) 2015 Edward Fauchon-Jones + +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: + +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// ------------------------------------------------------------------------ + +// This repository incorporates code from +// [markdown-it](https://github.com/markdown-it/markdown-it) covered by the +// following terms: + +// > Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin. +// > +// > Permission is hereby granted, free of charge, to any person +// > obtaining a copy of this software and associated documentation +// > files (the "Software"), to deal in the Software without +// > restriction, including without limitation the rights to use, +// > copy, modify, merge, publish, distribute, sublicense, and/or sell +// > copies of the Software, and to permit persons to whom the +// > Software is furnished to do so, subject to the following +// > conditions: +// > +// > The above copyright notice and this permission notice shall be +// > included in all copies or substantial portions of the Software. +// > +// > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// > EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// > OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// > NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// > HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// > WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// > FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// > OTHER DEALINGS IN THE SOFTWARE. + +// ------------------------------------------------------------------------ + +// This repository incorporates code from +// [markdown-it-math](https://github.com/runarberg/markdown-it-math) covered by the +// following terms: + +// > Copyright (c) 2015 Rúnar Berg Baugsson Sigríðarson +// > +// > Permission is hereby granted, free of charge, to any person obtaining a copy +// > of this software and associated documentation files (the "Software"), to deal +// > in the Software without restriction, including without limitation the rights +// > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// > copies of the Software, and to permit persons to whom the Software is +// > furnished to do so, subject to the following conditions: +// > +// > The above copyright notice and this permission notice shall be included in +// > all copies or substantial portions of the Software. +// > +// > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// > THE SOFTWARE. + +(function() { +'use strict'; + +window.markdownitLazyHeaders = function lazy_headers_plugin(md) { + function heading(state, startLine, endLine, silent) { + var ch, level, tmp, token, + pos = state.bMarks[startLine] + state.tShift[startLine], + max = state.eMarks[startLine]; + + ch = state.src.charCodeAt(pos); + + if (ch !== 0x23/* # */ || pos >= max) { return false; } + + // count heading level + level = 1; + ch = state.src.charCodeAt(++pos); + while (ch === 0x23/* # */ && pos < max && level <= 6) { + level++; + ch = state.src.charCodeAt(++pos); + } + + if (level > 6) { return false; } + + if (silent) { return true; } + + // Let's cut tails like ' ### ' from the end of string + + max = state.skipCharsBack(max, 0x20, pos); // space + tmp = state.skipCharsBack(max, 0x23, pos); // # + if (tmp > pos && state.src.charCodeAt(tmp - 1) === 0x20/* space */) { + max = tmp; + } + + state.line = startLine + 1; + + token = state.push('heading_open', 'h' + String(level), 1); + token.markup = '########'.slice(0, level); + token.map = [ startLine, state.line ]; + + token = state.push('inline', '', 0); + token.content = state.src.slice(pos, max).trim(); + token.map = [ startLine, state.line ]; + token.children = []; + + token = state.push('heading_close', 'h' + String(level), -1); + token.markup = '########'.slice(0, level); + + return true; + } + + md.block.ruler.at('heading', heading, { + alt: [ 'paragraph', 'reference', 'blockquote' ] + }); +}; +}()); diff --git a/app/js/medium-mention.js b/app/js/medium-mention.js index 936874be..5b0fe821 100644 --- a/app/js/medium-mention.js +++ b/app/js/medium-mention.js @@ -196,7 +196,7 @@ var MentionExtension = MediumEditor.Extension.extend({ e.stopPropagation(); var event = document.createEvent('HTMLEvents'); - event.initEvent('click', true, false); + event.initEvent('mousedown', true, false); active.dispatchEvent(event); diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index 3b39a05b..394e7914 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -266,6 +266,9 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad if $scope.mode == 'html' updateMarkdownWithCurrentHtml() + html = wysiwygService.getHTML($scope.markdown) + editorMedium.html(html) + return if $scope.required && !$scope.markdown.length $scope.saving = true diff --git a/app/modules/components/wysiwyg/wysiwyg.scss b/app/modules/components/wysiwyg/wysiwyg.scss index ef9d90ea..465311f0 100644 --- a/app/modules/components/wysiwyg/wysiwyg.scss +++ b/app/modules/components/wysiwyg/wysiwyg.scss @@ -176,6 +176,13 @@ tg-wysiwyg { } .tools { padding-left: 1rem; + &:not(.visible) { + opacity: 0; + pointer-events: none; + a { + cursor: default; + } + } a { display: block; margin-bottom: .5rem; @@ -213,6 +220,9 @@ tg-wysiwyg { .read-mode { cursor: pointer; } + .medium { + border: 1px solid transparent; + } .edit-mode { .markdown, .medium { diff --git a/app/modules/components/wysiwyg/wysiwyg.service.coffee b/app/modules/components/wysiwyg/wysiwyg.service.coffee index 67236ffa..271dc349 100644 --- a/app/modules/components/wysiwyg/wysiwyg.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.service.coffee @@ -23,7 +23,12 @@ ### class WysiwygService - constructor: (@wysiwygCodeHightlighterService) -> + @.$inject = [ + "tgWysiwygCodeHightlighterService", + "tgProjectService", + "$tgNavUrls" + ] + constructor: (@wysiwygCodeHightlighterService, @projectService, @navurls) -> searchEmojiByName: (name) -> return _.filter @.emojis, (it) -> it.name.indexOf(name) != -1 @@ -65,6 +70,20 @@ class WysiwygService return text + replaceUrls: (html) -> + el = document.createElement( 'html' ) + el.innerHTML = html + + links = el.querySelectorAll('a') + + for link in links + if link.getAttribute('href').indexOf('/profile/') != -1 + link.parentNode.replaceChild(document.createTextNode(link.innerText), link) + else if link.getAttribute('href').indexOf('/t/') != -1 + link.parentNode.replaceChild(document.createTextNode(link.innerText), link) + + return el.innerHTML + removeTrailingListBr: (text) -> return text.replace(/

  • (.*?)
    <\/li>/g, '
  • $1
  • ') @@ -90,6 +109,7 @@ class WysiwygService html = html.replace(/ (<\/.*>)/g, "$1") html = @.replaceImgsByEmojiName(html) + html = @.replaceUrls(html) html = @.removeTrailingListBr(html) markdown = toMarkdown(html, { @@ -97,25 +117,47 @@ class WysiwygService converters: [cleanIssueConverter, codeLanguageConverter] }) - return markdown + autoLinkHTML: (html) -> + return Autolinker.link(html, { + mention: 'twitter', + hashtag: 'twitter', + replaceFn: (match) => + if match.getType() == 'mention' + profileUrl = @navurls.resolve('user-profile', { + project: @projectService.project.get('slug'), + username: match.getMention() + }) + + return '@' + match.getMention() + '' + else if match.getType() == 'hashtag' + url = @navurls.resolve('project-detail-ref', { + project: @projectService.project.get('slug'), + ref: match.getHashtag() + }) + + return '#' + match.getHashtag() + '' + }) + getHTML: (text) -> return "" if !text || !text.length options = { breaks: true } - text = @.replaceEmojiNameByImgs(text) md = window.markdownit({ breaks: true }) + md.use(window.markdownitLazyHeaders) + result = md.render(text) + result = @.autoLinkHTML(result) return result angular.module("taigaComponents") - .service("tgWysiwygService", ["tgWysiwygCodeHightlighterService", WysiwygService]) + .service("tgWysiwygService", WysiwygService) diff --git a/app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee b/app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee index 47be1b10..3bfb133a 100644 --- a/app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee +++ b/app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee @@ -326,7 +326,7 @@ describe "ImportProjectMembersCtrl", -> expect(ctrl.displayEmailSelector).to.be.true - it.only "refresh selectable users array with the selected ones", () -> + it "refresh selectable users array with the selected ones", () -> ctrl = $controller("ImportProjectMembersCtrl") ctrl.getDistinctSelectedTaigaUsers = sinon.stub().returns(Immutable.fromJS([ diff --git a/app/partials/common/components/wysiwyg-toolbar.jade b/app/partials/common/components/wysiwyg-toolbar.jade index 24dbe439..035267a8 100644 --- a/app/partials/common/components/wysiwyg-toolbar.jade +++ b/app/partials/common/components/wysiwyg-toolbar.jade @@ -34,7 +34,7 @@ tg-svg(svg-icon="icon-question") span(translate="COMMON.WYSIWYG.MARKDOWN_HELP") -.tools(ng-if="editMode") +.tools(ng-class="{\"visible\": editMode}") a.e2e-save-editor( ng-class="{disabled: required && !markdown.length}" tg-loading="saving" diff --git a/gulpfile.js b/gulpfile.js index f141184e..244f01c5 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -187,12 +187,14 @@ paths.libs = [ paths.modules + "highlight.js/lib/highlight.js", paths.modules + "prismjs/prism.js", paths.modules + "medium-editor-autolist/dist/autolist.js", + paths.modules + "autolinker/dist/Autolinker.js", paths.app + "js/dom-autoscroller.js", paths.app + "js/dragula-drag-multiple.js", paths.app + "js/tg-repeat.js", paths.app + "js/sha1-custom.js", paths.app + "js/murmurhash3_gc.js", - paths.app + "js/medium-mention.js" + paths.app + "js/medium-mention.js", + paths.app + "js/markdown-it-lazy-headers.js" ]; paths.libs.forEach(function(file) { diff --git a/package.json b/package.json index a0ccf7d2..736491b1 100644 --- a/package.json +++ b/package.json @@ -109,6 +109,7 @@ "angular-translate-interpolation-messageformat": "2.10.0", "angular-translate-loader-partial": "2.10.0", "angular-translate-loader-static-files": "2.10.0", + "autolinker": "^1.4.2", "awesomplete": "^1.0.0", "bluebird": "^3.4.6", "bourbon": "git+https://github.com/thoughtbot/bourbon.git", From 37b909e005447f122fc9efae5ea79806acfb574e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 15 Mar 2017 18:28:45 +0100 Subject: [PATCH 14/33] Allow attachments and history section after a webpage is created --- app/coffee/modules/wiki/main.coffee | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index 88fdcf02..4e7da59e 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -59,6 +59,7 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) constructor: (@scope, @rootscope, @repo, @model, @confirm, @rs, @params, @q, @location, @filter, @log, @appMetaService, @navUrls, @analytics, @translate, @errorHandlingService, @projectService) -> @scope.$on("wiki:links:move", @.moveLink) + @scope.$on("wikipage:add", @.loadWiki) @scope.projectSlug = @params.pslug @scope.wikiSlug = @params.slug @scope.wikiTitle = @scope.wikiSlug @@ -97,7 +98,7 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.$emit('project:loaded', project) return project - loadWiki: -> + loadWiki: => promise = @rs.wiki.getBySlug(@scope.projectId, @params.slug) promise.then (wiki) => @scope.wiki = wiki @@ -227,6 +228,7 @@ $qqueue, $repo, $analytics, wikiHistoryService) -> onSuccess = (wikiPage) -> if not $scope.item.id? $analytics.trackEvent("wikipage", "create", "create wiki page", 1) + $scope.$emit("wikipage:add") wikiHistoryService.loadHistoryEntries() $confirm.notify("success") From b2af7894120cf4eefb501c9107349b025f349c20 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 16 Mar 2017 08:10:24 +0100 Subject: [PATCH 15/33] fix issue 5011 - support to pipe markdownn links --- app/coffee/utils.coffee | 5 ++++- app/modules/components/wysiwyg/wysiwyg.service.coffee | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/coffee/utils.coffee b/app/coffee/utils.coffee index f9ec5c14..85fce1bc 100644 --- a/app/coffee/utils.coffee +++ b/app/coffee/utils.coffee @@ -259,7 +259,10 @@ getMatches = (string, regex, index) -> match = null while match = regex.exec(string) - matches.push(match[index]) + if index == -1 + matches.push(match) + else + matches.push(match[index]) return matches diff --git a/app/modules/components/wysiwyg/wysiwyg.service.coffee b/app/modules/components/wysiwyg/wysiwyg.service.coffee index 271dc349..218a0fc1 100644 --- a/app/modules/components/wysiwyg/wysiwyg.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.service.coffee @@ -70,6 +70,15 @@ class WysiwygService return text + pipeLinks: (text) -> + return text.replace /\[\[(.*?)\]\]/g, (match, p1, offset, str) -> + linkParams = p1.split('|') + + link = linkParams[0] + title = linkParams[1] || linkParams[0] + + return '[' + title + '](' + link + ')' + replaceUrls: (html) -> el = document.createElement( 'html' ) el.innerHTML = html @@ -146,7 +155,9 @@ class WysiwygService options = { breaks: true } + text = @.replaceEmojiNameByImgs(text) + text = @.pipeLinks(text) md = window.markdownit({ breaks: true From 2b4fac32f4a77b88d8d5e708597e5409ea35d606 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 16 Mar 2017 08:35:55 +0100 Subject: [PATCH 16/33] fix custom-field wysiwyg --- .../modules/common/custom-field-values.coffee | 14 ++++++++++---- .../custom-attributes/custom-attribute-value.jade | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/coffee/modules/common/custom-field-values.coffee b/app/coffee/modules/common/custom-field-values.coffee index 8a64ea95..8b2ac9d3 100644 --- a/app/coffee/modules/common/custom-field-values.coffee +++ b/app/coffee/modules/common/custom-field-values.coffee @@ -150,7 +150,7 @@ module.directive("tgCustomAttributesValues", ["$tgTemplate", "$tgStorage", "$tra CustomAttributesValuesDirective]) -CustomAttributeValueDirective = ($template, $selectedText, $compile, $translate, datePickerConfigService) -> +CustomAttributeValueDirective = ($template, $selectedText, $compile, $translate, datePickerConfigService, wysiwygService) -> template = $template.get("custom-attributes/custom-attribute-value.html", true) templateEdit = $template.get("custom-attributes/custom-attribute-value-edit.html", true) @@ -173,9 +173,13 @@ CustomAttributeValueDirective = ($template, $selectedText, $compile, $translate, type: attributeValue.type } + scope = $scope.$new() + scope.attributeHtml = wysiwygService.getHTML(value) + if editable and (edit or not value) html = templateEdit(ctx) - html = $compile(html)($scope) + + html = $compile(html)(scope) $el.html(html) if attributeValue.type == DATE_TYPE @@ -190,7 +194,7 @@ CustomAttributeValueDirective = ($template, $selectedText, $compile, $translate, $el.picker = new Pikaday(datePickerConfig) else html = template(ctx) - html = $compile(html)($scope) + html = $compile(html)(scope) $el.html(html) isEditable = -> @@ -207,6 +211,8 @@ CustomAttributeValueDirective = ($template, $selectedText, $compile, $translate, $scope.cancelCustomRichText= () => render(attributeValue, false) + return null + submit = debounce 2000, (event) => event.preventDefault() @@ -270,4 +276,4 @@ CustomAttributeValueDirective = ($template, $selectedText, $compile, $translate, } module.directive("tgCustomAttributeValue", ["$tgTemplate", "$selectedText", "$compile", "$translate", - "tgDatePickerConfigService", CustomAttributeValueDirective]) + "tgDatePickerConfigService", "tgWysiwygService", CustomAttributeValueDirective]) diff --git a/app/partials/custom-attributes/custom-attribute-value.jade b/app/partials/custom-attributes/custom-attribute-value.jade index 0bd427e5..66dc21d4 100644 --- a/app/partials/custom-attributes/custom-attribute-value.jade +++ b/app/partials/custom-attributes/custom-attribute-value.jade @@ -14,7 +14,7 @@ <%- value %> <% } else if (type=="richtext") { %> .custom-field-value.js-value-view-mode.wysiwyg - div(ng-bind-html!="\'<%- value %>\'|markdownToHTML") + div(ng-bind-html="attributeHtml") <% } else { %> .custom-field-value.js-value-view-mode span From 686254f6383801c03d40cd2a72c5538be566f9b6 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 16 Mar 2017 09:20:02 +0100 Subject: [PATCH 17/33] fix #5006 - fix drag multiple us to sprint --- app/coffee/modules/backlog/main.coffee | 2 ++ app/coffee/modules/resources/userstories.coffee | 7 +------ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index a4a93e75..cca2ab02 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -408,6 +408,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F afterDestination = _.slice(@scope.userstories, newUsIndex) @scope.userstories = @scope.userstories.concat(usList) + else # From backlog to sprint for us in usList # delete from sprint userstories _.remove @scope.userstories, (it) -> it.id == us.id @@ -479,6 +480,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F # refresh order @scope.userstories = _.sortBy @scope.userstories, (it) => @.backlogOrder[it.id] + @scope.visibleUserStories = _.map @scope.userstories, (it) -> return it.ref for sprint in @scope.sprints sprint.user_stories = _.sortBy sprint.user_stories, (it) => @.milestonesOrder[sprint.id][it.id] diff --git a/app/coffee/modules/resources/userstories.coffee b/app/coffee/modules/resources/userstories.coffee index f3aeb5f4..4d28b529 100644 --- a/app/coffee/modules/resources/userstories.coffee +++ b/app/coffee/modules/resources/userstories.coffee @@ -102,11 +102,6 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) -> params = {project_id: projectId, bulk_stories: data} return $http.post(url, params) - service.bulkUpdateMilestone = (projectId, milestoneId, data) -> - url = $urls.resolve("bulk-update-us-milestone") - params = {project_id: projectId, milestone_id: milestoneId, bulk_stories: data} - return $http.post(url, params) - service.bulkUpdateKanbanOrder = (projectId, data) -> url = $urls.resolve("bulk-update-us-kanban-order") params = {project_id: projectId, bulk_stories: data} @@ -116,7 +111,7 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) -> url = $urls.resolve("bulk-update-us-milestone") data = _.map data, (us) -> return { - us_id: us.id + us_id: us.id || us.us_id order: us.order } From aa6fea74c98cf8210d7127375475c521fd61c9d6 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 16 Mar 2017 09:56:50 +0100 Subject: [PATCH 18/33] Revert "fix #5006 - fix drag multiple us to sprint" This reverts commit 686254f6383801c03d40cd2a72c5538be566f9b6. --- app/coffee/modules/backlog/main.coffee | 2 -- app/coffee/modules/resources/userstories.coffee | 7 ++++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index cca2ab02..a4a93e75 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -408,7 +408,6 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F afterDestination = _.slice(@scope.userstories, newUsIndex) @scope.userstories = @scope.userstories.concat(usList) - else # From backlog to sprint for us in usList # delete from sprint userstories _.remove @scope.userstories, (it) -> it.id == us.id @@ -480,7 +479,6 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F # refresh order @scope.userstories = _.sortBy @scope.userstories, (it) => @.backlogOrder[it.id] - @scope.visibleUserStories = _.map @scope.userstories, (it) -> return it.ref for sprint in @scope.sprints sprint.user_stories = _.sortBy sprint.user_stories, (it) => @.milestonesOrder[sprint.id][it.id] diff --git a/app/coffee/modules/resources/userstories.coffee b/app/coffee/modules/resources/userstories.coffee index 4d28b529..f3aeb5f4 100644 --- a/app/coffee/modules/resources/userstories.coffee +++ b/app/coffee/modules/resources/userstories.coffee @@ -102,6 +102,11 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) -> params = {project_id: projectId, bulk_stories: data} return $http.post(url, params) + service.bulkUpdateMilestone = (projectId, milestoneId, data) -> + url = $urls.resolve("bulk-update-us-milestone") + params = {project_id: projectId, milestone_id: milestoneId, bulk_stories: data} + return $http.post(url, params) + service.bulkUpdateKanbanOrder = (projectId, data) -> url = $urls.resolve("bulk-update-us-kanban-order") params = {project_id: projectId, bulk_stories: data} @@ -111,7 +116,7 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) -> url = $urls.resolve("bulk-update-us-milestone") data = _.map data, (us) -> return { - us_id: us.id || us.us_id + us_id: us.id order: us.order } From 549348e672b51920e33c7c256fbea2bd15cf5ddd Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 16 Mar 2017 09:57:52 +0100 Subject: [PATCH 19/33] fix bug dragging from sprint to backlog --- app/coffee/modules/backlog/main.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index a4a93e75..1dedc574 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -479,6 +479,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F # refresh order @scope.userstories = _.sortBy @scope.userstories, (it) => @.backlogOrder[it.id] + @scope.visibleUserStories = _.map @scope.userstories, (it) -> return it.ref for sprint in @scope.sprints sprint.user_stories = _.sortBy sprint.user_stories, (it) => @.milestonesOrder[sprint.id][it.id] From abe13d06c4519a0d89e0728424cde5f0d7ffa9ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 15 Mar 2017 18:52:42 +0100 Subject: [PATCH 20/33] Fix drag&drop stories from backlog to spritn --- app/coffee/modules/resources/userstories.coffee | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/app/coffee/modules/resources/userstories.coffee b/app/coffee/modules/resources/userstories.coffee index f3aeb5f4..a541c739 100644 --- a/app/coffee/modules/resources/userstories.coffee +++ b/app/coffee/modules/resources/userstories.coffee @@ -112,17 +112,6 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) -> params = {project_id: projectId, bulk_stories: data} return $http.post(url, params) - service.bulkUpdateMilestone = (projectId, milestoneId, data) -> - url = $urls.resolve("bulk-update-us-milestone") - data = _.map data, (us) -> - return { - us_id: us.id - order: us.order - } - - params = {project_id: projectId, milestone_id: milestoneId, bulk_stories: data} - return $http.post(url, params) - service.listValues = (projectId, type) -> params = {"project": projectId} service.storeQueryParams(projectId, params) From 447992984ab6339f24f8f1c60cdef2f99c1459cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 15 Mar 2017 18:53:29 +0100 Subject: [PATCH 21/33] Fix move stories from backlog to current sprint button --- app/coffee/modules/backlog/main.coffee | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index 1dedc574..326a0b8c 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -653,7 +653,12 @@ BacklogDirective = ($repo, $rootscope, $translate, $rs) -> # Update the total of points sprint.total_points += totalExtraPoints - $rs.userstories.bulkUpdateMilestone($scope.project.id, $scope.sprints[0].id, selectedUss).then => + data = _.map selectedUss, (us) -> + return { + us_id: us.id + order: us.sprint_order + } + $rs.userstories.bulkUpdateMilestone($scope.project.id, $scope.sprints[0].id, data).then => $ctrl.loadSprints() $ctrl.loadProjectStats() $ctrl.toggleVelocityForecasting() From 1c46ce35af861939dbbd9cacc0faaaceb694f816 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 16 Mar 2017 14:55:49 +0100 Subject: [PATCH 22/33] add p after pre in wysiwyg after focus --- app/modules/components/wysiwyg/wysiwyg.directive.coffee | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index 394e7914..feee02ed 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -76,6 +76,8 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad refreshCodeBlocks(elm) refreshCodeBlocks = (mediumInstance) -> + return if !mediumInstance + # clean empty

    content editable adds it when range.extractContents has been execute it for mainChildren in mediumInstance.elements[0].children if mainChildren && mainChildren.tagName.toLowerCase() == 'p' && !mainChildren.innerHTML.trim().length @@ -493,6 +495,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad $scope.$applyAsync () -> if !$scope.editMode setEditMode(true) + refreshCodeBlocks(mediumInstance) mediumInstance.subscribe 'editableDrop', (event) -> $scope.onUploadFile({files: event.dataTransfer.files, cb: uploadEnd}) From aeca361de819612feb14a6fe5c467ed8a3a9cc70 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Fri, 17 Mar 2017 08:45:51 +0100 Subject: [PATCH 23/33] add hightlight code on save --- app/modules/components/wysiwyg/wysiwyg.directive.coffee | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index feee02ed..370aabc5 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -98,7 +98,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad pre.nextElementSibling.appendChild(document.createElement('br')) # add p after every pre - else if !pre.nextElementSibling || pre.nextElementSibling.nodeName.toLowerCase() != 'p' + else if !pre.nextElementSibling || ['p', 'ul', 'h1', 'h2', 'h3'].indexOf(pre.nextElementSibling.nodeName.toLowerCase()) == -1 p = document.createElement('p') p.appendChild(document.createElement('br')) @@ -221,7 +221,9 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad html = wysiwygService.getHTML(markdown) editorMedium.html(html) wysiwygCodeHightlighterService.addHightlighter(mediumInstance.elements[0]) - refreshCodeBlocks(mediumInstance) + + if $scope.editMode + refreshCodeBlocks(mediumInstance) $scope.saveSnippet = (lan, code) -> $scope.codeEditorVisible = false @@ -268,8 +270,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad if $scope.mode == 'html' updateMarkdownWithCurrentHtml() - html = wysiwygService.getHTML($scope.markdown) - editorMedium.html(html) + setHtmlMedium($scope.markdown) return if $scope.required && !$scope.markdown.length From a16946edd38faa5b826d876011f2ef7892c5ca39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 17 Mar 2017 13:03:14 +0100 Subject: [PATCH 24/33] Prevent long text in the invitation message form --- .../invite-members/invite-members-form/invite-members-form.jade | 1 + 1 file changed, 1 insertion(+) diff --git a/app/modules/invite-members/invite-members-form/invite-members-form.jade b/app/modules/invite-members/invite-members-form/invite-members-form.jade index b2642606..e7a066e7 100644 --- a/app/modules/invite-members/invite-members-form/invite-members-form.jade +++ b/app/modules/invite-members/invite-members-form/invite-members-form.jade @@ -59,6 +59,7 @@ form.invite-members-form(ng-submit="vm.sendInvites(vm.inviteContacts)") textarea.invite-members-single-msg( ng-model="vm.inviteContactsMessage" placeholder="{{'LIGHTBOX.ADD_MEMBER.PLACEHOLDER_INVITATION_TEXT' | translate}}" + maxlength="250" ) button.button-green.invite-members-single-send.e2e-invite-members-single-send( type="submit" From 823b86996901827ae95dd648687e6713fe385490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 17 Mar 2017 13:09:25 +0100 Subject: [PATCH 25/33] Remove wikiTitle in the wiki pages --- app/coffee/modules/wiki/main.coffee | 6 ++---- app/coffee/modules/wiki/pages-list.coffee | 2 -- app/partials/wiki/wiki.jade | 2 -- app/styles/layout/wiki.scss | 6 ------ 4 files changed, 2 insertions(+), 14 deletions(-) diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index 4e7da59e..1170e04d 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -62,7 +62,6 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.$on("wikipage:add", @.loadWiki) @scope.projectSlug = @params.pslug @scope.wikiSlug = @params.slug - @scope.wikiTitle = @scope.wikiSlug @scope.sectionName = "Wiki" @scope.linksVisible = false @@ -76,7 +75,7 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) _setMeta: -> title = @translate.instant("WIKI.PAGE_TITLE", { - wikiPageName: @scope.wikiTitle + wikiPageName: @scope.wikiSlug projectName: @scope.project.name }) description = @translate.instant("WIKI.PAGE_DESCRIPTION", { @@ -130,7 +129,6 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) }) selectedWikiLink = _.find(wikiLinks, {href: @scope.wikiSlug}) - @scope.wikiTitle = selectedWikiLink.title if selectedWikiLink? loadInitialData: -> project = @.loadProject() @@ -145,7 +143,7 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) delete: -> title = @translate.instant("WIKI.DELETE_LIGHTBOX_TITLE") - message = @scope.wikiTitle + message = @scope.wikiSlug @confirm.askOnDelete(title, message).then (askResponse) => onSuccess = => diff --git a/app/coffee/modules/wiki/pages-list.coffee b/app/coffee/modules/wiki/pages-list.coffee index a26603c9..b5e79918 100644 --- a/app/coffee/modules/wiki/pages-list.coffee +++ b/app/coffee/modules/wiki/pages-list.coffee @@ -51,7 +51,6 @@ class WikiPagesListController extends mixOf(taiga.Controller, taiga.PageMixin) @navUrls, @errorHandlingService, @projectService) -> @scope.projectSlug = @params.pslug @scope.wikiSlug = @params.slug - @scope.wikiTitle = @scope.wikiSlug @scope.sectionName = "Wiki" @scope.linksVisible = false @@ -87,7 +86,6 @@ class WikiPagesListController extends mixOf(taiga.Controller, taiga.PageMixin) }) selectedWikiLink = _.find(wikiLinks, {href: @scope.wikiSlug}) - @scope.wikiTitle = selectedWikiLink.title if selectedWikiLink? loadInitialData: -> project = @.loadProject() diff --git a/app/partials/wiki/wiki.jade b/app/partials/wiki/wiki.jade index 50a37af7..9f0247a9 100644 --- a/app/partials/wiki/wiki.jade +++ b/app/partials/wiki/wiki.jade @@ -16,8 +16,6 @@ div.wrapper( span(tg-bo-bind="project.name") span.green(translate="PROJECT.SECTION.WIKI") - h2.wiki-title(ng-bind='wikiTitle') - tg-wiki-wysiwyg(model="wiki") .summary.wiki-summary( diff --git a/app/styles/layout/wiki.scss b/app/styles/layout/wiki.scss index e1b26a37..5f426dcc 100644 --- a/app/styles/layout/wiki.scss +++ b/app/styles/layout/wiki.scss @@ -3,10 +3,4 @@ .wysiwyg { margin-bottom: 0; } - .wiki-title { - @include font-type(light); - @include font-size(xxlarge); - margin-bottom: 0; - padding: 1rem; - } } From f527213c2cea883a68a6c87a28362ee8e1ce0177 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Wed, 22 Mar 2017 10:17:50 +0100 Subject: [PATCH 26/33] Add style for markdown inline code blocks --- app/modules/components/wysiwyg/wysiwyg.scss | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/modules/components/wysiwyg/wysiwyg.scss b/app/modules/components/wysiwyg/wysiwyg.scss index 465311f0..3e538f16 100644 --- a/app/modules/components/wysiwyg/wysiwyg.scss +++ b/app/modules/components/wysiwyg/wysiwyg.scss @@ -101,6 +101,16 @@ unicode-bidi: embed; white-space: pre-wrap; } + code { + @include font-size(small); + background: $code-bg; + color: $whitish; + direction: ltr; + font-family: 'courier new', 'monospace'; + overflow: auto; + padding: .2rem; + unicode-bidi: embed; + } table { border: $gray-light 1px solid; margin-bottom: 1rem; From 3851d1fdb40f0c2cf5a718b707097986cd5b1929 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 21 Mar 2017 17:58:56 +0100 Subject: [PATCH 27/33] Now custom color selection flow is coherent --- .../color-selector/color-selector.controller.coffee | 8 +++++--- .../color-selector.controller.spec.coffee | 6 +++--- .../components/color-selector/color-selector.jade | 10 +++++----- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/app/modules/components/color-selector/color-selector.controller.coffee b/app/modules/components/color-selector/color-selector.controller.coffee index 25bd621e..48a1013e 100644 --- a/app/modules/components/color-selector/color-selector.controller.coffee +++ b/app/modules/components/color-selector/color-selector.controller.coffee @@ -40,7 +40,8 @@ class ColorSelectorController @.colorList = _.dropRight(@.colorList) setColor: (color) -> - @.color = @.initColor + @.color = color + @.customColor = color resetColor: () -> if @.isColorRequired and not @.color @@ -48,6 +49,7 @@ class ColorSelectorController toggleColorList: () -> @.displayColorList = !@.displayColorList + @.setColor(@.initColor) @.resetColor() onSelectDropdownColor: (color) -> @@ -57,8 +59,8 @@ class ColorSelectorController onKeyDown: (event) -> if event.which == 13 # ENTER - if @.color or not @.isColorRequired - @.onSelectDropdownColor(@.color) + if @.customColor or not @.isColorRequired + @.onSelectDropdownColor(@.customColor) event.preventDefault() diff --git a/app/modules/components/color-selector/color-selector.controller.spec.coffee b/app/modules/components/color-selector/color-selector.controller.spec.coffee index 5fe727f6..86d08ba8 100644 --- a/app/modules/components/color-selector/color-selector.controller.spec.coffee +++ b/app/modules/components/color-selector/color-selector.controller.spec.coffee @@ -73,11 +73,11 @@ describe "ColorSelector", -> colorSelectorCtrl.onSelectDropdownColor = sinon.stub() event = {which: 13, preventDefault: sinon.stub()} - color = "#fabada" + customColor = "#fabada" - colorSelectorCtrl.color = color + colorSelectorCtrl.customColor = customColor colorSelectorCtrl.onKeyDown(event) expect(event.preventDefault).have.been.called expect(colorSelectorCtrl.onSelectDropdownColor).have.been.called - expect(colorSelectorCtrl.onSelectDropdownColor).have.been.calledWith(color) + expect(colorSelectorCtrl.onSelectDropdownColor).have.been.calledWith(customColor) diff --git a/app/modules/components/color-selector/color-selector.jade b/app/modules/components/color-selector/color-selector.jade index dda5becc..ad0cfdad 100644 --- a/app/modules/components/color-selector/color-selector.jade +++ b/app/modules/components/color-selector/color-selector.jade @@ -26,18 +26,18 @@ ) .custom-color-selector .display-custom-color.empty-color( - ng-if="!vm.color" + ng-if="!vm.customColor" ) .display-custom-color-wrapper .display-custom-color( - ng-if="vm.color" - ng-style="{'background': vm.color}" - ng-click="vm.onSelectDropdownColor(vm.color)" + ng-if="vm.customColor" + ng-style="{'background': vm.customColor}" + ng-click="vm.onSelectDropdownColor(vm.customColor)" ) input.custom-color-input( type="text" maxlength="7" placeholder="Type hex code" - ng-model="vm.color" + ng-model="vm.customColor" ng-keydown="vm.onKeyDown($event)" ) From e784ec3276d000815d261f589fe95554db8a7e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 21 Mar 2017 16:00:33 +0100 Subject: [PATCH 28/33] Show fold/unfold button in cards only when needed --- app/modules/components/card/card-templates/card-unfold.jade | 2 +- app/modules/components/card/card.controller.coffee | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/modules/components/card/card-templates/card-unfold.jade b/app/modules/components/card/card-templates/card-unfold.jade index cefcfc47..5ee7fcf1 100644 --- a/app/modules/components/card/card-templates/card-unfold.jade +++ b/app/modules/components/card/card-templates/card-unfold.jade @@ -1,6 +1,6 @@ .card-unfold.ng-animate-disabled( ng-click="vm.toggleFold()" - ng-if="vm.visible('unfold')" + ng-if="vm.visible('unfold') && (vm.hasTasks() || vm.hasVisibleAttachments())" role="button" ) tg-svg(svg-icon="icon-view-more") diff --git a/app/modules/components/card/card.controller.coffee b/app/modules/components/card/card.controller.coffee index 97ec971b..c8627668 100644 --- a/app/modules/components/card/card.controller.coffee +++ b/app/modules/components/card/card.controller.coffee @@ -23,6 +23,12 @@ class CardController visible: (name) -> return @.zoom.indexOf(name) != -1 + hasTasks: () -> + return @.item.getIn(['model', 'tasks']).size > 0 + + hasVisibleAttachments: () -> + return @.item.get('images').size > 0 + toggleFold: () -> @.onToggleFold({id: @.item.get('id')}) From 48d4c53810c6066d8dd35439b5c0d84d69fd6041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 21 Mar 2017 12:08:41 +0100 Subject: [PATCH 29/33] Show error message on jira import fail --- .../create/import/import-project.controller.coffee | 7 +++++-- .../create/import/import-project.controller.spec.coffee | 8 ++++++++ .../create/jira-import/jira-import.service.coffee | 4 +++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/modules/projects/create/import/import-project.controller.coffee b/app/modules/projects/create/import/import-project.controller.coffee index d2967f64..2318759c 100644 --- a/app/modules/projects/create/import/import-project.controller.coffee +++ b/app/modules/projects/create/import/import-project.controller.coffee @@ -28,9 +28,10 @@ class ImportProjectController '$routeParams', '$tgNavUrls', '$tgConfig', + '$tgConfirm', ] - constructor: (@trelloService, @jiraService, @githubService, @asanaService, @location, @window, @routeParams, @tgNavUrls, @config) -> + constructor: (@trelloService, @jiraService, @githubService, @asanaService, @location, @window, @routeParams, @tgNavUrls, @config, @confirm) -> start: -> @.token = null @@ -88,7 +89,9 @@ class ImportProjectController @window.open(url, "_self") else if from == "jira" @jiraService.getAuthUrl(@.jiraUrl).then (url) => - @window.open(url, "_self") + @window.open url, "_self" + , (err) => + @confirm.notify('error', err) else if from == "github" callbackUri = @location.absUrl() + "/github" @githubService.getAuthUrl(callbackUri).then (url) => diff --git a/app/modules/projects/create/import/import-project.controller.spec.coffee b/app/modules/projects/create/import/import-project.controller.spec.coffee index 670b6484..36735fdf 100644 --- a/app/modules/projects/create/import/import-project.controller.spec.coffee +++ b/app/modules/projects/create/import/import-project.controller.spec.coffee @@ -68,6 +68,13 @@ describe "ImportProjectCtrl", -> $provide.value("$window", mocks.window) + _mockConfirm = -> + mocks.confirm = { + notify: sinon.stub() + } + + $provide.value("$tgConfirm", mocks.confirm) + _mockLocation = -> mocks.location = { search: sinon.stub() @@ -98,6 +105,7 @@ describe "ImportProjectCtrl", -> _mockJiraImportService() _mockAsanaImportService() _mockWindow() + _mockConfirm() _mockLocation() _mockTgNavUrls() _mockRouteParams() diff --git a/app/modules/projects/create/jira-import/jira-import.service.coffee b/app/modules/projects/create/jira-import/jira-import.service.coffee index f9fcbe2e..cbd87116 100644 --- a/app/modules/projects/create/jira-import/jira-import.service.coffee +++ b/app/modules/projects/create/jira-import/jira-import.service.coffee @@ -41,10 +41,12 @@ class JiraImportService extends taiga.Service @resources.jiraImporter.importProject(@.url, @.token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType, importerType) getAuthUrl: (url) -> - return new Promise (resolve) => + return new Promise (resolve, reject) => @resources.jiraImporter.getAuthUrl(url).then (response) => @.authUrl = response.data.url resolve(@.authUrl) + , (err) => + reject(err.data._error_message) authorize: () -> return new Promise (resolve, reject) => From 62accc1691e66506052e0cb71641e2eaddec3d3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Wed, 22 Mar 2017 08:52:33 +0100 Subject: [PATCH 30/33] Adding help icon in jira importer --- app/locales/taiga/locale-en.json | 1 + app/modules/projects/create/import/import-project.jade | 3 +++ 2 files changed, 4 insertions(+) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index bfb1cdcc..54ea96c9 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -996,6 +996,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE_IT": "(How to configure it)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/modules/projects/create/import/import-project.jade b/app/modules/projects/create/import/import-project.jade index aae83c75..70f1a6a4 100644 --- a/app/modules/projects/create/import/import-project.jade +++ b/app/modules/projects/create/import/import-project.jade @@ -18,6 +18,9 @@ .import-project-name-wrapper span.import-project-name Jira p.import-project-description(translate="PROJECT.IMPORT.JIRA.SELECTOR") + a(target="_blank", + href="https://tree.taiga.io/support/importers/jira-importer/" + translate="PROJECT.IMPORT.JIRA.HOW_TO_CONFIGURE_IT") fieldset.import-project-url(ng-if="vm.unfoldedOptions == 'jira'") label( for="jira-host" From da067e1d7b578d77d6b28d80464363b004bf17d7 Mon Sep 17 00:00:00 2001 From: xaviju Date: Wed, 22 Mar 2017 15:26:48 +0100 Subject: [PATCH 31/33] Configuration --- app/locales/taiga/locale-en.json | 2 +- .../projects/create/import/import-project.jade | 11 +++++++---- .../projects/create/import/import-project.scss | 6 +++++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 54ea96c9..93422554 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -996,7 +996,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", - "HOW_TO_CONFIGURE_IT": "(How to configure it)", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/modules/projects/create/import/import-project.jade b/app/modules/projects/create/import/import-project.jade index 70f1a6a4..ff45d5da 100644 --- a/app/modules/projects/create/import/import-project.jade +++ b/app/modules/projects/create/import/import-project.jade @@ -17,10 +17,13 @@ ) .import-project-name-wrapper span.import-project-name Jira - p.import-project-description(translate="PROJECT.IMPORT.JIRA.SELECTOR") - a(target="_blank", - href="https://tree.taiga.io/support/importers/jira-importer/" - translate="PROJECT.IMPORT.JIRA.HOW_TO_CONFIGURE_IT") + p.import-project-description + span(translate="PROJECT.IMPORT.JIRA.SELECTOR") + a( + target="_blank" + href="https://tree.taiga.io/support/importers/jira-importer/" + translate="PROJECT.IMPORT.JIRA.HOW_TO_CONFIGURE" + ) fieldset.import-project-url(ng-if="vm.unfoldedOptions == 'jira'") label( for="jira-host" diff --git a/app/modules/projects/create/import/import-project.scss b/app/modules/projects/create/import/import-project.scss index 2c84f33c..cec04c38 100644 --- a/app/modules/projects/create/import/import-project.scss +++ b/app/modules/projects/create/import/import-project.scss @@ -40,6 +40,10 @@ &-description { @include font-type(light); margin-bottom: 0; + a { + color: $primary; + margin-left: .3rem; + } } &-url { margin-top: .5rem; @@ -50,6 +54,6 @@ &-button { background: $primary; color: $white; - padding: .25rem 1rem; + padding: .4rem 1rem; } } From f2fe2ec1dfe771e141accbaae3c139cab53fee9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Thu, 23 Mar 2017 18:44:11 +0100 Subject: [PATCH 32/33] Adding jira oauth verifier param --- .../projects/create/import/import-project.controller.coffee | 3 ++- .../projects/create/jira-import/jira-import.service.coffee | 4 ++-- app/modules/resources/importers-resource.service.coffee | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/modules/projects/create/import/import-project.controller.coffee b/app/modules/projects/create/import/import-project.controller.coffee index 2318759c..3c0d3fa7 100644 --- a/app/modules/projects/create/import/import-project.controller.coffee +++ b/app/modules/projects/create/import/import-project.controller.coffee @@ -76,7 +76,8 @@ class ImportProjectController jiraOauthToken = locationSearch.oauth_token if jiraOauthToken - return @jiraService.authorize().then ((data) => + jiraOauthVerifier = locationSearch.oauth_verifier + return @jiraService.authorize(jiraOauthVerifier).then ((data) => @location.search({token: data.token, url: data.url}) ), @.cancelCurrentImport.bind(this) else diff --git a/app/modules/projects/create/jira-import/jira-import.service.coffee b/app/modules/projects/create/jira-import/jira-import.service.coffee index cbd87116..65d0d2f3 100644 --- a/app/modules/projects/create/jira-import/jira-import.service.coffee +++ b/app/modules/projects/create/jira-import/jira-import.service.coffee @@ -48,9 +48,9 @@ class JiraImportService extends taiga.Service , (err) => reject(err.data._error_message) - authorize: () -> + authorize: (oauth_verifier) -> return new Promise (resolve, reject) => - @resources.jiraImporter.authorize().then ((response) => + @resources.jiraImporter.authorize(oauth_verifier).then ((response) => @.token = response.data.token @.url = response.data.url resolve(response.data) diff --git a/app/modules/resources/importers-resource.service.coffee b/app/modules/resources/importers-resource.service.coffee index 82479bf2..5ac517dc 100644 --- a/app/modules/resources/importers-resource.service.coffee +++ b/app/modules/resources/importers-resource.service.coffee @@ -70,9 +70,9 @@ JiraResource = (urlsService, http) -> url = urlsService.resolve("importers-jira-auth-url") + "?url=" + jira_url return http.get(url) - service.authorize = () -> + service.authorize = (oauth_verifier) -> url = urlsService.resolve("importers-jira-authorize") - return http.post(url) + return http.post(url, {oauth_verifier: oauth_verifier}) service.listProjects = (jira_url, token) -> url = urlsService.resolve("importers-jira-list-projects") From 51b2208740a39b985677bd1db29645a967318d67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 23 Mar 2017 18:49:38 +0100 Subject: [PATCH 33/33] [i18n] Update locales --- app/locales/taiga/locale-ca.json | 8 +- app/locales/taiga/locale-de.json | 8 +- app/locales/taiga/locale-es.json | 10 +- app/locales/taiga/locale-fi.json | 8 +- app/locales/taiga/locale-fr.json | 122 +++++++------- app/locales/taiga/locale-it.json | 8 +- app/locales/taiga/locale-ja.json | 8 +- app/locales/taiga/locale-ko.json | 122 +++++++------- app/locales/taiga/locale-nb.json | 8 +- app/locales/taiga/locale-nl.json | 8 +- app/locales/taiga/locale-pl.json | 8 +- app/locales/taiga/locale-pt-br.json | 164 +++++++++--------- app/locales/taiga/locale-ru.json | 38 +++-- app/locales/taiga/locale-sv.json | 8 +- app/locales/taiga/locale-tr.json | 232 +++++++++++++------------- app/locales/taiga/locale-zh-hans.json | 36 ++-- app/locales/taiga/locale-zh-hant.json | 8 +- 17 files changed, 453 insertions(+), 351 deletions(-) diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index 5bf8f9f7..0fecfa6b 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Ajuda de Markdown" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Has oblidat la contrasenya?", "ACTION_ENTER": "Entrar", "ACTION_SIGN_IN": "Entrar", - "PLACEHOLDER_AUTH_PASSWORD": "Contrasenya (sensible a majúscules i minúscules)" + "PLACEHOLDER_AUTH_PASSWORD": "Contrasenya (sensible a majúscules i minúscules)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "Segons els Oompa Loompas, el vostre nom d'usuari/correu electrònic o contrasenya són incorrectes.", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index b709615c..1495f427 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Markdown syntax Hilfe" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Haben Sie Ihr Passwort vergessen?", "ACTION_ENTER": "Eingabe", "ACTION_SIGN_IN": "Login", - "PLACEHOLDER_AUTH_PASSWORD": "Passwort" + "PLACEHOLDER_AUTH_PASSWORD": "Passwort", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "Laut unserem Helferlein ist Dein Benutzername/Deine E-Mail-Adresse oder Dein Passwort nicht korrekt. (Bitte achte auf die Groß- und Kleinschreibung.)", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index 1c9f684e..3eb623a4 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Fragmento de código", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Selecciona un lenguaje", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Eliminar formato", "OUTDATED": "Otra persona ha realizado cambios durante tu edición. Comprueba la nueva versión en la pestaña de activiy antes de guardar los cambios.", "MARKDOWN_HELP": "Ayuda de sintaxis Markdown" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "¿Olvidó su contraseña?", "ACTION_ENTER": "Entrar", "ACTION_SIGN_IN": "Iniciar sesión", - "PLACEHOLDER_AUTH_PASSWORD": "Contraseña (distingue mayúsculas y minúsculas)" + "PLACEHOLDER_AUTH_PASSWORD": "Contraseña (distingue mayúsculas y minúsculas)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "Nuestros Oompa Loompas indican que tu nombre de usuario/correo o contraseña son incorrectos", @@ -570,7 +575,7 @@ "ACTION_ADD": "Añadir nueva gravedad" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Statuses", + "TITLE": "Estados", "SUBTITLE": "Especifica los estado que atravesarán tus historias de usuario, tareas y peticiones", "EPIC_TITLE": "Estados de Epicas", "US_TITLE": "Estados de historias de usuario", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Importa tu proyecto de Jira y elije cómo gestionarlo", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Elige el proyecto o panel que quieres importar", "NO_PROJECTS": "Parece que no tienes proyectos o paneles en Jira", "URL": "Tu URL de Jira", diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index 3ed4ff5d..df514390 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Merkintätavan ohjeet" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Did you forget your password?", "ACTION_ENTER": "Sisään", "ACTION_SIGN_IN": "Login", - "PLACEHOLDER_AUTH_PASSWORD": "Salasana (kirjainkoko merkitsevä)" + "PLACEHOLDER_AUTH_PASSWORD": "Salasana (kirjainkoko merkitsevä)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "Oompa Loompas sanovat että käyttäjänimesi tai sähköpostisi tai salasanasi on väärä.", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index 7323e9c8..495785cd 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Sélectionnez la langue", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Retirer la mise en forme", "OUTDATED": "Une autre personne a apportée des modifications lors de l'édition. Vérifiez la nouvelle version dans l'onglet Activité avant d'enregistrer vos modifications.", "MARKDOWN_HELP": "Aide sur la syntaxe Markdown" }, @@ -254,7 +258,7 @@ "ADD_ISSUES": "Ajouter des tickets", "MODIFY_ISSUES": "Modifier des tickets", "COMMENT_ISSUES": "Commenter les tickets", - "DELETE_ISSUES": "Supprimer des tickets" + "DELETE_ISSUES": "Supprimer les tickets" }, "WIKI": { "NAME": "Wiki", @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Avez-vous oublié votre mot de passe ?", "ACTION_ENTER": "Entrer", "ACTION_SIGN_IN": "Se connecter", - "PLACEHOLDER_AUTH_PASSWORD": "Mot de passe (sensible à la casse)" + "PLACEHOLDER_AUTH_PASSWORD": "Mot de passe (sensible à la casse)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "D'après nos Oompa Loompas, votre nom d'utilisateur / adresse courriel ou votre mot de passe sont incorrects.", @@ -570,7 +575,7 @@ "ACTION_ADD": "Ajouter un niveau de gravité" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Statuses", + "TITLE": "Statuts", "SUBTITLE": "Spécifiez les statuts que vont prendre vos récits utilisateur, tâches et tickets", "EPIC_TITLE": "Statuts d'épopée", "US_TITLE": "Statuts de récit utilisateur", @@ -624,7 +629,7 @@ }, "GITHUB": { "SECTION_NAME": "GitHub", - "PAGE_TITLE": "GitHub - {{projectName}}" + "PAGE_TITLE": " GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -865,21 +870,21 @@ "TITLE": "Créer un projet", "CHOOSE_TEMPLATE": "Quel template correspond le mieux à votre projet ?", "TEMPLATE_SCRUM": "Scrum", - "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", - "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_SCRUM_DESC": "Prioriser et résoudre vos tâches sur de court cycles de temps", + "TEMPLATE_SCRUM_LONGDESC": "Scrum est une méthodologie de développement de logiciels agile, incrémentale et itérative pour la gestion du développement de produits.\n\nLe backlog du produit est ce qui sera finalement livré, organisé dans l'ordre dans lequel il doit être livré. Les besoins sont divisés en fragments manageables et exécutables nommés sprints. Chaque fois que l'équipe initie un nouveau sprint; elle s'engage à livrer un certain nombre de récits utilisateurs du backlog, en fonction de leurs compétences, capacités et ressources. Le projet avance à mesure que le backlog se vide.", "TEMPLATE_KANBAN": "Kanban", "TEMPLATE_KANBAN_DESC": "Garder un flux de travail constant sur les tâches indépendantes", - "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "TEMPLATE_KANBAN_LONGDESC": "La méthodologie Kanban est utilisée pour répartir les éléments d'un projet entre différents états.\n\nUne carte Kamban est similaire à un mémo ou un post-it qui détaille chaque tâche (ou récit) qu'il faut effectuer dans le projet. Le tableau Kanban est utilisé pour déplacer chaque carte d'un état d'avancement à l'autre, d'état en état, facilitant de ce fait l'avancée des tâches.", "DUPLICATE": "Dupliquer le projet", - "DUPLICATE_DESC": "Start clean and keep your configuration", + "DUPLICATE_DESC": "Repartir de rien en conservant vos configurations", "IMPORT": "Importer un projet", - "IMPORT_DESC": "Import your project from multiple platforms into Taiga", - "INVITE": "Invite to the project", + "IMPORT_DESC": "Importez votre projet depuis de multiples plateformes vers Taïga", + "INVITE": "Inviter au sein du projet", "SOLO_PROJECT": "Vous allez être seul sur ce projet", "INVITE_LATER": "(Vous pourrez inviter d'autres membres plus tard)", "BACK": "Back", "MAX_PRIVATE_PROJECTS": "Malheureusement vous avez atteint le nombre maximum de projets privés. Si vous voulez augmenter la limite, contactez votre administrateur.", - "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Malheureusement, vous avez atteind le nombre maximal de projets publics. Si vous souhaitez en augmenter le nombre, merci de contacter un administrateur", "PUBLIC_PROJECT": "Projet public", "PRIVATE_PROJECT": "Projet privé" }, @@ -890,12 +895,12 @@ }, "DUPLICATE": { "TITLE": "Dupliquer le projet", - "DESCRIPTION": "Start clean and keep your configuration", + "DESCRIPTION": "Repartir de rien en conservant vos configurations", "SELECT_PLACEHOLDER": "Choissisez un projet existant à dupliquer" }, "IMPORT": { "TITLE": "Import un projet", - "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "DESCRIPTION": "Importez votre projet depuis de multiples plateformes vers Taïga", "ASYNC_IN_PROGRESS_TITLE": "Nos Oompa Loompas sont en train d'importer votre projet", "ASYNC_IN_PROGRESS_MESSAGE": "Ce processus pourrait durer plusieurs minutes
    Nous vous enverrons un courriel quand ce sera prêt", "UPLOAD_IN_PROGRESS_MESSAGE": "{{uploadedSize}} de {{totalSize}} déposés", @@ -906,17 +911,17 @@ "SYNC_SUCCESS": "Votre projet a été importé avec succès", "IMPORT": "Importer", "WHO_IS": "Ces tâches seront assignées à ...", - "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", - "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", - "ACCEEDE": "Acceede", + "WRITE_EMAIL": "Ou si vous préférez, indiquez l'adresse de courriel que cet utilisateur utilise dans Taïga", + "SEARCH_CONTACT": "Ou si vous préférez, recherchez dans vos contacts", + "WRITE_EMAIL_LABEL": "Indiquez le courriel que l'utilisateur utilise dans Taïga", + "ACCEEDE": "Accéder", "PROJECT_MEMBERS": "Membres du projet", - "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", - "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", - "CHOOSE": "Select user", - "LINKS": "Links with {{platform}}", - "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", - "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "PROCESS_DESCRIPTION": "Indiquez nous à qui dans Taïga vous souhaitez assigner les tâches de {{platform}}", + "MATCH": "{{user_external}} est elle la même personne que {{user_internal}}?", + "CHOOSE": "Sélectionnez l'utilisateur", + "LINKS": "Liens avec {{platform}}", + "LINKS_DESCRIPTION": "Souhaitez vous conserver le lien de chaque objet avec la carte originelle de {{platform}} ?", + "WARNING_MAIL_USER": "Veuillez noter que si l'utilisateur n'a pas de compte Taïga, nous ne pourrons lui assigner de tâches.", "ASSIGN": "Affecter", "PROJECT_SELECTOR": { "NO_RESULTS": "Il semble qu'aucun résultat ne correspond à vos critères de recherche", @@ -924,9 +929,9 @@ "ACTION_BACK": "Back" }, "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", - "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", - "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PROJECT_MEMBERS_DESC_PRIVATE": "Le projet que vous tentez d'importer a {{members}} membres vous compris, malheureusement votre abonnement actuel permet un maximum de {{max_memberships}} membres par projet privé. Si vous souhaitez augmenter cette limite, merci de contacter un administrateur.", + "PROJECT_MEMBERS_DESC_PUBLIC": "Le projet que vous tentez d'importer a {{members}} membres vous compris, malheureusement votre abonnement actuel permet un maximum de {{max_memberships}} membres par projet privé. Si vous souhaitez augmenter cette limite, merci de contacter un administrateur.", + "ACCOUNT_ALLOW_MEMBERS": "Votre compte autorise {{members}} membres", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Malheureusement, votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire.", "DESC": "Le projet que vous voulez importer est privé. Votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire." @@ -955,52 +960,53 @@ "DESCRIPTION": "Ce processus peut prendre du temps, veuillez garder cette fenêtre ouverte." }, "WARNING": { - "TITLE": "Some taks will be unassigned", - "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", - "CHECK": "Check contacts" + "TITLE": "Certaines tâches ne seront pas assignées", + "DESCRIPTION": "Il reste des personnes non identifiées. Les cartes assignées à ces personnes resteront non assignées. Vérifiez tous les contacts pour ne pas perdre cette information.", + "CHECK": "Vérfiez les contacts" }, "TAIGA": { - "SELECTOR": "Import your Taiga project" + "SELECTOR": "Importez votre projet Taïga" }, "TRELLO": { - "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_PROJECT": "Choose board that you want to import", - "NO_PROJECTS": "It seems you have no boards in Trello" + "SELECTOR": "Importez vos tableaux Trello dans Taïga", + "CHOOSE_PROJECT": "Choisissez le tableau que vous souhaitez importer", + "NO_PROJECTS": "Il semble que vous n'aillez aucun tableau dans Trello" }, "GITHUB": { - "SELECTOR": "Import your GitHub project issues", - "CHOOSE_PROJECT": "Find the project you want to import", - "NO_PROJECTS": "It seems you have no porjects in GitHub", - "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", - "KANBAN_PROJECT": "As user stories in a kanban project", - "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", - "SCRUM_PROJECT": "As user stories in a scrum project", - "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", - "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "SELECTOR": "Importez vos tickets GitHub", + "CHOOSE_PROJECT": "Trouvez le projet que vous souhaitez importer", + "NO_PROJECTS": "Il semble que vous n'aillez aucun projet dans GitHub", + "HOW_DO_YOU_WANT_TO_IMPORT": "Comment souhaitez-vous importer vos tickets dans Taïga ?", + "KANBAN_PROJECT": "Comme récits dans un projet Kanban", + "KANBAN_PROJECT_DESCRIPTION": "Après cela vous pourrez activer le backlog de Scrum", + "SCRUM_PROJECT": "Comme récit dans un projet Scrum", + "SCRUM_PROJECT_DESCRIPTION": "Après cela vous pourrez activer le mode Kanban", + "ISSUES_PROJECT": "Comme ticket", + "ISSUES_PROJECT_DESCRIPTION": "Vous ne pourrez utiliser vos tickets dans les modes Kanban ou Scrum. Vous pourrez activer Kanban ou Scrum pour de nouveaux récits." }, "ASANA": { - "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_PROJECT": "Choose project that you want to import", - "NO_PROJECTS": "It seems you have no porjects in Asana", + "SELECTOR": "Importer votre projet Asana et choisissez comment le suivre", + "CHOOSE_PROJECT": "Choisissez le projet que vous souhaitez importer", + "NO_PROJECTS": "Il semble que vous n'aillez aucun projet dans Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", - "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." + "CREATE_AS_SCRUM_DESCRIPTION": "Les tâches et sous-tâches de votre projet seront créées comme récits et tâches dans Taïga", + "CREATE_AS_KANBAN_DESCRIPTION": "Les tâches et sous-tâches de votre projet seront créées comme récits et tâches dans Taïga" }, "JIRA": { - "SELECTOR": "Import your Jira project and choose how to manage it", - "CHOOSE_PROJECT": "Choose project or board that you want to import", - "NO_PROJECTS": "It seems you have no porjects or boards in Jira", - "URL": "Your Jira URL", + "SELECTOR": "Importer votre projet Jira et choisissez comment le suivre", + "HOW_TO_CONFIGURE": "(configuration help)", + "CHOOSE_PROJECT": "Choisissez le projet ou le tableau que vous souhaitez importer", + "NO_PROJECTS": "Il semble que vous n'aillez ni projet ni tableau dans Jira", + "URL": "Votre URL Jira", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Tickets", - "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", - "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", - "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + "CREATE_AS_SCRUM_DESCRIPTION": "Les tickets et sous-tickets de votre projet seront créées en tant que récit et tâches Taïga.", + "CREATE_AS_KANBAN_DESCRIPTION": "Les tickets et sous-tickets de votre projet seront créées en tant que récit et tâches Taïga.", + "CREATE_AS_ISSUES_DESCRIPTION": "Que souhaitez vous faire avec les sous-tickets de votre projet Jira ? (Taïga n'autorise pas les sous-tickets).", + "CREATE_NEW_ISSUES": "Convertir les sous-tickets en nouveaux tickets Taïga", + "NOT_CREATE_NEW_ISSUES": "Ne pas importer les sous-tickets" } } }, @@ -1141,7 +1147,7 @@ "CLOSE": "Fermer", "SYNCHRONIZE_LINK": "se synchroniser avec Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Avez-vous besoin de quelqu'un pour cette tâche ?", - "PUBLISH_MORE_INFO_TEXT": "

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    " + "PUBLISH_MORE_INFO_TEXT": "

    Si vous avez besoin d'un coup de main pour un élément en particulier, vous pouvez facilement créer un \"Gig\" sur Taiga Tribe et recevoir de l'aide de la terre entière. Vous serez en mesure de contrôler et manager le \"Gig\", en profitant d'une grande communauté assoiffée de contribution.

    TaigaTribe est née en jumelle de Taïga. les deux plateformes peuvent vivre séparément, mais nous croyons que leur plus grande force est dans la combinaison, et nous nous assurons donc que l'intégration fonctionne \"au poil\" !,

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Exigence équipe", diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index 4d76c6c4..88785e50 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Aiuto per la sintassi Markdown" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Hai dimenticato la tua password?", "ACTION_ENTER": "Conferma", "ACTION_SIGN_IN": "Login", - "PLACEHOLDER_AUTH_PASSWORD": "Password (occhio alle maiuscole)" + "PLACEHOLDER_AUTH_PASSWORD": "Password (occhio alle maiuscole)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "Secondo i nostri Oompa Loompa, i tuoi nomi utente, email o password sono errati.", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/locales/taiga/locale-ja.json b/app/locales/taiga/locale-ja.json index 78e40617..cd61cfc5 100644 --- a/app/locales/taiga/locale-ja.json +++ b/app/locales/taiga/locale-ja.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "あなたが編集中に別のユーザーが変更を加えました。あなたの変更点を保存する前に、アクティビティタブで新しいバージョンを確認してください。", "MARKDOWN_HELP": "Markdown記法のヘルプ" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "パスワードを忘れましたか?", "ACTION_ENTER": "決定", "ACTION_SIGN_IN": "ログイン", - "PLACEHOLDER_AUTH_PASSWORD": "パスワード" + "PLACEHOLDER_AUTH_PASSWORD": "パスワード", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "「あなたのユーザー名/メールアドレス または パスワードが間違っている」とウンパルンパたちが言っています。", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/locales/taiga/locale-ko.json b/app/locales/taiga/locale-ko.json index 3f8e1e0b..870f8d37 100644 --- a/app/locales/taiga/locale-ko.json +++ b/app/locales/taiga/locale-ko.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "코드 스니펫", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "언어 선택", + "SELECT_LANGUAGE_REMOVE_FORMATING": "포매팅 제거", "OUTDATED": "편집하는 동안 다른 사람이 변경했습니다. 변경 사항을 저장하기 전에 활성 탭에서 새 버전을 확인하십시오.", "MARKDOWN_HELP": "마크다운 문법 도움말" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "비밀번호를 잊었나요?", "ACTION_ENTER": "들어가기", "ACTION_SIGN_IN": "로그인", - "PLACEHOLDER_AUTH_PASSWORD": "비밀번호 (대소문자 구분)" + "PLACEHOLDER_AUTH_PASSWORD": "비밀번호 (대소문자 구분)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "움파룸파가 말하길, 아이디나 이메일, 비밀번호 중 하나가 틀렸다고 하네요.", @@ -570,7 +575,7 @@ "ACTION_ADD": "심각도 추가하기" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Statuses", + "TITLE": "상태", "SUBTITLE": "유저 스토리, 태스크 그리고 이슈의 상태를 지정하세요.", "EPIC_TITLE": "에픽 상태", "US_TITLE": "유저 스토리 상태", @@ -863,39 +868,39 @@ }, "CREATE": { "TITLE": "프로젝트 생성하기", - "CHOOSE_TEMPLATE": "Which template fits your project better?", + "CHOOSE_TEMPLATE": "당신의 프로젝트에 가장 적합한 템플릿이 무엇입니까?", "TEMPLATE_SCRUM": "스크럼", - "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_DESC": "짧은 시간 주기로 작업 우선 순위 지정 및 해결", "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", "TEMPLATE_KANBAN": "칸반", - "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_DESC": "독립적인 태스크에 대해 지속적인 워크플로 유지", "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", - "DUPLICATE": "Duplicate project", - "DUPLICATE_DESC": "Start clean and keep your configuration", + "DUPLICATE": "프로젝트 복사", + "DUPLICATE_DESC": "정리를 시작하고 설정을 유지", "IMPORT": "프로젝트 불러오기", - "IMPORT_DESC": "Import your project from multiple platforms into Taiga", - "INVITE": "Invite to the project", - "SOLO_PROJECT": "You'll be alone in this project", - "INVITE_LATER": "(You'll be able to invite more members later)", + "IMPORT_DESC": "여러 플랫폼의 당신의 프로젝트를 타이가로 가져오십시오.", + "INVITE": "프로젝트로 초대", + "SOLO_PROJECT": "이 프로젝트에 당신 혼자 남을 것입니다.", + "INVITE_LATER": "(나중에 더 많은 회원을 초대 할 수 있습니다.)", "BACK": "이전", - "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", - "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PRIVATE_PROJECTS": "비공개 프로젝트 수 제한에 도달하였습니다.\n제한을 늘리고 싶다면 관리자에게 연락하세요.", + "MAX_PUBLIC_PROJECTS": "공개 프로젝트 수 제한에 도달하였습니다.\n제한을 늘리고 싶다면 관리자에게 문의해주세요.", "PUBLIC_PROJECT": "공개된 프로젝트", "PRIVATE_PROJECT": "비공개 프로젝트" }, "COMMON": { - "DETAILS": "New project details", - "PROJECT_TITLE": "Project Name", - "PROJECT_DESCRIPTION": "Project Description" + "DETAILS": "새로운 프로젝트 세부사항", + "PROJECT_TITLE": "프로젝트 이름", + "PROJECT_DESCRIPTION": "프로젝트 설명" }, "DUPLICATE": { - "TITLE": "Duplicate Project", - "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" + "TITLE": "프로젝트 복사", + "DESCRIPTION": "정리를 시작하고 설정을 유지", + "SELECT_PLACEHOLDER": "복제 할 기존 프로젝트 선택" }, "IMPORT": { - "TITLE": "Import Project", - "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "TITLE": "프로젝트 가져오기", + "DESCRIPTION": "여러 플랫폼의 당신의 프로젝트를 타이가로 가져오십시오.", "ASYNC_IN_PROGRESS_TITLE": "움파룸파가 프로젝트를 불러오고 있습니다.", "ASYNC_IN_PROGRESS_MESSAGE": "이 작업은 몇 분 정도 걸립니다.
    작업이 끝나면 이메일로 알려드릴게요.", "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} 중 {{uploadedSize}} 만큼 업로드했습니다", @@ -904,18 +909,18 @@ "ERROR_MESSAGE": "움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요. {{error_message}}", "ERROR_MAX_SIZE_EXCEEDED": "우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요.", "SYNC_SUCCESS": "프로젝트를 불러오는 데 성공했습니다.", - "IMPORT": "Import", - "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", - "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", + "IMPORT": "가져오기", + "WHO_IS": "이 태스크들을 할당 ...", + "WRITE_EMAIL": "원한다면, 사용자가 사용하는 이메일을 타이가에 작성하십시오.", + "SEARCH_CONTACT": "또는 연락처에서 찾습니다.", + "WRITE_EMAIL_LABEL": "Tagia에서 사용자가 사용할 이메일을 작성", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "프로젝트 회원", - "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", - "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", - "CHOOSE": "Select user", - "LINKS": "Links with {{platform}}", - "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "PROCESS_DESCRIPTION": "Tagia에서 {{platform}}의 태스크들을 누구에게 할당할 것인지 알려주세요.", + "MATCH": "외부의 {{user_external}} 사용자는 내부의 {{user_internal}} 사용자와 동일인입니까?", + "CHOOSE": "사용자 선택", + "LINKS": "{{platform}}과 연결", + "LINKS_DESCRIPTION": "{{platform}} 카드와 모든 아이템들의 연결을 유지하시겠습니까?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "할당", "PROJECT_SELECTOR": { @@ -926,7 +931,7 @@ "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", - "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "ACCOUNT_ALLOW_MEMBERS": "당신의 계정은 오직 {{members}} 회원만 허가되어있습니다.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "안타깝게도, 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다.", "DESC": "가져오기하려는 프로젝트가 비공개 되어있습니다. 안타깝게도, 현재 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다." @@ -955,52 +960,53 @@ "DESCRIPTION": "이 과정은 시간이 걸릴 수 있습니다. 이 창을 닫지 마세요." }, "WARNING": { - "TITLE": "Some taks will be unassigned", + "TITLE": "일부 태스크는 할당되지 않을 것입니다.", "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", - "CHECK": "Check contacts" + "CHECK": "연락처 확인" }, "TAIGA": { - "SELECTOR": "Import your Taiga project" + "SELECTOR": "타이가 프로젝트 가져오기" }, "TRELLO": { - "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_PROJECT": "Choose board that you want to import", - "NO_PROJECTS": "It seems you have no boards in Trello" + "SELECTOR": "타이가로 트렐로 보드 가져오기", + "CHOOSE_PROJECT": "가져오고 싶은 보드를 선택하세요.", + "NO_PROJECTS": "트렐로에 당신의 보드가 없는 것 같군요." }, "GITHUB": { - "SELECTOR": "Import your GitHub project issues", - "CHOOSE_PROJECT": "Find the project you want to import", - "NO_PROJECTS": "It seems you have no porjects in GitHub", - "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", - "KANBAN_PROJECT": "As user stories in a kanban project", - "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", - "SCRUM_PROJECT": "As user stories in a scrum project", - "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", - "ISSUES_PROJECT": "As issues", + "SELECTOR": "깃헙 프로젝트 이슈 가져오기", + "CHOOSE_PROJECT": "가져오고 싶은 프로젝트를 찾으세요.", + "NO_PROJECTS": "깃헙에 당신의 프로젝트가 없는 것 같군요.", + "HOW_DO_YOU_WANT_TO_IMPORT": "타이가로 당신의 이슈들을 어떻게 가져오고 싶습니까?", + "KANBAN_PROJECT": "칸반 프로젝트의 유저 스토리", + "KANBAN_PROJECT_DESCRIPTION": "이후에 스크럼과 백로그를 활성화할 수 있습니다.", + "SCRUM_PROJECT": "스크럼 프로젝트의 유저 스토리", + "SCRUM_PROJECT_DESCRIPTION": "이후에 칸반모드를 활성화할 수 있습니다.", + "ISSUES_PROJECT": "이슈", "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_PROJECT": "Choose project that you want to import", - "NO_PROJECTS": "It seems you have no porjects in Asana", + "SELECTOR": "가져올 Asana 프로젝트와 어떻게 관리할지를 선택하세요.", + "CHOOSE_PROJECT": "가져오고 싶은 프로젝트를 선택하세요.", + "NO_PROJECTS": "Asana에 당신의 프로젝트가 없는 것 같군요.", "KANBAN_PROJECT": "칸반", "SCRUM_PROJECT": "스크럼", - "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." + "CREATE_AS_SCRUM_DESCRIPTION": "당신의 프로젝트에서 태스크와 하위 태스크는 Taiga 유저 스토리와 태스크로 작성됩니다.", + "CREATE_AS_KANBAN_DESCRIPTION": "당신의 프로젝트에서 태스크와 하위 태스크는 Taiga 유저 스토리와 태스크로 작성됩니다." }, "JIRA": { - "SELECTOR": "Import your Jira project and choose how to manage it", - "CHOOSE_PROJECT": "Choose project or board that you want to import", - "NO_PROJECTS": "It seems you have no porjects or boards in Jira", - "URL": "Your Jira URL", + "SELECTOR": "가져올 Jira 프로젝트와 어떻게 관리할지를 선택하세요", + "HOW_TO_CONFIGURE": "(configuration help)", + "CHOOSE_PROJECT": "가져오고 싶은 프로젝트나 보드를 선택하세요.", + "NO_PROJECTS": "Jira에 당신의 프로젝트가나 보드가 없는 것 같군요.", + "URL": "당신의 Jira URL", "KANBAN_PROJECT": "칸반", "SCRUM_PROJECT": "스크럼", "ISSUES_PROJECT": "이슈", "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", - "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", - "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + "CREATE_NEW_ISSUES": "하위 이슈를 새로운 타이가 이슈로 변경", + "NOT_CREATE_NEW_ISSUES": "하위 이슈를 가져오지 마십시오." } } }, diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index 60301b69..080355d1 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Markdown syntaks hjelp" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Har du glemt ditt passord?", "ACTION_ENTER": "Enter", "ACTION_SIGN_IN": "Login", - "PLACEHOLDER_AUTH_PASSWORD": "Passord (case sensitiv)" + "PLACEHOLDER_AUTH_PASSWORD": "Passord (case sensitiv)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "Ifølge våre Oompa Loompaer er ditt brukernavn, e-post eller passord feil.", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index 03a3c223..aede6f54 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Markdown syntax help" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Ben je je wachtwoord vergeten?", "ACTION_ENTER": "Enter", "ACTION_SIGN_IN": "Log in", - "PLACEHOLDER_AUTH_PASSWORD": "Wachtwoord (hoofdlettergevoelig)" + "PLACEHOLDER_AUTH_PASSWORD": "Wachtwoord (hoofdlettergevoelig)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "Volgens onze Oempa-Loempa's, zijn je gebruikers/email of wachtwoord incorrect.", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index 5b76d6ca..7a70b3f4 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Składnia Markdown pomoc" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Zapomniałeś hasło? ", "ACTION_ENTER": "Wprowadź", "ACTION_SIGN_IN": "Zaloguj", - "PLACEHOLDER_AUTH_PASSWORD": "Hasło (uwzględnij wielkość liter)" + "PLACEHOLDER_AUTH_PASSWORD": "Hasło (uwzględnij wielkość liter)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "Nasze Umpa Lumpy twierdzą,że Twój login/e-mail lub hasło nie są poprawne.", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index 8ca127a1..d1bca99c 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -9,7 +9,7 @@ "SAVE": "Salvar", "CANCEL": "Cancelar", "ACCEPT": "Aceitar", - "DELETE": "Apagar", + "DELETE": "Excluir", "UNLINK": "Separar", "CREATE": "Criar", "ADD": "Adicionar", @@ -37,7 +37,7 @@ "LOGOUT": "Sair", "EXTERNAL_USER": "um usuário externo", "GENERIC_ERROR": "Um Oompa Loompas disse {{error}}.", - "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", + "IOCAINE_TEXT": "Este membro está se sentindo um pouco oprimido por esta tarefa. Ficará imune ao veneno de iocaína ao longo do tempo com sua ajuda. Por agora, pode precisar de um abraço.", "CLIENT_REQUIREMENT": "Requisito de cliente é um novo requisito que não foi anteriormente previsto e que necessita se tornar uma parte do projeto.", "TEAM_REQUIREMENT": "Requisito de time é um requisito que deve existir no projeto, mas que não deve ter nenhum custo para o cliente.", "OWNER": "Dono do Projeto", @@ -122,7 +122,7 @@ "EPIC": "Épico", "TAGS": { "PLACEHOLDER": "Inserir tag", - "DELETE": "Apagar tag", + "DELETE": "Excluir tag", "ADD": "Adicionar tag" }, "DESCRIPTION": { @@ -155,7 +155,7 @@ "ASSIGNED_TO": { "NOT_ASSIGNED": "Não assinado", "ASSIGN": "Atribuir", - "DELETE_ASSIGNMENT": "Apagar atribuição", + "DELETE_ASSIGNMENT": "Excluir atribuição", "REMOVE_ASSIGNED": "Remover assinatura", "TOO_MANY": "...muitos usuários, continue filtrando", "CONFIRM_UNASSIGNED": "Você tem certeza que deseja deixar sem ", @@ -170,8 +170,8 @@ "WATCHERS": "Observadores", "ADD": "Adicionar observadores", "TITLE_ADD": "Adicionar um membro do projeto para a lista de observadores", - "DELETE": "Apagar observador", - "TITLE_LIGHTBOX_DELETE_WARTCHER": "Apagar observador..." + "DELETE": "Excluir observador", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "Excluir observador..." }, "WATCH_BUTTON": { "WATCH": "Observar", @@ -189,8 +189,8 @@ "CUSTOM_FIELDS": "Campos Personalizados", "SAVE": "Salvar Campo Personalizado", "EDIT": "Editar Campo Personalizado", - "DELETE": "Apagar atributo personalizado", - "CONFIRM_DELETE": "Lembre-se que todos os valores neste campo customizado serão deletados.\nVocê tem certeza que quer continuar?" + "DELETE": "Excluir atributo personalizado", + "CONFIRM_DELETE": "Lembre-se que todos os valores neste campo customizado serão excluídos.\nVocê tem certeza que quer continuar?" }, "FILTERS": { "INPUT_PLACEHOLDER": "Assunto ou referência", @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Ajuda de sintaxe markdown" }, @@ -223,14 +227,14 @@ "ADD_EPICS": "Adicionar épicos", "MODIFY_EPICS": "Modificar épicos", "COMMENT_EPICS": "Comentar épicos", - "DELETE_EPICS": "Deletar épicos" + "DELETE_EPICS": "Excluir épicos" }, "SPRINTS": { "NAME": "Sprints", "VIEW_SPRINTS": "Ver sprints", "ADD_SPRINTS": "Adicionar sprints", "MODIFY_SPRINTS": "Modificar sprints", - "DELETE_SPRINTS": "Apagar sprints" + "DELETE_SPRINTS": "Excluir sprints" }, "USER_STORIES": { "NAME": "Histórias de Usuários", @@ -238,7 +242,7 @@ "ADD_USER_STORIES": "Adicionar histórias de usuários", "MODIFY_USER_STORIES": "Modificar histórias de usuários", "COMMENT_USER_STORIES": "Comentar histórias de usuário", - "DELETE_USER_STORIES": "Apagar histórias de usuários" + "DELETE_USER_STORIES": "Excluir histórias de usuários" }, "TASKS": { "NAME": "Tarefas", @@ -246,7 +250,7 @@ "ADD_TASKS": "Adicionar uma nova Tarefa", "MODIFY_TASKS": "Modificar tarefa", "COMMENT_TASKS": "Comentar tarefas", - "DELETE_TASKS": "Apagar tarefas" + "DELETE_TASKS": "Excluir tarefas" }, "ISSUES": { "NAME": "Problemas", @@ -254,17 +258,17 @@ "ADD_ISSUES": "Adicionar problemas", "MODIFY_ISSUES": "Modificar problemas", "COMMENT_ISSUES": "Comentar problemas", - "DELETE_ISSUES": "Apagar problemas" + "DELETE_ISSUES": "Excluir problemas" }, "WIKI": { "NAME": "Wiki", "VIEW_WIKI_PAGES": "Exibir páginas da wiki", "ADD_WIKI_PAGES": "Adicionar páginas wiki", "MODIFY_WIKI_PAGES": "Modificar páginas wiki", - "DELETE_WIKI_PAGES": "Apagar páginas wiki", + "DELETE_WIKI_PAGES": "Excluir páginas wiki", "VIEW_WIKI_LINKS": "Exibir links da wiki", "ADD_WIKI_LINKS": "Adicionar links da wiki", - "DELETE_WIKI_LINKS": "Apagar links da wiki" + "DELETE_WIKI_LINKS": "Excluir links da wiki" } } }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Esqueceu sua senha?", "ACTION_ENTER": "Entre", "ACTION_SIGN_IN": "Entrar", - "PLACEHOLDER_AUTH_PASSWORD": "Senha (case sensitive)" + "PLACEHOLDER_AUTH_PASSWORD": "Senha (case sensitive)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "De acordo com nossos Oompa Loompas, seu nome de usuario/email ou senha estão incorretos.", @@ -413,9 +418,9 @@ "MAX_UPLOAD_SIZE": "Tamanho máximo de upload é {{maxFileSize}}", "DATE": "DD MMM YYYY [at] hh:mm", "ERROR_UPLOAD_ATTACHMENT": "Não fomos capazes de carregar '{{fileName}}'.\n{{errorMessage}}", - "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Apagar anexo...", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Excluir anexo...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "o anexo '{{fileName}}'", - "ERROR_DELETE_ATTACHMENT": "Não fomos capazes de apagar: {{errorMessage}}", + "ERROR_DELETE_ATTACHMENT": "Não fomos capazes de excluir: {{errorMessage}}", "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})" }, "PAGINATION": { @@ -425,8 +430,8 @@ "ADMIN": { "COMMON": { "TITLE_ACTION_EDIT_VALUE": "Editar valor", - "TITLE_ACTION_DELETE_VALUE": "Apagar valor", - "TITLE_ACTION_DELETE_TAG": "Apagar tag" + "TITLE_ACTION_DELETE_VALUE": "Excluir valor", + "TITLE_ACTION_DELETE_TAG": "Excluir tag" }, "HELP": "Você precisa de ajuda? Verifique nossa pagina de suporte!", "PROJECT_DEFAULT_VALUES": { @@ -469,7 +474,7 @@ "ISSUES": "Problemas", "ISSUES_DESCRIPTION": "Acompanhe os bugs, problemas e melhorias relacionados ao seu projeto. Não perca nada!", "WIKI": "Wiki", - "WIKI_DESCRIPTION": "Adicione, modifique ou apague conteúdo em colaboração com outras pessoas. Este é o local certo pra documentação do seu projeto.", + "WIKI_DESCRIPTION": "Adicione, modifique ou exclua conteúdo em colaboração com outras pessoas. Este é o local certo pra documentação do seu projeto.", "MEETUP": "Reunião", "MEETUP_DESCRIPTION": "Selecione seu sistema de videoconferência.", "SELECT_VIDEOCONFERENCE": "Selecione um sistema de videoconferência", @@ -489,11 +494,11 @@ "RECRUITING": "Este projeto esta a procura de colaboradores?", "RECRUITING_MESSAGE": "O que você está procurando?", "RECRUITING_PLACEHOLDER": "Defina o perfil que você procura?", - "FEEDBACK": "Receive feedback from Taiga users?", + "FEEDBACK": "Receber notificações de usuários Taiga?", "PUBLIC_PROJECT": "Projeto Publico", "PRIVATE_PROJECT": "Projeto Privado", "PRIVATE_OR_PUBLIC": "Qual a diferença entre projeto público e privado?", - "DELETE": "Apagar este projeto", + "DELETE": "Excluir este projeto", "CHANGE_LOGO": "Alterar logo", "ACTION_USE_DEFAULT_LOGO": "Usar imagem padrão", "MAX_PRIVATE_PROJECTS": "Você atingiu o número máximo de projetos privados permitidos para seu plano atual.", @@ -541,7 +546,7 @@ "ISSUE_DESCRIPTION": "Campos personalizados dos problemas", "ISSUE_ADD": "Adicionar um campo personalizado em problemas ", "FIELD_TYPE_TEXT": "Texto", - "FIELD_TYPE_RICHTEXT": "Rich text", + "FIELD_TYPE_RICHTEXT": "Texto rico", "FIELD_TYPE_MULTI": "Multi-linha", "FIELD_TYPE_DATE": "Data", "FIELD_TYPE_URL": "Url" @@ -549,7 +554,7 @@ "PROJECT_VALUES": { "PAGE_TITLE": "{{sectionName}} - Valores do projeto - {{projectName}}", "REPLACEMENT": "Todos os itens com este valor serão modificados para", - "ERROR_DELETE_ALL": "Você não pode apagar todos os valores." + "ERROR_DELETE_ALL": "Você não pode excluir todos os valores." }, "PROJECT_VALUES_POINTS": { "TITLE": "Pontos", @@ -570,7 +575,7 @@ "ACTION_ADD": "Adicionar nova gravidade" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Statuses", + "TITLE": "Status", "SUBTITLE": "Especifique os status pelos quais suas histórias de usuários, tarefas e problemas passarão", "EPIC_TITLE": "Estados do Épico", "US_TITLE": "Status de história de usuário", @@ -601,10 +606,10 @@ "DISABLE_COMPUTABLE_ALERT_TITLE": "Você tem certeza que quer desativar esta permissão de estimativas?", "DISABLE_COMPUTABLE_ALERT_SUBTITLE": "Se você desativar a permissão de estimativas para esta regra {{roleName}} todas estimativas feitas anteriormente por esta regra serão removidas.", "COUNT_MEMBERS": "{{ role.members_count }} membros com a mesma função", - "TITLE_DELETE_ROLE": "Apagar Função", + "TITLE_DELETE_ROLE": "Excluir Função", "REPLACEMENT_ROLE": "Todos os usuários com essa função serão movidos para", "WARNING_DELETE_ROLE": "Cuidado! Todas as estimativas de papéis serão removidas", - "ERROR_DELETE_ALL": "Você não pode apagar todos os valores", + "ERROR_DELETE_ALL": "Você não pode excluir todos os valores", "EXTERNAL_USER": "Usuário externo" }, "THIRD_PARTIES": { @@ -642,7 +647,7 @@ "SHOW_HISTORY": "(Mostrar história)", "TEST": "Testar Webhook", "EDIT": "Editar Webhook", - "DELETE": "Apagar Webhook", + "DELETE": "Excluir Webhook", "REQUEST": "Solicitação", "RESEND_REQUEST": "Reenviar pedido", "HEADERS": "Cabeçalhos", @@ -659,7 +664,7 @@ "PAGE_TITLE": "{{sectionName}} - Atributos personalizados - {{projectName}}", "ADD": "Adicionar campos personalizados", "EDIT": "Editar Campo Personalizado", - "DELETE": "Apagar campo personalizado", + "DELETE": "Excluir campo personalizado", "SAVE_TITLE": "Salvar Campo Personalizado", "CANCEL_TITLE": "Cancelar criação", "SET_FIELD_NAME": "Definir nome do seu campo personalizados", @@ -675,11 +680,11 @@ "COLUMN_STATUS": "Status", "STATUS_ACTIVE": "Ativo", "STATUS_PENDING": "Pendente", - "DELETE_MEMBER": "Apagar membro", + "DELETE_MEMBER": "Excluir membro", "RESEND": "Reenviar", "SUCCESS_SEND_INVITATION": "Enviamos novamente um convite para '{{email}}'.", - "SUCCESS_DELETE": "Nós apagamos {{message}}.", - "ERROR_DELETE": "Nós não fomos capaz de apagar {{message}}.", + "SUCCESS_DELETE": "Nós excluimos {{message}}.", + "ERROR_DELETE": "Nós não fomos capaz de excluir {{message}}.", "DEFAULT_DELETE_MESSAGE": "o convite para {{email}}" }, "DEFAULT_VALUES": { @@ -858,22 +863,22 @@ } }, "CONTACT_BUTTON": { - "CONTACT_TITLE": "Contact the project team", - "CONTACT_BUTTON": "Contact the project" + "CONTACT_TITLE": "Contatar o time do projeto", + "CONTACT_BUTTON": "Contatar o projeto" }, "CREATE": { "TITLE": "Criar Projeto", - "CHOOSE_TEMPLATE": "Which template fits your project better?", + "CHOOSE_TEMPLATE": "Qual modelo se encaixa melhor no seu projeto?", "TEMPLATE_SCRUM": "Scrum", - "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_DESC": "Priorize e resolva suas tarefas em curtos ciclos de tempo.", "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", "TEMPLATE_KANBAN": "Kanban", - "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_DESC": "Mantenha um fluxo de trabalho constante em tarefas independentes", "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", "DUPLICATE": "Duplicate project", - "DUPLICATE_DESC": "Start clean and keep your configuration", + "DUPLICATE_DESC": "Inicie limpo e mantenha suas configurações", "IMPORT": "Importar projeto", - "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "IMPORT_DESC": "Importar seu projeto de múltiplas plataformas para o Taiga", "INVITE": "Invite to the project", "SOLO_PROJECT": "You'll be alone in this project", "INVITE_LATER": "(You'll be able to invite more members later)", @@ -884,18 +889,18 @@ "PRIVATE_PROJECT": "Projeto Privado" }, "COMMON": { - "DETAILS": "New project details", - "PROJECT_TITLE": "Project Name", - "PROJECT_DESCRIPTION": "Project Description" + "DETAILS": "Detalhes do novo projeto", + "PROJECT_TITLE": "Nome do Projeto", + "PROJECT_DESCRIPTION": "Descrição do Projeto" }, "DUPLICATE": { - "TITLE": "Duplicate Project", - "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" + "TITLE": "Duplicar Projeto", + "DESCRIPTION": "Inicie limpo e mantenha suas configurações", + "SELECT_PLACEHOLDER": "Escolha um projeto existente para duplicar" }, "IMPORT": { - "TITLE": "Import Project", - "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "TITLE": "Importar Projeto", + "DESCRIPTION": "Importar seu projeto de múltiplas plataformas para o Taiga", "ASYNC_IN_PROGRESS_TITLE": "Nossos Oompa Loompas estão importando seu projeto", "ASYNC_IN_PROGRESS_MESSAGE": "Este processo pode levar alguns minutos
    Enviaremos um email a você assim que estiver pronto", "UPLOAD_IN_PROGRESS_MESSAGE": "Enviado {{uploadedSize}} de {{totalSize}}", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", @@ -1006,14 +1012,14 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "CONFIRM": "Você tem certeza que quer apagar sua conta Taiga?", + "CONFIRM": "Você tem certeza que quer excluir sua conta Taiga?", "CANCEL": "Voltar para configurações", - "ACCEPT": "Remover conta", - "BLOCK_PROJECT": "Note que todos os projetos em que você é o dono serão bloqueados depois que você apagar sua conta. Se você quer um projeto bloqueado, transfira a posse para outro membro de cada projeto antes de apagar sua conta." + "ACCEPT": "Excluir conta", + "BLOCK_PROJECT": "Note que todos os projetos em que você é o dono serão bloqueados depois que você excluir sua conta. Se você quer um projeto bloqueado, transfira a posse para outro membro de cada projeto antes de excluir sua conta." }, "DELETE_PROJECT": { - "TITLE": "Apagar projeto", - "QUESTION": "Você tem certeza que quer apagar este projeto?", + "TITLE": "Excluir projeto", + "QUESTION": "Você tem certeza que quer excluir este projeto?", "SUBTITLE": "Todas as informações do projeto (histórias, tarefas, problemas, sprints e páginas de wiki) serão perdidas! :-(", "CONFIRM": "Sim, eu tenho certeza" }, @@ -1023,11 +1029,11 @@ }, "ADD_MEMBER": { "TITLE": "Novo Membro", - "PLACEHOLDER": "Filter users or write an email to invite", + "PLACEHOLDER": "Filtre usuários ou escreva um email para convidá-los", "ADD_EMAIL": "Adicione e-mail.", - "REMOVE": "Remove", - "INVITE": "Invite", - "CHOOSE_ROLE": "Choose a role", + "REMOVE": "Remover", + "INVITE": "Convidar", + "CHOOSE_ROLE": "Escolha um papel", "PLACEHOLDER_INVITATION_TEXT": "(Opcional) Adicione uma mensagem de texto ao convite. Diga algo animador para os novos membros ;-)", "HELP_TEXT": "Se os usuários já estiverem registrados no Taiga, eles serão adicionados automaticamente. Caso contrário, eles receberão um convite." }, @@ -1048,8 +1054,8 @@ "PLACEHOLDER_SPRINT_NAME": "nome da sprint", "PLACEHOLDER_SPRINT_START": "Inicio Estimado", "PLACEHOLDER_SPRINT_END": "Estimativa de Termino", - "ACTION_DELETE_SPRINT": "Você quer apagar esta sprint?", - "TITLE_ACTION_DELETE_SPRINT": "apagar sprint", + "ACTION_DELETE_SPRINT": "Você quer excluir esta sprint?", + "TITLE_ACTION_DELETE_SPRINT": "excluir sprint", "LAST_SPRINT_NAME": "última sprint é {{lastSprint}} ;-) " }, "CREATE_EDIT_TASK": { @@ -1067,7 +1073,7 @@ "EDIT_US": "Editar história de usuário" }, "DELETE_SPRINT": { - "TITLE": "Apagar sprint" + "TITLE": "Excluir sprint" }, "CREATE_MEMBER": { "PLACEHOLDER_INVITATION_TEXT": "(Opcional) Adicione uma mensagem de texto ao convite. Diga algo animador para os novos membros ;-)", @@ -1082,7 +1088,7 @@ "BUTTON": "Mude o dono do projeto" }, "OTHER_USER_OWNER": { - "DESC": "Infelizmnete, você não pode apagar um membro que também é o dono de um projeto. Primeiro designe um novo proprietário para o projeto.", + "DESC": "Infelizmente, você não pode excluir um membro que também é o dono de um projeto. Primeiro designe um novo proprietário para o projeto.", "BUTTON": "Solicite a mudança do dono do projeto" } }, @@ -1092,10 +1098,10 @@ "BUTTON": "Pedir a este membro do projeto para se tornar o novo dono do projeto" }, "CONTACT_PROJECT": { - "TITLE": "Send an email to", - "WARNING": "The email will be received by the project admins", - "PLACEHOLDER": "Write your message", - "SEND": "Send" + "TITLE": "Enviar um e-mail para", + "WARNING": "O e-mail será recebido pelos administradores do projeto", + "PLACEHOLDER": "Escreva sua mensagem", + "SEND": "Enviar" } }, "EPIC": { @@ -1103,7 +1109,7 @@ "PAGE_DESCRIPTION": "Estado: {{epicStatus }}. Descrição: {{epicDescription}}", "SECTION_NAME": "Épico", "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Separar história de usuário relacionada", - "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Excluirá a ligação para a história de usuário relacionada '{{subject}}'", + "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Excluirá a ligação para a história de usuário relacionada à '{{subject}}'", "ERROR_UNLINK_RELATED_USERSTORY": "Não fomos capazes de separar: {{errorMessage}}", "CREATE_RELATED_USERSTORIES": "Criar um relacionamento com", "NEW_USERSTORY": "Nova história de usuário", @@ -1116,7 +1122,7 @@ "NO_USERSTORIES": "Esse projeto ainda não possui Histórias de Usuário. Por favor, selecione outro projeto.", "FILTER_USERSTORIES": "Filtrar histórias de usuário", "LIGHTBOX_TITLE_BLOKING_EPIC": "Épico bloqueador", - "ACTION_DELETE": "Apagar épico" + "ACTION_DELETE": "Excluir épico" }, "US": { "PAGE_TITLE": "{{userStorySubject}} - História de Usuário {{userStoryRef}} - {{projectName}}", @@ -1136,7 +1142,7 @@ "PUBLISH": "Publicar como Gig no Taiga Tribe", "PUBLISH_INFO": "Mais informações", "PUBLISH_TITLE": "Mais informações sobre como publicar na Tribo Taiga", - "PUBLISHED_AS_GIG": "Story published as Gig in Taiga Tribe", + "PUBLISHED_AS_GIG": "História publicada como Apresentação na Tribo Taiga", "EDIT_LINK": "Editar link", "CLOSE": "Fechar", "SYNCHRONIZE_LINK": "sincronizar com a Tribo Taiga", @@ -1149,7 +1155,7 @@ } }, "COMMENTS": { - "DELETED_INFO": "Comentário apagado por {{user}}", + "DELETED_INFO": "Comentário excluído por {{user}}", "COMMENTS_COUNT": "{{comments}} comentários", "OLDER_FIRST": "Antigos primeiro", "RECENT_FIRST": "Recentes primeiro", @@ -1157,9 +1163,9 @@ "EDITED_COMMENT": "Editado:", "SHOW_HISTORY": "Ver histórico", "TYPE_NEW_COMMENT": "Escreva um novo comentário aqui", - "SHOW_DELETED": "Mostrar comentários apagados", - "HIDE_DELETED": "Esconder comentário apagado", - "DELETE": "Apagar comentário", + "SHOW_DELETED": "Mostrar comentários excluídos", + "HIDE_DELETED": "Esconder comentário excluído", + "DELETE": "Excluir comentário", "RESTORE": "Restaurar comentário", "HISTORY": { "TITLE": "Atividade" @@ -1172,7 +1178,7 @@ "TAGS_REMOVED": "tags removidas:", "US_POINTS": "{{role}} pontos", "NEW_ATTACHMENT": "novo anexo:", - "DELETED_ATTACHMENT": "anexo apagado:", + "DELETED_ATTACHMENT": "anexo excluído:", "UPDATED_ATTACHMENT": "anexo atualizado ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "atributo personalizado criado", "UPDATED_CUSTOM_ATTRIBUTE": "atributo personalizado atualizado", @@ -1319,7 +1325,7 @@ "TITLE_SELECT_STATUS": "Nome de Status", "OWNER_US": "Esta tarefa pertence a ", "TITLE_LINK_GO_OWNER": "Ir para história de usuário", - "TITLE_DELETE_ACTION": "Apagar Tarefa", + "TITLE_DELETE_ACTION": "Excluir Tarefa", "LIGHTBOX_TITLE_BLOKING_TASK": "Tarefa bloqueadora", "FIELDS": { "IS_IOCAINE": "É Iocaine" @@ -1333,7 +1339,7 @@ "SAVED": "Nossos Oompa Loompas salvaram todas as suas mudanças!", "CLOSE": "Fechar Notificação", "MAIL": "Notificações por Email", - "ASK_DELETE": "Você tem certeza que quer apagar?" + "ASK_DELETE": "Você tem certeza que quer excluir?" }, "CANCEL_ACCOUNT": { "TITLE": "Cancelar sua conta", @@ -1358,7 +1364,7 @@ "PROMOTED": "Esse problema foi promovido para história de usuário", "EXTERNAL_REFERENCE": "Esse problema foi criado a partir de", "GO_TO_EXTERNAL_REFERENCE": "Ir para a origem", - "ACTION_DELETE": "Problema apagado", + "ACTION_DELETE": "Problema excluído", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Problema que está bloqueando", "FIELDS": { "PRIORITY": "Prioridade", @@ -1463,7 +1469,7 @@ }, "USER_PROFILE": { "ACTION_USE_GRAVATAR": "Usar imagem padrão", - "ACTION_DELETE_ACCOUNT": "Apagar conta Taiga", + "ACTION_DELETE_ACCOUNT": "Excluir conta Taiga", "CHANGE_EMAIL_SUCCESS": "Verifique sua caixa de entrada!
    Enviamos um e-mail para sua conta
    com as instruções para definir seu novo endereço", "CHANGE_PHOTO": "Mudar foto", "FIELD": { @@ -1484,8 +1490,8 @@ "PAGE_DESCRIPTION": "Ultima edição em {{lastModifiedDate}} ({{totalEditions}} total de edições) Conteúdo: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", "REMOVE": "Remover essa página wiki", - "DELETE_LIGHTBOX_TITLE": "Apagar página Wiki", - "DELETE_LINK_TITLE": "Remover link de Wiki", + "DELETE_LIGHTBOX_TITLE": "Excluir página Wiki", + "DELETE_LINK_TITLE": "Excluir link de Wiki", "NAVIGATION": { "HOME": "Página principal", "SECTION_NAME": "MARCADORES", diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index 3d6e5e62..cf7803cb 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -17,7 +17,7 @@ "EDIT": "Редактировать", "DRAG": "Перетащите", "TAG_LINE": "Ваш свободный, agile инструмент управления проектами с открытым исходным кодом", - "TAG_LINE_2": "Любит ваши проекты", + "TAG_LINE_2": "Любите свой проект", "BLOCK": "Блокировать", "BLOCK_TITLE": "Заблокировать это, например, если имеются зависимости, которые не могут быть удовлетворены", "BLOCKED": "Заблокирован", @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Выбор языка", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Помощь по синтаксису Markdown" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Вы забыли свой пароль?", "ACTION_ENTER": "Ввод", "ACTION_SIGN_IN": "Логин", - "PLACEHOLDER_AUTH_PASSWORD": "Пароль (чувствителен к регистру)" + "PLACEHOLDER_AUTH_PASSWORD": "Пароль (чувствителен к регистру)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "Oompa Loompas считает, что ваше имя пользователя, электронная почта или пароль неправильные.", @@ -489,7 +494,7 @@ "RECRUITING": "Этот проект ищет людей?", "RECRUITING_MESSAGE": "Кого вы ищете?", "RECRUITING_PLACEHOLDER": "Уточните, какие профили вы ищете", - "FEEDBACK": "Receive feedback from Taiga users?", + "FEEDBACK": "Получать обратную связь от пользователей Тайги?", "PUBLIC_PROJECT": "Публичный проект", "PRIVATE_PROJECT": "Закрытый проект", "PRIVATE_OR_PUBLIC": "В чём разница между публичными и приватными проектами?", @@ -570,7 +575,7 @@ "ACTION_ADD": "Добавить новую степень важности" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Statuses", + "TITLE": "Статусы", "SUBTITLE": "Укажите, какие статусы будут принимать ваши пользовательские истории, задачи и запросы", "EPIC_TITLE": "Статусы Эпоса", "US_TITLE": "Статусы пользовательских историй", @@ -874,7 +879,7 @@ "DUPLICATE_DESC": "Start clean and keep your configuration", "IMPORT": "Импортировать проект", "IMPORT_DESC": "Import your project from multiple platforms into Taiga", - "INVITE": "Invite to the project", + "INVITE": "Пригласить в проект", "SOLO_PROJECT": "You'll be alone in this project", "INVITE_LATER": "(You'll be able to invite more members later)", "BACK": "Бэкенд разработчик", @@ -885,8 +890,8 @@ }, "COMMON": { "DETAILS": "New project details", - "PROJECT_TITLE": "Project Name", - "PROJECT_DESCRIPTION": "Project Description" + "PROJECT_TITLE": "Название проекта", + "PROJECT_DESCRIPTION": "Описание проекта" }, "DUPLICATE": { "TITLE": "Duplicate Project", @@ -904,7 +909,7 @@ "ERROR_MESSAGE": "У Oompa Loompas возникли проблемы при импорте резервной копии: {{error_message}}", "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})", "SYNC_SUCCESS": "Импорт проекта выполнен успешно", - "IMPORT": "Import", + "IMPORT": "Импортировать", "WHO_IS": "Their tasks will be assigned to ...", "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", @@ -913,7 +918,7 @@ "PROJECT_MEMBERS": "Участники проекта", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", - "CHOOSE": "Select user", + "CHOOSE": "Выбрать пользователя", "LINKS": "Links with {{platform}}", "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", @@ -960,7 +965,7 @@ "CHECK": "Check contacts" }, "TAIGA": { - "SELECTOR": "Import your Taiga project" + "SELECTOR": "Импортируйте свой проект из Тайги" }, "TRELLO": { "SELECTOR": "Import your Trello boards into Taiga", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", @@ -1024,10 +1030,10 @@ "ADD_MEMBER": { "TITLE": "Новый участник", "PLACEHOLDER": "Filter users or write an email to invite", - "ADD_EMAIL": "Add email", - "REMOVE": "Remove", - "INVITE": "Invite", - "CHOOSE_ROLE": "Choose a role", + "ADD_EMAIL": "Добавить электронную почту", + "REMOVE": "Удалить", + "INVITE": "Пригласить", + "CHOOSE_ROLE": "Выберите роль", "PLACEHOLDER_INVITATION_TEXT": "(Необязательно) Добавьте персональный текст в приглашение. Скажите что-нибудь приятное вашим новым участникам ;-)", "HELP_TEXT": "Если пользователи уже зарегистрированы в Тайге они добавятся автоматически. В противном случае им будет отправлено приглашение." }, @@ -1095,7 +1101,7 @@ "TITLE": "Send an email to", "WARNING": "The email will be received by the project admins", "PLACEHOLDER": "Write your message", - "SEND": "Send" + "SEND": "Отправить" } }, "EPIC": { @@ -1114,7 +1120,7 @@ "CHOOSE_PROJECT_FROM": "What's the project?", "CHOOSE_USERSTORY": "What's the user story?", "NO_USERSTORIES": "This project has no User Stories yet. Please select another project.", - "FILTER_USERSTORIES": "Filter user stories", + "FILTER_USERSTORIES": "Фильтровать ПИ", "LIGHTBOX_TITLE_BLOKING_EPIC": "Blocking epic", "ACTION_DELETE": "Удалить эпос" }, diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index d38f9e0f..77dbd2db 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Hjälp för markeringssyntax" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Har du glömt ditt lösenord?", "ACTION_ENTER": "Gå in", "ACTION_SIGN_IN": "Logga in", - "PLACEHOLDER_AUTH_PASSWORD": "Lösenord (skiftlägeskänslig)" + "PLACEHOLDER_AUTH_PASSWORD": "Lösenord (skiftlägeskänslig)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "Enligt våra Ooma Loompas är ditt användarnamn, din e-postadress eller ditt lösenord inkorrekt.", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index 012e6255..985aee99 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -10,7 +10,7 @@ "CANCEL": "İptal", "ACCEPT": "Kabul et", "DELETE": "Sil", - "UNLINK": "Unlink", + "UNLINK": "Bağlantıyı Kopar", "CREATE": "Oluştur", "ADD": "Ekle", "COPY_TO_CLIPBOARD": "Panoya kopyala: Ctrl+C", @@ -32,7 +32,7 @@ "ONE_ITEM_LINE": "Her satıra bir kalem...", "NEW_BULK": "Yeni toplu ekleme", "RELATED_TASKS": "İlişkili görevler", - "PREVIOUS": "Previous", + "PREVIOUS": "Önceki", "NEXT": "İleri", "LOGOUT": "Çıkış", "EXTERNAL_USER": "bir dış kullanıcı", @@ -40,13 +40,13 @@ "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Müşteri gereksinimi, daha önceden belli olmayan ama projeye dahil olması gereken bir gereksinimdir", "TEAM_REQUIREMENT": "Takım gereksinimi, müsteriyi ilgilendirmeyen, ama projede yer alması zorunlu olan bir gereksinimdir.", - "OWNER": "Project Owner", + "OWNER": "Proje Sahibi", "CAPSLOCK_WARNING": "Be careful! You are using capital letters in an input field that is case sensitive.", "CONFIRM_CLOSE_EDIT_MODE_TITLE": "Are you sure you want to close the edit mode?", "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Remember that if you close the edit mode without saving all the changes will be lost", "RELATED_USERSTORIES": "Related user stories", "CARD": { - "ASSIGN_TO": "Assign To", + "ASSIGN_TO": "Atanmış", "EDIT": "Edit card" }, "FORM_ERRORS": { @@ -119,9 +119,9 @@ "USER_STORY": "Kullanıcı hikayesi", "TASK": "Görev", "ISSUE": "Sorun", - "EPIC": "Epic", + "EPIC": "Destan", "TAGS": { - "PLACEHOLDER": "Enter tag", + "PLACEHOLDER": "Etiket gir", "DELETE": "Etiket sil", "ADD": "Etiket ekle" }, @@ -199,7 +199,7 @@ "TITLE_ACTION_SEARCH": "Ara", "ACTION_SAVE_CUSTOM_FILTER": "özel filtre olarak kaydet", "PLACEHOLDER_FILTER_NAME": "Filtre adı yazın ve enter a basın", - "APPLIED_FILTERS_NUM": "filters applied", + "APPLIED_FILTERS_NUM": "filtre uygulandı", "CATEGORIES": { "TYPE": "Tip", "STATUS": "Durum ", @@ -209,21 +209,25 @@ "ASSIGNED_TO": "Atanmış", "CREATED_BY": "Oluşturan", "CUSTOM_FILTERS": "Özel filtreler", - "EPIC": "Epic" + "EPIC": "Destan" } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Diş Seçin", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Markdown yazım kılavuzu" }, "PERMISIONS_CATEGORIES": { "EPICS": { - "NAME": "Epics", + "NAME": "Destanlar", "VIEW_EPICS": "View epics", "ADD_EPICS": "Add epics", "MODIFY_EPICS": "Modify epics", "COMMENT_EPICS": "Comment epics", - "DELETE_EPICS": "Delete epics" + "DELETE_EPICS": "Destanları sil" }, "SPRINTS": { "NAME": "Koşular", @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Parolanızı mı unuttunuz?", "ACTION_ENTER": "Giriş", "ACTION_SIGN_IN": "Giriş", - "PLACEHOLDER_AUTH_PASSWORD": "Parola (büyük küçük harf duyarlı)" + "PLACEHOLDER_AUTH_PASSWORD": "Parola (büyük küçük harf duyarlı)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "Umpa Lumpalarımıza göre, kullanıcı adınızı / e-posta adresinizi ya da parolanızı yanlış girdiniz.", @@ -315,8 +320,8 @@ "PLACEHOLDER_FIELD": "Kullanıcı adı veya e-posta", "ACTION_RESET_PASSWORD": "Parolayı Sıfırla", "LINK_CANCEL": "Boşver, geri gidelim. Sanırım hatırladım.", - "SUCCESS_TITLE": "Check your inbox!", - "SUCCESS_TEXT": "We sent you an email with the instructions to set a new password", + "SUCCESS_TITLE": "Gelen kutunuza bakınız!", + "SUCCESS_TEXT": "Yeni parolanızı belirlemeniz için yönergeleri içeren e-posta hesabınıza gönderilmiştir", "ERROR": "Honki ponkilerimize göre, siz henüz bir kayıt yaptırmamış durumdasınız." }, "CHANGE_PASSWORD": { @@ -350,7 +355,7 @@ "HOME": { "PAGE_TITLE": "AnaSayfa - Taiga", "PAGE_DESCRIPTION": "Atanmış ve izlenen kullanıcı hikayeleri, işler ve sorunların yanı sıra ana projeleriniz için Taiga ana sayfanız", - "EMPTY_WORKING_ON": "It feels empty, doesn't it? Start working with Taiga and you'll see here the stories, tasks and issues you are working on.", + "EMPTY_WORKING_ON": "Burası bomboş, değil mi? Taiga ile çalışmaya başlayınca burada hikayeler, isler ve sorunları göreceksin.", "EMPTY_WATCHING": "Projelerinizdeki Kullanıcı Hikayelerini, İşleri ve Sorunları takip edin ve değişikliklerden haberdar olun :) ", "EMPTY_PROJECT_LIST": "Henüz bir projeniz yok", "WORKING_ON_SECTION": "Üzerinde çalışılıyor", @@ -358,38 +363,38 @@ "DASHBOARD": "Proje Panosu" }, "EPICS": { - "TITLE": "EPICS", - "SECTION_NAME": "Epics", - "EPIC": "EPIC", - "PAGE_TITLE": "Epics - {{projectName}}", - "PAGE_DESCRIPTION": "The epics list of the project {{projectName}}: {{projectDescription}}", + "TITLE": "DESTANLAR", + "SECTION_NAME": "Destanlar", + "EPIC": "DESTAN", + "PAGE_TITLE": "Destanlar - {{projectName}}", + "PAGE_DESCRIPTION": "{{projectName}} projesinin destan listesi paneli: {{projectDescription}}", "DASHBOARD": { - "ADD": "+ ADD EPIC", + "ADD": "+ DESTAN EKLE", "UNASSIGNED": "Atama Yok" }, "EMPTY": { - "TITLE": "It looks like there aren't any epics yet", - "EXPLANATION": "Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.", - "HELP": "Learn more about epics" + "TITLE": "Görünüşe göre henüz hiç destan yok.", + "EXPLANATION": "Destanlar kullanıcı hikayelerini kapsayan geniş kapsamlı kavramlardır.
    Destanlar hiyerarşinin en üstünde yer alır ve kullanıcı hikayelerini gruplar.", + "HELP": "Destanlar hakkında daha fazla bilgi edin" }, "TABLE": { "VOTES": "Oylar", "NAME": "İsim", "PROJECT": "Proje", "SPRINT": "Koşu", - "ASSIGNED_TO": "Assigned", + "ASSIGNED_TO": "Aranmış", "STATUS": "Durum ", - "PROGRESS": "Progress", - "VIEW_OPTIONS": "View options" + "PROGRESS": "İlerleme", + "VIEW_OPTIONS": "Seçenekleri gör" }, "CREATE": { - "TITLE": "New Epic", - "PLACEHOLDER_DESCRIPTION": "Please add descriptive text to help others better understand this epic", - "TEAM_REQUIREMENT": "Team requirement", - "CLIENT_REQUIREMENT": "Client requirement", + "TITLE": "Yeni Destan", + "PLACEHOLDER_DESCRIPTION": "Lütfen diğerlerinin bu destanı daha iyi anlayabilmesi için açıklama giriniz", + "TEAM_REQUIREMENT": "Takım gereksinimi", + "CLIENT_REQUIREMENT": "İstemci Gereksinimi", "BLOCKED": "Engelli", - "BLOCKED_NOTE_PLACEHOLDER": "Why is this epic blocked?", - "CREATE_EPIC": "Create epic" + "BLOCKED_NOTE_PLACEHOLDER": "Bu destan neden engellenmiş?", + "CREATE_EPIC": "Destan yarat" } }, "PROJECTS": { @@ -438,7 +443,7 @@ "PAGE_TITLE": "Üyelikler - {{projectName}}", "ADD_BUTTON": "+ Yeni üye", "ADD_BUTTON_TITLE": "Yeni üye ekle", - "LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN": "Unfortunately, this project has reached its limit of ({{members}}) allowed members.", + "LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN": "Maalesef bu proje sınır olan ({{members}}) kullanıcı sayısına erişti.", "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator." }, "PROJECT_EXPORT": { @@ -456,14 +461,14 @@ }, "MODULES": { "TITLE": "Modüller", - "EPICS": "Epics", - "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", + "EPICS": "Destanlar", + "EPICS_DESCRIPTION": "Projenizin en stratejik parçasını görüntüleyin ve yönetin", "BACKLOG": "Havuz", "BACKLOG_DESCRIPTION": "Yeni gelen ve önceliklendirilmiş işler için düzenli bir görünüm elde etmek için kullanıcı hikayelerinizi yönetin.", - "NUMBER_SPRINTS": "Expected number of sprints", - "NUMBER_SPRINTS_HELP": "0 for an undetermined number", - "NUMBER_US_POINTS": "Expected total of story points", - "NUMBER_US_POINTS_HELP": "0 for an undetermined number", + "NUMBER_SPRINTS": "Beklenen koşu sayısı", + "NUMBER_SPRINTS_HELP": "Belirsizse 0 giriniz", + "NUMBER_US_POINTS": "Hikaye puanlarının beklenen toplamı", + "NUMBER_US_POINTS_HELP": "Belirsizse 0 giriniz", "KANBAN": "Kanban", "KANBAN_DESCRIPTION": "Bu pano ile projenizi güzel bir şekilde düzenleyin.", "ISSUES": "Sorunlar", @@ -471,7 +476,7 @@ "WIKI": "Wiki", "WIKI_DESCRIPTION": "Diğerleriyle işbirliği yaparak içerik ekleyin, düzenleyin ve silin. Burası projenizin dokümantasyonu için doğru yer.", "MEETUP": "Toplantı", - "MEETUP_DESCRIPTION": "Choose your videoconference system.", + "MEETUP_DESCRIPTION": "Video konferans sistemi seçin", "SELECT_VIDEOCONFERENCE": "Bir video konferans sistemi seç", "SALT_CHAT_ROOM": "Add a prefix to the chatroom name", "JITSI_CHAT_ROOM": "Jitsi", @@ -489,7 +494,7 @@ "RECRUITING": "Bu proje insan arıyor mu?", "RECRUITING_MESSAGE": "Ne aramıştınız?", "RECRUITING_PLACEHOLDER": "Aradığınız özellikleri yazın", - "FEEDBACK": "Receive feedback from Taiga users?", + "FEEDBACK": "Taiga kullanıcılarından geri bildirim almak ister misiniz?", "PUBLIC_PROJECT": "Açık Proje", "PRIVATE_PROJECT": "Gizli proje", "PRIVATE_OR_PUBLIC": "Açık ve özel projeler arasındaki fark nedir?", @@ -500,14 +505,14 @@ "MAX_PRIVATE_PROJECTS_MEMBERS": "The maximum number of members for private projects has been exceeded", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects allowed by your current plan", "MAX_PUBLIC_PROJECTS_MEMBERS": "The project exceeds your maximum number of members for public projects", - "PROJECT_OWNER": "Project owner", + "PROJECT_OWNER": "Proje sahibi", "REQUEST_OWNERSHIP": "Request ownership", "REQUEST_OWNERSHIP_CONFIRMATION_TITLE": "Do you want to become the new project owner?", "REQUEST_OWNERSHIP_DESC": "Request that current project owner {{name}} transfer ownership of this project to you.", "REQUEST_OWNERSHIP_BUTTON": "Talep", "REQUEST_OWNERSHIP_SUCCESS": "We'll notify the project owner", "CHANGE_OWNER": "Change owner", - "CHANGE_OWNER_SUCCESS_TITLE": "Ok, your request has been sent!", + "CHANGE_OWNER_SUCCESS_TITLE": "İsteminiz gönderildi!", "CHANGE_OWNER_SUCCESS_DESC": "We will notify you by email if the project ownership request is accepted or declined" }, "REPORTS": { @@ -519,7 +524,7 @@ "REGENERATE_SUBTITLE": "CSV veri erişim linkini değiştireceksiniz. Önceki link kapatılacak. Emin misiniz?" }, "CSV": { - "SECTION_TITLE_EPIC": "epics reports", + "SECTION_TITLE_EPIC": "destan raporları", "SECTION_TITLE_US": "kullanıcı hikayeleri raporları", "SECTION_TITLE_TASK": "görevlere ait raporlar", "SECTION_TITLE_ISSUE": "sorun raporları", @@ -532,8 +537,8 @@ "CUSTOM_FIELDS": { "TITLE": "Özel Alanlar", "SUBTITLE": "Hikayeleriniz, işleriniz ve sorunlarınız için özel alanları tanımlayın", - "EPIC_DESCRIPTION": "Epics custom fields", - "EPIC_ADD": "Add a custom field in epics", + "EPIC_DESCRIPTION": "Destanın özel alanları", + "EPIC_ADD": "Destana özel alan ekle", "US_DESCRIPTION": "Kullanıcı hikayeleri özel alanları", "US_ADD": "Kullanıcı hikayelerine özel bir alan ekleyin", "TASK_DESCRIPTION": "Görevlere ait özel alanlar", @@ -541,7 +546,7 @@ "ISSUE_DESCRIPTION": "Sorunlar için özel alanlar", "ISSUE_ADD": "Sorunlara yeni bir özel alan ekle", "FIELD_TYPE_TEXT": "Metin", - "FIELD_TYPE_RICHTEXT": "Rich text", + "FIELD_TYPE_RICHTEXT": "Zengin metin", "FIELD_TYPE_MULTI": "Çoklu-satır", "FIELD_TYPE_DATE": "Tarih", "FIELD_TYPE_URL": "Url" @@ -585,13 +590,13 @@ }, "PROJECT_VALUES_TAGS": { "TITLE": "Etiketler ", - "SUBTITLE": "View and edit the color of your tags", - "EMPTY": "Currently there are no tags", + "SUBTITLE": "Etiketin rengini gör ve düzenle", + "EMPTY": "Henüz etiket yok", "EMPTY_SEARCH": "It looks like nothing was found with your search criteria", "ACTION_ADD": "Etiket ekle", - "NEW_TAG": "New tag", - "MIXING_HELP_TEXT": "Select the tags that you want to merge", - "MIXING_MERGE": "Merge Tags", + "NEW_TAG": "Yeni etiket", + "MIXING_HELP_TEXT": "Birleştirmek istediğiniz etiketleri seçiniz", + "MIXING_MERGE": "Etiketleri Birleştir", "SELECTED": "Selected" }, "ROLES": { @@ -728,14 +733,14 @@ }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Would you like to become the new project owner?", - "PRIVATE": "Private", + "PRIVATE": "Gizli", "ACCEPTED_PROJECT_OWNERNSHIP": "Congratulations! You're now the new project owner.", "REJECTED_PROJECT_OWNERNSHIP": "OK. We'll contact the current project owner", "ACCEPT": "Kabul et", - "REJECT": "Reject", + "REJECT": "Reddet", "PROPOSE_OWNERSHIP": "{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.", "ADD_COMMENT": "Would you like to add a comment for the project owner?", - "UNLIMITED_PROJECTS": "Unlimited", + "UNLIMITED_PROJECTS": "Sınırsız", "OWNER_MESSAGE": { "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" @@ -780,8 +785,8 @@ "FILTER_TYPE_ALL_TITLE": "Hepsini göster", "FILTER_TYPE_PROJECTS": "Projeler", "FILTER_TYPE_PROJECTS_TITLE": "Sadece projeleri görüntüle", - "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPICS_TITLE": "Show only epics", + "FILTER_TYPE_EPICS": "Destanlar", + "FILTER_TYPE_EPICS_TITLE": "Sadece destanları göster", "FILTER_TYPE_USER_STORIES": "Hikayeler", "FILTER_TYPE_USER_STORIES_TITLE": "Sadece kullanıcı hikayelerini göster", "FILTER_TYPE_TASKS": "Görevler", @@ -800,9 +805,9 @@ "WATCHERS_COUNTER_TITLE": "{total, plural, one{bir takipçi} other{# takipçi}}", "MEMBERS_COUNTER_TITLE": "{total, plural, one{bir üye} other{# üye}}", "BLOCKED_PROJECT": { - "BLOCKED": "Blocked project", - "THIS_PROJECT_IS_BLOCKED": "This project is temporarily blocked", - "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "In order to unblock your projects, contact the administrator." + "BLOCKED": "Engellenmiş proje", + "THIS_PROJECT_IS_BLOCKED": "Proje geçici olarak engellenmiş", + "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "Projenizdeki engellemeyi kaldırmak için yöneticiyle bağlantı kurunuz." }, "SECTION": { "SEARCH": "Ara", @@ -858,7 +863,7 @@ } }, "CONTACT_BUTTON": { - "CONTACT_TITLE": "Contact the project team", + "CONTACT_TITLE": "Proje ekibiyle bağlantıya geçin", "CONTACT_BUTTON": "Contact the project" }, "CREATE": { @@ -870,31 +875,31 @@ "TEMPLATE_KANBAN": "Kanban", "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", - "DUPLICATE": "Duplicate project", + "DUPLICATE": "Projeyi Kopayala", "DUPLICATE_DESC": "Start clean and keep your configuration", "IMPORT": "Projeyi İçe Aktar", "IMPORT_DESC": "Import your project from multiple platforms into Taiga", - "INVITE": "Invite to the project", + "INVITE": "Projeye davet et", "SOLO_PROJECT": "You'll be alone in this project", "INVITE_LATER": "(You'll be able to invite more members later)", "BACK": "Arka", "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project" + "PUBLIC_PROJECT": "Açık Proje", + "PRIVATE_PROJECT": "Gizli Proje" }, "COMMON": { "DETAILS": "New project details", - "PROJECT_TITLE": "Project Name", - "PROJECT_DESCRIPTION": "Project Description" + "PROJECT_TITLE": "Proje Adı", + "PROJECT_DESCRIPTION": "Proje Tanımı" }, "DUPLICATE": { - "TITLE": "Duplicate Project", + "TITLE": "Projeyi Kopyala", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" + "SELECT_PLACEHOLDER": "Kopyalamak için var olan bir proje seçin" }, "IMPORT": { - "TITLE": "Import Project", + "TITLE": "Projeyi İçe Aktar", "DESCRIPTION": "Import your project from multiple platforms into Taiga", "ASYNC_IN_PROGRESS_TITLE": "Bizim honki ponkiler projenizi içeriye aktarıyor", "ASYNC_IN_PROGRESS_MESSAGE": "Bu işlem bir kaç dakika sürecek
    Hazır olduğunda bir e-posta göndereceğiz", @@ -904,16 +909,16 @@ "ERROR_MESSAGE": "Honki ponkilerimiz döküm dosyanızı içeri aktarırken birkaç problem yaşadı: {{error_message}}", "ERROR_MAX_SIZE_EXCEEDED": "({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin", "SYNC_SUCCESS": "Projeniz başarıyla içe aktarıldı", - "IMPORT": "Import", + "IMPORT": "İçe Aktar", "WHO_IS": "Their tasks will be assigned to ...", "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", - "PROJECT_MEMBERS": "Project Members", + "PROJECT_MEMBERS": "Proje Üyeleri", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", - "CHOOSE": "Select user", + "CHOOSE": "Kullanıcı seçin", "LINKS": "Links with {{platform}}", "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", @@ -972,7 +977,7 @@ "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", - "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT": "Kanban projesine kullanıcı hikayesi olarak", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", @@ -1007,8 +1013,8 @@ "LIGHTBOX": { "DELETE_ACCOUNT": { "CONFIRM": "Taiga hesabınızı silmek istediğinizden emin misiniz?", - "CANCEL": "Back to settings", - "ACCEPT": "Delete account", + "CANCEL": "Ayarlara dön", + "ACCEPT": "Hesabı sil", "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account." }, "DELETE_PROJECT": { @@ -1023,11 +1029,11 @@ }, "ADD_MEMBER": { "TITLE": "Yeni üye", - "PLACEHOLDER": "Filter users or write an email to invite", - "ADD_EMAIL": "Add email", - "REMOVE": "Remove", - "INVITE": "Invite", - "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER": "Kullanıcıları süzün ya da davet etmek için e-posta yazın", + "ADD_EMAIL": "e-posta ekle", + "REMOVE": "Kaldır", + "INVITE": "Davet et", + "CHOOSE_ROLE": "Rol seçiniz", "PLACEHOLDER_INVITATION_TEXT": "(Opsiyonel) Davetinize kişiselleştirilmiş bir metin ekleyin. Yeni üyelerinize tatlı bir şeyler söyleyin ;-)", "HELP_TEXT": "Eğer kullanıcılar önceden Taigaya kayıt olmuşlarsa, otomatik olarak ekleneceklerdir. Eğer olmamışlarsa bir davet mektubu alacaklardır." }, @@ -1088,35 +1094,35 @@ }, "CHANGE_OWNER": { "TITLE": "Who do you want to be the new project owner?", - "ADD_COMMENT": "Add comment", + "ADD_COMMENT": "Yorum ekle", "BUTTON": "Ask this project member to become the new project owner" }, "CONTACT_PROJECT": { "TITLE": "Send an email to", - "WARNING": "The email will be received by the project admins", - "PLACEHOLDER": "Write your message", - "SEND": "Send" + "WARNING": "Bu e-posta proje yöneticileri tarafından alıncak", + "PLACEHOLDER": "Mesajınızı yazın", + "SEND": "Gönder" } }, "EPIC": { - "PAGE_TITLE": "{{epicSubject}} - Epic {{epicRef}} - {{projectName}}", - "PAGE_DESCRIPTION": "Status: {{epicStatus }}. Description: {{epicDescription}}", - "SECTION_NAME": "Epic", - "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Unlink related userstory", + "PAGE_TITLE": "{{epicSubject}} - Destan {{epicRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "Durum: {{epicStatus }}. Açıklama: {{epicDescription}}", + "SECTION_NAME": "Destan", + "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "İlgili kullanıcı hikayesinin ilişkisini kaldırın", "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "It will delete the link to the related userstory '{{subject}}'", "ERROR_UNLINK_RELATED_USERSTORY": "We have not been able to unlink: {{errorMessage}}", "CREATE_RELATED_USERSTORIES": "Create a relationship with", "NEW_USERSTORY": "Yeni kullanıcı hikayesi", - "EXISTING_USERSTORY": "Existing user story", - "CHOOSE_PROJECT_FOR_CREATION": "What's the project?", + "EXISTING_USERSTORY": "Var olan kullanıcı hikayesi", + "CHOOSE_PROJECT_FOR_CREATION": "Proje nedir?", "SUBJECT": "Konu", "SUBJECT_BULK_MODE": "Subject (bulk insert)", - "CHOOSE_PROJECT_FROM": "What's the project?", + "CHOOSE_PROJECT_FROM": "Proje nedir?", "CHOOSE_USERSTORY": "What's the user story?", - "NO_USERSTORIES": "This project has no User Stories yet. Please select another project.", + "NO_USERSTORIES": "Bu projenin henüz Kullanıcı Hikayesi yok. Lütfen başka proje seçiniz.", "FILTER_USERSTORIES": "Filter user stories", "LIGHTBOX_TITLE_BLOKING_EPIC": "Blocking epic", - "ACTION_DELETE": "Delete epic" + "ACTION_DELETE": "Destan sil" }, "US": { "PAGE_TITLE": "{{userStorySubject}} - Kullanıcı Hikayesi {{userStoryRef}} - {{projectName}}", @@ -1134,11 +1140,11 @@ "NOT_ESTIMATED": "Kestirim yapılmamış", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", - "PUBLISH_INFO": "More info", + "PUBLISH_INFO": "Daha fazla bilgi", "PUBLISH_TITLE": "More info on publishing in Taiga Tribe", "PUBLISHED_AS_GIG": "Story published as Gig in Taiga Tribe", "EDIT_LINK": "Edit link", - "CLOSE": "Close", + "CLOSE": "Kapat", "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", "PUBLISH_MORE_INFO_TEXT": "

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    " @@ -1149,10 +1155,10 @@ } }, "COMMENTS": { - "DELETED_INFO": "Comment deleted by {{user}}", - "COMMENTS_COUNT": "{{comments}} Comments", - "OLDER_FIRST": "Older first", - "RECENT_FIRST": "Recent first", + "DELETED_INFO": "Yorum {{user}} tarafından silindi", + "COMMENTS_COUNT": "{{comments}} Yorum", + "OLDER_FIRST": "Eskiden yeniye", + "RECENT_FIRST": "Yeniden eskiye", "COMMENT": "Yorum Yap", "EDITED_COMMENT": "Edited:", "SHOW_HISTORY": "View historic", @@ -1167,12 +1173,12 @@ }, "ACTIVITY": { "TITLE": "Aktivite", - "ACTIVITIES_COUNT": "{{activities}} Activities", + "ACTIVITIES_COUNT": "{{activities}} Aktivite", "TAGS_ADDED": "tags added:", "TAGS_REMOVED": "tags removed:", "US_POINTS": "{{role}} points", - "NEW_ATTACHMENT": "new attachment:", - "DELETED_ATTACHMENT": "deleted attachment:", + "NEW_ATTACHMENT": "yeni eklenti:", + "DELETED_ATTACHMENT": "silinmiş eklenti:", "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", @@ -1410,7 +1416,7 @@ "SEARCH": { "PAGE_TITLE": "Ara - {{projectName}}", "PAGE_DESCRIPTION": "Projedeki hikayeleri, sorunları, işleri, viki sayfalarını ya da herhangi bir şeyi arayın {{projectName}}: {{projectDescription}}", - "FILTER_EPICS": "Epics", + "FILTER_EPICS": "Destanlar", "FILTER_USER_STORIES": "Kullanıcı Hikayeleri", "FILTER_ISSUES": "Sorunlar ", "FILTER_TASKS": "Görevler", @@ -1485,26 +1491,26 @@ "DATETIME": "DD MMM YYYY HH:mm", "REMOVE": "Bu wiki sayfasını sil", "DELETE_LIGHTBOX_TITLE": "Wiki Sayfası Sil", - "DELETE_LINK_TITLE": "Delete Wiki link", + "DELETE_LINK_TITLE": "Wiki bağlantısı sil", "NAVIGATION": { - "HOME": "Main Page", - "SECTION_NAME": "BOOKMARKS", - "ACTION_ADD_LINK": "Add bookmark", - "ALL_PAGES": "All wiki pages" + "HOME": "Ana Sayfa", + "SECTION_NAME": "YER İMLERİ", + "ACTION_ADD_LINK": "Yer imi ekle", + "ALL_PAGES": "Tüm Wiki sayfaları" }, "SUMMARY": { "TIMES_EDITED": "kere
    düzenlendi", "LAST_EDIT": "son
    düzenleme", "LAST_MODIFICATION": "son düzenleme" }, - "SECTION_PAGES_LIST": "All pages", + "SECTION_PAGES_LIST": "Tüm sayfalar", "PAGES_LIST_COLUMNS": { "TITLE": "Title", "EDITIONS": "Editions", "CREATED": "Oluşturuldu", - "MODIFIED": "Modified", + "MODIFIED": "Değiştirilmiş", "CREATOR": "Creator", - "LAST_MODIFIER": "Last modifier" + "LAST_MODIFIER": "Son düzenleyen" } }, "HINTS": { @@ -1631,7 +1637,7 @@ } }, "DISCOVER": { - "PAGE_TITLE": "Discover projects - Taiga", + "PAGE_TITLE": "Projeleri keşfedin - Taiga", "PAGE_DESCRIPTION": "Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.", "DISCOVER_TITLE": "Proje keşfedin", "DISCOVER_SUBTITLE": "{projects, plural, one{Keşfedilecek bir açık proje} other{Keşfedilecek # açık proje}}", diff --git a/app/locales/taiga/locale-zh-hans.json b/app/locales/taiga/locale-zh-hans.json index b62f18d2..71f6c46b 100644 --- a/app/locales/taiga/locale-zh-hans.json +++ b/app/locales/taiga/locale-zh-hans.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "在你编辑期间其他人做过变更,保存前请先检查新版本", "MARKDOWN_HELP": "Markdown 语法帮助" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "您忘记密码了吗", "ACTION_ENTER": "回车", "ACTION_SIGN_IN": "登录", - "PLACEHOLDER_AUTH_PASSWORD": "密码(大小写敏感)" + "PLACEHOLDER_AUTH_PASSWORD": "密码(大小写敏感)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "根据我们的系统记录,你的账户名称/电子邮件或密码并不正确", @@ -570,7 +575,7 @@ "ACTION_ADD": "新增严重程度" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Statuses", + "TITLE": "状态", "SUBTITLE": "指明你的用户故事,任务以及问题经历的状态", "EPIC_TITLE": "史诗状态", "US_TITLE": "用户故事状态", @@ -865,13 +870,13 @@ "TITLE": "创建项目", "CHOOSE_TEMPLATE": "哪个模板更适合你的项目?", "TEMPLATE_SCRUM": "冲刺", - "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_DESC": "优先考虑和解决的时间周期短的任务.", "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", "TEMPLATE_KANBAN": "看板", - "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_DESC": "在独立的任务上保持恒定的工作流", "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", "DUPLICATE": "复制项目", - "DUPLICATE_DESC": "Start clean and keep your configuration", + "DUPLICATE_DESC": "开始清洁并保持您的配置", "IMPORT": "导入项目", "IMPORT_DESC": "从多平台导入你的项目到Taiga", "INVITE": "邀请加入项目", @@ -879,7 +884,7 @@ "INVITE_LATER": "(你可以在之后邀请更多成员)", "BACK": "后退", "MAX_PRIVATE_PROJECTS": "很抱歉,你创建的私有项目数量已到达限制。如果想创建更多私有项目,请联系管理员", - "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "不幸的是,你已经达到了公开项目的最大数量限制。\n如果您想增加当前限制数量,请与管理员联系。", "PUBLIC_PROJECT": "公开项目", "PRIVATE_PROJECT": "私有项目" }, @@ -890,7 +895,7 @@ }, "DUPLICATE": { "TITLE": "复制项目", - "DESCRIPTION": "Start clean and keep your configuration", + "DESCRIPTION": "开始清洁并保持您的配置 ", "SELECT_PLACEHOLDER": "选择一个已存在的项目来复制" }, "IMPORT": { @@ -905,18 +910,18 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})", "SYNC_SUCCESS": "你的项目已成功导入", "IMPORT": "导入", - "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", - "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", + "WHO_IS": "他们的任务将被分配给…", + "WRITE_EMAIL": "或者如果你愿意,写下这个用户在Taiga使用的电子邮件", + "SEARCH_CONTACT": "或者如果你愿意,在你的联系人中检索", + "WRITE_EMAIL_LABEL": "写下这个用户在Taiga使用的电子邮件", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "项目成员", - "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "PROCESS_DESCRIPTION": "告诉我们你想要分配{{platform}}的任务给来自Taiga中的谁", "MATCH": "{{user_external}}{{user_internal}}是同一个人吗?", "CHOOSE": "选择用户", - "LINKS": "Links with {{platform}}", - "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", - "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "LINKS": "与{{platform}}链接", + "LINKS_DESCRIPTION": "是否要保留每个条目与原{{platform}} 卡片的链接?", + "WARNING_MAIL_USER": "注意,如果用户没有Taiga的帐户将无法分配任务给他。 ", "ASSIGN": "指派", "PROJECT_SELECTOR": { "NO_RESULTS": "看起来没有符合你的搜索条件的结果", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index d0b217af..36941620 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -213,6 +213,10 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Markdown 語法協助" }, @@ -285,7 +289,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "你是否忘了密碼嗎", "ACTION_ENTER": "Enter", "ACTION_SIGN_IN": "登入", - "PLACEHOLDER_AUTH_PASSWORD": "密碼(大小寫有別)" + "PLACEHOLDER_AUTH_PASSWORD": "密碼(大小寫有別)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "按我們的箹統記錄,你的帳戶名稱/電子郵件或密碼並不正確 ", @@ -990,6 +995,7 @@ }, "JIRA": { "SELECTOR": "Import your Jira project and choose how to manage it", + "HOW_TO_CONFIGURE": "(configuration help)", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL",