From 4ba4f42364f3b7d159272448456d9b345a3bc732 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Wed, 11 Mar 2015 15:00:09 +0100 Subject: [PATCH 001/194] fix assignedTo hover --- app/styles/components/taskboard-task.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/styles/components/taskboard-task.scss b/app/styles/components/taskboard-task.scss index be1b0678..398aeee1 100644 --- a/app/styles/components/taskboard-task.scss +++ b/app/styles/components/taskboard-task.scss @@ -89,6 +89,9 @@ @extend %small; color: $postit-dark-hover; display: block; + &:hover { + color: $green-taiga; + } } .task-num { color: $grayer; From b988e71a6fa9ef666de9d8353bc387aa68a6512b Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 17 Mar 2015 13:53:36 +0100 Subject: [PATCH 002/194] Bug 2456 Active menu items are not hightlighted --- app/partials/admin/admin-third-parties-webhooks.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/admin/admin-third-parties-webhooks.jade b/app/partials/admin/admin-third-parties-webhooks.jade index b88fd939..6ccf0e3d 100644 --- a/app/partials/admin/admin-third-parties-webhooks.jade +++ b/app/partials/admin/admin-third-parties-webhooks.jade @@ -4,7 +4,7 @@ block head block content div.wrapper.roles(ng-controller="WebhooksController as ctrl", ng-init="section='admin'") - sidebar.menu-secondary.sidebar(tg-admin-navigation="Webhooks") + sidebar.menu-secondary.sidebar(tg-admin-navigation="third-parties") include ../includes/modules/admin-menu sidebar.menu-tertiary.sidebar(tg-admin-navigation="third-parties-webhooks") include ../includes/modules/admin-submenu-third-parties From 0f5507f84ad529b552106cef2d556fde275e3691 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Fri, 20 Mar 2015 08:10:26 +0100 Subject: [PATCH 003/194] fix taskboard with 28" screens --- app/partials/taskboard/taskboard.jade | 19 ++++++++++--------- app/styles/layout/taskboard.scss | 12 +++++++++--- .../modules/backlog/taskboard-table.scss | 3 ++- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/app/partials/taskboard/taskboard.jade b/app/partials/taskboard/taskboard.jade index 3977bb8b..33faab92 100644 --- a/app/partials/taskboard/taskboard.jade +++ b/app/partials/taskboard/taskboard.jade @@ -1,17 +1,18 @@ div.wrapper(tg-taskboard, ng-controller="TaskboardController as ctrl", ng-init="section='backlog'") section.main.taskboard - h1 - span(tg-bo-bind="project.name", class="project-name-short") - span.green(tg-bo-bind="sprint.name") - span.date(tg-date-range="sprint.estimated_start,sprint.estimated_finish") - include ../includes/components/sprint-summary + .taskboard-inner + h1 + span(tg-bo-bind="project.name", class="project-name-short") + span.green(tg-bo-bind="sprint.name") + span.date(tg-date-range="sprint.estimated_start,sprint.estimated_finish") + include ../includes/components/sprint-summary - div.graphics-container - div.burndown(tg-sprint-graph) - include ../includes/modules/burndown + div.graphics-container + div.burndown(tg-sprint-graph) + include ../includes/modules/burndown - include ../includes/modules/taskboard-table + include ../includes/modules/taskboard-table div.lightbox.lightbox-generic-form(tg-lb-create-edit-task) include ../includes/modules/lightbox-task-create-edit diff --git a/app/styles/layout/taskboard.scss b/app/styles/layout/taskboard.scss index 71ee04c2..663a8d9e 100644 --- a/app/styles/layout/taskboard.scss +++ b/app/styles/layout/taskboard.scss @@ -1,7 +1,6 @@ .taskboard { - display: flex; - flex-direction: column; - max-height: 100vh; + height: 100vh; + overflow: hidden; h1, .graphics-container, .summary { @@ -11,3 +10,10 @@ @include slide(300px, hidden); } } + +.taskboard-inner { + display: flex; + flex-direction: column; + height: 100%; + overflow: hidden; +} diff --git a/app/styles/modules/backlog/taskboard-table.scss b/app/styles/modules/backlog/taskboard-table.scss index 6863e530..892e6ccd 100644 --- a/app/styles/modules/backlog/taskboard-table.scss +++ b/app/styles/modules/backlog/taskboard-table.scss @@ -47,6 +47,7 @@ $column-margin: 0 10px 0 0; .taskboard-table { display: flex; flex-direction: column; + height: 100%; overflow: hidden; width: 100%; } @@ -109,7 +110,7 @@ $column-margin: 0 10px 0 0; } .taskboard-table-body { - height: 700px; + height: 100%; overflow: auto; width: 100%; .task-column { From 0e294bcaf10efd0f26bfaa36bf9065376c19fac8 Mon Sep 17 00:00:00 2001 From: Andrea Stagi Date: Fri, 20 Mar 2015 08:11:06 +0100 Subject: [PATCH 004/194] Update filters count on issue status update --- app/coffee/modules/issues/list.coffee | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index 7d2e1234..47944bc5 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -531,6 +531,10 @@ IssuesFiltersDirective = ($log, $location, $rs, $confirm, $loading, $template) - $scope.$on "filters:loaded", (ctx, filters) -> initializeSelectedFilters(filters) + $scope.$on "filters:issueupdate", (ctx, filters) -> + html = template({filters:filters.statuses}) + $el.find(".filter-list").html(html) + selectQFilter = debounceLeading 100, (value) -> return if value is undefined @@ -656,7 +660,7 @@ module.directive("tgIssuesFilters", ["$log", "$tgLocation", "$tgResources", "$tg ## Issue status Directive (popover for change status) ############################################################################# -IssueStatusInlineEditionDirective = ($repo, $template) -> +IssueStatusInlineEditionDirective = ($repo, $template, $rootscope) -> ### Print the status of an Issue and a popover to change it. - tg-issue-status-inline-edition: The issue @@ -694,6 +698,11 @@ IssueStatusInlineEditionDirective = ($repo, $template) -> event.preventDefault() event.stopPropagation() target = angular.element(event.currentTarget) + + for filter in $scope.filters.statuses + if filter.id == issue.status + filter.count-- + issue.status = target.data("status-id") $el.find(".pop-status").popover().close() updateIssueStatus($el, issue, $scope.issueStatusById) @@ -701,6 +710,11 @@ IssueStatusInlineEditionDirective = ($repo, $template) -> $scope.$apply () -> $repo.save(issue).then + for filter in $scope.filters.statuses + if filter.id == issue.status + filter.count++ + $rootscope.$broadcast("filters:issueupdate", $scope.filters) + taiga.bindOnce $scope, "project", (project) -> $el.append(selectionTemplate({ 'statuses': project.issue_statuses })) updateIssueStatus($el, issue, $scope.issueStatusById) @@ -718,7 +732,7 @@ IssueStatusInlineEditionDirective = ($repo, $template) -> return {link: link} -module.directive("tgIssueStatusInlineEdition", ["$tgRepo", "$tgTemplate", IssueStatusInlineEditionDirective]) +module.directive("tgIssueStatusInlineEdition", ["$tgRepo", "$tgTemplate", "$rootScope", IssueStatusInlineEditionDirective]) ############################################################################# From d7c348ab75010c6a6b4f62c33b0ec0bae7bb188e Mon Sep 17 00:00:00 2001 From: Amaury Date: Fri, 20 Mar 2015 10:02:22 -0300 Subject: [PATCH 005/194] Fix the name of the deadliest poison known to man --- app/partials/includes/components/large-summary.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/includes/components/large-summary.jade b/app/partials/includes/components/large-summary.jade index ed410e63..ef20c24f 100644 --- a/app/partials/includes/components/large-summary.jade +++ b/app/partials/includes/components/large-summary.jade @@ -32,5 +32,5 @@ div.summary.large-summary div.summary-stats span.icon.icon-iocaine span.number 10 - span.description iocanie
doses + span.description iocaine
doses a.icon.icon-stats.toggle-analytics-visibility(href="", title="Show statistics") From 5fb13b61d2924d3747f5a0d9fedbc4040ffad4df Mon Sep 17 00:00:00 2001 From: Andrea Stagi Date: Tue, 24 Mar 2015 08:42:23 +0100 Subject: [PATCH 006/194] Hide not filtered issues on status change --- app/coffee/modules/issues/list.coffee | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index 47944bc5..7bc3a7ef 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -715,6 +715,16 @@ IssueStatusInlineEditionDirective = ($repo, $template, $rootscope) -> filter.count++ $rootscope.$broadcast("filters:issueupdate", $scope.filters) + hideIssue = true + + for filter in $scope.filters.statuses + if filter.selected == true && filter.id == issue.status + hideIssue = false + break + + if hideIssue == true + $scope.issues.splice($scope.issues.indexOf(issue), 1) + taiga.bindOnce $scope, "project", (project) -> $el.append(selectionTemplate({ 'statuses': project.issue_statuses })) updateIssueStatus($el, issue, $scope.issueStatusById) From 4d6164915e7d7e064165849814073b5ee121c885 Mon Sep 17 00:00:00 2001 From: Zach Capalbo Date: Wed, 25 Mar 2015 20:08:04 -0400 Subject: [PATCH 007/194] Enable Kanban board to work with touch screens via inclusion of of jquery touch-punch --- app/js/jquery.ui.touch-punch.min.js | 11 +++++++++++ gulpfile.js | 1 + 2 files changed, 12 insertions(+) create mode 100644 app/js/jquery.ui.touch-punch.min.js diff --git a/app/js/jquery.ui.touch-punch.min.js b/app/js/jquery.ui.touch-punch.min.js new file mode 100644 index 00000000..8c8ceb4d --- /dev/null +++ b/app/js/jquery.ui.touch-punch.min.js @@ -0,0 +1,11 @@ +/*! + * jQuery UI Touch Punch 0.2.3 + * + * Copyright 2011–2014, Dave Furfero + * Dual licensed under the MIT or GPL Version 2 licenses. + * + * Depends: + * jquery.ui.widget.js + * jquery.ui.mouse.js + */ +!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); diff --git a/gulpfile.js b/gulpfile.js index dbef97e0..72ef3857 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -105,6 +105,7 @@ paths.libs = [ paths.app + "vendor/l.js/l.js", paths.app + "js/jquery.ui.git-custom.js", paths.app + "js/jquery-ui.drag-multiple-custom.js", + paths.app + "js/jquery.ui.touch-punch.min.js", paths.app + "js/sha1-custom.js" ]; From e0993206ef196272fb3ec025313534eb53ea8bf3 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Fri, 27 Mar 2015 11:17:09 +0100 Subject: [PATCH 008/194] fix reset US edit lightbox points --- app/coffee/modules/common/estimation.coffee | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/coffee/modules/common/estimation.coffee b/app/coffee/modules/common/estimation.coffee index 3ca34f5f..09b11e5e 100644 --- a/app/coffee/modules/common/estimation.coffee +++ b/app/coffee/modules/common/estimation.coffee @@ -40,12 +40,14 @@ LbUsEstimationDirective = ($tgEstimationsService, $rootScope, $repo, $confirm, $ link = ($scope, $el, $attrs, $model) -> $scope.$watch $attrs.ngModel, (us) -> + console.log "watch" if us estimationProcess = $tgEstimationsService.create($el, us, $scope.project) estimationProcess.onSelectedPointForRole = (roleId, pointId) -> $scope.$apply -> $model.$setViewValue(us) + estimationProcess.render = () -> ctx = { totalPoints: @calculateTotalPoints() @@ -224,16 +226,12 @@ EstimationsService = ($template, $qqueue, $repo, $confirm, $q) -> @$el.find(".pop-points-open").show() create = ($el, us, project) -> - estimationProcess = $el.data("estimationProcess") + $el.unbind("click") - if !estimationProcess - estimationProcess = new EstimationProcess($el, us, project) - $el.data("estimationProcess", estimationProcess) + estimationProcess = new EstimationProcess($el, us, project) if estimationProcess.isEditable estimationProcess.bindClickEvents() - else - $el.unbind("click") return estimationProcess From 663c9cc0a80761079d6a9aff0c6e1773cc988813 Mon Sep 17 00:00:00 2001 From: Andrea Stagi Date: Mon, 30 Mar 2015 16:06:17 +0200 Subject: [PATCH 009/194] Restore applied filters when there's no visible userstory --- app/coffee/modules/backlog/main.coffee | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index ab7773c8..313d597f 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -439,12 +439,16 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F return _.pick(@location.search(), "statuses", "tags", "q") generateFilters: -> + urlfilters = @.getUrlFilters() @scope.filters = {} #tags plainTags = _.flatten(_.filter(_.map(@scope.visibleUserstories, "tags"))) plainTags.sort() + if plainTags.length == 0 and urlfilters["tags"] + plainTags.push(urlfilters["tags"]) + @scope.filters.tags = _.map _.countBy(plainTags), (v, k) => obj = { id: k, @@ -466,6 +470,9 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F if status return status + if plainStatuses.length == 0 and urlfilters["statuses"] + plainStatuses.push(urlfilters["statuses"]) + @scope.filters.statuses = _.map _.countBy(plainStatuses), (v, k) => obj = { id: k, From de5d35a10afe4685197338d4c9d9977e868f6f11 Mon Sep 17 00:00:00 2001 From: Andrea Stagi Date: Tue, 31 Mar 2015 00:08:52 +0200 Subject: [PATCH 010/194] Update filters and visible user stories on user stories update --- app/coffee/modules/backlog/filters.coffee | 3 +++ app/coffee/modules/backlog/main.coffee | 7 +++++++ app/partials/includes/components/backlog-row.jade | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/backlog/filters.coffee b/app/coffee/modules/backlog/filters.coffee index 8185fdf2..bf6a4186 100644 --- a/app/coffee/modules/backlog/filters.coffee +++ b/app/coffee/modules/backlog/filters.coffee @@ -116,6 +116,9 @@ BacklogFiltersDirective = ($log, $location, $templates) -> $scope.$on "filters:loaded", (ctx, filters) -> initializeSelectedFilters(filters) + $scope.$on "filters:update", (ctx, filters) -> + renderFilters(filters) + ## Dom Event Handlers $el.on "click", ".filters-cats > ul > li > a", (event) -> event.preventDefault() diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index ab7773c8..fd1292c8 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -491,6 +491,13 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F ## Template actions + updateUserStoryStatus: () -> + @.setSearchDataFilters() + @.filterVisibleUserstories() + @.generateFilters() + @rootscope.$broadcast("filters:update", @scope.filters['statuses']) + @.loadProjectStats() + editUserStory: (us) -> @rootscope.$broadcast("usform:edit", us) diff --git a/app/partials/includes/components/backlog-row.jade b/app/partials/includes/components/backlog-row.jade index 7b10d154..f1b39194 100644 --- a/app/partials/includes/components/backlog-row.jade +++ b/app/partials/includes/components/backlog-row.jade @@ -13,7 +13,7 @@ div.row.us-item-row(ng-repeat="us in visibleUserstories track by us.id", tg-bind a.icon.icon-delete(tg-check-permission="delete_us", href="", ng-click="ctrl.deleteUserStory(us)", title="Delete") - div.status(tg-us-status="us" on-update="ctrl.loadProjectStats()") + div.status(tg-us-status="us" on-update="ctrl.updateUserStoryStatus()") a.us-status(href="", title="Status Name") span.us-status-bind span.icon.icon-arrow-bottom(tg-check-permission="modify_us") From 670129a2cc56efe1630e39bc798d7fe55a661b3b Mon Sep 17 00:00:00 2001 From: Jonathan Barratt Date: Tue, 31 Mar 2015 19:19:31 +0700 Subject: [PATCH 011/194] Replace all color literals with color variables --- app/styles/components/loading-bar.scss | 2 +- app/styles/dependencies/colors.scss | 16 ++++++++++++++++ app/styles/layout/base.scss | 4 ++-- app/styles/layout/elements.scss | 6 +++--- app/styles/layout/invitation.scss | 2 +- app/styles/layout/typography.scss | 2 +- .../modules/admin/admin-functionalities.scss | 2 +- .../modules/admin/admin-membership-table.scss | 2 +- app/styles/modules/admin/admin-roles.scss | 4 ++-- .../modules/admin/admin-submenu-roles.scss | 2 +- app/styles/modules/admin/admin-submenu.scss | 2 +- app/styles/modules/common/projects-nav.scss | 2 +- app/styles/modules/wiki/wiki-nav.scss | 2 +- 13 files changed, 32 insertions(+), 16 deletions(-) diff --git a/app/styles/components/loading-bar.scss b/app/styles/components/loading-bar.scss index 1e68bf04..3cf3e26f 100644 --- a/app/styles/components/loading-bar.scss +++ b/app/styles/components/loading-bar.scss @@ -13,7 +13,7 @@ height: 5px; } - $colors-list: #bbe831 #237400 #e43050 #810061 #618000; + $colors-list: $yellow-pear $green-japanese-laurel $red-amaranth $purple-eggplant $green-olive; @each $current-color in $colors-list { $i: index($colors-list, $current-color) - 1; .item-#{$i} { diff --git a/app/styles/dependencies/colors.scss b/app/styles/dependencies/colors.scss index aeaffb2d..662d23ec 100755 --- a/app/styles/dependencies/colors.scss +++ b/app/styles/dependencies/colors.scss @@ -5,9 +5,21 @@ $blackish: #050505; $grayer: #444; $gray: #555; $gray-light: #b8b8b8; +$gray-tower-gray: #a6b2a7; +$gray-saltpan: #e9f0da; +$gray-silver: #cdcdcd; +$gray46-47: #777; +$gray60: #999; +$gray80: #ccc; +$gray87-88: #ddd; +$gray-mine-shaft: #232323; $whitish: #f5f5f5; $white: #fff; +$green-japanese-laurel: #237400; +$green-olive: #618000; +$green-christi: #74a218; + $green-taiga: #72a114; $fresh-taiga: #9dce0a; $dark-taiga: #879b89; @@ -15,6 +27,10 @@ $dark-taiga: #879b89; $red-light: #ff8282; $red: #f00; +$red-amaranth: #e43050; +$purple-eggplant: #810061; +$yellow-pear: #bbe831; + $postit: #fff8e4; $postit-hover: #f1e8cd; $postit-dark-hover: #cfc29b; diff --git a/app/styles/layout/base.scss b/app/styles/layout/base.scss index cae94352..19a65308 100644 --- a/app/styles/layout/base.scss +++ b/app/styles/layout/base.scss @@ -5,8 +5,8 @@ html { } body { @extend %text; - background: #fff; // fallback - color: #444; + background: $white; // fallback + color: $grayer; min-height: 100%; width: 100%; .master { diff --git a/app/styles/layout/elements.scss b/app/styles/layout/elements.scss index 44f9c1da..1df28c3e 100644 --- a/app/styles/layout/elements.scss +++ b/app/styles/layout/elements.scss @@ -3,17 +3,17 @@ // Blockquotes blockquote, blockquote p { - color: #777; + color: $gray46-47; font-style: italic; line-height: 24px; } blockquote { - border-left: 1px solid #ddd; + border-left: 1px solid $gray87-88; margin: 0 0 20px; padding: 9px 20px 0 19px; cite { @extend %small; - color: #555; + color: $gray; display: block; &:before { content: '\2014 \0020'; diff --git a/app/styles/layout/invitation.scss b/app/styles/layout/invitation.scss index 6f66c900..afa8a95a 100644 --- a/app/styles/layout/invitation.scss +++ b/app/styles/layout/invitation.scss @@ -100,7 +100,7 @@ text-align: center; width: 200px; .form-header { - color: #999; + color: $gray60; } } .register-form { diff --git a/app/styles/layout/typography.scss b/app/styles/layout/typography.scss index bf4bbba9..8ffbcd98 100755 --- a/app/styles/layout/typography.scss +++ b/app/styles/layout/typography.scss @@ -80,7 +80,7 @@ strong { } hr { - border: solid #ddd; + border: solid $gray87-88; border-width: 1px 0 0; clear: both; height: 0; diff --git a/app/styles/modules/admin/admin-functionalities.scss b/app/styles/modules/admin/admin-functionalities.scss index 6f92a677..0e7f55cb 100644 --- a/app/styles/modules/admin/admin-functionalities.scss +++ b/app/styles/modules/admin/admin-functionalities.scss @@ -19,7 +19,7 @@ vertical-align: top; width: 32%; &.active { - background-color: #e9f0da; + background-color: $gray-saltpan; opacity: 1; } .icon { diff --git a/app/styles/modules/admin/admin-membership-table.scss b/app/styles/modules/admin/admin-membership-table.scss index 820a3232..b7926d84 100644 --- a/app/styles/modules/admin/admin-membership-table.scss +++ b/app/styles/modules/admin/admin-membership-table.scss @@ -139,7 +139,7 @@ } input:checked { + div { - background-color: #74a218; + background-color: $green-christi; margin-left: 50%; transition: all .2s linear; } diff --git a/app/styles/modules/admin/admin-roles.scss b/app/styles/modules/admin/admin-roles.scss index daa55c21..8d6eaf2c 100644 --- a/app/styles/modules/admin/admin-roles.scss +++ b/app/styles/modules/admin/admin-roles.scss @@ -88,7 +88,7 @@ } input:checked { + div { - background-color: #74a218; + background-color: $green-christi; margin-left: 50%; transition: all .2s linear; } @@ -104,7 +104,7 @@ input:disabled { cursor: auto; + div { - background-color: #ccc; + background-color: $gray80; } } } diff --git a/app/styles/modules/admin/admin-submenu-roles.scss b/app/styles/modules/admin/admin-submenu-roles.scss index 441df1ab..7f7ddde9 100644 --- a/app/styles/modules/admin/admin-submenu-roles.scss +++ b/app/styles/modules/admin/admin-submenu-roles.scss @@ -6,7 +6,7 @@ li { @extend %larger; @extend %title; - border-bottom: 1px solid #a6b2a7; + border-bottom: 1px solid $gray-tower-gray; text-transform: uppercase; &:last-child { border-bottom: 0; diff --git a/app/styles/modules/admin/admin-submenu.scss b/app/styles/modules/admin/admin-submenu.scss index 5af5f8e5..39124b18 100644 --- a/app/styles/modules/admin/admin-submenu.scss +++ b/app/styles/modules/admin/admin-submenu.scss @@ -6,7 +6,7 @@ li { @extend %larger; @extend %title; - border-bottom: 1px solid #a6b2a7; + border-bottom: 1px solid $gray-tower-gray; text-transform: uppercase; &:last-child { border-bottom: 0; diff --git a/app/styles/modules/common/projects-nav.scss b/app/styles/modules/common/projects-nav.scss index d922ff23..6a435844 100644 --- a/app/styles/modules/common/projects-nav.scss +++ b/app/styles/modules/common/projects-nav.scss @@ -1,5 +1,5 @@ .projects-nav { - background-color: #232323; + background-color: $gray-mine-shaft; display: flex; flex-direction: column; height: 100%; diff --git a/app/styles/modules/wiki/wiki-nav.scss b/app/styles/modules/wiki/wiki-nav.scss index d80724ab..bb1e227a 100644 --- a/app/styles/modules/wiki/wiki-nav.scss +++ b/app/styles/modules/wiki/wiki-nav.scss @@ -2,7 +2,7 @@ li { @extend %large; @extend %title; - border-bottom: 1px solid #cdcdcd; + border-bottom: 1px solid $gray-silver; text-transform: uppercase; &:hover { .icon { From 992f15abe75216b9dff94d25bcdffb1620f5b30f Mon Sep 17 00:00:00 2001 From: Jonathan Barratt Date: Wed, 1 Apr 2015 16:00:14 +0700 Subject: [PATCH 012/194] Disable scss-lint ImportantRule linter only for those blocks which already currently use !important --- app/styles/layout/base.scss | 1 + app/styles/layout/elements.scss | 1 + app/styles/layout/typography.scss | 2 ++ app/styles/modules/backlog/backlog-table.scss | 1 + app/styles/modules/common/related-tasks.scss | 1 + 5 files changed, 6 insertions(+) diff --git a/app/styles/layout/base.scss b/app/styles/layout/base.scss index 19a65308..a98ce08e 100644 --- a/app/styles/layout/base.scss +++ b/app/styles/layout/base.scss @@ -138,6 +138,7 @@ body { } .hidden { + // scss-lint:disable ImportantRule display: none !important; } diff --git a/app/styles/layout/elements.scss b/app/styles/layout/elements.scss index 1df28c3e..8f98716f 100644 --- a/app/styles/layout/elements.scss +++ b/app/styles/layout/elements.scss @@ -53,6 +53,7 @@ sup { //Datepicker .pika-single { + // scss-lint:disable ImportantRule z-index: 999999; .pika-title { color: $grayer; diff --git a/app/styles/layout/typography.scss b/app/styles/layout/typography.scss index 8ffbcd98..bf4f9279 100755 --- a/app/styles/layout/typography.scss +++ b/app/styles/layout/typography.scss @@ -101,6 +101,7 @@ a:visited { // Taiga Icons [data-icon]:before { + // scss-lint:disable ImportantRule content: attr(data-icon); font-family: 'taiga' !important; -moz-osx-font-smoothing: grayscale; @@ -115,6 +116,7 @@ a:visited { [class^='icon-']:before, [class*=' icon-']:before { + // scss-lint:disable ImportantRule font-family: 'taiga' !important; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; diff --git a/app/styles/modules/backlog/backlog-table.scss b/app/styles/modules/backlog/backlog-table.scss index c92e6333..1dc5c5d3 100644 --- a/app/styles/modules/backlog/backlog-table.scss +++ b/app/styles/modules/backlog/backlog-table.scss @@ -189,6 +189,7 @@ transition: background .2s ease-in; } a { + // scss-lint:disable ImportantRule color: $white !important; &:hover { color: $white; diff --git a/app/styles/modules/common/related-tasks.scss b/app/styles/modules/common/related-tasks.scss index aab7266b..aab10288 100644 --- a/app/styles/modules/common/related-tasks.scss +++ b/app/styles/modules/common/related-tasks.scss @@ -136,6 +136,7 @@ background: $red-light; color: $white; a { + // scss-lint:disable ImportantRule color: $white !important; &:hover { color: $white; From 251d4775a339cffcad0dbeeba82b7a7109a177be Mon Sep 17 00:00:00 2001 From: Andrea Stagi Date: Fri, 3 Apr 2015 16:37:53 +0200 Subject: [PATCH 013/194] Fix keyboard navigation in watchers search --- app/coffee/modules/common/lightboxes.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/app/coffee/modules/common/lightboxes.coffee b/app/coffee/modules/common/lightboxes.coffee index f270837d..5211fcf3 100644 --- a/app/coffee/modules/common/lightboxes.coffee +++ b/app/coffee/modules/common/lightboxes.coffee @@ -554,6 +554,7 @@ WatchersLightboxDirective = ($repo, lightboxService, lightboxKeyboardNavigationS html = usersTemplate(ctx) $el.find("div.watchers").html(html) + lightboxKeyboardNavigationService.init($el) closeLightbox = () -> lightboxKeyboardNavigationService.stop() From 1689ea1fa03ce92029f7dca521c1ea9f2ab73cab Mon Sep 17 00:00:00 2001 From: Andrea Stagi Date: Fri, 3 Apr 2015 16:52:27 +0200 Subject: [PATCH 014/194] If there's only one element left in a lightbox select it on enter --- app/coffee/modules/common/lightboxes.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/common/lightboxes.coffee b/app/coffee/modules/common/lightboxes.coffee index f270837d..c2f5e122 100644 --- a/app/coffee/modules/common/lightboxes.coffee +++ b/app/coffee/modules/common/lightboxes.coffee @@ -86,7 +86,10 @@ class LightboxKeyboardNavigationService extends taiga.Service # Key: enter if code == 13 - activeElement.trigger("click") + if $el.find(".watcher-single").length == 1 + $el.find('.watcher-single:first').trigger("click") + else + activeElement.trigger("click") # Key: down else if code == 40 From 81eb6e8b9edd2689ea2d77f52a5d9c61c0b0e897 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Wed, 8 Apr 2015 08:27:32 +0200 Subject: [PATCH 015/194] Refactor color variables thorgh the app --- app/styles/dependencies/colors.scss | 22 ++++++------------- app/styles/layout/elements.scss | 4 ++-- app/styles/layout/invitation.scss | 2 +- app/styles/layout/typography.scss | 2 +- .../modules/admin/admin-functionalities.scss | 2 +- .../modules/admin/admin-membership-table.scss | 2 +- app/styles/modules/admin/admin-roles.scss | 2 +- .../modules/admin/admin-submenu-roles.scss | 2 +- app/styles/modules/admin/admin-submenu.scss | 2 +- app/styles/modules/wiki/wiki-nav.scss | 2 +- 10 files changed, 17 insertions(+), 25 deletions(-) diff --git a/app/styles/dependencies/colors.scss b/app/styles/dependencies/colors.scss index 662d23ec..85fa352b 100755 --- a/app/styles/dependencies/colors.scss +++ b/app/styles/dependencies/colors.scss @@ -5,21 +5,9 @@ $blackish: #050505; $grayer: #444; $gray: #555; $gray-light: #b8b8b8; -$gray-tower-gray: #a6b2a7; -$gray-saltpan: #e9f0da; -$gray-silver: #cdcdcd; -$gray46-47: #777; -$gray60: #999; -$gray80: #ccc; -$gray87-88: #ddd; -$gray-mine-shaft: #232323; $whitish: #f5f5f5; $white: #fff; -$green-japanese-laurel: #237400; -$green-olive: #618000; -$green-christi: #74a218; - $green-taiga: #72a114; $fresh-taiga: #9dce0a; $dark-taiga: #879b89; @@ -27,10 +15,14 @@ $dark-taiga: #879b89; $red-light: #ff8282; $red: #f00; +$postit: #fff8e4; +$postit-hover: #f1e8cd; +$postit-dark-hover: #cfc29b; + +//Loading bar +$green-japanese-laurel: #237400; +$green-olive: #618000; $red-amaranth: #e43050; $purple-eggplant: #810061; $yellow-pear: #bbe831; -$postit: #fff8e4; -$postit-hover: #f1e8cd; -$postit-dark-hover: #cfc29b; diff --git a/app/styles/layout/elements.scss b/app/styles/layout/elements.scss index 8f98716f..965dedeb 100644 --- a/app/styles/layout/elements.scss +++ b/app/styles/layout/elements.scss @@ -3,12 +3,12 @@ // Blockquotes blockquote, blockquote p { - color: $gray46-47; + color: $gray; font-style: italic; line-height: 24px; } blockquote { - border-left: 1px solid $gray87-88; + border-left: 1px solid $gray-light; margin: 0 0 20px; padding: 9px 20px 0 19px; cite { diff --git a/app/styles/layout/invitation.scss b/app/styles/layout/invitation.scss index afa8a95a..d11889f4 100644 --- a/app/styles/layout/invitation.scss +++ b/app/styles/layout/invitation.scss @@ -100,7 +100,7 @@ text-align: center; width: 200px; .form-header { - color: $gray60; + color: $gray-light; } } .register-form { diff --git a/app/styles/layout/typography.scss b/app/styles/layout/typography.scss index bf4f9279..5dae2378 100755 --- a/app/styles/layout/typography.scss +++ b/app/styles/layout/typography.scss @@ -80,7 +80,7 @@ strong { } hr { - border: solid $gray87-88; + border: solid $blackish; border-width: 1px 0 0; clear: both; height: 0; diff --git a/app/styles/modules/admin/admin-functionalities.scss b/app/styles/modules/admin/admin-functionalities.scss index 0e7f55cb..7f0a9d2d 100644 --- a/app/styles/modules/admin/admin-functionalities.scss +++ b/app/styles/modules/admin/admin-functionalities.scss @@ -19,7 +19,7 @@ vertical-align: top; width: 32%; &.active { - background-color: $gray-saltpan; + background-color: rgba($green-taiga, .3); opacity: 1; } .icon { diff --git a/app/styles/modules/admin/admin-membership-table.scss b/app/styles/modules/admin/admin-membership-table.scss index b7926d84..1e93696d 100644 --- a/app/styles/modules/admin/admin-membership-table.scss +++ b/app/styles/modules/admin/admin-membership-table.scss @@ -139,7 +139,7 @@ } input:checked { + div { - background-color: $green-christi; + background-color: $fresh-taiga; margin-left: 50%; transition: all .2s linear; } diff --git a/app/styles/modules/admin/admin-roles.scss b/app/styles/modules/admin/admin-roles.scss index 8d6eaf2c..9ef79125 100644 --- a/app/styles/modules/admin/admin-roles.scss +++ b/app/styles/modules/admin/admin-roles.scss @@ -104,7 +104,7 @@ input:disabled { cursor: auto; + div { - background-color: $gray80; + background-color: $gray-light; } } } diff --git a/app/styles/modules/admin/admin-submenu-roles.scss b/app/styles/modules/admin/admin-submenu-roles.scss index 7f7ddde9..e9cb013c 100644 --- a/app/styles/modules/admin/admin-submenu-roles.scss +++ b/app/styles/modules/admin/admin-submenu-roles.scss @@ -6,7 +6,7 @@ li { @extend %larger; @extend %title; - border-bottom: 1px solid $gray-tower-gray; + border-bottom: 1px solid $gray-light; text-transform: uppercase; &:last-child { border-bottom: 0; diff --git a/app/styles/modules/admin/admin-submenu.scss b/app/styles/modules/admin/admin-submenu.scss index 39124b18..b404d12f 100644 --- a/app/styles/modules/admin/admin-submenu.scss +++ b/app/styles/modules/admin/admin-submenu.scss @@ -6,7 +6,7 @@ li { @extend %larger; @extend %title; - border-bottom: 1px solid $gray-tower-gray; + border-bottom: 1px solid $gray-light; text-transform: uppercase; &:last-child { border-bottom: 0; diff --git a/app/styles/modules/wiki/wiki-nav.scss b/app/styles/modules/wiki/wiki-nav.scss index bb1e227a..39c20db9 100644 --- a/app/styles/modules/wiki/wiki-nav.scss +++ b/app/styles/modules/wiki/wiki-nav.scss @@ -2,7 +2,7 @@ li { @extend %large; @extend %title; - border-bottom: 1px solid $gray-silver; + border-bottom: 1px solid $gray-light; text-transform: uppercase; &:hover { .icon { From 00a4e9588d60bcd586038e9a1477e36096abde6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Wed, 8 Apr 2015 08:41:08 +0200 Subject: [PATCH 016/194] Remove unused importants --- app/styles/modules/common/related-tasks.scss | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/styles/modules/common/related-tasks.scss b/app/styles/modules/common/related-tasks.scss index aab10288..b807de9f 100644 --- a/app/styles/modules/common/related-tasks.scss +++ b/app/styles/modules/common/related-tasks.scss @@ -136,8 +136,7 @@ background: $red-light; color: $white; a { - // scss-lint:disable ImportantRule - color: $white !important; + color: $white; &:hover { color: $white; } From 2d4014ca200b30562106126efe00b385337e0c08 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 17 Mar 2015 11:19:22 +0100 Subject: [PATCH 017/194] taiga internationalization - angular-translate installed - users can change their language - translate coffee and jade - command line tool to find duplicate key values and replaces keys --- app/coffee/app.coffee | 22 +- app/coffee/modules/admin/lightboxes.coffee | 14 +- app/coffee/modules/admin/memberships.coffee | 46 +- .../modules/admin/project-profile.coffee | 102 +- .../modules/admin/project-values.coffee | 33 +- app/coffee/modules/admin/roles.coffee | 20 +- app/coffee/modules/admin/third-parties.coffee | 58 +- app/coffee/modules/auth.coffee | 98 +- app/coffee/modules/backlog/lightboxes.coffee | 29 +- app/coffee/modules/backlog/main.coffee | 56 +- app/coffee/modules/backlog/sortable.coffee | 6 +- app/coffee/modules/backlog/sprints.coffee | 24 +- app/coffee/modules/base.coffee | 2 +- app/coffee/modules/base/i18n.coffee | 74 -- app/coffee/modules/common/attachments.coffee | 14 +- app/coffee/modules/common/components.coffee | 158 ++-- app/coffee/modules/common/confirm.coffee | 35 +- .../modules/common/custom-field-values.coffee | 6 +- app/coffee/modules/common/estimation.coffee | 11 +- app/coffee/modules/common/filters.coffee | 9 +- app/coffee/modules/common/history.coffee | 95 +- app/coffee/modules/common/importer.coffee | 22 +- app/coffee/modules/common/lightboxes.coffee | 29 +- app/coffee/modules/common/wisiwyg.coffee | 44 +- app/coffee/modules/issues/detail.coffee | 47 +- app/coffee/modules/issues/list.coffee | 18 +- app/coffee/modules/kanban/main.coffee | 26 +- app/coffee/modules/locales.coffee | 22 - app/coffee/modules/locales/.empty | 0 app/coffee/modules/projects/lightboxes.coffee | 8 +- app/coffee/modules/related-tasks.coffee | 7 +- app/coffee/modules/resources/projects.coffee | 7 +- app/coffee/modules/taskboard/charts.coffee | 12 +- .../modules/taskboard/lightboxes.coffee | 21 +- app/coffee/modules/taskboard/main.coffee | 1 - app/coffee/modules/tasks/detail.coffee | 20 +- app/coffee/modules/team/main.coffee | 19 +- .../user-settings/change-password.coffee | 11 +- app/coffee/modules/user-settings/main.coffee | 27 +- .../user-settings/notifications.coffee | 2 +- app/coffee/modules/userstories/detail.coffee | 41 +- app/coffee/modules/wiki/main.coffee | 13 +- app/coffee/modules/wiki/nav.coffee | 9 +- app/locales/en/app.json | 63 -- app/locales/locale-en.json | 872 ++++++++++++++++++ .../admin/admin-membership-paginator.jade | 4 +- .../admin/admin-memberships-row-checkbox.jade | 4 +- app/partials/admin/admin-memberships.jade | 9 +- .../admin/admin-project-default-values.jade | 7 +- app/partials/admin/admin-project-export.jade | 15 +- app/partials/admin/admin-project-modules.jade | 50 +- app/partials/admin/admin-project-profile.jade | 32 +- app/partials/admin/admin-project-reports.jade | 26 +- .../admin-project-values-custom-fields.jade | 19 +- .../admin/admin-project-values-points.jade | 6 +- .../admin-project-values-priorities.jade | 6 +- .../admin-project-values-severities.jade | 6 +- .../admin/admin-project-values-status.jade | 25 +- .../admin/admin-project-values-types.jade | 9 +- app/partials/admin/admin-roles.jade | 19 +- .../admin/admin-third-parties-bitbucket.jade | 20 +- .../admin/admin-third-parties-github.jade | 16 +- .../admin/admin-third-parties-gitlab.jade | 60 +- .../admin/admin-third-parties-webhooks.jade | 172 ++-- app/partials/admin/project-csv.jade | 16 + app/partials/attachment/attachment-edit.jade | 10 +- app/partials/attachment/attachment.jade | 10 +- app/partials/attachment/attachments.jade | 16 +- .../auth/change-password-from-recovery.jade | 4 +- app/partials/auth/forgot-password.jade | 4 +- app/partials/auth/invitation.jade | 4 +- app/partials/auth/login-text.jade | 4 +- app/partials/auth/login.jade | 4 +- app/partials/auth/register.jade | 4 +- app/partials/backlog/backlog.jade | 20 +- app/partials/backlog/progress-bar.jade | 6 +- app/partials/backlog/sprint-header.jade | 22 +- .../backlog/us-role-points-popover.jade | 2 +- .../common/components/assigned-to.jade | 6 +- .../common/components/block-button.jade | 4 +- .../common/components/created-by.jade | 3 +- .../common/components/delete-button.jade | 2 +- .../editable-description-msg-edit-mode.jade | 3 +- .../editable-description-msg-read-mode.jade | 2 +- .../components/editable-description.jade | 8 +- .../common/components/editable-subject.jade | 4 +- .../common/components/main-title.jade | 6 +- .../common/components/status-display.jade | 8 +- app/partials/common/components/watchers.jade | 8 +- .../us-estimation-points-per-role.jade | 2 +- .../common/history/history-activity.jade | 5 +- .../common/history/history-base-entries.jade | 3 +- app/partials/common/history/history-base.jade | 14 +- .../history/history-change-generic.jade | 4 +- .../common/history/history-change-list.jade | 4 +- .../common/history/history-change-points.jade | 6 +- .../history/history-deleted-comment.jade | 8 +- .../lightbox/lightbox-assigned-to-users.jade | 8 +- .../common/lightbox/lightbox-assigned-to.jade | 4 +- .../common/lightbox/lightbox-block.jade | 6 +- .../lightbox-blocking-message-input.jade | 2 +- .../common/lightbox/lightbox-users.jade | 6 +- app/partials/common/tag/lb-tag-line-tags.jade | 2 +- app/partials/common/tag/lb-tag-line.jade | 4 +- app/partials/common/tag/tag-line.jade | 8 +- .../wysiwyg/wysiwyg-markitup-preview.jade | 2 +- app/partials/contrib/main.jade | 16 +- .../custom-attribute-value-edit.jade | 2 +- .../custom-attribute-value.jade | 2 +- .../custom-attributes-values.jade | 2 +- app/partials/error/error.jade | 7 +- app/partials/error/not-found.jade | 8 +- app/partials/error/permission-denied.jade | 8 +- .../includes/components/addnewtask.jade | 4 +- .../includes/components/addnewus.jade | 6 +- .../includes/components/backlog-row.jade | 10 +- app/partials/includes/components/beta.jade | 2 +- app/partials/includes/components/filter.jade | 5 - .../includes/components/large-summary.jade | 36 - .../includes/components/mainTitle.jade | 2 +- .../components/notification-message.jade | 18 +- .../includes/components/sprint-summary.jade | 14 +- app/partials/includes/components/summary.jade | 8 +- .../includes/components/taskboard-task.jade | 6 +- .../includes/components/watchers.jade | 13 - app/partials/includes/modules/admin-menu.jade | 14 +- .../admin-submenu-project-profile.jade | 12 +- .../modules/admin-submenu-project-values.jade | 14 +- .../includes/modules/admin-submenu-roles.jade | 6 +- .../modules/admin-submenu-third-parties.jade | 2 +- .../includes/modules/admin-submenu.jade | 16 +- .../admin/admin-custom-attributes.jade | 30 +- .../modules/admin/admin-membership-table.jade | 8 +- .../modules/admin/admin-submenu-contrib.jade | 2 +- .../modules/admin/default-values.jade | 18 +- .../includes/modules/admin/project-csv.jade | 17 +- .../modules/admin/project-points.jade | 30 +- .../modules/admin/project-status.jade | 34 +- .../includes/modules/admin/project-types.jade | 26 +- .../modules/admin/project-us-status.jade | 47 +- .../includes/modules/backlog-filters.jade | 20 +- .../includes/modules/backlog-table.jade | 8 +- .../includes/modules/cancel-account-form.jade | 13 +- .../includes/modules/category-config.jade | 75 -- .../includes/modules/change-email-form.jade | 13 +- .../change-password-from-recovery-form.jade | 15 +- .../includes/modules/colors-table.jade | 19 +- .../includes/modules/comment-activity.jade | 8 +- .../includes/modules/filter-tags.jade | 12 - app/partials/includes/modules/filters.jade | 41 - .../includes/modules/forgot-form.jade | 11 +- .../modules/invitation-login-form.jade | 10 +- .../modules/invitation-register-form.jade | 12 +- .../includes/modules/issues-filters.jade | 30 +- .../includes/modules/issues-table.jade | 24 +- .../includes/modules/kanban-table.jade | 12 +- .../includes/modules/lightbox-add-member.jade | 6 +- .../includes/modules/lightbox-ask-choice.jade | 10 +- .../modules/lightbox-attachments.jade | 17 - .../modules/lightbox-create-issue.jade | 10 +- .../modules/lightbox-delete-project.jade | 16 +- .../includes/modules/lightbox-feedback.jade | 8 +- .../modules/lightbox-generic-ask.jade | 10 +- .../modules/lightbox-generic-error.jade | 6 +- .../modules/lightbox-generic-loading.jade | 2 +- .../modules/lightbox-generic-success.jade | 6 +- .../includes/modules/lightbox-issue-bulk.jade | 8 +- .../includes/modules/lightbox-search.jade | 8 +- .../modules/lightbox-sprint-add-edit.jade | 17 +- .../includes/modules/lightbox-task-bulk.jade | 8 +- .../modules/lightbox-task-create-edit.jade | 20 +- .../includes/modules/lightbox-us-bulk.jade | 8 +- .../modules/lightbox-us-create-edit.jade | 19 +- .../includes/modules/list-filters-kanban.jade | 12 - .../includes/modules/list-filters.jade | 3 +- app/partials/includes/modules/loader.jade | 2 +- app/partials/includes/modules/login-form.jade | 8 +- .../includes/modules/projects-nav.jade | 2 +- .../includes/modules/register-form.jade | 12 +- .../includes/modules/related-tasks.jade | 2 +- .../includes/modules/search-filter.jade | 8 +- app/partials/includes/modules/search-in.jade | 4 +- .../includes/modules/search-result-table.jade | 36 +- app/partials/includes/modules/sprint.jade | 4 +- app/partials/includes/modules/sprints.jade | 10 +- .../includes/modules/taskboard-table.jade | 18 +- .../includes/modules/team/team-filters.jade | 6 +- .../includes/modules/team/team-table.jade | 28 +- .../includes/modules/user-settings-menu.jade | 8 +- .../mail-notifications-table.jade | 8 +- app/partials/includes/modules/wiki-nav.jade | 0 .../modules/wizard-create-project.jade | 24 +- app/partials/issue/issue-paginator.jade | 4 +- app/partials/issue/issue-priority-button.jade | 2 +- app/partials/issue/issue-severity-button.jade | 2 +- app/partials/issue/issue-type-button.jade | 2 +- app/partials/issue/issues-detail.jade | 20 +- app/partials/issue/issues-filters.jade | 2 +- app/partials/issue/issues-status-button.jade | 2 +- app/partials/issue/issues.jade | 2 + .../issue/promote-issue-to-us-button.jade | 2 +- app/partials/kanban/kanban-task.jade | 14 +- app/partials/kanban/kanban.jade | 2 + app/partials/project/project-colors.jade | 3 +- app/partials/project/project-menu.jade | 44 +- .../project/project-navigation-base.jade | 12 +- app/partials/project/project.jade | 10 +- app/partials/project/projects.jade | 16 +- app/partials/search/search.jade | 2 + .../task/related-task-create-form.jade | 10 +- app/partials/task/related-task-row-edit.jade | 10 +- app/partials/task/related-task-row.jade | 10 +- app/partials/task/task-detail.jade | 26 +- app/partials/taskboard/taskboard-user.jade | 2 +- app/partials/taskboard/taskboard.jade | 2 + app/partials/team/leave-project.jade | 3 +- app/partials/team/team-filter.jade | 2 +- app/partials/team/team.jade | 2 + .../us/us-client-requirement-button.jade | 3 +- app/partials/us/us-detail.jade | 26 +- app/partials/us/us-status-button.jade | 2 +- app/partials/us/us-task-progress.jade | 5 +- .../us/us-team-requirement-button.jade | 3 +- app/partials/user/cancel-account.jade | 4 +- app/partials/user/change-email.jade | 4 +- .../lightbox/lightbox-delete-account.jade | 16 +- app/partials/user/mail-notifications.jade | 6 +- app/partials/user/user-change-password.jade | 18 +- app/partials/user/user-profile.jade | 39 +- app/partials/wiki/editable-wiki-content.jade | 12 +- app/partials/wiki/wiki-nav.jade | 10 +- app/partials/wiki/wiki-summary.jade | 6 +- app/partials/wiki/wiki.jade | 8 +- app/styles/components/kanban-task.scss | 3 + app/styles/components/summary.scss | 1 - app/styles/layout/us-detail.scss | 3 +- .../modules/admin/admin-functionalities.scss | 2 +- app/styles/modules/auth/cancel-account.scss | 8 + .../modules/auth/change-email-form.scss | 13 + app/styles/modules/filters/filter-tags.scss | 21 - bower.json | 5 +- gulpfile.js | 19 +- locales.js | 175 ++++ main-sass.js | 1 + package.json | 4 + 245 files changed, 2877 insertions(+), 1916 deletions(-) delete mode 100644 app/coffee/modules/base/i18n.coffee delete mode 100644 app/coffee/modules/locales.coffee delete mode 100644 app/coffee/modules/locales/.empty delete mode 100644 app/locales/en/app.json create mode 100644 app/locales/locale-en.json create mode 100644 app/partials/admin/project-csv.jade delete mode 100644 app/partials/includes/components/filter.jade delete mode 100644 app/partials/includes/components/large-summary.jade delete mode 100644 app/partials/includes/components/watchers.jade delete mode 100644 app/partials/includes/modules/category-config.jade delete mode 100644 app/partials/includes/modules/filter-tags.jade delete mode 100644 app/partials/includes/modules/filters.jade delete mode 100644 app/partials/includes/modules/lightbox-attachments.jade delete mode 100644 app/partials/includes/modules/list-filters-kanban.jade delete mode 100644 app/partials/includes/modules/wiki-nav.jade create mode 100644 app/styles/modules/auth/change-email-form.scss delete mode 100644 app/styles/modules/filters/filter-tags.scss create mode 100644 locales.js diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 6858425d..a0140849 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -36,7 +36,7 @@ taiga.generateUniqueSessionIdentifier = -> taiga.sessionId = taiga.generateUniqueSessionIdentifier() -configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider, tgLoaderProvider, $compileProvider) -> +configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider, tgLoaderProvider, $compileProvider, $translateProvider) -> $routeProvider.when("/", {templateUrl: "project/projects.html", resolve: {loader: tgLoaderProvider.add()}}) @@ -236,23 +236,33 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven $compileProvider.debugInfoEnabled(window.taigaConfig.debugInfo || false) -init = ($log, $i18n, $config, $rootscope, $auth, $events, $analytics) -> - $i18n.initialize($config.get("defaultLanguage")) + $translateProvider.useStaticFilesLoader({ + prefix: '/locales/locale-', + suffix: '.json' + }) + + $translateProvider.preferredLanguage('en') + +init = ($log, $config, $rootscope, $auth, $events, $analytics, $translate) -> $log.debug("Initialize application") $rootscope.contribPlugins = @.taigaContribPlugins if $auth.isAuthenticated() $events.setupConnection() + user = $auth.getUser() + + $translate.use(user.lang) if user.lang + $analytics.initialize() + modules = [ # Main Global Modules "taigaBase", "taigaCommon", "taigaResources", - "taigaLocales", "taigaAuth", "taigaEvents", @@ -281,6 +291,7 @@ modules = [ # Vendor modules "ngRoute", "ngAnimate", + "pascalprecht.translate" ].concat(_.map(@.taigaContribPlugins, (plugin) -> plugin.module)) # Main module definition @@ -294,16 +305,17 @@ module.config([ "$tgEventsProvider", "tgLoaderProvider", "$compileProvider", + "$translateProvider", configure ]) module.run([ "$log", - "$tgI18n", "$tgConfig", "$rootScope", "$tgAuth", "$tgEvents", "$tgAnalytics", + "$translate" init ]) diff --git a/app/coffee/modules/admin/lightboxes.coffee b/app/coffee/modules/admin/lightboxes.coffee index a900273c..a12e4b52 100644 --- a/app/coffee/modules/admin/lightboxes.coffee +++ b/app/coffee/modules/admin/lightboxes.coffee @@ -30,10 +30,10 @@ MAX_MEMBERSHIP_FIELDSETS = 4 ## Create Members Lightbox Directive ############################################################################# -CreateMembersDirective = ($rs, $rootScope, $confirm, $loading ,lightboxService) -> +CreateMembersDirective = ($rs, $rootScope, $confirm, $loading ,lightboxService, $compile) -> extraTextTemplate = """
-
@@ -42,7 +42,7 @@ CreateMembersDirective = ($rs, $rootScope, $confirm, $loading ,lightboxService) template = _.template("""
- data-required="true" <% } %> data-type="email" /> + data-required="true" <% } %> data-type="email" />
data-required="true" <% } %> data-type="email" /> + data-required="true" <% } %> data-type="email" />
+
""" @@ -61,7 +59,7 @@ CreateMembersDirective = ($rs, $rootScope, $confirm, $loading ,lightboxService, return $compile(template(ctx))($scope) resetForm = -> - $el.find("form textarea").remove("") + $el.find("form textarea").remove() $el.find("form .add-member-wrapper").remove() invitations = $el.find(".add-member-forms") From eb3c4178572174d68f871f987e47d230c1c43982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 20 Apr 2015 11:10:43 +0200 Subject: [PATCH 050/194] [Refactor] resources.urls list --- app/coffee/modules/resources.coffee | 119 +++++++++++++++------------- 1 file changed, 65 insertions(+), 54 deletions(-) diff --git a/app/coffee/modules/resources.coffee b/app/coffee/modules/resources.coffee index 4c78686a..52028c90 100644 --- a/app/coffee/modules/resources.coffee +++ b/app/coffee/modules/resources.coffee @@ -24,59 +24,42 @@ taiga = @.taiga class ResourcesService extends taiga.Service urls = { + # Auth "auth": "/auth" "auth-register": "/auth/register" "invitations": "/invitations" - "permissions": "/permissions" - "roles": "/roles" - "projects": "/projects" - "memberships": "/memberships" - "notify-policies": "/notify-policies" - "bulk-create-memberships": "/memberships/bulk_create" - "milestones": "/milestones" - "userstories": "/userstories" - "bulk-create-us": "/userstories/bulk_create" - "bulk-update-us-backlog-order": "/userstories/bulk_update_backlog_order" - "bulk-update-us-sprint-order": "/userstories/bulk_update_sprint_order" - "bulk-update-us-kanban-order": "/userstories/bulk_update_kanban_order" - "userstories-restore": "/userstories/%s/restore" - "tasks": "/tasks" - "bulk-create-tasks": "/tasks/bulk_create" - "bulk-update-task-taskboard-order": "/tasks/bulk_update_taskboard_order" - "tasks-restore": "/tasks/%s/restore" - "issues": "/issues" - "bulk-create-issues": "/issues/bulk_create" - "issues-restore": "/issues/%s/restore" - "wiki": "/wiki" - "wiki-restore": "/wiki/%s/restore" - "wiki-links": "/wiki-links" - "choices/userstory-statuses": "/userstory-statuses" - "choices/userstory-statuses/bulk-update-order": "/userstory-statuses/bulk_update_order" - "choices/points": "/points" - "choices/points/bulk-update-order": "/points/bulk_update_order" - "choices/task-statuses": "/task-statuses" - "choices/task-statuses/bulk-update-order": "/task-statuses/bulk_update_order" - "choices/issue-statuses": "/issue-statuses" - "choices/issue-statuses/bulk-update-order": "/issue-statuses/bulk_update_order" - "choices/issue-types": "/issue-types" - "choices/issue-types/bulk-update-order": "/issue-types/bulk_update_order" - "choices/priorities": "/priorities" - "choices/priorities/bulk-update-order": "/priorities/bulk_update_order" - "choices/severities": "/severities" - "choices/severities/bulk-update-order": "/severities/bulk_update_order" - "search": "/search" - "sites": "/sites" - "project-templates": "/project-templates" - "site-members": "/site-members" - "site-projects": "/site-projects" + + # User "users": "/users" "users-password-recovery": "/users/password_recovery" "users-change-password-from-recovery": "/users/change_password_from_recovery" "users-change-password": "/users/change_password" "users-change-email": "/users/change_email" "users-cancel-account": "/users/cancel" + + # User - Notification + "notify-policies": "/notify-policies" + + # User - Storage "user-storage": "/user-storage" + + # Memberships + "memberships": "/memberships" + "bulk-create-memberships": "/memberships/bulk_create" + + # Roles & Permissions + "roles": "/roles" + "permissions": "/permissions" + + # Resolver "resolver": "/resolver" + + # Project + "projects": "/projects" + "project-templates": "/project-templates" + "project-modules": "/projects/%s/modules" + + # Project Values - Choises "userstory-statuses": "/userstory-statuses" "points": "/points" "task-statuses": "/task-statuses" @@ -84,11 +67,30 @@ urls = { "issue-types": "/issue-types" "priorities": "/priorities" "severities": "/severities" - "project-modules": "/projects/%s/modules" - "webhooks": "/webhooks" - "webhooks-test": "/webhooks/%s/test" - "webhooklogs": "/webhooklogs" - "webhooklogs-resend": "/webhooklogs/%s/resend" + + # Milestones/Sprints + "milestones": "/milestones" + + # User stories + "userstories": "/userstories" + "bulk-create-us": "/userstories/bulk_create" + "bulk-update-us-backlog-order": "/userstories/bulk_update_backlog_order" + "bulk-update-us-sprint-order": "/userstories/bulk_update_sprint_order" + "bulk-update-us-kanban-order": "/userstories/bulk_update_kanban_order" + + # Tasks + "tasks": "/tasks" + "bulk-create-tasks": "/tasks/bulk_create" + "bulk-update-task-taskboard-order": "/tasks/bulk_update_taskboard_order" + + # Issues + "issues": "/issues" + "bulk-create-issues": "/issues/bulk_create" + + # Wiki pages + "wiki": "/wiki" + "wiki-restore": "/wiki/%s/restore" + "wiki-links": "/wiki-links" # History "history/us": "/history/userstory" @@ -107,22 +109,31 @@ urls = { "custom-attributes/issue": "/issue-custom-attributes" "custom-attributes/task": "/task-custom-attributes" - # Custom field values + # Custom Attributess - Values "custom-attributes-values/userstory": "/userstories/custom-attributes-values" "custom-attributes-values/issue": "/issues/custom-attributes-values" "custom-attributes-values/task": "/tasks/custom-attributes-values" - # Feedback - "feedback": "/feedback" + # Webhooks + "webhooks": "/webhooks" + "webhooks-test": "/webhooks/%s/test" + "webhooklogs": "/webhooklogs" + "webhooklogs-resend": "/webhooklogs/%s/resend" + + # Reports - CSV + "userstories-csv": "/userstories/csv?uuid=%s" + "tasks-csv": "/tasks/csv?uuid=%s" + "issues-csv": "/issues/csv?uuid=%s" + + # Search + "search": "/search" # Export/Import "exporter": "/exporter" "importer": "/importer/load_dump" - # CSV - "userstories-csv": "/userstories/csv?uuid=%s" - "tasks-csv": "/tasks/csv?uuid=%s" - "issues-csv": "/issues/csv?uuid=%s" + # Feedback + "feedback": "/feedback" # locales "locales": "/locales" From 32199d160fa24a0a09415d7c1ef4aa70518ed933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 20 Apr 2015 15:33:38 +0200 Subject: [PATCH 051/194] Revert "Adding taigaComponents module" This reverts commit c016394fa366967cbfcbf1f08abd3e972ae800b0. --- app/coffee/app.coffee | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index a170244c..477db887 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -265,7 +265,7 @@ modules = [ "taigaRelatedTasks", "taigaBacklog", "taigaTaskboard", - "taigaKanban", + "taigaKanban" "taigaIssues", "taigaUserStories", "taigaTasks", @@ -279,10 +279,9 @@ modules = [ "taigaFeedback", "taigaPlugins", "taigaIntegrations", - "taigaComponents", # template cache - "templates", + "templates" # Vendor modules "ngRoute", From 3767d685070106a2a85c7264ecf8b5248e642341 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 20 Apr 2015 16:36:43 +0200 Subject: [PATCH 052/194] Make a HACK to prevent circular dependencies with [$tgConfirm, $translate] :see_no_evil: :scream_cat: --- app/coffee/app.coffee | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 477db887..d12f46d9 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -199,23 +199,23 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven $httpProvider.interceptors.push('authHttpIntercept') - # If there is an error in the version throw a notify error - versionCheckHttpIntercept = ($q, $confirm, $translate) -> - versionErrorMsg = $translate.instant("ERROR.VERSION_ERROR") - + # If there is an error in the version throw a notify error. + # IMPROVEiMENT: Move this version error handler to USs, issues and tasks repository + versionCheckHttpIntercept = ($q) -> httpResponseError = (response) -> if response.status == 400 && response.data.version - $confirm.notify("error", versionErrorMsg, null, 10000) - - return $q.reject(response) + # HACK: to prevent circular dependencies with [$tgConfirm, $translate] + $injector = angular.element("body").injector() + $injector.invoke(["$tgConfirm", "$translate", ($confirm, $translate) => + versionErrorMsg = $translate.instant("ERROR.VERSION_ERROR") + $confirm.notify("error", versionErrorMsg, null, 10000) + ]) return $q.reject(response) - return { - responseError: httpResponseError - } + return {responseError: httpResponseError} - $provide.factory("versionCheckHttpIntercept", ["$q", "$tgConfirm", "$translate", versionCheckHttpIntercept]) + $provide.factory("versionCheckHttpIntercept", ["$q", versionCheckHttpIntercept]) $httpProvider.interceptors.push('versionCheckHttpIntercept') @@ -231,12 +231,16 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven $compileProvider.debugInfoEnabled(window.taigaConfig.debugInfo || false) - $translateProvider.useStaticFilesLoader({ - prefix: '/locales/locale-', - suffix: '.json' - }) + $translateProvider + .useStaticFilesLoader({ + prefix: '/locales/locale-', + suffix: '.json' + }) + .preferredLanguage(window.taigaConfig.defaultLanguage || 'en') + + if not window.taigaConfig.debugInfo + $translateProvider.fallbackLanguage([window.taigaConfig.defaultLanguage || 'en']) - $translateProvider.preferredLanguage(window.taigaConfig.defaultLanguage || 'en') init = ($log, $config, $rootscope, $auth, $events, $analytics, $translate) -> $log.debug("Initialize application") From 2f9a1a75a9d3e9e6e3b5b7fec36b259c2e2ecb6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 20 Apr 2015 17:21:40 +0200 Subject: [PATCH 053/194] Issue #2583: Use us.is_closed instead us.status.is_closed in US detail page --- app/coffee/modules/issues/detail.coffee | 5 ++++- app/coffee/modules/tasks/detail.coffee | 5 ++++- app/partials/common/components/status-display.jade | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/coffee/modules/issues/detail.coffee b/app/coffee/modules/issues/detail.coffee index 130e9113..b5a5bed7 100644 --- a/app/coffee/modules/issues/detail.coffee +++ b/app/coffee/modules/issues/detail.coffee @@ -160,8 +160,11 @@ IssueStatusDisplayDirective = ($template, $compile)-> link = ($scope, $el, $attrs) -> render = (issue) -> + status = $scope.statusById[issue.status] + html = template({ - status: $scope.statusById[issue.status] + is_closed: status.is_closed + status: status }) html = $compile(html)($scope) diff --git a/app/coffee/modules/tasks/detail.coffee b/app/coffee/modules/tasks/detail.coffee index d35dbb93..441fb761 100644 --- a/app/coffee/modules/tasks/detail.coffee +++ b/app/coffee/modules/tasks/detail.coffee @@ -159,8 +159,11 @@ TaskStatusDisplayDirective = ($template, $compile) -> link = ($scope, $el, $attrs) -> render = (task) -> + status = $scope.statusById[task.status] + html = template({ - status: $scope.statusById[task.status] + is_closed: status.is_closed + status: status }) html = $compile(html)($scope) diff --git a/app/partials/common/components/status-display.jade b/app/partials/common/components/status-display.jade index 90af915b..b3c22e4d 100644 --- a/app/partials/common/components/status-display.jade +++ b/app/partials/common/components/status-display.jade @@ -1,5 +1,5 @@ -span(translate="STATUS.OPEN", ng-if="status.is_closed") -span(translate="STATUS.CLOSED", ng-if="!status.is_closed") +span(translate="STATUS.OPEN", ng-if="is_closed") +span(translate="STATUS.CLOSED", ng-if="!is_closed") span(class="us-detail-status", style!="color:<%- status.color %>") | <%- status.name %> From 0f8dace50885e5f54983f1eb30f58094ea7a263a Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 21 Apr 2015 07:44:11 +0200 Subject: [PATCH 054/194] Adding taigaComponents module --- app/coffee/app.coffee | 5 +++-- app/modules/components/components.module.coffee | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 app/modules/components/components.module.coffee diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index d12f46d9..47b24394 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -269,7 +269,7 @@ modules = [ "taigaRelatedTasks", "taigaBacklog", "taigaTaskboard", - "taigaKanban" + "taigaKanban", "taigaIssues", "taigaUserStories", "taigaTasks", @@ -283,9 +283,10 @@ modules = [ "taigaFeedback", "taigaPlugins", "taigaIntegrations", + "taigaComponents", # template cache - "templates" + "templates", # Vendor modules "ngRoute", diff --git a/app/modules/components/components.module.coffee b/app/modules/components/components.module.coffee new file mode 100644 index 00000000..da754f89 --- /dev/null +++ b/app/modules/components/components.module.coffee @@ -0,0 +1 @@ +angular.module("taigaComponents", []) From 013030182870b95dee5d73a802e360cb73ba4b11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 21 Apr 2015 09:48:37 +0200 Subject: [PATCH 055/194] Add license --- .../components/components.module.coffee | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/modules/components/components.module.coffee b/app/modules/components/components.module.coffee index da754f89..a714b61f 100644 --- a/app/modules/components/components.module.coffee +++ b/app/modules/components/components.module.coffee @@ -1 +1,20 @@ -angular.module("taigaComponents", []) +### +# Copyright (C) 2015 Taiga Agile LLC +# +# 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: components.module.coffee +### + +angular.module("taigaComponents", []) From 582e9e83d7c0bcebf830128a64ca9f8345b6af58 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 21 Apr 2015 14:27:26 +0200 Subject: [PATCH 056/194] coffee-lint ignore test files --- gulpfile.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index cd04413e..f601bbfb 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -298,7 +298,10 @@ gulp.task("locales", function() { }); gulp.task("coffee-lint", function () { - gulp.src(paths.app + "modules/**/*.coffee") + gulp.src([ + paths.app + "modules/**/*.coffee", + "!" + paths.app + "modules/**/*.spec.coffee" + ]) .pipe(gulpif(!isDeploy, cache(coffeelint(), { key: function(lintFile) { return "coffee-lint" + lintFile.contents.toString('utf8'); From 00a7e2a85ba95dbbbf24a3cc1d1c88e1ad8b804f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 21 Apr 2015 10:02:53 +0200 Subject: [PATCH 057/194] Fix some typos and translations --- app/locales/locale-es.json | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index d68891ff..a52b79b6 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -229,11 +229,11 @@ "ROLES": { "SECTION_NAME": "Roles - {{projectName}}", "WARNING_NO_ROLE": "Cuidado, ningún rol en su proyecto podrá estimar el valor de los puntos para historias de usuario", - "HELP_ROLE_ENABLED": "Al activar, miembros asignados a este rol serán capaces de estimar valores de puntos para historias de usuario", + "HELP_ROLE_ENABLED": "Si lo activa, los miembros que posean este rol serán capaces de estimar sus propios puntos en las histórias de usuario", "COUNT_MEMBERS": "{{ role.members_count }} miembros con este rol", "TITLE_DELETE_ROLE": "Borrar Rol", "REPLACEMENT_ROLE": "Todos los usuarios con este rol serán movidos a", - "WARNING_DELETE_ROLE": "Cuidado, todo estimador de rol será eliminado", + "WARNING_DELETE_ROLE": "Cuidado, todas las estimaciones asociadas a este rol se perderán", "ERROR_DELETE_ALL": "Usted no puede eliminar todos los valores" }, "THIRD_PARTIES": { @@ -244,12 +244,12 @@ "BITBUCKET": { "SECTION_NAME": "Bitbucket", "APP_TITLE": "Bitbucket - {{projectName}}", - "INFO_VERIFYING_IP": "Las peticiones de Bitbucket no van firmadas, por lo que la mejor forma de verificar su procedencia es mediante IP. Si el campo queda vacío no se verificarán." + "INFO_VERIFYING_IP": "Las peticiones de Bitbucket no van firmadas, con la IP de origen verificamos su procedencia. Déjalo vacío y no se verificarán." }, "GITLAB": { "SECTION_NAME": "Gitlab", "APP_TITLE": "Gitlab - {{projectName}}", - "INFO_VERIFYING_IP": "Las peticiones de Gitlab no van firmadas, por lo que la mejor forma de verificar su procedencia es mediante IP. Si el campo queda vacío no se verificarán." + "INFO_VERIFYING_IP": "Las peticiones de Gitlab no van firmadas, con la IP de origen verificamos su procedencia. Déjalo vacío y no se verificarán." }, "GITHUB": { "SECTION_NAME": "Github", @@ -579,7 +579,8 @@ "NOT_FOUND": "No encontrado", "NOT_FOUND_TEXT": "Error 404. La página que estás buscando ya no existe. Puedes volver a la página de inicio de TAIGA y ver si encuentras lo que estás buscando. ", "PERMISSION_DENIED": "Permiso denegado", - "PERMISSION_DENIED_CODE": "Error 403." + "PERMISSION_DENIED_CODE": "Error 403.", + "VERSION_ERROR": "Someone inside Taiga has changed this before and our Oompa Loompas cannot apply your changes. Please reload and apply your changes again (they will be lost)." }, "TASKBOARD": { "SECTION_NAME": "Panel de Tareas", @@ -814,7 +815,7 @@ } }, "USER_PROFILE": { - "IMAGE_HELP": "La imagen se recortará a 80x80px
", + "IMAGE_HELP": "La imagen se escalará a 80x80px
", "ACTION_CHANGE_IMAGE": "Cambiar", "ACTION_USE_GRAVATAR": "Usar imagen de Gravatar", "ACTION_DELETE_ACCOUNT": "Elimina cuenta de Taiga", @@ -853,4 +854,4 @@ "LAST_MODIFICATION": "ultima modificación" } } -} +} \ No newline at end of file From ed11ff21a2caba80f5e679106f755e1a4bcda4ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 21 Apr 2015 19:40:14 +0200 Subject: [PATCH 058/194] Issue tg-2587 #ready-for-test --- app/coffee/modules/admin/lightboxes.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/admin/lightboxes.coffee b/app/coffee/modules/admin/lightboxes.coffee index 104b59a7..a219d0ae 100644 --- a/app/coffee/modules/admin/lightboxes.coffee +++ b/app/coffee/modules/admin/lightboxes.coffee @@ -82,7 +82,7 @@ CreateMembersDirective = ($rs, $rootScope, $confirm, $loading ,lightboxService, fieldSet.remove() - lastActionButton = $el.find("fieldset:last > a") + lastActionButton = $el.find(".add-member-wrapper fieldset:last > a") if lastActionButton.hasClass("icon-delete delete-fieldset") lastActionButton.removeClass("icon-delete delete-fieldset") .addClass("icon-plus add-fieldset") From 3913712bbd69108cff52b5fe09d686a88ac48b4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 21 Apr 2015 20:08:02 +0200 Subject: [PATCH 059/194] [i18n] Use default language configured in global settings instead en --- app/coffee/app.coffee | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 47b24394..f10b1de6 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -159,12 +159,12 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven $routeProvider.when("/permission-denied", {templateUrl: "error/permission-denied.html"}) - $routeProvider.otherwise({redirectTo: '/not-found'}) + $routeProvider.otherwise({redirectTo: "/not-found"}) $locationProvider.html5Mode({enabled: true, requireBase: false}) defaultHeaders = { "Content-Type": "application/json" - "Accept-Language": "en" + "Accept-Language": window.taigaConfig.defaultLanguage || "en" "X-Session-Id": taiga.sessionId } @@ -197,7 +197,7 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven $provide.factory("authHttpIntercept", ["$q", "$location", "$tgNavUrls", "lightboxService", authHttpIntercept]) - $httpProvider.interceptors.push('authHttpIntercept') + $httpProvider.interceptors.push("authHttpIntercept") # If there is an error in the version throw a notify error. # IMPROVEiMENT: Move this version error handler to USs, issues and tasks repository @@ -217,7 +217,7 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven $provide.factory("versionCheckHttpIntercept", ["$q", versionCheckHttpIntercept]) - $httpProvider.interceptors.push('versionCheckHttpIntercept') + $httpProvider.interceptors.push("versionCheckHttpIntercept") window.checksley.updateValidators({ linewidth: (val, width) -> @@ -233,13 +233,13 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven $translateProvider .useStaticFilesLoader({ - prefix: '/locales/locale-', - suffix: '.json' + prefix: "/locales/locale-", + suffix: ".json" }) - .preferredLanguage(window.taigaConfig.defaultLanguage || 'en') + .preferredLanguage(window.taigaConfig.defaultLanguage || "en") if not window.taigaConfig.debugInfo - $translateProvider.fallbackLanguage([window.taigaConfig.defaultLanguage || 'en']) + $translateProvider.fallbackLanguage([window.taigaConfig.defaultLanguage || "en"]) init = ($log, $config, $rootscope, $auth, $events, $analytics, $translate) -> From da17a265bf214965a5cab525180d5f7ef946920b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 21 Apr 2015 20:42:21 +0200 Subject: [PATCH 060/194] [i18n] Add user language to the headers in all API requests --- app/coffee/modules/base/http.coffee | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/app/coffee/modules/base/http.coffee b/app/coffee/modules/base/http.coffee index f76ed280..ddf2c7a9 100644 --- a/app/coffee/modules/base/http.coffee +++ b/app/coffee/modules/base/http.coffee @@ -22,16 +22,25 @@ taiga = @.taiga class HttpService extends taiga.Service - @.$inject = ["$http", "$q", "$tgStorage"] + @.$inject = ["$http", "$q", "$tgStorage", "$rootScope"] + + constructor: (@http, @q, @storage, @rootScope) -> + super() headers: -> + headers = {} + + # Authorization token = @storage.get('token') if token - return {"Authorization":"Bearer #{token}"} - return {} + headers["Authorization"] = "Bearer #{token}" - constructor: (@http, @q, @storage) -> - super() + # Accept-Language + lang = @rootScope.user?.lang + if lang + headers["Accept-Language"] = lang + + return headers request: (options) -> options.headers = _.merge({}, options.headers or {}, @.headers()) From 635200d0feec4bbc79874d5955748e814e43669e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 11:59:28 +0200 Subject: [PATCH 061/194] [i18n] Fix a typo --- app/partials/admin/admin-project-modules.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/admin/admin-project-modules.jade b/app/partials/admin/admin-project-modules.jade index 0aae183c..7019a879 100644 --- a/app/partials/admin/admin-project-modules.jade +++ b/app/partials/admin/admin-project-modules.jade @@ -45,7 +45,7 @@ div.wrapper(tg-project-modules, ng-controller="ProjectProfileController as ctrl" div.icon.icon-issues div.desc p - span.title(translate="COMMON.ISSUES") + span.title(translate="ADMIN.MODULES.ISSUES") span(translate="ADMIN.MODULES.ISSUES_DESCRIPTION") div.activate input.activate-input(type="checkbox", id="functionality-issues", From 877d067ed99524417ad535fc25a6d8eee7ce9f79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 12:00:33 +0200 Subject: [PATCH 062/194] [i18n] Fix a typo --- app/locales/locale-en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 3638d598..ef23b2a0 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -174,7 +174,7 @@ "PROJECT_SLUG": "Project slug", "NUMBER_SPRINTS": "Number of sprints", "NUMBER_US_POINTS": "Number of US points", - "DESCRIPTION": "DESCRIPTION", + "DESCRIPTION": "Description", "PUBLIC_PROJECT": "Public project", "PRIVATE_PROJECT": "Private project", "DELETE": "Delete this project" From 804d0be308225b9a021bdfa0e5d0e522d3a69283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 12:04:29 +0200 Subject: [PATCH 063/194] [i18n] Fix some errors in Report Section --- .../modules/admin/project-profile.coffee | 18 +++++++++--------- app/locales/locale-en.json | 5 ++++- .../includes/modules/admin/project-csv.jade | 17 ----------------- 3 files changed, 13 insertions(+), 27 deletions(-) delete mode 100644 app/partials/includes/modules/admin/project-csv.jade diff --git a/app/coffee/modules/admin/project-profile.coffee b/app/coffee/modules/admin/project-profile.coffee index 97446524..ffbb97f0 100644 --- a/app/coffee/modules/admin/project-profile.coffee +++ b/app/coffee/modules/admin/project-profile.coffee @@ -377,9 +377,9 @@ module.controller("CsvExporterIssuesController", CsvExporterIssuesController) ## CSV Directive ############################################################################# -CsvUsDirective = () -> +CsvUsDirective = ($translate) -> link = ($scope) -> - $scope.csvType = "US" + $scope.csvType = $translate.instant("ADMIN.REPORTS.CSV_TYPE_USS") return { controller: "CsvExporterUserstoriesController", @@ -388,11 +388,11 @@ CsvUsDirective = () -> scope: true } -module.directive("tgCsvUs", [CsvUsDirective]) +module.directive("tgCsvUs", ["$translate", CsvUsDirective]) -CsvTaskDirective = () -> +CsvTaskDirective = ($translate) -> link = ($scope) -> - $scope.csvType = "Task" + $scope.csvType = $translate.instant("ADMIN.REPORTS.CSV_TYPE_TASKS") return { controller: "CsvExporterTasksController", @@ -401,11 +401,11 @@ CsvTaskDirective = () -> scope: true } -module.directive("tgCsvTask", [CsvTaskDirective]) +module.directive("tgCsvTask", ["$translate", CsvTaskDirective]) -CsvIssueDirective = () -> +CsvIssueDirective = ($translate) -> link = ($scope) -> - $scope.csvType = "Issues" + $scope.csvType = $translate.instant("ADMIN.REPORTS.CSV_TYPE_ISSUES") return { controller: "CsvExporterIssuesController", @@ -414,4 +414,4 @@ CsvIssueDirective = () -> scope: true } -module.directive("tgCsvIssue", [CsvIssueDirective]) +module.directive("tgCsvIssue", ["$translate", CsvIssueDirective]) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index ef23b2a0..34a74ef8 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -185,7 +185,10 @@ "DESCRIPTION": "Download a CSV file or copy the generated URL and open it in your favourite text editor or spreadsheet to make your own project data reports. You will be able to visualize and analize all your data easily.", "HELP": "How to use this on my own spreadsheet?", "REGENERATE_TITLE": "Change URL", - "REGENERATE_SUBTITLE": "You going to change the CSV data access url. The previous url will be disabled. Are you sure?" + "REGENERATE_SUBTITLE": "You going to change the CSV data access url. The previous url will be disabled. Are you sure?", + "CSV_TYPE_US": "user stories", + "CSV_TYPE_TASK": "tasks", + "CSV_TYPE_ISSUE": "issues" }, "CUSTOM_FIELDS": { "TITLE": "Custom Fields", diff --git a/app/partials/includes/modules/admin/project-csv.jade b/app/partials/includes/modules/admin/project-csv.jade deleted file mode 100644 index d3a1f632..00000000 --- a/app/partials/includes/modules/admin/project-csv.jade +++ /dev/null @@ -1,17 +0,0 @@ -section.project-csv(tg-select-input-text) - div.project-values-title - h2 {{csvType}} sdfdsf - h2(translate="ADMIN.CSV.TITLE") - a.button.button-gray(title="{{'ADMIN.CSV.DOWNLOAD' | translate}}", ng-href="{{csvUrl}}", ng-show="csvUrl", target="_blank") - span(translate="ADMIN.CSV.DOWNLOAD") - - div.csv-regenerate-field - .field-with-options - input(type="text", placeholder="{{'ADMIN.CSV.URL_FIELD_PLACEHOLDER' | translate}}", readonly, ng-model="csvUrl") - .option-wrapper.select-input-content - .icon.icon-copy - a(href="", title="{{'ADMIN.CSV.TITLE_REGENERATE_URL' | translate}}", ng-click="ctrl.regenerateUuid()") - span.icon.icon-plus(ng-hide="csvUrl") - span(ng-hide="csvUrl", translate="ADMIN.CSV.ACTION_GENERATE_URL") - span.icon.icon-reload(ng-Show="csvUrl") - span(ng-Show="csvUrl", translate="ADMIN.CSV.ACTION_REGENERATE") From 8004c03ac87ae8705721f5bc5f7052622e0b6535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 12:53:34 +0200 Subject: [PATCH 064/194] Issue tg-2590 #ready-for-test - Show US status in detail page --- app/coffee/modules/userstories/detail.coffee | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/coffee/modules/userstories/detail.coffee b/app/coffee/modules/userstories/detail.coffee index 23f0612a..4ff0a7ba 100644 --- a/app/coffee/modules/userstories/detail.coffee +++ b/app/coffee/modules/userstories/detail.coffee @@ -164,19 +164,18 @@ UsStatusDisplayDirective = ($template, $compile) -> # - US object (ng-model) # - scope.statusById object - template = $template.get("common/components/status-display.html") + template = $template.get("common/components/status-display.html", true) link = ($scope, $el, $attrs) -> render = (us) -> - statusScope = $scope.$new() + status = $scope.statusById[us.status] - _.assign(statusScope, { + html = template({ is_closed: us.is_closed - status: $scope.statusById[us.status] + status: status }) - html = $compile(html)(statusScope) - + html = $compile(html)($scope) $el.html(html) $scope.$watch $attrs.ngModel, (us) -> From e37f29879a7f6d904a8ff8764750e0709df630b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Wed, 22 Apr 2015 13:00:59 +0200 Subject: [PATCH 065/194] Add single item width to aviod language bugs --- app/styles/components/notification-message.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/styles/components/notification-message.scss b/app/styles/components/notification-message.scss index f4a88862..f43d9a50 100644 --- a/app/styles/components/notification-message.scss +++ b/app/styles/components/notification-message.scss @@ -5,6 +5,7 @@ right: -370px; top: 2%; transition: opacity .2s ease-in; + width: 370px; &.active { animation: animSlide 2000ms linear both; opacity: 1; From 32e5e4ec6151f6cd92aa5f01ff50471297cce803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 13:11:40 +0200 Subject: [PATCH 066/194] [i18n] Fix a typo --- app/partials/common/components/status-display.jade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/partials/common/components/status-display.jade b/app/partials/common/components/status-display.jade index b3c22e4d..da8706e5 100644 --- a/app/partials/common/components/status-display.jade +++ b/app/partials/common/components/status-display.jade @@ -1,5 +1,5 @@ -span(translate="STATUS.OPEN", ng-if="is_closed") -span(translate="STATUS.CLOSED", ng-if="!is_closed") +span(translate="COMMON.STATUS.OPEN", ng-if="is_closed") +span(translate="COMMON.STATUS.CLOSED", ng-if="!is_closed") span(class="us-detail-status", style!="color:<%- status.color %>") | <%- status.name %> From bc19363feeed8887ea3a2ff1de1bcc07b86adeda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 13:36:58 +0200 Subject: [PATCH 067/194] [i18n] Fix an error in added fieldsets over the form to send invitations --- app/coffee/modules/admin/lightboxes.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/admin/lightboxes.coffee b/app/coffee/modules/admin/lightboxes.coffee index a219d0ae..7df3a3d0 100644 --- a/app/coffee/modules/admin/lightboxes.coffee +++ b/app/coffee/modules/admin/lightboxes.coffee @@ -96,9 +96,10 @@ CreateMembersDirective = ($rs, $rootScope, $confirm, $loading ,lightboxService, .addClass("icon-delete delete-fieldset") newFieldSet = createFieldSet(false) - fieldSet.after(newFieldSet) + $scope.$digest() # To compile newFieldSet and translate text + if $el.find(".add-member-wrapper").length == MAX_MEMBERSHIP_FIELDSETS $el.find(".add-member-wrapper fieldset:last > a").removeClass("icon-plus add-fieldset") .addClass("icon-delete delete-fieldset") From a8cb6d2e11a8c0893d5afabaeb633813c0b919b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 13:46:42 +0200 Subject: [PATCH 068/194] [i18n] Update es locales --- app/locales/locale-es.json | 49 ++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index a52b79b6..65fea406 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -13,7 +13,7 @@ "COPY_TO_CLIPBOARD": "Copiar en el portapapeles: Ctrl+C", "EDIT": "Editar", "DRAG": "Arrastra", - "TAG_LINE": "Su herramienta de gestión de proyecto ágil, gratis y de código abierto", + "TAG_LINE": "Tu herramienta de gestión de proyecto ágil, gratuíta y de código abierto", "TAG_LINE_2": "AMA TU PROYECTO", "BLOCK": "Bloqueada", "UNBLOCK": "Desbloquear", @@ -144,16 +144,16 @@ "LOADING_MESSAGE": "Por favor no cierres la ventana.", "ASYNC_MESSAGE": "Te enviaremos un email cuando esté listo.", "SYNC_MESSAGE": "Si la descarga no comienza automáticamente haz click aquí.", - "ERROR": "Nuestros Oompa Loompas tienen algunos problemas generando el volcado de sus datos. Por favor inténtalo de nuevo.", + "ERROR": "Nuestros Oompa Loompas tienen algunos problemas generando el volcado de tus datos. Por favor inténtalo de nuevo.", "ERROR_BUSY": "Lo sentimos, nuestros Oompa Loompas están muy ocupados en este momento. Por favor inténtalo nuevamente en unos minutos.", "ERROR_MESSAGE": "Nuestros Oompa Loompas tienen algunos problemas generando su volcado de datos: {{message}}" }, "MODULES": { - "TITLE": "Modulos", + "TITLE": "Módulos", "ENABLE": "Activado", "DISABLE": "Desactivado", "BACKLOG": "Backlog", - "BACKLOG_DESCRIPTION": "Administre sus historias de usuario para mantener una vista organizada de los próximos trabajos priorizados. ", + "BACKLOG_DESCRIPTION": "Gestiona tus historias de usuario para mantener una vista organizada y priorizada de los próximos trabajos que deberás afrontar. ", "KANBAN": "Kanban", "KANBAN_DESCRIPTION": "Organiza tus proyectos de una manera flexible con este panel.", "ISSUES": "Peticiones", @@ -162,17 +162,17 @@ "WIKI_DESCRIPTION": "Añade, modifica o borra contenido en colaboración con otros miembros. Este es el lugar adecuado para la documentación de tu proyecto.", "MEETUP": "Meet Up", "MEETUP_DESCRIPTION": "Elige tu sistema de videoconferencia. Incluso los desarrolladores necesitan el contacto cara a cara.", - "SELECT_VIDEOCONFERENCE": "Selecciona un sistema de videoconferencia", - "SALT_CHAT_ROOM": "Si lo deseas puedes añadirle un código salt al nombre del chat room" + "SELECT_VIDEOCONFERENCE": "Elige un sistema de videoconferencia", + "SALT_CHAT_ROOM": "Puedes añadirle un código salt al nombre del chat room" }, "PROJECT_PROFILE": { "PAGE_TITLE": "Perfil del proyecto - {{sectionName}} - {{projectName}}", - "PROJECT_DETAILS": "Detalles del proyecto", + "PROJECT_DETAILS": "Info del proyecto", "PROJECT_NAME": "Nombre del proyecto", "PROJECT_SLUG": "Slug de proyecto", - "NUMBER_SPRINTS": "Número de sprints", - "NUMBER_US_POINTS": "Número de puntos de historia de usuario", - "DESCRIPTION": "DESCRIPCIÓN", + "NUMBER_SPRINTS": "Número de sprints totales estimado", + "NUMBER_US_POINTS": "Número de puntos de historia totales estimados", + "DESCRIPTION": "Descripción", "PUBLIC_PROJECT": "Proyecto público", "PRIVATE_PROJECT": "Proyecto privado", "DELETE": "Eliminar este proyecto" @@ -183,11 +183,14 @@ "DESCRIPTION": "Descarga el fichero CSV o copia la URL generada y abre tu editor de textos o hoja de cálculo favorito para realizar tus propios informes. Podrás visualizar y analizar todos los datos fácilmente.", "HELP": "¿Cómo puedo usar esto en mi hoja de cálculo?", "REGENERATE_TITLE": "Cambiar URL", - "REGENERATE_SUBTITLE": "Vas a cambiar la url de acceso a los datos en formato CSV. La url anterior se deshabilitará. ¿Estás seguro?" + "REGENERATE_SUBTITLE": "Vas a cambiar la url de acceso a los datos en formato CSV. La url anterior se deshabilitará. ¿Estás seguro?", + "CSV_TYPE_US": "historias de usuario", + "CSV_TYPE_TASK": "tareaas", + "CSV_TYPE_ISSUE": "peticiones" }, "CUSTOM_FIELDS": { "TITLE": "Atributos personalizados", - "SUBTITLE": "Especifique los atributos personalizados para sus historias de usuario, tareas y peticiones", + "SUBTITLE": "Especifica los atributos personalizados para las historias de usuario, tareas y peticiones", "US_DESCRIPTION": "Atributos personalizados de historias de usuario", "US_ADD": "Añadir un atributo personalizado en las historias de usuario", "TASK_DESCRIPTION": "Atributos personalizados de tareas", @@ -207,7 +210,7 @@ }, "PROJECT_VALUES_PRIORITIES": { "TITLE": "Prioridades de las peticiones", - "SUBTITLE": "Especifica las prioridades que tendran sus peticiones" + "SUBTITLE": "Especifica las prioridades que podrán tener tus peticiones" }, "PROJECT_VALUES_SEVERITIES": { "TITLE": "Gravedad de las peticiones", @@ -215,7 +218,7 @@ }, "PROJECT_VALUES_STATUS": { "TITLE": "Estado", - "SUBTITLE": "Especifique los estado por los que sus historias de usuario, tareas y peticiones atravesaran ", + "SUBTITLE": "Especifica los estado que atravesarán tus historias de usuario, tareas y peticiones", "US_TITLE": "Estados de historias", "TASK_TITLE": "Estados de Tarea", "ISSUE_TITLE": "Estados de la petición" @@ -229,7 +232,7 @@ "ROLES": { "SECTION_NAME": "Roles - {{projectName}}", "WARNING_NO_ROLE": "Cuidado, ningún rol en su proyecto podrá estimar el valor de los puntos para historias de usuario", - "HELP_ROLE_ENABLED": "Si lo activa, los miembros que posean este rol serán capaces de estimar sus propios puntos en las histórias de usuario", + "HELP_ROLE_ENABLED": "Si lo activas, los miembros que posean este rol serán capaces de estimar sus propios puntos en las histórias de usuario", "COUNT_MEMBERS": "{{ role.members_count }} miembros con este rol", "TITLE_DELETE_ROLE": "Borrar Rol", "REPLACEMENT_ROLE": "Todos los usuarios con este rol serán movidos a", @@ -276,9 +279,9 @@ "RESPONSE": "Respuesta", "DATE": "DD MMM YYYY [a las] hh:mm:ss", "ACTION_HIDE_HISTORY": "(Ocultar historial)", - "ACTION_HIDE_HISTORY_TITLE": "Ocultar detalles del histórico", + "ACTION_HIDE_HISTORY_TITLE": "+ info", "ACTION_SHOW_HISTORY": "(Mostrar historial)", - "ACTION_SHOW_HISTORY_TITLE": "Mostrar detalles del histórico", + "ACTION_SHOW_HISTORY_TITLE": "- info", "WEBHOOK_NAME": "Webhook '{{name}}'" }, "CUSTOM_ATTRIBUTES": { @@ -312,7 +315,7 @@ "LABEL_TASK_STATUS": "Valor por defecto para el selector de estado de tarea", "LABEL_PRIORITY": "Valor por defecto para el selector de prioridad", "LABEL_SEVERITY": "Valor por defecto para el selector de gravedad", - "LABEL_ISSUE_TYPE": "Valor por defecto para el selector de estado de problema", + "LABEL_ISSUE_TYPE": "Valor por defecto para el selector de tipo de la petición", "LABEL_ISSUE_STATUS": "Valor por defecto para el selector de estado de petición" }, "CSV": { @@ -393,12 +396,12 @@ }, "IMPORT": { "TITLE": "Importando Proyecto", - "DESCRIPTION": "Este proceso puede tomarse su tiempo, por favor mantén la ventana abierta.", + "DESCRIPTION": "Este proceso puede tardar un ratito, por favor mantén la ventana abierta.", "ASYNC_IN_PROGRESS_TITLE": "Nuestros Oompa Loompa están importando su proyecto", "ASYNC_IN_PROGRESS_MESSAGE": "Este proceso puede llevarnos algún tiempo
Te enviaremos un email cuando esté listo", "ERROR": "Nuestros Oompa Loompas tienen problemas para importar tus datos. Por favor inténtalo nuevamente.", "ERROR_TOO_MANY_REQUEST": "Lo sentimos, nuestros Oompa Loompas están muy ocupados en este momento. Por favor inténtalo nuevamente en unos minutos.", - "ERROR_MESSAGE": "Nuestros Oompa Loompas tienen algunos problemas importando sus datos: {{error_message}}", + "ERROR_MESSAGE": "Nuestros Oompa Loompas tienen algunos problemas importando tus datos: {{error_message}}", "SYNC_SUCCESS": "Tu proyecto se ha importado con éxito." } }, @@ -574,13 +577,13 @@ } }, "ERROR": { - "TEXT1": "Algo ha pasado y nuestros Oompa Loompas están trabajando en ello.", - "TEXT2": "Intenta volver a cargarlo nuevamente pronto.", + "TEXT1": "Algo no va bien y nuestros Oompa Loompas están trabajando para resolverlo.", + "TEXT2": "Inténtalo de nuevo más tarde.", "NOT_FOUND": "No encontrado", "NOT_FOUND_TEXT": "Error 404. La página que estás buscando ya no existe. Puedes volver a la página de inicio de TAIGA y ver si encuentras lo que estás buscando. ", "PERMISSION_DENIED": "Permiso denegado", "PERMISSION_DENIED_CODE": "Error 403.", - "VERSION_ERROR": "Someone inside Taiga has changed this before and our Oompa Loompas cannot apply your changes. Please reload and apply your changes again (they will be lost)." + "VERSION_ERROR": "Algún compañero se te ha adelantado y ha actualizado esto, nuestros Oompa Loompas no pueden aplicar tus cambios. Por favor, recarga la página y aplícalos nuevamente (se perderán)." }, "TASKBOARD": { "SECTION_NAME": "Panel de Tareas", From bccbda98cbdfa5113c7024a50a4a5e5e917606b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 13:48:35 +0200 Subject: [PATCH 069/194] Fix the page title: don't truncate the project name --- app/partials/admin/admin-roles.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/admin/admin-roles.jade b/app/partials/admin/admin-roles.jade index 236125ca..34b6d23d 100644 --- a/app/partials/admin/admin-roles.jade +++ b/app/partials/admin/admin-roles.jade @@ -8,7 +8,7 @@ div.wrapper.roles(ng-controller="RolesController as ctrl", include ../includes/modules/admin-submenu-roles section.main.admin-roles.admin-common - .header-with-actions + header.header-with-actions include ../includes/components/mainTitle .action-buttons(ng-if="!role.external_user") a.button-red.delete-role(href="", title="{{'COMMON.DELETE' | translate}}", ng-click="ctrl.delete()") From 31590f939cfe70e33c1ca465c33f7622cc935e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 16:38:19 +0200 Subject: [PATCH 070/194] [i18n] Fix backlog section name --- app/coffee/modules/backlog/main.coffee | 2 +- app/locales/locale-en.json | 1 + app/locales/locale-es.json | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index b2794808..aa337b5f 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -57,7 +57,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F @location, @appTitle, @navUrls, @events, @analytics, tgLoader, @translate) -> bindMethods(@) - @scope.sectionName = "Backlog" + @scope.sectionName = @translate.instant("BACKLOG.SECTION_NAME") @showTags = false @activeFilters = false diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 34a74ef8..123c0d1e 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -516,6 +516,7 @@ "SIZE_CHANGE": "Made {{size}} {size, plural, one{change} other{changes}}" }, "BACKLOG": { + "SECTION_NAME": "Backlog", "MOVE_US_TO_CURRENT_SPRINT": "Move to Current Sprint", "SHOW_FILTERS": "Show filters", "SHOW_TAGS": "Show tags", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 65fea406..26763a59 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -514,6 +514,7 @@ "SIZE_CHANGE": "Hechos {{size}} {size, plural, one{cambio} other{cambios}}\n" }, "BACKLOG": { + "SECTION_NAME": "Backlog", "MOVE_US_TO_CURRENT_SPRINT": "Mover al Sprint en curso", "SHOW_FILTERS": "Mostrar filtros", "SHOW_TAGS": "Ver etiquetas", From e7716e6dd226284438fd6237ee6055f7de621c62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 16:38:34 +0200 Subject: [PATCH 071/194] [i18n] Fix issues section name --- app/coffee/modules/issues/list.coffee | 8 +++++--- app/locales/locale-en.json | 1 + app/locales/locale-es.json | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index f13d5e16..82d43e97 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -51,12 +51,14 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi "$tgNavUrls", "$tgEvents", "$tgAnalytics", - "tgLoader" + "tgLoader", + "$translate" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @urls, @params, @q, @location, @appTitle, - @navUrls, @events, @analytics, tgLoader) -> - @scope.sectionName = "Issues" + @navUrls, @events, @analytics, tgLoader, @translate) -> + + @scope.sectionName = @translate.instant("ISSUES.LIST_SECTION_NAME") @scope.filters = {} if _.isEmpty(@location.search()) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 123c0d1e..d2b06f21 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -700,6 +700,7 @@ "LINK_LOGIN": "Are you already registered? Log in" }, "ISSUES": { + "LIST_SECTION_NAME": "Issues", "SECTION_NAME": "Issue Details", "ACTION_NEW_ISSUE": "+ NEW ISSUE", "ACTION_PROMOTE_TO_US": "Promote to User Story", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 26763a59..7eb451f6 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -697,6 +697,7 @@ "LINK_LOGIN": "¿Ya te has registrado? Inicia sesión" }, "ISSUES": { + "LIST_SECTION_NAME": "Peticiones", "SECTION_NAME": "Detalles de la petición", "ACTION_NEW_ISSUE": "+ NUEVA PETICIÓN", "ACTION_PROMOTE_TO_US": "Promover a Historia de Usuario", From 59f88b041148080cc919b21dcc3d5861feb6d63c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 16:45:17 +0200 Subject: [PATCH 072/194] [i18n] Fix kanban section name --- app/coffee/modules/kanban/main.coffee | 7 ++++--- app/locales/locale-en.json | 1 + app/locales/locale-es.json | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index bb2fc5dc..5d9a0b61 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -62,15 +62,16 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi "$tgNavUrls", "$tgEvents", "$tgAnalytics", - "tgLoader" + "tgLoader", + "$translate" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, - @appTitle, @navUrls, @events, @analytics, tgLoader) -> + @appTitle, @navUrls, @events, @analytics, tgLoader, @translate) -> bindMethods(@) - @scope.sectionName = "Kanban" + @scope.sectionName = @translate.instant("KANBAN.SECTION_NAME") @scope.statusViewModes = {} @.initializeEventHandlers() diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index d2b06f21..ad03ff97 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -748,6 +748,7 @@ } }, "KANBAN": { + "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Fold column", "TITLE_ACTION_UNFOLD": "Unfold column", "TITLE_ACTION_FOLD_CARDS": "Fold cards", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 7eb451f6..5b34fca3 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -745,6 +745,7 @@ } }, "KANBAN": { + "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Plegar columna", "TITLE_ACTION_UNFOLD": "Desplegar columna", "TITLE_ACTION_FOLD_CARDS": "Plegar tarjetas", From 51432935a9e0282980cf3bc1bd9d32631f940433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 16:49:45 +0200 Subject: [PATCH 073/194] [i18n] Fix taskboard section name --- app/coffee/modules/taskboard/main.coffee | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/coffee/modules/taskboard/main.coffee b/app/coffee/modules/taskboard/main.coffee index e28db184..75018b97 100644 --- a/app/coffee/modules/taskboard/main.coffee +++ b/app/coffee/modules/taskboard/main.coffee @@ -50,13 +50,14 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin) "$tgEvents" "$tgAnalytics", "tgLoader" + "$translate" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @appTitle, @location, @navUrls, - @events, @analytics, tgLoader) -> + @events, @analytics, tgLoader, @translate) -> bindMethods(@) - @scope.sectionName = "Taskboard" + @scope.sectionName = @translate.instant("TASKBOARD.SECTION_NAME") @.initializeEventHandlers() promise = @.loadInitialData() From e03393e4e7bc85e3458fb98d064c3fe4a914c4c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 17:09:05 +0200 Subject: [PATCH 074/194] [i18n] Minor fixes in assigned-to and add-watcher lightbox --- app/locales/locale-es.json | 26 +++++++++---------- .../lightbox/lightbox-assigned-to-users.jade | 4 +-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 5b34fca3..76b6b921 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -9,7 +9,7 @@ "ACCEPT": "Aceptar", "DELETE": "Borrar", "CREATE": "Crear", - "ADD": "Agregar", + "ADD": "Añadir", "COPY_TO_CLIPBOARD": "Copiar en el portapapeles: Ctrl+C", "EDIT": "Editar", "DRAG": "Arrastra", @@ -73,7 +73,7 @@ "OPEN": "Abierto" }, "WATCHERS": { - "ADD": "Agregar observador", + "ADD": "Añadir un observador...", "TITLE": "observadores", "DELETE": "eliminar observador" }, @@ -132,7 +132,7 @@ "MEMBERSHIPS": { "TITLE": "Administrar miembros", "ADD_BUTTON": "+ Nuevo miembro", - "ADD_BUTTON_TITLE": "Agregar nuevo miembro" + "ADD_BUTTON_TITLE": "Añadir un nuevo miembro" }, "PROJECT_EXPORT": { "TITLE": "Exportar", @@ -196,7 +196,7 @@ "TASK_DESCRIPTION": "Atributos personalizados de tareas", "TASK_ADD": "Añadir un atributo personalizado en las tareas", "ISSUE_DESCRIPTION": "Atributos personalizados de peticiones", - "ISSUE_ADD": "Agregar un atributo personalizado en las peticiones" + "ISSUE_ADD": "Añadir un atributo personalizado en las peticiones" }, "PROJECT_VALUES": { "APP_TITLE": "Valores del proyecto - {{sectionName}} - {{projectName}}", @@ -371,8 +371,8 @@ "WELCOME": "Bienvenido", "SECTION_PROJECTS": "Proyectos", "STATS": { - "PROJECT": "puntos
proyecto", - "DEFINED": "Puntos
definidos", + "PROJECT": "puntos
proyecto", + "DEFINED": "puntos
definidos", "ASSIGNED": "puntos
asignados", "CLOSED": "puntos
cerrados" }, @@ -418,7 +418,7 @@ "CONFIRM": "Si, Estoy realmente seguro" }, "ASSIGNED_TO": { - "SELECT": "Selecciona asignado a", + "SELECT": "Asignar a...", "SEARCH": "Buscar usuarios" }, "ADD_MEMBER": { @@ -470,8 +470,8 @@ }, "US": { "TOTAL_POINTS": "total", - "ADD": "+ Agregar una Historia de Usuario", - "ADD_BULK": "Agregar nuevas Historias de Usuario en masa", + "ADD": "+ Añadir una Historia de Usuario", + "ADD_BULK": "Añadir nuevas Historias de Usuario en bloque", "PROMOTED": "Esta historia ha sido promovida desde la petición:", "TITLE_LINK_GO_TO_ISSUE": "Ir a petición", "EXTERNAL_REFERENCE": "Esta historia ha sido creada desde", @@ -546,8 +546,8 @@ "TITLE_COLUMN_POINTS": "Seleccionar vista por Rol" }, "SPRINT_SUMMARY": { - "TOTAL_POINTS": "Puntos
totales", - "COMPLETED_POINTS": "Puntos
completados", + "TOTAL_POINTS": "puntos
totales", + "COMPLETED_POINTS": "puntos
completados", "OPEN_TASKS": "tareas
abiertas", "CLOSED_TASKS": "tareas
cerradas", "IOCAINE_DOSES": "dosis de
iocaína", @@ -555,8 +555,8 @@ }, "SUMMARY": { "PROJECT_POINTS": "puntos
proyecto", - "DEFINED_POINTS": "Puntos
definidos", - "CLOSED_POINTS": "Puntos
cerrados", + "DEFINED_POINTS": "puntos
definidos", + "CLOSED_POINTS": "puntos
cerrados", "POINTS_PER_SPRINT": "puntos /
sprint" }, "FILTERS": { diff --git a/app/partials/common/lightbox/lightbox-assigned-to-users.jade b/app/partials/common/lightbox/lightbox-assigned-to-users.jade index f85d2df2..792d4ec3 100644 --- a/app/partials/common/lightbox/lightbox-assigned-to-users.jade +++ b/app/partials/common/lightbox/lightbox-assigned-to-users.jade @@ -5,7 +5,7 @@ img(src!="<%- selected.photo %>") a(href="", title!="<%- selected.full_name_display %>", class="watcher-name") | <%-selected.full_name_display %> - a(href="", title="{{'REMOVE_ASSIGNED' | translate}}", class="icon icon-delete remove-assigned-to") + a(href="", title="{{'COMMON.ASSIGNED_TO.REMOVE_ASSIGNED' | translate}}", class="icon icon-delete remove-assigned-to") <% } %> <% _.each(users, function(user) { %> @@ -20,4 +20,4 @@ <% if (showMore) { %> div(ng-show="filteringUsers", class="more-watchers") span(translate="COMMON.ASSIGNED_TO.TOO_MANY") -<% } %> \ No newline at end of file +<% } %> From fbd4d7b89a8c89d7520b45c4861738e350ba283c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Apr 2015 17:34:00 +0200 Subject: [PATCH 075/194] Fix indents --- app/coffee/modules/admin/lightboxes.coffee | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/coffee/modules/admin/lightboxes.coffee b/app/coffee/modules/admin/lightboxes.coffee index 7df3a3d0..fdf383d0 100644 --- a/app/coffee/modules/admin/lightboxes.coffee +++ b/app/coffee/modules/admin/lightboxes.coffee @@ -30,17 +30,19 @@ MAX_MEMBERSHIP_FIELDSETS = 4 ## Create Members Lightbox Directive ############################################################################# -CreateMembersDirective = ($rs, $rootScope, $confirm, $loading ,lightboxService, $compile) -> +CreateMembersDirective = ($rs, $rootScope, $confirm, $loading, lightboxService, $compile) -> extraTextTemplate = """
- +
""" template = _.template("""
- data-required="true" <% } %> data-type="email" /> + data-required="true" <% } %> data-type="email" />
@@ -309,7 +311,7 @@ TaskIsIocaineButtonDirective = ($rootscope, $tgrepo, $confirm, $loading, $qqueue isIocaine: task.is_iocaine isEditable: isEditable() } - html = template(ctx) + html = $compile(template(ctx))($scope) $el.html(html) save = $qqueue.bindAdd (is_iocaine) => @@ -351,4 +353,5 @@ TaskIsIocaineButtonDirective = ($rootscope, $tgrepo, $confirm, $loading, $qqueue require: "ngModel" } -module.directive("tgTaskIsIocaineButton", ["$rootScope", "$tgRepo", "$tgConfirm", "$tgLoading", "$tgQqueue", TaskIsIocaineButtonDirective]) +module.directive("tgTaskIsIocaineButton", ["$rootScope", "$tgRepo", "$tgConfirm", "$tgLoading", "$tgQqueue", + "$compile", TaskIsIocaineButtonDirective]) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 1fa780dc..be9a26b5 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -657,7 +657,9 @@ "MILESTONE": "Sprint", "USER_STORY": "User story", "IS_IOCAINE": "Is iocaine" - } + }, + "ACTION_IOCAINE": "Iocaine", + "TITLE_ACTION_IOCAINE": "Feeling a bit overwhelmed by a task? Make sure others know about it by clicking on Iocaine when editing a task. It's possible to become immune to this (fictional) deadly poison by consuming small amounts over time just as it's possible to get better at what you do by occasionally taking on extra challenges!" }, "NOTIFICATION": { "OK": "Everything is ok", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 797738b2..3c78d229 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -654,7 +654,9 @@ "MILESTONE": "Sprint", "USER_STORY": "Historia de usuario", "IS_IOCAINE": "Tiene iocaína" - } + }, + "ACTION_IOCAINE": "Iocaína", + "TITLE_ACTION_IOCAINE": "¿Te sientes fuera de tu zona de confort en una tarea? Asegúrate de que los demás están al tanto de ello, marca el check de la Iocaína al editar una tarea. Igual eu era posible llegar a ser inmune a este veneno mortal a base de consumir pequeñas dosis a lo largo del tiempo, es posible conseguir mejor en lo que estás haciendo si afrontas de vez en cuando esta clase de retos!" }, "NOTIFICATION": { "OK": "Todo está bien", @@ -741,33 +743,44 @@ "TITLE_NEXT_ISSUE": "petición siguiente", "ACTION_DELETE": "Borrar petición", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Petición bloqueada", - "FIELDS": { - "PRIORITY": "prioridad", - "SEVERITY": "gravedad", - "TYPE": "tipo" - }, "CONFIRM_PROMOTE": { "TITLE": "Promover esta petición a una nueva historia de usuario", "MESSAGE": "¿Está seguro de que desea crear una nueva Historia de Usuario a partir de esta Petición?" }, "FILTERS": { + "TITLE": "Filtros", + "INPUT_SEARCH_PLACEHOLDER": "Asunto o referencia", + "TITLE_ACTION_SEARCH": "Buscar", "ACTION_SAVE_CUSTOM_FILTER": "guardar como atributo personalizado", + "BREADCRUMB": "Filtros", + "TITLE_BREADCRUMB": "Filtros", + "CATEGORIES": { + "TYPE": "Tipo", + "STATUS": "Estado", + "SEVERITY": "Gravedad", + "PRIORITIES": "Prioridad", + "TAGS": "Etiquetas", + "ASSIGNED_TO": "Asignado a", + "CREATED_BY": "Creada por", + "CUSTOM_FILTERS": "Filtros personalizados" + }, "CONFIRM_DELETE": { "TITLE": "Eliminar filtros personalizados", "MESSAGE": "el atributo personalizado '{{customFilterName}}'" - }, - "FILTER_CATEGORY_TYPE": "Tipo", - "FILTER_CATEGORY_STATUS": "Estado", - "FILTER_CATEGORY_SEVERITY": "Gravedad", - "FILTER_CATEGORY_PRIORITIES": "Prioridades", - "FILTER_CATEGORY_TAGS": "Etiquetas", - "FILTER_CATEGORY_ASSIGNED_TO": "Asignado a", - "FILTER_CATEGORY_CREATED_BY": "Creado por", - "CUSTOM_FILTERS": "Filtros personalizados" + } }, "TABLE": { - "COLUMN_CREATED": "Creado", + "COLUMNS": { + "TYPE": "Tipo", + "SEVERITY": "Gravedad", + "PRIORITY": "Prioridad", + "SUBJECT": "Asunto", + "STATUS": "Estado", + "CREATED": "Creado", + "ASSIGNED_TO": "Asignado a" + }, "TITLE_ACTION_CHANGE_STATUS": "Cambio de estado", + "TITLE_ACTION_ASSIGNED_TO": "Asignado a", "EMPTY": { "TITLE": "No hay peticiones a reportar :-)", "SUBTITLE": "¿Ha encontrado una petición?", From 5ddd015c742bb36168e2ed541c620d8ee24534ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 27 Apr 2015 15:44:11 +0200 Subject: [PATCH 089/194] [i18n] Fix taskboard button in the backlog --- app/locales/locale-en.json | 2 +- app/locales/locale-es.json | 2 +- app/locales/locale-fr.json | 109 ++++++++++++--------- app/partials/includes/modules/sprint.jade | 9 +- app/partials/includes/modules/sprints.jade | 3 +- 5 files changed, 70 insertions(+), 55 deletions(-) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index be9a26b5..431783c1 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -602,7 +602,7 @@ "SPRINTS": { "TITLE": "SPRINTS", "LINK_TASKBOARD": "Sprint Taskboard", - "TITLE_LINK_TASKBOARD": "Go to Taskboard of {{spring.name}}", + "TITLE_LINK_TASKBOARD": "Go to Taskboard of \"{{name}}\"", "NUMBER_SPRINTS": "
sprints", "TITLE_ACTION_NEW_SPRINT": "+ New sprint", "ACTION_NEW_SPRINT": "+ New sprint", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 3c78d229..142f22ef 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -599,7 +599,7 @@ "SPRINTS": { "TITLE": "SPRINTS", "LINK_TASKBOARD": "Panel de Tareas del Sprint", - "TITLE_LINK_TASKBOARD": "Ir al Panel de Tareas de {{spring.name}}", + "TITLE_LINK_TASKBOARD": "Ir al panel de tareas de \"{{name}}\"", "NUMBER_SPRINTS": "
sprints", "TITLE_ACTION_NEW_SPRINT": "+ Nuevo Sprint", "ACTION_NEW_SPRINT": "+ Nuevo sprint", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 90f87b08..9cc3baf9 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -35,7 +35,7 @@ "IOCAINE_TEXT": "Vous vous sentez un peu submergé par une tâche ? Soyez certains d'en informer les autres en cliquant su Iocaine lors de la modification de la tâche. Il est possible de s'immuniser contre ce poison (fictif) en consommant de petites quantités en heures supplémentaires, tout comme il est possible de s'améliorer en acceptant parfois de nouveaux défis !", "TAGS": { "PLACEHOLDER": "Taggez moi !", - "DELETE": "Delete tag", + "DELETE": "Supprimer l'étiquette", "ADD": "Ajouter un label" }, "DESCRIPTION": { @@ -92,32 +92,32 @@ "BREADCRUMB_STATUS": "état" }, "WYSIWYG": { - "H1_BUTTON": "First Level Heading", - "H1_SAMPLE_TEXT": "Your title here...", - "H2_BUTTON": "Second Level Heading", - "H2_SAMPLE_TEXT": "Your title here...", - "H3_BUTTON": "Third Level Heading", - "H3_SAMPLE_TEXT": "Your title here...", - "BOLD_BUTTON": "Bold", - "BOLD_BUTTON_SAMPLE_TEXT": "Your text here...", - "ITALIC_BUTTON": "Italic", - "ITALIC_SAMPLE_TEXT": "Your text here...", - "STRIKE_BUTTON": "Strike", - "STRIKE_SAMPLE_TEXT": "Your text here...", - "BULLETED_LIST_BUTTON": "Bulleted List", - "BULLETED_LIST_SAMPLE_TEXT": "Your text here...", - "NUMERIC_LIST_BUTTON": "Numeric List", - "NUMERIC_LIST_SAMPLE_TEXT": "Your text here...", - "PICTURE_BUTTON": "Picture", - "PICTURE_SAMPLE_TEXT": "Your alternative text to picture here...", - "LINK_BUTTON": "Link", - "LINK_SAMPLE_TEXT": "Your text to link here....", - "QUOTE_BLOCK_BUTTON": "Quote Block", - "QUOTE_BLOCK_SAMPLE_TEXT": "Your text here...", - "CODE_BLOCK_BUTTON": "Code Block", - "CODE_BLOCK_SAMPLE_TEXT": "Your text here...", - "PREVIEW_BUTTON": "Preview", - "EDIT_BUTTON": "Edit", + "H1_BUTTON": "Premier niveau de titre", + "H1_SAMPLE_TEXT": "Votre titre ici…", + "H2_BUTTON": "Deuxième niveau de titre", + "H2_SAMPLE_TEXT": "Votre titre ici…", + "H3_BUTTON": "Troisième niveau de titre", + "H3_SAMPLE_TEXT": "Votre titre ici…", + "BOLD_BUTTON": "Gras", + "BOLD_BUTTON_SAMPLE_TEXT": "Votre texte ici…", + "ITALIC_BUTTON": "Italique", + "ITALIC_SAMPLE_TEXT": "Votre texte ici…", + "STRIKE_BUTTON": "Barré", + "STRIKE_SAMPLE_TEXT": "Votre texte ici…", + "BULLETED_LIST_BUTTON": "Liste à puces", + "BULLETED_LIST_SAMPLE_TEXT": "Votre texte ici…", + "NUMERIC_LIST_BUTTON": "Liste numérotée", + "NUMERIC_LIST_SAMPLE_TEXT": "Votre texte ici…", + "PICTURE_BUTTON": "Image", + "PICTURE_SAMPLE_TEXT": "Votre texte alternatif à l'image ici…", + "LINK_BUTTON": "Lien", + "LINK_SAMPLE_TEXT": "Votre texte de lien ici…", + "QUOTE_BLOCK_BUTTON": "Bloc de citation", + "QUOTE_BLOCK_SAMPLE_TEXT": "Votre texte ici…", + "CODE_BLOCK_BUTTON": "Bloc de code", + "CODE_BLOCK_SAMPLE_TEXT": "Votre texte ici…", + "PREVIEW_BUTTON": "Prévisualiser", + "EDIT_BUTTON": "Éditer", "MARKDOWN_HELP": "Aide sur la syntaxe Markdown" } }, @@ -569,7 +569,7 @@ }, "TAGS": { "SHOW": "Montrer les étiquettes", - "HIDE": "Hide tags" + "HIDE": "Cacher les étiquettes" }, "TABLE": { "COLUMN_US": "Histoires utilisateur", @@ -599,7 +599,7 @@ "SPRINTS": { "TITLE": "SPRINTS", "LINK_TASKBOARD": "Taskboard du sprint", - "TITLE_LINK_TASKBOARD": "Aller au Taskboard de {{spring.name}}", + "TITLE_LINK_TASKBOARD": "Aller au Taskboard de \"{{name}}\"", "NUMBER_SPRINTS": "
sprints", "TITLE_ACTION_NEW_SPRINT": "+ Nouveau sprint", "ACTION_NEW_SPRINT": "+ Nouveau sprint", @@ -654,7 +654,9 @@ "MILESTONE": "Sprint", "USER_STORY": "Histoire utilisateur", "IS_IOCAINE": "est sous iocaine" - } + }, + "ACTION_IOCAINE": "locaine", + "TITLE_ACTION_IOCAINE": "Vous vous sentez un peu dépassé par une tâche? Assurez-vous que les autres le savent en cliquant sur locaine en éditant une tâche. Il est possible de s'immuniser contre ce poison (fictif) en en consommant de faibles doses pendant un moment tout comme il est possible de devenir meilleur à ce que vous faîtes en relevant quelques défis à l'occasion!" }, "NOTIFICATION": { "OK": "Tout est ok", @@ -741,33 +743,44 @@ "TITLE_NEXT_ISSUE": "problème suivant", "ACTION_DELETE": "Supprimer le problème", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Problème bloquant", - "FIELDS": { - "PRIORITY": "priorité", - "SEVERITY": "sévérité", - "TYPE": "type" - }, "CONFIRM_PROMOTE": { "TITLE": "Transformer ce problème en une nouvelle user story", "MESSAGE": "Etes-vous sure de vouloir créer un nouvelle US à partir de ce problème ?" }, "FILTERS": { + "TITLE": "Filtres", + "INPUT_SEARCH_PLACEHOLDER": "Sujet ou réf.", + "TITLE_ACTION_SEARCH": "Rechercher", "ACTION_SAVE_CUSTOM_FILTER": "sauvegarder en tant que filtre personnalisé", + "BREADCRUMB": "Filtres", + "TITLE_BREADCRUMB": "Filtres", + "CATEGORIES": { + "TYPE": "Type", + "STATUS": "Statut", + "SEVERITY": "Sévérité", + "PRIORITIES": "Priorités", + "TAGS": "Étiquettes", + "ASSIGNED_TO": "Affecté à", + "CREATED_BY": "Créé par", + "CUSTOM_FILTERS": "Filtres personnalisés" + }, "CONFIRM_DELETE": { "TITLE": "Supprime le filtre personnalisé", "MESSAGE": "le filtre personnalisé '{{customFilterName}}'" - }, - "FILTER_CATEGORY_TYPE": "Type", - "FILTER_CATEGORY_STATUS": "Etats", - "FILTER_CATEGORY_SEVERITY": "Sévérité", - "FILTER_CATEGORY_PRIORITIES": "Priorités", - "FILTER_CATEGORY_TAGS": "Labels", - "FILTER_CATEGORY_ASSIGNED_TO": "Assigné à", - "FILTER_CATEGORY_CREATED_BY": "Créé par", - "CUSTOM_FILTERS": "Filtres personnalisés" + } }, "TABLE": { - "COLUMN_CREATED": "Créé", + "COLUMNS": { + "TYPE": "Type", + "SEVERITY": "Sévérité", + "PRIORITY": "Priorité", + "SUBJECT": "Sujet", + "STATUS": "Statut", + "CREATED": "Créé le", + "ASSIGNED_TO": "Affecté à" + }, "TITLE_ACTION_CHANGE_STATUS": "Modifier l'état", + "TITLE_ACTION_ASSIGNED_TO": "Affecté à", "EMPTY": { "TITLE": "Aucun bug rapporté :-)", "SUBTITLE": "Avez-vous trouvé un bug ?", @@ -810,7 +823,7 @@ "COLUMN_CERVANTES": "Cervantes", "EXPLANATION_COLUMN_CERVANTES": "Page Wiki éditée", "COLUMN_BUG_HUNTER": "Chasseur de bug", - "EXPLANATION_COLUMN_BUG_HUNTER": "Issues reported", + "EXPLANATION_COLUMN_BUG_HUNTER": "Problèmes rapportés", "COLUMN_NIGHT_SHIFT": "Equipe de nuit", "EXPLANATION_COLUMN_NIGHT_SHIFT": "Tâches fermées", "COLUMN_TOTAL_POWER": "Puissance totale", @@ -824,8 +837,8 @@ "SECTION_NAME": "Modifier le mot de passe", "FIELD_CURRENT_PASSWORD": "Mot de passe courant", "PLACEHOLDER_CURRENT_PASSWORD": "Votre mot de passe courant (ne rien saisir si vous ne possédez pas encore de mot de passe)", - "FIELD_NEW_PASSWORD": "New password", - "PLACEHOLDER_NEW_PASSWORD": "Type a new password", + "FIELD_NEW_PASSWORD": "Nouveau mot de passe", + "PLACEHOLDER_NEW_PASSWORD": "Entrez un nouveau mot de passe", "FIELD_RETYPE_PASSWORD": "Confirmez le mot de passe", "PLACEHOLDER_RETYPE_PASSWORD": "Confirmez le mot de passe", "ERROR_PASSWORD_MATCH": "Les mots de passe ne correspondent pas" diff --git a/app/partials/includes/modules/sprint.jade b/app/partials/includes/modules/sprint.jade index 52c1b605..ecdddbdc 100644 --- a/app/partials/includes/modules/sprint.jade +++ b/app/partials/includes/modules/sprint.jade @@ -10,10 +10,11 @@ div.sprint-table ng-class="{closed: us.is_closed, blocked: us.is_blocked}") span(tg-bo-ref="us.ref") span(tg-bo-bind="us.subject") - div.column-points.width-1(tg-bo-bind="us.total_points", ng-class="{closed: us.is_closed, blocked: us.is_blocked}") + div.column-points.width-1(tg-bo-bind="us.total_points", + ng-class="{closed: us.is_closed, blocked: us.is_blocked}") -a.button-gray(title="{{'SPRINTS.TITLE_LINK_TASKBOARD' | translate}}", - tg-nav="project-taskboard:project=project.slug,sprint=sprint.slug", - tg-check-permission="view_milestones") +a.button-gray(title="{{ 'BACKLOG.SPRINTS.TITLE_LINK_TASKBOARD' | translate:sprint }}", + tg-nav="project-taskboard:project=project.slug,sprint=sprint.slug", + tg-check-permission="view_milestones") span(translate="BACKLOG.SPRINTS.LINK_TASKBOARD") diff --git a/app/partials/includes/modules/sprints.jade b/app/partials/includes/modules/sprints.jade index 8273fd26..3f524c63 100644 --- a/app/partials/includes/modules/sprints.jade +++ b/app/partials/includes/modules/sprints.jade @@ -5,7 +5,8 @@ section.sprints div.total-sprints span.number(ng-bind="project.total_milestones") -- span.description(translate="BACKLOG.SPRINTS.NUMBER_SPRINTS") - a.button-green.add-sprint(href="", title="{{'BACKLOG.TITLE_ACTION_NEW_SPRINT' | translate}}", ng-click="ctrl.addNewSprint()", tg-check-permission="add_milestone") + a.button-green.add-sprint(href="", title="{{ 'BACKLOG.TITLE_ACTION_NEW_SPRINT' | translate }}", + ng-click="ctrl.addNewSprint()", tg-check-permission="add_milestone") span.text(translate="BACKLOG.SPRINTS.ACTION_NEW_SPRINT") div.sprint.sprint-open(ng-repeat="sprint in openSprints track by sprint.id", tg-backlog-sprint="sprint", tg-sprint-sortable) From 06a6ee8c83f424042af3a2f885665f867bc1cd23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 27 Apr 2015 16:11:14 +0200 Subject: [PATCH 090/194] Indent some html --- app/partials/backlog/progress-bar.jade | 7 +++++-- app/partials/includes/modules/sprints.jade | 11 ++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/partials/backlog/progress-bar.jade b/app/partials/backlog/progress-bar.jade index ef03cd96..2fbfaadd 100644 --- a/app/partials/backlog/progress-bar.jade +++ b/app/partials/backlog/progress-bar.jade @@ -1,3 +1,6 @@ .defined-points(title="{{'BACKLOG.EXCESS_OF_POINTS' | translate}}") -.project-points-progress(title="{{'BACKLOG.PENDING_POINTS' | translate}}", style!="width: <%- projectPointsPercentaje %>%") -.closed-points-progress(title="{{'BACKLOG.CLOSED_POINTS' | translate}}", style!="width: <%- closedPointsPercentaje %>%") \ No newline at end of file + +.project-points-progress(title="{{'BACKLOG.PENDING_POINTS' | translate}}", + style!="width: <%- projectPointsPercentaje %>%") +.closed-points-progress(title="{{'BACKLOG.CLOSED_POINTS' | translate}}", + style!="width: <%- closedPointsPercentaje %>%") diff --git a/app/partials/includes/modules/sprints.jade b/app/partials/includes/modules/sprints.jade index 3f524c63..462b9301 100644 --- a/app/partials/includes/modules/sprints.jade +++ b/app/partials/includes/modules/sprints.jade @@ -9,12 +9,17 @@ section.sprints ng-click="ctrl.addNewSprint()", tg-check-permission="add_milestone") span.text(translate="BACKLOG.SPRINTS.ACTION_NEW_SPRINT") - div.sprint.sprint-open(ng-repeat="sprint in openSprints track by sprint.id", tg-backlog-sprint="sprint", tg-sprint-sortable) + div.sprint.sprint-open(ng-repeat="sprint in openSprints track by sprint.id", + tg-backlog-sprint="sprint", + tg-sprint-sortable) include sprint - a.filter-closed-sprints(tg-backlog-toggle-closed-sprints-visualization, href="", ng-show="totalClosedMilestones") + a.filter-closed-sprints(href="", tg-backlog-toggle-closed-sprints-visualization, + ng-show="totalClosedMilestones") span.icon.icon-archive span.text(translate="BACKLOG.SPRINTS.ACTION_SHOW_CLOSED_SPRINTS") - div.sprint.sprint-closed(ng-repeat="sprint in closedSprints track by sprint.id" tg-backlog-sprint="sprint", tg-sprint-sortable) + div.sprint.sprint-closed(ng-repeat="sprint in closedSprints track by sprint.id", + tg-backlog-sprint="sprint", + tg-sprint-sortable) include sprint From 18d9376812853955d853f3978a840b6982c6fd8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 27 Apr 2015 16:44:36 +0200 Subject: [PATCH 091/194] [i18n] Fix page user settings > notifications --- .../user-settings/notifications.coffee | 26 +++++++++++++------ app/locales/locale-en.json | 5 +++- app/locales/locale-es.json | 5 +++- app/locales/locale-fr.json | 5 +++- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/app/coffee/modules/user-settings/notifications.coffee b/app/coffee/modules/user-settings/notifications.coffee index d81814ff..ca299c71 100644 --- a/app/coffee/modules/user-settings/notifications.coffee +++ b/app/coffee/modules/user-settings/notifications.coffee @@ -94,7 +94,7 @@ module.directive("tgUserNotifications", UserNotificationsDirective) ## User Notifications List Directive ############################################################################# -UserNotificationsListDirective = ($repo, $confirm) -> +UserNotificationsListDirective = ($repo, $confirm, $compile) -> template = _.template(""" <% _.each(notifyPolicies, function (notifyPolicy, index) { %>
@@ -104,7 +104,8 @@ UserNotificationsListDirective = ($repo, $confirm) -> checked="checked"<% } %>/> - +
@@ -112,7 +113,8 @@ UserNotificationsListDirective = ($repo, $confirm) -> checked="checked"<% } %> /> - +
@@ -120,7 +122,8 @@ UserNotificationsListDirective = ($repo, $confirm) -> checked="checked"<% } %> /> - +
@@ -130,13 +133,17 @@ UserNotificationsListDirective = ($repo, $confirm) -> link = ($scope, $el, $attrs) -> render = -> $el.off() - $el.html(template({notifyPolicies: $scope.notifyPolicies})) + + ctx = {notifyPolicies: $scope.notifyPolicies} + html = template(ctx) + + $el.html($compile(html)($scope)) $el.on "change", "input[type=radio]", (event) -> target = angular.element(event.currentTarget) + policyIndex = target.parents(".policy-table-row").data('index') policy = $scope.notifyPolicies[policyIndex] - prev_level = policy.notify_level policy.notify_level = parseInt(target.val(), 10) @@ -145,7 +152,9 @@ UserNotificationsListDirective = ($repo, $confirm) -> onError = -> $confirm.notify("error") - target.parents(".policy-table-row").find("input[value=#{prev_level}]").prop("checked", true) + target.parents(".policy-table-row") + .find("input[value=#{prev_level}]") + .prop("checked", true) $repo.save(policy).then(onSuccess, onError) @@ -156,4 +165,5 @@ UserNotificationsListDirective = ($repo, $confirm) -> return {link:link} -module.directive("tgUserNotificationsList", ["$tgRepo", "$tgConfirm", UserNotificationsListDirective]) +module.directive("tgUserNotificationsList", ["$tgRepo", "$tgConfirm", "$compile", + UserNotificationsListDirective]) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 431783c1..739350ec 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -859,7 +859,10 @@ "COLUMN_PROJECT": "Project", "COLUMN_RECEIVE_ALL": "Receive All", "COLUMN_ONLY_INVOLVED": "Only Involved", - "COLUMN_NO_NOTIFICATIONS": "No notifications" + "COLUMN_NO_NOTIFICATIONS": "No notifications", + "OPTION_ALL": "All", + "OPTION_INVOLVED": "Involved", + "OPTION_NONE": "None" }, "POPOVER": { "USER_PROFILE": "User Profile", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 142f22ef..41d234ba 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -856,7 +856,10 @@ "COLUMN_PROJECT": "Proyecto", "COLUMN_RECEIVE_ALL": "Recibir Todo", "COLUMN_ONLY_INVOLVED": "Estoy involucrado", - "COLUMN_NO_NOTIFICATIONS": "Sin notificaciones" + "COLUMN_NO_NOTIFICATIONS": "Sin notificaciones", + "OPTION_ALL": "Todas", + "OPTION_INVOLVED": "Involucrado", + "OPTION_NONE": "Ninguna" }, "POPOVER": { "USER_PROFILE": "Perfil de Usuario", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 9cc3baf9..43b510aa 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -856,7 +856,10 @@ "COLUMN_PROJECT": "Projet", "COLUMN_RECEIVE_ALL": "Tout recevoir", "COLUMN_ONLY_INVOLVED": "Uniquement si impliqué", - "COLUMN_NO_NOTIFICATIONS": "Aucune notification" + "COLUMN_NO_NOTIFICATIONS": "Aucune notification", + "OPTION_ALL": "Toutes", + "OPTION_INVOLVED": "Impliqué", + "OPTION_NONE": "Aucune" }, "POPOVER": { "USER_PROFILE": "Profil utilisateur", From a33ecb9570519fbb61e19571d219e68c04b2c388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 27 Apr 2015 18:43:28 +0200 Subject: [PATCH 092/194] [i18n] Translate the team page and fix the filter --- app/coffee/modules/team/main.coffee | 27 ++++++++++++++----- app/locales/locale-en.json | 2 +- app/locales/locale-es.json | 4 +-- app/locales/locale-fr.json | 2 +- app/partials/team/leave-project.jade | 4 +-- app/partials/team/team-filter.jade | 10 +++---- .../team/team-member-current-user.jade | 16 ++++++----- app/partials/team/team-member-stats.jade | 27 +++++++++++-------- app/partials/team/team-members.jade | 16 ++++++----- 9 files changed, 67 insertions(+), 41 deletions(-) diff --git a/app/coffee/modules/team/main.coffee b/app/coffee/modules/team/main.coffee index edfc9e5d..6cfe21b7 100644 --- a/app/coffee/modules/team/main.coffee +++ b/app/coffee/modules/team/main.coffee @@ -45,7 +45,8 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) "$translate" ] - constructor: (@scope, @rootscope, @repo, @rs, @params, @q, @location, @navUrls, @appTitle, @auth, tgLoader, @translate) -> + constructor: (@scope, @rootscope, @repo, @rs, @params, @q, @location, @navUrls, @appTitle, @auth, tgLoader, + @translate) -> @scope.sectionName = "TEAM.SECTION_NAME" promise = @.loadInitialData() @@ -138,6 +139,7 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) module.controller("TeamController", TeamController) + ############################################################################# ## Team Filters Directive ############################################################################# @@ -149,6 +151,7 @@ TeamFiltersDirective = () -> module.directive("tgTeamFilters", [TeamFiltersDirective]) + ############################################################################# ## Team Member Stats Directive ############################################################################# @@ -167,6 +170,7 @@ TeamMemberStatsDirective = () -> module.directive("tgTeamMemberStats", TeamMemberStatsDirective) + ############################################################################# ## Team Current User Directive ############################################################################# @@ -186,6 +190,7 @@ TeamMemberCurrentUserDirective = () -> module.directive("tgTeamCurrentUser", TeamMemberCurrentUserDirective) + ############################################################################# ## Team Members Directive ############################################################################# @@ -208,6 +213,7 @@ TeamMembersDirective = () -> module.directive("tgTeamMembers", TeamMembersDirective) + ############################################################################# ## Leave project Directive ############################################################################# @@ -236,10 +242,17 @@ LeaveProjectDirective = ($repo, $confirm, $location, $rs, $navurls, $translate) link: link } -module.directive("tgLeaveProject", ["$tgRepo", "$tgConfirm", "$tgLocation", "$tgResources", "$tgNavUrls", LeaveProjectDirective]) +module.directive("tgLeaveProject", ["$tgRepo", "$tgConfirm", "$tgLocation", "$tgResources", "$tgNavUrls", + LeaveProjectDirective]) -module.filter 'membersRoleFilter', () -> - (input, filtersRole) -> - if filtersRole? - return _.filter(input, {role: filtersRole.id}) - return input + +############################################################################# +## Team Filters +############################################################################# + +membersFilter = -> + return (members, filtersQ, filtersRole) -> + return _.filter members, (m) -> (not filtersRole or m.role == filtersRole.id) and + (not filtersQ or m.full_name.search(new RegExp(filtersQ, "i")) >= 0) + +module.filter('membersFilter', membersFilter) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 739350ec..c028ffab 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -818,7 +818,7 @@ "TEAM": { "SECTION_NAME": "Team", "APP_TITLE": "TEAM - {{projectName}}", - "PLACEHOLDER_INPUT_SEARCH": "Search by username or role...", + "PLACEHOLDER_INPUT_SEARCH": "Search by full name...", "COLUMN_MR_WOLF": "Mr. Wolf", "EXPLANATION_COLUMN_MR_WOLF": "Closed issues", "COLUMN_IOCAINE": "Iocaine Drinker", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 41d234ba..9ee1b99c 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -815,7 +815,7 @@ "TEAM": { "SECTION_NAME": "Equipo", "APP_TITLE": "EQUIPO - {{projectName}}", - "PLACEHOLDER_INPUT_SEARCH": "Buscar por nombre de usuario o rol", + "PLACEHOLDER_INPUT_SEARCH": "Buscar por nombre completo...", "COLUMN_MR_WOLF": "Sr. Lobo", "EXPLANATION_COLUMN_MR_WOLF": "Peticiones cerradas", "COLUMN_IOCAINE": "Bebedor de Iocaína", @@ -831,7 +831,7 @@ "SECTION_TITLE_TEAM": "Equipo >", "SECTION_FILTER_ALL": "Todo", "CONFIRM_LEAVE_PROJECT": "¿Esta seguro que desea dejar el proyecto?", - "ACTION_LEAVE_PROJECT": "Abandonar esté proyecto" + "ACTION_LEAVE_PROJECT": "Abandonar este proyecto" }, "CHANGE_PASSWORD": { "SECTION_NAME": "Cambiar contraseña", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 43b510aa..c365966e 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -815,7 +815,7 @@ "TEAM": { "SECTION_NAME": "Equipe", "APP_TITLE": "EQUIPE - {{projectName}}", - "PLACEHOLDER_INPUT_SEARCH": "Rechercher par nom ou par rôle...", + "PLACEHOLDER_INPUT_SEARCH": "Rechercher par nom...", "COLUMN_MR_WOLF": "Mr. Wolf", "EXPLANATION_COLUMN_MR_WOLF": "Bugs fermés", "COLUMN_IOCAINE": "Buveur de iocaine", diff --git a/app/partials/team/leave-project.jade b/app/partials/team/leave-project.jade index 16b599f0..b9d52ae0 100644 --- a/app/partials/team/leave-project.jade +++ b/app/partials/team/leave-project.jade @@ -1,3 +1,3 @@ -a.leave-project(ng-click='leave()', href='') +a.leave-project(ng-click="leave()", href="") span.icon.icon-delete - | {{"TEAM.ACTION_LEAVE_PROJECT" | translate}} + | {{ 'TEAM.ACTION_LEAVE_PROJECT' | translate }} diff --git a/app/partials/team/team-filter.jade b/app/partials/team/team-filter.jade index 26ae1828..d23c8644 100644 --- a/app/partials/team/team-filter.jade +++ b/app/partials/team/team-filter.jade @@ -1,10 +1,10 @@ ul li - a(ng-class='{active: !filtersRole.id}', ng-click='ctrl.setRole()', href='') + a(ng-class="{active: !filtersRole.id}", ng-click="ctrl.setRole()", href="") span.title(translate="TEAM.SECTION_FILTER_ALL") span.icon.icon-arrow-right - li(ng-repeat='role in roles') - a(ng-class='{active: role.id == filtersRole.id}', ng-click='ctrl.setRole(role)', href='') - span.title(tg-bo-bind='role.name') - span.icon.icon-arrow-right + li(ng-repeat="role in roles") + a(ng-class="{active: role.id == filtersRole.id}", ng-click="ctrl.setRole(role)", href="") + span.title(tg-bo-bind="role.name") + span.icon.icon-arrow-right diff --git a/app/partials/team/team-member-current-user.jade b/app/partials/team/team-member-current-user.jade index d25c2a16..698c2f7f 100644 --- a/app/partials/team/team-member-current-user.jade +++ b/app/partials/team/team-member-current-user.jade @@ -1,13 +1,17 @@ .row .username figure.avatar - img(tg-bo-src='currentUser.photo', tg-bo-alt='currentUser.full_name') + img(tg-bo-src="currentUser.photo", tg-bo-alt="currentUser.full_name") - figcaption - span.name(tg-bo-bind='currentUser.full_name') + figcaption + span.name(tg-bo-bind="currentUser.full_name") - span.position(tg-bo-bind='currentUser.role_name') + span.position(tg-bo-bind="currentUser.role_name") - div(tg-leave-project='', projectid='{{projectId}}') + div(tg-leave-project="", projectid="{{projectId}}") - .member-stats(tg-team-member-stats, stats="stats", user="currentUser.user", issuesEnabled="issuesEnabled", tasksenabled="tasksEnabled", wikienabled="wikiEnabled") + .member-stats(tg-team-member-stats, stats="stats", + user="currentUser.user", + issuesEnabled="issuesEnabled", + tasksenabled="tasksEnabled", + wikienabled="wikiEnabled") diff --git a/app/partials/team/team-member-stats.jade b/app/partials/team/team-member-stats.jade index e611ef0c..c271ffe0 100644 --- a/app/partials/team/team-member-stats.jade +++ b/app/partials/team/team-member-stats.jade @@ -1,17 +1,22 @@ -.attribute(ng-if='issuesEnabled') - span.icon.icon-briefcase(ng-style="{'opacity': stats.closed_bugs[userId]}", ng-class="{'top': stats.closed_bugs[userId] == 1}") +.attribute(ng-if="issuesEnabled") + span.icon.icon-briefcase(ng-style="{'opacity': stats.closed_bugs[userId]}", + ng-class="{'top': stats.closed_bugs[userId] == 1}") -.attribute(ng-if='tasksEnabled') - span.icon.icon-iocaine(ng-style="{'opacity': stats.iocaine_tasks[userId]}", ng-class="{'top': stats.iocaine_tasks[userId] == 1}") +.attribute(ng-if="tasksEnabled") + span.icon.icon-iocaine(ng-style="{'opacity': stats.iocaine_tasks[userId]}", + ng-class="{'top': stats.iocaine_tasks[userId] == 1}") -.attribute(ng-if='wikiEnabled') - span.icon.icon-writer(ng-style="{'opacity': stats.wiki_changes[userId]}", ng-class="{'top': stats.wiki_changes[userId] == 1}") +.attribute(ng-if="wikiEnabled") + span.icon.icon-writer(ng-style="{'opacity': stats.wiki_changes[userId]}", + ng-class="{'top': stats.wiki_changes[userId] == 1}") -.attribute(ng-if='issuesEnabled') - span.icon.icon-bug(ng-style="{'opacity': stats.created_bugs[userId]}", ng-class="{'top': stats.created_bugs[userId] == 1}") +.attribute(ng-if="issuesEnabled") + span.icon.icon-bug(ng-style="{'opacity': stats.created_bugs[userId]}", + ng-class="{'top': stats.created_bugs[userId] == 1}") -.attribute(ng-if='tasksEnabled') - span.icon.icon-tasks(ng-style="{'opacity': stats.closed_tasks[userId]}", ng-class="{'top': stats.closed_tasks[userId] == 1}") +.attribute(ng-if="tasksEnabled") + span.icon.icon-tasks(ng-style="{'opacity': stats.closed_tasks[userId]}", + ng-class="{'top': stats.closed_tasks[userId] == 1}") .attribute - span.points(ng-bind='stats.totals[userId]') + span.points(ng-bind="stats.totals[userId]") diff --git a/app/partials/team/team-members.jade b/app/partials/team/team-members.jade index ed77d85d..7cc07391 100644 --- a/app/partials/team/team-members.jade +++ b/app/partials/team/team-members.jade @@ -1,11 +1,15 @@ -.row.member(ng-repeat='user in memberships | filter:filtersQ | membersRoleFilter:filtersRole') +.row.member(ng-repeat="user in memberships | membersFilter:filtersQ:filtersRole") .username figure.avatar - img(tg-bo-src='user.photo', tg-bo-alt='user.full_name') + img(tg-bo-src="user.photo", tg-bo-alt="user.full_name") - figcaption - span.name(tg-bo-bind='user.full_name') + figcaption + span.name(tg-bo-bind="user.full_name") - span.position(tg-bo-bind='user.role_name') + span.position(tg-bo-bind="user.role_name") - .member-stats(tg-team-member-stats, stats="stats", user="user.user", issuesEnabled="issuesEnabled", tasksenabled="tasksEnabled", wikienabled="wikiEnabled") + .member-stats(tg-team-member-stats, stats="stats", + user="user.user", + issuesEnabled="issuesEnabled", + tasksenabled="tasksEnabled", + wikienabled="wikiEnabled") From efa0ee8e25982bd48f69dd8ca32962cea77dd524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 27 Apr 2015 21:05:19 +0200 Subject: [PATCH 093/194] [i18n] Fix admin > permissions page --- app/coffee/modules/admin/roles.coffee | 114 +++++++++++++++----------- app/locales/locale-en.json | 43 +++++++++- app/locales/locale-es.json | 43 +++++++++- 3 files changed, 152 insertions(+), 48 deletions(-) diff --git a/app/coffee/modules/admin/roles.coffee b/app/coffee/modules/admin/roles.coffee index 53bf9ca7..2e702f04 100644 --- a/app/coffee/modules/admin/roles.coffee +++ b/app/coffee/modules/admin/roles.coffee @@ -48,7 +48,8 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil "$translate" ] - constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, @appTitle, @translate) -> + constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, @appTitle, + @translate) -> bindMethods(@) @scope.sectionName = "ADMIN.MENU.PERMISSIONS" @@ -82,7 +83,7 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil return role public_permission = { - "name": "External User", + "name": @translate.instant("ADMIN.ROLES.EXTERNAL_USER"), "permissions": @scope.project.public_permissions, "external_user": true } @@ -114,8 +115,6 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil @scope.$broadcast("role:changed", @scope.role) delete: -> - subtitle = @scope.role.name - choices = {} for role in @scope.roles if role.id != @scope.role.id @@ -124,15 +123,20 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil if _.keys(choices).length == 0 return @confirm.error(@translate.instant("ADMIN.ROLES.ERROR_DELETE_ALL")) - return @confirm.askChoice(@translate.instant("ADMIN.ROLES.TITLE_DELETE_ROLE"), subtitle, choices, @translate.instant("ADMIN.ROLES.REPLACEMENT_ROLE"), @translate.instant("ADMIN.ROLES.WARNING_DELETE_ROLE")).then (response) => - promise = @repo.remove(@scope.role, {moveTo: response.selected}) - promise.then => + title = @translate.instant("ADMIN.ROLES.TITLE_DELETE_ROLE") + subtitle = @scope.role.name + replacement = @translate.instant("ADMIN.ROLES.REPLACEMENT_ROLE") + warning = @translate.instant("ADMIN.ROLES.WARNING_DELETE_ROLE") + return @confirm.askChoice(title, subtitle, choices, replacement, warning).then (response) => + onSuccess = (response)=> @.loadProject() - @.loadRoles().finally -> + @.loadRoles().finally => response.finish() - promise.then null, => + onError = => @confirm.notify('error') + return @repo.remove(@scope.role, {moveTo: response.selected}).then onSuccess, onError + setComputable: debounce 2000, -> onSuccess = => @confirm.notify("success") @@ -254,14 +258,14 @@ module.directive("tgNewRole", ["$tgRepo", "$tgConfirm", NewRoleDirective]) # Use category-config.scss styles -RolePermissionsDirective = ($rootscope, $repo, $confirm) -> +RolePermissionsDirective = ($rootscope, $repo, $confirm, $compile) -> resumeTemplate = _.template(""" -
<%- category.name %>
+
<%- category.activePermissions %>/<%- category.permissions.length %>
<% _.each(category.permissions, function(permission) { %>
+ title="{{ '<%- permission.name %>' | translate }}">
<% }) %>
@@ -275,12 +279,14 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) ->
<% _.each(category.permissions, function(permission) { %>
- <%- permission.description %> +
- disabled="disabled"<% } %> <% if(permission.active) { %>checked="checked"<% } %>/> + disabled="disabled" <% } %> + <% if(permission.active) { %> checked="checked" <% } %>/>
- Yes - No + +
<% }) %> @@ -323,47 +329,62 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) -> categories = [] milestonePermissions = [ - { key: "view_milestones", description: "View sprints" } - { key: "add_milestone", description: "Add sprint" } - { key: "modify_milestone", description: "Modify sprint" } - { key: "delete_milestone", description: "Delete sprint" } + { key: "view_milestones", name: "COMMON.PERMISIONS_CATEGORIES.SPRINTS.VIEW_SPRINTS"} + { key: "add_milestone", name: "COMMON.PERMISIONS_CATEGORIES.SPRINTS.ADD_SPRINTS"} + { key: "modify_milestone", name: "COMMON.PERMISIONS_CATEGORIES.SPRINTS.MODIFY_SPRINTS"} + { key: "delete_milestone", name: "COMMON.PERMISIONS_CATEGORIES.SPRINTS.DELETE_SPRINTS"} ] - categories.push({ name: "Sprints", permissions: setActivePermissions(milestonePermissions) }) + categories.push({ + name: "COMMON.PERMISIONS_CATEGORIES.SPRINTS.NAME", + permissions: setActivePermissions(milestonePermissions) + }) userStoryPermissions = [ - { key: "view_us", description: "View user story" } - { key: "add_us", description: "Add user story" } - { key: "modify_us", description: "Modify user story" } - { key: "delete_us", description: "Delete user story" } + { key: "view_us", name: "COMMON.PERMISIONS_CATEGORIES.USER_STORIES.VIEW_USER_STORIES"} + { key: "add_us", name: "COMMON.PERMISIONS_CATEGORIES.USER_STORIES.ADD_USER_STORIES"} + { key: "modify_us", name: "COMMON.PERMISIONS_CATEGORIES.USER_STORIES.MODIFY_USER_STORIES"} + { key: "delete_us", name: "COMMON.PERMISIONS_CATEGORIES.USER_STORIES.DELETE_USER_STORIES"} ] - categories.push({ name: "User Stories", permissions: setActivePermissions(userStoryPermissions) }) + categories.push({ + name: "COMMON.PERMISIONS_CATEGORIES.USER_STORIES.NAME", + permissions: setActivePermissions(userStoryPermissions) + }) taskPermissions = [ - { key: "view_tasks", description: "View tasks" } - { key: "add_task", description: "Add task" } - { key: "modify_task", description: "Modify task" } - { key: "delete_task", description: "Delete task" } + { key: "view_tasks", name: "COMMON.PERMISIONS_CATEGORIES.TASKS.VIEW_TASKS"} + { key: "add_task", name: "COMMON.PERMISIONS_CATEGORIES.TASKS.ADD_TASKS"} + { key: "modify_task", name: "COMMON.PERMISIONS_CATEGORIES.TASKS.MODIFY_TASKS"} + { key: "delete_task", name: "COMMON.PERMISIONS_CATEGORIES.TASKS.DELETE_TASKS"} ] - categories.push({ name: "Tasks", permissions: setActivePermissions(taskPermissions) }) + categories.push({ + name: "COMMON.PERMISIONS_CATEGORIES.TASKS.NAME" , + permissions: setActivePermissions(taskPermissions) + }) issuePermissions = [ - { key: "view_issues", description: "View issues" } - { key: "add_issue", description: "Add issue" } - { key: "modify_issue", description: "Modify issue" } - { key: "delete_issue", description: "Delete issue" } + { key: "view_issues", name: "COMMON.PERMISIONS_CATEGORIES.ISSUES.VIEW_ISSUES"} + { key: "add_issue", name: "COMMON.PERMISIONS_CATEGORIES.ISSUES.ADD_ISSUES"} + { key: "modify_issue", name: "COMMON.PERMISIONS_CATEGORIES.ISSUES.MODIFY_ISSUES"} + { key: "delete_issue", name: "COMMON.PERMISIONS_CATEGORIES.ISSUES.DELETE_ISSUES"} ] - categories.push({ name: "Issues", permissions: setActivePermissions(issuePermissions) }) + categories.push({ + name: "COMMON.PERMISIONS_CATEGORIES.ISSUES.NAME", + permissions: setActivePermissions(issuePermissions) + }) wikiPermissions = [ - { key: "view_wiki_pages", description: "View wiki pages" } - { key: "add_wiki_page", description: "Add wiki page" } - { key: "modify_wiki_page", description: "Modify wiki page" } - { key: "delete_wiki_page", description: "Delete wiki page" } - { key: "view_wiki_links", description: "View wiki links" } - { key: "add_wiki_link", description: "Add wiki link" } - { key: "delete_wiki_link", description: "Delete wiki link" } + { key: "view_wiki_pages", name: "COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_PAGES"} + { key: "add_wiki_page", name: "COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_PAGES"} + { key: "modify_wiki_page", name: "COMMON.PERMISIONS_CATEGORIES.WIKI.MODIFY_WIKI_PAGES"} + { key: "delete_wiki_page", name: "COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_PAGES"} + { key: "view_wiki_links", name: "COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_LINKS"} + { key: "add_wiki_link", name: "COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_LINKS"} + { key: "delete_wiki_link", name: "COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_LINKS"} ] - categories.push({ name: "Wiki", permissions: setActivePermissions(wikiPermissions) }) + categories.push({ + name: "COMMON.PERMISIONS_CATEGORIES.WIKI.NAME", + permissions: setActivePermissions(wikiPermissions) + }) return setActivePermissionsPerCategory(categories) @@ -374,7 +395,7 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) -> html = categoryTemplate({category: category, index: index}) html = angular.element(html) renderResume(html, category) - return html + return $compile(html)($scope) renderPermissions = () -> $el.off() @@ -435,4 +456,5 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) -> return {link:link} -module.directive("tgRolePermissions", ["$rootScope", "$tgRepo", "$tgConfirm", RolePermissionsDirective]) +module.directive("tgRolePermissions", ["$rootScope", "$tgRepo", "$tgConfirm", "$compile", + RolePermissionsDirective]) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index c028ffab..d29b8ca9 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -121,6 +121,46 @@ "PREVIEW_BUTTON": "Preview", "EDIT_BUTTON": "Edit", "MARKDOWN_HELP": "Markdown syntax help" + }, + "PERMISIONS_CATEGORIES": { + "SPRINTS": { + "NAME": "Sprints", + "VIEW_SPRINTS": "View sprints", + "ADD_SPRINTS": "Add sprints", + "MODIFY_SPRINTS": "Modify sprints", + "DELETE_SPRINTS": "Delete sprints" + }, + "USER_STORIES": { + "NAME": "User Stories", + "VIEW_USER_STORIES": "View user stories", + "ADD_USER_STORIES": "Add user stories", + "MODIFY_USER_STORIES": "Modify user stories", + "DELETE_USER_STORIES": "Delete user stories" + }, + "TASKS": { + "NAME": "Tasks", + "VIEW_TASKS": "View tasks", + "ADD_TASKS": "Add tasks", + "MODIFY_TASKS": "Modify tasks", + "DELETE_TASKS": "Delete tasks" + }, + "ISSUES": { + "NAME": "Issues", + "VIEW_ISSUES": "View issues", + "ADD_ISSUES": "Add issues", + "MODIFY_ISSUES": "Modify issues", + "DELETE_ISSUES": "Delete issues" + }, + "WIKI": { + "NAME": "Wiki", + "VIEW_WIKI_PAGES": "View wiki pages", + "ADD_WIKI_PAGES": "Add wiki pages", + "MODIFY_WIKI_PAGES": "Modify wiki pages", + "DELETE_WIKI_PAGES": "Delete wiki pages", + "VIEW_WIKI_LINKS": "View wiki links", + "ADD_WIKI_LINKS": "Add wiki links", + "DELETE_WIKI_LINKS": "Delete wiki links" + } } }, "AUTH": { @@ -267,7 +307,8 @@ "TITLE_DELETE_ROLE": "Delete Role", "REPLACEMENT_ROLE": "All the users with this role will be moved to", "WARNING_DELETE_ROLE": "Be careful, all role estimations will be removed", - "ERROR_DELETE_ALL": "You can't delete all values" + "ERROR_DELETE_ALL": "You can't delete all values", + "EXTERNAL_USER": "External user" }, "THIRD_PARTIES": { "SECRET_KEY": "Secret key", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 9ee1b99c..b00da866 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -119,6 +119,46 @@ "PREVIEW_BUTTON": "Previsualizar", "EDIT_BUTTON": "Editar", "MARKDOWN_HELP": "Ayuda de sintaxis Markdown" + }, + "PERMISIONS_CATEGORIES": { + "SPRINTS": { + "NAME": "Sprints", + "VIEW_SPRINTS": "Ver sprints", + "ADD_SPRINTS": "Crear sprints", + "MODIFY_SPRINTS": "Editar sprints", + "DELETE_SPRINTS": "Borrar sprints" + }, + "USER_STORIES": { + "NAME": "Historias de Usuario", + "VIEW_USER_STORIES": "Ver historias de usuario", + "ADD_USER_STORIES": "Crear historias de usuario", + "MODIFY_USER_STORIES": "Editar historias de usuario", + "DELETE_USER_STORIES": "Borrar historias de usuario" + }, + "TASKS": { + "NAME": "Tareas", + "VIEW_TASKS": "Ver tareas", + "ADD_TASKS": "Crear tareas", + "MODIFY_TASKS": "Editar tareas", + "DELETE_TASKS": "Borrar tareas" + }, + "ISSUES": { + "NAME": "Peticiones", + "VIEW_ISSUES": "Ver peticiones", + "ADD_ISSUES": "Crear peticiones", + "MODIFY_ISSUES": "Editar peticiones", + "DELETE_ISSUES": "Borrar peticiones" + }, + "WIKI": { + "NAME": "Wiki", + "VIEW_WIKI_PAGES": "Ver páginas", + "ADD_WIKI_PAGES": "Crear páginas", + "MODIFY_WIKI_PAGES": "Editar páginas", + "DELETE_WIKI_PAGES": "Borrar páginas", + "VIEW_WIKI_LINKS": "Ver enlaces", + "ADD_WIKI_LINKS": "Crear enlaces", + "DELETE_WIKI_LINKS": "Borrar enlaces" + } } }, "AUTH": { @@ -265,7 +305,8 @@ "TITLE_DELETE_ROLE": "Borrar Rol", "REPLACEMENT_ROLE": "Todos los usuarios con este rol serán movidos a", "WARNING_DELETE_ROLE": "Cuidado, todas las estimaciones asociadas a este rol se perderán", - "ERROR_DELETE_ALL": "Usted no puede eliminar todos los valores" + "ERROR_DELETE_ALL": "Usted no puede eliminar todos los valores", + "EXTERNAL_USER": "Usuario externo" }, "THIRD_PARTIES": { "SECRET_KEY": "Secret key", From 4fb5ae332b1431109f239548da7da44cc69d50d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 28 Apr 2015 13:46:33 +0200 Subject: [PATCH 094/194] [i18n] Fix backlog and taskboard charts --- app/coffee/modules/backlog/main.coffee | 34 +++++++++------ app/coffee/modules/taskboard/charts.coffee | 12 ++++-- app/locales/locale-en.json | 6 ++- app/locales/locale-es.json | 16 ++++--- app/locales/locale-fr.json | 49 +++++++++++++++++++++- app/partials/backlog/backlog.jade | 24 ++++++++--- 6 files changed, 110 insertions(+), 31 deletions(-) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index aa337b5f..9ce9d986 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -871,11 +871,12 @@ UsPointsDirective = ($tgEstimationsService, $repo, $tgTemplate) -> module.directive("tgBacklogUsPoints", ["$tgEstimationsService", "$tgRepo", "$tgTemplate", UsPointsDirective]) + ############################################################################# ## Burndown graph directive ############################################################################# -tgBacklogGraphDirective = ($translate) -> +BurndownBacklogGraphDirective = ($translate) -> redrawChart = (element, dataToDraw) -> width = element.width() element.height(width/6) @@ -931,13 +932,20 @@ tgBacklogGraphDirective = ($translate) -> } xaxis: { ticks: dataToDraw.milestones.length - axisLabel: "Sprints" + axisLabel: $translate.instant("BACKLOG.CHART.XAXIS_LABEL"), axisLabelUseCanvas: true - axisLabelFontSizePixels: 14 + axisLabelFontSizePixels: 12 axisLabelFontFamily: "Verdana, Arial, Helvetica, Tahoma, sans-serif" - axisLabelPadding: 15 + axisLabelPadding: 5 tickFormatter: (val, axis) -> "" } + yaxis: { + axisLabel: $translate.instant("BACKLOG.CHART.YAXIS_LABEL"), + axisLabelUseCanvas: true + axisLabelFontSizePixels: 12 + axisLabelFontFamily: "Verdana, Arial, Helvetica, Tahoma, sans-serif" + axisLabelPadding: 5 + } series: { shadowSize: 0 lines: { @@ -956,16 +964,17 @@ tgBacklogGraphDirective = ($translate) -> tooltipOpts: { content: (label, xval, yval, flotItem) -> if flotItem.seriesIndex == 1 - return $translate.instant("BACKLOG.CHART.OPTIMAL", {xval: xval, yval: yval}) - + ctx = {xval: xval, yval: yval} + return $translate.instant("BACKLOG.CHART.OPTIMAL", ctx) else if flotItem.seriesIndex == 2 - return $translate.instant("BACKLOG.CHART.REAL", {xval: xval, yval: yval}) - + ctx = {xval: xval, yval: yval} + return $translate.instant("BACKLOG.CHART.REAL", ctx) else if flotItem.seriesIndex == 3 - return $translate.instant("BACKLOG.CHART.INCREMENT_TEAM", {xval: xval, yval: Math.abs(yval)}) - + ctx = {xval: xval, yval: Math.abs(yval)} + return $translate.instant("BACKLOG.CHART.INCREMENT_TEAM", ctx) else - return $translate.instant("BACKLOG.CHART.INCREMENT_CLIENT", {xval: xval, yval: Math.abs(yval)}) + ctx = {xval: xval, yval: Math.abs(yval)} + return $translate.instant("BACKLOG.CHART.INCREMENT_CLIENT", ctx) } } @@ -987,8 +996,7 @@ tgBacklogGraphDirective = ($translate) -> return {link: link} - -module.directive("tgGmBacklogGraph", ["$translate", tgBacklogGraphDirective]) +module.directive("tgBurndownBacklogGraph", ["$translate", BurndownBacklogGraphDirective]) ############################################################################# diff --git a/app/coffee/modules/taskboard/charts.coffee b/app/coffee/modules/taskboard/charts.coffee index 20098ab4..cf0c2ee1 100644 --- a/app/coffee/modules/taskboard/charts.coffee +++ b/app/coffee/modules/taskboard/charts.coffee @@ -34,7 +34,7 @@ module = angular.module("taigaTaskboard") ## Sprint burndown graph directive ############################################################################# -SprintGraphDirective = -> +SprintGraphDirective = ($translate)-> redrawChart = (element, dataToDraw) -> width = element.width() element.height(240) @@ -64,13 +64,18 @@ SprintGraphDirective = -> max: _.last(days) mode: "time" daysNames: days - axisLabel: 'Day' + axisLabel: $translate.instant("TASKBOARD.CHARTS.XAXIS_LABEL") axisLabelUseCanvas: true axisLabelFontSizePixels: 12 axisLabelFontFamily: 'Verdana, Arial, Helvetica, Tahoma, sans-serif' axisLabelPadding: 5 yaxis: min: 0 + axisLabel: $translate.instant("TASKBOARD.CHARTS.YAXIS_LABEL") + axisLabelUseCanvas: true + axisLabelFontSizePixels: 12 + axisLabelFontFamily: 'Verdana, Arial, Helvetica, Tahoma, sans-serif' + axisLabelPadding: 5 series: shadowSize: 0 lines: @@ -127,5 +132,4 @@ SprintGraphDirective = -> return {link: link} - -module.directive("tgSprintGraph", SprintGraphDirective) +module.directive("tgSprintGraph", ["$translate", SprintGraphDirective]) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index d29b8ca9..65d3ed64 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -606,6 +606,8 @@ "SORTABLE_FILTER_ERROR": "You can't drop on backlog when filters are open", "DOOMLINE": "Project Scope [Doomline]", "CHART": { + "XAXIS_LABEL": "Sprints", + "YAXIS_LABEL": "Points", "OPTIMAL": "Optimal pending points for sprint {{xval}} should be {{yval}}", "REAL": "Real pending points for sprint {{xval}} is {{yval}}", "INCREMENT_TEAM": "Incremented points by team requirements for sprint {{xval}} is {{yval}}", @@ -676,7 +678,9 @@ "ROW_UNASSIGED_TASKS_TITLE": "Unassigned tasks" }, "CHARTS": { - "OPTIMAL": "Optimal pending points for day #{formattedDate} should be {{roundedValue}}", + "XAXIS_LABEL": "Days", + "YAXIS_LABEL": "Points", + "OPTIMAL": "Optimal pending points for day {{formattedDate}} should be {{roundedValue}}", "REAL": "Real pending points for day {{formattedDate}} is {{roundedValue}}" } }, diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index b00da866..571f804b 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -603,10 +603,12 @@ "SORTABLE_FILTER_ERROR": "No puedes arrastrar historias en el backlog cuando los filtros están en uso", "DOOMLINE": "Alcance del proyecto (línea de la fatalidad :-P)", "CHART": { - "OPTIMAL": "Los puntos pendientes optimos para el sprint {{xval}} deben ser {{yval}}", - "REAL": "Los puntos pendientes reales para el sprint {{xval}} son {{yval}}", - "INCREMENT_TEAM": "Puntos incrementados por requerimientos del equipo para el sprint {{xval}} es {{yval}}", - "INCREMENT_CLIENT": "Puntos incrementados por requerimientos del cliente para el sprint {{xval}} es {{yval}}" + "XAXIS_LABEL": "Sprints", + "YAXIS_LABEL": "Puntos", + "OPTIMAL": "El número de puntos óptimos pendientes para el sprint {{xval}} debería ser de {{yval}}", + "REAL": "El número real de puntos pendientes para el sprint {{xval}} es de {{yval}}", + "INCREMENT_TEAM": "El número de puntos incrementados por requerimientos del equipo para el sprint {{xval}} es de {{yval}}", + "INCREMENT_CLIENT": "El número de puntos incrementados por requerimientos del cliente para el sprint {{xval}} es de {{yval}}" }, "TAGS": { "SHOW": "Mostrar etiquetas", @@ -673,8 +675,10 @@ "ROW_UNASSIGED_TASKS_TITLE": "Tareas no asignadas" }, "CHARTS": { - "OPTIMAL": "Los puntos pendientes óptimos para el día #{formattedDate} deben ser {{roundedValue}}", - "REAL": "Los puntos reales pendientes para el día {{formattedDate}} son {{roundedValue}}" + "XAXIS_LABEL": "Días", + "YAXIS_LABEL": "Puntos", + "OPTIMAL": "El número de puntos óptimos pendientes para el día {{formattedDate}} debería ser de {{roundedValue}}", + "REAL": "El número de puntos pendientes para el día {{formattedDate}} es de {{roundedValue}}" } }, "TASK": { diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index c365966e..1c761f7c 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -119,6 +119,46 @@ "PREVIEW_BUTTON": "Prévisualiser", "EDIT_BUTTON": "Éditer", "MARKDOWN_HELP": "Aide sur la syntaxe Markdown" + }, + "PERMISIONS_CATEGORIES": { + "SPRINTS": { + "NAME": "Sprints", + "VIEW_SPRINTS": "View sprints", + "ADD_SPRINTS": "Add sprints", + "MODIFY_SPRINTS": "Modify sprints", + "DELETE_SPRINTS": "Delete sprints" + }, + "USER_STORIES": { + "NAME": "User Stories", + "VIEW_USER_STORIES": "View user stories", + "ADD_USER_STORIES": "Add user stories", + "MODIFY_USER_STORIES": "Modify user stories", + "DELETE_USER_STORIES": "Delete user stories" + }, + "TASKS": { + "NAME": "Tasks", + "VIEW_TASKS": "View tasks", + "ADD_TASKS": "Add tasks", + "MODIFY_TASKS": "Modify tasks", + "DELETE_TASKS": "Delete tasks" + }, + "ISSUES": { + "NAME": "Issues", + "VIEW_ISSUES": "View issues", + "ADD_ISSUES": "Add issues", + "MODIFY_ISSUES": "Modify issues", + "DELETE_ISSUES": "Delete issues" + }, + "WIKI": { + "NAME": "Wiki", + "VIEW_WIKI_PAGES": "View wiki pages", + "ADD_WIKI_PAGES": "Add wiki pages", + "MODIFY_WIKI_PAGES": "Modify wiki pages", + "DELETE_WIKI_PAGES": "Delete wiki pages", + "VIEW_WIKI_LINKS": "View wiki links", + "ADD_WIKI_LINKS": "Add wiki links", + "DELETE_WIKI_LINKS": "Delete wiki links" + } } }, "AUTH": { @@ -265,7 +305,8 @@ "TITLE_DELETE_ROLE": "Supprimer des rôles", "REPLACEMENT_ROLE": "Tous les utilisateurs avec ce rôle seront déplacés dans", "WARNING_DELETE_ROLE": "Attention, toutes les estimations de role seront supprimées", - "ERROR_DELETE_ALL": "Vous ne pouvez pas supprimer toutes les valeurs" + "ERROR_DELETE_ALL": "Vous ne pouvez pas supprimer toutes les valeurs", + "EXTERNAL_USER": " " }, "THIRD_PARTIES": { "SECRET_KEY": "Clé secrète", @@ -562,6 +603,8 @@ "SORTABLE_FILTER_ERROR": "Vous ne pouvez pas glisser-déposer quand les filtres sont ouverts", "DOOMLINE": "Périmètre projet", "CHART": { + "XAXIS_LABEL": "Sprints", + "YAXIS_LABEL": "Points", "OPTIMAL": "Le nombre optimal de points en attente pour le sprint {{xval}} devrait être {{yval}}", "REAL": "Le nombre réel de points pour le sprint {{xval}} est {{yval}}", "INCREMENT_TEAM": "Le nombre de points ajoutés par les exigences de l'équipe pour le sprint {{xval}} est {{yval}}", @@ -632,7 +675,9 @@ "ROW_UNASSIGED_TASKS_TITLE": "Tâches non assignées" }, "CHARTS": { - "OPTIMAL": "Le nombre optimal de points pour le jour #{formattedDate} devrait être {{roundedValue}}", + "XAXIS_LABEL": "Journées", + "YAXIS_LABEL": "Points", + "OPTIMAL": "Le nombre optimal de points pour le jour {{formattedDate}} devrait être {{roundedValue}}", "REAL": "Le nombre réel de points pour le jour {{formattedDate}} est {{roundedValue}}" } }, diff --git a/app/partials/backlog/backlog.jade b/app/partials/backlog/backlog.jade index 4dfe864a..fd0d9273 100644 --- a/app/partials/backlog/backlog.jade +++ b/app/partials/backlog/backlog.jade @@ -8,27 +8,41 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl", section.main.backlog include ../includes/components/mainTitle include ../includes/components/summary + div.graphics-container.burndown-container - div.burndown(tg-gm-backlog-graph) + div.burndown(tg-burndown-backlog-graph) include ../includes/modules/burndown + div.backlog-menu div.backlog-table-options - a.trans-button.move-to-current-sprint(href="", title="{{'BACKLOG.MOVE_US_TO_CURRENT_SPRINT' | translate}}", id="move-to-current-sprint") + a.trans-button.move-to-current-sprint(href="", + title="{{'BACKLOG.MOVE_US_TO_CURRENT_SPRINT' | translate}}", + id="move-to-current-sprint") span.icon.icon-move span.text(translate="BACKLOG.MOVE_US_TO_CURRENT_SPRINT") - a.trans-button(href="", title="{{'BACKLOG.SHOW_FILTERS' | translate}}", id="show-filters-button") + a.trans-button(href="", + title="{{'BACKLOG.SHOW_FILTERS' | translate}}", + id="show-filters-button") span.icon.icon-filter span.text(translate="BACKLOG.SHOW_FILTERS") Show Filters - a.trans-button(href="", title="{{'BACKLOG.SHOW_TAGS' | translate}}", id="show-tags") + a.trans-button(href="", + title="{{'BACKLOG.SHOW_TAGS' | translate}}", + id="show-tags") span.icon.icon-tag span.text(translate="BACKLOG.SHOW_TAGS") include ../includes/components/addnewus + section.backlog-table(ng-class="{'hidden': !visibleUserstories.length}") include ../includes/modules/backlog-table + div.empty.empty-backlog(ng-class="{'hidden': visibleUserstories.length}", tg-backlog-empty-sortable) span.icon.icon-backlog span.title(translate="BACKLOG.EMPTY") - a(href="", title="{{'BACKLOG.CREATE_NEW_US' | translate}}", ng-click="ctrl.addNewUs('standard')", tg-check-permission="add_us", translate="BACKLOG.CREATE_NEW_US_EMPTY_HELP") + a(href="", title="{{'BACKLOG.CREATE_NEW_US' | translate}}", + ng-click="ctrl.addNewUs('standard')", + tg-check-permission="add_us", + translate="BACKLOG.CREATE_NEW_US_EMPTY_HELP") + sidebar.menu-secondary.sidebar include ../includes/modules/sprints From c6d24ba4ffee489fb08e466d76e74ce49fdea1ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 28 Apr 2015 20:59:46 +0200 Subject: [PATCH 095/194] [i18n] Fix activity tab and add pluralization ability to $translate service --- app/coffee/app.coffee | 1 + app/coffee/modules/common/history.coffee | 88 ++++++++++++------- app/locales/locale-en.json | 42 ++++++++- app/locales/locale-es.json | 46 +++++++++- app/locales/locale-fr.json | 48 ++++++++-- .../common/history/history-activity.jade | 3 +- .../history/history-change-attachment.jade | 6 +- .../history/history-deleted-comment.jade | 9 +- gulpfile.js | 5 +- 9 files changed, 197 insertions(+), 51 deletions(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index f10b1de6..008382a4 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -236,6 +236,7 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven prefix: "/locales/locale-", suffix: ".json" }) + .addInterpolation('$translateMessageFormatInterpolation') .preferredLanguage(window.taigaConfig.defaultLanguage || "en") if not window.taigaConfig.debugInfo diff --git a/app/coffee/modules/common/history.coffee b/app/coffee/modules/common/history.coffee index 2d7ddced..ef2dd1a7 100644 --- a/app/coffee/modules/common/history.coffee +++ b/app/coffee/modules/common/history.coffee @@ -96,25 +96,40 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c # Helpers getHumanizedFieldName = (field) -> - humanizedFieldNames = {} - - # US - humanizedFieldNames.assigned_to = $translate.instant("COMMON.FIELDS.ASSIGNED_TO").toLowerCase() - humanizedFieldNames.is_closed = $translate.instant("IS_CLOSED").toLowerCase() - humanizedFieldNames.finish_date = $translate.instant("US.FIELDS.FINISH_DATE").toLowerCase() - humanizedFieldNames.client_repquirement = $translate.instant("US.FIELDS.CLIENT_REQUIREMENT").toLowerCase() - humanizedFieldNames.team_requirement = $translate.instant("US.FIELDS.TEAM_REQUIREMENT").toLowerCase() - - # Task - humanizedFieldNames.milestone = $translate.instant("TASK.FIELDS.MILESTONE").toLowerCase() - humanizedFieldNames.user_story = $translate.instant("TASK.FIELDS.USER_STORY").toLowerCase() - humanizedFieldNames.is_iocaine = $translate.instant("TASK.FIELDS.IS_IOCAINE").toLowerCase() - - # Attachment - humanizedFieldNames.is_deprecated = $translate.instant("TASK.FIELDS.IS_IOCAINE").toLowerCase() - - humanizedFieldNames.blocked_note = $translate.instant("TASK.FIELDS.IS_IOCAINE").toLowerCase() - humanizedFieldNames.is_blocked = $translate.instant("TASK.FIELDS.IS_BLOCKED").toLowerCase() + humanizedFieldNames = { + subject : $translate.instant("ACTIVITY.FIELDS.SUBJECT") + name: $translate.instant("ACTIVITY.FIELDS.NAME") + description : $translate.instant("ACTIVITY.FIELDS.DESCRIPTION") + content: $translate.instant("ACTIVITY.FIELDS.CONTENT") + status: $translate.instant("ACTIVITY.FIELDS.STATUS") + is_closed : $translate.instant("ACTIVITY.FIELDS.IS_CLOSED") + finish_date : $translate.instant("ACTIVITY.FIELDS.FINISH_DATE") + type: $translate.instant("ACTIVITY.FIELDS.TYPE") + priority: $translate.instant("ACTIVITY.FIELDS.PRIORITY") + severity: $translate.instant("ACTIVITY.FIELDS.SEVERITY") + assigned_to : $translate.instant("ACTIVITY.FIELDS.ASSIGNED_TO") + watchers : $translate.instant("ACTIVITY.FIELDS.WATCHERS") + milestone : $translate.instant("ACTIVITY.FIELDS.MILESTONE") + user_story: $translate.instant("ACTIVITY.FIELDS.USER_STORY") + project: $translate.instant("ACTIVITY.FIELDS.PROJECT") + is_blocked: $translate.instant("ACTIVITY.FIELDS.IS_BLOCKED") + blocked_note: $translate.instant("ACTIVITY.FIELDS.BLOCKED_NOTE") + points: $translate.instant("ACTIVITY.FIELDS.POINTS") + client_requirement : $translate.instant("ACTIVITY.FIELDS.CLIENT_REQUIREMENT") + team_requirement : $translate.instant("ACTIVITY.FIELDS.TEAM_REQUIREMENT") + is_iocaine: $translate.instant("ACTIVITY.FIELDS.IS_IOCAINE") + tags: $translate.instant("ACTIVITY.FIELDS.TAGS") + attachments : $translate.instant("ACTIVITY.FIELDS.ATTACHMENTS") + is_deprecated: $translate.instant("ACTIVITY.FIELDS.IS_DEPRECATED") + blocked_note: $translate.instant("ACTIVITY.FIELDS.BLOCKED_NOTE") + is_blocked: $translate.instant("ACTIVITY.FIELDS.IS_BLOCKED") + order: $translate.instant("ACTIVITY.FIELDS.ORDER") + backlog_order: $translate.instant("ACTIVITY.FIELDS.BACKLOG_ORDER") + sprint_order: $translate.instant("ACTIVITY.FIELDS.SPRINT_ORDER") + kanban_order: $translate.instant("ACTIVITY.FIELDS.KANBAN_ORDER") + taskboard_order: $translate.instant("ACTIVITY.FIELDS.TASKBOARD_ORDER") + us_order: $translate.instant("ACTIVITY.FIELDS.US_ORDER") + } return humanizedFieldNames[field] or field @@ -133,17 +148,17 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c formatChange = (change) -> if _.isArray(change) if change.length == 0 - return "empty" + return $translate.instant("ACTIVITY.VALUES.EMPTY") return change.join(", ") if change == "" - return "empty" + return $translate.instant("ACTIVITY.VALUES.EMPTY") if not change? or change == false - return "no" + return $translate.instant("ACTIVITY.VALUES.NO") if change == true - return "yes" + return $translate.instant("ACTIVITY.VALUES.YES") return change @@ -153,20 +168,26 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c attachments = _.map value, (changes, type) -> if type == "new" return _.map changes, (change) -> - return templateChangeDiff({name: $translate.instant("ACTIVITY.NEW_ATTACHMENT"), diff: change.filename}) + return templateChangeDiff({ + name: $translate.instant("ACTIVITY.NEW_ATTACHMENT"), + diff: change.filename + }) else if type == "deleted" return _.map changes, (change) -> - return templateChangeDiff({name: $translate.instant("ACTIVITY.DELETED_ATTACHMENT"), diff: change.filename}) + return templateChangeDiff({ + name: $translate.instant("ACTIVITY.DELETED_ATTACHMENT"), + diff: change.filename + }) else return _.map changes, (change) -> - name = $tranlsate.instant("ACTIVITY.UPDATED_ATTACHMENT", {filename: change.filename}) + name = $translate.instant("ACTIVITY.UPDATED_ATTACHMENT", {filename: change.filename}) diff = _.map change.changes, (values, name) -> return { name: getHumanizedFieldName(name) from: formatChange(values[0]) to: formatChange(values[1]) - } + } return templateChangeAttachment({name: name, diff: diff}) @@ -229,8 +250,8 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c return html[0].outerHTML else if field == "assigned_to" name = getHumanizedFieldName(field) - from = formatChange(value[0] or "Unassigned") - to = formatChange(value[1] or "Unassigned") + from = formatChange(value[0] or $translate.instant("ACTIVITY.VALUES.UNASSIGNED")) + to = formatChange(value[1] or $translate.instant("ACTIVITY.VALUES.UNASSIGNED")) return templateChangeGeneric({name:name, from:from, to: to}) else name = getHumanizedFieldName(field) @@ -243,8 +264,7 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c renderChangesHelperText = (change) -> size = countChanges(change) - - return $translate.instant("ACTIVITY.SIZE_CHANGE", {size: size}) + return $translate.instant("ACTIVITY.SIZE_CHANGE", {size: size}, 'messageformat') renderComment = (comment) -> if (comment.delete_comment_date or comment.delete_comment_user?.name) @@ -253,7 +273,8 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c deleteCommentUser: comment.delete_comment_user.name deleteComment: comment.comment_html activityId: comment.id - canRestoreComment: comment.delete_comment_user.pk == $scope.user.id or $scope.project.my_permissions.indexOf("modify_project") > -1 + canRestoreComment: (comment.delete_comment_user.pk == $scope.user.id or + $scope.project.my_permissions.indexOf("modify_project") > -1) }) html = $compile(html)($scope) @@ -428,4 +449,5 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c } -module.directive("tgHistory", ["$log", "$tgLoading", "$tgQqueue", "$tgTemplate", "$tgConfirm", "$translate", "$compile", HistoryDirective]) +module.directive("tgHistory", ["$log", "$tgLoading", "$tgQqueue", "$tgTemplate", "$tgConfirm", "$translate", + "$compile", HistoryDirective]) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 65d3ed64..9bd06b4d 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -565,7 +565,7 @@ } }, "COMMENTS": { - "DELETED_INFO": "Comment deleted by {{deleteCommentUser}} on {{deleteCommentDate}}", + "DELETED_INFO": "Comment deleted by {{user}} on {{date}}", "TITLE": "Comments", "COMMENT": "Comment", "TYPE_NEW_COMMENT": "Type a new comment here", @@ -584,7 +584,45 @@ "DELETED_ATTACHMENT": "deleted attachment", "UPDATED_ATTACHMENT": "updated attachment {{filename}}", "DELETED_CUSTOM_ATTRIBUTE": "deleted custom attribute", - "SIZE_CHANGE": "Made {{size}} {size, plural, one{change} other{changes}}" + "SIZE_CHANGE": "Made {size, plural, one{one change} other{# changes}}", + "VALUES": { + "YES": "yes", + "NO": "no", + "EMPTY": "empty", + "UNASSIGNED": "unassigned" + }, + "FIELDS": { + "SUBJECT" : "subject", + "NAME": "name", + "DESCRIPTION" : "description", + "CONTENT": "content", + "STATUS": "status", + "IS_CLOSED" : "is closed", + "FINISH_DATE" : "finish date", + "TYPE": "type", + "PRIORITY": "priority", + "SEVERITY": "severity", + "ASSIGNED_TO" : "assigned to", + "WATCHERS" : "watchers", + "MILESTONE" : "sprint", + "USER_STORY": "user story", + "PROJECT": "project", + "IS_BLOCKED": "is blocked", + "BLOCKED_NOTE": "blocked note", + "POINTS": "points", + "CLIENT_REQUIREMENT" : "client requirement", + "TEAM_REQUIREMENT" : "team requirement", + "IS_IOCAINE": "is iocaine", + "TAGS": "tags", + "ATTACHMENTS" : "attachments", + "IS_DEPRECATED": "is deprecated", + "ORDER" : "order", + "BACKLOG_ORDER" : "backlog order", + "SPRINT_ORDER" : "sprint order", + "KANBAN_ORDER" : "kanban order", + "TASKBOARD_ORDER" : "taskboard order", + "US_ORDER" : "us order" + } }, "BACKLOG": { "SECTION_NAME": "Backlog", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 571f804b..9088e521 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -563,7 +563,7 @@ } }, "COMMENTS": { - "DELETED_INFO": "Comentario borrado por {{deleteCommentUser}} el {{deleteCommentDate}}", + "DELETED_INFO": "Comentario borrado por {{user}} el {{date}}", "TITLE": "Comentarios", "COMMENT": "Comentar", "TYPE_NEW_COMMENT": "Escribe un nuevo comentario aquí", @@ -576,13 +576,51 @@ "SHOW_MORE": "+ Ver entradas anteriores ({{showMore}} más)", "TITLE": "Actividad", "REMOVED": "borrado", - "ADDED": "Agregado", + "ADDED": "agregado", "US_POINTS": "Puntos de historia ({{name}})", "NEW_ATTACHMENT": "nuevo adjunto", "DELETED_ATTACHMENT": "adjunto eliminado", "UPDATED_ATTACHMENT": "Adjunto {{filename}} actualizado", "DELETED_CUSTOM_ATTRIBUTE": "eliminar atributos personalizados", - "SIZE_CHANGE": "Hechos {{size}} {size, plural, one{cambio} other{cambios}}\n" + "SIZE_CHANGE": "{size, plural, one{Un cambio} other{# cambios}} realizados\n", + "VALUES": { + "YES": "sí", + "NO": "no", + "EMPTY": "vacío", + "UNASSIGNED": "sin asignar" + }, + "FIELDS": { + "SUBJECT": "asunto", + "NAME": "nombre", + "DESCRIPTION": "descripción", + "CONTENT": "contenido", + "STATUS": "estado", + "IS_CLOSED": "está cerrada", + "FINISH_DATE": "fecha de finalización", + "TYPE": "tipo", + "PRIORITY": "prioridad", + "SEVERITY": "gravedad", + "ASSIGNED_TO": "asignado a", + "WATCHERS": "observadores", + "MILESTONE": "sprint", + "USER_STORY": "historia de usuario", + "PROJECT": "proyecto", + "IS_BLOCKED": "está bloqueada", + "BLOCKED_NOTE": "motivo del bloqueo", + "POINTS": "puntos", + "CLIENT_REQUIREMENT": "requerido por el cliente", + "TEAM_REQUIREMENT": "requerido por el equipo", + "IS_IOCAINE": "tiene iocaína", + "TAGS": "etiquetas", + "ATTACHMENTS": "adjuntos", + "IS_DEPRECATED": "está desactualizado", + "ORDER": "orden", + "BACKLOG_ORDER": "orden en backlog", + "SPRINT_ORDER": "orden en sprint", + "KANBAN_ORDER": "orden en kanban", + "TASKBOARD_ORDER": "orden en panel de tareras", + "US_ORDER": "orden en historia" + } }, "BACKLOG": { "SECTION_NAME": "Backlog", @@ -662,7 +700,7 @@ "TASKBOARD": { "SECTION_NAME": "Panel de Tareas", "TITLE_ACTION_ADD": "Añade una nueva tarea", - "TITLE_ACTION_ADD_BULK": "Añadir nuevas Tareas en bloque", + "TITLE_ACTION_ADD_BULK": "Añadir nuevas tareas en bloque", "TITLE_ACTION_ASSIGN": "Asignar tarea", "TITLE_ACTION_EDIT": "Editar tarea", "TABLE": { diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 1c761f7c..015e3ad3 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -129,21 +129,21 @@ "DELETE_SPRINTS": "Delete sprints" }, "USER_STORIES": { - "NAME": "User Stories", + "NAME": "Histoires Utilisateur", "VIEW_USER_STORIES": "View user stories", "ADD_USER_STORIES": "Add user stories", "MODIFY_USER_STORIES": "Modify user stories", "DELETE_USER_STORIES": "Delete user stories" }, "TASKS": { - "NAME": "Tasks", + "NAME": "Tâches", "VIEW_TASKS": "View tasks", "ADD_TASKS": "Add tasks", "MODIFY_TASKS": "Modify tasks", "DELETE_TASKS": "Delete tasks" }, "ISSUES": { - "NAME": "Issues", + "NAME": "Problèmes", "VIEW_ISSUES": "View issues", "ADD_ISSUES": "Add issues", "MODIFY_ISSUES": "Modify issues", @@ -563,7 +563,7 @@ } }, "COMMENTS": { - "DELETED_INFO": "Commentaire supprimé par {{deleteCommentUser}} on {{deleteCommentDate}}", + "DELETED_INFO": "Commentaire supprimé par {{user}} on {{date}}\n", "TITLE": "Commentaires", "COMMENT": "Commentaire", "TYPE_NEW_COMMENT": "Entrez un nouveau commentaire ici", @@ -582,7 +582,45 @@ "DELETED_ATTACHMENT": "Pièce-jointe supprimée", "UPDATED_ATTACHMENT": "Pièce jointe {{filename}} modifiée", "DELETED_CUSTOM_ATTRIBUTE": "Attribut personnalisé supprimé", - "SIZE_CHANGE": "Made {{size}} {size, plural, one{change} other{changes}}" + "SIZE_CHANGE": "Made {size, plural, one{one change} other{# changes}}", + "VALUES": { + "YES": "oui", + "NO": "no", + "EMPTY": "empty", + "UNASSIGNED": "non affecté" + }, + "FIELDS": { + "SUBJECT": "sujet", + "NAME": "nom", + "DESCRIPTION": "description", + "CONTENT": "content", + "STATUS": "état", + "IS_CLOSED": "is closed", + "FINISH_DATE": "date de fin", + "TYPE": "type", + "PRIORITY": "priorité", + "SEVERITY": "sévérité", + "ASSIGNED_TO": "affecté à", + "WATCHERS": "observateurs", + "MILESTONE": "sprint", + "USER_STORY": "histoire utilisateur", + "PROJECT": "projet", + "IS_BLOCKED": "est bloqué", + "BLOCKED_NOTE": "note bloquée", + "POINTS": "points", + "CLIENT_REQUIREMENT": "exigence du client", + "TEAM_REQUIREMENT": "exigence de l'équipe", + "IS_IOCAINE": "est sous iocaine", + "TAGS": "étiquettes", + "ATTACHMENTS": "pièces jointes", + "IS_DEPRECATED": "est obsolète", + "ORDER": "order", + "BACKLOG_ORDER": "backlog order", + "SPRINT_ORDER": "sprint order", + "KANBAN_ORDER": "kanban order", + "TASKBOARD_ORDER": "taskboard order", + "US_ORDER": "us order" + } }, "BACKLOG": { "SECTION_NAME": "Backlog", diff --git a/app/partials/common/history/history-activity.jade b/app/partials/common/history/history-activity.jade index cf39359d..22b46912 100644 --- a/app/partials/common/history/history-activity.jade +++ b/app/partials/common/history/history-activity.jade @@ -12,7 +12,8 @@ div(class!="activity-single <%- mode %>") <% if (comment.length > 0) { %> <% if ((deleteCommentDate || deleteCommentUser)) { %> .deleted-comment - span(translate="COMMENTS.DELETED_INFO", translate-values!="{ deleteCommentUser: '<%- deleteCommentUser %>', deleteCommentDate: '<% deleteCommentDate %>'}") + span(translate="COMMENTS.DELETED_INFO", + translate-values!="{ user: '<%- deleteCommentUser %>', date: '<% deleteCommentDate %>'}") <% } %> .comment.wysiwyg | <%= comment %> diff --git a/app/partials/common/history/history-change-attachment.jade b/app/partials/common/history/history-change-attachment.jade index 8b4ac0f1..6b12816f 100644 --- a/app/partials/common/history/history-change-attachment.jade +++ b/app/partials/common/history/history-change-attachment.jade @@ -4,11 +4,13 @@ .activity-fromto <% _.each(diff, function(change) { %> p - strong <%- change.name %> from + strong <%- change.name %>  + strong(translate="COMMON.FROM") br span <%- change.from %> p - strong <%- change.name %> to + strong <%- change.name %>  + strong(translate="COMMON.TO") br span <%- change.to %> <% }) %> diff --git a/app/partials/common/history/history-deleted-comment.jade b/app/partials/common/history/history-deleted-comment.jade index f4bc6c9d..2e8cfe44 100644 --- a/app/partials/common/history/history-deleted-comment.jade +++ b/app/partials/common/history/history-deleted-comment.jade @@ -1,8 +1,11 @@ .activity-single.comment.deleted-comment div - span(translate="COMMENTS.DELETED_INFO", translate-values!="{deleteCommentUser: '<%- deleteCommentUser %>', deleteCommentDate: '<%- deleteCommentDate %>'}") - a(href="", title="{{'COMMENTS.SHOW_DELETED' | translate}}", class="show-deleted-comment", translate="COMMENTS.SHOW_DELETED") - a(href="", title="{{'COMMENTS.HIDE_DELETED' | translate}}", class="hide-deleted-comment hidden", translate="COMMENTS.HIDE_DELETED") + span(translate="COMMENTS.DELETED_INFO", + translate-values!="{user: '<%- deleteCommentUser %>', date: '<%- deleteCommentDate %>'}") + a(href="", title="{{'COMMENTS.SHOW_DELETED' | translate}}", + class="show-deleted-comment", translate="COMMENTS.SHOW_DELETED") + a(href="", title="{{'COMMENTS.HIDE_DELETED' | translate}}", + class="hide-deleted-comment hidden", translate="COMMENTS.HIDE_DELETED") .comment-body.wysiwyg <%= deleteComment %> <% if (canRestoreComment) { %> a(href="", class="comment-restore", data-activity-id!="<%- activityId %>") diff --git a/gulpfile.js b/gulpfile.js index f601bbfb..b630327c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -113,15 +113,17 @@ paths.coffee_order = [ paths.libs = [ paths.vendor + "jquery/dist/jquery.js", - paths.vendor + "/lodash/dist/lodash.js", + paths.vendor + "lodash/dist/lodash.js", paths.vendor + "emoticons/lib/emoticons.js", paths.vendor + "underscore.string/lib/underscore.string.js", + paths.vendor + "messageformat/messageformat.js", paths.vendor + "angular/angular.js", paths.vendor + "angular-route/angular-route.js", paths.vendor + "angular-sanitize/angular-sanitize.js", paths.vendor + "angular-animate/angular-animate.js", paths.vendor + "angular-translate/angular-translate.js", paths.vendor + "angular-translate-loader-static-files/angular-translate-loader-static-files.js", + paths.vendor + "angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js", paths.vendor + "i18next/i18next.js", paths.vendor + "moment/min/moment-with-langs.js", paths.vendor + "checksley/checksley.js", @@ -136,6 +138,7 @@ paths.libs = [ paths.vendor + "malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.concat.min.js", paths.vendor + "raven-js/dist/raven.js", paths.vendor + "l.js/l.js", + paths.vendor + "messageformat/locale/*.js", paths.app + "js/jquery.ui.git-custom.js", paths.app + "js/jquery-ui.drag-multiple-custom.js", paths.app + "js/jquery.ui.touch-punch.min.js", From 76d80923b76416909c27496d8e40a804e7012797 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 29 Apr 2015 10:21:15 +0200 Subject: [PATCH 096/194] Minor fix in a lodash template --- app/partials/common/components/status-display.jade | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/partials/common/components/status-display.jade b/app/partials/common/components/status-display.jade index da8706e5..1062f3f4 100644 --- a/app/partials/common/components/status-display.jade +++ b/app/partials/common/components/status-display.jade @@ -1,5 +1,7 @@ -span(translate="COMMON.STATUS.OPEN", ng-if="is_closed") -span(translate="COMMON.STATUS.CLOSED", ng-if="!is_closed") - +<% if (is_closed) { %> +span(translate="COMMON.STATUS.CLOSED") +<% } else { %> +span(translate="COMMON.STATUS.OPEN") +<% } %> span(class="us-detail-status", style!="color:<%- status.color %>") | <%- status.name %> From ade264f090f65f7bb5b2799326bd8602390e1b5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 29 Apr 2015 12:56:20 +0200 Subject: [PATCH 097/194] Fix related and refered links in us/task/isue detail pages --- app/partials/issue/issues-detail.jade | 9 ++++++--- app/partials/task/task-detail.jade | 13 ++++++++----- app/partials/us/us-detail.jade | 9 ++++++--- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/app/partials/issue/issues-detail.jade b/app/partials/issue/issues-detail.jade index 820cf3b7..c87956c4 100644 --- a/app/partials/issue/issues-detail.jade +++ b/app/partials/issue/issues-detail.jade @@ -12,15 +12,18 @@ div.wrapper(ng-controller="IssueDetailController as ctrl", span.us-number(tg-bo-ref="issue.ref") span.us-name(tg-editable-subject, ng-model="issue", required-perm="modify_issue") - p.us-related-task(ng-if="issue.generated_user_stories.length", translate="ISSUES.PROMOTED") + p.us-related-task(ng-if="issue.generated_user_stories.length") + | {{ 'ISSUES.PROMOTED'|translate }} a(ng-repeat="us in issue.generated_user_stories", tg-check-permission="view_us", href="", tg-bo-title="'#' + us.ref + ' ' + us.subject", tg-nav="project-userstories-detail:project=project.slug, ref=us.ref") span(tg-bo-ref="us.ref") - p.external-reference(ng-if="issue.external_reference", translate="ISSUES.EXTERNAL_REFERENCE") - a(target="_blank", tg-bo-href="issue.external_reference[1]", title="{{'ISSUES.GO_TO_EXTERNAL_REFERENCE' | translate}}") + p.external-reference(ng-if="issue.external_reference") + | {{ 'EXTERNAL_REFERENCE'|translate }} + a(target="_blank", tg-bo-href="issue.external_reference[1]", + title="{{'ISSUES.GO_TO_EXTERNAL_REFERENCE' | translate}}") span {{ issue.external_reference[1] }} p.block-desc-container(ng-show="issue.is_blocked") diff --git a/app/partials/task/task-detail.jade b/app/partials/task/task-detail.jade index bea7e8dd..a1f43b5d 100644 --- a/app/partials/task/task-detail.jade +++ b/app/partials/task/task-detail.jade @@ -18,20 +18,23 @@ div.wrapper(ng-controller="TaskDetailController as ctrl", span.us-number(tg-bo-ref="task.ref") span.us-name(tg-editable-subject, ng-model="task", required-perm="modify_task") - h3.us-related-task(translate="TASK.OWNER_US") + h3.us-related-task(ng-if="us") + | {{ 'TASK.OWNER_US'|translate }} a(tg-check-permission="view_us", href="", title="{{'TASK.TITLE_LINK_GO_OWNER' | translate}}", - tg-nav="project-userstories-detail:project=project.slug, ref=us.ref", - ng-if="us") + tg-nav="project-userstories-detail:project=project.slug, ref=us.ref") span(tg-bo-ref="us.ref") span(tg-bo-bind="us.subject") - p.external-reference(ng-if="task.external_reference", translate="TASK.ORIGIN_US") - a(target="_blank", tg-bo-href="task.external_reference[1]", title="{{'TASK.TITLE_LINK_GO_ORIGIN' | translate}}") + p.external-reference(ng-if="task.external_reference") + a(target="_blank", tg-bo-href="task.external_reference[1]", + title="{{'TASK.TITLE_LINK_GO_ORIGIN' | translate}}") + | {{ "TASK.ORIGIN_US"| translate }} span {{ task.external_reference[1] }} p.block-desc-container(ng-show="task.is_blocked") span.block-description-title(translate="COMMON.BLOCKED") span.block-description(ng-bind="task.blocked_note || ('TASK.BLOCKED_DESCRIPTION' | translate)") + div.issue-nav a.icon.icon-arrow-left(ng-show="previousUrl", tg-bo-href="previousUrl", title="{{'TASK.PREVIOUS' | translate}}") diff --git a/app/partials/us/us-detail.jade b/app/partials/us/us-detail.jade index 43177786..f930e9e7 100644 --- a/app/partials/us/us-detail.jade +++ b/app/partials/us/us-detail.jade @@ -18,14 +18,17 @@ div.wrapper(ng-controller="UserStoryDetailController as ctrl", span.us-number(tg-bo-ref="us.ref") span.us-name(tg-editable-subject, ng-model="us", required-perm="modify_us") - p.us-related-task(ng-if="us.origin_issue", translate="US.PROMOTED") + p.us-related-task(ng-if="us.origin_issue") + | {{ 'US.PROMOTED'|translate }} a(tg-check-permission="view_us", href="", title="{{'US.TITLE_LINK_GO_TO_ISSUE' | translate}}", tg-nav="project-issues-detail:project=project.slug, ref=us.origin_issue.ref" tg-bo-title="'#' + us.origin_issue.ref + ' ' + us.origin_issue.subject") span(tg-bo-ref="us.origin_issue.ref") - p.external-reference(ng-if="us.external_reference", translate="US.EXTERNAL_REFERENCE") - a(target="_blank", tg-bo-href="us.external_reference[1]", title="{{'US.GO_TO_EXTERNAL_REFERENCE' | translate}}") + p.external-reference(ng-if="us.external_reference") + | {{ 'US.EXTERNAL_REFERENCE'|translate }} + a(target="_blank", tg-bo-href="us.external_reference[1]", + title="{{'US.GO_TO_EXTERNAL_REFERENCE' | translate}}") span {{ us.external_reference[1] }} p.block-desc-container(ng-show="us.is_blocked") From 93ff96facf83bcf58458684012edd17e0a0a8aa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 29 Apr 2015 13:46:33 +0200 Subject: [PATCH 098/194] [i18n] Fix assigned-to directive --- app/locales/locale-en.json | 3 ++- app/locales/locale-es.json | 3 ++- app/partials/common/components/assigned-to.jade | 5 +++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 9bd06b4d..61e7dcdd 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -67,7 +67,8 @@ "DELETE_ASSIGNMENT": "Delete assignment", "REMOVE_ASSIGNED": "Remove assigned", "TOO_MANY": "...too many users, keep filtering", - "CONFIRM_UNASSIGNED": "Are you sure you want to leave it unassigned?" + "CONFIRM_UNASSIGNED": "Are you sure you want to leave it unassigned?", + "TITLE_ACTION_EDIT_ASSIGNMENT": "Edit assignment" }, "STATUS": { "CLOSED": "Closed", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 9088e521..3bbdfdc2 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -65,7 +65,8 @@ "DELETE_ASSIGNMENT": "Eliminar asignaciones", "REMOVE_ASSIGNED": "Eliminar asignación", "TOO_MANY": "...Demasiados usuarios, continué filtrando", - "CONFIRM_UNASSIGNED": "¿Está seguro de que desea dejarla sin asignar?" + "CONFIRM_UNASSIGNED": "¿Está seguro de que desea dejarla sin asignar?", + "TITLE_ACTION_EDIT_ASSIGNMENT": "Editar asignación" }, "STATUS": { "CLOSED": "Cerrada", diff --git a/app/partials/common/components/assigned-to.jade b/app/partials/common/components/assigned-to.jade index 24e20859..ee144283 100644 --- a/app/partials/common/components/assigned-to.jade +++ b/app/partials/common/components/assigned-to.jade @@ -6,12 +6,13 @@ .assigned-to span.assigned-title(translate="COMMON.FIELDS.ASSIGNED_TO") - a(href="" title="edit assignment", class!="user-assigned <% if(isEditable){ %>editable<% }; %>") + a(href="" title="{{ 'COMMON.ASSIGNED_TO.TITLE_ACTION_EDIT_ASSIGNMENT'|translate }}", + class!="user-assigned <% if(isEditable){ %>editable<% }; %>") span.assigned-name <% if (assignedTo) { %> <%- assignedTo.full_name_display %> <% } else { %> - | {{'COMMON.FIELDS.ASSIGNED_TO' | translate}} + | {{ 'COMMON.ASSIGNED_TO.NOT_ASSIGNED'|translate }} <% } %> <% if(isEditable){ %> span.icon.icon-arrow-bottom From 1449b4eaaa82f11179198afbf570c773ec615cba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 29 Apr 2015 13:53:15 +0200 Subject: [PATCH 099/194] [i18n] Add finish translation --- CHANGELOG.md | 14 + app/locales/locale-fi.json | 996 +++++++++++++++++++++++++++++++++++++ 2 files changed, 1010 insertions(+) create mode 100644 app/locales/locale-fi.json diff --git a/CHANGELOG.md b/CHANGELOG.md index f4648024..26985d0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,20 @@ # Changelog # +## 1.7.0 ??? (unreleased) + +### Features +- Make Taiga translatable (i18n support). +- i18n. + - Add spanish translation. + - Add french translation. + - Add finish translation. + +### Misc +- New contrib plugin for letschat (by Δndrea Stagi) +- Lots of small and not so small bugfixes. + + ## 1.6.0 Abies Bifolia (2015-03-17) ### Features diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json new file mode 100644 index 00000000..3354da20 --- /dev/null +++ b/app/locales/locale-fi.json @@ -0,0 +1,996 @@ +{ + "COMMON": { + "YES": "Kyllä", + "NO": "Ei", + "LOADING": "Ladataan...", + "LOADING_PROJECT": "Ladataan projektia...", + "SAVE": "Tallenna", + "CANCEL": "Peru", + "ACCEPT": "Hyväksy", + "DELETE": "Poista", + "CREATE": "Luo uusi", + "ADD": "Lisää", + "COPY_TO_CLIPBOARD": "Kopio leikekirjalle: Ctrl+C", + "EDIT": "Muokkaa", + "DRAG": "Vedä", + "TAG_LINE": "Ketterä, ilmainne avoimen koodin projektinhallintaohjelmisto", + "TAG_LINE_2": "Rakasta projektiasi", + "BLOCK": "Estä", + "UNBLOCK": "Salli", + "BLOCKED": "Suljettu", + "CREATED_BY": "Luonut {{fullDisplayName}}", + "FROM": "käyttäjältä", + "TO": "käyttäjälle", + "CLOSE": "sulje", + "BLOCKED_NOTE": "Miksi tämä käyttäjätarina on suljettu?", + "BLOCKED_REASON": "Ole hyvä ja anna syy", + "GO_HOME": "Vie minut kotiin", + "PLUGINS": "Pluginit", + "BETA": "Tämä on beta-versio!", + "ONE_ITEM_LINE": "Yksi riviä kohti...", + "NEW_BULK": "Lisää monta", + "RELATED_TASKS": "Liittyvät tehtävät", + "LOGOUT": "Kirjaudu ulos", + "GENERIC_ERROR": "Oompa Loompas havaitsivat virheen {{error}}.", + "IOCAINE_TEXT": "Jos tehtävä ahdistaa, merkitse se hidasteeksi.", + "TAGS": { + "PLACEHOLDER": "Anna avainsana...", + "DELETE": "Poista avainsana", + "ADD": "Lisää avainsana" + }, + "DESCRIPTION": { + "EMPTY": "Tyhjä tila on tylsää...kerro jotain...", + "NO_DESCRIPTION": "Ei vielä kuvausta lisätty" + }, + "FIELDS": { + "SUBJECT": "Aihe", + "NAME": "Nimi", + "URL": "URL", + "DESCRIPTION": "Kuvaus", + "VALUE": "Arvo", + "SLUG": "Hitaus", + "COLOR": "Väri", + "IS_CLOSED": "Onko suljettu?", + "STATUS": "Tila", + "ASSIGNED_TO": "Tekijä", + "POINTS": "Pisteet", + "BLOCKED_NOTE": "estetty muistiinpano", + "IS_BLOCKED": "on estetty" + }, + "ROLES": { + "ALL": "Kaikki" + }, + "ASSIGNED_TO": { + "NOT_ASSIGNED": "Tekijää ei valittu", + "DELETE_ASSIGNMENT": "Poista tekijä", + "REMOVE_ASSIGNED": "Poista tekijä", + "TOO_MANY": "...liikaa käyttäjiä, lisää suodattimia", + "CONFIRM_UNASSIGNED": "Haluatko varmasti jättää tämän ilman tekijää?", + "TITLE_ACTION_EDIT_ASSIGNMENT": "Edit assignment" + }, + "STATUS": { + "CLOSED": "Suljettu", + "OPEN": "Avoin" + }, + "WATCHERS": { + "ADD": "Lisää vahti", + "TITLE": "vahdit", + "DELETE": "poista vahti" + }, + "CUSTOM_ATTRIBUTES": { + "CUSTOM_FIELDS": "Omat kentät", + "SAVE": "Tallenna oma kenttä", + "EDIT": "Muokkaa omaa kenttää", + "DELETE": "Poista oma attribuutti", + "CONFIRM_DELETE": "Muista että oman kentän arvot poistetaan kentän mukana.
Jatketaanko?" + }, + "FILTERS": { + "TITLE": "suodattimet", + "INPUT_PLACEHOLDER": "Aihe tai viittaus", + "TITLE_ACTION_FILTER_BUTTON": "hae", + "BREADCRUMB_TITLE": "takaisin kategorioihin", + "BREADCRUMB_FILTERS": "Suodattimet", + "BREADCRUMB_STATUS": "tila" + }, + "WYSIWYG": { + "H1_BUTTON": "Päätason otsikko", + "H1_SAMPLE_TEXT": "Nimikkeesei tänne...", + "H2_BUTTON": "Toisen tason otsikko", + "H2_SAMPLE_TEXT": "Nimikkeesi tänne...", + "H3_BUTTON": "Kolmannen tason otsikko", + "H3_SAMPLE_TEXT": "Nimikkeesi tänne...", + "BOLD_BUTTON": "Lihavoitu", + "BOLD_BUTTON_SAMPLE_TEXT": "Kirjoita tänne...", + "ITALIC_BUTTON": "Kursiivi", + "ITALIC_SAMPLE_TEXT": "Kirjoita tänne...", + "STRIKE_BUTTON": "Lakko", + "STRIKE_SAMPLE_TEXT": "Kirjoita tänne...", + "BULLETED_LIST_BUTTON": "Numeroimaton lista", + "BULLETED_LIST_SAMPLE_TEXT": "Kirjoita tänne...", + "NUMERIC_LIST_BUTTON": "Numeroitu lista", + "NUMERIC_LIST_SAMPLE_TEXT": "Kirjoita tänne...", + "PICTURE_BUTTON": "Kuva", + "PICTURE_SAMPLE_TEXT": "Vaihtoehtoinen kuvan teksti tänne...", + "LINK_BUTTON": "Linkki", + "LINK_SAMPLE_TEXT": "Linkkiteksti tänne...", + "QUOTE_BLOCK_BUTTON": "Lainaus", + "QUOTE_BLOCK_SAMPLE_TEXT": "Kirjoita tänne...", + "CODE_BLOCK_BUTTON": "Koodi-lohko", + "CODE_BLOCK_SAMPLE_TEXT": "Kirjoita tänne...", + "PREVIEW_BUTTON": "Esikatselu", + "EDIT_BUTTON": "Muokkaa", + "MARKDOWN_HELP": "Merkintätavan ohjeet" + }, + "PERMISIONS_CATEGORIES": { + "SPRINTS": { + "NAME": "Kierrokset", + "VIEW_SPRINTS": "Katso kierroksia", + "ADD_SPRINTS": "Lisää kierroksia", + "MODIFY_SPRINTS": "Muokkaa kieroksia", + "DELETE_SPRINTS": "Poista kierroksia" + }, + "USER_STORIES": { + "NAME": "Käyttäjätarinat", + "VIEW_USER_STORIES": "Katso käyttäjätarinoita", + "ADD_USER_STORIES": "Lisää käyttäjätarinoita", + "MODIFY_USER_STORIES": "Muokkaa käyttäjätarinoita", + "DELETE_USER_STORIES": "Poista käyttäjätarinoita" + }, + "TASKS": { + "NAME": "Tehtävät", + "VIEW_TASKS": "Katsot tehtäviä", + "ADD_TASKS": "Lisää tehtäviä", + "MODIFY_TASKS": "Muokkaa tehtäviä", + "DELETE_TASKS": "Poista tehtäviä" + }, + "ISSUES": { + "NAME": "Ongelmat", + "VIEW_ISSUES": "Katso ongelmia", + "ADD_ISSUES": "Lisää ongelmia", + "MODIFY_ISSUES": "Muokkaa ongelmia", + "DELETE_ISSUES": "Poista ongelmia" + }, + "WIKI": { + "NAME": "Wiki", + "VIEW_WIKI_PAGES": "Katso wiki-sivuja", + "ADD_WIKI_PAGES": "Lisää wiki-sivuja", + "MODIFY_WIKI_PAGES": "Muokkaa wiki-sivuja", + "DELETE_WIKI_PAGES": "Poista wiki-sivuja", + "VIEW_WIKI_LINKS": "Katso wiki-linkkejä", + "ADD_WIKI_LINKS": "Lisää wiki-linkkejä", + "DELETE_WIKI_LINKS": "Poista wiki-linkkejä" + } + } + }, + "AUTH": { + "INVITED_YOU": "on kutsunut sinut projektiin", + "NOT_REGISTERED_YET": "Etkö ole vielä rekisteröitynyt?", + "REGISTER": "Rekisteröidy", + "CREATE_ACCOUNT": "luo ilmainen tunnuksesi täällä" + }, + "ATTACHMENT": { + "SECTION_NAME": "liitteet", + "TITLE": "<%- name %> ladattu <%- created_date %>", + "DESCIPTION": "Kirjoita lyhyt kuvaus", + "DEPRECATED_FILE": "Vanhentunut?", + "ADD": "Lisää liite. <%- maxFileSizeMsg %>", + "MAX_FILE_SIZE": "[Maks. koko: {{maxFileSize}}]", + "SHOW_DEPRECATED": "+ näytä vanhentuneet liitteet", + "HIDE_DEPRECATED": "- piilota vanhentuneet liitteet", + "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} vanhentunutta)", + "MAX_UPLOAD_SIZE": "Maksimi tiedoston koko {{maxFileSize}}", + "DATE": "DD MMM YYYY - hh:mm", + "FIELDS": { + "IS_DEPRECATED": "on vanhentunut" + } + }, + "PAGINATION": { + "PREVIOUS": "Edellinen", + "NEXT": "Seuraava" + }, + "ADMIN": { + "COMMON": { + "TITLE_ACTION_EDIT_VALUE": "Muokkaa arvoa", + "TITLE_ACTION_DELETE_VALUE": "Poista arvo" + }, + "HELP": "Tarvitsetko apua? Katso tukisivuilta.", + "PROJECT_DEFAULT_VALUES": { + "TITLE": "Oletusarvot", + "SUBTITLE": "Aseta oletukset kaikille syötteille." + }, + "MEMBERSHIPS": { + "TITLE": "Hallinnoi jäseniä", + "ADD_BUTTON": "+ Uusi jäsen", + "ADD_BUTTON_TITLE": "Lisää jäsen" + }, + "PROJECT_EXPORT": { + "TITLE": "Vie", + "SUBTITLE": "Vie projekti varmuuskopioksi tai luo uusi tämän pohjalta.", + "EXPORT_BUTTON": "Vie", + "EXPORT_BUTTON_TITLE": "Vie projekti", + "LOADING_TITLE": "Varmistustiedostoa muodostetaan", + "DUMP_READY": "Tiedostosi on valmis", + "LOADING_MESSAGE": "Älä sulje tätä sivua.", + "ASYNC_MESSAGE": "Lähetämme sähköpostia, kun on valmista.", + "SYNC_MESSAGE": "Jos lataus ei ala automaattisesti klikkaa tästä.", + "ERROR": "Oompa Loompas eivät onnistuneet tekemään tiedostoasi. Yritä uudelleen.", + "ERROR_BUSY": "Valitettavasti Oompa Loompas ovat kiireisiä juuri. Yritä kohta uudestaan.", + "ERROR_MESSAGE": "Oompa Loompas eivät onnistuneet luomaan tiedostoasi: {{message}}" + }, + "MODULES": { + "TITLE": "Modulit", + "ENABLE": "Aktivoi", + "DISABLE": "Passivoi", + "BACKLOG": "Odottavat", + "BACKLOG_DESCRIPTION": "Hallinnoi käyttäjätarinoita: järjestele ja priorisoi työtä.", + "KANBAN": "Kanban", + "KANBAN_DESCRIPTION": "Järjestä projektisi tehokkaasti tällä taululla.", + "ISSUES": "Ongelmat", + "ISSUES_DESCRIPTION": "Seuraa projektisi virheitä, kysymyksiä ja parannusehdotuksia. Älä jätä mitään huomiotta!", + "WIKI": "Wiki", + "WIKI_DESCRIPTION": "Lisää, muokkaa tai poista sisältöä yhteistyössä muiden kanssa. Tämä on oikea paikka projektin dokumentaatiolle.", + "MEETUP": "Tapaa", + "MEETUP_DESCRIPTION": "Valitse videoconferenssisysteemi. Jopa kehittäjät tarvitsevat katsekontaktia.", + "SELECT_VIDEOCONFERENCE": "Valitse videoconferenssi-järjestelmä", + "SALT_CHAT_ROOM": "Voit halutessasi lisätä suolaan chat-huoneen nimeen" + }, + "PROJECT_PROFILE": { + "PAGE_TITLE": "Projektin profiili - {{sectionName}} - {{projectName}}", + "PROJECT_DETAILS": "Projektin tiedot", + "PROJECT_NAME": "Projektin nimi", + "PROJECT_SLUG": "Projektin hukka-aika", + "NUMBER_SPRINTS": "Kierrosten määrä", + "NUMBER_US_POINTS": "Kt pisteitä", + "DESCRIPTION": "Kuvaus", + "PUBLIC_PROJECT": "Julkinen projekti", + "PRIVATE_PROJECT": "Yksityinen projekti", + "DELETE": "Poista tämä projekti" + }, + "REPORTS": { + "TITLE": "Raportit", + "SUBTITLE": "Vie projektisi CSV-tiedostoon", + "DESCRIPTION": "Lataa CSV-tiedosto tai luo URL ja avaa haluamassasi ohjelmassa. Voit visualisoida ja analysoida tietoa helposti.", + "HELP": "Kuinka tätä käytetään omassa taulukossani?", + "REGENERATE_TITLE": "Vaihda URL", + "REGENERATE_SUBTITLE": "Jos muutata CSV-datan URLia, edellien lakkaa toimimasta. Oletko varma?", + "CSV_TYPE_US": "käyttäjätarinat", + "CSV_TYPE_TASK": "tehtävät", + "CSV_TYPE_ISSUE": "ongelmat" + }, + "CUSTOM_FIELDS": { + "TITLE": "Omat kentät", + "SUBTITLE": "Määritele omia kenttiä käyttäjätarinoihin, tehtäviin ja ongelmiin", + "US_DESCRIPTION": "Käyttäjätarinoiden omat kentät", + "US_ADD": "Lisää käyttäjätarinoihin oma kenttä", + "TASK_DESCRIPTION": "Tehtävien omat kentät", + "TASK_ADD": "Lisää omia kenttiä tehtäviin", + "ISSUE_DESCRIPTION": "Ongelmien omat kentät", + "ISSUE_ADD": "Lisää oma kenttä ongelmille" + }, + "PROJECT_VALUES": { + "APP_TITLE": "Projektin arvot - {{sectionName}} - {{projectName}}", + "REPLACEMENT": "Kaikkii riveihin joissa on tämä arvo muutetaan ", + "ERROR_DELETE_ALL": "Et voi poistaa kaikkia arvoja." + }, + "PROJECT_VALUES_POINTS": { + "TITLE": "Kt pisteet", + "SUBTITLE": "Määrittele pisteet joihin käyttäjätarinat voidaan arvioida", + "ACTION_ADD": "Lisää uusi piste" + }, + "PROJECT_VALUES_PRIORITIES": { + "TITLE": "Ongelmien tärkeydet", + "SUBTITLE": "Määrittele tärkeydet ongelmillesi" + }, + "PROJECT_VALUES_SEVERITIES": { + "TITLE": "Ongelmien vakavuudet", + "SUBTITLE": "Määrittele ongelmiesi vakavuudet" + }, + "PROJECT_VALUES_STATUS": { + "TITLE": "Tila", + "SUBTITLE": "Määrittele tilat joiden kautta käyttäjätarinasi, tehtäväsi ja ongelmasi kulkevat", + "US_TITLE": "Kt tilat", + "TASK_TITLE": "Tehtävien tilat", + "ISSUE_TITLE": "Ongelmien tilat" + }, + "PROJECT_VALUES_TYPES": { + "TITLE": "Tyypit", + "SUBTITLE": "Määrittele ongelmien tyypit", + "ISSUE_TITLE": "Ongelmien tyypit", + "ACTION_ADD": "Lisää uusi {{objName}}" + }, + "ROLES": { + "SECTION_NAME": "Roolit - {{projectName}}", + "WARNING_NO_ROLE": "Ole varovainen, yksikään rooli projektissasi ei voi arvioida käyttäjätarinoidesi kokoa", + "HELP_ROLE_ENABLED": "Tämän roolin omaavat jäsenet voivat arvioida käyttäjätarinoiden kokoja", + "COUNT_MEMBERS": "{{ role.members_count }} jäsentä joilla tämä rooli", + "TITLE_DELETE_ROLE": "Poista rooli", + "REPLACEMENT_ROLE": "Kaikki käyttäjä joilla on tämä rooli siirretään", + "WARNING_DELETE_ROLE": "Ole varovainen, rooli-arvioinnit poistetaan", + "ERROR_DELETE_ALL": "Voit poistaa kaikki arvot", + "EXTERNAL_USER": "Ulkoinen käyttäjä" + }, + "THIRD_PARTIES": { + "SECRET_KEY": "Salainen avain", + "PAYLOAD_URL": "Yhteyden URL-osoite", + "VALID_IPS": "Vaadittavat lähdeIPt (pilkuilla eroteltuna)" + }, + "BITBUCKET": { + "SECTION_NAME": "Bitbucket", + "APP_TITLE": "Bitbucket - {{projectName}}", + "INFO_VERIFYING_IP": "Bitbucket pyynnöt eivät ole allekirjoitettuja joten tarkista IP. Jos IP on tyhjä, ei sitä tarkisteta." + }, + "GITLAB": { + "SECTION_NAME": "Gitlab", + "APP_TITLE": "Gitlab - {{projectName}}", + "INFO_VERIFYING_IP": "Gitlab pyynnöt eivät ole allekirjoitettuja joten tarkista IP. Jos IP on tyhjä, ei sitä tarkisteta." + }, + "GITHUB": { + "SECTION_NAME": "Github", + "APP_TITLE": "Github - {{projectName}}" + }, + "WEBHOOKS": { + "APP_TITLE": "Webhooks - {{projectName}}", + "SECTION_NAME": "Webhookit", + "SUBTITLE": "Webhookit ilmoittvat ulkoisille palveluille Taigan kommenteista, käyttäjätarinoista ...", + "ADD_NEW": "Lisää webhook", + "TYPE_NAME": "Anna palvelun nimi", + "TYPE_PAYLOAD_URL": "Anna palvelun yhteysosoite (URL)", + "TYPE_SERVICE_SECRET": "Anna palvelun yksityinen avain", + "SAVE": "Tallenna Webhook", + "CANCEL": "Peruuta Webhook", + "SHOW_HISTORY": "(Näytä historia)", + "TEST": "Testaa webhook", + "EDIT": "Muokkaa webhookkia", + "DELETE": "Poista Webhook", + "REQUEST": "Pyyntö", + "RESEND_REQUEST": "Lähetä pyyntö uudestaan", + "HEADERS": "Ylätunnisteet", + "PAYLOAD": "Hyötykuorma", + "RESPONSE": "Vastaus", + "DATE": "DD MMM YYYY - hh:mm:ss", + "ACTION_HIDE_HISTORY": "(Piilota historia)", + "ACTION_HIDE_HISTORY_TITLE": "Piilota historian yksityiskohdat", + "ACTION_SHOW_HISTORY": "(Näytä historia)", + "ACTION_SHOW_HISTORY_TITLE": "Näytä historian yksityiskohdat", + "WEBHOOK_NAME": "Webhook '{{name}}'" + }, + "CUSTOM_ATTRIBUTES": { + "ADD": "Anna oma kenttä", + "EDIT": "Muokkaa omaa kenttää", + "DELETE": "Poista oma kenttä", + "SAVE_TITLE": "Tallenna oma kenttä", + "CANCEL_TITLE": "Peru luonti", + "SET_FIELD_NAME": "Anna oman kentän nimi", + "SET_FIELD_DESCRIPTION": "Anna oman kenttäsi kuvaus", + "ACTION_UPDATE": "Päivitä oma kenttä", + "ACTION_CANCEL_EDITION": "Peru versio" + }, + "MEMBERSHIP": { + "COLUMN_MEMBER": "Jäsen", + "COLUMN_ADMIN": "Hallinnoi", + "COLUMN_ROLE": "Rooli", + "COLUMN_STATUS": "Tila", + "STATUS_ACTIVE": "Aktiivinen", + "STATUS_PENDING": "Odottaa", + "DELETE_MEMBER": "Poista jäsen", + "SUCCESS_SEND_INVITATION": "Olemme lähettäneet kutsun uudelleen osoitteeseen '{{email}}'.", + "ERROR_SEND_INVITATION": "Olemme lähettäneet kutsun.", + "SUCCESS_DELETE": "Olemme poistaneet viestin {{message}}.", + "ERROR_DELETE": "Emme pystyneet poistamaan viestiä {{message}}.", + "DEFAULT_DELETE_MESSAGE": "kutsu sähköpostiin {{email}}" + }, + "DEFAULT_VALUES": { + "LABEL_POINTS": "Oletukset pisteiden valintaan", + "LABEL_US": "Oletusarvo Kt:n tilan valintaan", + "LABEL_TASK_STATUS": "Oletusarvo tehtävän tilan valintaan", + "LABEL_PRIORITY": "Oletus arvo tärkeyden valiintaan", + "LABEL_SEVERITY": "Oletusarvo vakavuuden valintaan", + "LABEL_ISSUE_TYPE": "Oletusarvo ongelman tyypin valintaan", + "LABEL_ISSUE_STATUS": "Oletusarvo ongelmien statuksen valintaan" + }, + "CSV": { + "TITLE": "{{csvType}} raportit", + "DOWNLOAD": "Lataa CSV-tiedosto", + "URL_FIELD_PLACEHOLDER": "Tee uusi CSV-url", + "TITLE_REGENERATE_URL": "Tee uusi CSV-url", + "ACTION_GENERATE_URL": "Luo URL", + "ACTION_REGENERATE": "Tee uusi" + }, + "STATUS": { + "PLACEHOLDER_WRITE_STATUS_NAME": "Anna uuden tilan nimi" + }, + "TYPES": { + "PLACEHOLDER_WRITE_NAME": "Anna uuden elementin nimi" + }, + "US_STATUS": { + "ACTION_ADD_STATUS": "Lisää uusi tila", + "IS_ARCHIVED_COLUMN": "Onko arkistoitu?", + "WIP_LIMIT_COLUMN": "WIP raja", + "PLACEHOLDER_WRITE_NAME": "Anna uuden tilan nimi" + }, + "MENU": { + "TITLE": "Hallinnoi", + "PROJECT": "Projekti", + "ATTRIBUTES": "Attribuutit", + "MEMBERS": "Jäsenet", + "PERMISSIONS": "Oikeudet", + "INTEGRATIONS": "Intergraatiot", + "PLUGINS": "Pluginit" + }, + "SUBMENU_PROJECT_VALUES": { + "STATUS": "Tila", + "POINTS": "Pisteet", + "PRIORITIES": "Tärkeydet", + "SEVERITIES": "Vakavuudet", + "TYPES": "Tyypit", + "CUSTOM_FIELDS": "Omat kentät" + }, + "SUBMENU_PROJECT_PROFILE": { + "TITLE": "Projektin profiili" + }, + "SUBMENU_ROLES": { + "TITLE": "Roolit", + "ACTION_NEW_ROLE": "+ Uusi rooli", + "TITLE_ACTION_NEW_ROLE": "Lisää uusi rooli" + }, + "SUBMENU_THIDPARTIES": { + "TITLE": "Palvelut" + } + }, + "PROJECT": { + "WELCOME": "Tervetuloa", + "SECTION_PROJECTS": "Projektit", + "STATS": { + "PROJECT": "projekti
pisteet", + "DEFINED": "määritely
pistettä", + "ASSIGNED": "kohdistettu
pistettä", + "CLOSED": "suljettu
pistettä" + }, + "SECTION": { + "SEARCH": "Hae", + "BACKLOG": "Odottavat", + "KANBAN": "Kanban", + "ISSUES": "Ongelmat", + "WIKI": "Wiki", + "TEAM": "Tiimi", + "MEETUP": "Tapaa", + "ADMIN": "Hallinnoi" + }, + "NAVIGATION": { + "SECTION_TITLE": "Projektisi", + "PLACEHOLDER_SEARCH": "Hae täältä...", + "ACTION_CREATE_PROJECT": "Luo projekti", + "TITLE_ACTION_IMPORT": "Luo projekti tiedostosta", + "TITLE_PRVIOUS_PROJECT": "Näytä aikaisemmat projektit", + "TITLE_NEXT_PROJECT": "Näytä seuraavat projektit" + }, + "IMPORT": { + "TITLE": "Luetaan sisään projektia", + "DESCRIPTION": "Tämä voi kestää hetken, pidä ikkuna auki.", + "ASYNC_IN_PROGRESS_TITLE": " Oompa Loompas tuovat projektia", + "ASYNC_IN_PROGRESS_MESSAGE": "Tämä voi kestää muutaman minuutin
Lähetämme sähköpostin on valmista", + "ERROR": "Oompa Loompas eivät onnistuneet tuomaan tiedostoasi. Yritä uudestaan.", + "ERROR_TOO_MANY_REQUEST": "Oompa Loompas ovat kiireisiä juuri nyt. Yritä hetken päästä uudelleen.", + "ERROR_MESSAGE": "Oompa Loompas eivät pysty lukemaan tiedostoasi: {{error_message}}", + "SYNC_SUCCESS": "Projektisi on tuotu sisään onnistuneesti" + } + }, + "LIGHTBOX": { + "DELETE_ACCOUNT": { + "SECTION_NAME": "Poista Taiga-tunnus", + "CONFIRM": "Haluatko varmasti poistaa Taiga-tunnuksesi?", + "SUBTITLE": "Tulemme kaipaamaan sinua! :-(" + }, + "DELETE_PROJECT": { + "TITLE": "Poista projekti", + "QUESTION": "Haluatko varmasti poistaa tämän projektin?", + "SUBTITLE": "Projektin kaikki tiedot poistetaan :-(", + "CONFIRM": "Kyllä, tiedän mitä teen" + }, + "ASSIGNED_TO": { + "SELECT": "Valitse tekijä", + "SEARCH": "Hae käyttäjiä" + }, + "ADD_MEMBER": { + "TITLE": "Uusi jäsen", + "HELP_TEXT": "Taigan käyttäjät lisätään automaattisesti, muille lähetetään kutsu." + }, + "CREATE_ISSUE": { + "TITLE": "Lisää ongelma" + }, + "FEEDBACK": { + "TITLE": "Kerro jotain...", + "COMMENT": "...virhe, ehdotuksia, tai huonoin kokemuksesi Taigan kanssa", + "ACTION_SEND": "Lähetä palautetta" + }, + "SEARCH": { + "TITLE": "Hae", + "PLACEHOLDER_SEARCH": "Mitä etsit?" + }, + "ADD_EDIT_SPRINT": { + "TITLE": "Uusi kierros", + "PLACEHOLDER_SPRINT_NAME": "kierroksen nimi", + "PLACEHOLDER_SPRINT_START": "Arvioitu alku", + "PLACEHOLDER_SPRINT_END": "Arvioitu loppu", + "ACTION_DELETE_SPRINT": "Haluatko poistaa tämän kierroksen?", + "TITLE_ACTION_DELETE_SPRINT": "poista kierros", + "LAST_SPRINT_NAME": "viimeinen kierros on {{lastSprint}} ;-) " + }, + "CREATE_EDIT_TASK": { + "TITLE": "Uusi tehtävä", + "PLACEHOLDER_SUBJECT": "Tehtävän aihe", + "PLACEHOLDER_STATUS": "Tehtävän tila", + "OPTION_UNASSIGNED": "Ilman tekijää", + "PLACEHOLDER_SHORT_DESCRIPTION": "Kirjoita lyhyt kuvaus", + "ACTION_EDIT": "Muokkaa tehtävää" + }, + "CREATE_EDIT_US": { + "TITLE": "Uusi Kt", + "PLACEHOLDER_DESCRIPTION": "Lisää kuvaus jotta muut ymmärtäisivät käyttäjätarinasi paremmin", + "NEW_US": "Uusi käyttäjätarina", + "EDIT_US": "Muokkaa käyttäjätarinaa" + }, + "DELETE_SPRINT": { + "TITLE": "Poista kierros" + }, + "CREATE_MEMBER": { + "PLACEHOLDER_INVITATION_TEXT": "(Vapaaehtoinen) Lisää oma kuvaus kutsuusi uusille jäsenille ;-)", + "PLACEHOLDER_TYPE_EMAIL": "Anna sähköposti" + } + }, + "US": { + "LINK_TASKBOARD": "Tehtävätaulu", + "TITLE_LINK_TASKBOARD": "Siirry tehtävätauluun", + "TOTAL_POINTS": "yhteensä", + "ADD": "+ Lisää uusi käyttäjätarina", + "ADD_BULK": "Lisää monta käyttäjätarinaa", + "PROMOTED": "Tämä US on liitetty ongelmaan:", + "TITLE_LINK_GO_TO_ISSUE": "Mene ongelmaan", + "EXTERNAL_REFERENCE": "Tämä Kt oon luotu täältä: ", + "GO_TO_EXTERNAL_REFERENCE": "Palaa alkuun", + "BLOCKED": "Tämä käyttäjätarina on suljettu", + "PREVIOUS": "edellinen käyttäjätarina", + "NEXT": "seuraava käyttäjätarina", + "TITLE_DELETE_ACTION": "Poista käyttäjätarina", + "LIGHTBOX_TITLE_BLOKING_US": "Meitä estää", + "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} tehtyä tehtävää", + "ASSIGN": "Käyttäjätarinan tekijä", + "NOT_ESTIMATED": "Ei arvioitu", + "TOTAL_US_POINTS": "Kt pisteet yhteensä", + "FIELDS": { + "TEAM_REQUIREMENT": "Tiimin vaatimus", + "CLIENT_REQUIREMENT": "Asiakkaan vaatimus", + "FINISH_DATE": "Loppupvm" + } + }, + "COMMENTS": { + "DELETED_INFO": "{{user}} poisti kommentin {{date}}", + "TITLE": "Kommentit", + "COMMENT": "Kommentti", + "TYPE_NEW_COMMENT": "Lisää uusi kommentti tässä", + "SHOW_DELETED": "Näytä poistettu kommentti", + "HIDE_DELETED": "Piilota poistettu kommentti", + "RESTORE": "Palauta kommentti" + }, + "ACTIVITY": { + "SHOW_ACTIVITY": "Näytä tapahtumat", + "SHOW_MORE": "+ Näytä edelliset rivit ({{showMore}} lisää)", + "TITLE": "Aktiivisuus", + "REMOVED": "poistettu", + "ADDED": "lisätty", + "US_POINTS": "Kt pisteet ({{name}})", + "NEW_ATTACHMENT": "uusi liite", + "DELETED_ATTACHMENT": "poistettu liite", + "UPDATED_ATTACHMENT": "päivitetty liite {{filename}}", + "DELETED_CUSTOM_ATTRIBUTE": "poista oma attribuutti", + "SIZE_CHANGE": "Tehty {size, plural, one{muutos} other{# muutosta}}", + "VALUES": { + "YES": "Kyllä", + "NO": "ei", + "EMPTY": "tyhjä", + "UNASSIGNED": "ilman tekijää" + }, + "FIELDS": { + "SUBJECT": "aihe", + "NAME": "nimi", + "DESCRIPTION": "kuvaus", + "CONTENT": "sisältö", + "STATUS": "tila", + "IS_CLOSED": "on suljettu", + "FINISH_DATE": "loppupvm", + "TYPE": "tyyppi", + "PRIORITY": "tärkeys", + "SEVERITY": "vakavuus", + "ASSIGNED_TO": "tekijä on", + "WATCHERS": "vahdit", + "MILESTONE": "kierros", + "USER_STORY": "käyttäjätarina", + "PROJECT": "projekti", + "IS_BLOCKED": "on estetty", + "BLOCKED_NOTE": "estetty muistiinpano", + "POINTS": "pisteet", + "CLIENT_REQUIREMENT": "asiakkaan vaatimus", + "TEAM_REQUIREMENT": "tiimin vaatimus", + "IS_IOCAINE": "on hidaste", + "TAGS": "avainsanat", + "ATTACHMENTS": "liitteet", + "IS_DEPRECATED": "on vanhentunut", + "ORDER": "järjestys", + "BACKLOG_ORDER": "odottavien järjestys", + "SPRINT_ORDER": "kierroksen järjestys", + "KANBAN_ORDER": "kanban järjestys", + "TASKBOARD_ORDER": "Tehtävätaulun järjestys", + "US_ORDER": "kt järjestys" + } + }, + "BACKLOG": { + "SECTION_NAME": "Odottavat", + "MOVE_US_TO_CURRENT_SPRINT": "Siirrä nykyiseen kierrokseen", + "SHOW_FILTERS": "Näytä suodattimet", + "SHOW_TAGS": "Näytä avainsanat", + "EMPTY": "Odottavien lista on tyhjä!", + "CREATE_NEW_US": "Luo uusi Kt", + "CREATE_NEW_US_EMPTY_HELP": "Voit haluta lisätä uuden käyttäjätarinan", + "EXCESS_OF_POINTS": "Pisteiden ylimäärä", + "PENDING_POINTS": "Odottavat pisteet", + "CLOSED_POINTS": "suljettu", + "COMPACT_SPRINT": "Kompakti kierros", + "GO_TO_TASKBOARD": "Siirry tehtävätauluun {{::name}}", + "EDIT_SPRINT": "Muokkaa kierrosta", + "TOTAL_POINTS": "yhteensä", + "STATUS_NAME": "Tilan nimi", + "SORTABLE_FILTER_ERROR": "Et voi viedä odottaviin, kun suodattimet ovat auki", + "DOOMLINE": "Projektin laajuus [Doomline]", + "CHART": { + "XAXIS_LABEL": "Kierrokset", + "YAXIS_LABEL": "Pisteet", + "OPTIMAL": "Optimaaliset odottavat pisteet kierokselle {{xval}} ovat {{yval}}", + "REAL": "Todelliset odottavat pisteet kierrokselle {{xval}} ovat {{yval}}", + "INCREMENT_TEAM": "Lisätyt tiimin vaatimat pisteet kierrokselle {{xval}} ovat {{yval}}", + "INCREMENT_CLIENT": "Lisätyt asiakkaan vaatimat pisteet kierrokselle {{xval}} ovat {{yval}}" + }, + "TAGS": { + "SHOW": "Näytä avainsanat", + "HIDE": "Piilota avainsanat" + }, + "TABLE": { + "COLUMN_US": "Käyttäjätarinat", + "TITLE_COLUMN_POINTS": "Valitse näkymä roolille" + }, + "SPRINT_SUMMARY": { + "TOTAL_POINTS": "yhteensä
pistettä", + "COMPLETED_POINTS": "valmiina
pistettä", + "OPEN_TASKS": "avaa
tehtävät", + "CLOSED_TASKS": "suljettu
tehtävää", + "IOCAINE_DOSES": "hidastetia
annosta", + "SHOW_STATISTICS_TITLE": "Näytä tilastot" + }, + "SUMMARY": { + "PROJECT_POINTS": "projekti
pistettä", + "DEFINED_POINTS": "määritellyt
pisteet", + "CLOSED_POINTS": "suljettu
pistettä", + "POINTS_PER_SPRINT": "pisettä/
kierros" + }, + "FILTERS": { + "TITLE": "Suodattimet", + "REMOVE": "Poista suodattimet", + "SHOW": "Näytä suodattimet", + "FILTER_CATEGORY_STATUS": "Tila", + "FILTER_CATEGORY_TAGS": "Avainsanat" + }, + "SPRINTS": { + "TITLE": "KIERROKSET", + "LINK_TASKBOARD": "Kierroksien tehtävätaulu", + "TITLE_LINK_TASKBOARD": "Siirry tehtävätauluun {{name}}", + "NUMBER_SPRINTS": "
kierrokset", + "TITLE_ACTION_NEW_SPRINT": "+ Uusi kierros", + "ACTION_NEW_SPRINT": "+ Uusi kierros", + "ACTION_SHOW_CLOSED_SPRINTS": "Näytä suljetut kierrokset", + "ACTION_HIDE_CLOSED_SPRINTS": "Piilota suljetut kierrokset" + } + }, + "ERROR": { + "TEXT1": "Jotain tapahtui ja Oompa Loompas työskentelevät sen parissa.", + "TEXT2": "Lataa sivu uudestaan", + "NOT_FOUND": "Ei löytynyt", + "NOT_FOUND_TEXT": "Virhe 404. Sivua ei löydy. Palaa takaisin TAIGA etusivulle ja katso löydätkö haluamasi sieltä.", + "PERMISSION_DENIED": "Ei oikeutta", + "PERMISSION_DENIED_CODE": "Virhe 403.", + "VERSION_ERROR": "Joku Taigassa on päivittänyt tätä ennen sinua. Muutoksiasi ei voida tallentaa. Lataa sivu uudestaan ja korjaa tilanne." + }, + "TASKBOARD": { + "SECTION_NAME": "Tehtävätaulu", + "TITLE_ACTION_ADD": "Lisää uusi tehtävä", + "TITLE_ACTION_ADD_BULK": "Lisää monta tehtävää", + "TITLE_ACTION_ASSIGN": "Valitse tekijä", + "TITLE_ACTION_EDIT": "Muokkaa tehtävää", + "TABLE": { + "COLUMN": "Käyttäjätarina", + "TITLE_ACTION_FOLD": "Kavenna sarake", + "TITLE_ACTION_UNFOLD": "Laajenna sarake", + "TITLE_ACTION_FOLD_ROW": "Kavenna rivi", + "TITLE_ACTION_UNFOLD_ROW": "Laajenna rivi", + "FIELD_POINTS": "pisteet", + "ROW_UNASSIGED_TASKS_TITLE": "Poista tekijä" + }, + "CHARTS": { + "XAXIS_LABEL": "Päivät", + "YAXIS_LABEL": "Pisteet", + "OPTIMAL": "Optimaaliset odottavat pisteet {{formattedDate}} ovat {{roundedValue}}", + "REAL": "Todelliset odottavat pisteet {{formattedDate}} ovat {{roundedValue}}" + } + }, + "TASK": { + "LINK_TASKBOARD": "Tehtävätaulu", + "TITLE_LINK_TASKBOARD": "Siirry tehtävätauluun", + "PLACEHOLDER_SUBJECT": "Anna tehtävän aihe", + "TITLE_SELECT_STATUS": "Tilan nimi", + "OWNER_US": "Tehtävä kuuluu käyttäjälle ", + "TITLE_LINK_GO_OWNER": "Siirry käyttäjätarinaan", + "ORIGIN_US": "Tämä tehtävä on luotu", + "TITLE_LINK_GO_ORIGIN": "Siirry käyttäjätarinaan", + "BLOCKED": "Tämä tehtävä on suljettu", + "PREVIOUS": "edellinen tehtävä", + "NEXT": "seuraava tehtävä", + "TITLE_DELETE_ACTION": "Poista tehtävä", + "LIGHTBOX_TITLE_BLOKING_TASK": "Estävä tehtävä", + "FIELDS": { + "MILESTONE": "Kierros", + "USER_STORY": "Käyttäjätarina", + "IS_IOCAINE": "On hidaste" + }, + "ACTION_IOCAINE": "Hidaste", + "TITLE_ACTION_IOCAINE": "Rasittaako tehtävä? Kerro muillekin klikkaamalla hidasteen kuvaketta. Sattaa myös helpottaa jatkossa jos kerrot asiasta vähitellen." + }, + "NOTIFICATION": { + "OK": "Kaikki on kunnossa", + "WARNING": "Oops, jotain tapahtui...", + "WARNING_TEXT": "Oompa Loompas eivät pystyneet tallentamaan muutoksiasi!", + "SAVED": "Oompa Loompas tallensivat kaikki muutoksesi!", + "CLOSE": "Sulje ilmoitus", + "MAIL": "Ilmoitukset sähköpostilla", + "ASK_DELETE": "Oletko varma että haluat poistaa tämän?" + }, + "CANCEL_ACCOUNT": { + "TITLE": "Peru tunnuksesi", + "SUBTITLE": "Olemme pahoillamme että jätät Taigan. Toivottavasti nautit oleskelusta :)", + "PLACEHOLDER_INPUT_TOKEN": "peru tunnus tokeni", + "ACTION_LEAVING": "Kyllä, olen lähdössä!", + "SUCCESS": " Oompa Loompas poistivat tunnuksesi" + }, + "CHANGE_EMAIL_FORM": { + "TITLE": "Muuta sähköpostisi", + "SUBTITLE": "Vielä yksi klikki ja sähköpostisi on päivitetty!", + "PLACEHOLDER_INPUT_TOKEN": "muuta sähköposti-tokenia", + "ACTION_CHANGE_EMAIL": "Muuta sähköpostisi", + "SUCCESS": "Oompa Loompas päivittivät sähköpostisi" + }, + "CHANGE_PASSWORD_RECOVERY_FORM": { + "TITLE": "Luo uusi pääsy Taigaan", + "SUBTITLE": "Rautapitoinen ruoka on hyväksi aivoille :P", + "PLACEHOLDER_RECOVER_PASSWORD_TOKEN": "Palauta sähköposti-tokeni", + "LINK_NEED_TOKEN": "Tarvitsetko yhden?", + "TITLE_LINK_NEED_TOKEN": "Tarvitsitko tokenia palauttaakseni salasanan koska unohdit sen?", + "PLACEHOLDER_NEW_PASSWORD": "Uusi salasana", + "PLACEHOLDER_RE_TYPE_NEW_PASSWORD": "Anna salasana uudelleen", + "ACTION_RESET_PASSWORD": "Uusi salsanasi", + "SUCCESS": "Oompa Loompas tallensivat uuden salasanasi.
Yritä kirjautua sisään sillä." + }, + "FORGOT_PASSWORD_FORM": { + "TITLE": "Oops, unohditko salasanasi?", + "SUBTITLE": "Anna käyttäjänimesi tai sähköpostisi saadaksesi uuden", + "PLACEHOLDER_FIELD": "Käyttäjänimi tai sähköposti", + "ACTION_RESET_PASSWORD": "Uusi salsanasi", + "LINK_CANCEL": "Vie minut takaisin, muistan sen.", + "SUCCESS": "Tarkista sähköpostisi
Lähetimme ohjeet
{{email}}
uuden salasanan asettamiseen", + "ERROR": "Oompa Loompas sanovat että käyttäjänimesi tai sähköpostisi tai salasanasi on väärä." + }, + "LOGIN_COMMON": { + "HEADER": "Minulla on jo Taiga tunnus", + "PLACEHOLDER_AUTH_NAME": "Käyttäjänimi tai sähköposti (kirjainkoko merkitsevä)", + "LINK_FORGOT_PASSWORD": "Unohditko?", + "TITLE_LINK_FORGOT_PASSWORD": "Unohditko salasanasi?", + "ACTION_ENTER": "Sisään", + "ACTION_SIGN_IN": "Kirjaudu sisään", + "PLACEHOLDER_AUTH_PASSWORD": "Salasana (kirjainkoko merkitsevä)" + }, + "LOGIN_FORM": { + "ERROR_AUTH_INCORRECT": "Oompa Loompas sanovat että käyttäjänimesi tai sähköpostisi tai salasanasi on väärä.", + "ERROR_GENERIC": "Oompa Loompas havaitsivat virheen", + "SUCCESS": "Oompa Loompas ovat onnellisia, tervetuloa Taigaan." + }, + "INVITATION_LOGIN_FORM": { + "NOT_FOUND": "Ooops, meillä on ongelma
Our Oompa Loompas eivät löydä kutsuasi.", + "SUCCESS": "Olet onnistuneesti liittynyt projektiin {{project_name}}. Tervetuloa!", + "ERROR": "Oompa Loompas sanovat että käyttäjänimesi tai sähköpostisi tai salasanasi on väärä." + }, + "REGISTER_FORM": { + "PLACEHOLDER_NAME": "Anna käyttäjänimi (kirjainkoko on merkitsevä)", + "PLACEHOLDER_FULL_NAME": "Anna koko nimesi", + "PLACEHOLDER_EMAIL": "Sähköpostisi", + "PLACEHOLDER_PASSWORD": "Anna salasana (kirjainkoko merkitsevä)", + "ACTION_SIGN_UP": "Kirjaudu sisään", + "TITLE_LINK_LOGIN": "Kirjaudu sisään", + "LINK_LOGIN": "Oletko jo rekisteröitynyt? Kirjaudu sisään" + }, + "ISSUES": { + "LIST_SECTION_NAME": "Ongelmat", + "SECTION_NAME": "Ongelman tiedot", + "ACTION_NEW_ISSUE": "+ UUSI ONGELMA", + "ACTION_PROMOTE_TO_US": "Liitä käyttäjätarinaan", + "PLACEHOLDER_FILTER_NAME": "Anna suodattimen nimi ja paina enter", + "PROMOTED": "Tämä ongelma on liitetty Kthen:", + "EXTERNAL_REFERENCE": "Tämä ongelma on luotu ", + "GO_TO_EXTERNAL_REFERENCE": "Palaa alkuun", + "BLOCKED": "Tämä ongelma on estetty", + "TITLE_PREVIOUS_ISSUE": "edellinen ongelma", + "TITLE_NEXT_ISSUE": "seuraava ongelma", + "ACTION_DELETE": "Poista ongelma", + "LIGHTBOX_TITLE_BLOKING_ISSUE": "Estävä ongelma", + "CONFIRM_PROMOTE": { + "TITLE": "Liitä tämä ongelma uuteen käyttäjätarinaan", + "MESSAGE": "Haluatko varmasti lisätä uuden käyttäjätarinan tästä ongelmasta?" + }, + "FILTERS": { + "TITLE": "Suodattimet", + "INPUT_SEARCH_PLACEHOLDER": "Otsikko tai viittaus", + "TITLE_ACTION_SEARCH": "Hae", + "ACTION_SAVE_CUSTOM_FILTER": "tallenna omaksi suodattimeksi", + "BREADCRUMB": "Suodattimet", + "TITLE_BREADCRUMB": "Suodattimet", + "CATEGORIES": { + "TYPE": "Tyyppi", + "STATUS": "Tila", + "SEVERITY": "Vakavuus", + "PRIORITIES": "Tärkeydet", + "TAGS": "Avainsanat", + "ASSIGNED_TO": "Tekijä", + "CREATED_BY": "Luoja", + "CUSTOM_FILTERS": "Omat suodattimet" + }, + "CONFIRM_DELETE": { + "TITLE": "Poista oma suodatin", + "MESSAGE": "oma suodatin '{{customFilterName}}'" + } + }, + "TABLE": { + "COLUMNS": { + "TYPE": "Tyyppi", + "SEVERITY": "Vakavuus", + "PRIORITY": "Tärkeys", + "SUBJECT": "Aihe", + "STATUS": "Tila", + "CREATED": "Luotu", + "ASSIGNED_TO": "Tekijä" + }, + "TITLE_ACTION_CHANGE_STATUS": "Muuta tilaa", + "TITLE_ACTION_ASSIGNED_TO": "Tekijä", + "EMPTY": { + "TITLE": "Ei raportoitavia ongelmia:-)", + "SUBTITLE": "Löysitkö ongelman?", + "ACTION_CREATE_ISSUE": "Luo uusi ongelma" + } + } + }, + "KANBAN": { + "SECTION_NAME": "Kanban", + "TITLE_ACTION_FOLD": "Kavenna sarake", + "TITLE_ACTION_UNFOLD": "Laajenna sarake", + "TITLE_ACTION_FOLD_CARDS": "Kavenna kortit", + "TITLE_ACTION_UNFOLD_CARDS": "Laajenna kortit", + "TITLE_ACTION_ADD_US": "Lisää uusi käyttäjätarina", + "TITLE_ACTION_ADD_BULK": "Lisää monta", + "ACTION_SHOW_ARCHIVED": "Näytä arkisto", + "ACTION_HIDE_ARCHIVED": "Piilota arkisto", + "HIDDEN_USER_STORIES": "Käyttäjätarinat tällä alueella ovat oletuksena piilotettuna", + "ARCHIVED": "Olet arkistoitu", + "UNDO_ARCHIVED": "Raahaa ja pudota uudelleen peruaksesi" + }, + "SEARCH": { + "FILTER_USER_STORIES": "Käyttäjätarinat", + "FILTER_ISSUES": "Ongelmat", + "FILTER_TASKS": "Tehtävät", + "FILTER_WIKI": "Wiki-sivut", + "PLACEHOLDER_SEARCH": "Etsi täältä...", + "TITLE_ACTION_SEARCH": "hae", + "EMPTY_TITLE": "Mitään ei löytynyt.", + "EMPTY_DESCRIPTION": "Kokeile ylempiä välilehtiä ja hae uudestaan" + }, + "TEAM": { + "SECTION_NAME": "Tiimi", + "APP_TITLE": "TIIMI - {{projectName}}", + "PLACEHOLDER_INPUT_SEARCH": "Etsi koko nimellä...", + "COLUMN_MR_WOLF": "Mr. Wolf", + "EXPLANATION_COLUMN_MR_WOLF": "Suljetut ongelmat", + "COLUMN_IOCAINE": "Hidasteiden syöjä", + "EXPLANATION_COLUMN_IOCAINE": "Kertyneet hidasteet", + "COLUMN_CERVANTES": "Cervantes", + "EXPLANATION_COLUMN_CERVANTES": "Wiki-sivuja muokattu", + "COLUMN_BUG_HUNTER": "Virheiden metsästäjä", + "EXPLANATION_COLUMN_BUG_HUNTER": "Ongelmia raportoitu", + "COLUMN_NIGHT_SHIFT": "Yövuoro", + "EXPLANATION_COLUMN_NIGHT_SHIFT": "Suljetut tehtävät", + "COLUMN_TOTAL_POWER": "Kokonaisvoima", + "EXPLANATION_COLUMN_TOTAL_POWER": "Kokonaispisteet", + "SECTION_TITLE_TEAM": "Tiimi >", + "SECTION_FILTER_ALL": "Kaikki", + "CONFIRM_LEAVE_PROJECT": "Oletko varma että haluat poistua projektista?", + "ACTION_LEAVE_PROJECT": "Poistu projektista" + }, + "CHANGE_PASSWORD": { + "SECTION_NAME": "Muuta salasanaa", + "FIELD_CURRENT_PASSWORD": "Nykyinen salasana", + "PLACEHOLDER_CURRENT_PASSWORD": "Nykyinen salasanasi (tai on tyhjä jos sinulla ei vielä ole)", + "FIELD_NEW_PASSWORD": "Uusi salasana", + "PLACEHOLDER_NEW_PASSWORD": "Anna uusi salasana", + "FIELD_RETYPE_PASSWORD": "Anna salasana uudelleen", + "PLACEHOLDER_RETYPE_PASSWORD": "Anna salasana uudelleen", + "ERROR_PASSWORD_MATCH": "Salasanat eivät täsmää" + }, + "USER_SETTINGS": { + "AVATAR_MAX_SIZE": "Maksimi koko {{maxFileSize}}", + "MENU": { + "SECTION_TITLE": "Käyttäjän asetukset", + "USER_PROFILE": "Käyttäjän profiili", + "CHANGE_PASSWORD": "Muuta salasanaa", + "EMAIL_NOTIFICATIONS": "Sähköposti-ilmoitukset" + }, + "NOTIFICATIONS": { + "SECTION_NAME": "Sähköposti-ilmoitukset", + "COLUMN_PROJECT": "Projekti", + "COLUMN_RECEIVE_ALL": "Vastaanota kaikki", + "COLUMN_ONLY_INVOLVED": "Ainoa osallinen", + "COLUMN_NO_NOTIFICATIONS": "Ei ilmoituksia", + "OPTION_ALL": "Kaikki", + "OPTION_INVOLVED": "Osallisena", + "OPTION_NONE": "Ei yhtään" + }, + "POPOVER": { + "USER_PROFILE": "Käyttäjäprofiili", + "CHANGE_PASSWORD": "Muuta salasanaa", + "NOTIFICATIONS": "Ilmoitukset", + "FEEDBACK": "Palaute", + "TITLE_AVATAR": "Käyttäjän asetukset" + } + }, + "USER_PROFILE": { + "IMAGE_HELP": "Kuvan kooksi astetaan 80x80px.
", + "ACTION_CHANGE_IMAGE": "Muuta", + "ACTION_USE_GRAVATAR": "Käytä gravatar kuvaa", + "ACTION_DELETE_ACCOUNT": "Poista Taiga-tunnus", + "CHANGE_EMAIL_SUCCESS": "Tarkista sähköpostisi!
Lähetimme ohjeet
{{email}}
uuden osoitteen asettamiseen", + "CHANGE_PHOTO": "Muuta kuva", + "FIELD": { + "USERNAME": "Käyttäjänimi", + "EMAIL": "Sähköposti", + "FULL_NAME": "Koko nimi", + "PLACEHOLDER_FULL_NAME": "Anna koko nimesi", + "BIO": "Bio", + "PLACEHOLDER_BIO": "Kerro jotain itsestäsi", + "LANGUAGE": "Kieli", + "LANGUAGE_DEFAULT": "-- käytä oletuskieltä --" + } + }, + "WIZARD": { + "SECTION_TITLE_CHOOSE_TEMPLATE": "Valitse pohja", + "CHOOSE_TEMPLATE_TEXT": "Mikä pohja sopii paremmin projektillesi?", + "SECTION_TITLE_CREATE_PROJECT": "Luo projekti", + "CREATE_PROJECT_TEXT": "Täysin koskematon. Jännittävää!", + "PROGRESS_TEMPLATE_SELECTION": "Pohjan valinta", + "PROGRESS_NAME_DESCRIPTION": "Nimi ja kuvaus" + }, + "WIKI": { + "PLACEHOLDER_PAGE": "Kirjoita wiki-sivu", + "REMOVE": "Poista tämä wiki-sivu", + "DELETE_LIGHTBOX_TITLE": "Poista wiki-sivu", + "NAVIGATION": { + "SECTION_NAME": "Linkit", + "ACTION_ADD_LINK": "Lisää linkki" + }, + "SUMMARY": { + "TIMES_EDITED": "kertaa
muokattu", + "LAST_EDIT": "viimeinen
muokkaus", + "LAST_MODIFICATION": "viimeinen muokkaus" + } + } +} \ No newline at end of file From e1e89ad48ff821f2b1adcf44c8ab6885bada3b8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 29 Apr 2015 14:20:50 +0200 Subject: [PATCH 100/194] [i18n] Fix watchers component --- app/coffee/modules/common/components.coffee | 6 +++--- app/locales/locale-en.json | 3 ++- app/locales/locale-es.json | 3 ++- app/locales/locale-fi.json | 3 ++- app/locales/locale-fr.json | 6 ++++-- app/partials/common/components/watchers.jade | 2 +- 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/coffee/modules/common/components.coffee b/app/coffee/modules/common/components.coffee index 73bb915f..a9a19965 100644 --- a/app/coffee/modules/common/components.coffee +++ b/app/coffee/modules/common/components.coffee @@ -156,7 +156,7 @@ module.directive("tgCreatedByDisplay", ["$tgTemplate", "$compile", CreatedByDisp ## Watchers directive ############################################################################# -WatchersDirective = ($rootscope, $confirm, $repo, $qqueue, $template, $compile) -> +WatchersDirective = ($rootscope, $confirm, $repo, $qqueue, $template, $compile, $translate) -> # You have to include a div with the tg-lb-watchers directive in the page # where use this directive template = $template.get("common/components/watchers.html", true) @@ -215,7 +215,7 @@ WatchersDirective = ($rootscope, $confirm, $repo, $qqueue, $template, $compile) target = angular.element(event.currentTarget) watcherId = target.data("watcher-id") - title = "Delete watcher" + title = $translate.instant("COMMON.WATCHERS.TITLE_LIGHTBOX_DELETE_WARTCHER") message = $scope.usersById[watcherId].full_name_display $confirm.askOnDelete(title, message).then (finish) => @@ -250,7 +250,7 @@ WatchersDirective = ($rootscope, $confirm, $repo, $qqueue, $template, $compile) return {link:link, require:"ngModel"} module.directive("tgWatchers", ["$rootScope", "$tgConfirm", "$tgRepo", "$tgQqueue", "$tgTemplate", "$compile", - WatchersDirective]) + "$translate", WatchersDirective]) ############################################################################# diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 61e7dcdd..905183df 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -77,7 +77,8 @@ "WATCHERS": { "ADD": "Add watcher", "TITLE": "watchers", - "DELETE": "delete watcher" + "DELETE": "Delete watcher", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "Delete watcher..." }, "CUSTOM_ATTRIBUTES": { "CUSTOM_FIELDS": "Custom Fields", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 3bbdfdc2..6c6a7381 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -75,7 +75,8 @@ "WATCHERS": { "ADD": "Añadir un observador...", "TITLE": "observadores", - "DELETE": "eliminar observador" + "DELETE": "Eliminar el observador", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "Eliminar el observador..." }, "CUSTOM_ATTRIBUTES": { "CUSTOM_FIELDS": "Atributo Personalizados", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index 3354da20..dfb3aeca 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -75,7 +75,8 @@ "WATCHERS": { "ADD": "Lisää vahti", "TITLE": "vahdit", - "DELETE": "poista vahti" + "DELETE": "Poista vahti", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "Poista vahti..." }, "CUSTOM_ATTRIBUTES": { "CUSTOM_FIELDS": "Omat kentät", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 015e3ad3..9a4b9867 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -65,7 +65,8 @@ "DELETE_ASSIGNMENT": "Supprimer l'affectation", "REMOVE_ASSIGNED": "Supprimer l'affectation", "TOO_MANY": "...trop d'utilisateurs ; filtrez davantage", - "CONFIRM_UNASSIGNED": "Etes-vous sûr de vouloir continuer sans affectation ?" + "CONFIRM_UNASSIGNED": "Etes-vous sûr de vouloir continuer sans affectation ?", + "TITLE_ACTION_EDIT_ASSIGNMENT": "Edit assignment" }, "STATUS": { "CLOSED": "Clos", @@ -74,7 +75,8 @@ "WATCHERS": { "ADD": "Ajouter un observateur", "TITLE": "Observateurs", - "DELETE": "supprimer l'observateur" + "DELETE": "Supprimer l'observateur", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "Supprimer l'observateur..." }, "CUSTOM_ATTRIBUTES": { "CUSTOM_FIELDS": "Champs personnalisés", diff --git a/app/partials/common/components/watchers.jade b/app/partials/common/components/watchers.jade index e83fc025..b11a4aeb 100644 --- a/app/partials/common/components/watchers.jade +++ b/app/partials/common/components/watchers.jade @@ -16,7 +16,7 @@ span <%- watcher.full_name_display %> <% if(isEditable){ %> - a.icon.icon-delete(data-watcher-id!="<%- watcher.id %>" href="" title="{{'WATCHERS.DELETE' | translate}}") + a.icon.icon-delete(data-watcher-id!="<%- watcher.id %>" href="" title="{{'COMMON.WATCHERS.DELETE' | translate}}") <% }; %> <% } %> <% }); %> From fdc6b83f649c056a846315f4238d1c57179231e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 29 Apr 2015 21:26:18 +0200 Subject: [PATCH 101/194] [i18n] Attachments --- app/coffee/modules/common/attachments.coffee | 28 ++++++++++++-------- app/locales/locale-en.json | 6 ++++- app/locales/locale-es.json | 6 ++++- app/locales/locale-fi.json | 6 ++++- app/locales/locale-fr.json | 6 ++++- app/partials/attachment/attachment-edit.jade | 2 +- app/partials/attachment/attachment.jade | 4 +-- 7 files changed, 40 insertions(+), 18 deletions(-) diff --git a/app/coffee/modules/common/attachments.coffee b/app/coffee/modules/common/attachments.coffee index cd575c55..06cc2920 100644 --- a/app/coffee/modules/common/attachments.coffee +++ b/app/coffee/modules/common/attachments.coffee @@ -28,9 +28,9 @@ module = angular.module("taigaCommon") class AttachmentsController extends taiga.Controller - @.$inject = ["$scope", "$rootScope", "$tgRepo", "$tgResources", "$tgConfirm", "$q"] + @.$inject = ["$scope", "$rootScope", "$tgRepo", "$tgResources", "$tgConfirm", "$q", "$translate"] - constructor: (@scope, @rootscope, @repo, @rs, @confirm, @q) -> + constructor: (@scope, @rootscope, @repo, @rs, @confirm, @q, @translate) -> bindMethods(@) @.type = null @.objectId = null @@ -75,10 +75,13 @@ class AttachmentsController extends taiga.Controller promise = promise.then null, (data) => @scope.$emit("attachments:size-error") if data.status == 413 + index = @.uploadingAttachments.indexOf(attachment) @.uploadingAttachments.splice(index, 1) - @confirm.notify("error", "We have not been able to upload '#{attachment.name}'. - #{data.data._error_message}") + + message = @translate.instant("ATTACHMENT.ERROR_UPLOAD_ATTACHMENT", { + fileName: attachment.name, errorMessage: data.data._error_message}) + @confirm.notify("error", message) return @q.reject(data) return promise @@ -130,8 +133,8 @@ class AttachmentsController extends taiga.Controller # Remove one concrete attachment. removeAttachment: (attachment) -> - title = "Delete attachment" #TODO: i18in - message = "the attachment '#{attachment.name}'" #TODO: i18in + title = @translate.instant("ATTACHMENT.TITLE_LIGHTBOX_DELETE_ATTACHMENT") + message = @translate.instant("ATTACHMENT.MSG_LIGHTBOX_DELETE_ATTACHMENT", {fileName: attachment.name}) return @confirm.askOnDelete(title, message).then (finish) => onSuccess = => @@ -143,7 +146,8 @@ class AttachmentsController extends taiga.Controller onError = => finish(false) - @confirm.notify("error", null, "We have not been able to delete #{message}.") + message = @translate.instant("ATTACHMENT.ERROR_DELETE_ATTACHMENT", {errorMessage: message}) + @confirm.notify("error", null, message) return @q.reject() return @repo.remove(attachment).then(onSuccess, onError) @@ -242,7 +246,7 @@ AttachmentsDirective = ($config, $confirm, $templates) -> module.directive("tgAttachments", ["$tgConfig", "$tgConfirm", "$tgTemplate", AttachmentsDirective]) -AttachmentDirective = ($template, $compile) -> +AttachmentDirective = ($template, $compile, $translate) -> template = $template.get("attachment/attachment.html", true) templateEdit = $template.get("attachment/attachment-edit.html", true) @@ -254,14 +258,16 @@ AttachmentDirective = ($template, $compile) -> ctx = { id: attachment.id name: attachment.name - created_date: moment(attachment.created_date).format("ATTACHMENT.DATE") + title : $translate.instant("ATTACHMENT.TITLE", { + fileName: attachment.name, + date: moment(attachment.created_date).format($translate.instant("ATTACHMENT.DATE"))}) url: attachment.url size: sizeFormat(attachment.size) description: attachment.description isDeprecated: attachment.is_deprecated modifyPermission: modifyPermission } - + console.log ctx.title if edit html = $compile(templateEdit(ctx))($scope) else @@ -322,4 +328,4 @@ AttachmentDirective = ($template, $compile) -> restrict: "AE" } -module.directive("tgAttachment", ["$tgTemplate", "$compile", AttachmentDirective]) +module.directive("tgAttachment", ["$tgTemplate", "$compile", "$translate", AttachmentDirective]) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 905183df..a9e6b873 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -173,7 +173,7 @@ }, "ATTACHMENT": { "SECTION_NAME": "attachments", - "TITLE": "<%- name %> uploaded on <%- created_date %>", + "TITLE": "{{ fileName }} uploaded on {{ date }}", "DESCIPTION": "Type a short description", "DEPRECATED_FILE": "Deprecated?", "ADD": "Add new attachment. <%- maxFileSizeMsg %>", @@ -183,6 +183,10 @@ "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} deprecated)", "MAX_UPLOAD_SIZE": "Maximum upload size is {{maxFileSize}}", "DATE": "DD MMM YYYY [at] hh:mm", + "ERROR_UPLOAD_ATTACHMENT": "We have not been able to upload '{{fileName}}'. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Delete attachment...", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "the attachment '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": "We have not been able to delete: {{errorMessage}}", "FIELDS": { "IS_DEPRECATED": "is deprecated" } diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 6c6a7381..f46a5bc3 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -171,7 +171,7 @@ }, "ATTACHMENT": { "SECTION_NAME": "adjuntos", - "TITLE": "<%- name %> Subido en <%- created_date %>", + "TITLE": "{{ fileName }} subido el {{ date }}", "DESCIPTION": "Escribe una descripción corta", "DEPRECATED_FILE": "¿Desactualizado?", "ADD": "Agrega nuevos adjunto", @@ -181,6 +181,10 @@ "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} obsoleto)", "MAX_UPLOAD_SIZE": "El tamaño máximo de subida es de {{maxFileSize}}", "DATE": "DD MMM YYYY [a las] hh:mm\n", + "ERROR_UPLOAD_ATTACHMENT": "No hemos podido subir el fichero '{{fileName}}'. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Borrar adjunto...", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "el adjunto '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": "No hemos podido borrarlo: {{errorMessage}}", "FIELDS": { "IS_DEPRECATED": "Está desactualizado" } diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index dfb3aeca..3691f941 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -171,7 +171,7 @@ }, "ATTACHMENT": { "SECTION_NAME": "liitteet", - "TITLE": "<%- name %> ladattu <%- created_date %>", + "TITLE": "{{ fileName }} ladattu {{ date }}\n", "DESCIPTION": "Kirjoita lyhyt kuvaus", "DEPRECATED_FILE": "Vanhentunut?", "ADD": "Lisää liite. <%- maxFileSizeMsg %>", @@ -181,6 +181,10 @@ "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} vanhentunutta)", "MAX_UPLOAD_SIZE": "Maksimi tiedoston koko {{maxFileSize}}", "DATE": "DD MMM YYYY - hh:mm", + "ERROR_UPLOAD_ATTACHMENT": "We have not been able to upload '{{fileName}}'. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Delete attachment...", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "the attachment '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": "We have not been able to delete: {{errorMessage}}", "FIELDS": { "IS_DEPRECATED": "on vanhentunut" } diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 9a4b9867..5554b4ca 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -171,7 +171,7 @@ }, "ATTACHMENT": { "SECTION_NAME": "pièces jointes", - "TITLE": "<%- name %> transmis le <%- created_date %>", + "TITLE": "{{ fileName }} transmis le {{ date }}\n", "DESCIPTION": "Entrez une courte description", "DEPRECATED_FILE": "Obsolète?", "ADD": "Ajouter une pièce jointe. <%- maxFileSizeMsg %>", @@ -181,6 +181,10 @@ "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} obsolète)", "MAX_UPLOAD_SIZE": "La taille maximum d'upload est {{maxFileSize}}", "DATE": "DD MMM YYYY [at] hh:mm", + "ERROR_UPLOAD_ATTACHMENT": "We have not been able to upload '{{fileName}}'. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Delete attachment...", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "the attachment '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": "We have not been able to delete: {{errorMessage}}", "FIELDS": { "IS_DEPRECATED": "est obsolète" } diff --git a/app/partials/attachment/attachment-edit.jade b/app/partials/attachment/attachment-edit.jade index 6d810b52..ceb287ad 100644 --- a/app/partials/attachment/attachment-edit.jade +++ b/app/partials/attachment/attachment-edit.jade @@ -1,6 +1,6 @@ .attachment-name span.icon.icon-document - a(href!="<%- url %>", title!="{{ 'ATTACHMENT.TITLE' | translate}}", target="_blank") + a(href!="<%- url %>", title!="<%- title %>", target="_blank") | <%- name %> .attachment-size span <%- size %> diff --git a/app/partials/attachment/attachment.jade b/app/partials/attachment/attachment.jade index 9c783580..b4476f51 100644 --- a/app/partials/attachment/attachment.jade +++ b/app/partials/attachment/attachment.jade @@ -1,5 +1,5 @@ .attachment-name - a(href!="<%- url %>", title!="{{ 'ATTACHMENT.TITLE' | translate}}", target="_blank") + a(href!="<%- url %>", title!="<%- title %>", target="_blank") span.icon.icon-documents span <%- name %> .attachment-size @@ -16,4 +16,4 @@ a.settings.icon.icon-edit(href="", title="{{'COMMON.EDIT' | translate}}") a.settings.icon.icon-delete(href="", title="{{'COMMON.DELETE' | translate}}") a.settings.icon.icon-drag-v(href="", title="{{'COMMON.DRAG' | translate}}") -<% } %> \ No newline at end of file +<% } %> From 3b55caf6f3839ab265699a17194b5cb6945efe12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 30 Apr 2015 13:35:40 +0200 Subject: [PATCH 102/194] [i18n] Moment, Date and Time --- app/coffee/app.coffee | 10 +- app/coffee/modules/auth.coffee | 9 +- app/coffee/modules/backlog/lightboxes.coffee | 12 ++- app/coffee/modules/backlog/sprints.coffee | 15 ++- app/coffee/modules/common/components.coffee | 21 ++-- app/coffee/modules/common/history.coffee | 14 +-- app/coffee/modules/taskboard/charts.coffee | 2 +- app/coffee/modules/user-settings/main.coffee | 2 - app/coffee/modules/wiki/main.coffee | 6 +- app/locales/locale-en.json | 10 +- app/locales/locale-es.json | 8 +- app/locales/locale-fi.json | 100 ++++++++++--------- app/locales/locale-fr.json | 8 +- 13 files changed, 127 insertions(+), 90 deletions(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 008382a4..c8f666f0 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -36,7 +36,8 @@ taiga.generateUniqueSessionIdentifier = -> taiga.sessionId = taiga.generateUniqueSessionIdentifier() -configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider, tgLoaderProvider, $compileProvider, $translateProvider) -> +configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider, tgLoaderProvider, + $compileProvider, $translateProvider) -> $routeProvider.when("/", {templateUrl: "project/projects.html", resolve: {loader: tgLoaderProvider.add()}}) @@ -231,16 +232,19 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven $compileProvider.debugInfoEnabled(window.taigaConfig.debugInfo || false) + preferedLangCode = window.taigaConfig.defaultLanguage || "en" $translateProvider .useStaticFilesLoader({ prefix: "/locales/locale-", suffix: ".json" }) .addInterpolation('$translateMessageFormatInterpolation') - .preferredLanguage(window.taigaConfig.defaultLanguage || "en") + .preferredLanguage(preferedLangCode) if not window.taigaConfig.debugInfo - $translateProvider.fallbackLanguage([window.taigaConfig.defaultLanguage || "en"]) + $translateProvider.fallbackLanguage(preferedLangCode) + + moment.lang(preferedLangCode) init = ($log, $config, $rootscope, $auth, $events, $analytics, $translate) -> diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index 70d4c4ab..1cd8d4d9 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -34,9 +34,10 @@ class AuthService extends taiga.Service "$tgModel", "$tgResources", "$tgHttp", - "$tgUrls"] + "$tgUrls", + "$translate"] - constructor: (@rootscope, @storage, @model, @rs, @http, @urls) -> + constructor: (@rootscope, @storage, @model, @rs, @http, @urls, @translate) -> super() getUser: -> @@ -56,6 +57,10 @@ class AuthService extends taiga.Service @storage.set("userInfo", user.getAttrs()) @rootscope.user = user + if @rootscope.user.lang + @translate.use(@rootscope.user.lang) + moment.lang(@rootscope.user.lang) + clear: -> @rootscope.auth = null @rootscope.user = null diff --git a/app/coffee/modules/backlog/lightboxes.coffee b/app/coffee/modules/backlog/lightboxes.coffee index d5b60f48..ed267727 100644 --- a/app/coffee/modules/backlog/lightboxes.coffee +++ b/app/coffee/modules/backlog/lightboxes.coffee @@ -33,6 +33,7 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, link = ($scope, $el, attrs) -> hasErrors = false createSprint = true + prettyDate = $translate.instant("BACKLOG.SPRINTS.DATE") $scope.sprint = { project: null @@ -117,18 +118,19 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, estimatedStart = moment($scope.sprint.estimated_start) else if lastSprint? estimatedStart = moment(lastSprint.estimated_finish) - $scope.sprint.estimated_start = estimatedStart.format("DD MMM YYYY") + $scope.sprint.estimated_start = estimatedStart.format(prettyDate) estimatedFinish = moment().add(2, "weeks") if $scope.sprint.estimated_finish estimatedFinish = moment($scope.sprint.estimated_finish) else if lastSprint? estimatedFinish = moment(lastSprint.estimated_finish).add(2, "weeks") - $scope.sprint.estimated_finish = estimatedFinish.format("DD MMM YYYY") + $scope.sprint.estimated_finish = estimatedFinish.format(prettyDate) lastSprintNameDom = $el.find(".last-sprint-name") if lastSprint?.name? - text = $translate.instant("LIGHTBOX.ADD_EDIT_SPRINT.LAST_SPRINT_NAME", {"lastSprint": lastSprint.name}) + text = $translate.instant("LIGHTBOX.ADD_EDIT_SPRINT.LAST_SPRINT_NAME", { + lastSprint: lastSprint.name}) lastSprintNameDom.html(text) $el.find(".delete-sprint").addClass("hidden") @@ -147,8 +149,8 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, createSprint = false $scope.$apply -> $scope.sprint = sprint - $scope.sprint.estimated_start = moment($scope.sprint.estimated_start).format("DD MMM YYYY") - $scope.sprint.estimated_finish = moment($scope.sprint.estimated_finish).format("DD MMM YYYY") + $scope.sprint.estimated_start = moment($scope.sprint.estimated_start).format(prettyDate) + $scope.sprint.estimated_finish = moment($scope.sprint.estimated_finish).format(prettyDate) $el.find(".delete-sprint").removeClass("hidden") diff --git a/app/coffee/modules/backlog/sprints.coffee b/app/coffee/modules/backlog/sprints.coffee index 572f40ab..09127a7d 100644 --- a/app/coffee/modules/backlog/sprints.coffee +++ b/app/coffee/modules/backlog/sprints.coffee @@ -85,10 +85,12 @@ module.directive("tgBacklogSprint", ["$tgRepo", "$rootScope", BacklogSprintDirec ## Sprint Header Directive ############################################################################# -BacklogSprintHeaderDirective = ($navUrls, $template, $compile) -> +BacklogSprintHeaderDirective = ($navUrls, $template, $compile, $translate) -> template = $template.get("backlog/sprint-header.html") link = ($scope, $el, $attrs, $model) -> + prettyDate = $translate.instant("BACKLOG.SPRINTS.DATE") + isEditable = -> return $scope.project.my_permissions.indexOf("modify_milestone") != -1 @@ -99,8 +101,8 @@ BacklogSprintHeaderDirective = ($navUrls, $template, $compile) -> taskboardUrl = $navUrls.resolve("project-taskboard", {project: $scope.project.slug, sprint: sprint.slug}) - start = moment(sprint.estimated_start).format("DD MMM YYYY") - finish = moment(sprint.estimated_finish).format("DD MMM YYYY") + start = moment(sprint.estimated_start).format(prettyDate) + finish = moment(sprint.estimated_finish).format(prettyDate) estimatedDateRange = "#{start}-#{finish}" ctx = { @@ -135,7 +137,9 @@ BacklogSprintHeaderDirective = ($navUrls, $template, $compile) -> require: "ngModel" } -module.directive("tgBacklogSprintHeader", ["$tgNavUrls", "$tgTemplate", "$compile", BacklogSprintHeaderDirective]) +module.directive("tgBacklogSprintHeader", ["$tgNavUrls", "$tgTemplate", "$compile", "$translate" + BacklogSprintHeaderDirective]) + ############################################################################# ## Toggle Closed Sprints Directive @@ -178,4 +182,5 @@ ToggleExcludeClosedSprintsVisualization = ($rootscope, $loading, $translate) -> return {link: link} -module.directive("tgBacklogToggleClosedSprintsVisualization", ["$rootScope", "$tgLoading", "$translate", ToggleExcludeClosedSprintsVisualization]) +module.directive("tgBacklogToggleClosedSprintsVisualization", ["$rootScope", "$tgLoading", "$translate", + ToggleExcludeClosedSprintsVisualization]) diff --git a/app/coffee/modules/common/components.coffee b/app/coffee/modules/common/components.coffee index a9a19965..43032c63 100644 --- a/app/coffee/modules/common/components.coffee +++ b/app/coffee/modules/common/components.coffee @@ -29,10 +29,11 @@ module = angular.module("taigaCommon") ## Date Range Directive (used mainly for sprint date range) ############################################################################# -DateRangeDirective = -> +DateRangeDirective = ($translate) -> renderRange = ($el, first, second) -> - initDate = moment(first).format("DD MMM YYYY") - endDate = moment(second).format("DD MMM YYYY") + prettyDate = $translate.instant("BACKLOG.SPRINTS.DATE") + initDate = moment(first).format(prettyDate) + endDate = moment(second).format(prettyDate) $el.html("#{initDate}-#{endDate}") link = ($scope, $el, $attrs) -> @@ -44,19 +45,19 @@ DateRangeDirective = -> return {link:link} -module.directive("tgDateRange", DateRangeDirective) +module.directive("tgDateRange", ["$translate", DateRangeDirective]) ############################################################################# ## Date Selector Directive (using pikaday) ############################################################################# -DateSelectorDirective =-> +DateSelectorDirective = ($translate) -> link = ($scope, $el, $attrs, $model) -> selectedDate = null $el.picker = new Pikaday({ field: $el[0] - format: "DD MMM YYYY" + format: $translate.instant("COMMON.DATE") onSelect: (date) => selectedDate = date onOpen: => @@ -71,7 +72,7 @@ DateSelectorDirective =-> require: "ngModel" } -module.directive("tgDateSelector", DateSelectorDirective) +module.directive("tgDateSelector", ["$translate", DateSelectorDirective]) ############################################################################# @@ -107,7 +108,7 @@ module.directive("tgSprintProgressbar", SprintProgressBarDirective) ## Created-by display directive ############################################################################# -CreatedByDisplayDirective = ($template, $compile)-> +CreatedByDisplayDirective = ($template, $compile, $translate)-> # Display the owner information (full name and photo) and the date of # creation of an object (like USs, tasks and issues). # @@ -130,7 +131,7 @@ CreatedByDisplayDirective = ($template, $compile)-> html = template({ owner: owner - date: moment(model.created_date).format("DD MMM YYYY HH:mm") + date: moment(model.created_date).format($translate.instant("COMMON.DATETIME")) }) html = $compile(html)($scope) @@ -149,7 +150,7 @@ CreatedByDisplayDirective = ($template, $compile)-> require: "ngModel" } -module.directive("tgCreatedByDisplay", ["$tgTemplate", "$compile", CreatedByDisplayDirective]) +module.directive("tgCreatedByDisplay", ["$tgTemplate", "$compile", "$translate", CreatedByDisplayDirective]) ############################################################################# diff --git a/app/coffee/modules/common/history.coffee b/app/coffee/modules/common/history.coffee index ef2dd1a7..87a83692 100644 --- a/app/coffee/modules/common/history.coffee +++ b/app/coffee/modules/common/history.coffee @@ -87,6 +87,8 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c showAllComments = false showAllActivity = false + prettyDate = $translate.instant("ACTIVITY.DATETIME") + bindOnce $scope, $attrs.ngModel, (model) -> type = $attrs.type objectId = model.id @@ -269,7 +271,7 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c renderComment = (comment) -> if (comment.delete_comment_date or comment.delete_comment_user?.name) html = templateDeletedComment({ - deleteCommentDate: moment(comment.delete_comment_date).format("DD MMM YYYY HH:mm") if comment.delete_comment_date + deleteCommentDate: moment(comment.delete_comment_date).format(prettyDate) if comment.delete_comment_date deleteCommentUser: comment.delete_comment_user.name deleteComment: comment.comment_html activityId: comment.id @@ -284,12 +286,12 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c html = templateActivity({ avatar: getUserAvatar(comment.user.pk) userFullName: comment.user.name - creationDate: moment(comment.created_at).format("DD MMM YYYY HH:mm") + creationDate: moment(comment.created_at).format(prettyDate) comment: comment.comment_html changesText: renderChangesHelperText(comment) changes: renderChangeEntries(comment) mode: "comment" - deleteCommentDate: moment(comment.delete_comment_date).format("DD MMM YYYY HH:mm") if comment.delete_comment_date + deleteCommentDate: moment(comment.delete_comment_date).format(prettyDate) if comment.delete_comment_date deleteCommentUser: comment.delete_comment_user.name if comment.delete_comment_user?.name activityId: comment.id canDeleteComment: comment.user.pk == $scope.user?.id or $scope.project.my_permissions.indexOf("modify_project") > -1 @@ -303,12 +305,12 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c return templateActivity({ avatar: getUserAvatar(change.user.pk) userFullName: change.user.name - creationDate: moment(change.created_at).format("DD MMM YYYY HH:mm") + creationDate: moment(change.created_at).format(prettyDate) comment: change.comment_html changes: renderChangeEntries(change) changesText: "" mode: "activity" - deleteCommentDate: moment(change.delete_comment_date).format("DD MMM YYYY HH:mm") if change.delete_comment_date + deleteCommentDate: moment(change.delete_comment_date).format(prettyDate) if change.delete_comment_date deleteCommentUser: change.delete_comment_user.name if change.delete_comment_user?.name activityId: change.id }) @@ -320,9 +322,7 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c showMore = totalEntries - entries.length html = templateBaseEntries({entries: entries, showMore:showMore}) - html = $compile(html)($scope) - return html # Render into DOM (operations with dom mutability) diff --git a/app/coffee/modules/taskboard/charts.coffee b/app/coffee/modules/taskboard/charts.coffee index cf0c2ee1..2e50389d 100644 --- a/app/coffee/modules/taskboard/charts.coffee +++ b/app/coffee/modules/taskboard/charts.coffee @@ -90,7 +90,7 @@ SprintGraphDirective = ($translate)-> tooltip: true tooltipOpts: content: (label, xval, yval, flotItem) -> - formattedDate = moment(xval).format("DD MMM") + formattedDate = moment(xval).format($translate.instant("TASKBOARD.CHARTS.DATE")) roundedValue = Math.round(yval) if flotItem.seriesIndex == 1 diff --git a/app/coffee/modules/user-settings/main.coffee b/app/coffee/modules/user-settings/main.coffee index e3fae917..548dd8ee 100644 --- a/app/coffee/modules/user-settings/main.coffee +++ b/app/coffee/modules/user-settings/main.coffee @@ -102,9 +102,7 @@ UserProfileDirective = ($confirm, $auth, $repo, $translate) -> return if not form.validate() changeEmail = $scope.user.isAttributeModified("email") - $scope.user.lang = $scope.lang - $translate.use($scope.user.lang) onSuccess = (data) => $auth.setUser(data) diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index a6368f56..f72414a9 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -135,7 +135,7 @@ module.controller("WikiDetailController", WikiDetailController) ## Wiki Summary Directive ############################################################################# -WikiSummaryDirective = ($log, $template, $compile) -> +WikiSummaryDirective = ($log, $template, $compile, $translate) -> template = $template.get("wiki/wiki-summary.html", true) link = ($scope, $el, $attrs, $model) -> @@ -152,7 +152,7 @@ WikiSummaryDirective = ($log, $template, $compile) -> ctx = { totalEditions: wiki.editions - lastModifiedDate: moment(wiki.modified_date).format("DD MMM YYYY HH:mm") + lastModifiedDate: moment(wiki.modified_date).format($translate.instant("WIKI.DATETIME")) user: user } html = template(ctx) @@ -172,7 +172,7 @@ WikiSummaryDirective = ($log, $template, $compile) -> require: "ngModel" } -module.directive("tgWikiSummary", ["$log", "$tgTemplate", "$compile", WikiSummaryDirective]) +module.directive("tgWikiSummary", ["$log", "$tgTemplate", "$compile", "$translate", WikiSummaryDirective]) ############################################################################# diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index a9e6b873..05269008 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -4,14 +4,14 @@ "NO": "No", "LOADING": "Loading...", "LOADING_PROJECT": "Loading project...", + "DATE": "DD MMM YYYY", + "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Save", "CANCEL": "Cancel", "ACCEPT": "Accept", "DELETE": "Delete", "CREATE": "Create", "ADD": "Add", - "YES": "Yes", - "NO": "No", "COPY_TO_CLIPBOARD": "Copy to clipboard: Ctrl+C", "EDIT": "Edit", "DRAG": "Drag", @@ -581,6 +581,7 @@ }, "ACTIVITY": { "SHOW_ACTIVITY": "Show activity", + "DATETIME": "DD MMM YYYY HH:mm", "SHOW_MORE": "+ Show previous entries ({{showMore}} more)", "TITLE": "Activity", "REMOVED": "removed", @@ -688,6 +689,7 @@ }, "SPRINTS": { "TITLE": "SPRINTS", + "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Sprint Taskboard", "TITLE_LINK_TASKBOARD": "Go to Taskboard of \"{{name}}\"", "NUMBER_SPRINTS": "
sprints", @@ -725,7 +727,8 @@ "XAXIS_LABEL": "Days", "YAXIS_LABEL": "Points", "OPTIMAL": "Optimal pending points for day {{formattedDate}} should be {{roundedValue}}", - "REAL": "Real pending points for day {{formattedDate}} is {{roundedValue}}" + "REAL": "Real pending points for day {{formattedDate}} is {{roundedValue}}", + "DATE": "DD MMMM YYYY" } }, "TASK": { @@ -988,6 +991,7 @@ "PROGRESS_NAME_DESCRIPTION": "Name and description" }, "WIKI": { + "DATETIME": "DD MMM YYYY HH:mm", "PLACEHOLDER_PAGE": "Write your wiki page", "REMOVE": "Remove this wiki page", "DELETE_LIGHTBOX_TITLE": "Delete Wiki Page", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index f46a5bc3..8688a598 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -4,6 +4,8 @@ "NO": "No", "LOADING": "Cargando...", "LOADING_PROJECT": "Cargando projecto...", + "DATE": "DD MMM YYYY", + "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Guardar", "CANCEL": "Cancelar", "ACCEPT": "Aceptar", @@ -579,6 +581,7 @@ }, "ACTIVITY": { "SHOW_ACTIVITY": "Mostrar actividad", + "DATETIME": "DD MMM YYYY HH:mm", "SHOW_MORE": "+ Ver entradas anteriores ({{showMore}} más)", "TITLE": "Actividad", "REMOVED": "borrado", @@ -685,6 +688,7 @@ }, "SPRINTS": { "TITLE": "SPRINTS", + "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Panel de Tareas del Sprint", "TITLE_LINK_TASKBOARD": "Ir al panel de tareas de \"{{name}}\"", "NUMBER_SPRINTS": "
sprints", @@ -722,7 +726,8 @@ "XAXIS_LABEL": "Días", "YAXIS_LABEL": "Puntos", "OPTIMAL": "El número de puntos óptimos pendientes para el día {{formattedDate}} debería ser de {{roundedValue}}", - "REAL": "El número de puntos pendientes para el día {{formattedDate}} es de {{roundedValue}}" + "REAL": "El número de puntos pendientes para el día {{formattedDate}} es de {{roundedValue}}", + "DATE": "DD MMMM YYYY" } }, "TASK": { @@ -985,6 +990,7 @@ "PROGRESS_NAME_DESCRIPTION": "Nombre y descripción" }, "WIKI": { + "DATETIME": "DD MMM YYYY HH:mm", "PLACEHOLDER_PAGE": "Escribe el contenido de tu página", "REMOVE": "Eliminar esta página del wiki", "DELETE_LIGHTBOX_TITLE": "Eliminar Página del Wiki", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index 3691f941..2046ba95 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -4,6 +4,8 @@ "NO": "Ei", "LOADING": "Ladataan...", "LOADING_PROJECT": "Ladataan projektia...", + "DATE": "DD MMM YYYY", + "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Tallenna", "CANCEL": "Peru", "ACCEPT": "Hyväksy", @@ -66,7 +68,7 @@ "REMOVE_ASSIGNED": "Poista tekijä", "TOO_MANY": "...liikaa käyttäjiä, lisää suodattimia", "CONFIRM_UNASSIGNED": "Haluatko varmasti jättää tämän ilman tekijää?", - "TITLE_ACTION_EDIT_ASSIGNMENT": "Edit assignment" + "TITLE_ACTION_EDIT_ASSIGNMENT": "Muokkaa tekijää" }, "STATUS": { "CLOSED": "Suljettu", @@ -145,11 +147,11 @@ "DELETE_TASKS": "Poista tehtäviä" }, "ISSUES": { - "NAME": "Ongelmat", - "VIEW_ISSUES": "Katso ongelmia", - "ADD_ISSUES": "Lisää ongelmia", - "MODIFY_ISSUES": "Muokkaa ongelmia", - "DELETE_ISSUES": "Poista ongelmia" + "NAME": "Pyynnöt", + "VIEW_ISSUES": "Katso pyyntöjä", + "ADD_ISSUES": "Lisää pyyntöjä", + "MODIFY_ISSUES": "Muokkaa pyyntöjä", + "DELETE_ISSUES": "Poista pyyntöjä" }, "WIKI": { "NAME": "Wiki", @@ -181,10 +183,10 @@ "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} vanhentunutta)", "MAX_UPLOAD_SIZE": "Maksimi tiedoston koko {{maxFileSize}}", "DATE": "DD MMM YYYY - hh:mm", - "ERROR_UPLOAD_ATTACHMENT": "We have not been able to upload '{{fileName}}'. {{errorMessage}}", - "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Delete attachment...", - "MSG_LIGHTBOX_DELETE_ATTACHMENT": "the attachment '{{fileName}}'", - "ERROR_DELETE_ATTACHMENT": "We have not been able to delete: {{errorMessage}}", + "ERROR_UPLOAD_ATTACHMENT": "Emme onnistuneet lataamaan tiedostoa '{{fileName}}'. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Poista liite...", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "liite '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": "Emme pystyneet poistamaan: {{errorMessage}}", "FIELDS": { "IS_DEPRECATED": "on vanhentunut" } @@ -230,7 +232,7 @@ "BACKLOG_DESCRIPTION": "Hallinnoi käyttäjätarinoita: järjestele ja priorisoi työtä.", "KANBAN": "Kanban", "KANBAN_DESCRIPTION": "Järjestä projektisi tehokkaasti tällä taululla.", - "ISSUES": "Ongelmat", + "ISSUES": "Pyynnöt", "ISSUES_DESCRIPTION": "Seuraa projektisi virheitä, kysymyksiä ja parannusehdotuksia. Älä jätä mitään huomiotta!", "WIKI": "Wiki", "WIKI_DESCRIPTION": "Lisää, muokkaa tai poista sisältöä yhteistyössä muiden kanssa. Tämä on oikea paikka projektin dokumentaatiolle.", @@ -260,17 +262,17 @@ "REGENERATE_SUBTITLE": "Jos muutata CSV-datan URLia, edellien lakkaa toimimasta. Oletko varma?", "CSV_TYPE_US": "käyttäjätarinat", "CSV_TYPE_TASK": "tehtävät", - "CSV_TYPE_ISSUE": "ongelmat" + "CSV_TYPE_ISSUE": "pyynnöt" }, "CUSTOM_FIELDS": { "TITLE": "Omat kentät", - "SUBTITLE": "Määritele omia kenttiä käyttäjätarinoihin, tehtäviin ja ongelmiin", + "SUBTITLE": "Määritele omia kenttiä käyttäjätarinoihin, tehtäviin ja pyytöihin", "US_DESCRIPTION": "Käyttäjätarinoiden omat kentät", "US_ADD": "Lisää käyttäjätarinoihin oma kenttä", "TASK_DESCRIPTION": "Tehtävien omat kentät", "TASK_ADD": "Lisää omia kenttiä tehtäviin", - "ISSUE_DESCRIPTION": "Ongelmien omat kentät", - "ISSUE_ADD": "Lisää oma kenttä ongelmille" + "ISSUE_DESCRIPTION": "Pyyntöjen omat kentät", + "ISSUE_ADD": "Lisää oma kenttä pyynnöille" }, "PROJECT_VALUES": { "APP_TITLE": "Projektin arvot - {{sectionName}} - {{projectName}}", @@ -283,24 +285,24 @@ "ACTION_ADD": "Lisää uusi piste" }, "PROJECT_VALUES_PRIORITIES": { - "TITLE": "Ongelmien tärkeydet", - "SUBTITLE": "Määrittele tärkeydet ongelmillesi" + "TITLE": "Pyyntöjen tärkeydet", + "SUBTITLE": "Määrittele tärkeydet pyynnöille" }, "PROJECT_VALUES_SEVERITIES": { - "TITLE": "Ongelmien vakavuudet", - "SUBTITLE": "Määrittele ongelmiesi vakavuudet" + "TITLE": "Pyyntöjen vakavuudet", + "SUBTITLE": "Määrittele pyyntöjen vakavuudet" }, "PROJECT_VALUES_STATUS": { "TITLE": "Tila", - "SUBTITLE": "Määrittele tilat joiden kautta käyttäjätarinasi, tehtäväsi ja ongelmasi kulkevat", + "SUBTITLE": "Määrittele tilat joiden kautta käyttäjätarinasi, tehtäväsi ja pyyntösi kulkevat", "US_TITLE": "Kt tilat", "TASK_TITLE": "Tehtävien tilat", - "ISSUE_TITLE": "Ongelmien tilat" + "ISSUE_TITLE": "Pyyntöjen tilat" }, "PROJECT_VALUES_TYPES": { "TITLE": "Tyypit", - "SUBTITLE": "Määrittele ongelmien tyypit", - "ISSUE_TITLE": "Ongelmien tyypit", + "SUBTITLE": "Määrittele pyyntöjen tyypit", + "ISSUE_TITLE": "Pyyntöjen tyypit", "ACTION_ADD": "Lisää uusi {{objName}}" }, "ROLES": { @@ -390,8 +392,8 @@ "LABEL_TASK_STATUS": "Oletusarvo tehtävän tilan valintaan", "LABEL_PRIORITY": "Oletus arvo tärkeyden valiintaan", "LABEL_SEVERITY": "Oletusarvo vakavuuden valintaan", - "LABEL_ISSUE_TYPE": "Oletusarvo ongelman tyypin valintaan", - "LABEL_ISSUE_STATUS": "Oletusarvo ongelmien statuksen valintaan" + "LABEL_ISSUE_TYPE": "Oletusarvo pyynnön tyypin valintaan", + "LABEL_ISSUE_STATUS": "Oletusarvo pyyntöjen statuksen valintaan" }, "CSV": { "TITLE": "{{csvType}} raportit", @@ -455,7 +457,7 @@ "SEARCH": "Hae", "BACKLOG": "Odottavat", "KANBAN": "Kanban", - "ISSUES": "Ongelmat", + "ISSUES": "Pyynnöt", "WIKI": "Wiki", "TEAM": "Tiimi", "MEETUP": "Tapaa", @@ -501,7 +503,7 @@ "HELP_TEXT": "Taigan käyttäjät lisätään automaattisesti, muille lähetetään kutsu." }, "CREATE_ISSUE": { - "TITLE": "Lisää ongelma" + "TITLE": "Lisää pyyntö" }, "FEEDBACK": { "TITLE": "Kerro jotain...", @@ -549,8 +551,8 @@ "TOTAL_POINTS": "yhteensä", "ADD": "+ Lisää uusi käyttäjätarina", "ADD_BULK": "Lisää monta käyttäjätarinaa", - "PROMOTED": "Tämä US on liitetty ongelmaan:", - "TITLE_LINK_GO_TO_ISSUE": "Mene ongelmaan", + "PROMOTED": "Tämä Kt on liitetty pyyntöön:", + "TITLE_LINK_GO_TO_ISSUE": "Siirry pyyntöön", "EXTERNAL_REFERENCE": "Tämä Kt oon luotu täältä: ", "GO_TO_EXTERNAL_REFERENCE": "Palaa alkuun", "BLOCKED": "Tämä käyttäjätarina on suljettu", @@ -579,6 +581,7 @@ }, "ACTIVITY": { "SHOW_ACTIVITY": "Näytä tapahtumat", + "DATETIME": "DD MMM YYYY HH:mm", "SHOW_MORE": "+ Näytä edelliset rivit ({{showMore}} lisää)", "TITLE": "Aktiivisuus", "REMOVED": "poistettu", @@ -685,6 +688,7 @@ }, "SPRINTS": { "TITLE": "KIERROKSET", + "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Kierroksien tehtävätaulu", "TITLE_LINK_TASKBOARD": "Siirry tehtävätauluun {{name}}", "NUMBER_SPRINTS": "
kierrokset", @@ -722,7 +726,8 @@ "XAXIS_LABEL": "Päivät", "YAXIS_LABEL": "Pisteet", "OPTIMAL": "Optimaaliset odottavat pisteet {{formattedDate}} ovat {{roundedValue}}", - "REAL": "Todelliset odottavat pisteet {{formattedDate}} ovat {{roundedValue}}" + "REAL": "Todelliset odottavat pisteet {{formattedDate}} ovat {{roundedValue}}", + "DATE": "DD MMMM YYYY" } }, "TASK": { @@ -819,22 +824,22 @@ "LINK_LOGIN": "Oletko jo rekisteröitynyt? Kirjaudu sisään" }, "ISSUES": { - "LIST_SECTION_NAME": "Ongelmat", - "SECTION_NAME": "Ongelman tiedot", - "ACTION_NEW_ISSUE": "+ UUSI ONGELMA", + "LIST_SECTION_NAME": "Pyynnöt", + "SECTION_NAME": "Pyyntöjen tiedot", + "ACTION_NEW_ISSUE": "+ UUSI PYYNTÖ", "ACTION_PROMOTE_TO_US": "Liitä käyttäjätarinaan", "PLACEHOLDER_FILTER_NAME": "Anna suodattimen nimi ja paina enter", - "PROMOTED": "Tämä ongelma on liitetty Kthen:", - "EXTERNAL_REFERENCE": "Tämä ongelma on luotu ", + "PROMOTED": "Tämä pyyntö on liitetty Kthen:", + "EXTERNAL_REFERENCE": "Tämä pyyntö on luotu täältä:", "GO_TO_EXTERNAL_REFERENCE": "Palaa alkuun", - "BLOCKED": "Tämä ongelma on estetty", - "TITLE_PREVIOUS_ISSUE": "edellinen ongelma", - "TITLE_NEXT_ISSUE": "seuraava ongelma", - "ACTION_DELETE": "Poista ongelma", - "LIGHTBOX_TITLE_BLOKING_ISSUE": "Estävä ongelma", + "BLOCKED": "Tämä pyyntö on estetty", + "TITLE_PREVIOUS_ISSUE": "edellinen pyyntö", + "TITLE_NEXT_ISSUE": "seuraava pyyntö", + "ACTION_DELETE": "Poista pyyntö", + "LIGHTBOX_TITLE_BLOKING_ISSUE": "Estävä pyyntö", "CONFIRM_PROMOTE": { - "TITLE": "Liitä tämä ongelma uuteen käyttäjätarinaan", - "MESSAGE": "Haluatko varmasti lisätä uuden käyttäjätarinan tästä ongelmasta?" + "TITLE": "Liitä tämä pyyntö uuteen käyttäjätarinaan", + "MESSAGE": "Haluatko varmasti lisätä uuden käyttäjätarinan tästä pyynnöstä?" }, "FILTERS": { "TITLE": "Suodattimet", @@ -871,9 +876,9 @@ "TITLE_ACTION_CHANGE_STATUS": "Muuta tilaa", "TITLE_ACTION_ASSIGNED_TO": "Tekijä", "EMPTY": { - "TITLE": "Ei raportoitavia ongelmia:-)", + "TITLE": "Ei raportoitavia pyyntöjä:-)", "SUBTITLE": "Löysitkö ongelman?", - "ACTION_CREATE_ISSUE": "Luo uusi ongelma" + "ACTION_CREATE_ISSUE": "Luo uusi pyyntö" } } }, @@ -893,7 +898,7 @@ }, "SEARCH": { "FILTER_USER_STORIES": "Käyttäjätarinat", - "FILTER_ISSUES": "Ongelmat", + "FILTER_ISSUES": "Pyynnöt", "FILTER_TASKS": "Tehtävät", "FILTER_WIKI": "Wiki-sivut", "PLACEHOLDER_SEARCH": "Etsi täältä...", @@ -906,13 +911,13 @@ "APP_TITLE": "TIIMI - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Etsi koko nimellä...", "COLUMN_MR_WOLF": "Mr. Wolf", - "EXPLANATION_COLUMN_MR_WOLF": "Suljetut ongelmat", + "EXPLANATION_COLUMN_MR_WOLF": "Suljetut pyynnöt", "COLUMN_IOCAINE": "Hidasteiden syöjä", "EXPLANATION_COLUMN_IOCAINE": "Kertyneet hidasteet", "COLUMN_CERVANTES": "Cervantes", "EXPLANATION_COLUMN_CERVANTES": "Wiki-sivuja muokattu", "COLUMN_BUG_HUNTER": "Virheiden metsästäjä", - "EXPLANATION_COLUMN_BUG_HUNTER": "Ongelmia raportoitu", + "EXPLANATION_COLUMN_BUG_HUNTER": "Pyyntöjä raportoitu", "COLUMN_NIGHT_SHIFT": "Yövuoro", "EXPLANATION_COLUMN_NIGHT_SHIFT": "Suljetut tehtävät", "COLUMN_TOTAL_POWER": "Kokonaisvoima", @@ -985,6 +990,7 @@ "PROGRESS_NAME_DESCRIPTION": "Nimi ja kuvaus" }, "WIKI": { + "DATETIME": "DD MMM YYYY HH:mm", "PLACEHOLDER_PAGE": "Kirjoita wiki-sivu", "REMOVE": "Poista tämä wiki-sivu", "DELETE_LIGHTBOX_TITLE": "Poista wiki-sivu", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 5554b4ca..e456d3b4 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -4,6 +4,8 @@ "NO": "Non", "LOADING": "Chargement...", "LOADING_PROJECT": "Chargement du projet...", + "DATE": "DD MMM YYYY", + "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Enregistré", "CANCEL": "Annuler", "ACCEPT": "Accepter", @@ -579,6 +581,7 @@ }, "ACTIVITY": { "SHOW_ACTIVITY": "Montrer l'activité", + "DATETIME": "DD MMM YYYY HH:mm", "SHOW_MORE": "+ Montrer les entrées précédentes ({{showMore}} plus)", "TITLE": "Activité", "REMOVED": "supprimé", @@ -685,6 +688,7 @@ }, "SPRINTS": { "TITLE": "SPRINTS", + "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Taskboard du sprint", "TITLE_LINK_TASKBOARD": "Aller au Taskboard de \"{{name}}\"", "NUMBER_SPRINTS": "
sprints", @@ -722,7 +726,8 @@ "XAXIS_LABEL": "Journées", "YAXIS_LABEL": "Points", "OPTIMAL": "Le nombre optimal de points pour le jour {{formattedDate}} devrait être {{roundedValue}}", - "REAL": "Le nombre réel de points pour le jour {{formattedDate}} est {{roundedValue}}" + "REAL": "Le nombre réel de points pour le jour {{formattedDate}} est {{roundedValue}}", + "DATE": "DD MMMM YYYY" } }, "TASK": { @@ -985,6 +990,7 @@ "PROGRESS_NAME_DESCRIPTION": "Nom et description" }, "WIKI": { + "DATETIME": "DD MMM YYYY HH:mm", "PLACEHOLDER_PAGE": "Ecrivez votre page wiki", "REMOVE": "Supprimer cette page wiki", "DELETE_LIGHTBOX_TITLE": "Supprimer la page Wiki", From 91745a7010a422a88d906f99128d7daf1a82f6df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 1 May 2015 03:32:48 +0200 Subject: [PATCH 103/194] [i18n] Add catalan locale --- app/locales/locale-ca.json | 1007 ++++++++++++++++++++++++++++++++++++ 1 file changed, 1007 insertions(+) create mode 100644 app/locales/locale-ca.json diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json new file mode 100644 index 00000000..013af6ec --- /dev/null +++ b/app/locales/locale-ca.json @@ -0,0 +1,1007 @@ +{ + "COMMON": { + "YES": "Si", + "NO": "No", + "LOADING": "Carregant...", + "LOADING_PROJECT": "Carregant projecte...", + "DATE": "DD MMM YYYY", + "DATETIME": "DD MMM YYYY HH:mm", + "SAVE": "Guardar", + "CANCEL": "Següent", + "ACCEPT": "Acceptar", + "DELETE": "Esborrar", + "CREATE": "Crear", + "ADD": "Afegir", + "COPY_TO_CLIPBOARD": "Copia al portapapers: Ctrl + C", + "EDIT": "edita", + "DRAG": "Moure", + "TAG_LINE": "La teua eïna de gestió de projectes àgil, gratuita i de codi obert ", + "TAG_LINE_2": "ESTIMA EL TEU PROJECTE", + "BLOCK": "Bloquejar", + "UNBLOCK": "Desbloquejar", + "BLOCKED": "Bloquejat", + "CREATED_BY": "Creat per {{fullDisplayName}}", + "FROM": "de", + "TO": "a", + "CLOSE": "Tancar", + "BLOCKED_NOTE": "Per qué està bloquejada esta tasca?", + "BLOCKED_REASON": "Per favor, explica la raó", + "GO_HOME": "Porta'm a l'inici ", + "PLUGINS": "Plugins", + "BETA": "Estem en beta!", + "ONE_ITEM_LINE": "In item per línia", + "NEW_BULK": "Nova inserció en grup", + "RELATED_TASKS": "Tasques relacionades", + "LOGOUT": "Logout", + "GENERIC_ERROR": "Un Oompa Loompas diu {{error}}.", + "IOCAINE_TEXT": "Un poc saturat per una tasca? Fes-ho saber als teus companys clicant a Iocaina quan edites la tasca. Es possible ser inmune a aquesta (fictícia) poció mortal consumint xicotetes dòsis poc a poc, així com es possible millorar amb xicotets nous desafiaments!", + "TAGS": { + "PLACEHOLDER": "Afegir tag", + "DELETE": "Delete tag", + "ADD": "Add tag" + }, + "DESCRIPTION": { + "EMPTY": "Empty space is so boring... go on be descriptive... A rose by any other name would smell as sweet...", + "NO_DESCRIPTION": "No description yet" + }, + "FIELDS": { + "SUBJECT": "Subject", + "NAME": "Name", + "URL": "URL", + "DESCRIPTION": "Description", + "VALUE": "Value", + "SLUG": "Slug", + "COLOR": "Color", + "IS_CLOSED": "Is closed?", + "STATUS": "Status", + "ASSIGNED_TO": "Assigned to", + "POINTS": "Points", + "BLOCKED_NOTE": "blocked note", + "IS_BLOCKED": "is blocked" + }, + "ROLES": { + "ALL": "All" + }, + "ASSIGNED_TO": { + "NOT_ASSIGNED": "Not assigned", + "DELETE_ASSIGNMENT": "Delete assignment", + "REMOVE_ASSIGNED": "Remove assigned", + "TOO_MANY": "...too many users, keep filtering", + "CONFIRM_UNASSIGNED": "Are you sure you want to leave it unassigned?", + "TITLE_ACTION_EDIT_ASSIGNMENT": "Edit assignment" + }, + "STATUS": { + "CLOSED": "Closed", + "OPEN": "Open" + }, + "WATCHERS": { + "ADD": "Add watcher", + "TITLE": "watchers", + "DELETE": "Delete watcher", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "Delete watcher..." + }, + "CUSTOM_ATTRIBUTES": { + "CUSTOM_FIELDS": "Custom Fields", + "SAVE": "Save Custom Field", + "EDIT": "Edit Custom Field", + "DELETE": "Delete custom attribute", + "CONFIRM_DELETE": "Remeber that all values in this custom field will be deleted.
Are you sure you want to continue?" + }, + "FILTERS": { + "TITLE": "filters", + "INPUT_PLACEHOLDER": "Subject or reference", + "TITLE_ACTION_FILTER_BUTTON": "search", + "BREADCRUMB_TITLE": "back to categories", + "BREADCRUMB_FILTERS": "Filters", + "BREADCRUMB_STATUS": "status" + }, + "WYSIWYG": { + "H1_BUTTON": "First Level Heading", + "H1_SAMPLE_TEXT": "Your title here...", + "H2_BUTTON": "Second Level Heading", + "H2_SAMPLE_TEXT": "Your title here...", + "H3_BUTTON": "Third Level Heading", + "H3_SAMPLE_TEXT": "Your title here...", + "BOLD_BUTTON": "Bold", + "BOLD_BUTTON_SAMPLE_TEXT": "Your text here...", + "ITALIC_BUTTON": "Italic", + "ITALIC_SAMPLE_TEXT": "Your text here...", + "STRIKE_BUTTON": "Strike", + "STRIKE_SAMPLE_TEXT": "Your text here...", + "BULLETED_LIST_BUTTON": "Bulleted List", + "BULLETED_LIST_SAMPLE_TEXT": "Your text here...", + "NUMERIC_LIST_BUTTON": "Numeric List", + "NUMERIC_LIST_SAMPLE_TEXT": "Your text here...", + "PICTURE_BUTTON": "Picture", + "PICTURE_SAMPLE_TEXT": "Your alternative text to picture here...", + "LINK_BUTTON": "Link", + "LINK_SAMPLE_TEXT": "Your text to link here....", + "QUOTE_BLOCK_BUTTON": "Quote Block", + "QUOTE_BLOCK_SAMPLE_TEXT": "Your text here...", + "CODE_BLOCK_BUTTON": "Code Block", + "CODE_BLOCK_SAMPLE_TEXT": "Your text here...", + "PREVIEW_BUTTON": "Preview", + "EDIT_BUTTON": "Edit", + "MARKDOWN_HELP": "Markdown syntax help" + }, + "PERMISIONS_CATEGORIES": { + "SPRINTS": { + "NAME": "Sprints", + "VIEW_SPRINTS": "View sprints", + "ADD_SPRINTS": "Add sprints", + "MODIFY_SPRINTS": "Modify sprints", + "DELETE_SPRINTS": "Delete sprints" + }, + "USER_STORIES": { + "NAME": "User Stories", + "VIEW_USER_STORIES": "View user stories", + "ADD_USER_STORIES": "Add user stories", + "MODIFY_USER_STORIES": "Modify user stories", + "DELETE_USER_STORIES": "Delete user stories" + }, + "TASKS": { + "NAME": "Tasks", + "VIEW_TASKS": "View tasks", + "ADD_TASKS": "Add tasks", + "MODIFY_TASKS": "Modify tasks", + "DELETE_TASKS": "Delete tasks" + }, + "ISSUES": { + "NAME": "Issues", + "VIEW_ISSUES": "View issues", + "ADD_ISSUES": "Add issues", + "MODIFY_ISSUES": "Modify issues", + "DELETE_ISSUES": "Delete issues" + }, + "WIKI": { + "NAME": "Wiki", + "VIEW_WIKI_PAGES": "View wiki pages", + "ADD_WIKI_PAGES": "Add wiki pages", + "MODIFY_WIKI_PAGES": "Modify wiki pages", + "DELETE_WIKI_PAGES": "Delete wiki pages", + "VIEW_WIKI_LINKS": "View wiki links", + "ADD_WIKI_LINKS": "Add wiki links", + "DELETE_WIKI_LINKS": "Delete wiki links" + } + } + }, + "AUTH": { + "INVITED_YOU": "T'ha convidat a participar en el projecte", + "NOT_REGISTERED_YET": "No t'has registrat encara?", + "REGISTER": "Registrat", + "CREATE_ACCOUNT": "Crea el teu conter gratis ací" + }, + "ATTACHMENT": { + "SECTION_NAME": "Adjunts", + "TITLE": "{{ fileName }} uploaded on {{ date }}", + "DESCIPTION": "Escriu una descripció curta", + "DEPRECATED_FILE": "Obsolet?", + "ADD": "Afegir nou adjunt. <%- maxFileSizeMsg %>", + "MAX_FILE_SIZE": "[Max. grandària: {{maxFileSize}}]", + "SHOW_DEPRECATED": "+ mostra els adjunts obsolets", + "HIDE_DEPRECATED": "- Amagar els adjunts obsolets", + "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} obsolet)", + "MAX_UPLOAD_SIZE": "El tamany màxim de pujada es ", + "DATE": "DD MMM YYYY [at] hh:mm", + "ERROR_UPLOAD_ATTACHMENT": "We have not been able to upload '{{fileName}}'. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Delete attachment...", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "the attachment '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": "We have not been able to delete: {{errorMessage}}", + "FIELDS": { + "IS_DEPRECATED": "es obsolet" + } + }, + "PAGINATION": { + "PREVIOUS": "Abans", + "NEXT": "Següent" + }, + "ADMIN": { + "COMMON": { + "TITLE_ACTION_EDIT_VALUE": "Editar valor", + "TITLE_ACTION_DELETE_VALUE": "Borrar valor" + }, + "HELP": "Necessites ajuda? Mira la nosta pàgina de suport!", + "PROJECT_DEFAULT_VALUES": { + "TITLE": "Valors per defecte", + "SUBTITLE": "Selecciona els valors per defecte per a tots els selectors" + }, + "MEMBERSHIPS": { + "TITLE": "Gestió de Membres", + "ADD_BUTTON": "+ Nou membre", + "ADD_BUTTON_TITLE": "Afegir nou membre" + }, + "PROJECT_EXPORT": { + "TITLE": "Exportar", + "SUBTITLE": "Exporta el teu projecte per a fer una còpia de seguretat o crear un nou basat en aquest", + "EXPORT_BUTTON": "Exportar", + "EXPORT_BUTTON_TITLE": "Exporta el teu projecte", + "LOADING_TITLE": "Estem generant el teu fitxer", + "DUMP_READY": "El fitxer de daes està llest!", + "LOADING_MESSAGE": "Per favor no tanquest aquest pàgina", + "ASYNC_MESSAGE": "T'enviarem un correu quan estiga llest.", + "SYNC_MESSAGE": "If the download doesn't start automatically click here.", + "ERROR": "Our Oompa Loompas have some problems generating your dump. Please try it again.", + "ERROR_BUSY": "Sorry, our Oompa Loompas are very busy right now. Please try again in a few minutes.", + "ERROR_MESSAGE": "Our Oompa Loompas have some problems generating your dump: {{message}}" + }, + "MODULES": { + "TITLE": "Mòdules", + "ENABLE": "Activa", + "DISABLE": "Desactiva", + "BACKLOG": "Backlog", + "BACKLOG_DESCRIPTION": "Organitza les històries d'usuari per a mantindre una vista organitzada i prioritzada del treball.", + "KANBAN": "Kanban", + "KANBAN_DESCRIPTION": "Organitza els projectes de un mode sencill amb aquest tauler", + "ISSUES": "Incidències", + "ISSUES_DESCRIPTION": "Gestiona els bugs, questions i milores del teu projecte. No te pergues res!", + "WIKI": "Wiki", + "WIKI_DESCRIPTION": "Afegix, modifica o borra contingut en col3laboració amb altres. Aquest es el lloc correcte per a la teua documentació.", + "MEETUP": "Trobar-se", + "MEETUP_DESCRIPTION": "Tria el teu sistema de videonconferéncia. Inclosos els desenvolupadors necessitan contacte cara a cara", + "SELECT_VIDEOCONFERENCE": "Selecciona un sistema de videconferència", + "SALT_CHAT_ROOM": "Pots afegir un code salt a la sala de xat" + }, + "PROJECT_PROFILE": { + "PAGE_TITLE": "Perfil de projecte - {{sectionName}} - {{projectName}}", + "PROJECT_DETAILS": "Detalls de projecte", + "PROJECT_NAME": "Nom del projecte", + "PROJECT_SLUG": "Slug de projecte", + "NUMBER_SPRINTS": "Nombre de sprints", + "NUMBER_US_POINTS": "Nombre de punts de US", + "DESCRIPTION": "Description", + "PUBLIC_PROJECT": "Projecte públic", + "PRIVATE_PROJECT": "Projecte privat", + "DELETE": "Esborra aquest projecte" + }, + "REPORTS": { + "TITLE": "Informes", + "SUBTITLE": "Exporta les dades del teu projecte en CSV i fes els teus propis informes.", + "DESCRIPTION": "Descarrega el fitxer CSV o copia la URL generada o obri-la amb el teu editor de text o fulla de càlcul per a fer els teus propis informes. Podràs visualitzar i analitzar les dades fàcilment.", + "HELP": "Com utilitzar açó a la meu fulla de càlcul?", + "REGENERATE_TITLE": "Canviar URL", + "REGENERATE_SUBTITLE": "Vas a canviar la URL d'accés al CSV. La URL previa no funcionarà. Estàs segur?", + "CSV_TYPE_US": "Històries d'usuari", + "CSV_TYPE_TASK": "tasks", + "CSV_TYPE_ISSUE": "issues" + }, + "CUSTOM_FIELDS": { + "TITLE": "Camps personalitzats", + "SUBTITLE": "Especifica els camps personalitzats del les teues históries d'usuari, tasques e incidències", + "US_DESCRIPTION": "Camps personalitzats d'històries d'usuari", + "US_ADD": "Afegeix camps personalitzats en històries d'usuari", + "TASK_DESCRIPTION": "Camps personalitzats de tasques", + "TASK_ADD": "Afegix camps personalitzats en tasques", + "ISSUE_DESCRIPTION": "Camps personalitzats d'incidències", + "ISSUE_ADD": "Afegix camps personalitzats en incidències" + }, + "PROJECT_VALUES": { + "APP_TITLE": "Valors de projecte - {{sectionName}} - {{projectName}}", + "REPLACEMENT": "Tots els elements amb aquest valor seràn canviats a", + "ERROR_DELETE_ALL": "No pots esborrar tots els valors." + }, + "PROJECT_VALUES_POINTS": { + "TITLE": "Punts d'US", + "SUBTITLE": "Especifica els punts en els que poden ser estimades les històries d'usuari", + "ACTION_ADD": "Afegir punts nous" + }, + "PROJECT_VALUES_PRIORITIES": { + "TITLE": "Prioritats d'incidències", + "SUBTITLE": "Especifica les prioritats que tindran les teues tasques" + }, + "PROJECT_VALUES_SEVERITIES": { + "TITLE": "Severitat d'incidències", + "SUBTITLE": "Especifica les severitats que tindran les teues incidències" + }, + "PROJECT_VALUES_STATUS": { + "TITLE": "Estatus", + "SUBTITLE": "Especifica els estatus del les teues históries d'usuari, tasques e incidències", + "US_TITLE": "Estatus d'US", + "TASK_TITLE": "Estatus de tasques", + "ISSUE_TITLE": "Estatus d'incidències" + }, + "PROJECT_VALUES_TYPES": { + "TITLE": "Tipus", + "SUBTITLE": "Specify the types your issues could be", + "ISSUE_TITLE": "Tipus d'incidències", + "ACTION_ADD": "Afegir now {{objName}}" + }, + "ROLES": { + "SECTION_NAME": "Rols - {{projectName}}", + "WARNING_NO_ROLE": "Ves amb compte, cap rol en el teu projecte pot estimar punts per a les històries d'usuari", + "HELP_ROLE_ENABLED": "Si està activat, els membres assignats a aquest rol podràn estimar els punts d'històries d'usuaris", + "COUNT_MEMBERS": "{{ role.members_count }} membres amb aquest rol", + "TITLE_DELETE_ROLE": "Esborrar rol", + "REPLACEMENT_ROLE": "Tots els usuaris amb aquest rol es canviaran a", + "WARNING_DELETE_ROLE": "Atenció, totes les estimacions del rol seràn esborrades", + "ERROR_DELETE_ALL": "No pots esborrar tots els valors", + "EXTERNAL_USER": "Usuari extern" + }, + "THIRD_PARTIES": { + "SECRET_KEY": "Clau secreta", + "PAYLOAD_URL": "Payload URL", + "VALID_IPS": "IPs amb orige vàlid separades per ,)" + }, + "BITBUCKET": { + "SECTION_NAME": "Bitbucket", + "APP_TITLE": "Bitbucket - {{projectName}}", + "INFO_VERIFYING_IP": "Les peticions a Bitbuket no estan signades. El millor mode de verificar l'oritge es per IP. Si el camp està buit no hi haurà verificació per IP." + }, + "GITLAB": { + "SECTION_NAME": "Gitlab", + "APP_TITLE": "Gitlab - {{projectName}}", + "INFO_VERIFYING_IP": "Les peticions a Bitbuket no estan signades. El millor mode de verificar l'oritge es per IP. Si el camp està buit no hi haurà verificació per IP." + }, + "GITHUB": { + "SECTION_NAME": "Github", + "APP_TITLE": "Github - {{projectName}}" + }, + "WEBHOOKS": { + "APP_TITLE": "Webhooks - {{projectName}}", + "SECTION_NAME": "Webhooks", + "SUBTITLE": "Els Webhooks notifiquen serveis extens de events en taiga com comentaris, històries d'usuari...", + "ADD_NEW": "Afegir un nou Webhook", + "TYPE_NAME": "Escriu el nom del servei", + "TYPE_PAYLOAD_URL": "Escriu el service payload url", + "TYPE_SERVICE_SECRET": "Escriu la clau secreta del servei", + "SAVE": "Salvar Webhook", + "CANCEL": "Cancel·la Webhook", + "SHOW_HISTORY": "(Mostra històric)", + "TEST": "Test Webhook", + "EDIT": "Edit Webhook", + "DELETE": "Delete Webhook", + "REQUEST": "Request", + "RESEND_REQUEST": "Resend request", + "HEADERS": "Headers", + "PAYLOAD": "Payload", + "RESPONSE": "Response", + "DATE": "DD MMM YYYY [at] hh:mm:ss", + "ACTION_HIDE_HISTORY": "(Hide history)", + "ACTION_HIDE_HISTORY_TITLE": "Hide history details", + "ACTION_SHOW_HISTORY": "(Show history)", + "ACTION_SHOW_HISTORY_TITLE": "Show history details", + "WEBHOOK_NAME": "Webhook '{{name}}'" + }, + "CUSTOM_ATTRIBUTES": { + "ADD": "Afegix camp personalitzat", + "EDIT": "Edita el camp personalitzat", + "DELETE": "Esborrar camp personalitzat", + "SAVE_TITLE": "Salva camp personalitzat", + "CANCEL_TITLE": "Cancel·la la creació", + "SET_FIELD_NAME": "Escriu el nom del camp personalitzat", + "SET_FIELD_DESCRIPTION": "Escriu la descripció del camp personalitzat", + "ACTION_UPDATE": "Actualitza el camp personalitzat", + "ACTION_CANCEL_EDITION": "Cancel·la la edició" + }, + "MEMBERSHIP": { + "COLUMN_MEMBER": "Membre", + "COLUMN_ADMIN": "Admin", + "COLUMN_ROLE": "Rol", + "COLUMN_STATUS": "Estatus", + "STATUS_ACTIVE": "Actiu", + "STATUS_PENDING": "Pendent", + "DELETE_MEMBER": "Esborrar membre", + "SUCCESS_SEND_INVITATION": "Hem tornat a enviar la invitació a '{{email}}'.", + "ERROR_SEND_INVITATION": "We haven't sent the invitation.", + "SUCCESS_DELETE": "We've deleted {{message}}.", + "ERROR_DELETE": "We have not been able to delete {{message}}.", + "DEFAULT_DELETE_MESSAGE": "the invitation to {{email}}" + }, + "DEFAULT_VALUES": { + "LABEL_POINTS": "Valor per defecte per a selector de punts", + "LABEL_US": "Valor per defecte per a selector d'estatus d'US", + "LABEL_TASK_STATUS": "Valor per defecte per a selector d'estatus de tasques", + "LABEL_PRIORITY": "Valor per defecte per a selector de prioritat", + "LABEL_SEVERITY": "Valor per defecte per a selector de severitat", + "LABEL_ISSUE_TYPE": "Valor per defecte per a selector de tipus", + "LABEL_ISSUE_STATUS": "Valor per defecte per a selector de estatus" + }, + "CSV": { + "TITLE": "{{csvType}} informes", + "DOWNLOAD": "Descarrega el CSV", + "URL_FIELD_PLACEHOLDER": "Per favor regenera la url del CSV", + "TITLE_REGENERATE_URL": "Regenera l'Url del CSV", + "ACTION_GENERATE_URL": "Genera URL", + "ACTION_REGENERATE": "Regenerar" + }, + "STATUS": { + "PLACEHOLDER_WRITE_STATUS_NAME": "Escriu un nom per a nou estatus" + }, + "TYPES": { + "PLACEHOLDER_WRITE_NAME": "Escriu un nom per a nou element" + }, + "US_STATUS": { + "ACTION_ADD_STATUS": "Afegir estatus nou", + "IS_ARCHIVED_COLUMN": "Es arxivat?", + "WIP_LIMIT_COLUMN": "Limit WIP", + "PLACEHOLDER_WRITE_NAME": "Write a name for the new status" + }, + "MENU": { + "TITLE": "Admin", + "PROJECT": "Projecte", + "ATTRIBUTES": "Attributes", + "MEMBERS": "Members", + "PERMISSIONS": "Permissions", + "INTEGRATIONS": "Integrations", + "PLUGINS": "Plugins" + }, + "SUBMENU_PROJECT_VALUES": { + "STATUS": "Estatus", + "POINTS": "Points", + "PRIORITIES": "Priorities", + "SEVERITIES": "Severities", + "TYPES": "Types", + "CUSTOM_FIELDS": "Custom fields" + }, + "SUBMENU_PROJECT_PROFILE": { + "TITLE": "Project Profile" + }, + "SUBMENU_ROLES": { + "TITLE": "Roles", + "ACTION_NEW_ROLE": "+ New role", + "TITLE_ACTION_NEW_ROLE": "Add new role" + }, + "SUBMENU_THIDPARTIES": { + "TITLE": "Services" + } + }, + "PROJECT": { + "WELCOME": "Benvinguts", + "SECTION_PROJECTS": "Projectes", + "STATS": { + "PROJECT": "punts
projecte", + "DEFINED": "punts
definits", + "ASSIGNED": "punts
assignats", + "CLOSED": "punts
tancats" + }, + "SECTION": { + "SEARCH": "Buscar", + "BACKLOG": "Backlog", + "KANBAN": "Kanban", + "ISSUES": "Incidències", + "WIKI": "Wiki", + "TEAM": "Equip", + "MEETUP": "Trobar-se", + "ADMIN": "Admin" + }, + "NAVIGATION": { + "SECTION_TITLE": "El teu projecte", + "PLACEHOLDER_SEARCH": "Buscar en...", + "ACTION_CREATE_PROJECT": "Crear projecte", + "TITLE_ACTION_IMPORT": "Importar projecte", + "TITLE_PRVIOUS_PROJECT": "Mostra projectes previs", + "TITLE_NEXT_PROJECT": "Mostrar próxims projectes" + }, + "IMPORT": { + "TITLE": "Important Projecte", + "DESCRIPTION": "Aquest procés pot durar una mica, pero favor mantinga la finestra oberta", + "ASYNC_IN_PROGRESS_TITLE": "Els Oompa Loompas estàn important el teu projecte", + "ASYNC_IN_PROGRESS_MESSAGE": "Aquest procés pot durar uns moments
T'enviarem un correo quan estiga llest.", + "ERROR": "Our Oompa Loompas have some problems importing your dump data. Please try again.", + "ERROR_TOO_MANY_REQUEST": "Sorry, our Oompa Loompas are very busy right now. Please try again in a few minutes.", + "ERROR_MESSAGE": "Our Oompa Loompas have some problems importing your dump data: {{error_message}}", + "SYNC_SUCCESS": "El teu projecte s'ha importat correctament" + } + }, + "LIGHTBOX": { + "DELETE_ACCOUNT": { + "SECTION_NAME": "Esborrar compte de Taiga", + "CONFIRM": "Segur que vols borrar el teu compte de Taiga? ", + "SUBTITLE": "Te trobarem a faltar! :-(" + }, + "DELETE_PROJECT": { + "TITLE": "Esborrar projecte", + "QUESTION": "Estàs segur que vols borrar este projecte?", + "SUBTITLE": "All project data (user stories, tasks, issues, sprints and wiki pages) will be lost! :-(", + "CONFIRM": "Si, estic segur" + }, + "ASSIGNED_TO": { + "SELECT": "Selecciona assignació", + "SEARCH": "Buscar usuaris" + }, + "ADD_MEMBER": { + "TITLE": "Nou membre", + "HELP_TEXT": "Si els usuaris ja estàn registrats en Taiga seràn afegits automàticament. Si no, rebran una invitació." + }, + "CREATE_ISSUE": { + "TITLE": "Afegir incidència" + }, + "FEEDBACK": { + "TITLE": "Contans...", + "COMMENT": "...un bug, una sugerència, algo bonic... inclús el teu pitjor malson amb Taiga.", + "ACTION_SEND": "Enviar sugerències" + }, + "SEARCH": { + "TITLE": "Buscar", + "PLACEHOLDER_SEARCH": "Què estàs buscant?" + }, + "ADD_EDIT_SPRINT": { + "TITLE": "Nou sprint", + "PLACEHOLDER_SPRINT_NAME": "Nom de Sprint", + "PLACEHOLDER_SPRINT_START": "Data d'inici", + "PLACEHOLDER_SPRINT_END": "Data de finalització", + "ACTION_DELETE_SPRINT": "Vols esborrar aquest sprint?", + "TITLE_ACTION_DELETE_SPRINT": "Esborra sprint", + "LAST_SPRINT_NAME": "L'ultim sprint ès {{lastSprint}} ;-) " + }, + "CREATE_EDIT_TASK": { + "TITLE": "Nova tasca", + "PLACEHOLDER_SUBJECT": "Descripció de tasca", + "PLACEHOLDER_STATUS": "Estatus de tasca", + "OPTION_UNASSIGNED": "Sense assignar", + "PLACEHOLDER_SHORT_DESCRIPTION": "Escriu una descripció curta", + "ACTION_EDIT": "Editar tasca" + }, + "CREATE_EDIT_US": { + "TITLE": "Nova US", + "PLACEHOLDER_DESCRIPTION": "Per favor afegix una descripció per que altres puguen entendre millor aquesta US", + "NEW_US": "Nova història d'usuari", + "EDIT_US": "Edita història d'usuari" + }, + "DELETE_SPRINT": { + "TITLE": "Esborrar sprint" + }, + "CREATE_MEMBER": { + "PLACEHOLDER_INVITATION_TEXT": "(Opcional) Afegix un text personalizat a la invitació. Dis-li algo divertit als nous membres. ;-)", + "PLACEHOLDER_TYPE_EMAIL": "Escriu un correu" + } + }, + "US": { + "LINK_TASKBOARD": "Taskboard", + "TITLE_LINK_TASKBOARD": "Go to the taskboard", + "TOTAL_POINTS": "total", + "ADD": "+ Afegir nova història d'usuari", + "ADD_BULK": "Afegeix noves històries d'usuari en grup", + "PROMOTED": "This US has been promoted from Issue:", + "TITLE_LINK_GO_TO_ISSUE": "Anar a la incidència", + "EXTERNAL_REFERENCE": "Aquesta US ha sigut creada desde", + "GO_TO_EXTERNAL_REFERENCE": "Anar a l'orige", + "BLOCKED": "Aquest història d'usuari està bloquejada", + "PREVIOUS": "previa història d'usuari", + "NEXT": "Pròxima història d'usuari", + "TITLE_DELETE_ACTION": "Esborra història d'usuari", + "LIGHTBOX_TITLE_BLOKING_US": "Bloquejant US", + "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} tasques completades", + "ASSIGN": "Assigna història d'usuari", + "NOT_ESTIMATED": "Sense estimar", + "TOTAL_US_POINTS": "Punts totals d'US", + "FIELDS": { + "TEAM_REQUIREMENT": "Requeriment d'equip", + "CLIENT_REQUIREMENT": "Requeriment de client", + "FINISH_DATE": "Data de finalització" + } + }, + "COMMENTS": { + "DELETED_INFO": "Comment deleted by {{user}} on {{date}}", + "TITLE": "Comentaris", + "COMMENT": "Comentar", + "TYPE_NEW_COMMENT": "Escriu un nou comentari ací", + "SHOW_DELETED": "Mostra el comentari esborrat.", + "HIDE_DELETED": "Amaga el comentari esborrat", + "RESTORE": "Resturar comentari." + }, + "ACTIVITY": { + "SHOW_ACTIVITY": "Mostrar activitat", + "DATETIME": "DD MMM YYYY HH:mm", + "SHOW_MORE": "+ Mostrar activitat anterior ({{showMore}} més)", + "TITLE": "Activitat", + "REMOVED": "Borrat", + "ADDED": "Afegit", + "US_POINTS": "Punts d'US ({{name}})", + "NEW_ATTACHMENT": "Nou adjunt", + "DELETED_ATTACHMENT": "Adjunts esborrats", + "UPDATED_ATTACHMENT": "Actualitzat adjunt {{filename}}", + "DELETED_CUSTOM_ATTRIBUTE": "Esborrar camps personalitzat", + "SIZE_CHANGE": "Made {size, plural, one{one change} other{# changes}}", + "VALUES": { + "YES": "yes", + "NO": "no", + "EMPTY": "buit", + "UNASSIGNED": "Sense assignar" + }, + "FIELDS": { + "SUBJECT": "descripció", + "NAME": "nom", + "DESCRIPTION": "sescripció", + "CONTENT": "Contingut", + "STATUS": "Estatus", + "IS_CLOSED": "tancat", + "FINISH_DATE": "Data de finalització", + "TYPE": "tipus", + "PRIORITY": "prioritat", + "SEVERITY": "severitat", + "ASSIGNED_TO": "Assignat a", + "WATCHERS": "Seguidors", + "MILESTONE": "sprint", + "USER_STORY": "user story", + "PROJECT": "project", + "IS_BLOCKED": "is blocked", + "BLOCKED_NOTE": "blocked note", + "POINTS": "points", + "CLIENT_REQUIREMENT": "client requirement", + "TEAM_REQUIREMENT": "team requirement", + "IS_IOCAINE": "is iocaine", + "TAGS": "tags", + "ATTACHMENTS": "attachments", + "IS_DEPRECATED": "is deprecated", + "ORDER": "order", + "BACKLOG_ORDER": "backlog order", + "SPRINT_ORDER": "sprint order", + "KANBAN_ORDER": "kanban order", + "TASKBOARD_ORDER": "taskboard order", + "US_ORDER": "us order" + } + }, + "BACKLOG": { + "SECTION_NAME": "Backlog", + "MOVE_US_TO_CURRENT_SPRINT": "Envia al Sprint", + "SHOW_FILTERS": "Mostra filtres", + "SHOW_TAGS": "Mostrar tags", + "EMPTY": "El teu backlog està buit!", + "CREATE_NEW_US": "Crea una nova US", + "CREATE_NEW_US_EMPTY_HELP": "Potser vols crear una nova història d'usuari", + "EXCESS_OF_POINTS": "Excés de punts", + "PENDING_POINTS": "Punts pendents", + "CLOSED_POINTS": "tancat", + "COMPACT_SPRINT": "Compacta Sprint", + "GO_TO_TASKBOARD": "Anar al taskboard {{::name}}", + "EDIT_SPRINT": "Editar sprint", + "TOTAL_POINTS": "total", + "STATUS_NAME": "Nom d'estatus", + "SORTABLE_FILTER_ERROR": "No pots portar al backlog si els filtres estàn oberts", + "DOOMLINE": "Extensió de projecte [Doomline]", + "CHART": { + "XAXIS_LABEL": "Sprints", + "YAXIS_LABEL": "Punts", + "OPTIMAL": "Punts pendent òptims per sprint {{xval}} deuría ser {{yval}}", + "REAL": "Punts pendent reals per sprint {{xval}} es {{yval}}", + "INCREMENT_TEAM": "Punts incrementats per requeriment de l'equip per sprint {{xval}} és {{yval}}", + "INCREMENT_CLIENT": "Punts incrementat per requeriment de client {{xval}} és {{yval}}" + }, + "TAGS": { + "SHOW": "Mostrar tags", + "HIDE": "Amaga tags" + }, + "TABLE": { + "COLUMN_US": "Històries d'usuari", + "TITLE_COLUMN_POINTS": "Selecciona vista per rol" + }, + "SPRINT_SUMMARY": { + "TOTAL_POINTS": "punts
totals", + "COMPLETED_POINTS": "punts
completats", + "OPEN_TASKS": "tasques
obertes", + "CLOSED_TASKS": "tasques
tancades", + "IOCAINE_DOSES": "iocaine
doses", + "SHOW_STATISTICS_TITLE": "Show statistics" + }, + "SUMMARY": { + "PROJECT_POINTS": "punts
projecte", + "DEFINED_POINTS": "punts
definits", + "CLOSED_POINTS": "punts
tancats", + "POINTS_PER_SPRINT": "points /
sprint" + }, + "FILTERS": { + "TITLE": "Filtres", + "REMOVE": "Esborra filtres", + "SHOW": "Show Filters", + "FILTER_CATEGORY_STATUS": "Status", + "FILTER_CATEGORY_TAGS": "Tags" + }, + "SPRINTS": { + "TITLE": "SPRINTS", + "DATE": "DD MMM YYYY", + "LINK_TASKBOARD": "Sprint Taskboard", + "TITLE_LINK_TASKBOARD": "Go to Taskboard of \"{{name}}\"", + "NUMBER_SPRINTS": "
sprints", + "TITLE_ACTION_NEW_SPRINT": "+ New sprint", + "ACTION_NEW_SPRINT": "+ New sprint", + "ACTION_SHOW_CLOSED_SPRINTS": "Show closed sprints", + "ACTION_HIDE_CLOSED_SPRINTS": "Hide closed sprints" + } + }, + "ERROR": { + "TEXT1": "Ha passat algo i els nostres Oompa Loompas estàn arreglant-ho.", + "TEXT2": "Prova a recarregar de nou", + "NOT_FOUND": "No trobat", + "NOT_FOUND_TEXT": "Error 404. La pàgina que busques no existeix. Pots tornar a la página principal de taiga i provar desde allí.", + "PERMISSION_DENIED": "Permis denegat", + "PERMISSION_DENIED_CODE": "Error 403", + "VERSION_ERROR": "Someone inside Taiga has changed this before and our Oompa Loompas cannot apply your changes. Please reload and apply your changes again (they will be lost)." + }, + "TASKBOARD": { + "SECTION_NAME": "Taskboard", + "TITLE_ACTION_ADD": "Afegir nova tasca", + "TITLE_ACTION_ADD_BULK": "Afegeix noves històries d'usuari en grup", + "TITLE_ACTION_ASSIGN": "Assignar tasca", + "TITLE_ACTION_EDIT": "Editar tasca", + "TABLE": { + "COLUMN": "Història d'usuari", + "TITLE_ACTION_FOLD": "Plegar columna", + "TITLE_ACTION_UNFOLD": "Desplegar columna", + "TITLE_ACTION_FOLD_ROW": "Plegar fila", + "TITLE_ACTION_UNFOLD_ROW": "Desplegar fila", + "FIELD_POINTS": "punts", + "ROW_UNASSIGED_TASKS_TITLE": "Tasques sense assignar" + }, + "CHARTS": { + "XAXIS_LABEL": "Days", + "YAXIS_LABEL": "Points", + "OPTIMAL": "Optimal pending points for day {{formattedDate}} should be {{roundedValue}}", + "REAL": "Punts pendents el dia {{formattedDate}} son {{roundedValue}}", + "DATE": "DD MMMM YYYY" + } + }, + "TASK": { + "LINK_TASKBOARD": "Taskboard", + "TITLE_LINK_TASKBOARD": "Go to the taskboard", + "PLACEHOLDER_SUBJECT": "Afegix la descripció de la tasca", + "TITLE_SELECT_STATUS": "Nom d'estatus", + "OWNER_US": "Aquesta tasca pertany a", + "TITLE_LINK_GO_OWNER": "Anar a història d'usuari", + "ORIGIN_US": "Aquesta tasca ha sigut creada desde", + "TITLE_LINK_GO_ORIGIN": "Anar a història d'usuari", + "BLOCKED": "Aquesta tasca està bloquejada", + "PREVIOUS": "tasca prèvia", + "NEXT": "pròxima tasca", + "TITLE_DELETE_ACTION": "Esborrar tasca", + "LIGHTBOX_TITLE_BLOKING_TASK": "Bloquejant tasca", + "FIELDS": { + "MILESTONE": "Sprint", + "USER_STORY": "Història d'usuari", + "IS_IOCAINE": "Es iocaina" + }, + "ACTION_IOCAINE": "Iocaína", + "TITLE_ACTION_IOCAINE": "Un poc saturat per una tasca? Fes-ho saber als teus companys clicant a Iocaina quan edites la tasca. Es possible ser inmune a aquesta (fictícia) poció mortal consumint xicotetes dòsis poc a poc, així com es possible millorar amb xicotets nous desafiaments!" + }, + "NOTIFICATION": { + "OK": "Tot està ok", + "WARNING": "Oops, ha passat algo...", + "WARNING_TEXT": "Our Oompa Loompas are sad, your changes were not saved!", + "SAVED": "Our Oompa Loompas saved all your changes!", + "CLOSE": "Tancar notificació", + "MAIL": "Notificaciones per correo", + "ASK_DELETE": "Segur que vols borrar?" + }, + "CANCEL_ACCOUNT": { + "TITLE": "Cancel·la el teu conter ací", + "SUBTITLE": "Sentim molt que deixes Taiga, esperem que hages disfrutat la teua estància :)", + "PLACEHOLDER_INPUT_TOKEN": "Cancela token de conter", + "ACTION_LEAVING": "Sí, m'hen vaig!", + "SUCCESS": "Els Oompa Loompas han esborrat el teu conter" + }, + "CHANGE_EMAIL_FORM": { + "TITLE": "Canvia el teu correu", + "SUBTITLE": "Un click més i el teu correu estarà actualitzat!", + "PLACEHOLDER_INPUT_TOKEN": "Canvia el token de correu", + "ACTION_CHANGE_EMAIL": "Canviar correu", + "SUCCESS": "Els Oompa Loompas han actualitzat el teu correu" + }, + "CHANGE_PASSWORD_RECOVERY_FORM": { + "TITLE": "Crea un nou password", + "SUBTITLE": "Menja un poc més de ferro, es bo pel cervell :P ", + "PLACEHOLDER_RECOVER_PASSWORD_TOKEN": "Recuperar token de contrasenya", + "LINK_NEED_TOKEN": "Neccesites un?", + "TITLE_LINK_NEED_TOKEN": "Necessites un token per a recuperar la teua contrasenya perque l'has oblidat?", + "PLACEHOLDER_NEW_PASSWORD": "nova contrasenya", + "PLACEHOLDER_RE_TYPE_NEW_PASSWORD": "Reescriu la nova contrasenya", + "ACTION_RESET_PASSWORD": "Resetejar contrasenya", + "SUCCESS": "Els Oompa Loompas han salvat la teua contrasenya
Prova a entrar amb ella." + }, + "FORGOT_PASSWORD_FORM": { + "TITLE": "Oops, has oblidat la teua contrasenya?", + "SUBTITLE": "Escriu el teu mot d'usuari o correo per a conseguir uno nou", + "PLACEHOLDER_FIELD": "Mot d'usuari i correu", + "ACTION_RESET_PASSWORD": "Resetejar contrasenya", + "LINK_CANCEL": "No, portam enrere, crec que ho recorde.", + "SUCCESS": "Mira el teu correu!
Hem enviat un correu a
{{email}}
amb les instrucciones per a setejar una nova contrasenya.", + "ERROR": "Segons els nostres Oompa Loompas, no estàs registrat encara." + }, + "LOGIN_COMMON": { + "HEADER": "Ja tinc un conter de Taiga", + "PLACEHOLDER_AUTH_NAME": "Mot d'usuari i correu (sensible a majúscules i minúscules)", + "LINK_FORGOT_PASSWORD": "L'has oblidat?", + "TITLE_LINK_FORGOT_PASSWORD": "Has oblidat la teua contrasenya?", + "ACTION_ENTER": "Entrar", + "ACTION_SIGN_IN": "Entrar", + "PLACEHOLDER_AUTH_PASSWORD": "Contrasenya (sensible a majúscules i minúscules)" + }, + "LOGIN_FORM": { + "ERROR_AUTH_INCORRECT": "Segons els Oompa Loompas el teu mot d'usuari/correu o contrasenya sòn incorrectes.", + "ERROR_GENERIC": "Segons els Oompa Loompas ha hagut un error.", + "SUCCESS": "Our Oompa Loompas están contents, benvinguts a Taiga." + }, + "INVITATION_LOGIN_FORM": { + "NOT_FOUND": "Ooops, ha hagut un problema
Els nosters Oompa Loompas no troben la teua invitació.", + "SUCCESS": "T'has incorporat a este projecte. Vos donem la benvinguda a {{project_name}}", + "ERROR": "Segons els nostres OOmpa Loompas, no estàs registrat encara o has escrit una contrasenya invàlida." + }, + "REGISTER_FORM": { + "PLACEHOLDER_NAME": "Tria un mot d'usuari (sensible a majúscules i minúscules)", + "PLACEHOLDER_FULL_NAME": "Escriu el teu nom complet", + "PLACEHOLDER_EMAIL": "El teu correu", + "PLACEHOLDER_PASSWORD": "Tria una contrasenya(sensible a majúscules i minúscules)", + "ACTION_SIGN_UP": "Registrar-se", + "TITLE_LINK_LOGIN": "Entrar", + "LINK_LOGIN": "Ja estàs registrat? Entra" + }, + "ISSUES": { + "LIST_SECTION_NAME": "Incidències", + "SECTION_NAME": "Detalls de incidència", + "ACTION_NEW_ISSUE": "+ NOVA INCIDÈNCIA", + "ACTION_PROMOTE_TO_US": "Promocionar història d'usuari", + "PLACEHOLDER_FILTER_NAME": "Escriu el filtre i pressiona Intro", + "PROMOTED": "Esta incidència ha sigut promcionada a US:", + "EXTERNAL_REFERENCE": "Esta incidència ha sigut creada desde", + "GO_TO_EXTERNAL_REFERENCE": "Anar a l'orige", + "BLOCKED": "Aquesta incidència està bloquejada", + "TITLE_PREVIOUS_ISSUE": "incidència prèvia", + "TITLE_NEXT_ISSUE": "pròxima incidència", + "ACTION_DELETE": "Delete issue", + "LIGHTBOX_TITLE_BLOKING_ISSUE": "Blocking issue", + "CONFIRM_PROMOTE": { + "TITLE": "Promote this issue to a new user story", + "MESSAGE": "Are you sure you want to create a new US from this Issue?" + }, + "FILTERS": { + "TITLE": "Filters", + "INPUT_SEARCH_PLACEHOLDER": "Subject or ref", + "TITLE_ACTION_SEARCH": "Search", + "ACTION_SAVE_CUSTOM_FILTER": "save as custom filter", + "BREADCRUMB": "Filters", + "TITLE_BREADCRUMB": "Filters", + "CATEGORIES": { + "TYPE": "Type", + "STATUS": "Status", + "SEVERITY": "Severity", + "PRIORITIES": "Priorities", + "TAGS": "Tags", + "ASSIGNED_TO": "Assigned to", + "CREATED_BY": "Created by", + "CUSTOM_FILTERS": "Custom filters" + }, + "CONFIRM_DELETE": { + "TITLE": "Delete custom filter", + "MESSAGE": "the custom filter '{{customFilterName}}'" + } + }, + "TABLE": { + "COLUMNS": { + "TYPE": "Type", + "SEVERITY": "Severity", + "PRIORITY": "Priority", + "SUBJECT": "Subject", + "STATUS": "Status", + "CREATED": "Created", + "ASSIGNED_TO": "Assigned to" + }, + "TITLE_ACTION_CHANGE_STATUS": "Change status", + "TITLE_ACTION_ASSIGNED_TO": "Assigned to", + "EMPTY": { + "TITLE": "There are no issues to report :-)", + "SUBTITLE": "Did you find an issue?", + "ACTION_CREATE_ISSUE": "Create a new Issue" + } + } + }, + "KANBAN": { + "SECTION_NAME": "Kanban", + "TITLE_ACTION_FOLD": "Plegar columna", + "TITLE_ACTION_UNFOLD": "Desplegar columna", + "TITLE_ACTION_FOLD_CARDS": "Plegar targeta", + "TITLE_ACTION_UNFOLD_CARDS": "Desplegar targetes", + "TITLE_ACTION_ADD_US": "Afegir història d'usuari", + "TITLE_ACTION_ADD_BULK": "Afegir en grup", + "ACTION_SHOW_ARCHIVED": "Mostrar arxivats", + "ACTION_HIDE_ARCHIVED": "Amagar arxivats", + "HIDDEN_USER_STORIES": "Les històries d'usuar en aques estatus estàn amagades", + "ARCHIVED": "You have archived", + "UNDO_ARCHIVED": "Drag & drop again to undo" + }, + "SEARCH": { + "FILTER_USER_STORIES": "Històries d'usuari", + "FILTER_ISSUES": "Incidències", + "FILTER_TASKS": "Tasca", + "FILTER_WIKI": "Pàgines de Wiki", + "PLACEHOLDER_SEARCH": "Buscar en...", + "TITLE_ACTION_SEARCH": "buscar", + "EMPTY_TITLE": "Pareix que no hem trobat res amb este criteri de recerca", + "EMPTY_DESCRIPTION": "Prova amb una de les pestanyes o busca de nou" + }, + "TEAM": { + "SECTION_NAME": "Equip", + "APP_TITLE": "EQUIP - {{projectName}}", + "PLACEHOLDER_INPUT_SEARCH": "Busca per nom complet...", + "COLUMN_MR_WOLF": "Mr. Wolf", + "EXPLANATION_COLUMN_MR_WOLF": "Incidències tancades", + "COLUMN_IOCAINE": "Beguedor de iocaína", + "EXPLANATION_COLUMN_IOCAINE": "Dosis de iocaina ingerides", + "COLUMN_CERVANTES": "Cervantes", + "EXPLANATION_COLUMN_CERVANTES": "Wiki pages edited", + "COLUMN_BUG_HUNTER": "Bug Hunter", + "EXPLANATION_COLUMN_BUG_HUNTER": "Issues reported", + "COLUMN_NIGHT_SHIFT": "Night Shift", + "EXPLANATION_COLUMN_NIGHT_SHIFT": "Tasks closed", + "COLUMN_TOTAL_POWER": "Total Power", + "EXPLANATION_COLUMN_TOTAL_POWER": "Total Points", + "SECTION_TITLE_TEAM": "Team >", + "SECTION_FILTER_ALL": "All", + "CONFIRM_LEAVE_PROJECT": "Are you sure you want to leave the project?", + "ACTION_LEAVE_PROJECT": "Leave this project" + }, + "CHANGE_PASSWORD": { + "SECTION_NAME": "Canviar contrasenya", + "FIELD_CURRENT_PASSWORD": "Contrasenya actual", + "PLACEHOLDER_CURRENT_PASSWORD": "La teua contrasenya actua (buit si no tens contrasenya encara)", + "FIELD_NEW_PASSWORD": "Nova contrasenya", + "PLACEHOLDER_NEW_PASSWORD": "Escriu una nova contrasenya", + "FIELD_RETYPE_PASSWORD": "Reescriu contrasenya", + "PLACEHOLDER_RETYPE_PASSWORD": "Reescriu contrasenya", + "ERROR_PASSWORD_MATCH": "The passwords doesn't match" + }, + "USER_SETTINGS": { + "AVATAR_MAX_SIZE": "[Max. grandària: {{maxFileSize}}]", + "MENU": { + "SECTION_TITLE": "Configuració d'usuari", + "USER_PROFILE": "Perfil d'usuari", + "CHANGE_PASSWORD": "Canviar contrasenya", + "EMAIL_NOTIFICATIONS": "Notificacions de correu" + }, + "NOTIFICATIONS": { + "SECTION_NAME": "Notificacions de correu", + "COLUMN_PROJECT": "Projecte", + "COLUMN_RECEIVE_ALL": "Recibir tot", + "COLUMN_ONLY_INVOLVED": "Només relevants", + "COLUMN_NO_NOTIFICATIONS": "No notifications", + "OPTION_ALL": "All", + "OPTION_INVOLVED": "Involved", + "OPTION_NONE": "None" + }, + "POPOVER": { + "USER_PROFILE": "Perfil d'usuari", + "CHANGE_PASSWORD": "Canviar contrasenya", + "NOTIFICATIONS": "Notificacions", + "FEEDBACK": "Feedback", + "TITLE_AVATAR": "User preferences" + } + }, + "USER_PROFILE": { + "IMAGE_HELP": "La imatge serà escalada a 80x80px.
", + "ACTION_CHANGE_IMAGE": "Canviar", + "ACTION_USE_GRAVATAR": "Utilitza imatge de gravatar", + "ACTION_DELETE_ACCOUNT": "Esborrar compte de Taiga", + "CHANGE_EMAIL_SUCCESS": "Mira el teu correu!
Hem enviat un correu al teu conter
amb les instrucciones per a escriure una nova adreça de correu", + "CHANGE_PHOTO": "Change photo", + "FIELD": { + "USERNAME": "Username", + "EMAIL": "Email", + "FULL_NAME": "Full name", + "PLACEHOLDER_FULL_NAME": "Set your full name (ex. Íñigo Montoya)", + "BIO": "Bio", + "PLACEHOLDER_BIO": "Tell us something about you", + "LANGUAGE": "Language", + "LANGUAGE_DEFAULT": "-- use default language --" + } + }, + "WIZARD": { + "SECTION_TITLE_CHOOSE_TEMPLATE": "Tria una plantilla", + "CHOOSE_TEMPLATE_TEXT": "Quina plantilla encaixa millor al teu projecte?", + "SECTION_TITLE_CREATE_PROJECT": "Crear projecte", + "CREATE_PROJECT_TEXT": "Nou projecte. Qué il·lusió!", + "PROGRESS_TEMPLATE_SELECTION": "Template selection", + "PROGRESS_NAME_DESCRIPTION": "Name and description" + }, + "WIKI": { + "DATETIME": "DD MMM YYYY HH:mm", + "PLACEHOLDER_PAGE": "Esciu pàgina del Wiki", + "REMOVE": "Esborar pàgina de Wiki", + "DELETE_LIGHTBOX_TITLE": "Esborrar pàgina de Wiki", + "NAVIGATION": { + "SECTION_NAME": "Links", + "ACTION_ADD_LINK": "Add link" + }, + "SUMMARY": { + "TIMES_EDITED": "times
edited", + "LAST_EDIT": "last
edit", + "LAST_MODIFICATION": "last modification" + } + } +} \ No newline at end of file From 83e7434d2731f8e6dd3a9ff35e003eb871c888ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Sat, 2 May 2015 20:11:37 +0200 Subject: [PATCH 104/194] [i18n] Date and time --- .tx/config | 1 - app/coffee/app.coffee | 2 +- app/coffee/modules/auth.coffee | 10 +++++++--- bower.json | 4 ++-- gulpfile.js | 2 +- scripts/manage_translations.py | 18 ++++++++++++++++-- 6 files changed, 27 insertions(+), 10 deletions(-) diff --git a/.tx/config b/.tx/config index ff559341..4cf4f302 100644 --- a/.tx/config +++ b/.tx/config @@ -6,4 +6,3 @@ lang_map = sr@latin:sr_Latn, zh_CN:zh_Hans, zh_TW:zh_Hant file_filter = app/locales/locale-.json source_file = app/locales/locale-en.json source_lang = en -type = PO diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index c8f666f0..a38b3625 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -244,7 +244,7 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven if not window.taigaConfig.debugInfo $translateProvider.fallbackLanguage(preferedLangCode) - moment.lang(preferedLangCode) + moment.locale(preferedLangCode) init = ($log, $config, $rootscope, $auth, $events, $analytics, $translate) -> diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index 1cd8d4d9..adf2f498 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -40,6 +40,11 @@ class AuthService extends taiga.Service constructor: (@rootscope, @storage, @model, @rs, @http, @urls, @translate) -> super() + _setLocales: -> + if @rootscope.user.lang + @translate.use(@rootscope.user.lang) + moment.locale(@rootscope.user.lang) + getUser: -> if @rootscope.user return @rootscope.user @@ -48,6 +53,7 @@ class AuthService extends taiga.Service if userData user = @model.make_model("users", userData) @rootscope.user = user + @._setLocales() return user return null @@ -57,9 +63,7 @@ class AuthService extends taiga.Service @storage.set("userInfo", user.getAttrs()) @rootscope.user = user - if @rootscope.user.lang - @translate.use(@rootscope.user.lang) - moment.lang(@rootscope.user.lang) + @._setLocales() clear: -> @rootscope.auth = null diff --git a/bower.json b/bower.json index 0b62786e..aa4355ca 100644 --- a/bower.json +++ b/bower.json @@ -68,7 +68,7 @@ "flot-orderBars": "emmerich/flot-orderBars", "flot-axislabels": "markrcote/flot-axislabels", "flot.tooltip": "~0.8.4", - "moment": "~2.6.0", + "moment": "~2.10.2", "isMobile": "~0.3.1", "favico.js": "0.3.4", "Sortable": "~0.1.8", @@ -82,7 +82,7 @@ }, "resolutions": { "lodash": "~2.4.1", - "moment": "~2.6.0", + "moment": "~2.10.2", "jquery": "~2.1.1", "angular": "1.3.11" }, diff --git a/gulpfile.js b/gulpfile.js index b630327c..82f82a83 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -125,7 +125,7 @@ paths.libs = [ paths.vendor + "angular-translate-loader-static-files/angular-translate-loader-static-files.js", paths.vendor + "angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js", paths.vendor + "i18next/i18next.js", - paths.vendor + "moment/min/moment-with-langs.js", + paths.vendor + "moment/min/moment-with-locales.js", paths.vendor + "checksley/checksley.js", paths.vendor + "pikaday/pikaday.js", paths.vendor + "jquery-flot/jquery.flot.js", diff --git a/scripts/manage_translations.py b/scripts/manage_translations.py index 751bf45d..7c265080 100644 --- a/scripts/manage_translations.py +++ b/scripts/manage_translations.py @@ -26,6 +26,12 @@ from argparse import RawTextHelpFormatter from subprocess import PIPE, Popen, call +FIXED_LOCALES = { + "zh-Hant": "zh-hant" + "zh-Hans": "zh-hans" +} + + def _tx_resource_for_name(name): """ Return the Transifex resource name """ return "taiga-front.{}".format(name) @@ -45,10 +51,18 @@ def fetch(resources=None, languages=None): else: for resource in resources: if languages is None: - call("tx pull -r {res} -a -f --minimum-perc=5".format(res=_tx_resource_for_name(resource)), shell=True) + call("tx pull -r {res} -a -f --minimum-perc=5".format(res=_tx_resource_for_name(resource)), + shell=True) else: for lang in languages: - call("tx pull -r {res} -f -l {lang}".format(res=_tx_resource_for_name(resource), lang=lang), shell=True) + call("tx pull -r {res} -f -l {lang}".format(res=_tx_resource_for_name(resource), lang=lang), + shell=True) + + if languages: + for lang in languages: + if lang in FIXED_LOCALES: + os.rename("app/locales/locale-{}.json".format(lang), + "app/locales/locale-{}.json".format(FIXED_LOCALES[lang])) def commit(resources=None, languages=None): From a74488e0ea4cd3ea8088a1c72d9993a7cb59fd0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Sun, 3 May 2015 23:46:31 +0200 Subject: [PATCH 105/194] [i18n] Add Traditional Chinese locales --- app/locales/locale-zh-hant.json | 1007 +++++++++++++++++++++++++++++++ 1 file changed, 1007 insertions(+) create mode 100644 app/locales/locale-zh-hant.json diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json new file mode 100644 index 00000000..284fee6b --- /dev/null +++ b/app/locales/locale-zh-hant.json @@ -0,0 +1,1007 @@ +{ + "COMMON": { + "YES": "Yes", + "NO": "No", + "LOADING": "載入中...", + "LOADING_PROJECT": "載入專案中...", + "DATE": "DD MMM YYYY", + "DATETIME": "DD MMM YYYY HH:mm", + "SAVE": "儲存", + "CANCEL": "取消", + "ACCEPT": "接受", + "DELETE": "刪除", + "CREATE": "創建", + "ADD": "新增", + "COPY_TO_CLIPBOARD": "複製到剪貼簿:Ctrl+C", + "EDIT": "編輯", + "DRAG": "拖拉", + "TAG_LINE": "你的敏捷、免費、和開放原始碼的專案管理工具", + "TAG_LINE_2": "愛你的專案", + "BLOCK": "封鎖", + "UNBLOCK": "解除封鎖", + "BLOCKED": "已封鎖", + "CREATED_BY": "由 {{fullDisplayName}}創建", + "FROM": "from", + "TO": "to", + "CLOSE": "關閉", + "BLOCKED_NOTE": "為何這個使用者故事被封鎖?", + "BLOCKED_REASON": "請解釋此原因", + "GO_HOME": "帶我回到首頁", + "PLUGINS": "外掛", + "BETA": "我們在測試中", + "ONE_ITEM_LINE": "一行一物 ", + "NEW_BULK": "新批次插入", + "RELATED_TASKS": "相關任務 ", + "LOGOUT": "登出", + "GENERIC_ERROR": "我們的系統指出{{error}}.", + "IOCAINE_TEXT": "感到任務的不堪負荷?確認其它人在編輯任務時知道此狀況,可以點選Iocaine。它可能會成為免疫的致命狀況,只要長期小量消耗,但如果你只是偶而挑戰它可有助表現。", + "TAGS": { + "PLACEHOLDER": "我在這裏,請標注我", + "DELETE": "刪除Tag", + "ADD": "新增標籤" + }, + "DESCRIPTION": { + "EMPTY": "留下空白顯得很無趣,寫下點描述吧 ", + "NO_DESCRIPTION": "未有任何描述" + }, + "FIELDS": { + "SUBJECT": "主旨", + "NAME": "名稱 ", + "URL": "網址", + "DESCRIPTION": "描述", + "VALUE": "數值", + "SLUG": "短語 ", + "COLOR": "顏色", + "IS_CLOSED": "關閉中?", + "STATUS": "狀態", + "ASSIGNED_TO": "指派給 ", + "POINTS": "點數", + "BLOCKED_NOTE": "已封鎖之筆記", + "IS_BLOCKED": "封鎖" + }, + "ROLES": { + "ALL": "所有" + }, + "ASSIGNED_TO": { + "NOT_ASSIGNED": "未指派", + "DELETE_ASSIGNMENT": "刪除指派", + "REMOVE_ASSIGNED": "數值", + "TOO_MANY": "太多用戶,繼續過濾中", + "CONFIRM_UNASSIGNED": "你確定要讓它無任何指派嗎?", + "TITLE_ACTION_EDIT_ASSIGNMENT": "Edit assignment" + }, + "STATUS": { + "CLOSED": "關閉", + "OPEN": "開啟" + }, + "WATCHERS": { + "ADD": "新增監督者", + "TITLE": "監督者", + "DELETE": "Delete watcher", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "Delete watcher..." + }, + "CUSTOM_ATTRIBUTES": { + "CUSTOM_FIELDS": "客製化欄位", + "SAVE": "儲存客製化欄位", + "EDIT": "編輯客製化欄位", + "DELETE": "刪除客製屬性", + "CONFIRM_DELETE": "記得這個客制欄位的數值都將被刪除
你確定要繼續嗎" + }, + "FILTERS": { + "TITLE": "過濾器", + "INPUT_PLACEHOLDER": "主旨或參考", + "TITLE_ACTION_FILTER_BUTTON": "搜尋", + "BREADCRUMB_TITLE": "回到類別", + "BREADCRUMB_FILTERS": "過濾器", + "BREADCRUMB_STATUS": "狀態" + }, + "WYSIWYG": { + "H1_BUTTON": "第一層標頭 ", + "H1_SAMPLE_TEXT": "你的頭銜 ", + "H2_BUTTON": "第二層標頭 ", + "H2_SAMPLE_TEXT": "你的頭銜 ", + "H3_BUTTON": "第三標頭", + "H3_SAMPLE_TEXT": "你的頭銜", + "BOLD_BUTTON": "粗體字", + "BOLD_BUTTON_SAMPLE_TEXT": "你的文字在此", + "ITALIC_BUTTON": "斜體字", + "ITALIC_SAMPLE_TEXT": "你的文字在此", + "STRIKE_BUTTON": "Strike", + "STRIKE_SAMPLE_TEXT": "你的文字在此", + "BULLETED_LIST_BUTTON": "次序列表", + "BULLETED_LIST_SAMPLE_TEXT": "你的文字在此", + "NUMERIC_LIST_BUTTON": "列號清單", + "NUMERIC_LIST_SAMPLE_TEXT": "你的文字在此 ", + "PICTURE_BUTTON": "圖片", + "PICTURE_SAMPLE_TEXT": "對照圖片的說明文", + "LINK_BUTTON": "連結", + "LINK_SAMPLE_TEXT": "文字連結在此", + "QUOTE_BLOCK_BUTTON": "引言區塊", + "QUOTE_BLOCK_SAMPLE_TEXT": "你的文字在此", + "CODE_BLOCK_BUTTON": "原始碼區塊", + "CODE_BLOCK_SAMPLE_TEXT": "你的文字在此", + "PREVIEW_BUTTON": "預視 ", + "EDIT_BUTTON": "編輯", + "MARKDOWN_HELP": "Markdown 語法協助" + }, + "PERMISIONS_CATEGORIES": { + "SPRINTS": { + "NAME": "衝刺任務", + "VIEW_SPRINTS": "檢視衝刺任務 ", + "ADD_SPRINTS": "增加衝刺任務", + "MODIFY_SPRINTS": "修正衝刺任務", + "DELETE_SPRINTS": "刪除衝刺任務" + }, + "USER_STORIES": { + "NAME": "使用者故事", + "VIEW_USER_STORIES": "檢視使用者故事", + "ADD_USER_STORIES": "新增使用者故事", + "MODIFY_USER_STORIES": "修正使用者故事", + "DELETE_USER_STORIES": "刪除使用者故事" + }, + "TASKS": { + "NAME": "任務 ", + "VIEW_TASKS": "檢視任務 ", + "ADD_TASKS": "新增任務 ", + "MODIFY_TASKS": "修正任務 ", + "DELETE_TASKS": "刪除任務" + }, + "ISSUES": { + "NAME": "問題 ", + "VIEW_ISSUES": "檢視問題 ", + "ADD_ISSUES": "新增問題 ", + "MODIFY_ISSUES": "修正議題 ", + "DELETE_ISSUES": "刪除問題 " + }, + "WIKI": { + "NAME": "維基", + "VIEW_WIKI_PAGES": "檢視維基頁", + "ADD_WIKI_PAGES": "新增維基頁", + "MODIFY_WIKI_PAGES": "修正維基頁", + "DELETE_WIKI_PAGES": "刪除維基頁 ", + "VIEW_WIKI_LINKS": "檢視維基連結", + "ADD_WIKI_LINKS": "新增維基連結", + "DELETE_WIKI_LINKS": "刪除維基連結" + } + } + }, + "AUTH": { + "INVITED_YOU": "已邀請您加入此專案", + "NOT_REGISTERED_YET": "還沒註冊嗎?", + "REGISTER": "註冊", + "CREATE_ACCOUNT": "在此建立您的免費帳號" + }, + "ATTACHMENT": { + "SECTION_NAME": "附件", + "TITLE": "{{ fileName }} uploaded on {{ date }}", + "DESCIPTION": "輸入一段簡短敘述", + "DEPRECATED_FILE": "棄用?", + "ADD": "加入新附件 <%- maxFileSizeMsg %>", + "MAX_FILE_SIZE": "[Max. size: {{maxFileSize}}]", + "SHOW_DEPRECATED": "+ 顯示棄用的附件", + "HIDE_DEPRECATED": "+ 隱藏棄用的附件", + "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} 遭棄用)", + "MAX_UPLOAD_SIZE": "上傳檔案最大容量限制 {{maxFileSize}}", + "DATE": "DD MMM YYYY [at] hh:mm", + "ERROR_UPLOAD_ATTACHMENT": "We have not been able to upload '{{fileName}}'. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Delete attachment...", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "the attachment '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": "We have not been able to delete: {{errorMessage}}", + "FIELDS": { + "IS_DEPRECATED": "被棄用" + } + }, + "PAGINATION": { + "PREVIOUS": "Prev", + "NEXT": "下一個" + }, + "ADMIN": { + "COMMON": { + "TITLE_ACTION_EDIT_VALUE": "編輯數值", + "TITLE_ACTION_DELETE_VALUE": "删除值" + }, + "HELP": "需要幫助嗎?看看我們的支援頁面吧!", + "PROJECT_DEFAULT_VALUES": { + "TITLE": "預設值", + "SUBTITLE": "將所有選項設為預設值" + }, + "MEMBERSHIPS": { + "TITLE": "管理成員", + "ADD_BUTTON": "+ 新成員", + "ADD_BUTTON_TITLE": "增加新成員" + }, + "PROJECT_EXPORT": { + "TITLE": "匯出", + "SUBTITLE": "匯出你的專案以備份,或以此為基礎來建立一個新的。", + "EXPORT_BUTTON": "匯出", + "EXPORT_BUTTON_TITLE": "匯出你的專案", + "LOADING_TITLE": "傾倒檔案正在生成中", + "DUMP_READY": "你注入的檔案已完成", + "LOADING_MESSAGE": "請勿關閉本頁", + "ASYNC_MESSAGE": "準備好後,我們會送給 你一封電子郵件", + "SYNC_MESSAGE": "如果未能自動下載,請點選此處 . ", + "ERROR": "我們的系統無法製作你的滙出資料,請再試一次 ", + "ERROR_BUSY": "抱歉系統繁忙中,請稍後再試試 ", + "ERROR_MESSAGE": "我們的系統在生成你的傾倒時遇到一些問題: {{message}}" + }, + "MODULES": { + "TITLE": "模組", + "ENABLE": "啟用", + "DISABLE": "停用", + "BACKLOG": "Backlog", + "BACKLOG_DESCRIPTION": "管理你的 User Story 讓接下來的及優先的工作能被有條理地檢視 ", + "KANBAN": "Kanban(看板)", + "KANBAN_DESCRIPTION": "在此看板上組織你的專案", + "ISSUES": "問題 ", + "ISSUES_DESCRIPTION": "追踪系統錯誤問題強化你的專案,不要錯過任何事 ", + "WIKI": "維基", + "WIKI_DESCRIPTION": "新增,修正或是刪除與他人合作的內容。這裏正是專案文件記錄區", + "MEETUP": "符合", + "MEETUP_DESCRIPTION": "選擇你的視訊系統。有些開發者需要面對面接觸", + "SELECT_VIDEOCONFERENCE": "選擇一個視訊會議系統 ", + "SALT_CHAT_ROOM": "If you want you can append a salt code to the name of the chat room" + }, + "PROJECT_PROFILE": { + "PAGE_TITLE": "專案檔案 - {{sectionName}} - {{projectName}}", + "PROJECT_DETAILS": "專案細節", + "PROJECT_NAME": "專案名稱", + "PROJECT_SLUG": "專案代稱", + "NUMBER_SPRINTS": "衝刺任務數目 ", + "NUMBER_US_POINTS": "使用者故事點數數目", + "DESCRIPTION": "描述", + "PUBLIC_PROJECT": "公開專案", + "PRIVATE_PROJECT": "不公開專案", + "DELETE": "刪除此專案" + }, + "REPORTS": { + "TITLE": "Reports", + "SUBTITLE": "以 CSV 格式匯出你的專案資料,並製作你的專屬報告", + "DESCRIPTION": "下載CSV檔案或是複製這個生成的網址到你愛用的文字編輯器或電子表格上製作自己的專案檔案資料報告。你可能輕易地視覺化或分析這些資料。", + "HELP": "使用者故事預設欄位", + "REGENERATE_TITLE": "改變網址", + "REGENERATE_SUBTITLE": "你將要改變CSV資料的連結網址,之前的網址將失效。你確定要這樣做嗎?", + "CSV_TYPE_US": "使用者故事", + "CSV_TYPE_TASK": "任務 ", + "CSV_TYPE_ISSUE": "問題 " + }, + "CUSTOM_FIELDS": { + "TITLE": "客製化欄位", + "SUBTITLE": "指定使用者故事,任務與問題一些客製化欄位", + "US_DESCRIPTION": "使用者客製欄位", + "US_ADD": "在使用者故事中加入客制欄位", + "TASK_DESCRIPTION": "任務客製化欄位", + "TASK_ADD": "在任務中加入客制欄位", + "ISSUE_DESCRIPTION": "問題客製化欄位", + "ISSUE_ADD": "在問題中加入客制欄位" + }, + "PROJECT_VALUES": { + "APP_TITLE": "專案數值- {{sectionName}} - {{projectName}}", + "REPLACEMENT": "所有此數值物品將改成", + "ERROR_DELETE_ALL": "你不能刪除所有數值" + }, + "PROJECT_VALUES_POINTS": { + "TITLE": "使用者故事點數", + "SUBTITLE": "指定你的使用者故事點數可能預估為", + "ACTION_ADD": "增加點數" + }, + "PROJECT_VALUES_PRIORITIES": { + "TITLE": "問題優先性", + "SUBTITLE": "指明你將遇到的問題優先程度" + }, + "PROJECT_VALUES_SEVERITIES": { + "TITLE": "問題急迫性", + "SUBTITLE": "指明你將遇到問題的嚴重程度" + }, + "PROJECT_VALUES_STATUS": { + "TITLE": "狀態", + "SUBTITLE": "指明你的使用者故事狀態,任務以及經歷問題 ", + "US_TITLE": "使用者故事狀態", + "TASK_TITLE": "任務狀態", + "ISSUE_TITLE": "問題狀態" + }, + "PROJECT_VALUES_TYPES": { + "TITLE": "類型", + "SUBTITLE": "指定你的問題類型可能是", + "ISSUE_TITLE": "問題類型", + "ACTION_ADD": "新增{{objName}}" + }, + "ROLES": { + "SECTION_NAME": "角色- {{projectName}}", + "WARNING_NO_ROLE": "注意,你的專案中無角色可以評估使用者故事的點數", + "HELP_ROLE_ENABLED": "當啟動時,被指派此角色的成員將可以評估使用者故事點數", + "COUNT_MEMBERS": "{{ role.members_count }} 這類角色的成員", + "TITLE_DELETE_ROLE": "删除角色", + "REPLACEMENT_ROLE": "和此角色有關的使用者都將遭移除 ", + "WARNING_DELETE_ROLE": "小心, 所有角色的估算都將會移除", + "ERROR_DELETE_ALL": "你不能刪除所有數值", + "EXTERNAL_USER": "外部使用者" + }, + "THIRD_PARTIES": { + "SECRET_KEY": "Secret key", + "PAYLOAD_URL": "有效載荷網址", + "VALID_IPS": "有效來源IP(請用逗點分開)" + }, + "BITBUCKET": { + "SECTION_NAME": "Bitbucket", + "APP_TITLE": "Bitbucket - {{projectName}}", + "INFO_VERIFYING_IP": "Bitbucket requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation." + }, + "GITLAB": { + "SECTION_NAME": "Gitlob", + "APP_TITLE": "Gitlab - {{projectName}}", + "INFO_VERIFYING_IP": "Gitlab requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation." + }, + "GITHUB": { + "SECTION_NAME": "Githun", + "APP_TITLE": "Gitlab - {{projectName}}" + }, + "WEBHOOKS": { + "APP_TITLE": "Webhooks- {{projectName}}", + "SECTION_NAME": "網頁觸發 ", + "SUBTITLE": "網頁觸發通知關於Taiga事件的外部服務,例如評論,使用者故事等。 ", + "ADD_NEW": "新增一個網頁觸發 ", + "TYPE_NAME": "鍵入服務名稱 ", + "TYPE_PAYLOAD_URL": "鍵入服務有效載荷網址", + "TYPE_SERVICE_SECRET": "鍵入服務密碼鑰匙 ", + "SAVE": "儲存網頁觸發 ", + "CANCEL": "取消網頁觸發 ", + "SHOW_HISTORY": "(顯示記錄)", + "TEST": "測試網頁觸發 ", + "EDIT": "編輯網頁觸發 ", + "DELETE": "刪除網頁觸發 ", + "REQUEST": "要求", + "RESEND_REQUEST": "重送出要求", + "HEADERS": "標頭 ", + "PAYLOAD": "有效載荷", + "RESPONSE": "回應", + "DATE": "DD MMM YYYY [at] hh:mm", + "ACTION_HIDE_HISTORY": "(藏記錄)", + "ACTION_HIDE_HISTORY_TITLE": "藏記錄細節", + "ACTION_SHOW_HISTORY": "(顯示記錄)", + "ACTION_SHOW_HISTORY_TITLE": "顯示記錄細節", + "WEBHOOK_NAME": "網頁觸發 '{{name}}'" + }, + "CUSTOM_ATTRIBUTES": { + "ADD": "加入客製化欄位", + "EDIT": "編輯客製化欄位", + "DELETE": "刪除客製欄位", + "SAVE_TITLE": "儲存客製化欄位", + "CANCEL_TITLE": "取消創建", + "SET_FIELD_NAME": "設定你的客制欄位名稱 ", + "SET_FIELD_DESCRIPTION": "設定你客製化欄位的文字描述", + "ACTION_UPDATE": "更新客製化欄位", + "ACTION_CANCEL_EDITION": "取消編輯 " + }, + "MEMBERSHIP": { + "COLUMN_MEMBER": "成員", + "COLUMN_ADMIN": "管理者", + "COLUMN_ROLE": "角色", + "COLUMN_STATUS": "狀態", + "STATUS_ACTIVE": "活躍 ", + "STATUS_PENDING": "待辦中", + "DELETE_MEMBER": "刪除成員", + "SUCCESS_SEND_INVITATION": "我們已再次發出邀請信給'{{email}}'. ", + "ERROR_SEND_INVITATION": "我們未送出邀請 ", + "SUCCESS_DELETE": "已刪除 {{message}}.", + "ERROR_DELETE": "我們無法刪除 {{message}}.", + "DEFAULT_DELETE_MESSAGE": "邀請 {{email}}" + }, + "DEFAULT_VALUES": { + "LABEL_POINTS": "點數選擇器預設值", + "LABEL_US": "使用者故事狀態選擇器預設值", + "LABEL_TASK_STATUS": "任務狀態選擇器預設值", + "LABEL_PRIORITY": "優先選擇器預設值", + "LABEL_SEVERITY": "急迫性選擇器預設值", + "LABEL_ISSUE_TYPE": "問題類型選擇器預設值", + "LABEL_ISSUE_STATUS": "問題狀態選擇器預設值" + }, + "CSV": { + "TITLE": "{{csvType}} 報告", + "DOWNLOAD": "下戴CSV檔案", + "URL_FIELD_PLACEHOLDER": "再次產生CSV 網址", + "TITLE_REGENERATE_URL": "再次產生CSV 網址", + "ACTION_GENERATE_URL": "產生網址", + "ACTION_REGENERATE": "再次產生" + }, + "STATUS": { + "PLACEHOLDER_WRITE_STATUS_NAME": "為此新狀態命名" + }, + "TYPES": { + "PLACEHOLDER_WRITE_NAME": "為此新要素命名" + }, + "US_STATUS": { + "ACTION_ADD_STATUS": "增加新狀態", + "IS_ARCHIVED_COLUMN": "是否歸檔", + "WIP_LIMIT_COLUMN": "WIP限制", + "PLACEHOLDER_WRITE_NAME": "為此新狀態命名" + }, + "MENU": { + "TITLE": "管理者", + "PROJECT": "專案", + "ATTRIBUTES": "屬性", + "MEMBERS": "成員", + "PERMISSIONS": "權限", + "INTEGRATIONS": "整合", + "PLUGINS": "外掛" + }, + "SUBMENU_PROJECT_VALUES": { + "STATUS": "狀態", + "POINTS": "點數", + "PRIORITIES": "優先性", + "SEVERITIES": "急迫性", + "TYPES": "類型", + "CUSTOM_FIELDS": "客製化欄位" + }, + "SUBMENU_PROJECT_PROFILE": { + "TITLE": "專案檔案" + }, + "SUBMENU_ROLES": { + "TITLE": "角色", + "ACTION_NEW_ROLE": "+ 新角色", + "TITLE_ACTION_NEW_ROLE": "新增角色" + }, + "SUBMENU_THIDPARTIES": { + "TITLE": "服務 " + } + }, + "PROJECT": { + "WELCOME": "歡迎", + "SECTION_PROJECTS": "專案", + "STATS": { + "PROJECT": "專案
點數", + "DEFINED": "已定義
點數", + "ASSIGNED": "已指派
點數", + "CLOSED": "已關閉
點數" + }, + "SECTION": { + "SEARCH": "搜尋", + "BACKLOG": "積壓", + "KANBAN": "Kanban(看板)", + "ISSUES": "問題 ", + "WIKI": "維基", + "TEAM": "團隊", + "MEETUP": "符合", + "ADMIN": "管理者" + }, + "NAVIGATION": { + "SECTION_TITLE": "你的專案", + "PLACEHOLDER_SEARCH": "搜尋", + "ACTION_CREATE_PROJECT": "創建專案", + "TITLE_ACTION_IMPORT": "滙入專案", + "TITLE_PRVIOUS_PROJECT": "顯示過去專案", + "TITLE_NEXT_PROJECT": "顯示下一個任務" + }, + "IMPORT": { + "TITLE": "滙入專案中", + "DESCRIPTION": "這個過桯要花點時間,請保持视窗開啟", + "ASYNC_IN_PROGRESS_TITLE": "我們的工程師對你的專案很重要哦", + "ASYNC_IN_PROGRESS_MESSAGE": "這個過程要花上一點時間
當弄好時我們會發給你一封郵件", + "ERROR": "系統在滙進你倒入的資料時遇上一些問題,請再試一次", + "ERROR_TOO_MANY_REQUEST": "抱歉系統繁忙中,請稍後再試試 ", + "ERROR_MESSAGE": "我們的系統無法滙入你的資料", + "SYNC_SUCCESS": "你的專案已成功滙入" + } + }, + "LIGHTBOX": { + "DELETE_ACCOUNT": { + "SECTION_NAME": "刪除Taiga帳戶", + "CONFIRM": "你確定要刪除Taiga帳戶嗎?", + "SUBTITLE": "我們會想念你:-(" + }, + "DELETE_PROJECT": { + "TITLE": "刪除專案", + "QUESTION": "你確定要刪除這個專案嗎?", + "SUBTITLE": "所有專案資料 (US/Tasks/Issues/Sprints/WikiPages) 將會遺失! :-(", + "CONFIRM": "是的,我很確定" + }, + "ASSIGNED_TO": { + "SELECT": "選擇要旨派給", + "SEARCH": "搜尋使用者" + }, + "ADD_MEMBER": { + "TITLE": "新成員", + "HELP_TEXT": "如果用戶已註冊Taiga帳戶,他們會自動被加入。否則他們會收到一封加入的邀請信" + }, + "CREATE_ISSUE": { + "TITLE": "新增問題 " + }, + "FEEDBACK": { + "TITLE": "告訴我們你的故事", + "COMMENT": "系統錯誤,有改進建議有樂趣,或者是你使用Taiga 上的惡夢?", + "ACTION_SEND": "送出回饋 " + }, + "SEARCH": { + "TITLE": "搜尋", + "PLACEHOLDER_SEARCH": "你在找什麼?" + }, + "ADD_EDIT_SPRINT": { + "TITLE": "新衝刺任務 ", + "PLACEHOLDER_SPRINT_NAME": "衝刺任務名稱", + "PLACEHOLDER_SPRINT_START": "預估開始", + "PLACEHOLDER_SPRINT_END": "預估結束", + "ACTION_DELETE_SPRINT": "你確定要刪除這個衝刺任務嗎?", + "TITLE_ACTION_DELETE_SPRINT": "刪除衝刺任務", + "LAST_SPRINT_NAME": "最後衝刺任務 {{lastSprint}} ;-) " + }, + "CREATE_EDIT_TASK": { + "TITLE": "新任務 ", + "PLACEHOLDER_SUBJECT": "任務主旨", + "PLACEHOLDER_STATUS": "任務狀態", + "OPTION_UNASSIGNED": "未指派", + "PLACEHOLDER_SHORT_DESCRIPTION": "輸入一段簡短描述", + "ACTION_EDIT": "編輯任務 " + }, + "CREATE_EDIT_US": { + "TITLE": "新使用者故事", + "PLACEHOLDER_DESCRIPTION": "請加上一些描述文字以幫助其它人易了解此使用者故事", + "NEW_US": "新使用者故事", + "EDIT_US": "編輯使用者故事" + }, + "DELETE_SPRINT": { + "TITLE": "刪除衝刺任務" + }, + "CREATE_MEMBER": { + "PLACEHOLDER_INVITATION_TEXT": "(非必要) 加上一段私人文字在邀請信,告訴你的新成員一些好事 ;-)", + "PLACEHOLDER_TYPE_EMAIL": "輸入一個電郵地址" + } + }, + "US": { + "LINK_TASKBOARD": "任務板", + "TITLE_LINK_TASKBOARD": "到任務板去", + "TOTAL_POINTS": "全部", + "ADD": "+新增使用者故事", + "ADD_BULK": "批次加入新使用者故事", + "PROMOTED": "此使用者故事已提昇成問題:", + "TITLE_LINK_GO_TO_ISSUE": "到問題 ", + "EXTERNAL_REFERENCE": "此使用者故事創造者是", + "GO_TO_EXTERNAL_REFERENCE": "回到一開始", + "BLOCKED": "這個使用者故事已被封鎖", + "PREVIOUS": "之前的使用者故事", + "NEXT": "下一個使用者故事", + "TITLE_DELETE_ACTION": "刪除使用者故事", + "LIGHTBOX_TITLE_BLOKING_US": "封鎖中的使用者故事", + "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} 任務完成", + "ASSIGN": "指派使用者故事", + "NOT_ESTIMATED": "無預估", + "TOTAL_US_POINTS": "全部使用者故事點數", + "FIELDS": { + "TEAM_REQUIREMENT": "團隊要求", + "CLIENT_REQUIREMENT": "客戶要求", + "FINISH_DATE": "完成日期" + } + }, + "COMMENTS": { + "DELETED_INFO": "Comment deleted by {{user}} on {{date}}", + "TITLE": "評論", + "COMMENT": "評論", + "TYPE_NEW_COMMENT": "在此輸入一個新的評論", + "SHOW_DELETED": "顯示遭刪除的評論 ", + "HIDE_DELETED": "隱藏已刪除之評論 ", + "RESTORE": "恢復原評論 " + }, + "ACTIVITY": { + "SHOW_ACTIVITY": "顯示動態", + "DATETIME": "DD MMM YYYY HH:mm", + "SHOW_MORE": "+ 顯示過去條目 ({{showMore}} more)", + "TITLE": "動態", + "REMOVED": "已移除", + "ADDED": "已加入", + "US_POINTS": "使用者故事點數({{name}})", + "NEW_ATTACHMENT": "新附件", + "DELETED_ATTACHMENT": "已刪除附件", + "UPDATED_ATTACHMENT": "更新附件 {{filename}}", + "DELETED_CUSTOM_ATTRIBUTE": "刪除客製屬性", + "SIZE_CHANGE": "Made {size, plural, one{one change} other{# changes}}", + "VALUES": { + "YES": "yes", + "NO": "no", + "EMPTY": "empty", + "UNASSIGNED": "unassigned" + }, + "FIELDS": { + "SUBJECT": "subject", + "NAME": "name", + "DESCRIPTION": "description", + "CONTENT": "content", + "STATUS": "status", + "IS_CLOSED": "is closed", + "FINISH_DATE": "finish date", + "TYPE": "type", + "PRIORITY": "priority", + "SEVERITY": "severity", + "ASSIGNED_TO": "assigned to", + "WATCHERS": "watchers", + "MILESTONE": "sprint", + "USER_STORY": "user story", + "PROJECT": "project", + "IS_BLOCKED": "is blocked", + "BLOCKED_NOTE": "blocked note", + "POINTS": "points", + "CLIENT_REQUIREMENT": "client requirement", + "TEAM_REQUIREMENT": "team requirement", + "IS_IOCAINE": "is iocaine", + "TAGS": "tags", + "ATTACHMENTS": "attachments", + "IS_DEPRECATED": "is deprecated", + "ORDER": "order", + "BACKLOG_ORDER": "backlog order", + "SPRINT_ORDER": "sprint order", + "KANBAN_ORDER": "kanban order", + "TASKBOARD_ORDER": "taskboard order", + "US_ORDER": "us order" + } + }, + "BACKLOG": { + "SECTION_NAME": "積壓", + "MOVE_US_TO_CURRENT_SPRINT": "移到目前的 Sprint", + "SHOW_FILTERS": "顯示過濾器", + "SHOW_TAGS": "顯示標籤 (Tag)", + "EMPTY": "你的積壓已清空", + "CREATE_NEW_US": "創建一個新的使用者故事", + "CREATE_NEW_US_EMPTY_HELP": "你可以創建一個新使用者故事", + "EXCESS_OF_POINTS": "超過的點數", + "PENDING_POINTS": "待核點數", + "CLOSED_POINTS": "關閉", + "COMPACT_SPRINT": "濃縮衝刺點數", + "GO_TO_TASKBOARD": "到任務板 {{spring.name}}", + "EDIT_SPRINT": "編輯衝刺任務 ", + "TOTAL_POINTS": "全部", + "STATUS_NAME": "狀態名稱 ", + "SORTABLE_FILTER_ERROR": "You can't drop on backlog when filters are open", + "DOOMLINE": "專案規模 [Doomline]", + "CHART": { + "XAXIS_LABEL": "Sprints", + "YAXIS_LABEL": "Points", + "OPTIMAL": "最佳給衝刺任務待辦點數 {{xval}} 應是 {{yval}}", + "REAL": "任務衝刺實際待辦點數 {{xval}} 為 {{yval}}", + "INCREMENT_TEAM": "團隊要求的任務衝刺逐步新增點數 {{xval}} 為 {{yval}}", + "INCREMENT_CLIENT": "客戶要求的任務衝刺逐步新增點數 {{xval}} 為 {{yval}}" + }, + "TAGS": { + "SHOW": "顯示標籤", + "HIDE": "隱藏標籤" + }, + "TABLE": { + "COLUMN_US": "使用者故事", + "TITLE_COLUMN_POINTS": "選擇檢示每個角色" + }, + "SPRINT_SUMMARY": { + "TOTAL_POINTS": "全部
點數", + "COMPLETED_POINTS": "已完成
點數", + "OPEN_TASKS": "開啟
任務", + "CLOSED_TASKS": "已關閉
任務", + "IOCAINE_DOSES": "毒物
劑量", + "SHOW_STATISTICS_TITLE": "顯示統計" + }, + "SUMMARY": { + "PROJECT_POINTS": "專案
點數", + "DEFINED_POINTS": "已定義
點數", + "CLOSED_POINTS": "已關閉
點數", + "POINTS_PER_SPRINT": "點數 /
衝刺任務" + }, + "FILTERS": { + "TITLE": "過濾器", + "REMOVE": "移除過濾器", + "SHOW": "顯示過濾器", + "FILTER_CATEGORY_STATUS": "狀態", + "FILTER_CATEGORY_TAGS": "標籤" + }, + "SPRINTS": { + "TITLE": "衝刺任務", + "DATE": "DD MMM YYYY", + "LINK_TASKBOARD": "衝刺任務板", + "TITLE_LINK_TASKBOARD": "到任務板 {{spring.name}}", + "NUMBER_SPRINTS": "
衝刺任務 ", + "TITLE_ACTION_NEW_SPRINT": "+ 新衝刺任務 ", + "ACTION_NEW_SPRINT": "+ 新衝刺任務 ", + "ACTION_SHOW_CLOSED_SPRINTS": "顯示關閉衝刺任務", + "ACTION_HIDE_CLOSED_SPRINTS": "隱藏衝刺任務" + } + }, + "ERROR": { + "TEXT1": "系統出了一點問題,工程師正在搶修中", + "TEXT2": "請再重新載入", + "NOT_FOUND": "找不到", + "NOT_FOUND_TEXT": "Error 404,你要找的網頁不存在,你可以稍後再回來TAIGA首頁,看看是否能再次找到要找的東西。", + "PERMISSION_DENIED": "無此權限", + "PERMISSION_DENIED_CODE": "Error 403.", + "VERSION_ERROR": "Taiga某人之前更改了這個,而我們的工程師無法再做改變。請重新載入頁面來使用你的更新(之前設定將消失)" + }, + "TASKBOARD": { + "SECTION_NAME": "任務板", + "TITLE_ACTION_ADD": "增加新任務 ", + "TITLE_ACTION_ADD_BULK": "批次加入新任務 ", + "TITLE_ACTION_ASSIGN": "指派任務 ", + "TITLE_ACTION_EDIT": "結束任務 ", + "TABLE": { + "COLUMN": "使用者故事", + "TITLE_ACTION_FOLD": "隱藏欄位", + "TITLE_ACTION_UNFOLD": "未隱藏欄位", + "TITLE_ACTION_FOLD_ROW": "隱藏列數", + "TITLE_ACTION_UNFOLD_ROW": "未隱藏列數", + "FIELD_POINTS": "點數", + "ROW_UNASSIGED_TASKS_TITLE": "未指派的任務" + }, + "CHARTS": { + "XAXIS_LABEL": "Days", + "YAXIS_LABEL": "Points", + "OPTIMAL": "Optimal pending points for day {{formattedDate}} should be {{roundedValue}}", + "REAL": "一天真實的待辦點數 {{formattedDate}} is {{roundedValue}}", + "DATE": "DD MMMM YYYY" + } + }, + "TASK": { + "LINK_TASKBOARD": "任務板", + "TITLE_LINK_TASKBOARD": "到任務板去", + "PLACEHOLDER_SUBJECT": "鍵入新任務主旨", + "TITLE_SELECT_STATUS": "狀態名稱 ", + "OWNER_US": "這任務屬於", + "TITLE_LINK_GO_OWNER": "到使用者故事", + "ORIGIN_US": "此任務創造者是", + "TITLE_LINK_GO_ORIGIN": "到使用者故事", + "BLOCKED": "這任務已被封鎖", + "PREVIOUS": "之前的任務 ", + "NEXT": "下一個任務 ", + "TITLE_DELETE_ACTION": "刪除任務", + "LIGHTBOX_TITLE_BLOKING_TASK": "封鎖中的任務 ", + "FIELDS": { + "MILESTONE": "衝刺任務", + "USER_STORY": "使用者故事", + "IS_IOCAINE": "Is iocaine" + }, + "ACTION_IOCAINE": "Iocaine", + "TITLE_ACTION_IOCAINE": "感到任務的不勘負荷?確定其它人知道此狀況在編輯任務時點選此「毒藥鍵」。這種致命毒物如果長期吸食微量,最後可能免疫。因此你最好偶而做點出奇的挑戰。" + }, + "NOTIFICATION": { + "OK": "一切還好", + "WARNING": "哇,有狀況發生", + "WARNING_TEXT": "很抱歉你的變動並未成功儲存", + "SAVED": "我們系統已儲存你所有變動", + "CLOSE": "關閉通知", + "MAIL": "透過郵件通知", + "ASK_DELETE": "你確定要刪除嗎?" + }, + "CANCEL_ACCOUNT": { + "TITLE": "取消您的帳戶", + "SUBTITLE": "很遺憾你要離開Taiga,希望你喜歡這段時光:", + "PLACEHOLDER_INPUT_TOKEN": "取消帳戶代碼 ", + "ACTION_LEAVING": "是的,我要走了", + "SUCCESS": "我們系統已移附你的帳戶" + }, + "CHANGE_EMAIL_FORM": { + "TITLE": "變更電子郵件", + "SUBTITLE": "確認你的電子郵件要更新", + "PLACEHOLDER_INPUT_TOKEN": "變更電郵代碼 ", + "ACTION_CHANGE_EMAIL": "變更電郵地址", + "SUCCESS": "我們系統已更新你的電子郵件" + }, + "CHANGE_PASSWORD_RECOVERY_FORM": { + "TITLE": "創建新Taiga通過", + "SUBTITLE": "你也許該吃點鐵質豐富的食物,它對你的大腦有益處:p", + "PLACEHOLDER_RECOVER_PASSWORD_TOKEN": "回復密碼代碼 ", + "LINK_NEED_TOKEN": "需要一個?", + "TITLE_LINK_NEED_TOKEN": "你是否需要代碼來恢復你所忘記的密碼?", + "PLACEHOLDER_NEW_PASSWORD": "新密碼 ", + "PLACEHOLDER_RE_TYPE_NEW_PASSWORD": "重新輸入新密碼", + "ACTION_RESET_PASSWORD": "重設密碼 ", + "SUCCESS": "系統已儲存你的新密碼
試試 用它登入 " + }, + "FORGOT_PASSWORD_FORM": { + "TITLE": "你是否忘了密碼嗎", + "SUBTITLE": "輸入你的帳戶名稱或電子郵件以進行註冊", + "PLACEHOLDER_FIELD": "使用者名稱或電子郵件", + "ACTION_RESET_PASSWORD": "重設密碼 ", + "LINK_CANCEL": "不,請帶我回去,我記起來了", + "SUCCESS": "檢查你的收信箱
我們送出了一封信
裏面有設定你新電子郵件的相關指示", + "ERROR": "按我們的記錄,你尚未註冊" + }, + "LOGIN_COMMON": { + "HEADER": "我已登入Taiga", + "PLACEHOLDER_AUTH_NAME": "使用者名稱或電子郵件(注意大小寫)", + "LINK_FORGOT_PASSWORD": "忘記了?", + "TITLE_LINK_FORGOT_PASSWORD": "你忘了密碼嗎", + "ACTION_ENTER": "Enter", + "ACTION_SIGN_IN": "登入", + "PLACEHOLDER_AUTH_PASSWORD": "密碼(大小寫有別)" + }, + "LOGIN_FORM": { + "ERROR_AUTH_INCORRECT": "按我們的箹統記錄,你的帳戶名稱/電子郵件或密碼並不正確 ", + "ERROR_GENERIC": "根據系統,此處有錯誤", + "SUCCESS": "我們系統歡迎你加入Taiga" + }, + "INVITATION_LOGIN_FORM": { + "NOT_FOUND": "Ooops, 有點問題
我們的系統無法找到你的邀請信", + "SUCCESS": "你成功地加入此專案,歡迎來到 {{project_name}}", + "ERROR": "按我們的記錄,你尚未註冊或是未輸入有效的密碼 " + }, + "REGISTER_FORM": { + "PLACEHOLDER_NAME": "選一個用戶帳號(注意大小寫)", + "PLACEHOLDER_FULL_NAME": "選取你的全名", + "PLACEHOLDER_EMAIL": "你的電子郵件", + "PLACEHOLDER_PASSWORD": "設定密碼(注意大小寫不同) ", + "ACTION_SIGN_UP": "註冊", + "TITLE_LINK_LOGIN": "登入", + "LINK_LOGIN": "你是否已註冊? 登入" + }, + "ISSUES": { + "LIST_SECTION_NAME": "問題 ", + "SECTION_NAME": "問題細節", + "ACTION_NEW_ISSUE": "+ 新問題 ", + "ACTION_PROMOTE_TO_US": "提昇到使用者故事", + "PLACEHOLDER_FILTER_NAME": "寫入過濾器名稱後按下enter ", + "PROMOTED": "此問題已提昇成使用者故事 ", + "EXTERNAL_REFERENCE": "此問題的提供者是", + "GO_TO_EXTERNAL_REFERENCE": "回到一開始", + "BLOCKED": "這個議題已被封鎖", + "TITLE_PREVIOUS_ISSUE": "之前的問題 ", + "TITLE_NEXT_ISSUE": "下一個問題 ", + "ACTION_DELETE": "删除議題 ", + "LIGHTBOX_TITLE_BLOKING_ISSUE": "封鎖中的問題", + "CONFIRM_PROMOTE": { + "TITLE": "將此問題提到使用者故事", + "MESSAGE": "你確定此問題要創建一個新的使用者故事?" + }, + "FILTERS": { + "TITLE": "過濾器", + "INPUT_SEARCH_PLACEHOLDER": "主旨或參考", + "TITLE_ACTION_SEARCH": "搜尋", + "ACTION_SAVE_CUSTOM_FILTER": "儲存為客製過濾器 ", + "BREADCRUMB": "過濾器", + "TITLE_BREADCRUMB": "過濾器", + "CATEGORIES": { + "TYPE": "類型", + "STATUS": "狀態", + "SEVERITY": "急迫性", + "PRIORITIES": "優先性", + "TAGS": "標籤", + "ASSIGNED_TO": "指派給 ", + "CREATED_BY": "由創建", + "CUSTOM_FILTERS": "客製過濾器 " + }, + "CONFIRM_DELETE": { + "TITLE": "刪除客製過濾器 ", + "MESSAGE": "預設過濾器 '{{customFilterName}}'" + } + }, + "TABLE": { + "COLUMNS": { + "TYPE": "類型", + "SEVERITY": "急迫性", + "PRIORITY": "優先性", + "SUBJECT": "主旨", + "STATUS": "狀態", + "CREATED": "已創建", + "ASSIGNED_TO": "指派給 " + }, + "TITLE_ACTION_CHANGE_STATUS": "改變狀態", + "TITLE_ACTION_ASSIGNED_TO": "指派給 ", + "EMPTY": { + "TITLE": "沒有問題回報:-)", + "SUBTITLE": "你有發現任何問題嗎", + "ACTION_CREATE_ISSUE": "創建一個新問題" + } + } + }, + "KANBAN": { + "SECTION_NAME": "Kanban(看板)", + "TITLE_ACTION_FOLD": "隱藏欄位", + "TITLE_ACTION_UNFOLD": "未隱藏欄位", + "TITLE_ACTION_FOLD_CARDS": "隱藏卡片", + "TITLE_ACTION_UNFOLD_CARDS": "未隱藏卡片", + "TITLE_ACTION_ADD_US": "新增使用者故事", + "TITLE_ACTION_ADD_BULK": "增加新批次", + "ACTION_SHOW_ARCHIVED": "顯示歸檔資料", + "ACTION_HIDE_ARCHIVED": "隱藏歸檔", + "HIDDEN_USER_STORIES": "此狀態下的使用者故事預設為隱藏", + "ARCHIVED": "你已歸檔", + "UNDO_ARCHIVED": "拖移 & 丟到未做" + }, + "SEARCH": { + "FILTER_USER_STORIES": "使用者故事", + "FILTER_ISSUES": "問題 ", + "FILTER_TASKS": "任務 ", + "FILTER_WIKI": "維基頁", + "PLACEHOLDER_SEARCH": "搜尋", + "TITLE_ACTION_SEARCH": "搜尋", + "EMPTY_TITLE": "依你搜尋標準並未找到任何東西", + "EMPTY_DESCRIPTION": "請試試上方某一個分頁或再搜尋一次" + }, + "TEAM": { + "SECTION_NAME": "團隊", + "APP_TITLE": "團隊- {{projectName}}", + "PLACEHOLDER_INPUT_SEARCH": "以全名搜尋", + "COLUMN_MR_WOLF": "Mr. Wolf", + "EXPLANATION_COLUMN_MR_WOLF": "已關閉議題 ", + "COLUMN_IOCAINE": "使用大頭照", + "EXPLANATION_COLUMN_IOCAINE": "毒物劑量攝取", + "COLUMN_CERVANTES": "Cervantes", + "EXPLANATION_COLUMN_CERVANTES": "已編輯之維基頁", + "COLUMN_BUG_HUNTER": "程式錯誤獵人", + "EXPLANATION_COLUMN_BUG_HUNTER": "問題回報", + "COLUMN_NIGHT_SHIFT": "夜班", + "EXPLANATION_COLUMN_NIGHT_SHIFT": "任務關閉", + "COLUMN_TOTAL_POWER": "所有力量", + "EXPLANATION_COLUMN_TOTAL_POWER": "所有點數", + "SECTION_TITLE_TEAM": "團隊 >", + "SECTION_FILTER_ALL": "所有", + "CONFIRM_LEAVE_PROJECT": "你確定要退出這個專案嗎?", + "ACTION_LEAVE_PROJECT": "退出此專案" + }, + "CHANGE_PASSWORD": { + "SECTION_NAME": "改變密碼 ", + "FIELD_CURRENT_PASSWORD": "現用密碼 ", + "PLACEHOLDER_CURRENT_PASSWORD": "你目前的密碼(如果你未有密碼,此處請空白)", + "FIELD_NEW_PASSWORD": "新密碼 ", + "PLACEHOLDER_NEW_PASSWORD": "輸入新密碼", + "FIELD_RETYPE_PASSWORD": "重新輸入新密碼", + "PLACEHOLDER_RETYPE_PASSWORD": "重新輸入新密碼", + "ERROR_PASSWORD_MATCH": "密碼不符" + }, + "USER_SETTINGS": { + "AVATAR_MAX_SIZE": "[最大. 尺寸: {{maxFileSize}}] ", + "MENU": { + "SECTION_TITLE": "使用者設定", + "USER_PROFILE": "使用者檔案", + "CHANGE_PASSWORD": "更換密碼 ", + "EMAIL_NOTIFICATIONS": "電子郵件通知" + }, + "NOTIFICATIONS": { + "SECTION_NAME": "電子郵件通知", + "COLUMN_PROJECT": "專案", + "COLUMN_RECEIVE_ALL": "接收所有", + "COLUMN_ONLY_INVOLVED": "Only Involved", + "COLUMN_NO_NOTIFICATIONS": "無通知", + "OPTION_ALL": "所有", + "OPTION_INVOLVED": "涉入", + "OPTION_NONE": "無" + }, + "POPOVER": { + "USER_PROFILE": "使用者檔案", + "CHANGE_PASSWORD": "更換密碼 ", + "NOTIFICATIONS": "通知", + "FEEDBACK": "回饋 ", + "TITLE_AVATAR": "使用者偏好" + } + }, + "USER_PROFILE": { + "IMAGE_HELP": "此圖片將被裁成80x80px.
", + "ACTION_CHANGE_IMAGE": "變更", + "ACTION_USE_GRAVATAR": "用戶大頭貼圖片", + "ACTION_DELETE_ACCOUNT": "刪除Taiga帳戶", + "CHANGE_EMAIL_SUCCESS": "檢查你的收信箱
我們送出了一封信
裏面有設定你新電子郵件的相關指示", + "CHANGE_PHOTO": "變更照片", + "FIELD": { + "USERNAME": "使用者名稱", + "EMAIL": "電子郵件", + "FULL_NAME": "全名", + "PLACEHOLDER_FULL_NAME": "你的全名", + "BIO": "簡介", + "PLACEHOLDER_BIO": "請自我介紹", + "LANGUAGE": "語言", + "LANGUAGE_DEFAULT": "-- 使用設預語言 -- " + } + }, + "WIZARD": { + "SECTION_TITLE_CHOOSE_TEMPLATE": "選擇外觀 ", + "CHOOSE_TEMPLATE_TEXT": "哪一個樣版最適合你的專案", + "SECTION_TITLE_CREATE_PROJECT": "創建專案", + "CREATE_PROJECT_TEXT": "新鮮與乾淨,太好了", + "PROGRESS_TEMPLATE_SELECTION": "外觀選擇", + "PROGRESS_NAME_DESCRIPTION": "名稱與描述" + }, + "WIKI": { + "DATETIME": "DD MMM YYYY HH:mm", + "PLACEHOLDER_PAGE": "編寫你的維基頁", + "REMOVE": "移除此維基頁 ", + "DELETE_LIGHTBOX_TITLE": "刪除維基頁", + "NAVIGATION": { + "SECTION_NAME": "連結", + "ACTION_ADD_LINK": "新增連結" + }, + "SUMMARY": { + "TIMES_EDITED": "次數
編輯 ", + "LAST_EDIT": "上次
編輯 ", + "LAST_MODIFICATION": "上回修改" + } + } +} \ No newline at end of file From 53d94f62a705d6cb9f8967631da760c6af5899b8 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 4 May 2015 09:48:54 +0200 Subject: [PATCH 106/194] refresh all sass when a dependencie is changed --- gulpfile.js | 50 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 82f82a83..df51fdda 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -57,6 +57,8 @@ paths.sass = [ "!" + paths.app + "/styles/extras/**/*.scss" ]; +paths.styles_dependencies = paths.app + "/styles/dependencies/**/*.scss"; + paths.css = [ paths.tmp + "styles/**/*.css", paths.tmp + "modules/**/*.css", @@ -219,15 +221,20 @@ gulp.task("scss-lint", [], function() { .pipe(gulpif(fail, scsslint.failReporter())) }); -gulp.task("sass-compile", ["scss-lint"], function() { +gulp.task("clear-sass-cache", function() { + delete cached.caches["sass"]; +}); + +gulp.task("sass-compile", [], function() { return gulp.src(paths.sass) .pipe(plumber()) .pipe(insert.prepend('@import "dependencies";')) - .pipe(cache(sass({ + .pipe(cached("sass")) + .pipe(sass({ includePaths: [ paths.app + "styles/extras/" ] - }))) + })) .pipe(gulp.dest(paths.tmp)); }); @@ -246,7 +253,7 @@ gulp.task("css-lint-app", function() { .pipe(csslint.reporter()); }); -gulp.task("css-join", ["css-lint-app"], function() { +gulp.task("app-css", function() { return gulp.src(paths.css) .pipe(order(paths.css_order, {base: '.'})) .pipe(concat("app.css")) @@ -256,17 +263,13 @@ gulp.task("css-join", ["css-lint-app"], function() { .pipe(gulp.dest(paths.tmp)); }); -gulp.task("css-app", function(cb) { - return runSequence("sass-compile", "css-join", cb); -}); - -gulp.task("css-vendor", function() { +gulp.task("vendor-css", function() { return gulp.src(paths.css_vendor) .pipe(concat("vendor.css")) .pipe(gulp.dest(paths.tmp)); }); -gulp.task("styles", ["css-app", "css-vendor"], function() { +gulp.task("main-css", function() { var _paths = [ paths.tmp + "vendor.css", paths.tmp + "app.css" @@ -278,6 +281,24 @@ gulp.task("styles", ["css-app", "css-vendor"], function() { .pipe(gulp.dest(paths.dist + "styles/")) }); +gulp.task("styles", function(cb) { + return runSequence("scss-lint", + "sass-compile", + "css-lint-app", + ["app-css", "vendor-css"], + "main-css", + cb); + +}); + +gulp.task("styles-dependencies", function(cb) { + return runSequence("clear-sass-cache", + "sass-compile", + ["app-css", "vendor-css"], + "main-css", + cb); +}); + /* ############################################################################## # JS Related tasks @@ -321,7 +342,7 @@ gulp.task("coffee-lint", function () { .pipe(coffeelint.reporter()); }); -gulp.task("coffee", ["coffee-lint"], function() { +gulp.task("coffee", function() { return gulp.src(paths.coffee) .pipe(order(paths.coffee_order, {base: '.'})) .pipe(sourcemaps.init()) @@ -352,7 +373,7 @@ gulp.task("jslibs-deploy", function() { .pipe(gulp.dest(paths.dist + "js/")); }); -gulp.task("app-watch", ["coffee", "conf", "locales", "app-loader"]); +gulp.task("app-watch", ["coffee-lint", "coffee", "conf", "locales", "app-loader"]); gulp.task("app-deploy", ["coffee", "conf", "locales", "app-loader"], function() { return gulp.src(paths.dist) @@ -370,8 +391,6 @@ gulp.task("app-deploy", ["coffee", "conf", "locales", "app-loader"], function() ############################################################################## */ gulp.task("clear", function(done) { - del.sync(paths.tmp); - return cache.clearAll(done); }); @@ -436,6 +455,7 @@ gulp.task("express", function() { gulp.task("watch", function() { gulp.watch(paths.jade, ["jade-watch"]); gulp.watch(paths.sass, ["styles"]); + gulp.watch(paths.styles_dependencies, ["styles-dependencies"]); gulp.watch(paths.svg, ["copy-svg"]); gulp.watch(paths.coffee, ["app-watch"]); gulp.watch(paths.libs, ["jslibs-watch"]); @@ -444,6 +464,8 @@ gulp.task("watch", function() { gulp.watch(paths.fonts, ["copy-fonts"]); }); +del.sync(paths.tmp); + gulp.task("deploy", function(cb) { runSequence("clear", [ "copy", From a3f453b897ce132340eb533e3372732ccc119935 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 4 May 2015 09:59:40 +0200 Subject: [PATCH 107/194] only imagemin on deploy --- gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index df51fdda..1c51e99d 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -407,7 +407,7 @@ gulp.task("copy-fonts", function() { gulp.task("copy-images", function() { return gulp.src(paths.app + "/images/**/*") - .pipe(imagemin({progressive: true})) + .pipe(gulpif(isDeploy, imagemin({progressive: true}))) .pipe(gulp.dest(paths.dist + "/images/")); }); From c7b2b423ce5dfd9516f182bbbff39037f5a41b5e Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 4 May 2015 10:25:27 +0200 Subject: [PATCH 108/194] Adding jitsi to meetup choices --- app/coffee/modules/nav.coffee | 6 +++++- app/partials/admin/admin-project-modules.jade | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/coffee/modules/nav.coffee b/app/coffee/modules/nav.coffee index 578890e0..ec95aa6c 100644 --- a/app/coffee/modules/nav.coffee +++ b/app/coffee/modules/nav.coffee @@ -249,15 +249,19 @@ ProjectMenuDirective = ($log, $compile, $auth, $rootscope, $tgAuth, $location, $ container.replaceWith(dom) videoConferenceUrl = (project) -> + urlSeparator = "-" if project.videoconferences == "appear-in" baseUrl = "https://appear.in/" else if project.videoconferences == "talky" baseUrl = "https://talky.io/" + else if project.videoconferences == "jitsi" + urlSeparator = "" + baseUrl = "https://meet.jit.si/" else return "" if project.videoconferences_salt - url = "#{project.slug}-#{project.videoconferences_salt}" + url = "#{project.slug}#{urlSeparator}#{project.videoconferences_salt}" else url = "#{project.slug}" diff --git a/app/partials/admin/admin-project-modules.jade b/app/partials/admin/admin-project-modules.jade index 7019a879..11e440b7 100644 --- a/app/partials/admin/admin-project-modules.jade +++ b/app/partials/admin/admin-project-modules.jade @@ -85,7 +85,7 @@ div.wrapper(tg-project-modules, ng-controller="ProjectProfileController as ctrl" div.videoconference-attributes.hidden select(ng-model="project.videoconferences", - ng-options="e.id as e.name for e in [{'id':'appear-in', 'name':'AppearIn'},{'id':'talky', 'name': 'Talky'}]") + ng-options="e.id as e.name for e in [{'id':'appear-in', 'name':'AppearIn'},{'id':'jitsi', 'name': 'Jitsi'},{'id':'talky', 'name': 'Talky'}]") option(value="", translate="ADMIN.MODULES.SELECT_VIDEOCONFERENCE") input(type="text", ng-model="project.videoconferences_salt", placeholder="{{'ADMIN.MODULES.SALT_CHAT_ROOM' | translate}}") From 4f0483c4245a4c05fa18b8d83c9414730d776cfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Mon, 4 May 2015 10:31:45 +0200 Subject: [PATCH 109/194] Refactor check class --- app/styles/components/check.scss | 61 +++++++++++++++++++ .../modules/admin/admin-membership-table.scss | 55 ----------------- app/styles/modules/admin/admin-roles.scss | 61 ------------------- app/styles/modules/admin/contrib.scss | 61 ------------------- 4 files changed, 61 insertions(+), 177 deletions(-) create mode 100644 app/styles/components/check.scss diff --git a/app/styles/components/check.scss b/app/styles/components/check.scss new file mode 100644 index 00000000..9c15e077 --- /dev/null +++ b/app/styles/components/check.scss @@ -0,0 +1,61 @@ +.check { + background-color: darken($whitish, 10%); + border-radius: 2px; + cursor: pointer; + height: 1.5rem; + overflow: hidden; + position: relative; + width: 65px; + input { + cursor: pointer; + height: 500px; + left: -10px; + opacity: 0; + position: absolute; + top: -10px; + width: 500px; + z-index: 999; + + div { + background-color: $gray; + height: 25px; + transition: all .2s linear; + width: 50%; + } + ~ .check-text { + //@include transition(opacity .3s linear); + @extend %small; + color: $white; + position: absolute; + top: .1rem; + } + ~ .check-yes { + opacity: 0; + right: .5rem; + } + ~ .check-no { + left: .5rem; + opacity: .6; + } + } + input:checked { + + div { + background-color: $fresh-taiga; + margin-left: 50%; + transition: all .2s linear; + } + ~ .check-yes { + opacity: .6; + right: .4rem; + } + ~ .check-no { + left: .4rem; + opacity: 0; + } + } + input:disabled { + cursor: auto; + + div { + background-color: $gray-light; + } + } +} diff --git a/app/styles/modules/admin/admin-membership-table.scss b/app/styles/modules/admin/admin-membership-table.scss index 1e93696d..544dc21f 100644 --- a/app/styles/modules/admin/admin-membership-table.scss +++ b/app/styles/modules/admin/admin-membership-table.scss @@ -98,59 +98,4 @@ flex-basis: 50px; flex-grow: 1; } - .check { - background-color: darken($whitish, 10%); - border-radius: 2px; - cursor: pointer; - height: 1.5rem; - overflow: hidden; - position: relative; - width: 65px; - input { - cursor: pointer; - height: 500px; - left: -10px; - opacity: 0; - position: absolute; - top: -10px; - width: 500px; - z-index: 999; - + div { - background-color: $gray; - height: 25px; - transition: all .2s linear; - width: 50%; - } - ~ .check-text { - //@include transition(opacity .3s linear); - @extend %small; - color: $white; - position: absolute; - top: .1rem; - } - ~ .check-yes { - opacity: 0; - right: .5rem; - } - ~ .check-no { - left: .5rem; - opacity: .6; - } - } - input:checked { - + div { - background-color: $fresh-taiga; - margin-left: 50%; - transition: all .2s linear; - } - ~ .check-yes { - opacity: .6; - right: .4rem; - } - ~ .check-no { - left: .4rem; - opacity: 0; - } - } - } } diff --git a/app/styles/modules/admin/admin-roles.scss b/app/styles/modules/admin/admin-roles.scss index 40253ca5..83e0511c 100644 --- a/app/styles/modules/admin/admin-roles.scss +++ b/app/styles/modules/admin/admin-roles.scss @@ -47,65 +47,4 @@ margin-left: .5rem; } } - .check { - background-color: darken($whitish, 10%); - border-radius: 2px; - cursor: pointer; - height: 1.5rem; - overflow: hidden; - position: relative; - width: 65px; - input { - cursor: pointer; - height: 500px; - left: -10px; - opacity: 0; - position: absolute; - top: -10px; - width: 500px; - z-index: 999; - + div { - background-color: $gray; - height: 25px; - transition: all .2s linear; - width: 50%; - } - ~ .check-text { - //@include transition(opacity .3s linear); - @extend %small; - color: $white; - position: absolute; - top: .1rem; - } - ~ .check-yes { - opacity: 0; - right: .5rem; - } - ~ .check-no { - left: .5rem; - opacity: .6; - } - } - input:checked { - + div { - background-color: $fresh-taiga; - margin-left: 50%; - transition: all .2s linear; - } - ~ .check-yes { - opacity: .6; - right: .4rem; - } - ~ .check-no { - left: .4rem; - opacity: 0; - } - } - input:disabled { - cursor: auto; - + div { - background-color: $gray-light; - } - } - } } diff --git a/app/styles/modules/admin/contrib.scss b/app/styles/modules/admin/contrib.scss index 95fec6a5..e8745d6b 100644 --- a/app/styles/modules/admin/contrib.scss +++ b/app/styles/modules/admin/contrib.scss @@ -54,67 +54,6 @@ } } } - .check { - background-color: darken($whitish, 10%); - border-radius: 2px; - cursor: pointer; - height: 1.5rem; - overflow: hidden; - position: relative; - width: 65px; - input { - cursor: pointer; - height: 500px; - left: -10px; - opacity: 0; - position: absolute; - top: -10px; - width: 500px; - z-index: 999; - + div { - background-color: $gray; - height: 25px; - transition: all .2s linear; - width: 50%; - } - ~ .check-text { - //@include transition(opacity .3s linear); - @extend %small; - color: $white; - position: absolute; - top: .1rem; - } - ~ .check-yes { - opacity: 0; - right: .5rem; - } - ~ .check-no { - left: .5rem; - opacity: .6; - } - } - input:checked { - + div { - background-color: $fresh-taiga; - margin-left: 50%; - transition: all .2s linear; - } - ~ .check-yes { - opacity: .6; - right: .4rem; - } - ~ .check-no { - left: .4rem; - opacity: 0; - } - } - input:disabled { - cursor: auto; - + div { - background-color: $gray-light; - } - } - } .check-item { align-items: center; border-bottom: 1px solid $whitish; From d8c000b672be415dd9801efebd6482a4fe328c41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 4 May 2015 13:21:19 +0200 Subject: [PATCH 110/194] Update changelog --- CHANGELOG.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 26985d0a..f6820c68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,12 @@ ### Features - Make Taiga translatable (i18n support). - i18n. - - Add spanish translation. - - Add french translation. - - Add finish translation. + - Add spanish (es) translation. + - Add french (fr) translation. + - Add finish (fi) translation. + - Add catalan (ca) translation. + - Add traditional chinese (zh-Hant) translation. +- Add Jitsi to our supported videoconference apps list ### Misc - New contrib plugin for letschat (by Δndrea Stagi) From 0047dd07c5d0ed022a426eae9bcb9943fe612149 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 4 May 2015 12:45:01 +0200 Subject: [PATCH 111/194] use user storage info to select the default lang --- app/coffee/app.coffee | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index a38b3625..91ef588a 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -232,7 +232,11 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven $compileProvider.debugInfoEnabled(window.taigaConfig.debugInfo || false) - preferedLangCode = window.taigaConfig.defaultLanguage || "en" + if localStorage.userInfo + userInfo = JSON.parse(localStorage.userInfo) + + preferedLangCode = userInfo?.lang || window.taigaConfig.defaultLanguage || "en" + $translateProvider .useStaticFilesLoader({ prefix: "/locales/locale-", From cf0a341058ad3354ab3ac714d7419a9533122377 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 4 May 2015 13:38:42 +0200 Subject: [PATCH 112/194] fix wysiwyg translation --- app/coffee/modules/common/wisiwyg.coffee | 336 ++++++++++++----------- 1 file changed, 172 insertions(+), 164 deletions(-) diff --git a/app/coffee/modules/common/wisiwyg.coffee b/app/coffee/modules/common/wisiwyg.coffee index b7fa07d4..eba15b84 100644 --- a/app/coffee/modules/common/wisiwyg.coffee +++ b/app/coffee/modules/common/wisiwyg.coffee @@ -130,169 +130,6 @@ MarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $trans else return cursorPosition - markdownSettings = - nameSpace: "markdown" - onShiftEnter: {keepDefault:false, openWith:"\n\n"} - onEnter: - keepDefault: false, - replaceWith: () -> "\n" - afterInsert: (data) -> - lines = data.textarea.value.split("\n") - cursorLine = data.textarea.value[0..(data.caretPosition - 1)].split("\n").length - newLineContent = data.textarea.value[data.caretPosition..].split("\n")[0] - lastLine = lines[cursorLine - 1] - - # unordered list - - match = lastLine.match /^(\s*- ).*/ - - if match - emptyListItem = lastLine.match /^(\s*)\-\s$/ - - if emptyListItem - nline = cursorLine - 1 - replace = null - else - nline = cursorLine - replace = "#{match[1]}" - - markdownCaretPositon = addLine(data.textarea, nline, replace) - - # unordered list * - match = lastLine.match /^(\s*\* ).*/ - - if match - emptyListItem = lastLine.match /^(\s*\* )$/ - - if emptyListItem - nline = cursorLine - 1 - replace = null - else - nline = cursorLine - replace = "#{match[1]}" - - markdownCaretPositon = addLine(data.textarea, nline, replace) - - # ordered list - match = lastLine.match /^(\s*)(\d+)\.\s/ - - if match - emptyListItem = lastLine.match /^(\s*)(\d+)\.\s$/ - - if emptyListItem - nline = cursorLine - 1 - replace = null - else - nline = cursorLine - replace = "#{match[1] + (parseInt(match[2], 10) + 1)}. " - - markdownCaretPositon = addLine(data.textarea, nline, replace) - - setCaretPosition(data.textarea, markdownCaretPositon) if markdownCaretPositon - - markupSet: [ - { - name: $translate.instant("COMMON.WYSIWYG.H1_BUTTON") - key: "1" - placeHolder: $translate.instant("COMMON.WYSIWYG.H1_SAMPLE_TEXT") - closeWith: (markItUp) -> markdownTitle(markItUp, "=") - }, - { - name: $translate.instant("COMMON.WYSIWYG.H2_BUTTON") - key: "2" - placeHolder: $translate.instant("COMMON.WYSIWYG.H2_SAMPLE_TEXT") - closeWith: (markItUp) -> markdownTitle(markItUp, "-") - }, - { - name: $translate.instant("COMMON.WYSIWYG.H3_BUTTON") - key: "3" - openWith: "### " - placeHolder: $translate.instant("COMMON.WYSIWYG.H3_SAMPLE_TEXT") - }, - { - separator: "---------------" - }, - { - name: $translate.instant("COMMON.WYSIWYG.BOLD_BUTTON") - key: "B" - openWith: "**" - closeWith: "**" - placeHolder: $translate.instant("COMMON.WYSIWYG.BOLD_BUTTON_SAMPLE_TEXT") - }, - { - name: $translate.instant("COMMON.WYSIWYG.ITALIC_SAMPLE_TEXT") - key: "I" - openWith: "_" - closeWith: "_" - placeHolder: $translate.instant("COMMON.WYSIWYG.ITALIC_SAMPLE_TEXT") - }, - { - name: $translate.instant("COMMON.WYSIWYG.STRIKE_BUTTON") - key: "S" - openWith: "~~" - closeWith: "~~" - placeHolder: $translate.instant("COMMON.WYSIWYG.STRIKE_SAMPLE_TEXT") - }, - { - separator: "---------------" - }, - { - name: $translate.instant("COMMON.WYSIWYG.BULLETED_LIST_BUTTON") - openWith: "- " - placeHolder: $translate.instant("COMMON.WYSIWYG.BULLETED_LIST_SAMPLE_TEXT") - }, - { - name: $translate.instant("COMMON.WYSIWYG.NUMERIC_LIST_BUTTON") - openWith: (markItUp) -> markItUp.line+". " - placeHolder: $translate.instant("COMMON.WYSIWYG.NUMERIC_LIST_SAMPLE_TEXT") - }, - { - separator: "---------------" - }, - { - name: $translate.instant("COMMON.WYSIWYG.PICTURE_BUTTON") - key: "P" - openWith: "![" - closeWith: '](<<<[![Url:!:http://]!]>>> "[![Title]!]")' - placeHolder: $translate.instant("COMMON.WYSIWYG.PICTURE_SAMPLE_TEXT") - beforeInsert:(markItUp) -> prepareUrlFormatting(markItUp) - afterInsert:(markItUp) -> urlFormatting(markItUp) - }, - { - name: $translate.instant("COMMON.WYSIWYG.LINK_BUTTON") - key: "L" - openWith: "[" - closeWith: '](<<<[![Url:!:http://]!]>>> "[![Title]!]")' - placeHolder: $translate.instant("COMMON.WYSIWYG.LINK_SAMPLE_TEXT") - beforeInsert:(markItUp) -> prepareUrlFormatting(markItUp) - afterInsert:(markItUp) -> urlFormatting(markItUp) - }, - { - separator: "---------------" - }, - { - name: $translate.instant("COMMON.WYSIWYG.QUOTE_BLOCK_BUTTON") - openWith: "> " - placeHolder: $translate.instant("COMMON.WYSIWYG.QUOTE_BLOCK_SAMPLE_TEXT") - }, - { - name: $translate.instant("COMMON.WYSIWYG.CODE_BLOCK_BUTTON") - openWith: "```\n" - placeHolder: $translate.instant("COMMON.WYSIWYG.CODE_BLOCK_SAMPLE_TEXT") - closeWith: "\n```" - }, - { - separator: "---------------" - }, - { - name: $translate.instant("COMMON.WYSIWYG.PREVIEW_BUTTON") - call: preview - className: "preview-icon" - }, - ] - afterInsert: (event) -> - target = angular.element(event.textarea) - $model.$setViewValue(target.val()) - prepareUrlFormatting = (markItUp) -> regex = /(<<<|>>>)/gi result = 0 @@ -339,13 +176,184 @@ MarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $trans return "\n"+heading+"\n" - element.markItUp(markdownSettings) + renderMarkItUp = () -> + markdownSettings = + nameSpace: "markdown" + onShiftEnter: {keepDefault:false, openWith:"\n\n"} + onEnter: + keepDefault: false, + replaceWith: () -> "\n" + afterInsert: (data) -> + lines = data.textarea.value.split("\n") + cursorLine = data.textarea.value[0..(data.caretPosition - 1)].split("\n").length + newLineContent = data.textarea.value[data.caretPosition..].split("\n")[0] + lastLine = lines[cursorLine - 1] + + # unordered list - + match = lastLine.match /^(\s*- ).*/ + + if match + emptyListItem = lastLine.match /^(\s*)\-\s$/ + + if emptyListItem + nline = cursorLine - 1 + replace = null + else + nline = cursorLine + replace = "#{match[1]}" + + markdownCaretPositon = addLine(data.textarea, nline, replace) + + # unordered list * + match = lastLine.match /^(\s*\* ).*/ + + if match + emptyListItem = lastLine.match /^(\s*\* )$/ + + if emptyListItem + nline = cursorLine - 1 + replace = null + else + nline = cursorLine + replace = "#{match[1]}" + + markdownCaretPositon = addLine(data.textarea, nline, replace) + + # ordered list + match = lastLine.match /^(\s*)(\d+)\.\s/ + + if match + emptyListItem = lastLine.match /^(\s*)(\d+)\.\s$/ + + if emptyListItem + nline = cursorLine - 1 + replace = null + else + nline = cursorLine + replace = "#{match[1] + (parseInt(match[2], 10) + 1)}. " + + markdownCaretPositon = addLine(data.textarea, nline, replace) + + setCaretPosition(data.textarea, markdownCaretPositon) if markdownCaretPositon + + markupSet: [ + { + name: $translate.instant("COMMON.WYSIWYG.H1_BUTTON") + key: "1" + placeHolder: $translate.instant("COMMON.WYSIWYG.H1_SAMPLE_TEXT") + closeWith: (markItUp) -> markdownTitle(markItUp, "=") + }, + { + name: $translate.instant("COMMON.WYSIWYG.H2_BUTTON") + key: "2" + placeHolder: $translate.instant("COMMON.WYSIWYG.H2_SAMPLE_TEXT") + closeWith: (markItUp) -> markdownTitle(markItUp, "-") + }, + { + name: $translate.instant("COMMON.WYSIWYG.H3_BUTTON") + key: "3" + openWith: "### " + placeHolder: $translate.instant("COMMON.WYSIWYG.H3_SAMPLE_TEXT") + }, + { + separator: "---------------" + }, + { + name: $translate.instant("COMMON.WYSIWYG.BOLD_BUTTON") + key: "B" + openWith: "**" + closeWith: "**" + placeHolder: $translate.instant("COMMON.WYSIWYG.BOLD_BUTTON_SAMPLE_TEXT") + }, + { + name: $translate.instant("COMMON.WYSIWYG.ITALIC_SAMPLE_TEXT") + key: "I" + openWith: "_" + closeWith: "_" + placeHolder: $translate.instant("COMMON.WYSIWYG.ITALIC_SAMPLE_TEXT") + }, + { + name: $translate.instant("COMMON.WYSIWYG.STRIKE_BUTTON") + key: "S" + openWith: "~~" + closeWith: "~~" + placeHolder: $translate.instant("COMMON.WYSIWYG.STRIKE_SAMPLE_TEXT") + }, + { + separator: "---------------" + }, + { + name: $translate.instant("COMMON.WYSIWYG.BULLETED_LIST_BUTTON") + openWith: "- " + placeHolder: $translate.instant("COMMON.WYSIWYG.BULLETED_LIST_SAMPLE_TEXT") + }, + { + name: $translate.instant("COMMON.WYSIWYG.NUMERIC_LIST_BUTTON") + openWith: (markItUp) -> markItUp.line+". " + placeHolder: $translate.instant("COMMON.WYSIWYG.NUMERIC_LIST_SAMPLE_TEXT") + }, + { + separator: "---------------" + }, + { + name: $translate.instant("COMMON.WYSIWYG.PICTURE_BUTTON") + key: "P" + openWith: "![" + closeWith: '](<<<[![Url:!:http://]!]>>> "[![Title]!]")' + placeHolder: $translate.instant("COMMON.WYSIWYG.PICTURE_SAMPLE_TEXT") + beforeInsert:(markItUp) -> prepareUrlFormatting(markItUp) + afterInsert:(markItUp) -> urlFormatting(markItUp) + }, + { + name: $translate.instant("COMMON.WYSIWYG.LINK_BUTTON") + key: "L" + openWith: "[" + closeWith: '](<<<[![Url:!:http://]!]>>> "[![Title]!]")' + placeHolder: $translate.instant("COMMON.WYSIWYG.LINK_SAMPLE_TEXT") + beforeInsert:(markItUp) -> prepareUrlFormatting(markItUp) + afterInsert:(markItUp) -> urlFormatting(markItUp) + }, + { + separator: "---------------" + }, + { + name: $translate.instant("COMMON.WYSIWYG.QUOTE_BLOCK_BUTTON") + openWith: "> " + placeHolder: $translate.instant("COMMON.WYSIWYG.QUOTE_BLOCK_SAMPLE_TEXT") + }, + { + name: $translate.instant("COMMON.WYSIWYG.CODE_BLOCK_BUTTON") + openWith: "```\n" + placeHolder: $translate.instant("COMMON.WYSIWYG.CODE_BLOCK_SAMPLE_TEXT") + closeWith: "\n```" + }, + { + separator: "---------------" + }, + { + name: $translate.instant("COMMON.WYSIWYG.PREVIEW_BUTTON") + call: preview + className: "preview-icon" + }, + ] + afterInsert: (event) -> + target = angular.element(event.textarea) + $model.$setViewValue(target.val()) + + element + .markItUpRemove() + .markItUp(markdownSettings) + + renderMarkItUp() + + unbind = $rootscope.$on "$translateChangeEnd", renderMarkItUp element.on "keypress", (event) -> $scope.$apply() $scope.$on "$destroy", -> $el.off() + unbind() return {link:link, require:"ngModel"} From 16c33331540dfac6984afa691a897f6dba45b66d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 4 May 2015 16:25:17 +0200 Subject: [PATCH 113/194] [i18n] Minor fixes --- app/locales/locale-ca.json | 162 ++++++++++++++++---------------- app/locales/locale-en.json | 2 +- app/locales/locale-es.json | 4 +- app/locales/locale-fr.json | 2 +- app/locales/locale-zh-hant.json | 140 +++++++++++++-------------- scripts/manage_translations.py | 2 +- 6 files changed, 156 insertions(+), 156 deletions(-) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 013af6ec..19cf6a67 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -37,16 +37,16 @@ "IOCAINE_TEXT": "Un poc saturat per una tasca? Fes-ho saber als teus companys clicant a Iocaina quan edites la tasca. Es possible ser inmune a aquesta (fictícia) poció mortal consumint xicotetes dòsis poc a poc, així com es possible millorar amb xicotets nous desafiaments!", "TAGS": { "PLACEHOLDER": "Afegir tag", - "DELETE": "Delete tag", - "ADD": "Add tag" + "DELETE": "Esborrar tag", + "ADD": "Afegit tag" }, "DESCRIPTION": { - "EMPTY": "Empty space is so boring... go on be descriptive... A rose by any other name would smell as sweet...", - "NO_DESCRIPTION": "No description yet" + "EMPTY": "Empty space is so boring... go on be descriptive...", + "NO_DESCRIPTION": "Sense descripció" }, "FIELDS": { - "SUBJECT": "Subject", - "NAME": "Name", + "SUBJECT": "Descripció", + "NAME": "Nom", "URL": "URL", "DESCRIPTION": "Description", "VALUE": "Value", @@ -60,10 +60,10 @@ "IS_BLOCKED": "is blocked" }, "ROLES": { - "ALL": "All" + "ALL": "Tot" }, "ASSIGNED_TO": { - "NOT_ASSIGNED": "Not assigned", + "NOT_ASSIGNED": "Sense assignar", "DELETE_ASSIGNMENT": "Delete assignment", "REMOVE_ASSIGNED": "Remove assigned", "TOO_MANY": "...too many users, keep filtering", @@ -346,11 +346,11 @@ "SAVE": "Salvar Webhook", "CANCEL": "Cancel·la Webhook", "SHOW_HISTORY": "(Mostra històric)", - "TEST": "Test Webhook", - "EDIT": "Edit Webhook", - "DELETE": "Delete Webhook", - "REQUEST": "Request", - "RESEND_REQUEST": "Resend request", + "TEST": "Testar Webhook", + "EDIT": "Editar Webhooks", + "DELETE": "Esborrar Webhooks", + "REQUEST": "Petició", + "RESEND_REQUEST": "Reenviar petició", "HEADERS": "Headers", "PAYLOAD": "Payload", "RESPONSE": "Response", @@ -381,10 +381,10 @@ "STATUS_PENDING": "Pendent", "DELETE_MEMBER": "Esborrar membre", "SUCCESS_SEND_INVITATION": "Hem tornat a enviar la invitació a '{{email}}'.", - "ERROR_SEND_INVITATION": "We haven't sent the invitation.", - "SUCCESS_DELETE": "We've deleted {{message}}.", - "ERROR_DELETE": "We have not been able to delete {{message}}.", - "DEFAULT_DELETE_MESSAGE": "the invitation to {{email}}" + "ERROR_SEND_INVITATION": "No s'ha enviat la invitació", + "SUCCESS_DELETE": "Hem esborrat {{message}}.", + "ERROR_DELETE": "No hem pogut esborrar ", + "DEFAULT_DELETE_MESSAGE": "la invitació a '{{email}}'." }, "DEFAULT_VALUES": { "LABEL_POINTS": "Valor per defecte per a selector de punts", @@ -413,35 +413,35 @@ "ACTION_ADD_STATUS": "Afegir estatus nou", "IS_ARCHIVED_COLUMN": "Es arxivat?", "WIP_LIMIT_COLUMN": "Limit WIP", - "PLACEHOLDER_WRITE_NAME": "Write a name for the new status" + "PLACEHOLDER_WRITE_NAME": "Escriu un nom per a nou estatus" }, "MENU": { "TITLE": "Admin", "PROJECT": "Projecte", - "ATTRIBUTES": "Attributes", - "MEMBERS": "Members", - "PERMISSIONS": "Permissions", - "INTEGRATIONS": "Integrations", + "ATTRIBUTES": "Atributs", + "MEMBERS": "Membres", + "PERMISSIONS": "Permisos", + "INTEGRATIONS": "Integracions", "PLUGINS": "Plugins" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Estatus", - "POINTS": "Points", - "PRIORITIES": "Priorities", - "SEVERITIES": "Severities", - "TYPES": "Types", - "CUSTOM_FIELDS": "Custom fields" + "POINTS": "Punts", + "PRIORITIES": "Prioritats", + "SEVERITIES": "severitats", + "TYPES": "Tipus", + "CUSTOM_FIELDS": "Camps personalitzats" }, "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Project Profile" + "TITLE": "Perfil de projecte" }, "SUBMENU_ROLES": { - "TITLE": "Roles", - "ACTION_NEW_ROLE": "+ New role", - "TITLE_ACTION_NEW_ROLE": "Add new role" + "TITLE": "Rols", + "ACTION_NEW_ROLE": "+ Nou rol", + "TITLE_ACTION_NEW_ROLE": "Afegir nou rol" }, "SUBMENU_THIDPARTIES": { - "TITLE": "Services" + "TITLE": "Serveis" } }, "PROJECT": { @@ -547,7 +547,7 @@ }, "US": { "LINK_TASKBOARD": "Taskboard", - "TITLE_LINK_TASKBOARD": "Go to the taskboard", + "TITLE_LINK_TASKBOARD": "Anar a panell de tasques", "TOTAL_POINTS": "total", "ADD": "+ Afegir nova història d'usuari", "ADD_BULK": "Afegeix noves històries d'usuari en grup", @@ -601,7 +601,7 @@ "FIELDS": { "SUBJECT": "descripció", "NAME": "nom", - "DESCRIPTION": "sescripció", + "DESCRIPTION": "descripció", "CONTENT": "Contingut", "STATUS": "Estatus", "IS_CLOSED": "tancat", @@ -612,10 +612,10 @@ "ASSIGNED_TO": "Assignat a", "WATCHERS": "Seguidors", "MILESTONE": "sprint", - "USER_STORY": "user story", - "PROJECT": "project", - "IS_BLOCKED": "is blocked", - "BLOCKED_NOTE": "blocked note", + "USER_STORY": "història d'usuari", + "PROJECT": "projecte", + "IS_BLOCKED": "Està bloquejat", + "BLOCKED_NOTE": "Nota de bloqueig", "POINTS": "points", "CLIENT_REQUIREMENT": "client requirement", "TEAM_REQUIREMENT": "team requirement", @@ -643,7 +643,7 @@ "PENDING_POINTS": "Punts pendents", "CLOSED_POINTS": "tancat", "COMPACT_SPRINT": "Compacta Sprint", - "GO_TO_TASKBOARD": "Anar al taskboard {{::name}}", + "GO_TO_TASKBOARD": "Anar al panell de {{::name}}", "EDIT_SPRINT": "Editar sprint", "TOTAL_POINTS": "total", "STATUS_NAME": "Nom d'estatus", @@ -670,29 +670,29 @@ "COMPLETED_POINTS": "punts
completats", "OPEN_TASKS": "tasques
obertes", "CLOSED_TASKS": "tasques
tancades", - "IOCAINE_DOSES": "iocaine
doses", - "SHOW_STATISTICS_TITLE": "Show statistics" + "IOCAINE_DOSES": "dosis
iocaína", + "SHOW_STATISTICS_TITLE": "Mostrar estadístiques" }, "SUMMARY": { "PROJECT_POINTS": "punts
projecte", "DEFINED_POINTS": "punts
definits", "CLOSED_POINTS": "punts
tancats", - "POINTS_PER_SPRINT": "points /
sprint" + "POINTS_PER_SPRINT": "punts
sprint" }, "FILTERS": { "TITLE": "Filtres", "REMOVE": "Esborra filtres", - "SHOW": "Show Filters", - "FILTER_CATEGORY_STATUS": "Status", + "SHOW": "Mostra filtres", + "FILTER_CATEGORY_STATUS": "Estatus", "FILTER_CATEGORY_TAGS": "Tags" }, "SPRINTS": { "TITLE": "SPRINTS", "DATE": "DD MMM YYYY", - "LINK_TASKBOARD": "Sprint Taskboard", - "TITLE_LINK_TASKBOARD": "Go to Taskboard of \"{{name}}\"", - "NUMBER_SPRINTS": "
sprints", - "TITLE_ACTION_NEW_SPRINT": "+ New sprint", + "LINK_TASKBOARD": "Anar al panell de sprint", + "TITLE_LINK_TASKBOARD": "Anar al panell de {{::name}}", + "NUMBER_SPRINTS": "
sprints", + "TITLE_ACTION_NEW_SPRINT": "+ Nou sprint", "ACTION_NEW_SPRINT": "+ New sprint", "ACTION_SHOW_CLOSED_SPRINTS": "Show closed sprints", "ACTION_HIDE_CLOSED_SPRINTS": "Hide closed sprints" @@ -732,7 +732,7 @@ }, "TASK": { "LINK_TASKBOARD": "Taskboard", - "TITLE_LINK_TASKBOARD": "Go to the taskboard", + "TITLE_LINK_TASKBOARD": "Anar a panell de tasques", "PLACEHOLDER_SUBJECT": "Afegix la descripció de la tasca", "TITLE_SELECT_STATUS": "Nom d'estatus", "OWNER_US": "Aquesta tasca pertany a", @@ -835,15 +835,15 @@ "BLOCKED": "Aquesta incidència està bloquejada", "TITLE_PREVIOUS_ISSUE": "incidència prèvia", "TITLE_NEXT_ISSUE": "pròxima incidència", - "ACTION_DELETE": "Delete issue", - "LIGHTBOX_TITLE_BLOKING_ISSUE": "Blocking issue", + "ACTION_DELETE": "Esborrar incidència", + "LIGHTBOX_TITLE_BLOKING_ISSUE": "Bloquejant incidència", "CONFIRM_PROMOTE": { - "TITLE": "Promote this issue to a new user story", - "MESSAGE": "Are you sure you want to create a new US from this Issue?" + "TITLE": "Promociona aquesta incidència a història d'usuari", + "MESSAGE": "Segur que vols crear una nova US desde aquesta incidència" }, "FILTERS": { - "TITLE": "Filters", - "INPUT_SEARCH_PLACEHOLDER": "Subject or ref", + "TITLE": "Filtres", + "INPUT_SEARCH_PLACEHOLDER": "Descripció o ref", "TITLE_ACTION_SEARCH": "Search", "ACTION_SAVE_CUSTOM_FILTER": "save as custom filter", "BREADCRUMB": "Filters", @@ -865,7 +865,7 @@ }, "TABLE": { "COLUMNS": { - "TYPE": "Type", + "TYPE": "Tipus", "SEVERITY": "Severity", "PRIORITY": "Priority", "SUBJECT": "Subject", @@ -893,8 +893,8 @@ "ACTION_SHOW_ARCHIVED": "Mostrar arxivats", "ACTION_HIDE_ARCHIVED": "Amagar arxivats", "HIDDEN_USER_STORIES": "Les històries d'usuar en aques estatus estàn amagades", - "ARCHIVED": "You have archived", - "UNDO_ARCHIVED": "Drag & drop again to undo" + "ARCHIVED": "Has arxivat", + "UNDO_ARCHIVED": "Arrastra de nou per desfer" }, "SEARCH": { "FILTER_USER_STORIES": "Històries d'usuari", @@ -915,11 +915,11 @@ "COLUMN_IOCAINE": "Beguedor de iocaína", "EXPLANATION_COLUMN_IOCAINE": "Dosis de iocaina ingerides", "COLUMN_CERVANTES": "Cervantes", - "EXPLANATION_COLUMN_CERVANTES": "Wiki pages edited", - "COLUMN_BUG_HUNTER": "Bug Hunter", - "EXPLANATION_COLUMN_BUG_HUNTER": "Issues reported", - "COLUMN_NIGHT_SHIFT": "Night Shift", - "EXPLANATION_COLUMN_NIGHT_SHIFT": "Tasks closed", + "EXPLANATION_COLUMN_CERVANTES": "Pàgines de Wiki editades", + "COLUMN_BUG_HUNTER": "Caçador de bug", + "EXPLANATION_COLUMN_BUG_HUNTER": "Incidència reportada", + "COLUMN_NIGHT_SHIFT": "Torn de nit", + "EXPLANATION_COLUMN_NIGHT_SHIFT": "Tasques tancades", "COLUMN_TOTAL_POWER": "Total Power", "EXPLANATION_COLUMN_TOTAL_POWER": "Total Points", "SECTION_TITLE_TEAM": "Team >", @@ -935,7 +935,7 @@ "PLACEHOLDER_NEW_PASSWORD": "Escriu una nova contrasenya", "FIELD_RETYPE_PASSWORD": "Reescriu contrasenya", "PLACEHOLDER_RETYPE_PASSWORD": "Reescriu contrasenya", - "ERROR_PASSWORD_MATCH": "The passwords doesn't match" + "ERROR_PASSWORD_MATCH": "Les contrasenyes no coincideixen" }, "USER_SETTINGS": { "AVATAR_MAX_SIZE": "[Max. grandària: {{maxFileSize}}]", @@ -950,17 +950,17 @@ "COLUMN_PROJECT": "Projecte", "COLUMN_RECEIVE_ALL": "Recibir tot", "COLUMN_ONLY_INVOLVED": "Només relevants", - "COLUMN_NO_NOTIFICATIONS": "No notifications", - "OPTION_ALL": "All", - "OPTION_INVOLVED": "Involved", - "OPTION_NONE": "None" + "COLUMN_NO_NOTIFICATIONS": "Sense notificacions", + "OPTION_ALL": "Tot", + "OPTION_INVOLVED": "Implicat", + "OPTION_NONE": "Sense notificacions" }, "POPOVER": { "USER_PROFILE": "Perfil d'usuari", "CHANGE_PASSWORD": "Canviar contrasenya", "NOTIFICATIONS": "Notificacions", - "FEEDBACK": "Feedback", - "TITLE_AVATAR": "User preferences" + "FEEDBACK": "Sugerències", + "TITLE_AVATAR": "Preferències d'usuari" } }, "USER_PROFILE": { @@ -969,12 +969,12 @@ "ACTION_USE_GRAVATAR": "Utilitza imatge de gravatar", "ACTION_DELETE_ACCOUNT": "Esborrar compte de Taiga", "CHANGE_EMAIL_SUCCESS": "Mira el teu correu!
Hem enviat un correu al teu conter
amb les instrucciones per a escriure una nova adreça de correu", - "CHANGE_PHOTO": "Change photo", + "CHANGE_PHOTO": "Canviar foto", "FIELD": { - "USERNAME": "Username", + "USERNAME": "Mot d'usuari", "EMAIL": "Email", - "FULL_NAME": "Full name", - "PLACEHOLDER_FULL_NAME": "Set your full name (ex. Íñigo Montoya)", + "FULL_NAME": "Nom complet", + "PLACEHOLDER_FULL_NAME": "Esciur el teu nom complet (ex. Íñigo Montoya)", "BIO": "Bio", "PLACEHOLDER_BIO": "Tell us something about you", "LANGUAGE": "Language", @@ -986,8 +986,8 @@ "CHOOSE_TEMPLATE_TEXT": "Quina plantilla encaixa millor al teu projecte?", "SECTION_TITLE_CREATE_PROJECT": "Crear projecte", "CREATE_PROJECT_TEXT": "Nou projecte. Qué il·lusió!", - "PROGRESS_TEMPLATE_SELECTION": "Template selection", - "PROGRESS_NAME_DESCRIPTION": "Name and description" + "PROGRESS_TEMPLATE_SELECTION": "Selecció de plantilla", + "PROGRESS_NAME_DESCRIPTION": "Nom i descripció" }, "WIKI": { "DATETIME": "DD MMM YYYY HH:mm", @@ -995,13 +995,13 @@ "REMOVE": "Esborar pàgina de Wiki", "DELETE_LIGHTBOX_TITLE": "Esborrar pàgina de Wiki", "NAVIGATION": { - "SECTION_NAME": "Links", - "ACTION_ADD_LINK": "Add link" + "SECTION_NAME": "Enllaços", + "ACTION_ADD_LINK": "Afegir link" }, "SUMMARY": { - "TIMES_EDITED": "times
edited", - "LAST_EDIT": "last
edit", - "LAST_MODIFICATION": "last modification" + "TIMES_EDITED": "voltes
editat", + "LAST_EDIT": "última
edició", + "LAST_MODIFICATION": "última modificació" } } } \ No newline at end of file diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 05269008..df6defb9 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -41,7 +41,7 @@ "ADD": "Add tag" }, "DESCRIPTION": { - "EMPTY": "Empty space is so boring... go on be descriptive... A rose by any other name would smell as sweet...", + "EMPTY": "Empty space is so boring... go on be descriptive...", "NO_DESCRIPTION": "No description yet" }, "FIELDS": { diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 8688a598..0d1e5145 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -41,7 +41,7 @@ "ADD": "Añadir etiqueta" }, "DESCRIPTION": { - "EMPTY": "El espacio vacío es tan aburrido... trata de ser descriptivo... Una rosa con cualquier otro nombre olería con la misma dulzura...", + "EMPTY": "El espacio vacío es tan aburrido... trata de ser descriptivo... ", "NO_DESCRIPTION": "Sin descripción todavía" }, "FIELDS": { @@ -940,7 +940,7 @@ "USER_SETTINGS": { "AVATAR_MAX_SIZE": "[Tamaño Max.: {{maxFileSize}}]", "MENU": { - "SECTION_TITLE": "Configuraciones de Usuario", + "SECTION_TITLE": "Configuración de Usuario", "USER_PROFILE": "Perfil de usuario", "CHANGE_PASSWORD": "Cambiar contraseña", "EMAIL_NOTIFICATIONS": "Notificaciones por email" diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index e456d3b4..17740e12 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -41,7 +41,7 @@ "ADD": "Ajouter un label" }, "DESCRIPTION": { - "EMPTY": "Un espace vide est si ennuyeux… allez-y, soyez descriptif… Une rose d'un autre nom sentirait si bon…", + "EMPTY": "Un espace vide est si ennuyeux… allez-y, soyez descriptif… ", "NO_DESCRIPTION": "Pas encore de description" }, "FIELDS": { diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index 284fee6b..266fe93e 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -41,7 +41,7 @@ "ADD": "新增標籤" }, "DESCRIPTION": { - "EMPTY": "留下空白顯得很無趣,寫下點描述吧 ", + "EMPTY": "留下空白顯得很無趣,寫下點描述吧", "NO_DESCRIPTION": "未有任何描述" }, "FIELDS": { @@ -50,7 +50,7 @@ "URL": "網址", "DESCRIPTION": "描述", "VALUE": "數值", - "SLUG": "短語 ", + "SLUG": "代稱 ", "COLOR": "顏色", "IS_CLOSED": "關閉中?", "STATUS": "狀態", @@ -68,7 +68,7 @@ "REMOVE_ASSIGNED": "數值", "TOO_MANY": "太多用戶,繼續過濾中", "CONFIRM_UNASSIGNED": "你確定要讓它無任何指派嗎?", - "TITLE_ACTION_EDIT_ASSIGNMENT": "Edit assignment" + "TITLE_ACTION_EDIT_ASSIGNMENT": "編輯指派" }, "STATUS": { "CLOSED": "關閉", @@ -77,8 +77,8 @@ "WATCHERS": { "ADD": "新增監督者", "TITLE": "監督者", - "DELETE": "Delete watcher", - "TITLE_LIGHTBOX_DELETE_WARTCHER": "Delete watcher..." + "DELETE": "已刪除監督者", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "刪除監督者" }, "CUSTOM_ATTRIBUTES": { "CUSTOM_FIELDS": "客製化欄位", @@ -106,7 +106,7 @@ "BOLD_BUTTON_SAMPLE_TEXT": "你的文字在此", "ITALIC_BUTTON": "斜體字", "ITALIC_SAMPLE_TEXT": "你的文字在此", - "STRIKE_BUTTON": "Strike", + "STRIKE_BUTTON": "刪除線", "STRIKE_SAMPLE_TEXT": "你的文字在此", "BULLETED_LIST_BUTTON": "次序列表", "BULLETED_LIST_SAMPLE_TEXT": "你的文字在此", @@ -173,7 +173,7 @@ }, "ATTACHMENT": { "SECTION_NAME": "附件", - "TITLE": "{{ fileName }} uploaded on {{ date }}", + "TITLE": "{{ fileName }} 上傳於 {{ date }}", "DESCIPTION": "輸入一段簡短敘述", "DEPRECATED_FILE": "棄用?", "ADD": "加入新附件 <%- maxFileSizeMsg %>", @@ -183,10 +183,10 @@ "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} 遭棄用)", "MAX_UPLOAD_SIZE": "上傳檔案最大容量限制 {{maxFileSize}}", "DATE": "DD MMM YYYY [at] hh:mm", - "ERROR_UPLOAD_ATTACHMENT": "We have not been able to upload '{{fileName}}'. {{errorMessage}}", - "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Delete attachment...", - "MSG_LIGHTBOX_DELETE_ATTACHMENT": "the attachment '{{fileName}}'", - "ERROR_DELETE_ATTACHMENT": "We have not been able to delete: {{errorMessage}}", + "ERROR_UPLOAD_ATTACHMENT": "無法成功上傳 '{{fileName}}'. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "刪除附件....", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "附件 '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": "無法刪除: {{errorMessage}}", "FIELDS": { "IS_DEPRECATED": "被棄用" } @@ -228,7 +228,7 @@ "TITLE": "模組", "ENABLE": "啟用", "DISABLE": "停用", - "BACKLOG": "Backlog", + "BACKLOG": "待辦任務優先表", "BACKLOG_DESCRIPTION": "管理你的 User Story 讓接下來的及優先的工作能被有條理地檢視 ", "KANBAN": "Kanban(看板)", "KANBAN_DESCRIPTION": "在此看板上組織你的專案", @@ -239,7 +239,7 @@ "MEETUP": "符合", "MEETUP_DESCRIPTION": "選擇你的視訊系統。有些開發者需要面對面接觸", "SELECT_VIDEOCONFERENCE": "選擇一個視訊會議系統 ", - "SALT_CHAT_ROOM": "If you want you can append a salt code to the name of the chat room" + "SALT_CHAT_ROOM": "你可以把聊天室名稱加上salt code亂數密碼 " }, "PROJECT_PROFILE": { "PAGE_TITLE": "專案檔案 - {{sectionName}} - {{projectName}}", @@ -324,12 +324,12 @@ "BITBUCKET": { "SECTION_NAME": "Bitbucket", "APP_TITLE": "Bitbucket - {{projectName}}", - "INFO_VERIFYING_IP": "Bitbucket requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation." + "INFO_VERIFYING_IP": "Bitbucket要求不指派因此最佳確認方式為IP位置來源。如果此處空白,表示IP未有效確核。" }, "GITLAB": { "SECTION_NAME": "Gitlob", "APP_TITLE": "Gitlab - {{projectName}}", - "INFO_VERIFYING_IP": "Gitlab requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation." + "INFO_VERIFYING_IP": "GitHub要求不指派因此最佳確認方式為IP位置來源。如果此處空白,表示IP未有效確核。" }, "GITHUB": { "SECTION_NAME": "Githun", @@ -455,7 +455,7 @@ }, "SECTION": { "SEARCH": "搜尋", - "BACKLOG": "積壓", + "BACKLOG": "待辦任務優先表", "KANBAN": "Kanban(看板)", "ISSUES": "問題 ", "WIKI": "維基", @@ -571,7 +571,7 @@ } }, "COMMENTS": { - "DELETED_INFO": "Comment deleted by {{user}} on {{date}}", + "DELETED_INFO": "評論被 {{user}} 於 {{date}}刪除 ", "TITLE": "評論", "COMMENT": "評論", "TYPE_NEW_COMMENT": "在此輸入一個新的評論", @@ -591,52 +591,52 @@ "DELETED_ATTACHMENT": "已刪除附件", "UPDATED_ATTACHMENT": "更新附件 {{filename}}", "DELETED_CUSTOM_ATTRIBUTE": "刪除客製屬性", - "SIZE_CHANGE": "Made {size, plural, one{one change} other{# changes}}", + "SIZE_CHANGE": "使 {size, plural, one{change} 其它{changes}}", "VALUES": { "YES": "yes", "NO": "no", - "EMPTY": "empty", - "UNASSIGNED": "unassigned" + "EMPTY": "空白", + "UNASSIGNED": "未指派" }, "FIELDS": { - "SUBJECT": "subject", - "NAME": "name", - "DESCRIPTION": "description", - "CONTENT": "content", - "STATUS": "status", - "IS_CLOSED": "is closed", - "FINISH_DATE": "finish date", - "TYPE": "type", - "PRIORITY": "priority", - "SEVERITY": "severity", - "ASSIGNED_TO": "assigned to", - "WATCHERS": "watchers", - "MILESTONE": "sprint", - "USER_STORY": "user story", - "PROJECT": "project", - "IS_BLOCKED": "is blocked", - "BLOCKED_NOTE": "blocked note", - "POINTS": "points", - "CLIENT_REQUIREMENT": "client requirement", - "TEAM_REQUIREMENT": "team requirement", - "IS_IOCAINE": "is iocaine", - "TAGS": "tags", - "ATTACHMENTS": "attachments", - "IS_DEPRECATED": "is deprecated", - "ORDER": "order", - "BACKLOG_ORDER": "backlog order", - "SPRINT_ORDER": "sprint order", - "KANBAN_ORDER": "kanban order", - "TASKBOARD_ORDER": "taskboard order", - "US_ORDER": "us order" + "SUBJECT": "主旨", + "NAME": "名稱 ", + "DESCRIPTION": "描述", + "CONTENT": "內容", + "STATUS": "狀態", + "IS_CLOSED": "關閉中", + "FINISH_DATE": "完成日期", + "TYPE": "類型", + "PRIORITY": "優先性", + "SEVERITY": "急迫性", + "ASSIGNED_TO": "指派給 ", + "WATCHERS": "監督者", + "MILESTONE": "衝刺任務", + "USER_STORY": "使用者故事", + "PROJECT": "專案", + "IS_BLOCKED": "封鎖", + "BLOCKED_NOTE": "已封鎖之筆記", + "POINTS": "點數", + "CLIENT_REQUIREMENT": "客戶要求", + "TEAM_REQUIREMENT": "團隊要求", + "IS_IOCAINE": "負予全新任務", + "TAGS": "標籤", + "ATTACHMENTS": "附件", + "IS_DEPRECATED": "被棄用", + "ORDER": "次序", + "BACKLOG_ORDER": "待辦任務先後次序", + "SPRINT_ORDER": "衝刺任務次序", + "KANBAN_ORDER": "kanban看板次序", + "TASKBOARD_ORDER": "任務板次序", + "US_ORDER": "使用者故事次序" } }, "BACKLOG": { - "SECTION_NAME": "積壓", + "SECTION_NAME": "待辦任務優先表", "MOVE_US_TO_CURRENT_SPRINT": "移到目前的 Sprint", "SHOW_FILTERS": "顯示過濾器", "SHOW_TAGS": "顯示標籤 (Tag)", - "EMPTY": "你的積壓已清空", + "EMPTY": "你的待辦任務優先表已清空", "CREATE_NEW_US": "創建一個新的使用者故事", "CREATE_NEW_US_EMPTY_HELP": "你可以創建一個新使用者故事", "EXCESS_OF_POINTS": "超過的點數", @@ -647,11 +647,11 @@ "EDIT_SPRINT": "編輯衝刺任務 ", "TOTAL_POINTS": "全部", "STATUS_NAME": "狀態名稱 ", - "SORTABLE_FILTER_ERROR": "You can't drop on backlog when filters are open", + "SORTABLE_FILTER_ERROR": "當過濾器開啟時,無法放入待辦任務優先表", "DOOMLINE": "專案規模 [Doomline]", "CHART": { - "XAXIS_LABEL": "Sprints", - "YAXIS_LABEL": "Points", + "XAXIS_LABEL": "衝刺任務", + "YAXIS_LABEL": "點數", "OPTIMAL": "最佳給衝刺任務待辦點數 {{xval}} 應是 {{yval}}", "REAL": "任務衝刺實際待辦點數 {{xval}} 為 {{yval}}", "INCREMENT_TEAM": "團隊要求的任務衝刺逐步新增點數 {{xval}} 為 {{yval}}", @@ -670,7 +670,7 @@ "COMPLETED_POINTS": "已完成
點數", "OPEN_TASKS": "開啟
任務", "CLOSED_TASKS": "已關閉
任務", - "IOCAINE_DOSES": "毒物
劑量", + "IOCAINE_DOSES": "毒物(全新任務挑戰)
劑量", "SHOW_STATISTICS_TITLE": "顯示統計" }, "SUMMARY": { @@ -723,11 +723,11 @@ "ROW_UNASSIGED_TASKS_TITLE": "未指派的任務" }, "CHARTS": { - "XAXIS_LABEL": "Days", - "YAXIS_LABEL": "Points", - "OPTIMAL": "Optimal pending points for day {{formattedDate}} should be {{roundedValue}}", + "XAXIS_LABEL": "天數", + "YAXIS_LABEL": "點數", + "OPTIMAL": "一天最適待辦點數{formattedDate}應為{{roundedValue}}", "REAL": "一天真實的待辦點數 {{formattedDate}} is {{roundedValue}}", - "DATE": "DD MMMM YYYY" + "DATE": "DD MMM YYYY" } }, "TASK": { @@ -747,9 +747,9 @@ "FIELDS": { "MILESTONE": "衝刺任務", "USER_STORY": "使用者故事", - "IS_IOCAINE": "Is iocaine" + "IS_IOCAINE": "負予全新任務" }, - "ACTION_IOCAINE": "Iocaine", + "ACTION_IOCAINE": "挑戰全新任務", "TITLE_ACTION_IOCAINE": "感到任務的不勘負荷?確定其它人知道此狀況在編輯任務時點選此「毒藥鍵」。這種致命毒物如果長期吸食微量,最後可能免疫。因此你最好偶而做點出奇的挑戰。" }, "NOTIFICATION": { @@ -910,15 +910,15 @@ "SECTION_NAME": "團隊", "APP_TITLE": "團隊- {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "以全名搜尋", - "COLUMN_MR_WOLF": "Mr. Wolf", + "COLUMN_MR_WOLF": "問題解決高手", "EXPLANATION_COLUMN_MR_WOLF": "已關閉議題 ", - "COLUMN_IOCAINE": "使用大頭照", - "EXPLANATION_COLUMN_IOCAINE": "毒物劑量攝取", - "COLUMN_CERVANTES": "Cervantes", + "COLUMN_IOCAINE": "毒品吸食者(新領域任務挑戰)", + "EXPLANATION_COLUMN_IOCAINE": "毒物(新任務)劑量攝取", + "COLUMN_CERVANTES": "大文豪", "EXPLANATION_COLUMN_CERVANTES": "已編輯之維基頁", "COLUMN_BUG_HUNTER": "程式錯誤獵人", "EXPLANATION_COLUMN_BUG_HUNTER": "問題回報", - "COLUMN_NIGHT_SHIFT": "夜班", + "COLUMN_NIGHT_SHIFT": "熬夜工作", "EXPLANATION_COLUMN_NIGHT_SHIFT": "任務關閉", "COLUMN_TOTAL_POWER": "所有力量", "EXPLANATION_COLUMN_TOTAL_POWER": "所有點數", @@ -941,7 +941,7 @@ "AVATAR_MAX_SIZE": "[最大. 尺寸: {{maxFileSize}}] ", "MENU": { "SECTION_TITLE": "使用者設定", - "USER_PROFILE": "使用者檔案", + "USER_PROFILE": "使用者設定檔案", "CHANGE_PASSWORD": "更換密碼 ", "EMAIL_NOTIFICATIONS": "電子郵件通知" }, @@ -949,14 +949,14 @@ "SECTION_NAME": "電子郵件通知", "COLUMN_PROJECT": "專案", "COLUMN_RECEIVE_ALL": "接收所有", - "COLUMN_ONLY_INVOLVED": "Only Involved", + "COLUMN_ONLY_INVOLVED": "只有相關", "COLUMN_NO_NOTIFICATIONS": "無通知", "OPTION_ALL": "所有", "OPTION_INVOLVED": "涉入", "OPTION_NONE": "無" }, "POPOVER": { - "USER_PROFILE": "使用者檔案", + "USER_PROFILE": "使用者設定檔案", "CHANGE_PASSWORD": "更換密碼 ", "NOTIFICATIONS": "通知", "FEEDBACK": "回饋 ", diff --git a/scripts/manage_translations.py b/scripts/manage_translations.py index 7c265080..c945c51c 100644 --- a/scripts/manage_translations.py +++ b/scripts/manage_translations.py @@ -27,7 +27,7 @@ from subprocess import PIPE, Popen, call FIXED_LOCALES = { - "zh-Hant": "zh-hant" + "zh-Hant": "zh-hant", "zh-Hans": "zh-hans" } From 572989b83683f238f5c442f85a4452c2c578775d Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 5 May 2015 07:34:46 +0200 Subject: [PATCH 114/194] Fixing reordering issue when filters enabled, error message was shown but order was updated anyway --- app/coffee/modules/backlog/sortable.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/backlog/sortable.coffee b/app/coffee/modules/backlog/sortable.coffee index 6484c044..48d9eea2 100644 --- a/app/coffee/modules/backlog/sortable.coffee +++ b/app/coffee/modules/backlog/sortable.coffee @@ -55,7 +55,7 @@ BacklogSortableDirective = ($repo, $rs, $rootscope, $tgConfirm, $translate) -> filterError = -> text = $translate.instant("BACKLOG.SORTABLE_FILTER_ERROR") - $tgConfirm.notify(text) + $tgConfirm.notify("error", text) $el.sortable({ items: ".us-item-row", @@ -100,6 +100,9 @@ BacklogSortableDirective = ($repo, $rs, $rootscope, $tgConfirm, $translate) -> if $(ui.items[0]).parent().length == 0 return + if $el.hasClass("active-filters") + return + items = _.sortBy ui.items, (item) -> return $(item).index() From 40c8e63ee303cc10c91653355abd6fc127259711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 5 May 2015 17:28:56 +0200 Subject: [PATCH 115/194] [i18b] Some minor fixes and update locales --- app/coffee/modules/common/components.coffee | 2 +- app/coffee/modules/common/history.coffee | 13 +- app/locales/locale-ca.json | 341 ++++++++++---------- app/locales/locale-en.json | 1 + app/locales/locale-es.json | 1 + app/locales/locale-fi.json | 1 + app/locales/locale-fr.json | 1 + app/locales/locale-zh-hant.json | 1 + app/partials/issue/issues-detail.jade | 2 +- scripts/manage_translations.py | 18 +- 10 files changed, 196 insertions(+), 185 deletions(-) diff --git a/app/coffee/modules/common/components.coffee b/app/coffee/modules/common/components.coffee index 43032c63..78c07d94 100644 --- a/app/coffee/modules/common/components.coffee +++ b/app/coffee/modules/common/components.coffee @@ -125,7 +125,7 @@ CreatedByDisplayDirective = ($template, $compile, $translate)-> link = ($scope, $el, $attrs) -> render = (model) -> owner = $scope.usersById?[model.owner] or { - full_name_display: "external user" + full_name_display: $translate.instant("COMMON.EXTERNAL_USER") photo: "/images/unnamed.png" } diff --git a/app/coffee/modules/common/history.coffee b/app/coffee/modules/common/history.coffee index 87a83692..4dff84db 100644 --- a/app/coffee/modules/common/history.coffee +++ b/app/coffee/modules/common/history.coffee @@ -87,7 +87,8 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c showAllComments = false showAllActivity = false - prettyDate = $translate.instant("ACTIVITY.DATETIME") + getPrettyDateFormat = -> + return $translate.instant("ACTIVITY.DATETIME") bindOnce $scope, $attrs.ngModel, (model) -> type = $attrs.type @@ -271,7 +272,7 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c renderComment = (comment) -> if (comment.delete_comment_date or comment.delete_comment_user?.name) html = templateDeletedComment({ - deleteCommentDate: moment(comment.delete_comment_date).format(prettyDate) if comment.delete_comment_date + deleteCommentDate: moment(comment.delete_comment_date).format(getPrettyDateFormat()) if comment.delete_comment_date deleteCommentUser: comment.delete_comment_user.name deleteComment: comment.comment_html activityId: comment.id @@ -286,12 +287,12 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c html = templateActivity({ avatar: getUserAvatar(comment.user.pk) userFullName: comment.user.name - creationDate: moment(comment.created_at).format(prettyDate) + creationDate: moment(comment.created_at).format(getPrettyDateFormat()) comment: comment.comment_html changesText: renderChangesHelperText(comment) changes: renderChangeEntries(comment) mode: "comment" - deleteCommentDate: moment(comment.delete_comment_date).format(prettyDate) if comment.delete_comment_date + deleteCommentDate: moment(comment.delete_comment_date).format(getPrettyDateFormat()) if comment.delete_comment_date deleteCommentUser: comment.delete_comment_user.name if comment.delete_comment_user?.name activityId: comment.id canDeleteComment: comment.user.pk == $scope.user?.id or $scope.project.my_permissions.indexOf("modify_project") > -1 @@ -305,12 +306,12 @@ HistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $c return templateActivity({ avatar: getUserAvatar(change.user.pk) userFullName: change.user.name - creationDate: moment(change.created_at).format(prettyDate) + creationDate: moment(change.created_at).format(getPrettyDateFormat()) comment: change.comment_html changes: renderChangeEntries(change) changesText: "" mode: "activity" - deleteCommentDate: moment(change.delete_comment_date).format(prettyDate) if change.delete_comment_date + deleteCommentDate: moment(change.delete_comment_date).format(getPrettyDateFormat()) if change.delete_comment_date deleteCommentUser: change.delete_comment_user.name if change.delete_comment_user?.name activityId: change.id }) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 19cf6a67..249fe21f 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -33,6 +33,7 @@ "NEW_BULK": "Nova inserció en grup", "RELATED_TASKS": "Tasques relacionades", "LOGOUT": "Logout", + "EXTERNAL_USER": "an external user", "GENERIC_ERROR": "Un Oompa Loompas diu {{error}}.", "IOCAINE_TEXT": "Un poc saturat per una tasca? Fes-ho saber als teus companys clicant a Iocaina quan edites la tasca. Es possible ser inmune a aquesta (fictícia) poció mortal consumint xicotetes dòsis poc a poc, així com es possible millorar amb xicotets nous desafiaments!", "TAGS": { @@ -41,127 +42,127 @@ "ADD": "Afegit tag" }, "DESCRIPTION": { - "EMPTY": "Empty space is so boring... go on be descriptive...", + "EMPTY": "Els espai buit es molt aburrit. Sé descriptiu!", "NO_DESCRIPTION": "Sense descripció" }, "FIELDS": { "SUBJECT": "Descripció", "NAME": "Nom", "URL": "URL", - "DESCRIPTION": "Description", - "VALUE": "Value", + "DESCRIPTION": "Descripció", + "VALUE": "Valor", "SLUG": "Slug", "COLOR": "Color", - "IS_CLOSED": "Is closed?", - "STATUS": "Status", - "ASSIGNED_TO": "Assigned to", - "POINTS": "Points", - "BLOCKED_NOTE": "blocked note", - "IS_BLOCKED": "is blocked" + "IS_CLOSED": "Està tancat?", + "STATUS": "Estatus", + "ASSIGNED_TO": "Assignat a", + "POINTS": "Punts", + "BLOCKED_NOTE": "Nota de bloqueig", + "IS_BLOCKED": "està bloquejat" }, "ROLES": { "ALL": "Tot" }, "ASSIGNED_TO": { "NOT_ASSIGNED": "Sense assignar", - "DELETE_ASSIGNMENT": "Delete assignment", - "REMOVE_ASSIGNED": "Remove assigned", - "TOO_MANY": "...too many users, keep filtering", - "CONFIRM_UNASSIGNED": "Are you sure you want to leave it unassigned?", - "TITLE_ACTION_EDIT_ASSIGNMENT": "Edit assignment" + "DELETE_ASSIGNMENT": "Esborrar assignament", + "REMOVE_ASSIGNED": "Esborra assignat", + "TOO_MANY": ".. massa usuaris, segueix filtrant", + "CONFIRM_UNASSIGNED": "Segut que vols deixar-ho sense assignar?", + "TITLE_ACTION_EDIT_ASSIGNMENT": "Editar assignament" }, "STATUS": { - "CLOSED": "Closed", - "OPEN": "Open" + "CLOSED": "Tancat", + "OPEN": "Obert" }, "WATCHERS": { - "ADD": "Add watcher", - "TITLE": "watchers", - "DELETE": "Delete watcher", - "TITLE_LIGHTBOX_DELETE_WARTCHER": "Delete watcher..." + "ADD": "Afegir seguidor", + "TITLE": "Seguidors", + "DELETE": "Esborrar seguidor", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "Esborrar seguidor..." }, "CUSTOM_ATTRIBUTES": { - "CUSTOM_FIELDS": "Custom Fields", - "SAVE": "Save Custom Field", - "EDIT": "Edit Custom Field", - "DELETE": "Delete custom attribute", - "CONFIRM_DELETE": "Remeber that all values in this custom field will be deleted.
Are you sure you want to continue?" + "CUSTOM_FIELDS": "Camps personalitzats", + "SAVE": "Salva camp personalitzat", + "EDIT": "Edita el camp personalitzat", + "DELETE": "Esborrar atribut personalitzat", + "CONFIRM_DELETE": "Recorda que tots els valors a aquest camp personalitzat seràn esborrats.
Segur que voleu continuar? " }, "FILTERS": { - "TITLE": "filters", - "INPUT_PLACEHOLDER": "Subject or reference", - "TITLE_ACTION_FILTER_BUTTON": "search", - "BREADCRUMB_TITLE": "back to categories", - "BREADCRUMB_FILTERS": "Filters", - "BREADCRUMB_STATUS": "status" + "TITLE": "filtres", + "INPUT_PLACEHOLDER": "Descripció o referència", + "TITLE_ACTION_FILTER_BUTTON": "buscar", + "BREADCRUMB_TITLE": "tornar a categories", + "BREADCRUMB_FILTERS": "Filtres", + "BREADCRUMB_STATUS": "estatus" }, "WYSIWYG": { - "H1_BUTTON": "First Level Heading", - "H1_SAMPLE_TEXT": "Your title here...", - "H2_BUTTON": "Second Level Heading", - "H2_SAMPLE_TEXT": "Your title here...", - "H3_BUTTON": "Third Level Heading", - "H3_SAMPLE_TEXT": "Your title here...", - "BOLD_BUTTON": "Bold", - "BOLD_BUTTON_SAMPLE_TEXT": "Your text here...", - "ITALIC_BUTTON": "Italic", - "ITALIC_SAMPLE_TEXT": "Your text here...", - "STRIKE_BUTTON": "Strike", - "STRIKE_SAMPLE_TEXT": "Your text here...", - "BULLETED_LIST_BUTTON": "Bulleted List", - "BULLETED_LIST_SAMPLE_TEXT": "Your text here...", - "NUMERIC_LIST_BUTTON": "Numeric List", - "NUMERIC_LIST_SAMPLE_TEXT": "Your text here...", - "PICTURE_BUTTON": "Picture", - "PICTURE_SAMPLE_TEXT": "Your alternative text to picture here...", - "LINK_BUTTON": "Link", - "LINK_SAMPLE_TEXT": "Your text to link here....", - "QUOTE_BLOCK_BUTTON": "Quote Block", - "QUOTE_BLOCK_SAMPLE_TEXT": "Your text here...", - "CODE_BLOCK_BUTTON": "Code Block", - "CODE_BLOCK_SAMPLE_TEXT": "Your text here...", - "PREVIEW_BUTTON": "Preview", - "EDIT_BUTTON": "Edit", - "MARKDOWN_HELP": "Markdown syntax help" + "H1_BUTTON": "Capçcalera de primer nivel", + "H1_SAMPLE_TEXT": "El títul ací...", + "H2_BUTTON": "Capçalera de segon nivel", + "H2_SAMPLE_TEXT": "El títul ací...", + "H3_BUTTON": "Tercer nivell de capçalera", + "H3_SAMPLE_TEXT": "El títul ací...", + "BOLD_BUTTON": "Gros", + "BOLD_BUTTON_SAMPLE_TEXT": "El teu text ací...", + "ITALIC_BUTTON": "Itàlica", + "ITALIC_SAMPLE_TEXT": "El teu text ací...", + "STRIKE_BUTTON": "Tatxar", + "STRIKE_SAMPLE_TEXT": "El teu text ací...", + "BULLETED_LIST_BUTTON": "Llista ordenada", + "BULLETED_LIST_SAMPLE_TEXT": "El teu text ací...", + "NUMERIC_LIST_BUTTON": "Llista numèrica", + "NUMERIC_LIST_SAMPLE_TEXT": "El teu text ací...", + "PICTURE_BUTTON": "Foto", + "PICTURE_SAMPLE_TEXT": "El text alternatiu a la foto ací", + "LINK_BUTTON": "Enllaç", + "LINK_SAMPLE_TEXT": "El teu text per al link ací...", + "QUOTE_BLOCK_BUTTON": "Bloc de cita", + "QUOTE_BLOCK_SAMPLE_TEXT": "El teu text ací...", + "CODE_BLOCK_BUTTON": "Bolc de codi", + "CODE_BLOCK_SAMPLE_TEXT": "El teu text ací...", + "PREVIEW_BUTTON": "Previsualitzar", + "EDIT_BUTTON": "Editar", + "MARKDOWN_HELP": "Ajuda de Markdown" }, "PERMISIONS_CATEGORIES": { "SPRINTS": { "NAME": "Sprints", - "VIEW_SPRINTS": "View sprints", - "ADD_SPRINTS": "Add sprints", - "MODIFY_SPRINTS": "Modify sprints", - "DELETE_SPRINTS": "Delete sprints" + "VIEW_SPRINTS": "Vore sprints", + "ADD_SPRINTS": "Afegir sprint", + "MODIFY_SPRINTS": "Editar sprint", + "DELETE_SPRINTS": "Esborrar sprints" }, "USER_STORIES": { - "NAME": "User Stories", - "VIEW_USER_STORIES": "View user stories", - "ADD_USER_STORIES": "Add user stories", - "MODIFY_USER_STORIES": "Modify user stories", - "DELETE_USER_STORIES": "Delete user stories" + "NAME": "Històries d'usuari", + "VIEW_USER_STORIES": "Vore istòries d'usuari", + "ADD_USER_STORIES": "Afegir històries d'usuari", + "MODIFY_USER_STORIES": "Editar història d'usuari", + "DELETE_USER_STORIES": "Esborrar històries d'usuari" }, "TASKS": { - "NAME": "Tasks", - "VIEW_TASKS": "View tasks", - "ADD_TASKS": "Add tasks", - "MODIFY_TASKS": "Modify tasks", - "DELETE_TASKS": "Delete tasks" + "NAME": "Tasques", + "VIEW_TASKS": "Vore tasca", + "ADD_TASKS": "Afegit tasques", + "MODIFY_TASKS": "Modificar tasques", + "DELETE_TASKS": "Esborrar tasques" }, "ISSUES": { - "NAME": "Issues", - "VIEW_ISSUES": "View issues", - "ADD_ISSUES": "Add issues", - "MODIFY_ISSUES": "Modify issues", - "DELETE_ISSUES": "Delete issues" + "NAME": "Incidències", + "VIEW_ISSUES": "Vore incidències", + "ADD_ISSUES": "Afegir incidències", + "MODIFY_ISSUES": "Modificar incidències", + "DELETE_ISSUES": "Esborrar incidències" }, "WIKI": { "NAME": "Wiki", - "VIEW_WIKI_PAGES": "View wiki pages", - "ADD_WIKI_PAGES": "Add wiki pages", - "MODIFY_WIKI_PAGES": "Modify wiki pages", - "DELETE_WIKI_PAGES": "Delete wiki pages", - "VIEW_WIKI_LINKS": "View wiki links", - "ADD_WIKI_LINKS": "Add wiki links", - "DELETE_WIKI_LINKS": "Delete wiki links" + "VIEW_WIKI_PAGES": "Vore pàgines de Wiki", + "ADD_WIKI_PAGES": "Afegir pàgines de Wiki", + "MODIFY_WIKI_PAGES": "Modificar pàgina del Wiki", + "DELETE_WIKI_PAGES": "Esborrar pàgines de Wiki", + "VIEW_WIKI_LINKS": "Vore enllaços de Wiki", + "ADD_WIKI_LINKS": "Afegir link de wiki", + "DELETE_WIKI_LINKS": "Esborrar enllaços de wiki" } } }, @@ -173,7 +174,7 @@ }, "ATTACHMENT": { "SECTION_NAME": "Adjunts", - "TITLE": "{{ fileName }} uploaded on {{ date }}", + "TITLE": "{{ fileName }} pujat el {{ date }}", "DESCIPTION": "Escriu una descripció curta", "DEPRECATED_FILE": "Obsolet?", "ADD": "Afegir nou adjunt. <%- maxFileSizeMsg %>", @@ -183,10 +184,10 @@ "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} obsolet)", "MAX_UPLOAD_SIZE": "El tamany màxim de pujada es ", "DATE": "DD MMM YYYY [at] hh:mm", - "ERROR_UPLOAD_ATTACHMENT": "We have not been able to upload '{{fileName}}'. {{errorMessage}}", - "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Delete attachment...", - "MSG_LIGHTBOX_DELETE_ATTACHMENT": "the attachment '{{fileName}}'", - "ERROR_DELETE_ATTACHMENT": "We have not been able to delete: {{errorMessage}}", + "ERROR_UPLOAD_ATTACHMENT": "No hem pogut pujar '{{fileName}}'. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Esborrar adjunt...", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "l'adjunt '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": "No hem pogut esborrar: {{errorMessage}}", "FIELDS": { "IS_DEPRECATED": "es obsolet" } @@ -219,10 +220,10 @@ "DUMP_READY": "El fitxer de daes està llest!", "LOADING_MESSAGE": "Per favor no tanquest aquest pàgina", "ASYNC_MESSAGE": "T'enviarem un correu quan estiga llest.", - "SYNC_MESSAGE": "If the download doesn't start automatically click here.", - "ERROR": "Our Oompa Loompas have some problems generating your dump. Please try it again.", - "ERROR_BUSY": "Sorry, our Oompa Loompas are very busy right now. Please try again in a few minutes.", - "ERROR_MESSAGE": "Our Oompa Loompas have some problems generating your dump: {{message}}" + "SYNC_MESSAGE": "Si la descàrrega no baixa directament clica ací.", + "ERROR": "Els Oompa Loompas tenen problemes generant el teu arxiu de dades. Per favor intenta-ho de nou.", + "ERROR_BUSY": "Ho sentim, els Oompa Loompas estàn molt ocupats ara mateix. Intenta-ho de nou en uns moments.", + "ERROR_MESSAGE": "Els Oompa Loompas tenen problemes generant el teu arxiu de dades: {{message}}" }, "MODULES": { "TITLE": "Mòdules", @@ -248,7 +249,7 @@ "PROJECT_SLUG": "Slug de projecte", "NUMBER_SPRINTS": "Nombre de sprints", "NUMBER_US_POINTS": "Nombre de punts de US", - "DESCRIPTION": "Description", + "DESCRIPTION": "Descripció", "PUBLIC_PROJECT": "Projecte públic", "PRIVATE_PROJECT": "Projecte privat", "DELETE": "Esborra aquest projecte" @@ -261,8 +262,8 @@ "REGENERATE_TITLE": "Canviar URL", "REGENERATE_SUBTITLE": "Vas a canviar la URL d'accés al CSV. La URL previa no funcionarà. Estàs segur?", "CSV_TYPE_US": "Històries d'usuari", - "CSV_TYPE_TASK": "tasks", - "CSV_TYPE_ISSUE": "issues" + "CSV_TYPE_TASK": "tasques", + "CSV_TYPE_ISSUE": "incidències" }, "CUSTOM_FIELDS": { "TITLE": "Camps personalitzats", @@ -301,7 +302,7 @@ }, "PROJECT_VALUES_TYPES": { "TITLE": "Tipus", - "SUBTITLE": "Specify the types your issues could be", + "SUBTITLE": "Especifica quin tipus d'incidència podria ser.", "ISSUE_TITLE": "Tipus d'incidències", "ACTION_ADD": "Afegir now {{objName}}" }, @@ -351,14 +352,14 @@ "DELETE": "Esborrar Webhooks", "REQUEST": "Petició", "RESEND_REQUEST": "Reenviar petició", - "HEADERS": "Headers", + "HEADERS": "Capçaleres", "PAYLOAD": "Payload", - "RESPONSE": "Response", - "DATE": "DD MMM YYYY [at] hh:mm:ss", - "ACTION_HIDE_HISTORY": "(Hide history)", - "ACTION_HIDE_HISTORY_TITLE": "Hide history details", - "ACTION_SHOW_HISTORY": "(Show history)", - "ACTION_SHOW_HISTORY_TITLE": "Show history details", + "RESPONSE": "Resposta", + "DATE": "DD MMM YYYY [at] hh:mm", + "ACTION_HIDE_HISTORY": "(Amaga històric)", + "ACTION_HIDE_HISTORY_TITLE": "Amaga detalls d'històric", + "ACTION_SHOW_HISTORY": "(Mostra històric)", + "ACTION_SHOW_HISTORY_TITLE": "Mostra detall d'històric", "WEBHOOK_NAME": "Webhook '{{name}}'" }, "CUSTOM_ATTRIBUTES": { @@ -476,9 +477,9 @@ "DESCRIPTION": "Aquest procés pot durar una mica, pero favor mantinga la finestra oberta", "ASYNC_IN_PROGRESS_TITLE": "Els Oompa Loompas estàn important el teu projecte", "ASYNC_IN_PROGRESS_MESSAGE": "Aquest procés pot durar uns moments
T'enviarem un correo quan estiga llest.", - "ERROR": "Our Oompa Loompas have some problems importing your dump data. Please try again.", - "ERROR_TOO_MANY_REQUEST": "Sorry, our Oompa Loompas are very busy right now. Please try again in a few minutes.", - "ERROR_MESSAGE": "Our Oompa Loompas have some problems importing your dump data: {{error_message}}", + "ERROR": "Els Oompa Loompas han tingut problemes pujan les teues dades. Per favor intenta-ho de nou.", + "ERROR_TOO_MANY_REQUEST": "Ho sentim, els Oompa Loompas estàn molt ocupats ara mateix. Intenta-ho de nou en uns moments.", + "ERROR_MESSAGE": "Els Oompa Loompas tenen problemes important les teues dades: {{error_message}}", "SYNC_SUCCESS": "El teu projecte s'ha importat correctament" } }, @@ -491,7 +492,7 @@ "DELETE_PROJECT": { "TITLE": "Esborrar projecte", "QUESTION": "Estàs segur que vols borrar este projecte?", - "SUBTITLE": "All project data (user stories, tasks, issues, sprints and wiki pages) will be lost! :-(", + "SUBTITLE": "Totes les dades del projecte (històries d'usuari, tasques, incidències, wikis) es perdràn :-(", "CONFIRM": "Si, estic segur" }, "ASSIGNED_TO": { @@ -546,12 +547,12 @@ } }, "US": { - "LINK_TASKBOARD": "Taskboard", + "LINK_TASKBOARD": "Panell de tasques", "TITLE_LINK_TASKBOARD": "Anar a panell de tasques", "TOTAL_POINTS": "total", "ADD": "+ Afegir nova història d'usuari", "ADD_BULK": "Afegeix noves històries d'usuari en grup", - "PROMOTED": "This US has been promoted from Issue:", + "PROMOTED": "Aquesta US ha sigut promocionada desde:", "TITLE_LINK_GO_TO_ISSUE": "Anar a la incidència", "EXTERNAL_REFERENCE": "Aquesta US ha sigut creada desde", "GO_TO_EXTERNAL_REFERENCE": "Anar a l'orige", @@ -571,7 +572,7 @@ } }, "COMMENTS": { - "DELETED_INFO": "Comment deleted by {{user}} on {{date}}", + "DELETED_INFO": "Comentari esborrat per {{user}} el {{date}}", "TITLE": "Comentaris", "COMMENT": "Comentar", "TYPE_NEW_COMMENT": "Escriu un nou comentari ací", @@ -591,9 +592,9 @@ "DELETED_ATTACHMENT": "Adjunts esborrats", "UPDATED_ATTACHMENT": "Actualitzat adjunt {{filename}}", "DELETED_CUSTOM_ATTRIBUTE": "Esborrar camps personalitzat", - "SIZE_CHANGE": "Made {size, plural, one{one change} other{# changes}}", + "SIZE_CHANGE": "Fet {size, plural, one{un canvi} other{# changes}}", "VALUES": { - "YES": "yes", + "YES": "si", "NO": "no", "EMPTY": "buit", "UNASSIGNED": "Sense assignar" @@ -616,19 +617,19 @@ "PROJECT": "projecte", "IS_BLOCKED": "Està bloquejat", "BLOCKED_NOTE": "Nota de bloqueig", - "POINTS": "points", - "CLIENT_REQUIREMENT": "client requirement", - "TEAM_REQUIREMENT": "team requirement", - "IS_IOCAINE": "is iocaine", + "POINTS": "punts", + "CLIENT_REQUIREMENT": "requeriment de client", + "TEAM_REQUIREMENT": "requeriment d'equip", + "IS_IOCAINE": "Es iocaina", "TAGS": "tags", - "ATTACHMENTS": "attachments", - "IS_DEPRECATED": "is deprecated", - "ORDER": "order", - "BACKLOG_ORDER": "backlog order", - "SPRINT_ORDER": "sprint order", - "KANBAN_ORDER": "kanban order", - "TASKBOARD_ORDER": "taskboard order", - "US_ORDER": "us order" + "ATTACHMENTS": "adjunts", + "IS_DEPRECATED": "és obsolet", + "ORDER": "ordre", + "BACKLOG_ORDER": "ordre de backlog", + "SPRINT_ORDER": "ordre d'sprint", + "KANBAN_ORDER": "ordre de kanban", + "TASKBOARD_ORDER": "ordre de panell de tasques", + "US_ORDER": "ordre d'US" } }, "BACKLOG": { @@ -693,9 +694,9 @@ "TITLE_LINK_TASKBOARD": "Anar al panell de {{::name}}", "NUMBER_SPRINTS": "
sprints", "TITLE_ACTION_NEW_SPRINT": "+ Nou sprint", - "ACTION_NEW_SPRINT": "+ New sprint", - "ACTION_SHOW_CLOSED_SPRINTS": "Show closed sprints", - "ACTION_HIDE_CLOSED_SPRINTS": "Hide closed sprints" + "ACTION_NEW_SPRINT": "+ Nou sprint", + "ACTION_SHOW_CLOSED_SPRINTS": "Mostra sprints tancats", + "ACTION_HIDE_CLOSED_SPRINTS": "Amaga sprints tancats" } }, "ERROR": { @@ -705,10 +706,10 @@ "NOT_FOUND_TEXT": "Error 404. La pàgina que busques no existeix. Pots tornar a la página principal de taiga i provar desde allí.", "PERMISSION_DENIED": "Permis denegat", "PERMISSION_DENIED_CODE": "Error 403", - "VERSION_ERROR": "Someone inside Taiga has changed this before and our Oompa Loompas cannot apply your changes. Please reload and apply your changes again (they will be lost)." + "VERSION_ERROR": "Algú dins de Taiga ha canviat aȯ abans i els Oompa Loompas no pode aplicar els teus canvis. Per favor recarrega i aplica els teus canvis (es perdràn)" }, "TASKBOARD": { - "SECTION_NAME": "Taskboard", + "SECTION_NAME": "Panell de tasques", "TITLE_ACTION_ADD": "Afegir nova tasca", "TITLE_ACTION_ADD_BULK": "Afegeix noves històries d'usuari en grup", "TITLE_ACTION_ASSIGN": "Assignar tasca", @@ -723,15 +724,15 @@ "ROW_UNASSIGED_TASKS_TITLE": "Tasques sense assignar" }, "CHARTS": { - "XAXIS_LABEL": "Days", - "YAXIS_LABEL": "Points", - "OPTIMAL": "Optimal pending points for day {{formattedDate}} should be {{roundedValue}}", + "XAXIS_LABEL": "Díes", + "YAXIS_LABEL": "Punts", + "OPTIMAL": "Punts pendents òptims per dia {{formattedDate}} deu ser {{roundedValue}}", "REAL": "Punts pendents el dia {{formattedDate}} son {{roundedValue}}", "DATE": "DD MMMM YYYY" } }, "TASK": { - "LINK_TASKBOARD": "Taskboard", + "LINK_TASKBOARD": "Panell de tasques", "TITLE_LINK_TASKBOARD": "Anar a panell de tasques", "PLACEHOLDER_SUBJECT": "Afegix la descripció de la tasca", "TITLE_SELECT_STATUS": "Nom d'estatus", @@ -755,8 +756,8 @@ "NOTIFICATION": { "OK": "Tot està ok", "WARNING": "Oops, ha passat algo...", - "WARNING_TEXT": "Our Oompa Loompas are sad, your changes were not saved!", - "SAVED": "Our Oompa Loompas saved all your changes!", + "WARNING_TEXT": "Els teus canvis no s'han salvat!", + "SAVED": "Els Oompa Loompas han salvat els teus canvis!", "CLOSE": "Tancar notificació", "MAIL": "Notificaciones per correo", "ASK_DELETE": "Segur que vols borrar?" @@ -844,41 +845,41 @@ "FILTERS": { "TITLE": "Filtres", "INPUT_SEARCH_PLACEHOLDER": "Descripció o ref", - "TITLE_ACTION_SEARCH": "Search", - "ACTION_SAVE_CUSTOM_FILTER": "save as custom filter", - "BREADCRUMB": "Filters", - "TITLE_BREADCRUMB": "Filters", + "TITLE_ACTION_SEARCH": "Busca", + "ACTION_SAVE_CUSTOM_FILTER": "Guarda com a filtre", + "BREADCRUMB": "Filtres", + "TITLE_BREADCRUMB": "Filtres", "CATEGORIES": { - "TYPE": "Type", - "STATUS": "Status", - "SEVERITY": "Severity", - "PRIORITIES": "Priorities", + "TYPE": "Tipus", + "STATUS": "Estatus", + "SEVERITY": "Severitat", + "PRIORITIES": "Prioritats", "TAGS": "Tags", - "ASSIGNED_TO": "Assigned to", - "CREATED_BY": "Created by", - "CUSTOM_FILTERS": "Custom filters" + "ASSIGNED_TO": "Assignat a", + "CREATED_BY": "Creat per", + "CUSTOM_FILTERS": "Filtres personalitzats" }, "CONFIRM_DELETE": { - "TITLE": "Delete custom filter", - "MESSAGE": "the custom filter '{{customFilterName}}'" + "TITLE": "Esborrar filtre", + "MESSAGE": "el filtre '{{customFilterName}}'" } }, "TABLE": { "COLUMNS": { "TYPE": "Tipus", - "SEVERITY": "Severity", - "PRIORITY": "Priority", - "SUBJECT": "Subject", - "STATUS": "Status", - "CREATED": "Created", - "ASSIGNED_TO": "Assigned to" + "SEVERITY": "Severitat", + "PRIORITY": "Prioritat", + "SUBJECT": "Descripció", + "STATUS": "Estatus", + "CREATED": "Creat", + "ASSIGNED_TO": "Assignat a" }, - "TITLE_ACTION_CHANGE_STATUS": "Change status", - "TITLE_ACTION_ASSIGNED_TO": "Assigned to", + "TITLE_ACTION_CHANGE_STATUS": "Canviar estatus", + "TITLE_ACTION_ASSIGNED_TO": "Assignat a", "EMPTY": { - "TITLE": "There are no issues to report :-)", - "SUBTITLE": "Did you find an issue?", - "ACTION_CREATE_ISSUE": "Create a new Issue" + "TITLE": "No hi ha incidències a reportar :-)", + "SUBTITLE": "Has trobat una incidència?", + "ACTION_CREATE_ISSUE": "Crea nova incidència" } } }, @@ -920,12 +921,12 @@ "EXPLANATION_COLUMN_BUG_HUNTER": "Incidència reportada", "COLUMN_NIGHT_SHIFT": "Torn de nit", "EXPLANATION_COLUMN_NIGHT_SHIFT": "Tasques tancades", - "COLUMN_TOTAL_POWER": "Total Power", - "EXPLANATION_COLUMN_TOTAL_POWER": "Total Points", - "SECTION_TITLE_TEAM": "Team >", - "SECTION_FILTER_ALL": "All", - "CONFIRM_LEAVE_PROJECT": "Are you sure you want to leave the project?", - "ACTION_LEAVE_PROJECT": "Leave this project" + "COLUMN_TOTAL_POWER": "Punts totals", + "EXPLANATION_COLUMN_TOTAL_POWER": "Punts totals", + "SECTION_TITLE_TEAM": "Equip >", + "SECTION_FILTER_ALL": "Tot", + "CONFIRM_LEAVE_PROJECT": "Segur que vols deixar el projecte?", + "ACTION_LEAVE_PROJECT": "Abandonar aquest projecte" }, "CHANGE_PASSWORD": { "SECTION_NAME": "Canviar contrasenya", @@ -976,9 +977,9 @@ "FULL_NAME": "Nom complet", "PLACEHOLDER_FULL_NAME": "Esciur el teu nom complet (ex. Íñigo Montoya)", "BIO": "Bio", - "PLACEHOLDER_BIO": "Tell us something about you", - "LANGUAGE": "Language", - "LANGUAGE_DEFAULT": "-- use default language --" + "PLACEHOLDER_BIO": "Contans algo sobre tu mateix", + "LANGUAGE": "Llengua", + "LANGUAGE_DEFAULT": "-- utilizat llengua per defecte --" } }, "WIZARD": { @@ -992,7 +993,7 @@ "WIKI": { "DATETIME": "DD MMM YYYY HH:mm", "PLACEHOLDER_PAGE": "Esciu pàgina del Wiki", - "REMOVE": "Esborar pàgina de Wiki", + "REMOVE": "Esborrar pàgina de Wiki", "DELETE_LIGHTBOX_TITLE": "Esborrar pàgina de Wiki", "NAVIGATION": { "SECTION_NAME": "Enllaços", diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index df6defb9..1b3acf9a 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -33,6 +33,7 @@ "NEW_BULK": "New bulk insert", "RELATED_TASKS": "Related tasks", "LOGOUT": "Logout", + "EXTERNAL_USER": "an external user", "GENERIC_ERROR": "One of our Oompa Loompas says {{error}}.", "IOCAINE_TEXT": "Feeling a bit overwhelmed by a task? Make sure others know about it by clicking on Iocaine when editing a task. It's possible to become immune to this (fictional) deadly poison by consuming small amounts over time just as it's possible to get better at what you do by occasionally taking on extra challenges!", "TAGS": { diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 0d1e5145..2aab9e63 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -33,6 +33,7 @@ "NEW_BULK": "Nueva inserción en bloque", "RELATED_TASKS": "Tareas relacionadas", "LOGOUT": "Cerrar sesión", + "EXTERNAL_USER": "un usuario externo", "GENERIC_ERROR": "Uno de nuestros Oompa Loompas dice {{error}}.", "IOCAINE_TEXT": "¿Te sientes fuera de tu zona de confort en una tarea? Asegúrate de que los demás están al tanto de ello, marca el check de la Iocaína al editar una tarea. Igual eu era posible llegar a ser inmune a este veneno mortal a base de consumir pequeñas dosis a lo largo del tiempo, es posible conseguir mejor en lo que estás haciendo si afrontas de vez en cuando esta clase de retos!", "TAGS": { diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index 2046ba95..3e553d37 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -33,6 +33,7 @@ "NEW_BULK": "Lisää monta", "RELATED_TASKS": "Liittyvät tehtävät", "LOGOUT": "Kirjaudu ulos", + "EXTERNAL_USER": "an external user", "GENERIC_ERROR": "Oompa Loompas havaitsivat virheen {{error}}.", "IOCAINE_TEXT": "Jos tehtävä ahdistaa, merkitse se hidasteeksi.", "TAGS": { diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 17740e12..66869525 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -33,6 +33,7 @@ "NEW_BULK": "Nouvel ajout en bloc", "RELATED_TASKS": "Tâches associées", "LOGOUT": "Déconnexion", + "EXTERNAL_USER": "an external user", "GENERIC_ERROR": "L'un de nos Ooompa Loompas dit {{error}}.", "IOCAINE_TEXT": "Vous vous sentez un peu submergé par une tâche ? Soyez certains d'en informer les autres en cliquant su Iocaine lors de la modification de la tâche. Il est possible de s'immuniser contre ce poison (fictif) en consommant de petites quantités en heures supplémentaires, tout comme il est possible de s'améliorer en acceptant parfois de nouveaux défis !", "TAGS": { diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index 266fe93e..55fa98e3 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -33,6 +33,7 @@ "NEW_BULK": "新批次插入", "RELATED_TASKS": "相關任務 ", "LOGOUT": "登出", + "EXTERNAL_USER": "an external user", "GENERIC_ERROR": "我們的系統指出{{error}}.", "IOCAINE_TEXT": "感到任務的不堪負荷?確認其它人在編輯任務時知道此狀況,可以點選Iocaine。它可能會成為免疫的致命狀況,只要長期小量消耗,但如果你只是偶而挑戰它可有助表現。", "TAGS": { diff --git a/app/partials/issue/issues-detail.jade b/app/partials/issue/issues-detail.jade index c87956c4..e1e780b6 100644 --- a/app/partials/issue/issues-detail.jade +++ b/app/partials/issue/issues-detail.jade @@ -21,7 +21,7 @@ div.wrapper(ng-controller="IssueDetailController as ctrl", span(tg-bo-ref="us.ref") p.external-reference(ng-if="issue.external_reference") - | {{ 'EXTERNAL_REFERENCE'|translate }} + | {{ 'ISSUES.EXTERNAL_REFERENCE'|translate }} a(target="_blank", tg-bo-href="issue.external_reference[1]", title="{{'ISSUES.GO_TO_EXTERNAL_REFERENCE' | translate}}") span {{ issue.external_reference[1] }} diff --git a/scripts/manage_translations.py b/scripts/manage_translations.py index c945c51c..f1751a4f 100644 --- a/scripts/manage_translations.py +++ b/scripts/manage_translations.py @@ -41,9 +41,14 @@ def fetch(resources=None, languages=None): """ Fetch translations from Transifex. """ + for lang, lang_fixed in FIXED_LOCALES.items(): + if os.path.exists("app/locales/locale-{}.json".format(lang_fixed)): + os.rename("app/locales/locale-{}.json".format(lang_fixed), + "app/locales/locale-{}.json".format(lang)) + if not resources: if languages is None: - call("tx pull -a -f --minimum-perc=5", shell=True) + call("tx pull -f --minimum-perc=5", shell=True) else: for lang in languages: call("tx pull -f -l {lang}".format(lang=lang), shell=True) @@ -51,18 +56,17 @@ def fetch(resources=None, languages=None): else: for resource in resources: if languages is None: - call("tx pull -r {res} -a -f --minimum-perc=5".format(res=_tx_resource_for_name(resource)), + call("tx pull -r {res} -f --minimum-perc=5".format(res=_tx_resource_for_name(resource)), shell=True) else: for lang in languages: call("tx pull -r {res} -f -l {lang}".format(res=_tx_resource_for_name(resource), lang=lang), shell=True) - if languages: - for lang in languages: - if lang in FIXED_LOCALES: - os.rename("app/locales/locale-{}.json".format(lang), - "app/locales/locale-{}.json".format(FIXED_LOCALES[lang])) + for lang, lang_fixed in FIXED_LOCALES.items(): + if os.path.exists("app/locales/locale-{}.json".format(lang)): + os.rename("app/locales/locale-{}.json".format(lang), + "app/locales/locale-{}.json".format(lang_fixed)) def commit(resources=None, languages=None): From 3e0c2f60f94efc3b705ca816b8d80556d97f8205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 5 May 2015 17:46:35 +0200 Subject: [PATCH 116/194] [i18] Fix the translation script --- .tx/config | 3 ++- scripts/manage_translations.py | 16 ---------------- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/.tx/config b/.tx/config index 4cf4f302..191c665f 100644 --- a/.tx/config +++ b/.tx/config @@ -1,8 +1,9 @@ [main] host = https://www.transifex.com -lang_map = sr@latin:sr_Latn, zh_CN:zh_Hans, zh_TW:zh_Hant +lang_map = sr@latin:sr-latn, zh-Hans:zh-hans, zh-Hant:zh-hant [taiga-front.locale-enjson] file_filter = app/locales/locale-.json source_file = app/locales/locale-en.json source_lang = en +type = KEYVALUEJSON diff --git a/scripts/manage_translations.py b/scripts/manage_translations.py index f1751a4f..b756efbd 100644 --- a/scripts/manage_translations.py +++ b/scripts/manage_translations.py @@ -26,12 +26,6 @@ from argparse import RawTextHelpFormatter from subprocess import PIPE, Popen, call -FIXED_LOCALES = { - "zh-Hant": "zh-hant", - "zh-Hans": "zh-hans" -} - - def _tx_resource_for_name(name): """ Return the Transifex resource name """ return "taiga-front.{}".format(name) @@ -41,11 +35,6 @@ def fetch(resources=None, languages=None): """ Fetch translations from Transifex. """ - for lang, lang_fixed in FIXED_LOCALES.items(): - if os.path.exists("app/locales/locale-{}.json".format(lang_fixed)): - os.rename("app/locales/locale-{}.json".format(lang_fixed), - "app/locales/locale-{}.json".format(lang)) - if not resources: if languages is None: call("tx pull -f --minimum-perc=5", shell=True) @@ -63,11 +52,6 @@ def fetch(resources=None, languages=None): call("tx pull -r {res} -f -l {lang}".format(res=_tx_resource_for_name(resource), lang=lang), shell=True) - for lang, lang_fixed in FIXED_LOCALES.items(): - if os.path.exists("app/locales/locale-{}.json".format(lang)): - os.rename("app/locales/locale-{}.json".format(lang), - "app/locales/locale-{}.json".format(lang_fixed)) - def commit(resources=None, languages=None): """ From 65ccc059caf18f369204f33b6a5bd086ecd6ecb1 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 5 May 2015 19:53:54 +0200 Subject: [PATCH 117/194] Fixing information disclosure when resetting password --- app/locales/locale-en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 1b3acf9a..9a45683c 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -794,7 +794,7 @@ "PLACEHOLDER_FIELD": "Username or email", "ACTION_RESET_PASSWORD": "Reset Password", "LINK_CANCEL": "Nah, take me back. I think I remember it.", - "SUCCESS": "Check your inbox!
We have sent a mail to
{{email}}
with the instructions to set a new password", + "SUCCESS": "Check your inbox!
We have sent you an email with the instructions to set a new password", "ERROR": "According to our Oompa Loompas, your are not registered yet." }, "LOGIN_COMMON": { From 6d45aa5da21c6de7fbdef0e9c74c95244703ed98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 5 May 2015 17:57:25 +0200 Subject: [PATCH 118/194] [i18n] Update locales --- app/locales/locale-ca.json | 2 +- app/locales/locale-fi.json | 2 +- app/locales/locale-zh-hant.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 249fe21f..3a7e0252 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -33,7 +33,7 @@ "NEW_BULK": "Nova inserció en grup", "RELATED_TASKS": "Tasques relacionades", "LOGOUT": "Logout", - "EXTERNAL_USER": "an external user", + "EXTERNAL_USER": "un usuari extern", "GENERIC_ERROR": "Un Oompa Loompas diu {{error}}.", "IOCAINE_TEXT": "Un poc saturat per una tasca? Fes-ho saber als teus companys clicant a Iocaina quan edites la tasca. Es possible ser inmune a aquesta (fictícia) poció mortal consumint xicotetes dòsis poc a poc, així com es possible millorar amb xicotets nous desafiaments!", "TAGS": { diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index 3e553d37..28a68210 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -33,7 +33,7 @@ "NEW_BULK": "Lisää monta", "RELATED_TASKS": "Liittyvät tehtävät", "LOGOUT": "Kirjaudu ulos", - "EXTERNAL_USER": "an external user", + "EXTERNAL_USER": "ulkoinen käyttäjä", "GENERIC_ERROR": "Oompa Loompas havaitsivat virheen {{error}}.", "IOCAINE_TEXT": "Jos tehtävä ahdistaa, merkitse se hidasteeksi.", "TAGS": { diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index 55fa98e3..1ea6e096 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -33,7 +33,7 @@ "NEW_BULK": "新批次插入", "RELATED_TASKS": "相關任務 ", "LOGOUT": "登出", - "EXTERNAL_USER": "an external user", + "EXTERNAL_USER": "外部使用者", "GENERIC_ERROR": "我們的系統指出{{error}}.", "IOCAINE_TEXT": "感到任務的不堪負荷?確認其它人在編輯任務時知道此狀況,可以點選Iocaine。它可能會成為免疫的致命狀況,只要長期小量消耗,但如果你只是偶而挑戰它可有助表現。", "TAGS": { From 0b36a223b3e5bc8d0e031f4be87b58667faaf161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 5 May 2015 20:25:15 +0200 Subject: [PATCH 119/194] [i18n] Minor fix --- app/coffee/modules/admin/project-profile.coffee | 2 +- app/partials/project/projects.jade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/coffee/modules/admin/project-profile.coffee b/app/coffee/modules/admin/project-profile.coffee index ffbb97f0..64c00614 100644 --- a/app/coffee/modules/admin/project-profile.coffee +++ b/app/coffee/modules/admin/project-profile.coffee @@ -64,7 +64,7 @@ class ProjectProfileController extends mixOf(taiga.Controller, taiga.PageMixin) promise.then null, @.onInitialDataError.bind(@) @scope.$on "project:loaded", => - sectionName = @translate.instant( @scope.sectionName) + sectionName = @translate.instant(@scope.sectionName) appTitle = @translate.instant("ADMIN.PROJECT_PROFILE.PAGE_TITLE", {sectionName: sectionName, projectName: @scope.project.name}) @appTitle.set(appTitle) diff --git a/app/partials/project/projects.jade b/app/partials/project/projects.jade index d43133a6..2eb47170 100644 --- a/app/partials/project/projects.jade +++ b/app/partials/project/projects.jade @@ -29,6 +29,6 @@ div.home-projects-list(ng-controller="ProjectsController as ctrl") a.button-green.create-project-button(href="", ng-click="ctrl.newProject()", title="{{'PROJECT.NAVIGATION.ACTION_CREATE_PROJECT' | translate}}") span(translate="PROJECT.NAVIGATION.ACTION_CREATE_PROJECT") div(tg-import-project-button) - a.button-blackish.import-project-button(href="", title="{{'PROJECT.TITLE_ACTION_IMPORT' | translate}}") + a.button-blackish.import-project-button(href="", title="{{'PROJECT.NAVIGATION.TITLE_ACTION_IMPORT' | translate}}") span.icon.icon-upload input.import-file.hidden(type="file") From ce352fa5e384270db8e99e318c340320333fa8a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 5 May 2015 20:29:31 +0200 Subject: [PATCH 120/194] Minor fix to #65ccc05 - Fixing information disclosure when resetting password --- app/coffee/modules/auth.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index adf2f498..e70207b6 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -272,7 +272,7 @@ ForgotPasswordDirective = ($auth, $confirm, $location, $navUrls, $translate) -> onSuccessSubmit = (response) -> $location.path($navUrls.resolve("login")) - text = $translate.instant("FORGOT_PASSWORD_FORM.SUCCESS", {email: response.data.email}) + text = $translate.instant("FORGOT_PASSWORD_FORM.SUCCESS") $confirm.success(text) onErrorSubmit = (response) -> From 670121a7529c13f2d655181b6361171bf9cfe86b Mon Sep 17 00:00:00 2001 From: Andrea Stagi Date: Wed, 6 May 2015 08:28:02 +0200 Subject: [PATCH 121/194] Do not hide issues on status change if no filter is active --- app/coffee/modules/issues/list.coffee | 30 ++++++++++++++++----------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index a0063ccb..2e30edbe 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -714,22 +714,28 @@ IssueStatusInlineEditionDirective = ($repo, $template, $rootscope) -> updateIssueStatus($el, issue, $scope.issueStatusById) $scope.$apply () -> - $repo.save(issue).then + $repo.save(issue).then -> - for filter in $scope.filters.statuses - if filter.id == issue.status - filter.count++ - $rootscope.$broadcast("filters:issueupdate", $scope.filters) + for filter in $scope.filters.statuses + if filter.id == issue.status + filter.count++ - hideIssue = true + $rootscope.$broadcast("filters:issueupdate", $scope.filters) - for filter in $scope.filters.statuses - if filter.selected == true && filter.id == issue.status - hideIssue = false - break + filtering = false - if hideIssue == true - $scope.issues.splice($scope.issues.indexOf(issue), 1) + for filter in $scope.filters.statuses + if filter.selected == true + filtering = true + if filter.id == issue.status + return + + if not filtering + return + + for el, i in $scope.issues + if el and el.id == issue.id + $scope.issues.splice(i, 1) taiga.bindOnce $scope, "project", (project) -> $el.append(selectionTemplate({ 'statuses': project.issue_statuses })) From a2002c1acf68735a983628a65688bd1a914d17e2 Mon Sep 17 00:00:00 2001 From: Andrea Stagi Date: Wed, 6 May 2015 08:30:38 +0200 Subject: [PATCH 122/194] Fix links bug on loading issue page with query parameter --- app/coffee/modules/issues/list.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index a0063ccb..85f4f282 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -544,7 +544,7 @@ IssuesFiltersDirective = ($log, $location, $rs, $confirm, $loading, $template, $ selectQFilter = debounceLeading 100, (value) -> return if value is undefined - $ctrl.replaceFilter("page", null) + $ctrl.replaceFilter("page", null, true) if value.length == 0 $ctrl.replaceFilter("q", null) From 6b1293da3e64fd74dbb9d765d3c877a39cac2027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 6 May 2015 11:44:46 +0200 Subject: [PATCH 123/194] [i18n] Fix translations in reports section --- .../modules/admin/project-profile.coffee | 30 ++++++++++++------- app/locales/locale-en.json | 23 +++++++------- app/partials/admin/admin-project-reports.jade | 5 ++-- app/partials/admin/project-csv.jade | 16 ++++++---- 4 files changed, 43 insertions(+), 31 deletions(-) diff --git a/app/coffee/modules/admin/project-profile.coffee b/app/coffee/modules/admin/project-profile.coffee index 64c00614..a002d344 100644 --- a/app/coffee/modules/admin/project-profile.coffee +++ b/app/coffee/modules/admin/project-profile.coffee @@ -58,14 +58,16 @@ class ProjectProfileController extends mixOf(taiga.Controller, taiga.PageMixin) promise.then => sectionName = @translate.instant( @scope.sectionName) - appTitle = @translate.instant("ADMIN.PROJECT_PROFILE.PAGE_TITLE", {sectionName: sectionName, projectName: @scope.project.name}) + appTitle = @translate.instant("ADMIN.PROJECT_PROFILE.PAGE_TITLE", { + sectionName: sectionName, projectName: @scope.project.name}) @appTitle.set(appTitle) promise.then null, @.onInitialDataError.bind(@) @scope.$on "project:loaded", => sectionName = @translate.instant(@scope.sectionName) - appTitle = @translate.instant("ADMIN.PROJECT_PROFILE.PAGE_TITLE", {sectionName: sectionName, projectName: @scope.project.name}) + appTitle = @translate.instant("ADMIN.PROJECT_PROFILE.PAGE_TITLE", { + sectionName: sectionName, projectName: @scope.project.name}) @appTitle.set(appTitle) loadProject: -> @@ -131,7 +133,8 @@ ProjectProfileDirective = ($repo, $confirm, $loading, $navurls, $location) -> return {link:link} -module.directive("tgProjectProfile", ["$tgRepo", "$tgConfirm", "$tgLoading", "$tgNavUrls", "$tgLocation", ProjectProfileDirective]) +module.directive("tgProjectProfile", ["$tgRepo", "$tgConfirm", "$tgLoading", "$tgNavUrls", "$tgLocation", + ProjectProfileDirective]) ############################################################################# ## Project Default Values Directive @@ -167,7 +170,8 @@ ProjectDefaultValuesDirective = ($repo, $confirm, $loading) -> return {link:link} -module.directive("tgProjectDefaultValues", ["$tgRepo", "$tgConfirm", "$tgLoading", ProjectDefaultValuesDirective]) +module.directive("tgProjectDefaultValues", ["$tgRepo", "$tgConfirm", "$tgLoading", + ProjectDefaultValuesDirective]) ############################################################################# ## Project Modules Directive @@ -243,7 +247,8 @@ ProjectExportDirective = ($window, $rs, $confirm, $translate) -> loading_msg = $translate.instant("ADMIN.PROJECT_EXPORT.LOADING_MESSAGE") dump_ready_text = -> resultTitleEl.html($translate.instant("ADMIN.PROJECT_EXPORT.DUMP_READY")) asyn_message = -> resultTitleEl.html($translate.instant("ADMIN.PROJECT_EXPORT.ASYN_MESSAGE")) - syn_message = (url) -> resultTitleEl.html($translate.instant("ADMIN.PROJECT_EXPORT.SYNC_MESSAGE", {url: url})) + syn_message = (url) -> resultTitleEl.html($translate.instant("ADMIN.PROJECT_EXPORT.SYNC_MESSAGE", { + url: url})) setLoadingTitle = -> resultTitleEl.html(loading_title) setAsyncTitle = -> resultTitleEl.html(loading_msg) @@ -295,7 +300,8 @@ ProjectExportDirective = ($window, $rs, $confirm, $translate) -> if result.status == 429 # TOO MANY REQUESTS errorMsg = $translate.instant("ADMIN.PROJECT_EXPORT.ERROR_BUSY") else if result.data?._error_message - errorMsg = $translate.instant("ADMIN.PROJECT_EXPORT.ERROR_BUSY", {message: result.data._error_message}) + errorMsg = $translate.instant("ADMIN.PROJECT_EXPORT.ERROR_BUSY", { + message: result.data._error_message}) $confirm.notify("error", errorMsg) @@ -304,7 +310,8 @@ ProjectExportDirective = ($window, $rs, $confirm, $translate) -> return {link:link} -module.directive("tgProjectExport", ["$window", "$tgResources", "$tgConfirm", "$translate", ProjectExportDirective]) +module.directive("tgProjectExport", ["$window", "$tgResources", "$tgConfirm", "$translate", + ProjectExportDirective]) ############################################################################# @@ -372,14 +379,13 @@ module.controller("CsvExporterTasksController", CsvExporterTasksController) module.controller("CsvExporterIssuesController", CsvExporterIssuesController) - ############################################################################# ## CSV Directive ############################################################################# CsvUsDirective = ($translate) -> link = ($scope) -> - $scope.csvType = $translate.instant("ADMIN.REPORTS.CSV_TYPE_USS") + $scope.sectionTitle = "ADMIN.CSV.SECTION_TITLE_US" return { controller: "CsvExporterUserstoriesController", @@ -390,9 +396,10 @@ CsvUsDirective = ($translate) -> module.directive("tgCsvUs", ["$translate", CsvUsDirective]) + CsvTaskDirective = ($translate) -> link = ($scope) -> - $scope.csvType = $translate.instant("ADMIN.REPORTS.CSV_TYPE_TASKS") + $scope.sectionTitle = "ADMIN.CSV.SECTION_TITLE_TASK" return { controller: "CsvExporterTasksController", @@ -403,9 +410,10 @@ CsvTaskDirective = ($translate) -> module.directive("tgCsvTask", ["$translate", CsvTaskDirective]) + CsvIssueDirective = ($translate) -> link = ($scope) -> - $scope.csvType = $translate.instant("ADMIN.REPORTS.CSV_TYPE_ISSUES") + $scope.sectionTitle = "ADMIN.CSV.SECTION_TITLE_ISSUE" return { controller: "CsvExporterIssuesController", diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 9a45683c..8ed6e8b6 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -260,10 +260,17 @@ "DESCRIPTION": "Download a CSV file or copy the generated URL and open it in your favourite text editor or spreadsheet to make your own project data reports. You will be able to visualize and analize all your data easily.", "HELP": "How to use this on my own spreadsheet?", "REGENERATE_TITLE": "Change URL", - "REGENERATE_SUBTITLE": "You going to change the CSV data access url. The previous url will be disabled. Are you sure?", - "CSV_TYPE_US": "user stories", - "CSV_TYPE_TASK": "tasks", - "CSV_TYPE_ISSUE": "issues" + "REGENERATE_SUBTITLE": "You going to change the CSV data access url. The previous url will be disabled. Are you sure?" + }, + "CSV": { + "SECTION_TITLE_US": "user stories reports", + "SECTION_TITLE_TASK": "tasks reports", + "SECTION_TITLE_ISSUE": "issues reports", + "DOWNLOAD": "Download CSV", + "URL_FIELD_PLACEHOLDER": "Please regenerate CSV url", + "TITLE_REGENERATE_URL": "Regenerate CSV url", + "ACTION_GENERATE_URL": "Generate Url", + "ACTION_REGENERATE": "Regenerate" }, "CUSTOM_FIELDS": { "TITLE": "Custom Fields", @@ -396,14 +403,6 @@ "LABEL_ISSUE_TYPE": "Default value for issue type selector", "LABEL_ISSUE_STATUS": "Default value for issue status selector" }, - "CSV": { - "TITLE": "{{csvType}} reports", - "DOWNLOAD": "Download CSV", - "URL_FIELD_PLACEHOLDER": "Please regenerate CSV url", - "TITLE_REGENERATE_URL": "Regenerate CSV url", - "ACTION_GENERATE_URL": "Generate Url", - "ACTION_REGENERATE": "Regenerate" - }, "STATUS": { "PLACEHOLDER_WRITE_STATUS_NAME": "Write a name for the new status" }, diff --git a/app/partials/admin/admin-project-reports.jade b/app/partials/admin/admin-project-reports.jade index 7575d0cd..a4dffd1f 100644 --- a/app/partials/admin/admin-project-reports.jade +++ b/app/partials/admin/admin-project-reports.jade @@ -17,8 +17,9 @@ div.wrapper(ng-controller="ProjectProfileController as ctrl", div.admin-attributes-section(tg-csv-us) div.admin-attributes-section(tg-csv-task) - div.admin-attributes-section - div(tg-csv-issue) + div.admin-attributes-section(tg-csv-issue) + + div a.help-button(href="https://taiga.io/support/csv-reports/", target="_blank") span.icon.icon-help span(translate="ADMIN.REPORTS.HELP") diff --git a/app/partials/admin/project-csv.jade b/app/partials/admin/project-csv.jade index 15b7639e..8e709dd9 100644 --- a/app/partials/admin/project-csv.jade +++ b/app/partials/admin/project-csv.jade @@ -1,16 +1,20 @@ section.project-csv(tg-select-input-text) div.project-values-title - h2(translate="ADMIN.CSV.TITLE", translate-values='{ csvType: csvType}') - a.button.button-gray(title="{{'ADMIN.CSV.DOWNLOAD' | translate}}", ng-href="{{csvUrl}}", ng-show="csvUrl", target="_blank") + h2(translate="{{::sectionTitle}}") + a.button.button-gray(title="{{'ADMIN.CSV.DOWNLOAD' | translate}}", + ng-href="{{csvUrl}}", ng-show="csvUrl", target="_blank") span(translate="ADMIN.CSV.DOWNLOAD") div.csv-regenerate-field - .field-with-options - input(type="text", placeholder="{{'ADMIN.CSV.URL_FIELD_PLACEHOLDER' | translate}}", readonly, ng-model="csvUrl") - .option-wrapper.select-input-content - .icon.icon-copy + div.field-with-options + input(type="text", placeholder="{{'ADMIN.CSV.URL_FIELD_PLACEHOLDER' | translate}}", + readonly, ng-model="csvUrl") + div.option-wrapper.select-input-content + div.icon.icon-copy + a(href="", title="{{'ADMIN.CSV.TITLE_REGENERATE_URL' | translate}}", ng-click="ctrl.regenerateUuid()") span.icon.icon-plus(ng-hide="csvUrl") span(ng-hide="csvUrl", translate="ADMIN.CSV.ACTION_GENERATE_URL") + span.icon.icon-reload(ng-Show="csvUrl") span(ng-Show="csvUrl", translate="ADMIN.CSV.ACTION_REGENERATE") From eb8ab0d510da99482c9e52066ef6c8b15c227a08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 6 May 2015 12:20:42 +0200 Subject: [PATCH 124/194] Fix report section --- app/coffee/modules/admin/project-profile.coffee | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/coffee/modules/admin/project-profile.coffee b/app/coffee/modules/admin/project-profile.coffee index a002d344..31d6b117 100644 --- a/app/coffee/modules/admin/project-profile.coffee +++ b/app/coffee/modules/admin/project-profile.coffee @@ -389,6 +389,7 @@ CsvUsDirective = ($translate) -> return { controller: "CsvExporterUserstoriesController", + controllerAs: "ctrl", templateUrl: "admin/project-csv.html", link: link, scope: true @@ -403,6 +404,7 @@ CsvTaskDirective = ($translate) -> return { controller: "CsvExporterTasksController", + controllerAs: "ctrl", templateUrl: "admin/project-csv.html", link: link, scope: true @@ -417,6 +419,7 @@ CsvIssueDirective = ($translate) -> return { controller: "CsvExporterIssuesController", + controllerAs: "ctrl", templateUrl: "admin/project-csv.html", link: link, scope: true From b32c353df7c23a0f4a2e809a827415d0d273a397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 6 May 2015 14:35:37 +0200 Subject: [PATCH 125/194] [i18n] Update locales --- app/locales/locale-ca.json | 25 ++++++++++++------------- app/locales/locale-es.json | 27 +++++++++++++-------------- app/locales/locale-fi.json | 25 ++++++++++++------------- app/locales/locale-fr.json | 25 ++++++++++++------------- app/locales/locale-zh-hant.json | 23 +++++++++++------------ 5 files changed, 60 insertions(+), 65 deletions(-) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 3a7e0252..2c800f8d 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -260,10 +260,17 @@ "DESCRIPTION": "Descarrega el fitxer CSV o copia la URL generada o obri-la amb el teu editor de text o fulla de càlcul per a fer els teus propis informes. Podràs visualitzar i analitzar les dades fàcilment.", "HELP": "Com utilitzar açó a la meu fulla de càlcul?", "REGENERATE_TITLE": "Canviar URL", - "REGENERATE_SUBTITLE": "Vas a canviar la URL d'accés al CSV. La URL previa no funcionarà. Estàs segur?", - "CSV_TYPE_US": "Històries d'usuari", - "CSV_TYPE_TASK": "tasques", - "CSV_TYPE_ISSUE": "incidències" + "REGENERATE_SUBTITLE": "Vas a canviar la URL d'accés al CSV. La URL previa no funcionarà. Estàs segur?" + }, + "CSV": { + "SECTION_TITLE_US": "user stories reports", + "SECTION_TITLE_TASK": "tasks reports", + "SECTION_TITLE_ISSUE": "issues reports", + "DOWNLOAD": "Descarrega el CSV", + "URL_FIELD_PLACEHOLDER": "Per favor regenera la url del CSV", + "TITLE_REGENERATE_URL": "Regenera l'Url del CSV", + "ACTION_GENERATE_URL": "Genera URL", + "ACTION_REGENERATE": "Regenerar" }, "CUSTOM_FIELDS": { "TITLE": "Camps personalitzats", @@ -396,14 +403,6 @@ "LABEL_ISSUE_TYPE": "Valor per defecte per a selector de tipus", "LABEL_ISSUE_STATUS": "Valor per defecte per a selector de estatus" }, - "CSV": { - "TITLE": "{{csvType}} informes", - "DOWNLOAD": "Descarrega el CSV", - "URL_FIELD_PLACEHOLDER": "Per favor regenera la url del CSV", - "TITLE_REGENERATE_URL": "Regenera l'Url del CSV", - "ACTION_GENERATE_URL": "Genera URL", - "ACTION_REGENERATE": "Regenerar" - }, "STATUS": { "PLACEHOLDER_WRITE_STATUS_NAME": "Escriu un nom per a nou estatus" }, @@ -793,7 +792,7 @@ "PLACEHOLDER_FIELD": "Mot d'usuari i correu", "ACTION_RESET_PASSWORD": "Resetejar contrasenya", "LINK_CANCEL": "No, portam enrere, crec que ho recorde.", - "SUCCESS": "Mira el teu correu!
Hem enviat un correu a
{{email}}
amb les instrucciones per a setejar una nova contrasenya.", + "SUCCESS": "Check your inbox!
We have sent you an email with the instructions to set a new password", "ERROR": "Segons els nostres Oompa Loompas, no estàs registrat encara." }, "LOGIN_COMMON": { diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 2aab9e63..31ceb5fb 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -260,10 +260,17 @@ "DESCRIPTION": "Descarga el fichero CSV o copia la URL generada y abre tu editor de textos o hoja de cálculo favorito para realizar tus propios informes. Podrás visualizar y analizar todos los datos fácilmente.", "HELP": "¿Cómo puedo usar esto en mi hoja de cálculo?", "REGENERATE_TITLE": "Cambiar URL", - "REGENERATE_SUBTITLE": "Vas a cambiar la url de acceso a los datos en formato CSV. La url anterior se deshabilitará. ¿Estás seguro?", - "CSV_TYPE_US": "historias de usuario", - "CSV_TYPE_TASK": "tareaas", - "CSV_TYPE_ISSUE": "peticiones" + "REGENERATE_SUBTITLE": "Vas a cambiar la url de acceso a los datos en formato CSV. La url anterior se deshabilitará. ¿Estás seguro?" + }, + "CSV": { + "SECTION_TITLE_US": "informes de historias de usuario", + "SECTION_TITLE_TASK": "Informes de tareas", + "SECTION_TITLE_ISSUE": "informes de peticiones", + "DOWNLOAD": "Descargar el CSV", + "URL_FIELD_PLACEHOLDER": "Por favor regenera la url del origen CSV", + "TITLE_REGENERATE_URL": "Regenerar url de origen CSV", + "ACTION_GENERATE_URL": "Generar Url", + "ACTION_REGENERATE": "Regenerar" }, "CUSTOM_FIELDS": { "TITLE": "Atributos personalizados", @@ -396,14 +403,6 @@ "LABEL_ISSUE_TYPE": "Valor por defecto para el selector de tipo de la petición", "LABEL_ISSUE_STATUS": "Valor por defecto para el selector de estado de petición" }, - "CSV": { - "TITLE": "Informes de {{csvType}}", - "DOWNLOAD": "Descargar el CSV", - "URL_FIELD_PLACEHOLDER": "Por favor regenera la url del origen CSV", - "TITLE_REGENERATE_URL": "Regenerar url de origen CSV", - "ACTION_GENERATE_URL": "Generar Url", - "ACTION_REGENERATE": "Regenerar" - }, "STATUS": { "PLACEHOLDER_WRITE_STATUS_NAME": "Escribe un nombre para el nuevo estado" }, @@ -592,7 +591,7 @@ "DELETED_ATTACHMENT": "adjunto eliminado", "UPDATED_ATTACHMENT": "Adjunto {{filename}} actualizado", "DELETED_CUSTOM_ATTRIBUTE": "eliminar atributos personalizados", - "SIZE_CHANGE": "{size, plural, one{Un cambio} other{# cambios}} realizados\n", + "SIZE_CHANGE": "{size, plural, one{Un cambio realizado} other{# cambios realizados}}", "VALUES": { "YES": "sí", "NO": "no", @@ -793,7 +792,7 @@ "PLACEHOLDER_FIELD": "Nombre de usuario o email", "ACTION_RESET_PASSWORD": "Restablecer Contraseña", "LINK_CANCEL": "Nah, llévame de vuelta, creo que lo recordé.", - "SUCCESS": "¡Revisa tu bandeja de entrada!
Te hemos enviado un mail a
{{email}}
con las instrucciones necesarias para restablecer tu contraseña\n", + "SUCCESS": "¡Revisa tu bandeja de entrada!
Te hemos enviado un mail con las instrucciones necesarias para restablecer tu contraseña\n", "ERROR": "De acuerdo a nuestros Oompa Loompas, Usted no se encuentra registrado todavía." }, "LOGIN_COMMON": { diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index 28a68210..827e11a2 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -260,10 +260,17 @@ "DESCRIPTION": "Lataa CSV-tiedosto tai luo URL ja avaa haluamassasi ohjelmassa. Voit visualisoida ja analysoida tietoa helposti.", "HELP": "Kuinka tätä käytetään omassa taulukossani?", "REGENERATE_TITLE": "Vaihda URL", - "REGENERATE_SUBTITLE": "Jos muutata CSV-datan URLia, edellien lakkaa toimimasta. Oletko varma?", - "CSV_TYPE_US": "käyttäjätarinat", - "CSV_TYPE_TASK": "tehtävät", - "CSV_TYPE_ISSUE": "pyynnöt" + "REGENERATE_SUBTITLE": "Jos muutata CSV-datan URLia, edellien lakkaa toimimasta. Oletko varma?" + }, + "CSV": { + "SECTION_TITLE_US": "user stories reports", + "SECTION_TITLE_TASK": "tasks reports", + "SECTION_TITLE_ISSUE": "issues reports", + "DOWNLOAD": "Lataa CSV-tiedosto", + "URL_FIELD_PLACEHOLDER": "Tee uusi CSV-url", + "TITLE_REGENERATE_URL": "Tee uusi CSV-url", + "ACTION_GENERATE_URL": "Luo URL", + "ACTION_REGENERATE": "Tee uusi" }, "CUSTOM_FIELDS": { "TITLE": "Omat kentät", @@ -396,14 +403,6 @@ "LABEL_ISSUE_TYPE": "Oletusarvo pyynnön tyypin valintaan", "LABEL_ISSUE_STATUS": "Oletusarvo pyyntöjen statuksen valintaan" }, - "CSV": { - "TITLE": "{{csvType}} raportit", - "DOWNLOAD": "Lataa CSV-tiedosto", - "URL_FIELD_PLACEHOLDER": "Tee uusi CSV-url", - "TITLE_REGENERATE_URL": "Tee uusi CSV-url", - "ACTION_GENERATE_URL": "Luo URL", - "ACTION_REGENERATE": "Tee uusi" - }, "STATUS": { "PLACEHOLDER_WRITE_STATUS_NAME": "Anna uuden tilan nimi" }, @@ -793,7 +792,7 @@ "PLACEHOLDER_FIELD": "Käyttäjänimi tai sähköposti", "ACTION_RESET_PASSWORD": "Uusi salsanasi", "LINK_CANCEL": "Vie minut takaisin, muistan sen.", - "SUCCESS": "Tarkista sähköpostisi
Lähetimme ohjeet
{{email}}
uuden salasanan asettamiseen", + "SUCCESS": "Check your inbox!
We have sent you an email with the instructions to set a new password", "ERROR": "Oompa Loompas sanovat että käyttäjänimesi tai sähköpostisi tai salasanasi on väärä." }, "LOGIN_COMMON": { diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 66869525..a6911c7d 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -260,10 +260,17 @@ "DESCRIPTION": "Téléchargez un fichier CSV ou copiez l'URL générée et ouvrez-là dans votre éditeur de texte ou feuille de calcul favorite pour créer vos propres rapports de projet. Vous pourrez visualiser et analyser toutes vos données facilement.", "HELP": "Comment utiliser ceci dans ma propre feuille de calcul?", "REGENERATE_TITLE": "Changer l'URL", - "REGENERATE_SUBTITLE": "Vous êtes sur le point de changer l'url d'accès aux données CSV. L'url précédente sera désactivée. Etes-vous sûre ?", - "CSV_TYPE_US": "histoires utilisateur", - "CSV_TYPE_TASK": "tâches", - "CSV_TYPE_ISSUE": "problèmes" + "REGENERATE_SUBTITLE": "Vous êtes sur le point de changer l'url d'accès aux données CSV. L'url précédente sera désactivée. Etes-vous sûre ?" + }, + "CSV": { + "SECTION_TITLE_US": "user stories reports", + "SECTION_TITLE_TASK": "tasks reports", + "SECTION_TITLE_ISSUE": "issues reports", + "DOWNLOAD": "Télécharger au format CSV", + "URL_FIELD_PLACEHOLDER": "Merci de regénérer l'url de téléchargement au format CSV", + "TITLE_REGENERATE_URL": "Regénérer l'URL du CSV", + "ACTION_GENERATE_URL": "Générer l'URL", + "ACTION_REGENERATE": "Regénérer" }, "CUSTOM_FIELDS": { "TITLE": "Champs Personnalisés", @@ -396,14 +403,6 @@ "LABEL_ISSUE_TYPE": "Valeur par défaut pour le sélecteur de type", "LABEL_ISSUE_STATUS": "Valeur par défaut pour le sélecteur de statut de bug" }, - "CSV": { - "TITLE": "rapports {{csvType}}", - "DOWNLOAD": "Télécharger au format CSV", - "URL_FIELD_PLACEHOLDER": "Merci de regénérer l'url de téléchargement au format CSV", - "TITLE_REGENERATE_URL": "Regénérer l'URL du CSV", - "ACTION_GENERATE_URL": "Générer l'URL", - "ACTION_REGENERATE": "Regénérer" - }, "STATUS": { "PLACEHOLDER_WRITE_STATUS_NAME": "Entrez le nom du nouvel état" }, @@ -793,7 +792,7 @@ "PLACEHOLDER_FIELD": "Nom d'utilisateur ou email", "ACTION_RESET_PASSWORD": "Réinitialiser le mot de passe", "LINK_CANCEL": "Nan, ramenez-moi en arrière. Je crois que je m'en rappelle.", - "SUCCESS": "Consultez votre messagerie!
Nous venons d'envoyer un mail à
{{email}}
avec les instructions pour créer un nouveau mot de passe", + "SUCCESS": "Consultez votre messagerie!
Nous venons d'envoyer un mail avec les instructions pour créer un nouveau mot de passe", "ERROR": "Selon nos Oompa Loompas, vous n'êtes pas encore enregistré." }, "LOGIN_COMMON": { diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index 1ea6e096..243d9d23 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -260,10 +260,17 @@ "DESCRIPTION": "下載CSV檔案或是複製這個生成的網址到你愛用的文字編輯器或電子表格上製作自己的專案檔案資料報告。你可能輕易地視覺化或分析這些資料。", "HELP": "使用者故事預設欄位", "REGENERATE_TITLE": "改變網址", - "REGENERATE_SUBTITLE": "你將要改變CSV資料的連結網址,之前的網址將失效。你確定要這樣做嗎?", - "CSV_TYPE_US": "使用者故事", - "CSV_TYPE_TASK": "任務 ", - "CSV_TYPE_ISSUE": "問題 " + "REGENERATE_SUBTITLE": "你將要改變CSV資料的連結網址,之前的網址將失效。你確定要這樣做嗎?" + }, + "CSV": { + "SECTION_TITLE_US": "user stories reports", + "SECTION_TITLE_TASK": "tasks reports", + "SECTION_TITLE_ISSUE": "issues reports", + "DOWNLOAD": "下戴CSV檔案", + "URL_FIELD_PLACEHOLDER": "再次產生CSV 網址", + "TITLE_REGENERATE_URL": "再次產生CSV 網址", + "ACTION_GENERATE_URL": "產生網址", + "ACTION_REGENERATE": "再次產生" }, "CUSTOM_FIELDS": { "TITLE": "客製化欄位", @@ -396,14 +403,6 @@ "LABEL_ISSUE_TYPE": "問題類型選擇器預設值", "LABEL_ISSUE_STATUS": "問題狀態選擇器預設值" }, - "CSV": { - "TITLE": "{{csvType}} 報告", - "DOWNLOAD": "下戴CSV檔案", - "URL_FIELD_PLACEHOLDER": "再次產生CSV 網址", - "TITLE_REGENERATE_URL": "再次產生CSV 網址", - "ACTION_GENERATE_URL": "產生網址", - "ACTION_REGENERATE": "再次產生" - }, "STATUS": { "PLACEHOLDER_WRITE_STATUS_NAME": "為此新狀態命名" }, From bcbca6625ab894135c806e6971bdfc6ac35cc53a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 7 May 2015 12:33:57 +0200 Subject: [PATCH 126/194] [i18n] Update locales --- app/locales/locale-zh-hant.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index 243d9d23..38df8d4f 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -263,9 +263,9 @@ "REGENERATE_SUBTITLE": "你將要改變CSV資料的連結網址,之前的網址將失效。你確定要這樣做嗎?" }, "CSV": { - "SECTION_TITLE_US": "user stories reports", - "SECTION_TITLE_TASK": "tasks reports", - "SECTION_TITLE_ISSUE": "issues reports", + "SECTION_TITLE_US": "使用者故事報告", + "SECTION_TITLE_TASK": "任務報告", + "SECTION_TITLE_ISSUE": "問題報告", "DOWNLOAD": "下戴CSV檔案", "URL_FIELD_PLACEHOLDER": "再次產生CSV 網址", "TITLE_REGENERATE_URL": "再次產生CSV 網址", From 57a3c21cbff2cb7e333ed54bb183d684294ffb15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Tue, 5 May 2015 09:40:11 +0200 Subject: [PATCH 127/194] Add responsive behavior for very small screens --- app/styles/dependencies/responsive.scss | 23 +++++++++++---------- app/styles/modules/issues/issues-table.scss | 15 ++++++++++++++ 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/app/styles/dependencies/responsive.scss b/app/styles/dependencies/responsive.scss index 69c4ecc7..94218c7f 100644 --- a/app/styles/dependencies/responsive.scss +++ b/app/styles/dependencies/responsive.scss @@ -2,17 +2,18 @@ // - I know, I know, but look it closer, it makes sense // - Oh, I see. It's ok for this time... -$break-small: 320px; -$break-large: 1024px; +@mixin breakpoint($point) { + @if $point == desktop { + @media (min-width: 1200px) { @content ; } + } + @else if $point == laptop { + @media (max-width: 1200px) { @content ; } + } + @else if $point == tablet { + @media (max-width: 767px) { @content ; } + } + @else if $point == mobileonly { + @media (max-width: 480px) { @content ; } -@mixin respond-to($media) { - @if $media == handhelds { - @media only screen and (max-width: $break-small) { @content; } - } - @if $media == medium-screens { - @media only screen and (min-width: $break-small + 1) and (max-width: $break-large - 1) { @content; } - } - @if $media == wide-screens { - @media only screen and (min-width: $break-large) { @content; } } } diff --git a/app/styles/modules/issues/issues-table.scss b/app/styles/modules/issues/issues-table.scss index 9ff1a1fc..22a4a2ec 100644 --- a/app/styles/modules/issues/issues-table.scss +++ b/app/styles/modules/issues/issues-table.scss @@ -111,4 +111,19 @@ top: auto; } } + .level-field, + .created-field { + @include breakpoint(laptop) { + display: none; + } + } + .level-field, + .created-field, + .assigned-field { + @include breakpoint(tablet) { + display: none; + } + } } + + From 7fa4d814a271c98c2f12cfeec7b151d0d3dca202 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Fri, 24 Apr 2015 08:16:22 +0200 Subject: [PATCH 128/194] Adding tag support for projects --- app/coffee/modules/admin/project-profile.coffee | 12 +++++++++++- app/coffee/modules/common/tags.coffee | 9 ++++++--- app/locales/locale-en.json | 3 ++- app/partials/admin/admin-project-profile.jade | 4 ++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/app/coffee/modules/admin/project-profile.coffee b/app/coffee/modules/admin/project-profile.coffee index ffbb97f0..5f36c546 100644 --- a/app/coffee/modules/admin/project-profile.coffee +++ b/app/coffee/modules/admin/project-profile.coffee @@ -84,12 +84,22 @@ class ProjectProfileController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.$emit('project:loaded', project) return project + loadTagsColors: -> + return @rs.projects.tagsColors(@scope.projectId).then (tags_colors) => + @scope.project.tags_colors = tags_colors + + loadProjectProfile: -> + return @q.all([ + @.loadProject(), + @.loadTagsColors() + ]) + loadInitialData: -> promise = @repo.resolve({pslug: @params.pslug}).then (data) => @scope.projectId = data.project return data - return promise.then(=> @.loadProject()) + return promise.then(=> @.loadProjectProfile()) openDeleteLightbox: -> @rootscope.$broadcast("deletelightbox:new", @scope.project) diff --git a/app/coffee/modules/common/tags.coffee b/app/coffee/modules/common/tags.coffee index a4c68d41..e915fd84 100644 --- a/app/coffee/modules/common/tags.coffee +++ b/app/coffee/modules/common/tags.coffee @@ -237,7 +237,10 @@ TagLineDirective = ($rootScope, $repo, $rs, $confirm, $qqueue, $template, $compi link = ($scope, $el, $attrs, $model) -> isEditable = -> - return $scope.project.my_permissions.indexOf($attrs.requiredPerm) != -1 + if $attrs.requiredPerm? + return $scope.project.my_permissions.indexOf($attrs.requiredPerm) != -1 + + return true ## Render renderTags = (tags, tagsColors) -> @@ -362,7 +365,7 @@ TagLineDirective = ($rootScope, $repo, $rs, $confirm, $qqueue, $template, $compi deleteValue(value) - bindOnce $scope, "project", (project) -> + bindOnce $scope, "project.tags_colors", (tags_colors) -> if not isEditable() renderInReadModeOnly() return @@ -376,7 +379,7 @@ TagLineDirective = ($rootScope, $repo, $rs, $confirm, $qqueue, $template, $compi menu.css("left", position.left) $el.find("input").autocomplete({ - source: _.keys(project.tags_colors) + source: _.keys(tags_colors) position: { my: "left top", using: positioningFunction diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 5e667b78..9997386b 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -38,7 +38,8 @@ "TAGS": { "PLACEHOLDER": "I'm it! Tag me...", "DELETE": "Delete tag", - "ADD": "Add tag" + "ADD": "Add tag", + "LIST": "Tags" }, "DESCRIPTION": { "EMPTY": "Empty space is so boring... go on be descriptive... A rose by any other name would smell as sweet...", diff --git a/app/partials/admin/admin-project-profile.jade b/app/partials/admin/admin-project-profile.jade index f71f6acb..ada40387 100644 --- a/app/partials/admin/admin-project-profile.jade +++ b/app/partials/admin/admin-project-profile.jade @@ -34,6 +34,10 @@ div.wrapper(tg-project-profile, ng-controller="ProjectProfileController as ctrl" id="total-story-points", ng-model="project.total_story_points", data-type="digits", data-required="true") + fieldset + label(for="tags", translate="COMMON.TAGS.LIST") + div.tags-block(tg-tag-line, ng-model="project") + fieldset label(for="project-description", translate="ADMIN.PROJECT_PROFILE.DESCRIPTION") textarea(name="description", placeholder="{{'ADMIN.PROJECT_PROFILE.DESCRIPTION' | translate}}", id="project-description", From 42ea4555e6a361501262b4024643ccce710bec6d Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Fri, 8 May 2015 11:22:10 +0200 Subject: [PATCH 129/194] Fixing translation in register screen --- app/partials/includes/modules/invitation-login-form.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/includes/modules/invitation-login-form.jade b/app/partials/includes/modules/invitation-login-form.jade index c3c251f1..b1da78f9 100644 --- a/app/partials/includes/modules/invitation-login-form.jade +++ b/app/partials/includes/modules/invitation-login-form.jade @@ -5,7 +5,7 @@ form.login-form placeholder="{{'LOGIN_COMMON.PLACEHOLDER_AUTH_NAME' | translate}}") fieldset.login-password input(type="password", name="password", ng-model="dataLogin.password", data-required="true", - placeholder="{{''LOGIN_COMMON.PLACEHOLDER_AUTH_PASSWORD' | translate}}") + placeholder="{{'LOGIN_COMMON.PLACEHOLDER_AUTH_PASSWORD' | translate}}") a.forgot-pass(href="", tg-nav="forgot-password", title="{{'LOGIN_COMMON.TITLE_LINK_FORGOT_PASSWORD' | translate}}", translate="LOGIN_COMMON.LINK_FORGOT_PASSWORD") fieldset button.button-login.button-gray.submit-button(type="submit", title="{{'LOGIN_COMMON.ACTION_ENTER' | translate}}", translate="LOGIN_COMMON.ACTION_ENTER") From 9e473f05ef57af42dac6342a88b3be58d905286e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 8 May 2015 12:16:12 +0200 Subject: [PATCH 130/194] Fix identation --- .../includes/modules/invitation-login-form.jade | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/app/partials/includes/modules/invitation-login-form.jade b/app/partials/includes/modules/invitation-login-form.jade index b1da78f9..ef3ab6e0 100644 --- a/app/partials/includes/modules/invitation-login-form.jade +++ b/app/partials/includes/modules/invitation-login-form.jade @@ -1,13 +1,20 @@ form.login-form p.form-header(translate="LOGIN_COMMON.HEADER") + fieldset input(type="text", name="username", ng-model="dataLogin.username", data-required="true", - placeholder="{{'LOGIN_COMMON.PLACEHOLDER_AUTH_NAME' | translate}}") + placeholder="{{'LOGIN_COMMON.PLACEHOLDER_AUTH_NAME' | translate}}") + fieldset.login-password input(type="password", name="password", ng-model="dataLogin.password", data-required="true", placeholder="{{'LOGIN_COMMON.PLACEHOLDER_AUTH_PASSWORD' | translate}}") - a.forgot-pass(href="", tg-nav="forgot-password", title="{{'LOGIN_COMMON.TITLE_LINK_FORGOT_PASSWORD' | translate}}", translate="LOGIN_COMMON.LINK_FORGOT_PASSWORD") + a.forgot-pass(href="", tg-nav="forgot-password", + title="{{'LOGIN_COMMON.TITLE_LINK_FORGOT_PASSWORD' | translate}}", + translate="LOGIN_COMMON.LINK_FORGOT_PASSWORD") + fieldset - button.button-login.button-gray.submit-button(type="submit", title="{{'LOGIN_COMMON.ACTION_ENTER' | translate}}", translate="LOGIN_COMMON.ACTION_ENTER") + button.button-login.button-gray.submit-button(type="submit", + title="{{'LOGIN_COMMON.ACTION_ENTER' | translate}}", + translate="LOGIN_COMMON.ACTION_ENTER") fieldset(ng-repeat="plugin in contribPlugins|filter:{type: 'auth'}", ng-include="plugin.template") From 29b31b3aa6e5263af8266431ce1ccdb1705016f1 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 11 May 2015 11:14:01 +0200 Subject: [PATCH 131/194] Adding sprint order to saved query params for selected sprint --- app/coffee/modules/resources/sprints.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/resources/sprints.coffee b/app/coffee/modules/resources/sprints.coffee index 517ee15f..ba06164b 100644 --- a/app/coffee/modules/resources/sprints.coffee +++ b/app/coffee/modules/resources/sprints.coffee @@ -29,7 +29,10 @@ resourceProvider = ($repo, $model, $storage) -> service.get = (projectId, sprintId) -> return $repo.queryOne("milestones", sprintId).then (sprint) -> - service.storeUserstoriesQueryParams(projectId, {"milestone": sprintId}) + service.storeUserstoriesQueryParams(projectId, { + milestone: sprintId + order_by: "sprint_order" + }) uses = sprint.user_stories uses = _.map(uses, (u) -> $model.make_model("userstories", u)) sprint._attrs.user_stories = uses From 6ab9473f786f7d5edf92355239a6c84c4362a0d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 11 May 2015 15:30:07 +0200 Subject: [PATCH 132/194] Fix importer --- app/coffee/modules/resources/projects.coffee | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/coffee/modules/resources/projects.coffee b/app/coffee/modules/resources/projects.coffee index a311609c..323b674c 100644 --- a/app/coffee/modules/resources/projects.coffee +++ b/app/coffee/modules/resources/projects.coffee @@ -24,7 +24,7 @@ taiga = @.taiga sizeFormat = @.taiga.sizeFormat -resourceProvider = ($config, $repo, $http, $urls, $auth, $q, $rootScope, $translate) -> +resourceProvider = ($config, $repo, $http, $urls, $auth, $q, $translate) -> service = {} service.get = (projectId) -> @@ -99,7 +99,9 @@ resourceProvider = ($config, $repo, $http, $urls, $auth, $q, $rootScope, $transl statusUpdater("in-progress", null, message, percent) uploadComplete = (evt) => - statusUpdater("done", $translate.instant("PROJECT.IMPORT.TITLE"), $translate.instant("PROJECT.IMPORT.DESCRIPTION")) + statusUpdater("done", + $translate.instant("PROJECT.IMPORT.TITLE"), + $translate.instant("PROJECT.IMPORT.DESCRIPTION")) uploadFailed = (evt) => statusUpdater("error") @@ -141,4 +143,5 @@ resourceProvider = ($config, $repo, $http, $urls, $auth, $q, $rootScope, $transl module = angular.module("taigaResources") -module.factory("$tgProjectsResourcesProvider", ["$tgConfig", "$tgRepo", "$tgHttp", "$tgUrls", "$tgAuth", "$q", "$translate", resourceProvider]) +module.factory("$tgProjectsResourcesProvider", ["$tgConfig", "$tgRepo", "$tgHttp", "$tgUrls", "$tgAuth", + "$q", "$translate", resourceProvider]) From d434b29a25d3db6f3aa000474f0a170f5127f6cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 11 May 2015 15:32:38 +0200 Subject: [PATCH 133/194] Remove unnecessary console.log sentences --- app/coffee/modules/common/attachments.coffee | 2 +- app/coffee/modules/common/importer.coffee | 1 - app/coffee/modules/common/wisiwyg.coffee | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/coffee/modules/common/attachments.coffee b/app/coffee/modules/common/attachments.coffee index 06cc2920..9d43b5d5 100644 --- a/app/coffee/modules/common/attachments.coffee +++ b/app/coffee/modules/common/attachments.coffee @@ -267,7 +267,7 @@ AttachmentDirective = ($template, $compile, $translate) -> isDeprecated: attachment.is_deprecated modifyPermission: modifyPermission } - console.log ctx.title + if edit html = $compile(templateEdit(ctx))($scope) else diff --git a/app/coffee/modules/common/importer.coffee b/app/coffee/modules/common/importer.coffee index 10a10db8..f2772e45 100644 --- a/app/coffee/modules/common/importer.coffee +++ b/app/coffee/modules/common/importer.coffee @@ -51,7 +51,6 @@ ImportProjectButtonDirective = ($rs, $confirm, $location, $navUrls, $translate) onError = (result) -> loader.stop() - console.log "Error", result errorMsg = $translate.instant("PROJECT.IMPORT.ERROR") if result.status == 429 # TOO MANY REQUESTS diff --git a/app/coffee/modules/common/wisiwyg.coffee b/app/coffee/modules/common/wisiwyg.coffee index eba15b84..37ade9d3 100644 --- a/app/coffee/modules/common/wisiwyg.coffee +++ b/app/coffee/modules/common/wisiwyg.coffee @@ -138,7 +138,6 @@ MarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $trans markItUp.donotparse = indices urlFormatting = (markItUp) -> - console.log(markItUp.donotparse) regex = /<< Date: Mon, 11 May 2015 16:13:48 +0200 Subject: [PATCH 134/194] [i18n] Fix importer project errors --- app/coffee/modules/resources/projects.coffee | 14 +++++++++++--- app/locales/locale-ca.json | 4 +++- app/locales/locale-en.json | 2 ++ app/locales/locale-es.json | 2 ++ app/locales/locale-fi.json | 2 ++ app/locales/locale-fr.json | 2 ++ app/locales/locale-zh-hant.json | 2 ++ 7 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/coffee/modules/resources/projects.coffee b/app/coffee/modules/resources/projects.coffee index 323b674c..ad712d42 100644 --- a/app/coffee/modules/resources/projects.coffee +++ b/app/coffee/modules/resources/projects.coffee @@ -85,17 +85,25 @@ resourceProvider = ($config, $repo, $http, $urls, $auth, $q, $translate) -> maxFileSize = $config.get("maxUploadFileSize", null) if maxFileSize and file.size > maxFileSize + errorMsg = $translate.instant("PROJECT.IMPORT.ERROR_MAX_SIZE_EXCEEDED", { + fileName: file.name + fileSize: sizeFormat(file.size) + maxFileSize: sizeFormat(maxFileSize) + }) + response = { status: 413, - data: _error_message: "'#{file.name}' (#{sizeFormat(file.size)}) is too heavy for our oompa - loompas, try it with a smaller than (#{sizeFormat(maxFileSize)})" + data: _error_message: errorMsg } defered.reject(response) return defered.promise uploadProgress = (evt) => percent = Math.round((evt.loaded / evt.total) * 100) - message = "Uloaded #{sizeFormat(evt.loaded)} of #{sizeFormat(evt.total)}" + message = $translate.instant("PROJECT.IMPORT.UPLOAD_IN_PROGRESS_MESSAGE", { + uploadedSize: sizeFormat(evt.loaded) + totalSize: sizeFormat(evt.total) + }) statusUpdater("in-progress", null, message, percent) uploadComplete = (evt) => diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 2c800f8d..55b0aaab 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -476,9 +476,11 @@ "DESCRIPTION": "Aquest procés pot durar una mica, pero favor mantinga la finestra oberta", "ASYNC_IN_PROGRESS_TITLE": "Els Oompa Loompas estàn important el teu projecte", "ASYNC_IN_PROGRESS_MESSAGE": "Aquest procés pot durar uns moments
T'enviarem un correo quan estiga llest.", + "UPLOAD_IN_PROGRESS_MESSAGE": "Uploaded {{uploadedSize}} of {{totalSize}}", "ERROR": "Els Oompa Loompas han tingut problemes pujan les teues dades. Per favor intenta-ho de nou.", "ERROR_TOO_MANY_REQUEST": "Ho sentim, els Oompa Loompas estàn molt ocupats ara mateix. Intenta-ho de nou en uns moments.", "ERROR_MESSAGE": "Els Oompa Loompas tenen problemes important les teues dades: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})", "SYNC_SUCCESS": "El teu projecte s'ha importat correctament" } }, @@ -792,7 +794,7 @@ "PLACEHOLDER_FIELD": "Mot d'usuari i correu", "ACTION_RESET_PASSWORD": "Resetejar contrasenya", "LINK_CANCEL": "No, portam enrere, crec que ho recorde.", - "SUCCESS": "Check your inbox!
We have sent you an email with the instructions to set a new password", + "SUCCESS": "Mira el teu correu!
Hem enviat un correu amb les instrucciones per a setejar una nova contrasenya.", "ERROR": "Segons els nostres Oompa Loompas, no estàs registrat encara." }, "LOGIN_COMMON": { diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 8ed6e8b6..51de880b 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -476,9 +476,11 @@ "DESCRIPTION": "This process can take a while, please keep the window open.", "ASYNC_IN_PROGRESS_TITLE": "Our Oompa Loompas are importing your project", "ASYNC_IN_PROGRESS_MESSAGE": "This process could take a few minutes
We will send you an email when ready", + "UPLOAD_IN_PROGRESS_MESSAGE": "Uploaded {{uploadedSize}} of {{totalSize}}", "ERROR": "Our Oompa Loompas have some problems importing your dump data. Please try again.", "ERROR_TOO_MANY_REQUEST": "Sorry, our Oompa Loompas are very busy right now. Please try again in a few minutes.", "ERROR_MESSAGE": "Our Oompa Loompas have some problems importing your dump data: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})", "SYNC_SUCCESS": "Your project has been imported successfuly" } }, diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 31ceb5fb..65c295c9 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -476,9 +476,11 @@ "DESCRIPTION": "Este proceso puede tardar un ratito, por favor mantén la ventana abierta.", "ASYNC_IN_PROGRESS_TITLE": "Nuestros Oompa Loompa están importando su proyecto", "ASYNC_IN_PROGRESS_MESSAGE": "Este proceso puede llevarnos algún tiempo
Te enviaremos un email cuando esté listo", + "UPLOAD_IN_PROGRESS_MESSAGE": "Subidos {{uploadedSize}} de {{totalSize}}", "ERROR": "Nuestros Oompa Loompas tienen problemas para importar tus datos. Por favor inténtalo nuevamente.", "ERROR_TOO_MANY_REQUEST": "Lo sentimos, nuestros Oompa Loompas están muy ocupados en este momento. Por favor inténtalo nuevamente en unos minutos.", "ERROR_MESSAGE": "Nuestros Oompa Loompas tienen algunos problemas importando tus datos: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "El fichero '{{fileName}}' ({{fileSize}}) es demasiado pesado para nuestros Oompa Loompas, prueba con uno de menos de ({{maxFileSize}}).", "SYNC_SUCCESS": "Tu proyecto se ha importado con éxito." } }, diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index 827e11a2..6bb27dc4 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -476,9 +476,11 @@ "DESCRIPTION": "Tämä voi kestää hetken, pidä ikkuna auki.", "ASYNC_IN_PROGRESS_TITLE": " Oompa Loompas tuovat projektia", "ASYNC_IN_PROGRESS_MESSAGE": "Tämä voi kestää muutaman minuutin
Lähetämme sähköpostin on valmista", + "UPLOAD_IN_PROGRESS_MESSAGE": "Uploaded {{uploadedSize}} of {{totalSize}}", "ERROR": "Oompa Loompas eivät onnistuneet tuomaan tiedostoasi. Yritä uudestaan.", "ERROR_TOO_MANY_REQUEST": "Oompa Loompas ovat kiireisiä juuri nyt. Yritä hetken päästä uudelleen.", "ERROR_MESSAGE": "Oompa Loompas eivät pysty lukemaan tiedostoasi: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})", "SYNC_SUCCESS": "Projektisi on tuotu sisään onnistuneesti" } }, diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index a6911c7d..26db18e7 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -476,9 +476,11 @@ "DESCRIPTION": "Ce processus peut prendre du temps, veuillez garder cette fenêtre ouverte.", "ASYNC_IN_PROGRESS_TITLE": "Nos Oompas Loompas sont en train d'importer votre projet", "ASYNC_IN_PROGRESS_MESSAGE": "Ce processus pourrait durer plusieurs minutes
Nous vous enverrons un emai quand ce sera prêt", + "UPLOAD_IN_PROGRESS_MESSAGE": "Uploaded {{uploadedSize}} of {{totalSize}}", "ERROR": "Nos Oompas Loompas ont rencontré des problèmes en important votre dump de données. Merci de réessayer.", "ERROR_TOO_MANY_REQUEST": "Nous sommes désolés, nos oompa loompas sont très occupés en ce moment. Veuillez réessayer dans quelques minutes.", "ERROR_MESSAGE": "Nos oompa loompas ont des problèmes pour importer le dump de vos données : {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})", "SYNC_SUCCESS": "Votre projet a été importé avec succès" } }, diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index 38df8d4f..cc4f5a69 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -476,9 +476,11 @@ "DESCRIPTION": "這個過桯要花點時間,請保持视窗開啟", "ASYNC_IN_PROGRESS_TITLE": "我們的工程師對你的專案很重要哦", "ASYNC_IN_PROGRESS_MESSAGE": "這個過程要花上一點時間
當弄好時我們會發給你一封郵件", + "UPLOAD_IN_PROGRESS_MESSAGE": "Uploaded {{uploadedSize}} of {{totalSize}}", "ERROR": "系統在滙進你倒入的資料時遇上一些問題,請再試一次", "ERROR_TOO_MANY_REQUEST": "抱歉系統繁忙中,請稍後再試試 ", "ERROR_MESSAGE": "我們的系統無法滙入你的資料", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})", "SYNC_SUCCESS": "你的專案已成功滙入" } }, From 846a6813c6db1b10c50e3f7a686f70b4b2d0071b Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 12 May 2015 09:47:02 +0200 Subject: [PATCH 135/194] Fixing how user story neighbor works for backlog and taskboard --- app/coffee/modules/base/navurls.coffee | 5 ++++ app/coffee/modules/resources/sprints.coffee | 9 ------- app/coffee/modules/userstories/detail.coffee | 24 +++++++++++++++++++ .../includes/components/backlog-row.jade | 1 + app/partials/includes/modules/sprint.jade | 1 + .../includes/modules/taskboard-table.jade | 4 +++- app/partials/kanban/kanban-task.jade | 3 ++- 7 files changed, 36 insertions(+), 11 deletions(-) diff --git a/app/coffee/modules/base/navurls.coffee b/app/coffee/modules/base/navurls.coffee index 02e54ebb..32d10e21 100644 --- a/app/coffee/modules/base/navurls.coffee +++ b/app/coffee/modules/base/navurls.coffee @@ -100,6 +100,11 @@ NavigationUrlsDirective = ($navurls, $auth, $q, $location) -> url = $navurls.resolve(name) fullUrl = $navurls.formatUrl(url, options) + if $attrs.tgNavGetParams + getURLParams = JSON.parse($attrs.tgNavGetParams) + getURLParamsStr = $.param(getURLParams) + fullUrl = "#{fullUrl}?#{getURLParamsStr}" + target.data("fullUrl", fullUrl) if target.is("a") diff --git a/app/coffee/modules/resources/sprints.coffee b/app/coffee/modules/resources/sprints.coffee index ba06164b..d9f5ccdc 100644 --- a/app/coffee/modules/resources/sprints.coffee +++ b/app/coffee/modules/resources/sprints.coffee @@ -25,14 +25,9 @@ generateHash = taiga.generateHash resourceProvider = ($repo, $model, $storage) -> service = {} - hashSuffixUserstories = "userstories-queryparams" service.get = (projectId, sprintId) -> return $repo.queryOne("milestones", sprintId).then (sprint) -> - service.storeUserstoriesQueryParams(projectId, { - milestone: sprintId - order_by: "sprint_order" - }) uses = sprint.user_stories uses = _.map(uses, (u) -> $model.make_model("userstories", u)) sprint._attrs.user_stories = uses @@ -51,10 +46,6 @@ resourceProvider = ($repo, $model, $storage) -> m._attrs.user_stories = uses return milestones - service.storeUserstoriesQueryParams = (projectId, params) -> - ns = "#{projectId}:#{hashSuffixUserstories}" - hash = generateHash([projectId, ns]) - $storage.set(hash, params) return (instance) -> instance.sprints = service diff --git a/app/coffee/modules/userstories/detail.coffee b/app/coffee/modules/userstories/detail.coffee index 4ff0a7ba..9c3ef7f5 100644 --- a/app/coffee/modules/userstories/detail.coffee +++ b/app/coffee/modules/userstories/detail.coffee @@ -109,6 +109,30 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return project loadUs: -> + httpParams = _.pick(@location.search(), "milestone", "no-milestone", "kanban-status") + milestone = httpParams.milestone + if milestone + @rs.userstories.storeQueryParams(@scope.projectId, { + milestone: milestone + order_by: "sprint_order" + }) + + noMilestone = httpParams["no-milestone"] + if noMilestone + @rs.userstories.storeQueryParams(@scope.projectId, { + milestone: "null" + order_by: "backlog_order" + }) + + kanbanStaus = httpParams["kanban-status"] + if kanbanStaus + @rs.userstories.storeQueryParams(@scope.projectId, { + status: kanbanStaus + order_by: "kanban_order" + }) + + + return @rs.userstories.getByRef(@scope.projectId, @params.usref).then (us) => @scope.us = us @scope.usId = us.id diff --git a/app/partials/includes/components/backlog-row.jade b/app/partials/includes/components/backlog-row.jade index b342de08..fb8ebfc0 100644 --- a/app/partials/includes/components/backlog-row.jade +++ b/app/partials/includes/components/backlog-row.jade @@ -4,6 +4,7 @@ div.row.us-item-row(ng-repeat="us in visibleUserstories track by us.id", tg-bind div.user-story-name input(tg-check-permission="modify_us", type="checkbox", name="") a.clickable(tg-nav="project-userstories-detail:project=project.slug,ref=us.ref", + tg-nav-get-params="{\"no-milestone\": 1}", title="#{{ us.ref }} {{ us.subject }}") span(tg-bo-ref="us.ref") span(ng-bind="us.subject") diff --git a/app/partials/includes/modules/sprint.jade b/app/partials/includes/modules/sprint.jade index ecdddbdc..dfc1aabf 100644 --- a/app/partials/includes/modules/sprint.jade +++ b/app/partials/includes/modules/sprint.jade @@ -6,6 +6,7 @@ div.sprint-table div.row.milestone-us-item-row(ng-repeat="us in sprint.user_stories track by us.id", tg-bind-scope) div.column-us a.us-name.clickable(tg-nav="project-userstories-detail:project=project.slug,ref=us.ref", + tg-nav-get-params="{\"milestone\": {{us.milestone}}}" tg-bo-title="'#' + us.ref + ' ' + us.subject", ng-class="{closed: us.is_closed, blocked: us.is_blocked}") span(tg-bo-ref="us.ref") diff --git a/app/partials/includes/modules/taskboard-table.jade b/app/partials/includes/modules/taskboard-table.jade index 6b0c3a6b..dfd46060 100644 --- a/app/partials/includes/modules/taskboard-table.jade +++ b/app/partials/includes/modules/taskboard-table.jade @@ -14,7 +14,9 @@ div.taskboard-table(tg-taskboard-squish-column) a.icon.icon-vfold.vfold(href="", title="{{'TASKBOARD.TABLE.TITLE_ACTION_FOLD_ROW' | translate}}", ng-click='foldUs(us)', ng-class='{hidden:usFolded[us.id]}') a.icon.icon-vunfold.vunfold(href="", title="{{'TASKBOARD.TABLE.TITLE_ACTION_UNFOLD_ROW' | translate}}", ng-click='foldUs(us)', ng-class='{hidden:!usFolded[us.id]}') h3.us-title - a(href="", tg-nav="project-userstories-detail:project=project.slug,ref=us.ref", + a(href="", + tg-nav="project-userstories-detail:project=project.slug,ref=us.ref", + tg-nav-get-params="{\"milestone\": {{us.milestone}}}", tg-bo-title="'#' + us.ref + ' ' + us.subject") span.us-ref(tg-bo-ref="us.ref") span(ng-bind="us.subject") diff --git a/app/partials/kanban/kanban-task.jade b/app/partials/kanban/kanban-task.jade index 8a6d2a7e..e108a4ab 100644 --- a/app/partials/kanban/kanban-task.jade +++ b/app/partials/kanban/kanban-task.jade @@ -5,7 +5,8 @@ div.kanban-task-inner(ng-class="{'task-archived': us.isArchived}") a.task-assigned(href="", title="{{'US.ASSIGN' | translate}}") span.task-num(tg-bo-ref="us.ref") a.task-name(href="", title="#{{ ::us.ref }} {{ us.subject }}", ng-bind="us.subject", - tg-nav="project-userstories-detail:project=project.slug,ref=us.ref") + tg-nav="project-userstories-detail:project=project.slug,ref=us.ref", + tg-nav-get-params="{\"kanban-status\": {{us.status}}}") p.task-points(href="", title="{{'US.TOTAL_US_POINTS' | translate}}") span(ng-if="us.total_points !== null", ng-bind="us.total_points") From db9fb77f00033ee83fc4dfef4cea690c8bf55ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 12 May 2015 12:58:45 +0200 Subject: [PATCH 136/194] [i18n] Update locale --- app/locales/locale-es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 65c295c9..e0555ebb 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -959,7 +959,7 @@ }, "POPOVER": { "USER_PROFILE": "Perfil de Usuario", - "CHANGE_PASSWORD": "Cambio de Contraseña", + "CHANGE_PASSWORD": "Cambiar contraseña", "NOTIFICATIONS": "Notificaciones", "FEEDBACK": "Feedback", "TITLE_AVATAR": "Preferencias de usuario" From 8ec8fd019814cf1aa9ba8d8a6708acd93d931656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 12 May 2015 20:45:05 +0200 Subject: [PATCH 137/194] [i18n] Fix a strange behavior when set user language to default-sys-lang --- app/coffee/modules/auth.coffee | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index e70207b6..42b9a5dd 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -35,15 +35,16 @@ class AuthService extends taiga.Service "$tgResources", "$tgHttp", "$tgUrls", + "$tgConfig", "$translate"] - constructor: (@rootscope, @storage, @model, @rs, @http, @urls, @translate) -> + constructor: (@rootscope, @storage, @model, @rs, @http, @urls, @config, @translate) -> super() _setLocales: -> - if @rootscope.user.lang - @translate.use(@rootscope.user.lang) - moment.locale(@rootscope.user.lang) + lang = @rootscope.user.lang || @config.get("defaultLanguage") || "en" + @translate.use(lang) + moment.locale(lang) getUser: -> if @rootscope.user From fe1bee3861c330da9dcaeb39b6a963c9dec7e35a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 12 May 2015 21:14:13 +0200 Subject: [PATCH 138/194] [i18n] Fix translations of tags in project profile panel --- app/locales/locale-ca.json | 1 + app/locales/locale-en.json | 4 ++-- app/locales/locale-es.json | 1 + app/locales/locale-fi.json | 1 + app/locales/locale-fr.json | 1 + app/locales/locale-zh-hant.json | 1 + app/partials/admin/admin-project-profile.jade | 2 +- 7 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 55b0aaab..376befee 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -249,6 +249,7 @@ "PROJECT_SLUG": "Slug de projecte", "NUMBER_SPRINTS": "Nombre de sprints", "NUMBER_US_POINTS": "Nombre de punts de US", + "TAGS": "Tags", "DESCRIPTION": "Descripció", "PUBLIC_PROJECT": "Projecte públic", "PRIVATE_PROJECT": "Projecte privat", diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index b79d7c79..55304d3c 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -39,8 +39,7 @@ "TAGS": { "PLACEHOLDER": "I'm it! Tag me...", "DELETE": "Delete tag", - "ADD": "Add tag", - "LIST": "Tags" + "ADD": "Add tag" }, "DESCRIPTION": { "EMPTY": "Empty space is so boring... go on be descriptive...", @@ -250,6 +249,7 @@ "PROJECT_SLUG": "Project slug", "NUMBER_SPRINTS": "Number of sprints", "NUMBER_US_POINTS": "Number of US points", + "TAGS": "Tags", "DESCRIPTION": "Description", "PUBLIC_PROJECT": "Public project", "PRIVATE_PROJECT": "Private project", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index e0555ebb..108d9794 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -249,6 +249,7 @@ "PROJECT_SLUG": "Slug de proyecto", "NUMBER_SPRINTS": "Número de sprints totales estimado", "NUMBER_US_POINTS": "Número de puntos de historia totales estimados", + "TAGS": "Etiquetas", "DESCRIPTION": "Descripción", "PUBLIC_PROJECT": "Proyecto público", "PRIVATE_PROJECT": "Proyecto privado", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index 6bb27dc4..c49f8fcb 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -249,6 +249,7 @@ "PROJECT_SLUG": "Projektin hukka-aika", "NUMBER_SPRINTS": "Kierrosten määrä", "NUMBER_US_POINTS": "Kt pisteitä", + "TAGS": "Avainsanat", "DESCRIPTION": "Kuvaus", "PUBLIC_PROJECT": "Julkinen projekti", "PRIVATE_PROJECT": "Yksityinen projekti", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 26db18e7..9dd6a5fa 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -249,6 +249,7 @@ "PROJECT_SLUG": "Slug du projet", "NUMBER_SPRINTS": "Nombre de sprints", "NUMBER_US_POINTS": "Nombre de points HU", + "TAGS": "Étiquettes", "DESCRIPTION": "Description", "PUBLIC_PROJECT": "Projet public", "PRIVATE_PROJECT": "Projet privé", diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index cc4f5a69..3f01baee 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -249,6 +249,7 @@ "PROJECT_SLUG": "專案代稱", "NUMBER_SPRINTS": "衝刺任務數目 ", "NUMBER_US_POINTS": "使用者故事點數數目", + "TAGS": "標籤", "DESCRIPTION": "描述", "PUBLIC_PROJECT": "公開專案", "PRIVATE_PROJECT": "不公開專案", diff --git a/app/partials/admin/admin-project-profile.jade b/app/partials/admin/admin-project-profile.jade index ada40387..b2986c6f 100644 --- a/app/partials/admin/admin-project-profile.jade +++ b/app/partials/admin/admin-project-profile.jade @@ -35,7 +35,7 @@ div.wrapper(tg-project-profile, ng-controller="ProjectProfileController as ctrl" data-type="digits", data-required="true") fieldset - label(for="tags", translate="COMMON.TAGS.LIST") + label(for="tags", translate="ADMIN.PROJECT_PROFILE.TAGS") div.tags-block(tg-tag-line, ng-model="project") fieldset From fc5d961451c48a860c21535d9dcdede71097dc53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 13 May 2015 10:06:21 +0200 Subject: [PATCH 139/194] [i18n] Minor fix --- app/locales/locale-ca.json | 2 +- app/locales/locale-en.json | 2 +- app/locales/locale-es.json | 22 +++++++++---------- app/locales/locale-fi.json | 2 +- app/locales/locale-fr.json | 2 +- app/locales/locale-zh-hant.json | 2 +- .../project/project-navigation-base.jade | 17 +++++++++----- 7 files changed, 27 insertions(+), 22 deletions(-) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 376befee..06030921 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -465,7 +465,7 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "El teu projecte", + "SECTION_TITLE": "Your projects", "PLACEHOLDER_SEARCH": "Buscar en...", "ACTION_CREATE_PROJECT": "Crear projecte", "TITLE_ACTION_IMPORT": "Importar projecte", diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 55304d3c..34c5a3a6 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -465,7 +465,7 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Your project", + "SECTION_TITLE": "Your projects", "PLACEHOLDER_SEARCH": "Search in...", "ACTION_CREATE_PROJECT": "Create project", "TITLE_ACTION_IMPORT": "Import project", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 108d9794..2cf4642d 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -215,7 +215,7 @@ "TITLE": "Exportar", "SUBTITLE": "Exportar tu proyecto para guardar una copia de seguridad o para crear uno nuevo basado en este.", "EXPORT_BUTTON": "Exportar", - "EXPORT_BUTTON_TITLE": "Exportar su proyecto", + "EXPORT_BUTTON_TITLE": "Exportar tus proyecto", "LOADING_TITLE": "Estamos generando tu fichero con el volcado de datos", "DUMP_READY": "¡Tu fichero con el volcado de datos está listo!", "LOADING_MESSAGE": "Por favor no cierres la ventana.", @@ -223,7 +223,7 @@ "SYNC_MESSAGE": "Si la descarga no comienza automáticamente haz click aquí.", "ERROR": "Nuestros Oompa Loompas tienen algunos problemas generando el volcado de tus datos. Por favor inténtalo de nuevo.", "ERROR_BUSY": "Lo sentimos, nuestros Oompa Loompas están muy ocupados en este momento. Por favor inténtalo nuevamente en unos minutos.", - "ERROR_MESSAGE": "Nuestros Oompa Loompas tienen algunos problemas generando su volcado de datos: {{message}}" + "ERROR_MESSAGE": "Nuestros Oompa Loompas han tenido algunos problemas generando el volcado de datos: {{message}}" }, "MODULES": { "TITLE": "Módulos", @@ -316,8 +316,8 @@ }, "ROLES": { "SECTION_NAME": "Roles - {{projectName}}", - "WARNING_NO_ROLE": "Cuidado, ningún rol en su proyecto podrá estimar el valor de los puntos para historias de usuario", - "HELP_ROLE_ENABLED": "Si lo activas, los miembros que posean este rol serán capaces de estimar sus propios puntos en las histórias de usuario", + "WARNING_NO_ROLE": "Ojo, ningún rol en tu proyecto podrá estimar historias de usuario", + "HELP_ROLE_ENABLED": "Si lo activas, los miembros que posean este rol serán capaces de estimar las histórias de usuario", "COUNT_MEMBERS": "{{ role.members_count }} miembros con este rol", "TITLE_DELETE_ROLE": "Borrar Rol", "REPLACEMENT_ROLE": "Todos los usuarios con este rol serán movidos a", @@ -465,7 +465,7 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Su proyecto", + "SECTION_TITLE": "Tus proyectos", "PLACEHOLDER_SEARCH": "Buscar en...", "ACTION_CREATE_PROJECT": "Crear proyecto", "TITLE_ACTION_IMPORT": "Importar proyecto", @@ -475,7 +475,7 @@ "IMPORT": { "TITLE": "Importando Proyecto", "DESCRIPTION": "Este proceso puede tardar un ratito, por favor mantén la ventana abierta.", - "ASYNC_IN_PROGRESS_TITLE": "Nuestros Oompa Loompa están importando su proyecto", + "ASYNC_IN_PROGRESS_TITLE": "Nuestros Oompa Loompa están importando tu proyecto", "ASYNC_IN_PROGRESS_MESSAGE": "Este proceso puede llevarnos algún tiempo
Te enviaremos un email cuando esté listo", "UPLOAD_IN_PROGRESS_MESSAGE": "Subidos {{uploadedSize}} de {{totalSize}}", "ERROR": "Nuestros Oompa Loompas tienen problemas para importar tus datos. Por favor inténtalo nuevamente.", @@ -488,7 +488,7 @@ "LIGHTBOX": { "DELETE_ACCOUNT": { "SECTION_NAME": "Eliminar cuenta de Taiga", - "CONFIRM": "¿Está seguro que decea eliminar su cuenta de Taiga?", + "CONFIRM": "¿Está seguro que deseas eliminar tu cuenta de Taiga?", "SUBTITLE": "¡Te extrañaremos! :-(" }, "DELETE_PROJECT": { @@ -769,14 +769,14 @@ "SUBTITLE": "Sentimos que estés abandonando la taiga, esperamos que hayas disfrutado de tu estancia :)", "PLACEHOLDER_INPUT_TOKEN": "token de cancelación de cuenta", "ACTION_LEAVING": "̀¡Sí, me largo!", - "SUCCESS": "Nuestros Oompa Loompas eliminaron su cuenta" + "SUCCESS": "Nuestros Oompa Loompas eliminaron tu cuenta" }, "CHANGE_EMAIL_FORM": { "TITLE": "Cambiar tu email", "SUBTITLE": "̀¡Un click más y tu email se actualizará!", "PLACEHOLDER_INPUT_TOKEN": "token de cambio de email", "ACTION_CHANGE_EMAIL": "Cambiar email", - "SUCCESS": "Nuestros Oompa Loompas actualizaron su correo" + "SUCCESS": "Nuestros Oompa Loompas actualizaron tu correo" }, "CHANGE_PASSWORD_RECOVERY_FORM": { "TITLE": "Crear una nueva contraseña de Taiga", @@ -808,7 +808,7 @@ "PLACEHOLDER_AUTH_PASSWORD": "Contraseña (distingue mayúsculas y minúsculas)" }, "LOGIN_FORM": { - "ERROR_AUTH_INCORRECT": "De acuerdo a nuestros Oompa Loompas, su usuario/correo o contraseña son incorrectos", + "ERROR_AUTH_INCORRECT": "De acuerdo a nuestros Oompa Loompas, tu nombre de usuario/correo o contraseña son incorrectos", "ERROR_GENERIC": "De acuerdo a nuestros Oompa Loompas hubo un error.", "SUCCESS": "Nuestros Oompa Loompas están felices, bienvenido a Taiga." }, @@ -986,7 +986,7 @@ }, "WIZARD": { "SECTION_TITLE_CHOOSE_TEMPLATE": "Elija una plantilla", - "CHOOSE_TEMPLATE_TEXT": "¿Que plantilla se ajusta mejor en su proyecto?", + "CHOOSE_TEMPLATE_TEXT": "¿Que plantilla se ajusta mejor con tu proyecto?", "SECTION_TITLE_CREATE_PROJECT": "Crear Proyecto", "CREATE_PROJECT_TEXT": "Fresco y claro. ¡Es emocionante!", "PROGRESS_TEMPLATE_SELECTION": "Selección de plantilla", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index c49f8fcb..497a8a5b 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -465,7 +465,7 @@ "ADMIN": "Hallinnoi" }, "NAVIGATION": { - "SECTION_TITLE": "Projektisi", + "SECTION_TITLE": "Your projects", "PLACEHOLDER_SEARCH": "Hae täältä...", "ACTION_CREATE_PROJECT": "Luo projekti", "TITLE_ACTION_IMPORT": "Luo projekti tiedostosta", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 9dd6a5fa..2802b995 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -465,7 +465,7 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Votre projet", + "SECTION_TITLE": "Your projects", "PLACEHOLDER_SEARCH": "Rechercher dans", "ACTION_CREATE_PROJECT": "Créer un projet", "TITLE_ACTION_IMPORT": "Importer un projet", diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index 3f01baee..8f4c1404 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -465,7 +465,7 @@ "ADMIN": "管理者" }, "NAVIGATION": { - "SECTION_TITLE": "你的專案", + "SECTION_TITLE": "Your projects", "PLACEHOLDER_SEARCH": "搜尋", "ACTION_CREATE_PROJECT": "創建專案", "TITLE_ACTION_IMPORT": "滙入專案", diff --git a/app/partials/project/project-navigation-base.jade b/app/partials/project/project-navigation-base.jade index ab677ce2..0209704b 100644 --- a/app/partials/project/project-navigation-base.jade +++ b/app/partials/project/project-navigation-base.jade @@ -1,20 +1,25 @@ -h1 Your projects +h1(translate='PROJECT.NAVIGATION.SECTION_TITLE') form fieldset - input.search-project(type="text", placeholder="{{'PROJECT.NAVIGATION.PLACEHOLDER_SEARCH' | translate}}") + input.search-project(type="text", + placeholder="{{'PROJECT.NAVIGATION.PLACEHOLDER_SEARCH' | translate}}") a.icon.icon-search div.create-project-button-wrapper - a.button-green.create-project-button(href="" title="{{'PROJECT.NAVIGATION.ACTION_CREATE_PROJECT' | translate}}") + a.button-green.create-project-button(href="", + title="{{'PROJECT.NAVIGATION.ACTION_CREATE_PROJECT' | translate}}") span(translate="PROJECT.NAVIGATION.ACTION_CREATE_PROJECT") div(tg-import-project-button) - a.button-blackish.import-project-button(href="" title="{{'PROJECT.NAVIGATION.TITLE_ACTION_IMPORT' | translate}}") + a.button-blackish.import-project-button(href="", + title="{{'PROJECT.NAVIGATION.TITLE_ACTION_IMPORT' | translate}}") span.icon.icon-upload input.import-file.hidden(type="file") div.projects-pagination(tg-projects-pagination) - a.v-pagination-previous.icon.icon-arrow-up(href="", title="{{'PROJECT.NAVIGATION.TITLE_PRVIOUS_PROJECT' | translate}}") + a.v-pagination-previous.icon.icon-arrow-up(href="", + title="{{'PROJECT.NAVIGATION.TITLE_PRVIOUS_PROJECT' | translate}}") div.v-pagination-list ul.projects-list - a.v-pagination-next.icon.icon-arrow-bottom(href="", title="{{'PROJECT.NAVIGATION.TITLE_NEXT_PROJECT' | translate}}") + a.v-pagination-next.icon.icon-arrow-bottom(href="", + title="{{'PROJECT.NAVIGATION.TITLE_NEXT_PROJECT' | translate}}") From dc27761263147b449d1ca08a29c99550dc5d774a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 13 May 2015 11:54:43 +0200 Subject: [PATCH 140/194] [i18n] Add an space between two text --- app/partials/auth/login-text.jade | 1 + 1 file changed, 1 insertion(+) diff --git a/app/partials/auth/login-text.jade b/app/partials/auth/login-text.jade index 66ac4010..f5db9ef4 100644 --- a/app/partials/auth/login-text.jade +++ b/app/partials/auth/login-text.jade @@ -1,3 +1,4 @@ p.login-text span(translate="AUTH.NOT_REGISTERED_YET") + |   a(href!='<%- url %>', tg-nav='register', title='{{"AUTH.REGISTER" | translate}}', translate="AUTH.CREATE_ACCOUNT") From 9be91aaa98a6287869b0f61f93c3d0585e949287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 13 May 2015 12:11:34 +0200 Subject: [PATCH 141/194] [i18n] Minor fixes in spanish locales --- app/locales/locale-es.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 2cf4642d..59011ce1 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -322,7 +322,7 @@ "TITLE_DELETE_ROLE": "Borrar Rol", "REPLACEMENT_ROLE": "Todos los usuarios con este rol serán movidos a", "WARNING_DELETE_ROLE": "Cuidado, todas las estimaciones asociadas a este rol se perderán", - "ERROR_DELETE_ALL": "Usted no puede eliminar todos los valores", + "ERROR_DELETE_ALL": "No puedes eliminar todos los valores", "EXTERNAL_USER": "Usuario externo" }, "THIRD_PARTIES": { @@ -757,7 +757,7 @@ }, "NOTIFICATION": { "OK": "Todo está bien", - "WARNING": "Vaya, algo pasó...", + "WARNING": "¡Cáspitas!, algo no ha ido bien...", "WARNING_TEXT": "Nuestros Oompa Loompas están tristes, ¡Tus cambios no fueron guardados!", "SAVED": "¡Nuestros Oompa Loompas guardaron todos tus cambios!", "CLOSE": "Cerrar notificación", @@ -796,7 +796,7 @@ "ACTION_RESET_PASSWORD": "Restablecer Contraseña", "LINK_CANCEL": "Nah, llévame de vuelta, creo que lo recordé.", "SUCCESS": "¡Revisa tu bandeja de entrada!
Te hemos enviado un mail con las instrucciones necesarias para restablecer tu contraseña\n", - "ERROR": "De acuerdo a nuestros Oompa Loompas, Usted no se encuentra registrado todavía." + "ERROR": "Según nuestros Oompa Loompas tú no estás registrado" }, "LOGIN_COMMON": { "HEADER": "Ya tengo una cuenta en Taiga", @@ -808,14 +808,14 @@ "PLACEHOLDER_AUTH_PASSWORD": "Contraseña (distingue mayúsculas y minúsculas)" }, "LOGIN_FORM": { - "ERROR_AUTH_INCORRECT": "De acuerdo a nuestros Oompa Loompas, tu nombre de usuario/correo o contraseña son incorrectos", - "ERROR_GENERIC": "De acuerdo a nuestros Oompa Loompas hubo un error.", + "ERROR_AUTH_INCORRECT": "Nuestros Oompa Loompas indican que tu nombre de usuario/correo o contraseña son incorrectos", + "ERROR_GENERIC": "Nuestros Oompa Loompas indican que ha habido un error.", "SUCCESS": "Nuestros Oompa Loompas están felices, bienvenido a Taiga." }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Ooops, tenemos un problema
Nuestros Oompa Loompas no pueden encontrar tu invitación.", "SUCCESS": "¡Acabas de unirte al proyecto! Bienvenido a {{project_name}}", - "ERROR": "De acuerdo a nuestros Oompa Loompas, Usted no se encuentra registrado todavía o escribió una contraseña invalida." + "ERROR": "Según nuestros Oompa Loompas tú no estás registrado o has escrito mal tu contraseña." }, "REGISTER_FORM": { "PLACEHOLDER_NAME": "Escribe un nombre de usuario (distingue mayúsculas y minúsculas)", From 0d42ab9aef504c155f0f0dfadc32fb0ec2b8e12c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 13 May 2015 15:12:58 +0200 Subject: [PATCH 142/194] [i18n] Checksley --- app/coffee/app.coffee | 45 ++++++++++++++++++++++++++++++--- app/coffee/modules/auth.coffee | 1 - app/locales/locale-ca.json | 25 ++++++++++++++++++ app/locales/locale-en.json | 25 ++++++++++++++++++ app/locales/locale-es.json | 25 ++++++++++++++++++ app/locales/locale-fi.json | 25 ++++++++++++++++++ app/locales/locale-fr.json | 25 ++++++++++++++++++ app/locales/locale-zh-hant.json | 25 ++++++++++++++++++ 8 files changed, 192 insertions(+), 4 deletions(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 91ef588a..077d32f8 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -235,6 +235,7 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven if localStorage.userInfo userInfo = JSON.parse(localStorage.userInfo) + # i18n preferedLangCode = userInfo?.lang || window.taigaConfig.defaultLanguage || "en" $translateProvider @@ -253,16 +254,54 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven init = ($log, $config, $rootscope, $auth, $events, $analytics, $translate) -> $log.debug("Initialize application") + + # Taiga Plugins $rootscope.contribPlugins = @.taigaContribPlugins $rootscope.adminPlugins = _.where(@.taigaContribPlugins, {"type": "admin"}) + # i18n + $rootscope.$on "$translateChangeEnd", (ctx) -> + lang = ctx.language + + # i18n - moment.js + moment.locale(lang) + + # i18n - checksley.js + messages = { + defaultMessage: $translate.instant("COMMON.FORM_ERRORS.DEFAULT_MESSAGE") + type: { + email: $translate.instant("COMMON.FORM_ERRORS.TYPE_EMAIL") + url: $translate.instant("COMMON.FORM_ERRORS.TYPE_URL") + urlstrict: $translate.instant("COMMON.FORM_ERRORS.TYPE_URLSTRICT") + number: $translate.instant("COMMON.FORM_ERRORS.TYPE_NUMBER") + digits: $translate.instant("COMMON.FORM_ERRORS.TYPE_DIGITS") + dateIso: $translate.instant("COMMON.FORM_ERRORS.TYPE_DATEISO") + alphanum: $translate.instant("COMMON.FORM_ERRORS.TYPE_ALPHANUM") + phone: $translate.instant("COMMON.FORM_ERRORS.TYPE_PHONE") + } + notnull: $translate.instant("COMMON.FORM_ERRORS.NOTNULL") + notblank: $translate.instant("COMMON.FORM_ERRORS.NOT_BLANK") + required: $translate.instant("COMMON.FORM_ERRORS.REQUIRED") + regexp: $translate.instant("COMMON.FORM_ERRORS.REGEXP") + min: $translate.instant("COMMON.FORM_ERRORS.MIN") + max: $translate.instant("COMMON.FORM_ERRORS.MAX") + range: $translate.instant("COMMON.FORM_ERRORS.RANGE") + minlength: $translate.instant("COMMON.FORM_ERRORS.MIN_LENGTH") + maxlength: $translate.instant("COMMON.FORM_ERRORS.MAX_LENGTH") + rangelength: $translate.instant("COMMON.FORM_ERRORS.RANGE_LENGTH") + mincheck: $translate.instant("COMMON.FORM_ERRORS.MIN_CHECK") + maxcheck: $translate.instant("COMMON.FORM_ERRORS.MAX_CHECK") + rangecheck: $translate.instant("COMMON.FORM_ERRORS.RANGE_CHECK") + equalto: $translate.instant("COMMON.FORM_ERRORS.EQUAL_TO") + } + checksley.updateMessages('default', messages) + + # Load user if $auth.isAuthenticated() $events.setupConnection() - user = $auth.getUser() - $translate.use(user.lang) if user.lang - + # Analytics $analytics.initialize() diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index 42b9a5dd..7735eb04 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -44,7 +44,6 @@ class AuthService extends taiga.Service _setLocales: -> lang = @rootscope.user.lang || @config.get("defaultLanguage") || "en" @translate.use(lang) - moment.locale(lang) getUser: -> if @rootscope.user diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 06030921..2c52da5d 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -36,6 +36,31 @@ "EXTERNAL_USER": "un usuari extern", "GENERIC_ERROR": "Un Oompa Loompas diu {{error}}.", "IOCAINE_TEXT": "Un poc saturat per una tasca? Fes-ho saber als teus companys clicant a Iocaina quan edites la tasca. Es possible ser inmune a aquesta (fictícia) poció mortal consumint xicotetes dòsis poc a poc, així com es possible millorar amb xicotets nous desafiaments!", + "FORM_ERRORS": { + "DEFAULT_MESSAGE": "This value seems to be invalid.", + "TYPE_EMAIL": "This value should be a valid email.", + "TYPE_URL": "This value should be a valid url.", + "TYPE_URLSTRICT": "This value should be a valid url.", + "TYPE_NUMBER": "This value should be a valid number.", + "TYPE_DIGITS": "This value should be digits.", + "TYPE_DATEISO": "This value should be a valid date (YYYY-MM-DD).", + "TYPE_ALPHANUM": "This value should be alphanumeric.", + "TYPE_PHONE": "This value should be a valid phone number.", + "NOTNULL": "This value should not be null.", + "NOT_BLANK": "This value should not be blank.", + "REQUIRED": "This value is required.", + "REGEXP": "This value seems to be invalid.", + "MIN": "This value should be greater than or equal to %s.", + "MAX": "This value should be lower than or equal to %s.", + "RANGE": "This value should be between %s and %s.", + "MIN_LENGTH": "This value is too short. It should have %s characters or more.", + "MAX_LENGTH": "This value is too long. It should have %s characters or less.", + "RANGE_LENGTH": "This value length is invalid. It should be between %s and %s characters long.", + "MIN_CHECK": "You must select at least %s choices.", + "MAX_CHECK": "You must select %s choices or less.", + "RANGE_CHECK": "You must select between %s and %s choices.", + "EQUAL_TO": "This value should be the same." + }, "TAGS": { "PLACEHOLDER": "Afegir tag", "DELETE": "Esborrar tag", diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 34c5a3a6..d2d5a63f 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -36,6 +36,31 @@ "EXTERNAL_USER": "an external user", "GENERIC_ERROR": "One of our Oompa Loompas says {{error}}.", "IOCAINE_TEXT": "Feeling a bit overwhelmed by a task? Make sure others know about it by clicking on Iocaine when editing a task. It's possible to become immune to this (fictional) deadly poison by consuming small amounts over time just as it's possible to get better at what you do by occasionally taking on extra challenges!", + "FORM_ERRORS": { + "DEFAULT_MESSAGE": "This value seems to be invalid.", + "TYPE_EMAIL": "This value should be a valid email.", + "TYPE_URL": "This value should be a valid url.", + "TYPE_URLSTRICT": "This value should be a valid url.", + "TYPE_NUMBER": "This value should be a valid number.", + "TYPE_DIGITS": "This value should be digits.", + "TYPE_DATEISO": "This value should be a valid date (YYYY-MM-DD).", + "TYPE_ALPHANUM": "This value should be alphanumeric.", + "TYPE_PHONE": "This value should be a valid phone number.", + "NOTNULL": "This value should not be null.", + "NOT_BLANK": "This value should not be blank.", + "REQUIRED": "This value is required.", + "REGEXP": "This value seems to be invalid.", + "MIN": "This value should be greater than or equal to %s.", + "MAX": "This value should be lower than or equal to %s.", + "RANGE": "This value should be between %s and %s.", + "MIN_LENGTH": "This value is too short. It should have %s characters or more.", + "MAX_LENGTH": "This value is too long. It should have %s characters or less.", + "RANGE_LENGTH": "This value length is invalid. It should be between %s and %s characters long.", + "MIN_CHECK": "You must select at least %s choices.", + "MAX_CHECK": "You must select %s choices or less.", + "RANGE_CHECK": "You must select between %s and %s choices.", + "EQUAL_TO": "This value should be the same." + }, "TAGS": { "PLACEHOLDER": "I'm it! Tag me...", "DELETE": "Delete tag", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 59011ce1..c5b55a10 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -36,6 +36,31 @@ "EXTERNAL_USER": "un usuario externo", "GENERIC_ERROR": "Uno de nuestros Oompa Loompas dice {{error}}.", "IOCAINE_TEXT": "¿Te sientes fuera de tu zona de confort en una tarea? Asegúrate de que los demás están al tanto de ello, marca el check de la Iocaína al editar una tarea. Igual eu era posible llegar a ser inmune a este veneno mortal a base de consumir pequeñas dosis a lo largo del tiempo, es posible conseguir mejor en lo que estás haciendo si afrontas de vez en cuando esta clase de retos!", + "FORM_ERRORS": { + "DEFAULT_MESSAGE": "Este valor parece inválido.", + "TYPE_EMAIL": "El valor debe ser un email.", + "TYPE_URL": "El valor debe ser una url.", + "TYPE_URLSTRICT": "El valor debe ser una url.", + "TYPE_NUMBER": "El valor debe ser un número.", + "TYPE_DIGITS": "El valor deben ser digitos.", + "TYPE_DATEISO": "El valor debe ser una fecha válida (DD-MM-YYY)", + "TYPE_ALPHANUM": "El valor debe ser alfanumérico.", + "TYPE_PHONE": "El valor debe ser un teléfono válido.", + "NOTNULL": "No puede ser un valor nulo.", + "NOT_BLANK": "El valor no puede quedar en blanco.", + "REQUIRED": "Valor requerido.", + "REGEXP": "Este valor parece inválido.", + "MIN": "El valor debe ser mayor o igual que %s.", + "MAX": "El valor debe ser menor o igual que %s.", + "RANGE": "El valor debe estar entre %s y %s.", + "MIN_LENGTH": "El valor es demasiado corto. Debe contener al menos %s caracteres.", + "MAX_LENGTH": "El valor es demasiado corto. Debe contener %s caracteres como máximo.", + "RANGE_LENGTH": "Longitud erronea. Debe estar entre %s y %s caracteres.", + "MIN_CHECK": "Debes seleccionar al menos %s.", + "MAX_CHECK": "Debes seleccionar %s o menos.", + "RANGE_CHECK": "Debes seleccionar de %s a %s.", + "EQUAL_TO": "Este valor debe ser el mismo." + }, "TAGS": { "PLACEHOLDER": "¿Qué soy? Etiquétame...", "DELETE": "Borrar etiqueta", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index 497a8a5b..fa6a5d21 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -36,6 +36,31 @@ "EXTERNAL_USER": "ulkoinen käyttäjä", "GENERIC_ERROR": "Oompa Loompas havaitsivat virheen {{error}}.", "IOCAINE_TEXT": "Jos tehtävä ahdistaa, merkitse se hidasteeksi.", + "FORM_ERRORS": { + "DEFAULT_MESSAGE": "This value seems to be invalid.", + "TYPE_EMAIL": "This value should be a valid email.", + "TYPE_URL": "This value should be a valid url.", + "TYPE_URLSTRICT": "This value should be a valid url.", + "TYPE_NUMBER": "This value should be a valid number.", + "TYPE_DIGITS": "This value should be digits.", + "TYPE_DATEISO": "This value should be a valid date (YYYY-MM-DD).", + "TYPE_ALPHANUM": "This value should be alphanumeric.", + "TYPE_PHONE": "This value should be a valid phone number.", + "NOTNULL": "This value should not be null.", + "NOT_BLANK": "This value should not be blank.", + "REQUIRED": "This value is required.", + "REGEXP": "This value seems to be invalid.", + "MIN": "This value should be greater than or equal to %s.", + "MAX": "This value should be lower than or equal to %s.", + "RANGE": "This value should be between %s and %s.", + "MIN_LENGTH": "This value is too short. It should have %s characters or more.", + "MAX_LENGTH": "This value is too long. It should have %s characters or less.", + "RANGE_LENGTH": "This value length is invalid. It should be between %s and %s characters long.", + "MIN_CHECK": "You must select at least %s choices.", + "MAX_CHECK": "You must select %s choices or less.", + "RANGE_CHECK": "You must select between %s and %s choices.", + "EQUAL_TO": "This value should be the same." + }, "TAGS": { "PLACEHOLDER": "Anna avainsana...", "DELETE": "Poista avainsana", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 2802b995..bc130e0d 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -36,6 +36,31 @@ "EXTERNAL_USER": "an external user", "GENERIC_ERROR": "L'un de nos Ooompa Loompas dit {{error}}.", "IOCAINE_TEXT": "Vous vous sentez un peu submergé par une tâche ? Soyez certains d'en informer les autres en cliquant su Iocaine lors de la modification de la tâche. Il est possible de s'immuniser contre ce poison (fictif) en consommant de petites quantités en heures supplémentaires, tout comme il est possible de s'améliorer en acceptant parfois de nouveaux défis !", + "FORM_ERRORS": { + "DEFAULT_MESSAGE": "This value seems to be invalid.", + "TYPE_EMAIL": "This value should be a valid email.", + "TYPE_URL": "This value should be a valid url.", + "TYPE_URLSTRICT": "This value should be a valid url.", + "TYPE_NUMBER": "This value should be a valid number.", + "TYPE_DIGITS": "This value should be digits.", + "TYPE_DATEISO": "This value should be a valid date (YYYY-MM-DD).", + "TYPE_ALPHANUM": "This value should be alphanumeric.", + "TYPE_PHONE": "This value should be a valid phone number.", + "NOTNULL": "This value should not be null.", + "NOT_BLANK": "This value should not be blank.", + "REQUIRED": "This value is required.", + "REGEXP": "This value seems to be invalid.", + "MIN": "This value should be greater than or equal to %s.", + "MAX": "This value should be lower than or equal to %s.", + "RANGE": "This value should be between %s and %s.", + "MIN_LENGTH": "This value is too short. It should have %s characters or more.", + "MAX_LENGTH": "This value is too long. It should have %s characters or less.", + "RANGE_LENGTH": "This value length is invalid. It should be between %s and %s characters long.", + "MIN_CHECK": "You must select at least %s choices.", + "MAX_CHECK": "You must select %s choices or less.", + "RANGE_CHECK": "You must select between %s and %s choices.", + "EQUAL_TO": "This value should be the same." + }, "TAGS": { "PLACEHOLDER": "Taggez moi !", "DELETE": "Supprimer l'étiquette", diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index 8f4c1404..23bce917 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -36,6 +36,31 @@ "EXTERNAL_USER": "外部使用者", "GENERIC_ERROR": "我們的系統指出{{error}}.", "IOCAINE_TEXT": "感到任務的不堪負荷?確認其它人在編輯任務時知道此狀況,可以點選Iocaine。它可能會成為免疫的致命狀況,只要長期小量消耗,但如果你只是偶而挑戰它可有助表現。", + "FORM_ERRORS": { + "DEFAULT_MESSAGE": "This value seems to be invalid.", + "TYPE_EMAIL": "This value should be a valid email.", + "TYPE_URL": "This value should be a valid url.", + "TYPE_URLSTRICT": "This value should be a valid url.", + "TYPE_NUMBER": "This value should be a valid number.", + "TYPE_DIGITS": "This value should be digits.", + "TYPE_DATEISO": "This value should be a valid date (YYYY-MM-DD).", + "TYPE_ALPHANUM": "This value should be alphanumeric.", + "TYPE_PHONE": "This value should be a valid phone number.", + "NOTNULL": "This value should not be null.", + "NOT_BLANK": "This value should not be blank.", + "REQUIRED": "This value is required.", + "REGEXP": "This value seems to be invalid.", + "MIN": "This value should be greater than or equal to %s.", + "MAX": "This value should be lower than or equal to %s.", + "RANGE": "This value should be between %s and %s.", + "MIN_LENGTH": "This value is too short. It should have %s characters or more.", + "MAX_LENGTH": "This value is too long. It should have %s characters or less.", + "RANGE_LENGTH": "This value length is invalid. It should be between %s and %s characters long.", + "MIN_CHECK": "You must select at least %s choices.", + "MAX_CHECK": "You must select %s choices or less.", + "RANGE_CHECK": "You must select between %s and %s choices.", + "EQUAL_TO": "This value should be the same." + }, "TAGS": { "PLACEHOLDER": "我在這裏,請標注我", "DELETE": "刪除Tag", From c516761dfaf5c165a7f1a16496a283ac2dece681 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 14 May 2015 08:59:24 +0200 Subject: [PATCH 143/194] Fixing project tags edition --- app/coffee/modules/admin/project-profile.coffee | 2 +- app/partials/admin/admin-project-profile.jade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/coffee/modules/admin/project-profile.coffee b/app/coffee/modules/admin/project-profile.coffee index bee96019..860409ba 100644 --- a/app/coffee/modules/admin/project-profile.coffee +++ b/app/coffee/modules/admin/project-profile.coffee @@ -132,7 +132,7 @@ ProjectProfileDirective = ($repo, $confirm, $loading, $navurls, $location) -> $scope.$emit("project:loaded", $scope.project) promise.then null, (data) -> - $loading.finish(target) + $loading.finish(submitButton) form.setErrors(data) if data._error_message $confirm.notify("error", data._error_message) diff --git a/app/partials/admin/admin-project-profile.jade b/app/partials/admin/admin-project-profile.jade index b2986c6f..908df503 100644 --- a/app/partials/admin/admin-project-profile.jade +++ b/app/partials/admin/admin-project-profile.jade @@ -36,7 +36,7 @@ div.wrapper(tg-project-profile, ng-controller="ProjectProfileController as ctrl" fieldset label(for="tags", translate="ADMIN.PROJECT_PROFILE.TAGS") - div.tags-block(tg-tag-line, ng-model="project") + div.tags-block(tg-lb-tag-line, ng-model="project.tags") fieldset label(for="project-description", translate="ADMIN.PROJECT_PROFILE.DESCRIPTION") From 129a42d7636ff63ea96a97fe76490b93d546d03b Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 14 May 2015 11:28:09 +0200 Subject: [PATCH 144/194] Fixing project home --- app/partials/project/project.jade | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/partials/project/project.jade b/app/partials/project/project.jade index 1d8f9b9a..d639d50d 100644 --- a/app/partials/project/project.jade +++ b/app/partials/project/project.jade @@ -6,17 +6,18 @@ div.wrapper(ng-controller="ProjectController as ctrl") span.green(tg-bo-bind="project.name", class="project-name") div.summary div.summary-stats - span.info-num(tg-bo-bind="stats.total_points") - span.info-text(translate="PROJECT.STATS") + span.number(ng-bind="stats.total_points") -- + span.description(translate="BACKLOG.SUMMARY.PROJECT_POINTS") div.summary-stats - span.info-num(tg-bo-bind="stats.defined_points") - span.info-text(translate="PROJECT.DEFINED") + span.number(ng-bind="stats.defined_points") -- + span.description(translate="BACKLOG.SUMMARY.DEFINED_POINTS") div.summary-stats - span.info-num(tg-bo-bind="stats.assigned_points") - span.info-text(translate="PROJECT.ASSIGNED") + span.number(ng-bind="stats.closed_points") -- + span.description(translate="BACKLOG.SUMMARY.CLOSED_POINTS") div.summary-stats - span.info-num(tg-bo-bind="stats.closed_points") - span.info-text(translate="PROJECT.CLOSED") + span.number(ng-bind="stats.speed | number:0") -- + span.description(translate="BACKLOG.SUMMARY.POINTS_PER_SPRINT") + div.project-data-container p.description(tg-bo-bind="project.description") ul From 8189da0f7df32e5b0bc390826a718416166b56f6 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 14 May 2015 11:30:53 +0200 Subject: [PATCH 145/194] Fixing ASYNC_MESSAGE translation --- app/coffee/modules/admin/project-profile.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/admin/project-profile.coffee b/app/coffee/modules/admin/project-profile.coffee index 860409ba..207734b4 100644 --- a/app/coffee/modules/admin/project-profile.coffee +++ b/app/coffee/modules/admin/project-profile.coffee @@ -256,7 +256,7 @@ ProjectExportDirective = ($window, $rs, $confirm, $translate) -> loading_title = $translate.instant("ADMIN.PROJECT_EXPORT.LOADING_TITLE") loading_msg = $translate.instant("ADMIN.PROJECT_EXPORT.LOADING_MESSAGE") dump_ready_text = -> resultTitleEl.html($translate.instant("ADMIN.PROJECT_EXPORT.DUMP_READY")) - asyn_message = -> resultTitleEl.html($translate.instant("ADMIN.PROJECT_EXPORT.ASYN_MESSAGE")) + asyn_message = -> resultTitleEl.html($translate.instant("ADMIN.PROJECT_EXPORT.ASYNC_MESSAGE")) syn_message = (url) -> resultTitleEl.html($translate.instant("ADMIN.PROJECT_EXPORT.SYNC_MESSAGE", { url: url})) From 8a3c660d237774b33b5ae2c97ae9de22fc814889 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 14 May 2015 11:45:01 +0200 Subject: [PATCH 146/194] Fixing attachments directive --- app/coffee/modules/common/attachments.coffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/coffee/modules/common/attachments.coffee b/app/coffee/modules/common/attachments.coffee index 9d43b5d5..cc64232a 100644 --- a/app/coffee/modules/common/attachments.coffee +++ b/app/coffee/modules/common/attachments.coffee @@ -159,7 +159,7 @@ class AttachmentsController extends taiga.Controller return not item.is_deprecated -AttachmentsDirective = ($config, $confirm, $templates) -> +AttachmentsDirective = ($config, $confirm, $templates, $translate) -> template = $templates.get("attachment/attachments.html", true) link = ($scope, $el, $attrs, $ctrls) -> @@ -224,7 +224,7 @@ AttachmentsDirective = ($config, $confirm, $templates) -> templateFn = ($el, $attrs) -> maxFileSize = $config.get("maxUploadFileSize", null) maxFileSize = sizeFormat(maxFileSize) if maxFileSize - maxFileSizeMsg = if maxFileSize then $translation.instant("ATTACHMENT.MAX_UPLOAD_SIZE") else "" + maxFileSizeMsg = if maxFileSize then $translate.instant("ATTACHMENT.MAX_UPLOAD_SIZE") else "" maxFileSize = 4000 ctx = { type: $attrs.type @@ -243,7 +243,7 @@ AttachmentsDirective = ($config, $confirm, $templates) -> template: templateFn } -module.directive("tgAttachments", ["$tgConfig", "$tgConfirm", "$tgTemplate", AttachmentsDirective]) +module.directive("tgAttachments", ["$tgConfig", "$tgConfirm", "$tgTemplate", "$translate", AttachmentsDirective]) AttachmentDirective = ($template, $compile, $translate) -> From 86f2de66cd60504a99ced444855c526029067443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 14 May 2015 12:01:57 +0200 Subject: [PATCH 147/194] [i18n] Minor fix in attachments --- app/coffee/modules/common/attachments.coffee | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/coffee/modules/common/attachments.coffee b/app/coffee/modules/common/attachments.coffee index cc64232a..343635a1 100644 --- a/app/coffee/modules/common/attachments.coffee +++ b/app/coffee/modules/common/attachments.coffee @@ -224,8 +224,7 @@ AttachmentsDirective = ($config, $confirm, $templates, $translate) -> templateFn = ($el, $attrs) -> maxFileSize = $config.get("maxUploadFileSize", null) maxFileSize = sizeFormat(maxFileSize) if maxFileSize - maxFileSizeMsg = if maxFileSize then $translate.instant("ATTACHMENT.MAX_UPLOAD_SIZE") else "" - maxFileSize = 4000 + maxFileSizeMsg = if maxFileSize then $translate.instant("ATTACHMENT.MAX_UPLOAD_SIZE", {maxFileSize: maxFileSize}) else "" ctx = { type: $attrs.type maxFileSize: maxFileSize From 35a2aea6a6c66cabe871f18b04a7ca7492f77ef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 14 May 2015 13:36:44 +0200 Subject: [PATCH 148/194] [i18n] Remove i18next dependencie --- bower.json | 1 - gulpfile.js | 1 - 2 files changed, 2 deletions(-) diff --git a/bower.json b/bower.json index aa4355ca..45b28089 100644 --- a/bower.json +++ b/bower.json @@ -57,7 +57,6 @@ "angular-mocks": "1.3.11", "kalendae": "~0.4.1", "checksley": "~0.6.0", - "i18next": "~1.7.1", "jquery": "~2.1.1", "select2": "~3.4.5", "angular-ui-select2": "~0.0.5", diff --git a/gulpfile.js b/gulpfile.js index 1c51e99d..b436c775 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -126,7 +126,6 @@ paths.libs = [ paths.vendor + "angular-translate/angular-translate.js", paths.vendor + "angular-translate-loader-static-files/angular-translate-loader-static-files.js", paths.vendor + "angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js", - paths.vendor + "i18next/i18next.js", paths.vendor + "moment/min/moment-with-locales.js", paths.vendor + "checksley/checksley.js", paths.vendor + "pikaday/pikaday.js", From 5056f01ffa2474ac2530ef4a889e61d21c7b288b Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 14 May 2015 15:14:02 +0200 Subject: [PATCH 149/194] Fixing leave project directive --- app/coffee/modules/team/main.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/team/main.coffee b/app/coffee/modules/team/main.coffee index 6cfe21b7..df13508c 100644 --- a/app/coffee/modules/team/main.coffee +++ b/app/coffee/modules/team/main.coffee @@ -242,7 +242,7 @@ LeaveProjectDirective = ($repo, $confirm, $location, $rs, $navurls, $translate) link: link } -module.directive("tgLeaveProject", ["$tgRepo", "$tgConfirm", "$tgLocation", "$tgResources", "$tgNavUrls", +module.directive("tgLeaveProject", ["$tgRepo", "$tgConfirm", "$tgLocation", "$tgResources", "$tgNavUrls", "$translate", LeaveProjectDirective]) From 2411eb5f17f3f72fc94da7793aa4e15bc72e7252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 15 May 2015 17:18:03 +0200 Subject: [PATCH 150/194] [i18n] Update locales --- app/locales/locale-ca.json | 22 +++++++++++----------- app/locales/locale-es.json | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 2c52da5d..1f0ea1be 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -37,11 +37,11 @@ "GENERIC_ERROR": "Un Oompa Loompas diu {{error}}.", "IOCAINE_TEXT": "Un poc saturat per una tasca? Fes-ho saber als teus companys clicant a Iocaina quan edites la tasca. Es possible ser inmune a aquesta (fictícia) poció mortal consumint xicotetes dòsis poc a poc, així com es possible millorar amb xicotets nous desafiaments!", "FORM_ERRORS": { - "DEFAULT_MESSAGE": "This value seems to be invalid.", - "TYPE_EMAIL": "This value should be a valid email.", - "TYPE_URL": "This value should be a valid url.", - "TYPE_URLSTRICT": "This value should be a valid url.", - "TYPE_NUMBER": "This value should be a valid number.", + "DEFAULT_MESSAGE": "Aquest valor pareix invàlid.", + "TYPE_EMAIL": "Deu ser un correu vàlid.", + "TYPE_URL": "Deu ser una URL vàlida.", + "TYPE_URLSTRICT": "Deu ser una URL vàlida.", + "TYPE_NUMBER": "Deu ser un nombre vàlid.", "TYPE_DIGITS": "This value should be digits.", "TYPE_DATEISO": "This value should be a valid date (YYYY-MM-DD).", "TYPE_ALPHANUM": "This value should be alphanumeric.", @@ -49,7 +49,7 @@ "NOTNULL": "This value should not be null.", "NOT_BLANK": "This value should not be blank.", "REQUIRED": "This value is required.", - "REGEXP": "This value seems to be invalid.", + "REGEXP": "Aquest valor pareix invàlid.", "MIN": "This value should be greater than or equal to %s.", "MAX": "This value should be lower than or equal to %s.", "RANGE": "This value should be between %s and %s.", @@ -290,8 +290,8 @@ }, "CSV": { "SECTION_TITLE_US": "user stories reports", - "SECTION_TITLE_TASK": "tasks reports", - "SECTION_TITLE_ISSUE": "issues reports", + "SECTION_TITLE_TASK": "infome de tasques", + "SECTION_TITLE_ISSUE": "informe d'incidències", "DOWNLOAD": "Descarrega el CSV", "URL_FIELD_PLACEHOLDER": "Per favor regenera la url del CSV", "TITLE_REGENERATE_URL": "Regenera l'Url del CSV", @@ -490,7 +490,7 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Your projects", + "SECTION_TITLE": "Els teus projectes", "PLACEHOLDER_SEARCH": "Buscar en...", "ACTION_CREATE_PROJECT": "Crear projecte", "TITLE_ACTION_IMPORT": "Importar projecte", @@ -502,11 +502,11 @@ "DESCRIPTION": "Aquest procés pot durar una mica, pero favor mantinga la finestra oberta", "ASYNC_IN_PROGRESS_TITLE": "Els Oompa Loompas estàn important el teu projecte", "ASYNC_IN_PROGRESS_MESSAGE": "Aquest procés pot durar uns moments
T'enviarem un correo quan estiga llest.", - "UPLOAD_IN_PROGRESS_MESSAGE": "Uploaded {{uploadedSize}} of {{totalSize}}", + "UPLOAD_IN_PROGRESS_MESSAGE": "Pujat {{uploadedSize}} de {{totalSize}}", "ERROR": "Els Oompa Loompas han tingut problemes pujan les teues dades. Per favor intenta-ho de nou.", "ERROR_TOO_MANY_REQUEST": "Ho sentim, els Oompa Loompas estàn molt ocupats ara mateix. Intenta-ho de nou en uns moments.", "ERROR_MESSAGE": "Els Oompa Loompas tenen problemes important les teues dades: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) es massa gran per als nostres Oompa Loompas, prova amb algun inferior a ({{maxFileSize}})", "SYNC_SUCCESS": "El teu projecte s'ha importat correctament" } }, diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index c5b55a10..c0db4060 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -793,7 +793,7 @@ "TITLE": "Cancelar tu cuenta de usuario", "SUBTITLE": "Sentimos que estés abandonando la taiga, esperamos que hayas disfrutado de tu estancia :)", "PLACEHOLDER_INPUT_TOKEN": "token de cancelación de cuenta", - "ACTION_LEAVING": "̀¡Sí, me largo!", + "ACTION_LEAVING": "¡Sí, me largo!", "SUCCESS": "Nuestros Oompa Loompas eliminaron tu cuenta" }, "CHANGE_EMAIL_FORM": { @@ -873,7 +873,7 @@ "TITLE": "Filtros", "INPUT_SEARCH_PLACEHOLDER": "Asunto o referencia", "TITLE_ACTION_SEARCH": "Buscar", - "ACTION_SAVE_CUSTOM_FILTER": "guardar como atributo personalizado", + "ACTION_SAVE_CUSTOM_FILTER": "guardar como filtro personalizado", "BREADCRUMB": "Filtros", "TITLE_BREADCRUMB": "Filtros", "CATEGORIES": { From 62a244a5ea16e87f7474bb993063948c13abe29f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Sun, 17 May 2015 11:52:52 +0200 Subject: [PATCH 151/194] [i18n] Fix a typo --- app/locales/locale-es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index c0db4060..06cbbd41 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -528,7 +528,7 @@ }, "ADD_MEMBER": { "TITLE": "Nuevo miembro", - "HELP_TEXT": "Si los usuarios ya están registrado en Taiga, se añadirán automáticamente. De lo contrario recivirán una invitación." + "HELP_TEXT": "Si los usuarios ya están registrado en Taiga, se añadirán automáticamente. De lo contrario recibirán una invitación." }, "CREATE_ISSUE": { "TITLE": "Añadir petición" From 8ae8a9a73793b6aef1d71c0db0432a68861674ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Sun, 17 May 2015 12:07:25 +0200 Subject: [PATCH 152/194] [i18n] Fix #2668 --- app/locales/locale-ca.json | 1 + app/locales/locale-en.json | 1 + app/locales/locale-es.json | 1 + app/locales/locale-fi.json | 1 + app/locales/locale-fr.json | 1 + app/locales/locale-zh-hant.json | 1 + app/partials/includes/modules/invitation-register-form.jade | 2 +- 7 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 1f0ea1be..97a09c4c 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -843,6 +843,7 @@ "ERROR": "Segons els nostres OOmpa Loompas, no estàs registrat encara o has escrit una contrasenya invàlida." }, "REGISTER_FORM": { + "TITLE": "Register a new Taiga account (free)", "PLACEHOLDER_NAME": "Tria un mot d'usuari (sensible a majúscules i minúscules)", "PLACEHOLDER_FULL_NAME": "Escriu el teu nom complet", "PLACEHOLDER_EMAIL": "El teu correu", diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index d2d5a63f..d9caabee 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -844,6 +844,7 @@ "ERROR": "According to our Oompa Loompas, your are not registered yet or typed an invalid password." }, "REGISTER_FORM": { + "TITLE": "Register a new Taiga account (free)", "PLACEHOLDER_NAME": "Pick a username (case sensitive)", "PLACEHOLDER_FULL_NAME": "Pick your full name", "PLACEHOLDER_EMAIL": "Your email", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 06cbbd41..f378746e 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -843,6 +843,7 @@ "ERROR": "Según nuestros Oompa Loompas tú no estás registrado o has escrito mal tu contraseña." }, "REGISTER_FORM": { + "TITLE": "Crea tu nueva cuenta en Taiga, ¡es gratis!", "PLACEHOLDER_NAME": "Escribe un nombre de usuario (distingue mayúsculas y minúsculas)", "PLACEHOLDER_FULL_NAME": "Escribe tu nombre completo", "PLACEHOLDER_EMAIL": "Tu email", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index fa6a5d21..9c8b94b6 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -843,6 +843,7 @@ "ERROR": "Oompa Loompas sanovat että käyttäjänimesi tai sähköpostisi tai salasanasi on väärä." }, "REGISTER_FORM": { + "TITLE": "Register a new Taiga account (free)", "PLACEHOLDER_NAME": "Anna käyttäjänimi (kirjainkoko on merkitsevä)", "PLACEHOLDER_FULL_NAME": "Anna koko nimesi", "PLACEHOLDER_EMAIL": "Sähköpostisi", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index bc130e0d..606e2df2 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -843,6 +843,7 @@ "ERROR": "Selon nos Oompa Loompas, vous n'êtes pas encore enregistrés ou vous avez saisi un mot de passe incorrecte." }, "REGISTER_FORM": { + "TITLE": "Register a new Taiga account (free)", "PLACEHOLDER_NAME": "Choisissez un nom d'utilisateur (sensible à la casse)", "PLACEHOLDER_FULL_NAME": "Choisissez votre nom complet", "PLACEHOLDER_EMAIL": "Votre email", diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index 23bce917..23063cbe 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -843,6 +843,7 @@ "ERROR": "按我們的記錄,你尚未註冊或是未輸入有效的密碼 " }, "REGISTER_FORM": { + "TITLE": "Register a new Taiga account (free)", "PLACEHOLDER_NAME": "選一個用戶帳號(注意大小寫)", "PLACEHOLDER_FULL_NAME": "選取你的全名", "PLACEHOLDER_EMAIL": "你的電子郵件", diff --git a/app/partials/includes/modules/invitation-register-form.jade b/app/partials/includes/modules/invitation-register-form.jade index 59964d4d..fce13f15 100644 --- a/app/partials/includes/modules/invitation-register-form.jade +++ b/app/partials/includes/modules/invitation-register-form.jade @@ -1,5 +1,5 @@ form.register-form - p.form-header(translate) Register a new Taiga account (free) + p.form-header(translate="REGISTER_FORM.TITLE") fieldset input(type="text", name="username", ng-model="dataRegister.username", data-required="true", data-maxlength="255", data-regexp="^[\\w.-]+$", From 0f6fc3fa4c146ddc70f6d263010cf9f0124e0cfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Sun, 17 May 2015 13:20:13 +0200 Subject: [PATCH 153/194] [i18n] Fix a typo --- app/partials/includes/modules/lightbox-sprint-add-edit.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/includes/modules/lightbox-sprint-add-edit.jade b/app/partials/includes/modules/lightbox-sprint-add-edit.jade index a02fc2ac..a20de42b 100644 --- a/app/partials/includes/modules/lightbox-sprint-add-edit.jade +++ b/app/partials/includes/modules/lightbox-sprint-add-edit.jade @@ -19,5 +19,5 @@ form div(tg-check-permission="delete_milestone") span.delete-sprint.hidden(translate) - span(tranlsate="LIGHTBOX.ADD_EDIT_SPRINT.ACTION_DELETE_SPRINT") + span(translate="LIGHTBOX.ADD_EDIT_SPRINT.ACTION_DELETE_SPRINT") a.icon.icon-delete(href="", title="{{'LIGHTBOX.ADD_EDIT_SPRINT.TITLE_ACTION_DELETE_SPRINT' | translate}}") From f9327e4f17a31677cac2a339698b66625ad12614 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 18 May 2015 11:01:16 +0200 Subject: [PATCH 154/194] Fixing username translation --- app/partials/user/user-profile.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/user/user-profile.jade b/app/partials/user/user-profile.jade index 4f64352f..1df3ecb0 100644 --- a/app/partials/user/user-profile.jade +++ b/app/partials/user/user-profile.jade @@ -27,7 +27,7 @@ div.wrapper(tg-user-profile, ng-controller="UserSettingsController as ctrl", div.data fieldset - label(for="email", translate"USER_PROFILE.FIELD.USERNAME") + label(for="email", translate="USER_PROFILE.FIELD.USERNAME") input(type="text", name="username", id="username", placeholder="{{'USER_PROFILE.FIELD.USERNAME' | translate}}", ng-model="user.username", data-required="true", data-maxlength="255", data-regexp="^[\\w.-]+$") From 3715e3912c943f780e9942643317b65fd8e076b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 18 May 2015 11:02:00 +0200 Subject: [PATCH 155/194] Remove kalendae from dependencies --- bower.json | 1 - 1 file changed, 1 deletion(-) diff --git a/bower.json b/bower.json index 45b28089..3b1f68c8 100644 --- a/bower.json +++ b/bower.json @@ -55,7 +55,6 @@ "angular-animate": "1.3.11", "angular-sanitize": "1.3.11", "angular-mocks": "1.3.11", - "kalendae": "~0.4.1", "checksley": "~0.6.0", "jquery": "~2.1.1", "select2": "~3.4.5", From 8f59e2516c100ac8efc9a02e146a4540f0d6e387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 18 May 2015 11:06:21 +0200 Subject: [PATCH 156/194] Divide some long lines --- .../modules/lightbox-sprint-add-edit.jade | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/app/partials/includes/modules/lightbox-sprint-add-edit.jade b/app/partials/includes/modules/lightbox-sprint-add-edit.jade index a20de42b..7d9263cd 100644 --- a/app/partials/includes/modules/lightbox-sprint-add-edit.jade +++ b/app/partials/includes/modules/lightbox-sprint-add-edit.jade @@ -1,23 +1,29 @@ a.close(href="", title="{{'COMMON.CLOSE' | translate}}") span.icon.icon-delete + form h2.title(translate="LIGHTBOX.ADD_EDIT_SPRINT.TITLE") fieldset - input.sprint-name(type="text", name="name", placeholder="{{'LIGHTBOX.ADD_EDIT_SPRINT.PLACEHOLDER_SPRINT_NAME' | translate}}", ng-model="sprint.name", - data-required="true", data-maxlength="500") + input.sprint-name(type="text", name="name", ng-model="sprint.name", + data-required="true", data-maxlength="500", + placeholder="{{'LIGHTBOX.ADD_EDIT_SPRINT.PLACEHOLDER_SPRINT_NAME' | translate}}") label.last-sprint-name fieldset.dates div - input.date-start(type="text", name="estimated_start", placeholder="{{'LIGHTBOX.ADD_EDIT_SPRINT.PLACEHOLDER_SPRINT_START' | translate}}", - ng-model="sprint.estimated_start", data-required="true", tg-date-selector) + input.date-start(type="text", name="estimated_start", + ng-model="sprint.estimated_start", data-required="true", tg-date-selector, + placeholder="{{'LIGHTBOX.ADD_EDIT_SPRINT.PLACEHOLDER_SPRINT_START' | translate}}") div - input.date-end(type="text", name="estimated_finish", placeholder="{{'LIGHTBOX.ADD_EDIT_SPRINT.PLACEHOLDER_SPRINT_END' | translate}}", - ng-model="sprint.estimated_finish", data-required="true", tg-date-selector) + input.date-end(type="text", name="estimated_finish", + ng-model="sprint.estimated_finish", data-required="true", tg-date-selector, + placeholder="{{'LIGHTBOX.ADD_EDIT_SPRINT.PLACEHOLDER_SPRINT_END' | translate}}") - button.button-green.submit-button(type="submit", title="{{'COMMON.CREATE' | translate}}", translate="COMMON.CREATE") + button.button-green.submit-button(type="submit", title="{{'COMMON.CREATE' | translate}}", + translate="COMMON.CREATE") div(tg-check-permission="delete_milestone") span.delete-sprint.hidden(translate) span(translate="LIGHTBOX.ADD_EDIT_SPRINT.ACTION_DELETE_SPRINT") - a.icon.icon-delete(href="", title="{{'LIGHTBOX.ADD_EDIT_SPRINT.TITLE_ACTION_DELETE_SPRINT' | translate}}") + a.icon.icon-delete(href="", + title="{{'LIGHTBOX.ADD_EDIT_SPRINT.TITLE_ACTION_DELETE_SPRINT' | translate}}") From 2170ea9e3a05a9d3ebffe31144884380be6b8a60 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 18 May 2015 12:19:21 +0200 Subject: [PATCH 157/194] Fixing translation for user stories and task sections --- app/coffee/modules/tasks/detail.coffee | 5 +++-- app/coffee/modules/userstories/detail.coffee | 5 +++-- app/locales/locale-en.json | 8 ++++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/coffee/modules/tasks/detail.coffee b/app/coffee/modules/tasks/detail.coffee index 7a567e3e..bd25d2f2 100644 --- a/app/coffee/modules/tasks/detail.coffee +++ b/app/coffee/modules/tasks/detail.coffee @@ -45,13 +45,14 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) "$appTitle", "$tgNavUrls", "$tgAnalytics", + "$translate", "tgLoader" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, - @log, @appTitle, @navUrls, @analytics, tgLoader) -> + @log, @appTitle, @navUrls, @analytics, @translate, tgLoader) -> @scope.taskRef = @params.taskref - @scope.sectionName = "Task Details" + @scope.sectionName = @translate.instant("TASK.SECTION_NAME") @.initializeEventHandlers() promise = @.loadInitialData() diff --git a/app/coffee/modules/userstories/detail.coffee b/app/coffee/modules/userstories/detail.coffee index 9c3ef7f5..79525316 100644 --- a/app/coffee/modules/userstories/detail.coffee +++ b/app/coffee/modules/userstories/detail.coffee @@ -45,13 +45,14 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) "$appTitle", "$tgNavUrls", "$tgAnalytics", + "$translate", "tgLoader" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, - @log, @appTitle, @navUrls, @analytics, tgLoader) -> + @log, @appTitle, @navUrls, @analytics, @translate, tgLoader) -> @scope.usRef = @params.usref - @scope.sectionName = "User Story Details" + @scope.sectionName = @translate.instant("US.SECTION_NAME") @.initializeEventHandlers() promise = @.loadInitialData() diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index d9caabee..03522485 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -514,7 +514,9 @@ "DELETE_ACCOUNT": { "SECTION_NAME": "Delete Taiga Account", "CONFIRM": "Are you sure you want to delete your Taiga account?", - "SUBTITLE": "We're going to miss you! :-(" + "SUBTITLE": "We're going to miss you! :-(", + "NEWSLETTER_LABEL_TEXT": "I don't wanna receive your newsletter anymore" + }, "DELETE_PROJECT": { "TITLE": "Delete project", @@ -574,6 +576,7 @@ } }, "US": { + "SECTION_NAME": "User story details", "LINK_TASKBOARD": "Taskboard", "TITLE_LINK_TASKBOARD": "Go to the taskboard", "TOTAL_POINTS": "total", @@ -760,6 +763,7 @@ } }, "TASK": { + "SECTION_NAME": "Task details", "LINK_TASKBOARD": "Taskboard", "TITLE_LINK_TASKBOARD": "Go to the taskboard", "PLACEHOLDER_SUBJECT": "Type the new task subject", @@ -855,7 +859,7 @@ }, "ISSUES": { "LIST_SECTION_NAME": "Issues", - "SECTION_NAME": "Issue Details", + "SECTION_NAME": "Issue details", "ACTION_NEW_ISSUE": "+ NEW ISSUE", "ACTION_PROMOTE_TO_US": "Promote to User Story", "PLACEHOLDER_FILTER_NAME": "Write the filter name and press enter", From 8287c572b173c98acf01523c38ff068a7f819215 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 18 May 2015 12:28:55 +0200 Subject: [PATCH 158/194] Fixing translations if uploading file when importing --- app/coffee/modules/common/importer.coffee | 2 +- app/locales/locale-en.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/common/importer.coffee b/app/coffee/modules/common/importer.coffee index f2772e45..4027bf25 100644 --- a/app/coffee/modules/common/importer.coffee +++ b/app/coffee/modules/common/importer.coffee @@ -34,7 +34,7 @@ ImportProjectButtonDirective = ($rs, $confirm, $location, $navUrls, $translate) file = event.target.files[0] return if not file - loader = $confirm.loader("Uploading dump file") + loader = $confirm.loader($translate.instant("PROJECT.IMPORT.UPLOADING_FILE")) onSuccess = (result) -> loader.stop() diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 03522485..5be06dc2 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -499,6 +499,7 @@ }, "IMPORT": { "TITLE": "Importing Project", + "UPLOADING_FILE": "Uploading dump file", "DESCRIPTION": "This process can take a while, please keep the window open.", "ASYNC_IN_PROGRESS_TITLE": "Our Oompa Loompas are importing your project", "ASYNC_IN_PROGRESS_MESSAGE": "This process could take a few minutes
We will send you an email when ready", From 89665dca5908aa7f3606bb3ca5972a0ff87a8b25 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 18 May 2015 12:37:40 +0200 Subject: [PATCH 159/194] Fixing custom attributes name and description i18n --- .../includes/modules/admin/admin-custom-attributes.jade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/partials/includes/modules/admin/admin-custom-attributes.jade b/app/partials/includes/modules/admin/admin-custom-attributes.jade index 43615cb2..1872a0a9 100644 --- a/app/partials/includes/modules/admin/admin-custom-attributes.jade +++ b/app/partials/includes/modules/admin/admin-custom-attributes.jade @@ -7,9 +7,9 @@ section.custom-fields-table.basic-table div.table-header div.row div.custom-name - span(translate="ADMIN.FIELDS.NAME") + span(translate="COMMON.FIELDS.NAME") div.custom-description - span(translate="ADMIN.FIELDS.DESCRIPTION") + span(translate="COMMON.FIELDS.DESCRIPTION") div.custom-options div.table-body From c2f6401b80b2c058b100028cc23f5330a6a643f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 18 May 2015 13:16:52 +0200 Subject: [PATCH 160/194] [i18n] Minor refactor --- app/coffee/app.coffee | 72 ++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 077d32f8..5ac84611 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -249,7 +249,40 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven if not window.taigaConfig.debugInfo $translateProvider.fallbackLanguage(preferedLangCode) - moment.locale(preferedLangCode) + +i18nInit = (lang, $translate) -> + # i18n - moment.js + moment.locale(lang) + + # i18n - checksley.js + messages = { + defaultMessage: $translate.instant("COMMON.FORM_ERRORS.DEFAULT_MESSAGE") + type: { + email: $translate.instant("COMMON.FORM_ERRORS.TYPE_EMAIL") + url: $translate.instant("COMMON.FORM_ERRORS.TYPE_URL") + urlstrict: $translate.instant("COMMON.FORM_ERRORS.TYPE_URLSTRICT") + number: $translate.instant("COMMON.FORM_ERRORS.TYPE_NUMBER") + digits: $translate.instant("COMMON.FORM_ERRORS.TYPE_DIGITS") + dateIso: $translate.instant("COMMON.FORM_ERRORS.TYPE_DATEISO") + alphanum: $translate.instant("COMMON.FORM_ERRORS.TYPE_ALPHANUM") + phone: $translate.instant("COMMON.FORM_ERRORS.TYPE_PHONE") + } + notnull: $translate.instant("COMMON.FORM_ERRORS.NOTNULL") + notblank: $translate.instant("COMMON.FORM_ERRORS.NOT_BLANK") + required: $translate.instant("COMMON.FORM_ERRORS.REQUIRED") + regexp: $translate.instant("COMMON.FORM_ERRORS.REGEXP") + min: $translate.instant("COMMON.FORM_ERRORS.MIN") + max: $translate.instant("COMMON.FORM_ERRORS.MAX") + range: $translate.instant("COMMON.FORM_ERRORS.RANGE") + minlength: $translate.instant("COMMON.FORM_ERRORS.MIN_LENGTH") + maxlength: $translate.instant("COMMON.FORM_ERRORS.MAX_LENGTH") + rangelength: $translate.instant("COMMON.FORM_ERRORS.RANGE_LENGTH") + mincheck: $translate.instant("COMMON.FORM_ERRORS.MIN_CHECK") + maxcheck: $translate.instant("COMMON.FORM_ERRORS.MAX_CHECK") + rangecheck: $translate.instant("COMMON.FORM_ERRORS.RANGE_CHECK") + equalto: $translate.instant("COMMON.FORM_ERRORS.EQUAL_TO") + } + checksley.updateMessages('default', messages) init = ($log, $config, $rootscope, $auth, $events, $analytics, $translate) -> @@ -260,41 +293,10 @@ init = ($log, $config, $rootscope, $auth, $events, $analytics, $translate) -> $rootscope.adminPlugins = _.where(@.taigaContribPlugins, {"type": "admin"}) # i18n - $rootscope.$on "$translateChangeEnd", (ctx) -> + #$rootscope.$on "$translateChangeEnd", (ctx) -> + $rootscope.$on "$translateLoadingEnd'", (ctx) -> lang = ctx.language - - # i18n - moment.js - moment.locale(lang) - - # i18n - checksley.js - messages = { - defaultMessage: $translate.instant("COMMON.FORM_ERRORS.DEFAULT_MESSAGE") - type: { - email: $translate.instant("COMMON.FORM_ERRORS.TYPE_EMAIL") - url: $translate.instant("COMMON.FORM_ERRORS.TYPE_URL") - urlstrict: $translate.instant("COMMON.FORM_ERRORS.TYPE_URLSTRICT") - number: $translate.instant("COMMON.FORM_ERRORS.TYPE_NUMBER") - digits: $translate.instant("COMMON.FORM_ERRORS.TYPE_DIGITS") - dateIso: $translate.instant("COMMON.FORM_ERRORS.TYPE_DATEISO") - alphanum: $translate.instant("COMMON.FORM_ERRORS.TYPE_ALPHANUM") - phone: $translate.instant("COMMON.FORM_ERRORS.TYPE_PHONE") - } - notnull: $translate.instant("COMMON.FORM_ERRORS.NOTNULL") - notblank: $translate.instant("COMMON.FORM_ERRORS.NOT_BLANK") - required: $translate.instant("COMMON.FORM_ERRORS.REQUIRED") - regexp: $translate.instant("COMMON.FORM_ERRORS.REGEXP") - min: $translate.instant("COMMON.FORM_ERRORS.MIN") - max: $translate.instant("COMMON.FORM_ERRORS.MAX") - range: $translate.instant("COMMON.FORM_ERRORS.RANGE") - minlength: $translate.instant("COMMON.FORM_ERRORS.MIN_LENGTH") - maxlength: $translate.instant("COMMON.FORM_ERRORS.MAX_LENGTH") - rangelength: $translate.instant("COMMON.FORM_ERRORS.RANGE_LENGTH") - mincheck: $translate.instant("COMMON.FORM_ERRORS.MIN_CHECK") - maxcheck: $translate.instant("COMMON.FORM_ERRORS.MAX_CHECK") - rangecheck: $translate.instant("COMMON.FORM_ERRORS.RANGE_CHECK") - equalto: $translate.instant("COMMON.FORM_ERRORS.EQUAL_TO") - } - checksley.updateMessages('default', messages) + i18nInit(lang, $translate) # Load user if $auth.isAuthenticated() From 452cd118de9d5379414bce0932fe6c87bdae0f7d Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 18 May 2015 13:50:44 +0200 Subject: [PATCH 161/194] Fixing custom fields i18n --- app/coffee/modules/common/custom-field-values.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/coffee/modules/common/custom-field-values.coffee b/app/coffee/modules/common/custom-field-values.coffee index cbf788cf..8203d59f 100644 --- a/app/coffee/modules/common/custom-field-values.coffee +++ b/app/coffee/modules/common/custom-field-values.coffee @@ -170,11 +170,13 @@ CustomAttributeValueDirective = ($template, $selectedText, $compile) -> return if $selectedText.get().length render(attributeValue, true) $el.find("input[name='description']").focus().select() + $scope.$apply() $el.on "click", "a.icon-edit", (event) -> event.preventDefault() render(attributeValue, true) $el.find("input[name='description']").focus().select() + $scope.$apply() ## Actions (on edit mode) submit = debounce 2000, (event) => From 60654986721eba1e51db5a8fa9f8a0f148ae74b3 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 18 May 2015 13:55:55 +0200 Subject: [PATCH 162/194] Fixing typo in attachment.description id --- app/locales/locale-en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 5be06dc2..26ab2627 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -200,7 +200,7 @@ "ATTACHMENT": { "SECTION_NAME": "attachments", "TITLE": "{{ fileName }} uploaded on {{ date }}", - "DESCIPTION": "Type a short description", + "DESCRIPTION": "Type a short description", "DEPRECATED_FILE": "Deprecated?", "ADD": "Add new attachment. <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Max. size: {{maxFileSize}}]", From 74615453d926c2f3d76cc0134f6a4375da4efc10 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 18 May 2015 14:15:08 +0200 Subject: [PATCH 163/194] Fixing save filter i18n --- app/coffee/modules/issues/list.coffee | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index 86465b19..96e84543 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -440,7 +440,7 @@ module.directive("tgIssues", ["$log", "$tgLocation", "$tgTemplate", "$compile", ## Issues Filters Directive ############################################################################# -IssuesFiltersDirective = ($log, $location, $rs, $confirm, $loading, $template, $translate) -> +IssuesFiltersDirective = ($log, $location, $rs, $confirm, $loading, $template, $translate, $compile) -> template = $template.get("issue/issues-filters.html", true) templateSelected = $template.get("issue/issues-filters-selected.html", true) @@ -474,6 +474,7 @@ IssuesFiltersDirective = ($log, $location, $rs, $confirm, $loading, $template, $ f.style = "border-left: 3px solid #{f.color}" html = templateSelected({filters:selectedFilters}) + html = $compile(html)($scope) $el.find(".filters-applied").html(html) if selectedFilters.length > 0 @@ -487,6 +488,7 @@ IssuesFiltersDirective = ($log, $location, $rs, $confirm, $loading, $template, $ f.style = "border-left: 3px solid #{f.color}" html = template({filters:filters}) + html = $compile(html)($scope) $el.find(".filter-list").html(html) toggleFilterSelection = (type, id) -> @@ -539,6 +541,7 @@ IssuesFiltersDirective = ($log, $location, $rs, $confirm, $loading, $template, $ $scope.$on "filters:issueupdate", (ctx, filters) -> html = template({filters:filters.statuses}) + html = $compile(html)($scope) $el.find(".filter-list").html(html) selectQFilter = debounceLeading 100, (value) -> @@ -621,6 +624,7 @@ IssuesFiltersDirective = ($log, $location, $rs, $confirm, $loading, $template, $ $el.find('.save-filters').hide() $el.find('.my-filter-name').removeClass("hidden") $el.find('.my-filter-name').focus() + $scope.$apply() $el.on "keyup", ".my-filter-name", (event) -> event.preventDefault() @@ -659,7 +663,7 @@ IssuesFiltersDirective = ($log, $location, $rs, $confirm, $loading, $template, $ return {link:link} module.directive("tgIssuesFilters", ["$log", "$tgLocation", "$tgResources", "$tgConfirm", "$tgLoading", - "$tgTemplate", "$translate", IssuesFiltersDirective]) + "$tgTemplate", "$translate", "$compile", IssuesFiltersDirective]) ############################################################################# From 58ae20a08c6882c8c1664db021a6b99e4be5a2aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 18 May 2015 14:39:41 +0200 Subject: [PATCH 164/194] [i18n] Translate the picker date --- app/coffee/modules/common/components.coffee | 44 +++++++-- app/locales/locale-ca.json | 47 ++++++++- app/locales/locale-en.json | 39 ++++++++ app/locales/locale-es.json | 49 +++++++++- app/locales/locale-fi.json | 47 ++++++++- app/locales/locale-fr.json | 47 ++++++++- app/locales/locale-zh-hant.json | 101 ++++++++++++++------ 7 files changed, 330 insertions(+), 44 deletions(-) diff --git a/app/coffee/modules/common/components.coffee b/app/coffee/modules/common/components.coffee index 78c07d94..fdd2055a 100644 --- a/app/coffee/modules/common/components.coffee +++ b/app/coffee/modules/common/components.coffee @@ -56,12 +56,44 @@ DateSelectorDirective = ($translate) -> link = ($scope, $el, $attrs, $model) -> selectedDate = null $el.picker = new Pikaday({ - field: $el[0] - format: $translate.instant("COMMON.DATE") - onSelect: (date) => - selectedDate = date - onOpen: => - $el.picker.setDate(selectedDate) if selectedDate? + field: $el[0] + onSelect: (date) => + selectedDate = date + onOpen: => + $el.picker.setDate(selectedDate) if selectedDate? + i18n: { + previousMonth: $translate.instant("COMMON.PICKERDATE.PREV_MONTH"), + nextMonth: $translate.instant("COMMON.PICKERDATE.NEXT_MONTH"), + months: [$translate.instant("COMMON.PICKERDATE.MONTHS.JAN"), + $translate.instant("COMMON.PICKERDATE.MONTHS.FEB"), + $translate.instant("COMMON.PICKERDATE.MONTHS.MAR"), + $translate.instant("COMMON.PICKERDATE.MONTHS.APR"), + $translate.instant("COMMON.PICKERDATE.MONTHS.MAY"), + $translate.instant("COMMON.PICKERDATE.MONTHS.JUN"), + $translate.instant("COMMON.PICKERDATE.MONTHS.JUL"), + $translate.instant("COMMON.PICKERDATE.MONTHS.AUG"), + $translate.instant("COMMON.PICKERDATE.MONTHS.SEP"), + $translate.instant("COMMON.PICKERDATE.MONTHS.OCT"), + $translate.instant("COMMON.PICKERDATE.MONTHS.NOV"), + $translate.instant("COMMON.PICKERDATE.MONTHS.DEC")], + weekdays: [$translate.instant("COMMON.PICKERDATE.WEEK_DAYS.SUN"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.MON"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.TUE"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.WED"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.THU"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.FRI"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.SAT")], + weekdaysShort: [$translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.SUN"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.MON"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.TUE"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.WED"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.THU"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.FRI"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.SAT")] + }, + isRTL: $translate.instant("COMMON.PICKERDATE.IS_RTL") == "true", + firstDay: parseInt($translate.instant("COMMON.PICKERDATE.FIRST_DAY_OF_WEEK"), 10), + format: $translate.instant("COMMON.PICKERDATE.FORMAT") }) $scope.$watch $attrs.ngModel, (val) -> diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 97a09c4c..54c99bc5 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -61,6 +61,45 @@ "RANGE_CHECK": "You must select between %s and %s choices.", "EQUAL_TO": "This value should be the same." }, + "PICKERDATE": { + "FORMAT": "DD/MM/YYYY", + "IS_RTL": "false", + "FIRST_DAY_OF_WEEK": "1", + "PREV_MONTH": "Previous Month", + "NEXT_MONTH": "Next Month", + "MONTHS": { + "JAN": "January", + "FEB": "February", + "MAR": "March", + "APR": "April", + "MAY": "May", + "JUN": "June", + "JUL": "July", + "AUG": "August", + "SEP": "September", + "OCT": "October", + "NOV": "November", + "DEC": "December" + }, + "WEEK_DAYS": { + "SUN": "Sunday", + "MON": "Monday", + "TUE": "Tuesday", + "WED": "Wednesday", + "THU": "Thursday", + "FRI": "Friday", + "SAT": "Saturday" + }, + "WEEK_DAYS_SHORT": { + "SUN": "Sun", + "MON": "Mon", + "TUE": "Tue", + "WED": "Wed", + "THU": "Thu", + "FRI": "Fri", + "SAT": "Sat" + } + }, "TAGS": { "PLACEHOLDER": "Afegir tag", "DELETE": "Esborrar tag", @@ -499,6 +538,7 @@ }, "IMPORT": { "TITLE": "Important Projecte", + "UPLOADING_FILE": "Uploading dump file", "DESCRIPTION": "Aquest procés pot durar una mica, pero favor mantinga la finestra oberta", "ASYNC_IN_PROGRESS_TITLE": "Els Oompa Loompas estàn important el teu projecte", "ASYNC_IN_PROGRESS_MESSAGE": "Aquest procés pot durar uns moments
T'enviarem un correo quan estiga llest.", @@ -514,7 +554,8 @@ "DELETE_ACCOUNT": { "SECTION_NAME": "Esborrar compte de Taiga", "CONFIRM": "Segur que vols borrar el teu compte de Taiga? ", - "SUBTITLE": "Te trobarem a faltar! :-(" + "SUBTITLE": "Te trobarem a faltar! :-(", + "NEWSLETTER_LABEL_TEXT": "I don't wanna receive your newsletter anymore" }, "DELETE_PROJECT": { "TITLE": "Esborrar projecte", @@ -574,6 +615,7 @@ } }, "US": { + "SECTION_NAME": "User story details", "LINK_TASKBOARD": "Panell de tasques", "TITLE_LINK_TASKBOARD": "Anar a panell de tasques", "TOTAL_POINTS": "total", @@ -759,6 +801,7 @@ } }, "TASK": { + "SECTION_NAME": "Task details", "LINK_TASKBOARD": "Panell de tasques", "TITLE_LINK_TASKBOARD": "Anar a panell de tasques", "PLACEHOLDER_SUBJECT": "Afegix la descripció de la tasca", @@ -854,7 +897,7 @@ }, "ISSUES": { "LIST_SECTION_NAME": "Incidències", - "SECTION_NAME": "Detalls de incidència", + "SECTION_NAME": "Issue details", "ACTION_NEW_ISSUE": "+ NOVA INCIDÈNCIA", "ACTION_PROMOTE_TO_US": "Promocionar història d'usuari", "PLACEHOLDER_FILTER_NAME": "Escriu el filtre i pressiona Intro", diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 26ab2627..310244b2 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -61,6 +61,45 @@ "RANGE_CHECK": "You must select between %s and %s choices.", "EQUAL_TO": "This value should be the same." }, + "PICKERDATE": { + "FORMAT": "DD/MM/YYYY", + "IS_RTL": "false", + "FIRST_DAY_OF_WEEK": "1", + "PREV_MONTH": "Previous Month", + "NEXT_MONTH": "Next Month", + "MONTHS": { + "JAN": "January", + "FEB": "February", + "MAR": "March", + "APR": "April", + "MAY": "May", + "JUN": "June", + "JUL": "July", + "AUG": "August", + "SEP": "September", + "OCT": "October", + "NOV": "November", + "DEC": "December" + }, + "WEEK_DAYS": { + "SUN": "Sunday", + "MON": "Monday", + "TUE": "Tuesday", + "WED": "Wednesday", + "THU": "Thursday", + "FRI": "Friday", + "SAT": "Saturday" + }, + "WEEK_DAYS_SHORT": { + "SUN": "Sun", + "MON": "Mon", + "TUE": "Tue", + "WED": "Wed", + "THU": "Thu", + "FRI": "Fri", + "SAT": "Sat" + } + }, "TAGS": { "PLACEHOLDER": "I'm it! Tag me...", "DELETE": "Delete tag", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index f378746e..44856584 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -61,6 +61,45 @@ "RANGE_CHECK": "Debes seleccionar de %s a %s.", "EQUAL_TO": "Este valor debe ser el mismo." }, + "PICKERDATE": { + "FORMAT": "DD/MM/YYYY", + "IS_RTL": "false", + "FIRST_DAY_OF_WEEK": "1", + "PREV_MONTH": "Mes Anterior", + "NEXT_MONTH": "Mes Siguiente", + "MONTHS": { + "JAN": "Enero", + "FEB": "Febrero", + "MAR": "Marzo", + "APR": "Abril", + "MAY": "Mayo", + "JUN": "Junio", + "JUL": "Julio", + "AUG": "Agosto", + "SEP": "Septiembre", + "OCT": "Octubre", + "NOV": "Noviembre", + "DEC": "Diciembre" + }, + "WEEK_DAYS": { + "SUN": "Domingo", + "MON": "Lunes", + "TUE": "Martes", + "WED": "Miércoles", + "THU": "Jueves", + "FRI": "Viernes", + "SAT": "Sábado" + }, + "WEEK_DAYS_SHORT": { + "SUN": "Dom", + "MON": "Lun", + "TUE": "Mar", + "WED": "Mie", + "THU": "Jue", + "FRI": "Vie", + "SAT": "Dom" + } + }, "TAGS": { "PLACEHOLDER": "¿Qué soy? Etiquétame...", "DELETE": "Borrar etiqueta", @@ -499,6 +538,7 @@ }, "IMPORT": { "TITLE": "Importando Proyecto", + "UPLOADING_FILE": "Subiendo el fichero con el volcado de datos", "DESCRIPTION": "Este proceso puede tardar un ratito, por favor mantén la ventana abierta.", "ASYNC_IN_PROGRESS_TITLE": "Nuestros Oompa Loompa están importando tu proyecto", "ASYNC_IN_PROGRESS_MESSAGE": "Este proceso puede llevarnos algún tiempo
Te enviaremos un email cuando esté listo", @@ -514,7 +554,8 @@ "DELETE_ACCOUNT": { "SECTION_NAME": "Eliminar cuenta de Taiga", "CONFIRM": "¿Está seguro que deseas eliminar tu cuenta de Taiga?", - "SUBTITLE": "¡Te extrañaremos! :-(" + "SUBTITLE": "¡Te extrañaremos! :-(", + "NEWSLETTER_LABEL_TEXT": "No quiero recibir la newsletter nunca más." }, "DELETE_PROJECT": { "TITLE": "Borrar proyecto", @@ -574,6 +615,7 @@ } }, "US": { + "SECTION_NAME": "Detalles de historia de usuario", "LINK_TASKBOARD": "Panel de tareas", "TITLE_LINK_TASKBOARD": "Ir al panel de tareas", "TOTAL_POINTS": "total", @@ -759,6 +801,7 @@ } }, "TASK": { + "SECTION_NAME": "Detalles de tarea", "LINK_TASKBOARD": "Panel de tereas", "TITLE_LINK_TASKBOARD": "Ir al panel de tareas", "PLACEHOLDER_SUBJECT": "Escribe el asunto de la nueva tarea", @@ -854,7 +897,7 @@ }, "ISSUES": { "LIST_SECTION_NAME": "Peticiones", - "SECTION_NAME": "Detalles de la petición", + "SECTION_NAME": "Detalles de petición", "ACTION_NEW_ISSUE": "+ NUEVA PETICIÓN", "ACTION_PROMOTE_TO_US": "Promover a Historia de Usuario", "PLACEHOLDER_FILTER_NAME": "Escribe un nombre para el filtro y pulsa enter", @@ -926,7 +969,7 @@ "UNDO_ARCHIVED": "Arrástrala y suéltala de nuevo para deshacer el cambio" }, "SEARCH": { - "FILTER_USER_STORIES": "Usar Historia", + "FILTER_USER_STORIES": "Historias de Usuario", "FILTER_ISSUES": "Peticiones", "FILTER_TASKS": "Tareas", "FILTER_WIKI": "Páginas del Wiki", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index 9c8b94b6..155e9047 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -61,6 +61,45 @@ "RANGE_CHECK": "You must select between %s and %s choices.", "EQUAL_TO": "This value should be the same." }, + "PICKERDATE": { + "FORMAT": "DD/MM/YYYY", + "IS_RTL": "false", + "FIRST_DAY_OF_WEEK": "1", + "PREV_MONTH": "Previous Month", + "NEXT_MONTH": "Next Month", + "MONTHS": { + "JAN": "January", + "FEB": "February", + "MAR": "March", + "APR": "April", + "MAY": "May", + "JUN": "June", + "JUL": "July", + "AUG": "August", + "SEP": "September", + "OCT": "October", + "NOV": "November", + "DEC": "December" + }, + "WEEK_DAYS": { + "SUN": "Sunday", + "MON": "Monday", + "TUE": "Tuesday", + "WED": "Wednesday", + "THU": "Thursday", + "FRI": "Friday", + "SAT": "Saturday" + }, + "WEEK_DAYS_SHORT": { + "SUN": "Sun", + "MON": "Mon", + "TUE": "Tue", + "WED": "Wed", + "THU": "Thu", + "FRI": "Fri", + "SAT": "Sat" + } + }, "TAGS": { "PLACEHOLDER": "Anna avainsana...", "DELETE": "Poista avainsana", @@ -499,6 +538,7 @@ }, "IMPORT": { "TITLE": "Luetaan sisään projektia", + "UPLOADING_FILE": "Uploading dump file", "DESCRIPTION": "Tämä voi kestää hetken, pidä ikkuna auki.", "ASYNC_IN_PROGRESS_TITLE": " Oompa Loompas tuovat projektia", "ASYNC_IN_PROGRESS_MESSAGE": "Tämä voi kestää muutaman minuutin
Lähetämme sähköpostin on valmista", @@ -514,7 +554,8 @@ "DELETE_ACCOUNT": { "SECTION_NAME": "Poista Taiga-tunnus", "CONFIRM": "Haluatko varmasti poistaa Taiga-tunnuksesi?", - "SUBTITLE": "Tulemme kaipaamaan sinua! :-(" + "SUBTITLE": "Tulemme kaipaamaan sinua! :-(", + "NEWSLETTER_LABEL_TEXT": "I don't wanna receive your newsletter anymore" }, "DELETE_PROJECT": { "TITLE": "Poista projekti", @@ -574,6 +615,7 @@ } }, "US": { + "SECTION_NAME": "User story details", "LINK_TASKBOARD": "Tehtävätaulu", "TITLE_LINK_TASKBOARD": "Siirry tehtävätauluun", "TOTAL_POINTS": "yhteensä", @@ -759,6 +801,7 @@ } }, "TASK": { + "SECTION_NAME": "Task details", "LINK_TASKBOARD": "Tehtävätaulu", "TITLE_LINK_TASKBOARD": "Siirry tehtävätauluun", "PLACEHOLDER_SUBJECT": "Anna tehtävän aihe", @@ -854,7 +897,7 @@ }, "ISSUES": { "LIST_SECTION_NAME": "Pyynnöt", - "SECTION_NAME": "Pyyntöjen tiedot", + "SECTION_NAME": "Issue details", "ACTION_NEW_ISSUE": "+ UUSI PYYNTÖ", "ACTION_PROMOTE_TO_US": "Liitä käyttäjätarinaan", "PLACEHOLDER_FILTER_NAME": "Anna suodattimen nimi ja paina enter", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 606e2df2..6ad4cd16 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -61,6 +61,45 @@ "RANGE_CHECK": "You must select between %s and %s choices.", "EQUAL_TO": "This value should be the same." }, + "PICKERDATE": { + "FORMAT": "DD/MM/YYYY", + "IS_RTL": "false", + "FIRST_DAY_OF_WEEK": "1", + "PREV_MONTH": "Previous Month", + "NEXT_MONTH": "Next Month", + "MONTHS": { + "JAN": "January", + "FEB": "February", + "MAR": "March", + "APR": "April", + "MAY": "May", + "JUN": "June", + "JUL": "July", + "AUG": "August", + "SEP": "September", + "OCT": "October", + "NOV": "November", + "DEC": "December" + }, + "WEEK_DAYS": { + "SUN": "Sunday", + "MON": "Monday", + "TUE": "Tuesday", + "WED": "Wednesday", + "THU": "Thursday", + "FRI": "Friday", + "SAT": "Saturday" + }, + "WEEK_DAYS_SHORT": { + "SUN": "Sun", + "MON": "Mon", + "TUE": "Tue", + "WED": "Wed", + "THU": "Thu", + "FRI": "Fri", + "SAT": "Sat" + } + }, "TAGS": { "PLACEHOLDER": "Taggez moi !", "DELETE": "Supprimer l'étiquette", @@ -499,6 +538,7 @@ }, "IMPORT": { "TITLE": "Import du projet en cours", + "UPLOADING_FILE": "Uploading dump file", "DESCRIPTION": "Ce processus peut prendre du temps, veuillez garder cette fenêtre ouverte.", "ASYNC_IN_PROGRESS_TITLE": "Nos Oompas Loompas sont en train d'importer votre projet", "ASYNC_IN_PROGRESS_MESSAGE": "Ce processus pourrait durer plusieurs minutes
Nous vous enverrons un emai quand ce sera prêt", @@ -514,7 +554,8 @@ "DELETE_ACCOUNT": { "SECTION_NAME": "Supprimer le compte Taiga", "CONFIRM": "Etes-vous sûr de vouloir votre compte Taiga ?", - "SUBTITLE": "Vous allez nous manquer :(" + "SUBTITLE": "Vous allez nous manquer :(", + "NEWSLETTER_LABEL_TEXT": "I don't wanna receive your newsletter anymore" }, "DELETE_PROJECT": { "TITLE": "Supprimer le projet", @@ -574,6 +615,7 @@ } }, "US": { + "SECTION_NAME": "User story details", "LINK_TASKBOARD": "Tableau des tâches", "TITLE_LINK_TASKBOARD": "Aller au tableau des tâches", "TOTAL_POINTS": "total", @@ -759,6 +801,7 @@ } }, "TASK": { + "SECTION_NAME": "Task details", "LINK_TASKBOARD": "Tableau des tâches", "TITLE_LINK_TASKBOARD": "Aller au tableau des tâches", "PLACEHOLDER_SUBJECT": "Entrez le sujet de la nouvelle tâche", @@ -854,7 +897,7 @@ }, "ISSUES": { "LIST_SECTION_NAME": "Problèmes", - "SECTION_NAME": "Détails du problème", + "SECTION_NAME": "Issue details", "ACTION_NEW_ISSUE": "+ NOUVEAU PROBLÈME", "ACTION_PROMOTE_TO_US": "Transformer en User Story", "PLACEHOLDER_FILTER_NAME": "Écrivez le nom du filtre et appuyez sur \"Entrée\"", diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index 23063cbe..5fd14f85 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -37,29 +37,68 @@ "GENERIC_ERROR": "我們的系統指出{{error}}.", "IOCAINE_TEXT": "感到任務的不堪負荷?確認其它人在編輯任務時知道此狀況,可以點選Iocaine。它可能會成為免疫的致命狀況,只要長期小量消耗,但如果你只是偶而挑戰它可有助表現。", "FORM_ERRORS": { - "DEFAULT_MESSAGE": "This value seems to be invalid.", - "TYPE_EMAIL": "This value should be a valid email.", - "TYPE_URL": "This value should be a valid url.", - "TYPE_URLSTRICT": "This value should be a valid url.", - "TYPE_NUMBER": "This value should be a valid number.", - "TYPE_DIGITS": "This value should be digits.", - "TYPE_DATEISO": "This value should be a valid date (YYYY-MM-DD).", - "TYPE_ALPHANUM": "This value should be alphanumeric.", - "TYPE_PHONE": "This value should be a valid phone number.", - "NOTNULL": "This value should not be null.", - "NOT_BLANK": "This value should not be blank.", - "REQUIRED": "This value is required.", - "REGEXP": "This value seems to be invalid.", - "MIN": "This value should be greater than or equal to %s.", - "MAX": "This value should be lower than or equal to %s.", - "RANGE": "This value should be between %s and %s.", - "MIN_LENGTH": "This value is too short. It should have %s characters or more.", - "MAX_LENGTH": "This value is too long. It should have %s characters or less.", - "RANGE_LENGTH": "This value length is invalid. It should be between %s and %s characters long.", - "MIN_CHECK": "You must select at least %s choices.", - "MAX_CHECK": "You must select %s choices or less.", - "RANGE_CHECK": "You must select between %s and %s choices.", - "EQUAL_TO": "This value should be the same." + "DEFAULT_MESSAGE": "該數值似乎為無效", + "TYPE_EMAIL": "該電子郵件應為有效地址", + "TYPE_URL": "該網址應為有效連結", + "TYPE_URLSTRICT": "該網址應為有效連結", + "TYPE_NUMBER": "該數值應為有效號碼 ", + "TYPE_DIGITS": "該數值應為有效數字", + "TYPE_DATEISO": "該數值應為有效日期 (YYYY-MM-DD).", + "TYPE_ALPHANUM": "該數值應為字母", + "TYPE_PHONE": "該數值應為有效的電話號碼 ", + "NOTNULL": "該數值不應為零", + "NOT_BLANK": "該數值不應為空白", + "REQUIRED": "該數值為必要", + "REGEXP": "該數值似乎無效", + "MIN": "該數值應大於或等於 %s", + "MAX": "該數值應小於或等於 %s", + "RANGE": "該數值應介於 %s 與 %s之間", + "MIN_LENGTH": "該數值過簡短,它至少要有 %s個字元", + "MAX_LENGTH": "該數值過長,它不可多於 %s個字元。", + "RANGE_LENGTH": "該數值長度為無效,它應介於 %s 與 %s 字元之間", + "MIN_CHECK": "你必須至少選擇 %s 選項", + "MAX_CHECK": "你必須至多選出 %s選項", + "RANGE_CHECK": "你必須在%s 與 %s 之間作出選擇", + "EQUAL_TO": "該數值應為一致" + }, + "PICKERDATE": { + "FORMAT": "DD/MM/YYYY", + "IS_RTL": "false", + "FIRST_DAY_OF_WEEK": "1", + "PREV_MONTH": "Previous Month", + "NEXT_MONTH": "Next Month", + "MONTHS": { + "JAN": "January", + "FEB": "February", + "MAR": "March", + "APR": "April", + "MAY": "May", + "JUN": "June", + "JUL": "July", + "AUG": "August", + "SEP": "September", + "OCT": "October", + "NOV": "November", + "DEC": "December" + }, + "WEEK_DAYS": { + "SUN": "Sunday", + "MON": "Monday", + "TUE": "Tuesday", + "WED": "Wednesday", + "THU": "Thursday", + "FRI": "Friday", + "SAT": "Saturday" + }, + "WEEK_DAYS_SHORT": { + "SUN": "Sun", + "MON": "Mon", + "TUE": "Tue", + "WED": "Wed", + "THU": "Thu", + "FRI": "Fri", + "SAT": "Sat" + } }, "TAGS": { "PLACEHOLDER": "我在這裏,請標注我", @@ -490,7 +529,7 @@ "ADMIN": "管理者" }, "NAVIGATION": { - "SECTION_TITLE": "Your projects", + "SECTION_TITLE": "你的專案", "PLACEHOLDER_SEARCH": "搜尋", "ACTION_CREATE_PROJECT": "創建專案", "TITLE_ACTION_IMPORT": "滙入專案", @@ -499,14 +538,15 @@ }, "IMPORT": { "TITLE": "滙入專案中", + "UPLOADING_FILE": "Uploading dump file", "DESCRIPTION": "這個過桯要花點時間,請保持视窗開啟", "ASYNC_IN_PROGRESS_TITLE": "我們的工程師對你的專案很重要哦", "ASYNC_IN_PROGRESS_MESSAGE": "這個過程要花上一點時間
當弄好時我們會發給你一封郵件", - "UPLOAD_IN_PROGRESS_MESSAGE": "Uploaded {{uploadedSize}} of {{totalSize}}", + "UPLOAD_IN_PROGRESS_MESSAGE": "已上傳 {{totalSize}}中的{{uploadedSize}} ", "ERROR": "系統在滙進你倒入的資料時遇上一些問題,請再試一次", "ERROR_TOO_MANY_REQUEST": "抱歉系統繁忙中,請稍後再試試 ", "ERROR_MESSAGE": "我們的系統無法滙入你的資料", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})", "SYNC_SUCCESS": "你的專案已成功滙入" } }, @@ -514,7 +554,8 @@ "DELETE_ACCOUNT": { "SECTION_NAME": "刪除Taiga帳戶", "CONFIRM": "你確定要刪除Taiga帳戶嗎?", - "SUBTITLE": "我們會想念你:-(" + "SUBTITLE": "我們會想念你:-(", + "NEWSLETTER_LABEL_TEXT": "I don't wanna receive your newsletter anymore" }, "DELETE_PROJECT": { "TITLE": "刪除專案", @@ -574,6 +615,7 @@ } }, "US": { + "SECTION_NAME": "User story details", "LINK_TASKBOARD": "任務板", "TITLE_LINK_TASKBOARD": "到任務板去", "TOTAL_POINTS": "全部", @@ -759,6 +801,7 @@ } }, "TASK": { + "SECTION_NAME": "Task details", "LINK_TASKBOARD": "任務板", "TITLE_LINK_TASKBOARD": "到任務板去", "PLACEHOLDER_SUBJECT": "鍵入新任務主旨", @@ -843,7 +886,7 @@ "ERROR": "按我們的記錄,你尚未註冊或是未輸入有效的密碼 " }, "REGISTER_FORM": { - "TITLE": "Register a new Taiga account (free)", + "TITLE": "註冊一個新的Taiga帳戶(免費 )", "PLACEHOLDER_NAME": "選一個用戶帳號(注意大小寫)", "PLACEHOLDER_FULL_NAME": "選取你的全名", "PLACEHOLDER_EMAIL": "你的電子郵件", @@ -854,7 +897,7 @@ }, "ISSUES": { "LIST_SECTION_NAME": "問題 ", - "SECTION_NAME": "問題細節", + "SECTION_NAME": "Issue details", "ACTION_NEW_ISSUE": "+ 新問題 ", "ACTION_PROMOTE_TO_US": "提昇到使用者故事", "PLACEHOLDER_FILTER_NAME": "寫入過濾器名稱後按下enter ", From d2600453a742feadb3194c7da9184d8d101c0ed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 18 May 2015 14:44:48 +0200 Subject: [PATCH 165/194] [i18n] Fix a typo --- app/locales/locale-es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 44856584..b707036a 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -97,7 +97,7 @@ "WED": "Mie", "THU": "Jue", "FRI": "Vie", - "SAT": "Dom" + "SAT": "Sáb" } }, "TAGS": { From dcc84d9ae86ef9e5951b2b7dd6f6a7466275f2d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 18 May 2015 16:55:55 +0200 Subject: [PATCH 166/194] [i18n] Minor fixes --- app/coffee/app.coffee | 7 +- app/coffee/modules/backlog/lightboxes.coffee | 4 +- app/coffee/modules/common/components.coffee | 96 +++++++++++--------- app/locales/locale-ca.json | 4 +- app/locales/locale-en.json | 2 +- app/locales/locale-es.json | 4 +- app/locales/locale-fi.json | 4 +- app/locales/locale-fr.json | 4 +- app/locales/locale-zh-hant.json | 4 +- 9 files changed, 71 insertions(+), 58 deletions(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 5ac84611..5489568b 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -196,7 +196,8 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven responseError: httpResponseError } - $provide.factory("authHttpIntercept", ["$q", "$location", "$tgNavUrls", "lightboxService", authHttpIntercept]) + $provide.factory("authHttpIntercept", ["$q", "$location", "$tgNavUrls", "lightboxService", + authHttpIntercept]) $httpProvider.interceptors.push("authHttpIntercept") @@ -292,9 +293,7 @@ init = ($log, $config, $rootscope, $auth, $events, $analytics, $translate) -> $rootscope.contribPlugins = @.taigaContribPlugins $rootscope.adminPlugins = _.where(@.taigaContribPlugins, {"type": "admin"}) - # i18n - #$rootscope.$on "$translateChangeEnd", (ctx) -> - $rootscope.$on "$translateLoadingEnd'", (ctx) -> + $rootscope.$on "$translateLoadingEnd", (e, ctx) -> lang = ctx.language i18nInit(lang, $translate) diff --git a/app/coffee/modules/backlog/lightboxes.coffee b/app/coffee/modules/backlog/lightboxes.coffee index ed267727..99f19a81 100644 --- a/app/coffee/modules/backlog/lightboxes.coffee +++ b/app/coffee/modules/backlog/lightboxes.coffee @@ -33,7 +33,6 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, link = ($scope, $el, attrs) -> hasErrors = false createSprint = true - prettyDate = $translate.instant("BACKLOG.SPRINTS.DATE") $scope.sprint = { project: null @@ -107,6 +106,7 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, form.reset() createSprint = true + prettyDate = $translate.instant("COMMON.PICKERDATE.FORMAT") $scope.sprint.project = projectId $scope.sprint.name = null $scope.sprint.slug = null @@ -147,6 +147,8 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, $scope.$on "sprintform:edit", (ctx, sprint) -> createSprint = false + prettyDate = $translate.instant("COMMON.PICKERDATE.FORMAT") + $scope.$apply -> $scope.sprint = sprint $scope.sprint.estimated_start = moment($scope.sprint.estimated_start).format(prettyDate) diff --git a/app/coffee/modules/common/components.coffee b/app/coffee/modules/common/components.coffee index fdd2055a..14130067 100644 --- a/app/coffee/modules/common/components.coffee +++ b/app/coffee/modules/common/components.coffee @@ -52,59 +52,68 @@ module.directive("tgDateRange", ["$translate", DateRangeDirective]) ## Date Selector Directive (using pikaday) ############################################################################# -DateSelectorDirective = ($translate) -> +DateSelectorDirective = ($rootscope, $translate) -> link = ($scope, $el, $attrs, $model) -> selectedDate = null - $el.picker = new Pikaday({ - field: $el[0] - onSelect: (date) => - selectedDate = date - onOpen: => - $el.picker.setDate(selectedDate) if selectedDate? - i18n: { - previousMonth: $translate.instant("COMMON.PICKERDATE.PREV_MONTH"), - nextMonth: $translate.instant("COMMON.PICKERDATE.NEXT_MONTH"), - months: [$translate.instant("COMMON.PICKERDATE.MONTHS.JAN"), - $translate.instant("COMMON.PICKERDATE.MONTHS.FEB"), - $translate.instant("COMMON.PICKERDATE.MONTHS.MAR"), - $translate.instant("COMMON.PICKERDATE.MONTHS.APR"), - $translate.instant("COMMON.PICKERDATE.MONTHS.MAY"), - $translate.instant("COMMON.PICKERDATE.MONTHS.JUN"), - $translate.instant("COMMON.PICKERDATE.MONTHS.JUL"), - $translate.instant("COMMON.PICKERDATE.MONTHS.AUG"), - $translate.instant("COMMON.PICKERDATE.MONTHS.SEP"), - $translate.instant("COMMON.PICKERDATE.MONTHS.OCT"), - $translate.instant("COMMON.PICKERDATE.MONTHS.NOV"), - $translate.instant("COMMON.PICKERDATE.MONTHS.DEC")], - weekdays: [$translate.instant("COMMON.PICKERDATE.WEEK_DAYS.SUN"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.MON"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.TUE"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.WED"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.THU"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.FRI"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.SAT")], - weekdaysShort: [$translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.SUN"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.MON"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.TUE"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.WED"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.THU"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.FRI"), - $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.SAT")] - }, - isRTL: $translate.instant("COMMON.PICKERDATE.IS_RTL") == "true", - firstDay: parseInt($translate.instant("COMMON.PICKERDATE.FIRST_DAY_OF_WEEK"), 10), - format: $translate.instant("COMMON.PICKERDATE.FORMAT") - }) + + initialize = () -> + $el.picker = new Pikaday({ + field: $el[0] + onSelect: (date) => + selectedDate = date + onOpen: => + $el.picker.setDate(selectedDate) if selectedDate? + i18n: { + previousMonth: $translate.instant("COMMON.PICKERDATE.PREV_MONTH"), + nextMonth: $translate.instant("COMMON.PICKERDATE.NEXT_MONTH"), + months: [$translate.instant("COMMON.PICKERDATE.MONTHS.JAN"), + $translate.instant("COMMON.PICKERDATE.MONTHS.FEB"), + $translate.instant("COMMON.PICKERDATE.MONTHS.MAR"), + $translate.instant("COMMON.PICKERDATE.MONTHS.APR"), + $translate.instant("COMMON.PICKERDATE.MONTHS.MAY"), + $translate.instant("COMMON.PICKERDATE.MONTHS.JUN"), + $translate.instant("COMMON.PICKERDATE.MONTHS.JUL"), + $translate.instant("COMMON.PICKERDATE.MONTHS.AUG"), + $translate.instant("COMMON.PICKERDATE.MONTHS.SEP"), + $translate.instant("COMMON.PICKERDATE.MONTHS.OCT"), + $translate.instant("COMMON.PICKERDATE.MONTHS.NOV"), + $translate.instant("COMMON.PICKERDATE.MONTHS.DEC")], + weekdays: [$translate.instant("COMMON.PICKERDATE.WEEK_DAYS.SUN"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.MON"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.TUE"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.WED"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.THU"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.FRI"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS.SAT")], + weekdaysShort: [$translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.SUN"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.MON"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.TUE"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.WED"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.THU"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.FRI"), + $translate.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.SAT")] + }, + isRTL: $translate.instant("COMMON.PICKERDATE.IS_RTL") == "true", + firstDay: parseInt($translate.instant("COMMON.PICKERDATE.FIRST_DAY_OF_WEEK"), 10), + format: $translate.instant("COMMON.PICKERDATE.FORMAT") + }) + + unbind = $rootscope.$on "$translateChangeEnd", (ctx) => initialize() $scope.$watch $attrs.ngModel, (val) -> + initialize() if val? and not $el.picker $el.picker.setDate(val) if val? + $scope.$on "$destroy", -> + $el.off() + unbind() + return { link: link require: "ngModel" } -module.directive("tgDateSelector", ["$translate", DateSelectorDirective]) +module.directive("tgDateSelector", ["$rootScope", "$translate", DateSelectorDirective]) ############################################################################# @@ -131,6 +140,9 @@ SprintProgressBarDirective = -> renderProgress($el, percentage, visual_percentage) + $scope.$on "$destroy", -> + $el.off() + return {link: link} module.directive("tgSprintProgressbar", SprintProgressBarDirective) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 54c99bc5..f55807ca 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -62,7 +62,7 @@ "EQUAL_TO": "This value should be the same." }, "PICKERDATE": { - "FORMAT": "DD/MM/YYYY", + "FORMAT": "DD MMM YYYY", "IS_RTL": "false", "FIRST_DAY_OF_WEEK": "1", "PREV_MONTH": "Previous Month", @@ -239,7 +239,7 @@ "ATTACHMENT": { "SECTION_NAME": "Adjunts", "TITLE": "{{ fileName }} pujat el {{ date }}", - "DESCIPTION": "Escriu una descripció curta", + "DESCRIPTION": "Type a short description", "DEPRECATED_FILE": "Obsolet?", "ADD": "Afegir nou adjunt. <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Max. grandària: {{maxFileSize}}]", diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 310244b2..04998d9c 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -62,7 +62,7 @@ "EQUAL_TO": "This value should be the same." }, "PICKERDATE": { - "FORMAT": "DD/MM/YYYY", + "FORMAT": "DD MMM YYYY", "IS_RTL": "false", "FIRST_DAY_OF_WEEK": "1", "PREV_MONTH": "Previous Month", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index b707036a..e21240ba 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -62,7 +62,7 @@ "EQUAL_TO": "Este valor debe ser el mismo." }, "PICKERDATE": { - "FORMAT": "DD/MM/YYYY", + "FORMAT": "DD MMM YYYY", "IS_RTL": "false", "FIRST_DAY_OF_WEEK": "1", "PREV_MONTH": "Mes Anterior", @@ -239,7 +239,7 @@ "ATTACHMENT": { "SECTION_NAME": "adjuntos", "TITLE": "{{ fileName }} subido el {{ date }}", - "DESCIPTION": "Escribe una descripción corta", + "DESCRIPTION": "Escribe una pequeña descripción", "DEPRECATED_FILE": "¿Desactualizado?", "ADD": "Agrega nuevos adjunto", "MAX_FILE_SIZE": "[Tamaño Max. : {{maxFileSize}}]", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index 155e9047..a33a23b7 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -62,7 +62,7 @@ "EQUAL_TO": "This value should be the same." }, "PICKERDATE": { - "FORMAT": "DD/MM/YYYY", + "FORMAT": "DD MMM YYYY", "IS_RTL": "false", "FIRST_DAY_OF_WEEK": "1", "PREV_MONTH": "Previous Month", @@ -239,7 +239,7 @@ "ATTACHMENT": { "SECTION_NAME": "liitteet", "TITLE": "{{ fileName }} ladattu {{ date }}\n", - "DESCIPTION": "Kirjoita lyhyt kuvaus", + "DESCRIPTION": "Type a short description", "DEPRECATED_FILE": "Vanhentunut?", "ADD": "Lisää liite. <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Maks. koko: {{maxFileSize}}]", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 6ad4cd16..ba318f95 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -62,7 +62,7 @@ "EQUAL_TO": "This value should be the same." }, "PICKERDATE": { - "FORMAT": "DD/MM/YYYY", + "FORMAT": "DD MMM YYYY", "IS_RTL": "false", "FIRST_DAY_OF_WEEK": "1", "PREV_MONTH": "Previous Month", @@ -239,7 +239,7 @@ "ATTACHMENT": { "SECTION_NAME": "pièces jointes", "TITLE": "{{ fileName }} transmis le {{ date }}\n", - "DESCIPTION": "Entrez une courte description", + "DESCRIPTION": "Type a short description", "DEPRECATED_FILE": "Obsolète?", "ADD": "Ajouter une pièce jointe. <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Taille max.: {{maxFileSize}}]", diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index 5fd14f85..ff130a39 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -62,7 +62,7 @@ "EQUAL_TO": "該數值應為一致" }, "PICKERDATE": { - "FORMAT": "DD/MM/YYYY", + "FORMAT": "DD MMM YYYY", "IS_RTL": "false", "FIRST_DAY_OF_WEEK": "1", "PREV_MONTH": "Previous Month", @@ -239,7 +239,7 @@ "ATTACHMENT": { "SECTION_NAME": "附件", "TITLE": "{{ fileName }} 上傳於 {{ date }}", - "DESCIPTION": "輸入一段簡短敘述", + "DESCRIPTION": "Type a short description", "DEPRECATED_FILE": "棄用?", "ADD": "加入新附件 <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Max. size: {{maxFileSize}}]", From 0b97bc7b08965a2161d3f03c693ad68396ad8498 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 18 May 2015 17:52:51 +0200 Subject: [PATCH 167/194] [i18n] tg-2677 #ready-for-test --- app/partials/common/history/history-activity.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/common/history/history-activity.jade b/app/partials/common/history/history-activity.jade index 22b46912..89ed64fd 100644 --- a/app/partials/common/history/history-activity.jade +++ b/app/partials/common/history/history-activity.jade @@ -13,7 +13,7 @@ div(class!="activity-single <%- mode %>") <% if ((deleteCommentDate || deleteCommentUser)) { %> .deleted-comment span(translate="COMMENTS.DELETED_INFO", - translate-values!="{ user: '<%- deleteCommentUser %>', date: '<% deleteCommentDate %>'}") + translate-values!="{ user: '<%- deleteCommentUser %>', date: '<%- deleteCommentDate %>'}") <% } %> .comment.wysiwyg | <%= comment %> From e9f74fb5b71c86eedf6ae32f9a664168cf5e55bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 18 May 2015 18:26:26 +0200 Subject: [PATCH 168/194] [i18n] tg-2680 #ready-for-test --- app/coffee/modules/issues/detail.coffee | 5 +++-- app/locales/locale-ca.json | 5 ++++- app/locales/locale-en.json | 3 +++ app/locales/locale-es.json | 3 +++ app/locales/locale-fi.json | 5 ++++- app/locales/locale-fr.json | 5 ++++- app/locales/locale-zh-hant.json | 5 ++++- app/partials/issue/issue-priority-button.jade | 3 ++- app/partials/issue/issue-severity-button.jade | 2 +- app/partials/issue/issue-type-button.jade | 2 +- 10 files changed, 29 insertions(+), 9 deletions(-) diff --git a/app/coffee/modules/issues/detail.coffee b/app/coffee/modules/issues/detail.coffee index b5a5bed7..db633dc2 100644 --- a/app/coffee/modules/issues/detail.coffee +++ b/app/coffee/modules/issues/detail.coffee @@ -295,13 +295,14 @@ IssueTypeButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $tem render = (issue) => type = $scope.typeById[issue.type] - html = $compile(html)($scope) - html = template({ type: type typees: $scope.typeList editable: isEditable() }) + + html = $compile(html)($scope) + $el.html(html) save = $qqueue.bindAdd (type) => diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index f55807ca..3775a023 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -119,6 +119,9 @@ "COLOR": "Color", "IS_CLOSED": "Està tancat?", "STATUS": "Estatus", + "TYPE": "Type", + "SEVERITY": "Severity", + "PRIORITY": "Priority", "ASSIGNED_TO": "Assignat a", "POINTS": "Punts", "BLOCKED_NOTE": "Nota de bloqueig", @@ -239,7 +242,7 @@ "ATTACHMENT": { "SECTION_NAME": "Adjunts", "TITLE": "{{ fileName }} pujat el {{ date }}", - "DESCRIPTION": "Type a short description", + "DESCRIPTION": "Escriu una descripció curta", "DEPRECATED_FILE": "Obsolet?", "ADD": "Afegir nou adjunt. <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Max. grandària: {{maxFileSize}}]", diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 04998d9c..94e6a0c1 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -119,6 +119,9 @@ "COLOR": "Color", "IS_CLOSED": "Is closed?", "STATUS": "Status", + "TYPE": "Type", + "SEVERITY": "Severity", + "PRIORITY": "Priority", "ASSIGNED_TO": "Assigned to", "POINTS": "Points", "BLOCKED_NOTE": "blocked note", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index e21240ba..c33b9d07 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -119,6 +119,9 @@ "COLOR": "Color", "IS_CLOSED": "¿Está Cerrado?", "STATUS": "Estado", + "TYPE": "Tipo", + "SEVERITY": "Gravedad", + "PRIORITY": "Prioridad", "ASSIGNED_TO": "Asignado a", "POINTS": "Puntos", "BLOCKED_NOTE": "Motivo del bloqueo", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index a33a23b7..cc305a78 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -119,6 +119,9 @@ "COLOR": "Väri", "IS_CLOSED": "Onko suljettu?", "STATUS": "Tila", + "TYPE": "Tyyppi", + "SEVERITY": "Vakavuus", + "PRIORITY": "Tärkeys", "ASSIGNED_TO": "Tekijä", "POINTS": "Pisteet", "BLOCKED_NOTE": "estetty muistiinpano", @@ -239,7 +242,7 @@ "ATTACHMENT": { "SECTION_NAME": "liitteet", "TITLE": "{{ fileName }} ladattu {{ date }}\n", - "DESCRIPTION": "Type a short description", + "DESCRIPTION": "Kirjoita lyhyt kuvaus", "DEPRECATED_FILE": "Vanhentunut?", "ADD": "Lisää liite. <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Maks. koko: {{maxFileSize}}]", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index ba318f95..ddfec63f 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -119,6 +119,9 @@ "COLOR": "Couleur", "IS_CLOSED": "Fermé ?", "STATUS": "Etat", + "TYPE": "Type", + "SEVERITY": "Sévérité", + "PRIORITY": "Priorité", "ASSIGNED_TO": "Affecté à", "POINTS": "Points", "BLOCKED_NOTE": "note bloquée", @@ -239,7 +242,7 @@ "ATTACHMENT": { "SECTION_NAME": "pièces jointes", "TITLE": "{{ fileName }} transmis le {{ date }}\n", - "DESCRIPTION": "Type a short description", + "DESCRIPTION": "Saisissez une description courte", "DEPRECATED_FILE": "Obsolète?", "ADD": "Ajouter une pièce jointe. <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Taille max.: {{maxFileSize}}]", diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index ff130a39..f446c53e 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -119,6 +119,9 @@ "COLOR": "顏色", "IS_CLOSED": "關閉中?", "STATUS": "狀態", + "TYPE": "類型", + "SEVERITY": "急迫性", + "PRIORITY": "優先性", "ASSIGNED_TO": "指派給 ", "POINTS": "點數", "BLOCKED_NOTE": "已封鎖之筆記", @@ -239,7 +242,7 @@ "ATTACHMENT": { "SECTION_NAME": "附件", "TITLE": "{{ fileName }} 上傳於 {{ date }}", - "DESCRIPTION": "Type a short description", + "DESCRIPTION": "輸入一段簡短描述", "DEPRECATED_FILE": "棄用?", "ADD": "加入新附件 <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Max. size: {{maxFileSize}}]", diff --git a/app/partials/issue/issue-priority-button.jade b/app/partials/issue/issue-priority-button.jade index 6ebdd6bb..62055e0b 100644 --- a/app/partials/issue/issue-priority-button.jade +++ b/app/partials/issue/issue-priority-button.jade @@ -4,7 +4,8 @@ div(class!="priority-data <% if(editable){ %>clickable<% }%>") <% if(editable){ %> span(class="icon icon-arrow-bottom") <% }%> - span(class="level-name", translate="ISSUES.FIELDS.PRIORITY") + span(class="level-name", translate="COMMON.FIELDS.PRIORITY") + ul(class="popover pop-priority") <% _.each(priorityes, function(pr) { %> li diff --git a/app/partials/issue/issue-severity-button.jade b/app/partials/issue/issue-severity-button.jade index 72568662..6ffe35dd 100644 --- a/app/partials/issue/issue-severity-button.jade +++ b/app/partials/issue/issue-severity-button.jade @@ -4,7 +4,7 @@ div(class!="severity-data <% if(editable){ %>clickable<% }%>") <% if(editable){ %> span(class="icon icon-arrow-bottom") <% }%> - span(class="level-name", translate="ISSUES.FIELDS.SEVERITY") + span(class="level-name", translate="COMMON.FIELDS.SEVERITY") ul(class="popover pop-severity") <% _.each(severityes, function(sv) { %> diff --git a/app/partials/issue/issue-type-button.jade b/app/partials/issue/issue-type-button.jade index 4e4db6dc..675e7d92 100644 --- a/app/partials/issue/issue-type-button.jade +++ b/app/partials/issue/issue-type-button.jade @@ -4,7 +4,7 @@ div(class!="type-data <% if(editable){ %>clickable<% }%>") <% if(editable){ %> span(class="icon icon-arrow-bottom") <% }%> - span(class="level-name", translate="ISSUES.FIELDS.TYPE") + span(class="level-name", translate="COMMON.FIELDS.TYPE") ul(class="popover pop-type") <% _.each(typees, function(tp) { %> From 1347cc86793bb4836d0d5dd0dbc3c434792a4012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 18 May 2015 18:35:09 +0200 Subject: [PATCH 169/194] [i18n] tg-2687 #ready-for-test --- app/coffee/modules/admin/roles.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/admin/roles.coffee b/app/coffee/modules/admin/roles.coffee index 2e702f04..41164ed1 100644 --- a/app/coffee/modules/admin/roles.coffee +++ b/app/coffee/modules/admin/roles.coffee @@ -389,7 +389,7 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm, $compile) -> return setActivePermissionsPerCategory(categories) renderResume = (element, category) -> - element.find(".resume").html(resumeTemplate({category: category})) + element.find(".resume").html($compile(resumeTemplate({category: category}))($scope)) renderCategory = (category, index) -> html = categoryTemplate({category: category, index: index}) From 745668849e2d5c23e1821f31387a61ea784deea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 19 May 2015 09:18:12 +0200 Subject: [PATCH 170/194] [i18n] tg-2689 #ready-for-test --- app/coffee/modules/user-settings/main.coffee | 3 +- app/partials/user/user-profile.jade | 29 ++++++++++++-------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/app/coffee/modules/user-settings/main.coffee b/app/coffee/modules/user-settings/main.coffee index 548dd8ee..620236b3 100644 --- a/app/coffee/modules/user-settings/main.coffee +++ b/app/coffee/modules/user-settings/main.coffee @@ -54,7 +54,8 @@ class UserSettingsController extends mixOf(taiga.Controller, taiga.PageMixin) maxFileSize = @config.get("maxUploadFileSize", null) if maxFileSize - @scope.maxFileSizeMsg = @translate.instant("USER_SETTINGS.AVATAR_MAX_SIZE", {"maxFileSize": sizeFormat(maxFileSize)}) + @translate("USER_SETTINGS.AVATAR_MAX_SIZE", {"maxFileSize": sizeFormat(maxFileSize)}).then (text) => + @scope.maxFileSizeMsg = text promise = @.loadInitialData() diff --git a/app/partials/user/user-profile.jade b/app/partials/user/user-profile.jade index 1df3ecb0..1530f00a 100644 --- a/app/partials/user/user-profile.jade +++ b/app/partials/user/user-profile.jade @@ -17,24 +17,28 @@ div.wrapper(tg-user-profile, ng-controller="UserSettingsController as ctrl", .image-container img.avatar(ng-src="{{user.big_photo}}" alt="avatar") .overlay.hidden - img.loading-spinner(src="/svg/spinner-circle.svg", alt="{{'COMMON.LOADING' | translate}}") + img.loading-spinner(src="/svg/spinner-circle.svg", + alt="{{'COMMON.LOADING' | translate}}") input(type="file", id="avatar-field", class="hidden", tg-avatar-model="avatarAttachment") p(translate="USER_PROFILE.IMAGE_HELP") span.size-info.hidden(tg-bo-html="maxFileSizeMsg") - a.button-green.change.js-change-avatar(title="{{'USER_PROFILE.CHANGE_PHOTO'}} + ' ' + maxFileSizeMsg", translate="USER_PROFILE.ACTION_CHANGE_IMAGE") + a.button-green.change.js-change-avatar(translate="USER_PROFILE.ACTION_CHANGE_IMAGE", + title="{{'USER_PROFILE.CHANGE_PHOTO' | translate}} {{maxFileSizeMsg}}") a.use-gravatar(translate="USER_PROFILE.ACTION_USE_GRAVATAR") div.data fieldset label(for="email", translate="USER_PROFILE.FIELD.USERNAME") - input(type="text", name="username", id="username", placeholder="{{'USER_PROFILE.FIELD.USERNAME' | translate}}", - ng-model="user.username", data-required="true", data-maxlength="255", - data-regexp="^[\\w.-]+$") + input(type="text", name="username", id="username", + placeholder="{{'USER_PROFILE.FIELD.USERNAME' | translate}}", + ng-model="user.username", data-required="true", data-maxlength="255", + data-regexp="^[\\w.-]+$") fieldset label(for="email", translate="USER_PROFILE.FIELD.EMAIL") - input(type="text", name="email", id="email", placeholder="{{'USER_PROFILE.FIELD.EMAIL' | translate}}", + input(type="text", name="email", id="email", + placeholder="{{'USER_PROFILE.FIELD.EMAIL' | translate}}", ng-model="user.email", data-type="email", data-required="true", data-maxlength="255") @@ -47,17 +51,20 @@ div.wrapper(tg-user-profile, ng-controller="UserSettingsController as ctrl", fieldset label(for="full-name", translate="USER_PROFILE.FIELD.LANGUAGE") - select(ng-model="lang", ng-options="locale.code as locale.name for locale in locales") + select(ng-model="lang", + ng-options="locale.code as locale.name for locale in locales") option(value="", translate="USER_PROFILE.FIELD.LANGUAGE_DEFAULT") fieldset label(for="bio", translate="USER_PROFILE.FIELD.BIO") - textarea(name="bio", id="bio", placeholder="{{'USER_PROFILE.FIELD.PLACEHOLDER_BIO' | translate}}", - ng-model="user.bio") + textarea(name="bio", id="bio", ng-model="user.bio", + placeholder="{{'USER_PROFILE.FIELD.PLACEHOLDER_BIO' | translate}}") fieldset.submit - button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", translate="COMMON.SAVE") + button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", + translate="COMMON.SAVE") a.delete-account(href="", title="{{'USER_PROFILE.ACTION_DELETE_ACCOUNT' | translate}}", - ng-click="ctrl.openDeleteLightbox()", translate="USER_PROFILE.ACTION_DELETE_ACCOUNT") + ng-click="ctrl.openDeleteLightbox()", + translate="USER_PROFILE.ACTION_DELETE_ACCOUNT") div.lightbox.lightbox-delete-account(tg-lb-delete-user) From 14d43d576f25ae6cac8c54a0382b9dd40c89744d Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 19 May 2015 09:31:51 +0200 Subject: [PATCH 171/194] Issue 2685: Bad translation in spanish for "Add new XXX" in Admin -> attributes --- app/coffee/modules/admin/project-values.coffee | 12 ++++++++++-- app/locales/locale-en.json | 8 +++++--- app/partials/admin/admin-project-values-points.jade | 1 + .../admin/admin-project-values-priorities.jade | 3 ++- .../admin/admin-project-values-severities.jade | 3 ++- app/partials/admin/admin-project-values-status.jade | 9 ++++++--- app/partials/admin/admin-project-values-types.jade | 3 ++- .../includes/modules/admin/project-types.jade | 4 ++-- 8 files changed, 30 insertions(+), 13 deletions(-) diff --git a/app/coffee/modules/admin/project-values.coffee b/app/coffee/modules/admin/project-values.coffee index 400cac3f..c86c762d 100644 --- a/app/coffee/modules/admin/project-values.coffee +++ b/app/coffee/modules/admin/project-values.coffee @@ -126,7 +126,7 @@ module.controller("ProjectValuesController", ProjectValuesController) ## Project values directive ############################################################################# -ProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame) -> +ProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame, @translate, $rootscope) -> ## Drag & Drop Link linkDragAndDrop = ($scope, $el, $attrs) -> @@ -157,6 +157,7 @@ ProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame) -> linkValue = ($scope, $el, $attrs) -> $ctrl = $el.controller() valueType = $attrs.type + objName = $attrs.objname initializeNewValue = -> $scope.newValue = { @@ -165,7 +166,14 @@ ProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame) -> "is_archived": false } + initializeTextTranslations = -> + $scope.addNewElementText = @translate.instant("ADMIN.PROJECT_VALUES_#{objName.toUpperCase()}.ACTION_ADD") + initializeNewValue() + initializeTextTranslations() + + $rootscope.$on "$translateChangeEnd", -> + $scope.$evalAsync(initializeTextTranslations) goToBottomList = (focus = false) => table = $el.find(".table-main") @@ -305,7 +313,7 @@ ProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame) -> return {link:link} -module.directive("tgProjectValues", ["$log", "$tgRepo", "$tgConfirm", "$tgLocation", "animationFrame", ProjectValuesDirective]) +module.directive("tgProjectValues", ["$log", "$tgRepo", "$tgConfirm", "$tgLocation", "animationFrame", "$translate", "$rootScope", ProjectValuesDirective]) ############################################################################# diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 94e6a0c1..c1ec86e1 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -362,11 +362,13 @@ }, "PROJECT_VALUES_PRIORITIES": { "TITLE": "Issue priorities", - "SUBTITLE": "Specify the priorities your issues will have" + "SUBTITLE": "Specify the priorities your issues will have", + "ACTION_ADD": "Add new priority" }, "PROJECT_VALUES_SEVERITIES": { "TITLE": "Issue severities", - "SUBTITLE": "Specify the severities your issues will have" + "SUBTITLE": "Specify the severities your issues will have", + "ACTION_ADD": "Add new severity" }, "PROJECT_VALUES_STATUS": { "TITLE": "Status", @@ -379,7 +381,7 @@ "TITLE": "Types", "SUBTITLE": "Specify the types your issues could be", "ISSUE_TITLE": "Issues types", - "ACTION_ADD": "Add new {{objName}}" + "ACTION_ADD": "Add new type" }, "ROLES": { "SECTION_NAME": "Roles - {{projectName}}", diff --git a/app/partials/admin/admin-project-values-points.jade b/app/partials/admin/admin-project-values-points.jade index c36426e5..b47bd8ef 100644 --- a/app/partials/admin/admin-project-values-points.jade +++ b/app/partials/admin/admin-project-values-points.jade @@ -13,5 +13,6 @@ div.wrapper(ng-controller="ProjectValuesSectionController") div.admin-attributes-section(tg-project-values, ng-controller="ProjectValuesController as ctrl", ng-init="section='admin'; resource='userstories'; type='points'; sectionName='ADMIN.PROJECT_VALUES_POINTS.TITLE'", + objName="points", type="points") include ../includes/modules/admin/project-points diff --git a/app/partials/admin/admin-project-values-priorities.jade b/app/partials/admin/admin-project-values-priorities.jade index e2179393..0658f0d1 100644 --- a/app/partials/admin/admin-project-values-priorities.jade +++ b/app/partials/admin/admin-project-values-priorities.jade @@ -12,6 +12,7 @@ div.wrapper(ng-controller="ProjectValuesSectionController") p.admin-subtitle(translate="ADMIN.PROJECT_VALUES_PRIORITIES.SUBTITLE") div.admin-attributes-section(tg-project-values, ng-controller="ProjectValuesController as ctrl", - ng-init="section='admin'; resource='issues'; type='priorities'; sectionName='ADMIN.PROJECT_VALUES_PRIORITIES.TITLE'; objName='priority'", + ng-init="section='admin'; resource='issues'; type='priorities'; sectionName='ADMIN.PROJECT_VALUES_PRIORITIES.TITLE';", + objName="priorities", type="priorities") include ../includes/modules/admin/project-types diff --git a/app/partials/admin/admin-project-values-severities.jade b/app/partials/admin/admin-project-values-severities.jade index 5b295441..93101293 100644 --- a/app/partials/admin/admin-project-values-severities.jade +++ b/app/partials/admin/admin-project-values-severities.jade @@ -12,6 +12,7 @@ div.wrapper(ng-controller="ProjectValuesSectionController") p.admin-subtitle(translate="ADMIN.PROJECT_VALUES_SEVERITIES.SUBTITLE") div.admin-attributes-section(tg-project-values, ng-controller="ProjectValuesController as ctrl", - ng-init="section='admin'; resource='issues'; type='severities'; sectionName='ADMIN.PROJECT_VALUES_SEVERITIES.TITLE'; objName='severity'", + ng-init="section='admin'; resource='issues'; type='severities'; sectionName='ADMIN.PROJECT_VALUES_SEVERITIES.TITLE';", + objName="severities", type="severities") include ../includes/modules/admin/project-types diff --git a/app/partials/admin/admin-project-values-status.jade b/app/partials/admin/admin-project-values-status.jade index a2488dfa..5d7e6343 100644 --- a/app/partials/admin/admin-project-values-status.jade +++ b/app/partials/admin/admin-project-values-status.jade @@ -14,15 +14,18 @@ div.wrapper(ng-controller="ProjectValuesSectionController", div.admin-attributes-section(tg-project-values, type="userstory-statuses", ng-controller="ProjectValuesController as ctrl", - ng-init="section='admin'; resource='userstories'; type='userstory-statuses'; sectionName='ADMIN.PROJECT_VALUES_STATUS.US_TITLE'") + ng-init="section='admin'; resource='userstories'; type='userstory-statuses'; sectionName='ADMIN.PROJECT_VALUES_STATUS.US_TITLE'", + objName="status") include ../includes/modules/admin/project-us-status div.admin-attributes-section(tg-project-values, type="task-statuses", ng-controller="ProjectValuesController as ctrl", - ng-init="section='admin'; resource='tasks'; type='task-statuses'; sectionName='ADMIN.PROJECT_VALUES_STATUS.TASK_TITLE'") + ng-init="section='admin'; resource='tasks'; type='task-statuses'; sectionName='ADMIN.PROJECT_VALUES_STATUS.TASK_TITLE'" + objName="status") include ../includes/modules/admin/project-status div.admin-attributes-section(tg-project-values, type="issue-statuses", ng-controller="ProjectValuesController as ctrl", - ng-init="section='admin'; resource='issues'; type='issue-statuses'; sectionName='ADMIN.PROJECT_VALUES_STATUS.ISSUE_TITLE'") + ng-init="section='admin'; resource='issues'; type='issue-statuses'; sectionName='ADMIN.PROJECT_VALUES_STATUS.ISSUE_TITLE'", + objName="status") include ../includes/modules/admin/project-status diff --git a/app/partials/admin/admin-project-values-types.jade b/app/partials/admin/admin-project-values-types.jade index 7b96c24c..8cb5092f 100644 --- a/app/partials/admin/admin-project-values-types.jade +++ b/app/partials/admin/admin-project-values-types.jade @@ -13,6 +13,7 @@ div.wrapper(ng-controller="ProjectValuesSectionController" p.admin-subtitle(translate="ADMIN.PROJECT_VALUES_TYPES.SUBTITLE") div.admin-attributes-section(tg-project-values, ng-controller="ProjectValuesController as ctrl", - ng-init="section='admin'; resource='issues'; sectionName='ADMIN.PROJECT_VALUES_TYPES.ISSUE_TITLE'; type='issue-types'; objName='type'", + ng-init="section='admin'; resource='issues'; sectionName='ADMIN.PROJECT_VALUES_TYPES.ISSUE_TITLE'; type='issue-types';", + objName="types", type="issue-types") include ../includes/modules/admin/project-types diff --git a/app/partials/includes/modules/admin/project-types.jade b/app/partials/includes/modules/admin/project-types.jade index ff7a083b..5cf626fd 100644 --- a/app/partials/includes/modules/admin/project-types.jade +++ b/app/partials/includes/modules/admin/project-types.jade @@ -2,8 +2,8 @@ section.colors-table div.project-values-title h2 {{ sectionName | translate }} - a.button.button-gray.show-add-new(href="") - span(translate="ADMIN.PROJECT_VALUES_TYPES.ACTION_ADD", translate-values="{ objName: objName }") + a.button.button-gray.show-add-new(href="", title="{{ addNewElementText }}") + span(ng-bind="addNewElementText") div.table-header div.row From 80f568899b7995655b4d0dfee5b724f101c6aff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 19 May 2015 09:44:00 +0200 Subject: [PATCH 172/194] [i18n] Update locales --- app/locales/locale-ca.json | 70 +++++++++++++++++---------------- app/locales/locale-es.json | 8 ++-- app/locales/locale-fi.json | 8 ++-- app/locales/locale-fr.json | 8 ++-- app/locales/locale-zh-hant.json | 8 ++-- 5 files changed, 56 insertions(+), 46 deletions(-) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 3775a023..30d4a1ab 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -65,39 +65,39 @@ "FORMAT": "DD MMM YYYY", "IS_RTL": "false", "FIRST_DAY_OF_WEEK": "1", - "PREV_MONTH": "Previous Month", - "NEXT_MONTH": "Next Month", + "PREV_MONTH": "Mes anterior", + "NEXT_MONTH": "Mes que ve", "MONTHS": { - "JAN": "January", - "FEB": "February", - "MAR": "March", - "APR": "April", - "MAY": "May", - "JUN": "June", - "JUL": "July", - "AUG": "August", - "SEP": "September", - "OCT": "October", - "NOV": "November", - "DEC": "December" + "JAN": "Gener", + "FEB": "Febrer", + "MAR": "Març", + "APR": "Abril", + "MAY": "Maig", + "JUN": "Juny", + "JUL": "Juliol", + "AUG": "Agost", + "SEP": "Setembre", + "OCT": "Octubre", + "NOV": "Novembre", + "DEC": "Desembre" }, "WEEK_DAYS": { - "SUN": "Sunday", - "MON": "Monday", - "TUE": "Tuesday", - "WED": "Wednesday", - "THU": "Thursday", - "FRI": "Friday", - "SAT": "Saturday" + "SUN": "Diumenge", + "MON": "Dilluns", + "TUE": "Dimarts", + "WED": "Dimecres", + "THU": "Dijous", + "FRI": "Divendres", + "SAT": "Dissabte" }, "WEEK_DAYS_SHORT": { - "SUN": "Sun", - "MON": "Mon", - "TUE": "Tue", - "WED": "Wed", - "THU": "Thu", - "FRI": "Fri", - "SAT": "Sat" + "SUN": "Dg", + "MON": "Dl", + "TUE": "Dt", + "WED": "Dc", + "THU": "Dj", + "FRI": "Dv", + "SAT": "Ds" } }, "TAGS": { @@ -119,9 +119,9 @@ "COLOR": "Color", "IS_CLOSED": "Està tancat?", "STATUS": "Estatus", - "TYPE": "Type", - "SEVERITY": "Severity", - "PRIORITY": "Priority", + "TYPE": "Tipus", + "SEVERITY": "Severitat", + "PRIORITY": "Prioritat", "ASSIGNED_TO": "Assignat a", "POINTS": "Punts", "BLOCKED_NOTE": "Nota de bloqueig", @@ -362,11 +362,13 @@ }, "PROJECT_VALUES_PRIORITIES": { "TITLE": "Prioritats d'incidències", - "SUBTITLE": "Especifica les prioritats que tindran les teues tasques" + "SUBTITLE": "Especifica les prioritats que tindran les teues tasques", + "ACTION_ADD": "Add new priority" }, "PROJECT_VALUES_SEVERITIES": { "TITLE": "Severitat d'incidències", - "SUBTITLE": "Especifica les severitats que tindran les teues incidències" + "SUBTITLE": "Especifica les severitats que tindran les teues incidències", + "ACTION_ADD": "Add new severity" }, "PROJECT_VALUES_STATUS": { "TITLE": "Estatus", @@ -379,7 +381,7 @@ "TITLE": "Tipus", "SUBTITLE": "Especifica quin tipus d'incidència podria ser.", "ISSUE_TITLE": "Tipus d'incidències", - "ACTION_ADD": "Afegir now {{objName}}" + "ACTION_ADD": "Add new type" }, "ROLES": { "SECTION_NAME": "Rols - {{projectName}}", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index c33b9d07..de6375aa 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -362,11 +362,13 @@ }, "PROJECT_VALUES_PRIORITIES": { "TITLE": "Prioridades de las peticiones", - "SUBTITLE": "Especifica las prioridades que podrán tener tus peticiones" + "SUBTITLE": "Especifica las prioridades que podrán tener tus peticiones", + "ACTION_ADD": "Añadir nueva prioridad" }, "PROJECT_VALUES_SEVERITIES": { "TITLE": "Gravedad de las peticiones", - "SUBTITLE": "Especifica la gravedad que tendrán tus peticiones" + "SUBTITLE": "Especifica la gravedad que tendrán tus peticiones", + "ACTION_ADD": "Añadir nueva gravedad" }, "PROJECT_VALUES_STATUS": { "TITLE": "Estado", @@ -379,7 +381,7 @@ "TITLE": "Tipos", "SUBTITLE": "Especifica los deferentes tipos posibles de peticiones que pueden existir.", "ISSUE_TITLE": "Tipos de la petición", - "ACTION_ADD": "Añadir nuevo {{objName}}" + "ACTION_ADD": "Añadir nuevo tipo" }, "ROLES": { "SECTION_NAME": "Roles - {{projectName}}", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index cc305a78..d8742176 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -362,11 +362,13 @@ }, "PROJECT_VALUES_PRIORITIES": { "TITLE": "Pyyntöjen tärkeydet", - "SUBTITLE": "Määrittele tärkeydet pyynnöille" + "SUBTITLE": "Määrittele tärkeydet pyynnöille", + "ACTION_ADD": "Add new priority" }, "PROJECT_VALUES_SEVERITIES": { "TITLE": "Pyyntöjen vakavuudet", - "SUBTITLE": "Määrittele pyyntöjen vakavuudet" + "SUBTITLE": "Määrittele pyyntöjen vakavuudet", + "ACTION_ADD": "Add new severity" }, "PROJECT_VALUES_STATUS": { "TITLE": "Tila", @@ -379,7 +381,7 @@ "TITLE": "Tyypit", "SUBTITLE": "Määrittele pyyntöjen tyypit", "ISSUE_TITLE": "Pyyntöjen tyypit", - "ACTION_ADD": "Lisää uusi {{objName}}" + "ACTION_ADD": "Add new type" }, "ROLES": { "SECTION_NAME": "Roolit - {{projectName}}", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index ddfec63f..5ddc5dec 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -362,11 +362,13 @@ }, "PROJECT_VALUES_PRIORITIES": { "TITLE": "Priorités des problèmes", - "SUBTITLE": "Spécifiez les priorités qu'auront vos problèmes" + "SUBTITLE": "Spécifiez les priorités qu'auront vos problèmes", + "ACTION_ADD": "Add new priority" }, "PROJECT_VALUES_SEVERITIES": { "TITLE": "Sévérités des problèmes", - "SUBTITLE": "Spécifiez les sévérités qu'auront vos problèmes" + "SUBTITLE": "Spécifiez les sévérités qu'auront vos problèmes", + "ACTION_ADD": "Add new severity" }, "PROJECT_VALUES_STATUS": { "TITLE": "Statut", @@ -379,7 +381,7 @@ "TITLE": "Types", "SUBTITLE": "Spécifiez les priorités qu'auront vos bugs", "ISSUE_TITLE": "Types de problèmes", - "ACTION_ADD": "Ajouter un nouveau {{objName}}" + "ACTION_ADD": "Add new type" }, "ROLES": { "SECTION_NAME": "Rôles - {{projectName}}", diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index f446c53e..e28ad450 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -362,11 +362,13 @@ }, "PROJECT_VALUES_PRIORITIES": { "TITLE": "問題優先性", - "SUBTITLE": "指明你將遇到的問題優先程度" + "SUBTITLE": "指明你將遇到的問題優先程度", + "ACTION_ADD": "Add new priority" }, "PROJECT_VALUES_SEVERITIES": { "TITLE": "問題急迫性", - "SUBTITLE": "指明你將遇到問題的嚴重程度" + "SUBTITLE": "指明你將遇到問題的嚴重程度", + "ACTION_ADD": "Add new severity" }, "PROJECT_VALUES_STATUS": { "TITLE": "狀態", @@ -379,7 +381,7 @@ "TITLE": "類型", "SUBTITLE": "指定你的問題類型可能是", "ISSUE_TITLE": "問題類型", - "ACTION_ADD": "新增{{objName}}" + "ACTION_ADD": "Add new type" }, "ROLES": { "SECTION_NAME": "角色- {{projectName}}", From a6192d98a4766e029b08b05d7ce97d4bafe91044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 19 May 2015 11:27:57 +0200 Subject: [PATCH 173/194] [i18n] tg-2693 #ready-for-test --- app/coffee/app.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 5489568b..32807348 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -293,7 +293,7 @@ init = ($log, $config, $rootscope, $auth, $events, $analytics, $translate) -> $rootscope.contribPlugins = @.taigaContribPlugins $rootscope.adminPlugins = _.where(@.taigaContribPlugins, {"type": "admin"}) - $rootscope.$on "$translateLoadingEnd", (e, ctx) -> + $rootscope.$on "$translateChangeEnd", (e, ctx) -> lang = ctx.language i18nInit(lang, $translate) From 151abed16439d77d3a3fcc15e8a6b4e71f57ff25 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 19 May 2015 11:40:37 +0200 Subject: [PATCH 174/194] Fixing i18n filters in backlog --- app/coffee/modules/backlog/main.coffee | 4 ++-- app/locales/locale-en.json | 3 +++ app/partials/backlog/backlog.jade | 8 ++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index 9ce9d986..27ce413c 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -665,10 +665,10 @@ BacklogDirective = ($repo, $rootscope, $translate) -> sidebar.toggleClass("active") target.toggleClass("active") - removeText = $translate.instant("BACKLOG.FILTERS.REMOVE") + hideText = $translate.instant("BACKLOG.FILTERS.HIDE") showText = $translate.instant("BACKLOG.FILTERS.SHOW") - toggleText(target.find(".text"), [removeText, showText]) + toggleText(target.find(".text"), [hideText, showText]) if !sidebar.hasClass("active") $ctrl.resetFilters() diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index c1ec86e1..02e956b7 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -735,6 +735,7 @@ "INCREMENT_CLIENT": "Incremented points by client requirements for sprint {{xval}} is {{yval}}" }, "TAGS": { + "TOGGLE": "Toggle tags visibility", "SHOW": "Show tags", "HIDE": "Hide tags" }, @@ -757,8 +758,10 @@ "POINTS_PER_SPRINT": "points /
sprint" }, "FILTERS": { + "TOGGLE": "Toggle filters visibility", "TITLE": "Filters", "REMOVE": "Remove Filters", + "HIDE": "Hide Filters", "SHOW": "Show Filters", "FILTER_CATEGORY_STATUS": "Status", "FILTER_CATEGORY_TAGS": "Tags" diff --git a/app/partials/backlog/backlog.jade b/app/partials/backlog/backlog.jade index fd0d9273..7e45dfa0 100644 --- a/app/partials/backlog/backlog.jade +++ b/app/partials/backlog/backlog.jade @@ -21,15 +21,15 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl", span.icon.icon-move span.text(translate="BACKLOG.MOVE_US_TO_CURRENT_SPRINT") a.trans-button(href="", - title="{{'BACKLOG.SHOW_FILTERS' | translate}}", + title="{{'BACKLOG.FILTERS.TOGGLE' | translate}}", id="show-filters-button") span.icon.icon-filter - span.text(translate="BACKLOG.SHOW_FILTERS") Show Filters + span.text(translate="BACKLOG.FILTERS.SHOW") Show Filters a.trans-button(href="", - title="{{'BACKLOG.SHOW_TAGS' | translate}}", + title="{{'BACKLOG.TAGS.TOGGLE' | translate}}", id="show-tags") span.icon.icon-tag - span.text(translate="BACKLOG.SHOW_TAGS") + span.text(translate="BACKLOG.TAGS.SHOW") include ../includes/components/addnewus section.backlog-table(ng-class="{'hidden': !visibleUserstories.length}") From 4f5353b9881ae620f11fabed1ef170181699cd43 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 19 May 2015 11:46:41 +0200 Subject: [PATCH 175/194] Updating translation files --- app/locales/locale-ca.json | 3 + app/locales/locale-es.json | 5 +- app/locales/locale-fi.json | 3 + app/locales/locale-fr.json | 135 ++++++++++++++++---------------- app/locales/locale-zh-hant.json | 3 + 5 files changed, 82 insertions(+), 67 deletions(-) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 30d4a1ab..ed9f9e66 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -733,6 +733,7 @@ "INCREMENT_CLIENT": "Punts incrementat per requeriment de client {{xval}} és {{yval}}" }, "TAGS": { + "TOGGLE": "Toggle tags visibility", "SHOW": "Mostrar tags", "HIDE": "Amaga tags" }, @@ -755,8 +756,10 @@ "POINTS_PER_SPRINT": "punts
sprint" }, "FILTERS": { + "TOGGLE": "Toggle filters visibility", "TITLE": "Filtres", "REMOVE": "Esborra filtres", + "HIDE": "Hide Filters", "SHOW": "Mostra filtres", "FILTER_CATEGORY_STATUS": "Estatus", "FILTER_CATEGORY_TAGS": "Tags" diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index de6375aa..c04a47dc 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -733,6 +733,7 @@ "INCREMENT_CLIENT": "El número de puntos incrementados por requerimientos del cliente para el sprint {{xval}} es de {{yval}}" }, "TAGS": { + "TOGGLE": "Cambia la visibilidad de los tags", "SHOW": "Mostrar etiquetas", "HIDE": "Ocultar etiquetas" }, @@ -755,8 +756,10 @@ "POINTS_PER_SPRINT": "puntos /
sprint" }, "FILTERS": { + "TOGGLE": "Cambia la visibilidad de los filtros", "TITLE": "Filtros", "REMOVE": "Borrar Filtros", + "HIDE": "Ocultar filtros", "SHOW": "Ver Filtros", "FILTER_CATEGORY_STATUS": "Estado", "FILTER_CATEGORY_TAGS": "Etiquetas" @@ -829,7 +832,7 @@ "TITLE_ACTION_IOCAINE": "¿Te sientes fuera de tu zona de confort en una tarea? Asegúrate de que los demás están al tanto de ello, marca el check de la Iocaína al editar una tarea. Igual eu era posible llegar a ser inmune a este veneno mortal a base de consumir pequeñas dosis a lo largo del tiempo, es posible conseguir mejor en lo que estás haciendo si afrontas de vez en cuando esta clase de retos!" }, "NOTIFICATION": { - "OK": "Todo está bien", + "OK": "¡Todo Ok!", "WARNING": "¡Cáspitas!, algo no ha ido bien...", "WARNING_TEXT": "Nuestros Oompa Loompas están tristes, ¡Tus cambios no fueron guardados!", "SAVED": "¡Nuestros Oompa Loompas guardaron todos tus cambios!", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index d8742176..22364302 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -733,6 +733,7 @@ "INCREMENT_CLIENT": "Lisätyt asiakkaan vaatimat pisteet kierrokselle {{xval}} ovat {{yval}}" }, "TAGS": { + "TOGGLE": "Toggle tags visibility", "SHOW": "Näytä avainsanat", "HIDE": "Piilota avainsanat" }, @@ -755,8 +756,10 @@ "POINTS_PER_SPRINT": "pisettä/
kierros" }, "FILTERS": { + "TOGGLE": "Toggle filters visibility", "TITLE": "Suodattimet", "REMOVE": "Poista suodattimet", + "HIDE": "Hide Filters", "SHOW": "Näytä suodattimet", "FILTER_CATEGORY_STATUS": "Tila", "FILTER_CATEGORY_TAGS": "Avainsanat" diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 5ddc5dec..82c63cc7 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -37,19 +37,19 @@ "GENERIC_ERROR": "L'un de nos Ooompa Loompas dit {{error}}.", "IOCAINE_TEXT": "Vous vous sentez un peu submergé par une tâche ? Soyez certains d'en informer les autres en cliquant su Iocaine lors de la modification de la tâche. Il est possible de s'immuniser contre ce poison (fictif) en consommant de petites quantités en heures supplémentaires, tout comme il est possible de s'améliorer en acceptant parfois de nouveaux défis !", "FORM_ERRORS": { - "DEFAULT_MESSAGE": "This value seems to be invalid.", + "DEFAULT_MESSAGE": "Cette valeur semble être invalide.", "TYPE_EMAIL": "This value should be a valid email.", "TYPE_URL": "This value should be a valid url.", "TYPE_URLSTRICT": "This value should be a valid url.", "TYPE_NUMBER": "This value should be a valid number.", "TYPE_DIGITS": "This value should be digits.", - "TYPE_DATEISO": "This value should be a valid date (YYYY-MM-DD).", - "TYPE_ALPHANUM": "This value should be alphanumeric.", + "TYPE_DATEISO": "Cette valeur n'est pas une date valide (AAAA-MM-JJ).", + "TYPE_ALPHANUM": "Cette valeur doit être alphanumérique.", "TYPE_PHONE": "This value should be a valid phone number.", "NOTNULL": "This value should not be null.", - "NOT_BLANK": "This value should not be blank.", - "REQUIRED": "This value is required.", - "REGEXP": "This value seems to be invalid.", + "NOT_BLANK": "Cette valeur ne doit pas être vide.", + "REQUIRED": "Cette valeur est obligatoire.", + "REGEXP": "Cette valeur semble être invalide.", "MIN": "This value should be greater than or equal to %s.", "MAX": "This value should be lower than or equal to %s.", "RANGE": "This value should be between %s and %s.", @@ -65,39 +65,39 @@ "FORMAT": "DD MMM YYYY", "IS_RTL": "false", "FIRST_DAY_OF_WEEK": "1", - "PREV_MONTH": "Previous Month", - "NEXT_MONTH": "Next Month", + "PREV_MONTH": "Mois précédent", + "NEXT_MONTH": "Mois suivant", "MONTHS": { - "JAN": "January", - "FEB": "February", - "MAR": "March", - "APR": "April", - "MAY": "May", - "JUN": "June", - "JUL": "July", - "AUG": "August", - "SEP": "September", - "OCT": "October", - "NOV": "November", - "DEC": "December" + "JAN": "Janvier", + "FEB": "Février", + "MAR": "Mars", + "APR": "Avril", + "MAY": "Mai", + "JUN": "Juin", + "JUL": "Juillet", + "AUG": "Août", + "SEP": "Septembre", + "OCT": "Octobre", + "NOV": "Novembre", + "DEC": "Décembre" }, "WEEK_DAYS": { - "SUN": "Sunday", - "MON": "Monday", - "TUE": "Tuesday", - "WED": "Wednesday", - "THU": "Thursday", - "FRI": "Friday", - "SAT": "Saturday" + "SUN": "Dimanche", + "MON": "Lundi", + "TUE": "Mardi", + "WED": "Mercredi", + "THU": "Jeudi", + "FRI": "Vendredi", + "SAT": "Dimanche" }, "WEEK_DAYS_SHORT": { - "SUN": "Sun", - "MON": "Mon", - "TUE": "Tue", - "WED": "Wed", - "THU": "Thu", - "FRI": "Fri", - "SAT": "Sat" + "SUN": "Dim", + "MON": "Lun", + "TUE": "Mar", + "WED": "Mer", + "THU": "Jeu", + "FRI": "Ven", + "SAT": "Sam" } }, "TAGS": { @@ -136,7 +136,7 @@ "REMOVE_ASSIGNED": "Supprimer l'affectation", "TOO_MANY": "...trop d'utilisateurs ; filtrez davantage", "CONFIRM_UNASSIGNED": "Etes-vous sûr de vouloir continuer sans affectation ?", - "TITLE_ACTION_EDIT_ASSIGNMENT": "Edit assignment" + "TITLE_ACTION_EDIT_ASSIGNMENT": "Modifier l'affectation" }, "STATUS": { "CLOSED": "Clos", @@ -195,41 +195,41 @@ "PERMISIONS_CATEGORIES": { "SPRINTS": { "NAME": "Sprints", - "VIEW_SPRINTS": "View sprints", - "ADD_SPRINTS": "Add sprints", - "MODIFY_SPRINTS": "Modify sprints", - "DELETE_SPRINTS": "Delete sprints" + "VIEW_SPRINTS": "Voir les sprints", + "ADD_SPRINTS": "Ajouter des sprints", + "MODIFY_SPRINTS": "Modifier des sprints", + "DELETE_SPRINTS": "Supprimer des sprints" }, "USER_STORIES": { "NAME": "Histoires Utilisateur", - "VIEW_USER_STORIES": "View user stories", - "ADD_USER_STORIES": "Add user stories", - "MODIFY_USER_STORIES": "Modify user stories", - "DELETE_USER_STORIES": "Delete user stories" + "VIEW_USER_STORIES": "Voir les histoires utilisateur", + "ADD_USER_STORIES": "Ajouter des histoires utilisateur", + "MODIFY_USER_STORIES": "Modifier des histoires utilisateur", + "DELETE_USER_STORIES": "Supprimer des histoires utilisateur" }, "TASKS": { "NAME": "Tâches", - "VIEW_TASKS": "View tasks", - "ADD_TASKS": "Add tasks", - "MODIFY_TASKS": "Modify tasks", - "DELETE_TASKS": "Delete tasks" + "VIEW_TASKS": "Voir les tâches", + "ADD_TASKS": "Ajouter des tâches", + "MODIFY_TASKS": "Modifier des tâches", + "DELETE_TASKS": "Supprimer des tâches" }, "ISSUES": { "NAME": "Problèmes", - "VIEW_ISSUES": "View issues", - "ADD_ISSUES": "Add issues", - "MODIFY_ISSUES": "Modify issues", - "DELETE_ISSUES": "Delete issues" + "VIEW_ISSUES": "Voir les problèmes", + "ADD_ISSUES": "Ajouter des problèmes", + "MODIFY_ISSUES": "Modifier des problèmes", + "DELETE_ISSUES": "Supprimer des problèmes" }, "WIKI": { "NAME": "Wiki", - "VIEW_WIKI_PAGES": "View wiki pages", - "ADD_WIKI_PAGES": "Add wiki pages", - "MODIFY_WIKI_PAGES": "Modify wiki pages", - "DELETE_WIKI_PAGES": "Delete wiki pages", - "VIEW_WIKI_LINKS": "View wiki links", - "ADD_WIKI_LINKS": "Add wiki links", - "DELETE_WIKI_LINKS": "Delete wiki links" + "VIEW_WIKI_PAGES": "Voir les pages wiki", + "ADD_WIKI_PAGES": "Ajouter des pages wiki", + "MODIFY_WIKI_PAGES": "Modifier des pages wiki", + "DELETE_WIKI_PAGES": "Supprimer des pages wiki", + "VIEW_WIKI_LINKS": "Voir les liens wiki", + "ADD_WIKI_LINKS": "Ajouter des liens wiki", + "DELETE_WIKI_LINKS": "Supprimer des liens wiki" } } }, @@ -252,8 +252,8 @@ "MAX_UPLOAD_SIZE": "La taille maximum d'upload est {{maxFileSize}}", "DATE": "DD MMM YYYY [at] hh:mm", "ERROR_UPLOAD_ATTACHMENT": "We have not been able to upload '{{fileName}}'. {{errorMessage}}", - "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Delete attachment...", - "MSG_LIGHTBOX_DELETE_ATTACHMENT": "the attachment '{{fileName}}'", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Supprimer la pièce jointe...", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "la pièce jointe \"{{fileName}}\"", "ERROR_DELETE_ATTACHMENT": "We have not been able to delete: {{errorMessage}}", "FIELDS": { "IS_DEPRECATED": "est obsolète" @@ -332,7 +332,7 @@ }, "CSV": { "SECTION_TITLE_US": "user stories reports", - "SECTION_TITLE_TASK": "tasks reports", + "SECTION_TITLE_TASK": "Rapports des tâches", "SECTION_TITLE_ISSUE": "issues reports", "DOWNLOAD": "Télécharger au format CSV", "URL_FIELD_PLACEHOLDER": "Merci de regénérer l'url de téléchargement au format CSV", @@ -363,7 +363,7 @@ "PROJECT_VALUES_PRIORITIES": { "TITLE": "Priorités des problèmes", "SUBTITLE": "Spécifiez les priorités qu'auront vos problèmes", - "ACTION_ADD": "Add new priority" + "ACTION_ADD": "Ajouter une priorité" }, "PROJECT_VALUES_SEVERITIES": { "TITLE": "Sévérités des problèmes", @@ -534,7 +534,7 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Your projects", + "SECTION_TITLE": "Vos projets", "PLACEHOLDER_SEARCH": "Rechercher dans", "ACTION_CREATE_PROJECT": "Créer un projet", "TITLE_ACTION_IMPORT": "Importer un projet", @@ -560,7 +560,7 @@ "SECTION_NAME": "Supprimer le compte Taiga", "CONFIRM": "Etes-vous sûr de vouloir votre compte Taiga ?", "SUBTITLE": "Vous allez nous manquer :(", - "NEWSLETTER_LABEL_TEXT": "I don't wanna receive your newsletter anymore" + "NEWSLETTER_LABEL_TEXT": "Je ne veux plus recevoir votre newsletter" }, "DELETE_PROJECT": { "TITLE": "Supprimer le projet", @@ -702,7 +702,7 @@ "BACKLOG_ORDER": "backlog order", "SPRINT_ORDER": "sprint order", "KANBAN_ORDER": "kanban order", - "TASKBOARD_ORDER": "taskboard order", + "TASKBOARD_ORDER": "trier le tableau des tâches", "US_ORDER": "us order" } }, @@ -733,6 +733,7 @@ "INCREMENT_CLIENT": "Le nombre de points ajoutés par les exigences du client pour le sprint {{xval}} est {{yval}}" }, "TAGS": { + "TOGGLE": "Toggle tags visibility", "SHOW": "Montrer les étiquettes", "HIDE": "Cacher les étiquettes" }, @@ -755,8 +756,10 @@ "POINTS_PER_SPRINT": "points /
sprint" }, "FILTERS": { + "TOGGLE": "Toggle filters visibility", "TITLE": "Filtres", "REMOVE": "Supprimer les filtres", + "HIDE": "Hide Filters", "SHOW": "Afficher les filtres", "FILTER_CATEGORY_STATUS": "Etat", "FILTER_CATEGORY_TAGS": "Labels" @@ -806,7 +809,7 @@ } }, "TASK": { - "SECTION_NAME": "Task details", + "SECTION_NAME": "Détails de la tâche", "LINK_TASKBOARD": "Tableau des tâches", "TITLE_LINK_TASKBOARD": "Aller au tableau des tâches", "PLACEHOLDER_SUBJECT": "Entrez le sujet de la nouvelle tâche", diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index e28ad450..a5a1d536 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -733,6 +733,7 @@ "INCREMENT_CLIENT": "客戶要求的任務衝刺逐步新增點數 {{xval}} 為 {{yval}}" }, "TAGS": { + "TOGGLE": "Toggle tags visibility", "SHOW": "顯示標籤", "HIDE": "隱藏標籤" }, @@ -755,8 +756,10 @@ "POINTS_PER_SPRINT": "點數 /
衝刺任務" }, "FILTERS": { + "TOGGLE": "Toggle filters visibility", "TITLE": "過濾器", "REMOVE": "移除過濾器", + "HIDE": "Hide Filters", "SHOW": "顯示過濾器", "FILTER_CATEGORY_STATUS": "狀態", "FILTER_CATEGORY_TAGS": "標籤" From eecdbf8ef3c3e7d862e770470c20ba75b1d016e5 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 19 May 2015 11:52:58 +0200 Subject: [PATCH 176/194] Fixing i18n filters in backlog --- app/partials/backlog/backlog.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/backlog/backlog.jade b/app/partials/backlog/backlog.jade index 7e45dfa0..29edba68 100644 --- a/app/partials/backlog/backlog.jade +++ b/app/partials/backlog/backlog.jade @@ -24,7 +24,7 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl", title="{{'BACKLOG.FILTERS.TOGGLE' | translate}}", id="show-filters-button") span.icon.icon-filter - span.text(translate="BACKLOG.FILTERS.SHOW") Show Filters + span.text(translate="BACKLOG.FILTERS.SHOW") a.trans-button(href="", title="{{'BACKLOG.TAGS.TOGGLE' | translate}}", id="show-tags") From d66bb4c326ccb852a895f318f5f25e955d977722 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 19 May 2015 12:24:05 +0200 Subject: [PATCH 177/194] Fixing empty descriptions i18n --- app/coffee/modules/common/components.coffee | 4 ++-- .../common/components/editable-description-msg-read-mode.jade | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/coffee/modules/common/components.coffee b/app/coffee/modules/common/components.coffee index 14130067..cbd96abc 100644 --- a/app/coffee/modules/common/components.coffee +++ b/app/coffee/modules/common/components.coffee @@ -602,9 +602,9 @@ EditableDescriptionDirective = ($rootscope, $repo, $confirm, $compile, $loading, if isEditable() $el.find('.view-description .edit').show() $el.find('.view-description .us-content').addClass('editable') - $scope.noDescriptionMsg = noDescriptionMegEditMode + $scope.noDescriptionMsg = $compile(noDescriptionMegEditMode)($scope) else - $scope.noDescriptionMsg = noDescriptionMegReadMode + $scope.noDescriptionMsg = $compile(noDescriptionMegReadMode)($scope) $scope.$on "$destroy", -> $el.off() diff --git a/app/partials/common/components/editable-description-msg-read-mode.jade b/app/partials/common/components/editable-description-msg-read-mode.jade index e67dca53..b25abdef 100644 --- a/app/partials/common/components/editable-description-msg-read-mode.jade +++ b/app/partials/common/components/editable-description-msg-read-mode.jade @@ -1 +1 @@ -p.no-description(translate="COMMON.NO_DESCRIPTION") \ No newline at end of file +p.no-description(translate="COMMON.DESCRIPTION.NO_DESCRIPTION") From 47d4e719d6a2ef338563f81defa3bb1ce16b69aa Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 19 May 2015 13:04:05 +0200 Subject: [PATCH 178/194] Fixing i18n for deprecated attachments --- app/locales/locale-en.json | 3 ++- app/partials/attachment/attachment.jade | 2 +- app/partials/attachment/attachments.jade | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 02e956b7..5b62904c 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -243,12 +243,13 @@ "SECTION_NAME": "attachments", "TITLE": "{{ fileName }} uploaded on {{ date }}", "DESCRIPTION": "Type a short description", + "DEPRECATED": "(deprecated)", "DEPRECATED_FILE": "Deprecated?", "ADD": "Add new attachment. <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Max. size: {{maxFileSize}}]", "SHOW_DEPRECATED": "+ show deprecated atachments", "HIDE_DEPRECATED": "- hide deprecated atachments", - "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} deprecated)", + "COUNT_DEPRECATED": "({{ counter }} deprecated)", "MAX_UPLOAD_SIZE": "Maximum upload size is {{maxFileSize}}", "DATE": "DD MMM YYYY [at] hh:mm", "ERROR_UPLOAD_ATTACHMENT": "We have not been able to upload '{{fileName}}'. {{errorMessage}}", diff --git a/app/partials/attachment/attachment.jade b/app/partials/attachment/attachment.jade index b4476f51..0f783021 100644 --- a/app/partials/attachment/attachment.jade +++ b/app/partials/attachment/attachment.jade @@ -7,7 +7,7 @@ .attachment-comments <% if (isDeprecated){ %> - span.deprecated-file {{ 'ATTACHMENT.DEPRECATED' | translate}} + span.deprecated-file {{'ATTACHMENT.DEPRECATED' | translate}} <% } %> span <%- description %> diff --git a/app/partials/attachment/attachments.jade b/app/partials/attachment/attachments.jade index 64783c67..0cd720a8 100644 --- a/app/partials/attachment/attachments.jade +++ b/app/partials/attachment/attachments.jade @@ -25,4 +25,4 @@ section.attachments a.more-attachments(href="", title="{{'ATTACHMENT.SHOW_DEPRECATED' | translate}}", ng-if="ctrl.deprecatedAttachmentsCount > 0") span.text(data-type="show", translate="ATTACHMENT.SHOW_DEPRECATED") span.text.hidden(data-type="hide", translate="ATTACHMENT.HIDE_DEPRECATED") - span.more-attachments-num(translate="ATTACHMENT.COUNT_DEPRECATED") + span.more-attachments-num(translate="ATTACHMENT.COUNT_DEPRECATED", translate-values="{counter: '{{ctrl.deprecatedAttachmentsCount}}'}") From 0de14b45bee4a0c33bd14d1a26cb4bf3459c4cb1 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 19 May 2015 13:08:17 +0200 Subject: [PATCH 179/194] Updating translation files --- app/locales/locale-ca.json | 3 ++- app/locales/locale-es.json | 13 +++++++------ app/locales/locale-fi.json | 3 ++- app/locales/locale-fr.json | 3 ++- app/locales/locale-zh-hant.json | 3 ++- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index ed9f9e66..2c7c3e03 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -243,12 +243,13 @@ "SECTION_NAME": "Adjunts", "TITLE": "{{ fileName }} pujat el {{ date }}", "DESCRIPTION": "Escriu una descripció curta", + "DEPRECATED": "(deprecated)", "DEPRECATED_FILE": "Obsolet?", "ADD": "Afegir nou adjunt. <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Max. grandària: {{maxFileSize}}]", "SHOW_DEPRECATED": "+ mostra els adjunts obsolets", "HIDE_DEPRECATED": "- Amagar els adjunts obsolets", - "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} obsolet)", + "COUNT_DEPRECATED": "({{ counter }} deprecated)", "MAX_UPLOAD_SIZE": "El tamany màxim de pujada es ", "DATE": "DD MMM YYYY [at] hh:mm", "ERROR_UPLOAD_ATTACHMENT": "No hem pogut pujar '{{fileName}}'. {{errorMessage}}", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index c04a47dc..f4c87d62 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -150,7 +150,7 @@ }, "CUSTOM_ATTRIBUTES": { "CUSTOM_FIELDS": "Atributo Personalizados", - "SAVE": "Guardar Atributo Personalizado", + "SAVE": "Guardar atributo personalizado", "EDIT": "Editar Atributo Personalizado", "DELETE": "Borrar atributos personalizados", "CONFIRM_DELETE": "Recuerda que todos los valores en este atributo personalizado serán borrados.
¿Estás seguro que desea continuar?" @@ -243,12 +243,13 @@ "SECTION_NAME": "adjuntos", "TITLE": "{{ fileName }} subido el {{ date }}", "DESCRIPTION": "Escribe una pequeña descripción", + "DEPRECATED": "(obsoleto)", "DEPRECATED_FILE": "¿Desactualizado?", "ADD": "Agrega nuevos adjunto", "MAX_FILE_SIZE": "[Tamaño Max. : {{maxFileSize}}]", "SHOW_DEPRECATED": "+ muestra adjuntos desactualizados", "HIDE_DEPRECATED": "- ocultar adjuntos obsoletos", - "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} obsoleto)", + "COUNT_DEPRECATED": "({{ counter }} obsoletos)\n", "MAX_UPLOAD_SIZE": "El tamaño máximo de subida es de {{maxFileSize}}", "DATE": "DD MMM YYYY [a las] hh:mm\n", "ERROR_UPLOAD_ATTACHMENT": "No hemos podido subir el fichero '{{fileName}}'. {{errorMessage}}", @@ -443,7 +444,7 @@ "ADD": "Añadir atributo personalizado", "EDIT": "Editar atributo personalizado", "DELETE": "Eliminar atributo personalizado", - "SAVE_TITLE": "Guardar Atributo Personalizado", + "SAVE_TITLE": "Guardar atributo personalizado", "CANCEL_TITLE": "Cancelar la creación", "SET_FIELD_NAME": "Escribe el nombre del atributo personalizado", "SET_FIELD_DESCRIPTION": "Escribe una descripción para el atributo personalizado", @@ -940,7 +941,7 @@ }, "CONFIRM_DELETE": { "TITLE": "Eliminar filtros personalizados", - "MESSAGE": "el atributo personalizado '{{customFilterName}}'" + "MESSAGE": "el filtro personalizado '{{customFilterName}}'" } }, "TABLE": { @@ -984,7 +985,7 @@ "PLACEHOLDER_SEARCH": "Buscar...", "TITLE_ACTION_SEARCH": "buscar", "EMPTY_TITLE": "Parece que no se ha encontrado nada con tus criterios de búsqueda.", - "EMPTY_DESCRIPTION": "Prueba con otra pestaña de las de arriba o busque nuevamente" + "EMPTY_DESCRIPTION": "Prueba con otra pestaña de las de arriba o busca de nuevo" }, "TEAM": { "SECTION_NAME": "Equipo", @@ -999,7 +1000,7 @@ "COLUMN_BUG_HUNTER": "Cazador de Bugs", "EXPLANATION_COLUMN_BUG_HUNTER": "Peticiones reportadas", "COLUMN_NIGHT_SHIFT": "Turno de noche", - "EXPLANATION_COLUMN_NIGHT_SHIFT": "Actividades cerradas", + "EXPLANATION_COLUMN_NIGHT_SHIFT": "Tareas cerradas", "COLUMN_TOTAL_POWER": "Potencia Total", "EXPLANATION_COLUMN_TOTAL_POWER": "Puntos Totales", "SECTION_TITLE_TEAM": "Equipo >", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index 22364302..db0f932e 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -243,12 +243,13 @@ "SECTION_NAME": "liitteet", "TITLE": "{{ fileName }} ladattu {{ date }}\n", "DESCRIPTION": "Kirjoita lyhyt kuvaus", + "DEPRECATED": "(deprecated)", "DEPRECATED_FILE": "Vanhentunut?", "ADD": "Lisää liite. <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Maks. koko: {{maxFileSize}}]", "SHOW_DEPRECATED": "+ näytä vanhentuneet liitteet", "HIDE_DEPRECATED": "- piilota vanhentuneet liitteet", - "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} vanhentunutta)", + "COUNT_DEPRECATED": "({{ counter }} deprecated)", "MAX_UPLOAD_SIZE": "Maksimi tiedoston koko {{maxFileSize}}", "DATE": "DD MMM YYYY - hh:mm", "ERROR_UPLOAD_ATTACHMENT": "Emme onnistuneet lataamaan tiedostoa '{{fileName}}'. {{errorMessage}}", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 82c63cc7..646a0475 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -243,12 +243,13 @@ "SECTION_NAME": "pièces jointes", "TITLE": "{{ fileName }} transmis le {{ date }}\n", "DESCRIPTION": "Saisissez une description courte", + "DEPRECATED": "(deprecated)", "DEPRECATED_FILE": "Obsolète?", "ADD": "Ajouter une pièce jointe. <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Taille max.: {{maxFileSize}}]", "SHOW_DEPRECATED": "+ montrer les pièces jointes obsolètes", "HIDE_DEPRECATED": "- cacher les pièces jointes obsolètes", - "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} obsolète)", + "COUNT_DEPRECATED": "({{ counter }} deprecated)", "MAX_UPLOAD_SIZE": "La taille maximum d'upload est {{maxFileSize}}", "DATE": "DD MMM YYYY [at] hh:mm", "ERROR_UPLOAD_ATTACHMENT": "We have not been able to upload '{{fileName}}'. {{errorMessage}}", diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index a5a1d536..a431ea3b 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -243,12 +243,13 @@ "SECTION_NAME": "附件", "TITLE": "{{ fileName }} 上傳於 {{ date }}", "DESCRIPTION": "輸入一段簡短描述", + "DEPRECATED": "(deprecated)", "DEPRECATED_FILE": "棄用?", "ADD": "加入新附件 <%- maxFileSizeMsg %>", "MAX_FILE_SIZE": "[Max. size: {{maxFileSize}}]", "SHOW_DEPRECATED": "+ 顯示棄用的附件", "HIDE_DEPRECATED": "+ 隱藏棄用的附件", - "COUNT_DEPRECATED": "({{ctrl.deprecatedAttachmentsCount }} 遭棄用)", + "COUNT_DEPRECATED": "({{ counter }} deprecated)", "MAX_UPLOAD_SIZE": "上傳檔案最大容量限制 {{maxFileSize}}", "DATE": "DD MMM YYYY [at] hh:mm", "ERROR_UPLOAD_ATTACHMENT": "無法成功上傳 '{{fileName}}'. {{errorMessage}}", From 460c293c6392d0e435322d7eba2835e07dffd18d Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 19 May 2015 14:21:08 +0200 Subject: [PATCH 180/194] Issue #2697 - Refresh stats bar when a wiki page is updated --- app/coffee/modules/wiki/main.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index f72414a9..f8141940 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -216,7 +216,7 @@ EditableWikiContentDirective = ($window, $document, $repo, $confirm, $loading, $ if not wiki.id? $analytics.trackEvent("wikipage", "create", "create wiki page", 1) - $model.$setViewValue wikiPage + $model.$setViewValue wikiPage.clone() $confirm.notify("success") switchToReadMode() From 351d946ea99134802e6ff8aed0bd8d8c8f7541ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 19 May 2015 17:52:01 +0200 Subject: [PATCH 181/194] [i18n] tg-2674 #ready-for-test --- app/coffee/modules/backlog/lightboxes.coffee | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/coffee/modules/backlog/lightboxes.coffee b/app/coffee/modules/backlog/lightboxes.coffee index 99f19a81..cd72905e 100644 --- a/app/coffee/modules/backlog/lightboxes.coffee +++ b/app/coffee/modules/backlog/lightboxes.coffee @@ -43,8 +43,10 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, submit = debounce 2000, (event) => event.preventDefault() - target = angular.element(event.currentTarget) + prettyDate = $translate.instant("COMMON.PICKERDATE.FORMAT") + + submitButton = $el.find(".submit-button") form = $el.find("form").checksley() if not form.validate() @@ -57,13 +59,15 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, broadcastEvent = null if createSprint - newSprint.estimated_start = moment(newSprint.estimated_start).format("YYYY-MM-DD") - newSprint.estimated_finish = moment(newSprint.estimated_finish).format("YYYY-MM-DD") + newSprint.estimated_start = moment(newSprint.estimated_start, prettyDate).format("YYYY-MM-DD") + newSprint.estimated_finish = moment(newSprint.estimated_finish,prettyDate).format("YYYY-MM-DD") promise = $repo.create("milestones", newSprint) broadcastEvent = "sprintform:create:success" else - newSprint.setAttr("estimated_start", moment(newSprint.estimated_start).format("YYYY-MM-DD")) - newSprint.setAttr("estimated_finish", moment(newSprint.estimated_finish).format("YYYY-MM-DD")) + newSprint.setAttr("estimated_start", + moment(newSprint.estimated_start, prettyDate).format("YYYY-MM-DD")) + newSprint.setAttr("estimated_finish", + moment(newSprint.estimated_finish, prettyDate).format("YYYY-MM-DD")) promise = $repo.save(newSprint) broadcastEvent = "sprintform:edit:success" @@ -172,8 +176,6 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, else $el.find(".last-sprint-name").removeClass("disappear") - submitButton = $el.find(".submit-button") - $el.on "submit", "form", submit $el.on "click", ".delete-sprint .icon-delete", (event) -> From d73d9acd45d2e8acae6972b97c63ae8385cf50db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Wed, 20 May 2015 10:56:42 +0200 Subject: [PATCH 182/194] Projects Navigation styles --- app/partials/project/project-navigation-base.jade | 4 ++-- app/styles/modules/common/projects-nav.scss | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/partials/project/project-navigation-base.jade b/app/partials/project/project-navigation-base.jade index 0209704b..c360b971 100644 --- a/app/partials/project/project-navigation-base.jade +++ b/app/partials/project/project-navigation-base.jade @@ -10,7 +10,7 @@ div.create-project-button-wrapper title="{{'PROJECT.NAVIGATION.ACTION_CREATE_PROJECT' | translate}}") span(translate="PROJECT.NAVIGATION.ACTION_CREATE_PROJECT") - div(tg-import-project-button) + div(tg-import-project-button) a.button-blackish.import-project-button(href="", title="{{'PROJECT.NAVIGATION.TITLE_ACTION_IMPORT' | translate}}") span.icon.icon-upload @@ -21,5 +21,5 @@ div.projects-pagination(tg-projects-pagination) title="{{'PROJECT.NAVIGATION.TITLE_PRVIOUS_PROJECT' | translate}}") div.v-pagination-list ul.projects-list - a.v-pagination-next.icon.icon-arrow-bottom(href="", + a.v-pagination-next.icon.icon-arrow-bottom(href="", title="{{'PROJECT.NAVIGATION.TITLE_NEXT_PROJECT' | translate}}") diff --git a/app/styles/modules/common/projects-nav.scss b/app/styles/modules/common/projects-nav.scss index ab0b0507..1d958470 100644 --- a/app/styles/modules/common/projects-nav.scss +++ b/app/styles/modules/common/projects-nav.scss @@ -1,5 +1,5 @@ .projects-nav { - background-color: $gray; + background-color: $blackish; display: flex; flex-direction: column; height: 100%; From 036b42ca98d0d882670923021353999f69e0720b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 20 May 2015 10:56:53 +0200 Subject: [PATCH 183/194] [i18n] Fix some typos --- app/locales/locale-es.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index f4c87d62..6a33f4a7 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -703,7 +703,7 @@ "BACKLOG_ORDER": "orden en backlog", "SPRINT_ORDER": "orden en sprint", "KANBAN_ORDER": "orden en kanban", - "TASKBOARD_ORDER": "orden en panel de tareras", + "TASKBOARD_ORDER": "orden en panel de tareas", "US_ORDER": "orden en historia" } }, @@ -811,7 +811,7 @@ }, "TASK": { "SECTION_NAME": "Detalles de tarea", - "LINK_TASKBOARD": "Panel de tereas", + "LINK_TASKBOARD": "Panel de tareas", "TITLE_LINK_TASKBOARD": "Ir al panel de tareas", "PLACEHOLDER_SUBJECT": "Escribe el asunto de la nueva tarea", "TITLE_SELECT_STATUS": "Nombre del estado", From ad29aa73ca29851bee6b606a252e0f90650b4292 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 20 May 2015 10:58:11 +0200 Subject: [PATCH 184/194] Issue #2705-Deleting a role never hides the lightbox --- app/coffee/modules/admin/roles.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/admin/roles.coffee b/app/coffee/modules/admin/roles.coffee index 41164ed1..9e3b1669 100644 --- a/app/coffee/modules/admin/roles.coffee +++ b/app/coffee/modules/admin/roles.coffee @@ -128,7 +128,7 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil replacement = @translate.instant("ADMIN.ROLES.REPLACEMENT_ROLE") warning = @translate.instant("ADMIN.ROLES.WARNING_DELETE_ROLE") return @confirm.askChoice(title, subtitle, choices, replacement, warning).then (response) => - onSuccess = (response)=> + onSuccess = => @.loadProject() @.loadRoles().finally => response.finish() From eb7f26c1234121938d3adbbbb464e1ba05a6e18f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Wed, 20 May 2015 11:08:27 +0200 Subject: [PATCH 185/194] Fix menu layout for long texts --- app/styles/modules/admin/admin-submenu.scss | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/styles/modules/admin/admin-submenu.scss b/app/styles/modules/admin/admin-submenu.scss index b404d12f..58e32f39 100644 --- a/app/styles/modules/admin/admin-submenu.scss +++ b/app/styles/modules/admin/admin-submenu.scss @@ -14,7 +14,8 @@ } a { color: $white; - display: block; + display: flex; + justify-content: space-between; padding: 1rem 0 1rem 1rem; &.active, &:hover { @@ -25,6 +26,13 @@ transition: opacity .3s linear; } } + span { + display: block; + max-width: 85%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } } .icon { color: $white; From f14bf073a00984e07a484ad4e83560c6f8f7bd08 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 20 May 2015 12:26:22 +0200 Subject: [PATCH 186/194] Issue #2701 - Attributes title not translated --- app/locales/locale-en.json | 3 +++ .../includes/modules/admin-submenu-project-values.jade | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/locales/locale-en.json b/app/locales/locale-en.json index 5b62904c..1b1f3779 100644 --- a/app/locales/locale-en.json +++ b/app/locales/locale-en.json @@ -495,6 +495,9 @@ "INTEGRATIONS": "Integrations", "PLUGINS": "Plugins" }, + "SUBMENU_PROJECT_ATTRIBUTES": { + "TITLE": "Attributes" + }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Status", "POINTS": "Points", diff --git a/app/partials/includes/modules/admin-submenu-project-values.jade b/app/partials/includes/modules/admin-submenu-project-values.jade index d81e8e1e..73047d78 100644 --- a/app/partials/includes/modules/admin-submenu-project-values.jade +++ b/app/partials/includes/modules/admin-submenu-project-values.jade @@ -1,6 +1,6 @@ section.admin-submenu header - h1(translate) Attributes + h1(translate="ADMIN.SUBMENU_PROJECT_ATTRIBUTES.TITLE") nav ul From 60837981885196195f102a510bb1d2e75142e718 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 20 May 2015 12:27:33 +0200 Subject: [PATCH 187/194] Updating translation files --- app/locales/locale-ca.json | 3 +++ app/locales/locale-es.json | 3 +++ app/locales/locale-fi.json | 3 +++ app/locales/locale-fr.json | 3 +++ app/locales/locale-zh-hant.json | 3 +++ 5 files changed, 15 insertions(+) diff --git a/app/locales/locale-ca.json b/app/locales/locale-ca.json index 2c7c3e03..b2fd9755 100644 --- a/app/locales/locale-ca.json +++ b/app/locales/locale-ca.json @@ -495,6 +495,9 @@ "INTEGRATIONS": "Integracions", "PLUGINS": "Plugins" }, + "SUBMENU_PROJECT_ATTRIBUTES": { + "TITLE": "Attributes" + }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Estatus", "POINTS": "Punts", diff --git a/app/locales/locale-es.json b/app/locales/locale-es.json index 6a33f4a7..27b4ea4b 100644 --- a/app/locales/locale-es.json +++ b/app/locales/locale-es.json @@ -495,6 +495,9 @@ "INTEGRATIONS": "Integraciones", "PLUGINS": "Plugins" }, + "SUBMENU_PROJECT_ATTRIBUTES": { + "TITLE": "Atributos" + }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Estados", "POINTS": "Puntos", diff --git a/app/locales/locale-fi.json b/app/locales/locale-fi.json index db0f932e..4296274d 100644 --- a/app/locales/locale-fi.json +++ b/app/locales/locale-fi.json @@ -495,6 +495,9 @@ "INTEGRATIONS": "Intergraatiot", "PLUGINS": "Pluginit" }, + "SUBMENU_PROJECT_ATTRIBUTES": { + "TITLE": "Attributes" + }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Tila", "POINTS": "Pisteet", diff --git a/app/locales/locale-fr.json b/app/locales/locale-fr.json index 646a0475..0d79d36f 100644 --- a/app/locales/locale-fr.json +++ b/app/locales/locale-fr.json @@ -495,6 +495,9 @@ "INTEGRATIONS": "Intégrations", "PLUGINS": "Plugins" }, + "SUBMENU_PROJECT_ATTRIBUTES": { + "TITLE": "Attributes" + }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Etats", "POINTS": "Points", diff --git a/app/locales/locale-zh-hant.json b/app/locales/locale-zh-hant.json index a431ea3b..9d7cc7ab 100644 --- a/app/locales/locale-zh-hant.json +++ b/app/locales/locale-zh-hant.json @@ -495,6 +495,9 @@ "INTEGRATIONS": "整合", "PLUGINS": "外掛" }, + "SUBMENU_PROJECT_ATTRIBUTES": { + "TITLE": "Attributes" + }, "SUBMENU_PROJECT_VALUES": { "STATUS": "狀態", "POINTS": "點數", From 4f7367c5c249cc084ec0ea0dfe6217af9a9fbd13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 20 May 2015 12:40:53 +0200 Subject: [PATCH 188/194] tg-2698 #ready-for-test - Fix probles with status between the options WIP limit and is_archived --- app/coffee/modules/kanban/main.coffee | 17 ++++++++++------- .../modules/admin/project-us-status.jade | 17 ++++++++++------- app/partials/includes/modules/kanban-table.jade | 2 +- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index 5d9a0b61..6b45ea6b 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -470,17 +470,20 @@ KanbanWipLimitDirective = -> link = ($scope, $el, $attrs) -> $el.disableSelection() - redrawWipLimit = -> + status = $scope.$eval($attrs.tgKanbanWipLimit) + + redrawWipLimit = => $el.find(".kanban-wip-limit").remove() - timeout 200, -> - element = $el.find(".kanban-task")[$scope.$eval($attrs.tgKanbanWipLimit)] + timeout 200, => + element = $el.find(".kanban-task")[status.wip_limit] if element angular.element(element).before("
") - $scope.$on "redraw:wip", redrawWipLimit - $scope.$on "kanban:us:move", redrawWipLimit - $scope.$on "usform:new:success", redrawWipLimit - $scope.$on "usform:bulk:success", redrawWipLimit + if status and not status.is_archived + $scope.$on "redraw:wip", redrawWipLimit + $scope.$on "kanban:us:move", redrawWipLimit + $scope.$on "usform:new:success", redrawWipLimit + $scope.$on "usform:bulk:success", redrawWipLimit $scope.$on "$destroy", -> $el.off() diff --git a/app/partials/includes/modules/admin/project-us-status.jade b/app/partials/includes/modules/admin/project-us-status.jade index 7d7273cd..dd1adf63 100644 --- a/app/partials/includes/modules/admin/project-us-status.jade +++ b/app/partials/includes/modules/admin/project-us-status.jade @@ -38,7 +38,7 @@ section.project-us-status div.icon.icon-check-square(ng-show="value.is_archived") div.status-wip-limit - span {{ value.wip_limit }} + span(ng-hide="value.is_archived") {{ value.wip_limit }} div.options-column a.edit-value.icon.icon-edit(href="", title="{{'ADMIN.COMMON.TITLE_ACTION_EDIT_VALUE' | translate}}") @@ -63,8 +63,9 @@ section.project-us-status ng-options="e.id as e.name | translate for e in [{'id':true, 'name':'COMMON.YES'},{'id':false, 'name': 'COMMON.NO'}]") div.status-wip-limit - input(name="wip_limit", type="number", placeholder="{{'ADMIN.US_STATUS.WIP_LIMIT_COLUMN' | translate}}", - ng-model="value.wip_limit", data-type="digits") + input(name="wip_limit", type="number", ng-hide="value.is_archived", + ng-model="value.wip_limit", data-type="digits", + placeholder="{{'ADMIN.US_STATUS.WIP_LIMIT_COLUMN' | translate}}") div.options-column a.save.icon.icon-floppy(href="", title="{{'COMMON.SAVE' | translate}}") @@ -77,8 +78,9 @@ section.project-us-status include ../../components/select-color div.status-name - input(name="name", type="text", placeholder="{{'ADMIN.US_STATUS.PLACEHOLDER_WRITE_NAME' | translate}}", - ng-model="newValue.name", data-required="true", data-maxlength="255") + input(name="name", type="text", + ng-model="newValue.name", data-required="true", data-maxlength="255", + placeholder="{{'ADMIN.US_STATUS.PLACEHOLDER_WRITE_NAME' | translate}}") div.is-closed-column select(name="is_closed", ng-model="newValue.is_closed", data-required="true", @@ -89,8 +91,9 @@ section.project-us-status ng-options="e.id as e.name | translate for e in [{'id':true, 'name':'COMMON.YES'},{'id':false, 'name': 'COMMON.NO'}]") div.status-wip-limit - input(name="wip_limit", type="number", placeholder="{{'ADMIN.US_STATUS.WIP_LIMIT_COLUMN' | translate}}", - ng-model="newValue.wip_limit", data-type="digits") + input(name="wip_limit", type="number", ng-hide="newValue.is_archived", + ng-model="newValue.wip_limit", data-type="digits", + placeholder="{{'ADMIN.US_STATUS.WIP_LIMIT_COLUMN' | translate}}") div.options-column a.add-new.icon.icon-floppy(href="", title="{{'COMMON.ADD' | translate}}") diff --git a/app/partials/includes/modules/kanban-table.jade b/app/partials/includes/modules/kanban-table.jade index 1e29a995..8c624c10 100644 --- a/app/partials/includes/modules/kanban-table.jade +++ b/app/partials/includes/modules/kanban-table.jade @@ -36,7 +36,7 @@ div.kanban-table(tg-kanban-squish-column) div.kanban-uses-box.task-column(ng-class='{vfold:folds[s.id]}', ng-repeat="s in usStatusList track by s.id", tg-kanban-sortable, - tg-kanban-wip-limit="s.wip_limit", + tg-kanban-wip-limit="s", tg-kanban-column-height-fixer, tg-bind-scope) From 52f220a41c573ee8e128a3b66bacd67c2d58f681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 20 May 2015 13:36:01 +0200 Subject: [PATCH 189/194] Update humnas.txt --- extras/humans.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extras/humans.txt b/extras/humans.txt index a612f8d1..6bfa6c65 100644 --- a/extras/humans.txt +++ b/extras/humans.txt @@ -48,8 +48,8 @@ Site: http://kaleidos.net Twitter: @elhombretecla Location: Madrid, Spain - - Taiga UX Consultan: Esther Moreno + + Taiga UX Consultan & LEGO architect: Esther Moreno Site: http://kaleidos.net Twitter: @plumilla Location: Madrid, Spain From 2824b66f07bfaea9a6a9d8796988943acc1e4955 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 20 May 2015 15:13:57 +0200 Subject: [PATCH 190/194] Issue #2708 - Colors for attributes in admin are not shown properly --- app/partials/includes/components/select-color.jade | 2 +- app/partials/includes/modules/admin/project-status.jade | 6 +++--- app/partials/includes/modules/admin/project-types.jade | 6 +++--- app/partials/includes/modules/admin/project-us-status.jade | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/partials/includes/components/select-color.jade b/app/partials/includes/components/select-color.jade index 0a519b2d..3f9f4306 100644 --- a/app/partials/includes/components/select-color.jade +++ b/app/partials/includes/components/select-color.jade @@ -23,4 +23,4 @@ div.popover.select-color li.color(style="background: #2e3436", data-color="#2e3436") input(type="text", placeholder="personalized colors", ng-model="color") - div.selected-color(style="background-color: {{ color }}") + div.selected-color(ng-style="{'background-color': color}") diff --git a/app/partials/includes/modules/admin/project-status.jade b/app/partials/includes/modules/admin/project-status.jade index c7824865..087ddc65 100644 --- a/app/partials/includes/modules/admin/project-status.jade +++ b/app/partials/includes/modules/admin/project-status.jade @@ -18,7 +18,7 @@ section.colors-table.admin-status-table div.row.table-main.visualization span.icon.icon-drag-v div.color-column - div.current-color(style="background: {{ value.color }}") + div.current-color(ng-style="{background: value.color}") div.status-name span {{ value.name }} @@ -35,7 +35,7 @@ section.colors-table.admin-status-table div.row.table-main.edition.hidden div.color-column(tg-color-selection, ng-model="value") - div.current-color(style="background: {{ value.color }}") + div.current-color(ng-style="{background: value.color}") include ../../components/select-color div.status-name @@ -53,7 +53,7 @@ section.colors-table.admin-status-table form div.row.table-main.new-value.hidden div.color-column(tg-color-selection, ng-model="newValue") - div.current-color(style="background: {{ newValue.color }}") + div.current-color(ng-style="{background: newValue.color}") include ../../components/select-color div.status-name diff --git a/app/partials/includes/modules/admin/project-types.jade b/app/partials/includes/modules/admin/project-types.jade index 5cf626fd..9d5b1f00 100644 --- a/app/partials/includes/modules/admin/project-types.jade +++ b/app/partials/includes/modules/admin/project-types.jade @@ -18,7 +18,7 @@ section.colors-table span.icon.icon-drag-v div.color-column - div.current-color(style="background: {{ value.color }}") + div.current-color(ng-style="{background: value.color}") div.status-name span {{ value.name }} @@ -29,7 +29,7 @@ section.colors-table div.row.table-main.edition.hidden div.color-column(tg-color-selection, ng-model="value") - div.current-color(style="background: {{ value.color }}") + div.current-color(ng-style="{background: value.color}") include ../../components/select-color div.status-name @@ -43,7 +43,7 @@ section.colors-table form div.row.table-main.new-value.hidden div.color-column(tg-color-selection, ng-model="newValue") - div.current-color(style="background: {{ newValue.color }}") + div.current-color(ng-style="{background: newValue.color}") include ../../components/select-color div.status-name diff --git a/app/partials/includes/modules/admin/project-us-status.jade b/app/partials/includes/modules/admin/project-us-status.jade index dd1adf63..98eea63f 100644 --- a/app/partials/includes/modules/admin/project-us-status.jade +++ b/app/partials/includes/modules/admin/project-us-status.jade @@ -23,7 +23,7 @@ section.project-us-status span.icon.icon-drag-v div.color-column - div.current-color(style="background: {{ value.color }}") + div.current-color(ng-style="{background: value.color}") div.status-name span {{ value.name }} @@ -46,7 +46,7 @@ section.project-us-status div.row.table-main.edition.hidden div.color-column(tg-color-selection, ng-model="value") - div.current-color(style="background: {{ value.color }}") + div.current-color(ng-style="{background: value.color}") include ../../components/select-color @@ -74,7 +74,7 @@ section.project-us-status form div.row.table-main.new-value.hidden div.color-column(tg-color-selection, ng-model="newValue") - div.current-color(style="background: {{ newValue.color }}") + div.current-color(ng-style="{background: newValue.color}") include ../../components/select-color div.status-name From 7c5a0e4662697546606ee8b080306bf6990cebdd Mon Sep 17 00:00:00 2001 From: Juanfran Date: Wed, 20 May 2015 15:35:27 +0200 Subject: [PATCH 191/194] Issue #2706 - fix textarea placeholder interpolation error --- app/coffee/modules/admin/lightboxes.coffee | 2 +- app/partials/admin/admin-project-profile.jade | 2 +- app/partials/common/components/editable-description.jade | 2 +- app/partials/common/history/history-base.jade | 2 +- app/partials/common/lightbox/lightbox-block.jade | 2 +- .../common/lightbox/lightbox-blocking-message-input.jade | 2 +- app/partials/includes/modules/lightbox-create-issue.jade | 4 ++-- app/partials/includes/modules/lightbox-feedback.jade | 2 +- app/partials/includes/modules/lightbox-issue-bulk.jade | 2 +- app/partials/includes/modules/lightbox-task-bulk.jade | 2 +- app/partials/includes/modules/lightbox-task-create-edit.jade | 4 ++-- app/partials/includes/modules/lightbox-us-bulk.jade | 2 +- app/partials/includes/modules/lightbox-us-create-edit.jade | 2 +- app/partials/includes/modules/wizard-create-project.jade | 2 +- app/partials/user/user-profile.jade | 2 +- app/partials/wiki/editable-wiki-content.jade | 2 +- 16 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/coffee/modules/admin/lightboxes.coffee b/app/coffee/modules/admin/lightboxes.coffee index fdf383d0..b8230dfa 100644 --- a/app/coffee/modules/admin/lightboxes.coffee +++ b/app/coffee/modules/admin/lightboxes.coffee @@ -33,7 +33,7 @@ MAX_MEMBERSHIP_FIELDSETS = 4 CreateMembersDirective = ($rs, $rootScope, $confirm, $loading, lightboxService, $compile) -> extraTextTemplate = """
-
""" diff --git a/app/partials/admin/admin-project-profile.jade b/app/partials/admin/admin-project-profile.jade index 908df503..fdb89da0 100644 --- a/app/partials/admin/admin-project-profile.jade +++ b/app/partials/admin/admin-project-profile.jade @@ -40,7 +40,7 @@ div.wrapper(tg-project-profile, ng-controller="ProjectProfileController as ctrl" fieldset label(for="project-description", translate="ADMIN.PROJECT_PROFILE.DESCRIPTION") - textarea(name="description", placeholder="{{'ADMIN.PROJECT_PROFILE.DESCRIPTION' | translate}}", id="project-description", + textarea(name="description", ng-attr-placeholder="{{'ADMIN.PROJECT_PROFILE.DESCRIPTION' | translate}}", id="project-description", ng-model="project.description", data-required="true") div diff --git a/app/partials/common/components/editable-description.jade b/app/partials/common/components/editable-description.jade index 150f0dc8..caa56bd6 100644 --- a/app/partials/common/components/editable-description.jade +++ b/app/partials/common/components/editable-description.jade @@ -3,7 +3,7 @@ span.edit.icon.icon-edit .edit-description - textarea(placeholder="{{'COMMON.DESCRIPTION.EMPTY' | translate}}", ng-model="item.description", tg-markitup="tg-markitup") + textarea(ng-attr-placeholder="{{'COMMON.DESCRIPTION.EMPTY' | translate}}", ng-model="item.description", tg-markitup="tg-markitup") a.help-markdown(href="https://taiga.io/support/taiga-markdown-syntax/", target="_blank", title="{{'COMMON.WYSIWYG.MARKDOWN_HELP' | translate}}") span.icon.icon-help span(translate="COMMON.WYSIWYG.MARKDOWN_HELP") diff --git a/app/partials/common/history/history-base.jade b/app/partials/common/history/history-base.jade index 2e96712e..ad720c45 100644 --- a/app/partials/common/history/history-base.jade +++ b/app/partials/common/history/history-base.jade @@ -11,7 +11,7 @@ section.history section.history-comments .comments-list div(tg-check-permission!="modify_<%- type %>", tg-toggle-comment, class="add-comment") - textarea(placeholder="{{'COMMENTS.TYPE_NEW_COMMENT' | translate}}", ng-model!="<%- ngmodel %>.comment", tg-markitup="tg-markitup") + textarea(ng-attr-placeholder="{{'COMMENTS.TYPE_NEW_COMMENT' | translate}}", ng-model!="<%- ngmodel %>.comment", tg-markitup="tg-markitup") <% if (mode !== "edit") { %> a(class="help-markdown", href="https://taiga.io/support/taiga-markdown-syntax/", target="_blank", title="{{'COMMON.WYSIWYG.MARKDOWN_HELP' | translate}}") span.icon.icon-help diff --git a/app/partials/common/lightbox/lightbox-block.jade b/app/partials/common/lightbox/lightbox-block.jade index f8c7ac18..b74ee6d4 100644 --- a/app/partials/common/lightbox/lightbox-block.jade +++ b/app/partials/common/lightbox/lightbox-block.jade @@ -3,7 +3,7 @@ a.close(href="", title="{{'COMMON.CLOSE' | translate}}") div.form h2.title fieldset - textarea.reason(placeholder="{{'COMMON.BLOCKED_REASON' | translate}}") + textarea.reason(ng-attr-placeholder="{{'COMMON.BLOCKED_REASON' | translate}}") a.button-green(href="") span(translate="COMMON.SAVE") diff --git a/app/partials/common/lightbox/lightbox-blocking-message-input.jade b/app/partials/common/lightbox/lightbox-blocking-message-input.jade index e3fb9d14..3c1c84c8 100644 --- a/app/partials/common/lightbox/lightbox-blocking-message-input.jade +++ b/app/partials/common/lightbox/lightbox-blocking-message-input.jade @@ -1,4 +1,4 @@ fieldset.blocked-note.hidden textarea(name="blocked_note", - placeholder="{{'COMMON.BLOCKED_NOTE' | translate}}", + ng-attr-placeholder="{{'COMMON.BLOCKED_NOTE' | translate}}", ng-model!="<%- ngmodel %>") diff --git a/app/partials/includes/modules/lightbox-create-issue.jade b/app/partials/includes/modules/lightbox-create-issue.jade index 92c01e3e..dae01853 100644 --- a/app/partials/includes/modules/lightbox-create-issue.jade +++ b/app/partials/includes/modules/lightbox-create-issue.jade @@ -3,7 +3,7 @@ a.close(href="", title="{{'COMMON.CLOSE' | translate}}") form h2.title(translate="LIGHTBOX.CREATE_ISSUE.TITLE") fieldset - input(type="text", ng-model="issue.subject", placeholder="{{'COMMON.FIELDS.SUBJECT' | translate}}", + input(type="text", ng-model="issue.subject", ng-attr-placeholder="{{'COMMON.FIELDS.SUBJECT' | translate}}", data-required="true", data-maxlength="500") div.fieldset-row fieldset @@ -17,7 +17,7 @@ form div.tags-block(tg-lb-tag-line, ng-model="issue.tags") fieldset - textarea.description(placeholder="{{'COMMON.FIELDS.DESCRIPTION' | translate}}", ng-model="issue.description") + textarea.description(ng-attr-placeholder="{{'COMMON.FIELDS.DESCRIPTION' | translate}}", ng-model="issue.description") // include lightbox-attachments button.button-green.submit-button(type="submit", title="{{'COMMON.CREATE' | translate}}", translate="COMMON.CREATE") diff --git a/app/partials/includes/modules/lightbox-feedback.jade b/app/partials/includes/modules/lightbox-feedback.jade index 1153a831..d985a8a6 100644 --- a/app/partials/includes/modules/lightbox-feedback.jade +++ b/app/partials/includes/modules/lightbox-feedback.jade @@ -4,6 +4,6 @@ form h2.title(translate="LIGHTBOX.FEEDBACK.TITLE") fieldset textarea(ng-model="feedback.comment", data-required="true", - placeholder="{{'LIGHTBOX.FEEDBACK.COMMENT' | translate}}") + ng-attr-placeholder="{{'LIGHTBOX.FEEDBACK.COMMENT' | translate}}") fieldset button.button-green.submit-button(type="submit", title="{{'LIGHTBOX.FEEDBACK.ACTION_SEND' | translate}}", translate="LIGHTBOX.FEEDBACK.ACTION_SEND") diff --git a/app/partials/includes/modules/lightbox-issue-bulk.jade b/app/partials/includes/modules/lightbox-issue-bulk.jade index 63ff4bcf..bef68aac 100644 --- a/app/partials/includes/modules/lightbox-issue-bulk.jade +++ b/app/partials/includes/modules/lightbox-issue-bulk.jade @@ -3,6 +3,6 @@ a.close(href="", title="{{'COMMON.CLOSE' | translate}}") form h2.title(translate="COMMON.NEW_BULK") fieldset - textarea(cols="200", wrap="off", tg-limit-line-length, placeholder="{{'COMMON.ONE_ITEM_LINE' | translate}}", ng-model="new.bulk", data-required="true", data-linewidth="200") + textarea(cols="200", wrap="off", tg-limit-line-length, ng-attr-placeholder="{{'COMMON.ONE_ITEM_LINE' | translate}}", ng-model="new.bulk", data-required="true", data-linewidth="200") button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", translate="COMMON.SAVE") diff --git a/app/partials/includes/modules/lightbox-task-bulk.jade b/app/partials/includes/modules/lightbox-task-bulk.jade index 140187ed..f07ef517 100644 --- a/app/partials/includes/modules/lightbox-task-bulk.jade +++ b/app/partials/includes/modules/lightbox-task-bulk.jade @@ -3,6 +3,6 @@ a.close(href="", title="{{'COMMON.CLOSE' | translate}}") form h2.title(translate="COMMON.NEW_BULK") fieldset - textarea(cols="200", wrap="off", tg-limit-line-length, placeholder="{{'COMMON.ONE_ITEM_LINE' | translate}}", ng-model="form.data", data-required="true") + textarea(cols="200", wrap="off", tg-limit-line-length, ng-attr-placeholder="{{'COMMON.ONE_ITEM_LINE' | translate}}", ng-model="form.data", data-required="true") button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", translate="COMMON.SAVE") diff --git a/app/partials/includes/modules/lightbox-task-create-edit.jade b/app/partials/includes/modules/lightbox-task-create-edit.jade index 592c7bf0..3c7c7ca7 100644 --- a/app/partials/includes/modules/lightbox-task-create-edit.jade +++ b/app/partials/includes/modules/lightbox-task-create-edit.jade @@ -3,7 +3,7 @@ a.close(href="", title="{{'COMMON.CLOSE' | translate}}") form h2.title(translate="LIGHTBOX.CREATE_EDIT_TASK.TITLE") fieldset - input(type="text", ng-model="task.subject", placeholder="{{'LIGHTBOX.CREATE_EDIT_TASK.PLACEHOLDER_SUBJECT' | translate}}", + input(type="text", ng-model="task.subject", ng-attr-placeholder="{{'LIGHTBOX.CREATE_EDIT_TASK.PLACEHOLDER_SUBJECT' | translate}}", data-required="true", data-maxlength="500") fieldset @@ -19,7 +19,7 @@ form div.tags-block(tg-lb-tag-line, ng-model="task.tags") fieldset - textarea.description(placeholder="{{'LIGHTBOX.CREATE_EDIT_TASK.PLACEHOLDER_SHORT_DESCRIPTION' | translate}}", ng-model="task.description") + textarea.description(ng-attr-placeholder="{{'LIGHTBOX.CREATE_EDIT_TASK.PLACEHOLDER_SHORT_DESCRIPTION' | translate}}", ng-model="task.description") div.settings fieldset.iocaine-flag(title="{{'COMMON.IOCAINE_TEXT' | translate}}") diff --git a/app/partials/includes/modules/lightbox-us-bulk.jade b/app/partials/includes/modules/lightbox-us-bulk.jade index 2a06e59b..e12442fd 100644 --- a/app/partials/includes/modules/lightbox-us-bulk.jade +++ b/app/partials/includes/modules/lightbox-us-bulk.jade @@ -3,6 +3,6 @@ a.close(href="", title="{{'COMMON.CLOSE' | translate}}") form h2.title(translate="COMMON.NEW_BULK") fieldset - textarea(cols="200", wrap="off", tg-limit-line-length, placeholder="{{'COMMON.ONE_ITEM_LINE' | translate}}", ng-model="new.bulk", data-required="true", data-linewidth="200") + textarea(cols="200", wrap="off", tg-limit-line-length, ng-attr-placeholder="{{'COMMON.ONE_ITEM_LINE' | translate}}", ng-model="new.bulk", data-required="true", data-linewidth="200") button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", translate="COMMON.SAVE") \ No newline at end of file diff --git a/app/partials/includes/modules/lightbox-us-create-edit.jade b/app/partials/includes/modules/lightbox-us-create-edit.jade index a3a1fd2f..067d5c27 100644 --- a/app/partials/includes/modules/lightbox-us-create-edit.jade +++ b/app/partials/includes/modules/lightbox-us-create-edit.jade @@ -17,7 +17,7 @@ form fieldset textarea.description(name="description", ng-model="us.description", - placeholder="{{'LIGHTBOX.CREATE_EDIT_US.PLACEHOLDER_DESCRIPTION' | translate}}") + ng-attr-placeholder="{{'LIGHTBOX.CREATE_EDIT_US.PLACEHOLDER_DESCRIPTION' | translate}}") div.settings fieldset.team-requirement input(type="checkbox", name="team_requirement", ng-model="us.team_requirement", diff --git a/app/partials/includes/modules/wizard-create-project.jade b/app/partials/includes/modules/wizard-create-project.jade index d2e47a81..e0d3f3d7 100644 --- a/app/partials/includes/modules/wizard-create-project.jade +++ b/app/partials/includes/modules/wizard-create-project.jade @@ -26,7 +26,7 @@ form fieldset input(type="text", name="name", ng-model="data.name", data-required="true", placeholder="{{'COMMON.FIELDS.NAME' | translate}}", maxlength="45") fieldset - textarea(name="description", ng-model="data.description", data-required="true", placeholder="{{'COMMON.FIELDS.DESCRIPTION' | translate}}") + textarea(name="description", ng-model="data.description", data-required="true", ng-attr-placeholder="{{'COMMON.FIELDS.DESCRIPTION' | translate}}") fieldset.wizard-action div a.button-prev.button.button-gray(href="", title="{{'PAGINATION.PREVIOUS' | translate}}", translate="PAGINATION.PREVIOUS") diff --git a/app/partials/user/user-profile.jade b/app/partials/user/user-profile.jade index 1530f00a..7709cf60 100644 --- a/app/partials/user/user-profile.jade +++ b/app/partials/user/user-profile.jade @@ -58,7 +58,7 @@ div.wrapper(tg-user-profile, ng-controller="UserSettingsController as ctrl", fieldset label(for="bio", translate="USER_PROFILE.FIELD.BIO") textarea(name="bio", id="bio", ng-model="user.bio", - placeholder="{{'USER_PROFILE.FIELD.PLACEHOLDER_BIO' | translate}}") + ng-attr-placeholder="{{'USER_PROFILE.FIELD.PLACEHOLDER_BIO' | translate}}") fieldset.submit button.button-green.submit-button(type="submit", title="{{'COMMON.SAVE' | translate}}", diff --git a/app/partials/wiki/editable-wiki-content.jade b/app/partials/wiki/editable-wiki-content.jade index de8d4ad3..9c9533ed 100644 --- a/app/partials/wiki/editable-wiki-content.jade +++ b/app/partials/wiki/editable-wiki-content.jade @@ -2,7 +2,7 @@ section.wysiwyg(tg-bind-html='wiki.html') span.edit.icon.icon-edit(title="{{'COMMON.EDIT' | translate}}") .edit-wiki-content(style='display: none;') - textarea(placeholder="{{'WIKI.PLACEHOLDER_PAGE' | translate}}", ng-model='wiki.content', tg-markitup='tg-markitup') + textarea(ng-attr-placeholder="{{'WIKI.PLACEHOLDER_PAGE' | translate}}", ng-model='wiki.content', tg-markitup='tg-markitup') a.help-markdown(href='https://taiga.io/support/taiga-markdown-syntax/', target='_blank', title="{{'COMMON.WYSIWYG.MARKDOWN_HELP' | translate}}") span.icon.icon-help span(translate="COMMON.WYSIWYG.MARKDOWN_HELP") From 9fe9f7834780adaf5c2453711581889222e439f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 20 May 2015 16:49:24 +0200 Subject: [PATCH 192/194] Update CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6820c68..d6c5e017 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Changelog # -## 1.7.0 ??? (unreleased) +## 1.7.0 Empetrum Nigrum (unreleased) ### Features - Make Taiga translatable (i18n support). From 8792efec39a5a0c49fa0633765d01b94604558df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Thu, 21 May 2015 08:26:11 +0200 Subject: [PATCH 193/194] Project menu background --- app/styles/dependencies/colors.scss | 2 ++ app/styles/modules/common/projects-nav.scss | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/styles/dependencies/colors.scss b/app/styles/dependencies/colors.scss index 85fa352b..3275443a 100755 --- a/app/styles/dependencies/colors.scss +++ b/app/styles/dependencies/colors.scss @@ -8,6 +8,7 @@ $gray-light: #b8b8b8; $whitish: #f5f5f5; $white: #fff; + $green-taiga: #72a114; $fresh-taiga: #9dce0a; $dark-taiga: #879b89; @@ -26,3 +27,4 @@ $red-amaranth: #e43050; $purple-eggplant: #810061; $yellow-pear: #bbe831; +$menu: #232323; diff --git a/app/styles/modules/common/projects-nav.scss b/app/styles/modules/common/projects-nav.scss index 1d958470..ca3d0671 100644 --- a/app/styles/modules/common/projects-nav.scss +++ b/app/styles/modules/common/projects-nav.scss @@ -1,5 +1,5 @@ .projects-nav { - background-color: $blackish; + background-color: $menu; display: flex; flex-direction: column; height: 100%; From 6e8101632270f01fc69df569b777a078627f72dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Thu, 21 May 2015 08:52:39 +0200 Subject: [PATCH 194/194] Table search results fix for IE11 --- .../modules/search/search-result-table.scss | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/app/styles/modules/search/search-result-table.scss b/app/styles/modules/search/search-result-table.scss index dbce9244..ed37282e 100644 --- a/app/styles/modules/search/search-result-table.scss +++ b/app/styles/modules/search/search-result-table.scss @@ -10,26 +10,27 @@ align-content: center; align-items: center; display: flex; + justify-content: space-between; padding: .5rem; &:hover { background: lighten($green-taiga, 60%); transition: background .2s ease-in; } .user-stories { - flex-basis: 0; - flex-grow: 5; + flex-basis: 300px; + flex-grow: 10; flex-shrink: 1; } .status, .points { - flex-basis: 100px; - flex-grow: 1; + flex-basis: 150px; + flex-grow: 0; padding: 0 1rem; text-align: center; } .assigned-to { - flex-basis: 250px; - flex-grow: 1; + flex-basis: 150px; + flex-grow: 0; padding: 0 1rem; } } @@ -79,11 +80,13 @@ align-items: center; display: flex; img { - flex-basis: 35px; + width: 35px; } figcaption { - display: inline-block; + display: flex; + flex-basis: 60%; margin-left: .5rem; + max-width: 60%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;